pax_global_header00006660000000000000000000000064135764356130014527gustar00rootroot0000000000000052 comment=9f9dba9f209403c1e1ccf717b1252dd0e2bd799c libwebsockets-3.2.1/000077500000000000000000000000001357643561300143725ustar00rootroot00000000000000libwebsockets-3.2.1/.gitignore000066400000000000000000000013241357643561300163620ustar00rootroot00000000000000#Ignore build files CMakeCache.txt CMakeFiles build cmake_install.cmake lws-minimal* Makefile .cproject .project config.h config.log config.status libtool stamp-h1 output/ win32port/ipch/ win32port/Debug*/ win32port/Release*/ win32port/server/Debug*/ win32port/server/Release*/ win32port/client/Debug*/ win32port/client/Release*/ win32port/libwebsocketswin32/Debug*/ win32port/libwebsocketswin32/Release*/ win32port/zlib/Debug*/ win32port/zlib/Release*/ *.vcxproj.user *.opensdf *.sdf *.suo *.su *.m4 *.a missing depcomp install-sh configure compile config.guess *~ *.orig autom4te.cache/ ltmain.sh config.sub ar-lib libwebsockets.pc build/ *.swp doc /build2/ /build3/ /cov-int/ /.vs/ /build-mtls/ /build-mingw64/ /n9/ /bb/ libwebsockets-3.2.1/.mailmap000066400000000000000000000001471357643561300160150ustar00rootroot00000000000000Andy Green Joakim Söderberg libwebsockets-3.2.1/.travis.yml000066400000000000000000000050411357643561300165030ustar00rootroot00000000000000env: # The next declaration is the encrypted COVERITY_SCAN_TOKEN, created # via the "travis encrypt" command using the project repo's public key global: - secure: "KhAdQ9ja+LBObWNQTYO7Df5J4DyOih6S+eerDMu8UPSO+CoWV2pWoQzbOfocjyOscGOwC+2PrrHDNZyGfqkCLDXg1BxynXPCFerHC1yc2IajvKpGXmAAygNIvp4KACDfGv/dkXrViqIzr/CdcNaU4vIMHSVb5xkeLi0W1dPnQOI=" matrix: - LWS_METHOD=lwsws CMAKE_ARGS="-DLWS_WITH_LWSWS=ON -DLWS_WITHOUT_EXTENSIONS=0 -DLWS_WITH_HTTP2=1 -DLWS_WITH_ACME=1 -DLWS_WITH_MINIMAL_EXAMPLES=1 -DCMAKE_BUILD_TYPE=DEBUG -DLWS_ROLE_DBUS=1 -DLWS_DBUS_INCLUDE2=/usr/lib/x86_64-linux-gnu/dbus-1.0/include/ -DLWS_WITH_GENCRYPTO=1 -DLWS_WITH_JOSE=1" - LWS_METHOD=lwsws2 CMAKE_ARGS="-DLWS_WITH_LWSWS=ON -DLWS_WITHOUT_EXTENSIONS=0 -DLWS_WITH_HTTP2=1 -DLWS_WITH_ACME=1 -DLWS_WITH_MINIMAL_EXAMPLES=1 -DCMAKE_BUILD_TYPE=DEBUG -DLWS_ROLE_DBUS=1 -DLWS_DBUS_INCLUDE2=/usr/lib/x86_64-linux-gnu/dbus-1.0/include/ -DLWS_WITH_LWS_DSH=1" - LWS_METHOD=default CMAKE_ARGS="-DLWS_WITH_MINIMAL_EXAMPLES=1" - LWS_METHOD=mbedtls CMAKE_ARGS="-DLWS_WITH_MBEDTLS=1 -DLWS_WITH_HTTP2=1 -DLWS_WITH_LWSWS=1 -DLWS_WITH_MINIMAL_EXAMPLES=1 -DLWS_WITH_JOSE=1 -DCMAKE_BUILD_TYPE=DEBUG" - LWS_METHOD=noserver CMAKE_ARGS="-DLWS_WITHOUT_SERVER=ON -DLWS_WITH_MINIMAL_EXAMPLES=1" - LWS_METHOD=noclient CMAKE_ARGS="-DLWS_WITHOUT_CLIENT=ON -DLWS_WITH_MINIMAL_EXAMPLES=1" - LWS_METHOD=noext CMAKE_ARGS="-DLWS_WITHOUT_EXTENSIONS=ON -DLWS_WITH_MINIMAL_EXAMPLES=1" - LWS_METHOD=nonetwork CMAKE_ARGS="-DLWS_WITH_NETWORK=0" - LWS_METHOD=libev CMAKE_ARGS="-DLWS_WITH_LIBEV=ON" - LWS_METHOD=noipv6 CMAKE_ARGS="-DLWS_IPV6=OFF" - LWS_METHOD=nossl CMAKE_ARGS="-DLWS_WITH_SSL=OFF" - LWS_METHOD=nodaemon CMAKE_ARGS="-DLWS_WITHOUT_DAEMONIZE=ON" - LWS_METHOD=cgi CMAKE_ARGS="-DLWS_WITH_CGI=ON" - LWS_METHOD=nologs CMAKE_ARGS="-DLWS_WITH_NO_LOGS=ON" - LWS_METHOD=smp CMAKE_ARGS="-DLWS_MAX_SMP=32 -DLWS_WITH_MINIMAL_EXAMPLES=1" - LWS_METHOD=nows CMAKE_ARGS="-DLWS_ROLE_WS=0" - LWS_METHOD=threadpool CMAKE_ARGS="-DLWS_WITH_THREADPOOL=1 -DLWS_WITH_MINIMAL_EXAMPLES=1" os: - linux - osx language: generic install: - ./scripts/travis_install.sh # - ./travis-tool.sh github_package jimhester/covr #after_success: # - Rscript -e 'covr::coveralls()' script: - ./scripts/travis_control.sh sudo: required dist: trusty addons: coverity_scan: project: name: "warmcat/libwebsockets" notification_email: andy@warmcat.com build_command_prepend: "mkdir build && cd build && cmake .." build_command: "cmake --build ." branch_pattern: coverity_scan libwebsockets-3.2.1/CMakeLists.txt000066400000000000000000002507111357643561300171400ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8.9) # General Advice # # For selecting between DEBUG / RELEASE, use -DCMAKE_BUILD_TYPE=DEBUG or =RELEASE # debug builds include source level debug info and extra logging set(LWS_WITH_BUNDLED_ZLIB_DEFAULT OFF) if(WIN32) set(LWS_WITH_BUNDLED_ZLIB_DEFAULT ON) endif() set(LWS_ROLE_RAW 1) set(LWS_WITH_POLL 1) # # Select features recommended for PC distro packaging # option(LWS_WITH_DISTRO_RECOMMENDED "Enable features recommended for distro packaging" OFF) option(LWS_FOR_GITOHASHI "Enable features recommended for use with gitohashi" OFF) # # Major individual features # option(LWS_WITH_NETWORK "Compile with network-related code" ON) option(LWS_ROLE_H1 "Compile with support for http/1 (needed for ws)" ON) option(LWS_ROLE_WS "Compile with support for websockets" ON) option(LWS_ROLE_DBUS "Compile with support for DBUS" OFF) option(LWS_ROLE_RAW_PROXY "Raw packet proxy" OFF) option(LWS_WITH_HTTP2 "Compile with server support for HTTP/2" ON) option(LWS_WITH_LWSWS "Libwebsockets Webserver" OFF) option(LWS_WITH_CGI "Include CGI (spawn process with network-connected stdin/out/err) APIs" OFF) option(LWS_IPV6 "Compile with support for ipv6" OFF) option(LWS_UNIX_SOCK "Compile with support for UNIX domain socket" OFF) option(LWS_WITH_PLUGINS "Support plugins for protocols and extensions" OFF) option(LWS_WITH_HTTP_PROXY "Support for HTTP proxying" OFF) option(LWS_WITH_ZIP_FOPS "Support serving pre-zipped files" OFF) option(LWS_WITH_SOCKS5 "Allow use of SOCKS5 proxy on client connections" OFF) option(LWS_WITH_GENERIC_SESSIONS "With the Generic Sessions plugin" OFF) option(LWS_WITH_PEER_LIMITS "Track peers and restrict resources a single peer can allocate" OFF) option(LWS_WITH_ACCESS_LOG "Support generating Apache-compatible access logs" OFF) option(LWS_WITH_RANGES "Support http ranges (RFC7233)" OFF) option(LWS_WITH_SERVER_STATUS "Support json + jscript server monitoring" OFF) option(LWS_WITH_THREADPOOL "Managed worker thread pool support (relies on pthreads)" OFF) option(LWS_WITH_HTTP_STREAM_COMPRESSION "Support HTTP stream compression" OFF) option(LWS_WITH_HTTP_BROTLI "Also offer brotli http stream compression (requires LWS_WITH_HTTP_STREAM_COMPRESSION)" OFF) option(LWS_WITH_ACME "Enable support for ACME automatic cert acquisition + maintenance (letsencrypt etc)" OFF) option(LWS_WITH_HUBBUB "Enable libhubbub rewriting support" OFF) option(LWS_WITH_FTS "Full Text Search support" OFF) # # TLS library options... all except mbedTLS are basically OpenSSL variants. # option(LWS_WITH_SSL "Include SSL support (defaults to OpenSSL or similar, mbedTLS if LWS_WITH_MBEDTLS is set)" ON) option(LWS_WITH_MBEDTLS "Use mbedTLS (>=2.0) replacement for OpenSSL. When setting this, you also may need to specify LWS_MBEDTLS_LIBRARIES and LWS_MBEDTLS_INCLUDE_DIRS" OFF) option(LWS_WITH_BORINGSSL "Use BoringSSL replacement for OpenSSL" OFF) option(LWS_WITH_CYASSL "Use CyaSSL replacement for OpenSSL. When setting this, you also need to specify LWS_CYASSL_LIBRARIES and LWS_CYASSL_INCLUDE_DIRS" OFF) option(LWS_WITH_WOLFSSL "Use wolfSSL replacement for OpenSSL. When setting this, you also need to specify LWS_WOLFSSL_LIBRARIES and LWS_WOLFSSL_INCLUDE_DIRS" OFF) option(LWS_SSL_CLIENT_USE_OS_CA_CERTS "SSL support should make use of the OS-installed CA root certs" ON) # # Event library options (may select multiple, or none for default poll() # option(LWS_WITH_LIBEV "Compile with support for libev" OFF) option(LWS_WITH_LIBUV "Compile with support for libuv" OFF) option(LWS_WITH_LIBEVENT "Compile with support for libevent" OFF) # # Static / Dynamic build options # option(LWS_WITH_STATIC "Build the static version of the library" ON) option(LWS_WITH_SHARED "Build the shared version of the library" ON) option(LWS_LINK_TESTAPPS_DYNAMIC "Link the test apps to the shared version of the library. Default is to link statically" OFF) option(LWS_STATIC_PIC "Build the static version of the library with position-independent code" OFF) # # Specific platforms # option(LWS_WITH_ESP32 "Build for ESP32" OFF) option(LWS_WITH_ESP32_HELPER "Build ESP32 helper" OFF) option(LWS_PLAT_OPTEE "Build for OPTEE" OFF) # # Client / Server / Test Apps build control # option(LWS_WITHOUT_CLIENT "Don't build the client part of the library" OFF) option(LWS_WITHOUT_SERVER "Don't build the server part of the library" OFF) option(LWS_WITHOUT_TESTAPPS "Don't build the libwebsocket-test-apps" OFF) option(LWS_WITHOUT_TEST_SERVER "Don't build the test server" OFF) option(LWS_WITHOUT_TEST_SERVER_EXTPOLL "Don't build the test server version that uses external poll" OFF) option(LWS_WITHOUT_TEST_PING "Don't build the ping test application" OFF) option(LWS_WITHOUT_TEST_CLIENT "Don't build the client test application" OFF) # # Extensions (permessage-deflate) # option(LWS_WITHOUT_EXTENSIONS "Don't compile with extensions" ON) # # Helpers + misc # option(LWS_WITHOUT_BUILTIN_GETIFADDRS "Don't use the BSD getifaddrs implementation from libwebsockets if it is missing (this will result in a compilation error) ... The default is to assume that your libc provides it. On some systems such as uclibc it doesn't exist." OFF) option(LWS_FALLBACK_GETHOSTBYNAME "Also try to do dns resolution using gethostbyname if getaddrinfo fails" OFF) option(LWS_WITHOUT_BUILTIN_SHA1 "Don't build the lws sha-1 (eg, because openssl will provide it" OFF) option(LWS_WITH_LATENCY "Build latency measuring code into the library" OFF) option(LWS_WITHOUT_DAEMONIZE "Don't build the daemonization api" ON) option(LWS_SSL_SERVER_WITH_ECDH_CERT "Include SSL server use ECDH certificate" OFF) option(LWS_WITH_LEJP "With the Lightweight JSON Parser" ON) option(LWS_WITH_SQLITE3 "Require SQLITE3 support" OFF) option(LWS_WITH_STRUCT_JSON "Generic struct serialization to and from JSON" ON) option(LWS_WITH_STRUCT_SQLITE3 "Generic struct serialization to and from SQLITE3" OFF) option(LWS_WITH_SMTP "Provide SMTP support" OFF) if (WIN32 OR LWS_WITH_ESP32) option(LWS_WITH_DIR "Directory scanning api support" OFF) option(LWS_WITH_LEJP_CONF "With LEJP configuration parser as used by lwsws" OFF) else() option(LWS_WITH_DIR "Directory scanning api support" ON) option(LWS_WITH_LEJP_CONF "With LEJP configuration parser as used by lwsws" ON) endif() option(LWS_WITH_NO_LOGS "Disable all logging from being compiled in" OFF) option(LWS_AVOID_SIGPIPE_IGN "Android 7+ reportedly needs this" OFF) option(LWS_WITH_STATS "Keep statistics of lws internal operations" OFF) option(LWS_WITH_JOSE "JSON Web Signature / Encryption / Keys (RFC7515/6/) API" OFF) option(LWS_WITH_GENCRYPTO "Enable support for Generic Crypto apis independent of TLS backend" OFF) option(LWS_WITH_SELFTESTS "Selftests run at context creation" OFF) option(LWS_WITH_GCOV "Build with gcc gcov coverage instrumentation" OFF) option(LWS_WITH_EXPORT_LWSTARGETS "Export libwebsockets CMake targets. Disable if they conflict with an outer cmake project." ON) option(LWS_REPRODUCIBLE "Build libwebsockets reproducible. It removes the build user and hostname from the build" ON) option(LWS_WITH_MINIMAL_EXAMPLES "Also build the normally standalone minimal examples, for QA" OFF) option(LWS_WITH_LWSAC "lwsac Chunk Allocation api" ON) option(LWS_WITH_CUSTOM_HEADERS "Store and allow querying custom HTTP headers (H1 only)" ON) option(LWS_WITH_DISKCACHE "Hashed cache directory with lazy LRU deletion to size limit" OFF) option(LWS_WITH_ASAN "Build with gcc runtime sanitizer options enabled (needs libasan)" OFF) option(LWS_WITH_DIR "Directory scanning api support" OFF) option(LWS_WITH_LEJP_CONF "With LEJP configuration parser as used by lwsws" OFF) option(LWS_WITH_ZLIB "Include zlib support (required for extensions)" OFF) option(LWS_WITH_BUNDLED_ZLIB "Use bundled zlib version (Windows only)" ${LWS_WITH_BUNDLED_ZLIB_DEFAULT}) option(LWS_WITH_MINIZ "Use miniz instead of zlib" OFF) option(LWS_WITH_DEPRECATED_LWS_DLL "Migrate to lws_dll2 instead ASAP" OFF) option(LWS_WITH_SEQUENCER "lws_seq_t support" ON) option(LWS_WITH_EXTERNAL_POLL "Support external POLL integration using callback messages (not recommended)" OFF) option(LWS_WITH_LWS_DSH "Support lws_dsh_t Disordered Shared Heap" OFF) # # to use miniz, enable both LWS_WITH_ZLIB and LWS_WITH_MINIZ # # End of user settings # # Workaround for ESP-IDF # Detect ESP_PLATFORM environment flag, if exist, set LWS_WITH_ESP32. # Otherwise the user may not be able to run configuration ESP-IDF in the first time. if(ESP_PLATFORM) message(STATUS "ESP-IDF enabled") set(LWS_WITH_ESP32 ON) else() set(LWS_WITH_ESP32_HELPER OFF) endif() if (WIN32 OR LWS_WITH_ESP32) message(STATUS "No LWS_WITH_DIR and LWS_WITH_DIR") set(LWS_WITH_DIR OFF) set(LWS_WITH_LEJP_CONF OFF) message("LWS_WITH_DIR ${LWS_WITH_DIR}") else() message(STATUS "Compiled with LWS_WITH_DIR and LWS_WITH_DIR") set(LWS_WITH_DIR ON) set(LWS_WITH_LEJP_CONF ON) endif() if (LWS_FOR_GITOHASHI) set(LWS_WITH_THREADPOOL 1) set(LWS_WITH_HTTP2 1) set(LWS_UNIX_SOCK 1) set(LWS_WITH_HTTP_PROXY 1) set(LWS_WITH_FTS 1) set(LWS_WITH_DISKCACHE 1) set(LWS_WITH_LWSAC 1) set(LWS_WITH_LEJP_CONF 1) endif() if(LWS_WITH_DISTRO_RECOMMENDED) set(LWS_WITH_HTTP2 1) set(LWS_WITH_LWSWS 1) set(LWS_WITH_CGI 1) set(LWS_IPV6 1) set(LWS_WITH_ZIP_FOPS 1) set(LWS_WITH_SOCKS5 1) set(LWS_WITH_RANGES 1) set(LWS_WITH_ACME 1) set(LWS_WITH_SERVER_STATUS 1) set(LWS_WITH_LIBUV 1) set(LWS_WITH_LIBEV 1) # libev + libevent cannot coexist at build-time set(LWS_WITH_LIBEVENT 0) set(LWS_WITHOUT_EXTENSIONS 0) set(LWS_ROLE_DBUS 1) set(LWS_WITH_FTS 1) set(LWS_WITH_THREADPOOL 1) set(LWS_UNIX_SOCK 1) set(LWS_WITH_HTTP_PROXY 1) set(LWS_WITH_DISKCACHE 1) set(LWS_WITH_LWSAC 1) set(LWS_WITH_LEJP_CONF 1) set(LWS_WITH_PLUGINS 1) set(LWS_ROLE_RAW_PROXY 1) set(LWS_WITH_GENCRYPTO 1) set(LWS_WITH_JOSE 1) endif() if (NOT LWS_WITH_NETWORK) set(LWS_ROLE_H1 0) set(LWS_ROLE_WS 0) set(LWS_ROLE_RAW 0) set(LWS_WITHOUT_EXTENSIONS 1) set(LWS_WITHOUT_SERVER 1) set(LWS_WITHOUT_CLIENT 1) set(LWS_WITH_HTTP2 0) set(LWS_WITH_SOCKS5 0) set(LWS_UNIX_SOCK 0) set(LWS_WITH_HTTP_PROXY 0) set(LWS_WITH_PLUGINS 0) set(LWS_WITH_LWSWS 0) set(LWS_WITH_CGI 0) set(LWS_ROLE_RAW_PROXY 0) set(LWS_WITH_PEER_LIMITS 0) set(LWS_WITH_GENERIC_SESSIONS 0) set(LWS_WITH_HTTP_STREAM_COMPRESSION 0) set(LWS_WITH_HTTP_BROTLI 0) set(LWS_WITH_POLL 0) set(LWS_WITH_SEQUENCER 0) set(LWS_ROLE_DBUS 0) set(LWS_WITH_LWS_DSH 0) endif() if (LWS_WITH_STRUCT_SQLITE3) set(LWS_WITH_SQLITE3 1) endif() # do you care about this? Then send me a patch where it disables it on travis # but allows it on APPLE if (APPLE) set(LWS_ROLE_DBUS 0) endif() if(NOT DEFINED CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type") endif() # microsoft... that's why you can't have nice things if (WIN32 OR LWS_WITH_ESP32) set(LWS_UNIX_SOCK 0) endif() if (LWS_WITH_ESP32) set(LWS_WITH_LWSAC 0) set(LWS_WITH_FTS 0) endif() project(libwebsockets C) set(PACKAGE "libwebsockets") set(CPACK_PACKAGE_NAME "${PACKAGE}") set(CPACK_PACKAGE_VERSION_MAJOR "3") set(CPACK_PACKAGE_VERSION_MINOR "2") set(CPACK_PACKAGE_VERSION_PATCH "0") set(CPACK_PACKAGE_RELEASE 1) set(CPACK_GENERATOR "RPM") set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") set(CPACK_PACKAGE_VENDOR "andy@warmcat.com") set(CPACK_PACKAGE_CONTACT "andy@warmcat.com") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PACKAGE} ${PACKAGE_VERSION}") set(SOVERSION "15") if(NOT CPACK_GENERATOR) if(UNIX) set(CPACK_GENERATOR "TGZ") else() set(CPACK_GENERATOR "ZIP") endif() endif() set(CPACK_SOURCE_GENERATOR "TGZ") set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") set(VERSION "${CPACK_PACKAGE_VERSION}") set(LWS_LIBRARY_VERSION ${CPACK_PACKAGE_VERSION}) set(LWS_LIBRARY_VERSION_MAJOR ${CPACK_PACKAGE_VERSION_MAJOR}) set(LWS_LIBRARY_VERSION_MINOR ${CPACK_PACKAGE_VERSION_MINOR}) set(LWS_LIBRARY_VERSION_PATCH ${CPACK_PACKAGE_VERSION_PATCH}) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/") message(STATUS "CMAKE_TOOLCHAIN_FILE='${CMAKE_TOOLCHAIN_FILE}'") if(WIN32) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/win32port/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/win32port/version.rc @ONLY) set(RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/win32port/version.rc) endif() # Try to find the current Git hash. find_package(Git) if(GIT_EXECUTABLE) execute_process( WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMAND "${GIT_EXECUTABLE}" describe --tags OUTPUT_VARIABLE GIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ) set(LWS_BUILD_HASH ${GIT_HASH}) # append the build user and hostname if(NOT LWS_REPRODUCIBLE) execute_process( WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMAND "whoami" OUTPUT_VARIABLE GIT_USER OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMAND "hostname" OUTPUT_VARIABLE GIT_HOST OUTPUT_STRIP_TRAILING_WHITESPACE ) string(REGEX REPLACE "([^\\])[\\]([^\\])" "\\1\\\\\\\\\\2" GIT_USER ${GIT_USER}) set(LWS_BUILD_HASH ${GIT_USER}@${GIT_HOST}-${GIT_HASH}) endif() message("Git commit hash: ${LWS_BUILD_HASH}") endif() # translate old functionality enables to set up ROLE enables so nothing changes if (LWS_WITH_HTTP2 AND LWS_WITHOUT_SERVER) set(LWS_WITH_HTTP2 0) message("HTTP2 disabled due to LWS_WITHOUT_SERVER") endif() if (LWS_WITH_HTTP2) set(LWS_ROLE_H2 1) endif() if (LWS_WITH_CGI) set(LWS_ROLE_CGI 1) endif() if (NOT LWS_ROLE_WS) set(LWS_WITHOUT_EXTENSIONS 1) endif() include_directories(include plugins) if (LWS_WITH_LWSWS) message(STATUS "LWS_WITH_LWSWS --> Enabling LWS_WITH_PLUGINS and LWS_WITH_LIBUV") set(LWS_WITH_PLUGINS 1) set(LWS_WITH_LIBUV 1) set(LWS_WITH_ACCESS_LOG 1) set(LWS_WITH_SERVER_STATUS 1) set(LWS_WITH_LEJP 1) set(LWS_WITH_LEJP_CONF 1) set(LWS_WITH_PEER_LIMITS 1) set(LWS_ROLE_RAW_PROXY 1) endif() # sshd plugin if (LWS_WITH_PLUGINS) set(LWS_WITH_GENCRYPTO 1) endif() if (LWS_ROLE_RAW_PROXY) set (LWS_WITHOUT_CLIENT 0) set (LWS_WITHOUT_SERVER 0) endif() if (LWS_WITH_ACME) set (LWS_WITHOUT_CLIENT 0) set (LWS_WITHOUT_SERVER 0) set (LWS_WITH_JOSE 1) endif() if (LWS_WITH_JOSE) set(LWS_WITH_LEJP 1) set(LWS_WITH_GENCRYPTO 1) endif() if (LWS_WITH_PLUGINS AND NOT LWS_WITH_LIBUV) message(STATUS "LWS_WITH_PLUGINS --> Enabling LWS_WITH_LIBUV") set(LWS_WITH_LIBUV 1) endif() if (LWS_WITH_PLUGINS OR LWS_WITH_CGI) # sshd plugin set(LWS_WITH_GENCRYPTO 1) endif() if (LWS_WITH_GENERIC_SESSIONS) set(LWS_WITH_SQLITE3 1) set(LWS_WITH_SMTP 1) set(LWS_WITH_STRUCT_SQLITE3 1) endif() if (LWS_WITH_ESP32) set(LWS_WITH_SHARED OFF) set(LWS_WITH_MBEDTLS ON) # set(LWS_WITHOUT_CLIENT ON) set(LWS_WITHOUT_TESTAPPS ON) set(LWS_WITHOUT_EXTENSIONS ON) set(LWS_WITH_PLUGINS OFF) set(LWS_WITH_RANGES ON) # this implies no pthreads in the lib set(LWS_MAX_SMP 1) set(LWS_HAVE_MALLOC 1) set(LWS_HAVE_REALLOC 1) set(LWS_HAVE_GETIFADDRS 1) set(LWS_WITH_ZIP_FOPS 1) set(LWS_WITH_CUSTOM_HEADERS 0) endif() if (WIN32) set(LWS_MAX_SMP 1) set(LWS_WITH_THREADPOOL 0) endif() if (LWS_WITHOUT_SERVER) set(LWS_WITH_LWSWS OFF) endif() if (LWS_WITH_LEJP_CONF) set(LWS_WITH_DIR 1) endif() # confirm H1 relationships if (NOT LWS_ROLE_H1 AND LWS_ROLE_H2) message(FATAL_ERROR "H2 requires LWS_ROLE_H1") endif() if (NOT LWS_ROLE_H1 AND LWS_ROLE_WS) message(FATAL_ERROR "WS requires LWS_ROLE_H1") endif() if (NOT LWS_ROLE_H1 AND LWS_ROLE_CGI) message(FATAL_ERROR "CGI requires LWS_ROLE_H1") endif() # confirm HTTP relationships if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_HTTP_PROXY) message(FATAL_ERROR "LWS_WITH_LWSWS requires LWS_ROLE_H1") endif() if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_HTTP_PROXY) message(FATAL_ERROR "LWS_WITH_HTTP_PROXY requires LWS_ROLE_H1") endif() if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_RANGES) message(FATAL_ERROR "LWS_WITH_RANGES requires LWS_ROLE_H1") endif() if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_ACCESS_LOG) message(FATAL_ERROR "LWS_WITH_ACCESS_LOG requires LWS_ROLE_H1") endif() if (LWS_WITH_HTTP_PROXY AND (LWS_WITHOUT_CLIENT OR LWS_WITHOUT_SERVER)) message("You have to enable both client and server for http proxy") set(LWS_WITH_HTTP_PROXY 0) endif() # Allow the user to override installation directories. set(LWS_INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries") set(LWS_INSTALL_BIN_DIR bin CACHE PATH "Installation directory for executables") set(LWS_INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files") set(LWS_INSTALL_EXAMPLES_DIR bin CACHE PATH "Installation directory for example files") # Allow the user to use the old CyaSSL options/library in stead of wolfSSL if (LWS_WITH_CYASSL AND LWS_WITH_WOLFSSL) message(FATAL_ERROR "LWS_WITH_CYASSL and LWS_WITH_WOLFSSL are mutually exclusive!") endif() if (LWS_WITH_CYASSL) # Copy CyaSSL options to the wolfSSL options set(LWS_WITH_WOLFSSL ${LWS_WITH_CYASSL} CACHE BOOL "Use wolfSSL/CyaSSL instead of OpenSSL" FORCE) set(LWS_WOLFSSL_LIBRARIES ${LWS_CYASSL_LIBRARIES} CACHE PATH "Path to wolfSSL/CyaSSL libraries" FORCE) set(LWS_WOLFSSL_INCLUDE_DIRS ${LWS_CYASSL_INCLUDE_DIRS} CACHE PATH "Path to wolfSSL/CyaSSL header files" FORCE) endif() if (NOT (LWS_WITH_STATIC OR LWS_WITH_SHARED)) message(FATAL_ERROR "Makes no sense to compile with neither static nor shared libraries.") endif() if (NOT LWS_WITHOUT_EXTENSIONS OR LWS_WITH_ZIP_FOPS) set(LWS_WITH_ZLIB 1) endif() # if you gave LWS_WITH_MINIZ, point to MINIZ here if not found # automatically set(LWS_ZLIB_LIBRARIES CACHE PATH "Path to the zlib/miniz library") set(LWS_ZLIB_INCLUDE_DIRS CACHE PATH "Path to the zlib/miniz include directory") set(LWS_OPENSSL_LIBRARIES CACHE PATH "Path to the OpenSSL library") set(LWS_OPENSSL_INCLUDE_DIRS CACHE PATH "Path to the OpenSSL include directory") set(LWS_WOLFSSL_LIBRARIES CACHE PATH "Path to the wolfSSL library") set(LWS_WOLFSSL_INCLUDE_DIRS CACHE PATH "Path to the wolfSSL include directory") set(LWS_LIBEV_LIBRARIES CACHE PATH "Path to the libev library") set(LWS_LIBEV_INCLUDE_DIRS CACHE PATH "Path to the libev include directory") set(LWS_LIBUV_LIBRARIES CACHE PATH "Path to the libuv library") set(LWS_LIBUV_INCLUDE_DIRS CACHE PATH "Path to the libuv include directory") set(LWS_SQLITE3_LIBRARIES CACHE PATH "Path to the sqlite3 library") set(LWS_SQLITE3_INCLUDE_DIRS CACHE PATH "Path to the sqlite3 include directory") set(LWS_LIBEVENT_INCLUDE_DIRS CACHE PATH "Path to the libevent include directory") set(LWS_LIBEVENT_LIBRARIES CACHE PATH "Path to the libevent library") if (NOT LWS_WITH_SSL) set(LWS_WITHOUT_BUILTIN_SHA1 OFF) endif() if (LWS_WITH_BORINGSSL) # boringssl deprecated EVP_PKEY set (LWS_WITH_GENHASH OFF) endif() if (LWS_WITH_SSL AND NOT LWS_WITH_WOLFSSL AND NOT LWS_WITH_MBEDTLS) if ("${LWS_OPENSSL_LIBRARIES}" STREQUAL "" OR "${LWS_OPENSSL_INCLUDE_DIRS}" STREQUAL "") else() if (NOT LWS_WITH_ESP32) set(OPENSSL_LIBRARIES ${LWS_OPENSSL_LIBRARIES}) endif() set(OPENSSL_INCLUDE_DIRS ${LWS_OPENSSL_INCLUDE_DIRS}) set(OPENSSL_FOUND 1) endif() endif() if (LWS_WITH_SSL AND LWS_WITH_WOLFSSL) if ("${LWS_WOLFSSL_LIBRARIES}" STREQUAL "" OR "${LWS_WOLFSSL_INCLUDE_DIRS}" STREQUAL "") if (NOT WOLFSSL_FOUND) if (LWS_WITH_CYASSL) message(FATAL_ERROR "You must set LWS_CYASSL_LIBRARIES and LWS_CYASSL_INCLUDE_DIRS when LWS_WITH_CYASSL is turned on.") else() message(FATAL_ERROR "You must set LWS_WOLFSSL_LIBRARIES and LWS_WOLFSSL_INCLUDE_DIRS when LWS_WITH_WOLFSSL is turned on.") endif() endif() else() set(WOLFSSL_LIBRARIES ${LWS_WOLFSSL_LIBRARIES}) set(WOLFSSL_INCLUDE_DIRS ${LWS_WOLFSSL_INCLUDE_DIRS}) set(WOLFSSL_FOUND 1) endif() set(USE_WOLFSSL 1) set(LWS_WITH_TLS 1) if (LWS_WITH_CYASSL) set(USE_OLD_CYASSL 1) endif() endif() if (LWS_WITH_SSL AND LWS_WITH_MBEDTLS) if ("${LWS_MBEDTLS_LIBRARIES}" STREQUAL "" OR "${LWS_MBEDTLS_INCLUDE_DIRS}" STREQUAL "" AND NOT LWS_WITH_ESP32) find_path(LWS_MBEDTLS_INCLUDE_DIRS mbedtls/ssl.h) find_library(MBEDTLS_LIBRARY mbedtls) find_library(MBEDX509_LIBRARY mbedx509) find_library(MBEDCRYPTO_LIBRARY mbedcrypto) set(LWS_MBEDTLS_LIBRARIES "${MBEDTLS_LIBRARY}" "${MBEDX509_LIBRARY}" "${MBEDCRYPTO_LIBRARY}") include(FindPackageHandleStandardArgs) find_package_handle_standard_args(MBEDTLS DEFAULT_MSG LWS_MBEDTLS_INCLUDE_DIRS MBEDTLS_LIBRARY MBEDX509_LIBRARY MBEDCRYPTO_LIBRARY) mark_as_advanced(LWS_MBEDTLS_INCLUDE_DIRS MBEDTLS_LIBRARY MBEDX509_LIBRARY MBEDCRYPTO_LIBRARY) if ("${LWS_MBEDTLS_LIBRARIES}" STREQUAL "" OR "${LWS_MBEDTLS_INCLUDE_DIRS}" STREQUAL "") message(FATAL_ERROR "You must set LWS_MBEDTLS_LIBRARIES and LWS_MBEDTLS_INCLUDE_DIRS when LWS_WITH_MBEDTLS is turned on.") endif() endif() set(MBEDTLS_LIBRARIES ${LWS_MBEDTLS_LIBRARIES}) set(MBEDTLS_INCLUDE_DIRS ${LWS_MBEDTLS_INCLUDE_DIRS}) set(MBEDTLS_FOUND 1) set(USE_MBEDTLS 1) endif() if (LWS_WITH_HTTP_STREAM_COMPRESSION) set(LWS_WITH_ZLIB 1) endif() if (LWS_WITH_ZLIB AND NOT LWS_WITH_BUNDLED_ZLIB) if ("${LWS_ZLIB_LIBRARIES}" STREQUAL "" OR "${LWS_ZLIB_INCLUDE_DIRS}" STREQUAL "") else() set(ZLIB_LIBRARIES ${LWS_ZLIB_LIBRARIES}) set(ZLIB_INCLUDE_DIRS ${LWS_ZLIB_INCLUDE_DIRS}) set(ZLIB_FOUND 1) endif() endif() if (LWS_WITH_LIBEV) if ("${LWS_LIBEV_LIBRARIES}" STREQUAL "" OR "${LWS_LIBEV_INCLUDE_DIRS}" STREQUAL "") else() set(LIBEV_LIBRARIES ${LWS_LIBEV_LIBRARIES}) set(LIBEV_INCLUDE_DIRS ${LWS_LIBEV_INCLUDE_DIRS}) set(LIBEV_FOUND 1) endif() endif() if (LWS_WITH_LIBUV) if ("${LWS_LIBUV_LIBRARIES}" STREQUAL "" OR "${LWS_LIBUV_INCLUDE_DIRS}" STREQUAL "") else() set(LIBUV_LIBRARIES ${LWS_LIBUV_LIBRARIES}) set(LIBUV_INCLUDE_DIRS ${LWS_LIBUV_INCLUDE_DIRS}) set(LIBUV_FOUND 1) endif() endif() if (LWS_WITH_LIBEVENT) if ("${LWS_LIBEVENT_LIBRARIES}" STREQUAL "" OR "${LWS_LIBEVENT_INCLUDE_DIRS}" STREQUAL "") else() set(LIBEVENT_LIBRARIES ${LWS_LIBEVENT_LIBRARIES}) set(LIBEVENT_INCLUDE_DIRS ${LWS_LIBEVENT_INCLUDE_DIRS}) set(LIBEVENT_FOUND 1) endif() endif() if (LWS_WITH_SQLITE3) if ("${LWS_SQLITE3_LIBRARIES}" STREQUAL "" OR "${LWS_SQLITE3_INCLUDE_DIRS}" STREQUAL "") else() set(SQLITE3_LIBRARIES ${LWS_SQLITE3_LIBRARIES}) set(SQLITE3_INCLUDE_DIRS ${LWS_SQLITE3_INCLUDE_DIRS}) set(SQLITE3_FOUND 1) endif() endif() if (LWS_WITH_LIBEV AND LWS_WITH_LIBEVENT) message(FATAL_ERROR "Sorry libev and libevent conflict with each others' namespace, you can only have one or the other") endif() # The base dir where the test-apps look for the SSL certs. set(LWS_OPENSSL_CLIENT_CERTS ../share CACHE PATH "Server SSL certificate directory") if (WIN32) set(LWS_OPENSSL_CLIENT_CERTS . CACHE PATH "Client SSL certificate directory") if (LWS_UNIX_SOCK) set(LWS_UNIX_SOCK OFF) message(WARNING "Windows does not support UNIX domain sockets") endif() else() set(LWS_OPENSSL_CLIENT_CERTS /etc/pki/tls/certs/ CACHE PATH "Client SSL certificate directory") endif() # LWS_OPENSSL_SUPPORT deprecated... use LWS_WITH_TLS if (LWS_WITH_SSL OR LWS_WITH_MBEDTLS) set(LWS_OPENSSL_SUPPORT 1) set(LWS_WITH_TLS 1) endif() if (LWS_SSL_CLIENT_USE_OS_CA_CERTS) set(LWS_SSL_CLIENT_USE_OS_CA_CERTS 1) endif() if (LWS_WITH_LATENCY) set(LWS_LATENCY 1) endif() if (LWS_WITHOUT_DAEMONIZE OR WIN32) set(LWS_NO_DAEMONIZE 1) endif() if (LWS_WITHOUT_SERVER) set(LWS_NO_SERVER 1) endif() if (LWS_WITHOUT_CLIENT) set(LWS_NO_CLIENT 1) endif() if (LWS_WITH_LIBEV) set(LWS_WITH_LIBEV 1) endif() if (LWS_WITH_LIBUV) set(LWS_WITH_LIBUV 1) endif() if (LWS_WITH_LIBEVENT) set(LWS_WITH_LIBEVENT 1) endif() if (LWS_IPV6) set(LWS_WITH_IPV6 1) endif() if (LWS_UNIX_SOCK) set(LWS_WITH_UNIX_SOCK 1) endif() if (LWS_WITH_HTTP2) set(LWS_WITH_HTTP2 1) endif() if ("${LWS_MAX_SMP}" STREQUAL "") set(LWS_MAX_SMP 1) endif() # using any abstract protocol enables LWS_WITH_ABSTRACT if (LWS_WITH_SMTP) set(LWS_WITH_ABSTRACT 1) endif() if (MINGW) set(LWS_MINGW_SUPPORT 1) set(CMAKE_C_FLAGS "-D__USE_MINGW_ANSI_STDIO ${CMAKE_C_FLAGS}") add_definitions(-DWINVER=0x0601 -D_WIN32_WINNT=0x0601) endif() if (LWS_SSL_SERVER_WITH_ECDH_CERT) set(LWS_SSL_SERVER_WITH_ECDH_CERT 1) endif() include_directories("${PROJECT_BINARY_DIR}") include(CheckCSourceCompiles) # Check for different inline keyword versions. foreach(KEYWORD "inline" "__inline__" "__inline") set(CMAKE_REQUIRED_DEFINITIONS "-DKEYWORD=${KEYWORD}") CHECK_C_SOURCE_COMPILES( " #include static KEYWORD void a() {} int main(int argc, char **argv) { a(); return 0; } " LWS_HAVE_${KEYWORD}) endforeach() if (NOT LWS_HAVE_inline) if (LWS_HAVE___inline__) set(inline __inline__) elseif(LWS_HAVE___inline) set(inline __inline) endif() endif() # Put the libraries and binaries that get built into directories at the # top of the build tree rather than in hard-to-find leaf directories. SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin") SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") SET(LWS_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}") # Put absolute path of dynamic libraries into the object code. Some # architectures, notably Mac OS X, need this. SET(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/${LWS_INSTALL_LIB_DIR}${LIB_SUFFIX}") include(CheckFunctionExists) include(CheckSymbolExists) include(CheckIncludeFile) include(CheckIncludeFiles) include(CheckLibraryExists) include(CheckTypeSize) include(CheckCSourceCompiles) if (LWS_WITHOUT_BUILTIN_SHA1) set(LWS_SHA1_USE_OPENSSL_NAME 1) endif() if (HAIKU) set(CMAKE_REQUIRED_LIBRARIES network) endif() CHECK_C_SOURCE_COMPILES( "#include int main(int argc, char **argv) { return malloc_trim(0); } " LWS_HAVE_MALLOC_TRIM) CHECK_C_SOURCE_COMPILES( "#include int main(int argc, char **argv) { return (int)malloc_usable_size((void *)0); } " LWS_HAVE_MALLOC_USABLE_SIZE) CHECK_FUNCTION_EXISTS(fork LWS_HAVE_FORK) CHECK_FUNCTION_EXISTS(getenv LWS_HAVE_GETENV) CHECK_FUNCTION_EXISTS(malloc LWS_HAVE_MALLOC) CHECK_FUNCTION_EXISTS(memset LWS_HAVE_MEMSET) CHECK_FUNCTION_EXISTS(realloc LWS_HAVE_REALLOC) CHECK_FUNCTION_EXISTS(socket LWS_HAVE_SOCKET) CHECK_FUNCTION_EXISTS(strerror LWS_HAVE_STRERROR) CHECK_FUNCTION_EXISTS(vfork LWS_HAVE_VFORK) CHECK_FUNCTION_EXISTS(execvpe LWS_HAVE_EXECVPE) CHECK_FUNCTION_EXISTS(getifaddrs LWS_HAVE_GETIFADDRS) CHECK_FUNCTION_EXISTS(snprintf LWS_HAVE_SNPRINTF) CHECK_FUNCTION_EXISTS(_snprintf LWS_HAVE__SNPRINTF) CHECK_FUNCTION_EXISTS(_vsnprintf LWS_HAVE__VSNPRINTF) CHECK_FUNCTION_EXISTS(getloadavg LWS_HAVE_GETLOADAVG) CHECK_FUNCTION_EXISTS(atoll LWS_HAVE_ATOLL) CHECK_FUNCTION_EXISTS(_atoi64 LWS_HAVE__ATOI64) CHECK_FUNCTION_EXISTS(_stat32i64 LWS_HAVE__STAT32I64) CHECK_FUNCTION_EXISTS(clock_gettime LWS_HAVE_CLOCK_GETTIME) if (NOT LWS_HAVE_GETIFADDRS) if (LWS_WITHOUT_BUILTIN_GETIFADDRS) message(FATAL_ERROR "No getifaddrs was found on the system. Turn off the LWS_WITHOUT_BUILTIN_GETIFADDRS compile option to use the supplied BSD version.") endif() set(LWS_BUILTIN_GETIFADDRS 1) endif() CHECK_INCLUDE_FILE(dlfcn.h LWS_HAVE_DLFCN_H) CHECK_INCLUDE_FILE(fcntl.h LWS_HAVE_FCNTL_H) CHECK_INCLUDE_FILE(in6addr.h LWS_HAVE_IN6ADDR_H) CHECK_INCLUDE_FILE(memory.h LWS_HAVE_MEMORY_H) CHECK_INCLUDE_FILE(netinet/in.h LWS_HAVE_NETINET_IN_H) CHECK_INCLUDE_FILE(stdint.h LWS_HAVE_STDINT_H) CHECK_INCLUDE_FILE(stdlib.h LWS_HAVE_STDLIB_H) CHECK_INCLUDE_FILE(strings.h LWS_HAVE_STRINGS_H) CHECK_INCLUDE_FILE(string.h LWS_HAVE_STRING_H) CHECK_INCLUDE_FILE(sys/prctl.h LWS_HAVE_SYS_PRCTL_H) CHECK_INCLUDE_FILE(sys/socket.h LWS_HAVE_SYS_SOCKET_H) CHECK_INCLUDE_FILE(sys/sockio.h LWS_HAVE_SYS_SOCKIO_H) CHECK_INCLUDE_FILE(sys/stat.h LWS_HAVE_SYS_STAT_H) CHECK_INCLUDE_FILE(sys/types.h LWS_HAVE_SYS_TYPES_H) CHECK_INCLUDE_FILE(unistd.h LWS_HAVE_UNISTD_H) CHECK_INCLUDE_FILE(vfork.h LWS_HAVE_VFORK_H) CHECK_INCLUDE_FILE(sys/capability.h LWS_HAVE_SYS_CAPABILITY_H) CHECK_INCLUDE_FILE(malloc.h LWS_HAVE_MALLOC_H) CHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H) CHECK_INCLUDE_FILE(inttypes.h LWS_HAVE_INTTYPES_H) CHECK_LIBRARY_EXISTS(cap cap_set_flag "" LWS_HAVE_LIBCAP) if (LWS_ROLE_DBUS) if (NOT LWS_DBUS_LIB) set(LWS_DBUS_LIB "dbus-1") endif() CHECK_LIBRARY_EXISTS(${LWS_DBUS_LIB} dbus_connection_set_watch_functions "" LWS_HAVE_LIBDBUS) if (NOT LWS_HAVE_LIBDBUS) message(FATAL_ERROR "Install dbus-devel, or libdbus-1-dev etc") endif() if (NOT LWS_DBUS_INCLUDE1) # look in fedora and debian / ubuntu place if (EXISTS "/usr/include/dbus-1.0") set(LWS_DBUS_INCLUDE1 "/usr/include/dbus-1.0") else() message(FATAL_ERROR "Set LWS_DBUS_INCLUDE1 to /usr/include/dbus-1.0 or wherever the main dbus includes are") endif() endif() if (NOT LWS_DBUS_INCLUDE2) # look in fedora... debian / ubuntu has the ARCH in the path... if (EXISTS "/usr/lib64/dbus-1.0/include") set(LWS_DBUS_INCLUDE2 "/usr/lib64/dbus-1.0/include") else() message(FATAL_ERROR "Set LWS_DBUS_INCLUDE2 to /usr/lib/ARCH-linux-gnu/dbus-1.0/include or wherever dbus-arch-deps.h is on your system") endif() endif() set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES};${LWS_DBUS_INCLUDE1};${LWS_DBUS_INCLUDE2}) CHECK_C_SOURCE_COMPILES("#include int main(void) { return 0; }" LWS_DBUS_CHECK_OK) endif() if (LWS_WITH_LIBUV) CHECK_INCLUDE_FILE(uv-version.h LWS_HAVE_UV_VERSION_H) # libuv changed the location in 1.21.0. Retain both # checks temporarily to ensure a smooth transition. if (NOT LWS_HAVE_UV_VERSION_H) CHECK_INCLUDE_FILE(uv/version.h LWS_HAVE_NEW_UV_VERSION_H) endif() endif() if (LWS_WITH_ZLIB AND NOT LWS_WITH_BUNDLED_ZLIB) if (LWS_WITH_MINIZ) CHECK_INCLUDE_FILE(miniz.h LWS_HAVE_ZLIB_H) else() CHECK_INCLUDE_FILE(zlib.h LWS_HAVE_ZLIB_H) endif() endif() # TODO: These can also be tested to see whether they actually work... set(LWS_HAVE_WORKING_FORK LWS_HAVE_FORK) set(LWS_HAVE_WORKING_VFORK LWS_HAVE_VFORK) CHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS) CHECK_C_SOURCE_COMPILES("#include int main(void) { intptr_t test = 1; return 0; }" LWS_HAS_INTPTR_T) set(CMAKE_REQUIRED_FLAGS "-pthread") CHECK_C_SOURCE_COMPILES("#define _GNU_SOURCE #include int main(void) { pthread_t th = 0; pthread_setname_np(th, NULL); return 0; }" LWS_HAS_PTHREAD_SETNAME_NP) CHECK_C_SOURCE_COMPILES("#include #include int main(void) { void *p = (void *)getopt_long; return p != NULL; }" LWS_HAS_GETOPT_LONG) if (NOT PID_T_SIZE) set(pid_t int) endif() if (NOT SIZE_T_SIZE) set(size_t "unsigned int") endif() if (NOT LWS_HAVE_MALLOC) set(malloc rpl_malloc) endif() if (NOT LWS_HAVE_REALLOC) set(realloc rpl_realloc) endif() if (UNIX) execute_process(COMMAND uname -n OUTPUT_VARIABLE NODENAME) # Need to chomp the \n at end of output. string(REGEX REPLACE "[\n]+" "" NODENAME "${NODENAME}") if( NODENAME STREQUAL "smartos" ) add_definitions( "-D__smartos__" ) set(SMARTOS 1) endif() endif() if (MSVC) # Turn off stupid microsoft security warnings. add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) endif(MSVC) include_directories("${PROJECT_SOURCE_DIR}/lib") # Group headers and sources. # Some IDEs use this for nicer file structure. set(HDR_PRIVATE lib/core/private.h) set(HDR_PUBLIC "${PROJECT_SOURCE_DIR}/include/libwebsockets.h" "${PROJECT_BINARY_DIR}/lws_config.h" "${PROJECT_SOURCE_DIR}/plugins/ssh-base/include/lws-plugin-ssh.h" ) set(SOURCES lib/core/alloc.c lib/core/buflist.c lib/core/context.c lib/core/lws_dll2.c lib/core/libwebsockets.c lib/core/logs.c lib/misc/base64-decode.c lib/core/vfs.c lib/misc/lws-ring.c ) if (LWS_WITH_DEPRECATED_LWS_DLL) list(APPEND SOURCES lib/core/lws_dll.c) endif() if (LWS_WITH_NETWORK) list(APPEND SOURCES lib/core-net/dummy-callback.c lib/core-net/output.c lib/core-net/close.c lib/core-net/network.c lib/core-net/vhost.c lib/core-net/pollfd.c lib/core-net/service.c lib/core-net/sorted-usec-list.c lib/core-net/stats.c lib/core-net/wsi.c lib/core-net/wsi-timeout.c lib/core-net/adopt.c lib/roles/pipe/ops-pipe.c ) if (LWS_WITH_LWS_DSH) list(APPEND SOURCES lib/core-net/lws-dsh.c) endif() if (LWS_WITH_SEQUENCER) list(APPEND SOURCES lib/core-net/sequencer.c) endif() if (LWS_WITH_ABSTRACT) list(APPEND SOURCES lib/abstract/abstract.c ) if (LWS_WITH_SEQUENCER) list(APPEND SOURCES lib/abstract/test-sequencer.c) endif() endif() if (LWS_WITH_STATS) list(APPEND SOURCES lib/core-net/stats.c ) endif() endif() if (LWS_WITH_DIR) list(APPEND SOURCES lib/misc/dir.c) endif() if (LWS_WITH_THREADPOOL AND UNIX AND LWS_HAVE_PTHREAD_H) list(APPEND SOURCES lib/misc/threadpool/threadpool.c) endif() if (LWS_ROLE_H1 OR LWS_ROLE_H2) list(APPEND SOURCES lib/roles/http/header.c lib/roles/http/server/parsers.c) if (LWS_WITH_HTTP_STREAM_COMPRESSION) list(APPEND SOURCES lib/roles/http/compression/stream.c lib/roles/http/compression/deflate/deflate.c) if (LWS_WITH_HTTP_BROTLI) list(APPEND SOURCES lib/roles/http/compression/brotli/brotli.c) endif() endif() endif() if (LWS_ROLE_H1) list(APPEND SOURCES lib/roles/h1/ops-h1.c) endif() if (LWS_ROLE_WS) list(APPEND SOURCES lib/roles/ws/ops-ws.c) if (NOT LWS_WITHOUT_CLIENT) list(APPEND SOURCES lib/roles/ws/client-ws.c lib/roles/ws/client-parser-ws.c) endif() if (NOT LWS_WITHOUT_SERVER) list(APPEND SOURCES lib/roles/ws/server-ws.c) endif() endif() if (LWS_ROLE_RAW) list(APPEND SOURCES lib/roles/raw-skt/ops-raw-skt.c lib/roles/raw-file/ops-raw-file.c) if (LWS_WITH_ABSTRACT) list(APPEND SOURCES lib/abstract/transports/raw-skt.c) endif() endif() if (LWS_ROLE_RAW_PROXY) list(APPEND SOURCES lib/roles/raw-proxy/ops-raw-proxy.c) endif() if (LWS_ROLE_CGI) list(APPEND SOURCES lib/roles/cgi/cgi-server.c lib/roles/cgi/ops-cgi.c) endif() if (LWS_ROLE_DBUS) list(APPEND SOURCES lib/roles/dbus/dbus.c) endif() if (LWS_WITH_ACCESS_LOG) list(APPEND SOURCES lib/roles/http/server/access-log.c) endif() if (LWS_WITH_PEER_LIMITS) list(APPEND SOURCES lib/misc/peer-limits.c) endif() if (LWS_WITH_LWSAC) list(APPEND SOURCES lib/misc/lwsac/lwsac.c lib/misc/lwsac/cached-file.c) endif() if (LWS_WITH_FTS) list(APPEND SOURCES lib/misc/fts/trie.c lib/misc/fts/trie-fd.c) endif() if (LWS_WITH_DISKCACHE) list(APPEND SOURCES lib/misc/diskcache.c) endif() if (LWS_WITH_STRUCT_JSON) list(APPEND SOURCES lib/misc/lws-struct-lejp.c) endif() if (LWS_WITH_STRUCT_SQLITE3) list(APPEND SOURCES lib/misc/lws-struct-sqlite.c) endif() if (NOT LWS_WITHOUT_CLIENT) list(APPEND SOURCES lib/core-net/connect.c lib/core-net/client.c lib/roles/http/client/client.c lib/roles/http/client/client-handshake.c) endif() if (NOT LWS_WITHOUT_SERVER) list(APPEND SOURCES lib/core-net/server.c lib/roles/listen/ops-listen.c) endif() if (LWS_WITH_MBEDTLS) set(LWS_WITH_SSL ON) include_directories(lib/tls/mbedtls/wrapper/include) include_directories(lib/tls/mbedtls/wrapper/include/platform) include_directories(lib/tls/mbedtls/wrapper/include/internal) include_directories(lib/tls/mbedtls/wrapper/include/openssl) if (LWS_WITH_NETWORK) list(APPEND HDR_PRIVATE lib/tls/mbedtls/wrapper/include/internal/ssl3.h lib/tls/mbedtls/wrapper/include/internal/ssl_cert.h lib/tls/mbedtls/wrapper/include/internal/ssl_code.h lib/tls/mbedtls/wrapper/include/internal/ssl_dbg.h lib/tls/mbedtls/wrapper/include/internal/ssl_lib.h lib/tls/mbedtls/wrapper/include/internal/ssl_methods.h lib/tls/mbedtls/wrapper/include/internal/ssl_pkey.h lib/tls/mbedtls/wrapper/include/internal/ssl_stack.h lib/tls/mbedtls/wrapper/include/internal/ssl_types.h lib/tls/mbedtls/wrapper/include/internal/ssl_x509.h lib/tls/mbedtls/wrapper/include/internal/tls1.h lib/tls/mbedtls/wrapper/include/internal/x509_vfy.h) list(APPEND HDR_PRIVATE lib/tls/mbedtls/wrapper/include/openssl/ssl.h) list(APPEND HDR_PRIVATE lib/tls/mbedtls/wrapper/include/platform/ssl_pm.h lib/tls/mbedtls/wrapper/include/platform/ssl_port.h) list(APPEND SOURCES lib/tls/mbedtls/wrapper/library/ssl_cert.c lib/tls/mbedtls/wrapper/library/ssl_lib.c lib/tls/mbedtls/wrapper/library/ssl_methods.c lib/tls/mbedtls/wrapper/library/ssl_pkey.c lib/tls/mbedtls/wrapper/library/ssl_stack.c lib/tls/mbedtls/wrapper/library/ssl_x509.c) list(APPEND SOURCES lib/tls/mbedtls/wrapper/platform/ssl_pm.c lib/tls/mbedtls/wrapper/platform/ssl_port.c) endif() endif() if (LWS_WITH_SSL) list(APPEND SOURCES lib/tls/tls.c ) if (LWS_WITH_NETWORK) list(APPEND SOURCES lib/tls/tls-network.c ) endif() if (LWS_WITH_MBEDTLS) list(APPEND SOURCES lib/tls/mbedtls/tls.c lib/tls/mbedtls/x509.c ) if (LWS_WITH_NETWORK) list(APPEND SOURCES lib/tls/mbedtls/ssl.c ) endif() if (LWS_WITH_GENCRYPTO) list(APPEND SOURCES lib/tls/mbedtls/lws-genhash.c lib/tls/mbedtls/lws-genrsa.c lib/tls/mbedtls/lws-genaes.c lib/tls/lws-genec-common.c lib/tls/mbedtls/lws-genec.c lib/tls/mbedtls/lws-gencrypto.c ) endif() else() list(APPEND SOURCES lib/tls/openssl/tls.c lib/tls/openssl/x509.c ) if (LWS_WITH_NETWORK) list(APPEND SOURCES lib/tls/openssl/ssl.c ) endif() if (LWS_WITH_GENCRYPTO) list(APPEND SOURCES lib/tls/openssl/lws-genhash.c lib/tls/openssl/lws-genrsa.c lib/tls/openssl/lws-genaes.c lib/tls/lws-genec-common.c lib/tls/openssl/lws-genec.c lib/tls/openssl/lws-gencrypto.c ) endif() endif() if (NOT LWS_WITHOUT_SERVER) list(APPEND SOURCES lib/tls/tls-server.c) if (LWS_WITH_MBEDTLS) list(APPEND SOURCES lib/tls/mbedtls/mbedtls-server.c) else() list(APPEND SOURCES lib/tls/openssl/openssl-server.c) endif() endif() if (NOT LWS_WITHOUT_CLIENT) list(APPEND SOURCES lib/tls/tls-client.c) if (LWS_WITH_MBEDTLS) list(APPEND SOURCES lib/tls/mbedtls/mbedtls-client.c) else() list(APPEND SOURCES lib/tls/openssl/openssl-client.c) endif() endif() endif() if (NOT LWS_WITHOUT_BUILTIN_SHA1) list(APPEND SOURCES lib/misc/sha-1.c) endif() if (LWS_WITH_HTTP2 AND NOT LWS_WITHOUT_SERVER) list(APPEND SOURCES lib/roles/h2/http2.c lib/roles/h2/hpack.c lib/roles/h2/ops-h2.c) endif() # select the active platform files if (WIN32) list(APPEND SOURCES lib/plat/windows/windows-fds.c lib/plat/windows/windows-file.c lib/plat/windows/windows-init.c lib/plat/windows/windows-misc.c lib/plat/windows/windows-pipe.c lib/plat/windows/windows-plugins.c lib/plat/windows/windows-service.c lib/plat/windows/windows-sockets.c ) else() if (LWS_PLAT_OPTEE) list(APPEND SOURCES lib/plat/optee/lws-plat-optee.c ) if (LWS_WITH_NETWORK) list(APPEND SOURCES lib/plat/optee/network.c ) endif() else() if (LWS_WITH_ESP32) list(APPEND SOURCES lib/plat/esp32/esp32-fds.c lib/plat/esp32/esp32-file.c lib/plat/esp32/esp32-init.c lib/plat/esp32/esp32-misc.c lib/plat/esp32/esp32-pipe.c lib/plat/esp32/esp32-service.c lib/plat/esp32/esp32-sockets.c lib/misc/romfs.c) if(LWS_WITH_ESP32_HELPER) list(APPEND SOURCES lib/plat/esp32/esp32-helpers.c) endif() else() set(LWS_PLAT_UNIX 1) list(APPEND SOURCES lib/plat/unix/unix-caps.c lib/plat/unix/unix-file.c lib/plat/unix/unix-misc.c lib/plat/unix/unix-init.c ) if (LWS_WITH_NETWORK) list(APPEND SOURCES lib/plat/unix/unix-pipe.c lib/plat/unix/unix-service.c lib/plat/unix/unix-sockets.c lib/plat/unix/unix-fds.c ) endif() if (LWS_WITH_PLUGINS AND LWS_WITH_LIBUV) list(APPEND SOURCES lib/plat/unix/unix-plugins.c) endif() endif() endif() endif() if ((LWS_ROLE_H1 OR LWS_ROLE_H2) AND NOT LWS_WITHOUT_SERVER) list(APPEND SOURCES lib/roles/http/server/server.c lib/roles/http/server/lws-spa.c) endif() if (LWS_ROLE_WS AND NOT LWS_WITHOUT_EXTENSIONS) list(APPEND HDR_PRIVATE lib/roles/ws/ext/extension-permessage-deflate.h) list(APPEND SOURCES lib/roles/ws/ext/extension.c lib/roles/ws/ext/extension-permessage-deflate.c) endif() if (LWS_WITH_HTTP_PROXY) list(APPEND SOURCES lib/roles/http/server/rewrite.c) endif() if (LWS_WITH_POLL AND LWS_WITH_NETWORK) list(APPEND SOURCES lib/event-libs/poll/poll.c) endif() if (LWS_WITH_LIBUV AND LWS_WITH_NETWORK) list(APPEND SOURCES lib/event-libs/libuv/libuv.c) endif() if (LWS_WITH_LIBEVENT AND LWS_WITH_NETWORK) list(APPEND SOURCES lib/event-libs/libevent/libevent.c) endif() if (LWS_WITH_LIBEV AND LWS_WITH_NETWORK) list(APPEND SOURCES lib/event-libs/libev/libev.c) # libev generates a big mess of warnings with gcc, maintainer claims gcc to blame set_source_files_properties( lib/event-libs/libev/libev.c PROPERTIES COMPILE_FLAGS "-Wno-error" ) endif() if (LWS_WITH_LEJP) list(APPEND SOURCES lib/misc/lejp.c) endif() if (LWS_WITH_LEJP_CONF AND LWS_WITH_NETWORK AND NOT LWS_PLAT_OPTEE) list(APPEND SOURCES "lib/roles/http/server/lejp-conf.c" ) endif() if (LWS_WITH_ABSTRACT) list(APPEND SOURCES lib/abstract/transports/unit-test.c) endif() if (LWS_WITH_SMTP) list(APPEND SOURCES lib/abstract/protocols/smtp/smtp.c) endif() if (LWS_WITH_RANGES) list(APPEND SOURCES lib/roles/http/server/ranges.c) endif() if (LWS_WITH_ZIP_FOPS) if (LWS_WITH_ZLIB) list(APPEND SOURCES lib/roles/http/server/fops-zip.c) else() message(FATAL_ERROR "Pre-zipped file support (LWS_WITH_ZIP_FOPS) requires ZLIB (LWS_WITH_ZLIB)") endif() endif() if (LWS_WITH_JOSE) list(APPEND SOURCES lib/jose/jwk/jwk.c lib/jose/jws/jose.c lib/jose/jws/jws.c lib/jose/jwe/jwe.c lib/jose/jwe/enc/aescbc.c lib/jose/jwe/enc/aesgcm.c lib/jose/jwe/enc/aeskw.c lib/jose/jwe/jwe-rsa-aescbc.c lib/jose/jwe/jwe-rsa-aesgcm.c lib/jose/jwe/jwe-ecdh-es-aeskw.c ) endif() if (LWS_WITH_JOSE OR LWS_WITH_GENCRYPTO) list(APPEND SOURCES lib/tls/lws-gencrypto-common.c) endif() # Add helper files for Windows. if (WIN32) set(WIN32_HELPERS_PATH win32port/win32helpers) include_directories(${WIN32_HELPERS_PATH}) if (WIN32) list(APPEND SOURCES ${WIN32_HELPERS_PATH}/gettimeofday.c ) list(APPEND HDR_PRIVATE ${WIN32_HELPERS_PATH}/gettimeofday.h ) endif(WIN32) else() # Unix. if (NOT LWS_WITHOUT_DAEMONIZE) list(APPEND SOURCES lib/misc/daemonize.c) endif() endif() if (UNIX) if (NOT LWS_HAVE_GETIFADDRS) list(APPEND HDR_PRIVATE lib/misc/getifaddrs.h) list(APPEND SOURCES lib/misc/getifaddrs.c) endif() endif() if ((CMAKE_C_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) set(COMPILER_IS_CLANG ON) endif() if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR COMPILER_IS_CLANG) include (CheckCCompilerFlag) CHECK_C_COMPILER_FLAG(-fvisibility=hidden LWS_HAVE_VISIBILITY) if (LWS_HAVE_VISIBILITY) set(VISIBILITY_FLAG -fvisibility=hidden) endif() if (LWS_WITH_GCOV) set (GCOV_FLAGS "-fprofile-arcs -ftest-coverage ") endif() if (LWS_WITH_ASAN) set (ASAN_FLAGS "-fsanitize=address -fsanitize=undefined -fsanitize-address-use-after-scope -fsanitize-undefined-trap-on-error") if (NOT COMPILER_IS_CLANG) set (ASAN_FLAGS "${ASAN_FLAGS} -fsanitize=pointer-compare -fsanitize=pointer-subtract -fsanitize=leak") endif() message("Enabling ASAN") endif() check_c_compiler_flag("-Wignored-qualifiers" LWS_GCC_HAS_IGNORED_QUALIFIERS) check_c_compiler_flag("-Wtype-limits" LWS_GCC_HAS_TYPE_LIMITS) if (LWS_GCC_HAS_IGNORED_QUALIFIERS) set(CMAKE_C_FLAGS "-Wignored-qualifiers ${CMAKE_C_FLAGS}" ) endif() if (LWS_GCC_HAS_TYPE_LIMITS) set(CMAKE_C_FLAGS "-Wtype-limits ${CMAKE_C_FLAGS}" ) endif() if (UNIX AND NOT LWS_WITH_ESP32) set(CMAKE_C_FLAGS "-Wall -Wsign-compare -Wuninitialized -Werror ${VISIBILITY_FLAG} -Wundef ${GCOV_FLAGS} ${CMAKE_C_FLAGS} ${ASAN_FLAGS}" ) else() set(CMAKE_C_FLAGS "-Wall -Wsign-compare -Wuninitialized -Werror ${VISIBILITY_FLAG} ${GCOV_FLAGS} ${CMAKE_C_FLAGS}" ) endif() endif () if (LWS_PLAT_OPTEE) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --sysroot ../../../../lib/libutils/isoc/include -I../../../../lib/libutils/isoc/include -I../../../../lib/libutils/ext/include" ) endif() if ((CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) AND NOT LWS_WITHOUT_TESTAPPS) if (UNIX AND LWS_HAVE_PTHREAD_H) # jeez clang understands -pthread but dies if he sees it at link time! # http://stackoverflow.com/questions/2391194/what-is-gs-pthread-equiv-in-clang set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread" ) endif() endif() if (COMPILER_IS_CLANG) # otherwise osx blows a bunch of openssl deprecated api errors set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations" ) if (UNIX AND LWS_HAVE_PTHREAD_H) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread" ) endif() endif() source_group("Headers Private" FILES ${HDR_PRIVATE}) source_group("Headers Public" FILES ${HDR_PUBLIC}) source_group("Sources" FILES ${SOURCES}) source_group("Resources" FILES ${RESOURCES}) # # Create the lib. # set(LWS_LIBRARIES) if (LWS_WITH_STATIC) if (LWS_STATIC_PIC) set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif() add_library(websockets STATIC ${HDR_PRIVATE} ${HDR_PUBLIC} ${SOURCES}) list(APPEND LWS_LIBRARIES websockets) if (WIN32) # Windows uses the same .lib ending for static libraries and shared # library linker files, so rename the static library. set_target_properties(websockets PROPERTIES OUTPUT_NAME websockets_static) endif() add_custom_command( TARGET websockets COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/include/libwebsockets.h ${CMAKE_CURRENT_BINARY_DIR}/include/libwebsockets.h ) add_custom_command( TARGET websockets COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/include/libwebsockets/ ${CMAKE_CURRENT_BINARY_DIR}/include/libwebsockets ) add_custom_command( TARGET websockets COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/lws_config.h ${CMAKE_CURRENT_BINARY_DIR}/include/lws_config.h ) endif() if (LWS_WITH_SHARED) add_library(websockets_shared SHARED ${HDR_PRIVATE} ${HDR_PUBLIC} ${SOURCES} ${RESOURCES}) list(APPEND LWS_LIBRARIES websockets_shared) # We want the shared lib to be named "libwebsockets" # not "libwebsocket_shared". set_target_properties(websockets_shared PROPERTIES OUTPUT_NAME websockets) if (WIN32) # Compile as DLL (export function declarations) set_property( TARGET websockets_shared PROPERTY COMPILE_DEFINITIONS LWS_DLL LWS_INTERNAL) endif() if (APPLE) set_property(TARGET websockets_shared PROPERTY MACOSX_RPATH YES) endif() add_custom_command( TARGET websockets_shared COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/include/libwebsockets.h ${CMAKE_CURRENT_BINARY_DIR}/include/libwebsockets.h ) add_custom_command( TARGET websockets COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/include/libwebsockets ${CMAKE_CURRENT_BINARY_DIR}/include/libwebsockets ) add_custom_command( TARGET websockets_shared COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/lws_config.h ${CMAKE_CURRENT_BINARY_DIR}/include/lws_config.h ) endif() # Set the so version of the lib. # Equivalent to LDFLAGS=-version-info x:x:x if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR COMPILER_IS_CLANG) foreach(lib ${LWS_LIBRARIES}) set_target_properties(${lib} PROPERTIES SOVERSION ${SOVERSION}) endforeach() endif() set(LIB_LIST) # # Find libraries. # # # ZLIB (needed for deflate extension and if LWS_WITH_HTTP_STREAM_COMPRESSION) # if (LWS_WITH_ZLIB) if (LWS_WITH_BUNDLED_ZLIB) if (WIN32) set(WIN32_ZLIB_PATH "win32port/zlib") set(ZLIB_SRCS ${WIN32_ZLIB_PATH}/adler32.c ${WIN32_ZLIB_PATH}/compress.c ${WIN32_ZLIB_PATH}/crc32.c ${WIN32_ZLIB_PATH}/deflate.c ${WIN32_ZLIB_PATH}/gzlib.c ${WIN32_ZLIB_PATH}/gzread.c ${WIN32_ZLIB_PATH}/gzwrite.c ${WIN32_ZLIB_PATH}/infback.c ${WIN32_ZLIB_PATH}/inffast.c ${WIN32_ZLIB_PATH}/inflate.c ${WIN32_ZLIB_PATH}/inftrees.c ${WIN32_ZLIB_PATH}/trees.c ${WIN32_ZLIB_PATH}/uncompr.c ${WIN32_ZLIB_PATH}/zutil.c) add_library(zlib_internal STATIC ${ZLIB_SRCS}) set(ZLIB_INCLUDE_DIRS ${WIN32_ZLIB_PATH}) get_property(ZLIB_LIBRARIES TARGET zlib_internal PROPERTY LOCATION) set(ZLIB_FOUND 1) # Make sure zlib_internal is compiled before the libs. foreach (lib ${LWS_LIBRARIES}) add_dependencies(${lib} zlib_internal) endforeach() else() message(FATAL_ERROR "Don't have bundled zlib for that platform") endif() elseif (NOT ZLIB_FOUND) if (LWS_WITH_MINIZ) find_package(Miniz REQUIRED) set(ZLIB_INCLUDE_DIRS ${MINIZ_INCLUDE_DIRS}) set(ZLIB_LIBRARIES ${MINIZ_LIBRARIES}) else() find_package(ZLIB REQUIRED) endif() endif() message("zlib/miniz include dirs: ${ZLIB_INCLUDE_DIRS}") message("zlib/miniz libraries: ${ZLIB_LIBRARIES}") include_directories(${ZLIB_INCLUDE_DIRS}) list(APPEND LIB_LIST ${ZLIB_LIBRARIES}) endif() if (LWS_WITH_HTTP_BROTLI) list(APPEND LIB_LIST brotlienc brotlidec brotlidec) endif() # # OpenSSL # if (LWS_WITH_SSL) message("Compiling with SSL support") set(chose_ssl 0) if (LWS_WITH_WOLFSSL) # Use wolfSSL as OpenSSL replacement. # TODO: Add a find_package command for this also. message("wolfSSL include dir: ${WOLFSSL_INCLUDE_DIRS}") message("wolfSSL libraries: ${WOLFSSL_LIBRARIES}") # Additional to the root directory we need to include # the wolfssl/ subdirectory which contains the OpenSSL # compatibility layer headers. if (LWS_WITH_CYASSL) foreach(inc ${WOLFSSL_INCLUDE_DIRS}) include_directories("${inc}" "${inc}/cyassl") endforeach() else() foreach(inc ${WOLFSSL_INCLUDE_DIRS}) include_directories("${inc}" "${inc}/wolfssl") endforeach() endif() list(APPEND LIB_LIST "${WOLFSSL_LIBRARIES}") set(chose_ssl 1) endif() if (LWS_WITH_MBEDTLS) message("MBEDTLS include dir: ${MBEDTLS_INCLUDE_DIRS}") message("MBEDTLS libraries: ${MBEDTLS_LIBRARIES}") foreach(inc ${MBEDTLS_INCLUDE_DIRS}) include_directories("${inc}" "${inc}/mbedtls") endforeach() list(APPEND LIB_LIST "${MBEDTLS_LIBRARIES}") set(chose_ssl 1) endif() if (NOT chose_ssl) if (NOT OPENSSL_FOUND AND NOT LWS_WITH_BORINGSSL) # TODO: Add support for STATIC also. if (NOT LWS_WITH_ESP32) find_package(OpenSSL REQUIRED) endif() set(OPENSSL_INCLUDE_DIRS "${OPENSSL_INCLUDE_DIR}") endif() message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIRS}") if (NOT LWS_WITH_ESP32) message("OpenSSL libraries: ${OPENSSL_LIBRARIES}") endif() include_directories("${OPENSSL_INCLUDE_DIRS}") if (NOT LWS_WITH_ESP32) list(APPEND LIB_LIST ${OPENSSL_LIBRARIES}) endif() if (NOT LWS_WITH_MBEDTLS) # older (0.98) Openssl lacks this set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIRS}) check_include_file(openssl/ecdh.h LWS_HAVE_OPENSSL_ECDH_H) if (LWS_SSL_SERVER_WITH_ECDH_CERT AND NOT LWS_HAVE_OPENSSL_ECDH_H) message(FATAL_ERROR "Missing openssl/ecdh.h, so cannot use LWS_SSL_SERVER_WITH_ECDH_CERT") endif() else() unset(LWS_HAVE_OPENSSL_ECDH_H) endif(NOT LWS_WITH_MBEDTLS) endif() endif(LWS_WITH_SSL) if (LWS_WITH_LIBEV) if (NOT LIBEV_FOUND) find_path(LIBEV_INCLUDE_DIRS NAMES ev.h) find_library(LIBEV_LIBRARIES NAMES ev) if(LIBEV_INCLUDE_DIRS AND LIBEV_LIBRARIES) set(LIBEV_FOUND 1) endif() endif() message("libev include dir: ${LIBEV_INCLUDE_DIRS}") message("libev libraries: ${LIBEV_LIBRARIES}") include_directories("${LIBEV_INCLUDE_DIRS}") list(APPEND LIB_LIST ${LIBEV_LIBRARIES}) endif(LWS_WITH_LIBEV) if (LWS_WITH_LIBUV) if (NOT LIBUV_FOUND) find_path(LIBUV_INCLUDE_DIRS NAMES uv.h) find_library(LIBUV_LIBRARIES NAMES uv) if(LIBUV_INCLUDE_DIRS AND LIBUV_LIBRARIES) set(LIBUV_FOUND 1) endif() endif() message("libuv include dir: ${LIBUV_INCLUDE_DIRS}") message("libuv libraries: ${LIBUV_LIBRARIES}") include_directories("${LIBUV_INCLUDE_DIRS}") list(APPEND LIB_LIST ${LIBUV_LIBRARIES}) endif() if (LWS_WITH_LIBEVENT) if (NOT LIBEVENT_FOUND) find_path(LIBEVENT_INCLUDE_DIRS NAMES event2/event.h) find_library(LIBEVENT_LIBRARIES NAMES event) if(LIBEVENT_INCLUDE_DIRS AND LIBEVENT_LIBRARIES) set(LIBEVENT_FOUND 1) endif() endif() message("libevent include dir: ${LIBEVENT_INCLUDE_DIRS}") message("libevent libraries: ${LIBEVENT_LIBRARIES}") include_directories("${LIBEVENT_INCLUDE_DIRS}") list(APPEND LIB_LIST ${LIBEVENT_LIBRARIES}) endif(LWS_WITH_LIBEVENT) if (LWS_WITH_SQLITE3) if (NOT SQLITE3_FOUND) find_path(SQLITE3_INCLUDE_DIRS NAMES sqlite3.h) find_library(SQLITE3_LIBRARIES NAMES sqlite3) if(SQLITE3_INCLUDE_DIRS AND SQLITE3_LIBRARIES) set(SQLITE3_FOUND 1) endif() endif() message("sqlite3 include dir: ${SQLITE3_INCLUDE_DIRS}") message("sqlite3 libraries: ${SQLITE3_LIBRARIES}") include_directories("${SQLITE3_INCLUDE_DIRS}") list(APPEND LIB_LIST ${SQLITE3_LIBRARIES}) endif() if (LWS_WITH_HUBBUB) find_library(LIBHUBBUB_LIBRARIES NAMES hubbub) list(APPEND LIB_LIST ${LIBHUBBUB_LIBRARIES} ) endif() if (LWS_ROLE_DBUS) message("dbus include dir 1: ${LWS_DBUS_INCLUDE1}") message("dbus include dir 2: ${LWS_DBUS_INCLUDE2}") include_directories("${LWS_DBUS_INCLUDE1}") include_directories("${LWS_DBUS_INCLUDE2}") list(APPEND LIB_LIST ${LWS_DBUS_LIB}) endif() # # Platform specific libs. # if (WINCE) list(APPEND LIB_LIST ws2.lib) elseif (WIN32) list(APPEND LIB_LIST ws2_32.lib userenv.lib psapi.lib iphlpapi.lib) endif() if (${CMAKE_SYSTEM_NAME} MATCHES "QNX") list(APPEND LIB_LIST socket) endif() if (UNIX) list(APPEND LIB_LIST m) endif() if(SMARTOS) list(APPEND LIB_LIST socket) endif() if (HAIKU) list(APPEND LIB_LIST network) endif() if (LWS_HAVE_LIBCAP) list(APPEND LIB_LIST cap ) endif() # Setup the linking for all libs. foreach (lib ${LWS_LIBRARIES}) target_link_libraries(${lib} ${LIB_LIST}) endforeach() set (temp ${CMAKE_REQUIRED_LIBRARIES}) set(CMAKE_REQUIRED_LIBRARIES ${LIB_LIST}) if (LWS_WITH_ZLIB) if (LWS_WITH_BUNDLED_ZLIB) if (WIN32) # it's trying to delete internal zlib entry LIST(REMOVE_AT CMAKE_REQUIRED_LIBRARIES 0 ) endif() endif() endif() CHECK_FUNCTION_EXISTS(SSL_CTX_set1_param LWS_HAVE_SSL_CTX_set1_param) CHECK_FUNCTION_EXISTS(SSL_set_info_callback LWS_HAVE_SSL_SET_INFO_CALLBACK) CHECK_FUNCTION_EXISTS(X509_VERIFY_PARAM_set1_host LWS_HAVE_X509_VERIFY_PARAM_set1_host) CHECK_FUNCTION_EXISTS(RSA_set0_key LWS_HAVE_RSA_SET0_KEY) CHECK_FUNCTION_EXISTS(X509_get_key_usage LWS_HAVE_X509_get_key_usage) CHECK_FUNCTION_EXISTS(EVP_PKEY_new_raw_private_key LWS_HAVE_SSL_CTX_EVP_PKEY_new_raw_private_key) CHECK_FUNCTION_EXISTS(SSL_CTX_get0_certificate LWS_HAVE_SSL_CTX_get0_certificate) CHECK_FUNCTION_EXISTS(SSL_get0_alpn_selected LWS_HAVE_SSL_get0_alpn_selected) CHECK_FUNCTION_EXISTS(SSL_set_alpn_protos LWS_HAVE_SSL_set_alpn_protos) CHECK_FUNCTION_EXISTS(EVP_aes_128_cfb8 LWS_HAVE_EVP_aes_128_cfb8) CHECK_FUNCTION_EXISTS(EVP_aes_128_cfb128 LWS_HAVE_EVP_aes_128_cfb128) CHECK_FUNCTION_EXISTS(EVP_aes_192_cfb8 LWS_HAVE_EVP_aes_192_cfb8) CHECK_FUNCTION_EXISTS(EVP_aes_192_cfb128 LWS_HAVE_EVP_aes_192_cfb128) CHECK_FUNCTION_EXISTS(EVP_aes_256_cfb8 LWS_HAVE_EVP_aes_256_cfb8) CHECK_FUNCTION_EXISTS(EVP_aes_256_cfb128 LWS_HAVE_EVP_aes_256_cfb128) CHECK_FUNCTION_EXISTS(EVP_aes_128_xts LWS_HAVE_EVP_aes_128_xts) CHECK_FUNCTION_EXISTS(RSA_verify_pss_mgf1 LWS_HAVE_RSA_verify_pss_mgf1) CHECK_FUNCTION_EXISTS(HMAC_CTX_new LWS_HAVE_HMAC_CTX_new) CHECK_FUNCTION_EXISTS(SSL_CTX_set_ciphersuites LWS_HAVE_SSL_CTX_set_ciphersuites) if (LWS_WITH_SSL AND NOT LWS_WITH_MBEDTLS) if (UNIX) set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} dl) endif() CHECK_C_SOURCE_COMPILES("#include \nint main(void) { STACK_OF(X509) *c = NULL; SSL_CTX *ctx = NULL; return (int)SSL_CTX_get_extra_chain_certs_only(ctx, &c); }\n" LWS_HAVE_SSL_EXTRA_CHAIN_CERTS) CHECK_C_SOURCE_COMPILES("#include \nint main(void) { EVP_MD_CTX *md_ctx = NULL; EVP_MD_CTX_free(md_ctx); return 0; }\n" LWS_HAVE_EVP_MD_CTX_free) CHECK_FUNCTION_EXISTS(ECDSA_SIG_set0 LWS_HAVE_ECDSA_SIG_set0) CHECK_FUNCTION_EXISTS(BN_bn2binpad LWS_HAVE_BN_bn2binpad) CHECK_FUNCTION_EXISTS(EVP_aes_128_wrap LWS_HAVE_EVP_aes_128_wrap) CHECK_FUNCTION_EXISTS(EC_POINT_get_affine_coordinates LWS_HAVE_EC_POINT_get_affine_coordinates) endif() if (LWS_WITH_MBEDTLS) set(LWS_HAVE_TLS_CLIENT_METHOD 1) if (NOT LWS_WITH_ESP32) # not supported in esp-idf openssl wrapper yet, but is in our version set(LWS_HAVE_X509_VERIFY_PARAM_set1_host 1) endif() CHECK_FUNCTION_EXISTS(mbedtls_ssl_conf_alpn_protocols LWS_HAVE_mbedtls_ssl_conf_alpn_protocols) CHECK_FUNCTION_EXISTS(mbedtls_ssl_get_alpn_protocol LWS_HAVE_mbedtls_ssl_get_alpn_protocol) CHECK_FUNCTION_EXISTS(mbedtls_ssl_conf_sni LWS_HAVE_mbedtls_ssl_conf_sni) CHECK_FUNCTION_EXISTS(mbedtls_ssl_set_hs_ca_chain LWS_HAVE_mbedtls_ssl_set_hs_ca_chain) CHECK_FUNCTION_EXISTS(mbedtls_ssl_set_hs_own_cert LWS_HAVE_mbedtls_ssl_set_hs_own_cert) CHECK_FUNCTION_EXISTS(mbedtls_ssl_set_hs_authmode LWS_HAVE_mbedtls_ssl_set_hs_authmode) CHECK_FUNCTION_EXISTS(mbedtls_net_init LWS_HAVE_mbedtls_net_init) else() CHECK_FUNCTION_EXISTS(TLS_client_method LWS_HAVE_TLS_CLIENT_METHOD) CHECK_FUNCTION_EXISTS(TLSv1_2_client_method LWS_HAVE_TLSV1_2_CLIENT_METHOD) endif() # ideally we want to use pipe2() CHECK_C_SOURCE_COMPILES("#define _GNU_SOURCE\n#include \nint main(void) {int fd[2];\n return pipe2(fd, 0);\n}\n" LWS_HAVE_PIPE2) # tcp keepalive needs this on linux to work practically... but it only exists # after kernel 2.6.37 CHECK_C_SOURCE_COMPILES("#include \nint main(void) { return TCP_USER_TIMEOUT; }\n" LWS_HAVE_TCP_USER_TIMEOUT) set(CMAKE_REQUIRED_LIBRARIES ${temp}) # Generate the lws_config.h that includes all the public compilation settings. configure_file( "${PROJECT_SOURCE_DIR}/cmake/lws_config.h.in" "${PROJECT_BINARY_DIR}/lws_config.h") # Generate the lws_config.h that includes all the private compilation settings. configure_file( "${PROJECT_SOURCE_DIR}/cmake/lws_config_private.h.in" "${PROJECT_BINARY_DIR}/lws_config_private.h") # Generate self-signed SSL certs for the test-server. if (LWS_WITH_SSL AND NOT LWS_WITH_WOLFSSL) message("Searching for OpenSSL executable and dlls") find_package(OpenSSLbins) message("OpenSSL executable: ${OPENSSL_EXECUTABLE}") if (OPENSSL_EXECUTABLE MATCHES "^$") set(OPENSSL_EXECUTABLE openssl) endif() if (NOT OPENSSL_EXECUTABLE) set(OPENSSL_EXECUTABLE openssl) endif() endif() set(GENCERTS 0) if (LWS_WITH_SSL AND OPENSSL_EXECUTABLE AND NOT LWS_WITHOUT_TEST_SERVER AND NOT LWS_WITHOUT_SERVER AND NOT LWS_WITHOUT_TESTAPPS) set(GENCERTS 1) endif() if (LWS_WITH_ESP32) set(GENCERTS 1) endif() message(" GENCERTS = ${GENCERTS}") if (GENCERTS) message("Generating SSL Certificates for the test-server...") set(TEST_SERVER_SSL_KEY "${PROJECT_BINARY_DIR}/libwebsockets-test-server.key.pem") set(TEST_SERVER_SSL_CERT "${PROJECT_BINARY_DIR}/libwebsockets-test-server.pem") if (WIN32) if (MINGW) message("cmd = \"${OPENSSL_EXECUTABLE}\" req -new -newkey rsa:1024 -days 10000 -nodes -x509 -subj \"/C=GB/ST=Erewhon/L=All around/O=libwebsockets-test/CN=localhost\" -keyout \"${TEST_SERVER_SSL_KEY}\" -out \"${TEST_SERVER_SSL_CERT}\"") execute_process( COMMAND "${OPENSSL_EXECUTABLE}" req -new -newkey rsa:1024 -days 10000 -nodes -x509 -subj "/C=GB/ST=Erewhon/L=All around/O=libwebsockets-test/CN=localhost" -keyout "${TEST_SERVER_SSL_KEY}" -out "${TEST_SERVER_SSL_CERT}" RESULT_VARIABLE OPENSSL_RETURN_CODE) else() file(WRITE "${PROJECT_BINARY_DIR}/openssl_input.txt" "GB\n" "Erewhon\n" "All around\n" "libwebsockets-test\n" "localhost\n" "none@invalid.org\n\n" ) # The "type" command is a bit picky with paths. file(TO_NATIVE_PATH "${PROJECT_BINARY_DIR}/openssl_input.txt" OPENSSL_INPUT_WIN_PATH) message("OPENSSL_INPUT_WIN_PATH = ${OPENSSL_INPUT_WIN_PATH}") message("cmd = \"${OPENSSL_EXECUTABLE}\" req -new -newkey rsa:1024 -days 10000 -nodes -x509 -keyout \"${TEST_SERVER_SSL_KEY}\" -out \"${TEST_SERVER_SSL_CERT}\"") execute_process( COMMAND cmd /c type "${OPENSSL_INPUT_WIN_PATH}" COMMAND "${OPENSSL_EXECUTABLE}" req -new -newkey rsa:1024 -days 10000 -nodes -x509 -keyout "${TEST_SERVER_SSL_KEY}" -out "${TEST_SERVER_SSL_CERT}" RESULT_VARIABLE OPENSSL_RETURN_CODE OUTPUT_QUIET ERROR_QUIET) message("\n") endif() if (OPENSSL_RETURN_CODE) message(WARNING "!!! Failed to generate SSL certificate for Test Server using cmd.exe !!!:\nOpenSSL return code = ${OPENSSL_RETURN_CODE}") else() message("SUCCSESFULLY generated SSL certificate") endif() else() # Unix. execute_process( COMMAND printf "GB\\nErewhon\\nAll around\\nlibwebsockets-test\\n\\nlocalhost\\nnone@invalid.org\\n" COMMAND "${OPENSSL_EXECUTABLE}" req -new -newkey rsa:1024 -days 10000 -nodes -x509 -keyout "${TEST_SERVER_SSL_KEY}" -out "${TEST_SERVER_SSL_CERT}" RESULT_VARIABLE OPENSSL_RETURN_CODE # OUTPUT_QUIET ERROR_QUIET ) if (OPENSSL_RETURN_CODE) message(WARNING "!!! Failed to generate SSL certificate for Test Server!!!:\nOpenSSL return code = ${OPENSSL_RETURN_CODE}") else() message("SUCCESSFULLY generated SSL certificate") endif() endif() list(APPEND TEST_SERVER_DATA "${TEST_SERVER_SSL_KEY}" "${TEST_SERVER_SSL_CERT}") endif() # # Test applications # set(TEST_APP_LIST) if ((LWS_ROLE_H1 OR LWS_ROLE_H2) AND NOT LWS_WITHOUT_TESTAPPS) # # Helper function for adding a test app. # macro(create_test_app TEST_NAME MAIN_SRC S2 S3 S4 S5 S6) set(TEST_SRCS ${MAIN_SRC}) set(TEST_HDR) if ("${S2}" STREQUAL "") else() list(APPEND TEST_SRCS ${S2}) endif() if ("${S3}" STREQUAL "") else() list(APPEND TEST_SRCS ${S3}) endif() if ("${S4}" STREQUAL "") else() list(APPEND TEST_SRCS ${S4}) endif() if ("${S5}" STREQUAL "") else() list(APPEND TEST_SRCS ${S5}) endif() if ("${S6}" STREQUAL "") else() list(APPEND TEST_SRCS ${S6}) endif() if (WIN32) list(APPEND TEST_SRCS ${WIN32_HELPERS_PATH}/getopt.c ${WIN32_HELPERS_PATH}/getopt_long.c ${WIN32_HELPERS_PATH}/gettimeofday.c ) list(APPEND TEST_HDR ${WIN32_HELPERS_PATH}/getopt.h ${WIN32_HELPERS_PATH}/gettimeofday.h ) endif(WIN32) source_group("Headers Private" FILES ${TEST_HDR}) source_group("Sources" FILES ${TEST_SRCS}) add_executable(${TEST_NAME} ${TEST_SRCS} ${TEST_HDR}) if (LWS_LINK_TESTAPPS_DYNAMIC) if (NOT LWS_WITH_SHARED) message(FATAL_ERROR "Build of the shared library is disabled. LWS_LINK_TESTAPPS_DYNAMIC must be combined with LWS_WITH_SHARED.") endif() target_link_libraries(${TEST_NAME} websockets_shared) add_dependencies(${TEST_NAME} websockets_shared) else() if (NOT LWS_WITH_STATIC) message(FATAL_ERROR "Build of the static library is disabled. Disabled LWS_LINK_TESTAPPS_DYNAMIC must be combined with LWS_WITH_STATIC.") endif() target_link_libraries(${TEST_NAME} websockets) add_dependencies(${TEST_NAME} websockets) if (UNIX AND LWS_WITH_SSL AND NOT LWS_WITH_MBEDTLS) target_link_libraries(${TEST_NAME} dl) endif() endif() if (LWS_WITH_HTTP_STREAM_COMPRESSION) target_link_libraries(${TEST_NAME} z) endif() # Set test app specific defines. set_property(TARGET ${TEST_NAME} PROPERTY COMPILE_DEFINITIONS INSTALL_DATADIR="${CMAKE_INSTALL_PREFIX}/share" ) # Prefix the binary names with libwebsockets. set_target_properties(${TEST_NAME} PROPERTIES OUTPUT_NAME libwebsockets-${TEST_NAME}) # Add to the list of tests. list(APPEND TEST_APP_LIST ${TEST_NAME}) endmacro() if (UNIX AND LWS_WITH_PLUGINS) set(CMAKE_C_FLAGS "-fPIC ${CMAKE_C_FLAGS}") if(NOT((${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") OR (${CMAKE_SYSTEM_NAME} MATCHES "QNX"))) target_link_libraries(websockets dl) endif() endif() if (NOT LWS_WITHOUT_SERVER) # # test-server # if (NOT LWS_WITHOUT_TEST_SERVER) create_test_app(test-server "test-apps/test-server.c" "" "" "" "" "") if (LWS_WITH_CGI) create_test_app(test-sshd "test-apps/test-sshd.c" "" "" "" "" "") target_include_directories(test-sshd PRIVATE "${PROJECT_SOURCE_DIR}/plugins/ssh-base/include") endif() endif() # # test-server-extpoll # if (NOT LWS_WITHOUT_TEST_SERVER_EXTPOLL AND NOT WIN32) create_test_app(test-server-extpoll "test-apps/test-server.c" "" "" "" "" "") # Set defines for this executable only. set_property( TARGET test-server-extpoll PROPERTY COMPILE_DEFINITIONS EXTERNAL_POLL INSTALL_DATADIR="${CMAKE_INSTALL_PREFIX}/share" ) # We need to link against winsock code. if (WIN32) target_link_libraries(test-server-extpoll ws2_32.lib) endif(WIN32) endif() if (LWS_WITH_LEJP) create_test_app( test-lejp "test-apps/test-lejp.c" "" "" "" "" "") endif() # Data files for running the test server. list(APPEND TEST_SERVER_DATA "${PROJECT_SOURCE_DIR}/test-apps/favicon.ico" "${PROJECT_SOURCE_DIR}/test-apps/leaf.jpg" "${PROJECT_SOURCE_DIR}/test-apps/candide.zip" "${PROJECT_SOURCE_DIR}/test-apps/libwebsockets.org-logo.svg" "${PROJECT_SOURCE_DIR}/test-apps/http2.png" "${PROJECT_SOURCE_DIR}/test-apps/wss-over-h2.png" "${PROJECT_SOURCE_DIR}/test-apps/lws-common.js" "${PROJECT_SOURCE_DIR}/test-apps/test.html" "${PROJECT_SOURCE_DIR}/test-apps/test.css" "${PROJECT_SOURCE_DIR}/test-apps/test.js") add_custom_command(TARGET test-server POST_BUILD COMMAND "${CMAKE_COMMAND}" -E make_directory "$/../share/libwebsockets-test-server") # Copy the file needed to run the server so that the test apps can # reach them from their default output location foreach (TEST_FILE ${TEST_SERVER_DATA}) if (EXISTS ${TEST_FILE}) add_custom_command(TARGET test-server POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy "${TEST_FILE}" "$/../share/libwebsockets-test-server" VERBATIM) endif() endforeach() endif(NOT LWS_WITHOUT_SERVER) if (NOT LWS_WITHOUT_CLIENT) # # test-client # if (NOT LWS_WITHOUT_TEST_CLIENT) create_test_app(test-client "test-apps/test-client.c" "" "" "" "" "") endif() endif(NOT LWS_WITHOUT_CLIENT) if (LWS_WITH_PLUGINS AND LWS_WITH_SHARED) macro(create_plugin PLUGIN_NAME PLUGIN_INCLUDE MAIN_SRC S2 S3) set(PLUGIN_SRCS ${MAIN_SRC}) if ("${S2}" STREQUAL "") else() list(APPEND PLUGIN_SRCS ${S2}) endif() if ("${S3}" STREQUAL "") else() list(APPEND PLUGIN_SRCS ${S3}) endif() if (WIN32) list(APPEND PLUGIN_SRCS ${WIN32_HELPERS_PATH}/getopt.c ${WIN32_HELPERS_PATH}/getopt_long.c ${WIN32_HELPERS_PATH}/gettimeofday.c ) list(APPEND PLUGIN_HDR ${WIN32_HELPERS_PATH}/getopt.h ${WIN32_HELPERS_PATH}/gettimeofday.h ) endif(WIN32) source_group("Headers Private" FILES ${PLUGIN_HDR}) source_group("Sources" FILES ${PLUGIN_SRCS}) add_library(${PLUGIN_NAME} SHARED ${PLUGIN_SRCS} ${PLUGIN_HDR}) target_link_libraries(${PLUGIN_NAME} websockets_shared) add_dependencies(${PLUGIN_NAME} websockets_shared) include_directories(${PLUGIN_INCLUDE}) # Set test app specific defines. set_property(TARGET ${PLUGIN_NAME} PROPERTY COMPILE_DEFINITIONS INSTALL_DATADIR="${CMAKE_INSTALL_PREFIX}/plugins" ) SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES COMPILE_FLAGS ${CMAKE_C_FLAGS}) # set_target_properties(${PLUGIN_NAME} # PROPERTIES # OUTPUT_NAME ${PLUGIN_NAME}) list(APPEND PLUGINS_LIST ${PLUGIN_NAME}) endmacro() if (LWS_ROLE_WS) create_plugin(protocol_dumb_increment "" "plugins/protocol_dumb_increment.c" "" "") create_plugin(protocol_lws_mirror "" "plugins/protocol_lws_mirror.c" "" "") create_plugin(protocol_lws_status "" "plugins/protocol_lws_status.c" "" "") create_plugin(protocol_lws_table_dirlisting "" "plugins/generic-table/protocol_table_dirlisting.c" "" "") if (NOT WIN32) create_plugin(protocol_lws_raw_test "" "plugins/protocol_lws_raw_test.c" "" "") create_plugin(protocol_deaddrop "" "plugins/deaddrop/protocol_lws_deaddrop.c" "" "") endif() if (LWS_WITH_SERVER_STATUS) create_plugin(protocol_lws_server_status "" "plugins/protocol_lws_server_status.c" "" "") endif() if (NOT LWS_WITHOUT_CLIENT) create_plugin(protocol_client_loopback_test "" "plugins/protocol_client_loopback_test.c" "" "") endif() endif() create_plugin(protocol_post_demo "" "plugins/protocol_post_demo.c" "" "") if (LWS_ROLE_RAW_PROXY) create_plugin(protocol_lws_raw_proxy "" "plugins/raw-proxy/protocol_lws_raw_proxy.c" "" "") endif() if (LWS_WITH_FTS) create_plugin(protocol_fulltext_demo "" "plugins/protocol_fulltext_demo.c" "" "") endif() if (LWS_WITH_SSL) create_plugin(protocol_lws_ssh_base "plugins/ssh-base/include" "plugins/ssh-base/sshd.c;plugins/ssh-base/telnet.c;plugins/ssh-base/kex-25519.c" "plugins/ssh-base/crypto/chacha.c;plugins/ssh-base/crypto/ed25519.c;plugins/ssh-base/crypto/fe25519.c;plugins/ssh-base/crypto/ge25519.c;plugins/ssh-base/crypto/poly1305.c;plugins/ssh-base/crypto/sc25519.c;plugins/ssh-base/crypto/smult_curve25519_ref.c" "") create_plugin(protocol_lws_sshd_demo "plugins/ssh-base/include" "plugins/protocol_lws_sshd_demo.c" "" "") include_directories("${PROJECT_SOURCE_DIR}/plugins/ssh-base/include") endif() if (LWS_WITH_ACME) create_plugin(protocol_lws_acme_client "" "plugins/acme-client/protocol_lws_acme_client.c" "" "") endif() if (LWS_WITH_GENERIC_SESSIONS AND LWS_ROLE_WS) create_plugin(protocol_generic_sessions "" "plugins/generic-sessions/protocol_generic_sessions.c" "plugins/generic-sessions/utils.c" "plugins/generic-sessions/handlers.c") if (WIN32) target_link_libraries(protocol_generic_sessions ${LWS_SQLITE3_LIBRARIES}) else() target_link_libraries(protocol_generic_sessions sqlite3 ) endif(WIN32) create_plugin(protocol_lws_messageboard "" "plugins/generic-sessions/protocol_lws_messageboard.c" "" "") if (WIN32) target_link_libraries(protocol_lws_messageboard ${LWS_SQLITE3_LIBRARIES}) else() target_link_libraries(protocol_lws_messageboard sqlite3 ) endif(WIN32) endif(LWS_WITH_GENERIC_SESSIONS AND LWS_ROLE_WS) endif(LWS_WITH_PLUGINS AND LWS_WITH_SHARED) # # Copy OpenSSL dlls to the output directory on Windows. # (Otherwise we'll get an error when trying to run) # if (WIN32 AND LWS_WITH_SSL AND NOT LWS_WITH_WOLFSSL) if(OPENSSL_BIN_FOUND) message("OpenSSL dlls found:") message(" Libeay: ${LIBEAY_BIN}") message(" SSLeay: ${SSLEAY_BIN}") foreach(TARGET_BIN ${TEST_APP_LIST}) add_custom_command(TARGET ${TARGET_BIN} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy "${LIBEAY_BIN}" "$" VERBATIM) add_custom_command(TARGET ${TARGET_BIN} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy "${SSLEAY_BIN}" "$" VERBATIM) # # Win32: if we are using libuv, also need to copy it in the output dir # if (WIN32 AND LWS_WITH_LIBUV) STRING(REPLACE ".lib" ".dll" LIBUV_BIN ${LIBUV_LIBRARIES}) add_custom_command(TARGET ${TARGET_BIN} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy "${LIBUV_BIN}" "$" VERBATIM) endif() endforeach() endif() endif() endif((LWS_ROLE_H1 OR LWS_ROLE_H2) AND NOT LWS_WITHOUT_TESTAPPS) if (LWS_WITH_LWSWS) list(APPEND LWSWS_SRCS "lwsws/main.c" ) if (WIN32) list(APPEND LWSWS_SRCS ${WIN32_HELPERS_PATH}/getopt.c ${WIN32_HELPERS_PATH}/getopt_long.c ${WIN32_HELPERS_PATH}/gettimeofday.c ) list(APPEND LWSWS_HDR ${WIN32_HELPERS_PATH}/getopt.h ${WIN32_HELPERS_PATH}/gettimeofday.h ) endif(WIN32) source_group("Headers Private" FILES ${LWSWS_HDR}) source_group("Sources" FILES ${LWSWS_SRCS}) add_executable("lwsws" ${LWSWS_SRCS} ${LWSWS_HDR}) target_link_libraries("lwsws" websockets_shared) add_dependencies("lwsws" websockets_shared) # Set test app specific defines. set_property(TARGET "lwsws" PROPERTY COMPILE_DEFINITIONS INSTALL_DATADIR="${CMAKE_INSTALL_PREFIX}/share" ) endif (LWS_WITH_LWSWS) if (UNIX) # Generate and install pkgconfig. # (This is not indented, because the tabs will be part of the output) file(WRITE "${PROJECT_BINARY_DIR}/libwebsockets.pc" "prefix=\"${CMAKE_INSTALL_PREFIX}\" exec_prefix=\${prefix} libdir=\${exec_prefix}/lib${LIB_SUFFIX} includedir=\${prefix}/include Name: libwebsockets Description: Websockets server and client library Version: ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH} Libs: -L\${libdir} -lwebsockets Cflags: -I\${includedir}" ) install(FILES "${PROJECT_BINARY_DIR}/libwebsockets.pc" DESTINATION lib${LIB_SUFFIX}/pkgconfig) file(WRITE "${PROJECT_BINARY_DIR}/libwebsockets_static.pc" "prefix=\"${CMAKE_INSTALL_PREFIX}\" exec_prefix=\${prefix} libdir=\${exec_prefix}/lib${LIB_SUFFIX} includedir=\${prefix}/include Name: libwebsockets_static Description: Websockets server and client static library Version: ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH} Libs: -L\${libdir} -lwebsockets_static Libs.private: Cflags: -I\${includedir}" ) install(FILES "${PROJECT_BINARY_DIR}/libwebsockets_static.pc" DESTINATION lib${LIB_SUFFIX}/pkgconfig) endif(UNIX) # # Installation preparations. # if(WIN32 AND NOT CYGWIN) set(DEF_INSTALL_CMAKE_DIR cmake) else() set(DEF_INSTALL_CMAKE_DIR lib${LIB_SUFFIX}/cmake/libwebsockets) endif() set(LWS_INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files") # Export targets (This is used for other CMake projects to easily find the libraries and include files). if (LWS_WITH_EXPORT_LWSTARGETS) export(TARGETS ${LWS_LIBRARIES} FILE "${PROJECT_BINARY_DIR}/LibwebsocketsTargets.cmake") endif() export(PACKAGE libwebsockets) # Generate the config file for the build-tree. set(LWS__INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/lib" "${PROJECT_BINARY_DIR}") set(LIBWEBSOCKETS_INCLUDE_DIRS ${LWS__INCLUDE_DIRS} CACHE PATH "Libwebsockets include directories") configure_file(${PROJECT_SOURCE_DIR}/cmake/LibwebsocketsConfig.cmake.in ${PROJECT_BINARY_DIR}/LibwebsocketsConfig.cmake @ONLY) # Generate the config file for the installation tree. get_filename_component(LWS_ABSOLUTE_INSTALL_CMAKE_DIR ${LWS_INSTALL_CMAKE_DIR} ABSOLUTE) get_filename_component(LWS_ABSOLUTE_INSTALL_INCLUDE_DIR ${LWS_INSTALL_INCLUDE_DIR} ABSOLUTE) file(RELATIVE_PATH REL_INCLUDE_DIR "${LWS_ABSOLUTE_INSTALL_CMAKE_DIR}" "${LWS_ABSOLUTE_INSTALL_INCLUDE_DIR}") # Calculate the relative directory from the cmake dir. # Note the EVENT_CMAKE_DIR is defined in JanssonConfig.cmake.in, # we escape it here so it's evaluated when it is included instead # so that the include dirs are given relative to where the # config file is located. set(LWS__INCLUDE_DIRS "\${LWS_CMAKE_DIR}/${REL_INCLUDE_DIR}") configure_file(${PROJECT_SOURCE_DIR}/cmake/LibwebsocketsConfig.cmake.in ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/LibwebsocketsConfig.cmake @ONLY) # Generate version info for both build-tree and install-tree. configure_file(${PROJECT_SOURCE_DIR}/cmake/LibwebsocketsConfigVersion.cmake.in ${PROJECT_BINARY_DIR}/LibwebsocketsConfigVersion.cmake @ONLY) set_target_properties(${LWS_LIBRARIES} PROPERTIES PUBLIC_HEADER "${HDR_PUBLIC}") # # Installation. # install(DIRECTORY include/libwebsockets DESTINATION "${LWS_INSTALL_INCLUDE_DIR}" COMPONENT dev_headers) # Install libs and headers. install(TARGETS ${LWS_LIBRARIES} EXPORT LibwebsocketsTargets LIBRARY DESTINATION "${LWS_INSTALL_LIB_DIR}${LIB_SUFFIX}" COMPONENT libraries ARCHIVE DESTINATION "${LWS_INSTALL_LIB_DIR}${LIB_SUFFIX}" COMPONENT libraries RUNTIME DESTINATION "${LWS_INSTALL_BIN_DIR}" COMPONENT libraries # Windows DLLs PUBLIC_HEADER DESTINATION "${LWS_INSTALL_INCLUDE_DIR}" COMPONENT dev) set(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Libraries") set(CPACK_COMPONENT_DEV_DISPLAY_NAME "Development files") # Install test apps. if (NOT LWS_WITHOUT_TESTAPPS) install(TARGETS ${TEST_APP_LIST} RUNTIME DESTINATION ${LWS_INSTALL_EXAMPLES_DIR} COMPONENT examples) set(CPACK_COMPONENT_EXAMPLES_DISPLAY_NAME "Example files") endif() # lwsws if (LWS_WITH_LWSWS) install(TARGETS lwsws RUNTIME DESTINATION "${LWS_INSTALL_BIN_DIR}" COMPONENT lwsws ) endif() # Programs shared files used by the test-server. if (NOT LWS_WITHOUT_TESTAPPS AND NOT LWS_WITHOUT_SERVER) install(FILES ${TEST_SERVER_DATA} DESTINATION share/libwebsockets-test-server COMPONENT examples) install(FILES "${PROJECT_SOURCE_DIR}/test-apps/private/index.html" DESTINATION share/libwebsockets-test-server/private COMPONENT examples) if (LWS_WITH_CGI) set(CGI_TEST_SCRIPT "${PROJECT_SOURCE_DIR}/test-apps/lws-cgi-test.sh") install(FILES ${CGI_TEST_SCRIPT} PERMISSIONS OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE OWNER_READ GROUP_READ WORLD_READ DESTINATION share/libwebsockets-test-server COMPONENT examples) endif() endif() if (NOT LWS_WITHOUT_TEST_SERVER AND NOT LWS_WITHOUT_SERVER AND NOT LWS_WITHOUT_TESTAPPS) install(FILES test-apps/lws-ssh-test-keys;test-apps/lws-ssh-test-keys.pub DESTINATION share/libwebsockets-test-server COMPONENT examples) endif() # plugins if (LWS_WITH_PLUGINS) install(TARGETS ${PLUGINS_LIST} PERMISSIONS OWNER_WRITE OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE OWNER_READ GROUP_READ WORLD_READ DESTINATION share/libwebsockets-test-server/plugins COMPONENT plugins) if (NOT WIN32) install(FILES plugins/deaddrop/assets/index.html;plugins/deaddrop/assets/deaddrop.js;plugins/deaddrop/assets/deaddrop.css;plugins/deaddrop/assets/drop.svg DESTINATION share/libwebsockets-test-server/deaddrop COMPONENT plugins) endif() if (LWS_WITH_SERVER_STATUS) install(FILES plugins/server-status.html;plugins/server-status.js;plugins/server-status.css;plugins/lwsws-logo.png DESTINATION share/libwebsockets-test-server/server-status COMPONENT examples) endif() if (LWS_WITH_GENERIC_SESSIONS) install(FILES plugins/generic-sessions/assets/lwsgs-logo.png plugins/generic-sessions/assets/seats.jpg plugins/generic-sessions/assets/failed-login.html plugins/generic-sessions/assets/lwsgs.js plugins/generic-sessions/assets/lwsgs.css plugins/generic-sessions/assets/post-register-fail.html plugins/generic-sessions/assets/post-register-ok.html plugins/generic-sessions/assets/post-verify-ok.html plugins/generic-sessions/assets/post-verify-fail.html plugins/generic-sessions/assets/sent-forgot-ok.html plugins/generic-sessions/assets/sent-forgot-fail.html plugins/generic-sessions/assets/post-forgot-ok.html plugins/generic-sessions/assets/post-forgot-fail.html plugins/generic-sessions/assets/index.html DESTINATION share/libwebsockets-test-server/generic-sessions COMPONENT examples) install(FILES plugins/generic-sessions/assets/successful-login.html DESTINATION share/libwebsockets-test-server/generic-sessions/needauth COMPONENT examples) install(FILES plugins/generic-sessions/assets/admin-login.html DESTINATION share/libwebsockets-test-server/generic-sessions/needadmin COMPONENT examples) endif() install(FILES plugins/generic-table/assets/lwsgt.js plugins/generic-table/assets/index.html DESTINATION share/libwebsockets-test-server/generic-table COMPONENT examples) endif() # Install the LibwebsocketsConfig.cmake and LibwebsocketsConfigVersion.cmake install(FILES "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/LibwebsocketsConfig.cmake" "${PROJECT_BINARY_DIR}/LibwebsocketsConfigVersion.cmake" DESTINATION "${LWS_INSTALL_CMAKE_DIR}" COMPONENT dev) # Install exports for the install-tree. if (LWS_WITH_EXPORT_LWSTARGETS) install(EXPORT LibwebsocketsTargets DESTINATION "${LWS_INSTALL_CMAKE_DIR}" COMPONENT dev) endif() # build subdir is not part of sources set(CPACK_SOURCE_IGNORE_FILES $(CPACK_SOURCE_IGNORE_FILES) "/.git/" "/build/" "\\\\.tgz$" "\\\\.tar\\\\.gz$") # Most people are more used to "make dist" compared to "make package_source" add_custom_target(dist COMMAND "${CMAKE_MAKE_PROGRAM}" package_source) include(UseRPMTools) if (RPMTools_FOUND) RPMTools_ADD_RPM_TARGETS(libwebsockets scripts/libwebsockets.spec) endif() message("---------------------------------------------------------------------") message(" Settings: (For more help do cmake -LH )") message("---------------------------------------------------------------------") message(" LWS_WITH_STATIC = ${LWS_WITH_STATIC}") message(" LWS_WITH_SHARED = ${LWS_WITH_SHARED}") message(" LWS_WITH_SSL = ${LWS_WITH_SSL} (SSL Support)") message(" LWS_SSL_CLIENT_USE_OS_CA_CERTS = ${LWS_SSL_CLIENT_USE_OS_CA_CERTS}") message(" LWS_WITH_WOLFSSL = ${LWS_WITH_WOLFSSL} (wolfSSL/CyaSSL replacement for OpenSSL)") if (LWS_WITH_WOLFSSL) message(" LWS_WOLFSSL_LIBRARIES = ${LWS_WOLFSSL_LIBRARIES}") message(" LWS_WOLFSSL_INCLUDE_DIRS = ${LWS_WOLFSSL_INCLUDE_DIRS}") endif() message(" LWS_WITH_MBEDTLS = ${LWS_WITH_MBEDTLS} (mbedTLS replacement for OpenSSL)") message(" LWS_WITHOUT_BUILTIN_SHA1 = ${LWS_WITHOUT_BUILTIN_SHA1}") message(" LWS_WITHOUT_BUILTIN_GETIFADDRS = ${LWS_WITHOUT_BUILTIN_GETIFADDRS}") message(" LWS_WITHOUT_CLIENT = ${LWS_WITHOUT_CLIENT}") message(" LWS_WITHOUT_SERVER = ${LWS_WITHOUT_SERVER}") message(" LWS_LINK_TESTAPPS_DYNAMIC = ${LWS_LINK_TESTAPPS_DYNAMIC}") message(" LWS_WITHOUT_TESTAPPS = ${LWS_WITHOUT_TESTAPPS}") message(" LWS_WITHOUT_TEST_SERVER = ${LWS_WITHOUT_TEST_SERVER}") message(" LWS_WITHOUT_TEST_SERVER_EXTPOLL = ${LWS_WITHOUT_TEST_SERVER_EXTPOLL}") message(" LWS_WITHOUT_TEST_PING = ${LWS_WITHOUT_TEST_PING}") message(" LWS_WITHOUT_TEST_CLIENT = ${LWS_WITHOUT_TEST_CLIENT}") message(" LWS_WITHOUT_EXTENSIONS = ${LWS_WITHOUT_EXTENSIONS}") message(" LWS_WITH_LATENCY = ${LWS_WITH_LATENCY}") message(" LWS_WITHOUT_DAEMONIZE = ${LWS_WITHOUT_DAEMONIZE}") message(" LWS_WITH_LIBEV = ${LWS_WITH_LIBEV}") message(" LWS_WITH_LIBUV = ${LWS_WITH_LIBUV}") message(" LWS_WITH_LIBEVENT = ${LWS_WITH_LIBEVENT}") message(" LWS_IPV6 = ${LWS_IPV6}") message(" LWS_UNIX_SOCK = ${LWS_UNIX_SOCK}") message(" LWS_WITH_HTTP2 = ${LWS_WITH_HTTP2}") message(" LWS_SSL_SERVER_WITH_ECDH_CERT = ${LWS_SSL_SERVER_WITH_ECDH_CERT}") message(" LWS_MAX_SMP = ${LWS_MAX_SMP}") message(" LWS_HAVE_PTHREAD_H = ${LWS_HAVE_PTHREAD_H}") message(" LWS_WITH_CGI = ${LWS_WITH_CGI}") message(" LWS_HAVE_OPENSSL_ECDH_H = ${LWS_HAVE_OPENSSL_ECDH_H}") message(" LWS_HAVE_SSL_CTX_set1_param = ${LWS_HAVE_SSL_CTX_set1_param}") message(" LWS_HAVE_RSA_SET0_KEY = ${LWS_HAVE_RSA_SET0_KEY}") message(" LWS_WITH_HTTP_PROXY = ${LWS_WITH_HTTP_PROXY}") message(" LIBHUBBUB_LIBRARIES = ${LIBHUBBUB_LIBRARIES}") message(" PLUGINS = ${PLUGINS_LIST}") message(" LWS_WITH_ACCESS_LOG = ${LWS_WITH_ACCESS_LOG}") message(" LWS_WITH_SERVER_STATUS = ${LWS_WITH_SERVER_STATUS}") message(" LWS_WITH_LEJP = ${LWS_WITH_LEJP}") message(" LWS_WITH_LEJP_CONF = ${LWS_WITH_LEJP_CONF}") message(" LWS_WITH_SMTP = ${LWS_WITH_SMTP}") message(" LWS_WITH_GENERIC_SESSIONS = ${LWS_WITH_GENERIC_SESSIONS}") message(" LWS_STATIC_PIC = ${LWS_STATIC_PIC}") message(" LWS_WITH_RANGES = ${LWS_WITH_RANGES}") message(" LWS_PLAT_OPTEE = ${LWS_PLAT_OPTEE}") message(" LWS_WITH_ESP32 = ${LWS_WITH_ESP32}") message(" LWS_WITH_ZIP_FOPS = ${LWS_WITH_ZIP_FOPS}") message(" LWS_AVOID_SIGPIPE_IGN = ${LWS_AVOID_SIGPIPE_IGN}") message(" LWS_WITH_STATS = ${LWS_WITH_STATS}") message(" LWS_WITH_SOCKS5 = ${LWS_WITH_SOCKS5}") message(" LWS_HAVE_SYS_CAPABILITY_H = ${LWS_HAVE_SYS_CAPABILITY_H}") message(" LWS_HAVE_LIBCAP = ${LWS_HAVE_LIBCAP}") message(" LWS_WITH_PEER_LIMITS = ${LWS_WITH_PEER_LIMITS}") message(" LWS_HAVE_ATOLL = ${LWS_HAVE_ATOLL}") message(" LWS_HAVE__ATOI64 = ${LWS_HAVE__ATOI64}") message(" LWS_HAVE_STAT32I64 = ${LWS_HAVE_STAT32I64}") message(" LWS_HAS_INTPTR_T = ${LWS_HAS_INTPTR_T}") message(" LWS_WITH_EXPORT_LWSTARGETS = ${LWS_WITH_EXPORT_LWSTARGETS}") message(" LWS_WITH_ABSTRACT = ${LWS_WITH_ABSTRACT}") message("---------------------------------------------------------------------") # These will be available to parent projects including libwebsockets using add_subdirectory() set(LIBWEBSOCKETS_LIBRARIES ${LWS_LIBRARIES} CACHE STRING "Libwebsocket libraries") if (LWS_WITH_STATIC) set(LIBWEBSOCKETS_LIBRARIES_STATIC websockets CACHE STRING "Libwebsocket static library") endif() if (LWS_WITH_SHARED) set(LIBWEBSOCKETS_LIBRARIES_SHARED websockets_shared CACHE STRING "Libwebsocket shared library") endif() if (LWS_WITH_MINIMAL_EXAMPLES) MACRO(SUBDIRLIST result curdir) FILE(GLOB children RELATIVE ${curdir} ${curdir}/*) SET(dirlist "") FOREACH(child ${children}) IF(IS_DIRECTORY ${curdir}/${child}) LIST(APPEND dirlist ${child}) ENDIF() ENDFOREACH() SET(${result} ${dirlist}) ENDMACRO() SUBDIRLIST(SUBDIRS "${PROJECT_SOURCE_DIR}/minimal-examples") FOREACH(subdir ${SUBDIRS}) SUBDIRLIST(SUBDIRS2 "${PROJECT_SOURCE_DIR}/minimal-examples/${subdir}") FOREACH(subdir2 ${SUBDIRS2}) if (EXISTS "${PROJECT_SOURCE_DIR}/minimal-examples/${subdir}/${subdir2}/CMakeLists.txt") message("Processing ${PROJECT_SOURCE_DIR}/minimal-examples/${subdir}/${subdir2}") add_subdirectory("${PROJECT_SOURCE_DIR}/minimal-examples/${subdir}/${subdir2}") endif() ENDFOREACH() ENDFOREACH() ENDIF() # This must always be last! include(CPack) libwebsockets-3.2.1/Kconfig000066400000000000000000000015311357643561300156750ustar00rootroot00000000000000menu "Libwebsockets" config LWS_MODEL_NAME string "Model name of device firmware is for" default "lws" config LWS_IS_FACTORY_APPLICATION bool "Is this application is designed for the FACTORY flash slot" default "n" config LWS_OTA_SERVER_FQDN depends on LWS_IS_FACTORY_APPLICATION string "Domain name of OTA update server, eg, warmcat.com" default "" config LWS_OTA_SERVER_BASE_URL depends on LWS_IS_FACTORY_APPLICATION string "Base URL on OTA update server, eg, /esp32-ota (model is added)" default "/esp32-ota" config LWS_OTA_SERVER_UPLOAD_USER depends on LWS_IS_FACTORY_APPLICATION string "User to scp to upload server with" default "root" config LWS_OTA_SERVER_UPLOAD_PATH depends on LWS_IS_FACTORY_APPLICATION string "Path served in upload server (eg, \"/var/www/libwebsockets.org\"" default "/var/www/libwebsockets.org" endmenu libwebsockets-3.2.1/LICENSE000066400000000000000000000701221357643561300154010ustar00rootroot00000000000000Libwebsockets and included programs are provided under the terms of the GNU Library General Public License (LGPL) 2.1, with the following exceptions: 1) Any reference, whether in these modifications or in the GNU Library General Public License 2.1, to this License, these terms, the GNU Lesser Public License, GNU Library General Public License, LGPL, or any similar reference shall refer to the GNU Library General Public License 2.1 as modified by these paragraphs 1) through 4). 2) Static linking of programs with the libwebsockets library does not constitute a derivative work and does not require the author to provide source code for the program, use the shared libwebsockets libraries, or link their program against a user-supplied version of libwebsockets. If you link the program to a modified version of libwebsockets, then the changes to libwebsockets must be provided under the terms of the LGPL in sections 1, 2, and 4. 3) You do not have to provide a copy of the libwebsockets license with programs that are linked to the libwebsockets library, nor do you have to identify the libwebsockets license in your program or documentation as required by section 6 of the LGPL. However, programs must still identify their use of libwebsockets. The following example statement can be included in user documentation to satisfy this requirement: "[program] is based in part on the work of the libwebsockets project (https://libwebsockets.org)" 4) Some sources included have their own, more liberal licenses, or options to get original sources with the liberal terms. Original liberal license retained - lib/misc/sha-1.c - 3-clause BSD license retained, link to original - win32port/zlib - ZLIB license (see zlib.h) - lib/tls/mbedtls/wrapper - Apache 2.0 (only built if linked against mbedtls) Relicensed to libwebsocket license - lib/misc/base64-decode.c - relicensed to LGPL2.1+SLE, link to original - lib/misc/daemonize.c - relicensed from Public Domain to LGPL2.1+SLE, link to original Public Domain version Public Domain (CC-zero) to simplify reuse - test-apps/*.c - test-apps/*.h - minimal-examples/* - lwsws/* ------ end of exceptions GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! libwebsockets-3.2.1/Makefile.projbuild000066400000000000000000000000661357643561300200250ustar00rootroot00000000000000CPPFLAGS += -I$(BUILD_DIR_BASE)/libwebsockets/include libwebsockets-3.2.1/README.md000066400000000000000000000427601357643561300156620ustar00rootroot00000000000000[![Travis Build Status](https://travis-ci.org/warmcat/libwebsockets.svg)](https://travis-ci.org/warmcat/libwebsockets) [![Appveyor Build status](https://ci.appveyor.com/api/projects/status/qfasji8mnfnd2r8t?svg=true)](https://ci.appveyor.com/project/lws-team/libwebsockets) [![Coverity Scan Build Status](https://scan.coverity.com/projects/3576/badge.svg)](https://scan.coverity.com/projects/3576) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/2266/badge)](https://bestpractices.coreinfrastructure.org/projects/2266) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/144fb195a83046e484a75c8b4c6cfc99)](https://www.codacy.com/app/lws-team/libwebsockets?utm_source=github.com&utm_medium=referral&utm_content=warmcat/libwebsockets&utm_campaign=Badge_Grade) # Libwebsockets Libwebsockets is a simple-to-use, pure C library providing client and server for **http/1**, **http/2**, **websockets** and other protocols in a security-minded, lightweight, configurable, scalable and flexible way. It's easy to build and cross-build via cmake and is suitable for tasks from embedded RTOS through mass cloud serving. [50 minimal examples](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples) for various scenarios, CC0-licensed (public domain) for cut-and-paste, allow you to get started quickly. ![overview](./doc-assets/lws-overview.png) News ---- ## V3.2 relase last planned LGPLv2.1+SLE release As foretold the v3.2 release is the last planned release that will have the code under LGPLv2.1+SLE. Master has those parts changed to MIT license; the pieces that were CC0 or another liberal license remain the same. ## License change plan Lws is planning to change the pieces that are currently LGPLv2.1+SLE to MIT https://opensource.org/licenses/MIT . Stuff that is already CC0 or another permissive license will stay as it is. This license change is making an already permissive license (it was already LGPL, and the SLE removed most restrictions already) even more permissive. So I expect most contributors either don't much care or are happy about it. Contributors who object should contact me via: - the lws mailing list https://libwebsockets.org/mailman/listinfo/libwebsockets - github issue https://github.com/warmcat/libwebsockets , or - email to `andy@warmcat.com` ...before **Aug 11 2019**, and I'll rewrite the related code before the change. There'll be a last release of the currently-licensed stuff (probably v3.2) and then the same code will have the licese grant changed in the sources, become master and also have an otherwise identical release, probably v4.0. The v3.2 stuff won't be maintained (by me anyway... it's FOSS though) but the v4.0 stuff which is the same except the license will get the usual v4.0-stable treatment. Even after the change I will continue to rely on users to help me with bug reports and patches, work together on new features. The license will no longer require it but the practical advantages from staying aligned with upstream lws for users remain the same. ## New features on master - `LWS_WITH_NETWORK` cmake option (default on) allows one-step removal of vhost, wsi, roles, event loop and all network-related code from the build. This enables use-cases where you actually need unrelated features like JOSE or FTS compactly. lws_context still exists and if tls is enabled, the tls-related code is still built so the crypto is available, just nothing related to network. - New Crypto-agile APIs + JOSE / JWS / JWE / JWK support... apis work exactly the same with OpenSSL or mbedTLS tls library backends, and allow key cycling and crypto algorithm changes while allowing for grace periods [README.crypto-apis](https://libwebsockets.org/git/libwebsockets/tree/READMEs/README.crypto-apis.md) - CMake config simplification for crypto: `-DLWS_WITH_GENCRYPTO=1` for all generic cipher and hash apis built (which work the same on mbedtls and OpenSSL transparently), and `-DLWS_WITH_JOSE=1` for all JOSE, JWK, JWS and JWE support built (which use gencrypto and so also work the same regardless of tls library backend). - **`x.509`** - new generic x509 api allows PEM-based certificate and key trust relationship verification, and conversion between x.509 keys and JWK. Works for EC and RSA keys, and on mbedtls and OpenSSl the same. [x.509 api](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-x509.h), [x.509 minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-x509) - **`JWE`** - JWE (RFC7516) Algorithms with CI tests: |Key Encryption|Payload authentication + crypt|Enc + Dec Support| |---|---|---| |`RSAES-PKCS1-v1.5` 2048b & 4096b|`AES_128_CBC_HMAC_SHA_256`|Enc + Dec| |`RSAES-PKCS1-v1.5` 2048b|`AES_192_CBC_HMAC_SHA_384`|Enc + Dec| |`RSAES-PKCS1-v1.5` 2048b|`AES_256_CBC_HMAC_SHA_512`|Enc + Dec| |`RSAES-OAEP`|`AES_256_GCM`|Enc + Dec| |`AES128KW`, `AES192KW`, `AES256KW`|`AES_128_CBC_HMAC_SHA_256`|Enc + Dec| |`AES128KW`, `AES192KW`, `AES256KW`|`AES_192_CBC_HMAC_SHA_384`|Enc + Dec| |`AES128KW`, `AES192KW`, `AES256KW`|`AES_256_CBC_HMAC_SHA_512`|Enc + Dec| |`ECDH-ES` (P-256/384/521 key)|`AES_128/192/256_GCM`|Enc + Dec| |`ECDH-ES+A128/192/256KW` (P-256/384/521 key)|`AES_128/192/256_GCM`|Enc + Dec| All tests pass on both OpenSSL and mbedTLS backends, using keys generated on both OpenSSL and mbedTLS in the tests. A minimal example tool shows how to encrypt and decrypt compact JWE objects from the commandline for all supported algorithms. [jwe api](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-jwe.h), [jwe unit tests](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-jose/jwe.c), [jwe minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-jwe) - **`lws-genec` ECDSA** - JWS-compatible ECDSA is supported on both OpenSSL and mbedtls. - **`JWS`** - JWS (RFC7515) is now supported for none, HS256/384/512, RS256/384/512, and ES256/384/512, on both OpenSSL and mbedtls. There's a minimal example tool that signs and verifies compact representation JWS from stdin. [jws api](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-jws.h), [jws unit tests](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-jose/jws.c), [jws minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-jwe) - **`JWK`** - JWK (RFC7517) now supports oct, RSA and EC keys including JSON key arrays on both OpenSSL and mbedtls. A minimal example tool shows how to create new JSON JWK keys to specified parameters from the commandline for all supported ciphers. [jwk minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-jwk) - **`lws-genrsa` OAEP + PSS support** - in addition to PKCS#1 1.5 padding, OAEP and PSS are now supported on both mbedtls and openssl backends. - **`lws-genaes` Generic AES crypto** - thin api layer works identically with both mbedtls and openssl backends. Supports CBC, CFB128, CFB8, CTR, ECB, OFB, XTS and GCM variants. Unit tests in CI. [genaes api](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-genaes.h), [api test](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-gencrypto), CMake config: `-DLWS_WITH_GENCRYPTO=1` - **http fallback support** - you can specify a role and protocol to apply if non-http or non-tls packets arrive at an http(s) listen port. For example, you can specify that the new `raw proxy` role + protocol should be used, to proxy your sshd port over :443 or :80. Without affecting normal http(s) serving on those ports but allowing, eg, `ssh -p 443 invalid@libwebsockets.org`. [http fallback docs](https://libwebsockets.org/git/libwebsockets/tree/READMEs/README.http-fallback.md) - **raw tcp proxy role and protocol** - adding raw tcp proxying is now trivial using the built-in lws implementation. You can control the onward connection using a pvo in the format "ipv4:server.com:port" [raw proxy minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/raw/minimal-raw-proxy), [raw proxy docs](https://libwebsockets.org/git/libwebsockets/tree/plugins/raw-proxy), Cmake config: `-DLWS_ROLE_RAW_PROXY=1 -DLWS_WITH_PLUGINS=1` - **deaddrop HTML file upload protocol** - protocol and minimal example for file upload and sharing using drag and drop and a file picker. Integrated with basic auth, uploaded files marked with upload user, and files owned by the authenticated user may be deleted via the UI. Supports multiple simultaneous uploads both by drag-and-drop and from the file picker. [deaddrop minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/http-server/minimal-http-server-deaddrop) - **basic auth for ws(s)** - You can apply basic auth credential requirement to ws connections same as on mounts now. Just add a pvo "basic-auth" with the value being the credentials file path when enabling the ws protocol for the vhost. ## v3.1 released: new features in v3.1 - **lws threadpool** - lightweight pool of pthreads integrated to lws wsi, with all synchronization to event loop handled internally, queue for excess tasks [threadpool docs](https://libwebsockets.org/git/libwebsockets/tree/lib/misc/threadpool), [threadpool minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/ws-server/minimal-ws-server-threadpool), Cmake config: `-DLWS_WITH_THREADPOOL=1` - **libdbus support** integrated on lws event loop [lws dbus docs](https://libwebsockets.org/git/libwebsockets/tree/lib/roles/dbus), [lws dbus client minimal examples](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/dbus-client), [lws dbus server minimal examples](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/dbus-server), Cmake config: `-DLWS_ROLE_DBUS=1` - **lws allocated chunks (lwsac)** - helpers for optimized mass allocation of small objects inside a few larger malloc chunks... if you need to allocate a lot of inter-related structs for a limited time, this removes per-struct allocation library overhead completely and removes the need for any destruction handling [lwsac docs](https://libwebsockets.org/git/libwebsockets/tree/lib/misc/lwsac), [lwsac minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-lwsac), Cmake Config: `-DLWS_WITH_LWSAC=1` - **lws tokenizer** - helper api for robustly tokenizing your own strings without allocating or adding complexity. Configurable by flags for common delimiter sets and comma-separated-lists in the tokenizer. Detects and reports syntax errors. [lws_tokenize docs](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-tokenize.h), [lws_tokenize minimal example / api test](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-lws_tokenize) - **lws full-text search** - optimized trie generation, serialization, autocomplete suggestion generation and instant global search support extensible to huge corpuses of UTF-8 text while remaining super lightweight on resources. [full-text search docs](https://libwebsockets.org/git/libwebsockets/tree/lib/misc/fts), [full-text search minimal example / api test](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-fts), [demo](https://libwebsockets.org/ftsdemo/), [demo sources](https://libwebsockets.org/git/libwebsockets/tree/plugins/protocol_fulltext_demo.c), Cmake config: `-DLWS_WITH_FTS=1 -DLWS_WITH_LWSAC=1` - **gzip + brotli http server-side compression** - h1 and h2 detection of client support for server compression, and auto-application to files with mimetypes "text/*", "application/javascript" and "image/svg.xml". Cmake config: `-DLWS_WITH_HTTP_STREAM_COMPRESSION=1` for gzip, optionally also give `-DLWS_WITH_HTTP_BROTLI=1` for preferred `br` brotli compression - **managed disk cache** - API for managing a directory containing cached files with hashed names, and automatic deletion of LRU files once the cache is above a given limit. [lws diskcache docs](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-diskcache.h), Cmake config: `-DLWS_WITH_DISKCACHE=1` - **http reverse proxy** - lws mounts support proxying h1 or h2 requests to a local or remote IP, or unix domain socket over h1. This allows microservice type architectures where parts of the common URL space are actually handled by external processes which may be remote or on the same machine. [lws gitohashi serving](https://libwebsockets.org/git/) is handled this way. [unix domain sockets reverse proxy docs](https://libwebsockets.org/git/libwebsockets/tree/READMEs/README.unix-domain-reverse-proxy.md), CMake config: `-DLWS_WITH_HTTP_PROXY=1` and `-DLWS_UNIX_SOCK=1` for Unix Domain Sockets - **update minimal examples for strict Content Security Policy** the minimal examples now show the best practices around Content Security Policy and disabling inline Javascript. Updated examples that are served with the recommended security restrictions show a new "Strict Content Security Policy" graphic. [Read how to upgrade your applications to use a strict CSP](https://libwebsockets.org/git/libwebsockets/tree/READMEs/README.content-security-policy.md). - **release policy docs** - unsure what branch, version or tag to use, or how to follow master cleanly? [Read the release policy docs](https://libwebsockets.org/git/libwebsockets/tree/READMEs/README.release-policy.md) which explain how and why lws is developed, released and maintained. ## v3.0.1 released See the git log for the list of fixes. ## v3.0.0 released See the changelog for info https://libwebsockets.org/git/libwebsockets/tree/changelog?h=v3.0-stable ## Major CI improvements for QA The Travis build of lws done on every commit now runs: Tests|Count|Explanation ---|---|--- Build / Linux / gcc|16|-Wall -Werror cmake config variants Build / Mac / Clang|16|-Wall -Werror cmake config variants Build / Windows / MSVC|7|default Selftests|openssl:43, mbedtls:43|minimal examples built and run against each other and remote server attack.sh|225|Correctness, robustness and security tests for http parser Autobahn Server|480|Testing lws ws client, including permessage-deflate Autobahn Client|480|Testing lws ws server, including permaessage-deflate h2spec|openssl:146, mbedtls:146|Http/2 server compliance suite (in strict mode) h2load|openssl:6, mbedtls:6|Http/2 server load tool (checks 10K / 100K in h1 and h2, at 1, 10, 100 concurrency) h2load SMP|6|Http/2 and http/1.1 server load checks on SMP server build The over 1,500 tests run on every commit take 1hr 15 of compute time to complete. If any problems are found, it breaks the travis build, generating an email. Codacy also checks every patch and the information used to keep lws at zero issues. Current master is checked by Coverity at least daily and kept at zero issues. Current master passes all the tests and these new CI arrangements will help keep it that way. ## Lws has the first official ws-over-h2 server support ![wss-over-h2](./doc-assets/wss2.png) There's a new [RFC](https://tools.ietf.org/html/rfc8441) that enables multiplexing ws connections over an http/2 link. Compared to making individual tcp and tls connections for each ws link back to the same server, this makes your site start up radically faster, and since all the connections are in one tls tunnel, with considerable memory reduction serverside. To enable it on master you just need -DLWS_WITH_HTTP2=1 at cmake. No changes to existing code are necessary for either http/2 (if you use the official header creation apis if you return your own headers, as shown in the test apps for several versions) or to take advantage of ws-over-h2. When built with http/2 support, it automatically falls back to http/1 and traditional ws upgrade if that's all the client can handle. Currently only Chrome Canary v67 supports this ws-over-h2 encapsulation (chrome must be started with `--enable-websocket-over-http2` switch to enable it currently), and patches exist for Firefox. Authors of both browser implementations tested against the lws server implementation. ## New "minimal examples" https://libwebsockets.org/git/libwebsockets/tree/minimal-examples These are like the test apps, but focus on doing one thing, the best way, with the minimum amount of code. For example the minimal-http-server serves the cwd on http/1 or http/2 in 50 LOC. Same thing with tls is just three more lines. They build standalone, so it's easier to copy them directly to start your own project; they are CC0 licensed (public domain) to facilitate that. ## Windows binary builds 32- and 64-bit Windows binary builds are available via Appveyor. Visit [lws on Appveyor](https://ci.appveyor.com/project/lws-team/libwebsockets), click on a build, the ARTIFACTS, and unzip the zip file at `C:\Program Files (x86)/libwebsockets`. ## Support This is the libwebsockets C library for lightweight websocket clients and servers. For support, visit https://libwebsockets.org and consider joining the project mailing list at https://libwebsockets.org/mailman/listinfo/libwebsockets You can get the latest version of the library from git: - https://libwebsockets.org/git Doxygen API docs for master: https://libwebsockets.org/lws-api-doc-master/html/index.html libwebsockets-3.2.1/READMEs/000077500000000000000000000000001357643561300155125ustar00rootroot00000000000000libwebsockets-3.2.1/READMEs/README.build.md000066400000000000000000000633551357643561300201030ustar00rootroot00000000000000Notes about building lws ======================== @section cm Introduction to CMake CMake is a multi-platform build tool that can generate build files for many different target platforms. See more info at http://www.cmake.org CMake also allows/recommends you to do "out of source"-builds, that is, the build files are separated from your sources, so there is no need to create elaborate clean scripts to get a clean source tree, instead you simply remove your build directory. Libwebsockets has been tested to build successfully on the following platforms with SSL support (for OpenSSL/wolfSSL/BoringSSL): - Windows (Visual Studio) - Windows (MinGW) - Linux (x86 and ARM) - OSX - NetBSD @section build1 Building the library and test apps The project settings used by CMake to generate the platform specific build files is called [CMakeLists.txt](../CMakeLists.txt). CMake then uses one of its "Generators" to output a Visual Studio project or Make file for instance. To see a list of the available generators for your platform, simply run the "cmake" command. Note that by default OpenSSL will be linked, if you don't want SSL support see below on how to toggle compile options. @section bu Building on Unix: 1. Install CMake 2.8 or greater: http://cmake.org/cmake/resources/software.html (Most Unix distributions comes with a packaged version also) 2. Install OpenSSL. 3. Generate the build files (default is Make files): ``` $ cd /path/to/src $ mkdir build $ cd build $ cmake .. ``` 4. Finally you can build using the generated Makefile: ``` $ make && sudo make install ``` **NOTE**: The `build/`` directory can have any name and be located anywhere on your filesystem, and that the argument `..` given to cmake is simply the source directory of **libwebsockets** containing the [CMakeLists.txt](../CMakeLists.txt) project file. All examples in this file assumes you use ".." **NOTE2**: A common option you may want to give is to set the install path, same as --prefix= with autotools. It defaults to /usr/local. You can do this by, eg ``` $ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr . ``` **NOTE3**: On machines that want libraries in lib64, you can also add the following to the cmake line ``` -DLIB_SUFFIX=64 ``` **NOTE4**: If you are building against a non-distro OpenSSL (eg, in order to get access to ALPN support only in newer OpenSSL versions) the nice way to express that in one cmake command is eg, ``` $ cmake .. -DOPENSSL_ROOT_DIR=/usr/local/ssl \ -DCMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE=/usr/local/ssl \ -DLWS_WITH_HTTP2=1 ``` When you run the test apps using non-distro SSL, you have to force them to use your libs, not the distro ones ``` $ LD_LIBRARY_PATH=/usr/local/ssl/lib libwebsockets-test-server --ssl ``` To get it to build on latest openssl (2016-04-10) it needed this approach ``` cmake .. -DLWS_WITH_HTTP2=1 -DLWS_OPENSSL_INCLUDE_DIRS=/usr/local/include/openssl -DLWS_OPENSSL_LIBRARIES="/usr/local/lib64/libssl.so;/usr/local/lib64/libcrypto.so" ``` Mac users have reported ``` $ export OPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2k; cmake ..; make -j4 ``` worked for them when using "homebrew" OpenSSL **NOTE5**: To build with debug info and _DEBUG for lower priority debug messages compiled in, use ``` $ cmake .. -DCMAKE_BUILD_TYPE=DEBUG ``` **NOTE6** To build on Solaris the linker needs to be informed to use lib socket and libnsl, and only builds in 64bit mode. ```bash $ cmake .. -DCMAKE_C_FLAGS=-m64 -DCMAKE_EXE_LINKER_FLAGS="-lsocket -lnsl" ``` **NOTE7** Build and test flow against boringssl. Notice `LWS_WITH_GENHASH` is currently unavailable with boringssl due to their removing the necessary apis. Build current HEAD boringssl ``` $ cd /projects $ git clone https://boringssl.googlesource.com/boringssl $ cd boringssl $ mkdir build $ cd build $ cmake .. -DBUILD_SHARED_LIBS=1 $ make -j8 ``` Build and test lws against it ``` $ cd /projects/libwebsockets/build $ cmake .. -DOPENSSL_LIBRARIES="/projects/boringssl/build/ssl/libssl.so;\ /projects/boringssl/build/crypto/libcrypto.so" \ -DOPENSSL_INCLUDE_DIRS=/projects/boringssl/include \ -DLWS_WITH_BORINGSSL=1 -DCMAKE_BUILD_TYPE=DEBUG $ make -j8 && sudo make install $ LD_PRELOAD="/projects/boringssl/build/ssl/libssl.so \ /projects/boringssl/build/crypto/libcrypto.so" \ /usr/local/bin/libwebsockets-test-server -s ``` 4. Finally you can build using the generated Makefile: ```bash $ make ``` @section lcap Linux Capabilities On Linux, lws now lets you retain selected root capabilities when dropping privileges. If libcap-dev or similar package is installed providing sys/capabilities.h, and libcap or similar package is installed providing libcap.so, CMake will enable the capability features. The context creation info struct .caps[] and .count_caps members can then be set by user code to enable selected root capabilities to survive the transition to running under an unprivileged user. @section cmq Quirk of cmake When changing cmake options, for some reason the only way to get it to see the changes sometimes is delete the contents of your build directory and do the cmake from scratch. deleting build/CMakeCache.txt may be enough. @section cmw Building on Windows (Visual Studio) 1. Install CMake 2.6 or greater: http://cmake.org/cmake/resources/software.html 2. Install OpenSSL binaries. https://wiki.openssl.org/index.php/Binaries (**NOTE**: Preferably in the default location to make it easier for CMake to find them) **NOTE2**: Be sure that OPENSSL_CONF environment variable is defined and points at \bin\openssl.cfg 3. Generate the Visual studio project by opening the Visual Studio cmd prompt: ``` cd md build cd build cmake -G "Visual Studio 10" .. ``` (**NOTE**: There is also a cmake-gui available on Windows if you prefer that) **NOTE2**: See this link to find out the version number corresponding to your Visual Studio edition: http://superuser.com/a/194065 4. Now you should have a generated Visual Studio Solution in your `/build` directory, which can be used to build. 5. Some additional deps may be needed - iphlpapi.lib - psapi.lib - userenv.lib 6. If you're using libuv, you must make sure to compile libuv with the same multithread-dll / Mtd attributes as libwebsockets itself @section cmwmgw Building on Windows (MinGW) 1. Install MinGW For Fedora, it's, eg, `dnf install mingw64-gcc` 2. Install current CMake package For Fedora, it's `dnf install cmake` 3. Instal mingw-built OpenSSL pieces For Fedora, it's `mingw64-openssl.noarch mingw64-openssl-static.noarch` mingw64-cmake as described below will auto-find the libs and includes for build. But to execute the apps, they either need to go into the same `/usr/x86_64-w64-mingw32/sys-root/mingw/bin/` as the dlls are installed to, or the dlls have to be copied into the same dir as your app executable. 4. Generate the build files (default is Make files) using MSYS shell. For Fedora, they provide a `mingw64-cmake` wrapper in the package `mingw64-filesystem`, with this you can run that instead of cmake directly and don't have to get involved with setting the cmake generator. Otherwise doing it by hand is like this: ``` $ cd /drive/path/to/src $ mkdir build $ cd build $ cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX=C:/MinGW .. ``` To generate build files allowing to create libwebsockets binaries with debug information set the CMAKE_BUILD_TYPE flag to DEBUG: ``` $ cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX=C:/MinGW -DCMAKE_BUILD_TYPE=DEBUG .. ``` 5. Finally you can build using the generated Makefile and get the results deployed into your MinGW installation: ``` $ make && make install ``` @section distro Selecting CMake options useful for distros Distro packagers should select the CMake option "LWS_WITH_DISTRO_RECOMMENDED", which selects common additional options like support for various event libraries, plugins and lwsws. @section ssllib Choosing Your TLS Poison - If you are really restricted on memory, code size, or don't care about TLS speed, mbedTLS is a good choice: `cmake .. -DLWS_WITH_MBEDTLS=1` - If cpu and memory is not super restricted and you care about TLS speed, OpenSSL or a directly compatible variant like Boring SSL is a good choice. Just building lws against stock Fedora OpenSSL or stock Fedora mbedTLS, for SSL handhake mbedTLS takes ~36ms and OpenSSL takes ~1ms on the same x86_64 build machine here, with everything else the same. Over the 144 connections of h2spec compliance testing for example, this ends up completing in 400ms for OpenSSL and 5.5sec for mbedTLS on x86_64. In other words mbedTLS is very slow compared to OpenSSL under the (fairly typical) conditions I tested it. This isn't an inefficiency in the mbedtls interface implementation, it's just mbedTLS doing the crypto much slower than OpenSSL, which has accelerated versions of common crypto operations it automatically uses for platforms supporting it. As of Oct 2017 mbedTLS itself has no such optimizations for any platform that I could find. It's just pure C running on the CPU. Lws supports both almost the same, so instead of taking my word for it you are invited to try it both ways and see which the results (including, eg, binary size and memory usage as well as speed) suggest you use. NOTE: one major difference with mbedTLS is it does not load the system trust store by default. That has advantages and disadvantages, but the disadvantage is you must provide the CA cert to lws built against mbedTLS for it to be able to validate it, ie, use -A with the test client. The minimal test clients have the CA cert for warmcat.com and libwebsockets.org and use it if they see they were built with mbedTLS. @section optee Building for OP-TEE OP-TEE is a "Secure World" Trusted Execution Environment. Although lws is only part of the necessary picture to have an https-enabled TA, it does support OP-TEE as a platform and if you provide the other pieces, does work very well. Select it in cmake with `-DLWS_PLAT_OPTEE=1` @section cmco Setting compile options To set compile time flags you can either use one of the CMake gui applications or do it via the command line. @subsection cmcocl Command line To list available options (omit the H if you don't want the help text): cmake -LH .. Then to set an option and build (for example turn off SSL support): cmake -DLWS_WITH_SSL=0 .. or cmake -DLWS_WITH_SSL:BOOL=OFF .. @subsection cmcoug Unix GUI If you have a curses-enabled build you simply type: (not all packages include this, my debian install does not for example). ccmake @subsection cmcowg Windows GUI On windows CMake comes with a gui application: Start -> Programs -> CMake -> CMake (cmake-gui) @section wolf wolfSSL/CyaSSL replacement for OpenSSL wolfSSL/CyaSSL is a lightweight SSL library targeted at embedded systems: https://www.wolfssl.com/wolfSSL/Products-wolfssl.html It contains a OpenSSL compatibility layer which makes it possible to pretty much link to it instead of OpenSSL, giving a much smaller footprint. **NOTE**: wolfssl needs to be compiled using the `--enable-opensslextra` flag for this to work. @section wolf1 Compiling libwebsockets with wolfSSL ``` cmake .. -DLWS_WITH_WOLFSSL=1 \ -DLWS_WOLFSSL_INCLUDE_DIRS=/path/to/wolfssl \ -DLWS_WOLFSSL_LIBRARIES=/path/to/wolfssl/wolfssl.a .. ``` **NOTE**: On windows use the .lib file extension for `LWS_WOLFSSL_LIBRARIES` instead. @section cya Compiling libwebsockets with CyaSSL ``` cmake .. -DLWS_WITH_CYASSL=1 \ -DLWS_CYASSL_INCLUDE_DIRS=/path/to/cyassl \ -DLWS_CYASSL_LIBRARIES=/path/to/wolfssl/cyassl.a .. ``` **NOTE**: On windows use the .lib file extension for `LWS_CYASSL_LIBRARIES` instead. @section gzip Selecting GZIP or MINIZ By default lws supports gzip when compression is needed. But you can tell it to use MINIZ instead by using `-DLWS_WITH_MINIZ=1`. For native build cmake will try to find an existing libminiz.so or .a and build against that and the found includes automatically. For cross-build or building against local miniz, you need the following kind of cmake to tell it where to get miniz ``` cmake .. -DLWS_WITH_MINIZ=1 -DLWS_WITH_ZIP_FOPS=1 -DMINIZ_INCLUDE_DIRS="/projects/miniz;/projects/miniz/build" -DMINIZ_LIBRARIES=/projects/miniz/build/libminiz.so.2.1.0 ``` @section esp32 Building for ESP32 Building for ESP32 requires the ESP-IDF framework. It can be built under Linux, OSX or Windows (MSYS2). 1. Install ESP-IDF, follow the getting started guide here - http://esp-idf.readthedocs.io/en/latest/get-started/ 2. Set ESP-IDF to last known working version (assuming ESP-IDF is in `~/esp/esp-idf`) : ``` cd ~/esp/esp-idf git checkout 0c50b65a34cd6b3954f7435193411a88adb49cb0 git submodule update --recursive ``` 3. Add `libwebsockets` as a submodule in the `components` folder of your ESP-IDF project: ``` git submodule add https://github.com/warmcat/libwebsockets.git components/libwebsockets ``` 4. If on Windows (MSYS2) you will need to install CMake in the MSYS2 environment: ``` pacman -S mingw-w64-i686-cmake ``` If you're on Linux or OSX ensure CMake version is at least 3.7. @section extplugins Building plugins outside of lws itself The directory ./plugin-standalone/ shows how easy it is to create plugins outside of lws itself. First build lws itself with -DLWS_WITH_PLUGINS, then use the same flow to build the standalone plugin ``` cd ./plugin-standalone mkdir build cd build cmake .. make && sudo make install ``` if you changed the default plugin directory when you built lws, you must also give the same arguments to cmake here (eg, ` -DCMAKE_INSTALL_PREFIX:PATH=/usr/something/else...` ) Otherwise if you run lwsws or libwebsockets-test-server-v2.0, it will now find the additional plugin "libprotocol_example_standalone.so" ``` lwsts[21257]: Plugins: lwsts[21257]: libprotocol_dumb_increment.so lwsts[21257]: libprotocol_example_standalone.so lwsts[21257]: libprotocol_lws_mirror.so lwsts[21257]: libprotocol_lws_server_status.so lwsts[21257]: libprotocol_lws_status.so ``` If you have multiple vhosts, you must enable plugins at the vhost additionally, discovered plugins are not enabled automatically for security reasons. You do this using info->pvo or for lwsws, in the JSON config. @section http2rp Reproducing HTTP/2 tests Enable `-DLWS_WITH_HTTP2=1` in cmake to build with http/2 support enabled. You must have built and be running lws against a version of openssl that has ALPN. At the time of writing, recent distros have started upgrading to OpenSSL 1.1+ that supports this already. You'll know it's right by seeing ``` lwsts[4752]: Compiled with OpenSSL support lwsts[4752]: Using SSL mode lwsts[4752]: HTTP2 / ALPN enabled ``` at lws startup. Recent Firefox and Chrome also support HTTP/2 by ALPN, so these should just work with the test server running in -s / ssl mode. For testing with nghttp client: ``` $ nghttp -nvas https://localhost:7681/test.html ``` Testing with h2spec (https://github.com/summerwind/h2spec) ``` $ h2spec -h 127.0.0.1 -p 7681 -t -k -v -o 1 ``` ``` 145 tests, 145 passed, 0 skipped, 0 failed ``` @section coverage Automated Coverage Testing ./test-apps/attack.sh contains scripted tests that are the basis of the automated test coverage assessment available for gcc and clang. To reproduce $ cd build $ cmake .. -DLWS_WITH_GCOV=1 -DCMAKE_BUILD_TYPE=DEBUG $ ../scripts/build-gcov.sh $ ../test-apps/attack.sh $ ../scripts/gcov.sh ... Lines executed:51.24% of 8279 @section windowsprebuilt Using Windows binary builds on Appveyor The CI builds on Appveyor now produce usable binary outputs. Visit [lws on Appveyor](https://ci.appveyor.com/project/lws-team/libwebsockets) and select one of the builds, then click on ARTIFACTS at the top right. The zip file want to be unpacked into `C:\Program Files (x86)/libwebsockets`, after that, you should be able to run the test server, by running it from `bin/Release/libwebsockets-test-server.exe` and opening a browser on http://127.0.0.1:7681 @section cross Cross compiling To enable cross-compiling **libwebsockets** using CMake you need to create a "Toolchain file" that you supply to CMake when generating your build files. CMake will then use the cross compilers and build paths specified in this file to look for dependencies and such. **Libwebsockets** includes an example toolchain file [cross-arm-linux-gnueabihf.cmake](../contrib/cross-arm-linux-gnueabihf.cmake) you can use as a starting point. The commandline to configure for cross with this would look like ``` $ cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/usr/lib/my-cross-root \ -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-arm-linux-gnueabihf.cmake \ -DLWS_WITHOUT_EXTENSIONS=1 -DLWS_WITH_SSL=0 \ -DLWS_WITH_ZIP_FOPS=0 -DLWS_WITH_ZLIB=0 ``` The example shows how to build with no external cross lib dependencies, you need to provide the cross libraries otherwise. **NOTE**: start from an EMPTY build directory if you had a non-cross build in there before the settings will be cached and your changes ignored. Delete `build/CMakeCache.txt` at least before trying a new cmake config to ensure you are really building the options you think you are. Additional information on cross compilation with CMake: http://www.vtk.org/Wiki/CMake_Cross_Compiling @section cross_example Complex Cross compiling example Here are step by step instructions for cross-building the external projects needed for lws with lwsws + mbedtls as an example. In the example, my toolchain lives in `/projects/aist-tb/arm-tc` and is named `arm-linux-gnueabihf`. So you will need to adapt those to where your toolchain lives and its name where you see them here. Likewise I do all this in /tmp but it has no special meaning, you can adapt that to somewhere else. All "foreign" cross-built binaries are sent into `/tmp/cross` so they cannot be confused for 'native' x86_64 stuff on your host machine in /usr/[local/].... ## Prepare the cmake toolchain file 1) `cd /tmp` 2) `wget -O mytoolchainfile https://raw.githubusercontent.com/warmcat/libwebsockets/master/contrib/cross-arm-linux-gnueabihf.cmake` 3) Edit `/tmp/mytoolchainfile` adapting `CROSS_PATH`, `CMAKE_C_COMPILER` and `CMAKE_CXX_COMPILER` to reflect your toolchain install dir and path to your toolchain C and C++ compilers respectively. For my case: ``` set(CROSS_PATH /projects/aist-tb/arm-tc/) set(CMAKE_C_COMPILER "${CROSS_PATH}/bin/arm-linux-gnueabihf-gcc") set(CMAKE_CXX_COMPILER "${CROSS_PATH}/bin/arm-linux-gnueabihf-g++") ``` ## 1/4: Building libuv cross: 1) `export PATH=/projects/aist-tb/arm-tc/bin:$PATH` Notice there is a **/bin** on the end of the toolchain path 2) `cd /tmp ; mkdir cross` we will put the cross-built libs in /tmp/cross 3) `git clone https://github.com/libuv/libuv.git` get libuv 4) `cd libuv` 5) `./autogen.sh` ``` + libtoolize --copy libtoolize: putting auxiliary files in '.'. libtoolize: copying file './ltmain.sh' libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'. libtoolize: copying file 'm4/libtool.m4' libtoolize: copying file 'm4/ltoptions.m4' libtoolize: copying file 'm4/ltsugar.m4' libtoolize: copying file 'm4/ltversion.m4' libtoolize: copying file 'm4/lt~obsolete.m4' + aclocal -I m4 + autoconf + automake --add-missing --copy configure.ac:38: installing './ar-lib' configure.ac:25: installing './compile' configure.ac:22: installing './config.guess' configure.ac:22: installing './config.sub' configure.ac:21: installing './install-sh' configure.ac:21: installing './missing' Makefile.am: installing './depcomp' ``` If it has problems, you will need to install `automake`, `libtool` etc. 6) `./configure --host=arm-linux-gnueabihf --prefix=/tmp/cross` 7) `make && make install` this will install to `/tmp/cross/...` 8) `file /tmp/cross/lib/libuv.so.1.0.0` Check it's really built for ARM ``` /tmp/cross/lib/libuv.so.1.0.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=cdde0bc945e51db6001a9485349c035baaec2b46, with debug_info, not stripped ``` ## 2/4: Building zlib cross 1) `cd /tmp` 2) `git clone https://github.com/madler/zlib.git` 3) `CC=arm-linux-gnueabihf-gcc ./configure --prefix=/tmp/cross` ``` Checking for shared library support... Building shared library libz.so.1.2.11 with arm-linux-gnueabihf-gcc. Checking for size_t... Yes. Checking for off64_t... Yes. Checking for fseeko... Yes. Checking for strerror... Yes. Checking for unistd.h... Yes. Checking for stdarg.h... Yes. Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf(). Checking for vsnprintf() in stdio.h... Yes. Checking for return value of vsnprintf()... Yes. Checking for attribute(visibility) support... Yes. ``` 4) `make && make install` ``` arm-linux-gnueabihf-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -I. -c -o example.o test/example.c ... rm -f /tmp/cross/include/zlib.h /tmp/cross/include/zconf.h cp zlib.h zconf.h /tmp/cross/include chmod 644 /tmp/cross/include/zlib.h /tmp/cross/include/zconf.h ``` 5) `file /tmp/cross/lib/libz.so.1.2.11` This is just to confirm we built an ARM lib as expected ``` /tmp/cross/lib/libz.so.1.2.11: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=6f8ffef84389b1417d2fd1da1bd0c90f748f300d, with debug_info, not stripped ``` ## 3/4: Building mbedtls cross 1) `cd /tmp` 2) `git clone https://github.com/ARMmbed/mbedtls.git` 3) `cd mbedtls ; mkdir build ; cd build` 3) `cmake .. -DCMAKE_TOOLCHAIN_FILE=/tmp/mytoolchainfile -DCMAKE_INSTALL_PREFIX:PATH=/tmp/cross -DCMAKE_BUILD_TYPE=RELEASE -DUSE_SHARED_MBEDTLS_LIBRARY=1` mbedtls also uses cmake, so you can simply reuse the toolchain file you used for libwebsockets. That is why you shouldn't put project-specific options in the toolchain file, it should just describe the toolchain. 4) `make && make install` 5) `file /tmp/cross/lib/libmbedcrypto.so.2.6.0` ``` /tmp/cross/lib/libmbedcrypto.so.2.6.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=bcca195e78bd4fd2fb37f36ab7d72d477d609d87, with debug_info, not stripped ``` ## 4/4: Building libwebsockets with everything 1) `cd /tmp` 2) `git clone ssh://git@github.com/warmcat/libwebsockets` 3) `cd libwebsockets ; mkdir build ; cd build` 4) (this is all one line on the commandline) ``` cmake .. -DCMAKE_TOOLCHAIN_FILE=/tmp/mytoolchainfile \ -DCMAKE_INSTALL_PREFIX:PATH=/tmp/cross \ -DLWS_WITH_LWSWS=1 \ -DLWS_WITH_MBEDTLS=1 \ -DLWS_MBEDTLS_LIBRARIES="/tmp/cross/lib/libmbedcrypto.so;/tmp/cross/lib/libmbedtls.so;/tmp/cross/lib/libmbedx509.so" \ -DLWS_MBEDTLS_INCLUDE_DIRS=/tmp/cross/include \ -DLWS_LIBUV_LIBRARIES=/tmp/cross/lib/libuv.so \ -DLWS_LIBUV_INCLUDE_DIRS=/tmp/cross/include \ -DLWS_ZLIB_LIBRARIES=/tmp/cross/lib/libz.so \ -DLWS_ZLIB_INCLUDE_DIRS=/tmp/cross/include ``` 3) `make && make install` 4) `file /tmp/cross/lib/libwebsockets.so.11` ``` /tmp/cross/lib/libwebsockets.so.11: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=81e59c6534f8e9629a9fc9065c6e955ce96ca690, with debug_info, not stripped ``` 5) `arm-linux-gnueabihf-objdump -p /tmp/cross/lib/libwebsockets.so.11 | grep NEEDED` Confirm that the lws library was linked against everything we expect (libm / libc are provided by your toolchain) ``` NEEDED libz.so.1 NEEDED libmbedcrypto.so.0 NEEDED libmbedtls.so.10 NEEDED libmbedx509.so.0 NEEDED libuv.so.1 NEEDED libm.so.6 NEEDED libc.so.6 ``` You will also find the lws test apps in `/tmp/cross/bin`... to run lws on the target you will need to copy the related things from /tmp/cross... all the .so from /tmp/cross/lib and anything from /tmp/cross/bin you want. @section mem Memory efficiency Embedded server-only configuration without extensions (ie, no compression on websocket connections), but with full v13 websocket features and http server, built on ARM Cortex-A9: Update at 8dac94d (2013-02-18) ``` $ ./configure --without-client --without-extensions --disable-debug --without-daemonize Context Creation, 1024 fd limit[2]: 16720 (includes 12 bytes per fd) Per-connection [3]: 72 bytes, +1328 during headers .text .rodata .data .bss 11512 2784 288 4 ``` This shows the impact of the major configuration with/without options at 13ba5bbc633ea962d46d using Ubuntu ARM on a PandaBoard ES. These are accounting for static allocations from the library elf, there are additional dynamic allocations via malloc. These are a bit old now but give the right idea for relative "expense" of features. Static allocations, ARM9 | | .text | .rodata | .data | .bss | |--------------------------------|---------|---------|-------|------| | All (no without) | 35024 | 9940 | 336 | 4104 | | without client | 25684 | 7144 | 336 | 4104 | | without client, exts | 21652 | 6288 | 288 | 4104 | | without client, exts, debug[1] | 19756 | 3768 | 288 | 4104 | | without server | 30304 | 8160 | 336 | 4104 | | without server, exts | 25382 | 7204 | 288 | 4104 | | without server, exts, debug[1] | 23712 | 4256 | 288 | 4104 | [1] `--disable-debug` only removes messages below `lwsl_notice`. Since that is the default logging level the impact is not noticeable, error, warn and notice logs are all still there. [2] `1024` fd per process is the default limit (set by ulimit) in at least Fedora and Ubuntu. You can make significant savings tailoring this to actual expected peak fds, ie, at a limit of `20`, context creation allocation reduces to `4432 + 240 = 4672`) [3] known header content is freed after connection establishment libwebsockets-3.2.1/READMEs/README.ci.md000066400000000000000000000016171357643561300173700ustar00rootroot00000000000000## Need for CI Generally if we're adding something that's supposed to work ongoing, the stuff should be exercised in CI (at least Travis). If there are few users for a particular feature, experience has shown that refactors or other upheaval can easily break it into a state of uselessness without anyone noticing until later. Therefore here's a description of how to add something to the CI tests... this is certainly a nonproductive PITA and I have never been thanked for the work involved. But if the promise of the various features working is going to remain alive, it's necessary to include CI test where possible with new nontrivial code. ## Integration points ### cmake `.travis.yml` maps the various test activities to CMake options needed. ### including dependent packages into travis See `./scripts/travis_install.sh` ### performing prepared test actions See `./scripts/travis_control.sh` libwebsockets-3.2.1/READMEs/README.coding.md000066400000000000000000001511121357643561300202340ustar00rootroot00000000000000Notes about coding with lws =========================== @section era Old lws and lws v2.0 Originally lws only supported the "manual" method of handling everything in the user callback found in test-server.c / test-server-http.c. Since v2.0, the need for most or all of this manual boilerplate has been eliminated: the protocols[0] http stuff is provided by a generic lib export `lws_callback_http_dummy()`. You can serve parts of your filesystem at part of the URL space using mounts, the dummy http callback will do the right thing. It's much preferred to use the "automated" v2.0 type scheme, because it's less code and it's easier to support. The minimal examples all use the modern, recommended way. If you just need generic serving capability, without the need to integrate lws to some other app, consider not writing any server code at all, and instead use the generic server `lwsws`, and writing your special user code in a standalone "plugin". The server is configured for mounts etc using JSON, see ./READMEs/README.lwsws.md. Although the "plugins" are dynamically loaded if you use lwsws or lws built with libuv, actually they may perfectly well be statically included if that suits your situation better, eg, ESP32 test server, where the platform does not support processes or dynamic loading, just #includes the plugins one after the other and gets the same benefit from the same code. Isolating and collating the protocol code in one place also makes it very easy to maintain and understand. So it if highly recommended you put your protocol-specific code into the form of a "plugin" at the source level, even if you have no immediate plan to use it dynamically-loaded. @section writeable Only send data when socket writeable You should only send data on a websocket connection from the user callback `LWS_CALLBACK_SERVER_WRITEABLE` (or `LWS_CALLBACK_CLIENT_WRITEABLE` for clients). If you want to send something, do NOT just send it but request a callback when the socket is writeable using - `lws_callback_on_writable(wsi)` for a specific `wsi`, or - `lws_callback_on_writable_all_protocol(protocol)` for all connections using that protocol to get a callback when next writeable. Usually you will get called back immediately next time around the service loop, but if your peer is slow or temporarily inactive the callback will be delayed accordingly. Generating what to write and sending it should be done in the ...WRITEABLE callback. See the test server code for an example of how to do this. Otherwise evolved libs like libuv get this wrong, they will allow you to "send" anything you want but it only uses up your local memory (and costs you memcpys) until the socket can actually accept it. It is much better to regulate your send action by the downstream peer readiness to take new data in the first place, avoiding all the wasted buffering. Libwebsockets' concept is that the downstream peer is truly the boss, if he, or our connection to him, cannot handle anything new, we should not generate anything new for him. This is how unix shell piping works, you may have `cat a.txt | grep xyz > remote", but actually that does not cat anything from a.txt while remote cannot accept anything new. @section oneper Only one lws_write per WRITEABLE callback From v2.5, lws strictly enforces only one lws_write() per WRITEABLE callback. You will receive a message about "Illegal back-to-back write of ... detected" if there is a second lws_write() before returning to the event loop. This is because with http/2, the state of the network connection carrying a wsi is unrelated to any state of the wsi. The situation on http/1 where a new request implied a new tcp connection and new SSL buffer, so you could assume some window for writes is no longer true. Any lws_write() can fail and be buffered for completion by lws; it will be auto-completed by the event loop. Note that if you are handling your own http responses, writing the headers needs to be done with a separate lws_write() from writing any payload. That means after writing the headers you must call `lws_callback_on_writable(wsi)` and send any payload from the writable callback. @section otherwr Do not rely on only your own WRITEABLE requests appearing Libwebsockets may generate additional `LWS_CALLBACK_CLIENT_WRITEABLE` events if it met network conditions where it had to buffer your send data internally. So your code for `LWS_CALLBACK_CLIENT_WRITEABLE` needs to own the decision about what to send, it can't assume that just because the writeable callback came something is ready to send. It's quite possible you get an 'extra' writeable callback at any time and just need to `return 0` and wait for the expected callback later. @section dae Daemonization There's a helper api `lws_daemonize` built by default that does everything you need to daemonize well, including creating a lock file. If you're making what's basically a daemon, just call this early in your init to fork to a headless background process and exit the starting process. Notice stdout, stderr, stdin are all redirected to /dev/null to enforce your daemon is headless, so you'll need to sort out alternative logging, by, eg, syslog via `lws_set_log_level(..., lwsl_emit_syslog)`. @section conns Maximum number of connections The maximum number of connections the library can deal with is decided when it starts by querying the OS to find out how many file descriptors it is allowed to open (1024 on Fedora for example). It then allocates arrays that allow up to that many connections, minus whatever other file descriptors are in use by the user code. If you want to restrict that allocation, or increase it, you can use ulimit or similar to change the available number of file descriptors, and when restarted **libwebsockets** will adapt accordingly. @section peer_limits optional LWS_WITH_PEER_LIMITS If you select `LWS_WITH_PEER_LIMITS` at cmake, then lws will track peer IPs and monitor how many connections and ah resources they are trying to use at one time. You can choose to limit these at context creation time, using `info.ip_limit_ah` and `info.ip_limit_wsi`. Note that although the ah limit is 'soft', ie, the connection will just wait until the IP is under the ah limit again before attaching a new ah, the wsi limit is 'hard', lws will drop any additional connections from the IP until it's under the limit again. If you use these limits, you should consider multiple clients may simultaneously try to access the site through NAT, etc. So the limits should err on the side of being generous, while still making it impossible for one IP to exhaust all the server resources. @section evtloop Libwebsockets is singlethreaded Libwebsockets works in a serialized event loop, in a single thread. It supports the default poll() backend, and libuv, libev, and libevent event loop libraries that also take this locking-free, nonblocking event loop approach that is not threadsafe. There are several advantages to this technique, but one disadvantage, it doesn't integrate easily if there are multiple threads that want to use libwebsockets. However integration to multithreaded apps is possible if you follow some guidelines. 1) Aside from two APIs, directly calling lws apis from other threads is not allowed. 2) If you want to keep a list of live wsi, you need to use lifecycle callbacks on the protocol in the service thread to manage the list, with your own locking. Typically you use an ESTABLISHED callback to add ws wsi to your list and a CLOSED callback to remove them. 3) LWS regulates your write activity by being able to let you know when you may write more on a connection. That reflects the reality that you cannot succeed to send data to a peer that has no room for it, so you should not generate or buffer write data until you know the peer connection can take more. Other libraries pretend that the guy doing the writing is the boss who decides what happens, and absorb as much as you want to write to local buffering. That does not scale to a lot of connections, because it will exhaust your memory and waste time copying data around in memory needlessly. The truth is the receiver, along with the network between you, is the boss who decides what will happen. If he stops accepting data, no data will move. LWS is designed to reflect that. If you have something to send, you call `lws_callback_on_writable()` on the connection, and when it is writeable, you will get a `LWS_CALLBACK_SERVER_WRITEABLE` callback, where you should generate the data to send and send it with `lws_write()`. You cannot send data using `lws_write()` outside of the WRITEABLE callback. 4) For multithreaded apps, this corresponds to a need to be able to provoke the `lws_callback_on_writable()` action and to wake the service thread from its event loop wait (sleeping in `poll()` or `epoll()` or whatever). The rules above mean directly sending data on the connection from another thread is out of the question. Therefore the two apis mentioned above that may be used from another thread are - For LWS using the default poll() event loop, `lws_callback_on_writable()` - For LWS using libuv/libev/libevent event loop, `lws_cancel_service()` If you are using the default poll() event loop, one "foreign thread" at a time may call `lws_callback_on_writable()` directly for a wsi. You need to use your own locking around that to serialize multiple thread access to it. If you implement LWS_CALLBACK_GET_THREAD_ID in protocols[0], then LWS will detect when it has been called from a foreign thread and automatically use `lws_cancel_service()` to additionally wake the service loop from its wait. For libuv/libev/libevent event loop, they cannot handle being called from other threads. So there is a slightly different scheme, you may call `lws_cancel_service()` to force the event loop to end immediately. This then broadcasts a callback (in the service thread context) `LWS_CALLBACK_EVENT_WAIT_CANCELLED`, to all protocols on all vhosts, where you can perform your own locking and walk a list of wsi that need `lws_callback_on_writable()` calling on them. `lws_cancel_service()` is very cheap to call. 5) The obverse of this truism about the receiver being the boss is the case where we are receiving. If we get into a situation we actually can't usefully receive any more, perhaps because we are passing the data on and the guy we want to send to can't receive any more, then we should "turn off RX" by using the RX flow control API, `lws_rx_flow_control(wsi, 0)`. When something happens where we can accept more RX, (eg, we learn our onward connection is writeable) we can call it again to re-enable it on the incoming wsi. LWS stops calling back about RX immediately you use flow control to disable RX, it buffers the data internally if necessary. So you will only see RX when you can handle it. When flow control is disabled, LWS stops taking new data in... this makes the situation known to the sender by TCP "backpressure", the tx window fills and the sender finds he cannot write any more to the connection. See the mirror protocol implementations for example code. If you need to service other socket or file descriptors as well as the websocket ones, you can combine them together with the websocket ones in one poll loop, see "External Polling Loop support" below, and still do it all in one thread / process context. If the need is less architectural, you can also create RAW mode client and serving sockets; this is how the lws plugin for the ssh server works. @section anonprot Working without a protocol name Websockets allows connections to negotiate without a protocol name... in that case by default it will bind to the first protocol in your vhost protocols[] array. You can tell the vhost to use a different protocol by attaching a pvo (per-vhost option) to the ``` /* * this sets a per-vhost, per-protocol option name:value pair * the effect is to set this protocol to be the default one for the vhost, * ie, selected if no Protocol: header is sent with the ws upgrade. */ static const struct lws_protocol_vhost_options pvo_opt = { NULL, NULL, "default", "1" }; static const struct lws_protocol_vhost_options pvo = { NULL, &pvo_opt, "my-protocol", "" }; ... context_info.pvo = &pvo; ... ``` Will select "my-protocol" from your protocol list (even if it came in by plugin) as being the target of client connections that don't specify a protocol. @section closing Closing connections from the user side When you want to close a connection, you do it by returning `-1` from a callback for that connection. You can provoke a callback by calling `lws_callback_on_writable` on the wsi, then notice in the callback you want to close it and just return -1. But usually, the decision to close is made in a callback already and returning -1 is simple. If the socket knows the connection is dead, because the peer closed or there was an affirmitive network error like a FIN coming, then **libwebsockets** will take care of closing the connection automatically. If you have a silently dead connection, it's possible to enter a state where the send pipe on the connection is choked but no ack will ever come, so the dead connection will never become writeable. To cover that, you can use TCP keepalives (see later in this document) or pings. @section gzip Serving from inside a zip file Lws now supports serving gzipped files from inside a zip container. Thanks to Per Bothner for contributing the code. This has the advtantage that if the client can accept GZIP encoding, lws can simply send the gzip-compressed file from inside the zip file with no further processing, saving time and bandwidth. In the case the client can't understand gzip compression, lws automatically decompressed the file and sends it normally. Clients with limited storage and RAM will find this useful; the memory needed for the inflate case is constrained so that only one input buffer at a time is ever in memory. To use this feature, ensure LWS_WITH_ZIP_FOPS is enabled at CMake. `libwebsockets-test-server-v2.0` includes a mount using this technology already, run that test server and navigate to http://localhost:7681/ziptest/candide.html This will serve the book Candide in html, together with two jpgs, all from inside a .zip file in /usr/[local/]share-libwebsockets-test-server/candide.zip Usage is otherwise automatic, if you arrange a mount that points to the zipfile, eg, "/ziptest" -> "mypath/test.zip", then URLs like `/ziptest/index.html` will be servied from `index.html` inside `mypath/test.zip` @section frags Fragmented messages To support fragmented messages you need to check for the final frame of a message with `lws_is_final_fragment`. This check can be combined with `libwebsockets_remaining_packet_payload` to gather the whole contents of a message, eg: ``` case LWS_CALLBACK_RECEIVE: { Client * const client = (Client *)user; const size_t remaining = lws_remaining_packet_payload(wsi); if (!remaining && lws_is_final_fragment(wsi)) { if (client->HasFragments()) { client->AppendMessageFragment(in, len, 0); in = (void *)client->GetMessage(); len = client->GetMessageLength(); } client->ProcessMessage((char *)in, len, wsi); client->ResetMessage(); } else client->AppendMessageFragment(in, len, remaining); } break; ``` The test app libwebsockets-test-fraggle sources also show how to deal with fragmented messages. @section debuglog Debug Logging Also using `lws_set_log_level` api you may provide a custom callback to actually emit the log string. By default, this points to an internal emit function that sends to stderr. Setting it to `NULL` leaves it as it is instead. A helper function `lwsl_emit_syslog()` is exported from the library to simplify logging to syslog. You still need to use `setlogmask`, `openlog` and `closelog` in your user code. The logging apis are made available for user code. - `lwsl_err(...)` - `lwsl_warn(...)` - `lwsl_notice(...)` - `lwsl_info(...)` - `lwsl_debug(...)` The difference between notice and info is that notice will be logged by default whereas info is ignored by default. If you are not building with _DEBUG defined, ie, without this ``` $ cmake .. -DCMAKE_BUILD_TYPE=DEBUG ``` then log levels below notice do not actually get compiled in. @section asan Building with ASAN Under GCC you can select for the build to be instrumented with the Address Sanitizer, using `cmake .. -DCMAKE_BUILD_TYPE=DEBUG -DLWS_WITH_ASAN=1`. LWS is routinely run during development with valgrind, but ASAN is capable of finding different issues at runtime, like operations which are not strictly defined in the C standard and depend on platform behaviours. Run your application like this ``` $ sudo ASAN_OPTIONS=verbosity=2:halt_on_error=1 /usr/local/bin/lwsws ``` and attach gdb to catch the place it halts. @section extpoll External Polling Loop support **libwebsockets** maintains an internal `poll()` array for all of its sockets, but you can instead integrate the sockets into an external polling array. That's needed if **libwebsockets** will cooperate with an existing poll array maintained by another server. Three callbacks `LWS_CALLBACK_ADD_POLL_FD`, `LWS_CALLBACK_DEL_POLL_FD` and `LWS_CALLBACK_CHANGE_MODE_POLL_FD` appear in the callback for protocol 0 and allow interface code to manage socket descriptors in other poll loops. You can pass all pollfds that need service to `lws_service_fd()`, even if the socket or file does not belong to **libwebsockets** it is safe. If **libwebsocket** handled it, it zeros the pollfd `revents` field before returning. So you can let **libwebsockets** try and if `pollfd->revents` is nonzero on return, you know it needs handling by your code. Also note that when integrating a foreign event loop like libev or libuv where it doesn't natively use poll() semantics, and you must return a fake pollfd reflecting the real event: - be sure you set .events to .revents value as well in the synthesized pollfd - check the built-in support for the event loop if possible (eg, ./lib/libuv.c) to see how it interfaces to lws - use LWS_POLLHUP / LWS_POLLIN / LWS_POLLOUT from libwebsockets.h to avoid losing windows compatibility You also need to take care about "forced service" somehow... these are cases where the network event was consumed, incoming data was all read, for example, but the work arising from it was not completed. There will not be any more network event to trigger the remaining work, Eg, we read compressed data, but we did not use up all the decompressed data before returning to the event loop because we had to write some of it. Lws provides an API to determine if anyone is waiting for forced service, `lws_service_adjust_timeout(context, 1, tsi)`, normally tsi is 0. If it returns 0, then at least one connection has pending work you can get done by calling `lws_service_tsi(context, -1, tsi)`, again normally tsi is 0. For eg, the default poll() event loop, or libuv/ev/event, lws does this checking for you and handles it automatically. But in the external polling loop case, you must do it explicitly. Handling it after every normal service triggered by the external poll fd should be enough, since the situations needing it are initially triggered by actual network events. An example of handling it is shown in the test-server code specific to external polling. @section cpp Using with in c++ apps The library is ready for use by C++ apps. You can get started quickly by copying the test server ``` $ cp test-apps/test-server.c test.cpp ``` and building it in C++ like this ``` $ g++ -DINSTALL_DATADIR=\"/usr/share\" -ocpptest test.cpp -lwebsockets ``` `INSTALL_DATADIR` is only needed because the test server uses it as shipped, if you remove the references to it in your app you don't need to define it on the g++ line either. @section headerinfo Availability of header information HTTP Header information is managed by a pool of "ah" structs. These are a limited resource so there is pressure to free the headers and return the ah to the pool for reuse. For that reason header information on HTTP connections that get upgraded to websockets is lost after the ESTABLISHED callback. Anything important that isn't processed by user code before then should be copied out for later. For HTTP connections that don't upgrade, header info remains available the whole time. @section http2compat Code Requirements for HTTP/2 compatibility Websocket connections only work over http/1, so there is nothing special to do when you want to enable -DLWS_WITH_HTTP2=1. The internal http apis already follow these requirements and are compatible with http/2 already. So if you use stuff like mounts and serve stuff out of the filesystem, there's also nothing special to do. However if you are getting your hands dirty with writing response headers, or writing bulk data over http/2, you need to observe these rules so that it will work over both http/1.x and http/2 the same. 1) LWS_PRE requirement applies on ALL lws_write(). For http/1, you don't have to take care of LWS_PRE for http data, since it is just sent straight out. For http/2, it will write up to LWS_PRE bytes behind the buffer start to create the http/2 frame header. This has implications if you treated the input buffer to lws_write() as const... it isn't any more with http/2, up to 9 bytes behind the buffer will be trashed. 2) Headers are encoded using a sophisticated scheme in http/2. The existing header access apis are already made compatible for incoming headers, for outgoing headers you must: - observe the LWS_PRE buffer requirement mentioned above - Use `lws_add_http_header_status()` to add the transaction status (200 etc) - use lws apis `lws_add_http_header_by_name()` and `lws_add_http_header_by_token()` to put the headers into the buffer (these will translate what is actually written to the buffer depending on if the connection is in http/2 mode or not) - use the `lws api lws_finalize_http_header()` api after adding the last response header - write the header using lws_write(..., `LWS_WRITE_HTTP_HEADERS`); 3) http/2 introduces per-stream transmit credit... how much more you can send on a stream is decided by the peer. You start off with some amount, as the stream sends stuff lws will reduce your credit accordingly, when it reaches zero, you must not send anything further until lws receives "more credit" for that stream the peer. Lws will suppress writable callbacks if you hit 0 until more credit for the stream appears, and lws built-in file serving (via mounts etc) already takes care of observing the tx credit restrictions. However if you write your own code that wants to send http data, you must consult the `lws_get_peer_write_allowance()` api to find out the state of your tx credit. For http/1, it will always return (size_t)-1, ie, no limit. This is orthogonal to the question of how much space your local side's kernel will make to buffer your send data on that connection. So although the result from `lws_get_peer_write_allowance()` is "how much you can send" logically, and may be megabytes if the peer allows it, you should restrict what you send at one time to whatever your machine will generally accept in one go, and further reduce that amount if `lws_get_peer_write_allowance()` returns something smaller. If it returns 0, you should not consume or send anything and return having asked for callback on writable, it will only come back when more tx credit has arrived for your stream. 4) Header names with captital letters are illegal in http/2. Header names in http/1 are case insensitive. So if you generate headers by name, change all your header name strings to lower-case to be compatible both ways. 5) Chunked Transfer-encoding is illegal in http/2, http/2 peers will actively reject it. Lws takes care of removing the header and converting CGIs that emit chunked into unchunked automatically for http/2 connections. If you follow these rules, your code will automatically work with both http/1.x and http/2. @section ka TCP Keepalive It is possible for a connection which is not being used to send to die silently somewhere between the peer and the side not sending. In this case by default TCP will just not report anything and you will never get any more incoming data or sign the link is dead until you try to send. To deal with getting a notification of that situation, you can choose to enable TCP keepalives on all **libwebsockets** sockets, when you create the context. To enable keepalive, set the ka_time member of the context creation parameter struct to a nonzero value (in seconds) at context creation time. You should also fill ka_probes and ka_interval in that case. With keepalive enabled, the TCP layer will send control packets that should stimulate a response from the peer without affecting link traffic. If the response is not coming, the socket will announce an error at `poll()` forcing a close. Note that BSDs don't support keepalive time / probes / interval per-socket like Linux does. On those systems you can enable keepalive by a nonzero value in `ka_time`, but the systemwide kernel settings for the time / probes/ interval are used, regardless of what nonzero value is in `ka_time`. @section sslopt Optimizing SSL connections There's a member `ssl_cipher_list` in the `lws_context_creation_info` struct which allows the user code to restrict the possible cipher selection at context-creation time. You might want to look into that to stop the ssl peers selecting a cipher which is too computationally expensive. To use it, point it to a string like `"RC4-MD5:RC4-SHA:AES128-SHA:AES256-SHA:HIGH:!DSS:!aNULL"` if left `NULL`, then the "DEFAULT" set of ciphers are all possible to select. You can also set it to `"ALL"` to allow everything (including insecure ciphers). @section sslcerts Passing your own cert information direct to SSL_CTX For most users it's enough to pass the SSL certificate and key information by giving filepaths to the info.ssl_cert_filepath and info.ssl_private_key_filepath members when creating the vhost. If you want to control that from your own code instead, you can do so by leaving the related info members NULL, and setting the info.options flag LWS_SERVER_OPTION_CREATE_VHOST_SSL_CTX at vhost creation time. That will create the vhost SSL_CTX without any certificate, and allow you to use the callback LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS to add your certificate to the SSL_CTX directly. The vhost SSL_CTX * is in the user parameter in that callback. @section clientasync Async nature of client connections When you call `lws_client_connect_info(..)` and get a `wsi` back, it does not mean your connection is active. It just means it started trying to connect. Your client connection is actually active only when you receive `LWS_CALLBACK_CLIENT_ESTABLISHED` for it. There's a 5 second timeout for the connection, and it may give up or die for other reasons, if any of that happens you'll get a `LWS_CALLBACK_CLIENT_CONNECTION_ERROR` callback on protocol 0 instead for the `wsi`. After attempting the connection and getting back a non-`NULL` `wsi` you should loop calling `lws_service()` until one of the above callbacks occurs. As usual, see [test-client.c](../test-apps/test-client.c) for example code. Notice that the client connection api tries to progress the connection somewhat before returning. That means it's possible to get callbacks like CONNECTION_ERROR on the new connection before your user code had a chance to get the wsi returned to identify it (in fact if the connection did fail early, NULL will be returned instead of the wsi anyway). To avoid that problem, you can fill in `pwsi` in the client connection info struct to point to a struct lws that get filled in early by the client connection api with the related wsi. You can then check for that in the callback to confirm the identity of the failing client connection. @section fileapi Lws platform-independent file access apis lws now exposes his internal platform file abstraction in a way that can be both used by user code to make it platform-agnostic, and be overridden or subclassed by user code. This allows things like handling the URI "directory space" as a virtual filesystem that may or may not be backed by a regular filesystem. One example use is serving files from inside large compressed archive storage without having to unpack anything except the file being requested. The test server shows how to use it, basically the platform-specific part of lws prepares a file operations structure that lives in the lws context. The user code can get a pointer to the file operations struct ``` LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * `lws_get_fops`(struct lws_context *context); ``` and then can use helpers to also leverage these platform-independent file handling apis ``` lws_fop_fd_t `lws_plat_file_open`(struct lws_plat_file_ops *fops, const char *filename, lws_fop_flags_t *flags) int `lws_plat_file_close`(lws_fop_fd_t fop_fd) unsigned long `lws_plat_file_seek_cur`(lws_fop_fd_t fop_fd, lws_fileofs_t offset) int `lws_plat_file_read`(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) int `lws_plat_file_write`(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len ) ``` Generic helpers are provided which provide access to generic fops information or call through to the above fops ``` lws_filepos_t lws_vfs_tell(lws_fop_fd_t fop_fd); lws_filepos_t lws_vfs_get_length(lws_fop_fd_t fop_fd); uint32_t lws_vfs_get_mod_time(lws_fop_fd_t fop_fd); lws_fileofs_t lws_vfs_file_seek_set(lws_fop_fd_t fop_fd, lws_fileofs_t offset); lws_fileofs_t lws_vfs_file_seek_end(lws_fop_fd_t fop_fd, lws_fileofs_t offset); ``` The user code can also override or subclass the file operations, to either wrap or replace them. An example is shown in test server. ### Changes from v2.1 and before fops There are several changes: 1) Pre-2.2 fops directly used platform file descriptors. Current fops returns and accepts a wrapper type lws_fop_fd_t which is a pointer to a malloc'd struct containing information specific to the filesystem implementation. 2) Pre-2.2 fops bound the fops to a wsi. This is completely removed, you just give a pointer to the fops struct that applies to this file when you open it. Afterwards, the operations in the fops just need the lws_fop_fd_t returned from the open. 3) Everything is wrapped in typedefs. See lws-plat-unix.c for examples of how to implement. 4) Position in the file, File Length, and a copy of Flags left after open are now generically held in the fop_fd. VFS implementation must set and manage this generic information now. See the implementations in lws-plat-unix.c for examples. 5) The file length is no longer set at a pointer provided by the open() fop. The api `lws_vfs_get_length()` is provided to get the file length after open. 6) If your file namespace is virtual, ie, is not reachable by platform fops directly, you must set LWS_FOP_FLAG_VIRTUAL on the flags during open. 7) There is an optional `mod_time` uint32_t member in the generic fop_fd. If you are able to set it during open, you should indicate it by setting `LWS_FOP_FLAG_MOD_TIME_VALID` on the flags. @section rawfd RAW file descriptor polling LWS allows you to include generic platform file descriptors in the lws service / poll / event loop. Open your fd normally and then ``` lws_sock_file_fd_type u; u.filefd = your_open_file_fd; if (!lws_adopt_descriptor_vhost(vhost, 0, u, "protocol-name-to-bind-to", optional_wsi_parent_or_NULL)) { // failed } // OK ``` A wsi is created for the file fd that acts like other wsi, you will get these callbacks on the named protocol ``` LWS_CALLBACK_RAW_ADOPT_FILE LWS_CALLBACK_RAW_RX_FILE LWS_CALLBACK_RAW_WRITEABLE_FILE LWS_CALLBACK_RAW_CLOSE_FILE ``` starting with LWS_CALLBACK_RAW_ADOPT_FILE. The minimal example `raw/minimal-raw-file` demonstrates how to use it. `protocol-lws-raw-test` plugin also provides a method for testing this with `libwebsockets-test-server-v2.0`: The plugin creates a FIFO on your system called "/tmp/lws-test-raw" You can feed it data through the FIFO like this ``` $ sudo sh -c "echo hello > /tmp/lws-test-raw" ``` This plugin simply prints the data. But it does it through the lws event loop / service poll. @section rawsrvsocket RAW server socket descriptor polling You can also enable your vhost to accept RAW socket connections, in addition to HTTP[s] and WS[s]. If the first bytes written on the connection are not a valid HTTP method, then the connection switches to RAW mode. This is disabled by default, you enable it by setting the `.options` flag LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG, and setting `.listen_accept_role` to `"raw-skt"` when creating the vhost. RAW mode socket connections receive the following callbacks ``` LWS_CALLBACK_RAW_ADOPT LWS_CALLBACK_RAW_RX LWS_CALLBACK_RAW_WRITEABLE LWS_CALLBACK_RAW_CLOSE ``` You can control which protocol on your vhost handles these RAW mode incoming connections by setting the vhost info struct's `.listen_accept_protocol` to the vhost protocol name to use. `protocol-lws-raw-test` plugin provides a method for testing this with `libwebsockets-test-server-v2.0`: Run libwebsockets-test-server-v2.0 and connect to it by telnet, eg ``` $ telnet 127.0.0.1 7681 ``` type something that isn't a valid HTTP method and enter, before the connection times out. The connection will switch to RAW mode using this protocol, and pass the unused rx as a raw RX callback. The test protocol echos back what was typed on telnet to telnet. @section rawclientsocket RAW client socket descriptor polling You can now also open RAW socket connections in client mode. Follow the usual method for creating a client connection, but set the `info.method` to "RAW". When the connection is made, the wsi will be converted to RAW mode and operate using the same callbacks as the server RAW sockets described above. The libwebsockets-test-client supports this using raw:// URLS. To test, open a netcat listener in one window ``` $ nc -l 9999 ``` and in another window, connect to it using the test client ``` $ libwebsockets-test-client raw://127.0.0.1:9999 ``` The connection should succeed, and text typed in the netcat window (including a CRLF) will be received in the client. @section rawudp RAW UDP socket integration Lws provides an api to create, optionally bind, and adopt a RAW UDP socket (RAW here means an uninterpreted normal UDP socket, not a "raw socket"). ``` LWS_VISIBLE LWS_EXTERN struct lws * lws_create_adopt_udp(struct lws_vhost *vhost, int port, int flags, const char *protocol_name, struct lws *parent_wsi); ``` `flags` should be `LWS_CAUDP_BIND` if the socket will receive packets. The callbacks `LWS_CALLBACK_RAW_ADOPT`, `LWS_CALLBACK_RAW_CLOSE`, `LWS_CALLBACK_RAW_RX` and `LWS_CALLBACK_RAW_WRITEABLE` apply to the wsi. But UDP is different than TCP in some fundamental ways. For receiving on a UDP connection, data becomes available at `LWS_CALLBACK_RAW_RX` as usual, but because there is no specific connection with UDP, it is necessary to also get the source address of the data separately, using `struct lws_udp * lws_get_udp(wsi)`. You should take a copy of the `struct lws_udp` itself (not the pointer) and save it for when you want to write back to that peer. Writing is also a bit different for UDP. By default, the system has no idea about the receiver state and so asking for a `callback_on_writable()` always believes that the socket is writeable... the callback will happen next time around the event loop. With UDP, there is no single "connection". You need to write with sendto() and direct the packets to a specific destination. To return packets to a peer who sent something earlier and you copied his `struct lws_udp`, you use the .sa and .salen members as the last two parameters of the sendto(). The kernel may not accept to buffer / write everything you wanted to send. So you are responsible to watch the result of sendto() and resend the unsent part next time (which may involve adding new protocol headers to the remainder depending on what you are doing). @section ecdh ECDH Support ECDH Certs are now supported. Enable the CMake option cmake .. -DLWS_SSL_SERVER_WITH_ECDH_CERT=1 **and** the info->options flag LWS_SERVER_OPTION_SSL_ECDH to build in support and select it at runtime. @section sslinfo SSL info callbacks OpenSSL allows you to receive callbacks for various events defined in a bitmask in openssl/ssl.h. The events include stuff like TLS Alerts. By default, lws doesn't register for these callbacks. However if you set the info.ssl_info_event_mask to nonzero (ie, set some of the bits in it like `SSL_CB_ALERT` at vhost creation time, then connections to that vhost will call back using LWS_CALLBACK_SSL_INFO for the wsi, and the `in` parameter will be pointing to a struct of related args: ``` struct lws_ssl_info { int where; int ret; }; ``` The default callback handler in lws has a handler for LWS_CALLBACK_SSL_INFO which prints the related information, You can test it using the switch -S -s on `libwebsockets-test-server-v2.0`. Returning nonzero from the callback will close the wsi. @section smp SMP / Multithreaded service SMP support is integrated into LWS without any internal threading. It's very simple to use, libwebsockets-test-server-pthread shows how to do it, use -j n argument there to control the number of service threads up to 32. Two new members are added to the info struct unsigned int count_threads; unsigned int fd_limit_per_thread; leave them at the default 0 to get the normal singlethreaded service loop. Set count_threads to n to tell lws you will have n simultaneous service threads operating on the context. There is still a single listen socket on one port, no matter how many service threads. When a connection is made, it is accepted by the service thread with the least connections active to perform load balancing. The user code is responsible for spawning n threads running the service loop associated to a specific tsi (Thread Service Index, 0 .. n - 1). See the libwebsockets-test-server-pthread for how to do. If you leave fd_limit_per_thread at 0, then the process limit of fds is shared between the service threads; if you process was allowed 1024 fds overall then each thread is limited to 1024 / n. You can set fd_limit_per_thread to a nonzero number to control this manually, eg the overall supported fd limit is less than the process allowance. You can control the context basic data allocation for multithreading from Cmake using -DLWS_MAX_SMP=, if not given it's set to 1. The serv_buf allocation for the threads (currently 4096) is made at runtime only for active threads. Because lws will limit the requested number of actual threads supported according to LWS_MAX_SMP, there is an api lws_get_count_threads(context) to discover how many threads were actually allowed when the context was created. See the test-server-pthreads.c sample for how to use. @section smplocking SMP Locking Helpers Lws provide a set of pthread mutex helpers that reduce to no code or variable footprint in the case that LWS_MAX_SMP == 1. Define your user mutex like this ``` lws_pthread_mutex(name); ``` If LWS_MAX_SMP > 1, this produces `pthread_mutex_t name;`. In the case LWS_MAX_SMP == 1, it produces nothing. Likewise these helpers for init, destroy, lock and unlock ``` void lws_pthread_mutex_init(pthread_mutex_t *lock) void lws_pthread_mutex_destroy(pthread_mutex_t *lock) void lws_pthread_mutex_lock(pthread_mutex_t *lock) void lws_pthread_mutex_unlock(pthread_mutex_t *lock) ``` resolve to nothing if LWS_MAX_SMP == 1, otherwise produce the equivalent pthread api. pthreads is required in lws only if LWS_MAX_SMP > 1. @section libevuv libev / libuv / libevent support You can select either or both -DLWS_WITH_LIBEV=1 -DLWS_WITH_LIBUV=1 -DLWS_WITH_LIBEVENT=1 at cmake configure-time. The user application may use one of the context init options flags LWS_SERVER_OPTION_LIBEV LWS_SERVER_OPTION_LIBUV LWS_SERVER_OPTION_LIBEVENT to indicate it will use one of the event libraries at runtime. libev has some problems, its headers conflict with libevent, they both define critical constants like EV_READ to different values. Attempts to discuss clearing that up with libevent and libev did not get anywhere useful. In addition building anything with libev using gcc spews warnings, the maintainer is aware of this for many years, and blames gcc. We worked around this by disabling -Werror on the parts of lws that use libev. For these reasons and the response I got trying to raise these issues with them, if you have a choice about event loop, I would gently encourage you to avoid libev. Where lws uses an event loop itself, eg in lwsws, we use libuv. @section extopts Extension option control from user code User code may set per-connection extension options now, using a new api `lws_set_extension_option()`. This should be called from the ESTABLISHED callback like this ``` lws_set_extension_option(wsi, "permessage-deflate", "rx_buf_size", "12"); /* 1 << 12 */ ``` If the extension is not active (missing or not negotiated for the connection, or extensions are disabled on the library) the call is just returns -1. Otherwise the connection's extension has its named option changed. The extension may decide to alter or disallow the change, in the example above permessage-deflate restricts the size of his rx output buffer also considering the protocol's rx_buf_size member. @section httpsclient Client connections as HTTP[S] rather than WS[S] You may open a generic http client connection using the same struct lws_client_connect_info used to create client ws[s] connections. To stay in http[s], set the optional info member "method" to point to the string "GET" instead of the default NULL. After the server headers are processed, when payload from the server is available the callback LWS_CALLBACK_RECEIVE_CLIENT_HTTP will be made. You can choose whether to process the data immediately, or queue a callback when an outgoing socket is writeable to provide flow control, and process the data in the writable callback. Either way you use the api `lws_http_client_read()` to access the data, eg ``` case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; lwsl_notice("LWS_CALLBACK_RECEIVE_CLIENT_HTTP\n"); /* * Often you need to flow control this by something * else being writable. In that case call the api * to get a callback when writable here, and do the * pending client read in the writeable callback of * the output. */ if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; while (lenx--) putchar(*px++); } break; ``` Notice that if you will use SSL client connections on a vhost, you must prepare the client SSL context for the vhost after creating the vhost, since this is not normally done if the vhost was set up to listen / serve. Call the api lws_init_vhost_client_ssl() to also allow client SSL on the vhost. @section clipipe Pipelining Client Requests to same host If you are opening more client requests to the same host and port, you can give the flag LCCSCF_PIPELINE on `info.ssl_connection` to indicate you wish to pipeline them. Without the flag, the client connections will occur concurrently using a socket and tls wrapper if requested for each connection individually. That is fast, but resource-intensive. With the flag, lws will queue subsequent client connections on the first connection to the same host and port. When it has confirmed from the first connection that pipelining / keep-alive is supported by the server, it lets the queued client pipeline connections send their headers ahead of time to create a pipeline of requests on the server side. In this way only one tcp connection and tls wrapper is required to transfer all the transactions sequentially. It takes a little longer but it can make a significant difference to resources on both sides. If lws learns from the first response header that keepalive is not possible, then it marks itself with that information and detaches any queued clients to make their own individual connections as a fallback. Lws can also intelligently combine multiple ongoing client connections to the same host and port into a single http/2 connection with multiple streams if the server supports it. Unlike http/1 pipelining, with http/2 the client connections all occur simultaneously using h2 stream multiplexing inside the one tcp + tls connection. You can turn off the h2 client support either by not building lws with `-DLWS_WITH_HTTP2=1` or giving the `LCCSCF_NOT_H2` flag in the client connection info struct `ssl_connection` member. @section vhosts Using lws vhosts If you set LWS_SERVER_OPTION_EXPLICIT_VHOSTS options flag when you create your context, it won't create a default vhost using the info struct members for compatibility. Instead you can call lws_create_vhost() afterwards to attach one or more vhosts manually. ``` LWS_VISIBLE struct lws_vhost * lws_create_vhost(struct lws_context *context, struct lws_context_creation_info *info); ``` lws_create_vhost() uses the same info struct as lws_create_context(), it ignores members related to context and uses the ones meaningful for vhost (marked with VH in libwebsockets.h). ``` struct lws_context_creation_info { int port; /* VH */ const char *iface; /* VH */ const struct lws_protocols *protocols; /* VH */ const struct lws_extension *extensions; /* VH */ ... ``` When you attach the vhost, if the vhost's port already has a listen socket then both vhosts share it and use SNI (is SSL in use) or the Host: header from the client to select the right one. Or if no other vhost already listening the a new listen socket is created. There are some new members but mainly it's stuff you used to set at context creation time. @section sni How lws matches hostname or SNI to a vhost LWS first strips any trailing :port number. Then it tries to find an exact name match for a vhost listening on the correct port, ie, if SNI or the Host: header provided abc.com:1234, it will match on a vhost named abc.com that is listening on port 1234. If there is no exact match, lws will consider wildcard matches, for example if cats.abc.com:1234 is provided by the client by SNI or Host: header, it will accept a vhost "abc.com" listening on port 1234. If there was a better, exact, match, it will have been chosen in preference to this. Connections with SSL will still have the client go on to check the certificate allows wildcards and error out if not. @section mounts Using lws mounts on a vhost The last argument to lws_create_vhost() lets you associate a linked list of lws_http_mount structures with that vhost's URL 'namespace', in a similar way that unix lets you mount filesystems into areas of your / filesystem how you like and deal with the contents transparently. ``` struct lws_http_mount { struct lws_http_mount *mount_next; const char *mountpoint; /* mountpoint in http pathspace, eg, "/" */ const char *origin; /* path to be mounted, eg, "/var/www/warmcat.com" */ const char *def; /* default target, eg, "index.html" */ struct lws_protocol_vhost_options *cgienv; int cgi_timeout; int cache_max_age; unsigned int cache_reusable:1; unsigned int cache_revalidate:1; unsigned int cache_intermediaries:1; unsigned char origin_protocol; unsigned char mountpoint_len; }; ``` The last mount structure should have a NULL mount_next, otherwise it should point to the 'next' mount structure in your list. Both the mount structures and the strings must persist until the context is destroyed, since they are not copied but used in place. `.origin_protocol` should be one of ``` enum { LWSMPRO_HTTP, LWSMPRO_HTTPS, LWSMPRO_FILE, LWSMPRO_CGI, LWSMPRO_REDIR_HTTP, LWSMPRO_REDIR_HTTPS, LWSMPRO_CALLBACK, }; ``` - LWSMPRO_FILE is used for mapping url namespace to a filesystem directory and serve it automatically. - LWSMPRO_CGI associates the url namespace with the given CGI executable, which runs when the URL is accessed and the output provided to the client. - LWSMPRO_REDIR_HTTP and LWSMPRO_REDIR_HTTPS auto-redirect clients to the given origin URL. - LWSMPRO_CALLBACK causes the http connection to attach to the callback associated with the named protocol (which may be a plugin). @section mountcallback Operation of LWSMPRO_CALLBACK mounts The feature provided by CALLBACK type mounts is binding a part of the URL namespace to a named protocol callback handler. This allows protocol plugins to handle areas of the URL namespace. For example in test-server-v2.0.c, the URL area "/formtest" is associated with the plugin providing "protocol-post-demo" like this ``` static const struct lws_http_mount mount_post = { NULL, /* linked-list pointer to next*/ "/formtest", /* mountpoint in URL namespace on this vhost */ "protocol-post-demo", /* handler */ NULL, /* default filename if none given */ NULL, 0, 0, 0, 0, 0, LWSMPRO_CALLBACK, /* origin points to a callback */ 9, /* strlen("/formtest"), ie length of the mountpoint */ }; ``` Client access to /formtest[anything] will be passed to the callback registered with the named protocol, which in this case is provided by a protocol plugin. Access by all methods, eg, GET and POST are handled by the callback. protocol-post-demo deals with accepting and responding to the html form that is in the test server HTML. When a connection accesses a URL related to a CALLBACK type mount, the connection protocol is changed until the next access on the connection to a URL outside the same CALLBACK mount area. User space on the connection is arranged to be the size of the new protocol user space allocation as given in the protocol struct. This allocation is only deleted / replaced when the connection accesses a URL region with a different protocol (or the default protocols[0] if no CALLBACK area matches it). This "binding connection to a protocol" lifecycle in managed by `LWS_CALLBACK_HTTP_BIND_PROTOCOL` and `LWS_CALLBACK_HTTP_DROP_PROTOCOL`. Because of HTTP/1.1 connection pipelining, one connection may perform many transactions, each of which may map to different URLs and need binding to different protocols. So these messages are used to create the binding of the wsi to your protocol including any allocations, and to destroy the binding, at which point you should destroy any related allocations. @section BINDTODEV SO_BIND_TO_DEVICE The .bind_iface flag in the context / vhost creation struct lets you declare that you want all traffic for listen and transport on that vhost to be strictly bound to the network interface named in .iface. This Linux-only feature requires SO_BIND_TO_DEVICE, which in turn requires CAP_NET_RAW capability... root has this capability. However this feature needs to apply the binding also to accepted sockets during normal operation, which implies the server must run the whole time as root. You can avoid this by using the Linux capabilities feature to have the unprivileged user inherit just the CAP_NET_RAW capability. You can confirm this with the test server ``` $ sudo /usr/local/bin/libwebsockets-test-server -u agreen -i eno1 -k ``` The part that ensures the capability is inherited by the unprivileged user is ``` #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) info.caps[0] = CAP_NET_RAW; info.count_caps = 1; #endif ``` @section dim Dimming webpage when connection lost The lws test plugins' html provides useful feedback on the webpage about if it is still connected to the server, by greying out the page if not. You can also add this to your own html easily - include lws-common.js from your HEAD section \ - dim the page during initialization, in a script section on your page lws_gray_out(true,{'zindex':'499'}); - in your ws onOpen(), remove the dimming lws_gray_out(false); - in your ws onClose(), reapply the dimming lws_gray_out(true,{'zindex':'499'}); @section errstyle Styling http error pages In the code, http errors should be handled by `lws_return_http_status()`. There are basically two ways... the vhost can be told to redirect to an "error page" URL in response to specifically a 404... this is controlled by the context / vhost info struct (`struct lws_context_creation_info`) member `.error_document_404`... if non-null the client is redirected to this string. If it wasn't redirected, then the response code html is synthesized containing the user-selected text message and attempts to pull in `/error.css` for styling. If this file exists, it can be used to style the error page. See https://libwebsockets.org/git/badrepo for an example of what can be done ( and https://libwebsockets.org/error.css for the corresponding css). libwebsockets-3.2.1/READMEs/README.content-security-policy.md000066400000000000000000000135071357643561300236120ustar00rootroot00000000000000## Using Content Security Policy (CSP) ### What is it? Modern browsers have recently implemented a new feature providing a sort of "selinux for your web page". If the server sends some new headers describing the security policy for the content, then the browser strictly enforces it. ### Why would we want to do that? Scripting on webpages is pretty universal, sometimes the scripts come from third parties, and sometimes attackers find a way to inject scripts into the DOM, eg, through scripts in content. CSP lets the origin server define what is legitimate for the page it served and everything else is denied. The CSP for warmcat.com and libwebsockets.org looks like this, I removed a handful of whitelisted image sources like travis status etc for clarity... ``` "content-security-policy": "default-src 'none'; img-src 'self' data:; script-src 'self'; font-src 'self'; style-src 'self'; connect-src 'self'; frame-ancestors 'none'; base-uri 'none';", "x-content-type-options": "nosniff", "x-xss-protection": "1; mode=block", "x-frame-options": "deny", "referrer-policy": "no-referrer" ``` The result of this is the browser won't let the site content be iframed, and it will reject any inline styles or inline scripts. Fonts, css, ajax, ws and images are only allowed to come from 'self', ie, the server that served the page. You may inject your script, or deceptive styles: it won't run or be shown. Because inline scripts are banned, the usual methods for XSS are dead; the attacker can't even load js from another server. So these rules provide a very significant increase in client security. ### Implications of strict CSP Halfhearted CSP isn't worth much. The only useful approach is to start with `default-src 'none'` which disables everything, and then whitelist the minimum needed for the pages to operate. "Minimum needed for the pages to operate" doesn't mean defeat the protections necessary so everything in the HTML can stay the same... it means adapt the pages to want the minimum and then enable the minimum. The main point is segregation of styles and script away from the content, in files referenced in the document `` section, along these lines: ``` Minimal Websocket test app ``` #### Inline styles must die All styling must go in one or more `.css` file(s) best served by the same server... while you can whitelist other sources in the CSP if you have to, unless you control that server as well, you are allowing whoever gains access to that server access to your users. Inline styles are no longer allowed (eg, "style='font-size:120%'" in the HTML)... they must be replaced by reference to one or more CSS class, which in this case includes "font-size:120%". This has always been the best practice anyway, and your pages will be cleaner and more maintainable. #### Inline scripts must die Inline scripts need to be placed in a `.js` file and loaded in the page head section, again it should only be from the server that provided the page. Then, any kind of inline script, yours or injected or whatever, will be completely rejected by the browser. #### onXXX must be replaced by eventListener Inline `onclick()` etc are kinds of inline scripting and are banned. Modern browsers have offered a different system called ["EventListener" for a while](https://developer.mozilla.org/en-US/docs/Web/API/EventListener) which allows binding of events to DOM elements in JS. A bunch of different named events are possible to listen on, commonly the `.js` file will ask for one or both of ``` window.addEventListener("load", function() { ... }, false); document.addEventListener("DOMContentLoaded", function() { ... }, false); ``` These give the JS a way to trigger when either everything on the page has been "loaded" or the DOM has been populated from the initial HTML. These can set up other event listeners on the DOM objects and aftwards the events will drive what happens on the page from user interaction and / or timers etc. If you have `onclick` in your HTML today, you would replace it with an id for the HTML element, then eg in the DOMContentLoaded event listener, apply ``` document.getElementById("my-id").addEventListener("click", function() { ... }, false); ``` ie the .js file becomes the only place with the "business logic" of the elements mentioned in the HTML, applied at runtime. #### Do you really need external sources? Do your scripts and fonts really need to come from external sources? If your caching policy is liberal, they are not actually that expensive to serve once and then the user is using his local copy for the next days. Some external sources are marked as anti-privacy in modern browsers, meaning they track your users, in turn meaning if your site refers to them, you will lose your green padlock in the browser. If the content license allows it, hosting them on "self", ie, the same server that provided the HTML, will remove that problem. Bringing in scripts from external sources is actually quite scary from the security perspective. If someone hacks the `ajax.googleapis.com` site to serve a hostile, modified jquery, half the Internet will instantly become malicious. However if you serve it yourself, unless your server was specifically targeted you know it will continue to serve what you expect. Since these scripts are usually sent with cache control headers for local caching duration of 1 year, the cost of serving them yourself under the same conditions is small but your susceptibility to attack is reduced to only taking care of your own server. And there is a privacy benefit that google is not informed of your users' IPs and activities on your site. libwebsockets-3.2.1/READMEs/README.contributing.md000066400000000000000000000021701357643561300214770ustar00rootroot00000000000000## Contributing to lws ### How to contribute Sending a patch with a bug report is very welcome. For nontrivial problems, it's probably best to discuss on the mailing list, or on github if you prefer, how to best solve it. However your contribution is coming is fine: - paste a `git diff` - send a patch series by mail or mailing list - paste in a github issue - github PR are all OK. ### Coding Standards Code should look roughly like the existing code, which follows linux kernel coding style. If there are non-functional problems I will clean them out when I apply the patch. If there are functional problems (eg broken error paths etc) if they are small compared to the working part I will also clean them. If there are larger problems, or consequences to the patch will have to discuss how to solve them with a retry. ### Funding specific work If there is a feature you wish was supported in lws, consider paying for the work to be done. The maintainer is a consultant and if we can agree the task, you can quickly get a high quality result that does just what you need, maintained ongoing along with the rest of lws. libwebsockets-3.2.1/READMEs/README.crypto-apis.md000066400000000000000000000173141357643561300212500ustar00rootroot00000000000000# Lws Crypto Apis ## Overview ![lws crypto overview](/doc-assets/lws-crypto-overview.svg) Lws provides a "generic" crypto layer on top of both OpenSSL and compatible tls library, and mbedtls. Using this layer, your code can work without any changes on both types of tls library crypto backends... it's as simple as rebuilding lws with `-DLWS_WITH_MBEDTLS=0` or `=1` at cmake. The generic layer can be used directly (as in, eg, the sshd plugin), or via another layer on top, which processes JOSE JSON objects using JWS (JSON Web Signatures), JWK (JSON Web Keys), and JWE (JSON Web Encryption). The `JW` apis use the generic apis (`lws_genrsa_`, etc) to get the crypto tasks done, so anything they can do you can also get done using the generic apis. The main difference is that with the generic apis, you must instantiate the correct types and use type-specfic apis. With the `JW` apis, there is only one interface for all operations, with the details hidden in the api and controlled by the JSON objects. Because of this, the `JW` apis are often preferred because they give you "crypto agility" cheaply... to change your crypto to another supported algorithm once it's working, you literally just change your JSON defining the keys and JWE or JWS algorithm. (It's up to you to define your policy for which combinations are acceptable by querying the parsed JW structs). ## Crypto supported in generic layer ### Generic Hash - SHA1 - SHA256 - SHA384 - SHA512 ### Generic HMAC - SHA256 - SHA384 - SHA512 ### Generic AES - CBC - CFB128 - CFB8 - CTR - ECB - OFB - XTS - GCM - KW (Key Wrap) ### Generic RSA - PKCS 1.5 - OAEP / PSS ### Generic EC - ECDH - ECDSA - P256 / P384 / P521 (sic) curves ## Using the generic layer All the necessary includes are part of `libwebsockets.h`. Enable `-DLWS_WITH_GENCRYPTO=1` at cmake. |api|header|Functionality| |---|---|---| |genhash|[./include/libwebsockets/lws-genhash.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-genhash.h)|Provides SHA1 + SHA2 hashes and hmac| |genrsa|[./include/libwebsockets/lws-genrsa.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-genrsa.h)|Provides RSA encryption, decryption, signing, verification, key generation and creation| |genaes|[./include/libwebsockets/lws-genaes.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-genaes.h)|Provides AES in all common variants for encryption and decryption| |genec|[./include/libwebsockets/lws-genec.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-genec.h)|Provides Elliptic Curve for encryption, decryption, signing, verification, key generation and creation| |x509|[./include/libwebsockets/lws-x509.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-x509.h)|Apis for X.509 Certificate loading, parsing, and stack verification, plus JWK key extraction from PEM X.509 certificate / private key| Unit tests for these apis, which serve as usage examples, can be found in [./minimal-examples/api-tests/api-test-gencrypto](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-gencrypto) ### Keys in the generic layer The necessary types and defines are brought in by `libwebsockets.h`. Keys are represented only by an array of `struct lws_jwk_elements`... the length of the array is defined by the cipher... it's one of |key elements count|definition| |---|---| |`LWS_COUNT_OCT_KEY_ELEMENTS`|1| |`LWS_COUNT_RSA_KEY_ELEMENTS`|8| |`LWS_COUNT_EC_KEY_ELEMENTS`|4| |`LWS_COUNT_AES_KEY_ELEMENTS`|1| `struct lws_jwk_elements` is a simple pointer / length combination used to store arbitrary octets that make up the key element's binary representation. ## Using the JOSE layer The JOSE (JWK / JWS / JWE) stuff is a crypto-agile JSON-based layer that uses the gencrypto support underneath. "Crypto Agility" means the JSON structs include information about the algorithms and ciphers used in that particular object, making it easy to upgrade system crypto strength or cycle keys over time while supporting a transitional period where the old and new keys or algorithms + ciphers are also valid. Uniquely lws generic support means the JOSE stuff also has "tls library agility", code written to the lws generic or JOSE apis is completely unchanged even if the underlying tls library changes between OpenSSL and mbedtls, meaning sharing code between server and client sides is painless. All the necessary includes are part of `libwebsockets.h`. Enable `-DLWS_WITH_JOSE=1` at CMake. |api|header|Functionality| |---|---|---| |JOSE|[./include/libwebsockets/lws-jose.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-jose.h)|Provides crypto agility for JWS / JWE| |JWE|[./include/libwebsockets/lws-jwe.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-jwe.h)|Provides Encryption and Decryption services for RFC7516 JWE JSON| |JWS|[./include/libwebsockets/lws-jws.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-jws.h)|Provides signature and verifcation services for RFC7515 JWS JSON| |JWK|[./include/libwebsockets/lws-jwk.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-jwk.h)|Provides signature and verifcation services for RFC7517 JWK JSON, both "keys" arrays and singletons| Minimal examples are provided in the form of commandline tools for JWK / JWS / JWE / x509 handling: - [JWK minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-jwk) - [JWS minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-jws) - [JWE minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-jwe) - [X509 minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-x509) Unit tests for these apis, which serve as usage examples, can be found in [./minimal-examples/api-tests/api-test-jose](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-jose) ## Crypto supported in the JOSE layer The JOSE RFCs define specific short names for different algorithms ### JWS |JSOE name|Hash|Signature| ---|---|--- |RS256, RS384, RS512|SHA256/384/512|RSA |ES256, ES384, ES521|SHA256/384/512|EC ### JWE |Key Encryption|Payload authentication + crypt| |---|---| |`RSAES-PKCS1-v1.5` 2048b & 4096b|`AES_128_CBC_HMAC_SHA_256`| |`RSAES-PKCS1-v1.5` 2048b|`AES_192_CBC_HMAC_SHA_384`| |`RSAES-PKCS1-v1.5` 2048b|`AES_256_CBC_HMAC_SHA_512`| |`RSAES-OAEP`|`AES_256_GCM`| |`AES128KW`, `AES192KW`, `AES256KW`|`AES_128_CBC_HMAC_SHA_256`| |`AES128KW`, `AES192KW`, `AES256KW`|`AES_192_CBC_HMAC_SHA_384`| |`AES128KW`, `AES192KW`, `AES256KW`|`AES_256_CBC_HMAC_SHA_512`| |`ECDH-ES` (P-256/384/521 key)|`AES_128/192/256_GCM`| |`ECDH-ES+A128/192/256KW` (P-256/384/521 key)|`AES_128/192/256_GCM`| ### Keys in the JOSE layer Keys in the JOSE layer use a `struct lws_jwk`, this contains two arrays of `struct lws_jwk_elements` sized for the worst case (currently RSA). One array contains the key elements as described for the generic case, and the other contains various nonencrypted key metadata taken from JWK JSON. |metadata index|function| |---|---| |`JWK_META_KTY`|Key type, eg, "EC"| |`JWK_META_KID`|Arbitrary ID string| |`JWK_META_USE`|What the public key may be used to validate, "enc" or "sig"| |`JWK_META_KEY_OPS`|Which operations the key is authorized for, eg, "encrypt"| |`JWK_META_X5C`|Optional X.509 cert version of the key| |`JWK_META_ALG`|Optional overall crypto algorithm the key is intended for use with| `lws_jwk_destroy()` should be called when the jwk is going out of scope... this takes care to zero down any key element data in the jwk. libwebsockets-3.2.1/READMEs/README.esp32.md000066400000000000000000000035751357643561300177360ustar00rootroot00000000000000ESP32 Support ============= See \ref esp32 for details on how to build lws as a component in an ESP-IDF project. Lws provides a "factory" application https://github.com/warmcat/lws-esp32-factory and a test application which implements the generic lws server test apps https://github.com/warmcat/lws-esp32-test-server-demos The behaviours of the generic factory are are quite rich, and cover uploading SSL certs through factory and user configuration, AP selection and passphrase entry, and managing a switch to allow the user to force entry to user setup mode at boot subsequently. The factory app comes with partitioning for a 1MB factory partition containing that app and data, and a single 2.9MB OTA partition containing the main app. The factory app is able to do OTA updates for both the factory and OTA partition slots; updating the factory slot first writes the new image to the OTA slot and copies it into place at the next boot, after which the user can reload the OTA slot. State|Image|AP SSID|Port|URL|Mode ---|---|---|---|---|--- Factory Reset or Uninitialized|Factory|AP: ESP_012345|80|http://192.168.4.1|factory.html - to set certificates and serial User configuration|Factory|AP: config-model-serial|443|https://192.168.4.1|index.html - user set up his AP information Operation|OTA|Station only|443|https://model-serial.local|OTA application ## Basic Auth The lws-esp32-test-server-demos app also demos basic auth. On a normal platform this is done by binding a mount to a text file somewhere in the filesystem, which contains user:password information one per line. On ESP32 there is not necessarily any generic VFS in use. So instead, the basic auth lookup is bound to a given nvs domain, where the username is the key and the password the value. main/main.c in the test demos app shows how to both make the mount use basic auth, and how to set a user:password combination using nvs. libwebsockets-3.2.1/READMEs/README.generic-sessions.md000066400000000000000000000316531357643561300222600ustar00rootroot00000000000000Notes about generic-sessions Plugin =================================== @section gseb Enabling lwsgs for build Enable at CMake with -DLWS_WITH_GENERIC_SESSIONS=1 This also needs sqlite3 (libsqlite3-dev or similar package) @section gsi lwsgs Introduction The generic-sessions protocol plugin provides cookie-based login authentication for lws web and ws connections. The plugin handles everything about generic account registration, email verification, lost password, account deletion, and other generic account management. Other code, in another eg, ws protocol handler, only needs very high-level state information from generic-sessions, ie, which user the client is authenticated as. Everything underneath is managed in generic-sessions. - random 20-byte session id managed in a cookie - all information related to the session held at the server, nothing managed clientside - sqlite3 used at the server to manage active sessions and users - defaults to creating anonymous sessions with no user associated - admin account (with user-selectable username) is defined in config with a SHA-1 of the password; rest of the accounts are in sqlite3 - user account passwords stored as salted SHA-1 with additional confounder only stored in the JSON config, not the database - login, logout, register account + email verification built-in with examples - in a mount, some file suffixes (ie, .js) can be associated with a protocol for the purposes of rewriting symbolnames. These are read-only copies of logged-in server state. - When your page fetches .js or other rewritten files from that mount, "$lwsgs_user" and so on are rewritten on the fly using chunked transfer encoding - Eliminates server-side scripting with a few rewritten symbols and javascript on client side - 32-bit bitfield for authentication sectoring, mounts can provide a mask on the loggin-in session's associated server-side bitfield that must be set for access. - No code (just config) required for, eg, private URL namespace that requires login to access. @section gsin Lwsgs Integration to HTML Only three steps are needed to integrate lwsgs in your HTML. 1) lwsgs HTML UI is bundled with the javascript it uses in `lwsgs.js`, so import that script file in your head section 2) define an empty div of id "lwsgs" somewhere 3) Call lwsgs_initial() in your page That's it. An example is below ```
``` @section gsof Lwsgs Overall Flow@ When the protocol is initialized, it gets per-vhost information from the config, such as where the sqlite3 databases are to be stored. The admin username and sha-1 of the admin password are also taken from here. In the mounts using protocol-generic-sessions, a cookie is maintained against any requests; if no cookie was active on the initial request a new session is created with no attached user. So there should always be an active session after any transactions with the server. In the example html going to the mount /lwsgs loads a login / register page as the default. The
in the login page contains 'next url' hidden inputs that let the html 'program' where the form handler will go after a successful admin login, a successful user login and a failed login. After a successful login, the sqlite record at the server for the current session is updated to have the logged-in username associated with it. @section gsconf Lwsgs Configuration "auth-mask" defines the authorization sector bits that must be enabled on the session to gain access. "auth-mask" 0 is the default. - b0 is set if you are logged in as a user at all. - b1 is set if you are logged in with the user configured to be admin - b2 is set if the account has been verified (the account configured for admin is always verified) - b3 is set if your session just did the forgot password flow successfully ``` { # things in here can always be served "mountpoint": "/lwsgs", "origin": "file:///usr/share/libwebsockets-test-server/generic-sessions", "origin": "callback://protocol-lws-messageboard", "default": "generic-sessions-login-example.html", "auth-mask": "0", "interpret": { ".js": "protocol-lws-messageboard" } }, { # things in here can only be served if logged in as a user "mountpoint": "/lwsgs/needauth", "origin": "file:///usr/share/libwebsockets-test-server/generic-sessions/needauth", "origin": "callback://protocol-lws-messageboard", "default": "generic-sessions-login-example.html", "auth-mask": "5", # logged in as a verified user "interpret": { ".js": "protocol-lws-messageboard" } }, { # things in here can only be served if logged in as admin "mountpoint": "/lwsgs/needadmin", "origin": "file:///usr/share/libwebsockets-test-server/generic-sessions/needadmin", "origin": "callback://protocol-lws-messageboard", "default": "generic-sessions-login-example.html", "auth-mask": "7", # b2 = verified (by email / or admin), b1 = admin, b0 = logged in with any user name "interpret": { ".js": "protocol-lws-messageboard" } } ``` Note that the name of the real application protocol that uses generic-sessions is used, not generic-sessions itself. The vhost configures the storage dir, admin credentials and session cookie lifetimes: ``` "ws-protocols": [{ "protocol-generic-sessions": { "status": "ok", "admin-user": "admin", # create the pw hash like this (for the example pw, "jipdocesExunt" ) # $ echo -n "jipdocesExunt" | sha1sum # 046ce9a9cca769e85798133be06ef30c9c0122c9 - # # Obviously ** change this password hash to a secret one before deploying ** # "admin-password-sha1": "046ce9a9cca769e85798133be06ef30c9c0122c9", "session-db": "/var/www/sessions/lws.sqlite3", "timeout-idle-secs": "600", "timeout-anon-idle-secs": "1200", "timeout-absolute-secs": "6000", # the confounder is part of the salted password hashes. If this config # file is in a 0700 root:root dir, an attacker with apache credentials # will have to get the confounder out of the process image to even try # to guess the password hashes. "confounder": "Change to <=31 chars of junk", "email-from": "noreply@example.com", "email-smtp-ip": "127.0.0.1", "email-expire": "3600", "email-helo": "myhost.com", "email-contact-person": "Set Me ", "email-confirm-url-base": "http://localhost:7681/lwsgs" } ``` The email- related settings control generation of automatic emails for registration and forgotten password. - `email-from`: The email address automatic emails are sent from - `email-smtp-ip`: Normally 127.0.0.1, if you have a suitable server on port 25 on your lan you can use this instead here. - `email-expire`: Seconds that links sent in email will work before being deleted - `email-helo`: HELO to use when communicating with your SMTP server - `email-contact-person`: mentioned in the automatic emails as a human who can answer questions - `email-confirm-url-base`: the URL to start links with in the emails, so the recipient can get back to the web server The real protocol that makes use of generic-sessions must also be listed and any configuration it needs given ``` "protocol-lws-messageboard": { "status": "ok", "message-db": "/var/www/sessions/messageboard.sqlite3" }, ``` Notice the real application uses his own sqlite db, no details about how generic-sessions works or how it stores data are available to it. @section gspwc Lwsgs Password Confounder You can also define a per-vhost confounder shown in the example above, used when aggregating the password with the salt when it is hashed. Any attacker will also need to get the confounder along with the database, which you can make harder by making the config dir only eneterable / readable by root. @section gsprep Lwsgs Preparing the db directory You will have to prepare the db directory so it's suitable for the lwsws user to use, that usually means apache, eg ``` # mkdir -p /var/www/sessions # chown root:apache /var/www/sessions # chmod 770 /var/www/sessions ``` @section gsrmail Lwsgs Email configuration lwsgs will can send emails by talking to an SMTP server on localhost:25. That will usually be sendmail or postfix, you should confirm that works first by itself using the `mail` application to send on it. lwsgs has been tested on stock Fedora sendmail and postfix. @section gsap Lwsgs Integration with another protocol lwsgs is designed to provide sessions and accounts in a standalone and generic way. But it's not useful by itself, there will always be the actual application who wants to make use of generic-sessions features. We provide the "messageboard" plugin as an example of how to integrate with your actual application protocol. The basic approach is the 'real' protocol handler (usually a plugin itself) subclasses the generic-sessions plugin and calls through to it by default. The "real" protocol handler entirely deals with ws-related stuff itself, since generic-sessions does not use ws. But for - LWS_CALLBACK_HTTP - LWS_CALLBACK_HTTP_BODY - LWS_CALLBACK_HTTP_BODY_COMPLETION - LWS_CALLBACK_HTTP_DROP_PROTOCOL the "real" protocol handler checks if it recognizes the activity (eg, his own POST form URL) and if not, passes stuff through to the generic-sessions protocol callback to handle it. To simplify matters the real protocol can just pass through any unhandled messages to generic-sessions. The "real" protocol can get a pointer to generic-sessions protocol on the same vhost using ``` vhd->gsp = lws_vhost_name_to_protocol(vhd->vh, "protocol-generic-sessions"); ``` The "real" protocol must also arrange generic-sessions per_session_data in his own per-session allocation. To allow keeping generic-sessions opaque, the real protocol must allocate that space at runtime, using the pss size the generic-sessions protocol struct exposes ``` struct per_session_data__myapp { void *pss_gs; ... pss->pss_gs = malloc(vhd->gsp->per_session_data_size); ``` The allocation reserved for generic-sessions is then used as user_space when the real protocol calls through to the generic-sessions callback ``` vhd->gsp->callback(wsi, reason, &pss->pss_gs, in, len); ``` In that way the "real" protocol can subclass generic-sessions functionality. To ease management of these secondary allocations, there are callbacks that occur when a wsi binds to a protocol and when the binding is dropped. These should be used to malloc and free and kind of per-connection secondary allocations. ``` case LWS_CALLBACK_HTTP_BIND_PROTOCOL: if (!pss || pss->pss_gs) break; pss->pss_gs = malloc(vhd->gsp->per_session_data_size); if (!pss->pss_gs) return -1; memset(pss->pss_gs, 0, vhd->gsp->per_session_data_size); break; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: if (vhd->gsp->callback(wsi, reason, pss ? pss->pss_gs : NULL, in, len)) return -1; if (pss->pss_gs) { free(pss->pss_gs); pss->pss_gs = NULL; } break; ``` #section gsapsib Getting session-specific information from another protocol At least at the time when someone tries to upgrade an http(s) connection to ws(s) with your real protocol, it is necessary to confirm the cookie the http(s) connection has with generic-sessions and find out his username and other info. Generic sessions lets another protocol check it again by calling his callback, and lws itself provides a generic session info struct to pass the related data ``` struct lws_session_info { char username[32]; char email[100]; char ip[72]; unsigned int mask; char session[42]; }; struct lws_session_info sinfo; ... vhd->gsp->callback(wsi, LWS_CALLBACK_SESSION_INFO, &pss->pss_gs, &sinfo, 0); ``` After the call to generic-sessions, the results can be - all the strings will be zero-length and .mask zero, there is no usable cookie - only .ip and .session are set: the cookie is OK but no user logged in - all the strings contain information about the logged-in user the real protocol can use this to reject attempts to open ws connections from http connections that are not authenticated; afterwards there's no need to check the ws connection auth status again. libwebsockets-3.2.1/READMEs/README.generic-table.md000066400000000000000000000145321357643561300214760ustar00rootroot00000000000000Notes about generic-table ========================= @section gtint What is generic-table? Generic-table is a JSON schema and client-side JS file that makes it easy to display live, table structured HTML over a ws link. An example plugin and index.html using it are provided, but lwsgt itself doesn't have its own plugin, it's just a JSON schema and client-side JS that other plugins can use to simplify displaying live, table-based data without having to reinvent the wheel each time. The ws protocol sends JSON describing the table, and then JSON updating the table contents when it chooses, the brower table is updated automatically, live. \image html lwsgt-overview.png - Example protocol plugin (displays directory contents): https://github.com/warmcat/libwebsockets/tree/master/plugins/generic-table/protocol_table_dirlisting.c - Example HTML: https://github.com/warmcat/libwebsockets/tree/master/plugins/generic-table/assets/index.html - lwsgt.js (client-side table rendering / ws link management): https://github.com/warmcat/libwebsockets/tree/master/plugins/generic-table/assets/lwsgt.js @section gteb Enabling for build Enable the demo plugin at CMake with -DLWS_WITH_PLUGINS=1 @section gtinth Integrating with your html - In your HEAD section, include lwsgt.js ``` ``` - Also in your HEAD section, style the lwsgt CSS, eg ``` ``` You can skip this but the result will be less beautiful until some CSS is provided. - In your body section, declare a div with an id (can be whatever you want) ```
``` lwsgt JS will put its content there. - Finally in a ``` In the callback, you can recover the ws object by `window[gt].lwsgt_ws`. @section gtc Lwsgt constructor To instantiate the ws link and lwsgt instance, your HTML must call a lwsgt constructor for each region on the page managed by lwsgt. `var myvar = new lwsgt_initial(title, ws_protocol, div_id, click_cb, myvar);` All of the arguments are strings. | Parameter | Description | |-----------------|---------------------------------------------------------| | title | Title string to go above the table | | ws_protocol | Protocol name string to use when making ws connection | | div_id | HTML id of div to fill with content | | click_cb | Callback function name string to handle clickable links | | myvar | Name of var used to hold this instantiation globally | Note "myvar" is needed so it can be passed to the click handling callback. @section gtclick Lwsgt click handling function When a clickable link produced by lwsgt is clicked, the function named in the click_cb parameter to lwsgt_initial is called. That function is expected to take four parameters, eg `function lwsgt_dir_click(gt, u, col, row)` | Parameter | Description | |------- ---|-----------------------------------------------------------| | gt | Name of global var holding this lwsgt context (ie, myvar) | | u | Link "url" string | | col | Table column number link is from | | row | Table row number link is from | @section gtgj Generic-table JSON ### Column layout When the ws connection is established, the protocol should send a JSON message describing the table columns. For example ``` "cols": [ { "name": "Date" }, { "name": "Size", "align": "right" }, { "name": "Icon" }, { "name": "Name", "href": "uri"}, { "name": "uri", "hide": "1" } ] } ``` - This describes 5 columns - Only four columns (not "uri") should be visible - "Name" should be presented as a clickable link using "uri" as the destination, when a "uri" field is presented. - "Size" field should be presented aligned to the right ### Breadcrumbs When a view is hierarchical, it's useful to provide a "path" with links back in the "path", known as "breadcrumbs". Elements before the last one should provide a "url" member as well as the displayable name, which is used to create the link destination. The last element, being the current displayed page should not have a url member and be displayed without link style. ``` "breadcrumbs":[{"name":"top", "url": "/" }, {"name":"mydir"}] ``` ### Table data The actual file data consists of an array of rows, containing the columns mentioned in the original "cols" section. ``` "data":[ { "Icon":" ", "Date":"2015-Feb-06 03:08:35 +0000", "Size":"1406", "uri":"./serve//favicon.ico", "Name":"favicon.ico" } ] ``` @section gtdirl Setting up protocol-lws-table-dirlisting The example protocol needs two mounts, one to provide the index.html, js and the protocol itself ``` { "mountpoint": "/dirtest", "origin": "file:///usr/share/libwebsockets-test-server/generic-table", "origin": "callback://protocol-lws-table-dirlisting", "default": "index.html", "pmo": [{ "dir": "/usr/share/libwebsockets-test-server" }] }, ``` The protocol wants a per-mount option (PMO) to tell it the base directory it is serving from, named "dir". The other mount is there to simply serve items that get clicked on from the table in a secure way ``` { "mountpoint": "/dirtest/serve", "origin": "file:///usr/share/libwebsockets-test-server", "default": "index.html" }, ``` This last bit is not related to using lwsgt itself. libwebsockets-3.2.1/READMEs/README.http-fallback.md000066400000000000000000000150071357643561300215070ustar00rootroot00000000000000# Http fallback and raw proxying Lws has several interesting options and features that can be applied to get some special behaviours... this article discusses them and how they work. ## Overview of normal vhost selection Lws supports multiple http or https vhosts sharing a listening socket on the same port. For unencrypted http, the Host: header is used to select which vhost the connection should bind to, by comparing what is given there against the names the server was configured with for the various vhosts. If no match, it selects the first configured vhost. For TLS, it has an extension called SNI (Server Name Indication) which tells the server early in the TLS handshake the host name the connection is aimed at. That allows lws to select the vhost early, and use vhost-specific TLS certs so everything is happy. Again, if there is no match the connection proceeds using the first configured vhost and its certs. ## Http(s) fallback options What happens if you try to connect, eg, an ssh client to the http server port (this is not an idle question...)? Obviously the http server part or the tls part of lws will fail the connection and close it. (We will look at that flow in a moment in detail for both unencrypted and tls listeners.) However if the first configured vhost for the port was created with the vhost creation info struct `.options` flag `LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG`, then instead of the error, the connection transitions to whatever role was given in the vhost creation info struct `.listen_accept_role` and `.listen_accept_protocol`. With lejp-conf / lwsws, the options can be applied to the first vhost using: ``` "listen-accept-role": "the-role-name", "listen-accept-protocol": "the-protocol-name", "fallback-listen-accept": "1" ``` See `./minimal-examples/raw/minimal-raw-fallback-http-server` for examples of all the options in use via commandline flags. So long as the first packet for the protocol doesn't look like GET, POST, or a valid tls packet if connection to an https vhost, this allows the one listen socket to handle both http(s) and a second protocol, as we will see, like ssh. Notice there is a restriction that no vhost selection processing is possible, neither for tls listeners nor plain http ones... the packet belonging to a different protocol will not send any Host: header nor tls SNI. Therefore although the flags and settings are applied to the first configured vhost, actually their effect is global for a given listen port. If enabled, all vhosts on the same listen port will do the fallback action. ### Plain http flow ![plain http flow](/doc-assets/accept-flow-1.svg) Normally, if the first received packet does not contain a valid HTTP method, then the connection is dropped. Which is what you want from an http server. However if enabled, the connection can transition to the defined secondary role / protocol. |Flag|lejp-conf / lwsws|Function| |---|---|---| |`LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG`|`"fallback-listen-accept": "1"`|Enable fallback processing| ### TLS https flow ![tls https flow](/doc-assets/accept-flow-2.svg) If the port is listening with tls, the point that a packet from a different protocol will fail is earlier, when the tls tunnel is being set up. |Flag|lejp-conf / lwsws|Function| |---|---|---| |`LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG`|`"fallback-listen-accept": "1"`|Enable fallback processing| |`LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS`|`"redirect-http": "1"`|Treat invalid tls packet as http, issue http redirect to https://| |`LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER`|`"allow-http-on-https": "1"`|Accept unencrypted http connections on this tls port (dangerous)| The latter two options are higher priority than, and defeat, the first one. ### Non-http listener ![non-http flow](/doc-assets/accept-flow-3.svg) It's also possible to skip the fallback processing and just force the first vhost on the port to use the specified role and protocol in the first place. |Flag|lejp-conf / lwsws|Function| |---|---|---| |LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG|`"apply-listen-accept": "1"`|Force vhost to use listen-accept-role / listen-accept-protocol| ## Using http(s) fallback with raw-proxy If enabled for build with `cmake .. -DLWS_ROLE_RAW_PROXY=1 -DLWS_WITH_PLUGINS=1` then lws includes ready-to-use support for raw tcp proxying. This can be used standalone on the first vhost on a port, but most intriguingly it can be specified as the fallback for http(s)... See `./minimal-examples/raw/minimal-raw-proxy-fallback.c` for a working example. ### fallback with raw-proxy in code On the first vhost for the port, specify the required "onward" pvo to configure the raw-proxy protocol...you can adjust the "ipv4:127.0.0.1:22" to whatever you want... ``` static struct lws_protocol_vhost_options pvo1 = { NULL, NULL, "onward", /* pvo name */ "ipv4:127.0.0.1:22" /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo1, /* "child" pvo linked-list */ "raw-proxy", /* protocol name we belong to on this vhost */ "" /* ignored */ }; ``` ... and set up the fallback enable and bindings... ``` info.options |= LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG; info.listen_accept_role = "raw_proxy"; info.listen_accept_proxy = "raw_proxy"; info.pvo = &pvo; ``` ### fallback with raw-proxy in JSON conf On the first vhost for the port, enable the raw-proxy protocol on the vhost and set the pvo config ``` "ws-protocols": [{ "raw-proxy": { "status": "ok", "onward": "ipv4:127.0.0.1:22" } }], ``` Enable the fallback behaviour on the vhost and the role / protocol binding ``` "listen-accept-role": "raw-proxy", "listen-accept-protocol": "raw-proxy", "fallback-listen-accept": "1" ``` ### Testing With this configured, the listen port will function normally for http or https depending on how it was set up. But if you try to connect to it with an ssh client, that will also work fine. The libwebsockets.org server is set up in this way, you can confirm it by visiting `https://libwebsockets.org` on port 443 as usual, but also trying `ssh -p 443 invalid@libwebsockets.org`... you will get permission denied from your ssh client. With valid credentials in fact that works perfectly for ssh, scp, git-over-ssh etc all on port 443... libwebsockets-3.2.1/READMEs/README.lws_dll.md000066400000000000000000000073571357643561300204440ustar00rootroot00000000000000# lws_dll Doubly-linked list ## Introduction Lws supports two kinds of doubly-linked list, `lws_dll` and `lws_dll2`. Unless memory is at a big premium, or it has to work on lws < v3.2, it's best to simply use `lws_dll2`. ![lws_dll overview](../doc-assets/lws_dll.svg) ## How to use The basics are the same for lws_dll and lws_dll2. The list objects point only to themselves, and you use the `lws_container_of` macro to get a pointer to your struct that contains the list object. Doing it this way - the list object does not have to be the first thing in your struct - your struct can contain multiple list objects and appear on lists belonging to multiple owners simultaenously, ### lws_dll Minimal example ``` struct mystruct { .... lws_dll list; ... }; lws_dll owner; ``` Adding a mystruct to the owner list (...add_tail() works the same way but adds to the other end of the list) ``` struct mystruct *p; ... lws_dll_add_head(&p->list, &owner); ``` Removing the list object from its owner ``` lws_dll2_remove(&p->list, &owner); ``` If you have a `struct lws_dll *d` pointing to `list` in struct mystruct, you can convert it to a `struct mystruct *p` ike this ``` struct mystruct *p = lws_container_of(d, struct lws_dll, list); ``` ### lws_dll2 Minimal example ``` struct mystruct { .... lws_dll2 list; ... }; lws_dll2_owner owner; ``` Adding a mystruct to the owner list (...add_tail() works the same way but adds to the other end of the list) ``` struct mystruct *p; ... lws_dll2_add_head(&p->list, &owner); ``` Removing the list object from its owner (notice compared to lws_dll, it doesn't need to be told the owner) ``` lws_dll2_remove(&p->list); ``` If you have a `struct lws_dll2 *d` pointing to `list` in struct mystruct, you can convert it to a `struct mystruct *p` ike this ``` struct mystruct *p = lws_container_of(d, struct lws_dll2, list); ``` ## Summary Comparing lws_dll and lws_dll2 - both offer a doubly-linked list object, and (since v3.2) track both the head and tail in an "list owner" object - both are initalized by memsetting to 0 - for `lws_dll`, it reuses an `lws_dll` as the "owner", for `lws_dll2`, there's a specific `lws_dll2_owner` structure for that - `lws_dll2_owner` also keeps count of the number of list elements - `lws_dll2` knows which owner's list it is participating on. So it can remove itself and update the owner without the caller needing to know its owner. In the case there are several potential owners list objects may be on, this is very convenient. - `lws_dll` is simpler and has a smaller footprint (two pointers per entry vs three). But you have to know the exact list owner to perform operations on it. ## apis |function|lws_dll|lws_dll2| |---|---|---| |add entry at head|`void lws_dll_add_head(struct lws_dll *d, struct lws_dll *phead)`|`void lws_dll2_add_head(struct lws_dll2 *d, struct lws_dll2_owner *owner)`| |add entry at tail|`void lws_dll_add_tail(struct lws_dll *d, struct lws_dll *phead);`|`void lws_dll2_add_tail(struct lws_dll2 *d, struct lws_dll2_owner *owner)`| |remove entry from its owning list|`void lws_dll_remove_track_tail(struct lws_dll *d, struct lws_dll *phead)`|`void lws_dll2_add_tail(struct lws_dll2 *d, struct lws_dll2_owner *owner)`| |get owner|(not supported)|`struct lws_dll2_owner * lws_dll2_owner(const struct lws_dll2 *d)`| |check if item is detached from any list|`lws_dll_is_detached(struct lws_dll *d, struct lws_dll *phead)|int lws_dll2_is_detached(const struct lws_dll2 *d)`| |iterate through items on list|`int lws_dll_foreach_safe(struct lws_dll *phead, void *user, int (*cb)(struct lws_dll *d, void *user))|int lws_dll2_foreach_safe(struct lws_dll2_owner *owner, void *user, int (*cb)(struct lws_dll2 *d, void *user))`| libwebsockets-3.2.1/READMEs/README.lws_sequencer.md000066400000000000000000000144001357643561300216460ustar00rootroot00000000000000# `lws_sequencer_t` introduction Often a single network action like a client GET is just part of a larger series of actions, perhaps involving different connections. Since lws operates inside an event loop, if the outer sequencing doesn't, it can be awkward to synchronize these steps with what's happening on the network with a particular connection on the event loop thread. ![lws_sequencer](/doc-assets/lws_sequencer.svg) `lws_sequencer_t` provides a generic way to stage multi-step operations from inside the event loop. Because it participates in the event loop similar to a wsi, it always operates from the service thread context and can access structures that share the service thread without locking. It can also provide its own higher-level timeout handling. Naturally you can have many of them running in the same event loop operating independently. Sequencers themselves bind to a pt (per-thread) service thread, by default there's only one of these and it's the same as saying they bind to an `lws_context`. The sequencer callback may create wsi which in turn are bound to a vhost, but the sequencer itself is above all that. ## Sequencer timeouts The sequencer additionally maintains its own second-resolution timeout checked by lws for the step being sequenced... this is independent of any lws wsi timeouts which tend to be set and reset for very short-term timeout protection inside one transaction. The sequencer timeout operates separately and above any wsi timeout, and is typically only reset by the sequencer callback when it receives an event indicating a step completed or failed, or it sets up the next sequence step. If the sequencer timeout expires, then the sequencer receives a queued `LWSSEQ_TIMED_OUT` message informing it, and it can take corrective action or schedule a retry of the step. This message is queued and sent normally under the service thread context and in order of receipt. Unlike lws timeouts which force the wsi to close, the sequencer timeout only sends the message. This allows the timeout to be used to, eg, wait out a retry cooloff period and then start the retry when the `LWSSEQ_TIMED_OUT` is received, according to the state of the sequencer. ## Creating an `lws_sequencer_t` ``` typedef struct lws_seq_info { struct lws_context *context; /* lws_context for seq */ int tsi; /* thread service idx */ size_t user_size; /* size of user alloc */ void **puser; /* place ptr to user */ lws_seq_event_cb cb; /* seq callback */ const char *name; /* seq name */ const lws_retry_bo_t *retry; /* retry policy */ } lws_seq_info_t; ``` ``` lws_sequencer_t * lws_sequencer_create(lws_seq_info_t *info); ``` When created, in lws the sequencer objects are bound to a 'per-thread', which is by default the same as to say bound to the `lws_context`. You can tag them with an opaque user data pointer, and they are also bound to a user-specified callback which handles sequencer events ``` typedef int (*lws_seq_event_cb)(struct lws_sequencer *seq, void *user_data, lws_seq_events_t event, void *data); ``` `lws_sequencer_t` objects are private to lws and opaque to the user. A small set of apis lets you perform operations on the pointer returned by the create api. ## Queueing events on a sequencer Each sequencer object can be passed "events", which are held on a per-sequencer queue and handled strictly in the order they arrived on subsequent event loops. `LWSSEQ_CREATED` and `LWSSEQ_DESTROYED` events are produced by lws reflecting the sequencer's lifecycle, but otherwise the event indexes have a user-defined meaning and are queued on the sequencer by user code for eventual consumption by user code in the sequencer callback. Pending events are removed from the sequencer queues and sent to the sequencer callback from inside the event loop at a rate of one per event loop wait. ## Destroying sequencers `lws_sequencer_t` objects are cleaned up during context destruction if they are still around. Normally the sequencer callback receives a queued message that informs it that it's either failed at the current step, or succeeded and that was the last step, and requests that it should be destroyed by returning `LWSSEQ_RET_DESTROY` from the sequencer callback. ## Lifecycle considerations Sequencers may spawn additional assets like client wsi as part of the sequenced actions... the lifecycle of the sequencer and the assets overlap but do not necessarily depend on each other... that is a wsi created by the sequencer may outlive the sequencer. It's important therefore to detach assets from the sequencer and the sequencer from the assets when each step is over and the asset is "out of scope" for the sequencer. It doesn't necessarily mean closing the assets, just making sure pointers are invalidated. For example, if a client wsi held a pointer to the sequencer as its `.user_data`, when the wsi is out of scope for the sequencer it can set it to NULL, eg, `lws_set_wsi_user(wsi, NULL);`. Under some conditions wsi may want to hang around a bit to see if there is a subsequent client wsi transaction they can be reused on. They will clean themselves up when they time out. ## Watching wsi lifecycle from a sequencer When a sequencer is creating a wsi as part of its sequence, it will be very interested in lifecycle events. At client wsi creation time, the sequencer callback can set info->seq to itself in order to receive lifecycle messages about its wsi. |message|meaning| |---|---| |`LWSSEQ_WSI_CONNECTED`|The wsi has become connected| |`LWSSEQ_WSI_CONN_FAIL`|The wsi has failed to connect| |`LWSSEQ_WSI_CONN_CLOSE`|The wsi had been connected, but has now closed| By receiving these, the sequencer can understand when it should attempt reconnections or that it cannot progress the sequence. When dealing with wsi that were created by the sequencer, they may close at any time, eg, be closed by the remote peer or an intermediary. The `LWSSEQ_WSI_CONN_CLOSE` message may have been queued but since they are strictly handled in the order they arrived, before it was handled an earlier message may want to cause some api to be called on the now-free()-d wsi. To detect this situation safely, there is a sequencer api `lws_sequencer_check_wsi()` which peeks the message buffer and returns nonzero if it later contains an `LWSSEQ_WSI_CONN_CLOSE` already. libwebsockets-3.2.1/READMEs/README.lws_struct.md000066400000000000000000000030221357643561300211760ustar00rootroot00000000000000# lws_struct ## Overview lws_struct provides a lightweight method for serializing and deserializing C structs to and from JSON, and to and from sqlite3. ![lws_struct overview](../doc-assets/lws_struct-overview.svg) - you provide a metadata array describing struct members one-time, then call generic apis to serialize and deserialize - supports flat structs, single child struct pointers, and unbounded arrays / linked-lists of child objects automatically using [lws_dll2 linked-lists](./README.lws_dll.md) - supports boolean and C types char, int, long, long long in explicitly signed and unsigned forms - supports both char * type string members where the unbounded content is separate and pointed to, and fixed length char array[] type members where the content is part of the struct - huge linear strings are supported by storing to a temp lwsac of chained chunks, which is written into a single linear chunk in the main lwsac once the total string length is known - deserialization allocates into an [lwsac](../lib/misc/lwsac/README.md), so everything is inside as few heap allocations as possible while still able to expand to handle arbitrary array or strins sizes - when deserialized structs are finished with, a single call to free the lwsac frees the whole thing without having to walk it - stateful serializaton and deserialization allows as-you-get packets incremental parsing and production of chunks of as-you-can-send incremental serialization output cleanly ## Examples libwebsockets-3.2.1/READMEs/README.lws_sul.md000066400000000000000000000041301357643561300204560ustar00rootroot00000000000000# `lws_sul` scheduler api Since v3.2 lws no longer requires periodic checking for timeouts and other events. A new system was refactored in where future events are scheduled on to a single, unified, sorted linked-list in time order, with everything at us resolution. This makes it very cheap to know when the next scheduled event is coming and restrict the poll wait to match, or for event libraries set a timer to wake at the earliest event when returning to the event loop. Everything that was checked periodically was converted to use `lws_sul` and schedule its own later event. The end result is when lws is idle, it will stay asleep in the poll wait until a network event or the next scheduled `lws_sul` event happens, which is optimal for power. # Side effect for older code If your older code uses `lws_service_fd()`, it used to be necessary to call this with a NULL pollfd periodically to indicate you wanted to let the background checks happen. `lws_sul` eliminates the whole concept of periodic checking and NULL is no longer a valid pollfd value for this and related apis. # Using `lws_sul` in user code See `minimal-http-client-multi` for an example of using the `lws_sul` scheduler from your own code; it uses it to spread out connection attempts so they are staggered in time. You must create an `lws_sorted_usec_list_t` object somewhere, eg, in you own existing object. ``` static lws_sorted_usec_list_t sul_stagger; ``` Create your own callback for the event... the argument points to the sul object used when the callback was scheduled. You can use pointer arithmetic to translate that to your own struct when the `lws_sorted_usec_list_t` was a member of the same struct. ``` static void stagger_cb(lws_sorted_usec_list_t *sul) { ... } ``` When you want to schedule the callback, use `lws_sul_schedule()`... this will call it 10ms in the future ``` lws_sul_schedule(context, 0, &sul_stagger, stagger_cb, 10 * LWS_US_PER_MS); ``` In the case you destroy your object and need to cancel the scheduled callback, use ``` lws_sul_schedule(context, 0, &sul_stagger, NULL, LWS_SET_TIMER_USEC_CANCEL); ``` libwebsockets-3.2.1/READMEs/README.lwsws.md000066400000000000000000000610711357643561300201540ustar00rootroot00000000000000Notes about lwsws ================= @section lwsws Libwebsockets Web Server lwsws is an implementation of a very lightweight, ws-capable generic web server, which uses libwebsockets to implement everything underneath. If you are basically implementing a standalone server with lws, you can avoid reinventing the wheel and use a debugged server including lws. @section lwswsb Build Just enable -DLWS_WITH_LWSWS=1 at cmake-time. It enables libuv and plugin support automatically. NOTICE on Ubuntu, the default libuv package is called "libuv-0.10". This is ancient. You should replace this with libuv1 and libuv1-dev before proceeding. @section lwswsc Lwsws Configuration lwsws uses JSON config files, they're pure JSON except: - '#' may be used to turn the rest of the line into a comment. - There's also a single substitution, if a string contains "_lws_ddir_", then that is replaced with the LWS install data directory path, eg, "/usr/share" or whatever was set when LWS was built + installed. That lets you refer to installed paths without having to change the config if your install path was different. There is a single file intended for global settings /etc/lwsws/conf ``` # these are the server global settings # stuff related to vhosts should go in one # file per vhost in ../conf.d/ { "global": { "username": "apache", "groupname": "apache", "count-threads": "1", "server-string": "myserver v1", # returned in http headers "ws-pingpong-secs": "200", # confirm idle established ws connections this often "init-ssl": "yes" } } ``` and a config directory intended to take one file per vhost /etc/lwsws/conf.d/warmcat.com ``` { "vhosts": [{ "name": "warmcat.com", "port": "443", "interface": "eth0", # optional "host-ssl-key": "/etc/pki/tls/private/warmcat.com.key", # if given enable ssl "host-ssl-cert": "/etc/pki/tls/certs/warmcat.com.crt", "host-ssl-ca": "/etc/pki/tls/certs/warmcat.com.cer", "mounts": [{ # autoserve "mountpoint": "/", "origin": "file:///var/www/warmcat.com", "default": "index.html" }] }] } ``` To get started quickly, an example config reproducing the old test server on port 7681, non-SSL is provided. To set it up ``` # mkdir -p /etc/lwsws/conf.d /var/log/lwsws # cp ./lwsws/etc-lwsws-conf-EXAMPLE /etc/lwsws/conf # cp ./lwsws/etc-lwsws-conf.d-localhost-EXAMPLE /etc/lwsws/conf.d/test-server # sudo lwsws ``` @section lwswsacme Using Letsencrypt or other ACME providers Lws supports automatic provisioning and renewal of TLS certificates. See ./READMEs/README.plugin-acme.md for examples of how to set it up on an lwsws vhost. @section lwsogo Other Global Options - `reject-service-keywords` allows you to return an HTTP error code and message of your choice if a keyword is found in the user agent ``` "reject-service-keywords": [{ "scumbot": "404 Not Found" }] ``` - `timeout-secs` lets you set the global timeout for various network-related operations in lws, in seconds. It defaults to 5. @section lwswsv Lwsws Vhosts One server can run many vhosts, where SSL is in use SNI is used to match the connection to a vhost and its vhost-specific SSL keys during SSL negotiation. Listing multiple vhosts looks something like this ``` { "vhosts": [ { "name": "localhost", "port": "443", "host-ssl-key": "/etc/pki/tls/private/libwebsockets.org.key", "host-ssl-cert": "/etc/pki/tls/certs/libwebsockets.org.crt", "host-ssl-ca": "/etc/pki/tls/certs/libwebsockets.org.cer", "mounts": [{ "mountpoint": "/", "origin": "file:///var/www/libwebsockets.org", "default": "index.html" }, { "mountpoint": "/testserver", "origin": "file:///usr/local/share/libwebsockets-test-server", "default": "test.html" }], # which protocols are enabled for this vhost, and optional # vhost-specific config options for the protocol # "ws-protocols": [{ "warmcat,timezoom": { "status": "ok" } }] }, { "name": "localhost", "port": "7681", "host-ssl-key": "/etc/pki/tls/private/libwebsockets.org.key", "host-ssl-cert": "/etc/pki/tls/certs/libwebsockets.org.crt", "host-ssl-ca": "/etc/pki/tls/certs/libwebsockets.org.cer", "mounts": [{ "mountpoint": "/", "origin": ">https://localhost" }] }, { "name": "localhost", "port": "80", "mounts": [{ "mountpoint": "/", "origin": ">https://localhost" }] } ] } ``` That sets up three vhosts all called "localhost" on ports 443 and 7681 with SSL, and port 80 without SSL but with a forced redirect to https://localhost @section lwswsvn Lwsws Vhost name and port sharing The vhost name field is used to match on incoming SNI or Host: header, so it must always be the host name used to reach the vhost externally. - Vhosts may have the same name and different ports, these will each create a listening socket on the appropriate port. - Vhosts may also have the same port and different name: these will be treated as true vhosts on one listening socket and the active vhost decided at SSL negotiation time (via SNI) or if no SSL, then after the Host: header from the client has been parsed. @section lwswspr Lwsws Protocols Vhosts by default have available the union of any initial protocols from context creation time, and any protocols exposed by plugins. Vhosts can select which plugins they want to offer and give them per-vhost settings using this syntax ``` "ws-protocols": [{ "warmcat-timezoom": { "status": "ok" } }] ``` The "x":"y" parameters like "status":"ok" are made available to the protocol during its per-vhost LWS_CALLBACK_PROTOCOL_INIT (in is a pointer to a linked list of struct lws_protocol_vhost_options containing the name and value pointers). To indicate that a protocol should be used when no Protocol: header is sent by the client, you can use "default": "1" ``` "ws-protocols": [{ "warmcat-timezoom": { "status": "ok", "default": "1" } }] ``` Similarly, if your vhost is serving a raw protocol, you can mark the protocol to be selected using "raw": "1" ``` "ws-protocols": [{ "warmcat-timezoom": { "status": "ok", "raw": "1" } }] ``` See also "apply-listen-accept" below. @section lwswsovo Lwsws Other vhost options - If the three options `host-ssl-cert`, `host-ssl-ca` and `host-ssl-key` are given, then the vhost supports SSL. Each vhost may have its own certs, SNI is used during the initial connection negotiation to figure out which certs to use by the server name it's asking for from the request DNS name. - `keeplive-timeout` (in secs) defaults to 60 for lwsws, it may be set as a vhost option - `interface` lets you specify which network interface to listen on, if not given listens on all. If the network interface is not usable (eg, ethernet cable out) it will be logged at startup with such vhost not listening, and lws will poll for it and bind a listen socket to the interface if and when it becomes available. - "`unix-socket`": "1" causes the unix socket specified in the interface option to be used instead of an INET socket - "`unix-socket-perms`": "user:group" allows you to control the unix permissons on the listening unix socket. It's always get to `0600` mode, but you can control the user and group for the socket fd at creation time. This allows you to use unix user and groups to control who may open the other end of the unix socket on the local system. - "`sts`": "1" causes lwsws to send a Strict Transport Security header with responses that informs the client he should never accept to connect to this address using http. This is needed to get the A+ security rating from SSL Labs for your server. - "`access-log`": "filepath" sets where apache-compatible access logs will be written - `"enable-client-ssl"`: `"1"` enables the vhost's client SSL context, you will need this if you plan to create client conections on the vhost that will use SSL. You don't need it if you only want http / ws client connections. - "`ciphers`": "" OPENSSL only: sets the allowed list of TLS <= 1.2 ciphers and key exchange protocols for the serving SSL_CTX on the vhost. The default list is restricted to only those providing PFS (Perfect Forward Secrecy) on the author's Fedora system. If you need to allow weaker ciphers, you can provide an alternative list here per-vhost. - "`client-ssl-ciphers`": "" OPENSSL only: sets the allowed list of <= TLS1.2 ciphers and key exchange protocols for the client SSL_CTX on the vhost - "`tls13-ciphers`": "" OPENSSL 1.1.1+ only: sets allowed list of TLS1.3+ ciphers and key exchange protocols for the client SSL_CTX on the vhost. The default is to allow all. - "`client-tls13-ciphers`": "" OPENSSL 1.1.1+ only: sets the allowed list of TLS1.3+ ciphers and key exchange protocols for the client SSL_CTX on the vhost. The default is to allow all. - "`ecdh-curve`": "" The default ecdh curve is "prime256v1", but you can override it here, per-vhost - "`noipv6`": "on" Disable ipv6 completely for this vhost - "`ipv6only`": "on" Only allow ipv6 on this vhost / "off" only allow ipv4 on this vhost - "`ssl-option-set`": "" Sets the SSL option flag value for the vhost. It may be used multiple times and OR's the flags together. The values are derived from /usr/include/openssl/ssl.h ``` # define SSL_OP_NO_TLSv1_1 0x10000000L ``` would equate to ``` "`ssl-option-set`": "268435456" ``` - "`ssl-option-clear'": "" Clears the SSL option flag value for the vhost. It may be used multiple times and OR's the flags together. - "`ssl-client-option-set`" and "`ssl-client-option-clear`" work the same way for the vhost Client SSL context - "`headers':: [{ "header1": "h1value", "header2": "h2value" }] allows you to set arbitrary headers on every file served by the vhost recommended vhost headers for good client security are ``` "headers": [{ "Content-Security-Policy": "script-src 'self'", "X-Content-Type-Options": "nosniff", "X-XSS-Protection": "1; mode=block", "X-Frame-Options": "SAMEORIGIN" }] ``` - "`apply-listen-accept`": "on" This vhost only serves a non-http protocol, specified in "listen-accept-role" and "listen-accept-protocol" @section lwswsm Lwsws Mounts Where mounts are given in the vhost definition, then directory contents may be auto-served if it matches the mountpoint. Mount protocols are used to control what kind of translation happens - file:// serve the uri using the remainder of the url past the mountpoint based on the origin directory. Eg, with this mountpoint ``` { "mountpoint": "/", "origin": "file:///var/www/mysite.com", "default": "/" } ``` The uri /file.jpg would serve /var/www/mysite.com/file.jpg, since / matched. - ^http:// or ^https:// these cause any url matching the mountpoint to issue a redirect to the origin url - cgi:// this causes any matching url to be given to the named cgi, eg ``` { "mountpoint": "/git", "origin": "cgi:///var/www/cgi-bin/cgit", "default": "/" }, { "mountpoint": "/cgit-data", "origin": "file:///usr/share/cgit", "default": "/" }, ``` would cause the url /git/myrepo to pass "myrepo" to the cgi /var/www/cgi-bin/cgit and send the results to the client. - http:// or https:// these perform reverse proxying, serving the remote origin content from the mountpoint. Eg ``` { "mountpoint": "/proxytest", "origin": "https://libwebsockets.org" } ``` This will cause your local url `/proxytest` to serve content fetched from libwebsockets.org over ssl; whether it's served from your server using ssl is unrelated and depends how you configured your local server. Notice if you will use the proxying feature, `LWS_WITH_HTTP_PROXY` is required to be enabled at cmake, and for `https` proxy origins, your lwsws configuration must include `"init-ssl": "1"` and the vhost with the proxy mount must have `"enable-client-ssl": "1"`, even if you are not using ssl to serve. `/proxytest/abc`, or `/proxytest/abc?def=ghi` etc map to the origin + the part past `/proxytest`, so links and img src urls etc work as do all urls under the origin path. In addition link and src urls in the document are rewritten so / or the origin url part are rewritten to the mountpoint part. @section lwswsomo Lwsws Other mount options 1) Some protocols may want "per-mount options" in name:value format. You can provide them using "pmo" { "mountpoint": "/stuff", "origin": "callback://myprotocol", "pmo": [{ "myname": "myvalue" }] } 2) When using a cgi:// protocol origin at a mountpoint, you may also give cgi environment variables specific to the mountpoint like this ``` { "mountpoint": "/git", "origin": "cgi:///var/www/cgi-bin/cgit", "default": "/", "cgi-env": [{ "CGIT_CONFIG": "/etc/cgitrc/libwebsockets.org" }] } ``` This allows you to customize one cgi depending on the mountpoint (and / or vhost). 3) It's also possible to set the cgi timeout (in secs) per cgi:// mount, like this ``` "cgi-timeout": "30" ``` 4) `callback://` protocol may be used when defining a mount to associate a named protocol callback with the URL namespace area. For example ``` { "mountpoint": "/formtest", "origin": "callback://protocol-post-demo" } ``` All handling of client access to /formtest[anything] will be passed to the callback registered to the protocol "protocol-post-demo". This is useful for handling POST http body content or general non-cgi http payload generation inside a plugin. See the related notes in README.coding.md 5) Cache policy of the files in the mount can also be set. If no options are given, the content is marked uncacheable. ``` { "mountpoint": "/", "origin": "file:///var/www/mysite.com", "cache-max-age": "60", # seconds "cache-reuse": "1", # allow reuse at client at all "cache-revalidate": "1", # check it with server each time "cache-intermediaries": "1" # allow intermediary caches to hold } ``` 6) You can also define a list of additional mimetypes per-mount ``` "extra-mimetypes": { ".zip": "application/zip", ".doc": "text/evil" } ``` Normally a file suffix MUST match one of the canned mimetypes or one of the extra mimetypes, or the file is not served. This adds a little bit of security because even if there is a bug somewhere and the mount dirs are circumvented, lws will not serve, eg, /etc/passwd. If you provide an extra mimetype entry "*": "" Then any file is served, if the mimetype was not known then it is served without a Content-Type: header. 7) A mount can be protected by HTTP Basic Auth. This only makes sense when using https, since otherwise the password can be sniffed. You can add a `basic-auth` entry on an http mount like this ``` { "mountpoint": "/basic-auth", "origin": "file://_lws_ddir_/libwebsockets-test-server/private", "basic-auth": "/var/www/balogins-private" } ``` Before serving anything, lws will signal to the browser that a username / password combination is required, and it will pop up a dialog. When the user has filled it in, lwsws checks the user:password string against the text file named in the `basic-auth` entry. The file should contain user:pass one per line ``` testuser:testpass myuser:hispass ``` The file should be readable by lwsws, and for a little bit of extra security not have a file suffix, so lws would reject to serve it even if it could find it on a mount. After successful authentication, `WSI_TOKEN_HTTP_AUTHORIZATION` contains the authenticated username. In the case you want to also protect being able to connect to a ws protocol on a particular vhost by requiring the http part can authenticate using Basic Auth before the ws upgrade, this is also possible. In this case, the "basic-auth": and filepath to the credentials file is passed as a pvo in the "ws-protocols" section of the vhost definition. @section lwswscc Requiring a Client Cert on a vhost You can make a vhost insist to get a client certificate from the peer before allowing the connection with ``` "client-cert-required": "1" ``` the connection will only proceed if the client certificate was signed by the same CA as the server has been told to trust. @section rawconf Configuring Fallback and Raw vhosts Lws supports some unusual modes for vhost listen sockets, which may be configured entirely using the JSON per-vhost config language in the related vhost configuration section. There are three main uses for them 1) A vhost bound to a specific role and protocol, not http. This binds all incoming connections on the vhost listen socket to the "raw-proxy" role and protocol "myprotocol". ``` "listen-accept-role": "raw-proxy", "listen-accept-protocol": "myprotocol", "apply-listen-accept": "1" ``` 2) A vhost that wants to treat noncompliant connections for http or https as belonging to a secondary fallback role and protocol. This causes non-https connections to an https listener to stop being treated as https, to lose the tls wrapper, and bind to role "raw-proxy" and protocol "myprotocol". For example, connect a browser on your external IP :443 as usual and it serves as normal, but if you have configured the raw-proxy to portforward 127.0.0.1:22, then connecting your ssh client to your external port 443 will instead proxy your sshd over :443 with no http or tls getting in the way. ``` "listen-accept-role": "raw-proxy", "listen-accept-protocol": "myprotocol", "fallback-listen-accept": "1", "allow-non-tls": "1" ``` 3) A vhost wants to either redirect stray http traffic back to https, or to actually serve http on an https listen socket (this is not recommended since it allows anyone to drop the security assurances of https by accident or design). ``` "allow-non-tls": "1", "redirect-http": "1", ``` ...or, ``` "allow-non-tls": "1", "allow-http-on-https": "1", ``` @section lwswspl Lwsws Plugins Protcols and extensions may also be provided from "plugins", these are lightweight dynamic libraries. They are scanned for at init time, and any protocols and extensions found are added to the list given at context creation time. Protocols receive init (LWS_CALLBACK_PROTOCOL_INIT) and destruction (LWS_CALLBACK_PROTOCOL_DESTROY) callbacks per-vhost, and there are arrangements they can make per-vhost allocations and get hold of the correct pointer from the wsi at the callback. This allows a protocol to choose to strictly segregate data on a per-vhost basis, and also allows the plugin to handle its own initialization and context storage. To help that happen conveniently, there are some new apis - lws_vhost_get(wsi) - lws_protocol_get(wsi) - lws_callback_on_writable_all_protocol_vhost(vhost, protocol) - lws_protocol_vh_priv_zalloc(vhost, protocol, size) - lws_protocol_vh_priv_get(vhost, protocol) dumb increment, mirror and status protocol plugins are provided as examples. @section lwswsplaplp Additional plugin search paths Packages that have their own lws plugins can install them in their own preferred dir and ask lwsws to scan there by using a config fragment like this, in its own conf.d/ file managed by the other package ``` { "global": { "plugin-dir": "/usr/local/share/coherent-timeline/plugins" } } ``` @section lwswsssp lws-server-status plugin One provided protocol can be used to monitor the server status. Enable the protocol like this on a vhost's ws-protocols section ``` "lws-server-status": { "status": "ok", "update-ms": "5000" } ``` `"update-ms"` is used to control how often updated JSON is sent on a ws link. And map the provided HTML into the vhost in the mounts section ``` { "mountpoint": "/server-status", "origin": "file:///usr/local/share/libwebsockets-test-server/server-status", "default": "server-status.html" } ``` You might choose to put it on its own vhost which has "interface": "lo", so it's not externally visible, or use the Basic Auth support to require authentication to access it. `"hide-vhosts": "{0 | 1}"` lets you control if information about your vhosts is included. Since this includes mounts, you might not want to leak that information, mount names, etc. `"filespath":"{path}"` lets you give a server filepath which is read and sent to the browser on each refresh. For example, you can provide server temperature information on most Linux systems by giving an appropriate path down /sys. This may be given multiple times. @section lwswsreload Lwsws Configuration Reload You may send lwsws a `HUP` signal, by, eg ``` $ sudo killall -HUP lwsws ``` This causes lwsws to "deprecate" the existing lwsws process, and remove and close all of its listen sockets, but otherwise allowing it to continue to run, until all of its open connections close. When a deprecated lwsws process has no open connections left, it is destroyed automatically. After sending the SIGHUP to the main lwsws process, a new lwsws process, which can pick up the newly-available listen sockets, and use the current configuration files, is automatically started. The new configuration may differ from the original one in arbitrary ways, the new context is created from scratch each time without reference to the original one. Notes 1) Protocols that provide a "shared world" like mirror will have as many "worlds" as there are lwsws processes still active. People connected to a deprecated lwsws process remain connected to the existing peers. But any new connections will apply to the new lwsws process, which does not share per-vhost "shared world" data with the deprecated process. That means no new connections on the deprecated context, ie a "shrinking world" for those guys, and a "growing world" for people who connect after the SIGHUP. 2) The new lwsws process owes nothing to the previous one. It starts with fresh plugins, fresh configuration, fresh root privileges if that how you start it. The plugins may have been updated in arbitrary ways including struct size changes etc, and lwsws or lws may also have been updated arbitrarily. 3) A root parent process is left up that is not able to do anything except respond to SIGHUP or SIGTERM. Actual serving and network listening etc happens in child processes which use the privileges set in the lwsws config files. @section lwswssysd Lwsws Integration with Systemd lwsws needs a service file like this as `/usr/lib/systemd/system/lwsws.service` ``` [Unit] Description=Libwebsockets Web Server After=syslog.target [Service] ExecStart=/usr/local/bin/lwsws ExecReload=/usr/bin/killall -s SIGHUP lwsws ; sleep 1 ; /usr/local/bin/lwsws StandardError=null [Install] WantedBy=multi-user.target ``` You can find this prepared in `./lwsws/usr-lib-systemd-system-lwsws.service` @section lwswslr Lwsws Integration with logrotate For correct operation with logrotate, `/etc/logrotate.d/lwsws` (if that's where we're putting the logs) should contain ``` /var/log/lwsws/*log { copytruncate missingok notifempty delaycompress } ``` You can find this prepared in `/lwsws/etc-logrotate.d-lwsws` Prepare the log directory like this ``` sudo mkdir /var/log/lwsws sudo chmod 700 /var/log/lwsws ``` @section lwswsgdb Debugging lwsws with gdb Hopefully you won't need to debug lwsws itself, but you may want to debug your plugins. start lwsws like this to have everything running under gdb ``` sudo gdb -ex "set follow-fork-mode child" -ex "run" --args /usr/local/bin/lwsws ``` this will give nice backtraces in lwsws itself and in plugins, if they were built with symbols. @section lwswsvgd Running lwsws under valgrind You can just run lwsws under valgrind as usual and get valid results. However the results / analysis part of valgrind runs after the plugins have removed themselves, this means valgrind backtraces into plugin code is opaque, without source-level info because the dynamic library is gone. There's a simple workaround, use LD_PRELOAD= before running lwsws, this has the loader bring the plugin in before executing lwsws as if it was a direct dependency. That means it's still mapped until the whole process exits after valgtind has done its thing. libwebsockets-3.2.1/READMEs/README.plugin-acme.md000066400000000000000000000137011357643561300211730ustar00rootroot00000000000000lws-acme-client Plugin ====================== ## Introduction lws-acme-client is a protcol plugin for libwebsockets that implements an ACME client able to communicate with let's encrypt and other certificate providers. It implements `tls-sni-01` challenge, and is able to provision tls certificates "from thin air" that are accepted by all the major browsers. It also manages re-requesting the certificate when it only has two weeks left to run. It works with both the OpenSSL and mbedTLS backends. ## Overview for use You need to: - Provide name resolution to the IP with your server, ie, myserver.com needs to resolve to the IP that hosts your server - Enable port forwarding / external firewall access to your port, usually 443 - Enable the "lws-acme-client" plugin on the vhosts you want it to manage certs for - Add per-vhost options describing what should be in the certificate After that the plugin will sort everything else out. ## Example lwsws setup ``` "vhosts": [ { "name": "home.warmcat.com", "port": "443", "host-ssl-cert": "/etc/lwsws/acme/home.warmcat.com.crt.pem", "host-ssl-key": "/etc/lwsws/acme/home.warmcat.com.key.pem", "ignore-missing-cert": "1", "access-log": "/var/log/lwsws/test-access-log", "ws-protocols": [{ "lws-acme-client": { "auth-path": "/etc/lwsws/acme/auth.jwk", "cert-path": "/etc/lwsws/acme/home.warmcat.com.crt.pem", "key-path": "/etc/lwsws/acme/home.warmcat.com.key.pem", "directory-url": "https://acme-staging.api.letsencrypt.org/directory", "country": "TW", "state": "Taipei", "locality": "Xiaobitan", "organization": "Crash Barrier Ltd", "common-name": "home.warmcat.com", "email": "andy@warmcat.com" }, ... ``` ## Required PVOs Notice that the `"host-ssl-cert"` and `"host-ssl-key"` entries have the same meaning as usual, they point to your certificate and private key. However because the ACME plugin can provision these, you should also mark the vhost with `"ignore-missing-cert" : "1"`, so lwsws will ignore what will initially be missing certificate / keys on that vhost, and will set about creating the necessary certs and keys instead of erroring out. You must make sure the directories mentioned here exist, lws doesn't create them for you. They should be 0700 root:root, even if you drop lws privileges. If you are implementing support in code, this corresponds to making sure the vhost creating `info.options` has the `LWS_SERVER_OPTION_IGNORE_MISSING_CERT` bit set. Similarly, in code, the each of the per-vhost options shown above can be provided in a linked-list of structs at vhost creation time. See `./test-apps/test-server-v2.0.c` for example code for providing pvos. ### auth-path This is where the plugin will store the auth keys it generated. ### cert-path Where the plugin will store the certificate file. Should match `host-ssl-cert` that the vhost wants to use. The path should include at least one 0700 root:root directory. ### key-path Where the plugin will store the certificate keys. Again it should match `host-ssl-key` the vhost is trying to use. The path should include at least one 0700 root:root directory. ### directory-url This defines the URL of the certification server you will get your certificates from. For let's encrypt, they have a "practice" one - `https://acme-staging.api.letsencrypt.org/directory` and they have a "real" one - `https://acme-v01.api.letsencrypt.org/directory` the main difference is the CA certificate for the real one is in most browsers already, but the staging one's CA certificate isn't. The staging server will also let you abuse it more in terms of repeated testing etc. It's recommended you confirm expected operation with the staging directory-url, and then switch to the "real" URL. ### common-name Your server DNS name, like "libwebsockets.org". The remote ACME server will use this to find your server to perform the SNI challenges. ### email The contact email address for the certificate. ## Optional PVOs These are not included in the cert by letsencrypt ### country Two-letter country code for the certificate ### state State "or province" for the certificate ### locality Locality for the certificate ### organization Your company name ## Security / Key storage considerations The `lws-acme-client` plugin is able to provision and update your certificate and keys in an entirely root-only storage environment, even though lws runs as a different uid / gid with no privileges to access the storage dir. It does this by opening and holding two WRONLY fds on "update paths" inside the root directory structure for each cert and key it manages; these are the normal cert and key paths with `.upd` appended. If during the time the server is up the certs become within two weeks of expiry, the `lws-acme-client` plugin will negotiate new certs and write them to the file descriptors. Next time the server starts, if it sees `.upd` cert and keys, it will back up the old ones and copy them into place as the new ones, before dropping privs. To also handle the long-uptime server case, lws will update the vhost with the new certs using in-memory temporary copies of the cert and key after updating the cert. In this way the cert and key live in root-only storage but the vhost is kept up to date dynamically with any cert changes as well. ## Multiple vhosts using same cert In the case you have multiple vhosts using of the same cert, just attach the `lws-acme-client` plugin to one instance. When the cert updates, all the vhosts are informed and vhosts using the same filepath to access the cert will be able to update their cert. ## Implementation point You will need to remove the auth keys when switching from OpenSSL to mbedTLS. They will be regenerated automatically. It's the file at this path: ``` "auth-path": "/etc/lwsws/acme/auth.jwk", ``` libwebsockets-3.2.1/READMEs/README.plugin-sshd-base.md000066400000000000000000000177411357643561300221470ustar00rootroot00000000000000ssh-base Plugin ================ ## Introduction lws-ssh-base is a protcol plugin for libwebsockets that implements a generic, abstract, ssh server. - very small footprint in code and memory, takes up small part of ESP32 - written with security in mind: valgrind and Coverity -clean - binds to one or more vhosts, that controls listen port(s) - all IO and settings abstracted through a single "ops" struct from user code - each instance on a vhost has its own "ops" struct, defining server keys, auth method and functions to implement IO and other operations - The plugin has no built-in behaviours like check ~/.ssh/authorized_keys, treat auth usernames as system usernames, or spawn the user's shell. Everything potentially dangerous is left to the user ops code to decide how to handle. It's NOT like sshd where running it implies it will accept existing keys for any system user, will spawn a shell, etc, unless you implement those parts in the ops callbacks. - The plugin requires extra code around it in the form of the ops struct handlers. So it's role is something like an abstract base class for an ssh server. All the crypto, protocol sequencing and state machine are inside, but all the IO except the network connection is outside. - Built as part of libwebsockets, like all plugins may be dynamically loaded at runtime or built statically. Test app `libwebsockets-test-sshd` provided - Uses hash and RSA functions from either mbedTLS or OpenSSL automatically, according to which library libwebsockets was built for To maintain its small size, it implements a single "best of breed" crypto for the following functions: |Function|Crypto| |---|---| |KEX|curve25519-sha256@libssh.org| |Server host key|ssh-rsa (4096b)| |Encryption|chacha20-poly1305@openssh.com| |Compression|None| ## License lws-ssh-base is Free Software, available under libwebsocket's LGPLv2 + static linking exception license. The crypto parts are available elsewhere under a BSD license. But for simplicity the whole plugin is under LGPLv2. ## Generating your own keys ``` $ ssh-keygen -t rsa -b 4096 -f mykeys ``` will ask for a passphrase and generate the private key in `mykeys` and the public key in `mykeys.pub`. If you already have a suitable RSA key you use with ssh, you can just use that directly. lws installs a test keypair in /usr[/local]/share/libwebsockets-test-server that the test apps will accept. ## Example code 1) There's a working example app `libwebsockets-test-sshd` included that spawns a bash shell when an ssh client authenticates. The username used on the remote ssh has no meaning, it spawns the shell under the credentials of "lws-test-sshd" was run under. It accepts the lws ssh test key which is installed into /usr[/local]/share/libwebsockets-test-server. Start the server like this (it wants root only because the server key is stored in /etc) ``` $ sudo libwebsockets-test-sshd ``` Connect to it using the test private key like this ``` $ ssh -p 2200 -i /usr/local/share/libwebsockets-test-server/lws-ssh-test-keys anyuser@127.0.0.1 ``` 2) There's also a working example plugin `lws-sshd-demo` that "subclasses" the abstract `lws-ssh-base` plugin to make a protocol which can be used from, eg, lwsws. For an lwsws vhost that listens on port 2222 and responds with the lws-sshd-demo ssh server, the related config is: ``` { "name": "sshd", "port": "2222", "onlyraw": "1", "ws-protocols": [{ "lws-ssh-base": { "status": "ok", "ops-from": "lws-sshd-demo" }, "lws-sshd-demo": { "status": "ok", "raw": "1" } }] } ``` ## Integration to other apps ### Step 0: Build and install libwebsockets For the `libwebsockets-test-sshd` example, you will need CMake options `LWS_WITH_CGI`, since it uses lws helpers to spawn a shell. lws-ssh-base itself doesn't require CGI support in libwebsockets. ### Step 1: make the code available in your app Include `lws-plugin-ssh-base` in your app, either as a runtime plugin or by using the lws static include scheme. To bring in the whole of the ssh-base plugin into your app in one step, statically, just include `plugins/ssh-base/include/lws-plugin-sshd-static-build-includes.h`, you can see an example of this in `./test-apps/test-sshd.c`. ### Step 2: define your `struct lws_ssh_ops` `plugins/ssh-base/include/lws-plugin-ssh.h` defines `struct lws_ssh_ops` which is used for all customization and integration of the plugin per vhost. Eg, ``` static const struct lws_ssh_ops ssh_ops = { .channel_create = ssh_ops_channel_create, .channel_destroy = ssh_ops_channel_destroy, .tx_waiting = ssh_ops_tx_waiting, .tx = ssh_ops_tx, .rx = ssh_ops_rx, .get_server_key = ssh_ops_get_server_key, .set_server_key = ssh_ops_set_server_key, .set_env = ssh_ops_set_env, .pty_req = ssh_ops_pty_req, .child_process_io = ssh_ops_child_process_io, .child_process_terminated = ssh_ops_child_process_terminated, .exec = ssh_ops_exec, .shell = ssh_ops_shell, .is_pubkey_authorized = ssh_ops_is_pubkey_authorized, .banner = ssh_ops_banner, .disconnect_reason = ssh_ops_disconnect_reason, .server_string = "SSH-2.0-Libwebsockets", .api_version = 1, }; ``` The `ssh_ops_...()` functions are your implementations for the operations needed by the plugin for your purposes. ### Step 3: enable `lws-ssh-base` protocol to a vhost and configure using pvo A pointer to your struct lws_ssh_ops is passed into the vhost instance of the protocol using per-vhost options ``` static const struct lws_protocol_vhost_options pvo_ssh_ops = { NULL, NULL, "ops", (void *)&ssh_ops }; static const struct lws_protocol_vhost_options pvo_ssh = { NULL, &pvo_ssh_ops, "lws-sshd-base", "" /* ignored, just matches the protocol name above */ }; ... info.port = 22; info.options = LWS_SERVER_OPTION_ONLY_RAW; info.vhost_name = "sshd"; info.protocols = protocols_sshd; info.pvo = &pvo_ssh; vh_sshd = lws_create_vhost(context, &info); ``` There are two possible pvos supported, "ops", shown above, directly passes the ops structure in using the value on the "ops" pvo. To support other protocols that want to provide ops to lws-ssh-base themselves for a particular vhost, you can also provide a pvo `"ops-from"` whose value is the name of the protocol also enabled on this vhost, whose protocol ".user" pointer points to the ops struct lws-ssh-base should use. ## Integration to other plugins A worked example of using the abstract `lws-ssh-base` plugin from another plugin that provides the ops struct is in `./plugins/protocol_lws_sshd_demo`. The key points to note - the plugin sets the ops struct for the vhost instantiation of `lws-ssh-base` by passing a pointer to the ops struct in its `lws_protocols` struct `user` member. - the config for the vhost tells `lws-ssh-base` to pick up the ops struct pointer using an "ops-from" pvo that indicates the protocol name. ``` "lws-ssh-base": { "status": "ok", "ops-from": "lws-sshd-demo" }, ``` - the config for the vhost tells lws this vhost only serves RAW (ie, no http) ``` { "name": "sshd", "port": "2222", "onlyraw": "1", ... ``` - the config for the vhost marks the protocol that uses `lws-ssh-base`, not `lws-ssh-base` itself, as the protocol to be served for raw connections ``` "lws-sshd-demo": { "status": "ok", "raw": "1" ... ``` ## Notes You can have the vhost it binds to listen on a nonstandard port. The ssh commandline app cane be told to connect to a non-22 port with `ssh -p portnum user@hostname` libwebsockets-3.2.1/READMEs/README.porting.md000066400000000000000000000041401357643561300204510ustar00rootroot00000000000000# Guidance for porting to new platform Where differences existed between the initial POSIX platform for lws and other supported platforms like Windows, `lws_plat_...()` apis were added to move handling to platform-specific code in `./lib/plat/`. Depending o which platform is built, different platform-specific implementations of these `lws_plat...()` apis get built. ## 1) Prepare the cmake cross-build file if necessary CMake isolates its settings for cross-build into a separate file, which can be used to different cmake projects for the same platform as well. Find a similar examples already in `./contrib/cross-*` and copy and adapt it as needed, All settings related to toolchain should go in there. For cross-toolchain, the convention is to pass the path to its installed directory in `CROSS_PATH` environment variable. ## 2) Copy the closest platform dir in ./lib/plat Wholesale copy the closest existing platform dir to `/lib/plat/myplatform` and rename the files. Remove stuff specific to the original platform. ## 3) Add a flag in CMakeLists.txt Cut and paste a flag to select your platform, preferably `LWS_PLAT_MYPLATFORM` or so ## 4) Add a section to force-select and deselect other cmake options based on platform flag Some options on by default may not make sense on your platform, and others off by default may be mandatory. After the options() section in CMakeLists.txt, you can use this kind of structure ``` if (LWS_PLAT_MYPLATFORM) set(LWS_WITH_XXXX 0) endif() ``` to enforce implicit requirements of your platform. Optional stuff should be set by running cmake commandline as usual. ## 5) Add building your platform files into CMakeLists.txt Add entries in CMakeLists.txt for building stuff in `./lib/plat/myplatform` when `LWS_PLAT_MYPLATFORM` is enabled. ## 6) Adapt your copied ./lib/plat/myplatform/ files You can now do test builds using the cross-build file, your platform flag in cmake, and your copied ./lib/plat content... this last part since it was copied from another platform will initially be a plentiful source of errors. You can iteratively build and adapt the platform files. libwebsockets-3.2.1/READMEs/README.problems.md000066400000000000000000000057311357643561300206210ustar00rootroot00000000000000Debugging problems ================== Check it's still a problem with latest lws ------------------------------------------ Older versions of lws don't attract any new work after they are released (see [the release policy](https://libwebsockets.org/git/libwebsockets/tree/READMEs/README.release-policy.md) for details); for a while they will get backported bugfixes but that's it. All new work and bugfixes happen on master branch. Old, old versions may be convenient for you to use for some reason. But unless you pay for support or have contributed work to lws so we feel we owe you some consideration, nobody else has any reason to particularly care about solving issues on ancient versions. Whereas if the problem exists on master, and can be reproduced by developers, it usually gets attention, often immediately. If the problem doesn't exist on master, you can either use master or check also the -stable branch of the last released version to see if it was already solved there. Library is a component ---------------------- As a library, lws is always just a component in a bigger application. When users have a problem involving lws, what is happening in the bigger application is usually critical to understand what is going on (and where the solution lies). Sometimes access to the remote peer like server or client is also necessary to provoke the symptom. Sometimes, the problem is in lws, but sometimes the problem is not in lws but in these other pieces. Many users are able to share their sources, but others decide not to, for presumed "commercial advantage" or whatever. (In any event, it can be painful looking through large chunks of someone else's sources for problems when that is not the library author's responsibility.) This makes answering questions like "what is wrong with my code I am not going to show you?" or even "what is wrong with my code?" very difficult. Even if it's clear there is a problem somewhere, it cannot be understood or reproduced by anyone else if it needs user code that isn't provided. The biggest question is, "is this an lws problem actually"? To solve that the best solution is to strip out all or as much user code as possible, and see if the problem is still coming. Use the test apps / minimal examples as sanity checks ----------------------------------------------------- The test server and client, and any more specifically relevant minimal example are extremely useful for sanity checks and debugging guidance. - **test apps work on your platform**, then either - your user code is broken, align it to how the test apps work, or, - something from your code is required to show an lws problem, provide a minimal patch on a test app so it can be reproduced - **test apps break on your platform**, but work on, eg, x86_64, either - toolchain or platform-specific (eg, OS) issue, or - lws platform support issue - **test apps break everywhere** - sounds like lws problem, info to reproduce and / or a patch is appreciated libwebsockets-3.2.1/READMEs/README.release-policy.md000066400000000000000000000070341357643561300217110ustar00rootroot00000000000000# lws release policy ## Master branch Master branch is the default and all new work happens there. It's unstable and subject to history rewrites, patches moving about and being squashed etc. In terms of it working, it is subject to passing CI tests including a battery of runtime tests, so if it is passing CI as it usually is then it's probably in usable shape. ![all work happens on master](../doc-assets/lws-relpol-1.svg) If you have patches (you are a hero) they should be targeted at master. To follow such a branch, `git pull` is the wrong tool... the starting point of what you currently have may no longer exist remotely due to rearranging the patches there. Instead use a flow like this: ``` $ git fetch https://libwebsockets.org/repo/libwebsockets +master:m && git reset --hard m ``` This fetches current remote master into local branch `m`, and then forces your local checkout to exactly match `m`. This replaces your checked-out tree including any of your local changes, so stash those first, or use stgit or so to pop them before updating your basis against lws master. ## Stable branches Master is very useful for coordinating development, and integrating WIP, but for distros or integration into large user projects some stability is often more desirable than the latest development work. Periodically, when master seems in good shape and various new developments seem to be working, it's copied out into a versioned stable branch, like `v3.0-stable`. ![stable branches are copied from master](../doc-assets/lws-relpol-2.svg) The initial copy is tagged with, eg, `v3.0.0`. (At that time, master's logical version is set to "...99", eg, `v3.0.99` so version comparisons show that version of master is "later" than any other v3.0 version, which will never reach 99 point releases itself, but "earlier" than, eg, v3.1.) ## Backport policy Work continues on master, and as part of that usually bugs are reported and / or fixes found that may apply not just to current master, but the version of master that was copied to form the last -stable branch. In that case, the patch may be backported to the last stable branch to also fix the bug there. In the case of refactors or major internal improvements, these typically do not get backported. This applies only to fixes and public API-neutral internal changes to lws... if new features were backported or API changes allowed, then there would be multiple apis under the same version name and library soname, which is madness. When new stable releases are made, the soname is bumped reflecting the API is different than that of previous versions. ![backports from master to stable](../doc-assets/lws-relpol-3.svg) If there is something you need in a later lws version that is not backported, you need to either backport it yourself (remember that lws is LGPL and you must provide your changes when you distribute the binary) or use a later lws version. Using a more recent version of lws is almost always the correct way. ## Stable point releases Periodically fix patches pile up on the -stable branch and are tagged out as "point releases". So if the original stable release was "v3.0.0", the point release may be "v3.0.1". ![point releases of stable](../doc-assets/lws-relpol-4.svg) ## Critical fixes Sometimes a bug is found and fixed that had been hiding for a few versions. If the bug has some security dimension or is otherwise important, we may backport it to a few recent releases, not just the last one. This is pretty uncommon though. ![backport to multiple stable branches](../doc-assets/lws-relpol-5.svg) libwebsockets-3.2.1/READMEs/README.test-apps.md000066400000000000000000000350401357643561300207120ustar00rootroot00000000000000Overview of lws test apps ========================= Are you building a client? You just need to look at the test client [libwebsockets-test-client](../test-apps/test-client.c). If you are building a standalone server, there are three choices, in order of preferability. 1) lwsws + protocol plugins Lws provides a generic web server app that can be configured with JSON config files. https://libwebsockets.org itself uses this method. With lwsws handling the serving part, you only need to write an lws protocol plugin. See [plugin-standalone](../plugin-standalone) for an example of how to do that outside lws itself, using lws public apis. $ cmake .. -DLWS_WITH_LWSWS=1 See [README.lwsws.md](../READMEs/README.lwsws.md) for information on how to configure lwsws. NOTE this method implies libuv is used by lws, to provide crossplatform implementations of timers, dynamic lib loading etc for plugins and lwsws. 2) test-server-v2.0.c This method lets you configure web serving in code, instead of using lwsws. Plugins are still used, but you have a choice whether to dynamically load them or statically include them. In this example, they are dynamically loaded. $ cmake .. -DLWS_WITH_PLUGINS=1 See [test-server-v2.0.c](../test-apps/test-server-v2.0.c) 3) protocols in the server app This is the original way lws implemented servers, plugins and libuv are not required, but without plugins separating the protocol code directly, the combined code is all squidged together and is much less maintainable. This method is still supported in lws but all ongoing and future work is being done in protocol plugins only. You can simply include the plugin contents and have it buit statically into your server, just define this before including the plugin source ``` #define LWS_PLUGIN_STATIC ``` This gets you most of the advantages without needing dynamic loading + libuv. Notes about lws test apps ========================= @section tsb Testing server with a browser If you run [libwebsockets-test-server](../test-apps/test-server.c) and point your browser (eg, Chrome) to http://127.0.0.1:7681 It will fetch a script in the form of `test.html`, and then run the script in there on the browser to open a websocket connection. Incrementing numbers should appear in the browser display. By default the test server logs to both stderr and syslog, you can control what is logged using `-d `, see later. @section tsd Running test server as a Daemon You can use the -D option on the test server to have it fork into the background and return immediately. In this daemonized mode all stderr is disabled and logging goes only to syslog, eg, `/var/log/messages` or similar. The server maintains a lockfile at `/tmp/.lwsts-lock` that contains the pid of the master process, and deletes this file when the master process terminates. To stop the daemon, do ``` $ kill \`cat /tmp/.lwsts-lock\` ``` If it finds a stale lock (the pid mentioned in the file does not exist any more) it will delete the lock and create a new one during startup. If the lock is valid, the daemon will exit with a note on stderr that it was already running. @section clicert Testing Client Certs Here is a very quick way to create a CA, and a client and server cert from it, for testing. ``` $ cp -rp ./scripts/client-ca /tmp $ cd /tmp/client-ca $ ./create-ca.sh $ ./create-server-cert.sh server $ ./create-client-cert.sh client ``` The last step wants an export password, you will need this password again to import the p12 format certificate into your browser. This will get you the following |name|function| |----|--------| |ca.pem|Your Certificate Authority cert| |ca.key|Private key for the CA cert| |client.pem|Client certificate, signed by your CA| |client.key|Client private key| |client.p12|combined client.pem + client.key in p12 format for browsers| |server.pem|Server cert, signed by your CA| |server.key|Server private key| You can confirm yourself the client and server certs are signed by the CA. ``` $ openssl verify -verbose -trusted ca.pem server.pem $ openssl verify -verbose -trusted ca.pem client.pem ``` Import the client.p12 file into your browser. In FFOX57 it's - preferences - Privacy & Security - Certificates | View Certificates - Certificate Manager | Your Certificates | Import... - Enter the password you gave when creating client1.p12 - Click OK. You can then run the test server like this: ``` $ libwebsockets-test-server -s -A ca.pem -K server.key -C server.pem -v ``` When you connect your browser to https://localhost:7681 after accepting the selfsigned server cert, your browser will pop up a prompt to send the server your client cert (the -v switch enables this). The server will only accept a client cert that has been signed by ca.pem. @section sssl Using SSL on the server side To test it using SSL/WSS, just run the test server with ``` $ libwebsockets-test-server --ssl ``` and use the URL ``` https://127.0.0.1:7681 ``` The connection will be entirely encrypted using some generated certificates that your browser will not accept, since they are not signed by any real Certificate Authority. Just accept the certificates in the browser and the connection will proceed in first https and then websocket wss, acting exactly the same. [test-server.c](../test-apps/test-server.c) is all that is needed to use libwebsockets for serving both the script html over http and websockets. @section lwstsdynvhost Dynamic Vhosts You can send libwebsockets-test-server or libwebsockets-test-server-v2.0 a SIGUSR1 to toggle the creation and destruction of an identical second vhost on port + 1. This is intended as a test and demonstration for how to bring up and remove vhosts dynamically. @section unixskt Testing Unix Socket Server support Start the test server with -U and the path to create the unix domain socket ``` $ libwebsockets-test-server -U /tmp/uds ``` On exit, lws will delete the socket inode. To test the client side, eg ``` $ nc -C -U /tmp/uds -i 30 ``` and type `GET / HTTP/1.1` followed by two ENTER. The contents of test.html should be returned. @section wscl Testing websocket client support If you run the test server as described above, you can also connect to it using the test client as well as a browser. ``` $ libwebsockets-test-client localhost ``` will by default connect to the test server on localhost:7681 and print the dumb increment number from the server at the same time as drawing random circles in the mirror protocol; if you connect to the test server using a browser at the same time you will be able to see the circles being drawn. The test client supports SSL too, use ``` $ libwebsockets-test-client localhost --ssl -s ``` the -s tells it to accept the default self-signed cert from the server, otherwise it will strictly fail the connection if there is no CA cert to validate the server's certificate. @section choosingts Choosing between test server variations If you will be doing standalone serving with lws, ideally you should avoid making your own server at all, and use lwsws with your own protocol plugins. The second best option is follow test-server-v2.0.c, which uses a mount to autoserve a directory, and lws protocol plugins for ws, without needing any user callback code (other than what's needed in the protocol plugin). For those two options libuv is needed to support the protocol plugins, if that's not possible then the other variations with their own protocol code should be considered. @section tassl Testing SSL on the client side To test SSL/WSS client action, just run the client test with ``` $ libwebsockets-test-client localhost --ssl ``` By default the client test applet is set to accept self-signed certificates used by the test server, this is indicated by the `use_ssl` var being set to `2`. Set it to `1` to reject any server certificate that it doesn't have a trusted CA cert for. @section taping Using the websocket ping utility libwebsockets-test-ping connects as a client to a remote websocket server and pings it like the normal unix ping utility. ``` $ libwebsockets-test-ping localhost handshake OK for protocol lws-mirror-protocol Websocket PING localhost.localdomain (127.0.0.1) 64 bytes of data. 64 bytes from localhost: req=1 time=0.1ms 64 bytes from localhost: req=2 time=0.1ms 64 bytes from localhost: req=3 time=0.1ms 64 bytes from localhost: req=4 time=0.2ms 64 bytes from localhost: req=5 time=0.1ms 64 bytes from localhost: req=6 time=0.2ms 64 bytes from localhost: req=7 time=0.2ms 64 bytes from localhost: req=8 time=0.1ms ^C --- localhost.localdomain websocket ping statistics --- 8 packets transmitted, 8 received, 0% packet loss, time 7458ms rtt min/avg/max = 0.110/0.185/0.218 ms $ ``` By default it sends 64 byte payload packets using the 04 PING packet opcode type. You can change the payload size using the `-s=` flag, up to a maximum of 125 mandated by the 04 standard. Using the lws-mirror protocol that is provided by the test server, libwebsockets-test-ping can also use larger payload sizes up to 4096 is BINARY packets; lws-mirror will copy them back to the client and they appear as a PONG. Use the `-m` flag to select this operation. The default interval between pings is 1s, you can use the -i= flag to set this, including fractions like `-i=0.01` for 10ms interval. Before you can even use the PING opcode that is part of the standard, you must complete a handshake with a specified protocol. By default lws-mirror-protocol is used which is supported by the test server. But if you are using it on another server, you can specify the protocol to handshake with by `--protocol=protocolname` @section ta fraggle Fraggle test app By default it runs in server mode ``` $ libwebsockets-test-fraggle libwebsockets test fraggle (C) Copyright 2010-2011 Andy Green licensed under LGPL2.1 Compiled with SSL support, not using it Listening on port 7681 server sees client connect accepted v06 connection Spamming 360 random fragments Spamming session over, len = 371913. sum = 0x2D3C0AE Spamming 895 random fragments Spamming session over, len = 875970. sum = 0x6A74DA1 ... ``` You need to run a second session in client mode, you have to give the `-c` switch and the server address at least: ``` $ libwebsockets-test-fraggle -c localhost libwebsockets test fraggle (C) Copyright 2010-2011 Andy Green licensed under LGPL2.1 Client mode Connecting to localhost:7681 denied deflate-stream extension handshake OK for protocol fraggle-protocol client connects to server EOM received 371913 correctly from 360 fragments EOM received 875970 correctly from 895 fragments EOM received 247140 correctly from 258 fragments EOM received 695451 correctly from 692 fragments ... ``` The fraggle test sends a random number up to 1024 fragmented websocket frames each of a random size between 1 and 2001 bytes in a single message, then sends a checksum and starts sending a new randomly sized and fragmented message. The fraggle test client receives the same message fragments and computes the same checksum using websocket framing to see when the message has ended. It then accepts the server checksum message and compares that to its checksum. @section taproxy proxy support The http_proxy environment variable is respected by the client connection code for both `ws://` and `wss://`. It doesn't support authentication. You use it like this ``` $ export http_proxy=myproxy.com:3128 $ libwebsockets-test-client someserver.com ``` @section talog debug logging By default logging of severity "notice", "warn" or "err" is enabled to stderr. Again by default other logging is compiled in but disabled from printing. By default debug logs below "notice" in severity are not compiled in. To get them included, add this option in CMAKE ``` $ cmake .. -DCMAKE_BUILD_TYPE=DEBUG ``` If you want to see more detailed debug logs, you can control a bitfield to select which logs types may print using the `lws_set_log_level()` api, in the test apps you can use `-d ` to control this. The types of logging available are (OR together the numbers to select multiple) - 1 ERR - 2 WARN - 4 NOTICE - 8 INFO - 16 DEBUG - 32 PARSER - 64 HEADER - 128 EXTENSION - 256 CLIENT - 512 LATENCY @section ws13 Websocket version supported The final IETF standard is supported for both client and server, protocol version 13. @section latency Latency Tracking Since libwebsockets runs using `poll()` and a single threaded approach, any unexpected latency coming from system calls would be bad news. There's now a latency tracking scheme that can be built in with `-DLWS_WITH_LATENCY=1` at cmake, logging the time taken for system calls to complete and if the whole action did complete that time or was deferred. You can see the detailed data by enabling logging level 512 (eg, `-d 519` on the test server to see that and the usual logs), however even without that the "worst" latency is kept and reported to the logs with NOTICE severity when the context is destroyed. Some care is needed interpreting them, if the action completed the first figure (in us) is the time taken for the whole action, which may have retried through the poll loop many times and will depend on network roundtrip times. High figures here don't indicate a problem. The figure in us reported after "lat" in the logging is the time taken by this particular attempt. High figures here may indicate a problem, or if you system is loaded with another app at that time, such as the browser, it may simply indicate the OS gave preferential treatment to the other app during that call. @section autobahn Autobahn Test Suite Lws can be tested against the autobahn websocket fuzzer in both client and server modes 1) pip install autobahntestsuite 2) From your build dir: ``` $ cmake .. -DLWS_WITHOUT_EXTENSIONS=0 -DLWS_WITH_MINIMAL_EXAMPLES=1 && make ``` 3) ../scripts/autobahn-test.sh 4) In a browser go to the directory you ran wstest in (eg, /projects/libwebsockets) file:///projects/libwebsockets/build/reports/clients/index.html to see the results @section autobahnnotes Autobahn Test Notes 1) Two of the tests make no sense for Libwebsockets to support and we fail them. - Tests 2.10 + 2.11: sends multiple pings on one connection. Lws policy is to only allow one active ping in flight on each connection, the rest are dropped. The autobahn test itself admits this is not part of the standard, just someone's random opinion about how they think a ws server should act. So we will fail this by design and it is no problem about RFC6455 compliance. 2) Currently two parts of autobahn are broken and we skip them https://github.com/crossbario/autobahn-testsuite/issues/71 libwebsockets-3.2.1/READMEs/README.unix-domain-reverse-proxy.md000066400000000000000000000107161357643561300240550ustar00rootroot00000000000000## Unix Domain Sockets Reverse Proxy ### Introduction lws is able to use a mount to place reverse proxies into the URL space. These are particularly useful when using Unix Domain Sockets, basically files in the server filesystem, to communicate between lws and a separate server process and integrate the result into a coherent URL namespace on the lws side. It's also possible to proxy using tcp sockets. ![overview](../doc-assets/http-proxy-overview.svg) This has the advantage that the actual web server that forwards the data from the unix socket owner is in a different process than the server that serves on the unix socket. If it has problems, they do not affect the actual public-facing web server. The unix domain socket server may be in a completely different language than the web server. Compared to CGI, there are no forks to make a connection to the unix domain socket server. ### Mount origin format Unix Domain Sockets are effectively "files" in the server filesystem, and are defined by their filepath. The "server" side that is to be proxied opens the socket and listens on it, which creates a file in the server filesystem. The socket understands either http or https protocol. Lws can be told to act as a proxy for that at a mountpoint in the lws vhost url space. If your mount is expressed in C code, then the mount type is LWSMPRO_HTTP or LWSMPRO_HTTPS depending on the protocol the unix socket understands, and the origin address has the form `+/path/to/unix/socket:/path/inside/mount`. The + at the start indicates it is a local unix socket we are proxying, and the ':' acts as a delimiter for the socket path, since unlike other addresses the unix socket path can contain '/' itself. ### Connectivity rules and translations Onward proxy connections from lws to the Unix Domain Socket happen using http/1.1. That implies `transfer-encoding: chunking` in the case that the length of the output is not known beforehand. Lws takes care of stripping any chunking (which is illegal in h2) and translating between h1 and h2 header formats if the return connection is actually in http/2. The h1 onward proxy connection translates the following headers from the return connection, which may be h1 or h2: Header|Function ---|--- host|Which vhost etag|Information on any etag the client has cached for this URI if-modified-since|Information on the freshness of any etag the client has cached for this URI accept-language|Which languages the return path client prefers accept-encoding|Which compression encodings the client can accept cache-control|Information from the return path client about cache acceptability x-forwarded-for|The IP address of the return path client This implies that the proxied connection can - return 301 etc to say the return path client's etag is still valid - choose to compress using an acceptable content-encoding The following headers are translated from the headers replied via the onward connection (always h1) back to the return path (which may be h1 or h2) Header|Function ---|--- content-length|If present, an assertion of how much payload is expected content-type|The mimetype of the payload etag|The canonical etag for the content at this URI accept-language|This is returned to the return path client because there is no easy way for the return path client to know what it sent originally. It allows clientside selection of i18n. content-encoding|Any compression format on the payload (selected from what the client sent in accept-encoding, if anything) cache-control|The onward server's response about cacheability of its payload ### h1 -> h2 conversion Chunked encoding that may have been used on the outgoing proxy client connection is removed for h2 return connections (chunked encoding is illegal for h2). Headers are converted to all lower-case and hpack format for h2 return connections. Header and payload proxying is staged according to when the return connection (which may be an h2 child stream) is writable. ### Behaviour if unix domain socket server unavailable If the server that listens on the unix domain socket is down or being restarted, lws understands that it couldn't connect to it and returns a clean 503 response `HTTP_STATUS_SERVICE_UNAVAILABLE` along with a brief human-readable explanation. The generated status page produced will try to bring in a stylesheet `/error.css`. This allows you to produce a styled error pages with logos, graphics etc. See [this](https://libwebsockets.org/git/badrepo) for an example of what you can do with it. libwebsockets-3.2.1/READMEs/README.vulnerability-reporting.md000066400000000000000000000005211357643561300236660ustar00rootroot00000000000000## Vulnerability Reporting If you become aware of an issue with lws that has a security dimension for users, please contact `andy@warmcat.com` by direct email. ## Procedure for announcing vulnerability fixes The problem and fixed versions will be announced on the libwebsockets mailing list and a note added to the master README.md. libwebsockets-3.2.1/READMEs/mainpage.md000066400000000000000000000017611357643561300176220ustar00rootroot00000000000000##Libwebsockets API introduction Libwebsockets covers a lot of interesting features for people making embedded servers or clients - HTTP(S) serving and client operation - HTTP/2 support for serving and client operation - WS(S) serving and client operation - HTTP(S) apis for file transfer and upload - HTTP 1 + 2 POST form handling (including multipart / file upload) - cookie-based sessions - account management (including registration, email verification, lost pw etc) - strong SSL / TLS PFS support (A+ on SSLlabs test) - ssh server integration - serving gzipped files directly from inside zip files, without conversion - support for linux, bsd, windows etc... and very small nonlinux targets like ESP32 Please note you just need in include libwebsockets.h. It includes all the individual includes in /usr/include/libwebsockets/ itself. You can browse by api category here A collection of READMEs for build, coding, lwsws etc are here libwebsockets-3.2.1/READMEs/release-checklist000066400000000000000000000027031357643561300210260ustar00rootroot00000000000000Release Checklist ----------------- 1) non-CI QA a) valgrind test servers + client + browser 2) soname bump? a) We need one if we added / changed / removed apis - CMakeLists.txt set(SOVERSION "6") - scripts/libwebsockets.spec -/%{_libdir}/libwebsockets.so.6 +/%{_libdir}/libwebsockets.so.7 3) changelog a) Add next version tag header. b) Classify as - NEW - CHANGE - REMOVE 4) main version bump - CMakeLists.txt set(CPACK_PACKAGE_VERSION_MAJOR "1") set(CPACK_PACKAGE_VERSION_MINOR "6") set(CPACK_PACKAGE_VERSION_PATCH "0") 5) specfile a) rpm version bump to match CMake one scripts/libwebsockets.spec Version: 1.6.0 b) Summarize changelog scripts/libwebsockets.spec %changelog * Sun Jan 17 2016 Andrew Cooks 1.6.4-1 - Bump version to 1.6.4 - MINOR fix xyz c) Use -DLWS_WITH_DISTRO_RECOMMENDED=1 then make package and adapt the .spec to match the file list 6) Announce latest version on README.md 7) Make sure all new READMEs and public headers are in libwebsockets.dox 8) signed tag git tag -s vX.Y[.Z] 9) git a) push b) final CI check, if fail delete tag, kill pushed tags, restart flow 10) website a) update latest tag for release branch 11) post-relase version bump Bump the PATCH part of the version to 99 -set(CPACK_PACKAGE_VERSION_PATCH "0") +set(CPACK_PACKAGE_VERSION_PATCH "99") to reflect it's newer than any stable release but not a new version yet. libwebsockets-3.2.1/appveyor.yml000066400000000000000000000060031357643561300167610ustar00rootroot00000000000000environment: matrix: - LWS_METHOD: jose CMAKE_ARGS: -DLWS_WITH_JOSE=1 - LWS_METHOD: x64 CMAKE_ARGS: -DCMAKE_GENERATOR_PLATFORM=x64 -DLWS_WITH_HTTP2=1 -DLWS_WITH_PLUGINS=1 -DLIBUV_INCLUDE_DIRS=C:\assets\libuv64\include -DLIBUV_LIBRARIES=C:\assets\libuv64\libuv.lib - LWS_METHOD: lwsws CMAKE_ARGS: -DLWS_WITH_LWSWS=1 -DSQLITE3_INCLUDE_DIRS=C:\assets\sqlite3 -DSQLITE3_LIBRARIES=C:\assets\sqlite3\sqlite3.lib -DLIBUV_INCLUDE_DIRS=C:\assets\libuv\include -DLIBUV_LIBRARIES=C:\assets\libuv\libuv.lib - LWS_METHOD: default - LWS_METHOD: noserver CMAKE_ARGS: -DLWS_WITHOUT_SERVER=ON - LWS_METHOD: noclient CMAKE_ARGS: -DLWS_WITHOUT_CLIENT=ON - LWS_METHOD: noext CMAKE_ARGS: -DLWS_WITHOUT_EXTENSIONS=ON - LWS_METHOD: nossl CMAKE_ARGS: -DLWS_WITH_SSL=OFF install: - appveyor DownloadFile https://libwebsockets.org:444/win-libuv.zip - mkdir c:\assets - mkdir c:\assets\libuv - 7z x -oc:\assets\libuv win-libuv.zip - appveyor DownloadFile https://libwebsockets.org:444/win-libuv64.zip - mkdir c:\assets\libuv64 - 7z x -oc:\assets\libuv64 win-libuv64.zip - appveyor DownloadFile https://libwebsockets.org:444/nsis-3.0rc1-setup.exe - cmd /c start /wait nsis-3.0rc1-setup.exe /S /D=C:\nsis - appveyor DownloadFile https://libwebsockets.org:444/sqlite-dll-win32-x86-3130000.zip - mkdir c:\assets\sqlite3 - 7z x -oc:\assets\sqlite3 sqlite-dll-win32-x86-3130000.zip - SET PATH=C:\Program Files\NSIS\;C:\Program Files (x86)\NSIS\;c:\nsis;%PATH% build_script: - md build - cd build - cmake -DCMAKE_BUILD_TYPE=Release %CMAKE_ARGS% .. - cmake --build . --config Release after_build: - cd %APPVEYOR_BUILD_FOLDER% - mkdir staging - mkdir staging\include - cp -r %APPVEYOR_BUILD_FOLDER%\build\bin %APPVEYOR_BUILD_FOLDER%\build\lib staging - if EXIST staging\bin\share mv staging\bin\share staging - if NOT EXIST staging\share\libwebsockets-test-server mkdir staging\share\libwebsockets-test-server - IF EXIST %APPVEYOR_BUILD_FOLDER%\build\libwebsockets-test-server.pem cp %APPVEYOR_BUILD_FOLDER%\build\libwebsockets-test-server.pem staging\share\libwebsockets-test-server - IF EXIST %APPVEYOR_BUILD_FOLDER%\build\libwebsockets-test-server.key.pem cp %APPVEYOR_BUILD_FOLDER%\build\libwebsockets-test-server.key.pem staging\share\libwebsockets-test-server - IF EXIST %APPVEYOR_BUILD_FOLDER%\build\lws_config.h cp %APPVEYOR_BUILD_FOLDER%\build\lws_config.h staging\include - cp %APPVEYOR_BUILD_FOLDER%\include\libwebsockets.h staging\include - cp -r %APPVEYOR_BUILD_FOLDER%\include\libwebsockets staging\include - 7z a build\lws-%LWS_METHOD%-%APPVEYOR_BUILD_ID%.zip %APPVEYOR_BUILD_FOLDER%\staging\* artifacts: - path: build\lws-%LWS_METHOD%-%APPVEYOR_BUILD_ID%.zip #deploy: #- provider: BinTray # username: lws-team # api_key: # secure: nDpZ7P/wrk98DwJPMC6KpCC23QrVP8f3RxvKzBaqOmb9LiVrg1IyO1cc5vcgShZC # subject: lws-team # repo: libwebsockets # package: windows # publish: true # override: true # explode: false matrix: fast_finish: true libwebsockets-3.2.1/changelog000066400000000000000000001224751357643561300162570ustar00rootroot00000000000000Changelog --------- v3.2.0 ====== - This is the last planned release under LGPLv2+SLE. It's not planned to be maintained like previous releases, please switch to master for the latest stuff or continue to use v3.1-stable until the next release under the new MIT license. - NEW: completely refactored scheduler with a unified, sorted us-resolution linked-list implementation. All polled checks like timeout are migrated to use the new timers, which also work on the event lib implementations. Faster operation, us-resolution timeouts and generic scheduled callbacks from the event loop. - NEW: lws_dsh specialized buffer memory allocator that can borrow space from other cooperating buffers on the same list. - NEW: lws_sequencer allows managing multi-connection processes and retries - NEW: memory buffer cert support - NEW: LWS_WITH_NETWORK in CMake... can be configured without any network- related code at all - NEW: builds on QNX 6.5 and SmartOS - NEW: JOSE / JWK / JWS / JWE support, for all common ciphers and algs, works on OpenSSL and mbedtls backends - NEW: gencrypto now has genaes and genec in addition to genrsa, works on OpenSSL and mbedtls backends - NEW: raw_proxy role - NEW: Basic Auth works on ws connections - CHANGE: REMOVED: LWS_WITH_GENRSA, LWS_WITH_GENHASH, LWS_WITH_GENEC, LWS_WITH_GENAES have all been removed and combined into LWS_WITH_GENCRYPTO - CHANGE: REMOVED: LWS_WITH_JWS, LWS_WITH_JWE have been removed and combined into LWS_WITH_JOSE v3.1.0 ====== - CHANGE: REMOVED: lws_client_connect() and lws_client_connect_extended() compatibility apis for lws_client_connect_via_info() have been marked as deprecated for several versions and are now removed. Use lws_client_connect_via_info() directly instead. - CHANGE: CMAKE: - LWS_WITH_HTTP2: now defaults ON - CHANGE: Minimal examples updated to use Content Security Policy best practices, using `LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE` vhost option flag and disabling of inline style and scripts. A side-effect of this is that buffers used to marshal headers have to be prepared to take more content than previously... LWS_RECOMMENDED_MIN_HEADER_SPACE (2048 currently) is available for user (and internal) use to logically tie the buffer size to this usecase (and follow future increases). - NEW: CMAKE - LWS_FOR_GITOHASHI: sets various cmake options suitable for gitohashi - LWS_WITH_ASAN: for Linux, enable build with ASAN Don't forget LWS_WITH_DISTRO_RECOMMENDED, which enables a wide range of lws options suitable for a distro build of the library. - NEW: lws threadpool - lightweight pool of pthreads integrated to lws wsi, with all synchronization to event loop handled internally, queue for excess tasks [threadpool docs](https://libwebsockets.org/git/libwebsockets/tree/lib/misc/threadpool) [threadpool minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/ws-server/minimal-ws-server-threadpool) Cmake config: `-DLWS_WITH_THREADPOOL=1` - NEW: libdbus support integrated on lws event loop [lws dbus docs](https://libwebsockets.org/git/libwebsockets/tree/lib/roles/dbus) [lws dbus client minimal examples](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/dbus-client) [lws dbus server minimal examples](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/dbus-server) Cmake config: `-DLWS_ROLE_DBUS=1` - NEW: lws allocated chunks (lwsac) - helpers for optimized mass allocation of small objects inside a few larger malloc chunks... if you need to allocate a lot of inter-related structs for a limited time, this removes per-struct allocation library overhead completely and removes the need for any destruction handling [lwsac docs](https://libwebsockets.org/git/libwebsockets/tree/lib/misc/lwsac) [lwsac minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-lwsac) Cmake Config: `-DLWS_WITH_LWSAC=1` - NEW: lws tokenizer - helper api for robustly tokenizing your own strings without allocating or adding complexity. Configurable by flags for common delimiter sets and comma-separated-lists in the tokenizer. Detects and reports syntax errors. [lws_tokenize docs](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-tokenize.h) [lws_tokenize minimal example / api test](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-lws_tokenize) - NEW: lws full-text search - optimized trie generation, serialization, autocomplete suggestion generation and instant global search support extensible to huge corpuses of UTF-8 text while remaining super lightweight on resources. [full-text search docs](https://libwebsockets.org/git/libwebsockets/tree/lib/misc/fts) [full-text search minimal example / api test](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-fts) [demo](https://libwebsockets.org/ftsdemo/) [demo sources](https://libwebsockets.org/git/libwebsockets/tree/plugins/protocol_fulltext_demo.c) Cmake config: `-DLWS_WITH_FTS=1 -DLWS_WITH_LWSAC=1` - NEW: gzip + brotli http server-side compression - h1 and h2 automatic advertising of server compression and application to files with mimetypes "text/*", "application/javascript" and "image/svg.xml". Cmake config: `-DLWS_WITH_HTTP_STREAM_COMPRESSION=1`, `-DLWS_WITH_HTTP_BROTLI=1` - NEW: managed disk cache - API for managing a directory containing cached files with hashed names, and automatic deletion of LRU files once the cache is above a given limit. [lws diskcache docs](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-diskcache.h) Cmake config: `-DLWS_WITH_DISKCACHE=1` - NEW: http reverse proxy - lws mounts support proxying h1 or h2 requests to a local or remote IP, or unix domain socket over h1. This allows microservice type architectures where parts of the common URL space are actually handled by external processes which may be remote or on the same machine. [lws gitohashi serving](https://libwebsockets.org/git/) is handled this way. CMake config: `-DLWS_WITH_HTTP_PROXY=1` - NEW: lws_buflist - internally several types of ad-hoc malloc'd buffer have been replaced by a new, exported api `struct lws_buflist`. This allows multiple buffers to be chained and drawn down in strict FIFO order. - NEW: In the case of h1 upgrade, the connection header is checked to contain "upgrade". The vhost flag LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK also causes the Host: header to be confirmed to match the vhost name and listen port. - NEW: If no 404 redirect for `lws_return_http_status()` is specified for the vhost, the status page produced will try to bring in a stylesheet `/error.css`. This allows you to produce styled 404 or other error pages with logos, graphics etc. See https://libwebsockets.org/git/badrepo for an example of what you can do with it. v3.0.0 ====== - CHANGE: Clients used to call LWS_CALLBACK_CLOSED same as servers... LWS_CALLBACK_CLIENT_CLOSED has been introduced and is called for clients now. - CHANGE: LWS_CALLBACK_CLIENT_CONNECTION_ERROR used to only be directed at protocols[0]. However in many cases, the protocol to bind to was provided at client connection info time and the wsi bound accordingly. In those cases, CONNECTION_ERROR is directed at the bound protocol, not protcols[0] any more. - CHANGE: CMAKE: the following cmake defaults have changed with this version: - LWS_WITH_ZIP_FOPS: now defaults OFF - LWS_WITH_RANGES: now defaults OFF - LWS_WITH_ZLIB: now defaults OFF - LWS_WITHOUT_EXTENSIONS: now defaults ON - CHANGE: REMOVED: lws_alloc_vfs_file() (read a file to malloc buffer) - CHANGE: REMOVED: lws_read() (no longer useful outside of lws internals) - CHANGE: REMOVED: ESP8266... ESP32 is now within the same price range and much more performant - CHANGE: soname bump... don't forget to `ldconfig` - NEW: all event libraries support "foreign" loop integration where lws itself if just a temporary user of the loop unrelated to the actual loop lifecycle. See `minimal-http-server-eventlib-foreign` for example code demonstrating this for all the event libraries. Internal loop in lws is also supported and demonstrated by `minimal-http-server-eventlib`. - NEW: ws-over-h2 support. This is a new RFC-on-the-way supported by Chrome and shortly firefox that allows ws connections to be multiplexed back to the server on the same tcp + tls wrapper h2 connection that the html and scripts came in on. This is hugely faster that discrete connections. - NEW: UDP socket adoption and related event callbacks - NEW: Multi-client connection binding, queuing and pipelining support. Lws detects multiple client connections to the same server and port, and optimizes how it handles them according to the server type and provided flags. For http/1.0, all occur with individual parallel connections. For http/1.1, you can enable keepalive pipelining, so the connections occur sequentially on a single network connection. For http/2, they all occur as parallel streams within a single h2 network connection. See minimal-http-client-multi for example code. - NEW: High resolution timer API for wsi, get a callback on your wsi with LWS_CALLBACK_TIMER, set and reset the timer with lws_set_timer_usecs(wsi, us) Actual resolution depends on event backend. Works with all backends, poll, libuv, libevent, and libev. - NEW: Protocols can arrange vhost-protocol instance specific callbacks with second resolution using `lws_timed_callback_vh_protocol()` - NEW: ACME client plugin for self-service TLS certificates - NEW: RFC7517 JSON Web Keys RFC7638 JWK thumbprint, and RFC7515 JSON Web signatures support - NEW: lws_cancel_service() now provides a generic way to synchronize events from other threads, which appear as a LWS_CALLBACK_EVENT_WAIT_CANCELLED callback on all protocols. This is compatible with all the event libraries. - NEW: support BSD poll() where changes to the poll wait while waiting are undone. - NEW: Introduce generic hash, hmac and RSA apis that operate the same regardless of OpenSSL or mbedTLS tls backend - NEW: Introduce X509 element query api that works the same regardless of OpenSSL or mbedTLS tls backend - NEW: Introduce over 30 "minimal examples" in ./minimal-examples... these replace most of the old test servers - test-echo -> minimal-ws-server-echo and minimal-ws-client-echo - test-server-libuv / -libevent / -libev -> minimal-https-server-eventlib / -eventlib-foreign / -eventlib-demos - test-server-v2.0 -> folded into all the minimal servers - test-server direct http serving -> minimal-http-server-dynamic The minimal examples allow individual standalone build using their own small CMakeLists.txt. - NEW: lws now detects any back-to-back writes that did not go through the event loop inbetween and reports them. This will flag any possibility of failure rather than wait until the problem happens. - NEW: CMake has LWS_WITH_DISTRO_RECOMMENDED to select features that are appropriate for distros - NEW: Optional vhost URL `error_document_404` if given causes a redirect there instead of serve the default 404 page. - NEW: lws_strncpy() wrapper guarantees NUL in copied string even if it was truncated to fit. - NEW: for client connections, local protocol binding name can be separated from the ws subprotocol name if needed, using .local_protocol_name - NEW: Automatic detection of time discontiguities - NEW: Applies TCP_USER_TIMEOUT for Linux tcp keepalive where available - QA: 1600 tests run on each commit in Travis CI, including almost all Autobahn in client and server mode, various h2load tests, h2spec, attack.sh the minimal example selftests and others. - QA: fix small warnings introduced on gcc8.x (eg, Fedora 28) - QA: Add most of -Wextra on gcc (-Wsign-compare, -Wignored-qualifiers, -Wtype-limits, -Wuninitialized) - QA: clean out warnings on windows - QA: pass all 146 h2spec tests now on strict - QA: introduce 35 selftests that operate different minimal examples against each other and confirm the results. - QA: LWS_WITH_MINIMAL_EXAMPLES allows mass build of all relevant minimal- examples with the LWS build, for CI and to make all the example binaries available from the lws build dir ./bin - REFACTOR: the lws source directory layout in ./lib has been radically improved, and there are now README.md files in selected subdirs with extra documentation of interest to people working on lws itself. - REFACTOR: pipelined transactions return to the event loop before starting the next part. - REFACTOR: TLS: replace all TLS library constants with generic LWS ones and adapt all the TLS library code to translate to these common ones. Isolated all the tls-related private stuff in `./lib/tls/private.h`, and all the mbedTLS stuff in `./lib/tls/mbedtls` + openSSL stuff in `./lib/tls/openssl` - REFACTOR: the various kinds of wsi possible with lws have been extracted from the main code and isolated into "roles" in `./lib/roles` which communicate with the core code via an ops struct. Everything related to ah is migrated to the http role. wsi modes are eliminated and replaced by the ops pointer for the role the wsi is performing. Generic states for wsi are available to control the lifecycle using core code. Adding new "roles" is now much easier with the changes and ops struct to plug into. - REFACTOR: reduce four different kinds of buffer management in lws into a generic scatter-gather struct lws_buflist. - REFACTOR: close notifications go through event loop v2.4.0 ====== - HTTP/2 server support is now mature and usable! LWS_WITH_HTTP2=1 enables it. Uses ALPN to serve HTTP/2, HTTP/1 and ws[s] connections all from the same listen port seamlessly. (Requires ALPN-capable OpenSSL 1.1 or mbedTLS). - LWS_WITH_MBEDTLS=1 at CMake now builds and works against mbedTLS instead of OpenSSL. Most things work identically, although on common targets where OpenSSL has acceleration, mbedTLS is many times slower in operation. However it is a lot smaller codewise. - Generic hash apis introduced that work the same on mbedTLS or OpenSSL backend - LWS_WITH_PEER_LIMITS tracks IPs across all vhosts and allows restrictions on both the number of simultaneous connections and wsi in use for any single IP - lws_ring apis provide a generic single- or multi-tail ringbuffer... mirror protocol now uses this. Features include ring elements may be sized to fit structs in the ringbuffer, callback when no tail any longer needs an element and it can be deleted, and zerocopy options to write new members directly into the ringbuffer, and use the ringbuffer element by address too. - abstract ssh 2 server plugin included, with both plugin and standalone demos provided. You can bind the plugin to a vhost and also serve full- strength ssh from the vhost. IO from the ssh server is controlled by an "ops" struct of callbacks for tx, rx, auth etc. - Many fixes, cleanups, source refactors and other improvements. v2.3.0 ====== - ESP32 OpenSSL support for client and server - ESP32 4 x WLAN credential slots may be configured - Libevent event loop support - SOCKS5 proxy support - lws_meta protocol for websocket connection multiplexing - lws_vhost_destroy() added... allows dynamic removal of listening vhosts. Vhosts with shared listen sockets adopt the listen socket automatically if the owner is destroyed. - IPv6 on Windows - Improved CGI handling suitable for general CGI scripting, eg, PHP - Convert even the "old style" test servers to use statically included plugin sources - LWS_WITH_STATS cmake option dumps resource usage and timing information every few seconds to debug log, including latency information about delay from asking for writeable callback to getting it - Large (> 2GB) files may be served - LWS_WITH_HTTP_PROXY Cmake option adds proxying mounts - Workaround for libev build by disabling -Werror on the test app - HTTP2 support disabled since no way to serve websockets on it v2.2.0 ====== Major new features - A mount can be protected by Basic Auth... in lwsws it looks like this ``` { "mountpoint": "/basic-auth", "origin": "file://_lws_ddir_/libwebsockets-test-server/private", "basic-auth": "/var/www/balogins-private" } ``` The text file named in `basic-auth` contains user:password information one per line. See README.lwsws.md for more information. - RFC7233 RANGES support in lws server... both single and multipart. This allows seeking for multimedia file serving and download resume. It's enabled by default but can be disabled by CMake option. - On Linux, lwsws can reload configuration without dropping ongoing connections, when sent a SIGHUP. The old configuration drops its listen sockets so the new configuration can listen on them. New connections connect to the server instance with the new configuration. When all old connections eventually close, the old instance automatically exits. This is equivalent to `systemctl reload apache` - New `adopt` api allow adoption including SSL negotiation and for raw sockets and file descriptors. - Chunked transfer encoding supported for client and server - Adaptations to allow operations inside OPTEE Secure World - ESP32 initial port - able to do all test server functions. See README.build.md - Serving gzipped files from inside a ZIP file is supported... this includes directly serving the gzipped content if the client indicated it could accept it (ie, almost all browsers) saving bandwidth and time. For clients that can't accept it, lws automatically decompresses and serves the content in memory- efficient chunks. Only a few hundred bytes of heap are needed to serve any size file from inside the zip. See README.coding.md - RAW file descriptors may now be adopted into the lws event loop, independent of event backend (including poll service). See README.coding.md - RAW server socket descriptors may now be enabled on the vhost if the first thing sent on the connection is not a valid http method. The user code can associate these with a specific protocol per vhost, and RAW-specific callbacks appear there for creation, rx, writable and close. See libwebsockets-test-server-v2.0 for an example. See README.coding.md - RAW client connections are now possible using the method "RAW". After connection, the socket is associated to the protocol named in the client connection info and RAW-specific callbacks appear there for creation, rx, writable and close. See libwebsockets-test-client (with raw://) for an example. See README.coding.md v2.1.0 ====== Major new features - Support POST arguments, including multipart and file attachment - Move most of lwsws into lws, make the stub CC0 - Add loopback test plugin to confirm client ws / http coexistence - Integrate lwsws testing on Appveyor (ie, windows) - Introduce helpers for sql, urlencode and urldecode sanitation - Introduce LWS_CALLBACK_HTTP_BIND_PROTOCOL / DROP_PROTOCOL that are compatible with http:/1.1 pipelining and different plugins owning different parts of the URL space - lwsgs - Generic Sessions plugin supports serverside sessions, cookies, hashed logins, forgot password etc - Added APIs for sending email to SMTP servers - Messageboard example plugin for lwsgs - Automatic PING sending at fixed intervals and close if no response - Change default header limit in ah to 4096 (from 1024) - Add SNI matching for wildcards if no specific wildcard vhost name match - Convert docs to Doxygen - ESP8266 support ^^ Fixes ----- See git log v2.0.0.. v2.0.0 ====== Summary ------- - There are only api additions, the api is compatible with v1.7.x. But there is necessarily an soname bump to 8. - If you are using lws client, you mainly need to be aware the option LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT is needed at context-creation time if you will use SSL. - If you are using lws for serving, the above is also true but there are many new features to simplify your code (and life). There is a summany online here https://libwebsockets.org/lws-2.0-new-features.html but basically the keywords are vhosts, mounts and plugins. You can now do the web serving part from lws without any user callback code at all. See ./test-server/test-server-v2.0.c for an example, it has no user code for ws either since it uses the protocol plugins... that one C file is all that is needed to do the whole test server function. You now have the option to use a small generic ws-capable webserver "lwsws" and write your ws part as a plugin. That eliminates even cut-and-pasting the test server code and offers more configurable features like control over http cacheability in JSON. Fixes ----- These are already in 1.7.x series 1) MAJOR (Windows-only) fix assert firing 2) MAJOR http:/1.1 connections handled by lws_return_http_status() did not get sent a content-length resulting in the link hanging until the peer closed it. attack.sh updated to add a test for this. 3) MINOR An error about hdr struct in _lws_ws_related is corrected, it's not known to affect anything until after it was fixed 4) MINOR During the close shutdown wait state introduced at v1.7, if something requests callback on writeable for the socket it will busywait until the socket closes 5) MAJOR Although the test server has done it for a few versions already, it is now required for the user code to explicitly call if (lws_http_transaction_completed(wsi)) return -1; when it finishes replying to a transaction in http. Previously the library did it for you, but that disallowed large, long transfers with multiple trips around the event loop (and cgi...). 6) MAJOR connections on ah waiting list that closed did not get removed from the waiting list... 7) MAJOR since we added the ability to hold an ah across http keepalive transactions where more headers had already arrived, we broke the ability to tell if more headers had arrived. Result was if the browser didn't close the keepalive, we retained ah for the lifetime of the keepalive, using up the pool. 8) MAJOR windows-only-POLLHUP was not coming 9) Client should not send ext hdr if no exts Changes ------- 1) MINOR test-server gained some new switches -C use external SSL cert file -K use external SSL key file -A use external SSL CA cert file -u set effective uid -g set effective gid together you can use them like this to have the test-server work with the usual purchased SSL certs from an official CA. --ssl -C your.crt -K your.key -A your.cer -u 99 -g 99 2) MINOR the OpenSSL magic to setup ECDH cipher usage is implemented in the library, and the ciphers restricted to use ECDH only. Using this, the lws test server can score an A at SSLLABS test 3) MINOR STS (SSL always) header is added to the test server if you use --ssl. With that, we score A+ at SSLLABS test 4) MINOR daemonize function (disabled at cmake by default) is updated to work with systemd 5) MINOR example systemd .service file now provided for test server (not installed by default) 6) test server html is updated with tabs and a new live server monitoring feature. Input sanitization added to the js. 7) client connections attempted when no ah is free no longer fail, they are just deferred until an ah becomes available. 8) The test client pays attention to if you give it an http:/ or https:// protocol string to its argument in URL format. If so, it stays in http[s] client mode and doesn't upgrade to ws[s], allowing you to do generic http client operations. Receiving transfer-encoding: chunked is supported. 9) If you enable -DLWS_WITH_HTTP_PROXY=1 at cmake, the test server has a new URI path http://localhost:7681/proxytest If you visit here, a client connection to http://example.com:80 is spawned, and the results piped on to your original connection. 10) Also with LWS_WITH_HTTP_PROXY enabled at cmake, lws wants to link to an additional library, "libhubbub". This allows lws to do html rewriting on the fly, adjusting proxied urls in a lightweight and fast way. 11) There's a new context creation flag LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT, this is included automatically if you give any other SSL-related option flag. If you give no SSL-related option flag, nor this one directly, then even though SSL support may be compiled in, it is never initialized nor used for the whole lifetime of the lws context. Conversely in order to prepare the context to use SSL, even though, eg, you are not listening on SSL but will use SSL client connections later, you must give this flag explicitly to make sure SSL is initialized. User API additions ------------------ 1) MINOR APIBREAK There's a new member in struct lws_context_creation_info, ecdh_curve, which lets you set the name of the ECDH curve OpenSSL should use. By default (if you leave ecdh_curve NULL) it will use "prime256v1" 2) MINOR NEWAPI It was already possible to adopt a foreign socket that had not been read from using lws_adopt_socket() since v1.7. Now you can adopt a partially-used socket if you don't need SSL, by passing it what you read so it can drain that before reading from the socket. LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd, const char *readbuf, size_t len); 3) MINOR NEWAPI CGI type "network io" subprocess execution is now possible from a simple api. LWS_VISIBLE LWS_EXTERN int lws_cgi(struct lws *wsi, char * const *exec_array, int script_uri_path_len, int timeout_secs); LWS_VISIBLE LWS_EXTERN int lws_cgi_kill(struct lws *wsi); To use it, you must first set the cmake option $ cmake .. -DLWS_WITH_CGI=1 See test-server-http.c and test server path http://localhost:7681/cgitest stdin gets http body, you can test it with wget $ echo hello > hello.txt $ wget http://localhost:7681/cgitest --post-file=hello.txt -O- --quiet lwstest script read="hello" The test script returns text/html table showing /proc/meminfo. But the cgi support is complete enough to run cgit cgi. 4) There is a helper api for forming logging timestamps LWS_VISIBLE int lwsl_timestamp(int level, char *p, int len) this generates this kind of timestamp for use as logging preamble lwsts[13116]: [2016/01/25 14:52:52:8386] NOTICE: Initial logging level 7 5) struct lws_client_connect_info has a new member const char *method If it's NULL, then everything happens as before, lws_client_connect_via_info() makes a ws or wss connection to the address given. If you set method to a valid http method like "GET", though, then this method is used and the connection remains in http[s], it's not upgraded to ws[s]. So with this, you can perform http[s] client operations as well as ws[s] ones. There are 4 new related callbacks LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44, LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45, LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46, LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47, 6) struct lws_client_connect_info has a new member const char *parent_wsi if non-NULL, the client wsi is set to be a child of parent_wsi. This ensures if parent_wsi closes, then the client child is closed just before. 7) If you're using SSL, there's a new context creation-time option flag LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS. If you give this, non-ssl connections to the server listen port are accepted and receive a 301 redirect to / on the same host and port using https:// 8) User code may set per-connection extension options now, using a new api "lws_set_extension_option()". This should be called from the ESTABLISHED callback like this lws_set_extension_option(wsi, "permessage-deflate", "rx_buf_size", "12"); /* 1 << 12 */ If the extension is not active (missing or not negotiated for the connection, or extensions are disabled on the library) the call is just returns -1. Otherwise the connection's extension has its named option changed. The extension may decide to alter or disallow the change, in the example above permessage-deflate restricts the size of his rx output buffer also considering the protocol's rx_buf_size member. New application lwsws --------------------- A libwebsockets-based general webserver is built by default now, lwsws. It's configured by JSON, by default in /etc/lwsws/conf which contains global lws context settings like this { "global": { "uid": "99", "gid": "99", "interface": "eth0", "count-threads": "1" } } /etc/lwsws/conf.d/* which contains zero or more files describing vhosts, like this { "vhosts": [ { "name": "warmcat.com", "port": "443", "host-ssl-key": "/etc/pki/tls/private/warmcat.com.key", "host-ssl-cert": "/etc/pki/tls/certs/warmcat.com.crt", "host-ssl-ca": "/etc/pki/tls/certs/warmcat.com.cer", "mounts": [ { "/": [ { "home": "file:///var/www/warmcat.com" }, { "default": "index.html" } ] } ] } ] } v1.7.0 ====== Extension Changes ----------------- 1) There is now a "permessage-deflate" / RFC7692 implementation. It's very similar to "deflate-frame" we have offered for a long while; deflate-frame is now provided as an alias of permessage-deflate. The main differences are that the new permessage-deflate implementation: - properly performs streaming respecting input and output buffer limits. The old deflate-frame implementation could only work on complete deflate input and produce complete inflate output for each frame. The new implementation only mallocs buffers at initialization. - goes around the event loop after each input package is processed allowing interleaved output processing. The RX flow control api can be used to force compressed input processing to match the rate of compressed output processing (test--echo shows an example of how to do this). - when being "deflate-frame" for compatibility he uses the same default zlib settings as the old "deflate-frame", but instead of exponentially increasing malloc allocations until the whole output will fit, he observes the default input and output chunking buffer sizes of "permessage-deflate", that's 1024 in and 1024 out at a time. 2) deflate-stream has been disabled for many versions (for over a year) and is now removed. Browsers are now standardizing on "permessage-deflate" / RFC7692 3) struct lws_extension is simplified, and lws extensions now have a public api (their callback) for use in user code to compose extensions and options the user code wants. lws_get_internal_exts() is deprecated but kept around as a NOP. The changes allow one extension implementation to go by different names and allows the user client code to control option offers per-ext. The test client and server are updated to use the new way. If you use the old way it should still work, but extensions will be disabled until you update your code. Extensions are now responsible for allocating and per-instance private struct at instance construction time and freeing it when the instance is destroyed. Not needing to know the size means the extension's struct can be opaque to user code. User api additions ------------------ 1) The info struct gained three new members - max_http_header_data: 0 for default (1024) or set the maximum amount of known http header payload that lws can deal with. Payload in unknown http headers is dropped silently. If for some reason you need to send huge cookies or other HTTP-level headers, you can now increase this at context- creation time. - max_http_header_pool: 0 for default (16) or set the maximum amount of http headers that can be tracked by lws in this context. For the server, if the header pool is completely in use then accepts on the listen socket are disabled until one becomes free. For the client, if you simultaneously have pending connects for more than this number of client connections, additional connects will fail until some of the pending connections timeout or complete. - timeout_secs: 0 for default (currently 20s), or set the library's network activity timeout to the given number of seconds HTTP header processing in lws only exists until just after the first main callback after the HTTP handshake... for ws connections that is ESTABLISHED and for HTTP connections the HTTP callback. So these settings are not related to the maximum number of simultaneous connections, but the number of HTTP handshakes that may be expected or ongoing, or have just completed, at one time. The reason it's useful is it changes the memory allocation for header processing to be one-time at context creation instead of every time there is a new connection, and gives you control over the peak allocation. Setting max_http_header_pool to 1 is fine it will just queue incoming connections before the accept as necessary, you can still have as many simultaneous post-header connections as you like. Since the http header processing is completed and the allocation released after ESTABLISHED or the HTTP callback, even with a pool of 1 many connections can be handled rapidly. 2) There is a new callback that allows the user code to get acccess to the optional close code + aux data that may have been sent by the peer. LWS_CALLBACK_WS_PEER_INITIATED_CLOSE: The peer has sent an unsolicited Close WS packet. @in and @len are the optional close code (first 2 bytes, network order) and the optional additional information which is not defined in the standard, and may be a string or non-human- readble data. If you return 0 lws will echo the close and then close the connection. If you return nonzero lws will just close the connection. As usual not handling it does the right thing, if you're not interested in it just ignore it. The test server has "open and close" testing buttons at the bottom, if you open and close that connection, on close it will send a close code 3000 decimal and the string "Bye!" as the aux data. The test server dumb-increment callback handles this callback reason and prints lwsts[15714]: LWS_CALLBACK_WS_PEER_INITIATED_CLOSE: len 6 lwsts[15714]: 0: 0x0B lwsts[15714]: 1: 0xB8 lwsts[15714]: 2: 0x42 lwsts[15714]: 3: 0x79 lwsts[15714]: 4: 0x65 lwsts[15714]: 5: 0x21 3) There is a new API to allow the user code to control the content of the close frame sent when about to return nonzero from the user callback to indicate the connection should close. /** * lws_close_reason - Set reason and aux data to send with Close packet * If you are going to return nonzero from the callback * requesting the connection to close, you can optionally * call this to set the reason the peer will be told if * possible. * * @wsi: The websocket connection to set the close reason on * @status: A valid close status from websocket standard * @buf: NULL or buffer containing up to 124 bytes of auxiliary data * @len: Length of data in @buf to send */ LWS_VISIBLE LWS_EXTERN void lws_close_reason(struct lws *wsi, enum lws_close_status status, unsigned char *buf, size_t len); An extra button is added to the "open and close" test server page that requests that the test server close the connection from his end. The test server code will do so by lws_close_reason(wsi, LWS_CLOSE_STATUS_GOINGAWAY, (unsigned char *)"seeya", 5); return -1; The browser shows the close code and reason he received websocket connection CLOSED, code: 1001, reason: seeya 4) There's a new context creation time option flag LWS_SERVER_OPTION_VALIDATE_UTF8 if you set it in info->options, then TEXT and CLOSE frames will get checked to confirm that they contain valid UTF-8. If they don't, the connection will get closed by lws. 5) ECDH Certs are now supported. Enable the CMake option cmake .. -DLWS_SSL_SERVER_WITH_ECDH_CERT=1 **and** the info->options flag LWS_SERVER_OPTION_SSL_ECDH to build in support and select it at runtime. 6) There's a new api lws_parse_uri() that simplifies chopping up https://xxx:yyy/zzz uris into parts nicely. The test client now uses this to allow proper uris as well as the old address style. 7) SMP support is integrated into LWS without any internal threading. It's very simple to use, libwebsockets-test-server-pthread shows how to do it, use -j argument there to control the number of service threads up to 32. Two new members are added to the info struct unsigned int count_threads; unsigned int fd_limit_per_thread; leave them at the default 0 to get the normal singlethreaded service loop. Set count_threads to n to tell lws you will have n simultaneous service threads operating on the context. There is still a single listen socket on one port, no matter how many service threads. When a connection is made, it is accepted by the service thread with the least connections active to perform load balancing. The user code is responsible for spawning n threads running the service loop associated to a specific tsi (Thread Service Index, 0 .. n - 1). See the libwebsockets-test-server-pthread for how to do. If you leave fd_limit_per_thread at 0, then the process limit of fds is shared between the service threads; if you process was allowed 1024 fds overall then each thread is limited to 1024 / n. You can set fd_limit_per_thread to a nonzero number to control this manually, eg the overall supported fd limit is less than the process allowance. You can control the context basic data allocation for multithreading from Cmake using -DLWS_MAX_SMP=, if not given it's set to 32. The serv_buf allocation for the threads (currently 4096) is made at runtime only for active threads. Because lws will limit the requested number of actual threads supported according to LWS_MAX_SMP, there is an api lws_get_count_threads(context) to discover how many threads were actually allowed when the context was created. It's required to implement locking in the user code in the same way that libwebsockets-test-server-pthread does it, for the FD locking callbacks. If LWS_MAX_SMP=1, then there is no code related to pthreads compiled in the library. If more than 1, a small amount of pthread mutex code is built into the library. 8) New API LWS_VISIBLE struct lws * lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd) allows foreign sockets accepted by non-lws code to be adopted by lws as if they had just been accepted by lws' own listen socket. 9) X-Real-IP: header has been added as WSI_TOKEN_HTTP_X_REAL_IP 10) Libuv support is added, there are new related user apis typedef void (lws_uv_signal_cb_t)(uv_loop_t *l, uv_signal_t *w, int revents); LWS_VISIBLE LWS_EXTERN int lws_uv_sigint_cfg(struct lws_context *context, int use_uv_sigint, lws_uv_signal_cb_t *cb); LWS_VISIBLE LWS_EXTERN int lws_uv_initloop(struct lws_context *context, uv_loop_t *loop, int tsi); LWS_VISIBLE void lws_uv_sigint_cb(uv_loop_t *loop, uv_signal_t *watcher, int revents); and CMAKE option LWS_WITH_LIBUV User api changes ---------------- 1) LWS_SEND_BUFFER_POST_PADDING is now 0 and deprecated. You can remove it; if you still use it, obviously it does nothing. Old binary code with nonzero LWS_SEND_BUFFER_POST_PADDING is perfectly compatible, the old code just allocated a buffer bigger than the library is going to use. The example apps no longer use LWS_SEND_BUFFER_POST_PADDING. The only path who made use of it was sending with LWS_WRITE_CLOSE ---> 2) Because of lws_close_reason() formalizing handling close frames, LWS_WRITE_CLOSE is removed from libwebsockets.h. It was only of use to send close frames...close frame content should be managed using lws_close_reason() now. 3) We check for invalid CLOSE codes and complain about protocol violation in our close code. But it changes little since we were in the middle of closing anyway. 4) zero-length RX frames and zero length TX frames are now allowed. 5) Pings and close used to be limited to 124 bytes, the correct limit is 125 so that is now also allowed. 6) LWS_PRE is provided as a synonym for LWS_SEND_BUFFER_PRE_PADDING, either is valid to use now. 7) There's generic support for RFC7462 style extension options built into the library now. As a consequence, a field "options" is added to lws_extension. It can be NULL if there are no options on the extension. Extension internal info is part of the public abi because extensions may be implemented outside the library. 8) WSI_TOKEN_PROXY enum was accidentally defined to collide with another token of value 73. That's now corrected and WSI_TOKEN_PROXY moved to his own place at 77. 9) With the addition of libuv support, libev is not the only event loop library in town and his api names must be elaborated with _ev_ Callback typedef: lws_signal_cb ---> lws_ev_signal_cb_t lws_sigint_cfg --> lws_ev_sigint_cfg lws_initloop --> lws_ev_initloop lws_sigint_cb --> lws_ev_sigint_cb 10) Libev support is made compatible with multithreaded service, lws_ev_initloop (was lws_initloop) gets an extra argument for the thread service index (use 0 if you will just have 1 service thread). LWS_VISIBLE LWS_EXTERN int lws_ev_initloop(struct lws_context *context, ev_loop_t *loop, int tsi); (for earlier changelogs, see the tagged releases) libwebsockets-3.2.1/cmake/000077500000000000000000000000001357643561300154525ustar00rootroot00000000000000libwebsockets-3.2.1/cmake/FindGit.cmake000077500000000000000000000145671357643561300200200ustar00rootroot00000000000000################################################################################ # # Program: 3D Slicer # # Copyright (c) Kitware Inc. # # See COPYRIGHT.txt # or http://www.slicer.org/copyright/copyright.txt for details. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # This file was originally developed by Jean-Christophe Fillion-Robin, Kitware Inc. # and was partially funded by NIH grant 3P41RR013218-12S1 # # AG 2013-02-18: I got it from here # https://github.com/Slicer/Slicer/blob/master/CMake/FindGit.cmake # license is BSD # ################################################################################ # # The module defines the following variables: # GIT_EXECUTABLE - path to git command line client # GIT_FOUND - true if the command line client was found # # If the command line client executable is found the macro # GIT_WC_INFO( ) # is defined to extract information of a git working copy at # a given location. # # The macro defines the following variables: # _WC_REVISION_HASH - Current SHA1 hash # _WC_REVISION - Current SHA1 hash # _WC_REVISION_NAME - Name associated with _WC_REVISION_HASH # _WC_URL - output of command `git config --get remote.origin.url' # _WC_ROOT - Same value as working copy URL # _WC_GITSVN - Set to false # # ... and also the following ones if it's a git-svn repository: # _WC_GITSVN - Set to True if it is a # _WC_INFO - output of command `git svn info' # _WC_URL - url of the associated SVN repository # _WC_ROOT - root url of the associated SVN repository # _WC_REVISION - current SVN revision number # _WC_LAST_CHANGED_AUTHOR - author of last commit # _WC_LAST_CHANGED_DATE - date of last commit # _WC_LAST_CHANGED_REV - revision of last commit # _WC_LAST_CHANGED_LOG - last log of base revision # # Example usage: # find_package(Git) # if(GIT_FOUND) # GIT_WC_INFO(${PROJECT_SOURCE_DIR} Project) # message("Current revision is ${Project_WC_REVISION_HASH}") # message("git found: ${GIT_EXECUTABLE}") # endif() # # Look for 'git' or 'eg' (easy git) # set(git_names git eg) # Prefer .cmd variants on Windows unless running in a Makefile # in the MSYS shell. # if(WIN32) if(NOT CMAKE_GENERATOR MATCHES "MSYS") # Note: Due to a bug in 'git.cmd' preventing it from returning the exit code of 'git', # we excluded it from the list of executables to search. # See http://code.google.com/p/msysgit/issues/detail?id=428 # TODO Check if 'git' exists, get the associated version, if the corresponding version # is known to have a working version of 'git.cmd', use it. set(git_names git eg.cmd eg) endif() endif() find_program(GIT_EXECUTABLE ${git_names} PATHS "C:/Program Files/Git/bin" "C:/Program Files (x86)/Git/bin" DOC "git command line client") mark_as_advanced(GIT_EXECUTABLE) if(GIT_EXECUTABLE) macro(GIT_WC_INFO dir prefix) execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --verify -q --short=7 HEAD WORKING_DIRECTORY ${dir} ERROR_VARIABLE GIT_error OUTPUT_VARIABLE ${prefix}_WC_REVISION_HASH OUTPUT_STRIP_TRAILING_WHITESPACE) set(${prefix}_WC_REVISION ${${prefix}_WC_REVISION_HASH}) if(NOT ${GIT_error} EQUAL 0) message(SEND_ERROR "Command \"${GIT_EXECUTBALE} rev-parse --verify -q --short=7 HEAD\" in directory ${dir} failed with output:\n${GIT_error}") else(NOT ${GIT_error} EQUAL 0) execute_process(COMMAND ${GIT_EXECUTABLE} name-rev ${${prefix}_WC_REVISION_HASH} WORKING_DIRECTORY ${dir} OUTPUT_VARIABLE ${prefix}_WC_REVISION_NAME OUTPUT_STRIP_TRAILING_WHITESPACE) endif(NOT ${GIT_error} EQUAL 0) execute_process(COMMAND ${GIT_EXECUTABLE} config --get remote.origin.url WORKING_DIRECTORY ${dir} OUTPUT_VARIABLE ${prefix}_WC_URL OUTPUT_STRIP_TRAILING_WHITESPACE) set(${prefix}_WC_GITSVN False) # Check if this git is likely to be a git-svn repository execute_process(COMMAND ${GIT_EXECUTABLE} config --get-regexp "^svn-remote" WORKING_DIRECTORY ${dir} OUTPUT_VARIABLE git_config_output OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT "${git_config_output}" STREQUAL "") # In case git-svn is used, attempt to extract svn info execute_process(COMMAND ${GIT_EXECUTABLE} svn info WORKING_DIRECTORY ${dir} TIMEOUT 3 ERROR_VARIABLE git_svn_info_error OUTPUT_VARIABLE ${prefix}_WC_INFO RESULT_VARIABLE git_svn_info_result OUTPUT_STRIP_TRAILING_WHITESPACE) if(${git_svn_info_result} EQUAL 0) set(${prefix}_WC_GITSVN True) string(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*" "\\2" ${prefix}_WC_URL "${${prefix}_WC_INFO}") string(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*" "\\2" ${prefix}_WC_REVISION "${${prefix}_WC_INFO}") string(REGEX REPLACE "^(.*\n)?Repository Root: ([^\n]+).*" "\\2" ${prefix}_WC_ROOT "${${prefix}_WC_INFO}") string(REGEX REPLACE "^(.*\n)?Last Changed Author: ([^\n]+).*" "\\2" ${prefix}_WC_LAST_CHANGED_AUTHOR "${${prefix}_WC_INFO}") string(REGEX REPLACE "^(.*\n)?Last Changed Rev: ([^\n]+).*" "\\2" ${prefix}_WC_LAST_CHANGED_REV "${${prefix}_WC_INFO}") string(REGEX REPLACE "^(.*\n)?Last Changed Date: ([^\n]+).*" "\\2" ${prefix}_WC_LAST_CHANGED_DATE "${${prefix}_WC_INFO}") endif(${git_svn_info_result} EQUAL 0) endif(NOT "${git_config_output}" STREQUAL "") # If there is no 'remote.origin', default to "NA" value and print a warning message. if(NOT ${prefix}_WC_URL) message(WARNING "No remote origin set for git repository: ${dir}" ) set( ${prefix}_WC_URL "NA" ) else() set(${prefix}_WC_ROOT ${${prefix}_WC_URL}) endif() endmacro(GIT_WC_INFO) endif(GIT_EXECUTABLE) # Handle the QUIETLY and REQUIRED arguments and set GIT_FOUND to TRUE if # all listed variables are TRUE include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Git DEFAULT_MSG GIT_EXECUTABLE) libwebsockets-3.2.1/cmake/FindLibWebSockets.cmake000066400000000000000000000017011357643561300217540ustar00rootroot00000000000000# This module tries to find libWebsockets library and include files # # LIBWEBSOCKETS_INCLUDE_DIR, path where to find libwebsockets.h # LIBWEBSOCKETS_LIBRARY_DIR, path where to find libwebsockets.so # LIBWEBSOCKETS_LIBRARIES, the library to link against # LIBWEBSOCKETS_FOUND, If false, do not try to use libWebSockets # # This currently works probably only for Linux FIND_PATH ( LIBWEBSOCKETS_INCLUDE_DIR libwebsockets.h /usr/local/include /usr/include ) FIND_LIBRARY ( LIBWEBSOCKETS_LIBRARIES websockets /usr/local/lib /usr/lib ) GET_FILENAME_COMPONENT( LIBWEBSOCKETS_LIBRARY_DIR ${LIBWEBSOCKETS_LIBRARIES} PATH ) SET ( LIBWEBSOCKETS_FOUND "NO" ) IF ( LIBWEBSOCKETS_INCLUDE_DIR ) IF ( LIBWEBSOCKETS_LIBRARIES ) SET ( LIBWEBSOCKETS_FOUND "YES" ) ENDIF ( LIBWEBSOCKETS_LIBRARIES ) ENDIF ( LIBWEBSOCKETS_INCLUDE_DIR ) MARK_AS_ADVANCED( LIBWEBSOCKETS_LIBRARY_DIR LIBWEBSOCKETS_INCLUDE_DIR LIBWEBSOCKETS_LIBRARIES )libwebsockets-3.2.1/cmake/FindMiniz.cmake000066400000000000000000000015431357643561300203460ustar00rootroot00000000000000# This module tries to find miniz library and include files # # MINIZ_INCLUDE_DIR, path where to find miniz.h # MINIZ_LIBRARY_DIR, path where to find libminiz.so # MINIZ_LIBRARIES, the library to link against # MINIZ_FOUND, If false, do not try to use miniz # # This currently works probably only for Linux FIND_PATH ( MINIZ_INCLUDE_DIR miniz.h /usr/local/include /usr/include ) FIND_LIBRARY ( MINIZ_LIBRARIES libminiz.so libminiz.a libminiz.so.2 libminiz.so.0.1 /usr/local/lib /usr/local/lib64 /usr/lib /usr/lib64 ) GET_FILENAME_COMPONENT( MINIZ_LIBRARY_DIR ${MINIZ_LIBRARIES} PATH ) SET ( MINIZ_FOUND "NO" ) IF ( MINIZ_INCLUDE_DIR ) IF ( MINIZ_LIBRARIES ) SET ( MINIZ_FOUND "YES" ) ENDIF ( MINIZ_LIBRARIES ) ENDIF ( MINIZ_INCLUDE_DIR ) MARK_AS_ADVANCED( MINIZ_LIBRARY_DIR MINIZ_INCLUDE_DIR MINIZ_LIBRARIES ) libwebsockets-3.2.1/cmake/FindOpenSSLbins.cmake000066400000000000000000000012771357643561300214230ustar00rootroot00000000000000 if(OPENSSL_FOUND) find_program(OPENSSL_EXECUTABLE openssl openssl.exe bin/openssl.exe HINTS ${_OPENSSL_ROOT_HINTS} PATH /usr/bin/ bin/ DOC "Openssl executable") mark_as_advanced(OPENSSL_EXECUTABLE) # On Windows, we need to copy the OpenSSL dlls # to the output directory. if(WIN32) set(OPENSSL_BIN_FOUND 0) find_file(LIBEAY_BIN NAMES libeay32.dll HINTS ${_OPENSSL_ROOT_HINTS} PATH_SUFFIXES bin) find_file(SSLEAY_BIN NAMES ssleay32.dll HINTS ${_OPENSSL_ROOT_HINTS} PATH_SUFFIXES bin) if(LIBEAY_BIN) if(SSLEAY_BIN) set(OPENSSL_BIN_FOUND 1) endif(SSLEAY_BIN) endif(LIBEAY_BIN) endif(WIN32) endif(OPENSSL_FOUND) libwebsockets-3.2.1/cmake/LibwebsocketsConfig.cmake.in000066400000000000000000000012031357643561300230030ustar00rootroot00000000000000# - Config file for the Libevent package # It defines the following variables # LIBWEBSOCKETS_INCLUDE_DIRS - include directories for FooBar # LIBWEBSOCKETS_LIBRARIES - libraries to link against # Get the path of the current file. get_filename_component(LWS_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) # Set the include directories. set(LIBWEBSOCKETS_INCLUDE_DIRS "@LWS__INCLUDE_DIRS@") # Include the project Targets file, this contains definitions for IMPORTED targets. include(${LWS_CMAKE_DIR}/LibwebsocketsTargets.cmake) # IMPORTED targets from LibwebsocketsTargets.cmake set(LIBWEBSOCKETS_LIBRARIES websockets websockets_shared) libwebsockets-3.2.1/cmake/LibwebsocketsConfigVersion.cmake.in000066400000000000000000000006021357643561300243530ustar00rootroot00000000000000set(PACKAGE_VERSION "@CPACK_PACKAGE_VERSION@") # Check whether the requested PACKAGE_FIND_VERSION is compatible if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") set(PACKAGE_VERSION_COMPATIBLE FALSE) else() set(PACKAGE_VERSION_COMPATIBLE TRUE) if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") set(PACKAGE_VERSION_EXACT TRUE) endif() endif() libwebsockets-3.2.1/cmake/UseRPMTools.cmake000077500000000000000000000133611357643561300206170ustar00rootroot00000000000000# # - Find tools needed for building RPM Packages # on Linux systems and defines macro that helps to # build source or binary RPM, the MACRO assumes # CMake 2.4.x which includes CPack support. # CPack is used to build tar.gz source tarball # which may be used by a custom user-made spec file. # # - Define RPMTools_ADD_RPM_TARGETS which defines # two (top-level) CUSTOM targets for building # source and binary RPMs # # Those CMake macros are provided by the TSP Developer Team # https://savannah.nongnu.org/projects/tsp # IF (WIN32) MESSAGE(STATUS "RPM tools not available on Win32 systems") ENDIF(WIN32) IF (UNIX) # Look for RPM builder executable FIND_PROGRAM(RPMTools_RPMBUILD_EXECUTABLE NAMES rpmbuild PATHS "/usr/bin;/usr/lib/rpm" PATH_SUFFIXES bin DOC "The RPM builder tool") IF (RPMTools_RPMBUILD_EXECUTABLE) MESSAGE(STATUS "Looking for RPMTools... - found rpmuild is ${RPMTools_RPMBUILD_EXECUTABLE}") SET(RPMTools_RPMBUILD_FOUND "YES") GET_FILENAME_COMPONENT(RPMTools_BINARY_DIRS ${RPMTools_RPMBUILD_EXECUTABLE} PATH) ELSE (RPMTools_RPMBUILD_EXECUTABLE) SET(RPMTools_RPMBUILD_FOUND "NO") MESSAGE(STATUS "Looking for RPMTools... - rpmbuild NOT FOUND") ENDIF (RPMTools_RPMBUILD_EXECUTABLE) # Detect if CPack was included or not IF (NOT DEFINED "CPACK_PACKAGE_NAME") MESSAGE(FATAL_ERROR "CPack was not included, you should include CPack before Using RPMTools") ENDIF (NOT DEFINED "CPACK_PACKAGE_NAME") IF (RPMTools_RPMBUILD_FOUND) SET(RPMTools_FOUND TRUE) # # - first arg (ARGV0) is RPM name # - second arg (ARGV1) is the RPM spec file path [optional] # - third arg (ARGV2) is the RPM ROOT DIRECTORY used to build RPMs [optional] # MACRO(RPMTools_ADD_RPM_TARGETS RPMNAME) # # If no spec file is provided create a minimal one # IF ("${ARGV1}" STREQUAL "") SET(SPECFILE_PATH "${CMAKE_BINARY_DIR}/${RPMNAME}.spec") ELSE ("${ARGV1}" STREQUAL "") SET(SPECFILE_PATH "${ARGV1}") ENDIF("${ARGV1}" STREQUAL "") # Verify whether if RPM_ROOTDIR was provided or not IF("${ARGV2}" STREQUAL "") SET(RPM_ROOTDIR ${CMAKE_BINARY_DIR}/RPM) ELSE ("${ARGV2}" STREQUAL "") SET(RPM_ROOTDIR "${ARGV2}") ENDIF("${ARGV2}" STREQUAL "") MESSAGE(STATUS "RPMTools:: Using RPM_ROOTDIR=${RPM_ROOTDIR}") # Prepare RPM build tree FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}) FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/tmp) FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/BUILD) FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/RPMS) FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/SOURCES) FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/SPECS) FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/SRPMS) # # We check whether if the provided spec file is # to be configure or not. # IF ("${ARGV1}" STREQUAL "") SET(SPECFILE_PATH "${RPM_ROOTDIR}/SPECS/${RPMNAME}.spec") SET(SPECFILE_NAME "${RPMNAME}.spec") MESSAGE(STATUS "No Spec file given generate a minimal one --> ${RPM_ROOTDIR}/SPECS/${RPMNAME}.spec") FILE(WRITE ${RPM_ROOTDIR}/SPECS/${RPMNAME}.spec "# -*- rpm-spec -*- Summary: ${RPMNAME} Name: ${RPMNAME} Version: ${CPACK_PACKAGE_VERSION} Release: 1 License: Unknown Group: Unknown Source: ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{CPACK_PACKAGE_VERSION}-1-root BuildRequires: cmake %define prefix /opt/${RPMNAME}-%{version} %define rpmprefix $RPM_BUILD_ROOT%{prefix} %define srcdirname %{name}-%{version} %description ${RPMNAME} : No description for now %prep %setup -q -n %{srcdirname} %build cd .. rm -rf build_tree mkdir build_tree cd build_tree cmake -DCMAKE_INSTALL_PREFIX=%{rpmprefix} ../%{srcdirname} make %{?_smp_mflags} %install cd ../build_tree make install %clean rm -rf %{srcdirname} rm -rf build_tree %files %defattr(-,root,root,-) %dir %{prefix} %{prefix}/* %changelog * Wed Feb 28 2007 Erk Generated by CMake UseRPMTools macros" ) ELSE ("${ARGV1}" STREQUAL "") SET(SPECFILE_PATH "${ARGV1}") GET_FILENAME_COMPONENT(SPECFILE_EXT ${SPECFILE_PATH} EXT) IF ("${SPECFILE_EXT}" STREQUAL ".spec") # This is a 'ready-to-use' spec file which does not need to be CONFIGURED GET_FILENAME_COMPONENT(SPECFILE_NAME ${SPECFILE_PATH} NAME) MESSAGE(STATUS "Simple copy spec file <${SPECFILE_PATH}> --> <${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}>") CONFIGURE_FILE( ${SPECFILE_PATH} ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME} COPYONLY) ELSE ("${SPECFILE_EXT}" STREQUAL ".spec") # This is a to-be-configured spec file GET_FILENAME_COMPONENT(SPECFILE_NAME ${SPECFILE_PATH} NAME_WE) SET(SPECFILE_NAME "${SPECFILE_NAME}.spec") MESSAGE(STATUS "Configuring spec file <${SPECFILE_PATH}> --> <${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}>") CONFIGURE_FILE( ${SPECFILE_PATH} ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME} @ONLY) ENDIF ("${SPECFILE_EXT}" STREQUAL ".spec") ENDIF("${ARGV1}" STREQUAL "") ADD_CUSTOM_TARGET(${RPMNAME}_srpm COMMAND cpack -G TGZ --config CPackSourceConfig.cmake COMMAND ${CMAKE_COMMAND} -E copy ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz ${RPM_ROOTDIR}/SOURCES COMMAND ${RPMTools_RPMBUILD_EXECUTABLE} -bs --define=\"_topdir ${RPM_ROOTDIR}\" --buildroot=${RPM_ROOTDIR}/tmp ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME} ) ADD_CUSTOM_TARGET(${RPMNAME}_rpm COMMAND cpack -G TGZ --config CPackSourceConfig.cmake COMMAND ${CMAKE_COMMAND} -E copy ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz ${RPM_ROOTDIR}/SOURCES COMMAND ${RPMTools_RPMBUILD_EXECUTABLE} -bb --define=\"_topdir ${RPM_ROOTDIR}\" --buildroot=${RPM_ROOTDIR}/tmp ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME} ) ENDMACRO(RPMTools_ADD_RPM_TARGETS) ELSE (RPMTools_RPMBUILD_FOUND) SET(RPMTools FALSE) ENDIF (RPMTools_RPMBUILD_FOUND) ENDIF (UNIX) libwebsockets-3.2.1/cmake/lws_config.h.in000066400000000000000000000117611357643561300203700ustar00rootroot00000000000000/* lws_config.h Generated from lws_config.h.in */ #ifndef NDEBUG #ifndef _DEBUG #define _DEBUG #endif #endif #define LWS_INSTALL_DATADIR "${CMAKE_INSTALL_PREFIX}/share" #define LWS_LIBRARY_VERSION_MAJOR ${LWS_LIBRARY_VERSION_MAJOR} #define LWS_LIBRARY_VERSION_MINOR ${LWS_LIBRARY_VERSION_MINOR} #define LWS_LIBRARY_VERSION_PATCH ${LWS_LIBRARY_VERSION_PATCH} /* LWS_LIBRARY_VERSION_NUMBER looks like 1005001 for e.g. version 1.5.1 */ #define LWS_LIBRARY_VERSION_NUMBER (LWS_LIBRARY_VERSION_MAJOR * 1000000) + \ (LWS_LIBRARY_VERSION_MINOR * 1000) + \ LWS_LIBRARY_VERSION_PATCH #define LWS_MAX_SMP ${LWS_MAX_SMP} #cmakedefine LWS_AVOID_SIGPIPE_IGN #cmakedefine LWS_BUILD_HASH "${LWS_BUILD_HASH}" #cmakedefine LWS_BUILTIN_GETIFADDRS #cmakedefine LWS_FALLBACK_GETHOSTBYNAME #cmakedefine LWS_HAS_INTPTR_T #cmakedefine LWS_HAS_GETOPT_LONG #cmakedefine LWS_HAVE__ATOI64 #cmakedefine LWS_HAVE_ATOLL #cmakedefine LWS_HAVE_BN_bn2binpad #cmakedefine LWS_HAVE_CLOCK_GETTIME #cmakedefine LWS_HAVE_EC_POINT_get_affine_coordinates #cmakedefine LWS_HAVE_ECDSA_SIG_set0 #cmakedefine LWS_HAVE_EVP_MD_CTX_free #cmakedefine LWS_HAVE_EVP_aes_128_wrap #cmakedefine LWS_HAVE_EVP_aes_128_cfb8 #cmakedefine LWS_HAVE_EVP_aes_128_cfb128 #cmakedefine LWS_HAVE_EVP_aes_192_cfb8 #cmakedefine LWS_HAVE_EVP_aes_192_cfb128 #cmakedefine LWS_HAVE_EVP_aes_256_cfb8 #cmakedefine LWS_HAVE_EVP_aes_256_cfb128 #cmakedefine LWS_HAVE_EVP_aes_128_xts #cmakedefine LWS_HAVE_LIBCAP #cmakedefine LWS_HAVE_HMAC_CTX_new #cmakedefine LWS_HAVE_MALLOC_H #cmakedefine LWS_HAVE_MALLOC_TRIM #cmakedefine LWS_HAVE_MALLOC_USABLE_SIZE #cmakedefine LWS_HAVE_mbedtls_net_init #cmakedefine LWS_HAVE_mbedtls_ssl_conf_alpn_protocols #cmakedefine LWS_HAVE_mbedtls_ssl_get_alpn_protocol #cmakedefine LWS_HAVE_mbedtls_ssl_conf_sni #cmakedefine LWS_HAVE_mbedtls_ssl_set_hs_ca_chain #cmakedefine LWS_HAVE_mbedtls_ssl_set_hs_own_cert #cmakedefine LWS_HAVE_mbedtls_ssl_set_hs_authmode #cmakedefine LWS_HAVE_NEW_UV_VERSION_H #cmakedefine LWS_HAVE_OPENSSL_ECDH_H #cmakedefine LWS_HAVE_PIPE2 #cmakedefine LWS_HAVE_PTHREAD_H #cmakedefine LWS_HAVE_RSA_SET0_KEY #cmakedefine LWS_HAVE_RSA_verify_pss_mgf1 #cmakedefine LWS_HAVE_SSL_CTX_get0_certificate #cmakedefine LWS_HAVE_SSL_CTX_set1_param #cmakedefine LWS_HAVE_SSL_CTX_set_ciphersuites #cmakedefine LWS_HAVE_SSL_EXTRA_CHAIN_CERTS #cmakedefine LWS_HAVE_SSL_get0_alpn_selected #cmakedefine LWS_HAVE_SSL_CTX_EVP_PKEY_new_raw_private_key #cmakedefine LWS_HAVE_SSL_set_alpn_protos #cmakedefine LWS_HAVE_SSL_SET_INFO_CALLBACK #cmakedefine LWS_HAVE__STAT32I64 #cmakedefine LWS_HAVE_STDINT_H #cmakedefine LWS_HAVE_SYS_CAPABILITY_H #cmakedefine LWS_HAVE_TLS_CLIENT_METHOD #cmakedefine LWS_HAVE_TLSV1_2_CLIENT_METHOD #cmakedefine LWS_HAVE_UV_VERSION_H #cmakedefine LWS_HAVE_X509_get_key_usage #cmakedefine LWS_HAVE_X509_VERIFY_PARAM_set1_host #cmakedefine LWS_LATENCY #cmakedefine LWS_LIBRARY_VERSION "${LWS_LIBRARY_VERSION}" #cmakedefine LWS_MINGW_SUPPORT #cmakedefine LWS_NO_CLIENT #cmakedefine LWS_NO_DAEMONIZE #cmakedefine LWS_NO_SERVER #cmakedefine LWS_OPENSSL_CLIENT_CERTS "${LWS_OPENSSL_CLIENT_CERTS}" #cmakedefine LWS_OPENSSL_SUPPORT #cmakedefine LWS_PLAT_OPTEE #cmakedefine LWS_PLAT_UNIX #cmakedefine LWS_ROLE_CGI #cmakedefine LWS_ROLE_DBUS #cmakedefine LWS_ROLE_H1 #cmakedefine LWS_ROLE_H2 #cmakedefine LWS_ROLE_RAW #cmakedefine LWS_ROLE_RAW_PROXY #cmakedefine LWS_ROLE_WS #cmakedefine LWS_SHA1_USE_OPENSSL_NAME #cmakedefine LWS_SSL_CLIENT_USE_OS_CA_CERTS #cmakedefine LWS_SSL_SERVER_WITH_ECDH_CERT #cmakedefine LWS_WITH_ABSTRACT #cmakedefine LWS_WITH_ACCESS_LOG #cmakedefine LWS_WITH_ACME #cmakedefine LWS_WITH_BORINGSSL #cmakedefine LWS_WITH_CGI #cmakedefine LWS_WITH_CUSTOM_HEADERS #cmakedefine LWS_WITH_DEPRECATED_LWS_DLL #cmakedefine LWS_WITH_DIR #cmakedefine LWS_WITH_ESP32 #cmakedefine LWS_WITH_EXTERNAL_POLL #cmakedefine LWS_WITH_FTS #cmakedefine LWS_WITH_GENCRYPTO #cmakedefine LWS_WITH_GENERIC_SESSIONS #cmakedefine LWS_WITH_HTTP2 #cmakedefine LWS_WITH_HTTP_BROTLI #cmakedefine LWS_WITH_HTTP_PROXY #cmakedefine LWS_WITH_HTTP_STREAM_COMPRESSION #cmakedefine LWS_WITH_IPV6 #cmakedefine LWS_WITH_JOSE #cmakedefine LWS_WITH_LEJP #cmakedefine LWS_WITH_LIBEV #cmakedefine LWS_WITH_LIBEVENT #cmakedefine LWS_WITH_LIBUV #cmakedefine LWS_WITH_LWSAC #cmakedefine LWS_WITH_MBEDTLS #cmakedefine LWS_WITH_MINIZ #cmakedefine LWS_WITH_NETWORK #cmakedefine LWS_WITH_NO_LOGS #cmakedefine LWS_WITHOUT_CLIENT #cmakedefine LWS_WITHOUT_EXTENSIONS #cmakedefine LWS_WITHOUT_SERVER #cmakedefine LWS_WITH_PEER_LIMITS #cmakedefine LWS_WITH_PLUGINS #cmakedefine LWS_WITH_POLARSSL #cmakedefine LWS_WITH_POLL #cmakedefine LWS_WITH_RANGES #cmakedefine LWS_WITH_SELFTESTS #cmakedefine LWS_WITH_SEQUENCER #cmakedefine LWS_WITH_SERVER_STATUS #cmakedefine LWS_WITH_SMTP #cmakedefine LWS_WITH_SOCKS5 #cmakedefine LWS_WITH_STATEFUL_URLDECODE #cmakedefine LWS_WITH_STATS #cmakedefine LWS_WITH_STRUCT_SQLITE3 #cmakedefine LWS_WITH_SQLITE3 #cmakedefine LWS_WITH_THREADPOOL #cmakedefine LWS_WITH_TLS #cmakedefine LWS_WITH_UNIX_SOCK #cmakedefine LWS_WITH_ZIP_FOPS #cmakedefine USE_OLD_CYASSL #cmakedefine USE_WOLFSSL ${LWS_SIZEOFPTR_CODE} libwebsockets-3.2.1/cmake/lws_config_private.h.in000066400000000000000000000066731357643561300221300ustar00rootroot00000000000000/* lws_config_private.h.in. Private compilation options. */ #ifndef NDEBUG #ifndef _DEBUG #define _DEBUG #endif #endif /* Define to 1 to use CyaSSL as a replacement for OpenSSL. * LWS_OPENSSL_SUPPORT needs to be set also for this to work. */ #cmakedefine USE_CYASSL /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_FCNTL_H /* Define to 1 if you have the `fork' function. */ #cmakedefine LWS_HAVE_FORK /* Define to 1 if you have the `getenv’ function. */ #cmakedefine LWS_HAVE_GETENV /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_IN6ADDR_H /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #cmakedefine LWS_HAVE_MALLOC /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #cmakedefine LWS_HAVE_MEMSET /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_NETINET_IN_H /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #cmakedefine LWS_HAVE_REALLOC /* Define to 1 if you have the `socket' function. */ #cmakedefine LWS_HAVE_SOCKET /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_STDINT_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_STDLIB_H /* Define to 1 if you have the `strerror' function. */ #cmakedefine LWS_HAVE_STRERROR /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_STRING_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_SYS_PRCTL_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_SYS_SOCKIO_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_UNISTD_H #cmakedefine LWS_HAVE_TCP_USER_TIMEOUT /* Define to 1 if you have the `vfork' function. */ #cmakedefine LWS_HAVE_VFORK /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_VFORK_H /* Define to 1 if `fork' works. */ #cmakedefine LWS_HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #cmakedefine LWS_HAVE_WORKING_VFORK /* Define to 1 if execvpe() exists */ #cmakedefine LWS_HAVE_EXECVPE /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_ZLIB_H #cmakedefine LWS_HAVE_GETLOADAVG /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR // We're not using libtool /* Define to rpl_malloc if the replacement function should be used. */ #cmakedefine malloc /* Define to rpl_realloc if the replacement function should be used. */ #cmakedefine realloc /* Define to 1 if we have getifaddrs */ #cmakedefine LWS_HAVE_GETIFADDRS /* Define if the inline keyword doesn't exist. */ #cmakedefine inline ${inline} #cmakedefine LWS_WITH_ZLIB #cmakedefine LWS_HAS_PTHREAD_SETNAME_NP /* Defined if you have the header file. */ #cmakedefine LWS_HAVE_INTTYPES_H libwebsockets-3.2.1/component.mk000066400000000000000000000031731357643561300167310ustar00rootroot00000000000000COMPONENT_DEPENDS := mbedtls openssl #COMPONENT_ADD_INCLUDEDIRS := ../../../../../../../../../../../../../../../../../../../../$(COMPONENT_BUILD_DIR)/include COMPONENT_OWNBUILDTARGET := 1 CROSS_PATH1 := $(shell which xtensa-esp32-elf-gcc ) CROSS_PATH := $(shell dirname $(CROSS_PATH1) )/.. # detect MSYS2 environment and set generator flag if found # also set executable extension to .exe so that tools can be properly found # and disable bundled zlib MSYS_VERSION = $(if $(findstring Msys, $(shell uname -o)),$(word 1, $(subst ., ,$(shell uname -r))),0) ifneq ($(MSYS_VERSION),0) MSYS_FLAGS = -DLWS_WITH_BUNDLED_ZLIB=0 -DEXECUTABLE_EXT=.exe -G'MSYS Makefiles' endif # -DNDEBUG=1 after cflags stops debug etc being built .PHONY: build build: cd $(COMPONENT_BUILD_DIR) ; \ echo "doing lws cmake" ; \ cmake $(COMPONENT_PATH) -DLWS_C_FLAGS="$(CFLAGS) -DNDEBUG=1" \ -DIDF_PATH=$(IDF_PATH) \ -DCROSS_PATH=$(CROSS_PATH) \ -DBUILD_DIR_BASE=$(BUILD_DIR_BASE) \ -DCMAKE_TOOLCHAIN_FILE=$(COMPONENT_PATH)/contrib/cross-esp32.cmake \ -DCMAKE_BUILD_TYPE=RELEASE \ -DLWS_MBEDTLS_INCLUDE_DIRS="${IDF_PATH}/components/openssl/include;${IDF_PATH}/components/mbedtls/mbedtls/include;${IDF_PATH}/components/mbedtls/port/include" \ -DLWS_WITH_STATS=0 \ -DLWS_WITH_HTTP2=1 \ -DLWS_WITH_RANGES=1 \ -DLWS_WITH_ACME=1 \ -DLWS_WITH_ZLIB=1 \ -DLWS_WITH_ZIP_FOPS=1 \ -DZLIB_LIBRARY=$(BUILD_DIR_BASE)/zlib/libzlib.a \ -DZLIB_INCLUDE_DIR=$(COMPONENT_PATH)/../zlib \ -DLWS_WITH_ESP32=1 \ $(MSYS_FLAGS) ; \ make && \ cp ${COMPONENT_BUILD_DIR}/lib/libwebsockets.a ${COMPONENT_BUILD_DIR}/liblibwebsockets.a clean: myclean myclean: rm -rf ./build libwebsockets-3.2.1/contrib/000077500000000000000000000000001357643561300160325ustar00rootroot00000000000000libwebsockets-3.2.1/contrib/Android.mk000066400000000000000000000015501357643561300177440ustar00rootroot00000000000000# example Android Native Library makefile # contributed by Gregory Junker LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libwebsockets LOCAL_CFLAGS := -DLWS_BUILTIN_GETIFADDRS LWS_LIB_PATH := ../../../shared/libwebsockets/lib LOCAL_C_INCLUDES:= $(LOCAL_PATH)/$(LWS_LIB_PATH) LOCAL_SRC_FILES := \ $(LWS_LIB_PATH)/base64-decode.c \ $(LWS_LIB_PATH)/client.c \ $(LWS_LIB_PATH)/client-handshake.c \ $(LWS_LIB_PATH)/client-parser.c \ $(LWS_LIB_PATH)/daemonize.c \ $(LWS_LIB_PATH)/extension.c \ $(LWS_LIB_PATH)/extension-deflate-frame.c \ $(LWS_LIB_PATH)/extension-deflate-stream.c \ $(LWS_LIB_PATH)/getifaddrs.c \ $(LWS_LIB_PATH)/handshake.c \ $(LWS_LIB_PATH)/libwebsockets.c \ $(LWS_LIB_PATH)/md5.c \ $(LWS_LIB_PATH)/output.c \ $(LWS_LIB_PATH)/parsers.c \ $(LWS_LIB_PATH)/sha-1.c include $(BUILD_STATIC_LIBRARY) libwebsockets-3.2.1/contrib/abi/000077500000000000000000000000001357643561300165655ustar00rootroot00000000000000libwebsockets-3.2.1/contrib/abi/README.md000066400000000000000000000040101357643561300200370ustar00rootroot00000000000000ABI Compatility Tracking ======================== This directory contains files that can be used to generate an ABI compatibility timeline for libwebsockets. This gives users an idea of where the library has changed and can be used by the developers to see when incompatible changes have been introduced and either increase the library SO version or fix the changes. The tools used are the abi-\* family available at https://github.com/lvc/ and some example output is here: http://abi-laboratory.pro/tracker/timeline/libuv/ The tools download existing source tarballs and git repository to generate this data, so past versions are compared and in-development code can be compared as well. Although the application is not being included here, FYI the license is dual LGPL2 / GPL2 at your choice. Installation ------------ The abi monitoring stuff is now packaged in, eg, fedora, which is a lot easier than using the helper script. ``` # dnf install abi-tracker vtable-dumper Otherwise, the author provides an "easy way" to install the various tools he provides: git clone https://github.com/lvc/installer cd installer make prefix=/usr/local target=abi-tracker It will also list any dependencies that you need to install through normal means. (Although in the case of needing "elfutils-libelf-devel", it may crash during install of vtable-dumper without giving a nice list) Generating the output --------------------- Use the `lws-abi-update.sh` script to download the source files, build them and generate the output html. The output can be deployed to a directory on a web server for example. Modify the commented line in lws-abi-update.sh to do this. As it is configured, lws-abi-update.sh will only download new source - ones that it hasn't built before - so is suitable for use with a cron job. Viewing the output ------------------ The best place to start looking at the data is the `timeline/libwebsockets` directory. If your path is on a web server, navigate there, otherwise you could try: lynx timeline/libwebsockets/ libwebsockets-3.2.1/contrib/abi/libwebsockets.json000066400000000000000000000176611357643561300223330ustar00rootroot00000000000000{ "Name": "libwebsockets", "SourceUrl": "https://github.com/warmcat/libwebsockets/releases", "Git": "https://github.com/warmcat/libwebsockets", "Versions": [ { "Number": "current", "Installed": "installed/libwebsockets/current", "Source": "src/libwebsockets/current", "Changelog": "On", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "3.0.0", "Installed": "installed/libwebsockets/3.0.0", "Source": "src/libwebsockets/3.0.0/libwebsockets-3.0.0.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.4.2", "Installed": "installed/libwebsockets/2.4.2", "Source": "src/libwebsockets/2.4.2/libwebsockets-2.4.2.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.4.1", "Installed": "installed/libwebsockets/2.4.1", "Source": "src/libwebsockets/2.4.1/libwebsockets-2.4.1.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.4.0", "Installed": "installed/libwebsockets/2.4.0", "Source": "src/libwebsockets/2.4.0/libwebsockets-2.4.0.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.3.0", "Installed": "installed/libwebsockets/2.3.0", "Source": "src/libwebsockets/2.3.0/libwebsockets-2.3.0.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.2.2", "Installed": "installed/libwebsockets/2.2.2", "Source": "src/libwebsockets/2.2.2/libwebsockets-2.2.2.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.2.1", "Installed": "installed/libwebsockets/2.2.1", "Source": "src/libwebsockets/2.2.1/libwebsockets-2.2.1.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.2.0", "Installed": "installed/libwebsockets/2.2.0", "Source": "src/libwebsockets/2.2.0/libwebsockets-2.2.0.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.1.1", "Installed": "installed/libwebsockets/2.1.1", "Source": "src/libwebsockets/2.1.1/libwebsockets-2.1.1.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.1.0", "Installed": "installed/libwebsockets/2.1.0", "Source": "src/libwebsockets/2.1.0/libwebsockets-2.1.0.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.9", "Installed": "installed/libwebsockets/1.7.9", "Source": "src/libwebsockets/1.7.9/libwebsockets-1.7.9.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.8", "Installed": "installed/libwebsockets/1.7.8", "Source": "src/libwebsockets/1.7.8/libwebsockets-1.7.8.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.7", "Installed": "installed/libwebsockets/1.7.7", "Source": "src/libwebsockets/1.7.7/libwebsockets-1.7.7.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.6", "Installed": "installed/libwebsockets/1.7.6", "Source": "src/libwebsockets/1.7.6/libwebsockets-1.7.6.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.5", "Installed": "installed/libwebsockets/1.7.5", "Source": "src/libwebsockets/1.7.5/libwebsockets-1.7.5.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.4", "Installed": "installed/libwebsockets/1.7.4", "Source": "src/libwebsockets/1.7.4/libwebsockets-1.7.4.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.3", "Installed": "installed/libwebsockets/1.7.3", "Source": "src/libwebsockets/1.7.3/libwebsockets-1.7.3.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.2", "Installed": "installed/libwebsockets/1.7.2", "Source": "src/libwebsockets/1.7.2/libwebsockets-1.7.2.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.1", "Installed": "installed/libwebsockets/1.7.1", "Source": "src/libwebsockets/1.7.1/libwebsockets-1.7.1.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.0", "Installed": "installed/libwebsockets/1.7.0", "Source": "src/libwebsockets/1.7.0/libwebsockets-1.7.0.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.6.3", "Installed": "installed/libwebsockets/1.6.3", "Source": "src/libwebsockets/1.6.3/libwebsockets-1.6.3.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.6.2", "Installed": "installed/libwebsockets/1.6.2", "Source": "src/libwebsockets/1.6.2/libwebsockets-1.6.2.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.6.1", "Installed": "installed/libwebsockets/1.6.1", "Source": "src/libwebsockets/1.6.1/libwebsockets-1.6.1.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.5.1", "Installed": "installed/libwebsockets/1.5.1", "Source": "src/libwebsockets/1.5.1/libwebsockets-1.5.1.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }] } libwebsockets-3.2.1/contrib/abi/lws-abi-update.sh000077500000000000000000000003611357643561300217420ustar00rootroot00000000000000#!/bin/sh if [ ! -z "$1" ] ; then OUT=$1 else OUT="/tmp/lws-abi-track-htdocs" fi D=`dirname $0` if [ ! -z "$D" ] ; then D=$D/ fi J=$D"libwebsockets.json" abi-monitor -get -build-new $J abi-tracker -build $J abi-tracker -deploy $OUT $J libwebsockets-3.2.1/contrib/android-make-script.sh000077500000000000000000000072401357643561300222310ustar00rootroot00000000000000#!/bin/bash # # Build libwebsockets static library for Android # # path to NDK export NDK=/opt/ndk_r17/android-ndk-r17-beta2-linux-x86_64/android-ndk-r17-beta2 export ANDROID_NDK=${NDK} export TOOLCHAIN=${NDK}/toolchain export CORSS_SYSROOT=${NDK}/sysroot export SYSROOT=${NDK}/platforms/android-22/arch-arm set -e # Download packages libz, libuv, mbedtls and libwebsockets #zlib-1.2.8 #libuv-1.x #mbedtls-2.11.0 #libwebsockets-3.0.0 # create a local android toolchain API=${3:-24} $NDK/build/tools/make-standalone-toolchain.sh \ --toolchain=arm-linux-androideabi-4.9 \ --arch=arm \ --install-dir=`pwd`/android-toolchain-arm \ --platform=android-$API \ --stl=libc++ \ --force \ --verbose # setup environment to use the gcc/ld from the android toolchain export INSTALL_PATH=/opt/libwebsockets_android/android-toolchain-arm export TOOLCHAIN_PATH=`pwd`/android-toolchain-arm export TOOL=arm-linux-androideabi export NDK_TOOLCHAIN_BASENAME=${TOOLCHAIN_PATH}/bin/${TOOL} export PATH=`pwd`/android-toolchain-arm/bin:$PATH export CC=$NDK_TOOLCHAIN_BASENAME-gcc export CXX=$NDK_TOOLCHAIN_BASENAME-g++ export LINK=${CXX} export LD=$NDK_TOOLCHAIN_BASENAME-ld export AR=$NDK_TOOLCHAIN_BASENAME-ar export RANLIB=$NDK_TOOLCHAIN_BASENAME-ranlib export STRIP=$NDK_TOOLCHAIN_BASENAME-strip export PLATFORM=android export CFLAGS="D__ANDROID_API__=$API" # configure and build libuv [ ! -f ./android-toolchain-arm/lib/libuv.so ] && { cd libuv echo "=============================================>> build libuv" PATH=$TOOLCHAIN_PATH:$PATH make clean PATH=$TOOLCHAIN_PATH:$PATH make PATH=$TOOLCHAIN_PATH:$PATH make install echo "<<============================================= build libuv" cd .. } # configure and build zlib [ ! -f ./android-toolchain-arm/lib/libz.so ] && { cd zlib-1.2.8 echo "=============================================>> build libz" PATH=$TOOLCHAIN_PATH:$PATH make clean PATH=$TOOLCHAIN_PATH:$PATH make PATH=$TOOLCHAIN_PATH:$PATH make install echo "<<============================================= build libz" cd .. } # configure and build mbedtls [ ! -f ./android-toolchain-arm/lib/libmbedtls.so ] && { echo "=============================================>> build mbedtls" PREFIX=$TOOLCHAIN_PATH cd mbedtls-2.11.0 [ ! -d build ] && mkdir build cd build export CFLAGS="$CFLAGS -fomit-frame-pointer" PATH=$TOOLCHAIN_PATH:$PATH cmake .. -DCMAKE_TOOLCHAIN_FILE=`pwd`/../cross-arm-android-gnueabi.cmake \ -DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_PATH} \ -DCMAKE_BUILD_TYPE=RELEASE -DUSE_SHARED_MBEDTLS_LIBRARY=On PATH=$TOOLCHAIN_PATH:$PATH make clean PATH=$TOOLCHAIN_PATH:$PATH make SHARED=1 PATH=$TOOLCHAIN_PATH:$PATH make install echo "<<============================================= build mbedtls" cd ../.. } # configure and build libwebsockets [ ! -f ./android-toolchain-arm/lib/libwebsockets.so ] && { cd libwebsockets [ ! -d build ] && mkdir build cd build echo "=============================================>> build libwebsockets" PATH=$TOOLCHAIN_PATH:$PATH cmake .. -DCMAKE_TOOLCHAIN_FILE=`pwd`/../cross-arm-android-gnueabi.cmake \ -DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_PATH} \ -DLWS_WITH_LWSWS=1 \ -DLWS_WITH_MBEDTLS=1 \ -DLWS_WITHOUT_TESTAPPS=1 \ -DLWS_MBEDTLS_LIBRARIES="${INSTALL_PATH}/lib/libmbedcrypto.a;${INSTALL_PATH}/lib/libmbedtls.a;${INSTALL_PATH}/lib/libmbedx509.a" \ -DLWS_MBEDTLS_INCLUDE_DIRS=${INSTALL_PATH}/include \ -DLWS_LIBUV_LIBRARIES=${INSTALL_PATH}/lib/libuv.so \ -DLWS_LIBUV_INCLUDE_DIRS=${INSTALL_PATH}/include \ -DLWS_ZLIB_LIBRARIES=${INSTALL_PATH}/lib/libz.so \ -DLWS_ZLIB_INCLUDE_DIRS=${INSTALL_PATH}/include PATH=$TOOLCHAIN_PATH:$PATH make PATH=$TOOLCHAIN_PATH:$PATH make install echo "<<============================================= build libwebsockets" cd ../.. } libwebsockets-3.2.1/contrib/cross-aarch64.cmake000066400000000000000000000036571357643561300214260ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling on ARM. # # This can be used when running cmake in the following way: # cd build/ # cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake # # Target operating system name. set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) # Name of C compiler. set(CMAKE_C_COMPILER "aarch64-linux-gnu-gcc") set(CMAKE_CXX_COMPILER "aarch64-linux-gnu-g++") # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE} -O2) set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} -O2) endif() #-nostdlib SET(CMAKE_C_FLAGS "-DGCC_VER=\"\\\"$(GCC_VER)\\\"\" -DARM64=1 -D__LP64__=1 -Os -g3 -fpie -mstrict-align -DOPTEE_DEV_KIT=../../../../out/arm-plat-hikey/export-ta_arm64/include -I../../../../lib/libutee/include -fPIC -ffunction-sections -fdata-sections -I../../../../core/include" CACHE STRING "" FORCE) # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "/projects/aist-tb/arm64-tc/") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-3.2.1/contrib/cross-arm-android-gnueabi.cmake000066400000000000000000000033471357643561300237770ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling on ARM. # # This can be used when running cmake in the following way: # cd build/ # cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake # set(CROSS_PATH /opt/libwebsockets_android/android-toolchain-arm) # Target operating system name. set(CMAKE_SYSTEM_NAME Android) # Target build dynamic libs. set(BUILD_SHARED_LIBS ON) # Name of C compiler. set(CMAKE_C_COMPILER "${CROSS_PATH}/bin/arm-linux-androideabi-gcc") set(CMAKE_CXX_COMPILER "${CROSS_PATH}/bin/arm-linux-androideabi-g++") # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE} -O2) set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} -O2) endif() # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-3.2.1/contrib/cross-arm-linux-gnueabihf.cmake000066400000000000000000000032731357643561300240320ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling on ARM. # # This can be used when running cmake in the following way: # cd build/ # cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake # set(CROSS_PATH /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.02-01-20130221_linux) # Target operating system name. set(CMAKE_SYSTEM_NAME Linux) # Name of C compiler. set(CMAKE_C_COMPILER "${CROSS_PATH}/bin/arm-linux-gnueabihf-gcc") set(CMAKE_CXX_COMPILER "${CROSS_PATH}/bin/arm-linux-gnueabihf-g++") # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE} -O2) set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} -O2) endif() # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-3.2.1/contrib/cross-esp32.cmake000066400000000000000000000053261357643561300211250ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling on ARM. # # This can be used when running cmake in the following way: # cd build/ # cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake # # Target operating system name. set(CMAKE_SYSTEM_NAME Linux) # Name of C compiler. set(CMAKE_C_COMPILER "${CROSS_PATH}/bin/xtensa-esp32-elf-gcc${EXECUTABLE_EXT}") set(CMAKE_AR "${CROSS_PATH}/bin/xtensa-esp32-elf-ar${EXECUTABLE_EXT}") set(CMAKE_RANLIB "${CROSS_PATH}/bin/xtensa-esp32-elf-ranlib${EXECUTABLE_EXT}") set(CMAKE_LINKER "${CROSS_PATH}/bin/xtensa-esp32-elf-ld${EXECUTABLE_EXT}") # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE} -O2) set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} -O2) endif() SET(CMAKE_C_FLAGS "-nostdlib -Wall -Werror \ -I${BUILD_DIR_BASE}/include \ -I${IDF_PATH}/components/newlib/platform_include \ -I${IDF_PATH}/components/mdns/include \ -I${IDF_PATH}/components/heap/include \ -I${IDF_PATH}/components/driver/include \ -I${IDF_PATH}/components/spi_flash/include \ -I${IDF_PATH}/components/nvs_flash/include \ -I${IDF_PATH}/components/tcpip_adapter/include \ -I${IDF_PATH}/components/lwip/include/lwip/posix \ -I${IDF_PATH}/components/lwip/include/lwip \ -I${IDF_PATH}/components/lwip/include/lwip/port \ -I${IDF_PATH}/components/esp32/include/ \ -I${IDF_PATH}/components/bootloader_support/include/ \ -I${IDF_PATH}/components/app_update/include/ \ -I$(IDF_PATH)/components/soc/esp32/include/ \ -I$(IDF_PATH)/components/soc/include/ \ -I$(IDF_PATH)/components/vfs/include/ \ ${LWS_C_FLAGS} -Os \ -I${IDF_PATH}/components/nvs_flash/test_nvs_host \ -I${IDF_PATH}/components/freertos/include" CACHE STRING "" FORCE) # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-3.2.1/contrib/cross-ming.cmake000066400000000000000000000033531357643561300211210ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling on MingW. # # This can be used when running cmake in the following way: # cd build/ # cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross-ming.cmake # set(CROSS_PATH /usr/bin) # Target operating system name. set(CMAKE_SYSTEM_NAME Windows) set(BUILD_SHARED_LIBS OFF) # Name of C compiler. set(CMAKE_C_COMPILER "${CROSS_PATH}/x86_64-w64-mingw32-gcc") #set(CMAKE_CXX_COMPILER "${CROSS_PATH}/x86_64-w64-mingw32-g++") set(CMAKE_RC_COMPILER "${CROSS_PATH}/x86_64-w64-mingw32-windres") set(CMAKE_C_FLAGS "-Wno-error") # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE} -O2) set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} -O2) endif() # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-3.2.1/contrib/cross-openwrt-makefile000066400000000000000000000074401357643561300223620ustar00rootroot00000000000000# # libwebsockets makefile for openwrt # include $(TOPDIR)/rules.mk PKG_NAME:=libwebsockets PKG_VERSION:=2014-03-01 PKG_RELEASE=$(PKG_SOURCE_VERSION) PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/warmcat/libwebsockets.git PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) PKG_SOURCE_VERSION:=388dc7d201d8d123841869fb49ec4d94d6dd7f54 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz CMAKE_INSTALL:=1 include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk CMAKE_OPTIONS += -DLWS_OPENSSL_CLIENT_CERTS=/etc/ssl/certs CMAKE_OPTIONS += -DLWS_OPENSSL_SUPPORT=ON CMAKE_OPTIONS += -DLWS_WITH_SSL=ON CMAKE_OPTIONS += -DLWS_WITHOUT_TESTAPPS=$(if $(CONFIG_PACKAGE_libwebsockets-examples),"OFF","ON") # for wolfssl, define these in addition to LWS_OPENSSL_SUPPORT and # edit package/libs/wolfssl/Makefile to include --enable-opensslextra # CMAKE_OPTIONS += -DLWS_WITH_WOLFSSL=ON # CMAKE_OPTIONS += -DLWS_WOLFSSL_LIBRARIES=$(STAGING_DIR)/usr/lib/libwolfssl.so # CMAKE_OPTIONS += -DLWS_WOLFSSL_INCLUDE_DIRS=$(STAGING_DIR)/usr/include # for cyassl, define these in addition to LWS_OPENSSL_SUPPORT and # edit package/libs/wolfssl/Makefile to include --enable-opensslextra # CMAKE_OPTIONS += -DLWS_WITH_CYASSL=ON # CMAKE_OPTIONS += -DLWS_CYASSL_LIBRARIES=$(STAGING_DIR)/usr/lib/libcyassl.so # CMAKE_OPTIONS += -DLWS_CYASSL_INCLUDE_DIRS=$(STAGING_DIR)/usr/include # other options worth noting # CMAKE_OPTIONS += -DLWS_WITHOUT_EXTENSIONS=ON # CMAKE_OPTIONS += -DLWS_WITHOUT_DAEMONIZE=ON # CMAKE_OPTIONS += -DLWS_WITHOUT_SERVER=ON # CMAKE_OPTIONS += -DLWS_WITHOUT_DEBUG=ON define Package/libwebsockets/Default SECTION:=libs CATEGORY:=Libraries TITLE:=libwebsockets DEPENDS:=+zlib +libopenssl endef define Package/libwebsockets $(call Package/libwebsockets/Default) TITLE+= (libraries) endef define Package/libwebsockets/description libwebsockets This package contains libwebsocket libraries endef define Package/libwebsockets-examples $(call Package/libwebsockets/Default) DEPENDS:=libwebsockets TITLE+= (examples) endef define Package/libwebsockets-examples/description libwebsockets examples This package contains libwebsockets examples endef define Package/libwebsockets/install $(INSTALL_DIR) $(1)/usr/lib $(CP) $(PKG_INSTALL_DIR)/usr/lib/libwebsockets.so* $(1)/usr/lib/ endef define Package/libwebsockets-examples/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libwebsockets-test-client $(1)/usr/bin/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libwebsockets-test-echo $(1)/usr/bin/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libwebsockets-test-fraggle $(1)/usr/bin/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libwebsockets-test-ping $(1)/usr/bin/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libwebsockets-test-server $(1)/usr/bin/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libwebsockets-test-server-extpoll $(1)/usr/bin/ $(INSTALL_DIR) $(1)/usr/share/libwebsockets-test-server $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/libwebsockets-test-server/favicon.ico $(1)/usr/share/libwebsockets-test-server/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/libwebsockets-test-server/leaf.jpg $(1)/usr/share/libwebsockets-test-server/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/libwebsockets-test-server/libwebsockets.org-logo.png $(1)/usr/share/libwebsockets-test-server/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/libwebsockets-test-server/libwebsockets-test-server.key.pem $(1)/usr/share/libwebsockets-test-server/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/libwebsockets-test-server/libwebsockets-test-server.pem $(1)/usr/share/libwebsockets-test-server/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/libwebsockets-test-server/test.html $(1)/usr/share/libwebsockets-test-server/ endef $(eval $(call BuildPackage,libwebsockets)) $(eval $(call BuildPackage,libwebsockets-examples)) libwebsockets-3.2.1/contrib/cross-w32.cmake000066400000000000000000000034021357643561300205750ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling on 32bit Windows platforms. # # This can be used when running cmake in the following way: # cd build/ # cmake .. -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-w32.cmake -DLWS_WITH_SSL=0 # set(CROSS_PATH /opt/mingw32) # Target operating system name. set(CMAKE_SYSTEM_NAME Windows) # Name of C compiler. set(CMAKE_C_COMPILER "${CROSS_PATH}/bin/i686-w64-mingw32-gcc") set(CMAKE_CXX_COMPILER "${CROSS_PATH}/bin/i686-w64-mingw32-g++") set(CMAKE_RC_COMPILER "${CROSS_PATH}/bin/i686-w64-mingw32-windres") set(CMAKE_C_FLAGS "-Wno-error") # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE} -O2) set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} -O2) endif() # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-3.2.1/contrib/cross-w64.cmake000066400000000000000000000034101357643561300206010ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling on 64bit Windows platforms. # # This can be used when running cmake in the following way: # cd build/ # cmake .. -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-w64.cmake -DLWS_WITH_SSL=0 # set(CROSS_PATH /opt/mingw64) # Target operating system name. set(CMAKE_SYSTEM_NAME Windows) # Name of C compiler. set(CMAKE_C_COMPILER "${CROSS_PATH}/bin/x86_64-w64-mingw32-gcc") set(CMAKE_CXX_COMPILER "${CROSS_PATH}/bin/x86_64-w64-mingw32-g++") set(CMAKE_RC_COMPILER "${CROSS_PATH}/bin/x86_64-w64-mingw32-windres") set(CMAKE_C_FLAGS "-Wno-error") # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE} -O2) set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} -O2) endif() # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-3.2.1/doc-assets/000077500000000000000000000000001357643561300164375ustar00rootroot00000000000000libwebsockets-3.2.1/doc-assets/abstract-overview.svg000066400000000000000000004166511357643561300226440ustar00rootroot00000000000000 image/svg+xml libwebsockets-3.2.1/doc-assets/accept-flow-1.svg000066400000000000000000000260041357643561300215240ustar00rootroot00000000000000 httpprocessing Connection Fallbackrole +protocol Invalid Methodin "http header" Fallbackset and enabledon vhost? Error Yes Yes LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG plain http port This flow happensbefore any Host: headers.Indeed there are no Host:headers if the connectionis not actually http.Therefore it occurs on thefirst vhost that listenson the connection port. libwebsockets-3.2.1/doc-assets/accept-flow-2.svg000066400000000000000000000407441357643561300215340ustar00rootroot00000000000000 Yes httpprocessing Connection Issue httpredirect tohttps:// TLS headerlooks bad? Redirect httpto https enabled? Yes Yes Allow httpon https enabled? Error Yes Fallbackset and enabledon vhost? LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG Fallbackrole +protocol TLS port This flow happensbefore any vhost selectionusing SNI or Host: headers.Therefore it occurs on thefirst vhost that listenson the connection port. libwebsockets-3.2.1/doc-assets/accept-flow-3.svg000066400000000000000000000100001357643561300215130ustar00rootroot00000000000000 Connection Specifiedrole +protocol LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG raw-only port libwebsockets-3.2.1/doc-assets/http-proxy-overview.svg000066400000000000000000000447521357643561300231760ustar00rootroot00000000000000 LWSvhost listensocket unixsocket localserverprocess tcpsocket remoteserverprocess tcpsocket h1/h2 h1 proxy h1 proxy chosenby URL chosenby URL lws http proxying overview Same physical server libwebsockets-3.2.1/doc-assets/lws-crypto-overview.svg000066400000000000000000000174471357643561300231640ustar00rootroot00000000000000 OpenSSL mbedTLS and derivitives genhash, genrsa, genaes, genec JOSE, JWS, JWK, JWE TLS-library-specificand cipher-specifickeys using EVPor bignum TLS library-independentmetadata +binary key elements JWK JSON keycreation and parsing libwebsockets libwebsockets-3.2.1/doc-assets/lws-fts.svg000066400000000000000000000220211357643561300205540ustar00rootroot00000000000000 OriginalTextfile OriginalTextfile OriginalTextfile IndexFile SearchAction Keyword Auto-comp-lete Result lwsac libwebsockets-3.2.1/doc-assets/lws-overview.png000066400000000000000000023442531357643561300216330ustar00rootroot00000000000000‰PNG  IHDRź e-ésBIT|dˆ pHYs.™.™ŻŽIWtEXtSoftwarewww.inkscape.org›ī< IDATxœģw|Õś‡Ÿ³%=ō¢  "" *Šh@ŗ•(ö‚åŚĄ†?{ÅvķX®ż^Į‚Š("DDTQ¤)RBHĻÖóūcvŁÉffK¶'ēł|’3gĪ–ģĢ÷{Ž÷=…B”P(éD?œ £ķHՐ …B”PD€é5\”P( EŒč„»RĘ” Q/—B”P( @ …B”PDƒOŌ+…šZDąõV( …B!ŹP( …”°o¦(£@”P(ŠŹP( EĖ@ |… BūG}4 …BŃģQ€B”P(š”Tœ"ž(s@”P(Ķ e( …"³ha3łS2ģZ}GĖyk”9 P(ŠŒ#£n* …Bтh³ł™&ŽÓ…L7”1 P(ŠtEݘ( …"µdЌ¾ōéI¦ŹP( EŖQ72 …B”Hi<«ŸjqG*Ož¦¤ųüéj(S@”P(ÉD …B”H i&ö“%𛻐O6É2ŅÉ P¦€B”P(…2 …B;i"ö%ņ•ØĻ e¤ƒ9 L…B”PÄe( …"j¤LŻõ#Ž"?Åż[zŸ‚ŁŒx›©4„2 …B%yc”P(Š$’¢Łżx żT üLļéBŖL„x©0T”€B”P(Ā”nN …BѐžXÅ~²D¾õéI²Ģ‚X́d›ŹP( E0źFF”P(Z:Iüé,ō•øoŽ$Ņ$Čc@ …B”P7; …BŃŅH’ąEģ'Bč7?>Õā­T N$Ā ˆÅH†)  …B”hy4‹›!…B”P„ Ķ<Å~:‹ütīéF: ń4šj (C@”P(ń mo” …BŃD’ ų›"ö››ŠW‚>µ¤ƒajc Ѧ€2 …¢ł‘ņ(…B”Pā‹žh¼Ä~*„¾öĶ‹Tń2¢5n(3@”P(2e( E&ŅĢ2…~¦üŅ æF§hæhI¦A«1N†€ŠP(ŠĢ$£o. …¢%!eb¾³›£ŲO‘_Ŗ®±1QœB2́ę` (3@”P(2us¢P(iL:ˆžX"Å~*D~©ŗn¦%Å)0 iÄb Dc$*B@„ ( Eś¢nd …"HPh2¢Ä~²„~©ŗ&6kŠ“d$ŹhŖ)jC@E( Ez”nv …"Õ$@ōgŖąO¤Ų/UׯÅ{ŗ 72Ł<(ŽćŲ3ĮPf€B”Pd{c„P(iKE¢fłć%ųć%öK3äzäõJЧ~Ć SĢ‚ā83^¦@“†@*¢” P(ń%#nø …"ķI²čĻdĮ_š¦×%ī›'énĒa\élÄĖ P5 …">¤åM˜B”Pd-@ōĒ*ųKÓč:£¾Āˆt4ŠcK< e( Eó$mnĢ …"SˆW’x‹žXs˜ŻW"_OŅÅ(Nƒ(h ¤šŹP(ŠØP€B”PD€ż)Mį5D }E*Ic 8†s+3@”P(Z.ŹP( 3āāOŃßŅæśŠL"•Ę@qÉ2TŠ€B”P˜£ …B”"³żįD²fł3IšÆŃŅ„¾Ńó]ŁĢ®Ķ} ŻR£†Ķ˜„$ß(N‘!Ļ耸˜ŹP(Š4«› …B”h2q˜ķĻtŃ_šÄkBsūśēÓÜD|¢9j7śļ,ć@,w2Ł’øŽĶŸWSŁ#Œ уžÆćW€]šÅ_ü’œ‘ÅFŗF $2J 8ƒĢe( Ecšå†B”h”ÄꏣždˆžŅ"ų3yFŲŽō޲†Ÿ:ģĪ!/oŠ~Vsż”tüå;6“)āč×¶ņ-„7Ņ‘tŒH'C Qf@"£Tz€B”hNdÜM•B”PĖlæżé!ś3aV"Ÿ”’čiģOOd`ĻmřļTšn‚‡–Ń<~łŸž2€Vm9ö|Ķń™`¤K“€2b4” P(2œ“æŁR(t  Ō©Ž"Õ$Jų7gџ‚?]Å~¼Ćļµ°RJzfåpū¬:ŒgßŃŠ+Źöæ'd”ٲq~jKnkN{g'ļĒūéh¤ƒ)(C 8Ģe(Š–HŚŻ€)>öFūū~ocŠī`š3°ųØNŅ© †0’TĢö§Zō§Zš§“ŲOv~ż±6>FZķ¼ü”“‹ŚD+Ī› F&ĆXĮ6 0' ß­aF²Ē”.AŖMDÅ 6R Ņ E¦‘7eÉFj3ČVAdE™Ic?ąąT {ūp󁧁I“:EģdŅlKżé ųSUH/XĢ÷Éā—‹‰ĀŹāÕn†„bL™Do 뤤sn.W-Æå¹ąż©ˆL€Ō©4Z¢ ¢ Es§YR{~GcŃf’:_“Z“äåĄB`¾€ŸR0Ō–Ī(ą`Hœūżø˜22–ę*üKćųż›*ĮŸj±Ÿ,”ßŌYś¾y\ęØcŖl]ķm²©Łbčmįg)镕Ć-+źx¤©ż$Ė(H„1*S ކ@q})#@”P(āC³4$׿LņĄ—„f(Ē0ą.`p‚Ļó pZŖ€"ChŖšW¢?q¤Jš'Zč'* ’ąvŒØ*ēC€1ćéųěT&čTQ3’#¬÷^ƞ;wŠ=ŪJķn=YūĪ7lkjƒ»2°l—{Ż&%{µBšGVoŒĻ‹¾>5«·…Ƅ䠬,ī[įą®¦Ž%‰6Ra ¤ĀPf@x” P(Ņ‘feųfü'·E1v·möųyĪXǦh@0ŒsbD-pšbĻ©ˆ–å÷Ē[ų·џ ĮŸ(±ŸŠ\ūūŠcŻjmmūŽ]9ā«MüŖż¦8<÷m›B÷ńÜõ“śņ=®q:ų’vŗ]n«•Ļ:ļÅMS?gu¤ē[æĖĶ'p—ĖĮd³6Bš[—½9£Ō÷Z˜ŃŪĘ<éįH»'V:¹>Ņ1ēD™É6’mdА2#@ūG™ …"-h6€„ÖĄ’€“ćÜõ2ąTĹߖJą “tŒTšpcŠĪ­0#EĀ?Q³ż„*ś“-ųć-öÓ© Ž&ßĻÅzŻ(vYł­8÷£ s­b&ÜW~õįKķØbØWҁ3;›E=śóįÆG7cƱt_÷3ļJIŸ] v ÉC«PSŠŽó^ü‰Ł‘ōyÖŽÜć’ĀŹ’Ü<ž›—Ļj§—œś †9\ “‚æö=œĮSf²Õ¬Æ3öä=‡QV;Ó^_ĖD€"7²Ūžé!œām$ÓH¦!*3 ŽQŹP(Ķ•faHML¾ōHŠ)*³Z(§¢É A+ĢW˜āqLīLńŠdįßÜgū “ųݜ›¤sÅSģ§JčG3Cļō§ug™”ģ“•ĆŻÆžĪæĶŚ?w=­}ĄV UÓWņĄ5ĆŲēļµ¼ = 48¤"ƀ¦–ņJ$ćłe1¶’\Ķéå` 6+‡4ˆé<ĢŽŹ2ÄŻgstÕv”’żšN]~×ū,ÕēĶĒ2Øl Ÿ»ēīūˆk[µo(n¦œĪ¾›×š‘”ģfµ2÷õuœdÖß=xŁćę«·^_Ėy‘ Śudōægó„Q—ĪÓēY­Ģyś[N Žß¶Sl‚©Č­Ÿ “ “LdFdŗ Œ…BŃČh@Āhą=”‹‰¦!“õę‘3˜‹–ūŸ.Ō‡?§z -‰TöK„š/Ķ ŃŸI‚?b?‘Ąæł$ŗüµŠc!ɶZYŪŗŽó!ßLĢ}.WY­,™õ-CĶśY4ū7²ąŒ‹éōę’xÓć”8'‡ŪÆŗ“'ŽĖßvźõ“żā ¦y<Œ<]»2äŁ÷ĶW°)/Cœ7šŸ¤d/»—ŽżšĖĶŚN:}×’ĮĄZXȄ×ė§›.a·_–² °ęrĮ ˜źu:é0ęx<eµņé¬o)1jSr8ŗ\L“ZłņéoŖæpDkųĶHœA/S ¹É6” P(kH8mé¾hg”?fK€ hÆAO“åĻF»_şĄŖ¢ųŽŻCõĀ!¬“’¢Ü|žÆ®†‡³rų÷;‹øĒØķĖO‘’öt¾’’^V+ g}˳~'Ėįe[˜Š„ G>÷ĖBć¤A¼źq3Ījå«Yß2ŅØĶ™C9µŖŠi€ó„3čžÆkC_ĻŹųŖ*¦ĪQ£ŲsҽT·9y0w8\/,üšĮ’Č–…ż;|S"5 iÄĆH¤! 3 ^5ŠÓ,*@ …"]ÉH@B{4ńÖ-ŠĆ¾& ķ’P}ļ‡VLššĶžpYēn©XŠR&bšÉŃ!R“h‚åh÷Nہl`_ /pš™)WOĘi|Š šƒš/ĶџČ\žX¢Ä~"„~łD—Ś?’źė¹@ž¶Ł˜mµ²Ž#)r;+%{ Į¦Vm¹¶b‡6;>lŻ®yr³>O8”o¤—”Ÿ>™żŽ<Žz³ö7•p\e9ÆtīFńmÆ`ØÕ®=–«źk¹G¶Ü?‹^­B Œ›OfTÅŽ¼ū ¤Ļ•ńWp›«GóˆĖĮÅĀĀņ’|~)×ļ„ŻŅyü X 9’©·k°‹Odr}=w Įź¾ć p}FJSM‚pŽ€ų™±š‰4]; Łf€2 EKĖź4‘ˆNü?\'Ą®”€_}©æ€élͦų'Š1“D&ńļf+LŚüƒfüĶÄy8.‚¾oA3|jc„b™.üKć,ś!ž9Ė‹ąO„Ų·Šæu,{ü³žƒ]: ]ŗóĶŌ—XĮń—ŸJŸśzn°ŚyóŌó™xęŁļĻæäާoāFg=7T–ó„’ńå«éµ”JK 0Āba³G3¬6;‡’“Ÿdö”sŲ %ŻĖ¶q.'ūś_Nü ;•/ß{–z gĆoŒ¦·ńŗé `³²2\ÜĀŽę³Rzé[ļd@Uo·Ö]Æaž†*,žĒ ęcnŪ>üó gč˜śˆēōŪl ÷ū?ƒ±F ż Ec ’żĘÓŠ‰ˆš}W ˆĶ (Ս³8DžėA$F€’:cfųÆSĮF€’ŗ­ąæŽ*#@”PěŒ3$”ć¢8ä.Yaš]ؔšišˆI“,“5ģßF¢|ŻMX œ–²)æĒēĻ:M¤pšq ˆ‘¦’dä÷'k¶?™¢?"Õ!é$ųć)ösunéblŽĢ9u5\Ž`<ąxKēÕ3.fņųó©3ėÆÜ®õ÷÷F®,ĀĀŹ ·pŁĮGćŌ Ö^żqOĆ=W¦ŠåäŪ×V±7„0[üłHö\¾ ÷üŠŗāµeń”ĖĮD·““€’3l(é`±±&\ŸĆO£öƒųŁćį·fLnćõ²›6h6GŅ'€ÅĀ*—¾^7}ö ÕŚpõ­Ź2æ«Ŗūšj˜Ń ™zcĄČ€čąæ³t0V‚šfénœµ7» čCŁą0j£æF„3b5|m"~.ŹP(ń&£ ©…zOāWÄæ„vh³ÓG”Żh| Ü/`‹®Łaś>e„āf“×9ę§£-ĆŲ^6ŗįæP@L$Sų§c˜æ_ų·ŃOĮNģ7Ečqł©ōŁō'Ó¤Ü%ßĪU„šcq˜ć# Š_‹ŒĢ3#Ą÷XŌQŹP(ń"£ “„ŪŗGŲv01ųA {£ÜM÷ša@±„ƒEąĖø&L’ūIČ˜Ļµ`v®ˆ±EĄÉÄžś.@3k>Ä\lōóm!×¼V4&“…iĻö'Bō› žŪFÓīīO“źóFÄKšĒcfæPFģ3k9›žä)ŁM¶ääsļų+xmųéZxżœ—É}ū žp¹8Ććę”+‡ńڽoó™Y3Ÿd ¾ꮽĶہ6“žÉ+L­«Ń¢É<s ŗaµ±Å??™›EE$b½ßü°p.[6q46$“°X"/^kµó»ĖR²§aI€ęéSĮć·ŚŲŠ¤¤½Ńs³Xv]wmóf’7h u‘¤,DJ(ƒ€2óć‚́øE tjųk,¦@S DD$Ņ hJTĄ˜BKčņńN~„ä§(#@”P¤cH­ ÜµQr‡0ž9~ˆ†āßO“ā‚Ū}æ· Óæč¬bL-…³‰miʵh!ü‘ˆ+Z”Ąéh7åó€GƒŽżxĶ@2c ʈ˜tžÉšķ÷/Ż—É¢ ¤5§:Ŗøķ{r ’ńd žhÄž¢y؟{ˆ”ŽZö•’œœ|–_rŸė—ĘÓćÕ8zŽ·_āźźJ.2‚ Ē_ĻNĢźyõy…Lzq IɾU;™ ę¾¾f—ˆÆś×l õŖ+‡ ꭅs¹ČõzŲ;”Ø·g±¹Ī'-9ĘĻ-˜c'²óĖĻX'%=\õŖ­‘Æxb±³I›ļē‘3px£z"č’°Ųģ» fĻ‹‚a浐’]ēĢü¾f%łƒĘPiߦń0ŒŒh£‚M­2E€d™d-)ųč%d}2sŻnĪ“XyĒØRßńÅ[z€2 Eŗ10m¹¾HŲ†žmÄ!!ŽŃWgޤ’|D7h-ób<žJŠnŅĆŠxŸ†ļU1ppDPwŠ #†D9Ī–‡DD{§‘Āæ4޳żń$Ž¢?š°~»…źz-7\^{0?ų!¶¢¦±~£™}æę:­˜óźjøGŹ@JQ}=÷×<1_[ŽN>dą¾w˜ Ģ6;’ĮGć|½ŌVš‚ĒĆO\GW£Ź÷^—¦ó„ІN ;‘_Ķg”ĒĶ()C§dåń’*äu]ŸŪ›g±ņ‡ĒMƇ&ķ<R’ŖŸcÉf«oj_,ū†ŽOcCPķy[‘öi±Lł?׊šö>Įļ{³sģČ»šä0ä#&Ć Z“ĄĢ(t"ĖĖL śŒXMr V#X×ų˜HL½!Ŗč€Dš~cV°n%ŁɞR2DŗŁ’EķŚrļ[ŪGɔĘ9* ŁF€ę(#@”PDF&§EŃöa.Ī7c¼&ż Ā“¤½.ē‡9G k(4ūĒpü‡h3ö‘š:ĘFĶ~hbžŻcŠŅ Ž6髤l‘ÄQų'³°_iĪö§Rōūé ?…ļ½ŒČZæŠcŠVڈ˜P‚æ©b?˜’ĮÜćrp €l“Xł(šø9JJzģ,ćķKbŅC³¢»Åćųhöt\€}ĆoŒŖ®dšQ;‡Öˆ†³×”ČŹfA›QHZ½ś$EgßÉ6£vmwēŸķ>ŪĮé¦M‡ a]c"n-VÖłrė{䓹ņżżfķ7ó.1īŽIAšqBP+%ŁŅÓxŸÓÜ=¾ē™ŻžjL]}-!…³ņįgDjž:FĘ@³ˆl)h³›Ć–Ī”1» ų2¶‡ŁoTƒ`k˜c:” €]“4įŸˆŁžÜĘL“¢æśk,“NįąŪėr1ĘngŽ ·éŪŲķ|īō0ÄėfŲ¦u½Pˆ‡ąÖ^OcækyOJv‚Uåvī ī§j¢ŗ‚ėaĻęɇ?āYżžkcż¬©œ0ļ#ęI/ū•oę…oē2ą°‘ĘK|EšGnµSźńp˜Ūm`ū®²Kē›ĶŠėń6ą˜sYżŹZtAm{׌—5ķy .!(“’"O­Ve?lvßD»$oć*l»ļļ Ū<^öĮ±lnP/Ąåmœ:eģšĄ^^Oä}ŗ½Zį@€ģ¶ø‚ƒ=ūSóC©æ19¾ży® 1£{?CEDlDaDŗāA0ĮĘ@S""‰ˆÕhJt@<Ķżwf¬fĄ§’'=ŒŹoĆqžļ÷*gō Ū–õ,‚e9'%¹ĪZ®_÷3—÷Æ^Š˜z9­žł– ČP#@ÕP(!Č ZQiZéX@„„끒ģna’?YaŲ–H,Ą7˜” ¦Ķē…3vZEpīfO¼ üÅCųgālæ>Ä?V¢ż/œGĮgļsL]-c¼nĘH()ęr‘ €Öķų|ŪßÜ)%Ī8†^_ĆĻf}‰žP‚’Ī«éšėOŒČÉeÓK³łrébl×2Ó'žĀĀ/+æēėyĆĒ7¬p歋Ŧ™„ŚF:Cæ’`ĀĀée_W}č:¶ )r»Ł#T³¶śÓŠė‰Ÿ?„Uæ}źbaŃŅÕ¼^ŗdWGų™Ŗ,Z˜E}šqĀŹF<āõ²gŪĘGāqŅĮ÷£cģ jīŠļhźŽ}L‹€p¹KFa`fÄdDhDk 4%} Ն@ŖĢ€¦¦|õ#Źū^ D‚Ų²žē…`ݤĒ_r…ft}ń üm®ŹĄśjžŪ†½ ŽĒ÷¼0‹Mž[¤c1T”@…B+™bģeūZŅ Ó IDATBNĄ‹D+6-;€SUųæ!ķ1®Æ)†oh3õ…aś1Z1¢c˜~#1š-ń¬ģkqæL›ķg^“¢Ņ~ģń×zĘŗŒõx8 ČÖļ‚õ6sr ÖÖŲāśi,»n4åHŚīŲĢ10¢üĮü¾‚ĮµUü×QĒĒåv=zĒIÉ^ĀĀ/ū ää+0×/Ū7k3šĀĀŹĖīm\kÅ/¶®z‚Ÿo=…™.g9źølóZžŚ­g˜ļfŸŲė`°«{Vü¬Å YęČĒwĮmģv6×H >x†6'\YԐÕĘÆn'ūź—4ĪV ›Ż^śz<ģJ¬ė »5°źIu9µAĒŁķüīv‚×CļHĘ ąt®£»ļ×8z*+‹•n'%^{ŸĻ éŅ )!ŲÜ čølA-’ᢠųõiäafųM‚F°#DtHHs c ¦@¢ t4šZ/Ąį¤Äjåż#Ę®ķCŪ1HJŽ*źĘē]U h㨣X?ĢB)`“Šiī+ä,|3ēTiQŠ„qŠ ˆÄˆ5” P(’)@“¢²/šm˜6W£†»a‰aų'ą·(ĒÓR·tb8œ¶Ė7y|.š4š)4Z² ą 0żF\Ō«Y‘¤é$üć…_ų'Sō/łėĪēŠŹJĘŗ\Œ•²QŃM°²ÄngvūŽĢYøž_ü;‚ĆśŽÄcµ²Ąć¦Äćä˜m›x\æ?Į_$¾z ą«„ó7C?ü/y5Uœ 8ŗõāüPāĄUO_‹…ÕįĀ÷;÷ąń«9KJŗN»›į7OćSŚ‹ü¢¶ įÆĀ÷ÓręN戟īv1Ųß®z}”±›ĻßU¾)åuæ°;iCĮµ¶aµņ§šŗŁĖ/ģkƒD7[ļŽ\¬»uļkN~ćļќ–×Հ”½ń4E§_n\„PĆ±k¹ÜścĻl¼¤nv>+j«AJ:O˜®žĻxÕ=NūX­ęizj$øŻ Ł&Ēä45Ff‘AŠds ½‰ŠĄˆÅ%Š%hL‘M‰HµĪx`"Ł^có[sŠžńšJ.³X™5gc`=}z€×C ’¢¼VóqĖV/ELÄUõÕ¼qćXzŻ?;š§[š# ^i V P(™bDپć’]ķ ó ³ŠjœŽ¹°Ü ü˜*"[›¾„jV>"­ó`tß šڲ€FœBų“MžæŁŒ<’T ’x‡łĒk¶?Ńß Ņ~ŪžįjVM>x^²_äS^—žTX5\.vŸ×VSāń0xĮSäœ3‘z½ą_ŗŪs’¦E5ūŽöEüųō›¬ ü~ü!żÜĀŽęó«ōŅgī Žözčoµ1÷ĘgCØÕ•¼Z:–ÅŅXx3éE~»é(~ōzé_[͉ŚóiMƶ*óē>õ)ŪÄn'#0HrśLˆ`öģ͟[7j?×lgŸģź€ĮāĒč Źfć/ą•ō¬ÆEää߀[¬ŚrŒ^/½æ|›‚!§D`LŹ@Ž~ēvė ō܏eK· ±ź£]÷Bā®ß%Ö=?€£†ņÕūoh«H¬[É“»!ńø8 +‡Å¦UH:Iłuß(ĮČ,6 ō&A4ꥥ“@aHM3C›‘FŃEnķŲH¢¢­3 \TĄĒÓ8®{,PWč¼CiļõP’ßšcś,qL"éiĻį‚+XŠ{ņ©oxü’\õć ŸÉØ£4ƒŒU(P”PdŠ` ߤĒKČ„Ņ#“‚Iø --ą)•hĖŹ~/Zxxx„Äjō‹°Ż&“{ģ¼ ĒĻE+ņØŸŻŹn® Óē,{ÕÜiIĀ?^ā?Uü£żzÜuä{\œé’]ž°Łų8·9“ļę«)“ųAJz9\ ŪƚõŚß­óWk’¹oü—#ʞȅ=­˜óźjøAŹ@>zmœtŸ÷9œ‹Æ{Š-F9ü~lv¾r9čS]ÉłRŅ5;æį½«Łģ¾Wīä ¾ūƒ‹ī6£Ÿ•Ėœśś»] m”—Ä¢W(ųō ¦ŗœ»>~^‹…ģŁ|™ßŠÆ«Ėķt2Įė¢o[‹Ė3&±õ»łl•’ŽõušHŽ„¬<ž©©$łoæ@§³ÆŅ„>@½N|ڲŲāŠlf뢅 <ä ¾ÕokĄķš„7 j<‘Śģ 1{į’±eŁB~ōz9ض†įŁvS£t.'‡łĘó]pƒĪ¦ść·Yäv3¬ŗŠÓźķĢ Õß®„æ”thÓŃ|„_©!ßdĀEč ‚Pę@&¦©Qšń4ĀEÄR; šč€x›žĀõJ¬V>8nB %hķ/ Ŗ¦-6/6\³“!ųmĘRf¬ŃŪ×_ļH!ØšŗuUŒ(Ķ$#@„(-–L1¢ Ķn Œ#‚ ?\Ą÷¾MŃ4bż<ˆun&^¢…ęōų>hB~6°čEc£Ąˆo¢i†Ņ„<óūćQŠ/э…æŸ{§±äņ“ųČšÅ—ŗ0{ž{ėM l“™ćrŠĖćfŌ÷s±©Żų6üŗŸĖ¶ ™Ę†į)Ł»ŗŠį %ƒ¹Ūå`²Æi°°Ig))ņx8ę—ÅĢzc*#=Ļüū97—E.’ņø WĄ‘Tä·@z)ō‹ž¢Ø5˜Õ/lĖ—õ5Ü$%]_˜ĢŽ’z”?Œś]ō ³_eŽ×Ė€#;—gijg]Ø3pē“u:™ąń²’ęõX[·olžZ¬¬šøéčq›–õ‚Łž Ų“–½³ķsź…hN6’ųČŠmŒmMhĄåŌŽV‹`YdANŌVsÓĮøY/qŪIē™×.xīNöōzµēÖŗ=óŒŚ“Z·å•²m óø9śłė8ąŗ‡B‘üS[–Õbį×[Ÿ`)¾æ‹Š vĀBļ/šæŽ9b;č ‚pę€YÄ@ĢŃ!LH¢"5r ¬6‰HVš@.ˆ·žĒęõp\^+ĪŃļs¹8BXł²gó¾=J¬Y<Æk³+=@JŚ[ųØ$PF€B”Ho2ÅŲ܄c¦J˜+BVėHsųͰŃR2Āń& ŠīĮJšpīF!}͊(óü3YųǃxäöĒ2Ūoİćšüę䳇öē¶f¶k+W"iw’¹öĢ÷Ź×ś\~#}a³ń¹ĖÅŽnCĖķˆ+†2Śå`²”å¶āę/āŻ#£~Ū_Xø” uÕ<*½šŁėÜvģyÜ`4ŽźJÄīū±xÅ×Zč9@ŪNYo= Į¬eø@B£żWļ¦Ė†āØåP·‹7żżū¶lāž|üŚjÄ'oš¤×ĖBPÖmoJ&?Čņą¾[ńKE9 )˜ł{^<…µž}~AjĖf©ĒĶP·‡Ak7bļŅ·~ £šs}Y]%=ÆŒ^‹üž)ó•Üs:8~ķÆÜŚs?\õµĘŸ)—ƒCl6~5k3°˜_~̵RRšål®=¾‘nŲů˵%……u—ßĘB³>Æø‡īŗŒß¼^ö]æŠ'¾Ćq‡ŽiIuߌr:9  5OūūĖÉC/½#|‘XR’ækŸNlzi˜™įŒ3SL¢b4Bz3MˆŌ hjĶ€¦OŽĪ@ž±§³hZ'€ĒĆ”V;š7¼}¤¤×^}O]t»]ŚtŠŅ"„ÄÉķé]YÉx—‹{ŒŚDjœ—ĒaõõÜ4s&'x]āihN€2ŠęN“”õ©bUŽé ¼.Ķóśń§)FM0—Ł{ö:Ś,}Tµ“1ŻŠ„īD™o >¦ÜŽ(·#ņ µYéå€ShUYĪ=*zōečC³xķČć“¢šE]ń>ü!/ęäq?€ĖĮÅS'kaŻÕ•żpīl" Ęmvm}śķ[n'DM'Ķ:,žMX5ÉćõŠcé\r9ŸĆļĒ·Ė+7ä×_²²²Œ—uLōøäĮN›yYŁģČ®Fų·ZßöŠ•źv2 m'.5’õvÄQ§°ŸXßü}ėķˆlßÖm滨ó¾?•ž‘¬ėv–™u¹Ų«¾a“u DHIēēļå,’>£~?z¶nƒ Z3×ģü'KYNĻŌÕ0ńŽIĘyŠw^Ā~±^؊G[µ5OkÕo—ī\8½^ś½ł>z–:°dł·^Ĥķ[˜›7>ĘėžżFĻ‹fx½äķĻ® ¼Į›’}Ŗ7ŁĢžG,Ōź>cśĻ][tę“”ßrģˆv€ÓSW‰Šo€fŽé·żś©ŹBč7ż¾ņ2„Ė-Ctü›å[«Ė°¬.òĶčoÓ:„3:.šļ¾h¾Sżøźh8 Ūąõ„_ W{!ĢSżŖwr²ü2ć‡ĘE2’śƒ£l𽁠… VG1ž•œīń0¤4Ęė¤ĆĮ)€Ė¬‘ŁuŚĢŠ7BŅ“ Ef‘)į*ś›1ųLĀ™‚@ÅWEĀXVwĮ¬Xs$“EĖ׿3L»r“Üžēc8—Ÿ„_a*ćˆGøŗĪųĒ3æ?™³żŃˆ}?įŠųł>c®§'ó™ĒĶ).'c˶æ}FÅūeį§Æāl ēr²”웓ĻĶ×>a¼4ēøĖxģG¹XJŠÖÆäāźJn3£ĶĪ"—S{źĪZZåvb‹Y(æŸÜ|V×kę;½õi|­r[,üjĖā»Ü\¾ļŌ…ļĻæ™?ĢĀßʶiŃ +®ū/Ÿ×ė^Wæ2ĻŽ8‚ś‚¤¤‹£†¾­iżHpøsž±õKŃœĻŸĖœŚ*N‘’>“'°Ē£ÓY®Z?Ą R5ļu¾÷xT_Ć-{õk‘źżĀńöx×åą·“SźŖø=·P»QŌ‡ó×Ų9,vķą|€źŚ„ž~:õdE¹6.›ücµ²4+‡ļ[µę»āq,;ģÓÕ@€Ęyų.'lY, 7c/Ū„¤‹ĖÕp%æš,źŒĒžĶ;Īz.pÖsņ‹¹gßž”‹ĪÖ×q„’gƛžfķöč…KvHI‡Ü|Æ«aҲE¼Y¹“ —ŻŠHõuˆūÆāœŗ®ČĶē‰į'Qāü¢[\‡ä¼oęņ¢ŪĶ`g=ēlŻČ9[ƒŚŚ²˜sŚ%\ģ?.ŌóŹÉEŽń 3»‘ß’ŚĄ]7ƒ¤Ü5)”ēä1}üÅ<Ņ’šš«čģћ'ÕLoŻ&ökµ™Q`h˜˜ń4ŒŅB™F†46 ‹ Fi4„v@ØTÕeÓx›śļ^#3ą‰w©š|*/œĆмü@M!»¹.g;Ÿēī¦}ų‹ŽÜ^RŅWXy.ø?ßź'å·ęųą}įŒ€“ŪÓ[JöķŌ£aįĶRn7Ūl¼dö<õFĄctīŗėŪ„3ā‘ŹP(šaR+čwM»Čīn–ZīųGĄ#v xMčÕ¼ĄŁhü‚#)#A—CčeÉ2‰hfż£ž^ü§»šOfQæh…SEæ¾Ż˜ūm)ĄŗéOʔŪ7³”ŖõŲ³™ļ©e”t‚—ßĒ?” öµīĄĢķq‰”t}öVŗ÷U~0*Ō·G_¾śÅ7oVSĪ>„(“ź™>o›nž†J)i•Ė£÷æĘŻfĒ }żl¾éūްZĶE2h¢QXØĆ }ĶDäī{ńāš\ %^Šs¦¼ĄĶś|w:Ü.Š­6–xÜźõŅ£²‹Yx½Š":ŲlüWĄ=µÕÜžūr^6óķvV{½Ų]†x½šAa³±čōĖy&œX{eCF3ī©Ū9«¦šÓ<śł"ʬV–µiĻ“Iw17+'²~’9/½ƒeĄńo½@·æÖÓĆć Ua;֏,aõžūhõa"ßł×ņGø(xaōŽ6(Ș‡L“1ŹH¶!mt@2Ģ€¦F<ś&ÕEļŒ=“ĒŽ‰ļæÄ7³_ću‹õK«µ(—ź¾ŚA¢±‘·ź'Ī‚5_ģ4/ČifTVr²|õŹŖ@jĄiŲCJ*Ś’Ržcņóé__ϵRRdµ²hĄ¦~ó 5§;(‚y/7.BųˆD T&€BŃ|ČĄĒ’€«‰ķę=8Ļ·y„V(źGąO“Źóž"vu å¼šPAf, Ų6|CV ų©‰Ē¾ÜEģ9Ł#ŠRÓīwą4S§kż×£-ż8½)ƒK72!Üæ4 „ŗĶöĒCōū)·#&>Nł÷³Äćįp§ƒ1U;"O‘ÉoĖēõµÜģūµĀLüūgų˜É÷ a£”ģ¾s;#·Õń£Qū³oćļ›Fń§ōŅĆQĒś}ś}Ą®)żœ<¤ÕŹ·n7#ܾµć#śfˆĄņrmƅKƶ½”tūä-Zß8j|āüzżŁ|ąvrBu%7¼ņŸžs%ś[2Ÿ;äuļÅuė~c–”“}’ŗŽ’—ńŠ' ’x½ōu:č}ĒsÜšČu¬Ł±GÜNF»ŒÖ5õfå0sx 7ķ½æq‚Ó $»rņÓ¼Šo¹Čæ’ÄŽ„‡Vhp®ą£"Ć÷œĀ­ä’HŒ=‰2 ōŸ“d¦év„?,"&C †č€d›ńŠ øwµżgÄ×r¼ÓĮ`\ū<—‹ae®t7LĻߓ.n'7åäD6lx“š’éĮķvģ D¾™±F{¹JAŒ.`ø£–w-^²ŁXävsā’%3e ý^Jģvī u ¢Š–GĘB ć89N]Z€Ž¾MѐZ Ɓ*āQ°ų‡q܍V){Q˜v?ż€ū€ó¬m%Ś2×Ū’īéAœ ü™‘*ᯄüŅQųĒ[ō?fĻfާ–Ć=n†|:ƒüQg™½‚ĄM’©“XöĢĶT …oŪżūƒCśżÕV!lvøœœėŖg(!Ril6»œōšŗéŸ­›ń4‹įÆ·#²ņ)uW0ĀćfŠļ?‘Ów`č{Ć~tĪbc“×I·›żCS‡šå®ˆ_¾„ļčńĘūĢĶߗR,%ķ~ZĢĢźJĪ;’Ś@ŃĆå„ä½÷:·8ė9ӖÅģŻČŠŪ/d¹ŪĶŃ­£'>”,Ņ-6¶ā‡īN;āŠĒ˜³uŸ½łCk«Ł_z(“e³±{OŽŸ¬„J9c0]‰ƒ1œ¬8ēŪGbÄÓ$g $ĆˆÉ®!Et@:˜±Ō 1īńóŗĀæ#÷bO)9°ćn“ķ/Ž?¦ ówīdAÆé“n3„`ńĖK™ę“ ŒīFO)é×”³‚÷{<”X­¼ķ’żÜ}éčØa†ĶʔĻ\€ķ"=X¦ķąR“ĻH ŠĶÜiv{³ų˜A_A"ĆżS-üc%–üžTĪö7UōėĆū‹:óÉʵÜd—¾Ć°Qg5.bg4»ægÜV+ =nŽ—’Žu;°¶ŪÆ^š“SČWēzÜ \ō GžCµŸ~v?/ŸÆ*œœåqsЊļČŽ’€˜7šŁĻvėĘk4%•3ó)F÷Ö0‡6˜p³śYY|ļv2Ņ릒»ÓéP2Įx‘i°·”“ĆWŠ“Ŗ‚¾õu,6j;n’lųƒs¶lä Æ—}~_ĪĀŪ/b”ÅŹß^/m<.Ž”’vĀĀś#Žēj§aĻę'‡ż=nZ™‰l«U[.Ń+éä¬c7ܓę3“4+õG}ā„z¼Éö„4Å\ˆÕ4ˆ¤–A,żCą3•’’HdÉ2üF˜›ńŒ Ų¶‰qB°dĮF~\Äłe¼,,d!ikµ2ūŠį\Ų³OąųŁ÷ĄĆŁųš{”Ķ՝Ū(‚o?\Ė߀ØņįŒt“’CŪwį,ŪæÖp­¬½ģQßõ³ģv^s:™. V­ ŌÅ8ÓĪ- «^ušö“+±’„¶ĀŠžD֐Ś?*-@”ČP2ŹšE¼LHõXZEĄ< ƒĘa­!ų˜G|L€hįżƒixcĘŠ–ŗj®$2Üæ¹’¦ŖŁ~’r}ŠtŃÆēĘ’ńė¤a¬—’=źŖƒ/6T>æ–?'5•d½ž,ŻĻæ‡õfĒģw_,ł/`’źS†s‚ĆłŗõbqŲ?|•C÷:B‹źń‹}#®}€•“N`…×Ėžœ  œŲ7¢c7ę®ū›ĖņŌ)™Ą+»śÓ‰ĆMp–lÉŹf–£žKŽ@Ā‘p½ģæx'nś“‡½nś¹] ×ͧK[ :–ė†¬Ż¼O|˜{ Zj x[[Ø锳™Ą/$tØS²YP!ˆ˜ĢŠœšMb1 B±šõµˆp¦@¢ v&f44"I0Jˆ—`3 Q.ćģvŽųj‹ŸšBŸ™Ļ°v.Ÿż¹«±ØłćČ/ßĀg_¼Ļj“ōCS<.N²fńŽ’w’u®ģ/N‚„o¬gĄ­'’ėu3!+—KJ®ĄÓ +n ĒfÓĘēĒķęl»‡O³š™” ™ó$Ū-6¹ż3ėSÜš9š*-@”h¹d”ąćąŠr4 ewąC G 敓Bq5šń¹GŻ˜ƒf(DsæŁ¼Hqøŗ ’X ūE"üć5ŪMˆ4¢?[Ÿø\āv3rĆj¬ķ:7¬YŅĮ’Cū†aż]z²ąw_&’ę?č” € ÆdĒ÷ó£×ĖĮµ «­ę“ą6õvÄŁ·³įęćŁ$%Ż*Ė8¢uų“ņ yµŖ‚»Œxś6öŗą¦°+ƒ˜rå]ü|Ż™|ćq3ØŖ‚k?x•GžÜ°Ņü³÷Ņæ®–åęńæ‚6|¹ķo.q»énĘś‚),«®`ÄĢGčæs<’\›{ÄüQg±āמĢŅ a£/ČÜlž©¤¤}Żflwk<»—.Ę”H¾Ō#1¾æ»l“†M5Ģ́XŒ`S@‚pčV%ˆ·!ķ»c*'†č€S¢1"‰ hėDķ¦õÆØæ0fŗIÉ!»qŽæĶÄ;pNԊZ6 ÄāŁL ŚtdbˆÓpÅh „d@a. Žēvs¦ÕHAX2‡Slj—6¬šą[QĆÓeo>(õ ĢϧŠĖķ꬜.¼č"~|žyЦŻ5’ś7œĘ“ Ń Ti Eó&ć $L¢™oĖDK-BF fp šPœĘq(š 0 B‡Ż5GRīŸČā~±K~*gūżÄ[ōū©®DäšÉN—HI§—īę kžbi°č÷’Ŗķæš!ž¼i$ė¤dOG-‡TEŪØhŸ=›RG;›…óŲķ|åtršĖX/˜ą™żĆ†óęēļrƒ”“Y½‚ėŠ w†ÅL°uķÉmV3[Jv_ų³V’ĢMĒ]Ä÷KŠaÕN¬©āz!(?ģX+j‹ó­ēqzŻģ»u¶ŽŻ"ÜHŒ¶ĖF^v3Ė ±pˆ–¼‚]Ć­_ϧčDŸ‰Š\‰ĘDˆÅ,e4ň·1­ūü›)Źˆ8:  ©įĢ€\ßϔ̀ņ,„ß8ˆĘ ˆÄŲ²‘qB°ģÓ5”ĶN€SūŅŁéä’rņørŃ?¬ź,5i»ükŹ?ū‡UśĒ‡µg€”ҦēśŠŗŻg±ņĪå6®Åįqq„,œ¾’m ]oėœ ŌēåqVu5æ<ńó²²øÕķęšńšŒY• P(€@ØU&!ą%0_;UwŽ^•Ń×^x­ą^¼ŒV2ŅĀߙDÄ*žļĄXüæ"ń_ ¢4JńæDaŒāŚLLSfż×ƒ'ž{é¶plį߂÷mŪ„Ų¶ ‘½ įó/Ū‚šožvåv„Ó_µ©ųÆ®Dų7€1X„Ļ(Ū¹Ń¹5¾m[–Ś*„ īĖfg€ĖĮmŃDv5"»šŽœ IDATQėŪümėķˆ6E”H/½Ž~nžą[õ›“§åѻݲź'm⻾”߂Ē2ö4vęņ€ÓÉų_Ó8­Ø¾¼=üœä“#‚· īäĒVķ™ ø½^ö’ūO>xžž^:åÕ•Ü ŌuķɅÅćŲ¹÷ ź:īĮ}ptĒB¼Yõ’Vˆ&Zõ[<)źX2lėz:;ˆ›-¶0Ļ!Ņ×Ęčµö½š×NŠoU,žM’™‰źóaō™lJ?ٵż&]Xźķ’֔>żų’–³«Łvm«µ#rģˆvÆ«[W‰šo€VaĒæü½T•…šoĮmĖ˹¾­Kˆq—g!V—aѧ €fč ˆģ»Üédœ=›Y‘˜ĀæżĘT›éKk“Õ3V‚Č5¹žy]ä Ń8r²Ŗ‚›„ąĒOžŅ¢™Ś®DHÉ`[óĪéõrtpųæ×C‰ÅĘÓU³B’øĶĘoRj«„3īĶ®’f÷ f FH‰ ŹTE…B‘\2Ņšń/h\ÜJ‘0NžŠņ \ ׿‘‘hęO&v#BFņ?DšŚģB‘Ķś‡’ Č,į f¢Ā?8·?щš¾¹öÓ~›M»”t:Jš“_Ø^/ż^z”zĮšč÷o­Ó/a B3~_N±YæŻ{ģ*¤—ūĪói’¹“łÆÅĀĻ€Ųž7O?q;żōĀJ/Ö. šĪKxtĒ6ž;ė? .v1łIŽč¶'ųŒ'€ü“dz‡ą˜Ėoį{æČæś¾<{"k³²ć7£‰€0œmų–š­©£łrĖĀ<‡¦˜f§Š§A/c ¦@…ĪhJ_~˜:C Ģ€ą}—ʻ׎d h)«Ė°lŪ¬«įį3ĢĢ€`ģY|Ųa­Ø~Øėđ9°¾0—ƒ÷ö\ž–’ĒŃĻ’Ų ®NЇ’_2Œ}€ūdQ!ˆÕŗóŸŅ^HzuŌ?)iǾHöm×F[āµT׎ė„5å¬Ć^ĒĮü^ĄčžĮč>Ć IōõŠ EņČč?N©Ķæ ŒMõXZwŠĘQbį8(E[] ^å —ƒģ<ävó/!ųhcµņµŪĶĶ8؟pTkFÖV2ó{¹ė«ŠR .³ó€ōpč|oĄXaē‡aó½ ŽĢb¢ŪĶ^/ƒĘjé@0N ó¾Hė€*ØP¤W@‡„€Ū|[³ŸNī”°CĄ“QóŚŹ 3‰Ÿét)°ø+Nż„ń÷7"UĀ?Ö’¦äų'KōCdĀßHōCäĀßHōwŠż\Ó)PÄO?Ćæ×Į|öÓēxĖŚ…®nŠ^ōė«õŒŗˆŠ/?b™ĒĶĄŚZ†¶Ö­—mFn.„UNFz\µõ/¬­Ś6,:čĒjg±ŪI‰³ž# ”<#ŖŸe7™’ęäõ+xEzٽ¶’)ŸLēŽO_b3ė[¶aaC—=¹üāɬĄ'üĶ*‘¶ķ€§m‡ ŖŪ&„ųq¾š +[¤›N£9.špśDĻȉˆ z_œFæ:“@?F³č€pʀß`r+;­)`©)Š Ąg¼Iń0ōµ< ņ ń,"Ųąū­Uąq£zÆāaįē`ń’üÕtXŗˆ_Ϧßä§µˆĆpµō׀Eėõę™ĀÖ¼üڶĄ’ŸśkI4f€/"—‹ė:tåŁŚröĖoNJśŗÖT0R_@€ƒśJÓGSču3Į–ͽśĒ=J¬VŽ4:ÆŪĶPa5/°źæĪG[ ^«(@”H2ŚąA„? …؆}*āŹT ›DĀ@Ē[@ąĪ8Žc ŚÄD4fDZ’*įń õ­²Kžį–ļ‹e¶?äL?šč÷?fÖʍlł„”eź«ŻÖg‰~±æh_V6 źÜ t9ĢCś!0Ėß©;„U?ƒ”“›ö(ż®ŗ›Śēęņu•“·‡Ć֒޽“ưžÓŽĄźL0į&VĢ{‹įß}Ź’9ź8I¾”tõļ·XX—WĄōĘ3½ļ`‚ŸbD4Ļ ųįĪolńĀž7ŅIŌGC<ʝA÷Ž62 ́XŒD˜±±Ō›ś"‚F‘~C šåõÅõF€³žqŁYĢҧŌµGžś#Ē Įzæųøšޱ[p>;‹/õQFĖ Ž6ŒŽ<ī@Ø}0žėK“FĄĀæXŪÖ,Ö®dŻ§jé ~ŗ÷błÆKi=¢3ū荁oēń,ЦkgŽ-Qr|{II?{.—ŸėŃKȒ’£ģv^*õµŲd¬ć  ąæ‰ØH Z2P”H2Žš#ą©­?+p™“™‰X×$Œ°0ŠćīBÓ`gÅq,Sæ a‘œL"gżK›(ü£=FO:’HgūĶ„¢EæŃL(²sł“¶š7G=—܏Šfšō9ĆśJż~Św tS ×II·Ēn”×Õ÷j³fyū—ßĘŖkOćo)é²ķ/Š””ą0wgqU Éw^x?Dņ<¾œü±ĒS>öxnłz’žy1ūTVÓ-ĖĘĪö»±į¬ĖĪ šį“ł+ųŠ_)pEŒF7Š•-nH7›ĖŬ)Ė·DóśÅÅ,ˆĀ02šb Z#f̈Õˆgt€Yd@ČÕ˜FQĻŽFG‡ĆwļÉś¶¹eG'ٳNHŌ–sev.ļŸ} {œcaKē®L}uæAC#`Üy¬ū߃\žĮ2>éFtĖF‚?"`|dĻ_¦b½ņ=ŪŁytēVf™Ėk6[źŖ¹@zé'ß½³ŽM ]_wVr2Ą“¬Ÿ¾ĀI€÷Ģó?VĀ ąŪgŗl ŠP(2›ŒœU‡ŌjÖ\Œ–#Ž=ÅĆiĪģŽ°<Šc²€O!ōĢb”8ć’Ÿ½ós¢ģŚųļIݾ,D]{/ *" "ˆŠĮśŚ»čkŊŲÅ^±ōC¤«Č*"¼6Ą.  ,}wٚžĢ÷Ēdv'ŁÉdf’, ä¾®”Lęyf2Ifę¾Ļ}Ī>KćœGk$ž`žü§‹ų›גÄ?“¹żz#‘žx”ŠdŪ}üX³œÆŚv⬛_•#‰rł¬Y‰cüµü-I3vÜ˼’læ·Žā™€³¾¹÷U†)ėÕV~æ1ž"~—$ŚēqĻ-/hu賞 ŗD?MHFNSŁåƒ70¶”Žėm~¹ļyNLaŖméī÷𱔄żł­Ō0+ Øa¶Ž@mōļTŻ ”ŗ~³5tźÜsś¼\śĢ\ŽT»^{ˆ’²2VīܝŽ<Ļ/>Jń‚ĻY%lüītń‘;Ÿ_}õōś¹øCWN|ö#~4R+ Su”jōÉå,Ór\¼0HŲY±Č/wA8ÜĘ·’ÄĮ?HäÖÅķ÷xŸ ;?Ģ r›Ö>ū%9ĪtÖČÖČ"‹ÖķĘ †ļ7ć%x8¹N@ąbÓg³H m€Y-`µĮ1ąt`Š#MĒį>Ž#q[ŽV£ä_‹ųCėˆś§Ząo[ˆų·d“?•Hæšō«½ļ=ĄÆć¢‘łśN*6 ’ł<ˆ Ū,čõrč >/¢ €yU>Ī…8bńņ÷ķ×܆ļĪA²;Y 0$ZąŁTÉ~@)|؜45ėNé×"łŹ“I²RBnś}Ģs8Y¦^_Ų~„ū6.ż‡£ŸQ” ™`cY ˆhŒc@uP…ó&źĀ±5Ģf©÷qī€Tė`Ö S/ ąćT§‹©õµu­€ļ~ąd!X„€Å‹8pååóŌćóóå?æāHJ«63j‹‹Ÿ¶T"JHÆ?AĮņ?(zykćÓ”ūˆQGĄąžģŌój’P.NšŠ#@-|ćå}ą}e›^9tjÓ”éz=|v‘$‚æ/;ŽāēQó#°'Hó(IōźŠ–‹ķ³, ifÜŃ× „dE€,²hyl—€!_|~DE %čģ tF~¶ļDSŪźbbÓżŠi*,( o5+ƶb„lė·‚®Ąl śØ08¦9bæłœ¦…Ąld”ēÆ$Ūn5“ĘØY ųkĶÄæ„mž¤ß‰hPõŚ2Bü‘~u>G'’ÓĶg£ƒ~ų<ˆœ¼ę×/-kn.óź éóĻrœ»īA0fL”d(łū{÷ęėŸ\ó¦Ó{ß~MVŌøyæ­ 0$äČĄ&ģ®"ćÄ&Sd?žŖ§ŹÉOFäĒÜŧĄ§F¶Ut˜ū-›…3”Ž{Ÿ1CK4HöѧC 0-h„čˆ­NP‰ÅNkŽĖi*1ąż»hsL—åč¶ś:ź÷1ĢéŠĶŻ÷{f·3ūł˜L%ĀĖfcMD„wlq!¾šÅéŽ®Ł¼žC:tAšp …·L?³B@ł &”Ædp£‘s£%(Xčćeõ’×oā4!ųŽngŽŅoø øõPąōŻčę÷ņ‚ĆĮų6ņO²}–„©"ŁŚYdŃņŲ®-¹'}:ūŅoóąbˆ½Ł˜Ä^ĄL Žč+ß*ü GNHT¤Ū,ŚŸGkŅ4gڐJŌæ5ŁżS‰śēnEāo&ڱÄ?•Jžé“ų'ŖŽ_ÄO¢bęTų-Iģ4ńnö»ł~Äłü ŗ”RV·$‰‚^ā°+ļeØ,żqĢųijØ\8ß"öÆ«¦šEˆ‹šļµ³W®dć~‡±°@‡üg‚ģ« ^¦H¾R›iĀžn¤ūx­ FĻÆZ(Šūŗ¤*˜tD³.t FŻR[ŗÅ£Å’ś‘B°śź§ˆ¹}Ģy™¢pˆć:uå~„hą§ÆRs|›vœ£l§ ŒDčiw1G=‡ßĖ0§‹O·ø[*Ÿ}Āų¹ÓX3ēʛq¼t=¹į0‹Ū0ģVjxuʄ ·;łōØyqĮL¦nćĀƲH˜v;Ó’”‡ŌŪ’ßDģ§]øĆIˆ~:nHud‘EėÄ'dŃ^‘äH¾V:—Q|"ĮÉĆ=µĖ€«€—RŲoĪ ČķĒkQēš·ķ̜Ķėč_@™Žq%Œī§@öÓIō‘Ē ‘ī»ę¶Jä­Āźūõ ̈zAR*Ā@ŚE A@O š;žpÓ1XZZ Č+@źDRDåļPˆĆr y6>EĄēåbGN,ĮõŌ3ĢįāÓÜĀŲV‚s>¦æTßń”Üy$·ńć· ‚ņū¦²TļpRrøāųš^ ’\Ā4›ƒļ6Æoź@ļ xnw0õˆ!MQ÷ś:®‚fńB@ł:N‚„³ĖåN'CF2šiĄ4­ń¾zīCPµĒAĀ€.ŹZ(- ėČ"‹Öƒ¬…×#;NOa޳‘ļŪW™s72WjÖŪ6 L† lYH£w®ÖHžÓ•ēofĢÖ&žé“ł§bńĻė·Bść×åęńY]€įO~…Žg\̦ĘķćrłÕ((¦¬ŹĒ¹į}ł1%Ē`‹–­_Į•wšš]üśf„ßbt?Żd?ž6F¤ÓpgÜZÄ>ԊŠ:’ł3CēÓūŪ‰‡Q ™8æ.㢀†KĄŻ;ŽØ ąŽFŚ--DOr'%E 7RlŹĆ=ƒ¹@аO»N\©8L"/āÄ6 M×åz ^†9\L+,nz~§:\LĶ­DlŠŚ!9r(÷zh °p:®²¼o³³ņĪ'¹N½uzĄÓćp‡ƒ .*įlõ6…E<š["»”ū›Y!`B†Ł±mįŲ"¹ `q{Žyć[ź~±§Į}–%I Ųnِ²Č"ŻČ Y4B@D‚s‘ óõOaŖ+%X-ąQc®vNMaæń8x8掄”±­GżSÉó·RąÆ5’”HæÉ‚~Z³¤ōsś÷9”Y’›Ė#€ķ·ļéʹ¼—(—?f\o¾žf Ąžėś <™éFŌ“tžtżLżLüÖDŽÓTߏU!įg“@ H‡s ^h QĄŠ ąžīՂ@kˆ¾?§“ƽõ\žö­,r=+_»™A¾:ī‚5L`±ā (›Ā!ŲrńŻ|ƞkÉ×øĆAwįLÅ0ē%ņĆaN芁G@®M%¢° ėź*hW[‰xėžl#obL—#‰lĮzyN%= |5bŅ“œ€ tēS|­®š~_Ęæ/³BĄŅI’8ŗ] W&ŪöÖ3ÉóÖódN—ĻŻ,»¢÷rß60ŹZ™@’’Čŗ²Č"ĶČ YÄ@@@‚ĄWČŻ¬b‚•B&ąFξz„°ßxœƒ\ ĄŒ#Į¶BŌæµäł·F⯐~h9āO”ų[±ųūTĒSœl°2&I!?#/cĆ÷óų-a?O'œMķ¦“ DłŸĀ–E3˜c³QY\Ų£B@łv±Ū™ńå–u$źu\6…»ģvŽ’ĘĖ;ńÆ)÷÷–²n€,²hŻČ Y4ƒ€Z N„Ö§įE 69ß<ĄŠč~÷“ø_-\ ¬…Ų*¹éD*…ž¶vŌ?yžé®ģŸJU+ż[ŹęŸ,ŚoFI?ČźJ¤ßĖgŽö 9īßeøvٳ)5¦ ś·bķWGłļ} āē ØÉf–æ3Žč¤Bö·&ŃO…ą«I{ŖĒ‘©v…͐¢Š`•`'ƒ‘ĻĮˆHó9ĽWåŲSI%0+ Xr Ä„ øbĒé¹2‘*P¤ś·"øƒHZ-IµŠ{8 ½‡sÕ¦µ\ėĪA*nG䖑<Ó¶Ÿ(Ū,ż’œp˜“Š:3RŻA€vą©ēT‡‹i]ŗ7‘ńh­€iõn.¹NĄ)gį™ü:œvą‘ōæ`4õ^cR„€łoą 9„° c@vüßøŹWńõĶp֏•ĢKÖ>PķE·=ö„ęé’kśˆęoäT·{½Žm:ńāsŸ±Zļ\‚ųČtZ€Y7€!@ž#ėČ"‹4`»²f‘^HŠ™ŒwLap¢€oMŒé޼}§ö øŒŌŚjOÜĀ–’ÖõßZžŒDü!3…ż“¢ż`Œų+¹żŠr¤_WļāŠ5+˜ Ša'Īūe‰rłćьšƒi;<į7 …LYt[%Ųf ¾r|™Ŗ n?÷m§3łƒ¼YŅmVÓ Ņq|jQĄJÕZS£;1āP`F P#Y‹ĮT‹‚\+ ?ˆtõ(N®®äÉ’/·7((Bŗqc}>īhہAO¾Ķ|õ¾”:źu7 䄺 Žŗt,»ö?•@‡.HCf`] ÆŽó »ž{A€Q½iæx)ƒ$‰¼ü¶|÷v9‹ćßĖÉ>kӖ;¾Ł”¼ćнցÉ`Ō   ŸĪözõ“Ü ŻvʈŁ.Yd‘*²€ķģ‚L¦;…ČĻ*õĄ `„HROĄ †!Ūņ­>ĻęS%č#ą/ƒcV"ļ›GSp2Uąyät€Ņ1į¶õO‡Żß̘–Œų§£°_:lž©Fū-“ž”ą‘7²ų±+Ų$It¬ŪĀ€€ÆōęlFśMVźO…šk’}w+++#Dß¹7‰ßžČ¼y’Ŗó)@[4H ×ūüõāĘ[ĄŖSĄ¬  v ņµŻFźXqM0ć P Ü÷Hž÷÷όڻ”°ŗ•ą§Or¬€Čˆ±|ć­Eä!ĶĢ!ؾäīŲ‚„7 įR柳ķv¾ ‡›_¦•:j!ĄSĆ0»“‡žAP©ąi`øŻĮ“¾ƒ •ÆFœy‡WTš±ĶĘo@uÕZī?ŁĮĀĆNā‚q3ävÅēväp"ģžųw±õ ’A)˜(-@VŅśµ7@¶]`Y¤„¬°A’Ūų†Lž{Ū…LkūMĄ/ČDū=!ļX(ĮH䊶Væ/ķ9ō°Īą˜; ¤²ßx؁·€ ŠoS– ŪjŌ?»’ÖŹóoÄߤĶ?•‚~F‰æŅMłümŻHEß®į÷cŠō§Jų­żtżdß(¹ßщ}&”unćEˆ R}g’ E½Ō³)fŅÜѤ[ 0œ"ąDŌ›R̈#.¦ ų_Ų­‡›Hr;¢†j†:œĢŲ¹'!o-"Z+`Zc­€Jø’N÷yø„t_”/ēź€Ÿnź6‚ź})BĄ÷a„8%_U ļ‹Æq…C ),ęĀĶėåń<ćtó̜?˜Š­itŚ-ZÄ;æ~Ćq_¾Å§/ć’@€Ól>éTФÜ7 TŅRŒ¦”µ@må¹Épm€¬E¦‘}HŁ Į>Ą­Č×ßėÓš p»€?4^¼x…Ō¾3æĒ Ø61ę<ąĶ÷ZąxĄŹ½2ķä[ˆś›µūo-«:ˆ’Ö°ł["ż:ŠkÕ§FĀ(æ䣝ŸlĶæA˜!üɈ~*żm‘ą‡2xĢVžÖE 0©7³©A‹ū6*ÄĆTŗ@træ1VŅōR”ō+®5¾}—üæÖQpŚķrپ„_’3å1ž.éÄY×¾&[üŸĶń՛y½óN »žY~ŗūln ‡É½’Cī95š םĒ1U›™<üJJŽĮ pÓ@ŽÆ«ąķŃ÷PŚkĪ¢ōßü<|®ūqu+EzäVr&=ÅU÷»ĻKŗqłMŁĪØ  „ŅśYL ķ“€lJ@Y“²€m“&£‘£Ū©@ƁĮ’|/T^ÆIŠx …}ģœp’ŸĮ1o#§1hݬ¢¹0į1OKŲ!£ž­‘ųg*āoÕ毐~™‹ö׆¢U“ DśA?·'kæ:Źo¤ +žtżDD_9 |tų£žC=°{0Ģīa‰Ī’ ‰ "u6‰:;ü›+ų»-ü~Œ›ßŪøä¼ŽLßLöt#ŻĒŚ‚‚"āDæ 1Ēļt"Y“¾‹z¢€3N3*h„ ¤=] zMpƒH&¤ŪW@ļshč ~G±Óɔ³ī’ėMüGToęāö\tżūü lŒč£Ģ”Ü'źA!)B@]5ĆķNf ŠOI ˆ¦Ģģ5D¾DJNłŚķp"m^PŚ‚\0šęńųŽ}åA?{đ+’äw.õź÷šģsøLčˆRcµ”ū¶!`kŗ„D_Ó=žlJ@Y˜Ć6ó€‘E,$€lgO„@Ÿ>ĪČŗŖżN$õ–zŸ§ “Ūć$ĄÓĄÕ)ī7k€££ėbG‹ś§;Ļ?āą.oz-ŻżS%ž™h#é×A¦÷ƒG² IDAT#żV£üV"üF æĮ2Sxļƒö[ēg„O¢oDžjš:NuŽß‡™}t„™=ņir‰!­[•Ō[õ†Q97hI÷A0ŗÆt8Œ:\!cÄ>F˜}udАiW@Uz€·ńųł<ģĢaé-ļ5µĪ{|ƒ¶p݃_q"•ŚóxėćĪēĻĀBnzf2SVž…}ܵ,Ļ/įšĒ>cš²ķg‰ÓͿቒØx ś÷ąulŌžą„kĄ%{³ėŗå<#…éŌ:œ¼zĒ3ÜyĘ„r:ƒXM €¬ ‹,¶gd€m\< É BŠx%hR%yŸļ£ĻQą%!Wå7 ;š!rƒtāW /ņó€&¬’’lŌ_F2ņo”ųCło Ä?•üXüć[ö%‚UŅo%—æ% æū~%8?ØąŒš0F §Éį !$<9afīą„clüm+ ģp ŁÓAJć{n‚ĶB)¶å³ G¬Õ2Ķ2 &dZ$:‘ZJ°"“1@ uˆyA¤ü¤ÆM¼œĆŖžå­ńóU׊8!ąįĖ9ŖjS‡’‡ŅįĆå³ ¤Œŗ’ŅžCń)ÅoLŸŖM|ұ+'Ž÷©\ż_¾˜Šė„‡ł·Ø„³¦žÄ¼n„ņś`§5æņµŻĮ‡G aüŠ%tټš÷nŽżÄĖ„–J 0Ó22ß) +d‘Ez¶1Hp'po īņ)×Ń˜ ōKqī{Ebž¬…\ą3h²ę„ ‹€žÄ„Sn‹–’tł3ŗ}k!ž`ŽźŸJ~’ֈö·FŅæ9bN€4BŚÓAöÕłł~ Ū›uœUāZ ŗšœŹ Ā9~¾Ų»–GĻcµ³˜¦KäS%ļŪRš4'ājĮ²p¢`)q ¢@¦§É:™ŅQ/ ]®µPö E fpĻ•/pS›NDr‹TóF…€;Īä”H˜n~Ģł × ønF$ڽ>ƒŃźł7·åī`€”§_Gļžē6}koģĻĄś^ŗēJūnŠģ÷ļĮ ~Zˆó”u§s†æŽ;gD8@Y÷ģ¹ä}1…óņšB²÷™ŠĄŒŠ/Ū.0‹,Z=¶©‡‡ŃB|Æn…]2įWK1šp`Šs_!äö|FQ | M7Ą4arĖĆ“ĖY+“ū§Jü!1łoMÄ?Ó6’dŃžL’~+ÖžÖHųõŠń}ÜĄ~’ųy0›˜2% _›Z&õ÷óbē.ŌŁ »ó’ēķnkD¾„įp"„$X Ņ)x\a½ß=dF0ėH§NW€Z°"Ä ZČ-BņÖ"ʝĢoÅÜuĒr[įŖ Ų&ü‡ß Ū0ö™÷™?ī§…8Ÿŗ—2§‹™æį~eż½x½÷W€œ0²oZ˼½fÆObČiētäČźĶ|6Sjŗ (f„ÆĖŚ“åöŚ*Fyy¼»Ø6ö™M­M Č"‹­ģCĒ6I. ÷©erz€ļ‘Ūż‘¹ĢĄŽIĘ­öMŻ””cź| ”¦pLa`¤€MŒŁ XģœĀ~µš0J’ŒŻ,Z‹åæµŲż3QŁk’LŲüÓķo¤ß,įO5ŗÆ‡—k8wK˜ū0޹/­płųc’ ü·g!ĖŚvÄo/ œ–“€,t‘%Ų¦ ā@ŗ„TEd‚@¦ŻfĀ–LHՐLxį ްšŁ'G÷ćϐ öMøœ#+×ń驋ŁķčSšØ‹*ųĻĪózøbĀ,zµCśń œ/ŻĘŖĀ¶ŒytŸ+ig÷å"ø¾XĮ»՞c*+łp¦DeĪS¼‰°/6V»sų ¤s ĄM//õėOn‰“€~Ł”€,²h•ČvŲĶ»Ÿ„uņ’-š0Kh<IrĮ’ē MŠvĘĒq¬—` š M)ÕfaŽ‘ R@™Į1kAĄ|d¾–.œ l¹O"“¶ØæņŸĪØKVö7JüÕłż &‰|5’dH7éOT]æé™Õė5é7Rµ?č@hõ O„d¾įWŻq’1s+­öօȳ°Ž§ƒĢŽM'9ģ½øom^Ė}½kų¼mwź\ń²"@fį“äߙÖĒ–Ļ}ŠŃ<-#ń„Ś«96Ģ ¹RÓµĮ¬ ļ ‰„śwfDŖęL&ī(ķ$ Åæśz=ļF»$ź PėDųƒrW3BĄf?¶bb ŖqĮ–|š ½zCƒ²³ŚJNµ;ųüčSä@ÉÆ‹p–īCØKNÓēé°į"€•ˆ÷„/ F\ĶW[\ˆ·o§8ä @ߝN7SŗģĢ”IŸ±ŖĪĆ!v;‹÷@v¼t=¹į0ƒ„›Ļé={Éū:­€µ¾žūg÷īŚ#ńūĪaÅ }ęFÜeI:ču ˆn3īn²]²Č"Č:¶Hp²`ĄÕB.Śgd?ƀwŃ®7µ ŲYhš ŽębŖ‹x3Ō},51¦/rjBZė[ŪlÜó°Ök;ZŌæ„ņü3Aü3ńO•ųØž(ŚˆĻ7ķ7é7CśM~£5ĀÆĘ/Š>Æēõai łź‰ž[ Kä)xD˜pē5<Ó»Ž÷ŚīÉw[‚ī\óßš"°5ÅGÉŲćŁD0įHÅ-ąE®“ą“8‡žCĄ¬;`k8ÜA¤Eó(ųņīś9š;Ż|µGOž:÷zVĘoŸ©ō€nł7«ē xx$—ŗsłū¶—łąæ#x£ēįÜ2źV6tÉ!2f0Ųl¬yu:7\4„‰pŸĪ„EķäcŗįxNkØcā€óŲkĮTśū3PVn§“O~ósĄmź­įnū²ĻKæ6u3:o'­ZĒ׏HįIgė¶”ud‘ÅŽ…ķž”b[‡$Fæ"GéĶąO`°ķūföw²`°»ĘĖēx/ĮøAĄTR³Ü®Ž6y̧"§ŲSŲo<$»ĖB!^QÆĢ$ł/k\’Öb÷Ļé“ų›%żé“ö+¤æ„ æ: ūWˆ‚9^>É©RĘAf ČÉM‰,YbĢGžšĢʜ¤VšĀžu¼ŪyO* :ćw%šI°µ:(HŌ  %Š‚)a DL ®čēhTH»Šõ€ScŪG.ćC$"]»óPďsÓzĘƒ ,ķɐKnå·DSj‰© z(ļ8Žg‚!NĶÉåYw‹=u †8uÆż9āöG(__Žķ֋ł»Ø„«'¾Ēt„cĄUG3>¢Ēs’ćt»|ņ9Ÿ¾Ė ^ĆŚuą¹š@’=y9ÓBœ­>†ÓŠ8Ė_Ļ3"¾k u Čtm€¬EéEVhåäŠ÷óM[ōPždī}Ó V Õ½_’sė:Ä ™-Hl­:^'µļÕrd'Ązc.žKaŸZŪķœ ńQ:,’[3źßZģžélé—Nāß*£żj‹(/%žé"żV£ü©~½"y^ĪWj˜„c MęGöFՂ„ģk'Šł‹dPv"Ż~ć¹żjłØż¾l*č„ß^}…ĢŠ™ ”T‚t VE °"“f1@q¼3ž×,gJßÓ9ø× j@&ļļąäSĒšy}ń+Ć&æL·ĶåtŁēpžź7¤‘ėėŗ“„€;FqyI'ŽųK¢Q!ą”WWÉE‘0{Łl¬ļ܍’^ó4æ<{{žū7’z6;>Z®#0f0Ų,ų Øē+QÕčŠé’ŽĄ5ńž-*įÜ«d×Įņčė§øxN pµ2ƌ`µHąÖrċ`Ls²×į,vLdk“~œbr{ øPüK2ozM5w•—Šh!>k$xx0nčQŲD‚ĒfoHŠoņ˜ÕŲųN‚S‰oĄqx(nIaæń°‡ĆŒWœpkFż­’\æ›Ų>ņŸŽ-QÜOÉń/Fīg©‡­ķ7×Ÿīœ~#¤ßL&撛r ”ÄŸē6ņ!ņ6ÕV*Š r_ÆJd‰“­žę’ ŪŚž\Zø ž¢ › rš¶œ›@8Ōz„}#ļό‹Į¬X —:aUŁå9Ѽb]Q >AMCŠś¾'r僐ĒI³īµ§”ė‘cb@Śk(õ ŗ’žĀĪr…üƒ\+ąŅ‡™é"|ˆåæ’3łEž *Uå«i3&ό}œń®$Ż:ND-4–7žk ī†zn/,b¤Žūš8?¢KÉ_€_#Ą[‹øīuŹr‹˜4¶TŠą„ķg)'P_[‰PŅ@®²°y=bŅ“ |Ćż|U¾Ń­iąÅ·p„CœRŲF. ØąFE€ßAäbŽ ŠRµ“ź@óŚIėČˆ¬ ‹¦Ś:e±UpŖÉķg d5X ’üœ’9±ĀB[š·ā›«1¼ ŠSoēž2vØ Ń ųĄä˜[±V'Aš7™x“FĖ’”˜ĻõODž÷@Ÿü—ƒŠ‹ś« üUnDlqŹ‹z»ŗ*„łÆÆEØ£ž¹NDC§&ņļ©C$"’%€»į©Gųœ·ØæĻƒHFžkCŲ‘’‚čš!“ČĄPHńĻœ~„ӏHń:›#Ų6G°é‘’¼ø%”"@ˆ6§į4ķŹ’dÓŲ}źEYŸ 8g¼„¢‹BŖ^ŪĢP_„3“ī 9<–*ł9hdŸŅjdQ "N\+äźĶŁæbmżėqj‘õp‘Ź’Ęw˜2Ņż^B„ŽbźŲ‚ˆD‹Ł÷²#Bv„ĆŽ6!as&z9‹Öœ ~‰ üV°!a3ó;T~ėŹ¢¬W®QN"‰. Čb€²$Ūg ٵ,ŚwäO)Ģī g5ĻĪņ;~'āƒy>bƃūpųŻ/°ßnūp¢ĻĆČĒĒĘŚā}^„²Ø×īč\Sß æĻ˜ŪX”ģųAĀ~l]ź‰t@o-Ā[‹ Š®iż€³Y"l,›ö> .;‹•õ6’Jaŗwj+µ•±Ē»Å…ŲāBxfwšißĮrėāņՈņՈ—®ć$lēßTŠ»Ļk!×bąĮĢ3KY‚mõ\“‰ž¹āŸŃ“ܛZ0Śö9‹,¶'d€V InĻ·—Éa/$yżą õRģ÷”^c0ÖSū ŌAw“ŪKĄ„ø÷­4 ‰,’‰nDg:ł/a…üG£ž†Ę„BüAßīÆXžāę£žšÄ_õ7Bü«üŲŅEü}D"ā_€qā$­äƬĪé×B(€šF°©Iæī~U„ß é×"7d?ŽšĒ$eLY=]+BÜF›ĄX), h@n¬źI¶!ųŠi·r.®ż‡Õk)ŠŌcx±%#šZœ±5/é‚Y” Ó’9AĄ’( 5ŸIA ń÷+aóFĆĒŽ‚b€"h]ćĪŗ_ģvžüvćÜ„ŪŖ¶{év†ōļ~ —¼u\Ė…Å<ŚPĻy‰ö™HhØę§›éīŽHFÜ_ ¬‹’ü±ō-*įæmڲx½O¾§“aJ0șw_Ćī-!ą×oå(^>Ÿl^Ų¼¾éµ†:†ŪĢøž ‚‰īßf„€ØĄōsˆ™ē—2 ĻQ‰žæ“D#B@VČbGC6 u£·Éķ#$Æp~‚õ3E¬m·ŪuJv"ÜœŽõļŲ7ʁČī…£,īW Ņ—ļ_ÖQ’–ŹõĻtžæ–ÕæP’Dc«•3=…ż ØłkÉlžfŪ÷µųĒŲū“lœĢŽÆäņ;™iϧEXrQŁæs4Om±Kź¹KJĘC6ŠĢz›„E†]Hʌ¶ģĘ›Wpœk5uĪķJipogķ­Š&źčÅĄóAēNd4µ ‘`4 dG4†„PŠ 6Ī£¤XHŠKhLP„ €±ŚZ©VÓŒ¦(é.7ŅGqÅā|łōĶ”]óS£×[Qß՛¹<7ŸĪøZ.ŠÆ“,(dU] =>„ŗ•ą£7qju%7I;Ūģüڦ„o|”i9¹H+~Ē 2°ĆNŒ.ĀZ AŌ€Ü"$ŚĮ¾'Ų÷(f)Æ­÷a»õęßq&ÆÆś‹ł ᇋ?¤0…ĆGńÜ!#šµCšt/Ē"aq_mq!”“€V`‹„85æˆ+ÕiĖ5ŽĢ„XmXø•RĘÅm7ĪHJ€„­ Å¬Šŗa¶ņ­ )W.’\²JĖQPAóüł” ¦Iśl'Él*Öæ_Aą6‹c=ČĒž °§Å9ŃŅäßj”?3¹ž™ ž™ČóoUÄ_¦‰æŅś\~kžÖBųÕų Š£żR₤€ło ņÆ ‚\~µŻ«¤dG¬=ˆ!m¾dYķæTę°w%`“œ‘ó³-@ėż¬ŗ"A‚;U*Ā€Q F÷G:Cbą•-)­ v ½”5«–1vĖ&žó>‹N:Kn«÷ÉKģqDC› Ż5ī'BŃ{•r}~l,£źŖy0ƈ:taAÕ­Ŗą¾É/³ųŒK(Ÿü}ŠØkYŃÄ `¬s@2!Ą½Ē)Bs­ŗ’Cī|ųrfÖU28ą§ŻĮ_ƒFąŲX‰šŌ0ĢīdfÆ!ņ]@©šŠuō–$rO#§p–Æ–×ļQ*³– <¬Ö(a“@`ˆ~ŁŗYd‘qd€ÖŽ&·×½` K²V]»z>p™ ©§®$Ūļ9tėfKņóÅ4`_CG¬[Ęrš`3šąĖ怸ó™é*’V żµ–Øæ:ĻŅ_Łæµ’dÕüńVc⯮āo8Śæ ‘žtžxlˆpīuĄ&³³¦†‚œztīĮ’—ČMTu:4t¦]E{śę¬ecMõ¢ Õ9yKRh•°ņ¹+Ä6™P`V H(hlŠąõ ¹nŲŁĢķ„ģP¶ …šWČ-ꓐŪ‚,l+n€² ¦Œ‹Īm(% +d±"+“n$“óė`(šŠĪė_g©ž’œ}éĄĪĄU@Wńšķ%ł‚ś‰SŒą3ąśĘ7ĀéÄ4P™Ū2Iž·fŌß*ń‡XņŸ ā‰ÉŗŪłłŚū 36’tDū3AśõȕBā·q¶į)ąę€uĪÕ“ŒüĖuåā x(Ī+fń„ÅÜ÷ń}ÜüöĶ,Y½IŠ>+ÖE—ĀÄsÕu£ø>‡•¬jŲB„s'‚9nsGžģ{ßb0!Hų澟 ń@ļ;—HHEGƕjaĄŖ(`FÅŁj4 ī€tˆ©øŽy‚ĆGå»ø×ö“Ūłą·ÆÉ„ŲÆÓNÜ?džq†ƒ]Ō‘±A?bį,J>†u-e¤_uRڼ÷<}ūšŃ| P¾ ē+ćy4 wĒ9G=æŗ}`"!ąĶĒéŗĖNŌõI²NŻ:Њ  Ü÷`BĻLfŖ²¾rWŅń£8R’(9vŸCó¶ZnH,l n€I ȊYl§Č ­Y3V‚I"±ćö#b€‘Ń%ĀŠT°&÷;DMü ŒŌ9ncąr„!B&“’tYžĶRkŠś§3ĻHšēŸ1āŸŽĀ~)ŚüSö›!żõģÓ=ģSę ˆŻƒŠ]‚ł¹ß „l Bb‹Cš[āļ¶šK'K !rT¤Aƒō[%ü Š'üjü$/NāŚljcŽĆs?Ē®WģŹ¦šMŌxjX“|Ÿ-żŒÅ«7°]•ŻŁÆąO–zŖXæ™ś7‘f}ä·34ūĶŃ bA¢ļ§m2lUˆ2!8ģŖČ{ɧŚŗÜVÅ#®h.,˜Iūõóγ·p’iWš^—R“ĘÓ+ąēä=¦?Ą ŲpwĖ~„+„¤\l?œČɀsĄp>/ȇ„_s¶ĶĘæg\›V؈ī Ru§8Ģ)Ż‹ĄShóõt^Dß! 0‚-Š#ą±›\SÅ%‘…ī\ŹĪø”G»÷Ā/ü¼‰ė;óXæ‘|^.fī‘K½d'āp"Y!żZŃżdXTĻ ’Ž)©0{ĘѹMg*j+8顓xėkłņ:kń,<ˆļV|×|€YŒŠÉM©-„}h)»y+ł=ģac8D UĄa¤"¾ÄGī ]bFćļ=‰XJQ Šśk VD«.£‚€Ś/Äģ× ; „ÅE8z0+–ryÅ:īō 7;#!ö)hĆCg\!EĀa\@°ćN²…?ą@(_ŠŚJF»s™Ü³·L„} ōuē1£¤-R=¢u”żoŖĮō3ø]®÷Ivū})ļ9\,øųVnURīæ’k¼ ü§°-÷ęä²¾j7¼ū,ÆNčÅ9jGĄc7s`$Ģ~cnåZēāŪ)äOyŸ‰6[>‚v š ~¤Ābł½ō:Ž@Æćä“%-@©ļsifÜŪjJ@¶.@;²@ €c€~Ą~Č™…ĄzäčōRd›üę<¦‘#āf?§ ’L֛ŻS„¢„ż+ĢÕ؅ęÕv%łŚū“ÉćÓB.š©}üivp<łO“PqŽGY+±ü·ÖØŖyž¾čž’åłoMāo:Śo± ŸBśõ¶ŁŽ’ößłøÄįlI>–!AžßĘ1~Ē|įīÜjfīQÉKGē°Ņ–OŲį@JVäĢ/©j,˜¼Ŗ…Cˆŗ}n‚&Ć­y\Ś’Rr]¹<5ó)Ķׂ/~ł‚AŠ^¼ōEĘM§9†jt擾v8Nvń7°“g«:vĘćh„Ké Ä#b‚ńĄ”#8B±-÷Ģ ™m^ł[õ}7:wŖ.#‚@³ŚFÜ[Y P».ø¹u[(ūt‡xkŲ„¤Žø’ß”ĪŻ)’gö²OčŠoXÓ3Łó·3"ę å*€Šõ8Ā!k߅g!zĻµšÉs Ų\łŌż¶„99¹¼;ö‰Ų.rĻŽÅQžznŁeO†üēv–L~™æĆOÆ=D÷ oc%[°Ż ūät2£Ø¤yĮä×&°óÆ’c²ĖĶÜ{^įˆ-hØc€JØw#ź}µšŅā‹*n3EĶø¶„”€x ŗ>›Å¬ s’‘I±žad üą1äJ÷½ؐäJö‰-ÆŚčŒ\HoT‚yHpšĘD€ąLœ§@‚ć‘ [„™D;`¶½¬3:(ŁOkl[¶ü§3źßŅyžF+ū[!ž¦ ū) _‡ųėc*¹ż”BÉ·×#ż ’?Ģ­ēzÆą|IJXŠÓ2$Čõ8±Ōɰå~ęģWĮc·a³˜Zhå7…$©ł‰č’«Įšł Ņƒ8顓(Ī+ę¹Ļž£¼²œć÷;ž`Į_ ųįļšB°pŁBī9ćģ6;įH˜Ÿ’ż™®m»Ņ¾°=u!8øō`VnZIuCµü½Ń“pmPׅn¹åtóUSR_GUQį. @ Ńļ@ŗÄ‚#–+Pˆ«q †$+§ ؁t¦ č¹Œ¤ ˜ŌµwŒŠj!ĄBŹņKŸ{=ßßĒ;ö6ż8—o~ų‚{K{r.€² IDAT}iO|oLąšźĶŁF’=©U»7Š-Ž;_jžėßļ#…b=ü ō0G½R‚ƒ€)¤æÕ®ĄL©©ūŽ.t"żisčEżĖ ģg³ä’PŒ[ž’‘Iņ_¹‘*łop"ā£žZäæŁī_åĒ¦ŲżõȿσHDž}Dm[<¹/ 6ā’zĄh$’źŠžqPL?"ł:äÜüĶlՁÄē*mbļ`lĪ$$:D(ˤN™Ž@™.ĶłƒŻćfš÷m™6¹«6žFqC ®:æ„Ķ(ł‡įĀ]rhĪGž RŃ«­ÆWf\…ūFŽĒėW¼Ž/čcł†å4ų䁳Ļbī/syö¢gqŲ›SE!õ¾zžXūGō8I’ųlégÜ}ĘŻ¼~Åė¬zfćĻOגhU)łqyŪR ŃÉÓ@I°g8œüœ…ķˆÖ“;óÖą6°(ߟD‹Žü!‡,R9ā­ļ „‚eqD³s…C?Ų”ÅŒˆ"”EóųģGtÉ”ł¹kÜ0Gµ$xZó;²Xr4]“’u Ź¢\„rÕŖ«zP/® …)}ļq~ó×.ē£übžøz“”m<õ²ėiżńjżź°¼ vøłßˆ+9ÕęąĻpH¾åųæ1é ö ‡8ųĄ^¼Ül ! āó"J÷"“ĆßBPyTÉĖcN~æń×R\ó§ó–Ķʆ«īć®DēĮćDxœˆ.õE'źBś<}½”m¼µo-‚vИÅz¶ŗšŲs­µ•ˆZUĒ€-Ŗ:IвP¾‘čŁAļy#¹… –˜æLēł+Ń3ŪdZuīŽū’8ūĻ@ŹiY“(vTĄĄkĄ!)Ģq(P†\üī2VwšÉĄPĒM ćU ž4©Öj˜*ĮĄ¹ČnĆr§ŪƑŪNq…ł$čŽ\ ŠI·€) ‰J¢E‹żé -ĄÖ°ü·–ØKęł·Śˆ łż™ŽöĒ?TÆ ‘óuü×#1FgXF ŁČ«*ęšOŻæĻ*nļŁ–æó:āwåhµ‹šėÕ/P°<Ąī‰C@æ}ū1ųĮōŗ½¾`l|vĪŅ9\wņuĢ^2›ė_Ē£Óy] $©1ļį²…€,/Bé0éaJ=õÜTŌŽ{Œa Ä:×j*±½ł8]WžŃ\õ8' `i8ĢŃŁü+fŠЉänE H·ĄČvj}†*³Š­ÉØ ™@"ėČbŪĎń Ń„ ķū :u[Ę0ą}Œ²¬`"1Æ)슜WÆ[õŪ$9MbÉ9fŗp6šHĢ1øŠF/ŲiqØ’S֊,’Zė÷@’ƒ)”EžŻåˆõQņƶūĒ“’ŗ*„ł‡Äv­1j»æ;Jžõ g÷ĻńW6²ł‡%žÉ¢ż‰šg6Šć§’=u¦Š†„ģ±ńõČEōÉY³VĘvR¼²;}dÄęÅ“ oĀ%¼ŲĢ~5™;AI§ˆ”ŹiŃ£s®x}÷éŪl³żvŽÅ«5ZöE1{ÉlśķŪß¼‘ē.~.ę5!dĄok~£CQ:w ĘSĆņõĖ9l÷Ć“' jÆVv#$‰¼Hˆ¢ œ†¶d¶õé ō„Š“ę‰pd]¤"XIH« ń^“„€\šÄŠ3µ`6=d! ·€H§n\ßPĆM^Å oȧϲ7@C›ßǐüB¦+clvj ĖtA>Ģz“=%‰v{Ęō«ćµ›_ā“£NęÜf†Cģét3W¹ÆL~™>€mųh¾Vęóyæ’½vKĘ>Ęä"ĄM-øēBFŽ»„e‹ē³xā)æe$Oæ÷ ÕļćČSšؙū!ęŌkŸ«DB@½‘,-@Y·Å…ŠK Š{¾0#“tJĄč§ÄÆ‹ ›Åö‰I¼Ję҆#‹f*ėBŌ06…)¦K)’ģpųHš”›1Ü(Įõ`ŠüCš€²Ģ[ž“ĪßQ+Ä_‰śēŖ‰æNŌ_+Ļ_Fņüć×§‹ųÉļÆDķžČC›ų§ķWc–Żóń±$·Ń4?r/“ÕČ>–#WBł¹Ģēj`Eōµæ ĪÆW Łp•wgģO†Æ’“öUqū}Ś÷›xĀvh,²ŗ@k<“€Õąką“ļ?į‘óĮ&bwévŗ „ēe(öžĻžœŠŗ Ī>śģĘׂˆ$«"s–ĪaąA›KvlZˆøܑž9¶`śļĖÉräS]Ņ}¼© YQ ž(‚@*¢€UAĄŠ;ĄŖŠøQ » ö:®'œ?–ÆėĻ1®\~öūŁ;䕏rņD”"t8b sG€ĶA]$Ņ”P±ŽĀĘŚć/`C0z8nW=Ī[7æÄ™7Nąļ35•œāt2»tÆ&9ņĆŁ9``»ĪÄäļ䩚j+éĢe÷¼B—ҽé+EčśĆ<>¬©ŒūÜõ^Üqõā” Œw(B€zŻÖrDSLH2åŠŖ p7ŁŗYl’ŲQ€½€Č9ĆiĄ+¤¹}Æ!ēė[ÅŃĄ4)yńfäļÉ$ąÄöoµĄ£’=qACqč“ e²ü§#ź鍶Ēo—,×߬ݿ„ üµāT£żj|Ó@—ß<¼- õA$äčž*dræ łčEł%ä_m%²(°,śoƒĪɆżß=¹žƒ¶,§}M®x²ÆEųµęŠ0CiVž€‡z_=?®ü‘1Ē‰ymSĶ&ŗwģžpģ¢å‹8Øō ÜN77¼qwž~'m äÓ«8 JųUińi1ˆ ›I±ƒ$į’ G ćŒDšĪĮ¶BŠ·%1ĮŖ8 ' @r·@¼(Ŗ `p™ ö=’ŗ(z97)XqIP£ß06\žĻ_ūcĻøF®‰ä­§]NļŚWn?—ZIjŗ-Iaņ…ŠdG@0šŠ8q\,pKö ŸĮ…m˜®¾ļüµ” „Æø“Æ@v(©å\āvóö5O1"øģžŗųĪŁs_.*n{•µ ź:€œą®O,¤£H 7@"dŚ `d»² ¦$ŪwVČb[ĮŽ 8+é§l7ˆŃĄųtO*äGČK‘;K[ÅqXC¶ć[ÅWȅż6Xo#Ģ$\$¼_Ä_˜iaŹ2hł7õ‡Ō,’ńėJIoŌ߬Ż?Óyž™&žŠĶß ńW¢ż"¢½5ōą}€öœßx1Żō¶dæ9ŗļIŗµĪ"’‚—#_… ”=Š8p®ŚėÖmįČ-Ėiļ­Ą›ĀO“lB'›^5KƒÆĀÜBīžšnʞ:–¢Ü¦š^æ­łƒw;8į4įH˜o’ś–czĆęŚĶL˜:GĪ—³ŌĄÜ_ēŅoß~Ųm²¦üĖææŠ„¤ ķ Ū³SŪøų„‹łųʏrčł.«ó©ŚB IŲ"nĀ8BAlįp달·¶¦X`V0+ Ø_KUpXbR œ?=1@ķ ˜>‰}?›ļž¼–¹/ÜĘmOäp ©?g*®£ŽÓFŻĘ—7<Å­1ūwQ+E(V®6Kį&K~"!ą½—č äœ|.ó é>äópVno¹rbƖ>/"”«Ė͊"dG€ß‰Ųu‚ÜŹŹųūŸ$a“ĀM]”nīz„Õ“õ¶Šš§(’Žwä&q$x)æg8%@k}VČ" ;‚p²¾%q šßtO*äųŻłXĪĪäāz³Œ¦Hr‹ÄėRŲßļĄp!LJ`ŚLÜ7öÕz!ž‚¬•ĆeI)Nk“üg*źo„Č_ŗģžF ü©_ĖńOtÜzÄ?ŃžPį ŹĒNāµ*ī I$f² {+€•¤Fü› °Xƒ”Ž'a7yĖäŚŗŁkżæ”Hž¦Ā€ “HTü:{Dē]ؼ] žŠr‹ŲT³‰×ę½ĘOkŗżĒ×µĒQŗĒ«¶óæńÕ”v(åŲ½%‰4¦Ōyėų½ü÷˜v€Ÿ’ü9‹',fĘm3čѹgOdĪ’9I}g¶°IņbéĮŃH«¼t.­-%¤" $;^åµt †Ž“£)U 1ą»ytXµ”W%‰ÜHˆ=<µ\žĻŸ|üä5”½pc?y™żAūĶ$s(õ RōźU×õžGš}^o€|’8äx~ ųłŪ9^=.^ØŽČ»“Ļwڟ€’ß’į³ģ.Itī“3sµöķtó“×ŪäŖTDe¼ś^(Itv:š×ņ8%€•“€L»ōž_ŌČdJ@™N]€DȊYģ(ŲŽ€®¤•šĀĄåéžTĄtäփ©ąXä6{ŗ=Ā%¹hāƒ)ģgr7-~$5#ęū:N£B«ņa‡āZĄY„®ŠZ żÅÆ+%=Q0_ä/U»æ•Źž[›ų›±łėlŅųp¬åaųzśx$FėEŹ‘ū>eŖAQš7I«ÜxڳÓņīœW÷7»UžKAŽ[2ĀO”Üł:¢ Ur€Ēļ”0·€'g<Éš#†Ó½“lūŸ³t½÷ź㠈‡:æ_’$.łr<ēAü!£䂁꼒žļŽŗż(ŗł n}ēVŹ~+#&M\pxåBŅŹÅĶ©q.”Å”²`+‹5„]D‚ÅF$Z¶†ˆIq@SŠxcÉŽ·A@-Ōb€Vō¾Ł1XŖ+pΟĮs‘HóNC‘0Ż=µ\¹r 3ž¼šo_ø•;žļõK،ŗRIˆ¹`Lč3˜ŖkįeeżĮ}Ø/.įīMå¼üȕ\’āżņ}>łyJA¾¹d`PQ 3•q~'bM9G AՈ łSĖ™¶Ļ”¼rųø+8SI P»!`ÓZģ’D{ZĒļ0“КÜ-jq@­ēĻxH‚¬E+Åö.܀^įØĢćYČH[®qČ SĮ‰ĄT)Į³˜'“Z=ƒ:ąd!!` Ö 6‹Ö…÷īŪf[ĖņŸ-õ·Rä/Õ<’m‘ų'ʉæ:Śr ”ę-98ׇŽw)‚\ŠÆVo/iBŁ—d ĀĒęžō® qdķ ŗÖ•“#|±"€A Ūm„ÜnKĖ»6ų(Ģ‘€’‚-[Ä#ēÉ6~ßĆ“§qń 'œjCõ¼/„JX¶~³—ĢfųƑTjʻ߼ĖŌļ§6žÕ¦U¬­ZŪ|Ā$ŒĶµ$AD‚Ćޱ#ļpæčĻŽ²ŠĖÆ×’ 9Ö ˆįPr§€•“µ`VpÓ$¤[ x÷ī9"ٜ‘Ży•RI¢óĮżųZą÷p ŻÉ÷EMõ=kÄE¬kŪžj+yäż§ŁU]@-|ü<»ĪömY“š­ ` -Ų*n½cW`5%ĄČveŠĘƳŅ! Ū&0‹ÖŠLUÄo (?åµ š2ņ£ųĒiœT’ą2dnuz S¼'Į™B6ö ĮČE­~?‚Ąé¹ŲN<<*ĮnĄ&絁AĖæ©»šÅN—Y·ü'…ŽMŅJŌ_!žŠõßĪH‘?ˆŚż½Ø ą©GT98SĖóųźĻO­āiYżc&h@“ųƒLüµöŒĪQ@Ø[Ź©”Ń9N”ä‡U½×A~č…ʇܦ·÷püĮF.Œ@„)‘«‰6VFvC7Śvįųg†|ϚŖ"j‹:vGóßY3ā‚īV’nG"Ńļ$ؕ€½ŗīÅā ‹i“߆ŁKfsĄ®Šoß~”żVĘżßĻü{ēóĪüwŲX³Qs*% ąłĻž`ĀŌ tkŪ?Ź’hÜfmÕZmĀÆu\:pÕ !› ?vB6[Ę<­z–ś0åE{XūÜų»=}ē-‘ õ]M:—Ę{‹j ŽP,v’ŗÕŸ#„¤¾Lčiqn€čµĘŲśļ'ģ@„£æ7{É”z’o?ĢéŽĪÓÆ)B'O£=Ėżā©våšeI'¦ĶWm:TæåŗčP§"x‘ß»r}uź¼—PįpÉŪøBHŹ=AėR©ˆĪčöŽÉ|`~ĢFŃūŒ·†"@²Ł‘ ×ՃˆDč`³±V‰ä»ƒMĒš!\9H7>Ź“{.ć„’gļ¼ćäØė’’üĢlæ~—ŽBKhJA¤ƒ‚€ € ¢ bCõ§|lh©Šz•NBļ”wB'„@zO®ßķķī”ß³³7;;mĖ•ūz<6—ŪłĢg>»·;3ļ×ūõ~½ß{‹KÓ}‰”›$@,Ž^¬^Ķ„`Ó·Īd‰y͌%Ü_koєA§‘ŖEoµm7I€xKvŽlaAwŃŻ‡ØM”×5ŪL`=PŸŻ§-‚hJ’ßø1z¼ń’UĖq 9­p}ężĶTMZ¶$€dڵ:ÆŪųģ³Ä~cŽīpo’ĒZö1ļ7ϵŒ;Ä}Ž­ė†Œ×˜*ŖLŒdĄÉųĒ ƒø ƀÆbĘm÷·eNu4p±ł‹ŪRzĖ@ų¾€G}ʝųw5łóÉś¤Ü|2žą˜õ÷Ėų—źčƄBCņ žKÉö©=3¶¶›X§ęCjnÄŠŽ”ˆ­Ēoͳz–°.nGCėćSÜÓ1…Imaöč\ĒäĶkØI§k_ÖT”O•č «*#éOoŖ—ā„KN`śO§óć¹?ę§W’” æs!²$³tĆR.|ąBīüå4Õ4åvÉ!fŽ3ø•‡Ž|ˆķ'nŸŪ–VŅühīX¼vqŠwĀ„ļ™4¾MŅ’D&õi$‚ĀM]`–B8)*©”Ø”ZĄėó^lÉ@©ź€r”óÆb×Mėųk×‹ĆĻφŁ;nÓuSIŽY·Œk®=—…—żŠĖÆū'_[²$’”;>NpR˜H‡ŒkŹ”Ēš¾ā'žĒ£œaœŸk]£I³1§°Čś”’z¶ĒüYUŲķĘKŁĘ:æI¤zŁKó"õĘąNž›Z8¶ ,V `- ØTI@q&Šńpz¾ź Pŧ #™8~Ø`A øŲ«’“ ƒģ? x£Ģ©~¢ĆiŁ^āSpI( æpƒß ¬āąXąķ"ęüW¹ń”Ŗ÷wƒSą…µžKZ‘Š­õ/Õäo ėüĶē‹ üĮ9ė?œÅų[ĘXozē÷r¼Næ#uz1€2°lĆ2fޛɻQüĪ)Œö‚ŠCˆu³Ł»·ƒm7ÆfTwį“ģ:Ž ÅT^sPH†“æ¢*¼æŖ_wó‡/°hõ"NŁ’.øļēqޘósNœĆœēšö?ßę Ū}!7žōkO²,oŌāi(TØYƒ"I)DW(A_ȅFIŖˆ‘ś(’6ąF„dwb \r ¤@„Č/€Ź“o?ɘ„šo¶åģKĀaGĆćoĀ«Ėąü+ą# lŪ[שO'9¼u-Ī’/o^ś[®½īŸ|ķĆś`NåCM4OC9ål¾2n gŽĻ˹×ńPˆVjĄŚ1ĄNt­Bb}g[aG—Ēļ„NĶph"ĮćÖ²š.Ÿ3ašFKō°c-ūyy˜’ÆDIĄ@ł,ؚVQň%&ŸźEŲPĢfUrRa”Žįõ].ĐøM-cŽ+Į²ĀČU¬ “ƒ%PüWģ$[lš_®Ė%žģć*ŻŚÆwĒēKØóĻ ų»’„¶ņ«Dą/t¤bŻŖG+N ß"OdŌ 7>s#?8š„M°C›ėŽiŒM*l×½ éĶÄ3é`×!EFoLó¢ė‰„jj®EŸ‰³n9‹ßó»œą¹wœĖĮ>˜„–ņŽŹ÷8ųĻsŻ‚ė‚,%8š¼7'Ö Ė$z Ó!EHŖ1ō4…e6¼0d1*M ”K %üŽ[i2 u9їęæŗ–śā‰¬=ޤ©pā©pż|XŌ 7ÜĒžõö ˆN,“āĄÖµ\ųĄÕ,4ɀ÷^#ēŽ”āPŽGĄ˜‰d¾ū;^<ég¼c^—$Į&]'jķpżŸłüü¬ Čß{=“tń¦š‘żZųģ ؇Ķ=V·nN(Ś$Š» ’n÷?v”Ņ%`ØĶżŽ[%Ŗ©Ąa’ŚŅĄ’0ŒOÄØO’FłS„Š‚!{Ÿ\Į9FwīC0~–Š0£Œż~Zō^:+ s$ĮŖ–ĪüWā«—üWjÖ Œž†CÖæLīļ“ցrō7³żfąøŹü€ūŗ™„ĄöNŪh'_\õÄU¼ÓĮLĻŽiC,ĄƒÜG F‘Z'³SŖ›éŻ›hŠ:üåeō=Už“4"‡Q€0|j¢łå—såćWęž–¬[Āå^ĪõO_¬žæ$šµ mXŒ® ŅBŠŠŠ­”OńØe×$Äp~Tö tF„I‚ Ä@%Œ‚šėŖPi2`Ž\ĪQ28ˆł½ńäC…Ļ%jąąÆĄ%×Ćū›ažsš½Óa¼=®5ɀGnå­KĪāī«žŹ)Æ>Źhp'Ā– >P®Y X®S= ɬWÕ~Ā¢čķ`ė÷_ć¾’?¾Ń± łń‡i~÷U. Exģčļ&ęuÆ«©§‹ļE¢Ü¶Ó~F T'“@sžrՐ- pPtu0ø„‹ $ JT1R0R ļFĻ…X’Żē›™š›Ė1Ś)Ą ąQ{Z&aČģŻĪĮ%A ¹gp¼æķX‚ĶH0r'Ą4Æ#sžķ„"d’!‚ É’4ŹkļWJÖß üKĶśW¤ĪæHg?¹’@9ś—"ó·C•)iM oM¾cƒØŅ°xķbž’šyNŽļdv±+o’ėē®gĆUųŚē¾ę=A7AT2)¦u¶2¦;I$rÆsAŒŠˆĖōÕōņŒėÄ ņ*ÕK"ZHŪüķžæqū‹·{/®RšÉ‘ ź?F‚)ĀĘp=ķr 9†®IˆĆ#‚ń½²ŠŖ‡Š‘̇¹ę” *Aø‘&1P.)PiB ˜RRȀŪĻē»}=WĢ:M¼ń2“t±ļ‡,Ćī{ĆχēĮż/Ā™gĆ.»[ ³C• »u¶rγšŠI¼ō ćü:Ąą‘Kt5_ōó‹ø±qéjćW’ł5+ž»‡÷4ŗŻę—v€ĖžĄIšĘŌķ?ĖåÖ9ģŻC ŠETJ ą“®bH€bJvÅ0nö· JTń)ÄH%Š‘’/öĪžtBøŲ‰ņ[ļ™˜…į €×K IDATąć]„įpĖĘV€OT‚ŸĀ=Hœå³[Ž>w€p«ł—ø  A[ü¹IŽJ‘üUÖæ\“æØó/×ąĻŠJž„ŹüM˜æŁ†«O÷šé·Ī„bīćs9å€S؏×sĒ/īą‚ū/`ō÷FsęõgrćĻnd—i»xOŠę½¹w< 5ĶÄt7ćzZIh–Ź-0’eō–8źĢ^nĒ‹œwæv7©ŒŻO}ŃŒļŁ½q„śČH2m‘ku“׏(aŒ Ž©å_Ē`¼¼ 0×S,q dI”J $)P)BĄ|®’dĄ}7°[ūFßė³ūśTXąc ¬Ŗżé3į;?¹wĄ]OĮÆĪĻļ ”|oŅšĀ¼tÉoxąŠs9ó”’1c8¶ā±tšĻ¤S†"ĄÄpū’]Į»īƞ3ve’Ÿ]Īa_ųŠįÅoņĻ£¹»ƒß&jłēWæĆ*§cšDĄPجćÜŌÖ1A Żīģ(¶Uą@™:ŻVI€*¶$ŒÄ^Ć+ˆ¬tšyŠ“ĪŸü‹Ź'÷cøš—ß°ĪŻ ī"Ų{P)d€#DgĻžą2ÜŚJœŹeąmöw,‹qH*Ń~kń‚<ņŖęyF„¶÷ ŅŚņ/[ēo³­_¹-ż\ąų»ĶĶÄŲĻŽ’Šō{ķÆŹ§¾ŪŸdØ}°“…ø}Ÿ×ąp‹x$Īź+Vsó³7³©kēŽqnnŪ„§\ŹŌŃS9ņGŗO Ūāłķ˜yK“Ģo™Į“cwae}3i{+7kš¢Źˆt©u5÷$ø¼·÷ūĄ^Œ³ūPųéĒ0Š©<^»Š`ęMhŃŚCQŽHŒę”1;ņĘØ™“†Ā¾JØO=2–’K–ĻŒ¤ Ģ_<^D‹Ak‹?;UN«ĀRZŹ!tū"¼h1ė1BŠń’ēcŅKs®ū9Zxćė߆K]ģu2PŅĘĻL2éŸ]°šexöIxõyču.ŌC!Ž‰×šąōxš cX²µĢ(łæ{µEŠ#¶}¼jĶö’1ŸųKŽš4“Tn”;;a8ŠžI!.:ƒ«5…ß?‹ƒ&L5>ī‘˜ūcńžmä·ōjČ · ‡–ńśüv&¬ķ!æVÖl`¶ 0ŪLš†ž‘ĖšüZš(¦U @WĄńū9ŒsjhāXŪųsĘųµ ¬¶¬b°1 ųŖ’’bėę/NŹī_.¾\I…‰ó€Ó*9g„;tӃ¬PļRÆc(!IJ$^]Ąåå’`ųh.Ō–¦¦‚Ŗå+ģp>ó9ųńÆąņ[į·ēĮ‡AS¾yPvźźą¬^3b1ū9x0§ŸĻaõĶF‚Ēź`?g×f'Ģ„’ž5gŖvßa¾Ż2³?9dæ^ZįTŪ , ŌN^%Nj€( 2ĪD¹ę€npR«Ø*ŖlŒD ØĮŽ„ĄK%ćfą‡T&æt2E8ē…€’Ŗō¼>ØŅÜ_üNp炸’ Ōö需s{@WÉ?œ ŒZļļ%i*É^­³­Ō'ų÷“ū{™ü™Ļ­óg¹9æ[k'šĻų›)2ó†Ü+š7§ģT˜éŗˆ eÉ’/9łn=ćVŗūŗ¹’õūłxżĒ¹mW=q‘P„śD}Ž>+7Æä”…ńżæļ=¹1‘n$®+ŒRśhP»ˆ¦A²+vIµ,£ĒQf§YX×ęįFŹxļ5T!Œ*>ĶѤ4Œ} č•B¬ĘYZŪ̦š:ŅRā*śįDŲ‰“(õAI'“ĮJ÷)‚ H÷!Ķæ†æ+óŃ"Šŗ Ž|µšy]wö5·G–,˜±µ”,8ē8ī;ÆW5ŒM &I#ĀōśęüdQ`A-põ/9¶Æ›OŽžÉJ’S¶ė¼ µµ¬„7Ų ś½üJœÖäu’dE±¾å˜t›Ą* PÅ`b$Aņ>Ą_Ź<ĪÕĄoʜĆÄ’h:aœ.©ō¼> <ØĆøÜ3:"Hšož’’é¢™Æ@~ķ›&9gA]ڶ ȉ“˜z§ē½źż½\žĶ’—kōxJž+‘õ/ÖŻ?·s‘užfąīr{௠üƒdüĖ üÅYīo"„³7÷Ķ£5geīūĪŚ—ćö:޹#æ¼į—\üąÅ¼æźżÜö·–æÅ«æŹž[zŖĪ}b.'ķ{Ѱ›’8¾ÄDŖž°®QÆdhLõ )ĮjØĆ“ŗfzw^Į•rڇfhĘ „śJ¦ćnĒnĮŲēŃCIŅBbs(Ģ'±–׏§ST„’0…ä€1Pźü„Ö ¼T’Ō>dĄ-’ā©^ ŗ† pźąčēČĶöӉ,Š üŠ“»” T€p‚—Q U šĻ3ųAĒfNŸ¹ GžrļP™ģ5/e ę”°tĪD%Ō½EØÜ Méąę ĮŌ„ų”C ¤9 ®#ØU F"$ēs=M%į| %A%pšķ Ķeřx—/ fźŠˆŽšKiŁOˆŲĢjM~18#+W䳝·ō8ˆrƒ7 ”äwČś»’•Čś[Ÿs«õƄÜŒĄ?ˆ³æų‡‡0š7³żnæō‡-7ńJ”zy.f\·ä0Ŗnē}ė<^9ļĪY˜sĒ’āö_ä‘7a}‡{§Ó¹ĻåČŻŽDł_§‡>D*“ā«»ÕżĄ>€EŅujš†ŽNb}ĮŪ†[ȌN°bźęz–€q08/ Mg<ŸĢ?@ŻRh~U‚.)̊H=֎b],NŹOžÆ©ˆ‘śØĢ¢tŲ‰Gµ@‘Ę|&üƒJĘŪȀł×°wŪ&Ī z¼ xĀęŹć˜żw ų]ŁGWGįńä+sļ`¶,…0/Ö(м¾üuŌoü˜CN8“E_`%ņöPPŠ Z†Ąü}°KŽQLIĄ@šڟ+š0žņób##‘`Ģ<Ž™Ąü Ģ#€«€+0—uR 8x¼’óĄŽĄ=śtļŪnĒąßDo ó śżņ>Æn'ą•ĖžēnČ»Ž?ˆäß-ėÅż™Y’ÖŅ@gżżäžöĄæX¹’püŻę·fū¶k^Żä}œHfŒĮ}ĄÖć·ęņG/gμ9ō¦zXŻŗšķ&nē¹’’^ųµ±Zöµoža5•kŸŗÖ» Ą'Ÿ­E@׉j*5zŠXR y9Ö J•Š#ĶōnŻĮćĶ«xÖūHoņVw¤•²Fa°tt% wĀÄGф ™5į8ļ'šXšO§^c¼[ž²\ų­ųšxD"÷ ’į†įHØdD%H?•€!„ŒĻ<Ā“år1`"üöė°ŃĀ7š¾UŚļ«p" 4čvh€ ³śß`@ˆ€Rü¬ųĢAt’l×n³IkŹ#wµÅØ æ,`0ŌYą¶V+Ā`A•ØbāÓH¬^«ąńL3ĮW*0WøųlęŹA¹øÆoVrŽŲeÜŹžĪ7žĮw(<¤…ųæģƹń~Įæ^Į€rźżRņļ4g)F„fżK1łĖ rÉśCyuž&†2š/¦¾ß+š7”é$š¼fΉsønĮu|ż‚ÆsķS×rėó·ę¶Ķ{mŪNŲ–3?³ Ćo¢+ŁÅm/Üęč_żäÕģ7k?fŒį²pļµéFżuXWˆ) aŁŠŲƒ¤¼vphKfŌ 6ﲘ«ź×ņ”÷Ń0¾i£0¾c”±wD 0#ėļv—oƒœ„©óŠåi!³AŽńa¬E5“Y_;Š”C÷ äĆĆĶś]2ģ5ļj¼’Qqq~YCI )`Żę¦€|B ČqüȀåQóŚž£ėŌ;m/šO=lü_×]‚{§‡ƒ*ĄNtwƾž¬æ!ÖÆ$ŖdOŻĄĢ’üŽ‹’ż;.ŗéŸ²~%QÆkF±ž®eąl˜Š­,` Ōf‚ Ø` KÜī³ģؒUTįŠP/`š Ž·Ķ³ķ0Zó->Ä÷V–^ G’ēńNöAš °šI™så  S‡Ć1Ö8­RóĄWYĄ%ĄO­O ž³cīŹšÆce¦‘ż=`ęæģ“¦$žž/EņæÖ!ų·«TÖæ·ŃZF­1r’¼²ž¹±æł’ ?-żĀņó ę~پŲnö3å³~AæyꕼW25„PAH‚¤ė@ŸOē3÷ąā/vܶ¹k3GĶ9Š›O晟žsēq}ėQ}ėQŚzśū ^õÄUdöyüZU€}'`Ņ,Ž ÉˆŠnmJb¾v9„ž;æ÷Į-qŠśÕœ‡N½nl“|żÖ‹č Gx¢¾™÷<”'gķźģ?¢¤ kė@ógßĮ$̶Š½Œōä· 4ÆÆŻ5a¶ L…Ö¶ęµ×©m`_‹£×–żĢk¼SĖĄŽģżDS½­ŃģŠ.0ىˆ×£ÓB®ø¶;Š [–Q׀n’ėé'ź[ŠŪ"³U IŒ¾j"$§®i9æVq³@Żku üŚ.±ŸĆ˜cq®³½„½EąÉox.Ɓ& PmXE„1~¶Xøš1šKüs,C)¾­ Ę¬œ!0„Ń1üĖļp)ƾ„āĒČüÖü„˜ąßǟņ )Ģ3NĮ’ ģ7|•aM}OøƒüWRņߚBņ3ś šõ/Jī¹š r^ē“„ŸŪör3žAźūż²żJĘPؖ÷MŅčuŻĮ'püdż'|vŗ» čé÷ŸfŪ3¶å“«O£»Æ›?|żl¼z#—žriĪąļ„^bÉŗ%|ū‹…%W=y'ļ2!فKöY›” $UCŅ4䜓]B„$„WrŪ vō0Z¢™®QcX¼Ó‹\ڰœŽGµ@`|€Fcø÷oM?ż»möēö„“0¾8E’r¦ŻƒžXG™öp”Åńz^oœĢ¢†©“&šÉ8¤šŠ•ų° J}Ä„°(öQēö7Ż÷ķ²õ ·÷S“tQšˆPL÷T„Ćd9"Éé’#¢ąQ"™ā„ŠD1*bÕ¹mEŖn8ŸÓRÉŹ– :aĮ£I;;ūēŚóČīÓėŽfÖ«„’}l\nNšņŒ½ō·\½n%×čcu8¶ė“®S“Nq䦵ü÷žėxēĀ_pżēpāKÓ‚ģžPš?€½m ½,J3 ¬wŲ/hI@¬»pœ[IĄP•k¤CĄ§ūMV ÕUT#‘šé>ķČ6ĻG8l›üC9ą¢uĶa)F€ķPV4fąU’[,ĀXcŠīįwg`m>cŻ”ńgB|Ɣą`į%(ōņ²żłī'Ī'*üŪėż—“"•,ł÷1ś³Öśū’Ϲ“ö31Xr’bż·„Ą?„#ٲ†=įŅc»+»‚ßķ÷ģ?{×1=©ī{ż>Īøö f’b6»µķx:®æ‹čÜĒē:–Ģ{uŖ¦²óŌ 'ö”LC}耎²Ō0¹üN$£'šÉŌMgsĆXŽßī®jYÄĒeåJd²éÕ2梛aĘķh‰u¤‘i“Ć,ŽÖńzć8Ž5õĶ¤b2ŗ[?„°š{TźXÅPų÷JøŽÄ€­ÄĄńN¤€ĆĆļ=°š…Ø!Pp÷9سŸ]C9čhƒW_šwöw5’sPØ*ōtŪ$H%j ”•šA8]m„ęžž³ž3)¶ÆUø’U¢™ ulęĻĢćõż‚›®<—o¾ņ$*łrżüŹŹ1 ¬§8o“h¢$Ą:ĻP‘åvpB•Øb8b$~˜ĪĮ9®4ń#ą Ūs’Ž0÷*`ošĶ2€!㯄ļō#ÄDæļąČ–܋wČ[ĄŽ"{éŃa_ąa Dс”"sü¹ ÷@šąœO¬ <>æ‡&82ä®’V™…,sßŪ _wŚVlš?$’­)ƒš+%š‡ü8Čż•Ā«Ę¼åž¦Ō?÷ÄIż½ņh9B āęŽZę|ĒA*„灟žsĪūÖy¬n]Ķ‚÷šš›óŲŪŃŃė`›Å3÷ąŁ?=KóÉĶō¤zh®mfõ«Ł’œży飗ņʆå0Õįō4ćƒē‚1/¢Ž[ȊPŒ§›fšš¤]Yo&%ĖčÅ8žˆ RŪFā­1¾k%;®Åį«öb7%^y#³ hüĘ?…&)¤%‰V9ŹGŃ:^k˜ČĀQÓXŁ4™n)ęgįŲW3L]„3«GgZ ¦(МĶR†E’!ĶQ‰5:˦…å÷v I«üę-ęß( )RQ&‚^ eÉ„ M&M5tIv.+šjbQlyƒ¢¦=Ē[_”•õ[6łå&¬eŪdōgdʛĻp›®SWģńJÅO~ gž ™ (ićgĘžÓé9Ÿ’<’­”ŲxĘģįt|9Œ~ó?8|ż*ž¢ė…g©h 5†OA_dRÉj(ĉZīŸõYī’āŃłŠPkY€ ·LŒµ,ĄDn_ƒć>²eÖ²p. 0‹£›Y+ė~N%&ō6 įP`"^n՛֦Œłźśēµö ©o1ž7KĄ(0’ļTąWŪ?ą8€×mŒßĻaŒ[Ū-{9ä—x•˜Ø–TQ ŒDą[ĄĶŪX‹bg`Ōś½Q|Ų_€ć[،ŹāFą;qņ ŻčpΟƒĶĄĀęC ĆQĄ]”žK*1¾Jņœ}C„‚€C•NrgiK4 ĖĢ[É?|„²žÓüąPkżm?ägżķĒ±ŹżÖ6’³¾ßm{žÉ—‚x¤•ŽŽy|–?ĘW÷Ԑh`æŁūqŠŽqšN3¹e2§]s×>u­ćx!ķ×µsŲßćłŸąęÓo¦»Æ›^łCļƒ™˜‰':åA2KY©ć‰ęé<1~–FH—Z£m’ķ3¶c³;UöZµ;ūtL§a°®tįn÷ zżGhB2CQĒźy£a"ļ4Oauą?Fz¤—½Ö«ŚŸÓJ(“`]Bšņx!=|PX~5äsĶŅ4K@Ų€¾ŅuųV”M’½µd&MPT÷}Šö<Ą™L2`Ł"ź¼™;4•)ÅĪ_¶ßī}¦“€_qx>‚óĪŻņ …ųą“ó9Ģ~ģłWóŁe0GSŁŹ¾-ƒśFC‘Tp\„č—©I!ŽĒy|Ślī>ü–šRžwq°Hp'bqćłNŠ'Ąˆ×g÷Ļ„P9" ĄĻŖ$@[&F¢  O>¬Ą$źŠ fæˆA"üĖgÜmJ'g®āšmŒīæ©Ą\9øI7ü¬’jŪ”¾fž³ūĢÓį4ąņõ1Ÿö§‡·Ą=š‡Ņ‚yJ"ųĻž¶ūmæĄ?†EņsąYÉ Fƒõjš !„³æŪ6%ƒ[Ķż @źļ“Ÿ_ąoN”*ˆ Ę~ng]»l×ÄN:KŽŃéÕEĮŪa _ £·ƒyÆĪcŽ«ó8z£¹ég7ńŽŹ÷xeIa“Qu£Ø‰ÖŠŽŪž{ī×7żš®¤ƒÓV1/ʂų:4$R’DÆ!e;„B£54Ó§KlŠĀhŅJ’ŃgŲŌö{®’,3zĒœW¾œ„–7Ń[Ž@—2B¦K’X+Ēų°¦·ź&±hōdÖÕM W¢ėvĆ»lŌ·RŠš\šou$9FŒ*gMŒėÖ9ź#];źć”¶” é®$鶉±ˆćQD­D)F…AI/źĀ\«šīøYŗf’ūD#„5ō°IK&;o:-Ņ€UQąG 8•„°2"hYéo1„€Ż/ .£›ē² &ŻĪłƒü,zÖ¬‚ęQŽĪž®ę¶®ŻŻłĮ?€Yež³C!ōĒneŪßäOJŗPCS Äżæ½”HšĀN=]ģōŽKüāƒWXÆįžÉŪ1’ȓųś‰€2 4ĻĮv“@7ƒ@€ś8z1MŁqA M_:śI€±ō“›vs@0JL ¾ QŽ9`1$@©ę€^ʀŁķ¹ńÅ‚QP%Ŗ(#QP‹Abŗ½¶G€/Y~’šk‡qWoPX.†ŃßT¼U‚&ĪĪ 0.Ī.ŖŠ\9čp!©aāGĀłu[÷łäŚó•‚Õ4°Ļķīå„’u öIšÕd’ŪĖX²Ģ¼·ŽƒŹÖū›’Ī’’Jdż½ØlÖßĻŁ_Ų„öü½Žķ%óūmå:ȈT;į«5®é ;ĖYIƒq;Y.śīEŒmĖ7/žfĪš`×»rž‰FÅĮ>ŲĶ~gc0Ģõ\m…­o¢GŠšA¢™FoĆ ćf±A®”Ø<›ā °R2H™.½khl[Į”žĶlÆt3«c,³7Īf\÷"z…Øļh+4½‡Žōŗ¬’ś„D«aE$ĘńŽÆŸČ҆ɓ64Ó§‡³št©|æSēx½÷Ŗt7!ŻśåHōśŃ!įŽ]"rö«Ёģ$ēwCĘø|§ ¦pR (Ģ©&L§Ó„#¢„/S’žŖ…P°fÅ*ā2śÕēń«®vN)u=åāÜĮ‘ĒĢüūØÖ­«/ĶŸæ¶¹ß>‡æ?s Ū,~›ßdRģg_ƒ‚Qc ¾ĮČš( JĻž{B’XKšXĖX’Ž/xɾ=Ø"` ÕCQšiR@” ŖØb01 €WŻ\¶ubܞš*ø_AA}ķzŒŲ®XF”ją ‰æp šŻcż eūæ Ģ•ƒnÜDß \&ąg~ūœsŅĻa.”uńQĻ4¾ųąR6Ś7”üTˆø÷m…ć‹ žG’äæÜ¬’PĖż‡kąļ– ·žęsZ/ņ=üpsŒ3\¶Ė]_0ūłcłė7žŹ6glC$ał–ÓR×BW²‹«Ÿ¼š?ßõēą+$ łæG\Ųņ&śųgéEY˜Ķż£fóژmh¹Č&œ~€°-·Æ©µPēFjŗV2¦s3ÓŅķl›écf&Ää¶éŒķžL¼g"²Z„£‰Š ¶jVBż“ų4²5ųB¦C„Xް4RLJµ-|Ņ0‘µ‰‰tÅ(ö×fķĶO«­Ōµ_•"ó/2¬*I’üJ8ö“ł\9ż@Jś+…¢ČŲżl@ޜ6RĄČ©ldōt:SRł@2«(– ˜w‡­[ΆššĄĆą—{śNr§ŸK—Ąm×åĻ_ŪČe©>feśŲŪėF5šę?æ>€ŸnIā“X‚&LāžĘŪęóQP‰’p'«$ R$@1m”JT1²0R €sš6ü*0/ū’)eqĖöŸŠ/q’wöw;īÄŻōӎPöxõh% ē‰ Ģ•ƒnÄ#Ī~ ć®g¼ǽ]J;®ąÅĶ{qčSĻ­ĪÜŽŠE’ū$8:™ä¶R× ĖÜsŸĀ7¶ Všož\ņ¤½_Įs„Jž+hņē$÷wsö‡Ņėü‡kąo ś­H§ŽŽČ”gźyį2wUYžxģ9hǃŲēū0ŗ~4µ±Z–m\†^Īo30Ž{Čō’”Ölbc8Ī ućypü®¼×0ž{ 4ą7a}ZS™4R_;юµŌuo`lßF¦¤z˜žI2UQ‹ )Ł@CŖ‘hŖY­EØa„ft–@Ź@ØĀiC·”ŹIt ‚Œ$čŃe:äBV†,M4²¼vkkĒÓQßԟõŪėV‰č}}™Ó;uēsĢ` ńб±Śæ Ie©Ģ F)Ņ~+’Hšš;(9ą)łŲŚņI IDATĖ* 4 )P !;V‘Ä€¹6=ĪMNdĄó÷±ķ{/qsÖDrČØGß0.˜ÅžŁÉ‚÷߂‚Xž h§‚$‚G­pößsy«£1jÅcĒŹó MØE« ļB\)ƒĄbH0ZF –/Ą2`¬0œHī P, ŒŖ$@Ea¤{@aĖ8 žĮp“7ńeąz Ńź3ĄAō_ŸOǹŽ%U;Wƒ“®ˆ}ÜŠ ģ,¬Ą\ÅĮ žMŒ#Įzö*yNĮƒKN昙—8Ėüģ“ą˜d²<„„,s÷} ß²>W®Łß’ÖĀ€føeżĮ9ų.Y’Jü ץß:¦k=±›£\“ŠņYׁ+ńl@:”i}™>&µLāˆ]ąwĒüŽ/=‘»_¾ŪėšÅAĘČž{Hģ#ķ°Ķõ¤DˆåŃ:ž“j.ļEŠ€ßiŒŖ"ō>䮢ÉuŌu·ŅŅ×Ęødµ4Ō £U•tjtø®E#Œ@ tŠŃѐȉ“0dž=B¦S’Łа6RĆźH=ėb£ŲŌÜBGms8%jQŻ UmŅ‹Šz‘źßZvĄŃÅāCBń3gE¬ØW0_ (±  ŌÖ6e¾ŪĢcx‘AjsA|:ƒZ!ĮIs]’Š®š*śĒ i~ņnnÓTGUć ćŅaē]ƒā^j€7^‚§ń>VS LŪ "Ńā™ż÷‚¬‹Ęyhōxęļ¼äDUä‰Ć*Ø(§$ĄN€ATڰJTQ…3F¢ ĄkŽŲ.ÆY|£µŽ}ŁßĀØéßx…ükq£Ė“Į“5 „ą+ĄsĄ¶÷qC=F›Į½ ßYvĄažÖŃK_„›g)õué6óß\Ķ1|—żņO` Jž³Ø8¹UJ½’Śģ’‡£äæģ¬ö£R&J‘ÜLž‚Ōłcš7æ_}ūQ9„ÆAæ‰;—õ Ęaüm\ «v™¶ üßō¦zyžĆē9šOņāāżP Ęį{Uiy]¤e™¶P‚uįFŗ¤(ŗ5ųw ųķOi* Ŗe”D ½¦ŽtMŠĪŽ6Ö§6šIO;™š”$Mj†&U”^רŃ4bBhH:čBB‚”č!ŗĀQŚ„­ŃŚb “%šB]‰Qō&¢"-jQĆdƒ7­š³ó‚®mõŗ¢^¦+łW€^Œāµ4FA˜ŠAŗHŁ7(†ń„*ĀŠ/-ōmŹō^Ó£ĒO’\8¼TŽFŒĄ·żk|”6°Ē~J_‚ĄBXx¬Į8†Ž0 ƒŒmnóm¶’vR ×ŅRCö3nń’ŠN&C&l[G–°æĪH$¬c»Ö8‘¹ļŠŒŠ²Fƒ©N]~ę¾Ģæ†KššüS°Ć..†ZžO»)ŸõŃė–&aęvP[×Ųē ŚƒĮ” žtq}½œÜ¶‘5ĄK57 Œ(č¹Į5ƒĄģļ™Ä`¶u#bÉNcßxK?ŠEķN[׀^ sĄåŁļ‹š>ˆ8Į}J5osĄrŒu@čˆ* PEPŒTĄOĖ<¶Æ>lš™ēE`O—mSĮŻÄĪӀēqö({Ca ż@@×=>/1fhNĶżń€÷˜óF¹œ$¹šŌ„’ģ“ąėÉd WČ2wݧp ½Łß@Hž‡SÖæ¹©užå¶ó++š/éҦhø{·„£LuŲ…ē)‰£Ø µŌÜ«‰ŽCB½°Ķµ(’ĪĘHœ—kĒóšŲxÆq Ż”šül¹SĄt)ŖŻÅrQ¤¦"d ŃÕAHS õuQŗ‰§{I()b™Q]%¬kżatHBEB‘¢¤e™¾Ś9Iˆ¾H©P\dj¢ØŖŒ.IčöąSS¦ü’łŒ²Õ+Zz®ęüqx!@;Š#Ņcü=LH:ķ_”ā?Ś#–X$Ć^¬Ü8“žƒüŗżJ­I’@Ži-j€ņ‚=øÉc’™Jƒb±F©_Ņ6^Ąż5TžĮ?;iżż¶ķn­žJ­ł_ bWķ"ī¼OįÄĮ®÷¶FT2ė?r’rźü‡SąocózbĻvrģņIüĪsp+FÓŠĮDćĆļĆś½å-’R˜Oāõ<9jžnܑ•µ¤csC{ū^0ē×4„Č %3H’‚¤(Hz6st  ²YFÓCB‹ƒJ ©R6p³f…U„“$žm]ūd:ujt½ņyQ“nxŪ"ś@Ā8Œ" klڟŚķ‰¬–\ļķ(,č—HEšī9A’Ź»™Ķū(… ?Sæ‚õ$ ĘYȁLŽøĀć9’–y2ˬøķ²äQė–k ²öĮĘõ÷ĮØŃށø_7€‡ēĮĒóE¢°Ķ,˜:ŻČā)!pśYb뿊AZ÷ż*ūīq­Šß2ŠD„½†[I@¹¾ƒE¼lć3~æ* PÅ0ÄH&~Ka{;ƈC;lĻ\®F9:Ffß/(öĘ·[v <Eé%•žŲŅ‚€}›Lr³Ļ0OČ2w.R8Ńi[©Į’– łīY’“įŖóˆĄæœ ßœŒ“D2‰¼z1£Ēzė™ķ¹ćFüµM•BĆ Å'ĄŒn†­nE‘ 5捶1<:vŽlžF{4Ž:Šæ"@&“’÷5]ś$ą·b“®ĒnÉ$ÆĻč®eiżhĆøÓ­dĀ0f  ;ˆŖā£oeź4ŗ)Ö+—€[”:”CX!;¼aŅR4؁?.J&G ŁĒ+wŪ–±dśqł¤€'!ōö®Ģz¬'ļŹģųīĖékt½@T3,pŚoąŠ#‹ ųķ?ēßėVĆÖŪĆö;¢xEżøCBi“·å˜ožĘ«Ö'C śHQōÕ:±¶ JsĄ* PÅHĒH'¢Ą;x+øÖa“ź{£.óxÜe’&>ĮŻc (¾܆oŽ,®N¦Ā—­-1ųųBœćśś<Õ¾eīX¤šmūóCiö7’’ ķż†CÖæX¹%źü‡:šćuØ*¢c-ń…KŁóķ¹H ł”P·a(ņ6 CöļsL»­fI)Ä'±zžnžĪ3ćwfE¼‰”›±™c°%üf¤: ²ģšēs ų5įdb®L'ß„ėGxN¬a¦•J)A†OƒĻß«%%Ļ’†Ō|AM½”6Iæ~0P IPŒ!C0!Ļ0€” ±ŽüyÜž6RĄoS–ŃŻČ2ł„Ā¢7ÕQOÜŃw³¦P vß~wž{ĄļŖ°ü|ć˜2ݰvd(čC4 uö榁ó~ś÷Ö²Õ6Ź’€* ąŽ* P…†ü‚>ų<š4Įż†‚āv ¢ \ųyƒgUh®-6ųųBœćūśø1ąpGČ2·/R8Éśœ_š?PõžfÖ¼ėF*&ł/”½Ÿ_šošü¹eż+)÷ æÓ\Z/ņ²wõJ„“WoĶw|'L«1Œć* CČŽD «Č˜—ŠĒ¼BFHl Ēy½v OŽÅ;M[эõ纃üi ł%•Yė4véәžÖ™®Āh ź0ž¼ŠŠé‚ī0¬ŽĄņZųh*¼ńYXaJ˃żÖ~poMh"yRų{“½ū}¬*s<¢bx7ōś­¦ØĮ°°õVlč³zbgŖ{6\#Ō R|ߋ¬qR®Ģ?7&tk0ī{›™ ä€ŪŒv¢Ąµ[€‹7@’ ĖHķ@ „#Bs#’õŠēt^™NéīʔƑ(Ü0D±Yūbü"•C‰P˜ēNż#ߊ&Ģö”Īß j€Į* 0Š) lJļP%Ŗ©ų4gUxĪ“ ¼Ó‚æ€O]opœ\Rī$[ršš…Z¾Ł×ĆõEģRYę¶EJUI³æ‘ łßåžĆ9š·fū ¶g3ÖŖŠč^Ml͇L~i&ēvŒcgßÉ5Œ›ØM”WOn¢#‹R­]SļEŠ)Eų°¦‘£¶ę妙¬©EŚq‡h©/DčÉ>öŽ ó•¤Ī^ŗČūˆ†ź4žž!Ė÷ķ#¤÷”0ų:’P`ų­Ų¬é±“]·©:ć]'Š0ŅTŘü•‹ž aEl8¦­ń{SʆŪB!“ ­žRŖ> ÷„ś Hz4€§¬›Į¼[Šī'@1ÉÆ‚~Ä@(’’mug!$YčaĖ7ü?čųCW»~ŒĻR‡~÷w˜½s°`½ØZž€c­seö_Hl>ąhŲiļĀīRnDĄHP „9`•ØāӊO pš‹ ͵˜ōUh>\œR¹4ą› …’°%’»b“tł÷¹D^6/qĶśÕÄÓ©¬ŖŚ!PW{hŌ-k©©„õŃE,ƒįüg£ær²ž•”ū üį¶} '™Į©z_¹ćźV̬×>Ė9½-L v@Œ²€vŠWHoB $Œb› é(MƱ"ZĖ‹õ“y~Üv|\;…īP8{óźQ­V©{Fćš -÷m© ĀšńxEŗń ˆōhVƒ˜^暊ø!ŁżĆĶhīēuĆŖv@-\]P‡”šųė ßvĶscĶrJU„>PKHš÷±•4Č+SÉōk ģĘ~ŽėC—£>kt ģ*Ļće2ÜxaĻqėV(æ ø¬!Ē—¾ '|?ˆ—Y»_J uß!„6ukŽ=žg¼Rņ?Ÿ[’ R¾Ć…˜śė~ƒ²Ø’Ul ų4žÆó‡ū÷“T„€{€ÆT`®šeą©bw ĮæßøåcŠió7Į1ū«T½9’·Ąœƒ’JdżBī?ė6„•Šź“¬^Ęļž’—l¢„ØEōaÜå%1Īśs‡ćlĶ>j²"J"m0żN“p’”YJšFŻžkŁ–÷ĒL„MDQ½LÓzUĀó4Nj‡“õ|>Ŗā5VOW„˾Ž. „f$C®›@ög fmZ©½5ÓqƖ’ĢĒz eĘPa,ž}rd•ŽĆ×5:u\tU¤Fņ,(ØYw®+]‡ēu|'!üH+dIčQ'龍 p_O’¾žÄ€°īgoł÷č-Ż;æżbßŗ> owE1fœeń±ĪžÖŸ©${!2ŚźCLoÕ5qŽĪęró÷P6ŲĻ(ߣ ŖŹ%ŽŻmå7eRŻŪæ6ó>ółó(ĀŠN€w‡€* Pŧ Ÿ6ąŪĄ”4ł(šąĻ•[NĄć¾å"Éą7+Ā’óWĢT’XxÄ·łŽ_ÆuƤ-&ųJ³?½„z’JHž?mY7¹æūę«‚æŪ<^æ‰ISZ;‘52~ÓröX“?īĖčRזƒNE® ńõ0e>Z(IZ ±!įx3/4oÅŪMÓؐh"ćü?„±ėb•³Uć+7hˆ«āåŻõšœĻDäÕR4¬[×hļR`ųķø”·żä ŗśC׃%„ ­ŪøĄ°²õčE3qSčī/…›ęŽšī.lo—ż@į3T–“ņŪ†Ķ+@ņ‘üK XŹčłµüĘ+v:–żżõ#2¶}^{1=īÉŪ;oŠ“Ź*eū7“ŒņÉŽ—š§ÓŠŪ]ģ¾äŠżYŽņĢ©å¤hĶ®+ …ŃU PDIĄ²=žŚ”§n߇"&i]7læšĄßD’Æę>Śél»Ą DĄ`ūl‰$€€* PEéų43ĖƒŠŲ§8ŹÕż»”xŲ~€3"!/ī¶/Ē\÷y×§Ą/ųuĻ5ū+·Žæ’Fƒ‘õÆžŽó'U„–5Č3ģ3i¤īÄŪ>dBėZv]ü¾Ó6ƒÉ„®³RØū&=‚&+¤„̦P”÷ć¼Ō<·šg².ÖH*'żĻĀźĪ‹Ęw7ėœ†ØHw”¢!itm• Ķ9TŠ?%× Å °ü~M2jąµ]¾TkæCEw®ż×1‚’Į¬ūwC-0Õ}s$%Z^ŽrzÓ6ѵńz)Sj~ÄĻģĻīŠē°i0I‚œŚA)\˜Z!Fš_ °n™)ж.¹źŸmsÓ)}Vе '’]Ųļņ~SŠ×mŠŽ ŠŻŚ0 ų­÷ż‡|v?KŻæ ĆK °zŅ9ĶŪžžq]H“Ak©YŅSĻŽ0÷ū>śŁFs—bŌ‰ģ˜Jł T‡€* PÅHĄ§•0ńEŒ žHÜՉĖ0Ȃ«”Иe€0x£ĮVEBޟ² _yp«ax’î޿ĀF„fż Lž Įƒæ“Ēx?5öó‚ų»5ši¤¶µŌlśˆ‰ķkŲiõDŽ\³;iįĮž… cŸGo^ˆ. ’Bfc(Źū±z^kœŹ;Ķ[±¶qI=Œf}=ęū°ó5Ī頻Ŗ\čc’ņ­Giń+#u"‰œ ž&éĀžļÖlߛĒ2=»½„§ÜĶX»1j’‡ ¦ć©‰ŪiqĶÅ»Œ®}¼ir¤3%‰„µ #NdƒCź\ĮČŅ—JNĒ2EÉS xÉžŻQÆ{¦æ`ĪØŠ/żż†?t¶«Ž­&‡1fķ?łµ‡Üߣvæ«6¬‡Ķ m3tu1“ʚąP§nĒń_ż1ƚOČ!ĖŹ‡@ ąK‘бd÷å·čRģIķ½cō¢ßüfƬó/ÕEģptm]M×ßŪęķŻ_6Ē„/Ą–L-€* PEńų“&bĄNĄlś‰€õĄ› ŻmŚJ€Ę!:ž !X9f"‡_»’ÅNŪK ž‡“ŁßPJž·“¬’`ÖłW"šļɾ7næu‘Aź\ObĆĘ÷¬bv‡ÄŽ«>Ė^[9¾“Ab5Lx =ڊ"½Rˆµ”$šx½a24NgżčQ$ÉfžķļĮJ†įā“q £u^†—BƒĄ8›G1> qоā5&åǾ®ŌžßŌ"õźa”™ĮŸ=ą7Tż“Ąå=›ӎz”ėÄ˱ék‡õą„½&ōĘŻ’jœ]—h”\­ŅJ/0'š˜Į!$%šīW { r(…@póEČ©”ž9vBĄiŒle×_“łÄµ«2§›æ76Łļ- ”0œwH’w¦?†M`ķ*Xæ6¬3äż["źZųĒ)ą?NŪrD@™j€Jš§¬UŸŪx–u¦Š2ļOśä¤/Õ/ū_2®K÷üųgjtĢo=”Žō·_#A+ķ PIsĄeTI€*>}ØĆ{OPŗ_Į§­£8ꖍ¼d}rø’ƒZļoĮ@KžKiķW ü½·9D©m#ń®•Œj[ʶ©.vŽ4Ž=7ģĀō丁3‹n†1/£×„&)$:å+C1>Øiāķ¦‰,nžĮę†fśT—@iDͽ We`Ū@ՁN ćŽ4č-ŒŒńGo (KĮʤ¼ąčŽšæ7“{ōAä~[¼šŅjF—žŻ·é ŗ³‚+Ī“äB`¼ū²óęx—h?但?Ž™ūØvb¬7*M0Ų( ”ž¹=ćžÆw# üˆ'RĄ±|A)tü·^J“˜Ėę=Žy-y–掭ƄÉpĒ pūõF¼%ąĢßĆų‰łw¬ųV-‡Õ+×¢x½1[ĀQžłž9œœØC ©čN-„üŌCQ°x×÷ĪÄfŻzgżź[³ä„„Ö ~É 搮Ūi®.¤Qؽwo³ō“Ÿ×¬»6ēĖää 0PꀟvĄ—0ž©’ŸRT €į#€»©@råSŠžŗF¾u[@qĮ’`“łÓK¬÷ßR%’Ådż­A“=ųNužCų[”dRD:WŠŲŗŽi©ĢJu3»c<Ū·Īfl×T"ŗK€W „5+”łōŗŃdōˆ0Ba–Ekł ¶™EĶ“XQ?‰Žp {Ķæ‰vˆÜ¦ńļ“ŃÄĆm®łå¶ėJ£ńņēĻĆčł¾#śj.=5Ś•’„§9ą¢TļŲ‡Õī»\'kexڳNÄ]o¦ĆŽĻ×]8sfķó-Ó#­"*U¬¢Ś«³Ą@"Pś 8N$ °æFĻcX¢[ĶGšöKŻćæ§żZM˒˽ø¦m•Cƒēž„;o„īŽŁņÓ µušń‡°ģcXž‰‘å×GXˆ"Il<ą8Żįs˜ń-r]Q]|\ˆ·’ØœĄJ¬Žé¦©ķć¾õ(ˆśpĻ;'Mxs§ĒœĢ×ķxėäÖŃ_»V—Ā;KJ×U;æT–užb}Ŗ$@•Ø¢ņØ[N®źElĮPb ~śN×;mčąæŅfĆYņ?œ³žĆ-š÷«ļ2‡ H™VĀ]›ØéZĆŲ®LW:ŁFI±UFfRŪtĘõL$Ž3 Y)BW$÷2’Ś•ču”G’(ńHR ±9fµććXՌaYć8666Ń+7 8xZöżŗ>ĆŁŻp“ļRĄj*oš×ŒĒ5ómŌuį+¾ŖW7.ŌŽˆ‚Ų”YĢļīÜļC©ļ/®­ÄP0 74āé:³Ż«±‡w®­»}Ģń•±©Øl¦‹Y©“8FÓŲVh’ąh‚Ū¤ø¾2š=śLM3%Iļ–cŅ;”(ķŬĮ NŸM+1 (EŚ;9`E#$IäJÖ®Wā7_²žŖLZߏ:4‚Oz}*»:į‘y†2ąŁ'†_`‹ż#ŚōŁŌ÷y;A£“ ( łD€:īˆčŅķīz@—Ā;Hʦm’ņčŲ»ŌZT™ _‰~²ķ’ÆiõŗMZqN6  °¹J@‘$@•ųT¢Jl98£a„AÄųŻ{Iže}²”ąæ˜6C^ļoA¹’’ĮĢś†ÜæƒæPö8Ć!š7ƒik?zYCōuķ^M}÷ĘömdJŖ‡éJ’)•qč4¦j©O5K5!« $5ŒŠe„P@Ź@( įvōXZ¤ P… O’é‚6)ĢśP”±–ÖŒfeķ(6Ō§+ZGZ’Ń­Ž}h¼Īó}ķ󁝇IųZI*©Ż?‰;kTāŚ±roĢ”Įgk’ÓŁ×u{×Ę﬙ļ»N“om÷P!†ŃŠSމ¼ū™dķ5“wK,J4Č}R6;ķ%M:z{›ųz:ĆO ąū–Š%ųS¢Q~ŽmP»˜ÜŪ«žVWó:ćd„,ī¬oVēź¢æAr0Ųs›·D¤~ƒĮ¢IrĄ~|«±b¹5M—žy՟»;ÕķŪfl Ļū”˜čŗ!©æė&£D`éæ#VQ)Ōµ0ē;gńßPČ=č ¤dƒĄæŲq‘Ŗ’†¤ö=»ÕĖŪї«ąß*ŠD$Vų\©$ų›š$DĄ§ØśTį‡*°eįRą“”^ˌp˜?ŗ˜_Mš†nž§‘ļō_Lš_É6 ž+,ł/Åčo0³žnr’Ŗó/%š/ĘŲ/ģ5d³ŠćšŠŠś»Ś‰ö¬”¾»•–¾vĘöu1Aéc¼¦0FSiŠtjш”Ń!Œ†ŒńŻŠ‘P(ŅB") z¤m’ĢF9ĘŗHkjšXWßDk| Ż5µ¤E U’Š5Ė{d—É/“<¬q§®Sēł"7Q˜¾HŁoŪÄx—X}Čņ†ßŽŁ.ŗ¦¶^JŁ%ڊ¢K7õlųæYż’ćšAe–\qHĄvøŽŒł$“f·µWNڵī­Ę į.?Izw§:;ŁÅ%’YčɚfłäX” ÖĄ× Ó}ZKo‡>W7N…ĒIókZąęļĀÅ)_Q„pŗKŁKĻč³A„…,>H4‹§%Ia”‹Į u-v˜m @J‹Ņ;8V„€!pÕkOYæ&õ§éų2Üü ÷!T„’ē[ÆĆ¼ŪąĮ» ż*į(OŸ|6ߋĶéL/" *” 5Ąš}—Ÿ”ŽOłŗŗzģĒ9hŌ'ēIx›9 9A1$¾Å¶ „āI(ģ`'Ą –Q%ŖŁØ[dąvą˜”^Ȗ 9ĢĶæü/?žņ)żyøi Ļ6öąK‘üuÖ äžCų;żįˆóüšŠČ¤‘D)ŁCø§“Dßzź{»hČōŠØ$iRS4fTźQH ˆj*aB]’ÉH‚>$zå0²L{“†¶H-ķ‘8µcéŠ7LԐQ%tÉrƒg_#€,…ĄµjęO=:_ö|± AŽ• A`(|H€©K#÷~N­½µqFdc“V(’$t3 .išüßīļ’Ō=wNUpĶ•Ęvø–C4ƐŪv’ īśq³ƌŻ$%ü}Ś7iæ×Uöó#…ø±”Eŗ.÷»E5ҾI’„šŃ÷Ų]ÕšĆx­ģų®*€ŅĒľNõ/ŗĪ4Ūę įZńĒx½”£d|.DłlD2ŗ Hi›±øW< IDAT@±ä€…Š,ū†ڼ[6~īŻ×{ž… ©ņ½ŸĮ_ÜP¢Ŗ…€ł3™„ž‚ī†ēžšōG¬¢HHė÷ż‡o·»æŹ– } Ō•"ÖļńÄg’Mūß hźˆ‰ | ,Ž.­ĆŹĄPŁ^$@²JT1BQ5–Ū² 'ū ńZ¶XØNøąTW}Ä·pÉi |諭TŠwśˆz’”’ü“õų;܏»ŹżK0Ą3!SXōwą^ c?Åžc45†K Õ“īj¦»AaƒŚFøÆ›x&I<ÕKLĶE#¤ėHBCŅ%“@CB‘Ƥ¢ ś"q’ŃśĀõ¤£2J¤5]F—ŽmĀ üžV“zĄ9Cn¢Į žĮø-Z!£ˆ»[=1ó„ö×2/'š¤d"źŠ‡P5 A(D²C„4MOø— wļ|W@ VŅzmŗO‹e¤~’ Ohś6¾y=ߛUÓśwPßėœČ¤łB¤/13åJŽF=ÖשĪŃu1Įaß1™ęȲvr8&mPU=wlG5d¼9v¢Ą¼‘ŅEH!cžˆ”­ēv1­t%,ü’łf2¼ņlēō÷öüWELõ(ćŠT#ŠĻ=Ōü‡$ĮžūĀī{C{<õ÷Ā7ø¦Nń^Č5(§x?®E –P÷ęé FX®@Pž¾$@0R4@bŻšÉńuąše—X«®śŽß’÷|J"PZ|š‹HSÓ`a"P ĻŚ’PČ Ÿ5"@²Ŗ%“D€*Ѱ V ‹Šq/ph±'r*C9xś=æĘÆßśr×ūŗŁäæÕÉ~ä'’yŖ›ü’ö!’©b³ØŃ’0ņo[ ZÉ¢Ų;œąŪTP`Į}ÜU?ėrlP#äß±AĀī$’ŽŠ"šM+0įä?īŲ $Iīk\kŅ: Čæ p‡‚äß„üīŒC1%4H#§½V¦ fŗ łTņ™eČe—c&»3™eČ„ŗ7Ś`&ŗa«¤ę<ÆĪ4āL+‘Y¤żAŅ9ąŁ±/~> ’j‰Ŗ¾'Ö:ŽŲ}#v›œQ\JEŹĮcNŒĒÜRæćĘ|:™rl•PŽvNqi*7Ē×D ©Ē«’kj»€+¶łćŅa„“UB— ǦŖå%„Cś˃r@ž:žTŚ'“ ’Lą ĪXJŠŹĻ%EĮf[’ż×Ē>ašŖÆŚėé ‰P*„ü‡5!‚ĄŠÕĄ«^üóMĄ‡? t÷T›E  w¼öZ|%(P;¾ū¢óƄq(H7:+ø½ģžéŻH½±,&@vąa÷r[€Ģā½×3w|~ī’ßšŁ7¬ń?„=‹”)Ti`J‚B*)łŸs<äs 6ĮžĮE (x?Oŗ‚PŗŻŸ§ wŒÉq÷ß^_æ‰aŠØī6’ń'O…„ƒ•ē?T%¼©(Ō„‹ģ®2޶żWGō½9Š÷恿×U9—Rµ/T“pjb©?Ž“c^ ·Ŗt B)œµć!üęϮ™Į}s%’ĶČ÷÷n¤f~Vˆ2ūK#œü[TK¾#!’)Bž}aÄßį Ūv›_-&aū‚ÄpWżÉõo”ųīŖæ“ƝżēLüõYā_źē”÷ńHń·PFü=č¾+®ų{ Pjˆ&ż€ų£œōK āL Įöż2Ä=xŒ˜‰yƒ £ØČ«õĆJØÄ‘lįŅÜI»;Wpt«ąŠd+ĘŻ¢…įаtwbc… „4ĒQ‚1EŒÜ1Ó9É@K§ŁĶcŗOĄh:ÉN»g·ĒMYA9‰Œ¶ B ¬©2*5†L (¦3E T’~„άxl@ˆ<EŪ–Ģ$Ęķgv‚3™$’¢ā\_’ü±·ĪL:—V{-œė6^ŸŠ_éÆ&ų›t܃©Éj3ipóž_šJ¼æĶ€ō>ˆAĄņ a÷I$ĮĀ>Ųe÷Č `…‹Įūŗ-@{.}čE¶Ńó.(9–=ž­7­xämÄģéŸ+¦Ÿ?µī­æģöƒ—[ęģBAÅ3É40röO· Ÿūó³(ŃƐvŸCźō\e’…oąZK¤ŹD’óÉtŪåļ™j’£m/ģōČ3N~xbŁŪ²õˆ€ė °wÕgŗżŪjS•}J"@w¼ĢFų·-”­”o«C"(Ä”pz£%œśøĄkQićüPč>†Ÿ¼ėłø²Vņ?3 ZHņ_1PH¾łź…üõ»üW¬ś‘!’~R=_«žs ÷!Ä؞ē_ųW#’Q$»™Ä?øŚļĶ+ŽųūĻWų4ę'ż@B0MĘtA~bt‡UxŖ,Éf!˜¬œ’¢b±ó™č•Ż39µnrLu)¤é¾)“ÅŪĘ .*ŖĢ+9īęź+€[1%gCŌckgweŚų[ø ļ§?0†ßqA7µwŠ›“Yž„æÆd c:›Iwņ÷2N·ĮŸBŃtś|[§ųS¼–ŠéU“Ŗˆ‚žĄĻ¢ŪVĢdŒ£L˜0B” žę”Al[²»nڲóŃɏ¢Ę•ŗ¾Ķåæ7ŗŅ×÷‘Zķ͟äč\†Ļæä/š€ķ€l'üŽ7×hĒ5 !äzž(9¹śõ_UÄŚD¾’ +ī¹č6/%@·gŌÖŪWżkbųwƁ’ƶ±üƒĒŸwņ›Nņ\-,%@›Žõmn}žČ闦²÷Œmż·;ĻśõS,š Icžxź£ĻžX’”‡½šŠŸś·W RN  a"@0 (ŖE“D€Ó-ąōĄĻüÆÅžÄi€ōŲ0¾÷·ÆÄ«ż£ČšąFÉæ?¼æfņļMŲėŪ@‰æFņżCžbBžŹ‡—fÆśĻ5Ü?ø/޼/&ń ób‰µy…Eđ~7œ–ų—¶3V$žaQ䚦aPįiQć˜-ī¼”0½K °“YėģÉ!§Ē—†%€¶¼ˆ·0LĒī]“åO§Ł+ɦœ¼dN^2ä%c¦¢°–P˜člćŸmOÓÕÉæÖHŃ;ŪŚōׄŅü¶­˜×dČu,‘āū ]܈Ć+.šżt»øæŚ[ćL)¹ō5 \šZBˆ Q@ vAąčž™¶{nż¤’ÕÓO-“0RŲV‡H&ųŃžœhU8}š+QYö³…ś OŽįkļ{ V}īp}­äß ‘iм–łkb‰æF\žIåü"Bžż¤ŗ‘U’`,K˜»æc‡ÆŚWƒ(žw1œż„ļœ~’4øŚ_Ń!beŚ?Ō g—…ó§€õy…>‡Š#„R0@P˜"ӆÄŃ“Ā”å ».PŲ­s8@y=v.A’ięė&I?ĘDäk׊åĢ$MHżģ#±4™&ÄžõŲkĢĆĪņÜØs(åyĘ ÖOėūv`F!ź”*[ܳ”<–ē-OH³O‘-4Ų „Y Ęź{qaj‘ĪśŽ›Jģ`Œ«P—H¦!וö$ūį“’‡ó¶ŗFg+„ˆķ‚æ=Ån·‹×eę¹Ÿ×łT$™"³(ž“¤¤÷Ż T(„ Ųöģ{Qü®Ū˜­2ąXŠżųƒ±M]Į ž`½Ž’µF;œ¬błdcčĮ+šAĶ(’:Ä(Ū _‰IĻøß@¹yˆc¢*„U (H0PO¹@ĶyUśÆÜ÷ÅŪ_MŹ9ҾóƒüHiœ’PP¬°|ǵżnz’ɲ —ž éP^…ŻžVgŽuęOv]¶ vrĖW&:_łž¼ń}Q`Tž£tæé+ ¶\8£’÷ģĪŻ€ Å(„ø žź€+ä3åļ—æLąŌptu ¼B€W ĄĮƒ ^_…€CM¬h²U …yBK8 >©ėų)¢*9ŌzSQ•‚.e‘{ʬJ@XnZŖ–gÆ2–ć 3nq|o =aˆĀł››}É՘Ŗ…üÓńu±ƒN’@yČŪB“’9ÆśѬņ~u—ö«ś”)‡SeÅ?ņ8ŹG˜ūU;ÖĆ|’0ŪĪŁoć„ÓĄ%ŠWŚį‰|CćīB÷1(LźVøķ™ܾ<”厔ńHæ” #t­æx]Ń4@ Å×#„"*ŗBł –!öą ņ"•ĖŖ¬—=… 'Kœ$;‘KäŲH>)»CpæšKÉH-‹Ų qz)ĶBž3ä8'[jBóŗck}ąˆ Ŗ¬Vł 7ą~’’ķü$PöĢĶlgvNŽ5ŃĻh<ˆŁ9•„‚Øł1EšĻўżžĢžœC°r¶Mšõ<ņĪ™Iūqē Cßę¹;žĒµG¬wFO:8›ĪÅ{·>£Ø€ū a–ī?ŤOšÆŽ‡‰€ 0_å‡.ūłSķä†O(„ ÉžŸæ=³÷ĖcāKj¹Ē-äÜė}P»µL_€¶_¾cäģ/"y^©c˜˜fCłIżŃgżöC`ś„L¶÷šŁ’äm×s D e=pĖS TH™Ą0zŪ”ę[@w¼–ŠĀ|”%œ.(XÓÄĆa»ƒ!>A#Ø”°œ¢mUĄźÉ_JVéRQęGCśö8qŌŻ>< 1  ĖłOL€¦5Š“7fłW0#Śó@<łÆ)äæN³æąłēāņÆqP.&—Šßw.¹žµ¬ś7’ēø«žĀ7æ²9Ē”ōĖŪ ŻŽ.éWķ¼ EüGō[m¼|øĘ6T›Wģœ ™ĒeGĖ¾Ļń¬mŻvNž’ף Ćzš’Ó…b! RZ‰ō{¹R*Ś[p–«Łb%–²©X‘įńł6eŲu;9dķi©%SÜŌuf¶Oņƒ‘,ĆŅ–Åļn;.āĢŸÖĀdJ*EóZķ‹—Ōļ„DƒŖ­\õ`*śįVŲųz×±ĄÓS”@¼`ÄĘńż›Ž]1ŌoÖźéU† ›ē¾Źwüc­š’Xt.Ćē’ų/f…&xø ąĮ{¬šŅ¼hOźšīĮ„h€<0¹ń=Żł®Ž"]Ģģł@÷ļ_öØ×ß{&š ~ĄŪ–F¼3«®Ł ¤œ!ļ¹ĒsKõž_ jļ%;Æ“yĒ»y¢ėČ߁\ŁkČē@mIØG.Ų~نżÆ¼Ē˜Ųķį"xŃ3S ®DĄM ˜o Pī @h‰§Z§ ā¾-ņßł/mˆ!’ÕBžēƒü×kö4FžIŁ!äæYFq¹žĶ ’¢Aw’¹–ō‹ŹńOė•ä?,Ēæ¬CL~愁}ĒĀk¾ķągĄßĶ•ü”© /½7å|ūæ…ż{Ęi5Ķ5ŪFYžæ–Ņ  †Fß{#„".iBƀrÖЬŠˆ¶Ø[öve¤p,Õnš2[((MjP†Aęš!#ž*„ræ hCÕby]øMœrĀ`“<ÉóšFŠQČ öG“((醵2Ó?„˜×$¾‹‚—·ĄŁ½š~f‚‚ĶļOą Šб€ęŻæ>cĻcSļkä=a X½®Ź*’¼¦&{™Ys@ó£55 Fw^ón|-t*čZ¼Źś7X.0l»w?–]+ųŲ9ŸśˆÆbęčwWżrĖ÷‚¾@åóAŠ×HĖ|ŚĪ¾4sčVO-š_-:tÖ×֙™3æ ĄNO<ų–Ž=3|ą¬WĪ$ĪžŃŽ­Łæ½‘2až@QōóčPÆ'@µg`?ń˜ņ€-ęś p ƒŽZK€4Bžw×apŅłĀ¼‘’ˆ2@mäæģ÷&:ż{»ę+ßæ!’ÕVżĆBž›Eü ÷Ÿ.šū5”ž·;8w‡…æ·€­ó~G&°IĻæM3/]>ž{Õ°ö_z†åRĀq©‚o9Ö[ÕŌ„μm )©‚žåXŹ5Lb*H8¤ŅNAfģ¼Ō™2RĢZ7‘Ų½}jf2Ÿ‘ŁČƒWŲŠtö+Ī#éA†äĻS “Ā`“z’Y68‹ĻŁ/BÖ'JźłhD‰qJ†Æ%ThŗSīėaĮ°žąŁ½ā„„\£m(*F Šž]ӝwß:üæ•Ŗø քUk”Õ@ņv>źž»ŠŠt “’)Ą¶€Ü ĻVŒ0·Š` żĻ9>¤ée«ģ>,V4@\JÓ{ÉÜAo_u÷K> ”ūųū[VyJ€-@£g}aõōŠ?y‘Ł J:a=ŗr÷n„“?-ŁY&hąĀ[Ī•¬ķ(Łæf×܅éāāFn$€ÓłLmjåė¾ P'·?Ń÷ū§’ŽĆ̃ō„{īƒ[~°ŽLm½€Lö|»P%(÷˜ĻHĄę+`7@[š D0 ­T€Ó-ąG5ņļWņĀČŲź’R%’a«’§5łĒ©™ļ_S®’<…üĻ)Ü?bĢzĀż›MüƒCXŲĶĄ5ƒ ļ-ģõ[2$śŪäæ—7ŸuѰńŁ-JŠ30¹6Ka5Qī,Ā$Č)(n;ČĘž5“WC•¹YB&-S„ķ‚4 ¶bÜ ©§ŁŌŠ£ā‰ƒ[ͧGhX ¾fĄübŖšĮ,ß©9DČqƒi>”§˜„1ذPū08Ø­"Õ,^ēPāOĀ„bP’Ü×#‹÷^OØ8‰@ńŁśį¦§ń“ožųØm«ĖÉx¬ß8÷Užøc·‡&Īˆ€Lm °m·® Ą`ė®`۳Ƥ‹gÓ9xߖ Ėė˜Ä …"é/õmŠ ž”į@فœ~9ō˜½ņÖeo®¼*I…{K§°-¤Øüźē‰vz?~ńƒļwŒåļQé bŻ8|я'X”’śU¼üF>ræ•×7‹\Ļó>@ˆüžO²”ļĪz ūD€[~q˜žT’3·ō޹ń†ąk0ó ™-ÆKŒõ¼ģ›uką#[8’Ķ—‚Š·ź`pāhžp€š$S€rąŗ–ĄiV Ą)ŒzČNuņ†>Ģ’8åČæ/‘®ņŸ*¶FJüiT ł ł÷׿®ÕčĻ+ķē'’¦«—ü;‹īVĪÆ¬_”žaeüśR7)|qx’B“?r uĘ½ŻłėļŹ?oüØĢŚcJćL#ü3 RÅUAqĒR,€X•łÖLUꦆtTy„“ĮׅLtjӛūÓ÷i¹ŠĄ›Ytˆ» Ģ':‹-Ę$”{Ÿ°ø qCg'õŸ$¢Ź…ą2x4„qŠkąµ6É8U4„H*—ĄŪˆN%ˆJ-Päo I‘æy}e1¼æŌ¼T»xr_:Į·¾|äÆf¦åSżSE ‰Ž’žcmxbū\fW4X¾Ų|&°b`$āēŖ”ŪĖš…]ƒH{Ä(s[vÆņūN\¹ĄZSŠJ ŠOܒ+Čwß+˜SIvüY;žÉIō¾‹HMiłCß¾÷sOėŚóÉ ōÉo†SŲį+?rōiwß:pį-ē>ēwéOaöōĻ×ÜqʁŹgž=ī}¹ķoœC©~—fL«°2‡WßųyEā\83?<ļ¾%‘@ĻĀŹov:@pü“'@}ØLš—pÜgīø>Ūj|¶o•|r£pŠ¢^ņ_kŽ#X,ņ\żļC9łß;RyYhņ?_N’ó”ļ? _¾ææßR]õ' ‹N#žQįž®ųkzåxs]ń÷ęrhū_4 ēW›[ų„į沫āĻ īÕæŽR ޼4¤w¬°?\8F_¹d0q irBK‘Ć$”SZ÷ö"% ņČĒže—ņcD•O$7‰¤Nš©ˆ£ ˜4ČN“ó™TB ¬ÜÆļ?|NįĢȃ Ąjø„p!Ė fį­‚UŠĖ 'Ūµ“mś“ž’±ņŒl ¬æ‹ÕJüՎčq˜$EaĪś~šāg2,“æ"¤@Ńų/Ņ_ (xÆ×!P7!PŹł/†:üą›G_8|Ņ|iģ¼kĄŚ¾¹ÆņG{h051×F£­čZ¤³€, µ˜z"ĄbĮHą®×üµ›÷ļ]«9Æü-„h’`±„½“łJZ ŠcŸ|Žö78¢żO§?s䛲ģ±7ņĘ莳±_ųő+÷üI>±ńē–æčē”s“żąĒßTV8tžĶ›­äĘVJŚF·½„«’śq– Üżœž·9<õj’ÖŽ »Žympžznį#M‚­Ļ–æ—„H€@*ŠÜH€fyȶ*H¦ČdĮ¦¤¢ZZŊ½U’Uŗš"Ā^_Xt€‡;9töī“ļžėk€5ėē°Ź_EŲńhõó× ]V­žr°éL ŪīŠ…Qs!ó^ĢŠĘ0pÕ+Äß&“ŗ\Ÿz描FD„F®U‰(ėė3ōoŠ &BŹęēS4 ¤ ŠŌęæźÄJu” IDAT©¾ĘąmoošĶ‡ĖĪW<’Ś_ńƶ‘ŪƁ{õ“Scw¾£}ļēƼ~ŽóÉ؊W¤¦{^žUŹč…£Y÷‡+-óFMSI°ƒ—<šLKļż Ę:~ņÉćߚ 3Ōs ‰d–=ņ“ń8÷¶-ĄüGš¬|n‰‹؆ZŸ•—Š)` §.ZĄ)ˆ¹˜ž-łÆ%B lõ)’N4Ÿü›Ām„M$’–öæŌBžżhtÕ!ƿ朿u߀Ķ$ž0Ā`üÄ,Ā樹•”ą(€]ŽC¬‰ÜZ÷CŲSü¹ĘkE`ū×Yžø]øjä0ŗ•éV 0%(_¬ „¢NÉFbjČöl„ŠņTń^1•4ČnļćmY~dÓ#‰'ØŚūÉą’ņčsčAMäŸ$°īCQžė4”Lń£mŚˆĘ™,§7Wđēfˆ’) ¶°~a¢@eŀĄjŹ^‹¤@ŒķŪ=Õ}ļCQŖ9ņך¾ę9ž}āńfĢŠĶķļģ¶ž <õb·jēĶy±óž7ŸĻ?°ę6ī]×Éāī'Žm€;)@„hļ–P6æĄ3Įä†÷_­@f~§ēŽ>„WČė›Äddz®Ķ<ž© ÷=’`•Ė8ū›ŸUL;‹œ©ļo¹sŻ·ÓåĻL#®_9¾ą&<‘{ā+·æś ·/L8xŽį;¢ķڱō³æąm[J"@Ų³nµFÕ.¤‡V*Ą©‰–pŠa.¦‹EžwĢc¹æ>Ģ/ł©ƒüēČOž3'’eT)óg P=ä?lŽQäæÖ@åJ‚Ÿųf¼ņ~óįņ_mÕ?ģ‡ƒ¬ˆU’¹’ō<ļÜ?²ń ø j~%ŲpWū÷Gćµz,øŃ{ąŠ5Œ£8ųīĶ֟ļĶ?}pŸ½lbJź¶­0› °‘§ŽÅŽ–lp¾ó †Ųy‰1RDpˆą(FŅ IĘH„:ÄLj™Ńæ|ŹŲ¾r§/€ī•m€õˆ‚÷b¹¼¶īkī7Tz”YŒÓ˜‘dGR=ډd—˜‘ Ø0Bķ5Š›”ŠŲ›VlĀV,Ųü‘Įż(į VQ ˆ(Q 1ąGˆ( ')A'ré’×±O8¶ZVŪ_$Dījz-łüõF Œ'ŽĪm~BÖmžńląœ \ lµ?l•?j~‹‰®^vżU–|ˆs¦˜ćĢ Ė‚ė³÷‚*B@p[X4Ą\Źś·7Z*ŠÆōK½ūbHžüŸÆśū£ _ńū*žx³¦Łwē7zŪż"ĄŃĖ÷ż™mÆ!eķ^÷Ä_~0ø(’Ą–]®O®xūM ÖĆ­“’øę÷g’&8Oæšų3N¼Éfļ#%wŒż÷Ūüżr …vŌ᫵P"@µ(€–pź”%œB˜«ćZäßŻÖ ņD›żÕCž½Żµ8ż7böWĢ÷%’ž~Ķ ło–Ń_½«ž^øæŒxš©%܈'žŽ~ 9Äæd*ČA?“šŖąEqsLĄ%žcÕ:ÖOP8Œšź°9ōĒĻ4’ņäQkĖŌq»]N)Į'SŅ63…MŃ$8‰ųBī‹…$bļ’‰q¦‘#8Y:AŚ‚C'p#£Y™Nm$Õ&m|"õX¶Ÿ×fpŸ° @/ęž”ĮĶõ߄Yµ° : ō>¦I"šę02ā`²[‚Į, Ņ/Žh€b Yckä% _Ó|błZµ4&Q&^Ō+ #ü¢€x_næe輯’Ė‘Ėēp¦[³dīčYčĘÜVł£ŚĪĒϳļZœšœ+€M[Üh©f˜.&IŗėĻ®M~ŻūsHłSĖt]G-i͌(ėŪ@J@Ōüü'"°4čĆw Ķ÷yćČó¼Į]o…rŽvģ’šµ˜™)ė“0ųԟžc>E¤¦“?}+¹9T¦E:ćǟÓ/‚3ó˵žóK€ĀĢĶKPć™±Ū^Ó·żõĒ̃B@5(FƒkS]ŪךWOUėrӔ& Ģož–²Ų¾Čƒ —_‚ł*døF×Yž„„ū.éu8čä¹ģ ķh2Ć÷n½+¹75Āj \f–Į½ ®-Ī£Öo /ö_W<¾ 5gp¦O2lŚfHĘP %³|v¹~4Ū)¦D‚œŲšĪ#›Sc³4N^“!­žŠ"мhékĮ·-˜Ž(ęoQĒįXŃ_`bĢ6¾öłżo¾wŪŠ’±mÖ뒐c?Ž­ė›Ū*ܱ»wŌ7Mś6ϹŅ]ń_¾ŅYå]ł_D»1Ę1š‚×dž¾B—Óup®Ó„ ŒØ5- ø­$ųn qŃķ˜[J@œ/€7?’Ó;`zż_]¦Y  pāŹCo±}ŸVJŁÉńmļlß÷„1[€LÓm0ŅūĘl~łŻ¢ŸŁ÷Įåæj70ūć=+ķ¹ģĄŸIÖöRξžżų+•?é^;Ó@PŲń—’])e§g}żęķWīĀ«•ѵˆ< `©T@K8eŠN損:žokb¹æłÆBžQ[¾ł3ū«5ߨ?ä?n%£ōpÕæ“æzóüēƒų{c? ń~—Ɯp2²Gó`Įõ˜©ÖÜ`Ÿs,o^2rČZ11ģ$ Œ; ¦ ÕQąńT¢£)³mŖ ŁÜ‡I‚rLPY¬c¤Yn¶õźĆŁnm_Z»·ŽžųÆę€E`’łæŲšĖ>õ?ˆHKöæćŒ/ø×ßµY"ĄbyT{–öŠhyĄ0ĢŰUąŌAK8·śß(łÆ5üĒC=äæ‘r-ņļ¢Ö| šü·E™żÅåūūoVČšŲ8,ĘŖ?P_žÅ M žp«Äey…Ė¢ę Ą%žÕ³Ź› 7 J$€ä`{·šWLž°7ĻōŪvŽi’q2¹1ŸxqĻi,-/€ÄŹMŽ2$f˜ÅMk› ^ąŗk÷gIE–TdKEZв+ōžģ2mWbĻY·¦SCuˆīE n.’J«Š’./nO¢!æęōIŽ­æH)Ķd6×Ų„HŠƒ©NmWūJćh"£M+Īd#$>47¾IˆüA-c‰@“ į¢@@š¦0xĒ{‚€9#Åwo—WFÄtpžē hZm×Ī\‡µ{€BĢwžs`楋^¼ąÅĄśīė]åÆĒą/äųE6żCĻJń/W\“~ÄæM‹8׉4½Ģ‰˜ļ”€ŠóG˜@ūŽ7†~z `·z.żÖ‘—;x±ż‡Üź?¹Y±ÄŁ@ĪōÆzn;óĘ0sĄƒW~‹äé—B™m~üU ĄÉµ]6ÓńÜÆ‘®Ķģ¹¶ļĮ—īņJ¤E€cēŽø&æģ…ߨC+’»MæŻü³Øź§²Pke€ZD€ ę£2@+ąŌ@KXāX*Ž’-ņætȽN’ ļߌ’zWż›eņÓ2ę˜ēuž8āļį(š¦Øłpsžbå?5„L¬”]ƒŗóŒ‰“rõ̘’Ä ’g q,•c‡b®Ń¤nŽĮபǠkƐ`ČC£In°)-įF|9ąÄHiĶÉ®JL“­ILwč;²Jģ=ėW©”öc|‘)‹Īƒ[‘TZžF4Įuv(Ó©ķčXeH÷jćZ–E»@8slóˆ8a Ś±AA $ ųZXD)]||åænļgķĻæIAĮĒ-—ö{äŸÜŸØų;s£4-ĪZ“!ÄŖ8 BØ%J`÷Īšóut]¼źuĄ3.Ś:\éÆUXäoJ"Eæżó÷w~3„驕b¶ReLOGšĪņÅ“o[­ŃĮmQ€+„„”éK šoÆ× ė¾W<¾ś®õW%G~sµ6³ėSśŲļŽ›:ü­?±N(ēXūŗVŲ9”?“ō_śė ­Äš’’éßz›Ö[(Źė›Åųęæ»ÄW3kōßÖß{ęOJ;§QV!`|Õ{;Ę{ßų]El³F¾°å®Õ7y]C\Ū?KˆĆ¶Ve€ŠhŽM ó‚SĶōo>É ‘’"œü7¹Ģ_ŲübĢžf‘ļļżņT>Œ”ˆ€„…ü‡Ķ5¬śėō¤–`–ÜńÄæb@y½ <Ō9żų•Ā3Lą)Qó†לo±`ĀM=XӇ€#[Ģó—=$žH ŚCmžwŅdkI²{'Ä}’f_ä±øį#MużXŽų»£ŗ÷ ‡Mђl†ė$m©ˆ)8”–āf¶×‘µGJ„©Q%Īüu '¶š]GŸ^ąj¤x’Ąź ¬|TWD°‰Ń$O°ĆéNm{Ē*cWū*ćd&Ķ  ø¼’ņ_„Š&×”|_”&“ɹ>©ļ5ø¦|åóŌSńå ƒS°÷gFnt‹T żĒ±ķß9õV©˜fōWFö=ņ”žļ„ø’p.ø.”`C* ¶5{Zµ¦qrGĢ÷>1;g΁õ›€3ĻzWŗżģbkÖ*TßÅćxįkŪ?¦iÅbžšŽĖ2™#I1>ÕĹF0M8Ü÷YŅuĄĖ”Ü×Wp`š°ų·{šī»\Ģī3ąVzu8ˆ;īvļ~É(Ū ßXķpƒ¶ žq-g.Źķپ¶ ¢|$Į,JhåŪÕDæ\öū+īp}įŌ7”‚ž8žĖæĪģżr™­e&śŽÕ™kæü >öč{V=žÖC&@ŗīŽė=~ÖļžNQāŁ¤ņæ]~×3>øĻRŗož˜Œ/4Ę×ꛊ“3ɞųöŠ»Ö}6ųž™yž(Ÿ·ž’€a•oĻĻ€©Łm3ØÓ‚EQČ@łīr dŗ©aP¦59ʶWžGuP§Y¹½ĄĮƒ Ž¾Ł}‡Z%—(WC”} É˜~Ūŗ<°’j7W.×ø®ųóu}<ęF)R( ōi²x"Ɇķś”Š„Cślh™+¾ $S¼ą¬0NJO( e©•Oč2{‚w~fAŸź]8¦“ķēXoɦˆ`‘  Mg‡“b{×ZcgēZ£æ­Cä$Š!õAÄ9Dī‹x ©x7ā>!cųWU^ƒé€üϱD¤ ¢ŲoZ˜ px÷t×Ļo>ś7“ćĪÓ¢žÉūƜü{éł/Exż F’ąĢ`ƶóX±Śix•?JF‡Ī.ąģ €3¶ŗåü<āßģUžØcĪy§?|ö9ژi¹2'hš  Ė$ęt Ė4Į|Bi:“”_Šu€lĒ-%E(ųD`VŠŽż<(p Ź j"€ĘAÜģ€0[&0 fŽ>ČÕÉß.æ’Å`–%Šć’ŃÅ&Ļłōõ ¾š C7¬½ē‚[m6”iΊū.Ūł2itæŹ9Ö¾÷ÓļH˜{m M‡ņ‹ff=ß»įG7(¦_9õc}ęńļ>óĮ?²§†Wļ|×}©‰»KÕVCčm‡šõ›”š‹'O€zVBõaé‹7tuĢ8ÕD(Z"Ą’D+Dc‰¢Ły’§J¹æ…$’ ‘ü×Zęo>ɳCž>ÕŠŠŖÄXõ®ś»5żźČó;w=Ä_JАł1pK¤łß \3¾„€\ù˜Wµī¢ó‰äO{·$īķŁdœąÉńcVĒ­Īš;­¶.®ēĄB‹\£½*å÷ĪłIŹIóŃD–?Ö±.qēņ³R»²=śT$Iõø ­XnĢNŽÉÆ9VŲ’±Ļ1órƒtd÷ąf+qā|‹ŚęļE'ĘV=¤£{Ÿ¦@D09§1žą‡“]bG×JcwūJćD¶KLƒ“$"Õč*±Ł‡¾ŲźhLė©Y ØćTć›:\ņöz~ö½cĻŽńšų_;’„£³+©øŖļżJņ_Ü!P~lI" ąŸæ6†[X¦,­Čū’ Ūę81ūląča ?¬\ŅĒ©2vÜłęVüw‘M’Š»JūŅŪ>ŚS*łgĶXšŲe)"īmĮ)XeŃ„}!œœ©4£ņźf;¦ <š9÷H½_š’ģ‚‘„ž”_€ ą*ęåó‹šD€ćW{—4V}dž÷kļøšOyng™„.lØ’pĖōŠWü”Łįß¼|Ł® x-øćė6ŌĻ’?Žh{£wųÆÖJžŌ¦ö¾oĖ}gžĀ|P3 Ą/@Ŗ(@* @²­ŲČܟ³Śŗ”‚‘=+”ö‹qœ Øā:ų'Ąå!ūĆ"‚"Ąużq"@+ `i¢å°1y’õb1ŹżU#’Ć•ū£ČنӐü‡9żĻ—Ł_­%žLVłÆ×čo®¹ž@„Ép÷oÄą/r^Å\qĪ@÷žėüæy’QČĆ-ƒįµ²«0#×ä‡ķe֌Ō(¦eXįģĮĢÆ„Ińv‚iø®ö )Q ø„óŖ’ĪżɓĢę‹$?‘Čˆ‘ঔм„q=Ųą¶„ÕŁÅóėŒŽ‰˵¾]ÓŁ‘ŽżĘųy?L›ļHØĢož²²'86Ż–Äy?H«ī}š"›8Mi;‘Čˆķ=ڽk/[—8ÖŃ%¦9'©U!’R)ŠkŽ£˜×,Éx\SÅĘ$§°¦BZE?„JMł›UŁ¢Ä^„9PĢ„by)y^J.„¢Ć¦;žõ3»žī±Ę?äHCžQNšĖ6Ī&ŌCžŻ æ½- is@iPJ@×¼Ś^Šģļéńhę*Äń‹Mž“)ŗēõÓżNäļńZJCZÓ °,Å<ó? @ĀŠˆ”bĮ뽦ėąA“Ą¤N¤ōŠ{™ą:ÅŻĖĀīĮō3 óÜh€Z|āĢg£f·ihš™·?[«ŽGJµķśĀ’’;ķąsĖŠę·µO÷¼ōėJQZĻųšś?\łHŠŠó=zā¹ļõČ?)ė11½ėķ›v_³aÅ®ē­ÕņūŽ@YŁ-_ß}ń®?ņ?OĄŖ{x3œźåc{~@¹'@Ų3³Ķ,X+Z~§Z”%†¹äż7Ėōo):ž€Fė0ņ?5ZĄośw:’’ą¶ZĢžę”ļļC3CžƒŪ#|Š!’”ūęøźßhø܊æÜŠyĆùļœß”ų‡iąŖŠ,»£F[$dįę\ōżŌĆ]ķāöž³._Æ) >l÷Žk޽vļ–ü‹ŖžcĄQĢ$€÷µ$ā»18ļiǘaF†=ŃŃkܽņ¬Ōć©}ÜH0GQemł08`¬0ķSżfĒš sõō yF~ŅŽdŌJe«eäӒl“ibµMSĖČųJ{y2mĒ9ŗ÷ Snj1Ų*0ŽI®³~#Ć÷g»µ½m«#=śh2Å ’EH|ń3™„¢Ąź{½Qā”żčŅ¢£n’i’…’nģŻŽäķÕ§f‰;łBś}ğūJd?"=Ą×æw…Ā—žs RŽMÅtĒV0 ³ąŌ·J_c”@ģńsˆXlÓ?Īišeoéyż¹g'F`Y°€Ņ*>/®&[`}Ā¢  Ą(Ef]ŃĮHĄ]Ż÷ÆžĆ÷»Œ Ą‹«ūµD„łē5±ž£ĖĒ·~ü Ž¹ēuĖīzÖ]ž¾š…D;ųÜĆ_S<}%·ĒžcćĻ;?ä„šĢ’Ēž»ļ+¹ńsĄĶ”/¬»ēŁ’”2w¹_Ü“«Gmśöś™×ÜŖ¬ »Æ¾(uä‡eBs£‘ž( > s|öø°H€õŁŹ»Y£‘µ¤Ą¶Äō½¼Ę( > 6­H€„†Å棷0‹9꿇įtpü²æŁŸŽ…%’‹‘ļÜµźŸ·AaF iņī?WāļmĻÅ}õĘ#÷,¦ą†]GÜEF—9+Ņ“¬×šE|”§ČNtaņ¼éŪ†­ '»xÆż,܋ĮQ {Ūl¤įšÖp7\żCiÓdsF?šģŅśķ"'¤) rté]Óuå PFš°ŚŃ ^M±É©khzĀī³fœuŅ–Ė’3<»ņQf¬|T璁å:äŪ%ņķ’ģ„‚ŌɘC`& ć„ÄCjŒ+rJ'“ 8ŒČ$Ž).Ų°–dGķā@ūrķHūr}ĄčNLI^ÉB–$ üWš~ö‚(a LGqb蒗ƒO$*¤~śco“ƌĪõŸE°Ü_łŸõˆ ’³½}Ēŗæö3ģyB o“ķ® K‚,6’ Ť“ą8rĪę€óyģb“ĪŁg>²ń,clF)–0„Ņ$)˲ܷ<ļž£% 4h°, ¦„gPŒ“ŅĄp+8«LŠtČq¬@ī¾Ī‚"€ąz¤7€có’}7c®/0Küż¾ī˜īöfųXü~…īg¬‚ńü±/öÜł¬»ƒßZĖøbū»O_INįĮÕxžGĄļ †ūHuģY_i%7ž_¶Čķ}φ{ĻųAŠ0“°ļõ‡Žt_õ-„uæūȊ_vꑞŹĪF=ü~@¼'ĄŌ*'„yš Š'O€ś|"@©o“ü.‚«„Ga[~Õp]Ėą”BKXBˆūVÉ’bēż/d¹æS™ü‡™żńä85Ƚłž eōŗźæDņü%…E˜ļ—č–,¦š\•pūE‚ėKŠŻ%×铣CڲŒj·§eæ¦s'įłÜrmšü©ŸÜ÷ō©7X tŸ„ė70 øģ2x„žŗQÓUÆżNJķšCŒ¦„ĮŽ';Äįl§¢ų‘V˜]äįĖõJÜēufėĖ“I-Ķ Łm|lĄ˜±Ž¦œ5挳ұU—tT“0ŅĆ\ˌpFn:Fį³VDŠ @PDd”Ą8M1h 6L‹£ÉnķX¦[ĢtjzJ„Q’ "œ{£®ą7²ģ{<;Ļ 0P—(PŃÉ}\śķ­'Ī{ąīŃ÷ŲėB…äS‰Šr’’ŁōOp·Õ&æ»ĆĄŗ>Ē%’ą8GR‘Ts(‡ĄIƒ" p«‡c«ŚHł\I}Ē.6V¬ŃnøāÕķ„ō¼kI)M“°,XŽ"ĘIłŅ”›"f‘)q„y«ü†F¬ąEųņō¹VfčŽ£uŒšŹŚŽY)pģŚŖx?ū £D€V½B@5 ēĮ?~x²ļ=W¶ųĘØ@ LŃ,ńŗüžē;śŠ÷BɓūÆ+yČ 3¼ų¶‹¬ģSžŒéo_y×9氂īz”N\șÜ­0:WMI° +'ŪK^8xj™~åQq"€B+ģ|)”%,,DŽ’¶Sü‡™žńd$’žŁ_©Ģ_“Ģžģb’ZņżėqījÖŖŌ1@8×č!ä?”ų‘ä®įž’4~„³>؈„/ 5ś"£ŠĻ*ݱU»—m֌c¤»xĪH‘ݶLŒ/5vn~Ä¾ē‰§ēž£¢ž8Üźp½ęR&Šć,CÕ|ĘƆ;D”Ó`*Ćd{“c™n1-EņBś«‘fĘ  ĒŠEžéĢžK¶‹ŃÜø},?n÷ägœ^''{lSv([e¤BR)•€„F BłĪ Š‘M›ˆ#ĒM3Ę$ŌR|0Õ.3]ŚH²S›ŠR¼ %™ Ņ Jؘ«Ÿ@7 õ s Ā„ąk’ēš’5‹æwå IDAT½tŻc^:ԟ{V”@kj·O¢Y>_fśēī‹uü*Č’ģX÷ßią%ÆŹAӊäߙ¤ļw„”CŠøĄc łÜ‚®ņG»ŲHfų=oz’ź’`ŒŪ¢Ģ>Ī(Å RD–E^Z€“i (ļbbZ ^4€ehÄįF³B€ ø£3[–‡’{ѵV صT`¢Ų‚f^©Ą¹VČü°’Ūī‰cēßø>ßvį—”R29ņŪwtģł`é<>`ą’ļmœé|ī·Jhł}ļZy×9%s?Ė ”Ȭ¦¦‡Š©,“k‰@c"@Ŗ‰qh•\:h K •÷‡Z󞋦‘˜oņ¶ś’d%’„ M$’K!ä)Æś7›ųs¦4`<ēDgӛXüŅQ³•öļnWL9Ș3ŖŻš‘†•Wœ$µ$3;{µĮM{÷š©eū.̟S“ü˜°ī{2Wˆ·tApæ8mp°źČ§yĀ–[J+Å51Ņü@¶[۟ķM ‹“f‘ę/żOn„Æ4 ²~œd¶MĢ$S¼`åœńü“3˜Ÿ“ĶL8ę“Ófęe‡cŹ6eŖ“#UR:d€Ą”HAĮa&g”#AÓZ‚MŠ×3|,•zšO&3"§%˜) ę aüAÄ3a|-źõ“jČ;U”$żB‚¬xMŠĀDļźŪłČÄ„C¹K ¹ŚŪ'„€‘0Ą…†B”3oEdļĶ÷…—ū+õš%ö>ņļķ/;¶4n`,Nr¼ėuĖŠ»Zb]Ÿõ›mōm¶±¬GĀ‘ÅUx鉀”åh€£ĆŠŠ„D.ŸG”P˜÷UžŠ•’E¦œÓĄĖŽŠ}]©ĀƒŠ`ŁE²ļ8Źą¤`Yäų£f…2-«2@BY–Ei¦IŽOŠĮ8ą8f™€Ā¼‚)žR@xJ€ß µ‹@¹/€ĆA"D(ĶK@!ŅuŚé|Njzż_ü;ˆµkӇ?¾ģ·Ļ½Ļ*~“µā¶žł©å“=ÆśĄŗxžÄg¶lŪüżéĄųAĄiR¼óeģōÉļŻēõ›JĪMš£.ĄpĖó/\7׿vēDT*@œp]•T€–°4Šs ’Q˜/ÓæZ’kE³ČY¹æˆŚŻ†1DåÉBžējöWoČæbe€Łj¦ŃߜWż‰ų74*8 8€)Ń)«XŪ—ŖäåŪ†"%UBZ2mędŅ„ibV"CĮ˜,ppÓ^Üi=Ŗ2‡ŸRX_ó§K‡¾ßׇ _œ‹ W,!ø‹“ī1†jŽp“°åքJŽ3‹kI~(³LßÕ±6y<Ł)føN2Hzż$ße+R~ūw*’|xÄ 5ēÓInę;ÅTg^å-Ö“LŲ9™0-™¶Ō¤ ” „”s_›ĆŁĢ‚L=Åņz†ē ƒX‚l’Ā`Nń Ø.X؈×RœžģĻQʁ„³ē‰[č­W(1÷Oæ8Pķu:ŗóšļGÖļxdü™CłK y¹ŹŪļ’ž‰ø„Ułd*(…|¾€ÜL¦i£DӋŒ¾ģOŽ`¹æŁĆ¢P¤$ōåč?*p’Żīž¶v‰Uė¬ķ³±fž•ī«u·æć”dPŽ€F’†eHLNNĮt¬š]ūkZå_¢Ž’œ Ÿ™łŲśM©ŠŲ"MhŠą Žē/Į@3ŹM ąY–UŠ`(ęģk`Yäłņiœ”Å@š¦©Ł‚āN]÷E8ä(WŗŖ5 Ž”€ /@;*ĶĆD 2 `ąß»V‘~.™ć?Zńėõ7łūZHÓ &{_ŸŪšžoƒųZ²'“uŪŖėYO€²c|"Ą”K}„"¾™äĢ-«Ž|bğ97ĄŌ!tCM 7&`%Ō@@ˆC±2@Õņ€E” RŲVc*@źZ~‹–°Čˆūō_WžŒUfåż×jś7Ÿåžü˜ ł®ždLGŸo)’0āT’ƒr!łžĄ,ł_Jłžf«ža)KmÕæ–<Īā3ƒyŃ ŖP«(¤"XŖ«’@<› Żļ§nŚ*c;Ź6„1(‘TVŗGīœ‘»Ļ8ØŅ<ē|za­Ŗ—Ø ”Y›m†°åÖ¤Jq›i4”%Ų”L·¶£}…q(Ż«sdģ+¦Č»z)ß÷—Ćåoµ0!Š+p ‰ Ģ”©ņf‡šTRri¹ļć€¹„īfWS8'IÅ4’J‘Ņ8Iʃ$=ŽÜ׋ąXqÆ3ģĻ[š[Q(ˆśXÕ#8ā@0jąńĒÖ>žąŲ3ūs—ņr·Ż#żŻ:… É×wI%“H$\1`z&‡|®ĒQ:žĻŽśüįž¾ß}cĻ}ųRf®µTąäĒīĒvoO€h°|•ƒå½–ƶ±rµMW„4( Ņ&$“są(c#ćpg^¼–€éV­5nxįŸö> °l&%3Ź?kšŠ€°h eI}ißqÓ,hąn4“Y†­ Ń •¾µ¦Ōå PL•ŠK (– $Å*ļX~ ż÷o»~üāUŪżÆ’bŲßĀĢ\ ?õʛĄōsH9Gzśėæ 3ōĆ2Ac[>Ņe¦ś>@%OŽżOž'ĄBŠČ”% ½¼_˜Šą Üņ€žpØJ@ń½ź5²Y¦€Į(€ āD…&­&¶Š0Zļ’"¢Ł”’§‚é_łļĆģź‹ü!’‹eö·!’aćŌBž—ŅŖŠŁ? „U‚żw”š®Q’Æ =h Ą±j#/ĄŁŃ»¹IøčŪÉžDææ÷Ģä¶Õē„ök:3#%„"ŪR|rČĪ ĢÆ=f^П-\¼÷’Āz;ŁùF‘>ɱł¶„2¦™MŒ&E‚Jwj-[›x¬}ŃŸźāyp*{`c!&µ~ÉxÕן­`7““׊Ø×`©…ż1Š&’¤ź[Izģįń5Ū*‘žRxæn0 ‰DŒs(„pńecXۗljc ģŽžĮš ę±ņŁó’UŽć·R°m33y nT@‰čū¢b’}ĀAxś€Æt`پYIĮ/„ĖŪ–ķp°|…ƒīåŗzd2ŅM° ¶ĆąŲ$,»€”ĮX–Š/ēēŌVņo)äż§2üwļžä†÷KöĮ²!9 ńˆ°l Žo;/¦ÓąųJżqe€eĮ) ]Œ“²Pō£°*Mņ’YƧ\`°T Gźż„ż?K†žįTSŹśŅ¶üʀdt±cWü’Ł—€>žČ›Wß}Į-¢xĪØvf ?v鞒T,ń\nO|cėmķ*ķ ˆVē':’t&8·ZKśE ²D`>S9N² ƀ'ĄL@hė†ź4Ė·ĶwyĄ8? öņ€­Ņ€§&Z‹„łČūbŪ#’ačCy¹æ )W‹üĻł3ū3’õ‘£8^-äßėӌ’4PĘäkYõo–»æ?Ü?œ L#Ū÷ĄĖ¹ `Ą ‘gi t}ĮPenĢ@Ĕ"]ZąŅRdi &Ż{¾$ÓķbšÖGB 0Jß" »/Ķmšģužž¤€Žķ:ÖŽo(¦`§IĶ`‡’]b{Ēż‰Žõś`:Ć T$’*š]"ĖŅO–cJĪńįźq”öˆaó ū%°@ šV‚Āæ0šŲĆćk·?4v‰Ÿōō"įO$“`ŒAłāŃS‰µ}y¬ŪGߦ²žÓ‘ūOü $ٌĢ#5Č0ų”÷%œbø*«ŌįX‰IŚč90JYk¼ĒK`x??° Véfklń Śg䌱³Ė»‘m9d¬éŽd/źŪ蚬œ›ė‡ÄØĄŅg-īŲiB.IŹ ƒ­”Ų›i3·7ưö“,Jō6dŒ¬`“ˆu-]š‡AžT¼rŹÜ*„åC}ĶējĻ |diU¼ĖŖ®sc ‚¬™Ŗtõf|؆ģ?†’>Ū¾udł¶-Ć/ļ;\xE!Ɩ€©t ō™ņņsåā6Ćd¬Ż`äš_&£pĘĖĒpĘŁć8°7‰ē77 ÷°…Ru+{D{ܐ™†$҆r4ņyŽzCŌtü÷ļĮ?EʇO“&qĢ]įXÕŗ0&Ę LŒ•ˆÓŅdJ#‘hÄņ„lĪ¢§«…‚}L;žĄņU©Æ^~]ēsJ3IĆ䀀ž‘0 —]“)¢aTT@H‚Ō.Ū©$XJ“„rŲQģµ ”aš^ėĄIŌp‚EBŪ¬BćVE`¦ę€óB˜ „;ń«ĪGÆ}ļįWŽū”Qčß”Œr`ēłĻ¼ŹIŸōŚī‹ž~Ż6 z‹ĄvÜo'ś’8ßņöLßÉ_øU‹¦·žö¹“æŲõ:³ūĪP™(ä@‰Ųc›Œhp4ŪĪ·)ąŒüTG%ź¾YˆŁ‰…ŗ’rš_OŻ’ų(h²v­k“ū ƒĄ#ŽšžĄŌĄ’l¶ł;.Ą’fżė’ūW„ŸõÆ–Ņ !@:FŅ4 čĮńüéO ē Uē܆I ÷ŽJtĄÓ2VŪ¼ĆŠkIō%›äÓmk’÷ÆŲ”Śl±ņ$ˆÓGĮL€ 7Ļ2?®’#‡ģE£‡ģµŁaēÄBVÆ)Üyd½Ż<°Ī•¹V=ćß-Ņ@SŽ&·ī3 Š Ž”4jXā°•‘{3ķę®ÖցĘVkø!- ŚW”ąĻą×>’>Tś‚=éĒ­š›öÕ@}ų¼“ 1`Ļ.ØšĪ„ &ńØźćó„Æ~ć†dč²żwoY¾ż¹‘—÷Ο]Čė„ ¤D*™„iY5A8ŲĄ‰§LąŒ³G=Ą/¼N Į_| !„@Ÿ…6§±k» ­ü™‚ć\@š8hĶ`f8¶‚kkø®»«Jśī²ś! ?u_Ņ±*y DĻ#4—æ]ĄJ0 CĆjpac]ū PP„Śē˜püGŗŃxģCŸZūq!Ą"\Æļ{ĒuąĀĖö—yšˆ€hY@šs#“ĖĮrŲ ‚Š”y•r|N\lI9‰7@Üć%AT2œ‰/@½ž@¹/Ą¤ž”›"%:%e÷;‡ß ·ŹģžO/½wżwƒķfhĆøųł« ›¾"#‘ßż”„÷Æ’ļųü¦¶āē*8xÖįźÄāO gąN~ ć³įaq` @“QĪ÷†I€ø@:Öšż$4ĘHˆ“0±ŌŪgĮ`!f#€ł FĶtĘTĮ?PNÜ€`j¦õ€ąą(ĻžĻųw Põµł¦žgŚęo.ėż–Ńßleż]@Ōü $EyÖ_$Œ(šÓ(woNµżgVuīØmŪ{“b€Ęź›Wķ‘6…įłT„s¬0n–M …Œ^“Œž„ŽŁé‡īķ¾¶·;w)’R"•N{ ?QMV;˜‚€+_ߋ†FÆežØA !AB‚H";!ńā³ <æY"Ÿ„¢9 ł·Į³  ĮŠQ°“CŠL”Æü‡·SŒH(’±}CÄAüXuŽeXFĘĮąpčŽų+­õ]’®„ļZµ!3"D p—®Ą« T B& T @ū@S(§H„‰ÆÅąä$€m—·¬H„|€©‘ń6Ąģ’A!\×5łŸ –žzķub¢»ųµgš`ĒHQĻ…;oVÉåŸĄfvĻĒN|pŻ÷ņī@m@µžkvņČv°ī=å—ĘĖćū.Ńø8¶½Z)ĄtI’kččIüžÄB Ą¼dcꉖ•É^+M.łĖ"ÜŽNF%„XH…¼6sĆnz¼ßm™p:scī;«—ŗŻ®7A!­iÖ°Ą@QĪīC- ĻŲOĄ&A9)hB˜4b$D2#ޤZŒ#鳿¹Õ1Ņ2o$…"“ip%“¾j€_»L,@P•jš«}/Ü @æb&ßõ@91¼łMųLˆ”€ē"ü1Ž1D0Gp Yz‹×Wų 38ņøŖEµ·kµ/8¼W%Ič‘ùö§é}ĆŲØ½É@g+ŠŚŒ‰vĄźÄDÖAvbŗĪ¬3‡žÄĖ®źGG§SŹņS(ūŗOäežA²øLž !Øtæ·GąŁ'5¶=ļ‚ż‡¹ąõŠķ#O†ÖZ1“ ø®šLNźvüȂ8Ÿö¾ST D¶W(-H4=ˆżūvcb,ܤmncłźäm7}xMQV׫C LZ x>žS- š(mÖĒĖj©15@¤$õ«ā%R‚Żųŗ˜(WLµM Eåłz•@I  Ü¾¢ēsŚh~-XžĖ™ĢÕ@:÷Hŗė?>ÖłüĶā-óĖ®Hv/}ēŠäDo¶eß_ę|æ*+v\øēz'¹ęóPŁ_œšXęķę08Ns¬˜¤=`%ĄtŚnŖĆšŒk™^< „Ą$J€Ą¼Ä0q¼ŌżĻų?V’gš?6Uėżƒ”@,ź’µZüM%ė’³iōW+ėæY愗2jĮmų@ü›¦!źž@ŃĻuYÜ5˜½rWŚžŖE*_u­Xƒ’ĮE…h>(qā/’9+%v4/³ī_²1żLŪŅÄ„H ĶTŃ1ąÆcߗ¬™`³Č+méq•Č»Ła՜S-›[ݜnqmnR.§”9©5  ‚ƒ”HĄ!IyiŅ„aŠ3%FRi1”h”ĆɌ1–j6ĘĶ„°“)įjCVĪN„kę…O\„J*~ }o?¶Ų±Œ>»‚\掟ä ą½œO Ü€+EarA Ź€ž!ˆĆŻ TéxÅ1a•o0„fīÉ)Eō5šĢćč™'œßµģrfN“5yą_Ta„‘LvĀę4ĘĒ&&U@Ē—^1©ńÆLˆčHHļ>y…‚į•d Ļ=åāŁĒóČf„RÆĀ"@±…L˜””ē  äĖ:ĮwLŅ? ā žŅ‚rā ~¬ąÜ¼×ˆnFʏ`Ļΰ 3SnԊL£ńų-Ÿ^’gŅ$x[– 4±•Ėy ` ƒq”‰į8ˆ—E+Ź’Xj?oį«9\?6ljŗ%Sš˜oąČ%ϽC„VŽa­'֣йǭ±­ßl}ä¢R”+ĒpĮ‡Oū÷Õ'\’ E™+ˆ<hb}„Ü”ļ5mżó/µōÜ>&ś×žuŪ‘uy/H.O=zmē³ē=sITź j‡K€©‘a˜`Įą÷#€yˆz³’õ€ąŲ©ūŸ®ć<ūæžCą?”ĪŸmš?]³æ¹®÷Ÿ’ä?U$’ÓĶśßKø`/ćļZ ß}įĖeƒj)AÄFń½@žjY’ā:¤5ÓĄ jłNĆŲ÷“@ŖŅł”`WÅ-óxģ±ę¾wģ3Gń|ŪŹä}ĖNKomh1r¢(©/!É8č&xjķuõŠĢ$4ØP`©öøJä³:YČŖŒ›×I§ “ZqB9lB³į© H — r¤IvĀy3%rVZ䬔̙¦peB82ihˆ×ś³`* žƒŚżø—‘ģ~0NTÉģeö.ČeA€b Š3 “į,>+EŸE)Ćœƒ‰Y½P±L賤Š%L€@X=@Œā9Æ@+ų x‰½~“ų”ł*Ä.q‹€DÜsp|Ł‹Ļö½6—SĖ3)`i;Ø³;‘„LvÖ"är.ĘĒĒ”uunļüK±bU¾"PRžE±īŸ‚l?•QBĄ) éb|ū+}>Ą'D®‡ż»EÓĄā2µ†r4 °#@lśé$“ IDAT”īĢ| čO…8ˆ{Ō£Ԝ¤(DŚ€l(`hä0ölßYó5šjHƒśŽüž“ņäL‰i1\·¦€ž]§“Œ D@L ś™ŖØH[BĆqWI ŸØW `ēéXę>Ģg‹<ņę Œ»Ļ{ā»å¬ŪŌV‡¤»—µ.h£į,ėL@õ$|÷’'.}Ś“ĄnŪÅ꾗ÜóßZXƐzäö¶üedސa˜ PÆ@% G~ ĄœĒ‚ĄĒLZžUŠc©īæRĢ:ų÷ćx’Įm=ą? Ą™üO§Ķ_|żLĮ’|ÖūĻ„äæžZ’%„ƒ{5œAĘMw0ö\#pOqPšopĮ‚|sµ"š"Fń¬?P’B”IŠ\SA>9œRV<ÉŹ{  Ōtžį­„’Y™C©1–HWż^ų Ÿ4(ŽõO˜`Ódą&„må9Kąae³PŠ%XŚ`IŽ÷=C64 ”  MAiŅ”,ˆ"ĪžL ĶLį:ż Ė6ėó2ģš˜ü¬-)0 į0©ŲWä„\öŁ Ą>…Ą>kOŚÆŠ`@J|™¾ T®öö“ ­r½Ę>©@ĢDŠ]ļXūßˤ@š3žĮo“6¤”ĢDJ'Œ¤N˜ mš) !ŁŅdA ™`"Į†ō¾zĀÆ›$‹E)Ļ`&GB÷½c»*OZkRŖ@ .”ė„ŅZ!ÆóҵmŹņ”wņ†R.øe<·„’ĀŽ#Łó,“r1Š4‰ļD<˜ÜÜP¾i« (čĘGĒ‘Ļē‹/ØW»ļbłŹ<|ĢZżAŻæ÷xæL­‡(®÷ĘKøŽĄ/~:s-`MąĄŻč9xØĪWŗJŌŁ“żĶŖõé8,„ V¬µē! FQ ĄĀóŽėĀ÷p×!-ˆµB±mŸLB›lĄ)~g˜!"@ ƒ¤§(’Y[‹„48š0MĄÉƒd@š0•ĆPL@yß4͊ķŪBzI`)­2_€xI€rżš’ ¾ń6@Ō R›@›!āꀕ<¤øH€b›@ß ļś)N8Øļ‚Ļ)4Ÿõu€L£Š÷¹U]ņĻ)÷…¢”dēłO]ä4œž¹\ėÅ?>ōŹ­hāŚ{zO»óĖZXÆ •pŻ3p«9Œ‡¾Wœ†éxLÖ09ŖDL·= –‚'żZĪyL€.Dżq“„’õÖżĻ„éßj̾㒱 žėmõw\’XĢ6ųÆ%łŸn{æ©dżeģ÷2ĪŁ©ńÆDpOŽ{A/BūąßōS+ėÆCrķJYš4£łQm>1ž=ćÉÖÜg«¾B Ąīčs0ļŃ ²Ua1:_0qĀcVŽ“Äž†Nó‘ÅėSO¶­I÷%2Ā¢Ą?ż^}¼O’„Ćįҁ`]I÷?7€½u袓IzøF€ĆŽ÷gž*Yžj~v™Ųü®ŸŁ/Éķ£™}ļ1@°Ė!įjńŒ¾+YpØ6_;$5<šüąœ+ >¹ÉąXVŅiL6©D2£-³‰“‰Œk l˜ ,D†L@Ȥ–”Mnu1ļ”ŁŽ|Š=ųżßZīHNt“-(Ķé„Ā0 „„„ÕMĻc|l ̌3ĻĘśŁˆäæ¼ķ…2ž"šł'žŌd’’*Ą_žõ]ćŲņx¶ģD=|Š_|›˾(^į€g(Hži ŅŠ `׀I–Qš_C!PSŅś±¹BŪ«qŅ”žR q±›G°kū‹źŸ:ū¹bMśö·}pĶ÷ŠŹ#ąD@°\OY@E5¼¬~°ūTÕZGAN-5@PĮ€²vu”Ōć 0mćJ©Ą•H \ ąøQÕĄÄŖ›‡ĪųŚ}€\bę»n]ńė•_{Ą”M’°dd凿Ķdžm? am?ÕńģūÆ_Üūõ¢ ÅxŒ\¬W `§Ą 'ŗn6:ÄK€r%Ątü€ś”óįPK,(ę2€9ŒćAś¬›žÅĮ+€Į¦3’~»æćüOęō?š?ßõžS•üφŃ_­Ö~?d¼½q‹ś/2qÓZF_8ė/żcą? Z ӈ³*ų7JGךI9…•śvjäĒSśä*§dįŁŸÅ4¼vwią%?L«Ä„M6ˆ­­+R-ݘޚYbŽęaŠLü•ĖeßA„Į{܎.ģ3iq§JÄPżŃ,æ¤x æ7–I+%üiPš‹Ą®·¬HÖ,XxõłZ—jó€r…€>3 T ä3XØL¦¹ŠŌŠ®’É7iµhÓjÖ £‰M٬ £RLÆ’Ż1ĪH‡~“ķEcXŚQŅL;ˆŅ0ABB„ōn„`™†F4¹xć;¶”»ĖĻųV$JŅų$@É ŒHY€īūĄ¾] ?łÖĄžņæ”č÷~%Üļ @ ½(ž÷ € —% `A AÕĄ¼ z=}©8Ƭ’x¤ČtļĮ‹[žC!_ĮØ&™&ć‰[>µį“E .JõżĄ×‚˜&!jys„½¼1žXM @ČD0ĀßśŽS) ČśėĆDĄtJ¦DąąĪ±Bō\Žu³J.’ ²G~“ś—-,Ī_č:įć­#?ó(H4“¶Ÿn~īß¼hąö‘ø1`˜ț'ΰ‹Ü‘čžĻö€q É·¶G×Ķ„)ąB)Ąļn,”ĢQ̵ō’žY’@mš_)Ž&ųĄ?0ƒ6ń ›*1š,Iž§šõƕö|£…o}ÓĘź Ę5;ųĒEIć½-… ėļ:,LĆ,žįćV’ü»yįƒœÕ`:’?ܜŹ~ Õ>›ixīū]5Ą\„ `&żĘčŲfĀ'WXbŌL=éf£Ļj–M A随|AųĄæR¶æøß$ Ÿ ^Wb£ūоĢT)Ė/–¤)ō €¶YøZMõÜ2ĄOPä &G±pl‚–PÄ RZ ×ūšˆ HĶ.19™§±”ÓN§:T:Ѧf;[V›6ŒVˆr®äw"čhŗžūi˜ŚĮše@:9łnõ„Ģ BHPŃĄ¤„.,9†7üį(^c°xn3šĀ3@!ļćrBHśļ³ä;ņūŅĄ“žĖ"²0ČNw’x8¤č'±Ÿųg™}’¬Kģ£øĢž2^7š’±Z–7—ėę”u®cĄ)HJ„Ą9b@?8fHĀ_Æć?Jū¢x/¼ļĢ#;V@v¬  /;ķ5Hµiōöċ[^€RŖl¼aPßuo[ž÷BP‘=t5“Ö !ˆ…axŻuI€ąŠ`#Fe‚É(( “B3iĆdÆõŸ ļw@H°LĀ%Leį’-įB‡JY$+ HjfQOI€ ŅŚÅK”, ūTmč‚ k· ¬TP©M`¼@IįxæR›Ąp9€i”Ś j«żUtc׿ż­ć€O×.Ų¶A–ĪZė±“>õh†¶77?÷Ēoné¹}ŌŹZŽnųśŠ‘ÖkŽ®eóUęź#Ģ vžIäöžŪśG7ŽĢo{Ąō(LŒZ Ö`īė­‘õÄÖ°¤ØFLV p?@‡¶/”?1K_Ķ Žßwé’jĢé_½ķž&’!ęüQਂ’:ćh‚’łü׏śĆÆõ¬’qńe85Cųߓ꧵ābĖæ©dżŻ¼w dż v /W„±¶Ķr“ŪmžYzų/›Uķń€Ć“=˜Y Ą* Ž6*Fžpź§µåŠ1+%v6-±~ÓyRźł–%֐•ÅĖź²ŒōÕ äŖ’"č<ˆƒžpk?bI.qÄ$]Pś™™ÜX†ßõżÄ ÄĤ^vŸE$»ÆKfXR R¼ŸI³&»±©Õnl\ģ4¦»©d§NYŹ2AßYü©F®kūæõ8ņūū±Øhkž½‹"įeū Ļ|ORzŁaxĘ|VJāß¾w-m„7ŽRĄžĄóĻ]ū=0ģeüE©ĶŸ(•xņ~Æ Ś Ą Æ1Å’|{{w•ž#Ŗš÷xP`¦Šąš„»Ļ0£Dxq÷ŽĆ 8Ž (Ų‚)2ĀŖCŅ_y[e…@ųWpüŸ‹R cU3†Ē»ńü槊ˆ Ī¹tŃG/»¢ć‘Ģ<jūg„¤ō®[wY€ÖŽ|†IĄW”ś»„ ²²€zŌ@tΈĄń~§S€IĢćj€jJ€ā6Ģ  TV¹Ī¾ĀX²üÄĘ`œŚ×pĮ…Ī󬮳~ń%md®„¶ŸiŁń‘Zö}q“8Žļ 0Öy]Ŗė”Æ}\-ļ‘@ v÷hÉµČp’ł¤ūŪ?ģ[K šü‡Ž"h¢gÓÓ'Ž7%Ąt:L,õĘ,”,D=±@ĢA̦ōü{1Żŗ’ł’Ąä¦æĻąæŽsmōGÕŪ{2ł<ŚE²ż×J}C‹I|žõ‰Ä÷āé×0ųgżµiŪ»t7|ŀŸR"¦€”›PÉ=ū 'żrõŲg”ɵs Ćŗ1·å)+į½h“Äźܱ˓MSN5ĖĶ«“OtnHķOśī’•€’d Ø ü™R”÷¢ƒ~‰Ø¼?żŚ7ē 0Vk ~}搞$ŸBRżš»‚¤ō€¾ā’ģ_+A䯌e”d®¹e‘ŻÜøÜmĢ,uSÖ2L,e!*w|8Ī‚•×§$@SŠėkŪEĻĻįČ½ŪŠœÖXÜ©ü˜•†!|@zRze$ HĆĄÆĪāęOĘ}·K12¼°ÅĄöņyØėŠ  DxD§m €Ķåq’ĻĒPš%ODŃĢ~šŸ¦Ų2łĖšō@ųćĻ„¹Ą^F>D03“b8¶ ( C¤‘0½Ēā"Y~ŲOü#2n®Ćq 8Ō÷"&r”Zµ.żµ’xŻ÷‹Br’āŖŠžE"Ą'@IpEĄSõ˜” “) ’8jX©$@hā0čÆTŪ‰žW@iĢńFt]=zW¦~ēŅö§ßŗ#£?³xš„ßĘ2łrhū™Ī¹aѾ/ŽNÄęķ?ėē›ĘŪ^u„¹¬‡Bļæµłāw2]3½›ī81ß|łWX˜›Œ|×Ozxåwƒ}+‘ūĻøÅ1Śž/±ī]ßżŽ3žW~¦ķėķ š»J,³ Ą,ĒT¤’aąx¬ūŸ Óæ2Ē’Y4żkˆ+“ž×’@‰˜)ų&oõ7oą?ŠóÅVUjó7fsYļ?£æ²ˆ)L 䞏ōĘ-Z}™ė$)žģr3ń0…¬æ7øjÖæxžž9*W£œęDzc×¼ø.’vLö™ĪĆ+˜¼$vźŃĻšÆŽ_ŠÖ=Öߗt… Q«AloZl=¾ųÄŌÖ¦%֐‘*ühµ‘ē­ŚœšÆś5QŽ•Ćŵ%Š/A rĄ"Ņ~ĻżĀī.1±ņæ’łÖŽ÷:ŗ>ą'‚ŠšE-ĄŸknčČ·¶®r›3+ŻTj…N˜‹ŁĖ*µ`„ syØll;ж .øP¶ .ŲŠŽćŻŗ˜×ŽV vl@kh[yi»FÆv /–īå¹Ó SzFĖD¾ßĮĄsc°”‹„@ržĀĖö !2@HBzŪÆ¼~ o}_ÕyĢ&“6qč Ąöē ūvs‰ /Ó„š2Ÿ$ģ¾ó•Aø—$’‘šŽÜÅm„§2F x ?PJd€š½®Žr9Ą °/p] ×ÖŚ„i6"ad<Ć{ö"*€Ø¤æšéßü‚fĘąč!ōķÖ.pŪ¢ÄŻļłÄśĻ‘ Né"~wKH¾V­8ŲFՈ€Ø„æO˜P1•Ād@Ö¶ė"TĪa)Į",ĮÆį 0 ņŸ„zHǟo2 ļ¼;NĻ-ŗźĒζ¦m’|SćŽ?? nۄɁ³æ~ƒ›\ł1†h%moißśįw}¹ČK$@Ļ+·¼&ßpŚ— ”*{碽ŸżÓŽ=ķ1I pZ÷ŁĪŃŹŸˆĢ¶go~é’ŽŪŠęE µD<{śöO+Łō>÷%ĒžøįäĪy&7`>M¦Ą­±m $ĄüÅ0‹1]šĢNö®ZžĶUŻ’Quü÷Į?J7uĄ#¦ ž"ŖŸ-šŸˆŻõgžgĆé¾źżgŪč@š<š˜ü’’{œĀ%»•žäĪKXt¶Lģ ļ’•²ž€žYUhč?~”™“0ˆ5SvT[#ūĪū2#|d¹;¹Ø‡į•ō”¬Ÿś“"ų§'čErDąäŸ¦“©DN&é`c‹łTūŗäęöU‰žt³Ģ "ÖĢnXĢ_ų("ś2ąOnIĀżÕ2żŽµ²7ž•$&&!Ó>i‡„f‘łG沬äX{ėj»”i•›I¬TÉä 6Ä›ÕĶ ”†;‘ƒĪfįŒM@OäąNd”'ņŠłćܶ/]üKž©ŃŠHä+Õ(“©„ö~\ v’«*‘S- šE"  P©$`Ŗę€E€_£CĄŃ"z/~āU…ę3’™A)Įłß2CC$N‰FŪĻ.~ń£74ķśĀ5Ü~ńɵ’€ »ūÖ5/’J-SĄ®³ßĀVĖEĶ}w’é²g_»;<ĪīøĄÜ}ŚŻŸ×2żz@ķoģæė vżŸČ˜Z0= ^SĄŁPµI€‹gA,ó Ą,Ęļ¢ō’wÖńߏß5š?mžfĆé¶$’s™õ€¤0IKV~ęY˜EÉś·Āū”~»z^k„߽Ґ#µ$’IæŽ?’õJą‘ׁ\c}n¦o‡½ęžÕc· uŖ55K Ą ¼Ņ€‰ŚŠAš>mš>@už:9ĀĘ;Sœ¶i‰#ÉFł|óņÄSKÖ&÷4¶”$5ąĻ„¢įkP%Š,©Rv¾8§RB@z2~ śYx$ą(J”œśµfdł@Z°P#悽eįX‰ōDgŪŚ|cć:Ր^­ÖRLV^2ĆP¹ܑ ø#cpGĘ”FĒįŽCMä r“\ŗQä¦ĀöŚ/4Õܹü8Žbå²żcū]“¤ĪVĻa®‚„€4LæķŸ'żJā÷_ū¶!¼ž¦Ź €š3›! DhmąH°{›‹C!~}WĻ>™±oļ"" Ÿ¼ē™KĖ.*J˦eā¼×œ Æ:†™Dρ><łĄÓŲņčfø¶% į“(ĶtŹ Š³3C¹Ž­ ]BŅhF*ŁCe@.’k…Ņ.ś†öbp¤ †4¾juęænx窟I遌HĶæ’u+tLŖjó"@u š€æ·„޲€jj”ŻįP$B$P®0]WGچKŖųLŖ˜Ä hXąh“Ł5ļj]÷ŃĖ“ŃŌ g¢Ÿ‹ĪŅVė[Ąös‹¶żÉ {æ4b„ŽeYąķķ~“›ZūO`v͉m7/xÓ]@É |¬ÉŚŽu¼+Óõ’/~C‹Ä%¤ē;śoæ¾yĒzg­3Ą˜õł$ĄB)ĄBT‹`–ā÷©åß±`ś7›ą(Æū_’„9é’Ł®÷ŸĖ¬æÖ dĀōĻŪ“‰PŪ?`ĶņߝĀße™_™"zņ&3ó§iĖTĮžÅ¬?JfAÖŒY’šq„fϐż½NsĻ®Āɏœ4zóX»^TėaE‚į]uĆkh£œšžģ¼CźŖó‡“ 'ż<řįƒ†i¹£y±łŌ’uÉķéNkČj0]ņ/¤k’ĄĄO"ś"š—įń Š·ģ Üū?®Gų _)€„«Y@Źf „¤ż¬D±U R.I™VjlqdžBSćz7^£ĘāIQó4‚™įŽŒĮ;4 {xjhĪč8Ų  AZO”WS}¢Ł’nž1²WĮr4–“ÖßgS Ļń?šż—Āł­’¼€ ,@āŗ‡šŚ·•+é?³ DH€ŹĖ٬ā=öĖūv*üĻ·‡Ąay?āR’’óæ÷Üł÷üķš98ń%kp՛/Es{;ˆL0=æ22‘+ąé‡‹ĒłF‡üóJ¼$ücqéuņi7nĄ ĒVpņ „’mHZĶšŖw*xĢųčEO’øŹnéHÜwå +n_uBf(eģƒ(!5@5" ^5€ @š¤ēZ PV`»¬E ü$ĄLKā¾¶mĮ’ńDž1`’åĻ^å6žöe°ż|Ė֏¼¹aׇO€€8pɳWOū˜ŻōŲ–wvžęŒ_…ē pdĆß·¬ü“ļ±0O'.<ܹū/o\vųGŁm8¦€ ­æb˜…8ŚŅ’¾­x.“óXo%±ėO’_}SŌ{.Į?P=ū“’§žŹu’æą’x«÷§)żåY­A)#ŠP„ŅūY§æŸĻŽę0ÆmņļH6}*eż‹Ą()üĒ®}Vžś`¼oh“;ķµO{ź¤ń· /U‹k>¾ZĮš$ō ļYšaöÕĢ6ܝāĢ pÉ ‘DRģiXd>Ó¾*¹µ}MŖĻJĖ p5ąļr/$¼L}d€Ń–!ąļ2HB" śµbį²'ļ÷KG”ź÷H;,”O¤YyY”,?ķ«²­Ķ'Ł™ *™X1óg+öŲs98żĆ°ū‡ąōƁ32(’®Ś»ÓåÕĘĢ-ųg&z G–“ u–”Ģ4„ļšĪö„@°žDÉšŗ›śqķ›ćEe’lŌ±ģZ›8¢ńž7īĮ`ƇNøhåĻÅ,z“=™¾·¦ü?°hq ®xӅX·i­ļ-`z™€°|Ór$,hmąÅ§žĀc÷ž {¶o3C ¤ (žČ?§ąŃ˜|­A°Ī?/ķ*Ų¶‚[ŠHMȤZ‘“0_Ž’¶“EO’Œū&ɔ±ćģ‹Ūæ|Ī%Eć7d³C{ĄEQŒ~m}=D@M5€¦Š@DŲŖšĆj€Čœ15@±L” ąŸg‰”Ø@€™ń暶/@Čšx#ŗ®’&¤¹ØyėGŽŌ°ė‹ĆĮø€xŁ÷׏-yć] J''¶¾kŻC§Ü ”<Šćė †×|{åČŅ~’kIeļXżākß×2|oä!Ī 0W¦€³A\¼P p\Ä0 q4„’ß½Öķ·āĢ8—Ļ2ć„DI&ńń‡²ųi0n®„’G@7^‹Ū:q௾…½Įöł0ż«üĻĄńüW Ģ Ž%’… Ū-Ó޼•³žZ—›õmuŻ„æ“s·k e•4>ū:jøs²¬æ;žõ€°ŠYøŠ…3”­į}vgß÷Ō-«Ē_x»āhs§ÖŻ›ää„p„A£fBģoģ0žm]•ŽŚ¶2q8Ż,óLåƚ™Ā„€Øš“!©ōiA)`Į.“ĖŖØ"šü$)fŅQ ō+WÉ |:Õ2ŗxŃ&»©a£›NÆeA³Ōpdz°{ąō Ć„Ż? •ĶÕåÕ7ФcŹ·OüOł8ŃĮöctƋ–££e.4UN‰¼ŚF©Žß÷(*‚€¾ ąŽŁ‡«Ž%*ūš2&!&Ęų«[ 8°» ć£ć°¬£>”;’ū* tÕk™Ī{ĶixågĮ0“Y¾×€ĄōĖ ,šīƒL Z8ˆGł+l~čŲvĮ3ōŽŽĄ|°Ģ7Ą7'd‚¼p0p .ģ¼ (™TӐŅ,{żg#4k ļGßš~0k ®?¹ń?®|óŖū„S€Ä-ŹĘ[^v®ųŹ}łšÕhxģ^ÜāŚųø”ųĻėŽ‹’õĖ«’éHÜõ]œšėŲ1Sš’ƒGāó‹Ū”ƒ«›Zńž/܏ŸÓ«ū?Ūż¹(ćüĻW›æJąß©dJx%’&2MŲMbŁsS³¦ŃM†ģ‰ƒ’ Ž_ ƒ~UȾģ9UųGųL‘ų“ĖĢ¦ē ą„’˳žĮžÅ1ˆfż@ˆ5“ö²ÉL㣔>XXܷߎø»!wŁŽ3ģS”ÅsZw^-Św8ᑤ– Ž0hÄJˆż Öó-ĖŪŚV'{RiY H:pŻ€æDģ{S‘’ųē}•@ķךīkĒĻöKo^öAæeśĄÕ$„‹h¦ß‚”ki^:ÖŁ¶©ŠŲøÉM&Va~Łqa÷y}C(ōōĮõĶ¢ėåÕ7są?4¦('WĄČ•g¤ōÜ“õ›,ĄüyLæ  € ŗHæ,@J¼é=GpłėJ@ żĒ²žq€ī® īžįb€€#‡ś°oēAōt](ĄuŻ¢KŌÅåO[‰?øį\““·"Čī3’Ā`FĖ@H!ž•@?ä\.®$-HĖŚ Ÿ˜É%.©|#?E®† ĶĀՆŠRšcK˜mm>ĶnhŲČĀw‰žAč\łž>ŗ{Qčéƒ30\”O—EnŖnÆ“az ¼ŚöŚ“Šć-zw†vŗČ1·2ŚkÕpĶQ‰P¶?š(/ŅžRH!ń–÷Ę«® *óµ—K„BĖ[·4ć±ū[=µ ”˜Ėb’΃ؽm&FĒį8“Ö>ą»uQ®xćYXwŹ Ų'š‹ōß’#_Ą0!ØžIųuśTŗ^|z3¼ó.lßņlQ”%™ņ’GU^÷b.­ƒ÷6PJĆιpmF:ъ†t;’ÖōŚ;øŹĘ‘Į]; hh2Ÿ¹ąÕK¾zś+ŚĀU čUžPN1"Ą"ōø?ĄdD@U5@h\5"@Ų%’€° BŌRTmH¬µS‘°āĻ,Ģ i€Ź;æ×$Ą”kķ_3™’äU‹ž¾n[ą 0`ē+·]]Hų%"2ŒüĮO,jÕ·LœpŹĻ©`Į`”ąhÅ0ƒ˜kéæx˜¶|ą_š”ėn‰Öōæv^šĆŚÅ)é&üĒ}ƒx"¾’;ĻGėsāgčŅ×āŹū1ʂmēuą‚‘üo"…æųIEŌTėžśŒO¼ }«6āüæł>¶ǘéß1ž°ž½›zĄ’lfż00M³(łæĆÕ×vkż œ"śm8hKsĢg3`JBĻiĀüŪK ĻsˆP‹æÆę?:u­Śõ–Dė-°ņa¹=Y’ų{ėĖĮæķÆ#—EvB%Fŗöįżöźģ€{ņįēō®Sģ•zĪlՌaÉs&/~Įb”įHIYiPŸ™1ö6v˜Ū[–%öf–Z iYŠ8bś§J&|@ÉČ/ü]9”læ’,ŠĻ‰ĆĀŖX: ×ńŚņ…A?H;,5 ”!¬įåKOĪ67æÄiHoœ©“_Mäļīõwœ”‘Ų·c•ä<ƒ’ŚSVŸh&ąæ’ö8#³¾ M™F`( ‘BSZ”R)ó\„īMæåŸŸż’c„A+@!%ŽśžCøäJ/3^5ÓČžė${  Ū¶4x€$R@ Ķ@÷žnģŚŗŻū»aŪē^v"Īæü4HĆ e÷Ć`擎a‚„åo·@‘ģ? æ6æ !ŠŪӍ‡ļś_<|Ļ=prÅø’:łd@8óųQ„(½¼plUV"`Čų·}y03G”wh“va%D÷)g“~żÕÆ[ž$ °ą00ƟH ¼,š‰€:H€`l“{·Ń²€Ŗ$€öĘT#_!0II@.tģ`^©būĄ`ŽJ%u“ ¬”S“€mĆ |f‘°*dīgƒ8ćß×äV½ó!”óŸpwźŗāÜuA)Ą®‹¾£Xńfv­Āö÷-{źäŸĒÄ:Oˆ8ŽüJ~·c˜ḟō’ŗ6lĀDŲ|Ńšöæśgs² æ[ą.š„ĄŻ»x_|Ī@ļ»ĶߍŸC`üŸ¾‹+/c‰HxY7rųŌoÄĘ?’F§Óņļļ@ēę_cĻŽĪW½É;æšu’GŁńæžvO•e€Ąmš?§’cAņoųāM›•śŖ&N5Ģ?»P[É’NVķr7k¾ ½RŸ{CŖń'Ā€» ­™†›’„’1~i#ÉŽeu|ZāpMæUŹśkÓØ ü2š_|®\NV[…ĆNÓȵl¤×ِUėŚ =':£+”9[…©!EŪLnßn²©įQ$ ›Iѓj4öf:ĢŻĶˬCķꈑ–Žš/lŲߥ?¢Ūaįj/kļoL¾jĄ9ä»ųWČö—źś rI ķ²ŠJHm$¬Įe§ęZš_ādŅ=„4½`ĒE¾»¹ƒ‡‘?xŲüØ&“Ÿ&ųÆŗ±”a=ÖĮ’Č>‡5+AMFŃ ¾Ńj@‹‘…!4ÕŽ”õ rü÷kü}¹æĀėČžcdĄ7Ä—÷!=Ł=Y’Ŗ]¼±÷üø‡»“E€ !Š€Ü#FGĘa˜C8’5«Ąč?<\NƒČšæÆųȄ(ńrĖsē'*‚}ƙeč¾!BĄ»%!Ēo~ń Ü’Ó;Š×{ÄP ų£L PķÜÕŚė"`ē\˜¢v‰@¾0†īžķČF!åW¬I’šźėW’,Eu¢0‰%EŪėʼn€ąŻ5©ØZĄäj€2ĄG¬kzó”ū% XWō)˜& °żČ¦Ęīńm/_śżż ņŽŲÉHŪvöØÕ!ą˜#B Üń“—ę›ĻśO*ōß¶üīEļ Ō&^Ö÷Qev|ŒĄ#ÉŃ'ޱö±s¬=`qŽy ަĄB)Ąń Ą4¢ųfžżæ?4ę­ė°¬g/ī0ŗīt¼īö§1“ü»é“½š~Čs3ĶxĶĆx0Ų/ģść…hźal¶LüĖęž(™ž]cąGŅÄc?Ķį³S‘žæė¬8õ _óndßq:¶$ÓųŹW~ƒ/…Į’Īg`üōkX}ź&ō½ę}õĮ ¤’ĒB»æß5š?Õ6Óvś?†$’)LśZ>’÷Yš+× ńēW‰‡āõžBƒ~ā䮌÷#Ģ0—’¼żFŁų_ųwüćōh·łG…Iƒ»¹ą/é«čµŚtĄ“g’ē ü×s¬ ą?7 1“Ó…Ł–„X’‚4›› µ†/Ą±$¤…Žt+ĪšaH=8–›YP¹Ń_ąų/BĄ%U€0šŽīĒł—õOģĖA¾×°²'Ą掉|Ī#„<B ¤ŅKWI,_m"ÓdEŹ²ć ƒż̃Ł34 ×ü£hč‚DŃųÆ”ķŽÆHųc<µ°m˳ųՏ~‚->*@$ó””½)Ŗ@©DĄ)0R‰f4¦Ū‘J4Ai}C{18Ņsk[ā”K®YöŸ64ōˆŹż(#\oT=D@īkVŠŖÆk‡øæ\l8C5@¼$ (÷Q+Ķ’xꟿąØäŚ—/žįū.Xõ €*ę€j V‡€c™øčŽ3EÆś©“æ¹ōŪ? ”:Ō"܆²ūœē>£–·ƒÕĮ¦Į{޶ņ©«¶cĘ3@”ćbkhŃ_ž¬7œ¢Ń|*ĖäśōĄ/žlõ–kwÓ3,ÄJ fĖąx-ØE $Ątb˜FĢ·ė’ū_ęķOāG­Z…«“]Į¶O½ ©»æ‡’d…KŪpÅ}ųm„–g6ął üėĒ>‹Õ—~¬ō“ōїaɶgpĻ;>„s>ł/ȅ÷©•łæ`-¾!Ę’ż |čO®Ä+įg¦‰; Ļø.Np]¼œNu ’ż²?ĄĒÆū "Dęl™žMĒńŖąˆi¹°¹Ż1ž+eżéƒ’ł4ū›ŌåæJÖ_ Į(žSžą łÜ=ōūŒŌU–eόäF™¼õJ«żįɲžĮć ę!Ė€æw>L28–ÄD$4S!ÆĶ‘^·q¬ßéČ øĖsć¼ĀÉ©e®ĶķZqĖD“Źä›t"×ÄĀI³Š&C ”įāÄ(!9*8=$““Iƒ ‘CyaŠØ4hĄĢGR²+Õjö4všż™6cĢJ’tžk»hŹĒ¤ĄĀ/}~ĘßžA¶Ÿ™‰ȱY²Ÿķ'VBH»,\%äX[Ē KYhlxÉtkśY)ä{ś‘ŪwŁ]”&²5ĖĮņ‚’šc¦rœ¹’ŖĄčŻā–Dbm M!ē?Ʊ8ȎL+ZĢ ģĆPże—žSRöæ¼ÖæčųļKšeq9Ų&ń‡ڇW\8Tö”ŌčP(L|’«ą—%€iJ,ZNX¹ZbńrÓk¾^ƒ`PJbd(‘Į,ņyå™żEL-„Œ¾ęƄ@ģ{·(f’•ī—ąHW7~õӟāĮ;ļB>—*Uß$69¶ƒ‰ń ä³yHa¢)ӉD¢}ƒ{ą*ɔÜ÷²s;¾vī%/„÷3\‰ÓŃM1"`²²†ˆö ō ŌEĄWM 0—%Z;ģ %¾śä×?3į¶\jÉĀĪ6üå{–4n<ą.’ÄKź!P* 8š$€Tą<źk˜k=Ūģæš±'@ģ“<üʋ~2Ō&œ%—&vś³/i#s%©ü“{’žĀķ³sĖžp“N,?M› §j$Nean€wÉ ÖżBMܽńń EīˆęΰĮ#äėy¬ś\¼P pĢÅ0Ř®ńßL]’?s#æü¾”5ĪkéĄÕæģEń‡ņĪ’€üļĘæ*…ė3Ķøž‰ ˆ{~ł‘ėŃŪ¾—}ė ¶„·½kNū΃x~EčĖ VŻ?Üx-ÖģzæinÅ{?īüŌ›pR÷ü‘VX#$˜I<ÕŁŠĶoś8vüųv¬ŚżžŒĘė?«_zIš•<=é’\:žOü;įģ’ųŸ1ųŸMÉ@ąß(®÷ĄæÖ /ڹūŠKŗ±ų1T.D 0ą™żĄ:{ńm’| „žāՔyBX†?—7ęwäüUžV šĶz…Ѱ;Ų.ŅĄt²ž xĄß[WŖ§ęŃYm8yms:;č¶N »¹1ÕéęōbĒÖķls#3’Ģœd&¦&H‚÷k*Š"*‰œ4n˜bČĢȾT“ģMµżÉVc8ŻbŒ›iY!ą/8zNÅ,“f,=ĄO^[>—±ß’?{×'IU­æsļ­“ggsĪ  HN>APŸ(Q$ˆd$=$)¢<•}*IQQ AQVrXv aóĪī&wØŗ÷ž÷GUuW÷tĻōlbÕ9ü–鮺u«Ŗ§§ū~ßłĪw4±$Mģ;÷[^ķ×l„µ,ŲBdµƒŚFüxŗ”voė8M½½5Ź…īLł€y3²k>ė–čų/sĄö’‘1Ūü!ŲĪõ`4œRV„Ŗš*Äā±žAJ’]¢] ĻõP«BSUdŖ© Ķ`·%Öū}_QĆæŠPJ™ó(4’ó[†ÄĄW/]нč(ģūŃ ģ`}KOż±‚„”ØodŒ›"0n²‚—}ĪQ<C!2čhM£»+Øüė*0ž ³łTų<$ ŹØč¹¹¹B€ŸNućÕæžĻüž!4ÆXB_@žĀl‘NeŠŻÕ ķ•“ČēšZēŻ‰“«’zšQ#_Włę”>X/”‡l "`««"ćŻØĒ@xĶ5@_$ą—„ó—"€ž•Üżę=—·f‡}A’·ś3SšÕ†¼°1!‰»Sž—rÆ$1” ×'¶6 ŠW‹Ą­I¬=j驺jĀw„ķ~fčKĒÆ6ż=”&ŚĒ}­vż®?¾eb§„×õ–‰Ż!œÉ?ą˜]^(lvŪ®*»n~uĒ3ó/¾źĆ¾L;Ä=pX‰ģŗõ„—[üG6ļČą?wÜf€ŲøŠC¶_Ŗ–ˆÅcØŖ©†æā®ĻeŽĆŚw)ż:xćøYĀ%ėQ-tµ¬‚×Ѳ™Q:¢žØé_ćé÷‹|‰@šļ¬K—aĘ~•ƒņ^:0;ų`As^©ĮŲIŒI;3ź›zW O‚!’Ų‰®®,ŗ;3p3^ɶϣْŠ0ĢžĻ£„‰žZl-ęĶ~ Ļ>üGĢ}é„B€¢š<©®4Ņ©tAARQŪŠÉYū4äŁISŖ×KIÖ>āŽ| å"Š^n/˜XĘĖūōK ’õ“Ź«LŲāÆųśKØz*- ųÅ[·Ÿ³±{왂LėAćļ?kæį­ŒśTJD}ž]H€ęc×_oĮ_…uēÅ7½p퐗Ž|($Öļró°ö‰ßü “3Ö[Hœ]@¬7’q7ŚŲąó˜DM¼ćõG¾uźėUī" ų„ŃØ¤3Ą¶">J?€² ų> *Œ ±½„’pķg‘|łq< ^:x„ Fƒ/PÉ$N{!…G±{HVćŒL ·į•ŚZÜņJ;ž;õ4Ķ}wkœææ-’BšĘW?ŽŸXƒqßżŽÆ j’ Ą?«ū’Ö±~·o?‰ z“ž’K9ž÷ž<šŸž·u½¶č¼”äß/šA{!9˵G @ļÄ’ŽUJįŽL×µ–'Õ͟“Ég TŽ„æü‡õžæ°­7t²94Iōö×ŌŠĖĀžŠ1‘WÜķ¶\ŪÉęŠ*ˆ÷ĪØye(·–‹‚­dīyĄŸ@P2ō#’ąY&ė—ę’Ō,²+Éc„S6–ńĻtŪ¤qmœ=v¬ę˜f0ˆŲ˜$“ˆ ׉KW%e&^%²2)<įv$Y ČÜyąļ!hŪ1ö+Øļ"”ł³ēgūŁ‚‚ö}Ö°ģlhÕ1bųŁŗš=Xˆdoļ‡RįmjG÷’UH-Ywc€Ķå[ü—ŻłÆćųß½Ö }…3, чT µ µĮž4üc‚„¬I|µš> @žėBg]TĖušŚŪе~%lfĄåUD~ķ?…Ž’¹Ÿ)«łAÖ?ŗOä”_»|)vŪ»;'½GEY’2D¤ŗbˆ%¤Ÿ„gĒ7ģē½ ž|ŚóźźF:՝{=¢`æ¤ń_nL“l göæ\¬]±Ļ>ü0^zśdR)¾į_&AŖ+ ĻóJW]£O˜V’ŌAGŒ|#īĶĀ7ĆSD @’Ķ”ō^ˆ€ŽŌdE¬`— Ź‘@鲀P T¦œ»¦~Øśķ ­=<ųī÷?·ŗc—+ˆL÷>#ž|ī'Ęܳ(Ŗ.|)/gtW©9`ŚĖuų(I/˜«/  õš÷>cjwŗ’Ü–G>=źĒį8Ēo˜q’Ä®į'’–IŽ!ÆóS^>ą'żž× `Ķswėöų ™®Ē&ĻŖ=;VŌ²p{™ž+ū6P °ĆÄPa|TŅ’O:øĘ{Ņy8āŹŪżĻÄ3Dć¼×pƒ18Ū‰ćŅW2øš]’`æ:|Ŗ³æ ‰°@\*üłÓēㆳ#užż’‡OĮÕĘ éĄ#qĖ™ßCī³č‘;QżčݘÆĀż?|ĀųÅŁ’T'hÕ"Ø;.ċUuøū;ą¾ķaś÷Q“ūė ü…€ʆŪĄæ["ł×Ā €ü,kw_ ķµåVœć$æ ųąž–Ķģżžńf:ĄņsėNOh²”ä_ØÅAõļSļŃąįEüÖ/8 Ļ؈_“±Iü*Ó23 ž<ˆŌS_MŽ˜Yœõ×@Yš/¬üU‰1ւ¢eep‡Ą\X¦š8‚Ųif ĆĀŗ8€x|aR\²‘ž‚Ū!Ź™I‘Kօ óL~c謀q}?{,\ĆRhį;ł{,µpœÖį#?Ö=øi]Ÿ„~~O™ī”śß_‰ĢŚ 82ҳ¼lōŽēūž{=W9ŗ › ŹĖŁ6ąßķdl˜ļAV;Pc«AB ®”ĪĻ82uCH‚’"0Ą‹AˆZQ AA-~¤ī\ĘxÖ3Ȧ³ ĆØwŖ‡Būš%Č“®lOÆøłSXļvˆzH™“ż“”y‚@ݤĹW,ĒōŻ=Ay_"Ę}åŪV6GÆó•˜#Ģ 7“A&嚎Œ’@”Ėž‡Ņ•Ķž—Šl:ƒsęąžŪfbé‚ÅHw§amO¢FJķco|vźN«H€‰ˆII–ˆĮž½ÄÄDąJˆ€’j G„Ē%I PAÉĄV( Šŗ„‰ŸĶ•”Ų"ąįłWŗ`ż~·±™>ģ—;å¶×Ć9­õró$€£I˜Ö‚·PėOķŽ=ųØūA¢Iø›ī÷·17U‰TīœóŽŹ>›‘\’Ų‘ĆfvAŲ0:G%$Ąæ²Ą@)ĄæO Ę¶Ģž?ßĖļįp'e ϼšńĮu4Jāæ3Ü©~śŲ\•ü4ū“®Ē#ŅĮļæõS\±ĻŁ…†ŗż•ž:·yN'B[¢ ’{įšó±Sż9æ{vm^gFÅ17żļƒ’ĒīDĆkį¶hŗäN=iTIs_[`śDL’¶v»æ-’€äĄ’Ö©÷’›µū.ÖöVd艝”śÓ>B}uś÷\–÷čī_øąÉ愶ĮI¢ęq 'ų·¤”ŹÕś?ēuģż®M_‚ZæšvJɜ^Ł€…° EĀņdfćO sĆŖīāżUż¢rYĄķѬ~qÖ?üƒż@>ė/"ŸM",I²ąXK^E IDATf.˜/:æuDī1{ Ø›v_Ąß:8æļuHżį;ųk6…õż–…`’z\—¤`#Y³HU×6¶µjPż,DŃ2Ŗ÷°Y©åĶč~%2+ÖJ·üēvmSšļļ(M4līyś’ż>’Äj eŽ &B|R= šŗ8‘!² ‘‚”ä}IAĘYˆ„ØQu®$ GH_– ^ʅõ -PK"Ó¶k—A§ZX’Ō󗬾G[ż ‘üē żĒē]µÓ>–ī”—éP)°³üØhŽ^½üņŒ6Čf3š²nšVȃūb°5ž+—ż·Ę`ķŹUX¾h!–.\„å až[sŃŃÖ7[ŗ­c")WŽ[ūĀŽū ~%Qļd“•Š )Ė’}’(ągłūV”"Ź-öĖ©€|½½’øo GY@_j™»¬A ƒ{žæB< \Ē“+æ±ēŪkŸÉ,ääĘ7¾uüōŸĖ«üŸa«ĄĶ!¢ę€[BDA}_$@;zĘÖ"Āö€į¾zń ·é€{ŖQ™u·MxvÄr猁—ōÖaŻ53~G¦ūÉq­9+Ü× ąh0ŗ€JH€Uū,>ĢUcϚ<’ŲÓk»žs·G)Š“荾J€Šb€Ø > éG*Ü óšĘ…„öŽ„½:6į/Rā‰K¾‡óĪø9żŻć0„ežóŽ9§œRį¾žJ’ļŗUæž>žWž©5öEmż \sóĆx.’4ĪΤ𵒾‡ķ4ŅäĻqķ±8®c#~&ž¹’ 8ūŲÓŠłQ˜žmėv’ńą+˜żQ?ėżKIž€ŒŖ‡“žƒeŌM–ā[ĒČų?|柭ŒR ĻėԌ9nv¦RŸŽÕœ: ‰@yšžćīģ†owĀ0žā’÷…ÄąĒ XHŃZ’ŻöémFžÆx“ļÕQü Ėˆ@ī_œõ/eųY…|&_D®/’„ˆfĪÕķ3rcu!AŠ+š`!rĄ?øŃšgöż¬G‚Ųϰ“ Ł:tō“®įCńŖāÓś,Z/¼¤—7£kĮ2¤W4÷h× `ŗžƒņ~d’’ŻĄdLäźšį;tš}š#$Ŗ’HVå+3|`ķBŹN€KlJI€‚11@Ø H™«Ewz!¬±Čf]Č,#ĘŠķk– Żŗ"Øń—*T䯿sf9’ Bū¤P8ļ–aŹĪ™žƒņ^:`+Ģ›ŸÆ¤åf`f­įŗ.¬1=Śž’Q>ūß¶q#–-\„å bŁ¢ÅX<÷twuĄh‹Tw éT¦\¶?ŪŠ”˜3y§ĘĘNŖ^„Y²¬Č*KŠ8$„°Vq戀Čm½©ˆ"ü0ŠŌåH w5€,2+ÜZ%Q@ ä@{”ˆ–<æüK“^Z{Ņ–eĶØŗÅ?:sʕiķĮ+8o/$€ē”;ų—lÄĀ€ĆrŽRBŠīŗœx”ļČ$€ŒŒ‰’9’ųlÕN3‰ˆd×ūWżēŌß…¦€KŽM?bebŸŚõ=¦iöQļDē­=Ƨ˜čĖąÆ9ÕÄGÜ @‘éžĶŒ7j.¶Ą@)Ąf }ÄęJ’-Ļž/čŅŅŻŽ'†`æØó4ŽŠżŪÖćI’xéØĻįä=„®pßöĘšłoįĻp÷<ĒūŸŲŌ_šæ±Ōꀾõߘ¶b!ž6r ŽkŪ„ŻÓŻø^HĢ5לy-Ž’öéų­XūĆGpY˜ż€Ÿ_†IgżKv“ŗ’šß𿭜žū’}ÕūG±ū™UĘ^]Gōä©Nā<÷’į1wgŚ®ķ°|T’čķsÄ K²V„Rūžą_EƘ®©/øķwÄA‹æ‘ń aó`čYėŻn·–sę~Ŗ9P*ė_ üžY’ž üĖą5 MüĀQ~ķ, ¶‚śü‰…õšļ’”- 2Ž6fģŒĪĮM‡Ł˜3¼ųz{ Ƶ] –¢kį2˜TŗüĄķž#›·)ųÆč<½OBż<’ŠҶD#µŽ"6ŖTÆ µõµ¹QyYæ©:!…4C%€ 2Ģžs’'!`O"@čb/üō4„ ø&낳I”ąµ·¢{ĆjXÆ‚Dž*×īĻ—ż« Ģ@A å’Ź'Īæf9&NĖöjŌW Ź{ömŲ!€ ē؜`k”µ†5 ¼ń_&“Ęš„+°|ŃB,~÷=,š3ķ­­3˜`‹lÖCŖ+…l¦t»Ęx\n2¼ś)Ó½QS„Ņ,Ł*H#¤IX›'¤UĀZRÄdĮR #„5•&¶#jĄ_č‡D@oj(El‘@@Ļrƒ óīż62G €X÷( ˆ’žµł×b#$ƒÄo­;fä³Kθ˰lVµāēgĻøųēį—[9ŚC)_€Ø9ą–®ėBJšGMTb čišĘcWžć%G_šhŸ}īąē?žw ŠpÕĮÆ”iÜē!aRĻģüןÓäTa“•š¢ńćjĮīĻŻjUķ) Ns+HŒRīś«w{kčŻ@! -šćß½ 7 ¶$€>b{g’o9ń«ļ÷?kƒ}ū(ü†-¦īy(޼ū…Ÿ…aŻ’žÕųj6…;ˆšęnūįųß¾ģ’łÆč–/ īÅ?įAXŒš0 Ē=³+¢s”’ŸŚc?¶'Z/¹ ]QćæsÄéén\ņ©ÓpPfä ÅÕ^gĘćøkŹ Ü3ļ5<Ū8 —]ńk<³7šlfŻ’vrüOGAoą?2l›€ ņV„€©±ĄÖ’[ÅģÆÉ)š/…CæŹf.og>a<‰Žwā+’‰H€u™>d[ó;ÓyLņ÷'«Ę»}Ą|6_’¢õž33k~é2>%9ō¤įĻ‘n¼°WŒö@Oš_õē &ĻŹż}°ž’„€?’倎(žłZYų€fæÓžĢ>Ųļ ųk$[™źŚĘ£Gœ©ÆŻ—…¬B…a]]‹—£{ž2d[6TbżA’nąæ÷)ĖO“%ą?µŽ¢m‰†”€‡”uõ¾dœRŠH¶= ):üm2$|_@  Q̃®ĶŌ…e”Æ[AĘŚX‹l: ĪBjß43³q ¼īÄ Ą @*•ė Öż į—äK… ®]ޱ“Ü¢ūRRž~ūČØhŽóĢŃļę¹0ÖāĆÕ«±hĪŪXųĪŪX¹š}4Æ\PCΈ Ą‹L&‹tw :ĶGĖjˆ`jkćK†Ŗ}{ōŲŗ„¤Č(°††ˆ­d ŲH%¬Š „µB‘UED€`²B’•Ņ&bU)P¤®‰YoŽˆģ^Ōe[V (EyR‚X3t©ó÷, I€e­»5üqńUwz&>¦!±īŃ ö<÷Öb_ "`«Č· Ü$@)? ' °¹< īŚc樆yƎŽ I€åG§’Č2±_uĖ3Ÿ?瘹@O؀(ņh}Ć ŽiWŻk)~ Ų6Ww¾üņRnwÓ'ŸbPUUźķcwzg7€Ę 7ŲņR€ĆTilž·É@lošæx6čÆą¹O:ø¬6²ļ€cp€ō[³šųĒ L¹`ÆČ±·Ü‡ūˆšžTxłWń0ąƒøś!tœń]/ę,[„YÅnåī+Œ÷ēį–‡ļĆ;GīŠÓÖ.ĻæOīz ÷ ‰wžśÜvāehŸł4®š8‡jƒ=潆§āÕųUk ~ō»ļaXxL¦BšFŦE®ż1ż*o÷—ŪYž£±„ąæx_oQ)ų/w|oąß5 jl{šo•o¹ėÜšo-,$„°PʶeĄæ° į2Ö½LŽ@€·Ķ·ķĒöž­`Ŗ&¹-1™Ń¹ķ½€@xL!ųWJ€\c8JĀ:‚,1Q\ėĻA~9šĻĢ$˜IØXīoµO „ėB°Ī·õ 3žŚ³2Ģśk„`KŅĀųž§…gŒo.č a ¤«­2.K%ĒĖŲ˜ÖŚéØi¾zē]NlŽuś5éʆOT ž½Ö“¾<«īū36żć=šß÷YvxšÆÓŒö„””Cć "T×ÕYd „TDN/”¤‚T"’éĄæōėü•¹±BuüR#߀Db-bN:āļą+‚ć8Ø­ÆAćšĮØÖ4$ GŒFķ¤=6"V ĄG7Ģ0$dXb@”/=š’‚ī˜`ž!ņ³ĒÅs€‹ęės•{ÜsŽž-ד碻½­-kвb Ö¼?mėVćĆÕ+±tž"¬_·Į ™`†ėzčhļĀĘõ›ŠÕєՄąßI:ŻĆ†×¾¹ĒŒŃæŻu÷Ļ Z»ĪólÜĖŲø«‘°.Ēgc®FL[ČĖN6eć^q&ĒÕV­•qYy.Ic¬ŌÖ*Ļ%‡]’ʰš ėi”µ!,ˆ$IHhfba\!C*˜Ad™Œń‰Ēā×Ć“ ė2…fÆ|uUÄwÅ÷cÉļ·õ[¦œ"L©œ²Lj jī8ĆdM~¬ ę¶–}Y„@īZ˜A•sĮ’® ēČ]£aZŻ1”ęO‹Æ¼Ķ3ń15±ÖēĻŪēņĄQd Ó½o~ļæ’Ī5Gųß%ŽÆš³Lłłˆ°5npĆT]å«LŒÉ “• Ēq‚{ŠŠĮ±įZ#sąeóoŅX,c@įzCÉXž¾4_°ž ×HѤJpl¢hl¹ˆ®ĆŒ%Pz½–[k‹5£@5s/n.ēy 5ū½“?ĖÄ~0éēF¾vĢŪį¾R&5ÅkԚb– ČėŌ3ž˜Ś¶ÓµO[ŠHģĶ“įž£¦¾sš»S½He–|€L%?vO瘯$€ü:9個¦Tō<Żźrz’ÄoŻX~ĖņąūųÖŲ«·AŌö2Ēób„bLÅ\7ö2on €,ž/ń¦ŗ8^+µĘū*üšå§üßĻĢ'еĒA8@ņÕgńĢI0 ęGę8śó0Bąż†!ųÕŽ‡ā„ā?ܓ®€ū·p†Rų]g{Ž œō’ŃWqJ²צ;pķU'`Ö%ŸĀžŠ¹ tč1ø@kšĶćqr¢tńL,ŗķ1_;×d»ńef4Ķ{ß ē¬üg"ž}‚’ąƒµ7§°-qüĮ©va„_T[ü»„v‰čųÆDöoe¬‡Y’j Õ—’±Āa¹/ūJĶžd™Œ5€’õž2ü—’G„ 8)h “±Ģ¹E]ü[—IgX”JĮ3 ½EÕSDģ¼Üx=­ŪŠnA!ų·Ā_@ AģS Śś–Ü}£Y0āČgż£ą?—’ä—Sųś‹¢¬ISĮbą/%`|šĀ 0ėųĄßSų IZ€ˆŪš7Z«¶Ę!ćWīŗŪ)ė¦ļte¦¾ī &”ŠÆµ8Ųt°ėż;V?šŚfχfc[ü÷vh½ĢŌO@]r×ö’•D šĻŲ0_ƒ!6ŗ BUM5”r@"ļ毤Ģz) j €~)JRšSäČJ÷•€r4āÉ HV­C,– ųõ鈔 ļžóx"Žŗ¦F 5±¦:ˆĮpFND|ōNUƒĮäƒ`9laމ@/Eß œ‹@y1ŲÆŲ‘ „ęČEs” c<ø™4ŅčÜ“­-kѲ| V/zk>X€kV¢sÓdSŻ`kQ][ƒżŽ8ē_÷Mœrį¹Ų怿¬©…µ@[kŚ[;MūiQfökż%”qļq˜zŁ‘ŲmęŖG_rä8±Ėˆ1ž±IϳIķŁ„ńš<÷“k—āģŚøÉD€¶1ķr,›5q/ƒø—B,ėY§€ŠVy°NHx"ĄĶj™µ,‰$!$„ !¬‚ńI€œ") Ź-ž BeRO"@™ū<–sß1„H€"Rķ,Š?£$€āó$@8w”`G‘‘łŃ“Hg‡8/¼ž×$¦$UēœSw»ö&č“’]ė(Ģ’šąakŗ'Ÿó~ėž×¶“O­RT ĪYŽp°mH€Üśe+„ÖM›C$ą“„Ęef\ ń֗n7²v,^znϵj”š5Ą¼{xwÓż`Rš²ąsŸ·čܖpÜø7§7 Ó[×ć xķ¤spFŲžļōż0hŽėø—{×ÕįŒWŚń·š˜ĪAņį{šŽøi8ųÉXSüGŪßŗų`Äć?GÕćæĄÅ™.’ ĻLų¾uɏ°ņŗÆ`Ÿkššäqą?ĄĄ ą•ǐ|äĒųF]#^øō^¼¶9u’5Eć6Gśß›éßÖtüļ ü>ŠkęæBé’¶’¹Ē”äØü—š»šO[`öń¢¶{§`¾7YOyÕó~éVåԜR²ˆ€’ŠšĶžĀŝ’žąn:©™½óŠSeāūŸõ’ČĄ’¤ŸfWߙer|ČGP¢@®V? č jżƒ1ÅĄ? ų®ü @¶ą_ź„ćųē6„Ą?āōž€ü­ĖRę¤žÖ ¢`ĮJż…é"©æoī'¤µFXf¹qų˜é]Ɔ”ń „®³Tč®:ßyó>€‰Ō—åeb«×ż÷ žūžŠōÆų€ ó<ø g\ ØJ"–ˆ£¦®6ČČ+ßŲOˆĄTĻ'¤t”œÖ`_¾Žß—óē"—Õ2ü” mż,}Śm€1Õ9Šfņß·.bd°*FdŅøŻi°6™ lŗŽ“ł6„O€T ǟ²c'zØ®ØŖ!Učč•ķ—jÕ×ß9ĀĒVĮÕ/k”]†ö<σŃŚĖĀXėi0Š*EĻz#²Č>XšŽ›=óߜƒę+ =Ģ §” MūĒOLC¬±§`‡:2›xޚyrįŚeÖģ)’š$)a„ MŠŒ¬…’šY%Ų@Ą(EF2Āa#2ŃŅį%K¬iV–)R bŅ*"f6yY>“µ,¹vXÜ"³š„’Å×–żó([Dźõ‰…(<ēÖ( –X#.~:{ęõnÓ'b2³ō䝮;Dż’ĪÜAüÆ’ģ¦.wŠĆŖ–žģ¬Ż.ż„ˆēēč9 ›ņĒFĖąĒ÷£® ST“ś—)ˆ–½—lĶĪŃq-ū’}_oč'žH&=kü3U'GMc±üć¾ü€|9Ąź½VŸe£n •»ńūć_’£ø×Å@”)ą’)æŪ1ģæg čE{¼źn(ČĒ‘Ē„ż Dl®ń_)šōĻų/”Ė|~"F._Ž'lŲóP|>¬ż_:ō•øĀuq=I<ŸHā.G »³ßĄŗw4ĪØü½Ńŗøł«½ōm\ļyųl,ŽŸ{~ųģÆqJ:SO»GĪų,²”é_’*u’[ÓōÆšżYüĒŃć®ų Ażæų/6ū‹Jž¾ĮģļHuŻė‚§NSź[ĒÅjg=Į6r""ł’£·é„UÖ;†Hē”ĻśīÆ%į†ąRā÷™õ'¬“™s«I¾qV|䷊}Ģą?Gų؞Yū(š€āŒ?’6Ņe 8,ņ¾¹ZP¤`؈` µm˜9󘓐~?$ŲZY ü­fāš×–yBk¤üGļŚ5bčQ: ĆżpŚß^ŒīÅĖĮ%ÜÅ+±[ü—9`{’Șm ž‹Ę„Wرʠ«Ł@ OB4Ę •BĆ †<Ų~ś™y™“é ‘…r6AŠŠõ?Čö“€:ä[FŪ’ éūįü°qx^=“W•ė@$ @@üIųАäæ>n&‹Lwnʅš (Ó Å%ƒō Ž!żūHV Ō52’Õ„ź:Bm=”ŗF ŗV žØŖ–HŌH$«”ļĪßgėæBrĄóŅŻnp³@6ĶŠĆs-¼¬ē™‚Ö|¶G$į;ųCō”Pų_ęmā?ɤ³h^¹ž§±tĮB<łŪß#“I£fĀ =r4ģ9$ś~óp·×M‹ÖĢ£9Ķ‹V+É)©‰¬Q’4 2B‘† ­Ņf£Ń ­0BĄ²²,$Y @8Ź’G‰¢ÄĀęü¢D€”dmŠ µAä…Č»š“įžą G:8ĪöƒøkĪĢ 7¦FØ¤»ęÄI3æ>¹ńՍ@ŽąéĪßk·‡’Ÿ’īźóö¼č+urmH€ŹI€pĢźO§~™<8¾į¹F¾~äė@ag€ž¦©÷zż»,ėN8K-łĘ”—§ŠĻŚ ®Wųj‡\K>ņŪņQPź [õQpŸž¶Pš»ėŠÖځ–5ĄÖāµē’‰žņ4Ŗ‡K4MC%²¶ńIąŒ ’}Vķ8åuóĀęłrΚEDÖS‚<’0$X+Iš…4J±‘Q’5©ž°TаĔQ 1ŒŒłĄ{sŌ@!°„$€g‰^Ōŗ@5@Ü š‹¹·ž¹®{Āi‚LŪ‘ćł}‡?»RZĶaļ献?™ūó{]Ÿ“ė.?aś’½ OCŚ •`”ąio€@éö€vx|ŻĮϾHÖ]2źńŖ/…r笀X?ö҆ Snž¹•‰ƒ»6¾é§y÷ȹ袦€@!šöŽ,Kj—!mæž>fį©ėĀķ;bkĄ”+ĄŠæ Šb{J’gżāĘ/āv܄’zz=–’žłˆ?|7`‹Cqģ‹ė°ø·ė_QAöæétžĆ0Ķ’sN覄›„ÄJc°{ćPœ}åx*ĆYˆś2×X‰ōæųņĄŽž£ŪžSĄ’¶pś|šo1‡yB—åśQR5O…Ģ!Ē(ų$„¤ŸfŪoĻ2ļ:ņ7§ˆŚ{”R`¹‘Ļbš5ū›oSĆg¹ēv²9E31ŠŹ}c ßŪGŌ, ĮqÖæXņ_Ŗ€L*ō{EŸ=›•õŒ±JeżĆ÷,E€?h'˜ßa"ĮzZ„Ēzž%æ ¹qĘ=:‡9Ź8•µņcO£ć½Š1g!tWj3@y¹Į;ų/»3r}żååʔŸhKĄæńĪńĄJĄ_RuõõH&¹ģōˈI_P§/• '¶¾‡äŸBšOĮń!øŸS˜ńd’œ#0Ģfj‘M׃—ü÷’¹²€ü‰šµb’>=×C&A6“²Źfń˜ćgŪ„€P Ž£ „ €yų‡dGh„HßęeAKĆÜqa[ĆąX„D˜ŻĻ+#(ņœ‚ŽD"w ’K½wK ʆ–MŲ“” éT OžęA,[¼ƒ&ĒŠ81V<D"ŽŲ¤‰ˆMœŠUŲ‚°;Ū‰ykēŃ»k> 2Z ņ„$-i!Ł'$(֊(GH‡“T°B‘1Öł®d•€•R²֒ IVeD€ß1 , ˆ’@dĻĢų³üÆxé)/y™»»‹ä7?éTæU ųĶ‘ĀĪļRfÜĀl÷¾)2#ŠM›w„ÓųR•r4€ųM›ś’ü€¾ƒčź\ ü[‹‚¶}Ń`įw0ČońĒõ&÷?k[¦(š “H3™ ėo„< Ź<žŠ/`¾@Å/ ŁLŁT:«AŚCŒ,j’*ß&PHHGAIyeÉ “€ U ”#BŁ~˜Ł÷Ƀ¢ķ!ĄˆPPiėßkĻ_aßD€1kVµ ՝FKs3žü«ß ³£ ć$%õ2פų­CŽBlĀxÄ'O%K8ā–Šīl'æÓü®˜ß¼”@ž¤!ِZH6"GQ‚ ‰B"@)ß,ŸYG’‚,@Vʬ)ķ B"@JŪC ”/ ŲVj!ˆ³¢j€R$@XóŃ%2żž×±Łkč_ƱŌõ‡īčFū܅č|ļ°ÖØŻn/šŸŪµ½Ą×Rły¶ ų€ÖÅéMjTD]ńD M›˜É¦¢š’Łp©\Ĝ–ˆłr†€2ŹA¦\Š -_ؐĀ7aŻ»„”ū»:Ćxq’ŖCćæąś}÷Ė öŸu@īf¹8sngīīµ§‘Ķdįe]˜¬ ‡µI…øĖs©|E€td`&˜†Ź¢ĀŒæ(APŲēT *Buł$In[xÕEæć2 č=Ķd±fU m2Dmm‰%¢3Ӂw›ßż5Ė…„WŠPŠ5ĄZ)2¤¤Q‚ ŅJ‘ Ņ$¬UŠ,ū YlLŹ'„cmHA–™óI€°, R5@Æ$D@®5ś @ė’$Pŗ$JXųŪ’ÓvŸŻrĢ÷BMöŹ·OœųĆy_€°Ļ|ėĪ:³M‡Ŗy’ĪÓw¹ņ·:2o”xvń™›½īČėé®;m·.R»$Ż/Ą{ž·ĶI€bP_LōFH.õcė˜†QI)ĄŖCWœf’cæ@’I=˲źh‚7wĀü?kV?ž‰.h6pT°ų ęÓ½ÄČ’%pkCĖÆ’žk:ō‡Ų‘KzS$ĄöŠ ˆ­iü×_×’Šųo’Īõ²ųßD罘ĘŃ1I€öÆĒ';;q3&%ŖqĮģ®üßE10Ąoī€óķ‹q·ńp2c,Ņ5ƒpžcšŌxōOś_ž`P\÷_©ō}ä/®Ć!›>뵋c„ĀŪĆĒāĘóÆÅėŪŗī[9ž’§€’Jźżū ž‹%’!ų̵Ÿ^{,?$ūęΐkĆcŽ#Œ~Ć͜ßĶ|03NØŪ¾Ø},’ ~[„»lėwŗŲ#Zv¢løh˜ŒuGĮæ° óAq„ąæTÖ?*łŠü‹°ķRīū“õēšŲ¢¬Ųsž:‚sÖ ¦Ąäϧ[&x,LQæĖŠąOiA.kÕY?hTėØ1G»ÕU»õøø”;»Ń>g!:ß] 6ᚄąæ—1łż§‚ Ėģźė¤’ną?2& žS-mĖ4DSjhJ)4  娠^?”ī‡ś|&?°BHå"_€|Ź›ęäļÉh(ż•°Ž>”’čh£cHĶ»ž‡­/ s·) ^¶ØŚ”ģ²’Įš\ŁtŚÕ¬‘p$ź««!U©—R*(%seˆ¹Ņ€\Ö?|ž' ŌņSH Č|¦_Dźž)TI¤G_dD@G{>\»®ėį¹GžŒw^{‰F‰ś±"œ„$T5•P•|?ŌšaHģ²d}¹oü¢hMmÄģåocŁĘµÅD€_@F) ˆ©…bćHņ·Y$H+a­#Ʉj)…aKI&ź ćŹ>ų$, źY St¹Å$'śCEj€ JBą•uŸ›ųĀŹ/Üf!«Ę×ĻūńWv’ö#z˜>µä¬=ßZwōm1‘]ńõ=.8³ĮŁązį5óvźĪoß½śÜMéQŸ 6‡Œ{čŌCĒ?ø$Oż'\ŽCv[“įö‚(§z’©Ųdµņą7n4Nƙ`ĪØ®E~iē?Æ7^sĶ©n+¬¾üW©Ž3sąßQœ ź¾-v™'<ŖŪnŽÄ&×ÓŖųJ·¶ģü+Ž(ų×¢ųWR–’ŠA’čJĄæń”˜õ‚mA®aQõ7,<)|£?#[+ɰ0®–Q¹æĖBim•ēZéjR¬YµÕTXµóng“Lvy%ąßkėÄśæ¾‚U÷żsö üĎž+Ł»5ĄEÓU0Éf¾¶^7£m¹†ØVp†$ „DĆ F(G!tü—RBŠąŸō·Q”€»$?k/ežƒö€*š [ž©B?_bļ×īūūƒr@* kTōS’ ¾h>¢n3ś€šŁß'Į‘#KE@ˆÅbØ­ÆE]c=œź¤Ybm{ ŚÓp $ĄĢŠĘĀX ĖČ©ˆĮMŖfi·‰ūJ(§ˆŽsoJ ¼ ęų«Šp #„CŃuL,ƒėęæ?)óh¾X P¼¦źM Pj]UŖœ³8¢*€SF «z饮1_y’…3™L÷“ćŽ:é³Ć_ø6ŗ~Õ5£„}1«²kÆÖ}"¶ĖŖ£™äd²Ž•]}Åų¦~& žüš9Œb_g§PcѾāe{ŗ*€Ŗ"@G¬ēüÕE*€¾bƾ‡”Å@Ąę©¢ń’TĘ@ļo~Ą7ž{ś\źy8‹Õ±~ņč<|wÜd’Ū~E™ģ?:»twbš›1«”ė’õß@õÆļĄŪµõøś§³š§p_)é’Ģo`ņ'>Õ»ī·æŁ’bé’ćæÄŁÅƒššŌå~ICÓ?7 śŃEųv&…SFĆ—/ś6^ܦu’EąčY÷æU’ć( ©+’į\•‚’(`—Lļ#’eĢž€ņąßZŠ&)kr³‘„uēŒ_(žĄŗ~ ķŸlꘄģ^I@v?ŖŗhßXķūQ»†tķć™¶+:a€ÄüĮä¼ā¤Z­Ł© śpb˜=Tķõ‡«†9P2w¾0믂ó•kń—ĖśG$ż„Ą?€²Y ü› £’•dż- ’ `qėŗZ†Æ­ē ‘«ó ŅBXkÄś£gtži£Ōą²æĖ L:‹¶7ŽCĒ;AY°Ü7ØŲźąæ/¢”ąæ×ézٱy ¼Ü˜>Ą%ē*žŪ—t·ØI8Upb©$ˆ$Tœ“ČgåƬ}ų‘ķRjTUÆ Ģķ¢j źžE®¦_ČĄ0bü'£z¹ķ^&޶ÖzPXÓĻžk#Ā×('ĆĻĆįPéķēüū‡‹RC¹R‚eö郈 Āl€z¶ŠŚ@».ÜLJ4jÄŠįCņ¤‰ĖTP2Ayóæh‹æŠō0Śź/T ųķ •„Žt¶wćƖMHuuū-ž-.Yļ_üÖ!Ł( 7–‰üėŁ[Į?‰¦‚É>H»iūÖźwižź„‚„GZ ö‚NZÄČ -i)Ų‡“#HCųržB+AAĮ°m TĀ(‡jĶ`³Åj€%h„ņʂ¶_€°£€ą_Ķ’öÉĶSNÆRļ~u÷’¹ŗ>¾!ėĖ›†J€ŪēÜqm{¶éšq ózźĪ×=ģ_‡ƒē’Ļg–·O?Ÿ!āƒ’ėżņ”ļÜńņŚv™½žˆŪ’Ŗėķ ÷śźŹń별KKy#æJQq.§0, ±H ‡1 ”Ä®ēśÆėvV”ņņJ€-1\÷ÉNö’æKDRe×’xĢsćoU:ÅŦ€Ķ‡}p’—˜ō2]M®ökŠ2ōĢšĢŠOqō¢öŗU7lzo >īĖ`[uX  ±~†€;v [‰ŲŅ’āHö2¦7šŽZž> WyY|ā—oįSįžbą×7bšk³šz<‰ßśwüxK¤’ފqļ¾ŽG„Äū㒟½ļŽ“£ø¶>·Ŗ»'lVĪ Čˆ(ĄcLŽĘlLĘlĄ>ćĖ <ĘĘ`“É‰$¢BBH °Ź»Ņęé®ŖūżŃŻ3=½3„Ųpł‰ŁéŖ®īÉ}Ī=÷ÜqøņĢK1ƃć?“®ŗö<\ĶąČ­Ę氓/Ą¼Æŗéߦ¶ū³TGFūæüælÕĄr€Ä  sšoY~^āVÆż—1q;Ē>{/‘ü°$ų·żż]ś‡·ń¬:čc,¢Õ§Ų}~\M"“;K ­ Sõ,Óī÷øōtPķ«üŗ=­źł!ų³:›ü³a¢p~,럟’1ąäĮųAÖ?8FÖ3ҁ-üVq¹æ1B(ĆĀc–F AŠ¢%]= nųˆ#¼Trė’ÆcxnžBć£įy0na;æ/ üw:½+šßƒnšßŹt’8[ü·×lüDAV9°‡T@J>żū!‘p"īžAę>ČŌ‡ 54ņ#ä> UJ²Šå„J¤ īū qŠ>ę@öļo/$ ^Öą̌ uŲø”)×āÆqćT “PÖæ“ˆ'\Õ.pŹD‡÷K±ŁŻ±¢Č­!ģaC‘æ5D"ž›ķÜŠ¶‘ßXś¾Ø­[KBz‚X‘ÅžER‘ĆJņ„ %„ß1@ŚäY‚4[¬mH-¤…dmKҐ¤„$M±²[’Ž4`b%4#( 0†D”A ”dü6ŖŠ_¢$ JDKzBdįˆ^v܁ƒśŲ Źeę Qą…„?œü®MˆÖEģqÖŁ¶ōō'k¶ķõÄā³.nńŖw•äÕoÓēµß}wĢĶo5gūŲ7͹ö.ƒörĻvśč’čń£$Ą‚śjVf'ōŁgä=o) Üć$€ÖnĪŲ4 üĮļŠų¼¦€«Z{©Iō;›™³‰¶…?«$łĮ™~č§Ļ_·©µ”ä_ĘP–Ą± …$­‘3ˆbĮ$ d æ÷™Ē ł Ƅł§­+šo˜É°ošĒ‘5„ ²śš…‚‚l’Äž\WIcX…VB*"©“±<Iš„'­ņÕ#Ē}·aČą“m÷+ł:Ā6γi@JBmĆNŖ4N߯œõ3Oé’ŹĪ/J‰š$äļk÷xē8m÷>žtĖćC^Ÿr—Ń '>]¹ 1#|žŅŠĮ{­@2ąóÜ,`Ł…s”²lĄ“ Jć«!ĀØt€öčÜ,ج ^ÕŪY‘»f%Ø:®Dhy@kؼŚßVŅ1ĄźNĘ`@½KŒ-hDlŪGļSƒM03ų{&@ÓJ¬}łå +®(1ų5ˆÆ/Ą ĖK ]ū‰›ł»»ĘK;ł™ŃĖ¶†f’‹}xšbóŖ“4łŪo€Ųż;h}ģ6øf-ö>¬Ćg VäIPe ^üčm²~†ļū=¼Žs"^?uŻ/1}Ž[ØŪqo¬ ·)šūŅsßĀu‹cĘLš‰Ł¢Ł'ośē$ĄžĀ+Ÿ-ĀYĶAļ=ö?ә%Ė7øėNŻ“Ļü¦šžmiĒ’(1µ©ąßhævÜłŠ€Ą0³?VŲmpTaéĀŅz¶ŹÕźŗZĆß«°č¹~ää&c@ƉOēj÷`³Ž˜eŌŅbą?£ņnĶiaq‰–pöŪmĘlS%äĖ}ģd Gˆ c@)Ė2#erĶ8Q¶`‚,Ÿ?R$W§@Ʋ$•ü ’X@¾Ž?žõ—$ū„²ž!YĻśG0£š@6OjLņļj:²¦@ ‚e=#Y8d ’U{,”Ö‚ H¹$ ‘PŠ„§Ł‚R±¶ź ŻaķØ±§zéŌÖ()ö£}ł¬}b&Z|V‘KŖ’`y3ƒ †·(ųlž*ƒ’Ü~›žŁuó ’#Ŗ m åUØØŖĢ׿Ņõœė¬å_¾ 4¤—H$rY¬Gaõ !`Ź‚p{n<”ǤA{[ʵ#OM(ēŌż\ųŠss£Ņ„Ģūfõ£’_£óYö ņYöē²ńį-‚ģ„uk×ć³O£µ©©²rŲN"ČžSp‚ ż²¢ˆé_ī}’Lł÷³«V®C[k;žų_xķ™ē!@Æ­ŲéN€vōo"$ŹE'ßę=’±9Ń/\½¾jy-Ȳ!«+K.FDD½Ņ54aĄh¶,Į«›X3„df&2Ģ‚ż'ˆˆ|µ“!A~»S˜„ŅD†Œ–fb -ˆÉĄ0H0ĆC,‰>ø6ģæ©(4 N‹$‰`¾© ¾¾^ JˆhéI@Éąs$sļ·üįć$Ą?żæ£6¶ŲÆzŁßsėKwĶ»ņ¤ÅõŪżœĄ<Ŗę£?¶ż%·TŪ«³šAļÆ;pšœuūüJ’n<~üō_U„›]ŪØ`]°¾yLśĪ¹æłYmóøs™Éé“\u’A#n>™hĶÕ |UH+F'čĮZ†}°ź^ā$€Œļ( ą°O#rā<‚*—ßü1oXpOļEæų,\‹ģ<  5ȔO²ėF’Ļ­ QQV÷ŌYe«ļÆük„( ąp#cŅ«Ē=0jݘ«vŪ0ā‚ń-żŽJ¤Ö?“.!Ü|Ę^‚P„ļŪ1ĄsA*vĮĒiĄI! А9‘ {nR1Ó,ÆĀæ I€F€J‘ėR%ĘĀĄķd|DģžDtMĢ,ü»$ pÅå =æ&ńµ5ģ®ī#žżļN¤*°ē~6žøŸ?T†ƒf>˜ž»#żļŽyF4zšżŗžŪ <mŁńż£ĘSO@ūˆ ų±ŹāŲūž€~@é–NŸ®_ĆĆūaöæ”Ķ7hĶŽ ‡-žBéŲĘO ųŖ÷ ÅŸ \—?óO9Šļ“2W „€Q‘€įX¢Ō‡[„Ų™Qž9ČŽ#óA|0‡l ˜‰¤‰Ū Įøm‡ ¬"£ż,?k†1čē›< `ŒćĻ T2Ét 啕hhlĄk/ĪĄĢg_§†LFA)ū1rW&TųšåĶžš ¹©+k×aĆśzæÅß[ļ Y#Ńk¬S¼„_Ē·@m š_,L&ƒĢ mękŠõõO¶„-¶ŗ-ŽŁį\3H¹&©ųWę́¼įž’„M£æėž¶%&÷ZÕ4öDKøkwī’ÄS7½wćÖ“Œ>9i·.ųöØŪĪ8nܕOś?f6,Æ,?ś<†p¶Ŗ™sć ²„­Z3Į¶:3¼øōäIwĪæņΆLæĆl‘]:uČ£gœ»ÓīXė™lōqŲ°- &fv[ÜPj–L&ŠjĶäŲNĮ5NÜPJ‡¢×:QcĄSĄ"×[›j Ø%Ø»¦€€żXµžĮŽ—ŃրŸīšŲńLr˜Š­O˜}ÄĀč¼VSx.孀ź{|zÕĪ«ĻX¼—šÕ4ų˜·Üņ±w¹ÉQm©ŽėÅÅ{nxyŃ6ÆL ēwÕ°˜!`2Ö°½ Ōbē·õĶor@ńր”!`wćĖ0ģ.vū:×|ĪK‘’ĢŲ’ĘŽƒ3=æFć("|–ŖÄžlĄœĶUūę¶ÜwŚļ{āsЁ 8š?ßÅv«Wą_ĀŲp[² 4{>œ[/ĒÕcwĮ5g\Ś¶fŠåGāVč{ÉSø¢_‰ŗ’«/Ā6KāŽó®ĀŽżĒū>2”ƒéU§ąo¬C€ÓwÜm®zāv ^¾Ū“5c¬•ĄśŻöÅÓū| €O„u’WŽū¬>9óųUx¬-Y÷ߙé_1Ē’ž_H»æÆų ėż_2Ųy‘ĘuJj€æŸč¤nÉ3’VäžmnĖÆ[ĄÓ ł?°+/ضäĮæŽ k]ėH—ż-S÷śŒä€c’,“R’üžł µp©°ŽßŁū(ųĻeżƒ5<ų/슁’čqŁ <"s¢Y’‚$¼²ž‘R:Ejż•K’ ĀUFj‘"K”Z7j«ƒŚ«*÷ę×P,TK6¼ž>Z--żėX,w¢7+ųļdpSĄ§Ēźd`Ó@y©9Żo]«ųo©ÕhŖÕ°ū„įō/ƒ%-ōŌ¶cūuēB­ųd¾å_¤Ķ…ęŚå» ?«-£ŖęÓ<9fųCs?ņI慠_/¦€”?ņ$ÚUPž¾€|=ĄłZ‚Ÿ› nģ½›3ž‹ČöŸ PęĻ@Eu#Ē÷ƒeY ˜ õmXžÉj“·ŗų‡ßE€|Ą'°a%ü¬r` č{“µ4Ć(!#FbōÄńØīUŪ±}5DhŗH‘ÖŃכ õMhŲ؜kń—É“wYļ_ź­ćT Ų©b_鳙=Ŗū/qœb Y"1qDY)? fóIŻR~}É\éŗm$„ ö,)•ģ )=)YC°²mé ĮڲI ‹µRK‡•CBĮ!-˜’c“d,ņėśÉ–LĘo ŲRa4Gk÷‰üśžØ7@—¾„ŃŻ÷Ś~;lųē÷oø¤Įķ»O’²e÷×µŽßY9 |É?~0銻-ø9ŗK¦„y`īĻö[TæÓe)«yīł;~žoוņžy—ž“¦mŌÉØ:±öńć'žę’z§WeĄ¦|K?Ų€‰œ£§¼Ī=<æįęöšXé,•LKµŻk7{ł.Ƽ’ƒŹ×<ž­įsżØ56·Lų„k•Ѳ]?<ÖM æ$Pd2ƒjzU°je»j{-ŹŽø=ŻųŚć>ÜkNøFOżŅåą8p蛂ĮśüżøĄšŠŽėĒż¾l/ą?€žÄ×V°%bĒQīy˜žŖĄ/*œń¢Ā‡ĒXx½­ÆÄi„öŻ3#}*’Ż5ž[¹—Ģ~/8Ćāó©ĀQū ĢŪW`ŃI\õ³“PY üĄéÓ1—äÕēbLø­µtėåøQ+l?z+4„Ęē’7÷†‡:3ż;ł||D„ĢWć„čör{°Aļ݁÷u:æādĢy÷¼W·æt3˜Ņ“?~ś¼ö—a÷Šõ?ŒĮcpu¶',xŪÆ[žÅ„’ŃŲÓæ0ŠI’ĆųüĒ¢ą¾eYļ8KĀĆō"§ę*ž…tX²ā6hy<ńAÕņsc@!ųO¢#ųŌ›œL%É· Pöž×¼u)šļļ€kĖ€’xÖģ"ą_kYe±¬æP~­˜õ§"Y/K–a–®2Ņó„d—­ś>}·^>iņEmUUūvžŁ4~°µ- —n:ųļ$¾(š_|| ‚’īė žŻ&FS­†(·įō+ƒ½ūõ Ą¾ĘŸ‚ŗ~ 3ū9“æ õ_̵^¼A`XĆ/ƒĢ¾ P @Įö‘ Cš/łæļš’¹ćiå›ęåZü9šĻąsœĖčēĀp¾~&WæļĖūż ¾aFŸåŲjRXŅ’A@ ¦O9¶Że,F ˶‚ł&§0š”ŃAöß_NnüuĆæuŠ1#U–FŖ¢ «–/ó>„ēž7Ī]€––,\Wå2žłRģ×ūÆ^Y‡† M¹®—AÆŃĪ&%Ō[ü€Z½­/½ŒĢ‡óŻĮ„æ`g±Uߑā„2Ū«'=×$‡¤öLŅÓ&©\“ō<“Šš„8”;®"Ēːķylév²³Žē‡³ĘŅåŌ*CV\ @–$©%<×#$EÕĢ~‰™|{ĄR­…ĶŽĖ\«ĄĪ”¾Ą‚~ Y Ą3 —~rƒŪw¬mv¬EnÓ“‘÷sņ„Kžn@\ ¶~hÅā ŪC`µē ‡®µąåZĪZ}ųČ޽ń¶5m£~h wõżŸ<÷Œ)g]]“\™[ÄcŸ4īRórķÉćß\yŌ£¹ßŽ.•¶ÆX°m-ĆķŻSDו‘7ؖL–LPOŪŪɵš^iūU”j & VoūAr0éÖ§†Ļ9ō# _āF«X³õÕżļSw›ł'č'¼¦{+źž>uŲ¬Ōń£fõæqÄ ƒļÜś„ņsķÖæP¢½rź -ö¤‚|±Ö€„¢­„ćÜ­[c­ć*€h„­—uņėŌ¶ ć›¶€_l|ķžŠ-™ż/«Ęäö&üö%ƒļÄē˜Āqn·H‰;ŽRųyĮŲ Œ©_yŽƒĖßĻā÷„Ī/śįŗ÷ $ī»·ƒ= Åw_Y†y°CLkZ‡ūSåøLŌgZq®1č7x0Nœž¤?'Ķ@ēķ{$^øęqܙl}<~ķfpųv`’c/Œr‚Żkłwłéų~s.:ķJģŒźŽŸśėQX>ińŗÜ‡·BB€@2h( HųņZI¬ZZYų8ŁŒ„ {>ā<;üM92ĄDėżC` ß$nčˆjō\ Ąwāā€t~š±jŁ:,’d%”VAķą `L@,ųĄ9`£}™?3tšwXrmĻ ­­’,Œ7ć¦LFuÆj$6,Ė’~Čf=¬]³-M͹vZ z¤Ż©äæ³·Y„tļbœ`„|ėÉÖ}š߇R)8¶†=dHĢźęufƢٲ±½‘$”š¤ Ižp-IJæm %Ł“6)Kn¢Ą#f‘WH˜‚Lh\ PL ʉtˆ“ $©x‚¼Z@3|øqρĻ~zŚļ”¶ū÷+[ńšńƾ³Ņ®s}·~Ģ÷×½eĪõēÕgŽælé½§oÉmP4'Äßę’źčU-[Ę,¬^©5žøĶÕīMŸeBs8!‰gÆ9xš«+޾ Ķ«Ś”- éśå‹’~Āö—?`#c@ÅĀž3H域@ `ŒĒ.ŪŚ#vC ĄäÅ2ĪyuƦv(¤H6½3@T ‹)śļ‘ØŻeĘ ŁÆ|Ķćßųö” ā­`ÕīoLuĖw¹ $zĆx +gżtŲ;{ωw[~4­a:[U§ŁĶ5éƒ)3Ć9›­5ąēģ Š™ `Ąļ• ā=c{ ųF°éń`# žgĢI‰*£‘ĒńF;Øč…żµĘvµńėčŲ³«°XJÜäŗøčŲIPl’8³vā’"ūĻWq²eį”ÕĖńĀŽ½±“nÄIé \üT3n›×ˆGī| ū[­­Åóē€ż¢k„®’N3Ü,öL6Īū>Īt3ųžčmqä)WųNżŃč,ūĘńįA0Äß§ćgń1§ųō_ćóÆÅ?ĪøÆNŻMŃń_\Ū¤…?ž‡ćĀmaŻŖO6ÕcēžŌżÄf4żz^÷_,¾nąŸ ØT×Oˆæœj§~1Dˆk˜a-1ęŹŁŪ½ų×Äβ|ŁvVź²u¬{@7œŚųmŲ)”‹’\F¦›ąŸ (^ļļ±ŠĆz’ĪĄæ,žŪ]c•’žf”5 [8DR&?ėļ*%U–„v…4ģƒĻRg“µvȈŻj'Lø¤+šļ5¶`ķć3±ś‘» ž;ųO’ŻŻąæ[Ėuc‘€’h0õ ˜ É”•°l eåeج®Ģƒž‚š’°^ߗöK kõ}ēśP!‚– äĢėDłŪŻYĮ¼@  óEa‡Š˜ü«Šą/Ņā/|ŲÉčTa?ēĶž‚ķį6’„±ū¢ßąj䲞ä€ßIČ»ņ )1tä ģ°× ŅÆ0Ūo Xū™~žSFė€0ŠZŪżqķiH)QV^™ųxž‡xäÆwą‰{ļĒļ|€šŃŅ’ĮŚÕõXµl9ž~żųlŃĒ~½’V×ūwśÖ”γ’_$ųœiGvöūhcLKs§ūˆż¬c¶ßßģ8l¢Q”ŌŠ“JqB{œŌžIj ­Œ£]8ŚEBeŲqŻ@ ą²­ŚČiÓp“2–Š©L†,O³Č©l&"IŠž6"ī ŖĀv¬„|¢J€ø/@HĮD•@Ž ü-ܦęÕÕGŒ¾žē» xņāosń­•v æ]¹ī8,^]uÜøśĢĄC™Yvģø?ÜĶÄōįĘżś_’Ž-×®lw¶$½aūž/üüœ)ē]W-Wd£žÆ­8j«ē?ūįmm^Õ®¶ČÖV'Ö=V™ØŚ©•ĶćΒˬ›®ōōIa‘‰ÜlåĒ%€69rq‘“Āļ7ą±)U8ŒTĶ@¼Ī3fęb\–*Će kq’™{įx ž ßpĢ0 {^p2ŽhmĮeż‡ć˜ónĮ’PśF¢Ó¾šKFŒ‡Ū{ .joÅł·’;‡Ū£_Vr-’ā’(K¢V{¾Ł`Ōōoģd<ć$°ŗ»u’^<ū_"¾,Óæ¢f~’åą¦ Zx¬•ø· !ŸųX«+ŸŅķS‹æõh*§ēM©Ė p×AļÆnŻ…Ķ0N1šÆ˜EŌnx(„Ā’Xȃ#˜¬ąß‹(ų¶ēė‘ä_ū.’eRBkķ®)$ ż!ĖĀ M§„“Ėś»®’Z³P.ImČr±2š„vŁjO'ū,ßvŹYżĻB¤P"Xl|ūCŌŽóZ?­-5­hP©{›ü—ž3ķ/ HĄ7üӞ•©U®›Vt|K–3ģZÆS_„!`³E1ŻģßFüoŒÆ°)љō’Ö[!zõĀxx¦ϧ*q €™üå“ķ'Ū/oĄŪÉ$Īõ²ųż1£0(Ü~ąЃGįGZįØć¶A’č>qF-īś?æ וUą¬Ö&üÕ0nX…=G ośW/A·¼Ū+kšĆ¶Füéō©ø ŗ’Å7įŗ©·ōź‹^zfĒĻ»˜ō’õGQvŽ‘øū”Ū}"qį$īŗ#ąÜkšœ“Äż+—ā/Ż‹¾E]’cąßĶ‚¼òYÜg ŸĆĒaõæĒ½ĄęÆūļĢōÆąyčģ %¢”ō?Żm÷÷Ÿžżūł?c@Ē%Ź*¬?2`-ōŌožÓŁŻrēéAXĮ<7øڟŅoļ$Ė/„ʍ¬æ}W¶ī†Y^ėų(ųĻ*cŻ›]V<Ŗ‚¬7ʉō 0ūCüG ü‡ĄSĄōi’Ś/ˆ»üw–õ7®ßÖŠ2‚HŚ‚‰Éó“Čxž„²,µ²žĘĻśĻŲk† Ÿŗzģċ½drė’Æ€ĢŹuØżĒSŲ8kna[æĪ¢(XŽąæ;u’=:Ī&‚’®²  ¼ŌœŅ }^šß¶Ī }½†Õ;§WBJōжeCF2óRPa›æ0³ŸSPĪØ/ģUŸ7 $ūa†yr@JŠ“ $X’O‚ @X2¢.š‰¬’¹śF‘×-’ł»į朻~8ĮĄ’_а¢ŹĮ„ •JmżRa9‡@Ųnüq_X€²Ź2LŲaģ°ēĪØŖ®Ź’\¶Ÿ:Ph­/€€PZ(„”-b ˜ IDAT2J+m@–…D:¶ę6Ģ|ņ<óĄ#ŠJ”j˜²~]×ū—|ėD6–[oś{»č.Ż’%§÷“%h{yŌŗBÄĀč“ī%ŽŲn_Śuä$6HjÅž?I­LJyHĻ8*kŹEŅ͘Dʅ£3d{š-•!'ėĀįø K–Ī’ō4 ĻÕ"§š$13)ưS@Ī 4 ·ēZ_€b$@±Qb<ü“,øč°¬NķŸ^ńŠøŖ9+ox’/W,ްĆ/HčĢäž3/9wēŸža`ŁŅVaøøkĶōčҳŽŠl÷«rÖ?ū£mοͲ[s²ū)ž_sČØ[/dš6dūŅ’“&„cŻ%’ŃĪģ ą“1@Ś…$€ćĄ–LųcńĪųÄI€-āŠ4+K¦ķuRĶĻVĶ:|A“+€ė‚M[ņ=×tĄĶNó¬ć†¼2ęA HW€Čß”!¶N:ķ‹ß‰ŸĻ—Ż`s©zÅT]%næ‰Æ°©Ł’R±ĒHŸy&žhhĄ?fū?ՈŁ}ś`/’K걉swCe1&ėµvÜG„Y+Vų¦€”9Ƴ‹±<‘ĀŒSù}¢ńDī«ģƒcXcb¦æüéaČuéŪøŽ_ćĘx¼÷`šiĒĻĪ?æ_æŅżū(«ĄŹ«š³ĖļĀóŠ!ū_Dśæūįhu¼7ć1x’Īe©|*šė¤ž=TX×1`}¤Ż+ŸÕķ»äĄæ°Č5>XŻž÷²ŹędUž"š›™„ZžtsfĶÕ’pė~pOvż)·yk’\Ēź0 “ź€D͟€Ņąßø …(žCÉüG/ŠBšĻ¶čõļ ü<ŸÓfżµfŲĀH!X)D„GĄ¼_÷dēśP^°>Ų¹µd.“’Ó}N'HDa €¾ū?ūÕ’°!źį»’äĢżmõü[_ń“źcFßiŒŻ¦?¬m~!퉄ü†ģ!’~sš?Ö”²W5vŲk*&ķ²=’é$ ė ,@#j˜“ž%ڨྂQ Fkh­”•‚ņ\(WĮĖz–…T/‰TÆN›xt;„MAž}³ŁL’ŗZ¢;™ö6dŽz ™Łļ³™’óH’S†ŒĒķ°īSŃ×xHÅ ­ŌžIyžI* O³£%“bGk愊€l Њ-Ŗ4KeŲ2Y²Œf‘SŲL€‚) –D1@ˆ’•ÄI€bj€ĄŹ—§y9ó½Åwģ½¢aü)ŽĢŌ®ZųŽß^z[s¶fĻŖÄśææõ•?śĪČ?æÅÄĖ,q`CfąTŲ©’3’°ąƒv9‡‰ż^]?ø|ÉĂu{'"c2¦\š@ŒÖ&‘Ńäˆć8¹k£œ)`›Ó°;„шαT;÷Ÿuų…É’ȕū†$ĄšŸŚĘKŒœp{rÌćǾ±ū[Ńuā$@ōZ¹vŹSŒ,?–Œ·`Ąßł0ÜŽR€v,ßæźųśņ=ž–Ä ‹EOJ¾ CĄoTćkC”ŠĪŽe’gĶĀ”Mžģ׎ēöYO‡ŽÅ^ÄGoā¹#‡ch±µ-Ojķār˜}€Ūwœ†?—:§xöČ·żū÷z¼8pö Ÿ|’¾īW(»ž_÷Ž6ū+ß½ņÜóŚH67¦ß‡»¦’÷¢Wšß‰ō’Ŗ;š'ŪĮksŽĮ›Ę`Č1ēįbĄg.÷8-{‚£ˆ™’Ā/>Œ>ŠJ’¹»mØĒłU½qÕÅ7ą7qšßŻ–iĤ’’”¦EĖ¢N¹:p {-bū”’ÖŻ‚ąŸæˆ‚HEė÷ čX§üßCÉŗžk¾—½źEnŪ9 žB·’­­Ōڳ“}/-t@+ŪŲL^­Ż¬5Ž÷²ąįĀzõŠDŸŸ A²Ń‚įT ü3ē~üǁ{žs/ž ž#ķ_ĉł)‘5,‹V ²žd˜„‘ü+%•2Ņ ²žZ™ńH²ĖÖź!C÷X3nĀ/¼d²ŲWC.š|ŠŚ»Góü%Xą‰’ąækt»)ąæ;ēҽ”®ĮiP^z Ūis’'Ē(æīŸ¤@jX5H*Ŗ+Q^]Ōü[¾ŌŸüBʜ¦ #Ęõ¾r!oĒ.‚'TLš?żä’üóŪł…ϵȫ CżĘī~ ¦Le[Ё€Q0ŚśFĆh”˜ Ą€+ķ)dŪ\4ll€ē)@jT‰~»vū­Qtc±ś’-éųßå>LR+W£ķ噚–-ėōū‹jŹŖåS¦aēį”AJ)Nh—ZūŻ”‡„ē™D HxYćDÕ^ ød©œĄHOée`WO$€Ń¤% h!”Ē- Į~X Į¢”  ”&Œaæ”, ĀF3=żéIgČ“-ŪWĶ^ó­é įLźūź?™|īōĮ‹š_ ½ĄĮ? Āõ=ķō€ń笲ꥊNƒY µÖ"·@~ĖÅ:ų €m£;$@¼3@ōéótŠ—{vę %Ø;~a)€ņ@ֆ—2½ēž¹Č_£*+M-żö›ND‰Dó‚ Fæ½oµm<ĀR€ŗēU¹•ūߥ¶Ū?¹*įµ|:+X²õĖćęlóŁS®=šęycūIü%K‚č‹/§ąćżžŖ:Ć~_—ųZ<›Ūł’Ö[!Ī8 ©|Ŗ o[÷‚}PžĮLÜnjŅ•8é•F¼ßÅĀĶĢ\…sK[1­3F8`Œ\< ŚCOĆqGœ•ēĆŚ’~A‹ŽÅæ”ī°Sqü“ĆŃŅ€Q ;®’Ó‚ė×į&bąœō³ßąpŽ›żū |ē9<ĄŒŹ£qĘéæĀ[qé?—8õü›ęśßé’ē­ū§-äų/ƒ±N„’ž%Ā5ćeĪ{3’9ZŽ\ʼc¦o¢±Ÿ”Mµå|©ČÄĮ(m4ō`{˵¬Ī#Ą› SæŚéw€<ų7Į1…qø>P­ĆWyŽHĢØDjį¤×žELø¾ˆd;āą_ƒEž¢«{ąæš‡ŸõĻ/æŃ’FE²$ĮČõ«DF‘ž…d.ėo Ųa4‹¬aAJˆ;Q½~̘ćÜTzRŃ×)ŻŚŽŗ—ßFė’žÕłū'VpÓq ų`Ē”.Al~BĻAyĒćXdĮ&IŲ°`ĆæuH†„ÅIČŌI į_žA³0hˆ}0I„@L@“æM“G4\ŅP¬ ܲ‚‡¬ńĄńŹ›Łńß’3§n¾‚ŪbQ»"‰d:‰Cz AxöCi?²ž|^`œ‚ģ?rŪąCtœˆŠš2ßĒ‚DŅożś ˆż“ü#  æš_‡Ÿ$m÷ŸĄóõ¹6yäś¶éт}†aĄ’c&õFeMڶˆH0(ČōūĒō9ą{ŖłĖ3 €yėA&0|¾! LąPĄ7ėań¼yųtįB(×Ėł°ń;ųD€ö[ BĆhžid2Y“4¶ „© ^6‹š­lŲéīålŗ’¬‘A 击ü¬vē8Ż’=:l’½zĮ™¼-Dyy|Ƃ0u­Ķ f‹śö²ŁBx‚ą ‹])¤',VĀž“ČĖu ¤…ĶJJK‘deIŅ䐶‚Nd¬+æS@Š%Ąų]Č[61”† žWń°K€DįöܹF:"†V¹¹u0Œ ŒėÕÕG}½öčĀń gĆė‡nõēė‡VĶoF³0ĮüHH[ų_LŹ ĢļßśŪß\“yņų+Łū£FĻó/$|7’°+0`)‰įyšl’\TøØņĄ…_xŹĀ„ń÷ĶH°ŌÄ"éŸWx=ś©ņS‹u£LäϹ~Ąék'Żp gWŅMżZÕEaW€‚Ē™Ģßo RÓģŚÉüTY5HξXÕöĢć—¾"Ž ]Ž;‡¾)˜h°hW€bjŌō +@{7ŅĶĢ™ū¦#@ĻākMÄ (ŠYö’Ųcį<ų šŅ•ŲķÉF¼_lķzļ Ų·_‰[ŒĘ‰Dx*]i¬hŚ€c•‹3† ĮĻ®ĄņRē'ŗ’€O¬®żōDōy÷u<†Üfuį X5ž€‡’ˆŖ7^ĀY’s®éÕ¦XöŸ³U(!š»‹0mŠ`|śń<Öք’é5g_z-€åƒÉ…o żČøĘĶāŠ² \wāŁøi«‰ČÄĮ?Š‘ŲÜ-’6ü‡·›Ėōļ‹vü’"Į³ż˜Į…MĄ!ˆ­'ū łŠ~vņၭqšĻYßĢļÓzäröĪ%Ą›$R—hW¾Ī ĮxĘ0AꉅØä 2„ĄX®’ŃZż°Ķ_©¬œ<čü#³žĮ³#˜DA{?­…d°0‹¬‚ Ćb}ßAŪ4rœ‘"Ö­0Z?YŽŗ—ނθM+%1žf’@0tüd#MŹą É6Rp„6l&ć§į¶Dtvž,˜„+&øõƅ‡vøh'ķ& ®ńįö\Ę:·žē’MĖ5ZVi$V Ł·–maŠšĮ°'ōs²žPīmū'2$7Ÿ īČAŻ|Ø€’'ś^Ėāˆb Ņö>)/- Ą|0,7šA7% ÅóhÅ`Śž±oųĒĘšŸĆˆ: WF")1n›~H—;}`Xćļ·ś üć6”'r™~ Ž’”»5Ę'8œg|¢Į¶öÖV,šó>ūx”ÆLsfšśŪ½¬B{{ė‘ĶfQ>P Ż·{Ņ’ī€"Bŗ,üģõų=Wl¼ėEz®2 Ē")`kō؀Č)J+õīņ˜½| įJ‚'l(rÉž°Ų³y¶Ežš„-•¬„ÅŚ–RɄš¤m“€ŠŅ!¶  V$Ą Gh@J2ʘM&4ŠFsOH6’īX0ż“śö!Ž­ž}ćŃćÆ}šĮ{ø^W$Ąuļžõ·-^ÕŌ]? š ąĖ‹’n€A„^½®Ą’Ÿ{Ęßš®tpń?3xö‚!ønr]Ü É2˜mĆæ‹©>(^ß25‰s¼,®J&qÖkķøÆ3ŒeĮŲwę3£¦ŗŽzg=fÅēuEĄü7a]{.nT ‚£y·ļš’@!±@żJ€øļ/čóŁ|ŒÜf_,Ść;hq3 š'ųš‹0mķ*ܙ,Ć\‡éND¦TąĶ(ęAœÕւ3“¦ŹššŠŃxųŪgcaōŻ’@,ū’ ųļ°nWą_Š }±čųB‹ƒW°¹Ģa|tøeż“Ÿ“Ūs5’>šŖ—9³…y?Ø=wtŗņ•Yr£ą?¬9|MG®ŠŽ9d·µS’»æØ|/ žßōZĘķHeŸÄĮ?š%m>šO?@8–›ŚCšo\:JžĆö~Z³K %’šXn¬é;²~؈“Œ%{{‰üšę}‚śWgƒ=UrZ—Qüw:ŸŃcšO T!…jJ£‚“(ƒ4Ū_”ŸßĶžAfĘÖ"hK‚- WĶ”E«pŃlZŠ¢›‘1Ł’ą_gė>š@¶…²­ś@Z½śōFMߚ\ę½@ž/ĀL¾Ÿ”÷~Ä|~N’¾Ėæ’Ŗł7¾ ožG8“Ņ29/b†‚! – ä…Ä„›X<_DĄ}ž)ęčē6‡*ųUż„1bl/> ’5`ūJöķƒvßõ» A>å¼|R ąŒ’˜™óYį+˜óóż’aĶņå˜óĘėØ[»¬ ū]Œ§ŃžqŃŽŅŠÖęVöŠ{kĮ×b—Ń”ŸēTHŲ©¼b£§ å/“¹Įī®”°ĒŽ…5Ŗs5·»YżŅā÷±¬n rĮ“Ä’w&ęŽx.žńŽ ~ EÕIŻ4:H’KD1é<ā’Ėrü’O’K¬…9vņ7Qšo€ea‚°Öœf—_1NX— FSų€{ۚnX,UŸ8ų·, ĒY½*ķ›HĢõŚÆś—j8(<ŽsnĆ®Æ«¦?=m÷·uü[>/ų×ÅĮæ+…(’­3潟`b“ȹü»®’ŹųķżBųF,kœUĆGļ[7rŌyŻ–ĮšĒg ī„··,ųļz×n›,ōE9Ęr_ģČư·ĶŒŃ½Šß¤Qn¾†ą˜a);“EY[Z £[ŲÖķivv&akg+ r£RVBGzŌ-Pe#j`Y©T5}jņ ?lé‚oaå@yNņHI@`ėSŁ~æ,?P ’"ž @ŲĀ/ŚŅOȼÓĪü/g,H¹ńŠHP$„ß Hł šŁ÷fA·?lņ œ#ĒUaŌÖ½ņd¾ZųϜš9$Ę4|Y?ü"xl!ˆĻ•PH>ųkf°Čö‰ę %apŪočģĢ1Ųeß}ĮPž†ń42Y^{­-­PŹCÕ{ÓĮ'3Cµ’tš¬5Ü yć pk<‡Ł5å$¬ƒ'ģ*öŪz;6”f…¤ÖœŌI횤Qģx®IzŹ$< ĒĖĒuįh'ėé„ńąxqƒ@fÉ.É\—­ &f’ŃVQ5*&!3׋ŽI3 Mómi KŹāʀž¶|wĄ’mlóŹ­Š7źQc k¦>éÕ+ ]•‹®Æ5ShŌWĢŠ7ī³a{…æ¹°lČX{@-‘»nŪ ›“ ÖĖĄ_ S@ °3€ęķ;tˆ#z”¾žŠ·:^ łkH»Ä:ūÅ[pZ> ŁŽ{ßžLå®/ÜČ5īšfģT»ū’§Urą’0Ų³Ū–]4žåŖŸŁõ³|Ž$ņ÷,ʁõ£§÷Z8­å¦lzĀż 9XØęŪū-:o­ßWą=ØŠ7m- xW€¹®[°«čŽa`4ŠnJ|….A¶Ht’7ć?->Gö?z’„$¾­³xœļæōvž6 <#˜3óAˆ_»ŒĮī½{ćĄ‡ź°øXėŠć'£’}`-ģ]½Zń“qĻķĻį¢§²ŒĖ"ūG`vß8”µSZ›pK*…‹ę¶į6 £ńPœņĘ‚Ó2møųč“±ŻžĒ¢ @ŃģgŅ’Ū~‡as^Ē+}įŌ“‰Wī¼ߎ°æ“6>8ō8c·żŠźf@®zō/>÷MÜ'$–~ūdüxƽüÆ®WŸCå.{£9^÷ßҹč]Tīš-lÜÜŅ’b-]ŗŹž÷ŌōoSėž{źųæ9Įæ ¹™Ą?ܬŌĖ‚P–:&:/gąČõ-ĖĀ\•²AĶ¬w„ĢvļsĘÉōj €a&KZVįERü‡)ąæšŠƒ™O“˜żeÉ÷,’Įq„āH+(æŽ_{,4k*&łĻ8NÕŚŃćNōRÉńE_Ÿ Z?YŽŗ—߆n/rÅӓčųļäSŠ`C 7U 7—”š“HĮīśõ‰/ ü#”J4ˆ l挠QdńØ[×™²‘ģ_»*)lĒFye**+*OCJ_jļKż° ņ%žŃÖ{”ę>ŲGn?B~‘ŸFĮ¶°4`аU°ś’ģ}yœUõż¹ļUu÷ģūdO& !de•E"ˆĄeŁdE•Æ"ņCv•UżŠ‚‚ʾƒö ČIȞL’IfŸéīŖ÷ŽżżQUŻÕ=Ż3=“IH"÷#fŖźÕ«źéž®wī=÷A$}–„ģAi&€§@€MŸ„@ėFĀŖOÓÉĆł­Žßļg Ņ"ģ4¹ Õu%ħ ‡ß{=ŒĄRŠ«ō €“&3`@ ’«Ą¤˜@ üæś°<Ēņ­į·(’˜I1 `LŒuĖWą½W_ĒĘʵŠ0H&]8qmp’I× ”Ė4 Éū¹)x'@’P\c…?¾O< šßļėž{ ±$"»ģ«alÆćø¹»M?·`Z»ŚHG\²ąZB8–$WXģ )+BJJv…EŹ–¤d±½ IDAT„]HKɬ–Z‚tvK€CžEŠ®ö AlĄHļą¾łæųzŌīlūśĪæżO0_6`ަCžXüżbVē‚‹¾pĘyČŖŽÄ€W½3,„ÓU?zc­ŁL™p8¬h3˜¢€[«`ķѝwQrøPÆūē Ć朵¬uĀ+ŪGžs S2īd±€tā­Ųڇ~2džéĖĀ‚€Š ¤l“Öķ¶äÉⱿ‰‚ś$Ö6÷Āqļ|įlAĄž°€ž­’­‚€ž÷×™ ŲaƒõnIF9Ž`FƗæŒ[ī¼3ż;;č˜ć~„³…Ą¬M›0ėšb“}ž9¢rÉG˜õć£<7WZńjķp|Ł(ūCń·ß\Ü#ń-\Äę¶įĮŅJœćś)Q\žžźžļ[_ąnz :ųHģ•’~ō§śæōcģ‰āž’©}ĮĶxś £p0ŌŌ}’_?+¾t Ž2ŒŖ§ļĘÓ¾S’|=¦šo¶ž…g(˜9Ž’+éŗl±Ā(–Žf©¶šė†LY3yŚÅ½“t°įł7°ž™× ü÷z ŸąæŒ#‹ģĶ£0ÌĒ43ù ÅŪųĻŸ%ų0,W!šp0¤›0©¤e±(tÜE×ņf“}“]Ė›oźDū¦V4®\‹•‹W`榍Ht'2{š€ų§zõ‘ŖōS(Y@¢ž€'æņ/Ņ "I~?Hw€B@?ųO†·ƒVæĮMąWżŁ0G6~–ß·ś3 D‹¦īU‡źś¢Tb‚ˆĀü }A?BPįT?-/ąmmŒ×ÓOĘČ`ĻĀų÷ǾW{÷Ɇ|Ŗ€’Æ1hj\ƒ|Ļ?ü064®…2nҁÓķ Ž‡ė8°ŠŅ”ƒž½źæ| žx‹’¾ÆRų'Zƙ?Éwßœü߉T]\aæŪ4qŲ£8ĘQhĻ.ŠU&ź*D]×Ä\×D\7i"ŽK¶§ˆJšˆJ"ā*²X³t5K•4–«°ƒŲhŅ`!¼~(0‚¼• 1Œ 'ˆ{g¤ŽČ˜µękc—µM9Æ©kōt+4_6 Ż)÷`%“eY¶~a&ÉH‡W½3”%…9ØW&@`ˆ,{@Ėō®ŒD"YkŖHĘżL€Õż¬µ‘Ņi›æ6‚Yk¶Ķ±€ŹŁßŗ:žš±ŹŽéyę‹’‡W5MŗeA²lņXÄ„qęĒŗœ9ęÅ¢c‡Ģ?}t™Ģµe)€¶ńw_¹_üļɒń‰2é6ßŌ0ļk‡Œ{ē ļ™¶€eČ  ;Ē#9›Š‡XĄÖgō7>gōŪż:,g Rõ.‡ŚśzÄēĶƘ®.}o¶–ę’ģ»?aQLä·åŹN𾦕ߌÖ\P/eWŠEØēæ•uģĶdĒ>IpńōHÉ;㩨’ØUųO½6 /ųG°Ų Ąæµ ž°`ņ S¾Ŗ?A, „×ļŚI«ü+%„Ö&²züĪGÄ«*ķmu_½M/¼ ÕѝoH’‚2žA­Ąæ$z””%Øä"DQ€Ł–#?øś Į/oK·ćbyKojA["éUIˆU” V]‚¢ŹRȈ)-”V””¬¼eeŅņ€=€@ńßņi6łZx„’ōq¤‚ūŽŠ„XL!Øāg÷õ§-žDŹv0ü£5 X`Õ§ĶLŹīĻ«ś{I†!(«²1qZ ¬ØL± Õ~@?ų#‘īé÷^@ųĄŸüó=ÅbÆ!ŲS÷÷žĻ>A‡uæY¾j 6®_‡9ƽ‰µ+–C+f_õ_$āI$õŸY£f—d¤÷ĻL®÷?’ĪōX…„+Q÷1ķÖż+ügG$Šč®»BÖ×÷z®łxĆJõņ¢ł:ABøBĄ±$9¾] »ŅNJ P’’¶pm›,R2ĀŹ†ŠĀ†‘¶Š.@Ź%@Jć9:§.@Ą~KõżūlAÄĀÕģ“orźd34"āęw゚™¢'M¹öō±ó[siÜ;’š“Vwģ|NMŃŚGĪŪė'搲 ’Ī&@0‡å; ¤Y o&H„ēvmĆg:ä³,Ō`kźōĒ@YE“饷æęFG©#6 iŗ>,jūļŃsOiŠ…Zl‰‚«Ÿģżž™:6ü’1ØĘyÆøć„’>÷ȅ½¹   æ‚€Ÿ³¶ķŲ!›£üŽĪĪ Ž‘ėÖįi›&ģćžų.ZĆĒ©ÅžĶøŽ3lPIĻt4ĪøéQtķ `AčgŒźŽÄw’ųžV łę9ŃŚ+€LšIÅBś‚©J3YÖ–’įŖšZĀĮ?“ly”-“ö?iʰH8d%bѲuć'~[Åb{¾+ž¼Ģh}{Zg”RßģČ ž{= ‹ µ(ĮP”£%½{‰¾ĄĻĶĻügNCˆ».–5·aÉĘf“&’0Ģ į%Jj+PTSĖ–©d@yE9JŹKaYVØÆiĄNž}„@ŗ’œōvŒŪ„h‘ņ*žiį)īg°üH†t<=aÉ|¶fķ½ĄŚZfƒ!#‹1nRuŗ}Ą×#H+üÕ~o›‰Rżż0ĮŹĪ;łŹ’Ģiw€ ŸŸ ĮĄ³ ŌžMą Ą€1>^` mÓ&|0k–/žĘÕ`ćéh­”µ“pąø.ŗŪ;””BåXъ¾’Žž ¤ĪBŸ¦} ļź’`€’¼/ä:Ž Õ0‘]&"æ"7wµ»Ļ.œC-ŻmR’+;B’+9=-VŅ–®-YY8,„īŃ …–Ņh!$ˆˆ%Čh? ŒfęJć>š„$Ąw!€Ņøgį5§5vN8µ,ŅüĘ»’š*!5‡“sÖ6ź…UgŽf c3Fß’½/|bIąHüŽ’¾(  @šŲ’ζ[Ą0+Ųž¶„ŅūóYnœžĄ˜®”_’ ‹ŲžĒerĆo†.Üēv«k…ĪL͵­ƒ!8^ ·@!¶€żI=“Ÿ;¤cĒK bõ?;0 sö@Õ§sń/UCpŌżK±HŪžĄ£ŠŠÕ†‰‘Væ“󃿅(’ћķß¹ū`Ų¢wš˜HģuŽ»åoŲ” žž’ćÆāåąČÆ»uā½U’9 Q‘ēžŻ öˆk/ÄÕÉn|æØ ×_óGÜśž$č–’ÅE‰Nœ[?g’ōWųOjŒ_õ z’·eĖæĮżė«ļK‰žåj ^Zśž9bIKyPc@BŲŌB¦č!7yæjw’Ö•GĖ¢—ū’€ę׌({(Ń|§×ļ,bæ>:Z=3ćŽ ’Ę€Ų’,1Į²ü©ƾĮæLŠ$±õ§ßßa% ĮFˆ”p”K²„Ŗfģ¦Ń gKVå{oTG76<’k6äŅ’č üē8(@Øå åRŌR ,Śž+żŁQ0ųķߖĄö>Gk,omĒ¢ ›ŠCˆP\Y‚ŅŚJ”Ō”ĆŠE - e„ØØ®BYY©?„T’=ųzä;x‘NŒh؈¢bźė(%2ōż§Ś —~RŅ`¼w$āiu2žd0zB9FŽ-C`ćēŃõż¶U’ÉūĮ8R ŖžœnˆXķ>ßž©vųŚ# •›@{s3ę½ó–.Xąƒ}ükc`“Ń ŹQH$Ä»p“IÕ ”Ģ&KēŽĀĮrz§ŒŠŖņį\sl·ą?ō£(+Ed·= Źņ‘”v”kž³äC³x}#9BĀ%AŽe“#$!„kŁp„$GHVŪrI°6+)„²"pĆ.Ņ&-‰“°ŁŗBZF0ø7]/I0ųI€öīŹčŻóoųMB•L؎mxī„‰×Ż^WŅw(JO~|ĪŸ4ļūcòlHńņūĪž~ń]@¦E tėŠÜR»0€$+Å({• Z@k‡„ śõ·M=€ lÜ[@Mµ÷yį{*:ō"Eˆ/W®}ą¢įóĻZŻ›+@j¾>X€—ČÅČN•ƒK]š@’Ÿ³¶­Ųį[Ŗśx øöۈ¾tī6_*®ÄQ·“`^_*•ŁÕ’ģčO~y2*f>„Į° SqĢ/žŽUį±AW¹ūj¼+ĀĆ×?ŒŪō»śV MX kĻÄ÷:ŚpMY.¹ā6Ü ¤Įøßž'µ6朏Z\réĶø/ü[Ÿśæ5,’ ķūĖ®ŲK ś,Ąøļßļž£|ą’ˆ/Æ1ęÄoJė‚r‚Ų"÷‚I~q”1×н°“¤dQų7 XVų‡Ÿ xÅķÜõ=Õõ “ö‚āag _ķk ąßņÆ3Ųąße)€žU €Są_`a „ė*įQžÓ®a”\cƳӌ®ŚŚ£9ä"˜]Ÿ®ĀʗfA'œ|Cśż’ÕTŒ‘ØD­)µUś³cG’Ł÷īhĶ­X“±›ŗćŠĘ€ˆPZSŹQõ(©.A VCeM*«+ - )ńæą:ˆ’…Ž’׌¢bźõ÷mžBÖ^Ė€HkųہFػޜ×0ŹļżgĄ`ći}ģ<­ ÕõEŽuٛӻ‘¦ź ’0L>€'x•ż.`ć±!?ć'X§˜żąg“§+žėjoüŁļbɂłŠŹ…ŃŚ0Xh£a”†1 £5ŗ»p‰ī¬”zb¤ šÜ?°œžlŁ%‘’^žvü÷z/¹&Ž Ńæ¾N ’(ģI“`iČ?!z~ćr3sńB"N’ō…EŽ“ȱ¹Ā‚#-r½–RŅf%„p„E®ŒeŪFBŪŅŅ&mi„’…ˆn©$Ą²Ó«[śĆ_'uŃXA¦;fŗ%Ut¤f«źŠV?rĪ”ŸŻ+ Š·ZĄø¬ĘA¾$@¢€R»¬ņ“@®$@o­@įI€“„#_`åĻMķØ;ųfPdŲ“ŁńUæl˜5åoÕÅ@¦  ķŸæ„[6×psY½ŁĪųœPpō‘ ŽĪ‚AWę9ŌšS²¶g†Ęš č²j<žī hpāøaęońö?ĒJ8Ø3ź†bÕĪ»e~PZüĄ·C2ÅĆo½‚/lZ‡+ß~Æz2Ö™ĀĆ ?š…·š×įĘŚaųˈ±P(Ź’ T‘üß;źžłvnoE|ü$$>xß竘óĮ+XÖ֌ßz _<sĀą]Ą¾’ƒy fcᦠøež;˜·÷ ,ŅĀn¹Ŗ’± āœ\ūCżgŽ\Ō’04"ą[ꐀ*ü‡ļ)žū™›£ųŸ ė/ųęČ®GĶb9õcm~£ŗaŽ8Ь Ī€‰vlÕ'JĒĮ»Æ…9 &šÖPaµå’€ˆELž(ßY?O'vNĄLźfżńx[›Tž]„Ųbąßˆ ’Xhä’Byč"ū3ĘH&)\­„fü³Āh–JAʅ,]=qŚé‰ŠŹƒ‡”ĖZcÓ+ļ”łµ9`„s Xž#jLÅPŒA5JõiŚ;f|¦ąæĒiƒž@ Ś’ģ\Wƒ©CėPQCB)“µu µq:6“B€µļźFĖĘVø Ҳ‰Ų įķōē€RL TT'‰qŌ ßę/$˜i{BŸ_#@;„Ę.€“ÅŲ Z$1õ 5(«Œ¦XŚ?ł į’IQ˜ąŪ@p߄”ŗ?¼``’Ēģ ’7‹Ē@JOĄ°—ˆĒć˜÷ĪŪxż¹ēŃ“¦Z+(„Įšż^ £5”Ö0Ś žp \‰x FՄd–’ž’EJ²ŗŖņαµĄĪS ž³Na†ijwwCÖÕĮS¹ģyŖØ/«¤Q•5śÓęfįjf÷l`A†Y0ˆLd< f& &†±K”’Į’”‰  RL)…g "b&ÆMĘæU€$ˆ ƒüÖ"’ī#}"I`€ H32ާĻóĀ€ ˆ«Š×ĒwŖ|÷åÕ“¢qU>ĮŃŃį ‹Zń„“«ßśķ‰SżØdĆÄ ąéČ "E`Ö$ ĄžÜĢ KŒ”ĘĄļ†ń~c‚„%!]H@1(ųް s8Ą$I äŁę*.i&x"?Ņč`m±`+J|Ū‚r5„Ÿ¦’Ķ,@‚ †5`„%€·žŹNį­ 2Ē īł±ńŲ¾2ūŪYȊż1–'÷)3•Zėæ^²r’7/K”Mż Hŗó‘ŠOuZżÜcß.b7(ąøŽÓžŸ¶iÜ­gowՏ7ģtÕO›Ę]~ĪĘ1ļ×>ņ”öŗµ·/¼µk·! OēŃå‚,Ūc×f¦f€ņmw+PIŻ^ī”5 Šų‹ķ¤q'PT:€ė“oJ+6€*‘;šźĖČx8€|„å5dķ[Šs›Āo€WüŸ_hFž¹Æŗ”‘-ŲĪc‡ZÉ ¤ś_õČL„ć+Qü\9ų…eį7Ų¤’øxē]±Ēżs‘āéöVżĻ’ߣ -+ń"ÄGŽĒžžŠk1Čgū·dÄŁ’ƒÜ$N«Š“n}3Ć ĄžūĮ©8ļš£æbq!Ā?9?‹wįBxøŽ­^˜ø+®8įBȗųĶ%8hŻJü%V„{/¼×DB“£€•t× ˜ü•ć±dčøłŖ’Ÿõ[ģūߒ¢2TĶļyĄ¾ź’żŒK:G‚øö˜HōicŅI‚@ōĻ1,’¢ŗ®ģ4~Ÿś/ŅL€€āŸŅ €žļ " @ ŽišŃ,Æ Ö0@`”UX˜“G5ģˆōA?ž ‘šP–/öĒžÕ_š¢ū<-Īļ}ͦ4Ų/õ0ĮxŒ€@+ĄgĶŻ ,˜ó>>ž;nŅ…aåSü `4“1Š:-ųĒlL8H: N"­4*FŪ(Ŗé»³9ą”ŌZłĒ÷ņYóvöż=š™ŠžeŸLy@”–Ā޽–€N'ī>;ļ}4v“‰¤Ā%DzÉI!¤cEŲ•‚\Kµl©,›]а+`ii³²-R°ÉD,”„ “Ņ0Ä"āédŅ2mõ0æ?ˆšŖ6²¤eϔձķć«ē4HWń•'b¶”~eŹ…4Ō+ °¾°įęŲjI Wå“#Žėˆ(ą¶Ü °ę wfÄĖwæžIŽė5‘Īy?žĘn/…ĒրŽUB+ö~÷«nńø²ˆģįå8õ ÚHDQK·Ž:ķ­Ŗk€­c Ü, “ Ęõ’-,€ge·…{’ó]¶  +š•x®P[TŠ _mĒÓį1…öžWćāķø‹$ęĄ ĘŒ]„ūų ~vÅÓiĮĮō“żūī~ųq¢æ(«Ä÷Æ{’ ĘÖX÷AdŌ’+ĻÅĮMk𻩻ć˜3ŽeææS×,ĆłnG”UćāĖ‡‚±w\…éKį;‚WĻŗ ?Z7,üx½’Ūõ_gĖVŽ$ĮVéūßĄæŻ£ŌÕŻĄžēĒ#‡8ü¢ŻRFH¶_Ś ž!€®)²čš#DÉģ|ąß#ĢKš­»vzĶi»½Ö gŲu7ük•)źW(ųĻ®ś³‘`R” ü bŤ|ž>AšYj”Y“vY#kŽfIJˆ¦šš‰›F5œĮB”"Ot/_ƒ¦ēß\Ź=±%¼B•ĄHQƒQ\ŽbŽńśś{‹’všŸĖZZńžźuh‰{–eµ•Øm޲ŖréYū•–• ¢¦„e>¾¤Ōd£Ęµ”“Bƒˆ DšžOģ%€4  ķ¢^łĪ;ÖҤšÉÜnŸ_?dD ;M«!hšŖś)„ įwń°’oš5$(%ŌĒ!@6•ßK F*Q|=ƒ“NRaŃGó1’ķwH$ĄŚĄ°Vąō£ •1 Ö®RHt'”\×uQT%QŃŠwß’f2JˆUäI2ō–½[ üē¼x”×) ü§Ā’ˆL9|xž‹)£ŻWĻēłėVC’#}ma‘c[ģ!aĮ•¹B’kŪäJ —"äZ‚“®aM’“-IˈФÉ2lƒĢgšę ™³„“Żč[0•DČč„J· ļ$@X@j‡uzƒŻ äOäkhoųaUĒä_^ĮvŁńŒpšļ©łčGæ®oś{'ŠÓ ń€ē§t•Ļø–Edo ć̲ÜOoņéł/ǚ^v¢.øqģ/ŖZ.½ĆČŲ—#‰„gOywüćĄg+ų¹Ą¶;L೨ž/ØÆŽ’BĮ’/Eśā“²*|{N3^€żź°ß¦\ ƒauĆpʃkš^ņŪž{ ¾oĒåGŸ½?Åū®čĖö/—šß…Ēćz)±ń—ńDžź’MßĒכ×ć’JĖqż•Ą’}’’£?x ’«? gϘįµ%ƒ'ü7Ŗ’Ÿeß’6©ų’@ᢒTęä&2ßżn4vhLyßlš€{W³ü[²ó'mŠ_Ć ö]'Xåć³Į?<哚‰ī¾¬Žģ‡O޽kPĄ?<ßćĶ’žųpæ.šļ%XŒ2č÷×[£Ē~©³~ČqČӎØü·Ģž(­&6˜‘üG`£AŌ`—Ćī„KdGĻĮ¾ Ś ¼½r-V·¶Ć0#VZŒŚŃĆP5¬v$!‘h 5CjP^įKį2aōNķ(­šD…H÷ō§Ŗž ?ążĄš/öšÖ®r°l”—”3”#Ē•¦(’ž Lß4óx‰€ §©Ɣ~æŹ÷ó\ü^ĄSūg€ ą:Ÿ.Xˆf½ƒxW—§čūVš Xk/ą’«v5 ü+WAŲ@ķ.Ń^Ō?ņ¼ļłŽ»¬įA¤LĄ.ŹM{ļsŚķLōÆĻ)C;­#aMę·žäŌ¼Ęźå%KÉI!ȑ2Ó%Ą’ģ!\!×’ģŹˆp„$Wڤ¤•ÖˆDI ‹LJd,+SpK'49Ą$@X $@X 8^H` ¢€Ņ€Ē Ķ‘ķ °yzƒź ĄķĢ£¬"ZwDėó‘ÉÄī¢hó›?õƌw“@ŠESķ5ūϼČX5ēÄīG‘Ž/:kÆ73ō|AĄuõē–nš~ūūdŌņŻŽŒ lAĄĮd}'>gl^쫽 ’3{y$õžūó_ÅT)ńFžą­&¼uÅųŠĮÖāßG•ćÄš9aš7>†?{å’©qßĘ!—†æ’öŹ„ś/$āZ£ Hƒ'R EDč31“įpĢ÷°ņĄoą(Ć(ö^<ņĢĆØz‚’ģčõ?#z”žgGJ}Öö`P’Ss÷Ņ÷ß[ŲȬģēėūļ+¶$ų_)dķ_źž'µłŚdI3™Aā:gē IDATo8Īn@~šĀ!>Ū®ŗiŁ·A€Ł=ēĻŖłĘł:><ųĖ:qŒ•±YŸ%ų×`Q0ų'ü»`į%Œ ”]²“2ŅuYŗĘ*^9iź·;ė‡œ€<ß»:žĄŗGž–·?Ü*ąæHÄ0EŒĄbøņsšŸ±spĮ®Ć[ü÷uķģŽ+ŖˆÅpŲĪćpŚ^Ó°ēØaąD«|Š…ÆĶĮŖ…Ÿ"ŽŃ '‘ĄŗUX±d9:Z;čXR@(ÕēģK ‚‡,(e (BJĄéÖLڽ£Ę—zmŅVš AŅĄÆšĆ“źÕgļ5±Ē‰MæVņ€~@ż×JųY{‰9­ –Ģ_ˆ'ī½³’ó ŗŗŗ •oē§“ņ(žžŠŸ‚«4”ėYżi„`\…D<„4“Ņ`0*ĒŲ’ŒĢžČH¾aףVĄ!Gś}/€Z³ά·Ą‰xŽńÖ“ac¢ĒMߋ-YjŒ‰)—cJqT+Šj×Ä\1W›ØvMD»QIÕ ķ°­\c;YFŖ$[Śeé2Kø$ X(2Z ļ™$H¹Lާ“śBÖąTĖø1i‡™`;œzF[RųŁ ĆWéē¤%ż9AF§Ē¤ž»ļŁŲŽĆÄĮ8æ\öŅ`Ū^½ėõÖĢB­™Åtųy,¬ ­!­CĆ6`4“6IéæĪDzb4Hk&-|ż¤PXk±ˆ-sÜopŻ^֒Ѭq½­ƒ”ró±żµo0ĘRq¶[ēß,“ėožĪ‡ą?%6MžĆČÕ¼÷¤±j.LĄ€(±śŖ9į±®‚Ļ1ŗįĀ8²°§84D@€¤ JĘsßc· ʶ$źīĢoĻÜījKo·GzĪ;2ōóśåż['ēŠŽ0ŲĢøĆńŖŽĪļsnO±C¬ų²T.“śŸ/šį*¤ś?ū)Č’‰ąWlE&Ć«:čØųYq)~ÜՁ;w«Ä1@šśŸ3ŽEž§Xŗśæ’x[H,ß؈cs«©ÅsN§>ņWŌūn»‡t4ć— ;į”3/IJlÕ’‡¢ł›ßĮq–Äņ5Ÿbh°æ7źjLžż©ćŁÕ’Pō—śD¾Ģƒń}õż…‰žåźū2ƒ©ųŸü£ą_ ‹ŗ Š@0«Ų\ś®6ß+½¶Ōš7­ŠølšÆć–ßóœ(d*ś©ZŪͼū NūŻ÷ŗ›Ī›kŗGą‘Š×ŻŪ½įŠĢ.e°Ž<ĄŖœ ųļ/üsš/²”ž½k”•žµW闆IĆB)!:­XŊÉSæŸ,)Ķū¼J6µ`Ķ?žC|õś|C6/BŲ²J–cwk,¾Ä Įeł×C;tlMšOY;¶>ųĻzM€’š~[Jģ1bNŁc7EDhZ¾ ߘƒe}‚xg7ŻI¬[µ«ƀė*¤”ż‰2ž¾  @~b 8ęöi$»ķ_š!ŃT"!8–ś~9†Ą€ŸpĆW1ó HēԌ’s`ŪģsžŁx½ž&°ō#fĘŹO–āÉ{žY/ĪDW{‡Géw“Ic”r””WŻ÷ŹŪV ɤ„ƒ’!ģҾ—`ƒ–I §ųß`€’Žo#Ē +ž÷9&Ēńž¹O5m­H¾ń:̦üz+4²¢ĘśÖū˜ņ¢Jm3š£Ś˜Ør9b\Ž×D]QW™Øra; U ķ[+ek‡,GK%„c¹Ģ’’,{I ‚€£…P.§ŅCޱßI€æĆϕБL;_­9ČēJ\o$Œ`‚Łv¦5HÉ?  …^ó$@°ķĢ$@,’JhĶ„H$kM–NX2JHf®Ą‰d®Į”kŹ¾ÖĮ4c]š•H¦©ś1äµ=žöÜŠßPć,W…ÖĪŽæF^¹ēć“:F}ēI‘]IĒ_)[qć!Ńäšk˜äų;ßsQ)…"€¤_ˆ3ĀEąNÄ×§˜%Fv ģü•ÕYŪ6Č+ły-ĒŁI€–M™sµ4fnÆčå/»7 D!X,ˆ\/ģ+vˆņ?šĀ·ÅČG’gp¶Dļ_÷U(ż’ėEøŲMā|fÄ&NĒ®O}€µ@Oå’#Ėpfw'n®®Ē1æ}o„åž W’’zźæłÓ“dG_¶?;€A?ø§=z¦ÆZ‚‡† Ē÷~z#^€NÕØf÷żƒCżŅ_¬’uŌ’öżS/ɽdŲu šļńņM%O³¾¢¼?|&į.–uɢȒ,²€ĻŠq ; čł·“ŲTōD²ķ“ģĆžŪ%AmDčVąz0dŒÄüć#µW ”hēę€ońāŻ2LĘ_{ ž7€0ųēŲ ĮĘH ĶLڰp!)$ö×ZV>jćø¾£„Ģ~n¦¢sŃ 4½8 ¬śŅ¾`ųļv…U† TU˜ĻųŽy’ŲC€‡2~ųļ’9öV¶“aĪźF4uuÊŲ¶ÓT­E4Å.»•`ņīe–!%RU’ ŹĻ!µ’u_šs°ķ±¤ę}ź˜źĻĮøĶA’„”²æ “cLśg/!@`0˜EŖņæbń2|šÖ{hmn c|Uæ×_ćõžgōś{ž€ŚxŖ’Z{,D܆Öv‰@Ķ„ČĄŖŽł?¼é’Ļc DĖDöŠ>®Ó÷ņ°Õ’|ŸŪ¦čć5ēšg@×ք‰°ĘĖ;†“ŚuŸ[š”Y޼AX””D®p¤ײ„×"#)a“k[Ā‘’]²IŁRØlq@[’¦ką@0Ū&в)õ¤LčQ“ąÕÕĒO^×=~Ü »Üš$ 0B3–n=Hµ€ ”†ą`_¶= ‹“ma>{Ąp+Ąģµ‡SżÖ†²X³“äŅHŁØŠW+€”`­ kĄĶn(@0Ų^?żŽQc¾ū4“Ø•NóŸ†ĶŽõ*«sµv­bj<¤åŸFDö.iś÷×jß?ōƒšbÜVą{}8Ć-™ö™īĒ&æ\r°żŲn³Z;@ĄvĻč­÷?_l.ųhõŗ…ß<“š’‰ óćø¾Ø—(Z2·¾üd6ųošŅBü5ÅļZšš§gļEQo×Oæ:{ĻyļŽtĄ?˜ˆEå,“§FŖ’|B“śŌ‘dß#1ŸĮ–f®‹0­)¢wžzIžįƒ’ģūҊEXķ?ćõ£oš/Ńük°(ü#ˆ‘Š…T&Øü{ąßŃ,µ+dSݐ)vŚł‡łĄ?3£ł÷±įŁ×·ųP&K±{dö1#?’؊ąæĒµv šļCkŒ©ŖÄ7¦MĀ‘“' Ģ²°jĮ,»­[šĮ¬f¼ųČ&¬Z‡Ń„€ąƒ}įy ąUż½¾¤X<”@ Dż÷2*D”^žąS¾e~2Įoš®ķßw`ó“ ūó¦fć 6®jÄ3>Wžy­›a”‚ŅZ(­””‚Ö^5_kåµøŚkŽ» ŹõĘ$ć.Ų0Œ1Øco5šä”’÷zńĮ’97·ų/ <ęC-ś·ųŖ9ĘE„9zźīÖōįc 3†cZ!fG•kbŹo ŠŹDŒĖ¶«LD+D“Ė–«„Ų®b‹5KG‘åj–J‘eJ0G{Lį1”אbbŚ\&ĄÜ¦CĻZŚ:ż¼ē—~g?6HUł@¹édzšäõžļĘxn|©k‡˜6r0üVo^#Ą=^vŌ³KĻśŪ?ē_ż ĶP–ŁO(-l.‡ĆBĘ|ęAŠ `{S­”…•ÖL–H’h Ņ“L€Œkö²¶Ģ·Y­1@gµįŗ `¬‹§Ųķ£Ļś‹ž7ܲĖĖ5—[«5ŲŖ›£kžõS0«®šo‰ļj‡YG_YåO¾ €)ī|’öģ[Č× `n»ē½g/hšāżaŒDf¬čåOvsY3³Ž  `hŲīłāŖŠ:Ž’Žb ½’%%x|ĆZ¼pröūF ¾ÓøO=u»÷µöAī-«ÄńZćóŽÅķM«søĪ¾×p’cZ Wõ?µQ \ųG¼+Į׹į_} ßČīū•`ī¦ øóāSpv°ļčsŃ“ė¾8V»Ų›ėŽ;ųS’ų&lhÄļŠ‘’³”«śß£Æßpõ[¦žgĒ€śžūżĖŽĮVüϾŸŌœ9Ą?|ʇ2'[Ń»&Hė2"Ä PžŗN\æ”PxąHė!"V†%ß(cµŸ«{š±”ž :üŲŲƎś~lä¹'Fź)…tš¼_l˜Āą? oq’ĖźÆšŸ)ŹųgŹ’dY*R³¦ĄęĻ(–Žf —åŖŃcŽ4jōw™(ŃŠ ėūZßĶvؼ(–Ř‹żxźŻhKč lg±UĮ։}’hQ&LßRŹģ[Į¾¢ŅŅ\Ź1rpĮö½Ø(Ē »NĘ”;ŗāųtĪ|¬_¾ėVµāÕ'ńņc°vE7X{xä ü‰P??ąŃ’‘ŗ&łbšńęŽäzĻž’RT æHĆ©± ŸöĪü xż’ģ©żMhZ»/>ü ^ś×ÓŲŲø¬“ńŖų¬ü^­`\_ÜO+(„”“_ż×ĘUp•÷Ÿ1Ž«|†€×NP6†ŒöžłųļmŒ“óX.dPęĘą^§ŸÆ§ÆdKÖ…ĢŚ5pfĻ'²Ķāü$¬&‹/›h G61år4„ ą˜ØėRŌuMT'MT)ÆE@%9¢5{I‡,V®å(ciĒH !ĆĀ ćh”5‹Ąu¾$@I^é:+ pō˜ŪƵ¤»éƍżģ½µ_Œ ¢Æ$@ź> '3“Ač}?XÓ¹sÉ­ļżįŹemÓ/•BošZ÷ĘóŁkĮl=€`Ÿ7—æĆįT¢ œČŠˆd–OĀzŅψ…õ¶t+@vēÄr®¼ÖĆ«öötˆČdŅOģņņ€LĘķł'/³’ėo€°§,ŻūÅóƒV€öQWV·Ž¹ä~-’-h˜ż„÷SÆ/Ń÷ŸdčK ` “li-€DĮZŪyl× €ĮŹĄl­Ž’·ŚšļXž_ėF<“ŒćźŚ18žĀóŅņnsZš\Żp|U+yŅ8ÜyĻU¦m@Złæ“ąŲüĖMā‹@Oš_‡ĢźW>Š’+«Ę›pĒå_Ē÷ĆĒ®½’؉S:Śqå„gā ?ų͟bÕ¤=p€Ņ»oĀ ¾Āē9IЧā²h/)ó=I·’š_¹Ø’©c}P’ūа5`8²«’éū/Dō/»śŸ¹D’j÷—š#ų7ĖN={-ĖĀQ²čՃdģX©#žKvŽ>;žŲ b>ųζūK½~o ˆ “2¬žRąß§ž‡Įø·Ÿ{Ü’Į?“üSą_¦ĮŠļ¤Įæ ¶Ā6:),£Xŗ†+²–O˜||gmķ±”ēūÕmiĒŚŸC|ec®Ć›E²“‹Ęć‹b,†»ŃρæŪ2ų'"ģ9ćLß’TÖÉ5cš?ĄQ£qŲɧa·gōP//ügß_[ėü‡c\M¾µĒTģ?f$ŚW5bŁ££„ +—4ćÅ®ÄK7¢imʧŅ ß«¾zIļŹĀKy.К‚¤„~'ŒÜūēĄäSü5{Ŗž!e‚ßóÆŁ’ŒšŅ£Ļį¹ŸBćŖµ0ŹSń׏ōFūm`|ĄÆ”Wé7ųŸN÷ū„c ”ė'˜±J‰¢šT’ ŽŠ»’ē=¶Š‚ÜIa`¹äÄ`’¾@y!Güē ÓŚ gÖ0ķķyoĆŚsäXūkS§k± ]å%“⨫9¢\ck—"¬MÄÕlk剺®¬Œå$ŁŅޑʐ—RIf&/ ūL€ČJöŸYI€†Źš÷öĻ«$f®=ńŹ•-»xEŻ“"üܵ€ ĖŹ”$ĄĖ+Κö÷®ø·=Y{X±Ż6ėĝƒī芏6nģjˆ…E=€ŽDĄµ­žI¤×EaQĄ\z2D‹É§½žĖ—ČŁkÓžfĢcTŃš³ĄœØ^tķ„łęśźAwܹʮżßU{=>”é ÆģÖ2ź/ADö$Żżōčy{\“}Nˆ ąöÄȎž`¾Žb{gl×7æ=öžū@Ō¼÷ę(Žć§óŗšēģ1‡LʄÕć Z&NĆIĻĪÅŹ °¤āģ½q+u×lü¤ÆŽ’lŪæ›ĻĀĮM«qo¬łÕ_pUŠē×’»Æ\„ķ(^üžuø°ŖŗĄó’BÕ+OāĒĮ×bÅøÆ²Ļ wćZœå*ģzä·pčA_Eą%zž‹X bä¦žēµżė…śßWõ?¼ÅgOżD’6—śæ%’„A D~ÕŻ+°ŲQņ˜Óqi7ų‹čž$"×)ĖßHįĶ•Kń?üK’z€ļz‚ ų×:Dū—€QLĮ'ŪęĻ[Ģ‚Ā6Z©äh[=qņ©NqÉī9߉µMX’Ō+Šń<•„Ķ‹,ŒŠ G—#āl¹–‚ķ1ņƒ’ōŃ­žż”}ć§LÅnĪ@ćņexėŁ§³ī™2†>ī›ØØ«Cćņe˜õÜ3Y·™ÕóŻr?^'õŠsŗŠ>ÌO6lĀ;+× ø¾u#‡A ;bcĢĪÕŲc’zTÕA )­ ÷€æA` H` Ą»§ōŸŚĻ©Ŗæ76ÕÓO€}©Ŗ?1łÖ~^ßkS;>œõ!–² †×ßļ÷śĶ`ćQžŁ0Œ6`c`X§“šaŒ‚ńūüńĢ cŽ£ µG%—BķÄhšCŻŪŪRŠĪō¼ œ€ā )i…>ÆÓūē»×ĻSΉ.ś—ūV(ēywt>I {×]!ė‡ębÖu“:|ų\ÕÖ9–ÅI!„cŁp„$Ē’p)&ˆ„+lV¶%EXŁŚźÅ& č>5_ņ"x}bAĂ½^’°&ĄÓĖ~pĄ¼ę/ż¼ŲźXxʔŸ’¼¼øÕ{0łI: šK ‡= @Qbéxżł= Qŗ{ī5ßnģs˜$UDĘ?vLŃNĢXŪ³{÷õ†Ģ\ŸŅ 2®›łt=ķ°–ČŠHf!ūˆƒŒ^\ZŽ\=õ²µ€ž½žĮ9‰ 8ūxė®wŽél8ē ŅOģōtٹ@ŚČŌüŪ“Ļs“:Ŗž W3‹ Аj’{żœ½/.‹ā¶€ÆÆ- p[Ą°Š[ĄĻµ¶nl· €ķ”śæW¾±o9 ¶Ļ:UP^V‰³Ź*ń­d7®ŸÅeįóWtļ,Łe? @|üŽžX„Ė/8 uÆĶuī8Łupüšńųc_ą?;¢čŹ;šŹ˜‰8:э~*īXŗŠĆ‰nŠ®ĮÜ©{ć«®ƒżn»Ÿ?Ó+Ä~Z~żWœ3|'|ÓhTÆ_…ß7®Ąč>č’įė ”śooŌ’B-’röĮčūĻŽĮRüXj¶€yx³”„cBĢ ĄKtUR~Y-äƒ(žÆ«žę¶ģ%2Į?°m, ’€®§UŠü+ˆn-_9eśz’ >Eć#/ :ų'źcõųBń$LpJ>’Y±­ƒ’ņŖ*Lūā—ĄĘ`žŪoeŻ3eĒØ ;£¢®l ¼=+ė6?#šŸµ-ˆ0yHNŽc:v²l¬ühZÖoD2žĄ’Öį‘»āµgV”½% ­üõµ/ņü¾” §“a-$ŒoóGäåŒGõł`?Õļ/Rąæ}c;Žz~žüūSXöÉRhcRżüAÆæÖ^„Ÿµgė籓ć)’ėp’ź?¢ū‡Į?ØmošßĖ|v±ųLĮßcņ Ąźn‹€0īÜ9PKē"†–UFNŽs/*•CqLkŽ*Ø1qb¬9ŖD“ꈫŃ I:ˆj¶rpĘ6ŠEŹ&Фmį;L€šXųĻ©ž2Ž{Ūk#Jß×­Ź&’ććĖ”ķ $s0r9gi˜>l:`ČĶoßžūĘ®†³=šo%vŪ›õÅĖ^šX3ūš±UżŗČźxæŪ-ßļÉÅēŻÖÜ52–Ņ`v¶3@?ō\‡EĪV€°ĄVj°ūŃ ŠC  ttH“\ŗ§<ŚY5ou”t6žCŽ!)ćĖĪżvÅObī'*°Lf­Ó7‡Ż fż³>glķŲno|{Øž6 k—įßŃ"\1t4^^ń ^©†Sī[ƒwąōųBS#•žŗī.œ’õÓ Āā·Ÿ…²GīÅZćĖDX @‰%C†ćŖėžÄūż­ž—'Ó_dŗ£?x’k8§|:O š¹ūPżĘćøėĄ#pņQ'acvļ?ŗ”¤ūrQ’Ć €žP’ŻŖ’[RõæĖæS’ūčūdIąnmÅ’g ¾¶–Ķٚ1 Ą0Ā’Z!žū²,z¦–D7ąU’-Ėkq¼āćŌ}Č"ć\Ä@“ rę7cU7•³L”]1@šĻ"—©æą_`fŹžE6ķæšÆ Ė@éßøF6]EEՍć'«l{xĪ7–·?BĖŪę{›å‘ ģ…Ŗ$ĆŅŗļžĖb[’±ā$ćŻD˜qģńج«Ēņ… 0gę˽‚!%¾rŅ©(.+ʅ 0ē•’„nó3’=fꎄėāŻÕXÜ܆ʔuج«†E%E˜“ĒPģ¶ļ0””Ē<Åņ«ū T’æē |ń?ÆŖŸR’g€!<µæM)Śš@čźˆć£·ēcÉG‹=°ĪZ1˜½Ÿf°6ŠFyÕ~Å`ćQų•6ifū­&ŠšŖžlĢģ·¤ ‡%õŹFōŽž žóįlŠj-ųR }\§æŸļ^o+µ10P^Ąä=>o¹N!ƒ27­#aMž“ę÷īr’ÉG>š‹ęĪ6I”$IŽe±#¤t„DҲČi‘+#ģXŅr„d׊±+Čņ$i+*”“IŪD’i&€`°!Ć–"°` r^<„H3€üL×HśÓü›/nuźUžńŻßšxõĆŅņ«ž>ĄpÄWüĻvŽ× œ™įA [öŗČ°(•B· -^öŠa;żéŃįŃÅ]Į<–-Œ11ŗõ;nźvĖöUöÉoOŚķā@ baˆ…ń‚é}.ąˆ­ƒ1a&€`)‰ĆL)‰į8PÕzĒliW©Óćó±r¹“Møø¶cņus…īzaüÓ„gēäcčźķµ{Ę`7˜·Ē”x©vøĘ?~śŃüļ'ńĻ kqĪ‚Ł8ińėxāÓošh€9š4<łŌŻŽŗ ·Ģ| ļq–;Y4+ r°X” žčö3±ĻŠÅxB,;ü¼ SöD¼ŗ’š÷]¹?Zæ/NūZµw—ŻšŲ{o`ŚŚ•ųÅŹńś®`=ļ›&’«¹Ŗ’‰PŻš„|ß}[õ?ŠĮwø…Ķ£žI§ZžIdR’Mög%õŸÄ"sžŒk(śĒžzŒ” üæ±ēJęK$cƤüĮ7dģ¾=…õļ½…żOAōf+ø, Lč`Žg¾Q‚0o8[-Rƒ¬čß0i·ŒŽż{™Nī’OZŹÉ/'Ł,k—¬ Ą?¦Hų·ˆķü3I£=šßZU=vCĆø°e¹Žp°īń’ ŖŲ046Ź& Č*ˆąD#pm ‚2uÕ[ ü÷Ü7ųą“RHtu¢fŲp”Vxy£®¶64._ '‘HĶž"‹aŸĆŽ€“,,łą}¬]¶l»’µ,Œ«©BCU%š65cłŹµ0Ę 4­é§ 7!‘ØZAž5 yL€•_ś.HR*wAõž„Ÿ“p0÷­łxż¹·±~ÕÆźÆ5“I­æĻóZ•~æÆßļ÷×F{Ā€FĆøŽxcLŖźoüæ½på_H j\¢¾\—¾Fö†aI±rŁ#é,÷qo;ų÷®Õ×Ķō²+Ž nZQ?”# @–bēŗ!¦%×;“”ß‘ĒX!ū€ēg“°x~˜Ä€öžxH1{֗dB@0A f"|gų§śdI’Õ HxWBš‰ˆ‰n]W¼źOZö>h]÷øE">{Xé’V"xlĆ  Ą xĪ !Ē_oKN‚”ĘēK0ƒ“ր„°HpņDKP˜`>“Hģ­?Ć$æ%Ņ+Ųų3ˆ¬åIpĪ’gļ½ć䨮ōļļ¹·Ŗ{r”F9K #‘16 ‚1&lcƒ—Ÿ#¶7ąŻÅ9¬ĮaƒńŚ^§]Æ×¬_cÆķŀMΈœDA( PN£ŃŒ&vwUŻūžQU=Õ=Õ¤{1ŻU·nU×Lwßē9ĻyŽĪ ¦)LzĒfæzĘ{ õ‡'}[’XŻóLžš%£DĶ#'žĀv€†fĢqK¹żńe“ģŚĘ?ÆzŠGŸŹ2„Ł’ ŽųOœt¦’%³×%Łģ1H’c`8’ōß*†€ČdŒFśoUŗō?łwYžGlł7Źŗ’’sŒŅō/Ķńæč¢Ÿ8žc?ķYf”ōeoљuÉéfčĢī£tfYūt;f±37ž;6o`±Sū„ąßØš{·§°XjīYgņuż˜%ŪšOŻŃ5«¬±’PŖüėx[Ž›Q’č˜Ń€+ˆ—žƒ‚UŚ’VD[P¾±Ŗ$óXxJļjk;¤}ʬO¢tuŚÆĄļīcŪuwSh/ēŹ÷>jj8˜‰Ł‰C°V)¼L/ć"Ö¢ƒ?_"ą@’ńī=»ØŖ©”uJXiSU]͜…‡Q][G×®vƬH„CŽ>–¶é3(är‚|k-(«°”¶_Ā֗}?C:ڈ ķ-ŹHß"Ę·¢õPĄZDbƒĢ8Äj¤œ˜Q·¶³s`āęķ}sĻ|„ēȅ ›ŗ/£sf8ą•=‹š~łā×¾Ś>0ó]"ÖLÆ_{õĒųĀ÷'ÖlīĒC¬+(QØĄˆ‘H… 1x„ׯDĄŽ5%Śvåčp›3ŪkUĘZk „|#Z‹Utfö­E”ėą{Ä"­5AQ`¼€ ’­*UŻ–r€UĮP \PNÄ*Ē„±ćżõė¾óp’¬ō§łÜBݼ ‹ļŖßņ»]I`« |žē¬X:Ģy’Ų±·µ’ū#ū擉o’ ł >E_Zö’ćo§é釐9ēˆē|Šž-OšæÖńžWWsé×sóEŸ¢'6ž;ō8‚w|˜oś Ŗ·‡­zŽ/(ÅŚÆ]ĆUõMį‡Ī‰ē±źŃ;x¼·‹ļßõZßv ˼ŗčü)Ł’Z…l]‹Z·’ĖÄįwo>Žx_œ]Ļ9į›žĶgńš3÷ŃÕ±“>¹Œ­ĒŸŹ‹±ńß ļąécŽĢ:j‡Ö©W’ž³’åĘf˜ģ%é? Ķž§ō¼źžõu’åoĀ@•ŽK«ūÆų^p!(ūŹąæØˆū3ƜSkRnŃV< žA”ćõ%8<Č>Ž/fÕ.‚ćrŲCWšÜ’™*ū@vK>—•Ņ2WÕ¼"ČÓŪlįŲc*G==C²ķ#’š")q-†Ršą'D®EšŸŠÅ„‚’Œ®žU ž½@å{(ń•Ś2}ę[;'O½XDR?;6ncūīĆäĘĒéæĮ­ēą†ChĪ4 ”ĘQ$²įߟƒAąü,~ėI4·µ1ŠÓĆwŻĮŽŁøfŁŖj¶ox•ŽmŪJN“ų-'ŅÜÖFw7Oßw¶d : X;€ĮJ„ĶĢhn`Kēŗöt³{G;…\ž¾€ÕĻoĆq4¦4E.,6.šž‰ų†u/lbŁO°qŻü‚G`"PÉōM¶š3ž €g÷£q!):üŪ “D Žg-ž+¾ ~Bu£2BóœĢ°®’ūüd5‰f-{žG9dČjļ@łˆ“”{žq’ńc0Ū·”j됺ŗ“sŠžŁÜŠVb6vö`£Ė°"$ģxaÅZÅŠ2*,ŠWńgJXY¬•-’ ˆĀ–*L÷GØ@œø]Ī ppóņMÆō,fwnŹik»Ži;²ķöGĆī !n{åCGŻ»į/ž9ļ×.Ččüʓ¦’ń‹ļœó£ °Ö"¢…" ˜PŖ‘VEcLØ&@…$@˜”×ø @¤•H\ ‘6«qüpL‘0/„ĄZÄu’Rū¹ cAģhUuė¾’”—xCunõƧö<µčųAĀ+6’ūĒń¦[ł«KÆäÓ/‰Žó-Ck’Ū"ØĖĪē?øžĮ`ö?÷øHšķĖyĒĪķü“ŗŽžĒ\•|Żc5ž»ś›¼]ĢŌĻõõµ?^Uė=ö¦ćyōųÓ騘żÆ ż‡Hsż‡Rćæ×ĖõH’÷§éßFKÓc–ž.Ī/n·žßHóĒŖĻAhŅņ—;žĒ¦+ģĄō{żžoyŲUČŹ 2­_œ(ŗ?>¾X…n3-/ŲÜāwčÖū‡’0^T“_žMŌ9 ’kGžmųEZ’b­Ų˜\Ŗžå{JįŪ"ųßĻ Œ!›Ė“ĶWāÅßŲńF’ -­œöŽ÷£”āÉ»ļdÓŚµåĆKNŌŠŅŹ©¼QŠåwßÅę²vdūü§Ģ¹?Ą<6ŽęƓ¶šĢęmX@)ÅŌ93i™4‰“YzĪL˜ŚĪb?€õ«·±āįUģŁÓA\—oŠ5ś½ü)l šĶ 9ƒńĆn”äßb¬Å¦ųlų”ž 4ĻvÉ6UĪÆģ/šÆ\”ŗ„ō¼•ž®†‹7”ć’(Ī5.ąČF)yģ,\ˆž>³āōž³[6{÷®]«“*(E-Ē%ƔĒę­ ŹÅs•ŹKÖtFy®_gÄӎņ3Yė”%Čhh-RĘ(-ĘuÅ(ķ„°Ę+ĘŲLVŒFŠر1`ygUFŝ3M(ańŒ–Ÿ­üīēŗņm'Ē”+*4ģń'd~÷Ņ>ŗ+7ż<@ZŖ·Żņž…’ņļ­ŁC:±’ ų‰ĢjƒČąĻh±[ŗēÕ=°į}'oļŸ}bĮƙk¬S§ÄļmČv=zŅōėÆY4åöķƒ¦€ŽˆĮóI5Œ6*­/*£Jv€ASĄ’®€o ‰ū2|W€rC@4ÉBSĄ½5Œ£ZJÆ!6ģ+—4Lš¾ęĖŗ ”w€Ź†€o“ŽI\’§bų'AT’°oĄpĪ’æžĪ>ĖO‚€³[Ś8’Į,8"Ėßy—4OäćÖAuķą‹–4¶rѓķ³«÷ތžĖwóŻĄē}&ńžk·ń(„Ąƒw¢ē/ļ¼»0޵ķ_ÖA²š/—sĆÕÜѦʇæq5·¤Ižś{_įų­ÆrMsŸæģ*ž°·m’®æšy­ ļ| Ŗŗ†ī®N:;vپŽĪ ]Ū×īĄcsełéļJtHcqżOn;P\’Ē»åߎֿ§€ŗ`ęļ5lou_§5¼Mg.:Tōö8ūŸ’ŖPjś·^üęŪ‚īÉ[;ÆżÄĒŖ[æā±yō 8’‡“żĆ`öæ€īO’ĘXq“RƁ’M³ēžŃŪŅznź½z^z…]w=6(ŪŽ‡Øsj™W7Ÿ*]5ņą1†X[$d®õ@ˆ7ų8į¬s™2k{:vqļµ’‹%å‹-q¢Ī:‡I3gŃŻ±‹ū~mÉßŲHą4Æó5’рįĄ2¶w÷r÷źu쉔4 ĶML›=ĒÕvÜ|Ž^ŗ›vó̃kŲ³»kmäĘo±6’ī[‹ńC`o[¬ļŒ1Qķæ 3ū~Ńķæ”ˆ½bÉŚū;0– !żÆ™ØiFśæ7ą?ŗU#FU³FgR£‰)‡ŸčOĶōooĄꦊą0œ9sŃ ®x’łm[½»VÆ-­$/J<DZyåHĮqT^))č ­¤ ] ŗJ\%¾rÅw\å¹ė‹#ž~#R:T¹ż[>±čļÆ2*°qg€Vżķé«;ł¬’ gį„G¾{ž‚Ÿq(Ÿ+äų|]#’ļ™.nJĪ±Øš/r|¾¦žOß½’_~(ń<śł|©ü|å@0•-CŪžÅą?ŽĻ÷tńmÓ¹ų ß従ģ½>ź?eęɰ„©5T5%ūŸq }ī“·Ÿņņ„I“K„FÖZśzŗŁŻŃNwwēī¾īö'³ē±‰Óyņ”÷°Ŗ¾8ćæŌgü·/®’1ø?ZžÉ0¤ņ*üĒŪ’ĻaPś“oĪŁŒ¹ÜF—Sƒ<ņq§ö‹J‰5*ć! ¢ģŲĪoŠōo‹Šx]a÷|쓩ʽśىæ-i÷GhäąD]WpüO’@‰ć’k žń¬Ž<{ž½­Ī©tļ÷¬XMĒżĖGĮG“«&3£v&jų?Ū}±–l¾@&—G½‰€×üŻmüO˜:•“Ļ{7Żt#;·lüO˜2•Ļ{<|óģܼ¹tī?Aš,Ŗ¶lĆZ‹ėŗL;‹šŚZŖj\Ŗ²™Pę_Ģģ‡5ł6jĖ’¦hśg£Z;ł•~č`MŃĄƒJ[!ė`-x ×·FŃ2o¼¤’c’:+T%T4ųÆ8f|Į?Œ‚'šŸFϘ…>xaÅkóWķŲ^øõ„UJ¤ µäEKĮqlA9’WJå§”PYń2Zyå$€«Ä8Yå+’ŽˆÕY'ØDˆ`‹ņōQ’ŪrÓk'd¶õk'|ŲH`–_¾šµæxóŌnß²¼=ŁP±*R ĄPĄYłÕ Ÿ}ēʞC/5VÕ ÖÆsw?0wĀó·¼uŅļVŌewä÷xÓ37Æżėó¶ō,ųKrg.ųļ6éĘ- RZ·Å$€ ‚qk čämyaßhH€}Uär żt ’ *·,:S[Ą’S 7 š†'*ŲŁ’8āŚ’#kųD~€«ŖjųĖü9õ|Ī»üzJĄ.Øåāž~~\SĆgVōń_qķ’9¼·Æ›‰·–š “9ē»wšdņų±f’m•Ö˜ü3rY/ŸoČ§.’)7ĆŠģ’?žē_v77ģeöĀŗ [qüĆS¦Ļ™Uį6¢ThSČēéģh§£}ū@oļīēzv>ŚŌʓGœĘŠY‡Š_)ūŸ|>–ģ%’ąõž{Œ\÷_IśŸO Å±Ōż®SŸ9hyą}+€)Qæ¼ØŖęēĘ„ŁžüC(żO‚’Ųōo…ß?ć¾ ēßĪĪ6tÕķ±ć’šX„÷üø¾•ż ž7Ķ=čģ¾ę–·§Żw,ģ~äŗ–—W=2*üŗy4ø ū<×XB¬%“/}ū ž£ķÆų–¾ė=“LšĢŽM›xų–‡’"ĀIēæ›Öhü#· rĒźą?9åöī^īZ½Ž=įŅzĀ”I4Ol%ć:TՄ«Vƒvlņ£6~ƒä@P4ś36$łŖІ”Ł_˜õ§˜õO»^Ļ7E?„ y~·¶"O;F[éļ,}huĖ`ķ’^’aƄ䒊Oö”p‚1ƒņJēĶ ±œgxš‡š: gį›*¾PÕĪ…[W½¤Äx!  ņʱ'$ Ž#yķRŠ:&“—ŃŒH•kdģ$€›Qįī %6ˆŽ‹÷Å ßq•a-|ōÜK”Ų[O™r×ę~)ē×ŲślĒ}'MūĆĻ–L½sŁō<Œė ę/|毛ŗżLCv÷ķsģG®ŒĮ¼VbG[ ƒ~I€})Iąė'Æk*€š>Ž­ \é„’§ų?@ZTž¦:€bøģ„Ų×ģ’Hą?O÷óÓź:ž"×ρ¶‡ļdˆTxEæ®oę½żżüó¢,_Mī»y×¾łTÖ×ó÷óåųršŸEšŸYI’ß¼šÖ7ņõŽvžóäėė_"“’W}†ÓŗŚł| ņšĒpm’üų(xŶrUYh¬…źl˜“UJPJ”“¢¦¶–³ēräqo­>åmēwĘŪ/łŪ3Ļśõś‡|¦ŽņÓÆØÆüź_9sÅżL€Įģńu'§‚’”Żz ü=bhö?{[÷Ÿ|>Öŗ’ä8ü—‡V®/ĪŚw¹ŁÖ “c.łŸ\’GÓĄ? * l¢Ę±S³iŠdžĒBöqÆ÷ŻīČQf$š_©=cŃōŃƒ’ų<ū ž7.8ō¼Źąß²ė¾'Ęü·fZySÓįÆ9ų‡Šh:_•„»©žšjŒóGķėćžGq®Ń‚’®oŚÜy“LšŒµ–ŸxtXš0mŽ|Z'MĘZXłÄcƒĆ*`Xš_)lš0¹”žu8‹§NFDŲµm[_ŻH_o?=}x/ķ&Ą|ŒļEYżŲ½ßZśłÅēįæšū_ÜęūŃųXM`c—’š’ÉU]Ų3ĘŚÉnĶ8ƒ’㕆S„^sš?ņ˜ CF’£Łsƒ³u žóĻ‚MWŽ8‡“Mʜ}čBƒŹĶÉĻf}ßfM@Ö÷m6šÉĶ“ÜB€k<ėųžq½‚8Ö·Žg¬ņóĘ1¢” ¬ņ<«Lą+#ˆ²J¬Rb•€Čg'js aY)[[ūŃø$Ÿt”ŠŃqÅļė苯÷J曓óÄž;ׯžōŅ[6|üg9æö0G¶Õv×g._ņÉ+œtĒ”Ųb+>V}š°ożA+GO”ń$l*YÓ®C™G:°oĢF斎pĖžg¢[]ƒ“Xj‘@GŪuV²e€Bf(†ŠUåĖĶņµfš²µRњŚ÷Jēš<ÄwŅ’0“kvÆ /ŌA‘!ˆ×ņł|é˜X\ä‡Įż)ūZŹž· ˜>žōķ)=¦³£ģł¶šłŽõcĒ~å1–[Vö¦N3ˆOƒ#ÅŽ`Ö×#ŽłZg’adłšó’[&ņ–®]\'B’Ńļąč+o”Bćæā˜éپ•?(‡[¾śk.;ł½”ĮßlBó?€½©żæśĖĢ~õY>7m>?ųÄ·YS‰ˆk’æ÷%ŽŽü ’…EÕÖóÓ։,ļźdQw'_j›Ę_ź¹1ūŸfü—)#~’ć¹_žwšqŸČf 9rśT*ģė9( D IDATE`~ °V!¢Ā¶1J”#r@)…ń}Śwī`Ēö­ģlßŽŃ¾sƓnÖ_Ž6“§Ī|?/j;^ĘūKśææźžuB0\Ż2ūŸUnā+J9ņŪ`ą’&ų0‚jPrēū² ßiȉƒ’\ōÅ®“6ӄR’ Öoś½·ū·‘ĶŸr'_:RŻü‡ū*;ž[±ā%ö ž• ū+ļ ųß°`į»NI½ļÖŅ~Ļćō¼ø.u÷hC¦×LgjuZŸ‘×/2łU¹<Ŗ‚ģłõŽń’#£±€’ŹX­§_x1ul\»†§ī¹kø””ām^DmC#›Ö®ał=wĪ[6y}s õĶM BOg}]ÅÖb‰«N¹āü—_éÖīīX¹–ŽB7ć2aŅDŖjkČf3(M˜å]żmœõ·›öƒˆ$0‘Óæ?(łOÜæ“ė“Öāūƒč?Ū hš“A*ą’½’£Y” Ō“jDWŹČ<ÉŹōļµ’%Gž“”&NĀ9|ÉŠ~pQųkŪŪó7½ō’“}ˆü$Æ“Ź;®“C~_•mŒ(±iJ£ÄŖDĘ2i X®Čˆ/M  V%J`Šą+æyńꎤ9»óö,ś—k«ŽŚū(%Vk”ō{^Ø$p•łŽćWÆßk8öāCæqւÉĻuz~˜ŃĪ`ÄRŹüF( ą *^§R€×C”`oT儯§ `<ĖąOG0L„ځ櫌'ųÆ·óš)3Xھ…›—ßĘß¾ˆ³>÷?ō”ŒŁĢÓgĀIė×pÓ7>Ą ßĘE?¹šžüwTČ:'£<ū’oÅįŪ×rƒvy°¦†ĀHą?ē Ÿś6O=p#'=t=ėļåāŽn¾¬ÆLœĘßĮ?Œ˜ż/ß ūŽ'Ūžå½Ļ÷GŸÓJ… ^D‘uC€DĻMDÄ’b2Ą­ŖbÖģ¹Ģ™;­Tkgv“ļńų༉”§Oē°ćßBㄸŁQų:{:;YóģSa·k‡\Ńü#0µ±žKŽ[ĀŻ«Ö±¦½ƒ[wPßŌ@]cŁ*Gcc@śIżCąųkĆVq @¹ž—ŌśŪ’ĖÜh)1żS®P?ĶWš?ü˜Ņpk¢+ż^#š?š)Ęüź<ć žG7GZ˜];šW<^|di?ø(œ'Ź9»ł„—T`ĀwM`‹-åB\&ųYČ ,>PøX<Ÿ¼qGł¢¬õ<«\|ŠŽQVį‘Œ26$śÅZ‹čˆPƊQBLy£ˆIGcż@Da5+!‘)b “įZĆ¢“ŲšŚĆm?į;—īčŸń>ć-hzę_ßwčUwąC D“ćX×÷ ˆ2š€ėāxĘXń‚ģdĮś3›WwG¬ų±‚…X—ĮåU h‡'6œ7ćŲÉ×mt£łÜØĄäUExLĮ*2bt&c) .3™ ¾)$ę³—'UM:RÄkĪ4ĄÕH’(9ĪG“ƒ DūXßC’$€ē!øPN@øvIĻEČCLŌ½Q‚Ļs×ĒęóH¹„*€I# R”ķėļEH”“ &N I€‰@ū$Itv I sŅ<»c=“{õ •H€e KūŽK: 0Ö°6nāyąĘOģMģdc,qC{FĘń‹M¬žäį,Żō7Ž’æÜČŽż³H ĒÕ«Ųš7'sŚ‹ń‡Ūɍ^Čé󆮳½ōŚ{v#_½˜¾ńkbö?ŒX½wūĖüg¶–æā¾có£/ė8ž zO?ƒļ߇PņSH‚ū>ØM ’B™D(5ūŸržś†Ž•¹ÜUUÕ†0ïŒĮSd3ŠŒ«pµĀQаW«B‰Uv0V”2ĄufΚÅģ9sŠJՀß¾sūń›6mä©»×ē7l|å%ßv?Ł4§8‘åóŃ Qö’ž—Géj$ėž+™ž„ž#Ŗū׉ꮱćæQ”)ßéNŻS3é=^ߕyģ”·™ŽŸ­£šŻ3tż`ĖĒʎ’»¬_`›²Č¦$ųĆFż‘ŚżĮ aPüGŁ’Tš•Į?„ą?H€ń•Ś8ŽŁĶoK»wÖZŚļ|”ŽUÆs‡GŽz·žu pÕpæ©×?<×ŋNف<Ī@T^ØøąßÉd8ōčcxõÅčėī®t"ÜL†CŽ:¦8¾æ§g(Ÿyš!yņ©  š}ŗŚĆŌJӄ‰Ō77sŌ)§3cĮĮ,æē.¼ü`¾j$šŸ¶ķ@’q8JqęĀLŚ\ĒĆÆn¤{w^¾@}SNĘÅÕ:ĢīĒnžÖ zD^!ūž!D@`ҁś©NÕx,9ē(PĖĘ”'•>ٰüZ9ž*öā5ļÕ4ŃÓŃĻ>…³äØT%€>hāÄģŁÖęoyiAč‹O ŚhI‚’ĄɅ¬N%$°ķŲ „0¢ ¾"šłYˆŹ†!TģPˆÉ„x ~€1ˆ%‘׬śŅł;śg¼Oō3éö/æmę/Ÿ3QŽX›·‚+ĒAū¾J¬ ¬˜ p÷ŚK{&;³ĘŁóØCĪāī/ö»å:֍ür^£ó«gæńį]}³>¼®ūČÆą /ߚŒĪŗn€—ČĀø.xA`E‹ŲL&C”PŸk±ŽųE@F č@¬£³„*€B•TųR©²”ś”‡ļ#N‚(ųqTU×[¾5 ĻCœŲ,¤!ਣŽ!‰ŖB‰żņHRėGŖj°Ķ@¹  (7L‹ī Ę1RƐJ*€£kż÷W\ R®ųSˆ›Ų ē’“H«ėأɞÆaĢ<Ē–+Ļć“'nį÷÷ßĘŻgĪ;oyŽ-É1?¼Ÿöļ~‚·?š;N‰ĮZö’G_`ŹīmüļߞÉ5_ž9_n)+®¹õߙ‡eŅßž”ļf†Ō(Å1RŪæ4š?$õOåģšō?Ž·œĶ†gļķń«ŖŖŠ+QøŽ¢§_į •W8:$2ī ) ”BKØˆĖ°ŠĄ ŃQ™ĄŒ3™=k6Z-Ķ*­—tuī^²vķ^}qyņÖW6t÷ī|¢¾…g,dł±§—žN`ߤ’Å{”&ż/?OJöæd~…Čpu’mŻæVN±ī^‘ž‚’ØīŸ…ŹŁ9]7|śŚ ÷Æ: ޹Źža³ķzäD]ū“CpvÄĒū‰vwū»/Ę¢[”ū@ü'ėžGžcÓæ±€›’JU’ŖüŪųß4kĪŪśÓkž­1ģ¼ķaś^ޘ¶{ŌŃVÕĘģŚŁ{™C{}"&“ļS=§ŖP@ƒclųS„*GćhM&śŻhĒA¬E!VF,¾±,…Ą0ƒ‡ÅÆ ‘MĘü,X¼„lu5^”Ąź§—W:Qń˜‡ŽĻXżōSCĄCK+KNZ 6漖>€eƜŒĖ¼7-ęą#Ž¢mś Žzīł@Š„ q“*€r Vøuˆ×;T”śöĻU°rP&S1†S”ĒH*€Æ1Xp%H„2,¬8  €½¹k£Éž/Ūyøģ’†$)ńGŗn»’³ņ žkķ ĢŪ·lą†o~ˆÉł Ÿ:ģX Iē z÷6tc#Į^(“Ņ£6½ķ_åŁ’į¢”æą lÕZĶT‘Ä?.pŻŠ«„üæą…ź€\^”u)!Ń ĒQd•.)#°6T„>q:$ ”¢­­)“§pŹÉ§(­Õœ]»Śē¼üņĖļ_½f5מpŻśŗÖ-Ÿ?ćż<Ÿ¼Ž}‘ž…Pž•9žŅ’ u’Ń®ĮłR¤’Ł„|ß+ŽćbTdrŲ T˜ŅäøŽĒUó÷ļwæōŖ-ümÆ NøŻļ>ö± ļ®łŗśö·źšU;•_wo~÷EķĘOµīœŚ ×91AA:ųÉōÆüėųžV’±$QŌ ‹c¬ČHąöÜ3z[Z‡˜w†óvŽś}ė6„ķU(³ėę01;aÆēx­£ŚóØ)xTł JQƄ:%d«ŖpµĘĶ8hĒ Ż© OR”$w`ŒĮ÷ņ.Øś­„×÷Ų3§§PĄWš"–#撧ųĻÖŌ°`ɬyęi ¹\ډŠĒdkj™æxq8žŁ§ńr¹!“ẕ(­Ųµu+OŻ{Åt“€ļy¬yz9»·oēų3Ļ¢”„…%'ŸĀņ»īž‚S.iXšŸv_CšĒĢ–&Žäaüńł—Ų3Ćųµ õxJŠZĄ†mMŌāĻ$jżC“æŌ‹K K©ōß­VŌMrĘIś?ŖŻ„c£ģ’^ƒ’‘N6ąTcĘ Ź+L3VT>āyöü§|,Ł®Żų± …p›o“„å* žŅT1 ŸĒ*€xüh"­ ’ IŒ†*€e”–¤ÅŽØ†ąXq _Ūø˜’„e’—UxŻciż—Źö-6ÆGĪ8ˆō<>ÜŚŹæßÅĆńžŁŃĻm›‘¤ńćļ_Ό—Ÿå„ŲńŽwqŃ—ÓÓ߃äz‘Ææ‡œ O^žm¾0cnȱžģėĢÜøžĆś™[Uͦó?Ģķó?ƒF›ż/'FŪö/ł¼({Ē5G\3{ŽaK•RŌW+źėŒ~߀"ļ% ’¢qF?Ž6ųS‡JŒ"ė†*‚ŒŖTL HH*Q„_WƒĒ†ó¾µ¬Ž°‰e÷ܬY{’÷>p™łļ8M?Öģ’Žøž—“Éż£iłēRYś_~lœżw(Ķž+åH žA“„D*Dm¬§hś·"˜÷°ų;->^ §ŽŪ H½čGßé¶|wŖ“ķ…tšä­ĪōĻŗzųWvŠō/ žaPśƒė!1ų/6ģ3ƒ’ĄŖ p“Å*ćYxJož1ūŌž‰ߕvæ­µģ¼ķ!śÖī}ęßU.7L­N‘Ō įu¹<µfšj\—l&CĘ A~9H+Ę>€’t0=ųÄCĪś°t<:śśŲćūQ·‚!³‘́žŽ8łę,\Ä@_wżęW¾ŸŠ¾āė[rŅÉÅńw’ę×A©QI¶ŗ†w\ņ!xčĘ?ұmkŹe…’ŸyŠĮ,9ł6¼“’ēyh0Ó½ąædīQƒ’J°1åµ'īÉhĮņE‚€›ž_Ŗ®n“ÖŌŌ…ļ5­%*HŌśG-ž†»¦“š®’JAćœ Ł†tō?6°œxŻcX‘e™ź”ó{Ż…wĻØ@łˆ“§‚屟g4ƒĘržń’ƒ›Ā’«–VŌ’£R=¼§6ońī[÷Šh›W"ķ’WZ“Ryķ’S®x®C®ÜPgÄså¹Yė£@kT+ńq­QJŒć`•v ˆ16ć˜Ōö€å¦€¢Ä:Ī`[æŃ˜®Ūµxµk>ū«Œ“ßņ™ć?łcó”aŸĀĘ­Ā*%?ŃFŠ÷iĻOĶžrå•_é)4äčÜę,ś§O̬~¾;n _Whč±|ė™Ó–mų‹ÆężŚÅ"¶0©fżĻ>øäó×8䌎2šqk@ČjÄ­“†€Jc3Οl Xn[l 8 C@?”Īp“L–ŒÉ°ŹUåmÓĢņ) Ń¶Œ €¤ `3М0¬DĄų¶„”*€?53ĄV0^­’ŹcŁ0cF’£Ķž'cślģŹ_<¬†-Ü|N#»y×Åū‡Ėž'ŸįklžłOyūćwš»[®ćö»øą¢/±½Ŗ;ļp.ył9~’ϟęi„Ł`²–V„X«Ūś™õßßįĖsē’ž«ŹÆ±P.ėcö?ĶųÆ<æµRjičü?č³…)GsŹ sŲ¹«Ÿ»śéķ-{Lh–~ (ųW‡j‚LDd2!Ų–€QX#ä|ĆĖ›wĖ8śų·čÉÓ¦ęŚßśÖ%'u|vŽāRsK’ĒÜņ/ś–mŻEšKē žpœP`Ā ū‘nż+Ó¤śÆnĢw}¶×ohPĪCµØĶ®•žŁŖź„#śWDbƖ™Beš›žY·ŌĶŖžć9Gžć}Išo|$’R’ž§ō¶i3Žļ™8įü“{×üļ ųÆvŖ9¤ž2j$ˆ×6”µŌę ŌåņL4–V­ØÉf©j®A©ø¦8m‘>t½ĻąædTé9•VŌhM-Šęf ¶ß÷é1†ŻžĒöŽ^ŗÅł€q’iÆ«lĒpąæ®¹™Y‡.`Õņ'*‚’ųČŗ¦&fņ‰!ą yRäūŲ½}[Źe νqĶjŗv«3õŚ‹g~ƒƒ€¬Ö\°d÷漞[¶ŃŪÓK¶*ƒē "‰MP¬õ/·¬Šæ,Jźžš6‡LŻėžE nÕkžSŸ¾vą1n¦cœc“cŹß—¦³;Œ1 {Ōōi6ļž#6m!B%€ŲP` ¬SĢ/FJ€BT2 ŚŗŸaEµ'~¬p•/"ŽņŹŗ!Ī ōæ‚@|ķ±)ąźŻĒ,@Dš³;U6oą«PöŸ,0X’„+:O›tėŗK¾žjqTaūé³~żŁ™ «ŗĮEyžų“ž§ÕÆW_qކ®CžĘZ]Ń¹5ĒN¹łŹSę’ĻZ"?€ @“ĘźĄJąŠu=š°Źu]3ŚR€Č b)ĄH†€•²śū¢Īp4*ĻE2Ɓå:Č÷––¼^*€ņŲĄŽ«Ž‚RWöD,c?©`3Ą–ØW&>IGŖżKŒ&ū?Rķ2”=”Ÿ-n`Oµę)n8ćØA–p“Ī’ž5³pŽ’ž˜Ÿ?æŒ;’s'\ś}Öüå÷Xæö~ŽzķĻ81ßĒōź^>ž4ž}ū{čĶõ#ķŪŃßżß|å9žēŽßsŹ™ēPt”*䐒悽©żÆpĶ^Œ™]/Ä ßŲĮLu•b IłfMoęų#gŠB! £3Ē®Ż!!°³½\>‰„PZ‹„ózś1! ‘ˆŠJČū;»v"ōcLŲŖ­m2o?ėĀćdŁÆ¼ųāß½ķ"–§½žż!ż/™„ŗ’ré’hėžJū±¢Ź„’ŃO8ų/ÄF¾“¬Ó÷Q§õŹk½Ī÷oļC{ŒZFœėßé¶^W-®Ÿl¬ėh’Ł’Jąæ8>’qöæük=jš׿'ĮĮ÷µ1JŁ@”1!ųoŸoóƔ¤Ń)®’¾­ĒGšĪ°Ü  ’!`! ēV ƽĄt`ó8z¬©¤kŒŚ ąceZĆe’ļO|š.-ŪWŠĒŅśoöŸļGķĘlHŁŽZö|3ČÅ_ä¹7ŸĶ5…ib0ūæµ£4Og’æōŽŽ×ĖĪÅóń¼8Ī8’ącłćņŪ9h÷¾ńüCz;;ĖPUSĖ̃Ęq]Ö½°[|Ó§ŽõŌkO\fźµ §2ų2õėž!|M“ź˜ÜXĻ«]"©Æ‰ņ„Ŗ|ŅĪg‘!-’¦»ƒŁ÷½±‰+#ĀVŽP•Vz0RŻ’x’‘@yÅ1ć ža@EP^iC…æŗ‘®e ąæżŲ¾^TŪ¤“7#jvK“ķÉü}9 &z¹"Ŕ¢B0b%ō»ŠŚŠ±"€UÖ:ˆU |ĒVYÄXQ޲J…ß o”VŲč^Š’ØÅ_xŽā-6U:včW ‰$1”LQ"~äM•·¶óčóż ė¾eź·‹ óĄDådJ!•:ߌö›U_üŅ–ŽƒžĀ"™ĘlĒ9ųė_™Öų|·lü¦Õe æ[żå·?¶żü« ¦j®«óŽ›rŪg.Xō­ŪgĄX‹(+ˆmL…+V”XeŠ Ö*Ēq¬‰˜½0K¢1ʄ]Ø¢5eįJ ¾ˆØČ8QėP”Ńh‡^īELō–óD6J•+K±Kµ*[”X G¼°sŲÖ91ĘÄ-Ė8Ē–Ż4’IŖā€Žn\0€$óApLų<ŃP*&,h0CU H<Æu±ō‡ūLUų8ƑlÕ5ƒc»źśšq]ģi"=Ū*ģ˜ ūƒÆ™x¾ˆ”ŖļEeĻļO<^ZaŽ+Æ@Jź8 €+®;&’/’E­Æšé¾dź×Ō5Ģ×ў²}åŁ€īhLėTģģh[owøm÷@éń…čłm×pśźgøjż&n[~æśģīāGžĘĄ©sūC×Q½g'’¶āVžrCŠJŅł?[…½’÷œ©5KĻįq³’AŅCØČ ×ü'³’¹h­Ŗālt¹>‘żG#¦Ņ»żÕ9U_ß “RTgƶZžłŪ IDATqI€µŖ˜Ķ_xP[ų%§„Į’B ŸÉ845V3¹­ž¹3[Xtš$ĢmeŅÄzźCs2Ļ„$$”FDčĶåŁø£ƒžžžĻ äBšo ‰ŌÕ7Jk댣¾­ū-¾ķ~hāŌP5•&ż?TS„’eķū‚Ic•ž`–²ģü.?ÖŃC„’”>GēŠ š ¢ģ`mʲÁ8 `ŽŖŚ9Q9Ė6˜Ā”yĢĮė‚Ü©żÖ¬_ «¶¦ÕżŪH1Q©ī­$ ž ",‘Øū7Ń{ČDkcZ§€«¤žż@ik”2Õž§tWs˜ö™³?‰J×åwÜæœīēÖ¤ž*FÓŖ§3«vV„åókŚZ{ū™»§‡ĄœĘš#Š/CPP2JÆZŅVó•@Ž0^ƒ³ ]ü—ĪR NĒ”.›eJ]3Ü õÖRČē)ˆ`ĖŁū üzō1“LšDoWĻ=üą°ąą˜ÓßFM}=Ū¶²ņńĒ*œ@šņyęæi1ŚqŲÓ±+" RĄu…k/»ĢŌk)=ZR?PĮÕU,hkeĆī. ƒi¬T`˜sA"„#P?Å![e’÷ ĽęŃFU£Féņ“?QŚŪøĀ%ŸŒķõŒęR†ł{¬°Ak%’Ś¢ń@®ūÆōY7$śū æ?$Źß'"āĢmi1;{ūmG®@‘°X Åo%$€( «4‹² +e«Ā}$€čAĄ#J(z½(‹Ųļb0ž2‚3ķ “ć…I5zŸŻyś!~Ćāͽ ŗk}puL‚(ľ¼gIĖu«/æäé§}±ŌĢÖt-hzś{—.łź×Tõųڬb«„õ‡5ż+æõ•½s/±ˆÓR½ķŚö•Æ,šššv'£!ü¢IGI€šŗAłXGŠ&R=:!č·>"Nś=/'z:b“֘Č)A)(hÄ*åˆņJI€“ F… >Lš‡”ģ  Ć˜šZb›’r€Ÿßq %”ļTb •BeIżččŗ3@Į …h>vŹÖ²Ś • żq 8eõ§Ž žF‚²ć¼ā'V\v2-@˜tģŹ#1  7€Ä$@°³©®‡¾.¤® *ķ C‹ēJćņ$m³Ėž—+A’ŲņžÄć„ę¼øņŹ.źuˆ7peā²\žæ?³’ģņy2ū’ņīōģ?ĄńŌŻæaŽÖõ|«}+ļÉŌpÓ„Wqo¼é…<ōŲMģźźąĒŽŹĪÓßĶsɹüł ł/°¤s—Ļ[ÄWŽŖ" Pvrkį¶ü«iuŠNt_Fŗę€p…·×°”32Ō{`?€’ŌCFƒ·GxĶióT:OĘĶņŻĖ’›‹ĻžϬzŒ®žĮ*āü—ķfŪ× ž‡š01ķę?”ÅßŌŻtē½P 1 @’õ*! k÷ŹZ±h+‚č4ĄŠX%8bmXÆ‚~ ˆEL’HģG©!$@Q B•źYżJ÷’S:sSߜܮ“gnķ™§×wæ©õ‰mg»lćū/~fŪiŸīõß$`[«·ŽzĮA’śÕ¦Ü“2¼bQ ±"\æęļNZ¶éĀ«ņ~Ķ!Žä·/ž|ĻW.:ä›7Ōø½>„ė›Ńhcšm(üT"­ˆ³üįśGćXƒ ;ˆ£ÄI‚˜0_-b)S(/©\wP ”#JCŖ@Uāó£’ @Łt€VHüłSQATį£H¾FŅT·¼üćśYo-Œ¤ØDĄ z¢RŒ§ `)ƒ$Ąż K+Ģ{ œĄž2’Ū—«ó’xʕ?ą¾ųIŽm sŪø/¹/ė ßž×üĆGißµƒŸ_ž~¦üėļų6 f’_XIÕļĄ{{:łf}ßüčgB„ĄHµ’iŁ’d Wū_~äŖļżėµRӕR˜Ų0jėēBs?,lŪŃĒĢiMį‚2üÅĒ*ÖĮ…’©h„ä@SƒCSC5M¹<µĶŠłÕŃŻ3Ą®Ż½lߣĶöķ{ččĢ}Œ‰ZD™A‚`ʬ9n}cÓ„O޲üĆ«é¾āÜOq“[öŗGćś_åŁ0iąæ|L%钐ˆ>™Ó¤’ŚqHJ’KźžĖ¦ń}«’/”’@S§ .qŪ®¾½°ū„żžĖ·ŪĀ{Ņ·é óÜ WĶpŖ»ĘR÷_ž£(Æū/‚’2Ē’ü+ W> Ä(%ĘWŹVł>j “iÜ>{Ž'¬R©vü{V¬¦óńēÓv a^żZ2Ķ{uü¾FĘ˜ÜÓĖ, - õd2•l!+Ēž’CO4¾ą?-¹D)šš›hjn"ߟcūž.^ĶēčĻfJš/€›Ķ’© S{vw¤\Uā±R,:öx¶¾ŗŽŻI²  üDZö¹g™6wMۘ4c&Ū7n(›÷@’)‡¾Fąæ"Å»–,äĪ—^ę„ķa9±µaf?„[Ig2ƒåd…š&Ž¶VÆųĘ ž‡æ–1ņƒ’źŖ~š¹k8aÉ©,š·„W·¬Ī3ą{÷ÖńȎQ/vĖFŒė¢ę¦¬ ]­«Žµčžß<ó¢ŁŻæ‡ŠŠB€Ę±¾o­U”DĄA!b¬e½’Ÿ½ļŽ£ŗö’Ž{gfwÕ«eI–%7ɽӱC5%„I€H^’GÄį%$¼TI ż„Ńyō$$TƒĮĘ6ī7Ł–-ŁźŚÕī̽ē÷ĒĢģĪĪĪjWrĮļ}~‡ŃīÜ;÷Ž™m÷{Ī÷|SÄ`’Õ ¦ČLq²˜bˆ[!M ā,® B\IĄ”¹;zäӐ–ā<=€™5Æķ‰ÉŅÆ½¹ēāÆōÄ«Oė‰WŸę½,Īd_Eøż„SĒ<ńȌņ×ö)gvi@&8hw’„¢G·|é֞DÕ9Pīxö’É?ųY]hĖ€āĢtĒ‹S!`™pJ2.œÜ~ϼŠk ŗEŗ Ä„!]—0==tŹ+h‹Śm†å4tŽ„iSųƒXĆ- ˜|īÓšŽ¦ˆxÄ#|r“µ‚Ģ/Ųß öż%ŪNź‹>ßR”…¤x €‚WVݤŌfĒŸ>yü³?¾éŌ+züZh²‰F–«"Ą”Ų’1ĄcŽp8¢’@žō’ā<~Śgōæ łE’ Ü ö«Ÿ”ī`&!<×ӁŸ®ų֝r© ā­xĄécėź%x½³wæųšęž‚ŗźœ?æéļĘg*jšõo܇‡Ż±ó‰žg+ū`XŃ n]]>ctķø9\Ųåū"”T‰?E€Ē_TĀŲś2ųw"žžcŒsųOõ€ŽĮ8:ūśX):CY‰śŃEh_©“*Q[SˆŅbšā ±XJŁŽ„4”ctm­č:`¹ōޱ“ńzQ™ķĄĶ—ś?ā’Ž=ržŌ’ Õ’|©’iy’—ÆRÄHŲUÜč?ø`©7Q‹ˆģ.ʒV983FŖeƒŒ.$…cXč`¾y’<—č³CNžr–Ź"a*ā ”¶¶L»Eéśč {Żæq;¼“4Ø)§qp4—“ ÜŹ'}d̰$Ęōōa†iabY1JŠ ‘ĶŠępĆ’Ź žż .üg̜7ų÷O˜Y °ˊ‹ŃXRŠźP}q ņsxFž»zDó[į{p {vÆ@SĖd4N™ „–¾ųw$ÜHõ×1@ie5ŠĖĖQXRŠ7QšÆéČsņ’¾Uešļg «+·$öõ¦4 ŒĻė’Œ%5:B…ĀīģžRšĆ;H p$Ō-Ģ`x~rŽˆā’óžųw–•ćĮ;žĄœÉĒ£u’„ō0īųłēaZęˆE’2}Ž}‡rĪ”užœoźōsœ>ŌŻ ¬4ów„éœk«Ź­ķŻW ē“G MŪWŒˆŪĒlĪ?Ä@L1N‚ˆ;L²ĖŪvõĪ쓇0JÓģč5Ö߅–į«_~æ5Ž’—wbܚ•xThŲ|õĶųōäög/1Väé—K+żēxü\@Pōßė(`8m¹nōaąŁ_Õ_zņ —’˜sŪPYš*ļ79ā ›PSU„ĖΟ €ŁB~NĶļäĢĆp?RšŠ‹¢s R–]ZI§“óWJI€”sL”Ä@4Ž}ū{жæ{öucGkR¢ó@¶½·aĻÜ3ā7Ī’vēŠžQ’½'Ļ*ųżw8T’=Ńnh©=· ī*æ«D&õß« ŸPÄ8O’\!$Ņ$ÜÉū?y"¶ļÖn²0Ąlįß_”×>ćĻū'!Ņ’5Ź”žūĮ?10®Ń?_Žę“’]šoJM0Iąßæ¾Å[wbŁ®ŻiĒOKłT’‹Ź5TĆA8 ©æŽyżĻ³,l$ąŸ1;k,ż`Žsrœž$š”ćNš_Y6 æŗćq47NĆŻæ¹Ÿæśxułßń•ßąĢ•k1y śPł»äŗwYēÉł¦zšÉÓĄkūĖŽžhü/+ג©… 8,.āšĘā\ćqĮYœé<® Jč‚L”ń„ŠÉ …õø0Č`’ &C!nq®L!&ÓHc$„”éLŗ¹žĢa(ē¹Ė`œ‘¦±ä'…)éT°MqFÉ1ø0- ĪAŲ- ˜ÆyŁ¢Ć8ī‘“c* ż’UĻĶ<Ķ×v¬”žĖ'ś_†ÜŹ’®iq0·ō")°}ʄغz1^ļėĄ].Żæ°$µŻhžŽ(8žÜ¾µ·¢üÄóš–?śŸņæņōÉWł?=ķ”¶;Źž•µčļim¹¹øÄ®shN%]ć0-Īķņ€Õ•E(/ Mš/™ćĻ’€ÉJN¹ÆĪ(z””(š“‘ż—Ņ…Q¶Ź)QZ?"8Ē"a™SFap0Ö=Ż€ņņ >ŲoœłÖ?śĘOšNÆź(Ɨ#•Kų/źæ·ä_>Ō·äßPŌM¤S’aˆtšŸ…śĻēL§€m\A”Ņ©Q š™¼p“ä|mō·¦ó’V·?cąÉ²~nŽ?„Ø’$xųNąĢ# 芾yĮæ-ś§„”LOX$˜Åyė„IĊK?tŸĶĪ“=łČĢEĖ4é˜R:…Z œĄ³ ‰惣ŖØ"/aæģ–¶åg›ŲäńĢü=™·)żXZsŠ&ŁvƒFȘ0uŹĘĒĀ;¾Į®.ģ_±)Ź* ؼ„ķäō1 Lē¶8a’`„žßė]æ”óų—ŠJ‹Œī%OųŁ,¬l­+„ =Ž[šĶ¶KĒæ¼ķŚs_Ūż‘/i»ųœwŚĪŸ×Ś×,ZŖßŁ„‘•3Ą+Čįµ£ šä ė18ØPZV#:ē±ūw͘± zć § Wš‹ś?”źæū‹ † ž{ĶKżW¶xNŅó®<Ō!Óóø4Mƒņž.åCż÷,"üĖ8%ßŪ µ²uŌŻž=y’¤ ęWŃe>šļęż'@œ“`ŠS˜$É”āœĄø2‰“Åł¾Śśł„ēŻ3ŁCŪS/Cų}żg7üGD`!#bB“45 ±®¬ÆjēšžŽCq¤ąßŪß7V¶ vx47 ž¹®ć¤/ż¬DyČwrźŹ„a`ś5Ÿģ]¶4šŗ)mX‹¢Ņ ̜5“ē‡×aūĘu0“JņCƒÆõwuaò”¶„ ĪZę·nˆĒbŲŗjeĪūįæw @g[,Ė‚¦éØ={·½7ärrEžē|ątŌŽŲ±n-Ö½ż¦]ŪéŪŻŃÖ­›püŁē”“Ŗ S¦bĶƧVXRŠi'ž aò·į{ßwšļ6ĶkØCXÓš÷ [’/ųgŒa\m-ŖŹŹ`hŠ Ń6ø™IŽ$ī8Ņ„“Fžup7”šTI•Ć.ś—„óQ’Ó&ĢĮß|%Eeųś½7įéWʬęłhŖ›ˆæžķ7*·ƒvįüsŠŻ{«·,Ļcł‡üēŃ0²®JA®^1÷°‚L'³6½¦ZuÅK¶ļ†Ę Ņ„°1ā:3F–"‚©ą0C’`1F„ƒĪˆL(č\(ĶdP:A%X$gą0•Ņt²Ėą¹"€¤­ ģ„RŖ4`€( 8K÷ŽhŹ’LshūK÷^2éÖ æ—M2:”ģŻŸ_Ł|Ļ Šƒ ,“ø¦3MƒnYˆ#ÄŪpŪ™;»§]•įŒŲ[w¼ś’oĪZqłŒ»’£”p]æi ŚkŠ5Ąćš÷ šD|X‚€”…@AĄPš¦$ p*€_0H4°u pSü‚€®€ ,ż  Į@KӬ̱ ‘J0u0ĆĒ]ŗlʧީ8ń&M^:ŗpÖOÖn|ąū!OŖ@bĢMl€7`0 Ö£įĖöŻüE¼”©ųķ~öų“6FūĮP”ź×ƎŲ÷§@G˜›£‹V½¼­gaéĆļ~gŚ‚ń~ףĢĮp’_ 0‹ó)‹<_—¹č’žč’P–ų_6ۙǹžč’p¬Æ7żÜh_źł »ķ;ŲrĀ™ų ²Šų›{šŌļEĶ`ģĪpŻ÷¾Œ4MA"ł£’i ¤=KF’³YóoXęxņ\jR|0ŗSpžJąÜ”ž‡tūÆąū;¢©(?cąĢ'ųē>w>IŃ ÄmU—ęoGóeŅ ”„Kż'/@ŁŽš§rœ“e3kj nśÄ|ŒŖ*€R ŗn ®¾©vó²ź’yō×øĄ½dégFEźæīqĮzóžsR’żą?źækÉČæäƒ+®ąć IDATT’“y’H’Éń€Æ<Ń’”Ą?˜qę€sPiĪ•IÜ4¹čŖŖšŲ3zōĒš9T ūž~V)§ &ŠRŚrTĮuyĢ›‰ĘśŃc°JŠ1ƒ3§@VŒDx0"?<šEżņ’,šhĄCƒ˜sż(7ėž+ā½½ą&]ō!Ž…½KßBūšUé ō­—z:”–,†ŽÖ†ęYsqÖG®Ę“NF(\7ųøŪa!Dho\¾ –iߏ!Ą?(Eˆõ÷ E"}²=O[&Κƒś‰ö^zóŠw°fÉā4šļvD±ōļĻc훋±öĶŀņšŃ(«®ŠuĢ9ķ hŗŽ};·£«}ʵµžĆž‡¾NoŸiµ£pž“fš€š€“0iĢ„uŒ1”•a|ÉDXMż·Jąj#2÷Æ»­£ŌL#Ž`ÜvŲOrthģl†3Ļ0Ą?€ć¦ŸŠß.z EÅųŅÆĒÓÆŚ:ŝv$é’CYEY5¾sĖżųĆ]Ļ”¦².xł¹®i„ą?Ū÷ŻPc䜬½¹¦ µz9(ģ¤6NmlЦŒ„,e("CJRH™0,‹B”€”$3¤© Ė„n)©%$t+® ©H˜ BĒćJ³“qS—qKHIœgRpn™`n@A õ{/„ķģ÷§@KAsE,#@ˆĘĆŚļVūš—w\~o\4h½ļ~hĀŸ¾rź_°ĻC²R•tĪ{fūóųöÆ’°åą¼o&dxRXX;¾|ķ=ē6żīźkf~ķ¼3šžtuYØż¹˜Y4÷Ń5·Ońˆ½ēHÉ½–– l(ELwR”³_Öuf‚Ұ’tR #8ńS!ę“Č ł[2ų­ ‚gł˜—+āO0}ωą9\ pŃIO’łsŽūSSõ™/i¢šr"¤—Ż8kźĶeŽŠij¤ü×ėļ\+•¾`TįŚk>{üIÉŗµ±Ķ̽جƿلĖE"Īł`²l6,˜ cžoK8&G*ś’Ź!¼C•žó[®ŅMžĒ‡ČõrG’K=Æ½ ū*FįĀ<†ßzK–½‚·- Ŗqn>ėŠž{ķpF’ū 0nölę\œhӗmŃ?Įģ4€°Ąą …ÅÅ”4ą¤DģČ’Įčb ]Ż‚PIG\°ļMp}’ś²>Ȏ¹Ńޱ’Ŗ*"øéóńÄsėšöŹŻ "”•UˆX4ōŸųaĒ)W|.~‡V\ÕšśŸ¼‡H„—żōń4ęF®¼Ō’9š§ä(?õßcvŚ€–ürq”÷ļ‰ž+"F ŲūĄæ!@ZŽ?räż+7<÷Į žĄQü‡I’Y–Ät.JXxAAUǘ±×ćßo¤ö?÷:ā~išÜĘĮŃR܂Bqth’š¦aŚÄ&ŌŖ l·JŠaM-†čė‡ŃŗĀCiĪnépņŠĄŚ ‡žó8ĪY-—\ЦÓĻDoė.4~&¢ŲņōÓYĮæQ\„)—_R «’š;’Jƒ×„$hĖ }ČY7e:&µ`ĒŗµŲ¶~5Lwc> šo+ńŅ#”qŹTģܰ>cŽś ŃßŪž²‚8߇.šOxźÜūĮ¶’Ģ“õ1 ¢f4ZęĶ“nڈM+ŽÉ<ĆóžˆĒbŲ±~}˜sĢ=ż,DŠŠ@Js„$6½³,ż.5šŸż:3ƉaņčQŠ…ĄÓk6&ė…—”„” £F!cg'ˆa#„‰åŃ6°ć@25q€I8ÜggĮNZAŖS֋ĻjF!OQ’sŲażń<Ć’˜~ōå?€3†/žąSxiéó]3pīÉĘŽŽV¬Ś¼,Ēb€o|śæP^\‰ß?ż3ģ?ø7Ē[?ē»/ė<Į‡†žóš'½ÅbP«W@Ģ9.³n%c}°yœģŽÅ©­§‹D³Ié`diDĢTĘIĘÉöæ+ 3¬‘Š+2tŽ4#W@ˆ[ŗ"²KX†A\I0r#—ČØw/-Å”„Äųģj=©¾.€sF¤ĄŽ=pVĆ«;Æųņ UŲĢ@ńq%ė¼|ŹŻ’“ÜĶh°¤½wеö6—<¹õ–›{«?!-ŗ„„|كµüü­ä"L›{O©ūŸļütŁFÆYyö’lųü©—¶|’õ4Ŗ»‡ąŠįÉu ˜D<&ŻŅjŒ;ī7S~€fY‡©,ąįbųĻʼ,€K>uBMéō[t9;³'+>±ń¦W­æX,€h¢śCD’ōķg½ćŻuyY›Z/2ŠšL" `°·˜3؍{Ą_°¦)ū5JIĄWvZŽsGĀĮ)×ńžŚ1Ļpķh‹’ŠE’]śWGz›ŸžŸOōßŪ~įÕč½ēOųhy¾(¶„Żš-¬ĻKł?ĄĢ,‚!‡#śńk…°’.ųąB@×m-Įķööƒ1ųĖüqĪń?„€ųWŹĀ{;ā™lÄCO­Ā3/nĄā·w`õś6ģjķBoß l ļFõ½Ž™¤ž»š¶€ć@ź#‚”s\uń4\żįéŠuf³Œ kĪūĖϊž_õźÜėJ'!Ķ<Ń’¼©’ Lł¼ ž¹ŸśļéĆ ‘¾_ō_q-Ł_)büeń(€ü› ĢżKR’}ąĀņF’=ąŸIĪŻr–„„R:W’øE`q®ķ›ŠņYāĀūöw xń-Äv •–åĄŃRŅ‚b½xŲēŽÄŹJŠqźœéYĮæ×dqbS›;ÖØŖ!Å²ŅĄ0RĢ žG;ą?ķQڐ©'ūV®@¬«Mgœ0†¾Ż­Š Ā#øO§\~Œābģų׋裵3Ėzƒ×E½Ż ·m{”i:&ΚƒÓ/» ć¦LOOŲL›=ü»f™&Ž[½ ŠTڼœsL=žL;įdpņóߔʺ:į0ˆū÷e+Ų‰`ß[.fŸvēčļīš%‹żw&p ×HŽxśIģŽ¼ ܹ¤5ć 4ķ˜’®MØ®ÄGęLƒ&t!0»¹Õååąœ£(AmUź3ÅC]Q=ŠĄĮ“Lęü„Ų~c–ÜŚ%Ł<ócĖĒ Gņ‹ž5Å’|Zņ’ē/¼ ÷Žž'Røł»M‚ųĄ¼sP^R‰g_{dhqV|š¤‹qĪIĀŽ½ļᾇ¾;2šŸėŽ.š?‚]'€¾Øu«œ`„ÆŻ¼ą’i“Ø(\؈ i) !Id„aI )‹ „ ›R2]&,]JŅMKéŹdBJ%”$‘H(a)Ī•$n*āD#N Bē®( ¬sćŽ. °^A?Æ( ł‚ļ¶~ö UŲżĪ÷«Ļ}lś>i™q\½“óŹ)Z’õ_¹ą?¢E×|eĪõ7\<ńž·żż·Ł“«—>ū{ǟM‡ čs ł ŗ,æ  {üXcÄ|U«¼,€ņÜĀ[Ļßńģ˜Šćž ’¶…ō²gMȟšä–«‰ų„ņpėSAēTø÷å '>“ü©UKZæ–5²rƼÆEy‘˜÷‹«Ę¼™­Ļ”Ų‘Ģfļ;ņwģ˜Ģ&ž·Čó¢œęk;–Å’z}}†#žWži$=Ś^ČĮ“•OMN>›Īŗ/Ķ>ūū $­$å’3Ņ£’~ń?ōŸi`:†żwP£R`īß¶u½ęųś“?nč:8(,¶śæĆ`ąÜŽŒ5Ō•ŚĄŸqŅæ]Ėö`,Š„i%…ū¢±8Z÷tĮ², Dć8p°­mŻŲ²ķVÆoĆźõū°}W'ö·÷”·–iA×4'eĄł‡+ rŲn;ē#Ō.Āō–QŲō^śśķœa„ ÷nWģzĻj8]móŽ+ĮĮ²±]\į?/õŸČ¾ē®e8˜– q»ŃG܆¹Ee„ nųØ’$xzōß雤žsž|2 ސH>WŹŃŌœ ēZƒ ŽžĆķą<ü;y’®®Ą¬Lź?˜“œ“ų·”ĪaoX„•€±{ʌ¬Ńt»ŽY‹ž•ƒš†4†I%Ķ(ÕKsw>D㌔yÜXĢl]Ϛ,h¤ė°*ĖaUW‚) MhĖTü’Cż x•¬˜ļO0ųϘyŠ’ńžnȄ‰Ę…§AYŠėė1ń¼ Į…@×Ö-Pī ŖFįÄ/}$%Žøū.XŃ(XÆgV" }?Xl¬² \×Q]߀Ńc›0Š×‹h_ę:Ó/9ÓXę¬į¢B4Ļ™āŅ2MCĒžŻA#Ś‚}§‰HQŚ[waĒśus ž`Ņ침7¤Žžū ˆõ÷g,7»CÉ>n™&ŠĖŹQU_„$„ŠP]_1“ša&āčėźō]Cę¾eĮūZ ź ü»VZFCY ŖGÕ`tU5J SæŽŗ¦” B’ą`†µŠCňÉ>XReķ £1†dčß;mŪM£˜Cč,7ųĻg¼ōÜż@lŠ>t幟Ā]7߇č`7Žu–­{#­żÖk¾‰ńcšq׃_Bgk)+©ĄĻæś0Ā”¾šƒO`÷¾ķCLœåݗ϶?×ūķīŪŠ’GbQ0%Į*2ĀĢŠ„h,+1×ģļf¤’1 ā Ęī$¤ŲAGnė8‚˜FÄČŃœ‘rŹļā`©4Q@Ą ‹xD9g”¼ ( `d×ūcŒabłŹµ:ƙŗčžśĀM=ĄA@Ø”Øą#›æxÖŖö3žS‘VRhtæ­1«3fĪ<8X÷ŽōŠ%»€” „³$SŲÕ=£bw_ˇB"ŗķų†ē_ƒ#ž§@ŒS° ·$cÄF&hJ¦l=&Œ”  2%¤'zB<3Āop·¢ķO$–MP×R‚€Jy’Üž¦ƳzÅ Ā•üŅ…OŸ}ņŌ»ī/ŽŒ¹…3Q‡œĘBµå3ļn’łbļQ‡€MŁĻ5X¾ļŗźŽčäĻVEÖŻ;Æé÷¤k&ĄĀ„ķė÷\ž¹Żs§Œłž2£I1@3ę †$0‹8‘ČĒŗą«;-ĖøĒ‚ąūĪ8ŚāĒzéæä“Šōč?ų£’® FķćƒNĄÅŸė4¢’ķŃ˜w®µ½§§[Śj’ ųB dˆ$ą`÷ fĪ&ˆģāĖ–bčˆ"aŹTĪ?)”•RBJ %%¤ržJ ©¢Ń8vļķĘ»ėŚšĻ×¶āÆO­Į}æ} ?żõ[ųÓ櫚ā«[°bĶģÜŻ‰xÜ ĄœŗO,™ą¤8æ²u5Eøż–S0Vm²Ü a„µ¾Ž²ļžåĒ”öŚn5õ?ēåCżO>vŚ’ŌšK\󀥦žö…_õß}ī„žūóž5JI€\Ō{öƐßŪč‚oŽæ ’^Åā`Ģ#EL™œ»åž`’Ų;iŹ%‰Hø%ón[w”kÉź ¦!aBń”é#ɵžŗ†ł3&c|CŻČĀEŽ©Hƒ“Ęc`žL˜µ5Ć­²ā¹ 6BšŸ9Ģį’ĄøĄ¬k? xżŪwāõo߁Įī.ĢøęZ”ŒišLĒ0ćć×B6?õ$b `š¬ąß“oŌ²·€hP\^Ī>sž#ö_ŰĄ?ėļĒś·mVėÄY³1÷ō3=y¦)š?ó”Ø=J)lX¶tDą?RT„‰³ēvnŚ€žĖĶž c¬Y€­«VįgŸBמżˆbśÉ§ĀˆDŽišļvS^Š9U„Ø.ĪŌ÷‡BØÆŖJ«¼įh*œˆ’H‚1ŻH€Sä)č8†Įą³£’Güēī“„K.šŸGĖ łīųĢŠŪߍėļ¼ļn\šÖ^ZTŽ…sĻĘ†ķ«±µug-næīnT–UćÆ/üĖ׿™Ńžk}‡E/!;Tšļ˜jŻŚŪšŃÄØā‚š…SĒ+Å "DdI!eRČRŅfX¤›ÓĶ„²™Ši*Ć[P)āJ‡ÉøRÄĶø”ēœqĪüz®¹L€4€w}ī58zEF—yEĖ÷ž ±d6ABRR›H)°æ¬’ 6<īvu…ļżö֙7õģq¼›35°”ėų/mźžWįOw„®ƒKbŪŗgzĻv·,`Ę6K÷eź:t§, ”Č`ĄĻšFž *-jŸ½,`¾,€l–Y"{{   \É?vę«}źƒ+_®,šöĮYƙ?¤—Ż8yĢ́)ü~~äœĘĒ÷ƒh°'1v"QŒ~4Ņś~7Ko^×}fņ¦Č®{čąEŸśk×p$ߎxIĄ‘`Ņ‘`ßĆmĒ„@-ņÜŠĆ)ž7odĖ0²ŅƱ!jq†40ijµfZ&’9Ż‚¢’®$÷ßĢ‘ūļ>ŽAvGūĮk\&DRüOÜŃP’ŠŪGyi”“XŠp0…”©’}J)()QRhgĻ» _@BĮt®s ) (¢ }}QlߙźCJ”¤XĒØŠŖ*#]]ˆšŖŖ+ Ü= ć7|l.&5•įĻO¬†%g(žĄcźOĶ?½’ŗiĒ”=P @ų/õßķ“üšjz õšQ÷š·GT€źZŽæLż'ųwŪżµ~½Ō„Ąąžˆž)×<ĻÓóžˆsE’¬ ‚ąJgē{Ę4œ--YtÆāķh’Ē’@ e.k,lD…Q9ģó†kå„Ř=¹įŠš¢žC…BˆOh„ŁX£­Śž}ąŅŻoeŽĄ-hųĻö(ķd>š>x.JĘ6¢}õ*“-·óĶŪ–/ĒØ™³ŠµuKņģҦ&4ž~&}½Ųųų£ė ’Y®Ö}Ņß,} 4}&X•‘«mŖŚzl\± »¶lųwn[»BÓ0õø0vR3FiĄ®MŃ{š BŪ2„•ö{rÓņeč=x`Ųą&Ķ™”i0ćqlZ¾lDąŸ˜8{t#„x,†mkVAš&Ž|ī)Ō46!\Pˆ„ć,™|Ü hŪ¾ =:ąæÉļ7ųOĮčA¢Ø Ź·= ź««±÷ĄXĪēHēʆ&¢MģDŸE".I€`v؎3Ū Ą]'@Š…ešQ”üg^`~–ė¾ž“ų,3Ęš…ß‰ė/¹P\P‚ž|1¶ģŚ€„™ŚŲœæą2zhhń?|`Žqį‚˱§}īżĖ]C­<ųčĄ`C®qņy¹ó’īµe#x¤¬<ó7Ik®*7N[o¾±k7ĄH "S0I)]Sœ`I»²p DŠ8I“Čd4!¢X\…¹•Čd$q"©Fn™‘Ó4=_U™IžŖ IĢŒžŪvŻümݳncŒä¤ņe?øbŅ^„Ęhfł«ū֗tß֮ٷ?³żs_žŅœOUJbJ¤* līž[Ńkø‚¬ćjžłąj:Į2aBq]rŝÜ)-Å5Xä:!t]'Ó4“Z:€A‹DXK,’’˜Œ ƀ„öX†Av=Ū G<•Æ? -7·ßķgY`U`ŲZ£Ź'ėĻ’ÕÅ„…·r®Ėxåm¬ųÄę›nÜøūžļµĘu°iĻ=­čOƒšxšżńŗ«£xĢŌŗZcĒk’żĘ“Ž[—xŻÓ+½`ZŁøUƒ`WĶŀ£Šk€•$@ 3<Ū”‘«×ļ>퉩c^‘^-4#dŲĻŠ—gßĖ %Oz'€EĪćE»óŲaż§ŁūĖų_.ž—Ėšpų¢’ƒ9¢’®e(ż#øōŸßŽtī?ą|yˆĒśv 'āoÓżŻr€š04›  ŽĪ®ø“óX’ŠĮ²RąßõsÕū‹‹€’ąL¢0,QR PR Q– ŗ&!˜}žķP©Ņž+„āƒX»i?žõś{ųćcļāžūćĖßž;żčeüāKńä šÖņVģŻ×)N;© ßøuFU&õ4-T³āÕ²§žż“q’6)šļ‡}CQ’2©’€ø“&xŲGż€„OŻß>–RżwMŠ<¢CīKU¤ņöõ+’ŚŌŽTŽ?räżK‚’Ą¼ā@RńŸév„Ā䢫¼“±wTĶ0ŁĆžg^™¹KIł­.R‡špͰĻ®­­Įń3§Všļc ¤ėˆƒŲń³‘[Ņ|~ߥMźą?°õĖžšĄæŽ`śĒ®ˆ°źæMW–…ż+–§?ė“׃qŽõ?sĄC}bŒŖś†“įFžƒśÆsųąß9¬Œ^š-WC×Q_] ĶĆąL VoB™V‚ĀB B0Ū @ŽĄÉ(³g£œb€BgŠĀ¹·f’[D’øó³?Āõ—ÜŠ®Žƒųå£?@ĀLąśKnĆĆ÷ü SĒĻręaøhįP¤šüā'²NY\XŠ;?ócīüÅ­ˆdōŹ4MGQAÉŠ‚ß.źšóĘ×!š µö]Š@ąpś©ćźxsu%)2”dI ‘b†”̰$JĮŠt„¤.MŅM)u3Įt™`ŗ“HČ ę©  LĘ’„JXÜ«¤"˜AzięÓČV°÷%;z§”®ź8żėųĊ?¹bŹ_XÄ”WMśŽß‹õĪÅż‰Ņ“’øł› EL9y÷‰bķ¹m·Ž”ˆ—”Gö=>³ę_¶8Š£ÄšWpY&Ł×ć¶«A$Yn_€4€”'ļĒįfä2/ `L噅7·ōśOœöā›åÅ~rhąß¶ €{ĝōęŗāwī±(tνļ¬:°YĖ;nŠÜõjĒ?cÉņ¾XŻ/4n­«/YyŹmēŒ{)ę „±šJ—üšĄjšŚć{źlv(Ųī•<Ī3ż}f¼Æ€£ķy?Ä’‡…4°\ŁĒƒŸ«ōßp£’Ą”)’{Ÿ‡ Ä{¶'źĻČśœŪy’‚s„ › „@W·ĒlJ…±”¢Ti?)”¤•rBEI(叛©4" Į M"b(E$Ź‹J‹ģĒ‘„®ŁN{ü”S€<-K¢ć@?ÖlŲ‡ææ²æżė ÜqĻKøéögpē^Āß_Ł‚ēÖ”¤(%’¹к÷}ėįū æg™žĻœē×Č/ü—<īęi{÷œtźæ_H§ž{ū&<ēś©’Žy†Cż—Hm¼y’®¹Ō’ŌEŗ{¾Ė ˆwĖŗŌWōøĪ”$®,Īćįpéž±ncæķdYv¹æžØæ)§U„*0¦ !wĒC0`RćL›4ü(’YĒO%$ MC¢±ŃęĄ×Ņu§É?÷Ąˆõ6üūēō›|ÉeˆTT`×ėÆįąĘ É)h?Ŗž>µóĆ@ū~l}žŁ<֕%x½ž«#°M€Ķ›ÓŽÖŒiĄ‚‹/ĆØś†¤#ŠS.}”,÷čŲ³/=ņ–æōOģŻžś{zŠ×ՅÖ-›ńśSO`Ó;K‡žÓO˜9 \$āƒŲ¹~­oüĄ?Š2ļx!0ŠŪƒŻ›6‰ōP`ʲ’F žs]ēˆĮæ;ŗ”0b½%Ģ[ nŌ(ہķGŽ€V†HDƒ¦sŪ  |Nņ8²˜QtĮŽqükBĒ÷æš .?ē“8ŠŻŽėīüīūėwpńm'aÉźWŠÜ8 }’ŸųāĒļĤ±S0³y>–­]ŒöĪ€Œ]gą’ųäw0Ŗb4żēšöšW‡øžąÅśĆ·ā韼3Ž;?ē„„&ųĻÕgøąß5iA­] XfFcŒ…/hĒŹ#…¤”®3¤"CY’B*A!eŁåUœ Ė„®,©™ŠiŅRŗ4™fYJS¦- ØNŠ3S—ŅvaĄ› ¶“l©¾ p(nļQž¶õŗk‰āŹHŪ³WN¶Kŗē»ē\8žg?ĢźŚÖ=ż–g×qE¬'QcüśŻ,ŠšÅó 1øå£-ßż•w ŽTÆ  ßņt@ŗ  ėš—‚ÖD(ķ¹_ ¤@{Č×Ē/hY`ŗē| Ķķ?¾ń‚ā[.|ūś«ü~qQdĢ"ĘDmŠõŽĢl@P‹_ šs³®iżæŪ70ż—æxūŸ“n{„ūöĒV’lķ@¢ņNMD_˜RõÜÜ^¹ń†3ę®K(KIĄ?å¬}‚›X„7¾ė±ķHcDæ½ß“€÷] Čy^„įŅ’_āĢE’Ŗ}§oÜĆ]śo`ˆŅ‡bĒZō¢±Ž5nŌL€³TŽ?†īrŽ®žAÄDćų'”§§(żåe!(‡Ęoš$•Mėwé’JŚżÉUDŠ+ IDAT>Ī!”k aC”(¢PV¤PY¬P^,Q\  )šg*•n (å E„xÜĀö]]xķ­xņ… čī͌Ø)3|ĘĆ÷•>»yµQ7b꿇¦Æg”ž““ĖžvōŸs»Kż×|ą\Ō[@Ąž“ó°‚ņž9ĖČūvŽæņQ’!SQRōO™’KIÜ29'G„8N0Z'“|Š„ČōŠńā[#*÷W¬cbį„#śKĄĆĢ)1±qĢ‘™Ą»¹dž , 4$ź;aš@†ļ7ųĻ8–Ö„²G‡’,˜įŅRL¾ģr(ĖĀź?žž+KļĻf}źzĄŚ?žŹ4½ĆdY×0Ąæ‹€Zw«ßµ«ˆ8f„Ć˜wśŁ˜züI`Bn‰Ń<ĮæūH)…Ż[·`Ł?’=ü¼ōčCXńņæŠŻŽ>bšĻ…Ą˜‰vōēŗµ°ŅīM¶×+ü—VU”nüĄ¦w–9 ü½S¦öÖv0:pLƒ×øiBģ ģlhZ†&CµVRŖ@8dWµršģö˜£#“y‰ZˆA„†Ž–åõ½t8Ą>-CŒEpßW’ŒóN½­ū¶ćc_=›wŚņY{Śwį†E—bŃ/æˆX<†ė/¹ żŽ?ĮĆsÆ?–uŹSēœ‰Ÿ~5ö؃’÷}†ZŲ¤±SpĆ„_DUŁ(üäĖÄwnłJ ‡Öw9"ą?ėĻł“Ÿ¹§”ąĮ;ĒĀygcĖ® ųų×ĻĆīżéßĒD„Gžń;\ņ…SšĘ»/!Š aĘńā[ĻŽ])ʝŸł1`Ń·”?ęÉŲĶü€f˜¦iųöM÷ĮŠCxšńāķ5Æį¢…Wą‘{^Įō‰sOĶē=™Ń%Æ{{čx€ŗ‚¶o l救pč‚É戠“$,2HĮD†RA1]Y¤+†4•”L¦+„4i*]’Ō”āB‚Ä TB±”(`*°Ć9eux-[i@o*€kK;ĪoQ%śĮ·ĘķčwsńŻó$S>4žgKŹ#ūž‹Y3žŚś™? Z…ÓBŚĄśO¹ļ–©Õ‹Ū”ė„;!4O*€äĒ,€AĄ“ĶX.A@d/ ˜œ{,Ÿ|X &~aŌ­ēÆžĘ¹Ó¾óFQ¤ę `ü—-bÅ'Nŗé† ?  „ģŃųüź_\SŚ’…Oœx݌ŸžVņ½K[ž­Ó{N`ģ3 `^Õ#[ԚƒżµŸΊ’æ`ŗs"€‹<70ŸzŠłZ>ži×vś^Ō\Ń’įŚPŃ’CłE’ż€”¢’پгZŃ˜sF|[wW§¬«­Bp0ĢqpĪøś¢&š(źčCUy¤lļFž•JEåA6/+6CżW0M›Öo§ Ø z’ mV@Ņ |p/øĶ0t…‚0Š %!nĮL`Y€æä `’ī+‹U®“’ņ`ėØ_žrYē –ĢEżĻ0Oō_‚śĻsP’גPWZÄÅ!R’…ē\ükpR`Eśę–˜pó=Ō7ļŒlŃ?e'hIŃæ}õõócÅ%§ݚخ6t½łī·/Č4®”„d2ōĢl‚Ćfš¦įø“QVœK¦s¤Ę<{K÷±ŽøŽx10Į`Õ×ĀŖ«…¶æĘĪ=`ńxrŒ#ž³½¹‡’Eµu˜pްb1¬čÆéŻ<×Éu 3 «÷›T-q§ēu'œˆŃsēĮ(.A¼»{ßYjė$½w,mL’µe\c`ŻĄŖ• YsŅŽė„•U8õĀK°ņõ—q°mēv¤;™Žųģ\|ą`[bn.qąßū“ŗ¾Õuõ€ KßNŽćlcøŃ3ł…(= ¼|T BŲækGF ų|®sh‡ĄšĄæūLD£0Š4$Xę/bČ0Pē*¤B«·:ż¦¤” #ČK²Bˆz˜ĆaAg·am³t>$›ć½  ¢¤ Üł¦ŽŸ…Õ›ßĮg’ó ōō3±ch;°æzüG8eöxmł?Š7Š8šÆ]„ŚŖ1xźåæ`ńŹå^Ÿļz®½š&LŸ0ļ¬÷?r7ąŹs®Ć—®½ æūÖ3øł{WbéŗÅAgg™k„]GJż÷µ3Ōŗ(*•Éī֚«ĖōćĒ֚o·īeœHZŠ81R ²ˆ)F ’L¦)b¤˜Ę$#eBIfƒFB#ŠÅX¤™ kŠ‚Ö$WĢĄp‡+(-ŅĘS M*å$M29#R`1«øBF“ĆLŪFi°$”"ĘĮč#~x’ļ6|gŽ%ŚŹ‚=|ņ¢Ÿō¤é*N ЁsŪõ¦1®é¤ēŽ  IÄu$˜ āc †$RÓj˜„lA@#a*ĄfÄ=į}æ  %Į ģē® `.;mĘ×ėē6^õéHøā£ ,W‘€Ćj!£ģśIU—žlˁ'’įÅÄ ˜į‘Ą‰ĒĄBЇ§ÜząĆøõÕĮ¼b€šĀšo•¬ė:³¦ß¬Ŗ²¬ŅjÓ ÕH„ŖH‰QJńÅxHŒ"°Qp ŒR¬śłM·…ĪołI<_1Ąy–qMĆĢeĒŗą1ēŽ ‡žŸĖŽĻŅ¼įž—Jōßūź żå}ˆŌ†lŃ((‚ģoļ颔ŚNH’588hAJ‰ŽƒQ(i9`Żrč’®3Ął'c ”—hŪƒT‰„Mń—NŠ€ō‚~ǐĢńw.ŪĄu.(J± ÜĒJn_f§ hœŅ¼&J¦˜0M ÷Öp„¶ņ‹/ü¶bĪ)Ēæ_\ŁÓ;ģō ’„~8S÷9'õß7&W`šóī ¢žĮą?h}Š )ąćIņWYØ’03Į?q0(Ųy’¦dR'¦s%—&ŻEÅu]£F_“³»ūŸ_œrƤ¢f„Å‘ūż :ęOŸ‚’¢a'ÖämYĮš# `b€¬ŲčhūŚa“īćéż|'ųOGdŁĄ£{|ę'>®iX÷Š_0ŲŻ1§ūxĀĻCQmöæ»ūV®Hė.-Ć)ßø•-“Óf™pžčڲĖīū zwīJ3 ģ ›Ż]`ļ®°žT#Ęqg‹õKßĎM`=ŗl€ĄW䈀0 ²Ö ķ»[“}ó’qL>ī{ŒÖ]čÜߊ;} =ģŠ’“BŒ™ąæqŹTL9ž$0Į±÷½-XõŚ+žQŽšļš6Š Y\I™[¦°a`te%Ś::ŅvweZøÅq Ō$LĖ)+ģ2äq0Ę”»¹’YDKŁŗ# žGWÕć×ßzćź'įķ5Æį–»ÆĪéKĪ“䂅ön.ƒžļt9aĘB\~Ö'ŠŽ¹÷üžY—•mŁćź'į¦+nĒ`<†ożņÖäļĆC’ ¶¶nÄĻæś0~śå?ć²/ŸŠ½­žas~A k)‡üūŗŠ¦u`@Qfø(üquŖ­7Ŗvõtq PD ’)Tœ3RNeF&ć$BXB# Œ“‚$ŅHR"Į ”8™LqŲN„¦©€ĢŖ®ĄŽ«¤8)d­ Paģļ€X¢ØŽż¤ł<L š‚ÖŲq£^ųnL•E><ń—KaYˆKĘø[@×ĮM“„Ä<4PA{]ƒnZš*+čŗ½w“Œó”“ĄmT¦™Üg†D"Į„`ƀJ$wüŻJĆ©ąļ㯰pŚ7g6^žÉ£ņjƼ“GÅXł 3¾y喗Ÿų­æ„@Ÿ§"üφŸV­éŗę£¦ŠL"Å«¢JÆ%šJ¤Ć“1:F8©vÕ”ĮÜĮŲą™ū9·:Ā,zš¤±­9æå'ĆØ–Äz#āÆģ4Ϲ¹Ŗėö¾8Žś’HĖ’ķĢcŽ#UśļCō?ŻĻ3śļR™śzv Ī«…ą`L€ ž¤RöDcč7 ҉uu÷c0nĀŠČ‰ų;“~§”? ŒŻ{ŗģ4(nÓżS¤Ri”łw¤ģœņü³™ß'œ!ĆÉēŠŲź§ż1 §?hdŻņŒWož5ś‡SOŚ·œsPPō?胪8÷D’3 «€hžē.õŸū“üŌ’dä铿 č?WH/łē¢ž €Yą^Ļ™`ÄĮLEŒH0pJ꿛 &@vbŒ±Hūø‰×óŒŸp•0±ļ™W”āžĀD¹mlįX”čž*¶‡Ļ4M; ąß½ķC€’4m€Tē,ū!cu£1XW±’“»Įb±dæ\ą?`aé]ÜG{kęė”š”bR3Ę.XˆĮ®.lzņqßt©ó“HÓ>ś1V’ž·ićqĪqź7ļDEs ŚŽY†=‚hGJĒĆ¤ ?„šŁspĘ=?›߽ ķ«WłÖ;ÄuųoAOĻ’cļ½Ć妮õ’ĻŽ’fNļÅŻĒw0nŪōN؁ŅĖMå&¤ÜäꦇBnŅ{/$!$½ć€1Ęø÷~|z"iļß’f43šsŽķc‡ū}~ėyęikWI£Ń»Ö»Ö‚µkąŌ…čp 8!˜·tåUÕ¬_õ,Ņ,3}š‹Å(«šīóīĆ­G žA0nŚōL&‚ĶĻ?5ݱāq |½`˜&ó–ŸĮøé·īŠĪlXłō­3³[J^ńšą?،ō’ŖØ‹dv•Åć4××sØ£#§¼Ź¬Śc…ķ€p5:¤@Ģ‘Q~J€’+’Ļ]r Ē“šČs÷ņ±[ßIŹŽ~7?‡bVœ‹—]Eß@O¬~  ćŅx_|’·BpÓO’‹Ž|å_‘‰łbɍļūq+ĪWżiöŚ™süłMOóõß~–ϼėė|ųŸćææżī£’Ć*"F üēÆY)Ō†µČ…Ė ©źRŠŅ+ę¶ ürUR'm­ŹS9IķŗB ”Bh„„ĀVZH©”v•mšJ¤•Ā”č˜Ņ¤%. —4ŽZ*WH©m­[„P!=ʋVŹŃł© `įŲūw>±ļ5}vķi›ŗ–5Ķ®]yŲ4„v¤gń2,©“P}AĖķ9QL„Ņ‚PZ@, ©”Ā,€”2^Čš„ÓZ8Śö]¤eiбņ$'-`i Ņ[āXYW-żÖŒéc.zoÜŖ¾Rˆ‚¤L'\J­†ėĖb-æLļŹ¤Z*ĘŲÕwŽĢA»īFCŚOš2µEˆä‹†“; ™jżmī¬nŚpųźłļļ(µŃU^J@?+ åÕ^æUéBß5J)·‚˜q”m’āµGŲVkO|4㋼¢7†':ų_˜žæ{[¶ÆÖ<Üģ&“D_¬–ŠöY’#R’“ļ’1X’É·ž‡åh­’$’=Ū ĆX`HéÅš’ÕŗéwšĢŁ\ĒÅq\Z÷0alEžõ?ė۟I ˆ¢”¶4£$H».qCåZū@ļęƒ•±īg\ŠXže@–…PģläJE)Ä,čģĒ·’§“nĖĘUź+‡Ę޶ų¾?–VōēD˜™ū(lż_bķ"Āś?õ?ź,Šśp4ŌW Ü0õßš,2ßļ_kaūsh™ė÷oHWi錌88kÖė]ˌĢĶמč*ģĪžØCCJ}¼ž1%cŽøŻHÅ4 N;yÖ ’A¹WŚÉlg^rs±x:h!qĒ4įŽiĀhļĄŚ±ĒW{q-xm>šŸ+§žĒ»AÖ’ž·8É$½ś_³Æy ńźö<ž(]Ū·å(+&Ÿ{>u3fҾqĻ|łK(_Į˜hoćŠó«˜żŗė˜ūĘ7³ģ>Ń7|€D{{ž$G¼ŃŪėÖ¢O9•\UL™=ņŖjV=ņJkļ|k@hļŗ'š/š#ńū’,ņ3ų—†Į¬EKŲ·m+}]—쵉ÅĄ`Ī|Ź*+YpŽ…TÕ×£\—Ķ«žÅīMC=)ųɊŽü„ˆ'zI”T¢uį8„„4ÕÖrø+—ī^eԁ«iBä+“·–X¹įk…C÷T°;Zą˜~Š9žĆ}?ē_ėž`Ļ”øīČRƞ¹šBŖ*jųĖ#æĖ* Bć|ųMŸc|Ódī}ņĻ<ŗź¾"s)rݼńUļįŌ™§ńā–ēųż½?É«ą}ŻõČm|šŗOsīāWQ+!•NŌJŽ{ŠæČqB;É$jćZä)‹ &#*cVÉ5'OIżž…—µRJ ©Zį¢B ­•£•2…Ō®£•R“v“­„ŅB«˜’ʉi/4RZ†%µ’ZŚit¼Wˆ˜Š:c ¤Ģ2ŚćC¹˜d•¦“UKՆßmļ>õƒ÷ļxĒ'&ĢßöÉRŚŅŅ)üöŹq¦ēĻ ĄošXŽCŹÕY \ĖšĒ”„Ü ”‡c€ĘmƒÆ°“²mį OaĆĄK 8Z,€«–|köÜń—¼?«ŗ”Ż-'F¤0&_qśm’ń‰3ž‘¬’¬2ąĆ§üō§Ÿ°×™2±ö+V¶ĢFē;•U ƒ•„…ØšÆQ#Y%@”LĄĆf#‘cqxŒ#c¼’Ż^Q €br,Ö’‘Č}Ū<ŌŗŃՆčķBōūł:U.ˆß].ÆD?’$TÕ¢ µĶž :Įūč’Ē"q1" ‘ČX’bEŽŁÅ¬ūGhżčh[oņµ†”~j$čLŃļh”ob1„"ķŗø®Cėį>Ę5•eüöĮüŹ…  Æh¬+Įu]\WyßńP@Źą»„Óüå0t6āæö£żg¬’x–/-ańS_äüŅT]½ž[.é÷‘7߈utu"6n@ĻW0צń9ėŠkyźļÅu¤ōģ[Rx80—©‘?ŹŃ’ü2CFŠƒ€)sęRZQė:l}įłØéåö“§xghœ0‘łgŸ‹“čėcĶcÓÓŽźaĄÄŚ üßvšø• )£•yUåå¤m›īžÜ<ķUF=Źq錵‘a(ŠB‡~yJQÄ bA™£’#Ŗ}z vīL—©’wŸ^īÓ’’žDįkō¢ŁĖxÄ§Æüā“E.ž'™Ā ×}†”āó?ŗ!'SEX×f÷ĮķœrŅbź«›9жgØ® Ę9ęJG|}"tw¢÷ģ@L.Œ‹kNØŖpϜ2Ī~|Ē>唊R ”µ!¤B „­„ZI„R»Bi“#1L“”I ­%BęÅ@:1¶VʹĒā pĶģoßū£¾qZ_ŖvéĻ׎ü• 'żśk'yę€į ąJ;Zø ’X\iaĆš\,,ĒʖZHWi ±L°H€Š@¦k WŁŽ±ģš½ó0 ,€7œł‹ÅSW¼'nVž}cüū„2>ńz @^0Ą°@EģšOśŅcozfēG¾rĮ„oöGµ)ōßCD±F"Ēā09ĄæCNøąDG<¬,ņhݱŃ+ßų’4rĻvŒŹe“Ė˜Ń$™Ś,©šr4%ŽfŠqčLsx[;/oŁI[I=nY9nådÜśqøõcPc§¢āĶčŽVD}óŠæ8t¢R’ŒÄFYf õd$ÖĒ@t¦Ö=ļEiččO0ąųvš_„<šļŗ.Z{8un#Z»ąÓņ= ¾†ĄB+Mmu)ĄVžÕ?öj7ĪŸ "čbۊŽA…Ō )†Tņ˜‘Ö’£ūKõՅ.}½Ī²Ć­ée/=G[yO™Øž9ż<¹ŗŗŽ”5ĀĄłižņ­’įćZ!LėČØ’ĮA%µČ”ž‡@ÅØ’ŚÖ9Ŗ†€ś© ” ¶]”4B K*ŪóūשּׁšŲ×ŲtUŌ¹Lź ó©¢ )¦08©ņ$äqŠų/€SgDmuÕqérĮˆÉó¹ąixš¶HPĶŲMMØĪNŒ]{}Ł’ļćž…Ģ»—ĪoķÆ‘²‘ępīތYRŹÖ»’Ź@ė”PX;m:Éīnŗ¶o€Õß’:.X¬~ĮŒó*ɶĆčķŪPÓ CĒVÖŌp޵Æē™ū«izŹPÆ  ‹“?‚’ÄĄ®r1 ƒŹŗ:ś{ŗs+‡÷ņ@q,cŚüSAĄ®H Ć mŽ‚äąR¦Ķ_ĄI ‚“īŽĶKO=† ¢u¢ĄDGCmxA+-Ņ::jKCu5ŽėҟHä”טM([Ńė¶ RkĢRÓs@xĮµ·ń ‰ r¦CēT)Z§xć(š?ü8¹•*Ė«9kŃEī<ČŖõOåō•šÅ뿃’›öqŗś:"Ę)ž…|į}ߦ$^Ź7wc”b"ÆimU=‰B۟‚3\ȓkĢżĻ?JšÄ/h9÷rńė¬wļ@TUCma†™ų铚՞īgWW‡ÖJ»ŽP†J WįŚ-L„ķ“©tL(­P†+”pPŽŌJ­b¶6ŅBibikl–ŹUB ”””Ų*Ą k(ę °r\Hė·ĢūüĶæßš¹t'ĪżŪŽüd}Ē™?~ĆÜ’½'* `˜&8Ŗ Ģ$āŲY^€Ü€€ZŲJčhZ¹ä³2Ó ³ W w„,€×œł‹Å-gŻ3Ė–G_šWŽŅ:ķš%[r×Ŗ+WeÅÜ®™õī?’zķ=Ÿ»wŪ’\·|Ź7^›ĒģGP‘m×ß‹ØØŹīō 7€®Dm½·?i0Ąį¤Dß ń’7€W ąĘŠSm4é’ł²c#āŠnÄĪĶȆvjĘĒyU‰ä¬™5¬0$-ä¦./écą‚Łō&R¼ŌŻĻæ¶īēŃccc5©)ÓIojÄ;—ØØBWÖy42õß žW~ō’ŲR’ŁįŌGaż˜¹¢w{GG‡Ó³ń“ōüž -æ7- ųż¢“½eŚŪ(̚ˆ›LÓzߓč(ĒÜadJÅ“ćōoöōšźk[’Q 8Ģ‹L}q„õż¢¦ónC=Ŗ”ŁŃ‰¹k/²7:%W1šŸs“ųGĄ¤³Ļ„fŹTŚ7ob’ŹgŠ®»rüD¦^t öĄ›īųCfŅ9]K¾0wH‘éL„ņ©0² IDATæQĄ2œ½±o²“5~bAWńŅRĪøō2Ö=»’}Ū·  )%2`„ū)ЇłG“Ö“ķŻĆ˜–)“̙˔];3‘裗˜½¦r*±’ģTŠķk× žĆe±X(ĒeŃŃ8qŚUlYż»6®ĖU'üēÆsˆĶœ2k UQƒ£"”‡BŠ\W‡ÓŽN2•K㫳ƠEO¼Ņ “H„Ń"‹ōµÆȹϊ)Đ»£žGeœĀJž~q+νOŻåYēCU>xݧ™:{Ū£iÅ&S|葝»į*g’•Ń›×!.ƒxŽ›Ä/Ÿ=Ńżésƒ:éhm¢µ«•‹)“ŌRiå*a+…”ŚŃ®Ņ¦©„­“”„N[ŠX(€ÖZŲi-‰9ŅTŚuEą `ų`Ę%ė  ”2ō¢§„!„r=‹<>-_ ]iv¤ß;’C’{ß®÷=q oźĀ3'ÜłxŚÕB0"€iwœ¶-YW„  ‘,€p[K9Ųö±±†'ĪėĪżż¹Ķu§ž§e”ž}±_™RS=÷żĄŖüņü`€3kīMŌ¾_ ŗõļļ±'ü²Œ}Zœ:ąh܎DJA$NP0ĄWŖĄ+FPLF+ų_ü×?‡±Ōą‚E’·YU\* ōHū5 Ŗ*Ė8£²Œ3&6ń±Ó§²õ`'÷>üw¬¤ub#ƒÕ³q&ĶĄ®ƒ kÆ9‘Į’ņeØąĆÉhX’JŹq»Ū»ŗt¼¼>éjāĀóü`}N†ŅļśnūõpRKOŪw3ž÷d>Ś÷ń×4֗²w§Ē°¦¢ž»¹ž”ÆH0„Ā„TJ{ū9i=¦!¦į)”-Óū˜CŖŽŠ‹eBsō h::ū9ėĀ+i7†ę±L1‹t:?|`ßā}{v.~ģo;>šč݉-5 öÓSēȕ+Όļś Ø’9’04°õ_f*ĻŃu¤Ō-3?Ō‡ėś±‚ciü¤Ō!æ!Uą÷?sÖk"żžµ¦ķž§qz££L%ćKĒS;~ą|ź„qLwüā äå|«žpąæx}Bõ³EĮ¶ČŌ ŖŖ†zģ†zdGęĪŻˆŽ¾LC’į@s°1óŖkŲų‡ßłÜųœź™“ßśv„a°łĪ?‘źėĶķĖ—¾}ū؞ÜBõÄIōī (¾Eąu°Œ”ySrņå—Q„åPWH÷²āqN9}9UUlŻš®c# /D g f–JUģ_÷mk_¤yR õcĒ1gé26=÷lN »üU  ¤¼œ–yóŲöāšk=ł-E~ėl€yĖĻĄˆY$ūXóŲCt·Īėį•žĮ ąOö£JŖPŗG!ćźźŲŪֆķäśĀכćŠōÅ»=V”ėAČüćĒŠÅ&RPžļ ś7ņq¢[]qöėø÷É?ēt<ĘbŽzłūčīėäĖ?’x‘Į£Æ=ĄøĘI|äMŸĒvŅ|īĢGŃģ-ÆzBžžÄušźĘņ±7€e'ŸC]u#½ķ'üW'ļø¶mŲø1IAüY³J®žÓ2ųĒ_Jj”¤g ×ŚŹÖŚ5Z!“p“r…T¤m ©ZĒM©“O”ŌҰ…vѐY¢u0p³ü’•Ć ×ĄĮ·ŹūJ‚WMżŃ3Ą3ŅWHr³äp•’ų°•Ä Å°,,ĒŎ`XƱ\- 8 ĄĄν뒱u ¾=ĢEŠe”¾ź‚¹?jyhĆūveÅXóš’ņ‹ÕŽž”ļ<óčyŸ=ū¤‡ņSF²½`€enaäœ\$^ŪHäD<Ńr|øÆEäDÓ’š’Ģ}ȕ÷cT­āšscZ+”€~r8xØ'ĒśÆB~’:҇ēŠŌP–Ił—²óÓż)?@ęĻū¶ĢČĻ÷Ó¾ļhßÕ¤mLBļ€g½?ŌūŪ µ:{½ņD*š”%B@eÉ ^“Œ‹fQ^āÅ €a4›Ą©§-ēU×^'—słģššyļZ÷ƲŸėĘžŪ~k߇ø3±$ŁļqR3Ö’<źæ”fę:č<ׁĄśoJ!ą¶žgźŌ’`?śޟžPŌ•Š2ķĒĄær©-4¦TŹóū?4~ŅāTEÅiQē¬ūł ī:0²’ ³’ńećøŻH„©¾–™S ­½£'¹¾ž¹`>S<"šź2Ūאą?Œ»²õUCö’8 OAWMa¤ąævźtźfĢ o’>®~>OA‘żŖŸ5› Ė–“čč`ė=Ķķ+“ī½O= Ą“Ė.Ļ蘥>Ś,\>°36®‡&cpŚ#C«­ääłSx͘2Ŗ]ÅĪƇŠÉ“F›–ēź]†¤(ĶÜqaŚŃk €¶ćē~wr’&ņ:±\€ė"ĀÖ’¤›Ż.Jü~•›;~š°-óg¾%Łćaėp7š_^ӒX ?üԟhØmę»·ßĢæÖ?žsü²3_Ė;Æśw>ņ[¦M˜Į®ŪųóCæÉ¢sw ŽßEīż\¤ĮPרÆQQe…4PcRM…½½k€ž”ƒŸÓBŠh-„Bi…^Š<DJ”¤Zi© “w+įēõ‘¦F ŹE+adć˜xę~2Ö}Īx"¤Zgn}-Dö¾ń|£ ŽR µ|¦=QļŻEh!½cRJa(-TŲĄ0°”Önؽ+Ā00”ņ=!ńöń€™ÆZ į*\åĶŻŌžq!LŽZ xažĖ?Žķ !=R†‘vŃR „)l™µ„܄ž5īҾŠŅę £/ų+[ ›cĆÆ[»Vf4Ż®ƒ0L4¦ņöM ΘųĶMsėļźwlD©Nęõe§Ną”[hʁAb>žHˆø „! s/Pźk*j ¦Č|Ū@ —«¤XRé] ZBūsÉĶ&”r<]qN‘~o¼q˜ ¢œ8€F|”Č”ĒCϬsBåQō’¹yū»Š<߈l{ sZ+«°øĶ†F=NbXĶu,X0•;v°cĒn]ķ(×F-C Z+FFÅV˜2ZeżOĖģ»2ŌnĄ;˜9ī[’•_'ßś/L„ÅŠÖņ­’fV)”ż~ƒćż?lżWģǁ™ 8Ų{øėŸžcĶ9“§œTSVVNŚvH„\.Z9(å2˜šŲiŪfüŲ Źā†_łŌtÖĄź_7XłüĒėƒ^¶€0•?5` (ś³ō’ų‹ē(ęNS,?YqÉ2ĶeghN› 3&Ćø(+õāŲ “±A)ōŪ¤mH¦=„Ą@ś}ƒ+.}®2IŚŪV¤,č·LOi¤ōāø®Ę4-Ŗjji7±&[†Q>¹»Ż]ńĀŹī×®~²ŁÖ ©śÄ NLšZŚåĶC -±@õ’܄)%Zg­’øžõ_ūŚwļü'ŠšÆ“ĮÓE9ŚK^ąsSŚØ’axŌeøiah¤T ™rtl’¬yļu-³ š‘J„9x×ĆØd±Gsq™Z1•*ėųå3¤Į’ł³) „Zm)ŒųļC“œķšK|>°Ļ¾UFQś Ńõ‹éĻ«“5~ŌT!ID* 僨hšPŽŌÄä³ĻÅ,-a÷#ć¦ÓyĶ斞Īģ×¼ŽŽ½{Xżżļ„<0³ėź;É$fYóNFĘ,­~>wüPżœéä!KQ–³–°” ŪFŚiT}a.š”±xœX,Ž/”«³Ż{¹õeFF[ ńi$ų öõ±kÓzŚŚP¶ėŗģX÷ƒ}½9—bź¼Sh?Ōą /=łx^ąSõ&͚ĶĀó/ VZ¤6ąÅG>6šŸWž»Ī‚¢ü–£ žƒĆI£JJ"],ÓDA"/€š•n/ZØģ½“üEęÜyĒĀ“ŠZaTA”ü;żžټsŻm<ōģßéšŅ·Ī™z*7’ē÷Hōqż—_Ē@¢’ˆĄsż8¾óńۈYqŖ+jĮŚ­«¼ĢAyMMĆ䫞9‹ē,ē_ėē–_|‚0Ϧ”¦‰ļ|üw$Ó n½ķs\wń»xfķĆ<¶ś>†”ѰžēÜĻE*G’ r„§Ń<Œ\k¶B˜-5öšŻZ -¤F /©@k!ŃA\ ÖZ-ŃZžėžmh-¤ŠR{`Y/#’!µŅB+ķŃēZ„ˆ,>š–Rč0ˆžsEŽž†²’5ŚWh†§¶Čœjé92` ėŁ:¤ŹŽ·ęĢś•ė „ŠA{©@›Ā«+B4„ʐ%@@ä1„"­†Z˜FĘ}Jų.•..†ŸrŠp]OéažūŖF3Ąõ,IŅvqC—gŪžū^^tŅ».“Ā8Ž„BćmßF]„kŚŃˆ@X 3zÖīśį³įrĆō€“é?#Ķ<ū‹.*•›ś Pt§Zäc«?W9gŅż©@`§ īB2”UĄį~Di% t#œ!”Ć)փØ/r¬%o?_°D³>Ś>§HŸ7~‘ pœå„)ōŠ?ņ÷Ÿ[ĆY’ad €­«及4¾?Ę žCœ`¦C å„4̟ĪEĪ ė6sø§×M”ŒRt¼mU’«.B’²ž‡é’®“§eė?€1ŠÖ’ąų“ō”Ō$žv÷ļž_XW×4®¦¶ŪqI¦$žĻ~*ķbŪ  ¼Ō¤¹±ĢžYk=h  =ΤŠ-ŪŪčéM ”ĢĻš”a&@ξÖ$Ó Ūö”ÕåšyS5Āēe ßļæ¶ ZĘĀÉÓįŒłpé øāLŽJ1J¦øģ5o¢²ŗ×öŽ£°mM:­I¦5‰¤f0é}§mO)`ķ™ā}7!%eåŌ761füD/©¬Oō3ē¦žĖž}¬ēĀMk“Ū:bŅäX«7Tp½L@›žõ?’śļ’+©…V>‘²ś/ZŹ,õ_‚p2ųJųż‡©’R¹ŽtmmhĆ0\G®­żSg\šŖŒNł×öŠæH8ņP0u±:&–?jž)3§ŃPs,<†–béžĀ@|h_’švPpĄh[—•”ʏ…ŚjÄ §£ĖĀwūlÉ`ė!Ę/=Ŗ‰“˜|ö9˜„%tlŁģiÓ)Yń©ĻÆ®fÕwæE’¾¼,Ą²{ū¦]v9uÓOb×#ć†)łĒügö÷CE:Ā2ž;€”CTV×ŠŁŽ†VRxÆē‰Qø(æ¬ųĻˆÖ öōŠŗw7{·n-’sN;’ņrl{™Ö=»‹“3­óĻ:ĒĖ€`ĖŖē(­¬$ū©2ą_^yī:£V˜×wžĀ"v‡ģ' Å ø˜(l3^Ōć³4'mŪ¤óāH!) ø=h©3óōMžžĖ‡ˆ\÷°Ą’WųdƎ5šo™1~ų©Ūi¬ĆM?ż8«7­Ģ+ŗæš0_żšO9iŅīyāJb„\xś•\ŗü:ū:Ų}p»ŸBŲKxėGŊSĻgēž—¹į«od0•ė3yÓõßgĪŌł|ķ·ŸĮ&/»š{žøuŪ†Č žJ’ļ%¤æŃ4¶`n¢Ō2Ei̲·µõ -5žE^{×Mh­ŃR -<…£BjįE§ŌH” šˆ+Ą4„6”@ūx) -“!@iĆ:‡ųcE²‚©»!¶@˜`k<ƒ µX¦Šž#Ė05,‰B…ڇY>'Ā{ى`8®ŹŒmśJ€ŃdĢ{qwe阋£/žčI{G;g]p6BJ–.Y:*}šfÉŌķ­łY2Ż ibzF怐Æ0-°"U1H·žsĻg÷ō,¹ü’y_¾A"a `>ppˆõŒ£8  %o?_ÅYēéó œ8Ą Ę#”’Ÿ“wģhč’’ Yö4ė4÷’ѹ£ALƒŲI“X^bPņÜzö$pĄqTYCīėByė?żŸ¬õ<€ )Ā Üeż·F`żP†ƒ’e}øüŗ ŲGƒļŗ±¤¦ŸģÜó§_Ɲ 9sģųńøŽK"åzVz×%m»·€“Zj3Ō’w„³eZs°µ—}z2ū⦠㠵ļ 3>’®«I&½ć)[qīAĮEd8ÅĄœi0k2LĶõPYīE’O&“œvö%Lš:ݟ‡ĶGG~ėæėjWć*ķ+B²ķā%%T×ŌŅŠ<†²ņŖ ;)O:ø'qĪæļ¹ö„gfķŁ–.+ƐķÕ f*°žg¬¹Ž_>õß8źæp"Ąg8CP’] åH£»ŗ¾„{üø7Į“ī[æīUQ>ČCKLʘY5óø„üßŌĄōÉłŽg£'£ž‹ÕpȧŪ`HvB©§ uH ’Irą_xž–VŠ=O<†õ³fcX1v=ō@¦Ž” .bźEÓ¶a=ėó«¼?TčŚib•U4Ģ™‹30@ū†õCÖ/BQ`p$ą?·‚ \ŠøŠÄJJš¢M Ŗėčj?ŒėŖĢuŹQDOixšŸ3æ¼µ‡ŖĶXøÓ²8øc;]‡[s+ä]Uߥi—\FŻŲ±¤ V?t?wlgĘ¢Å(„ŲžŅ‹”±‹€„’Ką?Ųs]d<†£‹?_ŹJKéO$r.Ā$.Źt{3J€ģ¤}ą/ŽÓYd®WĮ=7ŌTøĖč#Eū‰l2ĢX#’ł}Ģj™Ē›/{/1+NMe-k6?KĻ@Wń~QPzÅŁÆēWŽĄ¶½›ųĄWŽĄŸśĶ§žĻ„+®į—¼›³^Äu拾į3ŒošĢŗm«y’—_ėEõÉEĖ®ę½×~Œ;ÖróĻ>Ę%ĖÆfńœüņoßį@ŪŽb‹`LżxĘ4LˆxÄ×(zĶĆ… ’ &¢ŗc*KŻÖ¤Ū9hķk•B gżWih”Z© ŠH…҆6½Ä:ģ PBR£\”ϐ"+ø Wg¼`‚ŗQ,€°+@ @ŽŒ  =Š®)¤P˜"ķ"Q)L“@T’€ ³„8*€a˜Zko•ł,€­{’öņi'½ē")ĶbĘēQ‘²²2–ž¶”’śÄĒXpźBZ&O>ę>¢j\õYk6īūÕö ,pX@ ŽŠ%ŸĢ)pŲ²ļźöīŌä[āĒ3ZK‡Y·>²{łŹÖ·ÄĻžų“Ī0 ą•čÆ,7€“ą(Mō’Ē’„lŽČŒŚ8’”‚ćåėE ä¹ y£!©¼żQ~įŗnŒv;FrÜ4œ?Śå1’…Ō#–"™ÓŠ’ ¬’łĮĮ‹|ź:ˆŹģwŚżļß|ķ¾­퇒ėģó/J)RIĆp3é÷źĮ¶ ©CŸ ąå1 åŗ:­PńܔŚW dā(…exŠ­5{jś4•å:£y>R‰Ē`źxļ“/e%.-3±Ē^H2å’LĮ`śżļo»·ś¼XĆKÄKµ”WTRRZF昱$‰x_O÷Ņż»{–nßÜžX\ģÆk“ž=eiåĆó—–ļ ¬’GDżźłŌp“axP’µ6„BKŪv%®–vZ „r“L»ŗ¤mrĖ›5¢Ł=“?>„õeˆ32­b¦8>»’xœŁÓ§—¾”8ųĻGŁC#’Eź‡Ź Ē<š_X!P5Õ°x²§¹mtvB`²ö—?ć„_’3^’9jÄćĢ{Ó[@k^śõ/#:Č_QvĮ{žxŒW]Ķø„§³éŽŪGüG¬  åZŪĘŲŗgīÉ­©nlÄńSMĶYp[Ö­ĮN&†%ń¬QŽ ņ1Ćh öõ/+cÜō“Ų·m+éd*§^P}Ҭ9ĢYŗ itµbĶ£“Df,F¢æ?Ōo‘³öübö÷«Ŗ!]$MŽ‚±õõģkk+P”Ź2ō8Ūū¼č’p«æŸRxĮ E\@†‘W2ųŲ“c-W}xŸļ79kŃEüłėOšŻŪoę¶{\p¾ņ»i¬męæßv3®ėš¹|Ūń^ŁæĒ-Üłšoøöü·rŽ’W1wŚ4°iēKüå‘Ūøóįߢtn¤ŽšŹz>łŽÆąŗ_śŁGQZ1³Åū¾¼'ŹĘGĪÉżģ»¾Į’9gš®/]ÅŗmϹę!ŗYƒØZQĶvoƒšZج.Ø[rńIś÷vź”­µ£“ŠĀՖTŚQJa(J™®²ÓRi“ŅĀSįĒ”DL«“£µŅ3æĒ„ĘQ!µ”! K¢7Ņ2ŹčpVP¦T™¬¦į±š D©PF€ [€’†ŹÕ‘i½¬S(t(#@(- rµpķJs vŽWMäč¦ Ź-©q…Q”\ij”m­Ņ)”’¤Św—ˆ½;cÖ#{KDÆ#q“TŽöĘsT&#€eiŪ¶#3‹ADF׊ĀHk¢2 ø}ŗµsĆĒ5.üęˆn‚I&“<śų£ģŲ¹“šš.¾š""\ĻN?ķt>ųžš…›¾Ą£÷?r“ĆåHUŤ·ä—WRLƒ °+Ƭx÷yK7|én{㣛®ķes¾šĖ_lüMŻĘCW¾1©+ߎu);ž! 'źå`_(-0ł(£ņŸšlyIaŽ—œĄHV‘O’ϗᬒ[W#¶2¶¶„æJ^9ą?!ą¬S¹"‘Āżė3ܦ5Āuić¦įT×# ‹GÉńNżgÅ’‰F’ś/J¢¼¤ żŽOņÓ?|wõ¾{īģüźy_3 ƒtŚĻ  \\Ēå@kĘT„"õ»>ØỸ IDAT-ŲŸģĘ6—{)’”‹r®3 ųƒ>š-č¦įYü]_I°q‡bé¼Ń’ S§4±Ē½Cj*J”ŖÜ橵JdćAI<ķh2éÅčš=żŠÓ ]½ŠŻ =š¶Np‡Č>`ÅbŌŌÕSY]C:ƒż}ŗ;ś'ž¶›øxŁÕ|ī‡7°}ߖÜ6”~>łĪÆR]QĖĻ’ś-Öo_“Ó锎ż|’Ž[ųž·ž:#ęņ©w~…ŗŖ~ś—o°qĒZ„€Y“ēqØ}=żłš$W®>ē¬˜ė¶­fƎ5CŽSō$ Õ`ø~Š×½ebĮ²‚’jY7Ė^5s|āĪu»Ri­•ėŗJJ”\å*­„+µPZi%]ķ „“ėŚ†TZ ShŪ3‘k©“4“Ō®Ō†+Ѧ‰‹+=Gz²”ć¬Į!B <ƃż€T„ü“Ęä„ ÄŃRƒ†Š GŸ=¦Ļ¾ą\›± µY~²PFiꜳH(ĆßÉlLĒętRźšž.§o£;xxN=üPuنֺ’ö”ķ&”įæmi/#€²…įG„‰įe00 ”c±ŽJ{écqėCā9/Ę«wŽæ¦©ī”½¦a±ßā¹“/Üt#ķķ464āøŸ½ń³|å¦[xݵÆ+Øī9ēņõoŻJ{G{¤’ąHŔń Ļ=ł;]wC†.¤LYˆøRĒ“ƒˆ2«.)ćVēÆNĆnųcźLWÅ.7„³²ĢjæéŖ9łĒ‚iæO©YFJA$†€Ŗ‹€¾"ĒqNØķk? 1ÖēaX’Ć×q•Ć("7ŽŅ·®FtÜIÕŌJž.9qĮžŽT„€‹NćŹĆ]ō®ÜŹŻ»āØXŒv«·PQ ųh¬’õß1=W‚!ƒ’²īū¤©’ņ­’į5Ö’ü5æįƒÜ÷÷ßģ<ō—?żöGē_tyMyE„ä]…«\vļķb˜r2`_eŁŚw@kėK‘Ē’é“Ā”Y௓C@)Ł81ScŪ­~żvĶéóņgxģ2i¼Å>łF4Įh=$†į¹T•Ć˜ŗ¬’ ąķĖą„QA_ælP+Ųs¶ļƒ­»`Ė.8ÜīÓšŲeeøŽM2‘ˆ„‰)­SSŻÓqķ#ļp­˜h­®µÖÕ7ǶLœRŗcÖ¼ŠżńĻčļFž‹¢žéM¤4„ru6埒Ri/å_{CÓ¬deõQkļž×K¤Z _š‡“£„ eĒšß2~,µĆ¤½;j ½į¦l›Ö¶Z;ŗhėģf`0‘ń)Ž[1Ė¢¢¼Œ¦ŗZšźŪÜ@ܲˆ’aP^Pīa~qεš’ò RČm;”£3÷_!Ó6÷1±ćŸ÷ā¦m:7ēZäŒXœ‰gžÅī‡Š8ŽŲfYBģl€É÷•=Zš/röB]g뉗_FVU£J¢3ŅJ)©3†¶}ū0M“Y'ĻgóK/’N`ś³Rz–aYĄșoᓆ’‡÷īįłļgöi§S^SˌE‹9°cØŖÆgĮ9P^]ė8¬{ś īŲžÓQÜW8éō ’”­ žƒ&é4%q‡Į!¼+ĖKK©©Ø ;Ĉ¤ÖlĶ“ ø}d(’n*F†oå,ų‰pŒZž°Ć5!jœVŽĶźĻš©w}‹Næ’?żq~sĻųŽæ‚ķ¤sn‹KW\ĖK/gׁmüčO_fœ”Į’Ł‹.ęāeÆf灗łé]·"T–UÓ\?ž'Ö4ż~¼Žjšłč›n$m§¹ń'ĪÄ)ų/ņ r¾#;Ū~­D½s+bśģ‚ęĢĘjsžøzū„ķZK„J€B „\Wk/ūžĄ†VŹ•Źu“Z)m Ż“©M‰J§…!āhi l‰ŹŃFĢTøˆtJÉX\(B–M­“ē°/…ΰB°ĄsŹ€rµPŃ,0AؘlÓļ?'”f_©dåü<§¹‹”FEL֜†Usš.;é]}ÉŽ ķŪž¦’w<ŃTyØÆŗ¢ĒŽ[ø  Üˆ‹RzįŌ§MÆ»ö]q³īŹī^a6Ō™źŪßū6’{ėWyõUÆęś÷¼Ÿ¹s梵ęĻwż™}ņćŌÖŌrįł¹Iž|źI,Ė¢“Č’ŠQˆœÜxž›€ÆI£A Qk£Ćj¶;6ž¬qćįkߐrŖŽŖ‘Ó„TkZĘ=sŚGē¬ŲŽÕCT„Ń]ˆŚśģ}ŌbLn9žVõ#‘A|ž(™£!Ē_pœé’[W#VžćĀJ¾-%ĒŖ®H‰¼ö\^’ņ>uģĆŽaįČ*ŗ-Ҍ!JŹ CY’cQņźa4ŽŖõ?_.+kž»Æėµ’¼ēĻ?Y~ęSź›š2n{öw³|ŃøŒĻ;Aƒ€^¹ŠŌPʞ}]h„HŪ i…Ü“‚ €ņ·•²zŠ;¾>:•ī1IU¹ QsŽ.1ų¹h éÅ#˜£ćaÅ|_I€ĒŲµ6ķ„ŪaĆvxyÆ÷ņ‹Ē1M“· ;"NvŚ×v(=®ķPśāĶkū9| łÕ Ælś×‘R’„6„r}źæF8JJś/䠔Ę恈ß~źPūQłżL)kA†Ē)Ē˜Žr¼‚ “¶ń⦗ٺk/»÷·fż (Ž7Žg9HƒNj/—8`’– ć˜5u2 ēĪb|sc°ƒ’`{š®OØ~°?$ųĻ*DNPۚŌāŠŁ‰±}tuēö™{jŠv?ü`^¹ą¤+®bę5×rųÅIt“€€ +Ī cÓĘp—™>ņ†Š˜BqšŸŪ0ŖÆ<āŗ/oE<ŸbbÅćT74ŠŻÖ†iZĢ:e›^z;1€ iČ!ĢÅĮD•Č.ļŻKŪ¾}Ō65#-“t"Į¤Y³™³t9Ņ0čéę…G¢æ»« £Œ UHqū übö÷cUÕ`§‹æ×Õ×ԐH„HŁ…’® ęxlg'¶H‘Ik!„Ÿ Bxõ0ė†4ˆś?ܑŃ’Å/GAAGO;’uė;ødł«łŌ|…w^ż!¶ģŽČ}O’9S§®ŗO¾ó”V|ö e§ śįō©*ÆįsļžJ¹^_Žg=™Ł2!/ļŽųŹ”žßJUy ßūćĶlß·y#f'7*ąJŃŗź”¶ŠŹ[rĮ“±ĪöŽ~=˜V(­”J*”4Z9B*S å:Zi!–VŚŹ@h堈k7ÖfÜB»BÄ$®£ Ū’ZjG Ɣ(åŚ¶–% ä fJ€‘²”ėEÆEʘhU¾$©ē½?’Ó3R£¤¤ś”’’E§$’³÷ļķßśĒ½=w=8¹ö`WuÉAŪKš X„‹1²Ģ‡(Ą¢i7ĻŪxéŪćVŻåųd‰Į¤+1kdqĖÖ-|õ_ćĖ_¼™·æåķŁ9 ĮkÆ}-­‡óߟžO/[AYYétšo’;|ó;ßä†ė?Hyyt`Ś£‘˜YżęzsĮ7:œ59¶łJ ĻgkŪmO’?}öį³zķ ףnüJC:ĻU–žR"]s(ū£gÆŲE4C…ƒž„Cļq“n• śžs8īAG#ś’Pō’õO#Oķä%&Ÿ=Ę©ž0‰™˜SĒ1ż‘U¼l; ˜&‰źjģX]R–{Į%ų߉Nżh“†JżŌ+fż$ŒN_UóGž¹maĢ*]R.}żIN™Żˆe ģgƒų Ÿ ī;p°‡=ū»Q~š?Ėņ­’JgJgżžµ—ö†Ž/„MĪYe#Õn #†”©Ÿv)}ĢBųce>ĀĻ8€F 2ūĮ‡¼żp›Ģ¶Æ`Ļō#rė &4­šĪMß Ęq4¦”I¦4=ż¹)%Ņ0¼ą9~„CūS+^Xٳ4•P­“fV“‚ųOᨒ†‘“ņ!üØ’ŹP¶– „0\ŪµöϘż§“tzžłŅŽĆĮæ>Š›8r’˜¦’&ʔ§W«,˜3ƒŠ²QӘ¶ž~aø÷AžłÄ³ģŲw€īź~ō| +€s‹@Ÿ”ѧkōb’{…†3S€i k4Ż]}¼¼n?»†·lE+˜ŠÜˆį»+Dƒ’(E@”² ų„ģ*Ƃ’šva}ŹŹ`ü8hØ÷Ņ&äü„ē25-S˜°ü šēŸŹ­ÄI%3ķPZßĄŅ’žf,Ę ?ś>‰ŽŽœyåtšcny>H`œĒpo©$¢²UZÜ!+c§R8¶ķ±›čģhǶÓ^D¶’œu =·ü©F?³„‰Į~}½¦É˜ÉS©il¢uļnV?x?ÉĮØ&Ō6a̤ŗŪs8”E ’üžæž ИBa›1Š…Žx™z »!(eō¹]A‡ŽoF ‚·Ā,õ+4±ØSVō¶ųɈl2 zš_PčķlŪ»™æ>v;ƒÉīxą9©ś¾xżw™7m!·Żū#īzä¶¢üņ"ź|öŻ·²`ęR~ór÷ćæĻT9wń«X1’|žšĄĻŲvC­łU+^Ć\õ!6ķ\Ėē|ƒo˜(¶Č¼¹»_‡(ŽŗE‡kœ§»šĒøӐ²©¼ÄY׌ƒw{i@ Bk!4~">¤į½?5 w+Jį½|H-0…Ō9YBc˜?Š 2 ųĮ‡ ?J†Mć’x2n†dļ³ü€€ @čuƚ~X|äF‡ÉÆFĒĒ÷ĻĖ“Ŗ*ŹĘ,ÓrŃņ=mµ‡vŖŪƒŽé:ڈ)ėędpWäg8}Ī·.˜öåĻÕW/łÓ(EŽ;½« |„Æ>ü«ž_ŏæ’ćČßäāE‹łÓ¢··—Ż{÷šīėßĆÓĻ<ͧ?ń)nųĻŽŠĮSL„暗Æß°ē[3kA0ĄR}óŹÆīIN¼Õ2“OĢh|ąƒ=}ĪO–̹uóęÆŁ×“œšåø9𣩓Ÿ±óS¦ DÜ=ŗl'.ą9¼2²üŪ\nŃ£qhŁŗa½HmI%·ŒĘœN¤“Œ„łŅ„\vļ*zŪw“ŲVŽ]VŽ*)Ķ*Ž5ųßP2끄@šH¬’NDģ€#͐>cŻĶcÕ;~÷Ƨnźģh»bö¼ł(åņšS;øųœ)x ę’’,x öĒ5Wx>’Z‘J+*Jt&`ą:¶ž+†TH©3~ōė·{J€Ń¦É éK}Ėæ' AOŸąP;“¶Ć68Ųmdā(×ūĪlÉaˆ‚ŖŚ:.øģÕ¬}~%Ū6mhyöÉīĻlۚxä²×7’¶n|l@8HX’óż #©’Ā£ž75ĶHVVFfģčxāģ®Ž#>–“ŽkŹæqM 4ŌŽ^Źæ“ķšųskxäŁL"& øō\=rjźżĻLCXū×¶ń‡{īēžGŸąā3–q޲ÅX–÷Ļ;šOĪvńLyQ2튁’\Š•S×ÖĄ’…ŠŻƒŲ¶:ŗ†’Ų~ß?h˜;‰gžÅßś./żņēģ}ś)p]źNšĮ¢>L¼ŖŠ]?DēÖ­’všČķŪ5µhY„­"µĶĶ“īŻ‹rLÓbęÉ ŲōŅjÜtŚØL˜źüŃFü‡O‡ėøl^õ,;ׯÅN„2™G¢:*ńßĘģ`4ĄŌ€Q[ˈ84:ą?³LQRUĀ [œ}³,jjhė*ō+ÉōxڜżŽ8²iƒ(ĀWŹśĢc¼’Į’šurtõ¶ó£?-gMē,¾„‹—]ĶžĆ»łŽķ_.:ĪHĄ’™ .ąŠ³^ĻīƒŪC±<™9Ł#–nٵ.ŌG¶FmU=ĖMø®Ćś\×):NĮ܆«3Ją?§Ž†m›`v!ėȚR_įĪk®OÆ?Ō¦„TZz¾’Ź‘ -4Z»¦J9ĀB+WH%l„”–®kø¦š]l”µDHi !ŅŽ4b¦J`Ū®°,ŹsPC°LĄ†€aŅęžĻ5i1ū=pœ"ž‘ŹŠŖ©„eēŻ²æuŹŻ‡÷üżö)[6—ļ“,T f•É3ęü䬆Ѕō””śN$Į¶=BĮp2µe }ż}ōōSYQčš8˜d|ķ›_Dz,^’Ś×óń|Œ¦Ę¦!ūÕZóäÓOń«ßžŠ[¾ōeš› Ā4EJeŁø·/(§8˜“ļ™ū¦{”ŃvwsՆ̋ršžs¬»ńn{ūż>qͳ¾~[±q’7€‘Éæ5@”Œ”žæu5bż3ČÓ˹I Fv7¾Āä’ÓYžŌzÖ÷¶Ósxż‡ėI×5į泊ɱ’‰D’©ļžžH|’‰ūušŸ›ÕcHæ÷s|ā{ŸŁ2£··gęüKŲ°ł‡Z»¹ś’™ŌVÅ  ’“żh­?¶ŅöJįś¶€ē÷J±‡Ī,‰Į€Ÿ"|“Uõćé.½ā˜4_żƒŠŻēżėźĪhļ„¶.ļ3˜Š…ąŽ‘8T`Ą|±L¦Ē6•Ākæä¬³©®®béYē3uĘlžę ŃŃŚzžļ~°wŃÉKŖ~vī卫ŠFżQ’’?öĪ;NŽāZŪOu˜ø9k•³H ‘"gcø›t×¾Ųē€qÄ\c°q"Ł€MŽI„PŽ+ķ®6‡ŁIŻUß=³Ū3ÓvµBųŽļż!¶§ŗŗŖŗ§»§ŽSē¼G)]€Š¤„“ØįžI“/Ęć¹īl„ķ¦1]§iįiūMõ_×5ęŒ£ė’ŚM[¹ūį§čķ@ĢŽ5iœ~‚ĄPKģ‚ȳ1ī}ų žzé.9ētĶķIžqż÷$æłĻW¤täo&ļ©—åmą#z{aÓDwYņ Ö/Żx‘½ķĢ=’ŻłŁĻqÄĒÆFI‰‘rEļX³†Õ·üO^²˜üē'‰ūFžD,†Æu7ń‰łļ+Mש®Æ§«ÕÉZģół˜{𔼵śelé̈u©N®j÷Õö&zc$’īļ;‹å=$ż1W0³Į±’’ģ«źuž§‘æq"’i˜Cƒ˜į*’‰üÖÕŹp˜”XŒH4š³ÆLÆ$aEé·ŗq|¬R¢€ądźå #ä?mx›ČI5‰Ķs7ŗŠƒž_żŠJrķMŸ 3ł/ Uš•ވT’ÆżņS$’™÷ōģ) ˆĘ‡hiߞ;࿯¼źŠZ~yļXŸ6ŒšüńB—ų=ēTėŚ mPŸė!8evSr[÷€J(!…”šfkJ9Y“•°„­¤ŹBH©+Ū’ĀÖm!±¶OÉDB>CĆRįÓ°’ŅĄŌ,MY ĶŠ‘Ųɤ";Ą¶•¦i"c–’6č€Ef(ø““ieņ‹’m‹ŖqZŖ= M3¦N˜yA»’ż ^ßłČOfÄWo˜1ykŸiu œ,ÉŖ¼zŠyȤļœQ[~š•B3gŗ §™ł3Ń?(Ø-A ąØ#ā¤NäS×|šļū{ŌÕ֑H$xmõkÜsß½<š·PJń±Œ^łAš S§ĮČ wß{7æłŻoŁ“yGyŻŻŻ%tį?į“łæœłšŗ Ɣ"8§ś©d>¹Ķ²`×Ļ-Ėt¬õPß1~aG…ņL½ķaūūՐž*„±Ŗ’·nEĢÜĖ4£ŒĖĘ8¼޲ę9KYńĒĒŲŻŻI×ö"Õ-X Él#@"–y-”ų_©šZż ¼ ĒžÅGžż[Ūķ/®|zʢÓL&¹õ/söÉ3™7³6„0ā €R4օ†…„rt Ķcå?-"Ø$Jß1¬Ł¼ļŖœf Œl¼…N”Õ’xś8ż¾'ą@Ä!ū{{œ,9äŽEņK„¦9Z90„óYOMō”ožJyH*ėš™;Ҳˆ%@46pŅ™ē±sĖ&Žx優ÕĻ÷}nēꔕg¾§ń· SBn×’“źæ&•°’J“Jé¶D³-i“Ķ™ŽŌšģń©¤Eē/éuYeVQćĖirÜ0cŅD‚Ńś²ä"Opē?ēÕ77¢5 ø ŌžsZ€É .Q°zģēg·ßÉŅĆń¾óĪĄļóe0ØLbļ"YÉįśĪnĀ&†ūt“·LŅģŌQÕUˆ#Co/lŚ ]]yXŽp“;īøO>ɬsĪ„éšĆńWV1в‹m=Źęæ’Ķe Ė"ā®’g·›K0]µ÷…ü§’æ}z}¶/’½‡ UT0ŌļxÅAfĶ_Äś5ÆŅyˆ„@ÓJ8Q9øæ”Ž•ü:ÄŻ[Z OŒŒ`æ’ļ“5ł÷*.‘ü`K2Ž„łP2’‹¬”ŗš‰¶‡…¶Ęh$a%ˆÉŲ©gK(Ēé-MųSʁaņ_‚DI?%‘ŲĀ•4]ēą™‡RWÕČP,Ā[ŪŽ ?[I”ä āŗ’łógĀ+o=ē}Lv{y†zĶ„×ÓXÓĢŗ…Õ^ČŲgč&3'Ķcżö7œ9BN9ź\N>ņl6ķ\Ēm÷’ø`?ƒ+<°¼Ā‡%’ilY•5ąĖņ šŗ’ō¹ĶŃ{ÖģT©,)….¤Ņ°•T¶“„m e+”¤Š…­ MZŹ–š­'„’†&-CIC¢‰¤Rš”ŗŅdRH݇ĀÖ45’¶i^^īżł¼bāššnłńo+š‘ļTßN4ÖŌĢó™ē~}ƦŖŸ$õąŖ)•kŗ§†šż‹ē]÷®ŠĄŒĖ„¦7„2ˆį0”BĻŅPŖ*r+=qĖ/nį—·ŽĀUłOZ[[ŁÕāń7Ō7š‰}‚Ė.żå…##6oŁĢo~÷ī¾÷,ŪāŻē½‹›v3 š_ŚE˜Štü„¬+*|Ÿ!A–F@:Ą5§6Ż0Ų(«©éC„+QłÄKĮ:×[u“xŠż Ą± ķ7£Įńø~ßø_Al_‡¶"Ąē…“}ćßĖ2ė/O1;2ȞīŻōtn#Ś8‰aŸ”˜kæĢ» ļ`ń?æėoö±^uŻ«’nŗ”ö9‡söļæ×’­U/¬®T~fLž°Ļķģnļä¶{’Fwļœr©ņPóŲO˜ ņĆ VĀ O­akĖn>~é…4787x~2ŸŽ.ü»C2Ȇ!Ą#h €.Ŗ®†#@tw;†€žžLč"-»xķꛆwyŅĘ<Ä/{¦]œü{“’%{‘pŽWŪ·aĻ™ēqÜ*kk‰E"Ča,ÆØdśģƒŲ¶įM†cŕ#𣓬 YćŻßäĄHgˆg4ųŽ'’å%“’TEm0B ŹO4–§k55ģéšZĒŌėhµ¶a 4åų§ ˆ”€Kp ³«|AĮc !—œńA®<’“4Ö6—Ū¶Å?Wž…›īü®³¢>ņŸĘ3Æ>Ā3Æ>āyh©ēsä‚ćx׉—²§c'?æó[9ūgLœƒĻō±aĒŚœĮT–Õš_—Ū¶øī–O‘“JĢCęńLyÕ)ńņ×*Dž¬$l[ss=Š}sė+ģ UÖŗ½]Nj@gå„ٚ.¤%”45!eRHw(€Pš“uŪŠ†²4¤L‡$ɀ’𲦁;€QzX–Ō C“q«ėį7*įGyW—‡źēĶ9į [wVÜvŽ”Ÿn8xŹŌ³L]ÆJ?3™«żÅ——0TU炦irÕåWNF€©S¦rÕåWńžK.%Č?[—RņÆēVrėonå±'cŹä)|ņćŸä}_Buuu)§ķ ŸQ~Éō擾»mĻBN…ĀŖl/€ Ä*j"ŹJ$ė“€WÓ`¬b€ū×s`ĀŽQ!£Q’Ÿ Śēē}ūso>å!3%äūIMålŁŽ…”ŠxRā÷„RŗāžI„LCÓ¢›L"Ön» Ó8‡Õėg0·±¬<ä~xæ8Ņ_čĪ)j0<’ÓRó“˿rz™ślŪĆz~%”yś*ėš‘ÖˆIHą#šz”Įģł iš4™ k_ÆxóÕŻŪµ5ŗō¤s›=qšÖ—LŲ¶ŅÜ®’ ÆgŅä ½¦wіö1»žO 6ćÓF­nQ2fM™„–/N»DlŚŽĀ-w?€°PW*ē×éķ†Žj0UŃqOß¹ł7|źņK˜=m2„‘’t9Ćõ³w “¬L^ī2äŃH’?ó ×ø€ŚZØ­EėķCmŚ ]õsyE6mĢžą—gi΁y‰ēš ³÷ ’é?{÷bNœL²€˜‹¦ėTÕ×ÓŻÖ6\V׊ČPd½-;ų„īŹļŅŲGņ_€‘{Ÿ ‹NZ‰ä’)ņŸ®ć’0˰­ü/ųßOE8L$’³O&5ŚöZ»R/x‹­p!†—‹#Ņž£#YĪ<Åü•LĆĒŸū '.9ƒ”X„æ?s[Z6PŖää£ĻęģćßĖņŧóåŸ}Œ'_žGĮNKŅ$Ė’E<,čńµ;«ö_’ÕgŠå^ū9S鮍;Öę ęKW|—ŚŹzn»’Ǭۺŗ”.Ēü—ņ•R”³jŪ”.—?N™Ó4øµ7¢ā ©„š)”I!”THĆ1Ų–PRXĀ–š”Rj¶J…$ %I*ݧ4e © æ¦l[é …ņł,ĒGIāé`[RÓ MęM ˜Ś¶˜ī–ż&ļ0ņŸFUY°bīōşŽÕ-Ą‹ŗ2Ķ®Ī‚Ū  #PY6ü:/ˆö½ķ<üčCüų†qĘigœ³ōōōšĒ;’Äķææ]-»˜9c&7’ģfĪ9óģ}žė”Õ=żgnŪóÄ_Óe„„„Ģ\ž“öČ(,! `4ųæ°ß²r’ŚõnZī*/Uż’é{Ńē$¹Ģgpö¾ōĄ#ä'üųKl=~ŽņbUŲ*„įį%žgk®k°‹ó¤ sZż?fg^×ņT¹Ģ*—ŅłJ›žœ6I‰pÆąK‰pŪ•Ģģ7żŁ`Ä @iˆt¹„ž»?}/)W»Ķėż=j妵g¢0Ćeet÷Dxmm+“›+Ø®ō§f択ÆæŁšRüW„üéÕ9÷/=\4-)Īk°¬ T‹7ōźĆ)›rÅ`Ō„7Pą(4!х£Šļ3Ÿ"čW„Īæ€_0~SaźN=]S€teFP#Ūd~Ī©“ ŸPYåBÓ9ü„ó14cX;!>!•DIĄtR1J ź›©ØŖ¦³½{Ā›Æv,ļéH M›Ś„,%¤†-ŃmK{¦Ļ9#^ι¢Ź²h»ļId¬ÄÕüšŸYe3ĒUÉ֍p0ĄĮsfģSūk7måWw=€¬‘ČĖ•“Ēę@¢Ź”ė%Ļ?÷Ó'M¢”¶¦ņŸ&öEČüš„·ōś©ž†ŁHÕł“Ž ĄÄfD}“g9ĶKž3¶rD’А’¬ĢYm z%’tš•ÄŖ+|c˜>‰X Ū•F®¢ŗ†ž~āŃ!„&B>MxõŸĢ 9WĶ‹”{’ÉĢĀöm[‘RŅßÕI<šżżx³Æńy\Ńw<łœT!?‰"Ó鬏ƒ ˜š[Z$T*.MsüB‡Iy~Œ<Ŗ®æ£ ’y ]»‹¼’¾ņ”8ėø÷šśĘU\žÕ³¹’©?ńŚ[/šĀOqēĆæF*ɲCNⓄ籄e=[[6zwšē>(6֜{0O#_¼üŪ,]“œ»ū-zųWžuĪ>ž"™³„[ļ’1ķŻ{†Ė?ģT®¾čæŁ¾g_śł‡±„]¢į¤¤Į.Źóåé§`Učļ†¬>]AĆHnģŒ!(%Rņ“©m)„ „„†T©¬či•’‘¬ŗ.”.(M % ]‚­†&†#Xœ–B*EŒŪ-„ųŽLĀ ½Ę·æ©DŁÜ"gz@į3u±³;īˆŠ†Mü¦†¦‰éĻ󐝼Sš&š—°¾QUUÅ%]œŁsņö±fķ¾wĆ÷ųĢ>Ė“O?ɔ)SX~Ürźė¹ćOægćĘ ģńĆbĮūŻś_Ūś“æd–d0²ŗQoÆWĖuž* >?äĖ‹"ŅśŲ "X^8@o_6€§]ŪĖó“yŻuˆż• ąķr:Ęõ®WO±ų/l|Ѷ -`pq”zÕM°š„Üņ`9~ź°X2ó—Į§åžó{ddjžĖ’V|ęzj–ƒé‡CWĄ)—Ć Ƅ™ÅĻiźBS™ˆÓŲ7H垝ųūGń݌Bü/¢)ױ٩’xÅ’ņ¬ž§!]ūW¼‡7Næ„SZ[w¶nݼ˶čéā¦ß¾ČcĻnŽœÜ\įd’dB"ķŌźæ+} ®Ņ[ŪrŻā‹Ał'”ߋęL…`VhÆ®ƒĻ„€Ā(AUT—CeŹĆPt8Žßē!“b?ģ„ĢBFó$,|8㯫r“Ŗkė8ģčc™>ė Š¶±Ė’ü«]ŸiŁÆG MZš6XQÕ4T]y’W;Ż’Z=&×€©į)ˆRĢćcĬi“ö‰üoٹ›ßÜūä…¼B9>pļT‚¼Ba×K~~ǟٺsD2ĒMž3ČV™Ļ$Ö"£NńśŁ…µ†’ļžģ Ø®F,>m鑩Pļ:Ąƒå’ģ¬²62?zµåAƒsųH. ī±³c(w52Uuu}`öA 0|>,ŪʖŽĮ†gķ¹ćŹ3Ąœ«ęEĘ<Édīõ°’›WæJwWÖ5)ōe·yé½O®ąyę9™q'’©rcpÓ_x½EÓ4ź«ņMK”ĘhĀ“ż` °@Čk’©ž®]ł/ˆēyy½{’ų)\xŹelß³…}挻ödģ·m‹›ļś_śŁGšĘ7>vSóL’ĘņS—sęidńüe\xņå“v¶š“?åŸ]Ļz0J)¶“¬.+ UpķU7 •äś[>M"ņļuLя£ż‰J&aŪĻ]ę¢ UʤŖ2%„©”0•R>¤2”ÄT¶šYRł”Ä”Iį“–2„- ;)M’J·mې–¦)‰&“J³@³-”[J „,a뚦¤.’I%”rÓPRå= ?ń]ū~IłĮ£<Ó‚ŖŹ«v ņęīA¢–ēb“g˜·Ē³608:ļĶl$“IžśĄ}œ{Į¹œzöi¼ŗś5>’™ĻńŅæ^䑿?ĢO~ųcnśÉM<ūų3l޲™k¾xĶŲ;sĮŠ'9óŗ ŚD QÄĶüw¬Wą[Ż)ź:ÖĖdžż•O6_ś‡ĮO^öūĮ¹-Ū·#vŒ÷dy psąėĄxŽv@>”źžßŗ1[Q„é,)To°f/†Ź¬»bŹ|WŽø[O[HÄ2’e?dÓąØs`ĻfŲņŖÓö‚c3ėhŗCś«›`ć*čŲ Kχś)ÅĻ됹̰,‡"T öįŠ e ’„‘įžŸ5O,ÅżŠ‹’ £@ź?/ŒGź?/äė{ź|ś®ü §ĒbŻOmŻ“‘d"eŁ<ššz~{ēk$I&4„1 mxÕ?‘L»ż+”+ī?Ćŗh8‚€[w—>^„‡“ÆBÓ+‚”ĆĮ3s |ĄēfÓp ū¾x=~ŽE>ˆ™óĪ«P †µ•ŽCÓĶ“8dńQƒ ?z_Ūõ’£ķ4KZęŽ)ÓŽ£„–~oļ¢ļ^ME¹QNõ~ž+ i®«óńmŻüņĪū‘5õ>5jQĶżŽØ÷)ģ ›żęģķź&/¹Ķ!óéķRÉ’H}§Øł/¢ Ž@M5bɰģ(DĆČ|£0łĻfłÉęmåżĖī/§RęŽlqė{ĆšłUf¦¢Ō ƒ™-IJ–-Sļ·“—Ļž#’^…Ł—ī@“o/WūDžóŌIß¶MP& 4ą ,$ōNś-Ōėå)‰`ƒP"敼])'21ņā.åwe¦ŸŸy’u|ē×_$ōnVĄƒĻŽĶoų9”@˜ć?5w(ÅƲä?ąņµż!ß¼õšįqzaīŌ“ģŻN$:0\ö_—}›†š üžĮ›Y½ń„1\Ū<Œįœsväy†Šµ#:Ś »3·\Μ׬„n*)M%1l%|Ja&•2•)meJ[҆m)SJa([˜R ŻNH#™”ŗTŗL*M&•f+„'Źį¶ó7Ū4fŪJ“)#@ŚUiŗč—,JˆiŁĀļhTהńüę^¶uF‰%ķŌā¾ū{+ķ᳄“źy“hkoē?ŗÅĖ–põg®¦¾¾»’xO>üūšĒ˜413±,\ʗæųexšottŽ‹s½1oŹyļ*T!žå–Nƒž”ĮĢņĮ~„›żß÷üm•_{ ū{0ł-ŻĖ7$’įÆĘ¬Šēv ,*™ļK%Q¾oĖфŗļoģ@)ź’cEWbZ'ˆ"į É8ģŽč~7¦Ģ‡oŽ|ö`ŻJXótęæDVVž…'ĄŚgbæ}-¬zŠńš¹&ņÓ_ž½ĖécŻsNŪ /~^s§PkŪ4X1j#Ż„śŗ0ā1„—ūö±£’+ęPЇ@„Š’Ai«’ •y?Zżwļ7Läå×rµŠÜ¼uĖ&B*ÉŖÕ-|ē§’¢½sęĘ0R:āDB„ŅżIOwĖ44‘™{uķę"'< 9įƒhf¦ż²<ģxøĘO<ŸŅā˜1~ŽÜĆN@ĻöĖ*į 4Ö¤½L&O›Įģł‹|Żśy»ÆżK}‰ŁŁĒ(„č|āÅ1™·0µljŃzū‚“›ĒlI$-~}ļƒ$M y©rRó½y©"Fœ›~×H>ėa"ä"ą©Ž.żłÉ?®ś9E%‘ļś#p¶µšĒ#ĖŽB46dō™Y3wĘ\ˆü‹Ģ’e•ē!’Eų¾—ĮAut`F‡(†Šššœ8Ͳņ š§LDzlli#Sb§ĀóŁņŸ­”0r>×ä%łĻžé2=2ˆ?P\v©¾Ŗ*oģ­O P%źQ–+%˜&’Źe š«“”ļ4§J‘÷ßü‡0{ŹA¬Žš+W?Q“ŸŸ’ł;\žÕ³¹ćĮ’Éź§ųX¼›-Nž>yńµLišĪ_Ÿü=+_bE…+łO’Żś–g®`½>äó/R§$©•i*[™ŹV>iIŸ“”iŪŹ“,ŪgIiZIeX–­K©t[)[ÓćJé [źR(M%„®ĀNXš251/›J#¢Ÿüńܧó ]×° «¶ōŠŽĒN{fe<¤„Ķ}śGį ŁÓÓĆG>ńŽ<ęHnæćv.¾š"^ś×‹Üö?·rģ²c >Ӎ MH)iŁ]Ü] üfķØ6C&¢łĮw~Ą’啭g|ć‰ų-+÷\¹i(YżCŻežŽ‹ŽjžĖ\…Øżīß’¹ §µųc’Ž~ ±æ8õŪźp½ė¢s’÷Š’ßų b aĄŅRśŪö†CųÓ÷xy­ū±;„/&¾\²Ÿ²*gU?- оāC0aÖHŁÄ9N—V[WCõ'ō fL$,%UÉ5ƒQ½˜Éxī—ž#ž—_+*/”ųßXQŠēŌ}Ž››g$?½kēv+20€R’Ö½ż|ļēĻ%S’xŅ!ž^®XŁpĒ[­ŻZŚxu •Ķö|…Li‚&×Br<įh ¼ÓPVUǤًFēOąŖ¬ėP_5Ž!% 2mÖjBõ›æóm­ĖHÕ’ź[Ä÷ęĖüZõĀś„į7MšźėĘ|ü_yš½ŻČ ξsąQņ]Š]{ŚøóļCž3ę›"gĖ+ž?żŃ›Ģ‹‘rģłėg·Ÿ£ ‚VSƒ¶äÄ1G£Õ޾ćŚo˜ ,…ĒŸ{‰­»ZČ$’Ł$;K0żw˜[„·K%’ŽõÉŲĪģ3łwQ«©A,=mŁŃhõuctuąÅļ]ćĶŻY*łĻØQ°ŗjvvbXÅ]„Ź*+Ѳ¼€™s •Ą²ż“4łWƒų?Až³Øw’£ ’ž#%Ļż*‰ š—T–•ō{’z  NoF³…ć0ģ RŽĀ©å~!«RĪÅ%aGæ``Øl?ꩃŽ^xw|ó!~öÅ?P›ƙ·į"7B Wœ{5š¦óõ_}†žHo±ęLIeŲéČx}ö}×ŃT;‘»łµcø(ķ²Ō>‘’¢­²»w †r뚚<}V£RĀPRJbŚ)M[)S*aJ% i)ÓNÓ²…aŁĀHŚĀH‡X(MJ' €¤Ņ¤&“takZ2é¬ųēsķMØŗ@œŁ;Õw2Ŗk¼ŗ­—Ż]Q,éˆüåó(äZŖ€aüöWæåĀ .Äē+-;ŅSĻ<ÅŁļ>‡‡}˜›~üsŹĀÅ5 JEcł”£ņš ųńóÆśłū¾ż“‡¶®ė‰Læß²}+ŖļˆwĢśé ’…Ÿ?¾įī“ę~'Ć}ĪÆE’Ņwśhś.°qČś;% `ü ūŃż` MәU¼¦óū·} ¤ŽćL>(׿æŲź?@Y ōīĶ-ļiƒ2×āK°Ģń ČF¤ü%,PN¬§VI*āeɆ•t¬cyū1˜$üķ’ólĒ•śņ»’ƒ³śŸŽÖmĒål?÷œ30Ų½¹§«eŪČŌźæR’dR•Løż¾‘ykŅ‚M; œƒo2VĆå˜zįĘMĻ¢TŹ!Ņ惱=~R:$~(ĮŖéTÕĻ šp,̓C0žčīwžö BÄŁ78䔷÷@gōEć@ŗ ÕP_휳U5µT&Āl’į3lżÅćØb–•€”2/ÉĪ e"“påxøłoņŸŁv~ƒC^ļ„<õµŚ“£B?véHh€ĒŻ(lŲņŸ])³-”Ę^žģqheāq~æŸI3f‘°,,[b{äźų’’Ģ’ É#‡'łPąODэāSÆ†źź¼äŪ&•Ō„ČŹõ?Mž‡CÖČ{.E~.J%’Ą°ąß‚‡éĒ»M„a®ūȏBp§3cҜ‚‡å\ķ"ĆżāO?ČērϼśHžJ©s1¬å°9GņīßOĖŽüōĻß(ü«3Nä\fÜƃU°y=^ 欺2}v]„’˜©PŸ²÷%mŸ”¶Ļ–Ź“„mJŪ6±”!„eŲ¶2$J')ō¤­ō¤LyŲ.A@-™ H÷éöčÓ®:a¾Ó}č ¢²ĢĻŽAɆÖAb–£ąŚļmĄĪEšĖY/œÖųō™Ji“z"³†q"}Īeķ÷9CFĻ…˜tĒs7„a$  }{ž§§X@1Įøc?pėq7ä£>×».ęXÜ’ÓŪŃA4]£äŒģŪץ¤9Ī*¾n8^ių‚¹«ś^šł!īa(ˆG/‚4ģ$č\DŚą/!ī·ŗ‚- KI 1@NK9ī’ī}ć$ž—ķž_*öEüo¼V’Óšł`Śś.ū’ayŗ«» iŪ(©†ća“£xyś\ß̐§)vķnćÅÕk!M,{dī&’Ū&Č)޹äæpż &YS~äōc–"źėó¶|äÓ}9Ē‰üēl‚h{ö •ąÕćåŠŌ<‰`Mm*@:†Ļt(Ą~&’… ļ|ņ_c!’iDc%y˜†AE8’ŹA„Q‹OR^d†dõ+ wr6.Äqdó…5O§Rüˆ¦éžuņ’’Tń§ß÷5šė§8ŹśĄĘėņ6Zņ“<śĀżÅ+ó¦-d`؏Žī6¾tÅ÷ųÖmŸ#š(®Ķ1Å’ÜFJŲ‘ē9*֎×};ŒĮ>h÷V<ž<«M3””¦BJ SIeJK˜Ź†²”!“˜RbJ[šR C&…aŪŹHŲŹH&5]XJ³R—¶ćH(-ķī'ūM&5MXڬ³ŠźæŖŖ‚¼Ł2H[o¬Ø@! OSŪwlēśo}ĆŽ>œkÆ’ ‡,:„G|„[ož3¦Ļ(ŽĄh!“ +ŽrŒ»(ķŁģšvæļs%}³ó”×āvłe>}čŸSĖVó“Ķ„ß?»ņG—.=}×eKOڦ ė•=Ż /ļlCvõ qŠģgāŁž¢;ĘēM˜§²Ś0€ń“÷Į;" T“nEÄ£hˆŅµź†ś”§Ÿ;×e’3ą¬HĪ8ÄQō?hŁHø€f`$lĄ +‘iˆ:^Ł–eŠęCĄ‡*‰ß¶Š}.r^ĢżæöUüo“ī’ū3õ_öžģÕ’ŒqVb]~-Ÿ WĘoīīźĀ²’ĆqēƒÅĆGĘčÖšÄ>Šō"ł1k4»ŽV±}ŠHÆĀwōŚRä¾e/“vB{·CÄ»ū•ūĮ!ge?‘Ģͳ:oįaŌŌ·ÆżN|’”&˜Ō˜“Bp¤¢qĒc µvµCWŸsl}µćNNóņP-vG9±½¢ä7]S`†ŲæĢzrSÉ¶Ę H„xōł—…ćRŸ‹6÷Ÿ~Į>a>hĶ‚ū*EóĒśgņlņļ®Oö/\)äŸQ’²åi µµKĀ8v)bXē!Ļó|Ģ Yc&’Žķ«D³§ø6†Š4ĀYҘ5{±²0IÓÄN‡\ĻYņļÕרȿgyŚĶÜ9vņ_äC‰ä??’ņ"’łŽÉż^ą‹G1J𨭨@Ļ#‚:½lĶ!’`§żezå_dxŒ&+@ŃÕ’¬Ż{»[yį§™Ü4S—žėQ§0ł?ā e¼÷Ō+xęÕGčči£­k7}ƒŽ÷žXČIžT„ ?Ää¦élڹŽ÷ŸłQęL]Ą½ßĪ kŸ*”¼ —6wgņŸļ°›3ŬRŠjB>’ŅÉuR CŁŅTRš¤4l©|–>)…)Ź“ŹLʕ)-ŪPRčVRJ*-®/)”¦ģA@„I[Ód–  m+-"Ļ?X(Hūź0-=1¶w 1·sVJÕˆDÅp6³Ń@)Å3’z–}üĆ{ŅqÜ÷Ą_łĻ+ž“Wž{™æ# ę/(ŽČ> 2<ķ½„ÖŁ•‡Iōʦņg~ń„é Æ_^žµ}䛐™ ĄŌ‡Ž%Ć»sćÆsq¾õŌ Ó¢VÅuŗ°ž±øž±¹šęĮæ{Ą7Œ*žæ 1Ɖ(’ - ¢.Óż oÆCŚ«÷~YsyVꏅé÷|nšŽ IDATęŗ[!;„mØĀ,åA śŃQųl Ó¶0ā=hŁ+ūĆ…ū>ä’KįßAü/ŁQNšŽśĻqKÓ4ūŚž¾^ĖJ-żŝńRp5ŗ„n0ÓÅ=^ó^(_ˆ^ īß–ĢĻŌˆDǦn#‘tŒcÉ ·üxŹCŠśj‡ÜĻ™ ‡Ī…cS† VĄeēĄ„gĀŧĮłĖį½'Ƨ.†KN‡ćƒÉŽ“-'…cŒččqźø×}>?z¼‚č.ŃvHō‚ĆÓ `¦ąž”TUQļ̃7Öo¦«»u|į/ā§ü€OõIn;÷6ęŌĪ)X÷@@«hkļdõ[А/’ķ]?³‚—aĄ‹ü‹įćņ‘’}ņNØ­ÅXv4śŅ£5ÕY¼3‹.ŗūĒUqɾ>õÖVJAYU•ēä1č0±~C~ŃŖ ¬`9¬W„üēš×ђ’\ģQ:Īäß«“żMž½¤½É?€ˆĘų‹’¼išFuA@S P”Ŗ3BDź_:;@Ž–ĖxÆc€›ļś|÷g³2&’ė?śS,+É/īś.ĶõSŲ°}­ē”9-•ÄhK©3RiöäłhB£o°‡’|×gŁŪŻŹO’üĶ’śńxŠŽ„“sŚä?ß÷lYˆ[÷ékØ©Łi”Ż0“Š9s.ĪY*õšiÕų¶Ž£”Ö0æśīuÓĶ9,*=bŸ/²AÕ½²åż¾våŽå·¬zyĪõ¶žõåæDoÜ9pŌ+ gV?}ūŲRĀ‚E³·= `œ1®Ėg„¤*Ų÷€ŽF½Fš^ÕĻ^…Eąé?g–…*ą¤Kaęį°ł§LÓĄK3N©‘8n€-ÆĮŠ8F€Ö-ąĮā3ĄbBƒI !ŗ#.Ń܄z_Ż’}äŗ’ē…ė:½-ā®M”Õ’ŒzvŹbœ"ėɬ”‚ē]ɃOŻ£Z׿ޒ“@0\ę÷č8d¹¦HT™Ļp”ģ„“N›®„WÖĮß²˜dõ9ō±}¦C®y~$Œ3…p©ń)hšs¦Ż}¹ūC˜Üa(Bu¹ó·¦Ā GØ®Yy³ ĒH"R …"Å.‹aÖo•aĄōfēߊÅĆ¶G8qż6hiĻ“e;жn!ŠlVæ žL ”ā˜§b˜ķ{·Ń޽‹„5H}U=ś~¶_NšŠ8f‹Ö «ßD«Č9łŌ—O[Ž­ln|žFF€ŪĪ»÷Üõž1öøŸph’Zõ*‡/8hä?›”ĢX½Óż„‹®=©&²É?ī†ūq“ŃÜ1ęŽĖ«¾ÖPÖPŻ=Ųė×£:»3.‡ČłĘŽÜ½ūHž@o/F"Žå+üRŠ4PE‘¾ÜĄŌ¦‰“÷taII<@–‡1‡bč±8ŚŪEž½›ż·#’¹•GGžÓšG‡ˆ™A¬dįՁʲ2"āyāÖ*Ķz†’ƒXvō”€ĄõO¤,Ā„„Žē^l£‰ūĻžøzĆKüėµĒ9ö°œ¶ģ|ž¹ņ/y;swsõÅ’Ķ”¦éüź/7š‡B°qĒ›…¾ŒāctU-N–3k̙ꬂ.?ā >’ć+ˆzü°ęķg¼É’(«ģ łO£m74L„²Lj&|ŗ8yfCōÆėZ¤DjhRéĀRSi¶-¤ʶ„2…„Y–¦ %…Ō¤fIKé©' ¤&ŃDR)‰0„FR&§ e£”š)ŠŹ$õĀŽ8xj’|¹“QFŽ 3'9i#?üĖöQWUd[G„®ĮĶ5A|Yö į˜ж3qŅK—‚‡y˜ėæõuĪ?ļ|~łó’aŽÜy£óxA B‡ōŁ36ģżóŻé²D į  ā&ŸDÅ£õ‘ƒ}ńśU={_ŽūŸē^4ēŚßåk3a&"ö”'6õD'ßѝR(ÜąÓæ{ڬŽtöÜė†ż~'ć“Ü0?ž±Ü5S¾ø;om‡__¤M•²ķūč¼-‘©×źm]»z±•"!DĪbÆ'|‡oy &σĪ"ßśP?¬f6bH&Ą+ŗaBŅ·Ż×Æ= KĻw¼tV?S@²­X|xIF®§?Cd|SČ ,$žWģB…€b!ńJüÆÜī’&…ĻÓœś^­™Ą<’hä¶mO…Ā Å"ZW™iĢÉFm„欞vŃßŪæśg3_\öqjuµOwx]6V„Ā“D’“ķBA…©;+ģQ—©,–€ŁSąœcSB|®! R+gÆy4ūi$Fųaž X08"CŽ!ąĶͰfģ)¢m&„@Ót*««™»ąPlŪfņŌYX–EO7ķm{ŲŠŚF×^t•åaŹB!ŹĀAĀĮĄ˜V°²O„©nlńČ¶ķDWų¾øśČ«¹źž«ˆŪqāvœ„Hõ-ų蒏ņĒ5d01ˆ%ĒÕkmt –¼öāz‡¢”‡CĆåłČ曔ēy’Æ ®śø ņōéEę 1_żį>kk0Ž9ÕсżÖTOOīŻćÉŲ*@B36…ĒG/2-0»»±šŠė]”UVéļĻqšĘō “Ųø{;ŗ®£ėVy™cˆ ”gē•Ź!xyĪx4ä߃ˆy]ĶģėS`Ó»ÆėžÓ÷ŲÉöyę“{>žēŖ Ó_Ä €ŚŖ*öttxī׊ØÕ›h·w8įZŖOM8”.7” ³į}!’iüņžpģa+øņüO„ …Ū8dĪŽwʇhķlįW½‘wŸt)Üy—398*§¶²žmłsō'˹5ęM=8µKpßSä¹5OkeœHyńƒĒ".˜[§”ļY!¶­G¼$§MßAMåÖ+{Ź’;zūє-me %¤ĀeK”YŽĄöiŗf‹$ŅV–)4M Ż–FҐ¶PJ ”4ŠDBi–„)K„ČdR ÓÄõ#ź•šM‰×³šC([Z>ōė,™]Į3kG—†xĮŌ2ĪX\GcUiźśnŌU…xmw7m½1f6„1CfVųš(i*–“±ø"PĀ‚ŃyēœĒ駝>®ŖžcEŲW…ł0ž`æņéƒ÷D5—9€”Ağ޸«)ÆśxŠģųę×Nmüż›½øcå†OØśŽ{ü•݉ĀWsˆ©cœün1gœCōÆńµżöŸ0–MGII‰I0œ ķŪ`Ū0i^iļ½ī=PQėx+ī-īgų ‘%ܶķ ųŪĻįŁ»ąļæp>ŹĆB1 Å22łęĒB† ‰’eø’§–ų³Ż’óį$ž—¶H-»‹”åĢ‹yæR±Õƒż(„H$B_(žŽļƒĘZĒŚ* ČW›{»GēŠå…ł3—ū4¢qĒ0z ŻQŻÆpŻ'RĀżOĆ·ė²Ńļ[ŚńōåaX²®8n¼nś"|ü½°üĒøā„‹—3) —W0eś,->Š£WœĮAG,ĆØl`wO„^‹ĒV¾ĢsÆ®e͆-lki„£»—˜;f£TU”,åWÕonچ” 毳¤y Ū{·Ó:čøw—ūŹŃ„ó:>w;÷\¾pĢųĢџÓĘ Į¶%k6lr>ēęLņŸKęÓŪ„’’Üś#Å®}ĆCHoæw‚ÖPyĀq˜Ē,ETWŒqīcóĮķm¹Q łŠŚŪKzY>ž€·ŸVCM!_+aaŁ6…Ņ5’•å$j±CĮŒóń½ēŲ ‡»B)ä_ä^Ø’ä?UhĘ£ŁĖłż„ņ|Æ-LPU ,…²B‚rgČˆĒ c,äß «7¾ÄŖ7’żi ™“"Ņłšń›~¾žŃŸ”i:ß¾ķ‹ÄāŃįc² 9÷‹€k.ż:÷|’Ž:Ų;ĶJq²ģż ®Żņ*±x”Žž6nüĆW‹4’ŻLiӚ±’±Ī˜2‡WŚ÷,1Ų‡čōAą?yVƒ8iC:) %•i[ŹT6†”˜He(!t'@I©ō„„4aٚŗ­ =[pXĄæd\cćf4©)™ėŌU˜Lm(A„Ū…¹“Āœ½¤ž_ü}טʹ34${zć %lTźKJĄHi7…išū•üÆ[’ÉÕµuį;q^Ƈrf~^a³jæŻ–ęŸ}¦ķrw€’›]ļņ晎+7v¼ēI°;O>ōæ’pŌ”ßÅ?{č1ŪĻ:䬞ģl=]™B:  йłļKĄÖ·)ī’£ÅSG×Q IKP§¤å¹‡ĄO:)ūl ź§ĄŽ…I+ž¦sL2Ņmś½Wö“qGxœwmØJ0.¶v‘Š6`ė:¶n8o€ ÷’€bī’¾Qźø±æÅ’ūIü/»_Ö;iŚlśßw5¹ė—ÉÆ ō÷UV^…ĘŽn‡ŒśótP†p@pÖ„WÓ0a"–e!„CŖū#ŠXķøįĒź“ӗJĆ;8%Ė]¦‘Źņ- ² ü†cÜH¤ųļꝹß7Įœ +–8eI½‰!s!Bķc^™QŲ+ė«žW,qĀ+Z;ąÕušŅ›°j t÷BmCÓfĻÅĪŽČB0fā”i45O"™L0ŠŪCwW'}=ŻģéhA„8 ]' PRJż ‡yż¦†ŚQŗ›¶· • d]ž ņåć¾ĢWŸ™X¾’÷sĻŗ{øfŁ5|öįĻņņž—˜]3›«抭=[¹õÕ[‘®x$]čŲjŒŹ‘„¢ “Ę[›¶²ģˆC3ˆujkd¾“śŁ„%Æ0 "g«ł„Č-Ź"’īmŃŠ€ÖŠąx¬{ Õӛ3FW'Žsö¬|¤Ł‹`«”!Œh”d°ųD5T^N<źm‘œ9q k¶¬G· t]sÜ’5 ©éPY,£FІń’OžóŸ§7uĢüčyŽī†¢1BÕ!śÅŸįŗŹJvĘņ»ÖD­čŅ1ĒåxIAĮ°īƒŁ,„\·TĮ?Wž…% ŽeńüeŽ+æ»Šė \ų¦OœĶƒĻŽĶÓÆ<ĄÜi±«m[V³™7ĆQĻ»Oŗ”=;Y“v×ĢÓO©Hr’ÓāÕõ/P_ŻČĄPq×’<ŠߟyĪEOi4÷v6ÜLj›Q5õ#+b)č*üęü†J{ŻŽn¤“•&JŲJ)©$¶Ņ4[JaĖ„m[šf©ø2…Ļ–š­%”aMĘu„L‰Ņl„›¶&•¦”“PhZŹ Ą ŅÜÅ1µ!Ȅ?›öDčźwę6šL® `č‚© vģ1µ>@EHgZcÖī8 KŅPåcoO‚ƒ¦”Q6X»}čČī½ļ^ŽZ’æ»ķvNYqJŃㄾEsÆ8użŽ[І\:ļŻ;æŁŪö…H¼ń‡}ńÖhDŁVĪŪ·#¦Nó>nŻČŪrŌxŠĢ0€qó³<.mī÷€ė]÷ōhć’³QŪ„2żČD’mA“EÅś®mvBŚ·;ŸwopŠ‚e©j)Ņ‚†©¹õ*닯ģW5:«Æ]…ė){:ˆ!HIæŽķÆĘÓ7°TńæRø£é± _Ŗų_¾ĻūŠ1‰’¹W’‹Ģ„¤ŽU“üĄēłŚ]æ°·öģķūDø¬\†AgŸ.0Ļ^~ÖE,Z|v–°ĆP ¶ķś*Ø-gŌæ¼>ŸCˆļ{ŹI) AŁčŒÓšū ©:{œt|ąxÜzlܹśü§×ūd̘PgēüŚ:»ÅrŽ~G× »·x;BĀåųƒ!ššI&“Dśčė%2ŲĻ@dˆž¬ü9¦”‡”…‚”‡‚”—@“ņõæaĒNäŒü×sAż–O[Īŗ'ę£ÜWιsĻå¬?œÅÉ3Nę‰mO “’¹µsłīÉßåšG®į°¦Ćųұ_ā[Ļ~ €§H}øž»Ž¼kLc-ż¤@N“¬Ż“y¤`x+›4#’ŽõÉŲ.”īĻÕw¾śéd²ūĒXŲ;!m{Z±×o@õ÷»®ˆł/B}ó’ęÜ2½«‹ä¤āsį`y9½]](;÷EXYVNY0L4G7t4MCLJ„ėX•ˆ²0Ęą"ĶĶ#Čæņ“’|}ļOņ_¼ŻņŸśæ/E7żŲÉĀ?\>Ó¤<b`Č;…!L*D5żVWź»tŽ„č"• @«˜ĶE’ņliŁĄ„¬“JīnĢ<”ĖĻł]}|ļ·_@× fM>ˆ;Ö:½Č(ęŗ’€ėoł C±ĢwzI§S¤Ņ®½ŪŲµw[Į:™÷Xéäæ“«½Č± ćÕO2ŽhŁŽš:+§zšÄYużė÷‰T© i)„m LͶm„k–„„),aiBŁŅÖlĶR–4”ž”–nX¦(MjJK”fHd"”4æß°5©š­lU5±Ų©g愅ÕL©²»+Ę»–5šÓūw°»+ĪĀée̘¢¦Ü¤¦Ü$öZKŖ¢ŖĢdłĀj\ÕIo$ɕ§LdOwM¢ē/mąGŻA[ćņ›°F¦ę…BG !ą7鲈%­š”CJ päy,ĶJ7Ŗ"ZV慾~~äažöæóäÓO …8õäS¹īŚė8ī˜cKn§Üßp6%„\{tÓķ7½öüźŽĮEŪJŸ¤ivKĄüŪԚżż Ļm‰•L`ūeõØśøn囇ŚĶ‡}żœź_g·™­°ƒż0€ėń­Ż¶Xvź±ø>L˜ņ‘‘!ÖW†8ÆXżé‡Ąöµ#į-įŲ œ8żBŖü5 æÓ!aąÄö/84}¤ ræuuį1LžēųlķD&’Ä QC×ulĆōø”ĘŁż\æT…æōqct’ßWńæŃ¬žg‹Ų6"CBÓQļż·?p»ģhŻÖm0öł|~zÅś k=}Ža,;õ½©—““žĪ-)%ģépVń'7@`”qü 5Nf€ē_O ßr,¼’ĆĢ<ˆƒpVÜż¦cHó‚'_†yóē1÷ØihŖ°‹|I«`\lB@CSZxJZĆqJJB_?ōō9ž=ŠÖYŲ0 „ aś|TVאL$ŠDˆ ‹E±’I’–MO’=żĆǽ“f=Ē.^য়8Šq †¢1† 9½k–]Ć7žłēĶ;Ē¶>ĘĶgŻĢWžų ¶²łčārÅżW ׿Ž)ßćĆū0ķ‘v¶ölåŽwŻĄysĻćŗå×qĢÆÉ×Ķų¢:ßź!OšūREwž0ü§łĒõĒ©^ ł/^?›ˆŗ·Š“÷į… śÄfō‰Ķȶvģ·Ö£zūrĻ)™Ķ&„9Ÿ<Ż’ZW'”`B*+ó˜Ł<™Õ[ŽĀ0 4MGh 'ÓcŖoŻĄŖŖ@”‡Ń"hiCĄ"’Ūńb¢o;łĻwN‡fŌ.ŠØ )Į«¦¢‚Į””¼ÆŁ*½ŽˆÕ”I°J;å^,@(gńH„/”•šv/ņ}d*ƎwoŅ•>É}MLĆĒ×?ś3tŻą[·~žŽGlsZó,ü¦8@¾‘}ź’ÆŅ\?…{’/®}Ęs,šŠ2¼„2ėx=c£Äx‘’bæ]äæĄPDŪNTÓ$šgNµŖ€į?jJuāłR*4Ÿ&DŹ@Ų¶%„²„P¦-4[hĀV6¦2„$‰Ō5e'Pš’hš­tŻŅ” (e', ] „„?O`~4Vłøéļ;čģKpÜĮÕüłé6^ß:ĄĀ©elŲaÕFĒxūÄŻĢŸ\ĘOģĄ43šB¼±mW9ŗŪŚ£œµ¤ŽŪŁ=Ś”ä…ĻŌŒÄJȼ™ŸJR  *Ė՘¼^JmŪ¬|ž9īžĖŻüć”`Y'w7~ļ‡œ}ęŁǰ`¢k3Ŗß_¾µēŽį‰W"†(ą9żųaK_„XJ¢²Ŗk€n :X-žēłēėŠM>ß²ƒē+%ju=~g¤Æ^PŁAEÕӅخŻLõ ×Ē(s’@ż…p7ˆ ߆x/š4€£E° ŁŚÉŹbõ ŸC¾·Æ)ėŚķøō7LĖœ¦ĆģŰsŻHYĒ.‡Ą7ŗŽ WBeģńĢ ?#«ö¬b餄¼Łń&żqēĘ[>m9Ƶ¾F{ĉ'j7µœūÓoųyrū“|čˆ•<Ę}B  ­£3“ü ‘1 v³Ņ“CęÓŪ® ’’ģś"§ż¢Ś9’w“’‘1fń|}B¾—c.;­jdžšOń?“'y™¼É?D4Šēģ÷B°,¬gyY9”r¬¤…“„£ązŲÜ×Dé:vUV}-2tÕqoüņŸēp*^Ļ­Z DÜ4 ʳ€3śÖØu(ĖÉ ,u%RA*“MśåZjÜ’‰KĪ®[Źōq‡;nĄ›Ņ©¬ƒ>ųīĻ2{Ź|yž~{ńoĆuęNKĒ’»Ć2ļ#ZŹ{O¹‚¶®ŻÜųū,æŅŌwÆ ›æ|yĻ0²œJ!’£²‰ģņ_“õQö3ŖŹ…”ˆŽ“ŻĄ1ÓjDĄō+‰!Q†“„”lLic*[šR*Ó–Ź“„mHiXŹĄ²u’¹i-]iiŃ40FĶ._Ü0büÜŻ§¾rtB}¦!xöĶš¹fŪ §—~rZŗ®“HJ¢IådšL­Jęˆ–)a(6¾ģ_)ÅŖ—Wń_×~‰…‹qŃ„±}ū6¾yŻ7Yóņüī¶Ū¹š‚ ĒDž„ž£ęädÆ}qÓ¹Ōńhę% å~±H•ųÖėŽüÖ‘o}’ń’ĒŽ{ĒŁQ×ū’ĻĻ̜¾åģn¶dÓ6½ŅJ”K» €pEE½ŲQ.\EiWÆĄ½¢\+ šJB „Hé=›d“ģfūiÓ~Ģ9»sęĢ9g¶$ą÷w_G²g>óéÓ>Æ÷ē]š?hźž“BÕ#ß0MQ퓿*ķ/mn>%ļVœ—p€ėū!ügĄ hš”V`<ńĢO§OvõĄČ)Švŗ¢¢½›aÄdhŚõć-ā¶o«%–ĄœÓ,ž-ļō–ŃR– aꉖf€š“ĀūķŽq›ŲGń[Ļ«š„ŠZ˜÷ Ų³±xä€õ;Hč–e:ä±`ŲŻ1’`Ŗ’g9’KĆ«śæŪīæWŪżļ3ņ©’Ųż+t`ę÷’óyƲšĻ­z1ös½KŽ”K4Ż"Īe„!.ųā÷„"˜.^Ł%aÅ“W zŗ`°§ ZŚ`üšĀfN,›[;Ž` $Ź=i¾,>Å2 Ų³&͚OyE5»›RLai | +5$” ³wžuŻŚńßwö°ž%SVĮ|!6…€Pü²„¦ X!Kƒ —Zu&Sń„ŸX\"SiiSQÓŅ–šŹ ÷ŠsŚé%‡Ķ­é…G”Ä·›ŪWŽŽ‰É]oŻ•uīk ¾ĘWŸžjĻń„Ó/ĶņšÆ3ž•å–#\>ór.xų’z’Qå£ųÖ¢oa˜7½r-ń"öFżAz<ZZ="­‘i'’9ŽÓæÓ³Hw^ņļ$Ł…ó÷6å…üČŸé”•e­ĮÜÉOæČCėėź0öķC[æ³³ĖQOaV›;w¶~Ł ··£ÕŌP PYQņśĻY[ĻŪ7”ųtEB‘‰g“ƒeZ7}>“ŠrDY Jg7"wäČĢ’‘·4wņb1‚å•ÄŗŠ;+­,+£3Ėė,¢DéTŪHéqėZŹĀ²'Ų“8z I †0~äīøę~ž‡łŻ_ļqĶc?Ø«ƹK?M<ćÕÕĻēd™8jŸ’—oŠÖŁĀ-æ¹6«Ž‰éš{›w­Ė½g!~ųÅ;‘„ďīūŻńģ}·Lī O½’ÓN ŒpßņŸŁ2 ł/–gČ’ ŠŽ>8ż+˜åpfēp(f§)x|CUģ¹-M’ač¦,ūtÓŠ%C(B—|’š‰©æ!”²©ŗšiФKް€zŹ”Y2Ģ i*B“ ä>{ć=ŌŽ»ųKjA_ßö:ć)ƒŽXļ»3„$R:Į€L<98>w|’„n˜$T ŻūČgžXĢģÓ3¶mßĘ£/Ÿq¹ IDATgłćĖŁµ{įp˜cfCee%{÷pļż÷RS]Ͳ— ø­P°ö,ą±¾–kSGJæYżģüÖŲšó4=|މ4TŚ»>¹ūaåš[eį¦Ż²Oh-- Ó:µźo=øöwßN[2āOYōĮ4ȇ||ĆQ€€Ō$8 S~D['ÆTGłD¾|Ć'ĀŽ5¹é{6Āü³,B «0k,8Rq˩߾-šņC¹¤bķKV¹3æd Ļī²L ģ(­„“ưĪl] ¼\|LɬŽDB”=¦;B …1üŪEīƒśæ¦ üW’ļm‹æÆĪ’2čQķw;‘ģżyԜ’yģ7XagĖīŠZ®|žįŌO»:;fEJJI©‡U˜8ū8Ź+j±¶PÜėi!€Ż§Sg7¬ŽĆkÓ;ūžŠ N_yĪ(tÄ l^š²õµę»Ó4P5Ų½?[ė _ õ +"i™Qhƒ-–“ĄD¢—š»ElĀŅnPą“¬ŗa=‹.ꩀ„½ Z¦zZŚEŚłŽIMUŌ½³ŃŽĪ“ČģŠŗ\'`Ć” lnŁģZÕüć?hŽõŖŒDü‘¬(§Ž=•_¼ł Ī&/l¤ž¤&RĆ=gŻĆUO]…OņqĒiwpÅćWļw_‘O<..‹ēē „g'NYœĶ łļ©ŚV8ūD6™ļ)ž‡üēĻß{$r’÷lš Ž)5Åīż†‘Ÿ° œü÷s‰ė‘ü­½Ųż=Häe.²k ęŌܰ€¾9ĆŹä7v·š]IĆŠ%$ÅDųLÉŌuM’. tĶ0|’&it?š¢K’!)ŗŽŖ†„aӔż¦ä3$” C(B‘OğqN5 !ęBņcIƒ²šą tĆRż×õ\/’öéõģ 0)Šu3GÕ 5āń'Ÿ`łĖyĶūŌÕÖrīŁēqʲ“™?w>>_ļśĖƾĢgÆŗ’?żö,œæ°ļŁ (”SĘ9?²„yy~s!3€’zėƒcŪR 禌ČY¦)jd”¾öµßŁPżŹSŸš^—©˜%e˜b۟vÜõŅėŪ¾²õÉM·Ÿ“dğž+Ą`›ü3†üH|ō7ōĮ„9˜ū?Ąl¬$µeĖ ^yŲ=½¹žžKė÷ÖoČr˜č¶vūŻ ©°ņ1„-įAÜåŪŪŚOÜi āŁž į Ø‰$]ŠŸ6ŸŸÖ@ˆīš(jįļ£÷’bar6ȋ"Ÿó?§x6Gżß›ÖźQqžW¬¾Qćhæšj®~ģ~ķ»ķg–”–"Ė o¬xž×_z–±§°ųÄS™91²d½˜O§$Yż2“½÷€aZ“Ą“1–£ĮbV‹gĀĖé·NJ…˜(ęĄŪ»ā˜EK)) ‘LXwAk'DZ­( ¶ķ÷wŌR2v<‡ZU’vĀļ²Č\B>KØ”Hi牺U&éĻUOūŹJm«+‹ rÕßÉōSårÜvżķŲіķpJ34ŖBU“'Ū¹ūĢ»¹qōč¦ĪUs®ā’G/ąĒ'ž˜kŸæ–ĘėŪ'K½_ ŒŅšč[|cW¤ņD2™C²3­&’N|ēĢ„e3y°µS˜Ģ‹œ~åĖļ¬?»_yśXŒüŪ3 4|Įaõh»ö oڈ™q<éJž³’²Ūv ³­”ė˜Vy”H$Æ`xu›÷īBVTYʔ%„åĄÖ¤K_SQŠ£e%a¤ĪnäxĀ•Hö‰üēņ=÷z¼’g6·¢¹:śä?sŌ#)'Ö]\  ¢¬ŒŽīī¼ZA)LX+!¦wd"$ałŖÉ”l3¶ĻR¶ß;÷måš;®äßł·~ż^j«źłß'ļī ]–) I2×}öNš&[vÆēŽGoĻ™—ĻžūU&žĮKo?ĶÓÆ?ЦÓxp'ŻöVŗŽ™ęqé_äPk·’īūYåz=Į _ų9į`„»¾™ķ›r3å1O‚ ¼’b¤ÜKåƒAž=6Ł—vDW“²¢سȒš/]’ėʤ0…b˜¦O`ź¦.|¦@3uS×ŗOš!ć“ S7a]WQTÉ4LÕ4‚¦dZZ¦a1MĶÄ4Ō¤č#©-&D+Ÿ‹:¤,õ}MQŖfX·¤°ī[m‡_8zCwŹĒ•?8‡Ÿ]óßŗģFŽ=fæZžsÖm}Eö3Śq\yīי6īö77ņµŸ\Fұ;b_¼ąŪtt·qÓż×äLƐh UåÕ¼æi•mR¬?_€~ńH’ĢM÷[u8óœŅe,˜vv¬å§lĀÖ>)WdĶŃȱ›u°Č±1÷¹ō;h÷VōŹ!9-śg -M¾¹;DKĢ0 t‰ōF¾‰Ļ4M SR Cų ŻŠ4I(ئ"L]×$I—TSFH†”˜†jIņ™²ßtMŅhEV݃HPĪYĪ„2]‰Į³]Mj’ų$ AFšš'JGĘq'€SHkCwĢ»ąž›n½™%',įĪ;īäŒSO'ō¦ļŪ0Ŗ·Ž~Ė[CEPŖ; Čøįß,8»>šžVéĆpnkÄŗ¤£Ä}ép€ÕP}®]RłŪH¹ūä~f Xp$ģ’óa3ˆŗQ˜#Ę£m_Olk#˜>–k=’Xbk#ĘŚ­“É ĶŠŸ‘—”‘ ž“Ø’;’Ė›Oż?SÖ©ž_už—rā-Ję™Ÿį„¤n®0“ņź—|Ó÷n7g“·r|*Ī“ī®NiåKϳņ„穨ŖfÖüEĢ=n ĆF4X&LėŸ,Y;öI““—õžŽŗĒ²cŸ=±š®»pö šėĒ ­Ė*ŪŃåMƒ ¦/8I’1uĶņ[&¾†i…œ5>שį@‘sÉÖ]°v3¬Łé~Żś[USĖČ1ć³ģ–|2ˆ€ÅA3„_Ó½kŲx…]Pl÷?ߎpĄļ³®½Šuc ;ŪvråWf„}fÖgzü|zś§łõź_÷œ;cܬع‚āī3ļęŅå—Ņk¦’Ķ-›³¼cO2‰ĻĻž<ß~īŪł;“– A2ļ$ĶÅČæ“”§ĻŁg-µ$»0ł·“ņģ~yķcńüīżŹÓG!!†oų0“Ż»Q7lÄĢØo».äœ+ól©tu{ Ļ«*.؋V±æõŗŖXZB !{"’YŸ%( ut!'“ém8a/źVć ’¹Ŗ’y_žņŸž+Åā(j²8ŃčŃČsŽ/ é„ÄōN„d‚,¦„ „™vśā¢gīŽßō^»”[¾śKĻ<‘ÓNČisÕÆš½’ž g{K—$™ł.ü¾?ŗļ[j=ÓĪ„Q–ĄĶ»Öćė>y-c†MąļÆ?ʊwŸÉź\¦šŗŖa|ėŅŃt•ÜūÕŽ0½ƒa÷ŸuŸåÉģv/ōµ/Y<µćyå±ŪA"†tp?FMöŽ›Į%cŖā¬M"$Ż”LŻōŁĀj¦,)š&üBݐMĶ0$]Ņ…® ÓŠLS7UI”†$IĮ`4<{śēŽoŌ†LŻ2Jl—s(K‚įÕAö²LŽB! ‘*ī0Ł+:cI‚’DĄ'DÆFNfē?Ē iūŖ&H¦Lģ_/¾šb.ų— ØŖĢć±8Z·šČc2aĀÄ>•ĖEž6lČŅąŽę‰byėļi1µ0”īź@””õęénGä ŽD8Ą| ?GLąFOÆŗ¾aĄĢśQ•5$~÷żh8Ÿ ņłÜžųćń—ˆ ‰VY”Éą@y”öśj’¾hž {4Õ’{œžŁ„ŗŁėå?ĆĮtŁEż’Hbœ’9w’ķH¦ó)!ŒłgŖk ƒµĄöm%śį›ĢnŽĻń±NŽkm9TņŅÓOņŅÓOR7l3ē-ä˜Ē­¬“HŖiķV|·}?ŗć°ā]So üyvõĆA8ļDųmZFŖŠŽ•Ļ)`į÷Ae͆†®ZŒ.£FŸ‰ÖOZ‰‰ «ń„–vŲ¼6ī°vśŪ;{ÕłV}†a°č„eČČ>ĖYŸ„c‡ æ¦ ]¶ «Bö’…œÕõh ¤°Ą š7pŁĢĖøåÕ[˜X5‘»VY»\²łņ¼/sń#ó…ßą®·īźń'ŠžlgŃšE|÷„ļ²rĻJfÖĪä’G/A7­ ½fŃ5ÜüźĶ…N BĮ@ņo'<¹Žōə;{rfķ¤Ń–æ'±0łĻī¶~y!’īł'…+A., 0Č £PFJ 6did·‰#½·!©£ź½)¾B”¼€a5Ci<ø]×ŃuI–­7HfšÕ ÷ŽŁs™Š‚QÅT5¤®XOųĄ’#’ł{“•’J EP=˜Ķ)²L$¢+ž_å0ŖT×:1eŻÄ”D€Ś"6-€"s×Ņvˆ/Žt g,įōÅē3zŲx‚myfåć¼µīUū^e.?ėߘ6n6ƾ÷ÓD3MįÓut!„f S1$IŃ0uIŃu I—USV„i””+;õŅź«§ŸäóKām‚-­ƒĒŪā)ƒ’`ļ‚0ž4( eļx$RK§Wö„\<¹œÕ[ū«ąķŽīīå"~E’z.›Ż¬'Ÿ3@[†œėŻƓ ¬“¬OżÅb<üČĆÜuĻŻ?ųī Å y)JOųĮŅæ4Æč‘ģeütŗ˜dPä X3§/fG2`>ÜȑópŌMśk’oĒ”ł¾MźĄZÖlå— §ņŻĮčŪŃĘ[1ŽŽĄaYာŠŠp ¼–®H z–ś78#’)õ’Lz*ޤė‹Ō«I$#ŽčŁ©Ļģ܇0ƒ fŹŚP™5¤¬ōŽ”ĒA`ŹłŸ«L×č¹ē}ĄØq“Ē‹†ĮKšŠ“źY¦ļŻÉ±ŻķĢkŚ»gbÓŽ=<÷Ä#Œ;žiĒĢcŚģy„BatĆzW;mÉ2Ś‹fĄ°lÓŗŒŖƒ%³įÅ“ÖURµĢB}‹nĆŌg`:b#Ė(JÆŚ}S ”—ĀP›'{/mg7lŲŪ÷Xcźģ²~7§}XŚ~jj‡2yź8tCĆŌŽĢæ’*nƒÖvH„z?¾5Uīnü‹9«+Ʉģ¤OZ;^ń“ׂ_¶.śöÖķ,¾WwæŹOOł)÷½{Ż©nNu·¾vkO™ņ@97,¹ó>ŸøēźyW3Ų|Žh|ƒQå£B°³mgį†Ó_µ²kPłÉæÉNŸs;7›ś"ł{{€­a[›vņåģć h'äPŲódżŸŻG( (#G¢oßIjćĢx<łwĪ£€ŽŽ‚j v"8t(ļł` @y¤ŒX*ĻēĆ4ĶŽجndĻzęĄI•{±¾“F@I¹« O8K’łĻs: '‘$ #_pp*JK |"@Ų““ŠĮ”„õQ€HßC™iør ·æ¹öeŽ\ūŠ{GłQCĒrõ…×ŃļäĒ÷]“—,O=€;×õäń)~nüŅČ²Ā-澖¶ĪŽå½½s—^±3—±y÷‡Ü’ųĻŻ;ā64/\¹Č5t-ć¹Gø=§Å Ķ•ēõ@M hÄØ™“)ødLe÷ƒļÅ !B2Ó0u” ŸŗLŻ4Š4SčB7uIF7TI—$S+×WĢžyŽÜįõ³–ż”B`:ŃĄąŖ#®ŻŃÉUg gdMæ¼z€ķM1>Ś0>sr=Æ~ŲĘīCqŚŗU:ćWŸ5’XRgü°0?łĖŽā•{„ašÄReĮ0ဂ$™˜fį÷—Ż -1§īXB5²Ķ;ūŻOĆ`å›+yō±GłŪÓĒ0 .»ä2¾öo_„¢bšF•…†Ÿ qP“½ĄHļön³Ā+źšŻ<#-p1ČGHķ+żŚ!iĮA PwdśŸ±Õæ}åķ|É÷łģ1Ÿåįuó·-cĪŠ9¼ŃųFVžėæž›_½™øfæģļ1øfń5ülåĻ(Štp‚śŚO䟞?NŅģĮ›~üĪśķ4.‡zMķ„<ł³oj‡ĄA’PʏE;mĒ.Ō ė1³Č\®@2 D"é!ž²¢((Š‚–ļź†T³eĻt-­ Ia¦7ˆEŸÉVNæ‚^EWuäĪ.$[ —ܶcį~ņ’qņ/bq%Qāœü~Bńd~•ØRCĢč²^ī²iżuj`ātP˜Äę™)ē½*$nüŅ/ųƒÜzļu49LzkL5•®Xū[öōœ»źüo1~äž{ó ž_õ¤k;C¢µ\óÆ?B×5~xļ×QóxröNŹóåÉS X=łoĬŸ&å^Šēv\žżĢ™};”ŗälįWR†WD“½ķ†i˜ Hŗ)„‚0}¦!iŗŽOH¦fSŃ4I©®V:cŚiĒ ÆŸ>;* ’!aJ&åAšI&Ŗįm“·<¼=KUæépŠ»žÜŻs¼e_ŒŸ-ßEČ/‘H¦É’øŗ ?{›­÷“, ć Õå~ŖJ}üį„}ؚ;7ū÷¶xź—‡Śā(’ Ŗ4@Č/g?˜3@ƀx"^vó`żĘ <śŲ£,b9MMMĢž5›’öæsĮyēzˆŽŌGČrčTŒ ©kšl,šnšq č ½Ń\ū… ņµz£ķ}QĢžß+6ƒ˜“ž=f fÓ.ŒĘ­$ZwsųĻ/qŪĪęWŸ§ šzŽäŽC4K ~;Ź"쯩§½~„ĆūæÅŌ’ży42°«’k*’q$5rŁd®`i4ĢüI"+(”;NšŸ[‚ŚÜĮę½-¼’Ź^yü=6”FH†¢¤ŹĀhrō”Ž©Ėˆ@?ačd9„Lē=Hļž÷’¤ˆ)sŁ7e®xRą’ėįV3ōž«źŌż»ōc·nZs¦×T+>ć&MeꬹŒ;>§ŽŻūaG£µ³?i”1 ¢Ō:'|jÜõ“uZä¹µŖtä¹I=É÷^ü^VZ4„%ÖŅsģ“|L©žĀu/\דvĀØøē{Ø+©£2TɆę ÅkE‘©®¬Ą}Q˜MĪó“ęŽüÅÉ?ēŚŻ?»wÅ™*ÜČ|ßµ²ėĻ楳æ$ć7ߘŃh;v nXK ‘9‘@ó Ė Ö™_1±ŗr›vm·$¶† 6-ÆäßĮ¤słŒŹ(†ŖŁ4žüŪz?L&a”ć՗p“““ @‘üDōrŗõ60$Ė@-Ąa²Q ĆĪ,.ɗœy³'/ā­uÆņŲ‹Č-“ž?ąŅ0t,ļmz«G;aäT®<÷ė“uę¶zß_ĪvžćʟP‰ņė'ž‹õŪßĻߙāCČÉćv7«ĒUĖ~Ēõ”ēIņ0ę¾µćöž·%Ø*¢©sXCN5ć*“?½3! Ć0„& ”›ŗPLa(†!|Ńčšņ)›\_7~B0¦a`č:ŗ¬#é ²ŠŃ%kłV”iņč 0ī°Ó7L“„šż=njĶ~^:b1kAąSzG|Ø=Å”öĀ‚øž„lj‰ Č ‹ö³7ō®Ä ŗć‚Høokżū÷³ü‰ĒxōńGٰq £øä¢Køą¼ 3z“k™Ę½Ŗ‡äQ]õ!¤ŚÓēżzź3ļ^ōA&ĶŠió!*TĢĮ4 V8@»€q7š²./„£j0õ’9ŽćŗQ˜Sē”5n£ėƒ÷Yū·łļ3ń£µ‹8¼· żÆÆŅ,IģółŲˆ°³Ŗšƒ#źˆēģž;Ā’B_Ō’5‘Œ#-,§ö¤É\^į\Eé_DYĀWejm”©³ĒréeKŲóž6žń‹§yāAsU‰H%©Ņ2t]±iŲąUżæ˜Yõ@’:_Øm·sŃ*‘Xzž’]IRV+p×;Æ$Go]o,ڽ}͜ėޟ …åq“§1iŚ,jė‡e•ķŽ[žńß\ ÕQĖ1ßōńP†‹Oƒūµś¦–0 ¼Ē) ū{gܓŔ”U”ił½?düd²tv[¶ū3ĘøÓĒĮśm–“?°¾c‘°„© k¹óm“9Ń{}„aX‘Z; ·4œNч×Z¦né}”VEmRį¶Xs'¤Š"S_;„}{ša²ŽVīYÉW|•-‡·°bē fŌĪąµŻÆõœŸ3t»Ūw“Š|cį7ųł?÷TÆŲ-=b’$ēņŽY(Lę łN°“f[‚s§@~[ß ÷qąŚ żŽ\IĀ7n,¾1cŠvģ õįzĢD¼·žŽźPb14*˜ž`x€,IT––ÓžčĘē÷a*²e'žī·“ø‘'Up’ąžŸi‘Ґ;» ‘päq²įģFÜØō`’<ņĻ›–[[s²z&@N$šyt ńū|¤Ōüļör¹Š˜ŃŽ”™–ٶS ŃcV’—šåøĻͰšQ|墒 žŒńĆ{æ‘ó>“7b2’$÷Ų’Ė²Ā_ŗEöqŪ’^GKū!×ęĻ<ī“œ4ļģŲ·…ūżiŽĪōyY(pŽĶ®yŠ&kŲõžīO;ÅGŲ·v¼YŚæ ½vøeChƒolUH^Ööµė’)tįÓMS7 ŻWY>¼|ܘ٣««GŌ‡‚atMGÓt4MC’e$]F–4tY t IHŒ,óąŸ;©+ó1¬"DČßėšĻͲ+ė+f3(¤HZZƊ뉦ųŹ7¾Ā«Ž rīYēņ“[~œcfՅ\P]>õTągz& 3=ŸĄ@šQū8ŚfĖ0€^0f &`lūäįƒ~ņMVĶŌ™ć9ó£ī[!4Ą¼ūĻ“ ‰&Ia»/Č֊*‡Œ £rjłˆx’×s¾€śæ¦!ŗ;Oاī¤y\]į“’÷(~žPUʈe³ų̱SųŌėyööå<Ürƒ•Cé—’*¢IiAĄ‘T’Øóæbź’öcŸŌ+6(R¦¬¢(=„sĮ± –(; ‰‡7ėåkŽJĪŽ½ćŻE¾÷ÖĀHi“dÜä©L˜2ƒŅņl«¦ųūAxnL ó§Ą²łšģJė|"r,£®Ÿ;$ Ąc–äm‡"§¦ēu×~Ø,…į^¼éźĻ9ĮņŠ–6U>ÜÕyøJeĶpj†Ķņü?HjV”öNK į¬^‘aęXX<ÓŅ“ųós–Ó$ą÷£ō˜ix ˜B:iō(ö½Ż Gż ×ā\¶ü2ĪA%HWŹrüčÄqÅćWP¬`LÅŽŻ_čS–† ģ…é§L“–ĢŹ5[M]dżo'­n¤² ń¦ßsŲ·ü½}Ģī]væč#łĒŁ©¼÷ƒ#[įü¾±cQF£n߆ŗq#ffĒk!Ž»Ņté§Ė˜z“²ę&ūZ¤ų}čUUEtv!Ū}äaQn“n°Č1ŹXœü»™k©5gø¶{7•"\^B»@“¤„ƒ­ł]„+’Ÿ ^B\ļĢ֐EZćÚK‘‘€öek)O¾/}ņ;„ƒnłõµ4ÜY°šÄ“Ą-{¬Ÿ=ū«L3“ļ>ĆÓÆ/ļÉjoŖ²l×^~3†”óƒ_~•¤šōFž=ŒĖån)Z‡÷vŠÖŽĒvś4 ēóōĻ­]C܃Y?:§¾Ąń ڃļÅM$]ōŠhmõ°ś‰õŃŹź²`0‚¦¦P²®¢č š&#Ė2†¬Ų“ Ó`D™Įźšéõ¦üų¢„=A2©QW^BM4@Ą'§‰}ļśL003€XÜ[HĄ!UUŒ1‚«>w'.]ŠO)ī½ø££ƒē^xŽæ?ów^~õ^[ł‹.ā¬3ĻāŒÓĪčS?3šĖ„'ģ #ćąõ~Xņ΁Ėf%āåcM9†ŚZÜóĪ·O›™#d€\3€|8’~Ž6śæ<żķ’33sŽIhūwŃļ¦éīGųÅ×/$:m,‹Ś·#Ć혒ł[ŚŗćģWülŲXeGŻpšĒO%­Dˆś&ü_>ųTDJĒwĶ.YĮw$Į‚ÉGŠOäÄYœ?w'?õžōqž¬Ø£5YGWy5P†Ž$ÅŪĆTĢłŸēŠōĻł_”ŗŠĮŌ)¹‘2ÅČ©cų˜Ņ—UƒWtŻ”Ž_™»uż[‹Öææra8R5nģ¤)b̄ɽ‹÷d ŽY«>€ŗ*‹ÄfœėuĘ,ā.»mLž·Œ@ ä™dżVH¼ŒleĶfĖ ”Ä£?€pĪ? ~óøuœŅ¬Ø„NeÓ`ņœ“€>>ųy`˜–ęD{§e§k¹štĆk,ʬ TŅ ½LÓ$Īt4ó¹"„tҘž±ņŲ Œ„õ©NžüįŸXÕøŠo.ü&A%Ųć°9ÖĢ÷Oų>wæu·· ·©›L›h ʛC½ŽI²“Ūü;ęÅȼ÷üdż.ā°·gŽ> z³ö¶Ł[`“\źĻōQ(2 ń‹ŗe«%H%­<ū;įóū)¬V ՕUlŲ±]·lb3‘JžÉł™-0ż>ØŖ@O©ˆĪn¤„3”ż:d§ˆüŪėĪ-Æxž“A&’iL5‡äCi8LK{;ŗS½É†ryq£ 3£`€™6öˆ®B.÷1åO…›ī’6n{??’@ž2½%'4L`Ó®Y7š«.ų6ŻmÜt’·ezqż•?!ZZÅļ’ö?¬ŻņŽė…r¹mŠ¢(Ļr»<·“onū äæ?MyøōHūw£×ŒČÕWR†U†ƒ"R]5¼"RZP|TUE‘ShŠ‚ŖŖųMö!IŠ¢£éZŽ€ā3؏Ąī®AŽOģӄ½-Āpō[Ū(+Œ­‰PV%z"gō<éŽ×Āg£€3ŲXBPVāaÓGQøć'wĶ×ŚŚŹÓĻ=Ćߞžƾž*Ē->ŽńćĘsö'Īę;ß,FŲÉ7{ī˜ļUæ³ż¦}N3'œį’“öĻu›ŸüIU/=[7•9€"0ašĶ˜"ļŖzŻņä3ĖĘŻzÅ“~ŲĻ `’ļū跟ȣm’Ÿļ\Ż(Ģ3‘?•öp”=wž…Ÿ®ŪVPCć#ĮĢŻOū”6öK Ū?†¢lRĖžŃ#č*‹¢—”;8iwžŹ\&æ €¦"’1¤Eõ4üųmØäĘ#Mžķ( SvÉ2>ū»oņ#³•É;6QÓ“—Hėa|j IMf߇łŌ’”°‡’¾Ø’ēCv’ķĒŗš=Ć@Ų?‹=õŚ4²0ŽYŽś©/WüžK߯¾zń©śå-Ķ«ī|ę‰_æśĀS¤¶nüUĶ~ī=Ų»Kéöö\õöHY%c§,čóŪ!č}čT Žü ·īŲfbņh˜7µ÷ø½ĖŅT°£¢fÕCśŲ³\ؚeŃŌ­Ö±Ģ_¹¾v1,œn 9ģčģīuXVĘIV³HaÖ’¹doŅŲĀį ¬šŠ ÕP¹č‘‹xqĒ‹\śč„¼¶ū5"¾sźēšŹ.w/Ž9Xåå%L;ŚFģ ‘zī…»ūŽҜ9å…ügēw&ŌNČ' °ēĻBīõØvBvÕE„¢˜<™’sĪ&0{R0ˆH$ ś¬ĻWXL)Iå%„čŗŽ”ė˜†aEpŽ+k¬==¶Ē~”“ę8Ż“Ėōū1†T ×Taöh,¤Ļŗ°«“7ßn)ndĻĮŒ<ŠNW2•Õ3’&ā !o±D…”ń į—‚ŒĀ0Óä_XZÖ½”¹L·õū āŸÉT‚‡žūuĆŃ욲‰š¤QÓ0 ­{6pķ·šųéļ¾Ē”Ö&×vNYx.§,8‡Ęƒ»ųŸæÜęŽ7oC(0ž>/ŠĖsŃŚŻī½¬/źk;łž‹Š4ÄA—½S„'N؋–ÕŌIBhšŠ¦¦ŠTMWQ5]K”i*Ŗ®b𖲓4 ŻŠ1 Ó4ŠuÉU& {īm8ŗÉ=¾ėˆŌKj4č¤6d\]˜²°M×fAfM’­y–ē·©T~gĢ^ŃŚŚŹ_ż —ī fĪ›ÅõßæY–¹åʛyoÕjžōŪ?rł„—óģsžų‚4nÄ9KŻN$}Ö4%棷f"†ØZū@Ķ÷_ź¾sķĮO­MčŃė$IŪRnśĀøś§§Žö iģŻÉóļ^&Mج?Į0•‰’ŲvŻĶ~÷Ū¼uæ•~`gžĒĄi’īD!ĪŚŲ9ōyźČqŌTӾߎ1S0KüūtńnZ¶­gŪOä¶/Ē×NåųƒO€ķ˜’ł;ZŪ»Ų/)lõūł RʆšZö4L ­v©’2ŒTį¼"}U’w"CJʑ¾2›S' įvI¢oĮ?ÓĒ0ż‘øõ†øļõ-¬ŖŌhbŠU^‰ žęS’ ēż„d#óŠOĮMż_±ķž÷t9ÓE±¶ÆÓ˜0#tpÜ“ąß™æwµjĮ7_y{ęĖ/¼q|(8tqżˆŃįŚśį®żŠ 8pĀĖéž,`śĀ3’œĒć]~Ȓ%ȐéÖX»fOō^ǹK`ó8˜öČŅÜuiėLJļž÷†a…Aģģ†TŅśŠ¹ķöOSĄ—v@˜ļėŠ÷~l+ĖŹś®No~Y̟>…—W懙0{"m|TŠ ÷›Žļ9^6fæ|ē—Ž Ē@lœ°t.²Ķž_ŲžĖG`«Ļ|s—µū޳h†å4ģhÓVCVæÜś(\ó;+Ė2[° "»_n}ĢĪļœ‹Ü>ęĪk ŒCbĆbšEˆ}Šßš*ģĢŖ²”§fķŠGK ¢v8CźFõŪóæ®[źžŗĆDŠĘĀ“±0¤,­!×ćč*?ģ€ŽŁdĆ»:87w+ŽZ o'ōkˆG Onz²x¦ Vœ“xaQKÖļBõlō'_žō_7r^œ4{ÓNp֟æ.ż²’/lTоčö¢m54ł}>‚3f ¶o÷¤ą ˆ1Ø®¬būŽ]hšŽnČę‘#’Y.¤Ųōū”ŗ=™Bī肤eśš’ņŸNōéŽĶü>æŸdAOH.ŧśŃ“$B ‹žˆ¦Dz&ĀéKŸœķŽŪ”ŗ& ÆE$TŹŽƒ«øę_Dw¼“ŽūukĢ.ķ\÷ŁŪØ*ÆęĮgÅ»ŽšŲ™ā}ĶsĒ@’ČrŃŽzj§ų˜ū֎÷1»BӐ6bŌ7ä”Wg”ą[ف¦©HšŒ¢ŹhŠUK!ė>-…ŖY¾d]FÓRY¾dCĮ”MLSgzĢ]&ś?”/€¶®$»öw0ih ÓF–1¤4ŚnP@³ 'ŸU°”•zļćߞžßŗö’©$§Ÿræ¼ė–øŒPķ¢”C‡rūm·£;cż€_žXžģkmšdŠūŲ–»«÷Ǧ=(‹ŌŠOMžģÕ3ėt•—fĀVS*Ÿ}wվχVģ¾¶aɈ?m²ē;į?NčŸ ĄĒĄžß‰Qć0ē-A›·”®Qć9PeÓó«łóž‘’ޱ—¦ŌŻ“ubŽł±»žĀ¾”ĪÅĻŗ`ˆÕ%QÖŌgŪ°I4™J¼f(š?hŻ`)ūī¾Cļ“’·ĆMż_M«ż_æ€/Œ®ę??ä?ƒ€ß Wpłs9kß.F4ķ ¢¹‰ ¦"N»~KŠćTŪĻ ?ź’v2/KŠčŁż·ås“²ev’Ą0l_³“]ɔK Ģt½Sg—6]ųÅņ>ł¹Ä ×vżšžŪŗq]W[k&ō[/YtŅ',ĶN8Blæ+×XÄŪ.mŒ Kf÷wtC, SēœÜæ„įóAE™µyeĒōń°t. )ļ[}]Ż`¦Õ5†VWRˆĄz±WVW͌‰ćV (Īūć‰H« gĶdh­åŅ}Ē<żÓł/žßĮ³~eeūo‘Ż%Q8æ“LöM@įȟ۰£M[ļ³śåÖGįšßY™IöžJWüÅߞį`æģC×t ŻĆĢ!ž¶QåŒ/ė¬p–q¦eß?Ī«Ż3×?zu%zõ»¼ ·¶m•ę–ĖeŖĪ9¬‚ėńö*?Ŗš)Č7|† [;1žYĖ‹’Dk“Š”†äf0ź’²„pµeOļž»%ēCs–Z®ó?‡öAZż?Cų ³ū/‘-tPĒ “BĶ#F›’­Šżß®Ł8üƒÕ|ZQ*ęU© „Ć%lśp-•Cj@Xę7 ³! ²ģɒ*¼²ĪXäq!œ³Ömµü(įQTŌ ·>ź€O†Źr8d śśö‡ ¦ąųYŽoz3mNA]õü„ŌžĮ.¢~ęŅcY{ļVx8±?#üˆń ˜Ių—Ó3šģ¹p'ĶÅČįü™¹ė=ĢüvŁ}÷“cž½P2M“ķ»ö°qėVöģŪĒž}M“¶·ÓO‹ĒQd™` @iI„ŗź!ŒØÆgԈį̚:…ŖŠŠœ1e?^ś8xŚ ’,{vģ©(Ž>õe‘RŚ˜zZ ³7<\vsū›“–}-ó„9éGī{E ‚~Œ`$SHHÉJņŸi-`hžĶ$I¢$¢£€/ ,Eé2g;”¢ĒģĆÖŪź²č+Ū%CĪģ;ņģ=ø›”šBÓU~VżwćC×^~3µ•õ<śßńĘ+Š7ķįū’W³£PĻķä³WøŻĒÅ ō’å?ﵩi7FĶ0¬ķ‹^čSJŃßļD3TdUAS4dMEStEESTRjÆ/YÖ³"šŽ!KH¦DŠóźaÅnC|l—·=8ŲgżŽfĘŌDX0¶‚±µB~ŁöŗļÉ#a›ž£F3vĢXž’ĒóL™ä\ÜõĀ4MÖ¬]ó/<ĒsĻ?Ėś(-)%Žpī9ēņß¹žŠŠāHś8Z8*€8ģFĆœśItj‰…ĖŠß'yų]žėJöżõ5FĻžČ1 g0iĘŖ"įž©Ēė:lŽ…žŚ+×ŅKŅ!I“H M>»}>vKŁ­d_Ķ0Ś&L£«r4ZŽ·ź’ĪsEĀ’ŁÕ’U±°Žš‰µüüć¤öŸ„!üw“‹O¹†¶ę&4%ˆ&+„CŠģZżU’÷źü/é*ä3°Ć“óæL}œ’õŌE®ŌĘėƒ*IĀ\zzå×l\ėÆ[÷^Ēü߯ó³yöńæDϾš_™1o†.šzšAŅ×ėą½P[ #k¼•3 Ī<ŽŻ>šŚaÖīĪīR?!Ė0$ [z½Ž~°ŗcpī  Y#8×Ւ°(OŸ ©#?.8ż$Žßø™ÄS)Ģ+Ģ±8ĪÄ‚H8ÄÅēœ‰“¶e‘Ū>ŖĖ;O䛻|õ ĶuVļ“wtńų3Ļņ÷_¦£³ƒHy5ƦĘ1ćęQ;f.įņā7Æič“ŲNÓÖ·Ųæe?ó<õWĘ44pŃ9g³ģøc‘ÅŃ/—>fĶbī\xÓ pĶ>˜H²Œ¤3—|ˆ–GŃwļ°Ģ²ģ‡™üg=ūĀ%-]Ā ?Fu"‘D“w"R©ģ¾ōpIsKqyõ‡ü»5‘5N×w^nbVÆc1”R1oāžņH¤  DŽŅ©µ t3QŅcīŁu4qīyGĪģ»ŌńÄĖņĮ¶ÕŒ6½w¹¶sģĢeœ³äÓ4µģåŽ?꼗ęńHb‹(VOŽółīuļõōyŗūÜN¾g£æķH&‘Zb ©Ė>å“P'…‘×År“4]EÓ4-…¦ł,-]A× ]ĮŠutYCŅ%$!#U!…YÕ:«‰žŻ˜G 1•××죶<Čü±Qf5”ųEön¾ @AoŽ3Óö;RŖ@ÕL|E‘’$ń‡~OyY®żd"‘ൕÆńģ Ļńü Ļsąą†ÕćŌ“Oå†ļŽĄā…‹¹é¶›iÜŪ8 ņoõĆ7iɓռ¹å†=cH pŁ0=cā O>üĮÆnøīŸų÷E +Tļė;ž#üaŪ'Ŗåd—vŚŌ«÷ѾՈ”ēÖłqšp“~$ƒm’ļ†ZKmC/© ±eZÓj’;¶ŠŃÕNs¬›½«·°óM ĒdčųŒ™6†aõC(«­"X]/@ųŅė:ӄx³µc3śžfŌM»H¬ŪFwQĢw}˜ėŽüĪ~Åbqžōųüķ…—Hi* 3NeĮüačų…©o7œd*†Ž§bčx&)©x';×<Ėę•sėwńĄĆęs_ÄÉ'¼ 4l3Rpīr5(œ}ėŪXE)  $A®˜ŗi`ö¾P³ °;)>āäߎ`3€DŃщHŁ>!’.GĪq¬9g „k;EÉ?€aöÉ ą÷ćSŌę!>į'`†Iź1& a± IDATk÷ß”ŅŚf–@fR¤”ƒ©žßēvƒP‘Œ€•'ĒĘß»óæ”Ół_Ś€}YŸqžēT’/:a¦åQ9yĮē†?¾k{ü•—ŸŚyŃ]·Žpā„)3¤3.ø˜śį#­PFńEžP†d»uO³+įüӟ "ÆNŻ?–q柣Ód-LMRZńzƐ„%8¤CWzķ»s?üīopÉiīƒI©°żg'+s§Mfӂ]¼üźjئōkxGk€Uš‰“–0oęō¼c²“”ÕūLŽœ9UÜ|™ߙčnS/æń&÷żń!Ś::7ļ<¦/ū<„U›ŌĄ*eĀĀO2aĮ4n|µĻßĆĶæø“澚¾õÅ«h1"g½¶Ļ]ę·c™T[9§ķ}RY^œ  ‘ҵ’¼óŽ—£:ļž÷Lپ÷ź6éŖ" u!!$!UˆŽM±Į°±Mˆć8&ÅvÜpćŲšŗ%Nģø%ŽŪĒ=¶‰q” EØ"„BØ\Õ«Ūö¶Ż™sŽ?f÷īģīģīģÕ½äżńįj÷Ģ™Sffgę÷œēł=HéøBq¹ų˜¼cŒgbe§}¼Čæ[\Z«P®¢7N)Aō„Fņ—–7SĪRKėĻÉžU[.;ȖOē~5Į.&5ŒÅčN„ŖÖ‰ėČŖawå_ŗ:#’^[h¾ćj—›ļ<źD…>xėŻ“·Nć׏žˆ'¶>t·Ŗż”]ƒ-+ŖÕ±Ļµ5ŗ~jϰ¾~‚ĻŁÆNÕjÄš "uÕXó¦¢:ŁY“W38ŗmg1,i„F¼œ¼€ca8¦+ØŪHMĒv44GC M:„uÅķ&–ĢņŹ€Y÷żp<10lńčęDtX>³‘5 [9½=NX/ÜۊOIį[Žüc˜ S_:ĄŸ’ņēÜõéO2<4Ģ…\Čßßõ)®øō ŚŪŪ+ī³śœÕ¬{š±%’D#­ē?ÆYx’² ¶{æåŁĶguö/ü[G…Æ•Ń…õHŲč’NDOm‰©NlHɶŁCVĖ'’øć3³ÖĪæ÷-Æ'€JČŁ]źźkĢ<īå=æź’Æ„«‘ŃÉØÓꐎ±k×vŅö:|œcC}4dh°-šœ,¶¢QI@Üq[Ć0ŃqO¢ŌĄ:t† ~”Ó ‘2bō6&éone`B+Ć3f“iiĒNęÜżóä?ŠÄG“žĻB̌“œÕÄ'õįĮēžn½Ī]æž#¼ōJü?¼vł輅wž5¬\ -9g6»q’ł/n¬ų{> ĻmsėŌ]CÜ}]ņW¼ŚÓI<Ép(‚ŻÜˆ©bØ†Ńŗ’ׂIÉj¾×·*'žē~ .žgKĻź?ÕÅ’¤RB+Yż×$‚÷Ūc¬8mn“ū¶æšž­›R÷ÆčÅ[žåīZ±`éY\öĘ7Ń6i2ŪżAUކ”»ž©Ü"LĒ1WxoÕbJžF„¤Āk hnpcö!—Ęo =ćóF) šĮw~ ļ¾’„é2üFź%_~ƊuŅ<Ł{ė.ēŠ±ćģžåTTĮ¬QOqü°Äog,˜Ė-׿Ń3źjśŽ W>vł”üźģ_åX§3|ķ»ßē‘'Ÿ¢uŚ"®y××i±d,ŽŠ?„`ŚĀ ™¶ą^Łx’ēĖÜń”æå}·½ƒ›®}ćČ<Ŗ»ŖŚ>KQļM1hրD,AgŖ )JI$ ” qH±?ł§čKŁÆ©ŒPų“’²š‡Ā†¢ļ*FEŪé,Z_Ź•Įö/™)ž“’<+Pł¢~ó¬Õ¹ß¹Ī÷­†3˜‘8Łt°0€D@LKŅkĒA9” ÷!%@ił·I…¦|ÄĖ^}C­'l…öĻ^|o^ūNŽ÷åĖcäśļsGÆŁFš~j¶  oŗ&`{…ńK„jå„Ś‘8å¢7Ī’äī£8Ž“lĆqÅ’,ư°lòq ŪĪ… Ž4Š„BåīIJ)”DLeSCč³ģJéueF/t„ҬŪÜA2¬sÖ¬.]ÜĀ‚) ā!­ģ>vҲī»VĆóņī—łĖżo½ń­|ņćwŃŚL¼H«Ó#­ =²&“AŃČćpj±~獵?•±wźšõd2tšŽ«Üóūų¾>¢µP‰lžü3nŲßé–/üž„åŸ];æÆˆS”p7žB€£Įø‡œģųpc6¼ßēĢDM›‰j›ŒZtĪŽ¬½;>ŗTŖ³Æ›čšŃLš˜mĶJĀŹ!¤lL„Šr–i8Zˆ¬& ‘%HGā¤cdNoÅnœ†ŻŲŒ“lDF¢ØH •Ŗ~ ꉒ÷"Fa<3„vć"n3tFe»^zÕ%’oX ’ńÓĀö_żžā6×Åŗ­Ł]ķ’ķĆpŪ›ŻķGĆ­o‚pn W­­/ÖoX6 ×ŸĒŹßm¦»Æ‹¾†&†eGF\AĄ×ŠūæR"¼iņŠŻ’ƒ‹’i’ €"O„„.kčXtfņ‹ļ™·iż¶[ævĻ곋–­`ķ57ŠŠ8ŒķžļJ+󹅶‘xūõŪ`jLÆr儵9XZ;š²˜„”‚!kAh ŸŪB@K£ŽŠ—»ūė†ożŽs“Tp…+~ÜRž õn«AHK‰_Č0¹ó¶·ńłoŸĆ’Չ|›‚ÓOxŖc‡] ~&˜9u śÓwcčzM[JÖ*ūŷV&’…[NĄüŽuĒį£|śĖ_įȱNV¼ńoX¼ę݈“%%§Æ¼Ži /āÉßÅWæóģÜż »ó/0ĶPÉŲ½sŖvżų]wåØŪ ą Z"ćhĻq¤#‘J¹Āp…žń»r¢[Dh‹Čƒ_Y®?ņü ,FFŚĆiDŖßu5*©WŚUńœüē9Zņ_6ƒ’f|fR|ķ8‘ØœQ4d„L“¬UŁ`  8 ōĖ^„#)…ž#„†Y?/€Šd¹ģB؊JUŪϳŪ×ń“æKj°·ś>Aś©‹,×ŪO}s®Ł}@ņ?š®j\Ņuōć?g‘źA „P±†¢ŚŖ-Œ=É@ėrSūŁvĒ6plDzqL Ū±ÜPĒĀqL7 ć ŪõŠ5¤t½4]#ŅX:%LÄ“Ųz,‹ åéxaĻ”>6ķ<ŹÄĘ0+f5pń‚ęON’ˆhhšV,äYBņK!Ū0€tjd ąŠįC(„ųĢßßMC²”öX¶Å–­[9{ÅŹŚ•«@CŸvĶY_ŸńŠŽ÷ļĖ—eӈd•æęĆņŪļŻōō§²Nü¶däąķw]0ķWłņąI5‚ŪϹl’Ż9ĻXķĖ)YČ’’Eą”gxō$¦å tĄ¢Õ8ūv`Åś/ļ`Ø»żų ęŠQŒ¾ ŗE·­‡Šj(Ā`„pB8¢8ÉiŲ‘ŅlAĶ̹łDbĮN\™ūæOü÷’I "ø=čqČ£·&x‘a€7ĆŅö—`ŽģĀ÷% ąė ߅€3ę¾7O€^Ŗw|ą-,łÕ㼘:Ng’R‰¬pĖ/-ąXø’ēW’ėq’7DžĶH× QMüĻ‹ń’S75¢^p’Yż×uŠ]£„ņĢgÅyv/_Żņ™uæļ\±c˦[vnŪҾtå9\°öJ±(itį§ŸŒ¹FĒ=&üfÜžF×8PAdMᛀɭ®ĄĮ}®„³Ć»‘Ą5( =¹…ī|ćgpĒõŠ^)I¬wžĻÅdÕŪO ¹õ!rłņh$̇n’ō½Ńń££ØŒć"u`lqŸ`֌i|üżJ4)#Ł#ØS¬®¢øކ‹²Ļ±+%Ķ…q½üź^žī ’„#B\łßcāĢe£<'†p|ko’Ūł.Ž’ĻļīįŽO|Œx¶Ę ¢Éx2÷Āķ€#Q¹’ņ7½×ł/ßX,X©bˆEĆiטµ^wä?ˆ²©¾¦_Œd4JW@Bo¢ßéuŸGŽpoų9/4Fø…ļ•X‘,×G„«]ę‡:÷óg÷ÜXV)8)ÆŌĻX0ō ‚ņŠĒ.’%ȄźķĒļJ €ŠżT?ĻŚ‘ƒ8³Ė ¤µ¤ć”lŪB×u,ŪĘpl,'‹a›Ų–­[Ų¦k °mĆ0°ĶŃq‰¦I¤tŗ†®4āaX49BĀĢņÜ”4=TH³w00l±ń„£ōō sś¤«NŸĄ9sš˜Õ#6FĀ+嫞~0€įL0Ąņ³–“ˆ'X’Ōz®ŗāŖšõ÷¼ŗ‡ĒŒĒŒ'ׯĒ0 h]`ρJho;ūB`_i¹_:Ą’~łŪm;ńž‰±WŽśĮóę<¤ż]Ēß`¢ÄT «+_v*uNź{å’_ „€•p¢ń’ÕŠ¢mš{ąŪ¦į„;3f#{ŗ{:±†™!D_1‹däČrh¢»8·Ź6åŚ™å(’/C+Ļ»Ż0–®Ąė  hˆCwĪXŌ?æyŽę“%mĪĆŅŚAVįB&“·ĄĆīwGŗa»cĘ×ŌHč̩äį_ r=̜TR9įÖ«Ėåõ©¶Š+hHĘłč{ßĶ×~ųcvžbÆkf¾œScе€ßįĢÅół›;ŽE$ö!¤„Ä>˜X]„ś„ķW:v•I³ūgēī=|ā’|‰p¢•+ßūm’-ÓFuĘ BpĘŚŪ‰7MęÉßÅ_}źļł—Ļžńh“dN¹ź%Ē¢’e¬Ōc #„DJ…Ģ¹Ū åqž/zļÆDŠżĻoyY®?B€üš’Ńx~£y‘N»QŽŠI#’~m—÷ķB·m4Ż@:Õ39äFéŖ`jaBv˜¬“!§¦ņ©ób€J!Ø@ё£ōcÅ}‚\’c@žkĖJÅĮ~1Ås®”×ÓOńõõSpÖj¤b?µĻ³ÖsĒž F±J°šNJu£eģÜź¾ålĒŹb›&Ž4±ķRéfpt]CI%s‚šNŌĢž&ÕŁ~p˜=)E4ów /,G²so7»;z™3XuśVĪnäĢé “Oˆ6DMm„“0œSlz‘L$łÕĻž›©S¦śnļėėć‰õOščćńŲŗĒ8Šq`dŪŚ5kłĀ=Ÿ?aņ 5_üß u÷õ7„œŸ¹ņŃLÉ6o:Ą<:s“Ÿ=üó{Ųk—ÜūūTqŖuĘD0w«Z½®×ĪJ­Žķ¹Œ•ąXÅ’×ĀL€œ1 ĒDĢnĒéļvŪH÷ķG å¼:c3PCż…ķa,SŽż?püų„’³²ŪFLJšęŃ“išpĘxč øōųÅļąŹ‹ŻmCĆ®zś“ɅśÓ&»”y„‚śŹ×›/cīs_ēÅ”>õŅ “l-¹üĘŃżæJÅ’üÜ’}mžÜÕÄ’$¹’“ū>Zńæüž# x=tt„¦äEד­[±ŗyĆSw^śÜ“^½ķ¹g"ĖW_ĄgķŗžJ7`~Φ±(¤rnö»Ą3/Ą¹‹=ż “ ­ńkK#ō„ ;·BŸÉŗķ5®—±œw( _’)üÉu0fy}/Ńy, J>ū¼ä‹Ņ•m/%)œH8ÄoæüĆĆü~Żz“ży­‚Ś“€ ż@ƒ7]}7]sšVpū‡Ź„“:ł÷!°^¦TvģņŸ‹É›(ś[8ČłĻūęļæō" “øāżß#šlķ‘sĢ:ėjBŃ$|÷/¹ėž{łā§’3Ÿ*0ˆvBĄ7Ö yį‹°]Ó0ЅȉJW0'č5d–Šūžń#Ą•I±’b~Ņ7 ņ_“C4‚Šę=Rnրā†|xłKv 4Oāē3ĻJü4›%04, dš„M“L /€˜Öˆ%”ŗŹeeb€@ĮŪŲēŠV/šA :cššēwĖŲ‘åzū©=ēśś >ē`š»·ūԐ ķč!äŌY%Īāä†~ĒʱmlĒʰm,Ēʰll#§`YXzĆ00t[ŗ€®&€DH©i Bƒ®ÓŽhŅŃ™Śe[ĒiA"ÅŠĒĪ#`8córG{öi,šgéŒFĪ<-É̶b¦«„ä9>#DæZĄ8fPŹõŚō÷Ņ,ĘāE…—8Ū¶Ł“y=±ŽĒÖ=ʖm[PJqĘā3øäāKXzʦOŸeeŁøyW]{5Ÿüų]¼ķ¦·ÕīØ t¾™ŠŠF^Ļ+„lI¼Ņqtpqä{{~0õę%×u”nĻ£;Ó¤}ž7V÷ ö)‰>·5²óʋf~yųDĘy²t¼B€wćÆ,¤€q]w:ń’„˜ ĪįŽāq&›żO¦c"b šqū’ (Š’/q’Æ’®ųßł­L‰‡9g4ż|ņNx×įæīƒÅs €‰ÜX¼Ŗ’'×^@ė_’3‡śiNõ’hfж†Yąé§ĀżŠÅ’j¹’Ėlˆū¹’— –ž+Š’A]āą~%R)”Jӄeē<„–t4€XÜČ®¹ŗż#‡3›7=ŁuĶS>pīÖ OqęŹÕĢ_¼”lÖ}EsD=ucĖņz|¦µĀōÜźzʘ‡­MDĆ?%Ռv×Ŷݛ×p"ćpWjˆ»įGŽēĘeĮ7~ļ¹궉ÄyT#’[Rļ Æ÷‘.čŗĪ[®¹œ§Ļā{æų ½’Ö+‹Ŗ.B'ˆn:ĀĶŠŌŌČū>š6–,˜ēcuBZ¾Ŗ_^æzų„’±µź{F˜ä“_ų2RrÅ{æõš"’yL]pē½ķ³<ń£ó…Æż+wżõ_]#A“ja¼ įP)%Ž(™K/ ÆćNžż8Fäæ2iw’Ŗh †‡]C€åTŲµR;”Ģ»ø tž'Jžīż1"$CŖų!Ö4Äõz­c9 įężĖ‘’>ā%/£:Įž‡¤¤N•c“Kæė0@Įū©Łzż8†ęģ÷„ĘeķŪĪh^j½ūhĒ;“OsE…< “8ĻõĖĀÖ —šY ĒtudÓqÜzŅAs¤”(ĒĮŃ5„£”t加i:FL°0ebCˆŻ^<2Ą”.#¦!Į…1`8csø{ˆŽ£)śś34F O‰³pj‚ESœÖ„5"lźīŖæ*šõ"²®@*…¦Ż1sÆšm“aÕŅš §ŃHķēĘ«{÷²ī‰ĒxtŻc<¹žIś\ {֙gń©Oü×½į:ߌ—^r)k.¼˜o¾‰3—œÉ‚ł jöU BhmWżķyæßxĖNoy(Õxē‚ė÷~²3ūųöĪ«¾žćmß½ćķKßs,_’į]ŸmŲÜż–%½éɗŁvüF…6]ײæ™Ūōšķ·œueĒ`"ŽXĪłJuNĘ[ą”kŒ5ö“Ń” 8āłī]żOˆ†Ræ“‹ō¶…X9‡ Å ©ß’0Üp9¼óĘārMƒpzS0”>-ĀÄfŒ³ę0慃ģģ'9œ¢'ن%5„Ÿ@)ĘĆżßˆĒ¬ĮPŌ²ĀQ-dg ÓJ‡›2E–ĆR÷ȑó ī’²Ōż_×s+ųņ.•ųŸnPėžPÉż_§` Š”.”P(©–¦iš¶ŅDssø’¬;V¾p0Ütī”_oeż#dŪĘgXŗ|³ę/$vĆE£aw…=ĒvWŚö ¼’&ˆ„uRįźÖ#Óp»÷»ß²Ŗąe0–HĘ@5ÔܣĮvąŪ’ 7®qæ«@!Ž—ąbĀ[TTJž‹ˆJįļŅs¹÷oļä×<ŹŸxµY”–+8ü £Ęqąi[š\{Å%¼éŹĖ‡C%c¤dŒžČ¶vų%Ē1Xżāüć·žŽT?WßłŸ$šN¦ŪD}˜½üś»š»ßK—põ„—R|ģ*k'A½€zŚ†Ć f‡]ņÆŌH÷å²Č ĄóO%ģW6žäæ¼’¢kĻ%‹B,†vClÆ”² ­Ä…ljüē÷)§čeæŃhĶlŗ0%«Ņ¹\G !ݜĒ#a(×  ł[ĻßŅ•pRČ ~!’u‘ņJu‚M(ųÆx<Čõó\Ś°,“ī£ČÖÉÅĆ:öĢ(ĘŽtĮą88ŅU’w,Ėõ°²Ų†9’@× ¤ć`ėš4PšB:Ņr¹J4…† ¬Ćä !šb&§µD8ܗaßń {:{érPšŽ”kD"&¦””kī’¶”X¶$učŹ04lÓ?”ĮŹ:ÄB-q“„Sš8}RŒY­Q¦4E‰„uz†vtfč– d$–¶t­¦.0tA2¬ŃÖh›Ln415ኬ Š 'Pķ>ŸĪųß9Rż)ž\’$®scł÷ķßG<ēŅK.eęĢ™ ó…{>ĻźsVWl;UgÆbŃĀEüĻļ~{B€¶äĀ „å~:g¶žų϶{ū÷·{÷Ž­½ć%M0$„ÖŖŠfB ÷fś×ķńķ?ųŲÕēģ¤:}ś¬¤°“/8Ž8©€Ņų’Glj¬WCĒ(ūģO!*±Ć ±’,ž?(l!²ˆĢ0ZkŒŚæŹ*Ų“n¼ŚŪł+\Ńæ·¾ńDzØ—¬ }ė«4 Š08Dxh€tCSnĮ|Ż’†ÖłŅäyVOĆ ;^äŲŚ %µé(.oDYš&;tSŠĀöK‰ę-Ķ3ŗv†g¹; ūæÆųŸ®ƒSż~ćuåÆ&žW“×Ø ”ČfŻūVBŁJĆŃt)ŃR­Ļ‹Ä£Ģž³ ÜsœŽŸobż£°cŪ&Ÿµ’)ÓOc8ķ*ų7Ä”+w^ŗSš‹‡įĶ×.ÄÖ&B…Õ’EóŌ{¹8Xzٟҹg#_śś7Yŗh1Ó¦ä_„+k'…”ĮbĮ󨧋H8LzŠ €œĄ=ž$øł¾ećKžKz+a×Å_s£Eń(jpŃ×ļZĖĘWķ»’<żIRY­@ä@ĖdŠĶ(¶U>>?„LC×±źõ£Z’¬3 Ž@é ¤«ūPHyüLGEžk’å1"’u³^æFl‹¦ĒŠü å£ļ§ņļÖy°ÜČ3p^Bwœ\€…m˜F. €•Å2C–…c„°,Ćpp¤ƒīø^2Ÿ@WīŖŗ(„åī%nü}4¤‹„iIšĢžgł°C׀ű¾4Gz³t ¤éM9 fl,G޼ri(B†A[Tcnk‚–xˆIĀ“7†hއPŗąpæāńz‡:™a]@SDgz£Īģęā!B†po•„Ŗ†Ō†ķ²– Ż}ź™§ø÷ ÷²y뤔,]²”®½ž‹/ŗ˜•+VņĄƒšÅś÷’ś·$Ņ'ł ™HŅßāŽļ¦ŁxQ&ĆæIų–…·yĖĀŪ®üźsŪVōe'Ÿå(#& •1õĮż3’6ßtŽ›‚› Šo’Ń-„XpLtź@`€ 8Vń’ć)X »»‹9X^ąDp"ń’„ī’¾ń’@& qꉌóļ‚FtC IDAT›ļ„Hš›ą¼åšg·ŗßļøīųØ+xŚTŲ¾ ¦OÕgHµ±b ŅaBv˜äąǦ_J×`<Ü’»wž¶dųč„«e:|©RōaJ©Ļ’}ó¢L*J×¾ÖA3b­‹Oģ`ņéĻ£”JŻ’ Üž-ĒHüÆÄśį·śÆ$B(%”DäÅ’¼«’ŹVBӄČZh¶t“”X¢9ĪĻwŸŻŹü\A÷ÓÆ°’’>Ķ“ż–¶I,Z¶œę–6¤ćźAäŠv¼Ŗ³*{ńPåg™³§ŗZłż‡Ņ'#@, S'#ī{žHŒ³A\śk’’ś„ķē?¶57ó®Æå†+ÖņŌ¦­<±q3æ= €ÖØ!§KhĮż?£įZ2²Ą.éļ퀆L¹qĘōÉ\tćJĪ_¹œ†dĀg\•ęT>ĻšģUĀŪė×NØ}¬”«§—ļ’ģL_¼†y«ƒŹÉžZ”qž-÷šėĻ_Ē—æłMžé3wS8 ¹æU`eȤ®õx ŗ‘‹’—?VQtŖ ’ųœSOAiŁ©$’> \_ CÅćˆ!74˦¬…€óō'Ieµ*ĆožR6Į®īÕ_„X$Bjp°jøŽ@Ź>źźĻHJsSjĀ(:z&“«2Š·Ŗ²]’Ųš;Ō"±ū)žsĶįŌź'źī§ģģœ`?õē¢źƒ)Ä`?*^L U{§IĒIŁčŅĮ¶m ŪÉep°„ƒcg±„‰åXŅńšŽ#u4GCi:RJ4!‘BGH‰®»Ę+ĶóŪ aC0!¦3µ)Ģp{ŒįŒC:+É8ŪVXRāHWIMץŌ4 S'ljDLAÄ4čHŁl<–„{ؾūo)LJŽ;l9’„9"8cR„iBÄ"†&@äżo‚ `™«PŠīJÄĢ3—?yĻ\tž…455ÕżÖw¾ĶßÜł×u‘’;_äŁ ĻņžŪŽxŸJi‘Õ‰čDĶ’ĒFv%€<ž~õŅ =°”“<ūwŲD‚D*ļšOl™wFĖÆŽøąÓ„ūĮX ւW r§>P_'ģp÷hŽ\j`¬kŒϤ<žæĶ\½“’_ Žų3K(l2jłėŽüŸoĄW?Kę»ńŲ’ōļšĻ߅¾¦L‚o~žóWšš“°p.,žSŲ’ęė‹Ū›=bDFjaö4¶MҲH¦‡ˆXŁJkü•QĖż_Ųh;ę^9Žši‹NlÄ9(·†CW÷īk¹:u°i¬qš§w>Ė"ēRYp²Ä’ЇŖ„²īźæ.”£„c ])%z§M?Wų…•Čę@¦zŽåń~GŪ¤ÉĢ_r&‰dĆČ ŽÜ…g …š²QŹĶ"2\±LæI™&̙Ͽģ~w¤ė `Ö}փ!‚©m°’ˆŗP–Ÿ—Zd>_^_}·zEł¹ƒ7&\½ę|®^sĒŗŗŁńņ^ܽ‡=±·Ŗ ø¦kLlmęōyÓYNÆĄH€§ !„'‘Q哝Ī@cŽĻ/9c _žü—+ÖŻæ--Į4v¤”üųg?įsŸ’ēŸw~ ‚µ  ńņ_Yp’†[^š–ūéä· ™|Vł›n`ÓĮ;¢Ol’č²!§}•• ­v„¹ E4“N\{ć‚O?ķŻ'ØĄÉōānü…ėĮø…œ Ą}ćŌēk5ž?3„¶v>§‰ŠĮ µńĆ_ĀåĄ²żmj„½nżK×0c*|ü/ü÷ļ-ÅßēĶv’?Qœ>E̶IŲi"Ö †tȋī\ō„ī’Žų’jī’½ĻĻZ6tøåo•£Ļń«2¶6c +łį”'ā7'Śū掼°{£¦”ŠP5Ż’KŪŹ‰’y”IEKžµÄ’¤Ō4KzÅ MŁJčBiYGé “,¦™nlXU:åHś_x„› Ō™n8Žy˜ĪÓ>u:³ē/$OpÖ¹Œģē8Ķ@Ÿķ®.… ˆG Ćs…·5Į¤8ä.z“Ī‚Ÿ€øE „C®žĄ«+ńRüźlÅܟĄā©ļV/ėŹ±ą…Ļ“Z[˜ŌŚĀ%«W!8ŽCgw/ƒéaŅé,éL†H8L,!ŅÖŅ‚”i¾džD¼ŹĒč9>ŽśEĒ0÷×ēX‹*ćr’ģļ8ČcO?ĆŅĖßG¢łµ÷_ óW捗Ÿśßžį’åāÕēŽŌ žńō™¦Ė]÷7NŖ’’"ŅåCŠ_7äß[¹É³‡\±ĄRŸyś“˲Ze}oō'’AHŁvōG,Ī‘ƒźē?.ŠĀ ”»KIŽlź—›R÷u!śW»J"ŚĄŪ×ü9»m/3”÷S»£š5j±ļ@PéŅ­ÆéJuŗŽĀ“99ż¢Ōü$ņ™'ļ`aXŽĀĪ“}ĒĶ`;¶mbš2—ŠFJ)5¤ŌŃr)šK5R”éī JWŅpO–[2-{®)č’<öźGŖ‡2Ž  9‚';2l;œęģé1¦7G‰†ŗV0»y5ź ČZ".Q»ī¬™³¹’÷÷sžźó+Ö9tų÷żö>~ü³ŸšŅ®—øåm7ó¹»?‡®ĶźMsbį*ą…Ņr?p=ƛMT.ó3?ŚöĆö½©KVe¬¦slZåHćL<:āBÉŻ±Šńæ¾ó¼ÕĻęĖ^K:ć)xŹD­ļń1&ųß’lŃfbš=˱’ œWāraŁ‹ł×?Yˆ† 1b–C,›!œ±Ńe>,āī+V"vxėœŪéš8I× ”ŚŌŌ”ĘĻ vޘ8æókįI™ž"ń?j»’ēÅ’¼ī’€»Ņļżźłģ'ž—ßęu’¹ÕekB))Rķ“K]+ółzåĪPA÷Phi…ŠHƒ#‡pōšAŽöī÷1”©ŪĒOUJ‚¾~×05]q¾¦„»*?’4čźń„ Cb —?)®Df‹ xžƒ…ó#ÅŽėŁ[\rķ7é÷›õHń<1D"ƒCØŽĀv|ēéO.Ėj•õU¼±Źń ĒA×C8U<¼Š4H(Äp¦śJETOŅcq­ęł0€ŠŁüN\Ō"–ąK„ĖJü\|®œšmļĒļž]Ž›×¼C7ųÉŗoU®T«‘šcńŪ^aöAn3ĻQõƒö#¤ƒÖu9±ÄY5¤c͊”æ’Įv, ŪĄ6lĖĀ6,Wüϲ±Mץ¶-×H 8ŅĄv4ŻM (•ū?RäõrV*@Ž6ņÜɑüJxįh†'ö ē74!‚v0·)Ͳi ZĀ„tAY*Į"Զ̹鱣žü½ļ毜¤T\ķuLšŲNo_»^ŽÅÖmŪŲ¼u3Ūžß†®é\uåU|łó_bł²åõOø ĀzbšŻ õæ¹ķ±…Ē›•‰U¶:G”ĶD©A]·7źŚš#ńpßWšćūwÜpö]{»ĪŠģøsĘўe_ü‡‡;Žüwk§Ż69ŚYvc=™:''Ķ4bóTÄ’w•Đæā’óˆ˜'–4lī,xv ¬Xā~W žķæąź‹O¤Õ±AcœČѶ$ä¤Ń„ƒ(µĆT‹’/M”׳{ĘüŽż“īQRóKü6īp2ęGžŸ¼(ŻÕūŶł©mh½ь“ū=āR)!„¦¹āMgūõ“Źūē—@3 6Ā-0|TņÄCæ#ÕŪĶü%g2gĮbBaÆōAO ^µ]Ļ€¦¤ėšæk_ī˜IŹø”ćCĆ%;#ȓ/É.l+"ąy‘%äøP臘Ņ+#Ł^b’\Žg½Ž •ź±+ļKŽ]1  »ÆĒžz–EkŽE(zӑŒ1N;ó ’5žėæ’›‹Ļ;ļ„Ś²¬ JFUPĒ€®åīIJęœ`ó:®Ķ2Ī,šœĘbˆŅÆÅ —‰ @Š}v÷)ó^w>­”Ēē÷!b1Bō¦\+fŁ€«ŒÆJŻ óTŽCČ ×a’‰†Ć5 n@KeÜó¬¼B€n6A.4@ųGŌ¬2VäæVßó“拵Kf®bå܋ųĮC_”gąx妒’ѼˆŠŠ_źķ§śœėķG;~øÜČEIä®A¤£ēÜü-ĒÄÉ)’;ŽūÆ-mLéąäōté ēRJCGs$Js3–H%Ńņb€5æ²”ą%ąHxč•Aötgkģ=¾0LƒŻ½’#}ݜ7»‘­"¦Vüz@ńē‘ēB•܁™¬ Ŗ{ł„—óķż_ųĒ/ņ½~Æhیé3X¹|ļ~绸āŅ+ŹōĘ šY•É ¼B€Õtō¬žŖBŸ¤ ė©XØē įżOæyéū^˜}ÖN' ūD-ŌÜÅŲ³'žąåūvüąö‡Ž¹ū«O?wĪ=—œöŌhĘ9V:'S0Škõɬ’?V˜I!žæ§sT÷Y҃ųÉĆ×ĉʒē”×å;PĄĄ«’Ž7Įß|>š)hn„WöĮ¹Ėį]7¦U„ÄØFTŽx“!icHYī ^Ķż_jŻĆéŽn»fØ³é³Źuž8ePJ4÷jślfČųśŌ3»’ …‘xRVs’÷®žkQź įu’Ļļću’Ļ‹’)„ Q"žgēÄ’Ņįx£‹Ī/ƒÕŪĻšĮ£U禇!1ś_åæ{•ūłc4M£}źtNŸæˆy‹—2gĮ"_ƒ€ĀžK ø1ł^¤3n€>ź_iuøBWī)ˆFĀUI¶§0÷)iöš ʂbŅģymń©/—o}JßĖ‚ź$’”Ŗā±+©ę£—ō•0 <łRIę;Ź›`Ė>µ|„Š˜sĪ›ŁōŪÆpčȦųäQ Ē®ßÕ©Ć iRI”ĢÅĄ¢\ž½čĢł‰r×’1!’¢¼“”čū••“Ö:Ⱦ@‘ˆCÜõ 7åŗ6• ±lĻŅį•l `äȍ',Ć>u+!  @„–“éĘ’h(Š”g•ęQ:öQܳƒ“ņJżŒņAQq·ņćļ‡H(Ę;Ö~€—:¶±žÅ*7=VäßgĪuϼb?få¢żÄšb0…Š—q'ǰ “A7  ĢeČ ž¹«ž6ŅvClŪĀtL¤ćø’īæ1@ „»1éŗ.’Ša„sR€%Ų5HGßIpłŻŠ”&÷ļčā¢Ó™?9N<œ Č{1äįõhئŠģyų†«ßĄ®~]Ż]9z”D<Ī͉D£ŃŃN©.hBŸqѲĻM~ęÅ»UŖćÕøįō]嬯ö÷TŖ\‚6ąŅéģŁxšéįLr0*@-Œ•ĄX žŠŗŚŻ£¾ÓŽc%X¼€ŽųąÅXÄ’[9ƀŒ]#ĒZ¼ēCš{Ülßŗ×MĆ68“'–y•×…ko‡G~2śż½HgŅÕaєDd3ˆ2 Hxć’lZxŻPWņˆ²0śS„Їz’ŲæAkž¾¢ó§!{f•Ż’kuĻ]j—ŗ’ė:Ȭ+ž'”.¤-5Ēŗ”Jė™:u„*– Ē+”Œ8$gƒÕCG$‡ģ抁}<žąļŠ4)3f2óōyLŸ}:³ē.Ä0k»É Crœž7®G;¹Ö¦ Ä#¹ŽJHyY‘‡¬–PŲ‘JAÜåĖIsa`¢ØN}õ‹+ųņcō¦Ņ1zēQ|,üĒč—(©S½~)³Č÷łŠė™4sɖŃ9ī„ Ü4“/žb/ķMat¦s¢O'³—æ‘Mæżgžų裼ūķou;¶U‡ |õˆj¹É<żw5r·OQōÅ×§Æņ_Ü4>ōv\<ęDÜ5ō¢Rż#ćIžĀ8óGŲ4Ń5 §Ę5ÕōĖn—ųK‘   nN™‘ųčjCDžkU ŌF€FMbżænŗąb‘$?|ųŸ‹ōź~I®ŃOy£¢¼(HĒūńūKõjśńĆŲ„Ą™ŸĄŁŠē’ŪĘYż·\ÕŪŹ„“‘ŽÄ¶tŻĀ0 G•‰¢śˆī…`IÅ};é81…’±†¦ B±|±›Œ-9cZ’DDCĻż~źÕ°l÷VUĻ»~Ks -ĶĮdz&^²ņ™ł·Ģ+čÅŁÓ¾:Ųm” ³\,/čÅ@«ųʆW?ˆ‰øŃ¹5_ž×+!ĄńĄŻœ˜ąø8ÖžoŒ¤ƒ⒃ ŽGüƙŗ+¢©Ńż’µ„¾Į‘W åkō‡6Ķæ*ŻŻš Äøiɍ"3æõĄ&!N[ŁõS-&l ”‚ø’{É|Žżdõ?wGĻ‹’ģ£”Č‹’)©„% @ „9®§§p”&ŅM +Ė;T ģ|µī š ŠŲ* ÖŲC`J:öī”cļxČ]iœ4u3ēĢgźŒ™L™~ŗ^~[r¤kˆŽƒ’†äV:Įv C/~)ÆÆ^COżüw/ØI𽤣zżŅöżĒč3‘ćPhcܽ|Ś÷;v]==¼ŗ?«nø™Ńā¢%MdlÉ®”Šżi~ńduo–°ß­«i“MšĢ“™³™:c&­ķSFšJgݶ†ę6ƏŃYu_Ü#fYveBźÆNĶś„oÅ¤YxŖų‘ęŹõ½¤¼¬hdĒ o}Ļč¼—wBłĖŻ¶vŠ>ēF]\½²•g_źć§ėŽ reaS£„ĮähO֗ą7Ä >pķ >ž½—ĒĢŠ>gŪžw††‡‰Ņ2[#žŪõ„ä½b4„ņįąI1#’Åæ‘R¢ü:"’žļ¢!‰jHä )÷AVÖæ·ļ€Ś„Ū]7± DĀįš„ LŒ!Ł" <…óc©H3|Ɖņ~|v«QP­Ÿ •}Šƒ÷S³uL#Äm—žū޽ĢĆ[SyŸ€®’Į·W_€n£ąŻWŁ”äJ–6Zļqdó¤āz1gjż°…Ģ»ž›ł€|@Ø`°s:ł”€ŅAW&Ź#(rŁŠriLs«’RJ4M+[5b’0^#n’•  ACS‚_čĘŌ‹§'ˆ‡Ķ¢cģMX é¬ ;µaqAačŃ2€zšÄ®»OĻŁƒŁ‰ēXNäćl”H5ąČč²/=šĀ¾|ńö†lå~ž7 žĄkYpw÷É'‡Ł*†R@/üŒu½Č¾·ž[wRž×<öFZ6V4Œƒ@j:2¬UN’ē… tlm:ŽņŌ©ĖtD:ÕxGēŽģ!}Qś…pBųöq’Ļ‹’yŻ’«ŻF4©„”h®ūæŅVڈų_[›æųß {F13~ƱB3 §ÅŪh µ””bp8MO_?=©~z{޳ńšA6>õ8š¦ŃÜ:‘öi3˜4e*Ķ­É*7K€ćø m:.‰7“ŃéødĒ}‘¶l7ÅV%BZM¬®,/_ĖĆ6ŠÜź‹^ąÄČ~•I³—™Œw‚OżBqÉ…ß½ÄH”Ō)®ļ)¬2ĘņqmßõŃųšŚG—­ó¼…č°ųéćGF~ŽT,›äÖK&s°+C{Sˆ>t˜öķ{Åņ}¾›¬=¶yŸŪē¬bėßbū‹/²jłč“­l}āT*'–yWqUtbj“āāė}¤¤¬béæöÉæ?õüˆdyh€·Yßyś”śóFEHSŲõ†‚¹OEDœ!§ßMQ#… 'Pn׌øų¼yŌ¼łŌO€¢Šų]SžøīÜwМœČ7ļ’ģČsäĘóoēMæ¤ø7X#¹.ƒ?¾|~;e_źķGų~}?ž×·vüp¹p%‘8Žƒ”ŽkplĒrć’7$ĄO Šqrb€ŗ†–×P ]ؑ0÷Eæä‚͹¼Ņcóā±S+ų¦®NFyxGńØĪÜI:a³Ü Q ™Ģėƒüh˜KĪŗ6ŗēŠ}#+QՄžņw'ķ>vå…CŖq•-Cē*e,]³·j"ūL»•oüö@ъČĀqŽ~q;ŸūÉzlš“&ė,>ś/hDĆ:«Ną“?Ų]w浊4ÅÕŲÜ{ąĄØ Ņqu†Ō« IĪ2ę-Ķż[D™=š#’勯?Š®§JĢ£>ņ_©¹±#’„e„}Ģ±1‰hH@j՗ ō^ļeķTšgigBQ_V8‰®†Øž@X.łW9 $®€RˆœOµßŲjžLNJü×ĶFż °”FÓÓZgsé²øĆO8Ųµ€Łķ øbłMģŲæ‰¶»wł]gĘ[÷aØŲOõ9×}„+m ‘F…K¼Ÿf&pĢćčŽStlLĒ 0m˲ ™®W€ćŲ®ūæć G9hކŅt÷:U GJ„ŠŠ„ŹiX”g(«X·§NĒSŒ†x˜}©4Oķź”1j2„)‚V4·Śk‚¶ć 㚧`‰¬§§‡›7²iĖfn×{hmi­µ‹yęŒ÷/Ūsč¾õŽBÆ€Wpē±kŽ8ä“}L#»!¬ü<>śĢe‹¾“łĢĘOĒؼ@4>pvüQ{ęÅĶß’‡‡3—w¦ę¼x’hęUKąd ҶTFĶS_iļ»G}×{ģ+K^°cÆ[ŽyŃB¤ŗƒ}ˆgūĆ9ņŽė …cØhܓ"é~žÕ€:āi×+4žæA+!’Ÿ4 ”Āéą•öęś _ś6Üp%¼ż:ųÜW”„ ®Zćn†Ł3ąęėaćón¦€ŸÓŻv߃šūĒąĆļ…”!xÕĆ…Ÿłøż­®¦Ą?³¦Į¼Łõķł—±„ «ėdōٰ£y¬}Õā’o›‹tō3ŖµśÜy¬¾ą"†‡†xąwæ%•źٶhÉR^ŚńĖVœĶK—ńŹq¦ IDATī]<łŲ#E/N†a°öŠ«™ ½²ūs8bbKˆ‰-njGJRżƒ¤éIõ³÷åٵcŗ®3”¹•ʦf’$’ Ų^ƒ@Ī£_`źī’FÉą4Ķ=ŸŽm“µ­Ŗ„Ō3‘‚ФŁSæœü—Öe¤¦ĢC āøDIŹõ‹VĶ@įG…ś>Ē"ųƒy'ģ?t˜ÉKĪd4X9·Žćitܞ ]pŪŚ)|ć·ōø$ŗ»ß¢oЦ1nŠ3ąåĖ–5³~G/ƙ± Ē‰ÄŁ×DZØõ®žCżGŹį,(!ÅųqšJä_T-+¾äEqYīKżäæŲ«¤ØĢS.Źæœł÷›“(ģ“7ō J4|Fč3§ŅĘĮ¬ÓńOAŲ4I×ø~Üt€l•É ” O ˆ L`6ŗQ‘’@¬·‰­ŲOésŖ24MēŻ—’ }‡łżĘŸŽ”Ÿ·šrŗś±«c[•½‹»¬9mŸĮ×}ø+ö#|?‹ßöhŻGq&Ļ,.74œŁ1œ—‡Ž»Ā/‹Rژ¹Œ¦ć`Ū9­€|€#Ń5W PJ©ihĀ5(WÅ2@QĄśżi²ÆĶ°’Ŗ˜ŽŽĄ–ŻĒ˜Ņ!1iˆź…[īVĶ3 aÜ ¶m³ó„<·é96mŁĢĘMŁóŖėU:{ę,®¼ģŠ ’Ńi«€õ„å~:ļ\ņ¦œÖ°ž;Ķ&2h6²KŗŽ@e!Ą}œ|€Jø!Ą O‡1?õ§BŠ‹£{‡=]ˆĆūŃŗ:Ńś:1ē$˜×i`—‚˜rĢdźļ„ūÉ#ŸĮ‰NÄŃ T² 'ހޠ˜‘8*Ö\|€k--ēć’OD°Vüæn¢Bœƒ]ljofU!•aŃ\ødµūł¶›ą· Ó§VüÆø¾ń×+ ¹ ž°žśO`VN”{±'i\o ®æ–ēč÷WƓĻÕoxx#MÖuMLŲÄŃ*¬Š{ć’ū·¶[żń?©Ööņ³ĻįO’ā/łÅĄ¦&¾ųÕoņ7ᅢ”AWOń­·ÜĘī];i›ŌĪę ϲöņ«˜3w>ßū·oŒ“ń·w}šžžn^zń>ņwwóå{>Ƌ/<ĄUo¼žžTŠÖ¶66<óoøįFZZŪųĶ/«;õH;~įŃWŸ!”ŻCO›ę ńæ‘]÷u’WŖPG‰‚ųŸPJ8J ‰Šl©iƒ­­głõÓ_ų_ŁKtÉĻLjA«#śF×4š“45&9mŖ›>-“ĶŅÓ7@OŖŸć‡öóź®A4]'Ńąbń‘XéĄpĪ`Ū ¤ė!Ņ!œ»ź† ¤±mĒMy%š%¤Įȼi®^æŌøąėJ_Bü‰u1É.n» ™/cõś„ Ėū©™āą@Ö²Iõ§˜Ū<•z!€7¬jć;(&ŁkĻlę•ĆCģ;VœD-3H»”±fI3ŸžĻWźī7(’-Ó9rģŲØöĶ֊ćöA½¢µxļyϧž*­}‚äßó­”ē¼ŽČæß  ‡O@cZ2ź,xPmž„¾˜JRM ĘŃPئ ,¢X2‹š¤ä…±ŒØō"Žcšj(JĪS…:Ъ_µņ-LmÅ—~ńlĒ5°™ŗÉйņš–_»Bеę Ÿ@äŌ‡¶6ł÷龞V}7jŻGŹ €š›@½4č#hćȜ  ÅvBŽ…”!—š;ŅõŠsŽDéyż5¢ś_:®CżÆt՟QåµMZ[’¬ßÕĶōę ¦$ åŻ„(hvT¹³YF™H¼2ŽucĖÖ­lŪ¾mĻo㙠ϐJ„ˆĒć,Zøˆµk.įcž(«Ļ]ˆųēań³ƒźœÖ°¾āI@(oćkė_^éČš[M=żżJūę…z 1B€'ŻłćŃq0Żė¶¹o;ڱżhó;™™ŌXsŗąāy&gә„żö]8.Oæ%Ł74ÄóC¬z+Oo kFŁäéŲÉ&œf 's~ÄēāÉ#/X c’o˜Ø†ĪĘWxzÅ\ŽW­_?œėń>mm†®ŅüLjƒ®>אˆCOoåŗ«=T²µž±¾q„³šÄf5A#Ä`$Jڈāh:J×Q•ā’„Dōķžöē QUYė­·ŽĘ?{7{vļ rŁ•×ōy ń©~€'Ö=Ā·¾’_ü׿K&fź“é4N˜Ą½w€žīnnŗłVžį“ŁńŅ3łČ_ž9J)^zqŸųōēj@hĆ=oč<üŖ©kzTؚG裻šŸĒˆūæ§Ž×ż_)]XR Æ8ļžo[h(%͌Ųńč²¶SƒdŽÆ1ęüŠlš|Œ–;Ōp(D{[3ķmn|Že;ō¦śéM Š›źęČA×õ;‹Å G"膉”īƒoĄŪi»IMӐ¹0€pQ¼¬ ®‡ü—×/Ż0ņZē}!,2TŠČ’­@ĪĒŹ;”“żšŚe mTóNšö9œvIŗ®jBõÅŅŁIz,öw“å5K›ł—_ļ/*›8!„eK,[åź4±é•żĆŅ iŗ xl–ŠŒpœĮ”Ń%pɌĀ`Õ)˜Ķf¢pżęĻĖøƱČS”Œn—²ų²nü܎O.łÆ8Oļõ®i9€8ŖÆ•pÅö|ēTŚP” ‰z ĮÆ<"į0 Ō¬1do.`.MŒņD„xu‚`,\’EÉyŖPē„ū P„½y:o8ūfŁzÆŽ1²ĻY§ŸG$ć©–Ķ9Nšęóoē”-’ĶįīĮ†„}9~×t½Mź§²ėQµĢ0bØKo˜lj ōlNĄ¶pĢPN ŠĀqBīŹnõß², ĆđRJé I•óŠ„Dj ”ȉ߯6z}ÄżWĀÄꛎ„Ų¼·IZ&zźČ鬹D8„eY<’ĀólÜ“‰Ķ[6ńܦč(ø›¦É»Žq·¾żVęĪ™‹~9Ęu*[¤Ŗ¦ß~ę‘Ó§Īø c7\ėČŠ•ŗ–żÕEóæż©ā’!Ąq7Œ·ą¾Żˆ};ђ»h9mˆ·ĻÓy›©)'PC'ičœm䌖Fnž×ŽÕŪĻÓūqßżx@Š?y馣X ­8mSqŅŚÄŲ ž,Ÿų’za6"øŽķoæˆĆ 1&׳o³ĒĮŠŻÕQ/¤„½ī’=)Č{‘Žr=|āóšW¾²2\ĮH»nŒz]ø’ ģ“ÅP8Jæ¢ßŒ‘‡]%÷’ƒ­ķV6|Eµ¶É$“§L!’ėyˆ|š#Eż‰Ēłl[;_ŲĪ™g­ąŁ§žä¼ ×°žńĒF¶oŪ¼‘¢X ćŁõOŽ„ =|ˆ MMę.DdVź`xY4f­7u£Ÿ°9z'āžÆ£#ķ‚ūæ“„&m”I©“ž©“—*!Ź¢ś_zµīŪ‘Ļė°ßbz¤¾†Ą4tښ'ŠÖ<`D\ŠÕč§§óCé ”p3Ę4LŠ ARš®#„›c8Ī»„¬ęKė"’Ť¼"™yI+%ŁÕ„=ķRBĄ±zżŹćŖ4Ę õó#,:žnJĘ5œ#ŗf¤ž›äWµń“uGŠŹfµGI Łé)&Ć.nā©Ż C\~V ÷žōÕ‘į½łüI¬˜Ó€åH:ŽgųĪŽhŒf$ĮąPרö@½a™¢q\łÆƒü—Ö¬HžEå²Q‘ĆĀØÉæ·LhhM ”•źG„ś]WūņīĖĒ"@ iPO”J8ģ»R^O…Ėųs"€y%õ"-‰ņOÉyŖ^ażTŗ®Ź”iļ\ū—ō õš›g~P“mõĀĖŁušyŗś‹½{¢”8w^÷fMšO’P/æ~śĮµßųü‹«īź_­śĪćBž=“ī£8„!³ć؃91@™K’gzŒn*@Ē6s Ó1 JI”’HrBI؜'€DBĄ‘ž’ĒŽ{ĒIRUż’ļ[U¦{rŚŁŁ]6GŲ@N’ATD ¢(‚>böQĄ€ā£(E|T IY`‰»,l`—Ķ9ĪĪģäīžNUuTwOWwuwuĻģßēw^Ɲ­ŗuù·BßϽē|ŽĪŽĮw6ėæŪ\Êķƒ6”–ŗ*aŒ]zĪ0¬MĶ%.ßŪ±—eĖ—ńĘņe¬X¹œUo­&S__Ļ‘‡Éłē}„I“&3yā$|>[¶nįžūīa×ī]üī׿Ń€JĖéGŻŲöŹźė; åÉęȕ­}§z]’«‰ńG'Ąq¦ō#„hȽš¢Ī·ķż_=qŹā`ŻČpŻ»‰š͐^LvlF¬_āŁ@Ūdų‚OåJÅCķhŌ­<µœŌXĖI³”{k'=öޱ“ī±mDgŸ:3¦æŒE7ž’„“9nš†ōבذ›ēŽžĮ'ÜźP,Õꚯ[`ź$˜4āYsĪy³ąęoĀU7Y®“Uē(຿ʒüōĒüą»#£ŒoÆ;i>`[Č&Ģ– żśŻōćӆ-G높8ĆŌGŸęMI¼ęS÷ßŲR·įµ/{ņ¦źZ$ūa?@ŒtąŻ"Eä;4ĄŅE(;VāŸę >o Ał6¢.Åē„yö®œŌŹł‹×qēÓoņdG/żƒćˆLŸC¼±Ć_…tZHÄJŒ_ĄlńxŖ† ԐųĒ"=b*SÕ2 Ču?†ė’ę¦üūWä˜_̟÷ż¾ņ}ĖrąćēF«°g?ņ©W )żšŸžŖƒU$“¦“łŚ’ßŌ¼F‰Ż€Śŗ:"9&z2‰ßo’¦|Z†"aźźėSuŌóŁ/|…O|ś³™ė±X ×cYu@†O Q•ŖI]bbU³Ń_ć!Ķ/ŒŃ2’7“RQ…ɤT¤B÷TUė’ōÜŗćūūHō ä&ēKŽD:ēBń«īv¢F[|^cšÓl¹ H) E†č 3 Ó;"‰ŅXWē¬ ū·ŪĄm6`±e'Šģ>vżmJź˜ J†ė8ØÖ %ĘΦcV?«R«‰z¢<†f)a٦|€ō+ÄrŲž.:¹’,ļapH·¢ÕĢ/ŻĄŌ±ęä¦ū·f>ī›÷ŃXStŃ•$caź.f]9*Ÿ­ŚH$J2æēJ"™ÄbĻ(Šu‡ņŻF†„0(Ī9Ϝ‡4ū³0œfĻ™ ž‹ھOĀ!mø§o؈ś™u”T?…T„±źź0”p&¬œż"Į(®ł<†\ø„ų0d† ņˆ”„q9T„ył\,xæĖ‘‚Åģ7®Tķµ-œ§Y¼n!kw.·Õpüģ3ˆ%£¬ŲņJ&ü«ŠŹšĖhkOץžŅ½pčsŁ=/؟B/e¤R »ŁÜpj'™@ ÷cÖäXGŽ `fĢȐZį Żūŗa`¦ÜŅ CǐšÅ ‡}’‘Sš67CJ¶õæūw’Įz'kėŖxk× GN®£”Ś‹¦ ė¾øąˆÅŖŅæsĖC<Čü¹ó ݃MÓųųÅēĒ£°Påk<›īDŲšāķ‹N¾KÅxKQ+¾®ßĶj|ģ„ĪłbOv$J¬",$ļ¤H©¹A]*²ø”āÆšČ$½ė_·•#gIž x˜q°Ś®ņŃrś¾7s<ēüåY~ŗe?›C}ōĶZ@¤u,: ‡©‹eķāWŗ2QŠ0-¾*ĢęV’/Æ`džݼĶ,/€×ķ€REŌ“ńrģ<Nj”†nŌvøßnźq7"övÉ2.=ķ+$ō8é.[ BŽŸu&ol|‘„nmüū½nģz¾}ń/yč•?8¶ó¾#/f[ēz6ģ~Ó±ĻyeJ)[°?y?T%ėq#E³¹mJoWž€sJ5ruŲbóO[č:¦GĒĢv0² L3ć6 SURÅÄj–ĄĪAHŗ4¤:óš&"1ƒÅėŠ_’4ÖxHźŅĘ?ćFĘ·T³nĖ~vvĒßą§¦Jsmušpiįõz9įøŹŅ+-†a0™Õ€G ĢsKxĀ„Ÿ„f4<A±8lŁįœ·®ĘZ, Ł×ƒ¼ėa…JÆĒKW°ŽžśF†Ŗżčió'’ÓDÄ#SŻ“Ńß×GMŻS$¬&²ÆÉÕŌŚóT×Ō2ŲożōötÓŠTvŌŲDR=-ŅÆ7'ŒāH9mžŸ[¾łæ)C"t)U]J“¾~®SµC›v:%KŽD:ē‚óE” ‰‘ļ¢ŽT Mč»z{SĒĪ[9ūnz¾O}ęJ¦\!£XPĪ>vŅ«„uBž^YuŌ1„³oüp~»^nu,žßēóQ]]M¤Æ Ė_Y²­3ŹĀ=|ļ’)ÜrÅ Ŗ«T~õŲN Ó2uūą1-<¾ŌrŻ™ÜV…aJž_ÕĖgĪĒē?0‰­~ęNŖę­•[÷¤%Ü·‡1--e•‘RVę+į ˆĘcˆōīę¾ ”œCY 8+o)Pl{īģE³[É{/ßmą?§¶f4„¹m|;¢®ĘÖ~ŗM”?’ōzÜ}{½¢ i’’Ć–¤ā©åÆKät"+©\EEν*§dR©†Ÿü<ĒĶ:C'Åż‹~ĖP$’ŽQIGMV¾¹’_Üž N~ĻI#®K޼˜ĄÅ,­›«7ŗŗŃÆ­łˆļę×ߚĖ‹½—Žü\ō–oż3łļæołEM±2iņłƒ)£±*Ą¢ •ßŗ±cŚŲ]üĢ«–Ļv?ŚōSwįé|§īu&ügĘŁÓ7Dߔ™ÄnjG§čc“’Q +€ĻYSOü…µ¬{m-Ļ%Mį‹IK£õMŽø¦O†’}Ęg¹Č?¾N< źjįO’“ÜFC®½xĪ9N ĒüŲŽ ūśäČ“ P²7œÆc”~øĻŸ{qüŲ± t•в„¼¼¶Ÿ—×ęļä̟RCO(É®TŌ€f×óŅ[}¬ÜbåÖ³&¹č¤66ķ"Z뚃$ba†{˜8~|yå¢Ń²Mł”²ØŃX _•!k’Ÿś—½Ń[šŹ:² ÷ 87g%ąßv’wIdµcĻ0Į©~ ŠŅŌ€¬«Aö"CĆ PZP>— Ňb(©]S‘Ā€Ź,ņƒŒ–ß©ĢÉīŪ)Y»-kuU-¼ēæXµm)Ė6æ”Węų9gŃŃ»“­ūÖg’Ŗ¼n{äŪōGz8ńгY¾åāIūŽyĒ]Ęó?Ģ}Ļż’Å–ÖĻĶ Śń¹vU¬Ģv\ųż—hG˜:J¤³¦Ńž©-€¬V0bF* ‰™Eh™ž'Ńu/]Ē0¬†”chZ*"€D5 „Ŗ ˜&¦7€½įщęqģE'µń×Eà ՟:£?=»·H)»ģėKš£æmcpČŚł?ē˜.>©»žvctŽõŒ|ģģ‰Ņi«Ļ$»āˆ'F‡æ `hhˆ7WæÉŅחņ̳ Yńę Ž:ņ(nłŃ-#®[Ńvź‘7YüÖwöŹSŒą¹?¬]Ń{įÜp¼e®.«ęź†6OJmXüaŖŠ_ hæÆÕ6t‘EÜHt`4"l]‹Ų÷,žńž¤ŖŒ’”łČEØgͧ}* -į^Ć@M&č¢ “1¼9”)`ZT²„d7įļÜ˹ćjÅ ēĪO–>U~˜ņ~t ÜųKėI¼äCpĮū!˜²XŠĆ箃hŌ*sŻ—†ė9"g?¹±&¹ćżārĢ??MŸĒĆ~½Į::ėōW {č ’ŽÖzˆ”Ź˜Ņ­X¦Hƾøˆ\ō1ī’ÓŻhšĘ…—\Ź_ļż£-߂#ޤ¹„•īż]LŸ9›`u Ū·YDaƾō—^ž_Lš<5“6¶}{÷øQĮ•!ŌDŌ?-Ń7*Rė7MÕ(D‚XĢü_Iq˜†TT¤4…aš(½ĘŠ¢ä}"›vå&9ėXč¬ČS,ļŪ䒟­C± }2©ÓŻ×GKŹŹ£0h.]ü“5.9€šģcAO?ŗaŠT_WÓp’N ;­W˜/Ŗ£ūü¹ą<Ģēź8 Ö B0q\;/ē9ē˜xaxN1„-Ą¢UĆqQ×~WÄņ­”ōļŪ Ą!e.D+ą1t#YŁ•®ė$qü?‹õ\(vTQšŹJ·Š€b‡Vņžyšļl 0܈L}ǁ’ģžhJsŌ[f(ŒRĮ‚[ !|$dĢr&5"µS˜±Hé—9-š_*Ću÷ķóĀYĻ9śTEå/Ļߞ—ÅėńsŌ““xdɽų<~¾ņ”śkøķįėčw3®i“ĒĢä‘ÅwŪŹĀœ¹ą#ܳš6–n|”(œµą|N˜ż^jõtõļåłU²tć¢ż±ė뜭ųļsīóZŗąßĶ=”žżł ĢÉÕČ5‹0E8Ģ ² 0õ ūæiZn¦ib&ØVUZD€¦4QQH’P|ō0Vc‡Ś€}5yLyī]½v—œg–÷pĖå9×½ģŒŅI2ɐ؊Ą-@¢ĀD…¼ IDAT)%[·meيe,_±‚7–æĮ†Šuqķć8óō3¹ö›×pāń'ŗvI(%ćėß3°-"¼Óćvõ=7o:L7żs é™+Q&!;‘X¢)±g5”ß«iÉŽdĀŪ—ĮĘ̚u'ēż(ßäŽwO$€-hĄ­kk_F›ęNUy瀒“8õ>MĀÆó—ibϱŗf _±ų”Ev’sż’³„փ UaÖ6ŪÖŞŪįĪė.į›J‘oōõ_³Ÿ·µĄU’5|~Ų ųó/Ė^tŽł?[nż®żüˆĆ¬Ť?Ÿż!!E”Wó³;XĖ®śŗk‰ÖŌ ›’;‰i"†BµÓŠ·`—?ßżæ|÷¦’įŲN" ņŹ Ļ³bŁė¶<ū˟ųÖwo ‹Ņ>~?»ł†Ģµx,Ę-?ü>ß¾ńGō÷öRW_Ļk‹_ęwŽ‘¹®ēÄTĢ%t#Ņō“Ē#‰ŗdLīóTŁæojöA±Ļˆ Ʉ”H] Ņę’BŖ†!D¼¾ĮŃü?²„Č@ž<Ūµ¤ĖųŽĘ·ś=ūŗhijr·c^Ąęn½gjĻYĒk·nć©W^¢'EøįÕ<;o.gŸx"UĖ{;hĘQĒ ¬²‘LNżŁą)ødē°N8tę ž½č»wPŪ<‘%w>±‹žŠ0P¢‰|»HŻłÄqßę„(ŠĀÜŁ³Ė*7TĮ7¤—p$‚¢((Š@UŌ@ˆ=˜ąßްGžsuI—ČWĒÕ·"W©Šśé„ĄņŠ„<Js#j] Fß Ś`ŻĮŒŗ!šhÉÜøæāĮO܌"L«ķ4`F=›IˆÓؖJpŅÆĢŽ•øøPFՏ,¾—76½H¤'ļŁ^0õ„Pxcć‹|ī}×QSUĻ­’¼†žˆÅ-rāœ÷Ņ=øM{ߏūČ WpʂóĒg~Ź›^—ńuŽœz2Æ®ū»{¶2sÜ|>uĘUL{¼ōŪTD†ā}vīRń>—=Ān€œ›JSy”žż0aF^!9µsõ e֟r0L#ć’o^tݰ"čĆ ĆQ TSÅ0LE"T‹Ą²?nV“Å:½=ĄŃ3źčģ³hU†)ŃTĮQÓkSļåŌy¬Ś¢µŽKkź|מ([:¢ĢTĶŚŽ˜VˌqvvÅxym…Öļŗ™ēnUJj«½t÷„čŒMčų4Æ«[KÜßæ¶ō5^Yü ĖV,głŹåō÷÷ć÷ū™7w'æēd®śź×9āš#ićjO®lńūšę’ÉNėL¦=¼ń¶i‘™‡ÅØ?L7«ęš¦6W"A©ĀXeHķ8!ĢõA­ēŚ1ž·žūļ3Nݐ^āÆJ"ӑv„šuėė{~ūź†Oßqé“+/…w7`1)øP(Ą ‘Ė“­kk—¢Lļį'šĀ%£ĶJD8ū>ŌÓGxÉf^¤¤gÄĒ7cPlĄ„āHK2åß<†ddĮ?æĢs‡OęšĻY#mū@‹”p又mķ Ēēc?ȎŗFöÖµ2X$”(Č“łæ£’æ0bŽI哉„¹īŖÆŠŠŲD,%ź@¬Õ±g×|żK4661Šß—č7¬]ƕ—]BSS3ż}$³vŁīŗ#åäóŸžx9*Z"< zŌ¬‰ĒL_0!c¦W˜yį’Č7’7MEÉ5’—”ŖŒ)Š4Max4"P•·Äœčī'ŁW€¬Åy^Š›IUöDŁÆ[Ī:pRĪ„~OW Åp ōģÉzikŪ!qō©OŸZg/,[Ęæ_}•š@3Ž=–Ś`€u[·óŅņåtöörł‡ĪCQ†+(걁łY'ŲŽ ’ žķ:Śq£ÓŲ¶N8ü0kõpߦ„t ü¬ŻęäĆxdqW•˾ĶK™>e*µ5n|Å,‰ •ž*# ģ Za1UE(ĀZ ~ Ž!ė‚ż<ė¤"PlÆÜ!­ų/Ōv”Ųh€‡ŖŻöÓaĄņõ±ė.<ŌÖf“x7z“¼0>ĒÕ€Wń ’„¢Z2­§åKč0Ģ„ÅéįqQ›b¹Ź•T'+C<cKĒ:Ē2'Ģ>“e›_āc§|1 ćmąß£y8vęé<æź±ŒūĪGNø‚3ęŸĒ’>żVl}Ģ8ĒĪ8{ŽŹkŸG/Æyš#§Ģg]M¤›'—=PTWēž”žm.”ŻłŗĆ;ī²ŽB÷Hč:Jh³¦Ž^ =ˆōƒ‘4PÓٜŗŠ0|6ĖÓ40¤‰)Sn¦ulš&ŠP؀³jz{€™ćƒ,^×Ļ‚)5\rJ~¾ŸGÉŪżoŖń äŒĮ š˜=”M¬ŁęøYuŒoöq’ Ī–ģAæJ(ZŽ÷¾6ą%ž4é 'ˆ'³ÆK…&õģ÷¹øÜłū;YńęJŽ9ś®śźU̟;óąu ×>āDx׏—¾MÖ_%½Š’X­)ŃÕ~-ō×z’ęÕ§M¾cŪ}«žņOæ:š£/yā­cj×P˜0PÓ-[k×ü¢£’š%÷Æ»»ö’Ł—ēMˆßMD€Å"Œš Ąh“ģہ˜²‡ =_Ķz„Ø ŹGOēĀM{čÜ·]Õ0‚*}õ^ā~‹”ļ@¦Eó }>ĢÖvb‘AzÆś_ž·­qGĢb”<ōŒüą.’=GĒK‡/ĄöšvŌ„»¾…”`ß’\1t­<[Ś”ōõö½.M“žīżEÆwļ}€Exz̬K šUÉ9ئå²ż’M)ÓјŲ’ĮŌ±±’K,󒁱m3łL|‘Ķv’ ĶĖ`ž· Ü }"‘`O­ĶM9 ߥŚo)šoŁ»»ŗųĻāÅLloē²s?DĄļĒĪ›ĻĀ%KXød ÆÆYƱóęŁA· 4gŠ\óó—kP¼OŁć*l’»±6(¶@1vL+ķmcŁłÖ³Ģ8Ž­SŁČå±%ū¹ņżćłŽ%SŲøgˆēWõŅÕ_Čr’x¤Ÿ®mĖ9ū‚–U®’ݤ¬(ląąąŠŖ¢Ŗ BQRV¤)Ą²ĮæČK;šą åŌč”FžóµÉjĒE?P‘+šŸU”ęQĖ6Tõhī¦~ššZf’)š/L JņO%"ī—CIÅ ę=¶#5-Ģ7ŻŻŪśŖ¹õįkč wg ,˜rĄ¬ż“ļÜEuļ~“š€ĆœDŚQ|ĢźVōĘ „ƒĶt|ā'ürŻvÜ9tæ ņŪŃųGzT^?[ƒµlmCGs ”ŗFk÷?×0ģ?i@EĮ•F[|g‹¢j2)ƒFRxu)mV’NǹāÄžoJĖü?Z_ēhŁāĄž_šæōĆv)uąÉ§8 Rք>ė`׎ŽĄn³ äęō„ŅąKV­ą¢÷¾—ŖųO_>óŲćh®Æē…7^GšfH’ĶN ŪŽ×r­ÜęĻ”vķģzįü§åĢ“Ndļ†Å tr°$”›ÜžÆüęń]¼µ=LĻ`y~ō…dŪŹ§0ō$gā>Z«”’h ‰x¼"«P(³óo-X÷IÅ~3…ŠŅ’š?’~:”ܑt&6“Uˆ¦•h4Õ]āO™) $"Ƥd˜Õ³żŒ³“+‘ŻįÉ*YGŁķøÉāŖ+eޤcQ„BŠWĶm_Kohæ­Ģ‰³Ļfå–ÅōGzRą’Cüī©ŚĄ?@MU=݃»Įž¹ų<ųźļ‹ź[“On†ÓÅø¹ņū/«į„æŪŅČÉA¤40 i-ŗ”cŗüõŌĪæƒ€4įh+‚dn\+·†0SĻ}R—ó’rdŁęai˜’-C̚ąģ |ŚüF^-3ģ WUŃMI8®cĆį9œ7ņ%į’ņ®ųO&“lÜ“‘’,|†‡{„ĒŒ×ßxXd“Ž"”öē·9;éœń_īf"]­ yk0”šļä’€2kw|4dŁŅ% ō÷f•‰!“ųõ„ōȔˇnŚĒ! žM™āHķ쨀“™’KE¢)įę–ń¦¦äE‰ˆlu 7ɟƒ:^/z)'v-M–&ōYéCĆ0ŁÕ±\@m®6€Q4ē‚„‡¢ŌVóAs*Os}~Ÿ—žP8“'‘LņÄ /p۟īeÅŗu¶ü9½Ķѱ^Ī:fēĻMĢn3»iē~8ä·Iį±;f Ēq8ė_¼=Q)ļ;Bö¬™īŻėøč¼•U.20P~cR •O3ŽDHčIĖ’_UQEdsO8=¹ļŃ»ü»žVd„WŌO 4’~*.wó³ÅķX.[éXź˜Ų,D–ŽžĘ.šG% Ü};yX¶Ųo—½)M­zœžĮN[œ0ū½ģéŁĘŒöyœ:ļ\~óÄ Ćą?G—%ž£>ŲÄĢq Üėš÷\;hģfģJ¶Sų/W”A—L‚1¶Ź2ėOķü§Ķū‹¹˜¦Åś/M ¦‰iźH™rØ@·hbäacqū"īPÜ ¦ŹžīŖŠą’SĒrß³”+ŗa`J‰aš…‹M$Źæ‰Ż=Ż|ék_ā=§æ‡ßżžw456qŻ7Æą‰Gg÷–]l[æ•7__Éķ·żŠ=ń8ßøöź²ŪɕoĖ,·yŪźVž]7}ļżž¢Įļß·ö‘q»¢Ēh/lūAĶm‹–̹ķß¾ł±ČĻ®}Ņx}ߥ“EH„¹5°ęōoœ4ńłRuDr±o!9Ž××A²#l]‹Ų½o«gDĆo«ų¼hxgüńqvtuÓ³³ƒH £1ˆīõ•æŖć†P×ķ’źAV1ŚĒ1ćtķJ ~ā‡üę+į¼o|ŒSü¾¢–ćLö÷Įå7}j1=š‡½^[Sąė˜CŲ×8†HuŠõßėrĆKńŅ9KĖŌé3x’¹¦Ŗ*@}C/<·Ū·„ŚœvÖŁyōq$q¶mŁĢ³’yšH8D äēO噧ž 5†Å41iČĢoVö+žO )tiˆt>ĖSŖŗ.”pSƒ#/ÄŠ¶œøµłsP „ĢįUē³3šŸNß¾s7Ó&2|=»¼Ó„Āą?W‘4PNź^ĶS4Ćį³g³`Ölīø’~öīßĻ„¶1<¶hįH„óĻ8“ćę/°Ļłl:fĆ!'ķĄ"w"»£¶¤LĮlšŸk óēVfs[(0v—~ō|–|ū»l\ņ sNž$ļFY½š.ʎićģSOu]FO&‰W`:™ˆĒóˆKŻHwoŖ¢ ŖŠžÓQræe€’Ā_Q ŪČAqvBīWą’%šU+Ņøuk &Ć©–)Z†2Č?oX]LoĘ£l)XĢ>€•€X»zn:d•Q„Źń³Ī ä¬#>ŹÆ’użp‡>ļģŚÄŽŽœ0ū,Öļ^įŗ¢—źO<öėīś\2ŁÅ}V{ mRž…ÉAäžĖ ĄL3üē»XīĆ!„éIqXŃLS¢JДҤxB|^ū{źQEž’’9Ē“°bĖ ūśŹŸŅ& ‰…,‚J÷9”»É5,Ūwlē#ŸĻėć׿ų5üĄ9÷€»žp{öģįˆGŠŚŅŹŽ÷&MšĢ™ļ?“kƾ†ö±ķ®ū–+Opf. @܃š%ķiŸŸwŹŗŸ.Żųń¾čԟ¬Ł{Ž××ģ=„ #3®Ćŗś[šˆ>ŻŲuå÷ŽŸ½Ģ‰łė `$ā</ [F+`¶ģہ84Ī…Š—) śƒ&ĒĢa⣋˜ ÓŁ¹‡¾ś&bžfLƏ¼eÄŃ ĢHVO­ŌŠŪ "Ņd_§ó×’āĮ%«éųŃēłĄÜi4”׫‘Éßb\u+”}żōx¼ģõU±5XƦęv¶µ£³q‘ŗ&Ėļ_Q‘Y0sų$fl¤Ÿó£Ž9Ž/ü÷Ֆ`0H$¢ŗŗ†ó>zńØ/H«£"/L–ł®Xģ’Ö|VJ„Ō„@ĀL¢H‰P@ÄkŖóü’eR'¶Ē¾‹‘õyœ/Ś“®«Ø(įĒ·Ō„Ž”„Ć„Ćaŗ{ūhnltįÆžczlŲ±ƒ}=½œrä Ł2÷4tÆ×3¬…hVœqüqÜżšĆŌ×ŌšÅ]Ā!cŪ‹ųŌggķĄ"ū¦—0é·å)”?g0‹ŽĪz„žĪ™1ƒcŽ8œ7Ÿ¹“)G|õAż|X¶­x’Īm+ųĪ׿ŽVĘīkØæońdK§‚żÉųW˜ĶĶmsyŸ•h‘L =9lņSj‘/īĻø˜9Ѳ£xŅn™’=hšeö/„Ä4M|źŪC}–»Ū_]„±pų>oö3r5?śŪ¶ŠźÅuT!šØ%ēe½”–"”ō¤;"@€/|õ‹ŒoĒż÷ŻOuŠNĆučœĆX³v ēžs®-}άŁųż~6mŽ4¢_Ž6CŠŗöĶcf<‡żūåšÖŸ8EW<^æ§æ«1°cļÜÉ÷ģ;“ķńģP€nä ĄU(Ą“ĒVŽ8ĪD õä† ¾‰neėZÄ[KQOóņµŅ¹ßŁāÕPĪ:ŽćXČÖĮ~:ö÷j‹LTczud1€ŃŸ“±$ĒAŲėCzUō7w?å+ģüźG9ćóē³ ­‘»cÕ&ä·~ÅŠ3KéWUz<^öųl«­e[c ;Ū&³æy,į`#Füēˆa Ł,hBļéėwł•_āęėÆcėęM¼ńŚā̵ń‡LdīüĆłā—f&L‹_zad ŗ©ė¤€|vųæōu‡š QQ1u)LC*RŖB1¤0u”H)E¤ŖŖŽōyĒęÖ5“sROM LÜĖž`8ČĮ0’w3”/\²§f›¶m§„©1s^Ąę^ąĻ<Ü)S²Z°›Ė'“I iāõx(ž"±!^|cأ씣.žĘ#ŸĄ@¹’öq-”?t•·@aĻ’•+.犯ƒåOÜĘ ßÄ»E’±0Ėū)‡ĪšÅ9g¹÷l3 ƒ” Ģų‘²²Ø@OŖŖ¢)*BS­ń·Ģ¬,)ü缋NϜ½¢ņ@qźæ¼7Ž!­Rš_Ī·¢Pځ’ÖY%`¹øYŠ„†"µ;( -¤2æ½i”į|:}yró”L*ÕVŽsPi;„;•csĒ~÷ŌĶ õ±uß:‡Jóė[¶ł%Ī?į3̟|,K7.*Ł^ĮÖŻ §«{TĀōæģv Ҳ0šr¦'µ^ŒF/Ź€‰fXÄ~Ć!Ó;’IL3å`¤ĆžILi-`šHÓ@J…ļ([HČ]ƒsŖ}z{×7Ni«ā¹7-tU\vf;w?³£’` ’@UU^ -28£Šš{ZŒ0žp·°fŻZV¾¹’ēž~6ü6ēPVÆy+/}ы‹ˆÅbL"¦NMÓhhjŹ€’\™2m:«ß\įj²4šbqC((ĀHŹįE3ėŲÉü?},¤†“¬ ©ˆHۘ™8¼ÆCŪRFMŸ“Ņ Ū„y“lž &ōūŗ» „U1²ŗģÉzśJCM]ŠG ;Ļp»ū-æĒĘŚ:»bYķģīÜĒĻļū3[vķää#āŠiÓxāÅŁÓŁ9\— Xg‹œ<Ł:fØį>e÷_dõ³Ø?>jĻk³lė„œ±?v,—|ų<6æž(;W?Ė»E–üY\–Ļæ‘ż†abźÉŒ{€iȔۀa™E ęĀĹ Œź4ÕŲQ³)%ž“’ć“Ōy3ǚ*2¦žļ?Ŗ™•[Cģ)0’Ą£ j«T<Ŗõ}+— ®»™ŽŽ½hšĘģYŽĮ¤8ģPĖ -¦iņ·’ʕ_ś<—\ō1&MœT–^ł"j;ā»yYŁ’ ĄD=ˆ'VßQżæ¶{Ė ½—ݼhčęk’™|ų§O­{ĒaŅŃĄÜp8¹PvŪz”ý”ķÜ9ń0čŚŃ0“Oƒ”ō;D‹ŖŖ†±Ó`÷zH8¼cĶćA(°'TÕ@ė!°c=¢Ą¤¹°w ÄJl°4Öį™?Łk¶³5:Ą®ĪśšĆ$<>dCŠŻj‘®!ŠmĻČĒŹŗƒ{€· ÓćAޛ̐Nj¬&¾Æ“pø‡¾ß¬ƒŁ“'ńģŅ„lŪ³‡)ćĒēå_ŗf5S'ŒĻ4˜ ”^k5?÷Š|āƒäšY³‰ÅćüņĻęs[Q< IDAT”…’įk—~ŹųĻ雰Ž|š½9#åģϟ®¢4˜/Ū:!k’ųɋ.äU«yõļ×Ó8nՍćx'ĖĘ%²uœ|éŠ+˜1uŖū‚R®„üŖ°\Gē>UEÓTTUAIń!lqŽŻ¼CnĄ®»LY 8õ_ŽļVų/ÓĀ!W9‘“ęŌJYżĢæD6ų‡ŹÜņØB3½óOįD‰«-„’xŚé~¹Č“{”Œµ¶"ŗøØ$ļ™+,ķ¹ņżßåęæ}…¤žµļ"¬ØĶKOØ@øÓ‚ķž}ž9n>ūzw2ķs¼ž–S;—*o§–?€+šļ敺␬„ś¬h¹~ģ«‘oöc˜ĆĢžv7€ō?3ė\ĻpČ4! ” j½ .Iļŗ™:073óÆŽž8I]rć'§ńč’.–mä…Õ}ÜōÉi,Y?ĄCÆX÷ó±%ū¹ā¬qØŖežēĆŗOœSWS8u®Żµķžgö²f§;k®žĮ(~JSµŸĒéŻ.młtÉx?aüt]gūŽķŽ`žŠ9‡ŃŁÕɳĻ?ĖŹ7WņÆ'gć¦\véeÜxż ī)!ćĒĪl›…" E¤°×«īnŻ=šžYQ£~FBf™Ņ3Ć4µ™1&•]W•Ä?|žŠ?'6Ætćņ?Ŗ²ˆƒ ą€,”ąH,ó’ī½(ŽFĪ.·­ł§Į’Ǭ€±Ó,žś“łłĘNƒ#φXö:lōĪ9ŗvZ µM0ļ“ü€)‡ĆŌĆaŪj—ŗMcāŖĶ“EĆ4…÷Ó‹©mĢēHKn€RāDXHT ØĘhG¼Śįk&ѳ‹š@/=Cżt¼²ž‹VЦ“ĪGū©GŅ6m5SŚńkA« ¢«†‘²?ŒÜс¹i'ś[[H.ZNd_/1E0$B?}Ż?]UUģ ֳ榕ž¦&B&bMõ$«‚˜ŠŠLJū“”Ų¢‡Ķ’_Å@ś=ŻŪ†ää(B©0ˆ ģܱ“N;ƒŸ[˜wmĖę\uŻõŌ74Šßw¢H3‹*ŖŠư¶ ų’›I© ŠTEš0mž/uEHi SJ5šē”DO?F8ź<Łt)Nóa'QŁńæ-šŸėǚ>Ū¹g/³¦O%XUeŸˆ’Įń ę³xÕ*\ø+/¼€ŗź ė& _[Ģņuė˜1i“ʍ³µ®=’ļÌmi Źļē3ēŸĻē'BSTü>Ö ŁJää)žøēŁ`>}ģ ęŻX'ŲnN=ŖŹ÷æqŸ¹źjžūƗ8ūK÷ā ŌńN”ŽMƱōįqüŃGsé”U628X‘Å‘‘L*»Ą¾®.4Oj÷_ÓPUÕŚõ’’Įߊœ:FŅOĒļqn+ „RŃnŸRw€¦xŃeĀŚõ‡! +),„JA 'kˆ²„`±¼A,»»z.*É{抷Ž…Ø©ŖćS§»Ÿ¹S ¬p‹œųY"±on­Œv ÷¹.ŠČgĻŗ–‡—ü‘ÅėŸ)ØŽ¤Ö™\pĀēŲ¹O­ų[©ŽT<¶N×s³ Ó@‰bs¾éć«1+ź‚iYęžY„€fźŸa Mk·ßéHÕ4‘©xL\‚ݧŽčĪK»éž-™c üųŪšj ݚ¦=²ø‹'_ļΜƒöļ'nĆļUˆ%ģ–]ׯćl}źV¤„®Ž‡4łh©õāó*Įn‰gΘÉŌ)Syą挫ÆÉ»>iāDjŖkøōņOŅŲŲČūĪ:›;~ńkshŁ:æ·qg čDŲž”޾rł­†é›a¢Ī”R4¦ĄÜ”(śzEM,÷zĀ{ˆw&M½nx¦čfÕYq#č뉓zƤ9§q0L°s7 -踌P*€M²œóō%UCz}˜ź’žV dĆįĮ½ō öÓ14@c€žĒt æŸæŽūnłÕüö?cŲ×G¢¶+Ń£C&Œ+š6¤”ø)ŁÓµ\’T•t€Ūtų?”R¦‰nnjGUó¶¢»öüAv3©%®Ū󎞥’ 0„ÉĘ-[8|īa 9|ŲlĄļ炳Īä/?ÉĻļū3³'OFUT6ģŲNxhˆIķćųųū?0Üŗ€p„ūžõ;;:˜5e Ÿx’9TUłm:¶46ŠpĒ_’J[s —}ųĆY)e€MĒbłsU¤ņ [śoÖhe5RüŪ(œĒ®ŽcZšłń·ÆįŖÜČóü2g~ī.4oÅkDzvÆcŃ=_cņ!‡pÓ5×õ»Ģ)%ƒ½½„3:HE!SmöōõąńūŠRVŠb™ż ŪżĘž,ŲŅņR+’N#‘“ž÷Ę;¤ż? ž ōSˆ4AŸ{)‡īYxŸ=ūZ¾qžOxīĶLj%‡8uī¹Ģ™pw/ü)±ÄP^Īķ’m¾č=WŅźbēžĶ\ōžĻÓXÓŹŖķKxużlł S§³7’XüūBUmĒ”›„ ¹¢ öę/h9ĘŁ™DŖf† P7,Ż4‡­Ņ&’¦Ž4½VX<3½(` ˜*mՒ}eßń¢’ öĪӒ žGCŗś¢HiŅōŠRćÅ« DĪGAõŹJ‰ć² "ĄÆæĖ?wē~ąƒyĄ^Įļīø“ö±ķ̘>£¬ß?·āӜ#8IsõF‰Š”čK^-ōūoĒĘS&Üŗi~ūż±@52żk›Mø>1ķśß¼¼ś—ŪzN{x°oĢ1µ r“#¼Żņ¶.¤Cöv"Ęū9‰ ¾ĮŁŅ۵͠y¬‡8[ĘĀŽĶŠčą^UŻ`ü¾}…ėž}¼µĄ°Æ ‚Ī cš|“$“4$‡Bx¢aāŌX÷£Ą…:Bó 5µŚŚN<ŁL²¾Žx2Ä`/݃!Ŗ#żŌÄ¢Ō$ćT'“T›:ĆĄÄ+AC¢  IU%®zˆj"^/_PUp š”š:¢ĮFb †·CQ‘Åwłm:!0¤§Šø)B«*_Ų¹}_łģe\~åłõļļåē·Ü̆,¦'{˜õkßā«W_Ēū>x·ßöĀ•t¹”x,l…ØĒ§„|U"n x­­}SŹĢ>z±šRHŐ]A1 !" 3œŚŠī“bĪę?XÅ'e‹eł@»¬Ņ~n’ƒķØģ ½-Ūwļaʔ)Tƒ9 ¹0€ĮģÉSøģ¼ńŲ /°rĆšźź8żŌÓ8~ž<+ŌZ*’¶={øļńŠrÖńĒóŽćOČų^g›Ž÷ņŪæ?@4ē}'½'4Ž]/góA°KöøŁŗ&rņd£}œsĮa³õ*œīģ9üąźoš½ŸÜĀ3w~–Ó?s¾`=ļéÜņĻßżUšźkłÅM7ZĻKØh÷_š&įĮĮŅd_WŗiRåŃŠ<Š¢¢ØÖs)`ų½uz‡H_ʁ¦N «(Ī}Īrr:`'€tšĮncŚŪЉœ|ö÷3ē„śiõ­¼yf9 āiņ?Sdp…#€“8}SņøH*^°Šż(·RæSe·3ü¬Žž?ūēÕ\tŅēłĢ{æ@$āŽēnåĶ/–Ŗ5ærEL>“O`{×®<ū»¬Ū½ĆŠłųÉ_AU4^Z;l&»«{ 7żż öļlÉžH.|bK.֎ī&ē„ˉÕČ}=¦Eh¦}šõ˜ŠD×õĢuišųĒĢ·śM¼ŠĀĄāo‹lß7@Ą§0¾±Šŗ*OÖ÷:ū9Y„…ļ@Bx<„_ģÓO=ē’ż<2ī‹v9ķ”ÓÜŖ_‘ØŠgVnZ±H7œTżµFf® ļPAu~™&ļf³¹z杝ƒó>ż‡µ÷“|żÄ÷wåęi$€·;`žĄAøu-bļ”CTc“—#ƒŻ ' ~ tg-Ļ(*Ō5ڗąčä—kj‡P$ Pįė,Ó’…÷–§¢Ą„Z6wŅ‹RėĒ£'‰8ĀėŅ `$RČ=@W*Hü˜Š† ¶cj‰ŗ^b1ŠPˆžŠ¾x_4ŽOįKÄń M7ŃH}æU CŠ—¤×GĀ ^å%Ø&į«!éõ£«14/&Čģųˆō €© lNe‚U§'€®h/KŁśQpą8G"‘0æ¾ķfĪžĆ·¾w#7}ē¶o6õŚŗy_’āgłČsćOnćź/_i1ĢŽ¶HIbh ęń‹7  xüjĢ“v °’æ”ŖB"%ĀLJE™TišŠ‚ńš`ž’æ4L¢{ó¾k”š`ä]*õÕHƒÅQtČŻ],zTфŽ:¤”¬Ż“™c_PĄę ä Pž>q"WźS D"(B”6ĢÖ/­XĮ“‹^ĄćÕųōyꊩSÉå‚īž~īüūDc1Ī?ó,VmŲȳ}KØ8ńš#iihpÖŁĒĪ ;£Möøä蘯'·łķc9zÖ 's47_w-ß’éĻų÷ŸāŌ+n§¶ydģĀ#•m+žäÕæ} ķķüźęŅÜŲXVyÓ4 Učf®4`׎=hšŠĒ£”jjj`8 ąü„Ņ ƒQ0-۟›¼œĄ”(Ī’xšļ¾Ÿ£ž³ŚT… EuÉy«Lļü§ŪL»dt‘¹£–Źč¦O ±¾.«…œ‰{v{ŁęÓBPW]ČÉŸŠ“<ōĢ3¬X架¦&.ūЇiil ü§;{ŗłŻß’Ę@8Œ¢(üė…ē™0f,†”³bĶZÆXÉ7.æœ1MĶ9Ŗ„ADž¢9:f‹­…ś”Ÿ?÷¢pŗ'8’|óļ«°µyĀŃGqŪ ?ąŪ?ś1OüübŽæšLZš>¶zœ×ż)^ż‡ĻĒ-׏šźüšH„$ŌׇYÉī?#0’7M::÷į­ņ”yzügØ­jąÆüŽ×>a»¶jǰŸė'Nł*ż»Yøźį‘ߣĀ'%“óņH‰īƬk±_k­æĄŌ- ™N³æ)ĶᨦÄ0R$€¦•.„ÉōF•-żĒ>ū­ķaĀŃņ#³ø‘­{1 “ÖZ“[«ś“"qi’„.(wT¤”¬Z½Š×—½A"gꌙœrŅ)hZžóĄĄņcüž7w1aü„²ŚÉœ4łśqĻ­śņĪByāQ„ÆŖ¼Ī„ÕµV™S'}+|ĪüoY/‘KΈ·[nĄ}(Ą»ŒF8‚ŲB­ĒŁŽ¤LéŻ 9Į!Ś,óždĀ}Öyö@ÓXŲž²€Ęv3 žś}eś4Õ0M‚ŗNU2‚G‰ŗs‚­„$ĶmÆj‚ō‚ičÓWeķ)¤‰÷„D1²ĢĶMc˜½ßT¬ōō¹Ŗ"Ą½iߢwKh*ÕEA¼B½Ż 5F¾°nĶj.łŌåEÆOž2õ€,Äś»“Š&Bæ²ß[«†Ń„ ¤ż’s˄ÒI‰’'„!Ó2EÉ{ߣ;;ÜĢ­ _*cR%e䟋ƒžÉķž)ysŻZN=īx„bÆ£słH,ŹžłOvwv2ĘL.|ߣų<^œĄ’Ž®.īüĒ߉ ŃŽŅŹūŽs‡MŸžŁ„ݶ{·’õ/<·d æ’Ć® ו7&9 …ūQ8?Ył‡“ÓĒŁōÜ>ek—:v³*Ģ»tžy³gs÷/o憟ŻĘ ÷}“«rō‡¾E ®ņČ åHĒę×XśĻ1еOģcüׄ—–µ»š]× õ÷W¤Cd`£‚Š]]ŅÄćŃ2Šj!rž…lł©#’"/§0N?+9ź8’ü78W©ŃūVøčgNŪ³Ÿ—½¬~–/åqh™R¦Y’dvO݊…S’ĖMróUįϊ]=•8܏ā•:µSŗ™Āķļó¬qó9vĘ<óęC¼øę‰‚mĶ™p$ĒĻ<‹^žMEż)[ŸļĀķØ!‡!ķäŽŅ”–€a|iŚ#d,RéŅōdLÓ@JZ¤- 鍗…+ „7”H k¶vS[åef{5cźüh¹Ź”D™@÷µ„Æńµ«’›’½÷Ž“£8ó’ßÕaĀĪlNŅjVBŹ  ’‰&ˆčˆ}ųߝƯŁ_ŪēÆóųĄ8'Ą 0Į #¢!rB9ģJŚ]mĪ“»ė÷GĻģ¤ž™Ż•н~߇«žź OUWW×ē©'4oĄėńŅ?ŠĻŒsgšū_żŽ ć'$å/..f\Ķ8¾ńķoņŪ_üfD¼–•LÆ’CEČXЉ Šā@p į)>ūģųWƒX5BłÕi÷°.‡å£æEGžĒ%6ŌŁćR,c°ž-­ßŠj™ t&ūE¤y—Ā{ė!ä?N'’ÓÄķ—8z{PĀ”t€ÓĄ•!Ż¢¬ŖEA¼ēŃ „d2Ļ1€s:hęĄĻhÓ˜²«” ^üĀѵ+ģoŃœŽź”ŹęBƗ¾¾Ģö“—Žžįmև¢pĄG8ģ 8 ”N‡Wmu+ŖC˜ŠČn’‘†ˆ…’“Ä`ų撢:»ö'SCeŸ†6{ü!2'må©Ą3 žķ@ЀήnNžjfBĶø„ņ"9_R{6"übõjNµ·sŲe\±ō‚d•kāą’Ä©SürõB!®¾ųb®XzŠ¢Fł“2ÕÕNą_?v­yž_®~‚OŻ~G|¼Sś˜ĢW&SĘ0՞0…Ēx²Hā+ł:sžä •›¶A,½²¼‚’ļ·yģ™gųŻ_ēŁżo1ó’{˜qŃ]8܅œź>u˜/żŒś/Q;®–ļ|ļ»,œ7oŲõõ“µåļÉ Ą4éAt’ś ƒź’ZB„@ "lÄvIs>šd³0¼ļąß/d­Hå%­Ź,żLćGŲō1žžK?ałVQÅb<‡9§%0–=1 €M™¬ą?ŹX,Óś{=ÉģåĄ_Žķˆō¤\(c;v“9N.ŻÅĖ?GCŪAžßō§Œ ;u7w^üY7ļįķżk³ņ’59Ēē<ä8¤Ü“ü¤“ēAó!Į¼ūF4:@Ģ@Ü)`,Mš2ŠśU2·N?‹½“e”cĶ=ųüafŒ+bīųbJ=:ŠbE‰©Ł'U^ß jų† ¦uø–•vķŽÅŖ»ncåe+y聇X0o>š¦ŃŲŌČWæöo|äå„ē×āp$ķŻ÷¹āŚ›®£·Æ—¢Ā¢a÷ß„VŌo䚿3Œ"t :JÄĻß{}~÷@ŻéžmHķUR¢ AäIM ¾1Ö½į—Ÿæņņ†a39LZĒéų¾ĄŒ¾ņ§įB@~ž’2PgsÜ©_ŒJĒX¦` WZßæ-¬ŚéPQk9.9h¦D—¦”„rū£ąl ”Ōų‡¢lę1ŅtL½€·„Ž@°éU™o<$ŗāźkٹmK†ötV\v9»wli3iäļ<VUz.„„°Tk+šØ~”āŌsE‘²’·ĘJJ„”Ŗ„Vė7"\P09µ-ŽjM“kzƒ1Dr†Ģé¹Gāšl’1ڽļįH$e²W³“ŌčśmŪ9ÕŽĪåē/µœż%’8GOžäg’Ć0łųoāŖe¦’XµonŁĢ‰S§˜<~‚µilΆĒdīHP$£īD¾Ä`éDą“ųOΟuģŅxL×NP5Żz+žōa–-\ĄĪµó×ļ\ÉÖ §µžŃ iš4ŲĄėææēžėZ­ē?śQūŁOGžƒ>ža•ķļķöé0āTK ŗĆęp é:šŖ (Š`gœ8ŸbI)Ų.-#(NHé?’ßO;pt&Į’Hś™Ę°éc<=µWCŁĢמVͱœ*Tˆ‚ 0µü “±$īģ+µIĪ›Lėwöģłµ“\ ævDzR††§ŒÉ¬ ³0–żŪ|ŻāQā)ēĻėÄĀ!čK>Š×]Ģ£oż$ŁK¼ܽā L؜:d;™męCŽŻó śvAék=–Ŗ, 4R„ńS3! )ĶhH@S‚ÄJ+uL,śß ’Ć“ķŪ)öčĢžPȤJ7.=ę08l÷CÆį?'Yż8óēĶć·æų ‹.TłW3Ž_>ü zz{ųė³O§•›=k6¦i²wߎÜŹ@Õ]“q¦Ō‡žr?|ūČåßz§mż©ŽłÆĀ[ ›i*"¼”ČŁņO…ζvŖ¾'MC=÷xļe›¾żĀ‰±²]ł- ³Ü?8Œåh“hŌ5V £L$œ»3Łläļ†ū«†Öć–‘¢ čŽjt6[żcT6ŗ[,‰W")*Ģŗ(Zpē°#A š ™!“Ø}?"dŗēĢtc4xÉGź0‘œ…DÜōØ][C¾Ī žņœ½«ĻĒžįÓģŽ¹Žžę·)S§óå/|€knø‰ń'qģš!„¢pÕµ×óö›ė’–”–±ź®žnināĶ×ÓB”IĮŽn łzŚęō؍ībµ[q(Eˆ$ū’ÄšRQ¦DEŌHŪš!EÕ#nWš±U ¹-ĮiXö FeĖck÷k噪˓y·K;}ą °ēĄĪ›={°-€Mc4~ļš Ksķ¢E £ÅŅ?ĪųżÓEUī½õ6&—Š™äūĘŪyg×NęLŹ•Ė.Lčc<&mōŪIn&” }K’Łó' jŅ0åą€ÄāéŚ cŖ«łĪæ}•#õ üqõj^{ćö¼ö[*'̦vÖ„Œ=ē|*&ĢF(¹©é‡ü}“ŁBÓ”œŲż =móŗ›U7ŽHaž^žSIJIW«#ĪŹŽĄi ĄŃ†z„¦āpč– €¦¢ŖŃ€v;SždÅ wģŽ«„t‘ž#ł‰Ū Ej[‰s+=-…—¤¶G±ŸiüdZķū™ ą‹aŖżę*8P„Дѣ˜ Óé†u55OÖ¤¬ß˜¾&9µ“} ņkĒśqžōK9gģ,žņĘĻ0„‘±’ ēpó²{Ųrų-žŚš+©š‡ŁæĶuUÓ¹döõ¬ŁņĶŻM¢™2f&ĶüĻołm=MI÷Οŗ’ESVšā¶Ēs{l™$%gf Ź@FI²€Øt!"zŠ/ć‘¢vżӌ‚|s0 ”¦Lö`š&Ŗ”  TAS?’ė"ģ8Ō†aŌÕ²pR1U…Žäµ.Aø“ÆÓ½PXątdGeRJĪ>ƶn·ŪĶ­7ŻĀš×pĒŖŪ“īm޲Ć0šŒšÜW8Ҷ²Ń®ėŗĻ)łš®ś_øžc÷.ŗōĄ××õ~©ūĖĒ> Ų’ó½7ŗ?Ż÷poWõģ¢Ņ–ĮAÉ5ąhŃ*`õ(׳¾…L”ŠDĀ)ńe̜'u6[ŽżZ[źżž>FUų»Z@wYžżz,’ަō:.Ųó¦uļŅ»a’;‡ž ‰"A‘aęxŖ=R*Ąéh/õ’AŹ1`.c¤ØHO >GĶż kuGįĒŻ‘’Œš IDATSK-§šyeķĪ™v.UÕcŲ»g?żń[‰ o­c©y1ckkAĀ#æś9;·Ē=éöõöšēß’:©Næ??›‰ŠßŻVUzō夷\kt•Ŗš3n’oJ)ŪˆŪ’H)… aBųŖŹĘ#DšõE 1:²o0’nå1ƒFc²„‚’äŹS¶Ó¹nč3lRs’±ÓÅ£ Ē™P3ŽŠņR!’ŪéõMWĖ”†ö<ÄҹńÓćŲĒō½#GųĆ³Ļąr8łŌm·S;¦:”3É`žxS3O½“–ŹŅR>tżƒ¶Ū¹’ä±KģGŅ_ķ°’鳓Iā+¤šh“?ķßÄ6ēŌMā[_ž÷Ż{/Ƽł&/½ń;×>Ģöæ?„¦;)®šDaå$¼„5hŽtg¦!ņ ŠŪVO_[=}]MHÓÄår³lŃB®¾ģÓ\°x1ŗƒ£įPO{;‘ažą÷vvĖi`ŒŽ8Uż×qč:Ŗ¦!TĖĮEJŲΤ±&eÅvļŠé’6oöi’Cō3ķ5ČÆŸ¹l܇«ō–ūś,P„‚™ j6X:*HÆ0Cķ™–ņœ³[µ³f¢F [– }>Śe”V!1‡¬ćõŻĻqØi7¾ģ>žĻķ?ć‰õæ`ė‘\Ć‚®jܽāó4wē„Of̧©:w-’<Ēxugņ©lQA)7-½‡#§örė²{™:v6¦”ģ¬ßȳ›~O gˆG›ł9ēÅHéļJ ęX7ņdĆ4ĆʘSĄ„°€ŅŒ™XŚ–‹%P„„ Jpė ‹«M64‹’5¦'Ūś9x²›ŚR‹§”0„ŗ—C¶&P*…rü]}åÕ|õk_%ąr„Ƽt%|ōOƒˆ£ĒŽń·5ćgæü ę-`ö¬Ł#āSz]ļC„üÉö­ |‘’Æ—9źļžņņŗļé"p,hø/LˆFøfĘ~ūō®G~šŠ{›ō-I  ˜‰Ē½Ö,Ļx’ż ˜÷f4C&’)é­ŗ–VĒķ’Œ°ņÆtlT0ömHÆ#čƒ#Q ļŽFK `Oīkr¼ž &)L¤Čs}9ŻÉPCi œ–6S„!9Ź&’¢ µr½t†»ĀūśŗŽ½ST9ķb‘ĆŠ‰DxwĆzŽŻ°Žö~wW/>’\Ęņ~æŸæ’홹O' t·0…aųōBµÉ[¬sWhķŗ[ ™RŠ˜ż"ÅĪ.Ćfų'Ś’›a)¬m¼ÆøČVJhlĮfwjK6ūß!2'ms“(ߍŖųÉņߊ'mLņŁŠGSÓ$Ūvļäņ‹W Ŗ"”ß"¹]‘ZŸu}ÉāÅ<ŽĄÓÆ¼Ā„š±ŌTV ņ¹c’~žüĀóxŻnžńö;SY‘Š™d0?ą÷ń»§ŸBQ>qĖ*Ü.÷Ą:ƒvB ćšŲ§ä‘±®ŸC h'$¶™ügΟZRR_ÖuYi ·Żx#·Żx#żżlŪ½‡=ūöŃpņ$ĒŽæĒ±Co30’üØŖŠĒ愦ŗšŁs§2yāåœ7g3§O–sæ”( Ņ?Lļż‘pxŲž’šOĀē °øŻ©£:t45Ŗ ®Eņ€‚ā„ōį€ā\ĄæSyÆŒ°ŸiĖk~żĢuC?l€¢@Ž$”h@ŲŅB[µM!²­Ś=žņ¤Žœ“#ųNSE%LÆĖšĶ!sŲöģ<ĘŸśgVĪ»‰_v‹§®ą/oż” cwå‚ŪS:ž=óÆffäöóī ²x,?zś_,„ZµģS8½ø¼²å)žxūgLŖšĪMK?ĮÆ’>?zęŸ †ķ52ŒNNū„LÉÖ „ß~mµ^äńÄśfō›Iac~b‚3&,–A¤„A *&KTš ŽöŽĘÄ:½4ą³a÷)ŠŻó'±hr e^Š¢Dm’³Mķģ‘r•GÆøx9«n¾•›oæ…{?y/sgĻ”¤ø„®ī.ŚŪŪŁ½g7===Ü|ū-=v”Ö¶VŠŠŠøåƒ·šÕżŹ(,”ŗl”#“œs³&BƦ‚§«ėØææ¢’#l8ś/Sd˜‰F;@.dØ…\ķó)[€le³åQdAF'żŻļ t6÷–«f“gŒ|-Ņš÷„ÕUØõ–ė'ŠĖōŽÄÓHŠ€’ µ»¤T†2¢išŠi %āõ¦Œ[róLk³’"sŅ67rŁ %7'ŅÓ„ĶŻ\7ōIŗ|6ō‰`>^ŗÆßĒīū™?kV ‰łÓĮ?B iŸŗåVŽ65ĘĮæ€-{öšųŚ)ņzłōķwRYZššćLKÓäĻ&8L—įń“ƍœ¾CY’F üŪōY‹§®@ °éຜŪ1„ĮĖ;ždē±Ü}Éēłśķ?ć™w~Ļś}/Ś~70¶tWĪ_Åk»ŸåxŪ”ŒMŌ–×qł¼[xeē_9Łq4鎼I˘_·ŒŻĒ7ńŪW@İv—]ĒŚiķiä«7?Č¢)Ėć³ JŚüΜ'=9~C ū‘0RKQ^¬õ e+fōDߔ¦Ó0‘†üŒAS‰s(å ‰ÄÄD ‹Ē©ō…"“Ž7×hY)1ymŪ 4a2£¦˜åē–3”܍®Ž.Ļį<Ģq?õÉOQZZŹ—’ķĖōõ'Ÿe±pĮB¦LžĢ®ŗš%‹–0göœQ¤ !KĘ}„ęķż’r"—ü¦©«JÄ6oeįīc]}ÓŖŽ8łMϊŚoüdżįÅĮŗ_«Jč©{–_Ūžæ%`F’¢µä{öō­aÆę¹‘Ūƒ st“|5wµ€»ČrX\ĒSüLt5Ƙɖo€pś³8som€Žv8ē<Ų·1?^;)‚°*;DtÓįe 8RŹ÷¤ß „2”ÉĒé`> ‘ęń.”;1›¢"…Dd-]>‡śėO¾>Š­zJĘTäŃō%O'¾ī֐¦‰NŻ£Ō{K“#Ž1z‡Ć)Ā(Hi"HY,cö’Ø*qū#"U‘`’o©.gZˆĶą©v¤‘0 3~‡¾Ÿœ9{&™£€4ó†>ĪLź†>=³Ķ†Žī*ė†>`&q ąH}=Օ•ŌTUe¤¬¦ėL›8i°®;·óŌĖÆP^\̧oæ“ŅāādÕūŠüĀ[o±æž+/fѬ9)Ą:Ī©žšģÓŌ7ž¤'ś‘Ī& Hļ‡HŖ3łYX’ųżx ’xL8"…Ē”Į: Ļ>'‹Ä¹2ōüōäåzuÄŌÓŽN8ߘKQ ś|ś‡Æ4×ÕŻM{g;ž¢Bt‡ŽC׊:JŌžŸ,ą?u<3‚‘9M¤’H~?mŲ’Ą>éÓo –€X™X“vckc¹K̬žzłŖŹŹųģ]J’‰łŻņŹĘ·©«ĻM+ÆLމ§“¹öķ·Ų}šĖ-ęüyómųJē1–žĘęwYæesņX'][’š¦ÉW~ō=~õÄcńŗ’Nģ:Īcü‘Äū–yģ»&RņdΟ\’ŁAžz‡·,™RŅ=L§1Śwč ŗĆ3zśÆ9ØŖŠšĆÉźü?£ą? k…Ķzd÷r§sHrń|֊÷üĆVČ'*‹ÕA“±S’XDģ·ĄfĘD3å”4tAŪ91Œv²õ9ļv’߈ź’qL¬šŹ¦CÆg«…1„ććŃZź“R²~ļ‹|ū‰Ļąśų÷UqÅü[P¢:”±‘ŽÓ°™ĒŽz˜P$³jźeso¤¶b2¾ł“4€Ół÷ąŅ ųķ«?“UńÆ)›ˆ¦źœź:aŪē4Ź6v‹„½4(>›5RČ*—åį_šH3źŻ?ę0öÆĮŒ†ŒŻ³4 L,§¦ibpśz\ +';(R‡ļWåtP0lšņÖćō „˜6Ęó+Y8¹„bn3lČvßĮą<×HŻ’ vļgķß^ä”ūäsŸž,W^~'L<ķąĄIiš‰k¦Ćä)UÆ=oJuŚżwŸŸzÆĄŪ%…bÖūĀU#…w+"r ¼ąČŹÆ_ęüųłcf ųÓK#Åą§U̵.Gęœ.äćldcv6AĶTłćcŌŻ .Æå0Õ< 5‚€&ĻĻ‡śF ? >”ą/Š ;KNŸH¦Óų³6@" @") Rx0ܕōŽćXA »ŗ®ļkoĢ¢ēqfÉ߯Ī@Ū‰°¢Š§»”g™ŗÆdœ~“°\ļŃ››¬“‡Ć ØihZŌū?ż7‰Dņ³„ōwhČĖ¤× OPL>ą?SŪ©Üǚ­µĀ®ķ<ū9šĻ™Ńˆų ¤~8”rżŻĖ'Ü?ńūרK|›ū_žsŁ9›NϹҺį½R9Óū ‘J«0×½MĖ„óip9˜4uv4Įģ‹­ˆ©dD, šs`óšÜꓼsVĄ‘mVŁč½£„…‚O…>‡ƒG!a§3B¤jÄčt„Œł04„@˜„aX>|bp,Qx &ų)Pµģ+ąū°ģ¢B[EA: ‰”L¤K„9`ščžĪ“Š-.®žPžkųÆÓBŅ¤Æ­I{;#BUz5—8ī)W÷”Ö8ÕŗŚŻ…JŠBJā€?C5"lJ!„*b>c×1ū)…xģ-C.-6{ଔ1kĀ sˆ€ŸCočS6ļ éĆngžĢČČĄ"šŒ§µ“·±ēĄ~fŸ{n µĶ" lø]NīŗęڬłĆįæ{ś)Ā”0÷®ŗboa ‰Ÿ¾wötóū§ŸĀ[ąį·ŽŽ¦j `ēž}<śüßčKp~÷Ģ+/±dĪ<ī¼ī ܖŅČsƾ‚‚%óę'𛬅jØ`ź¤I)ć,¤ń8ų7ńł‰„BYQ1/ox›g^y o‡ŪƹŽYēL#±~ŪÖmz—¦¶V¾üÉ{iļźfż¶-\²d).‡Ė†ĒX“֏Ćõ ؊Źä Ę)>Xńīf0H÷ÄēŸ6?Ņ„(YĘī,”®¶6ĀĮ<=ÉFIŽŠi @wOM-Ķx=8]N]CÕ4ĖńŸ¢¤«”ęš žMš®v8OP|ĮæŻĀ—ųI?Gžė4s8”a叚‰Hų(ŁŌ“KRĘęmß¼(łŃåP‰ķüŖŅō¤ŗ1ēRY4–g6ž.cͼŠ;––}'¶ń«µß×7/ū$SĘĢąOÆ?HC{:˜N’9Š…3®fźŲŁü|ķ'ǰ¾vч(.(ē/ż_L­¼˜ß€SŻ'Ųx`m¼ÆBpÓłŸą’Y׳ķč[¬Łö(+§ńO×|ŸG×’O깅vØÓĄ:ķń÷# R”ŗĒz,õ³’ī–€hTĆ“"ÄŅeŌóæ4„å@Z‚%ŖÖ"„D E*LöP~*ĄÖ¦8ōō5ć4‘/aū”6[ūSģdŽ„"VĢ(gęøBŠŻQ?-Q$¾†"ŖÕmŹē `V›·nᔟ>Äkė^Ć0 *+*™3{ Ļ[HEy^—Ī®N›łĮż€ßüī×<łŲ“Œ;6’Ę¢¤”„łø*`&ņõ#šZež°ż‰źƒ­×ü£i8ē"Ģ^·Žł—o\7öļ©ej“ĆęéęP§žą0V·°lž--¶øżæ‰‚©©ÓåØN­#Ųܞ±~›=pfŹü§Ü4l6łoč­‹Ō“÷üCĢĄvŠ )*,L·™ģł3ŲTĄ+€ś¦&ŽŽ¾)ćdzņü ’L"ˆ‚'žžĒ››łąW2}’%$ß°cO漖qÕÕ|öīPZT<Ųęķ×\Ļų±ćxjķīūī·Ń4Ó4Y8kN [pØž(jĘārøRų²ć1qÜDrÆÓĮæ½E&¾ĪźļīĘ7L»€®ÖÖ©žģxo7ŗ®[¶’Q MÓPU”ŠōqĖįü›ōΤ½(ń¹‚bĪ,ųöZ‘.ŅdļēĮ?0ü0y”Bz‹šS¤T˜Ć Ūy‘½žäG—Sy·c’ķ[g†fUQ4.Ÿw3[æĮ{Ē·$Ż›T5Kf]ǚmŃÜuܶ›+ēŻLMéDī’Ū—‰ Ŗ» ®˜{++f^ǟß|w½ Ąę#ėöņ”å_dbÅ4žßś'B‘@r…6”üGIõõIˆ"Ó£#ƒˆłD?Ҍ«ż†åŠ4M0cŃL+ €)Q•ŌPx*³ĘPīŃŲt|€S~Ūuś\tCū:9x¼‹§Ź¬ŚBO.fń”&UPąŌPÄšM~ņ”\}Äčæüßü÷’ÜϹÓĻå{ßž.—®ø”ŚqiŲ|::;øķ®Ūųęw¾Å/~ņóaó)u^r6#~ņŠļŖwµÜń)Æ}÷cs®M{~½nù=K’Аŗšæh –ö«÷Ļö=šŠ æoWgW3¢tlęÕqÆ5Ćß{’z_ S~™ˆ¬¬!ņĘŽ[±€ż^7ēęR–§;/% aõ X’Ū‘;ß#Y Joķ (½ŠJ‡ā «ŠĆ@y%‘X€Ń ō”D"ˆDYYĶ„e5ÜTįå:—N]¶śT]U(uź”–2»n W/Ÿŗ‚Ī#¼ż÷]¬}qļy zŹ{ +n¤īĄĢłŲ~)S€„ś¦«„@ŁdZ5H·†ĻßI_` „?x¤kbAYU©§¬ZSNƒY€4Mü½ųŗZMӈ„…*üš¦“9 Äт ż@q~¬“FoszŌ€āĄT¤yƒ©X _šq!ŠL0÷ŠHCXö’BȈ”IRé«*Ÿ`kgjßŽ-×MU*™2’žå}’v<ŽüĒ(1Xæé]V^tń }\øĶ`“F ˜õeĶ›opēµ×'Ūi§äß°m+wlgĮŒ™\¾t`Łč?¾ęyJ‹Šų܇>FIŖ€Į…ē-dŁ‚óŲ²gæ^ż8<ņkΚĖå\HŻųńńü Ģ·uuŅŻ×Ėā¹óS?xĢžSņ§R&ó‰LŚ g čnĻ,xĖFžž~ü#šśpŖµ…–¶6¼…ÖéæÓéD×uT]CQŠPÓ4NŅŽ”¤ī&K·ģr¼›'ż’ĄŽ$Ķ\\«f(›Gާ‰8?#ę·IĢ­Ÿvó/·ģłµ“\ ævlę (*ēM¹ˆmGÖ6ŅŃȕ nåƒK?ĘęCėųĆk`JėäJSÜqńghėiāżg–Ļŗ†ėŻĶ‚ŗe<öęO؟jćŸCMip’³_ĘL9ÓT»–žę®¼¼óIŪnVć īą½ĻÓŠvpšĪ˜’ń\³šN^Žõä ųŻĘ|`ĮĢ™x>s&.įėīēXėžŒ¼ę ž!ęp\ś1.ĢzŌ£æ1hóoDż†ŒŚ’ĒMŒĮß1ķĖŅ?ęĄ4ĶøONMP[ę¢ŲėąX›Ÿ­ żō„U y9ŃŠzB>_&P IDATŁĶ±Ę\…ÉUf÷²ø®„©c<”yutUA±knˆć~Įš#D"CVD/æś2<ōcųŃżÜ~ėķŁ åeå|ī3Ÿē+’ž•œņg&Q:wģžĒ’’ńō#œn«Ėū[ƹĮ0µŁvąßß_*š{?¤ŽńłóĻ’ŠŌI;"mmšŠĘ#Ot L^ū£7_}äKĖWfŌßT²dRž~޼]œVŹKšÓÅP{ĘŽJūó‡EÓłn.eŖ&B8#3‰u †`ķ;ō*‚.U„Å墳“æ§#Ūé¾!ƒ>_?źG¦±pīx>]č`9£ąÜŃć¤līd®Ÿ;™ė?¶œck·óäĻ^åuo1}ÅeŠ=„µK+ —śF+`& ”% i˜ŽB‚EShszv§ßß&ŗ‚ż”΁®“ŗZŖÜ…^wq©ęp{G¼¢‡ƒ=2Š×-ĮˆŖščÖ\¢ŁéQUj‡KĘ;OVh=īB%Ø(BZ!ż¬ņ2 ų”rŖf@Ų”IæckøŒ(i )…y½6_M+ą”mOcó¬#,ä,#’™RrŲŠŪ4Ķh€’Ų†Žē󱞯w¹ōĀ‹Š45”|Ą¦2œ ‚“ėĮ€€ƒõǘ>©ŽŖņņŒł;Ę/®”ŗ¼’ßųA”`H“Gžyšp$‡nø)žµ8ā•(B”3jg~ǵ7ŠÓßĒś-›)ōxØ?!}@…uś–żvšŸŖ8øńüń¤S®ā@1ń™ŽĪ¦l“(Š9ÕżH8L×½ž[š);¢§žųwø蚆µ’·™’¤Ģų“2uøķĮņEźź‘ž“Ī.šoĒdf†]ŚŠkÅHɈ ߯špN« vŪ )ĮĪ)yzß³4b7^9Ōa7ĘĆØfˆ r ˜9į< Ż%l:˜īż’ŚEwqķā»Xæ÷Eė§ j÷‚ėßMUÉ8xī«Ć~^Žń;ŽmąīåŸēs×~›Ķ‡×ńäŪæ“| ä2a¢óŖĻŸ~våüUŒ)Ļ=ū%Œį€ĄZūļ¼ųsōų:x~˟’ś|ՂŪččkeĶÖĒ“cģT×1"|ē©Ļ0Ņ…¶āķŲ~d3’āĻpW冣˜Qµ}K Nž 3 Dmž±œšŅĀRJd“õUØD® JT•ٵ^jJŌ·Ųs²Ÿę~Õ”QģuįŠsß“J }ZŚ}4¶ö2SäÖ8·ĘĖ“±ĢPÄäŹ*‹Ö©?CėrB¤ŖĖ%†ńĢ@įˆĄ”g_#žzś)VŻ|kĪą?F„%%£¢­WS~éć9˜='D¤«ZU#{ķī=ōÖ¾Ū ©ĪžUóō¼±e;_Ļ_0åo½bmņĻæxlÄ Ÿ&śš­<ņĒrT¾EĆ¢É3‘§0K«žįUž›1‘Ļz\v"?‹–\ š*ĒĆ”-ö&ļ'½ō.”¾ŗ5-ŗ‹o%åÜL‡JšX™0ÅBFˆ åŗiL¹°–’ćurńč÷Ä¢ź2ź>²’/]uw=ņ2æ}b#ļ–TÓ[Ā_ZAHQŠŠTUd¢mŖ#挂QАJ‰BMĒTTĀĪ1tKį@‘čė;E[ ‡f#`Lö÷Ÿėļ>UŖźnĆSØ; ŻķŠīČś€ŒpˆHĄGŠ×/þ~ŒHА`(*AEUzU‡hsø•ž"õ˜§J;Q\­µ”ėŽ%‚‚ÄęŌ?2”ĄØÓEEŖB ÕP‘)L)ÓD1 DÄķN{‡¤”„ŚÓ7©›ō\(cÖ!ź0£bü7ōÖEś†>½ķ\6ō¶ą?-Wr#ŁŪN®„«§›w·mį‚%ē£ÄŚČVsQ—ļģéAJÉä 2ę?ŃÜÄ/W’UÕø÷öŪÕńßx÷][N±tžfž35iü“ķī¦4ysó»”sÉłē£*7\z9į˜Q  ˜?ŅŠĄ“Ø©}?Ņū”<ąvŽžģxLÉo3žg E"‘9ż3£Nå0ĖĒ詑#ųü> ½ø]NĖž_×QŖP,õīٽCI?…MZ:(NŹiŠSņ֒ön’ūZ‘š'įĒØ m»”Ÿ9¬#”ČęF^±9"a( œ5)‡GֱɩF8[›ł)yÉ“KččmįČ©8¶Bpė²OréÜym׳üu㯓„.µ“Y9¹ēŽžŚ7˜ŽÖÓ̃Ļ³®åś%fŪį·ŲsĀŽ¬ ™ßĢóŖØ ”+ꯏė{žćxŠX™ g\Ķ伙üōÅ’Uć½ 3kńÜęß[š )szAŻEmyˆfĖ‘u6ƒdĒköī @„#‚TSĪ+« ¬±ŒŚō›Qū~3zŗthbÄ̤9˜OšM³ž—ƒĻF ÄŖ¢\Ŗ`L±ƒ²ŗJ7-=AźŪżnéįdæAČUSŠT”(ØŖ‚iš„#&”°/a &°6ž…±%ʕ1„Ŗ€sĘx[ģ¤Ä£ćvØ("Ŗ3EP—ičb‘R} Ž·;ķā=‰D$ŽNļ|>fΜ•=c ­yńļ\yŕy—K„ Ļ„ '€"ŒaˆŅŌō -_öųCUßré}÷ÆZr[« . 8ÓĪ,IVäĖø Ӈą[ghG5f"rģDĀĶ ōnŁĖC+ĪĆÖÖąÄ~(õ» éš™ą.wźóĮsoŠ£Ø“«M.7ĶÅeōU%ģńf?-Ļ ‘"a„ŪÄń„å|”²€{qf”ń«K÷„U|żņylłŹļųåń>N{éń”,.ĖĘG¹4ļƒŠFQ¦£ŠAQ±”Ņ;ŠBK_§8źeR8(jH°Źß(ńõµXFЦ;Ŗ¢9BB‰%e6 i†B2źƒŁD`(B„UMųQéuč¢S/P›…j£·\=Y\©µyK“>GĘ!ĢŌ”4õ’’1ū),€` ¤)…‚ĄÖæR"¤Āp»Ņ<«„;{5ü¤‹!(›Ż’u  1ją_ ™6œ ½M…)mŪl²lŅ„€¦–ŽŻŗ…„ 'Œe²W·=厲QV\‚¢(olJ`*Ę  ±µ…ŸžåĻC!ī¹ec+Ŗ@€?bĶ›ė(ōzøõŖkl@vB‹ö§žō-ß°yx‰ĖųYį,-€Y‹‰4Ą·zŸ>‰UcŹŅÜŠ|Äś’l¤G_Äßē£SspŅéāø§¶’¼EŁ!o.ą?ąGYVAķ¦ó?nŻ~|N' ēMgŃ’Ī“ļ?ĪÆ_Ü͆²:"śµ†Ŗ#5@*$`¶2Š‚T¤RDŠ”ŠHa„źó“ŹŽŽ.y"Ų-ŖĆ}²:ģc¬¦A±4„Ē4C.#t Ń(XPN¦¢*†"D… ¢ąWu„Oqˆ.§Kiu{•Vw™Žę,S»¼„jæĆ©].a ZHŠ$AžS#ÄH )"ŅR"¤bÕ1Q C©+ŗéŌ*R˄ڒƒŸˆ“‹!(ųŖč Ļ&&’DW 7ō éśNFiCŸÄEś-ūM–ųOų{²©‰­ŚvĶ_€JfšŸÉ¾=śÆ×ćįā…‹xcó&’ū®»ģ2¼.7aĆ`ż¶-<’ŚkĆ!V^°Œ…3gŽéėļ¼Ļļē¦+®ĀėvŪ‚ģxÆæ»UU¹xį’”yŒžŪļ ¹­•„óĪćk÷’„ ń·Ż™ü!^Wqg!^ńEŸŚĆ¾ĘķéĢ'5ŸēsNȦś1Sxup«ČpÜ£?fL Ąō `iČčļ„’h™ŲéōČ?~`.e”˜Wżd¦!ŠU(.Š)rkŌ”ø˜b˜ųC”ˆ$11L0b^ł‘(B (‡*p:TtEĮ”+ر3aĆLü£˜Ŗ",Ē„J|L<Ķ½—Ö‘c$€ģĪqiłä=ŸäɧŸä{?ü_üĀ}%RcS#[¶meÓęwyöoĻŃŃŁĮ“©Óøśś«iiµLä4Mc|m-u“&³`ž|fœ;3§ö5Ķ3.D8Ł„’8ūĀ’wsė› }‹^żŚ«5B˜žˆé¼P QZķŻwˬ1«“ĀōT‹&ü¶«±’ā{?ŗäÖõ91ō愆-X=ĢoĄPTVœ8 Æ…®gßąæ>v-æq:rĀÅgķ:Œłś:•f]§ĮUĄÉ²JŗjėxÓÕ’s„pŲ*ō”Ü5•óÖņU%M…åLRiEßł8’TżWĘżāe^ū8 Ń[ZAŠįĀČ&H¤Ń˜•t $…DSH‡*"…ce_ØGmķm3"²(ä%”Y SbĀ+ é1Ćøh¦“ĪrU…ˆ¢*A”TuŃÆ»DÆīQ»œ^„×éUś¼„jæ»Ph.%¬¹„a†„B ~V ݶ?½ĻqÆ’vdD Ā4QP¬0Žż%ec„Mą…D€H»‚FC2JaĀ8qʋŲmčÓp<=m+–ė†> ä\°ß¼g’)Õ?ަė,˜=‡˜ķl²I^°N„“uóåW"¼µu3wl£“ؘ€—ÓI0āœ‰“ųąŹ+‹˜†Įŗ-›p»\¬X“$µŃ“6[;:Ų{ų‹ęĢ„ø°0nØGJÉōÉS8r¢ž¶ĪŽx¾„všēēž¦µ£Ŗņ ę͘™Ēś łŃÆ~ĘŌIulڹ–övŖ+*©.Æ ß7Ąö½{0L“e ®£ž)¦I{SӈĄææÆ¾.»HÅłŃɦ&[Zšx ,šļvāt:ŠuMSjŌößīJś)lŅņ}‡ā ÉO,ü[É©¹’HÅGü¤Ÿ¶sōĮ?€aœršOjbŚ%`‹ŸmČn‚l2ä=¦y·c3ßR–L»”†ÖCœź>‰¦j|üņ/3æīž|ūW¼¾ūŁ“‚UÅ5\»č.Ž9ų*{OdˆUŠŽ"V̾ŽKgßHYa­=M¼¶ėiŽŽæ6»P&ĆĶXņ¢s.aÖųEüęÕļG ńĶؒZ;qćāņóµõōŗ)óVsĻe_FJÉļ^ūa–vŅ^œ¬}N̦śū±sJ/«\ȓĖ€)1¤aƒ'žƒš†5V4Ć2°|$ŲžGßÓ4QŌĢ®“dT¬õChŖJ®Zu zģH„„q`H"¦IȀ.ŸI·?D bŒXz¤Š"P‘ø5×„āÖ\š‚SWŠU®JTU±ĪF š³‹ņŒ#±ę™5Ü’ą,Z¶˜ēĪ ¤¤„ŽŽzūś8qāŃ}ŖŖŌŽ«eĪģ9ŌMŖ£nR“ėꨛ4™ńćkѵ|<†Y¤ G]zPG8ĆÉK“ÓŻ+?9’²’é½§o F¼‹Aø ŸS±ę¹O,łč);ŁÓ*^iyÕjO12¦VŠÕ(-’=ūƱj˜N›Ąŗa¬Ėc&"ÆYL¤·ļ²ūÕ­<ų„|õ,ŪߣRo?ņ§«éA”ES©wø9VTIsY-żÅDr ż7}(÷ĢąŅ95üTˆ³C(¢iØ_\ÅmÅ^Jæó8«ƒM“®ņ*F¾Žüģ(Ÿ€±¶Z ”8é5M˜¦WJaz •°³T –ķ‘€źõI—Ļ' dHøĀaé4 4E*Ŗ4QL@×0E1„&"ŖK =ŠßéÕüj–Ā,Ņ4Ćt „‰ R‚XØ>3zbƉciC­»aS )U!DŌ z-#А¦©H)D°ŠŽ`ØĶ>Ą”¤¢ž)ĻÅS. 3ŖóųO£Į¬‹‡E& ē/Č  ’A$ó)EpĖUW³rékjĔ댩ØäĒüŽ’Ā"žį–ŪQ£`ēĮżō š‹/I’Źg8¼±y#RJ.=YnŚ ĀL­›LÕī4µµ&ŒMüock ­–JKH ž°ēĄ~ö9⣇Ń5žÄ?²hĪüĮńźčīĀ0"6cwvPLķ?<µż ßo9żaاP(ĖŪp:øÜN\īŲéæMÓ¢'ŗ"MŅ zŹ 9bPœ|+^‹ķ«e’Ł‚±„ł“˜vց’Ó4UGdO^i漫Ė-›Ż:ž_„iIŁ9ļvlę[JBQA)3jēóÄś_ kī½ź?˜1~½łŽŽ·6­ "īZńyü”žŗį7Y›Bį—•9“ĪgĖį7Ųżīļpź.Ÿs w\üYęNZŹo_żĮp†°V:KÖT–|”õŲYæ!©Ą9cfńW|“G8ڲ—±%ćłÖæåT÷qŖ‹kih;Čo_ūe¢±“gh²yF"`ļą]T¹į„?zā-£źż1g–€Ė”–YĄ śæ“ę`(@@Jb±4ā¾āŽs%k݊žĢ åC26©ļ ŃŲ¦Ķgą ēņę…Q8„¤Ų©PķU)÷عu¼NmP( aÉNĆ“O(Ąļžš{¼¶ī5::;ŲųīFjĘÖ0¹®ŽysęqÓ Äś“™0~Ā 9įh‘ŖhiūŻPĖ~‰›X“!üßĖ«’ÜNL÷õ#šžPæŲ:Œrė@\ršBžq€ƒ 2é­Ož‰tƒ¹¹Pk]Ͻóc+˜»`*לQ&ó¤pī>Z4ĶĶį‚bŽWÖŠ5¾&~śŸs})Žƒ>”{¦sįģ~)ΐ½®$ā×p„A’ī歉|6ōń RÓŅ6)6„öóhC=Ć`ÉĀE("čˆd>†r XZ\lyŠžųܳōłųēŽC”×=pĮy Xƒ &‚łp8̆mŪØ3–i“&eĶė×Įścz<ŌTVQQVĮ{‡aD"hšžŌ§ķ{÷ąrŗ(.*¤µ³=ilbc·ķ½Ż€µ »zÅŹšoQEiéąXžuą?”­±qD'’į`ĪęęQ‰ó¼iėB‘0ŽB/.· —Ū‰# ž•Ø“*Ūw(éē(āä[ńZģ@ŻØ€’ŌJs\+RČ­Hm8ZĖiœŖ#ŅČĖ|ĄfNŚ=æņä%§vFa³?Ģ“ä…ē,Ē0 v{‡Ļ^óMĪ©™Å_Ą6Ą…3ÆfjĶlŽŲó<Įäą_vĶ_³šNęNZŹ£o>ČĘÆ Ž~ēĄ+\4ó¬Zö)īYł~¾ö?s^7Ū‰˜žū×ńŅ:wĶyw±÷äY÷߃wjJ'RURK{o3';Žfi'ķÅɝ±R>0MP’OåE„+®Ę³ēzś—±“CbDʄ2*@†Ō4Kˆ€LĆLaņ2÷A MIĔŌwŁ×¦¹/byŠŹ“L) %`@K"&–čT:)ó:šŗTŖ@(–A; }©éYśh¹‡¼hŁ…¬¼t%“ėź˜8a"Ē™ƒ* 途ؽšŗśÄ÷ĒŌVæÓ³¬ś‡¶vvßy„醾PõæJSLB¶ėj߯?uįU?™]ünb‘Üé ˆi§ čg¢Q¬„zfĪD.^A¤­‰®NżōIøļvJfMfŁ(51ŖdšššjüūėiU4t'ū=^WWsjü8¼Åł€’TņūPn›ŹœŁµüņL9ū}āz.9ŽŹĄŸ^ēay˜ģ,Æ% ł~†ŠLÓŅ€…ų‹ T¤@Ņ4‘:M‰„£ \ÓT‚©čŠ*ĄčŠ"…®[GņĀDčхŲL!§z²µ!ŅʘOEµ& 2”ī0h¢H!…évV§ÖīķĒ &H—ņł¦å}Ćüƒ "Ći;ķ4`RQŚÖßf“ęĄæMŪ6e.ĒO`˜K-A‹=ēÄóÄśE:ųOĶ?ļÜL?žŗŚń)ć*8rāe%%T•UD‹Ł  l޽‹æ›Æŗ*Īsķ„P8L}ć ęL?!UååH)iļīfLeeRŸvģŻĆōÉS“wtĘėŠ2cJÉö½{PĆ4˜>yJé|…hojˆ o ‡iAĀD:Z_ĻÉSĶx ,š_ą¶<’;hŗµ%Ń cŹ{˜ņāęŠI»5˜öŽŪŗ,ļŻĶÜ× »¹ŸĀ}®żĢu­8Ķą ¾G]#_€T‘łē‰É7²ŽĻ÷]7×,¾“·®N¶‰·”‰ÕS™<ę\Öķś[–SųĖĀĖ’©—°õČz>|é}L3“_æōvŪ`[g©·‚ž’Qś½¬˜}eŽ*ž²ž§ttŲ¶SVXÅónaż¾æ'+ąķ}/¢…Ū.üG¦›Ļž“Ū3ucČž“tŸ“Ķ,„ £/9„iSWM] YŪÉ›ģŽ©A’(ĮLwarr„Ūó1{~Ó“¼żĒLÆĶA±ė˜#@u$hɬ’@Ę“LrhĒYx–Ņz§µŲŽ¢'0ŹGVŖFÆ ;Ū “–^&kL(wQU䢊­āŠŌ”˜M5Ģ!`Ä=¤xĆu7äŌ…ÓBB‡—œ#Šżz÷k7÷†Ę~szÅźv÷°¦ć^ØģŪuą'Ī®’ žøäß±įõ҇>PšÄ¼µĄI «Q:öōųUĄźQŖė¬q£½ Ŗk‘³īķ¢ww€“?yź’cļ¼ĆķØźõ’Y3³ū>½¤$'•„½„* ˆ W”«æ«¢xE½ń6TÄĀPQ±!Ø `! JI „Ž{NrzŪg÷™Yæ?fļ}v™ŻNI‚×÷y’³gĶźÓÖū]ßĀż’y-wϜĢü£Żætüų"+7ЦŖģs8Ųāõ±­f,šé«ŸBĢėŹŻ“Žk„½.ćqÄÜZŖ5ń#EąłŒøó&.]拮 ‡0œŗāB֍!båų ä:˜&"é}ß”9,-”hiBŚoE!„ų˜(ÖX’ŅV‰ĆFņ𳓠ņMB1³…T= ‚4-€`i čVDEB „0ŽĘģ²ń®ŽņČæķ‚¶4Ų·cÄĢ(¶ ¬²ōƒéyō©#° 9=Ģț5”ܾ$~“>Ģ+Ė_å¬ÓNĆķöؐ‘ŁVņ€yĒG>ļų}Ķ&dŽČŻÕ¼“j·›Sē/ĢSž~ķ=t]יŃ<€Īī.Ę54¤ņƒģÜ·—ė//Ūv尿»+g~wļßK’@€…sęńÖ¦õÄā±Tć™ä?wś&¢įš°Bż.°óŠ!Ģa’xsŻZ\nKķßķó$l’]84U()gTłYÜHqāOĪ“`“V2łĻ÷«ģwE>Ā9„q–ś®Č3Ī‘ĘPIč„B&Ō„ó[Fg!ļŲs&µl$‹Õųė9qŚ,:n1æ]śCŽŽ½Ņ6æĒåć¶+¾†Ss±lĆ+”] żµ¹U20¦z¦€ ÖxŚ IDATµĶ<ņĀף“Ļ.\ŸUųg‰äO}šéćępĶćK×>ijƒ‚[ŸĻ¹§L?ümķļ²Ŗ¼÷_ݼ„»ŲŪ¾­čxJĮøšIĢžx2‡—ØįÜ9—³Æc;÷ƶ/§²v’ķž©,(‘\€Øu#…„f“œž!“D?‘&M¤‘$žI'Ę #@ĢA‚„V@^G€6ŻNf5MIgČ`ŁŽĮŃ s„Ø ¦źdWĄdOw?Óė¢LnšŠXéÄļÖpĖ“Ėź¤(nNVąE„ė‡6¼å{\sąĄA:;;ˆD£(Š`옱4OnFӆOCĀ;{ü-U»öż,7ĘuŃ0Āå±.WHÆ=Ē©F–Ģ’DŽŻĢc+’61«łŠ×ÕõŁ»/¬Ģ_‰ģ耒}m÷öīš”ēž°õ‡ß¾zÖĒ Km°9óv9&Pņ»|¤PŠŪśÉӑ‹Īǘ»ˆhóLŗU»¾ł;¾±b=njĘh ¾óBKߢUUŁćp°ÉćgSu{&L„sŹ,Ā•µåķžėi‚xģG}’Lī×TšFg# · õūŸā*eVēaĘu·ąļėĮašˆ¼Ŗ CזTE+ų)’iڦ"e¾œ’D¾”R)Õž<ߊdŲ? ÆR„— !%"é0źõVJUńdēw'B •²0(…ü—ųQĻ>ˆŹxnjž}NEdĀŽŽā‚^äō0‘Õ†ø¤V›ń »§›—-%¤śaG²3Ęl³#ŸKž›s9Dćń“<écüµūĄ~öjįŒ'įvŗ($pHĻŽ={˜Ł<4ŌZ€ŽžĪŒüė6oĀ4MN˜9›*%ķ]iseÕųÖ¦(Bpõ„—”Įźuk$Qéל°Ŗźļ·ˆū0ÉWK Ę0LRu™&Æ®XPnĻmŁž»\8Ц!T%±8Ģŗo³nŌ²ž”ğœ'Į&­,ņog‚”ē]‘óÄŚ¤ż³‘€xlhB£rv’sPÖ»?ωœ{£“zŅ“÷ä«O|’ÕŪ^įc—ŽĮGßužźœ>—‡ęā鏖@žKųö%pŹĢÅ(BalõDžė— ’’SfœĖÜɋxvÕ/č vńęĪe|õ÷Ÿ`ć¾7øžœOrŪå÷RW1&£į‰õÓččo”/˜ę»ĒęĘ*•üēł$§޵ą:žė}ßgśŲ9ō;Ų°‡ŗ÷ņŃ ļäś³nÅ©e…AĻŪNĪĆS³ ˆ†rÓ5Nˆ_Zv’f2¼_Z@3%th†å0!H ’żvŒ?łĢd]Ż4yż@˜g6 Œ:łO‡Ŗ*·› ķ1^ŪŽĶ––Śū£DōA'‡Ł(×¼L7†öžŲ¼u _ūę×øšŅ ™6k:g.>“÷^s%øń\óĮk9ū‚s8᤹Üń?_L9¦TŸ–õ*¤P*ļ°;·§cń}Ŗ0ÖÜ}ażcéé’>oŃė@ģĶżļ9±PŻ«÷WńnƒILžŽ<’JōPP ÖnZĻōę©LmšÄ©'žÄėk×0mb3—]pqŚ!VU RŅ×ÕE 7ļ†CIŠćqŗZZŠG`ē`õ›o XŖ’^Kõßćqćt¹P5 E õ’,[ڬµ¬g(ń'ēI°I-ņo×¹ģūÅ®•ŃyW9ņ/„²Ó(ļC,e¢ō±ŁĶI^ä{—Ļ^ ‰øć鏲fē2>}Å×øē†q×c% ¤Śé “sūO®!nŲŁņ}CŠ5 ģ<“‰CĶ{yāՇŲÕŗÅī €ß]ÉūĻų(Ū­Ļp 8éē—/}‡7w.åŹÓ>Œ!s߆O&Ė%$Ūœ4õ޽šzžYõ(/oücjīVl}žSg\Ąµg|œZ#?OA‡#įōĻŠµ.dOŠņg‘TļO~#į å0ĶW€IŅ  LxéOš¤ēĀŽ„”¢&’Ų¦}ąČ’lx}.śc:+võŅŠ3k¬ŸĘj>—Š2ĢMg]”³qŻŃŁĮé–üm ćĒē“SOćŗkÆgĆĘ n=ÄOž mķm¼õöZ~ž«ŸsÅUWš×?’•ŹŠŹ!÷Óļ_ģ,%ÆJtÜpĻÉNæ÷µ—¦ó‚‰+ĪĪ>·§o±p iŽŠ€£#®P&O·üĢ]DpŅ,Zż5l{z9}ļ ~ÜŚÅšc$• )aéō’~Ī½‡8 hlw8Yē©ąķŚF¶OœBėqsØi@÷U$T’ó±’ˆĒS]TNŖįŽrĖ~į°sø]š…{aÕ[0xo¾ø¾ņ}pjš£_ĆÆž,÷öųÕąó_‡H V¬±Ź×]ÄĢ'³ æ“ń‡©źķĀeˆR<ś›źŠVų#įSt(„=éD0Żf_*ˆl~;¤"¤AIļCž*”œ0€S EJ„a ō oŽś?@¼+æ§ŽFĮé_vØ™ķ‡ą@žmVō%Ū+§ 6§^ ×Yžś Öoژ"Öé&É|võÅČ?Ą%gƒ~ü»Ē ‚Ł‚ąon\Ϭ©ÓŪŠ˜iwŸĢ˜NØ}4„dēž=L™8Éņe ^æĒKGOWŖŻŠŁ°m+ ēĢu5µ€r0™§£§›ż‡Z8yī|šįk?HÓŲq<öǧø÷”ļq°õpö?j0L“ŽĆ‡‡Ožc1:GüoŪ¹ƒ}ąv»ńx=Ö?Ē ū§©ØŠ‚Ŗ(äŠÕ¬‡6÷.š %žä< 6i£IžķßYugŁļŠœVµĮŪtØ»’`ŻĒå@ kGt0ŽxāOö|żĘ”@ųģī•œ„Į§ęāüłļÅėņóņś?Yä?«L©ä放$±õąZ¾öū[ ’€÷ŸłQœ7/{0c6™cÓž7¹÷©[é fī„īkßΘź&Ŗ}u‰¶hå Įę@ —Ÿr›¬É ’I¬Śń"æ|å~fŽŸĻÉÓĪ-Š|ĪĆS%åIō1jė« QēNŁķ'ųI3Ķ, Ķ ™ō ¬M+ƐIŪRuÓź2„I_ÄäOŪ‚G•ü'įrjø++X³o€5ūśŁß¦?¤c˜öš„¢ £Ī®N®|’•lŻŗ…_?ś+Žxm5}’AžżĆ·pĘé§søµ•ŖŖ*ŖŖŖ˜9c&×]óžü‡?įr»yō¹.­ŗd €מæźŅuŁ=ÆtßśŅöÆU®éų„ē믵¼æ?2į‡n5š[.8s[v™æīūīb >«žÅ­Ćźč1„’wĻ2*Xt꣗Ÿ>ͳi­¬cė¶C<Ēų֟—³2-1mÄp łÕŸxųŒźģÖ46:ݬńVņvõX¶OžĪį9 Ō¦“’2‘Œķ ”\3‡[5["—ŪvY¦ æ ®ø>v4ÖĆōÉÖł??ų*\w<ōUxüYHVõŌsš•ŪįCWĆWo‡­»”{b‡†ųŅ͜0¹·“ĘŽ.¼>4ưjł5†ų+šo˜»ī„*<(Ch';`^¤ Ņ#˜–ÓAŌ„×’d)…‚@ )t·'÷¾‘’x_‰ų.č¹°Ķ“[ fF­mŁ śŒ 9…†½ aņŸM:²»œŽš”’-;¶±|åkDć1[2Ÿł[då±Ļ?½¹™{ļUh=Ģß’6æ~öiŽXæŽōĄomތ®ėœuŅɶ¾r’·ž¶“µ …9nŹŌŒ~5Ō×ŃŃŻ™źćÖ]»ˆD#,˜} hØ©ČȳvÓzK€ Āė㫟ż/.8ćl6nߏ}ė+üņæ#ē\‹#‰h$BūžżDCö»Q„"ÓŽŅ2,§éhmogķśuøÜ.<^7ŸÆĒrü§9(šfŵ"Æ#ČŌ’Y7jīs•–CęÄ1Bž³²ēČæ][Ćśś”x9qŗ²`”«ūx|ü4ųĖ‹Öļ½”ĀõÖŚæĻ:æaœ47‘ŒK£ŽÓ'CkŌ֔Ū8{>ugϼÕ{ččm£Æ®‘°Ļ’é°PXƒR4RyK$ ¾i"D"lžé7cĶF<Kīų°°ŪøW™'@Rh!)„č(7,ą #@!0$Š@šĀō8szYl±XĢīæĄ ē, B#Ž W™ ś|¤cōe‘’|m ›“ŒŽdõ?wœ‡Zó·<Ļ¢“Naü˜qdä“5ü/=OzGO_pÓ'7óŹŖ•lڵĆ4X4’ÄŌų6l߂¢(œ8;©'lŖuģŲkŁ’ĻhžšŃ—ĘŚ6ķŲ–JX»yn§‹ć§ĻDuI?Ż]©j×l\OÓŲqŒk›jĘķņšŃėnāā³ĻćOż–%ÆüƒÕė×ņŁ[>Ī“I“9ŅōöŅßÕ5ģ}ၺŪŪ­h#ŃÆĖW¾†ępąńzp{=x½^\§MÓPUĖ)Ō‘'’ö¤xōÉN§É7Ī‘#’G~ #@™÷Ÿ‰a :AD³ēZäŻN²»Ć@Ś<Ļm>…›/üĮH÷=y;‡ŗ÷„Ś©ņÖš³’ƒ-×ņņś?•Vuރüģ³Y©.‡‡ėĻł$ū:všuĻ”ŻNo°‹[ŸēĢYļāļėžĄ@ø÷°{ĪJĢl&Ģ;¢z4 ” ©ā†}ž²Ä¶ĻUNƒ™Ē”Hӛå°ŽPė'åōSb–½:é7ęŁO8˜ŽĢ¢Å Į@zwś"Kv„ˆŃ>~4!„ ±±’͇z1 EĄ¤:Q8B@”#£~įÅųō'>Euuuι‰M‰F£“µ·3vLfŖM›7Ł–)Bq4”“’ĪŖhŁĮ{~ńvūSM”jO»g㜺g¢^?²Ū&æ·¢S~bѼ Ćźä±K–+5ė·=¾<2ÆėĮ¬Ó1kĘ!½+jŃ÷æE¤§ƒŻO½ĀēVpÜ9'rņ)s˜:£‰JeĘ į(¼±™ų«k nŲE/’^E”CspPÓŲėń°Ļ_ˁś‰t44˜5ƒhu-†æ 3ޜ…C(ļ›Ļ͊’Wx•q='Lj ĆĬȚćĒ@{šĘŁŲ,ŚčvY~†ŠO^ͼe_f[/½mōyüÄuóēžˆ&Õ¶óŁ’ēT™µ“ßXWǵļ¾Ü֛ž@(„ÓįĄåp¦ņgv,Y¦o€{w£ĮŒ„Ąd¾†ŗ:Ö‰Äbxœ.ŽŽ²‘fĶĀ”i 5•UØŖB{W'‘h”-»vpŁłē̱‚ę¦IÜ}Ūēyyår~öäć|ż”ļņ­’ŗ+åpp“”Ēćō“µ će˜@ §‡žīīā^™KD$åÅeK‘ŠÜłO„žs&v’UUA™Ŗ’%“’Œ”“L9Fé¤ųH’’ał68ĘÉ? S L€aź–šÉŪ7Ķ:=ļšó]£āŁm“’ļj!øxĮÕ¼÷ō±qļüüļß! f“sŻ9æ[ö£b•B¾Ś—L}ßé7Så«įGĻ5åC”Üvžū÷œ>ė"Ī›s9yó1ūL„TZ OG’!Z{ösĘq³żŠŪ¶BĪSĪÄēŖ`ć\G‡£įōĻJ4”+Øqc*–Š”S?’d~0"@Źė摌Üł'üĖ“æ¤E€$S Ē%K¶…ˆÄ=ņŸ„"ćĒV±é@š¦ )0Qńąsgz”×°+Zž‹! Q_gƉ?nģ8šƒ¤Į`ūæ’^^ś2Ļ>łlIcĖU8Ź^œ;åžĄ¹SīYW,_`ė1šĒ—AÜms‰“śŸĒ¬@;ŒiF†æ†ČäzŒ-o;°‡ž`”(‡ž¶š]ASu%Ķó¦1uV3c&ŽĮ7¦§Ļcoī %tõa¶vaī<@lćnĀŪö2ÓPś•.U”UÕ8äöpĄėåPu-µčkžOČ_…ŃXįt?¼C<†ˆ†Qü\5”ņ³gĄKiįg·ģ‚9ĒYæ{śą••pmš‹ŒhN˜5xģ÷2¢8’jėż4ū9ŌßC{M §Š¼"fĆ@äuwŸŃ!šŲAˆŒ'bĀ“äm«ˆ ™ęy&9%2ĖŌ­:¤D`H” ŠUŅŖä„ŒŒ÷P’¦Óæ’3§%[”+2ŅG‚üŪ’į¬ĀG›ü—āŪ@JɎ];iļģąŌ…§P[[—U›Č)“NšS-„÷%‡ü[æėŖkŲ¹o/Ožķ9ŽsŽłų½¾TĒņE"Ą¶½{˜0v<^·;#c­µčķėe@ÓhļźāŹ‹.M͵¢(ŌVÕŠÓ×6l³LN>a~žqXæĻ?ćl*+*łö#ņä’?ń‰?Ģhc Æž®®ayłK=µ·½Š@ŁŃƒņ"®ė¼“ģ¢ń8^ÆĻ‹×ėÅćõąr;qhU±Āż„©ž—EžENN›ēØtRü/ņ?²ŠćGN@b¤ŽBˆä߆|רxöIųÜ|äāĻ3{āžYł ž¾öéAšhgĮ“3Y0ķL~łāw „3}uœ~ü…“tķeĒN2īb g·Ļ’9ęŽ¾VžņĘćģܝ·žbč õ°bė œ3ē2žśÖfÖ5/ž¹-tXߛĒ^}€O]ś5n8ū6žYż(ĮČąšaBķŽŚĒŲqx›¾™ÕNĪTÅī…<Ļ“”˜é•*> ƒ>i`ÉŻ~Ćņž/Iō-a õKBM€¤uĒ”šŹī0cHķ?4U”ql5ėōįqÜMUpkŠķK)ó¾Ėtœ%čWüń¬]÷6—æēņœsŖŖ2aĀŽ^·–®®NV½±šß=õ;ōøĪĆ<ÄÉ ‡ē_‘jŽä!ADŻąŠ—ĒĻ^ŪpOxQuØ\u˜šj#ę®ÖqV릣Ęķź]óķó'.øń±ąb†ēVM‰żź¾›Ü_֎†Äpž,ķ1$„ęģ:bć'alz‹čĮĶöŅī”%¦q ŹöW×3fŁZLØARYå£ŹēĮēóā ÅāˆH³«ŸX4†®¢¢@P( 8œōŖ*šF‡ÓE›ĒK»·š®†±ōOGØöxāUõֆķH°œ’Ż8‹SĶC)?k4ÖĀ7¶v÷—­²lżĮ2+æä\øć“łĖ—"į+ qŻ…Ģ|ųģźėå`½¾ t„ 9-€’ŪĶ“.ČUź7•š‹÷) MģœōŽH€A_’t‰HO5M©!@W„”¦0M”xM„­ų5Ž›‡xŒŠÓæĀu ’ˆPւ>«Ā¼Ä„Ōż1JžÓŃ××Ļ /’ƒiĶSY0!‡6XKF’ķHsZ_DzžĢü×\śŚ»:yžÕ„¼°|ßśĀŌ×ԐIžEŖRt÷öŠÕÓ͉gœ•H2Oc%ˆļé턽§ENœ5čpWA}m}„€57P[U͓ɓóĪC'ĻĻōÉSX³”ØŠ~XŠćqzŚŪ‰Ž€Ļ=§ūšaāéW† Ó0xåµåōƒx<ł÷ł}x|ƒv’šCE( åŲ ’¹t:™Ł&ͦD9ļŠʙU¤š»¢ŒqIÄ¢C/Ó’„‰™ćšOb­ŠĢ扌EgÉ&CN’Ll˜Ę\z'.§‡’żÓ]l9°6§Óǵg}Œm×±jŪKU4VOąƒēŽŹĻž~ū;våi§XgKDāē‹ėŸÉ—£D²lŻķėö®äÜ9—1¶f-]{ŠÖ‘æütī仞<7œóī¹ö§¬Ū»‚Ī@+cŖ›˜7étZ{÷ńĖ„÷g91Ģsįń <ˆ˜½–Øq"CQKĖ"0¹«o&ģ’ͤs愦€)i ‡,BŅ‘`*,  @JÉʶ(ū{pģźaĄēvŠļs³ž@€JÆ[Có;ђ& bšį-t] ƒ’Ž*?żUc˜8–pUzU-†«ét#³UžcZŚq²¢DC(Ój¹¤ō¹X|&¼ŗ f4Ću—ƒ+adßP ]ĆsZ=$\rcx’†Šµż“…c„&Ęh †‚xÆĒŪ×ć©1‡OźšGhŗīpˆ®h°²>Ų‰Ó‘źo¾‡&Iś5U-jޛА&ĢWLD±żE"Ņu¤.…Lų20ø×kūŌūm£Bž Ž“gCF0uPŽ‚>­D‘“¢ z›ŽMņo·M¶½{ļn·ę¤Ofā„&2Čŗo€œä'’Ér5•U|铷±Æå ]½½EÉ?Ąö}{˜Ł<-+4Ö[¦x]}}lޱ)'QUU•ŃƆšZ¶ģځ)%k7oäō I†¦Ėžļl47Mdē¾=„#ÉĪŻüųŸĻń˜ŸÄūĻśwÜ.æ~ł ²Ŗ( 7ķ}‡ØÆĖmW| ‡ębGĖzž¾öiĖ„`$Hl٤<_=ƒw{gĀy`­Æ!SPV;ł;–<ÓŚ{€ļžłs?a!s'ŸĘ“1³‰ÄĆ<õśxcēĖčiNųFÓć¾¢JŌ^ +Ŗ]˜#)‚OĀĮ_2ģŸa)­3aóOĀW€$±żošƒæE®Sʁ˜dMK~ Ē*ĘÕūŁ“#ČęCźü¼NŸKAĶŽś*š>+5ŅčæŻp+W­dłkĖy×ÅļŹ9’¹Ļ|ŽOņÓ?ėų”/ ‘‚j=~ TłŒP«0e\#¶C(FÆJ¼GqÄzDz®p·ĖÕÕ[£īī¹döƒ=“Xc$M|UH²üļ^ÜšLMO,±É“€5ejt1*€WJ{Ō‡¦fd“%ˆOėĀŲµŽŲĮ„öŃ{`mĮžH_<ˆ/Ŗć1cø„Ä)%@A"Š0U01”UŻ„=.‚>?‘źZ"ÕDĒO"VŪ€īÆÄtŗ‘n2¢ģõ˜eĖķssśP됾ż#ųćOsŸå©“aķFĖļŌpü#”‹“ĒėŅØ…© öā‹ ŠO]āń9J‚ŌXÄķģŻ;fn¬Ļ·0qĪ“ŗ˜(„’WzxWTyPu{žųŗŖ1·+›¢­© %„ü+łźRUĢØ!Õņ)`R”Rhb!„ŗĒ]kW\ļ ämrŌɿ͢:d†iG†üētØÄ}Éä?»/Y'‡dސ– H8²זŃŲŲČÉ';°)é IDATžLmM ä?½-;•Ń^¦=æš'L¤¹ibʵµ#’ĮŽ=–JėĢ)S³ŖŌUW£* =}=lڹ Ļ<'§õ5µōśŁ×rĄ@€“ē-LVMöLd#µab„U–BōuvŽˆg~)%ż]] 3T`6LĆ`éŹttu$Bż¹-ņļóāņøq:8EAQŌĮūć’’œē*«­#’6/”ģGø¬wENm‰£cüÄ£eźµf”œ(†“ņf ;%Č}G§~›¦¦Ń”9łĄ9’ĮYsŽÅ²KxņÕGrCś%®Ń¬‰'rś¬‹x굟ŠÕߖ‘圎ĶōqsŠ ŗŠF^Ūņ •ćX<ļ Nœz&÷?ó9BŃ"&:yÉįśLŗ¢ń,b›õ5VO 7”&ō°ir(ä?RJ6\Ćęƒk - 6k€Ü<ÅgVɞ§$Ŗ]ˆ¤ķ¾9øĖO¹_Ź`R+ i" µėĻ`$+]VˆIGTG“&Ō²ć`c«\Ōś8UŠ£„ē3R?‰š¦ń“‡É{~Ń)‹J«hHe9¼ēL’ēk˜vĪ"~ėšÄ‘žJäŃvš ˆó†°Ć_ GT`;ˆįYyX˜‘uÜԌ¤³f rŚ| O±Mk‰t¶č£õÄŃB‹GŠā14ÓD‘įp‚¢` 7Rsbø}ÄkżčõS1ŖȚ„}æŪƒt{‘‘Šš^‡ń<‚ƒx1ŁIĒÉqC­[˜0ž5Lo¶vżēoqŹŗj8į8xī%øüB+¼žQ5uĒćBœ1—ńĖ7Sį†qքˆ(~¤RĘ m«Rļ  ×¼ģ2ŻŪ&ž4už‡)ŹŠĶÓSLC™8‡:½“m3v»ü±k§õ½ācō(Š5%_4Mµõb˜×T !Č@Hi G =C7ś{)°YwēÆ)OřbHMh©|vKšāä?Į6iƒé„,čó“›zK%.vćĢéO.‰R„@Jk«££%/,aZóTęĻ›Ļė·%’ŁĪš 6ČōłŹü-²ņŗ Ū÷즮¦†ŗ¤¶@ŚųUU£¾¦–u[7Ó×ßĻĀŁ'- ØÆ«#óęŗµx=ę$"»#cń8ė¶n¦±®·3ŸūĶņDčļģ'ńh”īÖVōųČJ8 Ć`ékĖiėģĄķ±žł*üxN’\nwjē_Jš½vf=yIqZŗČ=(ś å'’6Oöؓ’2…9y %¾+Ž¢‘”›”č†QV4 )­R$LĖ‘“łŁ!NSz±*ŸxĻ]ŒÆĢ/’ń]Vn}Ѷ€œš‹Īū{ڶņŹś?gd©­hąŹÓn&źåĮēīaĒĪT;«·½Ä_ū—/ŗ‘ß½jć00«‚=¶ÉPhšź¦šĮs>Ķ÷’üßĒųmž£sē\Fo°‹Ć=ū‹WZ*ņŻö6yr“ ¹üvŠĪ¬u`#†T³āGU»»’DґߠĄdt€d(ĄœHIÕ’Ī’2§]aƒż½C÷·q“Qįu Um‡˜P榏«įt(6+ {”1tČ(䇠„PŖżīF%oĻŪŪhįņ HńŲz#jĘ Øo1sˆ~>S&ĆEC²” Ł ŌŌ!{ŗŠGˆw·†Ń"Ųo}³ā1„;† a¦āس&Żį¶Tū«*”p{ĢÅŠ5Äić™%°wVXRŗåŌÆ„b1+ōßįvųłwĄē’¹ >}üł–@wü껣+˜=…ź„먊F؈ ąŒÄQœ„;¼D„cėŒ3Ā]•7›ŗ6{¤ź5uujø×3µå-Ļ‡ŪŻśņŗiĒk›B-)H3o1ÄPõņ9 Ģ@䋠÷d.öJ!’%~Ō f.²Fa*µŠa’;¢o—6˜^Ź‚¾0łĻšæR‰‹Ż8sśc?N%ńD ¤dĒīlß¹ƒi“§²š¤“šłüĶļP/«­ģ’E:łĻ%mĮu—æ—`8D6łOfn¬«gĆö­ŌVUÓ<“’ä‘ņųŸo"Az3¢Ö™Pß7M3”Żo u>e µL©dFRņöażŲ²Y&ÆbŪ®6öt„WķÄēŅpjPŹEŌ ĮHšŅ¾¾>öķßǾżūhmk£½£}ū÷§Ņ>’ŸŸē–›?2Ōź•iÕWś·)ņŹK÷ÜSńfėu'„£•“uÕ]‡©jHi(Z¼£JmßrɼOnhö½2|õĄc#Bż®‰J€Ķ%æNŠ£n ²n ’nšWZwī@fżž"äL¤Õ@dĄśķö#]Ā,Æ?±b(3ŖĒ±J£Ÿiå—ĽĮ9‹ą“’6˜vßįé%pÓÕP_’Ą Ø L;h°ųtė_:īūāpz3ˆiMxMæĆ‰ą0tÓ“ųLz>SŚõĻ"°{ĒÄćZ?/Gųē@¢ÅĆŚym›jĪīŽå}aܼŽ_V7Ź3Ūc‚Ģ›Š,:F»9ͦG0A! C˜GMv^½/M­±”l,%_ Öa#H„£"—SŹ‚~Lf–¶KL·#.öIY½Ź"e‘S£MŠ3E@*,Ē\;vļ`ĒĪķ7ó8ęĻ?‘ŠŹŖä_ ֚޽ōülH¤gH%0söäßś=nĢ6lߏ‚9sSŖśéłj,E•Žī.nxļÕ9ÄJĮO~ūžž j&]˜Rrډ'qŁCw• ‡ ōō Łx”F½ķķ#¾ėŽDxiŁRśƒÜ^>æÆĻ‹×ļKxüwćp%Āż%Ōžó’ņ¤eąņHq©ä?;­ģg(£x9ļŠ>ņŽĄ2·ō 3>8'"wr¤ ¬6§sa“Įī¾śż«‰‡¹āŌW;‰'_}„@ø/U Y¦¹q&ēĻ/Ͻń‡»÷gTŗhębN˜|2æ_ž{Ū·Ū“1=Š#{W¹(JųČåɞľŽüā„ūłšŸēö+æĶO’ńMŚ{-ŠOšv7ž{»Ū6óŹĘæ å%d$ģrŽbåyŲOMVJ,Œé­ĢĢRåJ‘v;ū¤Tż5ĶÓeĀößXõÉDøK€(ģļ‡źž§Įļq jv·™Śč”¾ĀCÓČõŚ‘ ½Œ×Åź7V³mĒ6ZZZ8x؅ƒ-iii”µ­ŻFščŠ\wķu|żĖ_ēųćfŁŌX:j«¦Wp€²÷-Ūó®>}Ā' Óq֒;&t³Š¤.źCŌūłśK­µ’{Ÿ¹äŌV*Ū ĪȾˆÉÓs%& Ž;lIŹ5Ą“Ć­„wˆĄ¾a¾C*jķ'Ü ƒ¾3C‹ &L†‰|zę½6±įż.& §­„ÆĆ]·e¦Ķž ›·g¦57 §•ņ1eNÓďćÓcøā±ņ‚ż™ B-įż›T§…ŻĪŽ5³> ¹®bå@JŌXŲué¾7õ57#°Vu Ū^ŪķģKE ūÜéȎ  HSH)„PU:“ŠģR)€GŃ韯‰Ī%Ŕ² Ļ$ѧķŅÓK".YefІ҉‹Č©Ń¦?eŒS(H!Q¤eo"ЈĒu6mŁÄڵkiš0ÓN;ƒńMM%’L'ŁF¾é#N'p…Č?Bš”«>ĄW\v·ęhØ­å”ł Y0g.Ł8įøćłŅ­’Éėk׊ŽÕ‰‚y³f³hžBęĶ*_ž'H0Č@Oψ©śƒµ3čź²Āūš®?@o_/.[J\ćńx𤑯ϓRūהɿȟ6Rü…ü—l,{q$#ÖZ©X&ÉŻIĪ+£ųbĶ&C¾łŽéQžZžSŽÜ±Œ›Ī捻oųæõVo{9UFS5n<’6uļēł·~ŸQi…§ŠkĪśė÷®āåõŹŪšĢńsiėĶćŹĖvLʼnp©ŸÉõ{_ēžg?Ēæ_t_¼ślky›žp/Ķ3[=‘m-ėųŁ?¾™Gi2;ł;6”»łh8ż³«C‰Ū¼æ Ā­ õĮŻū  a€!”€„ŗæIB(©HÖ«®=ļ\Õ’l4Ōū8ŌŃGKw”Éõ:^·Š£_:¦™ņńY<ōæ¼ńęL˜0‰M™5s,¾€ ć'Š4~cĒŽ„ŗŖttt°nĆzžųŻÜń?wšĄw`ö¬ć‡<¾*’Ĝõo!|śåąw¢†÷F‡łc„»õ¦‰ž„o]5ķSmŒé5ĮņššŖ7gī™~QLƼóūĻÆmųĮ„Ž» ÕŪ¦!&AUž”∠FĀž’…2¬Ģ ” *‹ēĢ!,3€t•žŪįø)Ć©uųš{QM·aąŽEq‹”’·›Ę¾Q÷Ō»³éėŅP§©³Ć…©Ōõīó’O“ĒńĒÉ :%®Ŗ™ŌŽNś”’7@z)!u)¤”Š”)qŸ×ĄCfītęŲ3n’A.¼ņ)ÖNČ ’ó_ä?+5Ļ8–Ü^IØš8„”Xõ““ä7żŠ±c8󬳙2c†„bŸ¬5}é §7—Ļ7@VæDŚŁ$Os$„«¹Ś‡“ŪołxŽ]UEę7›¹Ē OyĒŠu‚żż„Ż—Rģķ%ŠŻm-4G‡ŪZYśŚ PĄćóXÄßēµŌž½ƒäß”Ŗ(źQ ’9œ{Ą.-ūŹĶœ[óŃ&’Cś" ĆD/g[. v;qóĖ8$¬tdŚó.ž’OĄPœžŁĶw6ö¶mēææKNŗ–ėĪł¶·¬§/ą’…×2¾v÷=u;ŗ”gTzĶY’·ĆĖSÆż4·­ÄAæž)cfńōʟŁvnhd9߁=Zŗ÷ņĶ?|š3f]Ā “Na|ķdZ{šÜ›æaŻŽ•©-6w%~›‹vg×0_ž‚YKQż·;Ÿ/œj…³[OžD$IJ`J™2 0å`4)…eóošˆt_ Įīžwžīćź|ģ9ŠĶĮī0Ż~źü‰p±E&=$”$×?äQœĪŅ“i*+*™6uW½÷}Üõ•»øįęxcłj“!Ś%;•Š’9Ō·Vķ¾,Ŗ{®W¹öāŪN]˜W8[Äō…‹NŽŽŃĮöļ,Ūæ-›ųŪ_m~ā{’6ūś«vß]÷Č攚”–%2ČÅgĮ·~·|ĄrŚńü2Ųŗ>÷ёźåŠą÷ LФÓˆį0 Ó@”§fĀń^ß¶ÉsöłŽ”¢jdj"„PĀ÷ūv¬3uüœĪļŌTŹ€é–RQÄ SČz“ę³÷OĀ2 °²$ Ęy źu稒čPźc›·‘­Ū¬½ó(åß@Ųg(Ÿ ‹üŪö¬ō}6łĻ¬HŲ=ņŸ„"Ź{ŖŠ"Lhiłķüö‰'hØ­åŅw]JcSnæo°F‘Öߌß%8Ģė`¹Ō¹“ FK„ZJI$$Ųß?¢jž‰Ź  tw—M¢ŹĮ¶;xsķZ4§Ē×ļĮēóįI§Ė…ĆåĄ”(e’’ÜēyH¤˜ģ¶’…ͳ˜·mūwŅȐ’|m—9ĪcüD#ĆfÅŹ†érŠö<į 5Į©ŚHLTw‚nč<·śq^\÷,јõ\«Ä%']ĖKėžČŽöLUǹ͋8eƹ¼øīY:śēż|]¼ąt#ĪźķÆdõ%ߐģnčÜ$槊éćęŠÖŪĀįž}yĒ•¼Ēbz”W6ž‰W6ę×T(’TųL)×'oŃ2.n)k€2ķž3’u{ .Yį@tÅ&r0$`Źī?AųMi…’“ƒį“ž’Y¤æ?* ĎłÜ’”Ė餽?J×@ŒIŗW‰Īu£4@©ä?×\u ?yō§8x)ĶĶCŖĆ!|%kcc/qjį?d“€Z Ū¦ĢĒ,|ń¾UrėÓg1›×‡ŌÉc’€ƒĆżōŲN; PJ§Ä½żšĀ2øö²Į“/ü?xśošĄ£ąrZ~vßČF© *‰fhŗ‰—3ŠĄ;rmt­~f°½ö^äˆXnŒŒøcž” õwə]ßō7ČĶQŠ ”@@¤„D@iJ” 0¤õW—А҆Ūk+ųЃɐ{åƎ@ŒŌƐ!#„Oõ ƒügŒłĻ&īö¤);m4É?¶iBQ@JEĮ Z¢BE–v€"čģéę±ßü†ÓžDSÓDŖ©ӀĖćIėW6łOļołĻʟ=„tĮ@~ņĻČBJĀ”‘ĀĮ ¦9ņ»6įś»ŗFÅĪ? Ż0xżÕģ;°§Ū…ŪćĘė÷āõY”žÜN· ‡Ó£ˆĶæżO;<Śäßī²!’é÷U2iČäßīyžē ’įŠšĢXbe;Œ„1¬ÉJū'žµµ+FbKōO“$’מż’č vń§UæĪČćvzłą¹·‰…Xņęoó^DZ59;^0īĶØ£(E-0ž§œĮM‹?ƒĖa½cWļx™'–=HÜČŚ½¦Ož’ó”DŹó%sŁŻłńØż‰J'Č ‰@)Æ’IGfš€¤I€™8ŸŠżŒ ­P€­ĮņŸDm•›žž 1‚QæSC) Žv$€ ć'šĶÆ}ƒŗŗ”2§źŖŒF.WIź÷АfY;/ģųAątśū‡ähšXĆ?… vvŻž»”-äXddÖ^ {”ä rš‹ĄüåÅL€ŖĀ5ļ±žKč„6zU(¾Ū|Nž¢ 3®ĶS†Śjæbh¢ĒQ„a8¦·lÆ’āX„óUcd·Ŗ·ōk¢ņ†dĀQ ”Ć@ †Ēi{ŪŁ!³QÖÕČ»J(^Ķ‰€ĄÆł22•EŠÓ҇² ĻKžóūQQņoÓJYć“U”¶~%5$(*§‚’4ŌMĆX$Ź«o¬ā„Ž^Ž›1“Žpū}ŌæŖ §Ė‰PՌŗS£Ļ üéƒN›Ÿ|¾’©éói7š!ĄˆĒ‰„ĆDC!"”ŠØ~)%į@€@OĻØ°ģż—­xP·×3Hž½^ĖŽßćĘérāp:ŠJ ’ŁÓüN#’9^N3EČ’pĘy “€Hxxö’å…41¤Ž’6Qepq%”ӎsP€,— ›ėōŲĖ’‹ß]™BĻśó¾Ón¦ŚWĒņĶĻŽdJ½¾ļ?ó£Dba–¼łDĮvrz\ ó3ĒĻć#}·v-ē™U2±~:7Ÿ;:wńņ†?Ŗµ`“y“KdĪCk§“1§ē)ÜNљ-ŚN>€Øp¦T÷MFė Ro&ŒŲͤǒ„P Eś“ƒ¦¤½äł;uÕ·÷Ó°¦_¦Āļ Ć”HłP[[ˇnüŠ0kqę˜TvF#Gߊ@“ńžŲüĖūƟż”6»ŚĀDŅĄŠ}÷x7ō\õP̵Ÿ]įÄTT¤/ļž“¦©€*č:ĀH hŗ¹)1Bįü čĶś»h嶈0Ī5˜©,Rœ–>”żPČæ]GJ"’„»q ’"u˜ØLi9ICE€ŖŖ(ŠĀʝŪiķhgŃBĖ#KĖöؚFEUU 8].4— §Ė ŠšŁĒtb_ügĪczOmØ_ÉŠćqbį0ŃH„h8<Ŗ„Ü4 śśöõa Č;÷ģaõ[kP×ėĮåõąMŲż»=<—Ķ””%®å?;łĻĪł/ņŸ€”DĀyvAK@“ĢēʐzŹö?y½)DŹļRB"¬Oī|ęÖi7瑇Xvõ·ŃÕߖQéŒń'pöœw‰‡ŁŽ²>oƋē^Įģ‰ y|éƒ Dś ·_ĀGNžj>tĮķģjŻĢ/_ž.RšōWsßӟ„£’PV"÷YvJ8ČHŹż<āäæ“F‹g‘ĀŠ‘j&}•Ī”?™į— 0Iś-Ӏ¬P€’„YĄ @`äüŖ ŌU:ŃTAG_ ĆYŅ]įuŽō†ā„bą(įĖlŒ°Å[?żč!^cŃh”…'.ä3ŸŗĘ†Ę!שj.©y?8ūźß’dŻ+WÆ?|ÓŅmmWü“ŅŪ²|zĶß¶ž:öē)žMśŹ_ōmŚqł¤@tāĐ^wIÜt])¤ģ˜XūŚū‡ÜĮc % ŗ;üFš9£żh÷c4pØĖå*˜¤PJi*: ś={ĒŽ‹¤ä‡>³fŸĄ5¼‘Æ~鿇ە~&§Ÿu.|ūތtÓpĪėÜY}µāč{²²JŠŌ<.}Ӑ.Iך:–ļ%@1“Ŗ—&†3WĄGĄČ³3ZąmoĒw‹}óž-pbĄčOż.‹g“Ķ““RōC%’ŁiG…üēłX'Ķ’!-ņļDQ„¢"„@U=>žåeN™w"MćĒcč:½]]ōöōąńzńUUįr»Q4§‡ę@u9ŃN4UIm÷å'’)¦;ÖT^„”č±±X =%‹‹FE"„Bżżeķ’ŃH„WWÆ¢µµ5”ņļĀķ¶lž=^Æ„ ąv”9h)o’Ć#’’"’Y•ćäˆDć˜Ć Ń|NŌņ@7bH‘xģ Ŗž' A^ŁžH’RØĀ”9¹qńmloY‰™¹ūŸÖLsćL®<ķƬ߻Š×¶<Ÿ‘§\R^å­%‡¹ińgP„Ā/^ŗ?eGŠŽ×’UĻŠī³Q!’Å2”Hž‹ē±ĻTÖ<$2+zCĶ\ö‰JgĀįßą.~2 õs0 LśH„žK…L’W'02ęŪÆjęwĖZ9ŲiIN˜ģē–K&šŸlKåłĄ9cŁŪfķ®Ÿ~ļ$Ką&ĮēRłŹ»F4ĄŒš0 „ BQ#ļņ0„ęXņ·%¼¶ņ5¾z÷WSŽŠÓqčš!®»éz~®øģ½x<žūės<’÷ēłėŸ– Y ¢–ģpråŠųgœ~ĶC’ž±h¬ź–ö@õ—ŚsX±’ö쬺*ō5Gß×.›ś±_Ļizņ˜ßūæųr łž)5,ķt ’[?$ę™m½ģ3±ür{[ “ĘCś³ ƒĻ‡Ś,Ÿ³¦Yē°ļL™hOG$ »÷CUL›ŪV0 ;÷BmL_Z’¶ķCG +*q‡‚ī#£GŌõęĢ/JS<u čQß»:v„÷:Ž‹­ņ9“ PBˆŒ¹0„,YBJ„åĀVaHajZŽIc RÉH‘;nQ¬13F̌įT\’"’9Mę!’…Ę)2į™[UB” „EUMAŃT¢į(+ßzƒq9łÄ…ø].0MĀ„МN¼x**2<ņ @Ń4ŌŌ?EQQ*é–C:P‡Œ§b.[;ģé’ ]GOü3GѹžōXŒŠĄ”@c”ÕüÓ±wß>VÆ]CÜ0pū®@œĘ*'«¶ś—‹é£‚PUā†I4n IŻĀ”œOž¶ķŪųĢ­·Łž{õµå<’÷ēłć“ϦČ?€Ēćįļæ–ß>ł»! !l÷d£„+^˜sÜ0ūż‡Ć^?2)Āó)÷N††|Ē|÷JB3‰+8 D4Då‘]¢iČg×ŅrĖEtyœŌ•Rfė.øčlųā­Öńͷö]pÜ4ėx {ĄÆæoÅš¼žÓpļCš‹ļZÄż×€§–Ąž»•Ś$ųķƒ–3ĮxŽ}3|ģzØH%īB–§Ü¬"u)d""sŅ÷™©©9/?ÓĪ[ty«“¢yņVW ōS=@½³>ķœ ¹HžŹ³Č?²ä?·sÅˆĖšÉ?eŽS±ś($hŠŠ™ŲAVTESQK ‰ņöę 8Ō¹óØ®J³$‘’X$B,”ƳĶéÄķõāņzq»Ż™*GĒ0¤if8 <’;żIč†Į¦-[Ų“u š&ˆ¾'įšĻć³žŗ].4§͑а@ e„ČæŻ3”o?LņŸŪ›TŃ'’yĘł'’‘ČŠ5L)‰—iJ7£  Hh Xü_"-¤v“—‡,—…2Čæ"Tn:’3“÷āł5æ`Ē” ,yó·|ōā;č“£(*5žz6x‹_æō}śBŻEŚ)Nž“X0õ,‚Ń«¶æČG.ü«¶æĢo–>U 4GŃä™óؓ’’Ś!ņŸu„nóžv© *)u™ˆ—œ‰oģ”zŗ5uļ@!DüKĄł"DB£»NpŗŃŪ{Y7¹‘óKɏĆ՗Ļ?v˜.8Ćś­(°h>„#ƒ»ö§ßūé`y!#Ń90s*““Į,æ%lšzĖ#’›vaź&ģńŌ4Bš“˜ęÄP äPœž“ošvµ4Ąģō3Ī>m[6rÉ{®`śĢY¼¹j%Kžō g»˜Å]B{k+æzōĀY±Į§NŸĮū®¹!~ölŪ¼)ćü™ēœĒ_Jww’ņQŗ»:Sē|>?¼łĘOhāõ×^Ķ8—Ҭ<-ŠŚ÷ŗÓc„]š˜.rüżKÓžÓ)ķv ˜ŖāBQr!źŁ%’ņ‚łĻ%Ō½?÷¬ ±'ą6‹w;RlSéŠÉæémņ_ā8ÓĒ“$Œ”ZUTE±Č„CEÕ44‡ƒŽ~ž_ö2MćƳš„yxÜīģŃc1b1z{Bąp¹pŗŻ8=\n·ep ĄŠubŃØå40FFźśĄĮƒ¬^ū‘H‡ÓÓåĀķu[„?”śļv’öĪ;N®«¼ūßsn™²³³]½YÅEīŲø€mŒM ¦š$ Ž„’„’@€bĄtœ`Š ˜bĄClƒ+¶Üd[Ŗ“«•VŚŽwvʽ÷œ÷;3;åĪĪĢīJZ+žé³š™ÓŸ[Ļļ9ĻyžvČńēo­&’phÉéŻ1oņ/ŠFSŠĻÉq­:ŸGłwwĢ¤Žż’®ČųN€~ԑܱ,ŗ§DÉg@ÖLB•£^łøģō?eeŪ:>’³ĄńfČį’ˆmū¶pچó‘vō<Ī®ƒOWk¹øń*9yķ9œ¹ńn¼ū <¼ė.~önŚāKĖĪ”×ō£(ł°’ZĪQ mŌWĘ’! ×qԄ鬕#śŹ'łag"G(ÜB°PĻ…©”‡aĀ–¤1j24įŠÕŸäņ3żu¾õĖ"ģīõē¤÷>=ʉkc¼ēź5Üš»$R‡ĘļV:ė‘ģ6‰ŚąyŌ2šÜ³ĻįW·’ŠW½ü•Eé×}ł:öķßĒ÷’ē{õ¶ķŲNkėÜÊ:œLŸnŽŁõ±U‰ÄņHZ›VažG4ā(;ߖ†V®r•Œ¬ģŲr’ߟyUߜŗHš¼`H™5<@ŁŽģ`˜~ōŽāīźįZĖ—@ø@ߍ@iÄ·Ā}ś ŠR ŻˆĒ`|²rū 0•moWœrB-£*ĘįHARJ¦¬‰H”Œ”õĶÅ Ćį„‘P&}cP¹3Ļ9—]v9O=ń?żŃM¼ū}¤¹„…µėÖó³ŻĢ/ŗ„w¼ūļųÆĻĪ8čkmkē-ļųn¾ńæ1-‹|üS|ųļßKϾnĪ=ļ…¼üO_ĖWÆūON:å4>öéĻń·ļxk~ßą‡>öÆ<ńŲ#ÜyĒķ\vÅU\tÉeō÷Īnƒ"¤“¦'ā—†'"1#¶D¦¢2¤€Pi”•«sŸR(„d&Ņxµy…µ’Z&Õrė ’ oGg°EØ,Æ2q”>ņ_·Éņ’ņAņ_š¦ńe™˜†DH”†a`™&¦iIgččē×wž–c7lāų›Š|BX0ęĒŠ6L˶1m;’iš&²Bó‚Öx9’Žƒ“uč&‡µ ÆæŸĒŸŚŹŠšVČ"ŅõWż#>łEB„#aģPŪŹ­ś›ų~žž'’ &ēQ@ž¦§ęē–‰·¼žÕōõś!znŗńæyÉWqĆׯąźW½†/żēgčŁ×ĶŽĪ=œż‚ó8į¤“ŁžŌ“,[±’†XŒ[nņµ™_’ŅųÆÆŻP“B6ž814ŗŖ”Õ³lĖ5bfŃ1Ńe6yYå“Ö/ūŻ‹DĻN~ ĄB‘’`N[µZ%ņŸĆ˜3Ī{Ésƒü—Žo¦ūņÜ#Nž³½ f" ³‘$†įa®eśŽę,ߥÉdŲ±ūYžéÜĶqė7r¦c1jXŻĻū(±²B`X–ŽŠ4‘ŅߊkSß̽9Ÿ3ßTž‡ö¼<é÷źŒg~8184ȓ۶q Æ˲ˆ6D°C6”°Oś#‘0”H„PŲʶ³įżL3ėL1ēįęxIņļ'eäæ|4Ļ LWrźZ#’uś»Čxé,łĻ]“!gĀęB–*˜łÆzb ņ„0øöEļe"9Ę/śnķmdĖĢ—”æņOŽBĎņż{¾ų,ZŅ“‚s»”Žų2'śxpēļž ą 9$ä!.śjsØNžėī§äł“ & efˆ|Įź~~…]džū%æśŸżg- 1ŪžŽiÖ-šģŲ÷ޤYŚb³ŗ=L÷@ń}}ē# M8üåKVńɛö,Ü@²p<…!$¦įGŖÅ€ēÕö¾}É„—qżu×ółė>Ļmæ¾ )%'×_w}™U@!®}ćµ5J ­EˆPĆæmü·^mČӚBc…é1RźÅĒ~t"Cß’ŌĒbŻcgĘGŅ',ŸH.»ŅёŬƒŸü‡+6maŃĒšńq’¦EsY f=’Oõ#öu"§&½é"“öóœōĢޘżĻ£sĪ!ĀQ’3Ō|ųĒoYčH^gc]½ _æŪ¶Y¹juŽąńG·p‰¾ąĢ³Ļå‰Ē)ź’įļ£cI@ų„RHÓvRѳ&‡Ņcqcڈ175Æ’ž^Ø|’?€J¦łÆŽKÅŹcĪ8KBKJŠU&’å]Fņ_+q©•ü~cĮČž’ģ*žę )іšI§!0 Ó41­ NĘWøi_°«s›ÖoąŲõ°ķš•ģyäBū=·]VǁރlŪ±“¾~,Ū"ųżB!Baµ? ū¶maf£)į‡gņłÖā!’ā9NžĖQAɱؔ5‰łDŠz)ĆīOĢ}AīŚØńU¾Ą’sž=š$};H;É|sļgöwUaҦ'sžń—sĖß`d²8‚³‚—œv WœńR™Fö²~Óf.=åÕüš¾Æšą3曵ŸY^GrmU«æŸKóēMžėź§¼p@,m?Gäµ(ļ§ņ+ž3aÅĢ Ó5EĄä¼“öō%yÉmÄĀ·mńw’wö%ٰ^”ļŗ.”PˆdVøŃ’=ūCCƒ““ś{³š[ZI&“l:īų|~8&÷÷Q“¶µ14PüāčļÆMh;nz<±4™4GŒŒv°Å¬–®öüėĮ×AxBg“šBŁįH`då ß\Č’¬Ø¦h˜%Ģ͆Æ3/żYČ5¢|čÉِŠ*V#’A .ł/KI†O.³¼ŠhįGš ӏP` ±,¬ŒC&k°ćŁgX·z Ē{Į»NžĻA)E׎½l{f'c昖E¤!‚mŪŲY² ēöųŪŲ!ĖöÆi˜éūd {ŹĪą‚’’™‡üWźūP’*Čž%’Ąōt­ęī?7ćŗyÅw­šf}} @R` f"Ō ēö¬Ø…ü—œ`„=nŪņƒźm×ŌOķäß2lŽxį{Ų;š ÷n潬ģ5罃 O|w=u+æŚņ]/ƒWŸżf^Į»Ų?“Ēß&PĖėvAHy„ä:Č-ÅŹé_µb^š4R„™•’±WŖh”@„TÖ9ąĢ6B‹FK‘tēļčv’`Šå-!RŽŹļėßŪļ+:ūf&چxʧaKb›¢ęU÷Z‘Īx(„[aKb ‘]Ø~bźńp$ dķ €¹ą-g]¶’“w„ļ˜Ü|-šńCŁ×į@Ż €×|ū:ōģE ö"ŗw#3ū‰-÷øzƒĮ%Ē ^hÄXUKė—ĄŁėIN%yj<Į–'÷óėGaw“‰ōŗUd–.ĒkiĒK%ŃįŗEĄ\Š¢Zq~ņ(Oæįb¶³œÓuŸ9ŒM@$R¼E ·ĄååŹ„šæ÷ÕŽ^×Aōī`Ü0±m#ŒĘšHFCxR¢ē² ŃŪžBŖ\¹ÕžŖ…+K$Š&øŽC8ėX”1§1犫‹µ˜O=ń8±Ę8=ū÷åMMNP+L+ښœR+’£^Ł¦¶–yĆ„Bc åź¢÷“Pž¢ (“%ŗ®Ÿź³‘Š–ŒZ®v™ņ¦ˆŌGžyAŁā“™Śó'’ADævņ?;q "’rV"’µČ™[ĀÓ V!õŒ5€iųÕ²p2fĘĀĶ88™ Ż{ŲÓ½—öÖ66®;†5«VUŒ÷{4cbb‚g÷ģaĻŽ.'ƒaYD¢X–咐]ķ÷æ[”–ķļń7MĆ0ż=˜B‚`įÉ?eYä.¤… ’A™Į÷fŠ=tØÉĄ³ā9Lž¦óŪ \ļź?€£3~$‘ÜŸš-|Ņļ’ŗsER^©Ń ó[½ć?9į2ǰ§o{åŠ5 žeg扖X;ßųķæ¢tńdę%§_ƅ'¾Œ[ž’»õ'łt„=~¹åFNYw./8önłcgi³åŻ×Ȝg'啒듹ź9Z(ņ_C©*ĢėBŔ¦Šō_eĆü! ”hfō9Ļ3h ię·ėOi2®bljĘ6½«/Éę5 ܽu$Ÿvķ‹—ćøš± gnņC.4ń›J2%±°AÄ61dł³¾Ü:,Ž„:“ €,,ķ‰#`'>;~ āš:OĪsŹ /b“įķFĘ÷qśrÉ»,ÉÕĀ Šü¹¤ rN<Ź9«;x×ÓģŲ7Ģ­·=Į­ūw3Öŗ„äźõd–,Ē…ł…®«±„ø­}$nü_žūŸ®å RpXfÖM0‚“! zza÷Ž™ü³Nž Į’öŠĶäń±oRš‰Møžx ćĶ¤Ķ(Jõ+”BøÉŠYõÕŖ;T5DJ‰ćų/—éD‚”Į¾ų’X7•L*«_Ē> )„rB“Ž®HBX¶tEƒDƒüÕ§]~t›ü[{Z(Ć ō”ŅĮ“¾rbX EžkxæŒ;cčxä?¹”ļ9OžKdšł/H“BųŹ™«*‘ŅB{ CY§~nĘĀqœŒ“qp‡±© zü}r+ėV­fݚ5“Ķƃļsétšīżūٳ·“”įa¤a`Z&‘X¶eb…|²ļļ÷·}ē~!˲0Mi™†D ™õ¦žŪ[ .ŠĪg=ä?€čĻ‹üWśö<ł?,HĢÓ`½ū’•öšš}hüg…Č*ņDzō“ŅćNEbXXįp€å-køö¢÷p϶۹õ”ļd· TÉ&ÆY²‘Ÿņ ~żčĶōŽ/lX¶™«Ļŗ–G;ļ-"’9(­č–(µ0ēZŽ]`µ&’µuZs™ gx&Sy­Š¢dz6Šöņū[`ę…R…Źo r Ž°f×Å-ōwÄ)X͟Lŗ|ī–½tXüš}œŗ¾‘¦“[’8ĄĪż p`$AÄ6hŽZ4„Œ¬ā¹6ø‹Ć·neŌ± ^<6q}Óc_¹ĘSöĖĆ””·Ŗ~'ąL T'[ˆž½ˆī§‘+žāģ˜ę#¦É„,Ą3©"eóIQ6o\Ā_ķ:ȏ~ś7 `dÉJ¦VÆ'ÓԊ×Ų„bĪšje”CTS+©Ÿ?Ę£/=“ߟ»¹¶ˆó…”šŖ—Ą‡’Ī=ī߯øl&ß0ąķo„w|®¹ ząMƄeīųī{õżß0jZ Zazšˆ·3‹āTŠ ŒŁĻ„ņŚ1g5’Ÿ šššĖ~OŒū>AFF†ikÆčoń±Qā%õ›[Zźź_]‘kuź@¤A§‹±­•?ÓmÉ2€Öą,'˜”Ļ~+jņ€g”Õ‘5C ž‘’šM–)ł/Ć!$’¹’¹•<­ĮžžH-|‹CK<Ļ'¹¦kce<ĒĮq܌C&ćą:.{zŗyvļ¢v˜Õ«V±võZ[Zō}¤J§Ł ‡½Żūč@0Lƒp$‚e[ł?Ÿģ[Ų¶•ū“föųKÓ@Šs "łöįP$Ȑ£ŹēÉ’aėx8é<[Ķ‚TŻ“ł}’žgn»P¶€,=‡s ’µ F"\K;?{šŪ<Łõ oŗų½œ²īÜtϗٶļњ›6 “7^ų^zGöóŪ'n)*g›!žģEļgh²Ÿ›ļ¹¾ā0ā‘fFåÅ łÆV R>{™ąBużZÉŹ+sr%ĀFŽ‰ßŒ€¬‡’,©'g꯳!}Ż@¾^ö'B:ĀžJĖB¬yšę棄ą§ÅCό—•[H Ž'i›“5Ś4„ Œ¬ß™ZPź4|±ACØZ™tŠ Ÿ»2ō½§nłZęOƆ0¢d.­…„„l՞XƒaĖL~õƒl¾u®c<xt®•‹FP Ż»;‘ę#“mœąŸm“·Ā\#Č׆pˆö“į]ė–šŠ?<Ķ—x‚ߏ 0ŗn‰öcp¢ĖQĶõ[85ų0-ō²Õdʆ˜üČ |ó–įĢęFšJĖ-i‡ųėā“«.Āh[Ÿś*Ї½ģÅÅłĶqųš{f~’Ż_½Ćč8üŪżmńۊk^'OOö®;‚æž )µl4Äčincø±…”Żˆ'¹=KSC-­ZĖ7»Y·~MĶ͌gƘm>ł¶?żąo'˜œ˜ą˜ éŚ³»¬īĪķOóŚ7żyQډ'ŸJ¦SKĆjtRŖ5™š¢amNŚJ(1Ė1ņĶ’”XhĆ(SØ“SöęŖ‹üM°kBŁl½¦ā o G9Ų² $k%ņ“ēō( ’åDźŠ’’ĀY°¬'Rƒ©1 ĆTŲ–‰ėXX®‹ėø„×½ēųæ]Ēa÷Ž.žŁ½ Ū²Y¾d)Ė—/gÅŅ„eÖ2‹Zk††‡č9xƒ½} śÄŻ4…ķ¬£D˲°B¾#æ¼Ą¶°,ƶ± Ć'ž†ōIæYŸ|h棐ü ®Œüōņ<łÆŒD"5/āzN”1Ó^Ņ?¦ŁØZ$9å`öZÉE €.øÓæ ×Oļ˜\±=}ŪłŌßĆg¾žw¼ō£<¶ē>n¹’›L„Ė·ļ•ös驯feėZ>÷óą•˜”_vŚkh-įæ~ł¤œā((9Dģ(k—Ė“[žXÖĻe§]CŲ óĖGæ[’,OUT¬ZĒ QĖą08ż Lö0ŠĀ·£lA:ĘP„5JłÄŽ0|ė,ņ–3&’ "küŸ÷ ±LMGD3< "ĄtŚaj:Ć1­qŚb6QŪ@ŠŚ"x‡ÅzīŌn–cJ¢ĘžfiØIł‡¤ ©&Oh5i‡R=mö#OüŁŁW÷64”+EķE“,_Äū$ °ØŻ»;G¶īāÅÉ·…I°ŻŌ!Bc+_vŸŽø‚;¾ū[¾<9ČĮ%£Œ­?ƒ$ųĪģbį…=Ń9+€ęv’Ctę&¾ųÉæä#¦Q¼ dƉĒ×]Yā{ī“ͳēŪ6œ\Іpį¹3æc>¾Žßą’UĀßż'靯 [6Ćö5¶Š×¼„‰xŒL„Õ’R(Æųi¤bj0~L-uėÅŽĪŻ¼õƗ>’YLĆäuמßøžŗ|ž-7}·½ė½|źŸ?L"1ņMĒ291Į@;¶=͊•«|„ĮSOrŅ)§±dŁ2zö후Ēb†ö¦U³7­¢xŗ†ķŚÕeOk Š%ę’s!’³"°Lšd¾¦64Œ:#, eoó$’åżUpų”üŹ™µL÷'B†ĄČD+‰a˜ž…ēz(ĻÅĶŲ8®Ož]ĒĆsܬ‚ g —īƒ=(„ˆĒého§£µ„Äbsڹµąp]—Į”!śbpd×u0²a #‘°ļ1ėĮ¶üm¦mū«’VÖ Ą40l 3[O†`ų®-óįŌ²żĪ…ü]@‹ü—š’’*rÖļŲšč%’S“óۈ<Ŗū@ZMƒ "Ą¶,LŪĀ[– †Ą”žšŠ€§<ķį(’³*j!’A×i•üZśq=‡_>ü=ßs?oŗų½üÓė¾Āųģ¾§bÓK›WqÅÆē®§neß`±axc¤ØWj© IDAT™KO}5Ot=@g’ŽŠC9ēŲK0„ÅSū.J_Ņ“’+N=ßæē: i 52•/ £å2ĻNŹ+%—ŻPUŪ8ä俨XķóįyeJmKӓų†żä üżßĀßāiZ6¦į_ĆįH„h$F“!†ŠEhŒÅiŒ7ol&Ž #ė ¼ńØx’t÷Mµ –4…h‹Y„mY—BHkP «Ė]ĒmüēćÄŽW) @*ę_^‹ūßĖ wžÓXpĄļk¾ŻgG÷nĶ1WģćƖÉ?pˆWż+A8~5—æļŽ’Īķ|¶k'[“CNfŖ„·”½ĄJ€œĄŌ?ˆūNßČ/^ūbo<9ą~…÷ķ_0bZō†"ģmhf_ėr[:˜žėźæ’”@„ĆU]ėö÷355•’J%éķ=PT¦»«3ļÉ4•Jrēæfhp€ė¾ömLÓā׿ü9Oo}<_žī’½ƒxS_ų귐RŅÕ¹‡Æ}ń?_ƒü©}„wæ’’aŪ!ōģć˟’,ē]pQĶņIiiOĒ3)QNķž“ļŠÉØYY"ŌIž+ŽĢ³Üå5?śŹ ł €&’„¤£œl—hĪäæt|% Ī…ü0ĮCBž †Tt\…)Z£„š÷½+gy(eaŁ–ėā¹žėłŠ×ĆĖ)\åz¤Ż {{öÓµÆåyX†AS¼™¦ę&Z›š‰ĒilˆFkvJT2ŽĆäŌ““ŒŽ36>ĪčųXŽØļŃĄ4%vøƐX¦…a›XęLdĖ2±lŪ’K7$†iś¤ßš'UBś^żżżÓ%¦Ŗ<’mę’’ £œ($ŌDž+õ}(ÉI±CAžk”ó¹ĻS$ē¹’æš !„±±‘ĘXŒĘ†b ˜įóˆF"D# Dķ(¦Qūt1£2$Ż$I7É“3Ť3Éxfœ±ōćé1F3#$ŻąUņ<‚ž·5`¦Ślµgø‹Ļżģ\rŹ+øöāæå¬qó½_a<1\TZJÉ/|c‰!n{äūe­]xāĖH~±å;‡¶£¼ōōײ½ēQ†&śņ醐¼ń‚÷ąx§s×^ō> i0–ā[¾Ć#{ī)k됓’šśY ņ_ńĶŽ†ōÜ23\µY»ĒÜd3«ĢÖPŹ#N’&©•Ęrn’²¦’Y3~Ų@@Ś \žŽ›v$ĪsöõMŃŃ`±¢ŁWXFķę’9øŲ‹T ‚UfG~āāöĄø(-ŗw#žŗ{U_“LžāH =ĪŚæ~Ÿ¾į7üG÷NȤéŪ°‰†cÉÄX ³XÖNjzCś&ßmj`éåēņ' ÕĒBćĪ-Øwż;#†IŸ¢«!FgŪ.]ĀDs™łŗ2ŌJV].¼ł{’Sō{oēnųZń^¼ūēåļķōCyŽs÷Ū½õ'?ā֟ü(0ooē>šīw„uw{÷ „aķQŽŽzIeéF#%*Ü䅎’$ąeÓ4mˆ2ūj•™Ł3:R>[™ŅŒrZ_?ćī~DD»FņŠģ!'’•ś®“øŌįŲ°2‘:4äæ°§œ¶ß7“óÆN-5‰Vex˜¦‰ŅĻuQ^Ļuń<ĻßąyhĒÅń|E€ēłŠ„ćӓŒNŽÓ¹ÆŪפAC4J$&޲mB!›p(„a˜Rb¾>XJé‡6Ӛ“ėųŸé éL†t:E:“!™J’H$Hg2H!³Ä|ę3 g‰»OŽ ÓÄČ:÷³¬¬×~kF `˜FŽ“æiˆé—FÖYŗ(Ō¢ KéjĄMrųČŠ=tØÉŠĶ~ØÉ’QĀž©‰ä¼&˜Īī’BŠŅŅĀ’¶6Zš›iki”µ¹Ū^XßY¶“±m›&»l÷b 7Į`r€Įé~Rō&2’ö÷i×Bžē|Š‹/.„=~·õ§lŻūGŽtŃ{ų§×}…[’ųīŪńėüX¤”tõļdGĻcdÜņ½Ügnø'»,"ö„]^z꫉†¹żŃ›ŠFņĀ®`ż²ĶL&ĒxŖū!¾Ļu4„ā\vźkų³‹’!$[v’>_ᰐ’jżŌ‚ū©ÆBAé H~kNä,śeĻG€–¾ķ{ž1jĒ›_Õ/'“Fh'I×#·Šć.xóY„\(ģœĀs–5ÅYÕ”)jaŁķ=ušęyD"=8$ €© DĪ ąhĀ¢SäČ’Ś~n”ĘāZõnˆŪ•|č[æę ]»¹Wy°]ĘWm&5×£éšåW"QTl)n{Š©tŠŽ·žÆŻų4\t:§Ģ[Ę}£^żAĘ\EŸ¢+ŚČīųŗ[W0ŅŠFڲQ^é,øNøžˆ.Ōx„ BŹŃ!×Q–pµ ”=TFńūF+-$7ė@ké³1i•6­³.[ƒIłģ§ć’’YšÓ†3Ƭ//.W‘üżŚÉŁ(j"’å¦Å‡”üW‘óP’’Ā4?ž·@ ķ÷ 5Z !P¾2Ą2ў‡§l“ēį*…r=”ėāz å(“`s&±•‰šĄųAžė—ęüć/ēźsŽĢ3ž``ā ®ēņó‡ž;°›x“•%M+øķ‘ļUʚŽM\rņ«xx×]ģŚ•ļ¾%ÖĮÕg’Ɠ}|éö225ŅNŠŽ’l3ÄĖĪ|ģłC֐½~Ģ…üW/\Ø®9@Š»©Ę±€€ėBX˜!łŁļZŠ,Ł÷_Zåć* Ź//PFöuā+ ¤–Źœtnł±±žƉYVä¹łpѰmO*=Źč½śéŒĒDW„Ö¦8”PŪ ‰x¼‰Ęx-ŲVe…ąbö ÅŃGŅ%Ē› ‹Üž’•żü§”‹‹üē yĖKł»ė†źļā0LĘŚ×įX-h;“p`(‚Zŗ’ )Ę2iö]ū)¾ō¹·ó¶×_ƹÕküāŌ›>ŹhŚ„Ļ ŃiäŁęv:;V0ж”Dc®4ŠŽÜŽ]yH‹Ü霔¦ēčē`øaŖŚ• €ŗČ%>Q„ZŻäæJ™įĢP‘ąP’’jÄe±“’’)je– ֜å,§oډԾ#%C “éoPZceWõ½,łWZūŸ®‡§*Gž=å)¼lyUhåG ÕŁU~ö–Wd½•Č)r~ |b.„šC˜e »”2ļ˜OfõR"MCye€QbH_I M!BHŒ|ūžo’–^K LžƒĪgŁõUłÆtMhŸWŌ…E£Ų¾±srŁnžŃ”üՑĻlˆ…‰¾ķJžęß¾K¢· - ”c¼„w!¦…Ž6ā­Ż@2­VĘūæŹ· 3łī?åÅ!k¾†õs‡ÖšßÅłČWEś+’‘;š:ŲÕ¾šŽ¶ÕLĘ[pŒ9zż/„ņo~^+”B+¤ÖŚPŹwXĖtMD@he÷²v³&r Až+¢lĘ>ļāŽ$•Į–öóä®rVš`ĶGĪ’4?j@œŁJ:ė\ś^ŃJci§(_åĻ}O+“§óZūЁ|LfUš=Ā©ų±RH^KÉæaų– ¾évõ>撟µFž·Č•5ü°}Bś&L9e¢ü}®’ {ń’ åyņļcj"Yv­!ÓŽŽNGGńxüØ93Ā -'rBˉh4xfl;Ƕ“p¦‚+U$’³æ| “j%’Hd‰yS“•Ć]EE ĆąĶ½¦h_ŗż£$33aßĪŚx1›WŸÉĶ÷]Ÿ­W>ؐAkW-žZÅ×zļēZęGŠé_YrĄ}! ‰B!„Ņ…FI‡JūėPžO į ‡ĄÓPB(ŠžkFäbjm č~ü¦ŃÕ'^vl¬uE™æ„Å Ēõx|ēAMzX‰éż®HõzĀ›öõ>i ė¤ÓI‘JM3::X”§A,_7^rÉŋR«XĻV†ē±ˆŻŻˆ–=\dJ>|¤ĒR ښhy˼õK?åK² ĒįgʲÖ Ą“Š"ŒZu ÓJ1ˆ Ÿ’1?¼+žėoyõše4.T_µbpż—Ÿ uŪŒ½–ÅŽHŒg[ŪŁÕ¾ŠŽŽ5Œ7·ł^’ēöÆ ¦7w;ČE ­¼œ¶YjŠJWœ¾@±…Dk%“¬° –7s-/ģYŹ”Oč«·Q±xv?ŚPfˆ•‘•AŁEµė"ÅéU‰K­¤ø¤ģ¬Äå("’„rŹĀJŁļ¾1¦ļ}I ™%ō9S~ß„p.T“Ī®ųėllf•3ÖŌ¾5…ä?ēÕ©p»°łć&„æ]™5ĻĻęIį‡ćóÉ~V9]É7„ĢM ż•}˜Q$PL0…ośt™”„Iņ4a?$äæt,eMV‘³Ö{؂œG į-ÅäD¢bža,]ŗ”eĖ–ŃŲŲxŌƒ‚U «XÕ°Š­¼„}“Ż<9²•Żc;qs+™ߞ³æ|ź>rĒzx²ŸžįN®8ć ģéŪNŚń×*¢į~ńßsüŖÓøń÷ŸĻG@,Üğ¾ąmlŪ’ÅÅąą  ,Ī-¹śy €z°(ŪƒÓŅāɘjĮÉŲté\}ד$ĶnŅvĻ“˜Ž·āŁ čŒ"E„5ޚ $d- ¼‡;q^š~ąõ¼ōÆ_Å©Ńš”·P nž-ī߁‰” †-›^;DW¤‘=-tu,§Æm“-¤M µ2ķLæS½XE|š#òĖ82÷Ü}'÷żž.ŽöĪ÷š£|—‰ń±²2ĖV¬äĻŽśvŽŁø‘‰ńqžŽśß’ŸołĪĒę å8y{fQ‡ł’g Tī€H@”ß7Ź)t’Sį­ZĖa–Œš'N5õ3“3ä —)j&ŕĘD\Hqłe±*¤UŚ‚1»œµ‘’ }Ļ"gįŒAB‚Ģ=ž ҟe”sĮš|Ɵå÷žĢC)ߚ@«œW¦™6ņ[ å9B)ņ~üäĖ„ōŁ|r[DA½ÜQ•¹¶KńB’JĒxįČQ.éK”-O+KQß (gŠ=TÖZöW€œG+ńud€ł,cŊ,]ŗō9eŽæHÖeż¤V„yfl; ?ŹP²? t-/ŸąāµūŽ®ćŻW|‚¼ęĖ<Öy!+Āė_Ą×ūÆlß’hQ?ż“æ"l7šó‡oØŲi4cóź3¹gūÆņi†4øņŒ7qŽq— ÅHf<ųģo¹ķ±ļćz…Nė—yÖb Hžė«P:÷ Ŗ0’’–r”Bą!„+„v„Ž–d„‚Œ”"#„Č µcH‘öøBjĒĀÓ”•šPRhåi“0„rĒ;Ų³ó×֚ĶWY׹v÷Œq°o’vK²błévļäÖįž‰§Ē‘ž›Yfwņ”“ČN>„ÖųŠ•æŒDžO#‡†m«ą9.Ė«×X\xŁy\ōĒmģdrp/ɶ&ÓFŪį…Ż²Šśj޵Ǒ0,” įö’üŌMŒß|';>š.xҬ Yu>Uk€Ršó?ą}ź˜zb'ćŅ`Ȳ9в·”‘®¦vöw¬bØmSńÓBI·0c‘:ݟžūåńÓż)%«×®ć寺†ė’ės  pśYēš‹Ÿž˜‰ńāzMĶĶ|śó_āßł6ßśź—hniå„OZņą¹i-$JŸA“÷Šä?H¦ŹrV½‡˜§œA÷PYŁlB€œG+ł˜/^żokkcķŚµÄćĻńpd Œ°āŌ¶Ó9µķt$zxhą:'wǵ«æäźę¤÷ցį.>ó³æć²Ó^Ć «ĪĄS.÷ļü w?ż &“cEMŸ“ęlĪÜp!÷l捞±žŠ¾ōō×aHƒūvü&Ÿö†¾‡Ó¹€;Ÿś »ū¶±~é \|ā+Xæd3ß¼óߘJ—=ū«ĖS×+¼bµ– xVm'p®QI`JM; !<)“'¤tµÄ‘R8B‘†‘BčŒaˆ”0DŚ0DJH2ĀÓŌ¾’ĄžŚ1“š$Źóż,k%$ŽŌ®ļ Œullhī8žų¤>bfĖÓ{3lvX¦hµ¤XsŹ[–=%’ūÜ=ŒBhķūČE ”|=<žÖŅ©g^§¢Ą@ õ…€Ž#)Ū,x^PŽø Æ±l?§[6y¤Ē24D°_s1/ūömō 0Ńséųr܌@Ł {1†¢(Ć@ÆZORJ†£!2fÓ=#Œ½ż³ģūÄ·9öķÆąō«.`åśĢ;®Oß0ś‡æĆłöĻIlļbBŒZ!-›‘ūšŲßŅA_Ē2ĘćK˜njÅĮņ ūBČ[³er”żj䜶<ģŁõlž{b:Į®gvÖTļ%W^ĶŻæ»ƒßżś6F†‡čÜżl•ZµĆuŅZH\ÓiÓ.ų>*ĄœÓ?‘ *øužQĢžv®˜;KFą ¹J;•› ĪéK÷³>zLķ¤ø ³*q Åå” āR^°^R0Ā‚¢5ČYt ł$ÅR”·ćÆAŸoäĢś…?×¹Vt.[Š[!’…c•äx}”Ž ·źŸū]‘(…Łåœ).H"ÅE# š¼×@žƒU÷=Ä<å ŗ‡Ź?Ø$ēŃLž501>”’•+W²råJĀįēŌÖć#‚• «xõ1Æe(5Ą–Į‡Ų>ŗd*žEŠ5>+ī­ĘĆüųžÆ¶“K [Q^ūĀwį);žųaÅN;š–óĀćÆäį]w12å[5³äxĪŽų"~pļyhם ąŁŽ­<Łż ļ¾āßxķyļ䆻ž½Nyj)\Ø®»/čyVcƒ•ś r ¬œz­„ļčO įv…”Ž0q¤C’–¦H†L–HIIڲHKSdŒpĀ5•v‘Ņ5„š”PŚ ÉŒĘ“c»?£žŲ[WlŖż >ŒM„¹{Ėī“JøÓć-KOŁŠ ÓBž~ņ»OŁöŻū÷ßŃ£ü·¬@i©|ēÓRj’Ķ™õI%Pyėb ȁį^Ck½yq=õ„ÖŚC{=Gz$Ļ%Q@ēvD×NäY&¦6ßg‹ēœČś_ÜĖÉcć ō0ŽŲB:¼e·.¼ćśœcĄėH5†ńĀķd†÷396ÄČŠ(½’|»’ń«¬¼ą6½ųLV*ͧKø1Z}‹@*O<‹÷‡ĒpīŚBź÷2”4ÓŅ`Ü 3bYōŁś"Œ7Óß¶„‘ÖL5ÅČŲq<)чź, Ö¤w "gš‚±rÕjzšžCÖ¾—œv [¤„!SFHŗ†%j3-ȖŅ(!„<źZł.mDājB٬½ęāõ¢?5ĄśčZ  IqAfUā@ŠĖ F0łŽ?])&˜ø.ņĄłŸ©^2*) wßusžĮ%s‚ҁ”ŹY&S~å¦TE9+‘’Z•µ’b*¤M–k$ŵ’’ŠrÖzQ‡œUŅę"ēāš|.čŸ³’ŁŚ)LzŹAs“mūa29^^Rņš?yŽ—įW”O^s.cÓĆlŁ}wQ£G»łŁCßbIó* aĪŖšŲ¬2-„éŠólÖkķ§Ā2ÉĢöü\@h)}GRW†v„!iŠŒiŹ“a‘2mR–!2",3†![hGŚŚµ į)“ŽČ4€ćMMLķūāWäŚ÷æ3[rģlānŒL¦õ[ö$½ĢÄ@H v‰ō¶ĪįĮ=·Æøęul„4N<ž‡ĆŃīėūłžģf‘UWi‰&§žŹn2‰B*–ÓÉD²!‹T‹ėŗžć8®ėf¼T*•ŌZ§„$‰ Ó Ó4¦¤”Ó†dŚÕ*vĒ*)„N¹ŹKyŚMKķ%=ŅéŒ7=–q’)O„R^j"•a$u`ņ@ŖkąēS©Ae- ļµ’+8¢ €¾nĦQ6[ \y$Ē1_˜āŹó9ļn§sb”Ń~&RĖIgŅØ†CpQš:F«Č„–į54‘Ž`zb‘±aś¦§čyx7lc‰ēѦ\šW/„åųµ“t“nŒ`Ū6Fʅ± ōč$ź™nŅ{’RšŒ¤¤$!M&-“1ĖbŲ1‰2maø„Ń–6¦bķ¤›q ż©Ś^„uĆ0QRL?­õįU  ŅŌŌ|HŚVJįz©“!”a‹”a GHßµM¶F»ĮĒÖ3D r§¢*”¦ÉN•¬:ŪØX|–‰¼§†2£t„Śś-™NŌJ\*āRz$ć¢$’å£ĪW«IĪ2gĘ^6‚Zå Å3Õ듳D7P,–Ÿŗäœ'ł/•§¼› ÅĶ‘’€ė¢.9k½‡ŠŖW‘³Jڜä<šÉæ4Dāt“6Ķ‹ūyŌ†øŻÄKV]ĮYēp’½<3¾#ļ_¤.Ģ‘übćņ“8ļøĖ?ȾĮ]ŪxńÉÆä„•§só}_f25ć“Č0L©‰@§[öü¾ģł_ĖXg-¶Pūž«öSCr`™ŹSk‘Ķ”9~?N­ļ[ÖW ”i Ļx†®”ø¦ÄµĀ2#M2fHf,”]Ėı įé°vbfZH“ņ<óz“ƿ׿‡ŅóކĘ‹Ā'@ßHB’į‘®IåM‹”]Ö¾ ĘžŹė™c’Ņę×ü=B„„ę†µ×¾.ŚŲp}OßMŪptnµRf\Ÿš{¹-¼^ž·Ä?ˆņśo~ö»B §¦¦D2”FGF2Žēč}Ņīt†‘žLP† #-¦ÅT8ĀX8ĪXs3ć-L·-!ÓԆРL m9hÓöĻß4ŠlϜč`9žo;„®äyԈ#ŖéGl ńN‚łĪs ēlfõ÷ī`]r‚ż# ŲG"܎j ššõ†…6,KģŅÕ¤›Śp'ūHN 016Ģąä8MÉĶ™-ŽCóĄ$ń¾­Ä“Gƒ‚ KūK«BųĪä=Ó&#$)Ó aXLšv˜ńP˜±Ę8MLĘŪIF[I76įę÷śh’ŃĮ?ŗ‰¶7Ī}¶>ö(żŽ÷sļŻw’H,ģć&3=”%:mšbŅ ‹¤4j[ż/œæH†–ĮÆĒ (µĢfÉØłĄ×ŌOåÖr9}é>:Bķ•ÉbžĖ‘%’ŅČ"ņ?9¹kY,Ø=8ņG”@k‘r”D"\›Ż‘火} āgæłÖĻĶn!Š~:©52Oē_7J\Ė&c˜$£ $ĀĶ$"-¤›"ø‘ ģŌņ IDAT<Ó|~õžHąˆ):·#Ɵ$jvšŖ#5†…DŲFžw§Üó“cōŒ0šJÉÄPÕĀš.snóÓD›x†…¶BØöed†śHNO1>9F2Atz’†t’Ø—&Š"ģŗŲZaiķŸįūūō¤AʰČŲ);J2e:Ś@2ŅD²”'ʼnµł¦žŅ@Yņļ-³æJmĄ ·ŒwOM¤ŗ1Āėe…xņ‰ĒøūwwšłÆ|“o^<üĒk;35ę"E°Ř1¦EHĢIYäl KäŌ2G˜%#˜ĶŽFåę*7RŲϘ3JJ„ˆį¢ÜRā²`¤8`е’™ńŃhˆüWāĀs3ššW’)ØļI1E’Ģ|«UĪ¢“YČā̐Šz®ō]P¶Ŗœ"@Ī \©Æ"™ź$Åó•³ £ģŗ-½r„ØNž+õ]§œG)ł7 ‹¦ĘĀ”ÅźXūčĮ²ČrްžĶģšŲÉļ{ļbĀ 6Ć/Ŭ×]…ĢĀä+Ī|­±„Üp×gXÖ“†ĖO-w<ńC\o&RĻźŽ¼żŅŠ;ŗļß{]Y{vŻĖ+Īy+ēl|(ˆ °ŲžÕ^! tå DåIµųœ?’Ō™yĀČź#ĀČ$¤PR %Zųak“BĖ,Y5„Š6BįĮńįÉ>Š{IWsūEE—Ö,č`*å臷õN÷ ōŚęōޘ=ŗ­-“wĒņx灸18m®+•ŠB˜÷–ūŻ©č-}égAD@XńšåŠ, tBł€dFm <­„Ö²—©£:ė„Zk„ė”füäĖNf…D&ŽĮ‰†ČŲM$£q2”žq˜ŸG9Ž˜ Æqr3— Ik=õÖl†x<}/“,ƒĶēĆż? .{ö•09;8[4g]÷Ż9_"›Ī‚ §A“ ŅÓ0>ĻnīŚĘvö ¬½ėQ–e¦iŸ¢oz’„Ó‚WMPR@€/ ĆDGbxVŽāeҤÓcL;L¦Xé ,7ƒ‰ƒé„1\0ģM+ŚhÓĕ6*Ā …Pį8ŽĀ‹…šdmHōü] Ī žDG£¤&»O°lŻįģūĒ7}—G~wæ’øģŠ«ųĻ’$™tz^m*×ĮI%;"&C1cŲnÓ”„̹:› ­Už5.+mˆ ²˜­ńY2Ŗæėi®†F Šō§śY×°6Ÿ8;1Ķ}́ :˜üS!­‰Z0ņ_ŽéB‘’ŹrąI1ó”s–“R9ēOžē!§(Æ]JŠƒæÉT')žÆœe/—sīä?`,õŹy4’!ˆE›‰ĒŚŽ>Ł1„ŪtĒ4näĮūŲ2ōZW0¾›ćuWXguū^|ņ+łŻÖŸp`x/żcøāŒ×óĪĖ?ĘÆżSÉ N_>—ŸöZśF÷ńµß~‚““,k3‘š`Ūž-œ»éҼ`.äæz™ąBuĶ‚ži5Ž„zóŁ•ĻYĄŪ@—Rf›0t^ D^!`"Ou„©tD¦u#“ēŽ-½ż»;Ē"/}E[Ėś[¦Ŗ*Ź<ąyšūF2Ū:{љžXdjWÜٹ4ŚŻ¹&¶g %֛“ķ„ē)­ĒĄ“„ĀѤæ÷7ž[=}žu`DŠĀ²ä…Ÿl³cŸ¹Ś`ė”q@+„šŠZ!ŅŖųōøŁt­dm#“öæ†ķmDš,ĻćFmœh®įś–̆…6­ē‡ ®øōļ«ÜĆ9ēgH.«·ż†&hZāONŠ~Z¢D‘kX°ęD˜ V“Æņ•9ņĘK`Å&xśæN( ĖŽ«Ž[xćjbR°ĢIŅ>‘ q°±UĖpźr0L“‘ÕPŚKQ!šœ4Žņ¦‹0’ˆ”Bd†*ø™„DK‰čh „|O[Hsf„²ńē+ģE?*9Ģ@8:Śs§J¶½RJ+vøĘеg7x÷Ū¹ö-oćż’šQžż’4Æö¦Ē‡”$MKŽ„äˆ3’fżĀÓZ(ģ°HPĪ©JZŖœ1—’\D śÓ}¬®”<ūIqYõ’’€v*’ ÉŌóäęKE9+É^ŽbŠA_t俚œs"Å󕳢ģĮr–Ŗ¤RÅ{Ø }Nr…äß¶Ā4Ē—Ž—©ŲčC»īäķ—~”eĶkčŪW“œ„mĢ*S-¦’uõS”f-ÉU:­h¼#2×bQ¦!Ā$Jų»b}†_ÉU„̆j–ō-¢¤T8¢=ŪŚį $ĘææÆ{ż=ŃĘóÆhk]qŽmZ ¾Ću»Œ¦wvõ;^Ŗ7d&»cį‰Ż-±ž=K».÷Ž·ESŅKjÓ6”ć(Ā€e …#pȎ’~x|xwjņü/ƒŒ …­3gž‡•śšūZ–~āFgnö gwæf„Ņ_Ø"“½TSiJ!¤‹.½ŠM µPV#Ź ć&ŚpѦł<łÆ‚‡GĢ`č Ņlć…ói#•š‰Ėņr@ó€¦0L(°“ u9Œōśß›:ą˜Są·7ų9ōī©oŗö*<6üvOļ2dņG,½4žā“«KGš»—ī6ĻHT“Æ ׿ūkųöo>‡©ÄhQŸßBČۊ±č`E]J'©8¬äߎ£Ķe‰Iń0¦™¼½Ņ‹’åÉ|¹C@4ZC•ČBPJŃTęę£Š×•żāD¦+0™N‡#ɾ}ŃXĄ™šłRg Ć>Y潄wzØC–T=n“1RMā Ksœœ¹Rq§SŠxÄŌ“Ļ‹6{&¢A÷TŹķJJ>wJį•„–%`*gĆ+’Cpõm; ]{m|śōę·Øńć¾›Ų÷Bėæü8ä y?H>:˜”ÜĄń`¼FKČ}a˜æ–ßæQ™żvĄŽ…V óī8ų&H4ŅÉaC#äM ė‰ )Žņjķœ^żs!-śųé1ż»”B ŹŪن MƒW– N&Ą·Iźu4 Yč!žes‹”Ó ¶P &ś 8[1ĶGFŸ”2”SĪ@÷\źB(-ʦü¶“AÅŲčˆ}aLC||P#@šwŅ·ė÷4 “ÄIeTzūÆ ¹p“‚³ĀT“c9cb9ƒ ÕČvę ±3Ļ@za”©ģóu‡9q)%g3­VIqī‹ābDžKŖ•Ūd“ą1›»).Õ6ķ4=ĒŌ“¤½vR\<—%; -ĶUjgU.k• 7h«b§).Õ%/„\²ė‹’Ēš«ÉNƒV®O±1•Ļ1±| -UBņ·Āåœ×”5ĖØ"'ā=+.Fw5žgšPXK1łażĪ’ū™Ūįs… śžīs˜NN ššĀÕē}·?z3āi=Š+OæŠ*ć„OZ{6W˜Ē2,Ī3ū?+'É ŁŹB„`³S% L€B'Ą,4óŁ™Āxūg‘RĀ(“˜‹ŹŖĒQ¼Īd¦-0OgűtŹĒ§²1”8ięvHē`Œ'Ŗ B”T£š¢:D9+p™¬‹‹g}DŹ'd³.1){…”¢j&ŖFIqž®Zīž·—@×ħ¶ŻAˆ¾@‰ū½Čžo~:“ńKOŌ#{^ąĮ¢q&„:׳Ū€+vo÷”d „ph­GF‘=įŸ74ĀĻ;_˜œ`ÓéÅĒ„;õ¾|ĄŃĆĄ1g¾& >YŸ>^8MƒKUįVÓ„ 8EŖļ|„õ©uŌ€r`¢O †'īæćŽ¹ŽS?éśĻ}Łlfęū·æ~¾ņõ‚$e1<8ˆ`(„-ĒoŽōe0“—˜ašœÉņ:)zøĆŽ&aŠą’¼HT¹Źž²J fép+-¤+tT —Ė1gAˆÅy"RI5/ē5^p˜,Bę†üœŪ9'’Fø).ŸŚž¤Lć6”ŪY)¶i§ĮļĒ>ł/·sīÉ?Ay—ŁÕ€Ä†ÅŚĢ0÷äßÄβæ%*ß³–xށp }9ŃßÅęąV49[šŪ¾ū+– 4ø4S‰qL% "~÷P5?žć­øž]_Ć?\ņ]üiĻƈ§§qrļ9čiو»Ÿś$²ŹZz®²u šŁ³¦ŗ3­lmf>‘3`FŠģšLa(Ė“¬ ,½€!(%ŒR•¹ų“&jiĶK9®²IšTD'² „ŒQBaPąD¦q¼¦AIiŒd5w€©¼¢j”S˜U“9}=lAKÆż/’ēšųŌ‰wä#”äÖļGö|óÓĶė¾ōøYŸÖå$s+jHø [Ņ ā…æ²TE/×jŸu[Ä4 gČ0ąoxPr9XĀĄäš¬ŒČŠ· ų³Ļ’˜Ø]—€ČœY¢¢€ŹņXÓĢńŪ’\2’ŗĻC> ؁H"ŖģI xŌß“į}Äbr•ž¾ĆųĮæüsYū·¾žUˆbql„ŖŖøõ–Æ`ĖÖćnjĘ®Æįßæ’ÆH%M’õT@6A61„ŽÄx7=ā ņ‡<-ü¤ÓI%¬”ž+@Iś[¢{#ØķÓmÄ ­ ÆFµŚ<©Alōo(h6"ęÄ„nRœk·B\j!’ę ›¤ø|j{v‘b·-5ņ_޹ųČ5;‰=¤ų?Ĥäæų(C;KŪYf#ŒÆ«% —Ó‡æµģ·øŒ„…6g;>¼öcųŻ‘0*Ļŗopi}©Ś\:f,:ˆo’ę³xωƹǼ¢ąĀTb ?}āŪxķšsÕå˜]ŽEcŒ{­˜a<=›mĶc0Ģģ¦é딢žč§rošĘš@6栀YqkKÆ,øœŒy]”“R¦’ #ÓPޤYJc#&užŽS”;$ķ³×d§O.rLī½õś¦õ_|bnµØŽFä]5ŹØm×ļ¢Ę‚U ®Fɚ*NźīŠI=0ė¶Ķūp°ū¹b/żŲr–ī8²xżq½Ź€]8E0šš“Į«JĆļ#KTS-ßę«ČāĄ\dB]ŹĘāĻFĒö7ZםIØyż—<²™ Ž”µ÷>d:žåķ/Ō„Æ”Š#1>ØJ’'ōø½Ž.aŠ䓜ƒŲ«a‚A5–av:*œ%#āXM†éš:’žĻC0&aµŚ''¢t•c…øŌEŠsķVˆK­äæ“­&R\>µ=;Čbn¬;-“ā²ClŚiš#²Bž+Śi•— 2·³ģ¼›āā®Y)F§w”É=v–Łćėj‰Āė"ąk^h5–Ń øy.ļł |»£oŌ.Čųd8’Ł8ī}’…Į)ø‘Ź&,°:qÆŃ#³¬ŚcžŹ‹ F—Ö¤`Ė&³±Ō˜ h*G@8Äå[“äŒeuÕńšĆ»†g™)HóQäB}U§“Ō쨢Ä÷e³‡wŹŚŽ×|ŅŠ“&³Æ$y1EÓF9…€õRʐ0ūĘŽæęŪŪc‡o¼&39ėSĒÜ6¹÷Öė½óąąM¶K'17‘Š‘9¹TĄĻüšJpĄn™£‹'“ќu’fg05¬>nö{¾@‘½mb ·= i¶`LŽx 8¼8ž<ąŻŸž½³Yj5W3ŸpŸjö-Vd±ĄwĶ* Ló@u5#ī_…CŃżÓOEĒų­k·ZqĢ'¤T±Ń~•R¤8‘ 9żÜ[žNĒAo3įŻTĪgžaµnąTó-åmfRl,Ą+?—Ķē.=ĘāBF’ØaŒa }½ŽuC«—zHq®½VRüv!’†v‘Åb3`ŪNß¶).VŖ²VIq¹ śIqq׬£käh#’vī=‹@Ą×;°ŠŖ,£ĮąŅ]!(†šÜŲÓ*‘X Ļ>š¦Y'’–ę1īµhBŃ“'„-U;Źo1:LŽćšķĪd†Éżsē!“8óÓ8’!«}1vł;eōœĮ»1ßgå G?Gæ x×¹\ļaŚ©R2Łu$qųI%ņā󭮁Ø×I{„„ä²å{I¤«ĄæįŪŪµ=’IiźŌ:{o½>°é‹¶¶,caq“É•BŠų(ĖP5¤%krXĆŸæÆ…Śg#€Y W³@ĀÄķ“ˆŗxż ąŒĖōÜv–Ąņ„EaKŠPhiB:iŽęįĄųd_;&}+°ÜŌc‘į=;5E¶÷F}!%¢ˆō©`ZšćÉØčćŽņu{ĀØ×ĖeŖK°³¤·¤ŌC^įa[NHM‡ZgadćŖ(„ƒédÕģŒKÄÅ*)6[Ņ,0ł/ÓԈ,–OmnēŃHžė±Óč䕼W6¬A¤øøkVŠ‘Kœü—ĆÄɱÄ@A8Ō¹LžbBpFĖYø óBŠĀņF÷粃«<ņL³ņĄµ1XœĒŽ£+¬GJ?ß:L”ē˜7h#iŗ%4Ž›>6‰ÆžL&Ē\2Kžk”Ōįõ4ŠŽ¶ķ³­ķWŻ6Į>ń‰7ś·­=8±!<‘jsfU/§Ŗz¦BŖ)¦'ĄĪrÜ»īŪÅąö«MĻb™sDwßśĪś¬i<e9Ē@-X0€¢4.ņ">©æĮ÷7‚Ø“öé‚€©į@§1P _†N±§K*čFXõŚīĖØĶŪ„LS7†½+ńćOMīzMJ']RCrr”ÅGū@Kó"vč«°Ėßåż|¢5ź·AÅŠ^Ā›-RŠFYx eÖaAˆķF14ō„ū ;µ’¢ń†œŪˆ›Ķm@Š u)ė°FžĖI\qƒm ł·hgRl¾Ø3#ĄFmsIž«ŪYüµ¤xv€%;BžĶę.°Óč*™Ą¶†¶-䟢)Ų §£!¹h—±Č±5t<ŽŪu±ī°B„k$嵐’źcŒŁZŻæ-źR]¼Łs¢ŒoŒgR}/Ć ©m]¦h~!Ā}åŅØöwŖdĶź©K8bSgkļ•«ŗ?śÉģ%—ļ<²µēĄČŚP$8©¦VŽ$ĶW °ā š÷~}É8fŠ ’īoPŌųcÆN7X<…ƍ”95¬—ņ ¶źoń傤v‘½*/čcJĆ’Ķ0rHĻ`#P( PJ _Ÿ³yž8ƒ’sõ– ©L€ęiC*؃w^sx²ĻD†wmOFF’¦±`sUĪ"2p„#£*ćH’wЧŪåo^kīŪ„ļ$*!ö뵚ŹŖ”’“š¹ęl½¦­0"©Õę1 Ī#£eŠؕüW&.f¤Ųˆ[$hJŪJIq±T£%×\“ vV!ÅVģ,;sVIq½vĪØPŁĪāÆ5āR]ņ߬ŚY…üu–ŚYöė1h›ņoņ»­ó~²@(‡ęP'DGĆR-c `}`.^u9x’O£eĪx«žĢqT!Ėz§qÆ­éī߯w­Ķc6Ę$€¬6fm„Y &Õ4Fā䲍ćüwnWéęO‚Pgõ£ź‡Óįō®Ųņńpóå_Ś3zʶ½}'v™źńĘå ÆŖBMæ*#§€æ÷ėŪž—žzI9ęG]@¶`żSŲßHySC@ Uˆ””hOÅ)­÷ł›­; l^Ź#“P@ p@–TaJ`¼Źj:QäŁ>ĘC u"źĮ’J¼,Ųó‰Hßóć}»†ät²”{£LĮ4$§FŁdß>MĪ&%Ā‘i‡H¹ĀÜkžĀ«MŻā!_›T!„°F*EÓĄXYTR±0‚kŖsxµŠŪó˜Æ$cčKöĻš¶!’Ęģµdī:Iq®}™ü—­‰ēžW³f‰ >™ŲY¶`7h[&’ö@)‡–`'v Ė8*°Ę»—¬¼5É„móyWÜlćłl‰,÷Ś"åEĆ̟͵Ļcć¦@Ģ“j&»@ßģ×·ŒV™@#ųā„ zŁ?ƒøŗźV AK0“ž˜Žsæ8-ŸzŃ[GŽé˜XŠf‚,ń ćwĮµ_3t$ö}ėšc.!ڬąö¾=ųՂ8\^°'ŽĀ¢`ŖQ2'‡ō·’–ā€yLåņxCÖž& e”Üj! A‡“ƒ‡Ä ŠĢ²Z–B°8n>ą Ø{/½Œ aF Lē™wŪ‘h[ƒ#Ķ«ń²· Ļš|~ņČ®=“GöĘäTbNr0MCzz“‡ßb©ČØBˆ–ādTtÓ·ÜažåšJĒ«-+Åþ6>&:©l5"Ät{o²ßßČĄsŸ©–·VÖ"sńæŚ˜‘ĢRjjĪČæŃ܋üםŲpÉæĮċŽü[Īm0ŸäßVbĆråŹČæĮ,Ėäß„P4;!bõĮĖ8jŃķ]÷Ƽ\i6K¤Ü¬ŁŹגØ\gƒČł#Ō†ÕʔŪ\Mœi€\@®¶rĶkźj FFœÜ$łĒdnóÕY°Šjąv:<ĒÆ?į#‚ė”+÷NlŻt`rcKDnsČą)mP„npķ×¶;JœJb󌜜•”éŚuqˆ`ˆōwJ‹‡s-,: IDAT9niš¤?˜Ó %‘ĘŽFɜÖÉæQ ·uöé8µ~wkO÷Z×AӀ]‡¤)žGRp!ćrCq,±WdU‘2 ™$øüæD |2>> !Ÿ’—IĖ¤ĄIYPUQU;.Ł…„`D„*¶!^”¦^¼īīijΠyV•§_ŲŻ7Ń·'‘ŠŒ©šZʕmCN§d懮d‰‰!EÓäįȤą¦œ>ī;’B[ÆųjkŲļoįc‘*„™b M+Ė@y³gŅŅJśg¦C_ŖÆl@£Č9‘²@‹’c`’""’õD8‘ārmŠ&­j§UR¼Lž ڊ“1ź,ѧDF=vZ½†Ž"ņßģX&’Ėt{Vć½+.-YN×B–žōƁäߎ£Ķe-;£-Š Vžp&’YON5Š(hćKśU„ų ņ­/k¤ć]•TOp„[ׯ;/8łŹć›·ŻŠ:oe”Gp\mkQĻŚÆm/_5〹`±Ąįœ[žjZ|N„[,Ž›wÆÕšĶ`#}жū”Dāx6čĆł›Mé!ūįöā€yDF€ §CūŹū¶žIźc²)=Ją˜wépąUė:‚šL!É; n'2”&ĢOzj®N|*”—õLM€'„sz°jUN ø4I ™D™=|j/Fx7Tž‡&ˆPC"TxŽ‚ŃÜ[ē…Üėo< ~d½ēČ&½$’Ēp&AÖ«éDwl<Ž?p8<‡ĒĻ;\Ź‹NBŃō”Ć4Ŗœ…œĶ@JřœJ@S€J$ŹÓČ„ą¤ƒ.?ķó5óżĮ6~Ō×,Ę/•(%Œhµ•ų³ ĀXYźWb蘿¤¶ę©6ʤ43†n÷*xxÆ”:oWņ_¢h‰\½½løU;ČbÉŪv‘āRżPng­¤øQ%†,:ņ_J(JŻÅ6Ūi?±”Į5dbēR!MĮŽå=’Ė(BÆo=Īļ|7~ †õęŖb±gü7ŗŖ«É©¾(·¹¢JFI™bÆŃĄPi§$Ā—’e'äæś÷Œ„Oµ3×|€B¶¬ķ9ķÕ·Tzp‚žĄŻ-źhŲ7’u@5 j *nIåx°Bć[wóvģ»łŖlōÄŸŌ…œ ¶ēŪ׳7Žh»DąŪi;óbƂ…­„Ū üiźīĄ—(iL@ųĄ[€Æ©8`SĆ@l>XŽ›Šßöo:Żŗ3``šĘӀfƒ¾æš$P$9ŠiĮøčGÖćƒ:”żŖ¢Ź š ²Ńƒš;ŽÅY^œęsį‘G7„ęēų’’£"K£d ÆļĀĖ÷<ƒ—R Ig’č‚āõA„˜ą€Vķ†ŁhȀ­)yõ@{0ķn%™ų¦3“t$5ĶVdćčV³čR¤d‹4`šø™‘€r‚ p !”#Š4č[ė5¦)2# `€FT (G3„CŒćIÄįāFņ†¹o ?ęmā£.7Ķ ®6ē Ø\yx!i ‰^eyĻ“AJĻZmI’j!’„2¬Ž1}ūo†½ń}8!t‚1)6œŖ>ņo¤āü¶™:9BžĶęžKņo¤ō\“˜“™“’r¢\4‰ņo6÷\’’’asAž-ڹä@‚¾–eņæ Cl ‹˜ĆóćŖ<°Śµ`ó™i>Ęx­K±俚š²yŖ×QĄŖU¦`¹ĆP@ģsķ“J”&Óēnś”FšĻŖ<с`ėŗ5'æøKĪš"*S%•ƒ:ę NŖ€lhŸQDĄLĀo>•wHŃm?f n€8äų¦ŪkuĢ%ājÕrŁĢ°Ō° €ön°öUP{#Ń8¶‡ü8Ćź±”T“"oÆ?a~\& üļόūśvé’źcĄ3Æ"N ¦9&.DŻ>dē"`!Eó‡įŗ-8ou—łD¼£į7ĻĮöb}Ų‹õ›Wįņ÷„ԁ!<’æÆć‘_>ž Ņī²dź£ŲbŽ L”:d8žČJ Mf'ŁXjšĪÄI[&ŹŚ„ Ś ’&E*s«T•M0ŖÉ£Q !2”Ą‘ŒĄ!NœtĢé„ćžw†S®&.įšŃ¬(•@(Ól2Zč94=" #ŖV–n8 F̩҄öu,;¼Qäæ‚`Z™Ę„4±¹\–Uāb•üŹ)ü>/äæü-źÜ“bŚ6wäæŗ¶Iq¹†%‡W±sNȿѵ<×äßš$Š+čnł?Ų?ą÷„įvłZe,bœÖt&āR»¢;˜>āl\#–Ȳņ_mJ£{xE5Īce˜A'ćŹé Ė*3Ć˧%24̼XbÅĆĖ7•&Œ9Æ?[„+Ž[IÕŞ#䄍½§?¾#ķJĻgd§ »²ĀqĘN»pčN€æ6rų6ŻųX#ęX¬š%¹Ä°f3Xg74™}Cø÷—O'ó‹ ;ö@Œ!Ź;0É ˜pśsū ó0‡˜«»™5æĒ„Ų©"¬Č Ł4؏Bųųf\Ö§D=uš1‡{ć*œ»qνō4ģ’ŻóøļĒOį©`ā6d|.(Ž\T@#¦ÕH;©¦QżXÅłyõ9}$š’l¶ Q)JGc퐚d~)MRš$‰ “įŅTę ŒŒB(ŃĆü*Q)ĪIāNĘy/}4į sq—Ks^ęDp @¬°¼A¤p‡² 5D™©‰7{^Å> ŚH¹ŁsA–’ˆFdƆ°Ā®}‰}hĆ  ö‰‹ņ_rIńģ“ā2[H”JE#AžĖ``ēQIžė±³ä‡QFp eO¼čČ]¹ MµnēR„ŪéƒĻZh5–±ČAĮŸw\ˆøC²Æ¤ÓäK\K¢ņJT?fŽH¹õylŲlÖoäH+A’³ėRĆ=žś 椏„č–*€h`ŠóĢN•;ķ†*Ś.ø<ā†uē¼šF&āą7&ü9½Ŗ)s Z˜„5p*˜kĶĶ/Ŗū’ńZ%qü`pÄ!'×^§ŹĪ?rBʚܦQūłe4óźŲ`[īsø ¬©ŅOÅƛVįo}n¬6;.ŸkĒįŅł½ųŠÜėj<„˜ę(FE'&ü^$[; {¼Õ³é§8 ŚL–Ėoyņ’±^œ¶µ·ˆ<Ö5Ā3t5£÷Ś‹š… OĀå’śküčOoįęfÄ|-Ha’0•r`ؐHP‚±ŻV!r`Y ‰ )£”hšĢ©1Õ¤’«‰&4•K*Źi&&£ĢE%*Ŗsh2xŽ1ŖJ%Lą @ąT*‰IÖē¤YŽ/HÄ ÕĶ‰¦QJ€`n÷ū©jY uäĻ®÷ VžĖŲ÷oD6*Œ©6OFĶąHj=īnł¹’—’#å*’ābµf{ Hd£Č5;;ł7PjaČv’’r:]ŖTe;gę®üŪ*ilē2ł/†Cp"h[h5–±D@ Åūŗ.ĆŻ‡ļDTšÖMq6ˆpnLeRnÜk”Ū8Ą¶ “Ćū‰5å@¦äķ¶Až@¢‡w2Z$@™¾UQŗé”1Ž(Į~„.©šŸķaŸ·³yÅŁćSŅŌ‘©Ō“Ē1–åIZs¹”†å&óö~å™Ģį[>žœųł«ēökĢČ’2*c€õó8߂åhļėč†Ņæ‰]‡ń³Ó6ćfÓ±k€Ó.Ö?īFĶ“’ńŚ>Øū ĀóćE »=˜ō·!åńCM¢>’›‡ ‚)ɦ@WxąžÄ©ųjŲ+QŪ½³&t·£÷ŸÆĮ7|åø'Åø“±PYŽR}k@£ē„Z¾¢KdQĀĄęņCVØĪ 'S%=1š<ĒQĘfČ;e”#L!Œć8ČaQ„F”1 „:Ū§Šź÷'ĢŽ! ća*"+e" 0"-ęJ~,c.Äņ*Œ ЧĢA $ „£ ą9h¹ģż”r„hŒJÓįF“¹)5ŽŅ@aˆ(Ż›FUµl ”TąĮdÅ&)7Ÿ“öƒmŒ©Ņ_NZt(LĮÄAl l,³šäßéšĮ+OĘ©§®™9…±Xæ~ąU<’ĀĮYMė%’õŲiDŠĖg(»LžĖžS;ē‹ü—źR&²ŠĖä€nW8ŲĪ ŌxĖØ†&g3.l»æłUY_-äæśćAÕIyłąŠäß^³ńˆ:É?`’@(]s32›šéü©ĪöstŸĢ“o›`ÄĆ«ŽÓÆ\Ŗw5§ƒ£ėVt··/90ķm LĒŻbF¦mqƒ\€Ešōެ—uÆæŹö ‚sœ@Żķ3²kjŽęŪ ° sod†2ó‡Ķ§@[±RØŃGžĆ?küB‰éÅGžą÷Ļ@Å$G1,č÷ų0ģ@ÜßÅNö¾ŠĒ(żŠœxN/~¹Päæ[V£÷?oÄWŗŻ8¹’:ʇą‹LĄ”iz%£c8Ķśł˜‹H‚ŖsRĀō`$÷ưMäI}{§”ā;#%řWb­6k!ł×r’ˆ\īrŪµĄØvøĶyģfüÆ>Įpvq96äßL§b²(šžöÓēā“ÓÖąÕ׎ą'w>ƒ{~¹Édū«Óńēēm.T©Hj9)6™»äæt¤14·³H—ņ’•öMnŁĪ ¤Ų@¬Mņo&®q俌(—ĢÕ0ņ_FäæLZīŪQLžĄļm‚CXĪųæŒŚ±6ø'łN«Oˆ%²\…üŪž§ņ_mŅFBbP`&É; ÖTŒ~# 3m3ūžKe¶~āLB 2 /A¬]2āŻ8•n]38ÕŠf}¼ŖšæˆRŌ윭ægŖ  6 žł’A«Ń–ēeĢęÕµ½ÅaĪk6ƒm9ŹĄ$žz Ū7®Ę/N܀Ģ§Nõ ģ¾Ē”#œ€ƒ.7śCM˜ģlGŚ‚ź å?tA“y lZ²öcϦ@?y ޹¹ ?$‹fRGB?¾wŻæąŽ×a»¦b@,ŠŖG”’xʁ©µ•ȵJĮź ĆWP’aŹ_¾«LŸĻŽŽš`¬Ō»J”—°Qc€ČC­KeDBŹĘ˜ŸÖ†’’ r*O”÷2Ęšfü-œ:yf}07䟶•rÆ÷\økדąß¼†?<ņĘ izöŁų›kĻĮ„—‡¾žIģß?V¤1a+£`˜X«Uɿђ¹¬jP>Š łÆfguR\N€ēžüŁ4×äæ‚fäßąļv““‡ą‚w9éß2€3:ĪĘpzƒŹ%×lCȲņońҜ;ņoćŽ`e(g¼±–„õ Ōü"¬tNņNŃ×4€ć¢WY"`ąf«ą>į=֕_œpp”¬ījė=؟<8‘ź< L¹“ Ē„ŠO‘”ųśīćčk݉Cū÷#8=‰@| -©4Ś%ƒEESPژŠ6ĘŠ@>ķLōÖ5ła ä{wom/0כm˘#̉ą€=ańŠß| “»ĮōÄ­!·¢[ēBÆF"#ß½1IĘļĄaщƒž& „W ^Yp€5"&›żš&œ“¹ ?XLä?°īŪ?‡k>ō5ąpņŃ-3N€wu ”0höB’õŅ&×Q‰ēĄ4ĄYeCW#Čæ4Šü[X0%”śŅżčńtW'Å&ś4‚üBpöY½˜Ę#ī*"M²¬į§?{7ß|®¼ā$|óÖßĻŹÉ r8xl=¦/æÜæ`äe ł/Ÿy¦i©‘#„łÆfēŃDž å.'ż[FcĄQv\Œ{߅$WĘj‹”›u6ˆüŻ»jQµĆŠC£šB Ć’@Ė–•ø3|«Ÿs°¼C@ĖazH%Ē€…ß»œ·³uzڃž=‡Å•Ńdxåh¦żHHģO;)S%¦rśŁĶ¢ž5ūīĀń}{šsĘą&)ÄEœź’Ÿā(&xC¼ˆ‚ˆ)х ÆćĶ혨©lŗ Żv°qĪ9|s[>Ąpé) żūÆńõæū ¾ņ£c”u3ƒŖßż’ƒć£<;ŲėöćPk'&Vw#åņęöž×ł£L§@/^ƒŽmų !¶ŖĪ+Ā~øļøŸxļHõC£4HBĮåfŌ™ Ńšķ¾Œŗ6±PJf6-!ŪT«^–Ā“Ü~~R@šUX»°TŲW_Ož7{/  ŒńYÉpƒ uUš5ŠüŪxš72é_„Žƒ‰Ch[ąįs—ł7,ĒV<²ņ~Æ>Ÿ/ķčCyĀæh<×_ÄĘķšśD$āŅĢéŻøöšw@tņŲõę0²Y„äčł!’Õģ\0ņ_On3¢oŌ6äßŌĪeņæ ū[Į$[Ę2j…ĻćĆį‹šPäאh¶A¤¼qäߎ£Ež«-r6k¼I@<›{ĆOōīģŖnvŃÄĘ4½Ā ×a³ 4tś™•Ō]JxEź÷łW¦¤ĢŹH¬5„¦ÜjLŖe“+€•’ßD€J(FĄœ<ܶ¾ēxĻ‘{äŖ†„õńłvAćM¶M'sż–m ¼žĘĶۈż’DMōéŠ{#6ŸmėéZ×"‘ńÖ÷ļĒ-±$¦9G£ĄšļæFęå·0F9ō öx¼Ų׎Š”ö•ˆ‡š”x|ÕK’Uƒ,ƒt®3Wįū” ŠŻē«Zøķ³ųHd kĘśŠ…;_±LŸ`ŚÓŠĀ-Šq^RZ˜—@©ĮcÓ°b*årĶDó¹Ėå  hRJå*9r˜sņ_mL•žrābrpĮG {b{rķóDž‹“"P5ż§E))•8³øūÆ{^ľt?’ ĒŪž§čénʍŸæßūžćĖä “ӌü×c§įBżķAž-%]Bp9½pŠž…VcG!ŗ;ŗq29œ•w¬ø¬l<›Ÿ•åĢ;ł/€i@B*-ķ—æEå’’1FĄņ9tG#ŠÖyņOˆĘ "®<¶’ŹK ]Ķž°”ŗ"ń@ėt:ģTUaęōJ8ĪZŖJx×±óŗoįܞ­ų[0}»ńĆÜˆē’żKųś·ćdµĮūü÷EWń؈ÕĒ­ u,Œ“¢VN¾(ÜÜk6ƒP'†ÖdLōĄĖ’öKÜrŻ_ąĖM~,šäŠ üūżČ<õ F8Š>Į7]>ģ¶¢æ­Ó«Ö@jłĻ¦@?q:nylj„īów•{ ŽsŪCČ:< 4ē<ļm9Aa,ēąņ©k &†;żM#Ŗ’r ÷h›ä.’žUś‘§1˜F—»s~Č AK„²Čde“µśKĢ'I ŸOÄ—oųü.¤Ó¾wŪˆDR%āł/µĒ@āŪ›ü×c§Ń~‘’’£‰žSŹ!čkYh5–qcsĻVL¾9½ž]ŠĢø–%²lÜkėzlłÆ&¼lžźĆM› lÖĢrÄ„üŗČ­9#ś=O'ż4Ÿ°ą@ĄøŅŹJ¾m-„:›*©½ŌŠņˆ» ĶiÕ×:lńd]®„ąšVęb«ī…Į.»xßüŻŲ:²Ńæ·ßžy(¢ 7·ćĮKÆĮö†Nš@YCq"3ņWŸ’bt†nŲ-6ļ)µbĶf°“Ļ…¢e‘PćĮ‹ßŗßųĢų|W |N2 üŪ#łź^Œq‡»\.¼įoĮĮ–Õ_» éÖ=č_ʟ³^$°t ōCė°-äĮģ+ĖĄ¼ńŠŚš<°zšW—éżO>üā·€Ó \’Q`ŻźŁcüߥ…ēßū)—¾8’,ūś’ķ•8å×Oc’ų(R.72¼ŖŲ‚,źtŌRźÆvīՂš’Ś0jÖ;{óO=q a\ZĪ@c ()rźFófėzX=Š łÆ §ņŸĒ¾Ä>“ˆM¹Ł§BcČæžmeŽDŠÕ,PJį@gš«ū_Į'ÆÖ/ŗ_žīuŒĒĖēŖ‡ü[bßN£æēœƒ¹ Ę6‚üWü8oäßlnć%ycČæŁÜooņo(]ĪZ³Œ¹ƒĒåʦÖ-H§Ńē9P> QäæŚÅŁ(ņoń&P ł/S2Č4 [šiiÖ!@ ”l¦™F œ¼’ä%™®Z‚.Ž€HYGk<įõ§ż®q—Ä,“ŸćQ”6›18ƒ}üļūvŲą¾ §Oć’Įƒøó¶/cŌåĮk¶ą /AŸłl¾ ĀY Xtø© ļŹo‚Y’3.„¶ķlČNC¼£Ń ¶’’Æ=ż ¶cß ūņ0żŚ^ r<ö "^wyšŗæ{»VcdżqH4·Aq8ė×Q–@„ćŗp+lrÖ’ū# ¾w  čŁM/žs½ļõ=Ąķ’ |įo€Ė/>żU ]6īG€śš”÷’ē“Ąæüpčˆ}ż½np_»ē%"X59†–éqøćQšf„ wYŁ_d†ĀP~ć` Ė@qØæIŲ¾•Tr˜+V}®Ā„6ÅÉm(ˆRžļŸŗJÜ”VČ’bJśW]xÅcMĮīų[ƒEžĖ'.m#††£šłœšśDSņ]]A|胧 “•1<Å—oƆõmÅv`äæ;+ü=Ožė°Ó"łÆfēü’MMmo$ł7śŪ-“Ńį†ŪåÆ>pĖØ+»Va%ķFsÖ8Ń䜓KóXh6_@X×ÅŹĄĄf£&©`Ņ,[-H–4“šPšÓÜ^€€Q  z9eP 0¦€±³«Šö¦pšn‘ĻlZåAŠ;ė°XŃģĦUų\³m~7/ŗó¢Ł_l£ƒ§š¹źsPr”ĀćteĶŁ”V|^IórF ŗfJõeå˜4›brŽķ£ķŁß”—RdżAü?Œoóö&£ųÜĪgńĢ?k|“s%NꔌūÜŽÅĮ‡ē9ī`y Ą-nš3mf±ńhŠyaĻĆćŠ~ō nŪŻ‡÷\vŽŪ¬å½zmąwOCśÕcˆØF)Ć‚€Żn7öų[p «£k6#nƒā ŌśŸäŚmøTä±ĮαŒO½Ón.Ä E/ó²ō}’ŗ#€0ĢęÉ÷QŖA¶× : ·Ó+=XŁģDVVńäL'|ō¼NxDÓIWß…ūm?ŽŒgšŽ“›qp$ފŚB"nżÄ:|ś»‘ĢčN³ B(~æ}¢Vµ>Ė5šü’ęöHŠ«”ŪĄÓIpw ’Ŗi1!MCˆ1›įm”˜$”`‚ņ˜tzńń'Z‹°ƒ8ŹvX†ĖĀցPÓāsÜbcģ¢ČPˆ\żÄ'’ŌĮ1ČĻģFę„=xėŠsqńŁĒa‹Sœ;Żvģśóß#64‰)J1Ā;pˆwą-{Mč_у‰õ'!éCµJž"˜”5æŹ•Ąuśq­]§£@ȟ ¼n V'óüĖĄ×žnöū©ĒĻī˜uœrÜlG+°ļ°]-fe}ö œųįÄžč&¦'÷ ūPŖ9Ø ¦qöŸՋųü IDAT¶”fłŸi³²ļ `Y Äl®ƒ/„.ÉFē¶ö$~Ų¶>ó–ɰ˜9¬AÓ·Pp`D‘“¬ävǹs€ł"’V`{‘bŅQͦ‚Ę·ā{r„f« ~ņļõ‰ų»Ļ]€»ž<Ÿ9¬P¢Ŗč·§X˜ńr–,†CnÜpùp¹ųŃ<}ūĒßæķq¬_×VDž‹m[œäæ”īZ&Å„ŗ+?oäæčĖ"%’Õģ\&’öąq!˜d_ Hg2xjūv £µ© gmŪæ×»Šj-£BĀĮ&¬Žõb·o'®™ŃlQ”©¹Ä5z90*)ń҇õø@ĮlĪ@ĢWŅæ*2ŒČ‹‰p[j©LÅĪč85|”e¤øXPuņBŠÖāÅ©§¬Ö¤ø³S/ą‰$g„äł|NÜpù\ųéOŸÅ®7‡gŽ–² Žxc Į€ 'ž° ?‘ū9äæž#Rl0‹-;—ɉ£“üSBįó„ZšńźīŻųī]wX»jž}åüņ÷æĒ®¹×®]hõ–Qkŗ×`śõV§z±Ļ·»ņąjo’ē‹üW^6Oõį¦ĶÖ$šPĪTY4“ēÖ Čńl]DnłCc¤8 (čĢVMĄ8FØP½„R<<žŪ-Ö±€āMć“AĄ‘.8q6ßąšv¶ļbm‡{ĘŠŻźÄįŃt=*Ž£ Ō”؂[’¼UH5&h5äŪ™Ųöņq~l —Ł‹š<jĘÆŽ? ņs f“^$š›lXŠ˜wĄŪ,ŒĖ9pö…Ć-ˆæō”‡NFM%0~÷£8ü_`õI›pü©Ē wc‚}{dŲßõÅŻČüéÄc)D)E„ć1Źqr8Š':Ńļ c°­ ćk{o^ ¹mųģĪfEŃb +ø¼–ćŻ. ŠßŚÆėžy 8åx½/žŌĻ—”<ēŌŁĻ„[ÅėG’96~óŲ›Ępt р’+X7Ē®…įū•Ś©¦åŠ¢gU¬Į©M¤ČYڐ˜RMƒTžø,$śDgĶH±Ņq„RPj²öGeR^:0’Ń>]h(ł7čˆÉ1HĀ:’ڲ„{ŖK7ŚóŸˆgńśC8댵xöŁčėŸ,ŠŃĄi§®ĘĄą4FFc($‹7\’N“4{ń_’õ"^~õH©x€8<®½öp»xž…ƒHē¶,5ņ_ PéŃsCžė±Óˆ—ź’?b‘#%—Éeų—pāæ»vįŪw܁SŽ;ŸžČG :’ļĒ?ĘæŻu¾wÓMąč\§¾]F­p»ÜčlėahĶ“cÜ9bŃŹ%ēžXQā2“Ł(KXˆÖ×r`Xt›öfī*īīėīk[ęõ#Ü åȤ†F0-G0š–pdū|į tjŚÖ®@÷†nt¶†įk Ćō Dc@*–Ī€LA™€|h™Ż‡‘ĢŹHQ‚¦y“”ĆĻcČį°ϋ‘p&[{ķŻ¢gśw8Įœ.°Œ•{°ĮėA“y lŗ€Ümš!ąuāÜZĻŻ-ŸžįV Ōßžßü9½ŻćDš¹«k•\.9ķ·ü ­™šā“K“"éšAótü6 ą50MØīę“u3¤„0ØlʃŹ;”q@„,ÓśėIģą@4gŁ’' !Œd²q€óø”&ÓȲ¹É %’äTž¢~ņŸĒįŌa4‰M‹³ożLÉ’Ģb¦|Ņ|˽÷½„޵āo®ū3Üł³g±gĻ(!Ų²„żČi „ąž{^,’āüĶu†®® īūÕĖxī…CåŖާøśŖ³ŠŚźĒwæū4¦;¦#Idņ9Lž@#’(śR+ł/­¼P™ü›Ķ=—äßln³m#Čæč:ȹ>fDߨķķGž9Ź/ŁÄ#ććų—;ļÄÉĒ‹Ļ}üć 9Ö"š<.»ą|é;ßAßą Ö¬Ō“ų¤3øœu½Š\Ę`E×JŒŒ`EŖ >†4_ņī³įI’ę‚üŪøCXZKTÄxŃPŽĖ‡šē !¹ĻśŪ~¦0 Zž?» ~š­“śRųŻ<.:„=m.8xRä 82žĮŹ''3ą9‚ž± ŚĆ"€Õm.ną{qB(S!04£ ¤š]¦¢fY­.Ń Š—¬g\ˆ”w\ŒŪÜž»;±uh.›Ą·r+щß7wąĮ+®Ē‹sž÷ßöŽ]šue‚u„GvLą3£N.:źwŒē’ćą¶õß(+(0ÕhErŲ °ՇĶ+ęøĄV‚\4€źßŠģžuP¼ŒģțˆEĘ1žŽāHFF‹*”åš(Z IÓƒ nč).Ečéēōš€‚,R<å0M8Lš&D'Ę&›Ā˜nėD¢g=Ņį(įVØNWåŖĆ &)ö×L™čł[p6%5ē¬ĄĄpĀą3­ž嫒#¦V8rr*‰Ū~š8®æīųĢ ē!Iræ ™¬Œ;~ü4šœį€‚ĄįS×¼=ŻĶxč÷;ńē{ĖU'„|ųƒ§`Ɔ6¼ņź¼ļ}Ēb]o+(%ČfüźžWšĀ ‡`tĘKžˆž\“RÖ6÷䟠¼Ėŗ¶Č¹6óĢ5ł7±ómFžĄē —ż6—cųžĻ—(āŗ~p†üēōėNh|Öüż»ļFK8Œ_vټ꺌Źpt“w``h=É^ģ ģœŁ®×Ȥ‡Õõ\5{>ŚCé3”ŒĀ’@‹d“Y,æ.¤$ē 3a’ł­” ņpŒ ĒČ ĒĄ”, ԜLCV‹Ż'‡/\¹÷==Š_>=æ›ĒõĶfŁ>0’Ęšv8Ŗ“`2&”%衚öĘ9E͹E€" (eŽüü×R„«p’ū>ĮkÓcųĒ?üēF'ńpĻw’}=ų‡>…ēķŹÆ'$…R©_S„޵ń¶³,iVŠ#)`ļō¹ø·ļėBŲ%Ś!ź!źG”qĀeGLu‹±Ń€ļŠČ‰­?_ßüa±F*m÷6PÖ¼G¬‡q6÷jčīC/“PXė*hżė!Ē÷"=²‘”)Œ¤šIY²2š Óąc ¦Ā QÓĄåęe”B ‚4Ē#Iy$qއ˜Ē‰ø§q_é5!µ‡ ę‰æÓ­’˜3©Źś;0‰·n£"Ø2H‹gŲ=/…øļ!ąS6&łĒnҳśŸwV=3ŲĒ¹ŪŠyēĆ'Óš%Óp()¤yĶßL˜×ķ+AµDs B c~·Ž<šJ›õƒö4®V pĘOĄi€B€BōX*mčą½n£fkäߖsß>łÆ>ĘĀ"ČāõĄć.淏NźĪ^o®1†=be{ĶIĶ—1‡XٱĆ#Ćp©“eŗ0āh(ł·w€ĮčF‘’jĖ‹yˆ4“Č|5’Ī‘{R“†b¹½’ŠĄQBGōŻt&ńezœ0a`”iJĘ4Ūs 8}Sƈįåś2MŠw†S8c“žąąˆ¾eóŠhŻ­N¬ép%¬²ŹÓĄ4@ќTfō}žõšūßßĮ‡Ņ)lłĖĻį«^“ķ¾ĮVČų šČ›/Į’ŅqĒ#ƛ„ü'Q!A ¦‰»._{łį¬7ŠNJ.°GöŻL¼£-®u5&Öż„ē„)”aMćŚ4&ō*šóLؾ–4#-Q©‹ Ē7aĻŠ{°Ŗéé-7œó޾jē æ}Ż.Ö/@©ū9sœ°'j ś;ø*ō·õ€µõ@ķ>šgŹ›Æ@źGjøÓ£›ŒC̦!"§’†3«BŌ(Lw ÷ĘT£²ƒƒÄ¹õx‘]ČzZ‘mB¬‚āo†ŚŅ ę'ž„p*`DæTÄė“”Į¹ ųĀ?Ż+¦ pęIĄ¹9—ĀUW7}Ų°člöŠ÷éo˜ć%ɋŌǤj[TUg¤¹Ŗœ±EyņĻa3÷UU h)š\ŃÆŽó¹Ė® ›ä1&ż+ž§|Ą¾ųųxZÄęÕÉŁÄFd± ūżļ?ŪN\…—vōćž_nŸÉ\JŠ·nķĀåq"bń īųŃÓčļ”™61‘ÄäÄABš‘ŸŒ'ńÜsŹN‚įö³æ™‰5“’²QeJäߊɱŌÉ’RdĘ6@)si–ÉŪ¾s'†ĒĒńł«Æ†$Ėø÷į‡ńĒēžĆ¹§ŸŽKĻ?MĮ žy»aÄ\YŸŻū÷ƒ£ėWÆ6”łģĖ/£%Ęŗžžy“d…čj_”įAhš†U©5Ųė³lL-d¹.ņ_MxŁ<Շ›6W»ét3Ž —…¢AKIz†Bņī3ÉžōEc`€h„‘™z@€N‚ JtbŪÖņÉjĆdLFkpÖyqboqRFÖøaŗ£ąŠhœŲ„‰h•Ģs6KeTå•“ ¤eŽ“‹f¾Ä_a©æB˜E ¼ōĪAü¢æĘFĒ=p;NīߋCщat¾ö"ī¼ź‹øE¬n‚Õ¹–iGIpˆXĮ±p÷ė÷w‚惏nūļńžIłōyžĀ½c)€ÅĪčžæ÷`„:¦:Ąu8]Ą’Ÿ½/“£*×Ļ©„÷ž}&“Ģd߀$։Q„Ė¢*\®¢ā¾\ÆėåzŻ7.ś(zEEVAdI’!{&™}Ÿé™ž^««Ī÷ū£ŗgz©ī®žéÉyŸ'Oŗ«ĪŚSĖyæó}ß[*šęš“oš c['čų3`śĢŪ_?ė f^Æń˜Ć røA.ČC›j@N7ØX@)Š`ē-@g ⾇™3€«.›866šł[M¬=Żüg…}#óū)'š’¦ŠE͐IĄ­ėšÄLÆ I`‚ƒåóąHHå7.éI‰żŚØ£VD31u¦H°ZC—jIš™Ā`5$X5н…$™zøDĆ\¢!Ł!z' ĖNšTÅ{ŗ·ū>ŸŠ¤å£µ¶¦Bė2ÄD¼?g A„Ķ#FÄd.‘& °é7³Z'‰é”Ąć‰ Č6ųķ/v “ņģ‚©„Æ$)łĻ"Ā#ŪqfķépÉ®ńvČ~¢œÖFņą‰+š°~Żģß?€{’R^ņ?wn >|ķé‡ćųŁĻ’…ŽŽ±Üń§¹fÆ_æ'Ÿl† lŚt »XĘ$9ł·ś»•@ž­©ięńcä?c„Ł“)JžsńÖ'’ąuWģŹD[žŁ“ Օ•X½|9$αfÕ*lÜŗzā <³iV<ŗūūqķe Ż`nS\Ž\×é×wļĘm÷܃÷¬[wĢp”* źjźŠ7ŠoĀźx†ćē-łQ.ņoóY0ņŸYĘžC‡0,rˆŃe9?šīü)C@*īŸ“ pĪˆĒżs¤r‚DńžnxŹ——}Óī|żó×jü*Zū¢h®Ė4f“÷›;ž©ä€CĮ«xuŸetgÉ0„@0’ŠnÄhh\ÖŹB\£qŌĖ ö8\ČÉ”ų×_`uūÜćņįī+nÄ}UŠ’qķŻŽßŻ÷Sģŗį?qæ>Th*¦ßķ~höĮįs.Œėž3H94Ż_™:ļö‚²}obšžÄķŸB·G,Ę Öf„›ŗ„DććįB]“9…Ō’Žó’żĆ™äŲpę|œA°°I[s`ž&ÓÉA²JCŠ7Ńļņ%Õ±!E†Ä Éć7ēÄ8—ōķöö&4,†•:@ė*ŲcDé ³aae:Hf Hā€Ī1’H‰³1½¼ģóNÜąGRŅæāÆ3ÅFBčŲx §Õž ‰„Åó%’å ‘8ļ¼ć „»īyFRĘ'›×Õūš±ž „_Üń|ņ?QoÉā\ųžåčźĮ’ø-Ļt­É¢Õ›Ÿü˜ē“‘’Üž§%·E?å"’V' _7éǦ“üĆśŲŪ„ü3Ęį9Jc’暆7öīÅ%ė׏ĖūqĪqöźÕ†€ęĘF¬:į„ńz»ZZ°zyīFfw?~|×]XuĀ øęŅKsĪÔŬ™ĶčģaVd6FÕa̰¼w‹a2¤Ü^?v^ŹÅĻ[½ŠN•Jī>™>!0˜+©$Ūg"1ĘR ³‰)qbćł.`_Ż+WÆ->> č` k×>3šķ?ĄŅf¶CĒ@ »:Āež²©ŖœiœüĪ1.zv Jdˆ8WĘÓ9Ż”„d$Ȑ³{žéž’<ńYQŌ5œ°;¼ —OlŌ’ķ—XÕ¾æuūpēõߐT¤~ϵŲŪs+īāĄž ĝ GųŻī§—tGW]Ó} ’Od=*<\ķ>pK 2÷ĘQ­łj/Xµ Ö2]w¼K–ć’Ź>WUsxvüķā¦<žéwœœv”PāĪäтŖ( sS -ž9#¦Źšå«c3jƒĄŖeĒ{8}ÕTZ-*ń5`pØ©^ß €~}*­–~Ō”0T]‡,“’ųnJ•äÄ80ėģļsŗ`’w—l^ś"Ų š©DÅ0Έ1ÕAżQ‰/˜0iR€Å”$%%bL'ʁ äH,`õD—*|y ‡’”.cÅó/łOµÓķAµZ‰fOsŚį"äߚ½f‚€½ūś°dqVžŌŒ×^ė@zeU•š±ĪFM÷Żæ»v÷$’Ŗ"ć?®_“4lĄŠŠÄĀہü[4tųɾOĒČ’kŗżł¦ IfŌęU˜ē<#!ąī–0Ęp|šĄ?¾ė.Dc1ÜōéOƙ ččéĮwīø‰DėĻ8Œ1<ūņĖxqŪ6|ēK_‚ē˜`Ś1£~£fr׆č 9ū ńxIļU«»<»LŽĆå"’„u_°pz”ø,÷)Åp„˜ėŌ’ÉbD˜0?šIĄ€qA`L¤ņ00SR™ 8…ėˆ÷¼!»ē®+eŲG2:śĘtĪŘʵÆ#T„˜aRü©æę,@tĶ%x’–'ńɑ>|&Š‹JĘ1TY‡›®ł:9"cX'«x3怏<Š…ąpd։—ØRųÉē¾O^»ą[üUc IŪĢēĪXõŚ÷_8šļmĪķ[śoøaėß>²‡3½ ÄUi)«u«ĻŻpŹź½ą×Žģ]’[J,Xrl&•ī~@m“øRk@aõ†”lė³ öÆč „ V©‚†$l¾Bh¬ī»xu; W_:żžķ"‘'‚L²0ĄćŁYųĖ(˜®ÕÓeüøóāO&…œ(ÆėϽ»Pr: IDAT-Xv¹P݉AĄ#ĮņÆŌ©` s^2éY†&3bĀ”żcŒ()zK,iń g¦†Oµē÷Bė°:•lÜĘĬČG °āry/iXÖżŲ'’©»FwĆ%»QēØAöźĆł·ŌbgĄoū>ö±spżukšĆżķÉģż\āøīĆgbĪģj<öŲv¼üJkAņW\q2fĶŖÄ#lĒž=}ŲVpēX·n!^ŲŠ‚DĀ@F+yČæEĒGł·ŪąP’’ēY”ü[ōrŒüOŠģ€šGCüh€Ŗ˜qsšnßxWK f54ĄēŲ_øūĻĘīpėg?‹šJ3üu`x·žģgšy½ųĪæˆ ŸéxžŁgć3ßśžy¼’Żļ.ćlŽĮ 5ÕµP‰„Ž™‘f“śl„—ƒük<§ŸāÅó¶™ō/») ƒ‘¹K7K%ś3×G|ü38%‡C‚ˆ ’RłD‚(ōҼE #c1B±Ø*ĆN5Ō_įłœQĆHĖžÆqš¬T ĄŠ31“āLÜ ąV•ü¼ęńū°H‹ćüł‹qÉ$»,ˆ’:SY—/  ŪJy6|łģłOķŗģÄæķžßóā‰ŠUŗPē‚é£y±±f÷ƒ×.?­< I@ŠP‚*A:¶(_¶ ū8"“ŠĪr˜¤Ź§„pécQuV‚D`$†‚&ķĄķĪ9uŖ­”£a“< Œa˜INŖ=ČJ.éŸR†`ĀßQ)z‡ŲģpŠVĄ4S˜²B8c$ó¬żO “ņģ‚©„Æ$ŹJž‹öS:ł¶į×qFķ)š)ž²ŽÅš“Ÿ<…ٳkĘÉ?\łžUXvĀLlŚtOücWQņævķ"¬^=ÆæŃ‰gžµw¢˜)¾č¢eX»vtCąłē[l‘’Œy#’Y}—‡üg'_“$’S™ē1ņŸ^÷Ń»ūó››!I^ݾ½ć¶źģ>p Ćż’©ńÄ /ą‹×_³g0„r÷ݐ$ ·|ę3šy&Ž•~?–/^Œ]ū÷Ē ÓĘjėŃŁÓ ØŠ× ×Ż…˜-P)żæ)’bσCEž ĄČk‹T?2€Ģ$÷Iæ~€gd.9%’ Ą ą€é])q&{jŸQ}qŸ$»&=č#ū»G ƌĢµ^:2P„ōF¹ĵ8$9’ßEš„lw!ņ|ūD\z5r%/Ņ0Y‰ĄRpBĶ_ā'¬łĖßc^< ˜!ąõƒ ģ›ŁÅńMVp:QÖTøŚ,·øLŗ†ū&YĻW]¾ ŹiańQ„·?ĆXyFtd†a Hć²,9H7¬zŲ$„sąHÖ)äH±o’¶‹Ā…‘Ó¦ž]>{<æfjMs¤{Éŗž[ę­ž»U<ĻoŽōP)¦€L¹æäwY’ÉWLo3/c 9 Ć9a[²?7ÅÄ!%’ö/^gŅżŲ+hŽW‡·"*bYE'GžĒŪ5[‡Ę柒īpę™ °sgųÓÖ¢ä޼\|Ń ō÷ń‡?¼j:3fō=±ü[¹²k×.¾}żŲ°į@yČöų,ęy8ÉæÕźōłĻj'½•·łgŒĮu”J’„ąóxpīš5ø’‘G°yūö¢å£±Z»ŗpüĀ…€7÷ķĆ’=ų >xŃE8ż¤“ĘĖ=öÜsŲ{š >öd’8cˆ[Ä3č襎ÖÖÉOč,ŃP?#ķCcøøóō‘’¶Ö6 04+Œ@T •é?¹ÓŸl$µ6 ¦Ü_*€IüAĀ1bŒ“` W˜ppC×CŪ·1³#š.°æ#—˜1äT£ķÕ®Ą€GŌ$ÉT¤üėŁéą×aČy\žĆV“Pł×ŃO÷|»śĮķ/޼fZć–:³¾ĻY89ni—ŪåŲvqDzl¦'+D āž¬šJ:/]}˜1 čÅ0œ tĘ`0ršāūtHNvē<¬@ףś–įŒ‘H_¾+ $Ź4~ %NLzRŠ 0 <žnG†ÅZ®ĢĢ|=²<­I’J4Dä/SŚOnU:&āŲ2“gŌ™)愬Éav{¹äŸeōzXwĪb“·ć®{6 ‘S!ż·®¬tćśė×@Kčųæ;7!Ó³śžXž56VąŠ+NĘšp÷žīČŌ,ü#»åüŽ÷"‰ą{æśf54ąÄ„Kįv:-õķ9xD„-Bļą ~tē8{õj¼÷¼óĘĖ„#üé‰'P_SƒęĘĘģī=˜Õ»z÷CaFm-Ļ[Ö9¾Żįv¹įu{Š˜ō§B«†Kw#*[8‰ę{–¤/ ;äæ)·ŻüÉ?Ŗ;÷ŲH” ‹äΠπT\?ˆ Ąø`ŒiaŒ1Lc$Xf"Alōžg ߏK$Iµ)~äaWėHś˜SŠwy•@G­æwÄå ź’Ä(}y™Źš/YÄėf¶€|!R‘@G–)!„ ƒ×®¹h,1ėGūƒēćOø{ĢčćĢ蕠·Źr¼•3½ĒĮ‚½5-­ĪłbGƒGĪ*Ūė/ßFń‘øūL³`@ĻNī™Q“¶²E^øuas!äÉä—/ū_’ z~;†:ʔ)Ŗ@p čéŖ*?=œvpņr`0<ņ4‰'œy²łLŽĘ€'Ÿ:z€s€ ֕o‘øÆtʑ8tÉiŅY.@ƒłÓP)Ąl$0qńė0]a$BO€Ė„\öµ8—Ćƒj]0ąš£…å9zœĻŠh4Ҝ™Ē‡ž_ķģH[v™3ŅE–ü_Z"@.°–L=©RŽćI9H0€EāCČ2(>0Ę@é1%÷K'’ÅĖXŸ°C@-OOŅõßźü˜>†mĆŪqrĶ*p˦swQķ Žć'·=h,-®ēTH’­%™ćśėĪ€×桝wnÄĄ€é(dEŠŻn×]wī¾ē%DĀZƜ&Gž‹ĻsRäŸåĶž“Õ±é#’3Ÿvņožå#’oCöĄåœņkõˆ€,Iųģµ×ā‚sĪĮ‹Ū¶”«Æ5••–Yśw·“ iĘ øÜś³Ÿ”¹±’ą3Ź<śģ³ˆĘbØšłšé[oÅś3ĪĄeēž;žH0 ¢£·ėĻ8#£Žö½{±s’~¬=åü÷ĻŽ–öv8œµz5.?’|8ŌÜLķĒ`µµõµ`Žū љ¹¹¬66Q| P"ł/¶<(ł”ę.¦E˜’¾ĢĘR Jnų˜” b""‚H0#ā`0?'½)!Ą˜BŠ"„ĮX$¼ķĻ’’“ŸÄ‘‡h\Ǯ֔˜Ä~‡k©ņövÕśŗ# KdĖ"E>Ć@©(`Õ /ølĮĒŲŌżé£śģY1£¢IÓŻ3 RgPē%tף$ų¬źC±…ŲŪ÷ī8ƒčęÜčäĢč`<Ń!KZ‡*E:ŻrljĶ÷tœ6ćö‚¦‹ŖĘé SXW&oł|˜’ąr€<Œæ\šśAĪ ¶ Ąü dG:Ż X¤|sWTĮ(Zk|Čģ-½Ąƒ]½Ą;×>Š?|äĖĄ.Ŗ*€GŸVÆ*šų³@`Ō4 üé1³ŽG?X“[ŲŃ ēˆq— ø$Iö +¶P@ @YāšGܵŃ!Ws<Ŗ6%¢R“Šx³®óYĀ`3,¹€č(ocH“µW39¹Dš0Ą$3ĮĮ@ œ$&̘¶PtµYZׇTį…1’Œ4™q·w>—¬å©\Œ”ŪF9ČāƒŲ9² Ė«ŽĻih²ä?…žPī8,HńÅ-ĒģŁÕxņÉŲ±³™MNEʀ«®>u\M »k$£S§CĮ©§ĪĮŅćfĄķTŠ?¦MŠÖ6œź8£g§SēŃh¦ėļIž3›ž(dŻń1ņ’6cN‹Ć£‹ēĶĆāyó –Łuą–/^ŒŪī¹ŗaą??ņČŅ„Õ=‘Hą‰^ĄŖeĖšå|¶lĮŸŸ|ĻlŚ4nx~ófN]±"£ķŒ1<¹aŽžłØ«®Ęö½{ńĄ£ā@{;¾łÉOZ^o†aą’Żv>zŘŪTܵżķŠŗźZ“u“އzUj5PD;¼€Q7EIy¾ŽĖLžķĄF?$ĖR.e1śBę6Ŗ8ČL˜œ’ä©’¹™{ˆd.€ń‚$nīŽ«Žø!ā÷=“H·NQü K™Ö‘€Ķ»ū ŻHŒ8åXk…cx’ŒŠ®ĮJg_B•Ó yvJ IJršœœJ(łĖFów1-˜UóHģ*’#ūŒwø&ĘźŌ@qč«’{U)t·*w&Č=ĖŠĶBČĶBøNH莦ÕԌ ŻĮUC§Ķø}ī!¾m\>EAĘŻÄ`ŻŚMŻr”żŖ(`Aš%RbŖ¤Å'Ę") Å£gŪŹa€§7·~xGŅp’›?W^|(™oó’ /@¼÷ü‰ĻK’Zł ĻoEŒqÄ$ QIEÜÜF@!$ ół”²‘žĄ/…DBUFŚ}³ĀAĒ<=Ŗ6 Žh$ų\‘ąó‰˜å*’\¦YA›ä0zU—ŃīŖL“łŖµ·78/j€0 ’”«` ÉE[2™ Oj@"Ä ID‚D†rŚ WłM@‰ä’°gü/Š}YÉæƒkt@•T,ļOü[&e³ Å ę×āœs”µu’xjWzÕńŚ©Æ\° K—4ą…öcė–Žō"8ni.æüdųżNhš`0†OlĀŖUĶxī¹}xģń~ʀ|ąd0Ęp÷Ż/œgÖ ł·Z ē,(K ’¹t:{P‡Œü[­Œ‘’Ņąrøßvó× ūŪŚ „@{O¾óÅ/ęÄ÷æ¾g‚”Žuę™`ŒįģÕ«qÖÉ'gTEĮ©+VdH ¾¹ovīߏć.Ä×?ń‰ńŻžyMMØņūqŪ=÷ä$LįĻ’ųB‘fϜ9½?ĄQ§ÓŪƒP8i(&†śh#ŗł·¤{°Mž.¾ųD†Ą}÷æ !(/ł_¾b&ÖÆ_Œ––A<ņČöŒNל9—\r"āq=ō6æŚCšxøä’X»vcxōŃ )ŽsĻ=K–Ōćö۟+>Ļ·"ł·ŗ.§šŲŠź“Ży#’S‚ĆQ$ļ-ˆķķˆkö¶¶āŸųfÖ×ē”Ł¶s'*ż~¬<īøńcV†€ōœšĒĒƒŪåĀ®».ĒÕќ9€į‘‘ńcDĘŚŗŗšŠ“Oā“W_ ĪķēcččéÓį@]õth4¹Ø®Ŗ7@M¬½īNĢHbäĀ)·7†É’Ģ26 34$OXÅ’€Ž,Kž/yŠˆL²Ļ@‚ĄHā$Ą˜H…A`„®LĘ@Œ T$„„BĒŻėõ­ü3?ģĒxńĶθ̌~§Ż]ėļŪÓ\Ł>Pķ hKa ˜ŖmÄģŁŒŹ×ŸĒ;baĢAƒęp «ŗ o¼óJģpøsVž+ó$,G„€Vx©ć3šj’Ž|eÖĶ»=ś×—æļā\ļævd“~[ČJ@^rĄ-n*ŪhJĒ€Śl?¾&PÓ ŪØ7 `:Ž3©ķ T{ ‚Õ0~õ4^¹äTŒ:”œˆƒ’1sžŽ]&𙛀ÓOfϲ®£ėfž*92ČĻo…1DČįDPq"čt#*«V)ķLhRĖ IBFR½t$•rĪ9$PÜKĄ:QI×ĖKÆL„\’& Ö0K‡% r…:$ŁčTŃ©ŗcīJ££²1ÜÅ\†Į ™¤^€É4&M,¹ ą…$Ɨ¤ń9ʈSažc2#&̤L"!tsŠˆé i$4Ź%ˆgĪQ®ņ[·ł¤}œ$ł·×xń:åX`X’óBe¬H!°gl8ē˜ļ—v¼ł·ZŌŲ$’`@ć ?ę̩ƶmH·Ff¶1sV>ųÕcųݽ/Ć0hüä©§ĢĮ„—žˆįį~ż144”giø’ž-p(2<jk½‰béq3°~żb¼šB zz‚…ē™öŪ+2NJ3ńś]0¬b{Ž0ņouŻLÆŖAÖØŽ‘’C†·šūæĢmjĀuļ{<.–/YbY¦­»Kęͳ$ć醀ōk(µūŻūއJīū¤'©™ÕP[;~lū޽ųѝwB’$ŌTUaĶŖU%Ķå×ü#¢±~š_’UR½£ÕUhļl’.‘„źx]½ł+M‰üŪy)?oõÜ,VŲĪSJ(÷1zH$ėĮĢōOIRĻ’ÉžÜtł‡c‚ƒ’‚Hb$™Ć&™ ’’ū@ cI·+¬é‰ūŸŠ„–ŗ=3×Ųņaƒn<’Z§–ŠƒN5¶§Źx£¹Ŗµ½Ž0¢jŗČŲÓā€Ģ q²Z½Ś‘üƏpĶč¾ †1YĮ ؉†ŠĄŒÆaXQńbE žrŁ xZVņó€é†Ū „ē6kźnė.TVoę0Z= b֒ EøC‰[&Qē°©lpróĒ“sD:ąō€.m,Ŗ„ ÉöźÉ (¦"²Æ /,›‹‹&7Ņ Ō×d~Ÿ× |ķÓĄĒæ|ņąĀõēZŚ€ÜD¢@]5-ųSī{qĪ–ŒŖŒ9|ˆI2„]MŃ©*Œ'Lfļ'0ų<0čą¢[’Ø[VōVŁ©·:¼F·Ėźń7ŒõHŠ)ˆӉ;ńĢ’é n‘(3F ąSŲķĻJˆ“D€É~I`'d%eįŒ#!X4 3cŪ'[ å"’åøkķšś2dü·CžS‡wīĢĢö4Y¶ņ‘`V“i…ܾ½;jė¼øį£gA’8ī¹ū%Œ…āć'.ØĆūßæ ‘°†;~µ@zĀ’‰åŅoļ}DĄ§?µuõ>0ŒŒDńōÓ»sꟳ›d¶¶ś”9ų·[I’°łÕv‹9•BŠÓūɨмˆQö­UQpįŗuĖDc1Ģ)⊟} żń±ĒŠ4cĪ?ēĖņ¶lĮŒŗ:,˜={ü؊%KpĶ„—ā÷ߏ`(„o’ņ—øā‚ Šę0€IƒĆ®»®hŁ·¼^YABŸp¬‰Õ' “¼·K ’“é”ģä?ķ¤•€4ƒĄYj””ėb<÷ĮIIU&A0fīwI $sIb2KŹ<§‡H¢Ś5é»ó—!öqŸ×]·"g@Gˆ€ Æwéƒ#į€CŃöyCÆ5Õ“ģU±kÄ­uĪM$óӓŖć ²)ƒh¾ēŽį+u3ńÅ÷~ K (•äaMW ¾W3 7 ā]ƒ=ųéo¾…½'Ͼ ]@a @+ęfj!ī"ˆMŒ‰ž%3§õĆå“›$D7N¾'“ĖRŲ`ńT:˜Ź®‹SnĀbŲ7Éz¾źĢ kp cpNŃņ£Ŗ Õįō ńÄ<<•¶R,Ö{=šŪŸ?ś&ඐZ-Į0š§g0Ę%Œ**†^=nÄ=މG‹$ģ’nܦѥ "™s@qźķ ŗcZxī›W,|מĻ/\ŪrŪģSŚžµ¼÷ÕŹę±‚ÖĄRĮ˜MC!ÖgBęÖ瘜”Ŗį,™½VāiÉlĀńœ<r•ĢźĀ° ;+‚wŠ“ņ<§ĖžōÆ0łOįĶ‘č‰ōäō_Nņ0D"ę{É_įĢ`ž©•.|솳ąó9ńŠCÆ£½#0^ĪēuąCW€pļļ7[’’Ōš…™:æųÅŒŒD”ČdEĀ’Å –æ³łWd ėÖ-Äh0ŠmÆugqRœK€§Ÿü[żé&’ꙏüۜē1ņoĀįxūķžŪ…ßćĮ蘿xæŌī’•ļy$ Ɓ‘`›¶mĆśÓOϹž6l݊Y ųž—æ UQšĄcŁźóĒCsc#ĪX¹Ņö8ß*`Œ”²2SyĪ„»įÖ-µ¦ņ¾ä,Cł+–HŹm.XŲv?ŒYKö†Ę×G”ÜķOIRR궊8ć$1¦Z ˆ 1I0.„A€a®Ł @Hęy²`œ‘$ įTcF£·7üögįH`²ōcŚ ˆ°įõ.½c`tX•µ}>G`ˬŖĪķó÷÷Uųā’”  ˆėž Ą|ū‚ƒ½øÖS;.’<Ė– `©¬`ēžO}ōfüך q6—Šŗu#čÜ1yõu„Ī•ž0»»ż-üy¾:) @"Ö¬HqĖ0Ī¬ļsNÆĄtpėĆ&Œ»øHöĀ#I7Ń]ĀŖW¦¢H¢¬€ŖżHüžE¼ÖяķöGWꪁ»~üįa ž¶lŽ_—Ģq&*C&Ž_ü ŚXc’Œ!§n/ƜŠRń’ĄŌH½e"Į"9T¬ Œ„Üœ:¦[µ„O˜³Œ,OĆBĘČdČBŽŗłAų`@¤'§a FÉĢ’Œ Į“Ęā”Hv{Œ1(Õy¢K2Ö„“+²œ§q«%öS&ņ_ ™|ó!¶lGo“?³lÉ?ģŻŪ‡ĮĮĪ}×RĢ›W›ŃĀŅ„ ųÜēÖ£ŗŚƒM/Ä+Æ“fōżŽ÷®„ßēÄßy--yÉzēóę× ¾Ž‹}ūś18ĀUWŸ‚k®=-£l>¢|Śésįó9ńģæöĆŠEF…£ü[ źł?zįT'½Ę|ĖcÅ҄ضs'[å’ųŲc˜ŻŲˆÓO:Éņü_Ÿ~’$į¼³ĪŹ8¾»„Ū÷ģĮūĻ?ó››ńå~_żųĒ‹ö—Śżæüüóß¶×t„æ2ēXM,7ŸĆäIł4›ayöūa²d„Šł$“”‚‚ ˆŌ1&#’˜ć€Ä“@ŒÉęśTfÄU–˹A×X¢Łß2øū‡££żÆžģ”ƒ® ükK‡ŽŚR%mÆßÜÜPÕöŚĀŚ]] žÖ؊ˆupÆĶōüé€é †ŽyUuxÅŖŽÅŁ=©ļ+ĻĘŠĒnÅē8ĒČSĆ%6§VXŠā„#Ÿē@_8mł+7æ£źöBe6l¹Į 0—K ęĶ—,Ęe‹qįéÄ“ÖĘÉ@«Ķr^?ČSä¢É†Ó]¾¹É ČU ĆS‹Č_6āwåj× .'ŠX Į1 "Ķ3¼µ0¦Ž·żc’„€¢¢ĻįĮ·a· ĆąÅciģ X¾@nį]ą™5Ų€„ĮgśD½t¢|5RĒyšk“ÕOšr3³d#2—Lƒ8™/Ø )@Ó@ „ś¬škr¶Č’$ȲEćś+֏”ÜOi‹K"-ĆŪŠéņ†.pē”i:>õɵøńēąŹ+VįóŸ_|ä,ų}N“µ ćÆ}=£ļeĖgałņ™8p`7°EžUEĀ„—®@<®ćĮ·į׿ڈ‡z==Įńķ”|ä_Ueœ³v!¶niOoÖržŁæ’%)Fžc‡€üē›ēŃBžĖ’qū­ʠȇR|źčĀłgŸźŠ Ü|ūķŲ¶s'„ČŸü'µūłX’ń‘`’Ų°®] Æ;s§öĒǬ††ŒŲن'Śüm»ūŸ‚ß—¶W«£“„»-R^¤£CEžķĄbązO½'hfōgfQȔ3 8 ŒK²q @`"ėæIž bI Ąq¤}aĀ æ7o¬lˆ÷³®¾½ ¢ĆÓ£į8žxé@¼gh“×!Ēvł#/ͬjŻ2æfW{Sm[He™ä_’ŠÆ=KˆNPž«C×°ÄéĆīōc²"°3”aZ¤@TgīŚ?õ'‰į¹ IDAT³æģūYŻļv<:ē”=·ēdys{sė,™ż«ŲĶļbõ×/;cėtŒ³Öī<å—ō`©+čƄÉJ`ž%¦œ™ł„åd@] bæx.Xm‹šQ¶7ߎĄüŁf8{ļŠŻgfü_²ø÷/ęĪ?ēĄC¾)&MžŽ=ŠśG0ŖŖčsøŠėÆÄ°æQg…©žģ/  %ņœĖB)‰SJw,Ź ĮgQI–]F‡ēœ‘±tyĄōĻ\€ –žčOå ­€¼Ÿė„„ 0Vˆ£r H˃Ą9#{Čfžƒ )@FĈ ¹7Šgõ )ՙ.…e!’vĪ–‹ü—˜ōÆx+ŹY¼"m×``f{š-š<łOõß×?†ļ}ļiœ|r3fά@$ŖįĶģĀ—› é{īy †1ń^ē\Ā…œ!„iO‘Ÿü3¬ēŌŌxššĆŪ1ŒŒaó궬ńXbg®™GœOģ2–2Ļ|äŸå?6)RlqeæUÉ’Qń">DPdŒ6'Ē#.§7ę3ųÅ}÷į~ń ų<ŌUWćÜ5kpīšĢgvw’/Zæ>ćxj÷’³×^[Rę’ūöaǾ}ųĀu×½mw’ĄåtAV艉-‰$ųUV;vÉ æ«­÷ŖBÅ y.Tė°Ń5f°‰Ģ’¦ģ_ź3AĢōˆ#Ī!ƒ7ˆ b’$˜Į%NLbBŹ’4pčČ]Ć1aP•?s(-żmCżSkŪY=3W]év8}Å„2‚€½]#bĖ®īQ¢ß©ÄöśmMµŪēÖīéšUq ¤° $F©½Ōēr)Ø.<;:ˆ“dÄŹĒ#ą†ŽÅuŲ•~ü„§PćµUųZśńrIŽĮ\ļßµóŸK{c«ÆLīóɋög|„ćS‚Aōp¦ļP¤ųÖJwŪ“×žzζjG Ē źö fń#Ešņ2r Ö­ŽŠ-G ŃĻ–œ µ 8Żž™HTõaģŪągw|æP[|8²ø³<wģ>łMsēæoųźfž€Es“O>ōi“ų_ņn`ρR{œĄžŠ~QIĀ€ź@—Ū^_%‚wé"’4U¶ėŽ)¢4©~¬§j¦4°=õDH}®‚„łddœ3Yņ}œƒ¬’œ·ĮABĖø³ Iń€üćŒƒ$e$œØŸiŚńԓв¤¹bq-Ī“Ä(9” »•R›ęP.ņoswaźeJ» ,K—ü§ Æo‡Aę{ē¦›:łO}Ó:^zéąų±«Æ: n·æüåóŽÅŅź1¬\ՄŚ:/^ŲŠ‚ŽŽ`Ęó‘’śzĪ9{:;GšņKķ“bN—Š³ĪšĮĮ^{­³“yJņŸ;œ’ɿޑ’#Žcī’EQSY‰oÜx#zšĘž=ˆD£XyüńeŽLKÄWh÷’āõėsv’’h±ūoĒv’M0Ęą÷ś0ČLQVÆĮØĆF膦]Œ”Ūi¾Ģ’³aXHyR4#Ié榈?ˆ˜IžĮ„)ˆ¤\3s`Œ &3ād&ˆ1Néš‚1r(Œ˜0ʏq”‘ß'āópp°'”ųW[kūA_ŚĖf­”ŲōgÅióĪŽų@`lD‘“.‡ŪSåź£±ŗ}½ ¾–(±ˆPU>Nj¹YķHMEąĆߥMZ|Ā›<•pćć˜Mwė.\}ĻĶč6 (††ńĪSTlśĄ ųGv[吊–É÷nŪųµøī’cF§*E’į”F~ģ"*‚#Q£ŗZ3\5 rĶօkYÜš|ø7øģ+ßzš Słß­üŠoWłŸĢ°M€7å1 XŻw¹ *|Ž‚Ć+X*›@on1/ŠžVó’čŲČ@f„3† ­€3+®Ća)WŖW( X©‚FØ.-¢ÆīÄīænăW¬ĆU„ö¹x>šĆÆg»ģŻĄ%ēC#@Me¦Dą—?a†Ø*ąt½³ŌM$tą?žaMǐźD·ÓƒŽŠjōW6 ģKīžs“Ō__’ÜŽ;K a”öžWHõ'%ڤձ{6€öUķĮ0f>:Ó½R`ÉūIŁŚÉö9HO»ER PfŒ,¹ĶĖ@ ’`ę@(6€l@u%X¦œĄ¤Čń2łHSéżX¶bO7ł’ȀHˆ–ųŁ'’ćeņ“’ģc’Äąt*xųį×q°u(­žYąŌSꥊžż×ŽĢ6ņĘ.»ģD0üå/ÆAPv)ä’MĆYkęĆåRš÷‡·C˜rɓ"’?2ņŸÆo{Ļɑ’|}#’å€zĢżß6fŌÕaF]å¹Tę’|d<ßī’žƒńĘ$v’w·“ŪżOƒßWaaØ'ĮrĆ6,EłJŲ#åŖӐń?ū½hX„=!AbĻDb)od(0q&ĢӜ$ĘcŒ1!Ģ)Ģ1F$8£Ō®›*™†2³EMō›0ČēˆjŠŅp)šÖ9üͶĮyĒ××,{Wc}ż"EšJÖekŒ„5Śy` q '0"1cĄ©ĘڼŽŠžZļĄī{Ū›«ŪGŖQU -õĖhi|V‹+ĵ8$™MZ †¤8 »¼¹µd ·’§khŒh8•Kh«i뮸Oŗˆ| @€"ųķ¶æ­é¾«<ŽŽÆ^æčģßάŁ?īé[­@d›ĶbįJvĒĪē–†^MTē7›¹ö™¶­¾vłi-`Gšpć;…,’’6@ ø`>ĢØĶĘR} ,ŠÖ1v`¤‘aš¾1Č 8ŖdU ¼q<Gdt ĮW{äP„ †g¾yA;½n?D]=(µßfūļŌA±,ÉæÉx8Ż ĶŠ“Œ~õÜ·h&–­\ŒKi#87“ZĮ_Ē„›ļ€¶ńu +*ŗ.“ś+ŃUQ‡Q—š ˆ©$ż³ f¶¢-ō°2®S¤®’ĘAdįöQ¼į R)8GõœxÆÄŒŒ·³@ā C€I黜ˆ[‡4dC° K7“1bÄB0ʈI č ʙ`ŒˆEūߌ±Kä*?Ń"““qŗ„†& ōSņo«»³>2`ļč~8®r©=ņŸÕa1ņĀ~ó›7QŖm§SĮ¼y5Ų½»cc±‰6ņX}ņlĢ›Wƒ ZŠŻĢ*•9€lņļv«8sĶ<ōõaūöī)‘’\lE€§›ügō‹±#’eƱų’©cĒv’xōŃIķžß’č£Ēv’ÓąqēīIÄįÓ*r¼Š? ŹLžķ` 䄤@H¹÷²ŃL½ ‰ĄLņŸ”$–$ūd*pĪ…ÄHHŒ Ę D² c‚8ƒ`ÄL ĄT.āŠ…u% <é!Ą¹An×gø:Ǽ#ńޱįŃī@OŪ«}³UWĪ?½”¦f~„×杬ƒ:”hļ3vĘ{G‚#CN)ÖćR#-•®‘żu¾žŽ¦šĪžjĻĮ°_ é*Ӆ†‰ütžŖabƒ)'@+KĘ}?ĄĶŠ -’žü&ūÜ9£ėœ‹ń߂A :q<å!PČ'8 ߞ«āČĻ#īŻ’ŲM÷]W”vŻųł›ž˜æ‡ 8=#ō±wœų:€Ļݽać’v śėÖžSæóµēżĒIkZķ“Ń0I%øĆ)f@1ŠNϚ}%?w¶šå_Ż ©}¤¹#X k0¬į2–ȵ˜Ē,ŠĪ=‘øŽvMƁį6ļĄ‹[:Ńź©@|V=ōŗ0*Ŗaų* œ.P¾$€!ĄŗUŪ£©‘Š>ó3Üö‡’‡ļĪŖ…Eź×#> ć{÷bXRŠ«øŠź®@«æUuWT#‘ži?‰8.Œ"'ł`pT žž Čņ.ÜŃvÜ04ÕL˜‡Ģf|L€éŗY6o•tcē ”ƒŽ¹Cķ¾KQéda°©ŗ=o¦øÅ꟦čŸę…ņŹÅ0Έ²Ā rēĮ˜Ģé†ĮŅĆ 1™K’&1J)HĆ”>cnīe£ŌV{Ę’Ż—•üX`ŲF‘Ę÷Ą€Ą²ŹćĢßµŒä?Վł€3ü`Œ”½=0Q±ł÷zøą=Ēct4ЧžŚ“U*sŁäĪ9g>’üēŌŌz1^-^­ZĀoäķ@ž³’n¹Ż!’S™ē1ņŸŒ1ČŅ$ŻöŽa‹ęĪÅ'ÆŗŖäŻ’Ż--“Śżß¹ŽŻC¼ŗ};:z{Qéóį“+ąóNv„uōĄć²võ%2 Å_qÓ@ž§)é_ś·„Ćśolōä($É>Rr€‚ƒ#–£ 1&¤¤OŹ(³“ *.3bœˆ+2gÄP8i— ņ85Ż%†Óժ݁po`Øæ?Ō½o{_Å,!ÕĻÆš×/®®š7ų=.Ē„*ŠÄóžx‘øNĮp\ ŽDŒžįplx$de®¼ŽDŸŖ„;żJ°£ĘŪŪÕč먩×ųq$‚BQ .2ĒFšmȧP=OuÄ÷ż œ²ę|õųS0’^/šÕ…¬”N”‹*¤uŠ9ł ¢ūĘ„Ē=XKĀ'N[ÓņR÷Ķžõµo>Ž=tźO\jUĪ®ąńIŠv٘Ąƒ.·Q.)÷&ŲŲŠģlčkŪ®“”©øŖIĀ•’jߥĀ9Ü.K]*–VxńžyµĄŗhė ąń­{š·-ūŠ^QhÓ<Ä«ė W×'½\6/j›Éõd䛽&‚`×v“üū·š½?܄oÖWĮ"…ūįĒs[ >| œ£OQqŠķAKuŗź0RU‹8ē¦ėæHū[kšrƒiJ:9øĢüMĆ;ų]uc-ŪL&,Ų'‹ĒøÜńrż ±rIjmĪ%ōsÉč#!-Š"ҚŽ=ž3ĀĆŹ’Ķ?5ųp±ł0ĮˆRł’yŅĆ˜ ‚–5_0a:og‚c¦4 Ņ?Ü£Ńüœ_H­ÆAdßĮüäæ()/x¶ŠĒŅś±;‹¬Œ ĻÉŗĖž”üļąX+bz«jO‚la5ņoy,yœ'ך¦Ė^J„ÆÕ.¼pÜn÷ŽūŹD‹yY-ö|^N?}ŗ»F±kWV­jĘŗ,ĆąP •üg|9Bɱy#’‡†­±UXģģĀĢcīćS†Ŗ(xĒé§[ž+ū?³¾¾äŻ’{Ģr÷æ½§?ŗóNtõõ”¶Ŗ cį0īśóŸqżūߏwžqFi“:Źąp8 Ė2ō,„"¼r|§©8łĻÅdČf…ŠА0\¹J ·ŅˆLbĻ“įœą\pĮˆ˜@2é b'ĘW3óD„ƒF ‚ń™č –xzŃØŽÆx %£Ü±’łv’;{{ń͟žÕųįW¾‚¹³f!®ixąŃGńĖūļGCm-–-ZT å£n—Į±Ģ°=ÕpĄa8”IÉ`m½p‹=<ģ¬ŹžōϚüƒŗ3×@D0†ĀÄ#“ųCPz"@JJüq3įŸóĻq!2˜L°,€ pĘH`«Łš47zęZ’ėqŖpjF…¬iUŹ`t†Ń5ˆWv‡“ ×XŌļ ĒžXĀēŠė²G×NM“T€I2'¦Ŗd0'iŖdÄ9V¹v:"c~wtĢćUŖ£EÕ*¼‘„¬Ē„$%Ģų} G‹0ŸÜŸv; c–ŸįågąžvģÅæžžś’Ä·|UŠ bĻVxß|+G‡pJ<†Õ†Ž•üNDš \ ‚#nń3„Ū;ŽĀõ'žžź÷_ˆG Æ`ŗ°īHe2.)Ą¾V°@˜“uµa|KQqJ ē¶ Ę ĶØĘŚ‹ĻĄŁ+ūńģŸ7āö×»ŃV7€ŃŁ khBĀ”€¦Ŗ‚¬‚?ŒęYˆÄ£ŲŽ‚—ßūMüų·_Ƨ4”¦¼³›|ʵ7cX7Ч8°ßåÅīŹ“ŌĻDom#BÕHX‘’C0±ˆ¤Œģu–s̜{ś¾ßƒ'o]7u‹ ż•ŚsMņ@Ż £’Y?7Ņ‘’L%TBŸŚČc]»üƒ{]ßķu}¬>٬śØÄAH–·#ˆģ`Ģ|°§|½L ›¤'’$ƒŒō¢®"Ć WłĮ"‘e€µõā/öėŲ€^„eü·Ż@Ąˆ6‚ē{_Äéõ§Ą§x§•ü@8¤į7ŗpā‰MX±l&¶æŁ=Q#­Š,s\zé $žūöÜ)!’~æ §œ:ķģŪ;Ą4ƒ1D¢²k3µu^†@ -}žV¤8{|óœčēš«A#’ӏ0™nv$€Į„ƒ#>Ō)AļéF:v˜G÷Ö¬†\łž÷äģž?łĀ Ø­ŖĀ™eŲżÅćųīwĄļńąÖĻ~>ł÷uØ*®¹ģ2ģooĒćĻ=÷60ør ą×*1čJqK ’“y†”üē9™ńLf †E€Ń9*ˆĘ‡B€'20Į0ˆ8ē$8“‡Iö‰13€86® H•øtčp(||kÅ.…!1$„—™®Š%@˜~ŖÓgłCŗ<Jl8ā,.ÓP.ņ_Œ”ŪAÉżä<įĒ”+nĖ]#¦¬’;ż)‰æT"@FĪēÜ ĪH±¤JĢ]‰DR€qF€T@Ī@V\ˆsF$$f@f£ńć*āģōef ©² gŁKŠä biZˆQ|€QøƒØ§•˶{”ī± ]‹I2ŗƒP)’d¤²ćyč†#$P.ø” øŠÉPq0“ägż4–;žł`VW0¬Ie¾€脶Ņ38!0€“ba¬ü’ģ½wœG÷’®źžø³9jµŹ9˶pĘƒĮĘ8ģ#xøšćŽt¾ŽšĄį;āq?āƒ±Į66Ī–£,ɬɒVڜwv'wW=ōĢģÄŻŁŻQ°^–µŖ®®Ŗīé®Ļ7|¾VŒ3“¦Ö08 qK –½ęüøeCų3OD€[V]“ӓ`G”cž tĆ<SŁ¢Å0ķCsÖ >›J-pKt<Ć‘©%ąÆM<‡‚ī3€<ĄÄ9h„¹:¹PĀÖą$}§+h„ÓalR(-ІD}cŻV爻±>Ū0 &'ĖÓ ’%ĶS&ņ???¼.,ąŁžē9£a=mm³$’ķ…Hq$ē?æ÷]¼„ .XĀŖÕ-|ć¦‰~ ąįāK–ŅÓ䙧gOQ”üOĪŚZ?g5Ÿ#G9üņ€3f…›@…Ū ’Ļ]•€+ÆZI}½³qŽFJæĪIČ.­Ÿ5łĻøĪ×_¾”ś† ~s×K'ü¹Ī×Č’Œ µ¦§?N(„ŗ²6ļx*"ą5CĄ‰…mیŽM/Ś¢÷棧‡‡žzŠĖ_÷:Ļ›Wš<­u–óÕ _@Eb²¼Ó@žKLĖ› ł/ŌGy _ŸÕ>’+č¤GäPB£•Ęń” ķD”!„­JH„ ”FZšØĢ ŹeęÕmÖJ ešŒ«ĖęGÅ%—+Ń|Žvłd½…ŒŒKH¶Ź 53a,B»ĻW!;|ŌVżĻ ūé?Učē;L#”š{B¶T¶–†„].©‰Ņ‹Ū!÷^~Ɓ.–D_RiZÅ ’u;߉E¹B‚.7/x+y®a’yŁģ©ØĀžŁWxĖP7Ÿæļ§4Üš¾ZßRZ1½™V˜)† “…b͟2dü·oXõ™ń©V=Ó åĀēJéT µNƒ*S•Ģ­šücČšVĮŻ†ÉŁ'~…“ca ›>śf¾ń½?š…#ŲSō-\I(ŃJ¢™¤6@&JL!įFŖ±[ē÷„ķØ’ü¢æy„ż’śW¼ńͳ@žążįx¾ņā_’9# ›!—›N—‡£U¬­§½y=s«mš ’Sy2„ ŸåD< #/õĒ3IŽ…vĘN–{ヾK¼5ÖCér½ö– ŅH[Ü~{@Y4§OrKŚ9RP ©I¹ŽTīšhåXĀJK“Ł?ŅSŚBfÉąnjČ š]J*łŸjžR0ķyfųµ(D*K^@Ęa ŋŪŒ ±¾q-™>¹(łĻ›{rņŸjKX6”ʰøŚŌ吀×_¶ ĆyŽHę’ē\÷āÅõœsĪ|śūĒ©Ŗņ2<Ķč3±vӔX–šøĪSDž+hm­ž9łĻ>« ‘#÷b^#’³‡eŁtw 2bµIŗjK!¼f8±øį꫹ó¾ūęo;ó[['ķŸņž’mŽ÷’®ūļĒėõņ®kÆ-zī±®.ėņƒ?£±÷?ńŪ÷īE)ŚeĖxć%—Põ ­ąń6˜Ź…Ūö7 neĢ‚üg÷)ĆSh’w³(ŠlŖ Į:>ŖČD µ:éŻGƒVl­µi -q4 !”ÖZš(PHér¶OÉ B -R^u£R©[/ˆė 7bŅĄ œÕ IDATāā3¼+Ņ0ü‹ ’‚Åšł7'®Ż ļŗ{dčŽĶÕĮh„'š*œŠjpH •Š6Žī@¢t­gł% Nę%ϬØāŃÅėųś%7pČHzö3Užoü÷>ó[^Ų»™ožņ›üqńJ>vŻūŲ=5O§@<Ś*¾³ė™Bńę”6Z…ŠA— o^čź×ļ9÷ŚCSĶØrÖß\µóò½m Æ@1LUąT—„”/„«–Ŗ‚łœ…õq1ä©'’)4ŌŠśŃ·š…:ēßGŪ”T tį"gćż0-“ĖöųQ5sI,^DpŽ :›ę°o$Ī3łE~xžmÜsēŸčˆĶ0lf2Œ…įŪw‘Xuƒ_ś1Ē,xŁķa—æ’m5 lk™ĖžÖ%t¶Ģc“¾™˜ĖŹ$’„¦‚a e+d©Č,Chz-Ēõ­å”6wź<Ė"w»āQ×Eģśå£ęŽ›‚•ÓīrŁ!­šŠä\8Æ2ƒDźlƒ4L 4ŚŌJ»¶N[)׈¶•-Bх ”•· „p»*WUV¾īEķ?Æ3~ėė;‚ó*Gµī^©l„aˆ¢Ž~C%…³öŽ3,7ż-w]v3"„ż<ué÷Ēy›ĻĖż‡vó»ļŽ”iś<Œ«%ņß·śįhlž·@ć2¢ĻJiuĒģŹwļ{ÓęĻ>6ü±’ź‡mŚøē–3Æļ™ŗsń€SįTW€“pé +¤J¶B„^¤¹ŃĆļ„`i¹×7[ŌØūŠu|źæį+]yQ):}0 $ÜtīĪ­PH0 ¤äu\.4~”ŃFĀ]Ķ˜Ē‹åī&xøŸį}—?’C–żÅÕ¬}Ė%Ģ]»ßL ¶– nĮžÅŸˆŽżĮpŒ1!rūču¹čōWp¬Ŗž®Ś&z[Z­Ø'VUƒår£0AYS’žOø`!€¤ČŸYķP–lŹŗn&’Btļ­>MĄt«mUõ±ap*L¶ ˆEŒ”_Qćj–@±>:£N­ŚF •Ś#1 KŪ–Š­ C*C*%‡Ē;ķJߜ¬±ÜnĢŗ*¬”|a!(žB.Žq¶}¦÷a-Ų»\äæ ĻŸ&ł’Š?Ćx¬ó 65E£æ>ćœņ‘’üõ8¶mc˜’… źœžÉ?.»|BžüŠž¬¹›š«°,ÅąąxÖu_óĘ5TTøłŁOŸē/ß{.{÷öf_gņÆõZY¹Ŗ™gŸ9Jm­ŸĖÆ\Ī¢u)ˆ„ćģÜŁĆó/“32™ś:gIž`ŗ lKgµJņ/HCRQᦺĘĆą@¹ō’_Ńß3œžŠYøåłiłÉ]Ó©„ĖUÜWįöd“{—Le%’%͓ݮM7Ź•ł §’ERų/SP¤±µSTI‰†RB¶(@ iha(G+)¹rR(•‰VRŒē“Ä|ļų 0ź7Ķp;=-øL’‚ŗźóž)YžĀ”ᇿW—x”½>0©6Ā HčŚ~3L¢˜ąLwfC@e-Öūnēėæū÷į#¹łżaf&˜‹ļģŚ|›­¼Æk«xņŖŪÖ\¼Ó“,Ļ‹T‰oģÜūÖ`dĪמ剞ńŪ/nü!Ąö|¹zŪĄŽ·¼ėiŹÄžM›ūŽÕo*ÉJ8Ū€ÅpéIŖ§A @)h?„Ų}/ÕóÜ+%§­Üku€źæŗŽæłņ/łjļaōeŗÖ5b¹+2~©Ó̄˅v¹Š¦ ="^?VU ё‚CĆō éü?æąą—~œ¹ ̽āęæn-uKēį[܊»„!?āC)8փ:x µė֓[‰>¶•ŠX˜°ŒKɈĒƀį¢×ć§Ū §¾Ž¾š9ē0^ŪHÜåv2“ mOńČ,—@A!Ą"żhī:Šjé„XžĢį×B’Ź÷šDzĄå|E, 2č{€·:ö°TB+éö“ņ€Ųø¹Ąt«ć…ÖåčDfD¶Z'Ƕ §¼KŖ€4…#­l“!„¶…ÖŹÉ…K 8b7ĘĄh§=æqSī¼ž–Ę¢€œ;Qҁ©Iy‘ĆåČū?”äætœ'ĒÕ16÷=ښ•,«Yzāɲżį‡°pa=ļyĻylŁrŒūīŪåČ"å,>÷V67W±n]+ūöõŠŁ9šµ¾ęęJśūĒP¶NϳrU 7Īåį?Ą²5€‡¾Ž±ńäæĄ„ēRŹłšTW{_3$””¦Æ{ˆ±`$«Ż®’¼’…0˜°ydŁk†€“ˆ» x’žŁ¶Mk×ŅP›ÆåĀŸž|’ł­­,]°p¢ž¾óóŸ3ó•æ’{ę46¦ūś}>Ž}żõÜ~Ētöö2·¹¹Ų°§%„ŅĄVł¢@¾h%Å”§Iž‹,;ł/ņ~žģœBŽ€ų‘”ō.K'u–`Jń_($JK”æT”Ž‘@ “(3)( gk*L“AČ÷žs-÷Å'7oDüžś³ŻžW-ūžxōž[Żōų‰cG”4„žµ`<†aŠ ŽżM®čå­p›nŚ}~^ŖkcŪ%׳沫ŠX7~mV‚”r JAn€ØU’>sš;·­¹xgV?_PvćÜ»æ“koG’ųŠ_ürĒžppųŚėBVż? ­Ē¤°¶ƒ¬Š$|7ķėzćgæ20ü‰O\\ūƒÜłN— åDŁ 'Ŗąį=ˆ=Oa,Op‡”l,÷ųåFs=M﹚۾yßź<Šårc/[MØÅCbŗł’Åąr”ż•Ųm^Tm#Ö`±š.ʇ§+4FĆ@ˆĘŸ=DĆOī§N)Ŗ”"`¼µ•ų«x6"8Ž:įS€%q)‰IŲćaLŗ1Ż x¼ VųŌ2XŻH°®‰P  «ŗĖåqBžSb†ķD;”8ńH'X SĄˆF„iķT 󌾝mƛ»”ćétłæd”€L–ßKé hڐˆÉs…`ØmĶŠ#Xø o4SO?™üGu[āEąūŽ u ‚œÄŪoŪPHAٶ1MCǘRč“ „“D(!І*!Q†ŌŹÕ9Ü?ENŹ»¹‘Šžü“ØÉÉra†ņ°“ūŸ*i(„ ©)Ąī]*Ō/o¾n #lŽ|˜+voļXöż‚ėß²—ipļ=;¹ńķ‰Ēm~üƒg §/rNKo{ūF6lleŪ‹Ų*?ńq*ņ_č`>łw`˜+aŸ$ņOᶜߧN^suuį<ą’אˆ[tu å{ŗlįĀ5 õłBxĶpr°ēŠ!všžĒĒéźėć­W]UōÜ-»vq¤£ƒ¼ūŻésŸzńE¶īŽĶo¾9‹ü§ŠÖŅ@ßą`ž ā+’gŗĄå2±cłÆN­»ĢäæĢ‚üO5©å­.ŲÕ:2œ2¤T€“ ÖB£5B€6Ž ŅB*!•’B)„”•pRR€ZŗD°ęs‰¹äŗb꣓Ó0*šĻų끑ĘÅzīžé܊ĆUU½Q7QūT īz’śīc|Ėćć÷nĒā1Žń¾į~ŽNŌ0Łéöņ’抭 ±ķüėčųĻāS翉oŸy&£Å*„˜¤@6-@,J›+*ݽ[ ÷W ’īÜUĻŽžhčī—śn}D QUiō|ü3—®¹+Ö¾z{Ļ;=÷ģüž_Eā5_’·'ś»‹>~:V(W @˜Ä Döž0…“] °§±h[LÉ;O֜³Å†„¬¼ś,®ų%".1ÆĖėGłM”{*–aĄļF'2"Ģd$€įBW{ 4Ø 4:ÄČČ(=cƒTEBTĒTŪqŖģŪ¦b,†/Į­ĮŌ \^[R5L¦ɸéaĢķaĢ[I0PE°Ŗ†PuъJāÕuXnwi”B“U(Ę’  ³)#˜ĢĖžśń_Ž÷Ԝ1ŽSūń”śšGź»aĀ›/ŻB[Q-L`ųhõŅŃ敟Desä{¦/“€*ń{P?üxm & ¤!”BŲ8¢~™c)“D£&‰fm¦„퉺ha¢…v„µ”ZJiC(‹ĒD(:Ø+¼Y»"wKc61Mݜr‘’IīNYÉ)ŒiĢ3ż”8słŌɟg$:ĀYĶgR橞‚ü‹“’Ō£Į(’ó?»³×; łŸŪZĶŖÕĶģŽŻMOĻXšüƒSĄå2čķ ¦OŗīŚ5ø½&÷޳„4sZ*ŃZÓ×;žµž³7Ķcńāzzp?†!©ÆóóŲ£‡²Čæzz‚üäGĻ‘Hč“’©®3óž»LƒXŌŹjsęÉæ9³'’¹³$GÉł}śüŽ&ņņU4µØ®öŅŁdó“Gł ĮŃ0ż=Ć騈\ŲŚÄ;Ć€\¤  ®1Vł»hö§>é5”ŒP8̆•+ó¼’=N8ū‚"⁉D‚ß}7m--\|¶#•°,ī¼ļ>¶µqÅłēĄķŹÖ×ZsūwšĘK/å²óĪ›Õ5H˜¦błY„—å%a&•‹üŸŃæLĢ’ k5QČ“ śÆ„Fj…JȤSKk•!˜$’J9€B› [š(' Ąåd ų¼2Vó…’…Łv鬯½< 5m׋wµ¼<šūoJģķ™×Ō;µ‡ÓBŪ†!“=…  amØ(•‹Rīfµ”tŻö/|<óųĮ—ØÜłLJŁ°q°‹:©ßŗ™>—›­‰8ēo’ķ«Vń@„»P}«|d ŗ&QŪ÷xʵ@EµóRį’y×@¼+æeNÕÖĖžśģ³vDż6¶ü"vįņ_|ćc抭 %ę|°¢šĒN÷ ™(Z°H˜eĄē(O)Ąb•ļA[iņ|© ӜT\{—nŁĖį>B½>"Õ>ģ&?q·{ŗ‘¦…&GĄåB'Ӆ¶@ÕxIų*° e$<„'ĆĒ ć³cxm ¶0-G•@ Į(abIƒøĻCŌė#źóóˆUVóWx°=ÕŲ)…7`Ļ‚ŒBŁu2ū§t’hŽųņ“ŃĒÖ?hE]WõķnūQ°+śćĘÅņ6GRŅÕ½æé¬Č°’’DļZkLOĄŗ·õŒŽ‡3ĒÉHT%€t@ŖIQĄk²Y¤@fPä/„”5–cB£E2"Ci©µJi”qtr ŅėĮ¬®Āq6¶“ßĢ2“’RPJĒ)Č’äĀ§ Ž„‘’כŖZ•2‚­1ļ|Š5KYY»ĀŁwņ?œ’Tėe—Æ@kĒū/r.²¹Łģī‚ē²ju3<°—ēÕŻŅRÅčh”X|Āt__ēēŹ«VpōčĻ>{”36¶$ÅóÆsl,^zŲĘO†!¹õ=›Ų³«—ēŸo/x¹ÜpI,+; čD’—)Yæq‹—Ōx°,E(ćąžAvļźåģsŪ8ļuóhlØĄ4$££QFG'Qż~Bي¾žʂ“„@“yŸ‹Łb Qɓ£Æi”gÆ_ĻŁłūi$®"•īłóŸéä?üaŒd“ĒcĻ=G’Š}÷» ˆ8ŲŽēż~ĒŽ÷ō°|įB|ź)ŽttŠÜŠĄ„ēžKMådeöN.L£xd‹¬†ŃŚŽōægBž³ū”Ši*CĆ,Čæ2\(—/ÆŻ>2ā;jžŽ’æ“ēļ¤čd€d €”(!PBHeK„ iha  S*ajå”NÖŚhĖ+¢u_ś˜pĻ9gź‹?¹Ø­n<×Vož»£=śß„ŪÕ1ÆŅĒs·KJŠ0„.Ep*§ŽŠMģ²łœlÕ&‚«6ńš„rtxōĢļ>Āc£\¢5ž.¾õ­Ļ3äńņūMńŻ‹ß@_±yÜŠÆ·@— ß;oł‡»Ūöä»V¾;K¬’Hb¾üĘę]ŸŒ«Ąūźx(Ś4Ų‘Ł'UĄ‘—våĶ…¦=Ż*|n–ēŸP €_7•Šo9dļøH†ž?\&ųŖO;Mįóąŗé ®żīoéģļ#č«!Vµ+˜ˆ˜®`1˜.Ēókŗ°= ”!vxĖ^H$<Ęx8Ž į¶B"µ0“Fh…ĄåXˆÜ-%ŹĄ x±LŹ_‹r¹Q™eżRV@˜iĪ~J Wp6(ؐ!˜›0ļÜ’zü…„!+ģyktČūŃćCmR"°Q¢N'„:’×¼³Ž’*õ•±€”@*] ļ:%ʚ\ÜoŹk#ū āv eÅ“‘'ØœĀRX¶ĀŅ“¤ŅF_°ĆnkČK”q·4a§x!—üOō)…QO1d9ČŃ!OłŸŲ1„ Kj§]i›}#ŒqVóųĢĢĶĻ©!’óęÕ²bEŪ·w& }ö„--•hķ*ŽpĶ*Žā¹g¦Ē˜ÓZEWׄēTJĮõo]m+~wļNŠ Ņ~£ōė,Fž3Ś•­Ø¬ō°hI-Ļ?¬šuJÉĶļŲHW×(O<~ӐŲIWIUµ—M›Śhl HŲ?6ŹömŲ–ʹĒÉHĮŖU¬YŪB]ĖRttŒņĀsĒÉ ģÉ5VųŻÜpÓZźüŒcŒŒD1MÉܶqÅī]½“”³#ČeW,AHĮĻŗ-’f¼ŹEéķvR3&AZf£Ģ€^K 89˜Ū܌!%{bޜ,ķZ¶ķŁĆŻ<ĄÕ]ƕ+ǃß#°xŽ<Ö,+.õŌ‹/ŅŚŌDMՄgYkͯ￟ Ÿ/|ē;,[°ĒĆy„{zˆøķ¶IĒ<™²xd‹7p Ó4v6Ą`_7ĮĄAbŽ Ā0y*ĄdB€Å`šhĖr"LļÄŲījT ·-„+IøcNéJ°-„a¢}Iļ¾a SžĢڟÅ0Y˜’d(—ąT:™m©0W…XxńžÆķo} Ų]}“3ĻŌJ¤¤Ł£ŅTܾÄóĶ‹‡žĒÓ4%‡ż§ęɵŁK‰VN š¶„¹i%]«‰"†aćo“!”B¦„„tTmm–B8B€Ż°Hē¾Ż=s›ˆģKź”cß\YžŽD'”üOÅóĖMž3ĻÉ1h ?:ĄĆķ²±qóŖęrŖČ?ĄW,Ƕ5=z ļ"…p"‡BD£o{Ū¤!ųݽ;ŠŚĆ_ᦲŅKoOgzųóĻ_ļy5ÜóŪ“^ģŽcĆ 5ΘĖįƃS_g ä?õÓčh„Ŗ*oŃėœ?æ†ł jxłŠĒĖ+ę/Øå­7¬%aYŒ G©© °di=«V7ņ«;_"‘,˜ŗWBĀ5oZÉŹUŒĒéķĆå1X½ŗ™å+¹÷ī]tuӓ ąņ«–R[ėćO÷d’Ž GˆĻgbšĪ“£Æ×‰¤аpQm²Äcž=y5BĆżAJ ½Oż.NXucą5CĄ‰F…ßĻ%ēœĆ÷ŻGC]g®^Ņš‡Ÿ~šżö·¬_¹’÷ŽpCŗ’ĮövŗśśųČ_üEŃ1ū††Ųŗ{77ęč <æcG;;iiläÓśPŗj@$ćė?ų’ö£ńĻ~»”DÅ‹É [ž˜oš¤WU쉮ūxOt@ĀeÄī]U’ĖŪßµž–žhØęą_č¾ng’½’ų§Ž²āc¬™wO¼?²T~õń§ßf+ļMOOń‡É Ä„'±”ŁP.!ĄĆ{Gö!7¹ł{ŹCKN „€k^Ēł’ńö‡é$8¾ˆ˜Ėv[čr‰‚Ē²?Ų¶į{;™Śź,’Ä}µMDź˜ š% æmL“ē"Fń_Ģt…ćq(ų~Ķ,‡€ĘR3k‡X·¢kwӚ¾ŻńqĆMÜ穨‹†T\ ©˜&1,Ź/$ŚRˆÉ¾LŹ¶āÅū¤*)4J‹\!@!“ŃɔGĄ©Xk¤„µŅB%q¤PZ „‰mDaŠ äéĢiręŃÅ’Č 3䙓åŅ7% Y°ĒģÉ’4>^Ó$’yē꘭4Š/ō¾Hx€uMkqfÖI…F+7ł÷ł]TÕųŲ¾ż8CCŁJė©!›š+éģeŁŅÖ­oå¾ßļbx8’lĪĒÓÖÓćD˜45Wqé„Kٽ«›];'*ķ EŲ Ÿ5«›Ł»§™}{{)łG@p4ʒe¼R×¹zM3Jiöīéu”¶“›¤ė®_Ķ3OeĖ–ē«!^ø€óĪ_ĄśsxqK™a’ĪheåŖFvīčįч_ĘN&eÖ׳xėMėøöśUüō‡[‰Ęœ‡bUµ‡Å‹kٱ£7‹üD"łJG£Į(†) <ŒM–©łź@<– §kˆXt²ź×ŁŠ5N҆sœ•× åÄmo;‘h”/}ļ{TWVO$ˆĘb\uᅼ熲*=lٹŸ×ĖgJ$ušąSO!„äŠ .H·ez’’ńƦ„”!}ĢēńpŪM7ńŃĻž]pÖŚµ'ęB§É [.įBĘM“»ˆJLMŹKZD ē1ĪOgŪ—/ØF"Ś gå’#А̒wāźÅŅ:ł7B „2“PJ”].m›` ”“2]Zł_?ßUuv)ĮʧB°°m雷ļķļ8Œ>&Ŗ|į˜ĮD†’Lsß*™†”pē4Œ ņ@ŪŪYµdIžø_ ĆĆÜ’ųć\xÖYYeSŽ’÷½ķmYä?…ꆄ NR*÷$BNņ¹6M‰1īĆŖ+Ü”ņ_bZŽLČ)kIA¹}Ų¦'Æ=± 3’?ś/…$MŅéįx’…’„ iK!“a’JĀPé}’Ö†ß4ę¾ūÆ@žšœ†0 éZ¶šŒæŲy ’xĄ /hōB¶O›'= “ü’©°īb^ŽÅ­Ćƒœ½ä ~SØO„ģōübéS”TĄBxųČgŪāŃźŹ³ńł:j8ēųšś{bŸŗ®āÓw>’›oļ»ō K{†«v~ąÆĪŪ°«¢żjœ “ŠUČÄē(æąP/b‘É-”Ź”NcH —ldŻÆeĻŲ£ŒDCDć”{æ“ɄĮ1LgŪ“‹ĪŲ°Ńö$Ćę,BöO±€…£ĀOņśR„=ӛ/ŻB«øF‚Č5@2œæĄżÉՐRčLÓDYR(”-©E® –hQHS@­t¶±Aj”µ0“”–Ri ”Z›m „…ŹBB)Ł=|ŒynOksĄ4É’T¤¼L{ž~lņōtqxŖéK!’’ āB¶ˆź(Ļu½@KE g4oĄļĪF* łł­B€RŠXLgµ„Nhl ¬XՌ×ėā¾ßķĀQ¼˜@˜JFG£ŒÅyżeĖhn®äē?ŪB4ķį©’‹ńė_mē–[7qÓŪ7ņ£>O4Ćū;ņ/€ąØć†ØŖńŽ$²®sń²z<Ó)cˆH‡Ż Ļ=Ӟ1õ»¶-EWg†Ę@քsZ«Ø¬ōšōSķYä?…ćĒFéķgĶŚ&žŁÜŽVšD2jÓe–öŠ ¦ Õ^:ŽŸ„¤ÜˆFāōv OĒ =“Ųń)Ź‘Č4¬ tŃā~užžN&µµ±Ø­mŅ>£Į k——ŌśÉo‹Öšw^{mŗ-åż_0w.W_tQĮóŗūūŃZć÷å‹Ń Lö©6„D†|PČP’A¼ [°IŽĶ¢psA$¼EĀ’ ،ü­Aˤ@Ha;%… M@C) ” CŚĀ@†”„©ŹĄ³ącWK³¢¹ą„§1Ŗž†Ęŗ×uŒ††żŽH¤¦źPĀ ‘® źW,’æJ©źuķyŹpńd±ć1!YżŻĻš;ŪfAU=_yß§¹³ŌuLWŠ“9ąń” ]ts$Qū‰ŪŸŠŽwFó’ęĘÕ.äįā]ē¼­Ė—ą')Ąžžākz% NV G4ŸRރčkĒōøKĖżo] ž"*yXyl¼–Ÿ Ž@į~)4“ĮŚ‹`ż„°ōLجĻ>^Óm+ó’4/œ|Ü3W17‘ 5„qx€ĄH®”'?åēJi²t•š'“öņOS ړфäłO…R…i·”3Ņ:yšĢb̼9äÄĆ5o›š[gŲ§ŒØ°I—'LCČĀ!Z™£†H?dS_r m­„”…ŌŹ$YŪ“BÉ®.”ņĖĒŗēę¾’ŹGž'ś”Į>ł/‰”²Ģäæč<E‘69ń§'ŌĆCGååĮĆiĻč‰$’¹ ĖmkIV˜ŪZĶżÜCp,–·Éki©¤£c„¹s«¹ąĀE<÷\;GŅ9žä?…ŽŽüÓ~źźż\ż†sόüŒŽ:ŽrG ūf­^ŻL™a`Қ”6ZNĆØPģy…+;—É0Šr–-Y DJ.r·”®”Į² 7ĢĀ…ś2É}I…Os ŌÄZķ K®Hžn•°æ„ŠB(- ”…p*:B8äߐ(Cé#”īÜ9\õČBį“Ó&åEæ&śWB’? ĒŁ „lļŪÉćG63 ų$ō„hobļžvģčĪŪä¹]õõŗ:G¹öŗ5 „xōį™ē­GĮÖ­8ŠĻŚus˜ÓZ•æ¾i^g0čēŖŖ ā,Ąė5Y¼“žūŅ‚~.·ó:tt ż®VĀĘ4 ¤œøÕ5އpt4Rü  §Ū hln „ ·Ł³»ł jyŻ ¦üŠĒb(„_u€Šx„öýŒ •¤%5% 8mTG,?Ļ—¾f8ĮX½d /īÜI(œķ*9ŌŽĪüō§¬[¾œė/æ<Żžņž·µ“¤+ Āę­[iih(˜vp* '1!0"n' ¾”•ü—4O©'§@ģŽQ­Ā h-ŠH”Hę’ ©µLzżļæVaBŪlŹBi!•J¹ m ahsž»®BžzuĒĀķ2]mĶKÆź ¶Ģėn „µOĢ’OģŌ­"ł’¹°&ŁcÓé’Šēyß7³ś}Ÿį3P<’:($˜ [»6T˜|a}ćõ~ץ—‡Ā‹~rū#”;žļü?€?ąŒįĖ0J”Ź’SŠį•RNr˜ŗĄP/b¾Ée³™£®μžūß;Ѿh=œw=üéɈ”Z¼ę,†‡~ ćÉ"¾DsHz×!xįÓ_ÓŚ%Ģ?ÖOcdŒźńQ¼V‚P<†pW”ĻŠTŠ€e!¢0] ‚ xČbž§›@GČ0 iR”Q œų觔ł3’Mę}Lź]C²`fŽno)…Vh2Å#£F•JÓӔ† !ĄōI9©"µ®d»×*jk Njƒr eĒ1„©4“J††„“”•RĮćV] Ėø&„ĄŻŚL“½ƒbŸ™“åŅ7„Ķs"Či»“™’R֒Ֆ|ˆŒŌ-ąFē— ƒńAž|ųQ–×/aeć iäŻėIžpüų0?śįsH)É=MĶĶUmójhhØą?xĖR©‰ ’’žŽ|„åĖY±¼‰žī‰õtÉ?‚Įd @†@Ė—7b’=»{ÓC¦źlĒ ’HĆ :UzāŽų+œ'޲tV’ĢėLåķ×7Lxé6?q”ĘĘ Ī>·ł kxņ±#ÉJłP¶f|,FuիЈ[ō÷ŽLŻyX“zJOR†€šp˜•ž.ڼ¹©Æa6øö²ĖxrĖnæćn~Ó›ØÆ©aū¾}ÜóąƒĢomåļo» ™įåĻĢż/¦¬ß30Ą¶={øńź«OÖeL UTØ×! dăŖH~§Š¼†ŹNž‹¼Ÿgb0°~xšõß½gß×{śŲ­üō•gNZO÷T^z’+Ą ˆ˜Jįį=ˆ®v¤Ė`V_ĢÕēĆń}ŁäąČčpŅ2±x#ģ}&›üDŹć”`Ł|źl›śøEķŲ¾`7f1Aæb®I,hÓ-©QĢ»c⁐=ó¤˜Mź@Ź“?›°’\˜öħĄŃ €ä3ÅŹ* ‰NyśaĀ‹/:ļ9d2Y9ĒĒŻ¾īÕ÷=QżŽ½4|ćą3u?ėŽøŃ"? ÷߅™Ž ”ᬔ)„6µP¦F(mh”„’Z ƒĒ å™7‡b yʖ’²+ž›§ŌŽ…ę™Ęf@ž§m8Cˆ‰ń“Š “Ili³wą÷ļ#ƒGÉ”ž?”Ÿüg¤•Ī:-Õ³%Y`ÕŖf}ō½=c©‰ ¬'»epĄy’U&œ33!’ń˜"µØŖöf¾ju3cc1޵§Ṳ̄ąįųX¬ łG€aJ,[;ŪŠd§T±&žł×9Œå]SČ.ŗˆĻģcY9ü)ļæŪåāõēž[tĢžxCJ®ŗšĀ“q %AMń¹6¤@F’Ļ—©Č)˜łŸé¤‰ŠĀß ė€“’ONž?ąäż‹Tžæ°5()PĀĄR* ­„!”0PҐĆŠ®–·œ#„ńŠõž§ąq¹\õuóĪ5ĢĶńٲ"}·S)±†Qš`))¼Se'ʐJģö ‹ –ĄÉö÷ß°tų†5ļ=’j{’Ę«Ž|čü ®õĮ;{Bļ’ų‚Ÿź^WP”¢śō ķ/w(! Ć)•…>A•†ū®6ŠĒeMÓķ„ł?žĖĀĒæg] /=2ŃØ…įŽ™ĪXęŌćEQˆSĒ7<ŽŁär"uB0eEĄ0ąŸB0 Ótó›ÉŅ}ńKE©^ž\$˜(÷'|qĮxĘq˜,u|ŽXW–ZާßL·ŠV\‹LK™”B+åˆńe fFH‰ŽŹŹŽöŖµ‘׆DŲŲ`[bQ&/†īĆ!0m2,ß*U²ŖhShaå Śh!ŚP6B˜ZHK™R(ehm(ŪŹ38ŅoGAķsUeݟ¶9¤‹Œ—‰'¹óe%’„l0¦1Ļō0™gKžS‡S}tv£Ö¤ó ŅŹłøDķ[;·qd°s×ŃØ/0PöÓ#’ņĖ%‡ü;K×X–¢³c„gŸ9’š8}ŽŪmŪ ņ 5ɐś”×|¦ä?ՍRUåIŸx˜?æ†ēŸ?ž5oJ Ķ4ꉬk7M9ɐlONeė¼ėLĮ¶C„ĻēŹkßüd;;wōrž X¾¢ž kyģį—Ł»'»<ąčH„yó«ńz͜5¾2 3Š7ŠmĶ$Ŗ4:ušEäⵈ€ņ£„±‘üš‡ Ž§„±ÓČßß§¼’ė–/Ēē-¼AźąOO=Å%ēžK]u~8ś©‚UDē !"ā)‡ŸF¢™ˆūņ *œ qlÄNŗ+u^žæ“ Nžæ4°Sł’Zh[iĒH`k[›†vWÆ>gz+›=Šq©ŁbnCżņmƒÕmƒĮ†ćĮš®1w`DM6Õdł’Ń0†×_z¶jnž©éĘÓuVC,’öRēķ9¾æŚshכ–~jߘݼĘÖī*³3Kżžļyė³—ÖŽqĒ3[ė oųŽ÷ŸŲzÉĀś§>ųwW¾žčTóä ¾*”ņ՛:@ 9I•žlG˜^)˜7Ó1ź[A)ģ*|¼’˜#XÕĮ‰ö¢©SJڦ*Ē cZqD<†H ŗ=čx į²Š sŗN©0’ņ®¾8b’ I£‚*q=ń8ø Łd]d…ĶŌȐ‚ThįZŁZ¤Āźe†ś?LRĘ/™}¤:2|ƒG+W‡‡=g&¢Ę—+“žFJ†M½Ū_™ŲVŁß[;?ę0% §”`1Ų™sŗQ¦-¤„@˜h„„–R(e¢””%6i­l!•;¦Ūź²”+¤×ƒ«¾–ÄąPŗmĘäæ”Ņq ņ_ŒćN6O 9=R^"fMž!iÉ9˜2²Õh‚”Ųz‚yU­lh[/©Œš{ §OžEėŸœü#ąÅ-ĒŁ»§)œ¤Ķ\R|ż[ÖńÄ/ÓכmŅĄĘ3œ’‡G͚üƒ# ×:·*ŻaåŖ&„ģŻŻ›u¢ĖtĪq~įk7 m«¬¹Rż].ƒ„•_¾#3Ģ8„‹ąh”žøŸ;ŖøśĖ¹ņź„Äć/šų>¦ k¼D{Źžv‚ Ēčļ!›œĄ”‰Xˆ 㓜š™f”! .bµæ“ĻkUf‹Ŗ@€Ŗ@aµē”÷_JIKcįØ$~rĻ=H!øłoŸHlj›ņ %’S‰žM{žŒX¦@D2žŃiw,“)†}<ŲE÷ž^–6,auėJLĆLŸ{²ČźÆH8ž^Wö‚9­UÜś—ēšųc‡Ų¶µ+Iœ×®ŸĆg¶ŃÕ¤£s49’ĢÉ?ĄX0JŲz ÓĄ¶«V7ÓŪ3ĪĄ@ˆĢ3Œd@˶ ^»LÓpÖu:[ī@•‡H${ūIž cźRgG_’bļŗå .ŗd‡_JkŚŽ8!ó5Õ^ś^€X4Įą@ŠXłCżsa)E’š0!³«ę•@’'0”Øą©ŃåTaVU¼p¢ņžæń’KE &_ܵ‹ēwģąÖ·¼å“ņžk­±&I7ē1)b…w6… ©ÅŹ9§”Īyó”tržĀQ¬}ż¶3¤Håż§ó’hD2’l)u² @įüCKåiø°lŚŲqdœX¼üŃIRQ_Uæbż•ĒżĻphŃ7’åįŲ6ĪłÕ__·śÖ”Ā3;x5 Ā)„āB€cCˆy.fõŌõUB|ŠżF< žŒčƒ[ąœ7A’qčkŸĶģ“ĆėŧĒń©žD|f÷> ųŻčbś„ N5Oź”ą!Iš3Ē, ²_*R”üŅ@'lD9’²’:yś…Ņ,(¹Lj,čõõ¶W®‹=gÄ£® Ź’+²Ŗ¬:#koUā·+‚÷T5ĘS’ģƒCąc QÄę“%(%ZٶĄ0²ŅlŒ\— B:©R L!$Z(Ū@ K+Gm„ō±ć‰³–$0d–ÄÓ6‡ńm»‹ß€’Hģō>³%’†aņé÷•—;öńćß«č83łp–ü—Q:]1j;Õ”× åFŹūæjÉ.=÷\¾šļ ‡©šOˆrļīę›’żß¬Y¶Œk_’śSøŚ|Ų¶=„¶… bFņE0Ń·ģäæČĮِ€DE¾@+Mā “’/’Ą©r¤A!…-J#””(Tż¶0°1“2 i e”pŚš/<%€;Ė+ĄT6Ō×T·ń5ŽFkĮwŌėµńL?’żÅō­¾€ßæxņ^–v¼Ģ”qĪļ9ĪWŗ’›ŖG~É·Ķõ-l¾č ¼ŲøÄa²}™“•,®’SøqĮ»;Ęnź’ńKwÕ“Vm½łŸĪ9÷Å’Žóåź}Ć7¬·ÖŁŹ·>fnІk>3^`~²ć=’Ä‹3ü«˜ķ½tk÷»Ÿ=6¼é_øbõ–Ō˜Æf@8A€›@’z†”©šŗWq¦ćåŸ ń˜Ō§óģ«wŹŽ»ž,>Fm ¬»$»­ļō)Ü?~­pé²S&’ēĄœB Ģōn|¦w’DčöDŽ|IH&ūēéø ž˜@&l;” ƅ² ‡Ž ‰Ž»|ŻGź×F=gZQs£m+3Cś:. Ž —źÉē¬Jˆ¶hŠuCē¶Ś³# Bßl^1¶3s\)…¶•X6Ņ4ŅÕ¤:7>+S k !’ļĆä­1„²µ¶ķčįH”)a8:e¤u¤mÅåPØS5V.Ģ×U[ƒQįC… XŠŹEž§EŹ''’·^ūa–Ķ_ŏ’Ķē™Ę¦Ižg:N.ń.ˆŒŖiR­q6zRLģł$(!Bc)›Ż½{8Šs€ s׳øu ’&å%Q¼mfäßgx8Ā’’_ϲbe«V7ÓŌT‰Öš—¶w±ł©#Ž·» ä&JVųŻ,^R‡R:žŸ›ßļIl»†óÓ%°³ĀüŽ7¾Ŗ:#|5GŪĄå2† *e;FšōWW{Ņ? GŠJÓŠ8Ķ—ĘI‚·#8:)»™øeŃ?ł$šdŖßsƒ·xž9ü÷«FĒ[×[T¬OŲŽ+µ6ւšGtķ”įc§"’’DĀ, å :2ž³C`Mń¬“dVœ*½Gać嚆Ą¶‡ cįńŻ9˜RõH¦„1•“3ÄūRB€“é„?S#ķåŸA½?ŪB¤ qĖy„Ų6"‘ćQO)÷:itÅTD„‰ĪŌ˜, Sģo²4€Ü1fT0Iø-+iŗPQ»ēPżŗčXąŒxŲu¦²ŒUčŒa„›nżŒ»"¾ŻßŪ]??xXømŪ (é$Ūh9rÄ?Æē`Ż'¾¢ņö9kG_DuR%-@Ś6¦aL™«@Ō &Z$„–.„“J!¢P¦vĢy9*!¤’}ĆGs šĪŸKxļ!¦ƒ²’’I†É%’l¼œk/ŗ‰o’źĖ¼œłe-eš’ĖŽ{‡Gr•Ł’Ÿ{+tP–f4šœģē<ŪŲŲŲ,66fĮ$“ƒÉ°°Ė‚w%- ,,?–ø¤…%.,&cc°qĄ9Œķ±=cOŽeµ¤ĪŻU÷ŽļÕ-u·Zź–Fšųł<uß®ŗu«ŗŗŖĪ{ßsŽzµ0W¦5·SņßT‡‚@ˆąĮBƒ…™sD<åóČĮGŁÖ»k7°°­£œ\×$’“gwfMžKµ6l{ŖŸmOT,5ݶ«±éä ńq~‡Nźd+SüĄ IDAT’¾é“?©;»¢ļ«‰4ĶŹż“,‹|.?ń©€žZ–,mę±GM"’Ą8iØØ+;l'ø©”Ę@=O1<œfÉŅf,KŠcž§ˆ ʼn„™—§Ū cˆ%Œ&“fEm•ÄC>Ÿ'4…ÉŪ_ ž Ģ Š³’'¬YĆé'žŅ’š†7šµ’˜|ń‹!øšģ³yĖĖ_^V5ąXA6WĖńߞĢ9ØPEŠh²¼Ł’©—©^C¦Ź½§Eē!øĶ4Fø’£ĘeŒŌB•l!”-„2-¤Ö–mic58–]Åip†8km3×^ÜÅ­ ³ø=„]švyĆs—’ČųĢņĘæYʦqīŁünßśüe|čū;ńü¹æF66ø®Æģ¶\&ԘĻDm6Ā™”ž?XnrFģą^Ā7}—Ÿø.›.ø‚+Ļø”Aå!ī½™ż»99ēōŌÆHŒšĻ{·0źøÜiäž%køēŠW²»2½?ĶÜč’saLØ"ʱ{čŖ“ĆĪŲ¦ÅęÉ)­0N_łĆģé+ųXÄćŃĘę`Ū'ńųO;qé=‡*—Æ4œ µō’ó© ėE]PO{ö|‚¹1Lx‡g©|p¦ŹÆ.Ą ŖrzÄzįöĮŹS`ƕ`9°Kł2Ƈą‘?Īnl© †ą÷%Ź‚sӔ˜oĒGųB©€ų{ ½ŅO!Ó2ģ!›BŲ±,Ę÷‘Rb,mGŃRa¢ŚnD»€r§ŌiÕÖĄ×½ĻSȊ(õPÓsßńÆĶŽ†ß ¢ą&ąÓ7ž7'ÜĮŪņ9žÖW¬Ž¶‰ė1ŽųŖ·ņąTś˜½žæbłÕÆšTäUŸ{ā‰WžŲyć›_sŚ5evšŃFLå·18ī.żÖ ēģhhĮ0Å­“Ø’ŸŹ°ޤ ØĆŽ @½F€łD=•§†Ÿ§Ę}ß OŸ%°K Ųx5ōģ¬-)Ø™<ćå9źż‚Ŗa.|rŁ A+D6…uAĖĪ[ĪłmœŚą°*ģ°Ā4Ś6EK]ćū¤ņ>ÉdŽC£)öfŪ-O°é”-ō·5“·#č¦~Ø9øīHSO@ 4•’H—”VP Ą‰döśūn;äķór”ćTĪz¶ķŖū;ŽüZūšų™7¶“Fx QZ2Š/³iLc»?jR·fĘģ—Åv6±č“dĶą`QPźP4ü+BĶKڋ瓖Ś7–J!ŃĀXĀ7J -ŒŠ–%“¶“6©lBƳ}¦%²øt Ng2Fg —ÉzŽģ M’j/S>N4‡CQ®żæŃ=°ŸļüśKut9ĒäŹķŌjœn;µgT&-^fSYx,*HDį…ń Šr˜ć¶§o£+ŚÉé«Ī ¹„«ž^9®ætņÉxxžęŌÓ“Ļ+öģ®( ōż”ę›j?mKąūfŅ~>žXĖW“²įÜ„Ü{÷ž²¾#›SOļbp YVõĄ²$6.ć‰Ķ}¤ÓĮ Éq$g³ŒµkŪč>8ĘčhłćŹc›±~żN>e'Ÿ²­ ==ń#ȤsŒ 'I%ēßÜÆĻ÷%]ƒŁ:ƒ@“Ļł€Č|£hK„8±±‡%”Ń£=¤cÅŁ’u«WĻž—¢kįĀi++Ø'@~ÉŃ1źų_ #,¼čdė/՟0ž`J#)–] <‚÷ĘH“%)|.µhS`e K[6JŚ(K …%Œ µ×“D;-ŗŚBhCłXŅb’ĄDŪžĮ,g®=,Esż`‹p“Ɲ/Óģ(åǦž\üZĻč™$§¹a6O» på[x’ ļžé—ųŻČoĶ?qFSÓ²¤Ø’©[ĄLō’EųŹ=7ź ~8ÆšĻŚ:š¢{>wļw^’¬Ø\.RGŠa¦ś’æ4@8J&€Pݰ”óč“ōœ½-ÄŌ³·Ó!5 ”\”HP)`:ōīŖ,Z ŻŪf3’r( C£ä‘(!‚<^Rćśų…’|ł‚ŬٰŒk4ńüÅŠ›¶¢aŗ:[8{ŻxĪ©0šāą¶nīžåCüqÓnö77’“’o ”ģF“㢄[.˜G¬`Iš`ń™Ż÷÷önY¶!{0śŚpsö»Ė/Ųó=×µĒuś„Ś­1rŠĆ¬x˜ń÷fĘl²I{)…ėƒŲ¶ŠŹ7ŅöHk\0žyI5!…‘*³¤FaʬݤFŪį #F ŒAi@K }ŌĀBha-z‡÷š–ee„ ¼| é{ź$±3;üµÉņōä_Įß]ū!Z›;ųĄ^‡WÉ«ÅóēŠüĻ·é_½‹*ƋAdˆ‚O€UŅų”€„¾Ģƒ[ocyė NXr Maܰ]Ņå_łÆö4:ᐔ££-Oōį)U±Z°ķ~Id„b?mG–&°{Ļ(ŒrÖ9ĖČ{šĶōąyŠĪE \śÜć …lnŗs_Ł:JiĪ8s ēn\F<‘G)Mss˒ĆÓÜróN*įyšŸüč V¬ ˜ūū’uū Œ!Ļ02œ Źł”“f$g4Yļ¼€ĮVÉy D\ĶÅ'„XŌ¢80äpļŽ(yļ0˜Ļ,1¢øoģxZķ #`‰;2'“¼Ø6ū’—ˆĢ $Ā/<̹ćÕU‹üxŃ֊'™Bū“ćfF`JĖ’ i“@jƒQŅ%$JJ©,a“()„e Ļ;ŲBYŅR–9lŸé…-=Ɠæ[ŠI’$=ėi¾™ĆvķöœpZ‡ÜtŽ–į v7SżŽCw&Éó2I¬HcšQišŒėę®}/üęǹāW’ĶKßō!~R».e€™ź’˶ĮüqēĒ[ ֚% [o’Ą9ĻłŚ?ŽŻm,½ģ;¹#õĆkO{ĶĒNīųUn:‹’†LsžČėū/9J€0€Łī ėiś\‹%³ŁīŲ4“&ÕŹ¦†ĮĄŲ`ķ¾R£Š0G¼Į“ļć¹aņ–Ą“a&Õ™o€\™Ļ"Æ;™ OģāM.{Ē€Ö–Ÿ·žWm\Ē+÷õóÄ wńæyŒGŚHµvmiĄ³Ū‚żµJ¼ę» ’«ņY½Ä «=ćZN@¼}“ ;‰C­×Ū®ļŖgļł.Į¢Ō0BJa(1”R­MYF@¾'ڃeLÕ’"Ł/%’²b¶æL؄Š÷Ģ¢€““Ö€°µZaQs!„‘–ŠF£……–„ģŻ»ņė—]PytC+—’޹§ŚĒQ7łŸ)Ÿžü\sék9÷ä‹ųŌw>Ą@¬·bĮj½Ōw š łŸ¾³z»ØüO{ģLåB/€ nIˆ‚D €¼WJ±ol/½c½¬[x<Ė,'Üč »AÕĘzČ’é§/ańŅfśśōõ%H¢ŠŚü)Če˜ t3wßµ—EMģŽ5T9ĀńõķB@ŃåæŚ~ZRŽKJ7$Œį7nēŖžČł¬ąüó—ćłĒ‘(_ó§[vrØ{rŌł7<Éśұ Š”’¾ŽŻĘŲ±cåW/åūŠ=»§­V4gš=ÅŲXŠųHrāøcM„‰ĒŃzfŪużQ2u¤LĻ–4¼óobģtyxw„ÓWdøžź!¾ņ‡ĘŅGĒ0nŌr’Ųq“ŲÖEzY>\.öW‡_üń¬_]}ö’/ étmļ]$Ÿ¾5wäŠ{Õ\žg^CGÕöü–¾)Ė’<Ź’ Į¤‚ĄųOe ”…0Ś6F#“‘VØŽ¢OS¢)j“ŹNž[ß7įņ³'¤ «:#ģė?rYR–°œ¼¶\ķ»–ĪQ$ õź’ż).ē!kų¾qÖE|ōœ+ØYĪĄ¶čĖ„9i¾ō’nCEßO¾ź,0©—üš#Ąæ\“č§ßzšĪG÷%ŸõožŁ-k:īzÓk.¼l\ßZŌ’ĻM€0€¹4ljĒ8aT>Ēn7:ĖĄ@²ß¹zŖx™u­†ä¤ćµū 5@=ę«õąŠ JHr²R’·”]§öåp}|‘Ė ÆYÉ©—ń±ØĖY³ķk:XŻÅé׿œÓ_rOé7|ēl]ŠA¢Ł'ÓԊÆĘq'?棠ŌåIŅET+Ø$fdēā (¹¤aiģ3Åö¢¾_»Āųy#¦śĮh9‘ 4FåD(3ź^˜ĘĪÜÓ¶ÆČˊ4žÉ‰U«ŌG 敆›U`ļR’ó6Z(”©µ6B “–ńt‚Df€ęHgY_‹;‘!«~ņĻłÆgõ’O;ž®½ā:ž÷ęo³yūCulg˜łÆŠØõń’āėbśgA "A ……‚`@a•’R‚9?Ė–ž'Ł;¼—µkéjķ"u Eצz6@įÕ“€PÄaåŹ6Ī8c V†ĮĮ$}ż ś{ō÷%H†}5Č?vļf÷ĪįŹ–ķĢS[ū9Ō'•ōŖī§šČ¦C •źņK ’²YŸ_ž| «W·±ly Žk1˰cŪŌżĮTŻĘ€G Ȥ²Œ¤H&³GÄŲobć†d&ĆšŲŲ¤Lzįś±)ė¼ĻėēIē%æ|(˜xŖ;ÄsNI±¤Ķc,]Ćthž1ęGx8±†§SKX×ŠĒźČ‡”0ü«Ā{^÷:¼æŠ²Eh­ė’ųŗ"`:łŸz™Y@HņŃɞ|z8eToĀ9ełæĄŁŸ‚ī_ %EPPH“°Œ–ŌĀŹ%l”„mi„?5Hkƒ“w|8ī±½;ÅuĻ[J÷pž’åß8ÜĶՍœRF)”"§QÜŃzõ’„(ź’N:‡‘į~®Żz/_}č6nņ~~ŗp97>’õ<Š–<Ė.¹‰ģl–Ėł)Ą|č’LNHz αdžŃN}H÷ķ­/ٱuųÅĻżŁ?ųą®įēÜń¹›śžńś«ŗ~6¾R‰ąJĄ©ō’µ ēJ’_ŠĆ5„Ž„`G&E%2ljŒrŃlś0ömćĻ™Ž; ö>Q»ŸĘ6h^˜žĶ¶ķ#/ +-ŅŅ%ė†šĖŅh¦1¬†Z>ž *ƒåŅČe Dß°joąÕBŌ]öž°°v1'~įĶ|öĪĶüéC?ä‡ń$ķKH“5“£_Öņ8Bå„Ā` “2"—Œ¬pZ¼2[ņŅ}§¤yßč‚`©@z$Ü|ą‘Ž%»uWۊԁŅ~JM«mĆB:§&“F-¬B€A¤…PJa•d H)Œ Ź’”… }$–š ¶ŠŹCĖZ¶ö­Ž‘½Ŗ" „ “| ™]ū&Æ9%’õ<`ŠŃŚÉ?¼śc<ņōżüśŽϬó‘ņ©š#ņ?Ć@DŻŪ)tnŠUd`›\^*°0wRØ€.TP…liH©$Oō=Īžį=¬ķ8ŽĪ–N,[nipe÷•“{¢żpÓžzš=x€kӹؑ®ÅMtu5±li §¶$¾6ŒÄŅōõ%čļOŽü2āXżI·Z@ct$ĆčHvŹ ī½{_I'“Żž6ģŁ;b3ōs /ļ“K36–Ę÷Ž0i*’xü° ›ė0āyų¾mĻM’ćĀŸž‘ņ¾īŲR~ĆnkT“5ņ_Ķåi}Hź0&V±=½˜õŃŽgĄ²®šU½Žy¤Ņ©I©å“`‚ė!z2R¦¹7‹źĶ³‚i JkU¶oé× )’•å’‚ō„ŃR…JZ… €4ŚHé !UĮI#QŒ%„ńtś°½iEcøścōÖżI6žŠBĻpŽ;ŸŲOĪ;rYSJie6'euŅ_‰z<ŗ|sį 8øį2^ü«ÆsõŲ ÆŲæ×óĆ 8! ‡y²”‰ķBāēs4Žńj£i>÷ņéå쇣’’ĮÖūĪčŪšu[äqEāѶ†}ēUtƒ-r“xųÉæŹ}ā9M’ܽūļÉ.’ÆOż&sŃ ĪųČžŪüłt‰ąĄ„ąT˜+ż-|¢Žefā/wD=*/©šX¼ÓŠŒ:ŠĒ=‹;ų‡Łngūƒš¼ėąä į©{ƒ €”pŚ„Aś’īĒ&–uBв†JB=”(œ{ōķ©O*P¶ģ" -‰°C&®Ģµ||”óȬäų ך•ĶśĆ݇ŃĘzī9\¾~%§}šæłŚÖķlI/%¶@“ji”ASŽT9@ 7}a«4@~8“‚•Lś™JĻŚn÷ć­ĻOÅBÆ3Z“X¶ŁµbĆČNՇŅFą+d•`)„Ęh3i’„F[åķBkۈĄ@)…ö„„-K(ķ K ”…D[Ņh-¤¶÷ōļRė–l¬<ŗ”Õ+&ź¾ß×5›>ż „dٱ]®ż§He|éǟœx*|nI‹e‹V‘Ī$ķ/ļo.HłtCŸõvjotfŪ©BtKžŌŠ„0^5@ Œ*4É`šEČ`½¤JņxļfZ†›9nį:ŚżvŅń,”ˆC(źą†Ż)ŽŻa’’ŠeņyŸīƒ£twŽ“v×µYŌÕĄ¢®fŗŗ‚ĄĄI'-BHA>ļó•/Ż‹ŃÉ?“Ē3™üæš¢mņnf½ŚcZi’‰ ń±4ŁtīØŠÅT&C,'ēĶ·@ČĘéLšę¦¹Ńšu;\°.Ķo1A`­¶exŁĘ1Ö/ĶÓ?j³ØÅē»w¶q`hŖĒŪłEJ…ĘĒGśY N>š ŽA¤3µ c钁05Õc¢“>ƶŌ\’€|Su÷’ܓÅō’²ņZ©‘FĢō+0ŖXžĻ()…o!“,+’'“R£5~ģ°3{b9ÖtU7{Ķ„‹łŲv£Ž¤ųŸąvžĖł¾ĀZiyĮB€Ŗ­’ÆVžÆ”śŚ÷ńŪį×ßĢ¢-›ø"Ÿā”d‚ĘG9CX0wž}!’xźFāó„’om±Ž’q^7œ“VŸŠw-PĀZžĻ&®ߓ“eó¦7œzÕx Ę{._łĒŸ>ōÓgķģ¹ęæ~ģ³~x÷kßšęsOßZü¼T’?SĄŁā’ŠĄĄ‘4„£h8Ś»P7>Ącg­#ę8“Ϧl īł9\š"Xu*$bв šøē†rWŪ…gæ"hK?¤ÖNīŅźbE¬8 –_Ž66wždźńÄĘ0{{IŲ6qé0ęFI74ćEŠn1ŅU˜L˜ ßC(ńÖS¹ōÄE|Eˆŗlę ˲ų[’Ąæ|ä{|ēęĶÜćēé÷ņ$Ū;ƒ,¤b T0ßå‹2„=c|Bm™-ŁX#©”ÖW†4ųZČ Ų¾LŽ›¬“ūw¶• ]äeķ Ń¢0”ØŗeĶłĆ_µ#~Ą×Ę+Œų³žhÄ$@OߙČ1›Ö šZŗh'/¤§'ZE0ékŒ­@-0¶“„|åYA9@9šÉ̐iД݉C] ‘Ń:]‘J{„M’Žō¢÷²lŃJžłKo%“›H—vl—?ēÕ\uįĖhŒ6šŌžĶ|óŸēŠĄ¹#’µL’ęŠüĻśŒ/_ń„™x_H E˜‚ EĄö‹ÕģäD€Q…ōĘĀI7ęńH÷&ŚCmßµžfÓL6GŠ4nÄ!Üąā†qŲäæŠ^ŁVŚ’Ļū<8V(©W 8]45…ž!’5 “&•Č’ŒgH„ŽpŠʐĢf‰ÅćäēˆųᄺIGŗK¶ĶY`wæK2+9sU–G÷–?üæö¢Q šÉ_,DiĮŁk2¼hCœ/ß\]Ū|¤R!6'W°#½ˆuŃ~VG±&«ļžĮ1ŽD*Qsæ”pN÷×"’µW3ņ“Ŗ§’ĒŅFŠCPĘX¹jŗŌ¦AhžK£E”üŸB‰Bł?!„¶„Ō¶A ƒ–6ZŚZū™Ż#ĘhO9ėčÜHŅc(īqöńĶ<²³\K|h8ĒK/\ľž ń“ĻĪž4¾š’ėk2“׏ųžeT;ē¾Ź×•ž_-0°w Ūbķs_Å敟mx>żžĻ÷tѰšØXœŲœOż’KV¾ń+ł €_ټyCĻŲéteöv_‡NĖeæ~[vIĆō€$’Ø#3›ĀīČĆg,¹įŃkŸŻõ¢æĻ»ŗ§ŽüŁ?|üŸ.nūīt咊8ś’łĘ¼fcŲ±×¤āüqiƬ¹‚(X€T Öæ’&,Z‘FŲ>&/›IĄoæ –šiA|0TbĒĆpą©ÉķŖĘóĖ=›É#H ‹Ēa¬1B¦³+(įś˜¼]ūÕėPŌūæo׬nēsBAžh˜šg®ćmĶ?¦ķļā?KÖŒµ/$gƒ®Ģ˜¶ą<ɚ×Ųž:Šž°Ÿ·6læeĶēŚVŽ|{Įńƒ;Š>Ҷ ® 3nnZ‘Žœāe쓽œ}.f¢T¢Ņ“ÆH|Æóøų6)†’Bė×’)ĒQ!5£Kö»ōó2€VIÖ³#…Ée cK”µʶÖJk)жJ[Fa“<4²KP@Ā«–‘~*p"ÆFäŖ¢Öäū É’„®āy罐/üčćģß7ŽŽŃŗ~ćæ³²k æ¾óĒÜūųķ4„›xåoę_ßń>šÅ7‹O¾3gäæĢ‚üĻ*ŠPeöœŪ 06kĘÅ’ ćŁFM$½$Œx1Üw?ĶN3Ē-ZO{s;Łtžl:‚PŲ!Ņ"¶'śž4ØĆ'’måk{¾*1Ł«ŅwiĻ“ż_=ł7ʐNåHÄÓ¤™‰tį#= ™N›ƒT’Jä½ £™r:ƒķw3–^ĪrVĪY’7onā„ēÅyl_düwuöš š}¾pć”Όķ=!®9·œ„lCĪ?:gNZ?ųKF.žŖäD£(H‚ü1į `IP…LU0(Ȑ‚ø籃Óč4³vįńt““#‘ćĮiÉ@&rGݲżŸ/ņ_ķWžKÕČ’ų’õ’’É£9¦įå}R©,éD–t:W[G<PZ“H„MVz4>|•g,3Hʏƒ-8ŗ—x¦F­ßbWŸ‹Ä°“ͧ;fq5/ڐ஧£”*“Z¢ŠD¶Ō—žžŖ!¾ś‡“¬'&ÉŽĘ™.ÖEzYz&p”ĶKŒ IDATŒC)UW€| ßÕĪ­¹ ’sŒ|cõō’ü㽊‚ń_IśæAłæbm-¤Q”D* ćc e‰ąĻ©„„µ±–ŅQ¶ĄGhK啗;xø€ī”,žž.·‡ˆ§}āiŸ—]øˆžXŽß=81ńpõʅ\vF;æŗo€|gĒįlrZ f=)Lڱ¼”ė&ņVQ@0»ļ3y–æ–ž’Åoćž'`ƶū9l„Ėš…ß}×vy8ŚÄm'ÅĶgż-=„“OõʚG’_ K"›³¬ÜŠļ5oUļ8wćSĄSĄ¢˜›~Øį”ķם™É-8ĒÓįs|Õp•A,VŚ]–‹7É©lē‹ś’£mų‰’×SĪō·:³ŁįBu©n£ •>•ččĀt,Ę»łA6Ÿw"µ7OķXß±“©¹½ĻĻ)ŪŽ:ŲĻØe3ä8ō‡šu[ÉEŠ-č|¶äxVČj”Ņ “F¾ó .Z·ˆ/käæK"?žF^Ņ#w÷ž $fAĶķ77e’X·ż”3{ø,9Ākø…=t;;Ćanm_ğ^ųF6M˜ĪÅb¦ś’jxŻWļöFŖÖ܎ē/’tźŅ®Oß ÜŻŲŒ„ļoŗyéPöä^rĀĒLJ0Sż’\Ήž†®ÆG==ü’*F€ —”ö?Mź”ķ|óŠ |³r3ŸdR/^ {Ɲ‚4ń»»HJɈcŃė†hn ¹p1^csķŠūL|<ń7‹YvB łŸ‹*zó†HūóļāåW|€‘”C(ĖB9.Ŗ„ĻVčjå'É(7 „¹‘`VXłĖĪŻ{£ķŲ7j…ČĒ" Fŗ–Óąg…ÉŖ0€ķó·©mt1;Į÷”Šó“ń¤å;ZM[F°ŌĄWąL< }*3Ę’V@é å…cųƒq@©,ŒTBŪR(%ж„•/Œ²ŗc;żŠ@hõrü'žžžąĶ˜üO’I!łūW ĒvłĀ>†RžųjoéX¼pūĘ{'‘’āːĘWÕÉOM² sGžg°Ļ3ßNäær•Ņ €  ²4KNĪ…č“,<†I‚Ą@A`$dUЧūgß`Ė;Ö°°¹H8<¾I/Æšņ’ń R B—PÄĮ 98Ž5 łŸ<öł'’•oJz9Éæ1†l&žLžl*ĖQŹģŸ4®T6K<•"Ė͹ǀÖ>‰lŒDncdHO°Ž(!Ł“ņŒeĘføņĢ$[…ĘŻžėŹÓŃ ī:ē—ęg“°«ĻeåBēŸ‘ąŠÓ4E4’}[ m–.?#‰Æąē“0·YŽīqåYqžŲfėĮš”Ūī©)ĖpóęĘ)—9dµĆ“ÉeģH-bmt€ć£ż8bn³3žĮį”žōÆ$ĄĢŌšqš  ØŽ|ŲšVmĻ=Ž8’Ė`֟‰ōF)µ%ĀRŅ’ń „’”“ŠĀBŪR(a£…FH­ŠĘFē“neįĘŖ“B‡„ Ž-Ė2œÖtEŹ‚󁼧MFķüˆėdŅNū–%Œ_głæŅĢ€ŅņV ”4¢^ōžż7ßä̾ż¼$“āuŻ»yē×?Jo(ğμ„’¼čś+·;WśJ¤”HyŸ#3ģļõē<’PC ݵō’óKę9½æĢ{`¦>ėĪĘōīAķy’ģoī箳Žć‘Ī6Ī.]fø'˜żßzģ{rīĒŪåP“Į¦.R -”ŻeĖ|¦™žÆęšn–ŠsVóU)˜V=± …š×’W¼šĆŒIωā…$Éh;^i8rJ€„£‡#PŚ3H'H®÷=|Ū ~žŅĘmϤ,Ų6Z įē°aaLé6„0ƒLBmžoF›u?Öü٦„¹o­%m”Œ-“”RŁ-„1¶ŌŚ ł*įķĢfG÷…Ć­kęrŸīzŒ×_¶˜_ÜT‘>sm§®jä³7ģ›ĖĶLĀžž„'ŒsÜ`C$žp¬„šLóĖQOł?ŪĒxÓX%>ļm<<ņŠÆųŅ£÷šY˦ϲjj ¦Ņ’§˜[żį<&W‡µcc3†ÕŻ*õ’GĆp¾õ’0‡€R€ĆÅā5˜%kšśIüś>wŻ•üв&&{耐¾†??‹;įĀ 3ū†ézēÕ\ž›H‡"d".¾Ū„’fŖņ€³E½2%1ÅyÉRm¾Ļď„ōuŠąƒkS¹Ž”Ā Č%d³Ń¢mģ`ųŸ†Ū£ļźX‘·˜T€-1ŗä·S*p$Ęh7T iYef€ć2kB Pø®Ō¹œŅŃZaYŅŃŠ"/Œ°6Z(a„>ŚĪ{Y(Ńm:›Ė\³¬ĘÜE É÷Õ®‡Y›ÄÖ&’N~×\śZ¾÷ŪÆšōŽ'ĘŪ£‘^õ»xtŪÜžP•ņ…>6žz1‹Ś—p÷ę['}K®ę:¾ ([gV˜!łŸmēuS1ÅŪŅl€ń‚"h“…IŪb iŹ«X…@€æ* FANe98¶‹”D-‘“7¶ÓÜŠ@C4:i—6ä2yr™üųœ°ƒėŚø!Ūµq] )Šé ÕöūƓüūž"ŸóČ’2łü±—źf€Tō§s‡]b»*|å‘ĢÄHz#Ń éˆæ-–›ń ,AˆƒÄ²ėēßiĆØÕ1’²ųŅͬéōčhō¹ł±F†“Įu~A“¢Ōž”ܰwĄaļ@šj xŽ ~vó8łh*iˆ—?~¶"KwĢ!– b°ß½c²Cś|¢Ų•^Äŗhk£ĻŽ"|Ļ#YGC¹²X¦ģ_uŌŗ=ĶĆõO¹QüŠäą—·7fL,SH’§<ż_ Å¤ō|!ŠĀ’J”4B ”µ%,%µQ¶1:؂$µĀHGh[qS¹TbļĆįš™sųķƒœB+/ÉõŃV6oxw­:!˜g¬LļܒϽ‚ž7ņę|ž›N8•·Ÿ¼ÄLŹ’•¾Ÿžæ¢˜,) :Ō[ŻżXŃ’—b*ż’l0ć€SĆąĢŽ‚,€U§ ī õŲvž|r7?=cÆ;Œ.8žļr# I›n×e_C+=­‹I“,Ēw š—Ŗń’)|¦’øł õq3ļœÉų“†·.>/xöżųįĶ×ĀŖ„Įē?ł Ür7\r>|č³šŽėą9ēŸżénˆ§`óxÖųį/įŃ-šž7ĪdŽó2ĪžŁķl m$jĘkļ$‡Ģā-ĄxŪx&%{ļ:+ oTY¹Ę C¶„ūC­™ū–0|“QŗŠI”t®OķĢgķOĒöG?Łæ­ń­+r/~.¤0¾6Bś %­ņ‹±Æ¶eTĮLPKa¤žŽ=JČq@°ńā~äµ¶„žAI-“+“V-„ÖBheķÜįWĀkVVĢh»6ł8÷䋸ļńŪ¹éžŸ—-ųüg½„ę7|¶DY¾rc“‰7¾šļŲōŌ½,qõģhYČ«Ÿ’6Ī=łB\7ĢćŪā;æżżĆ‡*TĒiSköäf³’u}\ßv$æbAĮŠP˜2Y€(H“ ˜NA£",@ 2*E&•d8ÕKS؍¶†4EhŠF ¹ÕJČg=ņY¢­°,ĒĀuml7Čp\ Ū±R÷—Lž•ŅxžO.ė‘Ļyäs>¹l¾ÜÕūD:—#™N“ĢdŠz~ƚ÷s$3Ƥżx ńi‹ąÉ„@ų±‚ ”°Eœ²‚ö°ÜKŸD>IShv:\c»ūŻń™ž"r¾ĄŖSŲp\š±”5)ĶmWžŻåSU'-ĖqĶĘ8_¼©×64…Õx°įH#ol¶¤–±-½˜µ‘NˆöāČgG±±śg’K}Œ0ÕÆs•˜ā^5ߗ½\Su’½ü£=ʈ¢ūæ(u’/O’%é’–š„D K(a eYØBśæ/l“BKĖ(¤­…Äh©LHężŃŌ]÷y­§\å8ΜékŒūžå¾§GēŖĖšˆ%²¦t,Öąx½gt°12”‘:ir¹–=ł›¬§üßš~BžĒāĮƒ\{Ówˆ8.÷76ó§u§sŪyWS„>4µįŪ»ŗwp™ćQf½^«üßLō’ßܼõ²Ńōŗ8"sĽļøĪ[ļɚė¢ Sė’‹ųŌ­=WŪ”Üš{6®¾·Ų֜ŸŪŃŅ’×Ā'źXFĢP’GÉ Ņš’ €S.@ļŪB>—`ōė7ņ­¾–3—.äŌ#9ĪŁāŃmØßßː”ō8»Ć ģļčdhÕń¤[ BįśæØ¢@µĻü˜Ķ÷<ųÉoᆯCȅgŸ ’ō™‰ĄĻo‚ßż4FįWĆUo˜] „ūƒÆåā÷|™¾Ų£‘f2a|× 2€2–?_2€āĖ"/åļytŁ…ÉžĘwk%—•®Ŗń¶/“LĒłāOž•žXW>ė„|ź’Åõ_~3±±B`ćÆÉōÆīķ”<%VL‘F‹Ā©5ž<\)Ś`ŠŹI”‚Į ”B <'–ļc4?Ls²ęp;®ćŅ‰Šž"P„!˜ ÷=©ņŪ»e[ضĶ-l×ʶ%Žcć8Ņ.f]ņƔĘ÷žÆšņ^šŚSųyŸ¼§0óDžēʐõ<’é4‰L5)žEä¼4‰lŒ¬ŸK afü"ńŸH’–˜8ļ¬ P`ĖQl1ĢHvxÖ€©°wŠ„£IqҲOuONJµ¤įy§%łß{'+ņÖ.ņŲÕ7±ĪāVW^0Ę·žŌĘhŚā9§¤X½0Ä3*į‹ķéÅģĪt²62Ąśh®<śĘ’’Al4V{! x)Œ¼Ÿ łŸz™¹C¾±cR›É+¼'ūźK’Ē(!¤/AśæĄ/K’—…ōa“-…ĀKhc9RĒh×äL“=0OøÆ£}ķóęg/ ¶ģŹXØĮ“9ŲéE”¼e卙B’S§’õ’+ɽć£üżH ėŽ8{؇ĖĘb\÷ąŸų·‡ļdk$ŹmĖłÓóßÄf«æå!Z¼<4µrL_žo¶Č…1rļų¦¼Š^0š[öźMß}¤ū »m‘y d§īYŅöŲżo:õŠ}SõįwA"¹čĆ=#g_°¤ķÕŠ‚9ō’sb8 uĄ©°īlĢŁĻÅόN ŅūßæēÓļ{)_mj`ņÕćBĻ ęk70"$}Ņf·awsŻ ļ\‚ cŖ„żĻĘĄ÷W/cMS„«f:Ī{Ā_ÄÉė`Ūī •’”ĒįĢ“ņ°zy100 …£æńĢ€üDĀŠŅ‰$4Ķ"žzĶ%,’ō8~d„ĮŃƚŪɶ·N”¬œåŸ-¦—xXŅ 8öŒ)¼Ž{Ēź×fā‘·BZ¦ßmĢßnĶ=aŪ^B{įÖÄ`ų /c]ÖódĒ,G½³±3;&+Rśń}plen9ŲxÖšĮČŁ-˲7Ö;ī‚  ģ|)5BF+%°,D© Ą’:g„°\£“BJGk£0B”Č”P–e);Æ}ægd·Yµš”Ņm Ū&¼r™]…YõzČ=U`ŒĮóóe«µ5w°Ø} m¹{r…—³ń…<ū¬ēńßæžOz ę€-|ü­_bļn>ūżŽ÷ū­_~žÕKŽē_ßöe>’£°Æ¢Vč¬É­}>RäæT2ÜāŪ*&ć³’–iQō°‚rF0ńė*di m­}F½AāłašœV2łF“IŪ¦)„1Ę­ ؄ņŹWä¦Č7B -‰%–-‘–…mI¤%‘R „R Š0­B›ĮēZf× čĀ,›Ö&šG“ÖĮ8”FiƒV%ļńYüz)Ģō§²ŁyŃõ”&“‹“ĢÅț\0£–AVIQćo „mŖQØć²Pŗ2,ö0”YĮŠ–Õs:^Ļ|ēö6^ń(Ļ=Ur(fsė“ÄÓAłÜć2 'mvõM>§×våøė©ąęŁÖ¼ł²žļĘ\ĒpŁÉIžė–cē1§4°*<Ä ½„å±'Głk‚Öŗī@Ī«øĪ85~§ÓܧDõę9C¾”cMžMxOōh“õ©źž_%żæą¤’ „é’Ņ’„ŌĘf<żßAh%q…эN"½ćO-Ķ+/“m{ž6ę±DÖt÷‡ļ`Sh¤»£©g“„!>žž?Ułæz[ńÆ~ ŸžóĻY}`—„üĶŽ­¼ūėļgŌ²yBJ’^žB¾ōü~ŗ~§Õ’7P–µZ©’øöÄģ>Šē]`’v××NĶ®8?ļ7œŸŹ/üĢŽžĖ[?ŲÆz-鯒‰ū6ī¾÷Eē_»­5“O¼ēāĖæ’¹?=ōö>~ėk’é’öļUʱ ’?R8"€™±x ¦ķ|ņ ‰ļyš­_’%{×ĖųLC˜¦łēįb4ŽłĢ÷Keč³mv‡BlonbO×r†VO¶±Żl£³…cQ”ĢĘĄĻ#|qŽrŽ!ÄĢ‹ēåżąy©Į„YóĮX^QsÉ¢ņ@W…‡K$ ™ģģałīk8ūĆßf2ĘĄŲ0‰ę(žģ¼Ž¤ @dĀ ¶.=3¼ iŅÉĻ/=«ēvŪvü¬‘aŪxh׃]§†£ļėŻ²ąŻĒ_Śż© ¼Āģ‚€Õ1•e®Tć2‚ ŌŹ/³Ō PHaLč—õQ‘0.(;. ĄH”¤5.hƒÖĀŅŹŁŽūt¾">neØēØÖ Ā3Įކƒ“j4+’ šrć)Ļę-×¼;6ŻĢīūÕųĒo½ę}$3qžćž*08ŅG{ĖB>łŽÆńķ_}»»eŠŃÖk]äæž.뉦ĢųųWYeŗéķŹYņ²@@ŃP`Š3ē…²BŁ(h@ŚUš`;¦bŒÅ‡ [ 4ø-ä¼bq‰%%‘p˜†ĀŸ”3×m—qąhDł’”“&“Ķ’ĪåHe³ó:Óął9Ņł1’ł1“PH‹Ą«£ ć„’’Y’ń Ā’A¦ŠBA#CŲģbŲß@ĘKqź)®[?;|źW XŽįŃÕ$2Į5Ł’†ĖOKņƒ»&Ļž7†5!MÜʶąŗKGø{[[­O±»ß„gdāŃģø®<¬K#lŚfk÷Ō•ę¾±Ų•YľģÖFXķ'ōL `^02Cłõe[d+¼AŒ=ĆšQ$’^cgÕöܦ^…@Wq’×BU鞏Dé’Ę–T–-übśæUp’ÆL’÷D`Ņl‡…ŠzYŻ:Ōß?“ż–„]'æhžöxž``ÓÓ}i!¼ž°“ŽÓéķ]L9ĀÓär`×.’ēO°*ōž¶ƒ¹ģ•ģöß¾ćW,Łõ(ÆJĒy«móDC3ß:ć"nXv2™™č’KÓ’ķ•Ķ÷yw֙›€Mķ_Śė­?y솆²kž•óšĪO«ö÷ļ]šł/žaψ%¼ū]+sē¦ݷ·G÷¾;–Yó£;÷}īēW~ż”&GS’$ a–e0¦ŗ>”š|bVĆ)Ēŗ³1Ļ}6žIēéZĘŠŽ>žŽļų|*;mYÉ£‚Ń8ęÓ’Cbp$˜ł·]žŠ4³£s9½kW‘ģčĀon«]ś(ó€ £ŒŹČJhh Ļ|öąÄć`ėö‰÷ŪöLżÅFįg7ĀĖß5ń·÷` (¢qnŸ„øę–(Ÿ„ɝń“YģŅōżŅxK—‡ŠœžŹō¦J3A„«ü°¦ø`%ś[^ˆ–Eń[vĪĮ[”|JÆx{^±”÷·NXŻåe¬Kc{›&ič}@¢?r€°ƒėž+'Ę¢©•%mZbš'Ą„2®ĒßW¬_„(¹xKKhKūƒ““F[-„ж¾”Ā¶å3<#ž¢Ī¬–ņ4ŚŚ$v–äæĆ=dsiN[Wā4YBž’žUå±mņĶ_|~üć% –sö‰š_ü9Ƽ ”§¬=‹_Üö}>łdAė¢:÷gŠē5rbÅĆ2ż›É‹¤ætåńGŠ€lISØ /Ė€- NįρC{ńµ „9‘f8ŪC÷ŲbÉ2ł4ÉtšžXŒ===t 046F6’ {ŸOdóyF ŗŁŪŪK_,F<•š7ņƍ&c0~žÄ~ ćhdˆĄŁ?¤ż’‹ąŚBįP8æ$Ā Ī7a— ˆBpĄ„›Q3õŚ>Ķ Ę ¹Ļ²ņu—’+EełæZøųŗÆū7>wĀ9\”5­KWrū†KŖœŻÆ„’ŸUŒBӔ’hučwœ»ń©<{į·’ķ²š›>s™uĀźEwœµ?,Žeż¦·ˆµ)–YócˆŽ·÷ļśKÓ’Oe8۟ķģ2†F€µPA€ÜžXŒd>Gļ£{ø}ō’Šļŗ†÷·6Ńr8c˜+ c>ż=Ęz‡é³lvŗ.[ZxŖ«“KV1¶ō$ņ »ØyU.“Lƒ˜±b IDATVÓ=ŠõņÓøRŹŁeC\vüźfųöO‚L€Ž~ø PlѶįuץk®™zż¹6ČźlǾb#ėnŻĢ¾Ō=éĘ;šēZP Ķ“F²0~įœ– ƒƒ1¾X‚ ¹ųģCwK‹¢wüÄŗ¾AmĖG8°³ćŁ£š®n_ųŖŌ¾Ń2paÉē¤½ēŽWfFģ— ‰ß¼4{¾»zāFõ,€ Yv5Tʊ'›B!mi„/LQ lmŒ.“h”„¶Z ”äŽįśō肬mD×­"±é‰ŠƒP:ˆ)ßL“ĢÄ š_ÜöC^såŪš}žü3m-<’Y/įŅs®äīĒnåænų,¾ņĘ×9qĶiōdĒž-“ŗæņY/Į¶ŲrńŌ(;öo ~>õĪÕCŹkęŠü×čhr¶ć·œqæĄBĘ2x;^%Ą ¤@›Bv€f¢²€EP”J‚0A%”Zkāz”Dr”ŒŅj„Įm&›Ļ“S˲ˆ„B„]—ˆėāŗī|>«žÕĀC.Ÿ'S8¶™\nŽLü*‘÷2$³£¤ż8FŅöCi—ćę}¢Dļ_œł/˜ū4žfł…,œŠ’ E§ĘƒWxÄ<Ķ@f +šW‘żÜ7ą²»Æz=Ŗćŗņlļqł›S“4…5ß¾§ż’±÷Żq’\ÕÕē¾WÕyāꯣœWŅJ”Œ"$6ɘ 0Ę&ćĮ6#°LFcF„IBBHBå“Ź+isž™:W½÷ī÷GUuW÷tOŚŁ]ÉpæŻž®š*tuu{Ļ9·4ļ•ė³Ų}8‚īaoŻu‹Šødc׿vz†½Gµm]QD­#Õ@`_a.fcY¬ė“ŻˆĖ?&ėŽ4¦D’WfL' ¶ėT4źüV šNóæĀS‡ Ų×ūƒ˜¼_ C3± Mš4žżŸ“Š$„!!eśæm±C’·¬˜˜1…ĘDŽ™Æūöu<šÓU«^ū‘ˆe×ė0÷¢ŠŃœĖĻģ貄jOÅGwĢk輜ŸģČŲäDŒC’ŸØżß÷>‹Æ¹ńܽā$ÜsόaÄ#ߛ/¼ś­Ųsh?~“'>ąĄŃi’WŒ£u.ė˜ŖÓžļ=g]“Ąžø‹§Įß~ąÖłzĻ<Ū1g[Ā­ihx“ć‚£”’Ÿ† š"öĒü„ąS_ 7—ĘØÉ¢co7ŗę‡(~šMų»å ±äxīŪ3; æ}†Ņ9–^å’…h[ēĶÅž¶µX{ sęCĒąBĪ»ÅĘ1`\Ś’8>ŽrņóšŚéī·”Ą%ē{ہ³OŽóę26˜Ż ttOwäéĒėĻEŪ›07ŸFsf½ #Č[6ŒW`Ž;y@M3@Śø,…M.r]…h^¦Ól‰fņn?J–+FFøÄ ™µrx÷Ą–ŻNÖ¾ßB›įHėŠīę‹óĆ֟-3ēæÕŗ8Ó¬`'lö'ˆµĖ%Qy”8²q‘™,ņZRVz„ddmEd–;(Ė@¤\_`‘1¤©5kk÷”=Ή‹N‡÷‡ŲŠ„ČlŽęƒqcęĄæŗļļyż‡ń7ośąp'¾ń“Ļį‘ēī3³A:7:fųe Wįm—¼?æūŒfĖn½Q;†—o8ógµ”«÷žÜś0Ģ„:ŹńšõRĻe3žk-āOc’ź¢ŅßĮåļ’öHŲ+Ż{‰6(I(HųmIz­ɗ °Š:‡B>‡üaÄeI»‰h#“†ē:ŸóČ_BDl»”ˆE£ž~’QĘ\…b…byĒ©p ?ŚįQüÓȹ£P\"¾Fß§ų`_ų³$ļŅ’¤šõż½ß«ģ‹š÷Ć^Š‚‹Ųæf @;Š«ĻFĘI#9śźĮĪĮśU+ę;ČÄń²å\wē,Āb6ć‚ Y\÷[OcgIĘ[ĪĮĻi*Čr~)oQ«‹s×ę`YĄć»ć5żŽE„‹£ƒŲ:„¤<:-!’¢°Ņģ›Bqģo±‰Õ@J’£D(6Ö ’†ūL—<÷&x•{Ÿžļé’AlˆHƒ„†€fAš+¬„%”eAłī’ćŅ’eÄ2ĀŒ±l…ÖxvØøs÷ĮŽ%·Æ\~ņéž’é„ŅlnĻćt%c™ķ­©Ž]‹›÷ “4øB:\^n|ś½öm+šćīv¼&3„Ė7߇«ž;b ü~n~’ŚĖń\4“’ ‚e4ęÉqĶöįxė†?=Œ øĄĶµ ’ō’Ą1LL׆6€7xŽEåbĻį@ßų_’ éwæ—_ųrœiÉéÉ¦Ž üāó ś‰<ĶæŒ`k"…ķs`ŪZōÆ>……K”b‰ń[`Ōō§ +ČT§Ow’†[ļ~šÕ±óV.n¹kŗ#O?Ī8ŹÅ¬B-Ł4Ni„lAˆŌźPuØičVN’8Ö4zg¶§å¼®­K^³ģœŽß•Ż‚ˆbĒ0Eν¹‘ŲöÜ7÷#FYK”+6‚½ū¬“yūœ™’œ»6³C«±×* bm˜,„ČJ€ĻXõŚŽ‘(Ó0 ÉÄ^7b0“dö»H"£%<;@‹4'‡ī‘żhkY]±‘bKŪPŲ{`ģIē›=š_kĘÆīūÜłčĶX4w)ņÅ,õuŒY2bE°jÉzXŅĘņ…«±¢m-öuzZ—å WćÓļū ¶ģ}w>zsiuKOÄļø;Šmū7ć¢W\†×æņmųāŸB:;RwbŃ8·Ću3ž§xלų_Bó©œą7 e„Oš„.%²„g¢§ż Æ!@³Ļ –cäL¹b¢ą%vŃ&y¬Ōiœˆe!bۈF"ˆŲ6"–ŪzIäøg$×-ż+*…¢ėBMRG<“QżÅh8e /Øš!=óEX>Ų·¼ł”¤@".WśĆĄŸŲ“ <‚Tųö’–A„»p8·«ŽA ^ÄlƼ…³×ępżļZQpĖ;{ž†,vŠ–Ąž…'dŃ7jį…ŽŚz’ÓWęqŁ©iüö¹8.płyĆųÉĆMŲyčų1 Ś‹³ŃQlŲX?Ö&’10čé|õ%_#€HU`,µ™7Žc½6ݽ†‡ ĢŽ÷×°’ėįż* bķUų”½">Ah V$„’DZi&”…QŠ-Ū!“Šū4"µŃ’ŠL ŅMåÜāšĄŽŽ'ŲŪ‘œ³ŖmÕ+_¬)cnī,¤Ó¹īh$·£9ŽæeIþ®ÖÄŽ“ē©“SkŒ×ž/L’æō=ŲĢ„g\óąÆ±“} ^•KćāŪšĮļ| #ŃīIµąžU'ą©W\„Ž»oĀŹōމćީВ«õ’Q£żßxQÆż_ńI²Āń‡ ’Ž b†VÄg¾Źæ\å½?āXpĆp+zšńÅĪŅS;~ž¹‚Ų°’‡;[7¦‡"g؂}68¹ČŸ£)õPr~öž«G·[–0Ą¬ ØÖ—OvŁõßoÆ^9æĪž“TŹ8bŒP‚„C&, †.²Ų!#)AŠ’ČXŪ»¶ŖŖÄ×®›˜ĢĘDQ,WR N{;wŌ"Mą‹’ļ{(:ElŽõīyā7øźż×į±ēļC$ÅY']€Ē^øßśÅ5ŠŚū$×-=Ÿž«ÆąÉmćæ}-2ł4l;‚zϿ㊷_‰/żčS(8ł1ū¶rń:üė_w>r~v÷÷§zxćL,Ļ8ņÄI0āA¦$1šwŒB‰„aĶ@I7ą³$Ę«ŲzIĄ~‡ !Ą> ” Ą†‘×id‹ČĀaÄ­$¬b‘„(×1„ą(…L¾üy !µ,D"Ų~BĄ–¶e•œ’_JaŒ«5”Rpµ.~×=¦•żpx; Č»äœ44I`ŪõĀń,īŸöOž^_’ŸąR ģ7įĆ/@ ĄļOLxœ0¤ l˜¤’ż_‘Z’Š,‘–ÄFXR[lŒ°`„C$XŲdˆźæG’¶M,XĘhŗŠÖŠŃ³sų±ŪŠ5.[ŌvņŃ?#S fą±-‡œC#‡cV~Gs|hóĀ–ö}‹Zv4ÄG]ŖžO—ž–»>=ö¼7 oĄ÷-’µż)4>{ĪĀ«įŖžNĢßä …Ą®Ó.Ä7£Óž/cż’PõĘŃ$›ĄčśąHĒŠ ˆĄš™vĆÖčŽC(ģļFśŹļāĄépī«Ļęė—V»ĀÜö ²Olŀč—ŅƾH»āI˜½]+VbxķFSK`š«ĄXP/&ÓŠuAKgaż‘‹RĄĘ ĄĪż@w/p㯀†$pķ•ŽCĀ’ ųųÕĄźež»Ńnųņ‘lqrqŹj̾óI4 HęņˆØ,D$=a7uĶüjEM€ øpa[¶7߆YpęĪ+{ž]ńĪlOĆĒ·žvżßY–ŁE‚ ̰µ’m¬°TāBi™Ѥ»)9?’ų¼Ć»P   3€_ŁĖ/±0ž @Œ'y„dxÅ4 _ą=]ė‚4–Šd„0Z-Œ&ɚõa$?€¦xÅwÉjm‚ÕŚ5čßv'’GVĮ¦Zė®sęĘóµcųų×ß[rżæļ©;pś‰ē@ųĢõĮ®ƒ[Kė4§ZšłļxzĒ£ų_ü›WÉ'ĄUxę·ų»?’4žķĆßĮWü/čź;Xq<œz)¤xzēcÄēOž˜k-3ņŌżØņs ®ø +f €`#A'ųĄßpŁ? š `æµ`0ĶųRöŖ Y3‚La¢@°)Šø•D,Ņ€ØsüĘä}Ķ{uXB@V%¤”B@Į^ėĄcŚÆ­ ÖŠĘ@…€¾«”?żÅŚ(Ż< n•…f×wč‡܃ æ€'õhżø—ś[”µüB”@?$Jץ?š·"x·Żń€°€vc”Óč/ōa^bA~Œę%®æ»uĢō 6ä°µ3ŠŽQļqlż¢2Eż½c…j’€??k7?ŁX’-ԔÅ"3ųĖó‡ń­»Źū šń×õć÷· otf#„öāl,ĪĀ¢čNHv”Įśc"`¼8Ü×3éD^¾ØĘ,kŖ«’„8~ąßXQøń±v]f0Ēīī x~DL`ņŚž±`H6&hIšLž¤ŠBzŌ¬-!•“ … e h²`ˆÉ€B!a\«L’— cŒfHļĄ„eŒDsšū29²;Ūū½i§{ŗZ³lŁ©tLĪĪÄ” ćŃē;öŽįßŃzf^˾+ęķģ›ŻŲććxęŠ¾žŗōĄk’žgł†ŅėOĆčśÓp›!Ü ›~‰ŻŻh‹E½č-Ų‘l„ļłūHŚ’„QŸsĄÅ:ś’p¤§ȏż’‚‘žx‰x„#H“ĪCń”ߥģÜ ÷ŠäÜ,FžŚ…¾MŪšÜĘ8õģSpŅ©k0?•˜z‹¼pŒfĄ½÷Įg‘ŁÓa!0($ ‰ƒ ū£ “7ĢBgó" ¬9£s—ĀmXµĒæy„}&jĪøH‚¬:’ćśĒk€½8amyŚßž šŠĄłgzl€_}ŲµH%€%‹ŹĖ½ķõŽ3{8¾÷% >ģĆՋŠpūcH¹nv^ADBģö£*·a{ÓMQq¤NŪ¹»PJżŖļ¹¶æss‘ĖĀĖ“ą¬Œč'£ÅMĶĖŅ·4g†įӎ(ł©C„Ś֋qeĮq0XHŒ#†ŲHŁ`]O@ž @6 Ė—X)£…’Ņhu wŸ¼ōœ1ēhķ ¤{zꥒD˜w‚1$ D¢QdriŸ?X¾īėŚ…}]»üq*S o{õ_!›Kć?ośā"–D’pžŁń(>’”oć¾ń^ Žö•öå—÷žwmŗ½&ÜßÉ?E„öo¦Ą’Dŗ’é‚’źł%š_Ęž%³@0D)@”eŁÆĀ{¬€RzšĄa)9ąÉĄšåWĒąØFÜXˆĖ$ā‘ÄģĄ•^e ”ć 8^—"H"H!¼Ä€ įŻtAŠ®€ mü–#Ģ0ž5Éģu°1%ĄÆü×s0U'ƒ¢ŹĀхR«G²½sųyLō¼d€ųƒ„€ēÖĻåi‚ĄAµŸ¼qˆČæ\Ų3 ükĶæ–‚ ±Ž5LįE4üŗ³s[ VÄ#ē­Ļākæ){®®]č`GgķÓ³Öę° EaC[żv) °°Ua03ž£Ī[ĪĮS{ćÓ^¾<G‰’į`:‹­č*¶ü10Nc¦D’ĻĘ".N„īeu¾Ēü~õæĘóD‡a°÷5īōF† š@ši)H¬%‘b°š”$Ņ‚H3A (Ķ–0BŲZaĆĮ&b £ÉpDzķ›5¼‡@!¼*¹%ˆÉhŽŁ9³“µwXj{’Ž>¾mėnĒ]»bÕéöq6–É]<ø¹+ß7œī‰Z¹‰į'ę„ölY=kw÷¼äĮ»ćųɌ#„’cŪ’Ą­ßĮĖ,F÷é—įp0ķĢĖŠ  ;HŌ¢’׋#m’7™ō’aśß5Ŗõ’Ó„’æ”ā˜&ŽÄąi¾I}Ą+_·e.2Ūž„{čņ£Cv28¼õ :žß‡g- ķÄÕX{Ār,Zµ- g#ڐ?!0’wöAļl‡óĀäv@F1Ņ‚0,$ś„Ä!ĖB—ĮĮDŻ- Š7gFVnD”y.tÓ,˜X ͘ 0aTU’#Q°ėxcĘ­é›zU’0ų€“ׇzŹļ-«Ü°b?jx %ćc§M'–.@Üh$]‰¢ Ū\”°‹ń»LEPĻ 0-Ą Ž‡×|ŠMĒŽź„l’ŗŻNčG³s›Z—¼OcŲW¦†«ł^u> ī[š@|µ `Œ`”Œ.²€ō»Ķ,dy܀Pµ"ņP“Ļ Čl‡ GX³!† 1Œvɐ%ŒŠJ+6† "mm?“ŪYßö ŠČŠS[¾™Ķ[Ą…ą§åh€’‰Wnmœ÷¾į#8ć¤ó18҇tn³šęąŠw^‰ožģźJź~Õˆ ³6^„ļßśu8n±b“D„sOy5žŪż$~|ēõøćŃ_bp“Æbˆį̆35Čg“åćפn3ž§¼:m(Ŗ€X…Y`°V(yĄ{ääO÷¦1ūҁ3€¼6ƒš:x² a@€ö.ycr<‚\~œ'HXˆŠ8bVŃH¶›ś ™šłESy?VaŲĄqó(Ŗ<•CQēĮdJÕż@»_Ņź’ʀ~T€|öÖńŸĀ½®š®L{łN*&‚{ טąŠė¾ĆÅ!4GkÓėuäkCT~hŒģ؝xåŗ,žėžV4& >pÉööDp÷s xÅŹ<~ō`ķ¦HKęøxĒŁĆhIiübSY5( xĶÉüā±ĘšėĶt„mŃA¬Ov£ŃŹO¼āHōōõĄq'OcĢj&üÄJäü1Āü”M k¹’+ƒĀ“įČ Įeó?Ö,„‘` "MBh&h‹ YB[R(²X‘Åڲ„¶¤Ō …e<÷c3ŁĢ 2$˜É¶˜øL’ļŠÄ ‘“³ø¹k0{ö ņķOx”ŃųäµļC{÷^Ī8ń|üõŸ]Ļ¾’ųÜ÷®@¾˜„ @<–@2žĀ¶żĻŁĪÅÆx–/\ożā €Į‘>€ł³į]—~×ßü%dr5zqų§ņ’»™’SzœØœ4vZ@Ä( dJĄw¢œVą`–—(ÉČOČü‹’©`ą#t`?9 BΌ"ļ¦ ˆŹ8¢VQ;ŽˆŒUxü”ƒ”TŽ* Øņ(čtPįĄ»E^e¾ęõ(Wöݾ žŌF€ĢÕ~’•įĮ¾¾Ÿ¼äQIE’²žŒ§Eiiı]ŁŁ/š®üĮ镘ßāØĢŖ/›ė@JĘö®(˜'÷Äpęź>üšäĀĮžŚ©ńƒ}6rŽ@’a Ÿx}nø·ƒ6^±2‘œĄ®īckČ tg”³ŲŠEŃ!¬OBÓx"€™qčšäŪŃ;®†£Ę&%9īŌ’˜Ä䙎bjXŽ…ĪÖƒŒ'N$3yŽ’ ba ŲßüĄšZŅ$”$±bb-¤gHĢBhHžo "ĆvL*-( _^@!śæÄä=,Ҧ16ģ,nÖC° ö›Ā3/Œö/˜æī‚UKę-³„<&gĶq5žßÓļī880(EńPŲ/éūEˆ5āGé::Āk;ež@_arn ūøö&Œw$šŃKą(ĀÓūāč•`&¬šēbOw“”XӆšČĪ$ߓDs¢~Ūøµ ¤bßŗkā¶AQ HĮøä” ~ņpmÖĄ±ˆ€ŠYlżČ(NHv¢ÕĪ·ż9ž18<ˆ\~<āte¤óµQ'ĆҊ:iõcž ŲT[nS|ø]W›’`!`l HČÆž³‚)"”AP‘"°‚“$RŅb#…0R’'d$#e#Øč IDAT!A¾łŸ÷ Ó’a¼¢MDz7!4'big1ĒØčĘ)Ÿ?Ō_>Ü?’䕋—žŚ6Æ„YLę4PŚ`wǐ޲Æ/ćŗN_Dŗķ‰HfGKŖw{Ū¬}{—ĶīhI(Dœœ‘QbĒ)Beś’Į=ų!pšŅwa«ŠGlĒŠ’'Ńžļė›ž¹kā IŖ‹Õ°”…ŃX$;’R£Ć±äᑵ īyłœo—2ˆµŚ’aŠō’?ż?p<ŽD0^œ})L|ų‰50ķ» īE¾}7҃½čģG“ą"å‘Ō$Ų n b̈Ąo4?@—,ø¶@!j!k'‹4"Ÿh@~ĮlAĶ^5o1t¼<@Ö§ś'*“Ó‰‰ŚŚO×MāČ>»Æ}ųŸ_W~hLg¼ ųČ_NīłźhFÄĖčIfXŹ…4£A–†1TmX+ŖećE=3Ąąģ…gf xŅ )S­v€ż{f­9”x­S°/€©" Bš03āĘŠl'+/ķŽŽ|Ého⻫ĪŗuĢŽ)±X™‚G;©5ąW,/€ZA ®ac " ¬Œå lcŒ±Ćˆ] †5 Ɔ •`MÄŹČ9}Ł.ž“j oC$bˆ.iCqe+¾#«`Oü !qĪÉį’ƒųGļ`7¾ė7šļ¹+Ū֕ŗ€¶¹Kń¦‹ŽÖ¦9ˆŲQ¼’MŸĄ7~5z»šŹ—]‚w\ņ~<šĢoqÓ=?Ø8žæyć?`Nó||źŪ@Ń_æ:š?Ń1×[f,(ŸDutŹŪ©CżŸŹv*Ą?łģ±0Čcś˜J$€K„d€ń @SĄ#|–½‚$€ß’×jBfƒĘ8&‡¢Īym ŁsD·)KD`ÉlaĆ6¤“aÉȋ<9ĄŠZĮÕ“q”“ e\øģB«4™R>0įc‹K•ųR…š«śžōp% ?BI¦Ÿį%æÆé>cö˜BRy~8WTy Mü·”…aÄx7:²ó±¶łˆ|tZŒę$¾ņ›Ł8gmlČ⛼Ÿ’XÄ`0;¶~§4П®Ļd¹ō”QÜõ\ ĘŁ¢wķž¹¦€Į“DCLć³ŲÖEĻČń³„źqŃćlĄl; ©C˜kOĪ ’’JtŪŅv¼ČŌHpŌ[+ąųƒ7Ń IŒ™®;‡Y6 /åĖ˜’…!ɞžŸX " !{ (!I“EJJĻüOZ¤…€†-6–6 {N1%ó?­5ģHōĖÆ~1HyOZ–„Mc,ēŲā°NČ¢“Šę2C™”ķūīlŸ³vł¢EkŪę65Ē"֌üd Š÷u é3®ć KįŽGņūć靳ķ]ŠŚŽ½øåąpK㐠7g„Üå1 ’²ø,–Āo,Ūū‰­E’·]p˜ž?^ūæq£NūæQgŃæ0Äl©‹¢Įør.ēhˆbČĻ÷¾’‹’p<š(‘!šˆßyā_|ąŒ~Uœ’—āHŪ’Ikś?paĄLEŲ Vä7€Oß3Æ |śEŠ;ž…:ŌŽĀ`D×F†ū`ś`9XZA*É&dHĄŲØTŗ5•š› Ó<zŽb/…o“’žQPšD'Uæ­Q˜Į"Ätrģ2€PF×SāL.qąoŽq$#Hē0 ˆĀŌc˜ų(_H04PbLQPĻ 0*ĮE9aĄFZÆä¶ÆXt>»č‚Ü@ņr­ØdĢ(,³/’P›ĪóĶ ņ»cs‹#Ą†©8”hīŁ™ŗ$;yw¦?ņĮ®Ķ©ĪE§dĘÜW|@ų÷›Ą¶(;ū“ fķµżB^¢ÜJš¤Ę0‘[B2kmXi6$ؐԖPR hK6ŚHötwŅ(ŽŽ¹ sÖµUļ_bŻźŠĄt*ŲS’` Ė²ŃŻ_·-GĒįż€ŁĶs±·s‡O&|ņ=×`_ēN\÷³Ļ#Į›.|®|’µˆEāéÅOīśīŚtK™jAĄkĻzĪ=łUųņ?=f›'Æ9Ū÷?GM§ßuččgüOfˆ™’ŒSw;1ąīMh;%PX‚ 1Č÷(É Œ?f80ģ½7Tš&/ Pb”—)©BżĖ;«@!4Ÿ! !… ›lł !…„ !$$I“ @”&!Ó c4 ’Õū§‚1š5Śhhć@gKUõXxfŒ\QĮ'ļꦟĄ>īĮ< F€@čU”6\šę'B ?|G#QŽĒ š?Ŗ/#’Į2)<¾ü,I.AüEŹČī~¾’Ų?ba}ŪŌĢóÖ/*"a<{ ,'‚ńšiøš0»AĆф]2ˆ›oÄócćŒvō£ßmĄƒCk172ŠuÉī?ˆDĄąŠ Ņ“lżEGĆ­A’7 µ ų€Bcķźį”v x–/žm”$ęņ¤0’H¬‰” BI‚&%ˆ”ō$Œ†ÅZ0¶Z6’ [©e8āõ …†÷ģ”[)“+Q®ž‡CĶq‘Öńf7›Šddb8sxt~_o6ݱ÷Ąą®-{“‹ē¶Ģ^1ƵiöģÖd¼)“–ŒĮJłš@VwõŽ{†²AzŲ’Ŗ?q;Ńōž¦ÄĄžĶ]óū‡ęĻČ%¢£JŗYvą’ZćĪ4żĖ&4 Bö8Ó’¹-łŠŪ»óg~Z{cÜśÖŸ¬ü—ž:ļśÜ“½ķ9·)kkĪŗĶĶŚ$šmÖĘnfXM`vNXü« ±óŃn’w$ś’zQž?qÄ ?Ē?n\…ń}Ŗeõ¢Ś ^Ł›„« Ū÷xŃ}P£(ō„(d@ɼ7N1_ωƒ"1p4nKzc¤Ą™((Õnh§Ēn?邳S0ü ū„euWØįąźq6_²1šÜÅ>Q•’ˆĶ]e]õ#¼ą¾mM«öĻł'­Ä:‚»# Ī]Ķm£wĻYžė B€ŒäsāʖÜpć¹Ī/:67·tÄÆ:æ|¼@XPŗ!×ją`ÕųN2aˆĶ`åKlbŅ`2`&Ć$“4LC.²ŲaC†“p ȶöõvŖ—-BC¬B8kµ6ƞ3 nߥäĮ’äq~ŻÕ]ķ`wūV¼|żŁx|Ė5—;iõi`f<\RX ‰až¬Eųāž ƒ#ž£’Ļ﾿¼÷FÄc ¤³#c6¶vé‰x÷eĘ-üžŽžhÅģõĖOĘ'/’®¾įćŲ~ąłśĒ4]°<ε·3ž@“:ß3ž'3'ü…Ŗ‘ (Ļ&łŃGŠĢ1ƒąƒwI¾€Ÿ#`ąS0Żūd¼¾ńlŲ_£€ż£5ĮŲšKƒńKÉņĄ8Špū!ŚU’Õó5¬ģÆt ģļA ćwš7Dž#8‡NL8ĀĮū°ž Ź,ŠR…Ź•õą_e€J攮 €ĄąP„æTĶ%ÉūĖ—·įµõ#;"t\Į¾[ųņņ½a’ąlō!Ę;Šž™‹u-¦ŗ„ćĻˆįĀ“2xĆii<“=”l€źøō”4īÜ܀°‡å«ó‚ńŻ»f•˜}#^{Jśø'‚čuŃė4b–Įŗd7DĘ2½žÆD{Wū”–ÉÕīZRN”æ Ē ü;h3Óv¶ōh ČÆžūę 蒳Ÿ€† E‚I() ˜HY$4,V ֖šĆ›“²Œ‰’`a“!C€I` żß«ų{ō’`ZPż7ž€e 8HZEgQsaø)՟›•™?002§k ;kßhndēÖĮų×Df[V¢µ1oiˆĒń˜±„Ņļ ą* WĪä”ĶŌh¦wµ›'ŅA<³ŻĮØ,Nij]M‘‘®ÖʞžyŻƒ³’‡ņÉų°³rZJbGū¾U˜Iśū.$ž{ėŁĄnhFļyoĀ^ĖŸx&†O<Æ3Cō’šūÉŠ’ą}'\°Ą;¾óĀęWō7|ę¦ß¾āö=×üē«Ö_sż;7¼„@©uF" ć®_؝lłb²ś’‰č’WMbŒ™ųJ9`|Ŗć‚)śŒɀz”MaYÕ²}U÷xhÖ<š@hČųÕI€T#£µ÷u2>įØŪ0$°}jMĮ=–—õ±‹ī~x?†“ °š)LˆÆ–LÕ °:j™źŠ4­ ßōÆą*Äl .yMŗ?õĻ`ŲĀ⃩ÖÜ/yy’żLŚĆ}S5~ X|Źšć#=Ń-Ź'¦{ģֆyn„y©R0‹©Ž TĮšXŻ„(u Ņ ÆˆEŗhˆ, b— Ū¬&-kIdŒ4FHVĀ"%öön7§,9»śÜ%Ö­Ęhߥ‚’)<łūóoøķ:|īƒßDwn½’'müęĶZ„æøä}xbėCJąÕ§æs[`p“ĆéA¼źŒ7ą‡·«“¼ŅīšOšS­øāķWaė¾gń‹»oؘßŅ8}ūgńŲ ÷aÉü•8eĶčźmĒ£/Ü ­Uå@ćČŌAł€’IžŪq¶2åĻyRo„2°?#Ty/-äK¢"PŹFū`¾4)`/aą)NÉų(UżŁū3€|‘*•Ģ ©4~Šj²“š÷nDĕūļķšüGŃņSB„“wų½"ż:ö ‘‚$@ł„4Mųą_Źf{Į|߈/ؾÖåŚ}š‰!D¹Š.›’Ÿ…’ ¾¬7¼_ ?˜\ƒ1ęņ™¦é_żü(śņ«‘M-AŅž¬ūĪń G®½c6^uR¼dŽCųڳ*’Lį8”­€ˆ ln/ój- \²1ƒ›65UČ €‚[9Ī’ŁŗmhsŒŃc(Ü^f+‡ÕńĆX8ī2řŒ”d25 eė3פ’€IåQü‡(4-¬ Š“RĘ»UŸ໵*™’)ĻüĻ£÷“„–’KV‚„––—,Bh²<ó?[B !…6±Ń’Ńø’ężÜP B€VZ'ł|c¢Pœ—źN·ōöēZ ē[›ÓÅDkĪIµę²‘–ѓݨŒL¦XX„‡-ĄA±#”rvDF"īP„ņƒ‰H¦æ!::8«ep°ĮīÉĢJå[›GY̱&—Ć’ąļ™¢’’ų‹xļš>†n ‘N6ć¾×¾wĢYéēf€žŸoĘ^¤ś)Oxż×ŸÜy~~ÅæŽöĀæųwŪ’łŗ7®łŪėO^ųÓ jTEūæń‡£’?}&¼,¦*žꒁćąĢ\;ĄZ±ąmćŒ=oYł¤UsšŪī ­;YoÜ~ų~½ƒ@¢µŅ 5 £‹c)꓉z2€h f8m³¦3źÄ‘/ū;€emžT :zūa`é¢Śó$v„"@AŁ6”ˆÕ’2N× pL7€:f€a€1`įĖ:_rqŗ/õˆ6°ōōĪI[+’Ųoł–ōMüļ‡Ä²J&}ĮĻŽé-Ź'wĒ×4Ģs7  ¢ļS 3Ą@ ‚2anl@Āk0łČņe.k&c˜ˆ˜lK“ėJ!Č" ZŅ0Rc”ŽŚ±Šˆ¬(E/„lj„€Ā8™±³÷uīÄē¾÷1|ģWā¬āĪGnĀąh?V“­ĆĪū ÷āŽGnĀu’š?(óø÷ÉŪ”“ĀĪö-øģœ· Ką»7„"qŽŽ}ū•PFįŚŸ¾b9)-\ńö+ќjŊ…kŃ;tRH¼ėŅįuēž9®¾įćHēF&ž§xœųÆæāW™Ģf¦ń9É;@ŽØĘO؉Ją½49ŠÕūܗ>K Č_sč’fæK!…Ö+'‚ņµ·]®`(”€?WN8!0éSäæa¢±Õr Žß_, äƒŹķõ(8Tģģ' Čķ%_BŌ“šĒ;%o€ Il»”[`?ż÷"ŲĮ:ŗž'a:ą:‰-‰Q$ńŚÓs±”õ¤‰·ń"‰\‘šė§šė§ĘoD\ś² ~»9U‘ 8su=Ć^ØŖōæly[;ĖӒQƒwŸ?ŒÆ’f6–ĻsŠ5ha(sü:f «žLÆĄ®ü¬‰wcI|ąøܙfʁƒū§“N&§`̘!ŲŅąųŲ¶€Žy&€„bܱÓ]āć]µĢ’Œ x}ŠĘ˜’AH ßüOVB%‰”e{I€²ł"Į Ć鉽tčŌ3’ ę Ą”=@GÉS4‘ꤝ6Éd^5‰įā¼Y=#™b¼w8×É5$²N2Qt1×µc ш2Ņfi€¶»‚Ż¢n!-äā2—KE3ńt®!:ź4¤2Åx$£„Q!×8ŅE$āCuŪ®jČtč’·|ēŒ ą#ó—į—½²ŪžĘœƒŪqff ĘÕ?ż&>“hĀN½?:åtÆ»ŽŃ ’WG$FöW¼bķdćĀ/?¼ū‚Įā²/ülŪ’ę×{®żņūO¹šĘ¦ŌÖ:_/Ę£’OŌžo"ż’K©ż_G5šŁ£ą0‘ ąiT7Ļ™~,hwwNn’Ē“Œ˜Øą˜Ŗu„dŅwb߉Ė&³gS‹g·W~XµĢk ųÕOBWõµ’ Üū°x!0§ųģGgvū;÷£GJ…„²#ذ7Sł]LM0^Ō5¬JŻd7µŒö¤> ©¹™/,=ķą]°,¤”‚µæRČØšhJ–’컦bó$ˆ@@ē×l2UY]—ĄÕ2!<ÖCĶn!@Ä2ŗĄ¾ “q-Ņd¤6Ę4{f€Ś2pL{ßn^=æņi™€ųśUČ<žLĶć–©żvŠąæj™]ķ[pÅWߍKĻy3.;÷­˜Ż<éģ~·éܵéV\óįėѯׁ’į?”PōŅ׿ā×8eķųŲ;®‚%m|ūÆ©÷Įv.æōCXµx=>ūŻæG&W™Üx÷e‹µKOÄ­ž?ūŻ÷Ąžśæyųēų‡®Ē;_ūA\’«/Ž{2& ž'7“ØŽNy;3`śWošńĄ–’'(¼J€œ`0Ó}ąī čƒy¢P2>rå2€÷ĖŻeŠ_™ Ų7²ó–%”·W",ųæV%†Ź×=į\G5‹š<’\”Ŗóa ó!śæwī8ųJ.¦‹”1Bcų“žącØr()%‚c@Ķ®3„ūƱQāĒŃ[Ų€”Ā"“ÄZėÆöŒu ‹°$š\{Ō[’ńź|’¾ŹˆĶI‹‹øõÉĘŅ“‹NĢ`$+ń¾‹†0˜‘xóé¾xėœ1,c#*Ž'Ó+°#»ė’ŻXÄ ĀŽKt÷tOÉłFrµ½fLs¾āĘBcž8vQhZˆZŌēéNcrƒĄäŃ’¹dža XD`ž§ „" E’\¬HŠ’ł1ki MĢFXžł‘Å2-@†³ŒXFJaŒr`Gˆ…có?!ĄeiPęgłE"A,į°HAGµKńč°ŪĢé9\P įh!4l”œØT"Ał’`EHI(£UVÅt$VP–ptÄdu2UŌĀ(¶‘7 2²FŻA%ż“ ’‡«’µč’}‡š¦T+¾ūęćˆ§ Ļ¹ ]ē’)npӞ|č¼%3ˆ÷>|3žzŪ#ųēw\Ū&wTF5żITßŖõ’iæŻ{ĆüžĀŠY-ńƒC—žną„Ō €×žÆhŸ8wõż=£'œ÷½gļ}[֙żÉo<łüb‡>’”s6Žq­öc2'Sˆ‰ō’3Õž/Ÿ=ʉIPu{²q¦ępĮ Ź‚X p{hĢŻV³üx,€YóĄC!Ś=/€Z1Łv€æŅ?€e¹ Ļ]| “u}=¦×üš­Ļy’©ē/}ųĮW½yŪv÷?üģ[@ü(HG³ąĶ»“- +GZ0ĮĶ7„*žQ4ŌĘåØm£ØA®«·-mŸs1©Hܽ}ÉYļŌ$ņŚ‚„ĆgXJ,‹Y—Yž  “ mżč-Ć}‘gēø‡ĀŪ.±”BĮ‰Ē¶GĻÉ F.„ä‘“.ü IY.ś±§sćŖļ y­I@2[̶"øFCB `ŲŽ1†H°Ę‚2¾+oÉ P”%6Ü¢WĢ]Y™åˆ-_‚Ü–ķ0ى})g ü‘/ępó½7āę{o¬ o¾šr$¢I\÷³Ļ—Ą0ĘꝏćK?śžõÆæŽgwnĀ#ĻŻS±³7^„ĖĪy+®æłK„A¼ņ”Wćµg½ ·>ųSüä®ļTģžHfOm/_Ī„G?š?³ ¼ŽĄ3lś7Uš_kb8€ņēTžŪū%“ŗ]ų|łj†•øü(÷Č÷Ø÷\ĆŪž(KŪŁ£āˆ0  “ūåäCÅįÓjsÅ5ļƒóRĪƗ@óK€>m?“|0Æģ@„æKŚ= m+0åó§ę}åż¬ŗĖ*}Į!ÕŅōO&Ŗn^“ZaĀ„ź[E4āaģOĻBs“łˆĶ_LqźŠ<ŪÆČ³&‡®ū*SŻ—lĢā‘ äü©˜Įyėrxf æŲŌm‹įØć žĆ‘6^"`[nVĒ{°<Ń9óĢŻ£J)ģlŸŅ:EG£ąŌn÷hšŹķ'ųg’(6Ī;Ż0 ¶k˜©ÜØA3W‚ö\[HKA ¾ł³ŠD^Y2’ƒ’6¹°Œ––Š6„&bĀ)¤ŃR#JžŲ³a`ręŠ,„@Ńņ2BK½—Š-€#ń<ćRŅd¼y`ŁcŠLŁ"“Äńø0Śøč€įŗ°la¢F±‘.€F›ŠžøīśžTé’~V‰T{źĶ_u²«NĀG†pć’~8Œkoü2āļż~żß·Ł«C’ß:ōēŸpLņ/;²pžļæ<ü(OąA"3HăÄf€„ŠC {čś¢J5šoūÆÆÜŪ»eYėĆõ±W_x ļ%ŲžļŖIŒI3”õ<~}_ŽbL$˜N“øą”:žj€źv€GC°CĆģimÄŚéŒ[+vķęĪöĄ?œ¶ś½j’ķ÷o{ŻŃ’šŠ³ŠšQ°$²ĀF.fƍ[ć’Ŗu3Ą`=Æw,¹y{ÄēŽ^o›Aģ¦źVĀŃl"^ź6$f¹éÄ,w«fP X^>Ēu„ģŁž<-×½°XgĮP„ä‚ ˜€ŅŒ'ŖdB€ī\b³Eš“pʐ ĖR0B’VK2lH‘Ā()HsŽÉ郃ū°|v%ÓIÄ׬BöŁʞŒ‰0Ź+S «–¬Ē¶ż›18Ś_sń-{ŸA{÷^œŗī¬R“Ķ]†¼ń“ø÷ÉŪqßSwT¬³tžJüĶ?Žžł-~ś»ļÖÜży­‹04:PļHŖwuœć÷ķ¤:fą2s¦qĢ5©śœƒŸĮ ŹUŖØūąŲ_†ü9H p(™Ŗę#Ä@h»åæÉ’žfø¼O„ż©XŽßŁZĒBme}}ł ©bBŗü2ĄĻ8Dņ?åŠkéEP» D…m;š_¦±?£“ˆØ}H1(ŸtLüSĶķ$°9µݹX˜Óčä%ĢĄĀŪbøŠ`[Œ‹OŹą{÷T2ZR§,Ėćź›Ė”ķ‹OĢ`_?{¬©$Ą’™«ņøč¤ ā6ćŁ1ÜśTĆqõČź(6g–`GnV'z°*Ńó’H“w€«jkłėÅP¦~§Żč1 Ž'ų€bÓ|p ¤ūĀacrDlBņØ’††i"öé’B“„²¹$ɕR(²XĮbe ”‰`,¦²łŸ&0’#éy.K)Œö5˜Aõæžł_@’7†Ių“”a $6Ę/īø :Ģ=©€‚ĖŌ&˜&©Č.D°#d\VQ± b!·.ˆsJP8N©ś§GV~øÕō’ź«DÕI 46ćž”\ ąwĮ“jzækZ”žź3ųŹO¾†}½ų÷ēĆo7ž…‘1†b&č’ÉXĻļŻü²óéŽT¤ēĘFū஌;o”ęĘŁŽ²[YŹ&cd“6‘åŠc/QĮt#—Ų<4n­æż’x“’;žqÜGÓąHdÕ>“~³]pvTŻ˜œ `ĀČ‘$I˜XŖs›f:°jiå“勁C‡½Ą®żĄė^5S[w?Ž"r–Äh$Šl$ ĒJˆŖLčL™NŖ%` Ųqw4CĄTiżÖšū^¾- Öʓ X–÷$öŖõ‡w'ÖwĘ/v²ÖyĘĄćj ‘„¾ÆaŽ{’‚µŁgĘ2ČŪ1$HT³łąu`‹HEŒ‘Źs$ ,i™Z𓬄$‹“ÖF‘ĻxĮ,›µŖŗ\äcŲg IDAT[½ł­;aĀZµŗųor—ütĄĆ£X4wŁø›ŒŲQ°oMÄ£ |ü]W£«Æ7ÜvmŲÉx {ēēŠqx?¾{ĖWkRž–Ģ[«NĆ ·}cücššx&±ĪdL’¦“é’I-3Ą7Eš_½^5Ö ¾ģ+]K¢/Mą2Øeߙ?4T‰ź_ ü !㿊ōN0jmŠ_Žźø¬‰pĀ¢śĻP^®āW€ūŠD•Ī#‡Ēóé~ž¤|Øņ܅ßß^å—|FĄ’D™«’Į„f¾3‹1;69YēŸwÜśd#.{YgÆÉįmIœ³6‡ƒt T¦ø_³1SQżoŒkœ¹:ÆÜ6Ö\šu§¦±nQßæÆ£9wœ;‚לœĮĻŽļGp,¢`l¼iĆ®ģ<¬Lōbu¢6Õ®–ļČf3čīķžxĮP(eź›’%‹@D/Ģ_ &B±©vėæāū ę\yĘ "”A¬Ņ$ ¬<Ć<” YK‚/ Ji2’Ś’<ĘüOŲŅėązęįźæÄl˜Œ—~€1LE/  ÄP €r)…‰Yž„Ó(ƀ0`dI Uč”pį3SżČÕÉ÷Ų¶0p@RMÓ>åߤ0Ŗ Ó’'kžŠ’ö5¼Q¹htŠ8åGWćļßłų¦¬”ķū¶ąW’łüėö'pŹĘ³<ŁĄdb:ō’(€’wāŹ;;3güž§{o}ūhaį2ÅyęÄ÷|ī£gϽ³Öv )oœ’ūx“Uķ’¦G³żßńŅ’Ē šŁĄU8¶ķkÅTeĄ±ķ'’øp"uĖĆømćr¼3”ļ|č‘Ń·ķ†} ōŠŠÜX{Ż# Ē~ž{d…ÄØec8G6ƒ+$x"’éšNfæĀ2ø 2īģT9ūõłžŌz¬Ü®« …+'šž÷ g|­š^° Äš«÷Cńł}’FåÅF‹ÅfcÅńt¬Õ¹oīŖģcńf“gdzĻqDj˜ž…Į~R’X°Ö,0(dhƒ&xf€Ļ Š’d”M †¤eIe”Ńf47b Ä¢–eįķe!¶f%r[¶ūźŃŗYéEXŽŻżÄmųĀß~§­?OķxdĢj§­? f·įĘ;’Ó/lžö-’Œ†x#žķ†OĄUåŸZ"‡ßņ)Ä£ \õ_…Ņī˜]—ŅĀŽüIģ;“ ÷=}GÕÜ™"Xž6ųŸŅ¹­³š¤@łǬ5gŗąœqJąß’„ØØl•*’e4Ķ>XŽcLb@„ŌašĻå1ė‡^ʱ„MT#žšŸTčšĮ ŠĻ„ExŻ õP„G^Eł:-± Jūā/Zo§ųÆ=Ģ8 L|m[@Ģ<=#­/)CĄń"[ųßMå’Ć+V깓‡+Ū²ĶjŠŲø“€«ož[šöŖ“²xr_™ŹGĆ ‹Š8uE_žõ,äkoxyw<{dŠQdŪ²‹°77«=X™č}Q%˜»öķ*u™l gź4ukUć” pęĮȱ|Lwg«®QæõŖ[’"hB "Ķėæ %‘p!„k øž) PD(™’ #l2R²Ģ’l"&A¬C©6LĘeróJ§· šIKÕ:ŪՉ$“ų’ģ}w€[Օžwī}OuzuļŻĘƒ ˜Ž –Ų@ ŗ?Č.Éf“HdS l²Ą’²a )P6‡€é`ƒm0īöx<öō®u½[~œNō›Nō{Jp”@$ź’GdļĒÉ P*hž@ˆ«$ƒ®œ×łRgļœ ūܗĒ$žwd‰“f+€€ƒ#Śē.éŲć9#āwž%cl)āļUnčWEl]żÜą+„õVŸR „4%FIļąą¤bŅ~Ģ·ƒ ŒXÖ÷礄Š,¦“Į˜&M†ŌLŠ˜b³Ķ”HBq0’š)É m1MŪŚ²UM©œ•žnv/š‡šžh+5ŌMžŹõIȏ,g&’°æu~ńŌ½øłšŪšŌ+ā™7C̲ÅqĖē‡/^łulÜł&6ķx  Ü[‰éõsšų.ŗ})ć^rśĒqĢĀćq篒}ƒŻėü¦ÕĪĀ­~>ÅT°Ģ[‰KNū8–Ļ;°aū«xśµß¦ B±’sŠEžó h䜧šs¦“?†ŽOI)ģ”l6QĘżl$}ÄYņ‰v„€ÖIF%Éd8Ó·Cü8F{bČōNŽM€’J |~©£Rņ QŹŪ’&k“ƒˆĆž2Ć_97;hœ’GY<„R½=ŃYč MA•gœŚėFÜóLĶ©ž¹Ėx}§”ؽ¼Ü£°jnw?]“²ih\~Āž“¾lˆücŃ4Ļķ…S¢0øĘŽ'b‡Ń00ŖMl NĆ®ŠdĢuwa”§6ŖAų„ „½`Öfh!•Ā@(ūļ…® dłŽš@!Z15ćŖč«°æņˆHi;N™hż'AZ1$¦…]ļĻćL0®q-ˆiIœ ƀ`PŅ0ø` ’sŚŠŠiC1TĀüĻp’i%$L‡ż„'…f"tEVOėŽ®^ѓ—KT,Öļoi:„$”L?> ˆ`/…»vqŁøµ¤ćłwJœ{JŹxŌa‚L°ŅøÉ l’žüdˆ¤e’S^Ƴ’ $Ė’cŁä’Ń(`Œ¼Łéņ’l¾—~ohĀk»6”|ó‹øŠļĆ%ķūń??ż2öxKńēš)xķœė°Åé±·÷uĆ|åOøĆ0ńžG>ķ™ĘL`<Ü’WÖ?ZY’ą}Ļī½’Žķ¼ī¦ö•/|ó„ČŚY•Æēʕē4&śgŅž/ń”’Ÿ>Łż"ŗžV€’Kežč¾(ØXen7TYĀÆmÅćWœŠoz¬™PS śi™U\Ø,·×׎ƒaņüAFšq½nśJ**qA¤Ė’ÓQl3Ą\-Ż5ŸQł­åwŻŠ¾aö%3×ģr“2€D€8t,ģptī,?!ŠļI/ōČECÆóå’yĪ EwüOŁ-Ė‹äÅ•z-öł'£Üy"8?|-ļĘéäæ¶TbŁōHJķ’ŁGłńNƒƒ”Ōs?y‘]_~å ƒØŁ!ńÖ,A˜]g”ƗZRP]*1³:†+Äsļ•ā}ł=…q¦ķ¦š¹T4BhŽŻ”ÉŲ®Ć\wx:įd…ÕŽ įHø`ć?čŒfU ؒ“+~>‡/Ž‚hi¤12•+ś“ÕŠ§ĄH#į¼JLģģ?­’ˆD¼õŸ`A¤…&&ˆ F#’cJhC)ĘLÉ”Į“"RĢ’@JĶ"ÕīƒŃ«Ī ŠłgJ*³æ…^+Ć[­Ł' Ģ>Éē=ż3¾pėŽ·ńåŅÖßæYV*ƒŃJWŲ]Ę­² nÉhŒĄHg}vµ¬”“¼i2‹æLdż³e’‡TN@HŅŁĢ’rÉ’ĄŠ– ,:‹ŽÅoüö­ē1„a3. śq‰;¾ņóÆ£—h`I‰ł¦‰wO¹7&4ņüUž’óļ³²ģѽkęß7$oqÅ /ZņÅŽ‹–|ńö‡6¾üčĮæÕŠwöśŪÖž7õ©~ģŲwf:†tłzż.|Xå’Ą’ĖŠ…b–äĀ‘X K Ź*»óq<Ę \_]†)-Ó&ŪFŁ0¹Ųw˜;óPgJÅś­P/oĀƉ>‡]ī2ųŹÜ£ £j÷’UI]3¢3Ąt€T–ę–i÷ᲦŸŅų«ę7ę8ø#Ņ‘ ųŁŹ“uģ,_īėņžcEĢÓ”aGœ Ó#^«Ø½X·$øĶdŠJ”&0FŠjųIȌ›Ņƒ“Ži"²ƒ‰gTŠ×“q€I`Iū0dĆŹeKA;‡Ģ-e‚+F&”ÖPŚä’I!…V ŒA ΘP[š?Pg/ńžs-š‡šž}ŠV²L~Čŗ\ʁ€ū·ą+?łĶ^ŽyÓĮv5mESŪžĢ ×VLĀ—>vŽŻńžüĘ2ĘĢIsń™K¾ŒµėŸĄ›[^Ž·r2¾uż=8ŠŃˆ{w¢qõĮīƒ[ń£›ĘĶWކžų>"±Ō£žS|(’ E^™åÜ;P¦COžif©‹†øv+ĶuiRÆ]–ßž47śܟFY‰į`ĄšdźRŅߣ"Ļūœó6ęŗGćāų?āĢsĀ.x ū»¦bŽäŁģł·‡Į0Ć/×Ueō+<Ē͉஧Rū·'ĪįwoV gćœå|ć’n¼¼½'Ģ įæÓZ ¾µŪƒ·ąA¹Gį—vao§żÜĮ”“…PS*š§ é)’ā ŲŖĒ,W—“ĆĶ”'XŠZcwĆn(U˜A”ž`öćTUq5Įa$’ B$[ö]ƒ$"­l+T„ zČųo“ÖŒgZpĪq-ɰ½ ƒKĢPJPŒ™Š{ øł1Ņ–„°¬õ4 ~ābæ^p`”ķēšĢ8JzfÕ;ćź¾¾×ž-éyäÅŹ= øBn¶œ„L89“H•’g#ų³å’ń±oōwAŗł_:²É’ ’aŻ©£õŌ‹ń3?{ę×XŚŗ—FCøX+Ō›&^,ÆĘ3ē#8Žņ’Ÿli¼ČõPŠŖłģšł÷el;ųŁćĪŲ ąŗ{6l]Ż\tūĪękŽæ³ć£žTūė{Æ<ķf_Žé’8&Bž_²É’‹¢žVڦ#ßv€Ą‘U0y¬Žf >æ\{žm,ć&ćčÅĄV µ˜:iäś³Ož~8÷”CiZßx!Īį3 tøŻčŖ(Ē€· Q •ŅĖ4‹Ąˆ,žxŖpjŚ){īg ”¬ĆJ§»±|–Æ„ōœhĄv4¾ŸeˆĢć}ö²Æ` čĆż¼;ć›×]‚łĒļ ©½<ŅŲ„Ļ_śU ūSČ?`· ģģmÅŃ ŽĒŸ÷üī[hķIĶ e&Ė£Ÿs^W¤ä?Ÿ5"²l’‡\ĪEyÜēŃźŚÓ’¦ä—#4ųĆČØü§ōØu¦ ”ż)}¬\D˜Ņ3łY¶ĪēŚåڱä?Ļ)‹Bžóx”ą=ųb‹Šė«BuÅųŃ#QAhģ‰Ÿ¹,ˆõ{Żš‡SƒO3j,0öu: 5šųśrTz%Ī]@£¹/sߜƒ?Āą4r?Ē: ³—ń_/Žƒ“0 ‘:4Ej0ÓՋ…Ž”šÕĆEǁę&ųƒļ×ėggضµ†hi”1²5”lбŻ Dńś€ÅRŪķż$ b$ˆiĮ‰„ ĘČ"ĮYœ1Į‹1˜LpCŪ­’˜VDŠ`PŹ ķ$h"¢iųŖśÕiŸUä×zrTÖѤų“?rŅłž¶G3ŲūņĘŹj¬šä yĖ3ÜLIdNd1Iiž—¤˜’Å¢CeŃh<‹ü?eœ$e@rö?0ćÕ'±Ų £Ō,Įą²°wĪR„’ĒŗąÓŲ `kØw>’(ÖōtāŅžvüĒĆ’įtįϵSšÄ5ŸÅ;Fń?TłļĄ<6›q»ŪšŻūo'ĢI!’ÆżüŒ[Ž?źH >rĻŚƒų#Sæ½”ėćÆÄĶæĢÅ’õ’¹ä’‡‚ӏąö üM·ĢU“{ŒĮƒĆUąĆd.+āe!/Tu=Bw?ŽgOX‚‹ęMÅŅB7†Üś’€Ļøģ|»ę’­MĄÆlÆ?ķxąį?ß¾XŗO_u(3®…|uśt9Üh-)GWy%‚e&A©īA²`Ęõ8Ė€Y:‡ģ(­īŽU~NÄļ:O –¢ rzœճżOÕLlf Z1N q3@!HĘŠ‡‘iŅ*I`$J"‡‘Ŗ€]®<5Č44ōP@’ €“į0”ŠĀ"“R˜Äˆ$£()˜¤ “Š’¤Įɲ$xÆy ĪY2"Tä^2цƸ@Äp ä’ŠIlv‚ōŠS?‚ÉMDbį YXĀÆų\N7īųå—RŌ g.ĒāYĖńū?ŸBž»ÓĄŒIsš³?Ž‰ŚŠI8qłųćŗ_ē8Ÿ<ČA×6R8¦mrķR ņ_š<’’Qv„ō?ņ Dä&±#iūXHlQČAódß&÷<¹oĄXČრ£Ģ|ķķ³Pā^§óĆŃ žæ$ćņéÕš{Ķk‰ž ĒŽ.„±qU‰„ŪŌčń?bi̟ƒÓ°="q€“…ŠŌc¢„oāGöGjŃ©Į$Ē–”“”ŅŽĖ\ƒž““§[ŽåFŌ’š³k­UEŚGlö?ņĀ^I ­ćĶU5Aƒ‘Ņ0I ©I F$ALjarÄ 8'‹ø–vė?Hf0ih„ˆ1•hżĒZšœ)MJ#Ż]~ rĆĶjVNäuᮚÉzöĶ_éķ^õ†oß÷ BՓ Y©6<\&) Õü»HKUøłEžŸ æ’1®čķÄ7“†—­Qŗ’ĆÄĘŅ <}īUxbŅ EÄčōZ/®X[xŠ}R,ÄĻmŪVyiŪöŹ7eƒįP»%bwY}d·wR ŻLś¢ČgHĮh*{‰t#Ņ2I‡Vˆ€+SiKŚ®cd@sEŹ€RZ“ŅLKEą’)i\B)””2ˆCš–žŁėļ@uf@xēžį…cĪ,'oT$ņŸ'YīīļČ:ä%§_‹cļžźōö¤ģ¼|ī±Ų}pt6ŒŲļü.G$ʖ=ģą@®ųH±jąsķ’)Ļc“ld¹ y ?ēNb3F”ÓS8ŠRł³ē€Fcŗ$›ū%ƒ‘F ’y]BĶ~ōĢM‚3½ķNl=čĀ)‹‚x·Įh³Ž2Ä §ūż!ŽĖÄ­BˆćĢ„A<šBęģæŪ”²[1 AhU ½ÆõŽA,õ¶ Ź,^ fYŲ¹wWĮ®’Šć]™ ė/ł-ɒżoĪžkŪé_¤qׂ$@jäŒ$ ‚Ąˆ,āŒH0»€`ē$˜É9׌+rBJ 04Ē.\Ś%.øEĆY™įPĒDDŽŗ5§X{°įī‡Įę]Õ5V_E½;XQÅc`%gpG1’C6óæ8Ņå’é™q‘!0šÄż8«§ß©ŖĒ7Ϲ®™hćvx7ÆĆšœéėĮ·{·”VąæN¾Ģg«Œx{Ą)‹¹įĖxŚpą©·×”jóų‡€—õtā`dH•’X‘!¶’u³‰Tū±ÓīKŁ5‘żæėĶę ż‘©?hŻˆÖĪžīŸ£Ļ]¼üĘO˜ņHx~Łū”Bå’‡‚C‘’īś {‰Č˜qĒķ Ū3,?Ą«ńÆ«WćÆHwėߤ¤²ghŹņUēĢńhfY_` i]€t­Pņ׫€—÷ėA Ļ;Ż@r‚ŠįŒ(Čā øÓ X±įõ®`dČ:‹¤’iĮ@2Nz„V WI²öÄł3 ‚޼A‡Ž[4Ŗ("/”—G-Ķ·“"Ę*-YŒń%рyŹ`§ūŅ¾Ę²Ėśö{Wö¶ŗg†ūMÆŅ:RāAĢ~B‰›AEŒõüŒR Ęķ$ekŒI“Ż©Vqf‹ļā:n.n @Ä‘@šČŠDJk8)RL "p "­Ą“fœ˜Öš+æĮÜŗ¹é÷רŖDtß~h™[Ƒ)ņŸ›$eŚāč«ńŁK’æYū ŽŽšlšACė•’Ųøó”żfNš‡/^ńuüfķƒhhŁ™YĪ#;Z0‰=²ėž‹FžsŻē¼Hy¶E¹¢6iūųŽĪ8lĮóäĆĄĒHž "åY½īæ8äęÜ]&ś1e‡æĻżį‚Ņ„s–°¾Į3ĀHĪZĄYG±~{LĢ©‹į²ü˜]Ć£oT"b Üt~öu8ššk•xæÉ…–>YįG©KAjĀė»<)ć–y$.[ķĒqsĀŲÖģŹ8w±”NģŌ¢+V'(=ÄŅ­5vģŽŽPØš€B lĮH§uIc;Ĝ d:™@ ĮśEŠŹCOlUŗ'¬@qēĘ$Äd¢ĪŸ1Äd1Ī,fPĢä,J&Å Ę,rčØĮČā –a²˜Ć€ÅM&Č aš$M“„a’×ŗ]\³Ŗ[}䫀™YŹ2ąĪņR^uņq}vöūŚiĮ\:¹PÄŒŁę’TŖ')ĶāŻ_bRˆ·.ŒI Ķ(nžÓ\B+-S²’©ņ•D-ņ’WŸÄ½ųݵ’†‡=•vYBe¬å'cŸéÄę¦ųLiž30€O6¼‡OµÄ{‹ŽA{ņķåŹ®N>įÕ§įż•ēāwkN¶ÉŗüŸ©¾<)ŻģL“²;\ŠdAæ×{cUŠŖūüށüeõ”_ µcŚÖyóŽw7ܶŖow?¼nÉåŸüŲņėŲ<ó¾ą¬Ļ4t?ėĢyw½čpŻ””qįL*Ąp{FŹ’WĻBVcŽ\}C²¹sœž‡ü?™ćŽ‘ōw¶śJß°(¾€ Qäv€£!WĄ”“<œeéf€#/ˆjĘD}½š}’1<¹lŽ:éhœXč1O4īś¬ēßFÆi¢ĶéĘ~o9ÖÖ¢§¬>)ū[āĮpf? 1,LA#CK@§ -2ŻVgld:Å īŚą S—v¾cBĮ4 Ā`B†ĘH÷6TÆ :Æ =åŃ_WĪöæģ(YšÅ"j,1Z&bę1ŃAż­t¹å‹‹Ļėżįб0h÷H”HPvĶ6ן”ŅĶA&/ĒkŠHB‚Ün H–f0tB øRL“0¤b`$Į”P\¤Čā­½ķ²'Љš’ś”y&\‹ę#“uĒØ×8/ņŸiŸ¼Ž6O>,e$j«&į¦+æ‰õŪ^Įso%­ˆ•„5ččšågĮė*A0b²§ÕĶĀ×?õ|аÆlz®Ą v–Cż‘’¼0†sÓ06ņŸiŸ¼ē)ģœsĪ5.¦™ęÉ=M¶yp˜ ŅYƒļiæ5Ųd IDATØ©¬Čc°š{Ml=ąĀ-öā]t p4v9!$P]"pĪņ ~ōēōųķߟŻmN€Įą Łé³—ł1bxzSéP)AC‡—¬V8uIhDöž¤®=Շg7åßE ˜č±JŃć+EµĄ"o;&;|cg’Įż,|_„5zĀ£n#ėpøˆŃ²IPĘČ'3Ł6Ø­=2cö_Ci ;!!ŃžĻ"b\ Ī!ĄµÅ‰ ną&,ƒ‘$Š1’¦©%c†ŅNhR¤ØĪdk>K¹…“ī,/)[ńķĻõæ·»„iĆŪ–Ō˜jTÕR ˜iõ„)ę@ŠłŸL2 Ęfžēė†CXX>mNfưĶ/ćRĆĄ{×ߎ»Ūń‹§~†mكß>õ+\sÅēl#üōŚžŃĢ’NčóæōniHø’_·ųģ7īŪÜųb[põŸ¾ūVļO+<ĶoCu3­Ś[ę­+ŻõŃ[Ž_¼>±ß§O²Ŗn TŻ Ą2yč±³gżšÖÓfß>äzé)ŽąFЧÆ»”ébŹ’sµ’ū[—’Hnx7€ōv€‡Ņ 0˜zlA?(ä%œä"įõå€0GŖņAJ7€xŗŪt@WTAŌĶÄ` ‚ęO܉{æ·.ž…c˜b\ńä+×߁^ĘŃįpaŸ§{«źŠœüÉ~3łĻ#ČSņ_„H”p…a¹Ø ¼‰¶ż^LŸ,œ£¹Ģ~ˆŃŲé@cgź¹»Żža’Ī™ĘÕkšNƒƒ!ū·åō„!¼ÓąN Ą¤ ×X»eXßødj—®ĄO×Ö ­’ˆČM¤ļśē`gp ęyŗ0ŪÓ ž]5 Ą½ūöŒ©ī?“£J’»ö_£vHwD+¦Bń‘ŃŌÆc;{iĶ Č&:‰ģæLÉž30-ˆ˜E;ĄµŠ\ āLYœkĖ0˜` ŅöЊ””ÉŻ%Ī]ąćēÜLé}S pÓė¬8ö[×ö¾öÅ5÷)ƒr8=²“±”«7ęµˆUŌąv+6²ģūĀ -1åœĖš|ņø’p=śķ½ų—מĄ“S/CNˬī’^¤héÓĶ’¢.hgҾ §¾żęŌŗ‡<“Æū,Gm„_”»ß”Ęļ‹’?œy!'łAIYīĪ(Dž?Vœ~ī’Õž/qł–ͧąDb<Źś{Aķ;P××6Ų‹‚¬Ø½m8VŲśżx ”é€6]ŠpAGMÓmßl—gų’‚Źā°œŠåU3ē!",ō4īĮ†’Ķ­ųē5¦1”xųČĻŻ‰^Ehs8Šą.Į®Šj4ÖĶ@gŁ=%CŅ’“ Ą‘¢HĄÉķ2ĄžnK|«* Kušū_Ÿqk,bžM¤ūŖfū¾Vµ oOņG.Łģ1hØįńXüC!„#W³— °dsƒdH Éųˆš8eShpb\S\ądPpe2! Äģ–€jX 4W‚66½ šœž„ļš; ‘Ż 1+Żń?æ ›‡†žół{öĆ›Ņ ė6>ƒuŸ)pž<ČAßdcĢz(Łw7ņŸėŚ+ł/c$’_»b‘’‚ęɾMīyr_˜±’ĀAīsŠÆ Wv£¬Ķ‹ŚžŃŚčĄĢyGƒG9=œŲÖģÄÕkŠŲe"j.\ĄĢŚ~Ķ.—pĒͱ³’éX³ „ĶMntƳ’“Ź>qš¼^QłēLćü<»yü}Ź…÷3°'TžNĢvwƒS*ˆDĀŲ¾{;¤*œ k]¾Ń„’€†œ<¶’„bAs‘Š)×E^Ų#‰H«aēʆ³’¶‘$‚„ŻīO×ö’Ä,0fĮ˜ vö_J1Ę%)ƒiŘR!5ÕŪmüĆM;¼2‘<`zŖ½å+o»¦ū›Œ“e:#–†©*Ŗ˜Å9ébš’e’’'põ—ń07GĢö&|ĢéĮSÕK† ¶5Į€y«2-čäģAņ1vR»“ü„hŌ}’ū^Ü}²%½_(su}.yłxĖ’'Ån’—ĄóKv(e~@—޲o±Źŗ[@īNŠĮF°ī°PJf(,®PXĄ Ģc@…v¢„Ü҉ˆR~öw  įĶf42b5e°*¦A…¼PžRØŅr(—:ȆDĄ ©ŲŻį„®®…±ŗīƒqŁ·š“Ÿü®æź,¬¤,IĄ‰€%€Ū@ģ‡ ‡舓’•5Ų[?µ“,Æ&’™Ą%t!-ĒK0T`LÓžɘŠÜa@)ßē.iŁ0ćnańc×­“—ō~„ję`kL%·ü# K ¦ #ĶāēČ“R H ®å(ē>¤Č$hKŪķ4˜±xÅƒ€A¤3Ŗ“itB`djméø @K’DJ1FB1e0®)¼c W“ųғʙ©Į³l1üė7-Ź‹ÄN¤éßę)/©Ä•g~GĻ_ ƒ ś0cŅ\\°ę <÷ÖsĪ“yņ‰p>ی”ē1xČrń’ó£°m ČžēE–‹@žS6ņŸsō<ĘHަļķ,Ÿå?ā£Ü£‘K-O*{žŠ‡3f-ų?Ń ;xģķrœø „@˜”×ĻŃéóĄ¶ÆĶ’iQ“ö›č ¤>fŗ ĒĶ ćŽgma"ąŖ5xc·Ū›S]‡Ė= §,¢Ü#±·Ķ‰ūŻCŻ@*Ā²é‘ $RN¼˜]”ÉXąéĄw7 ’°„…m»¶Į²²YƒŽžĮ¢ÖčY€vfo 8WL‡¦‘4ÓŚŻ­­†>F v@!9ūOvö_ 0"".×q-ˆkAFÜłŸiĮ &MN‚3’ĢŌ’ČŠ’+“²śœ†kddé…»nŁ$ļ‚.čŪ’‹Ć­ĀNY^§)9'Ķ“ä$1f¢ ±0Éü/Sö?Oł?ŅÉæaB7n‡'ĀÅÜĄīGæ…kk§a“Ū æÆµķųŖiāÕcOCFyĖ„›’ŠQä’ąL#ū/ōO7¼²Ą'¦Ļøyű/¹¼> Ė’AŠ& ż÷Ż—Ö?9‘ņ’‡@ž†@!e|Źŗ[@ż }[Ą§¶bA%Ć•„S¹+‰0²JjĢ®VĻD ʖž Ž~gž}3‚öŖRĦĶF““²²Ņį‚vń$×;o)TE Ă%h…öf_ø?ķ=œ’½Ļį#•e£}ōĘŚ”Æū‚o~€^n ĶįB£»»«Ŗ±wŅ,“Mž‰ź:ÄL”6 I'«G“źĖ”ȚÅ'€Ū„ń$~BąoÆØķŚ<łGRŠ?Ļä‡ 4tŲ”ōóŽąĶŻĆnžS«,4u ³ŸwtŪZœč“ WĶ ”Ź+ńą–T£Ē©š„ō`CƒŪŗpĀ‚ŽŸƒ/VĮĆ×¾Äuxž§#ŹÄéŲœ‚éŽ.ˆęäŹągF8&Šē]śhČi}9¶_(ӅXYżČ:^ūOńŚ מ#SöŸ1;ė'śDĢba­ ƒ`LIŒ™’qHƒiŹ’ęĒV 6ł»]M4Ź^¾¢„iķžīö–€Ūx*x ”\īų{99ūā˜’`<÷0ĪžčĒńWWĶH¹ūœ„ĶXˆOu·ā|’>=Š‹»ā«,‡kOŗ_Ļ›ÜĆND¦,(PžŸŽ~ĶĮU7å:Ūåõ Żóħąk§.|Ąrņ’‰’Š;’žžhł?0Ž€b”Ó`,e-M īvŠŽõpĻįź Ÿ68c<ĪPRīÅIå^œ4³’ŅĄ¦Ż-xģ„—šrY=ÕõϚ‡X²* ½ ›`"ą- .ƒ@ŌćÆ#öŅ&4}÷3ųčågb›5€%€‡ž€uėFŠcšhu8Ńč-ECy öOš‰ŽI30˜ ’‰h%—Š2C›Ä± F+Ł,†’¢½;jęõī­¹G)Ŗ1ŻāåŁ§¶~×é‰ĘD,ńAcŒt² `Šē.ķk.Y0—É›¢4jˆ(L\÷yʬ÷'/õæģńź‹gų³Ÿ`ø0ł° € ”„¤„Š ń1¤@¼ īŠDöŚttš™Jˆq„%™PZ@iF’1%%A2¦cŚ` £?4 ō6bvͼ”ƒ#Ą»büė^/8[8Qäæ\’цĆtą|ƒAŪÖÓĄoÖ>€M[š/W߁@hO¼ņ?ēÉ|N£Ģß’³,ʇü™,HžĒp·Nž‹Įг¬Č‡”ēŗGćāų?āīä‡É±’AgFŌCįj~ŻürŌN™ū÷ @ž’Fą„²[B%cFM §, įūOÕˆ4Ī[Ą’n*EL¤^ĖUsĆŲŃā÷ƒƒ.\¶zue­}ö/gnóš>ĒĒ$įķf‚ˆžˆ%ō2\:k÷óŒZ£«/wą@Öś”]cS ”Ŗ™ŠJīc[Ū•hńŪµ’dמgŹž6é“ ‚`Œ[CŁƒYde0- F–aĀ€–œi© ­ˆL3¼ĪAvśuę‡fŗx力Īģyó+­½ķl°“\„¹įrs ¤e’ęĪTóæä >ęo­Å¼ī|’W?ĄķžüīØš»cĻE‡‘¤øä x×2š—Š;^GYwŹ–­FWżōx…•jž7šü°“ü ¤Č’sd’ÓįŠAwbŹu±Ćž6Ūv%e©Ēr8å’§X’ŸĘKžA%Ą‘S ž[į˜Śsü3˜>–ćŹ"šŖR¬>q1V/‰}4ąįµ›ń—ŽNų¦Õ#\5VŻddQ¶„˜&/·#lvĄ ?7 ģGĢׁР?@÷?ƒU·\ƒ5g‡ŗńP1ZųĆ wżŻŠĻ9ŗM'Z\.4–”aeZj¦”§v2‚éä? 5“0LšóU iūl*€än„0X÷ÓVZ*æM³$ö‡Y'7ü§Óm¤<™8tLü~—·OĶé‘ócĖ‘ÅĮv ÄĻņw»®›ŗĄ÷ķŚł±}™T1°”c˜”IżddŅąÄH#É  DZjMv”™ŠL“ÖZi FI Si2•!µ!i’¶4W\$Tlćž­zFÕ,ĶYŹw‹YWǓɈµ¶r÷Pœź1’|IlyI%V->’õä‡Č26ķz O½ö(.9ķćxī­Ē±RģĘDžG]›i£C0żĖ5xĮˆ,›I¦‡ņŸ«¬e AžÜŪäšƒŅ éē|Čä?‹üēä łO \ӅŅÖYCżĀł1”×Īś{ ¶pįƳśńŽ~7ŗ ,˜ŧNóac£ŻqSĄÅSb0¹Ę–#…”“Źō GŲµž“!Õ:¹Ģ£ŽĘr ­ŃŻŪ Ą<µ”`ņ=¾,™#ˆA8ģŁį*…婹B*D_Ų£†j’)Gö?Qūo;ż§e’µc‚JĀą’›\ƒ2‘Ō]üŗ34se8ˆæ ”N[Uß_±r…Æos_w«,-w…+køē)Å Ü6’+ē~ »N8«Öžg÷ućśõ/ą¦Æā­źIųļ+nĀK‰@@"x°ä8 42xdBAņ’48\ŠHŚ7“ü’Wžr¼›\ķŽóŌŠņ„ü? ¹Ģ’ Į’ł?p˜ÉeG’Ė:›@¶MŪŽćf*ü„8f¼ē/ó`īÉĖńÓpÅsń“mļckU7ę-A°Ŗ¬†vŗlcŒf€ńōR5Ą`ŽR„ åq!Ś×‰Ąśō^ņuģ>v>–_1–_øõ5‡ž>hī„žż_ūłSģkÅ ćč3č4M“8=hŖ¬DsE-:§Ģ@i ¢åU™Čæ0  $T‡l˜#͟¾:9€0bĢQTĀļšM.WEų¾Ygģ’C¼#Ą0Ł‚ś:+&õ쩸*2/€&éAĆ©Žs–Z›K'E·TLж›Ž˜ģk+™Ü×ä=3ä3ÆkŁUńļĪJߍe51_ŗ €¤eŁTP:ÅK`4€AŠ*®pø  VDiĆ”…ˆS œ$S¶ ¤l%€ABFüjwĒ.,™²,żś¹—/C¬½)Eœ)'“ƒ e]˜muqÉ?T”TƒˆŠŌ¶7ė1ģ:°—ŸńIL®™†żķĆŪ™ü”ĮΟx(ł [,ņŸė‹ü4O~cŒż`rĻCÉ/ņ<–ŃĪ©ĢS‰Æ^ł#ÜóÄ×ŃēļĪ0OöcÉ=Oīs ł/|<Ļ1tĢć‡å Ą ŚæĄ†Aīż=BĘÕšTĶė|ØŃÖoą±·Ėš'€°æĖf/|0üsüüŽŽć…T#o@sŸ‰%Ó¢Xæ×3b]õå‘ĆŠJ”»·<܂…b(\ž?ˆĮŹÕ—“|‡·öŸ€PÕ¬ŒŸ“čŪ”č „Ōž”źü?TūŸ żŒ1‹q¤e’! ¦…Į a@In’„”%éØįaćØó'śŌ‹ BŒ«Wt½¶iOo·ź®źT„*źö į2HÕüOŒŅĄS‹Ų•·ąYĻ>ūKÓŽ„k;āžž -%•xdÕGńų’c0˜xūī~% W `˜Š‡dž—&÷O—’ū1ŗ  @hĘ%ÕtóńĒmM,O„ĮÜŽDł2‡üē@>ew`āŚę*člxŽ9MøÕeąĖ`Y 5ĒuUXžń3ńą†ųÕSńĒą ŗź§apÖ D=„P%åö›6[@'t, ņ–@Į±ÄDØĶ į*GŌŁŽĮ`7z·@ūM?ʎ’÷L½šd,<åhLY³åĖęĀifP¤#6ļ‚|e#¬—6"ōśūhL'zL7Z=^“•T”£v2ś¦LF ŗ1ęę:ßĢ2 n 8ņņ ćT`ŲŁ ƒ®XŲó×Įå½S=°°õZaKĄm°¤ĆyšĶ)ŸŒĢ«2AœėżRŅģ’ščż³Žļ\Kš=Å€UĶ·WL ’öĄ;=žN÷æ¶l-½zɽ&TC§Ą cIļi»siɇ·Q šÅ; p’ŠŒ#³ Ą>O[€øŗ€Hj®m€‹ø ‚ Hؘ W¶q’5§f\Ž”'7^V×ÜŁˆģŻ7ņ^Œ‹é_ī1 ›‡ŠÖӌ@Ų…³–į@gCĘ­ęLY„$ŗ}9ę)œ烱‘ņx&}„ā© "åćAžGæĻ™ęŽ¢eżp s%cŠūžįØŹļ0 »؟d X[*ĄŠŚŸ™Ü Ixi›ē,āׯTdÜfį”^Ś6Z“äāC)‰īžLm@­Ś?¦1¤Rčč ēõt/fö¼š¶‚E1DŖff\]·OŖ“„žvö_ e’¤¶Id"ūxöŸx¶ģ?„Į¹]ūļ`†’Œ1%MRa¾ģ” =ļń1”Ļ»`ŃąŽöśT«Æ+ź«pY«‰sŅÅ0’kn€;8ē¼£ŃĻ3|¼Ž>}GŸŒ£!<ōŌ8µ·ŸhŲŽēø›…ĄņŅjü4ib›BĶ’Ņ咽쾄ń²’%5Ļg–½ey¼ŠQwžåśGŸ5cėjrö?—üæ%ķuż(m ’/É’Ć8’ŹŽy,ś6ęŌ’Ėęīć€ÓpĀ—/Å|w܁]B kĪX“ʳ‡›3Åh  ŚįF(4ъf„|=č÷ūŠčÅĮp•±(*……ʽķ(Ūӊ%įр öū$ń£n"Ę"Œ!€uzĖ IDATČ 2.7ś. x*ą+­€æ¢!W¬źzÄ8‡ÖĘŲ²žé(Ŗ }ģBTIHŌ÷'/ėŽ9iŁ`cå½Z“›;Õ¦š9Ż?®›lIlg8å["ĀOėh,=iŽņĪ€awø*I•‰ué*€t$Tą*®ĄŃ)v Y0¤ÉÅ6Sš8 ”­0˜VD\†¹`†‚V( Ī”ĕĄöę}XX;åžŹä1Éé€{Łb„6ńŲĒ•ü™8¦’…—Žż3œ¦ ß¼ž¼öŽ_°nÓ³E‚X4ó(|ģœŃēļĮoÖŽŸ÷“g,łĻuķŠEž‹ńM>†sÓ0Å"’9ßOE"’³ŽLƒŒ\tłI׃1ŽP$€ļ=w3śƒ=pN\tü?āšÓæ_°ļļ5 4rčq1żĖ4OīiŠBžÓ¬é„Ć_RĆϤįh ĪĻĆ”BWŸĘ&T8ų7ōė_S*ŃÜkf­€õ{=øxe'¦FĢJ½3S«,Ō• ģl™øęFR ōģĒÜšėšź‘0ł@köŽD®ŗŹ…¬%<ˆTL…4F^cÕŅį7›ĝ’UJö_3IŅĪųkĝ’9,N°ˆ˜Å³ BÜł_eĶž1ÆŅbµ‹ĀP”Ļ>­¾{óõ]Óׯŗjźµß# ¤Œźdó?шģ>ęo> {:ń×ŸĘ3S걑 >-€Żś/ł8Xä•_Į:„±ī•§1}绸€c÷&<žŸ»ńėSĪĒ/V®Į P\óæ„ü’»Ž^Žī?ę©kÆ5S©ƒE7”8{ž»hį—^ZZżäPÅC!:˜ōģBž?sŽ‘EÄ—ü8*:īøt{–uÆĘk_pzŅņt™žK“^ĻŠ”åwŚ™ćŃ@0“¶yē0kęV/2†£ķ;Ń(õ rÉL÷öģō#‹Įr¹!¼Nhw “ ®āķ$6ģĄ Ad¹øéf p—@UUBTT!ź-EŲS†@‰żNzt:č4hwøŠź4Ńģp”ÅéĄA§œ.49ŻhrzŃč-A£»„U8PU‡ƒ5SŃ6e:k§c`ŚTj§#RR Į »ŽH±įļN£»Ś+Šńl=c@r9 7DøÓ×ö¾_ī8@  øVĶ€²ĆŌC "=<÷ˆ20i­ĄāŅyi)҆-™WJaą@Ķ”ž]5?ӚJ\åч±’nwEt€ČŽCjP,čōG牰”jfł7p„”)nź§Ņšz›Jg vø>ĪLģŸ4Ē’<iŲ@iSÜĮ“Œ«"4 Œt/$BSČB~!½‘„’FIH¾ŅIh„zµéÜq7.’eK²ŗ“Ś6sĖļŁ•vW»Ś¢•m¾ä<ygī̽3»³{Ļūž{^ĪT13@%%%«4”W˜’g‚ ij°‰+Ri„ø`JŁĢT\Ö·5ė–±MT[66žœD߂¹šæžvęÆÜżJž‡ŽŻŠ² æžēąÜ€×åE0ˆŗ©ÕOņ?ō0R4†ć$*ć¦B’lŗQņŸńŌyōS€\U!Č 0bøčųkąvćŽWī„Ņƒ×OmoވćfĒłm}œČ6'χüG.ė„Ė_3˜ų‹ŅÖƾ£DücĪG„W¤>Į0ą üŽi\yBæv;¤žČ©a“t›F hM™Ą‚)aüźŁź}2V;쇷m ŖģŌ¾/Ł¢£7 (;3?YŪ]’ģw¾oŖšMƒƒYbg§¶?l•ŃEŹżŁ"ōg’Įµ Ę1m‘óĮ™“żĒ ģæ–0—żWŠČŠJiį“Ł—?¢š=|\hĒ®ŖPJzŹč’!÷("ī#H$f%•sö\Øóæ‚„–¾óĘo]‰Ė»öā{ü7x‹ńčŌCńąń—`'—@ĢüļŻ—0žq4_ōe¼\lB†Bxō”»qAg;~ņŪ[Pü­ŸāžTב«ü?āvŪŠõćÆ3`½}Ėń¾/ĒļÆ4ńbpėC>P»µó¼ĻEDńU+÷~įšĻ]ųćÆ.švO„»«’•Éü?ł&ģsł’Æ’ö³Ąž\а “ö1ų&k<~ ČžÓaühŌ]s&®żŻSų-cÄ”ēĻCßŲ Hü%Ic{]ī‚³M¼Ø²Ü† I “” ˆļ'ĄQĘ]ä‚b>hø¾x8‡ö%—‘@ö,ÜÖӎ;Ÿægõ¶ćŠuoāźMļć͊Ѹ’Ü+°ÄW yźEh8õ"| `%e_ś½ū'pł{ńyĄ ¤Ņ¾ä"’Ah×|ÆŃ~ü6³łōÜ϶øuKĖw>¼łįo„ģŹŪī\ŗ{śOO/śN®ę’•’§Ę>q¬Éę7ūę ū“%‹‡øq™ŒB€Ž¼¬NćŒaAĆŪļ˜; ³Ī8ŸźmĆ”ęØŽ¹ž®vp+rÅ?pi”ię‘/_”iB{}PåU„•å£`WM‚U5ÖŲ‰ÕMFøn2ĀuS•u°Ź«`—ĆöCz‹!]^(;Å:’tėž³ńHv>MŽ—©€‹;>¹ŚĪĄ¹£QÖŲń,Éq5Ŗ€Tv’v„„v1č¾=%sYdæįö* @b¤F |­WŌż<D Ėu¶ˆīkXUuņŽÕ6›ĒMµuņQ?Öä,Œ’A` š±˜„K‚āÖgõ[Ń`Eģŗ Rƒ …3@Ą ō÷a’Öq«4‰¤ę er’&ørs%MNĀ4IĄ€4 †Įē$ƒMŻ}½zkėÖT÷Ų;o6`¤‰°dCžs™±§k1LņŸ5FÄōÆŠģōŅ|nAį’³;Gnm2g…ć÷g&± ’ M KžMƅó¹ėV`å¶·Ó~ž0»Ś¶§5 ļmóaÓnnż÷(“ō$’üE‡0ŗĢĘó«»ŅZ)u-ĆØÖG‡MžżAmŁ8žG!¦“Bóż÷¹ŃDV§^EŽoP¢©O 5A é× 0ILKIMń'ĪqÄČ&ĘcÜęL Ę“` 6cJĀP’›LvęŒŹ0HFą1ł2J=F—·J¼~?ė-̚ø”觇bO|ī 8“8śąe˜Z›X‘hĘø­X<ēuŒ©lNŲ^āõ£¼Ø;a[©Æ%^?jŹ÷Āą‰TŻeXØ.mr¼ī²±%u‰eėĖ/ÜvDóų ”‘„¹trč(ŻÜųÉ?įøūoĆÜ‰s6ÆDYl{ÕXŸżž¼ī—ųäŌCq¶ĮŠŌ¾wżķxūo?ĒW–/A5(ķ€HÓ”)~ېęńטĀüĻ=–Aµ U”š!ó ¾¦ƒj_°n?»ü%[ϵ„ļs?_Ņx€Ģ钐Iž?§\<ī’Y“)öemR†į8&ĪČpģ»/€UnĀ™.†/ęŪĒžĄŁĒą¤Ń%8²·u;P¾w\ź÷0›j±µ3VRpĄ4”č?·*įsžr:öĻČ@䍤/Ŗų/²”~r[`péOr°!Mi”AžCó8bŒhŌ1‡A±ī‡ v”5Œ”×`˜P°ę†Vq»xT ÓpĖw¤ĶēŌæ]{ł‡ÆŌŻÓÓģ½A+T¹|ź„éǶ~ĶWaū‡˜KńžXā/œ™ōZ¦¶ |FФIGה9māĻmBŃgWKR.—”˜IJ‘Ņd@kC+b¤ĄHjFŹ€–ŒÅŹłhGīǵ å;7 d‘ęõĀwČĢĮ7¶Pä?·+)LŃ&?²œk?ūŁń?Ó{T(µC6Ł’<ś”ä…že7lū9uĮØ(…ēŽ8m›ńÕSP]Z‹ ‰ÓžR_9®;ū&üš²»pīџÅU§~ ?»ņ^̬›Ÿq¼y}VӾȵŸ”ßēÜūqž½HE„oš/­ŌMķAXBĮl_†š¶ĒP¤÷Æ‘ŪˆŽĒ“”Ś.$aż.7>Ųīƒ?”8½™9.‚3õćž%•Ūł|Ŗ²ƒ[v£Ŗåw/Ėgśš€@ČFk× Ÿæ“µŻPåł{ VéXHspĶ,°yi«$‡Yk"GśÆSDŽó?1ĶH‘Ķœ%‚3؜Č&N6ćŚ×63¹mĢę&٦iŲ&g‚›$a*ɹ!ɧ%—@Ļ®”T&IųĶæ†9“Öį÷×}'Ī[Šļ^x~ń¹ļƒŃ@ åģ#žÅ™‡?_|īūøō„∃>0RųŁ7ąĒ—Ż‚EsŽĄŸ¾ņ%œōSżĒM©Ż»æ|]BæžĀ×1mģ6|ļ¢[qųŒå ūN™’*¾rĪ]CŽ×UVg*…"a£8ŅŪŅ\ P$˜'M€3•žūĖųUÓvÜģƧڛń³×ƊæßŒ„śÅg^…u_ø ß=éB^RŠæ†üøšķgńĮŻßĒļž ʖ ׯƒ7ʙc& ķÅ ™żOB|­Ä»ēļYrĶÆ—o\Ū–ĪV³Ąõ'ōŽÉĀĆչ˒˜”G­Ī(2qŹ”p Ź’}¹H rQ¤ĆŽ ĄZų<.܎}h)\&ŒĖNĘy”¦u¶¢vg#ŠCA°@ŠeńÆÓ¹xš®ĮA€ų×:©Šm²›h| ŒµHÓD23©øI0ŌńĄ¾U@øJe#Ųa> ˜rœ\“Wž¹¢¤Ū[|BŻī/(Į¦pSnŖšŅ÷õ™'6ŻfxE„Yr ӏŌ* ō«bA€•FŠ`E<яāUœüj2““"Ł|¼ €›†ts%M"Ū0H‚A’AŅ0ø`Œ$c̆%"z宵©ī±ē iąeeF€ü熸ģc”Č’dś—iOČVșĦ”vy“åÉ×<|ņŸēNsX©Æ§v¶īY‡ķ-›Ņžżō…#l±rŪ[żŪ*Š«ńŻ‹~ £¦ąŽĒ¾…ļżķ³ųĪß.ĒęŻkš„3~€¢5ĀccÉ-@3čŻÉ… ’Yõ3p„&¾1»”Ł`E•T {ڰ„„īkDić½+6€ō>™×}l sø3ĘDpå ŻųĒ[åŲ՞ŗtąpAZaTd=*v?3¼gŲē „Z:ƒYOTµ79ačĢńHCn„*ėRī ½“UŖ Ōš µSöONł?ķŲ#K– $)ZņĪŚYŒĆę·™›l-H2¦%c$Hšœ$ćZ1e²¦2å`Rą«ēž_¾ū÷øå”ćsæ¾EžĪXųBB›ē.ÅĘ]‡ąś?ż/~ć2Ą _@Eq®¼ó>ÜüŠøź×Ēէ݃qUĪg`ķĪyY^̟²śÕ«·ŠUŪąŠ)«ś˜7e-VmZ\lzĖČšH©}–€ŪĄˆ-aM.ż—œKµäł{±ĄćØć/Ą¢/݊s.’.«¬ÅB}øš·į¶A„€C¢÷Źļćžė~Åc'įJžĘmxüÖoć•»oĮg‚tĮē°ųźoą=`°łßppżģ©/ø™’­Įƒ»éī¶t9åb_q|²SK°žŹVžŸ‡ ƒÜ/Ī1ūż-’öa ›Śl¤Ł"dcć`ć¾ĖĖÅy3'aĢ1‡`qo&ķŻƒŖ[įéīt–ō7 $üéGŖeĮ¤æł >” 2µe @1čšé-›Įt‡Ššć‚-„åvŖ¾•č=öąÖÄu£é‘oVN\?㻯­›Õ³p‚ N!ˆ„kņpPĘČ&c¤c‘ÅHĒ«Ś$Ŗ‘N§ЦRd@3¦ć$¹IR3’ÓŅ€£`†¶‰kaŚĘ¦¦½·ÆuŠĄˆą;|²žŠēAžóĖ`ē:–<ÉŻ‚ü§o3<µCŹ&’é_ŹÓŽł/ćĘņ&±„³ü4<.^YżDŚcF—ÅĀéĒįĶõĻ#õp›\ŽO”µĀķ}Ū›7"v’|ćp›ĢtDʁ„ügäɇü=–ģš)ĆF_mSŹvNĄQ(aCīzzŸCĪÆķ&N į³Ē÷ąoK+šį®‘qż/E/Ęw= ¶ē%h™Ė, 5a–Ž@ö³|Ұ§ļ…fū—„Ŗ¦@§HøĖ¦m°KHkĒųĻYūϘAc‚R3&‰Hhr²’Œ`ƒČęŒlbŒ`sĪ„a “lĆ ĮLgSKĪ )C‘f\+Įвö^¹ķ0ųCN0R)†g?8§śJB›ƒė6įŸo^š°ķō…/āßļ©œDy‡æ K?<1!xšąŅĻą‚cž\|ü#ųĒė—€˜š˜¼k¶gPF€YģU¶öŲ¶tEĢXą2š„‘é絩̒z;0ÅS„ēēķTĖ+«†}Ł·šč¤Cš¹Hē½ö°Ćyģ¤łrLķ{ÉWńÖ×nĮ5G#½^¼ÜŪožū~¬Zū.¦„z®ņ’HœüÜ^蛎/»¹ŌÕōUK”^}߇wm¼q©’¦ūÖ<›}Š•ž[Ūš-ŠŽs\F诶Ź’3-Ļ“?dĆq÷eVzß)€e;6‚ĢPa®Ķ÷¼N?GŚaLīź@m[3Jśz’yØ Ią©¢ŽPC©€ģU.Zš“¬H&ųū[ “‚B¹KĀ’Š oĖŚšo(„É)a Ųp–ˆč±.­MRӏoøjĘi{~T3«ŻÉ” įö„@o³gŌ¶·ŖÆŽ²tŌƍėŠę&ŒÓ •V „“Ż×‰ć$—ÕO”HöP$5õ_«)ƒ‘b†”L®„I$ ƒ$L†A‚1nœlbĢfŒ–m_“`“…QY ÷ŌI9f°G‚üē},łĻ)ƒæŚaße°³i”K?Ć ’9õ“Ż9ņLę~(žE–cÉöšj+źpĀģ3±ĆŲŌ°*ķ0>uģÕ°D/Æz¼Ū%'üF•Å__¼žčĢ+zĶĮHB‘ Ź‹/Ń͇üē~’,NžĶ©³|ŸS5³Kz.O]”Z*…Żm}[Nō5ܱ•»Ąx½,Eź J½Ÿ[܍y“ĀųĶ UųØeØŗ?łĮ$‰‰r JļƒÕ]_sśCvn䀘ÜķĖ%5RxŲEU°ŠRTÆŠ”'7J„²żš*86˜Š9S ‚` ›˜¶iAN @› bœ“M†`жį,”œ“ˆe’¹KKĪI*Śd¤ČšfXW?'įõśśŁ˜\»3aŪ††Y[‰A¤)µ;°fG"a_µmfÖmīżęś0mģ6Ģ·3ĒoĘŅOlnœ‰ £vĮćr&ĘåÅŻ(ööaW[ęŖā†YäR€K+Rh Īž'#Ż'¤v"Ö ƒ¤ē~k ›šwa.y¾|Ņh¾žÜń…ļąˆŠŃųöIēa3‡ł_–ųžŃć>qŌĻē»yߟ,å»tSūYė¾’Ŗ½ģĘ׿?żé›{/»óå¦sn~ļgžZó‹—„OŸõ›ūӝ+–żÉ’cŁ’’Ź’Scæ/„™"$ĆY°ń°ŗ"\Ē/<ūaüh”qއPף†ŠĘš` OčØ†ŚŸü„’ŖxĶ’U0Ų pā‘;’ÅLń” §īZ2후)¹ļx3@ņ©„‘Xą‘nßQ6cćŅŚ–W<é5/aL·ƒi•¼ yLÉ~ĢLTōo~įP¤S(MŚå2cŽ &cJƒr¹H€“0˜’ŒHpCKĘI°ØkļéŠ[Z>Ju’¼sgyÓgvr'ĖĆ ’9’Ž|Č’ŠcÉįa‘’ō$iæ‘’,öęCž³ķ1¹if;øÅš2Ų…'’įSĒ}J+“t5Ā–©Ė-˜vęO=ϼ’ųC=€écg昃OÅė>ƒ†Öč£wĶEžbųÜÅF’f|y¶r'åłÅ EžcŽn‚ķMż ©”ć  Xį>Ų;ŸĮÄī'1Чü8–n(Ā=K*ŠįĻĘó<7Ōš6Lģ| į†×`ŪĆĻś@w ‚½9Čž@Uū!G÷¤’|”‰#X=)å¾Čū»”ŻŠgü-ūĒHj‚t²ż1ē-Į˜ ę8žiŪ1’ƒĶŁć6cd3“œe‚&IĘā²’.R††fL+bŠZ‹ĮklŅ 'P–šŗ;PŽŠāĕåM U‰A¤Q^Ōī@yĀö*‹žO„{ūBüņźoįńw>„ś$ĒĘ]‡`ք œģ’źķ‡f5^%-¦øÖšŪ¶ ŲÄ3×ŅOž'ŌoĮYJ”čį_āĀŲžž$AĀżŁ’ØåĖ`zW«3ė5mh#. č«…żÕć鱦ƅ0’œģüžKęż°ū¦Å„·~ł˜£gWł¶ŅąÖBzŽ Ų£~ڬżsČŖžŗA‘×MłŪ'N©ŗ©’‹6YžŸ+ö„ü?žŪņ`—$‚Ö:Æßė¼°ĄaŃ’ļŲڵ ęĢJ\µÆśI,>³?؈U=]ŲŻÕŽ®p!«Ź•ĀE3[Np`Č÷ĒŠĀ! Ąć|Į{ąƀń„ł h™ęu|I@AY:}@ŠŠ\±²É%’ø„VĘ_Ö/`EqÉ® “Ė ŪUÉ IDATöļ‹ö;~PYAGW˜µ æŻ²rĀÆDČXŌńaķ«£ęļ][pŪ4`ŗ”Ed0hK ˜ah„4‘ę¬~MÕq}{Ż ›œlæÖŹW)ī7Æ÷ W‘†DI@ē‘’B3.$ČŵŽ–|”ø†¦£„£O>i©5ńžqK8 ś "­Š•”ŠÄLŅŹ–0Óqm“Ō¤ mŗ •2˜VBy³ƒ†ęJ‘4 …ąÄ ć–ęšĖ÷¶ÆC]å8*vĒæ7dšĪĄū+½oƒIy毐|Č–§Ī‚Üd1¾œūŁĻ¦ū)łĻ1ȓmJŽQˆųLĮ’³o łŸ1nęM9Ļ/’fML½.µŲ[ŠĖ_‹†Ö°dķÓĪ‘Døų„/B(“ēŸĖ‡g>x=Iń¤š™ ¢ą@t,`tŁX,˜v<н„Øß»kv¼!“ [łś}.4ł0 oÜ.”×O‰ĮÓ*„5ö“0ŗĀ‹ŸóĆ쬇ǒ ų”Ŗ¬’1č pt Oü+xjĀ+ŠŪ°žUqņE§?‚ĪŽTéōоģ)ƒWĒķk„+'BńĮŸAÕAųÅ-2j©Æ5Į)’+ūĒ¢Ó”A‚q² żī’6ć°×63˜Å ²Į“m0FLš\ Ć`68I—‚\Z2FJq„ݜ) f#Ł2••h\Šxarn3‚ˆķ\[röæČ€ÖŌæ?†@øeE‰A™÷·‰ļ\x;^]sJĀöŲ2€•ŪĖ) Ā~å2ARƒ ˲0Ō—t„’Š*ŠŚŽ„ÉĀʑ-8ęļ·`ŚńŸÄ]3ĄæmŠ„C¦‚Õɉŗ-«š\±'žpĮ ϼ ·ōŸš¦ÄB4uŽÄ·™¶ĄRG×’{£ĮƒāRčLņ’ä ©¢Z6ņ’Ś“³’Ą>䃋żhžBĄØtƒ „tTNaĄŲ ‡},pš$T”cj0„śī47¤ ²X@Y(Õ2€Ų2S@—»€nkš}5]ŠvÜvӄ¶ć¾mBSš —Š2®Ŗ[4Fˆ0 RŃ @¹H ²ć)ńOĘ”9‡¶$Č(]vß⫨ ğ/Ą'½Nw¾”ąlĶ™I€ć¾_Rįļńœ“żZń6Ż$@qhč¹sC@w»}»×—źõ\ ÅĄg•„PØŪüĢGoT}ÖåQļŽžŅū÷Ź©ÖīŲCĢTŌ 0&#m+ŻmŹ$Ķlķh÷iŻĒZiiҚéhQŁ` ڰ „Is%4ˆ¹•’QL  „ ER1%5ス7ˆlŠ“R6SązŁŽ58õąć’ļ”kĀxX °[ŹkeMžó&Žq$rYXRžīÄyšžŠü"d›Ē5ēušB‘’<‚FMĆ=/ŻKDšÉc>[>ó¼²śq¼²ś Dģ0N˜}:ü­qź€Ć9G\ŽÓ»­=ĶččmĮq‡œŽO,ø’ūļŠ숿_Č6ȆüGhC ol#ŠwMJłÄj{»B°„Fe‰3¶l;ßAMŃČŚEhŅ“!²Ŗīż_ä‹`6!“ē=t 瓯µĘŽ®śB©Õ5iaHX5l’.īDŹjRī =½IŖ Ō`¤5ƒbŽēŅѲ¤™$®I0m‘ąœŁąœ`1›lƒH ›ĮMesī”fŒIĆŌRkS‘”µ Rš“bœ”Ņ F=YæQŞD%’džP,10“Kž¾-)˜† [ ˜KzŻ!ō…ņ8÷ا±½y*N;ōåUŪąŚ3’˜?e žy’œŒcÕJ@‰°"7)8fΊńčr×č¤.›ģ?œv 6kĀ’[ń"ʬūW†üøģåūqŃ»Oć/D° «Ž:-¶Döæu;ÜŠ0|•ecģWóæ_¬ģ¹EœĄa×fø¾ˆwļåmŲyģğļžRńzĀĆć+†Ž„—&öŸ­łßÄi…]Jž-†³„}_ဠÜ蛣?„7;ÆÓāQŽ^ č×3ü¶ļÜ ¶€įā\Ē5gģ¶Æ&ĪFÕ+^܎Ą‰—­6 Ž_;˜2x÷IgŅwņ©ū[’&в3õ¾x0:v6f>’6öō¢Ņ߃v"E%Pżļj@Q’Ÿ!ąƒS0ķÜ*)ž`$%H ’ p¼/ ~ņTԌ)BM‰ —šŲ¢;ˆHS:ߌŠViĄ6 (Ó iP¾b(āŠŅ•:PDP 6i)HSD„ōd²°mqPlm)¦SĢp Ż·§ø¶ż£ņOYól­©˜”¶{ŠÕėeµ”å•ćśvKJ)<®ę ÅĒō6{¾²gcŁļl»ļćf†6ÅĘ`2’¶Ņœ ‰ųXqLĆp6  €4é4¹“TŹŌ`ŚQ002ˆk[IMdhī‚“•Į„r ²%g¤•`‘PLsĘ“ŁÜf\Ō·ļĮ®ĪݘP9>łżń-<½/æmEo~ä?ūIž’±ćŽ'h’é¢rĪ`§”vyšć!’iūjC¦ƒ²leG–G““jfą7OŻ€@Ų÷·,ÅWĻ»,ł-¶7o”ڙøä„/”¦b<~ūō°·{ĄłüĹē Ó߆•ŪކRėźWąų٧ć¬Ć?ćg„>ƒ9“ŽĄSĖī…Ö:Jž Ÿ=ézuŠIxōķæąõuĻ@kņāj|ū‚_ā‚cÆĘżK~0ĘÜIy~äØę©÷góaI|iūŒŻā¦Ō.źŠŁ†-F—{śŸ` “ćiL««ś(4Xć!Œš’'`ÄDŽŽś:ŗ ė²/¤BKGa;7%fā fĄcŠ ĄŠDŒš6ˆ€Ųڦ­5{ˆG’ŠoüGŽ€$Šfž‰¢kżµ­ĮˆYÄ`s®Ģ&ƒlfha° Ę„Į“t¹¹­9ē$¹[K“‘R†ŅƒIfrM SķŲ›bŲ)Qźėōŗ'P­Ó?ĖJ1ōĖPęėA{IEQ:ż|ī N™’*®ūżŻųß/]Ē޹B:“ØĶ31©¦n3‚źŅvŌ·NŹ8ÖpO“"h $ƒ$I”™'=iL—żĒĀÓѼštÜZææ}ēßųTo'®RS 7Ž~žAL9õ2lµ}õiœĪ ģXø°xłé+†¹ÜŠ Ł’$¹:ó?æĖ,U|®ÖTN/†-ļaA5jfk`Få†öSAķfLÖ3Ųõœ¬.whg‘ŁVpŁk;>1ē½PHóæŠøüŲ€}½ Ąč¶`»·1‹r=¾Ø ˆŁ–…ū€ŗ™ĄŹäj>e£ņ frźĄč‰€Šū}ØØÖ.‚žÄv½ŁmęDŌ<óFŪaTöµĆéBŸ5 Tģάœ<€&(Š“ėĒ/ˆE/…pÆ ¢ŲürŒ>f"Ž®-ĘQ%nĢv›˜ĄšāśÓ`ūĆhźņcū޽Xµd=>X¶ {ŠŠa•@»!Ż„ŽĒ3…@ŖódTDÓü…RŲč·p²ū†ƒVĀ&Ī„ Į@Ņ Żžaõģž=„Ūc48¶é/—=Y=³s“€“,P dakŅaāõ֝¾†¦õ%hŪQüķŠÉ‘/śÜ–ŒACČ­-Š #Ķd¢ €œæP:.€‘¤`DŚ ­-€lMڌ©L„a`L)F\*C0S’$NB)pCAhƒŪZ*.™D$ä­į—, Oø½ĢėwĪ,W®É.;Z€ vV_F… ’9÷ShĒ’”÷ē—ĮĪż«|ÄȦ÷ØPä’@2żā@ƒ›8’č+±”a6ķr\ŖyóOųģÉ_Ć·>u{ėĘöøķŃo`OG}’¶RofŽŸ‡'ß½JI€JK¼±ī9¼æe)N?ģ"œuųe„{ńęŗēūÆē .ĘQŒæ½rV|ōF’łŗūŚńÖĘpźü ʘWądˆkźŁNrNšviĀ–žöŃiõ-X¶Ä˜J Ćł)ÕZ£«½Ō±ÓGM†æģ(4‰ZčB|ŽžCa’D±ŽīåčhŻåŖ ˆPD¢„+™K=C€†˜ÖU*čxņAøb”kšTLŪĮ§ÖK3ž£~ć?¤ ęADŒ nĄbœŅϘMLٜĮf 6cZĄŌ‚L&eZ0f*fj„AŠ1­¹ŪP !ȧ6w’¶CšĢ“óÅęLZ‡·6ß’śąŗMųhĻōŒ÷ ~ļ$Ģü!–¬=ią\“×aēŽÉżÆĻ;źßxmĶÉhéŖÅŚópŹüWńāŹÓ8>ķ™Žē.ņ]³† 8Äéi” @ŁLs[¹®ż!¹L÷¤™N›ƒū#A<ųԟ°ø}®Ł¼ Æo[ŽÕ.ŽWpiE~œiœ9•žK!’”„7©#Fżźä•_ł•PīćĖÜ ß¹ńŠ)Ļ<ŌšūŹ]=ĒM FŖ'ŪŚ7YĀ=ŁVÅgF‚eSz1fTsĻ\,m¼¾ń³Ē\učļż)ķĄFĀüĻæ‰ś¾–’`( gąČ’c&g3œqt6ÜJ*õŹZgEmźc+ĒMIög-;Ža£§Õ”£l U½A·v£«ŚJ*7ŸF` hŪH¼§…R õ×š|z6ΜP‚óн8Šr0d f™Ė|˜8©'4ŗµ ŪÖÖ㵿/ĮK;mt”U ģ)‚]Z”43 ‹xŽ*$Ž—T*€X €¶‚a2Ą) Ȃ 0sĄ£Ą’o]9vqØÕw‰l6éw‰õL匮'*ĘY€Cųœo!Ž! Pš £'wvģō¾ ˜ē“mńĶ7·oeģa&EZBS¼ ˆ©$ø ­Ģčų„h ¾Lš“Ķ4LEˆ©“‘ ķ)Ė’ `ä‚”"Zqhī")“&’†"f+’Œ)© Ęg†¶•"Ī4øGśŌš]ėŁ“-JvOž±{ģÖ įŽa‘’8’#Y·ü=–‹Äf„ Č”ŸÜÆy_‘’,vä×ōcaśēą”CĻGeI5īzf@O±Ćųė‹·ā…å’ÄøźIhļŻ‹{7'#0¹v&ˆ>Üłž k[A<µģ>¼±ī9Ō”C؁˜\sĪ9ņr¼±ž¹ņ;i ģ‡×UF’²=¬Ą(„ńŸcō§%1&‰ 5żc›ˆ£?›qXÜä67Hp¶ip›CKīb†’Œ1E>- " Ci·ĮœÄŽ-5ēLłŃOöWm_€ó~ Æ­=9cjß.ˆQ„s .XrQté²’÷ž ׇ8™14•Wć©3®ĀĖÅå1ó?·ź’Æc‰"¼ŗō1LŲ¹ēF‚8®ŅJüōŹąŃdóæLŁ’„ Eāl]R™’!.xpžĮßi?ß¹ņÖe»/é‰Lŗė;ĖCg>öīļ|żč¹Ė,µóCwxgŻMÅšĻ›a„ž#½÷Gb3ĀB˜’²¼_2>ņą ŒŌ2€U{AĒzpųpĒgG‡Cņ“µĮŸ}`ŗ¶15Ąŗ¤9ŃpQä›Xƒš=]ØPĮ°mAæÉŪ¾TD‚`B€Ę{P|ÉB|z\)®69Fčrit¦ŸZé‹ēāŖõ;ńÖžĆ?¶6”!0Ao1¬ņ*ŲpAy\Q£»(2©, p ”H…” Tq·™Å­›ĘŸkõø.ҊÕ:cŠ Žņą£ęu¾ä*¶ĆaęČó 0FQC@”UčW˜%jK$€sB~>q~&Nöž YL0čf2r}PFjiŅšX’ @ĀłÅ³µŅ¦ĮĄl(m€˜&ŘV&øŅ\H““ MLj0¦HćÜąŹÖ œ p±z÷v=±z<Ք$¦Źš.<āå%ŠB ›ūˆ‘’l0"¦…Ī`§ĻęEt īųŸŻ9²m3(æœ)Oצä?”ÉHgG±·g~1ŽŁų š:µŚÓQ=õiĒXQ\ „$Z{R×ø€®¾vtõµ;÷Ž.]t”RXŗöß)Ū­šˆ¾PO?ł]Āō±spĢĮ§ā¾%w¦ķ+v@šQ¦Ć²mm“żŗ’”ś ŒŻhWoś¢C± •%nT”zĪ!•DgóPĖVT5T5Mz"ŗ…/‹‹ųĻ„E0žvĀčZĪŽę‚güē=ŪŪB ×õžQČqcŗ <Ŗü¬NYābW—޼¹C1GśOP:füGQć? ĒæN0į’q›q²‡ML ĪY“ģٜ“ÅsŹž™Ģ)ūg€ĖŒi„¹RgŠ» ň“bJ&Ąń­¬ī}oćŹ0A‡É €aŹé†ˆeü³Éž?ń{œčĮ5Åeų“mc\[nąēųAq%žvüłųē“9‰Ž}'ž…]'ž…»Ü•\Ā;FŹüļ{G’×C›ygcŪłw-küĘ›Ś/žŚw™š|lĢfö”™7łO™yӇł˜’ …į˜’-ž?"’öS ŸełŖ¶®>ńRĢĢõŲTčl*Ę –łWŌõėH( “5ģ+­v|Žŗ³^ɔ=jG”rw;Ź­0ŠCøbR|—€¶bžnĢēƒwö,×|˜ś&gāvyįLͳ=dŠ)rīg?;žgč<ņŸ¹M>Ō.uƒœÉVżˆügˆČ柁głiž~ļĢƒJq©ˆDl` \šĄQ„ £¦¢£w/nøō.¼¶ęI¼“ź1DģP’I§Õ‚{7'ōƈįSĒ^śÖ­ b˜\s¤ŲÕ¶-‘¼eCž³¹w™'łO ąøFœ3PÆ®~"”d_¦óÄoŖoŻ"†Ys–¤9Į‰ ž¾š4“~„Ūū&Ž=ä8ēČĖqܬÓńĢūāM/cꘃ1¾z ^ZżXB?‡ĻX„qU“šĘśēp󧒌źRg ݆]+š×—oEÄŽügü<å)J÷ÖjŗFļš#8tę>bI4¶łQ]ęE©oš‘֝]čģz.×JĢ®Y>­ŖmV)TAŽpļŠ‘4 ­ŃŠ:1å¾Ę¶ō朶0ńŅŖO¤Ü·®~NŹ~ā1oŠSžOéĢKuzźß‘ 7Škrå÷¹\ާU¶k’?w~ÓüŃ@‚}ŚōM›ƒæ„śš·§ž„óŗŪšÅ·žÅ—æŠĒ&ĻƟO¹;ąåaņi— £ÕxA²’Cxtšuė0śŽ?-{sYCšč?.küĘ{Z/ŗžė§O|Ńwl!Ķ’†#’_œcö’@ĒČe@¶ˆ„@DØĪÜ23:›€ł'Œ*_ŖØ‚=Žģæ«ÅyŠ1Žr`$P\74|Ā†Ļ¶ą ¶c¼ć ˆ¢*aƒ¬Ų—ēᤵų%gHæąqQ[…Ś;’?¼’<ł«'ńTďV+Œ^_-¬bd:ƒĄ‘THekÅL2ᔬ×üBøŪżvÉøžN-hš*'/1—~$Ŗ˜CŌĮŠ OżŠŠĖB=ęg@`E•‘?WŌ…Z¤ćqRżB’÷BBE` *CJ€Ņ¤‡‚“°K„Š.ÓP–- M€1"TŹ`PŹ$i@se“d†ÖL˜VŹfBšČÖ«w}¤'TŒ„šŅÄg”€¢…óŠūņRh;UU€|3ŲCļϾŸ ä?‹n Až³jSˆs Ėģ¦Ó‚ü§ķgČU†n“ ‹ĢžŌÉ×,„›¼:ŻÜ+‹~v·ļĄ††ø|ńWŠč(ów@옃ĘĶÅč²±øēåŪ “Ä[žĒ[—ā‡]ˆ ūNœ{.ĀvžV¬Łžn’)Lƅs޼J),š}~ónloވYbĘø9°D$#ł//ŖBw0‹Œj–Ÿ§!›åHžc/4)ųėP²»F%€R@kW½£+$lP$öķ£pÅĮcńēżEžcp™0Æ9ßu-¾ŽÜˆÉ;PÕÓoø†m9ŸóT&”cĘ+¤Wé?o±s±ht6ټ…1h=ž1hÓ¶KF÷tĘ[42FZŒ‘&÷ĄæĒˆ~y‰oŲHÆĒ[’vÕ›_Æy0Ōėŗ‚¢¤Ņŗkś±]’bŠ4ŠcH IDAT±žE’ł£ż+©)ī}4õ’ßQLC«øķœSĀ(iŅL©č2ś’2““M޲I†f EŠ“ĖER¤˜”•É™`& ε`ŒƒŒkŪ0YÄ0`i[½±uI5h†E^/|ó£Ń÷a‘’Aō0= Ežs"åŁ“Ā쇒•. ‡~rϐŽłĻę=ŹńŁ&ē¾Hģ0ČŸ§XKD`‹Ѭśq¶ÜóņŲ۽߻č×ųę·įģ#.ĒQ3OtĢ‚iĒ¢'Ų‰UŪŽéß!<żžøń”/bēŽ-˜8z:^Xł/ȁb%8iīyØ,…-{ÖāΧ¾‹M«a‰Vļx’zėC¬ßvz/+ŖÄ÷/ś-źŖ‹ūr[d’žēIžūĮüu»`•$–)K‡°%ŠŲ@Wߊg­5ŗŗ»°sĒ4mxe-Oį¼„ĆŠ6£ĪŻ €ģpĆEµ¼Sķe˜Ü~?Ų¶ūąo|ž¾žķWj¶ž0v·†EžUMÄäV€Œłør"¤+…EiłPj ‚v¤’Ī?¤#’gLG³ž°#@ź7žćĘ63É6sž™†0 ¤ĖĶlm8e’Œø²nƒI2 MĀ™KøŻ¤#m2&¹›”×ĒlOhÉҐC\†…ćg½…7ן±­芯 ļō2ŽnĆ@»×ŽāRX¦ J$U“Źłļø6ÆDY_wźD®aB_ōu,¹öWøtź!8€ÕŪ ÓžżĢjŒ9e’S >ū’›Õõēß¼B._ŃųłĶ›żg­x½éʝßX&Wżhią—w.[ׯžRńŗ}ĒŁ„?«*ŻxŗžE/¬żŃ²Ÿ<’ŃaHŠ› ×ü/S›’ł?p*€Āš6ļ…śĄ Ó—œĖZGežµ@w«³->ŠŁW r(«v”ÉųÄՃ·=õ›DĮLp›ąLH˜Z‹(Łuy ­0Ø_0Ä2S@—»€Tf€©T1ņ’£cńõš\ŸżhG'/Ąįż&|×܁?Č"µ!”C˜®ōQĮA2ždCĄ$@6`ŹÖvT€øŒ;‹Ŗąœ¦(HP0-(°Ū3ŗż£Ź Ā}Ę9Š(  z«fzĻ_*ĘöÄa¤ӌE„śń åŲ5žĀʍ)V@r—ąFĀR‰h@!n)3HŹ) Ø4ifh-53™‚Ķ`0R’˜ä\PĢPpbĢ N’sĪWD‚°Ńź‘«vod‡O¤µ3'ÖĮln½gą!Ź›üēČŽņ!’C%‡C Ežs"åéś)łĻboĮ’s ĖéŪdAžsŗ-#Až3ž=Ē~¶#}ųĶS?Ą¬‰‡aįō0³nVmėtФšƒ°¹q ”–ƒNŚŻ×–ž/^[ūZŗÖŕųŹpŚ‚ ±«mžśņ­N¶?ÅąŅ]#†+Nü¶·lDcūöäƆ¼ęĮż Ļń?ėN™FØn7h÷x˜CĘ µFGOž źR|ž”§kZktvw¢³»D›Pä+œ²J˜„ć4Ē Ż.C»]KÓ¾±JD<”Š=Ū±Ļ<ó5ąŁhļ åQŽ/r\D]še8ū¶§ ‘²ŌŰĀK¶I±Ūļdżį¬ūO”žCiA A1é?“ ‚MœYŒĆ"®mƒ3«ßųk›s&ø©7 ĮiZĄÅ%3”4H™&dĢųOB‚ČI†0DēDŚ[䲫Ģ÷¶6ĻßB¾IķĖ{– ’sę1kā¼¹ž“t„)‡½«¶HY½†‰6·ķÅ„čõĆbFbuńtŁ’×Ćō-kš#;‚£ąLó„abƒ·/Ķ;všC™mšK!ąĢ+±īÅš»m°ŲåĮ›;7ć_潏-> ·.8½@śģF Qśļ7«ėĻļ¶'žĮgtŻ1ŖlŻóE®īP§Zm—U·Ų’޳[³ÆłĮköź2oóß=fĀóžßI³V¬mųÖ±Ļ~ų“ŸĆ%cŪ2$ķ“Ķ’j†Nü×ü/ūõ—€°ļīŠņ³lMŽ&‡ōļŒś“UŌõ뜒‡ü@øĻŁßŚąģ6ąOńšÖ#€æ+q[Ŗ¤ĶP°œ‡”ąŚSP™Ŗq3ĄTˆ-0œ‡©FcŪ iƒ¾w> ‘’ĶŬߒ?\ūł_įϚqŽŽJÓ•,ßO( hEq 8eeLĄ@ż%įœĆķƒŽHc¤!l2 S ·fįČ usÅĢž=„—Č0_¤5 @Ū.Æx”rBą±źœ2‚ś„ü)ąx€ ””p1ó`I^Zi’ą’ø³ˆ%, MZ§] “ŒC@­4)ā’RkJičR\Zę”-&‰iSq½ŗž#5¾¼–)T9Ā·`>ü]P”P^äč6ٜ'¶?óI>v¦ū)łĻI‘}JŽQˆųĢĒĢō/Ÿ~·ÜHi…uõ˱®~y’y’[•xĖŃÖóŽ cćŃÜŁ0–3^“»š·Wnωü.‡ŚŠ:ŌUOÅō±³šÓG®K>,Ķ‹4(„ć6{¢›54ćwĆŪR wgŹ_éA°l‰¦ŽŠ<&ŖĖ=0yfį¦Ö}>ōś€¦]`Œ”øøµ„e ĻX„\cчRōŲ^ų„wæśp(”P7ž÷ Ć‘ą†Łš¾ä.ĀC׎‚Ÿ¬YŠ_~š:®Ü¾ƒõA¤Ol¹ÜŠ Ł’$¹²ü?āvŪŠ‘p õˆŗ›|®Ž[~ttõļcū+Mģ莚óļæ&? ‚č Ö=pĆėõéµO|łŅ#.m9jģ/C§Ģüå7ц~@¶ę§åO+‡“żĻūļ[×Įž tŹo£!M5€ÅI*aƒ”ŹGŸMĄL§ņ PR9 @å'P5ÖŁ—JĶōaֆ"Šé~½ „°]Šft»°A_ż’ģ½yœ\e™6|Ż÷sĪ©­÷5„„¬„@IdÅ6·™ßłŌYuĘĻe^|G_wQ6AŁŁ·@²/dķīōŽÕµžó,ß§Ŗ»ŗŗŖ»Ŗ»:ż®ß/ætåyžsŖŗś\÷}Ż×½Wͮç¶ņéŧℯ^‹k¾š3ü"cØ[‚Hė³ ” Bäeངdz?g#SB¼:óĢxO诏§±TĖ?Ī8nšwUmÉŸ“[¾Z€Éųń… ©×0šB* æ@AŒ¾ž\/€ ” «„!#µ‚ČńȖHAŚ‚aņ”aĮš%‘¶ö2†€Ź#įBe<#ˆYf6DĀ„Z»m=]µźæż cØķŅ’ķÜ ū®š{phå7·w\½ööu³.łÄgžŸ*ižW“*Qå’ĄS)ȇeĆHĮ"ŸÓ²Ń×Ō6,ü |p“l?×p:  ž††OĄ 0RĻ^üLZL€ÆšƒćmĄ×ńĘÆ&ć/Ęź—·āš}/ąįΤB7ĻDҲǖLUPl J{†`“/õ÷[f÷„ÆPƒįPē֖ “ż”÷kIs€…9ØKß3sY÷Į°—.`2šü¬V&—Ū1Śų•™÷Ēų*ÖdtNGf2¬ IŒUųÖžvÖ:'P—ńV°E&„J§” #† µC$mMŠŽCiYŚ#%XĆK a“`x†ŠŃōyzĻ:wŃ)ł÷ŅjmEpį¤wīĪßUÓ@žÓæ’²• .(!ū_v»µ›Ä·É“’¢óŒ·a¢“ĘĻ —{Zž5W6ƒ]|Œbēģl 'Ļ[ƒūž’yN6æłĻą§_‡Xrnø§Œyü­»:6cWĒkØ ×”„n¾ōŽļćīg~ˆ{Ÿ/tų8×SZĄcĀĶ%y ķI7ōAŪ‘C³]š“1±4¢qÕ ÕOĪŹÉó\ ŗ0RžADØŠźĄVZTA[(D ‚ xŲlŠ3 £l’`ķ:#“€NƒTH @{±1¾“īÓU!H©Ń7”F4Q™Šƒ±%¼%ķ0‘Éw ˜øU-p« ū`'ŲŖdWĘõ¬ō_”£ä;’ ņˆŒG$\äC²€ē;žĆóĶ’ą1)ö„ /ßųĻ20Z;‚µoüGĆĘœēQÄ ©ą„Y]Æāżūæ’+Æźæ“Vź‘žˆ ޵Uwo¹wĄ¶Še;8 ££¾ƒõÕp„,”ö?•Ą¹M3ps”ń·<&ĻÅéKOĮe÷`Ķ`7žć‡_ʉ×_²l˜³®€mĶ‹q2’Ėb2ęČb^S#Aw^2’‹ĆiĪ:čĶ½Žęä]g“Ž?ĮĶ›Ÿ=pł;~óŹooŻ;xʝśœ³aķšLŲ’o”łß_ƒü8 D0fT¹°l×ÅŽH°üõB" øI?P×::ūųÆēfZÖ·¶VfŽBčč‚?9+Y@Z™:÷€*TÖ `®@ų”9ųæLØŠœ^¾|#.zz :ŗŪįøN²¾ n±@I~[ĄRT•0ĆųĀłŃć ģ¬ŃżzćÕéxąŁś~P/T5Å~=gEļ‹Ģ0®Iķ·ĢĀŲ¤2¢oõœD½ÄMZ35ȱl3ip7·,ŚĘ:ųZ{`‘»-_ @IBä©૔цyl Ź#e,ų„.Œ!"c3“k‘eibiˆ!““$ #“Æ0D$“ŪŪ÷c^ćL>¶afžųĮ—BööAõežŒLš,?hŅäæÄL`öŤ3ņeĶSdS%Č)SWŠüOōUŠüO&B0fŒQ᧢ǔ°iü+Džm;€Ó—¼ Ļlyd”I_©óüyżŻX¹š,|ņķ_Āk惎hWį© X4óD,Ÿw:ī\ūæÅ_Iifć\¬9ī|ÜūĀĻńōևqካQ¬)•‡µōe“’ īWÅP šc Ņ„óm ci Å]ŌDŌU9°J( (Ę$S)$SŁ÷§kĢ1ł–xŁ?(¦Ą¾£iOa`(”Jdü3ŠÕ)x‹:ēč2^Tv‰ęy÷ÉŻĘ}nŸ ßõŸżś’<éæGĆĘ#ŅĘc‚ f—3»ģYž°įŁ–š,a$˜lRB@‰€Q¶!m£ƒ£Œ’ņ„’“}3bf2 éĘZ+ :Š~šžū¹x÷‘ŗ‡S…ö’xżĻ_‰1éĖĮ`ū«ŃŻŠŒD°J‹‰³’`4j›gc[ī6+cĢżźÓųØĄē\‹BaūC?Ą »7ć—wŽ‚×oų~ ų™}«Ł g’Ėnż—ł¹µnĆŽžīć^ĢŻŸ%’æŁņ£fi—[ūü9Šąøcīwߕžä'ļŽüć×n’ĖķgzĶÜ'Š­³\”’ż’[2’Ėā Œ‡\ĄD(fŲ6ĘĄ$ÓŲ]_ĮµõfTµMc}@¤„€H]aĄJįP/Ņ\"¤…€¬v óktĘ L€ć‚dōžÕøÉXXĪśŗū€ŸüŠsfśœōĢS€% ü²ˆ»ī^Ś,ž\5`g„߯āIĄó€ß<ŌT}?ŠTę›X_ēėÅŪÆł*ŗ‘T#² Ćc=!&Ūp"(ķĮ6” f‹ö<µųļ½XšĮø"ģŻ×0oš× ‹^7i#\ 9›õ‡ÉÖś÷¾^=w`õ%ī8OkÕp2 Žė ooxÜUż_­jQƒžŒ#*AŅ*å׳RŪ0J‚ ŠØˆ“bb†Įh€dČ c(,Vò‰bŅB*‹‰Éb©4˜a‹! Ļ2 !„fłÄŽ ü¾U Ł£ƒMĢÆ^…”ĒžT±G͜ģc™dy2äæų‰e<%[Fö±Räæ,R^9ņ_ĀŽÉZ é„Č%>r%ĶC8’ä+qłi×`ĒĮ8R¦„hØ@±łÆ#|p&씉Ķs”3Š€Įø‹HŠB}Ug¼ĘaŪHŗC.ā©ŹP-Y§’Š;e"Ä[ĆŠŲĻ„IøHüfƒ2ĆŅ* ż§éæG< š@äó„ńČb—-ņX˜LöŸ„F ĮҤlĖH8ģ’Q¾ń†’r„’”UČĢ‹u ąČ–&=4“ē·õžp¼Óøü„#r#§ˆ}kæ™J ģéµmrŲ[]‹ƒ-MØÆ†«ŠN`$s=žóŪüSćlŒ)Žų ź“1|`Žr¼7{ž%Ā–ß}ŸźŲ‡ļE{q{M#ĘD¦*żĻÕ½¼oɵķXrķuŁ×¹Ł’-‡Æś oż'N9}kø &ją¾G€™­Ą¬ m½õN`ĖN_GpĖFĪŻń:šÓßæŗx’Ą¼ŁĄ§Ē«žŠŁ—œ‚Ó‡z1»Æõƒ18Ņ+üŁ/·-`ö‰Śęòå!"3ŖIžpĪiķWĢ»`÷VĻļ~ģ)Ą’®u2õõķ[—o’óģotnŖæ=5h½_kjeĖģ Vyæ«jNßR73łåźfļŪl™ķŅćåū^®’†—4£2żĢw]wt[@Ķd¬LĖĮģ]Ą!ŅJlēLÄ2ūš=er)ø 5Ŗ- “fh-lR4ʤ,‡$ŪP¶02` {–%<y—’]/®ßńŠ)Š Œ«"­8©Č-ƒü—‚i1ż«t› žXā°ꩳ/i¢ÉCł;Ź"åŎ©łuČt’œŃĖ l>†P®ĆE+ߍ'_{ø ł/õ}żšv|éĪį¶‡¾†}];”“BGÖõ?3ĘŖoĮÜęEøēٟĄ˜¼gµ¢ļŃČÖ%³OĘŅcVįžļ€Tޘå]øņ=˜Ū¼i/‰ŖP-Zjg¼ę)NJ$’"ēĆ ń9j=ŒÉ“‹3Ę –ōp ;†CŻq %¼qŚ(žmAj?H²ļšuĒ+Kž…†\Ō 9’č#’@¶å_UĮ}ń»7)õ|ņOŠ҆  ³AC ‘ž“ō„’仞[ä±Å.[µŲxĢĘ®ļüO’-R̤Č1,“ eƒ4;Z;™6þńŸ2ٶٵ“Éf’¬z‘t(ÄŖŗ>nn ö󞒼Cķ?<Ż÷pŖčX’kٳõ^K Ż `w¤{›ŃU߆x°JäÕž‡+?…G–­Į°„x6ū’ĀCøÖršŅÅ…oMžqϼź“xŅT½ŗ3 ¢Ł’<ä¶žŽN«šk-N? yŖ•ėž?k_<^ky“½gŸJėæRPIóæRøźŃņUqT(¦« ąĄģ(‚¹ēilX51!PųŪ°Lōuǟ‘ ų źļf768PIģŲéyHŲb#aGąC%–ÕQŲƳFī«tAńų”üQÉšĻ®Ž_¬Ītżš»}¢_]å'oZ üīV?ė’ś€·_ Üt=É4l|śE`ŻŻ¾WŽIK|µ@Oł*"ą_>„Óų$¶õõ¢Æŗ±`^m¼‰JнΪ ž[  _ж¢żAŚNʳmid:™l<Œ”’śö4/čŽSż éZ§ĮøvH>V=+ńū¶E;GZ ²Hé<øumó—¼4Ÿu蕶·{ĘĄżŁu {ĄočĮ¤¬Ŗp·0*Ą 7[ 0œ?Ț*"#×69F”ĢdŒ&M–axŠČbćx¤ ƒ\ĒŅ©Ł#E3Œ”gJ,#Œ!f‡\Ķņ@O§y­c7-›9FuāĢ™ŁÕo’œ­eĀĒLŽ,—;Ļģų?Įä“!’3µ+}ž²ÉIóTˆüO‚”O†üOöéaō[āæŗģŌk@DxšÅ_<”œ÷H…{ŸĒ¦ÜzüĢ~KŲøā“cˁõŲr`}‰óŒlef\yśõŲß½ /ķ\7ęzŖ[pī‰ļĄ/݉ėĪ’',?v ˜»:6槏ߌĮxߤÉŁ †*²3ŻŌ I th8]֟Ūa$]‰¤+Ń=HØŪØ 9sŖc ’®D4ī!ž,ÕѬĢ9ŖRšvĀ+«&ؼP=R5cŖč©g÷jłZ§&Ę”©ū÷„’Š2®’~¶Ÿ%ŲxÄäśŅøL&+ż—¾óæåZ ϶įY––0’ƒ e („d&­…6!KųĘZ Į¾@®ōߣ³’F‚ĮššZģX<6t衖/ž(xāż™QIoÅŠ»ćQuš©o÷ NĖĮīPvÕ7į`Ė1¬o„§Š9’g!%ŒČļÉ `×&DCø¶ŗßE £śv’žXM„ä²³pŲö`rŸą§+ūļīŸĢąéw/ŗn˜åf’Łśo Lr[ZUżĆ÷ž~īZfļ&Ż£ĮUJŁŪVźöėO[µ½Šŗ²Čoż7’S ÷ēü•š’eqTĘC%ĢgBBz(‰—ėŖšÖJ¬«Æhló³ū^°]'°ōL`óSÅĒ8fÉXu@×^ Vbg€-{ą#ĮQį Įµǃqm’žå{ Ÿ<Žą1 ø 遮œłUA\\ŚŖFp°˜;{äõœ6ąa’Ł ›¶ ēŽHž…–-¶ķVeü]W.6ŹĢjŗ{ĖĄ óQuŁXõēWŠ5Š‹žšz$«ė ¦Ėš³š@'' įy„m“V Oz°-i°=Żöq7jæD 6ƒ”Zļ®Ö„ƒD“Q0 ń9½f2R²‚ZĪ^Ö÷×_l8#µĪb£īÓ4āüĻ #5Ȓ ={«tķ |PŗbńҳśÆwĀŅ…e*06 „”»= 2Ś(Į&·Ą†Ńž«™Ś€pYYB3‘Pʑdb£ÉSd˜5yʶ OAF żōī­ŌVÓHMUcŽõŠÉ'Aõ÷CÅPVvó^˜,?Šsü/eOČI(›Ä”v“&Ėe’’I\óŌÉ%z‘e’ņ‚›2‹Q?gpīžˆ&śĒœPŽüÕē}ͧ.>³ēį[÷ڌm{słźĮ6Ī:žb<³ķĻø’…;ŠZ7 ē/æ J«Ņ>„$óK|Ÿ'Cž³ß2”Dlžėv¶ĄéŸ<ÆŃŚ`0ęb0ęĀŒHČFUČBČ9źū&$=‰XR"žp!õt=cؙżĒō=©¼<ĖA¢eQĮõ©Ī!“¾«2$4ü–¾ōŠĘ—’«|é?†„’š„’Ā—ž ‹Ól“ĖĀĻž3³l¤°-iʲŒ„c+¶ö³’,™a˜Čhć’‘=ZY˜küša8#µd& ĀxžpgĢ ŗrpwū¦/ž,|ā—Æ³«fց[[2T°0 IDATz¶żIķ}ä+½Bč'ˆ]į¶74coŪ ō6Õ# CÉœ’³öčgÕlö ;ˆæDūšO·~qX't(…Śt﫮ŷź[ąYćĪBSeמgāl[śÆ¼1­ėž~cē{’ŠRµé¶XqŚ+¹Ē¾ē¤÷¼æś-ߨŻ0š‘óR©š³µ Ģz°*tųŚĻŸ“ģįlūĻR[’'’ŸCeųæóæ,ŽšæÓ„X¼ ęµg`ĀÕš:zńP„ŅlEڼvķšēų’ēĆąš^ ±€B1ÖWZĄąŁ" JżAŃP^8ā’"Œ!ü ›Ŗd&pęl|‚&Q.bŪĄąŠČė“ T…żŸ»z}ß¹-;Fö|Ļ€,óž}lš¦ąÆóÉ+±ōž§°±æ]µ ˆ4 ]Š Kš§j˜Qkń|!ķw4I Šī­žŁ¹±õkEó@Ę Ö¦>{Yļ]v]*Į”ūkKFCž8¾LN¢¶ ½ĀĘ­©ž5 ‚Vfų˜®‘ć{÷…>ą„ųT`6=ż]ö¬Öcåė–”ÖŲÆ•–ŒŚ Wæ@ŪĀę ߐ™4i0dRŅ&&"ÉŅp@ĻĆdĄĘha1 –,Śś²õŽo%ĒŻв9ż4ĞX“yXųksü/é˜JŒ³’ [ ņ_tži ’“čr0ž1„°Č҇®8łĻĮ»Ī¼Ńx?{õcNØłĻŁązi<±é~ź}½„yF_³cpłźbÓŽ°³}l%ßܖE8eį[1ļÅmś:śż?ŗ]ƒ‡°iß ™qŽpą©"nļ•"’Ż» Čö#’³:ąÕÄ:Ō–S{T“Jc0–Ę`, [0Ā! ‘ …cWÄ÷ņ‚҉“D"é!‘–PÓFś}˜pr^tu©–oˆk9ZŒżĢO!ń‹õJK0Œ eˆ?|éæ&†"2 éĖżÉƒ/żwI°K r™ŁeÖ3yB˜aéæ°!…0’H!,ŎOžµ„Cl²ĘYénö?_śģŽ”dĖB!VŖ5”hV¦Ļóŗ¶^’¹‡—żĒ‡õ‹š§ūö–‚Ž—)>õ?½Ā2v»BaŽZÓØw·ĢDg}āįFHiĮˆ³’†ŠÜS.B×)įSŸCõśĒpirgÉę2#ŚŲ†Ļ|č³xؔģVž?ÕŚ’XqĀ×ļŲśÄ_śRs?q(z꣒öoCŲé»õ#§\~÷1”†Gŗléæ ž_õ/÷ø'”™»Ŗ¦»‚½’¦ŅśÆ¼YĶ’²8j•B!3Ąu3`źšįݳüó5ų¢%&ō¾†°YDįõāƒÅĻėmžņėāūĒŪW vģ‡īģŐe”Ļč T!ÖRץC0€‹Ń*€1˜@PćĄ4¹×ńöɬqõIĄnńkü™g^Ī:Õß7¶ļ~œwr³ūį ÷8żDŌĢiÅüĆQŠąpC±Śx…2÷£ 3€ņ sǵa”8·+€ē°Ńæ½eQ’®†oMudéĶ-‹ŗæÖ“(~ĄąjfĪyŒŌ~“Fł%R²dˆƒ€åJ£… ®-Õ'ō|P¦y0]5Ķź×³–ŵméiŠH)A¾ Ąó‹Ef{6d"öP Ć£TĤF É2&ą±4lȳ,²!Ibm³T$Ł’$ŠĢŹĶĀ&Ļ-L<•ėvo°Ļ?ī”ü»ÉÕU­8‰_ž)Ÿł/‹”—N K_JŁĒJ‘’‰ī]„Č)ļQ™c”ŗ˜²ēEų¦@žKų½¾žüʒY+ŠŽæĻo Ļl’³ļ%p¤Čä“’\Čź!ÄĒ<Ü»·¾X±,xJ+ˆ”€@Šń•AGÕ„5R®BŹUH¤%Ņīź9ĄŖ­rV?ĄGĶó{A$… Vܗ¼o³–‡D>łgæī̆X‚ ‰Éó]’‘qż‡—#ż÷XŒH’-&iŁ#ҲXŚĀ(8F ĮJ 2ĆĘ9Ņ’|ćæ|é?r¤’Yņ/„„ ±+cZŚBq]P1~é¦„ēżŻ;j\zč±7Snūæ9Õ»ćį^į ÓqxWØ [kėõö¶Ł8Ō2±†&’™37—5Qö?VžĄ³`N\ƒĮOĘ/ü2’Dµ’ł˜löšŖŚÕ?®>n€u?Ūšē{‡Ī¼!–nžļļ=óÜDģg'·üų¶w.żĒž\ó?Ą'’Č!’otėæs¦`ž÷fĮ›"PN@!“͇i˜µo÷į‘YĶxg©ē†«ƒÓdā7<ń’Ä$ĒAomā sįåFēņUcZćŖćZŒ ™Qž5qĒĢ.9øžs@C-P_œ•éī kV’ņÉqØšƒ3pĶ…Xü_`ūŠźūŠ__‹4׳‘ŲBA ·-`£J2(V PHi-M G"",µ R…GVE€<€€H)£‚bųO+Œ2„ „ŠFų†€–gŒZ 0;¶„]e m ‹X£ ŚŲFeK“Ml3‘’$„ežaB£Yī<|HĻmhįÅĶsņßWū˜YōōĀŻ»w¼· &Cž‹ŸXę)•"’e‘ņbóT€ü—°·bŽ’!Ė%’²nĖt’ G/s ćŖ3oľ®]xaūœ4Ž EÖWāū\ŹaÕ”:\xņUxzėŸpxąą˜y–Ķ=‹Ś–įWO~sÕĆnjPę{Ÿ’ÖU=€Em'ā’•ļƙĒ_Œ’łćK•ńM ł/ėŽŽĄ°F²­^ķ ‚mÉŹEʍ1H¤$)9¼„€-p[ ` 8–æ|Jj×S™IWĀ““VśNŗ.9·ŪÆõ?Šƒ#ąF‘®i+¼oC‡qŸ? rZži ¬óæ"Ć ™–Yé?ܳłpć²ϰ"MG“]uōąz½’ńo „ö÷Ł6µ;AŚŒ`G}ķjžö¶Yljk +•ż/t~>¦3ū?>qü…»ŅüĖo7ŽvĖꎫÆM«ŚŸ;ōéO½Üł±_ĪlxłÖėĪzĖ®PNš ‚É’ioż—/ēüüf’GY`ŗŹ>¶ śµ”v¾ŠŌ#/ć¶\„ĖˆŠ_{ØPŠ0Ó7ł;\ą¹āDWĢ_Ö£Ÿz„Īp½5uH†#ŠYĒJ˜ UyČŖ¼ŒüF-Ž6•µöW]œ{ʈüš€īž©Œ<9œ» Ķ_łšÓC؏EЧ1ä((1k~[Ą©™Ö~@N”cėŒOĆĶNŲ»oö[wžo;`ūҤįū`­}“ĄÜē±\€ąąęš›HPsšąē ļ:óz“ŌĪD×`;Önz½Ńņ]k+GžĒ¾Ļ—­¾¾ō«1ó0 ¼ó“ė°ēšV<³ķφż»×9p°ķą+xf۟ńŁ+nĮ„«®ĮƟž^ńė)eĻ~?Źłv‘$ā ^‡3X §£,+oģg¤<…”7:³n †m1,Į°,’g[˜Ģ !Źūž3ĘĻę+m µ§4¤Ō𔁔®TÓ.ēŸpArvtc&t”“e‘h)Ü„YõÄLņī2S÷?ÜņĻų‚"bI I€/żgņFf]’…e\ģ²W°‘žŪü½}ėŹ'€Bp$Z’‡s¦Éüļh’’GY`½C‡±ūšfĢm^4įz'Śæjž[°Æ{;z‡Št$+…ü—ś"·nnMĮ®fŲ½ =żĢŌSž?é«"sļ‰ż+Ծϼ_l®_x~·(4–†šÕŁŚ?ņ1:ŹÉæaxė*@%]…ÄĻ_V:­ ü@żpĖ?0+"(0 ‚„Åžßī’,v‰į2ˆ]fdj’ٵ\Ė&ĻTTśoéQŅ£!éBŅ’1ْ̾\é>lb Hč*ašf†āʁ¶Āäu·§½ŪæÓ7øå— k–|ą”ŚĪN¤¢€ō`»é|łéīm÷EYĖ~ǦnįŠ`{«k±Æ¦‰ŚgĶāīŖfoŖóÉæ°FK’æŽģŠ…éĻ{¶_^ū£Ōņs~ōŻļoZ÷Ēż‡Ļś- × Ęg’šóģŲžÅ·Ł£J§»õßß²ł_G]`ŗTmóaŽ=ņĄv ŻõžĻMļĮ™ŽUŲ `ó“Ąė€tPS0›¼Žżų‹č%ĘaĖĀ~;ŒĪŚV 5̓ żąMVĻŸƒ¹Ž@a=Y `N_ |āó~9Ą¬VąŅ·łŁ’ź*ą‚·ß½ųōõž±/¼ ¬”µ4h :óy †IkP ˆ l&ć鑀@)([ X)C˜\?€B„°5±²&2‚Fu°HŚDlŲhĶ‚!Œ!OY`9˜ˆźµ;7Š [™’”Ļ‘0B«OAā™ēüS%‘åńærJśBŖł/eO%2ņ(!ū_)ņ?‰‡ēi!’EēoĆD'•ž.,¾ęÉN ćmĖÆ@Cu3¶x·=ōu$Ż8@ĄĆ/’7^ōĻøž‚Ļįß~~-<•D›ˆü—‚2Č?œ±äB(­°öµūǓødåū°~ĻSŲŪ•×1ŠJXMÕmč‹uēo.åÅ0«[qĶŁ7aķęūp’K?/8OįéĖ’}że§‘šqé¦^8= ō4ś ū „Ö` ³FPy~„`„†j€œŁˆœNG9ł‰¦PNøąīų6+Ł× 6]÷_ØåŸG0˜%1¹Lp…šĶ’Ų—ž{l‘ˤŠ“ ±Ī>wŲ̙ ` 2v˜ŃŠJŲa–‘H‚<Ōß;ŠŪüƒ}n;&tĢłKj=wVøuY„-gRļŖLš×Ÿ’}ŪJF¾eÖQ›ŃgŃé8t(T…ÕĶV{S+w7“ŖśZ/YUė×ü Ėφ©ģæķĮ Ł’|„«`®[óÖŻæ|įīĖvv\ł‡mOė¹#Ž_„f’[eńk›JėæRš×żŽĀĄx˜Š ąc« ;ö€¶>Ōž—°{Ć.ܹz >^ģüD“2k®$“~|/bĘ Gģ·쯭GWSõMPĮ°’ †a¦Ŗ.hĮ,™Źz»z€DxŪ™ĄŒ`ĒąŸīü6ŠŚ|īćĄĶ·—|Ä'ż+OiXS “åł¹Īž„*PÕµdjyµnUr–Œƒ ’ø2”! *S «ŠRj!|{jāĢw¦„lŅ2Óę0^š“S )A*Ą{_l¼,Öü8Œß¼iNß9EĻZv¬lĄ`A&«²ßÓߗäÖL†„¤ü¶€¹„ŚöM?Ź–аĄx„l“†1ʶ‰¤"!ˆ¤V&lŒfaĄĘ³&avvµĖ™µõ։móóļ³ÕҌąŅ摦¼ÅßP)ņ_B&0÷ÅdČIĒ”MŹ‹ s49žOōUŠüWBK?ŠˆM’ü7xĮy&>¼č¦œk®Õā¢UļA{ß>|’_EŚKĻ£“Ä/ü_xß’Åü¶„Ų~pC‘A‹ėIߌāDø­~z¢H¦cc޹ąä«r"øļ…Ū'µąĪÖŗŁhk˜‹Ē_ūCīę"Ÿ/_õA¤¼Żxwɋ˜2łĻ±$Ņ3ŗą5 Ąéj„ÓW÷†Žt rĘTیš®o¦;˜¬› ·Ŗ©ą>÷Ł}Ś{é€ĪÖż“ü©ūGVśĻ,‰H“d6.•čŻcč$1† °E=A‡#čDLg}‹ÕS?“ėše¼”Ž\PŽU8‹ŸFyŁ’|ņģłÉü­…q$³’Š_d{¶Ń× +Ž}čßG·ļšźĻ~ėÜŠM¹”ŲR²’sNžPWŅüļĖ9?晲’Ą›,0JUĢYÆē¢·ŻŸĪjš™M8éH­qŖøg-ܝŠ#‡„ƒ=Ō5a ~.¼šśāR”rUnäy š ”•ˆ½ųāMĄ±³ż×gÆ\ųććĄuWĒß_kVų’rńŁMe5#Xx ĀZ£Jy'RD%8Ø@ć*¦”`xl†©™Õ»³wCÜK٧Įónõ{<Ų9Żļ,©““k ŚūJėŁ±®šG¢¹Ą–Ž]Żģž|īŹž'5“qµļ `1 @ŠŚ¤[–š[’ß‘€,ģĄh×'ļ*«Ą+P ĀFЬż `† ˆŒ6†˜83ŽČ)°@Z[†³„ŽĒŹ0ȵ,m„”q"²Ą0Z² ¶fc1£b†!–kwmSį:ŃVې?Å ”bCšöµ}2äæų‰e<%[üäi#’„N&Ų[1ÓæI1žbʾw•"’•ųȕIžąŅÕ@Šįē}Ė'’yˆfdö‘@Ī_ˆ‰š„˜( Q`ēžī]X>o Ī]vžŁö'¤„ļ]iĀy'½ė6?0VvŸ©ū'",œqĶ\‹mtĄkū_D"LxŪ²+Kbżž'ĒLÜģ“ńÖ„—£„vā=xnē£xy÷_FĖÖ 8¶yVĢ;æ{ž‡Hŗ‰nĀäČ’ÄĒ“ķ!5«éÖ8żµpz@Ž_Ķ毓Ą<Øż-ŃāĪžGy$Ą Õ!UwLĮ}ņĄ€IÜæE ׿S”ŗ(bHdėž¹DĘ%"OŲ䒀KÄ N †k»¾é<['„‘Ā’,#mĮІ„’Z[‚u!éæ„ÉxicHI_ī/“ĘīH¬h‹™9­Ś ‡%ģ Œ!¦tŠŌPŅÖūŗj¬ –å)Ė" 9žĶZ ‹“d-p€ŒÅ¤«j‹“ķ„U}£Nö7¦āż½Nß@wņptŠŖ‹ĒTC:śBCßįēj„4ÕZ›ˆŃc°’ ‚Ÿ±U$3\b$$,ęØpа©×‰PoU˜z«jØæŗ•¢ 39Q_K®å$į*'‡Äēg’ǃ%a¼ Jc‡³’ŁsŽ¢ģƒ Ż Æ£Æ>ßyG]`’mŸ=sń“łĪ’`ŅZZK²ä??ūŸÅĮB‹`ŗĶ’&•żŸģdӌ£ņ/ÄdŹ ”ˆ @µļF26ˆ®ŻÆ}öųA8€1¦bG^Ū }÷£čaF»°±+ĮžŚFž?±Ę6Člö?‹©Ŗ ĄĢÉ®Wk`ßĮņŸEKŠŃ5ŁQ+ƒY-p“FHzĖ‘¹š¹;0>i.€Oš‹Éś‰Kr;P(–rĀīļŻXąƒ»Ÿ_šīgķæČØ<‘)ˆ9N÷KM&śBļՒŪzguSņö™«zžr˜ŒfįĒõ™ 2Yü\A«@ ·@»žõh&ĆJ²c) ’4Äp¹|Aę^1 ōHĄņŒ‘¬ak²]±²Óšˆ™ $;IĆʰ¶ k¶–0Ģ0¬Śŗžß»ņLŠ8”ü{\~Ttz`lķš0¦ÅōÆŅģā„a2_#’“P*”r̘ürY¤¼Ų1 ’„2%ņŸZØČ½}PkŻ,œ}āÅx|ć}Ų{xĒš8¹G5gÜĆcs7s[Ɠ.ŗŪżÖye­„hˆhÜÓŻp‚v—­¾ ƒ'6ŻøüŌĮ“.žōŹoņ†óéuĄįś·ż–³ żū1”ĄYKߎ÷žõwxnĒ£Ų“ļyœ¶ų<Ü’āJƂ‰ń®5Å[–^ŠŽž}Ųzp=«[šĮ·|«ęæ?~ģ£Ś¾cõu莶ć™m—{i„J*ļ}6–Dŗ¹^S?ģ¾ZŲ}õąd ČÉ›Š5 ؖØĘ8ügłŃ÷ĘüptBŁAÄ[üĀ0 É_¾¢Œ„ĆÆū§Bu’ł-’(ŪņĻ%"W0ylĮµlø,ČeĖxBĄ—ž #-‡=&’¶€‚c)+`”/żēQŅ!Hg āiĶCéÖź÷‚“SźŲåŅ4ž (< `ŸäßĢėnhIr؃“‡·9ƒ;6Öxz%ätĀģEŖ^ ŠeŠR±v‚¬œ ”®f¬‰x MéDo# %bśpoæŖŠ xUÉ!Yå¹Ŗ*FDI6R;ŚĄŃŚŠ€dON1›„åpĢv( éh BŃŖ;Vץń@JÕ֓Ø!E–«X»j¼Śü‰²’^¾‘ß›4ū’WÖ_(uą2‹c·#ŁH5§‚9æ'÷ÜB­’†_æY[’…ņą( Œ‡rŹ ”m>Ģ¢•šŗ1Ų¾›ł0¾ö”·ć+;?ĘuōąPĢ·~…>ĢŲm±#T‹Ēb f)ܦ*ØA`Ü(FI*€G)A\še@A0ū’bq *gÜǟ>xådG­ ŖB`£P AWĀQ¬õč?÷–ä“dä« a¼®3Vģ»ķą³ –'ū#ŸŁńČĀ%Õͱ‡CµéO‰@¼?²0 ¬–I~‹1T lémÕ­‰ŪgÆź{Ę'å4Ü!€ŒQ>įĻfń-‹“”#d5ŒĪyĢɖ.Čm ˜°ʓŠ„"M™ Ąp)@VȖ£ 1["S  GJ ‘ 6&Ҷ`Ėh6$˜”aĻdŒ§…f“rćņOŪ^µ®Xv‰ŃI„O]ųŗu0iw’d¹”ƒFæØģ·¶¦ēžjk¬dmH¤¬įUU i٤-›uµ ķ,ض\) 7õ©”Į„K8¶›ŠTRŅqš<ŲZ+ ¤üe"hfxŽ„Ó"@n(LÉ@ÄN‡ƒ:Y]Kn(̱§5¬ģjhø.˜|„C.ņ³’ć‘’éČžē’’#•ż€Įōģ›{ėž×š•Æęf’CLÕ¬>óŽå_»¬6ø6ÆŁćäń’·ž+Gm`:[@o;Rń(zŸŚŒµ‘0¾sõŪš’.Ėćˆ oę?ĆĄP–…]N[ĀUŲŻ4 Żó–"ŁŠÕŠŻ—Ę‡Ó²U€’ķ`łž"6I,¹ ųō—«/óŻž’“X8X³r*£N‘Ų¶1p“ K„Ąa@g3öć!·ĄĶ „—ärUN(–šsŚöOvlš’A7ę\Ž{ ž2ŒV±ČŅ›ėŚ’?¹āšó®i p΃ke4 "Ć Č i·ą;źJm(Kź³~ŁRH+£ #§å_60ņ·ĒĻłēņK€†-‚å# ČŅ0ģ&ĻY0ŽG ą‹’IAil$YÄĘ61-, 6‚Xw ōØ'wo¶ĪYølĢ{!|ź©H<żLÖ”*ē&Ž’ÕrÄ’KŁS‰Œ|)(›Ä! “Č`OŠüO⚧…üOjā;Š’åńĒ™ˆü/šu"Nžæ÷<ó¤½TĮylacĶń`ÓŽąIwĢūü•»ž‘`–³—®žNšwnžŻg0TĄāė™˜üēBåųf7ÕĢĄĮžŻxr˃9'Œœ±°ķD,?v xńŽaņR{Ų°÷Y$ŅCøéүしī„TŽš\g.¹kŽ»÷¾ų3<¶ńžQ«ŲÕ¹’~׍p„ļ,øbõG°«s36ķ~üÅg0£ötGŪ”G…\ĒĒdÉž LCµuĮŃ15X +ZuDŗ¼” Ŗ!Õ0]›ÄDĻēoņo@ˆ·,‚² ›ž%ÜŖå®C$LFīÆMĮŗ’ ł÷ėž=‚ńˆ|ĆælĖ?ĖbW°öŲ²ł/’żĒd²’łóSĶžæŌÓ5 Æé ›ūŽuēāĘ?~ūK®>˜ėÓŽł=mv02` e’sŁ’‘Čž‡sž?ö¾;Ģź\’żĪ93’¶{×»ėuļøŪøPvĄ”ćH~”Ą% 7¤Ą %IHZڽ”$„@č½7Ą`܍ ¶×e]¶wM9ēüži5Ņj%­¬5ö½yŸĒWsźŒFҼ_yæ¾ņžgµ›C‡ĆŚ€H>q²¦\DP,«Z-߄×wķEć·æ‚o„äŅŖ} ­7–ĮłŪĖØwö2Ž­†uĮ>.€mc”nŲ8„‡…8CcĪ£jĖAfŅĘGZ=€÷Ał£zB²T€ØG?›T?„AʵÅp2ä'…eķ:³f)ąé2˜!h;2Žu\C(@s®¾æL`4 €ŸßobzÉR€xA@ – Ą|RĢ&ķ޼‘<:@J€{?{ ¤”‹¦’š™\Įќ4sHČ֐\¹‚i"!5¹š“Pš‘ęLkÅ]MžcŒ3Éä+ÖŠłÓŽ„Ā@7Q@sü8Čö6ø5{Sæ±Y{°{7GNņžłĻ 5gŠ’9!ː’^]–¾ ’½š>fIž7°`Ī%€»VõøŠ©ÓĻCEń@ÜóĀMé÷G޼ѰźÓw‘™¼Gš„‡ö…%^MŗNZP÷Č„ÜnøĄ°ņ18mŚ×°nē‡Ųŗw}ܦ?/,’ ŚzP§õĻü)ē!häį問vė3¢bö4ģš¢|xöƒį(ĶõiĪ'īæśōšłK=sŠu€†ŹĆĪUu€"šĪ x{X{¼3²Ó$%hč€ėž‚NČĀNč<šŠÜČģ+&±%?|ŲĮĶ+A{yroŠj±Šžšr©ü¢Ģ'śH"øš˜ żw‰iHČūg‘¼ĪlĮ`{9’p8×ēä ‡sķ’ — įr®•ĮHĮŌŅąLsč˜X±Ółśu’ŠĘ|—”ˆ˜Qqü‰nŽŠQŪ·Üž?ż;Ŗ7vvčĘ~å”¶¼8BjbāTŽv e“²mœSi—mFI¾mĒ}ž:9騇ܕ¶ęˆ÷ī'¢·e’’į`¼’Ń>ž×“ūÕ¬iųćŖÅŸ6w½~ŻžóVÜ\׳ōŠā÷ļüęōĻo€;ł ✌Œé+ļ&hķ#ļJĘį’ĄįnČ™D1#@kĀź‰ ÷5@Žü šĻŸ‹óēĻĘńĮĄ”»Fūź z ķk6”–1ģ[…‰ lģWŽ#†£¾ņt ™WŻŃ޹Œąt»…š>8ĶĻ;j (pHę•ĀьdzZŠT€”Ž:ēӛŒ@Ųa •Įe Śķt ¦ @«Č{ĒIvȈĄ·ž? €8“)÷ē±T€ˆ‘‘ruL$0*(xQ4¾žqFW‡2”™M€©@Њ4Še,` „B€čŌĢeR@Ą`Ņr`(Ąa0†&¹Ž#‰”3“v4'ŅŠÄ5cJ+&8¦5g*l“ūņś•Ę—¦Ī†™Æ@@pś4t†Ć É+Ōq¢i×é=łĻŖO–sPbC.¶Ū'¢™m$+ņŸ‹'ä&łüŌs*B}Ė~4¶×%ŻĪ€~CpŚ1`ÅÖ%ųd÷ź;½˜5vcųpĖĀø¾U„C1sĢI(ÉļĶ{°lÓŪhnÆļ>#ˆļœq X²į՜ųx×r3źD,Żš “x?_ĻĄ×ē]Ę/|ųH\’S¾V–l|µ‡ubö+(ĒIĻĘ¢ /ʕŠo̼ ćMĒ¢ /ā¹åEŒ¼Į;j7eü:hņß«uzčĢ5dA'dAĢĶH’wĄ:ƒ`– Ų˜m€Y rėąÕBB›Ž÷/čB‡lØP*ä, Gś?@ž„B[Eņģeķ*tüm„+›m"æčŸŒˆžyƒIÄņžbä0®mbĢbœY̟÷ϕ͸°9EJž īLę’`®ĮµWņĻdRsR‚C1ƒė=mĒ ßć^p³¦@ņ…CQ0d›ų«ėöÆ»ćį¶ÖåŲ­ė78ŌZR*l(¦\ķųŻńv|ø&WŽö§Įj¢®›ÆĶóžĒśJhWZŚ?]Ŗ²‰ä?éžÓx’“Uš#—Ž3m%ĢQ$öØėgŽzĶź,zżžõ«Nmézͧ ó>üńŪį†,ūå·fĻŻ $ĻżĻµ÷泏CšSy’Ōšą0ōUIĄ¹€^PÄ „¹@=ū²©֓’BŪ¢UX}ĮpĪō£0œ³¾ū‰hļ^~֋‹Ń`;Øc»ĒV#€O‚łų“tvšˆĘ‘®Y€noå•Ęrņ€= Ų>>9ūJĖVŪŖ!gĒ?Ė(,\ģŚ Ģ ß¶č`wwü„™^uƒĮęp p8ąƒyč&w(x(RüŃ.£ĶVžŠæćĄ0b“ĒGĄš>ĘÉ¢¢‚€Ą Rp\!’¦^H\4€»ŹäšE¢ ʤV*.‚-.Ą•€ąŽÅtH3Ć ģž ą\CSW*1˜ e3†“¤„VD$¤Žk€ČŃ NŹ•ab‚+¦5˜&b `ܛ‚»µmMö›×šgŽ›†ˆaÄ9B³ŽAĒāw”:āƒ[™č_®ČNˆc‡2`éIyO‡zIžÓ’›¾ ’Y^č,ŽēLē‰ß^ņI n`ž“/įŁwĘÄį3PVX¶Ä÷&.=åtX­xb黎å•ā¤IgbDåQŠZcOżv|°åŌŌļĆü£æŒõÕ¢¶9fž5v.žwš;q i¦ ŸƒS§‡,~Ė·,ź¶ł™€į叞Žū+œāFxnŁ#(+€æ|¶īū…”b4w4 dęaéĘ×°æ)VQŗ$æ ‡ĢĄ›kŸ†å$‰©M –gNæ–Ó‰7×<Čāōé_ĆńćNƎ›šŪ—ÆGuķęČBI~4µ×e| õ9łĻhŽs3 $~?¹p9˜+@.$÷ŽĮ3:–R@o=×^e!=ĀoHh.” Ä#Ļł½0`fvźG&ł×ÜD[Õų䊒Z£ćńÕŅ©nH%śēRÄó(łēäi‡ˆ9\Ą!‚Ó-ļ_ĄŽĮÉóśsęšD.ēJĀäR(RņO»‚HļlżĀ„}ī9?Ö$’«~`fa^ĮԿٓā7!§zéҰ”–’Ra›‘G&I›¤ģHöēŠ\¶mt…ų»a[ĒžļæNżĪż;ŃūŸˆDļ2rļ¤žKōžgRöÆ7Ž’V=)’B-ś×Ēz„xåī6Ī©ouӶ֓–ŻōŽõFEĮ'æ¼bŽŌ5€ēżŽ9œ¼’sūØōßį,žÅaoH…ޤ¤BŌPXŠšŹ·Š°sœÖtÖµ”ł·c×°rL=ėœ4cĶÜU hh†~k9¬WßEcGMŒaŸŲÅ l3ŲRPˆźā*3-#'ĀŖé}aÕčćA®¢„€^¹›O™ršēłŹ;ĄŗO€‰c'^>Ž\yq¬ż–ßzÜqĀhą[7÷Ż Œéµ]ū  °7 xž  “0©'Ļ ±a;,0؜!l`sŃŻ²ųY¤ų+HļGjĄg|ŠF˜!”ķ ,†!¤#5śū*ÄÕĒó \x©~•’Ø€Œ(żs×Sł‚“ŚuyO‚€@&““AФŌRJЦ€L:Ž"©A\+MÓ¦eˆ -5#’P05#hE0‰Č&r bŠiāšH+EŠƒH¹Ä#Ij{ķ>¹4š ’ÜØń‰ļ‚w,:–,…¶<›vFϹ ’™“dI »uÉ"O8+ņŸÅĆsŸ’×Iu Ż ¤%åLNc8IG:øķń³†00Ś—±¾z¹§šĻ’SoÄ ²įø÷Å£µĆSó^q¾{Ö­€UŪŽEŲīÄøĮGcž“/ćć+°·q'*Šā/oĒšJ +pįÜļał–…xlŃżŹ…ĮMœwĀøōäk”µĘG[Ēm¾©½7žķbtXm½ō`§ō]#ģtąWoFUæaØ,„š†]5#+ĒćµUĒ­3yų„„zšžūÖŅ4fŒ:O¾÷G8ŅĀ܉ēąŌ£/@»Õ‚‡ß¹k«—łĘņ…ųįļĮk«ŸĄ¢ /¤9§CDžūȰ„…  ;®O6††)ĻłO»Nśe>S0ŽÖŖqP"˜“¹óµMŹ^»WøŅ„)<āß%śI .ˆ€\bŚ3fƒÅˆ¬®¼Ö=ļ†v¹Į)łg ¾’„šš Ć÷¹ēüčp"’Q0‘g–Ģøö¢ŗ÷š„ܾī0„Ń,Ź…ā’“YL*źż’vŪŽ×’šēśG„’¼–žDų/1׿/Ėž@bčæi…¼²šž'"SłƒŁć—8ū7K>=¹Į~ŪŽę) ž‚õReńĘß\uÜŃk Š 4ļ"nõż}${’#Đ«’€=E±t€²°Ž{jŪ8ĶŪŃĪŪѰ§ūx›/`ä‰GcŚōq>zŠņC½7©o‚^’)œw× cķV4j •j™Ą^αS؆P]\Ž}„Uh;CĒĀ)Ķikå;¹š—€—×”ę;_Ą¾ü R«=„ĮY'{’ą¤9Ą߉vÕÕ{€Gīņ~ó«*‡ž~żC`Ėv/:ā¾_[p0»š¶÷Ö¢ƒL Ca&¤av’‚a ŚO¾³Iˆ3D*Ąąxž­¤†ć8`  `h×ņBū NžĄuģŹõ‡fJĀą:>µ~­@š«ü3­“Žz/¬ßwˆ”t½H `0h'’ @¦'ōē±/ĪII€łFˆ¹N§RƒHA3ƒĄ%”ÖšL‡$ ĄVPœČu5DfD€„fš83,Å]”s‰8c \‘\½§Z—åˆ ŗiy°ü<„ęxåɕŽųِ’Œū¤’ ņßėu‚ü'z Ó.œķ:9x’#bY’’T“']'}÷„9ē¦Žz€„^Ć OĆēŻƒw7¼Į |nŅéČįOÆŻ†-5^N|^ ’yʏŃi·ćĪg®CKGc×ĀK‡į¬™┩ēbÅÖÅŲq`s×:Ē?Žkć‰%€Œäß;ŅĘc‹īG~ Ć*Ęā£OwŪ_ÆÉ&Ż"{«±·±pģQóń暧c% #}FTŒĆž¦]hJ–›Ÿš}qÖeŲ]æ Mķuøį‹÷”¤ ?ž_žŽŪō¤’¾aŽØS¾œq¬Ž±4ķÉōŪ‹ĻaJóIÖd¹»1ļ Hy&čõ:i?هˆŠV9Ņ,HŚlÆŲ­­w>õž2Z3æāæ_ō¹ øD䥿sˆ‘Ķ6㑲\Ū\0‹sX‰y’A6ē䒩]ā$Įµ29I-“āDŗYN,«‘_½Y“H¾ŃĆL䛄3rį%WY|Ē^mh©$ é²~Ā?Ż†žGIævœ®gC;AųOē@ųļ`Ėž“?\µ/½’·\z»ś'Ē]7kĢ[Ńvæņ×}nŌŪ»:O^ōą²§¾–%7×4N=ūGÆYÆ÷Ėßyūwgł(ł™ō zSś/™÷’[é??Ž@*ä* šŒC€Sü>ŚjĖąŌlGGķ>4Śa쓪ßü[ŽųU TŽ”£¢¢¢E•„†Į(h‚uXŠį0tK'ŌŽZø{ėaoށŽ=µhŠĪZˆŠ@ µœcÆ0°'@Ma1ö• iä4“ {ųĻ6%’Qä: 1@І YۈUłU8ż .kŠ =M8Æv=šÖRą Ÿ‹=Ėž4ųåżŽßaŪėŸK¼·ŅrŠĪ tä XĀ€ņT^ć yˆC·kPo¢SāąKHL1ˆFhriƒ¢¹·•‚†ć"F×ua†DW*"©¤$4óēöūĖzó’Ž Fóüżz@D€i–,@iRŠŚ×?i*€øć‰Ž ‡R,©€1R '0øP`6#ƒC¦é’+)Sué0hā‚1(Eši¦˜āŒqhę¾½y#+ …Ųāž‰o/)AhśtX}Ō­¤XĻȞɵÆD’Ž3 s&ƒĀę][ńöG‹a9)”°3Y'ƒÖœ‰že=GźĶōŚŠ+ņŸ¹ć²WzKžż°œ0ī|ę:œ{ģe8ż˜Æ‚1†«Wą„åbӞ®Nšt&ŠB%øćékāČ?Ō4T£¦”‡ĶÄs „’*JbǁͰŻī~¢ß¼Źg[Ķ äćčĒįżMoŚgsĶš}Ά¼½š”oæ¾ C%hlOOž' …Ń&”¾u?Ī}9¤r±§~;–l|9a˜7Ŗ¼h ŽwŽZūš;ā3`ĒžŽmū7z)aŲJOŹ»w>(ņŸnņnė¤ļŽćį £—²!’™ģå°żGĮ õKŚģnkŠOÆs5˜A{åž|¢×'ś!ż^˜?1ķpN6y"d3¦&„Ć 67asĪ£+ļ_»¦`.˜ĖM’ -9'„“AŪ­KÆÖ$ßčaź—W:ć'_mXņķfĘ]Ē0Ān^Ažƒ6—&©d”’‰Āņ3ž #Ž€NųĻdŽ?łļ­÷ŃĪg7tŽ~ō¦ÅĪ†āą®»®š|ō+FKҵĖĖßvn8»ß½wæQ³½5\y§®eōæ~ž¶óÆāą®ŪoCt– …UX‘“MhCū_?rµ ˆŅ¤ÜŸŠˆžI¤&ęśE’Ą¢y’dgqeē6ćĢā –Į™E–aĀ68sD$ļŸ¹¦ &‹åż!9€WĶE扇öźd`٘ž”qß9§aó=O Ca{Ą`£EŹü%†žwžĖ‹Ż8‡PųÆGļ"2ńžw!æ÷¹’’5sü;’ų©™[šNū~c爒łŁņśOóīüĪģcŸ+1vʗ%ü}Ó¼/üčē²’¼Ż÷pÕy{}xĢõ #^»įēŻü@ŻÆ3æjafg×{üŪūŸGŒ rE$Ą­ŻµįCČO?†µ}#ŚjkŠŲP‹ĒB”ė XI)…"­Q‰Ö0Ą­{¦8DƒŠ)8ډ£%ĄŃb„ŠĢCK~:@xųDX£Ź”&L…l¬!Žj_GōƄū»ēńĪ)SŃ4э@eŠś&ąī’¶ļōˆq­ĻéŅŲüęOĄż#::~ÅĄ]?®» 8c.šÆÜó+¼Ž6ĘŠ"L4 ŃZX ĖžŸTģļ¦ōTqŅHHp0 č0@‘²€ FŠäŗ.D©Ä”™Œ½V ˆO¼”éhĘ] 2¹–6(śƒĒ“Lčo0OD°+ ĮKŒ4ó 'epMR‚q®qʄbPL+NZj#¦`kEŚ&b1.‰M\ƒV$˜+ˆ4)€¹® [ĻÆ]ŗ`ĘL$)(†…ysbS·Éln½¾ż»ł²kqęqóńāŅ×ńūgBSk3ŽŸ2?¼čūųćuwį²Ū¾‡Õ›SĪ‘n[= Ȟˆõ‚üg“NŽČƘNo×éŻ9§]+ ņŸ~RĻ3_VX‰7W=Ż­ĆÅó®†+¼¶ā‰n묫ž'N<#ŒĒ¶}ŃÓ9—VbńƵĻÅČ&Ȓü§Ćŗź1mÄ 8jŠŃŲ“guR{ÜQ_@eń`üö„ˆĄeāR ¼1ŽØć1eŲ±xü½ŗ ž5żbģoŽ…ü`¾uŹOP(ʎńöśgŠŅ™D›sŃæ¾ ’½øč)ŗĘHyę_ ™méČ$’Vфū%W_Ö-ŚüŠURw)žSTåŸy¢ÄÜŃ?›Hیs‹Ś ’gÜā –ą°= ķp—1ęr¦]n Ēpø”% —'äżļ·܎1_<ėē Q<ęģI»·æ¹„®~c[ _u‹˜SY(:į8OśÄėhŪīśļõéįæś¤+ū—ÖūŸ€tŽ’Øšß…æ² ĄuOnüė]ėźĻż~køźŪoæ!Ÿļæū볿ųԐЇn¢ņ?cīöŽŽ²™?ü|Éż.üćŹõćkĒ^ŪšĀ¾ģ.ÆĢÆžž½_µžßŽ’C‹ÜÖo9 ‘‰gnŠ> ĻŗņģĖąœņtž“Mǜ„c§`ēQŲTŁkJĖńQq?¼_P‚÷ņ‹±$Æ‹C…X*ÄāP>åbq~)Ž-,Ēūe•X>`0Ö O¦ĢĎćNĘžĻŸ¦ł”ż” aųܲJčŃ śł,oŃH€(¢)ł4€¼Āųö®(€4ēt”£^’(Ģ “€Ī7 ķŚ·ģĮĀt×°'H |ē&ąóĒŻēåśW–Ēڹnś.šĻb’^~Ų#’0zšŲ½Ą†-Ąµ·e» ƽ¹Æ­L 1` !æmĮ<8"gš qč4AÕ<ņ-'čĀf‰aŸąK“[⚚b?>R:Ś›‡“R±~ŒA»® 8ž€=R.⢻"$?\7īµbׇ)hbšŹįøŅų‹ĪG¤¹ĻBŪWd7X!ĄźĖ”ŌÄH3ߞD€ÉØõ”41„#MšIĆ ƒ$ä S»B0'`hWĀa9ąÜ\ۆж`d3Ī,fĄęN›õÜŚU:ģ&­Å`Ž; ęȑń3!’i${nī%)Lč3uōD|iīYxåż·pĆ~†ūv£µ£ Æ-{’ńĖļAi…®½ł”¼nsüźŠcģQiHl$ vVä?‹‡ō>#’Yœs·†,Hy·C}Bž½®kƑFw“ņé3¾Š1'įՕ£Ćjė¶ĪĘ]+±§~;NŸńU¤zŸĻ™u ĀvŽXõT}ŗļ5{KQĻo­÷båö%Xµ})®˜’c,˜õuTõ ī“L y8mŚW±jūŅ.ņψ£$æ?Śöūf‹ÜįDX0ėRģmډ¶¼·—įåGįčįĒ£¢x0Ę <+¶-ĀŹķ‹1ičl\{ĪļŠæŠ'³“CŃæ”ݲųīIڐŽ”g2}Ī’{Z'‹Į‡vAtö‘“M[.ŚžŠ•–"" ‚Ņ Jƒ<ÅFnLń®9Œ(śÆāĢ&®ķ8Ń?A6ćd3R6ē°„`67™#Lr„€C¦vYŠpøÉū7“bDZ‚cÆó„+€d„ o0.Ø’ō+ē6Õ»ĆėȊś½n^K“R“ŸäūŃf[1ļxD<8Ń£o%üNų/Ż>»Ęō¢ģ_Qņß+ļüŽ’µõßČūéҶ߽øķŽ.·äS.©łł¼Ā¦|hŠÉ;^msÜõūwß_ž‹%.žxßyĄSž_VsKȕę|Ęģ}ѱ×Ģ›“į÷g™— *X5ƒ‘Üā Éó+R“ĶĶ€fåżļķ€ĻGŌ‡7U@o¢ÓR!bA¢‘ GN€Ü¶j_5dĆ~Ų5Õčl<ÖÖ ¦lˆÖfĒs°Øg„€ż Błł%#+!ĖŹ”Ŗ†Bõ+ƒ.ƂĘpߢ»3æźōw ŪŹ+ŒOČ4 © `:”U”šƒoāŃ».Ē™œ÷¾¦O¼<ąäbĒZ|_6åe@C+E(čE|ū&ࣵĄ1YV&øūļhg-B .‡†‚"tåĮ † - -“x߁ƒKˆ"›Ņ€*É–åč@Ąˆ;nŖų(Ę”!IĮu™+Dׯ_01 Z5 čėÄōą»§£é.!„’œĒ‚”åj”€C‘H¦¤–ˆ/Õ' ’®£y2=m32†š\bŠ r ­I+bLkrˆ“¶‚HÄ]Ną’ܦĪfūŏWĪ<‚u»Ķ‰”\īĪ9!’õIGųzčó…Łó÷=õß^ßĆóöšxąéqć%WćÜĻĀ£Æ’³«-ą’ŗĆ«†ā®ĒH±N–ä?Ł˜ÄłrEž³ØrŗOęä?³ĖcņŸį’ِ‚W5`ÅÖÅ8eź¹Ų¶#>Ż»łĮBœ=ėbœ8ń Ō¶ģÅāõ/'ݘÖo­y—Ģū*K{„öś «‹£>‡'ßū3ĀNGÜ<Œ8¦<£L„T.ÖUˆĶ5k“o9åł¤<Ķn/“ÖųĖĀ»0{Ģ)8qĀ˜;qīzįģiŲ8yŹ—2óńҊæu +ÉļĪ8źŪDf‹Ķwōˆć1¼ü(üé͟Aūō ˆ f^ 'Žū=Vl[ŲÕ¶bŪ"\æą^œvōךč’ßfvš¹ŗ·Ó ĶłO÷õ‰ā?%?|ĆĶ+AGł$}ĕ ķ®”ĪžVMÄt¢ā?ŗ)ž#’÷ÆbĢ#‡qXÜ'śG‚Y‚Įę,Ī™Ķ ķpAŽÉµĪ\2µĖ9IʔāœI&…”¤ ŅŪŪćŅ‘śŸˆ¼ŹI„ņg4×/iØ-“šśéĪP¾peÄŠMų//©š_R…ž'C:į? we’€žC’£H%ü—Īū’Zõķß²ež%+ö^éœ=ņśė‚6tcđuž„oŌbĀ7~śĢ¦ūīYSóõo·Łżo{źƒ'nyŽ=ņ,gĪvĒĶ_Ą=qÜĻ_ā•’ož7}Kæ2| ųls’ӕž»Õ÷wJļ’ža€l‘L s“hD±ĄŒČßC€€m¼t_5Ø0»±ŌŅjkI˜§(čÉ­/ƒž¹ĮŻ,žG&k0t`7جūFĆk+,…N¦hS2Õ’—Ģ/„Ŗ ūŻeŲśÉ.,™8sÓLÓ õĶ@YIģus+Šģ³õ,_œ1/õ<ŒSĒ{²1¼óŌ¢•h6Ø3Ų_XŒ†āRtнü. įĘĪ’pHpąå’ƒ"ZÄ8i%59šl‘(B ˜ī‹ €)ņ)ö+†.@ŻR€©Obp y4@G‘†ÖēāŖDąęQMĮ\Õe0#Aš+(Ėč A@yzLWK— l 2ą’£]¢€J“fšóDÕŽęūMŒÓĒM¢D©|‚S&£Ó¶ ÷ļL†ƒ"±=Ī„ü@ei9¤’Ų½æ&©ā’sK^A{øo“Ź*ąHįNüžšß`źč‰øģ¶ļ¢¾Łrœ+ņO)_f†,É’Į‘åƒ ’yrBž3x²!’~<¾č÷8ļsßĀUg߆°Ó ĖīÄśĖϽ’\éö8zÅÖ„X0ūRĢ|žXśĒnsiĪ ¶¹ļnx-n‚ŠāøüÆa]Ė^h Ģ›¼kw,Ćßża»£Ū\éN8ņ…Ö˶¼‰¶¼ Īx—¢I^ęMZ€%_ö4"CūVź[÷ő! œ5żblŖYƒ{VĘ­1yčŒØ××<¶-ŒŪE[øŪlĀ’”‘-ęΰÕĶų–Į<½ŗĖrAž3ĮA’ģ=“p‚Eh«—üż×@ūS뤻©ÖWī/¦ųÆ#Š’Ä ę ^ńß&F6氈"Ź’BŪL0‹3ŲĢą6'Ų†ĒąÜį\»ąŽ`Ģ1ø–d )ZrŠ‘W3j¢cæ|čÆRnQ2ékSkŽZø±©AŲ_'[‚eĢ2L®BŹ‘~ņ+}Q®“µNśļG:ļ€ ĀŻFÅ£·e’:•N żOężO%üÄ{’ߌ}KI§Ūļ{yFćÆ:œ’«^÷֟®™~ŹęDÉ×/õ½†‹f|ļ/ļśŃo—¬»jå–œćŹą FīĪ!„ļ_6{Ą}*dHžÓ‘åė4µ¶€3Žž%„ØmźžKŻŽŁēæų³.Ä„g|k1Ø| n}šv¬żtCśżłfAž“6ä„,g@ž3w(öÜł Č/¼9"’™\Ūd/ü‡miįļ ļĆ?—ž …Įb4“ÕāŅ“ÆĮ¶ż±zū{]’-%•‹µ;–aźšc»¦ŸƒŃUńē×į• ģ"’ƒš_ēü®tš»oÄÖ½žpåQƒ¦ā²“ÆĒ¹³/Ć?–<øT6§™ų"īp“Å_ĪļĉgĮqm¼±&ŽuPZP ­šŚėāę8aÜéčWPŽ‡ŽłuÜō‚ œ=ćģm¬Ę›kŸLŗ‹~łåhīØļń}Īž,łOڧČ’æE’ Ķrš÷‚"hŌµ‘væ÷8<”’Óy’3ő$žÅ’* hĘ­ m«*Ÿ¤/` ööRV ‰ļӗ€TZĮ¼īa?qsCååC *Gxłl~gžķķy ?øģZąš_x)ēćGĒŚ €Ÿ^ |懡U·^üįQÆķ@-šå’®ü1pž•Ą ŹģŖüłYøĖ>F#ćŲ aw~ō+C[Iœø/nį}ń„²īęŌĮčtC=?¤rŗęńēĖ3NšYNĢ2żĆLķ:>oWö/N@@v}Į÷~Ō¢¹ūŒE\ŻųŸ:ĘŠ-ē?śČģ€tA*žŚD¬?E÷/¼qŽŽjøą‚©øó3II åÓ঒Œ“ņō”4s¹”„ĮÉ58 ‡q8#‡˜²‡#L²˜€ĶٌĮÖkwļv–ķü4ÉåqŽąĢYą%„Y=3ö…ā">Žž `śQSÓløēÉ?ałĘÕT>MmĶxw݇½[Jųż~ø.ąKHŌ` Z)Rp%‹¦H<’ Ą“ŌJqh_䂧 ™? +@6ȋ ƽˆčZ&)Ąuź8榖Ģ"‚Ų’‘«‰8”a˜"„“r@œHjEžĶSĮż`ūv‚O4,ń}#!Vn_Œ]u[’®ółIē¢-܌Õ;Ž;>¶j ¾vü÷P(F»ÕŠü@!ŽXūŽZ’t&§•Ecŗ>½ų<§h‘ņ’‹ä?ˆ¶Ŗ P<łcøµ¬Z…_Ūä'’Šˆd„ü»)÷§ą)žc®Ońß!"›d3‚ÅYLĄ‚Y\epms›sęp“9$tLō/Ą\!“49I&9WŠ„‚”ŪyĀfCŽ;ėŖW(¶a`Y šŪ‹QŪR„zös?±’žewUv“©²–Z{ox€ŃāXZņ<’ŸEčÄūß+įæ\{’įs8®Ł’õė8܏ƛ5ś ø|Āw÷Æ9pÉźŪFßn/9%˜ßŌÕ7ź łµj‡{’/üƊž÷Fųg½hƒPT9t:Eöžą~ÜŃĪ“*i +=ņß0vdŒüū–łw\ą’›ŃŽŌŽz!°+˜‡źāģ++Gk¢÷ߏn_äIŖ$ŽI'ćŲ1Ō£ĻU÷1ÉŖ°Č^« 0NŚuČ$óó ¢QŃqŚõ¼žQ?”R®Žzż»¢”Œ‹6šGāHE«žG_Q4‚€tb$€Į £Uā"\@éŲ8.ŗW‚¤Ė”&mpRœ“¢€vHŒēB†–Œ‘$“\““#¹Bh— n3FēäN6ćŚ&ņ¢ģE[¶øė÷īévnˆęĢ+‰Øg¤#’™“䂸8ŠX‡{wbÖųé)ē^5æžöOŠŲҌ+ļ¼ü䨩݇«Īæ§½ŲłĻāį¹Oȏė¤:nPęŅĢl9&’™ Wä?Bķ²„fN™śeœ:ż|0Š OŸńU ,Ž7W?Óu,dęćŒ_ÊOcgķ–®IFTŽĆœ±§`įś±}’'©·œacĻļQFŸĢŒĖ xš‘>ż ąųqg`ᆺ•6œ?å<˜"€—W>št®%C1kŌ<üėćēąś¢ĘVMĮ·N¾»ź¶ā§O^†[Ÿ¾-üęO9īōĖ/ļ>ŁA¶Ņ“åīŸēlxuĪÉŗ{į0&’JŠV5J$ĻØ“WÖčĪg?–LūČæēł'&)–’ļya’DdĒŹż1‹8ŁŒČ‚ ›°9#+¢ųļxäßóž›\;B0'*ś' ęr“ŗD’LNŠ‘WØN”†QŲÓy…ĢN,»{޼m>޼m>^’ł©øõ¢Ÿ¢²d·¾W-ø‹n? oŽ6ożņ‰ÆæW2:¼ HWßėŻµØ7 ģ6ó°­Ø;ūBmq):ć¼’ÄÅnqm¹ ŽTč ‰zŃŖ½ÕŠŽ£Č0ą•ŒF0ĻJķ‰ś¢¢©Źq)*Ā•Ź1±>¦\­« ąJˆDDõąŗBtE xQ^ԁņŻ+ˆ4“.1.“Rŗ+€1Ņ4¢¢€± ¶ ˜‚4s]bBh(© ĄLRŹÖLk(—)ĘĮH׹R! # Å –r›ą˜ä˜¶†eČ#@CH“v īŪ›6!(„]^ŁķĶ3 gĻFxŁūP-­ŻšćpˆHlTōoÕęu8÷¤3Qœ_„ęöītņCyøēŖ_!hńŻ»oĄžļ§ųė?æ…ł^H7€üP>Ś;» ­åDō/Wä?GyĀäŃCŸ „˜+ņŸÜ!!’ xļ“7P˜W‚³f^ˆŁcOʖšuX6#+ĒįՕĒ©÷Ÿ:ķ<Ķ<¼šį_ćÖłŅœĖŃŲV‹—>J ĘŌCō4{ķ5łOwķzFųē{Dæü²®>gĶøv;Ž^ūL\ßŅ‚ œ8žL,Üš|¼^€ēs)Ūė°tÓ+]ĒņIČŽ_ IDATøčs?Ąę½«ń—E恊8Ć>©Y…ŪaöØS0iČ,,ŽųŽZ’,§3,g~oĒĪłļŻņ);g¾NŚOöa%L“œ%IŪ tĒ“k\­Iƒy¤?Bž%ˆI"Čh¹?0ķ ®ÜlĢ&›s²ˆ3›qÉż‡Ķl.˜Å ķ\8† ›ĢႹœkÉĢe”ILR„ü“!4¹RK)©MO˜œī"+Å0’¦7…”V|õ¤ĒńąÕ—ć?~÷4UÄõ}ųĶĖšČ[—†UTćĘó…œ{7nņ‡½¾®ēū,N˜ø_½żqŌ6{F² C7`ēŌ«łUĒT5­[UŚŽFÅ­-:ŠŠ¢;Šte7fśŸ*: 1ō?Ā@\™­l„’zUö/įö󇞥–¦Ó®ĢZzõ¬Éļ@©Õष“.ŽłŻ;ŪĀU?[Óü×¦’Oųߎ’#‡5Ė ‡k@RD$Cb@‘ˆ}ŪąYKJ!‡Fx@źžō^~ąi<”ćŪžē’ēO£Žsģ1ų4T„mż*°·r ZūWĀ6įū¢I’øÕ-5 ‰„7Q 'k°_Ą>=¦|ŗNĢJ®”«™‚vŠ%čõg±ž]ć0E]B6I=ü®wĢą&c ZiŅLIM¾&‰˜@b$c¤ˆ÷Ÿ|łžQ#€ŅžVAb$3Ii¦”$HSZ×DМ+É (ʔ2…p™”¤`$aĖMķƒfĄįŃšĒ ¶Üā‚Ł\Ķ³åĖ6Čm IŸŅÉ4œ3TŠ£Ó£OD’Ī8öŒxó’_ńo½ēQT^Õm"Ā/¾yF Ž;{+>YŻÕl96ꚽ/ˆÆĢ=Ļżźo(ÄO‘łĻ !»®¹żĻłĻÜqŁ«½&’™ C"œÉ<‰Ż^_łOüś©«±mßFŒ4ąŃE÷ą„åļźSVXy“ĻĮĀõ/Ę…Ģ2#*ĒįĶ5OĆr|>±tä? Ī}9.™ū_˜7i ‚Ź!’= ŗ»= Ū°~·Wah’ј:ģ8¼ŗņ1Xn¼Ūī¬#ģtąķuÉCöĒVMÅųAÓńŅŹæĮ•±ļņ¹@0¾’{(’,l;vŌ~‚?æżs…śė:™ƒ"’=¢Č†U²!’™ģ峆&Z«&C‰`ŅvgKīxt…«%<ņč.ņRˆ’ÆÄŸ P“ܟMŒlĪÉb óž·™Š÷+ž3² ƒ“ › ķ@ė)ž+ÉĀå&yä?"śG†ŠJIHh²h@ÆÄ’Z; ń߯}ļ¬‡ļžuʾÕ†įē’ų Ī8ę°ī€ińåćŸĘļžæŗ‹üĄ†ąH#Å( Æbb±”ŗÄ²tQ[§vtŲ,źx±,ļįš`B’…Ū}l2ļ?O'üēCŖŠ’(z[öĻ’:‚ž4ą¹_ŽĪėśdū¹pŹW©ŽgVŻżƒ¤Ž’ŚĆĖūŸ žÆy’#ܐ+ĖK¢%hnŠ7; S*KÕ°„¶d™ƒśģöżŻĻéyī‚"č:ł4€¼Āų¾yŠ= &"™ `i9ÜįƒŠ^^…}æ~’|š¼¤õį÷Įøóopnł3źøĄ#ˆ­yEŲTŅ;ū Ecy,3Š=÷?Ņ„‘Ņ€>¤38H“ š[åŸOJ§‹ĢūóŽÓµ—8©)Ēóņū×cŹÕ~#@²T€(÷ƓĢXĢ Éo(H’I3HgHdi¦„ŠŠš\(fāÄ$KŒ$ēĢį¹LĖ m3ÉaLیĮāŒ,Ⰸ‘e½ø~½Ü٘Ät@čŲŁ`IŒ}!ś7lĄÜvÅM8ajLg'±Ü_I”ĒÓÖé ü‹t¹ü¬ 1ęIxéŻ×ń÷7¾Ż"}F‰.ŗ |¼mmŻŚS¢GŪó9g8MB‡’ŒÖÉąPļs6ā‚ŻūdvB™ó›LY’’hƞśxtį=øõń+pēs×įżOފ›śģ™#ģtāõÕ’Œyā„3ŃŚŁ„e›ŽņM—łOŅ”¹£RIĢ›¼?ūŚC8yņ¹=wNqø×}"Ų]æ_z–my+īųŠņ1˜6ü¼¾ę „īOōŒĪ™y)Ŗė6cuõ»qĒ3˶¼‰ęކn{T:õmūńéžõųĒ{÷¢Ói÷mł Ȇ÷m6ä?¾Oß¶ŅG3|¶P"€ÖŖIPFrĻæ»­Aw<ņ‘«\hi hb$»Č?#łw‰ą‚Č!ĮεķČƒMD6'Ļą-Ł‚SXpnq‚e`Ē)žsꆒ,h8" „I$µ©TTō)©•’šZ1M łƒ³9÷æ¼õuĢ›ņ C©#éöŌ‚Tåŵ)ū%Ć ²=Ų²'1¦6=%CL×E‘FQk‹²%„Šč@™DŹ•VÜóKŖŠ’dp=ł},ü—“ģŸé„’¢8ĢE{æ>ż¬m@ĢūÅČ~ ²Šök-·šūwüėżń@¼÷?ńŻ»įēłļæŚr%šŁx’ē&“żŪūļįˆ6¤BŖ(€ƒÅ”Ž(ļe@ņ€C/ ŃZEb@Šg1ŒŅ3]: Ī įhŖ„Ż?ł žv˃xŹvӇ7 h üčŲ?¼µ\`—`sØJʱ½jj+*Š”#”’]×Ȥ*@ˆCgRĄƒŃŠŽ£¢ć¢PĮ©<ć€@Ɓ'ˆ]1£@ō(K0DūF‰xŌ(=ęż1(čŒõ¢c{2ų5(Į@ 𤉔T Zł*p"éU i̦v»*p/ €qķ0¦ln2[²™€-˜÷°Ä”-ėłuė宦äF€@Įćę€Ō}%śWS·Ķķ­øź¼+0Ģnäæ8æ§ĪśŽ]÷!Bf·^~.8łKļµOČ&K÷śŚféΐüē$Ź ƒ9z·NJz˜Å:éÉ?LyźZöaÉĘWćŚGUN#Žõ;—GdN SVPx{ݳŲU·ÓG}®·S„Y§w÷öą²QQ1/­ų+¤’ŻŚM#ˆ3ŽžX[ż>¶Ų75T`iīģnƒ<}Ś…hźØĆ†=+»¼G>ƒ†L 'éfɹāOėd1ų@‰ —ó߃ē_Ö4붇?t•„āČ? FŅ#’‘ŸźłƒĶ8³‰“Ć9…#KѼÆĢ3˜e°‹”ūŚfGE’¢Š’œGE’؋ü“&͹Rd@“†ntG–w³F÷{źaXEuŹ>3FÆĄöż#ŠŚŁsŹ]OX¾y&Ī™żBÆĒ1ˆüŠéŖ<Ū–°n±)‘ü'"ł2žKśß—Ā@rļæ„Fr#F^ōńCų“r__sŪc‹vߒt÷žoŁqžŠš5©½‹źnŽ’lRƏtļ?p‹f‚ŸśÖČĻĀ­Žėœa€9œ/™  僔±TV ]æ?żOæ,`b[OeƒyŠįŽŲ±¤‚€ÅŽuŌt*‰zxk Ž8ł{Ų’µøpŽt K··\ćķåP—’-»ö£Ž ģ±5X€OJūcŪĄ”Ų[>-…å,ņŻ (2– hŁK1É\•ģRūK†¢€R:šĆ8 „ƒØ  ·W+&H*O ÆėīĢšŚŗÖp\C(WkÆ< r5c‚#­ įJp] RZP)ļ|\Q”@ bP !•rMĘ“ķõcDŚÕš„t.ĄAJ""īĒH+é’Į…v˜†V±k%£u !538 „@Ģ$eL9šH)É41˜°%¤©Įm‚ÉhA.\/ƒŅ‚J‘ķ Ąō~g“’L"×%††ŌDR“żģŗõó¦NaŠŗėeF…?ü*¹ĄC&„/Å]÷ĢĀ—ž?{ēgGUž’÷)3÷nKv³é J½÷""Mi_»¢ "Š_»ŲĄņ³`ƒÆ`AšT•*E‘”… ōŗŁl½ÓĪłż1··½w ų¼^½3gĪ™™[?Ÿēó|¦Ž›Ģ§Oż’ŁÜ÷ԃHĒt ćZŪ¹śž›øgvNzœL$ųõ~ČØĘfĪżł—Y³qmŁuŽsčńœzĉĢ}ł~zż„tõu#üö¶+łź?ĻĻ<\łÄJNĄuĀłjœ§¶‚’oRÓæ²0ĒO]Ķ/ŽZŅ÷~LKl¶¾3Gg”—ąčʔł9H°\/ųGĄźĶKų·Ž]kŹ9rÖÉ4'[łūs„6÷¬§×ėbśų]˜·āÉģöżg¼ƒ=¶9ˆ?<ōlķj­'Vfōp’ž£qüšż¦ ć6Š=iFU’k»lļž M_TüĖAƒżIfĄæ”ÖR¦„>JÄņ‰§~~»?­„Æ\hmż|Ē©D¤\)‘süVXŅą_#MohdjJŹpKO­ĶŪZŗ™Ņ¾š„ć±Ó”Wųč;Æå§-[v>`\qϹüžóŸBɈ?žćśż†šŗ)i|’&°nč[­¢X%J‡WÆōæŲųÆ^é?Œ¼ń_qŪæāģ±ō??:€£÷¹`ėśŌ6ļ}eĆ{’qļ¼oßóāk§ž{Ī~{-€\ö’šēÆ<'ģõŪū”0™91Ųiēū~Žßoåģ?¼EAżĻŅ`’RōżQÜą(°WųŽīŽå¢ø#ĄŖxPŲ e ¶»#7®y¶§+żøĒvŲBü9°(F8Å$€›Äś©ųqŠLüA3v!Š'6aˆÖoĘ?ķėl9óH޾šŽœ6ś5\uĘŚMŲÆž†Ō ÷±E*6:.«œ‹F³ø½å“¶aćŲitOą&0‘Ī]—Gī³PUqū‡ņ]Š~ƒĀö ÕHCģÜńzIW(KĢcb2!į8±l tz®(V­525"į„ÖS:īJ8Aˆ‘ŚJ™ó&Gd»ÉŚ[B“”Ö$@&ŠI›!2÷$ ˆ@É,ѐ!H“ÖFFR”¬R‘Įß–ń÷¦ĘŚPDVˆĄµV`… %¤Ą3H„įXg7¬°Q$¼æĪ{1ńŽŻ÷“*@źé9˜-ł_•ß΃b—žõ¼²r _z’gųŲ ļ`óÖ-|ļŹŸš×‡ī*˜ē{’*3§ķČ/o¾œŁóž.»Ī¶§ńķ]€1]u {$ž#󽻯‡o’ńGL›8•œó-.ŗźg,^½“ä|õĆ{ąæīµ† ü“šėžk8•š@aŻÄI™kå=©ŅĪA뙓tš„7¬ątc;FOįń"ÕŻł8ŗū;™·ā©j+V?ųĻD%šßÜŠŹ;w;'^¾Æ`Œ\d»ń;³aėjŽwŠgI: ¬Ł²œŻ¶9cw?ƒūēŻĀ¢ÕĻåśžēŗ^eĆžk‰!€’Į/śśDä6Ņ=iW¬*oB­ź“½WĪ £ŽŖą?ł—aü§kżc/!„§“ō„Ā“RxJ“ŅZzŅž’ĘSJ“ū“Z8&ŅZ†*!CQĘō/ćųÆ0ʈ(ÓĄ“m ÜT;¢.]}£hn(Ō »Ļ?Łwǹ(1±m×?ō!®ÜePóÆé˜Ģz_<õ—Üųµš«ŪæĄĆóŽŖéX•htżÜČ ĆTH…,BŒōæ8ū_²¦ĘšˆŠŅ'Ąę’č«×ųÆ8*µż+OMUĘflęś>±’™k®}īŽc­;ńšU{>žĆśÆÕøę/Ņ„©­ĮŌcüØńŗė‹gĢś^Īį?:ū_ļoŅxK,²øCUU…x=Tł$ĄPTĆŁ0S0v! ōk£ntč’ŪæéŗåaęüD?’ öŲ~*CśŅ(¶`sžÆo¢3å±E9¬×.+ ,kͲ1ćX=e{6Kc;”›Ąh§0Ó_@h,!ŌKG­­!ųƒ4²ÆHŸG¾ ł×N:IžŽ0Īģ["Č©dxˆDC\֐!\…õ#A˜!Hgč3ą>«ˆ·…@1 UZH`²m¬6ŒB”U|& »F ć  ”0B"mzb@ …Ö`„’B„V:ĘX!…cmd#-Š!Ią”µ ‹š“DˆÅZ„VFÄWoˆ¢€Ō-Ļæčž¶ūnzZ[[Éį8$8oī3D›6R $ üg”–’xźAīŸó0ŪMŽ%5K×,'Š¢‚y>|ܙ¼ēŠćųēœ‡¹źīŹĪ—p\~ž¹ļӐHņßż€»’żĻō:„c„\|Ī7ŁcĘ.476֕-¬|Aµ€ŲĄ-÷n ĮC’Ī^ē:u]P ū+œß ĮM‡Õ“Ī’u °Ö²ļGšŲ‚{*¬Z*ʏžŠ’ ]«s>ŽŚõ$RAЧ^}°ą\F7¶qźgĪāĖuŻŪźcŖƒXĮ {}c ’|1gŒ(€±-“8’ų±¶ó5ž^ś0Žr8f·ÓŪ2‰µÆńēĒÉsĖ>š_ć5 †ŸÉUN\”ßü¦ˆ0ŃLĻÄYXUž'vżąß9£?įKaćlæ#|)šĀ—OJįK%|%Œ§ÓŹŃėā ·ūÓŚ†Ņ•Q>ųĻwü7&]~ē`„”¹vx6R6“1ŃG’!{ā½Ł6€Ž ųüÉæį’s.ąü+.ÅŚśŸŲ®¾Q|’†ļ²ĻĻņ3~Ģ6ćVr݃š8…ĀZ«ĆPč EµnMĆ%ż†Qś?PöæœÄæXś_oö??Ī;ņ”uWļpĀOgĻłP0śK›{·’T¼ĒöøŖū;WxōUP*żjTĖž5`’ż¼æ«f’ßņx«Äß#”ØƇ  82*€ö XÖC­*Ь[2*€rQ¬„1]a 03*H+Fź]±mķD Æą­[Ao×F:Æŗ‡ ¼‹gO9Œ½Ļx';¼ė@Ę4&/ ó|øo6Ńõ÷Ņ÷÷ĒéB:…b³N°ÖqY‘lbeĖV·NbĆø)tM˜Fs£6óį›ĻęĪ”ŽR€4QS.Ć_LŌR P•Ø”ĄH„%0§äžj0aJ­soõ ?$Ń m漂×ŃÖ¤I€j„Z †é’ ˲$@ā$tx9 ˆB*’Äž>¹oż(¾ēD^„JØ m H„B” ˜ųB,FąJ\,g”­Ö%Ą·XG‹”€ÄϽDZ#P€` žm/½$NŻm7µm@+ūļ÷üóDkӒūĄ Q\fi¬aéź×ŹN¼ćŌ\šžĻ°tõk|ū?,0Ė_ü‚œĻĢi;rÅķWgĮ„ųšqg°÷Ž»sõ=7šüā—JĻÆxņaĄ°#cśWŪ‰ ü čvĒ’‚Ć*<Øwź×\Ļ:¶®ę±…÷š?£žXōĻø}ÕIćxĒn'sÜŽļ£)ׇQĄ‹Æ=Éón§³w‡ķr/ŗ/7_zŽöž ĘZī{īęšÖ‰7×qĒk’}›¹ē¹čõŗ Ž9tę tõoį÷\”mż÷Ų¢»«¬3ąæø®cĀ1µ(ŌvJ’Aąæa4=gb…*æłŪ{eaĶ?•Į’¾"VėK%<åO įI-<©ń¤¾VxJO9ŅW®õ„­c𯸮 E~ę?a£ĒL ųĻś+ĄÕŚ¢µ©“eė§WÜDæ¾ółĖ7Ī`Ļé/šüҽ½Ö³‹÷įӗżŽ?łĆ<2ļHVlœVu¼ń{- „ĮŠ"YžHH’S€Ŗ2f0Ņ’ŖĘe¤’łŻÆĖ’UŠüģC€ĶųŽį.6_=rĢuM£¹ö7<1Ż÷Ē5ķ3ęÆKOŻż›żĮF2ū_’Ķž—Ę[†ąM¬˜vAÆ›ZU™}ł„ÅŃ< »© 1T”)H?vŲFq¦į7j¢†&‚Žz:׳ekė’>›•·=Ģ×eņQ{³ż‘{3qŸ™“LŸLbŹx”¬@ ¬Łˆ}uŃóÆ<ō Ž#ĻŅÓÕOÆtKE‡“`£vX—h`MC kŚĘ²”} [GM¤ģd|7‰‘«ĆĀ{SLŌS _„ēųąIj!2뉂€l)@Z`"„CJņJ葉x¦ ”m„ „Ét)@ >Æ Q{dł$€Āb­+‘Q(PW ćG¹Ŗ$€Z¤#0A„²Ź Ö K„/°ŽŗV ¾@ŗÄX¬Š „#DČģ/W+Ųļ¶—^JœŗŪ®j»¶Rd)q÷Ž›@;„«Vģ*ūBą˜ūó»Ÿų B¾~ÅEō„śĖŽyמGńcNćßóžęņŪ®Ź )s.Ó'Oćü÷~’„k^ć’n»²ĀŅu‚’AłH€’AŽčĮ’Ą„Ę›FÄńæ*<Ä:u€’šÖüõß`KĻF޵×¼g’š÷gžĢƒ/Ž^uŅ÷ł 'ģó~fæüOxń6zżnvœøūļų.8łgtõu`¬į_/ŽZ0Ēä¶i¼Ó1Ü5÷:zRE¶·"&Ś’Nż~_Žęō=’ĆfĻģWļ'ŒŠclĖD6uÆų>ä=Ļ÷æ˜ū šLdBüČĖ‚’ŠS zē@cźx?WٟåĆž«,śf’~c½vQž‡M“¬Ćöžéé²ąßęƒQü+įĒą_yұiš/3ąßs)„š”#½„+|­”Æ5¾LH_i:މDĀ uĀF )Cėć*i2ąß"”¶<ų—ĀjŃ9$£ēöQ›y|ĮaUĒ„‘fŃŖ™l?q)Ļ/Ż‹Šh¤(’¾P2"Œ*C˜Žī1<<ļ(ßķ1®čCÕ×õ»°Ö`lUš?ŒŅ[«ōJ„’ÅQbü—gæ2XćærŁ’Ęfl&ūŸßöÆŲłļƒ]šł»RŪæ ŪU^؁œż’›żz¼u޼*€¹PQ?€7›(S P¬ČÄ& ”‚  ­›*SŽY‹!`&šĘoA8Ūaõ(śŗ¦ąÆ^NߖÕttofmo7Æõ„’3,ŗļiʙ€V£]š'¶ŃŅŌD¢9‰Ó—BtõaÖwõōHxś…¤ĒuŲŖ¶h—MN›[ŲŲ<ŠŽ1ćŲ:j"}ć§ą©F¬rŅ.¤3ūaåū›aA ¾`Ø~ ī3*€‚I€ŲPl„R!¼›H{ dK ÖSÅ„m„MI›%02$a(H+ 2$€."H›õåī—0Qz+„6]BŁŸļ 6 ¬FHGY!!Ÿ°¾Ž#lDČ‹ÖaجcŒõ…pK€ kŽÖ įŗŅ÷­ńÆÕųSĆ ŠHwZ ĀBX ļö—$Nžµ‹Ś¾½½ų9Bąī¾;ĀQĖ–ļĪXyWž\Õ侜¼Ż4Š­}„uŽ„×3ąŅcÜ0ŠAµgHėĪŽųÆ%† ü×čž«ŸKå°ÖšÆnåį—īh_rm IDATbjūt6woØ:Ē”öéæ÷™Ģ]ņ(7>vYvĢóĖ’ĶóĖg³ēvsö;æĪs®”7Ļw@§ģ’q:{7óČü»ŹžėžŪĢūż,?¹ķótöm&?óģž§³ē¶‡šųĖ÷•œÓčĘ1|õ”_q×Üky|Q•R† /žĢÖ)c¦3µ}ĘDL7“3>»ę^Cæß[ž€ŅĘĄ`¹ōy ®vš?Š[ųMž½–ńōQń„Æl“½W?šź™AˆČ‚’ ü;*%•õTü;¤¤ž#c௄šR2Pʆ•a žm$“N \k\!"룔(’‘dl˜’®ÖjaF/m^ćF‘Ŗ¼“”J8*`Ö“üčęo8֘yŅŃ=†ę†“ KĄ~[ó6u­:WG÷F7VļyeBæg£Ÿp Ó÷ß&Ó¾õ€é’H’UĖž'±[J9O TśŸiū—Į’ćæZbŪ*p­–¶~’Ķž=ŽRoT6,ŽL)@S€ķķ@”3LŲr*€KņTnˆ%£D Ó0-D]cń:7ѽe-›:»YÕÓM«×O«ļÓZ¢–•4Ł’œ ĒEŲÉ_HRJŃ£4=ŽĖV`kS ]Ķ£éjKOĖ8RmćšˆI Ió H‘UUo€@&ōØ` ˜ńˆ•„„™Öž’HäŗAłR?Šó¾ ­›6”RŲ0²ŁR€x[Nņ_Ld¶K­-PHD”•. ˆ++‘@\Ļĝ ׁW˜ČOĻ/##C$ZG‚kĮ8ŽÅZĉ%ō®+}_šX#BŽ SéaQBŁH "Ü9”=~—õĢqćJž<Ī.³Ąu ^y™’‡Ćž‹b\küć§R»?­~öŁļŃŌŠČó-:ŗ:Óė”Ÿļ¬ŽĻ3våwż™—–-,Ų—Č®ÓgņĒÆżšļ^õž9ēA*Ű8ž× vąæŚäe×xxÅMoĒ’ŗ1©(ևQĄņ Æ 8ĒỜ@*Hqóćæ-»č;¾“Žž <² gŠ)€&ļÉ.S÷įĻž²l_KĶIū}Œ_-’ŪŸÉq{½ßßqģŗ_'īó!"ńģ²ĒjøšŅHč>xŲēŁeź~<³äAÖo]Ŝ%°×¶‡±ū6rėœ?Ä5’¹Ė¬ō SÓęį’õ-_upķė ųĪ~S„7z2}c¶«x’Į¼u¶÷ĘēB[?ų÷s™é aż ųWŹzBJ_I|é_"'Æ“ōµ²peąj(ĒFdĄ?"²Ž5Z “H:Q¦ŻŸP1ų×Hc$6üĒ-…#TĀ lŲæŻ<±Žūóνąµ Ū²¦cņ€c··’»ęœĊ€M]c™1i /ÆŚ9;F Ćö—²¾sBõ¹Ę®dī’źæĪS[W¬ ųRHĖŅ=*7i*ž‡Cś_Ռ’j‘žW4ž«’żo ‚ģö"éf{qŪæQ~nß³’oīxk¼}T• «©j XK)@qä—øc°n/֙€mi#šŚCŠŁAjŻjŗ{»ŁŌ·…D—Oc_M^І($i ® Ń”ŠĮ®ń—aąøx*A*éҟh¦æ„‘žQ­ųÉфķŪøIŒĪdūā¶-ŗ”(öį­ę0˜x]üŠĀ'ĪŚēĻ) VŲĄš“A`Z%Œ"Zä—44hÓ 3„H1ĀJi…Iū(G˜0°2k*˜ūäeük!"@E!ł$€”Āb0ł$€N Łc &,V iĄ¤[ Ę$™Ī22ŅęHćZ_€ >’|Ą±R€ČJAą ”-D¼Ŗ¢ČˆąŽ‹Hķź½&O*÷:pfģ€H$ ę̓ x.š_4dĮ²E¼¼b1'~<ĖׯäŚ{oĘsĘh’{ʧŲcĘ,~wū5<µąŁō:姞1e:ēö Æ^Źw^U~‚„ćņƒs¾‰’EƽRa\鹖S:Øn;\ąæžŪ?Ču†‡šØŗh•ĶÅc† ųžk ģ=ż0ž^ü©°Æhģ=żPv›¶?×>|I ņÓ×#…äŌ>ĪŹM‹™»äѲ'Ų.'ŅŽ<ž+üqv×±{žAkóXfNŽ›WּȢ5Ļ—œÓä1ŪqĄŒwp×Ükéóŗ«^s„k:ż O³Óä=łÕ=_aĶ–åŁ}ö:N?šÓ|ų°/‘t™½ųŸy§`ś„eœņ„\|ć·{ŠĢ'™Šŗ¾ ž’ĮŽę#G_Ē·Æ»8k ųŽ=`ńšā§!®0,˜kŪńÆqÄnrł=Ÿ©ŗfDzP€'%)ķą+M6`ņ@~qöæ8†Kś_ń_I Bś?ćæLö?»|Qö?žĖų’oŽxĖ RPŽ(Ž£ŖØŗĮ¶ p|5@1 0Ą`Ū–‹Z !VųAø`ŻÖw±ŪŽ!jCŲßOŹėGnībkG7Žß<“I!U„4&ž×*DBa¤ÄčF"Ē%J4ŗ ¢¶q„Zc“‰šė–ų¹sT6,ŗĻåJTˆ-×pøJ`š~µ˜R0g\ )¬’d„ųł$@!ń?S ą„Šą%2„&ķ ƐŒ‰ r„!ˆż W óŹņ=2~ł$@Ę€j$±o€–1‘y$ĘŖĄ¦M3ķ1V)­#cB¹é \<+…“Fh7ļ= IŸŠ;‚¤@§,hA¦3 ¢ČŚąWŪT:m»M¹×†ž:ِğ;†å†Ä`ĄæĀ(ä“?žß:ėK|ōų3¹göż¬Ł×%¾ēĮ|ģ„÷3wŃóüöö«ŹĪ‘ „?ų䷐Rņ­ß’æŠō’¼ÓĪfū)Ūń“ėÊõ•;ś –‡üדN ›*N’G-Ō@D ĆnśWśųÆ~šˆ€’ Ļ‘’·‰ĶéZūüĮ- ­œyȹ¬Ųø˜¹K+˜c’ŽĮ”1Ó¹ōžoÖÕ§Ē4&š9nÆ÷1gńƒ¬éXNę ē.}”Oż5Ę4gCך‚:’Lœ¼ßYléŻTjŅWtĶ•.s›±;°ļöGróģ’+’=©­\óčĻųŲ_įä}Ļā¹×Ē śŹß jÜ\ćėv0ąæpĢČ[¢üę74¬ōŽŪ‘ ¹² Żū÷rÓĒ‚ČZa‘ĀX°uƒ•’RIOjė -SJįiƒåą;JJ(WZĖ@&l 2ŌŚFʑʒĀŃVEq»?夁¾YéüKʼn#¬«„Q½+Fī6ūU»/BX>ūž’C«)ķ«Ł{Ęs\zēł<¹č ’±īüMÉ^„°l3v%ūģš,ß»ž{¤üdvĢU÷œß’i~sīēyrŃALj[Ė»÷æ› Æū&-œŠŗž_|ņKü{į!lčĻøŃ9å ;øō®óY·„:_ѳņYAJ(ś”ƒ×ŠDčø¹lžė!ż‡!’ ƒōæZT2ž«–żĻDqöæšń_-Ł’ī:Śž•‹bš’ż¼æßNŁx+ NP.źQŌÕTå¢ oD[@Øly$@/ŠPĄøI„½Ż1Ąėō[¼Ī>d”‡"so"”C„Ö¹Z~­ćśž¼Ē"ÖųĒøł$€Ö؁JF¢5`9?€žź% 4ž™ć0 ‚@8Žƒ4؈%‚z|ˆ …Č !”³¦~Aā s$@^)€1Ā"-!9ĄHaUą‡øWp 1 ,øg±'@Ę ;6s~ %JLi„L«]aLü&°BŁ(RZ*‹‰¢Ą1BW‘D¾± ĄEą["'k“ !“—#lś{Ėb ŸX¾Üśač¾żōr?~eūX܃ĮzÖ«œ ųĻ-=|ł²ļH$²„ćŪĘóĆO“ĪŽ­|õņ‹0&Ŗ:ĶŁļł0»Nߙ+n暅EYż|šæē»ńŃćĻä™EĻsÓ·V¹¦®g˜ĄŻhtpą° £šō† üDh ųƅ8pĮ’LXkX³å5fNŁ‹‡ēߙķpŃŅŠŹ¹Ē}‡¦ä(®|ą’aÓ_ pu‚÷ż/­˜Ćāuy,ņÖ9v3ŠRs÷³×“†© 1Ķ˜æņiĶ|ż“Ėøś”ŸšŅʧ˜9uofNŽ‹kłyٲ‚Ģ5W»Ģ]§ģ‡öóģ²GĖŽ³Öņäā±Ē“ƒ™:f{–¬Ÿ_a6×ņŚ(Ŗ ́ņŚ?Ćj;„7?ų7RÓ;q&a²²n0õš“ŗgQd‘Yš/¤ˆSbų'*žIOØBšÆµō¤Ās•ņ”ƒ§¾rbšÆŅ/’Ž •+"%ʃ™–ś›žA>ųĒJŅqlC8ēEŸC*^³ŗüäÆ_ĄZĮÜW÷墾COŖ¹dģƒ/Ķk¶Ķ>^øb~ü—oŠŁÓZ0®«o’åUœøß=LŸøŒĪŽV>ž««X¾~»ģ˜ ć¹äÖ Ųcś‹l3v%½^ē_qiAŁ@„čZõLƔōiMOĀ”ß:DJc•*•Ā”ōæŲųÆ^éq Fś_‹ń_AԐżÆ·ķ_-Ł’z¢\ö0ń&śčÖxK¼‰UCm XIPk[Ą‘2,. ©ōܝōšćb›Ą44!»ü<"°-lč8Ų (\Sźņ÷KEŲZKś‚Ügóęђ·?ņłą>;žÉą@~ƒ1 ŅūŠM«‘Nž  4X¢@HĒ±Ę ŠK²$@¦ ˆaxv­"@ʘ4RŲK†Č“ņ«FdT&²¢€H»’“6Äā}UI©¬I»Xa…t°)…:£“Ta୐ø€ļj!”B¹ĄD±É VąJ«|#Š›ž„kŃÓ«Vy©0J³ć ¤,}.[Zp:˜`īӘžj_×U¢ &r>R(~ņ™oÓŚ4šĻżāėlŲKWś¾Ó63ųōÉcъWłż]הY'žĀMpŃŁ_'åū|÷O?.q,WJń޽cߝ÷Äu\ę-]Ą}Ož«ÄH0Żī¾^Ön^7(š_Ņ©1ūYuĒp€ņZ¢īuDé¦!­S'ųÉ3𤄛oźJ>}ģwųĢqß棄ÓÖ<޽§ŹÄÖm˜·ā)ƛ_pMGĢz£Z¹óékŹN8¦y‡ļņnž5ļotõm)sģžg¢¤ā–Ł—³µÆƒ=·=˜„ė¦/Grʾg±bÓ«<’Śu]sžV×I’ņū ¢ŹĘ]ÓŠ^X!]X÷ū£Āށ@y-Ó»ć„uqš…Ń ŗ'ĪĀøåÓ9ÖXśļxÉų³WDV(ƒĄZ0"& BDH!Óą?¬ü+%RJÉšļjü ų® uB†R‰H:%d¤“åĮ9ĒW ›’Ņ`1¬p\µ‹9˶]pF/wķ‘QÜ>ūԚīć¼å»3ołī5MłInż÷’TÜo¬dīā}™»x 7®ĀčļXfR+ś ŗµ¦Ūm¢Æ±_ę’Öūž”ż/9ļA’e³’eŒ’Źe’‹cØm’ž›żŽt_ö7{ ×÷Åp1HƒWĖl›š÷B7µˆy«Āšed;M–hl)›5,sl²±pģ({#C7,=‡^JK]7žąĖüēē?N96ó_¹ė 2ŪӟĄ%²««‹Ū@ĒJ0@x)d_Źō!zÖćt­Åݰ†ÄŹ5$Ö®$¹v%Éu«Hn\KbózÜMėpūzŠ©~TŖå{±‚!ŠłLq¹ž±MSł'_aČōNąĒąrF~‘Ēfäę²ĻK13aĮ\Ņ mHŗ =&a°Rågē7ĀJę²RŲ(ļœr™„ĀóĢ’aˆLK •Žå†Äī’”Æ”“0қٓ¹¹# ’ Œ°Ā¦ĻĮĮJ%Œt„…!d$“°Z*ėHZĒ„Eä*)­C×µ!J„Ś•AµrT–TśR_¹ŅSŚśJƽ–3m—Ö7óÖ­MŻžŅB‚(¢LČĘF܃AŽ)iP·é ÄĘnģ~ǵ<śĀæÓė”ŸKJÅEē|€o’įG„Qī(†—ēŸžI¶›4_Žr9«6®-˜g·ķwįo_Ć%Ÿ½˜s:§y2ß’ų×¹ćĒ7°÷Ž{Æ`Tc æ>’G¼ļ§Ōpe¢ÄÖžk»Ū#žß¦ƒY§ź°3Ų/Æyßz>«7/c攽š‚~œw‘‰øcĪ5÷N+‡£v=™§?Äś­«Ź®sŅ~”ßļå”—ī(XgÜØI:ózé¶öÅ?y_xm6}~üķvąŽG3©m[īxęŖ¬”ī°dż|F5“1­½‚¶OĄ3ŽIgß&Vw,Æwś¢?*ŽØ ”ōˆć’€ļģ74"·‰īÉ»W’„}7½•’‚( žĆJąŸĄæ£¤ļ8xJŁ@9"Pډ|šÆE(•ˆtBDZŖ°nšŸžž•kLN ¤°MŅż‹žł;żśÄę…÷śRŅ#n‚ĪD żFé8ū_MśÆuNŸŻ6LŅ’L (żgųŒ’ŹnoĪmoØrüP’F"ž›ż8ޚ xK«Š£ž¶€ŽlvŲt0‹‡Ć°Z)@6Ņ„Ł?X?­2pBl« y*€>rJ€ĄÅ:yūŹ©‚ėT)Č÷ˆBD t„ˆŗpOŚ…]g“³÷(—ķ›l§%mJŅ¢$ ‘%DxaDow/«:ūY¹bÆüķYž[ßIw¢… Ń@؜ JŒ&2B«œŒk(~Ėś¦3@8NĢŲ00R;2[ „ąh“‹ |¤Kü¤KM¦=`„"£€˜Š2W „°Ā„X‘×)ĄX”MhĢu)쐯 DfüŠ•™ż•”Ł{%#kŒ~J +ó” d„B†Ź-ŃaN ­ńwÆB|_ ŻøŽ?… ±¦0ą[„V"°ĀFĀZ»lĖęŌMĻĻOœ¶ūLŃģ– Ē!qĄ ^"\±"Ž6Čŗ’Źrīx,×ŗ¬Ś2ļē©ĢŚngžų÷?óņŹÅףg§=ųŠ»Nē©słĖĆwģ;rÆCųłypÅWqĒć÷ŅÕ×Ķ!»ĄWŽ’9žšÕ_ń韉¹/?Ÿ=™ļœõU \y÷õCĢ`ü˜Į~Ą §Réy®o*\ÓĄąæ–å @ś_ē:»ÖrG^F’s'\Ģ‹īcCן‚cö›qMÉQüėÅņå)ÓĒĻdļķć/³ÆĄ ś Ö9iߏŅēuóąüŪKŽs$'ģõAž[ö8QrĬ“čMu±põ\ś¼žģ5W½¦ō V?ü•Oņ‰w|ƒėūKÖ–)9ó$fMŁ—›f_V¶ĮąŸža’µÄĄ’ą¹š›ĘŠ7~G¬(ßĻōō^ūL-ķ0išŸ‘żĒąaŅą?OöO\ó/ń‘"ĀśR©”PÖÆžUüK_¹6Hhé‹<šÆ2Ō %¤ EŅDZ+m„‰¬r`šF1ų÷󏤰ÉĘueŲ“łī»[ö{ņ?:h£€Ž—ļė’­Śas²‰­£ZI%Fy€;@ŻP¤ )éq$ÜŽ ćæJm’kü÷ßģ’o]€ų{捹Ø„-`=1†€÷³CŠĮw0œšz„wq$s†jX® ł†€Õ¢  3›Ū‹I?&Ÿ(ż=ØV÷ƒ;rōvc8yt*YŁųß’é {[³¦{l 'īM“¹›%/Æę±›ē/­bķØ6R M£Z “>V5ÄõcĆåPwg€¼R€Č ¬JÄ~ł;&é8Ž• K¶ĄŃ1© )h †‘A«l'€Py­3ۊI#…•ÄHJʐb  Ƽ"Ó W gżDä‘aA·̐Ö…®Į†ĒZ£ƒ ]IC D–Ą8‚ …Ā’. DXģĘžĪžėē¾Ōpʞ»ˆ1„é!!pvŻŃÜBøp!~2 žkˆjŲ3™HšÉ“?ĘĘĪMüńļ×V<†D’ļŸż śSż|÷O?)Č~ī7s/~ń¹ŠÓßĆyæų –æœŻw’Ó1oÉ|.æą“6bbū6wmįŌĆNä˜}ąĒ×’ŠžžžrKVŒżgīĶä±øūÉū‰¢ JĀ!’:²Ćžk!"Ź=Ø”ņ5T÷:ƒwüÆuŃk¾„Ȇ%{öŻžpVnZ̆­«KÕŹįż‡~–õ[W1ū•ū öOæ »O;ˆ[f_ž#ņ–?z·SŻ8†ń£§šžCĻgS÷Z¦ŸÉ’ˆOņēGĮĀ5Ļ |Mé°ÖrŻc—pĀ^āÓĒ|—u+˜æźiŒŲiāžĢ˜°+/¼“§—”iÆ9Ķp’·™é_jōdRķŪVŹ)a¶ōÓ{åSaø”Ļ’’#Ę BFBYA(„Œ’@‘’ŅOƒO:֓BųUĄæŸ’ZK_;Ź/’®Qü«„6ŅDÖ"”QEšPüCšÜ’ *hu­źīyõ9ZvΟ¹Æ{lZx_č÷lčrlŅI66µ°µ”?ŌŲ¤Āfd†ƒ­ū.éqö?’AĘCĶžWkūW.ž›żÆ-ŽŅĆØ(&ŽŖ¢Ø„-ąp«*®¾‡ ž ¾i#>Fü|÷°Ć&˜3†€%]ŖB©  \䫬ÄS½TE;Ų|?€Œ JĖü÷n§żŻ»rք&> m\RՐ5n4;ĶN‡Ģä¬eėxī–'øńι¼ŲÖNOcŽø1N3¦\)ĄˆE━'Ī]«Ųćtg€ŒÄ$~ Mš<„„$m½?Fę}T„‘ Ó$@%?€J$XdQæ€Č,A DŅ8JH!¬±V”Q„Tʧ”ˆ,Öqł$€ƒ2D€1D®Äń- „•dH€4ŠĻ#„±66LSŒ”Ą kMÆOßõĻĪOž¾ēL5©„ŌõŠŪn‡hl"|į¹ŹjtõPļÜ÷HŚGµńó›.£/•=¢h¾/š|¦M˜ĀEW’”µ›sŽčnjēēē]DE|ę’/—˜¬ėŲĄ{/ü(VĄĶß½’m'LEJɲ5Æń·Gī¬r=åćO?—“§óļ9lī*“³&š?,ßśĆīų_pX…õ®SżšGü×ņ °§;ÕYvo{ĖDƛWöŠćö|[§ńūū/.Ȭ !8e’³X·u%O¾śÆ’åG5“ńŽY§D>Īæg—Ęę}®NņŃ#.ଣ¾Źnū Żż•ϼč\"ń÷gÆå±Ew³’öļ`ū »pŁŌµ†¾x3‹óUÕoEĻQp=šŠ cj'¶j;„7/ų·BŠ?v^KŁ’w¢uݶēs"Óå!d¶ĶŸˆĶžJĄæ!EXü+!<©„§TÜžO)RN\óļƒ’D%šŸ°uƒi"[ üKن5µ*ĻY{ŪAó×öƒ©c{„5ėž½¶G*¶(‡õMlhh„§„ŠI`†£īD]’é’H’•‹”f’«µż;Ŗh_-m’¾Ÿ÷÷Ū5ūoa€LˆŸĄļ<¤®ØÅĶrV•^ńf /ȱnį#4¾ö¾ä-åyq6 ‘Üę¶³’Ų’įzˆ»”h|ˆUĶŲr~Å^ÅŃCüĮS°±‰'“b?€“  bTPģ†Z†mĶ~ΦāŽQ€'ižĪA|圽yxņ(Ī*ų/)Q3&³ß×Oē’?ž_ĶĶĮ«^eģņWiٲ'Տ*ģŹåČˆI€lżæŸ_ėŸ>Τ÷¹Ęćr~‘ ¬4dėūrą3SĖoŒ°~1q`3­3ćCĄų±@|Źū¤ļQĮu)¬‘Ų|?ˆA¾¹š’Ģ:™Hhad6&ńqO€lń}g/„#l‚I{(W#±Ž#¬•‘‘”±B ė(etBFʘWDŽ“Fk:Ž2žIלŅQ”r¤ļėK_ŗĀ×Oiå)-<éąI!<”¬'‚ØĻ»aī‚pń¦²ßŸjÜ8œD4”‘«Ō b+@»~–8+NŽ<0÷±¢™ržzä»9żČ“xā„§øõŃ\Ū3!ßūų×hkiåW¹¢,ųĻ„Įb­å#?ś KÖ,ĒŃ“Ś'ņ©÷|Œ†D²Ś%Ä{Ģ®ŪĶäoÜYü×5‚’!ƒŲqü/~vjŒį’5­S;(Ҙ*ĄrKļ&¦¶Ļ@)“÷Łž޵Ē{yeķ ,X5·`‚½¶;”ķĘķĢO_]VrĀ^ĄÕI®{ō’,ųšĆwνW'™1~VåKØr=[ū6óÆ—žŹļ¼˜Ėžń nš}i]ąæ¶1u[Uöē@ł0€’*‹¾™ĄæQšŽI»V’Į‚ ¶ū²'BÓå„(’R†B¦Į>Ŗ” IDAT’BH>:śXV@m†€•¢š!`qd k+({ĻtSĮb@;Ų Œ3’Žä'wäŲÆČ?&¶p®… †;„€“Łõggó³}€/w®gū/Ó¾n%żčĄCƒ2ĢߖļR[…ČąA!ņĮµTŲČY Č’AX@)¬1Āšf’ź ņM!G„€Ųr$€–ŲJ$@w“BÄkŗ aņI-°$€²‘.2ŒI*ßÖw<™^Lˆ”VĀ _ įIe=„č÷ļ˜÷r0{łj*†ÉQ£q> Łž×Cśu’Ķ ńrÓÖĶy3åÜuśĪ|óĆ_¤»Æ‡ļ’é§Ņ’“=žƒw۟'^zŠ›¬Ü0?¦›ĀĢi;šĢ¢ē¹wĪżœóžs뮣!Y”f§ą‚ąS'ŸEŹ÷øś¾+Ž©ŗéõ’µÄp’Ż`Ąõsä°ŗ3Ųõźą¾ēndbė4Ī=ö»ģ±ķAģ8iwĪ8ų\>zıĄs®.˜@KĶ{öłƬ}…«Ÿ-YdRė4Śńę,~€y+ž*Ś/"žłäG^žaµ\B…1õ½’Ė„Ļó`põ°ƒ’^ oš¹MōLŁ“ J›?’©¦÷ŚgBė[‹ÖŹš āz’üŪA€”> _ éKm}!„ÆņĄæ”ÖSNÜź/ü•ĄæteT+ų—;xšJX7”±cœī†Mæ½Ń„©¾Ņ;óꎠ·Ć®™óĒN„Ųäø¬jlbĶØqt6ĘsbŽ'N AśÆž3déQ'įŹI’_㿁¢ 4ÜŁ’üؚżÄŪ‚IĄQU^@Ć­(怣Ÿæ–ŁQŠĖ°LD2×iįÄéēqŅ“1ÆÜ1›H“”’•T墸+@žP–Ø¢€¢5 UVV&ņ£Õą~ē0¾9k"WhĶäZŽ®P uō^{ė7łłōVY1Ÿ Æ­ eKŽIw Č/ Ö/<¾āó­ćīs;T"Œ r®¾÷’ §Č'pb‡~ŠöSL˜Ø€ZI€(G8ŽŒ*‘R [Ž€˜(GBŚŠ!l”ž'CHW› ą`CįˆPę‘B‹ Cdŗ(e}GćĖ„ˆ{2kåiGä¹6[!}’‰eÆ„ī{y‰ MŁ×®p]ÜżöGoæ}¹Ż#žšÜ«/pŚį'–̓ǻņŪ ~FĀqłŁ—²~KN÷טląó§ŠŽž>¾{å’«īˆžw2_:ó<~zĆÆ¹čźŸńžļŸĆ5÷ŽHæ7€˜RĄ»ēg’Ė+ ŹGüæ’ė±ĆkśWķ€jė¼ŗvæ¾ūk„QČ©ū‚wļóaVnZĀÖ¾žYņ0«;–LpŲ.'ŅÖ<Ž;ž¾ŗģ:'ļw[ū·pĒ3W•]oÖŌż"Ÿå_.ŻYųÆŖķ4X®ü×·|ÕĮµÆ#Źo~ƒĆoK÷”Żˆty7¤øĶß|Ó÷·y‘µŅ …±c…0"!R¦?”2ŠĄ į#„ƔMƒqž»łąŹeL[³„1גōŠ|ŅūZ•™,~%%@6ņ”Łq™šł“@ž¶ĢPZĘĪ•aų6Mė˟C=„łŅ’į*ȏ†¢R€ž>ä1“˜rüÜāj¶«į_·Pqīiœtī œ¾ö5¶Y»”1›7üBO€zH€|SĄr$@¶ H€TZޟ3ŒżL”'ŪWŲ ²ó™tż?ä‘&˜Ć ģõdHŚüR€xĮ4 Pł$€ĀJ[ōåœO(dH“QšPJ˜I“¢„›“~–Hą9JxŚžÖ2%Rq)€ˆK¤šÅÖ¾īžėž™.éč¤BČŃ­ø‡†;¶pG æśÄ<Ļć—·\Į‘Ÿ;‰żĪy'ļžŚūŲŚŪ͘–V~rżÆŁŲ¹©`üŃūN[K+×ß’ŗ‹[ųe×)\轇ŸÄö“·ćź{o`ó֎O67Ķ€µ’łĒ ø”ĢŽA‚Žŗ²£é†,×»Nõk®ū6 ü×CŹ` 6v­įŁ„•ŒŁwū#XøśY:z6”¬³ßŒ£˜2f:w>sUa‰KśynL4sģg2gɃ¬ė\9P>ąæŽ×v•ż9P^#SWĆråF½Ą˜h¦{ŹžÉŹ=Ā—7ŚžĖĀõ}F™kó'D ų…Œ"ŪŽd ¤ „”Ā_Hį‹41Œ:VH{É8ДҤ”žNā¹®š]ļ$„§µ ŽHšéģ§Ž6Ѭ±ćuļŲ‰v7’Ā߅½k«HĀŽŲč]æČ.¾ūė[„×i‡„É^ŻĘʶitŒKŹMÄŁ’‘¬ū/Īž»5ŌżWų–qé’müWoŌ›ż’oÄń¶"«Øå…tŌUµČa–^Kó3ŸćĀĶKxŁD|PH®n߆Ż>š[.<ź²ąbÜŌxĶö ńæÉ—Ń+’ÄiĖ~Ē%›nęÆo궍7óƒ­w³k†Ŗ!`²¼¦+”Ź¢Źłb÷1“¾kg®Ö’IUNó !_8ƒ÷¼÷PN\»‚mÖ-£móśņ$@ń±#E@Īł?CūÄ_ō2›żåū½„P¢€ ˆØä!L% ]óŸkHa5¢ą G”!2$@ …Ķ'„0Q  mä($” DĘ M8JnŅśŽ–¾Rų2ļ8ŅŚśJ O¹¤¤Ž åȘĀTźÖ_ ž½|­P ą(e¤#ŒRĘ(%£„²JG®kC­mHßQ2P 8JJį+i}ķhOźXśÆ:6”iE€”Āó_¾2uū‚%ųaQUaęÄAMßg’żĮMä6–:ˆĻ%š2ļĻOžģ‹|ļO?)»Ī®Óg²jćZÖlZ[aāĀ“9ēŻ¢­„•KożžļÕ Š³’'x SĘN(š’0żĢ:C|Õl ššļ—’ĮžŪĀG¼€q£'e‡9ėdZ’­Ü9÷š²ĒiĻa;ŸČƒóogk_)U÷½­ļ ,× žå#žEłĶo@X!éæ}cg`+\« "zoy1*0ū˶ł¹6Ł4ų‚4ųńæJśė »śK-RŚ!%•H)‰§µō“#SJO9ŅsųŽ–¾Öų2įųNü;I ų§ ųĻ•īU’a@@ś{]ĒjĀĘ&µvś&LMvŒkŪ° {Ī~ēmyużp?_ƒĪמ4‹nūl‡õ¶¬UK’M,hnćÕńSXÓ6•ī|éqhHÖÆ2cŖŌżVśŸ:¤’™ģ½Ņ’²=‹iü·m€=m’FB‘żv‰·0œ*€×£-ąmēsŹÜßóœńø˜ ąéDļ:ąržg—³ x|~[ĄW~EŪģßr_čńK,…`¶pł‚Å»T3ļš Ųˆį“ž—ø_¬¢©R)ĄF +@^Ō[ @?|y_Īot9“†ÓyĆ#™@’ś œ)Ŗõ*¬S8󔱓ųą1§óҲ…ÜūŌ’gļĢć$+«»’=ēyī­źž}‡™aߑEQ|ÕÄ}‹hā}]ˆ FóŖQ7’øF1FōõÄ- *øįĆf```€Łz«»=ēżćVuWWWUWu÷ Dē|>ó™ŗ÷>Ū½U}ļżżĪ9æóß=,”I€ļ“£O™āżćó_Ć?¾źļŚu›fGēyŗµ™~žé怙€’ž”Ć9M„ū÷`?‚D’ŚvėšųÉļæĮ¹?’0N=µ¬|{Ÿ_]ēŽ~>æ¹åĒlŁŃ”D×ō=?óų—1šsńśļōēĮž–ūūžūś•ĶųļÅfžg>éÜX²sĶ1¤ó—wl¶1ņé_ēŁ•›ĀøŲQ)h£ō_’9B&"J‚j*b‰s®¦Z¦…9GŖNu%š×H'!‰"M¢XŅŲkāeZŃ4r–kÅ²ØŖ™:)|EŠŠŗ\,Ÿ ųĄæ=ƒ’Fæ8E<ØÅŹ}‡×ģ;šĄņe#7żöMŸŪyŪwÆĒz’ ŚEfÜwĶ7ņŪ¾óÖ¤½'Šø„:ė-įęUūr÷Ņ}Ų±b9I·Š’^ņž\S»9żožÉ”’»Zųļō”żŪćżļlōUęŚN»øĆcmlĮ4¼1°o’NĪFł ' Ü”ļŽē-\0ŻĄē²`óMüć(`k„ĀYG½œol«+śmåŪ~Åēņ»łʱc×ńŃźZ^”©K±Ń”‰õ6Ŗ“³éŖ ó›ŖÄ9–zd&Ud}ń!½r=Żu˜r]ī†ū€5«@̇E ŹcCĆpõõ°Ļj8`߉>i c ,˜W]q GZöļĒö_ĶĀ÷¼œgæķ3쌪ŒĶ æa-™VŠ %ĪOxšŹEČ $RJUž,ƒ(BČQW*ų×I‰¢h|¼$É­RńRqXR ŁXNuĄ‡ZV’‰9ą³¼…Ā@…<˜ų<ļq‘„"3ķT “š!7užFeÄņĢÄEȝ›tåkŌ™Ģv“½ē…t™§Æźįx‡õĶü÷Ō­ĻyvŸčßLęé×®½ė7\{×oʇzśq/ąG×6 NL“ļņƒ9vŻ©œŁ9¤Y—xßk5ųļń÷4kš’,ś—.XÉč²ż1uŪä·=h£_»&/vf&¢FkČ?L„ .öDs‘Ré$G-S§©Ŗ„"’jd‰Š”Ąß[źUēI4ŅÄI‘F‘¦.²Ō9—9_‚’øö_ŃÜGš»øīłÆ†Ā‹Ų#ükš[ÄU-|d}‡|4Vl¾ķ_Ī{`ė ÷-9ś5§łeó+v%;6ŪƟ}htĒŻ—ouŽĶ>ꎁAn^°„[Wī˦eėŲ¶×^ŒĶEŽ’LB’ļu}ēż3³Š’n68"Ź”[č³µz’ąyĀ{¬»u¾ žŪŁgĆūŽ×žńs:pIżŃtI}»aGė[[ėėū›mC›GŪ/Ļā©w}—§üL®č¶¶’~‡\÷M>S¤|ŲxĄG¼ė°'rꎏukc;šĘß ,kc!šĖĻń1Oø±²š'>į\98ĘFš+ūW@W0–ßĖO‹Q^īįūéžÜæ8@6‰*5š…1X FRm™×Ggm+Š%ab;Š&w”ČųݰnąšĄ® GP«ļĖS¤VĆæā>yÖv»–­vīłš­—žėw}6l‚UĖKĄūFxķߕw˜’¬ÓŠGZžż-šÅo–}7n‚_\æŗžüø~f/ķˆżYžóß²ćīĶ<¤1#q…“2@ "…"@.õ’v”ĒĢ:”$@(Ą¹²HojÆ&5³€‰/TœˆA Ŗå¶B‘ńށ V RŌ«õńCØTŌņśw ń®¬j§‚¢õT'f”Œ×WUD&Ö*Ro[_£:7qĢ 53på9ÕĶD†hˆ«’ĄƒŒ·1gˆ™!N©’ IćJ!§‚SfhęUĮ0ÄTœŠ†Ø«— “²oż’‹ˆ™fó³ņ¼Jdcõ%™€BQ„tż––ęĮÆ[² Žp²‰ K—ā–,!<ō Ŝäż÷Ź›Śģ·÷:wōcłõõæåžm[¦6ØŪ±É’yįųéUæą‹?:ÆļyN;śžņO’œÆżģ~Vü'zO;éÉ|õ§pū½w¶]~„R”(ŚeUL>ēŁƒŲŽĄ󓁇³’ŻæēŻž;ĻÕ½ńĢ@lÄVk³Ńt„;·ÜČĘn®œ<Č_>ž­¤ł_æģz&āv9ųļć·ŻåąÄ×Ņ;±ÕĖ’)ąßÄ1²ņ`jK֖µ¶ vÉķaō¼ß! †ČTš/ZHü‹’ƒęŖ–©j®"™:KKšO*Ŗåü|ü{Mœ“Ōy­EŽ2ļ%q‘eĪł,ö¤®āŅŲiįbĖ]5Ź|$Å#ü«++ Eb•AŸÅŅB“V{čęī[Ń=č¢Å•Å,n¼Sģ* yŹę+æœŻń£wmMwl¼ĻGÜU¹y`7.]Ī-+öåžeū²}åZj•Ø3ųÆ!oŁ×ŹõRņo …Dh-ł×P qa|L )’³÷ß·øl{ żļäżo żB=ćpļ’@½.wĆū?Pw M'ü×!qp’uKŻÆe{÷ööG—а^ļDgOßdŠŽņC»ņl–ßĶ³īXß~ź_ŸĶŖ‹^ĒæÕ¶qžŒŠćĆ{?š#ž÷)>}䝒6nmŁžńūYIĮˁ¬²Šæxģ{¹·[U€EĀ]āł V+#®ThŸ Šøqęņöćų³ 'ō0żÄŗ·Ć÷’ņxż_Ā›^ Ē §Ō«×~ņ\xĻ›įÆ‡s? ē~’¦+~ŃĻą…Ļ€x |śżpópĻ}ż¬ ~.yļ«yĀšūļøŻĻ¼|mMč·< ÆCū¬Ž!eryĄ¶éY6žP4 jĄš+4Śj]ų'Š$·JózĘrŖŃÄwŻx€6Ņ@B#ĄEõ|ü¼õQŪ$Hé½oNQżÅĘrkĶc•²`=ĄłÉ锑Š\ éJĖ "ę# ‚+B/ęՙj™ *”RÕLTņŠjbĖcƙF."’(’ĢU%©F$.ÖÄk©ōģėšĪiĶ9jŖenh~å=÷Ž|åš[l(ķP”dé2Ⓡ[±¢S“zĆN»fžžßwæČ¶”ķüė_€Ó=µ-W”"¼åEo ĖsžõēĢ`ž ļ’~8į‰=b撍»aƍmĒx±§ņ“\ĄKŸüĀÖŃ'}üž{±¹’=ĶÓ;(ģŗ{ ¼÷yśūm·kvē–¹źŽKź'}Ō¾'sĄŹĆłĪU_Ą”Ķ3œ§÷ƒÓµéŸščzhĪ’;Ķ3ƒĪ³°¢:Ÿk!ėņo#)#ēž6Æ}’¦Ā˜’ļ_Œēū ¹Mū+•ž$¢š6Źü9/‰ ‰z­©§ę¼ÖÄYy‹"ꢖyļÓJ…D+š:/ ńW² IDAT¹‹-×j”yoĮæ9ąæ¾ßGĪ·lÉŚ‘u‡T¶¬:pŽķ«–¦W\÷Ļēmųö_|딿½)éœē„lŒūÆłFvżĻxčŽĖιK¬v{sCu«,ęwĖW±~Ķ~ܽb¶­\K­źJŃævc=\y’ÄŠ’†żOžkµ^±Ūn¾=¢ģ– G-€V›IYĄŽĖV„õbpć§yQóĆeļbõ÷_϶ŽĖų+Jgį¹ĖWpÄ >Ķ{w&;[Ēėf°ć~žDŖü䤹f˜Z`IĖM#Ŗņ€xFš"CŗTض¹ńtS…Ł•ĢS$ÅÆ]TOSčĆn¾crŲž£†ėnŖÆiīŗŽ?ŖÜ^“Nx\võD’łƒpņńåg‘2:ą®V¾=ł(–~4ĒīŲΚķ÷²hėŽ2³¢5̶$t'•:‘®ńpoč Ō?“AĘI€ `,§U°ģS¶OC™«?¾žHĀt¢€äłŒI€ Šh× \'@J &bq,”# `āŠęZÕ¬¢e‰¦Ų“¹øToŽœ¦®ji$–F‰F„€:I}½:€:©¹H§’ØZŹęŪGæšŪ‹»wtŽŒcü±'ą>“³'«ÅęüÜæķ^łį7ņŠĪ­|āÆ?Č’ō%^žŌæ˜4ģću2Gp$ē’ü[lź$8uqć å’o\ņķ å)·ļąžś˜ĶŻV.^Į{_žvę ĢcÆ„+Ū>ąæ›+šß › ųļ¾–6ėüwm·€’i=哏:u<óų—rėęėøéž«ūš§æ…µiŻųŸ(Ÿ#šßįœš/BmńZv®~!jWœ°|Ć6śÄ„yzӃ2ß?˜LŹ÷/&åū‹f"Ö$öW×wKÄIM5Tq–Ø—šz’²" Iä|ĶE$ĪYźcMü€&qL*͜—<Ž-§e¾2üĒM9’FŖ²[Ą?0-ųpN,’<IX°Pó„+FößwރkŲørßźó·^¶ć÷æšÖóĻųŽęĖ>uŪč–Fmf›~WlųéGÆłü³īßōĖnČĒīæ-®pĆĄWĻ_Ģ•‹VpĶŽūpóŗĆ¹gķžģX¶i3ųo%|ë߼ļįČūocB’›Į’\«ž’OžėV­­¦ė†’ŠķZ@ėVż^°³ė«³Ėķq;ģėÓ<ŹNoѐˆZŹē-ćs›_Ļ)ß7¶Zą8ƒ'QO į¢Ź<žžÉ÷ėłqy+ppżs‘q8Žß4·Łmcę,Åx6æŪņ5vб8¹šurw<,ϰĮ“õēc£ĆČ 5+øU`”'ģĢ'“Mq“0Q°I E»ŽAą¬ćyzģĒOµgkT§ĢćÆÕņ=›aõ^“Ūļ»67靭Ż{ņ;Ņą@IĢŌĪzĒžģÜøu[ßĻŽĮ¤K–3ÅūŪÆ&€‡ƒf)—?,ķ¢ P„ĢœF„†€bd™•W¾H2s•ˆ"˜4é”ćä„v€Uœ‘u‚€ÅŅĘś²":1–fØę¹ųz,›‹$ä™i«Ō_TźśĮ{ Zב˜f&j¹üx¾?ŌI€`āŗ^B‘›j jӀø¢€fM€śÄ43FŒ%¤iĄ`± ©Óœ"ųJ€TšQ dŽĢ‰šĆ,Ķ‚Zh5äÕKŽļ†Ś’>4“}č¾Ń ēmŲqÓy+ń‹öX}ŅŚy«Ž^VY¼ļ@eįš(^°ŅMłÅX ŗ?$;īcṁī¹:ŗēŹ‘"UaX•ķń`s„Āęź6Ļ[Ź–%+Ųŗbo†—® e"¦ ū‡©ązżk żoצ—¼’†µ:ŗ€©%’Ś8ŚĘ½’6»Hõ’‘(ü×Īö„žĻĢžØ €¹“Ægt9žųćK—¼ž)x-Æmŗńę(ßó>üŌOpysŸ† `»ńցml9Ö ¬pĀ–µ`›źķV¬Å6mB֮ºY’a A@;€c““|!·ļD–ߏ¬š<×6`É|ŒaŲ!m¤Į&Y3 0 Ģo:6.ŲR0nĢR$ہ¬Yȋ§™Ŗ­ø|ķŪŪwÜ­+?oŻ ×®‡¾aāųÖmšĀgNl/hYŪlu’N?ž%k–qĄÖaīŁž,Ł›ŃE‹É昊.`·‘Q) Š« ą%䣦SH€,'мŔ\oCØ~«‰$„ Ķ›H€f ßŠN$€bŠXŽÆ»Aēø~I@¢: J ˃…\ŌÅBƒq N•,Ę@‘D Ÿ[ŖBģ—š%"Vdbˆ™!äj†™W±™¹`fuq@+‚%—Üvw~ū;«Ļ~—ŖÕ #š¼Ž]Qąq«Y5ÆRÆŠŠ§ķ·–-…’8;°õūąŪĖc”€SO€æ³s’.¢Į32§ČKž”Ć>ś5nŁ9Ħ°mŁb’ØBhī6bHÓOk Ąß+ eQQVȂu$Q €,£hGI€4C©“ā0e¢Z@+ õźI€\p„F4€Ø˜“¢‰°2ø“ &„ jƒ±¢h"ź$@Ķ@¼ą(B‘;\,8y­śĢ#ö^Ž–cUÜĮ‡"+VR¬’=6:–2€ōš>=›Ś¢±§WQU/\„Ŗ#„v‚|ē™äżojpä~‡°~ĆĶ“ŚsŠQœłŒ—sžÅßvŽq÷–{&.*Ź?¼āœpč±Üøń®¾õŚ>N˜ŽĄ_žåŽŃY’īw ųŸŽ8™CĀ£żīžˆ­i§ėš= L€’‰ˆYƒ’Om&ąr›]KlIūݻĂóŒ®8l°Uy²ÕUž‹bgD\)ō&*Į P‚’ P˜Pˆh¢d¢š‹HV~–T”Ģ©&ā%U!UƉ8K½Æ{’½¤NCā½f.’,ņšzg™ÆhźĘ•ž-§Å8ų,ųHZĄž°’F:]+ų·¬ģ‚XFŻ{eNĢ;±‹ÄęĶ×b°ŅÅKŻŲČö°mēprߊŁüķ;uaR+d5›ŸdnA‘ƒ”Ŗa(&ą½7¼“qżEj1ź=#γ³Łöź;ē/`ēąbF/clAų«Ćr9‡QużkĶūoµFŽæ›.ļæåålV”’mņžĒ×<]č%”^T’ē2ōæßŠžV;}OŁæ]jōĄ®¶Ó[H€ÓžĖaĀÓß­,ąM_aąŗŠßLĻĮę·Vž×:ŠSö?Ś:u=»* - 0Æ= °c+ī„Cx–ČĢ+W¼žešžOAĮūß{×ӅW,…­Ūg:źĢķi§°×æÄŹ‘a–īÜĮ}££ W•%Ū‘° ū¦+ˆƒ^I-o”“%4Ɍ: Q½t`ƒšu T·ź„;‘¾A€xčJL*8  Š5—l%De¼L `E½ T'”•°`bĘIC|¤¾ź ź$€Ļ±"V‹ åŪ“–„j“\-‹Ķ¤S1Ė L‚˜„@¤, ˜KLŹÆ(B,¹ąŗŪĆ ū¬ŠO?`µøöJŹŗx ś˜S(nYO±łŽ™’iĮMgš026Ā®ųO=éI|īmŸąó}™_]łŌ>mC'ļ?”į’7Ü9įŻ_08Ÿ÷æźŻÜżĄ=|ņ‚ĻpīŪ?Ķn.K/“,īeņ"N<üќóĻsõ­×²fłŽ¼äÉgpōG`×oø‘ó/¾ ÷Ż5åœvč_›]sž§›§›…āóō0T/ąæ/PŽ©M“J_ |W€’žĻ¹ė”9ż{ųĄ6ø”Ń\kā`“±ß’‹ļ(Ģd"ä_(#ƚJüICåß“µ‘LTņōK&b™sš d8Iđ¢šŖ'ńe€Ģy­yo™sš:§iä%sĪr­D©sV‚/¹óš»XBE5·8ļ$TŖQAQ+ņŠ;ųĻshÕřų§žŽŃü7‡ž» –PĪ­!Ÿ4‡Öõü"ĻwY¶Ąt$athy“sh4<86šE£Ć”:6”W“D«YJLęY1ŽO‚$ Yä4õ±$ՊŒ¹(,ulṯē±Ü5ō~:‡ż{ÕZxźvŽ’ZÓ8ķŚĢIŽkčš’‡śæ§ģßĆk{vmĄtvšč6ūtĻK3>V™ĒKĒą×ż¤TB`üÖÖO*@³5¢vE*@Gk ·ß– ccčā*§N3|W{ūįs)żšmĶŽpėŠĄ€»Ėu‹Ł+­±ldˆł;†Ų¾dY'æ©ż’EV¦@½c˜¼ ĄČ ¤ńŖå%„¢ ^$äfZ’$Q© Š|Ćń‘„4-”Ų͘š@(Lz%šW'B@$EkGؘQ'DĄ$Ėx‚Č#„,@¬TÄ,o±ä–bjA‚If†ØYŒ™Ć ’YYBJQ†Š…<”Ū……ģŹ»ļ+īŽ>R}ÖėtŁ`ūŗŹQ„;ņtåŽä7ŻIR?öæ§f›‰#pJwž¬ßx3gœžX½n*ŠéLx’æ:eą#÷;”{Ü̶įķ毎õ—ocŁ¢„¼āCÆGÕqŠźż8÷÷æ™4“PF¼īŁÆäŠÆāÜ|…“x ’üŚ$rž[ļ½§ŹŸ=īYüŁćžÅ·~}’ņO“¤I_”?°ÜĪ`žžHžécļ °ėī‘ó.’=Ķ3Gąŗß¬¾Ÿ©ē<\=ēąŗßĀ.’¦£Ė÷'ķ¢šP<8lcēż¾Č6n3!’‚!¤ óoł/Øēūć,G5É[óżQRI½—TDŅŗŲ_*ž4M\DI8Ė\TŠĆJE³øž+š«“"Ŗj!A*VÄNĒÅžœhČ)Įˆ°čį’i>=ųwb£”=ųØÖŪU8ˆę“ęŠĖ]JĘČp-r#Ć©ĖF#WĖĢ…i6š‹e^ ŒžĖ}Žó®P'a0&7K+Ž|~…¢ŗˆB=f•2üŽ9¬qwEgŁ«čŸóXŲĶy’ōŠčīżļ%ō’*ąé5Łļ’ÜŪ n%¬™ŽZI€^ģō–(€f;¤ÉóŚlYĮsÖę)æī6žĄJ@”Ž‘MŻRZ£śIh%Ś„LŃh— Šb :ÆĀcŗ]‡élž üč8ü@X¾ VÖ#ē Ą±GĮ~Ob¹Ļ BŲµ„€wpśń¬łŽoXZežČ0Q­@ā:Xļ” °»H€B±ØŽĘÓ&H€ŗ€V±PĖQē§Ø‡ āK³\|4qŪń‘„š·PUŗ’y@pbځjŅ ČsŠ6$@P Č“$€Ć$²ČˆŅ,ˆ+II ͱ`y”ÄŽņ!öbT2µ$O F\˜ ÄB3Į$—Ģ, ¦Į‚™„R@!„āž!ž+nŖžvĄźč¤}VH‡²Ź²b%ђ„·ŻDøwÓ“7¶žĄyĀy‘ó„ŸĒ—~|^Ū6ŅŚļ’Šä×åšu‡š›~;¾ļł§=‹'’>žõēę»oå1‡Ŗcż†›&Ķ3o`ļÕ»Ł1²“wŸūęUy’«ßĶŽ‘¼łßßÉ­÷ÜĄźå{óÖ3ĪāĻN{6«—ķĶ›>õv̬§sžš?c4=īÄN×l®Ą’ Įņīżėu-Ūō7ćō`¹Oš?-(ßąæŻ_ö®µtp cĖ$ųīIqÉÕ÷ŲŲ×喚Ńł/½žfenyh łĻń|©ēū‹ÖĖž‰dźIT$SWŠž©’śXK×DĘæ¦„Ų™ųRéßEV“–ł#!jRśwhZX@ ž„ „÷ žCĮæ†ĶügӃ’-Įł–¦Q,W$¹‰„bŽB'Ή…I1–YØER+ŹhCČš± ZӐ–“Ž_®ŻZ+$5ƒ’¹żkg»"ļæ—’gč’‰ūM=ē~m¶Ā­vöōM€ŻwśŸ`¼e[m7–lµva0āų@(x<ōĘØ5Ł €j…I…źÖ¶Œ±‰ö¶`iū¹ęÕo@­„“ł×7ŪŅ€YŠŠ…“°FŽ¢ŌēÓP”’7•œō2ŅT>0Ō_ˆr€¢^~PćŌĒmōĶsŠś¶*åæ åš) ;™ōkō·ó"–EE4׹bbļ‹ń2Z– ”Šę•H3©XVI|¬©ó–łŲ„Īkź=5W!ń‘&źI4–š÷ŌŌkā"jĪiĶ9UIœ£¦B’\|Ū¦±Æ^s{ŲQkž L6ļq‡…?ę¤:бYoąfj£Ły°'÷÷ž’č«Sŗ­Ūk-óęsŻea”ÖģĒ[^xæŗįržė§ßąčŽźšęyē_ü «—ļÅ»ĻżķÜŹÓNz š±ó?5žī}p3oūĢ»łĪÆæĻE—ż°7š?å,¦kŠ rīŅZ]żæęI“4Ą%r‰T4ó‘fql¹¶)óM*óW‚‰0#šß|¬ügģ^šWŹg« ™9‡ h10(Å|Éóź ƒK%_ŗB³y+ņlį^’.•|p©äŸež4ÆĪ£ˆ+„Ŗ+ųo~‚¹żkm×üļŖ’“Ś<‚C’w—šßž²³·=@“u ižAµ2M½§OóƒoĶ—©Īć{€xęś/•ŃDŻźi6Āqīü4K0†žp·¶¶k&V¬Å6ĖV•ū–t -j0†óīoßnp>VͰm޵’ }›g+ P/ ˜„ČŚ„ż—žk¶ó/‚÷ĀyŸ‚½¾~¼?|åĀņų^+ąüsąÉƒ“ŽƒĻ|pB#ążį­Æ™<Ž+^'3›•vąB`a–24” äį&š­ !”™Šś÷×Lh(ĆĒū×IšHubA±<Ļi&r&H€Iē¢b” Ģ7“•/>½’q&H† z K,5Ķ5h„E· #EK”±±÷9±åIǚV"²ØŖiä%uŽŌGZ‹"©E‘&ŽKā½Ō¼—Ä9IŌIĶEšØJŖ*‰:M¦ķ;F?Å-Łśū»ŖWȲåųĒžŠ®Ł‡)oä=y°{’½;§4nx’æqÉ·yhē¶)}ŽXw(×ÜvŽ{žń’£µQŽwīK ½’‘ÜæķŲžąųčĻ<łOyź‰OāÜ|…+n,ļ®>äʒæøī7Sę ųĒ/ż3?śķĻśņöv¼ĆŁļBö.’mģš?Ą±'; ųļ{žY€’O³Ī˜ƒ‹Ūeį}'3°tž vīs,é¼īBéu›mč_~‘eė,ƽž*… E=ä?”@ČEČ Ķp–ā4A5EIp’ˆX"^kꨔ’ˆ£†×šzj‘ךó$.ŅZģ©Å±&Q,iä5­D$ÕŲÕ¼×ĢūÉąæIī| žćšÆušLŗƒ’€…T¬ü«– ½šŸńš€’ń÷”4%­å<ęĘ2Ė˜«’+\jqE‚óbĪ‹iČ IŃ č[Į’¤cD’¦ü`Śō«ŻĄ«Gz’“¬Ÿ’õcķĄ’® żßī1ōæFiŲtڧļžŪm¶‡Ųvz—fk8Ģ“>Ģm?–Ü}9/‚é’pցm½×^„ļoy4eøė¶bķļ7^Ą!›Īå)wž?žrŪ…ū½/ŒY+dEF^t¾TsÆų?õœ¦nō;OwOųī’}7ž…מ^ōoŗåĢ"Ś”Ż8½-i÷’"Ŗ2¼śHFVŒig”æ0š1r޵Åč—®ĪĆHŃźõ/L(L¤(ÕüKą_zż5%UÕTERē,qNē,Q'‰Wjź„ę#©9ßˆŅ’D#’ČėXģKĻæs–Ę®Tś×&„’(²L*šūŠ•ÜŌ‚o*óēĮćą4x'”ų÷AÖNéŹ(ø^Ą?ģšO–Ń ü;/6übĶą=%”šk°4 –&S€{ŽüO+ś×ŗÆ÷æyœNmŚåż7¬[Žג­żzČūļa[kŠĢIčk”št”’½’Ķuč’›¹ķ!ZlWFLg­<.ę_²Œw^ūł2Ææ[xĶwßĢ‹œæB“ ģ;%€‰(€įĶč/ߏSņιźsÜ>ś æKG¹Š>×ųb±“Ÿīų!7>ō ŽŽLtKh°Õ67¬v7Ŗ8›|cl› Ä~J‘¾,ĻĮµüŚ7Ü k÷žĶس·EóqŖEĪ`’giI4^$`4Ė&µ£‰(ZH€Œ J%į^I ¹…Y’T5t"4ˆu#T± %qAQ@Q; ‘L¼ˆ–c˜b8ˆb )iH‹œ“P©ś"öZHÅ /Z8§EģKÕēøb¹D–{ƙWŸz%‰"M iģ,‰"’ČI"5IĶ{QI\$5Æ2)%Ąy­å7Ż÷Šš’½ā–ģŗū¶w{|Ź¢ÅųOĮz8āū·˜=ųŸÜał¢e,\ŲÖūß°#ö;ŒėīXρ{ļĒ«Ÿž2¾ņßēó›õ =aķŠÕ,™æ˜ė7܄‘÷¼’Õļ"ĶSŽõļŸTŠšö{ļdįąŽŚ’šö+Ś%Š’]įįf58> IDAT ęéü÷4ĻĢ£vŸ»šßK³’”¢3± P>ąæ§yfйėĄBmńv®=–¬Śż »q‹ }üyzսݽž*¹ 9JnŖ™8ːń²~IņÆeČæjĶE®¦NjĪ5ĀüµÅZ‹œÖ¼×1•ĄßǚųŲ§Q…ÄU]-öšiÅ²ØŖ™«hhVQĶ©XŃZę/„ĀJ’ Ak’Ŗ˜§Źüäyž°ƒē°fšO/ą?xƒIcvųŸIŽ»6»+ļ¦Ļūļśßf÷ĆśßoYĄ=Ž’]k{€YX+ ŠĪśIheʞöI~.Ā„ĄAw’–s†..Įak˜ĶWį/xļŖń= "Ž>öŸ¹ŗÓ<æł ‹.}#}ÕŁ\W q”¼c/Jņų&~Žp1°cƐń®?ä{ÉÆXŌk*@/©Õ©7Čv$€ó;O/öø“Ź’Jæß\ ēžüٳuö6 ČŒ8¤DE mś=ŅHÕ2ܼoӘć$@£m  ća‹%ąŸŽ(’ģH€N$@¹–ö$@c%“H€¢@k& $LĖ\M_),-B ę½/s;ćP8BIhŽ“"ö’kÅŅJÕR_ÕĢ{Ņq]Gā*$Q$‰w$.–šµę&®Ģ5-S깩ź¤&i6VūŽś£ß¼ī.Ŗuvq‹ k×į{²rUĒf­€a&ą:DõąŽ‡xŽ{_Ęg¾{nŪnŽy]{7lø‘÷żļwrū½wņ©ożæI­ŽŽæĢ’’Ż-×pÖsĻä°}į½’ł!¶l`Ņ ]žB(xĆs^ƒĢ$ß}®Ą`y&ąæūZfŲ¬ošßy“Żž§åsžūėŠ¦uąVßŃīż›cšŸW°sķ1Œ-]ŅłUՆFĪ’}1rīoó0”؄0Åė?®ņ_˜‹h|Mė!’©8­‡üKņļ¤&Žš–%żj>ұČSsNjĪ…šs$¾9ßæB"•ŗŲ_l¹ÆF™4oVśÆx-*ÕØpNB¬ČóÉežšĮģÄą_CaŻĄa…‰“]žfžK°_’0žŚ‚’Ī ü·³™‚’v¶;󾇚Ūō‘÷Ӈž·’»2ōśóž÷ā@ķƒķ±Ī¶§ @ėµ,`«µ+ ŲĪNļR`lAÓ±h>g¦Cü’ĄK.ł‡śoņŃKöā×ūĀĪ»~ǚ±<%¼ĪŒ2YÖó©Ēæ÷5ßænnż•«.āÆņŒw,-O–m¢\ |ėØÓųåŖHŗæœĒü†ń”¼ĘĒĶ8uē&>3°“·–d“V˜ÓŅ€c Ņ©8^oö7ƂĻ}µžs ķ’÷ư|ÉlF½Å1ųˆ,ąC1ł:8y© P)°Ā!»»:@į2sÅDe@¢z»ze $²i£Š€V±¬†DЁ “"`.ĖE#_Ī“‚…,źÕԉ光¹Ź<uF^ >¦Ž[žŪ¤ėT‚õ²ģ_såŖņZP_ä4ŖŒWbA”QļKń¤`āć h(ŸKBÄ9‹³€d6Qf°&N1_ņZAZA¢X"ļ )L‰s$Ė%®hž‰YœšK] F-—`.3ĖDC‘… b&¢± !”Ė™Zš"”ØW 1£¬` !æõ‡†6nų“ƒWGGķµØćŻØRÅuįū·Ž µ¦;Ęå ·SŚEĮh1ֶ偫÷£W8ńšćŁgł^ś3ÉņlR«£8‚ŃŚė7ŽĢ)GœČ‹Ÿō¾ō“óųÕõ—Ń:čķ÷ŽÉ7/ż.g<į¹¼š Ļåü‹/lj3Ķ9÷ žO=ņdžsŹÓX³|oڹĖn¼‚\žßlķ%9jšĮēĀ#Lś?Wąæ—k×¶Ūƒ’Ž&ķ¹Mz§ė8»ü÷bsžēŠĢŌ.Ū—tŽŹi'Hƹ×ƾsC†3“ …!@]åæ^ß! äbZˆR ’•*’¹*4€LD2§¤ā$UW’_IÅkŖõźÉœÓĢ9M½—Ü»ŗ°«Ó/EäB”Õ(s±ē¤p¢…VCįE¬YéæµĢ_Ē|˜üģJšŸŌ£ēś’ćą?MĒĮ,&&ƒW`™ōžēRń®D’&ŁnČūļ%ōæÕvuč7įæÓ{$f*ü·ĒūߎvÅżūĘ:‘Ķ$Ą{[޵#ĪhپøĖµæäŃMŪ?y G%ÜŌq±Ā_å­ĻūßŲŲ2ž•oę 㟠Öˆp«‹łä^§ń_žQ¦/=° Y 4€mQł’żßaåč&.5cT8słółj£,ąr`$BX:™Ø —Ūµ6$@ki@€f`>Ö4AīŪDōŽSyļŗ•¼¦µO7ūĮÅšč£`eS‰ąó¾ Ļ}*ģ‚ļüdrūćŽ„ćšŲ¾ē>8÷ė„ÜĖžģ;¹ż÷~ —^kö‚WżyYN°_»k3į ?㚁y\±b—­;Š[>Šķó0ɋ[äåõŖ…+?·÷cšH€Nķ\):ŵkCSŸBĖ6Q“: s‘DMķ$@†“”†D‘§H(JŠģ!ņ“ęńž4Ll‡¢āA}Y"ŠJŠļ¼§•h ź 4•šÄĮW¾ż4(åX¾q¼\ē8CZŸ+(ŅØ ŁL”ŪuB ynb"‹Ŗ‰šI’åĪ ±D\&¦yb>ĻD Rq–™Oó…Ģ|QˆĻ,Ä!_‡L|Z„8äV …EE(El…D”°8[0oAb3óV„Čøbqõ©‡ģ„‹ŖŻÉ³¢ l¼»ėŽqa½f›ņć™ī©Ń#ųŸn×óN{&ļzŁ[8ū‹ę;æśĮ”–_žūϰmxļūĻńµwż›¼—3?öę‰<’–A*U¾üĪϲrńJ^ņWs÷–{zööT”æżó7óüSŸIšgl¼’. .`Æ%+įļĻ=›ĖoģņŗŌqžī`xĪĮßóĢüwģŚ 2Ęč·®/²õ[B=ÜßL0D‚Pż‡`ĶåżTs µÕ •\±LTsÄRuZÕTÕ2qšŖ³LK¼#Uo™s.ńBź"˜ÓL½ä±'•Xņ؞ļ{ɉ}į+VÄ"…EšCž›ĖüI„ĄtJ’hšO©ęß ü7’Ó:ŲwN¬ųOIʉ€llØhõźē-‘½(žW„Šœ÷ß ü×7÷„3&ī[Ŗ¬z6[t€æ°”7@KU€9* ŲM Ķ&i¬ōd÷m ~8±}÷½pįK±æ;6ĀeWĮĀł’šaR-æz'}hI œłŲ¾sāųW.„o|žõdH3ųŪō»ŗŅ†Ēz»9=Üéź°ęŒ¢(_ Ē”r€šK dYŽSĘÓŠÖt ˉ›ĆōéZ¦d"!§^ź/Ļń^¦zčP>0KU¬]:€«æ¼4Ņš•ØĻ„Ӭ摊H TĢū2¤Ó,µÄ2«D¾Šzh¤šGUĶ¢Ų ļ}{Ė5¶¬iY*ŠYęUēC*žÄyK£H“Ø¢c®^!Ą{©W pZ'‰zIPRœKņ;Ü:tĪå·%—Žł@!ŠĮœC8}ģćѽÖL:Ō7ųļ„IąŪ«n¹†_ł³¶ą Rįą5rÕĶך®—¾ļ=’’ŲüŒ%5ĪžāGØÄ1ļ|ń[ęü7Łėžõ*žź3¹üĘ«xŽ{_ŹK?x&Ļy÷_š†{+wŽ·÷Ż=yhŪēžxĢćxŌGūvgsž .d^uŽn’ÓŚtąæūƒ’=Õū}Dņ<Üą?Æ.bēšc]¶_wšŒä×ĀŠĒŚ(ü‹4Bü›Ėūe4Źū ņ~‰Š¤N,ŃTÕœs5WŖü×ēąµębĘĘCž#©9„¼÷Vė!’UK+­hڜļ/Ķ£ŖåķņżK±æ¹’9šÆE=¤‚’V…’™€’vÖč× üCļ¢s‘÷?éfQņo¶ąvč’Ū}¶' ‹õš p6“£Ś„|©Qݬ5ą˜WR;ę•|ųls».ß«Īā•EĘG(ź‰Fü󁧚ń_ÜLÆX‹± Y¶ {č~dI†m‹Õ/ą'w‰»0ŽŁśSÖ,}÷“¦Œ¬šŗ–Į.©ÕA¬9 :€„łÄö0MłS)vZs'{ÖSąÕoƒ×¾“ÜžĮÅ%`Ų1 Ēg<£}ߟ\ZV xΟ”Ū·Ü ż^ņ¼2"ąKĀW’ –,*+¼ōMeÄĄš½ś[ć–ķ(’I›ŅˆĶ¶+Ó,m¤@Y®oR:.ޤńt/ŠĢœ‹$¢’véZÅB ɲœ(ņęT,ĖL‹€EINš~|]łXN<ą­  N,ĻsńŽ—/:ABވČs¼÷”5 |(,ؓI!’±XšB\äҚ% ĢÄņ\é!˜ä4¢$„€h0Ѭ°9Å, ‘ˆef"*fĮ¤N€Ē²±T±e‚śŠ/HsĖ¢ >3šŠÓLŌāŌ,•`±pj.5˜˜Ė$dbĮ äEš !³А©Ķ$˜Z —Œ ¦Į¤¾R !½tĆęģ¦v<ķ°ÕnķĀŽq*R­"‡…¬Ś‹pėM0Ś¢eÜ VžŅéD2\wĒzĪüŲ›ŃńüßÉ@ųšu‡āgՒœvōɼķ³ļaóC÷O;×uwÜĄw~żž{ź3xō!ĒpU]? S‡^Įņ‘ėćeOy7l¼‰·|öļČņ "āŹ[~Ē•’ݤn‡®=ˆ÷žå;8pļżĒ÷ķāsß’ßøō[õhŒ>Ą’4öžģ,FÓQ>ržæöt>³²Yy°{qK÷3Ļ€’^šĶ ü÷Ī]͹čß®’…Æ0¶l?²iŹśäwo·Ś×Ł=ĆCԺ׿N€T¦xżq– ’›×L°\Tź„€d¢’:o™ˆ¤źČŌI¢e @ÖņƑe‘ÓĢ©å¹TäĪkī£PH%ʽ·ĀÅR4ņżc§ĮU|ˆŌŠŹÆŖK8é„OńOKŚ€’µ-c4XĄF$@“€Ü@}ūwei@(o†>Āī~€ =tŸdĖ—”åūnø¹Üžń/ąi§—ŸwĮ¢…»rŵpā±Ū'Wü¾ü|÷ęrģ%MŒĘć—\Žļ į–@®B&F^qӓćŸē0Ą—DY½SŹŌH€¢Č¦D@)Ų\J ŹņŅs^g¶³ŗą_•/ąe²'æm$@>į¹7‘PXЈhõčOˆе‹65J@ELL¬]$@#a¼b@V˜š˜ŌĒhD4GØbр„ ©Q„T¬ˆ}ˆą¼¾ 礈b)4–"ö>— YiU5ń^SļIcÆIäCā#)«x­ID=€šóšØ+Å©|,5礦^ixpxhųĖWŽ>öĆ[ī³$ėZT–.Ēx zšįŠHķčŪ›;CÆp›ćĮ­I€£÷?€gŸņtĪ»ų.¾ę—]ĒiŽužĻĖü’ӎ>„ėZśń”æéyÆ3žńĖ™’ģ5ņŁ7‚UKVpĪ÷>Ļ’żo9ūĖbćżwń–œÅKž× é öŠęøƒÅę­Ż ’žAlēIG֭܇gų“ēéóœ§k¶K’gČÄōžg‚«ēüO÷[˜ų7uŒ.[ĒŠ>ĒM ž-É©}{}1ü©_ēŁ½#"e®æRˆJ!"¹Ø“õś«j*N'6.ō§^kźØy'5q:ę¼ÖŌ˘/Õż“(ŅZTWł÷Žļ5ńõ®%±×ĢWČāŲr­F™Æ”ą?-tĄņČIhäū7‹ż…”žežv'ųb 3’½€’|l"2°ų·4 ķÄüځ’‡Sń&¢“ņžŪ€’¹,łMļę]¼’ķņžw§ź’é³ żßc³³=Ą4ÖkYĄ™Śé}¤t²ę0œ_~‚eæū>? W™‹ųŪuoēɏś75Śt+ © [2qCcJTUÆ„[I€v7“VąŅ[ø½Ķ²§µē=¾ū3øõNXµ–ÖE’vĆ¢.u®æ =pbūš'ˆ„-²ńĄÕ«ąžĶżÆļ–ä(™(‰‹I£˜|: ī<6å!øI²,4“š’FJ@3 ӒYÖ7 T¬™hś0‘*ŠZ=@c±OOHÖ8>ń‚ŅLˆ–DAƒh&e‹zū2% 0ĖŅrģƒ‹]p¢E•į¢QU3[įœ+āŠåā,ÆxM}\’ŽK)‰)«Ō¢HĒ¢ØžPњ÷’Ø£&Nq–HI ”5­EŅüź{¶ ’ūå·§×ܻݺd ЬŻwņŠżęQ1@ź°»oļcÓ<ėV®ąĪū6šÉo~¶móN»6=t/‹ęu(ķü¾ļ”{ŠŃüōw—pēę]×ūˆ¼ņ=€šśO¾•’üńWųķĶWńƒ+~Āk’õoųķĶWqęÓ_ĮŅK¦Œńī—ü-ļxŃßąÕqĀ!ĒńÜSžĮ)GœD%Ŗt\źšå«Y±h9÷u#ę ü·\»ć<†—<ń…=tėŸš˜u°Ā\[Óu+š?-(ßąŚæģ¾,YøŠūO²h ÖEŻƒōŗūĀŠĒ/ÉĒ~µ±m„ūA%J…)D5!Ÿ¤šļ,5!E5™(ļ'‰Ŗ”•T<5焦5§’اę"sžÄyóĘ&©ü×CžĖ–iŲŲK®UĶ|ŊJ$¹óZH5qųoäū7‹ż9/”„˜ ž]Ģ$µ’ŠsE$ȳƒ²zŗĄ’gļ½ćä8Źü’÷SUŻ3»’VŁ –,ɖsÄc°ńƒĢaŽpG:²ū’9‚‰G80Į`ąLĘ`ĄĄAĪŁr–“rĪŚÕīĢtwÕóū£gvgfgwg„µ1÷Óóz鄯©źŖźŁ™īž|źó|žtōąßŚTG’¶ š’·,÷×*Ś’żmm˜žµ*0y’ ė®³%’ężH’÷ģžļ^ģIh#žI©­ān øö晶åI®Ö'šŗü*·Į`SĄV1tuµßō9čźÕȜj*·0å( +0@&@Ī4¶“ Š·³õšS ÷HŖ&„I„>²‚-;K¬ßĮœ‘Ī£>Nz|ē§»ł?ä €…ó‡>nGOć’¤‰°³zµ/s€ś?¶÷0źøķAJŹÖQŠIćM3^`ęĶ:“’!ņ›įX„@NŌŅ¢8æY×§ä$@dHŖ:M…(Ź ,j«Ÿ#cŃŌ#Qš…4r¦–@šAäˆ" iŖ¦ZM ”TM- :+eđS$©KčwčĻ‚‚ .Ė0Ī)hƒĮ_M¾o‚WŒm4ŒEI X‹Ģß3sotłč†5ƒo¹cžŪPŌwłü/¾Ę ÜĀ“k—‘dé 1ŽZx8÷>q‹y„ł3rGĻu[Z³v£’ ¼ü„³ųóķ¢Ļ@¼ā„dī^s8ļßēŃՏ7tóĮó½Ė/äGü6’pĢ©\“čw Ē:ļ ^¹„ƒęĄgŽųQö™Ń/ĘbKĻV>ūó/sĒ£ƒ÷]ŽZxė· hŠŻ’S'LĮŚįMŻvüÜg„Ż’QĢ#Ć0ŗ—[÷ šßNģųßõIóČ:&Ņ7u>_Ū­„Kņé²ķ rĶåż©¦Īå&!—ū擉ØG$cR#’‰Ńc2ASq&5BbMDH“D¬¦Ę˜¤fōgÄ$QDbŒI­5iä$µV3Ū#¾^ņoė$’źBp6„ś|ƒŃ¶óżGrś·¢’e„­G„õłžĄnDūģ0„žØ3ü«~„Ū’0{š_ģ0Ž’QŠ6מzŖL’š×÷tęż÷’ŽfŽ?ģ‘ž’_‰= €1Žvä)OE*ĄCoYŹeäą’‰®)œ\’­¢• `ؘ:]ńļ .Ū빃9ÓSĄ čhSš•Åź°PD;Ę4ĘoŚĪ=£X6›ŗ4\z5¼ąųʶož/¼śšś÷ĮwŚļ’@oź.žµgIļó<’å«”Ž0}éJ( Ć$·Š;Ń;¦CÉ8śāNŹÅŽ\Š ƒkNx«ĘßR ŠÆˆūĖę/õ&€Ę¢)yJ€1Ø)ęæÓB Š!:Ņ 2śÕĶJē$T4晫 Čr4* B,jŌkØ× ŃXr%€©¦ <“ƒjUĘ)Į÷«lš”9%Ą9ŃØC‚j¢ "¢Ä.`%ąŌ;Qo­ųBѤ¶`²ś”ēLj­¤ĪQ‰¬I"ėLÅØHžPv¹A`ŁÅ¹I ‰¤,NʃŌN]·£»ļĀ»–öżö5ŚSV³.Å"ęĄC1Ļ>™>£±­ÅOCtś„6vH›» ,ŗļfVoZ;ØĆ„Žń|óŻ_ä”#Nh.ļōϧå4ģ ÷ßŅÖz‡nŒ±œ|ųóŲÖ³Ū—Ü=ģ"ĀŁ/x%Ūvnē·7^ڲŪĆ+„œT8dž ÆG.bĪōŁ¢˜Ææó \³xÆłü›ųĒ’z-ŸųÉē°ĘņÅżÓ&HŖēĻ܇O½į#¼õEoąĢcOēUĻ)'|Öԁņ‘žF»ž¦MšŠ«Vß“-ä¶@ģąŌóģųoóó“ŪąŒŹw5騈“ŗČŠč™}=³ü‡¾”¾Ėń=ēŻœ„ĖwxŒōļśc›ü‰å2“€IÄhŠ5•¦]’¤¶ėļ\näg"ŹĘIŁ8ŹĪ™r½ŃŸs”óSq±$Ī‘˜¢©Xk2W ]kÉĮ_(F^ŒhdŌ‡ąūĮ02|™æœžÉ2ā­åh8³?؂Ē šŸŃ&ų§Mš_ū}ĄB’L’£4żü×÷ū{Ėūo.ł÷L‘ž7G;ŲjOŒ.ömĘ®¦ W·²>NŁĶT€%×ņE”£–ļ=›œńEVÖ··bōŚMøõ;˜eœh<oL˜2ĀšĘŠ * “Ę“-YG‹§õ‘#r0}j# Ēėį;ēĀÅēĆ÷æė6Į’ü0oS?Ob(U`ź$X077Xæ)÷ˆ‡VඌkļÄ„l =&fgŌIā"B\ČĻ»U.\«ų[’¶\śń€ A¤)6Tv P«P#|ČēÉj}šH€z¶Ę¹Ü ¢h= Pęz®ā¼:@«”€ŒœĄgHõį¬9% ­öÆ„4“±Ķšź}¼OĄ§AŒØ©¦ؕEš4O pͬµ¾V% ™ÄMźb[tIŃi%Ž(GÖTLd*62eQĪóY)gŹ6¢d­);[“ŗJE ¬­`HŅG7mė¾ąŽ„•;WmS?\^Čøń˜CŽÄy,tMsŒų-čP…5[Öóßo’ ļ~Ł[™Š1DŽxśk9棧rėĆw°dUÓUp;\2ļ@¦L˜Ģ_ļ½ü°µšpfOÅ5÷."I[1{¹ÜlkĻV¦uMihŁgś\¬±œzäÉüųŖ_pĮ?fõ¦µlīŽĀ5÷^Ļ7/9ŸĪb'’pō©żĒqt÷ućŒ%hą“#Oჯz/_ś·ĻŌO ĄÉ‡=Ÿóßó?\õłKøäæ~ÉG_ūA¦u5ęg;ė˜=u&ć‹MO·Ćœó“®©D΁@g±sбĻ|Óæ§üāS¶j‡Vć“·¤Ż’Y<Ž3¢göadÅ!Rmjį•[–‡_¹.­ÜøÜ«V?„`"rŒń"dHž>§&žāźž­V̤šė_2–²‹l ‘б¦l¬T¬£l”m~½,ENŹql*QD%Ž%±±¦…Ói’BÕå?v’™ĪŖäßHfz)ļD“?ß_Ģ |Ē€äēūgC€’é+wN8ż«KŽłŠO<ō‡~³²ĮHcHš_w| ü›’CąæUŒ5ųo%żo#™ž6ļæųė¼’śx&K’‡ĆN{v’Ē&ö¤Œ"„”?uŸś¦\łŽw}…ńüÓó>ÅĘVżę®hć^Ÿ °ķ·Lڹ_ ŒĆł‡½–;·UŪ&LA{¶Œ× ¢½ оž>ŪČBįzH IDATķÅm® Š* Ė*düL²ó.ćŚÓcg1Lö~cx7Ż™KōW­ĶM:Šł?€ńš‰÷Ā™o‚wż ŒėČSžUŸ«* tVłč»ą}Ÿ†ļž$O8óX×ņ]:~u%zlÄöø@O”ƒJa"’kņž”ĘhØ ĄÓŸąsµŽ"Äą“¼2ä$iHµhņßĶ@„Å(!-#Qša#§µfš¦Rˆ"­xÅrž4óĒM¬Ø©ŗõCNd™šLŃqUI~ŚP ßĶæEõ€‹šD%Ø×”Ržą•jj)“¦š@šØ±R#|µjAlMH|0°U ĖTj)°± Iā‰Bˆµ± "ASclœØ&.hœõ&›jȄ © 8ƂõA‚Oƒ V¼‘X‚„ Ę«¼Į«PœØ V‚W1Az­¤”rÕćė’ŪWn+œ¶pz|ąŒ Ć])dŅģŃǔ۶ĄŅGѝ-Ū‰6Į’ˆ­¦;Ė;yĻ7?Čg’õć¼łEÆēõ/|-ĖÖ/gŚÄiL™0‰u[Öó¹ŸuŠ£›'’å腇pŪĆwŽt4'š›Žōą­ĆnÄ ŹéßoÖ<žX»ŒßŽxé £ļ}"Æf°`ęüźpĀŅõĖųĘ%ēsų¾‡RN*¼ęóo¢³ŲÉō‰SȊ7ŸžzŽ~ę›ybķRžx۟™9i/Ī<ötŽŁ’HŽqŽūŁŅ“ļ3©ĀwŽżuJå’üß’Ö°lfOÉŽ’m®øój®»’FŽqę[8bßC±ĘrÓW®`G_7/łŌ««ĒŒžäyZĄ’HŸ…6DZ”Bc¤QĘÜńØyŚėļ]Ź¤9T&ģÕÖŚŅĒ7kłņ‡}¶®7WDår’€ "ŅRīO.÷ÆźÅ˜L‘ £)F²F‡RI%1©q$ÖJj$ā$µ–Ä@źœęN’N2g5s±$ÖŚ 'ŽŚ’’8g„„äßF2¼äæ.ß?7¬ žżÓšCøqóg×ÉŻ~v­},Į¢Ą‰ „²õ1&ą?vü·Śż·žŅb(š»žwŪōƅ±_»¦ĆI’ėĶø:R”F’’§„’£™xOģ!F‚2„@s4“­¢™8ōśa>ĆwĒ“xŻ—ł ĘņõÓæŹbFń=xŲˆ¶Å_bęŽå\†²?†ūžČĒ!7ܵžc4~Å„iœV$ĄK(vv@Ļ“ėøń }h²”:®æ Ž; ęĪ‚+ĮŪ^×ŗ_!†ys`Åj8x’č—+$A`ģ€ڼ9péag_N \ų˜¹W»«‚­Żčå7Ńm Ū戭ÅNz I2‹fµü‘!UKŌ’(AXŠ“Ø¦žšÕ\’z ˜|ž~41C“½ŠŖ„G"Bµ` F½ėņ4’Šų¾ >Įi3 Ŗ ÷1 Į«+«źI€Äc[” ō‚)œ„̤‘1™ø ^P—8õÆ.1*ŖŠhŃ ā‚É‚÷Ž Ž„ ź2KL½ˆ„ ź5xÆ^bc!“H„ԃ *ĮӝųņļŖ$s׌/¾pįōaż™<Ž96®GW,ƒ¾ŗĒ vv’[ŚšćhĮķ„­=ŪyĻy’cŸug÷øĻlޱ™+īų ^ł vōvļĘ<{Ƈļ{ŖŹ}O>0ā Ļ9šhJ•2÷<Ń\zpą@ēÓ&NeÅĘFqꂙ9š‡[.'“Ų ŚÖ›ėŖ\]¾}mŌ™“gšäŚeō•ūXQīėo}bK@LüUŖ;ž *T ÆāEB.’¼ĶŌHf4O0†L¬IE4Æ`IÄHŠHjäeżDSćrR /ļ§™1¤6"¬I‰4‹­¤ālź¬x"õ±##¶ŽĘ¬oÅxS މŃęTKü#µŲõ‡ĮłžĶ2Ü*ų?äĄE›¾‚Rģ’éįÓ¦żü‰ć§®måō­Į°łŲõąßZŃZµžųĻ+ń˜Ą¦;šŸ<%ąæ „A®ŌĶēP=nWŹżµž¢•é_“:“–÷?œéģZŽ’pńtH’¦ż”§Zśæg÷T±‡e“kŲ­T­ā”aH€Ŗ¬¦”ķĘ/0M•}SįĖtbŒV*€V$ĄęŠŅ~²/Ā’ńsx邓r÷’- 0a ڽ˜āöū9dņYyŽ~3 Ą hVL®’;€fq`3 Pģ@»bü„IT.¹…_8—‰“÷lņ»+ą?Ž“ŗąß?64Ļ,ćĒĮę­ЁĶŪMūūUS[gÖΊņøąŅ4£'*²%ŠŁ<®“žā8Rkņś ģ PxšH€ą‘vH€Ī("x¤Ž BB;$€0ˆ«šʁÜ”™©Eņńؑ!䊀Vʁ5Ÿ¬Ó€ęŽÓuŃÆĄbõ¹br…‚lšŠµØ"V$„ ¢ÕĻmlMŖ¢(ˆ:$¤„Ä`mcÅtø«J’xD‚šŌ؉4ˆĶ‚ ‚jnč’ µFCę>5A}’Jѐ)^„f5€÷A3T|P¼A"E½ˆ‰T5š~åöŠūć»z£ƒ÷šT|ĮžSĶÄBĐ!Č^³½f¢5" 4X0čĆ5Ņ7x7Ą}ÜłŲbī|lńh‡¦Ccļ¹Óē²aū&zŹĶžŠ1®cūĶZĄmKī$Iė“qAįŽÓfį¬cK÷–†ūΚĄ]·¶B™Ų™×5ķī끺 dG”ƒIć&6V؛ņ]g½•ĶŻ[ųŚļĻė’·,¹¼™S<…o]v[{ņGŃ?Žvo9ż ¼äŲ3øłCżCM7‘{×,^Ě-ėX³eÆ\Ā~³öe侀łÅõ殛~ŒĮ;1 š/õæ“9ĪÓžŪ‰±’Ć ¢"„Iķ’°£LéŖĒ|r÷Z(Ę(U°/"ZŻåWÄx‚Æ*¼ŠÉÄP%Ŗ&V3ŒIͬ‘DŒdbIE$1¶ŗūļH¬%µĘōļś‹!u–Ōͬ³im×c¼u&³.W0V¼+乞ĮuQīņ/‘ÓšĖ$’­Kü‘yFŹ÷ļčÉ¢nŚüq”āڃ'|aŃŪē_UkųoŚõ’’ ųoģ” žĒ Ü_Ūnšžõ0Ą ŒeŽ’®–üIśßĪī’é’ßWģń㨒€63W­>Ųķ0`õŃ,ÆéŪĄĮäĻSw=÷ŻtĆČ2V_ōśLŲ‹ßĆ[JŪ¹” žæ?/:ęćlhf V’ŒC7ߏõéN.Ūq5ū“œp ü¦ģ…Ÿ>‹ō77óŠŅµm)‘Xæ vtĆĀy0m2ŒėĢĶśZE¹±ßÜYłļóēĀ’„ķ<GÜśŲ,ƒŪļ…#igUŠ[‚o^D·¶YĒĘā8¶LšĀĪÉHMõ&W”ī&X“®ą Pƒ¬ŌõÉ vC•'@R+å3ą ąCŖÖW ›<śŅ“æoĶrs@×IæłŸ­ĖõOӔBuēćjŁæŖo@Ķ ŌBU^iDĖ@%Ķ„łŌ{T}B\ķļó6š<śĒ ¹g€­{@‚œ&w}Ę{$ ”“"A“z~"źźJFÄTKQŃ8¶Į"‚zqźckÓBdRS4i!ŠŅFƒ@M#‰É}"“DQµžudJ6¢,uĘWÖQ²VŹ67 Ģ ³,eq&±‘T šdmÜŚóŻ[–÷]õč&Ż™x†œ0Ē9ä(dü„ŗ–A]‡cÄ.Ćthž‘»łņHŸķ±R; ń²wś¦ķĒŽ¹G““!÷})å+õŻ_¾>Mī^›J5Ļ#¾)ĻæVÖ/Å䄿¤–ėo¤Ei?*ĘJY,c¤$֔r©–öČõåČR‰«åż\‡© Tr£?—żÅšŁŽ(1E“EE“ŒĶ4ĮEāė%’JĮxµ ­JüĮų7Įėpłž^½qéŹćM¦³z¦Å—ץ™?h(óW’5ƒŚaĮH5­żŹHą?MŸńąß¹F <<=垆süoˆŻ0ż{*óžßń*žż”“łĀ’;™o¼ć`Ž÷ń3˜’÷.żß»{€]ˆ±fšv§*€zņmaK}Ÿ‘ä:­¾šW|Ž9æ|'æKR¾ tį÷ĶÉĒ| 0` 8uÖ`W^Ą9I7‹*JW²/ÕĘjØ P½Šµ" źŠ“–VĄiI'̤÷—ך£ #›“üž xéé柞ü<  U\¹ęρ UwćŽ€›ėRzoøž{TėcwœųœÜ; ųöoH6ne»ql(t²nÜd¶Ž›J¹Š‰8Ƨ‹€] źj&ś×9 ĄQ×IH«ą¾žš!Óz ƒH3 ‘“ZgŹWoXOą‚ēĒā«c: ­ŠoĶĮŁbB3P#< ĮkķŗaŒh3 U¢¾J„ "j:\ˆŖHČ¢œˆ/D&uN3ē\VˆHM¬i”č[”“XŠ$.’Äe‡Šµ’ŲˆŠu”¢ˆ²uR1Nʦ`ŹÖIÉ8JĪUėb©X+eL+F)gw­ŁÜó[–•-ŪŖ•l„ļžĄŌéČŃĻE:™Š5ØyČćj? ”Õ§=šß>HlMNÄĪQJF("° ZzpÅĘU-ǬżxąÜ\DłŲš'ś[ć(fĪ“YÜ·ōAT[E̬ŽæaUĆė3'ē¹Iż €ŗ)O:,÷$øõį;Z.éŃÕ95¼ß¬}ĘüķĶ—ŅQčą“ĆO xÕ /妇neن ćdŽcÄ`ŖUŚo5Œ1ąSŽž”ųņŚĒxųpĒo^0—Ʋ3Õų[¹ž&öģžļZģ!v1Ś­ ŠŽ  UœŅnU€˜U¢ƒwßŪłāģ¼žčīw󞭫øW•—ń‘?Āė};ƒŖŪßņ#,¾‚+³”s•K«qü”¾_siĄVsWŖ“‘H€b:y~ŽTś~}+wßó× wN!ĄŸÆĶĶłjńĀįŹėóŸæt>üü÷pĆķš½ŸĆ×.ȍkńŠĮ-wĆ~ ?¼īyĪ8i żźįO×ĀyĀE—ĮžmøÕ Äźčē/d‡µlŽbÖtŽc}×dŗ'w‘X‡ŗµYć qWH[§$h‡ØÆŠ ąČwģ[Uh&š1śŅ? P(Šo&ņ1Hӊh1’ŠŠ&'RiÜÉoIŌŽ Øi"¬“šJ ę~¾¬įHļ="ØH¾.QT5"jŖå­ĖK%FšABNÄ6$d6„ąŒ7‘É ‘¦&’4ŽLŚ¢\`;—«bS‰œI¢Č”£¢ķ‹œ–­©$8vRŹKR6ĘT¬Õ²µ¦"–CE³P®Ü“lcĻy7/Æ,ZŗU?" Óg G=9ā90eś0wœQJ‡aģĄ’H*R„ĢųŽ ƒ;6Ķ3„źźæ¼‡8ē=ž4Ky š_0oƹcy|Ķ“CN³`ę–­_Žšś¬)9H[·uż ó9tŽĮdŽóäŗe-ĒÜYź`ņų:Grr⾄š’ćĪąÅĒžĮÄqłé_9č|²ź÷ĒY;zé’HŻĘÜńtķĶ3Šs¦}”·ÆjiļŌŪ’Ya½{ķO÷œ#ó’‘" $·Æ ;¾|]ZŗźÉT+Śüµ üE$«’†²~bR“bIjīž"ySqRĘP#ećLÉ9JĘIÉ:-ćLŁERެ)EĪ”£ž])ŎņĄ®Ōæė;“ŗ©+ŚŽ(±6ĶwżM†S_“ü×\ž-&“ƒ’P’C¹üē»ž~ ßæųĻ’!F%Ļ #JB±]³?h ž£XB3ų7At4ąŸ$„žmÕĮ’ļü—įĄ? .÷7TŒŹōÆ šß*F’õŅ’Ņ*dÅĆ|oĒV~ū×ó­/¤AĄ’›_Čæ& z\Ģē ¼ÓFœlóž—m\ĶGųä…_„?ŻÆ] ńTH’ŪŻżßžw=öOC<•©GœŹĆ kU9ęŖs8¬¹ß°e;ž€;Ļį•\Ä=>櫥 ·Œ›ĘsĪž6ߘS5©/ ųŲ—ł×k¹]ĻCøŚZ.Ć_ęæ•_7OŃL4«`0«Yõ$@\D§- <Ÿų!ßļécČģ½šo‡®ŗēņÓņņ•^÷dpĖ=¹ąÅ߅}ė(”ńćąg߀ŌC’Ąžāŗ2‚"šąc0urŽÆ•?@«x’W)õ–Łjk ¬ź˜ĀĘ)3čķœJVŽcAŌ÷m‡€X·KĄšeėIcŃęGtĄÅƒ•ł˜$@% ż$@­I€ü!Q55€‰EkeóžyJ€˜²śƒoPŌ?čI-€œ€ü¦U“mÖyц”MŌ"AD“Šé|I0„ &ć]ĮdQdŅČø“‘š‚&…¢iT8*6¦bcS±‰¤ģ"Sr‘)[gŹ8ŹĘÖJJŁÅR¶V*yjekMÅ:©”¢‰/•n\¾©ē;·¬HīZ½C3?ņ xā$䊣#Ÿ ÓfЈ.ҘH’Gˆc<Š—wF^°­y†Ž^¶aūĻ^@ģZŲ$ŌOg!—mß¹ƒ”@įŒÉÓŁļżXüä”*×}gĻ`iøCŲwÖčMņÕoKd£ĘFŠ‘> O‰ć’.~øFžw…ßsš?”!’§“é™}={A2~:#ś gŹķ+ƎÆ\Ÿõžžį4ģĢrąo€?"Y¾ėo| ųS_Ö/ĻŃOŒ‘Ĉ©Š/÷7cØX+ek);+eĔ­3%c„9JRMw²)[C©~Ēæ¶ė_Œ)›b㮿\ę ź EÉb1ŽthVŪõ—ČidŌküK„Ö$’Ķ;’Å('qk’’”ņżõVTźĄ?@ļ”h)ĄŒ'{OĢßĻ‘ž‡’õ 枍}¦‚’ś š’T9ž7Äøö’›_é ĪūŸ2“¹˜|OåĶ×^Ämßz/Ļ…Įy’’ˆŽ¾Ÿś¦Īå…?x”Ļ]ŅĖļOųĄ±§pˆų`²„O|ķCÜų‚9ŌnÉæ§Zśæ'žŗŲcø±«†€CÅ.U8‹Ō\Į÷4ć³Y‰ īū_^pÄ[(×÷iV¦/½wļyeH9åh6:ĒgŸõž÷Ø9ƒ/Š÷™½¶/ē{8šāųL×$žøc3·½ŃL>ƒKÖĒH¦€ģ„ęŅ€0` ŲÆ˜Mß÷²ģ~ĖyŸx#72˜Čꚧ>oš^R-‘=o¼åŸZ­r fLƒw½±uŪéĻĻ’&¾ū[²?\ϳ..²¼£‹UÓ¦³mĀ$*µŻ’śž6C½Ėß§]1¤®o…¶ŒńÜa?f€ŲÕ >¤jM$֓ļiųT ¤)>Š4ź’57“F”XCšd&жź®5ĄQń¹ū~% 6ĶÄEÕKY•(§™q@ĶŠ4¦ĪHՙæŸȀ1 ꁄX0I&µ7ÕŗŖ©_ÕšÆ?2q6Ÿ«ś- FE  `­­*ņaCŠŖ© 1¢q¾.S«€ƒÄÄ.ÄQnØYP‚-Ŗŗ,hH](h§‰ Š:D‚ØźL > źEMA½|š™ˆų ’…`¼¼ŖfŖ£xE"5āój&˜*^ūR_ŗāŃ å—m+<ž”ųČŁ$²Ć_óĘw!„>X»ݰ6ÆÕ cžŪȍ>łšxķ)Æ$Ķ2īxōn®½w‹ī»97Š4čąæśĀ5÷.āŠWĢkN~æøę7CN[NóĖr˜nō¤ĆN@Døśžkśģ;c>0ą Š*̜Ļņõ+„̜²!x6no¬S9Ē” “™:a >÷·ģčķf{o7Ż}ŻģčķfG_7„$_s’%żk©-ł†nfćöM|ś cöŌ™|ž×_ił÷éWŌ¾)cžŪ‰Q÷ŃĶ8œL~PƘ€ņ§üA}ˆ”2~:剳 q›¹m™§rןP¾ī‰¶§U¦³fč‡ Īž eżG'}¼œŒęT›»­ć&Ē·ö}S~]k® šėsxeVā[(S6˜‰¼éČsøéīĻšW `Ÿ>ģ,–o«®³™ØUØ_{ē“™(PMhAŌ¢¦˜¶™^Ķ5G,ąČ—Č?Žō>ž­ć®GŠ’ü&یe}±“8eS¦³aņzĘĻ Ķ,Zßpš„Čߚ€Ż+Ų@€Bjj$@ DiJEDÕ‚fĄūL¬qŅLtDNKią}@Ó4“Žz@$äzł 5ĄOf¬ "ØĀd Z#LµŒ  hNä°.w}FńCQŸ©1A4˜œ°yzA~ރµŲoBP±ä*ė$X€HK‰Q¬J°` Pp>HfR B¢ˆLAƒ£‘ÅzŸ ±Ē%VŌf2%˜`¼ŖA­V=™‰D"i`E³ D*ʋ×Ģ JdHE¼zć‚āČ Æ}©/_łŲśŹ ˶Ž›79~Μ ŪįÕe°ßČü…°a-ŗfR”˜ÓX€’ź1_»ųŪ\tŻļ8õؓ9ķØ“łä>ÄG_—qē£÷pĶāXtßMÕ2#”2ųżM—qÖs_Ä{^ö6¦N˜Ģ„·ž™U›Ö“ńK³vĖzfO™Åņõ+ mŒå5'¾œå\sļ ó̟5$MX½ym‹µć‹ćŲkā4n_rē ę™“g°©{+™ot±˜6a*F ¬z”‡W,”k\“:»˜1y/Ų{!ĒuQˆņ«ROßĪA ÜĻ%·^Ę;Ī| ‹—>Ą}K[—A¬OŲ½ŻōĘsöŠQĢ3“¶cŌ/·ī1ąæŲ š_ µ•‰3)wĶBm›‡Y ņĄśPłĖ£Įo© PLÕÕą/† j|®PÆĘx™ˆdʐÉD4³ÖŌ»ū§Ę’Ŗ˜ŌXM1‰‰HÅh“«)†ŌE¤Ę˜ĢZɜQĒ$!2ފɜ ĮZńÄĪKA}ģÄ5AZ”÷#‚ńZˆD+ä ­”$’õ.’ķäū7ƒ’‚µ~ēŽć{W3ńsóīÜžåwź¬s?vćĀĪkwNжwmM¦Žß’ģSčösā’Ÿk³0Ćx:¼“-}“Ż­÷ælƋ63qK ä§iU0ųē’ų‡±’żm»čų_‹¶L’Z•a WČÖß;R”śM’Žö9žÜ²žÓæ’!>˜”łHšrĪÆ¾Ēé×^Ī[Īū5ō„Ģßş”µŲ ėXü…÷ń¼_Ļd)ļĖ*|åż/į%sęšÖKVŅŅ>{ō’ļ;öOc“C4«FŠŠ#ŽByćć¼¶²ĖPž›vsߟŽÉ*<xQf©r00µvœĄ qĮō…\ųü°eEÓ:Ö|“Ik—š?x€1üqÖ޽¹mØÆ IDATšCl¾ł}¼åx„{N| ߎ ŌJ¶ZgsiĄŽH3 Pv"­H€fĄĀƒéėķaÓ»Īć]LĮ³séÓ31–­E_žģH36ø˜e…NŸ8…UÓę±mźL’øH°-gH}Ńõæw‹Ę€÷)Öō— C‘XŌŅD (™Š:SO¤YFGäB0­T2 ׿FP¬ŠLä‚TÆ&ؤĪėSč¦n§žŖ „6œ(™šf j€Ģƒ³ŲZ,W©£ Śß×{|Õ!Żęił›T%ļ?łŲ?’Æ;õÕ¼ž“ŖŽæ–W}v@Btߓ¹ß‰‡Ļ-ß>hiÆ9ńeģ³×ĪæüG”*„†yö1Ÿ›Vš­(«åžęĻŲaŁśĮĻi3§Ģ`MS•Š…üjs×c÷š½?’oĖ“+Ęŗ:»H}ŚņOPSÜ·ōž!’FŠ—67ڱ#€’vb¬Ą’H“Žų…é_{ó4Žē ćØLœM:~Śī\‰§|ĒŹP¹a¹;Ŗ@Æ ųÓ üó¾üA½Xõj$3_ŪéÉ0š+©@V+燕ŌIÅhf ‰8“ZR±6³VkH!Ė+¢ŲĢFšYC&ΦƊ7N}dÕ»B»žĪ„,ŲõOZģśC®8ƒź®B5ßæéķŖIžg=²}ā”^÷Š Ū’gćéH:ģŹs;n¼ēõó®IĘYŹŻÆŪū/|hž];>9nkņ’w$/īOį¼NķZŸpĀÖ¼rõāīÜņ¦™w† lÕģĻęiwĶ1Zš_3|&ƒ’t Į’ī:ž…é_Ė’uŁ\ć&¢ć&ā?)’ż•·p妵üH•Cׯā¦7œŹ¹ożß(Žge©Dš3ę œ?våŸŸĒ‡ĘOāņŽn~¤Ź)«VqĻńüĒ­%~Zßwō’ļ?öcėT€ŠÓæČŠ»/ą¹ėļå“x£*‡”¹'@ķ&°ĆՅ˜?t6WO<žž§Éy õ$Ą½ēpjŚĒäJī(⃒ōm~pł—Ų;«p.uL䯅…ų°eR#Z„“"šĻ„s<Ś7 Š5™P©-Ų‡žŅvÖüĖ—8ļ÷Ÿeā³ę ¶Žą§1ÖnB_ō^ŗ×mc}±¬ŲĮ£“¦ņäĢYl˜>R±ßĻZ’8t"“ŽĒoŲĀ—×öŅūL ‚G҉źŌƒH€Øš¶‘D¾ ąƒŠJF"*•LmĮIķĀfJL„€#źBĄ3/ÄUźvź›Hą$de5®ž¹Ģæ¶6 9 żD@M _§Ø$ŸļŖe5@5- ‡öõ&V±*ĘB¬0j4-Ø!Q ¼j‘ ė¼ńY"ÉiĪ«‰$S !ć}š™Øų āTŒ÷T½xć!ó™Dq„Y1^z šŒ“RāĖ},©,Zŗ-zö܉…ćęt™ …!źĄUC¦ĪČ’õõĀʵ°~MžkĖCš)dč‹čŗ-ėłÅ5æįמ†“§sź‘'sźQ'óį³?Ą‡_ū~īyü~®]|ׯw#[{?ŖmŪ¹’wĮ1kźL™w :Ę5¹żē €›ŗ—&7?t7=t[ŪɇĄ{^ś6_ó$]’»†…ć³§ĶäÆ÷\ßt>–zūΚ 6Œ¢ˆ)&s÷ć‹­9®ęä(æ;å¤B9ŻŌ²µ9ūäWQNʼųŲ3øšÆ?¤2¤_E#«–ݵÖŃ}īŚŗ÷¾7w’Sē–äsī辟£"óĪŪ^;ć!ĶžŲžk±«ą“Ž’­bwĄ³£KW‚žū=ī[ōgNøų‡|*MyoRęÜóßĒ™3š6VööpŹ<Ģ>Wć`Š»EŪ¹į]/䘻Æē«Žóę“Ģu¼ō€Ćł÷_ÜƦ‘Ą’){¤’1“ņžØÅP$@= 𩦶V©­T×ó÷z 䘟ĻKoÅ=ńkŹLń$fĆø˜e'|‰u#üĶļų+Æęsźy "Ü0i:o}ń¹ _ż;æ —šˆÆŸųm>¾i52‡œØW“ņØ„Lzg õ*€É@ßĪüµr‹t€rR.![7b¼›Ī'fFß6śńG9ē…ĻįšįĪļéŒGW /~?ŻĖ׳>r<wšąÄ©<0c>ĖēģĒÖŁó)S|ćóM$@VŻ€«‘óĒŃõ“ł©ƒCŅĄ-æ\ɛF"jćC®"Øõ Ų—<źH€įśÖ"x$TĒŖʀ$¢:€(ź' Ŗ ضG@–`¢źļ¾ Ą­‰$x•І<—¹ņJ{CG˜z@ļA"9ź”:†‚±¢qŠpTÕĪŃOŌŽļ«*źv6k}y8Ū?§†z¢AÅŌ 55@õWļČ H0*Š ’$-©ĮʈÉĒUUIo4Øhf%5^ƒ•TMŽģ½% ÖgāUG¦6óź|*.ÉŌGP—d‘į2¢ł ‘*N=Ī{‚©×ˆ ‘ŖD!‹ŠÓ N½ŗ XŽĘŲ舣]ÅēķÓe¦t¶pŹ"|›6Ą†U°³±ÉX‚’!`ÆIÓxĮ'rźQ'qÄ~‡ņĖk.ę[—^° óäÆN›8•žs3&ļÅā'ļgنģ3}.Ļ>ą(Öl^Ėū¾ūaÖnY×0ȳęģĻ’ó|¾÷§’å'©¹ģ7Ā×÷½üß9ūäWņŅOĶęī-żSĪ™6›ß|ģ'ü䯿äū¾°į˜ŁSgqńĒŹE‹~Ē·žų½ę7 į=iuNÆ=镼ū¬·ń±Ÿ|–/żėgųō/¾Č__Wwh~Ō[N#’śoąõ_y++7­j1ŅHļ]­}ŒĄĆž4’`i+ąą1źÅˆċHŖ¢^ŒÉŒh ų'b$3&ūyžæI­ÕŌ8›!§Ydģ€ÜßH.õw’Y«™Ä&5‘ųX$#RYń6vžXƒµā#$h‚µ2ģ®+‡ŲõäīCŻÓŽūłŹ™ ćwĢ.žźĮÓg\²cĮø_µįŁ÷ķųēBov¶Ļ.žōŠļ÷£ZřZ¾?Œlö÷_^ńśÉ++ļNÖ]žŃż^µs •Vąß†TµÕõŚ4IŖÕxö€’”’›Į?C›ž5ƒ’ŻĶūŸŽQ]›%’Žy'nŪĘŖĢCŲ*†Å8ģŲ“9¼š÷?(Z¹žŸŲÉY„ē3€qļ¼ŖĖ†XvKé’hw’÷€’§'†ß•Ł£ŠOzč{š¢ŗ[š"ą”ŗ¶C€‡›īßW_ƏłĄņ!īóSBµmņ\Ā~/bŻĀ3y|į‹Y²ß¬Śē…ł5,¢!Ęøģƒ<{ė#\V5ś«Ų˜Oų1Ž}ŅĖé׿žś^é>&°bžń¼qā¤ćŗ`}72s<”z‘Žå*,t@Rjœ/©äæ÷“z)&}Ź@Wœæ–ŁĮ`øf¶ņrwi…¬·—ägWņų¬‰L=t!sĶØŠM}\s'į¬÷³}ķVÖGOĘ<Ü5…‡§Ļb՜żŁ2s.•ŽNB!"ų¦æ‡1¤žŃĢŲ<šó:˜pśd.Œ„Ć’M>·¼Ģr ˆQPS7^hR “ƒIDÕžĘ“&°">@&y[;~²KL5g$äiīxņ ”Ī$.5bQ‡r½Ø ¬„ŗ£! b­Åˆ`DšĮEVQ¤¶†±5ź_3Ęā1Õ5ł ‰Œā%ף‹äē«Š‰¬ś€ų|•żėTńAÄŚ†ó–p¢¦¢¹ĢĄ¤ŗ‘üø łü%oÆ= ("*S×Oµß•P[u‹®)!XLŽEhZń łļœQ£ŠZQ¢Ģh°¢Š‚X5ØWW­ĄJkM0‚QŒŠŠA‚±&˜¼V·ę^F (¦ö°O0B0"AE1j%(¢!¬Ū‘$w®īń›ś23”ąĢÄāČČĆß3ēĄäił{SīCšLīŚ1żŪš/@_¹‡V,įņŪ®āŅ[žĢƒĖ”ÆRj5ˆą /)ń§;®ĘZĖ”ó꘿"v1—ŻvŸżŁ—sšŽ4Čsžu 'ž|.¾į’U4^ą^wņ«é×ÅU_k<`ĪBĪ|öé\u×5<ŗśń†c2õ¼ńԳٰm×ßÓØĪ)ŽbĪ}ć'øuÉüōŚ_qģGsȼ¹üŽ+«‡ uų¾‡rōĀ#¹ō¶ĖŁŽ;Dį–§üü7śāåæGš/†tüTJÓö„‹sbÓ¬}(wŽĒŪźŖŠāęŌ_ƶ.\„N-Šqś4.ˆ Gؒ®Oxϟ6³ØBc‰Ąž2­źėŌõ­ŌõŖō_‡EMČ’ķn™ĄŠ¤ĮŌ|š—JŖ’:łƒĢĄž…Ę„śÜEkDÓ,ÅIźK¦YFĮÕ^KSL%ÓZ &cŃ,…8ń׏ 6•“՝$ˆÖ—nŹS²žŅ}õē:Éė;ח ¬F} @2ߟ` Z{°4A4Ļ÷Ɔ÷iŌČ Ęä \ ŖATƒØŃĪqā‹6ÕD©>°šŲ…8¶ĮX Z ĮĘź ĘdÖO,Ž:—¹©)’ÄΤÅŲ”ÓÄYMbgĖqD9.˜rÕjiS‰Ŗe£˜²)9gŹĪ™>ē¤$VŹXŹĘHŁ:)‹„,Ń@é@ÄT0’d¬ßŃ{įkz~pēśdńŗ^õ”½ė℉°’!šœSЇISŖĄfd“+ąæUŸĶŻ[v×ŪŽĮ °§““o]zÆüģ9įœ3x٧ĪꛗœĻ޾ī–Ó/˜9€„–WĒĢn.˜5o B@]cWG^µ»Ō=č4K•«6­f’Ł ‡\śPļŻKŽ}S»¦šĖėņ»Ōn½œCēĢĮsŸÕžČBĶpΧ‚f¤ųæžŪ‰6ę …NJSē³cޱōĪxV.õogUŅG6źĪŽ‘õ|ē¶$]¼>|ؖó#ßĮĮä@c2ŒIŐ"¤XR“‚I°šˆ#1ĘŌJś•ÅJŁZS6VĖāLŁŲ¼tŸqRKžšĖĖśŁČ”"GŁL9²¦GŅ;Źq²‹MÅu˜Šsšc[Žb[qQ^ŚÆ™4*ŚT ꣢Ɋ֦8õ. >¶lĮ¼FF}–eŌŹū%F†-ļW+łZŪõ®ÄUCŁ£Ū³Ć“qnńĶļ˜UĮŚü_WāļŚwĶ»āŃÓ¦½OōŽßšœłā/?ł±Bo*”’^5²Ó?b¶½ ˜°%=¶łĻjCŖ&Œü[/šÕ’$†„Ź3 ü—†ī·;ąæ!FQīÆ-Óæ!¢¹,vGmžąæ>źĮ’źź’oū:Ż?|Œ÷tLä5H~øzĪ8÷]üäkØW0RÉæ_ÜƦ;3^ł7`‡*Æ~ā^ī8s' wÜé’3;öcķ’Ķ$V3#6Tœ2Bæ»Ū£¾ĻeįY÷ü€š|ĖW:“Žśü@ؚ>ĘPfŠį—Æł×Ģb-õ$@÷bŠ›~Ćg¶’‘ļ×÷©‘›qņŸ›I€JõB8 Š5™0{é‡Ņ;ÖMžĪ£ø•ĖŸ÷Īūݵ<ōé»`Ü»„pŅ[éłĢX+Ā2ń`”ƒÅ“&󡌣,›»›ęģKiĀd2Ūt£j‡˜Ńńņ™ü ŽUČÖ%¼÷’\W»±Ö“0p“*źI€~"`ņœśz`$" ™(…T‡$¢Ö$€éĄyŃp’…BAśqs= P#jc5„ŒįHIČȉ€Śų¹Ä3SŖŃśó ää@ź=¬‰AC3Ą P{ČĢóżeąsP—Oķ Øµy»T׬AŌb‚-Hč÷’±÷åq’TUÖēŽ÷"²ö®®®ŽWšMvdePvP?WÜĘGTTtTGFQaP٤Yd‡†nŗ›Ž—Ś«²2ć½{æ?""+2+kķU§ļļUłāEdvWežsĻ9—¼•¢Ŗx%!%"Ķå¬ Ԋ·» 4‘µÉx­œL Šh” M!¬5żµ9-„5(Ec„\ . AĄż&@Žœ·żlŃĻ–ó6@Ž*}€g¦~c؟l"ĄpQVwvēo~MēÕ^QX°ØS{ :•!Š9ž³ĒžŠżfĻr•”Lv†’ćé,Ďę:Ż}]XøāU¬Ü°¦*ųoØ­Ēä ­ƒü’ŲpŲėümį“˜;u6v˜:wŠ õ|kńŽ#ĻĀc/?…+_,xöOčģė‡:č:Q‚҉•×±¶„Šæ‘Vl*š? UĖP„lQ˜0ݳ÷E×ģżPhž9j©æ ,‘Ī+Šz~śd1zµĶ!åē•!Dä(IyM€æ2»8ÅĖõ.Rš§AĄ?žŽZ䍄<ĪĖyk‘,śLĄ}AĄł ą¼ ‘-å‹~Q°!¬įb.@!LĮŌ™Bp‘s…”:SM­‰L-G5†#cÕSųœeŸ« <VVoĄ’xżEF!łgńń{•K‚ž†ńēš¦_­xÓ1×,z?°“¦¾fūL@É€Ų ųOGü=~ņŌē_yė¤SB¾®½xÜqW¾ö/•¤³1¤Yš%ąß ŅŽ³H0š‹1ŠJąæ“OžÓ÷qcIQ,¢X,ĀŅüŠoŽÅ@±oīgSƒ’ŹĻ-žƒ*ǰśg–1ū«Üw ącB’²•v’«’‰ÓćcSēAļĄķūģżŒĮķą=Īųɕøóģ½āé£Å ČćgSfc"<`^īy×\̶§ž’#Öv ĄfØį¬G`Ąš 6Æ`øZųčįKń©Ø’ `^ ėqśißÅϦģß  3³ĻSŸĮaŅ«”°aö|œ>÷ĶńÆŻ&iß*µ4!¶<’æxc׫øŠ“T±S“æŖŁ±ŌÜG˜‹ķ© jˆä²÷éCĄAV€^3( .åj氖ŚxUDŠß֍ī[’ˆ×y=3'£uī4ŌoŠ åŖÆå2č羃üyWb݊uXi,–!^¬mÄsZ°°u^Ÿ>ķóę _[±µŠTҟŻĒt(;Ąt‹š„Vü `F€_ļpįm+ńūTīļ{Ł=bپ&{²TgÖ¦–˜ź2’€§ ŅŲ`²{ c `@ᯠ“ųœ Œ¤^UĄd BüŚ”ģ  D"°‰‡Ÿ‰ądD`ĆK€ˆ T'&bų‹@K€įx?* 606f_ˆā{d€l☼ōÓ®”d/&“Ś5žµūSuēīślĶ{w|©ęˆÉk‚š•3eŒ÷˜J–$ū+!ÅkÉ’»¤Ä7HE¬§Z²É»#“rź§Ų>%rVU#! b1Ć‚Q…(HaĮPK Æš e"U«Ź …ʤD@šdL$jDˆ‰„žL, &"R0„ĄĀ¬B !öE 1 HœXQ"“Rä¼[ŚŃŸtyÆvę=Õē 7Xś&ÓgMĶń Öß›Oā—t Ż’ĶžĆ!·ę:ϼö (qBN2DfOT’śūŲ»ĻŽ(Ič7Q¹ŌæČLE6Z$ĆEĆT46T`ĆEcøĄ†ŠlP“– ĘrŃ\4†‹E‘ ¬”¢µ\ -G6„ Š*垁µžräl’ ÉX8§blģõē0öś[%qāV„ź˜ŌV’>+½.%Éæó`h©ė*ĄŸˆ•üK=š–ŸlZW8eę³]l¼†0ܳ譭ƒ‹Į»`ü§ū¬Ł¹fu}§nāŠž£Ć^æĻ“—{Ś^;dā‹@Üõ'Rš/Bź™ā¤ÄĒ÷½cĆ©5½ņƾ‰įļ_:lĀˆbŸ ūcPōRźś3P,&€É˜æ­ž³M’«Ņ2™w—“ū?ų#T ż3vó‚’”¤’•ą’ŗó1łčĒOmź<čÜäcĆéŸ@ß'æ„[žēJ,sŽ°ĖŚuų?½ Ļ|čb,®rKe՘ģsę蜷;nxų7čćńßµįö#6³ļŲ.żßµŲ uŁe›?`É0%Šžųóe˜¾ü>üBē°Ģøn꛹®c.ĘkŁu) Šv7rėŸÅoLĪ8÷„ĖQ6lŗ’xåYÆžóøĄžÆmĘé3ߍ—*ó*I€Ź<` `$ ®R[B? ņ”gńJ¬½ž.,~ąqōŌ…h˜=u¹pć•/^€Ć鿐’äXū÷W°Š ^·!^ÉÕā…ś&¼Š:‹gĢĘŹóŃ9c. A¤ĪÄ ō°¾žģ¾ÕH€)µNœ„kCʑų EüŪmkqnąoJ`Ø\€ń’Äńęžr†"Hµ J€†!8“ BŲL.@J؈@Ź€wBģ&4š‰ĻŽ'D§ū‰€@ Mė‰ßßüŗ>ŹxšÄJõĘÓäŗ^~Ӽׂ}—ĻÕ¼uŽœB S–“JyD1€e‰-’Y ŻCˆ`Ņ« йRNˆ-zb&%e(Č°CU€U™”ֲ ~ĶÕ(YU6P«‚”‰„J†Ō©V"R21(0D¤JDBDĀ‘2«'Š%©¤*xbR%bV„-ŖŽÆī.žXŁėž_ŪÆ"Ź­õYE–€š: e 0sŠ8Ä *ōÅäÉē žĆV’£¹V•ĪZmŻmXšōŸšā²—‘/ę+kĒ[÷> ģ¼N9ō$Ą1xü•'ŃÕ× €ŠŽÓś\Žž¦·aē™ó±xõtōv"“ęL™3;…؈uė† ¾ņ¾/`eŪjüš®ėŹ®µŗ}m¼¾XÄS‹Ÿ.oØ­Ē ‹m«šä¢ć#ƒåMž]g4c¹ĪąæēŃ,ņ”±€"øŗ Č·ĢEߔ5N†„µ£Ū€FŃ k%’»}žī…ĪÆčˆŠĘ©žB’Lƒ)ö÷Ē’xOD‚c‚±“KĘ÷95ä˜9–’'iż)š7É÷Ę¢ĄDE¶\`梱Tˆ?¬į¢ P°Ö9@ђ¬„¢5„>’ •Ņ IDAT (øh­‰Ų²³”śĄ²³9㨖¼ هāР!9KbskŌ²Š)x°×ŸipןØÜė?RŠD`BØOŽWķÖüȼĒŪjhŽ6‘¶°“Ś…Gµü. 8.ß'õū/ß«aÕ¤U…ō«‹ĒŌuøƒjśüćė÷m\(B$O”T —$ż‹ą [Öģ3ćåü%Jčü-_ÉO7=Ź#'żüGłnOĪś»„Į?–Ŗ¬±H’ žĒ“ųo+ānĒž`bjčŽ÷_[7pĪyĒą½«–įwŽ€‡Ž’–ļŃ<ų^?ž<}ū/šĖī.ģ ĮīQļ¹īk˜“č9üé˜3«Œd/ž·ōż_Ā_?š%<ÄMÉlmjß’öī’ę©Ń½SlÆqÕ¦œ ž šĄU’ży8=Šš}-V‡!>yņ5økØ=–ōŲ§p).掀wģ<ÄŚå=ö5ģ_Žė 8€ƒĮwēˆÆš7üb©œ Š“±§nĢdH§“­ƒ}ł%4®Yމ]m˜ÖߍY¾ˆŁ9‹¹gŻß3ŁM;ĢÄØSÉ;{ = ’Ą(üjz^_nft’A›a¬B¬k±¼” +'NÚ)ÓŃ5} ņ Sįrµt¤_-gA©@ĻU±]И¤h`O›ˆkCĀ1dCŸ»m~“]ė"P:@ÉŲ•~MS’Gš®KĻnB@>9& ±öšFš.±„, Nź6ĮĄŽQłt$ėź‚ “Ž‹Ęc“wÜBA œ—LˆĻKÖ%{ +Łd? ,PōJŁ éM®÷ŽŪ&^žėēC‡z~}ž®ūŽŃu—ˆ,!På ™0”M Č>®¢$’Ü'ƒŹŚéė”ńż‹(„DŽI’ĢJÅ>eX ļ˜5™p EĒ‘‚Ä+«cRy'F Źā™…<#RćYqqÓĢ;5ŽČśH'd%R+¢Öyµ*dįÕzQ+ž¬ŖXļŖŠO”8µŖ°*jdE% !£¢VU,FEŖ1cƒ}¦5ę˜Uo¦4Œ~z@ZށŚÖÅćI:6”“#’Ŗ?>š?Ä凹Ī÷7Š=Ą„ŗ&œö–wbž“/äqÕo®AęĆ=³ĮłļüĪ8ģd01"!H~–ŠQæęÓxeå"ĄqūKŽżļøäē_ƂgŹ\'¾oģ?0ś8ćļC1ńżXcpóE?Ccm#ž÷Į[ŠÕ׍××/Ēc ń9ū4G ž¾Œü—=“)Ą’0Žü»ŗfD “5L‚ņ8~,ÖöhįŃׄųŌJ‡¾š¦ł'ćü”“jŖÖa”;xfˆĘ‰žB©WfĻ€‹ u ö”¤śƒŁ™80"%g,EJäČĄ1#2މ#²ź˜MÄV EÖŖ3F–G Ī‚¼ ƒ,ž yØĀx°©1*&ŒÓżÅŠŚ€¼%*ķ'¤Ā1`Mž™ćü•ģė3Śń~@ųGÜõÆ||‡gŗZö’éҧSč‹ĒMžš“'MYX¹G ž³ĒŽūś¢4Æ,|D,­ø’ßē½gÌ _ņūcü›~1G’`å©­Æ÷_E°b—ś/<üńÖßūаæń‚’b±Sž«Y ·ųßĒżUv’‡’Ą¦ żūš‰8ŗ»·@®ŸžM/ž{ī0]õ„wƒŽy*ĪOFz×aaĆD|hĮ†ņߦł·]śæķÕv`3Öp°eG>ņ 4·-Ćw x7€ń«ÉóqŽAŸÅ†įFŽ~1ö(“įQ.œż÷żr¬Ø$–/=|5>ģūq€z–äźšŃĆ/ğ+Ē7Z'½vh ”“Å~ŠŚU°‹— fżJ4“­AsO&G=˜E˜ī¦ŠGė“I˜¼Ē<“ī2Z' ×X ”¦7ķĶC;{!//AōŅÆ@Ž)ś™Š  ‹-:ŒĮśĄbmX‹U5µX7q6Lš‰Ī‰“Ń7c. ÖBM;I–BšžIø:`œ@Ū.¹q ž·šćyk@90 8*¢x“_öü `6’ā±£%ę-®›±’_joī¹)Į’ł˜®3Ś&ūn)&ūZ8T%bšJI œȒ„פ‚øWļāс¦“W2Š ˜”Š^YUI#O)ĄŽ©Øj$RŽ"erŹjĄ>ĻFDMT ;²®‚ÆV"Ą«X qÉ8AQ£DVD, %$€ZR2é÷PeŒ3¹!ī?½>·÷ō:Ŗ Ę®ąźl6¬µ­J‘‹ć’ɚĮĖ61ų†ķžļ:ÕO˜3u6Ūż`̜4=ł^¼¾~9|ęaōō÷–N»ą”O”„±_¾įėä5ĢŽŻį{½’~ę…ųÖÆæ‹ūŸ~°tü°=ĮĻžźkāvÕµwž7=tė0Ļi`S€’ŃŽRąš ‚Ė5 jšŒØ”jĘśµß”ųāZ‰žX!Ń+<²#üˆ”H€x²HĮ$b­’dFł qœOJLLŽ!R§ÄŽIcKsÄOE†É•véHæų[”˜`rlÉCβzr&ņéX?„Ö,‚$“äUYL(B -ķ‡8·% 4 Æš*?l׿"č/ūø1»Ž¹b§Żž°žZ­+ÖŪæżźė»^(œäĘ 7ā/~ē~ĻöÉ{§„7žęóó¾-‰ß¼qł>S_ī?ŗ®ÓiœĪPBqÕĪu—Ż’ńÉwW&żW’ƒ’žG’…BATtÕžż_’ĄČŅ’±$žg„’ÕB’ŖI’ƽõÜ„ē”˜\ӄ÷żŗ·žŌ’·MÅnėšSUģĄY‹’8ē‹ųĘǾŒč » ³Ļ[@śæŲ|µŲĢ5Z°yH€F€¼Óŗ—į1Ó“!Ī?īšņŸÓj$ĄŚ%ą‡žØā ą¢żæ‡ogOI€»æ†Y+š#@ÉāG3Ąē›A~V²f,$@Ŗ€J 7Œ  €˜čīÆiC°l!j:7 ¶}-šņh‰ņh)Šā&zA³:4 PE + ›  Į(2”FtƒN =¬E[m=Ś›Ń>q2zź[Q˜5Åśų\$ Qp? 0ĢY-ø*dœ @;<¾|ÓzüˆAśę$²kĒK ·>­ aĄƒ¦ŻzŠhH„ī„ėSöéž >W©l/Vā, čb0’>ŌpųĢ„įW†{^°h÷čĀē÷ķy&żsV Nµ ĖĄ}†ئą y ōśŽD‹ŹŹ† <”]J=k2ď"梊QŠ„™ Žj¼'ƒHƒĘ_ŽLäÕzEč] Ü«±"€UoÅS RRXU²1*°Ŗ°"j"Ą*Ą±Pb2lģī­u¹}fŌŪł-9…C`P‰Ś7€Ś×‚:ڳoć’™“·ųbŸ±‚’”ŸĻH×™šH«&ĢaJótöv¢«Æk˜ėl#ąČ5›ü+øŗfø†Iˆź[āŠ˜±–*¢W7hńń•>z~µ×H€„]¢ĮŻ~Š?KiBi<Ž/ńū«$¼‚<³:"x0;‚zbrÄäˆąŲ É gˆ "2p†ćŽ?¬:“vüA‘eulÉ3“K?r&d ž–!ĘXoBõI˜IBb/WcbŸ?V™H ‰87ü€»žĪĒ”°ŁõÆōwȍ+žżxǤ0«ŽP’œæĆļŖużÓ Āųw¾żō½~¹ę—Ģ#gM=mÉ[ZVʛFh]\Ø?źGĖ`Š:æŠhzé­Ķ?|īȆ%ć󷍃’~¦§LbæeĄ?6>ńc|’#’å.>Ÿ,äńŸĘą—æsųĄhĮZ?ŗ Į’| _pŸ`‰šDó|č׫ĖĆĄ³uÄ&ł·½ūæõj;°j[°ÜńIü ‚Ö -ųč[¾ÕÖU’æž>定Ģ!§ćP,Ź~łļ ąęÅéQ×h!`©Į'ßüܝ®Y·4 °åI€b?Ø=ÓŻ³r Āī6ä ėP×Շśb/ź œCƒ+ FZ•˜@w@<-”Ąś8D¾¦=a=zŠŪ< żQ˜2Q®‚Z ©āĶi,$@­‚O›Šo…ĄiŠćń_¬Ē³ēni =gs‘@l °wžĶI€ōœJ@  1F Ŗ\I¤j ą€G'6ūµÜåĆ='xuāæ¼°Oļ Łc% QT’Éå†U€wĀŁLļįˆNl•j€()bb9QJm1`H"eÆb$RvŒ‚g%åJ" ņjÉ3"€Ķ°ŠU±Ž“U/V÷D€(Y1*dEaUĒŖ!‚(Ēö°Ә ‚}§Õ‡{L«5ÓĘaā_Ī=] öu öõ@ļČēŒž+¾­zčŸüLJGOŒ,ųŹŽń:›üŗĄ&’>؁ÆoAT?1×7¾g~M·ž¾Z¢§VzmĻ«–uū”{ŻuūNJˆĀQ¤2¼2yy"ņ uÄģ”šÄźˆŁQ’Ą†],’'g˜"01œ1ģŲ «3ÖD u֒ch”fņQ‡€\hŲ“ ņĢ$&dÄ˜ńÉżYĘÆÕåžĄčŗžĘ+zć²#[õœäeWRP±Ž_ź™Zs’Sļ›w[ēDźŹSžłĪ’S§¾Śū%äŸ;vŅǟ;qŹ+ٽӪń÷ö+–~¼iUįĆ=­ĮM·_ŗÓ•ŁŃøS—ėśBņŻQȆżåI’0$ųόłƒē‹Źłź“ZŖ’¬=`;ųß|”@L|ö-øĮ{œŚŲŒSmŚŅ ’Ł:²ötą'ŖŲ@ŽZ|ńūāš]ö|ĪŪ„’’šµŲµµ­°āŌ…ū”žīC’PķĀ;/Įģ¾µx @mŲ„ĆN¾O-Ķ\ćõo£eõĖøF§3nž½>}Ų¹qŹ’ņĢŚ%* `x K¤ÕÕ. ¾.p¾Üßn_†°ÆA‚BĀ<ø<!)ʍS"h@Œ…3®>‡bX‡&ø\ܤi1čoNŗż6yĆÉ ø®ā†" HHk@§Öćė5ļ€^Å7ÆĆ|rvšł«¾§ÆX›Ćʑé["Ąz‚©Ą{Pf»õ c#Ä+yŖ$ās”P20;QL[N|Ė‚ æŃŠ2tŅü‚ÓzOĖ×»‚H¹äæĢ<ń!Õ<ģ+I 'ēY ”rkdƒE‰«bH%" ņĀY[€:&UPyQć#2āÕȐóyµāŲ8ē,`¬ó•b½ &¼XÆdÕ«UUė}l Hŗ’VE¬J,’'ØUQ# K ķ‡+0†&×¹½¦×‡{M­å‰µć·-äAėce@W{œXYö¢oš?ĚņĒĒž ŃnˆŻĮ²f³ƒ’Ģ·£YZķ!%_×{śė[āæq–tä5zz•žZåeUw9čgRB RA2•#éöĒ2ĮƒÕS,““ž‰¼B=Ēc’<“)Ųgęd;pBŠ˜Č‘UĒåĄß±%—ždIĖÅų“·,b yZP…qĒߒŚ@¼„ĄoŒÜ<]’° ęŲ’\ųłśŽčhār¼ €Ų‚ĢĄjØmåŽMW>|ά?¹Š}NśŹĀó×ß%–Vüł#³>¼rĻʎģµ*Gü‰!łRĻ„£Æ]q—0u’ņė;_ ¹ ģÖH¤Ćłż±/ÅŅk°9Ą4†QŪĮ’о’åˆĒż³īQĆ'LĀ1¬ĒŸŖ\°; #ü»č,ŌŻ’k|C<>€ˆ°`Źl|䦄X–®9b»ō’Ÿ¢¶[ض¶ ›0\„$ĄÆ>‰_‰ą$\uęµø8}|)@’W¼­˜ĒĢŠ†øąĢk0Č= Ąę ,;–P”@aŌ—Pȃó}0Ż]`ÉÜhC›&@r5@­…ęėތl­üc%jsą3&ćkį½Š+ųęĶėqmŗ.%Žžˆ’ŲŽWŅćC‘P©Ø$€ C¹~ÆŹŚŃ’ĄFäƒ,£" ±T# ‚ņhI§Ź5ń&ń„xū-4tŪS†z-ž'Ūń3a„8;`°ļæL €˜Øš£!*m£! ĀS[@œ)`@Pö^Ł ‘ Ŗ$‘²³ˆg‰Ō "%śŖD€Ąˆ— Œp°Ŗd¼+  ŖV‚@DcK`Ä'9P#ŖŖFćHVC)ž °Õ” öž^īÖZC5ć'Tbu@ē ³Ō×Ŗ:U`Ӄ’—ż#’dĶ–’Cœ0(~ĶĄ•ÉÕĆ×7ĒņžŚ¦Xc6Ī’īÜsk|įéUā—¶‹jōC“Į,i·?ś¬”vžSo?APŃķ'&$2O §`ŸśūcÉ,ēW"gŽ Å*£ŽˆŠ ‘/Vg9īų[gdæµ1³‡!om üZ$°SįóÆÜ£ļś³!2^’澚ü¦µ…3¢~ł¹“¦~õµĆ§.€YOnhŻżŽ5ļoXW<uNƹń®‹vüƬßßč„K_żF]·{kTĆĻŻ÷oóĻļšęSÉ%ųOżžg|nįwĆ>’꧎k9ć™ć[^Kļq$š?ڰ?„ń©,ųj̟5åŻūTš$ĄV’ĄųB’RšŁ?ōކøų©®ŖrŁQH}’Ē×ćm…>üĄL¹zœuOī?b»ō’Ÿ¦¶[°¶6 Pm*@µŗė|œ-Eü„e³Ž„żłpü;ņł[Pūā\®ē"ž ųĒÜt|lŸ/cEµÉ•l+$@śē°TLĄaśµOĮ萠÷ y3©ÆŲ+”ė¤|¤ąĘļ™Ļ×|śßžåśņĢŲ·3÷­Ēz?žÅ:|·t/c ŅÆUI€!jK‡ƒ-UI€ @:_"K¢Tś_NˆWbŖĢŪršģ•B!£ūmīš»›æ\“§·TŽoƒæūŽ“ŗæåąHhJ‚"J3×̜³$<0W@KNV/ŚŻ=²aJŌü,€/]5 !Œ÷ü:ĘR’ä<Ÿ5®Ė%{em0¬†<4ÉPŹ='ÆÅČD€Wć@†7Ī«©$TŌDNBņdœˆUOVÖ«õˆæ  ˆ­^EB.h¢ Š84¢F…+’Š@ŽU`%a;«9ģ>µ6ÜmJ 7o€¼‹U]ķąīv ÆĀ.0fP>Ō…¶LčßČ |ØĆŪ.ųų2š©ŹįM ž  ®n|ķøŗfØ±Ć5bIg^£g×Jń¹Õā–vT+@?ÅßW€~$ß§ ?IņÄąIuūA^I='2°:fņ ņ†c/?iܽ‡QOÄĒŚų³QgŲ8Xu–)J:ž¾²ć?"š7$¬,#łüįåžĄĘużMĢ{“cś!7½~£·“~Įgv|׬†ø‰ģ¢ŅØ£ż¹āĄėü ‰6ō“†·ŻsÉĪ’éÅūŌļ?a]”;īŹÅ?0ż²[”Į>śĒĻļųoż“Äoge#ž ŠšĪÆ.ż\C[tö’żĪ}š½Óž F"MŲߨĘüaӀ’jĄŲ†Į?ŌošŒ-ńŚ÷ ’²ŽķīĄo‰šś ļĘ>ß¼ƒ¼lĆI’³•Mż’č1qńÓų®Ž™¹ö[ž VU®ßž’qk;°%+”㇪, 0Ų4£³õš×ŃұO˜ֱ翃ūąöĻāŠB7®ƒb>€^āāYŸĮ§Īųa P ųŌõx×ŌCp»›ŽžŹsĒ2? Š Ų_¾®hgżW ž 0xæMAœ9—Ō| ņßæµ ß*‚ čģ\Žź/’t=NŠ%iŽ–&Ņs6u.P>% %R5@:! -“ (;½Ö$‚ōūŹ Rś;ŒĒ捆`UZö}øéŠ–5öėi’³X³fFt’Soźy*]’Ž ¬Ą””@@ßŃō±Ęv:3k!F’ŗ©īŚæŽw7«€r_ID9ézIw8" R T!$V°RRņÉĀ|EP`e‰ādž"Čyö^­zfļÕ ČfĆ!d½ųxb€hb €UOFÕ[²iNRU€Ŗ!!“jāX€ä«11!;£)ģ>­6xCkĪ“ÖoēĄŻ@O;اŌӍŹĻ5’°ąˆSĒžG\ŗ­„žm,ų'‚äźąźšįk›ąj›Ę•Ų_Y²”O‹Ļ­‘č¹ÕŽ-ļTTtś)éņ£ čĒ€Æ_K~±žGˆÕÄ۟|M:üHB’ ¾LęŸõ÷95p†ŌƒMDF g‰œĘį~β:Č1‘ ų³ 2Ą_-4“ä« öł‹"#÷/¦Żś*]’šĒų»žéćG^»ääi »/lŸS÷ćŸŻåślŠ,JAI{ß½vē=ļY’]mģžŽpĒvü^Öė?ė©ĪÖC®_łßģtZ±Ī<öĄ§gnķ԰Ϙ ųH…³/yķ[5=žČēšųžĒozy(æ?0ö°? š£ó÷ ž`(éüvÜߦ’闱‚’©ó /ŻžĢŁų“*ö7?{Ęį£ŁėŒügė’ķˆ7,ĀŹ#6·ļ?žßv` Õv` ×¶0 pē'ńc|ŒĻü>ōü-_\€/©Ē… žZ߂sŽžu¼ŗ“Ź>£%6¬=s=Έ ų [ülŽĒqŽĘŽʐ ąŹAū$@•ŚŌ$Ą™Sš¹ZĘłŠļqŻ+qYPe:Ąi-8{‚Åܒ>œ~O7žto›™Ŗ«FCcĖČZlĶč7£ ²¹€(™˜]A°W’œ„JK@H÷ö‹5ē’³”EŽBJEI}ż]ś“RĄ8ā>ŌÜfß?ÄÓÕ×ēF_yśüĆéż§ŌN ą³$€±¢”ŽØTń“šEĒ. ’šŽˆS†'Ejœ!ń 92•D€x5źČ:ų@=ÆjįÉ ŖõŖU+>#(”†ØHԈ©óĄ°Jģ|ĄašP»“ę‚]'×ó'ąńŒØ(ļA}= |7Ø·ŌÕ*&—7ųbŸ-žćĆ£Aōå{lų͵6ųrĶŠą_Ł@jįj›ąkąk›6ŗĆ* æ¬CŻKė|ōźzqĖ»’°>`Ō æäõ‡(CKćū’MņČCoŅżWGŻ~§G%™?<»ŲūŌ&G†sģļW%ŸžiŖ’PĄ_ŁJ˜S_ ųgž†óło¬ÜŗėŸ}ümßzõż-Ėś>²jĻ¦ĖžņįŁ÷¦;;xŸ7޲r÷]lū¹µ»6|uĮłsīL×!É®·­Łi·{Ö’˜õ.Ē Ÿ;±õ¢ēŽiYĘBš’ūßÕ¶ćž÷µŻ Lmw~~Ö;ŗ[Ld2÷?ź°æ’ž@zŗ«&żgĮ’h“žmü£÷—’Ą``¬ą¼‰’š„šv/ČżŖ枛ün8|&ö\æص®~ŗˆ‹€’i±Ż÷’OWŪ €­P[Ū 0TĄŻāpߋ?hkšƒ}ЃڮvüŠƒ8|ūSpé¬cć÷„ŃĄ`ą•«qhԃ;ԐĮ•;|"ž=1ŽÉ’$€+‚‚ŠżŽŁŒĻŌ\ĮO~¹_Ŗ €½ ¦ķŻ„?0!/ųŽMėń-((™H«M‰HĻ6_8 °q–€Ś Ćųņyša³R™%`$ĄD ŗĄąÜĄqńJ°izlgŖuU0ńšūoFāRØVŽČŹßŸÜńA ķĄ‡±1ĄĄČ? ¶ Č·ŸNGCXĪ)ä̆T”|QŁū,`ˆ"-‘(³2•žLTˆ§SŽʀL©õDF¢„P5ĪÅ@^DµźćœU2*j±m@DMI ”ŠÉf$£Ŗ Q& &V“ #gŒŻer.Ų¹µ&ŲyRČõįųŁE…~ · ÜŪźėŽqł*ŸÆ7ų/;0<ā”ux0ilš?š€²Æ©‡ę°ßøQ”}•„½Eø…ė}ń„u-\/šŹŗüńŠĄ±!@šģOœųśS©d$žB ROœŒó¦ŪĻ £ŽˆõDń˜>&r°źŒ‰GZK@dž-;Ėš`ņ–Õ³%o-GÄ$%©H^5žd”Øé7šĪē -÷÷[×?]Ė[®~åĢɋ{?Ż1·öæ’׳7d»ž„½œ T éį?|żm3žļ¹L ѳ'µ~šÅć¦,NƒžgŲŃÅ IDATą€’Y}šģ'ŗ®&Ą(”Æ{ZīgOžŠ|ėŅ=ŪĆ¢š›oXsŲĢēū>o¼NZµkķE >1õŽMöWž Č&óŒüGŠüŠė€mü[.ń’ņ³°÷†åx€Nļ_„—ÓĒh‰łnÜ Ąƒ_|ą8÷Üė«k++õż§>k ęń^¬8÷ŖųÓŌŪ}’’”µŲJ5ŽŃ€Ąę!^ŗµ‹ž„'U±c`ń!eä]’ ™€kpĪI’‰'+÷ šÄe˜ß½ ’¢Œ›ēŸŠs&N‚nÉń€imMąä|¼Žp æüÕ|6}³¬$Īžˆ…Ąq¼zļZœø2ó>¼9H`Ėä ·>[)0" ĄgŌ•$€x‹Re.0[Ź£<‘?& FV¤$€PLHƒ, pšC GĢ|=wéHĻóéņ|}^<¦3 L_Ÿ PI@Į Ü{J¤j€ōūŃY"A#1i>`ĄŒAD€Š’« ʬ>ž NYDDjœ‚EÉĀ©q K^Ł9µļÕ@ČzŪj½WK ć=Y1^‘ØȊ—T`U€“ØQ«ØĄ„ų(Ī ˆÉ€Ų&ĄD ;„1“;µę‚[B3gB@vš˜Å)*öƒz»|Ø· Ōß.ŽšmĢ vh¶`³ƒ’dĶf’ƒ®3†däėØĶĮ×ŌĮē!5õšˆ­Ł“Ÿ–œ‡[Ś)Ń+$zuųŻ©Ÿ ĖÆP ŒģSĉż:¤¼æZ§?–ö '¾žōĆ,ņ`ņ†ānæ!r‡śy&rŹšlŌŒ+Éüzbć˜Ō›4џÉ1‹·u°ä­ŠĄ’+¦ćOj-yUŖü‰Ōx© üĶ/÷/]Ɛ¦ēīõėå{ģ¼`ż‹uü÷ß\±Ūy•ąŸ‹NSÆŗ’‰—½śÆ ėŠļr9^xĻe»|ØŲ(Qōg éŃWæ~Ś”Å}g¶oi5 źYt]kvØłęĻ›vēxüž(>0$a3ęüŪ, Ļ’’Ą¶•ų’‘šæŽć”l—?[4ā”|~ ŽO6OĮī]=@TV%ų€£ ~ŖŠ7Ü/8ųˆq‚`ūČæm½¶[©6µŲø<€;?ĖUńY"ü•Įy”×Ķ>Ÿ=šƒčjŸ±÷]Ö5/į;ćĮŻŽĀɵóÄŪ›s< °ķ§OĮGė —@¤øł·«ńپŠ7·°Ÿ: §M šm$Ņ’=xŗņš£%Ņ}7 ž³9-µ& ĢUHdŌc!¾‚HI` €/%ÖAD@ŖHI€ĆžŲtāŌÕĮgGzŽÆģ•?÷ŽśVN HļĄøˆ®“&$“Ź” fōD€‰Ē"@§b8 ŽX"5B`WˆĆüœ‰“’cąŸ:Ɩ™H½'«¢V”lŖ €Øˆ…Äւ¬2 Q1$dˆÅ¢¬ C¢¬ed±Jʐ¬†L°Ć¤0ÜqbĪģŠ˜i–6[`PyźĻƒó=@”œļņ½ hhb`Lą?9üĻž¾Œé—Ö Ÿ«ƒ†uš5u°’«ƒņFeEV/UøÕŻźµI“pƒø×ڼF¾ šĒ÷UÆŅ~ĄĖś3éż hflŸP*”‚žų\Ļ O¤”PG ³# €’·ä‰Õ³3F½ycąŲpD€'CĪÅ© ČĘ o-9µ"äMĄĪäIĖĒłeæa3TĒœĄæłõ¾†ŻæśGĻ™ū‡ŃŹżY}Ię?T×?Ž(^ŽbŽqéK·§“Ÿ>iŹŸ;nņ¢Ź®vØļpĮń_}õlAvīœ™»öžĻĻżišņĻ ¹šĪK_ż×†õŃū\HƬŸ›ūym‡Ÿo=껛͋ÆÕ¼`ånµ%|9”ä?’CIž«%żoąÉ?°ü§ž’sęć1UĢ?īL̹źę§•­·LÅmėp+Óäm_>’ųŽ’»ƒ•Ņ’ ŽDĆߥ""¼ræą°#6³ļŲNl­ŚNlÅŚVņī¹ūø^üq3(a™­Ć‡ß~€Śö šÜmØ}ś÷ų=‚šōŌ}q줓н)'Ū> pźDœS | ŠŠßŻŽó"Æ6`§“ڌūLŹ+¾k¾éŖ¬ĘN[7Ÿ%( 835–F’„V’@iB@ŗON”*-ÕH ĪPU € ³–Č Ęä©`ÆĒźöŁéåšļb˜R‚ųŲīÓ;'ūīų:JƒĘf_£ä#gÓž“{ŒD){Ÿi&@“±š™NPzN"£ö¢Ę;eDjœØį˜ ذxGFĘ;oįÉzU«^ Ö ™d”  ¶”@?±*¬@˜e€ŠZeØ2¬PF‰ PˆHći„Ä93ĘĪnķ܉™3!°sš-™ĶĮÄE*@±ūĮ…<ŠßĪ÷Ä*‚b,’G’ĄČĄ&’ŹÖ@ƒH®RSÖn Ÿ”ŠBVv«_Ö!Ńkmāmé‹H?AŪG ź3]~€āι“_‘¦÷šż tśK _ćæŠļ‰į™Ų+RŠ'łĒĄž‰<1Å”~ŽŒ:CäÉhL”dž±ĻŸX=“ń–És ž9ł£œUź-C˜IŅp汄d`ųŽ? 蔋Ÿž”ķ—¾„õ3O¾sĘÓńńŃuż'®Ź×¾ń7«Ž­_½A,śšĆŋß6łžUohźĢ&üĆo»bŃZ–÷4?Į>tŪ×ßp1¦į}YąŸV’ģyóŠŻv¹Æć'ĀČ’éƒ3N[ŗ_c[6埊§~ué5=žØb­yģ® gŗŠ¢…ģˆ?`ćüž•acMś÷ŻžÓŚ”枀хž³~«ū=ÆH3µUŠˆI/<‰ļ«Ēi@„jńه:qoŗ®šļ’m.r_µ_ˆ"\Qłųvß’?Om'¶rmķ<xčų‘*>”ž™×OŚŸ9ųS菮Ū`Żrš}_ƍ¢8…€„M;ąˆ}/ĀźįĘŽ ˆń¶ šŽ&¼æŃą(RÜžŪœŸMņÆ$Ž=? 'šź‚U8aeMü^< p@#f<Ž•é±­I›Ļ@aĄq·?>V-0 ā=+IŘ@ ­ˆ×YōEŹY@<’˜•J$ŌPĻęķ75^oĻź9åėä{O鶊E9GBDTSƒ‰€Œ`S•łń±˜(zęŲP5“¦”s+kQ̳ČPD€ˆ²“xr@ä`TȈSć8¶ˆS«WŖ¼ĀĄśDśÆ «"F•¬÷02"bTÕ@ɔņ@qP`œ`ÄŖ±M Ķ H¬ ¤V!X¤q`Œ™Ós›C3sB`f5Z® ·ĢūŖ(Č%sL‹ż Ø’ŠŅ?G€ćĶŖŹ‚m;ńŸb“asPĘ Žę Aü½†ÉqŚdqƖö;øå"K;4ZŅķÅ šS¹¬_i Ė’9Óå ƒ@?Į«’d@æ€įćī~*÷'Ǭ^ž@Žž˜¼!rJšĘØ#¢”(‘i·ßršGDž!ŽZćĮź-“'Kb 9cŲ)CŲŖ¤Ąß„Ö³Q1„„ŌŲ”?9ÆB¤Ģ±2b¤d6¤a¢œH}ž‡ü÷Ņ·Ķ|¾ó¢(ĒĖīś÷Ż?RØ7„Žg˜W†ü|ćņƒē>Ńq1{m.ū{%»¦×ÜšŠ9sŃ7ÕŅĶ&.ė«?žŖ%7±×‰K÷oüĢ#˜õHå5€ų@čwŅ”¾ŻÜ95üɝ—ģų½lŠLX՜ųķe? ŗGƒłĆo/›u’¤’!%’ų—ØŪ•!ū¤¶ƒ’müńķ˜óć±ōŌz|ØŠ‡kēģ‚ī~¹“¤T•”‡Õā¬ž¾ Š£55øś-gąĪ‹Vž/ąø:œYĢćzŻ{ģŸ{ŁĒ·ūž’¹j;°µk#F›†xōbĢ*“įI.“8÷Ųļć·ÕÖķą…q’7‹+½Ēł “5“āČ.ĒĀōńjć77 0šń€ö^7^ą¬FœŻdńŸˆÓ™ī¾»Ÿh+ĀU¦$ĄI“šŽ–א•yœqĻz<^ Ą5 ¬Ļ{åŠŗ÷|>œ¼.Ā…·¶įwe÷7Ž Ąę 6^ @a,’OÕŽƒźƒY5@–ʹԻŸµІ°É½  µdÕ;?Ūš†]ž­½JĆ%ouÕ_ßŅż©µ3ćϱ9¾œ˜’tøÓ‹rļĪĢŽP £@–¬›ź~ūäAłćMbĀA† Ņ{-= ÅĐD€€`‡'¼g>x1fļ¹{·ōéõż:«ĘéTė©)ŪV‚+ŗ»C¬ī tĶkuXüČdYųR£tų8ƒÜD‘%m öŽŲ;=ž`ćE ŖØāсjŌĆŖŖÉĘ‚dČ1" IÄD€(jTˆ‰Ą1I @in¤T"ńó$šT„sš­™5!°³&fJ½Ł2@tP)@¾8rEPT¹"ą]üÚüā@ĪāńąģÓH?ć’D€ bò;óÖBŁĘcōŒ…Ś ō&łjķ(njó”ŠBÖöØ_Ö)Ńėā—vxæ®W”ŠRŸ€LR?PÖį‡bĄ?øĖQR%@b+ bOæ€ŌĒ~’ņN?Ąwüį”ą‰É1A “‹ģ˜UĄä ±× o?‘HŚķ7†Ņī¾³L¾$ó·äِĻ&ś[&a6Ā ‡*†! ę!RżKĄßk žƒ¤ćļxźJ™xšG¹Ļ_ōĪÆ¼peMÆŪoĆģŗ’łćy;’Žė’ęŸ-?lĪ“ķ_U‚ļšVsóš=&<ØāuŹĀž'¬*œÉ^›] æüČ»f^ōśžMėŅżŽśĪ¢wN]˜’woi̓ēĻ~ļŗŗ³’N²AQK+wžsēōoYók1ŌžŪÆķpBw ’ŽļšT{Ė›oh»ŽxŃŻ\w×ų®­ßØū£ßc’ž/'†ō’×Įśe,ą’‚7į Žõø×Ü0g\ŗä%ÜoÜśt!ΐJkw@ŸØrO’v*ź¾ŸsēhLwįa2X€ŌćPUĄēr8¹æ÷d÷Ųä¾’ųŪ €­XŪ €m ¶D0< šąæąØ¦©xž­_ĄŚįīe$ šÄł8×q€|}N8åJüz<`zģŸ‰8sΘĄų6vĄ½öć#kņ1ł_m:Ą.“öoĀAhķ÷ųƛ×įņ¬W’$ąwLĄYMŸ'`Ø¢żwkqčŹņ÷ń-˜ī±¹,@XjŹZ ‡ÄUH £ØB0[ 08 Ŗ  $]’ Ą™ćó^m˜³ć µŸØé§ƒ ”“ÆÆ^’ų÷»ž{õtßixt`’`“óöśKŻ›gæ\‚r± {‚žvĮ±Żßx‚“$°‹*A}ś<Ŗą]¹"=Gy`żŃ/b§½įØ)z˜õ(ėž„z V/lĀßīžī}¦IŪÄ—Łā<Cž9@^ىZJUžŲ‹ZńbDc2@¼Z¤aƒ¢Ę‹X’xŌ Y¼X…rIį43€DØ2iX–Œ,ePš@‰] !Ćl¦5X;½10ӛŒ™Ö`ķ“Fƒ`ӆ n–³<ΐd>«ÄUĢ(RÉwä@›ddŽę.uæŖ[żŖ.‘ŻāVv‰_Ż-y JBzš|°Õ¬¤æ¤š+āp?- ńb2` ČObŃ;„O¬I§_=39Į~„ō“ ;fxzĆĘ©Qg@«Ž‰=392*Õ»żqš?Yfņ& Ļ Æ–ÄrœčĻj… H­!Ļ KJ<>ąŁ®’pĄ?›īæÓ_×ĻŚļ7+®#@ž·š»aŸóĀÚ>š—Ó§<—ż÷V#‘z&ŻļĪŽłoøæćz4¬Ÿ_óå?üKėmc•üo‰°?`ó€’ €Z7ųų¶žĮćžĘžrß’„'cś²ēqz Ā:ĆxŲ{œŠ:‡>øĻCƒ’l}ō­h~öÆų˜‹š>(v­²du.‡÷÷ć÷كŪ}’’œµķł?RŪZ(ąp5+Ąß/ĄŪ‹}øŁZ¼ēģoć¶ģŚMFLzķ¶I݈“×*`œbĮ}jėA1»¦’8s¾gSxuĮjæåŅ’”8“;Ī š ¤Šˆ’x¼‡‹o]ƒ›\•{+ ~æ%-ĄŲ+ՆC €’ †'‚ €÷ZF¤$@Įƒ¼(„÷85@üœb" ]ś0Øé0ķS|WD~°€R¬Hh]i[[P’sč <ÉR­œ]žxŖHk D@J6”ąZĘnPIX§|źctČīÆėYµŻqØ{géŖ}īŽ©r÷}Óå5‘‚Ä)§c b{€ŗX ^÷ÄoUĮpdz†'+OV½7Ŗ0āÉ2d€ĄelB¬€ŠQ!ŽÉ°@ %[QØŹŖŹ"‰&HYB@ć~w ķˆČ“ÖY;½Ńņäk§Ō3„ybķÖS ü_.Qųö>ÕU½ā×õØ_Ó-nU·ŗu½ŃDĀÄʍA}\e`ŸŹåü@āįONü M¢9•-ÕIö"ņ C’ø4ÖĻ+T˜ćcŖ oˆ\JQĻĎ’Ÿ½óŽ“«*ßų÷=ēĪlM'•„ŠB¤(M¤×„+ žĄ†Ņ¤ØˆQ@@D@DA”¦t„Ф÷Ž!$Ņ6Ūfī9ļļsļĢŁŁM! ģūłĄīŽ9·Ģģfę>Ļū<ĻkÕg¬©æńN¬­Ą ¾äķÄWźö«x"q¹HbcŒ3Æ™u°_ ümĀ©y+^ra“i5šĻ%ąoi’ģÆsūó^?h𓶃:ūEßxāšĒBY-ž:e«ŃĻĪ?uĮ ł›ļ”“ś•š—;üŖib?Mdż^%éö“éņ¼(£Aöo$ń÷‹Ēą,“xś%Óé«NTœŲų«÷ŁŠŁu6Ā©†`?cĉx™źnæu6§!Ķæ‹Ģ_½É‹·‰(I°Ÿќo ŗŌ?@Ü=šOÓŠēv:ć„KmĮywķž§>pčŲ’VƳVt»3_?pŠ;m‡¾·fó/’÷±w¤ąæz“_Ӈ¹Ī˜|n¾ĶÆ×Ł=rĖ/W?ŗ˜ Žü/w“•ŸŽ€L_æß±2ņź®?P"¶æpʎ+¾ÖzśÜQuøéŲ1M»žÕ#ž¶:÷ƒÆ }»p’Z^Ł”ß/īŅųf ó—æöŸuš]’üĶ¼m=šµfMēoŖ|@„g?æ);žå!ŗ»“RÕ żĖÖÖ5ļóżz«ļ†¢7Õbä@ļ&n’+ϟĶ¢ #ā7_Ą/ ūń€Y`źsŲi—³Sg'ą×ø[ŒŲ‡×ał"vČ1”æįRr^yųÉ6ö¶Šõc8K¬bų„L20¬Ósńõsųeu0ą„Įl4¬Ž3EÄķ1Ī…GF\©Jē v|bÓ²ū,« šńY`ш€”€ HI(Y XPӓĄV‘@W5@ŌUŅ\‹šNŘģæ0J°P-ÅOjēž¬±ÕīŲÓsV”ķ–}ęļ^}żŁŠ Śd¢€AŠ5Īé_z}3ĒōŪk’~oH‹nÓÓu,ķņBüō½óÜqü'Ī9§ŖR ŒÕØć‹qČ ša¢yŃe,1VT­sjb/‘Ę;g½«Õd€Šqź"qĮཤž›€zŗžŽj€nƂի»€ØQŖ ų½—ōū°†’J 6)f ŌGb7Z;¤Ńš! ÖōÆ7f`½I¾ŠŌEŸłĻsķŒńó:½ĪkW?ÆCżÜvõ³Ś4žÕęŻģ6Վb…Śf! R •ńkŲ^ö2Żż°- ī3źĆyÄkšÅ€¢F*¼üI€>ķņcŒpFp*8cŒÕŠŁ7’ųžMHž·8QqXqÖJ,Š—Hb±āDĆ(>Œ8›XŒńNÄzcÄE9u¢ųŌŪ/"at_U·?—‘łGU žžjąoDTŌ©ń¢Łq~°xĄ? ų[X׿ŚēæŃõÓ6Xõ‘Łēx+sī:b•fÆŌ“ žé¾ŪžłŹ·¾ŪqČ{k4~ߏV¾„ų‡Ę āG½Ų2p‹K§]nb6gLĆwæŹ¼ž[>yŸ!oµ’X…ĀŪö?ś‘ƒF>ź2]’¬ņ`׳§0xZ瑳V©’õ8üŸ KłŸxņŒ#›?tßöV¦=²’€oL߬~&ąO!sCńüž°lĆž üĆāūƒ®ą?­_Nż5sb\ąhĄˆšźĄaģy×{¼ŚĶ%öšž×Gō’śĢß0ō¶ź yƁlŲÓEdŖ 0é,Ļz“IŖŒĆÕ+Ļ·‡Æ\žGß šą4L»‡ćG”¬œnĖuüßZŽģ[Ö³ŃpøŹ+Æ>ŽŹ¾3\ųüŖže`ÆĮœ›SöVåĶ{ē2įżD-P,"«6Ó£F~VgŲƼ<„“c¦·3uӁÜn„Qó>,] Ż·tœ”؃Z†īHX6j€ČęÅ9$UX‡¤ņ’nIU“£6 PlS“>šµĄ’©*ˆ€ØœPMLøią±Ķ ģОÆ7:÷ö=ēī¾]žZ$,`¼Ź6/˜5¶yÖ’$ļŃÓ5,˚é;Æī.~iż^0±W“fd'TX<ʉXbµĪ©ÅøXm¬bE1>L°^0źŹ™ŖĮ€÷V“@@õXD­śšc(Öķvö;WGE]鳉æśüöß©īś§Aüž¹N5N˜vV}«īčņņÜĒ 9øsÅ\ūGńūwöü÷$ł‡Å’€]ą?_č? ąŹ@wą?[õgB[ —Ɓ9żųöżó¹„zŻ“Ą=kėE’Š'ż’4Õņuš©Ž°Ø$@u(ą7S÷Ģ­Ü¢Ź2Ž_8 IDATīYk[voŽ‹jė] šĄ_é’EWŽš!Āėx6ajæ‘l;ī+a¬Ż¢i( Ą'MlnY{F;SßQ*‚k‘{`ہ†æńōv歕gSb`ēģŚßrŖ” ŽsļžĖEsŠÄū ćO9ĆĪNyųŚö‹ŚŻ˜ĄÅ±|¹é~Ė’šVÅ$ śW©&œS±u9I’bK$”|[f"@†€@XƒT“„l€$@> ÖKŌ)°Ł}żwńnī„žžk{ƒ›t×-§F©_? Ģ>‡Š×¦tĮ”ˆ€N*żžßüÆnæĪ;‰ŅUŽš1W‡hėå+ū?<4’×ÕZƉMŃ©õ±ńĘÄՁ£"¦&@X§>Œōź ĪX/jÅ©q^¬So%XL° x›Ŗ4ČžĆÆVKjo4!PŒŒx55ⱚXD+m”ÓT%€/ūBčS"H‰ƒŒbŹļÉ%‚@Ȑ< ‘‘ś¼˜khȋmČA}$R±iČ 1u9$g„Č łH0įŖC kŻŁiŃ!qŅ$WE;bŌy„ąŠ‚CWķ,‚SÕö"ŚVōŚQD;bՎX}[Ś‹¾ź#±ę©€ģ3ŌģWÉ~¬.ä';U}Ą)9™<#å`?ćß×ģi?Ŗ& īķ"óuń*ų¤ĖļÄcċØ7bœœu"āEŒ«q’ą$tķHż& Vc$–_ķėĻś„±^kuūS™æćdež€ŻĒü‰ćŅMF6äoŲĖ-ƒ¶½dŹāµéĶķ‡ļŁŻG¾” łóō¼a_žŪ»’ō‘|xżiŸŪ³Ų/Œ 4…8üĖϜ'­‰§¼qdó̾…Fūä­g¬öƒN‹¦’’Ļ|ūĄļv˜ŽžŃ-ĻLxį«_8`Ü#ó†ńęŁ'ēŪŻĘķżķM7Ÿ“Réö-’®*č/Młļ7ĆÕķüŪ/ ŗng?{ż §üyŗo-æG”Åē ]ōį£łżįć’YąŸ,ųčŽX\š Oü8zc6jkå F˜ż¹õøļļ2«śÜičßžė1ģõøXµ–?mó5Ž?ćZŚ`įąŗ}ą’³Q}@/­å) %¦¼<~6—«²ĻŽŲ€ķ7’ó”öt€™æb…w¦q˜s|“˜ē‹į×ÉZrCŲ~›ļórõx@X~HXųˆĄÕ…~[ä^£:”³ÆŸĖoć²A3+®ŁÄ鶈įowņ“’Ķį-€]³ū <@h{¾…^˜ĆŌtB@w$€(¦£ĘöžHX6¹„c," KA Pe Ȇ†c&€¦ģ¹Īę@• c €rč Ķw•d{O˜ АQh«äv¹yП£˜•k?C-¾ø^Ē÷_]«srŠŅ—pČķ|}õéz½čs" ’_rŪ8yŹZqxˆÕŠcjŠØ-¦¤÷qŒ‘ä«"Ö;5źÕ:1†X­SŒxµĪ«Ń8쫨u>Ø”t¤`˜ŖDÕxÅŖWKųS2‚7ŽcÅ«Ń4@}b@P1«P&Ņ`Į ) ØųŠwNŌ"IVC1€„¼ø¤Ż]V Y•€f¾§ÜĻnƧŹö®ŠķśwPūż„Öʅܶ„h|!{–¾//•Ī%LR±¦ę%»æ¤€>€|’ņ˜¾Dˆ‘śY?@Iʟ¬MĘņ)A¾įĆ5IÉĆ_’ōwķš{#Ę«Ŗ7†Ų ‹3"NĮ› =q&ńó‹$į€!äĻŁÄB`#b ōŪ(äDźč|*ń¾~õVP›§ŽŖQۨμˆhčö/¦™æA)8ŗKō‡ų§ė¬Żņ¼É»{µåøøĪ¼~ū‰ćim2.ņ·×ń/’!ßęכ¶n’ļ’öØ{Ŗ»žŁcęņā¾ÕŁøõYo^cb>eŻ~?žß!£īĻzżæüē©›Œy¾õėtĄĒy™ŒŠt ”\”Į>r׏F±`x®³»®?P’©×Ģcƒ7øjīo^Ū“į“ēwkxėć’üƒ…żut€M€xwk—gšßķøæž’xŸøƒĖŌ1!sŲNk¹rķµ9éźgƔ®źÄ’É/!ßŲ€ļ;9hį•~ƒ9čžY<Ż+¤’}ąæWVƹ±ė«ŖZó®;Œ_sĀ;Ķ+°åΧ1#}VÆė å„ųļ+’xß*ęSgbļÕÄjÄÄNŒL¾MFŸN š$ā&–Œ–T8@’ Į„ `w£žŠ¹—dŖ@ø—ŹA Į¼D”ĒęüP²hydI-öĘK/r™€ūd¬"ŗžŪ[’[½…€’ ˜/}‘ģŗĢ ¦VJūþ&ś5uZ”žeJØMŻ}-ūöQEƒ|æ ģƒ*& ł/ąõ&ĶčųÕ§²~Č_źņ A~ŠĒŖkœØx‰ŌYĮ«XgÅł ļ—ŌĒß-č7F¼–Āüŗ—ų{Õ¼÷ŻvūÕ)ŗ öƒ A%ā—ųÆžą¬±“·śvéźtaĄ?=FŌ^0»œüŹQ›’ü‡c’p÷1«ü#ėõßźŅw·żĢ¼_¹¼¼uĆéćæỶÆžĄ?ÅpÖĶ~’īÄ᯵T¬3/^ó»5*]k"ł4½Š°Å•ļļ×<«°S®&„øœ¼5wdīšæ;ņŗŽzćŖĮæĶ„ö-ķ½ü7HW…Āg üCŁ÷ėEŌżólīPĒ—DxÓš°Ŗ:¾LųˆžŪŠÄžXĄæŗKüßaćē~ĄßTY(D'żü*~»Õ^µÕ [÷łž?ÓÕGōāś(VųxI€[Ą’yĒ…Ąģ¦žl³ĖY¼R½ęßæ`|Ē,ŽĮ±/a*Ūlcłćš5ųć¶G2ūŗ£ŲµŠĘU€‰ųĘfēr„É K2ŽOlÖȖ+äøF…ö7cvpæzž³-lPōÜōB+'½Rؔķ=˜Ė¬°} Ž8ƒ½Ū_=&0]»^#c?—ē“œ°%@¬<{åū|½½Ę‡š’é÷½Y Ł|‰`šV„Į!4V‚žz[™“īœJ.—+’Z–€ " Š€$s #ķ/]ū¢ yą½J®h¢ iڶqžYĻzņ­ ¼õŹZoūpdqN šÕ…æŅsL!=O™ˆ‹ŚÅ‚’®ßs’l»ĪdŽ—^üłP@;’8¶xīs«š—sł\ŃÄ*±ATU²d€QQIÉT„ UžŠ­ÕŖ`œd€ś$X‡ń"§FÕēÅØ’üŒuš["ßL’`$%,ĘØ÷&dØA¦U/%R€$(0ØTb”D @€ø@6HJ@)x0ŪżDBM‡ĒĈ+%å@Č£Æ­ČV­DÅłŪŃŖoŖo+JÄ$Ŗ&ß§½ünĄ}r”Šh²KŗNæØIŗż^UŌHJ.hōŒ×ąõĄ¾öQŒń(^Œ:äI‡Ÿų’˜¤KŽŗ~cԫଈS«ń"Ž‹oEœ >2I§_¼±>ŠÄ©ÉČū3 _D”œw)čAkIüÓ~XļŖ»żµdžŠ5Ų/ üMȗ¤ć’ś§­·źC³ĪyiĒ‘ß{eū^ķ ųCāg}žEąswĪ\mŻŪ?øŌ ÅG¾9śom4ąƒŅõ·Ģ'¼q™ķō«}°ZĆoī=j•ė³ĒĶå„"ÅæX„zģń“×ƵūśV|ü«+¼ŲÅē˜ŌŠ)m 9`ö˜ŗ^­ś«īś[+%ž¢ŒųkkkŃzĻłżĆł»“Øtž„;ę>„ą`ꒁ€CĒsj\ąXk¹śØ38ōącBėaĒÕXyś~§Ž]¬å¢żā˜#ĪŖ%Öļ%õ¹œĒ„€ĄIĆVāŪ’x›©Łu[/!ų‡>é’§„zķ ^_…ź ”€Š3 pŪ‘LpķÜsĶLüź9<”}ü¦cY?nį8Æ|0*¼g-æ¾.óZĘ×’˜/·/ąV >ŲŻxĄtŪ§›ą`åVåųŲÓ1Ąņk ÉĆūó?»m>·Å…x&ĒÜeūˆ8[ żõN&¤–Øģų÷DnBö³4)ĝžKī›Å¹Ó“ūZ¹)0’ع°ō§Ą’«²$@Œš¦jĄ«Ō²PEtK@5" ;5@źgžS†€@d=Q9# »Ž(BÓk¬ öĖ'CQ•Čˆj"`“ēu•‰ĖyÉžZ{eĶ7:÷kvüzžØü ‰ŠŲJĪ—É_T«qjŌ9©&|Œ‰EMģՊW;Œ"†ė“$ć·źŌø¤‹Æ‰:Ą91ÉT#jI@ȦźSBĄąÅ8M,ų`HU!0 v%$U &Ō%ß µˆdM™Ū2Żü APA¤€_I˜>iād uR Ut¹×ÆÉ=eY:XłLRAh—µ¢iH_Ų'PņõKšō‡ćy4ż• _3ż’@¤č{5F¼M¼ūe°ÆFÕØO’]…‡?µæ'VM‚ň«>ŪåĮ›œÄFÅ[ĘJä}äROæuĘx_īō—ĆüDPc"/Ę«©/ļE}$Ŗ¶‡n•Ģ? ś!€÷ ü”ü§Ē«kuŃW~łĀµ…zū֍'­yt5šO×fÓż³ą?}sÜé×o~ĄŒŽotōøįōĻż$ņ·É3¾“ŹćsĻÅȂGµļ”õ̲VŌXŹ)žÅpÖ²P¤$@v]].gØ“åw«€@T[ L4BM ķųw§č‘ČEx ÉüŁ.ŒĒOr åßg–š^eĄ,ßō£ŪóėbĘŌxŁze½šsƞ¶ū}Ӏh.9ńbDÕ«8ÆĘÄVbÆ¢1%2gj’ āœZ§j|ŒńØMŗüʧŠÉŖxw^MÉ.%Āödb€Õ$CĄŁī>/(Ŗ„ĢÆFÄļ½FBĻŚ$ÉB€øFUBv˜¾¢B&7-e”HØ" ’ ‰>ž]rj‚’%¹©Č"z©¼©¬ŗ”@”ȀśōYԊųš…®²KłMä4‘īCņš}ˆó¢ÉąĒDźØžš/"NTÕćTĀ6LŽØxć1a@š‹ ²¬_¼•Qą*¤ż‚·F½(ŽXńb¬·9 ¶A½EsV]¶Óe@źė÷"jņŽėB@æĆamųSXą_śa±zā˜ķ~÷śwĢčŲļ­÷Čž£÷æWŒycė”ļōüÓó4Ļ,Öļśėׯ0±Ž|w½~Ē?šķŃ÷gĻ·ū ƝR?/žŠŁ=|ŪYćōšŸ†üe½žkÜ7säƛõŸb¼xÕ«˜}ŖÖÕ,d¼_u×zä>ł1šŁ’ß[‹t¶sN]G=ÕĮkœžvŠDā’OUĘ3š²ļ¤9Į&›V6ōļŠ 4łY.š>ÜņĆkÆĶĻ=²¹ŅZš}¾’å½ś€å¤>`ŅBžŖI€‡Odō¬xP`D.āą p5Ąm?b¢/rœ*›¼,uœ½žAücÕ Ćēń”ä\ĻžĀČĀ īWeŒ®Üņx½r—7ĖO% °CžM®'“Ä ‚0ˆO~ßÕj$AcU@`éÜt%²$@śs8N„€\D¬ÉhĮĢS" K %ˆ"ŒQłžµśƒsäkݼ\½¶®\ųē=ėŁ[›ä8ēˆ“÷Kõ*^H“’Ŗ*’Fh&3ĄÅh ø½šŲƒs"ĘĘ^-Ž$ꤒHģU„NS¬aÜ QŒĮyćP#Šļc½o¼yxăATÄćńPÄ'Ё H”ĮJ’!@%É 3^°l‘׊!c (5ž+r ń„>čZµ’Ķe?æJrż.{vŁŖ„•Rś‡"&ķškfYŲ&„Ē%łą#ąźĄkXĀ‚O?ł¢I:śšśŖ¢ÅAĮ+Rīž‹øģ{Zŗū%°Oä«UoÅ8±‚Óæo5üx±a_E—_ŋ‘Rę@šŽÆŅū+åżµ@æˆØ¼’z+>;¾‚Ä?d‚ś…‚~(’šŻ~Ąx—€óJŠėų R’ń}8zƒė¦’½Xg&?|ŠJǬćŒśĶģÜ­Š=żŸ3Ö9Ŗ'ąŸ=ö¦™ņ啟l9ĖEņž=Ǭ¶ļģŃłR#bÅēēŚģĻÓ®§+Ģ^©īÜ»Ž{Uų›TaķwĄ1oŽ%Ŗłæ³śV°ų]’ź ?Ū^Ō.]=åI%’Pü/Lņ}ą?ż²$ąųŹč®×9Ē®CWdżIļņRõł³ž’"®RĒžÉ…\?~øƒ‹”ūÄ’8 ŲĮ¹@nńžŻÓĒśĄ’g·ś€å„zY(ą3æ£ß»Æp/šqģ.šūŪŽb3ßĪ©Ŗl‘,ĪŌńūķ÷ćź›võ§ż÷Æ ˜ó(w©².†Icvf·-w«ķkZžH€f PE"„V*>¼6XwdÄu P::į·ĶēĀ(V LI€ŻpP³įt ćÕ"žšĻ›éšbŁyŪÆć4ßéøź±¹œłzó²¹;6ó„~–sĀ(::b^x­•›ŸYĄ‡Ė’€%³¤ū-k5@äT\}^²D@p" k €Śj€”°©• Pźź;ŸHˆ…J˜DU²ł ¬2ń {½`ÜßāÖ|ѶcVk;=Z„yr~°ķ#ź:“¤·8–J21±‘¢S£U™š‚—€k_4AöÆaS5#) jŒ÷jć”°µ Q²5^½5āŅQ‚R@QA1šLĄ\W5ŠJĘBLÓŠ„(HĘšŠĮõ’ŠbÉ{ŠGÖ-)B’:TJ&@fŖ€T|.TŲHļ+I‚nó*JŖĄb¹ū_ڵD¤ß§€MĆś IŠäY–¾Į’nóį¢B'æ+ČGńØ)uōM’ F½Qńˆx 'ĮPįŠ–Ą~ :|ÉæŸØ²~©ü€†æų(IņW#> æ]EÄ[c½‰¼]~ ēŌGorāÅ[•@æµā•¾~(wū]ĮĮbtūŗži·?ŁqIvŸÆšņļźZć Š(¹b½yqźżń™Æx¶äæj’¬Ü^’u}K¼Ķüał«nūÅźēA’`э.ŗŃ˜GēŸą'±’8ņ1—µdĄ?ĄǾy3^^qĪź[.Vן%śėIņaōŌ’ ž%쯻õ}ąæ\µĄ’XŠ ›Ł»XąK¾“c7Žŗ’ŲÉ&žoŚĄÅž,Ām6Ēcqc-—M<ˆĆŗ“«u ­½‡±ņ¬Y\ŅŠĄŃ­­<—nļ żūģV°Uo \šņOž››€ķ%ā”(ā¾ø“SRą/ĀQž3vw¾Ōͱ^¼ŽüK÷šo<[‹šōˆ ŲqĢwh×Ķy³$Ą“ŪČO¾½qŒY’`Ī„å“Ų®ž śĮQ3bN~Ŗ•ÉŁõÕ$ĄMŒŸēn iņ³ė?ąņbäęė72lµ:N;ąį„÷ŚųéŻóy Ź@}|37ČļsĀ6ÕĻhó›Ķęņ%É€%°ŌŃõN„ź|Łć- 5@– YٜXƒdm¹|›MłĻØāBų}ÕRXIŽīÕįšSI~BĄ"Ž!&k+膊ÆC«9éļö¬ęv6čę%źõuw¾ć‰æ®Ė_ «ŸU×d‹ jFØ ±j 2ĄaIsLbšE1NIŌ.Q Ō"Ō©QA ^lčā«„ J•@š#€W ¤ā`7ź’©*!8Ä"8C ¤joŚ‘L&€÷¢"_1FP5±F”¼ż%•@ˆĘ£<%õeD^5N0ݖٰø÷)°ĻvŽjåĖ M, Zšģ—lń)3FŒ†K £śLX_ņQŌ`e“ä¤ ]D<ąEŒ–|ū™Ī~-°Ÿī§b¼õ">Čū#¼xŃ,ą·Ö«hīĘX'āÕDā»ķņK2²/Iļ7‚f=ż" ż‹#ń‡…wū{’łCĄ_ƒJ šūÜü!’}źļ£‚0}Ķę_>öcļģLgŚWużk’tū˜'ē Żäņi׈§ī„†|ėÕÆx(ūOŸrŠ w;ĆŠņņ6ƒ¾’ō#^®ž#_ėč·ć…ļŽēeņµgŽŻ ÆėßSŠ_o•üg³¤cž üCü×8m©²ąÆUõÖ[<t¬ž6üdz¼æevikįo„ĪžĆVbļź°æ“¶^Dß_čßg§ś€å¬zC(ą}ßēĻxž‡°eGB[čö\gīų[ž—®ŻØ&¦¼Æ‰D äAE¼÷FŌ†Ą7 ėĆ$±a*@šž:žŇߐļXol¢<ÖkźįW‹Z±^$„=ˆ)‡÷£Ž`^ņņ[Ɗ7õāMB¤!~X‡$ĄŽZń֊OxžKś” ü“×Xr™?ÕĒ^DąŸēs·L7}ķęiƒßhŗžĶļ’ ‘öū¾æŅ>Ó>×<Æāųqœž”ųźs¦e­hŽ©ģņćW.‹:żēf®Śpę‡łWšīPß”2įōɇõ›Yüą[F׿±Q’k_ŁvąŪćœ7f­ę~»~¾›č­L»÷°‘{Ļ[לItżį£Ižaéūża递ź1šŁ’PéūßēóŒxóŽį™Ē}V čׇ0~ölī†q.Ēqw8–ų‡>ß’§­ś€å“>Iąžļņ…}®ÉõćĢ gńźĀ®7%®’ßuĪŚóMģ¼ūoĖ ¦µH€×Ndå–ł‘sLj…ĪÕó‡/ĻķɇWoŹX¤pĄN¤š€Ź1õgõQp7Bžż"ū> me9¼^ų‘9…©³=?æe&wēŖĄzJl;€ G7p#ąguņĶ›?ąA€l.@\DöŹŃĀįŖ“>ŻŹv϶ń^O$,¾% żž“R@϶€j@Č ’H¾© ŖHHŌ=Ø:ӑ‚éł” ˜‡@T“P9ŹÆ»}M&ķ?K¬ņŽ|čmѵ,‡Ž’ꚁk;lōüߍX£é•~ĆėęG9qźē’×'! ¼¦6,ˆ5 ¬”ˆbm;•qkhÖ±@×ģ_dLĪÓÆ§ksP˜éĢiyŽz±Į½qļ }sŗõXІJ„@”$; 1 I¶ ¹|ā*ŽyQ0’tżI 4ü¬ į¶MÓi)˜#%2“Kb¤TįuL¾–!bś÷^ÕÓzŒ³AĖ ³‚ (“ZR ą)©xDÆĘ Ŗ¼ō©|]PšŖVJ²żš æxM:ś”¾ €=$1z4ł…Ī~ ö4 ģĖv÷AԘŠåDŌWž˜ūųĮXļ„N4õņŪšŖ•¤żivĀGżP–ūĆ"€~Xb™?ō ü7¼qśē‡Nn’‚‚łpõ†§žßcĢsiø_ŗL<åõc›gvŸ7<Ķ~>īüÅžéX?€unų`Ķ5īžūW ­4rÆ) ˜Uņ·Ć…ÓwńfūÓĮÕĒs9™üüā?|cǁÓ>rן% śƒĒļK'ģ*Į·](’\ę˜Ėų‡2°$ą`óöķčąoQĒ<ŅĮyéö–ĢŗšŁ¦³•ŪIdQĘpå–[ņ½{ļ­Ģč’}•V°¼Ö2„E#ž9—ęŽ÷¼Éé¼å`Ą…Õ­GšußĮ•€źŁ{ßŁ~ZYą©ćYßĶēhõ| °„łÉ’ilāœŻĻęQ(gĢ|7|ķ-$,ʄ€… y¢ķė¹Łt(ēĶ.rˈ<ē;•?=ŚŹoß-†7łø€¤¹i‹ČŽCłE½åPēyąŹŲ*z.!†Ō‘Ū¹{DX©Ķqį5†|XöSąćQĄĀm‘CČē+¶Y›+I÷Ó|€\Ęąb—@ ‹rxÆ=éq`įD@֐Ż/<ļ  H‰€CoˆöZå}sXõó_^넆y·¼=>ŗ}ąŖ Ó4F…ꐹøØXl2`“wdĢSż6+¶ČęyĒĄr^ˆß©ó/=ŌOŸøa˜¾Xš^C®ā¼ uIÄķF2jZÄI@ņ|L°x$äF$ż>%Pńź“äSz2d®4äī„9šģS÷Y¼æ˜÷7é®‰āĄ©—ņĒ^B¤ Ö›š½ŖńAS‘ńż‹AQI¬I×?€5µ‰Ŗ@Åx) SUÆQƒw"6¬·É=ĮŪH½x“ģKźĆu‰÷‚¦~€ éO;üeĄŸ•õK¦ĖoBĀˆØ©!ķO^1Å-čÆéķ7¢F»—ų§ėŪßo˽š_éÉyĆ7ŗ~śĻņ­ńzŁķ¢{ļżŃj§Ķuf„žcž›?d‹?O½°}cō~“7jžŃšČåš]5Öo×S&Ó<«øO{’čöNYł„ō³5ņµŽ~Ü2sbæYńf6ö+ųœyoĮ ¹ūī’꩛㣅"Ī–ŸÓŅčśwōK?åz”ßŗ‚’nüž°|€’‹Ž`ĄÓwrH±ČxšŒį\÷­»)7żånJ—S ž6©ćÄøĄ‰ģqkøon©±n»ˆK¼gX•uDxfå•ŁiņdfĮ2’į}ĄrX}Ąr\‹“Ėn2@õxĄZuŪQlįŚø؏r±ĒøØÖŗĢfÅ6ŽĮ³3į¼,’lÄY{üŠ—³k«'Ą§Ų©?‡× ?óš\¬Ü•r›ŚĪOīīą•ĘŖżj‘{ęJ+lÕīłĶuiŌ&¾6€Ćš Ēy˜|łl›=voµ”޵”mݦ?Ūŗ“gˆė%QåhO@üˆļU¼é𵉀j«Aś œš÷ÜyMņ…®-ŸõoÓöÖ_Ę’:t¦×›‡äZm”$l'’eĖÅ%Ą,E_Į6]™[½ąĒož–’ś6ݐeš™9ßźĢźŻ— óOÄ9-įŖXÕąJ¢vqQWI ØCŌh:é>„¦„@BøŅĻ"ʦüT‘Ž ÄG}ščo”®(Q‘ā ­’ĄTf–.vłä R¾Ł gQƒIAnčĢ'€¾“¾”łWöį‚%Iūyš|ˆMmź1`ń^°Ŗ‚76(<ĮF`lR ł×TĘcĀ !t÷UńŽzM»ūI°ŸO=ü"hĶ•¬ĄÆĖ‰óµŗü–臺żÉŖA?,š÷y“X ś ®ŪžœW/Ž:ż*r“ęŖ{°nA¼B’éū§ƒ:śEžē“ń?uĶśüwśõ‡ šÖqpū€čĪ9ī¤źs§U ųCåΊŽx³³i»sß¾Nœ{{½ęĆī;hÄ#ÕĒčv“­ėü/N×–LņKī÷ļĶą?žšÉ€ØMTƒ’ć¶fĶYļp“*cjœŗ%Źsńv»sśÆ® AŲÕµI? œ’«ć‡wš§īĘż}eė“ĪåŃQ«2ī½·ł®*Ÿæč"¾žļ„籓’”Æūæpk‘©%`Æ!ü+‚/µ*æž×ū\X±6Ņ€uG2v¤aĆ)ķ<śt+3ŖÆõć°ĄG³č,®- –% «€„ČW†RPSK `M™DØV]ˆ€j =–÷*Ę Õ$”3ŗ³4ĻÕśŸž+÷Qņ]vž¤kōhx÷Ż…Æ«Ŗ7(¶1xŽe+Œo~rИ†YłF«Æ” Ūß«Æ%@Į[üźļ3hƧüACēėV| Ÿ•-‘ĪŗiØ»öĘž%ĮØQ—„ †k EÆÖ:š)0Wē–…„Å8—xł$ŽH6ČOŹa%¢ Ł.^L ż3¤dC$«åżé‚Ex½jÜ8&Iū•G¢|“i’Ė‹zo’ż}) öšŻĻ£jÅ+Š V% Ų ÄA¶yµ©J€ *Č}‚’_S`/ŖŽū®`_ÄŖ¦|ćU,jņe%ą‡¬¬ßˆh¾N¼±‘O|E—p®PzMź2 sa  %ŵŪ_ ōCųw'óč¬įļoœ×­śōœ_Żiųۜżś¾ƒßnūŽ{ėō?łįo¹7% >÷М1ŸæqĘy&Ö”ļ­ŽtĪXł†lĄßˆ©Åś­~7łŸĘé€×& 9ųé]‡WŲ«?ÅŠŁĻśüS¹’–š±żč—[Ļt9™zÓ1+ķÓ2,יī›Ė%bÕhæO²ė½GņŸ|Ņ?ōnš’÷“hŗē Ue5k¹xĄžåY0_(všuēŲ 0SšūóķIsy śś¶ģĻĶn᱓^`‹­ÖŖMl#ĢĖēłfg'7Oš„l½uøŽ¾Ä’¾Ŗ®>ąSP½™xä猚5‹PĘˆį’‰r„L€Æ£įÕū9Š9eUfĆł6āĻ«Ģüģ±e<ąrMTź ģŠO¹Œ€’4ö\;¹Ą)/w2ŗŽ „J" Kģ9ˆKr†;•K®yŸSk]g Ō³¹ŁķÕõiRĄ"ŲŖˆ›(RPķ Ņ”£B P²Ō B@8F-5@§× ’!GĻD@ų|Tłœ2£«‰€]&™7Ü]óÅł¤ėā‹į»ß]ģŻœ*{5Ģŗ!?®į¾‘k6MÉ5F…ź5=iķŸī°ĪT5^«¹µeZ ¼Ž ³Zńķ ¦U#¼#‘õǦHą5Ó½×ąU<˜4øąžw©SÆŌ!ųĮ‘¬ÕR×‡Ø å·M•åJķ łüńU·ŖŻ1s™Ī}śR”K~z(+^ń$ź!€éd_+  ł0:” šIĄø7ėJ ?ä ļ%HóCW“,ćǁˆUԊh öňŚ\¦»Ÿäø*°eĄ/‘UŃōšĄŸtłsį—² *}ż°˜ »Ū޽hĮ~»ūā£N·ā¤cĒķ³Å¹oœ[č½öŸŸ; ›Dņ…½æĪš“f]č­Ģæūč•÷žptŻ‚l²’æūk+¼Ł~l”Ń>~ĆoĘ’*ś%žĪŠVūüö9į­óźŪÜfó†ēž|ćOĘ^h}QM­®’b„üA÷]’„ō®c)ƒ’(f@ż'•ō漁Ø ż¾2śÕFŽ,“sF”ćÜg _}ž­G³Ö¬éœÆŹę@1WĒQwš§ģšßKžŠsxedńó»Šekf¶~¾; ŻĢ¬\Ž# .I·÷’¾ŖU}Ą§¤>ÉPĄle󹀞>ĻUYĆU’˜o[’ČōŸż"©ēUF LŽ ¬¼^’įónJs}Ņ$Ą  -!>`Ē»ö³?·Č ÷·UŽv˜›Čż³Ūj‘{ å§ †zå¾kfóź „õ5,ÕŪ³µ<Ø'$z&ŗS@ŠT©(Ō4BM5@.—+ļŪ P±ˆr];žYé’ˆo"łöM²ļź3ķŗØ7ŌĶ7Ćn»-Ń®G™ŁO¼½’½iԚͯ4͵§ą'­ōµ€®dĄ­?ä~°Ā<­°¾|Ü5ל™—¬č/}v“5—+EcĘš“¼ļ'S Ō!¢jB `’n}’sA~ģg‡£¼_ŲP¶F¤J„”0qZ~ķ“ś½ŗā­KU’ Ÿ¹®ŅöŅ§õŠOĀu)€O€=€7:óV€éśį8¢ 'Į|bQ—‘ˆŠā­…Mg2jłfÅ3b@'Ćr^󳡕āD:c£­9>œŻĄŒ©żĶŌ‡G›É-õ'ē¬čīC†/ąĻåDKćųj~cD«{öļŽØhw ?ģ’Ń»ż‹’č°Åy“æ2üՖćēŖ’kó§l0ąŒĒXń±ŅeeöŪõÄ×~Ž<»°ó¼QłĖnżÉjgÆ!7ßE»ŸüŚU¶ +MŁØ’‘O:ę%ąOŁē•Ą?}<[ć'Ķ]q“›g] Ųē' Üēł ßśHr’^Ņõ‡OĪļ}ą`bÄźŲrŻMsÕ’Ņ£–«ō·aŽž*? a SqĪUĻņ³U×*‹F¾ŽŽĪÕ&āWžœÓ:©ņŸģŽy.łS}=Ūµ·sō…žõU÷ÕG|Zź ¬®~ “Æ£ī„’ņo”­1ܓցģ÷Ž$šē¾Ć‘Žó£° DxŲÖsĪfGr˰•»Źš¦€L攦éϱ£ŲVa“@‡‰xrŲjüeŪ#)½÷}L`·$ĄbŒ \ °Kvh¹Pį½|Č”ė˜Ą“*H€Ɏ ¬µŽ%Ū«‰€īH€źcõV5Ō¶ōD@Ø×„ZD@7j" K@ŁPM4„»<—ø˜„D9¼)/æĘ©üšŚüń#˜Æt9@¶Œ£†ķ·‡8†_ż ~>’yŲzk8’üņŚĶ6ƒqćą²Ė ±N9%¬›?~ņ˜<9¬[{mXwŻšżžū‡ńłēĆ]w…mæüe’ƾ 7ŽW]Õć%V×ożÜ·ļ鯱væg†ŒŖŸ+yćRyæšŚ’uļ‘gjæCīö'5u²ębpUQ(^=¬pŁcĶću¶Ó'7]§€E1Ŗ.l7ˆŗ#4 ó#CY¢ Ux,Ŗ®¢Óo²ļŅY`qĆ’jTōeJ˜p½eąn“5)€-=–HōI~®÷a½Ē'?ģNy/Ŗbu°'·ēŻpü\6\”Ąē6唺¼Š9ƎW¦ ąÉ{Ö°¾=ʖ>§D%˜4ČžBÅóĻåRĄMiŌįĀ@v-,=Пž«ā±…ČüÓ}²ĄßāšÜę¹Ü.§½zq:P”čåVųīs» 9 üõƌ}vž ›žuś?é¼óČ1_»jó‚ģ9¶ødźÖ£žm9#®“×o=sõŚs⫁é¹Tuż³UćŁÓæ5hFńšŽf{ĒM§¬t<,¾Ü­ė’Q½žį:ü/ŠäYłżšL×ēūi’cA×1<¦Źų•.·ŠÕ_Šų“s| į57`“+žį}ÉóÕrĒĮB+Ā3uMq[ ’Ų©ž]:;¹xoƽXļŚk)ō…žõUOÕG|ŠjY„Āā“3_¼tCŁG„»¬Äó¦ń9Š€ŸįVŪĄŁ;’އŗ9ÖŠļ—ų”‹9č2†˜“ėĒ>{Ÿ]īŒ/m€!0³½«jui’H­»ĖE '6kfÜŲ\`„jeĶw:Źa3 #ŖGÖZ KĒĖ/ą’Oä’Yé~}]N².ū…ŁjÕj€ģ>ŻŽū1 % Žžģźŗsvš ŗ{-ŲsĻāO>ʎ ŅüÆ~5^}5|%Ć<<’<Üz+üō§0müķošå/ĆGĄ>ū„um’ž.ŗ†…+Ƅ]w…öö@:Ü}7l»dMų«|ˬ+µ_?|¦Ē†Œix?ß?gŒÆźś«Q?U‡ģwÆ’u}\3¤é«XŌ]7øxõ-«™ūū5FmŽyŖ\ØńT’éć)AP^_I¤Ū)}~$Ī‚äļ+K”ÖͱĻõ/šŗ!±4ä¦Óh<»^:>Øóķń"Œŗ*U ҁ­ŗŁt€IŅō³ ¾¢³ŸV Ų“xķCž j=*Ix ˜+°ńŒ˜ųĒ“É&ĘkĆ"?‡žJŌĶm§ž\ŁÜpėŗłē”ŅĆ‹ų”«“‰@?t+ń‡EėöCWą?꙳+¬{ė{ū7Ģ-~I¼ęćū挵ś_’Ō¾#K£~S¾żłoļ9drė‘oo8ą'}kōƒŁq~Ž¢éuģvŹ›Ē5}XŲcö˜ś‹ī:~ÕĖ <ŅĻteāqo\šėšė¼æFćÉ÷ühĢ-°čĄ?ėóoœē¢m.~ļ€Ēööykä[»•ū³l»žšŃƒž– æ?Ō’ óeš_ ųC’Éqj’Žę®ū- š°NÄ źŲeäXÖŗūmŽL÷©’I‡’J`Ī įl}×{åńŚŁÄ’ ģ[čąP"ftŌ×3±½ū–ų‡¾ī’§©ś€OYõą¾ļó»MBņ»Ņrn™ņ‹ĄŃ?ŠŁĄ. ?±p6ęœ?ņKķó@ĮĢx5ß:āz>_ÜńZ·¼}1«TŠ{›ø8)Ü1t(TGÆYŠX ÆA‡"@…‹®³%•č\ øŠkÖAu*WØ*ŠŃ­ĶˆxöÓ“ O¢sE€xM*xœ8:W°ch§„³ąĘŠNqh’R°öķV––cZ³ó—7ćų¬”°E‰dØė”£­- O0-tHŅŻft"¤śG·GaXčpÕŚź s²ĀÅFx.ĆCū&"\ÅČ.†Lt®`ųčīDĆDG‰œWAa! a £"@H ‰°³‹5ßGx~°Ą‹ ¾ļź0@fēŗ>ĀĶøŚR†D`‘%ß÷0_5ū–V>Āu],@Z––I”Uį+-Üģ/+fZ‚²€č5p=°Ģ_ģŅ@c­|/¤‰“ŃĀPtį4 :“üCį3&x=gLœõDŠŠ`õjŲvŪ śļG(Ķ{ļĒ-Č5ęĻo'’ˆ•ł’|z˜”¦ņuŅuµķūZś@{MD”™e„yö3śŗ/+ł0ņŒŗÄ×Ö~ŽŚüń¶ęl³H4¦ōĆu~Ū{ÓZ€ ‰¶µ”ņt6āŠqŚ£žJ Mg” ų“HĀ©ŠžBGSC!Xäuø¦ö}·}m „v]?ćj?]“hß@ūŹÓ†!“ ųį\ĄĶ’dG[I”ŒģāŲõÜ@čŠw»ż\žėuŠöI­¤ŠJyZ¾&š?+ŒŠŠ ÖYķc·Ż Ŗ*Ų?gģ¼sšzüx˜;7x]Ỷ·Ķ60hPū¹ržJ” ®Õ0•–Zaū޲ CJ ­:™§yœõ”svQ†ķūåĀ1uĪŚų×­Eé­Ü“NH)…eڶMŽXĢņmC(Ó¾–BajSū2ާćx:®=lķ¶v„„=#Fš_[ŗ†-]Ó4œ˜i8•ŹŠē$÷¹éU~sŲ2qѐ”Ž„§äæl-J¶nŌż)׎ń–ŗź“/Ō„˜„”ekߎi/†­}3Ž×>¤g%¤ŒdŅp†tƑ“¤³¤cŪҵĮ0-<ÓĀ“žĆ%¦}bŚ×¶RŅVŹ4µæóZæņŚéśŚmÖź“6ł@T5źĪyĘ»ó˜Yž$RūƒV-%Ś0…R“„ųĒ…Pįh;“ē· ™=N)“ē–…œü„ŚD*)…ŽÖÜKķėü+É!’C?jŖŲ’öEG ’¤„Ō²¤2 ”wž÷Šć„ŅE«¶-śķg ŸįDęß:m‹·Ž8sų·}[,KŌ{ģwÓ“ڮēyĢ9ač?µfFm9ł±5[wø—, ChĖjєŠ?Ŗ|™s*+};$’2ŪÖoĮ>Uæ×ąW,Ļ|c輦ņ|æōørµ…§ņEż ĆÕ¾ļj?õ ¼“%’vLØhŌßĖ!’!ń÷•£ ShĻwtŚiR2•ńó=£Lż„i&ux’ŁØ>ņošč¾¦ü™Ķž`ó"’ēM`ŲQ1~41I‡ö5÷Ķ`is+P“ģsž|ōY퉐‡`tĆZž”Zq¾=£‘'Ć}…Č.fĶ¢%$’…0ąų?€|žK±!D€|ŹāԜy{žŽ÷¤É¹Ņą¼­öfģŽwš«ń?ț‰ÕÆ]GͲ/xE÷+˜·Ķ~ܙk jF£„ $¾×yšOxā?q•ŸįöL+÷Öż“*蝐,éø½/"@<ī±ƒ"ƒ“4”&Ór÷åŠCX"ØZĄ×q¢™}ˆēŠł„€(ŁOѳzĮPČ]@“etq hLä.Œ¼< ¢īD€ču£Čž^_! -Ņˆ¹B€ļ»ŚqŚćQ!Iw]?M 8ąø.¹B"@>!Ą%bŹÓ±œ…s®ąE®/„ŠŽÆ…‹Ī—iŚŽāā &éŅö1c<ų`°öģv`āDxūķąuQQ`ü=ī‘G`f¤½±Óåz„OhŅ„“å{¹õž¢h }ō+z÷šZŽŽ`7ŅϤeń9+ģS–µimńmĖŹ“„oʃaĄ2‹,ß,²üØ0+Ų†P1Sų1Sų†)}ĆŌ¾ajß²•:óCµ÷/_ńo¼RŸm«¼¾+}F¹#ĘNūB\rÓkāšżV2Ņ4…oYҳ,éŁ1éZ–šl[»į°,ķ6®ać1\akO$Ś1ķ1ķ‡ÄŽ4µoBÅ,įĒ,įŪ†PńøåĒ斟HX^"ay'ČÄsŽ7gčŗfĀT”ī1_’äœ'¼S•Ņ"¬ē‡-…īDś#„æé/„īHæ4„IĘČĒK”w}pŁwk>nŗ“zaĖ`<éx:YēLŌē­‡æäBWš}/œPŗvŽAƒ®Ņ§jQźģ±Æ®‚ē” ōŚ‘±ęĘ!±‡F¼ŁpRōZ–-”e %•«q]Ž;¤bQk©ł’ōuõ”ū—aŁRł†Š¾Zf<żĪA„Ÿ·”›’FQŗŪCė.‰ž«ČuÉ%ž†:$žNÄäÆńwœ ź©õ÷Rn{ŹæMGņ1łÓN¦OF½IłĻSH”Ž[v{ŗėżsÉ‘Dõ‡ÓOÉ<‰^oņæ†~!’Ē$¹hń{Ģó~ä¤93wžIēņ3!X 5{>v/÷¼öņŌ‰TÆ]ĘĄPÓęź×SÜĪļ łŸŚĆ5śł@! ’ÅčĮC> z"L¹¦ÜĪŻ#¾Žž\ėź mśĻR·‚ēŃģ `žü Ķď^äŽÕ‹:FCąŻėŲBk† Xä¼1*Äc®ü#w*—Ėāü­Ž`mEöįŅS ČC÷—Š# |hfŸø­ŠĒ,Į±;&•;?*ģiqP x‹T{żThŪ“l·½­ ņĄb&ZĮ.cb]nģü|"Ą—% <Ÿ‘ [Hp€\! Ć5s² +d·¾ „ĆĪįø.FVš³‚d³"B€!…ī©@Ž`B{õQWZĆ3Ļt|ģ_µ ŹĖ!ļ(ŌÕASSēć>’¼ĖĖõŅh-4B“į e ”)‚Ī©j’±r>›™ĪdϽ×R½_jukukʱ]ķ „³’S~v …%|3y‚\”`—µbŠÆ^×ļX~^OÓ~GY†±g|ČõWĶŅg”¦”e˜Ś·,<ĖĀ3M雦ōć¶ōā¶ō¢d>Jčs‰},nśį0ćVې†P¦)}Ɛźō׿}÷žŌæR*Ū,e£C€»†Ó®ų‡wY,-L“öHæŌŁļš(é‡õ"ż!ńĪיō«.HæeIFū•-ėµ™©‚łŅŃ5Źk[« 7$žAVƒ”BĻ;øź“¦”öߊÄĒ=µę,„h»ŸŁ' ~PIZõŽA£ŽØ²ßu.Šź‚RB/ڵä@W~‘>ŻŖ÷M™ń“©óėųŖŪ”!j“Žį‡Ż¼ōx\—6—ł“„7LżĆŖż ’Nµž9Äæ-źŸrµ—Ź~ē’HŌßM5ł¶C^£æ¾Fż”cŹO]ž£-žÜHŌ?ß1a _½’ęčōß%łĻb}É?Ą‘6·:)~Ų†Į#ń"~™{Ģ_o!U6ˆÆŚēųKŽä×ĻåßZ³µašūYnˆ¼ē‚k˜+§‘<“˜ż¦öüēCOל°™=Šk ’Ķäļy•E®ņ—ūÅPØ '"@>ĢγķŻ{ˆ7/įa­ŁFŽ4–·=€Æ ˜®GO’æĶw®Q Uœ žų¤Ąu‡ƒžüO”¼ūWÕ>_×Po•päžWņpĪ—UhŹ™g{ŁŌŗxŁē„yKģŃæKؘ¹år½_ Õ’ė\Åo·°6JöCĄź…pX SNĮÓ˙=Ōā‘”L)å­SŖ¹at„ѳђ€• Š×²€ī„€čĻR”s…€žd@HЃEe(X.Ź…#ŪJĖŹ–ø.2ŽĪ+HQPŹÓ.Į½ÅPõ]żŽhl„²2°»ČŽ~÷Ż ­ßąĮAŻ?ž#6™ž*ßUż}šļ$#­ČB!ą“缯[ƒ7ŁMö§¤“SÜe™-żµ™¤åś:ihÆČŅnq '¾S\$œD8āĮH&D&w””ĖŌļ©¾ł¦śuIZėžźż r˽ö5~ŗ×*jŹJ §¬ĀL—WY©ņ*+U\a„ód±ČDG"ś~³#^Œv‘ö¾53sšN_ųŲ"|iPÓĢüÓż¾jR†r<‘ō«~$ż2‡ō»Ąö/®ŁŅrµˆ’ž¶ćOū¶Ø0ZUY[“_c”W…(ń'{£Ź@æqʈū“MEõŽA[¾ÕPŽėš1ÅM̓ķGŃX;>½öŌ|Ä?LõŸslĶ‚L±ńŖįéa{޳ä\±ā‹ķKźWn›üĄąEé|ż_<±’Ż+Ÿ‹5ū”¬ó¶3h#A^āo˜B‡ÄßĻ%žyŅż”ŻäĻ¤ū÷Łįæ›ØHžŻ \ļæ>f¹äæ™Āä?ę¢7E›?č?ņ_3}ī8.ņ]Ī‚eeöžĒ)o7ńļč1”įß󫙗,į4Ąó}.ԚIŅą”ß=ĘåįÜ|kä(Žy™ƒ3-<žH°otū†2żh÷÷ߍąæ½(€ +|%Ēł`éŪüNkvC°°r(Gģv9ė¶:Ģą­9Į‡(Īō|.É=×S?dlÖ+Ą3+ø3ܞOxü:†~1‹g•ā@_ÄkŲė‹y%ź ż'dśQˆÅхJÜōø h°ēInUF,śpŽ-Éø­L‚4køü$ܗ+ņˆ 5’äÉ5ünØĶż&ģ† ķi^Ź(ׂś˜ąÄ©Iß”ˆ”¹÷¼1³ oeėėŠ/ĄWn›ą”ąø.N6źZéč”ņt®?@PŹÓą«z»°'D’ḗ}ö)<ēw‚ö}óē·o[ŗ’IŲrĖ.Oßåuūą°ĻCāi_)%}ķå0¦m¾Š•5u›Oź.j“‘8¢ŽŚæveføÓäå7rl+ļzœūø{Ź.ŸśWŠāü6: ÄeŌ׎VæŽķ wr&£LßÓ=ūŁŃ–ß~0¤ėkéśśŲ—Ż·^¢æ“YCZō¾ē=ę\œjõ-€š‡¤æ+ ’š÷”ō§ ƒCž?]płŽ’YłēżžšłŃ–%#ń£żé˜QKł„a“_›¢ÖšuU¢É7s‰ķÆki­°^Dcm÷ÜŚcĆÓ[¶P[óWéäZē˜!s›*s‰æŸ-‰’O/Ś1łG€źÅ™oŲŽźųq]^>»śÅ5cā×hI³ōõ-h­i’⹫‡ßŠćāūngāOž:(œīߜśC{kæõ‡Ž.’}x¢ēJ÷_½¾”’.ėżsÉsļŪümLņ_ź {JžÆ;šr'ŏ§r0_}­>h³E®Ū’ŒFžN$8Śjö™Ķ}f¬‘óÜv¼ _%ų$¶ż8ž`}1 ü 7~°ńD€g.bķóM Õ*įč=~ÜžÕ<ł2źŹ*8RVų>?’ēwŪ›̽ƒ¢–Zž $1¹}矵÷K…Ž"Ą?Æb»†LvęĮ>»’„ņB÷"@T($@ĻD€B¾¶Ūs_€™µĢoō9GkCsō^šśń„\wH)—QʽC,ž0FCżZĶé³Y=GkĪ9»* §ģ AłŪČ‚Tˆļ>¦Ī¹Z¶”ī±·°“Hń)?āļg‚Ģ„Y'Ō¼ē$Œ· WžņēU­ń·¬ Äē¹ļ yüɈšī!åĒ<~ķČ^üŽąæ»ĀU½©óļMŗ”ØHü”¢ž½Ił_oŒ”’žŌū·‘’nĢž #łĻ7wC’čÜęņ»żæ÷ņÅg¬äÜcrɈ™­ü+™ä$ „|NūĒŃšoī†K‹ļvOåĪu  _ä%år²ņ9ö“—y%µ–ÕŸ¾ÉChö‚wFķĘ7¶ß ·!ēzµĄĢļ1„µĒ!BņÜW&rĢ>—P[ 4‚(*…ÖFD#0¤R-Į9 Ņ"–'Õł}Ų1p2Ł6{)( pœžö6˜Łm¦‚#ho—ӏÜvz¦ž‡0TĒ^÷¾ FN_{Ƅį󔳂}€a†`’)Ų[ Ę҇¹+2œśF+ʍ€/†}ķ!Xܹd{ĢŅzĒ*0g7$b MlĻ ’’ @zm†o’{-÷5x8ŅŽiL£>iäÅq%ģ+%ćGŪŲó=f*Õłw( Š !UĒ{‘2®BxŪĪŽš\RCĖ ­Ytž’`ÉąümĒź`hYųs^[ēÜÆ( 1Š~Ļµ•½¦iĮ)t0<Š |ķū>Rķ}ٵBzJ`“«ģvÓ4ŪZ“”оBū(adē†åį*…„Āa}ܵhģ3 _#„Zµ\×čØ}j“Gw]·Žz+ˆņļ¾;¬YÆ¾ŚŽĀÆ®.ˆö?õ47··p!,^ Ē&Ą¼yA+Ą0ŗŸJĮ'©Ī²`Ń"ØĻV%,XĒ|£ŁŻ`¹rõ=~c­4>/®¶–ÕŲõ2fų)ō:•Ų.W ÄfŻ7‰0V¹nl¾é-K”šuv©įH„Ö+»®†.xB=¤N³©īæ$Č-›Äät“·ź³Į,‹Ł†­c“Jh”¾蜔žv|:¾ßź•8q¦ž™é“×žĖ†š”˜°.ķĻ[R)ÖX±vr/„І–Z"“$"źyRh-Š)P6ZAŲ㾄{o’ĢŖ“ īn¦£†®Ŗ‰5{;æńˆŅUĪĀe;—-©kŲbnS<ŽäMŖž<]žŃ¾U3_¬’6Łdšg©ņŹÅ©inB~śÉŌA³šłū­<›Isšķ[8た³zä¶¼?zūĪ÷pŽv”-]Źæ€-,‹¾šo ’ō_ŹTøl8hŻõæłu9Ÿ‰ēģøĄgę„<Ū^īāó5ó"&Ø4o‹ĒÉv[ķQ8ŽńŌEä§łЌ`^–ü/IV³ļ“ėŪӘG®÷öŜ RÜ Ä0øoß¹`ųŌY,ĶĪ_³4ųļp`ŻŖösŌYĮė¦Śü±}ū *h1­MēV­ĶķŪӝ\¶Ņ­łÆ‘N!«ć>;nµOńN„œl ö•š -XÜ O¼XĒ3äyX×;×ģx®\W,/+`|m0æ°§M«]Ī|zoę»ĻEœ8Œo\ ą(īūO?nź" ļg/ē^üˆŲĻ9&W4ń³ĒĘrę™^ēßUTTé ~žcĆk8ŻDS~ēcC”Ć|avG1ǰņ‹ V¬VY*¤|„eļ8ß÷µP>Ā,+sTĪgÅ|iŠLF+97ĻØ¼·\Õü—ą?n³’ ænaQ„5³z›¢WkĘ-‹Å„¦EŸń“ž¶ķ.ŻŌ÷Ł˜£3­W7ü³z«ä5Ū-‰›™Ü~ń¹ŠJ‹sžšßjßÜX÷¹>pī=#Ņæ™·£żv²ŅJ©nŽWR ś?\öyU£:pĆÜé†A£T«ÆŽC]T:2¶VŚŅļŠ/[Īõ¶PĀ}Čm÷āš-wzl坾™;”ÜųÖ×FĪ(jHŪ“X~\Å­g#šīUuń[Ē y·|?š†Oī7<=ų橃Ī縚÷Ū.Iš{Żę…5£'>ŗźžÖ ó™^?ö:€]Y½Ż¶/ÕžŃÉõ£“—/n=ĘJ«|[,mŖ‰’kĮ‘ƒ[¶}¢.¼æP? =¤!ō‘?śōŖd­÷ÕƚŲžy刻 žr\—S®žāOVFļøt‡ÄÅ3ĪŖ™méGÄÕ"ę~’ģus£īmčPēļ8™¶s¤&ÕUVYwh'ž…Ž^”ųÆO{?r¢ž…®ÓŸ-ž ėz’|×ļM½?¬?ł/vūFžĆ×Qņ01É9™æ·m®'ĆOĆyŻ‘’(ŽϐóøSė ““¼oĘøiĢŽüūŽ7hųx6ā»{±&ƍĄ8!xöĪ;9¢āœüEä½Į—:nżŽ–ä¢ßŹ<öĄą/]‘€Ćnę9arPŽfoŸ'Ŗ9 Jž”ż‹łķ øD-U,ĆäŚQßēÜ\ņķ¢å©œr€ Æ:ś¬]E«Šm}e#Ųę€k šŸØåī„łś£Žųgš žIó¤›ĄĻ§ąē¶ „ü%ÓŖŲ7Kž½Uē¾ŠČ]źH}š-9żčJnŻ¢ ««vPŲ6~Y@īõ£č©Q`”Ņ€°} ĘQŃŅ€Be®ė€ė ³©±AtŗÉÕ²©}~XąčÖ¬‘V“,Ś=,|3„ū¹å}ŲŻļasĀė^ŚB§Œ„lŒ©˜)”i¶§öŽXĶfE»ĀģdeJŒIÕ¹ƒSõ^¢'uó‡Ķfü–«:·©ś²ĮŅX§.±æ“ų4³es½—J‹°}a ÕՈ’’CßR;T5Ŗ6å{Y”*9ųäwõ©uµNiW*Ēm鿆Š$„ ÓūUÄČ/ś“RčÆĢXwšųē{T^3ėœ-_ō“Śkk}įŅ-’²rŪā_¢±FĶŖżqł7^?ŌJ/ß”ōf@lłzķ„–«eŲ2S*_ćy4×XuĀ£4,?ųšØĮ)S¬¶2j›źĶ?²2j›Ö2ó…%{V\šŲĶćŽ{ńŹ÷-Ś>Q—kģMõ÷•Šó§”’Iƒ_²&srĶR§s‡†HŖ’Š­ćw ZäLėIKæB’|éžĶyŅż =;z’ī½#’ėÓŽ/7å?ßüޤü÷“Å_s?ŌūC÷mž ‘’tņ_@EÉŲńÆ'ä)]“€²*fŚqųöÉCŁŽ’ŁĄżļ³āEÅŃVœ3,Қńnš?Ī“µū –œ;‰†L†§ Č’ć»īŹ =%’¹ ’Čŀš?ˆŽˆłZ†ō‡ |¶0ļöä óšŪøƒė¹EÕģwųõ,ĪÓš:ʛēq£ņų6lĪÅ<±ņ^†ĶŸæÜ%W€Ž"B@D!`C‰Q! +sĄ|łzv Ż *T| ­øć™uķF7¹m÷+™ö¹Si>²‡ļońē‘ Šŗzā °>&°žŻ¢×¢7r…ĀØŻēū®&§[@5 |ƒ¢B@Ś„?GŪ †B€Ÿ#ųŚN*gzQĖŒīŽ’ę‚f4Æx­iiˆF˦.– eKåŪRh)Ń5u*‘tō›ś>ū †Lö¬Ń­ŽŠ¦u^‰›Fh%ttČČ»„ņ½>šÆü²×Į‡(Ö²äģO­ó–§«Ņie)„E”Üw©»ä_Čfšé8©Ł<“ęćōÖ-­ž-ķŽ¤Ś .éü‹›|3ŃąīėÅä§sO2Ļ :dĒōsG=™*7_0<=x·ū¾ųĄkg Ÿ‘.1gY5vŸ[5jč§ ōŠÆ5jšMWµuzq-©ZŖ¬ēœ¤ńÖē8āéŸoõƒ·N­~+£\Fü£Ę~mÄ?ć鰝ßūSĖ—„KĶg„¢tņßVµ'ęŌų¼yzĶĢåŪ%.~ęśWä¶ōė ńéHü£īž…Č?“?Ÿ ™üŁÕßµžRž½žżĮ†Mł_Ÿzč™Ó!ņŸ»­m !’Šsņ_Ń łxi ó ƒG€ź÷ßēįw`H¾µģĶ—cPĶų}Ź8xJ’£÷ÄĪˆˆÖü?›ā3ĢvVœÓ…ąQ`0@^³mN»óN޽tVŽš¼kņčŚ}€ü 6‹…ĄśŻ­ˆ6ø ƒg‡åėGÜĪOĒīþ—ž“£‘Ą¼‡I›óĢ’ū…œ“ļ¼Q  ‰=ķ°!D€žšŚłRūbh7Pn£«%*Ÿ°K£ Į õÆ5p3ä7 _ļ\Ģ&,Ą’4ͽĻ/㨌āORPœjh_œlčlĆCē.ÄŗźŠ£Ąž28*üŻ\×É+ų”Ō}F"lągāQ!@ŲĀeHźƒUxėŗzļ› žušUFči‰uń¤Q/6Ņ ”ļzŚš}µĻ»b‚ų’µė+&(«Ģmń†fÜ2?ć›Ńh8‘qģkž¹¦OŦ¾ēŽ`kĻsČGÕø$]”Sʈśsų9#Ģlj3ŌŽ1‡Ń›čÖū aŗĢ>±~­SÖÜ⛾BtGśĪY¬ź IDAT£mūĘL_½„ŠX™bóƒōgOÜ6ę\s JWd¾j“(CI”?8xŠļ“Ą©ZŌś­-ę5U(ƒ¶¶‚X†§ Ń •īPŶtRéć€63jlŻ`«5$ż¹Ä?4öó#Ę~Ń÷²`÷Ņ?Ŗb•sŚ );—ųJhC M±PƝ[õR‹šTnK? ųēsöĻgš’!•§­_wīžP˜ųC×Q’(ń‡õˆśÓ{£æžhń½Æ÷‡žwśļ)ł/*C÷'ł±ēĮœ/sµf÷y󘻛ÉļwqłīWO6łŪdÉ»ł u k™ŻŚČć©7®ćk·gĮĮ NŽžėŒć=›āo/*NҚ­1/¼ „Ų'“įiü÷Šüwµs’ÕžW!нłĆļo@ŪpŸĆ!‹Ą|ŲöTR³ R­Ām/ŽĄ _ąi­‚Ö^B°Bü"VÄ!v{&—)°|‡[ņwxä|]‰Šó6Õ T¾6łD€ØŠU‡Č/ä+ °½¾g 6پę镩v Č×.0©‘ć’Ü –«ynNKWš¤\Ķ5’^ĶW—;“øĶķ õĶčIĖ@č]Ylz!@ęŗ( ČL[(_¹ŗµÅÅO£eŗ]€öVƒ.@RØd…tće²i†ÕŗŁg(ą!§Ń†h4Ę*»Ōl0b†ēč0yŲ:1¾ŪmfoÄcG Ź4ŗ•™F'.\Oäk÷wŲkĪŽMzßM}æėƒ£[bĖEémÖ9%^&hż&„ŠVdÄĢ ż]tló…’µM}ļ}ÅNcb|‘·]K›t³ QĀßFśsž½}…N®qŖœ˜¬‹’ž†ś“}+–:Ił¾ōuÕ¤‡—īźy ö+_R?4ö”tńä‡W×”Ė MQ'=ŹB'Kxź£i•ŸeŠ7¤Æ+&Ż·āH„„VFžV~!ńχw«\˜)6^’¾®Üó5m&•†ŹFš³©ž¾ļź\āo˜Bē’|ĪžčHüɦū÷"āŸ/źŸ‹žDż£s×+źßĆö~?źæ¾-žŗŖ÷/dö’’&6‚ÓłĪ É?ĄiūsÕ%§° ōžüÜł$ Ó¦±æ4ų Pęūœė9üĢóøZū§5ŪJ> ĮÓĄĄh7Ķ}Xü&÷œS#׻喠<¶§†­^"ųæč’’(€’eō±= ¬æ0h{VhÅń3¾Ė!Šs‚ś©q æš-kņ2šŻŒ4ųÉČŻwüķ\{Ō¼¼Ó ¼½ĖmÜŹ^āń݇/į°|ēÜ"@¾6utnŲÓl€xĻ VHXĻ’€š.³¾zŽfQ8Ē“ŃŃvįöĆkųŽ!ŁGkœ…~=o“nō¤² čy6@OĖ e@ž²€/» ³s|?HsĶEčŠv|Vp]—V7ü4ŚBå XB%kŒÖæj|¾•7µpsĮ‹N‹žL{)Ćk“EĘŖār³Ń²Eó“dZź· žp˜6U] fķŽ: JJ:Ī?ņČĪŪśƒ…!m%*R­ž Ö/ٚQ2·ė†TˆIs›i°§;aµ}dŻŅ–!™†L Ļoou—mķ³ćĄY™qq‡±›śŽū KHćą5ęĮ «2•^‹oJŁ.ču żŠ!½ĄŠŻ7t{ł›‘ƔŚĶŪ0$öĄ /2{Čl“’ÕsFާL±,QēM›ōšŹŪŽČ|PŗČlu$Ł#ׅåćŠļØ\œ>{č"'ŁFü]·[āW®¶šŌāIEwŗ|…{FQ«–!ńĒq ‰?““ž^čLü•£µpU.ńßéž°~Q’\£æ®Č’śDż”›}¬÷ßmž cä’‘{(v3œ¾|1^w!ÕQņ0’udWä‚5čuÓü¦ĒYƒ†1ΊńÓ䗦Ķ5ń8_ÆĢ„k’Dł[Љwz÷¢āČkbk+Ī7€åqŃA—…ē›šēz}!’ŻE’Č’’6€’qōÖ°7"@>LĶĪw>iĆ Rņu†_¹# w"Ą/.aRj53“fk&ŹŁūøŪłŁ®g¶—°‡_ą~̲X’ œßż¤Ą97–°Ń|ņ «’€PHĮē¦`X>ƒ@"ÓŹ9.)ł@+üfV=Ÿå^ϓГĖōÕ!|õ„aœrx1‡ļXLeø/ß=†Ł°aŹ k! ß=ŗ‡(śMpŪ…#, (äL[Ø0#Ąu]\ü4Śr…²D°8ÖĀU¶©k\ł˜Ń0³»÷śe…‹ę.§ŽR7Z¶Xž(•+“UV«IVJ‹˜ĆČ~»č7æ“. QS€]vI“Ś÷I ßż.“ęžõ­ĢR?£*Ņ-~R+m(‰V†hGĶŅ»ĘĘōūÅ7"öQńķģŽvM«œ §Õ7•ß9M)”Ć1īs±éĢwŁ„żuYl½uŸN7Ł‹ķŠ“ĘÖ²6ōŅŽ IæKgŅō;&€•VƒsI?ž8ū·(#]l®HŌ¹»…Ńž–AVfɄā1jVżåÅ-,[(©\­,QȲ[ŹBS?e=ėėCŽĪ”˜/I_WNžÓ’ Ć4_‰¼Ä?^ėY“’¹z[#Küż¬X÷öѕó[·/Ś£äR·Bz…ˆ?Š)Õ?Jüq:’<=%ž}M÷‡ĀQ’īˆżAGņŸ/ź›®Ž}ž{Kž’rĪӚŃĪå’øĄó÷bŸ=–{ææ/?Ļ÷žBäž=½Œ…Ƨ¹k–Ė5³2üņ•>·ŠŽ86ĮŚ`ßPϦųk,É)€ö<®=”š1S{±Žīņ?P÷?€`L(¤\NĶĪŻūVž6$1ßįŃéēņČ+²wOD€§.äp§•ē€ĮRņųšÉL9āW¼—on(ŒłӁ4»ōVØŹé…E€N¼ Ó!zč ąe}ŗÉ°Lā„ģ?­ŒœRÅu傃ų1Į1{ŚŌäNÄ·Ź nŅ`x䩶#× š€Jv:u0Œ/ev…ÅĶ%欓ø}‚Å['”rĶnH“@č^čtŻ~čōz ˆ×Qžö²õžyĖh7 l;6Rą†Ń:Č v…tćƒtĆ_KėŸżXe6K/€Ņ z”滑)VĒKŒÅEÕÖŚ"C;&J…ŃQŪƒ6Ź Ķ™;ļÜžóŲ±šŁgąēvļ F&}_•ł•Ō®Ņč˜ æż"NÜ ވHhaŁŪ§~efhK½WZh*:¤DK‰Ž•›²Üį·æm½ķ¶pöŁ}:ŻPŒā1ėōĪõ« 7£ × ˆæĢCśCRčŌ { €™ńjš<<Ļ£t™“Ųżo+'ś«…gōƒOn9éŖŸń^ÓĻ OŪāżĘ6ˆŁēŽœ™)1§›µõ·.:®ķū#(]į•äšś½{HłHšŠj½ć§Ž±üŠB𤋮%#łŻ’ŸnżFÓeŃ,0Õ’Łk‡ßõśń„ō…ų{~vn$Ż?—ų»ŖŻŁC§ūwõ/ō{Źõ7¼ą9Ł)’¹(’ØM]ļß§’ž“łƒ€üWT#ŗżŚ'xѰøKūL~ś.ž|Ó)T=p=Oś>'ś{E§ĪĀ@ļŻžæ’g}üt OJƒ{Xm-gå;6ßz€ü æ0 Ų„"ĄüŸ™ą!˜ å;Ü3ūGlѕšä|ĖwųP$7Mŗ”ćĻ:‹|šmŗ%xhI"K„ވKžŠŠ¹M`_ĶūÅ ‹’×DœäÖ"Į\d ޶S,ÓPŗm’.a»°KĄÄ#O(ēö„Įµ€pž«Ž‹" åX'ÖšÓ-lžcH¦Wó\FńWń”ÖčøĮY”ń—!2Xbt¹ *P› ŠUYśR{¹č« ]GéØŠ€Q!ĄWĮ1®B æ¼Ōl.­1–Üf®{ŹA¼·/#–(—»×0D­—‹JŹĶÅåVƒ›ŹĀfÅ)-…Īæ˜ėwĢžŻ1 āŹÕ掬­šöóå7Śżµ)› Rć:śūnēś~čńOå8ū>Śhķńļt’õļO—’®ZüuWッ÷ļ©ÓoÉīńaĶ’Ō“¹Jś>G½ū:iŸ½ ƒæćrŽøōWõžž ’!¬hĶ®¹ū ­s1@ž°¾0»Ÿ2€’ÖŗpčA_©#½.ŲÖ-Nȳ}*č—AģuÆ}<›ŻÖü…=¬ >ŻåǬ†¶r.„~ˆ˜’{®SŠ+„É5Ón jĶg»€ž°‹:×·0(‚ßߟł’4C`)ˆźįč5KKį5ču«‚ė„"•ŠTŪłŚÅ„čęĘöķk×AujMŖ£ųVT£[›ƒ¹q7 §i µ[Ž'ŃéÖŽ× ERĮĻŽģÅŃ`§;Ī·ch§}ØēpSpœ†śs§·“·ü›VŹ–ąā‘&ϟUĮ§Z£„`, ’Nłüņ‰VžÆÕ‹ =©˜ĮŪŚÜ+;:ćó׳i~ūnkĆóīQĀŲ1Iž*»ģSĢe÷/ēŚDœą$€ēvž†"€ļ"Lķ™ķsĀE“ļ!B žżoøpŠžÓšŠ¾‰Č@vЦ×ńśįbŃ7ŗ®§ŽŽGī¾ģŠBÅßGä;WTHł÷k70 ŌҾšpµé# Ćź0/,ĖnŪ&C?HŹ5¤…Ŗnń s݇«2oüi]ŻöēŹŹŁ ą ¹²yµJiŻbYrY¢Ųü“¤Ę^eŽ-„/Eš^•ÆEE£Žww¾~ĆŅ„PU±d2A6Ąßž¶Į.—DH”±•£ćŹUQgö˜§b3­żĻÅŒk1v\¼ĘYÜ2(V+2i F’·ZĪN›ī.7 Ęa½æ±uXŗĮūB9~‹Œž‘}æ. "™.į«•_)nšL±ĀōōŠ’UĪה$å$9é2kīŗŃ‰¹óؚ×Tc§Ćn!ŅuAµ;óæ»{يį3ėļ©X–9ŅæÖ|{łä²ŸŖ¤± Öą–ūOy-ķ±—Īņź!w,æzČ'­×ł<}õÉW~vLĖ óEeˆt²Žß1Ńäļ&ę3g|wč÷ķ˜P8.ކ ŚH?ğĄƒĄĪ%ŪŽC@ś³÷ŠžuG³“ <ßўŸ ¢żä/ń2#ß»įó#_ÄzŸīŸ+J:.oŌæ›cśŅŽ/ŸŃōcԟü)’ŠĒzŗ"’…œž”£įß„÷Ņüź#ü4ŻĀ=@‰0xž±łœ9jlē涓üą·ż©u_zZ÷?@žŠ 耾Š'€~8Ļ‚³;ą+» æ² ÆåīE€Ä_°¾ĘPœ -®šv+æŽĪķNpRp`˜<𻯐+PƒN¬jæN…‹ī­Šb"Z›Ś·×£cĶķŪā.ŗ”"B@:…°]t(@ OĄ'Ó.Ä öHinx²…éQ}ąÉF~5µ˜×Š%ß1;+„`¾£xnĻŸē5³ ĄĢ.¾vŠ1l» Į „Īē»O×óŒ›Cč_oāÓR›Kj,²%§ übiš q“e"L O€@E€\! $ßiŚEč,“™fßØB€Ž.$@»+xŹŃ(“)mįąįjį m»cp“B€JV-%CĶ%÷·Ō?õ•ÖŲū™Eƒ»z__üŗe^ągR¦m¬L Jjģ…Ćcu±bĆ ßļÕUyįóĮ0n¼óNšßyó6Ų„”RBūŹŌžo©“'eŹ×Rh„bP½Ų«„„_zģįʶZК–Ŗu—ŗ•vK¢ÄčT^^ެ·Ł÷¶!1FXÅn«?4Óģ–e\µO{J_!įI¼™¤ŚKóĶ&ohŻčÄ-Óæ=źĮL±ō! ŅŅ@[ķÕiĒē‚ŹžżL’ÖšūüłĀĆuŽQ;üsÕC- Q_ Ų-~i!SægĪöō”‡W/9»ér;£ĒŪĖܶ¾!Ö4ŻõŅ„CV*ˆųojāÉ·ÄæĄźŁĢ¹O×§Ķ”7Ä?Mū³©·éžŠ‹Øž¼ØęœąĄś’(\ļ¾ī/³æč-wEž[†¢Ć:—šŃč7ĒČ“r>ĮŸ’Ō>ū·3‡æŻÄćŃ涛üOķŗ ƄŪČ’6€t¦ ]Ļż„+󚿤ą®\ņ"ū­9ē{äBND1 ض ’7 ōāœ9½ šČ'@g! Ÿ0Ø M DEĢ+€h6@ˆ™4"ׇ<š $<Åj;†nÉLJ֗›™ ĢØw®ŁńśÉģwˆS=.Į?€ŃjW¤łśōŽ…öKTxfƟ>„&!(Ł®šqKWóipA÷6Ś…€®² XTåfĄę-`ągp…ē ‹z(HmūnåpÖ¦›Œ?łbÕc„ŽŠ“v1Å]½§M‰»Ru<ź4f¤!֙qńqI¹œ_=Ā\Q\jfŒ˜ģPlļ+-ÖVų)04*nåd¤Ļ™¤ž/_kÖ$k”…RžÆM­ŽBŲJč±+t‰ķźŃģĀ›ć…]žilŽT—ž“"e®³,Ė7MŃ!zĻčė}£†•+᠃`ß}!•‚ßüfD:e?ż)l±E›ż³ŸmŠ€Ja± C›kŠt½c‰";cŹąoWŅžż •ŠŃXbĖ kN¼ÉŪĻjņ‡{e†g…$· Ņö E“ęĮVfÉų¢FĻn¾mėW/^41y;@,££$ĀóZJ”gPłž¬*OŸšDݘA 3ć-…hn/x晴[l” įjŒąrH?ą8ĮwUŸˆk“öL6ń7Ö³Ī6|Ōzfō‘”’y‹ØģĻ”ž¦üƆwśĻ=¾%§Ķߙ[±-i†•–rT&Ćö™ æN5sߔž¹*hWŚä?ć„8h6Œ?ĄłĄĘŀĄņ¢Æž½iłŪŸĢž[¬[ĢK!łGšĮ»¶·M)„Tä|O|Ÿ”Ćķ2Ę„»]HäļļZČŚKBOčŸ½ńˆzōÖ l8>ɰC’\ud1YĢĒVńŸcā\ÆT œf™;¤ö¤] ¾Õ6±āÜŒšWŗœņ|s]5“r6*8œXŃEOŲ2ŠģĘųØ7ŻÖ×6¼G€g mP]«O€§ķ)G)GĒ!@õŌ#Ą²Q%Õ2U6œef¹ž{¹^łĢ{^:ÕŻūŁų{ŗ?dź)Eƒ“Ÿ%ʌŠFÄ%*­&Ēš}_yŚW^@Ž “e „lé+©s="מױ `yyĒż³gĆN;mšś€­5 “Fś®n{¦ļō ;‰ !xl·ģ¶[»č! Śyްaż~ém¤e›=ÄińŖZZüxčó¶Æ·Xļ W\üūtœsüąP±øžzųĻą°Ćą{ß €ā «• `”6jR)UÕÜģ%LĄ“„’Rh©¤Z*Ńéo}ń®åÆ$Ü=ķŒ#p]ŚĢüˆtNȒ}1õs³sżŒ§§Ÿ6dVŖŲxĪNł»–®p·ŽjūŠĒ•« åj+{OŃ{ųčŲŹOf^6ōŃ/ōČėĒ—~NæĖś~Ē ˆLt¬­ļikSąģ/蕳Wäæ«:Čļīæ>ä?ĶĘ©õ_/ņŸ¹Q’ŽŌū÷ÖģÆ?ÉŻ Ä‘6w­YÄŻĻ|Źßøœm_oą…9in1,nŠjךč!c•źE UOČ’/!fY\ć8<Ūę¬%KX9@ž°±1   6µ0óR¶o^ĆL­OP¶1.ŸšĶNfļy‘żųÕlŁŅČ@‰üķø[x :§Š9`õpōś¶ ģ‹9`O»Äč|­-įŌ-³b’‹쪃5O£€]l8ŃJ˜z˜ĮuV6Ž•‘ō@`j’„`Gńģ«iŽ7#óÜČÜp!S#I0 ćS?©˜ Aa“@Ųü„5 ,t¾PČ<“@šƒsx¾ėū¾«œć£B€4„–qį—TU#Ļt±’öīҦ;Ķżß»®ųsŖŽ_§×¹RˆFĆ ćeĘ»Ćc *GŚėģrƕRč¬)×ĆĶe1ÄŖ~»‘ŗ:ØØh’yÜøŽū?łF D€ ,,×¾“ØhėĆAlŁļ»ī:øč"8ęxąH&AkųóŸ!ÉÆ©¬„Ūnė÷Ė›FjkpŗU r¼¤Ÿ ÓŹ“„*oŒZōĶļ!•‚§ž ^Æ\ Ļ?f» ˆ’łOšóēŸĆ3ĻĄĮ÷é’=A™–Å*­ŹżV•H§µÄĖFü#0 ” ChĖŹžZ“OÉ/&?–ž2įo«&u żŖ0éOgŪ÷ł‘óĻ>²ņF-h­^’9Sƒo¹Ŗ4ŚĀ/Ÿ›{}拟me ŻūEæ3Qā’žāūõ…ųē#’¶@Ł¢°ikwīž=5łŪ’=5śƒüFėÓāÆ/fÉbt˜żå’’„tŽüo»Jyģ£5æ=²ØŁßÆļē2Ćąq45Ė>ēßß܋ z€īČ’”Et€ĮĻ>Ė'žĒ5€kۜšÉšÆņ?€M`]bSŠŖ…k!Rr’ū4|¼ļĶ<ßÓT¬g.g›ÖÕćtmƦ^E“jŏšWé[RµŠ`X|–,‘ļ”Œ}0xĖųŹņ*+eǤĮ°:<×#mč%żvCsē¶“¾!C‚HJé’{ģļåķNŚ/šµfiå” SøŅŹ4…1”‹R}H…χw„Įƒį¼ó‚Øų¬YpÜqĮ¾÷ރńćŪēī¼sEß”27åjmõ‹@Kń{(Æó‹ŗ:¶GxēŽ?æū.ģm¤°Ć÷æńLžÜēĖv‡82ī¹ŗŌmõćĀkĻōˆ’~©\-£-?ŗ-b ™×rRW¤æÕuÉ%żQ|¶kŁźŗaÖ]†«G 0 ²Ühøł‡Ä?$ż!ń£ż¾ "‰æ%žY„Ä_ 7Kś¤æÆÄ?t÷/ōo‘KüĆØ?ō‚ųgo$|vGüūõ‡n\ž£×źƒĖ”z’¾˜żõ‡ÓųsĶčąõ(ŠRņ,`¼=“)Ńc9’Š“8]fkĶvļæĪƒ7_żōuFO"’å%,PŠ£€*!ųWe%»d2<<@ž°©0  [ü?{ē'WY¶’ļóœ2m{v7 I”EzC‘*E,("ź‹HńUšˆØt+č‹"ˆ4A„ׄ„P„@zŪĶövŹóüž8svggg¶e7 žęś|ꓯ9Ļ)³Ł9×u_÷uo, ~*_—1<š÷\'4 ĮKŠ 8 žų{¹<-`²¼øłœ“õq%~£"Ž „@®Æģæ>[ŹØĄbē‰ĘП¶ŁĒ†+|ųū³§ĶcÄŲĄĢ»Y ŪŖ,NĶķ÷Œ«čÓæ}äxN³Ē³9?t$Œ“- ŌŲ@{!`01`ØB€¢/„B€§­AiĒU–ć*ß gĘ6B€®Ŗ®•ŁqŪ›kė67މŌČÆ÷×Ķ=æ{åšVåm”Š…^–Ó;VŖGnGJŃfŁāĆXµńZå${~õdsEMƒH‚ßēęVJ”C1 |tFՒQ»Øæž5č’Ļąšk‚>ń––¾kęĢ *ęŃė<(Ä2åįj„„ĄhGJåIéku…ķč £z²£Ž‚*ž>Ųä”7ó Ä®»Ž™óa"fŌ÷t›ņ+tZüK)tk x£>$“P”öö`Ŗ’nom \c KўN8QJ Ė’Ź^QŅŪ[éżä ś†XéöÜėīµ;KChАžŠM`䍑Ąu{,žĻ}cĀ¾->R‚d&.?—Ų”lį)gØÕžĮlžC$ž=į~£Lü‡:Öo½ģžCtµFÕæ(ł_ĻŖ?l ~’<ņŸŖFł°c<ąd9ƒŒ ņ IDATøpßĖļ¤{Ėų‚„Z3óĪėłćĒ Š·S µēĶ–NžĢžÓ§3I)Njiįƒ2ł/cc¢,”1$ ÖH:"ĄÓqą A®ŸÖT¢{o¦ƒī*qĢĒĪå4'ÅS@£<Ūš)ŽŁł»µ| E˜ū;j’y!;Ż÷?üźŁ®żĮ W._(Ö0`8¹Ł! X.€m"Ŗ$W¦Ö<’¬Ē’øD;E;¹l€O¤ų}Fs MĮ™GFé3Ė9ņo6&ĄÆ„&®`Å«.x؍ē:©4ó„`‹)1žslupœ|7Ąq¶7į0€VŸäg|Ŗ’ś„ &7“øü\ TL#'‹ Šh8mĆņ1ZB Ķ^Ļ@bĄPŚ``W€o µć*™vµFØ|W€#\UQķgĘMcMķ4ó­ų8łā\™|įÄ®„Ž“iĻ–,‹2ŅZqKŖUŸŽ±Ā_¢œ“4D“ buĘĖ榌󟷎.iœlw©Øš•ö<ĀG¤^Ņ ß(rš‘”„N?=°Āõ«šŽ{=>wŽŲåĒÆyi­…šµ$mZ2%m#ėĀ7…P†ė_ ĻĒÖ[ĆĒ÷~ætią~€@Ų5ozän»ĻbS{ŗĀMz ĒqM<×óp=VœõO[TæįŁ,ÄbĮ×Ńhš}>2™1ĻHim(OŕćŁx^Ÿ^~—Ąv_¬§æcj$ŁŗUģ·[¼ŌqyՂīŹLéqÄM+N8ö×+¾}ūśC‹ŖŚš^=¹īģ_2ł'/›üŪ|āßSé/RķĢę?P?Nv½‰?Œ.ń‡ c÷ß UJWż”æå߆å4śżSEˆ’PČ’ų-Š…ä`ļƒyp•L? öüßż6kj9hS>_:ķSüoįyŗ@…ü‡_/_Κ>ŗƌü“±Œ2ņPžPĘŠ ŠBSÜ˜Ć„c8@Ąj ‡.¼†Äō {?ļŗ@WęÖ¼}‰åp­Rœ ·m(ēmyrš™Ÿ.2 S‹L˜9“^oāK¾Ļ hzĖ\I˜’(žąžH=7ģsļÖ„Ę xsŗÆH×ŌV SĆøƒĒöBš©Üž¦\<ȟ‰¢»ņ¦<‘äö£ćģhJΈÒZ‚’øŗ·:Ī NfĒVq¤ģ Šķń£f‡@¼ŌĮņeqNųtœ«m8„Rņ»Ļ×°ė£I®L¹xU&bbŒ«©4Æ>ždŽEoÅcFœŸ Øö4Ļ °NĻ]¦` M§£ydIŠ?Ģmćc¢½™dƒ „@(O (<öH¦ĄčL€įO€Ž ak† ¾ƒļ€mŪZŹŠĀ·QU 2­¤Z#„šŚM#•nS×¤›:ČvlqV“®öŠH„1 rZ+īĖtr{¦Mµą»$„!ÖZ±0Vk¼];)ņAć“ȚŗÉv7V_Ū°”Ņ"z>ą¤É3ŪŗļøČt¤ŲĪ9,ųžąkĘÆłY-ĄR¤L[¦¬ØšMS*ŠŲ؞¬ŗ~õ«¾ Āp¼?„­¶)Į¶ƒl€¦¦Q=}ˆ8Hķ«ØćŖD*„¬ aD‚¦–JYŠ ł•• ‚·ŚŖ’śÖb5ĢŃE—ļ -°]ÓĻ-*Ą‡=#0sI’)ąŃoMxč —-Ż7Śéž™[VŽņöĮµæudŻāpß³Ś'ķšlŪ9ńN’Čl˜“ėėļW!2 ”Wģ_ÕöõĻ <Ā/ÜÆ_š?Ķß(‘č“%m )о£3Nļ(?ZŖ? īAŸ’@wĀň϶”VüsŽöJÅF7įÖ?čʶź?œ~|Ģßµ_ Į²ńƚKKaē·’¦sGÉ+Z³ßiūŃš÷h. ü{r ļŗ†/&;xČóųß}c,}1Ķķ¹ŸĆ Uö™Ć,| ł/W’Ė"Ź@CĒF¤ä_¾āØÕKø±vßl˜ŃūלłļņyĻåh¶2ŅāĀ£Ćļ —½;°`! ü xī*Ö®āGx|“^>č!Y‹¦Ķöų|%»–“^8ļģw’Hh³•učb"@Š뀆qÅE*Š‘!Š‚r _¼A8*z…€H4؇ć—*®ßJņU S4Łķ™v^-¼y°#č øĄ×<öl’g 7 pUŠĢ])~pŅ8ęÅ?‹¾ql;½—å[[[œhĄ^€Zćq” ø&āsUę °K½Åķ>¼ėhž•0Žģf N™^Éqõß{°‰Ē×wl t Mš=Dį„ц3J0LĆĘ÷|aŪ¶– •Š4ŹtÜk­˜Ź¬[N—l­ve[~”Z½Å“dĖ„¢UGE«Œ¹ž%‹|‡‡3śß™NŻ&•d¤ķŅ+¬„ü ^k,ؙj\;ÕjIŌɌ+Ą0ąG?‚µyYŠa;€R°hQਪ śęĒ!|°=_G]WYx½ŪšcŚUBgÖ+°p¢Įųń½bFSx`ßķ“&acŒNåkŠRimxø^ÆčYŒōC(-„~ä;“/;ꦱHŅ?p×Ē[ļŁaVū»Źė,GM4½- ܈xó­ćŖÆĢ?Æaˆ ‚ķø8 |gŅ}ˆa_ø= ¾Š‚B9.å—õ“räÜSįłF“ų€‘ŽõƒāéžĘzŒöƒ1ļ—ŪųßDžĆÆĻ?€]ŚVq·ÖŌį‡ĻÕׯü(BXO9ū/|“ƒŅp_±×4»YÄ8+“įon†ßTĶŖ‡;x²ŲŚ|Ģ,“’26q”€2†‡$,ł"]ö¾”_]pÓ¤É_…¦Å¾ęT4Ūę®ļ5«’Æń+Ž+u}Æ»ƒHxą<>ļeł-ä`OĖ(·×ļŶ8Ō6¹u]ĪÄī&Īó=¾ļf¹ķłóØŲ’&žмQŌ P×ß ÅŻ ć‚ōB! [(Ż” B! G›é rÆėĀ‡00йŽĶ°z« ZqQĮÖv„Wœ$"’Fāą{ō÷ÆÉņ«Ā×Sc£ŪÄ}-üķ35¼;ĮāVöŁĮęńšg›Õü~V7oū’ŲŅÄ®1{³4ÆqųŹÓ­¼>·[%“§Ē¹Ģ†#j#üęZަé EĒ`Ģ„€bnX0L“ĒŲ ŠW 0s$æŲq ]=Žø ĆCųV éÉ8ŁĪUŖ­k^ėu‹éĖÓĪV7d×Mŗ1Õ\·«KģiÅķ½ģ„ÜΌƒ{ڵĻŪn†WŻ“~ÉIź…¾£xB’‘Bt&«Ķ˜\©4>¬n4?Ŗœb­ŽO“ŗc éjK(šUĄž,¢o™Å)ŃVĀp߯vŸßüß!<ė$IjķRvŁŁ«0ŗ,Ėpō„ĪŒźüŗuĮčĆĪĪāŪßx#hØ®³@€¤R 1„‡­\m:J‹|«CŅ`M„Ē#>ĮžūĢ:t:ģ·üóŸĮׯæ?żiŠ f;|p‡0†ŠĄ2å†r "÷;-s¹®ŹõžÓKś ŃÕheļ½|‹~ÓŹĻ[=ĶĪŖr Y¹ńVūäȽ³Ļ’ؓsՄ ž(p†AśŖöCHü)IüµpuĘÉjD_²æ±‰æĖš‰?äģžƒģ»Q«ž…H'ž0ōŠ?åé÷_Õ÷¹õ ū‹WŃұ†'|Ÿ3<‡>q§ķ–ąŖ«’ĀmGœÜ%jxŅiāRĒa&%€¹iīŁ'¶žĆORüć˜Zf>ÜĘŪ„ÖĻ,“’2>( e c,ä¶÷Į3qox’c;[ø_kR.åo×°Š0¹jpwćÖĄCiąĶߓXō×kÅWsÆuž•ąG»^ĖÜüu۟½”ÕĄÅwŸĒė^–æyY®ł"ęķż ę5LF‡"Ąd „HKĄPE€”¶Ds¾łn€Éüz¤f»Z°Ūč¹W#C—r4(¢ZS)ų"(*Ł48Ł@ؖ| ^xŽqr?ĻüūŠ šd;óvHpų®qžhöPšÖÜ,愎€Ą}œ+E0Ā̃9ĻtqV‹K:wO.ęu±āżN¾yĀī3{NŠs.mœ@ŅQ“e"ŠUķC E ÷†``1 ’&s 1ĄĖŻ·E G Ļgؘ5x q£3Z-3‘qŖ­s•Z™mыŻn½„Ÿ›æįgĘæ–Mמ.Ӓ {‚aY“ KÖbČø”Ā‚ŒŅ¤Š“*O/öŻŽÆ(!„BąJC¤„¤C˜¢ŁŠˆ•vB,ŽWK*'˜«'Yķ5‘ q”ņ›¼C±ĀBūŹėȉ”$  ōĆ;8Ļķ3;rnD÷t»|bń'©5ŚVT¬3¢"eX¾ņ•ÖŹ×ĀęčŽp\ŗ4HśƄ¶śśėA&B}=\yeń5£€Tšö.µÖ†ŌZH; ĆKؔ„WVzb‹Ÿ`Ž<øź*ųća÷ŻWĆ+ÆŪ²Ł`Dą5ץŸž{ģŒ{|é„õ~]”Iy$µR&†/|ķIåi×3p­ąOŗéļė5Š®@?ń½ń÷J)īi|?[Uݚ/ß.ђ©3\Č#ļŽKŽÆÉāC¬öC?›wīø=ğMƒųC`÷ßo†šž3˜Żł+\;lņ?ŚU’"Œa8U’ŒbUȅż¬nŲßć X |爭ųåź„üČ÷9#›ā·ē‘ļžųL®x­›ūļü Æ}4ĶJõ,Äßßąg§ģĢTåó•T;’9uܵ87ž:3‹õRÄŹä挍‡²PĘČ0†"w|’*šnyO7ż…£|—TJX)MžŚ’&ņ#§‡d}ĶÕØzrž»Š†¦e< aOĄ7L~vč—¹¦z_üĀ\č¾x÷Żu»)Ÿ’ÉtpĆd8pˆPX°¹ėÓ° Ā¢Ҽ 5ūķ*ųź3š[ó÷/åŲŃäX!°½NóJž>vķ$F4ČDČĀ#įód~€×Ųčw““,q9åøj.±4§|”į‹3øńܚl58Ą×Ģ{¶…3Öųd\§÷fÉu)J)ī©2ŲÓģŻgĄ=Ō|(.VŽĒZ€ć €B1 ø½wŪ¶µŒŁŗĀ&Æ4܊:‘Lƕk:›ÕG©vµ™—f’Ÿ•›)W7jŸš&åś|7¦4­±! I(®8Rˆ¬$…A§iŃbDUV\¬NT«ć FsM­Ł«22f•ō|Ć×Ņ:=’”)Cõł[š}D(ÜP B§EźøūŲīI»˜Łčƒ|‡—Ż”/L‘4lŃd'Œ«ŅH;Rh“ õĮ1usĀŪŚI~.¹īææ7ūĄ0zæ~ē E@ė`āaļŸ>güމń„éج2všćķ~źGŃėGtšÆ}-°žß~ūØ^óśā—Éuś§³ÅŽĖ—k¦Fž²gåŪ• Vŗ§÷z«ü¹oó³0ņ¶ˆŹ \_=ĻēUŻ ż0xµæwažöŽjæē;ŚóūWū‹}›ń‡Ņv’Įöń‡āäß²Ńv‘œč_õ‡ŃśƒOžĆ~’kæ@Ć¢8X{TŲ–Ÿü fMé_C§²uÓJ.Q>§Įr4S£QΚ›ęŽbūäž}{oŖ?x•ŁZ³ƒ¼Y_ĻīibńIõlÓŅĀ“Bšqč(kņ_÷WĘś ģ(cż°œ3ó¦”Bžt€Įšō…l™jē›!XRQĒ1GżœE…릙½N€Ēį¼õ8·iŸ ?č1› :ß %&Ą°r‡nˆ”‡:%ął ŽĢņ-ŪēO Å?fĀ%/˜üÕ)ø‰ˆĘŠ3S&ĮŻB0h]åóÓĀ€Ą"WTźrȟ$ōu@’¶€•.ė¬YuMÄń >oĄ>?|Õa­™»ōœÜ:ļˆäņ“ o>Y‰Ŗ|Ü!ä@’‰0ø#1 ’ęÆŲŌ@ (tōlŪ®čm`Ī€“ļ€@_µüźZ²Ł.Ż•Ž\6ūķ:’Jźh¦›„ĪÓ¾óѦņ0  µ‰į™6N$ffĢøHEkeŖ²JfHH·2.<†ÆĮ×€a#¹*ÆÆ…ŸAøn8ó< < j”1¬ĄŃ’›g.:Ü*é%·P«Ÿ_œ~čl⤁~>›*Žō2ĢvSJH‘6m±ĘŖ2—W4Śķ‘ é™=Smq–L)vW¾>øžz˜>=°ÅĻž o“Į^x!=Žń1€–ų®Bā†p„)<¼`Ģ#€²„zikõž‰‹IFTQķń‰—Ü“B’ÅIĆÓ žŸó«üąĖā­}Hæ HæĻŠ+ż00é‡įUūƒõ£o󇑒õ ų ’YŸtfÕßė’üʬśžŸ”²üCń~’įXž”—üŸ½=8.āŁüß/iæć®?ž n¼ģA7`>ZʇĄ™‡OäēķĶüXł| ›å¼™µ|4«óצż’že:Nߖ#V~Č£Z³Ks3ó‘¼§5;¶ap”É›>Ź€2F£ą€Ņn€‘:‚Ų}€ķs.fRG+³€©Ž›°Gp)ƒF:ę(Ċ¼õ”P˜ `ØNĘA=żĆCDŠ8IqTBš4•^õ·¬¼ŲfŃ6ŽeJ­ę8 ¾›Ūžģ€Óžņx!’8ł"Ąq  ØļōłŅ¬4O†Ł…Ģ 0#NĶžqę ØwąīŪŪųA¼ČŚP°bX§T1[ĄŌ“āŗ{›(YõėGō££—Ōäš ¶ ęČ~ąó‡ūšÅÉ~x܁0ś®ßļ=ēP¦“…Ą’®ƒ4"™Ń†”ž«„ļ!-ĖBI-” ŽiK“i „MTD ]Q!|Ƕ0$:æŖ©ü¾Õ| ‚1syp“Å۟ń@é ÅåkŃŻāŪļf&_ūażĶŚlŹĻeSÆ5§w­R •“5l¹"QmĪæUģ¹ ;'–UÖ[=7»ŹGL[MłŹ ę?6ęõŽ6Ž÷¾Üµ2eDä‡ÕćķĒ'ģ˜xy³ķāMfÜš Č~čZēƾż/y錬uŠ`Ēė‡MŠš¾—åK+²ŅĖ£•ņŁĘ­¢OOśTli“Śt =”JæÓēłõ¬ōÓ×āß»8’8Ł@dAµž»ˆ?ŒŽŻCTżaĆZž! ’…k‡Ņļ’é\ķ¹|A‹ir»t¹>ūhŸĆ)oŸĀ©O/ķ-ꎳ8l<3Ś›˜G®˜!O&Ŗ¹źŚ6^˜>’ś§Øūųmž¢5GåžņM“Ÿ¹.W5ģŹä挍‡±ć\Ę’čĮŲBį[įƒ„ājźĢ!¼QN]*śż;‰u“q/0UĆŖŖ:>»ū„¬ž1„ćN-±ęĆė'ē­o˜|½‚Ą æ®ÖEW֏ĀcTT”Ćq@ Š(ź ±ž7?Ł t¼¢w}ŌEæ`ńH»ą³ģiin¬xg§,+/YšKŠT*XÜ%8ž¹4ĻŪ.: „ÜøĄ(ŗ Pm #ŁgGŠÅī`ģŚŽ “ōæĮ©±Ń»Všcõ@Ėė™ąW#Eļ8«fŽĶŅgœ(`*ą-uøĖą&Ģ“ nŅ2ĪŽs8ĆB7pł7q†Iæ>Ų }«żĪīė”=]ģęÖ0ўl+uókųhĆ/]Ż)¼Ębżŗ}Öh/|äŽ]ź&g€%eФ窤oŚ®g&„WY#œxČV—éŚI2YŃč'«źUwM£źj˜lvUofvGźe&Z#£A:^Lųą*_¹·—‚HCčšAÅßu\Ēé©4[ ”‡a C‚“’)—dŹEf=-•Šq!Uķ8ƉN¶Öż­²ó/zŠĄŠM Ī“ė÷½¬BŠm,UŠ ²%Վ”Hųčs!ŽC6÷0|” _hlčyTūÓŹŃ]ĀUIÕķgœ.åłŁ~ļ#ÅŽWL>Āē2@ƒ[ż"’¦‰.–ģļęČ©÷ęžµłļ›yo쮇JÕ??ä/’sƶŃĆ©ś#’Żś³ŚŃ=\Ė•‰*Fž£qt~Ź’hYžGJžĻߟŻ<—ó„ąƒwb—ł½‘åŖw<Ž7}…ą ­ŁyĶrf̌͜ ‹‘€§Ö²@ęiĆąv­9¤»Yߒdt?=ŲĻaSĮknš[ŅmZ 2†!ÖZĘĀXƒµ<1ŽźĘ ¦#ø€ė¹x®‡ėūjMTŻ<¾€9^)…#„HZQٵ„£”ŒĆs],ĻWŅQž³ć³oÆŽŚĮX€ż zh ®|dHkÅC™.„%Y¤č0ā²%Qm&‰ ÕCųs¤?$ü¾!ś~;"Ōh~/Gś #ų“³ų+Gw¹ŻEIųžQų}ˆBŅƒĆBoPā^¹6“ń/µ’Hˆ©^’ž²üEē“’.Ffł/$’ń tf€«ś“’Ā~’ĖNę„e/b”ź÷Ļūėlę €¬Øą¢»ę÷Ķ zn5ožō 6 @ÓŠ¼’ǦNeJ±×Ā0˜ Ä*j¹©v<»ĮżZsH¦›Y‡Hž8Ŗ2hMĢĒĢܽ\2Éül–{š›łØLžĖų$”ÜPĘčc#“ĄšĀ?—Ó]—?¾å3GÜŲwĢĄī@į˜Ąbn;ō¶ cŪA[@uįs©āē ”w\ Ą &יp:ąd—>ėšaR©–€p[5XGWń„lļĆó'9ÉõŠķaρŻ>l ų\ ߋ .Dzæƒ^I÷¦īN¬ĄŽ'ĘéqƒS Ų@¹Żo“øüö?kč%y­Ć „ž­0ņĄ@¼=F'40’xCZ;Ģ6WŪĄ0ģ¢k•Æ…U`ėP’Ū¾EĪžoõ_® æ.Ö& 2½k\GĖĪUnÅņŁ­/_UŃ^"¶õ`Æccb„ļrF×*݊ļR¬$ŒyUSģē&læn«h{$*żĀ}¼”oīņ“æ÷)Kā×mŒkm4iŸ£;–ŗRЦH…ńbĆ“č“vÆų°²ŽJēW³Ye“-ĻTśy¾|zŗźKóš×朐 IDAT·§Ū¹>½Ī†hŠ$äó消<>u×ųū5ćDŹ0Ń,\;k?”¶÷ē÷õCĪę_ųē”ėėOłĮČŠŠā¬™ĶŅ? +Øŗ“fT­ž0ā€?Ųtģž°iżAńŖ’u_gūÕĖyՎråĻpuž¶d‘ǘ<¬}Żs&’ņ,ÅNĻmæĘŗž"īö}Ž‚7Ž<™WŽŃ?ą *ŽIuń€irį“.×]Ķī™.®ŌšĻĮ¬H‚+Ó]u•ÉŸ4”eŒ>6‚†ęčżāå4ø.×Hƒė‹‘œ„lcł®z[&£C7@zĻ—p<ģq÷vTrõž;<ĮY{ʘ<˜ąŠ¾)Ūk³ĘēGįMV®±Ń–<Ā}RĄ.Q¶ˆ‰ śŸR\7Ļļ›ŁązčŠ5px#»ZĮ£•—…ä@ƒ!a‹Ū¾<™ė&‹—EGōÆ"ečė ؊4X{Ą ®€!Tķ ·>Ī€R籄£Bg€%åēHCˆŠ:zžWh©Š¦J ”2†Š)×!ŗ Ž>ņÅÜ2¬«j0S ›Y+~ZŻtė<4÷cc”]+¾Ū¹Z·*ĻŠaFäāx­ńnõ„ȲD£ÕmYʼnœ¶„šµ½z§]ŖÕśšĒ’ÉtĘĒ Ū“åŗHµŃiĘ ×“„²ģŽG$"żX•™¹æ!3g^ūƾī‘"„·gړאŗÕ“Y«¢%bjĒĻ‘’įTłah•ž0ÉæOµ‚¾ž°Ś/\ՙ«ō«öĆšmž‘’°ā?ł“Šn¬ß`čßēæ!ģž0üŖ? ­ź?Ė©Ŗ’p-’7ŽĶ»†Į#N† æū…Ži>ɉč9÷šnž˜?‚ KRĶż¤©œņCœ}ät!X 5»>ńąžÆ¶ß¹€ļūŁx¤ƒ×ŸQMp˜¼¤533Ż<-%ĻÄb}cIžeņ_ĘŲ ,”16Ų„E€–5üØAšž¤=øb°õCXóĪåģ%§Ov݇ŒNKĄXµD]t¶@Čæ(D¾`»hü‡įœŒą‡@‹lüb¢Į¼c*ųĻŲ×`JĪČ ~3»› ĻU“»iʦĒų9ÕšŽ3ķÜ A[@~>€å”¬ęšń’ū$LאĶ*n[ępōģf,ĖphŚē­qmĮI‡NāoµvŽT”Q†ÓŽ\Ž“=`ØYc)d‡pßwōHÄSÕ#d]ŠnĮ1†”P#½ŗ-¬öźĶ­…—Å›’ś–J·°‰aņ9»s•^¢\!ŗˆXjW‰·Ķ…•›ĖÖXB»”ż½ē‘ƒ!…¶«„ój„óČF| £ͽŁ…Ą‘¦h³b²)Vi&įFßj·e eG '^e­ūK¤ó±OźóS­“ųž¦XkÅ岊z³Ć¬–^,.ż|Ņō%ü9ŅoB—"żŁĮHæM?ҟTŻ~Hü”?ÉM›?ōö÷oLāäżcŚżGŅėļ Šėóüī«BĒŖŠC±üW9čü~’ś‰\XM+¹õŽa''¢ĻŁ…co»ˆw43˜ö3ōTŠRS–-c·bÆ!¼g{÷5& A)fž}0…†G~ż,ķ¹Ü€ż’÷xbłŪķfö3Šm›„ą­ŁZˆŽœ±&’”Éc„²PĘŲa^¹œ (Ī0ā|÷SgTÓƒ‰Æ]Ē%žĖMsłŸbŪ‡źč9ßzę0ˆ0źn€4ź!—æ¾ā³k—āīS0ē#ŏĆ} ŻćM®šø†ßņ¹a ĄP8©ŠćM˜ ØUš ׊‡ūõ'4šŁ:“[D”fį‡cžŁĘOžļā­„iŗfµ³šŽf®lvų2‚”!Ųēˆz¾ŃļFo=„ݜž+`£:†ą(Œb@>q﻽× =We²®ö³ĮX“šQ˜?/ų¾«ķJß­™f­ě?ˆ4Żžœ—ŚdBó–ś.gv¬ŠzY_$ [,‹ToV5Śo5N‹®lØ·“Ґ>BØ>ĻSxž’Ś÷#hē®-Su 5˜»z“Ę™N𕯄IƔk#UFS"a¦\ĻWnŹ„šaZŹ«':ęTd^™£Ņ+6öõ‹|‡;3ķZK\ ŃjŁbIe±ŖŗĮLFc¢·Ż£H•?Ÿō÷ł»Ķ'üy)ž#%ż#©öCoµ4śū’›ˆŃŖbä!ėSõ‡‘[ž+Võ=~Ŗ]Œü׎ėöwó=¼e<Ø5;żó:~öõéü9ŻĮ=ZSßÕʎSóīĮ,›—R©ž”į½Ś¾1Īh[ĖKZ³£4øsŸĆŁūĻö7š„cž„Į, öŚÓżƒ’f‚Īfyč`·ķ¶cēTŠ—”LžĖųd£,”1¶ŲÄDg _"ęp³†“•],šžó8MłüDŽžŗ×N-qī‘ˆćrL(Ö J“”rŚ1‡ā€@X¦I?®ø÷o’ÓćÄWSżŠŲōQŽ6E`·kW\“Ģ īš0#Neµä2€¬ęļ¶óōŸph {TJnŅ`(xėµ$Ÿ›ÓĘ{ak@žŪcm¼ŠępqĘēÖYÜ%nG Œ40p8ķ¹k€ā7ī%×C €žī€ßw“.b9ā sငœ!¤ö “ö\>ü\Ą`(„Aƒ=£-”*ktzÜęruåŽü‰¹ś79-{čzć5ĖIņՎz„ņ|iŠmXrI4!ߨšh½Ł0=ŗ¬n¢ÕķK”"}ŌłŅ·ĒmOÅŅ’ŽP×>ŚHjşŅm“#¤n3-VŚ•rW©³~(źŠūėBc •Ø·’‰Fk寭ևW*w°)r› ²h.éZƒÆµ’‚¤i‰å‘ ććšĶ¬u‰ØļśŹÕUłK’žÜS„HæÆķ+G;Ć$żłĻ•"żcióÆecZŸ’pķž0ŗ½ž]ĄpŖžŁ"ä  ?Z`}Ržj'ó3@ł.ēś.§ ƒWĘoÉŽÆwpwžŗżē! Ū÷9ńˆ­˜ Apsō9‡Qµ—ÉßÜ ·*åĢW<μł±žI‡@ŠāŁÕWT˜ ąf{Ū ļ½ä7æ‰zļ=Ś”LžĖųä£XĘƒÖ’¾­O0 œU°~öټ ģ"%_;š÷ܰÄī]XņĆ<ŸŻn2ńjÉdŲ—ŃŌ`2üĪünŹ7ū~šĄ_@ ” Ģf‚Æ+sßO6©Ų-Ā\›yšĻ3|»Ųńœlļ1ĄŃ•üĀ’œfŻĖŻš~&øŸĢ Ü;Ź„b< ŒSšńėIŽłŠ”Ćsś^waP`±óϬc§Y­¼]4Øoa0²ĄĄÜiś`°s™EŽ[xüA&+<0’øĆŚĒļpXźœ†a å!ģ\Ø_Śļ»®T€`1Ų–Ÿ ĢÄÕ²i‘WŻ±ÄŻ¼m„·ėŽ©č§/Š4ī8MZę@Ēm$µāęT ÷d:”xRŅ%L¹$’ókĶ×ė¦G?jh“:D…ōˆUōŃŹūŚWˆTĘ·Ö¾™ÜüļÕžz mMŚ@/eŌšėä:īŹtųBŠV+!߬¬·žŚl·Ä›uS#EĆCø®–ĶeŖ›ŽIķ“e“qüõFćA6b“æē¹“{-’Źt*!ČHƒeV…|nÜdsÖäŻ¢W7ұXšš‹ q~! ?'xå’©ä‚ü|ßŃŁlÆH5½’qŠ“’b~0xØŒ<Ų/¼žõ ÷ƒŽ’önĄlܐ?^Ā?Œ¬ź󗙱z97Ų1īüõ’ń(MüńwΧ81ŻÉ€@ŠzÄYlsݟč.vķ;›üĘ÷ł†apÆēń„ׁƒĒ±gwwhĶ4!˜W7/?¾ŠE…ū¾N0*’¹ó¤ņķ¹4 Į‚g»CńBR)ā£DžĖÄæŒ „MžĆ°Œ’.lL`į5$VL+ c›1eÆKū†ĒUóļįŁ³mr³:!x]Į”iĢ_#ÖLć°m.¤ßHŖ .õć‚‹ µ@jŒ&@ÆšÅWš‚³t|ä±’;š›š™»6˜< ČnŸsŸīę>€öŻ`qGŚē–{›¹Jļõ æPŠPē‹ƒN(ĀŲtĀb×RxīpŠ€){§ ä Ć W€`*€Ź(£m™W±v©»yr…·³—b×ÓuĶī_ÖÖąÓĻJ <įtsm²Y7+_ ACt¦X­oV6Zó붉,©ŪĢźLT®4„ĪŸ|"$’Łp›eįŗZ®[œ©2Ļ?ōŅ®ŗ’±…4ĘņµŒ&Žń²œŁ¹R)tFŚbi¼Ś|®~‹čs›ķ_Æ5³Ņ(>pĘ%ų}H5g­ęŅ“Z>ŹīyPwģ„Kķ†éĘ&¬ü9ÕŹMÉuš¤Į:3"ēU6OOŽŽžæÅ®Ńf#.ś ŁŽ˜b鿎“Åȑ~ĻĻöw• ųŞ/Eś3 ģ:‚”‘~œųFŚį“Müah!…Ļ$įś÷śCōWl’ŠņÉē9²£•{… u·żŁõ”ŸŠ/Ke Ŗ˜ņ’›oQūść,‚÷ˆÖģ`Z\;ßį’būµ-“—-ä] RQĆĮ™ūzW¦irÓ©ßēĒßūUæį}Ŗž…8D2Wköš<)Ė? _0l™ü—ń߄r @ƒ½Įk(|-ÕÅß gęÖÆ[Ć4‚ßłu…äž`(ĜŸSŸlį_@€†ZÓę§ć¶bŅÉ$«a†ĢњmŚ–rv±cŒfKĄ¦0x@`¶Č‡żśdäO ˆDŃGFŁÉ| ­łŁ;™`†oO>@TW`Œ3ł% }˜ó\†ūĆmłłŸ‹s–!8 .|ŗ‹ņ[ ƒ”w¦3ōZ;ėmbõ&?čV¼Ų³’ ­zė(Œ<' wŖ!…Āš[F#/ šŲCY½óŹóŪе ų¾T+Żn•u»•§‚6š‘°…²qÕ@¹łpĒup\-\eھ׸•Õ9i;{qŻÖ+‘:1ė/²ķ©cŗ/ųmŖ%Ł”J›G <ētóåŽåś¢ĪÕj¾# :¤)V˜Qńf¼Ę˜S=Å~eҶŃEõćķŽüC’|™g7m©L[*Sų*bų~¢Vt/ļ¾qOrI› ŗ”ĻÅ]k“ö…]¦ĮŅh…ų(Q/["qķ˜ĀWRyZ*Oū¹G˜`yžŠh߯Ø2œŚ)‘¦X½¹š)#õāuŁ–5›źöƒ™NnČæBŅ%L±4^!ß©™h~‹? ŽŪół#’nĪźļ bó‡ŅVŚūu1«’XōłCéŖ’pCž`佞# śūłxĢ0xDkźŽ|9hŃĖĒPČ?Ą•Ń«ę+ē’•ƒĘMą Ąń\¾æūŪ÷ŃXašüŻķ<ź9\ “Ē+9į%— †Kž”'@¬]Ģ”…Ū†Cž‹Ż·–É›6])¼Œ’j ę€ĮŻĆuüā;ģ–õxXśé?Rrī÷`N€ł’GtÅ+<®5ū¾4øźSGņė­ė{ļ3ėWŌµ.åóv‚g²üļųC8gŹÉżCrĄŲŗ’ˆ”ÕŪh» pcpnLšSę=ŌĮ1Āč/Dŗ>įģØą ­q–:üB&Øźēß3ķgāT‹¹@ĀÓ®Z‹Œ¾3 šųĆŚĻ/~]ł×PĢ"ķ#†źP>B8Z¶·Øhj…WײŠiéfF6£¶‹ŗrŚ”fEćŃvElO;!×G=_ģ9<’ķā”l§^„<-$ž€“”¢CZb¹&jŒ÷ŖĒ›OÜĀnŖi0S:a«ĀžßŚĻ4›QĘŗ%NÕźwÓ;\¼®öū3ebŚz\ž˜Cßļ\Å7„„¤Ū°Ä¢Hł\ŻŌȋ›o[o4³ƒå@šóń:|³iµSÓōnz§ĪuށGū\«gnBN€»Ņķü²» >‚”iˆ„v„|©f3sīŌäĀų³;Z¤śA@ž÷…U~čOŹG£Ņ£gń‡ŅÕ~ˆ?|ņ*ž°éŲżaż«ž·]ĢV?ŗó{ż®¹Œ©Ėš*©ŸĄ!ž•ײüC_ņŸ?āojŽ(ļįbĒį2!ųšųƲ×U·õFżĢż:pŃˆ?}Æå’łO›ĮĢ{Ž”čŲÓ”xŽŒrX6Ė£¦ÉE®ĖÆĆē‡Kžó1ń‡2ł/cć`Ół,ć’;Œ†„…€Bঋ˜ŌÖĘR µ× ŌŎ¢dIÆT.ĄĒ  nę'mF”/u#OęēāžsøUł|Å0łį‰æåę„%֍uKŒ^6ŠgžĪp²3Ų+£čš«yÆ0 N±g›Mµ˜Td4æ~(ĖÆĀmįŗpt5·XpœÖ“}˜e’»zļk†#\ĖöSld«Ė—*M¾h Ž£Æ[*ŁīóĆ7ó”n €ÓPņš 0Zb‘Z’GAȝ¾w[NHš}„ ¤ «äł•Hv*«s„_•\įļjņ·ŹvééžĆ4å³Y…5»YńŠ=͘¹µ‘›KKL0Š(i•ģ%Źe±ēš¦›Ö/»)V*O#šxZ’‘Rt&kdD.VČ£uĘĒć'Z+«&›Ń*ƑFńĄ?«Ļ7VįęøŽ–]-¾½fIf|ף=®H6œ½·«/¹ĆF„®ģnāl§‚Œ4ÅJ;&_­˜`?7qūŲ ÓģNĖ%āCX–T¾ÆE²Õ‹¬ś03¾yQf×t³{Ą>Äw»"ÖXWµ‘»!|­¹1¹Žæ¦ŪŠ $:- V›qłZuƒœÓ8Ćzwóm­Vl”dŽŲö³öēõņŒé‡õ³ųĆśõö‡×5Ōž~( ž2ū'ųC@ž#īĄ×Y,䂐æRū¬oÆ?ĄU'p½ėpĘøńqÅĶA ?ōöū’ųx.t2üDHŽøąj>½ĒxŎ3ńqļ-˜—‹ē“fwĆā7o9ĮČąü‡˜YĖ~Żķ< ˆXŒ“꤂ĻåÅśżCœ¶%“žž1+!pŠī³‰yó8Ėqø¹ē:JüfGy-} Ä ®ć” Ł*ŻĪ[@÷¤l·ß÷b:Z"@ŪZÄfE֎$ p,Ż0x>@1ą˜1Gkųč%ƒ™+“}m}NqX{7ü åsĮ“Żü śęĄąB€Åų\#’6$»ź ÄXKØĢųÜļ Žņ=ĢŹg Ķ6-OńY,÷K!>!bÖг —@x=C°­~!ƒĀѲmŠv-÷«»šü évµy¶Koéeõdåӈ5Zé„ŅDl!Ģ„2!„D#2J“ŅŠJ#ŠB£5čéw… i¢C4ĖØ±2—‹UĘņŹń꼚)f[e½™–QéĖs]="ÓAČ]GĖŽ&/¾rAvšæBķµ×xŹnF“j$Ē+hąśŌ:ž–n×Bą`ˆ;*ę'ź­ē&nßøe¤%Riø!¹ļ·Æć×é³IĖ®f/¶vQvRėRg·L‡Ś·Ń5vųE||ŻNVl£“B¶(K:W󢓚… k¬6£ā­Ä8慉[šók·±š+ė„kEņ„ʎōƆ«öV?lzÄ>yU’°×’ü£ųA&ĆBņĘ„703±mߏ+¹ļ^њ­b1¾÷×§¹µšXC%’!žĢöM+y °«ĒqÄÓėŠß³ķį¢\’gu=?ŻĢŪ00łæś+Džøƒ·"1¾—Iņh±5eņ_Ę3Ź@Røāl.ךc³fœĒ 3J«ę!Ā–€G¾Ė™Źį@ŚNpŌį×ńB±õł"Ą}ßęOZqŗarł‰æ śŹCŒD€±k ŲŠnxZĄ!QŽØ02ß”9éÉ,sŠósQī4ą0 žj气ģūš/øD7_ų\ gĘWõ\›āŸóÓ\ö^7-®‰ˆ‚ų5\µĢåę­#<įhžx¶™ ÖŖ>“ū“īÕ¦ĶŽ.?šZ­*»[Õ8§Sw:õDĒŃ=O×k4 ­‰‚°5‚€°kŠįk#%Y )CŅ! ŃjĘÅj+*×$jåźŠZ£„r3£#^adbÕĀ“†ŠFĢÖ¾7č$UTfv_ įjŁŗĢ©^±(;=³Ößfc·*j†rü±†Æ5Wå*’<)h3¢ņżhń|ż4ūµ ŪDVÅjģPŖ’Å 2ŚčhrćĶ‹²“×-wwKwŖ=…˶_6«¾Æ3cbĆč x ŻĪÉu“IŽ AŚ0XcDÅ;Õņ„Ś-­ł“w“ÖĘk„c G­/į/µm ĀC'żäŽ “n Ņ£góĻä®eøÄś’’MųĆŲWżCņO3¼<›Čß~Ē«Z3-^Į9—ßLQ Qå x:‡uµó/ }Ļ=Łł‚Yn.ł±k„ó‡Ÿ Į’żf·ź?ąćˆ/īĢ]ŚēD ©v<‡žs ļtÜĻX\ąyü\J®÷}.(Ü^&’eü·£,”±I`¬E„€ß’‚Ŗ¦Å¼ LBrӌļrĮPD€~ĄgÜ’ ĖāŌ#~Ć­ßøö¶éna>Š1qw¶;ą›t®+%ĄčøFڰ±Ż[)ā{U1WĀdī{ø›s >Ą~Q¶ß žD§ĻןģÅ– D™°]œŁh*•R\~_3*_Óµ‡ži×ŌoĢtüuŹć¢®µ¼ę¦4W : [.“Ŗå+õS¬W'nYo“R‘hń>x#V|"@Ļvm9Z®[é&V,ĢNi^ęīœm÷öp]½ŻĢśsāćbGŁ•b,Æ8)nL6󶛁Ą ā I·4Ä*+"މÕÉ×j¦šÖųéFs¼ŽKŪ8Ŗp<ß'‰ōĆŚüa“!žĆ¶ū·—÷ė¹–QķĆÆśT¬ź»żĀÆóŁīNŸ>‰]Žłz E保z wł>Ē·ß5›o•"ž08łxå/ȳĪāY­ŁĒ0øåes‹­ūɗ‰=öwīךƀuŃ ¾ųhĻ[{d‚ĻdS<¤&Mb§+zsĘ:éŹäæŒMe ŒMJøźĪ<Ņ®£•ąjĶģl7·§ŪxÓMC@üW¢;0ÅR;ŖßŽTńfŻdõžømiŽ×“µ#0=Ā_jūh~½j’plž°ńˆ? <ŅF@ü?AU’|„½žĶC¾ĻL+Āõ?’7?)Lłæč,¦|ü>ó€xM=‡\’j0œŖˆtnŻį٦u ƱxĒ<×ĮSÅÖēD€ækĶ1£4’0q×Üńa0õéņ/ūēy—¦msj6Ū;UØLžĖų’ e ŒM Jøę»ĢČ8<l 4K“Ėü-·®}år&¤W1˜Šä։æē;ÅĀ ńŌELĻü?öĪ;¼Š*ćŸ33·„’ŠE]A°”‚ˆˆ"؈(–ŸŻ]Wײ–ÕQײŠѵwEŌ°` ‚Ø(*ŠŲDji·Ķœß7C&7sū½I€ł<Ļ’™9gnB2ē}Ļ·T°ŲøĒ~ōŽo|ÜM »ŃŁ,˜N4¤Ÿ łp#˜­H¬•\ńJ OŚÕUĄb »īœćē6ė±d€Ń„S¬ņ@­ĮŌg+™ÆX KA=­=_ (Żā¼w¶ņ6@( !Ļ€äÓ ūQ1ļ/ĘuŃó$š3WéńęL{,c@³D ˜rŚG U—"B čRUU—0ŒČ\ÜB| IDATõ†.…¢ ©(ČąCŽ"”ėA¦ŖHkķmRŻ•Śī~ćūo„ƒR©Ŗ4Ü[~ µŪ¼2ō§źĶzOūžć.ķy¶ÆÄēn†„ĮCgZĶfŖLA@›5·ųŃS¤,i»‹kiūnŹŖöŻ]UŅ-Œ|·0T#ņuŒ&~ĆǦƊ^g؛7čŽõæ„ŚW­ õŖŚ¢ļ Ƚō»J]–ø„šöØC=łā`Wķ-„÷V- –kY¬į­@•†RJ@"ƒ¬BnP5Vhy|ß–e„Żł„ +[¼„]ž‘—Žą‡ų¢ßŌĻÉóƒĢE?d/ĢßüŠ#Gļe[ųC‚p’|lwš[ųƒ}kæxĀšīśCƒų˜:޽’ų…}·ž8õ©HW+gåņ Ÿ…ą«ĖŸąŠ”g5LUü› ōrq8ĄT«ūa’ßoģ[™łž?,ALȕį0“ˆü:5„ą JJö%²ø\ü5äózGü;ģl8€C«#RÆ 0c m×’ĮõŅąx·‹“ƹĻŹ-ē}/yßšž”ō‚·ŗžĘčīe‘Y¢VsĘó§ +޽Ÿińŗ̹Šžž­\Ņ”'“_Į–L¢²^ Fä"-Ą%PĖ܌.ņj†a×- ›ö½Ü|°Å`ä;ĮĘMā]\Ē ģbH>za3ck,5ģŒ€a>éąePó~%ż~óGÖŃ.‹ NdÄŚYŒ €ę‰ ȅ™±ęĪh¼(cĄ4 >} ~>·å\k=SˆźjryżŃXC’ė2|o” TŖ¶čī­+Ā% õŖŽØļŖ6śu1“žēųJK÷i¹06ažØ«`f]%~it!ØŖXļņˆņŠ”/JŗhĖ:õp­iæ««·0ō(1›L¤D"‚A©ToÕ][ µŁųs`×ŖMʞžZcÆp€ž2,;JI! tUŻŹ.ŻU·č¬h+*łBAE°UźŌJƒõF˜į æ„|ņc2"ś‘RB!ŒÄĀĶÅj”ńS^ßäwäĒĀŻX[Śj­€°+ Q›Ī.²Õū!{!žŻŻ~H®°l’ĀR/ņ¹ŁõęźćøSńWUeĪs 8Åz¬¦3ņ'p?;…ÅRņ'Ė^©ez²ĀæȾÓöū„\xē«ÜzčˆČĻĆ¢7P.9–yR2XUyā“0˜×Ųµų;„Ż7mꟆĪq@{óö…Ł„„Lް”ĮøČ$ßńļ°}ā­IĀ^6L;ŹAlX޲üf£„ąėĀ?Q¶’„sųc™ożƒ?…¶ņ„„u]°×¾ēG–0v&ĄĖs†ä P(RĮ> Ö07PÅŪž*DJ";s”P)4±ĘķßśŚØ_•vÓ~,ķīZß”³V‹[‰ż`p› “æF8’ĪQ±VĻŪ“2ܶrŽ­v³Ń3”½Œ »†l'%…x¤@ƈŌuĄüż,n­^ė##¶!ėsü„æ¢R!TÖ©n~Õ¼ü˜WĀĻłYSŅĶmڐnŒ&ā·žtvł”åD?DvūÓż5įŸiUHOųCfyžŠ<įžx×ßÄ ÷æėrJ?śˆe@›¢Ž{x.ļAćB—Ą[+xØÜgś>·”õ±Ž‹I>§łżÜtpyøä#?˜ĒŁ•Ż7®a PWČč¶ņŗų·2&ŹōĖŁMśQŹŹXżā‹†r-žEäGü;“:Ą”UӜ9ž;1˜¬õ”rųĄ[Xewž 0gO!9UŃøxäż<}Üā³ū)\¹Œ{¤Į€*Ó{ĮÕ{mx8e3% ŪŃĶ`gŒš1¤Te&z­š.ŪĪ*i ĖcæŽ.ęJPė ®œW©jœØ}ąimX¤ŗWLx­’Wģj˜×å£K¹F•”,­ćÖo«lk1‰€T¢ y3 Aœ+3 Žü;‚)Ą­@rĘ@*¤Ÿ,Ŗ.…^'ÕMčłėWźķ·l”=j·½żuʞFˆŻ$²MOŝ°–ē:Ų'ž¤yD'ÅeTOÉ*=ÄW!?‹Cµ|¬•›#oАõĀAµŖ‰ Š[¬ōä‹ļŠJÕļJŗ»VµėęŖp)!_tĪо͟’„‡FƒR l•Ŗ’½`ć:½“v“Ž%°UīšĖ®zXvÖCF‰4(–ŗ¬ļō€*„Thś;ZŹHKææPØFa ŻVk>VyņYUŠ–µ…]ŲRܑZ%Żņo’ī.?¤ŚŁżŁŽķĻV˜?ä@ų“›pČī®t®’YGrQ Ž;„`łųūpŠČHt¤5×’x§u“U•g¾ s~¬÷P¶]7®į^)9@~Ģ/b\ł–ĘŻńņ×P€ū¬ķŁż^J¬·Ų0v ‘īTśwŲ™q ‡VOsÕ0¹q< ƒ{€jÅĒŠAwóE¼¹aÖxē2öņך…¬éy}śœÕ4=õĶĖ9(\ĆSHzĮƗ󎻻qŪ’żƒżOø=2ļŽ ™„@c#`ģÓQć]@ž¤ļņ`ć„L<#ĄēB”ņ–}%,~§‚ŃńŚBDŠ-dĻåRZPMæÕᆨ;#ą”v\åU™P#¹yÖŗ†ŻŒX$J€ˆą—q5Ų6āŠ|f€ymŖŃ&ĶilƙŒhH'ŠuD“AŠČ€” ‚DčŗŗŽn5\«õā-æé«7ź=üÕrPHv3t:I]¶A’øÜRh]5—R,T|B>”PU æÉ0ų]š?L‘¼w]HtüŖTElTݬqyÄ _ņs~õ·Ņ]Ō %»©5Z¾7ź{߃-ŒŲ¼Iŗj7½[6Čb’¦p»@-ķĀ~:„tŠuŚJƒ"$>iąF¢ PˆI¤ˆaPj„B„ęfƒźb½ęc½Æ€õŽ6u¢*ææVJXQ‘¦NGšĆ śa§ž’ń„?“ģ®ōēĢĆuß>–’Ž—ĪXΌčBĒöf—•ßń5_ܖ£mlŚŹwńć(Œćoį× Ī iwŒ<›[&=ż?£¾å__ęJÉ0!xuʧœ²gūÆiYŠĀńļ°óąŪĶiL¹‡€s4']{sŹ“ü9)1g$.#bH aU!€Ję¢FqQćńQå+¤ŹSLÆ=ž‚BB҃”ØH·ĄĶ¶ą‡Üˆ~H-ÄļöCöņū”™…†yžŠzŠüY‰%ž!ī?ńŽŖŖą5›ūMßߌ¬e¬łžū{ø4äV!X6yĘžµ” ąŠNüiżz“’žB°øøćŽYϲoƒ*§u£ėŗU|”hSŽqĄé»³ėŗ_y¤G?N’i)›ģ®wÄæƒCĒpŲnhNą–æqą5÷ń™łłņ$~V>¹ŒŽž¾‚_zŸCæ‡4<č>¼šĪ[x ÉP ZqqéČūx")ęyÆ\̉į Ļ?ķz0‡ņē†ōĀlš„hČØH ¤_`øK=p-‚ŖuN~'ȱ:˜FĄ!*»ķāę!É Hīžą–mĒė‰eœŁŽ¹Ŗą€:ƒ+Ÿ©äióX“pbžī\ āßAéÓ <4!Rb¢R§*¢VsQ«å‹jwØŹ+5ŽbÅ_čAQ$tE źjփm¶#l0!XĆņĶļ—”#Ta¶€“^ēņ`ęū2ļ7±© ~ŲžD?d¶ŪŁ©čé Čmø¶„’CcŸu«øŹŠ9hō™ģ3ģxjĶcÉīś_r*{’±š'…Æßł‰sWÖŽ ÷?Æ{¬ū™%€Ņ¾ •Æfyō˜‡¶ape%ó€Ŗ=č÷āϬ5 ŹćÄųtÖJVĒxŪZüEžh7ē„B<øź?eh“B!n>שōļąŠ˜V±qpH…ę0 5#`ĮåģmTó¹|sР䁾āQ|«s‹”\ŠĀm{ĶMÖȓ÷®¤{m% D–K‚ĘŗÅÆjÜŚ’RnķÖ ŁŃ«Ŗb‹Čl¦@śF@[÷·ip& $ŌIXš{€kę‡ųĶj‘ĻčBĮC€Übpņ;AĘßjŒ.ą¬<•Ū%,~­’QŃ5ʶe|žĀ$h’ÖćƋ9Ŗ­Ā6¼_Į!½}ōjćāU”‹!©Łļ¼_Įي €ģ›^Ŗ€õÖR5¬×FĻoG²÷”¬1ėˆdhÉłuaŌ›UuØJ%TƒĖØF čøBuhBG…Č"Xų+B^/!Üč^a·ŻåĘŠU¤¢"£rK`'ōÓ!śśdÅ>“>Į©‹~H.Äæ9vūaūžZ‘?ż<3ĘÓĆ®ŌĆ 'ņĢÆlŪ‘17ÜĖāĀbäŗs[wżMnæ„vŸ~Ź2  ķ®rǾ²ęśŒrsk8Ä߅Ź;ĖĀk7ö>Oč:§)*/,sVŒ[hB¢*’cJŁ«²Š³0P¼^ž«©a©õx¦»žąˆ‡ĒpŲ>I¢M d·8 •ņØkęć9$' 7Ē ¾—w—\Įž5ÕRB؛žąx#Č ÓĘŽĻ?Ģk[:b ĢVZ$gģ¦O{ńŠä~™ēgt†a¶ģ+h³O> tĆ ÆWs1$ß5ąŌ"žVĆü7¼UÅtóøiœTŹ*7ŌÜżL½ų7ÓŠĄulŽ‚žaÉ[¼Ŗ`Hō||ōƒŸ‰_Ō°6›QŠŗĢČ̰^}v¤zoŪ“9̘ļÕ4ܖ(¦°W‘įV ō³%ņM2ūĮŪčˆ~Č^~?“œš÷ųžPģė³±ė?m*ē2Sų Įf—‡Čō±±%\’ö‘Ć{sMŠĻ$”2on˜Qę13Üā ß}•otōpŅgỦgT?:ž¼ŒÆāüb†ĻßĀūö_‰‰“²–,öłĆ’Ū;Ķ¢ÅaǤ¹;X)ÆæfŃ„ō Õ²Į›CfpĀćxāq x¾`O..»œJ»1–?…{ŇĢARųĖGŽĻūĖ-÷4ē_ģ^·žł@Gw>ƒOø“OĢcéF@ÄˆŽˆe¤ é§@śõv+Ążs€õų *S]‚³%l^ąŠoB‹/Ę3ŗ@ž@/ß šüägąā+­§/ä<ÆĀĶ€Ø3øūÅM܍ӞƈæäÕõ¬ŖÓyt‹Į—n‰7ßő^Į’ł†dżUóaˆõ¦Ļ č儸O!ƒŽŲĢÜŗ‹šę0 e ėv÷MŗĀ=is žäÉ h dOą›¤[•ßJōbkü%Ń9Łķ‡ĢĆü”å…?ä>ÜŚ…R¹–æėįm-ō6¹<<4ähī}&[ÓžŠė’ōdņß}*"š‹Jńü&ŽĪõ? Ÿ?j™.+Īūū]~[äæ{KźĻčå’p€Ū…ąŪ &są_'7~F›Ä ł·£Ģ©ōļąĪ¢Äa»'[&¤^`Ź8^D2Źå£(Ą)üØ.&¾Æ”@aŌŲ+–#–ßĖĆœTØyŒ‰Ž°|łoüY1]Qxō¤}­22N €Ģ ]ˆ£4Ćl@Ō\üj-/$*håhĒ©<"ałs• µ;±³} ·"$¹ėõ­ÜŠÆ’ż½|$źßJXņü‚­üs­Ń°t‡•°ūīnžT ‡.™’ĢzžĻ<ÆVĄi˜īV8~u£ß«dɶ1[02ŅÆ`’ CĄ:N¬ūŠ&SĮž’A`¹Č1 š¢źČd…s&sX?NU胿ęw&‚¶?ŃͳŪYžõæć[›š‡ä«ū?÷o:’ō1č:‡Į:‡i#Ęņ°™ļŸØČß=“)łå:ŻżßšĒŚwF®¬’·ībźøG>ūƒŗõj<īār”ó‡ņ‘”ģēvsĶŃĻ܅v÷å|"%ż47’ü8ĄŃ÷•é®?¤–ļŽųwŲ9q;-UąÖ‰ģ°xA@±„Ą¢¢|ĪŁ’NVF_o5ęNąŚś–€UnG}7ŸŪĶiF̾š=ü,}#ģεšÕ«QŖ>Gė<Š d7 ““€ę6 t”# ˜/ · ęĄIĮ0ŅL HĘķį^MpŠ_rǜ·›ĒO(ęŒ|ø‹ų·Ža§·ćßnĮłƒĒžŖŒ “k#8“€½;¹"Å  0dіĘ#CĀpB;N,֘†ņg’°Ļ­Œ+ 34 y¢Lre ˜äŚˆ&-³ j€ÖnØ2Z ēZŌ7¹‡,ˆ|“LÄ>4Æą‡Ü‹ž -ÜcŃ»ż°cˆ_äoŻJŌų\Jŗ«.fŽ9“ e#؃äŠü]<–}×­įM!XõŸ'8¤[/ k…k®’œéøų_JIO_§VÅĖŃcŚŽA•›xŲŚkö~~)MŹ ”•pXõŽjŗw§ßKæ°Ę<ÖŅ!’ąˆ‡‡”y­•d~!OżĖŻīĖ%†¦˜@IDD÷‰Ž SĶP;ń‘Üą­ œ.ĆLŖ‡“c‰ˆ„ĆՁ”įz½("x;ŗģrķkøæ½‰Ē~{ƒŁÕ«#?ē?ĘŗØž]A¶ß5ņ2?WŅł»Ķ¹%!dW›‚A&EQ_ĆM‘×F ®™g“ Y y6…¼!¤7„“ęQxóv‹©mĒ}HÆY­bT\.%_n6øÄ¼'ĖĻFōψFZ_v×kŅśJź HĆ|%+žm’/Gż~0 ¹ęļˆDāßåBšÆčc֟-·+æ?Qa?ėŽæ­ųχźśPŪ–~[u‰Zś%*š—nøæŻ®æ?†ų÷!}EȾķłņ#»čF˜»t#TXŒŒ·ėo ł?å– Į)éwżxN1ÅĒīH«ųļrĀE=y\ąÆį†ĒīŲVy‹6²@ؼżņM£t·m”Wš”¢ņ Pšėo‘{_BĖ‹»õ”ŽųwŲQp ‡!ÉlƒeĖøi' 9”žĆ5šĘIp£oz¼ł’ø„ĆCa„Š˜0bZāb8”ŗś‚q*ßÄ;ļ£G(ųķ fIÉ©ŖĘ¬‚]$?ßŲd“PŅYĆčZˆQXj’µ*(BĘ2źŠĀ‡Ė°3 bŅ0+|2ŪϰEVøCH·e^Ó{#ą‚¾Yą;€Ęä ī”€ä®Łnu[ŽÖk{•)€&aķ:×(‘ļ‡+Œ4_¦`šüąVé ¹‘šeQܹ Ņŗ=O¢üÉĖŻŠB’’Ķ«aY¬Ż5+©˜ŠŲ ВȳŽ%vlļ%ʰš‰ę‰¾m«!®)`Že÷о_»W"ßüžēJģg[š«:Ņ*ś“ŗ&Ö’ĶfżZ8"ų›Kų7” ź02ž" įoWŻ?`“ėŸŒš(ų=ņ÷9ćY!X%%»?4•“ķ*ü‘vžM(Æ0²Ŗ­eņė3šDWųļfY ½ü%3…ąs)ŁćŽÉœ=^Č®»r%P«ėœsD[“ūzōŲ›k€-Rē¤ĆņžL¾ȲĢ÷Gü;ģX8€ĆŽE–M»‡ĒSȟ2Žéz˜—ąÉn»Š’Śū#…łŹā‹ĻīČ¢;ń’*8DJBæų¹ŻŒ @`„b,¼£IÕ idѵT hц@6L\V”Č ˆõ¾ZĀ,h-$õ±~*s$ó½KÕōˆ'ö!¹Ż}H_šx²µĖ9żŚn,įoŠ~—;"ų3ž Œ’\ »"ń„?DÄ?D„æ)žś@Č›ĒuÕ\½źūH;N“č]+ķ;#o|“YBåS)éöŚ4ž²ķŗśhĀFcõBr@ Žė®<#’PѤ™ļ?k%«5»„ŗ‚©+–7MOz~)ė\žČ²+PĒ]·œ?Ŗ,Žš—ļŸĶJ’ŽųwŲŃhÕyƒ™I]€{§Ppń䆵ƒYą‡ ‡yœHJ} M~ĄžT5ö§ShW»–…Hz Į’®§qx÷2Ā?€čŸą>ēžæŹ÷_ö¹„=ś ́Æ^Ī P5ó„ˆäŠKÉŠąÕAWsz‡ī‘ÅI¦ ¹"~·€tė@¤F@&…M‚–¹Ķ’WĄ§vū9ĢžÅŠ±Ę+@~@ē®Ł”Ųa÷>Ś…÷Įža˜÷be$ ŗŃ@tĮ@—†8½„oWźœ7s+o™9’»ą>Xåœ<…‰Ōå¤äēļk8cq æŁŻG¼ā±H„fĄ¶yˆ°šŚ3%ŁŚјyśŁĢ}÷’y]Dćg‹Du ā‘Ķƙ)"“͒α_Ų‘j$C2¦U2¹ū^ž¾‚‘Ź{5I%Ÿ"Ę`(…ļi<³1™Ü~h=łż;ĒBżć]Ÿ&Ń;žV ‹‘ė€Åoāyén¾’’.ł…œ{żK¼d·ćob-ņš÷ž ŖÜĢ<›Lļ/Św-2é«ń†Ōźv3iQ é3š_gā{ćY–!ŁĶēćŒµ×HK€e÷¢Üw KÉ~šĘP Ö€ IDAT掎ń,-sņżr‚c8ģŠ¤c(ćų»!9©Ū.yīäH½‡®¦pm%7`0P„ąo ēō¼%"ŗāu (±|:Ž Ky 8xó9hĄ Uw”i—“÷®¤{m%Ÿ%š‹1ĒÜ׊c×,ųŹDN xĮŠnéš¹MŅĖ›­e`ŗŻ Ņ6 %:˜˜FĄį‚ŽT>0`Įļ!®ŲUc.‚vAƒ;߬,X‚ś1¢”żHĪÜ,%”Ÿ Zh\Ā®ćą– ā˜ź‰ņ0¾¬¦ßŅ:6[Ū ę£ŪpQžˆģÄHI0O.­eŚ·ÕlŠõ~›Ė ŠĆ/Š\†äĘ0Ńrh D“M£`{&”k’NŗB2BšOģC–?lw¢Z—š÷ų›“5“lų3…?›  Šx\Sų[¹n ć5Ü.ßżē ģÖĖŽˆUäļX×„ĪPĶĶæ—ģó÷M†ģĀ>×ņ Pµ÷AģõÄā¦ĻœĆ}œī÷ó‚5e'Š÷ŽW"ßnk®’Čb¬Ūʇ@ Cś½°Ž_ĶceiTłGü;8$‹c8ģš$c@ƒ Ēń„œ , Ļc°›„ÓˆhĖ*”0„Ó_˜VŅæéÖĪ(/GĢžgœ€Ā“!p¹Ż=DG¬˜‰ēŪw)—’ž^=nFżQĢǃRržł±P¹ķ Ė˜ŻŖr `gċ€ÄF€ Ł7ĄŽ žĒeÉ?šoœ”@÷ Į3k¹Õ®{€Ł9`wI›¼|,%aĮ£ÆÖqM£s¢°š# ł·[įĻ|õŌ†HśIHCt×(:²€„ $ ó(įœ). Ģ­`Ąę įDļ×ģ&ŠĶk@ė5Lō"ćJžY¤µ™ųDäRą7ŗ¦Å>¤/ų!=џJõ~ˆ/ś!;•ü!IŃ‘0’xćdPŃß$]į žš|>įż®¬ĢĀ7ēæ|-%ņ‹ųæĒŽäUėq»Ö~VĪģÄž›×±ØŁgz?·”õ1n‘:i<'uNŅ4īś8ÄUŃē¬XŽ8µ/ó„d ęę†ūÜd—ė¤Ę s5Ėß1 ²·ėN¾æƒC,Ąaē@"’łm>SČc-Æ!µŚó Į¬‚|®¹l*kRi8e<7apuż‡į¢ötß’¦¦ķq¬˜ŃÆ_Ä4Cg°”°+ż‡\ĖŃē¾~W:7[¼Īö¹IEįŇsĮžgŲ/[uZ“ #ą8o+°æ„õ:˜āßz¾0"›\ •‚Śu|lŗ˜²3z (b‰„¢€äś7·2#:Eą“ö\ķK$lžæ…C~’T ʧ[W†%?½RÉ]ÖóĆĮÄļ¹9Ķh9CĄ¤9Œėż¶&£ 5’I”Įtž¶kSĮŁūŖ ©éČęüš YGj)ŁżŠ|»żŌ@¢Ü~h}Ā’ ÷·Ć ÷?óH&ėøU¾šń‡”“EF‡ūĒ+ņ·ĘÓŗĪXÕŌƂ\=OŸś.FĆ:ŠwĖ–®]Łūå_›¦ і«6³šwźĪŽĻżĀźčsĪķCū?VŃ÷ĶźH1䲖łüįˆ‡ĒpŲ©H:% EÉP#̾(ü޾ Əæ„q^\2&ĄM8_Tü_/ė€?Ļ`d2÷śĮĪ‘aĀŖ‡cķŗ¼u1cCAž®?ēøÓx’«{i³j9Ļ ƒĪö lšl‰5G&&¤–é×€ŲF@2õ u# O˜Ī»j‘v|aÉŌWõńoÖ01€ż½ōŚMc>ą Ć#Æśłg¢¹L3ąÄ"Ęł×#ń/²ßžĘß»ž^:ķķe‘äÕLž¹‰‡ "ąĶsņ°'#Ą+3ZĘ€ģ˜&a ŃĘ@4ńŽĆöfd³c@&¾Ń8)Ö)ȖŠß6 ~H]ō'U<“¹E?8Ā߆¢ ŅZąļ©{ɟó<Ė„¤}A1§Ģž’Ł+ėE ’ó÷ ×ęUŒż"ĄĶęē†u§ēŚ_Y °KwöyūV˜ĒźlÄóA/KćT•'? 7“r°ŹĆ†ĮيĀsļź‘:8v”9!’͊c8ģt¤š`29Ęy±Œ€o/f˜ 2P\.F„BÜ'fOz€«Źüģ-¼˜ćō 3MŃųĒČū¹'śœy—qh°†7ÆŠųK£Žsp}²”¶e×ʏ40iĪ“€Lź@śF¤V,p(ܢ鼖L}ŻĻ-ÖćvN/ąiŽäoaūĀĻOА‹.?ŠĖ'ڇOĻÜĀę1ó²c‹¹Uƒs Xż¾ŸĆVWEjTX1ĶÓčė”tW/ż„Ž;æ/ō³¼¶IuˆŲø4DÖĶHh˜§“SĄ$ŠJ;ēäā½f“l‰ų„ó“°ČßvŠ}ČLšl/¢ļöCnóū!żā~¹šO6ĻßJ¬"g加Ÿ„ąĖ©rhIg¤Uü’yOz¬_ĮeŗĪ¹€VTĈ*yĻ<¾Ę=ŗĪ8Uå…ÆĀœmŻõfp#k«x0ŠŪqš»ųŹ<¶ŲäY¢ćźXz śF £Ē)sBžšV½hppȹ6~ü;{‡źų(VU®¾n:wL¹_…ąÕI3"”uå1~ž>˜ČąĄ‡ŹC¦sUtĄyWŠ3XÅ ¢póČøŽn,_Š?ćŪS}H½P I“Ķ€#$7ŗADüæ'ø9™ĪCe„jdŻ¢Ćā¹Õ×äüFĄ(—¹WIIš7ƒ «iŌqq Ż{øłpł &¾UŋГ‹Ą¶óóčŽ#+]‚h,\­Õyäõj čÉF@£ ē†ä^(·Vƒ`G!U¹łŠŲŲČÉī>$UL!”ż]ŃĶæŪ‰…0Įn?Äž~e;į±óü!¶š‡Hž’¤+)\šß!)-lĆč*xąģnō­XĆÕŗĪ"æ§źTvķÅķs–³ÖćŌ~t\¶Œå@^Q[yo#_ĚoĪćØ×ŸĒļ@‰P™ói˜1ŠøŠĄQ.® ‡¹IQyģŻpÄT7)sÄæƒC‹ą;/©ŌˆĀĪŲÖ*š::…7š!ŠMžŪ{ćĒSĘQŽd—±ĆčŻg,ŗy]¹eü8Óó ąFįæ’Ā„=ūGNfĄOn§ķƟł@Jö@įł>sN>ö°EWҵ¢Šó¤Į"";W W‡Į3Ň4܃•Ö”Ķkø5ā[ļüæ'B$!vēéB„ń¾€Žu’)/×p?Ų× °v8He—n.ł!ÉĆ’ pmōy§ó  'šŻĖUé2š~’L3`T)G•ŖÜ'”@ĀZ ĮīČČķčšńü Īüƒ†n©˜~tdf@cSZ·1`%\ßz­üv$Ņõ&¹÷јb_Ó#ēdw?ɁĶ]žlUķo4vE?d¶ŪŸ­0hĀ?™<’XXsż/ģĶÕA?“…ŹāŅĪLܲ–ktQDžķ5š‹‡÷śS_ųŚ>Bp_“Āa®‚·?586޼f€· G¼QŃt‡Ź)xĶfō?ŸäÅ!c#5„üGžpÄæĆN‰³qŲéÉf4Ąō)ämXK9‘ŖżóJO`T§‘Šģߎē/Ņ`†Ü;ų4.++kxšLBIõ܂QŸG§psēæp½)žM~{ Ļ/ņ†” B°°Ļ‘Œč1¶iŹķŠŠ¾}ŠIK±‘RB°Ōמ“޽Ѿwķ]ĢÄVƒsęTń–õø5  ¬‘Å Š!ł~“ĪÕÆWš1@7žƒó›Æņ/ Ea˜ūbÄz©Fø2©ŲŸĢµID XOĶÄ€–­Ē©EŠZ „L|4Ķ)čķˆNUČ4Œˆ}HIšēb—ZPōCR»ż®PöĀüå÷C…?iäł·E–c߯]u’›ĘP¼č¾ŚXN­ŅÜ<øwī~vbWņ¢a-~—oöyEūA%oĒ:€ĘT]ē, ,zĻ`H¬sMʜ]‡§U, Zšl˜åå(óŸc0 Įמī éy5[ĶćįłżsŽ’Ź•ĒŌź:œ “*…‹‹ßĒsŃs’°±öaĒą’$üŌ”ƒü£i’Ż…7SZ¹Šēd¤‹AH(L× y¼øæmż™¾Į:®Ć`‚U{qPŗE!ūiyLjoōŃn…‹Öc<}ĢP`4€.øćC_Dü'S0°cˆ6ūŗX “5ąv_iŠļ3£”kC¬¢Có9¾@š@­Įß_Æą¹č1^^P LĀāY~Žū.ĆóčßVcÆ!łčó:Īś¦¦éŗ}x1vtń²øÖłF _Ę*h’jt@K`o @ęĘ“¼9.ńL…Thi±ž.võ²±«Łū;ĮeÜx‚ŅżŠ<»ż°c HīæŅņqt‘æQ® ¹047·ķ;€{Ÿü ézĮ$ŗČß!^&„Ü%?ópćÓŌŁ]w°ĘtµR§æ”ęö1ę­ZfŪ[–Å]pÄæƒC&l— ‡œaJĄ ćøSJ.~/(䊮w4myó浓 oŚ&Ī­č(¼Pģć_ūŻÉ*»yēēz ®6ś|~šŻü]`Ń-“©ų•·¤dæiyœ|ĢsųÖ’„ņéT‘g r÷ŲéM{ųF“«“h^# l+½ ęŌ)Œ[ØšĄĮūéL°/`„×½éc$ß9`ØäM0Į€_Ā’GŻ‚×ÖqĄ§D¾—± ”Ē.{*¼”č ę9Ł ė5k ssx…Y%£Ź£ L# ›‹‚CóxO@WCņĆĀFTč×ļÖz§·å~·Ā˜€ĪŸßĢ$H®›¤n˜cēÜ€„¦Ų·’ĖFÄ@£9¶Sƒ`{'^ĮĮlģčCB’všKšĆö!ś]žÄB’óH§¢?“^į°²žćhį‘Ö~ē£ä“wł(*.ęØE[ųĄn¼XEžž¹ ķīĖłLJśh·~Š<#¬Ģ™‰øžT–k*ĻńāęĶ,Q^z7R`°eiģśCvCžĮ’&ĪÅĮ!Št¢Ä8&HÉ4 FsSvķ½|n‹.ø¼!^ä(ip4§*,Ė÷ņĘ„wņ‹õ¼rkm€ńœm< Ē šĘ‡ę1³6ĄŅGńž¶˜yH Į÷mŪ1|ąM ə|r;m7üÄÆ֞ü {&ó~”ł€“Ņ ¦pt%—ømė‡å@ŲP¤¤.ØpĮsĶa’i!xģ^‹w.– ŗ×`zĮ9ļĘ21Ķ€aņöóņŠHŲš£ĮŠOkYgMpiˆį>ŽT$ū‡%oæąĢX_‹Q^īpĆYź~“µpk¤ū€ItŻĮ”œZØr>½“ķƌī(‹–0 SŅ6¬—fÓ Ų6§c$M¢nŁŚÉo4gŽÄ>¤.ų!½]~hÅ¢æ~ņlķöCėžŁ¬ģobīßčś(¼Æ‡ĀA®*åĖĀ >ß®µŸ•²­ŽĀ;€Č+ää¶Fžgf…’£\\3Ł[Ą7ŖXt\)}ī|›o­©‹eĪ®æƒC«ÄYx88ؐŠ Ęq¬”¼ ŖŒ¹n:s¢Ļ‹Õ*`lœńĖA,œH™’.”qÖąūyĮīÜĘó°48Įšāŗ%v~?ĄÜq,‘’~ū Ø×łÉ·īĪ4-š©P l3ź¶"J݇rÄ®ŅąR,ķÕ É;•‚«?sńs¬9b™GĀS*Œ”šŻB!= J»|c>-—_]×tQ×Ňw?xB…#Š&ƒÓެeõœB„ė$G,ŲĢw@5?ŌĆž„‚7į‡ęų¹ß.EĄ$VÄŠ|Į³†ą›§Ö3,Ö¹&¹4Lź$Š/Ż‹Ķł³l @lc z˜\vlļ¦Aŗms!š!I‘ŸāÄĶ-ö·Ķ›å]~HQōC‹ģögęYhē1…?³'o¦ĀšŠ€3§Żņ=PЦG|øE{×ߎ® ¹jnnhŪ™g«+)®ŪʆĮB°`ņ 3‹ūY)k…žĄ’vl׋‡\’¬ pÓEÆė<«(üÓx€ū łvVģŒ€Ū.c/ 6ŠŹæMēV»kŽēŻ`:ą×ņöoĒÜ Y*”wÆĮļuuŁl­ØP 41zśéŌ!Ģ MÅS­óɇ%‘Żņd BÄ8 ŽĮ’WŖN^dš>Ą‘š˜ £¤ąÅ\ž«›Z³hą”z”*< @zµĪ…oHžgŽo¦øŠNššŠK‡™s«™`½k;Į1‘H‚C„äŪ× †Õ…"…'Åń…Œ)T˜®Ć—s*9Ęz,VkA+Ū‹!)š“1`’Č °¶¹Ģ‚ÖŽ)ź!ūĀŽJŅ"?‰ūŠś?l_¢²·Ū­Sų§Rą’Ūõf_7·„C\&TŽ^ęøD»žv tqK8Ģåџ‚„»1ś¹_§;–åx×ńļą)ĪÄĮ!É·żŻüw7~fjĢyĻ’%|ģƒąÉ!3ų³Ż5‹’NĻŗ:–łŖĘ_æŸĒ¢kDóå]®žŽ?¬?n»[eÓH6²W(’7 żĪŗ†6¼Ž÷ō•‚y |œf¦ģ¢ķī.ę%¬×a¶!Y« öQįĄ-”¦Īąāw¼f×L”pv¾ĀT) ® rČüP$¢#ŗ‹ĄŠ<Ž,P"E#«%g½`^¼ū6Ķ€1EüĆ+ø<,yėÅ­œcNHĘ €ˆ!Č €Ģ Ȟ)i²9ÉéLŪRF‚Uø[É„ˆEJāŽ$ĶĶ–Ų‡Ö%ų!w¢²ā¹ ó‡Ö!ü!qžœ[ÜĘéūŅ᫯ųČ+,įš÷7³8™ė¬T<&Ÿ‘Į:ĘKŲSĄMć„ĆFóčä’$•9!’ŪZK߀ƒCkGd"ąŖ»#āĢZĄ|pEcAĘ2f6œĆēŸ3‰H~śW}öaBYżƒÆÜrķ†å(~?łf~?Aä ĖX·‚‘€ Ńt1P²?°%#ŅõV2p"bżæ{±ŸĢB*±æmü0r›ąwĒ?7Ó]~Ȟčwy%;!žŠXō{B±ĻK7æ`3±’ėdMųķgSų›,]Ź:—‹‡Ća&VoįąÄdÆ­²Ģõf ÆÆĒ:·,MįNČæƒCKąD88$Iŗ­!õh€Š‡š¬]Ā: @Ótķż|d=^^ŻćtāI`]›nģ»ļ?›¶ł1‹Z™3ސ t¹8uų}‘śv4wZdæc$Ž€äZš÷ńSŲEć3$ Įƒļj\ Mėø5ÄŽ[9Ü Ē(ŠA VÕ Ž’Čh(āhb¦ća¢[aPżƒA’Æ ¶mHY»éeæNZdĒæŹąĢ÷kv’·…żŪ˜}¼”ō–|-®­:gĢ ńN¼š&™D@ātČéß¾OāĖŏāó/f‰”ģ!T&;=Ņļ>RI 0Łž³N@“p°Ÿīźųš„W•k<o®dZ Z,ć•üWB`ģūMķĪŪ­÷:ßI(ņ\3«–GģĪ‹6‚ĘRŽQżĀ’YÆø(Žż›×$:g{4¶Ķm1re˜äĢ$ŲIHFŲ[©3ÆkA”o’ĖŻ}“lˆž¤Āū³,ś!»Ā?ü~Ų~…¼źž'ug×_å[Ą]܎ƒŽŻĄWÖćĪ®æƒĆĪ…³qpH“dMhj$c|;se˜’!”p›<•&—5<覌c’cT•óÆ›Ī“åIü<ĻĻ­\.ßpt>Ž8™”öģ¬FDĢ€‘[xR‘Œ’‚ļy9/”DM’‰ 8žQįž÷.œÓ¶ēfx¾Ź3@čƒ¾fš€5E šB`pƒŚ(ĢØ08žŻ Ē«M2fdnø“äÆÉ¶)`²ˆõę2ģŲ‘MƒT}4™ |“l }HMģCĖ ~Ų1D?ÄĻļEt~?ģĀߏéŗĪ_„ʬOÜn~¾%wż!ƒB‘?ńļąN@‡41]ēdŒ€É “-# ÷ż<¾|k3 õ)CΌœĆo ! ųwļse Ėćķ…3ƒæŗźå/Ē$ °~”!SI 04±Œ€d‹īŗ+Ņj$[,°b¢ŹŻtīĖ¢Æ‘`©¤`-xL%‡)’QųW…·Ž@IP0ŠÄ[æ@­4Ė‚Ö4Tč`H–›£y}–óźĶ·Āa|ü]€Mfm0·Š“¦ XēÆŠ.šå‚Z>q{ŲVŃ-˜ € 44‰eD‹™6Q"%©Vƒ6ā%–)]\Š$ScĄ* ]Q Ӑ(Ļ•I©HŽ^IFܧ²É¶Čßvvb?‹ū¬ÄüŃoņK`§"ś½>äÖśē:Ģ?^†I¢Ā~yq?hÜŅ/[Ā"įžÉˆ€.]øeÕ*Ī–:'ėĄŽÆ¬gY*s•9»ž; ;ģŽ‚ƒCs’Ė”€Š%(%ż‡÷’x ½C~¾‚'Ķ`HōµåQó,¹Ž.ÕųčˆĀŌ!DŠÖ}‘ĄTČv}Č]D@,#ĄJ¼Ø€į0A3øŃĢ/Ļg ¤ßFŠ$:*ąš:ŽP$ X°N©Ą~Yy¼&ą° ä–7żL5¾Õ īćšv*/T\šZ-’ƒ¦iæˆ`̹’Œ°6“T" wŃŃŲīĆrß-UŠŌYžéŽ}4¹÷Ńä%ŁŅĪJŗb²+ų!q>?$åŪęNAōCīwū!Å0Č\ųĒĮ*ü!·yžÉ0@ć!]ē\Eį¹wuĪN暲fŲõGü;84'N€ƒC‰D$z*™ø”¢ś7]l*ą©’§m~x™%ąŪ[)¬ŁČ, #‚ņn§rõÜ=AV»e`"²Ł6ŠäG›éD”“E–€ŒgÄk!ų–‹ū ńŽōŖ+BfŅFŠ$:* (xĀ+ Ą įµ…Ū¾5ų0Śõ‘–{}H»4ˆ“(ŃVe€!ųā­ Æ™ēTE]Sˆe§?œ¼lt4D.7Ņ:|*†@*‘»h&÷@Z# ™ń§h€dJ&Ā=EGs ūh472nK<2śXģCv?XDæ‚L&),]Ńń…"ŃÉõKjĒ?F˜?dƝ“\ø,JJøuóf“6mø5™óĖZÓ®äGü;8d'ĄĮ!Ė4G»Ą.g—p5«€å}dŸX%}żyæ­ąU$C„`e›¶ŗßæŁļ¾Ņ5 åź@üˆ° Č4"Ą$ŗN@ō©%ę±$£…ēėDdIol”-–|c=ēhų (©6¾Hį3ė1;3`ø—?{·TIF½„GZKƫًht] Ä2>žG)ĄĄ£ć¦öŚŽLC07WŌ@:db4-%ā‘ŽČ7ÉTģC†‚2ż9ŚéĻfˆ?d©š?¤ßÉēųCėž©äłƒ³ėļą°£Óź Ū%ID˜¤k,Ē$ū¢qRŸū#”ÜV#ą®ėč“u#/#9ų­(Ÿ”ūß¹m]—ęN €–5 ƒ‚²ŒŠ%DQOĮ ¾·}̈ī"p|# S ŒłęĒĒ_‡8@”Ū®ę†äÅ9ž¦•’cÕ ˆĘ®«²ŠčŚÉn¾Œ+kŖøDÓųÜ[P: IDATĄģŽ1»l4¤3ž9f:ʀIk6vv̈–śœŲ‡Ōwų!ū‚¶oŃ;†š‡ōĆż”łŖūƒ³ėļą°=į,XrH.£–Oą(¼ų…Ę%½Ėx‚±čU’!oĶJĪ0tn""Mæ-,`ōeSł¹<şłŃh®ØH­V4®px-/)04$øł}»@g޾~^‚}µĖj“B°%Ž<隊|†Ą­2ß0ų“åS†¦±ø  /9Š×zō§6õ;hŠõmdb€cäk:Gŗ²'ņM’ūžą‡¢?JšĆö%ś!÷»żįKōCėžŠ Åæ#ür†³qpČ1™“ „ųFĄ·8_†yPJ` ŠČ$ ĻuėĄs'7Nó.Ońg?““Ų ŲfŌ՟“Ø+ƒBœļ…©R²n•‹Į߇›Öƒč$oO7O (“ؑŒY$ųģÓbt!™}C Ńõf=HÆļ?c!‚:dćzBPåĶē‘ćNcŚ~"F@&Ećż¶25 ¬ģŒ†A¬ś ™ˆ{“l‹|HM蛓Į_½„“z2ēZim¢RŪķ‡ųłżŪ«š‡ķ?ÜńļąkvŗÅ…ƒCK‘«h€é2YJŽŠ€ !˜ēŅøēšūXo®ņf4Ņ©ĶÓ5ro@vĶ€.n¼}jųč,ߤ2ž_C$E` `’BÉ]ś Škį¼0×n¬TĶH¹3æ×TE:YōčĶQR¢ü±šćüµŒ–»™ē …ß;÷`ü¹WńIō8ęō¹2¢ē±#›fA²dĖTˆ%ŌS!¢Ž$āŽJ:BŅū¼ą‡Ōvł’ūo®ūƒ Œ0ŻozŒ”‰Ī7ې6§č÷°ż{įæ²žćl ’֔ēĪ®æƒĆŽŒc884#¹Œ`&jM Jž¹Mė8Ē*©›™¦““šÅź¦łž-adZ8p@ˆ=‹a®„võŸśB‡U ōŠĮ–Ś’oļ¼ć£ØÓ?žžŻMO!„¢‚]lØēYĘÓ³Ÿå<ō,ŲÅŽĄwbWT<;ČYEÅ;ÅŽ;é-¤o›łžž˜ģd3»ŁžMxޯ׆ewvv6Łdēóy>ĻóUŒśŽu܉˜:Ą"3n=—w »i.–Žyš}¬}45ąš:‘ƒ×­ā#Ȟ”Ķ}½¶däˆ±ĢŽw’Ł2¢=o²dŚPH§`‡L‹z'’ś±iü‘±žŪ.äŗęF®Ń4ÖŽń4;;=&S¢²Sķ‡ōÄü!÷…WˆūƒˆAČ&bBJā_- 1Z“+F$Ÿ ŲŽGÆ~.ītĆq@žķ.C‡×Öŗøc~”yīźmJüūmCb›Ó£’7ń@Q1_7‰[’Ą5ŒlŲÄ8Ą„iŌ9€CŽ<‹åńW,JȾ9/©šé¢#Ä{<¤"šķ¤"ö!»‚?’Ū/į¦:nE£ńΧ`ŻŽŁD?$WķžN¤SųƒTż!—ÉÉAŲČh ±LČž|€\0RiČ3`•U{\ō ¬Æ-ąÓyŠ•Öż^Ū¾ŹÉމ;%šĻK¹°a“łößzŽ:ūF¾Ž¶Ÿ{.ćģśséĆüfŒ~‚‘É®< 5 ŗ2éų© }H\ģCā‚łbņś l›žrāīĖV·‰{5ö1zQļófSōCāÕ~Ho?䞚‡®÷’‚ŠQČɉ t0¹hĢIāoĆę`@vSžįŠÖ €ģõzģ%°L›Ļc–doMcå ÷²g~vŖē23dĄwÄģ²ßį-Ī6dÓ°#FAlŅ-źH‡Š‡Ģ‹}0’‡ļPśÅūģÓ\ĻM œpåxmoØ_aźö‹8qć:&üåLģDė!±m“&Ńķ÷õCfŖż°y øæ mńtōĀꎦ”ā5ʀŠ4Ęįl Ėx)¼]ŖCäsäõ Ri ©DėD,–0?ōo{F@?Pżś™ū³Ś*z‡OTjÖ Y%õH# ¢U*V* ŌvbŪĘ °čU†·Ūh„l"Į2jB'։˜…¶}łÅØDĶ+2 ‰™eīpÅāK Ōo?Ēz½ņ‹x³“AŪ~ģ>$ÜJŹx¹¶†}€‚ļ>`żēƒhĻ‘ļ ĪŚģ7¤*p;ƒN’ļ‡ŁiõRŠTéAś:= E•2(Ēü;ąv»ųݕǂsÜęōŚ’@L‘_ųq$$ömūOFšŪ’焌jØe¬¦±Ŗ¬œ‰†aĪūxģĪøį~ž±ok’­ünj­ŪV.£Z‰~‹~h-üķ¢ßŪĪ>āżDµßży&ś÷Žqœ©’Ī÷’‚Š•@rė1#Ąś µćĀ÷µĀśoĻˆ–ØNŠŲT=©ĶČ#`H?S¤ŚēXf€Ż€Öf@Ee‹ W±R–ą˜ p0š±µ¤Ń €°!`7 ±t€]h@b†@~•ļnżx§”Ą‚Æ9†ŠĻ·²73Ū”-C‚« °Œān,Ø­i9¦hŽŲĒŰčØä€E6*ä¹Äš„ģßPĆķ±¶ lI}×.ēŒ'DZ¦ē\Ń]ĢJ곌ś9±ļ„·™};ļ/ŗ•Ę_É0#Ȟ µÜ4ūfw†Yhoü”ć°«Ą~IL«¬ĆE?tHµ:‡šß>ĒTKÜ_„v@rˆt¤B÷µ¢=# V:§ŃĶ€ł¶ėķ™–mSV{@ĘRŠaf8ɤ ńvČ”@S#ĒhėNøĄ脯p»ńµüGG³WS]’Š¢=ƒ Õs Ia’¹åå‡5 ĖĆ7óŻ.Ö¹=Ōą" tJ~¶ ų©VŠīJŃ{Ż žŗē2n¼ź~3śīD*BūüSīcą²ÅģWћĪĶ÷±cŁ /Ŗś ÷ۊė—-ęm„Øųd6WWŸĮh»ąoóœ„į6˜F/%‰.Ūɋ~H.āéÆöCl៌č‡ĶCųƒˆAč̈ 9FŖi€Š’ÓŽĖ€Ģ§¢µ@j©hĒ Ø ŸDŪĶØČ™©˜ŠÖš›×Si°HÄxs*=õ Č+`VæŽęĄ³öę 45ŅĒŗī)dm«Ō€•¶~ŒS+AŖÄcD=†.HĀ=÷65[XĘZK Vöęh•żå‹Čń>F6lā:  ¾†Ū½‘…Ćīąm6Ž&ņ#ž»å¦Ä~$Sīcąßņ?„(­Æcéœ78¤śXēYK~%ß0PRŹ÷uĄ¹ćłźŽ3˜šsŗĻĖ¹Ļįéį7ńkäc-”_Ž#¼ļ@sģwø½§ßgæ=M¢2[ķ‡ģÄü”ó Ŗæ lnˆ 9Ц”Phń|zf¢- “­#Õ ę$ Ę»Ŗ`˜ĪTÄ?/Ąn@xf@åhĄ н'3­Ū’~/š/ōš›ŲÕŗ½W_9ķ;Z+ĮÖ«“ęZw/QĆ ^’1ÅzŖÆ;‰ž{‹ī=Y»ryŻŪDÆČū­J~÷AųG=ĄĆOę·õĖyš¬[Į­uæS]Ł—Ö¶O”ćIFč’ņ)Eļ¾ÉĮ~[é:EÅ,Ųio>?ś”HékrŚå,¾ēj.ٰŽ)ƒļMēžźc mGf½Źö„Īݶ؆ļ­ćr·~ńQŠn‹ēs'pR“Ź~Æ-Ć€?Ųö'Kō[Cü2)ś”żj?äFĢ:NųC÷ł›_Dü BŽŅ„+ ‚ŠUČŌJże!õ łU ¾• žÕ õ¬‹DV€—„V+ €ójŠvEdĶ€H¼ū-HbeVū³· ē„`C4š ʰs¼KžŻ<œ·C«¬3‰Ż|«)¤ƒŽ0 6G€_? dędÓĢ)*枋&0!r»Č*žÄ‹¹Ė×Äp€Ź>œ}Ž­SÉ}h]՟5ŹĻßcŒßĖI“µš‹J˜tüÉÜ»[5MNūŗķBninäR€n\råcL‰<Ę»/ęäŚ&iī|¾õŸØŪGq~c=wTōę“[&ń–ÓóŌnĄ5vė­{Ī?‰W­ū¢Eūć%¢R«öĒ>āŌ…Ŗ¤{²?$÷©ś Āę€$”©4d>„OxR1Ņ‘€ģ „p*b·@źó¢&h;7 å¤?…VhŻ.@*rÉĮdoL”"ä@€¼ŽŽWüæųō {äåńA~!*ßįDÖZ sĄ©µ …ˆĖ,p¬Ęo†fcļ}£Ó¦°ßef>I#Š=@•ÓŅz‘ģz ÷}9›³wżFŽ)šf¼Ē7ćy¶Xś+»)ƒ¢Ņ,u#ßFn3y;-ž‰×•j±į”¦±*Ŗ@Qs#W¼ō®­įŌcOk³RgåŽ'n`ˆä ŗĘOĒgēŒf}Æ×ģ’w¹ł!²Ā?j “ļ½–3 ƒ6­ćŽæą½ĮhUÄ ¼F„FāTśł!ó¢r§Śé©ųCžę’‚Š @: J#ž4Ą˜†Böē@z€¢$ö“H{¤64ākZHgŅ °· €ĶH±UĄ"Ś ˆßųr.GyŻŹ™oėĄü_8 ̟A÷^ĪēĘßü—’wfp‚×Ė^†A©ŪÅʒ2>9źļ̼7Ķ~Ūņ„éJ“˜NĀ5Ųę–6|h„ńjņ„čńöKT7ŒµÖ}ÆåĻ×q³'ŸÆĘ>ĘOŽĶm~/ēŲ÷įĪcUä~æšĆ%J± zöāģŃµŽŽŸv!+½Ė'Œą·¦:nӃģ5év®;™[#÷uĀŁ¬’}!gÆ\ĆĮnSdĢŻS¹Įŗ_×M °ˆyNÆńś‡™{Ķ)¼ōsbS#W½šO¦Ž¼ŒÕmŖüµ(śź:ÅńDüsAōCrÕ~HšOž‚ ä bB'%Õ¶€Š’“j ŻgmėHuŁh€ģµ©›ū°›g:Rn°hÆmąÓW( ś9ĄĒģ÷hiޤ®×Ws™ˆ¢ [žQÕŻŗßیvū%\ŌTĒX@Ó4jóņ˜ķv³. ³mŠ\>®÷ŗ•¼pļhN½āNŽs%‚Æē2ŅćaĆ6ƒyėäół=ņ¹ć1 ģdĆ0ČE’ķ¹·Š\¦xWŗYš6aßN^!ó›C)…Åæ²„ Ķ2 vśĶA“Ožƒ|¦ų׋Jøg‹L/ĪĒWŠ-T™N?|Ias3ēäēóŅč‡x+r|æµ$ßĶņšĶē°{ŠĻß|Ķ\śäķL~æFFłÆ¹‡/o:‡71ŃēåüŪ.ą7?Źģ9Ó(SŠ~½ū¶]*ŠŖņļ:„›¾łŒ#P”~÷c}„œ_Lø—ß ø4źu@WD “ÄŠöCśD?ä^µ?]żż{Ā$ī/›;bBg&‰¶Hß|€Š}Ö¶ŽTw ŹœčøT¤ß €Ä["Ó™n°°›s¦s8”ڲŪņÆŅķˆ3؍6`pé|ņ½ A?Gx<|xżlßęž«łKSłÖ÷xxw’#¹č„3Ł`µ<9żĢeŠżJżęæģ9äP·ŽŽĘŽęJ@[ų#ą©ö^K~!jŹ} \µ‚ ‹ŲxÄ)|³ķą°‰a7 ¾|‡Ņ¹sŲ×磧GĆ_Ž‹_ĪŗŒŸųÖµ!Yƒ!Užb‰z·‹5AĄžŽh²–Õ…ŽļęÖŚ±W‹×­Ć`Ūæ¤č÷ßøpwėĪcēŁhū|c “Œ¦}yÖūŃŲćnśrG¢(]²« ‹Ķ”J$·?ÅS×žĀŽ?§Õ¬įįēļē UKŁ óoQÓI°02Öo½©ĪĆņŸ’Ę=Ž&nų9eÜ(&_2‰/Z=źD1Ā"ķUł!5ŃÉGü!;Õžtõ÷Cמ UAč ˆ ]€DŚ ¹łŠ¾kŀźŒ€T–„ģąr‚KŠÖyZ/'é5 µVhßرÄf Ę3žąórޜ9ūƗł °”™ż0wŲ,ųś Š’ó*‡Ō®ē*Ć`McårA·Š°é2õQśn\ĻD·‡Ļ»‰3·Ż?„«ŗįē‰×ržņ%ĢRŠŹ7_ēģ!‡ņšą½iÖ4V*Ŗ~?ƒā} æżĢE~/gk5…Åģy’/ßR8ķQnńł8d×ĆmńՖ[qĆØ±|ŻŽóÜw#ÕAåŪģĀgĒüŻŌak~!ļ„ĒÖÜĢĮ€Ūķā÷Žżyńܫڲ{óEz’ś ‡ū¼ Ö *].ŻnV—”šĶѧ3gŠŽķ§/–-$’åĒŚŌĄ ŗĪ¶@¦±Ŗ°˜ūü‰g?©ķš»dp{ZŖ÷łļͤāČ”ķ«wŅl]ꦩdżĢ>‘e?~‡øßŸĮ®‡¹\|o‰§Ŗ>@ķöµvyäÉ­u£Ó2|§_ʚyŸ0ÕēedŠĻ “ļäö£Ķ÷p›m/ćŖgļa°a°ū·ņXa1ÆøŻüPŽ‹ õ,.EEVų’r¾|7g(ÅĄ+æi ‡uļŻjÉLÓP”d²Ņé‰ųCģj?䆹·–óKōqÕq<&Żž@āž‚°¹"€ t!ŅÕŗæ © „䌀ķAՓ>#R›éMōŪÕ/“ļœ1"ö™€Ģ_½OQŠĻŸ4Z„(ņƒAkŲÄa?m‚žBƒ>„؀p{…ębžv»qśIW³¢® ­[čöļ>ᄨ@£i·}¹Š’‘\9ĻÆ9Oō ū{8”°ˆ‡Ünƒl©ė ²Ļˆ6ˆpćZÜĒäšfä ³¦QłńŪ¼j ½Ī†ÉŠK)ŗėAöZ¶˜é÷Žę,«!WsE0ČŚœ•_țļĶ ü½×xÅ2DĄ ŠPĆGł…|cݶ|1yOMąĘę&Īņ#÷ŪÜĻŻGma1 =vÜĆyV܋0ą‡o˜flkæ])ŖšŲķż™œµųWĪ>tŪv‰ā ¬XL/¢¬Vg’¹=៵RäŪļŪvgü”ļūV«WqžRTt«äz_HčG«źŗłkعų}÷żćœ?`žųķGFīÅ?s"pÆÓvūżęƆ0쇯y_ņMõģąņ0ƽĮ}ƒĀ7{2××®cšŅŁėńĖłūµS™bż»\Ōź€aPŚžčwüžx?8Wū›³ ś!}ƒż,įæ}‚«Nƒš‡ ÷ł›_Dü B¢ĶŗÕ‚ tr4T"NżPN'ŃN†‚ŠUió„„½“–ź$NÜBF@Zz3›A5ƒŚ9ÉČ ¬K¬ķęŪ.ńŠokԐ~CśaTm•³Ž(ėbݶŅv±SQ‰².ežÖ§ē,톲_lCÄÓ°.ÖfmoUl»ŌŠ*—¢¬Kqčāō”o<ĒaźćÆąŖ½Ŗ\RĘ5n@ا_Qš¾īs:|q)·Ÿr!ÕŒa~aUž‡”åa3Ż>ÖBQq„(÷6qŗ“óyĆkOÓgŽ×¼’ŽüBžźŃ“‘=z22æ)˜Ėįmµģ7žżļĒŲ*Öėˆ‡ü‚°ž¬Æ£*Ś÷ßž˜¦ŗ[ׯyŌŌaVöė_år³ čē@ķ¾ļŚ_XŒŠ¼(ƒ4Å{ģÜĪ|—Ėlķš6ńWėvūļŠ/ōūrśu,ėQÅĄPŹüł{ ų.žĮ}W<ĆŪnļ4×1ę“)”“üžj-‹Q”‚)ųķ—²ņšÅ¾Ļ5¶‹n•(ė¦č·.NĒVÕe]¬Ūš·FY—XÆ+Žæ½ŃŲ9ō·?Ćż¾ĀLŖe¢źĻēh¬Ļćhq’„«ž"ž”Ė! Ač¢$Ó3:&©·@ęZŅ ØŁ€f7Ņ–Ą¹]"ʲ ˆhØēøŠ}Շ3»śźÉĄä—§ņ“wx[lėrńSYwīė֓_.Óv}t‹_¾f¦Č ī¾•ēµŠDc>čkB+-g^“鸛ǀ#‡ņ}~ ż^0 ¬[Ū>\Љõk[V0Ųpڅ̵‹ŅĒnē¬`ƒ1§ĒŸ9=žĘ‡xćŽėXżūbŽTŠß|ÄĒŸÉ„ŃžKfõ>ØS0q4'żķrńć.C8óļ—²LĮæõįJųÓ¹=ä’ yüąæpwõ±įÄūšåx^øŸĆ6®ēŚī•<°[µ³Šżę#īQŠ^šĘ†;š·ónh5„žµ{o`Ęŗ•<«•ó>ēѓĻēXėN§UŚ£“‚ÕėC*ŌŃĻĶŌńÖ³„u½øŒß#ēø],Ń1æš‹E'žW»‚ÄÜ*‚¼Žņ5³“a°ĖSwŠļ“kłŻGhB?­«ś—<Ķī<‰ų›¹ /ŸõŃö™ŅŁj®_ņ-ÕJŃē½—øśOC ąv³1 (±“}f²Ņæ„pÄæ=R­ö§³æ?W+ž }ž‚ “‚ŠÅI¤-27 “mTŖSh €ō „äŚ ¹ȬaC "ā„=RÄ'=HŠa_qŠĘšaüń;ņƒšxųßŃĆ©³· = ŸæĖŅ Į¶š‹McŸŒ}ŽģmBó{Ķj«ĒĆN½8!·°,ĢC•„·©ŪD•Æ•_Čjȟž,żN¾ÖÖŻ"w†Łą÷™B7ƀ7ŲÖ}’å[ źøĀÓ李ūŠń|yż™<ē÷rŽßĖI³¦1īÆgG€V Ø±–‘šFĶ>bčÉē…5œ}…§īf ßĖ™…KĮĪ?Æękčbž\ué­m'ŌßpļŽt.㛸Y²ļÄk9bōƒfĀ",q_±%k—üb^ųéUGø/?Z\橑CW½ūīĒ/‘F‘'ŸÅž5āvńK\ä2 EōiśÅFC P֍9¾f®X<Ÿ?zKYĪq~OĖü” õ˜šŹD>;éJÖ·Ü­~/ĒĀ›Nꔀ«>.xź»äFVj.ó=d(JœŖüŃH·čĻtÄŅó‡š\šĪ"üAāž‚ “EZas mŁh ØN⤯>ԐčćœHµ=Ā1Õx¶Ķd›Ä×*Š^«ÄŁ.mZģķ±Ś¬Ö7ę`”©« K˜įŌ:`-gķź¼™½”¢?@I7^mo{€āü°SмªŖŹlX悁åyV‹uń£ź€‡Ę²Wh}xŗ÷dŗ7˜ö8ĒY÷ ŲŃJ­¶įÉŠÕ‚ļ>Et  ±žÓ ƒķŗõąF»ųdįŽĮ,x9»cC4ń°v5gø\üpćĆ̌¶Ż—ņئ™Ē³iēY·×µsń…"ń¾Ŗ t9šPցyLz€^öj¾ST’­é ˜fŒĒ܃žFCäń儇ńi®ØA‚Vh`.,h¶”“ŠńŪ£üÖūvU)Ź[Šr_jcńzłc{Ļš±{čŖRŠ~?ĶįÉMkpµi͉0āJ}ØcOf‚¦±(Zųח•£ņ\”-CĖĘķO%Žæ„pÄ?žŠ*HoĢ’’|©Žćó,Q‰ū ‚bĀf„¶éŠy¦z™hæj"F¤fŲ »ļģhmÄ<ŠvfDV2ėk[⒁Ż`Vä<P϶¹¼¢}ž€ÓL «82tÕüĒŲĆō,šĆUŻ<—9AžšÓXJ(īŻŲą¼€5w`ĆjsųŸ¦±~Ųå|`7 ė8 Ąåā»Óob~,;*”0 öŠ4V\qgģ_³ ß*ēöšŻįOšZXĻ’õ·żęė,,ćÅXÆc‹=šå›SõƒAĒOš IDAT˜ö•vQķmEż hšłN2tzŁļ‹<ÖŚ ø>y‡»”2ē8t«b²Ók*­0gø\-=ņQ)6߃ėĮœ‘šł ģ&•%ö½”}öōĖgŅ …RĮ{;ķßž»aM °˜»z=HõĆ£Ģ8«×`ėćļ[ˆQVŽ:ń ĖŹĢtG Ą°1—°­§°%ŻRŅ^??$'ś!9џŠš·ž^§ėļ’ę"ü%ņ/›Ņ ›!É“@ā+@Ē“@zē@8FšŽYžH¬MĄ"™Ł_»Äß2ᶁ%ßć 8ĄķįĆĆ/6{±#Ū4k¼¢äĆĒ)=üS“5å”a3*€`€ż4ŗļ>įŲeółöÄsłiŠNŃ{·} ō“®ē›Į’A;Š\,SŪƒ±—ō{M#/™ż¶!hŻž«ŁŽp(@^³#g8įńšeĄĻ =Čöķ½M¶ļÆ2 €üB¦”¢ūbt¦F‹ĮŃä $&¬˜żŸewėæ•½˜ŁWoa óŖ¾ĢZ¾€kĻÆ_qPį…ń„1œŠ4Ö*E•aŠ+Ś6S¢××s¹;čēDO>Óo~„’:m»ć/_޽uÅ)Ā_\Šņ€'>3šļśąMķp?Ę{ü.?é~+Å6ŽQ~€ °jn]gW€Ź*fÖÕņkż&žųøōŽa|u×dsyĄ²r…ĪĻõŠK¼rĪьŠuZ¶ˆ1żväʍkA)J#cż±āżNŃ~0’%b`¦#āæsšæE²żżŠy¢ž qA؜@6W4”l.F¤>'Ņ3+²o¬ó Åk@ōŁńĄ h1¦Žć „ĢéźłÅLwZ~Ąå ÷č?>{[k›‡›5[ąÓ¹čAöPŠī›øÆq<8æĖÅOßęó]EO¾=ö ~ŚawsHž½ĀæŻ®fĄķbQŠ`=Ą6Ń^ŹÄkŁM)¶ØčŁzś’¬)loEÆKŹł2ź÷ĆF^> ~P}½Mh– ŽØx·½śńF“aˆ®ŠwÜ0č׎¶ŃØŻÄBWżg\ʏķķgÄõ|?v$(Jš›ŁR0\¬Į`°2čcݶvīéOŠårvi¬ēč@€c­ļµŪĆÜ’ĪENū* †„öæ/³A)*õ =|3Mā ¹vŹź É/bac(;Q_Ćvо`½Ÿó<,Šż€¢ŪŌŪ©<õ'[ ^y”ķ0WĆšłW~Żs?ę]~:Œ¬«ćŃ»Æēē;5W°YŁÆźĻÕ«ó‘ä„Ęõ܏¹*dńŖEøśĀH¦ŸZ‹žxÄ:D?¤··’ļļž‚ t.Ä„ĶļjŠ9Ÿą„Ć€ō¤ y3ā ŠT43rĒhÜŌ’×·Ł…7¢ Ģ/dmSmčł6ћˆo%ŲfLaW0k£š‹ÆQōRŠ~@¾a°‡ßĻ~?4n‚Icń»\üģńš­ZĻ^ÓXüYl²öėĪcA0ȟu#z`ķró5hėĪ͇öūj×1Ųŗ>pǶóœŠ<¬ ]-|s 'p\÷>?ōoÓÉēóS{ūĢ+ąæi* š|'[ī— Ÿš‹ß{m{E€ņJ ·‹_t½ō;'ś|v\.Ö†Ö²ßśźæń®aŠW)zŅv æ ˆG†ĒŻ8Æ=óaÆę›;e :• zzKQцņYōŚ–ł5!„ķmbąuūż±*ūyłĢ÷†ÖTX>8äbJ}Ø «Ų @Әš‘ęĒ3/ęśŻĻŽŹ`ČņÅL}į1žļ°ó£·qt«D{‰.ŽĒ.¬YĒMcµRōūx*Å#®qnyˆ&śķKõeSō§»ŚįĻ…dØīDĀdŗæ &b‚$¾l 8Æę ‹“ ¹e¤«=Ąž ȦÉ­&¦ń§ 5CākX·WŠoks»łdŲum§õ[2©¤ˆµ–*zéć$¶šėК7™½ī[ āā‘šć«÷Q¹ģ[öš6°GĄĻ†Ī„Ų ÓŲŻļoŗ†ĖĶOīŒ¦Š2 |€2°vī­w h_”Ąļ Å’ ˜)Œ½ŽįėżŪȘC×[šøĀĖļł½ĪŸŻJ™€ŪĆ·ö–ƒh ܙ·ųŒ;÷Æßq³·‰‰&ŒPõŻåbU¼ŃÜ,Cg/Ć *‘ēŠÄånłŽźzŪ>zĶÅÆ¼>`'¦\t»in8¤]ä»4ė°—aKÄāŌY5īV(Ŗz€½Ū›ŹoĒS^Ķ!脼Ō~lĖdžB„Ž‹.O8]pš‘ųfæĶ™æ’ĢGJ±ķ¦3y÷cų{U?³=$Z¬’€?sŪūo1T×9ÄŗméBJ„g¢ ~h-ść!¢?]āߊł'ūųź,HcÕ_„æ 6Ä”‰ɤ 1# “½#Õ¶”9Üék€Ģ›ąœڬϕŖ!ę*öŪ ®e_„ĢgĻ/d†e8%zōcķŠ%ęõ€Ÿ>m„V„Y ųĶJ> ļ?”EŻP½œ ĄC^€K¾n1†:{(EWßn„–Ö‚¢b4šoœ¼Wž¤ßÅw°Ų]~mÆf'e˜?‚•¼jJŲŌ€fčōŠ4źļ½šCÜnšÜ…xĖ+ŲTTJs÷ž4sZD57¾ßĒ<—+¾JžšėYvŻ)<ē÷svŠĻ_ǜCķčGøŗ¼²ż™–Pn™†.—9Ó!T­o—Č| ‡5֚†ył<ēö°Ą•Ēš¢rīŗ7æTāNøóX¬MsgÓ\Ż{·ž^8 |—›Oõ 'é:{müW>ń}’ŠÜl¬ ]7E.ĒgaŁĄķęG»[té},;” ėxA×9ś¾‹øęĮ[Æęėæš&j?ŸĆ˜¦&±nkj¤ÄIų'ŚĻ鿐žˆ?äFĢDų ‚бˆ ‚#¹d„ī·¶Ju„ }-š‰„ ńvHŻØßĄń”«Ŗ’N̰nw0xō06ĢūpėŗCÅ6d3ŖÆi¬Ü{_¼l·Ų9õ&Óh® Æ0ū!*j›Ā½õŻ·fĮś[»‚m6ž°zIKüĶŁ7ņ±}Ąž»e¦šUŠŖµ«xÅŗo¹m’1ßšMšF3fu֊÷£¹Ś{h iø£ÕœŪrģPn~}*ū;śżœsŪ(¶¼œsM«Ć‰E€aŠė¦39O)Š®Sx”N©·‚2@S冎2;”Ü÷%+7l“ż[čįŹ §'*·ą_£įė89*ž|ūĶ”~…³§Ļš°¢ĶF߯ü>krŠn“oeÆkį‹Č‡XÕ}»ČĻ/ ›&Jµi[` ŠX‹¦ėf æŲLŲ«ūßćõ‹÷ćŃ@€ ü^n¼ś¾yr&oĒz÷Nć™QĒq®RfjĀļ£Äŗ/Ńh?¤Wōg"āŸ+Õ~į/Bn € 1ÉƊ;F@ŗW€ō¶@āf¤ž€čķŸ!¦)i€i Ō×¢ż¦xv»łāĘ;XnŽćsN ōß]ÓXƽ ƒ>„ŻPŽCŻŠl…ąh¹²u•÷ųŃm‹ĒĒŽbå}ŸŃ łšŪĪšyMĆ“ĻŒĀ­Ń#w`€ в(GSŌ•öūoG½» u•yńwaƒĄ­±¾Ŗ ¾*ō_O§nłRŽ’ź¦č:{éAœ÷ Ž=›«ž—®ŃBÆiHc=CāyN „(Xå°dc¼xņĆ@scdf%6Ńzó »±Čš+±n1Łą`DŠwo/šĒ€śõUźćó6Õ|‡éü&ŠZž“O­S/Čä[ęū·Ŗ?8EūϹ’ž˜Ą>J±Wżžuõ™ųĻgĆC+#«ūU}Qeݹ„®†YŽfJ:*Ž™‰ų[ūJvš?tRįo~ń/BLÄ”}²“bäž]Ū €4“ @\-;%påYģĪG^^øśQŅłhh¬EћPŻ))¦ŠriįA~QiÆv^ }·C×\,RƒƒžÖKø=z1Ū(ĆņWZe.ĻÖSŌćö0ėęœšŃ³”®ZKQć&J|µ”y>ŠŒ åĮ EJQ¤‚”ŠāAÕ4Gš KW†S ŹMćāēčѬīóǼ5‰Ū>†+Eym-“Ļ:Ž£8†+žt>µŃ«¬÷œĘ&Mc‰K#€F#ꄳ@w¹Ø Üf$ß­™-š'ŽŸG J»±¶fµyŻļ /uš^$?ėŖŽ,Łų»yŻ×Ä@h=Ą±ÕóūPe娱’dŃYGń2šsŃõ\ k€z?Ż[޹Ąœu)škV¶Ģ¢Ø½ž_üī4©’°ćńæó*ƖĪē ūļ ™:u‡\:®m[†ė/®di]Ø’ĄŠ£P­čL¢’‹łƒAŗ>b‚?0BŪ“!F¤n¤kV䆩„ZX±A†@mMKüŸ~ƒx=Zė€E™åŅZ&Į÷±L‡“€õY§œ ‚˜KF. uƒĮ†Ī6v!¹ś·–ų’źó&ņq1j=_K•ž€3iĄĢė¶o—śåįš•›ˆŸ= yĻ#øźžs˜±i-+ÅVz“ęĪ`ŸE?1tÄżm—™ p»łņęœ”Ģ±ĒƒÓ÷qąN¬žż7óŗ Ņ»Õ6q7A“ęŌĖY5ö 3Żō™+XBæĶʶŖ~A>/{½ QŠmoŗźū_ąÖ}Ѧ<śšZ†AŪ f±Su?ą5 ĶĶNāßŖī?=›Åك‘ µLSŠ]gLåŽKĒqžõ{¹L_aixØdĄ0—It¢3ˆ~H­·āżįĖJTųƒÄżAH1AHœ4.ŗĶڦ ‰”ĒD„:…TdfVdÖ €ģ„ZX±A†@0ČAš‹ļ®y–ÅmŅÉåb­®ƒRę`=pL X+ ”ą@”ŌŻp¹Y ĮŠ[·Ųā’Ó{`“'Dć®VG”9t|5 ¶Zū+Dć²§xĪdöŸ;ƒõ '(ÅVĖšĪ¤ 9~Ō#|¹½ĖÅŻĆhݦIŖÆh#ź9—MLĒ‹¹ @ÆdE?ŲD~!hK”b']g`ßB §ų~$ĶSļ¼Źu@·ŗ®\CŲē©üA_Ėūżū3ļ2Ó‘"_×Ķ€.—Ł’kJ’Ģo™yģīœQ˜Ēš?ąĖęCüz÷§yɷց„/Ņ)ų!³¢?ÕŽ~HoµDų ‚Š9@„¤Ivé@ȜŚĘzLTŖS42• €ō›žt$oD¶ TU¢ÖyZĒ5ó§I×s 2lÕlN3pµˆūŅמ§äÜĖh€Öi—‹Õŗ†Į–N­ń,Sh‘WČü€”¢’ĘÕęä÷'Ʋ•2Ģ>ų²J^ö'TTņ°ÓńDĪˆÄnōļĻü”'X·”~e~VųĆń’׫¶ ‹ŃȁĖÅr@Ń/ZĀ ”¹@0عŸėē”qgrŠ2ŲĶ×Ģß”µWȼ€÷G3ŲnļƘ—źsF~Ob3«Į\†0Łē‹ł.‹ńŠŠ×’I¹Ļo“.£į«ŁŒÜ°†·€ņՋx÷Š’cō”Ēóļa—Šøt®».ē€šīTнņ ¹ó”—[R,­Č/.ę¼ž[šŃ¤ł,LFģCĢXæø5͜ć(Łż„Śéģg!Ā_„t#€ i'#2ær@hė1Q©NC* ›f@QŪŅi@fL0—#t°–Š7Ś×l®ÉĻ²xŌłBéüĮßÄEŽĻ3'…ZZŚļmī0±WŽcŻ™GPt 4³åųč«ėģŠ­;ÆÄ­ž<~ ųA)*xž·LdidūA¬¹N^› įOf®EeØĀ"^hnd7„ŲęłP5ź¶°`ķQĮwÖ²y›jŲ£“ßĒŚ_{) €Dģ —ĘP*z @“*>˜•ün·å²ČšŸ’Ū ¾vz¬Sl’Ń×ųųÜ£8µ”–ē€ņ¦&ž9•{ßx‘UJŃŪ w“ßł™‰Šś}ożMšĻ ‘€¤śų}ńnŲlŪwgż Ā_„Ķ1AČŻ€ŌSy3ZŸ˜§3©S`ł“Ŗ jŸżł|īlĘ|œ ŅkūJ {bĄJ ”Vpkżzf*ŀ’Nį_å=9ó°ÓćźŽżŠb€ihnę+½ü~ś-ž?.Mcł­ņy¬×SYÅÜå!¹rūKćĘ10ü­¾Xū++Lģ¹ YŠ:ޚō,ó‡5õé£ųeĀ ¬WŠž¾&/óóLāGŸ<𛵔śuńæ&SvĢĖ Ēō#~{t«dq}؅¢©Ažöµ®=Ā?ó[Ž<å@]·š Jē@ _)“³Ę’ā2nś¶–—S‰ņ[$Óæ?ö|аĪŻŃö*¦H—čž‚ ń € 'SF@h›6$3' ōøØT§!™h‘©V‹T H­u¦Ą¤élŒ„b‚Ł_ Ÿ•˜ń’9l{žŌ ×uŽył>>ž5™»8Yö4ĄÓ×R1ļK*.å÷Ūf“zo±’ŠR€:{é:ż”iķž|^ó Āhmē”&øa?^| k”¢·Æ‰æ/&ųņŪą7Z%’ŠtGCÓ¢Wˆ!čń0=`øä°£Ūéē·˜0ķUķ­ėnŁ0’;zw«Lī¹ķÕücNdÉććĶžų€ß\ Š"Ö~;Ó>ä›~[sŲ’õg׌ ģ4čįqQSŌƒÆŸūo!yџŽ}ļMgGBæ·ŪļĖt“ß"Ćü ·D?ˆš!÷@„¬Ńr‚£Š9ÓIv` d6©™õ¶żdĆ €ĪcX$b Œ¼Ö9p÷“\vżp ōg(ōõ<5ū9ļ>Ļ*Ģt7+J^PÄ”ķ=ŸŪĶ|=†AĆ0ć’å­§’;„ <ƒ0ņ xŅļe“®sČÕē²ŪmÓł.r;'ó Śœƶr‚Ė•^Ąė /uŲ½GŪń‚eLŪø–į@Éū³8’ōółÄ/āļóŲÜłį§iŽDobčj§Č¾§ŽĀ÷ÄV(E]gėöDæSBe~čņä2ęAjsŅ!ų#©ÆiyvߝÆ2ķoyŽ4½–źö#Ā_”5b‚}4”b@śRžȎ™O€³`IĘ€ŌŪ ,ŠśmMš„aŒŲ³‚Wj¹A)öņ”¢æ}{McÅ’ĮwŪW¶ž*ŁZ—ĒætcCūżŗgų"žcŚfO’łc.JÖ­bŅ+÷óēȹŽ­Q„sP….7¾ęvv"ų›Ķåź4U—<ĘŖęˆūļšÅGž‘’é:‡x½\yĆ%¼vĖę'½O†Ā|ÖXß4Ÿ—^ńˆüxŖų”„ūc˜SųgS„H%¾I&Ä~$ūwē`æŸ4Ł÷~ߐĆdI—臎©öC&ś›_Dų ‚Š!ˆ BĒ‘¢‰·@r©€Šć¢R¦T“>aĪŌĢČN:Ą"Ó¦Äo |]Ć,`ÖQ»ŅoÕ2öŲ…'ĻĶŹn=˜7åsÉ5+9`ŁZPRĘoõįū=^Ż{{tĖ(ˆµ„įå°īŠj®ijąe°Ū»/šĪ÷ržø—ų!rŪ{. Ļ’yœxü»ö§l wa|cō.=˜‹ķĪæ/€uѶ¹śHÓuŽpy˜m»ŹŽÜ“v%s€²•ół÷­§qņ-SœTĻßHłgļs™ŪĶŖūŽē‰öŽ3–Ø/+gõśP@0@ļx#śNŲEž6;3|‡]؛8%ęī}z“Ē7„£jĶ8÷Ī{rĀC/³¶½ē~ż—.ä&=ĄP ŠiMćDzī\3żkžļkö'¶_µœĖB•ž Ū]AĶĶ…łL9ö4¦\xMN§R‹L |‹ŽśŁXžĻ żń!Ā_„\F A:Ō™5 ½ftœ!o @öŒH²a¤ {*aµ”}ų.ūū¼ģŒA kn֕÷ą“Ū&ńŻö»“†Æ@įņ¦>FUm =Żü>ž„7ŽKä ĮøÉ–°¤#…>tœŲ‡ō ~HLōƒA„t#€ ‹  f@&ČCĄ¢£Œht&Ć t” FG }‹Žü°yŠ~ž~A6rźdH!nR0 ū©čx3:Ž€Ü2ģäšA’5rMœ§ƒ\ųv:ZģCf?d^ōCWūĶ/9÷žAh.w²#ĀęG¦ę@×6 7 Č]SĄNW4ŗ¹(šķä‚Ų‡Ģ ~č¢$ę/ĀꍜĢ‚ŠuČ`*Ä Č6Ö±äŗ1ą„˜é!×E½;‡Ž9ľ…ˆ~©ö ‚ XČ Š ]’TRz‹dĒ €Ķǰč idéŖĘAgņń+UżHrIšCęD?d.āRķ”kŅ%O4AZȁTt~3LCĀ•ł\£3'„Ü%+śv¬ćŹ”ą‡Ī%śA„æ B,ä$I„Ķƒč|fdÖ€ÜM DŅ•SBzČÕj~$™¬ī[T'¹’N-śĶ/"üAčņČɐ ›™l°Č¤¹—°č,†€Iläz%?Łü½*?¤OōƒTūAENvAŲ|É”Td× €ģŠ9M;öc“ 7ŁŁ&;›Ą·“-±Ł­ņCü¢¤Ś/‚IäDFŗŒ¹o@ē7œ£ żtaļD6Å>d_šCn‰~jæ Č Š BkŅ`@ē7 »†tMS ="_oW5vŽo]MĢ·G¶Å>$/ų”‹‰~ó‹A„]ņDC!-t13:—!¹æņ€ ŲÉĘDžhTwąż‚  1Aā ÕĮé ›Ÿ!`!ƀБt¤Š·Øī"‚Ņ#śA"ž‚ ń € B‚ˆ9ü¹"ʀNrAčCjbßBDæ ‚b‚ $OšZ żfˆ!‰˜‚¹"ņķTw2ĮYżę—œły ‚ t&ręÄL”SÓÅĶ‹®f Ųƒ c~£ €IDATk’‹ßNuˆ} ż‚ ]Ÿœ< AčŌdŁ €Īm@īš‘ˆI[äŗø¤:MǙ˂Ņ'śA"ž‚ é¦Sœp ‚ tZŅh@fҐ>CŅg @ē1"ł-āøÅ0ˆČå;‹°¤:Ē.±‰ ~Čn•ßBDæ Bęč”'V‚ ’0 ksŗšēW¤y`‘ė&B¤x·č¬">Ŗ3šŚ:ƒąż‚ •.{%‚Óto@fLčŚĘ€ŠqTgČÄH§Ų‡Ģ ~Hs“ßü"¢_!Ėȉ’ BG“f32o@śMȜ1b±©Ī`R!ŻB’ūŠq‚Dō ‚ är2$‚KdĄ €Īk@fM;sä3±KS„V„Lˆ}蜂Dō ‚ är²#‚«dČ €ģ9S²g Ų™#Ÿ›9IuĢȔЇäÅ>t¼ąż‚ ¹ŒœČ‚ tr ©YSĄ¢#́HęČglJTēĄšĄLŠ|‹TÄ>$&ųAŖü‚ ›;rr"‚Šɑt€Eg0,rĮh9]äó¹:D|{dCä[d[ģƒTłA„Öt‰ A„Ķž ż”€E6‹Ī`ń“Mo‘ŖŠ·Č…ź¾…~A„®‚ ] ›Š1);a Ų“ 7čqo']Br«ŗo!¢_”ė!€ BW' †t¼)o DC ƒųčhAt }ČM±"ųA6rņDIAČ 9lX¤Ū€Ü5%×Ģ„\퉒n‘É } ü‚ B&č'C‚ B dÉ€ŌLȌ1`ŃU Į™L|‹T„>dGģƒ~AANvA„H²hXä²1`GL‚Ü$“āŽNgś"ųA„HäDFAˆMŗ)`‘-s 1 R#[¢>’TE¾E¶Å>ˆąAŚGNNA„Äé SŅg Xt”AŠŻ@č(ßéų!ōAľ ‚śäBAČ:а“nsĄ"WM”5é÷%ņķˆąAҁ‚ BfČSĄ"Sę€1 2C¦„½\ł"öA„L!€ ‚=r̰“ ƒ ]Ż<ȆˆE. |;"öA„l"€ ‚б(ó³Ø3( Ž6 grUÜG"b_AčhäDFAČMr8-/b$GgōŃ”/‚ ä*rb"‚ t.:Qb U:«ŠŁ|¼ˆŠA:ņÄBAé©!·‘/‚ t%ÄA66£ä€?Zųм5A„.‚ ‚btQDą ‚ B1A!^TųsSŌdĒ¢µžü8A!ÄA„L!†A܈ A„Ģ#€ ‚ ä2*śguG©ä˜'"ŽA!gł²k×-ˊy˜IEND®B`‚libwebsockets-3.2.1/doc-assets/lws-relpol-1.svg000066400000000000000000000057071357643561300214270ustar00rootroot00000000000000 All new work is done only on master master libwebsockets-3.2.1/doc-assets/lws-relpol-2.svg000066400000000000000000000155441357643561300214300ustar00rootroot00000000000000 master v3.0.0 v3.0-stable When a release happens, masteris copied into a release-specific-stable branch and tagged libwebsockets-3.2.1/doc-assets/lws-relpol-3.svg000066400000000000000000000227741357643561300214340ustar00rootroot00000000000000 master v3.0.0 v3.0-stable Work continues on master, and if a fix is madethat is also relevant to the last release,it is also backported on to the -stable branch New featuresand APIchanges arenot allowed forbackport libwebsockets-3.2.1/doc-assets/lws-relpol-4.svg000066400000000000000000000250551357643561300214300ustar00rootroot00000000000000 master v3.0.0 v3.0-stable v3.0.1 Periodically new point releases onthe -stable branch are tagged out,with backports that didn'tgenerate any problems on-stable. libwebsockets-3.2.1/doc-assets/lws-relpol-5.svg000066400000000000000000000506171357643561300214330ustar00rootroot00000000000000 master backport backport v3.0.0 backport v3.1.0 v3.0.1 v3.1.1 v3.0-stable v3.1-stable critical Occasionally fixes are added on master that fix old, maybecritical bugs that affect more than one release. Thesemay be backported to serveral -stable trees. libwebsockets-3.2.1/doc-assets/lws-smp-example.png000066400000000000000000002661511357643561300222130ustar00rootroot00000000000000‰PNG  IHDRX p‹“l0IDATxģ• ¬eWyß’ūqžū̌Ē.ic"²i ¢¶¤® ‰KJpŖZĄU›€Ū4• ŽxÅ©hIZjš¤YŠy“q±kh›*‡RŖ*“Ø@Ī#ŅČv ¶ĒsļŻūģ÷^żߎūŽs±=cļ™9ßOKė~{µ¾õ­}ĻY?Ϲ{a†aۊ?v†a†1&&BĆ0 c«1†a[‰Š0 ĆŲjL„†aĘVc"4 Ć0¶”a†±Õ˜ Ć0Œ­ĘDh†al5&BĆ0 c«1†a[‰Š0 ĆŲjL„†aĘVc"4 Ć0¶”a†±Õ˜ Ć0Œ­ĘDh†al5&BĆ0 c«1†a[‰Š0 ĆŲjL„†aĘVc"4 Ć0¶”a†±Õ˜ Ć0Œ­ĘDh†al5&BĆ0 c«1†a[‰Š0 ĆŲjL„†aĘVc"4 Ć0¶”a†±Õ˜ Ć0Œ­ĘDh†al5&BĆ0 c«1†a[‰Š0 ĆŲjL„†aĘVc"4 Ć0¶”a†±Õ˜ Ć0Œ­ĘDh†al5&BĆ0 c«1†a[‰Š0 ĆŲjL„†aĘVc"4 Ć0¶”a†±Õ˜ Ć0Œ­&»Ć0ŒÖ’;v-Ź iŽK_vbģrŒ­ĄsīŽ±k0 c»¹'†4€Ó¾B“!+fXēxąa¤k\qIŃxŖ0†1Ę@,H–@-”>Gžc!/‘¬qr§öp߃øę¦Cćģc"4 c$öb„¼„Ō|-ŠØ +ķ T²iŽŻkJ1Ēżā”üŃ}x÷ƛ³‰?v†al'cd1¦Ć Ø[ķ;Z߇ļa:‘øŖ1Ÿa1Ƒo»&ūĘ…‰Š0Œ§—c,€PƟĪ|n°`Ō;@Q"/D2Å”ių˜M0Ÿāg_k.4Ī&BĆ0žFīS wžsź?§ tż ×4Øx>ŹŖŸ< QÖ}įb†+Æ0g‡pģ ĆŲ&¢Ćl“Ƈ Ņ@Xך=T<E)+Ž…sāȚ‚ōcŸÅøPšĒ.Ą0Œ­įŪ1¼ īĖÆ:dA¶¦FY‹‹ %]H ī‰[6aēĀłĮxģ#&BĆ0ž.|µą¦K Ö`­¶4ł±U„Ų./q*édł ē3Q曾ž¹Š8S± 0 c;ųćsuž§.lT‡ķąĀJś†1 VČ”(JdņėB®Õ…M#.œ„xhgģsē?&BĆ8łD,} ēPTbˆ¬ĀĪģį‡o81vq§Āk5n‡¦žėDŲP{5vłœ"ĢK‰©=\*gĢ„ē‘׌V\˜Śfœ1žs÷Ž]ƒa§Ēķ1f€Æžp@CcˆE؊$īe8¹ĘnŠW¼÷ÜŅį©Ļ_zѳ#„ŖĆPčōM/ĀŗFUIåō:É©½§v‘•āæNY†‡vfņ:’«žł \öŻøžßž[ē5Ī/± 0 ćōø3ĘŃA!õ‡S)ś}C;2‹|āmńĪ×Üx®č!:‰³YüLż×jż“`G6bĮ=µ`Įi*Ā.Ų“`ZĄ9ńGŚVŒxÉ1„ ʙ`"4Œsžß‰Å½Į…zżKzüˆfi1`R"šāW_ßunśōų:¬k)IäוŪō­nQęIŁ MQVČ+ų2ZęÓęō#qa½2Šž#PM>ē»1±kĢ83ģdē6Ÿ1|ķŻŠZ}lQ7pmŪ8 °˜ā””ē\ŒŸ¾"ž;Gv!%§'s=BS‹°›U-¶ć§l-čc«Kä“]Ł /Ͱ.’N„m$‘iĒ",—«ĄG“÷pĘy?v†a<6Ÿ‰1ĄS‘ą@~‚źŠµāZučyżpZ d|"šćo]{Ž4IÖė„Ī£ŽÖkŃwÓ>X«šØ=¶uŃ÷k5_7™q’‹Sķ§!<ĖiĶ’å,÷tĘłN8v†a<’õRčŌģk j+4-šU+¤*Š;)œÓq:RÕ8ū‡¾“zĖĘuŰŖVk¦¹óe%ŚĪ2ärŹ’",U™Ց”_ļÅLĪ-±œaµĶÆ#ŸĪ8ßū÷aĘcq$’~ß‚ĶŠÓ‚•аQ‹ŌāŚ‚=ESTżō}¾Œüč‹āßłŅ‰OS745Ž’MĒĀhĮŖF]ĖBE‚,‘u.,Ȁņ#‰Z.ŒfāæhµZEši†q&ųc`Ę£ńßbњSķ5ƒ’źĮ‚Żc‹Š.¤Hųž±īWSŠ­ėÅćk¦×_}Ŗ”¼ŅĖJ//¼¢ōŠJś‡÷¼S»Ž©ÄŪŁóvo7õöŗ~Ż÷lĪyŽ/E{/\}ćĀ!»Ć0‰ŗ«ŃŲėµ'­¼Ų Ė{ VŖ@Oż——ČhJ +łiަEķĔ„cź,±ZEc—`\Pųc`Ę#ųO±ōĶįV ¬Åˆ“`”¤ 鿢RzbA>®9Óa]Ø uaƒiˆ^}6Ć8ēĒ.Ą0ŒGą©ö|*æ})Ņ‚ōE(žÓĘXXŹRZ0+°®d)ć¶Eš‹'Ŗfģ£ƹ‡‰Š0žnŠÅd¤EYˆ·źŖĀĆk|+Į+nŗŹ(æJ>ZW"6Zp=ųļ@~łöū¢·`HĖ„Ÿ†’g5“vdŗpģtvˆcW`\(˜ ć¬rsŒ zæAå·iĮF:×öō=”:’×hBž¶ŠĒ›o^uVˊ^{™>öŚ+‚uC<谛CÅF³¾]ūāÕÕ~õ‚huāŸĒcæ¦'€7vĘO8v†qa1=lĮ®51-čD„“ uU5Ų+enVé‡N). pķĶ«÷½.ķ”I†«”5ŠJō™Wpœ s•"ƒµ*°Wc‰¤š>’–H~坏¹ÖXMqĻ/ŝVæą^ˆŻ Æq’)üäūN<„Ƈbīhš±’S†1`"4Œ³Ē-±ü¤œŗŠ śi† Ö ‡ŃFEƒ¢„q.GhY”Ž |ųźŒėn‹Žżš“ĖWEHq–ŖĆ.ØØÉFLŁÉ•}ŪJ¦ŗcS]”t…™ĪœpYxÉ_ų?Ų+šW^(•Üy}|’.®žµ§V‡ޟņōčĢg£k\˜ ć,ń”ĖĮ:­ŽģĖo?Pu‰ÉZT5<y#RģX«[••ĘO)¹'Į-׫ØTĆ,Óś&>ź@ŒĖķVSŁń³_ĄÄ«~H¬|ėĻÅ÷>Œ·ß|Ötȍļ;“ē– ćĢńĒ.Ą0.‚A*¼^?Œ+m:Ņ4Hr!-H’•t!DnžÅWžDŠ?‰»T‹ć@‰åÉ÷ݳ?¹ƒūĄ«~īÄÓōM0ĪCL„†q–h7‚`° ,ȋ¾Įn1ųOE˜iQœ Q GZuaþĀń&Įéī’Ž×ŖZö-ŲÉĻ &vż kÅ|>«kP5(T“ܔƒU+v\LpĖļāŠI|<Ā?üń‡~ūŃ,ņåøĻ¹üs_4–š=œø9N2|ė$^ńOeaü¼”ĪzxQ•ŒO§RMÜL°ZHž?7¢V?’õC:¤äö¹žśŌ5‰§—™¾Fų˜ĶäDMƒ£+9ę'oŒ’äAüĢõ¦CćQšĒ.Ą0.:ŁŌz§×CŠŌØiĮz° jÆØŌ‚ģ5X³/% ø.±˜"-x}™üŪ_Œw’w¾2ĀdƂķŠÜącõM«ź]«ƒėVŖ",C|ķd;nJ’Q$·żwy¤œĆU—LJ6»+–6ƒ4ī8ŃČŖ0s/g˜OpńQÜń¾ų#׬}޳¢ļ}~„e?_śP3x½§¹cØā“†ł«9žā3£g®¾ó |šżé{~9‡§zM“ļ3„²ÜiNŌ*ŪŃ%nzW<öÅ81ĘY iķuĮ C§ Ü˱SØÕ|Ņ×Ŗ@mS čö“`ė°¢f82Ć48 fŚ»A~x„µ6ŹÆiQ5R­LēźB:ƒ›ÖlˆiČLĘ>‚Į…_q÷ Ąīņ“y½„\ŪoNŸĶ('ąX„w]üŃODī²GoÕbp! Ōņ¦!¦É0ŸII‹)¾ėžyōĄ…żGłuģ¹CĻĀŹ=MĖ£U5&S,fųĄ;ā7’“éŠ8D8v†q”Põ]ČL‹P9-ŅR¬Ć–7Č©µ`¾iAšÆŌž%ZJq FtdÅ«<š1DųĀ#QćdyRąĖ§Ņżžå‘ˆ¤“Į~ßnX}#ňõ_ӗDÄ͵̒ݻ²uĪ’ŗ Ļ{Ž8ž¹N€1¢ŽX’ŠļÓö[h*ģ{²–É©¢@UD„ż³kÓĀĒ,d¶_¤·akĻ R€¾±¬@£ƒōā|‚g‹¾ž§’åćsƳƷ™§³`WEØ gńe%a(e0ÓF ü?~lj±æ1ƹ‚‰Š0Ī”»®»ō²cŽ×.qÓM+78œтŖЧ xTģ{ ҵō҆€Rlõ~÷Ź$šą_^ ?ō&U]«IVSDӈ“HeIƓĪ}ģüÄU(”V»°j†SDĢ,fšw6ģĖŹ©"NcĶ¹–Ÿüģµųõ›†-Ś-†§c’F„ˆA?Æ»*u3©*_§óeŌÆź2lxTŹćk)Õ^uŸŁ˜6„L¼‹DŒa_ōī…:¤ā=ꩉ»O[=H­^ĘqüõĖćĻžOs”!˜ ćŃxg,?ŽVÆWŽ”5RzKū‡3<˜ćĒ>zp‡Ö[WōĀ‹„ŅóŚå ÅP©QŹĪ:uoAĘėĪ…zõ³Oµ_ńń>ņą…š\g×A9TwiE·n"ÓžźsÓŗ€«1™«,;7ģĖf°`'¶’†Ó ua”5šq­:dOńˆÉŌü“Lśx §užė4Võ#Ü„ŅĘ-؟BsŠ\Ղlé ŪčŻZĆ÷1ń1cę‹ .īü©ųžWkņÖy»¦¾Üėó‰ˆMtČŖ^<"!ź§udŸQ?eļBń_Ł»żļ½ł^On½”ŌhyŖ[Śb¢Å4ź‘% ”¦“ļ,Šö•еF `EWĘ BĄl;3MWFZˆ~B•_Rˆ šÜ¹$¤Ūµj²ĄėeĘķ‡WžDŠN¢ķ”WŚŁYåjkŖK‹,U`y)öŖŒ™™§Ļ‹įU“VnZŻ™6õÕ啮ŅӝÜŃT:‡"|łKāOžÄŲßYc|L„ĘĮ›Ō^-Ké'¼‘õ:&ųŗųd¬ÅæłxWŽ —Źķ8Óxß:LĖ{œ&š„ńvžr5'¢)n}u|o‚—æĢ­[ć“ µQ;¹Ö[øz° ļå\Q`uH?÷-ųéŸG6ó¼NŠ»ŽŪč©×wś44ŠÕŪ¢ŲKg³Ø÷ŽųU§ĄAĘbAÕpēć)†»W’\NﰚāČLt»œ`/ĆÅ+q᯼ oyĒ 1ά|&śQ“Q<܈%^śƒ)ß ö›*p½›.瑬ķŌU«Åõń]Uƒ·hĮ¾6µr'0j’ ’Įk£Üšögō“ _óh“TźæŖģmŚ„ŹsÉ#نT†Ńį]€aœo‰ńÖXģå7£‡)½„=Æņ£S‰?łŹųć??fžć¢Hœēžó÷ nØ(”VīÖNELĪĮEˆO}9zŌ”yķ±Wj«ŗ¾õjm ›“¾uŅ-ę¼ßś`¾ń»ō[Dń})€®e%—LR™38@ įvRöNÕ"ņėZ՛OśĮĒ™j˜>fz1q! / 9īkLŠéwÕ@tO>88÷ģ›Œ“˲߮«ß ¶sU]’®ę ƒVŗŠA'0©¶b:{ńmS`Ӊ³ģ×öĮвl°`—jpa–kŗ’D';2ć7\ż 6Ę'»Ćx²P¾~…;Ctņh“÷t€×·'Wjśā'ŽńTiBm³ŌŖs EŲˆÕ µ`¾iĮJTĒž–JyEŒ[¬¢VS¬føś2Üö5ČćL_mƒl']Ģ¢}õŠTźC&ļ–xÉ ×zR?¼Ęī­aßßM½µŚK +ŗ  K1SĄĆz9üā/Dļü„T|ģĒW jĮR3ŗ–IöS‰ļ3‰Ł3•Ø}ģo±q.ą]€a<)Ž‹»ļļ¾6ö/[Į”v˜śŅBĆ$ą»fxŪ_ŠRżrŒ`H²™§=˜Ā‹Ų÷%[ēBN¦W茩—GOu{ĆoEgzØłPFŪ·ŻÆF'æ}óKQ_E[ŌX×ā_­œW®l\U»ŠsM)ĆŃ Õ†šźCę[k£’ś¾”³0O”H u²DāUŅSł(“ČK¢ ”9ĄiŌO„Ė„•jÆM“ńE‰łB,č“ģ~I!*ķ%ŖLÖ²DüWŖ½X”Ś‹}GJoņ{µš’(ļ)—bŗJŲg“)——‡S© Ł“,S²ž$병0ū›lœ˜óZŠWgģ+ßt"¤*źe‹\/жķ„5šĘ© oøōĄ‚›*m6zŽ×Ģ֊J„5ŲÓ;Śé.l܂ (Å·Žžä]xė?q’ÅaqĻjqO4æ7šżæčĻDxĘĻZၯįīÆą+_Į羨•4b‚z+ø­ŌÖŽƒ2®qŁņ‘ ÆCĢ·aA ($ÓŃ«©ō”ŗ0šĆ÷0öQ…·—Öy/æN„ßa2Ń-ضė,č }ŌU&)µ“·īŻyH]jAėN‡ėLb±WÕBŠdܧbĻÉ“é!× |¤łÄ‚ō_.Ė”ņ[ē¬å5Øö÷¼%ū mŒL8v†ńyk| . ņcßźK5•P9”ź3§® =±£xĖĆ•Ļ?ł£N?B»!æ.ąˆ*‡ØR^I)1Wä¼ß!‚iu<šEN¹ī“Ń»_‘>Ń3}ųõĪyX<ø’‡Épbü™ź¶ „?>Ē—¾†o„ø/ÅKæ“;9fA’źFœM13Øõ%tÅóą÷Y¾5V½ /‰°d ^óbļ ÷GŃ,‰f`;²Z”JĆ"¾ĆJ_Ōn޽ ;kyö!“n=įk×’”Ó7)j ąUšZG‹WuR „šŠNē…6–Ä<ķ*„ĘJ,ēx`§—"_5vdŽiėxĢVM,©4CW@Q yŠŽ‚”īŗ^ńŃ©Ģéō?¾ZJ›c„±1ēŻī†ĒM‡µ}ĖØš£•Öy«P꼉ŻJķŲāų/ū>ó&Ķą¶igAfØ4‰ęįÕ/FŌua?݉E(ę ~žób%;†Ć‰j ‚įhZŻ$Ą‚•š<՟]ā÷ž/^öäÓĪĮy*»‡ˆ¹;{ŻY0U4˦suaV‹ö:RõČ>šbudµ Aåy|ģ.|Ļq9²bü¦«R?LĆ6ĀQ)2d‘Tš‡‰łė“X§ø’f%½Ér[aŚō§`U|łSČÖüńŊ¤µž¼³ ƒ 2H‹D4Ęņr$‰ NBDóÕj? PŻVĢS©: –ČÕ ²œA.²<į‹„8%k‹ąū+j5“[p뱯€q^ńÖų7-Ų “ ·TššfPØK2µ…sā­ŠCąÉ§M§=Øj6ótBUłuĢÕ©"B^åź*¹Óy·rGZGļzīõkŸ‹ŽųCééŸéƒÆį•<˜økž†•|OOéŌs>‚Ó@2 𩯬¾¹‹·_‘ģgc=RL£"Ō²÷ õ5ŠFUQKæ®Õ7*Å~×ožHŽó†­Źō\k ŽM¤0ntt!9ÓŻÕC;Ą"iÕÄ­¾öV_gīfZUŻ[PŖ¢“ŹŽa¢®Į‚ģ©«¾/±œĖ.Ė)–A²œ`ÅT,*ŌT•¦Ŗ†TÅ T].}¦A&:”–I%žĻl‰k°œż­6ĘĘ»Ć8m®„ß0D«±ö)€Rƒ¢SW+öā§¼ė©CN§j‡JÆžWH—³}øłŻ8u7ī’C|żšÅÆIɦņ+R6|\« ™!„K’Jģ0}ÄOźó(^Du¦÷æ*£ģÆŚ¼;P£ˆVuč Ō”/:dd‚w}zõŌ¾y–?Sóyƒ;sk%,,šäŻRuŃ ó ŽĪQķ­~嶕XMÅ&*‘dƒįÕu®’9ō“ޤ:"żpœź¢Ģ˜ÓG)Ė÷ūaĒæł‘Ō0½(B„öÕ­Ķ¢¬ĀÉ\’|c\§\ņŽ+£Ž.ūēŚ·»dŌ1µ µ]ėq8™Ł Ż”ƒž®ųxĆĒW~uņT½yčŪ:1”×§•CT|ķ4"ė E‡«žÅæ_½ńo'“@Ŗm[„!źµžƒŹJRTČK‘YĪ—©¾<ä¾U‡ƒ›#ŠV^ČĮ¤ņ”„¦*†T*Z&éó .ģŌH›.ēXŅ©ŃjĮ Fž^£3ˆš’³Wēі$w}ąæ‘™wĻW]ÕÕ[µµX‘0m“€°Ę yÜĢŲ Ł RŪGXKˆE lĄ„F„$Iʶ„Š4r# ĆȃęŒełĶ€}Žį ĖŲ²‘Œū uwUæ®®W¹o1ßß/2ļ»o©ŖWÆŽ}÷-ł=QQ‘ł"##āŽŸ>}ŽvŠŸ1M]žŹXFņ`ŁĮ×AtXŸ Ŗ.Į„ē{ƒ³CüĮgńxŠĻ{† "ćT:`)L: Łųæ^ó€n‘šµQĖ9;°"nåcHĻg¬±1ūšæ·Ą`aQśČf­“‹4ipV„ÓJ‹•ž"*qa¶”mŸ ō?ÓˆnēŃ:Ķ9ųžźU PņŻÄ(49$’šżį~sÄ;5?‘X8ēWDŗ U¦s ]…Ņ•#J\fB— ff榬?­¬R_Lj…:ZUYŽ–eųŪ/7ļž…vœÖB…p:›ńcźżė3·ź ōé³§ ĻĢZöź?ÖÕv7ŖĪ?…0Õ†Ō¤«–3ÜöŽ—ÄxY ž†īąu?=ā­•+«žő@ļO}|ę[YĒe;`R⃯ˆžæ›”Ærš…a OnxŹ* ‘xÅsc¾ŗHćæfu»°@+ž¾…uT(ź*:§×(“B‹*õ†¶›e·mž½ÕݟORߎn»~"õ*eQ,ģʉq½/ėøs ßņSįĪ!EĮʰ”µ)+SÕ¦nL]›Šµ•vc„ģc²2”Žö³’rI_Ę>'-=„}ŽIš®vHT ZŌ<ūpµŗ¦‚BWWó¤~ė—ĘV­ŒšåNłīԵЖēNv‘Ņõläį÷’’ö3ˆ®FI$iŅč}/Ņ€Ļ؟śˆ{PŅFcŪŗR­łr 䯆—qœGq;»°@-q.ӎ*”\Q%ĆŹźŌrŅhݘµKßõÉp)›?‡ŠźĪ³.„¦ÄÜyĪ{Ulŗ«j!§ÄR*œćĮOg2ZŹ*ūœŚōö9©;óŚ‚Ö [#&W£4™¤Ž£4–:Ń;ÉÕ(ŽZ“ˆĒ÷}±(h{JZ#ō¤aӈĒ=M‚ZEĖFøŹkäDKk”¢–GŲH“Įnl’Ą_Œ¬Ä9å4r$*'“™ZMŃĪ3’IĻųųŻcŸś:UpLUÓĮfœFn4mø “+£^¶Š7²³ÕFŗO&³–C…ķj!3qžåj”¬N LŌB֍īĒēķ|9»_w˱‚ųē,9½JLV -„W\ iŠåŅæū‘6Yś“ś—,’+ڧĻAÄdQiį”ĢӘŚÕŲ(7ĮK]£\ͳ” ²ż/Į¦‚*P[ˆIe ļŖ@z%øVŠ Y¾…Ń›Ø’æŅ3^žĮF( Ŗ‹¦cÕ4®čŃ\·ŚQµRKTą¹ÓHz×ķ_­“ÆźīhI D¹`œ«čĪæTE㕾-)c‡:_xxųčo‡æū|#U«‚:Úū  :§ ~œXŁvēü9«Fē²cC?ń‹K˜ŲAd}ö”Ņ =9KkjÄćÕ ­ĀJ“ŠZj1Ck'„cņķIeń5:üęÖb”·Ņ¶r(ō.©šŌØĒ|{Ex,ƾL@ī­Ńi*Z^;`TŹ8%ēF3ŒÜ *}„ńµsWŠ’fÄžx–ėBĢŽM˜++9¢;“]Į3˜ ĤƒĶ8čV¤µ€ŲA˜+{,\WVįl“Ą4Ēdˆ'ÆJ»!œ\²/å_’»šæ­ś«Ō§Ļöōö96©¬ųE{„@+Īł°•SŠØ®¤ģ£ž99ėTQ „iYŌK9$®NVZ•iCFӚY+ĮļÉl³ē™¾ėWŸśśHDrĪ-¬Qsžu«`¦ Ī*ą{kéĀŸ­0`³‘n„ Ķ’Ä‘Źž4KSłRÕĪ’öqga¢²ēÕž$¤‚įkĆ[Śä0œķ¶õ트jΐž ÕNĮBgXčqJ¹“eb¹lu¬—\>]$„»Ų¾źLĘ«žAŸ#Ā>Ē8YcH…r(†Y)¼Y)l,£oy”µ™yń¶¢Åžˆ’ė8<®sg*¢ŚŗØT„O85-F¾ŽŹ™Ŗ„Öłäķ€|… e=ƒ‘ -“TwÅBåÜ÷¤’¼3uɜ…T°līd!Ь¹ŗY%1īš0[ |Ÿ‡Ü?ī­Ī°Ģ#°jżc›µ8]Ą²”ˆ"½ldœX”‹ ĒGś«žĘōé³[zū×!žĖ{ŠŃzĪŗK‡b£ŖÕRējO+6¤&6lhĶī‘œņŅ™²CÓQŗÉjÓ²ZTŲ(:ŅŖvؼ²üėl(—VAmQiO‘i4ŹaÕ)Č·³&~Ś€³PdƒsĄI€p?¢Ē0¾ė ·ŗ*dnt½¬dQ…›ē©fΉÖL’#Ī#¶‰bS`m‚©ĒŪaąo’XL÷įZ¦ćĆ}_ŸćĀ>§ Š“œøNŹU‡ lPY9åėNĮLÉt ¦ ²ŽkL<Ėeˆ[küģ'Ćæ’åń\ĮJUkę V‚£Ā•BÜ2Fl“š„2‡Fdg’ć¦Ń)Čv¢Ļ¶5§QŹ cUžM˜u5E4ć^»„Ž’[ ß[Õj”*˜kÉøŗEµAÉ!·‚uœĖ³CNi ĻĄ«#å°OŸ#—Ā>'?uĆSX!“L#‘@k­£+‹"²‘6BݲlWG9²A˜tZĄ7}Qjȑ9>‡Ņq}Ŗ­ (£)f©–$JĢ{:G£ņ±­OQGŽO9a¦īųģO“‘(¬cZQ™ž±¬ 'ōu 3:ų ¤p„BX*“Š( ²¦ĪBWēB`œ©…nŸa6Ātˆp„pø9¦Y|¹ńĀp¶x9Ąŗ¦ćƒß«>Ē1=„}N~(–UüĘą9 JB؈(”/oŌķ&b©…©“Čń‰4"‡l³?6µ£į, x;M­})=„}ŽGXpp$}b©ĀBKN·ćĢÕKūšFc„X6 õ®įƒ¤®Q–Ā* ,t“LEĢ:9ą.cœÄƒ?.0¬z}śģ-=„}Nl&¾ĄsąŹDWć飣 ו”‡śŗĮ :$’Óń.÷{²š·/Üq‚Ügoé?ņ>}NfŖz³WĖ|“YõRo-ćĮ–ĖEŃ»x:ŅĘ'!ĘÜ«’?°xÓŚ‡W=Æ>›™ –«žÄ&+öł 9Vpö.ž†ōź±Ļ® źż‡z ™_ž#óŗ?gyöŚe¾%šP4ū|öE“œK…²AZKŁ(5x*ĒļÅń vmkŹ-Ķ,ŌKĶlt0ćLĒū|pŃÅÅ“žƒ<¢Ł•·°mėĘĘ|7p©ūė ·üTĶŖ'±ßü¹q(æ?źį–ĄŚb `{•…©pŪ_4E~ūŹŹ8œŻ„卻™C`p9ł‚æž©ż=øˆ"zsśOīČeW»?mm§‚ZæĖ˜ļ.®zG="Zwö°ß~_Āė^MBÜLŲš0Źy-“dƒüüé,®šĖżphp$Œš V=ƒ%§wńų¦’Ø)»ņ¶ØŚÖ<°Ųǘwæ×óŠ®O-Ž“öĘ|ųäuśŸųŒdÕĶ?å#«—;±ēž įk‹<5ZÓBo³¶V’·”F>āZźŚā“ŁlšÉxzk™ŽnķńńŖpóé]Šń̊'šc_>C ų¹™Ģēcµ4m³Ö©ż+aöͰqρ™­x]²ņ궏«œm’­ņķtq±¬r*}v¤‡p’1f¼Pš—ݶ+čxėžŗ½’®¶YūNąeךÉā€]īŽ“źź³%?ō’üŃł‡®ÖFc„ż«-ЦķĀ6äsĮķ#XļØXøk’|Õ3Ųs&ćÕ¼·GńH%XõŽ_Œq_Ü׎ĢC­ms±Ų0ęļų»ß‘¹„ēBžŻM@ś/vŽk’‚1®z«ŽjĢ<‡•ļ}ŃL~mfįÖ|¶»šųå Jm˜®u <Ą3xyHnrYÅoĪaÆzyxĄ{»æįž×Ҿa#ʕ÷žåOĀZ¶YxįŽžX>ģō;¾=0ģF‘ÄŚ ³p· ųߟ¼™©ß6‘õŸ-{ÆVžćt°ū]Ćvõ?׊Bš*+ <Źr.1Œ]’ ¼r ¬~¾ńŖWuģóą7ăü~łtĪĀ·˜š—Į÷0`:Fü[÷?y—.ćÅÆ: ]z?żoÉ\Į=öæ–[s­Ńž ¼ųŽufĪ?¬Å…‡ąąŗļw‹zhoó쳬|ļĻŚ–ķ źzSÄŖAŃu¬AŽHiŸ³Ņ‹|O/ĻNfeuΆ7żHVՇœÉčyūĒfŁJŽVj£Ō? 0¬QQ×8¢¬ń’žĖū{/żįq8Oļā!¤ßÓĶܬ‚7•YūWŒłŻm÷®;Ęlėeq£wžŽwģ#kV=‰.ßžĢ®µ8%Ēa£ vmśWڼFQ·}Ó Y-}“ E\”¶83ūģ1I¶åņ§ßƇ«ŗßŠŻ¼ō|žBåžļa4@8Į™)~ķ}÷’·?ĘwžŲ 8œ§wqé7±Ķ2ģƼNĪt=R)ÆoŪXü ”Ąß¼n’įRvźˆ%šDŽ#µ™Æ.īØ5Z× aWhas fŚ ~™ÖLZ ‡Ž)x•uƒ”‡{×fOŚåN’EgC±„DĶi”ˆKldŅøœā7W½æ’¼MŻK>žˆMgqūć0 5ōƒØŪOĒ3š<ž0åv࣬0bRįģ¼ć»ļ’Žw­ŅĀÅ,ŗŲ£øļō'Y†‚šQ³­—åõƲ·ļ±³ęT@x ā¾M×vÖŚ˜+Hłj䮳ņŗUTŪnŒ¤’ŅŲÖĀŁ’¾ßö?ĆÆĪŚ©¾Į¤ū+‘ą:^|×,*š;—ĆéŽļ5d²ņĘ~üĆTP^÷q4Ż)Ųtųòhj…ŠCQJÆ }Žįv‚o’[÷’̇Š…ó,¢ˆŽÅ›IæS;üšU4vq£歗7_pŪģ©’%—/pR®l’³7ĄšvYĀf÷Ōśc²Zó²BU!+duu-Ž “Üp~RNGąĪsxš÷’‹_;r.¦wqļ9ķ[³MAk6ęnųx+];³m’ox„ų[;’,š÷÷V }DVĢ`j}a:£: ā%ļ«äKī½ Å,ĶPTˆs<}Uæžčö <ņŪBŽtK›·}ż1‰ķRŖu%ƒpņR åfd„īEÓH®”7æékļ’_?ś©CXé2²čbāi_?cķūöż¬1mj97»żµŚpž96źMi!,­Lx>ēa€¬=Āģc:Äål)ūłö7 ¾z æ˜zfį×}ūyµ ĢyžģĒWd›Ī<£«¬čwæŌ UŁ)XʊøĄ,S]k*gØuŲžž×Ż’£ļ’Ō!~”#§ŠÅ“æĀCĪV Ėu¶~׃Pm«ē—Ö~¾1’qÕ˽¹ģݼ›ŹŠN®Ść­ˆP"xrņŽis&„8/$Š×¹„•™éBŲN»9ćND·Ži }ī!Üś ž¶Ēž‡`ņ›b¬¼”‡;×.>ń©łœ=‘ą1ކ-">ņFīŃ„s$¬ į.É*ē\Ć÷ 6Ų=w.U™¦e2aģϰõ·ž÷’X,?7O·?¾ÖŽōd'u.õh b†øpļų'᛿/’žóƁ[—éÖČ_*÷µć‹y`…[“$ón˜±ßZrDr„4#ßzŽ+…ņUZŠFpbRõĻē_Fó”.Yą0v"V8?YB įZHÖŽž@,Ēŗ( æ;ā} F¾¼‘īNœĖįijĻ-T?÷M֚N7@£—N ÆŖ–AØ]Q£ØWŅ`Ƭä/¢]`e…I·Ž gfWŠ¾Ēbc° ™Ź':°õ>'ĄéquĆ¢ ¾ń‰Ł?ņ–š$šŠ®Ež ŚFČŠ āĒ¢ „„X“ļL3±+Ry-äżąō 'ŅEoÕ8!Q‡¾lĒķāFņ—żµ —šę›yķĄ7ī¼k̽['¶Üš‡±³,ū„7‘½Å¤bI/¬¬)­¹\HŁ([Ģ"Ż”øźāäר»ĖR’Ŗŗ§¦¾ā’æŠLB3ł§÷"įėŚ)hŗĀÚ2၇8ļŒ<Œ9Č÷…³³ĮL{tœøāØ“ŲNĮB-kU°‘)‡ą­ ¹K•¾‘R[é°Ģ~ž›FŃ*h:”ėn¶nĒ)œEY©…µ4ä6Ū 3Ÿ˜ ń­oŪ_äÖRQĮRtųeÄ/—KŹ—iķäųiŠ„æQ*˜ˆø„6šń”½’Ą¾:Ē0GōW“9 ˜™|%š"ą}ókkļ6ęÆūȖÓ׌/2ę·®Ū’­ż’¦1tmcręu >°ŒėļśQHÖĶ„¤jDµRŪ¤%o–FNmq„FŖ¦Śf±zą‹ećŁöq|čz`K[l OV,z(= } xˆÜ5å+8Z$¢ĢG€2c:i8x!ŗT•ąW(3œ!GĖČF‰“ltF¤„Į$Ą ĄónĆzsĖ»6уjqzM7IG āĶéQ_RmiĪ'P®ų§s!ü–šW’i$BņĮl.k)ʈ5å“ĀåPĮ\ź¶Ø‚$0ĪŠT°5¢4“:p*%«Ī­śkuT²ķ|øpDZńåŲLōš3§eĻyģøłō^F[ųÓ„]ūw¼mėĢüöℯ=ģM稙G?|sĶæŽ<9 Ē¾ˆrS! Å­ŸŌ+Ļ6[0 “"AŪĖ ®ĪEž›ö=æžÄ7E⊠^ĒL”7jÕŗV¶UĮÜYQPŲVŁ=)ŌĀ\,œśŅ 7‹y29O•+Քh•„ E~¤2”ąJžk- łÉuė-,́ķęF”«V릑Ń*-„"Ķه‹%`ņĘFn<šPųńńŽW؂•Ö9ŌW;9“LjQL‘v*%Š¢§³ókdœF0MWżéÕ#īĢŽaĪiŁ–ģZ½m[ČćĄĖ€OīÖ󁝽­}Æ1ÆŁõsÜ£‚G ¼}gäĖa}Ŗc»āhw»” ś¦• ¢7šxL«#Ūßš3į/æ!jl61 j:AÉUŻśē L; šA åQĀSČćēgr¹˜Q€æögóVYˆ.䊿ŸŽńTŒßųÓѶ=ņUA,,ŖŃgMė_[Ō?ŃŚČ —ŅČ UŸ6+„•v`·GŸ8ųā9«Öcr˜; ! E̵V3*Čv…Ė©€:`Š=„“ėĄ|v”ŪCĄ#Ą];É\ŒµæŌuʵ‡msJĢ»Tß>°rŽį?µź¹½ŲĒ”§—ޱF,,…Ŗ $cģ˜R"Q‰…ģ6ąĮ…’āoG|°ZxP„ؐÕņ`®fŠK«`Ѷ9fTąj |L‡0%fĆpHó†:„Ī`i»D²gDb~“žQ€| ńžüƒæ‚מ‘Ø <¾~žµ”å5Œ„‹O¹e֙–w’eŚfMÉ8$#]Gēxy9Ö©V‚.W}yCų¤ĮäjŹć…ŽS“‚ꣂ‚ź_Ü5īø}jÕśÉͶ3ķ\ģ!<Ąģn›µo1ęUĄØ»ńš­}ųZĆķüÓ)1ļś¹XߎšŒnPėńĶCü6 ædņ„Ķ9mY®–ųĻu|Hļ®;«Åu-§üÕB0#c…J–-XČŁ²Œ}Ń«Ņ-eHy(­<+ *„¹:*—ś¬SHTRKé–oWÉf#LHćh¶F±ŒøäéÜŠMÕ5­¼Īóäļ$3j„ĘA \MFxļ?ĻßšwGņ7×_u‡ĒÖo›©Ģ°P恌¦^yŽrx9RubI&ļāżó>>ö‰é_żĖ‰›Ÿ-+qQ–¬46Ü=æin—šnĀóLĒ«ūŖ²‚‹=„·cīÕ’[w…ĶŚ_ŅžķøM{óöžõęvrČsœ§Xn ņŠ×.Kzõ›??6ŒE0 å°.1i0ö0 0ńYϐGŚŃ,w šķ„VŲņĪæ\-ĢŌ³TæYœl¢¤ńˆ‰ŸŹĒöüŸį÷}UT* 䁍v%Š)Čvā,dM’JÄZ‹…%†@HūX‡,a·<;ŅÜf(É|#å“A Wzq3=Œ‡Ņk<Ą›Ž1}×÷&ķć¶[ §M±ŖD¦W¶ :9·¼ž:Ó¼Żž4“Wˆ…9fcLGbmŸcšeøŲncʬ­Ķīl‘oļ¹{½yK‰]īš?żāŲ O_Äāü}9¾D…‡ø/ŗ”ķdÜl–ĘaÕ!ĮŗF­tѕ¼YšOEL3!ź(™śĒĘHƒ‘'ŖÅJ)å …>.ĢŌ­‚¬ł8érŠ…Œ uó3!°Up-l? ·µīX„Se»VĆWc¤°gÅł¬gēāq…Ū¦xķMłįd>Ž­dz…Ö¢ gسŹUA±0Od’lpb9N5‘F&.N=w0?-ė#ķ³Ēˆ‹=„›qęm½óP×ŲĘŲ. ^˹Åōę‘wčī7XäkĒź2ZxĪZ˜F¾3é lcõKą°Ž„<Š¼ĘF” V‚ŖWŚ)˜Øg|(*t+|E(Aą”lPu §©lŚgÅæĀXŪ¬§C®ĶL3„éxüŹķF 3‚`*³åK p…8“©–62E‘Óęu#…s`ĘCéĻĖFw• ,õ‘R'ĘιS°Ņ:וj#њmŽšäiA2ń1 0O—łżź³²,ž±{G±‡PbųÅk÷ŲŁŚĻĻÄnöą©\ŖĻwśė2ŚG’†…gžĄƒĪS³Y7z‡uµµÖŚ·p¤Ärąø<ņ,¢[B}­„ŅB±r5Œü”…AČĒcå:Ąļę•é8Žœ¢6E£ö4rŸŽŠ$.­ÖĀeŖæņv{­ł¹Ŗ“1/µŒćyØ ńŒotu&:2=öT¾W’čōżß•°įū d„ó)i…0s› ²Nså0W¶s ‡˜ 0Už}›ģGŠēfŪ9|{oœĪ-Žä^÷ģ‹\¬Ļó¤–ó‡līgĶĶј{·’›W® söęgæk4ķ ^«•×äīĄ-¬ŠX²:֞›-o6Zw_ω/uŚY(&Q\£)EJć!œ†“ēŃ? Ÿu!:Ø©=UœÕQŪdŠĀŅįJŅ*y7IJ&õ3āTÉ^8ĀåļžČōŪæ!!uŽēŠO9+…PĢ‚Ž@­“NDś7`2Āl,mĒį>2Łļƒ}VžėøŲC(±60z.ķjŽ<=xG6vŅĶd½9O+EQŠE>/ƒ‡2kƒĢhķį_õŗõ³]iō²i/© odXsģŌĀRyP}Y…¬–’×bI¦_ŪT±$~čŌf;®¤f¹B 0­£iƒ”ŌÄ®TēĪšæŖŪ¾ר+Ԋ·“,K0UÓé‰j„XH„(ŠOĒHTĮZŸā#Tė „‡ŽĄ“«ÅBńģ&ĢfÓŁĢ|É-®Ī”8Ōnõ9¼Hö y6Ė”@>®Ų]f˜Œa‚©ų÷¢Ļ1Ł[¼|įŽyįŽ;ļōnÉc—ųcÅOÕwŸļw¦ĻfŽże€ß]8óšNĮ¦«µ”•Bč5ēą„gB$ 4¦Zę ²ķśˆ…®vVˆJLL˜I ėµŠŒńd1ŖŌ֍n¹asŸ¦„¶Aj‘Y¤”LDa®q 82f[e@e’a֙JF·Ų I`‰Fåk,|’īw¦/yAā†,TÓŖ’J£i{ŗĪór­Œ{OnnČŽĪōĒż–\øsąźßżtęīō"—Ų„Žīįńā¼{Ė…ŃŗÜ™CX/phå /x4Óžūfū0&7ēlyan}vq‰‘/¼źV®ų *uk!“–ŅĮY(Eoņż3*HĆ0ƒ2ėå¹’ƒÜ½ŖŻ(QŹGž&œ›XØ fäSöŹ:ļć!Öc¹CŁ|YZŸ>Ū²öv¦?åwĻ Ÿ7ž·{Klūļ€ó¶/љõx~^ž·0¤Žž±¶Ģź_h.’IqŽG6)Ś(ń\/:„…SŽ«„€Q’įšÅä:LEdĶ Ļ\“PÖ4š™ĮęPO×ēƒž‡·LNWEBüd’•ØfeĀŚ°%āXEĢ…Ą&GRLĮl„Łļö²Ļ‘΁°·3żÉ~ćĢQģE<½±]mŚµÖÖµZ.7ēČa®(īi`Ū»ŗ¤8ĒłGƒghĢń®UŃ"]VRØ`^i)ļÖĀ©6d>ā_ŪnŹdmŒ ,ųÓ}Ļg6.i÷Fża°“,‰½é?ƛČ\Dō(žŖ8ķ\¼–½öŽS&6ˆyÄ«y-g}¦J’åēÉź<&6••W»9HiŚĀ¤™„yą75Č rƒ`ČĖédiė#­Q“ĄZ‹(.*X¶ ’ĄŌYX"ŃöĄĒtƍōČa²ÄM4ūųKŸƒĢ”±·3ż!¾ĻĢQģE<ŁyóźAčš£ju×īŠŌ ńÕæ2mōæ°Q€,¤É3mc õ ŚN U°«ŁĶZm”8;ÅtˆÉP8œ V¼–4Ćd“żę—æś7V<­ć™²·3§žgzĖ™‹ˆÅeĘ¬šŻš‡’€”žŸŌšŒX˜Ē ń+:3Ö<čk\ ĪßcÖŃ=½k¬üeŸė»bĻ܍d…ŪsƐ““DY ®0a”»TjCūHÉ„N ÄĘ*ßl$ŁljøéK^é*æf':GнéĻėƒĢÅ^ıYÉV³±/ä(ŲBYe‘V¢ Ć„T’ņY˜‹õy£r ē;o1 αZœ]ŞÜl.'°„SŪ„ōÆ#s6E[B˜c~“Œ–C‹1=‡·š#ĪŽĪōĒōR2=ŠG# ŚÓĶs(ķ9E#Ļzā˜\²j¬W7š°WŖ‚…Ö¢`ŻÖ,i½}“Kõy!³IiååćyW8A~cRWdFk¹‡ĀCąńr:Yõ~Žlˆ_U‹‚„®‘«ęF·‚„Y(vÕ³msm'£UĻķ(åŲ±·3żŃ¼ōĢQģE<Ž”JŽDČķŽlR7š„ŗŅʱ>‡šś ī³źBŖ[Aūßģ”oÕ3ŗÕō'ņįe."zO®VąĒśH+!„°ØT$uG ŌŽ@6*¤<›ķĶĀ>‡–épėµ¹ÕĒćU/iłŁÉŽ…;޽|Ūҟ«ÉÅ^Ä£jw„|#Ņæ‡¬üŲ¦‹NĮBĢ:ŚŁēÄ$ĶW=ƒCÉi`ogśĆwř‹ˆÅ#‚×P¾Q‰ŹjŃKF TSE1­åfvĢ!”ÕÕ«žDŸeęt²·3ż{„Ņ£xLCKÖ„EݦG„\ćū›—×{*)1=Ą/¾Ł~c4\ķ®¬&={×JČŃĢQģEÜ5¾i±9Œš=“wŁüL«]0øVž>ßĀ7ĢfÓłåųČ|a'£Żf«kYi)nbŽKzööž#óUķsĢEDā±Č!’¹ŌTĒåĶ ŗ3Ó³IVĄ|ĘŒ–ł­Ļb’+LĻŽ­¤?OSę(ö"šUO Ļ3õčd<źęVm¹O Æõ½JóUOzkzö6§ō=ˆÅż¦§tå!<{ĢdxHSŹr˜}}3Ź’ōR~„ź y޼Bœāj‚ēæā7dV={ĖNtūĢQģEģ³”˜UO`9yĮ³¦ņ_MÄ`ы Ę’Wbüę%×|<’ś•_“ąs/…Į9¹Ō'(+łėxˆG’ķK/o MńŅoBнĆObžœĢEÄ EŃZ˜z(©LĻ&U½åN^ÆzN—ļ~M‚ Œ §Øų­b&ĒȈų~ĒųM{ń3§qŠ‹WšŸ>—$Ł.ć¼éŪĆœ/“R9J+żC€‘qšZĘY›!šń‰½ōāSxšM»pø=Ø|«Ž¤S—“sJöYĢœ'ā>(ä©äõ‚Ÿ¤ł²Fžž7&šTÆFk~+j->L ßĒĄGH# ca‰ū/LżJ²mœ·žH‚Ž@G9ą@-ōōoüYųž€ŹqŲą×o6ʝēšįw½ō÷?ė½ńż«Å”zöŽBNČįŲēZ™‹ˆcŽbÕ`č­z'+I…éŖæY©-?ļż‡‰™ŖXF‹ß5йHæ“®-…'N؇xĮ³¦Ÿ½ˆG/ ‡?’“0g98}}¶ŃA‡M7¦E£C±^æāŃõ$ĒÓ(J¼č9ė~ēKßłĮOÆxßūlĶŖ}1sµˆ}!U³ź\Ņ y'0Q½ī®C«QƬ6|ų><žQ-Š ÄÅ;ֈŁōŻ?•äkhtˆŗŻ 5žøä” Ōčßsī^Ÿ d(Į„¢Xć!^óņē=ņ±ŽĀ#”ž<™‹ˆÅć–Y8]õŽY~ńĒ;ĶĀ]G—Y€°AU Z•†t±ŅnƒĮēך-ožžĢĮO‡ŗxŃ矨§<^į…÷­_˜IƦ(*a£±ŪY.ćŌ5ŹJ½ėvüO_ń¼’zoįQIööĢQ<į"ŗ#ļąr ƒõYf¦ Śī“#]ō¬Ņ˲µPyŖ\ō*; ƒOīxÖĆÅuß(„/xŽ„ ēą5ü j>N7T©ņåE;5åh¾/ćÓĀ>G''ńČ볯ĢEĉGqł™ųHėUOā@S,m9i¹é”\V[ž:m¹|į]dM +›¬DR"J„ń§—ń™§“mƒ’“„ݦ`£.Z„ ŻMƒŠn)`E…Ė‘w5‘ßHśė·‘š–7įW?Ėu7ˆ>. v%Ė‘Č91Ž «ćōŲ7ĶŪ·°šęĖ^ņ¼Ož‡OÆāĆģ³=ż1×g—ĢQģE<10FV]ļÆÓĮ‘˜äµņśæ–š¬2üS!…޾÷5õ L‚ ·a2˜&~ėOZßż°åŹØUŠŚvÅÓĖBź'žņ*5°ūīXd3ńģé—ø|UƒŃPFzķ«f|$–ĒėnŲBEŌĀˆKYĄpBŠģ†ĘĀŚMqŁīsDҟn}®—¹ˆ8(öGÕ”$U3®•ļ0ĮÜézØm%|æĀd„¼Āx$Ųüł;§W3üŸKą/°7‡°ĮÅ+¾ių¬'€Õxį½ėwŒ„®+ ŠB&“;ŗŲ.åј†5hjŌD®ĀÕTĒq ŗa;ė •S°DĘFgaź~:qŠÉO>-‡xĶ+ž÷ČÆ}zÕŪß§‡°Ļž3Gń4ŠøϬz'7© 4Ļ{_Ÿ˜±šēužĶŪ6|x$ĶG]Šˆ#ĶĆÓ!žuŪA"ģ=åżž?cń‚g_ŗp†ż½Ł¦^•×źÅŗ½ų®,—)Y–£¶¢ /’ŃwĢŽöΘĖL8RĒį³6bšęRsł¾$¼Ģ”ÕTX„©|éš4ž€ŽbŽčē`Ģølmøź‰ōŁ%sqźQģsPI µg!?’€±2õĻ)čā ŌY¢+ƒ@ˆ*|\¼ģ‘®”&Õxū{Ā?\Ē’ž“ŸUƒPšc]ėČŖ ŻŹÕ?c¤‘9ƊVeŽOĆZ˜”n0‰øWS Š9øqŹVĮ¢Št-l¤j”Ōś+”¦©*č†b#š#o|޾ēÓ«ŽžÓž£uxso×|@/Ū k^õŌśģž9ŠĖ±jV½Ō#–±æźģČdx`C}äūUA£ĢŲī®k,|žøāћ²łX_IšyēÖ©T”#h 0u»TvWśø£µ(ŲAč½ČXŽÖ‰6˜$ £u`ˆ‡-0 «5lUź(‡ŚˆTĮ\GčJV†2ķ¤¦©Ü S„SįÖĪW×gu9BnSpėŸź-<♋ˆå£ŲēŠņ…³iQćw7¶sĒÉņóóßė¾8FõrTX\¼āūʓKāTKyĮ=ėœŽåDŚH‘O±‘a (xšŒˆõ?’ƒšCo8ĄČ³ņlŠ>[ę‘ÓK¤^ ”%„±V“ ’@ “jŸ.kl`Č[l%óO!wŽęČL3ŽQĮ8“¶­Ė\Bžó=)ƒž'rrØBGŻĒłĻŚ/ŗFÆ®ńloį±Éʈ8’(ŚUOąꕟ— ¦SxŖzRQć+†Ó„NTx:ĒåŸ)“åNb ™pń²o Œ9™Ž{)ĢZ+4¹L©,Q©Fģ™ėœ©WcQ7ØØļÆųĪšļŽųˆ<č‹FģĻuńټ+©JĘŚÅ)(zå"Y `q޵µwžy'~õ—Ćæž5;ČP…H,”:É*,TAõĻ)˜ĆQŹvdjLG˜±LĀUę}Ā.?ĮüÖ.ĀÖ¹EAv +ܝ>·˜¹ˆX@q">’Ćæż‡ÆżāU/čä$©¶ßyÓ—šW)¹Ļ‡ AŸ±iE—µ!j‹?ŪōÉŸ)˜Ć“ō Ū?ˆ‹°>^šĢ‹÷œ1¢ 'ŠH!r(F=SēźZ<©Q)ó¤Fģeu¶Ußƙ ž¼Š:‡ŖBtda’¢źs Ŗd©J&±Ŗ—re2`ąĆTŃt Æį+ĀXä8NSśĒ’wƒdŖ©ś' *ØmNž]#R¦£hÕ߅>«šĘY0ņƏ’™-¢øhgŸć•9Šs±_ūlŽł@b•Ļźu Ų°"dą JOPł(Lų¼pśXŒ?-ÆĒįųŚļFęÓ!ś‘ÕBHč_ņFąXĻ–Å6ŠÉ8üŒÖ•^­‚e®˜Ń!ŖVÉ$‰(Is”^“ÖыXržÆś_Ā|OD ł•r’O§TPŒźV.5_“1ķ@ĘĪ…˜ŽNŽ1 ¢$“W—:HĮqJxŽöeņq±0kL“¦Ē3Ž3Õ2YõĒßg…īFŚ»u|1:ūœŒĢEÄŠū‘§[Ÿ›JZķró½/Oä˜of£µŻģ`u«I Æ§<–Ty”³!īn¦m·LnĖåÄĪxŅH-X_ńžh¼¦öP©ßbósÆēŲ:‡Z§ä&cZüZ›Ł®Q-(˜©jb!+[ćBŒ2T čV$¼^„<•¹’ė_EQuÖZēŖW†ńP^AĄ\1A˜ęQ”ƒPAšŹż!rNÓ,Óq²V>W; 9ąłŪäubį,4žŖæ}B~Łæzē]cī]¼\4ŅŚūyr%[Óē2Gq."ö…bŸżåēæ‘²-(ˆmė*A„i0š—š<”‘ 3Ź£~qŲ¤ōjbéćKŸ•śćš…÷¬‹^6©s”‹šÄåŒz]NšdŒß|"Ž|ŅWķ|ÕĪ… ÆSP]”AȘ*ČG#i™6ÄĀRØ£F5q渚įīŪšCæóUQåTĄråPų$„ĪQe,uų)„ £^wœĮ”t±†F„Čh¤@؂ś¬XØ ¦ś„ŽĢ0™0œq؞Ą£“C>qņ}=uĒįN²Ļ 2 (y _vÕ3Üw>ņąŻzģöµ‘@Ć­Ø”"C’Č!o<†R…EņOAåŻ>\æs„·]L-če0ž”RĢjų#L*yœC±>3F^ćĖ.Ģ.FųÅoūzb é<Ÿ’C±Ņ™Ō0|PįqŠaZŲNgEūµNUAĀS7Ņ ŹĆė²źÅ7„śT®ŒmG`ŃZ„&J…@ĢLĄŗ}Åx žU5ŹŹ”ā¤5•ƒøZ TPłöF×kõ×åDēšh_O;ÜIöYqę(ĪEÄn(šUĻóXēCßk¶n¢;£›®Ż“5å W¹öŠOå^T¢¬ø’aĶ[æsˆŖDSņ±8 fļ06cŁč^Ē­و ¾Ļ›%ֆ"Qyń=³Ÿū¾ėė"yÄl™ÉŠSCJQ§Ø£Båu*%GK]M½xdž2•¼ƒśžt …óŖ‹HVKĶ”ųZŖY«[Ž.։Žć2­śc볜2„ŁĪ[ĘÜ«’?ą.­}x·æö9™‹Eq½>˳ų¼’ōæČ®z„‡œw’°žVŻ.ØvØ»Ė Ē^Q#V0ŲČ<{ŗNŸĪXŃČ3āŁz&Š|ųu1†ŠŸ]ßt5ļ×Ŗ Scą”š¤ćl ć¼ćWĀ7æ*›īń€9,¹Ŗ„įR +a/ß” ė8xDzI© ¬­…įw{ŽUn£ś’2„WV½Ž>Ē5Dqmų(ĻÜO÷5 ‹Źb†›FѬz!« Żbl Ņ8®\TĮ‹‘o,|E~Ų³Įż·­Óæ¬ĮF.Ļ’ŸŒ—•v'R¶ż ŹF6V>a,ò4ݰ¦kø;üߊ,|ŖØ„Cŗ8šųRē?’éߋÜ|Ü4čMY· Z8Œ*ŁvŪ6VWG’¦&šy˜ĆėoGės:sČ®ož1[Ęō96łĀį£Uįļ„÷Õ<*„7#"æōÅŖW±Ā¼ķ+a§‹W}£|±’Fƒœ»äY£H‚ćGbMŚDD-PPÓ “ė©|5ū؅ŅĻtžŁ®t²mõqµ\ Ҷ:ņĪ!|oų×Ed,ØQsü¬+Œ*˜; aSAm$¹r˜#ī,Œ2œ’@<ō¢čb8¾#Śū^%ŁŖ?­>‡’C†šækó ZøķϤqÕŅē8å¹ĆGĖF ä)üūå}Ұß Š7³źõŽJ’Ź']y‹l,?żēß~QWdL£:±X«‚ØrŖˆō]B%Š%.°Ø`āÉÓÆĻģgß·nŗšcVķųµŖIŪųĘBQ„ūKƒĄƒēÉ}ßĆ_}gų±7EE!÷K€%°PD½­FK ZkŪŻįȳ‘t =„wEÕ\åƒĶ±žrœś*„־ܘæłēčļ™ŽÅ+Ńē8éB“泘—¬ó¶k7[°ÕXŲÄR¼“¦²,®Mć¾jżfAÆ^ŸżĪĻš>‰­wĆFłŃü¾»Ŗ¦5u2PL*k’isZZwX×ĘŻéź;\ŗwøūU»nĒ`l$߁φ(y%i¬ īMa”ˆ:–ö6Ń`ćPēŌbÓZĄB”5O $yø•„öåīĄ ·|¼öo×µ<‘[…śź>²Øq÷ٚ…@8UPŚ—ĶĮ^ij›—¬ó‹6Ż1tKĮŖ9‚=EX‰€8iłs)ų8°čUā’śsf!z8p'ü2ē“Y„¢O”Oc– ņNk™ šą ęƒŸź> x¦|ė’‹’¹²·3QN›ĢīHĆāT2$.b!ÄqŒ*i܊„LÄ-„ż3Šˆx.¾K¾#¢vÉĆ1~œŒkš…YC` aĪżpŸØ3ī!–Ž4·ƒ(csY@ų§ ¾z=\ģ¢Ģ”ć ø™|sDŸ^ē–Eīį7>ÉQÓ§>“žÄ-ŗ~ƒ¾åU½ˆ‹ĶB Ü5FÄžĆ³k«‚ŌRPoZhĄĆžŹvl Ōr»3śĄ>{-_ģ`Ÿl=šhK1Ńuzڵ’Dwڳ 8)ķkYĶÜ1‹§K„x_4Ūż2ƒ›>‘2<x,k[˜ń°ĒäZ6eąŖl”sÕŌd,,jG‚_QŸ Ԑ( µ°Źź‹\°¤97v*5ķa>,Do¶Ųd„2Ī­«ŽY>ž…'ŸS"tž“«ÉQüęsĪQY҇{ż±kōŁæ¦7üb/āB²µž¼üæbškgz¤ń¬ä%ėüS×ĶGŻ”©‚ŅČ4ļæ©ų—ImNN„Cެu-6ˆ7|Äū³£%ŒżnzōéžĻīĆG°q»ŚSÄ[…½>“ŻĮČļ¶Æ>}¤ į•Ģ¢Zŗ|»ƒ$Į C‚|„؜Ė3Āąń­qkŖ qkRŌ¢ ą €@?‚1)—Ō īæ(øCōĆ›¬¦B`"ųq‡FĮ¬ns#ćEv,²,S&\;čzµźŒēG ņ–ŸČtˆ_‡y?Ąa)?Šū$¹.YŁ–Š«+ü„wÓ;ŽøŽ[øˆ,ĀiŒv;9¤^ij%õ6‚ęgŽDøL¶cˆ]РĢ öblŽ“J Ńå’ņ ’å_aĻēG‹†±õp·ē™Ž'Ē0ć?¤÷e2˜¢Ų(eŲjMOqÆ&qf0ģX+ČTŹt Qc”ŹBc”1lŖąŌBŻ<ĢĮɅQP ä® é*V‚™t•Ii°ń=»x\| ē2Ķ‘7· fæš¾ļ]‘:įIŁĶQlùü(H^@wČ.iąņ2āvy. ‡äé­’Ćś?|{oᜳXM¦Ōõ"ž¹¼h¬f³4ŹT[-¬XģĀ™X˜ˆ+YAl¬„ „3+ņ,.s$Fńü§{ŸÄŁ?›Ē“Ź˜G=l¢”ĆŪż čāĒt¼Ä?ͼ` SįŠhLÄŃŲŌš/g’צ}ž6ƒ@”A@s²pņšoiŗMAAÖN~J7æóė0o‘¦ /|E–āet]²3²ńę{dĒō?¼ž»·pžY„Óō"ž¹L l7Œ‚a)Ā’ ģ’‚J"%ÕL ‚zRɹš"pH¬¦«ųŖ>+VT””¬`ZPš“em9ą ŁæŒ"iąąČ=Z[ ”×õLŹß¼Óø”åŒÖFL!JB’ϧ¢]O~ų74#ņDAÕś¢’ ųØKŹsŖš[H±1ŹaMŽMŽECĪŸ£W½pż7’×ŽĀ¹e©NӋx]śR’6Ÿ¬–‚Jź²žµ³¶Ė—ˆ‚ų8)ÅM!0,y»ˆ ŖBOŃ}Ž’[÷FG’źzMĪH Z^QŃ(m‹Ķƒ|‰Ōq!§e5„¦zģ© šįߊų²oÜ Ø_éŒ<¼š ą÷ÖRś–?Iéś-ś×ßś~޾•@\…¶ĻB~EóӨȲ(/IY¬,Gó?™²$ ļæGß÷­ė’ĒōĪ'Ż@8M/ā)ŽļūęWĶAĆŖ ŌQˆŗØ6¼YP"ņŦ”\CA4øÖTįB'€‚ų`+!¶p¢»Ąžéj‘aÉ[yV*~Ź„xĀĻųg¼­W(²ŒŲåW|1Mxu¤†²qš½³’[\TTĮ°’‚Ļ}ͧÆ{šMčƏ0‡=ØÉ•GRIm~fĪņ»Ø|¤¤*įu+ /ϱ ņź!q*ŹĀ\ņ\zĮßY’½?ģ-œC:†pš^ÄÓüx=łĶėIX’Ÿ½®(±WŽÄF)ņ„»)™¶|ŌYøóÖą»d䌂ģDlœ'$x}öŒŖ’æóˆ<9üŠČå•v0›Š"Ūę„€b0`·žżd’ӏĮĖPĄ—ŽJéNKÒ˳ę#,©,(+˜Ć4§ %¹Š©¹[œ€[ąxœu½2§%«į4½ˆ§&ĢĶ[ā׬©Š‚š6 ö/©øĘ—»*ˆz"ĒŃš±Å(¶0phœ†>÷«ŗže3æīTŲsī[pŸmyųķZŻ‘+n™—ÅĆhó5t,~Eńɵ)ŅĢ”_ŅŠ„{ĪÓOŻüĀ;ĆĶ“«¦8¢ E]r((žå˚d\8šā¤¶ÅqØ(čG_¼žx¤ėå9ńY9§éE<éIĀŠuŲ-üt=‹ŹŠJQ°Ž2Ķž„%’Ō‘‰ŁP$€KÕ4ʚC4.hd³ˆk¹«‚ąIŠ}–-XóēŅĻļ’Ŗ¦5Ŗœ. n5Źŗ‰W]K—ŲšļæmŃŠ£(„»ĻÓė_üņƆõ%¦äŅa¹©`7 ꔠŃX“”/™ˆ…į„"ø¼ŗū÷ ‹ÕõØ3eׯŗ]Ÿ=½Ń+.ėŚ7Č!ÜnĮöźt«“رŠS¼i6ćŠ78t=Å>Dwį©#›„Ł/•V5ÅJ»(łż4óĘĖ “ŹJŽ(²żĄK‚ڼŒ(•†Q"Tę”ę5„Ą/M¹†ܛ¢IŹ ¢ĻILUEĆ!96Ż »^œS§ė!Sö”ŗÜõXśœ’Ō­’€~ŗlš )P-ӔU¼/L4%ā% LZ4’h>²…,Ūä;ä£åm0ĆéŲ“OPĢ‚ÆŽ…Cw–«ž5­ķf2ŗ)xEm1L‹a"bYrÉQŠĶYkbĮGēƒęüRjš©CnēO’€_FqŹĘE`ŚI½Å1EPPS”p·¶MĮ˜ŽńĘõ7üā#]ÆīÉĪI‚pš©ˆ}V<ųÅ Ō“‚ tHē!ź˜BAc”Qž‰‹BŌŲjĘłk T('ņķs"óŠ[4YFAµEAKŚEó±b‹’Į„™XŅ&[X ‡—{śž—ł’ņJXw…Nr*b&—¤‚‰QKČuBŌ1 z,¢$*ü@bŗp««®—éäĒźz»G©‹JŻ®T„Ōc]„ό)õö#‰VӒVź‰\Ż(źåf©nIŁ@]ؒøTR46•Uг¢æ›Ķj=¼#ÅmĄ«Z„lł–#eɘC¼­€-Å·xē3V-¬Ø,±/{m@QJNųœ üødģ_R+Hm#4ĖFFa؋p…€0š»^„“§ėģ((’æ§łXלJ×CėÓMōSū¬xԜō,`‹zŽ=³T2?JBaBō¹hŪiļł)Ķ/žē¬<’†n8Rp¬`††؄@s&n;V%ß§!ń„\‡ÆP3ĖøN„ĆģįŚ„ė¶‚ÜŽ„·˜EtmņĒ4öĀ$ ņĻRVĀFĮK»}u¹·šgdQRu=ˆ>GĻŲķz‡Ė æ1rFAYF^E£’†\ņś»_ī_‹č±[ō’ž—FDą§„:%ŚQC`!4DĮ²¤0fÉrĮŒI3ŚåR§P£”JM#/éքBĮĀŠK J3.ĢgŹ'Ō ŠSŁBĶČQ a×K{āÓ„ uæÆõ³öųźRĒ«Ņg‘qåzn½9=Ÿ{GĶtUZv0ŒżĻ(³MēĖ‘²‰P\‘ >ylzsmņlXByIē†dYōu–’śōāļ ™@#Ÿ‰–ę Õ(XPi$Ģ `*&¢šI$ŖU°0”²ā†cÓ; ~ģGB¶°ØĢ2¹Š(ˆöTĮ¤®‚h„ ]øĒ ż!­ĮœŸÖŁKJ˜:„Hė+ūŸ‡”ś¢‘łØŌå/éӧρѺė%ł¬0?ųc ›}N‰…„|Tā™b“‡¬œF.ÆI”Q0 »ĪŃū’eščUś¹7„|”+v–¤°hš\ü«Hē!+˜S‹ĀX,žM2ń¬ P3\Ā&L NF“6"ĻeҊ²A‚C\•±šl”\¦µ؍…cż(š¾Ļ±³l•ŗxŠW—¦GŒyZP©ß&śæŗXŸ>}Nņjž½½ą)‘ćŲż™ĶO DA7SŹ*śģ-śhĶÜ9“Pź°'æļ'#ņˆ©˜^bIłźś –? mEYA¶Åż» ]ś’óōßüŹCQS×=T2/ōY°Iø$mLDĮXdƲ†į£. &EMнą+ū6>łśM†°(ѻʅ™t’ʵĢa[A©ĆXĒCRŽß8Ē,ĀĆĒ(Ųä¹=„§;#‹’¹nĒķ ¶ī¶¢¼ė)Ļ1lƒīzD÷?/R–ŒÄ“Ļ›į–4Ņõ o$t1 ×ö“‚>~@F‹̇žgMÅņü“”ŖYØf¹“4Ą\Y’ēˆ…vĶ”cŃČ„’īĶĮ{~&¬ÆŃ́zIy. J‰ćZA2 Fš,å7ŠĀ0J)¢Nė…Ģr•”łi,+ ךŖŠĒ†k«x¾§8ÖŅļ˜ķū“½“Ēń§½céCķs¬Øłu5Y˜‘}ę’w~{ō–o‹hH䈂ęŁcwĮvo‘g3*86v¹½ęŅČ”/ č™·ū‡éB““ä_ņš›4Ę(ØZų)ĮŒ59–Čł X ĀA 5té[~< ”Ją—2T “Ė)ēø-ęįćd›‚ā_œp .čÖ‘ŖĀ±Īkń‡ƒÅ?ąÓgéwܐ Gė+Ó£J]lŸŌžJr7Q¼üÕé3ÆXÓĶHāaÓézH}ę•’^dĄć˜ˆCsX‘kQZ’­ø 6 ,śņĄ’Ō-šP4Ēńż!­ŗ~l}Z±–~ĒLŹQsŃł„µĻ’2:ĘkØŗüĻĆ?¢ÉłTS¦i>Vš”ęK(  ŽcӅŻ3¦sž?½hģ{Lf<&æi]6 J©`›@X¼Ā6PćZ ĘĢęįŃ÷½)cЦĀ58‘p.įo'†=SK#”ćQĢ =ņG¬`€3Ļ/ü%>į3‘åC˜MfēhéCķӇŠŖė¬p>ō÷õ&$ŗP«a¼mE…füų0ŒŃĢ”ŻpxǐFī6÷¤Ųó«÷¼·Ł¤Žż+„®„ĄŖ)‡seÉ*3E=$ēėāŒ‡§ۈw ųKļgŗ¦ųź ~ܘ”ęČō J˜2ž€Ö‚@9A׏®Ļ–8KæćM¢”i)uYė+Ņø(.™ć걎\źdś,(žE™3“)-|3UoŌ§/£…ż‚“ņ€E{ų‡µ¶MōÖŚ8$ģ”Ąø¢šóĮL)-9q`ļ~—įQ'ˆž­ś¾›Ć(„V-+ŹK. 0k,„ÆP¹TL™×Cŗv“§ĄEŌ„YNIFiĪ—Ä)_n˜œdĀaJa¬ųcJć)ĒWī¢žWŸćdł~†ČoަąĪ4'ō9…(Ju׃8ķQ čó”—@¶ęCŪæŖU7ڊ&€G؃:iÅähŃŲ°ŽDG;CԾ˨aćė/ZĪWQNQF }äz“mTæōƒŗ¦NĖŽV4ƒ©™/v±,Ų6£`n”ZœÓČ£kaĶ!“Ž–ņV²å^Y”pa.żTŌ8ӔQ)‹‹?’%ŅĄ[ą]ĪH– ”ÖĻUź÷¦•ŗÜõ ōYT°Ķ¹ūžąY”U Ęhē;®š]ūģEŽ—÷½@'PŠ@؛õœhB]r] ¹®Į`‰Źś:-ß*ž GĘŽß¾Ń˾&²²½€/ĖiPŃø¤! rČ÷čo»žµ˜Ņœžų µˆŽ@FUµžÆīkĆ.¬‚„¢`&ž”VR±‚ų8ÉdxÄ `6ōøvmś¾óĆŗēc/cŸÕɲ!”|”čożŃ®ßi}eĒ‘ĻO½ÜłmŸ>ĪR@=d†6%+3˜%õäŸn“švÕBØØ?€‚œŠ ĢDĮüüż5ŒŌü±tE³tołžˆé²„7š–¹Ü¬j—ĄBt*śŖ;ż(„?‡eMŻ&÷22<…åV’0Œ8ćĢĆEqŹ—¢OŒ-Jxü¶ÅNyķQl°³[¬ķ-Ję[iŲL [²ˆčٵ؃»|śé¼ķrČS3)c€Ä€Yd –Ļ(× ŅDź(­'&ų*4.޵¬ϰqsłh0Ÿga:üęW>2Ƈ{fÓ „Óōžõ™9fKŻ?#›U85ńķŗńĪēFŹ–ŸÆŁ°•“+BS„©ŌtĪ„_b qŲ’BLŸš‡EsS±hӛz<•«“BA4J–/ qQ, róém”ńłh8×uŸ8U“=šÉ%«ĘŲW Ž"( &ī Š/{wšą«BœK›rME!Š‚©”$ćĮl*( °Ē¦B  8phģ‘?¤`@kĆŻŸń’|Ÿ…ÅźzūE©įŽr¹ėAõé&aĶ|m^u=śłå}ß‘”Ājźid?† (•Ų6ÓČ<(Yōæ},8ĪŻ’ūēč U4$.#©ø_Ł@a^㟩M#QEØ3v©JĆĻu#4  <>łŹżš@j)Ų Ū@lü2sSł†Ķ«ØŠ,,üž6$ĘM…7.—ŗ©›ÖĄĻL)”v”\SÆÕ«§Žmߊ[ę[Óē€8]`3pnDZu=Ø>}V(fжmĀJh*‹¬Š,Å0ąØĄ¶1’eōĖüÄ׆3= *é ›GQć„ŗØ˜Ÿ¼ā;¢†|†ĆøŖŒ[ ¢å2$M”|¹ubš°Ē³‚š=SŠĶFU±‚øQ‘sƒIÅBōĄc Šē΃“3,B!6£d[Į%ĶEh #“Z¤dM£¦¾# 1 µ/]źø2öé2CØŌEł_^ēļģz5ś,6óŻ+¾-rm_[”jŠ-J* -ŚPō¹”¾HN:”óæoWyų»”`3ÕŲ@M]5mĶØC™>›„6…øŻ£7’Qš3Ļ«-,Ķå;‚3ĮÕNs`†®ŗ¾üą×ė*JŹZAŌšQ¤IŒ…FĮœ"łˆöD 3rmī3š9'©’[•-kрgøWÓ?0ĖÄĀD:Į)•̽,!ÓO’nš“/ÄłéĀ\•óUø$5ĀŒSQGL B{ģ‘r}åźŽ×ģl¦3‘K]/BŸ“”·<%R6osŠ7xR% eß·JŽ0±Ż£é\é_‡ˆeŌõ`ē–‡¾“Üŗ×nSP ²é'„Š¢Ś<ŻPŒ…Šāõ~éæ :Œ[ł.£5vY5šĆjŲüUM ą‡` šĻ”ŲČW9Ņ0 "Ø=éÅ÷(pųĀZƒ}3»\„ć[ČDjk{Sc^0¬ŖhäŅćm¤õ°1eœ įšŽ˜N é 5+.–DMŃK|²Y¾Ä›õŁ#Ż@xTµ¾ŅÉ8ū'¹¦į¼ū|ēŗŲ¦Pƒ‡Š\M…EžęĶ;)Ž%š¾„ü/bē„Ļį{¾IkKZķZou‘ŻĖĪ[<Ø 1 ߣ…ÆJ±'(EŽ¢Ÿü·ĮĻ?’ČŽHY,¾Ć I‹Z)Ō©X•ˆ…µ‚ĀĄ‹§uA‘@8Ą0ą7–ŻŖa@U“©;؀XŠ«`ĻŠy.ŻāŖ$ēK4wˆń„O#¼ņ‡ĮĖÄū\ĘĆźØŁÄŠó“Ķeś‡·pÓxėj4÷ßŲ™L76Ł]Įž½>;óš×iåD¼‹™M_7bæĒĪ.M[öw[h*Źm:Æż÷’gzķzŲɰ±/ŪĒŲyėU3qŚ” ¶TĶ»)f©b*pLšž[É9‹Ļ‰Š‡ƒkŸHø+×āŚ±jx2S oĮ’@h~±°g,4F҆ˆwŽĀ`-XBA¹G)Ć5#¹ŪRśSc!ŒĻke!"ę8ÉÄĀTf7.wĢįp%ü#Ǝ:ģņÖśgŁŃ„÷žĶ5@ØŌEłæEĮæS}“_÷žłŠ7hĘĄjõŪ¾Gs G‘„ȳ¤Aä*zó_’Ó³f²p.8FŽõ|]ó_5óU-M6ąS®™ ųĒf@ ¹Ź€„õ=ØK9 ėóĪ? ^óÕG[–¶ėøK qK*D_¬6\ŠUe}(h1„eKA&P”=vI |µmgĻńŌ4¦¦'aYl÷¦ŅXąō8ć$ļ@”ń‘µėø-٬ü/:iÖõĪp¬®Ąé<•Ł&ˆ3«(’üy¢ąōņ ¢–]—„(±!†Ō²wßįŅ>t½$LjnYX6mŌ…”Š·ž¢0J6 ”h\d–ed“gółs C%g•Ź+ę\•*5˜e]„•Öū½žÖfj…ō™¶äFάָFa†:悠]&a”ņC·-rķ®\“ š»BŸ=Ó „ķ¬W°Ļ~y’×j²w(hźj³ Fœ˜5:9Š,EĶosčr-“Z3­dŖÓvQ7Jń/Õ”ą<`!ź–4±“‚*-k„yqō–ßā*£-(+d.Øs)"_" ĘŅŽ3šČĒ"fõ‹#eśź4 ōńGwčŖė)īM’ķwŹ$éz§7N7½I40­^ĮSœ¼Łd±#ÓĢ®µcĒŅMiĮĪŽŪįFP§§Ą@óZŹW°P‰‹ž5·Ł¹åĀךž­™:՚»’Ņpčh ¦Q8õu\qųĮåFA®KŚt5e£‚ĘC^“óhš O w½ūŅØ»[>l* ŹE÷¼dˆ€0YČż«lŚh€ö0%×&ß#Ė¢1…®µBt²b uŅ|²2æįĮÆīV×ļ³š|Ķī˜=¼÷9š1ĻąWµŌā¤ŠTT¼o¢Ę Ģ·ęDca)+Ž%ßš‘z[t:y÷˜ÜLYI ĘŠTz@Ś«“[éBĢcų˦ȑXŲ@=ŁuĀp#ŒĀ°œ„PŠ–uĶåkWp“Õ°-ē¹¢nlž ģÕu«fü-+Ø(šČQlį^wépāCĻ `Ėš!N;ŅYŽÓÅMoy]O¼ĻŖēĮgéŌģmIH ¦! ąē4שЉĶ={ŲVJf2*BMC‹æż­O?t_Ųõü’vÓĘT-™µ ĪS.ųTšk'QOEȇ‹ø]H—“0pČŅdūgķws\;/,ŽŌOœń¼ņ‚r0_ņ4-¹ą1šˆĄ/ž*˜×"jpģqķHyŃÜ÷sļ Č<Ypø•ŹŻoNx؟½FžÅhŸĖ1žĶŁmEp}vōM'>N4čzā}V=[¤Ā6‡ŅŲ1³ŖöD¤DĶ Źī Kx‰o5³éFŁõÜeÜ/›°¤­ÅõfÖØ #ćf‚SYDXØ…Ć‚ŗųłEčē]Or·€4~^(­UFĮęå5‡‘ń/«0iä ­­ŹŪ½ōpxlŒ^ÆūīČĀ~éł|e.£ ‘"Ūf½P ā½·Óó\#”?Ķ<÷]ÅŪŒ\śĢ%@ų(¢i)uYė+]/BŸ•ĢŌ<-{Ć“]5+įM3o¹ųĒ –ÜHäd0©ųt‘‘ĮÉĄr`m Ŗ»5Z˜£e¦« ū>–šO\7 ŚJ„`Ń’ИvĀ«Q0ŠaA®(ČÆß¶ę=h5‡ƒj˜]m6/-˜ž—(ˆ³‹įŸ±°„ąŲSAąĆæ)Cgæķ3Ö±[7ŽņŠˆ<Ł,ń†ģ_VÖwĢå‡R–,ÓZŇæę¢’_nŠųĀīXœĪū”ōŁ7@Øõw(õąįĻWjøõĄ‹z;On¹G¾m]kŻXØŹHvŸĘEP l™1 j0ŠB`)WkŠ„Ftp¾£øžć/_{Ox˜‘äÓ[w‘›9Ż „“]»X ühē¢ ’šé—ua$dø–k#i˜‚5ń=ņŻŚĀĄīr‚{ŚĄlg*+)„<޳ś-Q*yŠz1#yš ¢ %„’w»f޼Ź8h“ĪYŪęǁǔŲt×ÓØ+’O?ĶvߌB¹KļyŚŠ[ąS8;éBÉLj¾’čh)u¹ ŪNö:[›>;ŽŻųgvM³×5 ¢dahš‹s–`bŚ{PIQF1Ų(i#£dĄŠĄ¦5)a9Ė ,E3]wäLZ·¹‘‘‡Ż–jQC`ž]‹ĻÄı$› ¢xX‡B,lü‹šzd 6.A č;<äĄ\I;žž$Āš4jĻ+š÷ż£FA%Å4“4JiHY–J^WlYģ¢cӅ€žuŃ’÷’9f¹{œŠ$iDģ³Čt”ÖļPź%ÄÆŹ’ß•ŗ—ļ樛^¦ÉŶ¢hHĶÖ#›ŽĘ¦ÆØØųHŠ|F‚ø„ P2\•šVˆk±CY9£ĄŪ±”Ærrø.:b«Åž A¦Õ°©L0*(5OæØ-4+‰‚>\ ‚)‡Ōpžnž³.(/łq5co³=öw†E¹Ėiqv@ē’¼&O±yÓ·E7uÕ:Æ"ōo©ŗ7×!·¤¬ b‡µé™÷śõ…h[ēwö•ę“Ä}št”ä’–ś3DÆlŽō7J]l𗦵¾ŅõøŽŲšŠe'®j M¶b’P`CŖY¾LšK[“Q02»Ó6;˜ļPąŽC§ZȰ‡6;“ø`˜ Ä]B8!ÓĒܳŠ÷`c!Ö$)źEØ-¬ø”ėUE“- †t=¢±ėOoŃvznłŲ:ļåXAIJyĪuÓĶ ŗŅ7½ā‘å­ąÉL76ūõ„#]u7ōefÆUUźrWK7ófözl+ģDš2ĶGrM®@ˆĘFĮ$ĀK[Ü. ø†%_ėŪ\ i`w²}ö{%F­‡’·žćņ󩿚ģf¬Ź ©Śrr*+*Kp.olVˆŽš-¬**pčŸ>ńEzź—ĪyœÆ{yd­=¶N·ĖhsęyčŃ ![ĘoćēCōļŽ·~õ śŽė9Ü3Ż@Hō¢WīFĻ^;JńūNō9­ær¶+ˆĶ·Y8[ —+æaģ&…(X „…āÆą"üKKĘ/™ĘB((ęq- dlÓՌ¢ŠŠŪM“ČļźÅļsPĄįŠžG?ŽĮēÄŁ0»-•ągŲ+‰šZŅĄĒŠ©ĖE;Ī Vޜš—č/-˜„F0Ņ÷+÷Ą’ŃPZC!PoZØņ0Ŗ‚‡4ÉLGōš»Öæų8½ęg{wÉŖģ'k›^f¶ §ä÷¹ĒrÕ瓾}*ѧ»žĮ,~OęRCˆŚ³Ä¹J”ĀŹ$’ŠžÖ‘ +Y¬ąXd ĄįZ x »žåÉH\ģ”Ų’.wļyÖJXэ.Ó¶nČ©ÄB!°,)+™:ü6³œG‹$9+ˆ··’āX4ti²At®¾ >ΜßQ@émłl Ļ™ É|“łŽ–ÅśŽ”f4Ā ÆÉŃÆżĢś?ų¹ŽĀķéB­qß^¾ƒ³MĮÖńĖm ›Ó8ķćZ’œRæCōū;/Yż@>l8Oäd)†ŠXŲ2MŌL ,ŒåĒĻĀæ²–r" щmņׂĄ!ew=±c'ÆŗĮéŽ+ĪéĘ«!Pä£Į¦‚yŹže…@X؊ œ&ŹØ’‡UTd+é¤Éڽaaś?b¾¢éœb-AŚ”Jj§›Üʶųīę.h+‹<—¼vż“Ÿ£ßł=‡›±ŗĄ čRjM)K©X©?Łėł_+ĘD²»šo/īVOīz®Ē “K¤\˹\G)ē¦i]q}«T¦l”Jc©ĘŹ|F£ŗ^ŽUŠīzsĻ;_®ŁK8)ZžåŅŲZŠ–‚ 9×HœÓ$£8Åo–¢”ŹŠĀ”6Js*¢c ļ÷WS TŪ­WQ5u£ †] Ąü#öρ6+čyä8ō%ww½Š+–“”ąq±įᤦ™xū>¢"śQ¢wCµ=`ŪT°iüŃS›®.o;szZ+xåߊõ¤ėŲóS:få(Z”Ä„DŃ\ŗžč©Ź1W3)8!üg“¶LÖnä+¤óĘÅ¢n”)ŀM„…IĪČ%M{ ‡•X8r¹įŲä9³õįŖiÖ¶nŪZY5cnŽĄIį®'|š3źļ…īz˜g+ĒŅā艳ĶvVŅŚ?Ŗ¦]š³Ī‰,žX”|N–SZPš³ŠIĘ t’H2‘a C‡UFĮ0|N0Ó z—ęķŠiĘcIĆh×ųM]¬JŹQ0Ś‚,Å£½µ!ćŃ\`$f‘ē4pčß»ž[?²Ōå^Ét aĖ”č»»^cĪb‹[J]¦­6§Ń¶ćZP©wż…¹j› ;AÕśk•śxė@vЇ]ÆŠ3“(©d;8t^uw„-Īń¼žŲM“’ī؂[ŻČé ¢’TF;ÆRG»IŸŁ38ęU÷żįoŌU%æ'K>k)°Pä°m¦%«øN „ƒgŒ·*üp5^°‰| (TC ĮÓŗ1Ė¢Č+h–EI]‘2odֈˆ’p£-A %`ēŲUų’8įĮ Ę‡]/ÉóčŚĶÖyÓ%„»ś±vŖ°ųAµNę7‹½N{†pkŸū$hµ±k{ūž|š!#āżbšJ¶J,„|šl¬øEMiEEC‹.øTh’fÕ[H“\”8 †«bł •ęŲüJJ ¹¦BŒ1 ¦R˜¶‚Ņ3ĢaJ‘X8‘Ęł1äŁĀ`@ßń]‘; ųøˆ*iˆßhNv*o£¼ØßöL’ś-śĀōļjź\‘oś ©qܖ6¦PPYP‘× ę26te1Ōøį$įé€CL¶¹üųĖ×åŸ=Ņõsė8V×Ų/Ć¢Ū‰n™ƒ e9w?4ÕŪ”öÆ}żn½ķ•sDOj}Ģå÷±O†­ÕĄÉ“}O¶—³bóM5›x»å}_ńX²‰˜}Dm)Žpˆ-O7"-r„“ßõJ¬@V@Į¤\l’q"Æ(]#—Z„Cbį…Ė„nĄC‰¦µ\hš3D _ ä|(8 ®rˆh@äČ;éIr+¶$§8§ė‘”IC]²I`Ż0G²ĘĪ”ż S…2ņ”ņjėŲR ~Jö`c”yń'/žg3‡~»ŠčhŃϼ)ą]%“’šļ^ĆæŒ Į/üXA””RĮ;‘:Nh4āqF1EQ؋0ÜUŚ6[ų…Ē‹iézÕ»IWFņ$wĶ^Oāˈž¦i)uyń#¼Ō4¾õp§ķĢķDoj}Ģźjøõäżm“ŚįŽ‹i2ZčJķµƒz)·~’ßŅ[ÖMŁ:-ęį—PT<Ś y+"G±Ž…œf+śń?ŗXæ>Ė‹kpBVجTy„ņRØ+U”Ŗ¬T©¹®ōfŁśęmMĆGĖ«VÖmóc)Ji(~3+M¶Åo_£”K/{¼„°0ęŗēÄ((ŃŽōÆQfĒø„Dń˜Ā˜;F4öĀ8 ’ģc:ŗ³)bWnŻ2-­Ælż*Žć’{‰..adJ]lńöŽ}ĻŻ??~ėcvŠ½f`¾²OœĶAč'‰…ūLĒ^ĀŗĶ7å¾KėÉ~1Ų÷å}ļ³·mŪŃŌĀJ>¢†‚D¹ę‚ķ&“扮÷ J “­ŁÜ¾’#g×Ā]÷õj’_Ą¼“ä]ÆĀÖØŁ.›¾„Ō¼‡¦-o]Y‘eQQŌćˆćcóKČśōÆŹ„2n’ˆy™ą—~LŒ|ÉA ¹K˜P$"Į˜|ŸŅŻ6§©ˆgE§£ūĘ{µ×Ė~^ŹbÓVB+µ’°æmĪÖå=šGģµŚŃ֏;3šRž'‹^™c$•sķŠ³j“öŒŃ掩ńOö6·)•˜WTT\£¤r¾Œ«ĀĀ0‰§²ļ†6%ód+ĖēōdŲÕ·O¦ļ­y Ė구Ø,)—ó2Ł{ œŃ%ĒE¶ÅŌįc%G\‡©Ėr>ž„‚"Dd§ ¢Žј0Š—ü£Œčł/’čžCn[xļ+ø¦ĒÕŃ}7öV¼„«åŠśóDk“ Ģž©mŪõd­o;"„퓳ƒ”u·~¼až)uy·“/-xŁ6ƒL»,ķ¾Ūņī’ŗ£ÆŽ}ŖÖGŁ€0ÄR“…}GSŖ)‘Ó@`" NJ®ł\Ķō"æüń «IķŸÅl2YĢĆ»‹ö ŃĶ»³ˆŒčäśY˜ÕPź³ūžloż8Łõ¤öŗŽö#稿GČ9R uo²š†gŽ…FÕ:( ę(eRR©į_ŅÜ āŠ‘E§TčŚĀ̀ڧD™WėH1 ęõKXCX±eIYAYN©Ōč<ĪåĶLVrŽ…w›Ų6Šč¹L Īä’ńUiJIĘĮ'j6 ““†Fpx×ķäĮŚłžģso’öļ½³+Ję«£ūB»]æŠśŁDO˜6Œ¤-»ł„꜅ģéGO~Š mTs“õc²×ymޚł&¢4ß^Žśå„9NÆž¶2ĒĪē•·~„Ž$ŠøUµD;ŽĄŽ2)ąZRRŖ).™Ć‰lRØ#į0,łdGa©é÷>t=Ån¢Žqķd)oŹŲ[ŅR+…yė:”¼ąĀ ‚:ÅŖ%9“†°g[„ņŅ–üžĀ? šķõ›(źĘ†ŗr™LŲ96ÆaĻČ·©0ę²!5i„ģ9æĆ«¼!&Ż0®õ3”ś’öžž³Ó֎m}„tB{yńRæčž½Onżxcŗ»Į擷ĻO[J=Jōl¢`zŚn=*'ńĶĘ~­ySėUąMĒ%ŻÄV”DaVQ*ÅąĒņ%‹‚8vĄ‰§ ¬®gx†“¬Žū؎zAIŖšĪ‡Q,K*Œ‚9åš/ĒO˜ä’Ö/ó$„J®ā“ĖĶ—ŗ¢T…|[V|×ŗ¾Ŗńp«ŃŽ1ī½³_fH‡½µ×ZæX©Ļżåß^Yī8ßKōŹ=¾ŹĶæ=¬BF[ē»ē ØŌÅĒ®xfū¦Zæ^©×5«ś¦™Wģ$Ź·=Ų™š’mKh²yļ2 0“i­æ‘Ķ¢ĮFa$"Kz,!{6¹ŠĻ?ŃŪ]ąŠQGF¦ŽļĶr•nń¢w„f.)ČF÷qYĮœR!0EÉ(„ޱs7³3Vć™$¬Z”ŠĄ%ēĄ‡Ø6žCgŗ™¬¾ˆVw·žk¢—š ŁöÖ÷ó;²#KWp’dū|§Ō“ˆ6æÖ_Itćš]kż]D/Ų¶>‚—öøäŻDĻ8ҊįMŻVŗYČmc>Žå@  éؔ+žŹČgš«,¹x‰ŌÓ1DĀ! `ŌOC+ķ8ōV`‹é*‹ÓagĢ2«“æŚcQyäÖŻBSJS³‚ņFĮÄ(ł&a…“(ŌE…į$ ń/aS©É¶łœ’óōV”Œč> ø Yµfg:ƒZė*õūžšm5rŤż!$²„““˜˜ŌnsŁÉŪG§-Y8wŽč{÷Y ­’Ńž#^Łqs óčd`±…œJzŌ„Ķ'× ”­(…|šŁĖD>VŠ”’ė‰Xˆ††DaYėč;4B·xØIŲõ"u“('Ūźz§ 钔EEĮ†Ām Ęh§£@ĔĘCzüM| §.(X ü!y+h‚«veOÕ+”ötļ“-]ŽCėUźŖÖ?½ļ9«†_;·ŽxžÕ]*uq׳jż³J½»zsąu3,ĖźĖ7÷@2GaU©ŅLW¦© QŠų—JI¤Ž„1UHŹD 8„…®"8Ģ”ow=Ć3–„ķä®<ٶõz®ż<®‹Œl›²Œ²’ņ\”7 Ę-QG _…68Ž1©*“59vŠī=̶P£į²ÖwG¦»Sē"v|ūż\łą ½Ÿčm{ŸpiėdæK©/ż!ŚJ]6˜5 ^Śc}>`NŽzpOO:{sŁw`˜+›ŁŠ¢’¬BxA#CXR¢™ĄZA°' öÆŖū1zŠĘ6ū‡X“ ōmÕõŖLŠķ;u”“ļÖķic({’Ś{SOņŅ’7g¾žm_‡ŒÅĶKŹrŹ ®1£Ä(ˆF[Aą‡:©‡qŠuȐ?¢±n_™ŒÄpÓø;łöJ{ćźŎ!<ŃŃśYJżé®_5¼™ÓŚn}ŗuĪåī.Ü)–oĖ4ēŌO”éfAŽĀŗq»”:BµÜ(ˆKQ xhLėH 7*YB Cźµ@ń–v½Z}–øUT\Ļ%p./jӂ „a‰Q0ŪTõ$Šb®= F ¹>NVC“éž¶L{™«ęTŪ‡«i“žY„^ŗė²ęr:iņ![“:ęóRp€÷Dε£xh 4eeR³‚Āal,„`ÆŖ4 +ņ-śg©Ÿś¼ÆlR{’\6wŪgA9Ģ+eä{  čŚ4°1«ašs‡‰)¢`bĢj'¢ j’߈?`Ą|)Ź š†nėūµ£Ćq8IøÄéÜf}²ņ׏=aĻ~ę]Dē÷9³3•2¢\:ü%Z_Yž8{łWQ”÷;įŖ¾šdŗÖõ0ūœ’Øłł7ß°…³ŽmąĪ~ßńØė™/&SłHš»÷Ī»yagJ>³Ļw°·-ńH‚śIŗ]„3—‘Åõcś¶ˆ;gā°Ņ«»÷-.qIgmŅ“œĖ¼b[‹§?8nćc÷pZ3ÅļHņmĖ mń« ß¶<{}h½ˆĒ…MZłŖ«śBE”i:?“ˆ³Ż“ĻaR­ŌĀŖ¾Ļ‹Ö9ź°½–Õ±5v·ī8’fGļÖ£9ęF|~žŻ->SłčxųµÓŁĪ®µ¹õšSźbÓ¼“d5ˆ=‡KČȦøl}n${\_Č5”`CCĮī‘Kš¢øÄŠŽć®u=‰>]f¼õŠ7"—7*Ė@ąagŲ”:›ęNSgČ­ōüł Mįš™ā7/ł¶ådķéJż®no8¤^Ä„¤½Ć؊JŻõ€Zy¼¼W<¤ŪTīfX…UzL;“ĶP»‡Ś2‚$Ÿe&]Ļrå²ę{/µĢµ£ńxŽRo· ænę¼#{mŁ’?{å$Iv•÷ļfVVeeeĻLOĻĪjfµ«Ż™ÕĢ"!!ń²@±–q el3Į±ąµaÄ˶ĮXaƒx9րņƒPĘ B„± ųĆĢĆXŚ3HBŅōōģģLU¾ļ½>÷ŽŹźŖīźīzdÕ­źĪ/Nß>yóŽ›ēœĢ:æåØ <;å–KV>B5«Ņœ=į¶Ü¢Ī”b>ĄföŹRki’sŸe¼ŻĖ „ĘÖø–pÄ×>īö+Ł&=a¶Ą:ŻOŲoĶēĄČwįÜŖĄoXėŌ©»h;„IeˆXćp*ł éPū‘sćp[nq “§±3[kKݳ D Cs†ųVCāa·b$cł“ż\&’6v’­B ēČ äiŽ“PŪi$?.pe±Pk‡7 1Ńłq^MāqztRDÓ^±ŁĢqƟ÷qAyBkżi@>¬0ü†µ=š±6½, ­Æ®Łg ¢&āj:Ŗ1U!ūŌaL#qöœ}åŽÜŹ%ˆ‹u@€zW¦e`†˜!”ŃAL-I"‘źVĘŖł…Üę[”—Ųb«BÄö"?F6åśĄ›å$¶Ą Ø;Ń֙֯½¹œĢĖÉYśV]jÖ"ˆ8ņß«,ž·žĶß®äœüւ|{“Š­™1tā«mG4Æj")ßA*,=[.ļQŪ|‹Ņ$ü ö…@ˆUAć±ŌŻló4"åM†M¤Å;ń٬@®-Ķ‘åHÉ!Üq$GR ęHČÄD1³…‡1Ä<Ę Ū鯓 QqqČlP”¾÷ш±2%zœ'RwO•”Hr¼ŚĒŻ<ųhJ‹«Äį6ßā™@.Ć ‰S˜”I‰s6u9HX@Y“gB*Ņ’ó^õ8| 6]¾CŚŽ‹ćÉ:ŠJ}Ę~ ~sҰ{©›¤H3$|g[Pq$ĀVg°¦ķŪĪg5“~½õj}‰˜Ė{īÆlćė.Tœi×O\‰X£æ N!ž uķIäz¾I¤‘šCĖĮcmÜN JīŃ]±•i4ŅsSmō•ÄŠ##ņ©±rŻĪ•‰Ē›ī¼DL°QI%š‹«ŌjŒžŖ„¬ž¾Wńœ#Ė‘#ؾ¹4IšŪō·Ż D Ä DzqõŁl©R6£ń†ķ"¬  ±D|ćū½}ÕēZ `~ü<…ļ–é~MäIä6ƒĮĀ!Q+0ļjk9ų·‚æżäYød9ū z‡ˆ(QH ÜG*ŠĘŻĮ²ņl"Gšœ2dŽ®Ņā¬9{5’‡5½ŚžH‚Tm£{]7ĻUDi §¶ż³H2$ ātļ QŒ@ U vAHŖ)8ƒ Qqõq8PƒzŸ“Ä4śĻ_PRpB”8dżKjGD‚L؉&CĮ-ĢrrĪøų©—‚w]Y a„E×=~–pH–”-{•äćfĒ}„«SXŅ+‘Üw…Ąc[ŪMd„”KšŚŽl=åŲ Öģ""’]8×ųĢNAf;œĆÄVŖ‹L¦’šy%äĻv”HMŽÕš+dõżS“”«.O¹ų lgSkFōé.ł‹Ī 7ɝ8sz©sŖłņkĪī\¹pūÉWm$™Å"­½j"®>瑳ÜĘóÓoŌ?Ž=•„#v/ÉåRQÖf% Ķd.ūa ‰ļžƒš…+Ŗ$/=i;”½¹iįsīn4¶7[;[ķ‡ĆƒÖ§©ķˆ×V ŪŌŖLÄBćüĮ‹ oÕ/wķ)ž5ģŽ ꆅB/Ńó ÖĒaŠ@—ć_~(ų®§"Ū‰­ŲøÉ¦k!’8›‚ŒUF7qÓ YŠŻ–-Dž€Ė+8hŪŽlõ“¢½1ś é§@oņuą¶”o“Ō±•!¢Į!Ž/'Q!Ń\MAō(…jŹÄæ\ƒ€÷€°ĒG(˜@K£I©·» Aņö²›õ"d’:®:$»{‘KoŸMØ>ߎn…ˆsÄā¢ōˆc}oŽĄ:­éÖGń2Źu “Z-±‹„›o½Õw¤¼a;Ģć)ƒC”D<±8$zµĶĒĘ4µ ‰dŌ£)aO³0ŃÜÆˆėQ/ˆ4Im„nŁNqÕU U•ĆlĒs·ēŅ 82K›ŪRJ–#É÷®\NØķVeGłÕµÖZ•f7„ĄkG­|5©NĘĆŃNĖMHp‰C·@Nü# ÕSm aŚŃĄ‹Kģ©s EĮXŖIŚøōé*‚vŪÖ')wżžK/]õź_{ööO±¹ą,#¶Õjy¶#8^Z‰WRšŚ4[ž©Yøh"ād‘hē7ū0£AuCm$CĮ>¹BZ¢}’¢ 1OōYHYŪÅNŽH É”ßqį;t6 ²čźŖåŲyīŻžė{p0ą©s·éÕs”(ß>W6­Ā°c'™ZSŹ~k;’‚xD>Ū‘žP¢$ā±ĒįަīÅ} ē<¹@!‘ B”A(śČL‡(ØFˆf8¤nėmm„@…Ć0°_õ*4*†•pśĮNwˆļīŽcN›)0’ØOµ›ŗi$dž³}eKM4čÕ31²l€Ą,nj” Đʦ:'h”ÖBe¹©DAæż3Œż5 ,÷>³Y­Åi]ˆH›3²\Ņ÷†DĀ„ž(į0Ջ ~¹a&ÉI4ö I™ XØqHéīių„sĮĘuy‹ņW,ž%č^ģĢ2Ž4ĒCžv³ƒ8CÜ@”Āsį©Õ,2€¦Ī$¢5É÷–W““ •ėeG±ķ/;Ąm‡y¢eˆhpˆ)‰HP™°ÓŁŃ® ģiŚS“4“R3%ęé\ŅQ ö õe»¬’fÖW=i;‚™t7r9½AĒĀķ°”˜H2$3”(+* L±pÖ/|ćB·ąÄŠjV–ĪZkµ@xiĮ;ū5WA‡(‰8g“ǐģJAјTĘ)źH\ūäĖN­–cć©lgǹÓĖą¹x%Į9ēŒ‡‚ŽgŁLäĖ«ąĶź( ;æķŪŽfed„Œ]Ō’Æ™Ė#)X곁 üS‹‘×ÖįDī"»Ž-łq+¦d%÷œļ$=*©Œ»¹@Z8Œį‘öι6¶\ܰö‘yevžŪi÷·æóEŪ5X Ł!żfgŚu­†]k¼  ±ˆ#¢¾('=ÖV²·×Zˆ„¹bü­ū©› Å”TąįÖvä bˆ€(YÖiŖń[¾ ēųh!$ ”ŚÄĀ®ƒfgüĪŻ;=üž^5õ\CŸÅsųG„ZĖš¤É.Šļeś]MmcĘ/å6ßc*Cď°»/ÉKŌ‹ĪāŽ²# #mW”V)6ż–{‰›süh|¬³ķwHˆ ÄŁ»žõŪ»YĄąčGŅ7XčĻ óŠŌAH !4©cĄaų\Öł4µ"t÷Å@ņ‘ō"ŽQ…`ĖÆčPxžœO?V² B)7ūčL[ƙD¾Ńłė¬’”ß°˜W­=z½{‹ZĻų%.qzł8¬µ2Śß¹;`ĻĢŻŲ%üŚ.mlgi”+öL¢ē殗y .‰®~j”/IM‰Ü…ĒØčĢv›4#šžß ?ń ŽõeŻåŽöś`ūŹ@PgAmh>h»ĻļɒMj}lŖÕŒ]øn;žZ“ź)灰ųCy‰ĘšˆµJŅÓĖį¹8ćī\9Ż%,9Gʧkóæų\^É<¦AˆŅ:Éaš¤ä8jmĆA«Ķ¶zčæłÕšŪ’Ź¢XX•ŽĆM®Ö,rlš‡Ą_5cĻģæĶ˜?lĄ5mµÖXWœ[O:·^–gČīįŒķpjYP*ÜLø¹pSī“ńņ–·ópsēbkgž3_ų‰†niĘŲ("ŹV'$øPchŗŠ‚D\ZÕpį:Ų šCļ 'y\œUSŠĆ%ÄŹ[_MĢĒO »—ņŪū¦Į„fį÷oZr}ś3oŲMŖÖ$"fd/įµ÷lG“rйķ&Ź$źnR įŹN³mĮN»JĀxį[%<Ø ü¤ž5ŽńĖ8 „¼øčćAźĀ”ĖŌ įŠsńΟźŗV)h©±u@»„ēĘ鐱 #ØuØ,ƒ$åĻ0öĆĄ‹åÄ?›é~«.‡šęøłĒq+Č>¢‰Ų<”ˆVZCƒ!—ćoµ˜Š|%@ŪFšµ—q¤6Żķ†‡Ś„²D«÷>'Ń*8  „ ģ¼DØÆ±ążĻɰˆN z9FŲÄC”ķŚÕZ®ģƒ±‹ĄOj÷Śä»jņ­»ö“åQÜJ$>Ź.%DÕ¢īŁŽ±ÖŌŗ—¹¹PšĖ9mmÓLĀA@Œ‹E>µ”>'ęh_·¼$"] p©bĖ%u§Z+ÕMšo8 “LćńŪn„?ņµŻĆg}”īW”!š¦Č€Ī‰ó½“½d¦j°I¶}Ō2² BĘč÷ń§Ą³G®¬ÉwBtA܊Čvä%Wb‹Õ8\]Q˽›ŗōęĒk‚Ūa@ta)Y²Pų•śŁÆ—²Q¢NńP›A ]ęå¼Ę”} Õ“0Õ,¤P ‡DÆBßj5ü×Āw}Yw™õŒ“)0vˆL *9ź„Č2QM¾®§œ›ž£:Ų‡äeź\§QqU““ø„ !’®„· ¹!½& bšsN <§OAV Ķ m…P1Ó\V -ˆŁjwœ+ Ŗ%ķv4,ÕŹå§3„®^ZńŁQŒĄWŽk Ė2„l0õĮRņ1v±ÜņgvćÆ5ƒ Ł4-†ˆHöü2u«h×D“”Øpļ¦H9ŽpęöyO1ƀfFÄŲBĆHņ‘Ė÷ü Ł'\3śR–ü#śqZŽą—é°‰… G¢Ū±Œ2źeŠDĮ¦‹ūÉŃńÄ£ń.ߛąĄQ†ų€G·k†-F–AĶBąĘäėūUą9ąš¾ŗa;üZKį:ń‹Ė…D§ĘaÕ¢Ŗ$P‚ģ~ę¦BͤĪøŪ ÆŪķ%6 BźŃT%öĢJ¦™'Ą4]ź.Ż®” /ś¹‰ŽqŒÄ ‰¬ÄBŠhĄB”Xč¹ų•’¾ż ŗÓF„e0£Ś8ß- ›ēP»Õw by®Œ-ņ-œŁįōjĻŪŽ”–5=Énę@&ń.g€_q>}~µü ŖūßNœL b‰ĻßÜłdŒ?Éz‰‹Ø°Ž]^hņQćšitdŠRĻCDAB †ŗ²‰&¢:9ķF1dŽ(Ņ$§Ūīt=÷ÓyćZÕ×Äo* ”Ö,œ[ėB)’"c4>cĻHyĆvDµģčqܤ6õ\¦‘ˆŲ,‰Č厕ŽéŒµFõģŃķŌ½+]‡;D”7mģ< )sD÷3<`ĆėÜIš”¢7Ū#’”~=•&éģßöV  4޾&Z»%¹f$Ó,@tĻ æTS0ŃN¬}ZB$‹3ō š¬Ūķ”H!陓m\‚’Š:gG”,J–䜏>ėæa)'W—mG]kUōnŃw“H|”]JuĀ{óœĘO/ī|÷gĒĢĮmį~ĪŁm‡ŠÖģ(lPīRµ~!9Ś®šhsœkįuč|:¦­Żj# ¼‰–ķéšQQĪ0ŻæŠrECūBÓ±@Į‘iėSP[JŲĖ5ņµc"¹ÓC”©K”æ'ļ:96Zį“IEśĄå+M§[ßnىs5e„Œś×õ¬ö‰…7&ŲrŃn̵¦”ŕ{{Ł$švĖq+¦öĒpW^Š%α{ōEĮ6ŲzQŌŽ–üИ\&ĀM2͹_{Ė'u@W•WÕGWL1Cö}—ŠH8ä.hWĆACŖ™­~ćVųĮ{ųG_T1gÓŌŁhiž™m(PørB @^ō)˜rÅ¹ŌšĻŒ™:œ^®YŲUŽaa§‰°VL”ll ~3ĖPŠoŚŽced„µj"źGlz„^qn†žH^6'œĮ=ŪyXP»Ŗļs³M¶žÄ _&Ń$ÖéltąP³PJp" 4iÆ£ŠB[Ļūųžßš­‹eį„/ ÕÉŖMą>ŬĆ&ó\$2®YHN„«™T#B Ń«OĮҧCȏ2µ½ÓR,ܘQŖCJ\Š^rčØžI³ĄCŲT֙†^Ń p(IĖ9¤^l;¬•×Jƒ1tāKmGTk„Õ¦īĻ÷N>åÜ$&ŠˆLjˆ/ēnNMŸą'ń˜·8*Ķ„)Ā{ædˆ‚£rƒh½Šš…}BaÕĢqĶB3y¦‰9žžo†?ņē«g”?eC¢Ü_ŽŠjØ …F …J—q¦nå…baŖqhh(H~dXH#0W¤‘ŌM±ÕQ $vZ`­ę–ń.kYÕjpł®¾^ʶC®µ(qŻŽ†»wĆQŻmWRŽéīćō$QąĆā2u¼ĪŚāšn¦ąG„z¼yūTK±*,%žńC·5!ś} ×­劌T夓ØP…Ō,ŌĒ*ĘŠŽšgśŅ°¶ģ=XĞEØ—ļśŠs=6EHŸ IØS•)śń§RāļSĘøč#P9™:Ę ©Ų Q°¹ļ©l!¹T«8 ³Ü ڶć[IYat‡.ÆO¾³¦`­t™ŻĢ$2ą%\¦±µņDÜÉ\ćP‹mėö©6„TźgæD•ölPPhGō:?7 ̅Š….ӷ¾ē·ĆśEŻJrģx³ļuŲnZ]ŖĢ½X§(Tœ„@Ā!%C·ČW$j'a7cQ BÖźģy[1žłĶ#DiŸ…qj;Ö5‘2ęN<;ÕöšĒ@õSŪ1¼7©]|—‡ƒ»JDģq7åˆ9QÆ n;R„(.ę>š ĮJņA;Å®OØĖ5ķ'„C¦×&\Ż‹> éVĖQw{…ķ2„ŒSœ,×E+”Æ‚7eä:—¾ŁŽóH…agŚ-Q¢ģpł-Ū‰­Œ,€ųu=>?ł†~µŽ”ļŖ–=­Å­D"ų(»”R×·„ĆWr7 ųѸŶ.bźeOµåœ'æē­RŃL–fdüe‡†™F`*”“hJ$Å:eMÓĮOž^ųMoźZ©˜‘ėL¼”ĶųVŻQµVV@(åӌżÖQkjņ­KÓx•ø œcņćņ2]n-žˆ/ē.'×öxs›(ž8 ,.“Ó9Šˆ±p)’TŃäŪ`“u§ŠM)ŖRƒė~Ē4öĶ?©}HMĮŒ#×ä3šK“k?6°¤¼ ōō„čv»•¢… /lŚ„”*[Ļg+DĘYŌömG°JZ?j½xų ŪaŌ:†Ūß<†'ŁĶų°¼\”wˆˆ]ī*xÄ[ŲŽœD Čv.D²3MĶ<”5 Š"”)”=Ź Óa j$žE¢ÜMy ®šqܤ›vĀ%'5€(5'W ĆĪš„ļŁhed„R6ūÆŚI&ŽtžŽ©ķĄkM$.±äŸŪ/}†=÷ˆ\Šį—p“(˜Įeš?ŗ¼ąlc¦ų/7كD #µ]…®ĄLÉ]#žĘ2¢ G®žj Ę%ćõ%ĮO!«Ż†…§ĆBeÄBMÄĄÕ Cb!;vĶ4höNs–ķG#–!/”e…ķTkjå@ČĘü¼®ŪŖÖ*ŖéرOĮ£Ō`Ŗć©¼\ĆŲ1$+A®čj R¦Ŗ&B0ÓüK ’¢ĀØa·`†…¬Ż™ķé½|Ţb•^YVØ,ĒĀĖQkb­K ND>)oŲŽ÷„ź•·\=„!DM3•č DČ8ī |Å^¬ę1u›X°~9QP²Ls‘Œ@µ)Ź„„Øś¹Qn;sKŸVΧŽ„ZsåĄŹ…o'뵐–Ąčś>ē0Õ“¦§ÆŅpŗIļ@Yą -Šdh1ų<‡ć…×_½ĆńŽW„C{r4 jUØØ°LĮ8·Į1J³yO Č­N:k-; ~x~Ŗ 5ü,‹čB™š”ź§č2…ĄŒøH#ƒt?~ęźÕķßó0Ai\Ŗck­ø|·šsmoĻܤÆ_¾IYuv¶ä¾­¾ÓnŽ[5ż/„ķ[MmÅdń=?w8 kņ­ŽvuĢ—"ū?惣YŲ…[<޳®Bć÷^ŗśgyēžčŁN Özh©ąaƒa)©yc&“|yŌ:DA8^5’VNį*ÜŅ—CóL_JzeźŠk fdM†Šˆg\ÄßōRēß]YNŽ•| · Ū¬•¢ Asü­œ+ĖņY°Łiķ›bCc­ÕJł“žÆFĘĢļõYŪ„Ø5NDAē€[%Ō§üi © Č“€žką_źüĢk§`aąŲN|ńz”t/Š®•ra»óɝé#‰'ęYŪS#!°Jķ{tœQæ6Jf9Ÿ{P#š•cĘZ{d„󋱞ū”2±ĖńÕŪ®öQĘv±§$ĖK=R;å…T«2©ę ±@.•ŃeĄŠb¶s™@ķÅÓ÷[=ę Ń MéØJ‰@Ē ©z÷ ¼Rą“)>žķJŌƬ˜k;āŌ`ęÅó<ØÖTZüO’(I9Œ‰|Ć\/­ÖbōōÕž×±‡‚¹”R­¢žĄ®Ų4tt6µ\H|ćKżiŽū·²$¦ż¾é3‹ź!ļ~Mļ<ŚCš€†6ŸĢĮFM¦²&æŗ…+~ēƳ 0*ōĖŹÄ¢Ÿ³® ¼*··=-Nmg{āÕ°€’fįżóxĆŖ±·D "‡Y^jG¼T"Č„"fŖkl@ØY˜k#ąQēż±?鼋`pØÉńźĪĻ_éŠĪ“™Ņ1=:źæ'P0x<‰¶ !Ń`Ŗ\·:.huwų(>xĒHs"gÅłģ{Ó¼|‰pZ/YfINŗV„Ćbģ¢žŸkū Ūį7żńW©™Ž“ųsņāaėž¾ŗ BŒĄo—…@!‘•FĢ4 cҰP㐚¹a$iĄUŚ|f±*ēSļzį %<6RIŗrvĖŃ0 ¦¦|†3 $ē=üŲ…ßłŗ®ķŌ×CbŽĻ+ŹmFĪfbs–+³ž»8Z!–$]›p‹”7lG½zķÕ¾#ńˆƒn=qõÄ+ŸųŚOŒƒ"ŪŽ^j?Šp†‚ŌĮi$&śn¢HÖ ‡ÄB¢oŖWžĘvēmēzĆĻiRH%`ŚŽ:d8„µÖūæXĀÕiģ/f™!]¹¬OĘC!śY“Ŗ3?ō’ĀxĆģ,”ė_ĘUS2%~‚–[GõŚ8Ł}U½tĢ‚¶v«ļåO& ˜(ŁwT ~s©E[q­ K Ą~“Šųgś«³Ū|}ś#J1Dmś1œexįŃ«;ē“£8”ūü’‚²Ūå™PlSxˆ%bŽXƒ|I3~i vŚ wŒųŌŌÖ`jņ šõ Łķ’õ—š¦I£īש¶ÄšOōG"Ń4.ŪkdøHŽfa—ĆB²×õ \·”ą`4ų‘Š‚¹ x™.•TFjžjØĆhę{žoh;±ć¦(_޳üJŃø_I¶¼\ŽŸģƒ±Ķ²×*ÕœKDA6Ž‚r×R½u²\CQĮŽ1TĻ=ćōūóW}<ģSPīZʑ5cCÅ?=ƚ‚d‘iyOū]e’ķŅ·YŌ™$Ž@īX“O#oījü»yĻS²_¹ĻÄØ#Tå *GF›˜*iŖo%ŗ†ź®6*…ļĄ©.žc£5*ÉĘłī¢‘¤G,ڶ«°Ŗ²Bą¾¶ZsėźÕ#—P{Ķч٠]Sļåŗēš<¦n½żŠ…\ £Ū†v%’¤āœćrŅP°W²PįP*6˜:3tŠŃ¶śš«½6Ę!pŲxß”jPĢ5’T©—•Õ#  iģqĖLæš_øĪ˜“]Ö5”ß8šVœŗÓ¢ćd䲜ZĖN„«©†ķH±nεęӕ«p†~~rœC`ƒZ•ė…ę‡LP4ĶYč¾ģ”k#‰oūTųĆē d x…nܙ6źŚ„‰f”aT²P™ģ;¤&CąĄ!ŗŠ…į:€p^1]AV’oąč‚øRŹ^—SŁM% H*cŃG |…ŗ˜+ßwq§­l““kXÖ0[yEé®Ų€ `Ś@œŚ®ÅśČ>„l2ö²ķ(Ö_ęŪ“]”—ƒQ÷į\ÓNQM/LĖū¦K ½¦ÅąH<Š„ė³Sö-”^hģ XŲba—c«@³PQp#d®Ś;U`Ć­¶¾ļqŁÆ¦ŌU“šYłdłØĪŚļ—” Ø'i¤ĀFŗäŽ^®Š)2?¤2 ‰C“ŁĪpĮj¹Snå—oCqnķч+J”Õš\ŽķŒīŲ`Ķuåź®?–‚ŗ5u™DF¤QŖ¢`&U&t ½Ų¬iBšß’pŃä”S>Ø7t«æ@;dÄæSüŪ vBŪešWGr(0}\ĄwąmSy1d\c˜—i3üKu1c®.#®©‘Jģ>čņ^WĘŻ Ćļ|ŚrƒiYµĪ Ļum‡°W~ÓvĒQ Ū}pņ„Œł{f¤LlĒæ$1vQ’æ6”ūņŽpEF=ęd²OAG£.Ń$‘cXhĢš’š~‹ '©G3źĪ“Ž…¤ AcB ‘²OA‰®`ät°Ng®”‡²Yœ| ÆąŖOǼQVŽ$PZ!č%*žå†„²Ąø¤ %z\QēN¦J:pān\ ó§į‘LM“µN’Z5P‡“ ”ņ+ūSą’ĻŲ3»Ķ½Ō>ų]½¼a;ƒeh?1\.Ó톹!!»]ćpMÆ}ŒÅ„%zT-ZÓ+ BĀA—śµ&å9gƉd „śÖĄØ}ēšEIP^RĄˆšxąŲ®]„j9’C•‹›{ßUXUOĄaxPhžy-±&1Ä?EÄŠę—!l(ė¤]Ū8P¬ŗ£2®ŒM|¢-”ĒŁČe”_Ö®©³ŚZ jż&Š15wąoŗ{Żvx–„)ø‹@‚Ÿ®’RžäUo@?9“SS0-–jų„ŗg„†…ōė•Š‚“©×ķ’Ļ…baR×U+m©öž}°ˆ‚ŁĮM—ŠÕtźZŠüst‡–*¢ ĪÕe' Ņ!9TĀ^\žŁvÕ2²H/či:Ņ1B ‹ŽÆBŚ,@•D—}'-Ŗ„ė“j{-‹óņ†źSóóŚiU@(åūó‡€÷nŪ-OŒ½ŠÜļ—ņoķ[pqącßE»ŌÆÕšo¤¦ ę_nśÆa‰@u²¦ ń‰…B÷mõėNŌ ll„æū óśNƒLéA›&#ą\Ń”xn»Õœ\”øT$›MÄ-"%A+įŖ’-}!@č2¼T[¢GĆæD3|āh¬É§$Ń-iņŒ¦ -xˆ©Ć'—»DŒ0¦?¹©(E”©q•µØoē‹¶#Z!Ł”&ß°®Oµ}€„õUIøk£“ļ—ڵq< ¼/;ł†õ…cšiącR~įø»#ĀŽ7ŖQ ³šąā¼‰±ĄĢ[ō®°G 3£–GüÓšS·¤`2JA?j»‡4Fz/…256“Ó` T³é/ōT%0Ō«¤ę’ƒ†P'3š mB_’Jv>] éTĆ„)Óš‹¹Źˆ€G/¢©k˜ jƚ…$rČ"ѧ 1aOąüé@ČȖüKR¬ŗ£&äō×¼i!ģ š‹8uµų¶#X=-õē%eƒ±āØ5ėJ¾ö@ޱ#ņ½õåĄÆģ[rķą§…÷%ó4d„¦ Š]‰—CwŽ!& šōšH;j,» õ@ÜaŹ”1ķ„„ČŁJńĀ g“IŹŻ®Łčn ]ŸžčØ ĻøųTŽŗÕ¾ĻAĪ÷Nśś‰ R¢ńFPģ żF43Ʉ±¾„Öh v9S,,A(ŌĀÅ&cąŁŽuœŚ+ŒC%+¶īZ*Ņ1€ŸŃŽŽzf_š×öē.åW3vų…į¹C«Ō¦?b” ÉKTØēęÄBB į½ż±gpØ­+Õq!aȜ٫ńžĻ’}ę±’£­®\hPJ4 ½„~ęäŸm(HüąGĆr©b®ˆˆ…ōvLŹōŹų‚”·.LõŻ1“ ·ÖjWĒ­@ćyćB·Ø¢ ŸŗS繕 €]-»R6[{ņ1ęė\’q7w)hŅ$–»ś,,yy]ŸŗŲ7’ °{„ČBӅĘLŖ4Ćød!Y„> §Ā޾ĢQ¢_¾"%.ŁP3–»’é]h\RœR*»LÆ•ŹŁpń÷ž8üŃ'' «³ĄÉє„6Ü"µ›³?3h-<­šˆX>QāaķdąWźŗžÉeo£9¾ų_Ó<źĢče~čā‘Y Fu¢˜K¤L5c=™”,TŌ£”ąÉ¢„LApW_Ć{Œ`Å;tH”yŁÕć'§wPL’éI Ē„Ä^9J=sIŲćza$śKĢ =(×[…æł„šĒk.X ·Ō¶;ÅbĻYp0^ßaÖėR…’č5'™ˆ'.į©ÄVBķ^ŸlǵżSR~3cļ;re©öčeļŠ'6¹—€‡-gŠ1DJŒL1nÜĘwäŠŗ 0‰õØTośœGtdē®ÄGéz”ˆ?÷ø”¦w (ŲÆƒ:J{ż‘˜'4’™¦µY#ō#č»léCB;ļłxųĶÆ®Yxr•ä¶#h­ø8ÅO OJžsˆśļ³ūg„¼1|ÉŲŃni½¦\öŒ¾›¼’ä^Ž*~ƒæčõF~<²’˧ǦØK ˆ^4#į1<źāŽč|\ 3¶3“wąČ]ž‹rŁ·L³0•źNB,$Fjčš[tŽQm–µęU»Ņļ®ķŚĪgĮņ=ŪŒŖķO“ģäńØōž?{ķ+IvŽ÷żOUW?ŖėĪÜĒĢĪī,w9œY­–ŒI½LÄN 9¶& )’G4,)#˜y(¶ä„1Y„ŲD`Ź‚LڲC“GŒ¤(Ž &bŠŽA$°cG&iRžįR\.¹sēĪܙ[]ļ:'ßłŖ«oõūUŻÕ}§’8}śŌy|ē;Æļ÷lK©šIįó.õNeŪĒ€’,’L&vn•øŽOv Ģ(˜³ŠPŚ3zŃD%‚^C A (ˆ |U¶mt>ś’9ö„ykʐ‹Tu¾źvō$’¼}ž„ųõ·œļŗź–øŲLMĮ޲;‘˜¹rüZ”.<ŖŲĶ@ĮŪ曦żŸŃD;§ž¦P³ʗ<ĖĻ©Éļ«ĘˆJŁ!ƒ“` ī pzDĖ9’ĆOrŹ$»•1Ć/aČÓŖ $jļHHuĪĀ:׊•ęD V*ˬڃŁ$6ą*’Łk['‰ˆ=(^$ķ@X–ŌÄÖ&šó…ĻÉlk0_zr§Y.AŸ>TŻW%F½+¦W†3#oƱ—Y™š. 8¾ļ+N—ÅŌ•¢dAÕ”ÖŁS7tŻčĢõ]7ą\u\Æ£ Ž™+;.aˆŪ44 ³°¬Ē^߀¶Ó85.½ķĮ¼į·¼ƒ.ļöĶ'/,Ł ]N“čāš"q²eJŻÕŚģ'–?ŃT­æsײwf÷f®‡ū+ŖE¦ŹD;‚S’wT\#óÅ\¤üū¾Üea«»lÕ ”åPLB…ˆr‰€sś 8'y¾ŅyŚq„ėŗgnā¹5JŌó §Īģ‹’jž-Ųéb)N§ĖiÖ&µŠ…¼Šbę•ŻčZuĢäSæsžæģVŒÓ…!b­j.Œ:[-Ą(|N~ -†KO§ćś q=+ȅže¦O\Rj†Į„bX¢ō2"fĢSÕeaŻ„%ĢŚ_“hŠœ½Į9iģYŹTŻÜ'"BópØūęD¤D0‹ ؾ„°öĪŽm¦Vuń£fž—ÕŠÅČnt4' §½B ÆL³PĢŃ®IÄ ×0V=¾pe+™bTķĄ…Ńd¶Ń«­>£ģOˆ;£:7?^ų|ü¹ń–oWYs9ž]ŽėQ£ )'Z$‘Iˆ. ‰^²×¤pItķż‡_vtCĘɬĄ %žf”ݼKA.xYžƒ°C‰¹ė“ 8[/ū‰7Ķ’ nŸ*‰š‹*ˆgźĖ |›ŗ‘q?•ĆØ'× "b–Ŗvd>ķ@8«„ø,D$ÄׄųķQķ“ß(±­VųtgŸW©? ņēśņ‹śčžź¾`•§ī¬…œX¦4ē¾.“Έɲ‡ÜšpĮÅų‰Æ2 و’ˆ$ĪRF¹Rw ­“ĻŪāŌÓLw¼`’ėł¼w²Źœ‚·÷gŽ5 FYqŲ(ŅŚR†Q0TŗęĖš‡MŃeaŹ<ŽąWś“ ŚaŅXJ4 )W RĪ=é“H¬ Ų†F ±pĻŠłN«“ŸĪӚ¦©tĘÄėškØ­šõõ-³ĒĀ®l.n6׳žņ Or’FšŻé‡PUŽŻ)øŃUŁS‹pPų<ž"š×'.ö\J½_ˆ/_Źģ“¦żŒs Åi 59kP„±šĢĶąG9˜^Ä0Ā•īÕv:üInP”!`qO:*+cF]”į“0 wčQŠĖ’źō†Jm­-ą:…ķ°įŌ`¦F=źļ“ؚĘZ§ó’Ķ„Ś5{OTrĄ“­nDĮŖ“ÉDÜ8‡TĆķžz̓uā°7×0ŠXŃÄŃ&šSļā·Ęw¾=jö ń')€{õ¹«o½uÓVōį¶RŠūåą[{Kāw„Ø1ņo»M6²¤č58õńÆ@ABWœ“Oē\öłÓĻ»‘4ŗ\ ݟšŚTĒ„ĪR#A2Ż{5ü#µ¬) ōū—Ó ĒvnŽr2 grĆn­je©Š^ø²n0U­9ĒĆķ"źøžN#(Čåæ ü›Å!kw’pTåń°?…eŽ Ü,5EŃE)¦¬r, Gc®O„(d)ėM`“]Ś…9óśųW  Ļ£:ŒCpM)ŲΓñĒk<–Öؖ¹*Ė+ŗ2b]WѶęāKĶD#*;žŲžĶƚ¶b1 „ø5hŻąĶTÄƘĒÜūŒāmĄ’T‰’t‘FU~±ß’_ž›¼LL#ųNLõf±N菬č]¤”o¦ŠŲ£—f8D? s vņ²Ēeɦˆćpņ=pWv;õi]A~ƒÜ3ĮŗĄŪ*?„ ¢ŻœÉ@nü%˜_½č÷•բŖę\^ļXæóž1¦Ō„ųQąi^ńżÅQSWŌ,šėéźē_Žyc…|~†”׀æ üš:½ā:’ßö|܊Ʃ,ų-ƈ!g ėTƕĀ€qčē,¤ä”ĖĀ,‘\…¶@{Ļ!.Ū<¦v^©ßN±ŅcØąŅ6¦E§ź-¼ ņåÜōȀT¢²+ōjƑtßD_ļąõø¼#žm…-KēqZņź6DzÕ,­,~–…ĆŖ@x{bėŁ@H²Wź„’H©— āņ4ϧh„šxą5”FR³ ×Ųcž)MĮHčœä 2 *<…šsR¢^ru«~rÆCĮQ 5ŗ°Ä]‰Žģ"óZ “żXį‘$lļˆ8›Ä൘…b^HĪ©ļæÕ©;N×·A‚Xj:ž ŪO"<šOuXńÅ[±Gƒ ćµO¹µšU{PžzuI"®„B\)†M„īŽźõœžĀš}„āĒ?~c<ŌJÉ7R#ß©QšI!é$b”™(”¾Ū€?¤»Ś‘Æ* {¼<Ė@“Æ„TĮąŹˆ“ö™6µĆįśŌ¾ģśK߉Ÿü·:¢Ag+ŸuS F‡šøfĄ4š­ķ’ģd‘#öćĮ×Ńūō"ŲõīRÓ*ÉNIN–åĻęhI"®„˜!*õœī ¦škqx‚Sø~ų©1ü› –XŸ{W'RxÓtēõ©ė.łFĮ»&` MI*Ō9?0›šÖoĘmĄ-ÅscĢģ;MV0ó ųŲķŽ~Ē&ŗgM:Ō”#NY"•Ø›H šŗšīĆö’ü/š}ļ]ā”'Ž{<'‚xŹ[ÓLŻ<Ģ8N»ųłŚ÷|¶jV„ňø~åMzx²R_•zø;KĻõĆo@±DuŒ"…™:”‚o .)ēŒLį©ĀéDgäXŪ€'ńÆ*¦P¾6–—/•ž-Ž• ”©@CĄ1phāo½į|ąårXøÓźō©ļķĄŹ)˜eŁY e5–©qHWČ2H4L\®#NńK’—óC`;Nyļ9—<Æ\ķVÕ¬Eo=xLł W®Ī>dż ōg›“1²Vˆfįėxߌż?Wåš›*ĀC4 -æPo Ȓ(ś!Sć-'šĖ”Næ B"5q*Ū‘$ģuü”ń™×T×DżØWJ‡Ź$g!-!ė[ćįšg¾äüŌĶķˆ’Ļ¦>ó§•><“±§ņóķ]³ūiHc¤|ōty >_“Oü ‰_ü??ó‡ŗ§œĢp‡żø0ÅNHüHßü®«s!0ÓśA˜pšŖóŪŚ?TæĶ'_…ś”Õ!ģ‡²½č’YŁ@ ŲÜ-ˆ §ķ{×E§gēW^QŹČĒö¤ś(H’?‰ßs4ćbʃ²@IśOæąüwß° ɬ؅Ė!ŁFi¦~ćOńµ0ó–ģ:,ĮOóO nĄU‚?é˜Č£æņæ9üNwėmŒ‰Ž~4ķz”wy§]ī¢ģf¹öŖŌ’š+ŖN“oąfWæžžłŹÆ­ĒJVS P£›WńB6?}ČįŖ§Œ‡ż³Ō"n²(®q~™¦3pųŖl·”Yų‰JM "I”BBÄ"ŖįČIgÓQ:\F)Ś&.Küčæv~į••DÉ T%ģNäÜC~ł? CEA•ē…ūC“Kłr‰¼‘jj9 :ö›ųŃO;æš½‹Ÿ²ÆdgģFÉ[eÜRłW–Ķu‡u„ZBŒø² 梎_(O” Rw׹ł7£öpėpHo'*|j –=ÅgŽŌ` y,Ė?)č{’ˆ[ ŗŅŠ„(꼔ڱŠ(Œ*ŅTõa5„DĆÉ YĖ1ŃQ²A¢£‘ŖU‡ķT¹[$ćŪś)(T’)gšvkč M”qŪ;k}Š M%āaŠż~ņ:?q{&śe`ĻFo—–ŗ‰¹Ś9ÖJģo¾Šš{įJiüė©’€~žDśł÷¾ŁM¬~ĆŚRfŅģĒÉņ ųō”Rā<Øqu^ęȕrŹzyTę{@!1dO]÷Ńt,śsIįOé±IĘB² *ŻīēQkĢ­‰}Łłó/¹ķT•>ž=JłGv¢pIJŠ$„tÜS>ėT·eõu’š‘_—ÓÕØµźU{°µŹų·"ųUI( å-€ß°2‚‰ø98cź‚€ŃOĮސŁŲ Fš’•}uŽĄīż’Œ=Īd·ągņUˆłÓ:żą—_ŗį:§ś &Œŗ(G`V$S+uNȤPˆÅŲmŁi¤üdÅ;FĻ„BŃ^÷3KI· %”B’jžEł8„“¤z…¦‰‡©¾ū'Īū’ ;Æ;^Ō÷iĻüšżx„ŪT¦ģęył,:0ƒŖšØ ~X ’zŖ$ˆ'3öŪņSFÄŹqųĄ<|>}”•ĶŁ÷—CŠR™c šaĻ`†Ńˆ3՝Zęõ{BW¶ŹsÕ`|4”¢37ƒ_H,”R@ ų–C}¦ ÅGĀaĘKb!õü•Æ;ļ»ę®żXvŌG¾ƒOTõß¼ U~W²LA:ė˜((!„fŽiØQMķ~Šf '4õLįĪL&?ŗŗeČ[%ķŗĪƾģŅJP DŠNŒz Ķę ż\X’Ö æ¢* ßt_ž[ąæٶłšV‡”WEDbį՜…ėŃ'ö5ÖF°Oõē§ųČc>Wŗ”ұ®t؉‚4±ˆāī÷œ¼ģŅØ¦PÖ)ŽÅ”GęŸ`S”üŽKDTōŌC Ž®å$ÜóJLUq$¹*|Ć$rČõ6E”^SŻśŹu»R}ÄaŠ0D”  BŹ ą‡LGŅż”«ÅlŌ`ŃX5‡#_ÄĪDt5§=e?»ĶkŌC÷(‘HSD1āq »6āÕw’Ć€6Žķ!æĮj¢Ņ4ešCuüė©’żI¾·~ĆŖ‡ÄBB„KÉD9³ę’]ŒījL™%3Ī) §Œ…śerGŸYŲ”&&bfŅ#˜ŹhŹO:ā2C®<¼'»}µĶĶÄ}£e Öp¬‹6DŁAŠ­”ič—ƒLqTąĢ(HǧݔQPGö>„Kāŗ•HŸīC8¬ŗõłēĪ{·;£/^\ęŹ:ał»e7¦÷yģĆH's@©Ōu•®Ķ_QÄk„nņ’E€ß°*Ē!é”yHoA'ʏ“>*×~ųąžOUȳC.eg"tIF`@É8ĢNĮ¤!šĮ7œŸzŃÕmāœ‚40fņię¹ODdkŚ&±P”#u!ć«)ą0;nd9•Ä3®€”Õӟ’żś¤ul7ųdS>\ƒ 2O$©;¤Ou¢ŽTĪ@Ņeb€éKAgĶ? \×Ē„=Ē©Ć2Ėōß¹ā&é”>~ /„U½×Æ"’Ŗöe„Ŗ‰ŌĖKˆę@RAÕNkĶ8”OĘéq‘„.µ¬2­=‰h »›)ōžĢr^~°nfüŪ|ųµéŃyü¶@ĮD¼8“~¤„²'Ų`v™–©@AĀ!0ŹĘ#.„¼<ēØ&iˆ‚ŁqMś%'’0Ä9#†_ĘŒ‚[8§ ģĀ>ɦ+a±‡ŽƒAčhÄnV”Ü^µĒŻb1=2ĢZYÆģę0‰¦7BLē›t)Ø;ó'‘ĻgžeźÄݜ*;)”‚céŪb”Šń²ÖŖ—`¤“Ōcģ7Gµ•ŗź…•ĮŪĘæž61._ųTFÄĶĮįĀ/ˆ¼ļ¾nÕߐC1ežÅĢĀ ~—3œk2 ` ]΁š@Ūs’×GĪķ7É(Č)”]kĮ½,©ó‚bų³Ū¦Ī-Ē!;gź(fBSD ”Ż‹ø “ŠÉō¦œT}2ĖKWböi„½:CK*“L¤ R©O„F $ F)¢AŖSČnPS±0…Ēšė:ILtNéśZ58u“K¢×ņ²ūł÷Š;ŚoĪwÆBR^“¶°g ō‹Ö÷w]hÜvųµ9“ .ĪA>„īVķų|źįņj‰ųućč%9ßć$؁ōKėå)„ė¦`Ō£ ŗōłÓχxĢB/ÆÉ(H嫆¾”ķŽė_ÖĢRX”‘Oב},ģä,tS“ “lйdö’Sį&—+‚ĒbRKOMŌiĻ?;1¬Ø'!|åéŖPJépSĶ?ĖŠ=5™tÖō™ķR˜G9a//،…1&Ś5Ų–Ī÷ö謯²w½ ‰ś„ł˜S#ŠR!Ņ« 2ާR}ŸõK ŃjōYh–łf}Y;EžU“—嫚@,Äuž ü²RßSh”Küž©Ć·~ĆŚ>0®„ƒ,¬ M² "ŽŌ)(÷¾™ˆµˆX&3žé=ēģ&œĆOĒ2…Ņ“ˆ^YŖ “„-dISPjūz8G X˜„ƒųGÉŁsŚDŽĶ“5|wŖX„½Ē&ŸT:ö”Ł%bČØ ō@ØŁ@š‹™…Yžhž‘Ü-F  ;CyÓ©zq+Q«^µżš{įŹÅį_O„ąœ‚·óĻ0l€|#µ 8$Ją 9™}ń¦ĮÜ¢-&_Jšƒę–É8Œ~]9ƒ~ vcTVl ū¶€#“’pœ“Ō«ĢĀ€ķk J¶V@`FAW *hžŁķqĪ«ł·HTr0KėOŻŠk5ZņŖEü#žI Chž5ˆYJ&ŗ•ą—!Dšós u"&°™‚mĒDĮFÕKƦUŁŌ~Ųļɜ»”ńļ¢ĀÆØJ‚/ÅĢéWć¢ĀoX„㐂˼ĮļÄ<"ze<»”ކ"1/`³)ą*Ag¤ē‰ótØ«Ā GA8ē‚Ē8ōŲ`ķ·E7YŽÓ›”ĘʙMŠ’d‚(Ųµ)µ'Ż$ Ē,ł©8  qV|ˆ[”t†[1õ›ę-cD%į-Q8‹‘¤ś IQ‚€p˜2’„Šæ“KA7µ·6åķ5F,>ō4:Ų×W~MÓ-© ~x6ų×S% ü ą[‡k•Źœ™›B\ēįoV±–ŅT:Ö#óČˆ(GZČo3dž7‰=§RßÉ ¤XF!Ėā!1wΆō(0ó|œē„”·˜‚ŽĄžćˆ’B€GžÕs°{«‹§«\Ą¢z6įWTW©[ˆ’ˆn]žywkŪ t•įLÄjq8 r+Ŗ$RòĘå=ufgÄģ rpf,¤ä”KĮ,‘\„Ų&ƒįņ”8"›—ÕL ĶĆČ@M fŲĀČo؜¢hū@][”…;]d‰9śzņĄMq&9ćxŗ?,ĮY/˜Ņ”Čæ’7jŪTMØUź”b§@Į‹¦Œˆ3āP.4EĀč)KhžM½e•— uōŗŸ*$\ĢĀ€ėƒœ…š‚œŸ)Ńc”*©qD~’3±Į|e‡ Zb*Mį N4…Xt#F‰XØ(v]ʖ±c-£jW¶\ƒ£Tj€]²õ*' ,Ą!]ĪHĄ¤k)ķV±­X/åX#N4Pgēr«Ł-øžDæ®<ėüė©–¢ LĮžz8¤|"ŠÕøŃ<³K‡ƒŒ^:‰Dhč¦Ģ•tŪV¦ŽÕ‘TšĮä’ÖAqałsNARĮ¤-«ļó$<ŌąI&BA¬IFŽ©N¾ä4ń$CūŽĒŲäWœL‘'3¾ł 2(w¬“£Ėøńˆ‚lėk[Aų,P°§yqXŠŒ±‘"$¬¹žB‹-ŸmxėYéģ:ĮQ’3>bŽė$tņķłÅ$„—,;|–ū2םźÄh[Õģ†XĶ埠fĶŗ.$r°)ŠFńb­æģ7Z”Ż\·Ū[¤­aNĮgK„ćš×CüĒ3¼&zÕWsl½,WńOguÖ·_Ó£”cā„ Ä]M…µ#f¢K 5‘Śm{»A<š©^8z\s ųĆ ;¾éĒB“ĢcՀ„`&k޶­Ōö°@ĮŪ½J„īVķך4‡rčq.SźB!Ŗ'ĖĢ#ŹÆ¤åā§ĘĮ~éFwJƦlŚ% 2¾¤¼• Ž f[“É£H!–阔Ī)ŃĶš)Čźö Ād'žµē†°š4>xތžˆE×FÄ*e½OM2DD|žņ1qō$“įś*6l»µe |Ę)ŲÓ8Ī+µ\Ü!J…ĖeąŠ3('>é?Ā•B»Œś1Ē“B†‚Éūä§h)x Å·Õ±ŸŚoJȔ¹ÅD¬P“£D"I‘(8Ę£ULį%ė¦ćÓä`ß*ĶZ#{ żk /1jU^4«ŁS׌Ä1žŪ;nĄįšvšWՀPˆx’{¦)ŲS†CŅ’mģ_“§Å&zÅÉ fT£*Ķ£T!†N /ĶĘÅ vH“‹j5Ó¶ĖvõĆGž0 ߌCZ@ƀ J(¾D pɀ-š•Ųv‰ĖįšX½„“²—ҧGźą`-Ģöęæ@’Ć8E˜"¢\źHų ‚ÆŪĒī̚97N¾: ā¦8Xq1¦ŅŸøĻ­ę`Ķć33Š‘¤xĒsĒaJA4‡ĆwBU Ģ$ÄĢC2!®ó’Ž‚ƒz-¾Oäū¼uóPž–S”|»j¶Ģ#z˜1A ŌéÄéŁėp£Ó¬ęŅGŸ÷ĪļŸČ īҽ§œė›źÄ?…=SĒ뇉½$ Ø£kbU,“ƒēQņ‘Ķ«ÖPL­‰²O}3 ¤xŽ9öCxü`’åf}Yßģfµ{³¹Ŗ„™Ęį°ĒBÖķž;Ķ®›ŒĆ/Öo† ä“›jnCé'/†w>øGKÆį “ø%PS°„.;‰Z”ÆģŒ…?’”ļ_į“ˆ(®I”‹®Ģéč¤zqńoŚ?ų|ٵ\=L©×®sI;9K¾8 „“ŪjF ń‚XHł•ډģt:“fŠM‹ó­!tvĢ8A”ąēøi įĒ īT­Ŗa&Ā›?¼Ń«ÉŃųwœŖd†>oī ”īÕoÖKĀa&“ų±čŲ_=`”%ś1Fä˾O¤@±E2Ū”€ū+ŌZ+ąJņ^AvæR6bPˆW„d9Tŗ Å" Hfd¬Šx td‰ū“‰z$b©w€¶"äŠĪ€s@¶±TĒzŽTāĄ<™}”—Ą‹ūj¾›¬G®)%^>8Ž«i †ĀøjŸv*Ȩځs)õ×FqnGĮ™$†j¬1=_Œīļ„:ęžĀsżzXŽĻo?÷[ŒZ@&¦Tļšź²čö­QA`_ąEś {“•'.S0JF]$»9)PŻ^ō•0#®qSüę‰]Ījw„‡ńŃĆäč$OSūūā0‡”8Œ ķ'Ŗ^a;2ÜŠ8 ŒĆĘćWŸ{šŹÕćŖ=Śi¬jU;0،vBÜY_”ĶžŠ÷=³¤|Ļń_ŗś¶‘Mj̐kŃ}_įÄøIćHž.6ļ2Ńę/(8ģqĮoESš…I^MŸiNOɘT½!b„)}Ė l/Éą§tN#ƒD#0¤rÓö¹3Y¦BChZuOӄަ\}·ć5L˜–0°£9l “ĄU:}VÆj7×£ä0NJ„YNg$õ‰Š1ł „PkT ‹e5žG©©ļ[Bš;¹ŚĀQ‡m4­­9N»še<{Ś8f"¤ ńææ÷™†įWµ§'cžĪļŒļQ’ĻZ·‹āpąńU”¾æ7Å4!tLyGŖ1™‹ai-Zż‰—üO»’9š­+'¢E¹b6¤F 6†Ąõš±Ķcįš'%‰$āxÄ]uC“ČÄŲ3Ž:¼ŻŽ(śī=ē&²ź½Ųi¢6„9ł¾+į~ĖhĘHžZ|/Pų¬u‹Ž²“®‡"÷LŒr1’”Œ7āÅś,E…vjM9QSCą©Ņ©ĻBNĮ€ĆPĢŒ˜‚“äPōd·›Ę ט”ėÕ.ŁÆŸŁ×Å”Rz‹é£Æ2ĀvIĪnĮ¢z[ź†^ZŲÆį$Ö8üĢö×büWßø¶ŹŠbę :ƒź&CN«>XÓą&9Ųā¼š4Šü»Ś8¶Śš#ų5xįł(/‚m•¶œe$DÕl•6„9łŠš~JŻ­Śżź•Éy/’p’Wć{ĕĻ×n%€-ĖĮį@ ūkĪP[‡†eœ3˜“Œ:·ˆ^D¾ĒR‹ )ćM1’ę›öł‚×E ŪńS’œ|܎dŹĻH¢²&¢ŅčŗlĄ6нøeÆźŲ&źWæØŃ_kä8Ģ÷˜gS½TJ#Ü1Yš>ōYū/’+aaÓØdW¦haZ‚ĶSߌyĆÆ·ķKbQKknb/¤ŖįüŽ7ūŲü&Ø jBGü JĒ܀Wā{ŒHą‹Ö­VZ')wŅ*P0īxä|Ģ sŒ¢ƒ’lŁüœ—/ö rHŠX©±GHüČTf‡É§­e,$ų1}¦)åÄB ņDAŚ@B‹xpV¾śä·@™|–¢—²\t Ł—äe։÷ģp6‚·gą’…Ÿśū§ß½n‹ÄüCž†yf¦oæ|¼·(EWęæ]×łŽ n²(×ķfeĪo…Ŗ”I^ÜĮÆ4‰s  J-jóFt€ń»Ö­F2+ TÅĄ3v꬛BC ue¶Åܙ‚T\˜gAŽĶļx>4hĘ“eó Ō3;Ü-ędęc¦¶@ džQ½Oä‚ĒeŖlPZŻRĶBĒ€-VxżśŪļ(8¼{ł?‘OęC‘’)ą˜šm¦māgž„żļz¦Y8£¼ŲHœnģ\;t‰8=?ƒ ž©ÜĆnT½’ęQ5 TŖĘ,œNĮüŹŅ,,¤čź÷rt/Pā^ż&Į¦63GźĒ[]vł'ΉŲõ’)HÅłBWąˆńF`ölD,F‘«ćzMņ’’­ĮÉ`K32P“’S0£i“”Q0ƒ¢ĻÜĶąg3 £¦ŻĘś(ņ7¾j˜‚Ås‘ē{•šzö9ā>”Õ ‰^>1’(č¦8×ęžź%ę림—ćGE)m7]lć°~rµVokW½Ę’Pźł°›UÆdT 'hG¾•k<'G˜£ū×­›ž:e†į©¾sõ¶~ ĘßIQÜISP3Œr.+ĘE²¶Óóˆå’čŌ~ļž§ AŲĢNÉ EĮ.’RmJ—‰¬ū¦ę_Ė€Mvm{ŻTćuŖĀyØB.ūöxŸQ0ĪXČ­ś©^r+Õ) ‡õsö_|­œ·Ģuļ‡XY?1ƒDļ՞qLŸNm&śłŃX¦zįˆJĀźvm˳©į~«S]œ³¤]‹ī-N7éɱ8Tc€Ū°ŠQ^åAŸĖ½b®£ØBŠŅć˜…An‡ ƒŠc’²ųģ :žļhŠX‹—BNa‚:ēO/Ļ›¶€ćŲTkõ•|gDasT? ćQ—H͹4c”<ß|UÖ $‰Ī£McŻkŁ4ѹ‘I—!ˆ5ü„„ƐG‡.ūŗŁVՎNY„&±8’h›4øÕ@se`ŽjUB„hźłų'Äuą :ąŒ €ßQźū«Z¶«5ńĶLÖ;ć{W?kŻ¢X¼?‡Ć" Ęۊ)q.˜sš‚93zÉą‡œ…䌦3¬-thKØ9»,ĢP*»y‘‚œ‚“'ķ¶-*d=‹lvUˆi,ĢSJšĖ÷-āž!ƔČwšhLRJy(tRž_¶’ż—½m˜kŚ•%®*ž†fėøZ?¶lų1|ŗ!ńy/‚½ķxÓ·ˆ(øÓ8U¹ÄĢō'†šž!åJŻ­ŚĒ-E|æ“Eõ®ųń†pH±ŲIgĀ!Ķbne‘‡Āq‘†knń§™SwS°›Š„ «B½WCIBłå ­EBŠSĘ<ÆHъbż©,›Vä„„)•hŸ…Ž«j%–ŲĒY†6Œóņi`Ɖޖ—ŪĒƒ0(ĄoŖĮĘųŠčG#ĘzżĘ7A^PµŪ£-aNĮŪūÜŁ±cŽvˆV9é;ć{1#źóÖ­©8t‰[Bū)cT)Sˆe2ĘŗÜbžuYˆ.¹ż,QÄg(*&_‹)hs9²måöéoć?Ł=HÖU!Éórš“^oSr½W²kŹs=ā"!PÅHkvŹŪ^_+Ļ+ŠćŠhųfšāķ΃½=%éPæ-܇V½j.“ŒŖ˜¢Y(˜÷¼Sµ³[£ęP e„†Wā{GéÉ©¹?¹Ū­Ć<£B³ Ō^ņó÷p‹÷gœ¼Äpcć,2^qN¾įņƒW.=f—9c¹ÖvŖ\µŖ˜¤qTźnŽį‡ņ8±Ó¹(œ&ż5 ‚ł>ƒ”!…×’fæŻ‹¾h݊h®ätd #µ‰¾R QŚ[š=R°(‡v5Ė3†sj‚ =.6™āNŪ.å‹¶¢» ÉG"ó²Č)Ø4  Į@H›Ć}žģQ0ąœŗkJ4MŌØ¦ć=oӐ”łjē9ĀXš¦D-5lqҶpŌĄak­Kš£ór',ŁøĀnčB–ļ“jm4‡ÕC`žł÷…ų8š[UūµŹ€A FĘ ²u#ŗGĮįw ‡ õō‡iįĪÅ 3Šģį?-”ƒ»ŽļĢÅ |0 ™‚œ‚-¶c‹ Ą@–Č6ČäÉäĖ”Sų33žõ D—Ż<«h£R“ “ ‡VąU¶¼2.^š“ö†:n$žk¶{M-΁›Ģ9‹/īŒĻc½htkĖ*a½ «ćŸ—ķÖy¹¹#ė(m.…øĪ’·{5Ģõ—€Oń;cśģT²(\3t{9ŗ(qÆ~“ØVKNĒu )ø .b"F\©ŠGAJ²F¾„%Ń̰–åŖ[PRļOD9QP麐?ĆTHAŚg'Kę"ķl¶Yõ"ēW'1ƒ”Ś8¦kēI,sĶ-1©ƒ=8ōĀI­­śBŽŠ…·j§µ¹ Šx½x1ᳬÉ4cĻˉHŸÄ ŹkBóO˜µ-Łō§‘IK‹R™Ē–_hųyÉśh.ķśj} #Dń—eŖ2 q=+(õęr–ˆ‚NU«ø¢ē¤Ö2ѵ辯pŅøIwīŠ<­zŻ›Ø³M"VJ‚8ˆT”ah¶’ˆy”S¢ózšhž‘2 ź<ķ²(čKNl„Dm™ŗ`ŒĆ–M½Ŗ^čX†&ńž’rė8Hx]3Ą/[ą3"B`¦ Ā8vüŖ½Ü6UBශҟōbļŽźšhf„1zŗ\Ż*¶^r½Ó½ß³€Ļ[·æ;)QšųHˆ‚2O>!Pź&ShąE)B†Ü9™ © qȉ ū5“ “M˜‚§G”™JPz»}¼×FƟ… ȏū>½hlOēŠ›¤%ĢŲ“ęāc›\ ù7ź%,źā©B>œÖĮē“Ó&J,7ü]ń=⁒ϺµŸīpŲ§Xį4ŃĢ˶ˆšFPŒ¤®Æ ‰(ćcņ0§ ‘/Č)Øs Ā„m¢E“ma®Üói?€7cē“@óļēĮ¾‰„0Æ(Ö°½~“ōõ­H#ĮD¾łaՎn”*į[Ą|œJBÜQźīP‡Æ—&›ā:’ßĪ>GŁiŗč©„XĮēõZ|/Qų¬u+övD,ˆČG ō˜m5‘qBÓQS¹pX A… Œ‚©)(Z+DąŁ÷M[)Š!’‡äÕó©ķ'č$8KąĘų×I ~YįŚkzHŗüĶ[Tx­ÓE1¢Dē“1<ÜŲj¢Õ˜bÜŗ=R72Õ“ÖŗźmQe Tź{„ųµ‰]ī/NhĪ)øS•2¹“‘Wć{šÆj‡m¹Ćį Bɤ”`šjŲh¦ŗ’b_¦ óŅWŗLĒApQc¢mŻ(ĮŸ»åéŠlŠ, K”–¢fĄ:Y†f6醲Ļ5Gš¤Õzp½©}&÷Ņå/ĶņȟõR0NĪĖa4©g']߬O[TØq8Uäż_XėŹ·De<‹ÅõzÆ$ĝ6„¾ųćZ ¼÷æ[éZ.¼ŌŖ'x%¾w+¾wjģ?1÷«^ģNcõ³ßä5ŪDT ĘÉŌ,ŌP45’š&Z&ź&ÜÄH%…ć=—NŽ{łä]¶·RÆZµR­Y„:'+‚õb˜Ōn­{ĘķR• Tź/W{ŸĆ“~x÷@!p˜‚;m„]3¾w#ŗG,|ŗĆįęé£ĄÓ49rdĮ#˹ę­Č8ŒG”qŻzüž½“ß·wņŖ}r¹ŽĆ.[ų„éTķ~5ŠÓ•~“¦Ł§]õljÕNÆŌĻ ńƒ=ē,ü÷€—”śĆJ}“WÉł·’püÉ!;w«]ȦɈÕōn#adŃÓ­Ś’·G÷B%~×ŗIį¢žœ®t.[ĄÆz½+RŪ¶Ė2õ«ßaųGW'»`o(ÖK|ó„*ų)Ü5T”A-Jßƽ‚:žÖ?u>ūūŗUŏŖö}ŚĶ2—kķ‚©b’”śTĪæž>C?!>Īåæ|ų).’æĄ²°£ą‚¢ e‰ģ”ac„^ŠīĄ—¬›Ót%8l$l¾ģ«÷$šęjVµ„jå¤ĆxąéŻ ßvéń 2R®ˆŽŖĖJRMššĮ8“šŽvަŖ^Ńģ*å~‹ó<+śįŖĪNóŖz"'Ł3}xźĄĄQhóe/ōī_ˆīū ”N7E²ī4YŸü£P&„&En¢Ś7]>&ųi ҵm}łrŖŃæAšHU÷“„D¢°g¢Ćõų?œŸūv·ź5ĶÆR©%ؚŸ×ųAÕ |†µ Ģ4‡£;ļōLéjxßSx\æR|Żq]śéo3$P)¾i’~ Tž«¼œź‚Tˆ‚“葳°&@gK85“kų³æé|äßéca$χĢ(ĒiÆy+Äü^5­±#³:?Ōɋּ”ś“A ĢT$Üwš›EG¤M–Xnųćš­śM ø;®D^jś)B‰–:~Ͼ¢8”LfŚĮ”ė±PjžÅŒ4 6 ä»X7ą%H%L£K;Ź?ņϜ?ó-]Ę܍:‹ź–l×uŽŖÆÄøXzeĶÕ8¶S¦aQ;ņĶ%¹cŒ„°(¢oµ|…T-MBÖ^xßTˆš7kF«„ž,f¤Å.ķŌÓYb‰ēĢcOĮ—ųČR=õą‡¼QH&!„A˜H}"ŖīBG4 ŻD9}>‰«^ķ4‰Quørźu®īj5«ö`SµŃ Ü©*Õ¢ń„ ¤„ ĪŹ_8įŠ©·ƒś hŹ'˘² ųiÕė©B§±1½ž3Ž/-l…`Ī9üDN>䅌‚\ŠüŚT$J͌GQ#¤b'aR2/G*LŖæT-kJ‡Y7Ī{5•©;mˆ¶„9IßÕßņkBüż)u·j7Nbm~ņµ‚óņZņś‘§õ–Ą!¼ÕN¶:KŒÓˆĢWšFW4ńPźµ.ü('€ńµPHóJ›t ©ŅÖ“A*Qių9\} ¹iˆ4ÅY„T8„aĖ ¦–¹ŗf©ĮL”¾ūk”Ųjļ«Šv€0§ąķ‰}ī<Ė,¤€cõ׊g\µWć$8Š®B/'Æ_3pE¹Ÿ·öŌiÕ ]TåķN Ź;ĄsęÉa 7źøŅrc5³)šõü3ƒŸāóKł“Q0LÉn/Bę“X#*}fa6['Ńe©ąŗ.Ńj9!crŠįtƒāøXˆEC¬ć“{åV «ź½øŠ2Ŗv`ŗf”`ŽóNÕĪn„f»æŒķ[ÕŅ*;B™+X~Ō^‘÷ŽŌÉc±*öW0ɦ+Rf¬ĢPāäČ8¹fž,`„€Ō@¼4‡a-é£`”óŒXH‰HÖ4u®)˜Ą“šMA»— DJ§øÖ„ŸŠÕn”`ÄnV½ŒW­j¦h$•ŗ[蹓ĄėU»¹SW5A!xR‡²I:E·ä=ņē‹āV4Õi±©i ėõfÅņ$‘BSK Cā²h;ęV†@0’²OĮe¦`B”ŗ"–Sˆ—›5 Œ‚^Ā,d;^ Ū„)`†nÕ{V²l«P.ƒa;­G›Ā˜×üŒ~«j×¶Ujf8µ€ š9;Ņ®_7Ņ{”ĀBF?g—Ŗt ćt–šaʉ«8ö ‡ ^IĘ£©ŅĒ×]– @„SBO=@AB`œļšĒ,$(ŗIwŪ ķ¾ņ{ør½źMRsóābӚ{ˆēĆnVķ÷–hó¼ !²'r;ū¦`®ļŽ üŖż½hjP(¬Ś‡ÕAÆĒėåō>…é{ęĶHĮ”§U»¼”ž’¤>·Ē‘OĮ:/WDƽŗ[ĆŠ€)t!! ŅģRēf„~NA?9Ļ;ɹ5±Šm{5ģķ9T70o¢B l¤ö^p“tigźUoǦŖbź”zsi3ļ {’¼3ž—YćB‡(É~K (;ĪV¢“ū“/7©\>ĖŚīQzœ˜žXįŗqÜ2¬žDNcŌ ½&šG*¤J1e© GŒ8:R'MĮAĪB›ˆ:„P u6GĒBŪ‚e,蛝¦]i6VvIōj5Ŗ^É«J13 'āķ*=« ²!ZEnEg„p|Ģeu Ž…Ļ‚Ęd“]-z+hµVĢ>ŸÜ§üĖĘM_Į(‡%)Ū‘G‰IJnÕD‰H­’·żz”atA˜±r›F²Ō Ł%ń/K„@”Ē8¤ž¤NŚÅ!±ó°”AčŌ`ŠÕj:=7ęįU{Ļ¹ÉŚ8ž^ģ(8YU‚ųmąƒōĒap$ēĶŁLµ²æ‰¼¼ČzĻń_ŗś¶5O*ņ`½¤Ty$°ķĻÜł¹ä¾'įK<®ŻÄ&įš$1Shź¼R{ąXš‚Lć•L5©Dß ‚%ŗ $Ō‘3Tišvŗ•łf!Į/ ęŃ®&ĢĀ䁔7M“k Ā=GT{śå8ķŖ]˜C";¶ŽŃ‰¼f§EUķe|8­ŦF„n·,¬(zź€8ĖĖk „„1nV½7ģ8u‡ąAk8?SxŖš{¢ÓėÓ24’z:ˆ5ĶŚĶh#*Ż„÷€ųWćöšõ a²öݧ0Õžø‰>öXjĒj„C„ėĆ„š‚ĢBJ„½Œ…”Üœ…Ļķ;ĀD†Ą–9i:¢é³,{tŲcüĶF¤»«Ż½ĖJ"–”MT‰K®øR¶±]Ų©ĘÄ.86±QįÄ?ƒ¬²YČ866JLdƒ­T `….“EZķjÆ»·wµ»÷vĻōL?Nžēœé¾=sgīGĻōÜ{ūæßž{ś<¾ó3ē|æŁčŃæ!ŗ5Ęīäü-@ŹŪ»`ģøüūŠ\7²ė5šqńŃh·UxŀIŁsŽ[xsˈ—RmIšiqŖ1ĮB|–8‘yč:Ń3äō°Ōy Ūm×_Ź4Ŗ‰ŁéVm„ŗID¹żķ74‘é¢hŽ7DÆ?=Ā@BG‡a'dķH°Š`\ 0 sÖLXį§6Ł]ŚEjvØnäD”‰”'9’—Œ=°ķ³D7nÓ]Pp “ŽO>ņD(aŲ(|¬0‘%§Ó~æīŠ”,Ž­œW“\ŒĄ¹Ūc“D¢¾ĢĶĖ‚4ƒqx08_רeœ†ĒĆSćp ®‡z'$š£”Ł5ź¦Äö®–Ļ.OȅZLU+yG°ØŅņąé¤ĘŲ}}œ’3¢3Ćzc ¦Ē?÷vv·¶b‡Š2–‚)ę\śAĆżØįŠ‹¬mŁ<.ɞ2£„A“Äų1øy‘›ĆÖŗ1<4:ﰃėt2ŅÕ@æč ąiŻ>„Ū+ŗ•ēB‹"yżź‹Ä›z-ļvƒr!ēļ"j$ŸƒXųź¾Ę*Œ-Ē|…45ræSPq‚Ķ~‰iōĒ^–~ę.®pā’õ—L^qC‚@±2ܲ4:„Ńódnć’ppž?¾ĄMį•@!ЁĄ鏭„µ[Jk§õµ O`qä…=ŸÓ’Ģ}sQ'¤Ž?łōZ9›0Ęõć¶fw${S„¼@JśmĘ~"ArĢĀJō"¢e"‹č¢·„ŗ>BōŚ-Nö;·ĻbīōĢVÜČ7™7<8Mv†\Üu=NŠ5źD¢²ÄčYfęī6 ŻBēhĪ߇·ĀÉ»6JlW|=’‹~»±pjFFyŸW ćø>™FönĶ^Žų1‰;AŽ.4cåBˆói“sJ’KŚ@żĢ–é»JˆĄā–£öŌɋOEAž g*/JuéģsĪR[ĀBA#ÉB;‰øĄ”Ŗ×dä1zž™i( Õ¾X; ˜łD’n­Ó6#żJ@F/©¬5Ź‚°`1ČÕōńĘŚ“+fš«£jvÉl««¶æĆ~šķĢV‡«zETT™”*åŒī-•Ą³^Ž:+ļĄ M%‘?&->v°—‚4ˆ‚² Džoq[‰Q‹oŅ‘K²#/½ä[·čg‘ō¾E·vĆ ”qžæŻą•©łQhՌ™/įłóFūdr[yG° µ@ ¤˜j£ą°ąßøā™zó‰ŖyģŠjņ˜lē­†’yŪ‘-m.čŲmēT–ĆQ§’Iw«³]v1·¤Y µĻØ£ŃńČĀø•čŅ:£ē4ŗB®Ē©%\‡•<ŽeÆŹ FVŸŽ‚õņ€F?Ģ{óƒŌń»Öī æ’CTĖåÅī-• ČĶS,ļF #MńąC»ū*’v~LA”mŁĆe{ER“,F.§T3æŽŚdį/t³D© d–"Ņx×·Ž0U§Jh¾ĄØEnŽG8’Ŗ ņ{/°jĆ±ŚźˆĖ0[ģæŻa{»)?ō3gfżnÕ"‚°ŠŒÄ5†»ī°8Yš¶IŌłœNiJžŪD»P‘,¬0jĘ?ŗģ B&nć5FU40 ™šYÖØĀé āė¦-ü;yŸN”Ōōē±Jö·xņŚ›ģl¶ņ>ˆ]«]– M 2Ūd@†ā›p~ŗ×ā|ąĀĄ’"! NÜqP";µ#ź ”§ŗ8EØŌ-`²Ft…éē—Žtšąq·K¾ō”©O&ž‡ŗ4°³$ -Kµuzčyė§Oī_zį`® œ×õowFYÆęā¾T)ļ ĶOxYķ^ŽĮL  N5(ŽK(­L‚=®d’L[RŠŪ)Ó¹’m ‡†D`‘%­G•˜ w,ź~–ČĆČR§fqyŖ‘djE#7 2#_’rÖB3Źé£ÅŽæų0š¤eN”ušĮTŪɋ|ß¹ēĘmĻ6ŒZAÖį*@øæ„|ķĶ>;+ ČaŅĒ:'$rĀŲZ  DTB&·‰öd³®üöšH©²‘ĖĘ j’…&–°¬*wŗsø\’K‹ÄœSˆUä(ĮBŃßt@#8r˚µ‰ae™ķ±­ļ?āä}Ą…¤rį E[qEg­zA¾‘U€°PWL4{FnæWģŁvšµH€üS,lKˆś`!ų$AØSŠ…$?I±PRŠUDäT•„YŒ–,‹i[V)ŹFĮZiˆŃė["¢f$0pĄ'?¢Še!7šł‘īv͚-æ—:#¬WĶ./śįØŚ=“¼mć)Ļš| QĀBó2ƒ6ę° ¼š*2ł<%&\{B”,ń٤MDy’RM‰@’,TTäGS#sɼɍic¼KA°Ķ—ō%Ū¼H@W,!Õ4ŗˆzŃ@Ńqn4ČØXyŸwf xŽd­¦æYÆĻ!²n”Ą B ž1jvņ>ˆ}Æ„ū]į/Ļt08Hęuä@©¶¬x²«³B :¶b¢t8CÅdÄ,sč1?®X ‹„Ū6h§ z” Ø,X ųa |ό,–42šĪ4'īöø™zn«9lœńÖ'3€ i`Ōjg¼Y6ÖV I ,”›4‰į>M–ł'¬"ڐ8ls†‰Fą0fa(mē%¢n($2‹ ø ĘeK‘R›’…N((+‡łe’B… z5ļvƒ“¼(”æśĄ`Lļļ¼Źöńš9ī·_@' z’vmT’¢n 쁲-I>”*ঠ(āÆÉÄÓ2µ®‡]ŖÉ Ž ó‰¶Ŗē³īv!©·ÄņŽ£ŠN*@XØPÆ" $öZ ~ŖÅü“eKR°%!ēŹŠ+qčDĀJL °4aęæ°Īn„4›pPĖļoiv²Ī²ĢAŃLKŠ1ö”f+ūŻķa-š3-4¦śŅšĪņ(%>¤}”kóŻų׌™G1š<ŁØŹ–ä"¬—®,›’…e&ąg¢ŌÅō„%k®ŃšZ5#Ko“]Ž4Pk•,6U”j9Ė}ķ1•ņ ŠBˆ gՈÓĮ]?å"ķē½»±¶a#ŹJŒ:œŚµ¹  'YØ@˜PrCjJF¢ėŒźY°1)8‡ƒ2āÄģĖČ;į<6gµü¼#Sf,4Š ZHĶyĒ äFpa@ °ŃNƒP"Š“ĢK³ęŹFĢ­– @V¼­XĶ`ęKŌt²;ųÕ¶W«CÄDÅż¶±T9š2X՘īp  ī¤ā±īAiDįģW åBŪˆĒ–•fŸN…®„āUų’…%&p((’¤ ąĒū)čH :YŻÜŠ@uæČāØŽŽłĘÖ”¦?ÉD6r£RĶČ,ę„›œ œ(¾B£©įžR4žs(žĻVµ$a~$Aˆ’˜Ēé–čÓ×øĆY+¦ (¹€}”wĢ{U u?ŁÜ£©—G ¬÷³éĶ;ĪŻ.-ļ 嬐ēĮ¶Ŗ„źģ ČC„įs«Y§­‡ÆS°X™9µžįlėF>ĮŒ®Jif1$q°=w#óPĀBóV¶ļ¶Č(˜=üÜ ļMīE±)°W­äż«įŽQ˜+c„1 ¢ęŒ‰XÓ³sUެ³éīw={źLP½–y{S÷ø2ÅĻ{7…¦•¹äĢm­Y#0CÕĖY812 f:ˆŗ­lĀŲW*@ø7•)’ę¤Ņ– k»q…RjFƒŪė%Ŗ-dī©e3„j¦Ž ĶN y e¤ł<Ćā- Ü0ļv³X·dSśYZvņŽŹ¦*å¼#X`IlæĖOÕ‹Ū°՜šyŽ ĘģoCUĻĘO­4óPsT­ŲģU¤¾½£ ļŒ‘GFy‡:P-.J6Ēkó\l:ń¼(4ŠÜÖąöZ•~čgĪäŻāŖa”Į*坣«lӛū Į›zŽ*“Ų*@øwōö3°ć!oŽÄ ‡w•ó¦o”BÕRŽHÕ+ƒŪŪ>yĮ]­vŽAļZ ÜūŚp©Ž3ŲČtiß³ņŽż^V}fŲn¼§›jv2ņ3fŸŚń*ķv?›­Į³ĢZŽG³T€°ńAć¦„¬ŅXe“aÅŝX~4ɬˆē÷.Q=¾ĮµņĢ×ņŚŌņ;›Ž€^Ė2ó>Œ]£"Ÿģqy0*YAµP”yj–÷6'Ÿ[ÆĪż(v›JyPh&ҲpRfŌŅUgft{¦Ļƒ<š‰·9•³Ų×ĀźŪt ×ĆēĀ:­ūtČ é9rómßk–(-“ ī)ń¹<%P°…•ˆ¢©—ĖŲ…FŃĻ/»ų±Œ²%nIDŻPüVI€p)0ŸmÓÓ~Ō]@DĖ2óa~ Ā‚³UĀ=Ø­†ēҜUaŌŽo{®ß<å ÜiņC—eHU޽ø-­|N:£›ŹTŃčBĖģˆ.'ļĄē¤é™ŚlgIÓėł¬U©V”j™ŖUÓ‰éÄäļ1Š@G¤oN„H˜yn>Ē·'T€pƉeн Q§·„ĘČė]€„–4ˆüYī.Œóy”Qōą?p™!ŒÅ7C“„.RĀäó"2.Ń >•5:Q„ŖN÷?iżūoŪ5,¬īūL¦¦’^" †ß—zø¦ŚFEVٳbĆ»*–Y1Ͳ4Ć4󎓊Lō™Ū9UˆJ{ź”k)(ŹJYVkšĄ!ųXbdj¤1ŃyH§ßž¦•÷&ņT'¤ŽO`N˱l½•Šw=† ī}Õ,³n™(«ąŸ,cŻ’żŖ¤kyļe˜Œl³Čī×#ßÅåōłŌ±ŌÆ,+Ąc¤3ŠT]öŌtZ*Ń”żź7ö5 •Ś~ŽŒ/³’w»J÷¬ó`ÓC¢ cT+`³KōŠwr2z˜üv¼g¤śŠø°2£Ūd!øX×’ć’Ż,ōƞOo8 ›aŅõņŽó>VĀ=زe‚‚“Ķ-3x2ÖSsŲlČZIj|&žP­Ø÷»Sp˜ųę_³ŽżKŒt‰Cõ‰Ź›’vļ³Š,w+ÕŅ“®jÕŹSyØWó>Ž}¦„{M„I8P|ß°dĻčžļä] ¦A˜ž£øä¢š# "1¶“°(äTŃ#-¬5ƙ„ZŃó>¬qŌźL6åx”U€pO)[ NĆš‡_ŸYN@ś.ē½ńE‘zÓiņńøä1ćvĄĻēÄ˜ØąĒiĖ^ĪaģķDdéō[oå½±łÉž­,tŪŪ:bŻĻt“t³\1ŖiTĢRŁŻOuŠ›]ÆĪå¼væJyPhß ¶<3"–eNß·śĄK%Š”ńøL$!"=§HŽõ# "AĻNŠ‘b§Š&Xx DN@aŽ{$ÓČ;‚^ÕSŠŖT­™AH®‡S-žOķ„%ąQ)"K3HĆ ·ŻöĘwžÉūlZ÷…¦ĮCj^¾B™gU¦ÕņŽ R™$ļrV‚Ą”Źź[‘»NB…ĄN@ķˆē/ŸØœ‘«§Ó]‹,œp Q@„ä¹Aä„“ĪČat‘»ćśdŒŃZWFD=Ę“TƒUE‘ œc'e®~Ź5£īš épŸ¬CVyĘ?y;Ų³—j«M=jvFźĖ_sę«tۈž?żł~c«į¢ė;¾ćö¤žų揍2åä¹3nī6e™…ĒŅnŻ2Ū*irФ…Ņ(p†ĶBĘģä}n¹ė­–€œĘؤĖoN­ØūŽŖŒŹ VH„мĘéip’ÜéW¬kāä)‹)H= ćF°°"ŹF °Q+•&āį䢊n ŹRĖńŹÖćkÖKŽ8Ł”Īģ7÷ŒŁm퟼¶ĄŪ U€p•†ßSOŁ„é:8ŃЧĪuŸĶߝ¾m‚jK–'ŹLVCŖń”ńū]ļæŃeš¬)±ų”P‰"Qo1: S@tܠ˔ي¦e!\•U kh1#€!ļRĢėÄņ”æ¦ÓUæKAąe]%pˆ®ё–S>dĶōč€^ĘfŗĀčZˆ8jŖL‡ē/łö¾–;īx,ļm-œ .œŚa(Øōüó6r„JGv”ø=”—?³µńć'ŗt|ēEŃūDć¤zō(«K&ćäĻ~›l‘Š••>sšSŁŻL”Š‚ 5ŖD1ź0 ÕňåhŌęŌÖĢ{/ŠŻ§‰W÷A»0õĶćuc   Ł–ęIĆź- <ŠNQ°ÅQ‰89€¢F–NV‰<Ē”ņ>å«‚¤˜+ė• œ$ü{Ė[ģ'čÖ[…;&R‡ź*p˜VĀÕŚš­ÉD‰Rń/1ÕĖł8ģÓŸ@GĆ2u™33Žr'®×y)čå™cf©Gnåā=i[:RĢ4dd0 ™ˆį%T0‰!uŗū)ė7n…ąVY§-ÄćR~ņˆ|N\'¶‰@Q†] z1Õ$EA °%Yh–M‰ĆiT×guųÕL3Y­fś8«€ÜéjĀJŒtĘuÜYķ‡ČŒqųCo;3ī܄‚żØŻnc;T©aˆ–ė×mß§#G &*@˜¶ §*ėė«ē;¶‚DÄČååĘöŽFTÉ2g“Ó*2/Ÿ‘ļYiT?| ē„xfz>[ųf,”D>M°u@4jźōóß²ī{ńŲ,lF‚^M ŽsŖ"k“šO¼KA|¶%ł 9Q*ó"įĒUŽ…"Xl›ŗp‹€­Ś&9Ņ!gźĖEÓņŚ-Ņ˦ĪÅÉh|VP|Óļœ™`Ö¹söɓ¢ņĘ7Ņ·¾E>ŲĶ$žē+š&®‡ļŪ†ŃČķąOē*E,„õu:}śöóēÓ „†·‹ŵV8TŌT8œX“QŠä¶PA–GĪŻÉN”UźĖøŠ‚;!i?Dź¤MžEW&#—SM£ŗF‡Jō‹OY÷Ü26o`¶?bŻŲÖĄśČŖNšė•ž–—’ō&Ņ>wĻmĆ&~ųį3™Ė+_¹śłĻ‹ĢŠjŁ%ęū›c*a†A€"Œ1d$ūōé]“F2TĀyH!MéÖ[Å=ŅĄ6…·­ŽP&„k4œ“¦ŃĄńÕjć…l\ā °' ļęsgž¹ł¶ &ŽĘ³Œ³e“łwSzļ‰$ŽŪ"2ł¼KA–"+i„t@£ēBŃҌ&‰%ż‹€sޤ] w%(Q[r‘ÉŽ–b!ųģE›tT1šṌ MóŌvŹ:^0¹s?d:Įvqęr~šmŅÆžUÆzl܉?š«[’ęoDVłńYčŽ;ėė:q¤“y¤qĒyœQ~*@8s­­­*¤Aū-oiąsn•ēuĖ„%śņ—oOwFć]ļ²o¼‘^ō"{ś…v— ĪC Ņš&×ÖlĒéŸŹŅu X^n„åć?¦ę=*P "*†į&!×ķG B©œŒ$Xˆņü˜8(ĘXĶ4u"M!A2Ź\OAÉŅ2ńBŌädNšĶKj"—,”›­2ł‡oā°[‘{Ē ųŅ@#ĢšPqœ(ķn ~V·bÕ4ŗŅm†¤į\ÄCĀ‚$Ō]® Ü<³v@É .<¬7•šśå_@:y’Śm»RɌ…P§cÆ­5Ö×é…„]½Š“CW®t{Kū ūoĒł)Į!ÅŲsœ~€©^°åįƍ¤żŅ„ÕQ–Hó·|–8„¾~zl"֖,Ü'ƒD¢ļģ•ÜŗƒXU¦EŻ_ąG˜  ¬x’…-N­H”‘øŽQP¶ŚrŲׯY/=čä½ÉYÉŠ†vyįŲŽj¦EŅpŖ@`@Q Xh”(ؤKóIׄiX×w›žlw÷Æī=3śą­ü3MaJ(²aį+_)2Ég?»v: "ł>© ¬Z„O}ju¶ē²*@8o)Óņ²€@čydŪöˆ>ņoōéõņó;?ć³“ŖRµLä–p4ųSDŦŁŅśAß­Ä yŲ¢$·68­sz¤bn’Nļ-UcLAœ šę+žp‘(•A5®ų‡pČÉV[ņµQ¶šŃŒ7<‘Ų¶Ÿ£«²$؟‹ōŠ©łÄiĘLüæé£gĘ’Üsāµ~ä#=üūŅ—ŗ¹āŸXɐ…Š«^µi· ęÆ4ʞ|Ņ>z“Ńl’¦įįāEńŠŽõŖ»,!™’ü¬į/'®Q“SÄbdɎiōBd¶Čõ%äō(ŽI9į1c ‚¾ÄžĒ»%:=ڤ`KfpĄO!Š ‰ai¶:œõ†'UMĻ;)6ر’Ql5c‰ż3Ó¬ūś×‹÷žś×P°p¦*@˜æ€1]§(ź²Šqz8fJ É.^SŽ[!‰Cų9zTąšģYn‘åį_­¢*(ĻÓćpWėAĆ™5a„0†Ÿ†Q‰‹GRfTę1Ę%F¾J™ær™īæÉ#%ɒY]'œP0 ģR0ź–Š|¢ @ۊ‰Øz,­kķÄį8āĶZ4yĮź£AĖó4ŗ”ć_ö‹ƒ‘öńŸ»MUŽłŠ™\$aa„"> fØ„łKal«>ń„ ˜•JĀÉē0 ±‡ āĮ Ņg*1`y¹‘÷ÖóŌ#‡9Ó$ė±˜‚ŖžqBE¾EŚ4˜›Éœ@Pź$Ń럳~’&§ŖÅx×ų  ,£ī±+µ`½8T梸%± >”Ä*£KgyŸéČŖéyG0¾Žų»£ņļnæóĪ™ J±šņeūȑ}żx3—–w…KQšĀūÜ9äėć0––p؈Ø2o³¹źŗ«ėė«×®­^¹²jŪ« wįä™gģœ÷™Sī~ųwŸķÅcJ Š(‰xP뾜:£}Īņ$Ņˆ:²^z\ M”©ŽvŌ­+žµ$łZ~$é ¹œœˆJŒL] P˜eås@R–eĪk©‘īAÓĻļ,F(ØŹ×¼ęöYų Q‚…(?ūŁ™,±UŹ;€Bƒõüó¶b(ø±±Ś×{ģ؊bįņrcąō„v}RąT³ž~ŚÖõ©‚:«%H²šŸXł­ß²«ÕĘ«^5ƅö ę#¤>=žųcI]d¢«Wó œ QQ8ÜQĖĖ+ĒŽ ų=ń„­<@ģō:9+ΐ‚xˆ÷»ßšˆcŚį"Ą/nC½ÄĢ|é-`į:r«„%(1Ѱ”łtüˆh„. [’³ŠMXČ’źŒ,–&„ •™k§_ĢZ2ūZj¦ą BŅ8i!±€xH< R!‰„¤—H÷IĆ”9īdѵFƒß83å14›āI¶Zō'²:õ™ī ϳg½Ä>Q¹*ခF†!JE)Õ«pø¶¶Ć+JX8l”4V”³gķH&_'¬ė×W·‰zĮ¼ĄB”ē§Ą”.į!cc5,™QHŅE†S ŁC‘ӝĆŃk}ģē,ö0P)·80_Rc;q'Ļ’F—B*µńIōs—¬_½Ń)1 €Éˆ:¼kŲ pčIŸ‚‚’…`^+A ŖČĘŗF&#sÉbŚÄg9ŖV•M~ņ“©ÄI2­j24c"Wžf9Pw?œ ”?ųƒĶĒõĄ·ēM¶Šްś±­|éK3gķ>QĀłI1ęé§ķ‰S)±µ5›s:z“‹Ć ¤“¼¼’P3±Ó§o?¾ė––5¹La®»ŗ50„sēģR‰é'cAńō¹nłśé±‰(ųg™Hn¾„ĒlŶ ©Č`|•œŌ–Ķ ~@ą9˜D»ÅčZD^µ^wŲq$ŲJrX’\T@Ž„`+!(čD S#fš3Ž’īXø ½”Ŗśh®:ƒŪ?ņ×g2 ucƒ––Ø^o~€\‚Ą{U:yϊ ŖÕØR”olØ“į° `†*@8'5‚C@ °Ģ( ]æ.®ņŃ£¢Kįpy¹1®g@.M¬'Ÿ“U„ĻÕĘĘąg£ę^ø`ū¾ˆJŹóĻŪ Ņ žiB/?? §|üD—Žļ¼(zŸjœTŸUˌHś5’¤>hńM r ±ŽuKņ›;IŌuĮ,‘CÕ«[ )•S…Q€Rāõõ”l'S6B@”©Ż‚Øx„Š…Ų{Äŗ—”Šüõ×ß̆iy [±PµÜ?>©\fT*‰IąŚ5ūŠ!ńø5ó>Œ}­„ó“ā “¾ŽĆ¤K—Äē±c+Hˆ£³0* üŌ*J¶mīDį9ŠŗA¦ !©L "ŽŽĆ>½ń٧,)8W±ŽONU&÷– ˆĒuŒ}É9ĢkK¼‘$…S·B9 œšģ»™[' ŽCM”‰`6˜°ēĄTrē|~‰:Qw׋£—æ'{Ŗ«·¾uõ}ļ[étØÓk6Å4MśŅ—VūFŽwß —jęų~WĀ9ɶW·pńā*Xˆ Ą3¢Ļ Q®ÆŪ¬7!¹n’ZĆvń¢ žA• ]½:8BD„ü'ž‡i–™ÉĮŽ'uPąŸ–jDĮD>§6IB„%šC‘4 ÜpÖ9ÕL ŸeF\·¾’€“I¤oµ\‹“/é2F­Ų1¬k‡Bs5¤k•źTB”ĶŅcžęŽŃ{ß+.ö/üĀTū-oYU»~ŻęœŹezŻė< <ßyē¦g`„įē>gßygŽ›ßß*@ø@JXŲ'źeOĀKE©­šKO„Ö×éōéŪϟļyäkkŻAøį°žÓNp81 KyPšu®WÕŗhIƇą ųudC›ü¼x@KVš\° q¶ĪAé • Ž£+~Sž&M®XÓd[DD$],}”SE£Ėmj³=½š¾Y÷#yķ8µĆīõĖ]ß÷Ą™‰ē*ž)}śÓ°Ū}t*Žuן>Š}ȞGĄ”ļS§C ‡‰~’÷)„’}ÓMy]!*@øPJs«ļóÉ'mąg+ɶņÆĻ ų7Š@øķńևC5xw w½¢£ÄSeŅ"?Ÿ“ƒüÅ»üCŁę^<ƕ] B$Ė%F­ §}Š¢^÷cé3§93\J‚T.Ruƒ –•Qį¢D}I#_yö7ž¶žÓig'Éh1č+ éŃÕĒ?%×µM3ƒ»żę7‹÷rß}ā½4›6@X*5.\  ,Aׯ‹ ŚĆ¦‡ZĶū÷» .¢Ģ椅1²m»ŃŲ|¢ŠL}Z^^9vls (ˆYÉēVj*? Žą %(ŻJÄōąC‡v »w}  b(†ņ/˜×‘„ąŸ¬@Š‚M‰Ć&QŃåHŌ! $:ĀČp:0ax¼˜ŗFƒ)#uN%¬ĀØĆDČŲŃAÖQ·4:eŠ;ž²ŽsĖlYX3- H‹HćÄäyE”°PZ’’P) ’†1īLCš@o}«øĘĒwļ0ų—t=śčcY­r×]Ż÷ž÷¬“Zv«E°fS@}ķkBN×®EėėŻgÉR9q ʶźāE[Ó6?—–6‘™.-Š.Į›¢¦Āį°ńĖĖ Pļ¹Ó±ó>Ŗm4&Ią±TI© Gz_N>ŃõH‚PRP PŽéR%~ŽõépE°°„rP(|„p¾…ó’\^KMKBMyQ &–Ó™ ‘j"lhI£7?aŻ÷āŁ²0-/ÜyŒV3Y0«īžĀ™‰ē^½*ī°aŠ«_M–Õų…_č"š½ļ½}ąųdĄøzūŪ ą-“ .ĪžĻRÓ“ķł—š ėėZ[ė" āœŽmP/ĻžzJ`V*‰ņŲ±†źŽą-Į!ę‡(•E‘°0„ ‰Ņ¬@§ĪyęęŪfvl`k[’¬žnJč"įpźHņ{œ¦`KĀOģ]Vš‡ŽlĒ‘˜’,­Į+ļ ’ś"( ī4Ė ž©‚ĻP~’ü™jŌi#¢_|Źŗē–ł±0GżĪ£RšŽ{Wé—ŗ/Å÷ÅéQ/’~÷wķčŠ!:r„&éäÉF2`b"ZLķ ¾ĄN læ?›wh„·~„ևƋÅ\ ~ÖÖŅĄ-3Hׅ•FQ^ŗ$Š›š2™K1aGŽ4ēhD ^æ¾:å6Ož)ģBĘ8«Z¦ØbĖŅB.ēsZœ N@ņ£Ŗ"‡o KX{I;EĮrć.°Š¬K ź0ŠSd›x°=ÖŻQ[žšˆÕń‰½T4r#ŃrP£U¤u±…qć5XvæÕś‹ož™ŽÉÆżšøĆ ‡8Ų«WŅ’ÜēČó؍{€#­aĆ«Įæ|ŁFyĆ ā9€ˆ ÷’ö,‡Įoą˜!āˆüƒ@8”ĖĖ]€Ń¶8$łĪń†ńĪÕēÕ««GŽtßæņ¦\„ē*5+€_ ŽĀ¶FØV¦¾Ø¶źŌ¹nFū»Ó“±¶d¾˜€Łp8ņjDM&(ųŠ ~0/¦ ']µ$›1ü܁h)“@ ڿ̲–}ńØ¢ŲC‡`z.¢¶ī éžSœkĆ÷ĘS„¤Bk€°?$…”·ķä© ™‚¬ŲĆ.b!E]älÅa¢Ó§ NOF./7Ο·įʶĒxŽÉō Ä\#ŠD]*»tI8Ęémō}†¦Ā3“ ˌäõ į_¶c‚vä– *öRŠ“ŲkŃf S,D?Pü{KÄōŹ4Ņ9ÕnCI),$ŗI£2®„K—*™f)¢r»…"Ž&łJ²Ę]GQ!upڈ3${Ø[-I$×Ā^*ł!U}čė§Ž;½[gćŸV7Q+čolš˜ś”+(˜”™ąp ”÷¾·{į-«ńgf><“ķŒ(¼¦ŸR”µ@˜¦ąG‰ž!‘n\Yvvš«Ć]Żī**Č;¶¢p¤%]ėėCg)&=ń„ &*PAW®¬Ž³“}ģX‹V«äŗ°ž¹**؏ÓS>`¤ÜŗeN–ĪĮ #ž)…K"‘ćĒ”'qŲ’,„Z²Ž¤M :1 ėŒżŽ”Ap‘-ųÄ$™`\µĘé (Ńqlx¬¦¦ˆµžUx/“:Øó„Am°PBŗķ8hÆDtŧØn¹”Ų&6‚^'ÖŽU†8Lė­o]9~\ÜŽ~ŠÖuZZ"Ӝ÷ÖŌ›ķk)X˜”v=ÓüŚ ż|m8Ūž–sļŹ{ K=š°ŁŲ  ÆT}ŖhÜ*0 č"IA˜mۚF×®­tžVśį­­­ujõ±%V %œVnē ƒ%JrŁčIž©‚‚œ6ˆ "Ź‘dÓgną¤õŅ…KÜ(†1ĮĀ@– >U˜Ą˜N“ÄØĶØÕ¢×9ę§N»_e¼ĒC”rØźpxˁRÄéE]²”‚Ą0ŹŁpŖ9ÕŖV$żźUė凜ŗeaŠŽ¹˜‚ų#ā!E‘0(É…ĻʄĀhCÜSŸÉ›ń}Ż#g¦÷öģ³örqN7ÜŠ˜?łIŪóØZ%¼åĆÆNģm¬'~†×Ƌ§”ÄP(Cķz^&:×’1Ń7āśĆĆł—čEjŒÄį}²%Įź #LĻWĒŽ ®¬Æ‹zµŚĄ+ŅPWTŌY^©ļÉį ©W„ÄįŗCł÷䓶aˆ‘ŗNĒ7Ņ][ßš°·Ęa:°‰„›ę¬8ō‰^ä Hü„½c>ȹ.‰5L‡,Ę"ž†k²"((»šyP£>gžåĶĪ&AyĢQź” ą4ļZ;&tBėVDM€MĘé`°ė”52Ź–($G“V7µp¶‡üž& nÕ /ˆ;¶‡ÓŠńŽ{Wæē{V@ f“¾ńÕiĀ[^^QĻ–FĆaņā€aßßlgŪ\¼Bi׃×Ć%J²ćOŽĢ°„y÷mŪK ō ĄOTü”Õź4 Ū*§­J^ŻÓOŪźÕń8>’¼·;z“‡ˆÉBźeŽˆĆ)YøJ(ØŹ!¤QĶZüÉŗšQgĀ–ˆ,Ö;šĒn£M(‚Ä~D¾¤ *LR=‰@Ø¦Ń•@ŌkŒ®Ščuœ¶aå}Rōī’“?žńÕ»ī÷źšį†¢ mĮ”Ҿ»ż+_™„…>ŗšUĄ/ŠŲĘĀ!“¾n;Eųéi©Ē˜öhGW…j׃š„üŁUvĀ‘D<,[¶aXŗ+я”s-Kū6źxļ¬ÅĮ”Ā[‚@ÅæD u0#A©±œT걁‚꽄 ½ŠŽ ¢āZT$;āć1•ÕU{ā½ßvžĢźĶ·Ķų€ŁöŻę=.U˜‚Ÿ€É–@¶ ·Ž»§Ń??gż›ī„^ ¶%…EmÉBCIĮJ.JLrń L3²4ZŅČhĀķō!qóßō¦ĆŠ –8ИĆQģ(<®K—ÄĄ#R-ƞ †%Ą³äĻØ]zVŸ’Ę‚ˆci!@8Oi!\[&š&^’ߏʷYāMD×ä`W2ÆOWeć†ō9,2‘śų×'ą,Ü~LŸ’WwźTcŲ+‚O5HSo2Į[‚CO}ą+­ÕW®Ųč]`ķ·ūš.­† ä›%Ȥ+¹×ŽŃøÄč§²lŒ$)āiėĮg«‡PņĻ až“¶ÄnoM TՊN((ˆuKĄ”žńéÜö©˜}ī‡oŪfš‡Ÿ-ł”Ö×éĄQ¹ūnqånøA\Ė?żS[꜎ļ]@ć+_IKKsg;­­‰WIź>¤‘R=žłp碈nŗ©;ųüy-0ųQ†7ĆxŌ_‡ĮµŠ@å Ā­üū·øĒD/Az%:Bō]½#‡įp…?{!v„ķ“Š=ź}Œ¦t®ūßģÄwĄć9hD¼…I} –”’§ĀR»ÅųOHłTYń/Y=ę‡xŸGŽ4ŌCÅėUeŠ2 ®œéõ™›o›ĮѲ‡h[Fń-•XĄ°Ąųę¤HZ(=łDe£ė¼ĒĶē¤1źD„ ķØ[* ¶dE- kŹĻ¦$+dj²ę`æ~šĻ灺Q“±a/-5¾š…Į½¾XŠ[ XbĢW¾’š‚šøŌc!łj\W0¬ZķdŪ]j&zöY(R?š%ļ÷Ņ%[¹*4ŗra’^KŌAr':@tØwäóDU™)Ģxā0ž’ķg¶µo¹Ķż«!>ϲ‡SŸįüOjj%źÉ'Ÿt½kxx°cĒ6°‡'š~xIūV·}8T Lø{ōčŠĀ! üK*xĄXt}}uXJWÜŖ“‡ē3Āa}Éo€ MŃ8‘FfÄžŹ4Wä›nĘįIŃ'¾įØ.ĢźČJĒ“P©NøRŒ¬HŸĆé®ē¬ūnr0ąōe0^$*m ?”­ølÅTšƒ¹‘ĉ„LŌŅŗ¶½ZsæÖ?ū³›?÷‡?œ Ą¹/~ØĆķ²“Ęo~³{ÓŽō&qQU×cåIˆäŖćÉąIA„ŪT.‹  •„aŒa 2ÓJ˜'.#ėiWŸźUz^Ž{Żeš+ÓLśM"üĀĪų†±ŗ-īśŸģÄŪ «¦źŸīGřPš>ÜN¢8Ļ“ŹBÉ«»pA¼%õHׂ҆¤¬^šFźķ)¼mĆ>*]ŗ“:VxgĻŚ„RĻĒ7Ņ‘ģÅÓ‡Š×OOBÄŚ’Å8<#‰ ųØō‘;ŻK¢Ņ3Œ9`†¼ÄĮ-‰ŲŖi]‰ŗĢ+K‚”Ø;čՙähD “‹)ˆzKVš1”¦üDeFuźŒLL˜iŃb(Ķæ/|Į~Å+2ŅĒ?¾šF]ĀæDśhIÉEé‹}ž¼£TŅś0õįP½,<„Fc%ķm}}u g’ļw°Ł“ń  (ʇó`ž?{åŁuŽ÷’©åĪpµKrH®FCi„•7•e'¤-G•mŲi‘mF ĒYĆĄ®ūźĘ»iSō‘Ʋj‘ŽĊŒÄQ6įR8Ž„lķõXķ®–Ėå!ļ’»$gųž¹żīłęž=s_sg8Ć!—ßgΜ{ι߽÷œļ×>¦’øā‰pY„€ pŒ沕§4±|ŹėłR‹_µņCĘßįfž3ł×@8Ü©Dų1WŽ«Ų*|<čTlnbgÕ*›‡g|¼`Bm2:r¬7"—Ė™cōgÖ__w5¶“Tl)0Øt@Ń-“łčRNH Ć(¾?ĆŚųW?r}łRīĪŪ€”rV:›!ƒ‡hۈ|Cūd³”źu„µŽƒ5uŹĒŅéĻQļäČMõ·t¼æjµ²Æéøõu7”iĮU{łhöZ͵f¾oJį#e ¦ßŖ”fm*®«öŗņض ‹b³w” ÷ļiׅw `äXöDøĆÕź¶ZdKŁŌujU9•VØŖg¬ÖUŗF**Ŗ&ŽöÕĖh#īǾw”„O`śļŁgėŗżvüųs#÷łĻ·łq¾#Cē±Vs·:ķłÕÕ¢>tŒ£v‘y vč›c.]²i"-ČĖR¹q£Ųėē>¤{r×~£żõX‘Ü«®¾PTKe«J“³]_tÓ½) [Š7ż1ą³{üī3?o³Ę ÷ØųNŃü|Q›rkĖ­Ł…ŌY*Տ„m»™ktŌķ§F®‚qžWVŌ»­ŌķÕ*tG /X DHWéŽ|ČłŽmčšs!Y»?›”ŗÖzĄżķ ЬŽ4,č4ŌŪØ›•e¶„üʓجĄ …kUl—Ė+Us–†UČø5×[ėjŗ;Qźzžŗ ²½*¬CU¦I!;”µŗp²[µ Q*ŁĻ?_o t>¤„>Äą ½™Eéæ|ōx$M”ĆŠƒ03c“PiK²;õ-±`röN„«Ą×&Ó ĒśOĆāžhģ1Iŗ%  ¼)pécź*eŸM•Ź|ößDܗų”ŃŸ0Œ=Ć<0f²ŗŠL&·µåž7rÕ¬CóX²阍Œø—čŌQ©VŻ«t‰-ø“ŌŚ‘ć{ŻuW.To:ųtŲ† }°ۜkį¶z²1üǘT•’¶UĶŪP2ŪPĆØZ3tXVu¦RĪō”’X¶¢ G÷bƒnŖ)›j®kAr”Ó`AӅŁlöh ŻPą|ńBŪsM’]¹Rß'ļyOįčQ,/Ūžšƒ1s?’łs˜.<\Į½jžG:e”VƒwōL–JöÄDżčŃqÓ÷Ņs©“EØuH¬¬ˆ[`ļD%!:óĒT;ĘAå8oN(#ŽoVķ1UėńQŗĖ™+6.ų<°Ø’Ń5 BŁ<"Ś’č™īrŖŒŖ»ß”ēd‚0ö:Q|œęēķŃѝ">'¬1ž»øčš,¾9˜e.Ā±±Āµk®–x.—JÅŲBuĖčskŽ"To¦†Y‡¬ēØÜ±7Xōš:—9J‡š+-HŽŚ¶< ²Ę6•ł6ñ }µBŚB?¹¶R¶īČZä9ZA•2ozM¹Š¹iĮõĮ,[¦XNWžś.]ŲĶō?ū³ā©SķæPžōOķĮA‡†ČånƒÜ™Ė¹_œ4¹Ÿ]³ŪƒŗŠÆC:”|dųjSøŠé ¢å<BBöT„ 釲Ć:px’ž[ł{ņš)šżĄŖrÕPć ¶§@ŚYƓęFIØąĢĶäųž)£ż†² fKÕĖź=fŒGŲ':Ōz³m›Ķ§Ę錭¬$:< M†é“ń¢Mfķės ­Oub"Nc1zÓé€ė°mś2™–ʱ\iŅ>ó…5ŖŹŪJ~Ėä-xžó,ø¦ė¬@`Š‚]CmcĖ=A¬£ī'ÉÕKĶ«Uq—hĘӮɞ’'gZzöēfwå?“P ~õ«Å_ś„Ā /`gĒ&ķõ÷ƒ÷ mŽ3‹‹öČČžu”©ĄK—l>JüTSüćć9s$mo} ŚĻdz‹wTćjś P'oxŽü››ī)¦Mԃł€»gļDx—3Wl“ŃßmSŸęėĶ\o%ś»=3}7̈æ虊^jsÆŽXGHxTųŌĶĪŚt’Ū€Or±hom¹鄛e~Žęa”ųF|¶ĶtÆCĪ 4~—.Ü dƁ˜Ėv”W•öh“ų,øīYpM‰sĶŠ!Y0 Y]<?łĶމ­³6vvpńbĆ.}ä÷s//»›äöŪ{öÅC1„uåŠ]£ļēmx‚-®÷¼O‡¦ ÉjZiڈ¾õ™ÕUׯś`ŅÄr¹A‡ĀīŁ;e£W­|Jż M¹_ėü¦§1¦>)ƒ¾#A ’0°Ō¬±ČT³éÓa‘,5Źõ/÷uįķu‰±±ĀĄ{Ø®^µĶŁ*d)šN‰Ąq°²RŌ‹Ć8ē4†®RvŠ.¤SMµO‡h4¢éNrmŪž™¹0{źLŪÓ]«ƒ'™ŒŸH)Śä?*Ūģ?ś-Q­uęA’*J‡åB:5ŒźLŲūßhœ~Ėš'RŒŗōĢ3ÅųAįłóvÆ#m Trć”#33c§T"£-Ķ:4įżL›ve§OßŌ”ŽÉ06?M§EtįæÕj½”™Ÿ/öśéoYöT„Ģ› —<=lųr„’Ščž’Nū8½‹ŹĄŁč«Ó 4Ģ|8±»HzķśŃ]\lē°ńŁĄŅRĆō……›'&źR¤Į”Øč‰œFGŻN.ڈĢņ2ŹeōõÕÆ¶Ķä• Æ·ėĀe%-ŗ?%½A Ŗ żŻ®a‹jr!\ĀSę¦jk ®)ķ¹ņS.$”.ŌÜĪ~µHÖrĖŠPū†Gy0źŅ3ϜėųķČ|ęßæų ūčQ "“éõ‹c~ŽęóB”Ė77¹Ž·“±Æ_Æ„Ó)n³ĻĘĒŻĪ;’üłs|"hókņ Ų¬|‰otżŗX°‹ō@„”TŽšļTe8Ģ=Ań|TĶ:=r8Z„MIīæ÷ĀMgļś›Šłt+ĖīO#šč¼@§š²’O„ Ļ“»Čår4^e&=žųńÜ+Ɯk#6x ‹³ÕwäĢaIŒČ|’ī3l²-%° CcŽg2ﯕÉs–R`•h¹Ćn³°­ä·ķYPOßš‰PYŠ®Żt!]M!3”„ĶLFNįD ėµŗY]¹ÖźėŌ׬©i£Tøv!­¦0šF&…‘4>qéBŸž§~Ŗ@œ>śś:*ĢĪ6¤é‡*ŠĒ­Õܝpā„ūĀ;čĀ(lmķ©’½£®\±«UW`¼Ūµy?“ĶYęĖå 'OŗWYuP’+—‹ęśś ’Ž ‹pf¦c/Ph›tÆØSpęf։į=¬Ø;h‡wRf”TKłNØKlµä¢x²‹ õß#”ÜéF”ęTcŖAY’H»‘ō>·ƒƒX]½y¤r˜>՚R©Čn³m÷’Ö”é-R)-BŁv{ŪN•^mf¦nh]J%wjpĀā‘Itų3‰„q1w'7Žd35„C‹”l—Ėģ­“Rć¦Ņ熔RmAV •õL–½e„ŗņķ~o¦j(ūÓ»}łå!}ė[nēĻž¬ū”Æ_·Ł…ā‡?Ük"°?I{¤yŽŗ¼ÆRßhe%|óDŠŽóÆL“iiµŪns’Ņ1!Ņ1ŁūG‚ģ“J ?ōtx”r‡×Øxcž<0k*vĶUÓōŒ×CJn 2p6ā’ORwYSõ±Ų³mE²ĒčSu¤y@°_ĻeŽŽŗ=Žćę֛/”ģę¢Rńg™äįi’itņ¢«Ž’1¹2Ķųz¬l–ŒH…lG"ÜPõŗr!±®Ś®Õöą‘p:NĻ•.ģ~‘æł›ę6śö·‹?ó3…®¤=æ³ćīyŚäTÓ‚ŌŠr%ęē{ą{!ž}$Bꁀ–<5j¦’-µå52Š§Ąß–[™nŗš}VžK{īBmƦzŠĒ˜\Žqū_Żę|1;ė ‰Ņ”i剉<Ņđ‘§V ÷³[Č ŚŠwŻ•‹ŠŸnĶI‡³›;„Ć ;Ī™æmŁ’yąLüų/¾ŽłµĶõėö#<ųĢ3 /–zøįėļzĆėæęN(•lŽ‡Äą Ģ C¬¬Šžw{hēó¦…Ś½¦ išĀB‘7<_„Żī‹:iOöõõś]ģ;vęf­|¶™’¦ĆŒā“见ū_NvßIußąāęš_ ›ų·]ö&~to_ ‰™|Į¤T*j“±½Hc·Żęęt¼uŃāįø1>^_‡µŹ:$*•bLl>B㌊ŸoĶń³8uvŪ ÓŻ·`w’°—ž‹įÆžŖųö·Ģķ?āŪßvwĀ›ßüą‹/ī 2««īŽÓŚchßjōī…R F+1·.oZŖi.o6v;oxŗŃŹJ±×ļ@爐 µąt„r|žūp8Pļv+7%N'ü\D0š{ՀŁĘŲĢP‡›­°KųŠśÜ€Ķh“™ÓyīŅRČy6ÅcfĄłłbĀĄˆ‹ķt}}n”„E¹cb".ΦńėØĢ't²‹V łżż½ il¬ĄŪĘdsÓõ9i|¼į’)Bņ–ž{옻mčé4¦’`lZbmĶŻ±ę‘-pCäw °œ.'ߎ@ņ8kü õŸO~0ÜyŌįp?š>5½m­|ĘųŪ†½ŽgåŸtNE?ZGŠÜ޾™§L=„źÄ„„ā›åcfĘ& ŠŠ-V,Ś[[ ü”#؇ó ©©‰jÕ]'­öĪŚš›\ØPĻā¢kAµlŅ H9kb"GaPl4—YY)źKPéĢ'%&Nmœ°“9žą#čń{õ®{ =,=2K±«:¤mšź«ŲŁ©ļMÆüd~Žżī¼=ˆ{īq÷Op‡ėćoSU«µ”ŚŹ|^‚\¼X_™F±yē ĖI,€żĘ¬•×6Š×ÉӁžĒ(Ŗ2Œo1.5Uڬ’Y ŲvŌ Ģ“ĄĒ“©:&ąé®}Ž‘‘‹pqńfžŅē_k±.äń¬½‘‘Ք é/ejsRŠ&Ӑ¢¢Ö$Ūé Bł(ž¾Ž”zœ¬7†tČ„²ŗZ—ō»ŹŃÅSg8©ÖTŁtź{`ŪĮÕ³”źujØŗ®ŚkT ŠƒŠSÆ3FS8j!C_ĒĀp æńʅ¶ccó]»fÓē0ßŗ¦Ć‡*™ŻĖ6‰nĒģĄą`<×Ü0ŒłB¢naĪbRĶ…÷<ÕŗŠiāĀ"\^Ž/śŚą`‹ź³Ń|ž3Żs øÓ!•£ĄķʀxŅ­µ)ńU(Õ?ˆŠ§Ą©fOŌ= Ęź™B'ŻCöņ%*•JH"Šs××qńbHźŃ"Ō·nŖa_ØZ‡œ°FGs:sQaO³w/BęõSg:.Āߛæ°ĖØH„dĮJƒƒż ×!‰š[ßźXö§@õÄDČŌż·¹é~Öž~’j”:Ģård¬ą0<Ė'B½£L/²ĖeQąēVįӁa”śŃ"Nz"ģ²Ę˜xĪXłśų›@Y %Ō¾†»ü™¢tČ\ŗdsēĢL ÉT§-ŹV”8BEhŽ:‰ ƒćõąńń‚™¶H\Ó­)W³U0«Ęß×ĒĢ©3į-ģVĢéÓJŹō°—/»OśĄį“ć:ģ,BÕųxˆõ÷Z[ĆĪŽūqÓi·ŠĒķė«O õ\{:ŌQE‰°R’Ż:`B¹EH.ń™c*v¢Ļ=/Zł“~¼-Į›yŁŹEhFņ$pY]%R¢¬E ń=…~é=łL>ǐ’ų/'Ź mˆš7l¶Ńņr±é}}I**C™q¶d/4śļŹ›r(•|¾Įż-­łż»Ļ“!Āē®uĘšūīsßÉŋ7_²éBģ{šŗrŌ«óé?Ü֖kĮżČfņēÓ"¤żƒ.čPøå9Ų"4™U 9= ”{§ücąįvßLŒæÖ¢’šßA“!.\˜O§S¾«•J±lJ[×®CodB#u;>IńtOiqi©ŲĘ3^¾l“›u&M„ÜģÉ7õåß6Žä—ļ<ćįo•:¬½ä4ÕįĆ?čėé>W‘źĢoõŃ··]R ”&j Åčpe33āĀCŹ­/ĀP…Åó^ Č£J„? ¼«Ż7S“ņ™Ęžįd1 ąæąSš¬į.|µ±±B™t†œå?6J¼'tŅ)•Šz óŚk¶Na'OŽLv¦GGŻž”ßČ.”³mŗDåśõ¤"Ō¼žŗ›O«Õp:J`»×į¾"F‡Ä¹s6÷¼śjןTß[Õżę€”CŻæ¾Žå嚏ć9ó¦¾aGŽŌ߆ˆšŠrėˆŹ…Z„ ż§ÅÓļ‰š8@ƒ~Ū™ó Nī!åŅm`8™`üT³Ӂ`>ÓéGŁauµŽŽ÷Ÿ&‰)ĆŅ0žxåŠMś”ŌĘś!±Ģ`ˆ‡óDé°VsTS”éTŪvŻ‚Q 12½Ö*»9*fF§`tĶ…¾÷™šÅ¶ éPæz±ä?ns'õt[„ććżJ£XYq…äs} VšVxĢ+jU‡¼ķi˜ˆšŠrK‰0Š’iȂO%^0^гźv,Āėt°é¤©z8k {”’{ģ]žīD0»Ē—¬/_v³ē½÷ęģ(0Z„üwnĪŽŁ©›ŒEČE§f=Xē8Ź›”Y„<‘ ĀT*3]jśī¹:*'3ŌK—ģtŗž؜<™‹Š—ÜabĀ]üłēēūūS¾«KKÅNŻ(ś ^ĆÆCņŸF ɧ4Ÿ£éū Õ!ßÅ cw”pxøõEHZŹŖĘTĀPß¼‡Ž9øø‡N pRµ&Ę@tÓ*°”E%Āwz—>ØI„&Āig.JŪ§(—U(°‘d‘ģ_¾ę„l"“qė$"„J^dMj¬Æcy¹3’8~<÷Ź+ēŚ ’$MR!PwÜ’1ĶĢžųų‘Ąm|õŖ½Mūčļæ)B‚ņ5Uёū’©~捶]˜½ńŸłģ¼|>cčóAĖ"”f’š#’šh.E(8$"<qɧĄ_>džį9Ąo ­¼į?> T< śDć?Ķ)É$pZ‰šˆÉ{Uż\¾ćؘ›DŹō ^v&(®®9æP:ćdŚFbņ„°Pżč¹”"ɔd²ÅŤŁYĻ™±wvÜ µ©ĶÅ4 ga_0H–IõĆīŽ™"ŁŲÅģ8nĢZ„3C—:«Ć(±ēžÓŒŽŗ›<N‘“ˆlÖ}FSĢD©ŪīuČ7%*•Ž<¾°o9"¤ŚēBŸxHQ ”ń•­Ć?  ØÜӆ}aEųµžÓhN*1“?d\ķ†c҇aü ”›Ģü5:š£ÄGIßĒņ²›żmʉmˆ Ź"¤Å¹h"`­C_2Ź¤ś¢rtKŒtźO’ōĶą;bāBĻNõņr\H””zµZ;yrÜŁō[0-é0“)ˆ…Pn}BI謒Ÿī1õó%ą2N`Ń! ĀžOZßŽŻ¢·€5ą+­ų™n¼ŃE+oŠš)ćŅćĄg:÷M)ļ„&kĪG7nŌ,+Åś”ä®kĀ—»y<åt*¤ĆZĶmPĶe~ަEh.•ååR‰­F" čĖ›ŚÜŚ…Pɔ‚Ńr efʕōH£ććĪŻLLā6ƒ×‘ć ėDHÆquµžW‹joĄŲ6ńOŖĆ••śß™™ƒś~„^q(D$T„_PÆb¶QQٰéwg€Ÿo÷ķń]Ī66½~P„>†»łe)Q:ćäÅ"¤:¾)B„%zr»P+P·×ÖBCž3’Ó¢NˆķIEėĀ`źšø®VŻzqŃfIwD„Į°[üąŠÉd •J1ųtH¬CŽśó1GŽŌg‰…V9¤"¼j凌æAguųn:iŖAoW"|‹'BrR«Ö‰aKž›N÷“Ąią¾Ę«]Ņ!‹ŠĶwU·K„–åįóŸ3-¶d”ØńŌÉłW‹pd$Ē",•lŖŁ‚++± "¬Œd:¤ń]„ń/: ²¾Ž‹Ļé¹¼!s¹œˆPh•Ć+ĀPŽ1:ü`Ūį—¬ßT?ANĒN õŸF‹Ź„Š3ÓJ0…5¶°`S½µ…„„b«s‰Ė—]õõ¹%vkĖjȌZA·!™Q&•\Ī•bµZ7"5ŹåŽł/*ŹŻōt&ĮųéĶš+%J„n…Ō[źpeÅŻ ©”[H„z.‰°R¹5ߌŠm»w”įʍK_>f¼6‰šŁĄ"Ē7Q>Ue s|ŅŠŌ@ļ°ņ»ńŸ&(Bz®ßō®>׿O¬ĘPJZ\“9[]æ^li‘bŃfQķ!ĆĀ3Uįs›¹fØõųćĒsƼr®Ū/'3rŅ!=5½±®\±iĄņņ­œīƒ:äĶ@e{µš«Ęk×Ü÷@[āÖ~ĀžqHEH­|U¹p ŲցąeuÉ”OEæÜ*Ŗ},L„$” ćnżõ凒iH„’ә{ŹŹ÷P„—/Ū”¤öV|ʦ)>Kåršµ³ć¦F„¦“•oØæO„ĆĄż’†¼‰­ŗpÖŹg½v¼’¦#VU)Ś' Łl“8ה¤Źåš$Ež3’š2ss‰pi)2Į™.ō‰Š¼Ź‘QØA"ŃFįB,.ŗR!aĒÜkļ/päŗ°¹ę»ŗŗī6ōACEX©¢— ģ‡]„Ģy+æ® ÷r„’70¬× ¾öźČ¬ż”Ė€Ox=OxįĄŹ”NšUWĻFGźæ(łż7%黁·.uŠˆĒŽŲ7”Ź'æĖ—mŖļ½7WłŸÅ£mW*Åł’(”Ɉ¬Ąły›Eø’2:ZŠ \^Ž×” ĀA'Żėöoõ”š®°«ÆķÆ6“ǽjĄUOK’ÉøtÕ;¬ütbµäæ÷œ€Ąˆ×C޿ȨZĻķ” WVšūļŅ%›}}n½°ąžĖu$ßµ#ĒĘ\kڶĶF!BU½¹vķ`Ä)·"Āęüš×ĄgZqĘ]48BQÄTģÜIgn֛£É ųUķÆŖś£Y5 ģAG]hBś™˜ØNūϲnX]-NLøMö:žÜnng—ngŹuaAt"BD„‘TĒsĘÆµč üDcÉļ½Õžöz¢ N7[ßüūIŹų^»¬j¾ĒšÅ^¼½RÉ.«PL’U*~--,4x«%|žć†y;A„$ˆ›°l£ŖĶśyųx„}~BĄveOQP:N°NSū>Öiźšżė˜‹?|Ø /-•rkķ¤ ’ˆR©81Qą6)ķüłsmÜ(Ō33ēŗšL‚ ܲˆ#)8s³ž3Č!ėŹ.ß ŁŌ&¬Ø³Ŗžš¢•?iüżs+’ Ķ\Č<«†ĶĮ˜: ł_;»óźHrÉ/,Ųcc¹–Ö_]E­V[Y±M’…źV”)"Ā8&¹™€?4-ło:`)ßRƞķŽģ̽då/(M¾ę)3žO¦œ ÓaÖüĖĄ 0LD?Ńp2õīņåÄDŪo}ėƒēϟK2‹,H¤R)ž+ža—ˆ›p·RĀ‹†W>®zL ž°¬„MŸn4 YJ+źéĘELö©šģµUp<½}ØqnšFP.ü`›ü y›Ę­Ķ¹ŃĻŹvO\Č,,Ųcc¹–¦ˆ’Ač–³‡łīVĀ”Ē'b£§£ßŖĻ:ÄT`Ö+’š]U¾¶TŃŹ“k@8øjJQėŠį p x"Ł“wy‡LLøA.<ž\Wļ%‚$Żė*%”cŖżøŖ¾Ö–’‚œqęĪ’f\T!ižeŲ É) §Ź™ää­¦#ļ¶Az…ˆpW,›Ąšš”Zń_r ĪÜl`åóĄ÷#Ęggń‘_”Ęé†K„āÄDau««vĒAhŠˆp·ō)š“*æiešœ#žIuérć”ū€‹±‘ ™‰·½FČtł ‚ ōˉNµBS.Yy²ą&š”śūńĘ«ńŹyŗ• 7ūL/Xł²ņÖ?ó“š<x2Öüµ•? C-†Ń6™L”R)viqA„D„dVéēlģRŽĻRÄ/·äžQ`L•0©TtĀ–ÜCI"AĄ&¾ ’3P>"»E„[ŽtÆ8,°rČ.Z0æT€UUEO¤«™īJPŅŽ*7‡ŽöžĖœ2,¾įą "ģ"¦oLU|˜okAZ¤mĒLĒN śoJÕ¤Ą#Įe 1‘gĮŹO‹ A8 ˆ;É¤ŹžÓ±c¾ÖłĶhm˜¦9¼#q$³jāt²•5Sƒw€xKeĆLķśķ ‚ ōaϾm)Dõpŗ•õÉ…Ó –e¢4¶ ō_Pq'Ҭ?ō¼ųtģ:‚ ūį^óNą%ąóŃ śęßǁ;£Ē ÕGŁSšykŚ™ćõ}!ME/Č:l)A„Ž""Ü#*€ć ć_†Ł.Č£Ą 0dŌßmąē<Į˜Ó>Ūb0¤®³ŃWśĻ· Œ5§»ž:A:†ˆpO¹lcŃŽÆĘl(’õ«žŖwéśü”×?ģi²=¦ÕtZ*¹’AnD„=ą*°\րk€­TÆc¶<~.0Ģōc@N•aą$šÕÆoÄIgnÖPŻ“7Ųēæ_Ź@-b‘éĘ[̆Zį@ "Ü# Źƅ #£Dx“Q„φME/> j)(„5uįtcĻ‚ŸŒ˜8±ģ$÷[łéŲū ‚ ģCD„{Ź=Ź’/L‡Ģ=”žŪŒhkšŗŠĒ<0nü}ųućoB½‰A8ˆXŽ$Æ}Ą¬•Ļ6öLŎ÷)ēūV~8Ń8¦%¾lå3@ 8¶‹EA"é^ Ō)ŁX’MG;i²ńļļ§€“ʰlO©æ’„ׯE”ۈ÷“Īܬ•/‡]Šńߒ•÷õ|†[ąļ©ōßTÆ_ˆ Āž!"ܧ“äæ)U÷G½žķˆĮĆŃĖNŖK—¼ń“ęÓ½~ ‚ {€åDgFa™µņ“­ūOĆ""ŪæŻģ^Ć;ū VžČŽį "Üļ4õŸ†Dųœśšę”÷iąmŖŒ(Gj†åÓ ‚ Ø$)ģkŹ@V5¦¢ĒLG(ķ’†­oAņ„øPADx { ėŸn¦±ŸžĄko…  ‚ ˆO'³ {ķē=7k婞 Ńó•^?‘ BoIõ:” “žÉ¦9*׍KKŹjńųĘŠj“jA8䈓JÜ®ćRØ ‡öóa žNƟHa’`9^†­ümōŁ”‡š žĄOļ’O,‚Mŗ×­qŸ37kå”\xXŹĄ›Ēü Œ§jÆAŲēˆ“Ī\Q¹Pó=ąšPf’Sg®×ń ‚ ģkR½@h‡‚37køMU’±  B3ҽ@hŸ{•ē¾kåĶÆxųŠųO!1–#ISA8Ĥz€ ‚ ō” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡švEų’Ū«†AžÖ÷ųJ"ø BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH¼)ÜYrKIEND®B`‚libwebsockets-3.2.1/doc-assets/lws-smp-ov.png000066400000000000000000002160421357643561300211760ustar00rootroot00000000000000‰PNG  IHDR ؾ ōsBIT|dˆ pHYs’’£#tEXtSoftwarewww.inkscape.org›ī< IDATxœģŻwXלĄńļ.½ƒ4QE@TTDģ%ØŲ[Œ&ʛ˜nbŠ&ŃM»71jŠł%¹išÄō¢7ĶÄÄŲ[¬± QTE¤Ć.;æ?֝°ĖREŠäż<Ļ>ĄĢģ9ggŲ™yO¢( B!„BŃ“M]!„B!Ä?‡ B!„BˆF#ˆB!„¢ŃH"„B!„h4€!„B! B!„BˆF#ˆB!„¢ŃH"„B!„h4€!„B! B!„BˆF#ˆB!„¢ŃH"„B!„h4€!„B! B!„BˆF#ˆB!„¢ŃH"„B!„h4€!„B! B!„BˆF#ˆB!„¢ŃH"„B!„h4€!„B! B!„BˆF#ˆB!„¢ŃH"„Ą_|Į!CŖ|żüóĻM]Äzy’ż÷ ęĶ7ß¼jy”––ŖūIÆ×_µ|Ŗ²dɆ Ā’%K=o!„ug{µĪĖĖcŊäå呗—‡——]ŗt”{÷īhµµ{ōz=æžś+™™™„††‹F£©syŹŹŹŲ²e Z­–AƒÕłżUÉĢĢdٲe 8Ž;^QZ999ģŻ»777zöģŁ@%lXÉÉɬZµŠńćĒÓ²eĖ«’ĒÕ:VµuōčQΜ9Chh(­[·nōüEÓ8yņ$ėÖ­«rżøqć±4 ē÷ß'55•_~ł…ǼAŅ,**bõźÕtīܙ¶mŪb0Ō}g0$ŗ8qāėÖ­#&&¦ŃóBQŹUƕ^111JJJJ­Ó?~¼śŽ-ZŌ»<  ŲŪŪWZ§Ó鼝īŌ©S@i×®]½Ó0Łøq£(]»v½ā“®–(€2vģŲOŪtΟ?Ɗ££cƒēQ?ü°(óęĶk’üEÓ8qℲvķZeķŚµŹ!C@™8q¢ŗ,55µ©‹X/©©©ŹG}¤œ>}ŗĮŅģŻ»·(kÖ¬QEQŠŠŠŌótiiiƒåS[sęĢQeöģŁž·Bˆŗ»j- &†Ē{ŒK—.ńŻwß±gĻƌþ}ū°µ­>ū³gĻņÓO?”Õj™3gĮĮĮ Z¶/æü’7ŽxƒiÓ¦1mŚ“z„1dȶlŁĀ-·ÜŅ e»V3† .0vģŲKóÅ_ä³Ļ>céŅ„×lĖųū !$$€Æ¾ś €ąą`:uźÄĮƒ9}ś4AAAģŻ»—āābśõėĄžżū¹xń"}ūöÅÉɉիWóēŸāééÉøqćhÕŖ•Õ<³²²ųī»ļČĶĶ%$$„įƇćįį[ā~łå #FŒ K—.lllŲµkk×®ÅÉɉ &Ø­ŽƒķŪ·“œœL~~>=zōØ”Ļ?žHVV‰‰‰fe,,,déŅ„œ?žV­Z1lŲ0üüüjóo „¢1\­ČĘŌ¢ÕjÕe{öģQlll@łńĒͶ/++SŠ‹‹Ķ–ķŲ±C”   +.µÉ“'+€ņĮŌ:’’’:åk0j½mu- %%%µ®Y¬j»ŗ¤QW:ĪjKRiiiyFDD(€²sēNEQ*·€čõś:µR)z½¾„7'- āĪ;ļTeÖ¬YŹĮƒ@±µµU EQ”-Z(¶¶¶JNNŽ¢(ŠŅ¾}{ÅÅÅE)++Sī¹ē³V_eĒŽ•ņøté’h¶ķŒ3EQ”eĖ–)¶¶¶źråēŸVEQn½õVP†Ŗ¶¾š¶ÉĪĪVEQī½÷^PęĢ™S©u`ēĪŠ³³³YŚYYYʊ+{{{u¹V«U¾żöŪJå}:=zō`ēĪ„‡‡ckkĖ 7ÜĄ„K—Šét<ńÄųśś¢Ńhš÷÷'..Ž“'OZĶ÷üłóŒ5 \\\7n\•åœ9s&...8::ҦMµ7==‘#GŖiŒ?žÜÜ\}ōQ Ą·ß~‹§§'‘‘‘ÄÄÄ0|ųp5ŻW_}•˜˜^yåõ÷Ļ>ū €üü|n¾łfœœœppp sēĪäēē“™™É7ވ³³3...Œ5Ь¬¬Jež2e )))Üu×]Œ9R]§( ƾśŖśæ1wī\6nÜØ–”[·nźX”C‡ѧO5ĻiÓ¦©b—,YB÷īŻńööĘÅŅ!C†žž®ęóģ³Ļāå免 _~łe•’⟧cĒŽųśś¢×ėŁ»w/Ē'==½^φ (..ęŲ±cōźÕ‹;všÉ'ŸąääÄ;ļ¼Ć˜1c(,,ä‰'žØ”ī† Ō±Fæüņ ļ¼ówÜq„„„<ōŠCčõzęϟĻ[o½Eyy9sęĢ1{’–-[˜0a’ž÷æńóó£¼¼œM›6šĒpóĶ7WŹwΜ9Ń­[7Ž{ļ=ęĶ›‡§§'Ó¦M£¬¬Œ^xE‹a0xśé§+½’Ö[o% €I“&ńŲc™­`Į‚ŲŚŚ’’’B||¼ŗĪ4Nćž{īįĢ™3<’üóŲŪŪóńĒóÄOP\\Ģæ’żo&NœČ /¼Ą7ß|ĆŻwߍ¢(,^¼€wß}—Ó§OÓ¦M.\Ø^WĄŲB“’~¼¼¼X¾|9‹/ę‘G©ń8 !„hDW+²±Ö¢(Šņąƒ*€2iŅ$EQåöŪoW„eĖ–J—.]Ԛ½TŖŻZ¹r„2yņdÅĒĒG鎽»āāā¢ŹsĻ=§(Š¢)€ršąAEQåę›oV壏>ŖŌr’ż÷WJ?##£ŹĻcū¦ōčŃCiß¾½¢(ŠņöŪo+€rēw*Š¢(ƇWÅĮĮAiٲ„¢Ńh@yēwEQ”Ē{L­ŻW“Z­([¶l±ŚŅ·o_PBCC•ššpP¦M›V©|¦FeĄ€JĖ–-•ÆæžZQEéÕ«—Zö°°0P~ųaEQeäȑjyåP÷ĒńćĒEQ”˜˜P~ūķ7µu`žüłŠ¢(źö666JHHˆŗ_Lµ¤!!!j ‡iUdJŪō T[@Léśūū«ĒīāŋŹ?ü ~V@‰ˆˆP ŌŚäØØ(% @”·ŽzKQE™1c†āåå„ÄÄÄ(źgUEłā‹/ŌüŌc&- ’\[@åÆsÉ믿®|üńNJ———¢Õj•x@ٵk—(/¾ų¢2wī\PnæżvEQ%%%E=–••™å±bÅ µ…÷äɓźņ}ūö)€®.óööV“Z­¢×ėՐ^xA]oś^>ōŠCŹłóēF£„††*Šb>>Ā`0Øß›={öØļOJJRĻƦV[S C^^^„żÓ£G*Ē€dee)Š¢(ŃŃŃźyĆt~ V÷ĆŅ„K@5j”¢(ŠrńāEõ\géšįĆf­į;wVeéŅ„•>£éŚįźźŖ¶¦!„ø¶4ś4¼¦žĶ™™™°lŁ2lmmٱc»wļĘ×חµk×Ņŗuk6oŽ @—.]P…#Fšī»ļrįĀžüóOŽyēĄŲ»®/^ĢäɓųąƒP__ß*·ONNŒSuīŚµ‹T›ž“iÓ8sę <šIII”••ńŃG°zõj’’’čŌ©S•i$&&²mŪ6|||ˆgŪ¶mŲŲŲšć?VŚÖŌź3hŠ 6oŽLZZ“&MāŠ”Cģܹ???āććŁŗu+Z­¶Rqqqœ:uŠW^yEķ÷½~żzņó󉏏ĒĖĖ‹øø8³÷ ¾łę>’üsNœ8Įžżū9uźėׯĒĆƃ}ūö±sēNģķķłé§Ÿ*•{÷īŻDDD°sēNŅŅŅŌu†­[·rźŌ)¼¼¼(++ćŌ©Sźz;;;¶nŻŹśõėY³f gΜ”[·nģŻ»—ļæ’@żœ/¾ų"ģŽ½[m2żß˜jU_|ńEŅÓÓ¹ļ¾ūŖ<&āļAQ”j_·3 ÄĘĘĘ’ŃĶ›7Ó”C‚‚‚X³f ōļß_ż’mÓ¦ ƒĄĄ@lmm1 œ={ƒĮ ¾ś÷ļOŪ¶mIKK#22’W_}•ņņrRSScĖo\\qqqسšŹ ¦5iŅ$ĄųŻ²e Š¢0aĀ ƒŗ½¢(deeQZZ @»vķŌ÷›ņĢĻĻgȐ!ÄÅÅ©-–Z­Ö¬Üg¹2퟊Ė\\\0 ø»»Ę)zMešóóĆĘĘƒĮ ī«ųųxāāā˜8q"€ŗæ222xłå—:tØz®6­3µ^†‡‡WśŒōźÕ‹‚‚bbbxā‰'())©ōä%/yÉK^½j{]l(W}ŗ„‚‚ÜŻŻ9}ś4:vīÜ /^™™™äēē[}³fĶøpįńńń;v €’’’«^(ŅÓәśČģaWNNNW½Üļ½÷#GŽ$11‘1cĘšĢ3Ļ0o޼ßWńfūܹs€ńfø6222cŸęŠūĒ4OE={öd޼y<’üó|ųᇬ\¹’?žųCM#!!Į,źžoqė­·ņä“O²qćFŚ·oXļK~ńāEuü‡e¹“’’Ģņōńń©Ó3`*²±±©v½)ĻU«V±jÕ*u¹©UėŁgŸå7ŽPkŃétj°Ņ¬Y³z•M\ūjxXŪĘTóN@@iiičõzbccÉČČą«Æ¾bķŚµtļŽ{{{u<Ņ©S§0Œ5õ:š7o^éF¾yóęüųć¼üņĖĢ;—eĖ–ńŚkÆĘÖā÷Ž{ĻlūŠ7Ū–7ś“&Māµ×^cåŹ•„„„Š„K—J7ē^^^j‹FBB‚:«TóęĶćwĀZžU)..®2ਘoÅ}kŚÖßß€ŠŠŠJyīŁ³‡¤¤$<<}:3fĢąŌ©S<żōÓsāÄ ž}öYFŽÉ”C‡ˆˆˆ ’ž•öŸ³³3Ė–-ćāŋL˜0A]gT,gÅßccc±··ē×_eŃ¢EDFFņĒšÆż ;;;ĄŲ‚łńĒ«×SŚŃŃѤ¤¤šņĖ/sźŌ)µåIÆ×S^^ĪK/½D’žżÕ Ė}/„’4–ƒµ€ĆZPQ1©.h©««€XÖx•––’‘‘Įć?Naa!nnnŒ?{{{œœœHLLäܹsDDD Óé(((°Z«fź§ģīīN`` ZÓmŗø4k֌““4’’’Ģʐčõz³®¹¹¹ø»»«7ÄgΜAÆ×£Õjłī»ļHNNfęĢ™fAPff&¾¾¾¼ųā‹üüóĻ}śP^^Nll,ƇgÕŖUÜ{ļ½€ńf}޼yj:&æžś+ ,`Į‚€qߎwß}ŲŚŚņÜsĻ1cĘ ęĪ«ĪžvĻ=÷Š­[7³Šiv芁:päČn¼ńFuåg™9s&[·n%!!A-ć7ŽČ /¼ĄŌ©SYøp! .Œē>}śTŚÆ111l޼™eĖ–ńż÷ß3bÄu]yy9åååj¾–ß#S¹üüüx蔇xė­·xōŃGÕõööö<üšĆtķŚ•żū÷óČ#Š«W/Z¶lIff&åååLŸ>ß’ķŪ·³}ūvbbbČĖĖ#''‡ķŪ·óŹ+ÆšŹ+ÆØiN:µŅžBˆĖ€£ŖŸU#֖_IŅ ˆµšFƒĮ`ÖB”Õjyļ½÷Ōī.S¦LįĆ?¤gĻžtźŌ‰ääd&NœČ’ūßJ7š‘‘‘h4’’’ TĒ“˜ŗDDDĄŌ©S՚m0Ö4:;;«;/44”’żļ“hŃ€×^{÷ߟ={öpŪm·Q^^ŽŸŸwß}·ZīI“&‘’’‚‡ĀÉÉI½ŲWü¬ÆxĆĘZś°yófˆ:®¢(j Ijj*~~~:tˆĮƒ³nŻ::vģHxx8GŽįŁgŸåńĒ7ŪĻ›6mbÜøqDFFŖÓŚĘÄÄŠ®];Øv§ #11‘^x3fT*ÆÉųńć™>}:eeej_ņŠĒŲT›:yņd-ZÄć?ĪkƽFAAgĻžeŌØQ¬X±‚N:Abb"3gά4•([\>Ģ]wŻEóęĶÕV²Šū“Ŗn'¦ß‡ FėÖ­9pąįįį“lŁ’C‡±téR"##±µµ%++‹ĄĄ@ ŃjµźĄŌI“&1wī\¦OŸĪ³Ļ>«ö/7ż_żŌt¢Øź¤Sq}mҹT|Tl˜^÷ß?Ɔ #44T½™:t(/¾ų"QQQź²’ūß$&&ҽ{wµ[čW_}ÅņåĖIHHĄĆƃ‰'Ņŗuk³n£#GŽdɒ%=z¬¦3eŹ"""X³f Z­–ČČHFŒ^Æē`ōčŃDEEUJsžüł9r„ČČHuŻM7ŻDdd$įįįčõznøįÖÆ_Ļoæż†F£”oß¾„††JHH«V­Ā`0бcGFŽY)€§žzŠ€€233éŌ©vvvźŌÜ`¬ōyśé§¹ēž{ˆŠŠĀĘʆĻ>ū ///³ōžóŸ’Š·o_¶mŪ†««+ŃŃŃ 8EQX±b?żō†ńćdz{÷nRRR(--„k×®¬_æž+VąččČ]wŻÅęĶ›qss#**Šoæż–„„ŹĖĖéÓ§“ś9„⟠¦ąĆņUq¹éwÓżAC! €X»Š;88ŠŖU+rrr(,,ÄĻĻ=z0kÖ,z÷ī­ŽŲ-X°€¢¢"~śé'öļßOūöķéÓ§ƒ¢££ U/ˆÆ¼ņ ‹-ĀÓӓwß}—¹sēŖē̙ÁHJJ¢gĻž¼’žūjWī»ļ>>’üsuń}÷ŻĒŖU«8vģAAA”••Ń»wo¶nŻJnn®ŁĶo`` GŽa’žż„††2ž|üüüšńń!::šV­Za0 !::/// C„õļæ’>=ö‡"::š¤¤$’““Q…ČČHČÖ­[ńšš °°%K–ššĆ³fĶ>><ņČ#(Š¢Ž94hƒ žČ Ę.ćʍS’®øĪÄĘʆ±cĒ2vģX«ŪEEE©“K˜Ź«ÓéĢ–[¦Ū·o_śöķk¶<,,Œ°°0³ķ;vģHĒŽ+åIdd¤YšÖŹ®Õj¹óĪ;Ķ–5 ų«ÄŌĶr½ez±±±ź,cš×ątÓyĢņ³™*!ĀĀ˜9s¦ŗŽŌ £(Š:{XuŸA!ž Ŗ >jūŅjµfA†µū„ś!å JT5ˆ³ŗī –ŪZū»©,_¾œżė_¬_æ^ÉźjQEķ†uąĄBCCÆj~BTTUK‡e­‡å2Ė÷^kAHMĮ‡å«bšaśŻņ§µĄ„Ŗü„BˆkåµŚZ¢Õj+żnł³ŗV’Ŗņ«Éµ€Ōf§µ—åv–i5•ŅŅRf͚Åm·ŻfÖ„¢!ķŲ±ƒ+VŹž={HOOĒŻŻ-ZHŃØjsbŖøÜTĆaŁ{„Ń®¦źĪEƒ kó”[žnķVń§Bq-©®»•µ`Ćō2u³7ż4­·L»IʀT׌Q]ĶbUĮˆµt›F£į§Ÿ~¢mŪ¶fóå7¤ß’wß}WżŪŽŽž—_~ąŖå)DEµi޵¬õ0ż]ń}×bR]„HM‡i°“é§µ€¤¦ó—µæ…BˆĘPSĻkĮ‡åĖĘĘĘģwųkŅžš‚ŗÜ Ō« VUĮGU]¬]Ä+n[1ĶæūÅ»°°mŪ¶qöģYœÕˆ ŃXŖŖ©®6ÄZ3mÅ÷Z¦ŻT¬›Ŗ >,ÓŲÓĖZ0ņO>w !„ø>ŌŌņa-č0¦ß+.³|UÕS¢bž5–ńJŠ?-/Ī/ÜÖj+noJC.äB\]ÖĘtŌ„&ÄZ b™nSŖjܙe…ˆeŠaz~„åOkHuAˆåļB!Dc©®‡ƒµk½e°akkköÓ21ż“Ö;¢®÷uī‚UÕ޲µĆ²6ŃZķbuŻ„WGuM±–'ƒĮ ž=LŅŌ7Ō”žÉµŅ ¬w½ŖųŖlTõŖŒX«@‘Š!„ךړ'2d IDAT|X¶¶¶”——cggWå=¹eÅå•Ü\ń tkĒ?ü@NNNµ}Ŗ«R1}!ĕ³Ö/ŌZ 2zōhÜŻŻÕ“‘éeś~šFS©?čµxXž]ń\U±"Ähčt:³—iYÅ@¤āł¬¦éB!DSØnÜGU­vvvŲŁŁUjķÆLTL«āuƾcAė€T׿ŗb²`ĮŽ;V—¤…׀®]»Ŗ'";;»J]Ą¼9÷Zm©jüGÅóTÅą#55• 6Tź~eY‰R]ą!Į‡BˆkAu3[V×kĀ„ VÆłÖŅ1]ė­ŻŌF½Z@,ĖnWŠ¢ąč`ĆšžŽõI^ŃČāóI9[Lqq1EEEŲŪŪ£×ėĶjBL¬Ųź{ŗŚ¬!ƒ NGYYGe޼yM]\!„¢ÉŒ1¢ŅĢVƒĮ`5©+š†×Ś…ŻōŌ`[ m]꛼¢„œ-†³ĘYŚ Ńėõ888Tjfµ7bŁDŪŌ¬µ|X’a­ū•‰ĶµńY„Bˆ«MQĄ`0^ēKKK±µ5†ÖZL¬#U©É±vQB\Ÿ )((P»!U >,gŠhØZ«ÅŚLX–3_Uóaņąä \]lšŖŲB!D£9t¬€_7f ÖŗjU|H”å«>×’zĶ‚US·é -ÄõÉ€˜ŗ]Y¼V^^®ĪUqČµŲ «ŗ±j[@¤āD!Ä?]II ¶¶¶fćClmmŃėõźußō²ÖśQ 2 –µ.XuįŁ¬%>ž­IO=BQaĪ•IqŠŠŠ(,,TæĆĖ“PCŌ€\-ÕuòœK!„ĀŲboooõ™ +­MĀR×{mĶ›XW]­b]NŻFrļ£_Ņ28²¾ÅB4Ӑābć€ō’’ŹŹŹĢŗ*Y›¦ļZbm^k"¼ŅÖ”ŻiÕ¦kC[!„hR„„„VÆłÖ®ū–×’ŗŽ Ō+©©vQŌ_óPÆīĄ}­Ö†ĄąN –ž½Ķ[¶k°ōźŹÖ΁ę-#š,’æÓ,X¦ą£āÉØŖąĆډčZPÓ4¼–!¬«É÷½ĶMS\…’ !„Æ¬¬ĢģšozY>ÓÆŗ)čk{/P§ÄZ¢UMĆ+źfčø'xü?kp÷šæŖł<ųŌÜöĄū ’–½ƒ3Ļ/ÜĆ ‘Ó$½ŗŅjmx~į^†Żųd“ä’wdjł(..VƒÓÉČņŁ–Óóš\ ß’šĪU–AˆTœŌ#A®z>®ī>xū¶j°ō|üŪąāźÕ`éÕU3ŸVøŗū4YžBaMU=*> «!Z?ą ŗ`™2“6DŌƒƒsćäӀ-,Z­ vöN –^}Ų7Ņ~ū§(--µŚņQń‰ą55Ć6%k51µi ‘óVŻiµ6<·pĆĘ=qUó iכg^ŻIDēøIÆ’©Ģzq=Ž~m$½ŗźuĆķ<łņ¦&m9Bk¬]ó«{o}[? ž³`Yž“ģc}„7#^͉źq#ēĪ$rģšf³u}ßCꉽ¤„$ØĖlmķé;ųΜ>Ą‰£Ū±wp¦ĻĄ; lŻCy93S9°gēĪ$Öŗ Ž®ōx'Am¢0”ė¹˜™Ā¾?r!żø1O;zø°h“6¤§fǦ/(ĢĻVÓšoFhūžl[’ !Ὀī}.®Ždœ;ĘÖõŸ’)­Ö†žC¦Ņ2ø3ŻūŻJaA6¹Ļ’°g…šVxĒčŅ} .®ĶČĪJc÷Ö„źē kߏ­"9uüOROīSßćā֌˜>·•Jzźa"£Gąģā…-7 ›Ą©c»H=µæŹżŽ‹®½ĘćźęCž„ R’wspļJ[w&¤]o|›·UÓKŲż ¹Łétī6Š‚‚l²3OÓ?ī>llķŲ¼z1vvŽ“ļGŅ”œ?›d¶Æ": ęčĮ \H?fvśŗ‹ĄÖ]Ōć°wĒ8:¹ŽoßVjž‡ö­äbfj­³0WZZZ©å£.Ēµ4ŻņUŻ€tƒĮŠÄ„½>5F€ĶՕ™i¬ŹžŖŲ;Čó±„×&ĖĄ£āµæŖė}ļłÆčIčUͳ„JK :néiGĢ’6Œ¾ł9ļ_ĶW‹T—¶īĢšńOńŻgO Ńhøėį%“ ļIž„ ōŗR:v†g³–}ņx­ņwvńdŚ“ßįŪ¼-yY”•ѾKł¹~{g¦Īü–ĄąNä_¤\Æ£}ēĮtļ;‰÷_½‰K9ēhŌ‘Ń7?‡g³ōt—rĪįäģID§„wŒåy£ŃŚŲ2|üSjŽż‡ÜĄ‰¤j2xŌ āĘAlZµˆ€Ąö ’łYfH‹ Ž ’ł—2ŌÄŁÅ“iO}ÆˆŁqČĻĖĀĪ΁”—k^}›·Uóæž$Č05½VW bm ÓĻk!ų°Ö,\SŅē­ŽQĆšńoĆī­ĖĢfókŽ2‚šŽ7°uŻĒźwŒƒŲƒŪvcēę/)-)$ØuzōŸŒ›‡…łIK‰g’®Ÿ)-)Øu‚Ūv#¦ĻĶxxPŸEźÉżģŻž=:] ķéŃ’_xū¶¢° ‡# k8øw„Yѽ'yšō“#ōx'Įm»QZZČńưwĒ÷“ ‰V+šUQąčģN߁wŲŗ3z])i)Ų±ństŗlllé3čn4 Ū6|J¹žÆA¶‹Œ„yĖvÆ øm4aķūŃ[[{žXū‘پ¬ČŽĮŁXiÜ…ģĢTvÆąlź!śÅŻKpŪŗö¼‘6a=(ČĖbļŽļqqõ"¦ļ$vnž’öŽńΦfŪśOˆīuN.žl[’I„}åčäĘö ŸU>}oĮółå氏½Ū {’[ÕżÖ¹ŪhZ¶źDQa.»·.­õ1Bˆ«ÅZo‡źĘ|Z^oėrpEÓšV̼!»b”ē“v*V!Q8»xRT˜ [E!¬ClķŠėJhj¼ œHŚŽÆ[Ś„÷䥎ßXśń£(Šg/œ\k’ąŃāŪ¼-›V}ĄšŸß@Q ø{ųS^^Ą€”÷܉mė?į·ļē ƒFN'nĢc ’T„@§ē€ńŁ;÷pģČģģ¹ÖR[w¦UHWNŸŲĖėĻÅ2xŌt¢{O`ÉŪSČĪLSoš·Œ`šč¤„$šŁ;÷PT˜C‡.C˜ņąbŽx˜Æ?ȹ“#Ä’ł ]{ŽHTĻŁ·ć¼¼é1ą_œ<¶“Äė°³wāõēb¹ēŃ/°³³gńĀ[(*Ź­r?ōč+C9oĻAVF †A¹”sž­ė–ppļJf<÷I‡6ńĖŅ’)C}«h¬ć“wīĀĮĮ…Ü쳇Dל8čy _’6žžkyÓģ8”Ź9øw%³^ŚĄÉ¤üšåcžy™µN_Tf90»¦–k„ėUu¬£,ŸŒŽˆ‹0†ŒÉ„œsÄ’ł³ŗ¼Wģķōģ’/ROī#%y·ŗ¼_Ü=“nŪ-kŌ&ŠiO~‡b0p1ė4AmŗŻ{©§HO=T«ü£{O`⯢( Y§hŃ*’Ȯƣ·óGŚwŽćöi•qŠą¶Żˆź1–a_Øß_€>襤(7ošł‘Ÿ—I3Ÿ ŗÄŒAkcĖī­KiŪ®×_ž!*Žq13W7o¦=õ޾­Č攁#‘Ń#mߗO޾ƒņr=žatė3]Y1;6} €³‹·Žū6y—.šĒŚčŃ2!į½c…HD§Al]æ¬ †;ü¶}Č˽€NWJD§ĮxxšķĒ3:v¦Śm“× ·žv˜½;¾ĒÕŻ‡įćŸ" °=]ŗŒ“ll[’ ½b§ąėצRŅgąx6ki€tė=‘ w¼Ré8ģŻń#ƒFNWĒžtļ7Éx,.œ’DqMØ8棺 ®üś_臘ZĘ+•|t+Įm£ iכCū~ ]Ē8}b­C»Ó¶]o’m øm ™Nr)ē¼Ś-čü™£(Šń¦¢Ø0§ÖĻŃjmˆź1Ž¢ĀÖ­xSM#ļŅu›čžćŃėJYóĖ’©ė7¬|—^7ÜNǮð³sT€­ė>įŲ‘-čt%ģŁö?[w¦™o0)É{ČĪJ„¤8€KŁēČĪś«?¦ĻD4-+æŸÆ~†# kIO;L›Ė5ikł?:uIÜØ$ģž…ø1accĖŹļēó-+&;+C¹ƒYUqs÷CWVĢÅĢӀńųž½|3TT˜«Ö@–•U™Ž_Ī6ė–V[¦ćPXĆś_ß¶zŹJ ?ĖJjõyDĶŖjńØ®åĆņ÷kAUżR«j iˆņOÜŹ±3 čk€“»\qŅ”Kœ€h4‚ŪĘpāŲE”{ß[Šjmųąõ[ŌÉ­"9—vøVy;»x2vŅæ)*ČåĆ7n%ć|2æ€0ŹJ‹°³wā¦) Š••°äķ)¤ŠĒÕŻ‡ūg~KļŲ;Ų·ćΜ>ئ×6¢ĒüĮā7&QR”Gۈ>Ü÷ŲWōč?™Ż[—ņĒŗ%ü¹u)Ͻ¾‡ć‰[łö#ćDe„ĘļäšńOćķۊåß<Ļ®-_cckĒ}Dx‡“ķNJņnÖ®x“ĪŻG;ü!ölū®„ŲįāčäĘ’>‰ĮPĪļO„]ĒX&O}‡ÕĖ_gזoĢZL*jęDۈ>ŽæšÆ?|E1ąä쁓³óg÷&vŲ4n6Ož{'gRTjI‰ģ:œ„Kåō‰½hµu»Dŗøz1ęņqXüĘ$2ϟø|Bѕ³š…ōt7q£åĖEÓ8ulW•-9BŃŲŖp^]šQŸW<½āļ 959q+`lvćl+mĀ{rhß*Å@ū΃Šh““ ‰ęÄŃ€±6IQ tļ{ žĶZŌ9_oæÖ8»xrGWśÅŻWļ4ź|ųųµĮÉŁƒä*Žƒø:,§Ś«Ķ”»×ZšaR› ¤!ŸeröōAJŠņmßW]ę†g³–¤$ļ¦}…AŌ>~mpuóęÄŃķøyųp>żÆn‰é©‡j]®]†ąąčŹĪĶ_’q>Yżœ¦īŒįąźęĶŽķߑv*€‚¼,6žž]zŒ3KÆ\Æć»Ļž ¤(€G·“yį$Ķ.w§ŌėJ).¼€”\OqŃ%Š‹.Q^®ĒŽĮ™ĪŻGs&å»¶|­¦·i•±õÅŌéRĪ9vlüwOzÅNĮĆ«9½c§p2i‰ÖĘīø„—ƒ®Tͧ*÷£©Ņ¢øč’ZAQR”§¶œ—–R\t©R·{#a÷ r³Óė\±Ń!j(Ž.ģŲü%™ēO¦ćp\Ķ_Wf¬œ*+µžæB4•Š×üŚö|ØļõóŠGö]­›‘“Sń”–ھ!ķzagēHŅįMœ=}ˆö«5KĪ.žœ8ŗ €¼ÜólXł.^>A<<{9Q=ĘÖ)_OÆņ/YļŹćīé_åśÜģt<<«ŸJ·“ŌxĮ±µsع<ĶZ  p÷ōĻø÷Ń/ÕWėŠīĘ}_”ėČʕļQRœĻˆ s(/×±ęē…5¦_µæü…9Œœ0‡I÷¼‰‹[³+JÆ.<š™ŽCF [ІdtŌ4ķŽµ|˜X;QVˆ\)ƒ”œI;šš ĄĒß8ĆRxĒ”呜ø’6ųś‡lź6z9É8g¼A2ęńz£ j ¶ [jyłŁ?Ē’0[nj™mŌŃlyIIA„Ļāģā©ŽĆØJ@`vvŽœ:ž§Łņ‹R̦ŸŻ“jE…¹ōx½cļĄĘ֎•?Ō’Ł*YNa0”ÓēšłŌoŚŽĀü‹õĪ?Øu’m¬wBŃTŖŗöƕ=óÚ›Z¤”oDŹĖõœ:¾ oß`<›µ$¼Ć2/œ$ėĀ)¬Ćݳ9-[EŅ&¬;Šbąä±]ź{×’ś6æžo.N®Lŗē-nŗ}A­gQ1¦.Q•×/¾„%•×_®-lČ©iķģQ¬4ŃgœKęčĮ fĶ÷E…9œ8ŗ;;G2Ļ%«Q}åf§³čõ‰¤„$ÕcӟłµQęü°µ­ž8ˆ«£¦fW“k=𨨪ņ_q,ÉGM-·ĘVšŽ7rb'ķ }c+Hė¶1äf§«Ż7Æ^LNVżāīå·—ąŁ¬eņõø\q’WEĄīQEÅIa~6:] ī^ĶkĢĆŌaSCāée,{ū΃Ķ*M&Żū&€Y„IqŃ%6­zĻf-é;čī+nµ-ČæČŚ_žÆę<4ū'¢{OØwZõįį%'BˆėWU×k×É+½v6Ü܆4|čńĖŻ°BŚõ"“C?ŽŲĒ@“‹H«hĪ„1ć”( Ū6|ŹŪ/ '=ķ0ŻūMRg—Ŗ‰©yßŃÉĶźś¢ć mkA†ćåī¦&ö†PX˜KiiKŽžRéõÅūSͶõ £}—8.¤£E«Hµ›Ś•ČŗpŠEÆMdõņ×p÷ōgŹąąXūżõUÓqWGMAĒõŠźQ•ŖN  ł™Žł+±wp¦MX¬'õä~ ó³ÕnXĮ”1jėĒT-Z8‰ćGž ]d,ӟ]a6Ę«&¦Š“Ŗŗó˜‚kėKŠó±«Ek,µÜG¦²˜ŗ@™ŹĖINÜĘY‹q-‡ö­Rßwüˆy M}l^½ˆåß<7ßł:7ßµ°A§ń­Ž©uH*N„×£šZ<Ŗ[^WsV®§äDc·Ŗ€–ųś‡xŠŲ/ųüŁ$²³R lŻß攜HŚaõż3SYņÖ rč7ųžZåYp¹łŻĖŪz ¤©[‚©ÆqE®nŽ—·iøŚÆ‚¼,\\½°³s¬qŪ7ĶF1ųęĆGŠėJvćShµ6W\ƒ”œM«±yõ"¼|‚č5“Žié/Ļ$Vłó˜w;),0Žńņ¬w^¢~j[ūq=ŗŚŸēbęir.ž”MxZ‡vĒĘʎ£7b0”sōąZ…tÅĒæ >~­9‘“Żģ½y¹ēłō»ųń«988ŗrŪżļ[=ĻXc«QeÅÉå kĻ pttE§+«ĖǬ–iÖĀ};°Zq²oĒfŪĒPČbąČ‡Æųœ„( »¶|Ķ›/#-%č^7;üĮšß؊‹«?Bq-«©Å£!Ɲ×T¢±ø Ķ8wœ¼ÜóDtDIq>§“÷ØėÖŃ"ؾžmH>ŗŻ2)UQa.驇pu÷©Õ…-÷āYteńµļoõ¦_WVL^īyZ‡ĘTZŅ®z])ē’kĢĒ’©¶Pkc>ėŹłō£h4Z:tRķūŪFō!¢Ó@vżń ē“Ł¹åkü[„Żė&³ķ Cgv1I¾<ĪĘŻÓļrZĘī_66µOÆØĄx#d ÖLŚEĘØ5•9Ļ Ó•ھ_•ceL_†ŗä/Ŗ÷w 4jćj#ɉŪpvń"4¢éi‡ÉĖ=[nµZ¢ŗĒ„™&ΰ,Óī­ĖXłż<\\½čŚóĘZåYŸT°›ŗ^¹y˜O|aļąŒ½łf—»R—+i<¼jžÄæE1}oįąŽ•ģŻn|ęO÷¾“¤¹Łgłäķ;Čæ”AæøŚU@UÅP®ĒÖ¾ņõĄr¼Ī_XRq"„ø¾]ķJČk"Ń_ž²Ö4šø¢äÄmųų·!éŠf³ńGŒć@lmĢęÖwrö E«HõoWw‚:•V«éõś2Ž$¬ĆŽĮ™‘ŸQoˆ]¼š ąąŽ•ŲŁ97ęQõŻ{޾­8œ°Ęlv¬Ś2Õś_ĪĆÜģŪaœĆ?nģćj’b0vōö5²Ōh“Œœ0‡Ņ’B6®|€Mæ¤ūøY T\”‹«»:}u-+­B¢Ķևw0>,ėņ`ҲŅ"ōś2|š‡Øū©¦–šK9ʛ±ö]āŌī ]{Ž'²ėpąÆ. z])‰ ėpptaä‹ćŠÜ8˘¢()ĪĆĒæ\Ö¦„HKõ=¹j“•O”¦ü:D åčåŁœĄŲ„T§+”s÷1dœO6›RŚ’©uĽ–- —g\ŖŖŪåŌĀ.Oźab«r¶Ā¼µeŗ(YVšd^8I¹^G‡.q5VśŒøiŠ¢°iÕūģŲō%ÅE—Ą¬—6ņčóæsóÆ“—{žU?¾ZÆ}rb/īx•GŸ_ÉģW¶accKźÉ}lßų9>~­yrī&ž½œ§ęmį”Ł?Ńė†)€ń‰¾-‚:²uŻĒj \aA¬żwĻęō|W…ż¶­Ö†GŸ’™/®cņŌw¬–ĒĘʖ;üēīaś³+xņåM śéi‡I<°NŻ.õÄ^üš‡2ė„ Ģ^°­Ę±6ŁY©œ>±AyņåĶĢüĻZn¾k!+–½HnöY³™¶Öü¼¢ĀzĒN±zNŸŲ‹—w O¼“§ē’Į Q3¬e+DƒÓéŹhę„­YMų‰¤ķ(Šoß`u:Y0¶ž&'nÅ×?¤RėGPė.fŻvĀ;ʐu9pØÉįż«)/×ÓsĄm¶ī¬.oŚFƱ#[(-) G’É“ø<㕽ƒ3†>€¢(Äļž„®_­šõo£ŽĢŪŁ;QRœĻ‘„µø{6gČŲ™j偭­=ŗTßß6¢ķ"cٳmY)—¤/ĀĶƏ~q÷ŖŪ™ŗł·0VĪŲŲŚUŒ8:¹©3Qøø5£e«Hr³ÓŃėŻĢL­°¦ „ŚLrér+V§č‘j>“ī6>Ŗā¬`‡ćĒ”× ·xyę1€6a=Ō’Ó8BæĖÓµ7ä¤%Bq½ø&ś®œ:¶‹ß|…°öż),ČęüŁæęĀ?qt;gNäŲį-fļ1ŹŁ½u©Z£n’xp®+Ž" Ø=n~;²…›¾¬rœˆ5ŁY©¼·`ż‡L% °=„%;¼E}Zoa~6ļ.ø‘~q÷Ü6­Ö†-k>äuS—„¦s!ż8›W/R,“K9Ų¼z‘YĖĶ©c;łõsiKiI»·.S/Ü+–½HŚ©żtź6 7w_ŅÓ³yõbµ/µƒ£+›V-āu›å³uż'ŲŁ;Sq|ŦUļaoļˆĖväfŸåšžÕV÷¢(üōõ³“ļ2Æf-)-)d’Οزö#³ērüšå†Œ‰‹[3².œāŲįĶ€q.żō*¢öÕāi łĶ[FPRœĒŖŸ^ćHĀZŹŹŠĶo^ĢLåŻłVŽĆĘ/Ōm–ó<Ćn¼„«»/3N›GB\MĪÅŪ·³^\F£åÕgŒ­ …9¤§Qæ«IXGūĪqfŠn¾ū ¼¼¹˜‘‚>žmø˜™Ŗ>ż&—rαaå; ó8=ż#ēĻ&įģ≇W¼6‘Ō“ūųķūyŒæm>=ż#Ņ“šōn‰³‹ŪÖĀ™”õŚ)É{hßy0³^Ś€VkKüŸĖYõÓk¬üa>Įm£‰ž ŻzO ?/æ6ŲŁ;’v*žK9ē5įŹJ‹X’Ū_• ;6~NŸw2`Čżü¹å ņ/r!ż8%EyD÷š@`pg<<›óÕā­žÓ;vĘÄ;^#/÷<łyYųś‡`gļÄ_<­nsśreĻ蛟£wģ¼¼Y0»wµŸs’®åōŗįvnü×\śŗ Ɗ‹.ńĖŅ’pÓķó±wp¦¬“ˆÜģt6®|—ø1ńŠģŸĢĆ«H=µŸÓ'ö ( ĆĘ=I·ŽńņäõēcĶ®Bńw§QźŠĪRq~`Ó“u:„„„STTDAA“&M";+G¦]Ͳ !ČŖ-YÄ'ęÓÆ_?šņņĀĖĖ‹f͚įå內§'žžžø¹¹įźźŠ‹‹ ŽŽŽ888`gg‡666hµZ4Y·”ĘTń!Ц§¹ėt:õÜõČ',ykŠ:ӛF£!4¢/‘Ń#šņÄĪŽ‘”ä½l^³H\^[‘Ń#ˆź1Wor³ÓILXĖĮ}æ«cĢBĀ{ѽ߭xy·¤ /‹„=+8øw„Y}މ£³;~3oź1Žę-Ū±nÅ[jk‚‡Ws†Ž…«‡/Ł—&Ó jķˆ IDATƒ]Ż}čw/ĮŃéJÉ<‚„ŻæpęōA¼|‚čŁ2ēŅIŲ³Ā,Ÿ°żiŪ®7GnT+iBŚõ¦ĻĄ;ŠjmIO;lµņ Œwé{3-‚:āęįG~^&;7U)ą‹és3‘Ń#Š•sśÄ^žÜŗ{gś ¾‡”äŻ=Xł9ķ;&ŗ×Møøy“žv˜-«?¤LWLģ°ilYó‘ŁLŒŗ¤K÷1U‡ØćčŅ},åś2ROķgזo䁄Bˆ&qčXæn4ŽŻ›5k^^^ø»»ćīīŽ››nnnøøøąģģŒ““S„kæ­­­zżÆĖ=€ B @ź€!„×»¦ @®‰.XÅÖÖwĻŖø„ח©3Ö!„B!Ž?*ńoĪ#ĻT=Ųņlź!Ž?¶K$„Õsuó¶śü“‚ü¬zͼ'„B4•T’›}–Ÿ¾~¶Źõ¦‡ß !ĵbŌĶĻÕc\•ė—}ņ8ńžÜˆ%B!®Ģ?*),ČįĻ?¾mźb!D­ķŁö?N’³Źõ¦AßB!Äõā€!ÄõęDŅŽ:M#.„B\뮉 !„B!ž$B!„B4 @„B!„F!„B!D£‘D!„BŃh$B!„B4 @„B!„F!„B!D£‘D!„BŃh$B!„B4 @„B!„F!„B!D£±mźŌ×ę?s(ÓšŗB4™ž]^ŠŌÅ¢ÉxŗŪŃ-ҽĪļSŲ°ėāU(‘׏žŻ¼°·ū{Œžø®[[--\›ŗB4*WW»¦.‚ا¬»ę5u1„h2AŽõ @ …݇ä»#žŁzuöÄžor p] B\MEÅzœī+ŅŠé‰ė×-cCéÖŁÆ©‹!D£zfžŽ+N#¢­wOjß„āś±ōēćģ?œŁŌÅhPr7ŌČ>ūßQ¶żyŽ×žļƒ—‡CS§J‰ĒsųæÅńLՖį[5uqŻ‘cŁ,ü`?Æ<Ū?§+N/éD.ƽ·y³{ŃÜϹJ(®gĶ< j!­·āFsåI8:Ś$=Ä?Œ³óßļvżļёģ„(J„eeeå鬮»–”—(,Ņ”Ó7ĢLcMżyė’æĮ šé²£øÖ;ų°Ģ/$Ų'G¾ü!©^é !Dm””–7čłVQJĖdĀńĻP\¢æ¦Óū;‘ä*łąóC¼ņ.F“»YÄK’·›_צ4IžsJxł­=üšŪÉZægwBgĻpÓȶuĪoļ žxi'O›÷U¶³Õ2zHöĢäō™ü:§+DS**Ö3õ‰|ųÕį¦.Jž»äSŸŲˆĮpmWņ\-|~>?Ō`é½ūÉĮėāø_ĖŽü0ūŸÜŲŌÅØŃö=ē™śÄFžÜ”©‹Ņ$¶ļ9Ļć/lm° a×¾ ĢśĻ6ņ t ’Žß WÉī„ JJ„Ö(;·”£É9šč‘-¹y„9–]§›‘?v¦ćåį@—Ž>uĪļäé<ŅĻZ]7 W ll4ü±+½Īé ј¬Õ é(½Īi%„z ‹悯(ĘWSŖKžń‡³ŲŸA×HßzęU9³.}ر瀫VIB¬7»Tżbµ³‚3›Ü‚&{nūÓkNwWN;ßm)į®G·õyߌ›¶—q÷cŪG4qżņŪBƒt̜8āöžß»GyžõĆ}–Ļ™ŒæÆ–ƾ¾ł—ˆÉdåŧóļ’ kQAq žĒ^vģ«<-ķ—V“ńÄ ūŲ²³|ŲūlŽQFKk'Ė—ÅŒø½w—sϟ·ÓÜŅé“ÜĆMĶ’yalŁUNS‹q€½¹œUQ-f³•{ßĪĶ×&ńķę*«»5ŃS&pļļ&¢PtGĮmŻUĪ?9Ž©GEõ“?øm’c»×’w w c§•ƒŅGł¹Ēf@ŗs_%ļ||€¢ŅVī}|;·ß˜Ź¼!Žķ¶ļ­ä‹õ'œŚžķµÉ,™@K['÷>¾ÆJäĖõ““uęĪ3Ģ`÷Į*Žx?ÓÉ771Ī›‡ļš‚Ŗ+Gōw[JųņŪNB‡F­ąĪ›'0eB·†ĢŲiįÕwŽ:Īo$=^ĻKo¤; Xnj^{fo®Źāš1)kĆŗE¬ŪXĄ[/.ĘU«ä±ēö²dnūÓk(«lC„”óĪKKXūCkæ/äļĻ"*ÜŻqÜ5 Y·±ˆgEDØ“Ü`“šĀė‡ūhēīæ5ū+Ł{H2%’°­”¶•šźßąćÕ€#Yõ˜ĶV' bIy+~n/÷¬œČ;g9]Ļ‹ĻāŚĖāxąÉŽÉŹKo¤RģĒÓœéŲ>-Տ¬Üņ‹š‰ńīeʄ²Ź6 Š[ā1dę4ŠŠd8mķĻk ®A?ģķ«k;Č/lbÅeńČd#öޟ^CtDßōø ¹Œł3Cųb}õ|½]F|ģ_&³4G˜9%čtwå“SQŻĪ‰¢fX~ZŚÆŖé · ‰¹3‚‡½Ļö½ÄFzę>ōƽ8ž×Hm}’cuќ0Öo*f÷*.X9ācŸĶœUˆ’­Īa|’/wŽ<žĪN+o˜ÅĮŒ6ļ,ćÜłŅ€(*må­³ōÓrćUIø»«ųäė<Ņ3ėŲ¶§‚EsBĒŪ{Øo/®æ<½ĮLHnĄ¶“Ęy³rE2ļ­ĪĘŪSĆ%K£ķ<Łüā›\{Y<©‰>ĖnążĻrųü›,žźōńXõYSü˜ä‹ĪUJž\YÓĮėļĆĖCĆŻW'āćķĀėO°?½†ļ,įĀs¢I枚čKZŠ~>ZŠĖZłšĖ\ž·:ŪIy÷“lfHfū‹—Fa2Yټ³Ģ1yŒæĢÅfƒ?Ü>‰ąWŖkõT×u PČXŗ0œ ßl,bźÄŅŗ\šzŃY³”Čpw~sU"«ĶI@«>Ė!+·y3BøčÜ(,G×‘ļƒ‹FAæ+_o($-Տ©]iOuƒd“(*‘b7z >v^{÷(‹ē†qμ0jźō¼ń~&k(bŅxć¤ŌūT“~¬ŽKĻ‹ĘßW‹»›ŚéQįŅ¾Ø“U z3ĘN ŽžŖj:Č9шB!'5Ń/¾Ā²Ķy…M”W¶ćŖUėå”UĻl¶ŅŠdÄßׅęÖNņ š ō×:÷žØo48„ėę–NjźōČåąē㜈Įf“,%åUmxyhHēK—…¶vf‹/ Å-46퉇{÷XČ/j¦¬¢ FĮøh/ü|śNj[Ś:©©ÕÓŲlÄĒKCL¤Gæk“ÉJΉFŚõfü¼]Fd]Ģ=ŃDeM;jµ‚Š ”īX,6ź åNM½•RŽ‹‹75£…¶v~>.TÕtPZŃFd˜;~Zj»¶õź•į°¦NZÕwy[»‰£Łõ ¼<Õ$Äz£Ń(Øo08”:µ z:ōf\4 §k؛ݫ°Ł`ņųīw{Kk'2™ w7Å-—µāźŖdB’ÆĆĶDo0ÓŚ&Ył;M’µĄĆ]‹FĄä ž|žĶ vØāās£†}}ĒūżņóqĮŲiįHfzƒ…Øw¢ĆūÆ7R× ēxžäāÖGšŖo4ąŖU¢V)8š]R)'!Ö •²§‘¶võ’°j0š׊ĖSÓ§h\m½Ō¶R)'6҃@’&³•Ę&#ž¾ZšZŒä6ąź¤šlh2•ŪˆÕj#$HGl¤'½‡E§ÉJumu zr9ń1žNc“'Åe­TÕt Õ*éŠ?ö”¶^OnA‹ _ob½P*å44hi“,-­Ņ{D&_-6›“Ÿ·—³ŁJVnī:5ń±^““vb0ZšóqA.ļ>!ūr_§ńo±Ś8ž×HMm:W‘aīøŅŲl¤¹U²6“¶™÷b°„2•5•¶råEqŽeĘN ­mųłhij6r4»«ÕFbœ·ćžY­6źzŒÕŗ&+µOi¬†éōweē~!€ōę¬@\4 īžķ4jéåyĖ )<ž½ģÜWé@¾Ż\ŒÕjćĪ›'8^>·ż:•»ŁĘŒ'Äbµq’­iżNJ{ģFh°«¾ČÅÓCĆā¹ażnwĶÆĘ9ŅŪ†»±?½šćy4·t:}¤BƒŻxą¶4§·aK1f³•Ū~Br¼·ŽŹ‘Ģ­ĢØu óg†0f·Õ%iœ7™9õĢØEo0£uQŅŠd`Ūž ‚ݸ(»^°2Ć@*ŖŪ‰‹ņt|ō‚»…³‰É~ØU ¾ŁXDl¤gæ×B„VšČŻSGU£CoęĒ=åś»rė )Ž—–ż>„&ś¢Õ*łzC!QaŽ‹ž•µāā¢ÄĒ«ļ„(2ĢÆLD&“īŁÕ—ŽćĶ2ٵæŠÄ8oĶ „®AOś±:¦N 6ʳĻ1B»„×¢RQPKŠĶ?–²iGĖ—ÅšÖ‡YŽI“F-½Ė&õ˜T f^üO:™9ŻV?•JĪŻæąØ-RYÓĮŸŽÅ-×§šžg9č fĘ'łņš]SģĆß^>@UMļ~"Yq=ÜÕüū¹…ŻmwZxīՃdļ®Hķē£åļĻÄM')HÖ~_Č”£µĢžĢź.ßg»Ųd²ņoqXF ·ŻŹœé’¶²­ŻÄ«’Ķąčń'—ŲųX/¾kŠć½RŗģWŽÉčćś06¼ņN{V9-æņā8fNä'w:–=ųWéļ…³C¹åś©įU™üīŗdžó~&V«‹Ī‰bÅņxīb‰qŽ2™Œ^;wĄó9xDņžHß÷™‘UĒĖoepß-i¼öß ‡!—ĖøįŠĪ[A[»Éi¬>žü^¦„pß-iŽå“RżųnK M†~ēæTĪJd\“—ÓG*6Ņ/ =\²Žf׹§uŅ|xyhšÓR×Ė”&“õÆ?¦„9ūčF…{HH«³ęŽGėwōx=n:•Ó‹ĶU«$,ÄmH“½æÆ¤hŒ¬zl6óf†8„‘ąęŖ¢“¢¦fcķŽpņ׎ŗ8_N~#‹“4&'CUM;~Ś>%€Ō§åS&ųóęP^ÕÖwćšöŌ Q+=ĄN]ƒž’­Īęęk’HˆóęšŃZ>ś*—挗ŸšļŠFæūi6™9 œ·0‚³B)Ælćķ²xóƒ,&$ū9M’Žž0‹é“ć…Æ÷ąćóŹ‹ćH?VĒö½,™Ftø‡ĆÓĪᣵÄDzņŲ½SQ«|ųE.ŁłlŁUī41­Øngżęb.æ0„RNbœ7}•Ėįcµ,œʹ Ā©©ÓóÖY¼óńq&OšGė¢tL2.» †ØpwT*9ßn.&#«ž­»Ź9o”¤øih2šĀæ%WĒ›®I"2ĢŹźv>ł:Hė¬Üö¬bRŖ?W_‡Łl#氉q±^xzhX¹"™¶•R\ÖŹo®NB©9MģĶf+o}ÅŅįųłhŻWŁ0MĶF^y;¹\Ęļ3ž˜HŖėō““v¢sU±rE2›w–SPÜĢõW$ą¢Vą?pż ‹ÅFiy+“'ō >Ļ8^ωāfī»e"!:6l-ećöRŽX•ÉSĶ 9Į‡•+’y÷Ól|½]÷±ēdU&ƒČpwŽwiŽOÕūöTņŸ÷3™5%ˆ ω¤±ŁČ›«2Łø­”“?‡‚,żXGL¤+.‹G©”óާŁlŻUĪĢÉALHöuoĆÖ‚uüśŹD F³ć¹ģ)żńpWóæÕŁDGx°¤KŁÕ󙱣¤•×%éÉ®•|ż]!ŸÆ?į¤`xėƒ,fN "6Ź_išßČ{«„ōš×_ž€«VÉŖĻsŲs°Š“™1YšSØÕ ¦„šč‹·§†ģüF>’ę~‘Ėć÷Os“ńź;Ļkdńœ0ęĻ ”­ĆÄw›‹9–3t²÷WēąźŖä÷揷§†²ŖvGlģeĖb8’YĒÖ]å,˜ŹøhĻ>ž •Gā8o–-‰B­ł¼ć?¬• G²hN(£…£YõD…»sÉŅ(ŽdÕ³q[)s¦“ē=dż™ĀŅ !Īó<«ÕĘĖoįŅó¢™9%ˆ‚āfŽłč8«>Ė!-Åo/V®HęĒ=äHī®Z%~¾ĪÖ»ēCaI«@zpV ņ^ϳLžZņŗĢ…&“…¦f#!A:6ļ(sŚÖd¶CnÜ^Ś'µģ7Opzi¤v· ”ŅæŁl6Ŗėōųx¹ōé»Įh²n‡Ł,iN”]/{œLXšĄneƒ±lI$|‘Ė/īćŽĒ;vnEUµŅ$>hóHiė0÷q9±Óū£ėį®F뢤„udŚW«ņg‘E0öœ·0Āa© ŅQPŅĀžƒU=^Ē““@šZ¤¤Ić¼¹ńŖD@RŽ”V¶±fC!ł…Ķ$óv/!Ī{P­yOfM Bo0³}o©‰¾Ģ˜Ō7ŁM§āį»&;&c7\‘Ą£Ļ—EĻfƒė–dzpv·%Yo0³iGQįīüīŗd2ˆ÷ ŗ¦ƒæĪ#+·‘)¤äŗÓŁRčēŹżOģphV¾Ż\‚Į`vŠ‹ńbļįjŅ .€”weŖ[<7Ģį–Ł­ŒZ<7ŒĆĒź(.keŃģŠ>‚Ą’yaüśŹÄAŪˆ-;Ė1-ÜxU¢ĆņÓs²ŗxnY¹ 73FˆĆŗ4Õķ˜ĢÖ~݃Ķf+×_žąPzŻtM"Ēó9QŌLUMaĮn„»ńžg9x{lµ Ō‘~¬ŽŹźvBĻĄB€ž>.KxDØ;7\‘ČĖoaē¾J‡²ncJ„œūnIsIJ¬¼.™GŸŁĆĮŒ'ĢØq;'ŠšÉ8^Oj¢/+ÆKv,ok7 )€““uŅŅÖÉÜéĮ¤&J׫ēó0cR &“•­»ŹIŽ÷vŠ}µććķĀ?yTJĻŹźvŅ3ėHŒóę†+ĖķsÆ)°Zać¶Rb½†åłP\ÖJ ækæ.ą“RżøüB)%hŽźZ=_¬?ĮīƒUüźüĻ #· ‰¼‚&ęNīWkæ_Åe-NīļætĪJ¤?tZ•#‹‘ŻüYQÕĪ[fõŁ6&rh!B­Rōш(NB+4Ü A£ŃŅåwØļ·ļ=?bƒ™Æ6rųh-µ §ģ]ößѵ¬w¬ĀpY¶$Š–6ė~(āÉīć¢s£¹ś’ø1ѐ ’It؏óp±Zmf\\Co܅«VIkūȄ ­‹R'ō‹żƒngŹö¬¢¢J¶3s¤lw3&;ŗŚć‰jź:œ˜~‚ŠO†”x§÷žŻBŪ܏ŽŪÆ>;æ“ÉʌIAN“-»Ņb  Nč¶Üvtt›Œ¬:T*9³§<čמĪ8–]?ź AŪĆ%3·™LśNvėž@ʘńIŻĻ•L&cņxŹ+ŪØØn'(`x ūv•5g¤’’ąėōŻIKõC©”;®Éd%'æ±ĖŲ­…Ž÷@­’÷yž¼=5Ć>†‹L&¹ęō$*܃š:){bĻļXL„óÄf³‘™Ó@D؛“čļŠ‡»šŚŗ”=ŠJ[±ŁlČd22²$Ź3ū Cį¢Q¢TŹÉ/jĘ`0[2į!n£>@;Ą) ö·Ł¤ õŅī÷y'Oōē‹õ'L·ßöqY)<œųÅ ķzi’ØRɱó“T?ŗcņ؎×;¾b¬P©Čd2ĘÅxņÄÓÜĪjµń쫇Č-hbb²KDą¦S±iGĒŗ‚ź@¤l£L +“ĮµæĒ”ńžügU&kæ/D.—“;?5vÓķ©ŖÖī`—¢Co4Ø]  ½w{°£=ØŅīŗWQŻīdµŲ†3{n/mķŻCxˆÜ6iTż“Ėeøhč C×±÷½ŗ®Ć©ļöąŻĮśn¶HėģJ›Mŗ¾ŚQåģŸ<ޟ W6l-Įb±±ā²q£šH–Ŗš“.ŹAƒŹG‚]0ȝUŽKĮeŸ$vF§•¾œ# TKz{hŌ ¼<Ōįø¦®‹Õ†Åjėć= Pȇ5v>[w‚ūœė8=vļ“~“(ōßGēūŠÓóa0EZc³ŃƒŠ»ļ6[÷ų³Å†B.s(:ķBYŲŁ<C­’sμ0¾ŪRĀ__ŚĻķ7Ž0+čOż=2\Įy(ō3V« ×Ęļ±čg'ģøj•Čdχ^übfNMĶF\µJ“.҃ RÉin™ėĢ™€B.Ć]§ņƑ[ŠDnAÓҹŽåĒrź9–Żm­±Ū;Nī£ėÅLē‰ö²fCēĪ0ÕķPŲĒ»eˆ—Ŗ½ļ# @¹\†F£tX…†Ā`“ 7˜ ŁĖWoܟX °cNģV6}×äļū­%żoÆś¹Ņ¹*‚»G[tĖĪp­ö‰ėÖ]ålŻÕ7?Ļ @^Ak(¢°¤…ęÖNGzk»ā¤ÓdĮb±į>Ź ¼‹FĮƒ·Oā’Ž<ĀĘ턤gÖqß-OŹŖ1 ĘĮ'œ#Å®`Óh†w/]»&¾=Ń”Šv 7gŖŅ®Z•#FĻ.$ēu¹Ėō·ķPhŌņ>ļīŽ‚ĻHīŲ±ūā²Ö~="z-m|õmG×SßŲ”©g\ģÉz>¬ø,ž½™m{*x䙯\·<Į‘Tē§Ęįłpо”öēY£žēƒ4‡”Ń6‚Zi޹ÅĻhģŒæ¤¼Ŗš:=ć“|“[_-%­““uā1ŹA8£µ* …柖‚āfjėõׄŽŲĶÉ qĪ1öy‡]“čՕ*īDq3i©Ż&H{ Ź‘œƒ»›Š…³Cłč«<Ź*ŚšńŅ8®·mfū‹„÷`-ļŅŚŲĻĮnFĻĢ©šå'Ć®1^ū®.JڇéReĻäÓ_ÜĻ@ĶŁl’°7Š}zŅŃ„1³–Ū?’Ü=„kĄp,ÖO‰½ļ÷Ż’ÖĒ„'ŁłüķåhŌ Ļ #"Ģ›ĶĘėļC©®ƒJ)G&“T•ņą@O’q&_~[Ąšļ łŪĖxę‘Yc26Õj…#ļ”2Ģ bŸŠŽĘ ętW· z3Ŗ.+æżł[<7Œ•+’Ūm@.^ĶÅK£‡Žšcļū¬©AÜuóĄ1]ĘN O¾øŸŹźvfL dŁ’(\µJÖl(¤ŗ®ŪżGŻußG{/•J9·ż:•é“yūĆ,ž·:µJ>¬x‹“Åīł0”Õē§Ā`4c³Łś ’ŸĻŠĪŖJčvzĻ™×~_ĄÜéŻEi¦N Ąb±±~S±Ó¶…ŌD IDATmķ¦“śØŁquQŽČD7¦M Ąfƒµ½‚ą;ōfG|‹wW¦……ŻÕӛZŒ>*MšķiüģŁivģ«t*&øu—df¶q1z›­»*Ÿ»»KB„]»:+…ݲ‘WŲ­„ŹČŖ'żXŠżāķ…«VŹäÕ³’¼ĶfshLķZ»įŽ‹ ×«„÷¼f³•o7#“ĮÜ鯮xŽómķ?¶¾QŖž0ŗ Į/ ūx² Ūž]5AN•Õo,ńtX,’fc1‹ļ˜ĢŠåńĢĢō®€x»āD.—’d*•œ«.‰cåŠd:ōf>]“RĒ“ĖdN)RĀÓ]Mk{ēˆj– †ė­ö‹#)*hZF›µp¬±Zm4·»ĒĪ)¶˜%žīĆ÷ŽŌPYŻĪy #øēwY4'”“ńņŌ8„wĄa93·Į‘=éTb·žšŗ€.ßéĢÜĪ™?p…äŗ=r¹Ģ)µmoĖ-ąH­ŽŽarr‹1v)RF¢HZ8;”æĪėSW†VĀōDēŖź#UÕt`³ŁœśćėķBqY+¹M%Š@ §}»ėŻp]iÓ3ėÉčS«h°¶ģē5W„3ĢœL&«ĆBķī¦ĀÅEIΉFĢf먃 Āaķ’ <T*9ŽžN5c0Z)¹{SW/ –½Ÿ)6äNc§Ėó”ØŁ)~c4ž~ZfNäūK©®“²ŖŁ[É“»$včĶN™¤*ņ|ČmpžęŪFūZ)®vøŹŒōĢ®wr?©·ŗlz36ʙüR9+- ī:G2ėX½.ŸĢœęĻ į”ßOvņ·ōpWóē{§’šąCś±:VÆĶgĻĮj&÷'6ŖŪ8ČßuT~ĮĖ—Åąé”fė®rö¬vhäż|\ˆŽšpŅF€”q#:Ā—.^„BNt„Gæī®Z%Ż;•“T?Žå4°zm>ŅkHIšq¼xŌ*9Ž1™äx Š›É/lāņ c¹ū·šÓ:?nūu 3§QXŅĀgėNŠŲläĮ;&1kźąY&:ōfĘÅxrąH «×å³}o’üxą¶4GŒ‰«VÉņ c1™¬¬ż¾ˆ¢ŅV:;„kęNhPßų ?-7]“„Z„`ż¦bvģ«ä²e1Ütuć“|1™ŗ…¢‹—FqåÅRõŅo6ńķębt®*G„ŗKĆiµŚX÷CłEĶŽ—lŲóu÷-čī¦būž VÆĖ§Ŗ¦ƒKĻ‹ęękœMł’|™4ޟ²Źv¾ŁX„Ž`vštUZ+_sĮĻ‹ž.u zv¬ĀĖSCj‚Tó')ŽW­’=‡Ŗ~ķ“0[h»2Ą e„ qŃR=¦CGk)Æt®Ó³ļŽž¬V…%ŻcšĒŻRĢHOėBbœ7V«-;»ćI*k:ČķņļĢŗŠŪrk0˜1-NŠģšŃ‘¤ŁöōPSQŻīŠ,[­6Ž’<Ąń wÖo*vš¤õģ—vķ:²ģ ™ēxž”‚7iœ“W«UŖUvdŚ:EĮ槚ž×Ńf³ńͦ" ŪóA&“1e‚?mķ&¶ōŠA:cGӕ ę§ņ|˜21c§„OüWϾ{yv vŖj:ČĪoĀŚkģlŽYę°ö[­6¶ļēCS×scwg©ēt[6ņ{ōżĒŻå•JJ»ēCj¢/ ¹Œ]ū+bŽ ö÷g·'ĀŠķĖd2żµfØźé>n0˜ła[)*„œ™=2ŗj÷|°§żžΜ•āŲøOīæ5M*¶§U˜78PĒ#÷LÅd¶b4ZйŖś »éš¤Qõ!1Ī›×Ÿ]ˆ±Óāüµ|Y,Ė—ÅöŁ~įģP§œłn:ūÓĢļļ«å”;&c6[1›­żfp qć±{§öYžēōæĪUÅŻæ€ÉlÅŅćX‘a }ö퉯·‹#{ŽŽ`–­Ō}53—žĶEēFa³Śœ“Nƒł¢/žĘā9atčĶŽÄżķ#“Éøģ‚.» †öZeŸĄ¾ G²taDŸöū#-Å…BĘĮ£µ}4Ģóf„°|Y¬#ˆ¼æĢÉJ„œoŸD§ÉŚå§ī¼žŠŃZ¼<4č°p™ą—ĮŽĻdęä@ 9?ī.Ē`4óŪɎēV£Vpł…±¼’Y’c/óf† Q+Č+l¢®^ĻóĻ9©Ųv«ßŗÅ““™(Ælćęk“ūĶ?RrW]Ē«2yāÅżĢ›ŒĪUʼnāfJŹŚxéÆsQ)å̚DzfϽvˆ)Øo4P^ن—‹“›čŅ…įlŻ]Ī'kņØo4ąā¢ąĒŻ’¶°¤½A²ņöĒw[JŲ} ’”_\]”ģ?R±Óā4ęƒ„‰ö›«2ćEk»‰›‡ų¤$ųP\ÖŹß’uI©~=^OUMÓŅ©éįƒ?oFė~(āĄ‘žöņR|Ø­×s<Ƒ’"ŻĆ®{ńĪGĒIŠ÷¦±ÉčT­»'aĮ:”J9å•ż Ļüė i©~6ļ,C„”sŻņx§mBudå6šöGYØU ‚\9·‡„Ŗ“¢ •JŽo­‘3­»Ź1™­ųiÉČŖ';æ‘ii¤$tģ]~A 3jy÷“lrņ q§²¦½‡Ŗyüži'„’Ėeø’[ŠÄŖĻs0™¬$Ęy©Č.—,fĻĮ*>Y“GaI QįT×u°ļp5÷ߚFr¼i)R1Ļo6QUہF­ąąŃZBu”Ut×IēCtøł…Ķ<’Ś!ā¼9z¼½Ń‚J%Ōó”¦NĻć’ŲĖŌ‰ųłŗPZŃĘžōjĘ'ł:„ū{dƖb F3•Õ\yü Aļ© ¾|J>«>Ļ”²ŗ¦–NGQŌMŪĖŠ,xyH ŠEs%oˆĒ’±—y3B0[¬8RĆŹÉ$ĒūčŠL&cćöR¬65µz.æ0v@į92Ģ}‡«ūµ.}ŗ&ŸŠŖvÜujvؤŗ¶ƒĖ/ŒuJ²c?ß÷>É&5їŗ=·ż:Õ±¾“¢Õю ›³Rib:Ü,#*„Ü©z𩤿 ł©D©”Ÿ2SņÉ\‡”2é(ä2ÅÄh$žĘƒe–nūn:’żH?V‹Édķh¦P ļ¹R÷ ÖŲl¤Ø“…óEžTĶĮŁ‹LÖŪåē£åŽßŒgvÆ Ģ‹#Xū}QWq2éxžāHGšMµJ² z0]d˜; f…²}o_W@dø;mķ ­æ__‹ld˜»“&ŻŪK²ņŖūy÷-œŠÕjć‹õ|·„…\F€æ+Ė–t‰¹Óƒil2²iG{WķÉ#÷LeמJ‡& ,Ų{7‘÷>ĶfĆÖ”J)öWēGóÄ ūŠĢ¦¹õtWc4Zŗ,6\µJV,gŃģī Ś…³CŁ{ؚc9 ä6“ÖeµpÓ©ˆŽšĄ]×÷ŲĖ—ÅRRŽę("ęĪĆwO”±ŁČś®{R®GīžĀ›dq<Ɓ¬Üt®*Ģ Įd¶¢Q+˜7#„]ŖČĪo¤ ø™”Dß«+•rĀ‚u–¶ō)jRÖ£/æ-pÜÆÆJģ3Ł^¾,†ŅŠV6m/ĆÓCĶ…ēD9ÖY­6ŠJ[ q?cß]n:»öWŅi’®ßy #øö2g!+8PĒ#wOįŻO޳ė@P…ĪUÅÜĮNŽaĮntŽ"žįźKāų÷ū™¬ßTŒÆ·‹£øeP€+mżøųųyk%ˆI&·~>.^.,[Éw[Šłś»B‚ݭ½īĮŽCÕ•¶ōq_Óŗ(łžĒR¬Vnj®½,ž‹zŒ €9Ó‚Ł¹Æ’Ü‚& K[H‰÷Įb±97vŠžīŚ‚³XFĖü!>ZĖ®•,˜:ōĆdÓv)ūéØ#ųypė ©ÄDz`2Yt/XÉ‹#ik7”TČśX@ż]µ އn¾& ¹Bę4Łčx½­¬ē/Š4ŽmńÜ0Ļ £½Ć„F­č£@‘Éd\r^4—ōŖčlwµģÉäńžL/¹ÕøhŗÕŪŹŪ{'‹ÅęØåÓ{bļå”į™Gfõъ¦„ų9„‘Žøj•’ęÅĶ}b;žzhr¹ ™l`eQr¼’łĒ¢~ŪĖ-h¢½ĆÄ“‰'łS2--€ė/O@o°ąź:°ēC\”'O’q&ĘN ĘN ī:uķžßMģwß”˜>)ii!ČĪo®īßrvéłŃ\z~÷s¤tÜF†¹óÄÓé4Y1ĶøėT}Š'Ęyóōū£÷˜šõvįỦ`ģ”Š۟‹;ɲĪž­m&4Eæ ·›ÆIā†+ĖdNŌĮĪoł²X.» Ö×e?µ§šį“J)ē×W&rżå “w˜qÓ)ū\‡ė–Ēsõ%Ņ;c(%ķä ž|üu‡2jū —,fŽĢŒF nŗž=\µJžųĆō>/ ¹¦gÖę.²_ö⬌N†é“qćĖo †•Ńf8“µ›ųnK1S&3¬`P4jŰ­·n:ÕOR@O„’’äšn«ź”YoŻt£;–B!ĆŻM5ØŪŚp&’½Q*åĆ®Æ¢Vɵō·}{¬ĆŒš~×Ūė` EķĢØE&cTUēĒ„RŽ»›jXĻ®F­ĄĆ­Æšq²Čdż»"ŸJŌ*yWßO¾óµbŌµ€ÜŻTż vTJłˆŻ7e2œč÷F.—Ęļ@×aø"aĮnD†¹³’H’cG­’wµ3ųqś»ļÅĶ45’¤!?wĪ*D.—±xn’ū×N ĆA&“ń»ėRP)å4µńpS³xn˜Ćœ>ź xzhųõ•ƒĒÕĮhōw%.Ź“m»+N*joŒvģ« iœŠą ĪZęĶ”ŗ¶ƒc9 §ōø›v””TŹ²° $Ī*D”±rE²Sąœ@0ā¢=łĒŸgćėķ‚æÆ–•+’™2aōīQįī¼šųlü|Ä\ ü4,_Kc³?sŖŲø­”ę–N.æ°oņąlaɼ0<=Ō|¶īäjõ¤ŗ¶ƒķ{+X<'oĻ‘Åćż8«ąTr*ĢŪ?åńg‘įī,žę”’^ )i©~̚äHOššąĖā¹a£«ŚÜESK'óg†4nšz%§ ­‹’Åsƈ=3ū'ųy Q+øéź$:;-č fü}]Y<7ŒŠąŃg}«©Ó ė7~M ‚Ёą“3X`³@0ī¼i¼CٱhN(‹ęœ\"ė–Ē;Õ§9ÓšpW³rEņŠ C`O" “Ɉ w?éēj|’/’xl–P>€°€@p–šSLvÄJšKAx>ŒB@ c†@@ Į˜!@ @0fD @ ŒBĮ)ĆŲiaļįź1i«Ódeļ”±iK §!€ą¤čYy»­ŻÄ+ogŒI»mķ&žõö‘1iĖŽÉlå ĪJ+? „"‚QS[Æēī?o;ŻŻ F ·=“•N“åtwEp–³ī‡"¾XbLŚśfcŸ36m vD!B@  I~Q3~ZeŌā¦S1e‚?‹ćyčõfŽe×ćķ傋FH։ĆĒj‘Ėd̜„B.£”ÉŲØŖéĄl¶1!Ł³ŁŹįcu46˜4Ž_-z3Łł“w˜HŒóv,Ø®ķ ēDV«³)āDq3yĶxzØIKńCė¢ģ³>"Ō½‡Ŗéģ“0gz0uõzŽf7éA|ŒY¹ ÄFy¢Q+č4YÉ/l"9Ž‡Ģœō3Y¹ ųx¹ęŽĶf#=³Žš:=ć} ŅQ[Ƨ¹„“øhOź 4µ‰ōÄfƒ#™uT×ušąCh°›ćzķ=TL‰qŽ„¾³ąēGī‰&ZŚ:™:1€öĘαtŪ;ĢtĢcŅ@Qi+å•mĢ™·—GīžHŚ~› V^—LX°qў¬ū”.“Ž#žžć d2Łł”WµóĻ'碐Ėxét­eńÜ0žųĆtGŪO’ߎē50oF•ĒŠåń,žFC“‘»ż€Ā’ć¼¹įŠ„AĻ#%Į‡+/Šcz ƾ“ĮĖOĶĆĖSCIE+¹'šė²HōĒż·¦±ņĶ…ū+Łu  ¹LʱģzīŗyMFžzi?'ŠšIēĆż·„”RŹyõ āc½Y÷C!·\ŸBbœ7’[ĆīƒUč\•Ü|m2’|)ÆjēĆ/r)­hC£QpĶ„qL™ YX²rųšĖ\źź (2¦M $’ķ³hk—,¼s²Ó9”Wµ³yG&“•÷”įĮņ błļ'ĒimėäŖKʱtA8‡Ör$«Žß\ĄśĶÅČ_o~ŲVB§ÉŹ£Ļīᦫ“ˆņ࣯ņŲ¶»„RĪ W$0cr o¬Ź$"ŌóEŠi²ņ×qćU‰„ėųtM>[v•£ĖøīņfO ¢½ĆÄ?’“Ή¢f¼½\øėę ÄDzŒŻ ŒaĮ°t !Ö ‹Åę°ōF.—9&ņ~®“¶™ėü“Čd2@rėņ÷Õr<·cŁõ(rź }ާsUb6Ū0vZ()oej×$Ŗ'ć¢½ČŹm`÷ĮŖAĻ!*LšxyØqwSćå©ĄĻŪ…żČÜPN·ąėķB^AĒŗ4ŗöž_~aé™u¬^›ĻµæŠG”QPŅ‚—†ü¢fŽe×c³ŚØo4 Q+ˆ÷ążĻrĘĢķF0ö“¶™ųlm>W]dzĪ"氙w•39՟”&$ū²rE2>Ž.dę6pżå üóɹ•µp$S²0–Wµ“~¬–{VN$6Ź“o·”PQŻĪKOĪeł²XŽž0 w7‹ē†ņ×§sŽ‚pž·:Üż^xż0ē/Šä¹Ēf“ļćčćgėņ¹ģ‚Žx~×^6®Ļ9tvZųvs1”n¼ś·46y÷ÓćüåiÜtu_~+Œ“¶›ØŖépģ׊h ±ÉHā8o¦N `\Œ+W$¬cŪž Že×óģc³ųķŠ$Žü ‹ÅĘĢÉA|¶.Ÿöß’X‚R)#<č]ū«8t“–g™Å­7¤ņևY˜LVvī«D.—ńę ‹yč÷“ļ+Į™‰°€`DČå2Ōjz£µbČmm¤jmķ¤®AϦeŽe‘ak_ŽŌldźÄZZ;śµD†¹sŪ©¼żaG2ėøõ†‡ ÓoæĪė ł€żˆÖ¶NZŪ:śŸ–ā€—†äqŽdå5’–*-kiķ¤µŻä“żų$_ī»5×ž›ĮŸž¶›?Ż9™@1y:‰ń".JŠ Z0+„c9 ,]§»•JAtD·Ę~ęä Ē’‰±ŽŌŌéėĪ]Nl×qvķÆäŠ‹āpÓ©˜7#˜·>Ģ¢CoĘĆMķ°xL™Ą{«³؟^CDØ;s»b0ü}µŽµJAk» •JNDØ{æēą¦S±d^82ÄFy¤ĆĖCCā8oš[:1›­żīąį¦ĘŪÓƒŃā8·ŻŖXŗ / “RżQ«ŌÖ뙐ģKL„ė6±eg9Ž3U:ßUœ;?oO ŽžÜ\•ŌŌu V+hk7 ‚Äų9Óˆ@ F„±Ó‚ĮhĘŪSƒ~„VƒžøŗŖˆ‰ōäīßNpZž_Ų̚ļ yę‘Yųz»šāæ£TČAå£WmßĻ׌I$Äxń—ö±s•c‚5Rd2†%Œč\UčøgåÄ>ėŹ«Ś),i!.҃ŪJ¹`q$:W%~Ś~·÷óqįńū§ńߏ³yēćć<|הQõ]pf£Tv;žųūj9’5p,„RŁ-$»ø(²ÆÉåŻėź |üU®#k–Õj“Rck!· ‰ć¹44PtķS× 'h€ śåĘņāæÓŠhąŗĖP«ś:Ź(•rģ²½Z%G©¶ŃuÉĮžØo4šõ†B~ŲV Hų¦®c\{Y<?æ—9ӂ qsl’ͦb¶ģ*$Į¾Óleę” ~ŲVŹ_žßĖķ7Žwl/83ˆ@ FÄ”ŒZ‚ü]ńt×`4Z0™,X­6§IŃpˆ÷ąŪĶÅtš¬Nšz=Žž|½]°Ł ©„¹\†ĪU‰»›ŠÜM¤„śŃŠob³į˜yyj˜”źGiEŪØĻOēŖ¢¹µ“ą@”m«K±ŸŸ±Ó‚F­ *܃w?9N[»©UęĆ/s9Q±Qž¼üÖĢ %*ÜƒĀ’ZZ;ńpW÷iW&“±`v/ž;}Ō}ü|0™¬RģŠ0ĘĄÕ—Žs²Xxø«Ų“½ŒÆ7rÉŅ(t:7‡šcµŚBCoR|xę‘Y¼öīQžõÖžpū¤įĢI`.=/ŚÉĢ·Ė ­©Łˆ›NEUm·;—Ķfć¢s¢ÖCūö …Œ'ž0Ļæ9Į“/īć™Gf9eĻœYD ĆbÕē9čŲ¼£Œß\•ˆL&Mųrļ}šæŸ–YS‚†}¼ńI>ł»ņ×īcbŠy'šøéš$b½Ø®ķąµ’„CoĘb±b0š‘Éd,™ĪŪe1oFŁłx{jč4YŲ¾·‚¢ŅVtZ%»V9yGCbœ7«>Ļ%9Ž›‚ā<ÜŌX,6\4 <ÜÕ|ųE.ž¾Z.æ0–ńI¾<õŅ~¦N  Ø¬•K—Fc¶X).mįīßNā;"…ŚzÉ/~b²‹Ž3Ü6ÉQÓ£'W_2Īqü@?W~{m’cŻŅįƛÆMbĖ®r¬V÷žn"åUķX­6 ø}™Ł D†KŚę{VNdūŽJš œ3/Œ™cöT IDATq1^”4ó‡Ū';“Ū+W$;,2wŻ<ķ{+Øo4°hNIć|0›­ĢBeu;ēĪgĪ4Qįl„¹µ“½™ŠŖvvģ­ąO]®vZ%%å­čGQcĘä@Ö|_Čø/\µŅq’ć}pÕŖ8ž×HZŠ?ė7cķņŒŸäĖG_å‘s¢‰?-ūÓ«ևÜMD†»S]ہB.ŠR2ž>ZJ+Śhh2P]«ēŠŃZ‡rB«QPYӎĮhĮb±2sr _o($5Ń_o Š›IMōeĖĪ2t:S'ŠÖn⓯ó˜4ޟ“łlŻ &&ūāļ«åD‘“}yU;.j•‚ŽSæīc‚3!€`XĢžŌÆKCJ‚) Żī3ŗRz‚äĪ4i¼? eĄź­µŌØœ;?¼Ļ1C‚tżć“Ép²²Ų}Łż}µœ·0bŠž÷죛®»_€# ¤Éą²ÅŻšÓ„Ųna&.ŹÓD ’?ü¢9”NķÄFz:żļē£ÅĻG:o…BĘĀŁĪŪ«TrfO¾åHšó„ŗ¶ƒ;݆›«Š+.Šs\yq,’y?“æžs—]CTø;&“•°`7®¼(–—ŽHG£V°ā²xŽē7b³Łų|ż ņ špqQņ›«“śÄZ©Õ "B»•ž¾Z¼<% ‰L.#:Ā™\Fl”'Süø’/;ˆuēŽßM$£+Ž%-՟u‹¹ļ/ŪłĶUI,œJyU;y~/‚YS‚HŠ÷įŠŃZVü*€y3CŲwøšĢœęĻ ”¬²'^܏Z%gęä@R|ÉĢią«ļ Šėͤ„ś1–ó8œYD ` ˆńā”ßOī³<*ܝן]čų?µ‡° °|Y¬ćļŽī…J„œ[oHįÖRœ–‡»ńŌC3’/č1!æxi4/vü?c²¤4*łAhŽ?ŻŁ½Ķåv÷K£Vš·?ͰŸ‰qŽ€¤ˆų×ÓóœÖŻpEBŸ>ŻŃ}r™Óu»ny<×-wŚ~é‚p–.č«Ģœ™ū”@ †ä¦«“pEņ@p @  Io·!@02“.J<»ÜØ‚_:B@ ų‰™19Šįź$üŅ.X@ `Ģˆ@ @ 3„ °óšŲ¬Büt¤Žū/źÓŻ @ ‚ÓŽ@€Ę–@@ŽZm<Ż]œeX,JĢf%x(@BqÅćOžńtwCp–±vĶå|ōĮM§»‚³ŹŚ8N”õ­' œ*t.MLJśžtwć”c2kŲ{ōŅÓŻ ĮYĪ”¤oŃŗ“žīnœ±D ~†®46”Tš‘Ė­Cļ Œ€ĪN5óŁY÷ÅfUŠŲ„\nE©4ŸīīĪ2,‹³õģ?§ !€ĮϘ»ļ}–©ÓöœīnĪ2n»eœås󙳶sēŻĻŸīnĪ2Žżļm|’ŻE§»g<"ņZ @ ŒB@ c†@@ Į˜!@ @0fD @ Œ" ÖĀīŻp×]Æ_½¢£Ē®?'Ė3ĻĄēŸĆš5rŗ{#@ 8SČBs3<^^ąćÓw½Å2ö}:JJ¤ó1Šāņ@ ‚ä ćĪ;į©§Nw/śŅÜ =””šųć§»7ąLį÷懽{ū_7k¼ņŹŲöēdŠėaŽAA}Ż"žyFźŪśõŻż_°@ Ųß½{äżg_ 7žüāč‚ÓMn.¼ū.46žīžĪF„ņ3bž|iBžĆŠŅā¼nķZé÷UWIæ×¬‘ü1ćāąĆį½÷$ķä]wI.=yā XµJ.¾śJņĪɁ^ÖŸ¾$„Lž ü£ōćē7ņsX±6o†Ūnƒ ௅ņrøäēszūm©_ R6­>؇’Ī­'łłpŻup÷Żšķ·’›XU\s‚~®dgK‚ĆŃ£’kŌ@Ųlpų°¤ ©Øųiūd0ĄĪ°iÓŠm;&õ’ȑ”]RģēzāÄ©ė«ą—K]lŁ")į†rƒ,-•žēĢĢĮĒŁ©Ą>&22ÕÕҦąĢE g›7ßžäüóī»ŻėÆ¾ZśŻSˆŲæ_Ņų_y„ōM÷qŽy’Ū’sĪ‘~÷ iiŅiPWVž²Ó¤sÉ2Ń»Õƾ¾øX²j,^ģ\CdźTˆ‰‘4½-æśU’ĒĢČ85}£§æ÷@Cƒ¤å\²¤;>ķšk¤ģ?wżöĪ;<Ŗ2ūćßI™–„Ž;H³eQTŲEl+Ø«"‚}AeuqŶž±¬{Į¶ "XQT@Ez@ ÉĢļ³/sļ;%ÉĢܙšż<Ļ<“ܹåLyßū~Ļ9ļyGIśŌ7Šētōhż±GŽˆhÕJX'‡TéŪ½[ž;Ö×·Ż|³üÆśÉŖ°r„¼»]ę’Ģœ)é£ļ¼£O{­¬±µlpĻ=āŲ¹ćJ—\ā/,īæ_Īżžū2 lߘ:xöŁŖŪHj'_,ó?łÄ?B1{6šź»’½ņ šŲc2ÆņĆ%«† óO£ŗłfigo¾)νnŻäŽŖÄĢWųīÕ}ūś2ŽŖŁ_Q!ļaéRÉŹŠ¶‰K/Õ·‰Ē›ūö•÷ūŚkņž®æ^Ę4Z-’>įĮĻ>“ö¹apĶ5U³X'”Ē·ßŒ£ßęvūž>óL©ŠņÅrv¹üÓÆÖ®•Ø@jŖ>ąńˆCy8fĄėŌ‘ŌØH¢„OĒŽśķ=zˆ]7Ź’*EĢø žĪĶ›­[%=Kaœ0Æ"AūöÕŲlBH<’¼ōGZ†ėąĮņš 6›¼žÅ2Q¢`Į‰’Üpƒģȱæż&ƒŒĆ‡õżaÆ^"jTõ­mŪdĀłŅ„2č™0AŠS¬X!雭[Wļ½=ż“D:ŽzĖAé×OÄĻ /Č Čn—ĮÕŹ•2`zņIŁoą@I)łąy}š`ßy‹Š$Ҭś².]äńÖ["`ȉĮW_IĮ-=zˆ13S~C3gŹ ūģ³åõ’i+ē'÷kG²4ĢÕNŽžńikW_ķ;e„Æ*¾5o.ķińb‡ØčČHFĮ½÷Vゥ6qķµ>a=p 8M?üPģŗč"ąŲ1ÉnČĶ•Œen®dA<÷œDƒGŽćĘ÷Ż'’ óR—.•ž¢[·źŁKb# qFNŽÜ$µmĆf”QR" ¤kW߀]udÓ§KøS=.¼P„‰Y¹?#)Q¦ÅÅņl\h1%E`Tv«ÆŁ‚ŒjŽIQQšk©jgÚ5ņ¼g>z« Ę ©Ęč­:O$«ö””ˆ=gœįļ˜9åI™Ś°AņķEoO9Ež• S˜„³tī,žÜ}ūdN ©żÜwŸxłµäęśž4H$œ9S"|€æxWmĒćŃ·•`l;ĘßrR’Œ "]ńJµ •• 0¶ %Œū9"Ģ—,JKõ 33:w–ē¼¼šŪM¢Hrśé2”ņŪo}9m^³Š˜”—W?å (»Œ”ęŠ ń|“l©ßϬ#TU³³ƒ_kļ^ynŌØZ¦BŖHĮ×QƒØ3¤øĘüłŅīµ}—źŒóÄ”¢·jPÉ…Š‚EdÕ¼‘Uū×[R‘[cßg†:v’~ …ę́SO üzZš—æÓ¦I1—īŻ%%±_›S÷ĖW^ń/·X—łn›7ó!ŲŹšźXf>$ ʐ!Rķeī\ÉuŌ†ń›6•A4ÖĮØÉ]‰eĖěØųć9Æzjā¹Jkвj•xD”X „ņėŌ !±Ćķ–\ļ>Øķ§ŸŠS[@BEV®”“ #V¬P,"«śCcōÖŲO÷ †JUĘ`$.C‡Š™1Cę?ģßļKæ|mgüx_z“–`‹G“pŪD8ķ,Ģ|H,8$AQĢōéśNŽ¦gO™x9¾žµcĒŖw=5PˆPØNE;į½_?yž†Ż.…ź·˜·«RÆĆmöSūŚl”Ūj;Ģ|H čc‰3&Oö­æ”eüxI½Rtļ.ƒōµkĶĖJ>ü°LŽ’\j×ŹźźŖ"‡užĒ— ņC‡ŹóĄRõā²Ėd²ÜÆæJõœvķō7ĒŽ•ūƒɄ¼ņr©*“œ,•/ŒüóŸ2!Õn—ź9ūöÉyµ“Ł!Ö2`€ „–,‘y£Fé_WŽÅ‹eMŒHRŻč­Ķ&šßŽ6ļü?äŁ½]¾\"сö DI‰¼÷-Ŗ·Š+©½ø\"8>žXډQ¼«¶Ģ‡š mMšų¶k;ZŹĖÅńŲ“ičū93 F@ā„ŌTéL „fUŸ†•¼ėöķż_0@jŌ§¤=$%šžó)ć«MČĪaa$#CļmHI‘Až”C²Ņųć_µ÷oŃņžū"¶o—ķļæ/¢höl±é™g$뫯ō2Ææ^Jh8Üz«LØ//—²}f¢gŻ:±ė¦›¤RĪćūÆ@±§SQsęHP­šE,_~ŁUcć‚ᢢ·”÷UµŒ‘޾}%5źƒ|ۊ‹„ĖĶõMØķŪWžß|S/x¦N•ē / ~ż·ß–‰¶f)4„ *YŸ}ęŸłŠµ« ŅæüŅ7ń[‹¶ųĘee¾mŚ„Ź|Pm¢Gs|ö™¾×_Čø(TŪŁŗUś•Ö­}ÕšH|ĆHœpŽyį7rÅ]wI” ×]'“97lŃŗµźŅęĶęǚ­X|’żĄČ‘"BZ“¾ QŪ¶Ņ!lŁ"^%fźŌ‘ÅÅņó„fżś'ZŽ+"bćFtģh¾f ÕA5eŪ¶Į'ŖB"ĻšįžUiš4ń_TočPą½÷$ŗiL©8ūl)¬1w®xxÆ»NŚō_HTõµ×ŖnW«VņüČ#yŻøQ<3ĆåēĖņå2‘79YœwŻ%"ā¶Ū$Ķ£~}y½ @ޟJ 0@ęäĶ™#N”d±·É“Åł£J¢*V­’sŸvšx„Ÿ~ZŽēŻwWż}’Äå7ĢĖĢ>ż“~ŽÓˆ£²“Ō_¼'%‰³ńĘ%;į®»$ł—_D(’ž{šyf“h!ē:U"Ū·ĖZ""y*óįĮ%|Ō(q*tķ*6hŪĔ)R9N­¶žš* >ü°s×]Ҿ{LŚ„Y›øżvɩؐ ‰²2)pĪ\+b= LVVč¼N»]JŲEІ õė’Ćķ|ķzõĀK1p¹¤ó ER’ł>BHōIO—A‘q¾`=’|qDZ‘üƒDĢĢž |’½lkŌHW ‡Ć77CKJŠl×.ˆxÅi3GķŚ‰3Åøh¢bōhōÜv›DgoŗI¼³Ó¦I4öŸ’”ż\.,iK''ĖäśkÆ‘õŽ{²}ĄąŻwżFII’ŅŖ<ŌŻŗI”X[‚•Ō^Ōļxófsg šT­PEöķ3Ÿ1r¤Dļžļ’| Y:’‘P^.Äf“kš9é²²ōÕ²4 ß|SĪ•%B:¹įiæĻ>+×2DŚ›ŹxPmĀf“ˆ†±MÜæD;^~Łē\mŁR溚]sŃ"YĻćõ×%µ›$ „BŖvq“pHM•C Č§Š’ęå‰Ē5+K1ځŹÕWėWuVüéOž‘äÜ\™o²~½œ;ŌäīG•ĮVY™~“K.‘*^j‘ĄĢq-ZˆŪ±Cʁ7iųš;KŽśĘ2€Ņ^Ō~®»NUį‰'‚§T+‘‡õėå÷ŁŖ•¾xCZZąl ćb…€Dgʍ“HdĖ–ž¢_ĖYg;wJ»mÕŹ—Žn›HNńņļKę†Ū-ķ,)ĄdÅ‹%śįńH†DU#<ÄZ(@!„Ä³Čˆ‘ Ŗ^,#v;Š„Kųū*óœ~D¹Y³šÖńČÉŃ!$įDĒÜn‰ŚEŠPeļµdg®Vn›ČĢ o"¹Żī[|$œ„NšV­ü«B!„ų…’Š\yeąU“ !„BHüAB!„ƾ}„š!¤jtč ™\ē+±”!„BbĢGYm!‰ÉčŃ\ē«6Ą9 „B!„˜AB!„B‰LĮś6tÄM#¦Fä\^Æ’2œ6›7"ē® ńh—× F»¼–Æd©ĻŖ¼’6x¼É;_f2ėTź¶żøāźˆæŗ4jZiŲRs~e‰- Æ×ß®¼ĀS0ē‡S,²HČŖgCōv-üõšŸ÷ŒnŸ ^ĪŽŸ‡B!$Q”ąńŚąrF‹–[¬6…ŌRņós±_«Ķ „B± ’ѼłV<šŠ½V›Aj)Ÿ~r>˜:Ģj3H-bŪ®®Xµ©/ÆÕ¦DÆ-É/JŗvūyX·ć\‹,6ńųmūfńØßGFŚō9õ«ĶˆGĖ]ųfŃŌĘļJ‹×kók;åhŽĻęßn‘E‚×ėߦ7ķīƒĶ{z[dQ4±”ļ铑ī:hµ!q!„$ ^Æ Oš4فōŒb«Ķ!µ”ŚĆć©]ÓEm’k;™™EhŌx—ÕęZJ^^C¬ųū*(@!$”zÕ»8ķōÅV›Aj)·Ü8^ćōĮZB—®+š÷ŃOYm©„¼óÖ-ųś«AV›·Ō.·!„B!$®”!„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢH±ŚR5¼^`ńb`Ķ - čŪhŲŠ|ß„K’ _æčŚōĆ€Ėōģ|æ;€uė€ī݁ÜÜčŚD!„BāF@Œ»īĪ: 1øņJą„—ļ{ēĄąĮŃ·éņˁŪn ½ß¬YĄłē‹Eß&B!„Ÿ0’@ƽtź¼÷P\ “lYóó;üü3š§?Õü\„bFAšć@~>ж­8R’“ż÷+*’čmėÖņˆ{öüté8ЬųńGĄf› ‰5••ĄO?ė×Kö@Ÿ>@v¶ł¾ J»:óĢčŁćńóę‰-Ż»ßwćF`ėV W/ ##z6‘ă$X½(+®ŗ 8ķ“ȝ·W/ąąAé$!$ŅģŻ+•}ūä’ädŁVƞ’¾kÖH¤ō”‡€‡ŽžM_ \=0y2põÕĮ÷½ī:±yżśčŁCH ®¼ųč#ߒƼÜr‹ł¾ū›¤gÆ^={Ž•6zÉ%ĄĢ™Į÷4 ˜0ųåąä“£gI<˜‚•@äēĖs¤ēO”•Eö|„¢åwD|üė_ĄŠ2h1Ue×.ń°R[Ł“ ųųcąģ³%2ųÅĄe—Õü¼GŽHę!VĮH‚šī»ā±€¹s%M!3øõVß>Ÿ|"ó,JJ€V­|ŽĘ@lÜ(ہ@y9šÄ²żœs$*Č|¹sełįĆy¹å™tnä÷߁§Ÿvī”ėßsŠ”CxļoĒą¹ē€•+%LŪ»70jšźŪgóf9’† ņŽ»tf«Vį]ƒb Ė–I Ó}÷éé”Ó6ĀįŪoÅ ūģ³ĄwŌü|„Ä#Ė—Kń™#"›łŠ¼9б#°`AäĪIHU I^|Qnā0c† Œ#ŪrsEōL™|ó šŁgśsmŻ*9§uėJŖĀ¼y"n–/Ē½nxw $7;‹Wč“O€Ę›oė#$„XD~>ąvļŖJY™ ̩ͨ̇śõ#{Ž#G"{>BŖ H‚šķ·2 æįąłēkÆ’ž—@7c†ˆSO¾üRR “»w>ēĄ2 ļÕKnę+WŹvŻøā ™čvé„ņ|čpī¹ĄēŸ‹ąŠN€?pų÷恐’ļ¹ųĻ€ńć7ß žŽnæ]&Ųö™ŲTZ œw0uŖä·o|ś©\ćÅe@"-‘ÆŠ8 IDATŠB"ĖŽā“Ų²E"*ŹzŽy>on~¾×Xµ °ŪO®Õ2eŠDféUé=÷HæXR"żāźÕŅOdeÉ<³Ļö?—Ē#×’ōS4HUæ”0ļŽ³fI_uš 8…FŽŌ—$÷zÅŽY³¤pH£FĄHõ@m„—#/¾(÷t@~Ļ«VMš×\#Ū<_[8vLx‡Ė@üņ‹ģ_^.mCµÉ‹.ēž× |’=0¾“ßcǤܒ°aęm⧟ÄĪżūåų±cÅ1ėÖɱėÖ99Ņ.nøA¢„Šß&N¶mg÷īĄšį@ƒį]ƒÄ/ Bf¦ÆSq»„±*^]žßxƗW]·®üL€¤¦Źy’“妭='4m* ]kĆWHdbŪ6½iŚ7Ī×q<š€tŸü}mŪ&ђĖ.ńČū¼óN™læp”¼.=]ÄĮ«Æ_}ōļÆ?׿÷ĖõŪ·—4Ļ/¾y*o½ŚŽūļ{Lśä¦M%:üĪ;’Ö¢ŅXŸyøūnA-ZHZėĢ™‘Éć'µ›Ē“b €ļ÷xöŁ"@**ä74{¶8 sr€?”ß°y¢‹łŚįÖ­¾æ›5q÷Żņ›dQXü÷撁ńŹ+śsżü³“ßęĶÅ šĶ7’™šėÆ@:ĮßŪ¢EŅĖŹ€6mDČL›&©į?.ū¬_/b¾¢BŖ®Y|šе+š—æ„ż1’8…“ŠÆWrĖ–±©0”¼“Gź·7h /©™•%öģŻ+ž–@,Y"ļĮXøm[yVĀ£Ky~ōQńnBāŸ³Ī’(ėi§‰£ @Ŗ‚ĻˆŅG<óŒ¤Y<¼żvčóĪž-@+꼩©Ņ=õ” hJKeū'Ÿˆ·Ų8€dōŪoāi]»V¼·ļ¼ŗŠŠŠrķ3ĪÉšėÖsęH7~¼oæ·Ž’į¶me>p@+v{X!9Y»Vīy€TĮ*( ČoyölÄēåÉoPE ‚1r¤œĒķ–ß®j;ż«¼>|øDU’čäĪ"0ŽzĖæ`ĶīŻ²٦Mrķ”CķŪ%Ŗ GھĶ&%®×Æńߦ8'ŠŠdæ)SäšÓ§KU‹$1”Ip „£hÖ,z×Ų¼YŅžū_¹©2×$‹øŲæ?š>;vČó[oɄRõ=Z¶«ļąĮ"žž{Ģ̟_ķ·C‰))ā™MI‘ĮFNŽ<YƒcĮń Žu—/zŖr"#Ɨ~©¼æŚīWȜ4•ātńÅ"¶o÷?ׯwūŠe4k&āČėõ ōńĪ;2zź)Ÿcfą@韓{÷0+KžONN:)ō{$$+Ė—ž.æqµ–ĘkÆÉoé½÷|ۚ5 ž~HŪĖɑö¦ŚgNŽOwé"Łźœ ƒI*–1£āōӁ›n’æSR|e³Ce>,Z$ь#D2Ēåę›EpØź\*śÓ©“ļŲöķƐų‡$ĮQɌéS‘`ćF ¶i#‡ė®“ĪĻ{§:ĪāāĄū(Jf¦Æ#Ģɑt†+®zō×m6 ĻŽ#iēž+žBHb¢œ±JEŹÉ1/9nĢWļ×OžĶĊ–Å‹„T(E»vÉQQā“NļķŌ©Õ³›#……"ąĻ:KęE5¾0¶Ÿ&Mō’wģ(ö„j;K–ČsļŽśķĘĢ%Ō|0x&IL8$ĮQCiidĻėõŹäóÕ«%õśėåFżÜsā­ G€ØźĮ&Š«pńM7‰Ą †Ó)Ū‡ ‘žńÉ=ļ¼°Ž!$ŽŲ¶Mž£½=zTi»w‹£ęĄż¼µ@Ø]°Č- ƒ,›Ķ7wM”R·TJźóĻūņö,*ƒ™™Uz+„čPüh΃\æ^2 |j‰<4j$‚ŪėÕO&×¢ģņI‰ä(gU`禛$óbŚ4™ÆņĘ@·nÕz;$”Ip\.ą«P„‘ź–©\æ^*n $µū„S!fĖ óŠ4l(Ļ*+zõ’ŠY§ž*¹¦ „$Ź›čķ‹/Źq•K®hß>ō±n·<:|æ²2_!-gŸ-5ÕGž|²ė®“¼żyó¤²Q8bˆ3¢™łšĖ/ņ[żć’×Āq<ŗŻ2i}¤lßÓOū"6ĘūźÕRiC1ož\/œ «„ųC97"½żč#y~łe‰ŽjBᐭ[å¹M›ąū5l(µp‡Tūŗśj™d»hQxĒb$Zm租¤$õšį²Ž–qńĆPķ§¼\Ŗqµn8ż š9JCĶŃņ—æˆ9rÄ·ōIl(@jwŻ%¹ “'‹—ÆU+I?ųē?„C•JŠ»·•“N’r{ū›ä(ßy§ädvč цžże ‚Ea·Ki¼zõäųfĶ$gōŽ{?’Ł·_÷īņüČ#bÆźD^yEj†ßs¤kuī,ßȑ>Qóųć2¹³ys±³±I»Ę!$qP)Hß}§ß®%ŚH©*z`ŒŽ>,ĻŚčme„l7FcĶPŽ>}ōŪƒŗnŻÄį3sfčsj9ēyfō–T—ģlyüų£T§R”–J¢ŗ™fmš!BµŸ/¾, cŪĢ3fĢm§–¾}åyĻžŖGā¦`%ŻŗÉFķ*»€t?’,Qß—Įūß’.„ėl¶Š7ņūī“Žhõj—^*۟|RR~ųAr9ƼRJLz<ś¼MUįeżz‰~4n,5ōk{œvšoÅį | uuī,5õ'N”y'’ćyķµ¾ ģćʉ°Yæ^"4żś‰`iŃ¢śŸ'!Ä:z÷–AŌ“iām=ć qxØuBU½Qi«VÉsY™ ŖTTō…$ rģ˜8cņóõƒ5…Ö™2s¦,ęÖ¹³TŚSø\"ŒŽ‡Kr²¬ żŅKR”笳Äė ȹ¹¾Ņ¾sēŹĄÉnGZŁ:œł(„˜a³ID`ņdłżM˜ ÷ånęĆʍņ›v¹D8ØßäH›lИ5ĖWżŅ˜łPX(Ū)×ĒŅ6næŻ·Ó)ĻėÖÉ ²RĘmŪŹŗ9S§Jj ¢|łrß"ƒæü"ć 1™3GžŁvj DĒŽSŽ5’&#&„>ÆŪ <ń„łkW^)-ŖÖ·¢^=}ŖU0nŗÉW7\K³fRO?;ź÷"„$6n·DCGiĒŽ’žtŹ)2@)(~|×®"`Ž{OŅ™öīqóĶāĢxżuIŁ(/—s"…Źgæė.©ō—š*žÕśõe¦-“Ń­›Ģ³k×N\ū÷Ėwß-żn‡āšÉĻ—sŒ#”½{„J–Ó)%/Oϐ!¬ęCjʃŹ€ü‰'$ķščQqĪ ¼ūnčć{÷–¶£Jß^tšź«ņۜ6MJģ:"lƌ‘ūļ¾}"JŌ"ß/ĪČ $åŪć‘4mķ¢Čźw~ė­Ņ^Ž|SʤI2Gōź«en”Ó)‚ØiSi3IIRérįBq4¦¤ˆˆiŠĄ·NIl(@!„D•Ūnó•ŲŌ2j”8Ž_Ņ<.¹D¢?ü ŽÕ`8M}įńŖ^szõ$¢śņĖ2(źŚUŅ9ׯo®āŖ«Ä»śÕWR…ƲRÖ1Ā5駞Į“wÆ ®*+}+®Ÿq†¬Ō¼oŸˆ /”4V@RKß_¢ ;vČ{½č"ąĘköy’‡Ž½Å‘hōś·o/™Ļ<#ó4[“{f¦D4‚•ĮD §§‹čoŻŚēhœ²bÉɝV„ńŖŹ† ’O©­ņRŪxųa©ZC!„B 8āķ·łó}’Ļ™#kd؅«Ź÷ßK„‰%K|Ū<žšj„Ē”ŹpŖŠƽ{!„BHĶ”‰cʍ“²‘jæŖ2|øTƒQ:W­’Ŗ/jÅóx„¢BŹZŖšßHJ’ŌÕŹĒ„ą¼’¾”µ EA,ņ¹s§oŪ+ÆHŚź2}ŗ”Ż6K–ˆ3'\ęĶ3ŸŒėõJ9ŅaƤ\čCÉZ#VSR"„†ūĶjKN,¶n \®ŽČ /Č¢|ŠeĖdmŒŅŅź]{óf)_ķÅ+KJdbyøNʲ2ł-š½ÆU«¤\ī€Ą 7Tߑiž}V³Äz(@ā§čŅÅüµņr}„Ąėõ_$(%Eċ*iwš`dÄĒ‘#įļ[V¼3ózżoź”Ģ ‡Ö­„Ō„‘£G/ĄxōhāD‰ū÷ĖBaii”÷-,”Į–vĄóŅKRŗ³ŗ¼ż6šųćśvĪ‚iU%#CÖöwµä×_× -ÅāŲžAV–”}ā ó5Œ"Ie„’ŠėFÖ®›µ%…Iō3Ę·"x(Ž}W2Ÿī+7[~ųxć YļFl†“4Y(3œuDy_ß~+%ŖµTV—]&}Ī©§ŠżśSųŸ_u §?™8xī¹čŚAƒ$FģŪ'µ“žŁ·ķĶ7żW ×2s¦Ō•W<śØĢ¹ķ6©ó•%Ķ_”Å€ŅŅ$Ś”:„%K䚳łĄĒūJAžy¦lWŒ¬] œ}¶x ›7—Φsēą]»€žże_—K!RĆ‡ŹJķ/¾( ‰„„\ Ž—M›|‹-Žz«ŲłÕW¾śū| uĪÕŹ©ƒė0Üæ_>uŻaĆ|'?8ēyĶé”ņ›”V‰'¤¶šä“²b·±NøĢš%‰źņĘŃMN–’_x8’üźŸ/;ēž·ŗø˜=Ūןh9óLé&N[Ē¦L1_M=,_.źPƒ“SOqōĻFĒāĻŅ„rŗė®źĻ=’pź©Õ;žškdUš‹/–’×®•5eĢ„sM°Ł€ūī“Eù7N™" ×IN–¶>uŖ,ņłŁg2śüóČŚ«åĢ3Ƌ|~’=šõ×ѳƒ„HŒØ¬”0ŖÖŪ_Xlßų˜āb`Ėß’HGf³‰é×OĀŗ“'KƒzńEią ČžGŽČ5++„滳fŁ~ß}RÓ;33<Ū~śI„Ļ›oś 3ÖŁ×rå•qYøP:…·ßŽyG^;tH* /!ūģŚ„_1łśė%TžŻw"V>žŲ—6ņüó2 XøP#FųC„Ōf< ˜ “Ć„MYHĢ cÓlŽ¤‰oÕe@ś¶š¦4y½ęsÅ®¼RŽo(čĢ™E “*¹Ćįū»GéKóóCŪź}UTųšņóĆ+b³½zém ēŗĘ9 ŸÉ“ÅIVÆ^õŽw¹§RWTų’Nķ'5UŚl†Ż»«g‹³ßÄąĮrOżī»ąĒаŌ§hŸ;Źg`¶©‘ņņŠāĒĢīÕ«CŸ5ņßnö=hmbÖDä”I05oÜ)§H:Ą”C2 ļŁSFV°f’q-[Š`d%Ž+®”*¼š‚tĀ}śH§óėÆęū­Z%ü_ėÕWŠŲPŲl’~śéņzÆ^"022|‹zu–Ų٤‰ļø'Ÿ”Ź^żūū_wūv`Ļ<#6^v™œK]wĒé|ί뮫Śū'$QY“H¢ˆČ’ļæļæ(ߐ!ĮēhÜz+pē¾’ūōoāgH_Ņŗµ ®¹F¢Œ2oDń’'פÆzė-éCŚ“‘¶.'Š<"+9§„‰ąŠZ.¼PiŚ43¦L _”ķŚ% „.\člåęJŌGqēāˆ¹é&y=-MœA€|ƇĖß=zČgRT$éÖ[e…k·[>Ļāby]9š™cŠ­›œ7'Gœ-ŠŸ–9uN§8ī½7¼÷K||ō‘o.eA|žŚtØwŽ‘ūJ >żTæ’ł„ 2įŽ;ä{ĶĢŽ{Osuźųg3,[ęĖZ˜5 ųė_e{ļŽ²}×®šŽĒ¦MŅ^ēĻ—1Ó)酦Į»Ėœ{®ÜŸƒ1c†dhh³4QP Ń6m‚ļsÉ%r}—K*ŻūėÆeœ0eŠ“+—KśŸü|iēmŚHÅøqņ÷Ō©"R:tĻ¾^=»’”mÅÅŅØė^q…/ YZ*ć%•5Ń«—\‡D £IŸ$7Wž•š·ŁäęSXXżóOœ(óŽ{§ŸÖæ¦õ~6m*éNf¬Y#6Śl’V°|¹4^m¤ĀåźÖ ļ|Z²³æ¦ņkSS}×MMõ]·_?¹i¼šBčłßé»næ]¢kֈCI‰³;ļ”ĻÄé”ĮѤI²ĻsĻI ©Ē#‘mUž½øX¾‡vķä¼wŻ%ēX±B^’Ē?ÄńņėÆ>ēœšŽ/vļ–¾Z‘[e3hēBł·'-%%rŒBy()‘ģ‚sĻF’ ƒĻ>“łVŸ.æO@"[›7‹‡ž¤“dpˆ8;Vįp오f)™ß/æ#•u 8żōąmؚx_ŗTĘ]»ŽgäHB_-ķyÖ,"¦O—60c†üŽ—-“÷ąrÉg`·‹ƒeģXń^ÆĢ%½óNq~üżļr®½{õQĢŃ£e\0gŽ\sŽ<_śę¤IāTųśky9Rœ$2¤Xm©>)&ß^rrĶB…K–ėÖÉßĶ›Ž/55šuöģ‘Ę’ē?ė·+’v{õ×;Ń^šy‡½{Ėó°aĄˆ×iölé@«R'$‘X¹Ņ7·*’\½o04p 0w®xv“’€o”*Rłł@ƒść.¼PrźKJŖ7±;3SŚÆÓ)¢ąŁgeĄ}鄾}:v”÷ˆiÓD,“lśzååĄ'Ÿ<xŸ©Såłµ×dPŌ£‡ `ęĶó„žuķźTuč ’ś«/Jüüóņ™j”ŲŖ>EEśėΘ!Ū&MĶi§É@ö›oĆķŪEąõčś}V®”ß³6‚ rrÄęv‹ųģ3Ógž)żKœjĘhŪ¶2ä‰'äwģ>ˆēžóŻŸÆ¹Fī‡Z:v1P^.÷z#»w‹ų·ŚÜōé’Ń Ķfвg“ÆY³DŒ"ĄęĪAˆųš:ÕE¹ą™ćtJrĻ=rÆæńFy]„#>ōÜūĶ(*’ōŗ·Ž’> ö7w®ˆ²ķŪ„ļRŁ#={†÷~IxP€“'×üN§tZųON‹&N§<ļŚ8½ģÉ'Å[8tؤg}’}lm$Ä öģ o ]Uš5󿝛 4l苩*q_Xč/@Ā”ØxõUß’½zł¼÷¹¹¾ö®ģ0FP7œ& ˆ€¹ęššlłšC_ŖF Ö®•Į”¶śVżśśØ’öór»e*ņ›’Üėŗv­|·¾hoƒ¾ėöķ+Ÿć€”"Uc÷nvUMY…*čųڊvnB:5Ėfxļ=ßo1;Ū7Š’›5óŸ{Ōø±DKņóĶēK|šü–“ē āŅ~ŒZÖ­§eƒ¾HQf¦>kĀhwÓ¦ĮŪ·"XÖĦM"²5ņ]7=ŻwŻsĪ‘Ź=&‚0‰9C…$FØ Yڰm<Ō”Ŗóھ]B’±Bu”7õöī-ž”sĪ‘ł*Įö%¤6PTżŌ£§Tݬ«›īØŅ.nwąō!»Ż?"›™é-PlŚ$)šŚ“­@TVJłąn.¤öģo¹qnY™p­Ż5­Ä·{·ōyĘė*Ļ'г„OIĒzüqߨ ……±o;@ͳ¾łĘ7·£I½1^Ū¬ķŅ~ĢȔ)įG.Ÿ{N"z¢€O(©9jŠ3Ī|ŒY›Æ*ڬ ­#²sgy4H ß<ōDd>ü0p!Ru(@bDNŽ4ōuė$ŌW\,įKm›-ŗu²•gļ^óN%Rōķ+P_zI"€’ääšn|©©āõ«źš%½z‰gō„—|žÓŠ ©NV ŠŌüV¶ '6[āżÖ7–<ļźāõŽnN™"©-j]0^]*v}õUšżH”ö‹4N§T9ŌNŠÖ’-)%/æ,óCÜnąį‡cjbB“””˜åŚß{ÆśĒŖ¾Ā¬ż¬]+%v©Īflß.Eažó}Ä҈zmĖ–šē³DuŻß~ Ķ7Nҽ†•ģ‰%KĻ#Uƒ„a³‰š~ųańDœvšŌĄ× ŽęĶerÕ5×D¾¾7 ¹“v»LŗŗźŖĄ7¬š’‘!‹6=õ”ˆ­›oBؕĶ6›ä Ŗr»į®ZźpČľ×^“<Ņ[n‘čĘČėC‡Ź$ŃQ£$W¼G™ŠGHm';[ŸĪįtś/(zäHķ*ĪPX8żB­_м<ąžūeīG(Ļg£FY‰5ÉĄ-˜ĄLJ’Iø÷Żg¾ź; LV–>’v"d3Øq‰Yū™2E"Į"{Š;ī{暗ˆ† åYlˆڬ‰`œ~ŗDKW¬~ü1śv(P€ÄI“d²ŁŃ£rS{õU`üx_Ķ履–qÓ¦­8å ’) ’ć͚I•œß¶{īńM˜jŻZ^Wįćœ™ĢŲ©“t įäoŅH'L|fÅYgŸłšĆ®lŅDDĻųńā=d"—Ń7dˆ>DūŽ{┬WO>‡¬,±Į˜Ņ5j”>l;fŒLdkŻZ¢-ćĘł£GĖÄĻābI§ųž{ó‰ü„Ō6š4ŃÆ9”›+)NŹŃ±p”äS«:ųŹóY\=›œNżJė‘fėVóIÆĖ—ĖgqÉ%”ĻqĖ-R]źī»Cļ;h/æōm«ŹĄT”® ƒ‰Pśč#óėj…I½z‰ ³š¦M„X‚šS“™)æ]U¬„“T&1[‘ĶPÕ,pŁŗUŽ£¶R% Šp«_M™"‘·I“Bg>œvšˆµf Q'³5~įrUżóčŌI³Æ¼ās¾x½¾1™¶­Øhi"FĆāæbHN޹»;īšżŻ®Ž;U·®,§8ļ<ż±ł*D(“yžĶ›ūæ~ńžÕTĆ%7×’<§œ"` ā+-©„{w’E™ Ņ’ņÉśĪš·ŠF–‡‘޽}±9‘čŽ]Ŗģ(śō‘Ō Aāų䉼ŖASƒāé}ąńž=ūlämźŌIJ—&ƒøiÓ";ÉsÕ*Y<ÕȔ)Ņ?„Źėłeł\Ī8CæĘƄ ęėõė'żĖ_’*}¬Ż.bä÷ßĆ«¶×® ŌnæŻ¼Ļ Äi§IE£aƤ"Vzŗ|×K–Č=¢kWłŽÓÓeī[øŖ‡­^ķ» $„]7ljPēœ# éŖ“æęĶå·sųpšµuŖK«VŅ>nj§Ü-·śSäĪæj•Œ=ŒŗŸ–A¾ŁżUĖęĶŅö6”¹"ʱѿæ“#©©2ÉūŽ;äŲNd›;ļō-:ŠNdŻ;äļ[n }ŒĶ&ĪąįĆe.U÷ī’rķµ’®xŪmr¾¶mÅaŁŖ•8_Id !„ZĪgȄĖM›Ä旕%“T'M’AÓēŸK„S„eŗŻ2X=[nŗ€Ü”µžĢ±cõNˆ$ĀØP‘Så9¼č"żDé”CE€lŪ&öUV†'@ś÷÷lŒ©ļŲ!Qć$VGR2µ $¢aCóĮR T,›MĒK/INyn®D%”ųøņJ’•–ļ»Ļ·¾D£FR…šėÆå3oŠĄ? ˆgzĀ}YŲ3ä=-_.i3“'Ė ø¼\X‹‹Č{ź)߂‡$<ź×—ļćĒ}ä7ä³Ü±C¢cÇˀżčQł~žxB222|%™Ē÷są@½s±IłNµBõ’šM†nŁR^W“ó²|YÜĒ™ IDATkß4k~)Žśõå<*å ¹“=¤ßoįBó…§L‘Č”ŖŽˆ²2F‚•=ZŽē¬YŅNnjń‰å“N»µżĻ AāØT¼ü²”±v»„M„¤Č1ź3TŒ!ߋāśėe¾ŁōéŅ^n¹Å—qà ҆÷ī•÷}Ūm”ß;  B©åœvšxŲgĶ’; 7i5ųUh2—^Ŗ_WCū7 O¤ųDß¾¾’^|c×n—ĮqU9ūl’r²Ęņø³gĖ ĀøßwßIī¾±ŚŽUY]įvK¬f^cc„fčP_õ*@D‰v  ˆēŪq8ō«Ō+RSeĒØGĶ:TŚŽZA;;Ū?›aŌ(ßßmŪźKHׯÆ«4iEƒžß©vŽDÓ¦‘ÉfØ[×’<=zč׈ٷO¢gƲ¹"zĀYū£sg’8Ź^hߎßnµ^ˆ¢S'żg˜GͲ2.øĄ·Rŗ–ž=¹öG4įB9øöZąwNŒ9ļ¾+^icīłŹ•"VXņT…kƕŠlüaµ%Ńē½÷dĄoŒ€¬_/³ōCBŖ!„œŒ#Õ|>žŲjK¢ĖgŸIjŒY$bĢV"U§sgIóū÷æ­¶$ŗØ4½’üĒæoēĪ2ńŽlĶBŖS°!ä -MR(¢±"z<Ń«—äs«|y#Ö!$=Vū# .šę›RŌĄ ¶I(@!ä!ŲŹĀµ…zõĀ«:EHUØS§öWQLJņ•Ė'$Ś0‹B!„3(@!„B!1ƒ„B!„3(@!„B!1ƒ„B!„3(@!„B!1ƒ„B!„3(@!„B!1ƒ„B!„3(@!„B!1ƒ„B!„3(@!„B!1ƒ„B!„3(@!„B!1#Åjā…ā’ ,_v†ÕfZŹ®]ͬ6B!$. ł»v6Ēžŗßj3!„B©ÕP€čŅn¼^[ÄĪ·låY8vĢ”ŪÖ£ĖĻp»J#vŖRt(¬ė”Ū––VŒī—Yd‘°uG[ģŽ«4m“ Ķ›n¶Č"a銳Q^n×m;¹ėøœ‡ktŽt÷ĮOˆ‘Ķ›Ū!)Écµ¤–RQ‘‚d[¹ÕfD…‚‚ŗųeyO«Ķ µ”żūXmB\C ećß"z¾Ÿ–ōBéa½ iœ»9Y"zŖ°;¹~.9Y·Ķe/C«&+-²HČŪ›…Ņ’ęŗmnĒ>ĖķśqŃ8\fü×";“‚ÄŸĢjµ ¤–“‘vÄj¢ĀŚ5]°vM«Ķ 䄄„B:9»Š„ķ|«Ķˆ:k6tÅĮ¢:ŗmķZ­EnŻ<‹,-ė Æa[Ļ ‘’Ri‰=ŃĞZ»Hrʱ¢ķģ;Š·tŌm«“}Ū®²Č"aż¦ĪČ?˜«ŪÖ¦Å4ČŻm‘EŃÅįØYęDm…„BĢ“ČL³.Ŗ+Ömh‰Ņ’zŗmu2·£UÓ5Y$|óĆ9~©»ĶƂĆ~Ō"‹Hø$'U UÓV›uŹuFiIgݶzŁÅ–æ÷Ķ[š “DŸž”•¾­šF6…Ä7,ĆK!„B‰ „B!„˜AB!„B‰ „B!„˜AB!„B‰ „B!„˜AB!„B‰ „B!„˜AB!„B‰ „B!„˜AB!„B‰ „B!„˜AB!„B‰ „B!„˜AB!„B‰ „B!„˜AB!„B‰ „B!„˜‘bµ5”ōp9¾Y°Ćj3üŲ¶óŽ•ė·-X²n×>k Pt(»óJuŪ²üóŪ²ż€Ÿ]ÉÉł(*¶Ö®m»ŠQ^įÕm[°d7\Ī|‹,ņ±uĒ!«M „B©6 -@ ā­©k¬6ƄŻ–õ›6Ųm‰5‚@”aŪ~üņ»ÕŸ_WķZæi'«ķ*P”Ū"ßį^K¬!„B©-$¬łsßzØØō†ŽŃV­w£¼Ā„ŪÖ©M=8Žˆ>Å„u±q›Ž&—3 [×·Č"aW^öŠŪÕ°^Õ·Ö®ß×»QaüŪփÓī pDģÉÉLµŚRMÖl8ˆŠŹųł-Å3¶¢ą >Jŗģ·}Ų¾{§E »óJÆM·ķ‡E»’Rf‘Eń7·ģe˜÷“µß}¢·æöģÓ·£å…Hµ[ūł­Ū|ūčķśeÕ~ģŁĻļ5yū[mBÄIXҶ…Ūj²;/Gé?Ś¶ĶŻHOK³Č"ą@” łz›2ÓķčŲŚ:›^Ž>«& œhߏZ»vå„śŁÕ®¹in‹?/R+ųaŃ.ü°h—Õf${čė6m°Śk|Š u›ÖØ}…xbĒž¼9Õźļ>Ašf^Cęƒm/żbńēēŻx›ź6­Ū¼°ń{=‘HXB!‰F³FN\Üߌč^¢±yG룑-šä 'ĖŚĻqÅ—_¤k‡\$'±Č¢ÄĄķJ®ÖqII6\|.ŪNU((ĢĮöŻś¶“™‘Öͬż·īĢ@į!½]Må ^æßP8µ§v!„Ĉ¬Œde°Ū­ „GģH²é?³–M\hÜĄŚhä֝)0F@:“NCjJķ Ä6ŠÉźˆ}‚±+ωCÅś¶Sæ®ŻņĻńh™šźķjŃŲ‰ęųżžH°§$„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä BČ ‹Ķf;ž „BNd“÷Ähß)@!'„BHh¢%F(@!':QŠB!Ä?čõH@B©õD»#%„B£ų&Dj !ä8fłŸ‰>HńØ-ļ‘B©)III¦÷’hdD\€šFNHā*M)ŃŚ·ŁūPĻź”:\B!äD&))éų=Ń(F€8MĮJÄĮ !DO8DiėZĶŽ“YēJ!„œØ(¢½?"ŠźŽ?#"@"a!Äz‚y?ŒõxnėfvŠ~Ø!„r"“””„ääd$''ū ³{©¢:息ui@B v@n&FóČB<lœ™ųP-!„r"“’’rüžØ!Įę†(Ŗ:Øö]7Tz!$ńPžPO¢“s³ÜU3‘EB!äD'%%åųC;ŠŽ;5Ōų®kvs'„$&ŚĪĒŲÅ`е’@Žc.«6ś”„BȉL8÷ž`ŁOU TK-˩ޗ!¤ź¤¦¦Ān·#555 $œ|P« Ō7™‰õ !„»Ż®»÷kS²BUĒŖ*)55ÖxcONN†ĶfƱrę/=XÓÓ'$;óŹPYįŠm[¼²öTė>#eEŲ»’Øn[AŃTz¬żŽņ–¢čŽ®£ĒJ°7ßZ»vķ-CeeŖnŪā…Hµš;Œ&ź·a·Ū %B“Q3!ƄJ½R«Q€*GŁ1Uf„‡+QvT’}WĄn/·Č"”ģ˜šź’ Ė‘’l­]„( ł·’Ć•Č?hķo“ĤMW ßɶc%‡+’m˜„e‡JĒw\Peb³ŁąõzzU Ö±r~ś„°Ŗ§Æ%pL·%ļĄ!V~Å0Ś”aĒ«æ£RųV„°ö³ä;Ō‹HėæĆčc·Ūįp8ąp8L…HØ(‰ź£Ōß”¢źż)¦|ŗĒ*Ӊ)…~ĀĒŗ-ūģ“Ä„ōæ÷u[v8l‰5„ųÓʶbŃÆV·ƒšoÓūa}›&ZbĢ‚0h©źżæĘuQmdüųń(((Ą‘#GPZZŖ{>r䏏ŹpōčQ;v åå娨Ø@ee%*++įńxąńų”±H$»vÕGee†n[£F]šŚĄ"‹€²²–Ų·Æ®n›Ż^ކ O¶Č"įąĮ–(.ÖŪ•™Ł ŁŁÖŚ%ßašn›|‡,²Øśh;…@p%<ź×Æ—Ė§Ó©!f9”ń 6a&ŒŒŃ@B!äDDŻ÷ĶDHØ2żU„J$gŃxcļŌ©JKKQZZŠāāb””” ¤¤äų¶Ć‡ū‰%@*++įõzuD抔 ”—ƍąt:}JJ¢“To“Ė•‰¦M›Zd‘”TŽ®zõź”aCkķ**JGE…[·­qćĘp8\YT}Œ„Ö›”N§n·n·ūø1!&¤kÆO˜„‰*ńQYY‰ŌŌTōčŃĻ?’üń>IŪ7s”x<x½^ÓHLĒI¼²qcwµŠmkÕŖźŌib‘EĀ/æ“‚ńkīŃć$'5?€są@lŻŚR·-;Ū†6m.·Ę ’±yóÉ8x°„n[óę}›[Ļƒj Ę{Æq1Au’ÖšQ÷w5p»Ż~”ҰŖKµ" FÆ¢öĶ©7„ސÓéŌ 5JMM…ĆįĄ±cĒF@U€8Ųlvݶ¬¬,ø\Öå•Ūl°Ūõ69Ndgg[d‘PT”†¢"½]n·Ūr»’’ōveffĀåJ¼ß£¶“0‹(o‡Óé„Ėå‚Ėå‚Ūķ†Ėåņ Zh2Z¼ĢI¢ v»999čÖ­ŹŹŹŽ;GŌC+B*++÷WFĄļ™Ōœ¢¢\x½™ŗmM›6EćĘÖĪÓŁø1ÓO€“nŻ©©Ģc'ńĖÕś¶SÆ^=“mŪÖ"‹„’’śØ¬ōoÓ͚ÓÄIU0+ 讧ą‹«‡YöC0ēcMīżÕNĮ äUŌzUµ¢ĀėõźDŠŻnGyy¹©gQ{OĹÓé„ͦvdee!--Ą1! ‡Ž&—Ė…œœ‹ģņóÓüģJOO·Ü.§Ó‰¤$½]ŁŁŁp»ÆĢ“Y*’YG¤:%BĢR±Āɵ­-ƹjfе Õß*ååå°ŪķĒū©ŠŠ ?ń”ķ«±ĻŠgœN§Ÿó$==YYYY$Ųķv?’••EB↢¢tæ¶ćr¹,o;.—ĖĻ®““4ĖķŖ Ŗi6N× TDū([ė|Ō^·Ŗćˆ ćM]ė!T7dś±ŪķĒ=ŠŚō«@ŽÄDĆétĀ89;;Öå™{<ę¤N:Y$¤§§› «ķ2‘ŁŁŁHOČ“©˜cęŃvDڬĆį8.>B͉×čxõóäääć‚A+ Ō¾źóQ³r’˜9J̐ø}W<āt:‘šŖÆHēv»‘™™ąˆŲššź'@222`·WXc!Ün·_Ūq:–·xmӉN A؋öžÆ"fÕ0Ć)É_UŖU €ī†mōz<ž’uĪz¢VmoźµÉ›čp8ąńų§`eeY7x=v,Ó4ĖźHCZZš©wÓj»¼^’ļ0335ĄńK x “Ic(V ³,³sĒźżjū–äää濔v?c_–ššź×O ŠDģ³ā³HZZšåƒ³Hff&‰ĢīÆń @E@¬¶«6H„˜„b+AjEG0ńaé³7¦õ*oČZ¢6õʘΠ½”+ńfīt:MHNŽ=Ąѧ¬Ģ,Rał@?--~S°¼^½ŲČĪĪFV–u…Ŗ‹±C2®Čb Ć+Ēoß3€ć"~E[z×8IßL|%Œ~Ä3oiZZ22¬ģm‘ˆn„ł„ijˆĆį@FFF€#bƒĆį0€XmWm œ(ˆ™Ń:"µĀ#”ų؉©‘K^ėY4!Fb–ĪPs©**ō+++ ŁŁVVĮņĻu:+-Ÿģmꔉ—I蕕śę‘™™iéwX‚EAĢ"!F1("ÄfóÆÖ§žVėĖīšE?“Ā#X_eÖ_%jߏ(¬Åår!==Ż"‹°śß=‰'\.—©±ŗķ˜ xhӉŽ™ć-”Ń:!µĻĮVCTŠæŖć€j•į5^DŻŌUjƒvåQŌN>%>żęķp8P^®’h322,õž¹Mˆ×ņI_n·æ]ń0MD¤~š™™‰¬¬Ä®ŅŖ3ŅFC“PØJźÜŚg«1öWZb¶ÆV€TVVƒ„ķ§ŒewkƒĆ$Žq8ŗh +ÖōĶ" iiip:­­ĪEˆĀķvūµx N§3@›f‡Hav_6–åՊćÜć£*яpĒ_ˆŠģ «7Ž7Hü¹xģōƒ×ōōtddX×øŅŅüÓģvÆå!O3Ėå²Ü.ńžĒ×w ‰„˜uDÄG¼bę,IJJ‚Ēćń!fŸ™š0s”Ō–>+žQ8-²fµż””?"kčP€ųĄL¼ŪķvøŻīGij6­Ö  ‘#PƊ­½·k‡YŌ#Šü˜¤`…Š‚h2¾”@ x%zŁ]#ā=ÖrÜn7ŅҬ›œčrł7x»]0»æŖ"#VbÖ¦ćĮ®ŚDØHˆz6»Æ‡s’7^£:c€­, b"@ąŌ…Śvć6¼Ź Óŗ÷i.@l–7ųĄ‘Eil0LŖƒ‹`BDūw°Ž'&>ŒB%˜ąØĶżV¼X€Xū¤!ńNJŠŁżqyߏ‡6]› tÆ7>‹tDŚé‘9 fžFķ>įܼkÓĶ\BVśm2©×ŗ÷˜”d–2ćæB,šVVbļŠČ[±æŚŽzk G*Ņ[ąh»n°yOFRJlWŽ?zčv-Z„ż«W#mĮ^Ų’RPéĢEyf{Ł}:’·ˆ©MŃ$X UøžŽx"fż“ś?1ėÆĀµ©‹'ĢŅż¤(‚Eż³ß~<ŲEˆ"ŠZ VÜ÷µ˜ŁÅ¶Y‚Ż›Ć#ĮžĆ½V0"V†×x“7{]ūZmŗY—ģك sę`ū‚Ųæz5²Öķ@Vy)<ÉnxŁ(Ļlß꜁¤æ^ˆĘ§Ÿ3»v/]ŠM_}…]‹cĻŖõh¶æI•‡įMICEZ3$7éŒßõF»AƒŽØQŌķ)XæK&NĚéÓq¤ ąųvcĮŻ­‹€ēŸŹBĒK/EÆ;ī@n—.Q³ÉėõbŻ'Ÿą×7ŽĄ–y󱭔IęĪ’=“L’P·Ct»öZœzė­pdfFĶ.+GŪ?^ 7Zkģ§Āµ©‹WĢ+āŠ±¾āš±Ėc1!99Š@?žH<“éŚJ {u8ŽÅhŽlŽßAO$ažš5ųīĮ±nÖ¬ć×PŌėŌ }x‡ ‰ŹĪėõbĶōéųį‘GæfMXĒŲ’“Ńaš`œóČ#ČķÜ9ā6Žæ‹žyKž{•ĒŖ¶Ÿ-) /» ē=ž8rZ·ŽØ];~ś óžõ/l_ø°ŹĒŗźÖÅYwߍž£G#Åā‰üŃ \ļI"®ˆØNt¶¶õmńċ/&į÷ßõæ¹nš WÆŲęebĒO?įĄŚµųäż<$U”Ā“ģ‚Ē™‹ņ¬øļ•^Čm}g!į°h‘ ļ¼£OuźÖĶ‹Ūoż|TOEv/]Š}撎ł³wbßÖšŚ’įqŌEEF+ōæöd vl‹%U'œ{u0Ēc°sDbqr"Pvš ꎋoæ OEõօhtź©ųó / é™gFĢ®‹į‹Ń£±{ٲjoKNĘÉƇćü'Ÿ„3''"6mśśk|4t(Ź ktžŌ“4\śī»čtłå5¶É[Y‰oĒĆO»ķ¶*GĢØÓ¶-®œ5«Ęѐ%Ļ?Æžń°£C!±ŁŠļß’FļūļÆv#(+,ÄGC‡bÓ×_GĘ&é bčŒ“„œh”īŪ‡ł>Š_ßz å„„a“Ńø1Īŗēœ~ė­HŽB ĻĶß|ƒ¹÷܃½+VTłŲ̦MŃēpʈQIäÄĘSQo捏?ŽĀ-[Ā:&ÅéD׫ÆĘ9?ŒĢfĶ"nSŃöķXšŲcųåĶ7įõT-ā’”šŠ“‡GæGAZƒ·Ä U`ū‚˜:xp½łFĪŗūnœ’ŌSÕ>ž›{ļˆ7_‹#+ W}ś)ZōéS­ć4 ŸŽQ›ē?żė_U>ĪS^Ž’^x!¶~÷]Äm²gd`ď?¢~×®?7!µOEN˜€Ÿ|2¤‡4Ł-[ā‚§ŸŽH„*Ŝ[oŊ·ß®ń¹š’éOņńĒH«_?–¢gÓW_į˻S4ÅéDÆŃ£qĪæ’±tā?>ü³nøå‡×č<®ŗu1dśt“ģ×/"v‘ų‚$L ·nÅ={āšžżQ9’Ą^ØV$äē_Ä£FEĮ"ĄU§F.Y‚:mŪVéøķ ą½žż#1Ɩ”„”3f ĆÅWéø9·Ü‚åƽ›ŻųóĻpēęFķ„Ō&ŹÄō!C°ł›o"r¾^£GćĀgž©QÄ”4/^vvüōSDl€œÖ­qÕ§Ÿ"÷¤“"vNB–<’<¾3¦Ź3ž|2®š5«Fѯ׋yćĘaį„ š«Q]M’ķvüł„—pJ”šÄ:(@ĀąXq1Ž<ć ģ_½:j×HJIĮ5_~‰Vēö1[¾żļPķy(įŪ¹3F.^ {†±V•9G‹Š0±]»Ø 5…#3£ÖÆ;<ūĒ“iųhčŠØŚ.æC>ś(ź×!$Ń)ھļõļ‚ "zŽöƒaČĒ#¹‹¬V9‚·ūöÅī„K#j łķ7-]•trbįõx0kųp¬|hž7£I\ūÕWÕŹóīæ {,¢6)Oš„“oø!*ē&ÖĄra0’±Ē¢*>ICųōĘQyōhXūW;†Ł7ßUńūWÆĘ‚ńćĆŽį„ Q€¬ŁńĆ#„µÆ§¼óʍ‹²Eš?ʎŒÉµIT*ŽĮ‡—]qńėēĢĮģ›nŖņq^ÆŸ ńHdeźąĮaĻo!$óʍ‹øų€ā]»0eŠ jŻĆWōQ•Ę UåóŪoĒĪŋ£v~{(@BP¼{7~~į…ˆž3Pz@į–-Xöź«acŁ+Æąą¦M‘4 IVG]üÜs(ھ=äńÅ»wcÉĉµ©÷}÷”ĖUW™¾¶ü7ĀĄ,{ķ5lÜ1›Ü¹¹øč7Ó¦éėsĒŽŲµ©mx½^|ü·æaĻņåQ»ĘŹwß­r_“ģå—ńLJFÉ"aļŠ˜ūĻFõ¤vóū”)Xį9ŸZ ·nÅ“+®Ø’s³hŪ6̼„]™QQV†éC† āȑØ]ƒÄ ĢōŃO¤ŅŅ [7Ü[XˆvłKĄė…j`ee˜į0ē¹>Š1;v˜V’©(+ ˳ńĖoDō³€×_“®øĀō5OyyX‚ķē_ŒØMuŚ“ĮÉ#F a÷ļųńGģżõ׈^“ŚĀš>ĀŚ™3£~oʎ ĖqHéßžļ’¢l‘°ģµ×"RE‘œx”ʜĻ(gĪoūį,żõ°÷Ÿ÷Ą1‡vģĄāēŸśuHl  Bő#ų}Ź”ˆžóp~>6Ļ‹C;w|}ŻģŁAϱīÓO#žę“wåJlüņKxŹĖM_Ó~łp IDAT_5ujČęéÓ#j¼Ś£¦ į\sļÆæāĄŗuµiēāؐ•…53f¶kŚ“ˆ^“Ś€§¢ß=ų`DĻh®GEY¾č”°ĪńÓSO”4//b6e·l‰‹ß~é ś½ę­¬Ä¼ūļŲµČ‰Ć‚ńćq¤  bē³%%!)%Åōµļ~G y޼ß~Ćļ“'GĢ&8’É'Ńę‚ L_[8aŽ8Ńėk  ¶łóq“Ø(¢ē,޽^vņV® øĻś9s‚žc}RVOŸŽO®æ>`5£‡aŪüł/ĶĖÓĶ“IJI3'G·ŖiŠĖ„‹°$„¤ųB²ŁŠų“ÓŠ¢OŻMŪ–œt2é”;p`żś€Æo1”ÜMu»ż&Ō;³³Ķŗ"©n7RŻnRŽøEŸ>hҳēń…ŖÓVig˼y_#äDeå»ļ"ķŚˆ/ÕķĘŻyyč`@æņæ’ é€šTT`Y„«ć5čÖ Ż‡ CŻöķM__ūÉ'8“cGDÆIj7„yyOæäŻwqS€TČĆū÷‡•=šó‹/F¤ —"ŁnĒ©7ߌö]dśśŃ¢"¬üļ#v=b AŲn˜Lܲ_?ōøžzݶ3ī¼ŽĢĢć’·8­Ļ?pҐ!{ģXøėÕ xŻ`}3»zŽ…ʧŸ~ü’:mŪ¢ėÕWūv°ŁpÖŻw#£qc8²²ŠēžūqńŪoćÜGEŻMzöDįƃ^wŪ‚_Ėūķ7]X8­~}Œ-(Š­#rÅ“iøąé§’ŅŠ”¾``³įźŁ³1|ž|\6y2īŚ¾żųüŠ«>ż}BL Ļūķ·ĄÆ„^ĻQ£p»F(¹źÖÅ?óóŃDół łųcō5 uŪ·Ē›6aČGįo_|kēĪ ‹Ÿ-(8ø€¼ßh§LHmą—I“"z¾Š£G±é«Æ°oÕ*Ó×½••Xńī»Aϱe޼ˆF?‰R?‘“°/÷zū,Śp|Ÿs~YĶ›£ż Aøōæ’•…µl6“½šB€##ż'L0 Ķ+жoX)„üšamŪ¦ŪÖną@ō=śų’݇ Ć W_=mØŪ®Ī}ģ1=t½ž:ŗ_wŠwļFNėÖų’öī;*Š«żųwéE”^T@ÄŠ HĮб”  FĶK,?c,)&y“˜¼¶h[Ō$6DJQD"–Ø*MA©KŁūū™—…Że!€š<Ÿs<ĒŻ™ūĢģĢ2wīsļÕ0`źź*² q¤å-efм.ÉÉAž_ĮĢÓ Ƭ cGGX6xŖaā䄌Ø(h››ĆbģXģ:›Œ±ÉŌ“Eģ—-ķ½ōšptīŽŗ}śzyy”¶ŗ–>>źZ\Œ‘ «3Püų1¾74Äw::ņõ•9¦šŠŠ6æ©!ämVžŸßę£Ų°ŚZ›>÷Ož”ų™ęZŒ߀)uźEuu‘e\Kķ+ŠźźÜßUmm˜ŗŗĀpŠ .…'/_×śŪ eµ±ŒČH©qŅP{d>$nߎ°eĖ$¾_˜–†ēRZ,ónŽI “WR‚Š––ČgÕÕEø‘WR‚r—.ź² ŗŁŪĆŲÉIäćÉÉIr[=i)ysPDŠĘ7é‘‘WV†‰“Ą|Ō(”dgs7Ɗźź0<‘‘č6t(²¶lĪ-Y‚Ó Č^0c(•póZöģY“'ėé01‚ūcg1z4*‹‹ŃóÕģ”&ĪĪȾv U„„č>t(ā~ųQkÖ ŲßæEO/Jóņ$¾'ócĮĶkbźā‚œė×”®ÆƒW·Mœ‘ÉU¶ź+e„¹¹2Ē@jš\ćøņ’“Q^PĄUŒĢGBZX÷XY …ȽqÕeePÕÖę*r-ŽK†üYBž-ĒƊ“’źõļa~(’¦9ĄĻOdāS£!C`=s&ĄxŲ0ŒŁ¾c¶oĒą¹s¹»E‹ø)ā<ūė/©yóyZIŻ>’s“\čōīU/^@³GnŁœĖ—1`śttµ³ĆҌ L=rs¢£1åÕ(Z†bUa!Tµµ%–+­å–†„55"•w98}ō—ĮŌM$Ų{Ü8īµ¢šœV­‚’†Ōõõį¾a|öģĮš5kй{w@Ļ#Šwņd©eKĖČhœa`8x0VŠŒłnL Tr–/ǔÇ!ƬŒwcc1+* ¾ĒŽaEv6—żŽõėRēüÖŌ“ūŌ¤żQDŠźF®Ėž>ų[·ø›jóQ£šWP,ƌœ‚ŗŠā'OP”™‰‚ū÷ŃÕÖŻģķ[W¶„ѤÄuOˆ@'##čõėuh™™!=<œ»©6vrāž¶ÜæPźŌ©Ķb rŃ0®®¶¶PīŅę£F!+>ى‰°ōńŠ–tūōAęåĖ(ÉÉĮ½ćĒᄁ³fµ8.Ič@®Q? &"#2=GŒONꎎHŲŗz@³gO˜8;#óŅ%°ŚZÜ9|Šźź˜}éR«&f’!’6MnĆČテµ5€ŗėeÜO?ašÜ¹ÜG†ĢŸīŠģٳ¢¢ Ŗ„…šŹJō›2¬¶ą²f Œ† ‘\0cŅ[o32D^§GDĄpŠ .MÖ|Ō(ŌTVræ§J08QQÅOž“ūT‘¢¾ÓqCé0óō„‚Ŗ*LœœūŻwWR‚ÉšįÜ}øsų0RĻĆ»11p]æ^ģ ŗ4õ e‰ééķŪ(Ķ˃™§'zyy!óŅ%¤GDŌuāāńø Ā–/‡fXxēŽH’ŒæØ6jv€ĢĖ—ĘŠĆĶ ę£FįĮéÓH „Œ‡ Cī\ėE°Ÿ®żų#|vķ˜›ŪøÉ·¹÷Ņ#"ŠĆĶ ]mmQQXˆĢ‹ń49¹.®Wia@]*Ü.{{T——cžµkčéįŃfqņoÓøE9’ī]”dgs­‘ŻQUV&š¦łź·ĖhČŌVW#xĘ \ųæ’Ć£G·Ø•“ÖŪŖŅR‘׏¢£!¬®FW-ȍ[I»;8 (3ŏ”ŗ¢jŗŗ“— [ÖJŹ„‘™ˆ;ėļE<zŽåĪ¹‡eõ׏ĒCw\\·ŒĆ#ĒRśs6)[J*qć V[‹ŒØ(‘ ƒ‡.ĄŲŃjzząÉÉĮxŲ°ŗĢ‡Š @NŽ«č—dgĖ@’T‘B\?‡įį02}&L@NRJssńšĀō7®īĀzuóŹjkqtŹœ^°N«VĮó›od/˜Ēƒŗ¾¾Ų·Ō šVf«{Ŗļīsoo<8}©gĻ¢“zyy”s·n\ómĮ½{Ųae…GW® <]mmeKZ敆iõŖJJ^^^PŃŌDNRRBCa4dzø¹‰ä@×VU!jķZ?v‹”ŪŠ”2Ē„caŃ¢ø†‡CESgĶāFK E77 "2‚UQFö{xą^p0ʵ`¤Umm©é„üŪ4nQDo¢,FĘŻcĒ ŪÆ“zõ‚Ŗ¶v]+é„K(øJ:qéX-.»­·Õeexrõ*ĢFŒØ{ŠäģŒÄ;`źāMM®ļP×IWĒŅ3ĪIђµ’Yˆ½v^Ż‹ØhiĮpą@T•” ļęM®_’0 …xžąHŚb‹Ź–Šhša¼J½öšØĖ05 )§N”ųńcō;zżśØK…ĪżóOd'$ 0"Bā¼h҈+›¼]Ø"…^ß¾M–=¾rĀźj šóć:…„„†¢ūŠ”Šėß_tŲWĘpcļ^œ_¾¶ļæ/s+H‰)RŠjjčbjŚdłĆšpčöé£!CšąĢTįQt4æū.ĒÄ ¶ŖŠūlå‹8ˆ¬ųx ™?_¦˜@WĢńØg8x°Ųįr†‡Ćrüx¤ž90†Ā“4Ü»‡žS§ŠŖöįłó(ÉΆ••lAńxRÓ/ŽnUÆųŃ#¦¦ĀŅLJ›så~HŗŁŁAAEłÓ5^}Śęęb[ Ä–ŪŹŌ;Bž©Ä];ĆĆa2|8䕕a>jī;†¼7øVҧÆ:¹ę’õ¢7lĄ;ū÷cĀÆæ6é$Ži­·;˜u7wfžžčįźŠÜ7²gĻ`>j”H‹ņ³;w°ŪĮŖŚŚx/)Iz*X#rŠŠ-Žņļ$īŚy amm݃ĒŃ£‘qń"Ņ#"`éć9…ŗĮT^§§ł|ōtw?)Ij)qZ|ķDD@UG]mmaęé‰Ō³g‘ KŸŗē‹Į„B««ń›—œ> æŠP8­ZÕ¢ø(ĆąķG)Lœ›,«./ĒćŲXō9’{zžąōi ˆŠĀB.Ķ ae£0- Šjjbg§¹Ō(qq„GD@³GT¼xĮÅp?$½Ē¹Ńēāb />›:%1®įĆ%¾§Ø¦ćaĆÄĘÕŁŲXdrÅū!!P70ą†Ö23Ćš5kŠĆݶļæuƒ&C%1<źß7óō;MzDUUń$.@Żamm]Óō«Ž²VžžSWWŲ-\ˆ‚{÷d±~(fBHq-Ø‘‘PPUEŸ ŠŁŲOāāźŅ4Ē‡±“Ņ“’^\ææ{{£——¦KaŖ1iæŚbZPÓ#" Õ«zW÷ ‰±ŗVRww,ņ›śģömģ:Yńń½u«Ģ1i÷źÕāŌ\ņļ$īŚ©*-EÖÕ«čéįĮe>¤„„ ŪŠ”č9bʟ?ēF“|ƒŸ¬­Q’›‹9W®“ص®„™…©©(ŹĢÄĄĄ@¼xų„¹¹ø"6Ć Ŗ¤§ł|œęó1āėÆŃŁŲXęø¤e>·żśIaźāĀ ×PzDŠ?ę&Ą+/(@Ž"Ć9ŽŻ±įįækŽŁæwkv&ńz G²ĒRĢ=%ŁŁx‘žŽŌ³g¹e)””PTS枈+ØØ`Ij*&:„)‡ĆzęLÜśżw™bRīܹي‘ÕŒM–å$&¢0-M$ŻźžÉ“HˆąŽ‡’†zø¹aŅoæĮvĮœ^°9‰‰€Ü¤$J’Wd¾1:‹;-, ÷Nœą:²‚1Ü BŚłóÜgT45įøb&<åĪ¹Łk*+‘!±iš'/Ó¦I‹q-Ź„yyČæsVžžH «­EJh(ŗŚŁĮĄŹŖI+izx8ŽLœˆ^ŽŽ0ńģĪt³³CžŻ»ČżóO™Źm®EŁhČčöķŪdØŽŌsēøŹŌ øņ$†‡’oŸ ą°lTut“˜ČU¢%%Hˆ€°ŗZl™ŠjjčóĪ;2ÅOP—łŠø’˜ˆŚŖ*‘I SBCįør%×UŻĄóył2”_eD­]+S™ZffR[@ĄzĘ \žā ‘eQQČæ{W¤B~ļųq‘ū(% ō÷õ…óĒ£$'Į~~ÜĆĖ'qqx™•%±L+??™ā'o6cG‘&"WÆFLKF±j%Ķž=±ųŽ=™žģ ««±½_?¦„µ{\Ī«WcÄ×_ĖōYV[‹ŻŽŽ\ U{Ńė×ü7Äv|'/9»ø§DķÅķ³Ļąśé§ķZ!o«¤;qšĻY¦Ø®Ž!sē"”A’ }++hššrOP;¢ļäÉŠ45ÅĖģl$ļŪĒ įm=s&²š<źžü.¼s§Ł›Ø›ąd+ę j-§>‚ē·ßvXyäķWš—‡-={6é‡8dž|Ü?qåźR€‡­\‰ŲWē—¼’,'L€µ5„55øā7 ¦ń°aPŅŠūPÜ7l€K3••ņü|l57ļ°aqµĢ̰čŽ=™’ö“7U@dPUR‚Żķ:󦜂f†…q“Ź"#* æ{{·ėdVzżśa^|<7C©,Jrr°Ė޾ÅćzĖJEK óÄv•¦½o2zy{cʙ3ąŃš€„ˆ%¬®ĘöžżÅVŚĆĄY³šĪ¾}Ķ~Ž …ŲikĖ„«¶'--|–FĆt“»°r%®žšC‡”„¦§‡ŅҠܹs³ŸŽ°ׯ€©AAč7eJ‡”EŚuB—’†üϜšž^»•įżß’¶Øņ==<ą½iS;ET7—ÅōU>@£kWų;Öl*YkČ+)aźŃ£-®|ĄĄĄ@ “ҧäļŠėßS„Ź!RČ)*ĀćĖ/;¤,ø7J ‘„''ƍ;dT* ØņAZÅe͚;wÜ>żT¦Ź8®XĮĶ®ŽžL]]Ńwņäv/‡t Ŗ€ČH³GL ;īõß5låJŲ/YŅŖuķ/†ÓGµqD€r—.˜vüøŲaödŃŻĮsćāŠÅĤĶbRÕŃĮ̰°’ĶžŚ #7nÄØĶ›ŪōFĆŌų/^”łĒš³~S§r³Š·'Æ¾jŃļOĻ#dN5m-ė€Ų-ZŌ®e.-­v}čXĻdųpŲ¼÷žĢŸWTW‡’éÓķś7°‹‰ ¦9^ †ß&o6JĮj”Ā“4ņńiŅa±5äą½iģ/žŪŪŗżĒ7Oęy*¤Ń67ĒōnÖŅæ£47ǦOĒ£ččæµ®vv˜zōh«fēĮéÓ™3‡Ė›m ž¼<–.…ē·ßŅŒĘ„“@Ui)ö †g·o·Ėö­0ńĄV­{rÖ,ÜlåŗŅtwtĬØ(™'3%D’š?DÜ÷߷˶»˜šbžµkP××ońŗ÷OžÄŃ)Sž7¼}QźŌ s®\į Amŗ]ņzÉö ŁÓŖŚŚ°ž1……xzė74dKuµµÅŌ  ō4©Mā2°¶†™§'žŽŗ…’œœVmƒ'/!óęaźŃ£mÖr”¤”AsęĄÄŁyÉÉ({ö¬Eėw66Ęȍ1vĒŽMšŲŽ½a·p!TŗtAVB‚ČLń²0óōÄ“ą` ¤ÉÄi!y%%XŒ…§N”ņŋ6Żv/ooL9x°Õ,_NÕxÄ”æĆbģXL?qJ4ó9if#Fąyj*žŻ¹Ó¦ŪķdhˆgĻBĖ̬Uėėöéƒīxpśt›< €ĪŻ»cfXŒ† i“ķ‘7µ€ü ÷ī!jķZÜ ‘¹ĘÆŪ§\?żż§Mk—¦DĘī=ŠKŸ.s+ O^–>>šųņĖ6iõDXSƒ§Nįö”CȈŠBÅóēb?§¢©‰īī0mś¼óŽĢćż·VŁÓ§øõĒøwü8²Æ]“8t¦¶…,F†u@€ŲÉĖ!-SQXˆ ©S›LšÖZ6g1?žŲ&sÜśķ7œ]¼ųoī#§Ø—5ką²~=„ސ6ÅCÜwß!ņ“OZż “!ĆAƒ0żäIt15żŪŪzž’‚£S¦üķ ’™§'&<Ų®żoÉėC6P𗇔ŠPd^ŗ„ü»wńņÉTCI]ŖŚŚŠ±“„ń°a°=ŗCgæĶILDź¹sx‡ē))Ø(,DUY”;wFčõė‡nn°?ŒŒ:,. nŌ™āGš"#ƒ«ˆØhiA«gOhöčńŚ:s×TT  %%ŁŁØ./‡œ‚Ōõõ”Ó»7żŅ„ÕՈžņKÄżš7ļGKu66ĘČļ¾Ć€éÓŪ4¶ŠēĻ»q#ā7onńŽ½Ēƒ÷¦M­īGGˆ,RϜĮł+šüĮƒV­/Ƭ ūE‹ą¾aÕŌŚ,.&ā^p0Ā?śE™™-ZW·OøńśMŚfń7U@!„¼v„¹¹øōłēøyąj**dZG]_Ž’÷śĮķŚ·¢ųńcÜÜæ)””ȽqCb‹·nß¾°3ƒfĶ‚¾•U»ÅCHCĀźj$ķŚ…˜’üGź~ É+)”æÆ/Ü7lh³¾•āT——ćī±cųėčQ<ŗ|U„„b?§¦« 3OO šóCļ±ciDÉŖ€BycŠ‹ńąōi¤GFāé­[(ŹĢDeQä Ŗ„m tµµE///˜yzvųU%%\+imUxņņčdh]KKØźčth,„4ĄBd^ŗ„‡. ;!Ļ<@Ea!jØji”‹‰ ō @wwō™0”ĆĻWaM ^<|ˆéé\EDU[ZffčbjJż)’eØB!„Bé0TŻ$„B!„tŖ€B!„B: U@!„B!†* „B!„CB!„BH‡” !„B!¤ĆP„B!„ŅaØB!„Bé0T!„B!„tŖ€B!„B: U@!„B!†* „ņ†©ØØĄ¶mŪPPPšŗCkļŽ½øwļŽėć­pžüy„‡‡æī0÷ļßĒŽ½{¹×ńńń~5/$$±±±Æ;Œ6U^^Žģõ-°sēN<~üXęķFFF",,¬-B|+eggcĒŽØŖŖzŻ”P„BŽ0—/_Ę|€Ż»wæīPšČĻĻĒܹs±~żś×Ź[aɒ%˜={öėpåŹ,^¼˜{½~żzL:ą5F%Ż·ß~‹C‡½ī0ŚŌŋńĮˆT+//ŸĻĒķŪ·eŽīīŻ»±}ūö¶ń­“oß>,Z“—.]zŻ”P„BŽ0ƇĒĪ;1gΜ×Jzzz8pą>’üó׏głņå8pą€Č²Ķ›7c’žżÆ)"é>żōSAYY¹]¶’ī»ļ"$$¤]¶]oįĀ…8räH»–qžüyųūū·Łö\]]±mŪ6®b*0cĘ \¼x±ĶŹxSTTTĄßßŃŃŃķ^V@@~śé'øøø“{Y-•••dff¾īPŽT!„7Œŗŗ:ęϟƒ×ŠXčׯßėćsšąĮ&i5cƌ§§ēkŠH:'''Lž<¹Ż¶ąĄµŪöą÷ßGaaa»–‡¤¤¤6Ū^§N°xńbčėė*++qšąA”––¶YoŠņņr:teeeķ^–‰‰ ,X•v/«„²³³qźŌ)TWWæīPŽT!„7ĢóēĻĮē󑖖HIIĮ×_ŒŒ ųłła芔˜;w.^¼xĮ­S[[‹7ĀÉÉ ĪĪĪX“h—ZsåŹųųųĄÖÖHMMå֋ŠŠĀoæż†Ė—/ĆĖĖ NNNFvv6ęĢ™ƒ”C‡bžüł"7G+V¬@TT€ŗ'œ .Dqq1/^ {{{L™2÷ļß٧„„&M„!?IDATĀÓÓÓ§OǦM›¤Ž”\¾|ćʍƒ½½=&MšÄŻ>žK–,½½=FމÇsė”——cŃ¢EMbIIIį>³qćFܾ}Ū·o‡³³3<==›ōƒø’>üżżakk‹éÓ§7éļ²gĻøŗŗbŲ°a˜3g?~ >Ÿ’’;v |>gĻžģŲ±;wīYļŽ½pssƒƒƒ>üšC¼|ł’{ļēŸĘÕ«WńūļæĆÕÕīīī"ū(°vķZ899ĮŻŻ«WƖ˜óĪĆžżū1nÜ8xyy5Ie:räžóŸ’pÆüńG$&&båŹ•3f ÷“öʍ˜2e ģķķˆŒŒ n”Pˆ­[·bųšįprrŸĻGFFų|>„B!öķŪ>ŸĖ—/ŹŹŹšÉ'ŸĄĮĮ#FŒ@PPHLϟ?ĒŹ•+įéé‰É“'KģQTT>ŸĻݼół|®ÆMYYVÆ^ ø¹¹į—_~cLģv€ŗ–«ŒŒ ¼ūī»°µµÅĢ™3‘•• .­éōéÓxśō)ų|>>žųć&ėGFFāż÷ßGMM ·ģųńćMR¬V­Z…øø8€ĻēćįƇČĢĢIJeĖŪ·oŸĻĒõė×¹uŹĖ˱téRŲŁŁaŹ”)Üo‚¬ŅÓÓ1kÖ,ŲŚŚbüųń\+KRRų|¾Hå-22›7oY’«Æ¾Ā¹sē©©©˜9s&lmm1mŚ4ܹs‡ūÜćĒ1kÖ,ŲŪŪcÜøq8pą>|ˆ+V¶mŪ>Ÿ?’üSdūµµµXøp”H?©śļ¶įļCXX¾üņK@tt4ʎ L›6 źĪS>Ÿ/µČŻ»w1mŚ4ŲŚŚbģرܾUVVāÓO?…££#\\\°eĖ…B@UUų|>nÜøĮm'99|>ŸūŻŗu+’’’°gĻøøø`Ĉ8~ü8€ŗ¾Vß|ó `ŻŗuąółÜłõoFByƔ””`ēĪČĖĖP÷ōlƆ šööFÆ^½ąåå…ß~ū _ż5·Īڵk±zõjŲŁŁaāĉج¬„²²2žüóOŒ9žžžHLL„««+Š‹‹wīÜĮŖU«šžūļĆĖĖ <³fĶ˜1c «« ///ģŪ·Oä&śĄ\nzUU~śé'ŲŲŲ ¦¦S§Nŕ+W°pįBīóŃŃŃ>|8=zWWW¬X±B¤"ŌPrr2¼½½QVV???īIqmm-ƌƒ“'ObҤIŠÕՅŸŸWØŖŖĀŽ;Db‰ŽŽ‰%44&L@pp0&OžŒņņrāłóē€gĻžĮÕՏ=‚ŸŸRSS1bÄTTT~łåĢ›7½zõ‚ÆÆ/*++”””!ń»<ž<"##¹×Ū·oǼyóЧOųųųą—_~ŸŸ÷~xx8f̘mŪ¶įwށ‚‚fΜ‰ōōtu)][¶lĮŲ±cįåå…ģģl())‰-ū»ļ¾Ćœ9s ­­ GGG<}śTäżøø8œ}:śöķ‹ŹŹJĄ¼yóšß’ž^^^2d–/_ĪUĪkjj°sēN‘Šwć²Ī;‡©S§ā×_ŤI“PSSƒéÓ§#;;[¦ćšÆÄ!„¼Q222våŹĘc‘‘‘ ;tč÷™Ł³g³2Ę+))aŖŖŖlķŚµM¶åēēĒz÷īĶŖ««cŒ„¦¦2Ē~üńGĘc[¶la<Ż¾}›1ĘŲ;w¶|łrn^^^lņäÉÜk¶yófĘcEEE [¹r%÷ž¶mۘœœ«ŖŖbŒ1ęääĆŹÅpūöm€ŻøqCģžĻ˜1ƒ™››3@ ²<,,Läø…BęģģĢģķķcŒ½xń‚`~ų!·Ī–-[DbqvvfÖÖÖÜė‡2,$$„1ĘŲśõ뙁+//gŒ1–™™ÉäääŲŁ³g™P(d&&&lęĢ™bćÖ××g?üšƒČ2ęėėĖÅŪ­[7öī»ļrļļŽ½›`wīÜaŒ16iŅ$fbbĀJKKcŒ2¶k×.ĘcS§Necƌ[~C„„„L]]­X±‚[¶sēN¦ŖŖŹ½žąƒøcĒcćʍcƒfµµµÜ²E‹1sssī»»qćĄ˜@ `šššléŅ„bc——gūöķć^ß¼y“`.\ą–ŁŁŁ±yóę1ĘŪ»w/ćńxģÖ­[ÜūŽŽŽlŃ¢E÷SCCƒķŲ±ƒ{}ėÖ-€>|˜[ęėėĖŗwļĪ„B”Ųmhjj2īõžżū¹}d¬īœčŻ»·ÄŖ««™¦¦&ūüóĻcuߙ¾¾>SWWēĪńąą`fhhȄB!wĪÅĘĘ2Ęžw …††rŪ,,,dŲ²eĖøe›6mb<ÆÉuQośōélÜøqÜė-[¶0–Ķc¬¼¼\äüķŻ»7ćółÜ>ččč°nŻŗ±³gĻ2Ę‹‹‹cŹŹŹ¬¼¼œ}łå—LWW—•””0ĘĖĪĪfņņņģäɓŒ±ŗļaėÖ­Mb*((`ømгfͦ««ĖwsęĢa&&&"×I÷īŻŁįƇY||<ĄžśėÆ&Ū fXYY™Ųr6lŲĄŌŌŌXAAČņŒŒ ĘćńøkŒ1ĘęĪĖ“µµYuu5+++cXpp0÷žńćĒī:5j³°°`Œ1ĘrssĒcüńcŒqq?xš@āqų·”ByK4ģ\Ł·o_ī)ć_ż…ŠŠ ±łüÉÉÉ3f ęęę°¶¶Frr2÷--- 0Š£G€÷~÷īŻ¹YbėÓ§„B!ž>}ŠŚŚZÄĒĒ# €‹”9ׯ_‡O“'ūÉÉÉŠŃс““€Ēćaāĉøyó¦HŠøXž={Ę-6lfffPVVFnn.ąŚµkššš€ŖŖ*ĄŌŌŚŚŚxņä ž={†Ē·ŗßijgϐ n٤I“@$½ĆÖÖźźźź¾CCCī»611Alll³Ć ß¼yeee lQŒ–––“ūß­Įµk×0jŌ(¶¶†¼¼<ž""}śōAß¾}qźŌ)@ll,ÜŻŻĮćńZ“? ūõė׌1äēēĖ“nrr2lmmѵkW€ŖŖ*FĶ]ūžžž\ėS||<“µµaccĆÅGGGØŖŖāڵkpqqA§N]»v…—"gbbŅź~,žžž(((ą®ćóēĻcźŌ©8}ś4„B!233‘ wwwtļŽņņņŲµkW‹Ė¹~ż:ÜÜÜ ££#²¼¾Ü†×åĉQXXŲ¢a‡Źõ?144„–––Ģ-A’FT!„·šš—*Qó\£ŃPnn. E–™˜˜pė4&®§’’’Ä“qźožņņņP[[ SSS™×ĻĶĶ…‘‘‘Ųå"7qĘĘĘSuĘ"-Žś÷srrpöģYōźÕ‹ūWTT©ĒYõ7# æ---hhhH½QQWWēņŚ×¬Yƒ®]»ĀŽŽ^jZQ}ꇉ‰I«b­—““ƒ?žųƒ; …­:999Ø®®†……·½#GŽp•›ģģģæonn.ŗté"’VæMYoµµµ”ŖŖ*SŠT=OOO$$$ ““ēĪƒ››<<<  ®VÊWkԟ˲Īs!īŚ766ę¾·‘#G"-- ™™™ ƒ««+<<āćć+++čėė£[·nųę›o°eĖx{{·(Å)''GāļŠ‚‚ōōōøe-=gÄių»Bš’ķq!„7Vż9yył&ļUUUq7 õ:dT ®- ¾b#‰@ ŪZRUUÕ¤U¤~ßŖ««ÅīK xxxˆō+++®SvkĖ©’žÄ}²ŽŽ£„„…ÄÄD|ņÉ'Xŗt)²²²šķ·ß6ł\}Ÿ•æ;Ä®@ €fΜ)²|Ȑ!ˆ ūńŠŅŅĀ/æü"²¼~“·ŠŠ tīÜłoÅ+ī|Æ-ė;c 555-:v#GŽDUU._¾Œ°°0„„„ ŖŖ 7năpćĘ xxxȾ#m ŖŖŖI’$EEEī\sssƒ‚‚7įŗuė`mmeĖ–!)) ±±±ųč£Ō}w...Xŗt©Čöś÷ļpvvʍ70ž|xxxąĢ™3šņņ’)Neeeøøø ""555=z4LMM¹Ö˜¢¢"‘ŹŪŹ•+aee>Ÿ{{{$%%5©h‰#ķwEAAAäĮFKĻŅrT!„·\ż“»ÜÜÜ&éMRO `ffÖ!±éźźreŹJOO999M–KŚčėė‹Œ&ÕZPQQ;tn}„MRėQsźo’īCMM Š‹‹Å>™•D]][¶l©©)V®\‰÷ߟK«WNJķŽhhhˆ= Ļ»ĘåKŚVII <<>>8ž<„B!>łä‘Ļ{{{#>>666ųņĖ/ńć?6[†¾¾¾Äß•ŹŹJ”––r)f Ļ™ś 6 ”Ū¶(‹BŽrżū÷‡‚‚Μ9Óä= ‘ ĪŹĖĖ‘””KKˉMSS:::Ü0¬šMm±¶¶Ę¹s皌Bdaa¬¬,ū ÕÕ՘={6āćć±zõj\¹r…›}¹qJM{įńx˜6möīŻ‹={ö 22’÷’'uŁ³gćĪ;x’ż÷‘˜˜ˆ}ūöqó‚ččč`öģŁˆŠŠĀöķŪqšąA̟?æĶā?>×±:22ēϟĒŅ„K! ”¤¤„3f`×®]Ų¾};āććńŸ’ü‡ėlhhˆČČH\½zUl¼¢¢"üżż¹ŁŃĆĆƱxńbX[[s7»ĶłłēŸqāÄ $&&āŪo慚ššŲI!-,,`kk‹O>łēĪCPPöīŻ‹źźźUB,X€ŒŒ ̘1—.]Ā™3gšį‡:wīŒI“&įūļæĒ¾}ūpõźU|žłē\Ś””!‡„„899aąĄx÷Żw„ŲŲX¬Y³żõĄĻĻ%%%˜?>āāā°lŁ2JĶ£744Dxx8āāā'''˜››cįĀ… Ćoæż†­[·bīܹRSÅ.\ø€ŲŲXüžūļX½z5ø ‹””!rssqöģY;vLāńóōōDvv6׉Ø»™üų±Ō H§N ””S§N!&&Fd@‚–ŠŠŠĄĶ›7qéŅ%zõź….]ŗØ«0čźźĀÜܜKĶKKKĆwß}‡øø8œ:u ‘‘‘\YĶ DYY|}}ćĒ#((ƒ†µµ5–.]гgĻāȑ#ųöŪoĄ Famm={ö &&?üšĀĀĀĄćńš­Õ«ożæaƦ©©É0 Ī­wčŠ!ęīīν®­­e666,,,Œ[öõ×_³¹sērÆ=<<ø!KJJ˜ ‹ŽŽęŽæuė³±±aOžą†×|łņ%óõõeņņņLQQ‘9::²””ĘcūöķcŖŖŖL]]–xłņåģć?ę¶]RRĀüżż™’’ćńxĢŻŻ„§§sļÆ\¹RdHcĘź†ężé§ŸcŒńł|Ö„K€™™™±'NH<†·nŻbVVV 311aŃŃŃĢĘʆ2ĘŪøq# ä>ælŁ2¶zõź&ŪŁ³g344d˜‘‘[½z5«©©aŒÕ}·cĒŽerrrLII‰¹¹¹qßū¦M›˜’’ėܹ3ūꫯcŒ„„„1Ęćń˜ŗŗ:óņņb÷īŻćŹŚ¼y3ėŅ„ ćńxĢĒLJ8q‚ĶŸ?_ā>žüóĻLEE…uźŌ‰†śĪ;ĢĮĮ`***ģ½÷Žc•••·”©©ÉŒŒŒĒcJJJ,00^•1ĘņņņXŸ>}˜¼¼<0`ĖĶĶ»üü|¦¦¦&²nyy9SWWgyyyܲ¬¬,fccĆn޼É-ūōÓO™¢¢"ÓŅŅbŪ¶mcÅÅÅĢĘʆrš±’ĖõĆź6vłņe¦©©ÉTUU¹ó"88˜™˜˜pērżšŪõÓŠŠą¾3Ęž7\trr²ČgOž<ÉLMM¹m-\ø•••±üü|ęääÄTTT˜‚‚srrā® Ęź†ŁUTTdŚŚŚÜy,Ό3Ų¦M›D–-]ŗ”­Y³Fd---™¼¼pxÆ_æyyy™†ę•t£Óū"ķXŅ Š¬7rrrėF¦%ė¶E壹ķ4yŖž¤ćŃ\ü-‰YR-ŻoIūŠ\9 ‰«hČRłuū­Ż†“ėE\|õ±Å‘v\%}Æ²ģ›ø%•%ėœB’HŚnsēåß¹f¶łŽ’)ØB!¤]ÅÅÅ᧟~‚ ņóó±uėV̜9³ECóBłē  !„vU’d3((JJJX¹r%7æ!ÆŪģŁ³¹ł,!ƒś€B!„B: %£B!„B: U@!„B!†* „B!„CB!„BH‡” !„B!¤ĆP„B!„ŅaØB!„Bé0T!„B!„tŖ€B!„B: U@!„B!†* „B!„CB!„BH‡” !„B!¤ĆP„B!„ŅaØB!„Bé0T!„B!„tŖ€B!„B:Ģ’[oHŖ™ēKIEND®B`‚libwebsockets-3.2.1/doc-assets/lws_dll.svg000066400000000000000000000654251357643561300206340ustar00rootroot00000000000000 NULL NULL NULL prev next lws_dll prev next lws_dll2 head lws_dll2_owner count prev next lws_dll2 NULL owner owner tail prev next lws_dll next lws_dll prev (head) (tail) libwebsockets-3.2.1/doc-assets/lws_sequencer.svg000066400000000000000000005720271357643561300220540ustar00rootroot00000000000000 image/svg+xml libwebsockets-3.2.1/doc-assets/lws_struct-overview.svg000066400000000000000000000430531357643561300232420ustar00rootroot00000000000000 sqlite C structs JSON transit storage processing lws_struct libwebsockets-3.2.1/doc-assets/lwsac.svg000066400000000000000000000677301357643561300203060ustar00rootroot00000000000000 struct lwsac allocated area struct lwsac *head nextheadcurr ofsalloc_size ptr aligned struct lwsac allocated area struct lwsac *head nextheadcurr ofsalloc_size lwsac_use area ptr aligned alignment padding lwsac_use area ptr aligned alignment padding ptr aligned struct lwsac allocated area struct lwsac *head nextheadcurr ofsalloc_size lwsac_use area alignment padding lwsac_use area ptr aligned alignment padding struct lwsac allocated area nextheadcurr ofsalloc_size lwsac_use area ptr aligned alignment padding NULL NULL NULL empty, generic lwsac lwsac with 2 "uses" lwsac with 2 "uses", 3rd requires a new one libwebsockets-3.2.1/doc-assets/lwsgt-overview.png000066400000000000000000002260721357643561300221620ustar00rootroot00000000000000‰PNG  IHDRX.ĶC:sBIT|dˆ pHYs 5 5ė=ptEXtSoftwarewww.inkscape.org›ī< IDATxœģŻwtÕż6šgf‹¶H«Ž›-K–\e˽`plCL‡%įMRH “BŹ/!!ōŽ‹ĮbÜmÜp—,[r“¬Ž»vWŪwēżCŽõJZɶXU?ŸsČĶܙłīędyrļ;‚$IY """"æŗ"""¢į†‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČĻä}yqsÓē).—Uї÷ """ź QPYÕįß+é‹k÷iĄ\Bū?DDDDƒŒ õŁH‡‰ˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČĻśųeĻžSqlo|Séńd›É$ 2§ØTŲ‚#“Ŗ£ĒN+ׄDZŗ>""""·A°ņ7|0„"w×MvK[BēcŽołŲ”ŽČ5wł§ÉS”ō…DDDD ź€µļżæ¬l(Źæ¾§6’$ÉM-õ™¦–†żUQOmĄ*ڵ6Ż;\i#āöE¦Œß=¢V&’ÉŠŲZY4²„ņĢ ‡Ķ1zފ¼¬—ˆˆˆČmЬ²£»¹·CbGnžū£?¾ć£Ł _·Õ•Ź*gæGDDDԃAū”Yߜ Mŗžē«zj«J4öOUDDDDē7h–Ėa Q”j 2t=DDDDjŠ,Q&3€Ói rŚmƒ¶N"""¢Īķ,¹Z[ē“ŪBįr)ó7¾?sā²{¾ķķµNķü|\ÕŃ} ¬Ęę’Ė”•+TJ­®2>sīÖŌ9ĖOuno·šåŁ«_X*S(lSozh£¾¶B{ģ«·V“5צĖdr‹.:łØRŌj1“„@Ņ”łc3¦Ötw’ĀŻk2KO„@Āäy‡āĒĪØö>^{&7²pĒ—WŖ&8ķ¶`Q¦hSŖµua‰i',æw‡L”tu¾ęѵoĶ2ė#FĶY¶'")£9ē/_ŽT|r¶$9ŠĄŹi7?ō×#""ƒ6`…ʍ:P£?”¹»™6éLlś”Ś‹ŗˆKv½łŌ­UEWzļvŚķAV“aÄ©-«f·TžyźMuXāĮe5Źė so€šćūę®{ėA»¹-Ń}\¦Tµ:lę†Ę’×€ĆjŒĶ˜śqwe”Ųr½ÅŠ4‚ąJæāśŽĒņÖæ7­ōŠÖū%—S广îsXM±¦–śĢ¦ņ‚i—’ä/’ģ<‰æ¾ąČ|³”iœL”²œŚŗ*ŗ¹¢p©ū˜ĶlLŠč"޼ØļŠˆˆˆüfнe,øe§ØT6ķćČ_|¼,ww—ÅF{²ļĆæ_ēW¢(Zƒ¢v…%e¬Ń„Dä€5'ß^‘³+±»kä®}ó—īp%ˆ2 hC£K'ĪŪēnc¬-ŸÖŻłśŚ ­ÅМj]艐ų½ūXÉžM£Jmł©;\©tayaIk‚¢wˆ¢hSK}ęįO’sMw×o(:vUsEį’öśD 8•]DAŗļˆˆˆˆüoŠö`FʘRf,}­pך_’Ģi·…żßėO·Vž~}ĀÕwļ;ßłµgr#ŠóÆ™BŁ”użĻžžUē>~ą£^SWs ÉĪģūziĀäĖ^óu»Å§ =™¹üīW"Ó&×·TéD…Ā„‹J4ęmś Ņai‹·ŪĢŃåG¾IJœtEYēóKnĢ$„$¤ļ÷pIBįī’Ż!¹\ ’¦-xĮūs޶éÄ×ļ<ér¹KN,qŚmė| :¬¦XQ®Š§Ģ¾ś„ŒĖoȳ˜ōжŗ² ó}?DDDŌwmd,øńhü„9oBūš˜äT•ÜöóŻÆ?u‡Żj‘õtī™k@r) )kĮ;Žį ¦ÜņĖÆåź07׏ļī:¢Lfž~ūoŸL›\!ń)zŻŁe!BbGxQű½>{±šŹNeµo ĪQ³–tļ/Ž·>ÕblM€ĄØÄCćČ) J‚ćR¶€Óa®8ŗ;©»“§,|3cžĒ ’*0Ųž2”±»¶DDDŌ÷uĄ€É+ļߑvł÷ž&Č䞵®ZŖĪ\µć„ß<ŚVWŲŻy†ŗņ© ŹśŒ+oĻī|\& R`XĢ1pŲ-įŻ]K‘Æ‹NhóulÄŌ{ŻŪśŖ’éŪ­Y[c]&Ø: V<4Õ½8~öŽĪē@xŹø\÷vSééd_mApŒžCŽÆcDDD40}Ą€ō+VęOæłĮĒ4A%ī}}ӘŻožį5Ē÷ĒvnoÕ׫ģS,؃ŹeŻĢG’«[ŻŪĘĘ:­Æ6¢(³uWWĢŲÕ MP)Ų-m •j)Śūu†ärh <Ékx€Eß0ņģ¦Ÿ9³Ō×õÕĮўśv“Ļś$Ap)øŠ=Ń`2$D¦M®æā§ū}HÜØ$°ŪĢŃG¾|ż·M„…!Žm+O‰ €BTÆÆ­ŠśśG”Ėģīs쓲7u…Ę„œ&ĢŁ9ÕūX}a®gxpäĢ«z³™Œq “+[­f«ĢW}2į\0tŁķ½Ŗˆˆˆśß äī‹B£³Ļ½ļé÷Ž­{ėtiö7÷Cr)vKä‘/_ŗgĮƒĻžÓŻĪÖÖāéķŃז^±ó•G®8ļµuŗ^­•Ģ)ČŌ5cŽōĀłī9jÜÅ-²JDDDfČ,³č毿}÷OW€ÅŲ2½_`uoK]IÓ÷eÉÓļÆ=™}”µŖh €­ueßƃ2Q Švø\JÉéTõu}DDDŌæ†ä”[؈ŒfQ.o—ĶģŽÓāŽvXMĮ¾Īõ§Ø” Į`5¶¦8ķ6ŃŽ¦O€°ätŸ‹¢Ź-ąt؃œ.Ičė‰ˆˆØ’ 递«żiAQ”yz­"Ņ&Ö gŸ4“µāū£ŽŠÄ“}ąr:Õ»ž7ŽåtjApŽž³üÆöJµöģ Ÿ%Y­„&ˆˆˆhčŅ«śä”÷:SrµĘ³R»*0Ų¦ŠźŠöWÉTŪÓē!+eöŅżīI÷ÕĒ^*]x¾öģŖļiĆcO»·+r;.ļ@DDDCŪ  XśŚ Ÿ kzø$įäÖOot’©‹N>ź}8$v¤gŻ©“Ūž{ śx.,!½EzLMÕS bDF·ļLL̜{g{ŁJN,mŖ:ÓēC™DDDŌ?mĄŚūĪžŚśļ9¾łĆ,c}Ę½ßbŌ+Šv­Mßöü/nkؚ 2…Ā0ęŹļo÷>ĀŅŪ·¢Ü“/ć°ėĒļ17Uy®—$ģśbģ–=šØU_ŃĖ:ųšŌ>ßJ’$¹ Ī‘³Æ9Ü]Ūø s*5!Q9ąrŲu?ųæG:÷“ÕäD~óņ£÷ŸŲśI¦?ź#""¢ž1(Ÿ",Ü»>Õn1ÅŪ-¦ų¢o×O(śv=QnEŃętŲ‚qv•v ż]|#g]żb`x”Łūź°8Sā¤yo•eoū)”µŗtž¶™«Pi+EQnµ[ŃN»=ެ}gńŒŪ^‹ļhŌ¬„«ó÷Ż H2upDž®›įA· ×Üõī”U’åt؃ķfcRöē/’żčWļVĖT-«%ÄamŻĆ¤³š–Üž®EDDDƒĒąģĮr9dņMµ÷.ÉåŠ8¶x…+…Z[1ęŖŪž˜1’Ęc¾.3qłŻ{']ž ™„ż.…Ķda16§»Ć•20ø qāģ./ƒīų½:8<B;..źKdźÄ†qĖīyF”ÖVø÷9¬¦X‹¾iŒ;\É䬖ØŃS6ł£>"""ź‚$IY}uqsÓźQ.—õ¢V,÷Vr`sJCqžhKkcŒĆnÖ¹\’L”É-ڐŗš‘cŽž{ķItó"go-•ÅAEß®›ahŖį²YE¹Ü¢Ö…UE¤MĪK™¾øØs{§Ż&žŁ³n,hĀ£Z&Ģ­čzUߎołxrݩ×eŻšŠ›ŗč„¶ 9Ēn5Ė v~>±©äōx»„-TE‡BŲš8źTڼ•GjGēsJoa5“ 2Į•vŁ÷Ž_h}DDDŌNÕ6uŲŹ.9ĄuĄ""""ź+}°ē!ŃʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~&čˆü­ęąK7ŗꊁ®ƒhØ…%vęļ tDĆ ;vCÕ4§Ż?Šu 5‚(7`Ą"ņł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł™|  ""ß/{2„ÖÖBTzl Ė!¢‹Ą€ED4Hi¢fB®Š€(čRˆč"qˆˆˆˆČϰˆhH“„"dŌ-ˆ›łģ@—BDäĮ!B"ŅF,XUŲ8Ģ5] ‘{°ˆˆˆˆüŒ‹ˆˆˆČĻ8DHŌĒŌYž§ĄLu{!¹ģŻ“›Q®…„éœ6½Ļ6Į£!WĒ.;Śźözö ¢ŗ¤eŠFφL©ŲŚ*`n<cÕvøģ†‹ØX€6ę²÷P…ŽCpņµPh INX[N „ųón‡åT!c!SEĄŅtN[ ”Iń=ˆŠ X[OC_ž5\vc‡sdŹ蒖A> 2„N›–¦£Š—}‡µ±c…¢šØYQ”=»/ژyēIN“ÕīéśéD%‚āA=ru$\3¬ś30”«žĢ~?særuA‡„¦śC0Tl€Ėaźr†(×B—øšČ鐄Ąeoƒ„å8ōe_ĮnŖŗ€{ŃPƀEŌĒĀÓļAšˆ•€āĶ߃©n_—6¢L…‹VC”©Psč 4žzĆēµāfüšČi0ÕķGńęė M’|Œ€ąŃ>ĻqŁ (\7vӅĶQF,\H.œų,į÷"jāƄķ"Ē’•ū}éš.׈œš 蒖”śŠc°Ė‘xŁdʳG%*6vhœ|b§’2ep§+ŻŽčÉO śŠćh)ZåŁ+ mÆŃKē}.»'>MėŠF6 s^F€nT—š£3‹ĘSo 6ū$§ĻļF®ŽBœ— žÓåXŲčĀimĀ©Ļ'uс±—#nęæ”ŠÄt½ē¤ĒQwōļh8ž¢ĻūŃŠÅ!B¢>f¬ŽįŁōīań¢‰žQ¦%\鳍 €:,ŠV»Ū³?~Ösžpår˜an<Ks¾§‡Čik…ŻT{ń… "b²žDŌÄßl†"˜Ćå“DE fæuųän/”KZ†ųŁ’ń W€ĶX§­õ\›Ä«‘0ēEOø²›j`Ŗ?č鵁ˆŸõ/蒖]ügš¢Ō„`ĂUžpå“ėaŖ?›±ĢóyĆ3~„謧|ž/ŹÕH¾āOø’$',Ķy07ęxj57é®4‘Ӑtł»žpÕŽÓuŠv™ѓGxĘ}ßé³ŃąĆ,¢>ÖV³Ó³­™ ż{—6±ó=ŪšØ™ž!2oźšIž b¬iX m|ū5X[O”dóõ†Ó4‘Ó WGzU{hź÷į°4 |ē=0ÕŠŽ‹“4ļ-Ø#¦@ˆžüJ¶Üąó|mŌ,@r”ńäėh-żD™ ¢"Čs\T!vś_A ”śąch*x\D¢&žć vźŸ`¬Ś —Ć §µEėÆÄĻyŗT8¬(Ūv›ēŚ{”b§>Y@( åĢ'Ø>ō˜g8/8ł:ÄĻś7YĀÓļAKŃ*Xšó;œžń#ØĀ&,Ķł(ßy/lĘĻqMŌL^½|‚ G܌@źóžśc϶0ADxś=ˆÉś= ˆˆŹ|­„ką0÷"Ń Ä,¢>f7ÕĄŚZPGLī0܂ā’ NkQĄŲ]Śh"g\Ģ ‡ŗsC`-EŸv™«dŖ?}ŁWß©žŖżæö„+p˜ėP¾ė^O8ŃFĻö9üåÖpā%Ō~ę†Ćh«ŻCÅϱ‘7@®Š4¼‡¦Óo’ ¹ģØ=ņ*·äźhč’Æõ37…¹é($‡¹żb^ūĢMG;$UČXĘ^ =UķøĆ\©ÖŅ/QwģŸķ"ĀÓļķšAŽšŒ·ßĘiAŁŽ»:„+0Õķė0/.0~”§gŃP¹u¹;×»u6t6~ ½w,4õönæC"z°ˆś±¦}˜Päķ½:^”ÉPźR`k+‡¹ńßƄšČiSżs’¢ĪżOø»yC߅½­†ŠM]÷›j¼‚›mōÜnÆŃtź­né—x¶O¼ę³Mć‰W<ŪAń¾‡OĻ'Čū>§Ž€$9ŗ“i:ż\gĆZ`ü¢ß­&z¦§÷«µä ŲŪ*Ī{O]‚×=OöōŁŚ{{ūوhpbĄ"źmÕ»<ŪŚŲĖ: Œkļ­²¶ž†„õŌŁ} !ˆŠsŃ°ŚjĪ]ĖŽVīŁy£g8Ź_,MyčnxŃū =„.µŪk8,ŻSSf7UĆf(ņŁĘT·ß3ļKžy¾’}R‡Mōl·ÕģöŁĘe7xzåŖ(4ńžcšˆ)ēĪ÷šS×Uxū=%§ ¦ŗ>ŪŲ Åž9`ŖŠ±’;'¢!‹Ø“Õ}ėéu Œé°Śē_Y[NĀŚr Sź ‰šéi£ N÷L÷ÖÖĻP˜*t’ēäY¦Į¤ęnŁŻ“Ć(/śŚrU义ķ^A±K ’þšXˆrĶEßĖ3”*¹z\ĮŖ/š:ēܓ†JÆ”X›×ēī– " Øż|‡„’ĖÖż=Ļ ¢ŹĄ¤ó_›ˆ†,¢~ą²anĢą^Ė*@ūšLī§ŅŒ5;۟8<;)(~±ē|Mät€ÓÖss^‡kWų-$§@ū|ØŌe; KZŽ·€ĆŚäŁåŚ‹>ß=äNksmĻ ėõ½œv½ēūķł>€\īµįÕ¦ ē#Ź5žŽÄ ’l€, ¼‡–D4”0`õcµūiBgŸüÓFĻ‚(ץiÓĆT·s'ˆ%\å9WÕ°ŚjæķĢ ‡Q¶ćN8,õ¹:‰—½†ųYĻy–~č N[‹g[čÅ}¼CŁłCČw sīs.&ģ^=eīÅL/äŽ÷§ķ<÷ō:Ž›Ž9"œ°ˆśIĒåŚ×Ćr/Ļ`¬ŽīBԟ]„S˜UČēz°ŗ›?d¬Ž3ėęwxb0$å&ŒXü%d ’ z¼'Ų÷0Öżł²sēū˜tīMr;ī}ß &ŠgÆć{żs÷9wÜ»¾‹©µ½½÷ws¾ĻęU“×}ˆhhcĄ"ź'ę†Ļ+kÜƂŸŌó^Ę 0~1šX(“ :.0Ś™ĆŚˆņ]÷¢lĒ]žåŌį™ˆńžż gy/7qqÆā9{Ž×2 ¾–®šę=œčr“õś^ē›Ÿ& ńy÷$ūεœļ~Ą|6„ļ{ѩʀEŌO$ÉŃ>Ä@”ƒ, Źą4H’ĘźķžvÖÖϤnMD‚Óó¹õ“zbØŲˆāĖį°4‚“W $Ćß§Ć„ģ Y¶ 3§żÜBŖ]_‘Ó‘Lé5_Ėkų å²µ@QqžūxĶļņ^čÕemõ٦Ūū9Lže3Īūټ®ēźę”D4ō0`õ#c͹yXAń‹ 2˜ėu™×ć&T…ŽGĄŁ%Œ5]_\Ü›”õGĻõ\Ę^ńźöEåµō„åäEŸļ0U{&ē+“=?…Ų¾}{/]o–{QPQ®†¼‡‰äīEOĄęõāg[Ū¹'zX’ĀMrŁ=”S”‰ė0ÄŲåžźH÷I°‹Ļ{m"°ˆśQ[õ¹yXīIģ†Ź® yŗ_†¬ŠĘCپSOƃ>ļU·ß³­PwæŅzoy&įK.“Õīķ¹±’äō,‹ K¼›šX(4±kóń®×q/%ŃCˆ±z@MōģnŪi"§h§£ĶXźŁļ½*¼÷kzā¾§Øō¼b§3Auhū1›”ijŠ) } XDżČŖ/ō¬Ćäžµ”rs—vęśCžyTAńķAĘ{Ń į=ßHrY{Uowc/÷,ŽŁV·sMÆ®c¬ŚvvK@hźm>Ū„¤ÜäŁöõ]¹‡ÕdŠ`Ąė]€Ž žūaiß÷ŁF5Ėӓf¬ŚÖaņyū »Ūƒœ.y¹gN\OŒUē†}CS}ß38y…g9_AŪM÷ŻÓ DŌ7°ˆś™»K”«a3ūœW%INϾƒĻŻĪŽVŁ„(×"xÄJ+€ KæĒó—¹1·Wµ*4q]žB Š„"~Öæ=7ä?ß«k@KŃgž¹Jć~īY­ŽM>łģĖžŪ×k-ł²Ė5ÜAT)”Ž˜ģŁ/2ĻėnŚjvy¾?m̼ß Š>4;żožæ›Ļ¾#Šss­ēˆ¢L…ÄĖ^ė09hŸk„KŗĘó·¾lgŅzčØ[äõźP„ zņŚ’ūn>óq—ĻꏬĄä>]rƒˆüO>Š]jŒ5»2źšüKŪ}Å„¤Ü  ūå‚®BœaŸüŚjwĆŽVQ®E`ģåž ی„>{~.„:<©ĖwA_±NK#IŠ%]泗}kÉēg{wzĒŖ/Dsį‡K»¢L…‹ž }łzŲ ÅP„.a ™Pwģžµ¾:\Ć+ &^ö&ōåė S† 0f.ŹvŽsCöŁG?ƒ„9/b§ž ŗ„%07fC]ā՞§ å`¬ž¦Ė}źr’ŽĄ˜yķĆzį“‘vķ^č˾‚ĆR…&A WBä0Vm‡Ėa‚Ćڈ†üē•ł ˆHš÷& U[ai>…&ŗ¤«=ėe5z ÖÖÓ]īi7U@©K(×"yį§07&b Š·¬ōĢ_#¢Į‰‹ØŸµõI„‡…ŚŖwĀå“@”©`ģfž•ū„Š M BFŽŠåøĆ\‹ņ÷œwż§žČÕQK»£Ė~}ŁZTīżEÆÆėVsčqČU‘Š%.… *œ¼¢S ł/ ńÄ«>Ļo-ž/"Ēż‚, M ĀÓļõÓFĶ‚¹!»½]ÉēP&"rāĆ“1s”éų’jcõ7Øųö'>ļciĪCÅŽ< øŹ”!M½½c„N+t©07ŌēżrM,ĀŅīAń‹;¬Š-EŸ¢6ūiߟ­lgĶ4Mä4OŸB›Ž÷»‰hp`Ą"źgK=Lõ‡ ŠĘĆä5½3—ĆCÅ&Ę΃©›'«öżmÕ;7!c ‡$9ao«„±j O½yA+wĒÜxę¦\h£fC® ‡ĖŃKóq“­‚¾|}·ēéĖ×{žÜėéÕ4ķ‡ķ(ßy7t‰K<ņØBĘ@‡„ę†l4~SżĮnĻ·KP²ķDMü5”A)pZ›`3–ĮXµµĆĀ«PŸ÷ŒUŪšv4‘Ó WE“¦–h-ž­„’Cw/·}éX[N ,ķ.h£gC¦Ž\،eh«ŻƒęĀ;-Y!”śĄ#Š—­CčØ[” Ė„\§µ –ę<4~ä³·Ģ­¹ą@’šzäŖ(ŲM•h«Łg/Š&¢ĮA$)«Æ.nnZ=Źå²ņõšŌÆŹ·=žw§Ż?Šu U‚ ĒŲŪŚ_¾¬/_ņwpEŌ_QnH^ü×ūŗ¢ž"Šj›:leŸtsŲ8ŗ IDAT’;‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł×Į"¢$Ɂücŗ "¢!=XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDägņ.€ČßdJ]D…y ė jQÖ6Š5  X4ģÄĶżĶ ]]Ś8DHDDDäg XDDDD~ʀEDŹf—„®ˆČß°ˆhĄč ŁÆy{ę@×ADäo XD4`žłėŒ»ņ°ˆhŲaĄ"¢³eūŃÉeå ćõ‹l k!"ņ',"0§NUMr8œŖ×ŽŽœ:еł ˆµ_ŽÖL±šŽ‡ß,čzˆˆü‰‹ˆćŸīšģŽ®«Ó'd-DDžĘ€EDāHn‘'`ęČģœ"Ż@ÖCDäO XDŌļJĖėUUÕ-é^»„·Žß>~Ą ""ņ3,"źw/¾²q¼ĖåRxļ;pØ`ā@ÕCDäo XDŌļvīÉĻź¼Æø¤v‚ÓÅU݉hx`Ą"¢~åtIBQQm—Ž*³ŁņĮ'»¢&""cĄ"¢~õÖ;[F˜Ģ¶P_ĒÖ¬;ĄaB"°ˆØ_­łźŠäīŽĖ+cĄ"¢a‹ˆśUމņIŻ«©mN/-ÆWõg=DD}‹ˆśMvN‘®”AŸŅŻq—K’æžÖ–1żYQ_`Ą"¢~󼛛&Iz|Rpמ“ś«"¢¾Ā€EDżf’ĮĀnē_¹Vs y XDŌ/ō‹¬“¼į¼«µė ¦Ųõ³£ś£&"¢¾Ā€EDżāÅWæĪ°Ūš iūÉź½&$¢!‹ˆśÅę­Ēŗ}z°³œÜ"ѐʀEDżāäéŹóĪær+Æh§7Xd}YQ_bĄ"¢>·~cv”^oнŠöv»SżŚŪ›Sū²&"¢¾Ä€ED}ī½vvy¹ółlŁz”Ć„D4d1`QŸĖÉ-¾ąłWn§NW2`ѐŀED}Ŗ¢²1 Ŗŗ9ćbĻkhŌĢĪ)ŅõEMDD}‹ˆśŌ^Z?Įår).ö³fķĮEĮq¾k¬]wˆĆ„D4ä0`QŸÉ;^Öķšą‚Ė'¬EŃ)#£w{ü2,"r°ˆØOdēéźZGł:¶hž„ĻÖ¬žķ‚ ¦OM;|Łģ1_śj[UӜ^Z^ÆźĖZ‰ˆü‹ˆśÄ«omɔ$t™ ~Ķ’¬æüō·ī0%µ’§KX’æĒ>›53}mēö.—$ż­-cś¶Z""’bĄ"¢>qąŠéĪóƤåWO}ÕūæüڽC \®ö ¶yķŸĢž™¾¦óµvķ99”O‹%"ņ3,"ņ;½Į"+)mšEҊeSß’ų݇6tj*€Ó%y~‹6­}bÕ¬é£×y7*(¬ę<,"R°ˆČļ^~}Ćh»Ż”9ū§tżu3Žžčķ‡6vnēīĮ\öoXūÄ'Y“R6¹’ÖL±6åDö]ÅDDžÅ€ED~·yėŃI nZ9ūĶw_’łÖnš¶÷`9;žÉDAھńé÷&M¹Å½ļćĻv³‹ˆ† ,"ņ»“§*& ¤›o˜ūś[Æžd{wķD÷$wd¢ ķŲü‡w&NHŽ9¹% XD4d0`‘_mؔ٪7ĒŽvóeƾńŅż;zl,žä.9}žÉDAڵåOoeN¹µ¼¢aœŽ`‘õAÉDD~Ē€ED~õĮ'»'żąÖyƾśüwÆ­{,ÉÕu97™(H;7’įķ1 {ßx{sŖ?k%"ź+ XDäWwßuEöKĻŻ·ū›Kž’čL¤m_?õvxD°ł»UGDŌ?°ˆČÆĢ›Šx”mA<ۃå:ļo‘J„tŻyŪ¼²ļRQaĄ"¢Ō>k « "ņ3,"0īu°$ēł{°ˆˆ†žØŃ@ŗ 9XDDC  ˜sOJü-"¢a…?jD4`.p¹\Ż.Ó@D41`ŃĄ<“ܰˆhXaĄ"¢#Šg{°8ɝˆ†žØ Q/æ¶iԟžöłų»O„u>–w¼<š‡?~qĮ‡ŸīNˆŚ.”(ąģ!{°ˆhx‘tDŌ;’חwÕ7čSNĢx{ŽÜ1[¼ŻrĒæ~\RZ—õŚ–ÉF<0vLBŪ@ÕŁ£³ ŗ.`”Q"¢”„?jDƐ±Ķ ‡Su¦¤6p ėéŽgˆ‹ˆ†žØ C?¾gŃĒɉ‘¹W.Ģ\µ|锦®§;ĀŁ!B.Ó@DĆ ‡‰†”G½2’Ń_ÆĢč:ĪG€pvˆ‹ˆ†žØр97ɝC„D4¼°‹h*(¬Ņž© ŃŚfĪHo€m;…[ĶvYXd°uFÖØV_ēÉ-Ŗ®iV{Ÿē¶{ĻÉŠ·ŽŪ6©©Õ؟;kLń]wĢ/ż.u ¢Ų°ø 3 XDĆŠ#O~“`ćę#·ĘņåŸ>śŸgąįGßæåŌéŖŁ:¦ŗźĢkæöuŽßö”źšęŒéSӾ޶ž©Żū—_’—•ßģ:~$I2÷¾OV‹—ŽŲ“k÷Ög^U*„^½NŠż²gö`ŃpĆ5¢KÄĀ+&ī½Žėk}¬¼ćå5µ-i°ņŗéūŻūožĮ³Woߙ½$IbbBų±YÓGÆKˆ Ė€ć'Ź/»ėŽē®ģmM^ė`ń·ˆˆ†žØ]"žÅŠ\…Bf€UŸī™ÖłųKÆn˜$I’L«U5üæū–œ€ģœ"ŻĘ-¹×Ą5K²>:‘óÜ_7õäĒ's’óĢÄ ÉŪ`ūĪü«z[“pv™Iśīļ"¬oP)2&]÷hʤė½ī¦×}×ė} XD—ˆČ=-5ö0ä+™ŚłųŽ“`üøÄż2±}čīŁēæšįp8UZ­Ŗįõ—~²Ń»ż£Æ\@2ĶŃ»÷œ ķ]U‚ßz°¬VQ¬ØŌŽÆØŌŽ/ÆŠźģ‰hųcĄ"ŗ„\µhŅ>hl2ŒŲ°)'ҽæ„Õ,/)­Ķ€®åĢĖ/ £R¢ź‚TNļk-_:„V©”›ąH^qxoźįB£D4\ńGčņš/®;¦TŹšęūŪ=ÄϿ¼nŒŻīTjUõ?ŗwq‘{C“!¢"tĒOTh;’£PČĶ`0˜zS{’; ń)Ā^ųüĖäŲ•·Ģ_qó.æz k!¢Žų!Ń%D¤rfŒŽ?x4Æt~Nö™i¾€-ŪņĪ&y†Ąj¶Ą–ķĒnܲż‘»»nˆ.ŠŅ›zĪõ`q”ыµ?;2ųŽūęžʏkłf€Ė!¢N°ˆ.1Kƚ“’h^éüŚśÖ“ŻūN†Ī™Ń|źteܰņÜš 8\.%„†h+“Ś€_×€qc›{S‹(|U K XD—˜_>°üųæ_ųZoµŚuƽ±yJiYĆIc›%20P]ß{·EŃ8Õ ®æéŻ×¾Õßµx•øŠ( / XD—­F哞pąČŃāEłĒĖ3” ™&ŒMģ0< £Õj×56ƒū¢Q€ROr_æ1>źš‘ˆ(øāņźŹ¹3ė|öø­]Ÿ{4ö’ŒO’z}üŌ¦¦€A”$µŚŃ–šb(½ķÖāÜ% +뻫ĻbÅē_›¾÷@dZs³"X—Vc7­/撞‚|ļ{ģŽśĶŽŲų†Ę­{_k«"ōOĖļž{D’±õū·ž)æ˜ļˆˆü‹‹čtķ5Óö9Z¼ØŖ¦ydPŗ®ļ4<a”5z½)®ŗŗ9®/źpÆƒå’śvˆpćÖų‘o¼ölū&ęėmė7~諯£OLł~Ii`VB\[žŠe„Ļųjóē’›4oćęø[A’®[^q?ŲģraīĀ«~|üDČeŪ=†/Ö$I·Ż\üź«ĻļŻÕłųÓĻLššŹėé?4åѝmß‹×ßJ·HÖēž÷£Æ¦„¶šŽy/uā'Ÿü‘w»ņ mę_’1>ÓżwZŖaß÷o=óüł¾"ź;œ÷@4Ĺ\?¼öąĻ—ŸŌؕĶƒ9ŗØ¤nL` ŗīž{Ī==č6~\R>•ŌN*(¬Ńų£^oż5ÉżŽ»Īä ‚$@į™ ń¾Ś46)•ڱPU£É(( öłyOÖ„@XØ­tüŲF#Üy¼Ā•b«Œ‰2ŸV«- I‚0kZ}Yēkżź‘©Ó’ńļq»Ć•(ĀčØW(\ž+— Š¢bŻŌŅ2­ßæ"ź;ģĮ"¢dr™źõ½Č§R!HcĒ$ī?”}fIS“!yÖĢōµ¾Śżģ’-Łæ~cö-v»S}ĖĻžpēę?¼¢Õœ[kżĘģ(_/†¾pķC’’Ō·Ė4ŒŪhŒ·×7¤45$fēDč²&7č½Ū¼ņĘŲч —K=÷RʤžŻ’­w§KŖŖ5£ 5EܽĻŽČĖ@%ēļ;ņē_>pü”ūŲ¶obĆßx;mź]wvx1ö¾ż‘!o½—ö#I‚ €4gvݚ×^Ų·&9Ń`€ [ć#śå“ū*Ŗ“ć¼Ļ{čg§ϘZ’xM:šo’œš¤Œ4žłżĒæp·Iˆ7µ}§/Œˆ¾3,¢!*X§n¬©iʁƒ‹^󓼦¦%nĶg¾8*%Ź|!ē_»bĘžCŁg–ĄMߛŁexęĪĢhž;kĢŚ»óWž:]5;=óĮ¤± ŁŖ„­¬¼>©Ø¤6kņ¤”­;6>ż^o>ƒčžäŽO¦„¶ęÕ7D„Žž`Ōø¬É {½oŪ źg«Ł* Ž»?j2€ė“Õ#ām61ęĢ®Ėsļoi ˆ€Ø(k”wø€WT7.ø¢ŗĆ*ųšČ“YĖķvQ S³6nüßęO½/YXY5±²sĄ?¶Ń8~l£qvdšßž9 Ń8 ÷Ż]Šį"X"$¢n½iīVAœv»C³’@Į5„eõ“÷:}Į+Ŗ?š’–hµŖĘ @uķ}w/īö_ĪkžūČ糦^@jiiKųvß©Ūv»”°ØfŗB!7§Š-ķīÜóÅö—=}°ę_^ć DGt& VģĮ"¢~żąŠ“±±aæ[³öĄ…Bęœ;glįķ7Ķ­€‡¼n÷’E™łįŗn•‰‚tėM—}(“ =†™(H›æzņć [s·|ōńĪĢśz}ØF`›‘PńĄO®ĪŒŠŁ{ūA<ūa߬{ļ*8ż×Œ·9¢²¤$°CÆŠ¶Ńį--ŹA€sÉāźƒ9GĀŪķ¢ęł—Ēd<ö›Ü|w»ć'‚G@T„åLr¢É2Q’“Z{ƒĮ Œ©­UžšÓ‘ ·ßT\ŃS-’[›k6ĖB )Ń˜ēż”   XDCŲķ7Ķ­p‡*o3g¤¶Ģœ‘zŽyQ’žū>‡}Y²0³~ÉĀĢ-[cOÜ=X.©ļ{Ó##,öøXó©ņ ķc›L›ĮĮ¶šk—•–žõć$I„M[c§x¬ņŹĄt=ڐē}ķə-ßīܵŅådürĘcƒā’īæēt—‡ÜöˆJtoaāŠŃ0Ä!B"0ī9X}=ÉŻmüŲÖcīķÕ_&y† å„N€Ōż±ńc[Œ‘Ö3pźtp–»Ķī=1”F£<ę_V}^^{aĻŗ`[%X­2Żo~7õ©«–/¾¹¦N«ōUGuŚó`BB¬±Į?ŸŽˆ,"0"śg”Q·k®*÷ō<å zƒRV^Ń>døhAMLœŲtŒFyäJ€Õ_&„€Lę²Ż}שBļė&ě¬Ÿ¼»ė/11–Sąr ņ=ū¢VL›³ōŸÆIŒķ\‡Ł,W¹·½z# n XD4`ÄsÆŹé—ߢ|’LY@€Seڱ6»\xłõŃ£ķvQ­PøĢ?»’äIøõśāĆīsV‘<rrĆG@\¬łTx˜½Ė¼³¹sjšó~ń§+V­’É$;4·$Üs’Ü?>’Ҙ4ļ¶§ ė|> / XD4`Ü JčŸ!B™(I#’ŪņĄf“¾÷ŃČämŪc'Ąˆdćѐ`«n¾±¤2(Č^ GóB'@I©&ʤ·ęū¾: R¹\Ÿ²}Ķūoģy$&ŹrģvQż‡g2į½p©2Ąiso·ź•j’R"h XD4`ÜÆŹ‘ś© &g6y †Å–UhGĄ¬é ŁŽķʦ·€†Ę€õ *EKk@\¹ø²Ū€å¶bYiĶž]kžILh;f«,ųįße-vרV÷v«žÜ;‰hų`Ą"¢ӟ ŗŻvK”'`UVj"U‰‚׏ī>™ėŻné’ŖĆķµ ņ’ū×øL§SP*•®¶»n/,¹ū„‡Łķ/>·÷uA€ņO„NtKŒ7y&¶×Ö(#æćG"¢Aˆ‹ˆŒ;`ArõĖ!,˜WŪØÓŁŖ °(p”Ł, ‰Ž4NŹl6x·ūŁŸp`ėöø™o<”R]Ųb¢ī{ŚĄŲ&÷<9˜•ŁXćŽ.)Ӎīī|‹UģvųPqö݊ąrsŗˆ,"0¢Ųž”æ'¹Ū¢ĻåÜRSŒĒ “,p"LœŠœŻ¹JårJр¢Ą)0q|Ėy‡;³ŁdĖ\ž‰ń7\_Zåžl_ߐņĪ{©ÉĻ«©Ó* Ļč²:ļwKNnõ¼Éd’s˜‘haĄ"¢#Źü7De³‰"Ś_€Ż Œo…o³f“æGŠélbׯ,ÉńÕīŠĖźy·[¾“ÜgĄśłÆfĢŹĪ ÕuŽ’“‡f̱ZÅ ˆ5{•‰’”>ŗõūļ§’’yoE„&Ąż·Ž ”­øįŠ»m6±Ūąf·+.3ŌÖ©SZZäŽēwwõ®äNDƽ$|ē!B„Ā!i5Ž&ƒQm0(c&N½öį°0k]}C@ģÉ#_žÅ»ķ½wžxéµ §$AčØėīÕ6ü$’Ų«o¦ŁœNA©V;[nø¾“Ŗs›¼ćįļ~0źž÷>åJL0åÅD›«dr—³¬L;¢¼B;®»ļ,Ųä}Ž#æ<žÕīs™Ó)(źT)Y³—’#-UŸ#IJJtcōy—õ³: ±WÖÕ¤šĶ²É³–=™œh,hjˆØ­ÕŒ,/\ż RįĪw "źģĮ"¢ćµ’»_~‹&Œoņ¼ś§“\›™“¶ø²J3®±I”šn—–ŚjŠŽ“œ€ōŃ­>{ƀöDŚņ 9©-_&J]Ė+oŒžčr r§SP–”j³öˆX¶ēŪØkĖ+“™A€s嵄ļt~uΊe„5?øķĢk¢(9Ąd’‡å [xōXŲ½A«ÓŁŖŅR ūzś¼ .ÆŚīŽ®ÆW:”±¤Ø8hj›Ižéźä„æ,"źSģĮ"¢#“ł7`­žhĒź;ī›cĪÉ ›aµÉ5ŗ [Cꄖ#¾ŚŽ×t¤©%&~ÉāŹĆ¾Ž»Ķ™Yw ŖZ3zś”†£¾ŽæšģŽo££Ś 6ĒO«¬Ņ¦“µÉCNA”R9ōI‰¦S’ļG§6Žy[a™ļs÷;mjcūƧ_Y^”N³ŁäjĘŃ:&£%÷å’ģ_wŪ]soė©¶7^žö‹U¦Üµ'śr‹EhoŒˆ4W/š_}pŲņ.½mDŌI’ŗDł]™›Vr¹¬Šó·$¢KŃĶ?xöźÆ6d߮ժkKŽx` ėl&ĻZž@A”n|żÅ¶ŸĻ›[Ż4Š5 '¢Ø¶©ĆVvūböļtķ¾ø(х87DŲ?ļ"jŒmrĻÄłääVÓ@ÖBD‡?jD4`d2÷JīżóŖœ”Äf— MMŖp’M|)4ŃĀ€EDHl_ĖÅߢĪ~ó»É3wõæM7ĶQAAš&„BŽä=ńōŖßźõ¦8™L“ED芃‚Ō5„āŅŗI ęŽŌ(—]ŗ“܉hxcŃ0uĒmóņŽūh‡ätŗ”Ææ½5ķ‘_}ļøūŲŪļoO6›ķ!¢l €Ļ¼ĻĶ9Z:ʎMĢ€7ŽŻ6Įnwh”J¹qĶydī̌f((¬Ń¬śļ·) ńįÖŽŌ(“É.Ł9XD4¼ńGh˜š9#½%4D[ ßģ<>ĪūŲŗÆf@Hˆ¶¢¹¹-qƦœHļć%%uépĶāÉłPVÖ ±Ń”gÜį ŅRcL’ve^Ƌɽi³s˜ˆ†,¢a,5%&NT÷ޟ¢"S©”·¹æūįĻ0ᙢ:uS³1) @aøķÖ+Ź @­°@c³1Öb±łķwCīY¦°Ū­ü="¢aƒ?hDĆŲÜ9cŽ@}ƒ>„ °J…UššŚ–Ō°° Š”ѐs¤Č³ŹåūŸģH“$ILŒ?”T“÷0-[:5€d4š£fĶü§-­fæL/p€?ƒŃ@ćŃ0vļžEĮ!I’ųĘ;ŪĘĄ+ol/I’,=5.’¦›ęä@UMs†;€8xz4dNLö żŻyŪ¼²)Y£6@AaÕĢ Sśóæ^üzōw­O.<Ėl¶ó÷ˆˆ† ž  cɉ‘–čؐBŲ»’ōxŲ³ļä$X¾ljĪ’…™õa”e.—${ī„õ“ šLm:\»|śqļkm^÷ū÷͟š™( Īę–¶„'Ÿžų‰•·üß §«÷s§D™Ģ3Ėérq  XDĆܘ1 Ē ØøfœÓ% Eŵ5jeó}?\T ćĒ%€½ūNeé Ym]KŖV£j\¹bFµ÷u” AśņÓß~łģßųdD„®X’$qÓÖܛW\’ו½­Mī5Dh³:ł{DDĆЈ†¹+NĢ€–VSü'«÷ěL¶ŠŌQ±GdbūüŖļ-Ÿ~Ź*źĒ¬Yw0Īét)““#ww½{ļ\PrōĄ³O„¦Ä€{Ž_»vżįčŽŌę=Dhµqˆˆ†®ƒE4ĢŻ{ēĀ¢'ž^e²ŪšĻVļ™—Ļ›ķ>~÷]‹J{ść&“ɶasö˜œ9²Ē×¶č‚TĪo6żńÅŃšj2ŁĀ>śd×äåK§løŲŚärļ¬žX6»\ųbmBÜéÓŗ0“Y¦Šj\¶‰ćZ®\T^§R¹\ēæB»š:µrė7qQ…AaZ•Ćž>ŚŠ|”×Ų½/*ō›±ńW\^]9wf]ółŚŃŠĄ€E4Ģ©TJWbBųń¢āŚ©Góʲd2ŃöąO—y&°ĖDAJO‹?œ“[¼x’ĮĀ™šƒ[ęwm«`µ#&:“ØØø6¬©ÉܛŚdrł¹€esł%`%¤Żų7‡CTź‚l §~ńg_m ƒ5÷?8㺜#a—Ūl²ĄĪĒår—5!ޜ’½„[’ųdĪ‘īīµmgtųļžœŗņŌiŻ »]T{ÓhĶS³š¶æüŸ}_%'ŗ}ió;ļ¦f~²zä}ļ}˜rāōŃ/žt!Ÿqöükī-* 5Å«~q!ēQ’b—<Ń%`āųyPWߚšžló>¾pĮÄlØ®iN×é4ÕsēdtčIń5‘Żé’„ęfc ÄĄ6ō¦.…×”ĆįšĖ$w£Qi4Ź£ FEøÆćė7ĘGĶ]“ä/ūD^ć+\µ×"””j³Ö|•xEw÷yźĻ“ĪŽ IDAT“2oøuĮ3ył!WtW`2ÉCwīŽZ9ėŠ%\żÅˆ8_ךVU­ó›Ē¦M=_;Šä!F£<Źh”G]H{"źģĮ"ŗÜ“rÖ±/×īLĶJÉé|ü”Ÿ.;žÜ ėĢv»S=jdt—Ž«[īü×ŅcĒJ'Ī=foFz\­Ćį?ū|ļüę–¶A\×^3µŪ9[=‘{÷`Łū~ˆŠf— ÷?0óĮ¶6yøōY“w¤Œ0TFEZ Ķ-JMQ±.öä)ŻÄŗzUźU‹*wūŗĪ‡ŸŽLxī…±8‚ ŌjgĖō)õŪ22ZĖĢ&EĄ‘£”yĒCę¹\‚LÆWĘżģ—3~“9”łwi©­¦žź{’£”Ū~ū«#¹įav»’?=õ',¢KĄŠeSk“ZUC[›%üž;u X!ĮjLjäč܂ª™Ó§¦v K‡³ĻLÆ«kMūä³Ż:’–,žōÉŹė:>qx”:ĢĮ²9ś<`żó¹1c›T#@©t?ūhūć ęÕ6śhśßUŸˆæźŹźŚĪœ.Axģ©)÷»ĆU\¬éė«¶żkģ˜Ö6Æf»_+mėoŸś;»]ŌņČŪļž{ǁ_½ŅS}£<śĒ?›}Õźv¬ū“ˆ]"¦L¹+5%ęą¼¹cš|_reꞈ]ńļXŠ%`­łģ‘,æzźū£RbFEĘDŸ?.qĒŪ>ūšW_õ¶&…ĀūU9ž™ƒÕ“]{b2ÜŪW.Ŗł¢›pøłĘ’ʐ`«£óž'žĪšŌŠ0hļ¹śü“’ī®÷Ż]Pü£»O{Չ“!³7lģÜ®³­ßÄ]—”»ĻCDƒ{°ˆ._ńŲźžŽ’åéŪ³’ņōķŁ¾Ž›hüų݇6øč'{ā=Dh·÷}V«^ī™Œ?uJCqo®±ę«„īķ…ók֎Ūhģ®ķßžtųšk’NTUkĘHdĻž{ģ‚% +Włj+“Iv’Ż.ŖöĖé7}»żė7zS ģĮ"¢#—Ÿ[ɽ?–BīņĢmjiVh.öüĘ&…¢¢R;DQrüń‰œē;ēŹE5ŪÜŪ§NOģ®Ė%ˆ©£ZĄ±üŠĖßż(5ébė#¢Įƒ‹ˆŒBī5Dččū!Āč(‹gHpÓÖø{žŪ¤§øē^EEX‹Ī7ižE^¶ ĄMÉGrCƒ|µ“$Č.›]wųģ¶ųēæNųžÅÖGDƒ …ģÜ”£z°¾Kńaœ82ēѧ&g]ĢłĒóC<Ė-$% /äœäDƒ%$ÄZyöOaŪŽŲn—l?^_£ rT@Uµę’³wßįMgĄļ£é½÷ĄŲŲŲ€Ł#ģ=V™H3JHųš=š¶iš@Ӑ4›4»YĶ" Óģf˜a¼÷޲,é|Ė–lĖF¶$s’®«×%Kē½¢DÜ~ßē<ļ G’6Ҧ¶ Dä|°ˆČaZ¹ėŗ?`-˜—][#ͽłNŅ=żĒČį¶žŸ•ėnz^_bėy!Į 9¦ĒgĪł¶Ł»*+ĖĆoüŲĀßL?ņyæ›+«Ō¬•%rA XDä0*Uó –^„]väĶ—|ØVė«@Ɨ©^{+éĮE7M[Ø7¾e„Śßō8:ŗŽęęŖAZéŲ‚"« P ±Q”xåłƒ[<ÜõPS£ ]±jü[߇ˆœ9ŒJ©4ļäŽ#ßG'Vüó‰£/(•†zĄ8“õėֈ‡ŽYųЩӾžķŪŲ(s3=öõѶ¹żMkŚ*ÓcMƒLŻŽ±Q‘õ×,ĢśŸéē_·‡±m‘ bĄ""‡Q(ĶwźÄū>ŗūĪ“ōÖķż»ŸŸÖT…Ģ,Æį3ę^¹ęĖoūF¶už®IĀ‘—W“¶­ćZswkj4=nlT“°ąµ—ī j¼MM2{}­ļED΁‹ˆF„j®ĮŅ÷Š –ÉĀłY…Ū7n~²oL­Ōپ¦VzןĘ=łŌ憵īXŠ‹‚4F…Ā`°vŒ5J•(5,Õé;ī?ØRźÄU+Ņ>3ż|<5`Ū6¹,"r•Ś|‰PßćßG ńUõĒüšā‚¹¹ŸČdĘŌŌ$óxéßzłAż[Æ06Ō×)”¶¾F#W™»©ōķkņȃ'N÷‹«9Hm–Ūś~Däx XDä0j•yĄź¹%Bsr™(~žŃŽM’Z}h»»¾ōzAłĢ³ƒļ=wŽ·E3R„R/- VV©ÜZ_«-Śę0¦vm®ŻśēG?7æü~|äH[Ļ%"ĒbĄ""‡Q©›7{Öé{~ĖܟVž=’ž[{W«Õ†jØoūÆŗļŠ«Ķńš0H{ęē{ų·¾F[ŹĖ•Ņ=>>Mū¶eĮ¼ģ¢Ń#J7›~žų³ø›«kTr[Ļ'"ĒaĄ""‡Q«Uf5XŽ X€1ŠÜ³źō[¦Ÿ¦L¬«—K&8°Aj·›ļŁįĘĶ&eenұ±}«Š;3¦·_Ū’ZmØ€šUŲ?×īᔫéĢ5ˆØē9ü ˆ._nfĖŃ3X&Ožõčń  Ę hhūmŻ%…£čØ)efyõ³õš%„jéĪÄŃĆĖ :3ž„ųŖś«fē}cśłēMŃSüµå¹õ<§ųB#¢Ė“›Ł”ŽA5XÖD„×e˜ŸM÷ö3=ž9-?Żōø°Č=”°Ų]ÕśÜÖNœņóŖØTE€Je؛3;·S3XšĪė{¶łł[JdēxŃ3MY‰Øėœę ˆ.?J•Rꃄ·Ó –Į (@D›Ū(“¦Cj«ąę¦“/^”Uąé©+Np{śŁ!æņś ‘¢hģS{ÜÓCÆļģx<=ōśŪn9’`¼£šä)?»99,"tķĶ/ĢOvļ_–ŻžŚ¬ÖƽžĪĘųčž+×½āįūKJ«mn%Š–e·æ6+iŲ½Y|Óó /õZ­Ée‚(ĘĶ—ķ°ŹŹ•JƒA€‡‡±X½+ ŠÜ¢M‡ -/3-y@Å~ÓćļŒ^ØŃČŚ·F#“mŽ.mu3ibŃĮ®ŽiĶæŽŖK€ŹJUTWÆCD=ƒ‹Čåä–Fåę•'ē䖆·~ķƒ·Ļ©ØØ‹NæP8ś…W~r©ļ•›Wvń½Śģp~ič —¾ģõÓ¦éĻĆĖ£y{“öÉĖo ź_Pą‘~¾Ś¼‰c‹+Ģ_’ĒßR7šZ'”WØūܰlŚÕÖ®×-¶Ø¼\>Žŗ‚µ«u9`ĄćIżÆ  Ė3sDŌs°ˆz™ČšĄ|Éżˆ”±…ŽOGįbĄźā Öī}!ž mRÆæ9`žéłˆˆ†¼ÖĒžaŤ9 ƒ?ńųSƇ—•+[Ģī••+•\5~ʚ ykœfĻ(ŲŲś“'”[ņ“éēm;Ā®›9oĪ’¬o©/ÖŃcžŽÓęĢ^žŪΰk/>%.[rį 77Ū»æ[³ō†ōÜ!ƒĖ·_Ź5ˆØgtøe¹–ļž÷趗_ūńtb|dły#‹=žŽ4/v¾Č½°Ų]5oŃĢ—ŻÜōUƒ hh› ŅśoČŲßśų”żĮ“Ė+Ō}^y}`āæßŲäėÓX¤Vźė5rļŚZUĮ)tõ©żżķ×÷żfķ}×¹õ›įćöĖÉõ ūĶ2zĮl?_m¾A„¼ŖJf~­ńc‹|ī郇:ūł¬yķ…ƒ_Ϙ7k|S“ĢŻ×#¢īĮ,¢^F.ćļ[˜ę į 0ŸĮ2tśū胏ćōzAYW§2 W9¢ló²%é9ęĒž;ļė!ŠĶßy”•źØĀb÷žÕÕŖpS †-ß²}Ó/ÆŖ”:Vø¹ )æm|aäšņ_A¼UY¹ŗoE…:Śt-¹\Ō.¾:ėƒĶ?nł²³Ÿ­-#†—VOŸZøŽ^×#¢īĮ,"r(SĄ2t!`M›T˜·’PŠ—Žq2wo/}å䉇_\{č@ėcā«ź3Ļ|óŲ›o'ÅoÜ5$7ϽOm­ŅÆI'Ør±ÉÓS_W~ĒmgS\•Ūa8õómŌķŲ¼ńćM›#7¾žNҤĢ,ÆŲŚ:„æL&ź|¼š*’Uœ~ų¾)ƆV“Ūt3zƒģ=˜>=?˖ϽīõŻæL˜>o°¦QįiĖńDŌó°ˆz™>ŪŁē’ü2ĖŻ]Õ°õē|fz¾®^#Ÿ5Ķ­“¢Ļ’ēĶ»vüóŁo“?żbēÜҲźƒA”ygżßW~}ĻŖ¹ēlym“(\µpõĶ Z·aƒūžyóÕ»»2^SŃ¶ŽŠł%±W”T®’bū¶/—‰ā=«NŸ»gÕi›>£-®œWråģ¼o»zžāEY‹euŖłh`@SSŚŃõĻtõ=‰Øū1`õ2igr‚ާfMwwWV–F£•O͚žSšxŻĶ/xoŚrō&˜5¬ĢĶ+O~|õżcś„üeįüQĒßóą»÷:7W&ō÷żiž¦®Ž÷R–‰ˆœ抈.3••u‘›¶]zäW’ų—­æ<µź¶[¦æ.—ĖšōzƒźłW¾æ²£kW©Ö’pąz9¢ßę³øcĻV2ŁÅ%BŃ9¶Ź!"²Ī`]†"ĀNŲłĢ+nnƽÆŃ/åš‘ōAĒOdMĖĢ*ŠŃł«ī]we]½&P­VVÆ{ķ®./ĶK„;ōĮ""rü‘č2tŪ-S×›Ā•É˜QżN@MmC°õ³ŒŽü~ĮgūĪ ąš£æLˆ«æ”±‚ģb —‰Ø÷ąŃe(""ČāĪ¶Čš *Šé *m“ŲęlŅžhQS“Ž#8ČēĀ›’¾{Ē„ŽåRī"$"rVüB#"@p·i&JŠh­~7|»~ųļĒ.Ģ”ĖeŚGXō”J)XķÕĶw2`QļĮ,"ŠöĆRffńąŪīzcŒĮ Źo¹yņŗ»ļœn—÷ŒļkčB›""gÅ/4"²‰^厎ī%šõw)7}»~æÅFÓ]aŗ‹Pä!õ"üB#"›ō‹ =z>õµĒüżŃåŹĒo] p~~eU}Tæä»?EQqć7®śā‹/Rs ?z÷€Ī›ĪŃUgJ³]9ž9ęÆ@NŃiIt›“ЪæT@u¾Ęüœ?’µéŁ[n¹el“Nļ±|Åŗ«²³³’Ł•ĻŅØ½³Ź* 5­ĒDDäŖ8%O䂾łę›ĶQQQßĖd2-xzzž ­€ššš ’żGĢĻqss3ųūūļ÷÷÷ßb±½Mhhhéu„R)õÄ Īņ÷÷ßŌ¢ļÕŅ„KKGżo’żuuuaėׯ÷ļāĒѬĮ"¢ŽEEq„£AD]SUU%___CGĒ:+’·+++GĒÄÄ|™™łŒ£ĒCDdģäNäĀ\9X™ČdlÓ@D½抈ČŃ.Óó.B"ź=ų…FDešĮEQī豣 9š)`±„ õ XDäP‚ p‹ˆz,"r(Atk°ˆØwį9” W°ˆØ7į9š©Õk°ˆØ×`Ą""‡2«ĮbĄ"¢^ƒ‹ˆŗÅڵkcl9®³K„õõõ²·Žz+ü†FDŌķ°ˆØ[|üńĒWĶ™3gŽ ‡Ś¼DX__/ėßæ’eeeźKQ÷bĄ"¢n1aĀ„”-[¶ü³£eėįÅpõŅŅŅ?žx¦‡JDdw XDŌ-^xį…T¹\^»eĖ–ÕóēϟÖÖq¦%B“ó}d WyyyóĆĆĆ÷Ų{¬DDöʀEDŻĀ×××ø_Eņ Ö.X°`j‡¶»DXUU%KHHųG^^Ž|6lŲŽn.‘]1`Q·ILLÜ ¢(*~žłēµW_}õŌÖǘ– ƒEĄŖŖŖ’ 8šÉüüüł “É“kÖ¬9ŲĶĆ&"ŗd XDŌmīŗė®=DEQłć?>Ūz&KńāĆßGĆÕ?ņóóē™žóóó;”œœ¬éęa]2,"ź6K–,)óōō¼ČŃć "¢ĪWx{{£±±mēåå‚€źźjTVVŚcč]¦P(777hµZTTT ®®Ī¦sįååFƒŠŠ hµŚN½·»»; jjjŗ2t"ŗ 0`¹°ääd̜9¾¾¾ŅsµµµŲ¾};Ž9bq¼»»;–/_Fƒ?žńńń˜?¾tžńćĒńŻwßµ8§OŸ>˜5k"##!‚ō|YYvķŚ…cĒŽµ8~łņåpww‡N§Ć|`5ģyxx`ٲe€/æüUUUV?ßĶ7ß ///¤§§cėÖ­ŒĮjƌ5jŠ–_aååå8vģvķŚeõ}GŒI“&ĮĻĻOzNEddd`Ɔ (++³8gīܹˆŠŠĀʍQVV†E‹!!!ŠŲ؈W^yĘźų‰čņŀEä¢F˜˜‹ē½¼¼°`ĮØÕj¤¤¤“xM.—#<<0pą@,^¼r¹\z½ućŅ”C‡āꫯn¬L±hŃ"„„„`Ė–-Ņ󍍍ˆ‹‹DDD //ĻāÜ~żśIćčßæ?}śH322”””RøŖ­­Å¶mŪPTTµZ€€$%%Y}æ#FHįŖ¦¦;vģ@~~><<<0eŹDGGĆĆĆ3gĪÄ7ß|cõĻküųńĖ娩©AFFŌjµĶK’DtłaĄ"rQz½Ÿ|ņI‹P”™™‰eĖ–!..r¹£F’–ÖZ“ĖåŲ¼y³Å,—É“iÓ “ļƒŁ¼y3öķŪ'½–››‹ŠŠ Ģ›7O:Ö°ŅÓÓ„ćāāā°{÷ī׿śõƒ(Š}ūö…Z­¶Ø’2uŖÆ­­EII €–”kėÖ­-f¶222pųša‹Ļ”P(0}śt€F£Į{ļ½×"tfggcåŹ• ÄĄńÓO?Y­E“ĖåČĪĪʧŸ~Śéš-"ŗüš.B"uüųńį 0ÖmŪ¶MśŁ“ÄfMQQQ›įJ­V£’ž€ŹŹJģßæßā˜C‡IĮ'<<žžž€ŠŠ ©>::Ś¢N*<<žžžČÉÉASSär9śõėgq}S˜2Ķ^Ę2kõRÖÄĒĒĆÓÓ°gĻ‹½¦¦&8p “ÉŚŻ‚hƆ WDd,"e>Sd.//µµµ€‹€c~\[¢££„ڬ3gĪ“yWāɓ'„DZ±±Ņć .0Ī™Ļ:Ķ˃EEE(--`\&4§R© eĄjhh›jø:b2Ļž=kõ˜üü|é±)(¶¦×ėQTTdÓ{1`õB¦ B‹;ęl,=.,,ló8ó`$=n½LhΰJJJ¤°„„i9¢¢¢¤ŸMa ²²²¤ĒÓ¦M³iĆ됐€Į`hsÖĖ<ø™Ļ’uk°ˆz!Ó xzzJ3E¶2oūP__oÓū˜¹ŒŒ ©ĘŹ|fĖĶĶ QQQŒu\ƒC† »»;śōéƒĢĢLĶ˃-–ōŠ‹‹‘––†¤¤$ø¹¹ałņåŲ¼y3>Üę,[@@母Ɔ ³zŒZ­nó3uQ/dŠ”Je§ĻW©TŅcóŁöާõ9ˆˆˆ@xx8ÜŻŻŃŠŠ€~żśAŌŌŌ   µµµRKLL”–ifŹ|yŠäūᅦ""" T*1oŽ< 6 _żµÕꧦq¹»»cžüł~v¶] "{ą!Q/ŌŌŌ$=6_z³•y(k/p˜ßm×:ș–öLw Ķ˃¦Zؚši™ŃTT/“ɤY.óåAóń¼’žūŲ»wÆ4k‰;ļ¼Ób9R©MÆ×£¢¢¢Ć’µÕւˆØ38ƒEŌ ™‡®Üõ¦Óé¤Ēę3S­™æf~` G'N`¬Ć:}ś“EĄŒEō‘‘‘@pp0”J%T*DQ”f“ZÓėõŲ²e NŸ>  $$īīīX²d >ųą)“‰¢½^¹\ŽŖŖ*¼öŚkūƒ "ź"Ī`õB¦¶@ז¼ĢC™››[›Ē™„·ī•““#…®ˆˆĄĖĖ MMM-f¦Īœ9#=Ž•ī,))鰑gnn.Ö­[‡ŌŌTĘ»[/š>‹łŸ QwcĄ"ź…g‚Ś IDATplķeĪ|Ė63­õ6;:NŗėĻĻĻ”””ŒuUę³]ÅÅÅØØØ„……Ic·¶}ŗK×ČĪĪ– Č `u³g ¹0€Õz)óYؤ¤$ˆ¢h5`„„„0£ŠŠP †=Æla¾j>SeŽ“«­6 DDöʀEŌ‹ųūūcŹ”),gu:£¾¾ŁŁŁŒĖ{£G¶8¦OŸ>Ņ]{………V—" „:*¢¦¦Ę⸜œ444@”PĄĒĒłłłmīŲóŽń¦%GĄ8;fŗÖąĮƒ­nĖp ‘ˆģ‹w¹ØńćĒC­V£““z½‘‘‘˜2eŠTxž’’‚ņņņ._ēĪX¾|9`Μ9pssCjj* āćć1kÖ,ifkūöķm^'##ÉÉÉZ“›3 8{ö,†*cͰaĆ0vģX8pŁŁŁØ©©——’““1räHĘÖęŪi4ģŪ·S¦L X²d vķŚ…““4éüųųx\qÅ8pąöģŁÓÉ?)""K XD.ļ[yDD"""¬—ššŠ­[·^Ņ{]øp)))7nd2¦M›†iÓ¦Y—’’Ņę¦ė˜V{Ē9s¦Ć€•œœŒ   Ģ;ןė¢(bƆ Šėõ-žß¹s'"##¹\Ž©S§bźŌ©ē:”‹ˆģ‚‹Č…œXDDäҰȱ¹4,r:Üģ™ˆˆ\9nöLDD®Ž‹œk°ˆˆČ„1`‘Ó1ŪģŁŃC!""ź,rF¬Į"""—Ę€EĪȰ ķEDD䤰Čéš.B""ru XätL‹›=‘«āæ`äŒ8ƒEDD.‹œ¹4,r:l4JDD®Ž‹œg°ˆˆČ„1`‘Óį]„DDäź°Čq«""ri Xät̶ŹaĄ"""—Ä€EΈK„DDäҰČé°‹ˆˆ\ ŠāGĀź ŽŌX½÷VGƒ.ŻߝJ;_įŁæŸ_żĶ‹J=žĖĀ=ńGŸ>ītō8œMÅłūļõ5ż="WųöŸåe»§¬ĀѰƒ®4XŌUOwō8čŅŻø @@ŌU;v0— ƒ®ō˜£Ēą”t•#D}ŻHGƒČ%55J„£Gį0\"$"""²3,"""";cĄ""""²3,"""";cĄ""""²3,"""";cĄ""""²3,"""";cĄ""""²3,"""";ė5[åm 9łõO‚ŌV+)Ó ¾Ačé A°<ę÷Ų¾·E(B‚Ü0t ?&Œ ‚Z-os Å„lŲ– Yµ€č\1<CśY=¾¶N‡²ŠFųx+įļ«‚N/bóoø]ƒ?5¦OEXˆ{gžˆˆˆŗÖe¦Ŗ¦ #ÆÜøqa Žų×h«Ē=“ś6lĶ» ysĀŅ6°ź±X’K®Õsż|TųjŻ$ Oöoń¼Į ā…·OćåuihŅYī’¹`V$ŽZ;n­ĀŁwsšĄ“‡1oF$^zr®_¹ ĒOUJÆæµv ®ŸßdžOODDŌ3øDHöĢk'[„«Š`7D„ŗC&3†°Śŗ&ÄDyZœ÷ÄóĒńܛ§¤pe:ĻäĒ-yxģé£m¾ļ¾#„ø’‡[„+œd}ꋈˆČQ8ƒE¢7ˆųäė €—§ß¼;#‡“Zö)ÅѓšSµ8oĻĮ¼żÉ9Ę%Ē·Ÿƒ1ĆƒÓ-÷īEy„Ÿ­ĻĽw$".ĘĖā½Ė*±q[>šĆ]Ėąć„Ä©sUˆõīĪLDDŌi XŌ)ł… جÖĪŽ’ĀØT2L‚ÉcC,Ī{īĶS„B†’¾>|„×ʎĀæ†»;ƒAÄĻ[ópĻķ‰Vß?±Ÿ6|2 īnĘeÄ«¦GŲķ³Ł —©StfµS¦Ó‘āR R—fM k®L̊”jÆ+oóZw,égóū9 uJH›Tš¾yGźtž“røƒ;<Čź1jµį뱊K5m^+œw ‘ `Ą¢NńōP`ź„P@N~=’q'Ź+µķžs&½ZzÜ?ΧĶćü}u[ÕµMv)‘ć°‹:mõĆCrØuõ::VŽ)‹·ąédžbįģ(«Ē7HŸūŽśä¬ÕćL}±Ōję~""rm XŌiżć|šÅ›ńĒGö”ØDƒ‚āÜžą>,žWž ÷–­źź›—o»¾ŹÄ×[Õį1DDDΌ‹ŗdÜØ ģüvYó;~Ųlģ‰õ톤«ĘwļOF s‡xN”/æ.VZ lKR|ŪˈDDD®€‹ŗ,Š_÷_‹MŪóńŠź#(*ŃąŌ¹*ÜńŠ>|÷Ži{÷껞–^‹QCŚø"QļĄb—Ė˜N/v| ®œĶŸOGTø`÷lŪS(½n¾äWRÖö‚DDD½ÖeF©hžæ¼¶®ķ»õÄNfÆČ0<ū·įŅĻ›wHcū4o›“[Pß¹ ¹ ¬ĖŒ»Łr]Uµõ€Õ Ńc’‘RégS«ŽL"- ę6ß9˜l¶WąŽ}ŝ.‘KbĄŗĢČe‚T€~ņl•ÕeĀ·?9×¢·US“Įāk4śļc2zX ōž[vą|fM—ĘNDDä*°.C¦»ōjj›°Ż¬V 0.ķ=÷Ę©Ļ5j[¬­» ”·2«õłś,iiqPbóv8r™€?\ĄøYōī³Ś­=æØ·åwž9ŽExš?3{–V<²·ŻŲŃ8’ZŽ/0†¤ŸGžł; UÕZų ÕO«ĀwķFL”'ęL Gß>^Šé Ųw¤›¶ė®Ōj9–,źŪā=Wݚ€Æ~ŹBN~=Nž­Ā¤k¶ąź9Qˆõ†®É€Ć©åŲø=ŽžJLbŃK‹ˆģėŻOĻ£A£GXˆnXćčįø„žw{—bįģHĢ›éčᐓćæb—”[®‹Å‡’»€3éÕØ­Óįµ÷Ļ“xżĮ;ą7ÄįĆÆ. õt%r źŪĒ šĆ/ʞWY¹uX÷éy‹k+2ü{õHDGx“xŽĻG…ĻޘˆļŚ…ü¢”U4āż/Ņ-Ī÷ V øTƒ¾Ń^öśøDdÅ oŸFYE#F `Ą²Į¾#„xhõĄś9Ųżżl$Äz;xTä̰.Cjµß0k^NÅ¦ß PVŃw’}ń§Ū1wF`Õś#åp)<=š’šÜs{"żÕŲ¼£ĒNUHµZžjL‚ūž˜„d³åAs|°ćŪYxćóųqKrņź m2ĄĻG…”ƒü0f$n\c1{•ē[..1FGzZ»4Q·ŹĪ«“ė "2sj°Ø] X—© 5^]3  m2@„“,Ē»~~\?æO‹ē<=X±4+–Ę0¶shj2@„²­œĻßW…ĒļKĘć÷%·ūŽęʎĀŲA6]ŸˆØ-é™5HKÆīŅņŽä+B膒2 būxį ~'Q°ØĆ€ÓA€ĶįŹŽļMDd«é7üŠć§*1ylH—VXˆ;nøٵHˆó†›ZŽńItYcĄ""¢^ļ܅Koćå©Ąą~H¶i """²;Ī`QkŅpųX9ҳk”׹ļ§Fb?oōóéš\½AÄŁō•6@µ”‰ż|ąė­ģ‘·O«5ąą±2däŌĀ  Ę€x_ÄÅšĪčĖ I¶ī.čwķ,æ./?9Ņźq/¼}k_?‰QC°éÓéVł-„×­ŲųęŻÉ˜2.Dzž¾æF^”厤QįųĒCƒq͕ѯÕ7čšĀŪ§ń鷙(«h“x}Ų ,že×ĘĀĒK‰=Kpõm;Z³s_1‚’æ–~žģ-_̰:~‹ėĻŚ€Ü‚z JōŎofY¼¾q[>Z}Äj#å¾Ń^xśĻC1gjøMļE®‹ˆˆ$ćFA„’A«5`gJŪ{‡nŪmÜāHjŠK5 r³8ęĄļeŒ7Ā\1"pś\5–ži/ͶÖ2—[Pj+ū¤–U4bį­;p&½ŗĶ1=Y£'+0t ?&ŒnūCvƒĆĒĖqūƒūФ³¾µXfN-źt=:&r,,""’xø+0zh ö,AV^²rėÕ²’\E•‡—0n’ĖŽ,æ6ÖāZū.n?zh tׯŗOĻIįjłµ±øE‚ŌČÉÆGjZ%¾Żƒ«¦GX\ėŽ‡öIį*!֏žß@$'ś”¶N‡³Ŗ±īæēqģTE‹sb¢<ńăϼvM:būxµkh°e0ģŠ7?:+…«•Ėp×- š÷U!;æĒNV`ż¦\̜f—÷"ץ€EDųźūS‘o|4ģVÓϵ‚ Ų¶Ėw+^^^u‚ XŸžč€··wƒJ„źŅÆłŽŽŽwwwmĒGZņńńŃśłłi<<<ō+W®,ģųŒŽmźųPi;­)ER£_“ßRŠ 7ˆP«åhlŌć—ß,–N/āŠ1c›<6DzžČÅ`ęē£ĀóOŒ€BnÜ>)ŽIń>½÷`ĆÖ|ģ>`OB¬7~ł|:|¼šė­†'ū£“¼Ń"`E…{ąŽ;Ļæu M: :¢ł9{2ĪČ0¬ytd7¼˜ą‹ ¾Ū‡QļĒ€EDųeū…˜cĒNßąčq8šR©,Z¹rå\GĆѦŒ ĮÓÆļÜWl°¶ķ.Ģž†·äaGJ4zø»5÷†J=])-‰Mŗ¢9`ÕÖŸ PKįŖ#Ÿ­Ļ”ÆżėšįŹYŌ]ü\Įj)\Ńåmˆ¾ŽźF77·<ó’)Šr¹\^Ż•’ ‚`YDC.cč ųł7xßu ƒ(½&ŠĄ¶=ĘI¾…s¢ =v¤µø†iyŠĖSįÉžŅó!Ę%¹ģÜŗŪĻ“E§±}ÆńŚ‘aR”¼³ ¾ų¹Ī¤W£“ܲŸ.?œĮ""¼øfÖį÷>żżGŅŅŅŌ¹¹¹ź®œ[RR¢,,,ģRQM}}½¢¾¾Žł¦F@.0éŠ`üø%e8y¦Jj°y"­E%ČefO— ā7m/Ą•Óšk§ö_ XćFC©hž]~Ś„P!g/T£A£Ē’U»ńÅ[čß„æĘŌK0`‘SIJJjLJJā€ƒMŠ·ävī/–Ö֋wŽO®„]ū‹±yg 2™QlžĮštEĖ»łī\æĪ@aqNŸ«Ę웶ᙿĆü™Ö·ÆÉĢižåŠvŽ^R÷ܞˆ/ČBE•æŸØĄģ›¶įŁĒ‡³°ż2Ę%B""²0Õl)Ī|łoėÅåĮŁSŒżœLwü—jp$ÕXd~!«FZ&›<6“Åuż|TųāĶ »8kUP܀[ļOĮ­÷§ ¦Öre¹¶®ł9_ē` vƧoLf­²ņźpÓŻ»±ź/Ń éŅ=äā°ˆˆČBßh/ÄDŪ3¤.…Vk@um5Ž-7ūbĆĢ+Ķgnś-°ļb’«@5&XvfONņĆ®ļfįź‹5\šÓÆy˜yÓ6dęŌ¶8¶Į¬_–ŅÉ7‡3,»¾›…™“›g­ž÷c®¼yņ‹82rēžŪJDD3e¼qö©A£Ē”ćeŲ¹ÆM:śDzb`‚/ O¤'%oŚn X..NÜęuž¾*¼÷āX|üźx©+=³×ÆÜŻ¢!§ZÕ|g¢µ.gä†/ޜˆwžƒ ćlÖɳUXr÷nh›ŗŌł„\Y5ŬUjZ%5ĪL™–MęN7ÖO„ÆFy„'ĪT&_ŃńsgD`ū×3‘œd¬ńŹČ®Å›“^7ożPUćüĖäŚy}°ķ«™ˆļė Ą²>üߏŠzY5éŠi*'Æ§ĪƒSėżō®œÖüó‰“JœĻ¬‘Ī·EP€½:NŗŪšū_r¤×Ģ;­[ŪćĻ™E„ŗćż—ĒBø8‰÷Ć/¹Žõ(,""²*ĄO…!ļĢίÉ3UšņT`ĀØ–wąČ0ĄÆ» QWÆCTøāblæė/&ŅSź—•‘mżĪĮ£'*,Ī31ļÕÕѶĆģf`‚/ūėŠ2Z՗QļʀE— QŠJ48‘V‰c§*[P½_Źƒˆģ¼:;UŌӕ:×ō޹õ8vŖĒOU"'æ:}ÓYŃÖęÄ&SĘė°/GI™SĒ…B„jłO‡ 4Ļj}·Ń8ūdėģ•9S»^/JA((@-۟Ϭ‘–[ŪŃĪĘŌ€qEĄ1u\¦Ļ„ÓńæłĖ ū`Ł(=³w>z€ń‹äŃU;<ē‰ēKūy}öĘiŖ{ĪĶŪŗüŚšd¼šÄĄ®żÅxņÅTĄkO’ŠNm%ŠĄņ{÷¢ ØūūāµŽjńśwsšśgÜ= EAWRP܀W’s?’š‡‚ā–wņø©å˜<6·\kõó„ÆĘ«’IĆ¦ß ,¾˜U*F ĄÜéX~m,¼­lߑžYƒWß3¾wėś•R†”ż1wF–] _•>-‘mLµMEˆ"¤e¬Ö¦Ž Į«’ICQ‰qy®õņ ÉUÓ#šžéŅc­ū_™7 ,ŲŻāżŠJ48~ŗėÕāõ™“ĆšŽēé€'_8Ž/ߙ¹Yńü¶=EŲ¹æż€čÆFYE#.dÕB§­nÓ³ļp)VžłźtxīļĆqĶ•Ńķ^Ó\~Q"B-¦fåÖI›TĒ÷uŽ>^d X6jŠč„DX¹ķؚŒœZéó»GŽŸŖģš·Ę¶˜÷©¬n’®’ŅŪ§ńŸĒvźZæī*īśQY¹ż¹ÄlóŌ²Ź.ķ”ėp_ż”GÖAmõżƒ5zlŽQ€äD?‹€õłśL<“ś“Zė’_iµģ;\Š}‡K1ØæŸÅė7åāO;M£õ8Ś&+ĆĮceˆ‹ń¼Ö-u‡ˆPwäŌ£¤Lƒg^;‰ŃĆšū‰ ps“ćDZ%Žüš¬ōrķ<Ė¬©÷bĄr€!ż¬Ī`7HEœ±}¼¬nh×Ēśo@?lÉƙōji­ß’~’ŒĶĒŗ¢Æ~ŹĘ’żõ ōÅėē£ĀÕWF!©Ÿ(-oÄésÕųuw”E8:’ZŽūž8,;0Į3&…!:Ār™€Ā ŽŖĄo)EōScb«ßÖÓĪWćīĒHA:!Ö³§„£O¤'” ćł'ĪTbėī"xøÉ1k’õ“ˆŗĖča8pń®Ą—֝–ž_ŗøÆTOjµcGaūŽ"Œ µhM„”aęÄ0|·) ±ŽV·æ9u® §ĻgsžxžøÕė\1<«žŠæÅsń}½ńųżÉxź%挿ö½EŅž„€qkŸń£‚±÷PI›ŸwīŒHlŪc<ēÓļ2ńéw™Ņkw.‹ĒŲAhllžeŖ­_Œ¬Ł¤¹õČ-ØĒѓÖėĦµŲ4›z7,ųå³éVŸ’ē«'šŹ»i€gž2¬S[, "^Z—†wžcÓń•!åP©Ķ×w5Y¹uxąĶiįģ(¼ōäi[sÕµM-n€æwF:wќ(¼óü-~«7)«hÄłĢZ‹×^’ąŒ®fO Ē‡ÆŒ³:KXUӄSgŖ,jZˆŗŪCw @fN~ŽjÜGŒŪßX+Ÿ:>Ū÷IĶEŪrå“p|·)§ĶŁ«Č0<ŗj ÖoŹÅŁ Õ-^ ōWć×ĒᔕIV’{øēöDD„ŗć…·Oć\Fō|B¬7Ö<2g.T·°–]‹#©åųņū,©~2ĄO…+§E ųbh¼n~ģ9hÜÜzé5±ķ~Vs qŽøE¾’%Ł- ŁC‚ÜšĒ›ūįžŪ­.KRļŀՋ¬ß˜ƒGļ€~ū®“ēßļõīŁ«?’ėwé7Š™“Āšī Ö«3…».Ösø©åxį#Ś<7Š_muC×]ū_ōr™€Wži5\€Æ·ćFuüˆģĢĒK‰^‡Źj-ŠK5ˆ 󀧇õ–_‹‰c‚ŪĘ ŗÉ¼™‘Ųśæ-fĄĢłz+ń誁xtÕ@T×6!· Z­Žž Äöńj³)©ÉµóśąŚy}P\ŖAY…ž*„k[M³q€õz2…\Ąæ×ŒĀSAQ‰”ĮnuKÆé‹)cCŠŲØ·ś=ŚŲF¹@ æß—ŒĒļKFE•łE hj2Ą×[‰¾Ń^mÖ·QļĘ€Õ ųūŖ PČPR¦ĮKėŅšĘæF·{ü™ōjlŚž¹L@|¬·T€Ł[œĻ¬ĮÖ]ĘżŅÜŌr¼ōäČ6’5 ½TŽæŸ·ÕYÆöļV4śĘD{J’9#?U‡Ē}¼”:ŠæĆk¹©å6gŗfgoĢ1 r³ųļŖ¤¼¹G–·gŪ{śūŖŚ½”$*Üz8š— [ĻxwęśtłąŗD/PUӄ錷Rós¶Å^^­½žĮYˆ"0vdŌjĒ’ØoŠįū_r­NÆwŧßfJĖĖ®µzgO{ä2AśÓ¼&£S×øŲ0±«ēQēdē5÷Ī “^'v)“MŌ×o–ńņpŽM§É*³< IDATy8ž_Wŗdƒ(m3”ӋxåŻ¶—’ņ ėńõOŁ€³"QZÖŲ#clOIY#īxhīxhŸT„z)¶ģ,/2ŪLÖV*•LZö;ŸQƒō̚ĪhI ųęÕ#õā­ēDŌ=ŠK5H9l¬) v³Z`©~?Q!ÕnÅD{ŚżśŌū0`õ}£<įåi\ńżņ‡¬æĶ™{ūćshŅ Ę»jJ+°ģ©A£Ē¹ Ę@ä锥˜į]ŗŽéVt½AÄC«tŗ­Ę¬ÉĘDxxĶ‘NŻ‘DD–R•āū_r-6L.)Óą®Ē4·B˜k’VšF=Ö¾~RśyÄą»æõ> X½DeµKõ`ģĢüŖ•"öŠ*->ž:€1@ų©ŚģńäŖNœ©”~ĖLŠ÷é°h¶-¼¹ŸT·µū@ V<¼I·Ż'¶>^Ž[ļOA}ƒõ^\DŌ±·?9‡;ڇ„ ?ąŹ„ŪpķŠ˜½d†ĢŲ€ūŒ7„ŗįŽ;ķś¾ßnČĮ ©?I7¾xz(p•‹6]¦žÅ€ÕKˆ"š§ŪśK’Øž]¦Ō0Ļä½ĻÓQw±†ąŽŪ{|O®ž_ŲÜ©=!¶ć»)Ū2t ?ī6ėÅóÓÆyøśö¦méēƒW~žuW!ęŻņ[‡õqDdIoqźœq‹œŗz+ĒŽ”bI-—f—ūõõĘ7’™ŌfŸ®®*.ÓH7½°ę‘!šc;uŒwvAy„VźpŽžŖźžŻó*2Ģ7-ź‹æŗm“’~ļ žżŪpĘ„³w?==4cG”AÓū–­jꚒĢ;{÷_k ٵRŸ CĒŹ1żś­xkķ馂ö<“rŅ3kšÕŚ·Ōӕ˜qĆV¼žōh\5æŁJ.°’§9Ų} {–ąBv-Ŗkš TŹźŽ‰c‚1wFd·ō™ŠńĘĢIa rĆõ b0qŒõ-€ˆZcĄź‚Ķ; °yGAĒ:Ą}LÄgßf@§ńßo3ńĄŠ$„…øćÓo3Pv±ŽŹŽS蝑v¾’ū1«Åsę{ōmܖo1K4rH€ĶŪČŌŌ6/ƙ6wķ*¹LĄ{/Åź—RńęGĘ=Ė*qÓŻ»ńĄŠ$<śŪm’ Ą’čO¼üīiˆ¢ń³Žrß^Ü}Küżd(œD&²…L&`ņŲLŪłM¤/ÅĢÉa˜9Łö¦ĻD& X½LL¤'®›ß_|Ÿ…ĘF=>ł&Ü=Ÿ\¬½źēÓęf­=įBVm»MNK)Āo)-ļ$¼õ†8›–y”=ŗ£+äV?2ƒ}ńŠSĘbuƒAċļœĘŁ ÕxēŁ+Ś}™LĄ_ļ„A‰¾ø÷ļ‡PWƃ(o~tg3ŖńĮKćŚķ©CDD®‰« F ĒE1÷Žé8y¦ŖFŌŅż+’šÕŁŠDlŚ^€„‹c„ś…?ŻÖæĖ…ß®ĄĆ¬µ=—@o\ƒ!üńLJ÷IYܒ¹ģŽ}al‡šÆž…A‰¾ųćĆūq"ĶŲ¶įם…øżĮ}ųļėć;Õ•ˆˆœVōėėeÓ¦[v:$`Å÷õĘĀ9QųncŽŸ®Ą'_g@½™®›ļŲŻÜēΈ@é‰ėZ<—•[‡‘Wn<ū·įøcIæ._ßĖ,`™ śķe@‚~żrxņ°ŌKlż/¹1ä¬Åę“ÖÄ÷õĘ/ŸNĆcĻ•f·ģ,Ą‹oŸĘ£«Śu¬DDäX,鄼sĮxwį«ļ7¾ė–„6÷Äė-¼Ķö,(jhēČ®qw“ć­gĘąÖšö³oœBI™¦³š©Õr¼üäHüé¶ę:øWž“†œ|ŪīN$""׊»’µ½Œ Hš‘ź–“Z㦣°aÖĶՙoF{öB÷ģ±(ĄŚæ Ēč”Ę&¦uõ:|³!§S×xādLg,ÖÕj ųņ‡¬Ī ""WĀ€Õ‹™f±ą¶›śIŽ{³ž±ŽŅyŁµØ¬ÖvĖū(ä¾»¹Ļ՞ƒ%:_&ščŖA]>ŸˆˆœV/6d fN ‡Z-ĒKć=œ”RɐļĄø/斝…Żö^£†6oĆSXÜłåČįÉžRq{WĪ'""ēŀÕĖ=żē”ųšå± rsōPڤPˆ‰ņDL”'|¼/}—ś¹fM?;ÆNźŪՕó‰ˆČyq‹z„Xļ[ŃÜó·C8}Īžļļž÷¼ōxĀčĪoŸaŚŗØ«ē‘óbĄ"›”•7"+·®Ć’iµGšŌCC¤ėÕµMøjŁ6|üՅŽć|’łģ<>_Ÿ)='ŠĄÕ·ķĄ›žEM­å~’•ÕZüż¹cųäc/+?®_вńģMwļĘ+例ŲȤ¦¶ Oæzor€qKŸ„‹ū^ŹĒ%""'Ć%B²Éź—S±śåŌūå³é9$ FŌ¾ø/|šŅ8Üz štŌÖéšąSG°śå”č‹ 5ŠĖ4H=]‰Ś:ʏ ʒE}Ž–aĻA㦲«_NÅĄD_„»C.“_s5RPąłæ‡ÆYķŲɳUųuW!~ŻUˆg^;‰¤D„z@©[PsjZt™ś±”tŽ9""ź<,źµęL ĒWė&įĮ§ćBV-ć쓵–ŚęĄsźl%d2ƒ^ÄńS•8ŽJ‹s¼½”xń‰øęŖčϟH«„B.@§”7ˆ8y¦ŹjGw79žłė0,[{©•ˆˆœ –ĀBÜńă›xŚāʅ1R3J?ŸŽļŽ›>!>;‘'Äzwxü€iLƒżm“9…BĪ ±œA¹bx ōŗ­"Ü«X{ā˜`ģśv~ޚŪņ‘–^…’²FØUrØ1(ŃWNĄl³ °o»±¦O ĆæäāŠ±rœ½Pŗz4zųśØŠÆÆ& ĮĶ‹ūĀĻGeńž7.ŒĮÄ1Įųžāłiēē×7čąē«B\/LŒ„‹ū"Š_Ż“DDŌCQG8zöP“óģTmõ”="W$w}Ł/ī¹’:zΦ"ķÖu}ŻHGƒČö’h4”ĪQ˜ė,r'"""²3,"""";cĄ""""²3,"""";cĄ""""²3,"""";ė5}°dJ’2Aīāčq¹"¹Ü?ßŃcpF‚Üū„™ÖŃć rIŹŽū?öf½¦‘³ą!9nøa|Ÿ>}ž–””t·£ĒBDDt)zĶ!¹¾“““¤œœœÅnnnYŽrōxˆˆˆŗŠ3Xä4DQ@G…ˆˆč’0`‘Ó0,—ķŽUDDŌ;0`‘Ó0 X¢CBDDt‰°Č™0`QÆĄ€EĪ„5XDDŌ+0`‘Óą!õ XäLL3X XDDäҰČi Ņ̓ XDDäҰșp‹ˆˆz,r&¦æ XDDäҰČi°Čˆˆz ,r¢(å*,""ri XäL8ƒEDD½9 nöLDD½Ö’³wēaQ•oĄæ,ƒģŒ"0ˆb* "ø”¤äB å®‘[ż\ŅĢ2·W-+·2·²ŒČ}Ķ½ĢŻ\pĻwńąEepÅ꿃ę0s`Fü~®ĖĖ3Ļy–{Īįö9gĪCʄ3XDDT%0Į"c¢N°ņŠ­EDDdä˜`‘ŃČĖĖć U L°Č˜˜€©)?–DDōbćo22&œĮ""¢* &XDDT%0Į"£ĮމˆØŖ`‚Eʄ3XDDT%0Į"cb &&&L°ˆˆč…Ę‹Œ{&"¢Ŗ‚  .öLDDU,2&źµ™`Ń   .öLDDU,2&¼‹ˆˆŖ&XdLøŲ3U L°Čhš[„DDTU0Į"£”N°øŲ3½čų›ŒŒ g°ˆ ģŃ£GfQQQ֕Ńˆ &XD„ąāā2ߏŹj—££ćOŗöϚ5«ž««ėž–-[žšńńVŃńUEnnn3­¬¬vI„Ņ• 7&Xd4ų Q¢ŅÉĢĢtŹŹŹrĖĢĢtÖµćʍo*•ŹL¢££G¤„„ńg~eeeÕĢŹŹrĖŹŹ’Uv,dÜųŒ g°ˆ ČÖÖ6U½-‘HRų ]#—‘‘ĮßĖU„ye@¤¦ń Q&XD°~żśm½zõrP(²ŠŠŠĶ•‰ėܹó›W®\ ’H$÷ļß’¢²ć”²c‚EĘDż?7&XDąé陳ø²ć ’?~|Rnn®½³³óįŹŽ… ƒS‘d4Ō÷`q‹ˆˆ^tL°Č˜š,¢Ō­[·,bbbŖUvŗ<==GĖd²ynnn³ ߀iŻØQ£1–––{4hpĘĖĖė“……Å!—ł3gĪō(m¼3gĪōPĒ5|ųp?]uĀĀĀÜŌuś÷ļßFs߄ >¾ŗ:Žųųųć.®g§Qē<€³ķk&%%eddČŗuėöxß¾}óT*•ęååY&&&v;vlĄ£G†M›6-®p’wļŽ•ųłłĶ}ųšaĶņģģl뤤¤b³Zµj-MKKk^ø<77×>%%E¶f͚wīÜłņšįĆĄ½{÷¬ÕļEM©Tŗ$%%¹Ø_[YY„jī_¾|¹Ė˜1c–ggg»jē˜””4}śō€ŒŒŒ”³gϾU\¬Tž8ƒEʄ3XD <<<ŅÜÜü ¤¤¤“·ŠU﫯¾j«R©$ąććsH]ž‘‘aśŃG-P'WNNNGCBB>ķŁ³ē—C——gµtéŅ/Ė’Ż•žžŽp’žżÓLLLž5jŌhUĻž='|cii™ä'< ,˜„T*‹üo. ąSur%‘H7jŌhu@@Ą7^^^+lmm’.n\GGĒė`eeļźźŗÆI“&‹›6męäätōæ*&'Nœ˜¤¾¤ēęę–įāāįāāabb¢üoĢ$u™‹‹K„››[Œŗ’““4Ó &|§N®œ‡„„LéŃ£ĒDggē#’½7ė°°0~ Ńp‹Œ†ĘMī|VQ9’Éd9®®®GzåęęZ?Žūöķ' ×»zõj ˜šš>›={ö uy=‚ ESšššŲšĻ?’,Ōhv¼V­Z9<蚞žī5nÜ8ļ~ų”ŲÄÄŠT*•E^^žŁŠ”C?X¹r„0 ¶{÷īĆoæżöĘģģl—ōōtļįƇ7_·n]”z’Ų±c'$$ōKKĖ;k×®śX½_©T.qrrZž––¦óņ姟~ŗ!66vļüłó‹ĢŚÕ­[÷Ė„„„^999óęĶk²zõźØ<0`Ą077?š››+©^½śµÄÄÄ)ŗśļٳē›ééé^Š Aƒµ7oŽüQc÷1™L6/)))H”P4żōÓOĪ;÷f)g°Č˜š1 D¤}ūöÕŪżõW§ĀūÓŅŅL“““Ū€££ć)’ õ¾‹/össó'{÷ī /Üöƒ>X„Ž>~üx‘KfĮÅÅ%B3¹€īŻ»Ė[“h±\żśĢ™3ķ5÷oß¾½7ž›IļŪ·ļĶä $‰ŹĢĢ,[lĢ#F$éJ® C‡ūŌŪwīÜqŃU§$—.]R÷Ē\Rx’{ļ½'÷£GVŹq§L°Čhh”«|ҤIĒšßā>|詹/11±=T«VķŽśõėĻ2__ß$õvZZš““ķ###­Ÿ•H$*°““nÖĻĪζk+&,,ĢmõźÕayyyÖTNNNĒüüü5mŚ4ŽĶĶ-żäɓõ¶oß¾$I©,‰D"÷Ö­[’zšąĮż„ķƒ*,2&|LQūńĒÆ®^½śAvv¶kbbbĖ““4Ó'Ož4Š^;;;įŅSjjjņŠKó 솖••% į^+[[[!ÉĢĢ,õ ā .ō_r…×^{ķė?’üs‡ęžŒŒ óķŪ·ĢĶĶsutQ,[[[įø?~üøÜŽ;æEHF#//’žLĪ`U‰D¢ŖS§Ī!xśōé«óēĻ÷ČĖĖ«fjjš5o޼"õńń¹«Ž–ĖåĻõ<'1ęęę9źķ§OŸ–zI{÷īuČĪĪv{{{a9™ęĶ› QHOOwÖ£+­ēɤ¤¤ų€D"ytōčѝÅ5”H$9Åķ×ÅŪŪ[8ī©©©=īT>˜`‘1į=XD• [·nüožżśėÆ]ü˃¾¾¾™…ėŽ1āŽ©©i&$%%µ6dĀ,RFF†ĪY¤£G ‹Sk,Æ·… ¾†’~÷½ņŹ+ƒHœhjjś ’““EĄV*•6——§õūóٳgR ’į«źĖŽb,,,D,±™»aÆūć3ōq§ņĮ‹Œ 4JōT*•εõõż÷ß_WÆÓßüüüŠ\ww÷gŽŽŽ‘™™éP–±5łłł —ģ’““= ļßææ}ttō õ뜜œR½ļ““4ÓsēĪ ņ—äśä“O„÷čąągooČ_pyüųń^…Ū‡‡‡×R(’{©õ`VssóLČĪĪvUÆ5Øi÷īŻBR¤T*Ķ ļ777śß>[]±7iŅ$«FĄÓ§O<˜I–‘c‚Eʄ3XD„ ‘HžĄ³gĻ\¢¢¢ŹtIķ•W^9J„ŅŃŌŌ4sīܹŠÕ}ć7¶Ŗ·wģŲ1}śōéõ ×?~¼Wi“ÆŠŠŠGęęęiščŃ£Öæ’ž»pÆŃ©S§l 4G©T:©×+U*•¢÷ß½{·Žęk„RiҼyó éééžP«V­=ƒ Ņś&^Ɔ Ø·WÆ^=I3QЉ‰©öå—_~’~oŖ¶ŖęąąpČōC÷īŻGk.$Ż«WÆ×’śėÆńź×ŁŁŁE0õ£# E#ĶÅ·ÓŅŅ„ßӁ[ŌŪ[·n1kÖ¬z…ū;vlćžżūūė<(T”x“;&XD„`cc“ųųńcäååYtīÜł'GGĒčĒ7LMMż “}õīŻūąÜ¹s‡€““Ó)]—Õ6lŲq$99¹“R©¬łõ×_Æ_¼xńéš5kŽR*•)))>iiiͬ¬¬žMKK;ėąą ×C/%‰ŹĶĶķŠæ’žŪ/77×vąĄæŌ­[÷€J„2MHH蜝]ĖĮĮįbõźÕcćććC333ÄśŗtéŅøźÕ«·wqq¹÷īŻ HOOoōß8ÉóęĶ+²†āŹ•+w¶lŁņŁŁŁ.iiiĶüüü¶Ō©SēHnnnµ{÷īµĻĪĪv«Y³ęɇ¶ĻĶ͵ĻČČ0µ¶¶Ī€.]ŗü¾f͚&·nŻģąąššMĀÓ§OkgffzX[[’“››k“-S(Ef©ģģģžMOO÷ĪĶ͵÷ńńYįäät1==½VFFF-…B1¶mŪvŹÉÉéÄƇ•J„ĖĢ™37†‡‡’éččųR©“LJJņQ(>ÖÖÖ·322ś«c£ŹĮ,2ź'¹«’wJDÅ 8¤ŽNKKkvūöķr¹¼åīŻ»K½Öݜ9sb­¬¬āĄ××÷PIõ80­f͚@^^žEJJJ‡ėׯæėÖ­÷ŅŅŅ|˜ŲŲŲܽuė–e ]Žc™D"I€ģģlYllģ’nŻŗõnvvv-kkė/^<„I“&‘ P(dÅõ%—Ė[Üøqcč7†Ŗ“+KKĖ»“&MSxö Čæ 7jŌØ’377O€¬¬¬:±±±’»}ūv’ģģl7‡ ‡ś¬Zµj÷U*•éĮƒ…oõźÕQMš4Y‚’žƒ˜™™YļįƇ™™™VVVqsēĪļźźz KHHŲµcĒŽ¬:uźÜ*<īźÕ«£ärłÄ'N„>{ö¬†„„erõźÕoīÓ§Ļcu=’ŒÄÄÄ1={öģ|įĀ…7ŅÓÓėäå婏{t—.]…‡‡_+ķq'Ć3Q©TĶK®FTžŖWƾT.—·tww’5..nneĒCD/–>}ś“S?̳[·nwļŽ}¬’C¢—/’1į=XDDT%0Į"£”¾ L°ˆˆčĒ‹Œ g°ˆˆØJ`‚EĘÄLMł±$"¢æE(ī =©—ŹWÓ¦MńēŸ¢GżōÆģxˆčÅ2|ųpØT>|ųw•Ī‹(@æŹ¢Ŗ`‚EF£aƆČĢĢD:uJ®LDTˆ««+Ž~ūm€››[%GC/;>¦Ag°ˆˆčeĀ,āĶ.DDDDĘ‹ˆˆˆČĄ˜`or Å=äååTvDDDz³¶v‚Db]Ła¼4˜`•Bfęc<{¦Øģ0ˆˆˆJ-##ąąšJ%Gņrą%ĀR`rEDD/:„2³²Cx)0ĮŅ“Rł“²C ""*³ŒŒd(••F•ĒKOĢų‰ˆØŖ`‚Už˜`é)'‡F""Ŗrr8iPޘ`éI„RUvDDD”RåUvU,""""c‚EDDDd`L°ˆˆˆˆ Œ ‘1Į""""20&XDDDDĘ‹ˆˆˆČĄ˜`,""""c‚EDDDd`L°ˆˆˆˆ Œ ‘1Į""""20&}E IDATXDDDDĘ‹ˆˆˆČĄ˜`,""""c‚EDDDd`L°ˆˆˆˆ Œ ‘1Į""""20&XōŅ“Jݵžø»7CĖ–±~żVdeeél3{öw˜3ē{ƒŒ[˜›[ć2÷­6{öwpskl¾ŹBóų½ Ģ+;¢Ź&—Ē æųåņx”<++’÷_ĀÖÖsēN×j“››‹œœƒ«I„RįŁ³g„źKWü@~œ*•ź9#4±÷JDTU™ØTŖę•„‘:ĄLż"-ķßJ …Ź›X‚¢Ž7žLŒłærWטĻÓ ;~cń"ÄHō2qpx„pQ€~•J•ÄK„D%;v&Ož^rE""¢’0Į"*Į믿¦õZģ~"Ͳ÷ß’žžž„¾ļH¬ļ+W¢Ń¼yČdÜ7nÜŅjSøżÅ‹WŠÄTøŽJ„ĀźÕįźź…Zµ¼±{÷ž"ńōź5uź4A«V0kÖüRŻK„nŠ?ż“\“ެYóѶmd2OŒ?±±·EG§N=įźź….]śaŪ¶ŻP©TxżõnØUĖ]ŗōƁGŠō?}ś\“i WW/“iŒää‡%ĘNDTV¼D(Ž—_"Å]¾ŹŹŹ†LÖØČ>]—÷¤RwČdĪųķ·µØWÆ.¶mŪO>łTō²˜Xš±“jÕ ±±·µźnWŅ%N]c„†ö²e?h•µmŪü±ąäō*’“cabb¢×8j117Ѿż›%¶MIy„¶mߥ•+ĀŚŚ——‡ąą>X±āGø»×ÕjŪ·ow¬\ˆˆ8Ž~żž§UvąĄ¼óĪ0”’¤¤“mŒæ’>KKK”ÆV­:aļŽ­pv®)śˆ^¼DX¾8ƒET•*ÆTõūöķ&M¼`ccƒ÷Žė_ę{Žī)3Ä}LƆ .RvķŚß¶R™£• ékɒ5zµ _‡ ɘššbŹ”qX²du‘ś#F¼'l·jåW¤¬ukķ’+†‡ÆĄćĒ©ZÉŒ÷!ĀĆWč’†ˆˆž,¢œd2gdeek•ļŁs””CK=®®žkŌØŽĢĢL­ņE‹–`ōčņMų-BqüįK¢š#ģQ³¦#&L¾}{ĄŅ²Z±õÕ7œ‹•ė;®®§Ėåńøzõolß¾k×nFZŚø»×ĮęĶ«šź«õ„zII)˜2eöī=™ĢēĪEĄŹŹJ«æā⋽WÆĮ8ž"źŌ©ūāĖ/恩©)?¾’ØŪŹdĪčŃ£+.ü¹H’šŻwįŲ³ē¢£Æ£U«ęčŽ½ F*kįņ’Ž’“ispšąÄĒ'ĄŻ½vīܧć'Ŗźų-ĀņÅK,z©‰=Ž”sē@lŪ¶®r‚""ƒa‚U¾x‰ˆJE×ćˆˆH{&"މvķŗ">žŖU«†ęĶ}øŽ ‘ž˜`‘N-Z4ßžQŁa½x‰ˆˆˆČĄ˜`,""""c‚EDDDd`L°ˆˆˆˆ Œ ‘1Į2R¾¾:Ė„R{H„ö:÷Ņ“isŹ} C ŃoaįŹ`̱Qłb‚e„®_æųų;•:ž›o¾Qić—ʁŪ*;QĘ•/&XFčć'cŠ ·‹­#•ŚcĢ+įõøqVšņ²ƒ——’“M“źI„öˆ‰1EķŚvØUĖ7nŚ?žx2Ś“i©s_LĢM¼żöŌ®Ż}ś¼ ©Ō]k‘Ż””Gšņj'§W1vģgHJJш%æī€#Š A Œ9N«ļ’Śž? o ć’“ } >Fō=~öŁ,4k֍µĀ‡NŌ+±6šåQQ—EcKJJś?~*’“jÕ½wļĪcó䉟}6 .. µĘ ""ćÅĖ]øp„Ä$¹ü ĀĀ2II&ŲæßK—fbɒLtīl#$YrłĄŲ±VøqCM›2bƒ;wtŸś¤¤\øpEtܐ~øzõ:nÜ8‡É“Ēž7F<€üä¦S§_€ųųĖ8r䂃ūécƌ)čŃ£+¶nŻ!”éÓvŊuųõ×5Ē ^krņCtīÜ‹‹;w®āžż$Ń÷±xń*|ųįP;¶Ož(„ņābk£Y޹sO±%%„ S§Xŗt!āā.cß¾CEźĪœ9Oē±5j/^…øøKZc‘ń2Q©TĶ+;#u€™śEZŚæ6p’žĆ±yóJūŌ÷_©'šō“ƱcéÉTBWW®_WÆļÜQĄŽ¾`æL¦BLŒ…½óĪ0˜˜˜3¾;bb"!“¹ÆÕ ‚§§?“„׏§ĀĆĆOx­žŃ‘Ėćńģ™ĪĪ JÕ6)é&ŖU³(X…ė©ÉåńĀ믿žöCՋō'æ®6źņ?![k$&& ÆęĢ)žÉż†ņ2Ÿ·ķŪwaūö]čŃ£We‡BDˆ UЧOŸ"::}śōDzz::vģTŁ!U9£FĘ‚ó{©©©3ę#­żŸ}6Ÿ}6¹’¢{¹üöŪV : • U~‹*ŻįĆčÓ§/Ž=hÖ¬&MśųńĒšēŸ'Ģ‚Ø’īŻ»ĄĮĮ DPP0ŅŅŅ0qāxČå\łĪ1eŹgXµj%bb®ćŃ£‡Ā1ŠdzLJ„””}įąą€ļ¾ūR©GŽD`ćʍ9¾£FFĖ–­`jjŠččkų“:¾żv!¤R)""aóꍐĖåZ1ž;w>>>8wī,¾’~a™c)o7n@ƒ 1qā$LŸž%T*•ĪzS§~__?$$$`āÄqB¹ś}ņÉGX°`!n޼uėÖāĆ?ĀÓ§é˜6ķ ”ny/"*Ī`Q„ūūļh4mź#¼ž1ć+ <””}1qā$Ģž=@A"Š»w­Da͚_‹~żzcųš!X½z- z·"߂Qš4i"āćć0uźŲ¾}6mڊwŽ Z_}\“’””}1jŌh¬Yó Ž(śõė .`õźµeŽķĆ?BLĢu¼’žP ö?l޼0zōGX½z­0Ž1X½z]‘ösę|ḆؔT•J…3¦ĮĖĖŪ¶ķ­·bÅ2„†öÅĀ…ß Ÿ{ ą³offŽ#†”iSäää`āÄqZ’vŹė|Qé1Į¢JgccƒōōtįµfņuźŌ-± ¢“^·jÕŚ0Į½ą~ž9’ūß`¬]»–––čß_<ĮRsq‘!%%@Ńć}Ķ qµlŁ W®\^ß»wļærķń4ėT+V,‡‰‰ œœœuīONN;;[8FŁŁŁEö—׳"¢Ņc‚E•ŖcĒNxķµv8~üĄÓÓ ž®ŠY?;;fffØV­šVy“&M…moļʘ7oAłü)œÄŌŖåVlżO>[[;lŪö€üū~Ī;[¤ž·wć2Ēu͚ł ÆŻŻėžśėœV=ŸfeĖŲ<{ö OŸ>EHHW­rOO/ģܙłP"‘ž—!ū/ļX‰^vL°ŒPdd† ł®®^ [„2GŲŠ.. q\«Ķśõ[įčX_«,5UŽI“¦Įٹ:tč®s,©Ō]ųSVC†|?“iŒ°°eBłŖUąļ’ ģܹOg[]ń§¤<‚·w[øø4ÄŲ±Ÿ•æę{ˆŒŒŅ‹>mõ9n%;OŗŹ>€€.hŪ6DÆņŠVų<<|ųXŲ———‡nŻśWZl%™2Å©©O —?ѹ_½vŸŲ~]Äź–¦ē%6Ęó$K/Ńˌ – é‹iÓ&įĮƒėčŃ£+źÕĖ_ĀdŌØ 8}z?’’nāīŻ{5Ŗ`Ł“  ×‘››«ÕĻ®]`Į‚YHNŽÅśõKuŽ%—Ēkż­™h޾|ł\]½ŌKg_Ó¦MĀķŪqöģAōčQ°ĪZ«V~ˆŒŒ@ddj×Ö½ž®ų}}ń÷ßg”t3g~Ŗ³:võµ¾:cѧ­>ĒMMWb*vžÄŹļ޽‡Ó§÷ćĢ™ø{·`y ±ņŠVų<ųś¶öyyłcŊE•[q¤R{¤¦šÉĒÖ­4on‹žż­…:Ēė^-¬uk[89Łałr ”ĢĻĻ..vøtÉLg›ĀZ¶“EĖ–¶Ų²„`]A??[8;ŪįĢ3!.ĶäH*µG`  \]ķqżŗīĻ—/›!0ŠAA6Zu¤R{Œc%l_»f™Ģo¼aƒK—ĢŠ”ƒ BBlpėģUžK3Bry<<<ÜÕ«Kak›ćŌ©H”NēĪÆćōé‚×2™K‘~lllųüżƒšĒχ¦ššˆ=€õÕ1«ćVkŠĄCŲöönس­®ų»wĮŻ»÷”TęąėÆæ³Q£VxåģŪwHg욱čÓ¶¬ĒMģ<‰•wźØU®&V^Ń Ÿ‡nŻBry~üqžĪsg Ō34źæGŽ“¬YŁ Ź)®Nž4ĒŖU™HHP`ļ^ öģ‘ąČs,]š‰ųxfĶŖVl{8rÄ?’œ‰ššL̟_M([ŗ4’ž«Ąœ9}žIZ»6±± Lžl©³ļšp ¬]›‰€€\­:rł„…e ÆĆĀ,pė–ķŪē ,Ģ«Wg" “&Y•?•{6rŻŗõǹs‡‰‰IB¹Lꂤ¤äbŪz{7ĉ{—.]-s,įįßB"1/v6 nßŽĒ! cæłę;X“hLLLšŁg³°{÷&½Ę«[·6Ņӟ¢fĶ\ܾ/”‡„ōŁŪh'R.\FóępįĀ1ŃXōi[Ņq+*:žę,Ղ31fĢ:t ?ż4_«?õ¶Ų Ų‘#'qäČI|÷]øÖž»wļĆŪŪC‡† āßč+’¼yÓѶm’’’1|ų»B]õ7æ`ĒŽõx据P©Tųį‡9čŪ7’[źcX8}Śź{ÜĈ'±ņŸ~Z€/¾˜  ›/ō#V^Ń Ÿ‡Ļ?Ÿ ģ3ę,Ķ›Čåņ'8wĪ žžv˜3'S(Ó¬§ƒ€[Äƚ o߬Y“‰5TšõµÅżū&Ų±#'NżŃ©ŁO§N9hŁŅš’—-”©ūŲ·/ĒŽ™kµÓ5V86Ķŗšū&Mz†  |õU–V]Ķz…Ū7.•{Wå{ [†”CaęĢyX°`Ve‡CdP|Ī“~˜`½¼øŲsłb‚%®Ź'XžžžP*•ø|ł¤šME"*?6ˆ‰1ÅøqĻ0iŅ3ŽE•Š Vłā%Ā—XLLdɕˆČ`NœxZŁ!QįMīDDDDĘ‹ˆˆˆČĄ˜`,""""c‚EDDDd`L°ˆˆˆˆ Œ –ŠŒŒĀ!ĮÕÕ aaĖ TęūŗĄÅ„!""ŽkµYæ~+ėk•„¦Ź1iŅ48;7@‡ŻuŽ%•ŗ ŹjȐąįį‡6m‚VšÄöU«6Ąß?žžAŲ¹sŸĪ¶ŗāOIyoļ¶pqiˆ±c?+1~Ķ÷„3}ŚźsÜJ"vžt•>|]жmˆ^å†Ņ­[­÷­R©°jÕČdąļ¤×ūŃuތIĻžś/ISVb6}žžņ!©D/>&XF($¤/’’Rw Į”)ÓŃŃ1˜1c bc£0zōDDGĒm,Cnn®V?ŽDĖ–~ˆŽ> 77Wc©—61Ä'II)Ų½{Ö¬ ǁG„ņõė·błņEX²d”°tMaŗā>| öļ’ Ń05_ŁV×Zx!!}uĘ¢O[}Ž›š®ÄTģ<‰•ųį̘13g~ŠŃ£' żˆ•——U«6`żś­ˆ‹»„%KāōésÅĘ č>oĘdēΌŹˆ^RL°Œ\?žŲ KĖjŲøq9öķ;čß8‚ƒ;ĀŽŽ‡ļĀļ m._>Y¤ŸįĆ#<|ŗu{:“Ókl±™,©Ō#GŽCzśSL›6Gg?žŲŠĘ=įéŁ@k!ź}ū¶ĄĒ§1üü|pąĄo:ŪźŠæV-LMMabb333­ņ5jŌ Æ¼ā#' ’źŠEŸ¶ĻsÜ4‰'±ņƇw"8ø#‚ƒ;āšįB?båe%—§”iÓ×°gĻf­ņĻ?’ūöm••üü|0dČčbćtŸ7c¢94r¤āāL1mZĮbĻ­ZŁāÜ93\ø`Š>} f»‚ƒmpķšnÜ0EÆ^6ČČ6l°,Ybžżuόi…ōt­1tÅgŠōt“mk‹įĆóŪ̜Y­¬o—ˆŒ,#·wļA„†ö$&& å2™‹Ök]݄֮ššXŗō{üņĖ–2Ē2nÜ(ŲŚŚ`̘‘%ÖŻ»÷ °}óę?Āv\œžK…‡/@“&prziiė„u颽’ĆŃ£»pćĘ9|õÕ·X·nsįn“bѧmY›Ųy+—É\“ŹKŚ.«O>łŻ»w)R^·®›Ö¹züX^lÜ/šqć²QÆ^ƌy&”ĶŸŸ‰Ö­sѼy&OĪŹĆĆ3ѤI.5ŹĆO?eĀŚXøŠgϚį·ß$X½Z÷ĢŲøqٰµUi”K½zy°µUįśuSLœ˜ßę“OŠoCD/.•cÄ¢¢.ĆŪ» č @ū—lbbR‰ætżu5,-ó’'­9s¤ž„»,ØR©`bb„2IĮGÄŪŪąääXl_-ZtÄŖUaĀėÓ§Ļįż÷?••>žx„ŠOI6l%ō«łK}’ž‚÷¢9ī‘#;P·nS¼÷^ŃXōi+vÜō%vžÄŹ“P§Ž›ŽŪeµk×€Ÿ^ ’Źåń8{ö–-[‹ąą>hŌØš6õ.6ī·wĄÉ)O(kŃB÷¶«kĮµkē—ļŻū}ūZcćĘLXYé?†¾qUÆĪu ‰ŖĪ`)•J…Ļ?’͚5Ź^{Ķ_Ų>räZŪĒõė7…mĶ™‰Ā÷i²³³Å£G©’µ¹Ubœš}©T*,Z“Ū¶­ÕŠū­·‚qīÜa?¾ Ez‰}Ŗ©T%’ĀѼ¤yóę?ps«%¼Ö‹>mŎ›¾ÄĪ“Xł‘#'“ŹKŚ.«Ā÷©’®QĆo½ŒÄÄ8~|zöģZlÜUATTĮĄčhSņ¢—¤G²Ę÷ßgaäH+deUHxDōc‚e„ź×oŽźÕėįģŁæ“¾į¶dÉB“i gēpu•aɒ…BuͤįĪ»Ā·÷¢¢.‹Ž§9Kušą6ōļ? o!77W«?Ķ1tŻ«U½z=LŸ>¾¾ZūžNNÆbņäéčÓ§›ĪtÅõźŸšńi—†ųńĒ‚o†„ō¶wģXŗu›¢N&øu+—.å'"õė7׋>mõ=nbÄĪ“Xy­Z®hÓ&mŚĆÕU&ō#Vn(…ł/æ,ĮąĮĄĖ« &OžŽqć>,6n]}ĶūƤR{įµęöƒfšõµE»v6ČČ0ʟ<1A@€-4°ÅØQVJķqģ˜d2ĢĶUÉģ‹Œ”łZsŒyó²ąįa‡_~‘čüv`į6ü!QÕ`¢R©šŽ§ó IDATWvFźįæ±iiśß;ō¢ [†”CaęĢyX°`Ve‡CdP/z¢"—?)¹Q88¼Rø(@?Ué90ĮWå,OO(•J\¾|¶¶6•U &Xå‹7¹æÄbb"+;""¢*‰÷`,""""c‚EDDDd`L°ˆˆˆˆ Œ ‘1Į""""20&XDT%UōSŃłv"ŅÄĖI„īčŚ5YYŁčÖ­?&LųƒƒāÉ6l‰čč”M³fķ‹,Wҵk(¶lŁŽ””G4hd±ćB×®”ˆŽŽALL,ŗu+Xp¹S§žør%/^A`ą[:ŪźŠæGøsē.ž=Sbüų©„Š]*u׋>mõ=nb}ˆ'±ņ† [āąĮ£8xš(6l)ō#V^V+W®G§N=‘™™‰‹Æąōés:ßˈc…ņčč˜"ŸĒ•+×欕hdff"0š-”cQŃOBē“׉H,#>––Õ¾[·īæ“MppGŲŪŪaźŌ  [.Ō?pą·"}ōļßļ¼ÓNNŽ˜7o†^ćźZ{P½}łņ5øŗz!(ؗhĢ{ĀÓ³ĀĆå‹́OcųłłąūļæŃŁVWüQQ—Q·nmXXH0}ś½āפ+}<ĻqÓ$vžÄŹ?’|"‚ƒ;"8ø#¦N ō#V^VĖ–­Į¢Es`ee??üōS~{ölźäååaŌØaĀėʍ=‹|—-[ŸĘ°²²Ā÷ß#ōclŌ3KII&Čɲ²“g›āāLQƞ\]ķqśtž³—7m²€ŸŸ-Ś··Į™3fJķgЬįźjŠPėĒmŁŅ-[ŚbˉPęēg gg;”OĶŗNNvZu5ć?sĘ ĪĪvšó³Õ*æ|Ł ®®öø~½ąGł¦Mpv¶Cūö6œU#ŖDL°Œ\wĄéÓē0lŲ`Ą¶m»„:ƒ…ā÷ß ^Ėd.Eśłķ·]øzõo\ŗtŽx®84I$ęxšą:6mZ©³¾:fuÜj*•JŲ¶²Ŗ¦³­®ųļܹ",,=iŅ4”¼Kķ•ī߀¬¬,“m‚uė6‰]3}Ś–õø‰'±ņßÖ*W+/+•J„uN< h×®PÖ«×`“hŃ @Ńc©ž<>Æź~Œ\žŻŗ)įā¢Ā¬Y–˜1Ć?’œ…īŻ•€öķm§ĄƒOÉrqńb:Nž| +«ü>Ś··Į¤IYxšą ¶nĶ(vĢ7ߓʳóé8>ŽŽłĒé­·¬qńb:’“°²*Z7%E!Ō-ĢŹ HNVąāÅttėVÜI$*hŌØš6õÖŚ’É'Ÿ¢cĒöEŚž<ž={­[wʝ;w6æH?Ęä石påŠöķ3‡…°~½ žž;p÷®ēĻ›aĻ ź×ĻÅ»ļ*Ń¢EžŠÖÓ3WØ3fXbĆsÄʦkĶi&2ׯ ˘¢uėüö’]P¦īS¬našõ5ūńöĪS”0öiĘND•‡3XFJ„RįóĻæF³fM„²×^ó¶9€€ÖÅöqżśMaūęĶ„m¹<^4¹²³³Å£G©’µ¹Ubœš}©T*,Z“Ū¶­ÕŠū­·‚qīÜa?¾ Ez‰}ŖiΐˆŃ¼Œyóę?ps«%¼Ö‹>mŎ›¾ÄĪ“Xł‘#'“ŹKŚ.«5<šÖ[ĮHL¼ćĒ÷ gĻ®ZūwļŽ’żOū¾µE‹–ł<ÖØįsē#1ńŠō"ż{{&O¶DĒŽ9čŲ1žž¹°·/ų|µl™‹3²0}z~bUš£ńņe3­¾fĢČĀīŻł3Xrłį&/Ƃ„诿ņŪ{{”iö©«naW®h&Uŗ“0õ>ĶŲ‰Øņš_¢Ŗ_æ9ŖWƇ³g’.‘Ą’% ѦM0œĄÕU†%K mŌu4“†;wīĀß?žžAˆŠŗ,:žę,ÕĮƒŪŠæ’0¾…ÜÜ\÷diʤ©zõz˜>}.|}µöüœœ^ÅäÉÓѧO71芒źÕ?įćÓ.. ńćĖ„ņ¾ĀöŽėQ·nSŌ©Ó·nÅįŅ„üD¤~żę:cѧ­¾ĒMŒŲy+ÆUĖmŚ£M›`øŗŹ„~ÄŹĖź—_–`šąąåÕ“'OĒøq ūrrr°oßŌØQ](SĖŸĒ_~Y'§WįåÕ}śtÓźĒ¾÷čĀSL›–/¾ČĀāřBłžżęÉģQƞŽĶæ¬öą|}mѱ£ ĢĢ źuķjƒzõģ0kVŃKݚćķŪ—!܃•’’?»“wo|}óļĮ23Ģ͵ė:9Ł u Ē.‘ĪĪvšõµÅž=—'5ėI„öŲ»7ä߯ձ£0U<•JÕ¼²ƒ0Rē’mLKū·C) E:ģģlįćÓW®üYŁį„ü›ą {Ł-.Ī}ūZćĀ…’gt„Rūē¾Ŗys[½Ę —“ƒĆ+…‹āōÓQ•žg°^b­ZuFżśĶqśōŹ…ČØlßnŽĄ@ųųŲbÓ¦¢ßģ{^6pv¶Ć¦MDF>Õ»]i¾ ø}»9œķąćc[Ŗ1ˆČ°8ƒ%®ŹĻ`ŃĖ‹3Xå‹3XDDDDĘ‹ˆˆˆČĄ˜`,""""c‚EDDDd`L°ˆˆˆˆ Œ UIR©}©žUV½zŁTŲXDdü˜`!©Ō]»†"++ŻŗõĒ„ Ÿ¢£cpšąQųžūot¶ÕTŌeŌ­[LŸ>EÆų5éŠEĻsÜ4‰'±ņĻ?ŸˆąąŽS'żˆ•—†ę9QŽŌ喖Õt”/@µjÉ\š÷ß7ŠūE”žÉJJ2AN•„=»•æŽ\]ķqśtžā}›6YĄĻĻķŪŪąĢ3H„öˆ‹3ŀÖpuµGhصĪqŌż©ė©ū#¢—,#$—ĒĆĆĆpśō9 6°mŪ.”Ī A”ųż÷‚×2™K‘~~ūm®^ż—.]ÅĄ#ž+M‰9<øŽM›V꬯ŽY·šJ„¶­¬Š.’ čŽ’Ī+ĀāĀ“&MŹ»tŃ~Ššżū••…¶mC°nŻę"±kĘ¢OŪ²7±ó$V>pąŪZåjbå„”yNԟ#ĶĻWįņśõė Ē“bŪĪ›7M›zĆ×·)~üqn™ciŠąU@͚5Š­wūv</^%¼7n*®^ż×®]Ē”)3õo޼E8{öoąŃ£ĒB¹fĀ&—Ē£V-WXZZ"<|>~ųaI±±čÓ¶¤ć¦N@Ō3|šŪŗˆ§’ĪŸ!ݾÆós¤«<99§Nķǜ9ßėģKwIĒŽ˜tļžŸč:dŽĆ‡Ķ±k—¹PöÓO™hÓĘsē$’-Z,īÜøqžPoÄkĢ[ wčŌ¬GD//&XFJ„R”K—·qāÄ^ŲŪŪśöķ!ģßøńWōīŻ­Ų>²³Ÿ Ūśž2·³³ÅƇłÉŒę=^@ž Vq}©T*,Z“¦¦¦8qbÆP¾vķĻhŚŌMšx•³¦+~§gXZVĆĻ?+”8°MŲÖLlĢĢ̐—Wš‹QW,ś“-éøÉåńĀĶ×jbēI¬|ćĘ_µŹKŚ. Ķs¢ž©Ė»ty[«\*uĒæ’&ĄĀB‚ʍ=±|łŗbć.īŲ›wŽQ¢K“k—ƒąą(•@hhž VÆ^98{6Ÿ~š ücUš£ńĀS”^TT~½ ń ,­zźžˆčåĆĖ%&&£oß÷°gĻ&æČ>śč}DD‡B‘Žo¾Yˆ?.žņÕĉ_āņåkør%cĒ~¦×Ų͚5ĮāÅ+?žø“Tq÷ķūžĻqÓ$vžÄŹæłf!""Ž#"ā8¾łf”ŠXyihžõēHóó„YcĘLAvö3ÄĘŽF]‹Š}üŒÕٳfčŲ1;ꗁü{§22ņļĶņšČO?żŌ ēĻ›įāE3,XPMØ·e‹YYĄÕ«fBYašõŌżŃĖĒD„R5Æģ ŒŌ9fźii’Vb(åC”H‡-||ŚįŹ•?+;"£”|ɉR͚öxų°bæ¹HTÆ.ŠŠOGUzüŠĖKl͚:tBB:Uv(DW‘ĻĄ*n̊~\Ī`‰«ņ3XDDōņā Vłā=XDDDDĘ‹ˆˆˆČĄ˜`,""""c‚EDDDd`L°ˆˆˆˆ Œ ‘Jó\­Ņ>ƒ«W/›Ņ†CDFŽ –ŠŒŒĀ!ĮÕÕ aaĖ TęūŗĄÅ„!""ŽkµYæ~+ėk•„¦Ź1iŅ48;7@‡ŻuŽUxįā²2ä#xxų”M›`„…-ŹW­Ś’ ųūaēĪ}EŚEFFĮĆĆÆČū½pį2<=[ĆŁ¹ÖR9…ézļšļK콉Õ{„!vžt•>|]жmˆ^å†Ņ­[’"Ēęšįpqiˆ¶mC„2•J’ ČdŠœæI“¦ĮŪ»-:tčŽ={č5ī_ĢFLLl™ć7f„}øØę"äDT50Į2B!!}1mŚ$@ĆĀB0ujLMM1wīt^½Ŗķ•cll„øøę<9yo U¦OŸCCEų|]\œpóf©’MµrŲm‹»¶čG¾qā³——W sēēµ>~\.]ʁc‹6ŲŁŁ*Õ#×7cĘįé9 %%„ˆ]ŚŚ{€ēžSĢīõčńJJŌ?Ę433Ć{ļĶŕ+ׁß~K‡—× „ūéI “\#åą`ŅŅˆDš×B͚eŠaĆī#)©Ž·ŒP(ĄĖČH}ņėOø[‚Š14ƒ„‡”—ߘ1’»{Oø»÷b’˜ÄÄĶHM=…ššZųų„ 1q³Ś8o!+ė2²³sĘŲU×±2ÄŸ|ņ9Š‹K0wn¤F­ģXcĘüƒĢĢ_ąīŽ‹)sśōY9’„ٳ§bŪ¶DĪö~üqL‹öŠÅ]‘Ÿ X°ąC¦¼ææv{‘®YóŽ}w–’ķ+wÅÕ«…H†O?żŸŚvh ß8ńŁ}|Bšz ©©§”Ö·ńŁÕugņ7ĆĒ'55µHM=Åč{ī99’„Üܳض-?ż$›ܶķ+de]†D"A@@>ūl©Ęŗ­¬žC’žīųūļ;(+«Ąœ9šļ1]“PŒ !$ąÓOŪaōh3$$ŌcäHsH$@y¹£GĖÖVeŽóē…ČĪfö}‡T 46wļ °d‰b‹]64Ōō‰·‹ ż‚f°ō—_öĒķŪw`eõ’’ŻĶĶÓ§ūāśõ"$$lBÆ^.Ģ5vR"’Ąœ7ļm̘1šöŪ“yėcĻRÅÄD!"b~žł$6lX­O~Ģ7vāÄiœ8q_|§t½“ō/øŗz`ņäńųžū–ߏ“·Wī'ē‡vĄ×7M˜?&cWżĘWŪ`Ė–X°`¶RY¶ļžż 5źuH„R|łå*„†¾Ŗ¶ŚĀ7N|ö bšŃGŸbcW3qųģŗBµßÜÜ\±aC ŗwļ ‡n8w.°cG<\]=`ee…³g“ab"K*^~Ł>(..ĮŖUĖšß’ŽÕŗn+«ē ™£¤¤TsįG„ėU b±%ŖŖŖįå%BA””÷±m[=ž{NŠ>j@ēĪ‹„HO—ĶŅĶ›×ˆiÓL™™-±Ųæ’^‹wß5——‹I˜˜ģ²«W7š¾ŖA^^~]>›Ę.ϾNÄæT*ķ×Ö"ō” Ģ[’łēFJibc7aņäńˆŠŠFL̊¶–C:åiIPö•”-ķŪ·ų†u픋Ÿ§>Įrvö@SS²²N3ßÜ#‚ ž (Įj]čį3L~~ŗęBAA<4“ȝ ‚ BĒP‚EA”c(Į"‚ ‚Š1”`AAčJ°‚ ‚ t %XAA:†,=$==“&́½½ bc7”©é>sĶĖ˶¶NHM=„䓐„Ž»+ŁīŽ­BdäRŲŲ8bŲ°W9ėRŻøųq˜4iśĀÓÓ±±Š7¶oŻś=<<|ąįįƒ޶šKOĻ„ƒCßķ½p! Ī΃`c戈ˆE¼õrµŻ.¾¶ń•įkĒĆĄ7N\öćĒÓąååĮƒż“²ėŠąąš}süxlm0x°c“J„ššš]ć¹®®ƒ1lŲ«8|8Y«z?śčSäē<¶ž'Ķ£¾øTÕļiy*Aź”Kńó EEE%ŠŠ.!9ł-ZČĶĶĒņå‹PP‰Ł³"77Ÿń‰‰‰Ess³Rœqćf`Ą€¾ČĶ=‡ēŸ·ē¬Ku?ŗĒ”¢¢‡ķĶmqHN>ĮŲ’°yó:ÄĒÆi± kļ”C;[“wĈװwļvܼ™‹öķł?”øŚ.oSUU1V­āß#Ou_>uķą‚+yć'>ū¬Y °|ł"DE-ĘģŁ ™8|öÖ"77³f-@AA&¢¢3ś¶nż›7ÆCQŃ%|ńEΜÉŌ××cĄ€¾HK;‚ēŸ·Ē„ oóĘfoQµæžz+V¬n•Ä‘ B 7¹ó£orÆ®®Į A#‘ŸŸ7·—‘“óąęĶ?ō²³eŹŖīÅ·wļA¬_’50mŚDLŸ>‘³®ż¹Ź„……`͚O±zõz¬XńFŻ––‰DĀģ_W__SSžpŁķ•#‘H0oŽųśėµ¼~|ŗśég¬]»))?pśŲŚZC"iĄĘ_ 0p”Śvh[/ß8ńŁoŽü;?ĻŲ5?.UU’`čŠ@ääü¦¤ßĶķe=šÄŌÓ»÷dg’ ;;g”—Ė’­śśzø»ŵkē1lŲ«xšą®]+ÄĒˆiÓž@Ą[ļ¹sæ#9ł–-柍Ō5b±%.^¬…µµcĒšāŠ”:œ>mˆ¤xé„f„‡›cŚ“F“o/ÅĒ·ĆĮƒ÷pㆠ„nĀĄ"ÄÅÕĆŠPŠ#DJū–—W#!ĮÓ¦526®mmTķ\š¢- 7¹·.4ƒ„ē9’‚°°×ååŒŻĪĪV霋ķŪw".._½;vģ~l-óēĻ„HdŽˆˆĖ9’Ā_»ös\T¤>Qe·Ö®Ż;;g˜™)’2ķ’7nü3gNįõżå—ƒøz5ü9¾ūn—Śvh ß8ńŁķģl•ģšŽ—wŽYŒW_õēŌĶ®G®ÆKEbWTtwīT ®#..ÅÅYŲ±c7¶lŁ”¶Ž£GS1K—®BEE„.š¢Żŗ=€H$Å„K²’/EG£WÆf˜˜6ŌcĆcDG#.®&&@°aƒ1`õźz Ԍ~ż(ŬŖŖ†‰ 0iR£N4ńōA –“™™W×Ģl‘ź‡Ÿ¦Ż={¾…››+śōqCrņ^Ę®iĶ•üq{ķøŗ:¬­;ŖÕæ’pøŗö`ĪĻœÉĄ A#ńŹ+ĮČͽŹ[Æj{ąŻwg”ŖŖ ĪelĒŽķårēdųš”3&˜Ó·ŖŖ:ŁĆÄÄ'NģĒĀ…©m‡¶šŸxisüø<ų¾śźfÜä’Ŗ&ķr}ēĪżŒAƒFĀĪ®rsÆĀĶĶ`ff77W˜˜˜ 9y/–.]„¶Ž+>ĄƒR¼öZ lm­ńŪoéJ[›šŁģŚ•+Фę…ąŲ±{ørE{{…–cĒīś÷WN¬Ąßߟ}Ö`Ø²Ł˜¼9MMü3y\š‚xś KO‘J„ųšĆOąīŽ‹±½ü²s|āD¼¼©‘—w9fĻ"©®9bca!ĀķŪw’ß§P£Nv,©TŠuėā±oßv%ŻAA¾ČČ8ŽS§£¦¦–3Īŗuń-ŚĖN܌5jQåĪ»ųļĆyƳć_»öž¾“Śvh ß8ńŁOœHS²k:~\Tםɒ}łe„z䶞{ĪĒQ^~55µxķµĄ€ŠÕ×®ż_쬱n+«ēšĒEX½z=RR~AYY¹ŽZ„=½zµ\Æ×«W323[Ī&ef¶ü™-Äܹ²™«†E‚da!ÅķŪ²ņ׮џV‚xÖ”æzH÷īżŠ”C7œ;÷»Ņ Q|üxzśĀĘĘöövˆ_ĆųØĪF@II)óķ½ĢĢ,ŽśŒŒ’tūäU IDAT OIهšš)šöBss³R~ :u²‡#<=}};vÄĆŚś%øøxb̘`̟? °sēfxxųĄÖÖ ™™Y8wN»Ē©aa!x’żw0xš@̘ń®ĪŪ%‡ėŪzb±%¬ƒ——ÖÖ˜9Ówīpš`Ŗ«°¶¶€££wīȧ²2!śōaČsĘ’Ō©Z„‡›ĀÅÅ;w2õ¤¤ÜCxø)¼½ĶŃܬØ?:Z ģŲaÄ«‰ ˆ§ZäĪ^,roMbc7aņäńˆŠŠFL̊¶–C:åߔøp-Ž'ˆÖ†¹·.”`ńóŌ'XĪĪhjjBVÖiˆDęm-‡ ‚x‚P‚Õŗj.B<­äē§·µ‚ ‚x*”5XAA:†,‚ ‚ C AA„Ž”‹ ‚ BĒP‚EA”c(Į"‚ ‚Š1”`A<={ŠŠ”CŪ¼Ģ4)É:Xņ¾L5$DńęłÖ|{<_|‚ (ĮŅKÄā®ƒDŅ€ąąp,Xš! 77))æ ŗŗNN››Ļųø»m±­K@@vļž••·1~ü µõ邀€0äęę#?æĮĮŠ=GŒx ŁŁ¹øx1ŽŽAœ¾\śG‡’’R466įŻw—<”v±ø+§m|µķ7¾|ćÄgwr€””_’ņ œœ0qųģOÕq ™@¹ķ7nÅōéóŚHaې›[‹»wŪę ģ3f˜āīŻjŽ7Ąļß/Ū¬śaß’°É½ž ų”KO‰‹[ “vˆ‹‹ARŅ~²­m|}‡ĆŅŅK–,@lģf¦|rņŽ1ĀĆ_Ē[o½kėŽˆŽ^®U½\{Ź³².ĆŽŽ>>!¼š{öt†³³#āābūŗu«Š»wOōķŪk×®äōåҟ™™….]^€±±–-[¤•~6\Z“įQś ß8ńŁ?üp!|}‡Ć×w8–,YĄÄį³?iTĒįüł‹€Ć‡w1e6mŚŽ™3§“•DNä³+C‡šĆĘĘ»v1× ķEø{·ĢVTd€±cĶ`oo‰°03%¾ öµ]»Œ`mmDJe¼½Ķae„šļŪW œ=+TŠ«ŖGSŻģ“’ŒšĀ 7kQFYYBŲŪ["/Ļ E܈S¦žaĆĢagg‰ü|\ŗ$ó),¤‚Šż–č!UUÅppč 8s&S¦Čf öķ;Ȕ?> ?ü 8·³³mgļŽƒČɹ‚K—r0nÜōGŅĮĘČČeeyŲ¹óĪņrĶrŻr¤R)sljŚŽÓ—KII6³łsdäRĘīﯼ“Ć_•A"‘`š`?|÷Ż®ŚŁZ“ń}Ü~ć'>ūøqo*ŁåšŁŸ4ŖćpćF6`ČO¦Ģ’ž‰žżŻŪJ"'ņٕӧļįÖ­XYIl†Ą@3œ?_‹ŹŹtģ(EP†5Gd¤eeÕHJŖcüå?\±å?f°µ}€ŹŹœ?_‹  E¢“–v’-ó 2Ćŋµøu«¦¦ŠXŖz“©›żoXXJKkP÷Pżcd$EYY5|}Ķ[荭gĪOž¼‡ņņjxzŠ`l,ó1‚¶Ö"MŠV9zLff\]{`ģŲPŹIHyygRĀfĻžoabb@y†H>3„š@ɑJ„hjŗ##Å-āźź °¶īØ6V’žĆ±uk,s~ęL¦M{¦¦¦˜;w:GNN™øååŒżŲ1E[Ųõž8±]ŗøaāDÅ#AU-Śųņõ›¶šŸ½¼¼;?Æõń“FuzōˆĀĀ ĢõwŽYŒõė?kmĆ AĶørEV¾Aƒš‘—'Dii `łr|’½! j[ųĖgxT“ž¼k‡Å‹`ųĶ]]eškjķS]­½A<«Š –ž"•Jńį‡ŸĄŻ½c{łeęųĉ4xy R#/ļs|ķŚĢqUU1orea!ĀķŪw’ß§P£Nv,©TŠuėā±oßv%ŻAA¾ČČ8ŽS§£¦¦åģ™/>Ų1Æ]ūĻ?߉9ēŅ¢/_æi ß8ńŁOœHS²k:~ŅØŽĆƒŠó;wīāŠ”cOZŅ#ńūļBøŗ6ĆÅ„YÉĘ>_¾\‚C‡øg‚ųf”\\š‘™i tĪ…««Āž•„HŖTõØ«›«ž¹s ”ō„>A –ҽ{?tčŠ ēĪżĪ<š€ųų5šōō…#ģķķæ†ń‘—a' %%„ššš‡‡23³xėcĻR„¤ģCxųx{”¹¹™sM[›ŗaŁ²ĻŠ§·Ņõ ކµõKx’że3&˜S—žœœ_Ń»÷ŲŚ:ażśMŒŻĻ/”9Žæ?]ŗø”sē^(,,Ā„K²D¤{÷~œZ“ńÕ¶ßųą'>{§Nöšōō…§§/ģķķ˜8|ö'ź8ääüŹ\2$Gīn3mŚ0|øl Ve„‡×įčŃ:fĶSe„GŽŌįŲ1C˜£[7 ¬X”xŒŻµ«,ZÄdƑ:z“̬#Gø“#GźŠ§l –PfĘIU6u³’ 7…‹‹vī4TšéR]Ć„ŗ.‹ėZt“Ų±ĆHć·é„”T*ķ×Ö"ō” Ģ'’łēFJijjjaa!BļŽCż«f‚ų—![źå7݊Š j† “ŸŃ%]Ó¾ż‹Ŗ¦"op%Zƒõ 3pąH455!+ėt[K!£³+ŽŽęČĻ7ĄüłHOæ×Ör‚hE(Įz†ÉĻOok ŃjčćĢUZ%Uń¬@k°‚ ‚ t %XAA:†,‚ ‚ C AA„Ž”‹ ‚ BĒP‚EA”c(Į"‚xzö”Cżxז¦·Ŗėņ­ėśų~1‚ŠG(ĮŅCÄā®ƒDŅ€ąąp,Xš! 77))æ ŗŗNN››Ļųø»m±}M@@vļž••·1~ü µõ邀€0äęę#?æĮĮŠ —GŒx ŁŁ¹øx1ŽŽAœ¾\śG‡’’R466įŻw—<”v±ø+§m|µķ7¾|ćÄgwr€””_’ņ œœ0qųģ­Éśõ_·h“ŗ>~–ÉĶ­ÅŻ»śń®-MļüŅå;Įōńżb”P‚„§ÄÅ­†‰I;ÄÅÅ )i? 6v|}‡ĆŅŅK–,@lģf¦|rņŽ1ĀĆ_Ē[o½kėŽˆŽ^®U½\{Ź³².ĆŽŽ>>!¼š{öt†³³#āābūŗu«Š»wOōķŪk×®äōåҟ™™….]^€±±–-[¤•~6\Z“įQś ß8ńŁ?üp!|}‡Ć×w8–,YĄÄį³·&‰‰ūžH=Oł¬ĶŠ”²½wķ2b®É÷žŪ½[f+*2ĄŲ±f°··DX˜™’?ߞ|ģk»v1{²Ėx{›ĆŹJįß·Æl/³g…JqUõØ«›Æ>Umyy-’¼{{›ĆŽ^qMµ±Ų—/ 1l˜9F’½u~Ų0™Oa!}\ÄĆ@æ1zHUU1ŗĪœÉĄ”)ūödʌ†~PœŪŁŁ¶ˆ³wļAää\Į„K97nś#é`cddˆ²²<ģÜł gy¹f¹n9R©”965m.øō—”d3KGF.eģžžŹ[eżõW$ öĆwßķj”­EßĒķ7¾qā³÷¦’]Ÿ½59w.…ÓĪÕOźģś€|¦åōé{øu«VVR›!0Š ēĻ×¢²²;Jd†”CĶ)AYY5’’źłWlłO` lm ²²ēĻ×"(Ȍ)—–v’-ó 2Ćŋµøu«¦¦ŠXŖz4Õ­®¾4„§g3ŖŖŖįāņ …oZŚ=”•UĆ×ל³žŖŖjHqņä=ģŁSOONž”łŒažPżOĻ:”`é97nÅ{ļĶå¼&ŌśFG/ƒ››+śōqĆśõŸ=¶GĒ—VVĻ©-wżz16nÜŹœĻŸæ99Wpłr-ŠŅŗ¾čču8wīg”—_ÅķŪw;;a«Ŗ*F§Nö011A\Üj|łe¼Z-Śųjź7yŅ'ŸįcsĮ7NšĘO_ąė'M}Æo ،Ü\!ņņ„J¶+W„Ų°”Ó§›į³ĻŚ”¤äįž,ęå Ńææ"™¹rEČYŽmļŁSQ^UĻćŌ÷ᇦس§NcŒšž{ĻŃQö;"K•ģÕÕ’Žū• ōJ°ō©T ’7‘–v––€ŠŠŃĢõÄÄ=xżõ`µ1™cm?Ģ-,DųūoY2Ć^ćČf°ŌŒJ„X·.HK;ĀŲ·o’ nn®čÕĖE£f6[¶ģ€³³#LLŚį«Æ>gģÉɊĒXģÄF(āĮÅ—m|5õ[UU1óĆ>—Ć7N|öÄÄ=JvMĒO¾~R×÷śČłóBōģŁ —f%›«k3BBī#3³‹7 Ns~¢„‹K323J]]¹“$¶żĀEyU=S_zz-||o¦ÉČHŖ¹A”K)/æ…ŠŠ‰8|x'Åٜ9Ӑšz 55µX¹r ęĪU’ųjįĀ’!+ė2²³s1oŽZÕķīŽ 7~ƒāā¬_’õCé ˆźźtķŚEɾxq*+oc÷ī•“i"0p®]ū ˆˆP¬ĮR}Ģwõj!$’Ģ›÷fĻž @և\Z“ń}”~cĆ7N|ö•+× 5õRSOaåŹ5L>{[ĄÕOźģśÄŋBŌ׋› 2²ļ½×ˆóē…Ø«“Ł.l„Xl‰Ż» ‘99Š$§°ŠŁŁź“ž÷ŽkÄāŦث~’]ˆ… 9Ė-\(«·¾ˆ‰i§äĻÖ£©nuõYXH±}{ņók¬4”M ‚xxR©“_[‹ŠS20užłēFJijjjaa!BļŽCżk[Ė!#[źå·ŽŠŠ j† jŪZ ń Ó¾ż‹Ŗ¦"op%ƶ@“Ū¶%bņäńšóŃÖRBē°æ§Æč³6MčcāJśĶ`ńóŌĻ`AĻ.4ƒÕŗŠ,‚ ‚ C AA„Ž”‹ ‚ BĒP‚EA”c(Į"‚ ‚Š1”`AAčJ°‚ ž0!!­»qrR’zö©}Ļ–\W]¾Ÿėßü®/‚x(ĮŅCŅÓ31iŅŲŪ» 6vššī3×¼¼üakė„ŌŌSJ> IčŲ±»’ķīŻ*DF.…#† {•³.Ս‹‡I“ęĄĮ”/<=}»‰±oŻś=<<|ąįįƒŽrśr鯬¼ W×Į°µuāŻ²†­ŸŻ†ōōLN-ŚųjÓošą'.ūńćišņņĒąĮ~Zٟ4ņ¾T½UūĻŚś„6Óųoƒ½éø*ŗHH-2Įžżuj_ŖNƒ._"J/$%žU(ĮŅCüüB±ti$ŹŹņ0ztŗus̜¹gĪCEÅ5”–ž‰™32>>>Æ ¹Yy“ŁƒBLĢ ÜŗU€„ī}ŁŹųŖge]†½½ ||B8c-]‰ė×/āܹŒĄŲģ‹ōōT¤§§ā…žēōåŅß§7®\9‹ŠŠkˆŠZĢé'×®ŗį²Ÿ_(§m|µé79\‰)ß8ńŁKK’ę3Ēpöl2JK’dāšŁŸ4ņ¾T½ŽÅō]·n/āŲ±}"=YÄbKˆÅ–:Ō66صˈ¹6`€ÖÖŲ½[f+*2ĄŲ±f°··DX˜™’?ß ĻłóBx{›3×ųĮƒ‰Š§›7vī4Fß¾" j޳g…LŁS§ yė•Ēˆ0åĖU?›»w8PĜ÷ė'Ā /X ¼\ĄųĖ5š‘•%‹ļćc޼<ÅŽ†lmb±%._ĀĪĪ£F™ćŅ%!† 3‡ŸŸ9 éć…x¶”ß=¤ŖŖ]:ˆ!ɦņū-)3rä+8sFqnggŪ"޹¹9¼½ƒąįჟ~J}$lāā¶  ą<¼¼<8ĖĖ5ĖuĖqtt`Ž]]8}¹ōæśŖJK’BSÓ}|ņÉē¼:{ōˆ_ģ£GęŌĪÖ¢ļćöß8ńŁGŒšV²Ėį³?iTūR~?āÉŲ­­;¢÷'-M-ņ™“ $øq£11ķpź”!Nœ0ÄW_Õćʍ¬^Ż'NbŹS„‡7¢  AAMŒæü‡+vB‚1öķ«glńńĘŲŗµ»w×įČYā¶f1¾žŗ6H°jU»±øź•Ē­ēĖU?_ū`ŊÖąż÷M[\ć#.ĪŪ·×ĆĖ«ļæo¢Ō'rmkŒĀĀ z±±ĘųöŪzxyŻGd¤©Ę:āi†ö"Ōs‚ƒĆ‘‘qP^^ĮŲķģlQQqK­Æ««ŅŅŽ.]Źyl-qqŸĆČČPķl\æ^ŒI“ę0u¾…uėVA ąƒVąŠ”ZÕ×„Ė Ø­½+«f\æ^ĢŲżüB‘œ,›-aų_ø…~ż†įĀ…“¼Z“ńÕŌoŖ³Vņsy<¾qā³³“KmŽŪöż('/ļ*ŽMj#Ešqw—ĶŒž8q}śČfuŠŠj”lk×ÖcÅ äå5aÜø&ŽXl¾ų¢B”"YÉČbČåµUĒßƒ„„ģQW24o^ƒĘz¹ārÕĻGQ‘fĻ6AuõĆ%Gqq ęĪŌØ•k̘’ąćc™ł ÜŻ{1eNŸ>‹#G’0{öTlŪ–Ø1¦œ€\»ö±ˆ±ūū+ö"‹»āźÕBH$ ƧŸž€¬¹“hćĖ×oŚĀ7N|vŸ¤¦žBjź)„õm|ö'¼/UļGX³ę+„„[¹xQˆśz`äHs|ūm=¾ł¦ēĻ QW'³mŁR±Ų»wańb V®l`| -Ėdų'9#Gš##Cˆņr>żT6{3j”9ΟāāE!&Lh™@qÕkeõ……pr²ą«ŠŗÄN* dė²ŌĮ— ©ĀÖF?ś’ßĪg—_öĒķŪw`e„<{āęęŠéÓ}qżz6”W/ęšüCO,īŹ$<óę½3ęŽ~{2o}ņ™)ˆ‰‰BDÄ"üüóIlŲ°Z)žüXõ‘˜œ'NćĉÓųā‹8„ė„„ĮÕÕ“'Ē÷ßó£OUtō2 ģ‡ŠŠ[˜:õ?LYö·ŸöļOĄØQÆC*•āĖ/W!4Tö­?yŖjŃĘWŪ~ćƒoœųģ6Äą£>ÄĘ®fāšŁŸ4Ŗ}ÉfĖ–Ų·oŪ“õ,X`‚Ü\¬_/Į+ÆČfe įĘ bc%1ā>vķŖĆŗuķ°x± ¾7ߔ=®óń1‡pżzRLy"ĀNh>śØó盢²9RöXr޼FL›fФˆ‰‘“ˆĮUodd#||ĢńńĒŽø\õ«"[¢ŖŖ6ŌĆŁŁb±Tɗ«=\ķS½ĘÖĘ®‡ĻG­ń4"J„żŚZ„ž’€™„’ēŸm(„uˆŻ„É“Ē#**11+ŚZAčz’’~A –žŃ¾ż‹Ŗ¦"op%J°ųyź,gg455!+ė4óĶ0‚xZЇ™“4ÄŚµķPU%@xx–,iŠģDOJ°ZJ°ųyź,‚ āŁ…¬Ö…¹AAčJ°‚ ‚ t %XAA:†,‚ ‚ C AA„Ž”‹ ‚ BĒP‚„‡¤§gbҤ9°·wAlģ&„=½¼üakė„ŌŌSJ> IčŲ±»’ķīŻ*DF.…#† {•³.ł^‚źö&Ō–I“ęĄĮ”/<=}«xcūÖ­ßĆĆĆ>8pą(§/—žŹŹŪpu [['Ģ›÷Fżģ6¤§grjŃĘW›~Óß8qŁOƒ——?öÓŹŽšÜ½[W×Į°±qÄįĆÉųūIu|žžūĪŃų4šŚkÜūm÷‚T¾zE½ä• (ĮŅKüüBQQQ‰¢¢KHN>E‹–rsó±|ł"dböģ…ČĶĶg|bbbŃÜܬgÜø0 /rsĻįłēķ9ėboXüøTTTāŠ”Ų¶-ÉÉ'{BB6o^‡ųų5œŪ­šéŸ:5ĒŽķĮĶ›¹00ąßGMuóe@և\Z“ńÕ¦ßäp%¦|ćÄgŸ5k–/_„ØØÅ˜={!‡ĻŽZŌ××cÜøHK;‚ÜÜs˜0įmęW?©ŽĻ“iƧ…źŚZA­ %XzHUU1~ś) &&퐘øGž Ÿ _ßį°““Ąńć0vģ4Ę'+ėt‹8S§N@\Üæ…aƆhU7ßL–XÜ3fĢGmķ=,]ŗŠ³ĢO?%”gOg8;;*mD}ōčnōīŻ}ūöFrņ^N_.ż:ŁĮĄĄB”ĆKFń⋽™~d}Č„EßGé76|ćÄg?~ü|}‡Ć×w8Ž?ĄÄį³·a˜:uzõŒąą·p÷ns«ŸTĒĒĪΦÕ5>,b±%²²d›=÷ļ/Ā©S†8qĀ²Ķžū÷įÄ C nŽ Q[+ĄöķFZŖķhĄĢÖųśšćņe!®^5@Hˆlg„EČČ"+KˆŃ£³VrmźåŠĖU?y½ééBōļ/jqŻĻĻ’üÓņ?-3f˜¢¶V€„KMxŪ-[¢ØČµµ ,ĀŌ©2ŸØ(īØ āY…,=ēȑ„…½(/Æ`ģvv¶Jē\lß¾qq1ųśėµŲ±c÷ck™?&D"sDDĢŠXöȑęųڵ?˜ć¢"ķ߈ƒ^½¼`mżžłG±Ż‰ææņ‹†łå ®^ĶĄĒŽļ¾Ū„V‹6¾Ūo|ćÄg·³³U²k:n- ®cūö(.ĪĀ×_ÆÅ–-;˜k\ż¤:>qq1­®ńQpwo†©)-ALŒ1>’܃5ĆĢLfūā c s牤ųŠŃkėĢVmr}ģzŁĒ~~ęxī9)vīlłˆRµ^>;ū\[B?”­rZšĮŅS¤R)>üš„Äąå—=˜ć'Ņąå5HmŒ¼¼kĢ1{Iu-  nß¾ū’>…œeŲ°cI„R¬[}ū¶+é ņEFĘqœ:u55-?øųJÕØŹ4Æ]ūĻ?߉9ēŅ¢/_æi ß8ńŁOœHS²k:n- č§Ōö_ģ €æŸTĒēĮĶćՖüž»®®ĶpqiV²±Ļ—/—ąŠ!īõQUUÕj“†ĢĢ–±33b³²ųs««—+.Ÿ6¹>v½æ’®šß»·›6Õ#5ÕPcL‚ J°ōīŻū”C‡n8wīw„onÅĒÆ§§/llaoo‡ųų5Œ¼ ūư¤¤”łö^ffo}ņY*HIهšš)šöBss³RCŸ>ŽJ×'LxÖÖ/įż÷—a̘`N \śsr~EļŽC`kė„õėßōó eŽ÷ļO@—.nčܹ ‹pé’,óN IDAT鎽§m|µķ7>ųĘ‰ĻŽ©“=<=}įéé {{;&Ÿ½µŲ¹s3JJJakėœ;'{“Ź×OŖć““ó«ŗšmĘšįę°±±@e„‡×įčŃ:  ‚µµĢväHŽ3D@€9ŗu³ĄŠеD]»ZĄĮĮ¢EL±Ų²Åڧźj¼¼DptaęL٬gY™}śˆ0|ø9T—ŠÅ–œõFGKе«vģ0āĖU?›Š   Ā€"TVŹÖZuébĪ-`a!Åo˜qʐŸ³Æ©źįź .MōMBāY‡ņÓę[›ššZXXˆŠ»÷„Gń“ OŖŠŠ Эۃ¶–A ōˆ°u”¬g˜G¢{÷~8s&¹­„„Īч”4„··9z÷aēNķ¾HÄÓĶ`ńóŌĻ`AĻ.4ƒÕŗŠ AA„Ž”‹ ‚ BĒP‚EA”c(Į"‚ ‚Š1”`AAčJ°‚ ‚ t %XAmDR’zöiżĪ®¤$#t襒÷süoz×Õ»Į4½Iž J°ō±ø+Ā ‘4 88 |ČĶĶGJŹ/Ø®®“Óäęę3>īīC[l_†Ż»DeåmŒ?Cm}ŗ ¹¹łČĻ/@pp8c1ā5dgēāāÅlx{qśré=zJJJŃŲŲ„wß]ņPŚÅ⮜Z“ńÕ¶ßųbšŸŻÉiRR~AJŹ/prĄÄį³·ģū.?怹ļŲmÜøq+¦OŸĒœĒÄÄņö/”™3L‘›[«õŪęgĢ0ÅŻ»ü{"īß’†Ō|±Ų©©†ø}[ Tę‡Œ`mm>}DJe½½Ķae„Ų³+žXl‰¼< b®vöIžoR’śõ!<ܬEude aoo Ål—ü߈SF˰aę°³³D~¾.]’łųł™kŒO„ J°ōŖŖb88tœ9“)S&öķ;Ȕ?> ?ü 8·³³mgļŽƒČɹ‚K—r0nÜōGŅĮĘČČeeyŲ¹óĪņrĶrŻr¤R)sljŚ\pé/)Éf6–ŽŒ\ŹŲżż•_4ü×_eH$<Ųß}·«…v¶m|·ßųʉĻ>nܛJv9|öւ}ß`ī»!C<Ū’ž‰žżŻ'ĪĀÕ«æsŽ> Ÿe9}śnŻŖ••ĮĮf 4ĆłóµØ¬¬AĒŽR™ačPsDFJPVV¤¤:Ę_ž£÷7šąćs;J1aBŖŖŖl7·fTVÖąŅ„Zųū›3¾ii÷š÷ßÕJŗŲńŖŖŖńå—õpqy€O?m@’žĶ¼ķ‘’ք j‘P÷Pżbd$EYY5vī¬o76¶ž9?yņŹĖ«įé)‚±±Ģg×®‡«‹ že(ĮŅs6n܊÷Ž›ĖyM ØõŽ^77Wōéć†õė?{l-ŽŽ/¬¬žS[īśõblÜø•9Ÿ? rr®ąņå<,Z„u}ŃŃėpīÜĻ(/æŠŪ·ļ0vvĀVUUŒNģabb‚øøÕųņĖxµZ“ńÕŌoņ¤O>ĆĒ>ę‚oœ4_[rżzq‹ū./ļ*FölŻś=JJJŪBŚ#3p`3rs…ČĖ*Ł®\bƆzLŸn†Ļ>k‡’ĶĒŽmbŽĒ“ēę 1p ˆ™ŗzõįž¼Žw7n`’~C¼öZ“ĘņaafčŅł™ÓGGŁļ€••öOĖ}:tj(I„J°ō©T ’7‘–v––€ŠŠŃĢõÄÄ=xżõ`µ1™cm?Ģ-,DųūoY2Ć^ćČf°ŌŒJ„X·.HK;ĀŲ·o’ nn®čÕĖE£f6[¶ģ€³³#LLŚį«Æ>gģÉÉū˜cvb# ńąāCƒK‹6¾šś­ŖŖ˜łaŸĖį'>{bā%»¦ćÖD~ß0÷ܹsoĮŠPvL™2'Oz"štÅłóBōģŁ —f%›«k3BBī#3³‹7 N‹Iš‘#ļ#>Žk×¶ƒ—×}€›[3Øcf¤ŠŠjJŸ±±ęøpAˆwŽiŌX~ėÖz””Ō ¢āįź12’%I“ßĖ}‚ŠJ°ōīŻū”C‡n8wīw„Ł‘ųų5šōō…#ģķķæ†ńaϦČ)))…‡‡<<|™™Å[Ÿ\‡£Gė˜5X••9R‡cĒ `ŽnŻ,°b…ā1v×®pp°ąŒ»{·RRæ;Ö”ŗZkk 8:ŠpēŽ€w-ŪĪ>žķ·ZlŻZĻYŸź¬špSŲŪ[bēNĆńųā«Ę‘GGKąą`;Œ4®’¢o„v¤Riæ¶”§d`ž%üóĻ6”Ņ:ŌŌŌĀĀB„޽‡ ;ū×¶–C:G,¶üW}ćķāE!śöm¹žŠ Zƒöķ_T5xƒ£(ńj.B<­ 8MMMČŹ:ŻÖRBēüŪfYÄbKxx4#9ł^[K!BP‚õ “ŸŸŽÖ¢Õų7Ķ\’>½A؇Ö`AAčJ°‚ ‚ t %XAA:†,‚ ‚ C AA„Ž”‹ ‚ BĒP‚EŃF$%”gOŃc½³KÆ.ßŗNop'ˆ‡ƒ,=$==“&́½½ bc7”©é>sĶĖ˶¶NHM=„䓐„Ž»+ŁīŽ­BdäRŲŲ8bŲ°W9ėŅå6'“&́ƒC_xzś"6V±µĶÖ­ß3[Ļ8p”Ó—Keåmøŗ†­­ęĶū@£~vŅÓ39µhć«Mæi‚oœøģĒ§ĮĖĖƒūieom‚ƒĆ•śCuä{U^øgēA°±qDDÄ"TTT>1O ‹™`’žŗV{–ŗø›,Ń{ŗāį Kńó ÅŅ„‘(+ĖĆčŃčÖĶ0sęœ9s ×PZś'fĪ\Čųųų¼‚ęfå-6ü 11+pėV¾ę¬‹½a1 ¼ źqVÖeŲŪ»ĄĒ'„3ÖŅ„‘ø~ż"ĪKĮčŃŒ}ąĄ¾HOOEzz*^xįyN_.ż}śx欕³ØØø†ØØÅœ~rķŖ.ūł…rjŃĘW›~“Ć•˜ņŸ½“ōOœ9s gĻ&£“ōO&Ÿ½59wī<¶lY§dS‡>}†FŒx łłøu«¼ "µE>ć2tØl/Ā]»Œ˜kņ½wļ–ŁŠŠ 0v¬ģķ-f¦äϵ—ŸXl‰ŌTCܾ-P*óĆF°¶¶@Ÿ>"„²ŽŽę°²RŽKīŽ`ą@S./ĻC†˜ó&?»vÉā āmo^^Ė?ėŽŽę°·W\SŻ×P,¶ÄåĖB fŽQ£Ģ‘Ÿo€aĆd>……ō1Ażęč!UUÅppč 8s&S¦LģŪw)3~|~ųAqnggŪ"ĪŽ½‘“s—.å`Üøé¤ƒ‘‘!ŹŹņ°sē7œååšåŗåH„RęŲŌ“øąŅ_R’ĶĢ.EF.eģžžŹ[eżõW$ öĆwßķj”­EßĒķ7¾qā³÷¦’]Ÿ½µ˜8qü©ÅXØŽĆŁd}¼vķFˆÅ]›7/·ŗĘ‡A>ćrśō=ÜŗU++)‚ƒĶh†óēkQYYƒŽ„ 2ĆŠ”戌” ¬¬IIuŒæüG5īo4ĮĒē>:v”bĀ„&TUU#8Ų nnĶØ¬¬Į„Kµš÷7g|ÓŅīįļæ«•t±ćUUUćĖ/ėįāņŸ~Ś€žż[īGh[Ūج¬Įłóµ 2c®żų£!<=›QUU —-|ÓŅ¬¾¾ęJŲ’Hqņä=ģŁSOONž”łŒažšO%XśĪʍ[ńŽ{s9Æ µ¾ŃŃĖąęęŠ>}ܰ~żg­ÅŃń%€•ÕsjĖ]æ^Œ·2ēóē/ANĪ\¾œ‡E‹¢“®/:zĪūååWqūöĘĪNŲŖŖŠŃ©“=LLL·_~ÆV‹6¾šśMõ±¢¦G¬|ć¤iüž4%%„X¾¼åL”ź8ÄÄÄ2׎}wnŻ*Ąõė7°jÕŚ')÷”8°¹¹Bäå •lW®±aC=¦O7ĆgŸµCI‰ę?‹cĒ61ĒćĘɎss…J³QWÆ>ܟ×qćīćĘ ģßoˆ×^kjq=/OˆžżÉӕ+Šv|ų”)öģ©ÓXGM ’=ēč(ūŻ‹„JöźjżŗO āß%XzŠT*…æ’›HK;KK @hčhęzbā¼žz°Ś Ģ±¶ę"fMnn¾Ņ5##Cµ±¤R)Ö­‹‡ŅŅŽ0öķŪæ‚››+zõrŃØ™Ķ–-;ąģģ“vųź«Ļ{rņ>ꘝŲ…BēĻ Ń³g3\\š•l®®Ķ ¹ĢĢZ,^܀:Ķy F޼ųxc¬]Ū^^²5’nnĶ8p Ž™‘**Ŗy(}ĘĘR˜ćĀ!Žy§±Åu—fdf*žd»ŗ*Ś‘ž^ ŸĒ›i22’j.D„ÖP‚„‡”—ßBhčD>¼€āƒlΜiHM=…ššZ¬\¹sēŖ|µpᒐ•uŁŁ¹¼‹ÄUqwļ…æAqq ÖÆWæžH•ŠŠ‰Ø®®A×®]”ģ‹G”²ņ6vļžQé1™&GįŚµ?ŠŠŠˆˆˆEŒ]õ1ßÕ«…H0oŽ˜={*YriŃĘ÷Qś ß8ńŁW®\ƒŌŌSHM=…•+×0qųģOÕq Å\ĖĻæ†††FĢ©v­[[rń¢õõĄāÅ&ˆŒlÄ{ļ5āüy!źźd¶… ![b÷n#H$@NŽbfØ°ŠŁŁBĪø{÷aß>Cę|ńāF¼’¾ $ ¼\€Ń£Ķ8żŌ1qb#^{ķ>ēµ÷ŽkÄāŦث~’]ˆ… I˜……Ū·×!?_y•:¬¬š¶ ˆĒG •Jūµµ=%ó×ēŸn“””Ö”¦¦"ōī=ŁŁæ¶µ‚Š9b±åæźŪo/ Ń·oĖõWŃ“o’¢Ŗ©ĄE‰GĄPsāieŪ¶DLž<~~#ŚZ AčÕoŹŗįߔ°D[B3Xü<õ3XAij Ķ`µ.“‹ ‚ BĒP‚EA”c(Į"‚ ‚Š1”`AAčJ°‚ ‚ t %XAA:†,‚ ˆĒ$$„6D&BJ°ōōōLLš4öö.ˆŻ„¦&ÅÖ^^ž°µuBjź)%Ÿ„„$tģŲ]Év÷n"#—ĀĘĘƆ½ŹY—źĘÅĆ¤IsąąŠžž¾ˆŻÄŲ·nż>šššĮG9}¹ōWVކ«ė`ŲŚ:ńnYĆÖĻnCzz&§m|µé7Mš—żųń4xyłcš`?­ģ|$$$µ°±ĒD~±ļ/¶]µ?¬­_⓳yšą‚ƒĆµė”ó‚Ņū÷i?‚ ””Kńó ÅŅ„‘(+ĖĆčŃčÖĶ0sęœ9s ×PZś'fĪ\Čųųų¼‚ęfå-6ü 11+pėVø÷doX (o€¬zœ•uöö.šń ጵti$®_æˆsēR”ö„8°/ŅÓS‘žžŠ^xžÓ—KŸ>Žørå,**®!*j1§Ÿ\»ź†Ė~~”œZ“ńÕ¦ßäp%¦|ćÄg/-żgĪĆŁ³É(-ż“‰ĆgēĀÓÓ>>Æ“°³ĒD~±ļ/¶żšį]L_ܹsĒŽ)6Ęęź'pqńĄ–-ėŌjk+ŠŠ 0v¬ģķ-¦ŲpŠ śōaófcĘÖÆŸ/¼`ņrŁęŽģ·ĄGD˜¢ØČŻŗYĄŽŽgĪ(o€![ā×_ ™ć³g…:Ō}ūŠ˜2;w£o_†5ĒŁ³Bz»dˆ'cKN>ŽžżŻ™sī>žė×GsÖ«L™bŠššFŌ (Ø pś“!¶n­ĒīŻu8rĈ)»bE kšžū¦ŪĮTUU#6¶S¦˜"/Æ5 TŽÄ™½uLUU5V­j‡ $ˆÆĒ©S²ÄkĶc|żu=6l`ÕŖv“Ż A<Š^„zNpp822ŽŹĖ+»-**n©õuuuBZŚĄ„K9­%.īsŖM€ė׋1iŅ¦īĄĄ·°nŻ*|šĮ :“S«śŗtyµµ÷`eՌė׋»Ÿ_(’“e³+ģDźĀ…,ōė7 .œäÕ¢Æ¦~Sµ’ŸĖćńŸ hsĢ…XÜ^ķõė׋™ūH“=/ļ*.\Š€€QJķż4wīt|÷Ż.œ23k!‘0r¤lÖI Ķ2É`Ö,SdeÕŖMœBBīcƆzH$ģŲaÄ[š›ė±õ× ‚xz”K)/æ…1cžw÷žpwļÅ|p%&nFjź)ŌŌŌĀĒ'‰‰›ÕĘ | YY—‘‹€€0Ęε–Fΐ!žųä“ĻQ\\‚¹s#5jeĒ3ę?ųųćdfžw÷^L™Ó§Ļāȑ$Ģž=Ū¶%jŒ)' Ą×®ż††FDD,bģžžŠ½HÅ⮸zµIĀšé§’ ėC.-Śųņõ›¶šŸŻĒ'©©§šzJi}Ÿża`‰ü>bß_l»@€wߝŜsõSyy¾R¢©īžj+ÄbKģŽm„Å‹%X¹²PŒ !ŹĖųōÓv©00@‹™-+«ČĪĀÉÉb±%\]›±x±Ū·3ń¹˜0Į / ńūļB|ū­l¶jŌ(sœ?/ÄŋBL˜`ĘéGÄӅ@*•ökkzJ”üäŸn<±Š»wļ‡Ū·ļ(Łä^žž¾ø~½ ›ąė;œ¹Īž”—=pą(V®\xūķɘ2e¾xQˆ Lp÷®—.Ս±zµ1:t"&F‚š9ē„}ūUMEŽą(J<”`ńÓf ֓"6v&OØØhÄĬhk9”Sōż›z“Šhk(Įj](Įāē©O°œ=ŠŌŌ„¬¬ÓĢ7ɂбŲĪĪWžż›™¤N5yśńGC¬]ŪUU„‡7aɒ†¶KJP‚ÕŗP‚ÅĻSŸ`AĻ.”`µ.“ȝ ‚ BĒP‚EA”c(Į"‚ ‚Š1”`AAčJ°‚ ‚ t %XAA:†,=$==“&́½½ bc7)ķ čåå[['¤¦žRņIHHBĒŽŻ•lwļV!2r)ll1lŲ«ąB—ūČMš4}įéé‹ŲŲMŒ}ėÖļįįį8p”Ó—Keåmøŗ†­­ęĶū@£~vŅÓ39µhć«Mæi‚oœøģĒ§ĮĖĖƒūieŅØŽĆßĖŽÆŚÖÖ-÷m|š)(h»?ŸŻŗYؽžŚkŠķxø^øŹ÷ÖGy9«¾æŠ• Ś J°ō?æPTTT¢Øč’“O`Ń¢e€ÜÜ|,_¾™˜={!rs󟘘X47+oæ1nÜ Š¹¹ēšüóöœu±7,~\***qčŠNlŪ‡ääŒ=!! ›7ÆC|ü|ńE§/—ž©S#pģŲܼ™ Ž]sYmPŻ ĻĻ/”S‹6¾Śō›®Ä”oœųģ³f-Ąņ勵³g/dāšŁŸ4Ŗć0mŚ;Ģ5yß­Zµ!!Am¦±-pt|Šfu«ī›ØŹuOH A|P‚„‡TU㧟’`b҉‰›qōčĻ€šš©šõKK ?~cĒNc|²²N·ˆ3uźÄÅmApš[6lˆVuóĶd‰Å]1cĘ|ŌÖŽĆŅ„«8ĖüōSzöt†³³£ŅFŌGīFļŽ=Ń·ooü_{wÕyļü»»,,Ė.Ā+,F4  ¢‚Ä»ŠPÆÄÖRćL;vbż#éŠŲ¼ŒŽ ^sē^‰y©s{ĒŲŃc}Ia”Ž˜'"Ź‹[ c«–˜ ¬ŲūĒɞ}įœŻŲ|?3ŽgŸ=Ļ9æsqæ<{vϱcJö•Ŗ?..Z­:N¢—`ƌ Üw_šxžįJÕ¢¤ļpĪ›;¹q’k?~ü0l¶…°ŁāųńĆāväŚĒš÷8ÄĘNąŹüvīÜ  „-\Ć‡C`·k°k—šÉ'!8wN‡ “X¾Üu÷‚µkĆŃŚŖÅ‹/š£ ķfĢ••!ČČ0”»خ֔²2€0³ÓŽ®ÅgŸéÄõjjtø}X¶Ģ(Īü8Ū»»9sLC>ĪØØHōōļ¾źŃęĻŚµį°Ū5>7**­­ZŲķ<ō æü„Š'?Ÿw~ ņ‡+ȕ•U`åŹ|Ąµk×ÅöŲŲĒRvķŚ‹’’­xūķ×±{÷¾×RXø&Sž~z­ßuĖŹ*Äå‹’&.·¶*’Fü’’­HI™‹å~ܼéŗõȒ%ž_4|āÄ\øPƒ—^zļ½÷¾ĻZ”ōéy“'¹öŲŲvĖcĶ{JJ¶ZgŻŗ5ØĢ·Ļ?×bņä˜Lüüē}€āāP¤¤ōcƌ¼ńĘmqŻĀĀ^ÄĒąé§ļ ®N>ĢKyå•P¼üņmĄ¼yżxõUWбX‘!Ģ̾śj(23ūlŽÜėŃ?3³F#P\Ü3äćģčč„Įüāw†Ōư°&“ĆļńĘĒ ē°¹Y‹õė…>µµ|é ņ‡?%A¬¶¶ÉÉ3°y³pż‘ū‹ģµk׿¾čīß’HMMFzzŖĒĢ‘æk®x\ūÉÉ3Ė=>·5gĪB$'Ļśi 23Ć~‡¦¦ >kv—˜˜!¾õŅKÄö£G]ĒŅŃqqqV TVĀśõ’į³%}åĪ›Rrć$×ī¼”,5ļq˜1#Ććł_’ś<žx^€Ŗ“wåJfĻĄ¦M$$3CēĻ»ĀĽ÷ŗŽāKN–-–tuIæż)93ŌܬÜ9„øļ{ęL×Ūįīėgfz¾Mī½o©żoŁ ‘ģ*ĖyĢrĒė«Og§ņ>DćVr8ŲøńæšĄ)bŪ÷æ?O\®¬¬Āüł™>·ŃÜ|Q\vŸEņ¾ęȝŁlĀ_Ūē’ß:Ż·åp8°m[)ŲåQwn® 55Ēń—æü ]]væŪtr=_ÜĆŻÅ‹Ć÷¾'>–ŖEI_¹ó¦”Ü8ɵWVVy“ū[kŽć0†“¼‘ KIDAT0ązüÕW_ć£ŽŽuIC²iS>śHø&)%E:Ą(ŃŃŃ9č&ΐ”Ōļ1£“”$½ädW{}½+T¹Æļ|;QnßRūź)aęŖ·—”‡(˜0`”éÓg#::§N}ę1CTZś²²l˜4)Vk,JK_ū8×q mmWÄOļÕÖÖĖīOÆwżź[Qqk‹žž~ķ¹ļCj,::EE[žžķńüźÕæ‚År?ž{®Hv¦CŖžĘʓHK[€˜˜Dlßīś$ąāÅ+ÄåC‡ž€)SR1yr .]jE]D¦OŸ-Y‹’¾JĻ›¹q’k‹³"+ˆ¬,¬ÖXq;rķcĶ{OŠĻ-X°åå#ūy4=‚œœÄĒ›±y³0ĖsäH7ęĻ7!!Į„uėĀxĪLyĻMjĘ“iƒ?±ē>£T^Žė×µ°X̘;ׄ²2é ĢĖŹŗ‘žn¤Ifčt®§ņņnĢk‚ÅbF{»+$łŚ·ūßįHJ2cļŽś½g¼¼Mź¹āāL›fĘīŻzæŸ>”›Q#"ĘįpĢtAŖ€ųėä͛ʯś®čź²Ćl6!-mNśļ@DŖhmÕbÅ #ΜQ>£K¤¶ īónjšc‰Ui†ų®=ŻM22C__Ÿä'ųˆH}ŁŁhiŃ¢°šŖ«oŗ"E XćXKKu K WŖŖŖˆĘ ^ƒEDDD¤2,""""•1`©Œ‹ˆˆˆHe XDDDD*cĄ""""RŃ0̚eBttp|“¹æoUWó[׳ķķDŹ0`”ØØ©ČÉY‰žž^äåą™g6ššZPQq]HLœ‹¦¦±Ļ<<čö599+±oßA“·ßĄO¬õ¹?5ää¬DSS ZZ>G^^Ųžč£’ކ†&œ=Ū€ģģ\ɾRõ/[¶ mmWpēN~ó› ’żäjŠš*Y‹’¾JĻ›Ü6äĘI®=1q.**N ¢āēŠŪ‘kMŪ·æ=č˜äźöŸåĖWIĮ¢©ÉŽÆæ|oĄ@ŗGįPžWs_D$`Ą R%%/Ć`CIÉV|šĮ!ĄŽļĄf[ˆČH36lx;vģ×?vģĆAŪ((ČĒOš‹åoR“_©{:—ėėĻĮjMĀ¢EĖekž5k&fĪL@IÉV±}Ū¶’AZŚ,<ų`^żæ%ūJÕ_[[)SīEhØEEĻ+ŖßT-J ē¼¹“'¹ö×Ćf[›m!6lxF܎\ūhڳē€āćńŸÓ§ĻŽIJµ¶jń³ŸaµFbåJ£Ųž™iBzŗ ;w†fdźėuČĪŽĄ¢Ehn֊ķr3?ŽĻ½’¾^¼”ū:ŁŁ˜8ŃÕ’Į…{žõÆ:ķ:ļEøoŸŽļ¾åöē]›ó8ÜegGĄj”=ĘØØHœ;§Ć#Dą‡?¾už‘G„>—.ńå‚h(ų„::.cŚ“©€O?­Įš5ĀĢĄGÄužxb%žųG×ćŲؘAŪłšĆ#hl<ŗŗF¬Zõä°źp§×‡ąźÕfģŻūæ’ė;kvÖķäp8Äåšš0ɾRõ·µ5ˆ7–~öŁÅö%Kۃ«W;ńĮĀ ˜óņŒØ©±£®ĪŽœœo32z½UU·°wļmŲlb»ó7÷ē–.5"&fķķ]8}ŚŽÜ\W˜«Ŗŗ…/æśēęqö¬’śWĀĆ]ŪZŗŌˆÓ§ķhoļĀ=÷8üīŪמ AVV?:::‘”40ØoUÕ-\½Ś){ŒŠjųųć[ŲææYY&|ü±ŠēŃG#”Ÿ|"bĄ vo½õ{üö·OI>§Ńh|ö-..Bjj2ŅÓS±}ū–גp?`āÄó¹Žß’~o½õ{ńqaį46žĒ¹sĶxžł’T¼æāām8uźĻøvķnÜųJlwl—g…Į`@IÉĖųŻļJ}Ö¢¤Ææóę Ī>÷e)rćäoü‚•³nļńŁŗuG€+óōĘ·ńä“Flن¶6įæŗ¦&8c“’āšżIHž]Lœ8€®®”Ks³sęøĀĢłó:ÉõÜŪgĶr­ßÜģjĻČčŃž6n ĒžżŻ~·įėē"*ŹįŃŽŁłŻü÷J( XAŹįp`ɒŸ ŖŖ ‘‘fĄŠĖÄē÷ģŁüü<ŸŪčķ½#.+}17›MųņK!Ģø_ć3X¾¶åp8°m[)“Z-ŖŖŹÄö]»ŽDjj2RR’üÖģīŻwwcęĢ axóĶWÄöcĒ\oc¹N‡× T-Jśś;o—Å?īäĘI®}Ļžżķž–Ēš\ŻŽćóĪ;»U¢¤åĖæAm­/¼Š‹īo3Gjjæäģ^/„‰įdޤ¤~ŌÖŗž+MN–IīķgĪøÖOJrµŸ>-Ī”īÆŗŚŽE‹F6Óä<D42 XAhśōوŽŽĒ©SŸyĢŽ”–¾†¬,&MJ€Õ‹ŅŅ×Ä>ī³)NmmW0oŽ"Ģ›·µµõ²ūs'ØØ8€‚‚5ČĪĪEæä5Yr36ŃŃń(*Ś‚ōōlēWÆž,–ūńÜsExüqé€%UcćI¤„-@LL"¶oGl_¼x…ø|čŠ0eJ*&ONĮ„K­Ø«« œC©Z”ōUzŽäȍ“\{\œYY6deŁ`µĘŠŪ‘kMRć W·÷ų46ž“•:z499ˆ7cófį­é#Gŗ1¾ &¬['¼Oē} ’»©S͘6Ķ1ŠEQā ‘Ź4‡cv ‹ """ŗ›p‹ˆˆˆHe XDDDD*cĄ""""R‘ʰˆˆˆˆTʀEDDD¤2,""""•1`©Œ‹ˆˆˆHe XDDDD*cĄ""""R‘ʰˆˆˆˆTʀEDDD¤2,""""•1`©Œ‹ˆˆˆHe XDDDD*cĄ""""R‘ʰˆˆˆˆTʀEDDD¤2,""""•ż?Zj`ąµIEND®B`‚libwebsockets-3.2.1/doc-assets/threadpool-states.svg000066400000000000000000000635561357643561300226410ustar00rootroot00000000000000 image/svg+xml queued running finished stopped stopping threadpoolworkerthreadtakestask workerproducesa bufferof output nothingmoreto do buffersent onand moreto do problemssending sync free task sync worker thread context lws service thread context wait untilthe lwsservicethreadknows thetask is done newwsi onmount protocol_HTTPcallback enqueue threadpool task protocolWRITEABLE cancel service protocolWRITEABLE cancel service lws_threadpool_task_sync lws_threadpool_task_status_wsi move to"done queue"idlingworker thread wsi hasunexpect-edly gone write thebuffer onthe wsi acknowledgethe task hasended Threadpool synchronization with the lws service thread(syncs to the correct service thread for the wsi) libwebsockets-3.2.1/doc-assets/threadpool.svg000066400000000000000000000354061357643561300213310ustar00rootroot00000000000000 Worker threadsTask queueDone queueSYNCLWSServiceThreadreapAll communication with tasks happensin lws service thread context, via theWRITEABLE callbacktasktasktasktasktasktasktasktasktaskwsi (may be detached)task function pointercleanup function pointeruser private pointerThreadpoolenqueue libwebsockets-3.2.1/doc-assets/wss2.png000066400000000000000000001142751357643561300200550ustar00rootroot00000000000000‰PNG  IHDRXšuŁ6JsBIT|dˆ pHYsTiqTtEXtSoftwarewww.inkscape.org›ī< IDATxœģ½wtÕ¹÷’™™Ó›tŌ»d¹w› 8ōb_Z0%„J.yCŽ{C’_Hćf­KBnņ†@ri ÓĮĘŪ`°q7ŁøØX²ŗŽtzŁæ?Ž5ұ$\p#Ģg-­„3³gĻŽsęĢžĪó<ūŁ0™ĆÄl6Kf³Y:Üć ž‰D"Z’Ϧ#©ä•W^¹§¼¼üÖ£Ó$ƒÆ.ķķķo\xį…æźæM>Am10000000ų—ÅXGC`eŽ(ĖĄĄĄĄĄĄąč"'˜ŪŚ0wt`īč@…#¤T a³”Łķ¤¼^R99$ IœąV …!° Ž3r$‚sĖœ›6aŪ¹ūĪX÷ķM;ųĮżP].bƇ=ššŌ©„¦M#™—wŒZmp8ĖĄĄĄĄĄą8`ß¹ϊxV¬ĄQSƒ¤Ŗ_ŗN%¹y3ĪĶ›É{łebÕÕō\p=³g6ģKŸĆąČ0–Į1ĀŚŌ„÷ķ·ń¾óÖ¦¦ćrNŪ®]ķŚEŃ_’Jģ”SŅbė‚ ˆq\ĪoĘXGMĆóńĒä?’<īuė@ˆÖŪīŻķŽMŃßžFdģXŚo¾’ 儵éė‚!° Ž’Ŗā}ē Ÿ|ėŽ½'ŗ9pŌŌPõ“Ÿ()”ķ¶Ūčŗź*dĒ C`|„Ą»p!EūŪ‘¹ssaŅ$˜0F†²²ōŸĒ^oZõæū|ŠÖ--°s'lŻ Ÿ}55‡|:Ks3å<@Ž‚4żēž2åšŪlpP e`````p„8¶n„ģwæĆ±eĖ”äńĄ…ĀģŁpÖYiQ%āņ¾^/ KÕŽ|Ææo½”ŠA«²oßNõm·ŃqŻu“Ü{/šÅrč}08(†Ą2000008Läp˜’?ż‰¼W^9“+§ęĪ…yó`Ö,8Śb¦ ®½6żĀ¢EšŹ+šöŪ }œäæō®ixšAbUUG·]_c 竁Įaą^»–Ń×^KŽ‚WcĘĄßž­­šĢ3iĖÕ±¶Łķi1÷üóiĖ֋/Ā“i_|ČĪTßt®uėŽmŪ¾FĖĄĄĄĄĄą4¢GeÄ]wainžāĀ3gĀĀ…°mÜqø\ǧ‘bµĀõ×Ćśõ°t)L:dQ%bÄæ’;ŁK–Ēžėb,ƒƒ`źéaĝwRōųć_œm}üxxēX½.¾ųŠc«ŽēėÖĮcAvö E¤D‚ŖŸžļ¢Eǹq’zĖĄĄĄĄĄą °ÕÕÜ}ęõĀĆƧŸĀ%—æĘ.² ·ßžžyxĘƒ—Ń4*~ń <«Vß¶ż‹a¹ ¦& łź‰ڈŪIDŗŠ’‰Ż,ƒ/‰l¶cwēcs`÷ćĢ©²¬kćF†żš‡(ĮąŠ^qŚ£Bq1B8 KąsŹŹ`Ł2äżéŃGģ–R)Ŗžć?ŲõŌSDGžĀŖ„é~’ ķ·8JGĮņh,ƒBµÓ²ć}b”ŽŻƒ£ŒOŒvīIĀ•SIŃČó0Ū<åÜ«W3ģŽ{‘c±Į+r:?ŒzÓMØŖŠ‹”ębĶ'œǟå7æ°/G£Tżē²ó…PŻīAļWš¦”iŖŖ~%Ŗ$I(Š‚,ĖČū“Æ~Y‘õµXBˆŒ ÷b µj``šÕGh¾}ŸŃQ» ”„Nts Ž5BźŖ§ać N9wŽ$YƽjUZ\%†°XŽƒ6>bģ»Hņµ˜”ŹWL[!łŃX¢©Ÿ‘õŪßŲomj¢ā—æ¤īOÖ+®äOŌČ»Aaśź‰+³fāģš .‹_ˆŻnĒjµb2õÉ£#Õ_%„ X±bŻŻŻ¤R)†Ī„ ČĖĖĆjµBĖĄąkŒ¾¦“ļłųD7Åą8“ŒhŪż!•Āö$Ćžć?†W^ˆxé%4— M]€IN"I|—÷SU`ŠĒžŁó˜ŠŚJĪ“O(“µ|99#ļ²Ė2¶÷Z®B"„jž øE‡ ”%čōwÓģk&77—¬¬,ģv;Š¢|)MšµXB|>Ļ<ó K–,”µµUß'IEEEĢ;—9sęąõzu󠁁Į×!±@;u«OtS N©xˆÄ†eŒųŻĖČŃ豅īøžņ„,£&“Øš†É||Ūy4фĄ×`Ū¶m$Æ»Ž3jkq,_> \Éž@ଳH0ūPÓ4Tń4ŻõChąėģ¢~o=š¦a6›1›-(_rA쯅Ąźźźā”‡bɒ%ŗkŠl6“““ƒ,Ė„B!žyęŚŪŪłĪw¾CQQŃ n±ĮńFhIŚv€fø涘ā)f<ü&æš÷Ž ½®²bŽz BB!AOOzp6™^ƆĶÖ÷ā ü~ˆĒe Ģę>KI4ŖŃÕ„č!Q……*&“„ß>Ÿ‰XŌ„¦JȊĄlŃp:“x½»=m4B€Ļ§˜Q“2²"0™UģŽ^ÆŠŪnŠ~ˆŚŚZ²³³©’Ķo}Ć Č™×¦§‡’?ż‰½æśUĘvUUŃÄW×z ©·Ÿ}ūöįv»ÉÉÉĮķžņ}ś—XŖŖņōÓO³lٲŒø« &póĶ7c³ŁX³f ‹-āć?fäȑ\uÕUž×CEÓ4būƒ]'*©œĮ ¶ užčfœ(Ģ|i%žÖžĮ÷ß{/üĻ’ōßļZfĢ‘¦ĮŹ•I{4€’’ß½ÓĒäÉVżø­[%^xÖN]­ÓĪšsƍIŹŹś¬%~ xś)ńøŒ;+ĮƒõŠÕaį•—­¼»(—śŻŁ$B&¬žya&Līę–[ƒœw¾Š$ źźL¼ńŖĀĀ·sŲ¹ĆKØÓ†Å•Ā›”zT7×Ķkg޼żK@,§³³“@ @Äf#ōšĆxęĢōī}ė-Śo¾™Ųšįżś«!:īJhék €’<Č>i’_’²ƒŃ[NB99]F$"•>—lÉ,e“!Ż A,£§§‡h4J2™ŌćĖ į°oß>>žųcR©¾·R—ĖÅu×]Ē©§žJSSēw©TŠ_|‘Ļ>ūŒsĪ9‡‚‚‚Ć>W*•¢¶¶–H$Œ3Žf7 Ž1±@é'¼ĮבSVļ¤bSżą;ē̓‡t×`ā"PXžÖ0*†ųę%=LžœŽ /ōņāSeDƒŃF¾yQ'eeéz"§+bŁŪ„Ø)™Ėo¬%SųŁę°āŻŹŒóD| {}VŗŪœ~Ę>Ī;æ‡ĘFxš·^ŽžgŃPߒ<ń€™Ö@­µY Ǝ0o^ßĢHUU‰Ēć$“ITU%qę™h7Ż„üĢ3ē“4¢æž•śß’ž ÆeTŸB¼Ę‚dÖ0WĒ1ēķænā[­Øm&”ʦ<ų&'$‡ё³RȅqR 6ˆķ¾“rcXĒ„Hluj-$Š’`ņJ˜J¦Ź(ę¾ņšRI&“¤R)]\}ŁŁĒU`‰n?bO¾ ŸČį`2!•— U”Į¾Ņ-[¶ąół2.”ŪķfƌlŲ°łóēsĪ9ēPRR‚æßO(:"%„ ü¢|)'%±@ė!­Łk𯇫+Ȕ7‡H":küżļ靇€$A~æį#•’…Ņć“‚Ļ>3±|‰“h0-~:»¬D"& Ąŗu‚MŸä£¦$\Ž÷ü ×^±źāŹjKqŹč…j ü~‰ĀŅ&‰E ¬x/‡hȂlŅ9&@Qq ! ‚¶63W_ć¬zÓ©»ŌŒ©’žo,o¼øK³—.Ŷk±źźƒ^ ”Aģ3;Żæ-E© ’õﭘóŅēŠ"‚ĄS…Ä>ŹĀżļŸcŖŒą’U%"8T@›Ą2Łå¼BW@Š:D90ĻŽ‹÷īŗ’«”Tƒ I! Š$¤Ü8Ž‹[šÜĜ߯v‘vł-qĒŪ‚Āū"– ‘!«N?¾5iäĭ׫Fū‹ÅčīīęÓO?eŪ¶mdeeŃŽŽŽ§Ó‰Ćįųņm300ųJtķ÷Y|ݘńņ'˜āƒÄŽ••ĮK/łŠ£Ų% śĘ"5%›īnĮGĖŻlł4Gßļė“ §V"”1’…<ü 1ūŹ&¦Lµš«_x÷—””ĘųѵŒ§’Hššd4UbÜxPS2;·eÓњĆrŠ"üŸŸ6pęY14 ::Ū¶9˜1#³?ƒJ‰Ü\Ľ÷"s…äϟOćĻ~Šk!­MæS^ sAŠŽdĶš/ķͳ h²Œõt"® bX“&Óų”¬ż±Ó#£X*4¬Sƒ@T»µĪfóˆ(rVś;“ž"Ł–Be$Eąø¤lµI"¶>›č[%ČeuxÆ=¶Iƒ«Ą’*JįŹK Cl®łrŁn GŸ¬MC\?iōH$sf—S”Ńh”ššFމ¢(¼ūī»!())aҤId±FÓ±@Ó4¶oßN<gҤIś¬UU©­­%‹QQQAVVńxœęęf"‘„„„ǵ­G‹x<ĪīŻ»‰ĒćŲķvƌs‚[utńł|“““č},,,¤°°šˆbū Žj*~¢›`p(ßÜ@į®–;d^|ŽĄ›įõ*˜¬*©øBJ• ‡4MeĖf KŗQSg’dŌ„æĖF4dŚ›%XóQ>ń˜‚'/Ź]wū0‹õyh,(+…ŅŅ“H6¬ļ¼‰¤ •”Z:nČjU)*‚¢"f³De%LŸŽ'rŹ˜^ž§«+³ Ņüƒ $ÖX B¢ „$0€’×Ļ”j4£šĘ1Ė(%`­N/ ’\X“‡ģŌšÜ½syśŁ*!Y$Ģ£ŅųįEŁ„ž±¢TqŽŚŠudŚ (»%‚‹,ˆ„ł1¼’ß>$3ÄwCā'&Ä>É­Ypķ±M"||Ÿö’„4j|k.LŸ źĪÖ@{ā£ÕŠŠ„X½T ®ŸćF!õ{Ū°Ūķ‚ԉ˗/ē–[nįŪßž6Ū¶mCQ&OžĢYg…Ķfū<<’É$Ļ>ū,­­­<ņČ#8$I"óśėÆÓŅŅĀ­·ŽŹ„ čīīfńāÅŌ××sõÕW3}śōćÖÖ£EOOŽg€²²2žėæžė·źč²k×.^{ķ5½—^z)_|ń1ŸüŠŅŅ7P˜L&ņóóæ “Į×9„2łĶõƒīóßx YguŲuJ’„Ł ®¼=ūœŗ««+Į‡ĖlߜCYU³#E]—DÄDb1Į« ²ißg!qŃUMLšlB’`ęL??($öķ³šĒßåqė~¦MObµō‰%³I¢bD¬7=vZöŗyāŃ<āńv¾q®†Õ*ŽŚÓ|÷»šąƒ™×-Å»p!ķ×^ū…‡«…d“ɕD.J"Ūū ¬}“  ¹2€äP1¹dŲ’x ,ұm޶ 2Š-³ŃŠSAKHXa¦ņ(Öį*–¢>!šÜćF$”ź$%\o.•ņ#hū\ķŲ§c:žÆÓ²Œ4ŗiōžŪxŃŃ ńŲ¬H҃ś¾…?łˆ¾ ū`ķF„ŖĮ saÜh$KZdUWWćt: ś±©TŠÕ«Wc·Ū¹šĀ ™5k’$‘——‡Åbp®c‰ŖŖlß¾½{÷¢ö³č©ŖŹž={ØÆÆĻh{"‘`ļŽ½ģŲ±’PS‰Or‰„Žg€p8|‚[tōéīīfĒŽ4440eŹ”Œ‰NJæüå/ś’………üą?8ęē40ųŖ2bķn\¾Š€ķńb/Żw\MÖÖ+ɂœÜ=ūœ¤R2Į€™š ‹Žņ’JŹL=5„Å‘¢agÄŚŪU¶lI±ryᐉ¬üßłn“’v9^’­(+ŽogŪ†B o/(„µÅĪßńqń%!<ž“°$ųęE~Ö~āąĆwĶ$b&¾V̾F3u·ųøń¦0Nēaf&æė®t€’'ļ{ļT`‰€uŸ$HŌ™¼éŌ÷Å×f!B,Uad{ę³1¶Õ$ äāŖµG ¶JHIs (żœ9Bµ6 ’ęсt†y āŪAkš YT”Ņc?īœ<ž ![·#>X -mi ÕŠV‰4ū\¤Ź²ŒāR–fŖŠxåmhj†õŸ"ŌÜx Œd±PQQĮ°aĆhkkĖą ‡Ć,Y²„ęęfn¼ńFf͚u¼{ü…X­VęĢ™ƒßļ§²²ņą .Ō’Æ®®6ÖW‚żł‰²bXœ “†¦I$"f"=vRńt<ŽĶĒS¤£>ēø¼}}&k w^³5‰ŖŹDzģĂV„&ćĪ cĻŽ‚40¬#Ųę"°‘ŽŲ9:ČŖĘče[Ż×tė,dĖ‘g•eANnŒZ@ŠŽ.±ņC »j²))qÖ¬ ž36[ŠD،ÆŽxŻIc­ ”É\|UćĘ§Ó HĄŲq ?ūu O<’`ÅŅb3Ÿ,Ļ£«Ó‚ŠZł·k"z­qć’~o6kŠe -|¶¦€–f;š¶—»ī>LWxe%|ó›°hQĘfēgŸaīč :„U^h u›­NDR"žańÕżÖz X !cžD²õęjH“ŖÉY`5DŹ Õ%“jSĄ™ÄT¬!;śß©"Ś­ Ih>·Lh]6ā«ģˆv;¦œg ÖG›“F`‰õŸ!^zńéVH&ūv¬ūšą¶yHUåĒHŁYpž7@Õƾ Ķ­°qsZdŻtL‡ÉbfŚ“i¬_æžÄĖ$ 6oŽĢsĻ=GVVS§N===4Ģf3ēŸ>Bˆ/MÖĄĄąäÅbO’]ĄźŠ“J(Ø)%-øYI{³¶F7,$¹ZKĻN ™‘O āŗ©ėØLQw,8)–šo¾Ū'®FT!]š ˆÅ f'b՚ō<Ņ»¾TZœq¬äĶ‚oĪ”!^}'mżŚ“ ‘x¾3&ēĀ /dłņålŻ:šm%•J±mŪ6žž÷æœ4"+™LņŃGį÷ū9ķ“Ó())“\}}=›6m¢¶¶I’(++ćÜsĻÕ³ŌCŚŻ8ž|4MC–eŠ‹‹u‹¦iģܹ“õėÓqeeeLš4 Æ7żxihh`Ɔ D"¦M›ĘčŃ£õ‡ ¦ituu±vķZZZZšł|ȲLaa!cƌa̘18Ī›=!»wļfƆ 455a±X5jÓ§O'77w@ł®®.6lŲĄž={šūżÄćql6.—‹’’ŹĖĖ™2eŹq‹ÅŲµkŪ¶m£½½H$‚Ūķ¦°°‰'RUU5¤›XA]]Ÿ~ś)zśÆ×«ÆiYZZzо455ńĮčŸgœq†¾Š@<gĻž=lŻŗ•¶¶6Āį0.—‹āāb¦M›FyyyFßžłĻźõ½twwóÜsĻéŸ+**˜9s&V«•X,ʎ;Ų¼y3„ĆaEĮįpŸŸOyy9ćĒōŚE2™dūöķlٲ…ęęfE”°°iÓ¦qŹ)§dųkšFss3+V¬ ¼¼œ©S§²cĒjjjhnnfüųńœžłŲl6Āį°>ć×ļ÷SXXČŲ±c™2e K—.„³³“ .ø€ĀĀĀ/hŻÉ‰bVq±eŶ¹‰ōŲPS2²,°ŗāxĖżdńķż2Ćż‰G’Žģ(6WœĪŗ &k {Vt)A¤Ū¾ßJÕGne7ŃńŠŠSņ”kvŗ½õšÓætݲ łyéߣŖŹģkpÓR甼*Čłł(/ov·'mLŲōY6­{]ØI™KÆŚĒ˜±²œ9ų›ĶS¦ ņ :1™4żŻ0Ō”Āē5v¶l¶3eJ_^+E‘?^PPDČu<žĒSś-4×{ųšC‰ĆžStÕUé%‚0Rø×­ƒ”VH"Ń §EŌĢīy]ŗu2¼ĀNt LrŽ–sŪ„!Å$[ ŪčĮ›#ˆNj‡óŲn”œĢg_b— /Š2"€lS‘³“X*T,“U¬££Č–cæīšÉ!°¶Ō vÕ¦ÅÕČHßæ-vAU”½ž|±įSXR…tė·/y³ą¢ó!µß’ÕŃ 5Ÿ#ž÷iøćfJ&Oą†ną×æžõ€A҃ٺuėeI’˜Ņū*pI&“,Y²„ĘĘFŹŹŹXŪ¶mcéŅ„ŌŌŌ Ŗ*įp«ÕŹŗuėøóĪ;©¬¬ŌEÖŅ„Kihh@’$FŌ3p:„B!V®\ɋ/¾ĄØQ£šz½ŗĄZ³f óēĻ×ć½Ŗūå>I$|ųᇼžśė444‡‰ĒćH’„Żn'77—3Ī8ƒ+Ƽ’ŹŹŹ/ōūÆ\¹’Ē{ŒÖÖVĀį0²,ćõz™9s&óęĶ£ŖŖJ/»}ūv^~łe6lŲ ‹+MÓP³ŁŒÓéÄķvóųćė³/{ō×^{U«VŃÕÕ„gģµX,8 ˜5k—_~9¹¹¹ķ ƒ,X°€eĖ–ŃŁŁI4%‹!„Ąf³‘——Ē5×\Ćõ×_Šļ¶©©‰ßżīwŌŌŌé‰×_=!mmm¼łę›¬X±‚ŽŽ"‘ˆŽN§ÓÉāŋ¹āŠ+˜5k–.^_xį…ł×ŗ»»łĒ?ž”>ēœs˜p–Ÿ”—φPńöšaOtuƒœsĪ9\{ķµ<ū쳃6!³fĶ$IB–e&MštL»|04MĆļ÷ćółHöw™ī§££ƒE‹1qāD¾’żļS\\ŒĻēćłēŸgåŹ•X,~ņ“ŸčREE7nĄétRWWĒųńćńł|ģܹ“®żÓpkjjhmmÕūæeĖšššH$Ųķv]čhšĘŗuėųӟžDkk+š¦!I’> ²««‹®®.Z[[I&“ÜpĆ CZįZZZxšĮijjŹŲ …čīīĘb±p×]wįr¹ƒ,^¼˜%K–čVµŽµ£"‘ŻŻŻƒAZ[[3& ō.ö½xńb}Ņ@ļ, ioo§©©‰T*Å5×\£§ĄBšČ#°dÉŗ»»õ:%)żC $“I|>ßAæ×¦¦&|šAÖ¬Y£‹¦k®¹†‹.ŗ‡ĆAWW/æü2ƾśŖ.j- V«5£ŲķvĪ>ūl, >Ÿ/c2¤-—]ż¦W„lŲ°W_}•††„X,ņņņ$Iæēŗŗŗ©?¾V¬XĮóĻ?Ą 7ÜĄäɓBčż’÷)))aęĢ™śZi‰D‚öövÖ¬YCKK gu3fĢĄd2‘••…ÅbįwŽįõ×_Ēårq÷Żw3zōh„|ņÉ'üć’ ££ƒ`08čoää'ķ6SĢŃ 5C\M&ÜmO ”Bne1æ•xŲ‚;?D~•}[‹dŁ‘Ą•!äs ŲH%eÜA² ƒÄC6=6,Ž9éŲ–P—Å¢āŹŠo}ܾ IDAT+ų[]˜¬)ņ*{°:’DƒVŗ›Żør¢xŠ‚¤’ Qæ{VŒœŠŌ„BØĖŽÉ¢ā-õ#Iv÷€1IÖ°Ų“ÄVr*ŗqxāØ)™`»‹°ĻĪ@ń$šHFMĶ/^åØų¬i>³Īs_–!??żüŃT™DTfų(?^ÖNAAŗÆ^Æ†Ē“‰Xz(¾ģŖ}ŒBQś®ĒīĶ¢²*Äĉrs”£Cįå—ū¼.W’ģģ8įˆĘK/ŗikU™25@q± …’,$ģź++“ åvūBfĶ °L==8źėaųĄāZÄLjÆSVSq_ŽK- Ś>;ĢX*cČ®Ģąłųötœ–itŅĶT{ Õ S±„’ÓwæiqØwABĮ:.ˆu„Ь;%Ž°źåäXµ{!œ,„ÉĄbN‹« ›Ÿ¬Cśę¹HćF#6lJ[¹XĒŠÖ‘ō°tł…H“'‚É„ÓbįÖ[o% ņśėÆzx<gõźÕÜvŪmzj„“‘H$ĀčŃ£™3gS§NÅl6£Ŗ*ÅÅÅÜwß},[¶ŒĖ/æ\Oć0cĘ ½ßįpXėļźź¢¾¾^Æ7čy¶āńø.®FĒćŃĖ=ņČ#47§ó–äēēsĆ 70cĘ "‘Ææž:ļ¾ū.@€… R]]ĶÅ_<Øū­×M÷ĄP\\ĢęĶ›yśé§õ¬śkÖ¬aŚ“iœwŽy“µµéĖ\yå•\qÅäää ińxœ-[¶°jÕ*Ż…Ö+ž.\H8Ö­x×^{-Ƈgóęͼśź«Ō××ÓŻŻĶĖ/æĢøqćōĮžż÷ßēwŽ!JĒk8NŻ‚äp8hnnfćʍĶIÖÜÜĢ_’śWÖ®]K2™D–e¾’żļså•W’••E"‘ąÓO?åµ×^Ćļ÷#IÓ§OēśėƧ““”;wņģ³Ļ²k×.Z[[łūß’Īȑ#)++ćĒ?ž1‰D‚ßüę7śł øóĪ;õĻ%%%X,hllDĮˆ#øõÖ[;v,’$‘L&illdķŚµ‡œā”¶¶–>śˆžžn»ķ6ęĪ‹ĖåB’$N9åTUå…^ą‰'ž`Ś“iŗ Š…łé§ŸĪ·¾õ-Ün·¾o÷īŻ¬ZµŠX,ʝwŽÉģŁ³±ŪķTUU yé„—©'#’,PĢ*š*ļdČ`ĮģQæ@›ØI…#;°8$ćf@M)„:D6L–.o”DÄBw³‡T܄¬,öžĀ‘ˆ“ ūDżvLf•x~Ś2Õ¾'—ď,ƒÅĄlO Xq儑$æÕM,hE–ŠU%«8HØÓ…z@¾VIJ[ė$Y#Śc'ŲįĄž'§¢I;2„mĪެu^R)™£=0oo°M³™é9sŌQ©?-°śœŁ–bźéafĻNé^Æ<}·;Žā0sÆI“Óg½śüóóŸÕ¦ātj˜Ķ‚dR¢«ÓLļ¢|§œgņ”(5ŪdŽZąę³59ø\*«ŲŸ\ŌJlæ…+»$Ģašž¹ēĀÆ=`³s×®K¤@ė ĆŽ<©SIœ^Q—źPQ;%Š$,U’£/Jh ķL'aµŽz–¼Ś­lµ€7\@ź×„D“Šę—A€u”†tUĪÉ!°ā‰“™ °i’ ØżæĒĘŒÆQæ\N° ī‹]ˆ >YÉ$Ņ7Ī@ś·+  WÆĻėõrĻ=÷`³Ł†|0Ēćq>łäīøćŽ“6¦,ĖL™2…‰'ź¢Åd21bÄĪ<óL,XĄG}ÄŌ©Sõ_f³™d2I8ęóĻ?GÓ4:;;ukˆ$ID"źėėńł|“¶¶ŅÓÓ7‹£7¦I’$6lŲĄēŸ¤-,“'Oęšk®Įn·#„  RSSC]]ž5śōéƒĘ( !ųįȬY³0™LTUU‰Dxā‰'Ų»w/›6mbÖ¬YśZQ½$“I\.eee˜Léd}UUUœžłś` …ųšĆõtłłł\vŁe\rÉ%˜ĶfŖ««ńūżĢŸ?ŸP(¤Ē”7ެ¬,^żużX‹ÅĀW\ĮwŽ©‹ˆźźjf̘ń…“ZZZųŻļ~ĒöķŪI$˜L&~üćsé„—ź+V®\©_óāāb.¼šBĪ>ūlżŗlß¾¦¦&¢ŃسTXXČ\!°<—\r‰ž¹÷”ݻޤ­\½1s½÷@UUÕ!ōE444°sēNʍĒōéÓq»Żś¹<W_}5o½õ›6m¢¹¹yĄ¬Ųüü|.¹äŻŪK]]{÷īeņäɌ?>#§Ēćįŗė®ćå—_ΰT~ՐzSā„!ŸMM»éā‘tž$Ŭ‘ÜżJ*ÄBé™y&«ŠÉš"p‘Œ¦eUƒXČJvQIī½³ō„Q šI#K“vßIȲĄdQ1ŪS$Ā–“‹O“Q5ˆvŪń䇑u€(H² 3ćŪėEÓ$bA9=8²£D{ģūŻ€i\!q±°õŠÆĶ!b‰&ČÆk°=0¹ Õ~tŅō¤VŸ8®¬ sÕÕĶx<}}ńz=ĪPœĖjIߑŖ¦~ƒ”ŻŠX¶±żsč Ż|ķ KˆīÄü׋—é–0ŹK!Ū£‹«^¼^/ßūŽ÷B0žüA›“H$X¹r%‡ƒļ}ļ{ń?' n·›¢¢"ż¾Y–9r$V«UwAz@5j[·n%‹Q__OWW{÷ī%2yņd, ėׯ§®®ŸĻĒ®]»2āz¦M›¦*ļŚµ+#ķEÆė«—^ėS/---ŸūcµZ™5k–.½^/§Ÿ~:O=õš¦éī·p8L^^žšžūļ³råJ >|øßßś˜L&3¬tEEELš4 «5-Öćʍ£°°P(„‚††āń8ŖŖ²k×.ż:Z­VęĪ«[ņ -ŗ–?młņå¤R)4MĆb±p’ż÷óĶo~3ćøX,¦ēėżüĮ°iÓ&}[}}½ŽUUihh •J ŗ¼“$Iz{B““ƒĒć!°wļ^~ūŪßņ—æü…ŹŹJŖ««;v,gŸ}ö€{k(zzzčīīęŌSO%??@|CAAtttŠŲؘ!°$IĀćń *¼»»» ”””ąńxŌ[ZZŠĒćÉpŪ~•BBMIȊ†l>t‘Øõ"ģĻŲŻ_ĖMBK„Ÿ{²¬Ä~AÖļ°”ŒdJ—ėŪ“¾Jšś*Ž_L’H·Wd—p†śöķ·Č™,jښ–„š”‰GĶŗųŠGĢÄ#fģž8Š%„ ,IÖpxb„»ķh©£{ŪЉ¤ t¦āē:Bd*«ąÜĖkQL‚SOqž™±?6›Ä䙝ģėa2iĢūv”ĀB2ÄĀ-ߎ£HY½:—śŗ,ĀA3V«Fye€ó.čbΜ8#N‘1›%f_ŲM<äĆåvļΦ»ÓŽ¬h—†8ćĢvnŗYeŌčĢś‹¬,ØŖ‚ŗŗŒĶŽŚZ s2Œģ”Čŗ.ŠūŠ$‹@vöŻö `{ø‘jEv«³’,Å&ŠŽLæø+YCæąŁgʰ>½IɑłŪqžö)éüƒJvźČū{89–ÉŌ÷­Ći…,IH÷żă†Héö›.ų v»d2™‘įÜn·pēy<ž AŃŚŚŖĒE£}÷•¢(Gt?ōORTTÄ©§ž:@”ÅćqŚŚŚōĻŻŻŻ¬Zµj@] ŪĆI`*I§v7ndńāÅhšF8&ÓŚŚŹŚµkõŁæųÅ/ŗR€¦i„B!Āį0YYYƒ =Y–õÆ^—r/Š¢••„»Mś …ˆD"ø\®A¬,ĖäēēeRq’$px¢éX$‘yģž(ŠY#Ņshb··Ž^zĪū[ŖŅŸ5P!S™ŚH$TM““»š·ŗˆ·ddąw%„„7”ČLĻŌxŲÜ1‹JŌoCSžččŻ×5čöąÄ/ÜŽ‹$AÕ0Į‹/§­Ń²Œž§ŖÆŒÄ7ĒłÖ¼“éŃl˜S»ŖŹÄO~&PÕ.„šéĘ#Y(ŠĄd’õن2wÜ©ńŻŪżhZ@/+I (ętäĶ— š7n€Ą²µ¶r Ą’d ;>›d `ü…BRĄ”{šē™lČCŌ![A¶ž8«UN %żŪeéY„»ö =šņƒæ@*+A^ ’ū‡!”0āÕwŅŁÜcńtlÖųѰw“u {6m»öJ$GßJ’$¼^/wŽy'ŖŖņŚkÆ ^’QXMūXŃ+,#£išīĀ‚ō@6mŚ4žyę =+nŻŗuŌÕÕa±X(..fĀ„ |šĮlŪ¶-[¶°gĻż'NÄjµźõõ(&“‰āāā/ŒAŹĻĻŅ"r š’$ MÓōŁd¶ŁķvdYföģŁTWW³pįBV®\©ÆŁ(„@Ó4R©}ōO<ń÷Üs²,ćr¹t Z*•0›4‘Hdøš\.&“i€ˆķuö·¢ f³Y_x|ļŽ½Ü{ļ½<žųć),EɈAźMĖp Ŗ?………‡'­¬¬ŒŸżģgœy晼÷Ž{lŻŗ•īīn]ø©ŖJcc#÷ß?ļ¼óĪ ā§Y–±Z­˜ĶfāńųĮęż'$ō§wRÉ`}‡ĆŻn')"æ²ā ‰DŌB“ĒŽ37JÄ%ģė»LÖ$¹UŻ! ™ėJM(ØI‹-‰bŅPSé{Å꩏šõ5ė‡TR!•P0™TŌ„‰D4Ż6EQAš"¬JÄĀlī²¢¢© &‹ŠÕžL·1ŃwŪÜ Ō¤¼æ­Ē@`5 œ¼”ŗlÄ ŽŽŗ®é 0p°U×Ģę2™ż•%‰¾w‹Ē£ŹŹŅ~!wš²GLÅ@jimʝś’Å89Võpäށöū‡”¾ķ'æAžļ“Č̾'„€PńÖ»ˆ—^K‹+‡éĘ«‘®ŗ±fā©ē”©ńäsJ„×?td®K˜››Ėm·Ż†ßļgٲedzĖ_š`0ˆßļ×s[õ"„ µµ•T*EII‰Žß^×aÆŠƒ¬_枖–=ļQii)EEElŪ¶÷ß?c)žI“&eXN9åż§Óɜ9søå–[ ƚ¦éĢC ŌŻŻŻ455én¢Ž@ė^$In·›¬¬,„!ØØØą®»īāī»ļ&SWWNJ+xśé§õĮ¼7·—Åb”¬¬L_°§§‡¦¦&†®‹¹–––Œx³²²2=åCqq±nÉK&“¬]»–ٳgėżémSļuŒ9sęŠŲŲȆ ō„‚ī¾ūnžüē?ėī/›ĶFii);vģ`Ĉüą?`ņäÉHƐ4™Lē”eYJ½3õ“žhš†Ćįą’K.įŅK/EÓ4ŚŪŪŁŗu+=ö{öģAÓ4Z[[Ł·oåå™ ~Äķvćńxšł|ƒArrr2ö§R)ŚŪŪB“®ždggćv»ioo' ‘“““qŗŗŗ¾ā+mĮņ·z0;ŗ(¬ī$Ō!² XTÜła$ mWސAš#MgƒĻ* ’L(D»ķŲ½QŁ1:ėsŽČB$4™h·oE7Ł%‚N$Y#§¢!$Z·”¦2ėUS2Į6®œ…#;u8qx£X\ |Ł¤’}ż3[SØŖ’į²<šø|ĮŪ"UłĒ{‚ŁQ'żŅ@śŠyTS ņūUb1܁$<Żį1GhÕÆĮ‰hĶ!/©}ģ‘&ŒAŗēv(-†Ęf“ū~ƒhÜ×üŽ‹ #Ž}ńģˉ€ÓtõåH—]„äv!_š ¤Ūn‚ņ%ÄÓ/!ž™Ÿ.{v»ż“CžLÄb1jjjhjjʰ“E£Q>śč#āń8ćĒ×ß^·Ūĉ“ÕØ¾¾žxŸO?żTtƒįp8øļ¾ū8żōÓuĮ³yófī»ļ>=a©Ćį`̘1ś¹zŪåółˆD"D"B”===¬_æžßžö·“·gėöO X±b…žr”÷śļܹ“µkן)¢Ń(‡™3g2nÜøŒļ¹×ŗŲ+ÖŗŗŗtaßK~~>ÅÅÅlŻŗ•Ż»wgX5MćĆ?Äē󑝝MÅ oĄCQUUEii)6l`÷īŻŗŅīŌ |„Ü{‰l“ī(ĄßāĮꎓ[Ł;?B¤ŪξšĀ¾ąsMFgZu„€TBA؀HĒ^©©žu ³‡ž}ÜłaJ'“āĪÓYļ%Ųž^šVØ©„)£N-•Ž™źŪ&”¦d];t5x1Ł“i£°ŗ‹DŌBŪĪüāŖ·±°•–ł(fü>,ö$¾/ĮŽFfj\>"ėŚ”`÷|%ó=ƒ”<2„ÄćķķńA’ŗ»“$“Ś€ćB”‰Ańł÷Vhš Uńł46ĘųlS>čbÕŖn>’ēwkÖ¬aƆ „Ća^zé%6oŽĢ„ $‰ŽŽjkk©­­%sĖ-·dœcäȑtttéø·ūī»—ĖE~~>sęĢa޼y¬[·ŽG}”āābN9å 1›Ķ477óńĒė–Ćœœ†OžŖŖŹ† ųå/ÉčŃ£łłĻNAAćʍcęĢ™<÷Üs,Z“ˆÜÜ\]H577óōÓOĒłŽ÷¾—!€ĘØQ£˜9s&;wīԦޕžF’É'ŸšĪ;ļ`³Ł2bä¾Ŗ$cfŗöz鶂Œķ”.'”®žbD"·Pæ®ĻŖŠY70ó¾¦Éō“dŃÓ2ųŅÅĮN7ĮĪ>×­¦ŹtÖåe”‰m“īčļļ’w9 wŗŁBh2ŃM=_¼ģM{mŽī’2HšĄŒ ŲžČqRśČŠ4ųųcß»}šuĻ<ÓĖļĪųń™ēüĖ_xńÅBĮīš±ć\¼õV_ź!“²›ÄžZDķ³b)– Ž).²ē`©²”øŽßŅs'•ĄæqZ,–ξwŚ@žé’A1 !–œv’‚`·!Ņ՗!å |°Čēž‰&ļYõˆ¾cG¦—įłŠ“ŸŸĻšįĆy’ż÷Y½z5%%%ģŪ·ķŪ·ćńxøżöŪ̼²X,ŗU«×ŃÕėÖ)//§   C`õN‘ļ¢(|ė[ߢ©©‰ 6ąółhjj0iĄb±››‹ŪķŅ}VTTÄōéÓY¶l™žŸ ŠS(\|ńÅśĢ3Y–õĄõĻ>ūŒO?żt@}N§“²²2®»ī: -¶JKK¹ćŽ;xüńĒõ¬óuuuŌķŲ”eYäæå–[ō%k -Œ~ņ“ŸšĒ?ž‘††‚Į įp8Ćbåv»)­A^^÷ß?÷ß?›6mBÓ4V­ZÅC=ď~ō#JKK¹õÖ[I„RģŁ³‡P(Äʍõ$±żÆAvvvĘņ37Žx£žf£7®,č)8 =²w–iŻ«½ßYvv6·ß~{†{1‘HŠŃŃAaaa†Ėét2kÖ,łä“OØ­­eōčŃØŖŹęĶ›‰Åb̜9“¹sēÖĆ]Q.ŗč":::X¾|9æüå/ńz½z¬Ż7ŽČŪoæĶēŸŽķ`Į.¤x,ĮØź8:éz‰FÓāg0FŒpH 4§ü)ö6Dńū ¬ü‚¾ö !…T–,éäž§Žukż¤RƒōIŌÕFØ«šęm|ūÖ2žļ’FE…ķČEÖ/HöčÖ%!ŠĀÉ}ƒ[ŽŌžBŲf-"ŃĻČč Yd“@Ÿ•LPż)‚ļłšĶo#QpLśD‚D]”D]”Ąū>rn(Ā{M!¦œć#}N: _xZ4†xźŲSųż#p×w­mˆ'Ÿ‡žż«‹ aĘT¤ü”ßxäsNG3)iĮVŪŠwl?N¤KQʍG^^^†…HQŖ««q¹\)¬V+Ɔ C’$.¹äzzzxļ½÷ō|'Näŗė®ć“ÓN0ą+ŠĀ°aĆ8묳ō€ļģģģ ÷Yee%Ó§OĻTgžyꀣa½~ń‹_°bÅ /^LGG‰DMÓ0™LŗūuāÄ‰Ģœ9SÆÓjµź}†ōtūŸžō§±nŻ:B”Š¢P^^ĪW\‘ałŹŹŹā¬³ĪŅ©ś@›L&¬V+“&MāŠ+®Č˜ķgµZ9ū쳩¬¬ä­·ŽbĖ–-ŗ{Ńl6ćv»9õŌS¹ųā‹),, 'OžĢŸ’üg^}õUÖ®]K(Ņ-=V«•ŅŅҌœi999Œ;VwŁ•––źbØ““”ū￟ߒž÷zįp˜?ž˜¹sē2sęLŹĖĖY“h6l  ‘H$ōŁ n·›źźj&Mš¤_Ć^f̘ĮÆ~õ+–,YB{{»;ęt:uŃ8fĢ.æürjkkńūż$“ÉŒ„†ŹŹŹ˜5kēŸ~Ę÷Ż» śšįĆÜ[cĒŽåž{īaŲ°alŲ°ŚŚZdY¦““”3fpŻu×ežŽś¦L™Ā°aĆŠāābīøćʎĖʍéé锬¬ŒÉ“'sę™gņģ³Ļņ’³÷ŽQRÜWŽ÷§Ŗ«sœéÉ90‰aČ9J $’%Ū`Æåµveæė“kĖŽóyŸÕ®ĆŁõėĒ^‡µ,{_鑰‚,„Ų !Ā ¢`ˆĆf†‰LŻ=»«Ž?ši1Ģ ¤śœÓ¦ŗź×·:Ōļ[÷Žß½‚ žž>ź**ƒŒTž¾|ļ6&”łąƒžzźµgFO»ø(æżļF<žæśUöK”@ø$ŅȒAķ}½AD½Qܛzčy”HēČ"ībdw”ž’Ū†”q>‘Ętć=Y·„Ąŗ9Œ=S‡ņ’žBač½ ©µålŪ‰’™ŽŸ š‘$āܙȒ„ņ»’;āó·R`éõzžć?žcŲv“ÉÄ÷¾÷½aŪSSSłźWæ:dŪ}÷ŻGGGG|9ü„j2„„„ńė_’zŌē333yņÉ'ĒlæĮ`ą¾ūīcɒ%ų|>ŗ»» …BńÄēĮ•’’’2ā9ķk_ć+_ł ķķķčõśx¹‰ ±Z­,[¶ŒeĖ–Åó¼ā«&āķz.FEņņņųö·æM(Š×Ö²Łl8ŽĖz ģv;?ž8ū·‹Ė墻;VłĻįp0ě4sęĢK† óóółŻļ~7źóYYY|õ«_å+_ł .—‹¾¾¾xI›Ķ†$I£žćōéÓ/Y^”¢¢‚ŠŠŠxy ĒC Ąh4Ęߋ‹?³’M…! IDATĮbµĻ?’üØćz }>]]]h4šx Ž‹mļųĆØć b·ŪY±b+V¬²½®®ŽŽŽŽ!½3UT.ÅHŽ«wFšˆ¢(47ųż³McWņ§WŪøēn'}ł*óŽGYĶÕܼ,rE†Ą /® ŻcWńcC2®w»1N²`]t㯷­ĄB?’r0ˆņēõpī|cN“r²Ą3­m(ī­K]żB~ĪØw"āĢ©Č1V5ž"īĬ ō:ÜJK!\IŽĶÅ ƼøŅ÷h˜Ķę!e®N7$ x% 6¢¾“ŗV«%))i˜§źz0؃šzm2™Ęü^—ĖE?‹»ŻŽF£! ŃŅŅĀ /¼@$aéŅ„—,%”¢2HD/”ˆĀ0O–f 8Ź·”Ā±ć*+‡—š°Z%ŒF—+B 0(ž(Š/ Ÿ6Fńxīch brų yuȲ€9Ń ‚ŒėœPpęō!GD”16¾Łō§ģõ“k¢o~é ż`P¦«ėŹVæ " Ó‰äęÉĶ5¢Į@”īī0CģŠŲčēƒzčģł5{,s˜ø3§OŪäæ‚öWƒ(™čydcA@cŃdŠgĪ•‰ö‡ŃŲc’&ŲąĒ»§98ü5£ˆå®Ÿą·P`544°yóf*++©««Ö|b“x  ¾¾žĪĪNNŸ>¢(L›6mČ~BZ2<ø *ĘĒśŠ"B¢ćā.š£ņiX[·neĀ„ ƒĮ!M~G"³qćFŹŹŹ† ¬ęęfvģŲ1¬šųÕŚ5Z£ąAšššØ««Ćįp XėׯgŹ”)Œ7īŠ›_)¬[·Žū￟äääKī[YYɂ ČČȲ=‰šŹ+Æ\‘Ąźččą½÷ŽĆķv“@(b÷īŻ|å+_ņ~Ö®]ˊ+ƒtww#Ė2§OŸ¦„„EX*( ö)UštYˆ„4čM!¬mlĖ_?ƒ^žN ¶T·½9„¤‹Ņ^Ÿˆ,ߞ9^])±nC]ömGnŠĄŗž€Į !++vĶs{"¼łfīģ#8‚ø˜=ŪĮźÕWY3.…3g†mŽ ¬[ײJ@cјbN‚ˆ+Bߛ]„źF(>Ŗ0O·a™wż{_Š["°zzzx÷Żwyēw.;Į2ŲmŠs2cƌ!Ļ i)i)Wl‹V«%??ŸŁ³g{.//ė(­īTdYĘķv#Ė2z½~HĶ£®®.jkkILL$ ‘‘‘ŃhŒ÷Ū«­­ÅétR^^Ž¢(ģŽ½›­[·2nÜ8v»­V‹Ó餄„…h4J^^½½½ƒĮx1Õźźjŗ»»?~|¼÷į`«ˆywŚŚŚØ««#%%£ŃHBBįpÆ×K}}= äę꒑‘AOO»vķĀćńŠÖÖʔ)S°ŪGi āńŠŃс¢(tvv’™™INN¢(¢( uuuŌ××c³Ł˜8qbüü›šš°Z­œ:u ‹ÅĀÖ­[1›Ķ2nÜ8zzzØ­­Åd2QRRBBB‚ ąńxčėėcļŽ½˜L&ʏN§CQ”x£āXeę>/<{±żŃh”mŪ¶ŃÕÕżyóČĢ̌7žøīŁ…cėt:Ϸֈ‰­cĒŽ )**Ān·ć÷ūinnF«ÕŅŠŠ@qq1’$QSSC0dҤI¤„„!Ė2żżż“¶¶¢ÕjéīīĘétāp8ā…>[[[Q…”””KÖcS¹}š»ŒDB±‡‘–HDƒ¤ė„)0ŠmĘ` įBo ŃŪl'ą»}?ū€ÕHzŽsC…ŪÖ#ČŹ‡»n¼Žoż¹5/¶ŅŽ>ÜaQTlā'?)&=}ähÅe9~|Ä~¾ž¼<`xčšVˆŅ’V'ž-½Čž‹ĖĮƒ”Ō„ó‰ ¤„Op%÷C‡±mŪ¶!ķX.E8Ž7›=xš ²k\y©BŽcÅl6³dɒĒŅėõCšē~ŅčźźāšįƔ••Å Ęxß¹æū»æ£¼¼œH$Āśõė)..f×®]455±téR‚Į ŃhÆ×‹V«„­­ —Ėł ųė_’J8fÕŖU|ōŃGń6l ££ƒĢĢL^~łe.\ČĢ™3©­­Åļ÷SVVFUU[¶l!??Ÿżū÷#Ė2+W® ¶¶–’““©¬¬ä‘GĮf³Fńūżx½ŽK öŽŽ^yåL&ÉÉÉģŻ»—éÓ§³`ĮöģŁĆĪ;IJJ¢µµ•“'Oņ¹Ļ}ŽsēĪńŪßž–’’ $‰H$‚ĻēĆļ÷ćńxhllÄķvsīÜ9jjj˜?>ÅÅÅlٲ…iÓ¦ŃŪŪĖžżūłŅ—¾µŠ¢ąńxxöŁgćÅY«««¹ė®»(**ŠŪŻ××G]]“'OfźŌ©ń¢ØŁŁŁ—ōŲõöö²gĻ,X@4„ŗŗš””¢Ń(‡fɒ%čõzŽxć E”ØØˆüü|jkké?æ$ūÅ_ä¾ūīcāĉŌÖÖņā‹/2aĀŠ‹‹9~ü8‘H„G}Ax’ż÷ÉĶĶ%u”¦°*·‘ŠPO“¢āŲ½śŃˆO§™“āndYÄŪk†Ū4<8H{qĘ0„ķób=Ņ€{Źč®Z­€É¤A¼HȅB2~”1ų†įr…yćv~ūß œ:å6ʤIV~ü“bę/ø†E!{÷Žøy ¬Œ+X‚NDŠ ö-RÆ2t鋩÷f'®uDŗCĆ<”ĘIR¾›”äŚSZĘŹMX^ƗćĒÓŅŅ2d{~~>“&MBŖ««9sęLbĖ–-ń¼<ƒĮĄÄ‰™4ikÖ¬”©©‰9sę`·Ū)++cźŌ©—ō:†B!<%%%Üu×]TVVŅŲŲHQQŪ·o'''‡{®®.~žóŸs÷Żwć÷ū©©©įūß’>IIIøŻnœN'“'O&??N‡ŃhÄćńŠÜÜĢöķŪ©ÆÆ ¬““4ęĢ™ƒV«å‡?ü!+W®ÄሹØeYęȑ#tvvņ„/} EQāĶž/XŠ¢0¤āüŽ/& ŅŽŽ­„„fĻžÅbįĻž3õõõŒ7޳gĻņąƒ2wīÜxµxY–ijj¢³³“ķŪ·SQQĒćĮårqĻ=÷žžNuu5‡¦±±1nē„ .k—ŹķŽrŃæ#ŹE£‚É$Ń 3†Ń›ƒD‚7>YüZhš”GéöźaŪ“Ž?zĆ֔)6¾ł­\JЇNōĻž¾‰·žÜ>bķŖKŃŅąÅ[Xób ¢ōų3E–/O柾“ĻŒév“ZįźsTwī¶IŃj()6\ŃPę96%#% Cw=ۊwŸė²‰īhšÓ’zĢséZ`T4ŠX—9IüRś<ćMɽä¦_»»»imm‡ƒt:Ė—/ē3ŸłL.lrrr(,,DÅ!ż - żżżlŪ¶źźj’““ikk‹÷e())!33½^ORR ńd~Y–©­­„””ēž{EQšł|””” ±y0¬x¹<µK1Ų³o0hµZć‹J’’’(..&99AŲ¾};{÷ī%99™`0Huul2’$‰ŒŒ ŠŠŠŠh4”””pźŌ)Nœ8A$Įįp““sĆØÜx@Ž (blĘDIEŌ|<ƒ™~̉>z›ķķœ¹}Ü#:½]čÉMĀjĒÖ1“ž•cĻi»OŃ?·d”#Æ›M¢¼ÜĀŌ©CÓÖ­ėø¢źź‘ˆĢ”C~õ«³lŽŌM__˜ §Ėņr ßüV.÷-M"'ۈF#\ż¢śh6o¶ŁWR‚|©‡„¾Ų„.shøRs…u©ä°‚w拾W;šń ūä!÷† 3ĪæĶĄ4Ł‚&Q{Ӌ Üt%Ė2ŃčĒ ½°°|ņņrvļŽĶٳg±Z­<ńĤ„„ń«_żź’"ė駟Ҙųzb4łāæČ}÷Ż7¬Łń' ³ŁŒN§c``EQčķķ{ƀx`A$)>ÉK’’,AĄįp`49vģX|eā”C‡(,,$))‰¾¾>l6Ÿżģgć ~ĒD’$RRRhoo§°°0ŽßpĮ•‚ƒv †‹µZmü’—Ćļ÷ĒĆ_H’„Óé$ćółeŸĻ‡ŪķĘh4āõz1›Ķq”=hóą¹777ÓŠŠĄC=Dbb"]]]ƒĮø-}}}„B!ōz=ŻŻŻ¤¤¤ +!!““4¾žõÆĒm¼xUē`NSss3ń–D”P(žŁ\EQšz½ `µZ ƒFt:z½Fƒ ȲĢkƽĘ~šœN'•••8pˆŻt ī ÄmÆ®®Ęėõ2sęĢŅÖGeģˆ½%€Øłų:«(”+Ģ‹RdHHB#ÉĻ'½›}äHģū«‘¢82ŻųŻzü.#>—‘ģ‰m8sśč¬æ½æggŒc҆ƒĆ¶ē>ū¾Ā4øMė×*@gg_håå—Z©«ó ©ģ®Ó Ģšķą®ENdYį½ĶŻx½Qä Ś=üp*EEW*Ūæŗ‡× s»|3P5błV[ūˆ“‡P.ØŲ.čDL³­'[‰ö…ńlė#źĘŗƬĮ²Ą6ķĘę Žte4‡ˆ•ŠŠ 233ٵkæüå/iooGEźźźųÖ·¾…,Ėüę7æqāŒD"cĪćŗAąŁgŸE£Ń°dɒ&än5’$‘——Ēʍyę™gšł|œ={ö’Ē zCŗŗŗxļ½÷((( %%‹ÅBUU>ų ¢(Ņßߏ $''“™™‰ÉdbĖ–-Üu×]ˆ¢HWWĖ—/k4™8q"Ƽņ §NāųńćȲ|YQ\\Lee%Į`3fpöģYŽyēž~śéaūvww³mŪ6¼^/}ōeee2~üx¶oßN8ęĉ””„×;“²V«%--7²hŃ¢ø «®®F–eŖ««ÉĢüø™źŽ;ā<³ŁŒÓ錟F£aƌ¬]»– 60iŅ$<&“iH^ Į`ąŽ{ļåÕW_„··7VŻŗu+O=õŌćhˆ¢HMM ļ¼ó’$ŃÓÓĆüłó‡ˆ½ĮµZ-‡"55•÷ß’’c¾÷įp˜‚‚‚O¼Ē÷vGo ‘ZŌ3ě!GD:Ī\yDp@§ŪŒ3§ŸÄœ~|}F‚­ŒŲÓŻHŗ}Ķöó‰ņŠÓ@Zižn3~÷ķ{ͬ›9ŽŅķÕĆŖŗkžōm:×\[śÉ¢®ĪĒ7æ^Ķ®Ż}ų}Q.žC!…}{ū9TåFbbäā}JK-W&°ŽxcÄĶīłóÆŠśėƒļ€‡Ī’n"xŹ–‡E²•ŒoÆ’ĮóÅ\†ģ#„źŠoøĄŅWÜńö _ųĀ,»Ż~Uk½ ēĪćĉƒAņņņ˜:u*gĻž% ’’’Bcc#§OŸęŃGeźŌ©˜Ķföļß5/wĶx½^>LFF999— ?E£QŚŪŪ …BÜD+ĒĪ ·§ØØ­V‹Åb!//ÜÜ\ʏ@ff&.—‹ŠŠ ²Ļ×8)++Ć`0ÄĒ™žĶf#33ƒĮ€,ˤ¤¤’’Bqq1:Žśśzņņņ8vģżżżĢæčŠÕÕE[[„„„ōōō0{öl/^Œ^Ƨ¬¬ I’Ø®®&))‰/łĖq1d4)--į\yčķķeĀ„ ¤„„QWW‡ÕjeƌĒC›3gΤ„„›ĶĘć?ŽĆįˆ{ЦNŠÅbaÖ¬Yœ9s†£GPZZ:¤J¹ ¤¦¦2aĀ<‡ĀėõĘCėŠEQ‰'¢(J|e£ äää ×ė‰D"¬\¹2¾]§Ó‘ŸŸÉdB***8vģķķķ¬Zµ §Ó’~Ųl¶!ßo³ŁLmm-,Z“膗ɸQō6W!GoN?µ¢@`Ą@oS½ĶŽ!¾V;!ææŪ+’£"}­v‚ŽAo©€"ƒ»ĆŠÆßČQŸĖH›žsv¼½&¼½fzĢ„ƒ~w‡õ‚’!Ÿ–¾Ēłm·oØ8Ŗ“p§:Č=4üfRŪļCŪ؆µXµ¢(D"d„®3–›FģsØ­õń§?µx\A‰%÷&‘žn²żƒz8pĄ5by…Ģ,O<»·4ūłõÆčķż»Ę„Öą#śųÜēŅ)+³œßWįlC”ƇLää䐕•EbbāĒ^ķH.ŗŃŒ$$Šś½ļŽFŁĪ‡xtG=”°Bą¤ļī‘[JM˜¦ŁāU×ńlé%Xļ&˜€¾ŠˆõžŲd Ś‹{cO¬0éØo‚‚¾ąłų!bµ°C”JXAS ķ6ŅÓÓINNĘjµ¢ÕjEqLÆ×{źå—_Ž~į¶›īĮ’$‰I“&1nÜ8ŖŖŖ8~ü8ķķķL˜0É“'sģŲ186‹/fõźÕD£Qžyę™[R³ŖÆÆŸżģgčt:.\8ęĢķˆŻnēbć`·īīn¼^/………lŪ¶ «ÕJRRZ­–Gy$~¼N§ćńĒbŸeyy9åååńē‹‹‹ćÉŻKšæ«ÕŹŹ•+ć«™ģœóņņų‡ų‡ų߃Ēåå呗—ß …ųč£ƒĢ™3G-ĶpKb}Ö.³‚ļĀēłā}…‹¶2ęąß#¾ŽÅcܾ“ŽĻāōü2ŠwÖ {μķ#ųę7įŁgoe££ĄU­4¼j6l±ENß²e(·Š[}'”Ƽ%K}***X¹r%ŻŻŻ455ńĆžyóęaµZłąƒšūż$%%ÅW V­ZE$įłēŸæ¦Dß«Åårń“Ÿü„ż×ežüłčtŗa"Kl6ېU^w Į`?ü“'O’––ĘźÕ«),,¼ü7ŸĻĒ[o½…Ļ磼¼œ„K—ŽZi~4¾üå/øŻb±PPPp]ŖĻ«@uu5»vķböģŁ—¬ĀÆ¢r»rhåt›{Hj."ųżļĮį€ó {>•ü׍ø¹÷Įo²!w·D`‰¢ČņåĖ‘e™?żéO“¶¶ņē?’9ž\FFO<ńD<‘bćźÕ«‰D"¼üņĖńeū7—Ėŏücž~śięĶ›7Ldét:ŹŹŹnŗ]׃ĢĢĢQ=>7QÉĖĖćßžķßnČų999äääܐ±?L™2E­ ÆrG#kDv>~K¹Sæwų?ż)D"šžĻ˜ĒŌėERGÉļIHŌ¢Õ÷üX­©©z 5!p:?K+ ¤¤čÆĮ…3ŲVē²ģŻ ~8l³æøYŁč®4A@4 hœ#;D‹„0ŠIŃŖAJŅ”D‡ž›Ø/č(č¤D‰čU¶üŃ$hµ7ŽĖzˊÕH’ÄĆ?LEE»vķ¢¦¦EQp8<üšĆƖ©C,”±zõjA`óKFokÖ¬!;;›ĀĀĀ;6TØ¢¢¢¢#`5Rł÷÷°ų™Ķh#ōšūłĻ”æžy.Eøė®DjN.ńy­$`0 ĻSüī“ł|ć[¹#¦ĮHˆ‘’R ;*g_“Ą2›Ę–')üūæø½ė| ĀhˆFūŠd¬÷\Ø[Њ# œ”ļå’üO#Ÿ—x˜²Ģs`šn»ś0” ŽUd^·“  Œ7Žqćʍł§ÓÉ7¾ń ¾ńoÜ@ĖTTT>}Ø«?Ķōe&²żkKøē÷ļ” E†ļšÜsPSk×BŹčmŁb«pö+ū> ā˜="Zƒ•Ą„łœ~y ßł†ŗŗwÕ¬[GźĪxž|’HŹtĀįB”^‚Į ņM-Vuå †Į”óżdsrrȔ$ņ¾ūݘ[ė"¦N„oéŅaŪ5 …B:Y‹5jĘIĄö‡ļˆ÷@E“Z-6[¬ČØŻnGÆ×¹Ąč„P–ŠŠŠ  ·$cO+§§ń#†•’VłŌ ÕY°&”5Ś ™8³f ¹?ų¶ŹŹ÷{z(ž—!qĮ>śÜēh/.¾%µÆAŠh4˜L&’­Vfžėæ"µ·ŪO6ižį‡Uµ(ƒ¤¤$dYĘn·ć÷ū‡ō¾ģ-k4q88NL&ÓuéH” ,@5$fM"čéd ·įV›£r 5:¬É…X“‹·ˆ¢f3õæü%’żß¤¬Y3jŲ+iēN–ķŻK÷ē?OŪO±Łn¦éW(Šč€¼ļ~Ó”C#īÓö’H0käī׃Ėįp Õjq:±B·¹÷źB4 ’$a00™Lń|4Ճ„¢¢¢rtf’ņg#ˆžžFPīœIBåŚ“¬©„$dT Ń^Ō9B9÷O’„gęLr~ō#“#xy„p˜äW^!ićFüO>IšļžÅxū6¼,_ż*ŚķŪG|¾ÉŗFHl‡“ĄŪĒét:¢Ńč%®E1.“.ō^]‹ČR–ŠŠŠŹmi$åĻEgNĘÕ^C$č¹Õ&©ÜP 'Žō‰˜¹čŒöQ÷ōĢ™ĆÉ?’™Œ_žēڵ£z³„ž~LO?é7æAžś×‰~ćą¹čę-„§iÕ*„Ŗµų‹ŠhśŃFmx  I’$ EQnIĻąkåĀŅ ź*B•„Žœ„3ŪŠŃ–Jp ‹€·—°·—ß…,ßł5*£#Jzō¦t¦DōęD ÖTŒötDńņSbŌl¦ł’o\‹‘żć£ķź}ēīnÄ’ńæž žxå;߁ÜÜėx&×@e%Ā—æ MM#>NIįģ/‰¢į Š|g$戴ŽØ‘Šhh“F$Qséö7#į^°€š·ß&uĶ’_z ńRżq½^ųõÆ~ū[X¶ ¾ö5X¾®C"õćõĀæųÅØ½#N'µų”ĢĢ1 łIU7U`©ØØØŒBLhéŃhõčHøÕęØÜfČf3mßųŻ>Jś3ϐøqćč ¢QŲø1öČĢ„æ’{xüqČĖ»ńĘF£šĀ šo’ēĪŗ[8)‰ŗgŸ%x3lś„£¶ŹQQQQQQ¹Ā©©4żčGœzåÜóę]2g)Nk+üčGPPóēĒI_*ÜxµtuĮO ……šÕÆ^R\ł‹‹9żŅK® ?°ŹčØ,•뀿“”śßžćéÓ¤¼šŽ÷ßGø\=(E‰õ8ܵ ¾óX²>’yxšAHJŗr#¢Q8yŽ6l€ŹJC].×=÷Šų£!›ĶWžš*#¢ ,•ėˆæø˜Ę’üOھłMR^z‰ÄwŽA /`$›6Å Ģ +WĀCAQŃŠ}hlŒ‰©Ó§ccĒbŸo̶Źf3­ß’>=?|…g©r9T„¢¢¢¢¢reeŃņŌS“}ó›$nŲ€óĶ7144ŒķąhvīŒ=žłŸ”¬ ²²b!¾¶6čķ½fū\‹Ńśżļ„ˆØŹµ” ,•ė€ ’śüóhśū‘Ün4.’Ė’[ō^CŸĖššŲć:૨ąÜw¾ĆĄŌ©×e<•‘Q–ŠŠŠŠŠŹu@ŃjIyžy„Ū°’¹"Iøī¹‡®U«šŖĀꦠ ,•ė€"ŠD’“ŃvtÜjSb ųfĶ¢wŽ<\wßMųj’ęU®µLƒŠŠŠŠŠŹu"œ’r«Mˆ1ŲlDĘ\‘]åś”z°TTTTTT®””L×q<Ł`@6™¢Q4.×+õ÷“ųī»$¾ū.ŠN‡gölśļ¹÷]w±ŽsQåś  ,•ėD8%…ØÅBŌį b·µŪ‰Ųl±æm6dƒØĶ@ŌjAņƬÓ!›LD-d‹EŒšYĘtō(öķŪ±oߎ¾±ńŠģB!l••Ų*+Q4¦MƵd ż÷ݧŠ­„L¾ŅƒÖÆ_’ŁŁŁß{TTTTTTT.ƒ¾±{e%¶;1WU]¾ é((Z-ī¹sé[¾÷¢EČŗ+ļĖØļ,]ŗōß/ܦz°TTTTTTī0‚¹¹t>ö=†ĘćĮŗ{7ö;±īŚ…Ōß?ęq„pūŽŲwģ j±Šļ½ō<ś(¾ņņhż§U`©ąółhmm„««‹üü|ŅÓÓĒ|l$”µµ•¶¶6RSSÉĻĻæ–ŽzdYĘårQWW‡¢(L›6 Q¼õėEZZZØ««###ƒ¢‹«>«Üvčļļ'++‹¬«,ö …Ø­­„ÆÆŅŅRœNēu¶ōĪ#‰ŠŽŽĪٳgÉĶĶ%33FsUcɲLoo/µµµŲķvņóó1 ףāk#jµŅæt)żK—‚,c:u ŪŽŲ*+1<kĒ348ß~ēŪoć++£ēŃGé{ą5Až*ŃiWzоš…Yv»}Ź °Gå ( Ńh”ŗŗ:jjjhii”„„…śśzZ[[EQŁ·oÆæž:‰‰‰ …Ų·oįp«Õ:Ŗˆ‡Ć9r„W_}•h4ŹäɗŽ:»śdjk"ž(Lw‡ŒF«@8 'F8V”µ)ęī¶Ł„±4N½‰(ŠBGGo½õ;vģ`éŅ„HŅ­æW©­­åē?’9Š¢0cƌ[mŽŹešł|ģŚµ‹uėÖa2™(--½Ŗq‚Į ;vģ`͚5(ŌZ[[9qāƒ“éz¦`Ē^ß¾}D"‘K^'n&įp˜“'Oņ‡?ü³ŁLqqńU’FE”½½^x––ʏłvī×'„““˜>žG„÷Į „§£ńūŃuvŽYli»»±WV’ōę›hūśäē#[,7Ųų;Æ×{źå—_Ž~į¶[’KP¹įȲĢ|ĄŪoæM}}=mmm“µµŃŌŌĞ={8pą “?.šī»ļrüųqĀ—hŖ×ė7nܘAh؋ņ?æš²’Ć žŲ>QhmŽņ§ē¼üå­—‚rėõE"\.~æ’ŠŽE‘“““«žÆ'½½½ų|>EaźŌ©$&&^—qE”µµõšĘƒōöö½ŹÜO:6› &ąp8®i“ÉÄ“iÓŠjµ£ŽŒœ={–M›6ŃÖÖvMÆ5ƒ×‰šš"‘Č%÷•eĒƒĒć¹īv\ˆ^Æ§ØØˆäääk¾AE‘ĀĀB²³³/¹_OO@ˆż~"‘·A=¬PF]_śg^xźĶ›iłĮšĢœOžæ·›ä—^büŹ•d’ųĒčZZn°ÅŸTõ)ąčŃ£<÷Üsää䚣Ļ~–G}”Gy„Õ«W³pįBt£$5 –/_NEEZ­öŗŁ“’&2i†J'j),Ń F“ČŒy:œ2²5L˜¢E#Ż8ļUkk+ ««ėšĘ¹U6EQŲ“i­­­(ܕ^{ټyó5qģŲ1:ŸtT†#××C;ŚX,[¶ģ’”’žž~N:uÅÆi4Y¾|9åå嗽Nō÷÷³oß>ššš®ųu®–›ńūT…µk×ŅŻŻ Ä„ä©S§Ųµk× ķ+!œ”D÷ē>GŻžĄ‰Ķ›i}ņIüc¼QĀaœk×RöšĆä<ż4ś±öTüsėć*7œ7ŽxAxšĮ‡„“Z-%%%£ę~455qöģY$I"##I’ččč`Ļž=hµZĀį0²,sļ½÷9N–eźėė9vģŁŁŁ”••]“K½æWęä±®~A€üqYyjkĀT3i†Ž®™HXaŽ=zBA…=;Bh4 *””k),śUļķķeėÖ­TUU1qāDī¾ūnņóóinn¦ŗŗšh4J$”°° &Œšæ100ĄīŻ»illDf̘Aii)‘H„ƒŅŁŁ‰¢(‚Ą¼yóˆF£lŻŗ·ŪͬY³˜8q"n·›ąv»Yøp!’$qģŲ1ŗ»»E‘¼¼H$Āŗuė…Bōöörß}÷a³Łā“,Ėttt°oß>$IBQJKK)**ĀćńpāÄ ŚŪŪ‘e9~žĶĶĶģŚµ‹ŠŠ hjj"''‡£GR\\̬Y³0›ĶŌŌŌpęĢJJJ())‰Ÿs$!!! & ÕjŁæ?żżżröģYrrr˜2eJü³–e™öövöļßYóóó)))”¾¾ž½{÷āt:ńx<ø\.œN'+W®Äl6‰DØ««ćčŃ£čõz:;;éæDBņhooGEX°`iii#ŠæßOUUµµµD£QJJJØØØ ŅŌŌDmm-ééé$Æę}ęĢNž<‰V«„§§‡sēαhŃ¢!cʲLSS~ų!Š¢`4 99™éÓ§“’’Bcc# čt:222Šh4ttt°{÷nt:įpEQ˜7o}ōėׯ§““Æ×‹ÉdāčŃ£Œ?ž‰'R__Ļž={(--„¤¤„C‡Q]]ĶņåĖ9|ų0ƒ{ļ½—ŗŗ:Ž?ŽF£Įh42mŚ“Q½·§OŸęwŽĮėõ’’’Āüłó±Z­lŪ¶źźjJKK™5k’$±’~zzz˜7oވb“ææŸ;wār¹$‰»ļ¾›ŌŌT8ĄŚµkE‘qćʑžžĪkƽF__ deeqāÄ z{{±Łlx<ŒF#Ó§O'??’–„UĆIIt=ö]=†”®ŽÄI\æ©§ē’Ē Ń(‰ļ¾‹üxŗņņnޱw(ŖėŽ,ĖģŻ»—āāāEŽŻn'##cÄc •••:tˆP(„×ėåžēhmmÅn·c±XØÆÆĒuQń»p8Lmm-ēĪĆh4^ÓÅĆė‘łhWˆcĆX­½Ż2Ūß ŅŅÅļ‡m›BTķ ō+Ō)¬{ÕOc]«M$‚7_ōŃÓ54ÖØŃh…Bų|>, ƒ®®.Ö­[Ggg'6› NĒ+Æ¼Ā©S§†xˆ.DQ4 &“‰cĒŽńŽ{ļŃßß(Š‚Ćįąƒ>ąĄȲLgg'kÖ¬!  ŅöövĀį0{÷īe×®]X­Vśūūٲe §OŸņŗ‚ Ė2n·“É„ÕjE„xhĀb± I|š;vģ@Qjkkټy3˜L&>üšCöģŁ3,DŖÕjéźźB’$Z­–öövžųĒ?Ɵ?|ų0[¶l”­­]»vŃÖֆĆį §§‡žž~ōz=}}}ˆ¢ˆĶf&PƒĮ 7n¤½½»ŻŽ,Ė444‡Łæ?»vķB§Ó łĖ_žĀ™3gŠétüõÆeĖ–-øŻnŖŖŖ0™L¼żöŪģŪ·&ę õz½ģßæƒĮ@]]›7oŽOh»vķb÷īŻ„B!š››Yæ~=§NĀćńpśōiä zČžņ—æÄmŒF£466‡Ł·oß7nÜHmm-z½žM›6Q]]ŁlĘl6óĘo°wļ^E‰ön·‡ĆÅb¹dņõ p·Ūķˆ‡}»ŗŗxé„—ƒŲl6śśśXæ~=¹¹¹ĆĘ ‡Ć>|˜ƒb·ŪŃétTVV²}ūv<ƒķŪ·säȑųuā÷æ’=mmmŲķvĢf3õõõøŻn &R, f³9ž‡vāÄ ąćkĪŃ£G ‡Ć šśėÆsüųqE‰{œ×¬Yƒ¢(čõzŽ=ŹęĶ›G EK’·ćż÷ßgćʍ„B!L&ƾś*'Nœ@£Ń ( ===ŌÖÖŽź‰‹F£ ¬V+;wīdėÖ­ųż~E‰Ÿ—ÕjE£ŃŠÓӃ^ÆĒf³”ÕjiiiaėÖ­(Š‚ŻnēäɓlŲ°sēĪśłß,……œūǤśÆ„įg?Ć3k\ĀóŹČ ū‘Gn¢…w&ŖėŽßļĒķv_ÕŹ¢¬¬,l6[\ UUU±sēNžžy²³³ ‡Ć¤¤¤`4ńžļF9sę >ŸåĖ—“““sIµoGˆīöhü·ģ÷AoW”œ‚Ų¤ÓŁ.sģ`˜q„³ļŅį8įĶ}“4JII)f.Ō‘S(įv)lZą’ĢFéD‰Īv‰æ¼åēŌńsļžŲd·ŪIMM%99™É“'“••ŦM›hnnfńāŔ——‡Ł¶m7n¤¤¤dĉŠd21eŹ”ųśįƇééé!//9sę`6›1™LüõÆ„¶¶–¹sēņŠCńöŪoÓŽŽŽ H’„Ēćį‘G‰/,ČĪĪęī»ļęŌ©S¼ųā‹ŌŌŌP^^÷\ z¶t:&L`Ś“ińpSBBóēϧ¼¼œöövŖ««yšĮ9räŻŻŻ¬ZµŠ¤¤$N:ő#G˜4iŅ/frr2N§Y–™?>‘H„ 6ŠŅŅĀSO=Ä&ɽ{÷’ššJ]]'Nd޼y”””`4±ŁlX­V²²²˜3g–‹’cĆį0UUUĢ;—łóēćółp»ŻtuuqąĄl6÷Üs}}}8p€źźjzč”ųŲ³fĶ"''‡‰'²hŃ"jkk1 (Š‚(Š”••‘™™É»ļ¾Kgg'Ÿ’üēINNęĢ™3=z”)S¦––†N§£°°‚‚śśś†|ʃ6Ī›7łóēćõzńxxņÉ'IJJāĉ9rdŌßĒģŁ³IHHĄd2QUUÅŃ£GYµjՈūźõzJKK™={6MMM¼šĀ ģŪ·ŠŠ RSS‡xÆOœ8Amm-_ūŚ×ČĢĢ$55•?žńøŻnRSSćū‰¢ˆĆį 55Y–Y¼x1Į`:Ääɓ)))ā¼N¼ųā‹dee …HMM%!!œœģv;åå唗—ÓŠŠ€ż|‘KQć׈ łÜÜ\$I";;›ĀĀBrssŁæ? <õŌS‚€Ē㔲²’Å‹“2B›šÜÜ\-Z„(ŠøŻnÖÆ_Ļ<Ą¬Y³˜Ÿ¶¶6Ł“i’$qīÜ9,˘“½ q¹\„B!RRR˜5kVüœ iiiĆŗ/ž  >ūŁĻ’™™IUUĻ>ūģem¼T Y–ńz½ †1}–ÕÕÕ¬]»–yóęQPPĄ™3gƜ>ų=ķę*//ŸĻGKK N§“#GސššE—c0„6RX.Ē…Ū -^'®Q …B$&&yļ%IÓ÷ųb3ž|žyęvīÜÉųńććaŪ±p­Éóƒ«>ÆD Ż "‰‰“’Ć?нjÉ/½„wźŌ1Æ@ü“£ ¬O8¢(²lŁ2žņ—æŠÕÕErrņēikkcÖ¬Y—+%%…žžB”Ј…ö ………Ģš5‹×_;w’}MEł“:½AĄd((śuõø‡O6‡p~Eāšż/‡ŻnēܹsCJRōööŽ.ø§OŸ& RPP@nn.‹eČ>qāD Y·n‚ °bÅ vŃ5›Ķ †ėZ,T§Óa6›’’öī5&Žó~ōųwwgwg—–;0wl|058¾äb§•£øMRµ®”*jŅŖēEßżŪ*/«žÕž¾©ŚźØŖŖōE„6§Jš&§±r±ccƒ©m,;`ĢÅę¶Ų ‹YŲŪģīyĮ™)`l“x}IśūH–’efö7Ļ3óĢožyęYfggÉÉÉłĢū”ššŹąą „„„+£…B!²³³łę7æÉŽ;xć7čīīę¬c褤$^xį¶nŻŹ‘#G8{ö,EEEFĻXYYŁŗ«ÕŹ /¼Ą’ųGJJJØ®®Ęf³a³ŁŒ±hŁŁŁ·ūė±<ĘƇsīÜ9ć±Õg‰–ĪÅääd†††ŒDśNśūūYXX øø˜’’Ün7£ė|E>0??Orr2.—‹«.oŚ“‰Ēœ>ų€sēα°°ĄĻžóu'~æ»Ż¾ę¹““c“·{Cyµõö°ėćсĄ-ĒāzĢĢĢąp8ŒżLIIa×®]9r„X,ʎ;Ų[Įz[RRŅēžõAŅŅŅ’ÉOv_(’†žųŽ÷¾Ē† ųӟž“¢K?‰põźUśūū×ÕØģŁ³‡h4Źo¼qĖ|/°tw˜’’BMM Ū·o7ʌ܋Œ,3ٹfŗŚ#LŒ.Ż-G£p»›¾’r…Ü3Ž ʼnǗ–]kü«Åb!‰ū²uėVø~ż:ŃhŸĻGgg'{÷īżĢõ- óóóƒAęęęšūż+īTķv;ßłĪw8uźåååFχŪķ¦ØØˆ .0ü’Ģ5®ŁS`³Ł0™LĢĶĶŻõ•œœLYY™ńVœ¦iĘ“kŻAŪl6ćķ6EQŲ¹s'œ8q‚X,F,#244ą 0›Ķ‘žžŽĶf3£ųżž5cƒ|šĮØŖJAAłłł˜L& ٰaōööŽ1FÉdāÉ'ŸÄįppžüyvķŚ€Ė墬¬ŒÉÉÉuķój@€?üpEŒĄēŠQ/Ē•‡! IDAT;vąõzAļzĻāķ–ŸŸŸ'  …øqćĘŗ{;FFF˜˜˜ ŖŖjĶy¶¦““”üü|ŖŖŖV́w' x< Ö|Af÷īŻhš¶f;”戔)PU›ĶĘõė×ńł|ܼyÓx|»½®'''9vģ؊cńnB”gΜįÉ'Ÿ4zM&_’ś×ąŅ„KTVV®« VÓÉŁŁYć3EQŒż«E£QHMM„°°P(Äļ’{Žxć5»Š/&™Éż?€Ćį`ūöķLOOóńĒoi544Š××g4ĀĶĶĶ“¶¶ …ČŹŹ¢««‹¦¦&|>ééélÜø‘ŖŖ*źėėyė­·hnn6^żīļļ§©© EQØ®®fqq‘ĘĘFFFF(**ZŃ{0|E£ńpˆĖ—Žśs„šy¬ĄĢĀ|œƒ’7@Gk˜ĄBg’™Š*…ō,3żŻr¦1ĢÄh””4 }]Z[ĀÄ4ČyĢBŠŪ„b5Q^„p¶)ĢGļ8×ft$Ji„‚źX™D†ĆaŚŪŪinn`Ė–-$%%ŃŲŲČéÓ§9qā555|ūŪß^ńX'‹1>>ĪG}ÄČČX,Ž;F?łłł”••qłņe:ħŸ~Źüü<^ƗŅŅRrrr0›ĶräČ~śÓŸwŌŖŖ’••E?ļ½÷'Nœ`xx˜ĢĢĢ[^C·Łl\½z•ƇÓ';vŒH$BII ÓÓÓ>|˜ŁŁY*++Ł“iŃh”ƒrčŠ!Z[[q:äęęŽņčÄb±pčŠ!Īž=‹Ćį ®®»ŻĪ{ļ½Ē”C‡hkk#“‘‘ASSG„„„“ÉÄŽ½{)(( ŠŠŠ@kk+999dgg‰j8ęȑ#Ō××ÓŽŽĪ7xńÅ)++#33Ә*¢””Ė—/óŲcŃ××ĒńćĒ ƒdggåØi dggóŌSOĻōōtb±ŲŠ}VUEQhnn¦»»“ÉDyył-īō;ʅ ˜™™Yćčč(0bĢĻĻĒćńŠŠŠ@(bćʍ|śé§>|˜¹¹9jjjØØØ rąĄŽ=JWW“““D"JKKß°” ^ŗt‰?üĪĪN¬V+½½½äęę)u‘H„O?ż”Ė—/sņäI.\ø@]]Ļ=÷333466rńāE"‘EEEʛ§OŸęüłóœ;wŽćĒ366ĘÓO?½bŪ‹‹‹tttŠŃŃĮÕ«W©ÆÆĒårńā‹/’••Å©S§hll4¦¤Šµ#GŽšöŪoÓÜÜĢ•+W(--EUU©ÆÆēęĶ›Ęx½††Ž?Īõė×drr’ 6pžüyŚŪŪ±Ūķąr¹p»Ż8N8ĄĮƒimm%RVVvĖāōō4===“““pųša222ųž÷ææb¼]rr²‘˜×Ö®}Yėė룾¾žėׯS\\Œßļ§±±‘””!JJJŒGø}ōƒƒƒlß¾Ż8×zzzHIIaaaĘĘF®_æĪɓ'¹~ż:ßųĘ7Ø©©AÓ4:D<§¶¶6į³ķ‹ūo­™ÜMĄ×d üIaaį’LT`āžŅ{7B”‘HÄhXōĻķv;Š¢ ‰D"X,ģv;±XŒ`0ˆÉdBUU¬V«1Ž$b6›QUUŃ4`0hLY i@“É„Óé\qjqB”8‘0X,`SMX­Kæą ĉD–ŽVUVŪRT0GӖ>W°ŁMD5ć(ŹŅ²f‹>}AœEœhLę„åU‡Éē„ÓcŒÅbŲķvl6š¦‡±+V«õ– o<'‹±øøH,Ćįp`±Xƒhš†ŖŖ˜ĶfB”1xU_Ēįpc/āń87oŽ\ńó"śrz]čɃ^G«éƒ«õ:[\\Äl6ćt:‰ĒćĘ+äN§sEž¶^Æ«/Lš¦į÷ūŗ·Łl„Ćįė.?n¢ŃØ1īGUUc } ˆåū KIj X±ž¾=}’õ1q‹UU2×÷ułöāń8”PȘ«I‹ÅÖÜg½¾"‘ˆńHrõ¤Ÿw‹1u“VŒ‡ĆXžż(Hļ‘ZN_~ł£¢åßa6›śs8·ŒiŅ—Åb+Īk›ĶF,# ‡ćŁėõņöŪoóŹ+Æoķµµµń»ßżŽ·ß~{Åx¦©©)Ž|óMĀį0?žń‰ÅbF¼&“É8.īÖNčõ¢ļ“^īśy؟ozøž·P(„Ķf3¦|‰ĒćD"c½^ōŻåē©~źē•Ēņŗƒ¼žśė¼üņĖ·}›OÓ4ćō8ōņ֏ķÅÅEĀį0Š¢sžéĒ‚¢(œ8q‚śśz^{ķ5rrrŒ±izū°øøø4¼į§¶ĒäääGūöķū_Ė?“1X’ō†DUÕ;އZė®iuCn±XŒyõēĖ—ÕĒĄ¬ Äłļ’ŗÉĄåŪ’ōĪżPŗQį÷’ĒĶņvKQćĶ?Żķā^Næ ®^wõ ģ»Ķj­'YkŪė˜uõr«c_ƒŻn_׀c}¬õ¬{»XļT–f³ł¶ėé āZĒćķ¶§_Ü׌Ög{½1Žiæļō’w;×óŸeYż¦gyy¾’žū”——“““c$>[¶lAÓ“5ĖJ3¶Ö­µŹ÷vķ¬}ĢŽ®^m6Ū-ǁžFązĪÓ»•³ž¬išvŪłįßĆ–[ėü_¾oĖcŌ“F=Į_½®ž&§ųr‘K`aa!įß½yóęu'n‹›ĶFWW---„B”G®ĮHæßĻųųųš³ŁlÜøqƒ?ü@ @zz:YYY8N:Åžšśśśpĉ„’@yGGļ¼ómmmĖÄb1<Ȼヒ×ėEUUb±ćććtvv‹ÅhĢŖŖråŹšššČČČ 33ӈóÆż+3334¦ūįęĶ›?~œÓ§O––fü»vķƒƒƒX,6oŽüĄĪĻłły®]»†Ķf###ƒ¹¹9š››™œœ$##ƒŒŒ <óóóŸyŪsssĘåĘb1&‰$z7īŁŠŠ'Oždnn·ŪMFFÓÓÓ\½zõ‘wppP(“®å§§§ioo§²²’]»v‘ŸŸŸ#ü7“É„Ó餳³“ĘĘFRSSÉČČ`dd„æżķoĘĶĘĢĢ ü1­­­8NÜn7iiiŽ9Ā… Œżmoo§©© UUIKK#33“įįa†††ƒōōōĒļüü<'OždzzšŒŒ œN'ćććĢĪĪ>°2ų2y`™ƒŖŖlŲ°ģģl¬V+»vķ¢  €X,ĘŲŲ’üē?y’ż÷),,dēĪ÷„Ń\ĻRŪķv#Īh4Jqq1III åaÓ4žž<ƼņŹ-ĻĪĪ¦ØØČøsڶmf³™@ @EEæłĶoųĖ_žĀÆ~õ«/lł86lŲ@ee%ƒƒƒtuu±}ūöw‰ĒH¢ Œc¶¦¦†‚‚‚ūŅćz'łłłäęęār¹Ø­­„¤¤XŗųgggóśėÆ£Ŗ*?śŃh\‰‹ÅhooēģŁ³<żōÓģŁ³Ē8Ęāń8YYY„ĮWU•ŹŹJ***HNNĘl6ÓŁŁIee%»wļ6b’¬ēĆÜÜmmm$%%‘‘‘ĶfćŁgŸÅf³}īŽČ©©)ęęęČĻĻOxX__×®]c’žżTUU——‡Ļē[Wū =żōÓD£Qć©ÉŻ,..255…Ćį --ķ>Gw«²²2222˜ššā©§žĀjµ²aĆ~ö³ŸńÉ'ŸĶŋłä“OŲæ?O<ń„Ń[åółx÷Żw9vģŁŁŁ”––ņÆż ‹ÅĀŽ;p¹\Ę›ĶĘÖ­[yę™g°Z­“µµ±qćFvļŽM  ÆÆļKÓ+ž =ō®³ŁLAA/½ōēĪćĉ”””ŠŌŌÄåĖ—łõÆĶĀĀ'Nœ §§‡—_~™h4Ź”C‡ˆD"$''ćõzÉĪΦ¶¶ŸĻĒåĖ—‰F£|ė[ßbóęĶĘĮׯŻĶšš0³³³ńā‹/’‘‘q×oÜøĮŃ£G%55•±±1¢Ń({÷īeļŽ½Äćq9~ü8“““˜Ķfb±[·nÅétŅŠŠ@AA±ī3Ļ<ƒŻnēōéÓ,.. łźWæŹ¦M›8zō(ĶĶĶl޼Æ×K `Ó¦MTUUŃŁŁ‰×넸ø˜ēž{Ž‚‚4M£­­žž~n·›ēž{§ÓÉ{ļ½Ggg'Ū·o§»»›x<ĪŽ;xžłēąż÷ßgll §ÓImmķšĒVs8ŌÖÖ²’~žüē?ć_ęęę8sę ccc˜ĶfŹŹŹØ««ćŅ„Kœ>ĪČČFļVcc#Ļ<óŒŃc¤Ļhnnfzzšüü|B”'Nœ  RZZŹąą ¹¹¹ĢĶĶa±XČĢĢÄćń°{÷nJKK9uź×®]Ćn·ĒQvv6‡Ó§O“™™IJJ 333ģܹsEĀw;ÉÉÉģŽ½›3gĪŠŲŲČžżūFśĢ™3ųż~E”ŗŗšāābΟ?Ooo/N§ŸĻG(¢¦¦†¬¬,śśśšz½äęęņƒü»ŻŽ¦iōööŅÖֆÕjEQ6mŚDMMMĀ/Ŗ³³³tttąp8Ø©©Y‘°˜L&ŹŹŹkŽ„…Ćazzzččč@Q¬V+ÕÕÕTUUĒéźźb``€p8L,cß¾}F]544 ióóóŌÕÕńųćÆŲvJJ •••w¼ŲŌÕÕįółhjj"‰ łŚ×¾Fii)š¦qźŌ)¼^/&“ —ĖŞ={hoo§¾¾žŌŌT4MĆårŃÖÖFNN{öģazzšcĒŽa³ŁŠ4‰‰ ’’’xé„—(..&‹1::JKK &“ ŸĻG  ®®n]ēōg‡grr’ņņr¬V+………ääämķģģ,‡Ęl6 …Ų¶m“¶¶ŅÓÓCyy9³³³Äćqģv;”••±gĻ\.ttt°{÷n6nÜH{{;½½½(Š‚¢(<’üó,..rōčQB”?ž8}}}TUUQWWgÄ:66FKK Ńh”}ūöĒ9tč7oŽ$==įįa¬V+Ļ>ū,uuuLLLŠŅŅĀŲŲõõõŒ³mŪ6ęęęhmme~~žx***Œķ(ŠB0DUU233 ƒų|>***p»Ż“¶¶ār¹ƒF#¶V :ĒcÄ©ŸßļGUUü~?°Ō£QXXøb߂Į ±ĢĢL·Ūm̗—‡¢(Œ£iĮ`’’Ün7CCCŒŽŽ’™™‰ßļGÓ4Ün7n·›ééiü~?n·›ĀĀB£ÜĒĒĒńł|hš†ŖŖ¢Ŗ*½½½LOO“››Ėōō“SEE>ŸĻ(C·ŪMVV–QV:ŸĻ‡ĒćYQŽĖ’ÖŪŪKyy9YYYhš†×ė5.ä.—‹¼¼<¦¦¦EQ4M3Ź^Éēó”( UUUĘžų|>£lōméå¼z=­‡¦iLMMĒMAAĮбe‡¼¼<ŗ»»)..&//`0hģė–-[Œ}ƒøŻn|>.— MӀ„FJß¶~C —`Ōåģģ,£££ØŖj”W^^Ž-ē—×ėÅēóQRRrĖ߆††˜žžfĖ–-ʱŖ—%,ÕZZš±åõ’™™‰ŖŖLOOēTUU•ēŌŌĘEN?nÖKßęz–óz½(ŠB^^Ž]×imm„øøŲˆeuœś>ėÓĻųwŁėß©nnī]÷MÆÆÕĖ./s½ ŃėIÆ{EQ(,,djjjÅł©Ŗ*Ę9¤iĒØ+½+**Œķ.ÜÆ[ėŁ‡åe¾Žsf||œ‰‰ rssÉĖĖ»ķö†††€„s,77—““4£­Z~~(Šb|VXXˆ¢(FÆXO_¾¤¤dÅwčķIffęm뢤¤dÅ5hu[ž——‡ßļ7źHUUÜn·qĪėķ`ŌĶgyŅ¢·gė”_ļjkku»»»x†††Œkåj~æĒcŌĒćĮļ÷Æ8^nēvĒōzƒĮuē_6SSSį¾¾¾cL>W‚%„B!nļŃ{`.„Bń' –B!D‚I‚%„B‘`’` !„B$˜$XB!„ & –B!D‚I‚%„B‘`’` !„B$˜$XB!„ & –B!D‚I‚%„B‘`’` !„B$˜$XB!„ ö’¢¤DωŁvdIEND®B`‚libwebsockets-3.2.1/include/000077500000000000000000000000001357643561300160155ustar00rootroot00000000000000libwebsockets-3.2.1/include/libwebsockets.h000066400000000000000000000347761357643561300210470ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ /** @file */ #ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C #define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C #ifdef __cplusplus #include #include extern "C" { #else #include #endif #include #include #include "lws_config.h" /* place for one-shot opaque forward references */ typedef struct lws_sequencer lws_seq_t; /* opaque */ typedef struct lws_sorted_usec_list lws_sorted_usec_list_t; /* opaque */ typedef struct lws_dsh lws_dsh_t; /* * CARE: everything using cmake defines needs to be below here */ #define LWS_US_PER_SEC ((lws_usec_t)1000000) #define LWS_MS_PER_SEC ((lws_usec_t)1000) #define LWS_US_PER_MS ((lws_usec_t)1000) #define LWS_NS_PER_US ((lws_usec_t)1000) #define LWS_KI (1024) #define LWS_MI (LWS_KI * 1024) #define LWS_GI (LWS_MI * 1024) #define LWS_TI ((uint64_t)LWS_GI * 1024) #define LWS_PI ((uint64_t)LWS_TI * 1024) #define LWS_US_TO_MS(x) ((x + (LWS_US_PER_MS / 2)) / LWS_US_PER_MS) #if defined(LWS_HAS_INTPTR_T) #include #define lws_intptr_t intptr_t #else typedef unsigned long long lws_intptr_t; #endif #if defined(WIN32) || defined(_WIN32) #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include #include #include #include #include #ifndef _WIN32_WCE #include #else #define _O_RDONLY 0x0000 #define O_RDONLY _O_RDONLY #endif #define LWS_INLINE __inline #define LWS_VISIBLE #define LWS_WARN_UNUSED_RESULT #define LWS_WARN_DEPRECATED #define LWS_FORMAT(string_index) #if !defined(LWS_EXTERN) #ifdef LWS_DLL #ifdef LWS_INTERNAL #define LWS_EXTERN extern __declspec(dllexport) #else #define LWS_EXTERN extern __declspec(dllimport) #endif #else #define LWS_EXTERN #endif #endif #define LWS_INVALID_FILE INVALID_HANDLE_VALUE #define LWS_SOCK_INVALID (INVALID_SOCKET) #define LWS_O_RDONLY _O_RDONLY #define LWS_O_WRONLY _O_WRONLY #define LWS_O_CREAT _O_CREAT #define LWS_O_TRUNC _O_TRUNC #ifndef __func__ #define __func__ __FUNCTION__ #endif #else /* NOT WIN32 */ #include #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) #include #endif #if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__QNX__) || defined(__OpenBSD__) #include #include #endif #define LWS_INLINE inline #define LWS_O_RDONLY O_RDONLY #define LWS_O_WRONLY O_WRONLY #define LWS_O_CREAT O_CREAT #define LWS_O_TRUNC O_TRUNC #if !defined(LWS_PLAT_OPTEE) && !defined(OPTEE_TA) && !defined(LWS_WITH_ESP32) #include #include #define LWS_INVALID_FILE -1 #define LWS_SOCK_INVALID (-1) #else #define getdtablesize() (30) #if defined(LWS_WITH_ESP32) #define LWS_INVALID_FILE NULL #define LWS_SOCK_INVALID (-1) #else #define LWS_INVALID_FILE NULL #define LWS_SOCK_INVALID (-1) #endif #endif #if defined(__GNUC__) /* warn_unused_result attribute only supported by GCC 3.4 or later */ #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) #define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) #else #define LWS_WARN_UNUSED_RESULT #endif #define LWS_VISIBLE __attribute__((visibility("default"))) #define LWS_WARN_DEPRECATED __attribute__ ((deprecated)) #define LWS_FORMAT(string_index) __attribute__ ((format(printf, string_index, string_index+1))) #else #define LWS_VISIBLE #define LWS_WARN_UNUSED_RESULT #define LWS_WARN_DEPRECATED #define LWS_FORMAT(string_index) #endif #if defined(__ANDROID__) #include #include #endif #endif #if defined(LWS_WITH_LIBEV) #include #endif /* LWS_WITH_LIBEV */ #ifdef LWS_WITH_LIBUV #include #ifdef LWS_HAVE_UV_VERSION_H #include #endif #ifdef LWS_HAVE_NEW_UV_VERSION_H #include #endif #endif /* LWS_WITH_LIBUV */ #if defined(LWS_WITH_LIBEVENT) #include #endif /* LWS_WITH_LIBEVENT */ #ifndef LWS_EXTERN #define LWS_EXTERN extern #endif #ifdef _WIN32 #define random rand #else #if !defined(LWS_PLAT_OPTEE) #include #include #endif #endif #if defined(LWS_WITH_TLS) #ifdef USE_WOLFSSL #ifdef USE_OLD_CYASSL #ifdef _WIN32 /* * Include user-controlled settings for windows from * /IDE/WIN/user_settings.h */ #include #include #else #include #endif #include #include #else #ifdef _WIN32 /* * Include user-controlled settings for windows from * /IDE/WIN/user_settings.h */ #include #include #else #include #endif #include #include #endif /* not USE_OLD_CYASSL */ #else #if defined(LWS_WITH_MBEDTLS) #if defined(LWS_WITH_ESP32) /* this filepath is passed to us but without quotes or <> */ #if !defined(LWS_AMAZON_RTOS) /* AMAZON RTOS has its own setting via MTK_MBEDTLS_CONFIG_FILE */ #undef MBEDTLS_CONFIG_FILE #define MBEDTLS_CONFIG_FILE #endif #endif #include #include #include #else #include #if !defined(LWS_WITH_MBEDTLS) #include #endif #endif #endif /* not USE_WOLFSSL */ #endif /* * Helpers for pthread mutex in user code... if lws is built for * multiple service threads, these resolve to pthread mutex * operations. In the case LWS_MAX_SMP is 1 (the default), they * are all NOPs and no pthread type or api is referenced. */ #if LWS_MAX_SMP > 1 #include #define lws_pthread_mutex(name) pthread_mutex_t name; static LWS_INLINE void lws_pthread_mutex_init(pthread_mutex_t *lock) { pthread_mutex_init(lock, NULL); } static LWS_INLINE void lws_pthread_mutex_destroy(pthread_mutex_t *lock) { pthread_mutex_destroy(lock); } static LWS_INLINE void lws_pthread_mutex_lock(pthread_mutex_t *lock) { pthread_mutex_lock(lock); } static LWS_INLINE void lws_pthread_mutex_unlock(pthread_mutex_t *lock) { pthread_mutex_unlock(lock); } #else #define lws_pthread_mutex(name) #define lws_pthread_mutex_init(_a) #define lws_pthread_mutex_destroy(_a) #define lws_pthread_mutex_lock(_a) #define lws_pthread_mutex_unlock(_a) #endif #define CONTEXT_PORT_NO_LISTEN -1 #define CONTEXT_PORT_NO_LISTEN_SERVER -2 #include #include #ifndef lws_container_of #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M))) #endif struct lws; /* api change list for user code to test against */ #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG /* the struct lws_protocols has the id field present */ #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD /* you can call lws_get_peer_write_allowance */ #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE /* extra parameter introduced in 917f43ab821 */ #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN /* File operations stuff exists */ #define LWS_FEATURE_FOPS #if defined(_WIN32) #if !defined(LWS_WIN32_HANDLE_TYPES) typedef SOCKET lws_sockfd_type; typedef HANDLE lws_filefd_type; #endif struct lws_pollfd { lws_sockfd_type fd; /**< file descriptor */ SHORT events; /**< which events to respond to */ SHORT revents; /**< which events happened */ }; #define LWS_POLLHUP (FD_CLOSE) #define LWS_POLLIN (FD_READ | FD_ACCEPT) #define LWS_POLLOUT (FD_WRITE) #else #if defined(LWS_WITH_ESP32) #include #else typedef int lws_sockfd_type; typedef int lws_filefd_type; #endif #if defined(LWS_PLAT_OPTEE) #include struct timeval { time_t tv_sec; unsigned int tv_usec; }; #if defined(LWS_WITH_NETWORK) // #include #define lws_pollfd pollfd struct timezone; int gettimeofday(struct timeval *tv, struct timezone *tz); /* Internet address. */ struct in_addr { uint32_t s_addr; /* address in network byte order */ }; typedef unsigned short sa_family_t; typedef unsigned short in_port_t; typedef uint32_t socklen_t; #include #if !defined(TEE_SE_READER_NAME_MAX) struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; socklen_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; struct addrinfo *ai_next; }; #endif ssize_t recv(int sockfd, void *buf, size_t len, int flags); ssize_t send(int sockfd, const void *buf, size_t len, int flags); ssize_t read(int fd, void *buf, size_t count); int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); extern int errno; uint16_t ntohs(uint16_t netshort); uint16_t htons(uint16_t hostshort); int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); #define MSG_NOSIGNAL 0x4000 #define EAGAIN 11 #define EINTR 4 #define EWOULDBLOCK EAGAIN #define EADDRINUSE 98 #define INADDR_ANY 0 #define AF_INET 2 #define SHUT_WR 1 #define AF_UNSPEC 0 #define PF_UNSPEC 0 #define SOCK_STREAM 1 #define SOCK_DGRAM 2 # define AI_PASSIVE 0x0001 #define IPPROTO_UDP 17 #define SOL_SOCKET 1 #define SO_SNDBUF 7 #define EISCONN 106 #define EALREADY 114 #define EINPROGRESS 115 int shutdown(int sockfd, int how); int close(int fd); int atoi(const char *nptr); long long atoll(const char *nptr); int socket(int domain, int type, int protocol); int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); void freeaddrinfo(struct addrinfo *res); #if !defined(TEE_SE_READER_NAME_MAX) struct lws_pollfd { int fd; /* File descriptor to poll. */ short int events; /* Types of events poller cares about. */ short int revents; /* Types of events that actually occurred. */ }; #endif int poll(struct pollfd *fds, int nfds, int timeout); #define LWS_POLLHUP (0x18) #define LWS_POLLIN (1) #define LWS_POLLOUT (4) #else struct lws_pollfd; struct sockaddr_in; #endif #else #define lws_pollfd pollfd #define LWS_POLLHUP (POLLHUP | POLLERR) #define LWS_POLLIN (POLLIN) #define LWS_POLLOUT (POLLOUT) #endif #endif #if (defined(WIN32) || defined(_WIN32)) && !defined(__MINGW32__) /* ... */ #define ssize_t SSIZE_T #endif #if defined(WIN32) && defined(LWS_HAVE__STAT32I64) #include #include #endif #if defined(LWS_HAVE_STDINT_H) #include #else #if defined(WIN32) || defined(_WIN32) /* !!! >:-[ */ typedef __int64 int64_t; typedef unsigned __int64 uint64_t; typedef __int32 int32_t; typedef unsigned __int32 uint32_t; typedef __int16 int16_t; typedef unsigned __int16 uint16_t; typedef unsigned __int8 uint8_t; #else typedef unsigned int uint32_t; typedef unsigned short uint16_t; typedef unsigned char uint8_t; #endif #endif typedef int64_t lws_usec_t; typedef unsigned long long lws_filepos_t; typedef long long lws_fileofs_t; typedef uint32_t lws_fop_flags_t; #define lws_concat_temp(_t, _l) (_t + sizeof(_t) - _l) #define lws_concat_used(_t, _l) (sizeof(_t) - _l) /** struct lws_pollargs - argument structure for all external poll related calls * passed in via 'in' */ struct lws_pollargs { lws_sockfd_type fd; /**< applicable socket descriptor */ int events; /**< the new event mask */ int prev_events; /**< the previous event mask */ }; struct lws_extension; /* needed even with ws exts disabled for create context */ struct lws_token_limits; struct lws_context; struct lws_tokens; struct lws_vhost; struct lws; #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(LWS_WITH_TLS) #if defined(LWS_WITH_MBEDTLS) #include #include #include #include #endif #include #include #include #include #include #include #include #include #include #endif #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/include/libwebsockets/000077500000000000000000000000001357643561300206555ustar00rootroot00000000000000libwebsockets-3.2.1/include/libwebsockets/abstract/000077500000000000000000000000001357643561300224605ustar00rootroot00000000000000libwebsockets-3.2.1/include/libwebsockets/abstract/abstract.h000066400000000000000000000073671357643561300244510ustar00rootroot00000000000000/* * libwebsockets - abstract top level header * * Copyright (C) 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ /* * These are used to optionally pass an array of index = C string, binary array, * or ulong tokens to the abstract transport or protocol. For example if it's * raw socket transport, then the DNS address to connect to and the port are * passed using these when the client created and bound to the transport. */ typedef struct lws_token_map { union { const char *value; uint8_t *bvalue; unsigned long lvalue; } u; short name_index; /* 0 here indicates end of array */ short length_or_zero; } lws_token_map_t; /* * The indvidual protocols and transports define their own name_index-es which * are meaningful to them. Define index 0 globally as the end of an array of * them, and separate the ones used for protocols and transport so we can * sanity check they are at least in the correct category. */ enum { LTMI_END_OF_ARRAY, LTMI_PROTOCOL_BASE = 2048, LTMI_TRANSPORT_BASE = 4096 }; struct lws_abs_transport; struct lws_abs_protocol; LWS_VISIBLE LWS_EXTERN const lws_token_map_t * lws_abs_get_token(const lws_token_map_t *token_map, short name_index); /* * the combination of a protocol, transport, and token maps for each */ typedef void lws_abs_transport_inst_t; typedef void lws_abs_protocol_inst_t; typedef struct lws_abs { void *user; struct lws_vhost *vh; const struct lws_abs_protocol *ap; const lws_token_map_t *ap_tokens; const struct lws_abs_transport *at; const lws_token_map_t *at_tokens; lws_seq_t *seq; void *opaque_user_data; /* * These are filled in by lws_abs_bind_and_create_instance() in the * instance copy. They do not need to be set when creating the struct * for use by lws_abs_bind_and_create_instance() */ struct lws_dll2 abstract_instances; lws_abs_transport_inst_t *ati; lws_abs_protocol_inst_t *api; } lws_abs_t; /** * lws_abs_bind_and_create_instance - use an abstract protocol and transport * * \param abs: the lws_abs_t describing the combination desired * * This instantiates an abstract protocol and abstract transport bound together. * A single heap allocation is made for the combination and the protocol and * transport creation ops are called on it. The ap_tokens and at_tokens * are consulted by the creation ops to decide the details of the protocol and * transport for the instance. */ LWS_VISIBLE LWS_EXTERN lws_abs_t * lws_abs_bind_and_create_instance(const lws_abs_t *ai); /** * lws_abs_destroy_instance() - destroys an instance * * \param ai: pointer to the ai pointer to destroy * * This is for destroying an instance created by * lws_abs_bind_and_create_instance() above. * * Calls the protocol and transport destroy operations on the instance, then * frees the combined allocation in one step. The pointer ai is set to NULL. */ LWS_VISIBLE LWS_EXTERN void lws_abs_destroy_instance(lws_abs_t **ai); /* * bring in all the protocols and transports definitions */ #include #include libwebsockets-3.2.1/include/libwebsockets/abstract/protocols.h000066400000000000000000000033521357643561300246600ustar00rootroot00000000000000/* * libwebsockets - abstract protocol definitions * * Copyright (C) 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ typedef struct lws_abs_protocol { const char *name; int alloc; int (*create)(const struct lws_abs *ai); void (*destroy)(lws_abs_protocol_inst_t **d); /* events the transport invokes (handled by abstract protocol) */ int (*accept)(lws_abs_protocol_inst_t *d); int (*rx)(lws_abs_protocol_inst_t *d, uint8_t *buf, size_t len); int (*writeable)(lws_abs_protocol_inst_t *d, size_t budget); int (*closed)(lws_abs_protocol_inst_t *d); int (*heartbeat)(lws_abs_protocol_inst_t *d); } lws_abs_protocol_t; /** * lws_abs_protocol_get_by_name() - returns a pointer to the named protocol ops * * \param name: the name of the abstract protocol * * Returns a pointer to the named protocol ops struct if available, otherwise * NULL. */ LWS_VISIBLE LWS_EXTERN const lws_abs_protocol_t * lws_abs_protocol_get_by_name(const char *name); /* * bring in public api pieces from protocols */ #include libwebsockets-3.2.1/include/libwebsockets/abstract/protocols/000077500000000000000000000000001357643561300245045ustar00rootroot00000000000000libwebsockets-3.2.1/include/libwebsockets/abstract/protocols/smtp.h000066400000000000000000000101711357643561300256400ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /** \defgroup smtp SMTP related functions * ##SMTP related functions * \ingroup lwsapi * * These apis let you communicate with a local SMTP server to send email from * lws. It handles all the SMTP sequencing and protocol actions. * * Your system should have postfix, sendmail or another MTA listening on port * 25 and able to send email using the "mail" commandline app. Usually distro * MTAs are configured for this by default. * * It runs via its own libuv events if initialized (which requires giving it * a libuv loop to attach to). * * It operates using three callbacks, on_next() queries if there is a new email * to send, on_get_body() asks for the body of the email, and on_sent() is * called after the email is successfully sent. * * To use it * * - create an lws_email struct * * - initialize data, loop, the email_* strings, max_content_size and * the callbacks * * - call lws_email_init() * * When you have at least one email to send, call lws_email_check() to * schedule starting to send it. */ //@{ #if defined(LWS_WITH_SMTP) enum { LTMI_PSMTP_V_HELO = LTMI_PROTOCOL_BASE, /* u.value */ LTMI_PSMTP_LV_RETRY_INTERVAL, /* u.lvalue */ LTMI_PSMTP_LV_DELIVERY_TIMEOUT, /* u.lvalue */ LTMI_PSMTP_LV_EMAIL_QUEUE_MAX, /* u.lvalue */ LTMI_PSMTP_LV_MAX_CONTENT_SIZE, /* u.lvalue */ }; typedef struct lws_smtp_client lws_smtp_client_t; typedef struct lws_abs lws_abs_t; typedef struct lws_smtp_email { struct lws_dll2 list; void *data; void *extra; time_t added; time_t last_try; const char *email_from; const char *email_to; const char *payload; int (*done)(struct lws_smtp_email *e, void *buf, size_t len); int tries; } lws_smtp_email_t; /** * lws_smtp_client_alloc_email_helper() - Allocates and inits an email object * * \param payload: the email payload string, with headers and terminating . * \param payload_len: size in bytes of the payload string * \param sender: the sender name and email * \param recipient: the recipient name and email * * Allocates an email object and copies the payload, sender and recipient into * it and initializes it. Returns NULL if OOM, otherwise the allocated email * object. * * Because it copies the arguments into an allocated buffer, the original * arguments can be safely destroyed after calling this. * * The done() callback must free the email object. It doesn't have to free any * individual members. */ LWS_VISIBLE LWS_EXTERN lws_smtp_email_t * lws_smtp_client_alloc_email_helper(const char *payload, size_t payload_len, const char *sender, const char *recipient, const char *extra, size_t extra_len, void *data, int (*done)(struct lws_smtp_email *e, void *buf, size_t len)); /** * lws_smtp_client_add_email() - Add email to the list of ones being sent * * \param instance: smtp client + transport * \param e: email to queue for sending on \p c * * Adds an email to the linked-list of emails to send */ LWS_VISIBLE LWS_EXTERN int lws_smtp_client_add_email(lws_abs_t *instance, lws_smtp_email_t *e); /** * lws_smtp_client_kick() - Request check for new email * * \param instance: instance to kick * * Gives smtp client a chance to move things on */ LWS_VISIBLE LWS_EXTERN void lws_smtp_client_kick(lws_abs_t *instance); #endif //@} libwebsockets-3.2.1/include/libwebsockets/abstract/transports.h000066400000000000000000000037161357643561300250570ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /* * Abstract transport ops */ typedef struct lws_abs_transport { const char *name; int alloc; int (*create)(struct lws_abs *abs); void (*destroy)(lws_abs_transport_inst_t **d); /* events the abstract protocol invokes (handled by transport) */ int (*tx)(lws_abs_transport_inst_t *d, uint8_t *buf, size_t len); int (*client_conn)(const lws_abs_t *abs); int (*close)(lws_abs_transport_inst_t *d); int (*ask_for_writeable)(lws_abs_transport_inst_t *d); int (*set_timeout)(lws_abs_transport_inst_t *d, int reason, int secs); int (*state)(lws_abs_transport_inst_t *d); } lws_abs_transport_t; /** * lws_abs_protocol_get_by_name() - returns a pointer to the named protocol ops * * \param name: the name of the abstract protocol * * Returns a pointer to the named protocol ops struct if available, otherwise * NULL. */ LWS_VISIBLE LWS_EXTERN const lws_abs_transport_t * lws_abs_transport_get_by_name(const char *name); /* * bring in public api pieces from transports */ #include #include libwebsockets-3.2.1/include/libwebsockets/abstract/transports/000077500000000000000000000000001357643561300246775ustar00rootroot00000000000000libwebsockets-3.2.1/include/libwebsockets/abstract/transports/raw-skt.h000066400000000000000000000017171357643561300264460ustar00rootroot00000000000000/* * libwebsockets - raw-skt abstract transport * * Copyright (C) 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ enum { LTMI_PEER_V_DNS_ADDRESS = LTMI_TRANSPORT_BASE, /* u.value */ LTMI_PEER_LV_PORT, /* u.lvalue */ LTMI_PEER_LV_TLS_FLAGS, /* u.lvalue */ }; libwebsockets-3.2.1/include/libwebsockets/abstract/transports/unit-test.h000066400000000000000000000046071357643561300270130ustar00rootroot00000000000000/* * libwebsockets include/libwebsockets/abstract/transports/unit-test.c * * Copyright (C) 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is an abstract transport useful for unit testing abstract protocols. * * Instead of passing data anywhere, you give the transport a list of packets * to deliver and packets you expect back from the abstract protocol it's * bound to. */ enum { LWS_AUT_EXPECT_TEST_END = (1 << 0), LWS_AUT_EXPECT_LOCAL_CLOSE = (1 << 1), LWS_AUT_EXPECT_DO_REMOTE_CLOSE = (1 << 2), LWS_AUT_EXPECT_TX /* expect this as tx from protocol */ = (1 << 3), LWS_AUT_EXPECT_RX /* present this as rx to protocol */ = (1 << 4), LWS_AUT_EXPECT_SHOULD_FAIL = (1 << 5), LWS_AUT_EXPECT_SHOULD_TIMEOUT = (1 << 6), }; typedef enum { LPE_CONTINUE, LPE_SUCCEEDED, LPE_FAILED, LPE_FAILED_UNEXPECTED_TIMEOUT, LPE_FAILED_UNEXPECTED_PASS, LPE_FAILED_UNEXPECTED_CLOSE, LPE_SKIPPED, LPE_CLOSING } lws_unit_test_packet_disposition; typedef int (*lws_unit_test_packet_test_cb)(const void *cb_user, int disposition); typedef int (*lws_unit_test_packet_cb)(lws_abs_t *instance); /* each step in the unit test */ typedef struct lws_unit_test_packet { void *buffer; lws_unit_test_packet_cb pre; size_t len; uint32_t flags; } lws_unit_test_packet_t; /* each unit test */ typedef struct lws_unit_test { const char * name; /* NULL indicates end of test array */ lws_unit_test_packet_t * expect_array; int max_secs; } lws_unit_test_t; enum { LTMI_PEER_V_EXPECT_TEST = LTMI_TRANSPORT_BASE, /* u.value */ LTMI_PEER_V_EXPECT_RESULT_CB, /* u.value */ LTMI_PEER_V_EXPECT_RESULT_CB_ARG, /* u.value */ }; LWS_VISIBLE LWS_EXTERN const char * lws_unit_test_result_name(int in); libwebsockets-3.2.1/include/libwebsockets/lws-adopt.h000066400000000000000000000153251357643561300227460ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /** \defgroup sock-adopt Socket adoption helpers * ##Socket adoption helpers * * When integrating with an external app with its own event loop, these can * be used to accept connections from someone else's listening socket. * * When using lws own event loop, these are not needed. */ ///@{ /** * lws_adopt_socket() - adopt foreign socket as if listen socket accepted it * for the default vhost of context. * * \param context: lws context * \param accept_fd: fd of already-accepted socket to adopt * * Either returns new wsi bound to accept_fd, or closes accept_fd and * returns NULL, having cleaned up any new wsi pieces. * * LWS adopts the socket in http serving mode, it's ready to accept an upgrade * to ws or just serve http. */ LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd); /** * lws_adopt_socket_vhost() - adopt foreign socket as if listen socket accepted * it for vhost * * \param vh: lws vhost * \param accept_fd: fd of already-accepted socket to adopt * * Either returns new wsi bound to accept_fd, or closes accept_fd and * returns NULL, having cleaned up any new wsi pieces. * * LWS adopts the socket in http serving mode, it's ready to accept an upgrade * to ws or just serve http. */ LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd); typedef enum { LWS_ADOPT_RAW_FILE_DESC = 0, /* convenience constant */ LWS_ADOPT_HTTP = 1, /* flag: absent implies RAW */ LWS_ADOPT_SOCKET = 2, /* flag: absent implies file descr */ LWS_ADOPT_ALLOW_SSL = 4, /* flag: if set requires LWS_ADOPT_SOCKET */ LWS_ADOPT_FLAG_UDP = 16, /* flag: socket is UDP */ LWS_ADOPT_FLAG_RAW_PROXY = 32, /* flag: raw proxy */ LWS_ADOPT_RAW_SOCKET_UDP = LWS_ADOPT_SOCKET | LWS_ADOPT_FLAG_UDP, } lws_adoption_type; typedef union { lws_sockfd_type sockfd; lws_filefd_type filefd; } lws_sock_file_fd_type; #if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) struct lws_udp { struct sockaddr sa; socklen_t salen; struct sockaddr sa_pending; socklen_t salen_pending; }; #endif /** * lws_adopt_descriptor_vhost() - adopt foreign socket or file descriptor * if socket descriptor, should already have been accepted from listen socket * * \param vh: lws vhost * \param type: OR-ed combinations of lws_adoption_type flags * \param fd: union with either .sockfd or .filefd set * \param vh_prot_name: NULL or vh protocol name to bind raw connection to * \param parent: NULL or struct lws to attach new_wsi to as a child * * Either returns new wsi bound to accept_fd, or closes accept_fd and * returns NULL, having cleaned up any new wsi pieces. * * If LWS_ADOPT_SOCKET is set, LWS adopts the socket in http serving mode, it's * ready to accept an upgrade to ws or just serve http. * * parent may be NULL, if given it should be an existing wsi that will become the * parent of the new wsi created by this call. */ LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_descriptor_vhost(struct lws_vhost *vh, lws_adoption_type type, lws_sock_file_fd_type fd, const char *vh_prot_name, struct lws *parent); /** * lws_adopt_socket_readbuf() - adopt foreign socket and first rx as if listen socket accepted it * for the default vhost of context. * \param context: lws context * \param accept_fd: fd of already-accepted socket to adopt * \param readbuf: NULL or pointer to data that must be drained before reading from * accept_fd * \param len: The length of the data held at \p readbuf * * Either returns new wsi bound to accept_fd, or closes accept_fd and * returns NULL, having cleaned up any new wsi pieces. * * LWS adopts the socket in http serving mode, it's ready to accept an upgrade * to ws or just serve http. * * If your external code did not already read from the socket, you can use * lws_adopt_socket() instead. * * This api is guaranteed to use the data at \p readbuf first, before reading from * the socket. * * \p readbuf is limited to the size of the ah rx buf, currently 2048 bytes. */ LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd, const char *readbuf, size_t len); /** * lws_adopt_socket_vhost_readbuf() - adopt foreign socket and first rx as if listen socket * accepted it for vhost. * \param vhost: lws vhost * \param accept_fd: fd of already-accepted socket to adopt * \param readbuf: NULL or pointer to data that must be drained before reading from accept_fd * \param len: The length of the data held at \p readbuf * * Either returns new wsi bound to accept_fd, or closes accept_fd and * returns NULL, having cleaned up any new wsi pieces. * * LWS adopts the socket in http serving mode, it's ready to accept an upgrade * to ws or just serve http. * * If your external code did not already read from the socket, you can use * lws_adopt_socket() instead. * * This api is guaranteed to use the data at \p readbuf first, before reading from * the socket. * * \p readbuf is limited to the size of the ah rx buf, currently 2048 bytes. */ LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_vhost_readbuf(struct lws_vhost *vhost, lws_sockfd_type accept_fd, const char *readbuf, size_t len); #define LWS_CAUDP_BIND 1 /** * lws_create_adopt_udp() - create, bind and adopt a UDP socket * * \param vhost: lws vhost * \param port: UDP port to bind to, -1 means unbound * \param flags: 0 or LWS_CAUDP_NO_BIND * \param protocol_name: Name of protocol on vhost to bind wsi to * \param parent_wsi: NULL or parent wsi new wsi will be a child of * * Either returns new wsi bound to accept_fd, or closes accept_fd and * returns NULL, having cleaned up any new wsi pieces. * */ LWS_VISIBLE LWS_EXTERN struct lws * lws_create_adopt_udp(struct lws_vhost *vhost, int port, int flags, const char *protocol_name, struct lws *parent_wsi); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-callbacks.h000066400000000000000000001025621357643561300235560ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup usercb User Callback * * ##User protocol callback * * The protocol callback is the primary way lws interacts with * user code. For one of a list of a few dozen reasons the callback gets * called at some event to be handled. * * All of the events can be ignored, returning 0 is taken as "OK" and returning * nonzero in most cases indicates that the connection should be closed. */ ///@{ struct lws_ssl_info { int where; int ret; }; enum lws_cert_update_state { LWS_CUS_IDLE, LWS_CUS_STARTING, LWS_CUS_SUCCESS, LWS_CUS_FAILED, LWS_CUS_CREATE_KEYS, LWS_CUS_REG, LWS_CUS_AUTH, LWS_CUS_CHALLENGE, LWS_CUS_CREATE_REQ, LWS_CUS_REQ, LWS_CUS_CONFIRM, LWS_CUS_ISSUE, }; enum { LWS_TLS_REQ_ELEMENT_COUNTRY, LWS_TLS_REQ_ELEMENT_STATE, LWS_TLS_REQ_ELEMENT_LOCALITY, LWS_TLS_REQ_ELEMENT_ORGANIZATION, LWS_TLS_REQ_ELEMENT_COMMON_NAME, LWS_TLS_REQ_ELEMENT_EMAIL, LWS_TLS_REQ_ELEMENT_COUNT, LWS_TLS_SET_DIR_URL = LWS_TLS_REQ_ELEMENT_COUNT, LWS_TLS_SET_AUTH_PATH, LWS_TLS_SET_CERT_PATH, LWS_TLS_SET_KEY_PATH, LWS_TLS_TOTAL_COUNT }; struct lws_acme_cert_aging_args { struct lws_vhost *vh; const char *element_overrides[LWS_TLS_TOTAL_COUNT]; /* NULL = use pvo */ }; /* * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. */ /** enum lws_callback_reasons - reason you're getting a protocol callback */ enum lws_callback_reasons { /* --------------------------------------------------------------------- * ----- Callbacks related to wsi and protocol binding lifecycle ----- */ LWS_CALLBACK_PROTOCOL_INIT = 27, /**< One-time call per protocol, per-vhost using it, so it can * do initial setup / allocations etc */ LWS_CALLBACK_PROTOCOL_DESTROY = 28, /**< One-time call per protocol, per-vhost using it, indicating * this protocol won't get used at all after this callback, the * vhost is getting destroyed. Take the opportunity to * deallocate everything that was allocated by the protocol. */ LWS_CALLBACK_WSI_CREATE = 29, /**< outermost (earliest) wsi create notification to protocols[0] */ LWS_CALLBACK_WSI_DESTROY = 30, /**< outermost (latest) wsi destroy notification to protocols[0] */ /* --------------------------------------------------------------------- * ----- Callbacks related to Server TLS ----- */ LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS = 21, /**< if configured for * including OpenSSL support, this callback allows your user code * to perform extra SSL_CTX_load_verify_locations() or similar * calls to direct OpenSSL where to find certificates the client * can use to confirm the remote server identity. user is the * OpenSSL SSL_CTX* */ LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS = 22, /**< if configured for * including OpenSSL support, this callback allows your user code * to load extra certificates into the server which allow it to * verify the validity of certificates returned by clients. user * is the server's OpenSSL SSL_CTX* and in is the lws_vhost */ LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION = 23, /**< if the libwebsockets vhost was created with the option * LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT, then this * callback is generated during OpenSSL verification of the cert * sent from the client. It is sent to protocol[0] callback as * no protocol has been negotiated on the connection yet. * Notice that the libwebsockets context and wsi are both NULL * during this callback. See * http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html * to understand more detail about the OpenSSL callback that * generates this libwebsockets callback and the meanings of the * arguments passed. In this callback, user is the x509_ctx, * in is the ssl pointer and len is preverify_ok * Notice that this callback maintains libwebsocket return * conventions, return 0 to mean the cert is OK or 1 to fail it. * This also means that if you don't handle this callback then * the default callback action of returning 0 allows the client * certificates. */ LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY = 37, /**< if configured for including OpenSSL support but no private key * file has been specified (ssl_private_key_filepath is NULL), this is * called to allow the user to set the private key directly via * libopenssl and perform further operations if required; this might be * useful in situations where the private key is not directly accessible * by the OS, for example if it is stored on a smartcard. * user is the server's OpenSSL SSL_CTX* */ LWS_CALLBACK_SSL_INFO = 67, /**< SSL connections only. An event you registered an * interest in at the vhost has occurred on a connection * using the vhost. in is a pointer to a * struct lws_ssl_info containing information about the * event*/ /* --------------------------------------------------------------------- * ----- Callbacks related to Client TLS ----- */ LWS_CALLBACK_OPENSSL_PERFORM_SERVER_CERT_VERIFICATION = 58, /**< Similar to LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION * this callback is called during OpenSSL verification of the cert * sent from the server to the client. It is sent to protocol[0] * callback as no protocol has been negotiated on the connection yet. * Notice that the wsi is set because lws_client_connect_via_info was * successful. * * See http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html * to understand more detail about the OpenSSL callback that * generates this libwebsockets callback and the meanings of the * arguments passed. In this callback, user is the x509_ctx, * in is the ssl pointer and len is preverify_ok. * * THIS IS NOT RECOMMENDED BUT if a cert validation error shall be * overruled and cert shall be accepted as ok, * X509_STORE_CTX_set_error((X509_STORE_CTX*)user, X509_V_OK); must be * called and return value must be 0 to mean the cert is OK; * returning 1 will fail the cert in any case. * * This also means that if you don't handle this callback then * the default callback action of returning 0 will not accept the * certificate in case of a validation error decided by the SSL lib. * * This is expected and secure behaviour when validating certificates. * * Note: LCCSCF_ALLOW_SELFSIGNED and * LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK still work without this * callback being implemented. */ /* --------------------------------------------------------------------- * ----- Callbacks related to HTTP Server ----- */ LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED = 19, /**< A new client has been accepted by the ws server. This * callback allows setting any relevant property to it. Because this * happens immediately after the instantiation of a new client, * there's no websocket protocol selected yet so this callback is * issued only to protocol 0. Only wsi is defined, pointing to the * new client, and the return value is ignored. */ LWS_CALLBACK_HTTP = 12, /**< an http request has come from a client that is not * asking to upgrade the connection to a websocket * one. This is a chance to serve http content, * for example, to send a script to the client * which will then open the websockets connection. * in points to the URI path requested and * lws_serve_http_file() makes it very * simple to send back a file to the client. * Normally after sending the file you are done * with the http connection, since the rest of the * activity will come by websockets from the script * that was delivered by http, so you will want to * return 1; to close and free up the connection. */ LWS_CALLBACK_HTTP_BODY = 13, /**< the next len bytes data from the http * request body HTTP connection is now available in in. */ LWS_CALLBACK_HTTP_BODY_COMPLETION = 14, /**< the expected amount of http request body has been delivered */ LWS_CALLBACK_HTTP_FILE_COMPLETION = 15, /**< a file requested to be sent down http link has completed. */ LWS_CALLBACK_HTTP_WRITEABLE = 16, /**< you can write more down the http protocol link now. */ LWS_CALLBACK_CLOSED_HTTP = 5, /**< when a HTTP (non-websocket) session ends */ LWS_CALLBACK_FILTER_HTTP_CONNECTION = 18, /**< called when the request has * been received and parsed from the client, but the response is * not sent yet. Return non-zero to disallow the connection. * user is a pointer to the connection user space allocation, * in is the URI, eg, "/" * In your handler you can use the public APIs * lws_hdr_total_length() / lws_hdr_copy() to access all of the * headers using the header enums lws_token_indexes from * libwebsockets.h to check for and read the supported header * presence and content before deciding to allow the http * connection to proceed or to kill the connection. */ LWS_CALLBACK_ADD_HEADERS = 53, /**< This gives your user code a chance to add headers to a server * transaction bound to your protocol. `in` points to a * `struct lws_process_html_args` describing a buffer and length * you can add headers into using the normal lws apis. * * (see LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER to add headers to * a client transaction) * * Only `args->p` and `args->len` are valid, and `args->p` should * be moved on by the amount of bytes written, if any. Eg * * case LWS_CALLBACK_ADD_HEADERS: * * struct lws_process_html_args *args = * (struct lws_process_html_args *)in; * * if (lws_add_http_header_by_name(wsi, * (unsigned char *)"set-cookie:", * (unsigned char *)cookie, cookie_len, * (unsigned char **)&args->p, * (unsigned char *)args->p + args->max_len)) * return 1; * * break; */ LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51, /**< This gives the user code a chance to forbid an http access. * `in` points to a `struct lws_process_html_args`, which * describes the URL, and a bit mask describing the type of * authentication required. If the callback returns nonzero, * the transaction ends with HTTP_STATUS_UNAUTHORIZED. */ LWS_CALLBACK_PROCESS_HTML = 52, /**< This gives your user code a chance to mangle outgoing * HTML. `in` points to a `struct lws_process_html_args` * which describes the buffer containing outgoing HTML. * The buffer may grow up to `.max_len` (currently +128 * bytes per buffer). */ LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49, /**< By default, all HTTP handling is done in protocols[0]. * However you can bind different protocols (by name) to * different parts of the URL space using callback mounts. This * callback occurs in the new protocol when a wsi is bound * to that protocol. Any protocol allocation related to the * http transaction processing should be created then. * These specific callbacks are necessary because with HTTP/1.1, * a single connection may perform at series of different * transactions at different URLs, thus the lifetime of the * protocol bind is just for one transaction, not connection. */ LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50, /**< This is called when a transaction is unbound from a protocol. * It indicates the connection completed its transaction and may * do something different now. Any protocol allocation related * to the http transaction processing should be destroyed. */ LWS_CALLBACK_HTTP_CONFIRM_UPGRADE = 86, /**< This is your chance to reject an HTTP upgrade action. The * name of the protocol being upgraded to is in 'in', and the ah * is still bound to the wsi, so you can look at the headers. * * The default of returning 0 (ie, also if not handled) means the * upgrade may proceed. Return <0 to just hang up the connection, * or >0 if you have rejected the connection by returning http headers * and response code yourself. * * There is no need for you to call transaction_completed() as the * caller will take care of it when it sees you returned >0. */ /* --------------------------------------------------------------------- * ----- Callbacks related to HTTP Client ----- */ LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44, /**< The HTTP client connection has succeeded, and is now * connected to the server */ LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45, /**< The HTTP client connection is closing */ LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48, /**< This is generated by lws_http_client_read() used to drain * incoming data. In the case the incoming data was chunked, it will * be split into multiple smaller callbacks for each chunk block, * removing the chunk headers. If not chunked, it will appear all in * one callback. */ LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46, /**< This indicates data was received on the HTTP client connection. It * does NOT actually drain or provide the data, so if you are doing * http client, you MUST handle this and call lws_http_client_read(). * Failure to deal with it as in the minimal examples may cause spinning * around the event loop as it's continuously signalled the same data * is available for read. The related minimal examples show how to * handle it. * * It's possible to defer calling lws_http_client_read() if you use * rx flow control to stop further rx handling on the connection until * you did deal with it. But normally you would call it in the handler. * * lws_http_client_read() strips any chunked framing and calls back * with only payload data to LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ. The * chunking is the reason this is not just all done in one callback for * http. */ LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47, /**< The client transaction completed... at the moment this * is the same as closing since transaction pipelining on * client side is not yet supported. */ LWS_CALLBACK_CLIENT_HTTP_WRITEABLE = 57, /**< when doing an HTTP type client connection, you can call * lws_client_http_body_pending(wsi, 1) from * LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER to get these callbacks * sending the HTTP headers. * * From this callback, when you have sent everything, you should let * lws know by calling lws_client_http_body_pending(wsi, 0) */ LWS_CALLBACK_CLIENT_HTTP_BIND_PROTOCOL = 85, LWS_CALLBACK_CLIENT_HTTP_DROP_PROTOCOL = 76, /* --------------------------------------------------------------------- * ----- Callbacks related to Websocket Server ----- */ LWS_CALLBACK_ESTABLISHED = 0, /**< (VH) after the server completes a handshake with an incoming * client. If you built the library with ssl support, in is a * pointer to the ssl struct associated with the connection or NULL. * * b0 of len is set if the connection was made using ws-over-h2 */ LWS_CALLBACK_CLOSED = 4, /**< when the websocket session ends */ LWS_CALLBACK_SERVER_WRITEABLE = 11, /**< See LWS_CALLBACK_CLIENT_WRITEABLE */ LWS_CALLBACK_RECEIVE = 6, /**< data has appeared for this server endpoint from a * remote client, it can be found at *in and is * len bytes long */ LWS_CALLBACK_RECEIVE_PONG = 7, /**< servers receive PONG packets with this callback reason */ LWS_CALLBACK_WS_PEER_INITIATED_CLOSE = 38, /**< The peer has sent an unsolicited Close WS packet. in and * len are the optional close code (first 2 bytes, network * order) and the optional additional information which is not * defined in the standard, and may be a string or non human-readable * data. * If you return 0 lws will echo the close and then close the * connection. If you return nonzero lws will just close the * connection. */ LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION = 20, /**< called when the handshake has * been received and parsed from the client, but the response is * not sent yet. Return non-zero to disallow the connection. * user is a pointer to the connection user space allocation, * in is the requested protocol name * In your handler you can use the public APIs * lws_hdr_total_length() / lws_hdr_copy() to access all of the * headers using the header enums lws_token_indexes from * libwebsockets.h to check for and read the supported header * presence and content before deciding to allow the handshake * to proceed or to kill the connection. */ LWS_CALLBACK_CONFIRM_EXTENSION_OKAY = 25, /**< When the server handshake code * sees that it does support a requested extension, before * accepting the extension by additing to the list sent back to * the client it gives this callback just to check that it's okay * to use that extension. It calls back to the requested protocol * and with in being the extension name, len is 0 and user is * valid. Note though at this time the ESTABLISHED callback hasn't * happened yet so if you initialize user content there, user * content during this callback might not be useful for anything. */ LWS_CALLBACK_WS_SERVER_BIND_PROTOCOL = 77, LWS_CALLBACK_WS_SERVER_DROP_PROTOCOL = 78, /* --------------------------------------------------------------------- * ----- Callbacks related to Websocket Client ----- */ LWS_CALLBACK_CLIENT_CONNECTION_ERROR = 1, /**< the request client connection has been unable to complete a * handshake with the remote server. If in is non-NULL, you can * find an error string of length len where it points to * * Diagnostic strings that may be returned include * * "getaddrinfo (ipv6) failed" * "unknown address family" * "getaddrinfo (ipv4) failed" * "set socket opts failed" * "insert wsi failed" * "lws_ssl_client_connect1 failed" * "lws_ssl_client_connect2 failed" * "Peer hung up" * "read failed" * "HS: URI missing" * "HS: Redirect code but no Location" * "HS: URI did not parse" * "HS: Redirect failed" * "HS: Server did not return 200" * "HS: OOM" * "HS: disallowed by client filter" * "HS: disallowed at ESTABLISHED" * "HS: ACCEPT missing" * "HS: ws upgrade response not 101" * "HS: UPGRADE missing" * "HS: Upgrade to something other than websocket" * "HS: CONNECTION missing" * "HS: UPGRADE malformed" * "HS: PROTOCOL malformed" * "HS: Cannot match protocol" * "HS: EXT: list too big" * "HS: EXT: failed setting defaults" * "HS: EXT: failed parsing defaults" * "HS: EXT: failed parsing options" * "HS: EXT: Rejects server options" * "HS: EXT: unknown ext" * "HS: Accept hash wrong" * "HS: Rejected by filter cb" * "HS: OOM" * "HS: SO_SNDBUF failed" * "HS: Rejected at CLIENT_ESTABLISHED" */ LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH = 2, /**< this is the last chance for the client user code to examine the * http headers and decide to reject the connection. If the * content in the headers is interesting to the * client (url, etc) it needs to copy it out at * this point since it will be destroyed before * the CLIENT_ESTABLISHED call */ LWS_CALLBACK_CLIENT_ESTABLISHED = 3, /**< after your client connection completed the websocket upgrade * handshake with the remote server */ LWS_CALLBACK_CLIENT_CLOSED = 75, /**< when a client websocket session ends */ LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER = 24, /**< this callback happens * when a client handshake is being compiled. user is NULL, * in is a char **, it's pointing to a char * which holds the * next location in the header buffer where you can add * headers, and len is the remaining space in the header buffer, * which is typically some hundreds of bytes. So, to add a canned * cookie, your handler code might look similar to: * * char **p = (char **)in, *end = (*p) + len; * * if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_COOKIE, * (unsigned char)"a=b", 3, p, end)) * return -1; * * See LWS_CALLBACK_ADD_HEADERS for adding headers to server * transactions. */ LWS_CALLBACK_CLIENT_RECEIVE = 8, /**< data has appeared from the server for the client connection, it * can be found at *in and is len bytes long */ LWS_CALLBACK_CLIENT_RECEIVE_PONG = 9, /**< clients receive PONG packets with this callback reason */ LWS_CALLBACK_CLIENT_WRITEABLE = 10, /**< If you call lws_callback_on_writable() on a connection, you will * get one of these callbacks coming when the connection socket * is able to accept another write packet without blocking. * If it already was able to take another packet without blocking, * you'll get this callback at the next call to the service loop * function. Notice that CLIENTs get LWS_CALLBACK_CLIENT_WRITEABLE * and servers get LWS_CALLBACK_SERVER_WRITEABLE. */ LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED = 26, /**< When a ws client * connection is being prepared to start a handshake to a server, * each supported extension is checked with protocols[0] callback * with this reason, giving the user code a chance to suppress the * claim to support that extension by returning non-zero. If * unhandled, by default 0 will be returned and the extension * support included in the header to the server. Notice this * callback comes to protocols[0]. */ LWS_CALLBACK_WS_EXT_DEFAULTS = 39, /**< Gives client connections an opportunity to adjust negotiated * extension defaults. `user` is the extension name that was * negotiated (eg, "permessage-deflate"). `in` points to a * buffer and `len` is the buffer size. The user callback can * set the buffer to a string describing options the extension * should parse. Or just ignore for defaults. */ LWS_CALLBACK_FILTER_NETWORK_CONNECTION = 17, /**< called when a client connects to * the server at network level; the connection is accepted but then * passed to this callback to decide whether to hang up immediately * or not, based on the client IP. in contains the connection * socket's descriptor. Since the client connection information is * not available yet, wsi still pointing to the main server socket. * Return non-zero to terminate the connection before sending or * receiving anything. Because this happens immediately after the * network connection from the client, there's no websocket protocol * selected yet so this callback is issued only to protocol 0. */ LWS_CALLBACK_WS_CLIENT_BIND_PROTOCOL = 79, LWS_CALLBACK_WS_CLIENT_DROP_PROTOCOL = 80, /* --------------------------------------------------------------------- * ----- Callbacks related to external poll loop integration ----- */ LWS_CALLBACK_GET_THREAD_ID = 31, /**< lws can accept callback when writable requests from other * threads, if you implement this callback and return an opaque * current thread ID integer. */ /* external poll() management support */ LWS_CALLBACK_ADD_POLL_FD = 32, /**< lws normally deals with its poll() or other event loop * internally, but in the case you are integrating with another * server you will need to have lws sockets share a * polling array with the other server. This and the other * POLL_FD related callbacks let you put your specialized * poll array interface code in the callback for protocol 0, the * first protocol you support, usually the HTTP protocol in the * serving case. * This callback happens when a socket needs to be * added to the polling loop: in points to a struct * lws_pollargs; the fd member of the struct is the file * descriptor, and events contains the active events * * If you are using the internal lws polling / event loop * you can just ignore these callbacks. */ LWS_CALLBACK_DEL_POLL_FD = 33, /**< This callback happens when a socket descriptor * needs to be removed from an external polling array. in is * again the struct lws_pollargs containing the fd member * to be removed. If you are using the internal polling * loop, you can just ignore it. */ LWS_CALLBACK_CHANGE_MODE_POLL_FD = 34, /**< This callback happens when lws wants to modify the events for * a connection. * in is the struct lws_pollargs with the fd to change. * The new event mask is in events member and the old mask is in * the prev_events member. * If you are using the internal polling loop, you can just ignore * it. */ LWS_CALLBACK_LOCK_POLL = 35, /**< These allow the external poll changes driven * by lws to participate in an external thread locking * scheme around the changes, so the whole thing is threadsafe. * These are called around three activities in the library, * - inserting a new wsi in the wsi / fd table (len=1) * - deleting a wsi from the wsi / fd table (len=1) * - changing a wsi's POLLIN/OUT state (len=0) * Locking and unlocking external synchronization objects when * len == 1 allows external threads to be synchronized against * wsi lifecycle changes if it acquires the same lock for the * duration of wsi dereference from the other thread context. */ LWS_CALLBACK_UNLOCK_POLL = 36, /**< See LWS_CALLBACK_LOCK_POLL, ignore if using lws internal poll */ /* --------------------------------------------------------------------- * ----- Callbacks related to CGI serving ----- */ LWS_CALLBACK_CGI = 40, /**< CGI: CGI IO events on stdin / out / err are sent here on * protocols[0]. The provided `lws_callback_http_dummy()` * handles this and the callback should be directed there if * you use CGI. */ LWS_CALLBACK_CGI_TERMINATED = 41, /**< CGI: The related CGI process ended, this is called before * the wsi is closed. Used to, eg, terminate chunking. * The provided `lws_callback_http_dummy()` * handles this and the callback should be directed there if * you use CGI. The child PID that terminated is in len. */ LWS_CALLBACK_CGI_STDIN_DATA = 42, /**< CGI: Data is, to be sent to the CGI process stdin, eg from * a POST body. The provided `lws_callback_http_dummy()` * handles this and the callback should be directed there if * you use CGI. */ LWS_CALLBACK_CGI_STDIN_COMPLETED = 43, /**< CGI: no more stdin is coming. The provided * `lws_callback_http_dummy()` handles this and the callback * should be directed there if you use CGI. */ LWS_CALLBACK_CGI_PROCESS_ATTACH = 70, /**< CGI: Sent when the CGI process is spawned for the wsi. The * len parameter is the PID of the child process */ /* --------------------------------------------------------------------- * ----- Callbacks related to Generic Sessions ----- */ LWS_CALLBACK_SESSION_INFO = 54, /**< This is only generated by user code using generic sessions. * It's used to get a `struct lws_session_info` filled in by * generic sessions with information about the logged-in user. * See the messageboard sample for an example of how to use. */ LWS_CALLBACK_GS_EVENT = 55, /**< Indicates an event happened to the Generic Sessions session. * `in` contains a `struct lws_gs_event_args` describing the event. */ LWS_CALLBACK_HTTP_PMO = 56, /**< per-mount options for this connection, called before * the normal LWS_CALLBACK_HTTP when the mount has per-mount * options. */ /* --------------------------------------------------------------------- * ----- Callbacks related to RAW PROXY ----- */ LWS_CALLBACK_RAW_PROXY_CLI_RX = 89, /**< RAW mode client (outgoing) RX */ LWS_CALLBACK_RAW_PROXY_SRV_RX = 90, /**< RAW mode server (listening) RX */ LWS_CALLBACK_RAW_PROXY_CLI_CLOSE = 91, /**< RAW mode client (outgoing) is closing */ LWS_CALLBACK_RAW_PROXY_SRV_CLOSE = 92, /**< RAW mode server (listening) is closing */ LWS_CALLBACK_RAW_PROXY_CLI_WRITEABLE = 93, /**< RAW mode client (outgoing) may be written */ LWS_CALLBACK_RAW_PROXY_SRV_WRITEABLE = 94, /**< RAW mode server (listening) may be written */ LWS_CALLBACK_RAW_PROXY_CLI_ADOPT = 95, /**< RAW mode client (onward) accepted socket was adopted * (equivalent to 'wsi created') */ LWS_CALLBACK_RAW_PROXY_SRV_ADOPT = 96, /**< RAW mode server (listening) accepted socket was adopted * (equivalent to 'wsi created') */ LWS_CALLBACK_RAW_PROXY_CLI_BIND_PROTOCOL = 97, LWS_CALLBACK_RAW_PROXY_SRV_BIND_PROTOCOL = 98, LWS_CALLBACK_RAW_PROXY_CLI_DROP_PROTOCOL = 99, LWS_CALLBACK_RAW_PROXY_SRV_DROP_PROTOCOL = 100, /* --------------------------------------------------------------------- * ----- Callbacks related to RAW sockets ----- */ LWS_CALLBACK_RAW_RX = 59, /**< RAW mode connection RX */ LWS_CALLBACK_RAW_CLOSE = 60, /**< RAW mode connection is closing */ LWS_CALLBACK_RAW_WRITEABLE = 61, /**< RAW mode connection may be written */ LWS_CALLBACK_RAW_ADOPT = 62, /**< RAW mode connection was adopted (equivalent to 'wsi created') */ LWS_CALLBACK_RAW_CONNECTED = 101, /**< outgoing client RAW mode connection was connected */ LWS_CALLBACK_RAW_SKT_BIND_PROTOCOL = 81, LWS_CALLBACK_RAW_SKT_DROP_PROTOCOL = 82, /* --------------------------------------------------------------------- * ----- Callbacks related to RAW file handles ----- */ LWS_CALLBACK_RAW_ADOPT_FILE = 63, /**< RAW mode file was adopted (equivalent to 'wsi created') */ LWS_CALLBACK_RAW_RX_FILE = 64, /**< This is the indication the RAW mode file has something to read. * This doesn't actually do the read of the file and len is always * 0... your code should do the read having been informed there is * something to read now. */ LWS_CALLBACK_RAW_WRITEABLE_FILE = 65, /**< RAW mode file is writeable */ LWS_CALLBACK_RAW_CLOSE_FILE = 66, /**< RAW mode wsi that adopted a file is closing */ LWS_CALLBACK_RAW_FILE_BIND_PROTOCOL = 83, LWS_CALLBACK_RAW_FILE_DROP_PROTOCOL = 84, /* --------------------------------------------------------------------- * ----- Callbacks related to generic wsi events ----- */ LWS_CALLBACK_TIMER = 73, /**< When the time elapsed after a call to * lws_set_timer_usecs(wsi, usecs) is up, the wsi will get one of * these callbacks. The deadline can be continuously extended into the * future by later calls to lws_set_timer_usecs() before the deadline * expires, or cancelled by lws_set_timer_usecs(wsi, -1); */ LWS_CALLBACK_EVENT_WAIT_CANCELLED = 71, /**< This is sent to every protocol of every vhost in response * to lws_cancel_service() or lws_cancel_service_pt(). This * callback is serialized in the lws event loop normally, even * if the lws_cancel_service[_pt]() call was from a different * thread. */ LWS_CALLBACK_CHILD_CLOSING = 69, /**< Sent to parent to notify them a child is closing / being * destroyed. in is the child wsi. */ /* --------------------------------------------------------------------- * ----- Callbacks related to TLS certificate management ----- */ LWS_CALLBACK_VHOST_CERT_AGING = 72, /**< When a vhost TLS cert has its expiry checked, this callback * is broadcast to every protocol of every vhost in case the * protocol wants to take some action with this information. * \p in is a pointer to a struct lws_acme_cert_aging_args, * and \p len is the number of days left before it expires, as * a (ssize_t). In the struct lws_acme_cert_aging_args, vh * points to the vhost the cert aging information applies to, * and element_overrides[] is an optional way to update information * from the pvos... NULL in an index means use the information from * from the pvo for the cert renewal, non-NULL in the array index * means use that pointer instead for the index. */ LWS_CALLBACK_VHOST_CERT_UPDATE = 74, /**< When a vhost TLS cert is being updated, progress is * reported to the vhost in question here, including completion * and failure. in points to optional JSON, and len represents the * connection state using enum lws_cert_update_state */ /****** add new things just above ---^ ******/ LWS_CALLBACK_USER = 1000, /**< user code can use any including above without fear of clashes */ }; /** * typedef lws_callback_function() - User server actions * \param wsi: Opaque websocket instance pointer * \param reason: The reason for the call * \param user: Pointer to per-session user data allocated by library * \param in: Pointer used for some callback reasons * \param len: Length set for some callback reasons * * This callback is the way the user controls what is served. All the * protocol detail is hidden and handled by the library. * * For each connection / session there is user data allocated that is * pointed to by "user". You set the size of this user data area when * the library is initialized with lws_create_server. */ typedef int lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len); #define LWS_CB_REASON_AUX_BF__CGI 1 #define LWS_CB_REASON_AUX_BF__PROXY 2 #define LWS_CB_REASON_AUX_BF__CGI_CHUNK_END 4 #define LWS_CB_REASON_AUX_BF__CGI_HEADERS 8 #define LWS_CB_REASON_AUX_BF__PROXY_TRANS_END 16 #define LWS_CB_REASON_AUX_BF__PROXY_HEADERS 32 ///@} libwebsockets-3.2.1/include/libwebsockets/lws-cgi.h000066400000000000000000000057301357643561300224000ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup cgi cgi handling * * ##CGI handling * * These functions allow low-level control over stdin/out/err of the cgi. * * However for most cases, binding the cgi to http in and out, the default * lws implementation already does the right thing. */ enum lws_enum_stdinouterr { LWS_STDIN = 0, LWS_STDOUT = 1, LWS_STDERR = 2, }; enum lws_cgi_hdr_state { LCHS_HEADER, LCHS_CR1, LCHS_LF1, LCHS_CR2, LCHS_LF2, LHCS_RESPONSE, LHCS_DUMP_HEADERS, LHCS_PAYLOAD, LCHS_SINGLE_0A, }; struct lws_cgi_args { struct lws **stdwsi; /**< get fd with lws_get_socket_fd() */ enum lws_enum_stdinouterr ch; /**< channel index */ unsigned char *data; /**< for messages with payload */ enum lws_cgi_hdr_state hdr_state; /**< track where we are in cgi headers */ int len; /**< length */ }; #ifdef LWS_WITH_CGI /** * lws_cgi: spawn network-connected cgi process * * \param wsi: connection to own the process * \param exec_array: array of "exec-name" "arg1" ... "argn" NULL * \param script_uri_path_len: how many chars on the left of the uri are the * path to the cgi, or -1 to spawn without URL-related env vars * \param timeout_secs: seconds script should be allowed to run * \param mp_cgienv: pvo list with per-vhost cgi options to put in env */ LWS_VISIBLE LWS_EXTERN int lws_cgi(struct lws *wsi, const char * const *exec_array, int script_uri_path_len, int timeout_secs, const struct lws_protocol_vhost_options *mp_cgienv); /** * lws_cgi_write_split_stdout_headers: write cgi output accounting for header part * * \param wsi: connection to own the process */ LWS_VISIBLE LWS_EXTERN int lws_cgi_write_split_stdout_headers(struct lws *wsi); /** * lws_cgi_kill: terminate cgi process associated with wsi * * \param wsi: connection to own the process */ LWS_VISIBLE LWS_EXTERN int lws_cgi_kill(struct lws *wsi); /** * lws_cgi_get_stdwsi: get wsi for stdin, stdout, or stderr * * \param wsi: parent wsi that has cgi * \param ch: which of LWS_STDIN, LWS_STDOUT or LWS_STDERR */ LWS_VISIBLE LWS_EXTERN struct lws * lws_cgi_get_stdwsi(struct lws *wsi, enum lws_enum_stdinouterr ch); #endif ///@} libwebsockets-3.2.1/include/libwebsockets/lws-client.h000066400000000000000000000227521357643561300231170ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup client Client related functions * ##Client releated functions * \ingroup lwsapi * * */ ///@{ /** enum lws_client_connect_ssl_connection_flags - flags that may be used * with struct lws_client_connect_info ssl_connection member to control if * and how SSL checks apply to the client connection being created */ enum lws_client_connect_ssl_connection_flags { LCCSCF_USE_SSL = (1 << 0), LCCSCF_ALLOW_SELFSIGNED = (1 << 1), LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2), LCCSCF_ALLOW_EXPIRED = (1 << 3), LCCSCF_ALLOW_INSECURE = (1 << 4), LCCSCF_PIPELINE = (1 << 16), /**< Serialize / pipeline multiple client connections * on a single connection where possible. * * HTTP/1.0: possible if Keep-Alive: yes sent by server * HTTP/1.1: always possible... uses pipelining * HTTP/2: always possible... uses parallel streams * */ }; /** struct lws_client_connect_info - parameters to connect with when using * lws_client_connect_via_info() */ struct lws_client_connect_info { struct lws_context *context; /**< lws context to create connection in */ const char *address; /**< remote address to connect to */ int port; /**< remote port to connect to */ int ssl_connection; /**< 0, or a combination of LCCSCF_ flags */ const char *path; /**< uri path */ const char *host; /**< content of host header */ const char *origin; /**< content of origin header */ const char *protocol; /**< list of ws protocols we could accept */ int ietf_version_or_minus_one; /**< deprecated: currently leave at 0 or -1 */ void *userdata; /**< if non-NULL, use this as wsi user_data instead of malloc it */ const void *client_exts; /**< UNUSED... provide in info.extensions at context creation time */ const char *method; /**< if non-NULL, do this http method instead of ws[s] upgrade. * use "GET" to be a simple http client connection. "RAW" gets * you a connected socket that lws itself will leave alone once * connected. */ struct lws *parent_wsi; /**< if another wsi is responsible for this connection, give it here. * this is used to make sure if the parent closes so do any * child connections first. */ const char *uri_replace_from; /**< if non-NULL, when this string is found in URIs in * text/html content-encoding, it's replaced with uri_replace_to */ const char *uri_replace_to; /**< see uri_replace_from */ struct lws_vhost *vhost; /**< vhost to bind to (used to determine related SSL_CTX) */ struct lws **pwsi; /**< if not NULL, store the new wsi here early in the connection * process. Although we return the new wsi, the call to create the * client connection does progress the connection somewhat and may * meet an error that will result in the connection being scrubbed and * NULL returned. While the wsi exists though, he may process a * callback like CLIENT_CONNECTION_ERROR with his wsi: this gives the * user callback a way to identify which wsi it is that faced the error * even before the new wsi is returned and even if ultimately no wsi * is returned. */ const char *iface; /**< NULL to allow routing on any interface, or interface name or IP * to bind the socket to */ const char *local_protocol_name; /**< NULL: .protocol is used both to select the local protocol handler * to bind to and as the list of remote ws protocols we could * accept. * non-NULL: this protocol name is used to bind the connection to * the local protocol handler. .protocol is used for the * list of remote ws protocols we could accept */ const char *alpn; /**< NULL: allow lws default ALPN list, from vhost if present or from * list of roles built into lws * non-NULL: require one from provided comma-separated list of alpn * tokens */ lws_seq_t *seq; /**< NULL, or an lws_seq_t that wants to be given messages about * this wsi's lifecycle as it connects, errors or closes. */ void *opaque_user_data; /**< This data has no meaning to lws but is applied to the client wsi * and can be retrieved by user code with lws_get_opaque_user_data(). * It's also provided with sequencer messages if the wsi is bound to * an lws_seq_t. */ /* Add new things just above here ---^ * This is part of the ABI, don't needlessly break compatibility * * The below is to ensure later library versions with new * members added above will see 0 (default) even if the app * was not built against the newer headers. */ void *_unused[4]; /**< dummy */ }; /** * lws_client_connect_via_info() - Connect to another websocket server * \param ccinfo: pointer to lws_client_connect_info struct * * This function creates a connection to a remote server using the * information provided in ccinfo. */ LWS_VISIBLE LWS_EXTERN struct lws * lws_client_connect_via_info(const struct lws_client_connect_info *ccinfo); /** * lws_init_vhost_client_ssl() - also enable client SSL on an existing vhost * * \param info: client ssl related info * \param vhost: which vhost to initialize client ssl operations on * * You only need to call this if you plan on using SSL client connections on * the vhost. For non-SSL client connections, it's not necessary to call this. * * The following members of info are used during the call * * - options must have LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT set, * otherwise the call does nothing * - provided_client_ssl_ctx must be NULL to get a generated client * ssl context, otherwise you can pass a prepared one in by setting it * - ssl_cipher_list may be NULL or set to the client valid cipher list * - ssl_ca_filepath may be NULL or client cert filepath * - ssl_cert_filepath may be NULL or client cert filepath * - ssl_private_key_filepath may be NULL or client cert private key * * You must create your vhost explicitly if you want to use this, so you have * a pointer to the vhost. Create the context first with the option flag * LWS_SERVER_OPTION_EXPLICIT_VHOSTS and then call lws_create_vhost() with * the same info struct. */ LWS_VISIBLE LWS_EXTERN int lws_init_vhost_client_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost); /** * lws_http_client_read() - consume waiting received http client data * * \param wsi: client connection * \param buf: pointer to buffer pointer - fill with pointer to your buffer * \param len: pointer to chunk length - fill with max length of buffer * * This is called when the user code is notified client http data has arrived. * The user code may choose to delay calling it to consume the data, for example * waiting until an onward connection is writeable. * * For non-chunked connections, up to len bytes of buf are filled with the * received content. len is set to the actual amount filled before return. * * For chunked connections, the linear buffer content contains the chunking * headers and it cannot be passed in one lump. Instead, this function will * call back LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ with in pointing to the * chunk start and len set to the chunk length. There will be as many calls * as there are chunks or partial chunks in the buffer. */ LWS_VISIBLE LWS_EXTERN int lws_http_client_read(struct lws *wsi, char **buf, int *len); /** * lws_http_client_http_response() - get last HTTP response code * * \param wsi: client connection * * Returns the last server response code, eg, 200 for client http connections. * * You should capture this during the LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP * callback, because after that the memory reserved for storing the related * headers is freed and this value is lost. */ LWS_VISIBLE LWS_EXTERN unsigned int lws_http_client_http_response(struct lws *wsi); LWS_VISIBLE LWS_EXTERN void lws_client_http_body_pending(struct lws *wsi, int something_left_to_send); /** * lws_client_http_body_pending() - control if client connection neeeds to send body * * \param wsi: client connection * \param something_left_to_send: nonzero if need to send more body, 0 (default) * if nothing more to send * * If you will send payload data with your HTTP client connection, eg, for POST, * when you set the related http headers in * LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER callback you should also call * this API with something_left_to_send nonzero, and call * lws_callback_on_writable(wsi); * * After sending the headers, lws will call your callback with * LWS_CALLBACK_CLIENT_HTTP_WRITEABLE reason when writable. You can send the * next part of the http body payload, calling lws_callback_on_writable(wsi); * if there is more to come, or lws_client_http_body_pending(wsi, 0); to * let lws know the last part is sent and the connection can move on. */ ///@} libwebsockets-3.2.1/include/libwebsockets/lws-context-vhost.h000066400000000000000000001320171357643561300244620ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup context-and-vhost context and vhost related functions * ##Context and Vhost releated functions * \ingroup lwsapi * * * LWS requires that there is one context, in which you may define multiple * vhosts. Each vhost is a virtual host, with either its own listen port * or sharing an existing one. Each vhost has its own SSL context that can * be set up individually or left disabled. * * If you don't care about multiple "site" support, you can ignore it and * lws will create a single default vhost at context creation time. */ ///@{ /* * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. */ /** enum lws_context_options - context and vhost options */ enum lws_context_options { LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT = (1 << 1) | (1 << 12), /**< (VH) Don't allow the connection unless the client has a * client cert that we recognize; provides * LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT */ LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME = (1 << 2), /**< (CTX) Don't try to get the server's hostname */ LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT = (1 << 3) | (1 << 12), /**< (VH) Allow non-SSL (plaintext) connections on the same * port as SSL is listening. If combined with * LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS it will try to * force http connections on an https listener (eg, http://x.com:443) to * redirect to an explicit https connection (eg, https://x.com) */ LWS_SERVER_OPTION_LIBEV = (1 << 4), /**< (CTX) Use libev event loop */ LWS_SERVER_OPTION_DISABLE_IPV6 = (1 << 5), /**< (VH) Disable IPV6 support */ LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS = (1 << 6), /**< (VH) Don't load OS CA certs, you will need to load your * own CA cert(s) */ LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED = (1 << 7), /**< (VH) Accept connections with no valid Cert (eg, selfsigned) */ LWS_SERVER_OPTION_VALIDATE_UTF8 = (1 << 8), /**< (VH) Check UT-8 correctness */ LWS_SERVER_OPTION_SSL_ECDH = (1 << 9) | (1 << 12), /**< (VH) initialize ECDH ciphers */ LWS_SERVER_OPTION_LIBUV = (1 << 10), /**< (CTX) Use libuv event loop */ LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS = (1 << 11) | (1 << 12), /**< (VH) Use an http redirect to force the client to ask for https. * Notice if your http server issues the STS header and the client has * ever seen that, the client will fail the http connection before it * can actually do the redirect. * * Combine with LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS to handle, eg, * http://x.com:443 -> https://x.com * * (deprecated: use mount redirection) */ LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT = (1 << 12), /**< (CTX) Initialize the SSL library at all */ LWS_SERVER_OPTION_EXPLICIT_VHOSTS = (1 << 13), /**< (CTX) Only create the context when calling context * create api, implies user code will create its own vhosts */ LWS_SERVER_OPTION_UNIX_SOCK = (1 << 14), /**< (VH) Use Unix socket */ LWS_SERVER_OPTION_STS = (1 << 15), /**< (VH) Send Strict Transport Security header, making * clients subsequently go to https even if user asked for http */ LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY = (1 << 16), /**< (VH) Enable LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE to take effect */ LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE = (1 << 17), /**< (VH) if set, only ipv6 allowed on the vhost */ LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN = (1 << 18), /**< (CTX) Libuv only: Do not spin on SIGSEGV / SIGFPE. A segfault * normally makes the lib spin so you can attach a debugger to it * even if it happened without a debugger in place. You can disable * that by giving this option. */ LWS_SERVER_OPTION_JUST_USE_RAW_ORIGIN = (1 << 19), /**< For backwards-compatibility reasons, by default * lws prepends "http://" to the origin you give in the client * connection info struct. If you give this flag when you create * the context, only the string you give in the client connect * info for .origin (if any) will be used directly. */ LWS_SERVER_OPTION_FALLBACK_TO_RAW /* use below name */ = (1 << 20), LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG= (1 << 20), /**< (VH) if invalid http is coming in the first line, then abandon * trying to treat the connection as http, and belatedly apply the * .listen_accept_role / .listen_accept_protocol info struct members to * the connection. If they are NULL, for backwards-compatibility the * connection is bound to "raw-skt" role, and in order of priority: * 1) the vh protocol with a pvo named "raw", 2) the vh protocol with a * pvo named "default", or 3) protocols[0]. * * Must be combined with LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT * to work with a socket listening with tls. */ LWS_SERVER_OPTION_LIBEVENT = (1 << 21), /**< (CTX) Use libevent event loop */ LWS_SERVER_OPTION_ONLY_RAW /* Use below name instead */ = (1 << 22), LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG = (1 << 22), /**< (VH) All connections to this vhost / port are bound to the * role and protocol given in .listen_accept_role / * .listen_accept_protocol. * * If those explicit user-controlled names are NULL, for backwards- * compatibility the connection is bound to "raw-skt" role, and in order * of priority: 1) the vh protocol with a pvo named "raw", 2) the vh * protocol with a pvo named "default", or 3) protocols[0]. * * It's much preferred to specify the role + protocol using the * .listen_accept_role and .listen_accept_protocol in the info struct. */ LWS_SERVER_OPTION_ALLOW_LISTEN_SHARE = (1 << 23), /**< (VH) Set to allow multiple listen sockets on one interface + * address + port. The default is to strictly allow only one * listen socket at a time. This is automatically selected if you * have multiple service threads. Linux only. */ LWS_SERVER_OPTION_CREATE_VHOST_SSL_CTX = (1 << 24), /**< (VH) Force setting up the vhost SSL_CTX, even though the user * code doesn't explicitly provide a cert in the info struct. It * implies the user code is going to provide a cert at the * LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS callback, which * provides the vhost SSL_CTX * in the user parameter. */ LWS_SERVER_OPTION_SKIP_PROTOCOL_INIT = (1 << 25), /**< (VH) You probably don't want this. It forces this vhost to not * call LWS_CALLBACK_PROTOCOL_INIT on its protocols. It's used in the * special case of a temporary vhost bound to a single protocol. */ LWS_SERVER_OPTION_IGNORE_MISSING_CERT = (1 << 26), /**< (VH) Don't fail if the vhost TLS cert or key are missing, just * continue. The vhost won't be able to serve anything, but if for * example the ACME plugin was configured to fetch a cert, this lets * you bootstrap your vhost from having no cert to start with. */ LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK = (1 << 27), /**< (VH) On this vhost, if the connection is being upgraded, insist * that there's a Host: header and that the contents match the vhost * name + port (443 / 80 are assumed if no :port given based on if the * connection is using TLS). * * By default, without this flag, on upgrade lws just checks that the * Host: header was given without checking the contents... this is to * allow lax hostname mappings like localhost / 127.0.0.1, and CNAME * mappings like www.mysite.com / mysite.com */ LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE = (1 << 28), /**< (VH) Send lws default HTTP headers recommended by Mozilla * Observatory for security. This is a helper option that sends canned * headers on each http response enabling a VERY strict Content Security * Policy. The policy is so strict, for example it won't let the page * run its own inline JS nor show images or take CSS from a different * server. In many cases your JS only comes from your server as do the * image sources and CSS, so that is what you want... attackers hoping * to inject JS into your DOM are completely out of luck since even if * they succeed, it will be rejected for execution by the browser * according to the strict CSP. In other cases you have to deviate from * the complete strictness, in which case don't use this flag: use the * .headers member in the vhost init described in struct * lws_context_creation_info instead to send the adapted headers * yourself. */ LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER = (1 << 29), /**< (VH) If you really want to allow HTTP connections on a tls * listener, you can do it with this combined with * LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT. But this is allowing * accidental loss of the security assurances provided by tls depending * on the client using http when he meant https... it's not * recommended. */ LWS_SERVER_OPTION_FAIL_UPON_UNABLE_TO_BIND = (1 << 30), /**< (VH) When instantiating a new vhost and the specified port is * already in use, a null value shall be return to signal the error. */ LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW = (1 << 31), /**< (VH) Indicates the connections using this vhost should ignore * h2 WINDOW_UPDATE from broken peers and fix them up */ /****** add new things just above ---^ ******/ }; #define lws_check_opt(c, f) (((c) & (f)) == (f)) struct lws_plat_file_ops; /** struct lws_context_creation_info - parameters to create context and /or vhost with * * This is also used to create vhosts.... if LWS_SERVER_OPTION_EXPLICIT_VHOSTS * is not given, then for backwards compatibility one vhost is created at * context-creation time using the info from this struct. * * If LWS_SERVER_OPTION_EXPLICIT_VHOSTS is given, then no vhosts are created * at the same time as the context, they are expected to be created afterwards. */ struct lws_context_creation_info { int port; /**< VHOST: Port to listen on. Use CONTEXT_PORT_NO_LISTEN to suppress * listening for a client. Use CONTEXT_PORT_NO_LISTEN_SERVER if you are * writing a server but you are using \ref sock-adopt instead of the * built-in listener. * * You can also set port to 0, in which case the kernel will pick * a random port that is not already in use. You can find out what * port the vhost is listening on using lws_get_vhost_listen_port() */ const char *iface; /**< VHOST: NULL to bind the listen socket to all interfaces, or the * interface name, eg, "eth2" * If options specifies LWS_SERVER_OPTION_UNIX_SOCK, this member is * the pathname of a UNIX domain socket. you can use the UNIX domain * sockets in abstract namespace, by prepending an at symbol to the * socket name. */ const struct lws_protocols *protocols; /**< VHOST: Array of structures listing supported protocols and a * protocol-specific callback for each one. The list is ended with an * entry that has a NULL callback pointer. SEE ALSO .pprotocols below, * which gives an alternative way to provide an array of pointers to * protocol structs. */ const struct lws_extension *extensions; /**< VHOST: NULL or array of lws_extension structs listing the * extensions this context supports. */ const struct lws_token_limits *token_limits; /**< CONTEXT: NULL or struct lws_token_limits pointer which is * initialized with a token length limit for each possible WSI_TOKEN_ */ const char *ssl_private_key_password; /**< VHOST: NULL or the passphrase needed for the private key. (For * backwards compatibility, this can also be used to pass the client * cert passphrase when setting up a vhost client SSL context, but it is * preferred to use .client_ssl_private_key_password for that.) */ const char *ssl_cert_filepath; /**< VHOST: If libwebsockets was compiled to use ssl, and you want * to listen using SSL, set to the filepath to fetch the * server cert from, otherwise NULL for unencrypted. (For backwards * compatibility, this can also be used to pass the client certificate * when setting up a vhost client SSL context, but it is preferred to * use .client_ssl_cert_filepath for that.) * * Notice you can alternatively set a single DER or PEM from a memory * buffer as the vhost tls cert using \p server_ssl_cert_mem and * \p server_ssl_cert_mem_len. */ const char *ssl_private_key_filepath; /**< VHOST: filepath to private key if wanting SSL mode; * if this is set to NULL but ssl_cert_filepath is set, the * OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY callback is called * to allow setting of the private key directly via openSSL * library calls. (For backwards compatibility, this can also be used * to pass the client cert private key filepath when setting up a * vhost client SSL context, but it is preferred to use * .client_ssl_private_key_filepath for that.) * * Notice you can alternatively set a DER or PEM private key from a * memory buffer as the vhost tls private key using * \p server_ssl_private_key_mem and \p server_ssl_private_key_mem_len. */ const char *ssl_ca_filepath; /**< VHOST: CA certificate filepath or NULL. (For backwards * compatibility, this can also be used to pass the client CA * filepath when setting up a vhost client SSL context, * but it is preferred to use .client_ssl_ca_filepath for that.) * * Notice you can alternatively set a DER or PEM CA cert from a memory * buffer using \p server_ssl_ca_mem and \p server_ssl_ca_mem_len. */ const char *ssl_cipher_list; /**< VHOST: List of valid ciphers to use ON TLS1.2 AND LOWER ONLY (eg, * "RC4-MD5:RC4-SHA:AES128-SHA:AES256-SHA:HIGH:!DSS:!aNULL" * or you can leave it as NULL to get "DEFAULT" (For backwards * compatibility, this can also be used to pass the client cipher * list when setting up a vhost client SSL context, * but it is preferred to use .client_ssl_cipher_list for that.) * SEE .tls1_3_plus_cipher_list and .client_tls_1_3_plus_cipher_list * for the equivalent for tls1.3. */ const char *http_proxy_address; /**< VHOST: If non-NULL, attempts to proxy via the given address. * If proxy auth is required, use format * "username:password\@server:port" */ unsigned int http_proxy_port; /**< VHOST: If http_proxy_address was non-NULL, uses this port */ int gid; /**< CONTEXT: group id to change to after setting listen socket, * or -1. See also .username below. */ int uid; /**< CONTEXT: user id to change to after setting listen socket, * or -1. See also .groupname below. */ unsigned int options; /**< VHOST + CONTEXT: 0, or LWS_SERVER_OPTION_... bitfields */ void *user; /**< VHOST + CONTEXT: optional user pointer that will be associated * with the context when creating the context (and can be retrieved by * lws_context_user(context), or with the vhost when creating the vhost * (and can be retrieved by lws_vhost_user(vhost)). You will need to * use LWS_SERVER_OPTION_EXPLICIT_VHOSTS and create the vhost separately * if you care about giving the context and vhost different user pointer * values. */ int ka_time; /**< CONTEXT: 0 for no TCP keepalive, otherwise apply this keepalive * timeout to all libwebsocket sockets, client or server */ int ka_probes; /**< CONTEXT: if ka_time was nonzero, after the timeout expires how many * times to try to get a response from the peer before giving up * and killing the connection */ int ka_interval; /**< CONTEXT: if ka_time was nonzero, how long to wait before each ka_probes * attempt */ #if defined(LWS_WITH_TLS) && !defined(LWS_WITH_MBEDTLS) SSL_CTX *provided_client_ssl_ctx; /**< CONTEXT: If non-null, swap out libwebsockets ssl * implementation for the one provided by provided_ssl_ctx. * Libwebsockets no longer is responsible for freeing the context * if this option is selected. */ #else /* maintain structure layout either way */ void *provided_client_ssl_ctx; /**< dummy if ssl disabled */ #endif unsigned short max_http_header_data; /**< CONTEXT: The max amount of header payload that can be handled * in an http request (unrecognized header payload is dropped) */ unsigned short max_http_header_pool; /**< CONTEXT: The max number of connections with http headers that * can be processed simultaneously (the corresponding memory is * allocated and deallocated dynamically as needed). If the pool is * fully busy new incoming connections must wait for accept until one * becomes free. 0 = allow as many ah as number of availble fds for * the process */ unsigned int count_threads; /**< CONTEXT: how many contexts to create in an array, 0 = 1 */ unsigned int fd_limit_per_thread; /**< CONTEXT: nonzero means restrict each service thread to this * many fds, 0 means the default which is divide the process fd * limit by the number of threads. * * Note if this is nonzero, and fd_limit_per_thread multiplied by the * number of service threads is less than the process ulimit, then lws * restricts internal lookup table allocation to the smaller size, and * switches to a less efficient lookup scheme. You should use this to * trade off speed against memory usage if you know the lws context * will only use a handful of fds. * * Bear in mind lws may use some fds internally, for example for the * cancel pipe, so you may need to allow for some extras for normal * operation. */ unsigned int timeout_secs; /**< VHOST: various processes involving network roundtrips in the * library are protected from hanging forever by timeouts. If * nonzero, this member lets you set the timeout used in seconds. * Otherwise a default timeout is used. */ const char *ecdh_curve; /**< VHOST: if NULL, defaults to initializing server with * "prime256v1" */ const char *vhost_name; /**< VHOST: name of vhost, must match external DNS name used to * access the site, like "warmcat.com" as it's used to match * Host: header and / or SNI name for SSL. */ const char * const *plugin_dirs; /**< CONTEXT: NULL, or NULL-terminated array of directories to * scan for lws protocol plugins at context creation time */ const struct lws_protocol_vhost_options *pvo; /**< VHOST: pointer to optional linked list of per-vhost * options made accessible to protocols */ int keepalive_timeout; /**< VHOST: (default = 0 = 5s) seconds to allow remote * client to hold on to an idle HTTP/1.1 connection */ const char *log_filepath; /**< VHOST: filepath to append logs to... this is opened before * any dropping of initial privileges */ const struct lws_http_mount *mounts; /**< VHOST: optional linked list of mounts for this vhost */ const char *server_string; /**< CONTEXT: string used in HTTP headers to identify server * software, if NULL, "libwebsockets". */ unsigned int pt_serv_buf_size; /**< CONTEXT: 0 = default of 4096. This buffer is used by * various service related features including file serving, it * defines the max chunk of file that can be sent at once. * At the risk of lws having to buffer failed large sends, it * can be increased to, eg, 128KiB to improve throughput. */ unsigned int max_http_header_data2; /**< CONTEXT: if max_http_header_data is 0 and this * is nonzero, this will be used in place of the default. It's * like this for compatibility with the original short version, * this is unsigned int length. */ long ssl_options_set; /**< VHOST: Any bits set here will be set as server SSL options */ long ssl_options_clear; /**< VHOST: Any bits set here will be cleared as server SSL options */ unsigned short ws_ping_pong_interval; /**< CONTEXT: 0 for none, else interval in seconds between sending * PINGs on idle websocket connections. When the PING is sent, * the PONG must come within the normal timeout_secs timeout period * or the connection will be dropped. * Any RX or TX traffic on the connection restarts the interval timer, * so a connection which always sends or receives something at intervals * less than the interval given here will never send PINGs / expect * PONGs. Conversely as soon as the ws connection is established, an * idle connection will do the PING / PONG roundtrip as soon as * ws_ping_pong_interval seconds has passed without traffic */ const struct lws_protocol_vhost_options *headers; /**< VHOST: pointer to optional linked list of per-vhost * canned headers that are added to server responses */ const struct lws_protocol_vhost_options *reject_service_keywords; /**< CONTEXT: Optional list of keywords and rejection codes + text. * * The keywords are checked for existing in the user agent string. * * Eg, "badrobot" "404 Not Found" */ void *external_baggage_free_on_destroy; /**< CONTEXT: NULL, or pointer to something externally malloc'd, that * should be freed when the context is destroyed. This allows you to * automatically sync the freeing action to the context destruction * action, so there is no need for an external free() if the context * succeeded to create. */ const char *client_ssl_private_key_password; /**< VHOST: Client SSL context init: NULL or the passphrase needed * for the private key */ const char *client_ssl_cert_filepath; /**< VHOST: Client SSL context init: The certificate the client * should present to the peer on connection */ const void *client_ssl_cert_mem; /**< VHOST: Client SSL context init: client certificate memory buffer or * NULL... use this to load client cert from memory instead of file */ unsigned int client_ssl_cert_mem_len; /**< VHOST: Client SSL context init: length of client_ssl_cert_mem in * bytes */ const char *client_ssl_private_key_filepath; /**< VHOST: Client SSL context init: filepath to client private key * if this is set to NULL but client_ssl_cert_filepath is set, you * can handle the LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS * callback of protocols[0] to allow setting of the private key directly * via tls library calls */ const char *client_ssl_ca_filepath; /**< VHOST: Client SSL context init: CA certificate filepath or NULL */ const void *client_ssl_ca_mem; /**< VHOST: Client SSL context init: CA certificate memory buffer or * NULL... use this to load CA cert from memory instead of file */ unsigned int client_ssl_ca_mem_len; /**< VHOST: Client SSL context init: length of client_ssl_ca_mem in * bytes */ const char *client_ssl_cipher_list; /**< VHOST: Client SSL context init: List of valid ciphers to use (eg, * "RC4-MD5:RC4-SHA:AES128-SHA:AES256-SHA:HIGH:!DSS:!aNULL" * or you can leave it as NULL to get "DEFAULT" */ const struct lws_plat_file_ops *fops; /**< CONTEXT: NULL, or pointer to an array of fops structs, terminated * by a sentinel with NULL .open. * * If NULL, lws provides just the platform file operations struct for * backwards compatibility. */ int simultaneous_ssl_restriction; /**< CONTEXT: 0 (no limit) or limit of simultaneous SSL sessions * possible.*/ const char *socks_proxy_address; /**< VHOST: If non-NULL, attempts to proxy via the given address. * If proxy auth is required, use format * "username:password\@server:port" */ unsigned int socks_proxy_port; /**< VHOST: If socks_proxy_address was non-NULL, uses this port */ #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) cap_value_t caps[4]; /**< CONTEXT: array holding Linux capabilities you want to * continue to be available to the server after it transitions * to a noprivileged user. Usually none are needed but for, eg, * .bind_iface, CAP_NET_RAW is required. This gives you a way * to still have the capability but drop root. */ char count_caps; /**< CONTEXT: count of Linux capabilities in .caps[]. 0 means * no capabilities will be inherited from root (the default) */ #endif int bind_iface; /**< VHOST: nonzero to strictly bind sockets to the interface name in * .iface (eg, "eth2"), using SO_BIND_TO_DEVICE. * * Requires SO_BINDTODEVICE support from your OS and CAP_NET_RAW * capability. * * Notice that common things like access network interface IP from * your local machine use your lo / loopback interface and will be * disallowed by this. */ int ssl_info_event_mask; /**< VHOST: mask of ssl events to be reported on LWS_CALLBACK_SSL_INFO * callback for connections on this vhost. The mask values are of * the form SSL_CB_ALERT, defined in openssl/ssl.h. The default of * 0 means no info events will be reported. */ unsigned int timeout_secs_ah_idle; /**< VHOST: seconds to allow a client to hold an ah without using it. * 0 defaults to 10s. */ unsigned short ip_limit_ah; /**< CONTEXT: max number of ah a single IP may use simultaneously * 0 is no limit. This is a soft limit: if the limit is * reached, connections from that IP will wait in the ah * waiting list and not be able to acquire an ah until * a connection belonging to the IP relinquishes one it * already has. */ unsigned short ip_limit_wsi; /**< CONTEXT: max number of wsi a single IP may use simultaneously. * 0 is no limit. This is a hard limit, connections from * the same IP will simply be dropped once it acquires the * amount of simultaneous wsi / accepted connections * given here. */ uint32_t http2_settings[7]; /**< VHOST: if http2_settings[0] is nonzero, the values given in * http2_settings[1]..[6] are used instead of the lws * platform default values. * Just leave all at 0 if you don't care. */ const char *error_document_404; /**< VHOST: If non-NULL, when asked to serve a non-existent file, * lws attempts to server this url path instead. Eg, * "/404.html" */ const char *alpn; /**< CONTEXT: If non-NULL, default list of advertised alpn, comma- * separated * * VHOST: If non-NULL, per-vhost list of advertised alpn, comma- * separated */ void **foreign_loops; /**< CONTEXT: This is ignored if the context is not being started with * an event loop, ie, .options has a flag like * LWS_SERVER_OPTION_LIBUV. * * NULL indicates lws should start its own even loop for * each service thread, and deal with closing the loops * when the context is destroyed. * * Non-NULL means it points to an array of external * ("foreign") event loops that are to be used in turn for * each service thread. In the default case of 1 service * thread, it can just point to one foreign event loop. */ void (*signal_cb)(void *event_lib_handle, int signum); /**< CONTEXT: NULL: default signal handling. Otherwise this receives * the signal handler callback. event_lib_handle is the * native event library signal handle, eg uv_signal_t * * for libuv. */ struct lws_context **pcontext; /**< CONTEXT: if non-NULL, at the end of context destroy processing, * the pointer pointed to by pcontext is written with NULL. You can * use this to let foreign event loops know that lws context destruction * is fully completed. */ void (*finalize)(struct lws_vhost *vh, void *arg); /**< VHOST: NULL, or pointer to function that will be called back * when the vhost is just about to be freed. The arg parameter * will be set to whatever finalize_arg is below. */ void *finalize_arg; /**< VHOST: opaque pointer lws ignores but passes to the finalize * callback. If you don't care, leave it NULL. */ unsigned int max_http_header_pool2; /**< CONTEXT: if max_http_header_pool is 0 and this * is nonzero, this will be used in place of the default. It's * like this for compatibility with the original short version: * this is unsigned int length. */ long ssl_client_options_set; /**< VHOST: Any bits set here will be set as CLIENT SSL options */ long ssl_client_options_clear; /**< VHOST: Any bits set here will be cleared as CLIENT SSL options */ const char *tls1_3_plus_cipher_list; /**< VHOST: List of valid ciphers to use for incoming server connections * ON TLS1.3 AND ABOVE (eg, "TLS_CHACHA20_POLY1305_SHA256" on this vhost * or you can leave it as NULL to get "DEFAULT". * SEE .client_tls_1_3_plus_cipher_list to do the same on the vhost * client SSL_CTX. */ const char *client_tls_1_3_plus_cipher_list; /**< VHOST: List of valid ciphers to use for outgoing client connections * ON TLS1.3 AND ABOVE on this vhost (eg, * "TLS_CHACHA20_POLY1305_SHA256") or you can leave it as NULL to get * "DEFAULT". */ const char *listen_accept_role; /**< VHOST: NULL for default, or force accepted incoming connections to * bind to this role. Uses the role names from their ops struct, eg, * "raw-skt". */ const char *listen_accept_protocol; /**< VHOST: NULL for default, or force accepted incoming connections to * bind to this vhost protocol name. */ const struct lws_protocols **pprotocols; /**< VHOST: NULL: use .protocols, otherwise ignore .protocols and use * this array of pointers to protocols structs. The end of the array * is marked by a NULL pointer. * * This is preferred over .protocols, because it allows the protocol * struct to be opaquely defined elsewhere, with just a pointer to it * needed to create the context with it. .protocols requires also * the type of the user data to be known so its size can be given. */ const void *server_ssl_cert_mem; /**< VHOST: Alternative for \p ssl_cert_filepath that allows setting * from memory instead of from a file. At most one of * \p ssl_cert_filepath or \p server_ssl_cert_mem should be non-NULL. */ unsigned int server_ssl_cert_mem_len; /**< VHOST: Server SSL context init: length of server_ssl_cert_mem in * bytes */ const void *server_ssl_private_key_mem; /**< VHOST: Alternative for \p ssl_private_key_filepath allowing * init from a private key in memory instead of a file. At most one * of \p ssl_private_key_filepath or \p server_ssl_private_key_mem * should be non-NULL. */ unsigned int server_ssl_private_key_mem_len; /**< VHOST: length of \p server_ssl_private_key_mem in memory */ const void *server_ssl_ca_mem; /**< VHOST: Alternative for \p ssl_ca_filepath allowing * init from a CA cert in memory instead of a file. At most one * of \p ssl_ca_filepath or \p server_ssl_ca_mem should be non-NULL. */ unsigned int server_ssl_ca_mem_len; /**< VHOST: length of \p server_ssl_ca_mem in memory */ const char *username; /**< CONTEXT: string username for post-init * permissions. Like .uid but takes a string username. */ const char *groupname; /**< CONTEXT: string groupname for post-init * permissions. Like .gid but takes a string groupname. */ const char *unix_socket_perms; /**< VHOST: if your vhost is listening * on a unix socket, you can give a "username:groupname" string here * to control the owner:group it's created with. It's always created * with 0660 mode. */ const lws_system_ops_t *system_ops; /**< CONTEXT: hook up lws_system_ apis to system-specific * implementations */ /* Add new things just above here ---^ * This is part of the ABI, don't needlessly break compatibility * * The below is to ensure later library versions with new * members added above will see 0 (default) even if the app * was not built against the newer headers. */ void *_unused[4]; /**< dummy */ }; /** * lws_create_context() - Create the websocket handler * \param info: pointer to struct with parameters * * This function creates the listening socket (if serving) and takes care * of all initialization in one step. * * If option LWS_SERVER_OPTION_EXPLICIT_VHOSTS is given, no vhost is * created; you're expected to create your own vhosts afterwards using * lws_create_vhost(). Otherwise a vhost named "default" is also created * using the information in the vhost-related members, for compatibility. * * After initialization, it returns a struct lws_context * that * represents this server. After calling, user code needs to take care * of calling lws_service() with the context pointer to get the * server's sockets serviced. This must be done in the same process * context as the initialization call. * * The protocol callback functions are called for a handful of events * including http requests coming in, websocket connections becoming * established, and data arriving; it's also called periodically to allow * async transmission. * * HTTP requests are sent always to the FIRST protocol in protocol, since * at that time websocket protocol has not been negotiated. Other * protocols after the first one never see any HTTP callback activity. * * The server created is a simple http server by default; part of the * websocket standard is upgrading this http connection to a websocket one. * * This allows the same server to provide files like scripts and favicon / * images or whatever over http and dynamic data over websockets all in * one place; they're all handled in the user callback. */ LWS_VISIBLE LWS_EXTERN struct lws_context * lws_create_context(const struct lws_context_creation_info *info); /** * lws_context_destroy() - Destroy the websocket context * \param context: Websocket context * * This function closes any active connections and then frees the * context. After calling this, any further use of the context is * undefined. */ LWS_VISIBLE LWS_EXTERN void lws_context_destroy(struct lws_context *context); typedef int (*lws_reload_func)(void); /** * lws_context_deprecate() - Deprecate the websocket context * * \param context: Websocket context * \param cb: Callback notified when old context listen sockets are closed * * This function is used on an existing context before superceding it * with a new context. * * It closes any listen sockets in the context, so new connections are * not possible. * * And it marks the context to be deleted when the number of active * connections into it falls to zero. * * This is aimed at allowing seamless configuration reloads. * * The callback cb will be called after the listen sockets are actually * closed and may be reopened. In the callback the new context should be * configured and created. (With libuv, socket close happens async after * more loop events). */ LWS_VISIBLE LWS_EXTERN void lws_context_deprecate(struct lws_context *context, lws_reload_func cb); LWS_VISIBLE LWS_EXTERN int lws_context_is_deprecated(struct lws_context *context); /** * lws_set_proxy() - Setups proxy to lws_context. * \param vhost: pointer to struct lws_vhost you want set proxy for * \param proxy: pointer to c string containing proxy in format address:port * * Returns 0 if proxy string was parsed and proxy was setup. * Returns -1 if proxy is NULL or has incorrect format. * * This is only required if your OS does not provide the http_proxy * environment variable (eg, OSX) * * IMPORTANT! You should call this function right after creation of the * lws_context and before call to connect. If you call this * function after connect behavior is undefined. * This function will override proxy settings made on lws_context * creation with genenv() call. */ LWS_VISIBLE LWS_EXTERN int lws_set_proxy(struct lws_vhost *vhost, const char *proxy); /** * lws_set_socks() - Setup socks to lws_context. * \param vhost: pointer to struct lws_vhost you want set socks for * \param socks: pointer to c string containing socks in format address:port * * Returns 0 if socks string was parsed and socks was setup. * Returns -1 if socks is NULL or has incorrect format. * * This is only required if your OS does not provide the socks_proxy * environment variable (eg, OSX) * * IMPORTANT! You should call this function right after creation of the * lws_context and before call to connect. If you call this * function after connect behavior is undefined. * This function will override proxy settings made on lws_context * creation with genenv() call. */ LWS_VISIBLE LWS_EXTERN int lws_set_socks(struct lws_vhost *vhost, const char *socks); struct lws_vhost; /** * lws_create_vhost() - Create a vhost (virtual server context) * \param context: pointer to result of lws_create_context() * \param info: pointer to struct with parameters * * This function creates a virtual server (vhost) using the vhost-related * members of the info struct. You can create many vhosts inside one context * if you created the context with the option LWS_SERVER_OPTION_EXPLICIT_VHOSTS */ LWS_VISIBLE LWS_EXTERN struct lws_vhost * lws_create_vhost(struct lws_context *context, const struct lws_context_creation_info *info); /** * lws_vhost_destroy() - Destroy a vhost (virtual server context) * * \param vh: pointer to result of lws_create_vhost() * * This function destroys a vhost. Normally, if you just want to exit, * then lws_destroy_context() will take care of everything. If you want * to destroy an individual vhost and all connections and allocations, you * can do it with this. * * If the vhost has a listen sockets shared by other vhosts, it will be given * to one of the vhosts sharing it rather than closed. * * The vhost close is staged according to the needs of the event loop, and if * there are multiple service threads. At the point the vhost itself if * about to be freed, if you provided a finalize callback and optional arg at * vhost creation time, it will be called just before the vhost is freed. */ LWS_VISIBLE LWS_EXTERN void lws_vhost_destroy(struct lws_vhost *vh); /** * lwsws_get_config_globals() - Parse a JSON server config file * \param info: pointer to struct with parameters * \param d: filepath of the config file * \param config_strings: storage for the config strings extracted from JSON, * the pointer is incremented as strings are stored * \param len: pointer to the remaining length left in config_strings * the value is decremented as strings are stored * * This function prepares a n lws_context_creation_info struct with global * settings from a file d. * * Requires CMake option LWS_WITH_LEJP_CONF to have been enabled */ LWS_VISIBLE LWS_EXTERN int lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d, char **config_strings, int *len); /** * lwsws_get_config_vhosts() - Create vhosts from a JSON server config file * \param context: pointer to result of lws_create_context() * \param info: pointer to struct with parameters * \param d: filepath of the config file * \param config_strings: storage for the config strings extracted from JSON, * the pointer is incremented as strings are stored * \param len: pointer to the remaining length left in config_strings * the value is decremented as strings are stored * * This function creates vhosts into a context according to the settings in *JSON files found in directory d. * * Requires CMake option LWS_WITH_LEJP_CONF to have been enabled */ LWS_VISIBLE LWS_EXTERN int lwsws_get_config_vhosts(struct lws_context *context, struct lws_context_creation_info *info, const char *d, char **config_strings, int *len); /** * lws_get_vhost() - return the vhost a wsi belongs to * * \param wsi: which connection */ LWS_VISIBLE LWS_EXTERN struct lws_vhost * lws_get_vhost(struct lws *wsi); /** * lws_get_vhost_name() - returns the name of a vhost * * \param vhost: which vhost */ LWS_VISIBLE LWS_EXTERN const char * lws_get_vhost_name(struct lws_vhost *vhost); /** * lws_get_vhost_by_name() - returns the vhost with the requested name, or NULL * * \param context: the lws_context to look in * \param name: vhost name we are looking for * * Returns NULL, or the vhost with the name \p name */ LWS_VISIBLE LWS_EXTERN struct lws_vhost * lws_get_vhost_by_name(struct lws_context *context, const char *name); /** * lws_get_vhost_port() - returns the port a vhost listens on, or -1 * * \param vhost: which vhost */ LWS_VISIBLE LWS_EXTERN int lws_get_vhost_port(struct lws_vhost *vhost); /** * lws_get_vhost_user() - returns the user pointer for the vhost * * \param vhost: which vhost */ LWS_VISIBLE LWS_EXTERN void * lws_get_vhost_user(struct lws_vhost *vhost); /** * lws_get_vhost_iface() - returns the binding for the vhost listen socket * * \param vhost: which vhost */ LWS_VISIBLE LWS_EXTERN const char * lws_get_vhost_iface(struct lws_vhost *vhost); /** * lws_json_dump_vhost() - describe vhost state and stats in JSON * * \param vh: the vhost * \param buf: buffer to fill with JSON * \param len: max length of buf */ LWS_VISIBLE LWS_EXTERN int lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len); /** * lws_json_dump_context() - describe context state and stats in JSON * * \param context: the context * \param buf: buffer to fill with JSON * \param len: max length of buf * \param hide_vhosts: nonzero to not provide per-vhost mount etc information * * Generates a JSON description of vhost state into buf */ LWS_VISIBLE LWS_EXTERN int lws_json_dump_context(const struct lws_context *context, char *buf, int len, int hide_vhosts); /** * lws_vhost_user() - get the user data associated with the vhost * \param vhost: Websocket vhost * * This returns the optional user pointer that can be attached to * a vhost when it was created. Lws never dereferences this pointer, it only * sets it when the vhost is created, and returns it using this api. */ LWS_VISIBLE LWS_EXTERN void * lws_vhost_user(struct lws_vhost *vhost); /** * lws_context_user() - get the user data associated with the context * \param context: Websocket context * * This returns the optional user allocation that can be attached to * the context the sockets live in at context_create time. It's a way * to let all sockets serviced in the same context share data without * using globals statics in the user code. */ LWS_VISIBLE LWS_EXTERN void * lws_context_user(struct lws_context *context); /*! \defgroup vhost-mounts Vhost mounts and options * \ingroup context-and-vhost-creation * * ##Vhost mounts and options */ ///@{ /** struct lws_protocol_vhost_options - linked list of per-vhost protocol * name=value options * * This provides a general way to attach a linked-list of name=value pairs, * which can also have an optional child link-list using the options member. */ struct lws_protocol_vhost_options { const struct lws_protocol_vhost_options *next; /**< linked list */ const struct lws_protocol_vhost_options *options; /**< child linked-list of more options for this node */ const char *name; /**< name of name=value pair */ const char *value; /**< value of name=value pair */ }; /** enum lws_mount_protocols * This specifies the mount protocol for a mountpoint, whether it is to be * served from a filesystem, or it is a cgi etc. */ enum lws_mount_protocols { LWSMPRO_HTTP = 0, /**< http reverse proxy */ LWSMPRO_HTTPS = 1, /**< https reverse proxy */ LWSMPRO_FILE = 2, /**< serve from filesystem directory */ LWSMPRO_CGI = 3, /**< pass to CGI to handle */ LWSMPRO_REDIR_HTTP = 4, /**< redirect to http:// url */ LWSMPRO_REDIR_HTTPS = 5, /**< redirect to https:// url */ LWSMPRO_CALLBACK = 6, /**< hand by named protocol's callback */ }; /** struct lws_http_mount * * arguments for mounting something in a vhost's url namespace */ struct lws_http_mount { const struct lws_http_mount *mount_next; /**< pointer to next struct lws_http_mount */ const char *mountpoint; /**< mountpoint in http pathspace, eg, "/" */ const char *origin; /**< path to be mounted, eg, "/var/www/warmcat.com" */ const char *def; /**< default target, eg, "index.html" */ const char *protocol; /**<"protocol-name" to handle mount */ const struct lws_protocol_vhost_options *cgienv; /**< optional linked-list of cgi options. These are created * as environment variables for the cgi process */ const struct lws_protocol_vhost_options *extra_mimetypes; /**< optional linked-list of mimetype mappings */ const struct lws_protocol_vhost_options *interpret; /**< optional linked-list of files to be interpreted */ int cgi_timeout; /**< seconds cgi is allowed to live, if cgi://mount type */ int cache_max_age; /**< max-age for reuse of client cache of files, seconds */ unsigned int auth_mask; /**< bits set here must be set for authorized client session */ unsigned int cache_reusable:1; /**< set if client cache may reuse this */ unsigned int cache_revalidate:1; /**< set if client cache should revalidate on use */ unsigned int cache_intermediaries:1; /**< set if intermediaries are allowed to cache */ unsigned char origin_protocol; /**< one of enum lws_mount_protocols */ unsigned char mountpoint_len; /**< length of mountpoint string */ const char *basic_auth_login_file; /** * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * must be included manually as * * #include * * if dbus apis needed */ #if !defined(__LWS_DBUS_H__) #define __LWS_DBUS_H__ #include /* helper type to simplify implementing methods as individual functions */ typedef DBusHandlerResult (*lws_dbus_message_handler)(DBusConnection *conn, DBusMessage *message, DBusMessage **reply, void *d); struct lws_dbus_ctx; typedef void (*lws_dbus_closing_t)(struct lws_dbus_ctx *ctx); struct lws_dbus_ctx { struct lws_dll2_owner owner; /* dbusserver ctx: HEAD of accepted list */ struct lws_dll2 next; /* dbusserver ctx: HEAD of accepted list */ struct lws_vhost *vh; /* the vhost we logically bind to in lws */ int tsi; /* the lws thread service index (0 if only one service thread as is the default */ DBusConnection *conn; DBusServer *dbs; DBusWatch *w[4]; DBusPendingCall *pc; char hup; char timeouts; /* cb_closing callback will be called after the connection and this * related ctx struct have effectively gone out of scope. * * The callback should close and clean up the connection and free the * ctx. */ lws_dbus_closing_t cb_closing; }; /** * lws_dbus_connection_setup() - bind dbus connection object to lws event loop * * \param ctx: additional information about the connection * \param conn: the DBusConnection object to bind * * This configures a DBusConnection object to use lws for watchers and timeout * operations. */ LWS_VISIBLE LWS_EXTERN int lws_dbus_connection_setup(struct lws_dbus_ctx *ctx, DBusConnection *conn, lws_dbus_closing_t cb_closing); /** * lws_dbus_server_listen() - bind dbus connection object to lws event loop * * \param ctx: additional information about the connection * \param ads: the DBUS address to listen on, eg, "unix:abstract=mysocket" * \param err: a DBusError object to take any extra error information * \param new_conn: a callback function to prepare new accepted connections * * This creates a DBusServer and binds it to the lws event loop, and your * callback to accept new connections. */ LWS_VISIBLE LWS_EXTERN DBusServer * lws_dbus_server_listen(struct lws_dbus_ctx *ctx, const char *ads, DBusError *err, DBusNewConnectionFunction new_conn); #endif libwebsockets-3.2.1/include/libwebsockets/lws-diskcache.h000066400000000000000000000200101357643561300235400ustar00rootroot00000000000000/* * libwebsockets - disk cache helpers * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup diskcache LWS disk cache * ## Disk cache API * * Lws provides helper apis useful if you need a disk cache containing hashed * files and need to delete files from it on an LRU basis to keep it below some * size limit. * * The API `lws_diskcache_prepare()` deals with creating the cache dir and * 256 subdirs, which are used according to the first two chars of the hex * hash of the cache file. * * `lws_diskcache_create()` and `lws_diskcache_destroy()` allocate and free * an opaque struct that represents the disk cache. * * `lws_diskcache_trim()` should be called at eg, 1s intervals to perform the * cache dir monitoring and LRU autodelete in the background lazily. It can * be done in its own thread or on a timer... it monitors the directories in a * stateful way that stats one or more file in the cache per call, and keeps * a list of the oldest files as it goes. When it completes a scan, if the * aggregate size is over the limit, it will delete oldest files first to try * to keep it under the limit. * * The cache size monitoring is extremely efficient in time and memory even when * the cache directory becomes huge. * * `lws_diskcache_query()` is used to determine if the file already exists in * the cache, or if it must be created. If it must be created, then the file * is opened using a temp name that must be converted to a findable name with * `lws_diskcache_finalize_name()` when the generation of the file contents are * complete. Aborted cached files that did not complete generation will be * flushed by the LRU eventually. If the file already exists, it is 'touched' * to make it new again and the fd returned. * */ ///@{ struct lws_diskcache_scan; /** * lws_diskcache_create() - creates an opaque struct representing the disk cache * * \param cache_dir_base: The cache dir path, eg `/var/cache/mycache` * \param cache_size_limit: maximum size on disk the cache is allowed to use * * This returns an opaque `struct lws_diskcache_scan *` which represents the * disk cache, the trim scanning state and so on. You should use * `lws_diskcache_destroy()` to free it to destroy it. */ LWS_VISIBLE LWS_EXTERN struct lws_diskcache_scan * lws_diskcache_create(const char *cache_dir_base, uint64_t cache_size_limit); /** * lws_diskcache_destroy() - destroys the pointer returned by ...create() * * \param lds: pointer to the pointer returned by lws_diskcache_create() * * Frees *lds and any allocations it did, and then sets *lds to NULL and * returns. */ LWS_VISIBLE LWS_EXTERN void lws_diskcache_destroy(struct lws_diskcache_scan **lds); /** * lws_diskcache_prepare() - ensures the cache dir structure exists on disk * * \param cache_base_dir: The cache dir path, eg `/var/cache/mycache` * \param mode: octal dir mode to enforce, like 0700 * \param uid: uid the cache dir should belong to * * This should be called while your app is still privileged. It will create * the cache directory structure on disk as necessary, enforce the given access * mode on it and set the given uid as the owner. It won't make any trouble * if the cache already exists. * * Typically the mode is 0700 and the owner is the user that your application * will transition to use when it drops root privileges. */ LWS_VISIBLE LWS_EXTERN int lws_diskcache_prepare(const char *cache_base_dir, int mode, int uid); #define LWS_DISKCACHE_QUERY_NO_CACHE 0 #define LWS_DISKCACHE_QUERY_EXISTS 1 #define LWS_DISKCACHE_QUERY_CREATING 2 #define LWS_DISKCACHE_QUERY_ONGOING 3 /* something else is creating it */ /** * lws_diskcache_query() - ensures the cache dir structure exists on disk * * \param lds: The opaque struct representing the disk cache * \param is_bot: nonzero means the request is from a bot. Don't create new cache contents if so. * \param hash_hex: hex string representation of the cache object hash * \param _fd: pointer to the fd to be set * \param cache: destination string to take the cache filepath * \param cache_len: length of the buffer at `cache` * \param extant_cache_len: pointer to a size_t to take any extant cached file size * * This function is called when you want to find if the hashed name already * exists in the cache. The possibilities for the return value are * * - LWS_DISKCACHE_QUERY_NO_CACHE: It's not in the cache and you can't create * it in the cache for whatever reason. * - LWS_DISKCACHE_QUERY_EXISTS: It exists in the cache. It's open RDONLY and * *_fd has been set to the file descriptor. *extant_cache_len has been set * to the size of the cached file in bytes. cache has been set to the * full filepath of the cached file. Closing _fd is your responsibility. * - LWS_DISKCACHE_QUERY_CREATING: It didn't exist, but a temp file has been * created in the cache and *_fd set to a file descriptor opened on it RDWR. * You should create the contents, and call `lws_diskcache_finalize_name()` * when it is done. Closing _fd is your responsibility. * - LWS_DISKCACHE_QUERY_ONGOING: not returned by this api, but you may find it * desirable to make a wrapper function which can handle another asynchronous * process that is already creating the cached file. This can be used to * indicate that situation externally... how to determine the same thing is * already being generated is out of scope of this api. */ LWS_VISIBLE LWS_EXTERN int lws_diskcache_query(struct lws_diskcache_scan *lds, int is_bot, const char *hash_hex, int *_fd, char *cache, int cache_len, size_t *extant_cache_len); /** * lws_diskcache_query() - ensures the cache dir structure exists on disk * * \param cache: The cache file temp name returned with LWS_DISKCACHE_QUERY_CREATING * * This renames the cache file you are creating to its final name. It should * be called on the temp name returned by `lws_diskcache_query()` if it gave a * LWS_DISKCACHE_QUERY_CREATING return, after you have filled the cache file and * closed it. */ LWS_VISIBLE LWS_EXTERN int lws_diskcache_finalize_name(char *cache); /** * lws_diskcache_trim() - performs one or more file checks in the cache for size management * * \param lds: The opaque object representing the cache * * This should be called periodically to statefully walk the cache on disk * collecting the oldest files. When it has visited every file, if the cache * is oversize it will delete the oldest files until it's back under size again. * * Each time it's called, it will look at one or more dir in the cache. If * called when the cache is oversize, it increases the amount of work done each * call until it is reduced again. Typically it will take 256 calls before it * deletes anything, so if called once per second, it will delete files once * every 4 minutes. Each call is very inexpensive both in memory and time. */ LWS_VISIBLE LWS_EXTERN int lws_diskcache_trim(struct lws_diskcache_scan *lds); /** * lws_diskcache_secs_to_idle() - see how long to idle before calling trim * * \param lds: The opaque object representing the cache * * If the cache is undersize, there's no need to monitor it immediately. This * suggests how long to "sleep" before calling `lws_diskcache_trim()` again. */ LWS_VISIBLE LWS_EXTERN int lws_diskcache_secs_to_idle(struct lws_diskcache_scan *lds); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-dsh.h000066400000000000000000000126521357643561300224150ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /* * lws_dsh (Disordered Shared Heap) is an opaque abstraction supporting a single * linear buffer (overallocated at end of the lws_dsh_t) which may contain * multiple kinds of packets that are retired out of order, and tracked by kind. * * Each kind of packet has an lws_dll2 list of its kind of packets and acts as * a FIFO; packets of a particular type are always retired in order. But there * is no requirement about the order types are retired matching the original * order they arrived. * * Gaps are tracked as just another kind of "packet" list. * * "allocations" (including gaps) are prepended by an lws_dsh_object_t. * * dsh may themselves be on an lws_dll2_owner list, and under memory pressure * allocate into other buffers on the list. * * All management structures exist inside the allocated buffer. */ /** * lws_dsh_create() - Allocate a DSH buffer * * \param owner: the owning list this dsh belongs on, or NULL if standalone * \param buffer_size: the allocation in bytes * \param count_kinds: how many separately-tracked fifos use the buffer * * This makes a single heap allocation that includes internal tracking objects * in the buffer. Sub-allocated objects are bound to a "kind" index and * managed via a FIFO for each kind. * * Every "kind" of allocation shares the same buffer space. * * Multiple buffers may be bound together in an lws_dll2 list, and if an * allocation cannot be satisfied by the local buffer, space can be borrowed * from other dsh in the same list (the local dsh FIFO tracks these "foreign" * allocations as if they were local). * * Returns an opaque pointer to the dsh, or NULL if allocation failed. */ LWS_VISIBLE LWS_EXTERN lws_dsh_t * lws_dsh_create(lws_dll2_owner_t *owner, size_t buffer_size, int count_kinds); /** * lws_dsh_destroy() - Destroy a DSH buffer * * \param pdsh: pointer to the dsh pointer * * Deallocates the DSH and sets *pdsh to NULL. * * Before destruction, any foreign buffer usage on the part of this dsh are * individually freed. All dsh on the same list are walked and checked if they * have their own foreign allocations on the dsh buffer being destroyed. If so, * it attempts to migrate the allocation to a dsh that is not currently being * destroyed. If all else fails (basically the buffer memory is being shrunk) * unmigratable objects are cleanly destroyed. */ LWS_VISIBLE LWS_EXTERN void lws_dsh_destroy(lws_dsh_t **pdsh); /** * lws_dsh_alloc_tail() - make a suballocation inside a dsh * * \param dsh: the dsh tracking the allocation * \param kind: the kind of allocation * \param src1: the first source data to copy * \param size1: the size of the first source data * \param src2: the second source data to copy (after the first), or NULL * \param size2: the size of the second source data * * Allocates size1 + size2 bytes in a dsh (it prefers the given dsh but will * borrow space from other dsh on the same list if necessary) and copies size1 * bytes into it from src1, followed by size2 bytes from src2 if src2 isn't * NULL. The actual suballocation is a bit larger because of alignment and a * prepended management header. * * The suballocation is added to the kind-specific FIFO at the tail. */ LWS_VISIBLE LWS_EXTERN int lws_dsh_alloc_tail(lws_dsh_t *dsh, int kind, const void *src1, size_t size1, const void *src2, size_t size2); /** * lws_dsh_free() - free a suballocation from the dsh * * \param obj: a pointer to a void * that pointed to the allocated payload * * This returns the space used by \p obj in the dsh buffer to the free list * of the dsh the allocation came from. */ LWS_VISIBLE LWS_EXTERN void lws_dsh_free(void **obj); /** * lws_dsh_get_head() - free a suballocation from the dsh * * \param dsh: the dsh tracking the allocation * \param kind: the kind of allocation * \param obj: pointer to a void * to be set to the payload * \param size: set to the size of the allocation * * This gets the "next" object in the kind FIFO for the dsh, and returns 0 if * any. If none, returns nonzero. * * This is nondestructive of the fifo or the payload. Use lws_dsh_free on * obj to remove the entry from the kind fifo and return the payload to the * free list. */ LWS_VISIBLE LWS_EXTERN int lws_dsh_get_head(lws_dsh_t *dsh, int kind, void **obj, size_t *size); /** * lws_dsh_describe() - DEBUG BUILDS ONLY dump the dsh to the logs * * \param dsh: the dsh to dump * \param desc: text that appears at the top of the dump * * Useful information for debugging lws_dsh */ LWS_VISIBLE LWS_EXTERN void lws_dsh_describe(lws_dsh_t *dsh, const char *desc); libwebsockets-3.2.1/include/libwebsockets/lws-esp32.h000066400000000000000000000137421357643561300225740ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ typedef int lws_sockfd_type; typedef int lws_filefd_type; /* * Later lwip (at least 2.1.12) already defines these in its own headers * protected by the same test as used here... if POLLIN / POLLOUT already exist * then assume no need to declare those and struct pollfd. * * Older lwip needs these declarations done here. */ #if !defined(POLLIN) && !defined(POLLOUT) struct pollfd { lws_sockfd_type fd; /**< fd related to */ short events; /**< which POLL... events to respond to */ short revents; /**< which POLL... events occurred */ }; #define POLLIN 0x0001 #define POLLPRI 0x0002 #define POLLOUT 0x0004 #define POLLERR 0x0008 #define POLLHUP 0x0010 #define POLLNVAL 0x0020 #endif #if defined(LWS_AMAZON_RTOS) #include #include #include #include "timers.h" #else /* LWS_AMAZON_RTOS */ #include #include #include #include "esp_wifi.h" #include "esp_system.h" #include "esp_event.h" #include "esp_event_loop.h" #include "nvs.h" #include "driver/gpio.h" #include "esp_spi_flash.h" #include "freertos/timers.h" #endif /* LWS_AMAZON_RTOS */ #if !defined(CONFIG_FREERTOS_HZ) #define CONFIG_FREERTOS_HZ 100 #endif typedef TimerHandle_t uv_timer_t; typedef void uv_cb_t(uv_timer_t *); typedef void * uv_handle_t; struct timer_mapping { uv_cb_t *cb; uv_timer_t *t; }; #define UV_VERSION_MAJOR 1 #define lws_uv_getloop(a, b) (NULL) static LWS_INLINE void uv_timer_init(void *l, uv_timer_t *t) { (void)l; *t = NULL; } extern void esp32_uvtimer_cb(TimerHandle_t t); static LWS_INLINE void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep) { struct timer_mapping *tm = (struct timer_mapping *)malloc(sizeof(*tm)); if (!tm) return; tm->t = t; tm->cb = cb; *t = xTimerCreate("x", pdMS_TO_TICKS(first), !!rep, tm, (TimerCallbackFunction_t)esp32_uvtimer_cb); xTimerStart(*t, 0); } static LWS_INLINE void uv_timer_stop(uv_timer_t *t) { xTimerStop(*t, 0); } static LWS_INLINE void uv_close(uv_handle_t *h, void *v) { free(pvTimerGetTimerID((uv_timer_t)h)); xTimerDelete(*(uv_timer_t *)h, 0); } #if !defined(LWS_AMAZON_RTOS) /* ESP32 helper declarations */ #include #include #define LWS_PLUGIN_STATIC #define LWS_MAGIC_REBOOT_TYPE_ADS 0x50001ffc #define LWS_MAGIC_REBOOT_TYPE_REQ_FACTORY 0xb00bcafe #define LWS_MAGIC_REBOOT_TYPE_FORCED_FACTORY 0xfaceb00b #define LWS_MAGIC_REBOOT_TYPE_FORCED_FACTORY_BUTTON 0xf0cedfac #define LWS_MAGIC_REBOOT_TYPE_REQ_FACTORY_ERASE_OTA 0xfac0eeee /* user code provides these */ extern void lws_esp32_identify_physical_device(void); /* lws-plat-esp32 provides these */ typedef void (*lws_cb_scan_done)(uint16_t count, wifi_ap_record_t *recs, void *arg); enum genled_state { LWSESP32_GENLED__INIT, LWSESP32_GENLED__LOST_NETWORK, LWSESP32_GENLED__NO_NETWORK, LWSESP32_GENLED__CONN_AP, LWSESP32_GENLED__GOT_IP, LWSESP32_GENLED__OK, }; struct lws_group_member { struct lws_group_member *next; uint64_t last_seen; char model[16]; char role[16]; char host[32]; char mac[20]; int width, height; struct ip4_addr addr; struct ip6_addr addrv6; uint8_t flags; }; #define LWS_SYSTEM_GROUP_MEMBER_ADD 1 #define LWS_SYSTEM_GROUP_MEMBER_CHANGE 2 #define LWS_SYSTEM_GROUP_MEMBER_REMOVE 3 #define LWS_GROUP_FLAG_SELF 1 struct lws_esp32 { char sta_ip[16]; char sta_mask[16]; char sta_gw[16]; char serial[16]; char opts[16]; char model[16]; char group[16]; char role[16]; char ssid[4][64]; char password[4][64]; char active_ssid[64]; char access_pw[16]; char hostname[32]; char mac[20]; char le_dns[64]; char le_email[64]; char region; char inet; char conn_ap; enum genled_state genled; uint64_t genled_t; lws_cb_scan_done scan_consumer; void *scan_consumer_arg; struct lws_group_member *first; int extant_group_members; char acme; char upload; volatile char button_is_down; }; struct lws_esp32_image { uint32_t romfs; uint32_t romfs_len; uint32_t json; uint32_t json_len; }; extern struct lws_esp32 lws_esp32; struct lws_vhost; extern esp_err_t lws_esp32_event_passthru(void *ctx, system_event_t *event); extern void lws_esp32_wlan_config(void); extern void lws_esp32_wlan_start_ap(void); extern void lws_esp32_wlan_start_station(void); struct lws_context_creation_info; extern void lws_esp32_set_creation_defaults(struct lws_context_creation_info *info); extern struct lws_context * lws_esp32_init(struct lws_context_creation_info *, struct lws_vhost **pvh); extern int lws_esp32_wlan_nvs_get(int retry); extern esp_err_t lws_nvs_set_str(nvs_handle handle, const char* key, const char* value); extern void lws_esp32_restart_guided(uint32_t type); extern const esp_partition_t * lws_esp_ota_get_boot_partition(void); extern int lws_esp32_get_image_info(const esp_partition_t *part, struct lws_esp32_image *i, char *json, int json_len); extern int lws_esp32_leds_network_indication(void); extern uint32_t lws_esp32_get_reboot_type(void); extern uint16_t lws_esp32_sine_interp(int n); /* required in external code by esp32 plat (may just return if no leds) */ extern void lws_esp32_leds_timer_cb(TimerHandle_t th); #endif /* LWS_AMAZON_RTOS */ libwebsockets-3.2.1/include/libwebsockets/lws-fts.h000066400000000000000000000150761357643561300224360ustar00rootroot00000000000000/* * libwebsockets - fulltext search * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /** \defgroup search Search * * ##Full-text search * * Lws provides superfast indexing and fulltext searching from index files on * storage. */ ///@{ struct lws_fts; struct lws_fts_file; /* * Queries produce their results in an lwsac, using these public API types. * The first thing in the lwsac is always a struct lws_fts_result (see below) * containing heads for linked-lists of the other result types. */ /* one filepath's results */ struct lws_fts_result_filepath { struct lws_fts_result_filepath *next; int matches; /* logical number of matches */ int matches_length; /* bytes in length table (may be zero) */ int lines_in_file; int filepath_length; /* - uint32_t line table follows (first for alignment) */ /* - filepath (of filepath_length) follows */ }; /* autocomplete result */ struct lws_fts_result_autocomplete { struct lws_fts_result_autocomplete *next; int instances; int agg_instances; int ac_length; char elided; /* children skipped in interest of antecedent children */ char has_children; /* - autocomplete suggestion (of length ac_length) follows */ }; /* * The results lwsac always starts with this. If no results and / or no * autocomplete the members may be NULL. This implies the symbol nor any * suffix on it exists in the trie file. */ struct lws_fts_result { struct lws_fts_result_filepath *filepath_head; struct lws_fts_result_autocomplete *autocomplete_head; int duration_ms; int effective_flags; /* the search flags that were used */ }; /* * index creation functions */ /** * lws_fts_create() - Create a new index file * * \param fd: The fd opened for write * * Inits a new index file, returning a struct lws_fts to represent it */ LWS_VISIBLE LWS_EXTERN struct lws_fts * lws_fts_create(int fd); /** * lws_fts_destroy() - Finalize a new index file / destroy the trie lwsac * * \param trie: The previously opened index being finalized * * Finalizes an index file that was being created, and frees the memory involved * *trie is set to NULL afterwards. */ LWS_VISIBLE LWS_EXTERN void lws_fts_destroy(struct lws_fts **trie); /** * lws_fts_file_index() - Create a new entry in the trie file for an input path * * \param t: The previously opened index being written * \param filepath: The filepath (which may be virtual) associated with this file * \param filepath_len: The number of chars in the filepath * \param priority: not used yet * * Returns an ordinal that represents this new filepath in the index file. */ LWS_VISIBLE LWS_EXTERN int lws_fts_file_index(struct lws_fts *t, const char *filepath, int filepath_len, int priority); /** * lws_fts_fill() - Process all or a bufferload of input file * * \param t: The previously opened index being written * \param file_index: The ordinal representing this input filepath * \param buf: A bufferload of data from the input file * \param len: The number of bytes in buf * * Indexes a buffer of data from the input file. */ LWS_VISIBLE LWS_EXTERN int lws_fts_fill(struct lws_fts *t, uint32_t file_index, const char *buf, size_t len); /** * lws_fts_serialize() - Store the in-memory trie into the index file * * \param t: The previously opened index being written * * The trie is held in memory where it can be added to... after all the input * filepaths and data have been processed, this is called to serialize / * write the trie data into the index file. */ LWS_VISIBLE LWS_EXTERN int lws_fts_serialize(struct lws_fts *t); /* * index search functions */ /** * lws_fts_open() - Open an existing index file to search it * * \param filepath: The filepath to the index file to open * * Opening the index file returns an opaque struct lws_fts_file * that is * used to perform other operations on it, or NULL if it can't be opened. */ LWS_VISIBLE LWS_EXTERN struct lws_fts_file * lws_fts_open(const char *filepath); #define LWSFTS_F_QUERY_AUTOCOMPLETE (1 << 0) #define LWSFTS_F_QUERY_FILES (1 << 1) #define LWSFTS_F_QUERY_FILE_LINES (1 << 2) #define LWSFTS_F_QUERY_QUOTE_LINE (1 << 3) struct lws_fts_search_params { /* the actual search term */ const char *needle; /* if non-NULL, FILE results for this filepath only */ const char *only_filepath; /* will be set to the results lwsac */ struct lwsac *results_head; /* combination of LWSFTS_F_QUERY_* flags */ int flags; /* maximum number of autocomplete suggestions to return */ int max_autocomplete; /* maximum number of filepaths to return */ int max_files; /* maximum number of line number results to return per filepath */ int max_lines; }; /** * lws_fts_search() - Perform a search operation on an index * * \param jtf: The index file struct returned by lws_fts_open * \param ftsp: The struct lws_fts_search_params filled in by the caller * * The caller should memset the ftsp struct to 0 to ensure members that may be * introduced in later versions contain known values, then set the related * members to describe the kind of search action required. * * ftsp->results_head is the results lwsac, or NULL. It should be freed with * lwsac_free() when the results are finished with. * * Returns a pointer into the results lwsac that is a struct lws_fts_result * containing the head pointers into linked-lists of results for autocomplete * and filepath data, along with some sundry information. This does not need * to be freed since freeing the lwsac will also remove this and everything it * points to. */ LWS_VISIBLE LWS_EXTERN struct lws_fts_result * lws_fts_search(struct lws_fts_file *jtf, struct lws_fts_search_params *ftsp); /** * lws_fts_close() - Close a previously-opened index file * * \param jtf: The pointer returned from the open * * Closes the file handle on the index and frees any allocations */ LWS_VISIBLE LWS_EXTERN void lws_fts_close(struct lws_fts_file *jtf); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-genaes.h000066400000000000000000000121621357643561300230750ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup generic AES * ## Generic AES related functions * * Lws provides generic AES functions that abstract the ones * provided by whatever tls library you are linking against. * * It lets you use the same code if you build against mbedtls or OpenSSL * for example. */ ///@{ #if defined(LWS_WITH_MBEDTLS) #include #include #endif enum enum_aes_modes { LWS_GAESM_CBC, LWS_GAESM_CFB128, LWS_GAESM_CFB8, LWS_GAESM_CTR, LWS_GAESM_ECB, LWS_GAESM_OFB, LWS_GAESM_XTS, /* care... requires double-length key */ LWS_GAESM_GCM, LWS_GAESM_KW, }; enum enum_aes_operation { LWS_GAESO_ENC, LWS_GAESO_DEC }; enum enum_aes_padding { LWS_GAESP_NO_PADDING, LWS_GAESP_WITH_PADDING }; /* include/libwebsockets/lws-jwk.h must be included before this */ #define LWS_AES_BLOCKSIZE 128 struct lws_genaes_ctx { #if defined(LWS_WITH_MBEDTLS) union { mbedtls_aes_context ctx; #if defined(MBEDTLS_CIPHER_MODE_XTS) mbedtls_aes_xts_context ctx_xts; #endif mbedtls_gcm_context ctx_gcm; } u; #else EVP_CIPHER_CTX *ctx; const EVP_CIPHER *cipher; ENGINE *engine; char init; #endif unsigned char tag[16]; struct lws_gencrypto_keyelem *k; enum enum_aes_operation op; enum enum_aes_modes mode; enum enum_aes_padding padding; int taglen; char underway; }; /** lws_genaes_create() - Create RSA public decrypt context * * \param ctx: your struct lws_genaes_ctx * \param op: LWS_GAESO_ENC or LWS_GAESO_DEC * \param mode: one of LWS_GAESM_ * \param el: struct prepared with key element data * \param padding: 0 = no padding, 1 = padding * \param engine: if openssl engine used, pass the pointer here * * Creates an RSA context with a public key associated with it, formed from * the key elements in \p el. * * Returns 0 for OK or nonzero for error. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genaes_create(struct lws_genaes_ctx *ctx, enum enum_aes_operation op, enum enum_aes_modes mode, struct lws_gencrypto_keyelem *el, enum enum_aes_padding padding, void *engine); /** lws_genaes_destroy() - Destroy genaes AES context * * \param ctx: your struct lws_genaes_ctx * \param tag: NULL, or, GCM-only: buffer to receive tag * \param tlen: 0, or, GCM-only: length of tag buffer * * Destroys any allocations related to \p ctx. * * For GCM only, up to tlen bytes of tag buffer will be set on exit. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genaes_destroy(struct lws_genaes_ctx *ctx, unsigned char *tag, size_t tlen); /** lws_genaes_crypt() - Encrypt or decrypt * * \param ctx: your struct lws_genaes_ctx * \param in: input plaintext or ciphertext * \param len: length of input (which is always length of output) * \param out: output plaintext or ciphertext * \param iv_or_nonce_ctr_or_data_unit_16: NULL, iv, nonce_ctr16, or data_unit16 * \param stream_block_16: pointer to 16-byte stream block for CTR mode only * \param nc_or_iv_off: NULL or pointer to nc, or iv_off * \param taglen: length of tag * * Encrypts or decrypts using the AES mode set when the ctx was created. * The last three arguments have different meanings depending on the mode: * * KW CBC CFB128 CFB8 CTR ECB OFB XTS * iv_or_nonce_ct.._unit_16 : iv iv iv iv nonce NULL iv dataunt * stream_block_16 : NULL NULL NULL NULL stream NULL NULL NULL * nc_or_iv_off : NULL NULL iv_off NULL nc_off NULL iv_off NULL * * For GCM: * * iv_or_nonce_ctr_or_data_unit_16 : iv * stream_block_16 : pointer to tag * nc_or_iv_off : set pointed-to size_t to iv length * in : first call: additional data, subsequently * : input data * len : first call: add data length, subsequently * : input / output length * * The length of the optional arg is always 16 if used, regardless of the mode. * * Returns 0 for OK or nonzero for error. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genaes_crypt(struct lws_genaes_ctx *ctx, const uint8_t *in, size_t len, uint8_t *out, uint8_t *iv_or_nonce_ctr_or_data_unit_16, uint8_t *stream_block_16, size_t *nc_or_iv_off, int taglen); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-gencrypto.h000066400000000000000000000065741357643561300236570ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /* * These are gencrypto-level constants... they are used by both JOSE and direct * gencrypto code. However while JWK relies on these, using gencrypto apis has * no dependency at all on any JOSE type. */ enum lws_gencrypto_kty { LWS_GENCRYPTO_KTY_UNKNOWN, LWS_GENCRYPTO_KTY_OCT, LWS_GENCRYPTO_KTY_RSA, LWS_GENCRYPTO_KTY_EC }; /* * Keytypes where the same element name is reused must all agree to put the * same-named element at the same e[] index. It's because when used with jwk, * we parse and store in incoming key data, but we may not be informed of the * definitive keytype until the end. */ enum lws_gencrypto_oct_tok { LWS_GENCRYPTO_OCT_KEYEL_K, /* note... same offset as AES K */ LWS_GENCRYPTO_OCT_KEYEL_COUNT }; enum lws_gencrypto_rsa_tok { LWS_GENCRYPTO_RSA_KEYEL_E, LWS_GENCRYPTO_RSA_KEYEL_N, LWS_GENCRYPTO_RSA_KEYEL_D, /* note... same offset as EC D */ LWS_GENCRYPTO_RSA_KEYEL_P, LWS_GENCRYPTO_RSA_KEYEL_Q, LWS_GENCRYPTO_RSA_KEYEL_DP, LWS_GENCRYPTO_RSA_KEYEL_DQ, LWS_GENCRYPTO_RSA_KEYEL_QI, LWS_GENCRYPTO_RSA_KEYEL_COUNT }; enum lws_gencrypto_ec_tok { LWS_GENCRYPTO_EC_KEYEL_CRV, LWS_GENCRYPTO_EC_KEYEL_X, /* note... same offset as RSA D */ LWS_GENCRYPTO_EC_KEYEL_D = LWS_GENCRYPTO_RSA_KEYEL_D, LWS_GENCRYPTO_EC_KEYEL_Y, LWS_GENCRYPTO_EC_KEYEL_COUNT }; enum lws_gencrypto_aes_tok { /* note... same offset as OCT K */ LWS_GENCRYPTO_AES_KEYEL_K = LWS_GENCRYPTO_OCT_KEYEL_K, LWS_GENCRYPTO_AES_KEYEL_COUNT }; /* largest number of key elements for any algorithm */ #define LWS_GENCRYPTO_MAX_KEYEL_COUNT LWS_GENCRYPTO_RSA_KEYEL_COUNT /* this "stretchy" type holds individual key element data in binary form. * It's typcially used in an array with the layout mapping the element index to * the key element meaning defined by the enums above. An array of these of * length LWS_GENCRYPTO_MAX_KEYEL_COUNT can define key elements for any key * type. */ struct lws_gencrypto_keyelem { uint8_t *buf; uint32_t len; }; /** * lws_gencrypto_bits_to_bytes() - returns rounded up bytes needed for bits * * \param bits * * Returns the number of bytes needed to store the given number of bits. If * a byte is partially used, the byte count is rounded up. */ LWS_VISIBLE LWS_EXTERN int lws_gencrypto_bits_to_bytes(int bits); /** * lws_base64_size() - returns estimated size of base64 encoding * * \param bytes * * Returns a slightly oversize estimate of the size of a base64 encoded version * of the given amount of unencoded data. */ LWS_VISIBLE LWS_EXTERN int lws_base64_size(int bytes); libwebsockets-3.2.1/include/libwebsockets/lws-genec.h000066400000000000000000000152211357643561300227130ustar00rootroot00000000000000/* * libwebsockets - Generic Elliptic Curve Encryption * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ enum enum_genec_alg { LEGENEC_UNKNOWN, LEGENEC_ECDH, LEGENEC_ECDSA }; struct lws_genec_ctx { #if defined(LWS_WITH_MBEDTLS) union { mbedtls_ecdh_context *ctx_ecdh; mbedtls_ecdsa_context *ctx_ecdsa; } u; #else EVP_PKEY_CTX *ctx[2]; #endif struct lws_context *context; const struct lws_ec_curves *curve_table; enum enum_genec_alg genec_alg; char has_private; }; #if defined(LWS_WITH_MBEDTLS) enum enum_lws_dh_side { LDHS_OURS = MBEDTLS_ECDH_OURS, LDHS_THEIRS = MBEDTLS_ECDH_THEIRS }; #else enum enum_lws_dh_side { LDHS_OURS, LDHS_THEIRS }; #endif struct lws_ec_curves { const char *name; int tls_lib_nid; uint16_t key_bytes; }; /* ECDH-specific apis */ /** lws_genecdh_create() - Create a genecdh * * \param ctx: your genec context * \param context: your lws_context (for RNG access) * \param curve_table: NULL, enabling P-256, P-384 and P-521, or a replacement * struct lws_ec_curves array, terminated by an entry with * .name = NULL, of curves you want to whitelist * * Initializes a genecdh */ LWS_VISIBLE int lws_genecdh_create(struct lws_genec_ctx *ctx, struct lws_context *context, const struct lws_ec_curves *curve_table); /** lws_genecdh_set_key() - Apply an EC key to our or theirs side * * \param ctx: your genecdh context * \param el: your key elements * \param side: LDHS_OURS or LDHS_THEIRS * * Applies an EC key to one side or the other of an ECDH ctx */ LWS_VISIBLE LWS_EXTERN int lws_genecdh_set_key(struct lws_genec_ctx *ctx, struct lws_gencrypto_keyelem *el, enum enum_lws_dh_side side); /** lws_genecdh_new_keypair() - Create a genec with a new public / private key * * \param ctx: your genec context * \param side: LDHS_OURS or LDHS_THEIRS * \param curve_name: an EC curve name, like "P-256" * \param el: array pf LWS_GENCRYPTO_EC_KEYEL_COUNT key elems to take the new key * * Creates a genecdh with a newly minted EC public / private key */ LWS_VISIBLE LWS_EXTERN int lws_genecdh_new_keypair(struct lws_genec_ctx *ctx, enum enum_lws_dh_side side, const char *curve_name, struct lws_gencrypto_keyelem *el); LWS_VISIBLE LWS_EXTERN int lws_genecdh_compute_shared_secret(struct lws_genec_ctx *ctx, uint8_t *ss, int *ss_len); /* ECDSA-specific apis */ /** lws_genecdsa_create() - Create a genecdsa and * * \param ctx: your genec context * \param context: your lws_context (for RNG access) * \param curve_table: NULL, enabling P-256, P-384 and P-521, or a replacement * struct lws_ec_curves array, terminated by an entry with * .name = NULL, of curves you want to whitelist * * Initializes a genecdh */ LWS_VISIBLE int lws_genecdsa_create(struct lws_genec_ctx *ctx, struct lws_context *context, const struct lws_ec_curves *curve_table); /** lws_genecdsa_new_keypair() - Create a genecdsa with a new public / private key * * \param ctx: your genec context * \param curve_name: an EC curve name, like "P-256" * \param el: array pf LWS_GENCRYPTO_EC_KEYEL_COUNT key elements to take the new key * * Creates a genecdsa with a newly minted EC public / private key */ LWS_VISIBLE LWS_EXTERN int lws_genecdsa_new_keypair(struct lws_genec_ctx *ctx, const char *curve_name, struct lws_gencrypto_keyelem *el); /** lws_genecdsa_set_key() - Apply an EC key to an ecdsa context * * \param ctx: your genecdsa context * \param el: your key elements * * Applies an EC key to an ecdsa context */ LWS_VISIBLE LWS_EXTERN int lws_genecdsa_set_key(struct lws_genec_ctx *ctx, struct lws_gencrypto_keyelem *el); /** lws_genecdsa_hash_sig_verify_jws() - Verifies a JWS ECDSA signature on a given hash * * \param ctx: your struct lws_genrsa_ctx * \param in: unencrypted payload (usually a recomputed hash) * \param hash_type: one of LWS_GENHASH_TYPE_ * \param keybits: number of bits in the crypto key * \param sig: pointer to the signature we received with the payload * \param sig_len: length of the signature we are checking in bytes * * This just looks at the signed hash... that's why there's no input length * parameter, it's decided by the choice of hash. It's up to you to confirm * separately the actual payload matches the hash that was confirmed by this to * be validly signed. * * Returns <0 for error, or 0 if signature matches the hash + key.. * * The JWS ECDSA signature verification algorithm differs to generic ECDSA * signatures and they're not interoperable. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genecdsa_hash_sig_verify_jws(struct lws_genec_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, int keybits, const uint8_t *sig, size_t sig_len); /** lws_genecdsa_hash_sign_jws() - Creates a JWS ECDSA signature for a hash you provide * * \param ctx: your struct lws_genrsa_ctx * \param in: precomputed hash * \param hash_type: one of LWS_GENHASH_TYPE_ * \param keybits: number of bits in the crypto key * \param sig: pointer to buffer to take signature * \param sig_len: length of the buffer (must be >= length of key N) * * Returns <0 for error, or 0 for success. * * This creates a JWS ECDSA signature for a hash you already computed and provide. * * The JWS ECDSA signature generation algorithm differs to generic ECDSA * signatures and they're not interoperable. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genecdsa_hash_sign_jws(struct lws_genec_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, int keybits, uint8_t *sig, size_t sig_len); /* Apis that apply to both ECDH and ECDSA */ LWS_VISIBLE LWS_EXTERN void lws_genec_destroy(struct lws_genec_ctx *ctx); LWS_VISIBLE LWS_EXTERN void lws_genec_destroy_elements(struct lws_gencrypto_keyelem *el); LWS_VISIBLE LWS_EXTERN int lws_genec_dump(struct lws_gencrypto_keyelem *el); libwebsockets-3.2.1/include/libwebsockets/lws-genhash.h000066400000000000000000000127611357643561300232550ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup generichash Generic Hash * ## Generic Hash related functions * * Lws provides generic hash / digest accessors that abstract the ones * provided by whatever tls library you are linking against. * * It lets you use the same code if you build against mbedtls or OpenSSL * for example. */ ///@{ enum lws_genhash_types { LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHASH_TYPE_MD5, LWS_GENHASH_TYPE_SHA1, LWS_GENHASH_TYPE_SHA256, LWS_GENHASH_TYPE_SHA384, LWS_GENHASH_TYPE_SHA512, }; enum lws_genhmac_types { LWS_GENHMAC_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_SHA256, LWS_GENHMAC_TYPE_SHA384, LWS_GENHMAC_TYPE_SHA512, }; #define LWS_GENHASH_LARGEST 64 struct lws_genhash_ctx { uint8_t type; #if defined(LWS_WITH_MBEDTLS) union { mbedtls_md5_context md5; mbedtls_sha1_context sha1; mbedtls_sha256_context sha256; mbedtls_sha512_context sha512; /* 384 also uses this */ const mbedtls_md_info_t *hmac; } u; #else const EVP_MD *evp_type; EVP_MD_CTX *mdctx; #endif }; struct lws_genhmac_ctx { uint8_t type; #if defined(LWS_WITH_MBEDTLS) const mbedtls_md_info_t *hmac; mbedtls_md_context_t ctx; #else const EVP_MD *evp_type; #if defined(LWS_HAVE_HMAC_CTX_new) HMAC_CTX *ctx; #else HMAC_CTX ctx; #endif #endif }; /** lws_genhash_size() - get hash size in bytes * * \param type: one of LWS_GENHASH_TYPE_... * * Returns number of bytes in this type of hash */ LWS_VISIBLE LWS_EXTERN size_t LWS_WARN_UNUSED_RESULT lws_genhash_size(enum lws_genhash_types type); /** lws_genhmac_size() - get hash size in bytes * * \param type: one of LWS_GENHASH_TYPE_... * * Returns number of bytes in this type of hmac */ LWS_VISIBLE LWS_EXTERN size_t LWS_WARN_UNUSED_RESULT lws_genhmac_size(enum lws_genhmac_types type); /** lws_genhash_init() - prepare your struct lws_genhash_ctx for use * * \param ctx: your struct lws_genhash_ctx * \param type: one of LWS_GENHASH_TYPE_... * * Initializes the hash context for the type you requested */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_genhash_init(struct lws_genhash_ctx *ctx, enum lws_genhash_types type); /** lws_genhash_update() - digest len bytes of the buffer starting at in * * \param ctx: your struct lws_genhash_ctx * \param in: start of the bytes to digest * \param len: count of bytes to digest * * Updates the state of your hash context to reflect digesting len bytes from in */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_genhash_update(struct lws_genhash_ctx *ctx, const void *in, size_t len); /** lws_genhash_destroy() - copy out the result digest and destroy the ctx * * \param ctx: your struct lws_genhash_ctx * \param result: NULL, or where to copy the result hash * * Finalizes the hash and copies out the digest. Destroys any allocations such * that ctx can safely go out of scope after calling this. * * NULL result is supported so that you can destroy the ctx cleanly on error * conditions, where there is no valid result. */ LWS_VISIBLE LWS_EXTERN int lws_genhash_destroy(struct lws_genhash_ctx *ctx, void *result); /** lws_genhmac_init() - prepare your struct lws_genhmac_ctx for use * * \param ctx: your struct lws_genhmac_ctx * \param type: one of LWS_GENHMAC_TYPE_... * \param key: pointer to the start of the HMAC key * \param key_len: length of the HMAC key * * Initializes the hash context for the type you requested * * If the return is nonzero, it failed and there is nothing needing to be * destroyed. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_genhmac_init(struct lws_genhmac_ctx *ctx, enum lws_genhmac_types type, const uint8_t *key, size_t key_len); /** lws_genhmac_update() - digest len bytes of the buffer starting at in * * \param ctx: your struct lws_genhmac_ctx * \param in: start of the bytes to digest * \param len: count of bytes to digest * * Updates the state of your hash context to reflect digesting len bytes from in * * If the return is nonzero, it failed and needs destroying. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_genhmac_update(struct lws_genhmac_ctx *ctx, const void *in, size_t len); /** lws_genhmac_destroy() - copy out the result digest and destroy the ctx * * \param ctx: your struct lws_genhmac_ctx * \param result: NULL, or where to copy the result hash * * Finalizes the hash and copies out the digest. Destroys any allocations such * that ctx can safely go out of scope after calling this. * * NULL result is supported so that you can destroy the ctx cleanly on error * conditions, where there is no valid result. */ LWS_VISIBLE LWS_EXTERN int lws_genhmac_destroy(struct lws_genhmac_ctx *ctx, void *result); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-genrsa.h000066400000000000000000000212321357643561300231100ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup genericRSA Generic RSA * ## Generic RSA related functions * * Lws provides generic RSA functions that abstract the ones * provided by whatever OpenSSL library you are linking against. * * It lets you use the same code if you build against mbedtls or OpenSSL * for example. */ ///@{ /* include/libwebsockets/lws-jwk.h must be included before this */ enum enum_genrsa_mode { LGRSAM_PKCS1_1_5, LGRSAM_PKCS1_OAEP_PSS, LGRSAM_COUNT }; struct lws_genrsa_ctx { #if defined(LWS_WITH_MBEDTLS) mbedtls_rsa_context *ctx; #else BIGNUM *bn[LWS_GENCRYPTO_RSA_KEYEL_COUNT]; EVP_PKEY_CTX *ctx; RSA *rsa; #endif struct lws_context *context; enum enum_genrsa_mode mode; }; /** lws_genrsa_public_decrypt_create() - Create RSA public decrypt context * * \param ctx: your struct lws_genrsa_ctx * \param el: struct prepared with key element data * \param context: lws_context for RNG * \param mode: RSA mode, one of LGRSAM_ constants * \param oaep_hashid: the lws genhash id for the hash used in MFG1 hash * used in OAEP mode - normally, SHA1 * * Creates an RSA context with a public key associated with it, formed from * the key elements in \p el. * * Mode LGRSAM_PKCS1_1_5 is in widespread use but has weaknesses. It's * recommended to use LGRSAM_PKCS1_OAEP_PSS for new implementations. * * Returns 0 for OK or nonzero for error. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_create(struct lws_genrsa_ctx *ctx, struct lws_gencrypto_keyelem *el, struct lws_context *context, enum enum_genrsa_mode mode, enum lws_genhash_types oaep_hashid); /** lws_genrsa_destroy_elements() - Free allocations in genrsa_elements * * \param el: your struct lws_gencrypto_keyelem * * This is a helper for user code making use of struct lws_gencrypto_keyelem * where the elements are allocated on the heap, it frees any non-NULL * buf element and sets the buf to NULL. * * NB: lws_genrsa_public_... apis do not need this as they take care of the key * creation and destruction themselves. */ LWS_VISIBLE LWS_EXTERN void lws_genrsa_destroy_elements(struct lws_gencrypto_keyelem *el); /** lws_genrsa_new_keypair() - Create new RSA keypair * * \param context: your struct lws_context (may be used for RNG) * \param ctx: your struct lws_genrsa_ctx * \param mode: RSA mode, one of LGRSAM_ constants * \param el: struct to get the new key element data allocated into it * \param bits: key size, eg, 4096 * * Creates a new RSA context and generates a new keypair into it, with \p bits * bits. * * Returns 0 for OK or nonzero for error. * * Mode LGRSAM_PKCS1_1_5 is in widespread use but has weaknesses. It's * recommended to use LGRSAM_PKCS1_OAEP_PSS for new implementations. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_new_keypair(struct lws_context *context, struct lws_genrsa_ctx *ctx, enum enum_genrsa_mode mode, struct lws_gencrypto_keyelem *el, int bits); /** lws_genrsa_public_encrypt() - Perform RSA public key encryption * * \param ctx: your struct lws_genrsa_ctx * \param in: plaintext input * \param in_len: length of plaintext input * \param out: encrypted output * * Performs PKCS1 v1.5 Encryption * * Returns <0 for error, or length of decrypted data. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_public_encrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out); /** lws_genrsa_private_encrypt() - Perform RSA private key encryption * * \param ctx: your struct lws_genrsa_ctx * \param in: plaintext input * \param in_len: length of plaintext input * \param out: encrypted output * * Performs PKCS1 v1.5 Encryption * * Returns <0 for error, or length of decrypted data. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_private_encrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out); /** lws_genrsa_public_decrypt() - Perform RSA public key decryption * * \param ctx: your struct lws_genrsa_ctx * \param in: encrypted input * \param in_len: length of encrypted input * \param out: decrypted output * \param out_max: size of output buffer * * Performs PKCS1 v1.5 Decryption * * Returns <0 for error, or length of decrypted data. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_public_decrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out, size_t out_max); /** lws_genrsa_private_decrypt() - Perform RSA private key decryption * * \param ctx: your struct lws_genrsa_ctx * \param in: encrypted input * \param in_len: length of encrypted input * \param out: decrypted output * \param out_max: size of output buffer * * Performs PKCS1 v1.5 Decryption * * Returns <0 for error, or length of decrypted data. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_private_decrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out, size_t out_max); /** lws_genrsa_hash_sig_verify() - Verifies RSA signature on a given hash * * \param ctx: your struct lws_genrsa_ctx * \param in: input to be hashed * \param hash_type: one of LWS_GENHASH_TYPE_ * \param sig: pointer to the signature we received with the payload * \param sig_len: length of the signature we are checking in bytes * * Returns <0 for error, or 0 if signature matches the payload + key. * * This just looks at a hash... that's why there's no input length * parameter, it's decided by the choice of hash. It's up to you to confirm * separately the actual payload matches the hash that was confirmed by this to * be validly signed. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_hash_sig_verify(struct lws_genrsa_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, const uint8_t *sig, size_t sig_len); /** lws_genrsa_hash_sign() - Creates an ECDSA signature for a hash you provide * * \param ctx: your struct lws_genrsa_ctx * \param in: input to be hashed and signed * \param hash_type: one of LWS_GENHASH_TYPE_ * \param sig: pointer to buffer to take signature * \param sig_len: length of the buffer (must be >= length of key N) * * Returns <0 for error, or 0 for success. * * This creates an RSA signature for a hash you already computed and provide. * You should have created the hash before calling this by iterating over the * actual payload you need to confirm. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_hash_sign(struct lws_genrsa_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, uint8_t *sig, size_t sig_len); /** lws_genrsa_public_decrypt_destroy() - Destroy RSA public decrypt context * * \param ctx: your struct lws_genrsa_ctx * * Destroys any allocations related to \p ctx. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN void lws_genrsa_destroy(struct lws_genrsa_ctx *ctx); /** lws_genrsa_render_pkey_asn1() - Exports public or private key to ASN1/DER * * \param ctx: your struct lws_genrsa_ctx * \param _private: 0 = public part only, 1 = all parts of the key * \param pkey_asn1: pointer to buffer to take the ASN1 * \param pkey_asn1_len: max size of the pkey_asn1_len * * Returns length of pkey_asn1 written, or -1 for error. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_render_pkey_asn1(struct lws_genrsa_ctx *ctx, int _private, uint8_t *pkey_asn1, size_t pkey_asn1_len); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-http.h000066400000000000000000000645021357643561300226170ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /* minimal space for typical headers and CSP stuff */ #define LWS_RECOMMENDED_MIN_HEADER_SPACE 2048 /*! \defgroup http HTTP Modules related to handling HTTP */ //@{ /*! \defgroup httpft HTTP File transfer * \ingroup http APIs for sending local files in response to HTTP requests */ //@{ /** * lws_get_mimetype() - Determine mimetype to use from filename * * \param file: filename * \param m: NULL, or mount context * * This uses a canned list of known filetypes first, if no match and m is * non-NULL, then tries a list of per-mount file suffix to mimtype mappings. * * Returns either NULL or a pointer to the mimetype matching the file. */ LWS_VISIBLE LWS_EXTERN const char * lws_get_mimetype(const char *file, const struct lws_http_mount *m); /** * lws_serve_http_file() - Send a file back to the client using http * \param wsi: Websocket instance (available from user callback) * \param file: The file to issue over http * \param content_type: The http content type, eg, text/html * \param other_headers: NULL or pointer to header string * \param other_headers_len: length of the other headers if non-NULL * * This function is intended to be called from the callback in response * to http requests from the client. It allows the callback to issue * local files down the http link in a single step. * * Returning <0 indicates error and the wsi should be closed. Returning * >0 indicates the file was completely sent and * lws_http_transaction_completed() called on the wsi (and close if != 0) * ==0 indicates the file transfer is started and needs more service later, * the wsi should be left alone. */ LWS_VISIBLE LWS_EXTERN int lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type, const char *other_headers, int other_headers_len); LWS_VISIBLE LWS_EXTERN int lws_serve_http_file_fragment(struct lws *wsi); //@} enum http_status { HTTP_STATUS_CONTINUE = 100, HTTP_STATUS_OK = 200, HTTP_STATUS_NO_CONTENT = 204, HTTP_STATUS_PARTIAL_CONTENT = 206, HTTP_STATUS_MOVED_PERMANENTLY = 301, HTTP_STATUS_FOUND = 302, HTTP_STATUS_SEE_OTHER = 303, HTTP_STATUS_NOT_MODIFIED = 304, HTTP_STATUS_BAD_REQUEST = 400, HTTP_STATUS_UNAUTHORIZED, HTTP_STATUS_PAYMENT_REQUIRED, HTTP_STATUS_FORBIDDEN, HTTP_STATUS_NOT_FOUND, HTTP_STATUS_METHOD_NOT_ALLOWED, HTTP_STATUS_NOT_ACCEPTABLE, HTTP_STATUS_PROXY_AUTH_REQUIRED, HTTP_STATUS_REQUEST_TIMEOUT, HTTP_STATUS_CONFLICT, HTTP_STATUS_GONE, HTTP_STATUS_LENGTH_REQUIRED, HTTP_STATUS_PRECONDITION_FAILED, HTTP_STATUS_REQ_ENTITY_TOO_LARGE, HTTP_STATUS_REQ_URI_TOO_LONG, HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE, HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE, HTTP_STATUS_EXPECTATION_FAILED, HTTP_STATUS_INTERNAL_SERVER_ERROR = 500, HTTP_STATUS_NOT_IMPLEMENTED, HTTP_STATUS_BAD_GATEWAY, HTTP_STATUS_SERVICE_UNAVAILABLE, HTTP_STATUS_GATEWAY_TIMEOUT, HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED, }; /*! \defgroup html-chunked-substitution HTML Chunked Substitution * \ingroup http * * ##HTML chunked Substitution * * APIs for receiving chunks of text, replacing a set of variable names via * a callback, and then prepending and appending HTML chunked encoding * headers. */ //@{ struct lws_process_html_args { char *p; /**< pointer to the buffer containing the data */ int len; /**< length of the original data at p */ int max_len; /**< maximum length we can grow the data to */ int final; /**< set if this is the last chunk of the file */ int chunked; /**< 0 == unchunked, 1 == produce chunk headers (incompatible with HTTP/2) */ }; typedef const char *(*lws_process_html_state_cb)(void *data, int index); struct lws_process_html_state { char *start; /**< pointer to start of match */ char swallow[16]; /**< matched character buffer */ int pos; /**< position in match */ void *data; /**< opaque pointer */ const char * const *vars; /**< list of variable names */ int count_vars; /**< count of variable names */ lws_process_html_state_cb replace; /**< called on match to perform substitution */ }; /*! lws_chunked_html_process() - generic chunked substitution * \param args: buffer to process using chunked encoding * \param s: current processing state */ LWS_VISIBLE LWS_EXTERN int lws_chunked_html_process(struct lws_process_html_args *args, struct lws_process_html_state *s); //@} /** \defgroup HTTP-headers-read HTTP headers: read * \ingroup http * * ##HTTP header releated functions * * In lws the client http headers are temporarily stored in a pool, only for the * duration of the http part of the handshake. It's because in most cases, * the header content is ignored for the whole rest of the connection lifetime * and would then just be taking up space needlessly. * * During LWS_CALLBACK_HTTP when the URI path is delivered is the last time * the http headers are still allocated, you can use these apis then to * look at and copy out interesting header content (cookies, etc) * * Notice that the header total length reported does not include a terminating * '\0', however you must allocate for it when using the _copy apis. So the * length reported for a header containing "123" is 3, but you must provide * a buffer of length 4 so that "123\0" may be copied into it, or the copy * will fail with a nonzero return code. * * In the special case of URL arguments, like ?x=1&y=2, the arguments are * stored in a token named for the method, eg, WSI_TOKEN_GET_URI if it * was a GET or WSI_TOKEN_POST_URI if POST. You can check the total * length to confirm the method. * * For URL arguments, each argument is stored urldecoded in a "fragment", so * you can use the fragment-aware api lws_hdr_copy_fragment() to access each * argument in turn: the fragments contain urldecoded strings like x=1 or y=2. * * As a convenience, lws has an api that will find the fragment with a * given name= part, lws_get_urlarg_by_name(). */ ///@{ /** struct lws_tokens * you need these to look at headers that have been parsed if using the * LWS_CALLBACK_FILTER_CONNECTION callback. If a header from the enum * list below is absent, .token = NULL and len = 0. Otherwise .token * points to .len chars containing that header content. */ struct lws_tokens { unsigned char *token; /**< pointer to start of the token */ int len; /**< length of the token's value */ }; /* enum lws_token_indexes * these have to be kept in sync with lextable.h / minilex.c * * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. */ enum lws_token_indexes { WSI_TOKEN_GET_URI = 0, WSI_TOKEN_POST_URI = 1, WSI_TOKEN_OPTIONS_URI = 2, WSI_TOKEN_HOST = 3, WSI_TOKEN_CONNECTION = 4, WSI_TOKEN_UPGRADE = 5, WSI_TOKEN_ORIGIN = 6, WSI_TOKEN_DRAFT = 7, WSI_TOKEN_CHALLENGE = 8, WSI_TOKEN_EXTENSIONS = 9, WSI_TOKEN_KEY1 = 10, WSI_TOKEN_KEY2 = 11, WSI_TOKEN_PROTOCOL = 12, WSI_TOKEN_ACCEPT = 13, WSI_TOKEN_NONCE = 14, WSI_TOKEN_HTTP = 15, WSI_TOKEN_HTTP2_SETTINGS = 16, WSI_TOKEN_HTTP_ACCEPT = 17, WSI_TOKEN_HTTP_AC_REQUEST_HEADERS = 18, WSI_TOKEN_HTTP_IF_MODIFIED_SINCE = 19, WSI_TOKEN_HTTP_IF_NONE_MATCH = 20, WSI_TOKEN_HTTP_ACCEPT_ENCODING = 21, WSI_TOKEN_HTTP_ACCEPT_LANGUAGE = 22, WSI_TOKEN_HTTP_PRAGMA = 23, WSI_TOKEN_HTTP_CACHE_CONTROL = 24, WSI_TOKEN_HTTP_AUTHORIZATION = 25, WSI_TOKEN_HTTP_COOKIE = 26, WSI_TOKEN_HTTP_CONTENT_LENGTH = 27, WSI_TOKEN_HTTP_CONTENT_TYPE = 28, WSI_TOKEN_HTTP_DATE = 29, WSI_TOKEN_HTTP_RANGE = 30, WSI_TOKEN_HTTP_REFERER = 31, WSI_TOKEN_KEY = 32, WSI_TOKEN_VERSION = 33, WSI_TOKEN_SWORIGIN = 34, WSI_TOKEN_HTTP_COLON_AUTHORITY = 35, WSI_TOKEN_HTTP_COLON_METHOD = 36, WSI_TOKEN_HTTP_COLON_PATH = 37, WSI_TOKEN_HTTP_COLON_SCHEME = 38, WSI_TOKEN_HTTP_COLON_STATUS = 39, WSI_TOKEN_HTTP_ACCEPT_CHARSET = 40, WSI_TOKEN_HTTP_ACCEPT_RANGES = 41, WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN = 42, WSI_TOKEN_HTTP_AGE = 43, WSI_TOKEN_HTTP_ALLOW = 44, WSI_TOKEN_HTTP_CONTENT_DISPOSITION = 45, WSI_TOKEN_HTTP_CONTENT_ENCODING = 46, WSI_TOKEN_HTTP_CONTENT_LANGUAGE = 47, WSI_TOKEN_HTTP_CONTENT_LOCATION = 48, WSI_TOKEN_HTTP_CONTENT_RANGE = 49, WSI_TOKEN_HTTP_ETAG = 50, WSI_TOKEN_HTTP_EXPECT = 51, WSI_TOKEN_HTTP_EXPIRES = 52, WSI_TOKEN_HTTP_FROM = 53, WSI_TOKEN_HTTP_IF_MATCH = 54, WSI_TOKEN_HTTP_IF_RANGE = 55, WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE = 56, WSI_TOKEN_HTTP_LAST_MODIFIED = 57, WSI_TOKEN_HTTP_LINK = 58, WSI_TOKEN_HTTP_LOCATION = 59, WSI_TOKEN_HTTP_MAX_FORWARDS = 60, WSI_TOKEN_HTTP_PROXY_AUTHENTICATE = 61, WSI_TOKEN_HTTP_PROXY_AUTHORIZATION = 62, WSI_TOKEN_HTTP_REFRESH = 63, WSI_TOKEN_HTTP_RETRY_AFTER = 64, WSI_TOKEN_HTTP_SERVER = 65, WSI_TOKEN_HTTP_SET_COOKIE = 66, WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY = 67, WSI_TOKEN_HTTP_TRANSFER_ENCODING = 68, WSI_TOKEN_HTTP_USER_AGENT = 69, WSI_TOKEN_HTTP_VARY = 70, WSI_TOKEN_HTTP_VIA = 71, WSI_TOKEN_HTTP_WWW_AUTHENTICATE = 72, WSI_TOKEN_PATCH_URI = 73, WSI_TOKEN_PUT_URI = 74, WSI_TOKEN_DELETE_URI = 75, WSI_TOKEN_HTTP_URI_ARGS = 76, WSI_TOKEN_PROXY = 77, WSI_TOKEN_HTTP_X_REAL_IP = 78, WSI_TOKEN_HTTP1_0 = 79, WSI_TOKEN_X_FORWARDED_FOR = 80, WSI_TOKEN_CONNECT = 81, WSI_TOKEN_HEAD_URI = 82, WSI_TOKEN_TE = 83, WSI_TOKEN_REPLAY_NONCE = 84, WSI_TOKEN_COLON_PROTOCOL = 85, WSI_TOKEN_X_AUTH_TOKEN = 86, /****** add new things just above ---^ ******/ /* use token storage to stash these internally, not for * user use */ _WSI_TOKEN_CLIENT_SENT_PROTOCOLS, _WSI_TOKEN_CLIENT_PEER_ADDRESS, _WSI_TOKEN_CLIENT_URI, _WSI_TOKEN_CLIENT_HOST, _WSI_TOKEN_CLIENT_ORIGIN, _WSI_TOKEN_CLIENT_METHOD, _WSI_TOKEN_CLIENT_IFACE, _WSI_TOKEN_CLIENT_ALPN, /* always last real token index*/ WSI_TOKEN_COUNT, /* parser state additions, no storage associated */ WSI_TOKEN_NAME_PART, #if defined(LWS_WITH_CUSTOM_HEADERS) WSI_TOKEN_UNKNOWN_VALUE_PART, #endif WSI_TOKEN_SKIPPING, WSI_TOKEN_SKIPPING_SAW_CR, WSI_PARSING_COMPLETE, WSI_INIT_TOKEN_MUXURL, }; struct lws_token_limits { unsigned short token_limit[WSI_TOKEN_COUNT]; /**< max chars for this token */ }; /** * lws_token_to_string() - returns a textual representation of a hdr token index * * \param token: token index */ LWS_VISIBLE LWS_EXTERN const unsigned char * lws_token_to_string(enum lws_token_indexes token); /** * lws_hdr_total_length: report length of all fragments of a header totalled up * The returned length does not include the space for a * terminating '\0' * * \param wsi: websocket connection * \param h: which header index we are interested in */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h); /** * lws_hdr_fragment_length: report length of a single fragment of a header * The returned length does not include the space for a * terminating '\0' * * \param wsi: websocket connection * \param h: which header index we are interested in * \param frag_idx: which fragment of h we want to get the length of */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx); /** * lws_hdr_copy() - copy all fragments of the given header to a buffer * The buffer length len must include space for an additional * terminating '\0', or it will fail returning -1. * * \param wsi: websocket connection * \param dest: destination buffer * \param len: length of destination buffer * \param h: which header index we are interested in * * copies the whole, aggregated header, even if it was delivered in * several actual headers piece by piece. Returns -1 or length of the whole * header. */ LWS_VISIBLE LWS_EXTERN int lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h); /** * lws_hdr_copy_fragment() - copy a single fragment of the given header to a buffer * The buffer length len must include space for an additional * terminating '\0', or it will fail returning -1. * If the requested fragment index is not present, it fails * returning -1. * * \param wsi: websocket connection * \param dest: destination buffer * \param len: length of destination buffer * \param h: which header index we are interested in * \param frag_idx: which fragment of h we want to copy * * Normally this is only useful * to parse URI arguments like ?x=1&y=2, token index WSI_TOKEN_HTTP_URI_ARGS * fragment 0 will contain "x=1" and fragment 1 "y=2" */ LWS_VISIBLE LWS_EXTERN int lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len, enum lws_token_indexes h, int frag_idx); /** * lws_hdr_custom_length() - return length of a custom header * * \param wsi: websocket connection * \param name: header string (including terminating :) * \param nlen: length of name * * Lws knows about 100 common http headers, and parses them into indexes when * it recognizes them. When it meets a header that it doesn't know, it stores * the name and value directly, and you can look them up using * lws_hdr_custom_length() and lws_hdr_custom_copy(). * * This api returns -1, or the length of the value part of the header if it * exists. Lws must be built with LWS_WITH_CUSTOM_HEADERS (on by default) to * use this api. */ LWS_VISIBLE LWS_EXTERN int lws_hdr_custom_length(struct lws *wsi, const char *name, int nlen); /** * lws_hdr_custom_copy() - copy value part of a custom header * * \param wsi: websocket connection * \param dst: pointer to buffer to receive the copy * \param len: number of bytes available at dst * \param name: header string (including terminating :) * \param nlen: length of name * * Lws knows about 100 common http headers, and parses them into indexes when * it recognizes them. When it meets a header that it doesn't know, it stores * the name and value directly, and you can look them up using * lws_hdr_custom_length() and lws_hdr_custom_copy(). * * This api returns -1, or the length of the string it copied into dst if it * was big enough to contain both the string and an extra terminating NUL. Lws * must be built with LWS_WITH_CUSTOM_HEADERS (on by default) to use this api. */ LWS_VISIBLE LWS_EXTERN int lws_hdr_custom_copy(struct lws *wsi, char *dst, int len, const char *name, int nlen); /** * lws_get_urlarg_by_name() - return pointer to arg value if present * \param wsi: the connection to check * \param name: the arg name, like "token=" * \param buf: the buffer to receive the urlarg (including the name= part) * \param len: the length of the buffer to receive the urlarg * * Returns NULL if not found or a pointer inside buf to just after the * name= part. */ LWS_VISIBLE LWS_EXTERN const char * lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len); ///@} /*! \defgroup HTTP-headers-create HTTP headers: create * * ## HTTP headers: Create * * These apis allow you to create HTTP response headers in a way compatible with * both HTTP/1.x and HTTP/2. * * They each append to a buffer taking care about the buffer end, which is * passed in as a pointer. When data is written to the buffer, the current * position p is updated accordingly. * * All of these apis are LWS_WARN_UNUSED_RESULT as they can run out of space * and fail with nonzero return. */ ///@{ #define LWSAHH_CODE_MASK ((1 << 16) - 1) #define LWSAHH_FLAG_NO_SERVER_NAME (1 << 30) /** * lws_add_http_header_status() - add the HTTP response status code * * \param wsi: the connection to check * \param code: an HTTP code like 200, 404 etc (see enum http_status) * \param p: pointer to current position in buffer pointer * \param end: pointer to end of buffer * * Adds the initial response code, so should be called first. * * Code may additionally take OR'd flags: * * LWSAHH_FLAG_NO_SERVER_NAME: don't apply server name header this time */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_status(struct lws *wsi, unsigned int code, unsigned char **p, unsigned char *end); /** * lws_add_http_header_by_name() - append named header and value * * \param wsi: the connection to check * \param name: the hdr name, like "my-header" * \param value: the value after the = for this header * \param length: the length of the value * \param p: pointer to current position in buffer pointer * \param end: pointer to end of buffer * * Appends name: value to the headers */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name, const unsigned char *value, int length, unsigned char **p, unsigned char *end); /** * lws_add_http_header_by_token() - append given header and value * * \param wsi: the connection to check * \param token: the token index for the hdr * \param value: the value after the = for this header * \param length: the length of the value * \param p: pointer to current position in buffer pointer * \param end: pointer to end of buffer * * Appends name=value to the headers, but is able to take advantage of better * HTTP/2 coding mechanisms where possible. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token, const unsigned char *value, int length, unsigned char **p, unsigned char *end); /** * lws_add_http_header_content_length() - append content-length helper * * \param wsi: the connection to check * \param content_length: the content length to use * \param p: pointer to current position in buffer pointer * \param end: pointer to end of buffer * * Appends content-length: content_length to the headers */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_content_length(struct lws *wsi, lws_filepos_t content_length, unsigned char **p, unsigned char *end); /** * lws_finalize_http_header() - terminate header block * * \param wsi: the connection to check * \param p: pointer to current position in buffer pointer * \param end: pointer to end of buffer * * Indicates no more headers will be added */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_finalize_http_header(struct lws *wsi, unsigned char **p, unsigned char *end); /** * lws_finalize_write_http_header() - Helper finializing and writing http headers * * \param wsi: the connection to check * \param start: pointer to the start of headers in the buffer, eg &buf[LWS_PRE] * \param p: pointer to current position in buffer pointer * \param end: pointer to end of buffer * * Terminates the headers correctly accoring to the protocol in use (h1 / h2) * and writes the headers. Returns nonzero for error. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_finalize_write_http_header(struct lws *wsi, unsigned char *start, unsigned char **p, unsigned char *end); #define LWS_ILLEGAL_HTTP_CONTENT_LEN ((lws_filepos_t)-1ll) /** * lws_add_http_common_headers() - Helper preparing common http headers * * \param wsi: the connection to check * \param code: an HTTP code like 200, 404 etc (see enum http_status) * \param content_type: the content type, like "text/html" * \param content_len: the content length, in bytes * \param p: pointer to current position in buffer pointer * \param end: pointer to end of buffer * * Adds the initial response code, so should be called first. * * Code may additionally take OR'd flags: * * LWSAHH_FLAG_NO_SERVER_NAME: don't apply server name header this time * * This helper just calls public apis to simplify adding headers that are * commonly needed. If it doesn't fit your case, or you want to add additional * headers just call the public apis directly yourself for what you want. * * You can miss out the content length header by providing the constant * LWS_ILLEGAL_HTTP_CONTENT_LEN for the content_len. * * It does not call lws_finalize_http_header(), to allow you to add further * headers after calling this. You will need to call that yourself at the end. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_common_headers(struct lws *wsi, unsigned int code, const char *content_type, lws_filepos_t content_len, unsigned char **p, unsigned char *end); /** * lws_http_get_uri_and_method() - Get information on method and url * * \param wsi: the connection to get information on * \param puri_ptr: points to pointer to set to url * \param puri_len: points to int to set to uri length * * Returns -1 or method index * * GET 0 * POST 1 * OPTIONS 2 * PUT 3 * PATCH 4 * DELETE 5 * CONNECT 6 * HEAD 7 * :path 8 * * If returns method, *puri_ptr is set to the method's URI string and *puri_len * to its length */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_get_uri_and_method(struct lws *wsi, char **puri_ptr, int *puri_len); ///@} /*! \defgroup urlendec Urlencode and Urldecode * \ingroup http * * ##HTML chunked Substitution * * APIs for receiving chunks of text, replacing a set of variable names via * a callback, and then prepending and appending HTML chunked encoding * headers. */ //@{ /** * lws_urlencode() - like strncpy but with urlencoding * * \param escaped: output buffer * \param string: input buffer ('/0' terminated) * \param len: output buffer max length * * Because urlencoding expands the output string, it's not * possible to do it in-place, ie, with escaped == string */ LWS_VISIBLE LWS_EXTERN const char * lws_urlencode(char *escaped, const char *string, int len); /* * URLDECODE 1 / 2 * * This simple urldecode only operates until the first '\0' and requires the * data to exist all at once */ /** * lws_urldecode() - like strncpy but with urldecoding * * \param string: output buffer * \param escaped: input buffer ('\0' terminated) * \param len: output buffer max length * * This is only useful for '\0' terminated strings * * Since urldecoding only shrinks the output string, it is possible to * do it in-place, ie, string == escaped * * Returns 0 if completed OK or nonzero for urldecode violation (non-hex chars * where hex required, etc) */ LWS_VISIBLE LWS_EXTERN int lws_urldecode(char *string, const char *escaped, int len); ///@} /** * lws_return_http_status() - Return simple http status * \param wsi: Websocket instance (available from user callback) * \param code: Status index, eg, 404 * \param html_body: User-readable HTML description < 1KB, or NULL * * Helper to report HTTP errors back to the client cleanly and * consistently */ LWS_VISIBLE LWS_EXTERN int lws_return_http_status(struct lws *wsi, unsigned int code, const char *html_body); /** * lws_http_redirect() - write http redirect out on wsi * * \param wsi: websocket connection * \param code: HTTP response code (eg, 301) * \param loc: where to redirect to * \param len: length of loc * \param p: pointer current position in buffer (updated as we write) * \param end: pointer to end of buffer * * Returns amount written, or < 0 indicating fatal write failure. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len, unsigned char **p, unsigned char *end); /** * lws_http_transaction_completed() - wait for new http transaction or close * \param wsi: websocket connection * * Returns 1 if the HTTP connection must close now * Returns 0 and resets connection to wait for new HTTP header / * transaction if possible */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed(struct lws *wsi); /** * lws_http_headers_detach() - drop the associated headers storage and allow * it to be reused by another connection * \param wsi: http connection * * If the wsi has an ah headers struct attached, detach it. */ LWS_VISIBLE LWS_EXTERN int lws_http_headers_detach(struct lws *wsi); /** * lws_http_mark_sse() - called to indicate this http stream is now doing SSE * * \param wsi: http connection * * Cancel any timeout on the wsi, and for h2, mark the network connection as * containing an immortal stream for the duration the SSE stream is open. */ LWS_VISIBLE LWS_EXTERN int lws_http_mark_sse(struct lws *wsi); /** * lws_http_compression_apply() - apply an http compression transform * * \param wsi: the wsi to apply the compression transform to * \param name: NULL, or the name of the compression transform, eg, "deflate" * \param p: pointer to pointer to headers buffer * \param end: pointer to end of headers buffer * \param decomp: 0 = add compressor to wsi, 1 = add decompressor * * This allows transparent compression of dynamically generated HTTP. The * requested compression (eg, "deflate") is only applied if the client headers * indicated it was supported (and it has support in lws), otherwise it's a NOP. * * If the requested compression method is NULL, then the supported compression * formats are tried, and for non-decompression (server) mode the first that's * found on the client's accept-encoding header is chosen. * * NOTE: the compression transform, same as h2 support, relies on the user * code using LWS_WRITE_HTTP and then LWS_WRITE_HTTP_FINAL on the last part * written. The internal lws fileserving code already does this. * * If the library was built without the cmake option * LWS_WITH_HTTP_STREAM_COMPRESSION set, then a NOP is provided for this api, * allowing user code to build either way and use compression if available. */ LWS_VISIBLE int lws_http_compression_apply(struct lws *wsi, const char *name, unsigned char **p, unsigned char *end, char decomp); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-jose.h000066400000000000000000000150401357643561300225710ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ enum lws_jws_jose_hdr_indexes { LJJHI_ALG, /* REQUIRED */ LJJHI_JKU, /* Optional: string */ LJJHI_JWK, /* Optional: jwk JSON object: public key: */ LJJHI_KID, /* Optional: string */ LJJHI_X5U, /* Optional: string: url of public key cert / chain */ LJJHI_X5C, /* Optional: base64 (NOT -url): actual cert */ LJJHI_X5T, /* Optional: base64url: SHA-1 of actual cert */ LJJHI_X5T_S256, /* Optional: base64url: SHA-256 of actual cert */ LJJHI_TYP, /* Optional: string: media type */ LJJHI_CTY, /* Optional: string: content media type */ LJJHI_CRIT, /* Optional for send, REQUIRED: array of strings: * mustn't contain standardized strings or null set */ LJJHI_RECIPS_HDR, LJJHI_RECIPS_HDR_ALG, LJJHI_RECIPS_HDR_KID, LJJHI_RECIPS_EKEY, LJJHI_ENC, /* JWE only: Optional: string */ LJJHI_ZIP, /* JWE only: Optional: string ("DEF" = deflate) */ LJJHI_EPK, /* Additional arg for JWE ECDH: ephemeral public key */ LJJHI_APU, /* Additional arg for JWE ECDH: base64url */ LJJHI_APV, /* Additional arg for JWE ECDH: base64url */ LJJHI_IV, /* Additional arg for JWE AES: base64url */ LJJHI_TAG, /* Additional arg for JWE AES: base64url */ LJJHI_P2S, /* Additional arg for JWE PBES2: base64url: salt */ LJJHI_P2C, /* Additional arg for JWE PBES2: integer: count */ LWS_COUNT_JOSE_HDR_ELEMENTS }; enum lws_jose_algtype { LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_PSS, LWS_JOSE_ENCTYPE_ECDSA, LWS_JOSE_ENCTYPE_ECDHES, LWS_JOSE_ENCTYPE_AES_CBC, LWS_JOSE_ENCTYPE_AES_CFB128, LWS_JOSE_ENCTYPE_AES_CFB8, LWS_JOSE_ENCTYPE_AES_CTR, LWS_JOSE_ENCTYPE_AES_ECB, LWS_JOSE_ENCTYPE_AES_OFB, LWS_JOSE_ENCTYPE_AES_XTS, /* care: requires double-length key */ LWS_JOSE_ENCTYPE_AES_GCM, }; /* there's a table of these defined in lws-gencrypto-common.c */ struct lws_jose_jwe_alg { enum lws_genhash_types hash_type; enum lws_genhmac_types hmac_type; enum lws_jose_algtype algtype_signing; /* the signing cipher */ enum lws_jose_algtype algtype_crypto; /* the encryption cipher */ const char *alg; /* the JWA enc alg name, eg "ES512" */ const char *curve_name; /* NULL, or, eg, "P-256" */ unsigned short keybits_min, keybits_fixed; unsigned short ivbits; }; /* * For JWS, "JOSE header" is defined to be the union of... * * o JWS Protected Header * o JWS Unprotected Header * * For JWE, the "JOSE header" is the union of... * * o JWE Protected Header * o JWE Shared Unprotected Header * o JWE Per-Recipient Unprotected Header */ #define LWS_JWS_MAX_RECIPIENTS 3 struct lws_jws_recpient { /* * JOSE per-recipient unprotected header... for JWS this contains * protected / header / signature */ struct lws_gencrypto_keyelem unprot[LWS_COUNT_JOSE_HDR_ELEMENTS]; struct lws_jwk jwk_ephemeral; /* recipient ephemeral key if any */ struct lws_jwk jwk; /* recipient "jwk" key if any */ }; struct lws_jose { /* JOSE protected and unprotected header elements */ struct lws_gencrypto_keyelem e[LWS_COUNT_JOSE_HDR_ELEMENTS]; struct lws_jws_recpient recipient[LWS_JWS_MAX_RECIPIENTS]; /* information from the protected header part */ const struct lws_jose_jwe_alg *alg; const struct lws_jose_jwe_alg *enc_alg; int recipients; /* count of used recipient[] entries */ }; /** * lws_jose_init() - prepare a struct lws_jose for use * * \param jose: the jose header struct to prepare */ LWS_VISIBLE LWS_EXTERN void lws_jose_init(struct lws_jose *jose); /** * lws_jose_destroy() - retire a struct lws_jose from use * * \param jose: the jose header struct to destroy */ LWS_VISIBLE LWS_EXTERN void lws_jose_destroy(struct lws_jose *jose); /** * lws_gencrypto_jws_alg_to_definition() - look up a jws alg name * * \param alg: the jws alg name * \param jose: pointer to the pointer to the info struct to set on success * * Returns 0 if *jose set, else nonzero for failure */ LWS_VISIBLE LWS_EXTERN int lws_gencrypto_jws_alg_to_definition(const char *alg, const struct lws_jose_jwe_alg **jose); /** * lws_gencrypto_jwe_alg_to_definition() - look up a jwe alg name * * \param alg: the jwe alg name * \param jose: pointer to the pointer to the info struct to set on success * * Returns 0 if *jose set, else nonzero for failure */ LWS_VISIBLE LWS_EXTERN int lws_gencrypto_jwe_alg_to_definition(const char *alg, const struct lws_jose_jwe_alg **jose); /** * lws_gencrypto_jwe_enc_to_definition() - look up a jwe enc name * * \param alg: the jwe enc name * \param jose: pointer to the pointer to the info struct to set on success * * Returns 0 if *jose set, else nonzero for failure */ LWS_VISIBLE LWS_EXTERN int lws_gencrypto_jwe_enc_to_definition(const char *enc, const struct lws_jose_jwe_alg **jose); /** * lws_jws_parse_jose() - parse a JWS JOSE header * * \param jose: the jose struct to set to parsing results * \param buf: the raw JOSE header * \param len: the length of the raw JOSE header * \param temp: parent-owned buffer to "allocate" elements into * \param temp_len: amount of space available in temp * * returns the amount of temp used, or -1 for error */ LWS_VISIBLE LWS_EXTERN int lws_jws_parse_jose(struct lws_jose *jose, const char *buf, int len, char *temp, int *temp_len); /** * lws_jwe_parse_jose() - parse a JWE JOSE header * * \param jose: the jose struct to set to parsing results * \param buf: the raw JOSE header * \param len: the length of the raw JOSE header * \param temp: parent-owned buffer to "allocate" elements into * \param temp_len: amount of space available in temp * * returns the amount of temp used, or -1 for error */ LWS_VISIBLE LWS_EXTERN int lws_jwe_parse_jose(struct lws_jose *jose, const char *buf, int len, char *temp, int *temp_len); libwebsockets-3.2.1/include/libwebsockets/lws-jwe.h000066400000000000000000000126431357643561300224240ustar00rootroot00000000000000/* * libwebsockets - JSON Web Encryption * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h * * JWE Compact Serialization consists of * * BASE64URL(UTF8(JWE Protected Header)) || '.' || * BASE64URL(JWE Encrypted Key) || '.' || * BASE64URL(JWE Initialization Vector) || '.' || * BASE64URL(JWE Ciphertext) || '.' || * BASE64URL(JWE Authentication Tag) */ #define LWS_JWE_RFC3394_OVERHEAD_BYTES 8 #define LWS_JWE_AES_IV_BYTES 16 #define LWS_JWE_LIMIT_RSA_KEY_BITS 4096 #define LWS_JWE_LIMIT_AES_KEY_BITS (512 + 64) /* RFC3394 Key Wrap adds 64b */ #define LWS_JWE_LIMIT_EC_KEY_BITS 528 /* 521 rounded to byte boundary */ #define LWS_JWE_LIMIT_HASH_BITS (LWS_GENHASH_LARGEST * 8) /* the largest key element for any cipher */ #define LWS_JWE_LIMIT_KEY_ELEMENT_BYTES (LWS_JWE_LIMIT_RSA_KEY_BITS / 8) struct lws_jwe { struct lws_jose jose; struct lws_jws jws; struct lws_jwk jwk; /* * We have to keep a copy of the CEK so we can reuse it with later * key encryptions for the multiple recipient case. */ uint8_t cek[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES]; unsigned int cek_valid:1; int recip; }; LWS_VISIBLE LWS_EXTERN void lws_jwe_init(struct lws_jwe *jwe, struct lws_context *context); LWS_VISIBLE LWS_EXTERN void lws_jwe_destroy(struct lws_jwe *jwe); LWS_VISIBLE LWS_EXTERN void lws_jwe_be64(uint64_t c, uint8_t *p8); /* * JWE Compact Serialization consists of * * BASE64URL(UTF8(JWE Protected Header)) || '.' || * BASE64URL(JWE Encrypted Key) || '.' || * BASE64URL(JWE Initialization Vector) || '.' || * BASE64URL(JWE Ciphertext) || '.' || * BASE64URL(JWE Authentication Tag) */ LWS_VISIBLE LWS_EXTERN int lws_jwe_render_compact(struct lws_jwe *jwe, char *out, size_t out_len); LWS_VISIBLE int lws_jwe_render_flattened(struct lws_jwe *jwe, char *out, size_t out_len); LWS_VISIBLE LWS_EXTERN int lws_jwe_json_parse(struct lws_jwe *jwe, const uint8_t *buf, int len, char *temp, int *temp_len); /** * lws_jwe_auth_and_decrypt() - confirm and decrypt JWE * * \param jose: jose context * \param jws: jws / jwe context... .map and .map_b64 must be filled already * * This is a high level JWE decrypt api that takes a jws with the maps * already processed, and if the authentication passes, returns the decrypted * plaintext in jws.map.buf[LJWE_CTXT] and its length in jws.map.len[LJWE_CTXT]. * * In the jws, the following fields must have been set by the caller * * .context * .jwk (the key encryption key) * .map * .map_b64 * * Having the b64 and decoded maps filled externally makes it flexible where * the data was picked from, eg, from a Complete JWE JSON serialization, a * flattened one, or a Compact Serialization. * * Returns decrypt length, or -1 for failure. */ LWS_VISIBLE LWS_EXTERN int lws_jwe_auth_and_decrypt(struct lws_jwe *jwe, char *temp, int *temp_len); /** * lws_jwe_encrypt() - perform JWE encryption * * \param jose: the JOSE header information (encryption types, etc) * \param jws: the JWE elements, pointer to jwk etc * \param temp: parent-owned buffer to "allocate" elements into * \param temp_len: amount of space available in temp * * May be called up to LWS_JWS_MAX_RECIPIENTS times to encrypt the same CEK * multiple ways on the same JWE payload. * * returns the amount of temp used, or -1 for error. */ LWS_VISIBLE LWS_EXTERN int lws_jwe_encrypt(struct lws_jwe *jwe, char *temp, int *temp_len); /** * lws_jwe_create_packet() - add b64 sig to b64 hdr + payload * * \param jwe: the struct lws_jwe we are trying to render * \param payload: unencoded payload JSON * \param len: length of unencoded payload JSON * \param nonce: Nonse string to include in protected header * \param out: buffer to take signed packet * \param out_len: size of \p out buffer * \param conext: lws_context to get random from * * This creates a "flattened" JWS packet from the jwk and the plaintext * payload, and signs it. The packet is written into \p out. * * This does the whole packet assembly and signing, calling through to * lws_jws_sign_from_b64() as part of the process. * * Returns the length written to \p out, or -1. */ LWS_VISIBLE LWS_EXTERN int lws_jwe_create_packet(struct lws_jwe *jwe, const char *payload, size_t len, const char *nonce, char *out, size_t out_len, struct lws_context *context); /* only exposed because we have test vectors that need it */ LWS_VISIBLE LWS_EXTERN int lws_jwe_auth_and_decrypt_cbc_hs(struct lws_jwe *jwe, uint8_t *enc_cek, uint8_t *aad, int aad_len); /* only exposed because we have test vectors that need it */ LWS_VISIBLE LWS_EXTERN int lws_jwa_concat_kdf(struct lws_jwe *jwe, int direct, uint8_t *out, const uint8_t *shared_secret, int sslen); libwebsockets-3.2.1/include/libwebsockets/lws-jwk.h000066400000000000000000000161051357643561300224270ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup jwk JSON Web Keys * ## JSON Web Keys API * * Lws provides an API to parse JSON Web Keys into a struct lws_gencrypto_keyelem. * * "oct" and "RSA" type keys are supported. For "oct" keys, they are held in * the "e" member of the struct lws_gencrypto_keyelem. * * Keys elements are allocated on the heap. You must destroy the allocations * in the struct lws_gencrypto_keyelem by calling * lws_genrsa_destroy_elements() when you are finished with it. */ ///@{ enum enum_jwk_meta_tok { JWK_META_KTY, JWK_META_KID, JWK_META_USE, JWK_META_KEY_OPS, JWK_META_X5C, JWK_META_ALG, LWS_COUNT_JWK_ELEMENTS }; struct lws_jwk { /* key data elements */ struct lws_gencrypto_keyelem e[LWS_GENCRYPTO_MAX_KEYEL_COUNT]; /* generic meta key elements, like KID */ struct lws_gencrypto_keyelem meta[LWS_COUNT_JWK_ELEMENTS]; int kty; /**< one of LWS_JWK_ */ char private_key; /* nonzero = has private key elements */ }; typedef int (*lws_jwk_key_import_callback)(struct lws_jwk *s, void *user); struct lws_jwk_parse_state { struct lws_jwk *jwk; char b64[(((8192 / 8) * 4) / 3) + 1]; /* enough for 8Kb key */ lws_jwk_key_import_callback per_key_cb; void *user; int pos; unsigned short possible; }; /** lws_jwk_import() - Create a JSON Web key from the textual representation * * \param jwk: the JWK object to create * \param cb: callback for each jwk-processed key, or NULL if importing a single * key with no parent "keys" JSON * \param user: pointer to be passed to the callback, otherwise ignored by lws. * NULL if importing a single key with no parent "keys" JSON * \param in: a single JWK JSON stanza in utf-8 * \param len: the length of the JWK JSON stanza in bytes * * Creates an lws_jwk struct filled with data from the JSON representation. * * There are two ways to use this... with some protocols a single jwk is * delivered with no parent "keys": [] array. If you call this with cb and * user as NULL, then the input will be interpreted like that and the results * placed in s. * * The second case is that you are dealing with a "keys":[] array with one or * more keys in it. In this case, the function iterates through the keys using * s as a temporary jwk, and calls the user-provided callback for each key in * turn while it return 0 (nonzero return from the callback terminates the * iteration through any further keys). */ LWS_VISIBLE LWS_EXTERN int lws_jwk_import(struct lws_jwk *jwk, lws_jwk_key_import_callback cb, void *user, const char *in, size_t len); /** lws_jwk_destroy() - Destroy a JSON Web key * * \param jwk: the JWK object to destroy * * All allocations in the lws_jwk are destroyed */ LWS_VISIBLE LWS_EXTERN void lws_jwk_destroy(struct lws_jwk *jwk); /** lws_jwk_dup_oct() - Set a jwk to a dup'd binary OCT key * * \param jwk: the JWK object to set * \param key: the JWK object to destroy * \param len: the JWK object to destroy * * Sets the kty to OCT, allocates len bytes for K and copies len bytes of key * into the allocation. */ LWS_VISIBLE LWS_EXTERN int lws_jwk_dup_oct(struct lws_jwk *jwk, const void *key, int len); /** lws_jwk_export() - Export a JSON Web key to a textual representation * * \param jwk: the JWK object to export * \param _private: 0 = just export public parts, 1 = export everything * \param p: the buffer to write the exported JWK to * \param len: the length of the buffer \p p in bytes... reduced by used amount * * Returns length of the used part of the buffer if OK, or -1 for error. * * Serializes the content of the JWK into a char buffer. */ LWS_VISIBLE LWS_EXTERN int lws_jwk_export(struct lws_jwk *jwk, int _private, char *p, int *len); /** lws_jwk_load() - Import a JSON Web key from a file * * \param jwk: the JWK object to load into * \param filename: filename to load from * \param cb: optional callback for each key * \param user: opaque user pointer passed to cb if given * * Returns 0 for OK or -1 for failure * * There are two ways to use this... with some protocols a single jwk is * delivered with no parent "keys": [] array. If you call this with cb and * user as NULL, then the input will be interpreted like that and the results * placed in s. * * The second case is that you are dealing with a "keys":[] array with one or * more keys in it. In this case, the function iterates through the keys using * s as a temporary jwk, and calls the user-provided callback for each key in * turn while it return 0 (nonzero return from the callback terminates the * iteration through any further keys, leaving the last one in s). */ LWS_VISIBLE LWS_EXTERN int lws_jwk_load(struct lws_jwk *jwk, const char *filename, lws_jwk_key_import_callback cb, void *user); /** lws_jwk_save() - Export a JSON Web key to a file * * \param jwk: the JWK object to save from * \param filename: filename to save to * * Returns 0 for OK or -1 for failure */ LWS_VISIBLE LWS_EXTERN int lws_jwk_save(struct lws_jwk *jwk, const char *filename); /** lws_jwk_rfc7638_fingerprint() - jwk to RFC7638 compliant fingerprint * * \param jwk: the JWK object to fingerprint * \param digest32: buffer to take 32-byte digest * * Returns 0 for OK or -1 for failure */ LWS_VISIBLE LWS_EXTERN int lws_jwk_rfc7638_fingerprint(struct lws_jwk *jwk, char *digest32); /** lws_jwk_strdup_meta() - allocate a duplicated string meta element * * \param jwk: the JWK object to fingerprint * \param idx: JWK_META_ element index * \param in: string to copy * \param len: length of string to copy * * Returns 0 for OK or -1 for failure */ LWS_VISIBLE LWS_EXTERN int lws_jwk_strdup_meta(struct lws_jwk *jwk, enum enum_jwk_meta_tok idx, const char *in, int len); LWS_VISIBLE LWS_EXTERN int lws_jwk_dump(struct lws_jwk *jwk); /** lws_jwk_generate() - create a new key of given type and characteristics * * \param context: the struct lws_context used for RNG * \param jwk: the JWK object to fingerprint * \param kty: One of the LWS_GENCRYPTO_KTY_ key types * \param bits: for OCT and RSA keys, the number of bits * \param curve: for EC keys, the name of the curve * * Returns 0 for OK or -1 for failure */ LWS_VISIBLE int lws_jwk_generate(struct lws_context *context, struct lws_jwk *jwk, enum lws_gencrypto_kty kty, int bits, const char *curve); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-jws.h000066400000000000000000000317631357643561300224460ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup jws JSON Web Signature * ## JSON Web Signature API * * Lws provides an API to check and create RFC7515 JSON Web Signatures * * SHA256/384/512 HMAC, and RSA 256/384/512 are supported. * * The API uses your TLS library crypto, but works exactly the same no matter * what your TLS backend is. */ ///@{ /* * The maps are built to work with both JWS (LJWS_) and JWE (LJWE_), and are * sized to the slightly larger JWE case. */ enum enum_jws_sig_elements { /* JWS block namespace */ LJWS_JOSE, LJWS_PYLD, LJWS_SIG, LJWS_UHDR, /* JWE block namespace */ LJWE_JOSE = 0, LJWE_EKEY, LJWE_IV, LJWE_CTXT, LJWE_ATAG, LJWE_AAD, LWS_JWS_MAX_COMPACT_BLOCKS }; struct lws_jws_map { const char *buf[LWS_JWS_MAX_COMPACT_BLOCKS]; uint32_t len[LWS_JWS_MAX_COMPACT_BLOCKS]; }; #define LWS_JWS_MAX_SIGS 3 struct lws_jws { struct lws_jwk *jwk; /* the struct lws_jwk containing the signing key */ struct lws_context *context; /* the lws context (used to get random) */ struct lws_jws_map map, map_b64; }; /* jws EC signatures do not have ASN.1 in them, meaning they're incompatible * with generic signatures. */ /** * lws_jws_init() - initialize a jws for use * * \param jws: pointer to the jws to initialize * \param jwk: the jwk to use with this jws * \param context: the lws_context to use */ LWS_VISIBLE LWS_EXTERN void lws_jws_init(struct lws_jws *jws, struct lws_jwk *jwk, struct lws_context *context); /** * lws_jws_destroy() - scrub a jws * * \param jws: pointer to the jws to destroy * * Call before the jws goes out of scope. * * Elements defined in the jws are zeroed. */ LWS_VISIBLE LWS_EXTERN void lws_jws_destroy(struct lws_jws *jws); /** * lws_jws_sig_confirm_compact() - check signature * * \param map: pointers and lengths for each of the unencoded JWS elements * \param jwk: public key * \param context: lws_context * \param temp: scratchpad * \param temp_len: length of scratchpad * * Confirms the signature on a JWS. Use if you have non-b64 plain JWS elements * in a map... it'll make a temp b64 version needed for comparison. See below * for other variants. * * Returns 0 on match. */ LWS_VISIBLE LWS_EXTERN int lws_jws_sig_confirm_compact(struct lws_jws_map *map, struct lws_jwk *jwk, struct lws_context *context, char *temp, int *temp_len); LWS_VISIBLE LWS_EXTERN int lws_jws_sig_confirm_compact_b64_map(struct lws_jws_map *map_b64, struct lws_jwk *jwk, struct lws_context *context, char *temp, int *temp_len); /** * lws_jws_sig_confirm_compact_b64() - check signature on b64 compact JWS * * \param in: pointer to b64 jose.payload[.hdr].sig * \param len: bytes available at \p in * \param map: map to take decoded non-b64 content * \param jwk: public key * \param context: lws_context * \param temp: scratchpad * \param temp_len: size of scratchpad * * Confirms the signature on a JWS. Use if you have you have b64 compact layout * (jose.payload.hdr.sig) as an aggregated string... it'll make a temp plain * version needed for comparison. * * Returns 0 on match. */ LWS_VISIBLE LWS_EXTERN int lws_jws_sig_confirm_compact_b64(const char *in, size_t len, struct lws_jws_map *map, struct lws_jwk *jwk, struct lws_context *context, char *temp, int *temp_len); /** * lws_jws_sig_confirm() - check signature on plain + b64 JWS elements * * \param map_b64: pointers and lengths for each of the b64-encoded JWS elements * \param map: pointers and lengths for each of the unencoded JWS elements * \param jwk: public key * \param context: lws_context * * Confirms the signature on a JWS. Use if you have you already have both b64 * compact layout (jose.payload.hdr.sig) and decoded JWS elements in maps. * * If you had the b64 string and called lws_jws_compact_decode() on it, you * will end up with both maps, and can use this api version, saving needlessly * regenerating any temp map. * * Returns 0 on match. */ LWS_VISIBLE LWS_EXTERN int lws_jws_sig_confirm(struct lws_jws_map *map_b64, /* b64-encoded */ struct lws_jws_map *map, /* non-b64 */ struct lws_jwk *jwk, struct lws_context *context); /** * lws_jws_sign_from_b64() - add b64 sig to b64 hdr + payload * * \param jose: jose header information * \param jws: information to include in the signature * \param b64_sig: output buffer for b64 signature * \param sig_len: size of \p b64_sig output buffer * * This adds a b64-coded JWS signature of the b64-encoded protected header * and b64-encoded payload, at \p b64_sig. The signature will be as large * as the N element of the RSA key when the RSA key is used, eg, 512 bytes for * a 4096-bit key, and then b64-encoding on top. * * In some special cases, there is only payload to sign and no header, in that * case \p b64_hdr may be NULL, and only the payload will be hashed before * signing. * * Returns the length of the encoded signature written to \p b64_sig, or -1. */ LWS_VISIBLE LWS_EXTERN int lws_jws_sign_from_b64(struct lws_jose *jose, struct lws_jws *jws, char *b64_sig, size_t sig_len); /** * lws_jws_compact_decode() - converts and maps compact serialization b64 sections * * \param in: the incoming compact serialized b64 * \param len: the length of the incoming compact serialized b64 * \param map: pointer to the results structure * \param map_b64: NULL, or pointer to a second results structure taking block * information about the undecoded b64 * \param out: buffer to hold decoded results * \param out_len: size of out in bytes * * Returns number of sections (2 if "none", else 3), or -1 if illegal. * * map is set to point to the start and hold the length of each decoded block. * If map_b64 is non-NULL, then it's set with information about the input b64 * blocks. */ LWS_VISIBLE LWS_EXTERN int lws_jws_compact_decode(const char *in, int len, struct lws_jws_map *map, struct lws_jws_map *map_b64, char *out, int *out_len); LWS_VISIBLE LWS_EXTERN int lws_jws_compact_encode(struct lws_jws_map *map_b64, /* b64-encoded */ const struct lws_jws_map *map, /* non-b64 */ char *buf, int *out_len); LWS_VISIBLE LWS_EXTERN int lws_jws_sig_confirm_json(const char *in, size_t len, struct lws_jws *jws, struct lws_jwk *jwk, struct lws_context *context, char *temp, int *temp_len); /** * lws_jws_write_flattened_json() - create flattened JSON sig * * \param jws: information to include in the signature * \param flattened: output buffer for JSON * \param len: size of \p flattened output buffer * */ LWS_VISIBLE LWS_EXTERN int lws_jws_write_flattened_json(struct lws_jws *jws, char *flattened, size_t len); /** * lws_jws_write_compact() - create flattened JSON sig * * \param jws: information to include in the signature * \param compact: output buffer for compact format * \param len: size of \p flattened output buffer * */ LWS_VISIBLE LWS_EXTERN int lws_jws_write_compact(struct lws_jws *jws, char *compact, size_t len); /* * below apis are not normally needed if dealing with whole JWS... they're * useful for creating from scratch */ /** * lws_jws_dup_element() - allocate space for an element and copy data into it * * \param map: map to create the element in * \param idx: index of element in the map to create * \param temp: space to allocate in * \param temp_len: available space at temp * \param in: data to duplicate into element * \param in_len: length of data to duplicate * \param actual_alloc: 0 for same as in_len, else actual allocation size * * Copies in_len from in to temp, if temp_len is sufficient. * * Returns 0 or -1 if not enough space in temp / temp_len. * * Over-allocation can be acheived by setting actual_alloc to the real * allocation desired... in_len will be copied into it. * * *temp_len is reduced by actual_alloc if successful. */ LWS_VISIBLE LWS_EXTERN int lws_jws_dup_element(struct lws_jws_map *map, int idx, char *temp, int *temp_len, const void *in, size_t in_len, size_t actual_alloc); /** * lws_jws_randomize_element() - create an element and fill with random * * \param context: lws_context used for random * \param map: map to create the element in * \param idx: index of element in the map to create * \param temp: space to allocate in * \param temp_len: available space at temp * \param random_len: length of data to fill with random * \param actual_alloc: 0 for same as random_len, else actual allocation size * * Randomize random_len bytes at temp, if temp_len is sufficient. * * Returns 0 or -1 if not enough space in temp / temp_len. * * Over-allocation can be acheived by setting actual_alloc to the real * allocation desired... the first random_len will be filled with random. * * *temp_len is reduced by actual_alloc if successful. */ LWS_VISIBLE LWS_EXTERN int lws_jws_randomize_element(struct lws_context *context, struct lws_jws_map *map, int idx, char *temp, int *temp_len, size_t random_len, size_t actual_alloc); /** * lws_jws_alloc_element() - create an element and reserve space for content * * \param map: map to create the element in * \param idx: index of element in the map to create * \param temp: space to allocate in * \param temp_len: available space at temp * \param len: logical length of element * \param actual_alloc: 0 for same as len, else actual allocation size * * Allocate len bytes at temp, if temp_len is sufficient. * * Returns 0 or -1 if not enough space in temp / temp_len. * * Over-allocation can be acheived by setting actual_alloc to the real * allocation desired... the element logical length will be set to len. * * *temp_len is reduced by actual_alloc if successful. */ LWS_VISIBLE LWS_EXTERN int lws_jws_alloc_element(struct lws_jws_map *map, int idx, char *temp, int *temp_len, size_t len, size_t actual_alloc); /** * lws_jws_encode_b64_element() - create an b64-encoded element * * \param map: map to create the element in * \param idx: index of element in the map to create * \param temp: space to allocate in * \param temp_len: available space at temp * \param in: pointer to unencoded input * \param in_len: length of unencoded input * * Allocate len bytes at temp, if temp_len is sufficient. * * Returns 0 or -1 if not enough space in temp / temp_len. * * Over-allocation can be acheived by setting actual_alloc to the real * allocation desired... the element logical length will be set to len. * * *temp_len is reduced by actual_alloc if successful. */ LWS_VISIBLE LWS_EXTERN int lws_jws_encode_b64_element(struct lws_jws_map *map, int idx, char *temp, int *temp_len, const void *in, size_t in_len); /** * lws_jws_b64_compact_map() - find block starts and lengths in compact b64 * * \param in: pointer to b64 jose.payload[.hdr].sig * \param len: bytes available at \p in * \param map: output struct with pointers and lengths for each JWS element * * Scans a jose.payload[.hdr].sig b64 string and notes where the blocks start * and their length into \p map. * * Returns number of blocks if OK. May return <0 if malformed. * May not fill all map entries. */ LWS_VISIBLE LWS_EXTERN int lws_jws_b64_compact_map(const char *in, int len, struct lws_jws_map *map); /** * lws_jws_base64_enc() - encode input data into b64url data * * \param in: the incoming plaintext * \param in_len: the length of the incoming plaintext in bytes * \param out: the buffer to store the b64url encoded data to * \param out_max: the length of \p out in bytes * * Returns either -1 if problems, or the number of bytes written to \p out. */ LWS_VISIBLE LWS_EXTERN int lws_jws_base64_enc(const char *in, size_t in_len, char *out, size_t out_max); /** * lws_jws_encode_section() - encode input data into b64url data, * prepending . if not first * * \param in: the incoming plaintext * \param in_len: the length of the incoming plaintext in bytes * \param first: nonzero if the first section * \param p: the buffer to store the b64url encoded data to * \param end: just past the end of p * * Returns either -1 if problems, or the number of bytes written to \p out. * If the section is not the first one, '.' is prepended. */ LWS_VISIBLE LWS_EXTERN int lws_jws_encode_section(const char *in, size_t in_len, int first, char **p, char *end); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-lejp.h000066400000000000000000000206221357643561300225650ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /** \defgroup lejp JSON parser * ##JSON parsing related functions * \ingroup lwsapi * * LEJP is an extremely lightweight JSON stream parser included in lws. */ //@{ struct lejp_ctx; #if !defined(LWS_ARRAY_SIZE) #define LWS_ARRAY_SIZE(_x) (sizeof(_x) / sizeof(_x[0])) #endif #define LEJP_FLAG_WS_KEEP 64 #define LEJP_FLAG_WS_COMMENTLINE 32 enum lejp_states { LEJP_IDLE = 0, LEJP_MEMBERS = 1, LEJP_M_P = 2, LEJP_MP_STRING = LEJP_FLAG_WS_KEEP | 3, LEJP_MP_STRING_ESC = LEJP_FLAG_WS_KEEP | 4, LEJP_MP_STRING_ESC_U1 = LEJP_FLAG_WS_KEEP | 5, LEJP_MP_STRING_ESC_U2 = LEJP_FLAG_WS_KEEP | 6, LEJP_MP_STRING_ESC_U3 = LEJP_FLAG_WS_KEEP | 7, LEJP_MP_STRING_ESC_U4 = LEJP_FLAG_WS_KEEP | 8, LEJP_MP_DELIM = 9, LEJP_MP_VALUE = 10, LEJP_MP_VALUE_NUM_INT = LEJP_FLAG_WS_KEEP | 11, LEJP_MP_VALUE_NUM_EXP = LEJP_FLAG_WS_KEEP | 12, LEJP_MP_VALUE_TOK = LEJP_FLAG_WS_KEEP | 13, LEJP_MP_COMMA_OR_END = 14, LEJP_MP_ARRAY_END = 15, }; enum lejp_reasons { LEJP_CONTINUE = -1, LEJP_REJECT_IDLE_NO_BRACE = -2, LEJP_REJECT_MEMBERS_NO_CLOSE = -3, LEJP_REJECT_MP_NO_OPEN_QUOTE = -4, LEJP_REJECT_MP_STRING_UNDERRUN = -5, LEJP_REJECT_MP_ILLEGAL_CTRL = -6, LEJP_REJECT_MP_STRING_ESC_ILLEGAL_ESC = -7, LEJP_REJECT_ILLEGAL_HEX = -8, LEJP_REJECT_MP_DELIM_MISSING_COLON = -9, LEJP_REJECT_MP_DELIM_BAD_VALUE_START = -10, LEJP_REJECT_MP_VAL_NUM_INT_NO_FRAC = -11, LEJP_REJECT_MP_VAL_NUM_FORMAT = -12, LEJP_REJECT_MP_VAL_NUM_EXP_BAD_EXP = -13, LEJP_REJECT_MP_VAL_TOK_UNKNOWN = -14, LEJP_REJECT_MP_C_OR_E_UNDERF = -15, LEJP_REJECT_MP_C_OR_E_NOTARRAY = -16, LEJP_REJECT_MP_ARRAY_END_MISSING = -17, LEJP_REJECT_STACK_OVERFLOW = -18, LEJP_REJECT_MP_DELIM_ISTACK = -19, LEJP_REJECT_NUM_TOO_LONG = -20, LEJP_REJECT_MP_C_OR_E_NEITHER = -21, LEJP_REJECT_UNKNOWN = -22, LEJP_REJECT_CALLBACK = -23 }; #define LEJP_FLAG_CB_IS_VALUE 64 enum lejp_callbacks { LEJPCB_CONSTRUCTED = 0, LEJPCB_DESTRUCTED = 1, LEJPCB_START = 2, LEJPCB_COMPLETE = 3, LEJPCB_FAILED = 4, LEJPCB_PAIR_NAME = 5, LEJPCB_VAL_TRUE = LEJP_FLAG_CB_IS_VALUE | 6, LEJPCB_VAL_FALSE = LEJP_FLAG_CB_IS_VALUE | 7, LEJPCB_VAL_NULL = LEJP_FLAG_CB_IS_VALUE | 8, LEJPCB_VAL_NUM_INT = LEJP_FLAG_CB_IS_VALUE | 9, LEJPCB_VAL_NUM_FLOAT = LEJP_FLAG_CB_IS_VALUE | 10, LEJPCB_VAL_STR_START = 11, /* notice handle separately */ LEJPCB_VAL_STR_CHUNK = LEJP_FLAG_CB_IS_VALUE | 12, LEJPCB_VAL_STR_END = LEJP_FLAG_CB_IS_VALUE | 13, LEJPCB_ARRAY_START = 14, LEJPCB_ARRAY_END = 15, LEJPCB_OBJECT_START = 16, LEJPCB_OBJECT_END = 17, }; /** * _lejp_callback() - User parser actions * \param ctx: LEJP context * \param reason: Callback reason * * Your user callback is associated with the context at construction time, * and receives calls as the parsing progresses. * * All of the callbacks may be ignored and just return 0. * * The reasons it might get called, found in @reason, are: * * LEJPCB_CONSTRUCTED: The context was just constructed... you might want to * perform one-time allocation for the life of the context. * * LEJPCB_DESTRUCTED: The context is being destructed... if you made any * allocations at construction-time, you can free them now * * LEJPCB_START: Parsing is beginning at the first byte of input * * LEJPCB_COMPLETE: Parsing has completed successfully. You'll get a 0 or * positive return code from lejp_parse indicating the * amount of unused bytes left in the input buffer * * LEJPCB_FAILED: Parsing failed. You'll get a negative error code * returned from lejp_parse * * LEJPCB_PAIR_NAME: When a "name":"value" pair has had the name parsed, * this callback occurs. You can find the new name at * the end of ctx->path[] * * LEJPCB_VAL_TRUE: The "true" value appeared * * LEJPCB_VAL_FALSE: The "false" value appeared * * LEJPCB_VAL_NULL: The "null" value appeared * * LEJPCB_VAL_NUM_INT: A string representing an integer is in ctx->buf * * LEJPCB_VAL_NUM_FLOAT: A string representing a float is in ctx->buf * * LEJPCB_VAL_STR_START: We are starting to parse a string, no data yet * * LEJPCB_VAL_STR_CHUNK: We parsed LEJP_STRING_CHUNK -1 bytes of string data in * ctx->buf, which is as much as we can buffer, so we are * spilling it. If all your strings are less than * LEJP_STRING_CHUNK - 1 bytes, you will never see this * callback. * * LEJPCB_VAL_STR_END: String parsing has completed, the last chunk of the * string is in ctx->buf. * * LEJPCB_ARRAY_START: An array started * * LEJPCB_ARRAY_END: An array ended * * LEJPCB_OBJECT_START: An object started * * LEJPCB_OBJECT_END: An object ended */ LWS_EXTERN signed char _lejp_callback(struct lejp_ctx *ctx, char reason); typedef signed char (*lejp_callback)(struct lejp_ctx *ctx, char reason); #ifndef LEJP_MAX_PARSING_STACK_DEPTH #define LEJP_MAX_PARSING_STACK_DEPTH 5 #endif #ifndef LEJP_MAX_DEPTH #define LEJP_MAX_DEPTH 12 #endif #ifndef LEJP_MAX_INDEX_DEPTH #define LEJP_MAX_INDEX_DEPTH 5 #endif #ifndef LEJP_MAX_PATH #define LEJP_MAX_PATH 128 #endif #ifndef LEJP_STRING_CHUNK /* must be >= 30 to assemble floats */ #define LEJP_STRING_CHUNK 254 #endif enum num_flags { LEJP_SEEN_MINUS = (1 << 0), LEJP_SEEN_POINT = (1 << 1), LEJP_SEEN_POST_POINT = (1 << 2), LEJP_SEEN_EXP = (1 << 3) }; struct _lejp_stack { char s; /* lejp_state stack*/ char p; /* path length */ char i; /* index array length */ char b; /* user bitfield */ }; struct _lejp_parsing_stack { void *user; /* private to the stack level */ signed char (*callback)(struct lejp_ctx *ctx, char reason); const char * const *paths; uint8_t count_paths; uint8_t ppos; uint8_t path_match; }; struct lejp_ctx { /* sorted by type for most compact alignment * * pointers */ void *user; /* arrays */ struct _lejp_parsing_stack pst[LEJP_MAX_PARSING_STACK_DEPTH]; struct _lejp_stack st[LEJP_MAX_DEPTH]; uint16_t i[LEJP_MAX_INDEX_DEPTH]; /* index array */ uint16_t wild[LEJP_MAX_INDEX_DEPTH]; /* index array */ char path[LEJP_MAX_PATH]; char buf[LEJP_STRING_CHUNK + 1]; /* size_t */ size_t path_stride; /* 0 means default ptr size, else stride */ /* int */ uint32_t line; /* short */ uint16_t uni; /* char */ uint8_t npos; uint8_t dcount; uint8_t f; uint8_t sp; /* stack head */ uint8_t ipos; /* index stack depth */ uint8_t count_paths; uint8_t path_match; uint8_t path_match_len; uint8_t wildcount; uint8_t pst_sp; /* parsing stack head */ }; LWS_VISIBLE LWS_EXTERN void lejp_construct(struct lejp_ctx *ctx, signed char (*callback)(struct lejp_ctx *ctx, char reason), void *user, const char * const *paths, unsigned char paths_count); LWS_VISIBLE LWS_EXTERN void lejp_destruct(struct lejp_ctx *ctx); LWS_VISIBLE LWS_EXTERN int lejp_parse(struct lejp_ctx *ctx, const unsigned char *json, int len); LWS_VISIBLE LWS_EXTERN void lejp_change_callback(struct lejp_ctx *ctx, signed char (*callback)(struct lejp_ctx *ctx, char reason)); /* * push the current paths / paths_count and lejp_cb to a stack in the ctx, and * start using the new ones */ LWS_VISIBLE LWS_EXTERN int lejp_parser_push(struct lejp_ctx *ctx, void *user, const char * const *paths, unsigned char paths_count, lejp_callback lejp_cb); /* * pop the previously used paths / paths_count and lejp_cb, and continue * parsing using those as before */ LWS_VISIBLE LWS_EXTERN int lejp_parser_pop(struct lejp_ctx *ctx); /* exported for use when reevaluating a path for use with a subcontext */ LWS_VISIBLE LWS_EXTERN void lejp_check_path_match(struct lejp_ctx *ctx); LWS_VISIBLE LWS_EXTERN int lejp_get_wildcard(struct lejp_ctx *ctx, int wildcard, char *dest, int len); LWS_VISIBLE LWS_EXTERN const char * lejp_error_to_string(int e); //@} libwebsockets-3.2.1/include/libwebsockets/lws-logs.h000066400000000000000000000165111357643561300226010ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /** \defgroup log Logging * * ##Logging * * Lws provides flexible and filterable logging facilities, which can be * used inside lws and in user code. * * Log categories may be individually filtered bitwise, and directed to built-in * sinks for syslog-compatible logging, or a user-defined function. */ ///@{ enum lws_log_levels { LLL_ERR = 1 << 0, LLL_WARN = 1 << 1, LLL_NOTICE = 1 << 2, LLL_INFO = 1 << 3, LLL_DEBUG = 1 << 4, LLL_PARSER = 1 << 5, LLL_HEADER = 1 << 6, LLL_EXT = 1 << 7, LLL_CLIENT = 1 << 8, LLL_LATENCY = 1 << 9, LLL_USER = 1 << 10, LLL_THREAD = 1 << 11, LLL_COUNT = 12 /* set to count of valid flags */ }; /** * lwsl_timestamp: generate logging timestamp string * * \param level: logging level * \param p: char * buffer to take timestamp * \param len: length of p * * returns length written in p */ LWS_VISIBLE LWS_EXTERN int lwsl_timestamp(int level, char *p, int len); #if defined(LWS_PLAT_OPTEE) && !defined(LWS_WITH_NETWORK) #define _lws_log(aaa, ...) SMSG(__VA_ARGS__) #else LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...) LWS_FORMAT(2); LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl); #endif /* these guys are unconditionally included */ #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__) #define lwsl_user(...) _lws_log(LLL_USER, __VA_ARGS__) #if !defined(LWS_WITH_NO_LOGS) /* notice and warn are usually included by being compiled in */ #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__) #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__) #endif /* * weaker logging can be deselected by telling CMake to build in RELEASE mode * that gets rid of the overhead of checking while keeping _warn and _err * active */ #if defined(_DEBUG) #if defined(LWS_WITH_NO_LOGS) /* notice, warn and log are always compiled in */ #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__) #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__) #endif #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__) #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__) #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__) #define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__) #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__) #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__) #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__) #define lwsl_thread(...) _lws_log(LLL_THREAD, __VA_ARGS__) #else /* no debug */ #if defined(LWS_WITH_NO_LOGS) #define lwsl_warn(...) do {} while(0) #define lwsl_notice(...) do {} while(0) #endif #define lwsl_info(...) do {} while(0) #define lwsl_debug(...) do {} while(0) #define lwsl_parser(...) do {} while(0) #define lwsl_header(...) do {} while(0) #define lwsl_ext(...) do {} while(0) #define lwsl_client(...) do {} while(0) #define lwsl_latency(...) do {} while(0) #define lwsl_thread(...) do {} while(0) #endif #define lwsl_hexdump_err(...) lwsl_hexdump_level(LLL_ERR, __VA_ARGS__) #define lwsl_hexdump_warn(...) lwsl_hexdump_level(LLL_WARN, __VA_ARGS__) #define lwsl_hexdump_notice(...) lwsl_hexdump_level(LLL_NOTICE, __VA_ARGS__) #define lwsl_hexdump_info(...) lwsl_hexdump_level(LLL_INFO, __VA_ARGS__) #define lwsl_hexdump_debug(...) lwsl_hexdump_level(LLL_DEBUG, __VA_ARGS__) /** * lwsl_hexdump_level() - helper to hexdump a buffer at a selected debug level * * \param level: one of LLL_ constants * \param vbuf: buffer start to dump * \param len: length of buffer to dump * * If \p level is visible, does a nice hexdump -C style dump of \p vbuf for * \p len bytes. This can be extremely convenient while debugging. */ LWS_VISIBLE LWS_EXTERN void lwsl_hexdump_level(int level, const void *vbuf, size_t len); /** * lwsl_hexdump() - helper to hexdump a buffer (DEBUG builds only) * * \param buf: buffer start to dump * \param len: length of buffer to dump * * Calls through to lwsl_hexdump_level(LLL_DEBUG, ... for compatability. * It's better to use lwsl_hexdump_level(level, ... directly so you can control * the visibility. */ LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(const void *buf, size_t len); /** * lws_is_be() - returns nonzero if the platform is Big Endian */ static LWS_INLINE int lws_is_be(void) { const int probe = ~0xff; return *(const char *)&probe; } /** * lws_set_log_level() - Set the logging bitfield * \param level: OR together the LLL_ debug contexts you want output from * \param log_emit_function: NULL to leave it as it is, or a user-supplied * function to perform log string emission instead of * the default stderr one. * * log level defaults to "err", "warn" and "notice" contexts enabled and * emission on stderr. If stderr is a tty (according to isatty()) then * the output is coloured according to the log level using ANSI escapes. */ LWS_VISIBLE LWS_EXTERN void lws_set_log_level(int level, void (*log_emit_function)(int level, const char *line)); /** * lwsl_emit_syslog() - helper log emit function writes to system log * * \param level: one of LLL_ log level indexes * \param line: log string * * You use this by passing the function pointer to lws_set_log_level(), to set * it as the log emit function, it is not called directly. */ LWS_VISIBLE LWS_EXTERN void lwsl_emit_syslog(int level, const char *line); /** * lwsl_emit_stderr() - helper log emit function writes to stderr * * \param level: one of LLL_ log level indexes * \param line: log string * * You use this by passing the function pointer to lws_set_log_level(), to set * it as the log emit function, it is not called directly. * * It prepends a system timestamp like [2018/11/13 07:41:57:3989] * * If stderr is a tty, then ansi colour codes are added. */ LWS_VISIBLE LWS_EXTERN void lwsl_emit_stderr(int level, const char *line); /** * lwsl_emit_stderr_notimestamp() - helper log emit function writes to stderr * * \param level: one of LLL_ log level indexes * \param line: log string * * You use this by passing the function pointer to lws_set_log_level(), to set * it as the log emit function, it is not called directly. * * If stderr is a tty, then ansi colour codes are added. */ LWS_VISIBLE LWS_EXTERN void lwsl_emit_stderr_notimestamp(int level, const char *line); /** * lwsl_visible() - returns true if the log level should be printed * * \param level: one of LLL_ log level indexes * * This is useful if you have to do work to generate the log content, you * can skip the work if the log level used to print it is not actually * enabled at runtime. */ LWS_VISIBLE LWS_EXTERN int lwsl_visible(int level); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-lwsac.h000066400000000000000000000171171357643561300227510ustar00rootroot00000000000000/* * libwebsockets - lws alloc chunk * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /** \defgroup lwsac lwsac * * ##Allocated Chunks * * If you know you will be allocating a large, unknown number of same or * differently sized objects, it's certainly possible to do it with libc * malloc. However the allocation cost in time and memory overhead can * add up, and deallocation means walking the structure of every object and * freeing them in turn. * * lwsac (LWS Allocated Chunks) allocates chunks intended to be larger * than your objects (4000 bytes by default) which you linearly allocate from * using lwsac_use(). * * If your next request won't fit in the current chunk, a new chunk is added * to the chain of chunks and the allocaton done from there. If the request * is larger than the chunk size, an oversize chunk is created to satisfy it. * * When you are finished with the allocations, you call lwsac_free() and * free all the *chunks*. So you may have thousands of objects in the chunks, * but they are all destroyed with the chunks without having to deallocate them * one by one pointlessly. */ ///@{ struct lwsac; typedef unsigned char * lwsac_cached_file_t; #define lws_list_ptr_container(P,T,M) ((T *)((char *)(P) - offsetof(T, M))) /* * linked-list helper that's commonly useful to manage lists of things * allocated using lwsac. * * These lists point to their corresponding "next" member in the target, NOT * the original containing struct. To get the containing struct, you must use * lws_list_ptr_container() to convert. * * It's like that because it means we no longer have to have the next pointer * at the start of the struct, and we can have the same struct on multiple * linked-lists with everything held in the struct itself. */ typedef void * lws_list_ptr; /* * optional sorting callback called by lws_list_ptr_insert() to sort the right * things inside the opqaue struct being sorted / inserted on the list. */ typedef int (*lws_list_ptr_sort_func_t)(lws_list_ptr a, lws_list_ptr b); #define lws_list_ptr_advance(_lp) _lp = *((void **)_lp) /* sort may be NULL if you don't care about order */ LWS_VISIBLE LWS_EXTERN void lws_list_ptr_insert(lws_list_ptr *phead, lws_list_ptr *add, lws_list_ptr_sort_func_t sort); /** * lwsac_use - allocate / use some memory from a lwsac * * \param head: pointer to the lwsac list object * \param ensure: the number of bytes we want to use * \param chunk_size: 0, or the size of the chunk to (over)allocate if * what we want won't fit in the current tail chunk. If * 0, the default value of 4000 is used. If ensure is * larger, it is used instead. * * This also serves to init the lwsac if *head is NULL. Basically it does * whatever is necessary to return you a pointer to ensure bytes of memory * reserved for the caller. * * Returns NULL if OOM. */ LWS_VISIBLE LWS_EXTERN void * lwsac_use(struct lwsac **head, size_t ensure, size_t chunk_size); /** * lwsac_use_zero - allocate / use some memory from a lwsac and zero it * * \param head: pointer to the lwsac list object * \param ensure: the number of bytes we want to use * \param chunk_size: 0, or the size of the chunk to (over)allocate if * what we want won't fit in the current tail chunk. If * 0, the default value of 4000 is used. If ensure is * larger, it is used instead. * * This also serves to init the lwsac if *head is NULL. Basically it does * whatever is necessary to return you a pointer to ensure bytes of memory * reserved for the caller. * * \p ensure bytes at the return address are zeroed if the allocation succeeded. * * Returns NULL if OOM. */ LWS_VISIBLE LWS_EXTERN void * lwsac_use_zero(struct lwsac **head, size_t ensure, size_t chunk_size); /** * lwsac_use - allocate / use some memory from a lwsac * * \param head: pointer to the lwsac list object * \param ensure: the number of bytes we want to use, which must be zeroed * \param chunk_size: 0, or the size of the chunk to (over)allocate if * what we want won't fit in the current tail chunk. If * 0, the default value of 4000 is used. If ensure is * larger, it is used instead. * * Same as lwsac_use(), but \p ensure bytes of memory at the return address * are zero'd before returning. * * Returns NULL if OOM. */ LWS_VISIBLE LWS_EXTERN void * lwsac_use_zeroed(struct lwsac **head, size_t ensure, size_t chunk_size); /** * lwsac_free - deallocate all chunks in the lwsac and set head NULL * * \param head: pointer to the lwsac list object * * This deallocates all chunks in the lwsac, then sets *head to NULL. All * lwsac_use() pointers are invalidated in one hit without individual frees. */ LWS_VISIBLE LWS_EXTERN void lwsac_free(struct lwsac **head); /* * Optional helpers useful for where consumers may need to defer destruction * until all consumers are finished with the lwsac */ /** * lwsac_detach() - destroy an lwsac unless somebody else is referencing it * * \param head: pointer to the lwsac list object * * The creator of the lwsac can all this instead of lwsac_free() when it itself * has finished with the lwsac, but other code may be consuming it. * * If there are no other references, the lwsac is destroyed, *head is set to * NULL and that's the end; however if something else has called * lwsac_reference() on the lwsac, it simply returns. When lws_unreference() * is called and no references are left, it will be destroyed then. */ LWS_VISIBLE LWS_EXTERN void lwsac_detach(struct lwsac **head); /** * lwsac_reference() - increase the lwsac reference count * * \param head: pointer to the lwsac list object * * Increment the reference count on the lwsac to defer destruction. */ LWS_VISIBLE LWS_EXTERN void lwsac_reference(struct lwsac *head); /** * lwsac_reference() - increase the lwsac reference count * * \param head: pointer to the lwsac list object * * Decrement the reference count on the lwsac... if it reached 0 on a detached * lwsac then the lwsac is immediately destroyed and *head set to NULL. */ LWS_VISIBLE LWS_EXTERN void lwsac_unreference(struct lwsac **head); /* helpers to keep a file cached in memory */ LWS_VISIBLE LWS_EXTERN void lwsac_use_cached_file_start(lwsac_cached_file_t cache); LWS_VISIBLE LWS_EXTERN void lwsac_use_cached_file_end(lwsac_cached_file_t *cache); LWS_VISIBLE LWS_EXTERN void lwsac_use_cached_file_detach(lwsac_cached_file_t *cache); LWS_VISIBLE LWS_EXTERN int lwsac_cached_file(const char *filepath, lwsac_cached_file_t *cache, size_t *len); /* more advanced helpers */ LWS_VISIBLE LWS_EXTERN size_t lwsac_sizeof(void); LWS_VISIBLE LWS_EXTERN size_t lwsac_get_tail_pos(struct lwsac *lac); LWS_VISIBLE LWS_EXTERN struct lwsac * lwsac_get_next(struct lwsac *lac); LWS_VISIBLE LWS_EXTERN size_t lwsac_align(size_t length); LWS_VISIBLE LWS_EXTERN void lwsac_info(struct lwsac *head); LWS_VISIBLE LWS_EXTERN uint64_t lwsac_total_alloc(struct lwsac *head); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-misc.h000066400000000000000000000710101357643561300225630ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /** \defgroup misc Miscellaneous APIs * ##Miscellaneous APIs * * Various APIs outside of other categories */ ///@{ /** * lws_start_foreach_ll(): linkedlist iterator helper start * * \param type: type of iteration, eg, struct xyz * * \param it: iterator var name to create * \param start: start of list * * This helper creates an iterator and starts a while (it) { * loop. The iterator runs through the linked list starting at start and * ends when it gets a NULL. * The while loop should be terminated using lws_start_foreach_ll(). */ #define lws_start_foreach_ll(type, it, start)\ { \ type it = start; \ while (it) { /** * lws_end_foreach_ll(): linkedlist iterator helper end * * \param it: same iterator var name given when starting * \param nxt: member name in the iterator pointing to next list element * * This helper is the partner for lws_start_foreach_ll() that ends the * while loop. */ #define lws_end_foreach_ll(it, nxt) \ it = it->nxt; \ } \ } /** * lws_start_foreach_ll_safe(): linkedlist iterator helper start safe against delete * * \param type: type of iteration, eg, struct xyz * * \param it: iterator var name to create * \param start: start of list * \param nxt: member name in the iterator pointing to next list element * * This helper creates an iterator and starts a while (it) { * loop. The iterator runs through the linked list starting at start and * ends when it gets a NULL. * The while loop should be terminated using lws_end_foreach_ll_safe(). * Performs storage of next increment for situations where iterator can become invalidated * during iteration. */ #define lws_start_foreach_ll_safe(type, it, start, nxt)\ { \ type it = start; \ while (it) { \ type next_##it = it->nxt; /** * lws_end_foreach_ll_safe(): linkedlist iterator helper end (pre increment storage) * * \param it: same iterator var name given when starting * * This helper is the partner for lws_start_foreach_ll_safe() that ends the * while loop. It uses the precreated next_ variable already stored during * start. */ #define lws_end_foreach_ll_safe(it) \ it = next_##it; \ } \ } /** * lws_start_foreach_llp(): linkedlist pointer iterator helper start * * \param type: type of iteration, eg, struct xyz ** * \param it: iterator var name to create * \param start: start of list * * This helper creates an iterator and starts a while (it) { * loop. The iterator runs through the linked list starting at the * address of start and ends when it gets a NULL. * The while loop should be terminated using lws_start_foreach_llp(). * * This helper variant iterates using a pointer to the previous linked-list * element. That allows you to easily delete list members by rewriting the * previous pointer to the element's next pointer. */ #define lws_start_foreach_llp(type, it, start)\ { \ type it = &(start); \ while (*(it)) { #define lws_start_foreach_llp_safe(type, it, start, nxt)\ { \ type it = &(start); \ type next; \ while (*(it)) { \ next = &((*(it))->nxt); \ /** * lws_end_foreach_llp(): linkedlist pointer iterator helper end * * \param it: same iterator var name given when starting * \param nxt: member name in the iterator pointing to next list element * * This helper is the partner for lws_start_foreach_llp() that ends the * while loop. */ #define lws_end_foreach_llp(it, nxt) \ it = &(*(it))->nxt; \ } \ } #define lws_end_foreach_llp_safe(it) \ it = next; \ } \ } #define lws_ll_fwd_insert(\ ___new_object, /* pointer to new object */ \ ___m_list, /* member for next list object ptr */ \ ___list_head /* list head */ \ ) {\ ___new_object->___m_list = ___list_head; \ ___list_head = ___new_object; \ } #define lws_ll_fwd_remove(\ ___type, /* type of listed object */ \ ___m_list, /* member for next list object ptr */ \ ___target, /* object to remove from list */ \ ___list_head /* list head */ \ ) { \ lws_start_foreach_llp(___type **, ___ppss, ___list_head) { \ if (*___ppss == ___target) { \ *___ppss = ___target->___m_list; \ break; \ } \ } lws_end_foreach_llp(___ppss, ___m_list); \ } /* * doubly linked-list */ #if defined (LWS_WITH_DEPRECATED_LWS_DLL) /* * This is going away in v4.1. You can set the cmake option above to keep it * around temporarily. Migrate your stuff to the more capable and robust * lws_dll2 below */ struct lws_dll { struct lws_dll *prev; struct lws_dll *next; }; /* * these all point to the composed list objects... you have to use the * lws_container_of() helper to recover the start of the containing struct */ #define lws_dll_add_front lws_dll_add_head LWS_VISIBLE LWS_EXTERN void lws_dll_add_head(struct lws_dll *d, struct lws_dll *phead); LWS_VISIBLE LWS_EXTERN void lws_dll_add_tail(struct lws_dll *d, struct lws_dll *phead); LWS_VISIBLE LWS_EXTERN void lws_dll_insert(struct lws_dll *d, struct lws_dll *target, struct lws_dll *phead, int before); static LWS_INLINE struct lws_dll * lws_dll_get_head(struct lws_dll *phead) { return phead->next; } static LWS_INLINE struct lws_dll * lws_dll_get_tail(struct lws_dll *phead) { return phead->prev; } /* * caution, this doesn't track the tail in the head struct. Use * lws_dll_remove_track_tail() instead of this if you want tail tracking. Using * this means you can't use lws_dll_add_tail() amd */ LWS_VISIBLE LWS_EXTERN void lws_dll_remove(struct lws_dll *d) LWS_WARN_DEPRECATED; LWS_VISIBLE LWS_EXTERN void lws_dll_remove_track_tail(struct lws_dll *d, struct lws_dll *phead); /* another way to do lws_start_foreach_dll_safe() on a list via a cb */ LWS_VISIBLE LWS_EXTERN int lws_dll_foreach_safe(struct lws_dll *phead, void *user, int (*cb)(struct lws_dll *d, void *user)); #define lws_dll_is_detached(___dll, __head) \ (!(___dll)->prev && !(___dll)->next && (__head)->prev != (___dll)) #endif /* * lws_dll2_owner / lws_dll2 : more capable version of lws_dll. Differences: * * - there's an explicit lws_dll2_owner struct which holds head, tail and * count of members. * * - list members all hold a pointer to their owner. So user code does not * have to track anything about exactly what lws_dll2_owner list the object * is a member of. * * - you can use lws_dll unless you want the member count or the ability to * not track exactly which list it's on. * * - layout is compatible with lws_dll (but lws_dll apis will not update the * new stuff) */ struct lws_dll2; struct lws_dll2_owner; typedef struct lws_dll2 { struct lws_dll2 *prev; struct lws_dll2 *next; struct lws_dll2_owner *owner; } lws_dll2_t; typedef struct lws_dll2_owner { struct lws_dll2 *tail; struct lws_dll2 *head; uint32_t count; } lws_dll2_owner_t; static LWS_INLINE int lws_dll2_is_detached(const struct lws_dll2 *d) { return !d->owner; } static LWS_INLINE const struct lws_dll2_owner * lws_dll2_owner(const struct lws_dll2 *d) { return d->owner; } static LWS_INLINE struct lws_dll2 * lws_dll2_get_head(struct lws_dll2_owner *owner) { return owner->head; } static LWS_INLINE struct lws_dll2 * lws_dll2_get_tail(struct lws_dll2_owner *owner) { return owner->tail; } LWS_VISIBLE LWS_EXTERN void lws_dll2_add_head(struct lws_dll2 *d, struct lws_dll2_owner *owner); LWS_VISIBLE LWS_EXTERN void lws_dll2_add_tail(struct lws_dll2 *d, struct lws_dll2_owner *owner); LWS_VISIBLE LWS_EXTERN void lws_dll2_remove(struct lws_dll2 *d); LWS_VISIBLE LWS_EXTERN int lws_dll2_foreach_safe(struct lws_dll2_owner *owner, void *user, int (*cb)(struct lws_dll2 *d, void *user)); LWS_VISIBLE LWS_EXTERN void lws_dll2_clear(struct lws_dll2 *d); LWS_VISIBLE LWS_EXTERN void lws_dll2_owner_clear(struct lws_dll2_owner *d); LWS_VISIBLE LWS_EXTERN void lws_dll2_add_before(struct lws_dll2 *d, struct lws_dll2 *after); LWS_VISIBLE LWS_EXTERN void lws_dll2_add_sorted(lws_dll2_t *d, lws_dll2_owner_t *own, int (*compare)(const lws_dll2_t *d, const lws_dll2_t *i)); #if defined(_DEBUG) void lws_dll2_describe(struct lws_dll2_owner *owner, const char *desc); #else #define lws_dll2_describe(x, y) #endif /* * these are safe against the current container object getting deleted, * since the hold his next in a temp and go to that next. ___tmp is * the temp. */ #define lws_start_foreach_dll_safe(___type, ___it, ___tmp, ___start) \ { \ ___type ___it = ___start; \ while (___it) { \ ___type ___tmp = (___it)->next; #define lws_end_foreach_dll_safe(___it, ___tmp) \ ___it = ___tmp; \ } \ } #define lws_start_foreach_dll(___type, ___it, ___start) \ { \ ___type ___it = ___start; \ while (___it) { #define lws_end_foreach_dll(___it) \ ___it = (___it)->next; \ } \ } struct lws_buflist; /** * lws_buflist_append_segment(): add buffer to buflist at head * * \param head: list head * \param buf: buffer to stash * \param len: length of buffer to stash * * Returns -1 on OOM, 1 if this was the first segment on the list, and 0 if * it was a subsequent segment. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_buflist_append_segment(struct lws_buflist **head, const uint8_t *buf, size_t len); /** * lws_buflist_next_segment_len(): number of bytes left in current segment * * \param head: list head * \param buf: if non-NULL, *buf is written with the address of the start of * the remaining data in the segment * * Returns the number of bytes left in the current segment. 0 indicates * that the buflist is empty (there are no segments on the buflist). */ LWS_VISIBLE LWS_EXTERN size_t lws_buflist_next_segment_len(struct lws_buflist **head, uint8_t **buf); /** * lws_buflist_use_segment(): remove len bytes from the current segment * * \param head: list head * \param len: number of bytes to mark as used * * If len is less than the remaining length of the current segment, the position * in the current segment is simply advanced and it returns. * * If len uses up the remaining length of the current segment, then the segment * is deleted and the list head moves to the next segment if any. * * Returns the number of bytes left in the current segment. 0 indicates * that the buflist is empty (there are no segments on the buflist). */ LWS_VISIBLE LWS_EXTERN int lws_buflist_use_segment(struct lws_buflist **head, size_t len); /** * lws_buflist_destroy_all_segments(): free all segments on the list * * \param head: list head * * This frees everything on the list unconditionally. *head is always * NULL after this. */ LWS_VISIBLE LWS_EXTERN void lws_buflist_destroy_all_segments(struct lws_buflist **head); void lws_buflist_describe(struct lws_buflist **head, void *id); /** * lws_ptr_diff(): helper to report distance between pointers as an int * * \param head: the pointer with the larger address * \param tail: the pointer with the smaller address * * This helper gives you an int representing the number of bytes further * forward the first pointer is compared to the second pointer. */ #define lws_ptr_diff(head, tail) \ ((int)((char *)(head) - (char *)(tail))) /** * lws_snprintf(): snprintf that truncates the returned length too * * \param str: destination buffer * \param size: bytes left in destination buffer * \param format: format string * \param ...: args for format * * This lets you correctly truncate buffers by concatenating lengths, if you * reach the limit the reported length doesn't exceed the limit. */ LWS_VISIBLE LWS_EXTERN int lws_snprintf(char *str, size_t size, const char *format, ...) LWS_FORMAT(3); /** * lws_strncpy(): strncpy that guarantees NUL on truncated copy * * \param dest: destination buffer * \param src: source buffer * \param size: bytes left in destination buffer * * This lets you correctly truncate buffers by concatenating lengths, if you * reach the limit the reported length doesn't exceed the limit. */ LWS_VISIBLE LWS_EXTERN char * lws_strncpy(char *dest, const char *src, size_t size); /** * lws_hex_to_byte_array(): convert hex string like 0123456789ab into byte data * * \param h: incoming NUL-terminated hex string * \param dest: array to fill with binary decodes of hex pairs from h * \param max: maximum number of bytes dest can hold, must be at least half * the size of strlen(h) * * This converts hex strings into an array of 8-bit representations, ie the * input "abcd" produces two bytes of value 0xab and 0xcd. * * Returns number of bytes produced into \p dest, or -1 on error. * * Errors include non-hex chars and an odd count of hex chars in the input * string. */ LWS_VISIBLE LWS_EXTERN int lws_hex_to_byte_array(const char *h, uint8_t *dest, int max); /* * lws_timingsafe_bcmp(): constant time memcmp * * \param a: first buffer * \param b: second buffer * \param len: count of bytes to compare * * Return 0 if the two buffers are the same, else nonzero. * * Always compares all of the buffer before returning, so it can't be used as * a timing oracle. */ LWS_VISIBLE LWS_EXTERN int lws_timingsafe_bcmp(const void *a, const void *b, uint32_t len); /** * lws_get_random(): fill a buffer with platform random data * * \param context: the lws context * \param buf: buffer to fill * \param len: how much to fill * * Fills buf with len bytes of random. Returns the number of bytes set, if * not equal to len, then getting the random failed. */ LWS_VISIBLE LWS_EXTERN int lws_get_random(struct lws_context *context, void *buf, int len); /** * lws_daemonize(): make current process run in the background * * \param _lock_path: the filepath to write the lock file * * Spawn lws as a background process, taking care of various things */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_daemonize(const char *_lock_path); /** * lws_get_library_version(): return string describing the version of lws * * On unix, also includes the git describe */ LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT lws_get_library_version(void); /** * lws_wsi_user() - get the user data associated with the connection * \param wsi: lws connection * * Not normally needed since it's passed into the callback */ LWS_VISIBLE LWS_EXTERN void * lws_wsi_user(struct lws *wsi); /** * lws_set_wsi_user() - set the user data associated with the client connection * \param wsi: lws connection * \param user: user data * * By default lws allocates this and it's not legal to externally set it * yourself. However client connections may have it set externally when the * connection is created... if so, this api can be used to modify it at * runtime additionally. */ LWS_VISIBLE LWS_EXTERN void lws_set_wsi_user(struct lws *wsi, void *user); /** * lws_parse_uri: cut up prot:/ads:port/path into pieces * Notice it does so by dropping '\0' into input string * and the leading / on the path is consequently lost * * \param p: incoming uri string.. will get written to * \param prot: result pointer for protocol part (https://) * \param ads: result pointer for address part * \param port: result pointer for port part * \param path: result pointer for path part * * You may also refer to unix socket addresses, using a '+' at the start of * the address. In this case, the address should end with ':', which is * treated as the separator between the address and path (the normal separator * '/' is a valid part of the socket path). Eg, * * http://+/var/run/mysocket:/my/path * * If the first character after the + is '@', it's interpreted by lws client * processing as meaning to use linux abstract namespace sockets, the @ is * replaced with a '\0' before use. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_parse_uri(char *p, const char **prot, const char **ads, int *port, const char **path); /** * lws_cmdline_option(): simple commandline parser * * \param argc: count of argument strings * \param argv: argument strings * \param val: string to find * * Returns NULL if the string \p val is not found in the arguments. * * If it is found, then it returns a pointer to the next character after \p val. * So if \p val is "-d", then for the commandlines "myapp -d15" and * "myapp -d 15", in both cases the return will point to the "15". * * In the case there is no argument, like "myapp -d", the return will * either point to the '\\0' at the end of -d, or to the start of the * next argument, ie, will be non-NULL. */ LWS_VISIBLE LWS_EXTERN const char * lws_cmdline_option(int argc, const char **argv, const char *val); /** * lws_now_secs(): return seconds since 1970-1-1 */ LWS_VISIBLE LWS_EXTERN unsigned long lws_now_secs(void); /** * lws_now_usecs(): return useconds since 1970-1-1 */ LWS_VISIBLE LWS_EXTERN lws_usec_t lws_now_usecs(void); /** * lws_get_context - Allow getting lws_context from a Websocket connection * instance * * With this function, users can access context in the callback function. * Otherwise users may have to declare context as a global variable. * * \param wsi: Websocket connection instance */ LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT lws_get_context(const struct lws *wsi); /** * lws_get_vhost_listen_port - Find out the port number a vhost is listening on * * In the case you passed 0 for the port number at context creation time, you * can discover the port number that was actually chosen for the vhost using * this api. * * \param vhost: Vhost to get listen port from */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_get_vhost_listen_port(struct lws_vhost *vhost); /** * lws_get_count_threads(): how many service threads the context uses * * \param context: the lws context * * By default this is always 1, if you asked for more than lws can handle it * will clip the number of threads. So you can use this to find out how many * threads are actually in use. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_get_count_threads(struct lws_context *context); /** * lws_get_parent() - get parent wsi or NULL * \param wsi: lws connection * * Specialized wsi like cgi stdin/out/err are associated to a parent wsi, * this allows you to get their parent. */ LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT lws_get_parent(const struct lws *wsi); /** * lws_get_child() - get child wsi or NULL * \param wsi: lws connection * * Allows you to find a related wsi from the parent wsi. */ LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT lws_get_child(const struct lws *wsi); /** * lws_get_effective_uid_gid() - find out eventual uid and gid while still root * * \param context: lws context * \param uid: pointer to uid result * \param gid: pointer to gid result * * This helper allows you to find out what the uid and gid for the process will * be set to after the privileges are dropped, beforehand. So while still root, * eg in LWS_CALLBACK_PROTOCOL_INIT, you can arrange things like cache dir * and subdir creation / permissions down /var/cache dynamically. */ LWS_VISIBLE LWS_EXTERN void lws_get_effective_uid_gid(struct lws_context *context, int *uid, int *gid); /** * lws_get_udp() - get wsi's udp struct * * \param wsi: lws connection * * Returns NULL or pointer to the wsi's UDP-specific information */ LWS_VISIBLE LWS_EXTERN const struct lws_udp * LWS_WARN_UNUSED_RESULT lws_get_udp(const struct lws *wsi); LWS_VISIBLE LWS_EXTERN void * lws_get_opaque_parent_data(const struct lws *wsi); LWS_VISIBLE LWS_EXTERN void lws_set_opaque_parent_data(struct lws *wsi, void *data); LWS_VISIBLE LWS_EXTERN void * lws_get_opaque_user_data(const struct lws *wsi); LWS_VISIBLE LWS_EXTERN void lws_set_opaque_user_data(struct lws *wsi, void *data); LWS_VISIBLE LWS_EXTERN int lws_get_child_pending_on_writable(const struct lws *wsi); LWS_VISIBLE LWS_EXTERN void lws_clear_child_pending_on_writable(struct lws *wsi); LWS_VISIBLE LWS_EXTERN int lws_get_close_length(struct lws *wsi); LWS_VISIBLE LWS_EXTERN unsigned char * lws_get_close_payload(struct lws *wsi); /** * lws_get_network_wsi() - Returns wsi that has the tcp connection for this wsi * * \param wsi: wsi you have * * Returns wsi that has the tcp connection (which may be the incoming wsi) * * HTTP/1 connections will always return the incoming wsi * HTTP/2 connections may return a different wsi that has the tcp connection */ LWS_VISIBLE LWS_EXTERN struct lws *lws_get_network_wsi(struct lws *wsi); /** * lws_set_allocator() - custom allocator support * * \param realloc * * Allows you to replace the allocator (and deallocator) used by lws */ LWS_VISIBLE LWS_EXTERN void lws_set_allocator(void *(*realloc)(void *ptr, size_t size, const char *reason)); enum { /* * Flags for enable and disable rxflow with reason bitmap and with * backwards-compatible single bool */ LWS_RXFLOW_REASON_USER_BOOL = (1 << 0), LWS_RXFLOW_REASON_HTTP_RXBUFFER = (1 << 6), LWS_RXFLOW_REASON_H2_PPS_PENDING = (1 << 7), LWS_RXFLOW_REASON_APPLIES = (1 << 14), LWS_RXFLOW_REASON_APPLIES_ENABLE_BIT = (1 << 13), LWS_RXFLOW_REASON_APPLIES_ENABLE = LWS_RXFLOW_REASON_APPLIES | LWS_RXFLOW_REASON_APPLIES_ENABLE_BIT, LWS_RXFLOW_REASON_APPLIES_DISABLE = LWS_RXFLOW_REASON_APPLIES, LWS_RXFLOW_REASON_FLAG_PROCESS_NOW = (1 << 12), }; /** * lws_rx_flow_control() - Enable and disable socket servicing for * received packets. * * If the output side of a server process becomes choked, this allows flow * control for the input side. * * \param wsi: Websocket connection instance to get callback for * \param enable: 0 = disable read servicing for this connection, 1 = enable * * If you need more than one additive reason for rxflow control, you can give * iLWS_RXFLOW_REASON_APPLIES_ENABLE or _DISABLE together with one or more of * b5..b0 set to idicate which bits to enable or disable. If any bits are * enabled, rx on the connection is suppressed. * * LWS_RXFLOW_REASON_FLAG_PROCESS_NOW flag may also be given to force any change * in rxflowbstatus to benapplied immediately, this should be used when you are * changing a wsi flow control state from outside a callback on that wsi. */ LWS_VISIBLE LWS_EXTERN int lws_rx_flow_control(struct lws *wsi, int enable); /** * lws_rx_flow_allow_all_protocol() - Allow all connections with this protocol to receive * * When the user server code realizes it can accept more input, it can * call this to have the RX flow restriction removed from all connections using * the given protocol. * \param context: lws_context * \param protocol: all connections using this protocol will be allowed to receive */ LWS_VISIBLE LWS_EXTERN void lws_rx_flow_allow_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol); /** * lws_remaining_packet_payload() - Bytes to come before "overall" * rx fragment is complete * \param wsi: Websocket instance (available from user callback) * * This tracks how many bytes are left in the current ws fragment, according * to the ws length given in the fragment header. * * If the message was in a single fragment, and there is no compression, this * is the same as "how much data is left to read for this message". * * However, if the message is being sent in multiple fragments, this will * reflect the unread amount of the current **fragment**, not the message. With * ws, it is legal to not know the length of the message before it completes. * * Additionally if the message is sent via the negotiated permessage-deflate * extension, this number only tells the amount of **compressed** data left to * be read, since that is the only information available at the ws layer. */ LWS_VISIBLE LWS_EXTERN size_t lws_remaining_packet_payload(struct lws *wsi); #if defined(LWS_WITH_DIR) typedef enum { LDOT_UNKNOWN, LDOT_FILE, LDOT_DIR, LDOT_LINK, LDOT_FIFO, LDOTT_SOCKET, LDOT_CHAR, LDOT_BLOCK } lws_dir_obj_type_t; struct lws_dir_entry { const char *name; lws_dir_obj_type_t type; }; typedef int lws_dir_callback_function(const char *dirpath, void *user, struct lws_dir_entry *lde); /** * lws_dir() - get a callback for everything in a directory * * \param dirpath: the directory to scan * \param user: pointer to give to callback * \param cb: callback to receive information on each file or dir * * Calls \p cb (with \p user) for every object in dirpath. * * This wraps whether it's using POSIX apis, or libuv (as needed for windows, * since it refuses to support POSIX apis for this). */ LWS_VISIBLE LWS_EXTERN int lws_dir(const char *dirpath, void *user, lws_dir_callback_function cb); #endif /** * lws_get_allocated_heap() - if the platform supports it, returns amount of * heap allocated by lws itself * * On glibc currently, this reports the total amount of current logical heap * allocation, found by tracking the amount allocated by lws_malloc() and * friends and accounting for freed allocations via lws_free(). * * This is useful for confirming where processwide heap allocations actually * come from... this number represents all lws internal allocations, for * fd tables, wsi allocations, ah, etc combined. It doesn't include allocations * from user code, since lws_malloc() etc are not exported from the library. * * On other platforms, it always returns 0. */ size_t lws_get_allocated_heap(void); /** * lws_is_ssl() - Find out if connection is using SSL * \param wsi: websocket connection to check * * Returns 0 if the connection is not using SSL, 1 if using SSL and * using verified cert, and 2 if using SSL but the cert was not * checked (appears for client wsi told to skip check on connection) */ LWS_VISIBLE LWS_EXTERN int lws_is_ssl(struct lws *wsi); /** * lws_is_cgi() - find out if this wsi is running a cgi process * * \param wsi: lws connection */ LWS_VISIBLE LWS_EXTERN int lws_is_cgi(struct lws *wsi); /** * lws_open() - platform-specific wrapper for open that prepares the fd * * \param __file: the filepath to open * \param __oflag: option flags * * This is a wrapper around platform open() that sets options on the fd * according to lws policy. Currently that is FD_CLOEXEC to stop the opened * fd being available to any child process forked by user code. */ LWS_VISIBLE LWS_EXTERN int lws_open(const char *__file, int __oflag, ...); struct lws_wifi_scan { /* generic wlan scan item */ struct lws_wifi_scan *next; char ssid[32]; int32_t rssi; /* divide by .count to get db */ uint8_t bssid[6]; uint8_t count; uint8_t channel; uint8_t authmode; }; #if defined(LWS_WITH_TLS) && !defined(LWS_WITH_MBEDTLS) /** * lws_get_ssl() - Return wsi's SSL context structure * \param wsi: websocket connection * * Returns pointer to the SSL library's context structure */ LWS_VISIBLE LWS_EXTERN SSL* lws_get_ssl(struct lws *wsi); #endif LWS_VISIBLE LWS_EXTERN void lws_explicit_bzero(void *p, size_t len); typedef struct lws_humanize_unit { const char *name; /* array ends with NULL name */ uint64_t factor; } lws_humanize_unit_t; LWS_VISIBLE LWS_EXTERN const lws_humanize_unit_t humanize_schema_si[]; LWS_VISIBLE LWS_EXTERN const lws_humanize_unit_t humanize_schema_si_bytes[]; LWS_VISIBLE LWS_EXTERN const lws_humanize_unit_t humanize_schema_us[]; /** * lws_humanize() - Convert possibly large number to himan-readable uints * * \param buf: result string buffer * \param len: remaining length in \p buf * \param value: the uint64_t value to represent * \param schema: and array of scaling factors and units * * This produces a concise string representation of \p value, referening the * schema \p schema of scaling factors and units to find the smallest way to * render it. * * Three schema are exported from lws for general use, humanize_schema_si, which * represents as, eg, " 22.130Gi" or " 128 "; humanize_schema_si_bytes * which is the same but shows, eg, " 22.130GiB", and humanize_schema_us, * which represents a count of us as a human-readable time like " 14.350min", * or " 1.500d". * * You can produce your own schema. */ LWS_VISIBLE LWS_EXTERN int lws_humanize(char *buf, int len, uint64_t value, const lws_humanize_unit_t *schema); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-network-helper.h000066400000000000000000000072521357643561300246050ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /** \defgroup net Network related helper APIs * ##Network related helper APIs * * These wrap miscellaneous useful network-related functions */ ///@{ /** * lws_canonical_hostname() - returns this host's hostname * * This is typically used by client code to fill in the host parameter * when making a client connection. You can only call it after the context * has been created. * * \param context: Websocket context */ LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT lws_canonical_hostname(struct lws_context *context); /** * lws_get_peer_addresses() - Get client address information * \param wsi: Local struct lws associated with * \param fd: Connection socket descriptor * \param name: Buffer to take client address name * \param name_len: Length of client address name buffer * \param rip: Buffer to take client address IP dotted quad * \param rip_len: Length of client address IP buffer * * This function fills in name and rip with the name and IP of * the client connected with socket descriptor fd. Names may be * truncated if there is not enough room. If either cannot be * determined, they will be returned as valid zero-length strings. */ LWS_VISIBLE LWS_EXTERN void lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name, int name_len, char *rip, int rip_len); /** * lws_get_peer_simple() - Get client address information without RDNS * * \param wsi: Local struct lws associated with * \param name: Buffer to take client address name * \param namelen: Length of client address name buffer * * This provides a 123.123.123.123 type IP address in name from the * peer that has connected to wsi */ LWS_VISIBLE LWS_EXTERN const char * lws_get_peer_simple(struct lws *wsi, char *name, int namelen); #define LWS_ITOSA_USABLE 0 #define LWS_ITOSA_NOT_EXIST -1 #define LWS_ITOSA_NOT_USABLE -2 #define LWS_ITOSA_BUSY -3 /* only returned by lws_socket_bind() on EADDRINUSE */ #if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) /** * lws_interface_to_sa() - Convert interface name or IP to sockaddr struct * * \param ipv6: Allow IPV6 addresses * \param ifname: Interface name or IP * \param addr: struct sockaddr_in * to be written * \param addrlen: Length of addr * * This converts a textual network interface name to a sockaddr usable by * other network functions. * * If the network interface doesn't exist, it will return LWS_ITOSA_NOT_EXIST. * * If the network interface is not usable, eg ethernet cable is removed, it * may logically exist but not have any IP address. As such it will return * LWS_ITOSA_NOT_USABLE. * * If the network interface exists and is usable, it will return * LWS_ITOSA_USABLE. */ LWS_VISIBLE LWS_EXTERN int lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen); #endif ///@} libwebsockets-3.2.1/include/libwebsockets/lws-optee.h000066400000000000000000000044061357643561300227510ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * SPDX-License-Identifier: LGPL-2.1-only * * Copyright (C) 2019 Akira Tsukamoto * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ #ifndef __LWS_OPTEE_H #define __LWS_OPTEE_H /* 128-bit IP6 address */ struct in6_addr { union { uint8_t u6_addr8[16]; uint16_t u6_addr16[8]; uint32_t u6_addr32[4]; }; }; #define _SS_MAXSIZE 128U #define _SS_ALIGNSIZE (sizeof(int64_t)) #define _SS_PAD1SIZE (_SS_ALIGNSIZE - \ sizeof(sa_family_t)) #define _SS_PAD2SIZE (_SS_MAXSIZE - \ sizeof(sa_family_t) - _SS_PAD1SIZE - _SS_ALIGNSIZE) struct sockaddr_storage { sa_family_t ss_family; /* address family */ char __ss_pad1[_SS_PAD1SIZE]; int64_t __ss_align; /* force desired struct alignment */ char __ss_pad2[_SS_PAD2SIZE]; }; #define __SOCK_SIZE__ 16 /* sizeof(struct sockaddr) */ struct sockaddr { sa_family_t sa_family; /* address family */ uint8_t sa_data[__SOCK_SIZE__ /* address value */ - sizeof(sa_family_t)]; }; /* 16 bytes */ struct sockaddr_in { sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; uint8_t sin_zero[__SOCK_SIZE__ /* padding until 16 bytes */ - sizeof(sa_family_t) - sizeof(in_port_t) - sizeof(struct in_addr)]; }; struct sockaddr_in6 { sa_family_t sin6_family; /* AF_INET6 */ in_port_t sin6_port; /* Transport layer port # */ uint32_t sin6_flowinfo; /* IP6 flow information */ struct in6_addr sin6_addr; /* IP6 address */ uint32_t sin6_scope_id; /* scope zone index */ }; #endif /* __LWS_OPTEE_H */ libwebsockets-3.2.1/include/libwebsockets/lws-plugin-generic-sessions.h000066400000000000000000000053241357643561300264110ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup generic-sessions plugin: generic-sessions * \ingroup Protocols-and-Plugins * * ##Plugin Generic-sessions related * * generic-sessions plugin provides a reusable, generic session and login / * register / forgot password framework including email verification. */ ///@{ #define LWSGS_EMAIL_CONTENT_SIZE 16384 /**< Maximum size of email we might send */ /* SHA-1 binary and hexified versions */ /** typedef struct lwsgw_hash_bin */ typedef struct { unsigned char bin[32]; /**< binary representation of hash */} lwsgw_hash_bin; /** typedef struct lwsgw_hash */ typedef struct { char id[65]; /**< ascii hex representation of hash */ } lwsgw_hash; /** enum lwsgs_auth_bits */ enum lwsgs_auth_bits { LWSGS_AUTH_LOGGED_IN = 1, /**< user is logged in as somebody */ LWSGS_AUTH_ADMIN = 2, /**< logged in as the admin user */ LWSGS_AUTH_VERIFIED = 4, /**< user has verified his email */ LWSGS_AUTH_FORGOT_FLOW = 8, /**< just completed "forgot password" */ }; /** struct lws_session_info - information about user session status */ struct lws_session_info { char username[32]; /**< username logged in as, or empty string */ char email[100]; /**< email address associated with login, or empty string */ char ip[72]; /**< ip address session was started from */ unsigned int mask; /**< access rights mask associated with session * see enum lwsgs_auth_bits */ char session[42]; /**< session id string, usable as opaque uid when not logged in */ }; /** enum lws_gs_event */ enum lws_gs_event { LWSGSE_CREATED, /**< a new user was created */ LWSGSE_DELETED /**< an existing user was deleted */ }; /** struct lws_gs_event_args */ struct lws_gs_event_args { enum lws_gs_event event; /**< which event happened */ const char *username; /**< which username the event happened to */ const char *email; /**< the email address of that user */ }; ///@} libwebsockets-3.2.1/include/libwebsockets/lws-protocols-plugins.h000066400000000000000000000202701357643561300253350ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup Protocols-and-Plugins Protocols and Plugins * \ingroup lwsapi * * ##Protocol and protocol plugin -related apis * * Protocols bind ws protocol names to a custom callback specific to that * protocol implementaion. * * A list of protocols can be passed in at context creation time, but it is * also legal to leave that NULL and add the protocols and their callback code * using plugins. * * Plugins are much preferable compared to cut and pasting code into an * application each time, since they can be used standalone. */ ///@{ /** struct lws_protocols - List of protocols and handlers client or server * supports. */ struct lws_protocols { const char *name; /**< Protocol name that must match the one given in the client * Javascript new WebSocket(url, 'protocol') name. */ lws_callback_function *callback; /**< The service callback used for this protocol. It allows the * service action for an entire protocol to be encapsulated in * the protocol-specific callback */ size_t per_session_data_size; /**< Each new connection using this protocol gets * this much memory allocated on connection establishment and * freed on connection takedown. A pointer to this per-connection * allocation is passed into the callback in the 'user' parameter */ size_t rx_buffer_size; /**< lws allocates this much space for rx data and informs callback * when something came. Due to rx flow control, the callback may not * be able to consume it all without having to return to the event * loop. That is supported in lws. * * If .tx_packet_size is 0, this also controls how much may be sent at * once for backwards compatibility. */ unsigned int id; /**< ignored by lws, but useful to contain user information bound * to the selected protocol. For example if this protocol was * called "myprotocol-v2", you might set id to 2, and the user * code that acts differently according to the version can do so by * switch (wsi->protocol->id), user code might use some bits as * capability flags based on selected protocol version, etc. */ void *user; /**< ignored by lws, but user code can pass a pointer here it can later access from the protocol callback */ size_t tx_packet_size; /**< 0 indicates restrict send() size to .rx_buffer_size for backwards- * compatibility. * If greater than zero, a single send() is restricted to this amount * and any remainder is buffered by lws and sent afterwards also in * these size chunks. Since that is expensive, it's preferable * to restrict one fragment you are trying to send to match this * size. */ /* Add new things just above here ---^ * This is part of the ABI, don't needlessly break compatibility */ }; /** * lws_vhost_name_to_protocol() - get vhost's protocol object from its name * * \param vh: vhost to search * \param name: protocol name * * Returns NULL or a pointer to the vhost's protocol of the requested name */ LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name); /** * lws_get_protocol() - Returns a protocol pointer from a websocket * connection. * \param wsi: pointer to struct websocket you want to know the protocol of * * * Some apis can act on all live connections of a given protocol, * this is how you can get a pointer to the active protocol if needed. */ LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_get_protocol(struct lws *wsi); /** lws_protocol_get() - deprecated: use lws_get_protocol */ LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED; /** * lws_protocol_vh_priv_zalloc() - Allocate and zero down a protocol's per-vhost * storage * \param vhost: vhost the instance is related to * \param prot: protocol the instance is related to * \param size: bytes to allocate * * Protocols often find it useful to allocate a per-vhost struct, this is a * helper to be called in the per-vhost init LWS_CALLBACK_PROTOCOL_INIT */ LWS_VISIBLE LWS_EXTERN void * lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot, int size); /** * lws_protocol_vh_priv_get() - retreive a protocol's per-vhost storage * * \param vhost: vhost the instance is related to * \param prot: protocol the instance is related to * * Recover a pointer to the allocated per-vhost storage for the protocol created * by lws_protocol_vh_priv_zalloc() earlier */ LWS_VISIBLE LWS_EXTERN void * lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot); /** * lws_adjust_protocol_psds - change a vhost protocol's per session data size * * \param wsi: a connection with the protocol to change * \param new_size: the new size of the per session data size for the protocol * * Returns user_space for the wsi, after allocating * * This should not be used except to initalize a vhost protocol's per session * data size one time, before any connections are accepted. * * Sometimes the protocol wraps another protocol and needs to discover and set * its per session data size at runtime. */ LWS_VISIBLE LWS_EXTERN void * lws_adjust_protocol_psds(struct lws *wsi, size_t new_size); /** * lws_finalize_startup() - drop initial process privileges * * \param context: lws context * * This is called after the end of the vhost protocol initializations, but * you may choose to call it earlier */ LWS_VISIBLE LWS_EXTERN int lws_finalize_startup(struct lws_context *context); /** * lws_pvo_search() - helper to find a named pvo in a linked-list * * \param pvo: the first pvo in the linked-list * \param name: the name of the pvo to return if found * * Returns NULL, or a pointer to the name pvo in the linked-list */ LWS_VISIBLE LWS_EXTERN const struct lws_protocol_vhost_options * lws_pvo_search(const struct lws_protocol_vhost_options *pvo, const char *name); /** * lws_pvo_get_str() - retreive a string pvo value * * \param in: the first pvo in the linked-list * \param name: the name of the pvo to return if found * \param result: pointer to a const char * to get the result if any * * Returns 0 if found and *result set, or nonzero if not found */ LWS_VISIBLE LWS_EXTERN int lws_pvo_get_str(void *in, const char *name, const char **result); LWS_VISIBLE LWS_EXTERN int lws_protocol_init(struct lws_context *context); #ifdef LWS_WITH_PLUGINS /* PLUGINS implies LIBUV */ #define LWS_PLUGIN_API_MAGIC 180 /** struct lws_plugin_capability - how a plugin introduces itself to lws */ struct lws_plugin_capability { unsigned int api_magic; /**< caller fills this in, plugin fills rest */ const struct lws_protocols *protocols; /**< array of supported protocols provided by plugin */ int count_protocols; /**< how many protocols */ const struct lws_extension *extensions; /**< array of extensions provided by plugin */ int count_extensions; /**< how many extensions */ }; typedef int (*lws_plugin_init_func)(struct lws_context *, struct lws_plugin_capability *); typedef int (*lws_plugin_destroy_func)(struct lws_context *); /** struct lws_plugin */ struct lws_plugin { struct lws_plugin *list; /**< linked list */ #if (UV_VERSION_MAJOR > 0) uv_lib_t lib; /**< shared library pointer */ #endif void *l; /**< so we can compile on ancient libuv */ char name[64]; /**< name of the plugin */ struct lws_plugin_capability caps; /**< plugin capabilities */ }; #endif ///@} libwebsockets-3.2.1/include/libwebsockets/lws-purify.h000066400000000000000000000050451357643561300231530ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup pur Sanitize / purify SQL and JSON helpers * * ##Sanitize / purify SQL and JSON helpers * * APIs for escaping untrusted JSON and SQL safely before use */ //@{ /** * lws_sql_purify() - like strncpy but with escaping for sql quotes * * \param escaped: output buffer * \param string: input buffer ('/0' terminated) * \param len: output buffer max length * * Because escaping expands the output string, it's not * possible to do it in-place, ie, with escaped == string */ LWS_VISIBLE LWS_EXTERN const char * lws_sql_purify(char *escaped, const char *string, int len); /** * lws_json_purify() - like strncpy but with escaping for json chars * * \param escaped: output buffer * \param string: input buffer ('/0' terminated) * \param len: output buffer max length * * Because escaping expands the output string, it's not * possible to do it in-place, ie, with escaped == string */ LWS_VISIBLE LWS_EXTERN const char * lws_json_purify(char *escaped, const char *string, int len); /** * lws_filename_purify_inplace() - replace scary filename chars with underscore * * \param filename: filename to be purified * * Replace scary characters in the filename (it should not be a path) * with underscore, so it's safe to use. */ LWS_VISIBLE LWS_EXTERN void lws_filename_purify_inplace(char *filename); LWS_VISIBLE LWS_EXTERN int lws_plat_write_cert(struct lws_vhost *vhost, int is_key, int fd, void *buf, int len); LWS_VISIBLE LWS_EXTERN int lws_plat_write_file(const char *filename, void *buf, int len); LWS_VISIBLE LWS_EXTERN int lws_plat_read_file(const char *filename, void *buf, int len); LWS_VISIBLE LWS_EXTERN int lws_plat_recommended_rsa_bits(void); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-retry.h000066400000000000000000000043431357643561300230020ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /* * Specifies backoff ranges using a pair of uint32_t in ms for the min, max. * * The actual backoff timing is picked randomly within the range. */ typedef struct lws_retry_range { uint32_t min_ms; uint32_t max_ms; } lws_retry_range_t; typedef struct lws_retry_bo { const lws_retry_range_t *retry_ms_table; /* backoff range pair */ uint16_t retry_ms_table_count; /* ranges in table */ uint16_t conceal_count; /* max retries to conceal */ } lws_retry_bo_t; /** * lws_retry_get_delay_ms() - get next delay from backoff table * * \param lws_context: the lws context (used for getting random) * \param retry: the retry backoff table we are using * \param ctry: pointer to the try counter * \param conceal: pointer to flag set to nonzero if the try should be concealed * in terms of creating an error * * Increments *\p try and retruns the number of ms that should elapse before the * next connection retry, according to the backoff table \p retry. *\p conceal is * set if the number of tries is less than the backoff table conceal_count, or * is zero if it exceeded it. This lets you conceal a certain number of retries * before alerting the caller there is a problem. */ LWS_VISIBLE LWS_EXTERN unsigned int lws_retry_get_delay_ms(struct lws_context *context, const lws_retry_bo_t *retry, uint16_t *ctry, char *conceal); libwebsockets-3.2.1/include/libwebsockets/lws-ring.h000066400000000000000000000264101357643561300225730ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /** \defgroup lws_ring LWS Ringbuffer APIs * ##lws_ring: generic ringbuffer struct * * Provides an abstract ringbuffer api supporting one head and one or an * unlimited number of tails. * * All of the members are opaque and manipulated by lws_ring_...() apis. * * The lws_ring and its buffer is allocated at runtime on the heap, using * * - lws_ring_create() * - lws_ring_destroy() * * It may contain any type, the size of the "element" stored in the ring * buffer and the number of elements is given at creation time. * * When you create the ringbuffer, you can optionally provide an element * destroy callback that frees any allocations inside the element. This is then * automatically called for elements with no tail behind them, ie, elements * which don't have any pending consumer are auto-freed. * * Whole elements may be inserted into the ringbuffer and removed from it, using * * - lws_ring_insert() * - lws_ring_consume() * * You can find out how many whole elements are free or waiting using * * - lws_ring_get_count_free_elements() * - lws_ring_get_count_waiting_elements() * * In addition there are special purpose optional byte-centric apis * * - lws_ring_next_linear_insert_range() * - lws_ring_bump_head() * * which let you, eg, read() directly into the ringbuffer without needing * an intermediate bounce buffer. * * The accessors understand that the ring wraps, and optimizes insertion and * consumption into one or two memcpy()s depending on if the head or tail * wraps. * * lws_ring only supports a single head, but optionally multiple tails with * an API to inform it when the "oldest" tail has moved on. You can give * NULL where-ever an api asks for a tail pointer, and it will use an internal * single tail pointer for convenience. * * The "oldest tail", which is the only tail if you give it NULL instead of * some other tail, is used to track which elements in the ringbuffer are * still unread by anyone. * * - lws_ring_update_oldest_tail() */ ///@{ struct lws_ring; /** * lws_ring_create(): create a new ringbuffer * * \param element_len: the size in bytes of one element in the ringbuffer * \param count: the number of elements the ringbuffer can contain * \param destroy_element: NULL, or callback to be called for each element * that is removed from the ringbuffer due to the * oldest tail moving beyond it * * Creates the ringbuffer and allocates the storage. Returns the new * lws_ring *, or NULL if the allocation failed. * * If non-NULL, destroy_element will get called back for every element that is * retired from the ringbuffer after the oldest tail has gone past it, and for * any element still left in the ringbuffer when it is destroyed. It replaces * all other element destruction code in your user code. */ LWS_VISIBLE LWS_EXTERN struct lws_ring * lws_ring_create(size_t element_len, size_t count, void (*destroy_element)(void *element)); /** * lws_ring_destroy(): destroy a previously created ringbuffer * * \param ring: the struct lws_ring to destroy * * Destroys the ringbuffer allocation and the struct lws_ring itself. */ LWS_VISIBLE LWS_EXTERN void lws_ring_destroy(struct lws_ring *ring); /** * lws_ring_get_count_free_elements(): return how many elements can fit * in the free space * * \param ring: the struct lws_ring to report on * * Returns how much room is left in the ringbuffer for whole element insertion. */ LWS_VISIBLE LWS_EXTERN size_t lws_ring_get_count_free_elements(struct lws_ring *ring); /** * lws_ring_get_count_waiting_elements(): return how many elements can be consumed * * \param ring: the struct lws_ring to report on * \param tail: a pointer to the tail struct to use, or NULL for single tail * * Returns how many elements are waiting to be consumed from the perspective * of the tail pointer given. */ LWS_VISIBLE LWS_EXTERN size_t lws_ring_get_count_waiting_elements(struct lws_ring *ring, uint32_t *tail); /** * lws_ring_insert(): attempt to insert up to max_count elements from src * * \param ring: the struct lws_ring to report on * \param src: the array of elements to be inserted * \param max_count: the number of available elements at src * * Attempts to insert as many of the elements at src as possible, up to the * maximum max_count. Returns the number of elements actually inserted. */ LWS_VISIBLE LWS_EXTERN size_t lws_ring_insert(struct lws_ring *ring, const void *src, size_t max_count); /** * lws_ring_consume(): attempt to copy out and remove up to max_count elements * to src * * \param ring: the struct lws_ring to report on * \param tail: a pointer to the tail struct to use, or NULL for single tail * \param dest: the array of elements to be inserted. or NULL for no copy * \param max_count: the number of available elements at src * * Attempts to copy out as many waiting elements as possible into dest, from * the perspective of the given tail, up to max_count. If dest is NULL, the * copying out is not done but the elements are logically consumed as usual. * NULL dest is useful in combination with lws_ring_get_element(), where you * can use the element direct from the ringbuffer and then call this with NULL * dest to logically consume it. * * Increments the tail position according to how many elements could be * consumed. * * Returns the number of elements consumed. */ LWS_VISIBLE LWS_EXTERN size_t lws_ring_consume(struct lws_ring *ring, uint32_t *tail, void *dest, size_t max_count); /** * lws_ring_get_element(): get a pointer to the next waiting element for tail * * \param ring: the struct lws_ring to report on * \param tail: a pointer to the tail struct to use, or NULL for single tail * * Points to the next element that tail would consume, directly in the * ringbuffer. This lets you write() or otherwise use the element without * having to copy it out somewhere first. * * After calling this, you must call lws_ring_consume(ring, &tail, NULL, 1) * which will logically consume the element you used up and increment your * tail (tail may also be NULL there if you use a single tail). * * Returns NULL if no waiting element, or a const void * pointing to it. */ LWS_VISIBLE LWS_EXTERN const void * lws_ring_get_element(struct lws_ring *ring, uint32_t *tail); /** * lws_ring_update_oldest_tail(): free up elements older than tail for reuse * * \param ring: the struct lws_ring to report on * \param tail: a pointer to the tail struct to use, or NULL for single tail * * If you are using multiple tails, you must use this API to inform the * lws_ring when none of the tails still need elements in the fifo any more, * by updating it when the "oldest" tail has moved on. */ LWS_VISIBLE LWS_EXTERN void lws_ring_update_oldest_tail(struct lws_ring *ring, uint32_t tail); /** * lws_ring_get_oldest_tail(): get current oldest available data index * * \param ring: the struct lws_ring to report on * * If you are initializing a new ringbuffer consumer, you can set its tail to * this to start it from the oldest ringbuffer entry still available. */ LWS_VISIBLE LWS_EXTERN uint32_t lws_ring_get_oldest_tail(struct lws_ring *ring); /** * lws_ring_next_linear_insert_range(): used to write directly into the ring * * \param ring: the struct lws_ring to report on * \param start: pointer to a void * set to the start of the next ringbuffer area * \param bytes: pointer to a size_t set to the max length you may use from *start * * This provides a low-level, bytewise access directly into the ringbuffer * allowing direct insertion of data without having to use a bounce buffer. * * The api reports the position and length of the next linear range that can * be written in the ringbuffer, ie, up to the point it would wrap, and sets * *start and *bytes accordingly. You can then, eg, directly read() into * *start for up to *bytes, and use lws_ring_bump_head() to update the lws_ring * with what you have done. * * Returns nonzero if no insertion is currently possible. */ LWS_VISIBLE LWS_EXTERN int lws_ring_next_linear_insert_range(struct lws_ring *ring, void **start, size_t *bytes); /** * lws_ring_bump_head(): used to write directly into the ring * * \param ring: the struct lws_ring to operate on * \param bytes: the number of bytes you inserted at the current head */ LWS_VISIBLE LWS_EXTERN void lws_ring_bump_head(struct lws_ring *ring, size_t bytes); LWS_VISIBLE LWS_EXTERN void lws_ring_dump(struct lws_ring *ring, uint32_t *tail); /* * This is a helper that combines the common pattern of needing to consume * some ringbuffer elements, move the consumer tail on, and check if that * has moved any ringbuffer elements out of scope, because it was the last * consumer that had not already consumed them. * * Elements that go out of scope because the oldest tail is now after them * get garbage-collected by calling the destroy_element callback on them * defined when the ringbuffer was created. */ #define lws_ring_consume_and_update_oldest_tail(\ ___ring, /* the lws_ring object */ \ ___type, /* type of objects with tails */ \ ___ptail, /* ptr to tail of obj with tail doing consuming */ \ ___count, /* count of payload objects being consumed */ \ ___list_head, /* head of list of objects with tails */ \ ___mtail, /* member name of tail in ___type */ \ ___mlist /* member name of next list member ptr in ___type */ \ ) { \ int ___n, ___m; \ \ ___n = lws_ring_get_oldest_tail(___ring) == *(___ptail); \ lws_ring_consume(___ring, ___ptail, NULL, ___count); \ if (___n) { \ uint32_t ___oldest; \ ___n = 0; \ ___oldest = *(___ptail); \ lws_start_foreach_llp(___type **, ___ppss, ___list_head) { \ ___m = lws_ring_get_count_waiting_elements( \ ___ring, &(*___ppss)->tail); \ if (___m >= ___n) { \ ___n = ___m; \ ___oldest = (*___ppss)->tail; \ } \ } lws_end_foreach_llp(___ppss, ___mlist); \ \ lws_ring_update_oldest_tail(___ring, ___oldest); \ } \ } /* * This does the same as the lws_ring_consume_and_update_oldest_tail() * helper, but for the simpler case there is only one consumer, so one * tail, and that tail is always the oldest tail. */ #define lws_ring_consume_single_tail(\ ___ring, /* the lws_ring object */ \ ___ptail, /* ptr to tail of obj with tail doing consuming */ \ ___count /* count of payload objects being consumed */ \ ) { \ lws_ring_consume(___ring, ___ptail, NULL, ___count); \ lws_ring_update_oldest_tail(___ring, *(___ptail)); \ } ///@} libwebsockets-3.2.1/include/libwebsockets/lws-sequencer.h000066400000000000000000000210441357643561300236240ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h * * lws_sequencer is intended to help implement sequences that: * * - outlive a single connection lifetime, * - are not associated with a particular protocol, * - are not associated with a particular vhost, * - must receive and issue events inside the event loop * * lws_sequencer-s are bound to a pt (per-thread) which for the default case of * one service thread is the same as binding to an lws_context. */ /* * retry backoff table... retry n happens after .retry_ms_table[n] ms, with * the last entry used if n is greater than the number of entries. * * The first .conceal_count retries are concealed, but after that the failures * are reported. */ typedef enum { LWSSEQ_CREATED, /* sequencer created */ LWSSEQ_DESTROYED, /* sequencer destroyed */ LWSSEQ_TIMED_OUT, /* sequencer timeout */ LWSSEQ_HEARTBEAT, /* 1Hz callback */ LWSSEQ_WSI_CONNECTED, /* wsi we bound to us has connected */ LWSSEQ_WSI_CONN_FAIL, /* wsi we bound to us has failed to connect */ LWSSEQ_WSI_CONN_CLOSE, /* wsi we bound to us has closed */ LWSSEQ_USER_BASE = 100 /* define your events from here */ } lws_seq_events_t; typedef enum lws_seq_cb_return { LWSSEQ_RET_CONTINUE, LWSSEQ_RET_DESTROY } lws_seq_cb_return_t; /* * handler for this sequencer. Return 0 if OK else nonzero to destroy the * sequencer. LWSSEQ_DESTROYED will be called back to the handler so it can * close / destroy any private assets associated with the sequence. * * The callback may return either LWSSEQ_RET_CONTINUE for the sequencer to * resume or LWSSEQ_RET_DESTROY to indicate the sequence is finished. * * Event indexes consist of some generic ones but mainly user-defined ones * starting from LWSSEQ_USER_BASE. */ typedef lws_seq_cb_return_t (*lws_seq_event_cb)(struct lws_sequencer *seq, void *user, int event, void *data, void *aux); typedef struct lws_seq_info { struct lws_context *context; /* lws_context for seq */ int tsi; /* thread service idx */ size_t user_size; /* size of user alloc */ void **puser; /* place ptr to user */ lws_seq_event_cb cb; /* seq callback */ const char *name; /* seq name */ const lws_retry_bo_t *retry; /* retry policy */ } lws_seq_info_t; /** * lws_seq_create() - create and bind sequencer to a pt * * \param info: information about sequencer to create * * This binds an abstract sequencer to a per-thread (by default, the single * event loop of an lws_context). After the event loop starts, the sequencer * will receive an LWSSEQ_CREATED event on its callback from the event loop * context, where it can begin its sequence flow. * * Lws itself will only call the callback subsequently with LWSSEQ_DESTROYED * when the sequencer is being destroyed. * * pt locking is used to protect the related data structures. */ LWS_VISIBLE LWS_EXTERN lws_seq_t * lws_seq_create(lws_seq_info_t *info); /** * lws_seq_destroy() - destroy the sequencer * * \param seq: pointer to the the opaque sequencer pointer returned by * lws_seq_create() * * This proceeds to destroy the sequencer, calling LWSSEQ_DESTROYED and then * freeing the sequencer object itself. The pointed-to seq pointer will be * set to NULL. */ LWS_VISIBLE LWS_EXTERN void lws_seq_destroy(lws_seq_t **seq); /** * lws_seq_queue_event() - queue an event on the given sequencer * * \param seq: the opaque sequencer pointer returned by lws_seq_create() * \param e: the event index to queue * \param data: associated opaque (to lws) data to provide the callback * \param aux: second opaque data to provide the callback * * This queues the event on a given sequencer. Queued events are delivered one * per sequencer each subsequent time around the event loop, so the cb is called * from the event loop thread context. * * Notice that because the events are delivered in order from the event loop, * the scope of objects pointed to by \p data or \p aux may exceed the lifetime * of the thing containing the pointed-to data. So it's usually better to pass * values here. */ LWS_VISIBLE LWS_EXTERN int lws_seq_queue_event(lws_seq_t *seq, lws_seq_events_t e, void *data, void *aux); /** * lws_seq_check_wsi() - check if wsi still extant * * \param seq: the sequencer interested in the wsi * \param wsi: the wsi we want to confirm hasn't closed yet * * Check if wsi still extant, by peeking in the message queue for a * LWSSEQ_WSI_CONN_CLOSE message about wsi. (Doesn't need to do the same for * CONN_FAIL since that will never have produced any messages prior to that). * * Use this to avoid trying to perform operations on wsi that have already * closed but we didn't get to that message yet. * * Returns 0 if not closed yet or 1 if it has closed but we didn't process the * close message yet. */ LWS_VISIBLE LWS_EXTERN int lws_seq_check_wsi(lws_seq_t *seq, struct lws *wsi); #define LWSSEQTO_NONE 0 /** * lws_seq_timeout_us() - set a timeout by which the sequence must have * completed by a different event or inform the * sequencer * * \param seq: The sequencer to set the timeout on * \param us: How many us in the future to fire the timeout * LWS_SET_TIMER_USEC_CANCEL = cancel any existing timeout * * This api allows the sequencer to ask to be informed if it has not completed * or disabled its timeout after secs seconds. Lws will send a LWSSEQ_TIMED_OUT * event to the sequencer if the timeout expires. * * Typically the sequencer sets the timeout when starting a step, then waits to * hear a queued event informing it the step completed or failed. The timeout * provides a way to deal with the case the step neither completed nor failed * within the timeout period. * * Lws wsi timeouts are not really suitable for this since they are focused on * short-term protocol timeout protection and may be set and reset many times * in one transaction. Wsi timeouts also enforce closure of the wsi when they * trigger, sequencer timeouts have no side effect except to queue the * LWSSEQ_TIMED_OUT message and leave it to the sequencer to decide how to * react appropriately. */ LWS_VISIBLE LWS_EXTERN int lws_seq_timeout_us(lws_seq_t *seq, lws_usec_t us); /** * lws_seq_from_user(): get the lws_seq_t pointer from the user ptr * * \param u: the sequencer user allocation returned by lws_seq_create() or * provided in the sequencer callback * * This gets the lws_seq_t * from the sequencer user allocation pointer. * Actually these are allocated at the same time in one step, with the user * allocation immediately after the lws_seq_t, so lws can compute where * the lws_seq_t is from having the user allocation pointer. Since the * size of the lws_seq_t is unknown to user code, this helper does it for * you. */ LWS_VISIBLE LWS_EXTERN lws_seq_t * lws_seq_from_user(void *u); /** * lws_seq_us_since_creation(): elapsed seconds since sequencer created * * \param seq: pointer to the lws_seq_t * * Returns the number of us elapsed since the lws_seq_t was * created. This is useful to calculate sequencer timeouts for the current * step considering a global sequencer lifetime limit. */ LWS_VISIBLE LWS_EXTERN lws_usec_t lws_seq_us_since_creation(lws_seq_t *seq); /** * lws_seq_name(): get the name of this sequencer * * \param seq: pointer to the lws_seq_t * * Returns the name given when the sequencer was created. This is useful to * annotate logging when then are multiple sequencers in play. */ LWS_VISIBLE LWS_EXTERN const char * lws_seq_name(lws_seq_t *seq); /** * lws_seq_get_context(): get the lws_context sequencer was created on * * \param seq: pointer to the lws_seq_t * * Returns the lws_context. Saves you having to store it if you have a seq * pointer handy. */ LWS_VISIBLE LWS_EXTERN struct lws_context * lws_seq_get_context(lws_seq_t *seq); libwebsockets-3.2.1/include/libwebsockets/lws-service.h000066400000000000000000000161311357643561300232730ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /** \defgroup service Built-in service loop entry * * ##Built-in service loop entry * * If you're not using libev / libuv, these apis are needed to enter the poll() * wait in lws and service any connections with pending events. */ ///@{ /** * lws_service() - Service any pending websocket activity * \param context: Websocket context * \param timeout_ms: Set to 0; ignored; for backward compatibility * * This function deals with any pending websocket traffic, for three * kinds of event. It handles these events on both server and client * types of connection the same. * * 1) Accept new connections to our context's server * * 2) Call the receive callback for incoming frame data received by * server or client connections. * * Since v3.2 internally the timeout wait is ignored, the lws scheduler is * smart enough to stay asleep until an event is queued. */ LWS_VISIBLE LWS_EXTERN int lws_service(struct lws_context *context, int timeout_ms); /** * lws_service_tsi() - Service any pending websocket activity * * \param context: Websocket context * \param timeout_ms: Set to 0; ignored; for backwards compatibility * \param tsi: Thread service index, starting at 0 * * Same as lws_service(), but for a specific thread service index. Only needed * if you are spawning multiple service threads. */ LWS_VISIBLE LWS_EXTERN int lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi); /** * lws_cancel_service_pt() - Cancel servicing of pending socket activity * on one thread * \param wsi: Cancel service on the thread this wsi is serviced by * * Same as lws_cancel_service(), but targets a single service thread, the one * the wsi belongs to. You probably want to use lws_cancel_service() instead. */ LWS_VISIBLE LWS_EXTERN void lws_cancel_service_pt(struct lws *wsi); /** * lws_cancel_service() - Cancel wait for new pending socket activity * \param context: Websocket context * * This function creates an immediate "synchronous interrupt" to the lws poll() * wait or event loop. As soon as possible in the serialzed service sequencing, * a LWS_CALLBACK_EVENT_WAIT_CANCELLED callback is sent to every protocol on * every vhost. * * lws_cancel_service() may be called from another thread while the context * exists, and its effect will be immediately serialized. */ LWS_VISIBLE LWS_EXTERN void lws_cancel_service(struct lws_context *context); /** * lws_service_fd() - Service polled socket with something waiting * \param context: Websocket context * \param pollfd: The pollfd entry describing the socket fd and which events * happened * * This function takes a pollfd that has POLLIN or POLLOUT activity and * services it according to the state of the associated * struct lws. * * The one call deals with all "service" that might happen on a socket * including listen accepts, http files as well as websocket protocol. * * If a pollfd says it has something, you can just pass it to * lws_service_fd() whether it is a socket handled by lws or not. * If it sees it is a lws socket, the traffic will be handled and * pollfd->revents will be zeroed now. * * If the socket is foreign to lws, it leaves revents alone. So you can * see if you should service yourself by checking the pollfd revents * after letting lws try to service it. * * lws before v3.2 allowed pollfd to be NULL, to indicate that background * periodic processing should be done. Since v3.2, lws schedules any items * that need handling in the future using lws_sul and NULL is no longer valid. */ LWS_VISIBLE LWS_EXTERN int lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd); /** * lws_service_fd_tsi() - Service polled socket in specific service thread * \param context: Websocket context * \param pollfd: The pollfd entry describing the socket fd and which events * happened. * \param tsi: thread service index * * Same as lws_service_fd() but used with multiple service threads */ LWS_VISIBLE LWS_EXTERN int lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd, int tsi); /** * lws_service_adjust_timeout() - Check for any connection needing forced service * \param context: Websocket context * \param timeout_ms: The original poll timeout value. You can just set this * to 1 if you don't really have a poll timeout. * \param tsi: thread service index * * Under some conditions connections may need service even though there is no * pending network action on them, this is "forced service". For default * poll() and libuv / libev, the library takes care of calling this and * dealing with it for you. But for external poll() integration, you need * access to the apis. * * If anybody needs "forced service", returned timeout is zero. In that case, * you can call lws_service_tsi() with a timeout of -1 to only service * guys who need forced service. */ LWS_VISIBLE LWS_EXTERN int lws_service_adjust_timeout(struct lws_context *context, int timeout_ms, int tsi); /* Backwards compatibility */ #define lws_plat_service_tsi lws_service_tsi LWS_VISIBLE LWS_EXTERN int lws_handle_POLLOUT_event(struct lws *wsi, struct lws_pollfd *pollfd); ///@} /*! \defgroup uv libuv helpers * * ##libuv helpers * * APIs specific to libuv event loop itegration */ ///@{ #ifdef LWS_WITH_LIBUV /* * Any direct libuv allocations in lws protocol handlers must participate in the * lws reference counting scheme. Two apis are provided: * * - lws_libuv_static_refcount_add(handle, context) to mark the handle with * a pointer to the context and increment the global uv object counter * * - lws_libuv_static_refcount_del() which should be used as the close callback * for your own libuv objects declared in the protocol scope. * * Using the apis allows lws to detach itself from a libuv loop completely * cleanly and at the moment all of its libuv objects have completed close. */ LWS_VISIBLE LWS_EXTERN uv_loop_t * lws_uv_getloop(struct lws_context *context, int tsi); LWS_VISIBLE LWS_EXTERN void lws_libuv_static_refcount_add(uv_handle_t *, struct lws_context *context); LWS_VISIBLE LWS_EXTERN void lws_libuv_static_refcount_del(uv_handle_t *); #endif /* LWS_WITH_LIBUV */ #if defined(LWS_WITH_ESP32) #define lws_libuv_static_refcount_add(_a, _b) #define lws_libuv_static_refcount_del NULL #endif ///@} libwebsockets-3.2.1/include/libwebsockets/lws-sha1-base64.h000066400000000000000000000054631357643561300235570ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /** \defgroup sha SHA and B64 helpers * ##SHA and B64 helpers * * These provide SHA-1 and B64 helper apis */ ///@{ #ifdef LWS_SHA1_USE_OPENSSL_NAME #define lws_SHA1 SHA1 #else /** * lws_SHA1(): make a SHA-1 digest of a buffer * * \param d: incoming buffer * \param n: length of incoming buffer * \param md: buffer for message digest (must be >= 20 bytes) * * Reduces any size buffer into a 20-byte SHA-1 hash. */ LWS_VISIBLE LWS_EXTERN unsigned char * lws_SHA1(const unsigned char *d, size_t n, unsigned char *md); #endif /** * lws_b64_encode_string(): encode a string into base 64 * * \param in: incoming buffer * \param in_len: length of incoming buffer * \param out: result buffer * \param out_size: length of result buffer * * Encodes a string using b64 */ LWS_VISIBLE LWS_EXTERN int lws_b64_encode_string(const char *in, int in_len, char *out, int out_size); /** * lws_b64_encode_string_url(): encode a string into base 64 * * \param in: incoming buffer * \param in_len: length of incoming buffer * \param out: result buffer * \param out_size: length of result buffer * * Encodes a string using b64 with the "URL" variant (+ -> -, and / -> _) */ LWS_VISIBLE LWS_EXTERN int lws_b64_encode_string_url(const char *in, int in_len, char *out, int out_size); /** * lws_b64_decode_string(): decode a string from base 64 * * \param in: incoming buffer * \param out: result buffer * \param out_size: length of result buffer * * Decodes a NUL-terminated string using b64 */ LWS_VISIBLE LWS_EXTERN int lws_b64_decode_string(const char *in, char *out, int out_size); /** * lws_b64_decode_string_len(): decode a string from base 64 * * \param in: incoming buffer * \param in_len: length of incoming buffer * \param out: result buffer * \param out_size: length of result buffer * * Decodes a range of chars using b64 */ LWS_VISIBLE LWS_EXTERN int lws_b64_decode_string_len(const char *in, int in_len, char *out, int out_size); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-spa.h000066400000000000000000000144521357643561300224220ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /** \defgroup form-parsing Form Parsing * \ingroup http * ##POSTed form parsing functions * * These lws_spa (stateful post arguments) apis let you parse and urldecode * POSTed form arguments, both using simple urlencoded and multipart transfer * encoding. * * It's capable of handling file uploads as well a named input parsing, * and the apis are the same for both form upload styles. * * You feed it a list of parameter names and it creates pointers to the * urldecoded arguments: file upload parameters pass the file data in chunks to * a user-supplied callback as they come. * * Since it's stateful, it handles the incoming data needing more than one * POST_BODY callback and has no limit on uploaded file size. */ ///@{ /** enum lws_spa_fileupload_states */ enum lws_spa_fileupload_states { LWS_UFS_CONTENT, /**< a chunk of file content has arrived */ LWS_UFS_FINAL_CONTENT, /**< the last chunk (possibly zero length) of file content has arrived */ LWS_UFS_OPEN, /**< a new file is starting to arrive */ LWS_UFS_CLOSE /**< the file decode stuff is being destroyed */ }; /** * lws_spa_fileupload_cb() - callback to receive file upload data * * \param data: opt_data pointer set in lws_spa_create * \param name: name of the form field being uploaded * \param filename: original filename from client * \param buf: start of data to receive * \param len: length of data to receive * \param state: information about how this call relates to file * * Notice name and filename shouldn't be trusted, as they are passed from * HTTP provided by the client. */ typedef int (*lws_spa_fileupload_cb)(void *data, const char *name, const char *filename, char *buf, int len, enum lws_spa_fileupload_states state); /** struct lws_spa - opaque urldecode parser capable of handling multipart * and file uploads */ struct lws_spa; /** * lws_spa_create() - create urldecode parser * * \param wsi: lws connection (used to find Content Type) * \param param_names: array of form parameter names, like "username" * \param count_params: count of param_names * \param max_storage: total amount of form parameter values we can store * \param opt_cb: NULL, or callback to receive file upload data. * \param opt_data: NULL, or user pointer provided to opt_cb. * * Creates a urldecode parser and initializes it. * * It's recommended to use the newer api, lws_spa_create_via_info() * instead. * * opt_cb can be NULL if you just want normal name=value parsing, however * if one or more entries in your form are bulk data (file transfer), you * can provide this callback and filter on the name callback parameter to * treat that urldecoded data separately. The callback should return -1 * in case of fatal error, and 0 if OK. */ LWS_VISIBLE LWS_EXTERN struct lws_spa * lws_spa_create(struct lws *wsi, const char * const *param_names, int count_params, int max_storage, lws_spa_fileupload_cb opt_cb, void *opt_data); typedef struct lws_spa_create_info { const char * const *param_names; /* array of form parameter names, like "username" */ int count_params; /* count of param_names */ int max_storage; /* total amount of form parameter values we can store */ lws_spa_fileupload_cb opt_cb; /* NULL, or callback to receive file upload data. */ void *opt_data; /* NULL, or user pointer provided to opt_cb. */ size_t param_names_stride; /* 0 if param_names is an array of char *. Else stride to next char * */ struct lwsac **ac; /* NULL, or pointer to lwsac * to contain all related heap allocations */ size_t ac_chunk_size; /* 0 for default, or ac chunk size */ } lws_spa_create_info_t; /** * lws_spa_create_via_info() - create urldecode parser * * \param wsi: lws connection (used to find Content Type) * \param info: pointer to struct defining the arguments * * Creates a urldecode parser and initializes it. * * opt_cb can be NULL if you just want normal name=value parsing, however * if one or more entries in your form are bulk data (file transfer), you * can provide this callback and filter on the name callback parameter to * treat that urldecoded data separately. The callback should return -1 * in case of fatal error, and 0 if OK. */ LWS_VISIBLE LWS_EXTERN struct lws_spa * lws_spa_create_via_info(struct lws *wsi, const lws_spa_create_info_t *info); /** * lws_spa_process() - parses a chunk of input data * * \param spa: the parser object previously created * \param in: incoming urlencoded data * \param len: count of bytes valid at \p in */ LWS_VISIBLE LWS_EXTERN int lws_spa_process(struct lws_spa *spa, const char *in, int len); /** * lws_spa_finalize() - indicate incoming data completed * * \param spa: the parser object previously created */ LWS_VISIBLE LWS_EXTERN int lws_spa_finalize(struct lws_spa *spa); /** * lws_spa_get_length() - return length of parameter value * * \param spa: the parser object previously created * \param n: parameter ordinal to return length of value for */ LWS_VISIBLE LWS_EXTERN int lws_spa_get_length(struct lws_spa *spa, int n); /** * lws_spa_get_string() - return pointer to parameter value * \param spa: the parser object previously created * \param n: parameter ordinal to return pointer to value for */ LWS_VISIBLE LWS_EXTERN const char * lws_spa_get_string(struct lws_spa *spa, int n); /** * lws_spa_destroy() - destroy parser object * * \param spa: the parser object previously created */ LWS_VISIBLE LWS_EXTERN int lws_spa_destroy(struct lws_spa *spa); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-stats.h000066400000000000000000000070501357643561300227710ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /* * Stats are all uint64_t numbers that start at 0. * Index names here have the convention * * _C_ counter * _B_ byte count * _MS_ millisecond count */ enum { LWSSTATS_C_CONNECTIONS, /**< count incoming connections */ LWSSTATS_C_API_CLOSE, /**< count calls to close api */ LWSSTATS_C_API_READ, /**< count calls to read from socket api */ LWSSTATS_C_API_LWS_WRITE, /**< count calls to lws_write API */ LWSSTATS_C_API_WRITE, /**< count calls to write API */ LWSSTATS_C_WRITE_PARTIALS, /**< count of partial writes */ LWSSTATS_C_WRITEABLE_CB_REQ, /**< count of writable callback requests */ LWSSTATS_C_WRITEABLE_CB_EFF_REQ, /**< count of effective writable callback requests */ LWSSTATS_C_WRITEABLE_CB, /**< count of writable callbacks */ LWSSTATS_C_SSL_CONNECTIONS_FAILED, /**< count of failed SSL connections */ LWSSTATS_C_SSL_CONNECTIONS_ACCEPTED, /**< count of accepted SSL connections */ LWSSTATS_C_SSL_ACCEPT_SPIN, /**< count of SSL_accept() attempts */ LWSSTATS_C_SSL_CONNS_HAD_RX, /**< count of accepted SSL conns that have had some RX */ LWSSTATS_C_TIMEOUTS, /**< count of timed-out connections */ LWSSTATS_C_SERVICE_ENTRY, /**< count of entries to lws service loop */ LWSSTATS_B_READ, /**< aggregate bytes read */ LWSSTATS_B_WRITE, /**< aggregate bytes written */ LWSSTATS_B_PARTIALS_ACCEPTED_PARTS, /**< aggreate of size of accepted write data from new partials */ LWSSTATS_US_SSL_ACCEPT_LATENCY_AVG, /**< aggregate delay in accepting connection */ LWSSTATS_US_WRITABLE_DELAY_AVG, /**< aggregate delay between asking for writable and getting cb */ LWSSTATS_US_WORST_WRITABLE_DELAY, /**< single worst delay between asking for writable and getting cb */ LWSSTATS_US_SSL_RX_DELAY_AVG, /**< aggregate delay between ssl accept complete and first RX */ LWSSTATS_C_PEER_LIMIT_AH_DENIED, /**< number of times we would have given an ah but for the peer limit */ LWSSTATS_C_PEER_LIMIT_WSI_DENIED, /**< number of times we would have given a wsi but for the peer limit */ LWSSTATS_C_CONNS_CLIENT, /**< attempted client conns */ LWSSTATS_C_CONNS_CLIENT_FAILED, /**< failed client conns */ /* Add new things just above here ---^ * This is part of the ABI, don't needlessly break compatibility * * UPDATE stat_names in stats.c in sync with this! */ LWSSTATS_SIZE }; #if defined(LWS_WITH_STATS) LWS_VISIBLE LWS_EXTERN uint64_t lws_stats_get(struct lws_context *context, int index); LWS_VISIBLE LWS_EXTERN void lws_stats_log_dump(struct lws_context *context); #else static LWS_INLINE uint64_t lws_stats_get(struct lws_context *context, int index) { (void)context; (void)index; return 0; } static LWS_INLINE void lws_stats_log_dump(struct lws_context *context) { (void)context; } #endif libwebsockets-3.2.1/include/libwebsockets/lws-struct.h000066400000000000000000000131131357643561300231540ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ #if defined(LWS_WITH_STRUCT_SQLITE3) #include #endif typedef enum { LSMT_SIGNED, LSMT_UNSIGNED, LSMT_BOOLEAN, LSMT_STRING_CHAR_ARRAY, LSMT_STRING_PTR, LSMT_LIST, LSMT_CHILD_PTR, LSMT_SCHEMA, } lws_struct_map_type_eum; typedef struct lejp_collation { struct lws_dll2 chunks; int len; char buf[LEJP_STRING_CHUNK + 1]; } lejp_collation_t; typedef struct lws_struct_map { const char *colname; const struct lws_struct_map *child_map; lejp_callback lejp_cb; size_t ofs; /* child dll2; points to dll2_owner */ size_t aux; size_t ofs_clist; size_t child_map_size; lws_struct_map_type_eum type; } lws_struct_map_t; typedef int (*lws_struct_args_cb)(void *obj, void *cb_arg); typedef struct lws_struct_args { const lws_struct_map_t *map_st[LEJP_MAX_PARSING_STACK_DEPTH]; lws_struct_args_cb cb; struct lwsac *ac; void *cb_arg; void *dest; size_t dest_len; size_t toplevel_dll2_ofs; size_t map_entries_st[LEJP_MAX_PARSING_STACK_DEPTH]; size_t ac_block_size; int subtype; /* * temp ac used to collate unknown possibly huge strings before final * allocation and copy */ struct lwsac *ac_chunks; struct lws_dll2_owner chunks_owner; size_t chunks_length; } lws_struct_args_t; #define LSM_SIGNED(type, name, qname) \ { \ qname, \ NULL, \ NULL, \ offsetof(type, name), \ sizeof ((type *)0)->name, \ 0, \ 0, \ LSMT_SIGNED \ } #define LSM_UNSIGNED(type, name, qname) \ { \ qname, \ NULL, \ NULL, \ offsetof(type, name), \ sizeof ((type *)0)->name, \ 0, \ 0, \ LSMT_UNSIGNED \ } #define LSM_BOOLEAN(type, name, qname) \ { \ qname, \ NULL, \ NULL, \ offsetof(type, name), \ sizeof ((type *)0)->name, \ 0, \ 0, \ LSMT_BOOLEAN \ } #define LSM_CARRAY(type, name, qname) \ { \ qname, \ NULL, \ NULL, \ offsetof(type, name), \ sizeof (((type *)0)->name), \ 0, \ 0, \ LSMT_STRING_CHAR_ARRAY \ } #define LSM_STRING_PTR(type, name, qname) \ { \ qname, \ NULL, \ NULL, \ offsetof(type, name), \ sizeof (((type *)0)->name), \ 0, \ 0, \ LSMT_STRING_PTR \ } #define LSM_LIST(ptype, pname, ctype, cname, lejp_cb, cmap, qname) \ { \ qname, \ cmap, \ lejp_cb, \ offsetof(ptype, pname), \ sizeof (ctype), \ offsetof(ctype, cname), \ LWS_ARRAY_SIZE(cmap), \ LSMT_LIST \ } #define LSM_CHILD_PTR(ptype, pname, ctype, lejp_cb, cmap, qname) \ { \ qname, \ cmap, \ lejp_cb, \ offsetof(ptype, pname), \ sizeof (ctype), \ 0, \ LWS_ARRAY_SIZE(cmap), \ LSMT_CHILD_PTR \ } #define LSM_SCHEMA(ctype, lejp_cb, map, schema_name) \ { \ schema_name, \ map, \ lejp_cb, \ 0, \ sizeof (ctype), \ 0, \ LWS_ARRAY_SIZE(map), \ LSMT_SCHEMA \ } #define LSM_SCHEMA_DLL2(ctype, cdll2mem, lejp_cb, map, schema_name) \ { \ schema_name, \ map, \ lejp_cb, \ offsetof(ctype, cdll2mem), \ sizeof (ctype), \ 0, \ LWS_ARRAY_SIZE(map), \ LSMT_SCHEMA \ } typedef struct lws_struct_serialize_st { const struct lws_dll2 *dllpos; const lws_struct_map_t *map; const char *obj; size_t map_entries; size_t map_entry; size_t size; char subsequent; char idt; } lws_struct_serialize_st_t; enum { LSSERJ_FLAG_PRETTY = 1 }; typedef struct lws_struct_serialize { lws_struct_serialize_st_t st[LEJP_MAX_PARSING_STACK_DEPTH]; size_t offset; size_t remaining; int sp; int flags; } lws_struct_serialize_t; typedef enum { LSJS_RESULT_CONTINUE, LSJS_RESULT_FINISH, LSJS_RESULT_ERROR } lws_struct_json_serialize_result_t; LWS_VISIBLE LWS_EXTERN int lws_struct_json_init_parse(struct lejp_ctx *ctx, lejp_callback cb, void *user); LWS_VISIBLE LWS_EXTERN signed char lws_struct_schema_only_lejp_cb(struct lejp_ctx *ctx, char reason); LWS_VISIBLE LWS_EXTERN signed char lws_struct_default_lejp_cb(struct lejp_ctx *ctx, char reason); LWS_VISIBLE LWS_EXTERN lws_struct_serialize_t * lws_struct_json_serialize_create(const lws_struct_map_t *map, size_t map_entries, int flags, void *ptoplevel); LWS_VISIBLE LWS_EXTERN void lws_struct_json_serialize_destroy(lws_struct_serialize_t **pjs); LWS_VISIBLE LWS_EXTERN lws_struct_json_serialize_result_t lws_struct_json_serialize(lws_struct_serialize_t *js, uint8_t *buf, size_t len, size_t *written); #if defined(LWS_WITH_STRUCT_SQLITE3) LWS_VISIBLE LWS_EXTERN int lws_struct_sq3_deserialize(sqlite3 *pdb, const lws_struct_map_t *schema, lws_dll2_owner_t *o, struct lwsac **ac, uint64_t start, int limit); LWS_VISIBLE LWS_EXTERN int lws_struct_sq3_create_table(sqlite3 *pdb, const lws_struct_map_t *schema); LWS_VISIBLE LWS_EXTERN int lws_struct_sq3_open(struct lws_context *context, const char *sqlite3_path, sqlite3 **pdb); LWS_VISIBLE LWS_EXTERN int lws_struct_sq3_close(sqlite3 **pdb); #endif libwebsockets-3.2.1/include/libwebsockets/lws-system.h000066400000000000000000000056561357643561300231710ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h * * This provides a clean way to interface lws user code to be able to * work unchanged on different systems for fetching common system information, * and performing common system operations like reboot. * * An ops struct with the system-specific implementations is set at * context creation time, and apis are provided that call through to * those where they exist. */ typedef enum { LWS_SYSI_HRS_DEVICE_MODEL = 1, LWS_SYSI_HRS_DEVICE_SERIAL, LWS_SYSI_HRS_FIRMWARE_VERSION, LWS_SYSI_USER_BASE = 100 } lws_system_item_t; typedef union { const char *hrs; /* human readable string */ void *data; time_t t; } lws_system_arg_t; typedef struct lws_system_ops { int (*get_info)(lws_system_item_t i, lws_system_arg_t arg, size_t *len); int (*reboot)(void); } lws_system_ops_t; /* wrappers handle NULL members or no ops struct set at all cleanly */ /** * lws_system_get_info() - get standardized system information * * \param context: the lws_context * \param item: which information to fetch * \param arg: where to place the result * \param len: incoming: max length of result, outgoing: used length of result * * This queries a standardized information-fetching ops struct that can be * applied to the context... the advantage is it allows you to get common items * of information like a device serial number writing the code once, even if the * actual serial number muse be fetched in wildly different ways depending on * the exact platform it's running on. * * Set arg and *len on entry to be the result location and the max length that * can be used there, on seccessful exit *len is set to the actual length and * 0 is returned. On error, 1 is returned. */ LWS_EXTERN LWS_VISIBLE int lws_system_get_info(struct lws_context *context, lws_system_item_t item, lws_system_arg_t arg, size_t *len); /** * lws_system_reboot() - if provided, use the lws_system ops to reboot * * \param context: the lws_context * * If possible, the system will reboot. Otherwise returns 1. */ LWS_EXTERN LWS_VISIBLE int lws_system_reboot(struct lws_context *context); libwebsockets-3.2.1/include/libwebsockets/lws-test-sequencer.h000066400000000000000000000042261357643561300246040ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h * * lws_test_sequencer manages running an array of unit tests. */ typedef void (*lws_test_sequence_cb)(const void *cb_user); typedef struct lws_test_sequencer_args { lws_abs_t *abs; /* abstract protocol + unit test txport */ lws_unit_test_t *tests; /* array of lws_unit_test_t */ int *results; /* takes result dispositions */ int results_max; /* max space usable in results */ int *count_tests; /* count of done tests */ int *count_passes; /* count of passed tests */ lws_test_sequence_cb cb; /* completion callback */ void *cb_user; /* opaque user ptr given to cb */ } lws_test_sequencer_args_t; /** * lws_abs_unit_test_sequencer() - helper to sequence multiple unit tests * * \param args: lws_test_sequencer_args_t prepared with arguments for the tests * * This helper sequences one or more unit tests to run and collects the results. * * The incoming abs should be set up for the abstract protocol you want to test * and the lws unit-test transport. * * Results are one of * * LPE_SUCCEEDED * LPE_FAILED * LPE_FAILED_UNEXPECTED_TIMEOUT * LPE_FAILED_UNEXPECTED_PASS * LPE_FAILED_UNEXPECTED_CLOSE * * The callback args->cb is called when the tests have been done. */ LWS_VISIBLE LWS_EXTERN int lws_abs_unit_test_sequencer(const lws_test_sequencer_args_t *args); libwebsockets-3.2.1/include/libwebsockets/lws-threadpool.h000066400000000000000000000202451357643561300237750ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /** \defgroup threadpool Threadpool related functions * ##Threadpool * \ingroup lwsapi * * This allows you to create one or more pool of threads which can run tasks * associated with a wsi. If the pool is busy, tasks wait on a queue. * * Tasks don't have to be atomic, if they will take more than a few tens of ms * they should return back to the threadpool worker with a return of 0. This * will allow them to abort cleanly. */ //@{ struct lws_threadpool; struct lws_threadpool_task; enum lws_threadpool_task_status { LWS_TP_STATUS_QUEUED, LWS_TP_STATUS_RUNNING, LWS_TP_STATUS_SYNCING, LWS_TP_STATUS_STOPPING, LWS_TP_STATUS_FINISHED, /* lws_threadpool_task_status() frees task */ LWS_TP_STATUS_STOPPED, /* lws_threadpool_task_status() frees task */ }; enum lws_threadpool_task_return { /** Still work to do, just confirming not being stopped */ LWS_TP_RETURN_CHECKING_IN, /** Still work to do, enter cond_wait until service thread syncs. This * is used if you have filled your buffer(s) of data to the service * thread and are blocked until the service thread completes sending at * least one. */ LWS_TP_RETURN_SYNC, /** No more work to do... */ LWS_TP_RETURN_FINISHED, /** Responding to request to stop */ LWS_TP_RETURN_STOPPED, /* OR on to indicate this task wishes to outlive its wsi */ LWS_TP_RETURN_FLAG_OUTLIVE = 64 }; struct lws_threadpool_create_args { int threads; int max_queue_depth; }; struct lws_threadpool_task_args { struct lws *wsi; /**< user must set to wsi task is bound to */ void *user; /**< user may set (user-private pointer) */ const char *name; /**< user may set to describe task */ char async_task; /**< set to allow the task to shrug off the loss of the associated wsi and continue to completion */ enum lws_threadpool_task_return (*task)(void *user, enum lws_threadpool_task_status s); /**< user must set to actual task function */ void (*cleanup)(struct lws *wsi, void *user); /**< socket lifecycle may end while task is not stoppable, so the task * must be able to detach from any wsi and clean itself up when it does * stop. If NULL, no cleanup necessary, otherwise point to a user- * supplied function that destroys the stuff in \p user. * * wsi may be NULL on entry, indicating the task got detached due to the * wsi closing before. */ }; /** * lws_threadpool_create() - create a pool of worker threads * * \param context: the lws_context the threadpool will exist inside * \param args: argument struct prepared by caller * \param format: printf-type format for the task name * \param ...: printf type args for the task name format * * Creates a pool of worker threads with \p threads and a queue of up to * \p max_queue_depth waiting tasks if all the threads are busy. * * Returns NULL if OOM, or a struct lws_threadpool pointer that must be * destroyed by lws_threadpool_destroy(). */ LWS_VISIBLE LWS_EXTERN struct lws_threadpool * lws_threadpool_create(struct lws_context *context, const struct lws_threadpool_create_args *args, const char *format, ...) LWS_FORMAT(3); /** * lws_threadpool_finish() - Stop all pending and running tasks * * \param tp: the threadpool object * * Marks the threadpool as under destruction. Removes everything from the * pending queue and completes those tasks as LWS_TP_STATUS_STOPPED. * * Running tasks will also get LWS_TP_STATUS_STOPPED as soon as they * "resurface". * * This doesn't reap tasks or free the threadpool, the reaping is done by the * lws_threadpool_task_status() on the done task. */ LWS_VISIBLE LWS_EXTERN void lws_threadpool_finish(struct lws_threadpool *tp); /** * lws_threadpool_destroy() - Destroy a threadpool * * \param tp: the threadpool object * * Waits for all worker threads to stop, ends the threads and frees the tp. */ LWS_VISIBLE LWS_EXTERN void lws_threadpool_destroy(struct lws_threadpool *tp); /** * lws_threadpool_enqueue() - Queue the task and run it on a worker thread when possible * * \param tp: the threadpool to queue / run on * \param args: information about what to run * \param format: printf-type format for the task name * \param ...: printf type args for the task name format * * This asks for a task to run ASAP on a worker thread in threadpool \p tp. * * The args defines the wsi, a user-private pointer, a timeout in secs and * a pointer to the task function. * * Returns NULL or an opaque pointer to the queued (or running, or completed) * task. * * Once a task is created and enqueued, it can only be destroyed by calling * lws_threadpool_task_status() on it after it has reached the state * LWS_TP_STATUS_FINISHED or LWS_TP_STATUS_STOPPED. */ LWS_VISIBLE LWS_EXTERN struct lws_threadpool_task * lws_threadpool_enqueue(struct lws_threadpool *tp, const struct lws_threadpool_task_args *args, const char *format, ...) LWS_FORMAT(3); /** * lws_threadpool_dequeue() - Dequeue or try to stop a running task * * \param wsi: the wsi whose current task we want to eliminate * * Returns 0 is the task was dequeued or already compeleted, or 1 if the task * has been asked to stop asynchronously. * * This doesn't free the task. It only shortcuts it to state * LWS_TP_STATUS_STOPPED. lws_threadpool_task_status() must be performed on * the task separately once it is in LWS_TP_STATUS_STOPPED to free the task. */ LWS_VISIBLE LWS_EXTERN int lws_threadpool_dequeue(struct lws *wsi); /** * lws_threadpool_task_status() - Dequeue or try to stop a running task * * \param wsi: the wsi to query the current task of * \param task: receives a pointer to the opaque task * \param user: receives a void * pointer to the task user data * * This is the equivalent of posix waitpid()... it returns the status of the * task, and if the task is in state LWS_TP_STATUS_FINISHED or * LWS_TP_STATUS_STOPPED, frees \p task. If in another state, the task * continues to exist. * * This is designed to be called from the service thread. * * Its use is to make sure the service thread has seen the state of the task * before deleting it. */ LWS_VISIBLE LWS_EXTERN enum lws_threadpool_task_status lws_threadpool_task_status_wsi(struct lws *wsi, struct lws_threadpool_task **task, void **user); /** * lws_threadpool_task_sync() - Indicate to a stalled task it may continue * * \param task: the task to unblock * \param stop: 0 = run after unblock, 1 = when he unblocks, stop him * * Inform the task that the service thread has finished with the shared data * and that the task, if blocked in LWS_TP_RETURN_SYNC, may continue. * * If the lws service context determined that the task must be aborted, it * should still call this but with stop = 1, causing the task to finish. */ LWS_VISIBLE LWS_EXTERN void lws_threadpool_task_sync(struct lws_threadpool_task *task, int stop); /** * lws_threadpool_dump() - dump the state of a threadpool to the log * * \param tp: The threadpool to dump * * This locks the threadpool and then dumps the pending queue, the worker * threads and the done queue, together with time information for how long * the tasks have been in their current state, how long they have occupied a * thread, etc. * * This only does anything on lws builds with CMAKE_BUILD_TYPE=DEBUG, otherwise * while it still exists, it's a NOP. */ LWS_VISIBLE LWS_EXTERN void lws_threadpool_dump(struct lws_threadpool *tp); //@} libwebsockets-3.2.1/include/libwebsockets/lws-timeout-timer.h000066400000000000000000000202201357643561300244310ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup timeout Connection timeouts APIs related to setting connection timeouts */ //@{ /* * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. */ enum pending_timeout { NO_PENDING_TIMEOUT = 0, PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1, PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2, PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3, PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4, PENDING_TIMEOUT_AWAITING_PING = 5, PENDING_TIMEOUT_CLOSE_ACK = 6, PENDING_TIMEOUT_UNUSED1 = 7, PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8, PENDING_TIMEOUT_SSL_ACCEPT = 9, PENDING_TIMEOUT_HTTP_CONTENT = 10, PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11, PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12, PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13, PENDING_TIMEOUT_CGI = 14, PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15, PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16, PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17, PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD = 18, PENDING_TIMEOUT_AWAITING_SOCKS_GREETING_REPLY = 19, PENDING_TIMEOUT_AWAITING_SOCKS_CONNECT_REPLY = 20, PENDING_TIMEOUT_AWAITING_SOCKS_AUTH_REPLY = 21, PENDING_TIMEOUT_KILLED_BY_SSL_INFO = 22, PENDING_TIMEOUT_KILLED_BY_PARENT = 23, PENDING_TIMEOUT_CLOSE_SEND = 24, PENDING_TIMEOUT_HOLDING_AH = 25, PENDING_TIMEOUT_UDP_IDLE = 26, PENDING_TIMEOUT_CLIENT_CONN_IDLE = 27, PENDING_TIMEOUT_LAGGING = 28, PENDING_TIMEOUT_THREADPOOL = 29, PENDING_TIMEOUT_THREADPOOL_TASK = 30, PENDING_TIMEOUT_KILLED_BY_PROXY_CLIENT_CLOSE = 31, PENDING_TIMEOUT_USER_OK = 32, /****** add new things just above ---^ ******/ PENDING_TIMEOUT_USER_REASON_BASE = 1000 }; #define lws_time_in_microseconds lws_now_usecs #define LWS_TO_KILL_ASYNC -1 /**< If LWS_TO_KILL_ASYNC is given as the timeout sec in a lws_set_timeout() * call, then the connection is marked to be killed at the next timeout * check. This is how you should force-close the wsi being serviced if * you are doing it outside the callback (where you should close by nonzero * return). */ #define LWS_TO_KILL_SYNC -2 /**< If LWS_TO_KILL_SYNC is given as the timeout sec in a lws_set_timeout() * call, then the connection is closed before returning (which may delete * the wsi). This should only be used where the wsi being closed is not the * wsi currently being serviced. */ /** * lws_set_timeout() - marks the wsi as subject to a timeout some seconds hence * * \param wsi: Websocket connection instance * \param reason: timeout reason * \param secs: how many seconds. You may set to LWS_TO_KILL_ASYNC to * force the connection to timeout at the next opportunity, or * LWS_TO_KILL_SYNC to close it synchronously if you know the * wsi is not the one currently being serviced. */ LWS_VISIBLE LWS_EXTERN void lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs); /** * lws_set_timeout_us() - marks the wsi as subject to a timeout some us hence * * \param wsi: Websocket connection instance * \param reason: timeout reason * \param us: 0 removes the timeout, otherwise number of us to wait * * Higher-resolution version of lws_set_timeout(). Actual resolution depends * on platform and load, usually ms. */ void lws_set_timeout_us(struct lws *wsi, enum pending_timeout reason, lws_usec_t us); #define LWS_SET_TIMER_USEC_CANCEL ((lws_usec_t)-1ll) #define LWS_USEC_PER_SEC ((lws_usec_t)1000000) /** * lws_set_timer_usecs() - schedules a callback on the wsi in the future * * \param wsi: Websocket connection instance * \param usecs: LWS_SET_TIMER_USEC_CANCEL removes any existing scheduled * callback, otherwise number of microseconds in the future * the callback will occur at. * * NOTE: event loop support for this: * * default poll() loop: yes * libuv event loop: yes * libev: not implemented (patch welcome) * libevent: not implemented (patch welcome) * * After the deadline expires, the wsi will get a callback of type * LWS_CALLBACK_TIMER and the timer is exhausted. The deadline may be * continuously deferred by further calls to lws_set_timer_usecs() with a later * deadline, or cancelled by lws_set_timer_usecs(wsi, -1). * * If the timer should repeat, lws_set_timer_usecs() must be called again from * LWS_CALLBACK_TIMER. * * Accuracy depends on the platform and the load on the event loop or system... * all that's guaranteed is the callback will come after the requested wait * period. */ LWS_VISIBLE LWS_EXTERN void lws_set_timer_usecs(struct lws *wsi, lws_usec_t usecs); /* * lws_timed_callback_vh_protocol() - calls back a protocol on a vhost after * the specified delay in seconds * * \param vh: the vhost to call back * \param protocol: the protocol to call back * \param reason: callback reason * \param secs: how many seconds in the future to do the callback. * * Callback the specified protocol with a fake wsi pointing to the specified * vhost and protocol, with the specified reason, at the specified time in the * future. * * Returns 0 if OK or 1 on OOM. * * In the multithreaded service case, the callback will occur in the same * service thread context as the call to this api that requested it. If it is * called from a non-service thread, tsi 0 will handle it. */ LWS_VISIBLE LWS_EXTERN int lws_timed_callback_vh_protocol(struct lws_vhost *vh, const struct lws_protocols *prot, int reason, int secs); /* * lws_timed_callback_vh_protocol_us() - calls back a protocol on a vhost after * the specified delay in us * * \param vh: the vhost to call back * \param protocol: the protocol to call back * \param reason: callback reason * \param us: how many us in the future to do the callback. * * Callback the specified protocol with a fake wsi pointing to the specified * vhost and protocol, with the specified reason, at the specified time in the * future. * * Returns 0 if OK or 1 on OOM. * * In the multithreaded service case, the callback will occur in the same * service thread context as the call to this api that requested it. If it is * called from a non-service thread, tsi 0 will handle it. */ LWS_VISIBLE LWS_EXTERN int lws_timed_callback_vh_protocol_us(struct lws_vhost *vh, const struct lws_protocols *prot, int reason, lws_usec_t us); typedef void (*sul_cb_t)(lws_sorted_usec_list_t *sul); struct lws_sorted_usec_list { struct lws_dll2 list; /* simplify the code by keeping this at start */ sul_cb_t cb; lws_usec_t us; }; /* * lws_sul_schedule() - schedule a callback * * \param context: the lws_context * \param tsi: the thread service index (usually 0) * \param sul: pointer to the sul element * \param cb: the scheduled callback * \param us: the delay before the callback arrives, or * LWS_SET_TIMER_USEC_CANCEL to cancel it. * * Generic callback-at-a-later time function. The callback happens on the * event loop thread context. * * Although the api has us resultion, the actual resolution depends on the * platform and is commonly 1ms. * * This doesn't allocate and doesn't fail. * * You can call it again with another us value to change the delay. */ LWS_VISIBLE LWS_EXTERN void lws_sul_schedule(struct lws_context *context, int tsi, lws_sorted_usec_list_t *sul, sul_cb_t cb, lws_usec_t us); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-tokenize.h000066400000000000000000000122101357643561300234550ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /* Do not treat - as a terminal character, so "my-token" is one token */ #define LWS_TOKENIZE_F_MINUS_NONTERM (1 << 0) /* Separately report aggregate colon-delimited tokens */ #define LWS_TOKENIZE_F_AGG_COLON (1 << 1) /* Enforce sequencing for a simple token , token , token ... list */ #define LWS_TOKENIZE_F_COMMA_SEP_LIST (1 << 2) /* Allow more characters in the tokens and less delimiters... default is * only alphanumeric + underscore in tokens */ #define LWS_TOKENIZE_F_RFC7230_DELIMS (1 << 3) /* Do not treat . as a terminal character, so "warmcat.com" is one token */ #define LWS_TOKENIZE_F_DOT_NONTERM (1 << 4) /* If something starts looking like a float, like 1.2, force to be string token. * This lets you receive dotted-quads like 192.168.0.1 as string tokens, and * avoids illegal float format detection like 1.myserver.com */ #define LWS_TOKENIZE_F_NO_FLOATS (1 << 5) /* Instead of LWS_TOKZE_INTEGER, report integers as any other string token */ #define LWS_TOKENIZE_F_NO_INTEGERS (1 << 6) typedef enum { LWS_TOKZE_ERRS = 5, /* the number of errors defined */ LWS_TOKZE_ERR_BROKEN_UTF8 = -5, /* malformed or partial utf8 */ LWS_TOKZE_ERR_UNTERM_STRING = -4, /* ended while we were in "" */ LWS_TOKZE_ERR_MALFORMED_FLOAT = -3, /* like 0..1 or 0.1.1 */ LWS_TOKZE_ERR_NUM_ON_LHS = -2, /* like 123= or 0.1= */ LWS_TOKZE_ERR_COMMA_LIST = -1, /* like ",tok", or, "tok,," */ LWS_TOKZE_ENDED = 0, /* no more content */ /* Note: results have ordinal 1+, EOT is 0 and errors are < 0 */ LWS_TOKZE_DELIMITER, /* a delimiter appeared */ LWS_TOKZE_TOKEN, /* a token appeared */ LWS_TOKZE_INTEGER, /* an integer appeared */ LWS_TOKZE_FLOAT, /* a float appeared */ LWS_TOKZE_TOKEN_NAME_EQUALS, /* token [whitespace] = */ LWS_TOKZE_TOKEN_NAME_COLON, /* token [whitespace] : (only with LWS_TOKENIZE_F_AGG_COLON flag) */ LWS_TOKZE_QUOTED_STRING, /* "*", where * may have any char */ } lws_tokenize_elem; /* * helper enums to allow caller to enforce legal delimiter sequencing, eg * disallow "token,,token", "token,", and ",token" */ enum lws_tokenize_delimiter_tracking { LWSTZ_DT_NEED_FIRST_CONTENT, LWSTZ_DT_NEED_DELIM, LWSTZ_DT_NEED_NEXT_CONTENT, }; struct lws_tokenize { const char *start; /**< set to the start of the string to tokenize */ const char *token; /**< the start of an identified token or delimiter */ int len; /**< set to the length of the string to tokenize */ int token_len; /**< the length of the identied token or delimiter */ int flags; /**< optional LWS_TOKENIZE_F_ flags, or 0 */ int delim; }; /** * lws_tokenize() - breaks down a string into tokens and delimiters in-place * * \param ts: the lws_tokenize struct to init * \param start: the string to tokenize * \param flags: LWS_TOKENIZE_F_ option flags * * This initializes the tokenize struct to point to the given string, and * sets the length to 2GiB - 1 (so there must be a terminating NUL)... you can * override this requirement by setting ts.len yourself before using it. * * .delim is also initialized to LWSTZ_DT_NEED_FIRST_CONTENT. */ LWS_VISIBLE LWS_EXTERN void lws_tokenize_init(struct lws_tokenize *ts, const char *start, int flags); /** * lws_tokenize() - breaks down a string into tokens and delimiters in-place * * \param ts: the lws_tokenize struct with information and state on what to do * * The \p ts struct should have its start, len and flags members initialized to * reflect the string to be tokenized and any options. * * Then `lws_tokenize()` may be called repeatedly on the struct, returning one * of `lws_tokenize_elem` each time, and with the struct's `token` and * `token_len` members set to describe the content of the delimiter or token * payload each time. * * There are no allocations during the process. * * returns lws_tokenize_elem that was identified (LWS_TOKZE_ENDED means reached * the end of the string). */ LWS_VISIBLE LWS_EXTERN lws_tokenize_elem lws_tokenize(struct lws_tokenize *ts); /** * lws_tokenize_cstr() - copy token string to NUL-terminated buffer * * \param ts: pointer to lws_tokenize struct to operate on * \param str: destination buffer * \pparam max: bytes in destination buffer * * returns 0 if OK or nonzero if the string + NUL won't fit. */ LWS_VISIBLE LWS_EXTERN int lws_tokenize_cstr(struct lws_tokenize *ts, char *str, int max); libwebsockets-3.2.1/include/libwebsockets/lws-vfs.h000066400000000000000000000212761357643561300224370ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup fops file operation wrapping * * ##File operation wrapping * * Use these helper functions if you want to access a file from the perspective * of a specific wsi, which is usually the case. If you just want contextless * file access, use the fops callbacks directly with NULL wsi instead of these * helpers. * * If so, then it calls the platform handler or user overrides where present * (as defined in info->fops) * * The advantage from all this is user code can be portable for file operations * without having to deal with differences between platforms. */ //@{ /** struct lws_plat_file_ops - Platform-specific file operations * * These provide platform-agnostic ways to deal with filesystem access in the * library and in the user code. */ #if defined(LWS_WITH_ESP32) /* sdk preprocessor defs? compiler issue? gets confused with member names */ #define LWS_FOP_OPEN _open #define LWS_FOP_CLOSE _close #define LWS_FOP_SEEK_CUR _seek_cur #define LWS_FOP_READ _read #define LWS_FOP_WRITE _write #else #define LWS_FOP_OPEN open #define LWS_FOP_CLOSE close #define LWS_FOP_SEEK_CUR seek_cur #define LWS_FOP_READ read #define LWS_FOP_WRITE write #endif #define LWS_FOP_FLAGS_MASK ((1 << 23) - 1) #define LWS_FOP_FLAG_COMPR_ACCEPTABLE_GZIP (1 << 24) #define LWS_FOP_FLAG_COMPR_IS_GZIP (1 << 25) #define LWS_FOP_FLAG_MOD_TIME_VALID (1 << 26) #define LWS_FOP_FLAG_VIRTUAL (1 << 27) struct lws_plat_file_ops; struct lws_fop_fd { lws_filefd_type fd; /**< real file descriptor related to the file... */ const struct lws_plat_file_ops *fops; /**< fops that apply to this fop_fd */ void *filesystem_priv; /**< ignored by lws; owned by the fops handlers */ lws_filepos_t pos; /**< generic "position in file" */ lws_filepos_t len; /**< generic "length of file" */ lws_fop_flags_t flags; /**< copy of the returned flags */ uint32_t mod_time; /**< optional "modification time of file", only valid if .open() * set the LWS_FOP_FLAG_MOD_TIME_VALID flag */ }; typedef struct lws_fop_fd *lws_fop_fd_t; struct lws_fops_index { const char *sig; /* NULL or vfs signature, eg, ".zip/" */ uint8_t len; /* length of above string */ }; struct lws_plat_file_ops { lws_fop_fd_t (*LWS_FOP_OPEN)(const struct lws_plat_file_ops *fops, const char *filename, const char *vpath, lws_fop_flags_t *flags); /**< Open file (always binary access if plat supports it) * vpath may be NULL, or if the fops understands it, the point at which * the filename's virtual part starts. * *flags & LWS_FOP_FLAGS_MASK should be set to O_RDONLY or O_RDWR. * If the file may be gzip-compressed, * LWS_FOP_FLAG_COMPR_ACCEPTABLE_GZIP is set. If it actually is * gzip-compressed, then the open handler should OR * LWS_FOP_FLAG_COMPR_IS_GZIP on to *flags before returning. */ int (*LWS_FOP_CLOSE)(lws_fop_fd_t *fop_fd); /**< close file AND set the pointer to NULL */ lws_fileofs_t (*LWS_FOP_SEEK_CUR)(lws_fop_fd_t fop_fd, lws_fileofs_t offset_from_cur_pos); /**< seek from current position */ int (*LWS_FOP_READ)(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len); /**< Read from file, on exit *amount is set to amount actually read */ int (*LWS_FOP_WRITE)(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len); /**< Write to file, on exit *amount is set to amount actually written */ struct lws_fops_index fi[3]; /**< vfs path signatures implying use of this fops */ const struct lws_plat_file_ops *next; /**< NULL or next fops in list */ /* Add new things just above here ---^ * This is part of the ABI, don't needlessly break compatibility */ }; /** * lws_get_fops() - get current file ops * * \param context: context */ LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT lws_get_fops(struct lws_context *context); LWS_VISIBLE LWS_EXTERN void lws_set_fops(struct lws_context *context, const struct lws_plat_file_ops *fops); /** * lws_vfs_tell() - get current file position * * \param fop_fd: fop_fd we are asking about */ LWS_VISIBLE LWS_EXTERN lws_filepos_t LWS_WARN_UNUSED_RESULT lws_vfs_tell(lws_fop_fd_t fop_fd); /** * lws_vfs_get_length() - get current file total length in bytes * * \param fop_fd: fop_fd we are asking about */ LWS_VISIBLE LWS_EXTERN lws_filepos_t LWS_WARN_UNUSED_RESULT lws_vfs_get_length(lws_fop_fd_t fop_fd); /** * lws_vfs_get_mod_time() - get time file last modified * * \param fop_fd: fop_fd we are asking about */ LWS_VISIBLE LWS_EXTERN uint32_t LWS_WARN_UNUSED_RESULT lws_vfs_get_mod_time(lws_fop_fd_t fop_fd); /** * lws_vfs_file_seek_set() - seek relative to start of file * * \param fop_fd: fop_fd we are seeking in * \param offset: offset from start of file */ LWS_VISIBLE LWS_EXTERN lws_fileofs_t lws_vfs_file_seek_set(lws_fop_fd_t fop_fd, lws_fileofs_t offset); /** * lws_vfs_file_seek_end() - seek relative to end of file * * \param fop_fd: fop_fd we are seeking in * \param offset: offset from start of file */ LWS_VISIBLE LWS_EXTERN lws_fileofs_t lws_vfs_file_seek_end(lws_fop_fd_t fop_fd, lws_fileofs_t offset); extern struct lws_plat_file_ops fops_zip; /** * lws_plat_file_open() - open vfs filepath * * \param fops: file ops struct that applies to this descriptor * \param vfs_path: filename to open * \param flags: pointer to open flags * * The vfs_path is scanned for known fops signatures, and the open directed * to any matching fops open. * * User code should use this api to perform vfs opens. * * returns semi-opaque handle */ LWS_VISIBLE LWS_EXTERN lws_fop_fd_t LWS_WARN_UNUSED_RESULT lws_vfs_file_open(const struct lws_plat_file_ops *fops, const char *vfs_path, lws_fop_flags_t *flags); /** * lws_plat_file_close() - close file * * \param fop_fd: file handle to close */ static LWS_INLINE int lws_vfs_file_close(lws_fop_fd_t *fop_fd) { if (*fop_fd && (*fop_fd)->fops) return (*fop_fd)->fops->LWS_FOP_CLOSE(fop_fd); return 0; } /** * lws_plat_file_seek_cur() - close file * * * \param fop_fd: file handle * \param offset: position to seek to */ static LWS_INLINE lws_fileofs_t lws_vfs_file_seek_cur(lws_fop_fd_t fop_fd, lws_fileofs_t offset) { return fop_fd->fops->LWS_FOP_SEEK_CUR(fop_fd, offset); } /** * lws_plat_file_read() - read from file * * \param fop_fd: file handle * \param amount: how much to read (rewritten by call) * \param buf: buffer to write to * \param len: max length */ static LWS_INLINE int LWS_WARN_UNUSED_RESULT lws_vfs_file_read(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { return fop_fd->fops->LWS_FOP_READ(fop_fd, amount, buf, len); } /** * lws_plat_file_write() - write from file * * \param fop_fd: file handle * \param amount: how much to write (rewritten by call) * \param buf: buffer to read from * \param len: max length */ static LWS_INLINE int LWS_WARN_UNUSED_RESULT lws_vfs_file_write(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { return fop_fd->fops->LWS_FOP_WRITE(fop_fd, amount, buf, len); } /* these are the platform file operations implementations... they can * be called directly and used in fops arrays */ LWS_VISIBLE LWS_EXTERN lws_fop_fd_t _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, const char *vpath, lws_fop_flags_t *flags); LWS_VISIBLE LWS_EXTERN int _lws_plat_file_close(lws_fop_fd_t *fop_fd); LWS_VISIBLE LWS_EXTERN lws_fileofs_t _lws_plat_file_seek_cur(lws_fop_fd_t fop_fd, lws_fileofs_t offset); LWS_VISIBLE LWS_EXTERN int _lws_plat_file_read(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len); LWS_VISIBLE LWS_EXTERN int _lws_plat_file_write(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len); LWS_VISIBLE LWS_EXTERN int lws_alloc_vfs_file(struct lws_context *context, const char *filename, uint8_t **buf, lws_filepos_t *amount); //@} libwebsockets-3.2.1/include/libwebsockets/lws-write.h000066400000000000000000000216411357643561300227670ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup sending-data Sending data APIs related to writing data on a connection */ //@{ #if !defined(LWS_SIZEOFPTR) #define LWS_SIZEOFPTR ((int)sizeof (void *)) #endif #if defined(__x86_64__) #define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */ #else #define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */ #endif #define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \ ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n)) /* last 2 is for lws-meta */ #define LWS_PRE _LWS_PAD(4 + 10 + 2) /* used prior to 1.7 and retained for backward compatibility */ #define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE #define LWS_SEND_BUFFER_POST_PADDING 0 #define LWS_WRITE_RAW LWS_WRITE_HTTP /* * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. */ enum lws_write_protocol { LWS_WRITE_TEXT = 0, /**< Send a ws TEXT message,the pointer must have LWS_PRE valid * memory behind it. * * The receiver expects only valid utf-8 in the payload */ LWS_WRITE_BINARY = 1, /**< Send a ws BINARY message, the pointer must have LWS_PRE valid * memory behind it. * * Any sequence of bytes is valid */ LWS_WRITE_CONTINUATION = 2, /**< Continue a previous ws message, the pointer must have LWS_PRE valid * memory behind it */ LWS_WRITE_HTTP = 3, /**< Send HTTP content */ /* LWS_WRITE_CLOSE is handled by lws_close_reason() */ LWS_WRITE_PING = 5, LWS_WRITE_PONG = 6, /* Same as write_http but we know this write ends the transaction */ LWS_WRITE_HTTP_FINAL = 7, /* HTTP2 */ LWS_WRITE_HTTP_HEADERS = 8, /**< Send http headers (http2 encodes this payload and LWS_WRITE_HTTP * payload differently, http 1.x links also handle this correctly. so * to be compatible with both in the future,header response part should * be sent using this regardless of http version expected) */ LWS_WRITE_HTTP_HEADERS_CONTINUATION = 9, /**< Continuation of http/2 headers */ /****** add new things just above ---^ ******/ /* flags */ LWS_WRITE_BUFLIST = 0x20, /**< Don't actually write it... stick it on the output buflist and * write it as soon as possible. Useful if you learn you have to * write something, have the data to write to hand but the timing is * unrelated as to whether the connection is writable or not, and were * otherwise going to have to allocate a temp buffer and write it * later anyway */ LWS_WRITE_NO_FIN = 0x40, /**< This part of the message is not the end of the message */ LWS_WRITE_H2_STREAM_END = 0x80, /**< Flag indicates this packet should go out with STREAM_END if h2 * STREAM_END is allowed on DATA or HEADERS. */ LWS_WRITE_CLIENT_IGNORE_XOR_MASK = 0x80 /**< client packet payload goes out on wire unmunged * only useful for security tests since normal servers cannot * decode the content if used */ }; /* used with LWS_CALLBACK_CHILD_WRITE_VIA_PARENT */ struct lws_write_passthru { struct lws *wsi; unsigned char *buf; size_t len; enum lws_write_protocol wp; }; /** * lws_write() - Apply protocol then write data to client * * \param wsi: Websocket instance (available from user callback) * \param buf: The data to send. For data being sent on a websocket * connection (ie, not default http), this buffer MUST have * LWS_PRE bytes valid BEFORE the pointer. * This is so the protocol header data can be added in-situ. * \param len: Count of the data bytes in the payload starting from buf * \param protocol: Use LWS_WRITE_HTTP to reply to an http connection, and one * of LWS_WRITE_BINARY or LWS_WRITE_TEXT to send appropriate * data on a websockets connection. Remember to allow the extra * bytes before and after buf if LWS_WRITE_BINARY or LWS_WRITE_TEXT * are used. * * This function provides the way to issue data back to the client * for both http and websocket protocols. * * IMPORTANT NOTICE! * * When sending with websocket protocol * * LWS_WRITE_TEXT, * LWS_WRITE_BINARY, * LWS_WRITE_CONTINUATION, * LWS_WRITE_PING, * LWS_WRITE_PONG, * * or sending on http/2, * * the send buffer has to have LWS_PRE bytes valid BEFORE the buffer pointer you * pass to lws_write(). Since you'll probably want to use http/2 before too * long, it's wise to just always do this with lws_write buffers... LWS_PRE is * typically 16 bytes it's not going to hurt usually. * * start of alloc ptr passed to lws_write end of allocation * | | | * v <-- LWS_PRE bytes --> v v * [---------------- allocated memory ---------------] * (for lws use) [====== user buffer ======] * * This allows us to add protocol info before and after the data, and send as * one packet on the network without payload copying, for maximum efficiency. * * So for example you need this kind of code to use lws_write with a * 128-byte payload * * char buf[LWS_PRE + 128]; * * // fill your part of the buffer... for example here it's all zeros * memset(&buf[LWS_PRE], 0, 128); * * lws_write(wsi, &buf[LWS_PRE], 128, LWS_WRITE_TEXT); * * LWS_PRE is at least the frame nonce + 2 header + 8 length * LWS_SEND_BUFFER_POST_PADDING is deprecated, it's now 0 and can be left off. * The example apps no longer use it. * * Pad LWS_PRE to the CPU word size, so that word references * to the address immediately after the padding won't cause an unaligned access * error. Sometimes for performance reasons the recommended padding is even * larger than sizeof(void *). * * In the case of sending using websocket protocol, be sure to allocate * valid storage before and after buf as explained above. This scheme * allows maximum efficiency of sending data and protocol in a single * packet while not burdening the user code with any protocol knowledge. * * Return may be -1 for a fatal error needing connection close, or the * number of bytes sent. * * Truncated Writes * ================ * * The OS may not accept everything you asked to write on the connection. * * Posix defines POLLOUT indication from poll() to show that the connection * will accept more write data, but it doesn't specifiy how much. It may just * accept one byte of whatever you wanted to send. * * LWS will buffer the remainder automatically, and send it out autonomously. * * During that time, WRITABLE callbacks will be suppressed. * * This is to handle corner cases where unexpectedly the OS refuses what we * usually expect it to accept. You should try to send in chunks that are * almost always accepted in order to avoid the inefficiency of the buffering. */ LWS_VISIBLE LWS_EXTERN int lws_write(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol protocol); /* helper for case where buffer may be const */ #define lws_write_http(wsi, buf, len) \ lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP) /** * lws_write_ws_flags() - Helper for multi-frame ws message flags * * \param initial: the lws_write flag to use for the start fragment, eg, * LWS_WRITE_TEXT * \param is_start: nonzero if this is the first fragment of the message * \param is_end: nonzero if this is the last fragment of the message * * Returns the correct LWS_WRITE_ flag to use for each fragment of a message * in turn. */ static LWS_INLINE int lws_write_ws_flags(int initial, int is_start, int is_end) { int r; if (is_start) r = initial; else r = LWS_WRITE_CONTINUATION; if (!is_end) r |= LWS_WRITE_NO_FIN; return r; } /** * lws_raw_transaction_completed() - Helper for flushing before close * * \param wsi: the struct lws to operate on * * Returns -1 if the wsi can close now. However if there is buffered, unsent * data, the wsi is marked as to be closed when the output buffer data is * drained, and it returns 0. * * For raw cases where the transaction completed without failure, * `return lws_raw_transaction_completed(wsi)` should better be used than * return -1. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_raw_transaction_completed(struct lws *wsi); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-writeable.h000066400000000000000000000174211357643561300236140ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /** \defgroup callback-when-writeable Callback when writeable * * ##Callback When Writeable * * lws can only write data on a connection when it is able to accept more * data without blocking. * * So a basic requirement is we should only use the lws_write() apis when the * connection we want to write on says that he can accept more data. * * When lws cannot complete your send at the time, it will buffer the data * and send it in the background, suppressing any further WRITEABLE callbacks * on that connection until it completes. So it is important to write new * things in a new writeable callback. * * These apis reflect the various ways we can indicate we would like to be * called back when one or more connections is writeable. */ ///@{ /** * lws_callback_on_writable() - Request a callback when this socket * becomes able to be written to without * blocking * * \param wsi: Websocket connection instance to get callback for * * - Which: only this wsi * - When: when the individual connection becomes writeable * - What: LWS_CALLBACK_*_WRITEABLE */ LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable(struct lws *wsi); /** * lws_callback_on_writable_all_protocol() - Request a callback for all * connections using the given protocol when it * becomes possible to write to each socket without * blocking in turn. * * \param context: lws_context * \param protocol: Protocol whose connections will get callbacks * * - Which: connections using this protocol on ANY VHOST * - When: when the individual connection becomes writeable * - What: LWS_CALLBACK_*_WRITEABLE */ LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol); /** * lws_callback_on_writable_all_protocol_vhost() - Request a callback for * all connections on same vhost using the given protocol * when it becomes possible to write to each socket without * blocking in turn. * * \param vhost: Only consider connections on this lws_vhost * \param protocol: Protocol whose connections will get callbacks * * - Which: connections using this protocol on GIVEN VHOST ONLY * - When: when the individual connection becomes writeable * - What: LWS_CALLBACK_*_WRITEABLE */ LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost, const struct lws_protocols *protocol); /** * lws_callback_all_protocol() - Callback all connections using * the given protocol with the given reason * * \param context: lws_context * \param protocol: Protocol whose connections will get callbacks * \param reason: Callback reason index * * - Which: connections using this protocol on ALL VHOSTS * - When: before returning * - What: reason * * This isn't normally what you want... normally any update of connection- * specific information can wait until a network-related callback like rx, * writable, or close. */ LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol(struct lws_context *context, const struct lws_protocols *protocol, int reason); /** * lws_callback_all_protocol_vhost() - Callback all connections using * the given protocol with the given reason. This is * deprecated since v2.4: use lws_callback_all_protocol_vhost_args * * \param vh: Vhost whose connections will get callbacks * \param protocol: Which protocol to match. NULL means all. * \param reason: Callback reason index * * - Which: connections using this protocol on GIVEN VHOST ONLY * - When: now * - What: reason */ LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol_vhost(struct lws_vhost *vh, const struct lws_protocols *protocol, int reason) LWS_WARN_DEPRECATED; /** * lws_callback_all_protocol_vhost_args() - Callback all connections using * the given protocol with the given reason and args * * \param vh: Vhost whose connections will get callbacks * \param protocol: Which protocol to match. NULL means all. * \param reason: Callback reason index * \param argp: Callback "in" parameter * \param len: Callback "len" parameter * * - Which: connections using this protocol on GIVEN VHOST ONLY * - When: now * - What: reason */ LWS_VISIBLE int lws_callback_all_protocol_vhost_args(struct lws_vhost *vh, const struct lws_protocols *protocol, int reason, void *argp, size_t len); /** * lws_callback_vhost_protocols() - Callback all protocols enabled on a vhost * with the given reason * * \param wsi: wsi whose vhost will get callbacks * \param reason: Callback reason index * \param in: in argument to callback * \param len: len argument to callback * * - Which: connections using this protocol on same VHOST as wsi ONLY * - When: now * - What: reason * * This is deprecated since v2.5, use lws_callback_vhost_protocols_vhost() * which takes the pointer to the vhost directly without using or needing the * wsi. */ LWS_VISIBLE LWS_EXTERN int lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len) LWS_WARN_DEPRECATED; /** * lws_callback_vhost_protocols_vhost() - Callback all protocols enabled on a vhost * with the given reason * * \param vh: vhost that will get callbacks * \param reason: Callback reason index * \param in: in argument to callback * \param len: len argument to callback * * - Which: connections using this protocol on same VHOST as wsi ONLY * - When: now * - What: reason */ LWS_VISIBLE LWS_EXTERN int lws_callback_vhost_protocols_vhost(struct lws_vhost *vh, int reason, void *in, size_t len); LWS_VISIBLE LWS_EXTERN int lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len); /** * lws_get_socket_fd() - returns the socket file descriptor * * This is needed to use sendto() on UDP raw sockets * * \param wsi: Websocket connection instance */ LWS_VISIBLE LWS_EXTERN lws_sockfd_type lws_get_socket_fd(struct lws *wsi); /** * lws_get_peer_write_allowance() - get the amount of data writeable to peer * if known * * \param wsi: Websocket connection instance * * if the protocol does not have any guidance, returns -1. Currently only * http2 connections get send window information from this API. But your code * should use it so it can work properly with any protocol. * * If nonzero return is the amount of payload data the peer or intermediary has * reported it has buffer space for. That has NO relationship with the amount * of buffer space your OS can accept on this connection for a write action. * * This number represents the maximum you could send to the peer or intermediary * on this connection right now without the protocol complaining. * * lws manages accounting for send window updates and payload writes * automatically, so this number reflects the situation at the peer or * intermediary dynamically. */ LWS_VISIBLE LWS_EXTERN lws_fileofs_t lws_get_peer_write_allowance(struct lws *wsi); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-ws-close.h000066400000000000000000000131401357643561300233640ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup wsclose Websocket Close * * ##Websocket close frame control * * When we close a ws connection, we can send a reason code and a short * UTF-8 description back with the close packet. */ ///@{ /* * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. */ /** enum lws_close_status - RFC6455 close status codes */ enum lws_close_status { LWS_CLOSE_STATUS_NOSTATUS = 0, LWS_CLOSE_STATUS_NORMAL = 1000, /**< 1000 indicates a normal closure, meaning that the purpose for which the connection was established has been fulfilled. */ LWS_CLOSE_STATUS_GOINGAWAY = 1001, /**< 1001 indicates that an endpoint is "going away", such as a server going down or a browser having navigated away from a page. */ LWS_CLOSE_STATUS_PROTOCOL_ERR = 1002, /**< 1002 indicates that an endpoint is terminating the connection due to a protocol error. */ LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE = 1003, /**< 1003 indicates that an endpoint is terminating the connection because it has received a type of data it cannot accept (e.g., an endpoint that understands only text data MAY send this if it receives a binary message). */ LWS_CLOSE_STATUS_RESERVED = 1004, /**< Reserved. The specific meaning might be defined in the future. */ LWS_CLOSE_STATUS_NO_STATUS = 1005, /**< 1005 is a reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. It is designated for use in applications expecting a status code to indicate that no status code was actually present. */ LWS_CLOSE_STATUS_ABNORMAL_CLOSE = 1006, /**< 1006 is a reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. It is designated for use in applications expecting a status code to indicate that the connection was closed abnormally, e.g., without sending or receiving a Close control frame. */ LWS_CLOSE_STATUS_INVALID_PAYLOAD = 1007, /**< 1007 indicates that an endpoint is terminating the connection because it has received data within a message that was not consistent with the type of the message (e.g., non-UTF-8 [RFC3629] data within a text message). */ LWS_CLOSE_STATUS_POLICY_VIOLATION = 1008, /**< 1008 indicates that an endpoint is terminating the connection because it has received a message that violates its policy. This is a generic status code that can be returned when there is no other more suitable status code (e.g., 1003 or 1009) or if there is a need to hide specific details about the policy. */ LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE = 1009, /**< 1009 indicates that an endpoint is terminating the connection because it has received a message that is too big for it to process. */ LWS_CLOSE_STATUS_EXTENSION_REQUIRED = 1010, /**< 1010 indicates that an endpoint (client) is terminating the connection because it has expected the server to negotiate one or more extension, but the server didn't return them in the response message of the WebSocket handshake. The list of extensions that are needed SHOULD appear in the /reason/ part of the Close frame. Note that this status code is not used by the server, because it can fail the WebSocket handshake instead */ LWS_CLOSE_STATUS_UNEXPECTED_CONDITION = 1011, /**< 1011 indicates that a server is terminating the connection because it encountered an unexpected condition that prevented it from fulfilling the request. */ LWS_CLOSE_STATUS_TLS_FAILURE = 1015, /**< 1015 is a reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. It is designated for use in applications expecting a status code to indicate that the connection was closed due to a failure to perform a TLS handshake (e.g., the server certificate can't be verified). */ LWS_CLOSE_STATUS_CLIENT_TRANSACTION_DONE = 2000, /****** add new things just above ---^ ******/ LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999, }; /** * lws_close_reason - Set reason and aux data to send with Close packet * If you are going to return nonzero from the callback * requesting the connection to close, you can optionally * call this to set the reason the peer will be told if * possible. * * \param wsi: The websocket connection to set the close reason on * \param status: A valid close status from websocket standard * \param buf: NULL or buffer containing up to 124 bytes of auxiliary data * \param len: Length of data in \p buf to send */ LWS_VISIBLE LWS_EXTERN void lws_close_reason(struct lws *wsi, enum lws_close_status status, unsigned char *buf, size_t len); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-ws-ext.h000066400000000000000000000165251357643561300230710ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /*! \defgroup extensions Extension related functions * ##Extension releated functions * * Ws defines optional extensions, lws provides the ability to implement these * in user code if so desired. * * We provide one extensions permessage-deflate. */ ///@{ /* * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. */ enum lws_extension_callback_reasons { LWS_EXT_CB_CONSTRUCT = 4, LWS_EXT_CB_CLIENT_CONSTRUCT = 5, LWS_EXT_CB_DESTROY = 8, LWS_EXT_CB_PACKET_TX_PRESEND = 12, LWS_EXT_CB_PAYLOAD_TX = 21, LWS_EXT_CB_PAYLOAD_RX = 22, LWS_EXT_CB_OPTION_DEFAULT = 23, LWS_EXT_CB_OPTION_SET = 24, LWS_EXT_CB_OPTION_CONFIRM = 25, LWS_EXT_CB_NAMED_OPTION_SET = 26, /****** add new things just above ---^ ******/ }; /** enum lws_ext_options_types */ enum lws_ext_options_types { EXTARG_NONE, /**< does not take an argument */ EXTARG_DEC, /**< requires a decimal argument */ EXTARG_OPT_DEC /**< may have an optional decimal argument */ /* Add new things just above here ---^ * This is part of the ABI, don't needlessly break compatibility */ }; /** struct lws_ext_options - Option arguments to the extension. These are * used in the negotiation at ws upgrade time. * The helper function lws_ext_parse_options() * uses these to generate callbacks */ struct lws_ext_options { const char *name; /**< Option name, eg, "server_no_context_takeover" */ enum lws_ext_options_types type; /**< What kind of args the option can take */ /* Add new things just above here ---^ * This is part of the ABI, don't needlessly break compatibility */ }; /** struct lws_ext_option_arg */ struct lws_ext_option_arg { const char *option_name; /**< may be NULL, option_index used then */ int option_index; /**< argument ordinal to use if option_name missing */ const char *start; /**< value */ int len; /**< length of value */ }; /** * typedef lws_extension_callback_function() - Hooks to allow extensions to operate * \param context: Websockets context * \param ext: This extension * \param wsi: Opaque websocket instance pointer * \param reason: The reason for the call * \param user: Pointer to ptr to per-session user data allocated by library * \param in: Pointer used for some callback reasons * \param len: Length set for some callback reasons * * Each extension that is active on a particular connection receives * callbacks during the connection lifetime to allow the extension to * operate on websocket data and manage itself. * * Libwebsockets takes care of allocating and freeing "user" memory for * each active extension on each connection. That is what is pointed to * by the user parameter. * * LWS_EXT_CB_CONSTRUCT: called when the server has decided to * select this extension from the list provided by the client, * just before the server will send back the handshake accepting * the connection with this extension active. This gives the * extension a chance to initialize its connection context found * in user. * * LWS_EXT_CB_CLIENT_CONSTRUCT: same as LWS_EXT_CB_CONSTRUCT * but called when client is instantiating this extension. Some * extensions will work the same on client and server side and then * you can just merge handlers for both CONSTRUCTS. * * LWS_EXT_CB_DESTROY: called when the connection the extension was * being used on is about to be closed and deallocated. It's the * last chance for the extension to deallocate anything it has * allocated in the user data (pointed to by user) before the * user data is deleted. This same callback is used whether you * are in client or server instantiation context. * * LWS_EXT_CB_PACKET_TX_PRESEND: this works the same way as * LWS_EXT_CB_PACKET_RX_PREPARSE above, except it gives the * extension a chance to change websocket data just before it will * be sent out. Using the same lws_token pointer scheme in in, * the extension can change the buffer and the length to be * transmitted how it likes. Again if it wants to grow the * buffer safely, it should copy the data into its own buffer and * set the lws_tokens token pointer to it. * * LWS_EXT_CB_ARGS_VALIDATE: */ typedef int lws_extension_callback_function(struct lws_context *context, const struct lws_extension *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len); /** struct lws_extension - An extension we support */ struct lws_extension { const char *name; /**< Formal extension name, eg, "permessage-deflate" */ lws_extension_callback_function *callback; /**< Service callback */ const char *client_offer; /**< String containing exts and options client offers */ /* Add new things just above here ---^ * This is part of the ABI, don't needlessly break compatibility */ }; /** * lws_set_extension_option(): set extension option if possible * * \param wsi: websocket connection * \param ext_name: name of ext, like "permessage-deflate" * \param opt_name: name of option, like "rx_buf_size" * \param opt_val: value to set option to */ LWS_VISIBLE LWS_EXTERN int lws_set_extension_option(struct lws *wsi, const char *ext_name, const char *opt_name, const char *opt_val); /** * lws_ext_parse_options() - deal with parsing negotiated extension options * * \param ext: related extension struct * \param wsi: websocket connection * \param ext_user: per-connection extension private data * \param opts: list of supported options * \param o: option string to parse * \param len: length */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi, void *ext_user, const struct lws_ext_options *opts, const char *o, int len); /** lws_extension_callback_pm_deflate() - extension for RFC7692 * * \param context: lws context * \param ext: related lws_extension struct * \param wsi: websocket connection * \param reason: incoming callback reason * \param user: per-connection extension private data * \param in: pointer parameter * \param len: length parameter * * Built-in callback implementing RFC7692 permessage-deflate */ LWS_EXTERN int lws_extension_callback_pm_deflate(struct lws_context *context, const struct lws_extension *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len); /* * The internal exts are part of the public abi * If we add more extensions, publish the callback here ------v */ ///@} libwebsockets-3.2.1/include/libwebsockets/lws-ws-state.h000066400000000000000000000056271357643561300234120ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ /** \defgroup wsstatus Websocket status APIs * ##Websocket connection status APIs * * These provide information about ws connection or message status */ ///@{ /** * lws_send_pipe_choked() - tests if socket is writable or not * \param wsi: lws connection * * Allows you to check if you can write more on the socket */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_send_pipe_choked(struct lws *wsi); /** * lws_is_final_fragment() - tests if last part of ws message * * \param wsi: lws connection */ LWS_VISIBLE LWS_EXTERN int lws_is_final_fragment(struct lws *wsi); /** * lws_is_first_fragment() - tests if first part of ws message * * \param wsi: lws connection */ LWS_VISIBLE LWS_EXTERN int lws_is_first_fragment(struct lws *wsi); /** * lws_get_reserved_bits() - access reserved bits of ws frame * \param wsi: lws connection */ LWS_VISIBLE LWS_EXTERN unsigned char lws_get_reserved_bits(struct lws *wsi); /** * lws_partial_buffered() - find out if lws buffered the last write * \param wsi: websocket connection to check * * Returns 1 if you cannot use lws_write because the last * write on this connection is still buffered, and can't be cleared without * returning to the service loop and waiting for the connection to be * writeable again. * * If you will try to do >1 lws_write call inside a single * WRITEABLE callback, you must check this after every write and bail if * set, ask for a new writeable callback and continue writing from there. * * This is never set at the start of a writeable callback, but any write * may set it. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_partial_buffered(struct lws *wsi); /** * lws_frame_is_binary(): true if the current frame was sent in binary mode * * \param wsi: the connection we are inquiring about * * This is intended to be called from the LWS_CALLBACK_RECEIVE callback if * it's interested to see if the frame it's dealing with was sent in binary * mode. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_frame_is_binary(struct lws *wsi); ///@} libwebsockets-3.2.1/include/libwebsockets/lws-x509.h000066400000000000000000000242271357643561300223450ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * included from libwebsockets.h */ enum lws_tls_cert_info { LWS_TLS_CERT_INFO_VALIDITY_FROM, /**< fills .time with the time_t the cert validity started from */ LWS_TLS_CERT_INFO_VALIDITY_TO, /**< fills .time with the time_t the cert validity ends at */ LWS_TLS_CERT_INFO_COMMON_NAME, /**< fills up to len bytes of .ns.name with the cert common name */ LWS_TLS_CERT_INFO_ISSUER_NAME, /**< fills up to len bytes of .ns.name with the cert issuer name */ LWS_TLS_CERT_INFO_USAGE, /**< fills verified with a bitfield asserting the valid uses */ LWS_TLS_CERT_INFO_VERIFIED, /**< fills .verified with a bool representing peer cert validity, * call returns -1 if no cert */ LWS_TLS_CERT_INFO_OPAQUE_PUBLIC_KEY, /**< the certificate's public key, as an opaque bytestream. These * opaque bytestreams can only be compared with each other using the * same tls backend, ie, OpenSSL or mbedTLS. The different backends * produce different, incompatible representations for the same cert. */ }; union lws_tls_cert_info_results { unsigned int verified; time_t time; unsigned int usage; struct { int len; /* KEEP LAST... notice the [64] is only there because * name[] is not allowed in a union. The actual length of * name[] is arbitrary and is passed into the api using the * len parameter. Eg * * char big[1024]; * union lws_tls_cert_info_results *buf = * (union lws_tls_cert_info_results *)big; * * lws_tls_peer_cert_info(wsi, type, buf, sizeof(big) - * sizeof(*buf) + sizeof(buf->ns.name)); */ char name[64]; } ns; }; struct lws_x509_cert; struct lws_jwk; /** * lws_x509_create() - Allocate an lws_x509_cert object * * \param x509: pointer to lws_x509_cert pointer to be set to allocated object * * Allocates an lws_x509_cert object and set *x509 to point to it. */ LWS_VISIBLE LWS_EXTERN int lws_x509_create(struct lws_x509_cert **x509); /** * lws_x509_parse_from_pem() - Read one or more x509 certs in PEM format from memory * * \param x509: pointer to lws_x509_cert object * \param pem: pointer to PEM format content * \param len: length of PEM format content * * Parses PEM certificates in memory into a native x509 representation for the * TLS library. If there are multiple PEM certs concatenated, they are all * read into the same object and exist as a "chain". * * IMPORTANT for compatibility with mbedtls, the last used byte of \p pem * must be '\0' and the \p len must include it. * * Returns 0 if all went OK. */ LWS_VISIBLE LWS_EXTERN int lws_x509_parse_from_pem(struct lws_x509_cert *x509, const void *pem, size_t len); /** * lws_x509_verify() - Validate signing relationship between one or more certs * and a trusted CA cert * * \param x509: pointer to lws_x509_cert object, may contain multiple * \param trusted: a single, trusted cert object that we are checking for * \param common_name: NULL, or required CN (Common Name) of \p x509 * * Returns 0 if the cert or certs in \p x509 represent a complete chain that is * ultimately signed by the cert in \p trusted. Returns nonzero if that's not * the case. */ LWS_VISIBLE LWS_EXTERN int lws_x509_verify(struct lws_x509_cert *x509, struct lws_x509_cert *trusted, const char *common_name); /** * lws_x509_public_to_jwk() - Copy the public key out of a cert and into a JWK * * \param jwk: pointer to the jwk to initialize and set to the public key * \param x509: pointer to lws_x509_cert object that has the public key * \param curves: NULL to disallow EC, else a comma-separated list of valid * curves using the JWA naming, eg, "P-256,P-384,P-521". * \param rsabits: minimum number of RSA bits required in the cert if RSA * * Returns 0 if JWK was set to the certificate public key correctly and the * curve / the RSA key size was acceptable. Automatically produces an RSA or * EC JWK depending on what the cert had. */ LWS_VISIBLE LWS_EXTERN int lws_x509_public_to_jwk(struct lws_jwk *jwk, struct lws_x509_cert *x509, const char *curves, int rsabits); /** * lws_x509_jwk_privkey_pem() - Copy a private key PEM into a jwk that has the * public part already * * \param jwk: pointer to the jwk to initialize and set to the public key * \param pem: pointer to PEM private key in memory * \param len: length of PEM private key in memory * \param passphrase: NULL or passphrase needed to decrypt private key * * IMPORTANT for compatibility with mbedtls, the last used byte of \p pem * must be '\0' and the \p len must include it. * * Returns 0 if the private key was successfully added to the JWK, else * nonzero if failed. * * The PEM image in memory is zeroed down on both successful and failed exits. * The caller should take care to zero down passphrase if used. */ LWS_VISIBLE LWS_EXTERN int lws_x509_jwk_privkey_pem(struct lws_jwk *jwk, void *pem, size_t len, const char *passphrase); /** * lws_x509_destroy() - Destroy a previously allocated lws_x509_cert object * * \param x509: pointer to lws_x509_cert pointer * * Deallocates an lws_x509_cert object and sets its pointer to NULL. */ LWS_VISIBLE LWS_EXTERN void lws_x509_destroy(struct lws_x509_cert **x509); LWS_VISIBLE LWS_EXTERN int lws_x509_info(struct lws_x509_cert *x509, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len); /** * lws_tls_peer_cert_info() - get information from the peer's TLS cert * * \param wsi: the connection to query * \param type: one of LWS_TLS_CERT_INFO_ * \param buf: pointer to union to take result * \param len: when result is a string, the true length of buf->ns.name[] * * lws_tls_peer_cert_info() lets you get hold of information from the peer * certificate. * * Return 0 if there is a result in \p buf, or -1 indicating there was no cert * or another problem. * * This function works the same no matter if the TLS backend is OpenSSL or * mbedTLS. */ LWS_VISIBLE LWS_EXTERN int lws_tls_peer_cert_info(struct lws *wsi, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len); /** * lws_tls_vhost_cert_info() - get information from the vhost's own TLS cert * * \param vhost: the vhost to query * \param type: one of LWS_TLS_CERT_INFO_ * \param buf: pointer to union to take result * \param len: when result is a string, the true length of buf->ns.name[] * * lws_tls_vhost_cert_info() lets you get hold of information from the vhost * certificate. * * Return 0 if there is a result in \p buf, or -1 indicating there was no cert * or another problem. * * This function works the same no matter if the TLS backend is OpenSSL or * mbedTLS. */ LWS_VISIBLE LWS_EXTERN int lws_tls_vhost_cert_info(struct lws_vhost *vhost, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len); /** * lws_tls_acme_sni_cert_create() - creates a temp selfsigned cert * and attaches to a vhost * * \param vhost: the vhost to acquire the selfsigned cert * \param san_a: SAN written into the certificate * \param san_b: second SAN written into the certificate * * * Returns 0 if created and attached to the vhost. Returns -1 if problems and * frees all allocations before returning. * * On success, any allocations are destroyed at vhost destruction automatically. */ LWS_VISIBLE LWS_EXTERN int lws_tls_acme_sni_cert_create(struct lws_vhost *vhost, const char *san_a, const char *san_b); /** * lws_tls_acme_sni_csr_create() - creates a CSR and related private key PEM * * \param context: lws_context used for random * \param elements: array of LWS_TLS_REQ_ELEMENT_COUNT const char * * \param csr: buffer that will get the b64URL(ASN-1 CSR) * \param csr_len: max length of the csr buffer * \param privkey_pem: pointer to pointer allocated to hold the privkey_pem * \param privkey_len: pointer to size_t set to the length of the privkey_pem * * Creates a CSR according to the information in \p elements, and a private * RSA key used to sign the CSR. * * The outputs are the b64URL(ASN-1 CSR) into csr, and the PEM private key into * privkey_pem. * * Notice that \p elements points to an array of const char *s pointing to the * information listed in the enum above. If an entry is NULL or an empty * string, the element is set to "none" in the CSR. * * Returns 0 on success or nonzero for failure. */ LWS_VISIBLE LWS_EXTERN int lws_tls_acme_sni_csr_create(struct lws_context *context, const char *elements[], uint8_t *csr, size_t csr_len, char **privkey_pem, size_t *privkey_len); /** * lws_tls_cert_updated() - update every vhost using the given cert path * * \param context: our lws_context * \param certpath: the filepath to the certificate * \param keypath: the filepath to the private key of the certificate * \param mem_cert: copy of the cert in memory * \param len_mem_cert: length of the copy of the cert in memory * \param mem_privkey: copy of the private key in memory * \param len_mem_privkey: length of the copy of the private key in memory * * Checks every vhost to see if it is the using certificate described by the * the given filepaths. If so, it attempts to update the vhost ssl_ctx to use * the new certificate. * * Returns 0 on success or nonzero for failure. */ LWS_VISIBLE LWS_EXTERN int lws_tls_cert_updated(struct lws_context *context, const char *certpath, const char *keypath, const char *mem_cert, size_t len_mem_cert, const char *mem_privkey, size_t len_mem_privkey); libwebsockets-3.2.1/lib/000077500000000000000000000000001357643561300151405ustar00rootroot00000000000000libwebsockets-3.2.1/lib/README.md000066400000000000000000000011351357643561300164170ustar00rootroot00000000000000## Library sources layout Code that goes in the libwebsockets library itself lives down ./lib Path|Sources ---|--- lib/core|Core lws code related to generic fd and wsi servicing and management lib/event-libs|Code containing optional event-lib specific adaptations lib/jose|JOSE / JWS / JWK / JWE implementations lib/misc|Code for various mostly optional miscellaneous features lib/plat|Platform-specific adaptation code lib/roles|Code for specific optional wsi roles, eg, http/1, h2, ws, raw, etc lib/tls|Code supporting the various TLS libraries libwebsockets.h|Public API header for the whole of lws libwebsockets-3.2.1/lib/abstract/000077500000000000000000000000001357643561300167435ustar00rootroot00000000000000libwebsockets-3.2.1/lib/abstract/README.md000066400000000000000000000141701357643561300202250ustar00rootroot00000000000000# Abstract protocols and transports ## Overview Until now protocol implementations in lws have been done directly to the network-related apis inside lws. In an effort to separate out completely network implementation details from protocol specification, lws now supports "abstract protocols" and "abstract transports". ![lws_abstract overview](/doc-assets/abstract-overview.svg) The concept is that the implementation is split into two separate chunks of code hidden behind "ops" structs... the "abstract protocol" implementation is responsible for the logical protocol operation and reads and writes only memory buffers. The "abstract transport" implementation is responsible for sending and receiving buffers on some kind of transport, and again is hidden behind a standardized ops struct. In the system, both the abstract protocols and transports are found by their name. An actual "connection" is created by calling a generic api `lws_abs_bind_and_create_instance()` to instantiate the combination of a protocol and a transport. This makes it possible to confidently offer the same protocol on completely different transports, eg, like serial, or to wire up the protocol implementation to a test jig sending canned test vectors and confirming the response at buffer level, without any network. The abstract protocol itself has no relationship to the transport at all and is completely unchanged by changes to the transport. In addition, generic tokens to control settings in both the protocol and the transport are passed in at instantiation-time, eg, controlling the IP address targeted by the transport. lws SMTP client support has been rewritten to use the new scheme, and lws provides a raw socket transport built-in. ## Public API The public api for defining abstract protocols and transports is found at - [abstract.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/abstract/abstract.h) - [protocols.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/abstract/protocols.h) - [transports.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/abstract/transports.h) ### `lws_abs_t` The main structure that defines the abstraction is `lws_abs_t`, this is a name and then pointers to the protocol and transport, optional tokens to control both the protocol and transport, and pointers to private allocations for both the protocol and transport when instantiated. The transport is selected using ``` LWS_VISIBLE LWS_EXTERN const lws_abs_transport_t * lws_abs_transport_get_by_name(const char *name); ``` and similarly the protocol by ``` LWS_VISIBLE LWS_EXTERN const lws_abs_protocol_t * lws_abs_protocol_get_by_name(const char *name); ``` At the moment only "`raw-skt`" is defined as an lws built-in, athough you can also create your own mock transport the same way for creating test jigs. |transport op|meaning| |---|---| |`tx()`|transmit a buffer| |`client_conn()`|start a connection to a peer| |`close()`|request to close the connection to a peer| |`ask_for_writeable()`|request a `writeable()` callback when tx can be used| |`set_timeout()`|set a timeout that will close the connection if reached| |`state()`|check if the connection is established and can carry traffic| These are called by the protocol to get things done and make queries through the abstract transport. |protocol op|meaning| |---|---| |`accept()`|The peer has accepted the transport connection| |`rx()`|The peer has sent us some payload| |`writeable()`|The connection to the peer can take more tx| |`closed()`|The connection to the peer has closed| |`heartbeat()`|Called periodically even when no network events| These are called by the transport to inform the protocol of events and traffic. ### Instantiation The user fills an lws_abs_t and passes a pointer to it to `lws_abs_bind_and_create_instance()` to create an instantiation of the protocol + transport. ### `lws_token_map_t` The abstract protocol has no idea about a network or network addresses or ports or whatever... it may not even be hooked up to one. If the transport it is bound to wants things like that, they are passed in using an array of `lws_token_map_t` at instantiation time. For example this is passed to the raw socket protocol in the smtp client minimal example to control where it would connect to: ``` static const lws_token_map_t smtp_abs_tokens[] = { { .u = { .value = "127.0.0.1" }, .name_index = LTMI_PEER_DNS_ADDRESS, }, { .u = { .lvalue = 25l }, .name_index = LTMI_PEER_PORT, }}; ``` ## Steps for adding new abstract protocols - add the public header in `./include/libwebsockets/abstract/protocols/` - add a directory under `./lib/abstract/protocols/` - add your protocol sources in the new directory - in CMakeLists.txt: - add an `LWS_WITH_xxx` for your protocol - search for "using any abstract protocol" and add your `LWS_WITH_xxx` to the if so it also sets `LWS_WITH_ABSTRACT` if any set - add a clause to append your source to SOURCES if `LWS_WITH_xxx` enabled - add your `lws_abs_protocol` to the list `available_abs_protocols` in `./lib/abstract/abstract.c` ## Steps for adding new abstract transports - add the public header in `./include/libwebsockets/abstract/transports/` - add your transport sources under `./lib/abstract/transports/` - in CMakeLists.txt append your transport sources to SOURCES if `LWS_WITH_ABSTRACT` and any other cmake conditionals - add an extern for your transport `lws_protocols` in `./lib/core-net/private.h` - add your transport `lws_protocols` to `available_abstract_protocols` in `./lib/core-net/vhost.c` - add your `lws_abs_transport` to the list `available_abs_transports` in `./lib/abstract/abstract.c` # Protocol testing ## unit tests lws features an abstract transport designed to facilitate unit testing. This contains an lws_sequencer that performs the steps of tests involving sending the protocol test vector buffers and confirming the response of the protocol matches the test vectors. ## test-sequencer test-sequencer is a helper that sequences running an array of unit tests and collects the statistics and gives a PASS / FAIL result. See the SMTP client api test for an example of how to use. libwebsockets-3.2.1/lib/abstract/abstract.c000066400000000000000000000067251357643561300207240ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include #include extern const lws_abs_transport_t lws_abs_transport_cli_raw_skt, lws_abs_transport_cli_unit_test; #if defined(LWS_WITH_SMTP) extern const lws_abs_protocol_t lws_abs_protocol_smtp; #endif static const lws_abs_transport_t * const available_abs_transports[] = { &lws_abs_transport_cli_raw_skt, &lws_abs_transport_cli_unit_test, }; /* HACK: microsoft compiler can't handle zero length array definition */ #if defined(LWS_WITH_SMTP) static const lws_abs_protocol_t * const available_abs_protocols[] = { #if defined(LWS_WITH_SMTP) &lws_abs_protocol_smtp, #endif }; #endif const lws_abs_transport_t * lws_abs_transport_get_by_name(const char *name) { int n; for (n = 0; n < (int)LWS_ARRAY_SIZE(available_abs_transports); n++) if (!strcmp(name, available_abs_transports[n]->name)) return available_abs_transports[n]; lwsl_err("%s: cannot find '%s'\n", __func__, name); return NULL; } const lws_abs_protocol_t * lws_abs_protocol_get_by_name(const char *name) { #if defined(LWS_WITH_SMTP) int n; for (n = 0; n < (int)LWS_ARRAY_SIZE(available_abs_protocols); n++) if (!strcmp(name, available_abs_protocols[n]->name)) return available_abs_protocols[n]; #endif lwsl_err("%s: cannot find '%s'\n", __func__, name); return NULL; } const lws_token_map_t * lws_abs_get_token(const lws_token_map_t *token_map, short name_index) { if (!token_map) return NULL; do { if (token_map->name_index == name_index) return token_map; token_map++; } while (token_map->name_index); return NULL; } void lws_abs_destroy_instance(lws_abs_t **ai) { lws_abs_t *a = *ai; if (a->api) a->ap->destroy(&a->api); if (a->ati) a->at->destroy(&a->ati); lws_dll2_remove(&a->abstract_instances); *ai = NULL; free(a); } lws_abs_t * lws_abs_bind_and_create_instance(const lws_abs_t *abs) { size_t size = sizeof(lws_abs_t) + abs->ap->alloc + abs->at->alloc; lws_abs_t *ai; /* * since we know we will allocate the lws_abs_t, the protocol's * instance allocation, and the transport's instance allocation, * we merge it into a single heap allocation */ ai = lws_malloc(size, "abs inst"); if (!ai) return NULL; *ai = *abs; ai->ati = NULL; ai->api = (char *)ai + sizeof(lws_abs_t); if (ai->ap->create(ai)) { ai->api = NULL; goto bail; } ai->ati = (char *)ai->api + abs->ap->alloc; if (ai->at->create(ai)) { ai->ati = NULL; goto bail; } /* add us to the vhost's dll2 of instances */ lws_dll2_clear(&ai->abstract_instances); lws_dll2_add_head(&ai->abstract_instances, &ai->vh->abstract_instances_owner); return ai; bail: lws_abs_destroy_instance(&ai); return NULL; } libwebsockets-3.2.1/lib/abstract/private.h000066400000000000000000000015361357643561300205730ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ libwebsockets-3.2.1/lib/abstract/protocols/000077500000000000000000000000001357643561300207675ustar00rootroot00000000000000libwebsockets-3.2.1/lib/abstract/protocols/smtp/000077500000000000000000000000001357643561300217525ustar00rootroot00000000000000libwebsockets-3.2.1/lib/abstract/protocols/smtp/smtp.c000066400000000000000000000240211357643561300231000ustar00rootroot00000000000000/* * Abstract SMTP support for libwebsockets * * Copyright (C) 2016-2019 Andy Green * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "abstract/private.h" /** enum lwsgs_smtp_states - where we are in SMTP protocol sequence */ typedef enum lwsgs_smtp_states { LGSSMTP_IDLE, /**< awaiting new email */ LGSSMTP_CONNECTING, /**< opening tcp connection to MTA */ LGSSMTP_CONNECTED, /**< tcp connection to MTA is connected */ LGSSMTP_SENT_HELO, /**< sent the HELO */ LGSSMTP_SENT_FROM, /**< sent FROM */ LGSSMTP_SENT_TO, /**< sent TO */ LGSSMTP_SENT_DATA, /**< sent DATA request */ LGSSMTP_SENT_BODY, /**< sent the email body */ LGSSMTP_SENT_QUIT, /**< sent the session quit */ } lwsgs_smtp_states_t; /** struct lws_email - abstract context for performing SMTP operations */ typedef struct lws_smtp_client { struct lws_dll2_owner pending_owner; const struct lws_abs *abs; const char *helo; lwsgs_smtp_states_t estate; time_t email_connect_started; time_t retry_interval; time_t delivery_timeout; size_t email_queue_max; size_t max_content_size; unsigned char send_pending:1; } lws_smtp_client_t; static const short retcodes[] = { 0, /* idle */ 0, /* connecting */ 220, /* connected */ 250, /* helo */ 250, /* from */ 250, /* to */ 354, /* data */ 250, /* body */ 221, /* quit */ }; static void lws_smtp_client_state_transition(lws_smtp_client_t *c, lwsgs_smtp_states_t s) { lwsl_debug("%s: cli %p: state %d -> %d\n", __func__, c, c->estate, s); c->estate = s; } static void lws_smtp_client_kick_internal(lws_smtp_client_t *c) { lws_smtp_email_t *e; lws_dll2_t *d; char buf[64]; int n; if (c->estate != LGSSMTP_IDLE) return; /* is there something to do? */ again: d = lws_dll2_get_head(&c->pending_owner); if (!d) return; e = lws_container_of(d, lws_smtp_email_t, list); /* do we need to time out this guy? */ if ((time_t)lws_now_secs() - e->added > (time_t)c->delivery_timeout) { lwsl_err("%s: timing out email\n", __func__); lws_dll2_remove(&e->list); n = lws_snprintf(buf, sizeof(buf), "0 Timed out retrying send"); e->done(e, buf, n); if (lws_dll2_get_head(&c->pending_owner)) goto again; return; } /* is it time for his retry yet? */ if (e->last_try && (time_t)lws_now_secs() - e->last_try < (time_t)c->retry_interval) { /* no... send him to the tail */ lws_dll2_remove(&e->list); lws_dll2_add_tail(&e->list, &c->pending_owner); return; } /* ask the transport if we have a connection to the server ongoing */ if (c->abs->at->state(c->abs->ati)) { /* * there's a connection, it could be still trying to connect * or established */ c->abs->at->ask_for_writeable(c->abs->ati); return; } /* there's no existing connection */ lws_smtp_client_state_transition(c, LGSSMTP_CONNECTING); if (c->abs->at->client_conn(c->abs)) { lwsl_err("%s: failed to connect\n", __func__); return; } e->tries++; e->last_try = lws_now_secs(); } /* * we became connected */ static int lws_smtp_client_abs_accept(lws_abs_protocol_inst_t *api) { lws_smtp_client_t *c = (lws_smtp_client_t *)api; lws_smtp_client_state_transition(c, LGSSMTP_CONNECTED); return 0; } static int lws_smtp_client_abs_rx(lws_abs_protocol_inst_t *api, uint8_t *buf, size_t len) { lws_smtp_client_t *c = (lws_smtp_client_t *)api; lws_smtp_email_t *e; lws_dll2_t *pd2; int n; pd2 = lws_dll2_get_head(&c->pending_owner); if (!pd2) return 0; e = lws_container_of(pd2, lws_smtp_email_t, list); if (!e) return 0; n = atoi((char *)buf); if (n != retcodes[c->estate]) { lwsl_notice("%s: bad response from server: %d (state %d) %.*s\n", __func__, n, c->estate, (int)len, buf); lws_dll2_remove(&e->list); lws_dll2_add_tail(&e->list, &c->pending_owner); lws_smtp_client_state_transition(c, LGSSMTP_IDLE); lws_smtp_client_kick_internal(c); return 0; } if (c->estate == LGSSMTP_SENT_QUIT) { lwsl_debug("%s: done\n", __func__); lws_smtp_client_state_transition(c, LGSSMTP_IDLE); lws_dll2_remove(&e->list); if (e->done && e->done(e, "sent OK", 7)) return 1; return 1; } c->send_pending = 1; c->abs->at->ask_for_writeable(c->abs->ati); return 0; } static int lws_smtp_client_abs_writeable(lws_abs_protocol_inst_t *api, size_t budget) { lws_smtp_client_t *c = (lws_smtp_client_t *)api; char b[256 + LWS_PRE], *p = b + LWS_PRE; lws_smtp_email_t *e; lws_dll2_t *pd2; int n; pd2 = lws_dll2_get_head(&c->pending_owner); if (!pd2) return 0; e = lws_container_of(pd2, lws_smtp_email_t, list); if (!e) return 0; if (!c->send_pending) return 0; c->send_pending = 0; lwsl_debug("%s: writing response for state %d\n", __func__, c->estate); switch (c->estate) { case LGSSMTP_CONNECTED: n = lws_snprintf(p, sizeof(b) - LWS_PRE, "HELO %s\n", c->helo); lws_smtp_client_state_transition(c, LGSSMTP_SENT_HELO); break; case LGSSMTP_SENT_HELO: n = lws_snprintf(p, sizeof(b) - LWS_PRE, "MAIL FROM: <%s>\n", e->email_from); lws_smtp_client_state_transition(c, LGSSMTP_SENT_FROM); break; case LGSSMTP_SENT_FROM: n = lws_snprintf(p, sizeof(b) - LWS_PRE, "RCPT TO: <%s>\n", e->email_to); lws_smtp_client_state_transition(c, LGSSMTP_SENT_TO); break; case LGSSMTP_SENT_TO: n = lws_snprintf(p, sizeof(b) - LWS_PRE, "DATA\n"); lws_smtp_client_state_transition(c, LGSSMTP_SENT_DATA); break; case LGSSMTP_SENT_DATA: p = (char *)e->payload; n = strlen(e->payload); lws_smtp_client_state_transition(c, LGSSMTP_SENT_BODY); break; case LGSSMTP_SENT_BODY: n = lws_snprintf(p, sizeof(b) - LWS_PRE, "quit\n"); lws_smtp_client_state_transition(c, LGSSMTP_SENT_QUIT); break; case LGSSMTP_SENT_QUIT: return 0; default: return 0; } //puts(p); c->abs->at->tx(c->abs->ati, (uint8_t *)p, n); return 0; } static int lws_smtp_client_abs_closed(lws_abs_protocol_inst_t *api) { lws_smtp_client_t *c = (lws_smtp_client_t *)api; if (c) lws_smtp_client_state_transition(c, LGSSMTP_IDLE); return 0; } static int lws_smtp_client_abs_heartbeat(lws_abs_protocol_inst_t *api) { lws_smtp_client_t *c = (lws_smtp_client_t *)api; lws_smtp_client_kick_internal(c); return 0; } lws_smtp_email_t * lws_smtp_client_alloc_email_helper(const char *payload, size_t payload_len, const char *sender, const char *recipient, const char *extra, size_t extra_len, void *data, int (*done)(struct lws_smtp_email *e, void *buf, size_t len)) { size_t ls = strlen(sender), lr = strlen(recipient); lws_smtp_email_t *em; char *p; em = malloc(sizeof(*em) + payload_len + ls + lr + extra_len + 4); if (!em) { lwsl_err("OOM\n"); return NULL; } p = (char *)&em[1]; memset(em, 0, sizeof(*em)); em->data = data; em->done = done; em->email_from = p; memcpy(p, sender, ls + 1); p += ls + 1; em->email_to = p; memcpy(p, recipient, lr + 1); p += lr + 1; em->payload = p; memcpy(p, payload, payload_len + 1); p += payload_len + 1; if (extra) { em->extra = p; memcpy(p, extra, extra_len + 1); } return em; } int lws_smtp_client_add_email(lws_abs_t *instance, lws_smtp_email_t *e) { lws_smtp_client_t *c = (lws_smtp_client_t *)instance->api; if (c->pending_owner.count > c->email_queue_max) { lwsl_err("%s: email queue at limit of %d\n", __func__, (int)c->email_queue_max); return 1; } e->added = lws_now_secs(); e->last_try = 0; e->tries = 0; lws_dll2_clear(&e->list); lws_dll2_add_tail(&e->list, &c->pending_owner); lws_smtp_client_kick_internal(c); return 0; } void lws_smtp_client_kick(lws_abs_t *instance) { lws_smtp_client_t *c = (lws_smtp_client_t *)instance->api; lws_smtp_client_kick_internal(c); } static int lws_smtp_client_create(const lws_abs_t *ai) { lws_smtp_client_t *c = (lws_smtp_client_t *)ai->api; const lws_token_map_t *tm; memset(c, 0, sizeof(*c)); c->abs = ai; tm = lws_abs_get_token(ai->ap_tokens, LTMI_PSMTP_V_HELO); if (!tm) { lwsl_err("%s: LTMI_PSMTP_V_HELO is required\n", __func__); return 1; } c->helo = tm->u.value; c->email_queue_max = 8; c->retry_interval = 15 * 60; c->delivery_timeout = 12 * 60 * 60; tm = lws_abs_get_token(ai->ap_tokens, LTMI_PSMTP_LV_EMAIL_QUEUE_MAX); if (tm) c->email_queue_max = tm->u.lvalue; tm = lws_abs_get_token(ai->ap_tokens, LTMI_PSMTP_LV_RETRY_INTERVAL); if (tm) c->retry_interval = tm->u.lvalue; tm = lws_abs_get_token(ai->ap_tokens, LTMI_PSMTP_LV_DELIVERY_TIMEOUT); if (tm) c->delivery_timeout = tm->u.lvalue; lws_smtp_client_state_transition(c, LGSSMTP_IDLE); return 0; } static int cleanup(struct lws_dll2 *d, void *user) { lws_smtp_email_t *e; e = lws_container_of(d, lws_smtp_email_t, list); if (e->done && e->done(e, "destroying", 10)) return 1; return 0; } static void lws_smtp_client_destroy(lws_abs_protocol_inst_t **_c) { lws_smtp_client_t *c = (lws_smtp_client_t *)*_c; if (!c) return; lws_dll2_foreach_safe(&c->pending_owner, NULL, cleanup); /* * We don't free anything because the abstract layer combined our * allocation with that of the instance, and it will free the whole * thing after this. */ *_c = NULL; } /* events the transport invokes (handled by abstract protocol) */ const lws_abs_protocol_t lws_abs_protocol_smtp = { .name = "smtp", .alloc = sizeof(lws_smtp_client_t), .create = lws_smtp_client_create, .destroy = lws_smtp_client_destroy, .accept = lws_smtp_client_abs_accept, .rx = lws_smtp_client_abs_rx, .writeable = lws_smtp_client_abs_writeable, .closed = lws_smtp_client_abs_closed, .heartbeat = lws_smtp_client_abs_heartbeat, }; libwebsockets-3.2.1/lib/abstract/test-sequencer.c000066400000000000000000000154251357643561300220650ustar00rootroot00000000000000/* * libwebsockets lib/abstract/test-sequencer.c * * Copyright (C) 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * * A helper for running multiple unit tests against abstract protocols. * * An lws_seq_t is used to base its actions in the event loop and manage * the sequencing of multiple tests. A new abstract connection is instantiated * for each test using te */ #include struct lws_seq_test_sequencer { lws_abs_t original_abs; lws_test_sequencer_args_t args; struct lws_context *context; struct lws_vhost *vhost; lws_seq_t *unit_test_seq; /* holds the per-test token for the unit-test transport to consume */ lws_token_map_t uttt[4]; lws_abs_t *instance; int state; }; /* sequencer messages specific to this sequencer */ enum { SEQ_MSG_PASS = LWSSEQ_USER_BASE, SEQ_MSG_FAIL, SEQ_MSG_FAIL_TIMEOUT, }; /* * We get called back when the unit test transport has decided if the test * passed or failed. We get the priv, and report to the sequencer message queue * what the result was. */ static int unit_test_result_cb(const void *cb_user, int disposition) { const struct lws_seq_test_sequencer *s = (const struct lws_seq_test_sequencer *)cb_user; int r; lwsl_debug("%s: disp %d\n", __func__, disposition); switch (disposition) { case LPE_FAILED_UNEXPECTED_PASS: case LPE_FAILED_UNEXPECTED_CLOSE: case LPE_FAILED: r = SEQ_MSG_FAIL; break; case LPE_FAILED_UNEXPECTED_TIMEOUT: r = SEQ_MSG_FAIL_TIMEOUT; break; case LPE_SUCCEEDED: r = SEQ_MSG_PASS; break; default: assert(0); return -1; } lws_seq_queue_event(s->unit_test_seq, r, NULL, NULL); ((struct lws_seq_test_sequencer *)s)->instance = NULL; return 0; } /* * We receive the unit test result callback's messages via the message queue. * * We log the results and always move on to the next test until there are no * more tests. */ static lws_seq_cb_return_t test_sequencer_cb(struct lws_sequencer *seq, void *user, int event, void *data, void *aux) { struct lws_seq_test_sequencer *s = (struct lws_seq_test_sequencer *)user; lws_unit_test_packet_t *exp = (lws_unit_test_packet_t *) s->args.tests[s->state].expect_array; lws_abs_t test_abs; switch ((int)event) { case LWSSEQ_CREATED: /* our sequencer just got started */ lwsl_notice("%s: %s: created\n", __func__, lws_seq_name(seq)); s->state = 0; /* first thing we'll do is the first url */ goto step; case LWSSEQ_DESTROYED: /* * We are going down... if we have a child unit test sequencer * still around inform and destroy it */ if (s->instance) { s->instance->at->close(s->instance); s->instance = NULL; } break; case SEQ_MSG_FAIL_TIMEOUT: /* current step timed out */ if (exp->flags & LWS_AUT_EXPECT_SHOULD_TIMEOUT) { lwsl_user("%s: test %d got expected timeout\n", __func__, s->state); goto pass; } lwsl_user("%s: seq timed out at step %d\n", __func__, s->state); s->args.results[s->state] = LPE_FAILED_UNEXPECTED_TIMEOUT; goto done; /* always move on to the next test */ case SEQ_MSG_FAIL: if (exp->flags & LWS_AUT_EXPECT_SHOULD_FAIL) { /* * in this case, we expected to fail like this, it's OK */ lwsl_user("%s: test %d failed as expected\n", __func__, s->state); goto pass; /* always move on to the next test */ } lwsl_user("%s: seq failed at step %d\n", __func__, s->state); s->args.results[s->state] = LPE_FAILED; goto done; /* always move on to the next test */ case SEQ_MSG_PASS: if (exp->flags & (LWS_AUT_EXPECT_SHOULD_FAIL | LWS_AUT_EXPECT_SHOULD_TIMEOUT)) { /* * In these specific cases, done would be a failure, * we expected to timeout or fail */ lwsl_user("%s: seq failed at step %d\n", __func__, s->state); s->args.results[s->state] = LPE_FAILED_UNEXPECTED_PASS; goto done; /* always move on to the next test */ } lwsl_info("%s: seq done test %d\n", __func__, s->state); pass: (*s->args.count_passes)++; s->args.results[s->state] = LPE_SUCCEEDED; done: lws_seq_timeout_us(lws_seq_from_user(s), LWSSEQTO_NONE); s->state++; step: if (!s->args.tests[s->state].name) { /* the sequence has completed */ lwsl_user("%s: sequence completed OK\n", __func__); if (s->args.cb) s->args.cb(s->args.cb_user); return LWSSEQ_RET_DESTROY; } lwsl_info("%s: starting test %d\n", __func__, s->state); if (s->state >= s->args.results_max) { lwsl_err("%s: results array is too small\n", __func__); return LWSSEQ_RET_DESTROY; } test_abs = s->original_abs; s->uttt[0].name_index = LTMI_PEER_V_EXPECT_TEST; s->uttt[0].u.value = (void *)&s->args.tests[s->state]; s->uttt[1].name_index = LTMI_PEER_V_EXPECT_RESULT_CB; s->uttt[1].u.value = (void *)unit_test_result_cb; s->uttt[2].name_index = LTMI_PEER_V_EXPECT_RESULT_CB_ARG; s->uttt[2].u.value = (void *)s; /* give the unit test transport the test tokens */ test_abs.at_tokens = s->uttt; s->instance = lws_abs_bind_and_create_instance(&test_abs); if (!s->instance) { lwsl_notice("%s: failed to create step %d unit test\n", __func__, s->state); return LWSSEQ_RET_DESTROY; } (*s->args.count_tests)++; break; default: break; } return LWSSEQ_RET_CONTINUE; } /* * Creates an lws_sequencer to manage the test sequence */ int lws_abs_unit_test_sequencer(const lws_test_sequencer_args_t *args) { struct lws_seq_test_sequencer *s; lws_seq_t *seq; lws_seq_info_t i; memset(&i, 0, sizeof(i)); i.context = args->abs->vh->context; i.user_size = sizeof(struct lws_seq_test_sequencer); i.puser = (void **)&s; i.cb = test_sequencer_cb; i.name = "test-seq"; /* * Create a sequencer in the event loop to manage the tests */ seq = lws_seq_create(&i); if (!seq) { lwsl_err("%s: unable to create sequencer\n", __func__); return 1; } /* * Take a copy of the original lws_abs_t we were passed so we can use * it as the basis of the lws_abs_t we create the individual tests with */ s->original_abs = *args->abs; s->args = *args; s->context = args->abs->vh->context; s->vhost = args->abs->vh; s->unit_test_seq = seq; *s->args.count_tests = 0; *s->args.count_passes = 0; return 0; } libwebsockets-3.2.1/lib/abstract/transports/000077500000000000000000000000001357643561300211625ustar00rootroot00000000000000libwebsockets-3.2.1/lib/abstract/transports/raw-skt.c000066400000000000000000000201041357643561300227130ustar00rootroot00000000000000/* * libwebsockets lib/abstract/transports/raw-skt.c * * Copyright (C) 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "abstract/private.h" typedef struct lws_abstxp_raw_skt_priv { struct lws_abs *abs; struct lws *wsi; lws_dll2_t same_abs_transport_list; uint8_t established:1; uint8_t connecting:1; } abs_raw_skt_priv_t; struct vhd { lws_dll2_owner_t owner; }; static int heartbeat_cb(struct lws_dll2 *d, void *user) { abs_raw_skt_priv_t *priv = lws_container_of(d, abs_raw_skt_priv_t, same_abs_transport_list); if (priv->abs->ap->heartbeat) priv->abs->ap->heartbeat(priv->abs->api); return 0; } static int callback_abs_client_raw_skt(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { abs_raw_skt_priv_t *priv = (abs_raw_skt_priv_t *)user; struct vhd *vhd = (struct vhd *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd)); if (!vhd) return 1; lws_timed_callback_vh_protocol(lws_get_vhost(wsi), lws_get_protocol(wsi), LWS_CALLBACK_USER, 1); break; case LWS_CALLBACK_USER: /* * This comes at 1Hz without a wsi context, so there is no * valid priv. We need to track the live abstract objects that * are using our abstract protocol, and pass the heartbeat * through to the ones that care. */ if (!vhd) break; lws_dll2_foreach_safe(&vhd->owner, NULL, heartbeat_cb); lws_timed_callback_vh_protocol(lws_get_vhost(wsi), lws_get_protocol(wsi), LWS_CALLBACK_USER, 1); break; case LWS_CALLBACK_RAW_CONNECTED: lwsl_debug("LWS_CALLBACK_RAW_CONNECTED\n"); priv->connecting = 0; priv->established = 1; if (priv->abs->ap->accept) priv->abs->ap->accept(priv->abs->api); if (wsi->seq) /* * we are bound to a sequencer who wants to know about * our lifecycle events */ lws_seq_queue_event(wsi->seq, LWSSEQ_WSI_CONNECTED, wsi, NULL); break; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_user("CONNECTION_ERROR\n"); if (in) lwsl_user(" %s\n", (const char *)in); if (wsi->seq) /* * we are bound to a sequencer who wants to know about * our lifecycle events */ lws_seq_queue_event(wsi->seq, LWSSEQ_WSI_CONN_FAIL, wsi, NULL); goto close_path; /* fallthru */ case LWS_CALLBACK_RAW_CLOSE: if (!user) break; if (wsi->seq) /* * we are bound to a sequencer who wants to know about * our lifecycle events */ lws_seq_queue_event(wsi->seq, LWSSEQ_WSI_CONN_CLOSE, wsi, NULL); close_path: lwsl_debug("LWS_CALLBACK_RAW_CLOSE\n"); priv->established = 0; priv->connecting = 0; if (priv->abs && priv->abs->ap->closed) priv->abs->ap->closed(priv->abs->api); lws_set_wsi_user(wsi, NULL); break; case LWS_CALLBACK_RAW_RX: lwsl_debug("LWS_CALLBACK_RAW_RX (%d)\n", (int)len); return !!priv->abs->ap->rx(priv->abs->api, in, len); case LWS_CALLBACK_RAW_WRITEABLE: lwsl_debug("LWS_CALLBACK_RAW_WRITEABLE\n"); priv->abs->ap->writeable(priv->abs->api, lws_get_peer_write_allowance(priv->wsi)); break; case LWS_CALLBACK_RAW_SKT_BIND_PROTOCOL: lws_dll2_add_tail(&priv->same_abs_transport_list, &vhd->owner); break; case LWS_CALLBACK_RAW_SKT_DROP_PROTOCOL: lws_dll2_remove(&priv->same_abs_transport_list); break; default: break; } return 0; } static int lws_atcrs_close(lws_abs_transport_inst_t *ati) { abs_raw_skt_priv_t *priv = (abs_raw_skt_priv_t *)ati; struct lws *wsi = priv->wsi; if (!priv->wsi) return 0; if (!lws_raw_transaction_completed(priv->wsi)) return 0; priv->wsi = NULL; lws_set_timeout(wsi, 1, LWS_TO_KILL_SYNC); /* priv is destroyed in the CLOSE callback */ return 0; } const struct lws_protocols protocol_abs_client_raw_skt = { "lws-abs-cli-raw-skt", callback_abs_client_raw_skt, 0, 1024, 1024, NULL, 0 }; static int lws_atcrs_tx(lws_abs_transport_inst_t *ati, uint8_t *buf, size_t len) { abs_raw_skt_priv_t *priv = (abs_raw_skt_priv_t *)ati; if (!priv->wsi) { lwsl_err("%s: NULL priv->wsi\n", __func__); return 1; } lwsl_debug("%s: priv %p, wsi %p, ro %p\n", __func__, priv, priv->wsi, priv->wsi->role_ops); if (lws_write(priv->wsi, buf, len, LWS_WRITE_RAW) < 0) lws_atcrs_close(ati); return 0; } #if !defined(LWS_WITHOUT_CLIENT) static int lws_atcrs_client_conn(const lws_abs_t *abs) { abs_raw_skt_priv_t *priv = (abs_raw_skt_priv_t *)abs->ati; struct lws_client_connect_info i; const lws_token_map_t *tm; if (priv->connecting) return 0; if (priv->established) { lws_set_timeout(priv->wsi, PENDING_TIMEOUT_CLIENT_CONN_IDLE, 5); return 0; } memset(&i, 0, sizeof(i)); /* address and port are passed-in using the abstract transport tokens */ tm = lws_abs_get_token(abs->at_tokens, LTMI_PEER_V_DNS_ADDRESS); if (!tm) { lwsl_notice("%s: raw_skt needs LTMI_PEER_V_DNS_ADDRESS\n", __func__); return 1; } i.address = tm->u.value; tm = lws_abs_get_token(abs->at_tokens, LTMI_PEER_LV_PORT); if (!tm) { lwsl_notice("%s: raw_skt needs LTMI_PEER_LV_PORT\n", __func__); return 1; } i.port = tm->u.lvalue; /* optional */ i.ssl_connection = 0; tm = lws_abs_get_token(abs->at_tokens, LTMI_PEER_LV_TLS_FLAGS); if (tm) i.ssl_connection = tm->u.lvalue; lwsl_debug("%s: raw_skt priv %p connecting to %s:%u %p\n", __func__, priv, i.address, i.port, abs->vh->context); i.path = ""; i.method = "RAW"; i.vhost = abs->vh; i.userdata = priv; i.host = i.address; i.pwsi = &priv->wsi; i.origin = i.address; i.context = abs->vh->context; i.local_protocol_name = "lws-abs-cli-raw-skt"; i.seq = abs->seq; i.opaque_user_data = abs->opaque_user_data; priv->wsi = lws_client_connect_via_info(&i); if (!priv->wsi) return 1; priv->connecting = 1; return 0; } #endif static int lws_atcrs_ask_for_writeable(lws_abs_transport_inst_t *ati) { abs_raw_skt_priv_t *priv = (abs_raw_skt_priv_t *)ati; if (!priv->wsi || !priv->established) return 1; lws_callback_on_writable(priv->wsi); return 0; } static int lws_atcrs_create(struct lws_abs *ai) { abs_raw_skt_priv_t *at = (abs_raw_skt_priv_t *)ai->ati; memset(at, 0, sizeof(*at)); at->abs = ai; return 0; } static void lws_atcrs_destroy(lws_abs_transport_inst_t **pati) { /* * We don't free anything because the abstract layer combined our * allocation with that of the instance, and it will free the whole * thing after this. */ *pati = NULL; } static int lws_atcrs_set_timeout(lws_abs_transport_inst_t *ati, int reason, int secs) { abs_raw_skt_priv_t *priv = (abs_raw_skt_priv_t *)ati; lws_set_timeout(priv->wsi, reason, secs); return 0; } static int lws_atcrs_state(lws_abs_transport_inst_t *ati) { abs_raw_skt_priv_t *priv = (abs_raw_skt_priv_t *)ati; if (!priv || !priv->wsi || (!priv->established && !priv->connecting)) return 0; return 1; } const lws_abs_transport_t lws_abs_transport_cli_raw_skt = { .name = "raw_skt", .alloc = sizeof(abs_raw_skt_priv_t), .create = lws_atcrs_create, .destroy = lws_atcrs_destroy, .tx = lws_atcrs_tx, #if defined(LWS_WITHOUT_CLIENT) .client_conn = NULL, #else .client_conn = lws_atcrs_client_conn, #endif .close = lws_atcrs_close, .ask_for_writeable = lws_atcrs_ask_for_writeable, .set_timeout = lws_atcrs_set_timeout, .state = lws_atcrs_state, }; libwebsockets-3.2.1/lib/abstract/transports/unit-test.c000066400000000000000000000276321357643561300232740ustar00rootroot00000000000000/* * libwebsockets lib/abstract/transports/unit-test.c * * Copyright (C) 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * * An abstract transport that is useful for unit testing an abstract protocol. * It doesn't actually connect to anything, but checks the protocol's response * to provided canned packets from an array of test vectors. */ #include "core/private.h" #include "abstract/private.h" /* this is the transport priv instantiated at abs->ati */ typedef struct lws_abstxp_unit_test_priv { char note[128]; struct lws_abs *abs; lws_seq_t *seq; lws_unit_test_t *current_test; lws_unit_test_packet_t *expect; lws_unit_test_packet_test_cb result_cb; const void *result_cb_arg; lws_unit_test_packet_disposition disposition; /* synthesized protocol timeout */ time_t timeout; uint8_t established:1; uint8_t connecting:1; } abs_unit_test_priv_t; typedef struct seq_priv { lws_abs_t *ai; } seq_priv_t; enum { UTSEQ_MSG_WRITEABLE = LWSSEQ_USER_BASE, UTSEQ_MSG_CLOSING, UTSEQ_MSG_TIMEOUT, UTSEQ_MSG_CONNECTING, UTSEQ_MSG_POST_TX_KICK, UTSEQ_MSG_DISPOSITION_KNOWN }; /* * A definitive result has appeared for the current test */ static lws_unit_test_packet_disposition lws_unit_test_packet_dispose(abs_unit_test_priv_t *priv, lws_unit_test_packet_disposition disp, const char *note) { assert(priv->disposition == LPE_CONTINUE); lwsl_info("%s: %d\n", __func__, disp); if (note) lws_strncpy(priv->note, note, sizeof(priv->note)); priv->disposition = disp; lws_seq_queue_event(priv->seq, UTSEQ_MSG_DISPOSITION_KNOWN, NULL, NULL); return disp; } /* * start on the next step of the test */ lws_unit_test_packet_disposition process_expect(abs_unit_test_priv_t *priv) { assert(priv->disposition == LPE_CONTINUE); while (priv->expect->flags & LWS_AUT_EXPECT_RX && priv->disposition == LPE_CONTINUE) { int f = priv->expect->flags & LWS_AUT_EXPECT_LOCAL_CLOSE, s; if (priv->expect->pre) priv->expect->pre(priv->abs); lwsl_info("%s: rx()\n", __func__); lwsl_hexdump_debug(priv->expect->buffer, priv->expect->len); s = priv->abs->ap->rx(priv->abs->api, priv->expect->buffer, priv->expect->len); if (!!f != !!s) { lwsl_notice("%s: expected rx return %d, got %d\n", __func__, !!f, s); return lws_unit_test_packet_dispose(priv, LPE_FAILED, "rx unexpected return"); } if (priv->expect->flags & LWS_AUT_EXPECT_TEST_END) { lws_unit_test_packet_dispose(priv, LPE_SUCCEEDED, NULL); break; } priv->expect++; } return LPE_CONTINUE; } static lws_seq_cb_return_t unit_test_sequencer_cb(struct lws_sequencer *seq, void *user, int event, void *data, void *aux) { seq_priv_t *s = (seq_priv_t *)user; abs_unit_test_priv_t *priv = (abs_unit_test_priv_t *)s->ai->ati; time_t now; switch ((int)event) { case LWSSEQ_CREATED: /* our sequencer just got started */ lwsl_notice("%s: %s: created\n", __func__, lws_seq_name(seq)); if (s->ai->at->client_conn(s->ai)) { lwsl_notice("%s: %s: abstract client conn failed\n", __func__, lws_seq_name(seq)); return LWSSEQ_RET_DESTROY; } break; case LWSSEQ_DESTROYED: /* * This sequencer is about to be destroyed. If we have any * other assets in play, detach them from us. */ if (priv->abs) lws_abs_destroy_instance(&priv->abs); break; case LWSSEQ_HEARTBEAT: /* synthesize a wsi-style timeout */ if (!priv->timeout) goto ph; time(&now); if (now <= priv->timeout) goto ph; if (priv->expect->flags & LWS_AUT_EXPECT_SHOULD_TIMEOUT) { lwsl_user("%s: test got expected timeout\n", __func__); lws_unit_test_packet_dispose(priv, LPE_FAILED_UNEXPECTED_TIMEOUT, NULL); return LWSSEQ_RET_DESTROY; } lwsl_user("%s: seq timed out\n", __func__); ph: if (priv->abs->ap->heartbeat) priv->abs->ap->heartbeat(priv->abs->api); break; case UTSEQ_MSG_DISPOSITION_KNOWN: lwsl_info("%s: %s: DISPOSITION_KNOWN %s: %s\n", __func__, priv->abs->ap->name, priv->current_test->name, priv->disposition == LPE_SUCCEEDED ? "OK" : "FAIL"); /* * if the test has a callback, call it back to let it * know the result */ if (priv->result_cb) priv->result_cb(priv->result_cb_arg, priv->disposition); return LWSSEQ_RET_DESTROY; case UTSEQ_MSG_CONNECTING: lwsl_debug("UTSEQ_MSG_CONNECTING\n"); if (priv->abs->ap->accept) priv->abs->ap->accept(priv->abs->api); priv->established = 1; /* fallthru */ case UTSEQ_MSG_POST_TX_KICK: if (priv->disposition) break; if (process_expect(priv) != LPE_CONTINUE) { lwsl_notice("%s: UTSEQ_MSG_POST_TX_KICK failed\n", __func__); return LWSSEQ_RET_DESTROY; } break; case UTSEQ_MSG_WRITEABLE: /* * inform the protocol our transport is writeable now */ priv->abs->ap->writeable(priv->abs->api, 1024); break; case UTSEQ_MSG_CLOSING: if (!(priv->expect->flags & LWS_AUT_EXPECT_LOCAL_CLOSE)) { lwsl_user("%s: got unexpected close\n", __func__); lws_unit_test_packet_dispose(priv, LPE_FAILED_UNEXPECTED_CLOSE, NULL); goto done; } /* tell the abstract protocol we are closing on them */ if (priv->abs && priv->abs->ap->closed) priv->abs->ap->closed(priv->abs->api); goto done; case UTSEQ_MSG_TIMEOUT: /* current step timed out */ s->ai->at->close(s->ai->ati); if (!(priv->expect->flags & LWS_AUT_EXPECT_SHOULD_TIMEOUT)) { lwsl_user("%s: got unexpected timeout\n", __func__); lws_unit_test_packet_dispose(priv, LPE_FAILED_UNEXPECTED_TIMEOUT, NULL); return LWSSEQ_RET_DESTROY; } goto done; done: lws_seq_timeout_us(lws_seq_from_user(s), LWSSEQTO_NONE); priv->expect++; if (!priv->expect->buffer) { /* the sequence has completed */ lwsl_user("%s: sequence completed OK\n", __func__); return LWSSEQ_RET_DESTROY; } break; default: break; } return LWSSEQ_RET_CONTINUE; } static int lws_atcut_close(lws_abs_transport_inst_t *ati) { abs_unit_test_priv_t *priv = (abs_unit_test_priv_t *)ati; lwsl_notice("%s\n", __func__); lws_seq_queue_event(priv->seq, UTSEQ_MSG_CLOSING, NULL, NULL); return 0; } static int lws_atcut_tx(lws_abs_transport_inst_t *ati, uint8_t *buf, size_t len) { abs_unit_test_priv_t *priv = (abs_unit_test_priv_t *)ati; assert(priv->disposition == LPE_CONTINUE); lwsl_info("%s: received tx\n", __func__); if (priv->expect->pre) priv->expect->pre(priv->abs); if (!(priv->expect->flags & LWS_AUT_EXPECT_TX)) { lwsl_notice("%s: unexpected tx\n", __func__); lwsl_hexdump_notice(buf, len); lws_unit_test_packet_dispose(priv, LPE_FAILED, "unexpected tx"); return 1; } if (len != priv->expect->len) { lwsl_notice("%s: unexpected tx len %zu, expected %zu\n", __func__, len, priv->expect->len); lws_unit_test_packet_dispose(priv, LPE_FAILED, "tx len mismatch"); return 1; } if (memcmp(buf, priv->expect->buffer, len)) { lwsl_notice("%s: tx mismatch (exp / actual)\n", __func__); lwsl_hexdump_debug(priv->expect->buffer, len); lwsl_hexdump_debug(buf, len); lws_unit_test_packet_dispose(priv, LPE_FAILED, "tx data mismatch"); return 1; } if (priv->expect->flags & LWS_AUT_EXPECT_TEST_END) { lws_unit_test_packet_dispose(priv, LPE_SUCCEEDED, NULL); return 1; } priv->expect++; lws_seq_queue_event(priv->seq, UTSEQ_MSG_POST_TX_KICK, NULL, NULL); return 0; } #if !defined(LWS_WITHOUT_CLIENT) static int lws_atcut_client_conn(const lws_abs_t *abs) { abs_unit_test_priv_t *priv = (abs_unit_test_priv_t *)abs->ati; const lws_token_map_t *tm; if (priv->established) { lwsl_err("%s: already established\n", __func__); return 1; } /* set up the test start pieces... the array of test expects... */ tm = lws_abs_get_token(abs->at_tokens, LTMI_PEER_V_EXPECT_TEST); if (!tm) { lwsl_notice("%s: unit_test needs LTMI_PEER_V_EXPECT_TEST\n", __func__); return 1; } priv->current_test = (lws_unit_test_t *)tm->u.value; /* ... and the callback to deliver the result to */ tm = lws_abs_get_token(abs->at_tokens, LTMI_PEER_V_EXPECT_RESULT_CB); if (tm) priv->result_cb = (lws_unit_test_packet_test_cb)tm->u.value; else priv->result_cb = NULL; /* ... and the arg to deliver it with */ tm = lws_abs_get_token(abs->at_tokens, LTMI_PEER_V_EXPECT_RESULT_CB_ARG); if (tm) priv->result_cb_arg = tm->u.value; priv->expect = priv->current_test->expect_array; priv->disposition = LPE_CONTINUE; priv->note[0] = '\0'; lws_seq_timeout_us(priv->seq, priv->current_test->max_secs * LWS_US_PER_SEC); lwsl_notice("%s: %s: test '%s': start\n", __func__, abs->ap->name, priv->current_test->name); lws_seq_queue_event(priv->seq, UTSEQ_MSG_CONNECTING, NULL, NULL); return 0; } #endif static int lws_atcut_ask_for_writeable(lws_abs_transport_inst_t *ati) { abs_unit_test_priv_t *priv = (abs_unit_test_priv_t *)ati; if (!priv->established) return 1; /* * Queue a writeable event... this won't be handled by teh sequencer * until we have returned to the event loop, just like a real * callback_on_writable() */ lws_seq_queue_event(priv->seq, UTSEQ_MSG_WRITEABLE, NULL, NULL); return 0; } /* * An abstract protocol + transport has been instantiated */ static int lws_atcut_create(lws_abs_t *ai) { abs_unit_test_priv_t *priv; lws_seq_t *seq; lws_seq_info_t i; seq_priv_t *s; memset(&i, 0, sizeof(i)); i.context = ai->vh->context; i.user_size = sizeof(*s); i.puser = (void **)&s; i.cb = unit_test_sequencer_cb; i.name = "unit-test-seq"; /* * Create the sequencer for the steps in a single unit test */ seq = lws_seq_create(&i); if (!seq) { lwsl_err("%s: unable to create sequencer\n", __func__); return 1; } priv = ai->ati; memset(s, 0, sizeof(*s)); memset(priv, 0, sizeof(*priv)); /* the sequencer priv just points to the lws_abs_t */ s->ai = ai; priv->abs = ai; priv->seq = seq; return 0; } static void lws_atcut_destroy(lws_abs_transport_inst_t **pati) { /* * We don't free anything because the abstract layer combined our * allocation with that of the instance, and it will free the whole * thing after this. */ *pati = NULL; } static int lws_atcut_set_timeout(lws_abs_transport_inst_t *ati, int reason, int secs) { abs_unit_test_priv_t *priv = (abs_unit_test_priv_t *)ati; time_t now; time(&now); if (secs) priv->timeout = now + secs; else priv->timeout = 0; return 0; } static int lws_atcut_state(lws_abs_transport_inst_t *ati) { abs_unit_test_priv_t *priv = (abs_unit_test_priv_t *)ati; if (!priv || (!priv->established && !priv->connecting)) return 0; return 1; } static const char *dnames[] = { "INCOMPLETE", "PASS", "FAIL", "FAIL(TIMEOUT)", "FAIL(UNEXPECTED PASS)", "FAIL(UNEXPECTED CLOSE)", "SKIPPED" "?", "?" }; const char * lws_unit_test_result_name(int in) { if (in < 0 || in > (int)LWS_ARRAY_SIZE(dnames)) return "unknown"; return dnames[in]; } const lws_abs_transport_t lws_abs_transport_cli_unit_test = { .name = "unit_test", .alloc = sizeof(abs_unit_test_priv_t), .create = lws_atcut_create, .destroy = lws_atcut_destroy, .tx = lws_atcut_tx, #if defined(LWS_WITHOUT_CLIENT) .client_conn = NULL, #else .client_conn = lws_atcut_client_conn, #endif .close = lws_atcut_close, .ask_for_writeable = lws_atcut_ask_for_writeable, .set_timeout = lws_atcut_set_timeout, .state = lws_atcut_state, }; libwebsockets-3.2.1/lib/core-net/000077500000000000000000000000001357643561300166545ustar00rootroot00000000000000libwebsockets-3.2.1/lib/core-net/adopt.c000066400000000000000000000272151357643561300201360ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" static int lws_get_idlest_tsi(struct lws_context *context) { unsigned int lowest = ~0; int n = 0, hit = -1; for (; n < context->count_threads; n++) { if ((unsigned int)context->pt[n].fds_count != context->fd_limit_per_thread - 1 && (unsigned int)context->pt[n].fds_count < lowest) { lowest = context->pt[n].fds_count; hit = n; } } return hit; } struct lws * lws_create_new_server_wsi(struct lws_vhost *vhost, int fixed_tsi) { struct lws *new_wsi; int n = fixed_tsi; if (n < 0) n = lws_get_idlest_tsi(vhost->context); if (n < 0) { lwsl_err("no space for new conn\n"); return NULL; } new_wsi = lws_zalloc(sizeof(struct lws), "new server wsi"); if (new_wsi == NULL) { lwsl_err("Out of memory for new connection\n"); return NULL; } new_wsi->wsistate |= LWSIFR_SERVER; new_wsi->tsi = n; lwsl_debug("new wsi %p joining vhost %s, tsi %d\n", new_wsi, vhost->name, new_wsi->tsi); lws_vhost_bind_wsi(vhost, new_wsi); new_wsi->context = vhost->context; new_wsi->pending_timeout = NO_PENDING_TIMEOUT; new_wsi->rxflow_change_to = LWS_RXFLOW_ALLOW; /* initialize the instance struct */ lwsi_set_state(new_wsi, LRS_UNCONNECTED); new_wsi->hdr_parsing_completed = 0; #ifdef LWS_WITH_TLS new_wsi->tls.use_ssl = LWS_SSL_ENABLED(vhost); #endif /* * these can only be set once the protocol is known * we set an un-established connection's protocol pointer * to the start of the supported list, so it can look * for matching ones during the handshake */ new_wsi->protocol = vhost->protocols; new_wsi->user_space = NULL; new_wsi->desc.sockfd = LWS_SOCK_INVALID; new_wsi->position_in_fds_table = LWS_NO_FDS_POS; vhost->context->count_wsi_allocated++; /* * outermost create notification for wsi * no user_space because no protocol selection */ vhost->protocols[0].callback(new_wsi, LWS_CALLBACK_WSI_CREATE, NULL, NULL, 0); return new_wsi; } /* if not a socket, it's a raw, non-ssl file descriptor */ LWS_VISIBLE struct lws * lws_adopt_descriptor_vhost(struct lws_vhost *vh, lws_adoption_type type, lws_sock_file_fd_type fd, const char *vh_prot_name, struct lws *parent) { struct lws_context *context = vh->context; struct lws_context_per_thread *pt; struct lws *new_wsi; int n; #if defined(LWS_WITH_PEER_LIMITS) struct lws_peer *peer = NULL; if (type & LWS_ADOPT_SOCKET) { peer = lws_get_or_create_peer(vh, fd.sockfd); if (peer && context->ip_limit_wsi && peer->count_wsi >= context->ip_limit_wsi) { lwsl_notice("Peer reached wsi limit %d\n", context->ip_limit_wsi); lws_stats_bump(&context->pt[0], LWSSTATS_C_PEER_LIMIT_WSI_DENIED, 1); return NULL; } } #endif /* * Notice that in SMP case, the wsi may be being created on an * entirely different pt / tsi for load balancing. In that case as * we initialize it, it may become "live" concurrently unexpectedly... */ n = -1; if (parent) n = parent->tsi; new_wsi = lws_create_new_server_wsi(vh, n); if (!new_wsi) { if (type & LWS_ADOPT_SOCKET) compatible_close(fd.sockfd); return NULL; } #if defined(LWS_WITH_PEER_LIMITS) if (peer) lws_peer_add_wsi(context, peer, new_wsi); #endif pt = &context->pt[(int)new_wsi->tsi]; lws_stats_bump(pt, LWSSTATS_C_CONNECTIONS, 1); if (parent) { new_wsi->parent = parent; new_wsi->sibling_list = parent->child_list; parent->child_list = new_wsi; } /* enforce that every fd is nonblocking */ if (type & LWS_ADOPT_SOCKET) { if (lws_plat_set_nonblocking(fd.sockfd)) { lwsl_err("%s: unable to set sockfd nonblocking\n", __func__); goto bail; } } #if !defined(WIN32) else if (lws_plat_set_nonblocking(fd.filefd)) { lwsl_err("%s: unable to set filefd nonblocking\n", __func__); goto bail; } #endif new_wsi->desc = fd; if (vh_prot_name) { new_wsi->protocol = lws_vhost_name_to_protocol(new_wsi->vhost, vh_prot_name); if (!new_wsi->protocol) { lwsl_err("Protocol %s not enabled on vhost %s\n", vh_prot_name, new_wsi->vhost->name); goto bail; } if (lws_ensure_user_space(new_wsi)) { lwsl_notice("OOM trying to get user_space\n"); goto bail; } } if (!LWS_SSL_ENABLED(new_wsi->vhost) || !(type & LWS_ADOPT_SOCKET)) type &= ~LWS_ADOPT_ALLOW_SSL; if (lws_role_call_adoption_bind(new_wsi, type, vh_prot_name)) { lwsl_err("Unable to find a role that can adopt descriptor type 0x%x\n", type); goto bail; } /* * A new connection was accepted. Give the user a chance to * set properties of the newly created wsi. There's no protocol * selected yet so we issue this to the vhosts's default protocol, * itself by default protocols[0] */ new_wsi->wsistate |= LWSIFR_SERVER; n = LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED; if (new_wsi->role_ops->adoption_cb[lwsi_role_server(new_wsi)]) n = new_wsi->role_ops->adoption_cb[lwsi_role_server(new_wsi)]; #if !defined(LWS_AMAZON_RTOS) if (context->event_loop_ops->accept) if (context->event_loop_ops->accept(new_wsi)) goto fail; #endif #if LWS_MAX_SMP > 1 /* * Caution: after this point the wsi is live on its service thread * which may be concurrent to this. We mark the wsi as still undergoing * init in another pt so the assigned pt leaves it alone. */ new_wsi->undergoing_init_from_other_pt = 1; #endif if (!(type & LWS_ADOPT_ALLOW_SSL)) { lws_pt_lock(pt, __func__); if (__insert_wsi_socket_into_fds(context, new_wsi)) { lws_pt_unlock(pt); lwsl_err("%s: fail inserting socket\n", __func__); goto fail; } lws_pt_unlock(pt); } #if !defined(LWS_WITHOUT_SERVER) else if (lws_server_socket_service_ssl(new_wsi, fd.sockfd)) { lwsl_info("%s: fail ssl negotiation\n", __func__); goto fail; } #endif /* * by deferring callback to this point, after insertion to fds, * lws_callback_on_writable() can work from the callback */ if ((new_wsi->protocol->callback)(new_wsi, n, new_wsi->user_space, NULL, 0)) goto fail; /* role may need to do something after all adoption completed */ lws_role_call_adoption_bind(new_wsi, type | _LWS_ADOPT_FINISH, vh_prot_name); #if LWS_MAX_SMP > 1 /* its actual pt can service it now */ new_wsi->undergoing_init_from_other_pt = 0; #endif lws_cancel_service_pt(new_wsi); return new_wsi; fail: if (type & LWS_ADOPT_SOCKET) lws_close_free_wsi(new_wsi, LWS_CLOSE_STATUS_NOSTATUS, "adopt skt fail"); return NULL; bail: lwsl_notice("%s: exiting on bail\n", __func__); if (parent) parent->child_list = new_wsi->sibling_list; if (new_wsi->user_space) lws_free(new_wsi->user_space); vh->context->count_wsi_allocated--; lws_vhost_unbind_wsi(new_wsi); lws_free(new_wsi); compatible_close(fd.sockfd); return NULL; } LWS_VISIBLE struct lws * lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd) { lws_sock_file_fd_type fd; fd.sockfd = accept_fd; return lws_adopt_descriptor_vhost(vh, LWS_ADOPT_SOCKET | LWS_ADOPT_HTTP | LWS_ADOPT_ALLOW_SSL, fd, NULL, NULL); } LWS_VISIBLE struct lws * lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd) { return lws_adopt_socket_vhost(context->vhost_list, accept_fd); } /* Common read-buffer adoption for lws_adopt_*_readbuf */ static struct lws* adopt_socket_readbuf(struct lws *wsi, const char *readbuf, size_t len) { struct lws_context_per_thread *pt; struct lws_pollfd *pfd; int n; if (!wsi) return NULL; if (!readbuf || len == 0) return wsi; if (wsi->position_in_fds_table == LWS_NO_FDS_POS) return wsi; pt = &wsi->context->pt[(int)wsi->tsi]; n = lws_buflist_append_segment(&wsi->buflist, (const uint8_t *)readbuf, len); if (n < 0) goto bail; if (n) lws_dll2_add_head(&wsi->dll_buflist, &pt->dll_buflist_owner); /* * we can't process the initial read data until we can attach an ah. * * if one is available, get it and place the data in his ah rxbuf... * wsi with ah that have pending rxbuf get auto-POLLIN service. * * no autoservice because we didn't get a chance to attach the * readbuf data to wsi or ah yet, and we will do it next if we get * the ah. */ if (wsi->http.ah || !lws_header_table_attach(wsi, 0)) { lwsl_notice("%s: calling service on readbuf ah\n", __func__); /* * unlike a normal connect, we have the headers already * (or the first part of them anyway). * libuv won't come back and service us without a network * event, so we need to do the header service right here. */ pfd = &pt->fds[wsi->position_in_fds_table]; pfd->revents |= LWS_POLLIN; lwsl_err("%s: calling service\n", __func__); if (lws_service_fd_tsi(wsi->context, pfd, wsi->tsi)) /* service closed us */ return NULL; return wsi; } lwsl_err("%s: deferring handling ah\n", __func__); return wsi; bail: lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "adopt skt readbuf fail"); return NULL; } LWS_EXTERN struct lws * lws_create_adopt_udp(struct lws_vhost *vhost, int port, int flags, const char *protocol_name, struct lws *parent_wsi) { #if !defined(LWS_PLAT_OPTEE) lws_sock_file_fd_type sock; struct addrinfo h, *r, *rp; struct lws *wsi = NULL; char buf[16]; int n; memset(&h, 0, sizeof(h)); h.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ h.ai_socktype = SOCK_DGRAM; h.ai_protocol = IPPROTO_UDP; h.ai_flags = AI_PASSIVE; #ifdef AI_ADDRCONFIG h.ai_flags |= AI_ADDRCONFIG; #endif lws_snprintf(buf, sizeof(buf), "%u", port); n = getaddrinfo(NULL, buf, &h, &r); if (n) { #ifndef LWS_WITH_ESP32 lwsl_info("%s: getaddrinfo error: %s\n", __func__, gai_strerror(n)); #else lwsl_info("%s: getaddrinfo error: %s\n", __func__, strerror(n)); #endif goto bail; } for (rp = r; rp; rp = rp->ai_next) { sock.sockfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); if (sock.sockfd != LWS_SOCK_INVALID) break; } if (!rp) { lwsl_err("%s: unable to create INET socket\n", __func__); goto bail1; } if ((flags & LWS_CAUDP_BIND) && bind(sock.sockfd, rp->ai_addr, #if defined(_WIN32) (int)rp->ai_addrlen #else rp->ai_addrlen #endif ) == -1) { lwsl_err("%s: bind failed\n", __func__); goto bail2; } wsi = lws_adopt_descriptor_vhost(vhost, LWS_ADOPT_RAW_SOCKET_UDP, sock, protocol_name, parent_wsi); if (!wsi) lwsl_err("%s: udp adoption failed\n", __func__); bail2: if (!wsi) compatible_close((int)sock.sockfd); bail1: freeaddrinfo(r); bail: return wsi; #else return NULL; #endif } LWS_VISIBLE struct lws * lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd, const char *readbuf, size_t len) { return adopt_socket_readbuf(lws_adopt_socket(context, accept_fd), readbuf, len); } LWS_VISIBLE struct lws * lws_adopt_socket_vhost_readbuf(struct lws_vhost *vhost, lws_sockfd_type accept_fd, const char *readbuf, size_t len) { return adopt_socket_readbuf(lws_adopt_socket_vhost(vhost, accept_fd), readbuf, len); } libwebsockets-3.2.1/lib/core-net/client.c000066400000000000000000000056531357643561300203070ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" LWS_VISIBLE int lws_set_proxy(struct lws_vhost *vhost, const char *proxy) { char authstring[96]; int brackets = 0; char *p; if (!proxy) return -1; /* we have to deal with a possible redundant leading http:// */ if (!strncmp(proxy, "http://", 7)) proxy += 7; p = strrchr(proxy, '@'); if (p) { /* auth is around */ if ((unsigned int)(p - proxy) > sizeof(authstring) - 1) goto auth_too_long; lws_strncpy(authstring, proxy, p - proxy + 1); // null termination not needed on input if (lws_b64_encode_string(authstring, lws_ptr_diff(p, proxy), vhost->proxy_basic_auth_token, sizeof vhost->proxy_basic_auth_token) < 0) goto auth_too_long; lwsl_info(" Proxy auth in use\n"); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) proxy = p + 1; #endif } else vhost->proxy_basic_auth_token[0] = '\0'; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) #if defined(LWS_WITH_IPV6) /* * isolating the address / port is complicated by IPv6 overloading * the meaning of : in the address. The convention to solve it is to * put [] around the ipv6 address part, eg, "[::1]:443". This must be * parsed to "::1" as the address and the port as 443. * * IPv4 addresses like myproxy:443 continue to be parsed as normal. */ if (proxy[0] == '[') brackets = 1; #endif lws_strncpy(vhost->http.http_proxy_address, proxy + brackets, sizeof(vhost->http.http_proxy_address)); p = vhost->http.http_proxy_address; #if defined(LWS_WITH_IPV6) if (brackets) { /* original is IPv6 format "[::1]:443" */ p = strchr(vhost->http.http_proxy_address, ']'); if (!p) { lwsl_err("%s: malformed proxy '%s'\n", __func__, proxy); return -1; } *p++ = '\0'; } #endif p = strchr(p, ':'); if (!p && !vhost->http.http_proxy_port) { lwsl_err("http_proxy needs to be ads:port\n"); return -1; } if (p) { *p = '\0'; vhost->http.http_proxy_port = atoi(p + 1); } lwsl_info(" Proxy %s:%u\n", vhost->http.http_proxy_address, vhost->http.http_proxy_port); #endif return 0; auth_too_long: lwsl_err("proxy auth too long\n"); return -1; } libwebsockets-3.2.1/lib/core-net/close.c000066400000000000000000000367351357643561300201430ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" void __lws_free_wsi(struct lws *wsi) { if (!wsi) return; /* * Protocol user data may be allocated either internally by lws * or by specified the user. We should only free what we allocated. */ if (wsi->protocol && wsi->protocol->per_session_data_size && wsi->user_space && !wsi->user_space_externally_allocated) lws_free(wsi->user_space); lws_buflist_destroy_all_segments(&wsi->buflist); lws_buflist_destroy_all_segments(&wsi->buflist_out); lws_free_set_NULL(wsi->udp); if (wsi->vhost && wsi->vhost->lserv_wsi == wsi) wsi->vhost->lserv_wsi = NULL; #if !defined(LWS_NO_CLIENT) if (wsi->vhost) lws_dll2_remove(&wsi->dll_cli_active_conns); #endif wsi->context->count_wsi_allocated--; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) __lws_header_table_detach(wsi, 0); #endif __lws_same_vh_protocol_remove(wsi); #if !defined(LWS_NO_CLIENT) lws_client_stash_destroy(wsi); lws_free_set_NULL(wsi->cli_hostname_copy); #endif if (wsi->role_ops->destroy_role) wsi->role_ops->destroy_role(wsi); #if defined(LWS_WITH_PEER_LIMITS) lws_peer_track_wsi_close(wsi->context, wsi->peer); wsi->peer = NULL; #endif /* since we will destroy the wsi, make absolutely sure now */ #if defined(LWS_WITH_OPENSSL) __lws_ssl_remove_wsi_from_buffered_list(wsi); #endif __lws_wsi_remove_from_sul(wsi); if (wsi->context->event_loop_ops->destroy_wsi) wsi->context->event_loop_ops->destroy_wsi(wsi); lws_vhost_unbind_wsi(wsi); lwsl_debug("%s: %p, remaining wsi %d\n", __func__, wsi, wsi->context->count_wsi_allocated); lws_free(wsi); } void lws_remove_child_from_any_parent(struct lws *wsi) { struct lws **pwsi; int seen = 0; if (!wsi->parent) return; /* detach ourselves from parent's child list */ pwsi = &wsi->parent->child_list; while (*pwsi) { if (*pwsi == wsi) { lwsl_info("%s: detach %p from parent %p\n", __func__, wsi, wsi->parent); if (wsi->parent->protocol) wsi->parent->protocol->callback(wsi, LWS_CALLBACK_CHILD_CLOSING, wsi->parent->user_space, wsi, 0); *pwsi = wsi->sibling_list; seen = 1; break; } pwsi = &(*pwsi)->sibling_list; } if (!seen) lwsl_err("%s: failed to detach from parent\n", __func__); wsi->parent = NULL; } #if !defined(LWS_NO_CLIENT) static int lws_close_trans_q_leader(struct lws_dll2 *d, void *user) { struct lws *w = lws_container_of(d, struct lws, dll2_cli_txn_queue); __lws_close_free_wsi(w, -1, "trans q leader closing"); return 0; } void lws_inform_client_conn_fail(struct lws *wsi, void *arg, size_t len) { if (wsi->already_did_cce) return; wsi->already_did_cce = 1; lws_stats_bump(&wsi->context->pt[(int)wsi->tsi], LWSSTATS_C_CONNS_CLIENT_FAILED, 1); if (!wsi->protocol) return; wsi->protocol->callback(wsi, LWS_CALLBACK_CLIENT_CONNECTION_ERROR, wsi->user_space, arg, len); } #endif void __lws_close_free_wsi(struct lws *wsi, enum lws_close_status reason, const char *caller) { struct lws_context_per_thread *pt; struct lws *wsi1, *wsi2; struct lws_context *context; #if !defined(LWS_NO_CLIENT) long rl = (long)(int)reason; #endif int n; lwsl_info("%s: %p: caller: %s\n", __func__, wsi, caller); if (!wsi) return; lws_access_log(wsi); context = wsi->context; pt = &context->pt[(int)wsi->tsi]; lws_stats_bump(pt, LWSSTATS_C_API_CLOSE, 1); #if !defined(LWS_NO_CLIENT) lws_free_set_NULL(wsi->cli_hostname_copy); /* * if we have wsi in our transaction queue, if we are closing we * must go through and close all those first */ if (wsi->vhost) { /* we are no longer an active client connection that can piggyback */ lws_dll2_remove(&wsi->dll_cli_active_conns); if (rl != -1l) lws_vhost_lock(wsi->vhost); lws_dll2_foreach_safe(&wsi->dll2_cli_txn_queue_owner, NULL, lws_close_trans_q_leader); /* * !!! If we are closing, but we have pending pipelined * transaction results we already sent headers for, that's going * to destroy sync for HTTP/1 and leave H2 stream with no live * swsi.` * * However this is normal if we are being closed because the * transaction queue leader is closing. */ lws_dll2_remove(&wsi->dll2_cli_txn_queue); if (rl != -1l) lws_vhost_unlock(wsi->vhost); } #endif /* if we have children, close them first */ if (wsi->child_list) { wsi2 = wsi->child_list; while (wsi2) { wsi1 = wsi2->sibling_list; wsi2->parent = NULL; /* stop it doing shutdown processing */ wsi2->socket_is_permanently_unusable = 1; __lws_close_free_wsi(wsi2, reason, "general child recurse"); wsi2 = wsi1; } wsi->child_list = NULL; } if (wsi->role_ops == &role_ops_raw_file) { lws_remove_child_from_any_parent(wsi); __remove_wsi_socket_from_fds(wsi); if (wsi->protocol) wsi->protocol->callback(wsi, wsi->role_ops->close_cb[0], wsi->user_space, NULL, 0); goto async_close; } wsi->wsistate_pre_close = wsi->wsistate; #ifdef LWS_WITH_CGI if (wsi->role_ops == &role_ops_cgi) { // lwsl_debug("%s: closing stdwsi index %d\n", __func__, (int)wsi->cgi_channel); /* we are not a network connection, but a handler for CGI io */ if (wsi->parent && wsi->parent->http.cgi) { if (wsi->parent->child_list == wsi && !wsi->sibling_list) lws_cgi_remove_and_kill(wsi->parent); /* end the binding between us and master */ wsi->parent->http.cgi->stdwsi[(int)wsi->cgi_channel] = NULL; } wsi->socket_is_permanently_unusable = 1; goto just_kill_connection; } if (wsi->http.cgi) lws_cgi_remove_and_kill(wsi); #endif #if !defined(LWS_NO_CLIENT) lws_client_stash_destroy(wsi); #endif if (wsi->role_ops == &role_ops_raw_skt) { wsi->socket_is_permanently_unusable = 1; goto just_kill_connection; } #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) if (lwsi_role_http(wsi) && lwsi_role_server(wsi) && wsi->http.fop_fd != NULL) lws_vfs_file_close(&wsi->http.fop_fd); #endif if (lwsi_state(wsi) == LRS_DEAD_SOCKET) return; if (wsi->socket_is_permanently_unusable || reason == LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY || lwsi_state(wsi) == LRS_SHUTDOWN) goto just_kill_connection; switch (lwsi_state_PRE_CLOSE(wsi)) { case LRS_DEAD_SOCKET: return; /* we tried the polite way... */ case LRS_WAITING_TO_SEND_CLOSE: case LRS_AWAITING_CLOSE_ACK: case LRS_RETURNED_CLOSE: goto just_kill_connection; case LRS_FLUSHING_BEFORE_CLOSE: if (lws_has_buffered_out(wsi) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) || wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more #endif ) { lws_callback_on_writable(wsi); return; } lwsl_info("%p: end LRS_FLUSHING_BEFORE_CLOSE\n", wsi); goto just_kill_connection; default: if (lws_has_buffered_out(wsi) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) || wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more #endif ) { lwsl_info("%p: LRS_FLUSHING_BEFORE_CLOSE\n", wsi); lwsi_set_state(wsi, LRS_FLUSHING_BEFORE_CLOSE); __lws_set_timeout(wsi, PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE, 5); return; } break; } if (lwsi_state(wsi) == LRS_WAITING_CONNECT || lwsi_state(wsi) == LRS_H1C_ISSUE_HANDSHAKE) goto just_kill_connection; if (!wsi->told_user_closed && wsi->user_space && wsi->protocol && wsi->protocol_bind_balance) { wsi->protocol->callback(wsi, wsi->role_ops->protocol_unbind_cb[ !!lwsi_role_server(wsi)], wsi->user_space, (void *)__func__, 0); wsi->protocol_bind_balance = 0; } /* * signal we are closing, lws_write will * add any necessary version-specific stuff. If the write fails, * no worries we are closing anyway. If we didn't initiate this * close, then our state has been changed to * LRS_RETURNED_CLOSE and we will skip this. * * Likewise if it's a second call to close this connection after we * sent the close indication to the peer already, we are in state * LRS_AWAITING_CLOSE_ACK and will skip doing this a second time. */ if (wsi->role_ops->close_via_role_protocol && wsi->role_ops->close_via_role_protocol(wsi, reason)) return; just_kill_connection: #if defined(LWS_WITH_FILE_OPS) && (defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2)) if (lwsi_role_http(wsi) && lwsi_role_server(wsi) && wsi->http.fop_fd != NULL) lws_vfs_file_close(&wsi->http.fop_fd); #endif #if defined(LWS_WITH_HTTP_PROXY) if (wsi->http.buflist_post_body) lws_buflist_destroy_all_segments(&wsi->http.buflist_post_body); #endif if (wsi->role_ops->close_kill_connection) wsi->role_ops->close_kill_connection(wsi, reason); n = 0; if (!wsi->told_user_closed && wsi->user_space && wsi->protocol_bind_balance && wsi->protocol) { lwsl_debug("%s: %p: DROP_PROTOCOL %s\n", __func__, wsi, wsi->protocol ? wsi->protocol->name: "NULL"); if (wsi->protocol) wsi->protocol->callback(wsi, wsi->role_ops->protocol_unbind_cb[ !!lwsi_role_server(wsi)], wsi->user_space, (void *)__func__, 0); wsi->protocol_bind_balance = 0; } #if !defined(LWS_NO_CLIENT) if ((lwsi_state(wsi) == LRS_WAITING_SERVER_REPLY || lwsi_state(wsi) == LRS_WAITING_CONNECT) && !wsi->already_did_cce && wsi->protocol) { static const char _reason[] = "closed before established"; lws_inform_client_conn_fail(wsi, (void *)_reason, sizeof(_reason)); } #endif /* * Testing with ab shows that we have to stage the socket close when * the system is under stress... shutdown any further TX, change the * state to one that won't emit anything more, and wait with a timeout * for the POLLIN to show a zero-size rx before coming back and doing * the actual close. */ if (wsi->role_ops != &role_ops_raw_skt && !lwsi_role_client(wsi) && lwsi_state(wsi) != LRS_SHUTDOWN && lwsi_state(wsi) != LRS_UNCONNECTED && reason != LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY && !wsi->socket_is_permanently_unusable) { #if defined(LWS_WITH_TLS) if (lws_is_ssl(wsi) && wsi->tls.ssl) { n = 0; switch (__lws_tls_shutdown(wsi)) { case LWS_SSL_CAPABLE_DONE: case LWS_SSL_CAPABLE_ERROR: case LWS_SSL_CAPABLE_MORE_SERVICE_READ: case LWS_SSL_CAPABLE_MORE_SERVICE_WRITE: case LWS_SSL_CAPABLE_MORE_SERVICE: break; } } else #endif { lwsl_info("%s: shutdown conn: %p (sk %d, state 0x%x)\n", __func__, wsi, (int)(long)wsi->desc.sockfd, lwsi_state(wsi)); if (!wsi->socket_is_permanently_unusable && lws_socket_is_valid(wsi->desc.sockfd)) { wsi->socket_is_permanently_unusable = 1; n = shutdown(wsi->desc.sockfd, SHUT_WR); } } if (n) lwsl_debug("closing: shutdown (state 0x%x) ret %d\n", lwsi_state(wsi), LWS_ERRNO); /* * This causes problems on WINCE / ESP32 with disconnection * when the events are half closing connection */ #if !defined(_WIN32_WCE) && !defined(LWS_WITH_ESP32) /* libuv: no event available to guarantee completion */ if (!wsi->socket_is_permanently_unusable && lws_socket_is_valid(wsi->desc.sockfd) && lwsi_state(wsi) != LRS_SHUTDOWN && context->event_loop_ops->periodic_events_available) { __lws_change_pollfd(wsi, LWS_POLLOUT, LWS_POLLIN); lwsi_set_state(wsi, LRS_SHUTDOWN); __lws_set_timeout(wsi, PENDING_TIMEOUT_SHUTDOWN_FLUSH, context->timeout_secs); return; } #endif } lwsl_debug("%s: real just_kill_connection: %p (sockfd %d)\n", __func__, wsi, wsi->desc.sockfd); #ifdef LWS_WITH_HUBBUB if (wsi->http.rw) { lws_rewrite_destroy(wsi->http.rw); wsi->http.rw = NULL; } #endif if (wsi->http.pending_return_headers) lws_free_set_NULL(wsi->http.pending_return_headers); /* * we won't be servicing or receiving anything further from this guy * delete socket from the internal poll list if still present */ __lws_ssl_remove_wsi_from_buffered_list(wsi); __lws_wsi_remove_from_sul(wsi); //if (wsi->told_event_loop_closed) // cgi std close case (dummy-callback) // return; // lwsl_notice("%s: wsi %p, fd %d\n", __func__, wsi, wsi->desc.sockfd); /* checking return redundant since we anyway close */ if (wsi->desc.sockfd != LWS_SOCK_INVALID) __remove_wsi_socket_from_fds(wsi); else __lws_same_vh_protocol_remove(wsi); lwsi_set_state(wsi, LRS_DEAD_SOCKET); lws_buflist_destroy_all_segments(&wsi->buflist); lws_dll2_remove(&wsi->dll_buflist); if (wsi->role_ops->close_role) wsi->role_ops->close_role(pt, wsi); /* tell the user it's all over for this guy */ if ((lwsi_state_est_PRE_CLOSE(wsi) || /* raw skt adopted but didn't complete tls hs should CLOSE */ (wsi->role_ops == &role_ops_raw_skt && !lwsi_role_client(wsi)) || lwsi_state_PRE_CLOSE(wsi) == LRS_WAITING_SERVER_REPLY) && !wsi->told_user_closed && wsi->role_ops->close_cb[lwsi_role_server(wsi)]) { const struct lws_protocols *pro = wsi->protocol; if (!wsi->protocol && wsi->vhost && wsi->vhost->protocols) pro = &wsi->vhost->protocols[0]; if (pro && (!wsi->upgraded_to_http2 || !lwsi_role_client(wsi))) /* * The network wsi for a client h2 connection shouldn't * call back for its role: the child stream connections * own the role. Otherwise h2 will call back closed * one too many times as the children do it and then * the closing network stream. */ pro->callback(wsi, wsi->role_ops->close_cb[lwsi_role_server(wsi)], wsi->user_space, NULL, 0); wsi->told_user_closed = 1; } async_close: lws_remove_child_from_any_parent(wsi); wsi->socket_is_permanently_unusable = 1; if (wsi->context->event_loop_ops->wsi_logical_close) if (wsi->context->event_loop_ops->wsi_logical_close(wsi)) return; __lws_close_free_wsi_final(wsi); } void __lws_close_free_wsi_final(struct lws *wsi) { int n; if (!wsi->shadow && lws_socket_is_valid(wsi->desc.sockfd) && !lws_ssl_close(wsi)) { lwsl_debug("%s: wsi %p: fd %d\n", __func__, wsi, wsi->desc.sockfd); n = compatible_close(wsi->desc.sockfd); if (n) lwsl_debug("closing: close ret %d\n", LWS_ERRNO); wsi->desc.sockfd = LWS_SOCK_INVALID; } /* outermost destroy notification for wsi (user_space still intact) */ if (wsi->vhost) wsi->vhost->protocols[0].callback(wsi, LWS_CALLBACK_WSI_DESTROY, wsi->user_space, NULL, 0); #ifdef LWS_WITH_CGI if (wsi->http.cgi) { for (n = 0; n < 3; n++) { if (wsi->http.cgi->pipe_fds[n][!!(n == 0)] == 0) lwsl_err("ZERO FD IN CGI CLOSE"); if (wsi->http.cgi->pipe_fds[n][!!(n == 0)] >= 0) { close(wsi->http.cgi->pipe_fds[n][!!(n == 0)]); wsi->http.cgi->pipe_fds[n][!!(n == 0)] = LWS_SOCK_INVALID; } } lws_free_set_NULL(wsi->http.cgi); } #endif __lws_free_wsi(wsi); } void lws_close_free_wsi(struct lws *wsi, enum lws_close_status reason, const char *caller) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; lws_pt_lock(pt, __func__); __lws_close_free_wsi(wsi, reason, caller); lws_pt_unlock(pt); } libwebsockets-3.2.1/lib/core-net/connect.c000066400000000000000000000176551357643561300204670ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" void lws_client_stash_destroy(struct lws *wsi) { if (!wsi || !wsi->stash) return; lws_free_set_NULL(wsi->stash->address); lws_free_set_NULL(wsi->stash->path); lws_free_set_NULL(wsi->stash->host); lws_free_set_NULL(wsi->stash->origin); lws_free_set_NULL(wsi->stash->protocol); lws_free_set_NULL(wsi->stash->method); lws_free_set_NULL(wsi->stash->iface); lws_free_set_NULL(wsi->stash->alpn); lws_free_set_NULL(wsi->stash); } LWS_VISIBLE struct lws * lws_client_connect_via_info(const struct lws_client_connect_info *i) { struct lws *wsi, *safe = NULL; const struct lws_protocols *p; const char *local = i->protocol; int tid = 0; #if LWS_MAX_SMP > 1 int n; #endif if (i->context->requested_kill) return NULL; if (!i->context->protocol_init_done) if (lws_protocol_init(i->context)) return NULL; /* * If we have .local_protocol_name, use it to select the local protocol * handler to bind to. Otherwise use .protocol if http[s]. */ if (i->local_protocol_name) local = i->local_protocol_name; lws_stats_bump(&i->context->pt[tid], LWSSTATS_C_CONNS_CLIENT, 1); /* PHASE 1: create a bare wsi */ wsi = lws_zalloc(sizeof(struct lws), "client wsi"); if (wsi == NULL) goto bail; wsi->context = i->context; wsi->desc.sockfd = LWS_SOCK_INVALID; wsi->seq = i->seq; wsi->vhost = NULL; if (!i->vhost) lws_vhost_bind_wsi(i->context->vhost_list, wsi); else lws_vhost_bind_wsi(i->vhost, wsi); if (!wsi->vhost) { lwsl_err("%s: No vhost in the context\n", __func__); goto bail; } #if LWS_MAX_SMP > 1 tid = wsi->vhost->protocols[0].callback(wsi, LWS_CALLBACK_GET_THREAD_ID, NULL, NULL, 0); #endif /* * PHASE 2: if SMP, bind the client to whatever tsi the current thread * represents */ #if LWS_MAX_SMP > 1 lws_context_lock(i->context, "client find tsi"); for (n = 0; n < i->context->count_threads; n++) if (i->context->pt[n].service_tid == tid) { lwsl_info("%s: client binds to caller tsi %d\n", __func__, n); wsi->tsi = n; break; } /* * this binding is sort of provisional, since when we try to insert * into the pt fds, there may be no space and it will fail */ lws_context_unlock(i->context); #endif /* * PHASE 3: Choose an initial role for the wsi and do role-specific init * * Note the initial role may not reflect the final role, eg, * we may want ws, but first we have to go through h1 to get that */ if (lws_role_call_client_bind(wsi, i) < 0) { lwsl_err("%s: unable to bind to role\n", __func__); goto bail; } lwsl_info("%s: role binding to %s\n", __func__, wsi->role_ops->name); /* * PHASE 4: fill up the wsi with stuff from the connect_info as far as * it can go. It's uncertain because not only is our connection * going to complete asynchronously, we might have bound to h1 and not * even be able to get ahold of an ah immediately. */ wsi->user_space = NULL; wsi->pending_timeout = NO_PENDING_TIMEOUT; wsi->position_in_fds_table = LWS_NO_FDS_POS; wsi->ocport = wsi->c_port = i->port; wsi->protocol = &wsi->vhost->protocols[0]; wsi->client_pipeline = !!(i->ssl_connection & LCCSCF_PIPELINE); /* * PHASE 5: handle external user_space now, generic alloc is done in * role finalization */ if (!wsi->user_space && i->userdata) { wsi->user_space_externally_allocated = 1; wsi->user_space = i->userdata; } if (local) { lwsl_info("%s: protocol binding to %s\n", __func__, local); p = lws_vhost_name_to_protocol(wsi->vhost, local); if (p) lws_bind_protocol(wsi, p, __func__); } /* * PHASE 5: handle external user_space now, generic alloc is done in * role finalization */ if (!wsi->user_space && i->userdata) { wsi->user_space_externally_allocated = 1; wsi->user_space = i->userdata; } #if defined(LWS_WITH_TLS) wsi->tls.use_ssl = i->ssl_connection; #else if (i->ssl_connection & LCCSCF_USE_SSL) { lwsl_err("%s: lws not configured for tls\n", __func__); goto bail; } #endif /* * PHASE 6: stash the things from connect_info that we can't process * right now, eg, if http binding, without an ah. If h1 and no ah, we * will go on the ah waiting list and process those things later (after * the connect_info and maybe the things pointed to have gone out of * scope) * * However these things are stashed in a generic way at this point, * with no relationship to http or ah */ wsi->stash = lws_zalloc(sizeof(*wsi->stash), "client stash"); if (!wsi->stash) { lwsl_err("%s: OOM\n", __func__); goto bail1; } wsi->stash->address = lws_strdup(i->address); wsi->stash->path = lws_strdup(i->path); wsi->stash->host = lws_strdup(i->host); wsi->stash->opaque_user_data = i->opaque_user_data; if (!wsi->stash->address || !wsi->stash->path || !wsi->stash->host) goto bail1; if (i->origin) { wsi->stash->origin = lws_strdup(i->origin); if (!wsi->stash->origin) goto bail1; } if (i->protocol) { wsi->stash->protocol = lws_strdup(i->protocol); if (!wsi->stash->protocol) goto bail1; } if (i->method) { wsi->stash->method = lws_strdup(i->method); if (!wsi->stash->method) goto bail1; } if (i->iface) { wsi->stash->iface = lws_strdup(i->iface); if (!wsi->stash->iface) goto bail1; } if (i->alpn) { wsi->stash->alpn = lws_strdup(i->alpn); if (!wsi->stash->alpn) goto bail1; } /* * at this point user callbacks like * LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER will be interested to * know the parent... eg for proxying we can grab extra headers from * the parent's incoming ah and add them to the child client handshake */ if (i->parent_wsi) { lwsl_info("%s: created child %p of parent %p\n", __func__, wsi, i->parent_wsi); wsi->parent = i->parent_wsi; safe = wsi->sibling_list = i->parent_wsi->child_list; i->parent_wsi->child_list = wsi; } /* * PHASE 7: Do any role-specific finalization processing. We can still * see important info things via wsi->stash */ if (wsi->role_ops->client_bind) { int n = wsi->role_ops->client_bind(wsi, NULL); if (n && i->parent_wsi) { /* unpick from parent */ i->parent_wsi->child_list = safe; } if (n < 0) /* we didn't survive, wsi is freed */ goto bail2; if (n) /* something else failed, wsi needs freeing */ goto bail; } /* let the caller's optional wsi storage have the wsi we created */ if (i->pwsi) *i->pwsi = wsi; /* PHASE 8: notify protocol with role-specific connected callback */ lwsl_debug("%s: wsi %p: cb %d to %s %s\n", __func__, wsi, wsi->role_ops->adoption_cb[0], wsi->role_ops->name, wsi->protocol->name); wsi->protocol->callback(wsi, wsi->role_ops->adoption_cb[0], wsi->user_space, NULL, 0); #if defined(LWS_WITH_HUBBUB) if (i->uri_replace_to) wsi->http.rw = lws_rewrite_create(wsi, html_parser_cb, i->uri_replace_from, i->uri_replace_to); #endif if (i->method && !strcmp(i->method, "RAW")) lws_http_client_connect_via_info2(wsi); return wsi; bail1: lws_client_stash_destroy(wsi); bail: lws_free(wsi); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) bail2: #endif if (i->pwsi) *i->pwsi = NULL; lws_stats_bump(&i->context->pt[tid], LWSSTATS_C_CONNS_CLIENT_FAILED, 1); return NULL; } libwebsockets-3.2.1/lib/core-net/dummy-callback.c000066400000000000000000000525421357643561300217150ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #if defined(LWS_WITH_HTTP_PROXY) static int proxy_header(struct lws *wsi, struct lws *par, unsigned char *temp, int temp_len, int index, unsigned char **p, unsigned char *end) { int n = lws_hdr_total_length(par, index); if (n < 1) { lwsl_debug("%s: no index %d:\n", __func__, index); return 0; } if (lws_hdr_copy(par, (char *)temp, temp_len, index) < 0) return -1; lwsl_debug("%s: index %d: %s\n", __func__, index, (char *)temp); if (lws_add_http_header_by_token(wsi, index, temp, n, p, end)) return -1; return 0; } static int stream_close(struct lws *wsi) { char buf[LWS_PRE + 6], *out = buf + LWS_PRE; if (wsi->http.did_stream_close) return 0; wsi->http.did_stream_close = 1; if (wsi->http2_substream) { if (lws_write(wsi, (unsigned char *)buf + LWS_PRE, 0, LWS_WRITE_HTTP_FINAL) < 0) { lwsl_info("%s: COMPL_CLIENT_HTTP: h2 fin wr failed\n", __func__); return -1; } } else { *out++ = '0'; *out++ = '\x0d'; *out++ = '\x0a'; *out++ = '\x0d'; *out++ = '\x0a'; if (lws_write(wsi, (unsigned char *)buf + LWS_PRE, 5, LWS_WRITE_HTTP_FINAL) < 0) { lwsl_err("%s: COMPL_CLIENT_HTTP: " "h2 final write failed\n", __func__); return -1; } } return 0; } #endif struct lws_proxy_pkt { struct lws_dll2 pkt_list; size_t len; char binary; char first; char final; /* data follows */ }; #if defined(LWS_WITH_HTTP_PROXY) && defined(LWS_ROLE_WS) int lws_callback_ws_proxy(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct lws_proxy_pkt *pkt; struct lws_dll2 *dll; switch (reason) { /* h1 ws proxying... child / client / onward */ case LWS_CALLBACK_CLIENT_ESTABLISHED: if (!wsi->h1_ws_proxied || !wsi->parent) break; lws_process_ws_upgrade2(wsi->parent); #if defined(LWS_WITH_HTTP2) if (wsi->parent->http2_substream) lwsl_info("%s: proxied h2 -> h1 ws established\n", __func__); #endif break; case LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED: return 1; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: case LWS_CALLBACK_CLIENT_CLOSED: lwsl_user("%s: client closed: parent %p\n", __func__, wsi->parent); if (wsi->parent) lws_set_timeout(wsi->parent, PENDING_TIMEOUT_KILLED_BY_PROXY_CLIENT_CLOSE, LWS_TO_KILL_ASYNC); break; case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: { unsigned char **p = (unsigned char **)in, *end = (*p) + len, tmp[128]; proxy_header(wsi, wsi->parent, tmp, sizeof(tmp), WSI_TOKEN_HTTP_ACCEPT_LANGUAGE, p, end); proxy_header(wsi, wsi->parent, tmp, sizeof(tmp), WSI_TOKEN_HTTP_COOKIE, p, end); proxy_header(wsi, wsi->parent, tmp, sizeof(tmp), WSI_TOKEN_HTTP_SET_COOKIE, p, end); break; } case LWS_CALLBACK_CLIENT_RECEIVE: wsi->parent->ws->proxy_buffered += len; if (wsi->parent->ws->proxy_buffered > 10 * 1024 * 1024) { lwsl_err("%s: proxied ws connection excessive buffering: dropping\n", __func__); return -1; } pkt = lws_zalloc(sizeof(*pkt) + LWS_PRE + len, __func__); if (!pkt) return -1; pkt->pkt_list.prev = pkt->pkt_list.next = NULL; pkt->len = len; pkt->first = lws_is_first_fragment(wsi); pkt->final = lws_is_final_fragment(wsi); pkt->binary = lws_frame_is_binary(wsi); memcpy(((uint8_t *)&pkt[1]) + LWS_PRE, in, len); lws_dll2_add_tail(&pkt->pkt_list, &wsi->parent->ws->proxy_owner); lws_callback_on_writable(wsi->parent); break; case LWS_CALLBACK_CLIENT_WRITEABLE: dll = lws_dll2_get_tail(&wsi->ws->proxy_owner); if (!dll) break; pkt = (struct lws_proxy_pkt *)dll; if (lws_write(wsi, ((unsigned char *)&pkt[1]) + LWS_PRE, pkt->len, lws_write_ws_flags( pkt->binary ? LWS_WRITE_BINARY : LWS_WRITE_TEXT, pkt->first, pkt->final)) < 0) return -1; wsi->parent->ws->proxy_buffered -= pkt->len; lws_dll2_remove(dll); lws_free(pkt); if (lws_dll2_get_tail(&wsi->ws->proxy_owner)) lws_callback_on_writable(wsi); break; /* h1 ws proxying... parent / server / incoming */ case LWS_CALLBACK_CONFIRM_EXTENSION_OKAY: return 1; case LWS_CALLBACK_CLOSED: lwsl_user("%s: closed\n", __func__); return -1; case LWS_CALLBACK_RECEIVE: pkt = lws_zalloc(sizeof(*pkt) + LWS_PRE + len, __func__); if (!pkt) return -1; pkt->pkt_list.prev = pkt->pkt_list.next = NULL; pkt->len = len; pkt->first = lws_is_first_fragment(wsi); pkt->final = lws_is_final_fragment(wsi); pkt->binary = lws_frame_is_binary(wsi); memcpy(((uint8_t *)&pkt[1]) + LWS_PRE, in, len); lws_dll2_add_tail(&pkt->pkt_list, &wsi->child_list->ws->proxy_owner); lws_callback_on_writable(wsi->child_list); break; case LWS_CALLBACK_SERVER_WRITEABLE: dll = lws_dll2_get_tail(&wsi->ws->proxy_owner); if (!dll) break; pkt = (struct lws_proxy_pkt *)dll; if (lws_write(wsi, ((unsigned char *)&pkt[1]) + LWS_PRE, pkt->len, lws_write_ws_flags( pkt->binary ? LWS_WRITE_BINARY : LWS_WRITE_TEXT, pkt->first, pkt->final)) < 0) return -1; lws_dll2_remove(dll); lws_free(pkt); if (lws_dll2_get_tail(&wsi->ws->proxy_owner)) lws_callback_on_writable(wsi); break; default: return 0; } return 0; } const struct lws_protocols lws_ws_proxy = { "lws-ws-proxy", lws_callback_ws_proxy, 0, 8192, 8192, NULL, 0 }; #endif LWS_VISIBLE int lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct lws_ssl_info *si; #ifdef LWS_WITH_CGI struct lws_cgi_args *args; #endif #if defined(LWS_WITH_CGI) || defined(LWS_WITH_HTTP_PROXY) char buf[8192]; int n; #endif #if defined(LWS_WITH_HTTP_PROXY) unsigned char **p, *end; struct lws *parent; #endif switch (reason) { #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) case LWS_CALLBACK_HTTP: #ifndef LWS_NO_SERVER if (lws_return_http_status(wsi, HTTP_STATUS_NOT_FOUND, NULL)) return -1; if (lws_http_transaction_completed(wsi)) #endif return -1; break; #if !defined(LWS_NO_SERVER) case LWS_CALLBACK_HTTP_BODY_COMPLETION: #if defined(LWS_WITH_HTTP_PROXY) if (wsi->child_list) { lwsl_user("%s: LWS_CALLBACK_HTTP_BODY_COMPLETION: %d\n", __func__, (int)len); break; } #endif /* fallthru */ case LWS_CALLBACK_HTTP_FILE_COMPLETION: if (lws_http_transaction_completed(wsi)) return -1; break; #endif #if defined(LWS_WITH_HTTP_PROXY) case LWS_CALLBACK_HTTP_BODY: if (wsi->child_list) { lwsl_user("%s: LWS_CALLBACK_HTTP_BODY: stashing %d\n", __func__, (int)len); if (lws_buflist_append_segment(&wsi->http.buflist_post_body, in, len) < 0) return -1; lws_callback_on_writable(wsi->child_list); } break; #endif case LWS_CALLBACK_HTTP_WRITEABLE: // lwsl_err("%s: LWS_CALLBACK_HTTP_WRITEABLE\n", __func__); #ifdef LWS_WITH_CGI if (wsi->reason_bf & (LWS_CB_REASON_AUX_BF__CGI_HEADERS | LWS_CB_REASON_AUX_BF__CGI)) { n = lws_cgi_write_split_stdout_headers(wsi); if (n < 0) { lwsl_debug("AUX_BF__CGI forcing close\n"); return -1; } if (!n && wsi->http.cgi && wsi->http.cgi->stdwsi[LWS_STDOUT]) lws_rx_flow_control( wsi->http.cgi->stdwsi[LWS_STDOUT], 1); if (wsi->reason_bf & LWS_CB_REASON_AUX_BF__CGI_HEADERS) wsi->reason_bf &= ~LWS_CB_REASON_AUX_BF__CGI_HEADERS; else wsi->reason_bf &= ~LWS_CB_REASON_AUX_BF__CGI; if (wsi->http.cgi && wsi->http.cgi->cgi_transaction_over) return -1; break; } if (wsi->reason_bf & LWS_CB_REASON_AUX_BF__CGI_CHUNK_END) { if (!wsi->http2_substream) { memcpy(buf + LWS_PRE, "0\x0d\x0a\x0d\x0a", 5); lwsl_debug("writing chunk term and exiting\n"); n = lws_write(wsi, (unsigned char *)buf + LWS_PRE, 5, LWS_WRITE_HTTP); } else n = lws_write(wsi, (unsigned char *)buf + LWS_PRE, 0, LWS_WRITE_HTTP_FINAL); /* always close after sending it */ if (lws_http_transaction_completed(wsi)) return -1; return 0; } #endif #if defined(LWS_WITH_HTTP_PROXY) if (wsi->reason_bf & LWS_CB_REASON_AUX_BF__PROXY_HEADERS) { wsi->reason_bf &= ~LWS_CB_REASON_AUX_BF__PROXY_HEADERS; n = LWS_WRITE_HTTP_HEADERS; if (!wsi->http.prh_content_length) n |= LWS_WRITE_H2_STREAM_END; lwsl_debug("%s: %p: issuing proxy headers: clen %d\n", __func__, wsi, (int)wsi->http.prh_content_length); n = lws_write(wsi, wsi->http.pending_return_headers + LWS_PRE, wsi->http.pending_return_headers_len, n); lws_free_set_NULL(wsi->http.pending_return_headers); if (n < 0) { lwsl_err("%s: EST_CLIENT_HTTP: write failed\n", __func__); return -1; } lws_callback_on_writable(wsi); break; } if (wsi->reason_bf & LWS_CB_REASON_AUX_BF__PROXY) { char *px = buf + LWS_PRE; int lenx = sizeof(buf) - LWS_PRE - 32; /* * our sink is writeable and our source has something * to read. So read a lump of source material of * suitable size to send or what's available, whichever * is the smaller. */ wsi->reason_bf &= ~LWS_CB_REASON_AUX_BF__PROXY; if (!lws_get_child(wsi)) break; /* this causes LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ */ if (lws_http_client_read(lws_get_child(wsi), &px, &lenx) < 0) { lwsl_info("%s: LWS_CB_REASON_AUX_BF__PROXY: " "client closed\n", __func__); stream_close(wsi); return -1; } break; } if (wsi->reason_bf & LWS_CB_REASON_AUX_BF__PROXY_TRANS_END) { lwsl_info("%s: LWS_CB_REASON_AUX_BF__PROXY_TRANS_END\n", __func__); wsi->reason_bf &= ~LWS_CB_REASON_AUX_BF__PROXY_TRANS_END; if (stream_close(wsi)) return -1; if (lws_http_transaction_completed(wsi)) return -1; } #endif break; #if defined(LWS_WITH_HTTP_PROXY) case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: assert(lws_get_parent(wsi)); if (!lws_get_parent(wsi)) break; lws_get_parent(wsi)->reason_bf |= LWS_CB_REASON_AUX_BF__PROXY; lws_callback_on_writable(lws_get_parent(wsi)); break; case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: { char *out = buf + LWS_PRE; assert(lws_get_parent(wsi)); if (wsi->http.proxy_parent_chunked) { if (len > sizeof(buf) - LWS_PRE - 16) { lwsl_err("oversize buf %d %d\n", (int)len, (int)sizeof(buf) - LWS_PRE - 16); return -1; } /* * this only needs dealing with on http/1.1 to allow * pipelining */ n = lws_snprintf(out, 14, "%X\x0d\x0a", (int)len); out += n; memcpy(out, in, len); out += len; *out++ = '\x0d'; *out++ = '\x0a'; n = lws_write(lws_get_parent(wsi), (unsigned char *)buf + LWS_PRE, len + n + 2, LWS_WRITE_HTTP); } else n = lws_write(lws_get_parent(wsi), (unsigned char *)in, len, LWS_WRITE_HTTP); if (n < 0) return -1; break; } /* h1 http proxying... */ case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: { unsigned char *start, *p, *end; /* * We want to proxy these headers, but we are being called * at the point the onward client was established, which is * unrelated to the state or writability of our proxy * connection. * * Therefore produce the headers using the onward client ah * while we have it, and stick them on the output buflist to be * written on the proxy connection as soon as convenient. */ parent = lws_get_parent(wsi); if (!parent) return 0; start = p = (unsigned char *)buf + LWS_PRE; end = p + sizeof(buf) - LWS_PRE - 256; if (lws_add_http_header_status(lws_get_parent(wsi), lws_http_client_http_response(wsi), &p, end)) return 1; /* * copy these headers from the client connection to the parent */ proxy_header(parent, wsi, end, 256, WSI_TOKEN_HTTP_CONTENT_LENGTH, &p, end); proxy_header(parent, wsi, end, 256, WSI_TOKEN_HTTP_CONTENT_TYPE, &p, end); proxy_header(parent, wsi, end, 256, WSI_TOKEN_HTTP_ETAG, &p, end); proxy_header(parent, wsi, end, 256, WSI_TOKEN_HTTP_ACCEPT_LANGUAGE, &p, end); proxy_header(parent, wsi, end, 256, WSI_TOKEN_HTTP_CONTENT_ENCODING, &p, end); proxy_header(parent, wsi, end, 256, WSI_TOKEN_HTTP_CACHE_CONTROL, &p, end); proxy_header(parent, wsi, end, 256, WSI_TOKEN_HTTP_SET_COOKIE, &p, end); proxy_header(parent, wsi, end, 256, WSI_TOKEN_HTTP_LOCATION, &p, end); if (!parent->http2_substream) if (lws_add_http_header_by_token(parent, WSI_TOKEN_CONNECTION, (unsigned char *)"close", 5, &p, end)) return -1; /* * We proxy using h1 only atm, and strip any chunking so it * can go back out on h2 just fine. * * However if we are actually going out on h1, we need to add * our own chunking since we still don't know the size. */ if (!parent->http2_substream && !lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) { lwsl_debug("downstream parent chunked\n"); if (lws_add_http_header_by_token(parent, WSI_TOKEN_HTTP_TRANSFER_ENCODING, (unsigned char *)"chunked", 7, &p, end)) return -1; wsi->http.proxy_parent_chunked = 1; } if (lws_finalize_http_header(parent, &p, end)) return 1; parent->http.prh_content_length = -1; if (lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) parent->http.prh_content_length = atoll( lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)); parent->http.pending_return_headers_len = lws_ptr_diff(p, start); parent->http.pending_return_headers = lws_malloc(parent->http.pending_return_headers_len + LWS_PRE, "return proxy headers"); if (!parent->http.pending_return_headers) return -1; memcpy(parent->http.pending_return_headers + LWS_PRE, start, parent->http.pending_return_headers_len); parent->reason_bf |= LWS_CB_REASON_AUX_BF__PROXY_HEADERS; lwsl_debug("%s: LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: " "prepared %d headers (len %d)\n", __func__, lws_http_client_http_response(wsi), (int)parent->http.prh_content_length); /* * so at this point, the onward client connection can bear * traffic. We might be doing a POST and have pending cached * inbound stuff to send, it can go now. */ lws_callback_on_writable(parent); break; } case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_info("%s: COMPLETED_CLIENT_HTTP: %p (parent %p)\n", __func__, wsi, lws_get_parent(wsi)); if (!lws_get_parent(wsi)) break; lws_get_parent(wsi)->reason_bf |= LWS_CB_REASON_AUX_BF__PROXY_TRANS_END; lws_callback_on_writable(lws_get_parent(wsi)); break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: if (!lws_get_parent(wsi)) break; lwsl_err("%s: LWS_CALLBACK_CLOSED_CLIENT_HTTP\n", __func__); lws_set_timeout(lws_get_parent(wsi), PENDING_TIMEOUT_KILLED_BY_PROXY_CLIENT_CLOSE, LWS_TO_KILL_ASYNC); break; case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: parent = lws_get_parent(wsi); if (!parent) break; p = (unsigned char **)in; end = (*p) + len; /* * copy these headers from the parent request to the client * connection's request */ proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf), WSI_TOKEN_HTTP_ETAG, p, end); proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf), WSI_TOKEN_HTTP_IF_MODIFIED_SINCE, p, end); proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf), WSI_TOKEN_HTTP_ACCEPT_LANGUAGE, p, end); proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf), WSI_TOKEN_HTTP_ACCEPT_ENCODING, p, end); proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf), WSI_TOKEN_HTTP_CACHE_CONTROL, p, end); proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf), WSI_TOKEN_HTTP_COOKIE, p, end); buf[0] = '\0'; lws_get_peer_simple(parent, buf, sizeof(buf)); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_X_FORWARDED_FOR, (unsigned char *)buf, (int)strlen(buf), p, end)) return -1; break; #endif #ifdef LWS_WITH_CGI /* CGI IO events (POLLIN/OUT) appear here, our default policy is: * * - POST data goes on subprocess stdin * - subprocess stdout goes on http via writeable callback * - subprocess stderr goes to the logs */ case LWS_CALLBACK_CGI: args = (struct lws_cgi_args *)in; switch (args->ch) { /* which of stdin/out/err ? */ case LWS_STDIN: /* TBD stdin rx flow control */ break; case LWS_STDOUT: /* quench POLLIN on STDOUT until MASTER got writeable */ lws_rx_flow_control(args->stdwsi[LWS_STDOUT], 0); wsi->reason_bf |= LWS_CB_REASON_AUX_BF__CGI; /* when writing to MASTER would not block */ lws_callback_on_writable(wsi); break; case LWS_STDERR: n = lws_get_socket_fd(args->stdwsi[LWS_STDERR]); if (n < 0) break; n = read(n, buf, sizeof(buf) - 2); if (n > 0) { if (buf[n - 1] != '\n') buf[n++] = '\n'; buf[n] = '\0'; lwsl_notice("CGI-stderr: %s\n", buf); } break; } break; case LWS_CALLBACK_CGI_TERMINATED: lwsl_debug("LWS_CALLBACK_CGI_TERMINATED: %d %" PRIu64 "\n", wsi->http.cgi->explicitly_chunked, (uint64_t)wsi->http.cgi->content_length); if (!wsi->http.cgi->explicitly_chunked && !wsi->http.cgi->content_length) { /* send terminating chunk */ lwsl_debug("LWS_CALLBACK_CGI_TERMINATED: ending\n"); wsi->reason_bf |= LWS_CB_REASON_AUX_BF__CGI_CHUNK_END; lws_callback_on_writable(wsi); lws_set_timeout(wsi, PENDING_TIMEOUT_CGI, 3); break; } if (lws_http_transaction_completed(wsi)) return -1; return 0; case LWS_CALLBACK_CGI_STDIN_DATA: /* POST body for stdin */ args = (struct lws_cgi_args *)in; args->data[args->len] = '\0'; if (!args->stdwsi[LWS_STDIN]) return -1; n = lws_get_socket_fd(args->stdwsi[LWS_STDIN]); if (n < 0) return -1; #if defined(LWS_WITH_ZLIB) if (wsi->http.cgi->gzip_inflate) { /* gzip handling */ if (!wsi->http.cgi->gzip_init) { lwsl_info("inflating gzip\n"); memset(&wsi->http.cgi->inflate, 0, sizeof(wsi->http.cgi->inflate)); if (inflateInit2(&wsi->http.cgi->inflate, 16 + 15) != Z_OK) { lwsl_err("%s: iniflateInit failed\n", __func__); return -1; } wsi->http.cgi->gzip_init = 1; } wsi->http.cgi->inflate.next_in = args->data; wsi->http.cgi->inflate.avail_in = args->len; do { wsi->http.cgi->inflate.next_out = wsi->http.cgi->inflate_buf; wsi->http.cgi->inflate.avail_out = sizeof(wsi->http.cgi->inflate_buf); n = inflate(&wsi->http.cgi->inflate, Z_SYNC_FLUSH); switch (n) { case Z_NEED_DICT: case Z_STREAM_ERROR: case Z_DATA_ERROR: case Z_MEM_ERROR: inflateEnd(&wsi->http.cgi->inflate); wsi->http.cgi->gzip_init = 0; lwsl_err("zlib error inflate %d\n", n); return -1; } if (wsi->http.cgi->inflate.avail_out != sizeof(wsi->http.cgi->inflate_buf)) { int written; written = write(args->stdwsi[LWS_STDIN]->desc.filefd, wsi->http.cgi->inflate_buf, sizeof(wsi->http.cgi->inflate_buf) - wsi->http.cgi->inflate.avail_out); if (written != (int)( sizeof(wsi->http.cgi->inflate_buf) - wsi->http.cgi->inflate.avail_out)) { lwsl_notice("LWS_CALLBACK_CGI_STDIN_DATA: " "sent %d only %d went", n, args->len); } if (n == Z_STREAM_END) { lwsl_err("gzip inflate end\n"); inflateEnd(&wsi->http.cgi->inflate); wsi->http.cgi->gzip_init = 0; break; } } else break; if (wsi->http.cgi->inflate.avail_out) break; } while (1); return args->len; } #endif /* WITH_ZLIB */ n = write(n, args->data, args->len); // lwsl_hexdump_notice(args->data, args->len); if (n < args->len) lwsl_notice("LWS_CALLBACK_CGI_STDIN_DATA: " "sent %d only %d went", n, args->len); if (wsi->http.cgi->post_in_expected && args->stdwsi[LWS_STDIN] && args->stdwsi[LWS_STDIN]->desc.filefd > 0) { wsi->http.cgi->post_in_expected -= n; if (!wsi->http.cgi->post_in_expected) { struct lws *siwsi = args->stdwsi[LWS_STDIN]; lwsl_debug("%s: expected POST in end: " "closing stdin wsi %p, fd %d\n", __func__, siwsi, siwsi->desc.sockfd); __remove_wsi_socket_from_fds(siwsi); lwsi_set_state(siwsi, LRS_DEAD_SOCKET); siwsi->socket_is_permanently_unusable = 1; // lws_remove_child_from_any_parent(siwsi); if (wsi->context->event_loop_ops-> close_handle_manually) { wsi->context->event_loop_ops-> close_handle_manually(siwsi); siwsi->told_event_loop_closed = 1; } else { compatible_close(siwsi->desc.sockfd); __lws_free_wsi(siwsi); } wsi->http.cgi->pipe_fds[LWS_STDIN][1] = -1; // args->stdwsi[LWS_STDIN] = NULL; } } return n; #endif /* WITH_CGI */ #endif /* ROLE_ H1 / H2 */ case LWS_CALLBACK_SSL_INFO: si = in; (void)si; lwsl_notice("LWS_CALLBACK_SSL_INFO: where: 0x%x, ret: 0x%x\n", si->where, si->ret); break; #if LWS_MAX_SMP > 1 case LWS_CALLBACK_GET_THREAD_ID: return (int)(unsigned long long)pthread_self(); #endif default: break; } return 0; } libwebsockets-3.2.1/lib/core-net/lws-dsh.c000066400000000000000000000302311357643561300204000ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" struct lws_dsh_search { size_t required; int kind; lws_dsh_obj_t *best; lws_dsh_t *dsh; lws_dsh_t *already_checked; lws_dsh_t *this_dsh; }; static int _lws_dsh_alloc_tail(lws_dsh_t *dsh, int kind, const void *src1, size_t size1, const void *src2, size_t size2, lws_dll2_t *replace); static size_t lws_dsh_align(size_t length) { size_t align = sizeof(int *); if (length & (align - 1)) length += align - (length & (align - 1)); return length; } lws_dsh_t * lws_dsh_create(lws_dll2_owner_t *owner, size_t buf_len, int count_kinds) { size_t oha_len = sizeof(lws_dsh_obj_head_t) * ++count_kinds; lws_dsh_obj_t *obj; lws_dsh_t *dsh; int n; assert(buf_len); assert(count_kinds > 1); dsh = lws_malloc(sizeof(lws_dsh_t) + buf_len + oha_len, __func__); if (!dsh) return NULL; /* set convenience pointers to the overallocated parts */ dsh->oha = (lws_dsh_obj_head_t *)&dsh[1]; dsh->buf = ((uint8_t *)dsh->oha) + oha_len; dsh->count_kinds = count_kinds; dsh->buffer_size = buf_len; dsh->being_destroyed = 0; /* clear down the obj heads array */ memset(dsh->oha, 0, oha_len); for (n = 0; n < count_kinds; n++) dsh->oha[n].kind = n; /* initially the whole buffer is on the free kind (0) list */ obj = (lws_dsh_obj_t *)dsh->buf; memset(obj, 0, sizeof(*obj)); obj->asize = buf_len - sizeof(*obj); lws_dll2_add_head(&obj->list, &dsh->oha[0].owner); dsh->locally_free = obj->asize; dsh->locally_in_use = 0; lws_dll2_clear(&dsh->list); if (owner) lws_dll2_add_head(&dsh->list, owner); // lws_dsh_describe(dsh, "post-init"); return dsh; } static int search_best_free(struct lws_dll2 *d, void *user) { struct lws_dsh_search *s = (struct lws_dsh_search *)user; lws_dsh_obj_t *obj = lws_container_of(d, lws_dsh_obj_t, list); lwsl_debug("%s: obj %p, asize %zu (req %zu)\n", __func__, obj, obj->asize, s->required); if (obj->asize >= s->required && (!s->best || obj->asize < s->best->asize)) { s->best = obj; s->dsh = s->this_dsh; } return 0; } static int try_foreign(struct lws_dll2 *d, void *user) { struct lws_dsh_search *s = (struct lws_dsh_search *)user; lws_dsh_t *dsh1 = lws_container_of(d, lws_dsh_t, list); if (dsh1 == s->already_checked) return 0; if (dsh1->being_destroyed) return 0; if (dsh1->count_kinds < s->kind + 1) return 0; lwsl_debug("%s: actual try_foreign: dsh %p (free list size %d)\n", __func__, dsh1, dsh1->oha[0].owner.count); s->this_dsh = dsh1; if (lws_dll2_foreach_safe(&dsh1->oha[0].owner, s, search_best_free)) return 1; return 0; } static int free_foreign(struct lws_dll2 *d, void *user) { lws_dsh_obj_t *obj = lws_container_of(d, lws_dsh_obj_t, list); lws_dsh_t *dsh = (lws_dsh_t *)user; void *p = (void *)&obj[1]; if (obj->dsh != dsh) lws_dsh_free(&p); return 0; } static int evict2(struct lws_dll2 *d, void *user) { lws_dsh_obj_t *obj = lws_container_of(d, lws_dsh_obj_t, list); lws_dsh_t *dsh = (lws_dsh_t *)user; void *p; if (obj->dsh != dsh) return 0; /* * If we are here, it means obj is a live object that is allocated on * the dsh being destroyed, from a different dsh. We need to migrate * the object to a dsh that isn't being destroyed. */ lwsl_debug("%s: migrating object size %zu\n", __func__, obj->size); if (_lws_dsh_alloc_tail(dsh, 0, (void *)&obj[1], obj->size, NULL, 0, &obj->list)) { lwsl_notice("%s: failed to migrate object\n", __func__); /* * only thing we can do is drop the logical object */ p = (uint8_t *)&obj[1]; lws_dsh_free(&p); } return 0; } static int evict1(struct lws_dll2 *d, void *user) { lws_dsh_t *dsh1 = lws_container_of(d, lws_dsh_t, list); lws_dsh_t *dsh = (lws_dsh_t *)user; int n; if (dsh1->being_destroyed) return 0; /* * For every dsh that's not being destroyed, send every object to * evict2 for checking. */ lwsl_debug("%s: checking dsh %p\n", __func__, dsh1); for (n = 1; n < dsh1->count_kinds; n++) { lws_dll2_describe(&dsh1->oha[n].owner, "check dsh1"); lws_dll2_foreach_safe(&dsh1->oha[n].owner, dsh, evict2); } return 0; } void lws_dsh_destroy(lws_dsh_t **pdsh) { lws_dsh_t *dsh = *pdsh; int n; if (!dsh) return; lwsl_debug("%s: destroying dsh %p\n", __func__, dsh); dsh->being_destroyed = 1; /* we need to explicitly free any of our allocations in foreign dsh */ for (n = 1; n < dsh->count_kinds; n++) lws_dll2_foreach_safe(&dsh->oha[n].owner, dsh, free_foreign); /* * We need to have anybody else with allocations in us evict them * and make a copy in a buffer that isn't being destroyed */ if (dsh->list.owner) lws_dll2_foreach_safe(dsh->list.owner, dsh, evict1); lws_dll2_remove(&dsh->list); /* everything else is in one heap allocation */ lws_free_set_NULL(*pdsh); } static int _lws_dsh_alloc_tail(lws_dsh_t *dsh, int kind, const void *src1, size_t size1, const void *src2, size_t size2, lws_dll2_t *replace) { size_t asize = sizeof(lws_dsh_obj_t) + lws_dsh_align(size1 + size2); struct lws_dsh_search s; assert(kind >= 0); kind++; assert(!dsh || kind < dsh->count_kinds); /* * Search our free list looking for the smallest guy who will fit * what we want to allocate */ s.required = asize; s.kind = kind; s.best = NULL; s.already_checked = NULL; s.this_dsh = dsh; if (dsh && !dsh->being_destroyed) lws_dll2_foreach_safe(&dsh->oha[0].owner, &s, search_best_free); if (!s.best) { /* * Let's see if any other buffer has room */ s.already_checked = dsh; if (dsh && dsh->list.owner) lws_dll2_foreach_safe(dsh->list.owner, &s, try_foreign); if (!s.best) { lwsl_notice("%s: no buffer has space\n", __func__); return 1; } } /* anything coming out of here must be aligned */ assert(!(((unsigned long)s.best) & (sizeof(int *) - 1))); if (s.best->asize < asize + (2 * sizeof(*s.best))) { /* * Exact fit, or close enough we can't / don't want to have to * track the little bit of free area that would be left. * * Move the object from the free list to the oha of the * desired kind */ lws_dll2_remove(&s.best->list); s.best->dsh = s.dsh; s.best->size = size1 + size2; memcpy(&s.best[1], src1, size1); if (src2) memcpy((uint8_t *)&s.best[1] + size1, src2, size2); if (replace) { s.best->list.prev = replace->prev; s.best->list.next = replace->next; s.best->list.owner = replace->owner; if (replace->prev) replace->prev->next = &s.best->list; if (replace->next) replace->next->prev = &s.best->list; } else if (dsh) lws_dll2_add_tail(&s.best->list, &dsh->oha[kind].owner); assert(s.dsh->locally_free >= s.best->asize); s.dsh->locally_free -= s.best->asize; s.dsh->locally_in_use += s.best->asize; assert(s.dsh->locally_in_use <= s.dsh->buffer_size); } else { lws_dsh_obj_t *obj; /* * Free area was oversize enough that we need to split it. * * Leave the first part of the free area where it is and * reduce its extent by our asize. Use the latter part of * the original free area as the allocation. */ lwsl_debug("%s: splitting... free reduce %zu -> %zu\n", __func__, s.best->asize, s.best->asize - asize); s.best->asize -= asize; /* latter part becomes new object */ obj = (lws_dsh_obj_t *)(((uint8_t *)s.best) + s.best->asize); lws_dll2_clear(&obj->list); obj->dsh = s.dsh; obj->size = size1 + size2; obj->asize = asize; memcpy(&obj[1], src1, size1); if (src2) memcpy((uint8_t *)&obj[1] + size1, src2, size2); if (replace) { s.best->list.prev = replace->prev; s.best->list.next = replace->next; s.best->list.owner = replace->owner; if (replace->prev) replace->prev->next = &s.best->list; if (replace->next) replace->next->prev = &s.best->list; } else if (dsh) lws_dll2_add_tail(&obj->list, &dsh->oha[kind].owner); assert(s.dsh->locally_free >= asize); s.dsh->locally_free -= asize; s.dsh->locally_in_use += asize; assert(s.dsh->locally_in_use <= s.dsh->buffer_size); } // lws_dsh_describe(dsh, "post-alloc"); return 0; } int lws_dsh_alloc_tail(lws_dsh_t *dsh, int kind, const void *src1, size_t size1, const void *src2, size_t size2) { return _lws_dsh_alloc_tail(dsh, kind, src1, size1, src2, size2, NULL); } static int buf_compare(const lws_dll2_t *d, const lws_dll2_t *i) { return (int)lws_ptr_diff(d, i); } void lws_dsh_free(void **pobj) { lws_dsh_obj_t *_o = (lws_dsh_obj_t *)((uint8_t *)(*pobj) - sizeof(*_o)), *_o2; lws_dsh_t *dsh = _o->dsh; /* anything coming out of here must be aligned */ assert(!(((unsigned long)_o) & (sizeof(int *) - 1))); /* * Remove the object from its list and place on the free list of the * dsh the buffer space belongs to */ lws_dll2_remove(&_o->list); *pobj = NULL; assert(dsh->locally_in_use >= _o->asize); dsh->locally_free += _o->asize; dsh->locally_in_use -= _o->asize; assert(dsh->locally_in_use <= dsh->buffer_size); /* * The free space list is sorted in buffer address order, so detecting * coalescing opportunities is cheap. Because the free list should be * continuously tending to reduce by coalescing, the sorting should not * be expensive to maintain. */ _o->size = 0; /* not meaningful when on free list */ lws_dll2_add_sorted(&_o->list, &_o->dsh->oha[0].owner, buf_compare); /* First check for already-free block at the end we can subsume. * Because the free list is sorted, if there is such a guy he is * already our list.next */ _o2 = (lws_dsh_obj_t *)_o->list.next; if (_o2 && (uint8_t *)_o + _o->asize == (uint8_t *)_o2) { /* * since we are freeing _obj, we can coalesce with a * free area immediately ahead of it * * [ _o (being freed) ][ _o2 (free) ] -> [ larger _o ] */ _o->asize += _o2->asize; /* guy next to us was absorbed into us */ lws_dll2_remove(&_o2->list); } /* Then check if we can be subsumed by a free block behind us. * Because the free list is sorted, if there is such a guy he is * already our list.prev */ _o2 = (lws_dsh_obj_t *)_o->list.prev; if (_o2 && (uint8_t *)_o2 + _o2->asize == (uint8_t *)_o) { /* * since we are freeing obj, we can coalesce it with * the previous free area that abuts it * * [ _o2 (free) ][ _o (being freed) ] -> [ larger _o2 ] */ _o2->asize += _o->asize; /* we were absorbed! */ lws_dll2_remove(&_o->list); } // lws_dsh_describe(dsh, "post-alloc"); } int lws_dsh_get_head(lws_dsh_t *dsh, int kind, void **obj, size_t *size) { lws_dsh_obj_t *_obj = (lws_dsh_obj_t *) lws_dll2_get_head(&dsh->oha[kind + 1].owner); if (!_obj) { *obj = 0; *size = 0; return 1; /* there is no head */ } *obj = (void *)(&_obj[1]); *size = _obj->size; /* anything coming out of here must be aligned */ assert(!(((unsigned long)(*obj)) & (sizeof(int *) - 1))); return 0; /* we returned the head */ } #if defined(_DEBUG) static int describe_kind(struct lws_dll2 *d, void *user) { lws_dsh_obj_t *obj = lws_container_of(d, lws_dsh_obj_t, list); lwsl_info(" _obj %p - %p, dsh %p, size %zu, asize %zu\n", obj, (uint8_t *)obj + obj->asize, obj->dsh, obj->size, obj->asize); return 0; } void lws_dsh_describe(lws_dsh_t *dsh, const char *desc) { int n = 0; lwsl_info("%s: dsh %p, bufsize %zu, kinds %d, lf: %zu, liu: %zu, %s\n", __func__, dsh, dsh->buffer_size, dsh->count_kinds, dsh->locally_free, dsh->locally_in_use, desc); for (n = 0; n < dsh->count_kinds; n++) { lwsl_info(" Kind %d:\n", n); lws_dll2_foreach_safe(&dsh->oha[n].owner, dsh, describe_kind); } } #endif libwebsockets-3.2.1/lib/core-net/network.c000066400000000000000000000273521357643561300205220ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) static int interface_to_sa(struct lws_vhost *vh, const char *ifname, struct sockaddr_in *addr, size_t addrlen, int allow_ipv6) { int ipv6 = 0; #ifdef LWS_WITH_IPV6 if (allow_ipv6) ipv6 = LWS_IPV6_ENABLED(vh); #endif (void)vh; return lws_interface_to_sa(ipv6, ifname, addr, addrlen); } #endif #ifndef LWS_PLAT_OPTEE static int lws_get_addresses(struct lws_vhost *vh, void *ads, char *name, int name_len, char *rip, int rip_len) { struct addrinfo ai, *res; struct sockaddr_in addr4; rip[0] = '\0'; name[0] = '\0'; addr4.sin_family = AF_UNSPEC; #ifdef LWS_WITH_IPV6 if (LWS_IPV6_ENABLED(vh)) { if (!lws_plat_inet_ntop(AF_INET6, &((struct sockaddr_in6 *)ads)->sin6_addr, rip, rip_len)) { lwsl_err("inet_ntop: %s", strerror(LWS_ERRNO)); return -1; } // Strip off the IPv4 to IPv6 header if one exists if (strncmp(rip, "::ffff:", 7) == 0) memmove(rip, rip + 7, strlen(rip) - 6); getnameinfo((struct sockaddr *)ads, sizeof(struct sockaddr_in6), name, name_len, NULL, 0, 0); return 0; } else #endif { struct addrinfo *result; memset(&ai, 0, sizeof ai); ai.ai_family = PF_UNSPEC; ai.ai_socktype = SOCK_STREAM; #if !defined(LWS_WITH_ESP32) if (getnameinfo((struct sockaddr *)ads, sizeof(struct sockaddr_in), name, name_len, NULL, 0, 0)) return -1; #endif if (getaddrinfo(name, NULL, &ai, &result)) return -1; res = result; while (addr4.sin_family == AF_UNSPEC && res) { switch (res->ai_family) { case AF_INET: addr4.sin_addr = ((struct sockaddr_in *)res->ai_addr)->sin_addr; addr4.sin_family = AF_INET; break; } res = res->ai_next; } freeaddrinfo(result); } if (addr4.sin_family == AF_UNSPEC) return -1; if (lws_plat_inet_ntop(AF_INET, &addr4.sin_addr, rip, rip_len) == NULL) return -1; return 0; } LWS_VISIBLE const char * lws_get_peer_simple(struct lws *wsi, char *name, int namelen) { socklen_t len, olen; #ifdef LWS_WITH_IPV6 struct sockaddr_in6 sin6; #endif struct sockaddr_in sin4; int af = AF_INET; void *p, *q; wsi = lws_get_network_wsi(wsi); #ifdef LWS_WITH_IPV6 if (LWS_IPV6_ENABLED(wsi->vhost)) { len = sizeof(sin6); p = &sin6; af = AF_INET6; q = &sin6.sin6_addr; } else #endif { len = sizeof(sin4); p = &sin4; q = &sin4.sin_addr; } olen = len; if (getpeername(wsi->desc.sockfd, p, &len) < 0 || len > olen) { lwsl_warn("getpeername: %s\n", strerror(LWS_ERRNO)); return NULL; } return lws_plat_inet_ntop(af, q, name, namelen); } #endif LWS_VISIBLE void lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name, int name_len, char *rip, int rip_len) { #ifndef LWS_PLAT_OPTEE socklen_t len; #ifdef LWS_WITH_IPV6 struct sockaddr_in6 sin6; #endif struct sockaddr_in sin4; struct lws_context *context = wsi->context; int ret = -1; void *p; rip[0] = '\0'; name[0] = '\0'; lws_latency_pre(context, wsi); #ifdef LWS_WITH_IPV6 if (LWS_IPV6_ENABLED(wsi->vhost)) { len = sizeof(sin6); p = &sin6; } else #endif { len = sizeof(sin4); p = &sin4; } if (getpeername(fd, p, &len) < 0) { lwsl_warn("getpeername: %s\n", strerror(LWS_ERRNO)); goto bail; } ret = lws_get_addresses(wsi->vhost, p, name, name_len, rip, rip_len); bail: lws_latency(context, wsi, "lws_get_peer_addresses", ret, 1); #endif (void)wsi; (void)fd; (void)name; (void)name_len; (void)rip; (void)rip_len; } /* note: this returns a random port, or one of these <= 0 return codes: * * LWS_ITOSA_USABLE: the interface is usable, returned if so and sockfd invalid * LWS_ITOSA_NOT_EXIST: the requested iface does not even exist * LWS_ITOSA_NOT_USABLE: the requested iface exists but is not usable (eg, no IP) * LWS_ITOSA_BUSY: the port at the requested iface + port is already in use */ LWS_EXTERN int lws_socket_bind(struct lws_vhost *vhost, lws_sockfd_type sockfd, int port, const char *iface, int ipv6_allowed) { #ifdef LWS_WITH_UNIX_SOCK struct sockaddr_un serv_unix; #endif #ifdef LWS_WITH_IPV6 struct sockaddr_in6 serv_addr6; #endif struct sockaddr_in serv_addr4; #ifndef LWS_PLAT_OPTEE socklen_t len = sizeof(struct sockaddr_storage); #endif int n; #if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) int m; #endif struct sockaddr_storage sin; struct sockaddr *v; memset(&sin, 0, sizeof(sin)); #if defined(LWS_WITH_UNIX_SOCK) if (LWS_UNIX_SOCK_ENABLED(vhost)) { v = (struct sockaddr *)&serv_unix; n = sizeof(struct sockaddr_un); memset(&serv_unix, 0, sizeof(serv_unix)); serv_unix.sun_family = AF_UNIX; if (!iface) return LWS_ITOSA_NOT_EXIST; if (sizeof(serv_unix.sun_path) <= strlen(iface)) { lwsl_err("\"%s\" too long for UNIX domain socket\n", iface); return LWS_ITOSA_NOT_EXIST; } strcpy(serv_unix.sun_path, iface); if (serv_unix.sun_path[0] == '@') serv_unix.sun_path[0] = '\0'; else unlink(serv_unix.sun_path); } else #endif #if defined(LWS_WITH_IPV6) && !defined(LWS_WITH_ESP32) if (ipv6_allowed && LWS_IPV6_ENABLED(vhost)) { v = (struct sockaddr *)&serv_addr6; n = sizeof(struct sockaddr_in6); memset(&serv_addr6, 0, sizeof(serv_addr6)); if (iface) { m = interface_to_sa(vhost, iface, (struct sockaddr_in *)v, n, 1); if (m == LWS_ITOSA_NOT_USABLE) { lwsl_info("%s: netif %s: Not usable\n", __func__, iface); return m; } if (m == LWS_ITOSA_NOT_EXIST) { lwsl_info("%s: netif %s: Does not exist\n", __func__, iface); return m; } serv_addr6.sin6_scope_id = lws_get_addr_scope(iface); } serv_addr6.sin6_family = AF_INET6; serv_addr6.sin6_port = htons(port); } else #endif { v = (struct sockaddr *)&serv_addr4; n = sizeof(serv_addr4); memset(&serv_addr4, 0, sizeof(serv_addr4)); serv_addr4.sin_addr.s_addr = INADDR_ANY; serv_addr4.sin_family = AF_INET; #if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) if (iface) { m = interface_to_sa(vhost, iface, (struct sockaddr_in *)v, n, 0); if (m == LWS_ITOSA_NOT_USABLE) { lwsl_info("%s: netif %s: Not usable\n", __func__, iface); return m; } if (m == LWS_ITOSA_NOT_EXIST) { lwsl_info("%s: netif %s: Does not exist\n", __func__, iface); return m; } } #endif serv_addr4.sin_port = htons(port); } /* ipv4 */ /* just checking for the interface extant */ if (sockfd == LWS_SOCK_INVALID) return LWS_ITOSA_USABLE; n = bind(sockfd, v, n); #ifdef LWS_WITH_UNIX_SOCK if (n < 0 && LWS_UNIX_SOCK_ENABLED(vhost)) { lwsl_err("ERROR on binding fd %d to \"%s\" (%d %d)\n", sockfd, iface, n, LWS_ERRNO); return LWS_ITOSA_NOT_EXIST; } else #endif if (n < 0) { lwsl_err("ERROR on binding fd %d to port %d (%d %d)\n", sockfd, port, n, LWS_ERRNO); /* if something already listening, tell caller to fail permanently */ if (LWS_ERRNO == LWS_EADDRINUSE) return LWS_ITOSA_BUSY; /* otherwise ask caller to retry later */ return LWS_ITOSA_NOT_EXIST; } #if defined(LWS_WITH_UNIX_SOCK) if (LWS_UNIX_SOCK_ENABLED(vhost)) { uid_t uid = vhost->context->uid; gid_t gid = vhost->context->gid; if (vhost->unix_socket_perms) { if (lws_plat_user_colon_group_to_ids( vhost->unix_socket_perms, &uid, &gid)) { lwsl_err("%s: Failed to translate %s\n", __func__, vhost->unix_socket_perms); return LWS_ITOSA_NOT_EXIST; } } if (uid && gid) { if (chown(serv_unix.sun_path, uid, gid)) { lwsl_err("%s: failed to set %s perms %u:%u\n", __func__, serv_unix.sun_path, (unsigned int)uid, (unsigned int)gid); return LWS_ITOSA_NOT_EXIST; } lwsl_notice("%s: vh %s unix skt %s perms %u:%u\n", __func__, vhost->name, serv_unix.sun_path, (unsigned int)uid, (unsigned int)gid); if (chmod(serv_unix.sun_path, 0660)) { lwsl_err("%s: failed to set %s to 0600 mode\n", __func__, serv_unix.sun_path); return LWS_ITOSA_NOT_EXIST; } } } #endif #ifndef LWS_PLAT_OPTEE if (getsockname(sockfd, (struct sockaddr *)&sin, &len) == -1) lwsl_warn("getsockname: %s\n", strerror(LWS_ERRNO)); else #endif #if defined(LWS_WITH_IPV6) port = (sin.ss_family == AF_INET6) ? ntohs(((struct sockaddr_in6 *) &sin)->sin6_port) : ntohs(((struct sockaddr_in *) &sin)->sin_port); #else { struct sockaddr_in sain; memcpy(&sain, &sin, sizeof(sain)); port = ntohs(sain.sin_port); } #endif return port; } static const lws_retry_range_t default_bo = { 3000, 7000 }; unsigned int lws_retry_get_delay_ms(struct lws_context *context, const lws_retry_bo_t *retry, uint16_t *ctry, char *conceal) { const lws_retry_range_t *r = &default_bo; unsigned int ms; uint16_t ra; if (conceal) *conceal = 0; if (retry) { if (*ctry < retry->retry_ms_table_count) r = &retry->retry_ms_table[*ctry]; else r = &retry->retry_ms_table[ retry->retry_ms_table_count - 1]; } ms = r->min_ms; if (lws_get_random(context, &ra, sizeof(ra)) == sizeof(ra)) ms += ((r->max_ms - ms) * ra) / 65535; if (*ctry < 0xffff) (*ctry)++; if (retry && conceal) *conceal = (int)*ctry <= retry->conceal_count; return ms; } #if defined(LWS_WITH_IPV6) LWS_EXTERN unsigned long lws_get_addr_scope(const char *ipaddr) { unsigned long scope = 0; #ifndef WIN32 struct ifaddrs *addrs, *addr; char ip[NI_MAXHOST]; unsigned int i; getifaddrs(&addrs); for (addr = addrs; addr; addr = addr->ifa_next) { if (!addr->ifa_addr || addr->ifa_addr->sa_family != AF_INET6) continue; getnameinfo(addr->ifa_addr, sizeof(struct sockaddr_in6), ip, sizeof(ip), NULL, 0, NI_NUMERICHOST); i = 0; while (ip[i]) if (ip[i++] == '%') { ip[i - 1] = '\0'; break; } if (!strcmp(ip, ipaddr)) { scope = if_nametoindex(addr->ifa_name); break; } } freeifaddrs(addrs); #else PIP_ADAPTER_ADDRESSES adapter, addrs = NULL; PIP_ADAPTER_UNICAST_ADDRESS addr; ULONG size = 0; DWORD ret; struct sockaddr_in6 *sockaddr; char ip[NI_MAXHOST]; unsigned int i; int found = 0; for (i = 0; i < 5; i++) { ret = GetAdaptersAddresses(AF_INET6, GAA_FLAG_INCLUDE_PREFIX, NULL, addrs, &size); if ((ret == NO_ERROR) || (ret == ERROR_NO_DATA)) { break; } else if (ret == ERROR_BUFFER_OVERFLOW) { if (addrs) free(addrs); addrs = (IP_ADAPTER_ADDRESSES *)malloc(size); } else { if (addrs) { free(addrs); addrs = NULL; } lwsl_err("Failed to get IPv6 address table (%d)", ret); break; } } if ((ret == NO_ERROR) && (addrs)) { adapter = addrs; while (adapter && !found) { addr = adapter->FirstUnicastAddress; while (addr && !found) { if (addr->Address.lpSockaddr->sa_family == AF_INET6) { sockaddr = (struct sockaddr_in6 *) (addr->Address.lpSockaddr); lws_plat_inet_ntop(sockaddr->sin6_family, &sockaddr->sin6_addr, ip, sizeof(ip)); if (!strcmp(ip, ipaddr)) { scope = sockaddr->sin6_scope_id; found = 1; break; } } addr = addr->Next; } adapter = adapter->Next; } } if (addrs) free(addrs); #endif return scope; } #endif libwebsockets-3.2.1/lib/core-net/output.c000066400000000000000000000222741357643561300203670ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" /* * notice this returns number of bytes consumed, or -1 */ int lws_issue_raw(struct lws *wsi, unsigned char *buf, size_t len) { struct lws_context *context = lws_get_context(wsi); struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; size_t real_len = len; unsigned int n, m; // lwsl_notice("%s: len %d\n", __func__, (int)len); // lwsl_hexdump_level(LLL_NOTICE, buf, len); /* * Detect if we got called twice without going through the * event loop to handle pending. Since that guarantees extending any * existing buflist_out it's inefficient. */ if (0 && buf && wsi->could_have_pending) { lwsl_hexdump_level(LLL_INFO, buf, len); lwsl_info("** %p: vh: %s, prot: %s, role %s: " "Inefficient back-to-back write of %lu detected...\n", wsi, wsi->vhost ? wsi->vhost->name : "no vhost", wsi->protocol->name, wsi->role_ops->name, (unsigned long)len); } lws_stats_bump(pt, LWSSTATS_C_API_WRITE, 1); /* just ignore sends after we cleared the truncation buffer */ if (lwsi_state(wsi) == LRS_FLUSHING_BEFORE_CLOSE && !lws_has_buffered_out(wsi) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) && !wsi->http.comp_ctx.may_have_more #endif ) return (int)len; if (buf && lws_has_buffered_out(wsi)) { lwsl_info("** %p: vh: %s, prot: %s, incr buflist_out by %lu\n", wsi, wsi->vhost ? wsi->vhost->name : "no vhost", wsi->protocol->name, (unsigned long)len); /* * already buflist ahead of this, add it on the tail of the * buflist, then ignore it for now and act like we're flushing * the buflist... */ if (lws_buflist_append_segment(&wsi->buflist_out, buf, len)) return -1; buf = NULL; len = 0; } if (wsi->buflist_out) { /* we have to drain the earliest buflist_out stuff first */ len = lws_buflist_next_segment_len(&wsi->buflist_out, &buf); real_len = len; lwsl_debug("%s: draining %d\n", __func__, (int)len); } if (!len || !buf) return 0; if (!wsi->http2_substream && !lws_socket_is_valid(wsi->desc.sockfd)) lwsl_warn("** error invalid sock but expected to send\n"); /* limit sending */ if (wsi->protocol->tx_packet_size) n = (int)wsi->protocol->tx_packet_size; else { n = (int)wsi->protocol->rx_buffer_size; if (!n) n = context->pt_serv_buf_size; } n += LWS_PRE + 4; if (n > len) n = (int)len; /* nope, send it on the socket directly */ lws_latency_pre(context, wsi); m = lws_ssl_capable_write(wsi, buf, n); lws_latency(context, wsi, "send lws_issue_raw", n, n == m); lwsl_info("%s: ssl_capable_write (%d) says %d\n", __func__, n, m); /* something got written, it can have been truncated now */ wsi->could_have_pending = 1; switch (m) { case LWS_SSL_CAPABLE_ERROR: /* we're going to close, let close know sends aren't possible */ wsi->socket_is_permanently_unusable = 1; return -1; case LWS_SSL_CAPABLE_MORE_SERVICE: /* * nothing got sent, not fatal. Retry the whole thing later, * ie, implying treat it was a truncated send so it gets * retried */ m = 0; break; } if ((int)m < 0) m = 0; /* * we were sending this from buflist_out? Then not sending everything * is a small matter of advancing ourselves only by the amount we did * send in the buflist. */ if (lws_has_buffered_out(wsi)) { if (m) { lwsl_info("%p partial adv %d (vs %ld)\n", wsi, m, (long)real_len); lws_buflist_use_segment(&wsi->buflist_out, m); } if (!lws_has_buffered_out(wsi)) { lwsl_info("%s: wsi %p: buflist_out flushed\n", __func__, wsi); m = (int)real_len; if (lwsi_state(wsi) == LRS_FLUSHING_BEFORE_CLOSE) { lwsl_info("*%p signalling to close now\n", wsi); return -1; /* retry closing now */ } if (wsi->close_when_buffered_out_drained) { wsi->close_when_buffered_out_drained = 0; return -1; } #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) #if !defined(LWS_WITHOUT_SERVER) if (wsi->http.deferred_transaction_completed) { lwsl_notice("%s: partial completed, doing " "deferred transaction completed\n", __func__); wsi->http.deferred_transaction_completed = 0; return lws_http_transaction_completed(wsi) ? -1 : (int)real_len; } #endif #endif } /* always callback on writeable */ lws_callback_on_writable(wsi); return m; } #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (wsi->http.comp_ctx.may_have_more) lws_callback_on_writable(wsi); #endif if (m == real_len) /* what we just sent went out cleanly */ return m; /* * We were not able to send everything... and we were not sending from * an existing buflist_out. So we are starting a fresh buflist_out, by * buffering the unsent remainder on it. * (it will get first priority next time the socket is writable). */ lwsl_debug("%p new partial sent %d from %lu total\n", wsi, m, (unsigned long)real_len); if (lws_buflist_append_segment(&wsi->buflist_out, buf + m, real_len - m) < 0) return -1; lws_stats_bump(pt, LWSSTATS_C_WRITE_PARTIALS, 1); lws_stats_bump(pt, LWSSTATS_B_PARTIALS_ACCEPTED_PARTS, m); #if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) if (lws_wsi_is_udp(wsi)) { /* stash original destination for fulfilling UDP partials */ wsi->udp->sa_pending = wsi->udp->sa; wsi->udp->salen_pending = wsi->udp->salen; } #endif /* since something buffered, force it to get another chance to send */ lws_callback_on_writable(wsi); return (int)real_len; } LWS_VISIBLE int lws_write(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol wp) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; lws_stats_bump(pt, LWSSTATS_C_API_LWS_WRITE, 1); if ((int)len < 0) { lwsl_err("%s: suspicious len int %d, ulong %lu\n", __func__, (int)len, (unsigned long)len); return -1; } lws_stats_bump(pt, LWSSTATS_B_WRITE, len); #ifdef LWS_WITH_ACCESS_LOG wsi->http.access_log.sent += len; #endif if (wsi->vhost) wsi->vhost->conn_stats.tx += len; assert(wsi->role_ops); if (!wsi->role_ops->write_role_protocol) return lws_issue_raw(wsi, buf, len); return wsi->role_ops->write_role_protocol(wsi, buf, len, &wp); } LWS_VISIBLE int lws_ssl_capable_read_no_ssl(struct lws *wsi, unsigned char *buf, int len) { struct lws_context *context = wsi->context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; int n = 0; lws_stats_bump(pt, LWSSTATS_C_API_READ, 1); errno = 0; if (lws_wsi_is_udp(wsi)) { #if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) wsi->udp->salen = sizeof(wsi->udp->sa); n = recvfrom(wsi->desc.sockfd, (char *)buf, len, 0, &wsi->udp->sa, &wsi->udp->salen); #endif } else n = recv(wsi->desc.sockfd, (char *)buf, len, 0); if (n >= 0) { if (!n && wsi->unix_skt) return LWS_SSL_CAPABLE_ERROR; /* * See https://libwebsockets.org/ * pipermail/libwebsockets/2019-March/007857.html */ if (!n) return LWS_SSL_CAPABLE_ERROR; if (wsi->vhost) wsi->vhost->conn_stats.rx += n; lws_stats_bump(pt, LWSSTATS_B_READ, n); return n; } if (LWS_ERRNO == LWS_EAGAIN || LWS_ERRNO == LWS_EWOULDBLOCK || LWS_ERRNO == LWS_EINTR) return LWS_SSL_CAPABLE_MORE_SERVICE; lwsl_info("error on reading from skt : %d\n", LWS_ERRNO); return LWS_SSL_CAPABLE_ERROR; } LWS_VISIBLE int lws_ssl_capable_write_no_ssl(struct lws *wsi, unsigned char *buf, int len) { int n = 0; #if defined(LWS_PLAT_OPTEE) ssize_t send(int sockfd, const void *buf, size_t len, int flags); #endif if (lws_wsi_is_udp(wsi)) { #if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) if (lws_has_buffered_out(wsi)) n = sendto(wsi->desc.sockfd, (const char *)buf, len, 0, &wsi->udp->sa_pending, wsi->udp->salen_pending); else n = sendto(wsi->desc.sockfd, (const char *)buf, len, 0, &wsi->udp->sa, wsi->udp->salen); #endif } else n = send(wsi->desc.sockfd, (char *)buf, len, MSG_NOSIGNAL); // lwsl_info("%s: sent len %d result %d", __func__, len, n); if (n >= 0) return n; if (LWS_ERRNO == LWS_EAGAIN || LWS_ERRNO == LWS_EWOULDBLOCK || LWS_ERRNO == LWS_EINTR) { if (LWS_ERRNO == LWS_EWOULDBLOCK) { lws_set_blocking_send(wsi); } return LWS_SSL_CAPABLE_MORE_SERVICE; } lwsl_debug("ERROR writing len %d to skt fd %d err %d / errno %d\n", len, wsi->desc.sockfd, n, LWS_ERRNO); return LWS_SSL_CAPABLE_ERROR; } LWS_VISIBLE int lws_ssl_pending_no_ssl(struct lws *wsi) { (void)wsi; #if defined(LWS_WITH_ESP32) return 100; #else return 0; #endif } libwebsockets-3.2.1/lib/core-net/pollfd.c000066400000000000000000000376331357643561300203140ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" int _lws_change_pollfd(struct lws *wsi, int _and, int _or, struct lws_pollargs *pa) { #if !defined(LWS_WITH_LIBUV) && !defined(LWS_WITH_LIBEV) && !defined(LWS_WITH_LIBEVENT) volatile struct lws_context_per_thread *vpt; #endif struct lws_context_per_thread *pt; struct lws_context *context; int ret = 0, pa_events; struct lws_pollfd *pfd; int sampled_tid, tid; if (!wsi) return 0; assert(wsi->position_in_fds_table == LWS_NO_FDS_POS || wsi->position_in_fds_table >= 0); if (wsi->position_in_fds_table == LWS_NO_FDS_POS) return 0; if (((volatile struct lws *)wsi)->handling_pollout && !_and && _or == LWS_POLLOUT) { /* * Happening alongside service thread handling POLLOUT. * The danger is when he is finished, he will disable POLLOUT, * countermanding what we changed here. * * Instead of changing the fds, inform the service thread * what happened, and ask it to leave POLLOUT active on exit */ ((volatile struct lws *)wsi)->leave_pollout_active = 1; /* * by definition service thread is not in poll wait, so no need * to cancel service */ lwsl_debug("%s: using leave_pollout_active\n", __func__); return 0; } context = wsi->context; pt = &context->pt[(int)wsi->tsi]; assert(wsi->position_in_fds_table < (int)pt->fds_count); #if !defined(LWS_WITH_LIBUV) && \ !defined(LWS_WITH_LIBEV) && \ !defined(LWS_WITH_LIBEVENT) /* * This only applies when we use the default poll() event loop. * * BSD can revert pa->events at any time, when the kernel decides to * exit from poll(). We can't protect against it using locking. * * Therefore we must check first if the service thread is in poll() * wait; if so, we know we must be being called from a foreign thread, * and we must keep a strictly ordered list of changes we made instead * of trying to apply them, since when poll() exits, which may happen * at any time it would revert our changes. * * The plat code will apply them when it leaves the poll() wait * before doing anything else. */ vpt = (volatile struct lws_context_per_thread *)pt; vpt->foreign_spinlock = 1; lws_memory_barrier(); if (vpt->inside_poll) { struct lws_foreign_thread_pollfd *ftp, **ftp1; /* * We are certainly a foreign thread trying to change events * while the service thread is in the poll() wait. * * Create a list of changes to be applied after poll() exit, * instead of trying to apply them now. */ ftp = lws_malloc(sizeof(*ftp), "ftp"); if (!ftp) { vpt->foreign_spinlock = 0; lws_memory_barrier(); ret = -1; goto bail; } ftp->_and = _and; ftp->_or = _or; ftp->fd_index = wsi->position_in_fds_table; ftp->next = NULL; lws_pt_lock(pt, __func__); /* place at END of list to maintain order */ ftp1 = (struct lws_foreign_thread_pollfd **) &vpt->foreign_pfd_list; while (*ftp1) ftp1 = &((*ftp1)->next); *ftp1 = ftp; vpt->foreign_spinlock = 0; lws_memory_barrier(); lws_pt_unlock(pt); lws_cancel_service_pt(wsi); return 0; } vpt->foreign_spinlock = 0; lws_memory_barrier(); #endif pfd = &pt->fds[wsi->position_in_fds_table]; pa->fd = wsi->desc.sockfd; lwsl_debug("%s: wsi %p: fd %d events %d -> %d\n", __func__, wsi, pa->fd, pfd->events, (pfd->events & ~_and) | _or); pa->prev_events = pfd->events; pa->events = pfd->events = (pfd->events & ~_and) | _or; if (wsi->http2_substream) return 0; #if defined(LWS_WITH_EXTERNAL_POLL) if (wsi->vhost && wsi->vhost->protocols[0].callback(wsi, LWS_CALLBACK_CHANGE_MODE_POLL_FD, wsi->user_space, (void *)pa, 0)) { ret = -1; goto bail; } #endif if (context->event_loop_ops->io) { if (_and & LWS_POLLIN) context->event_loop_ops->io(wsi, LWS_EV_STOP | LWS_EV_READ); if (_or & LWS_POLLIN) context->event_loop_ops->io(wsi, LWS_EV_START | LWS_EV_READ); if (_and & LWS_POLLOUT) context->event_loop_ops->io(wsi, LWS_EV_STOP | LWS_EV_WRITE); if (_or & LWS_POLLOUT) context->event_loop_ops->io(wsi, LWS_EV_START | LWS_EV_WRITE); } /* * if we changed something in this pollfd... * ... and we're running in a different thread context * than the service thread... * ... and the service thread is waiting ... * then cancel it to force a restart with our changed events */ pa_events = pa->prev_events != pa->events; if (pa_events) { if (lws_plat_change_pollfd(context, wsi, pfd)) { lwsl_info("%s failed\n", __func__); ret = -1; goto bail; } sampled_tid = pt->service_tid; if (sampled_tid && wsi->vhost) { tid = wsi->vhost->protocols[0].callback(wsi, LWS_CALLBACK_GET_THREAD_ID, NULL, NULL, 0); if (tid == -1) { ret = -1; goto bail; } if (tid != sampled_tid) lws_cancel_service_pt(wsi); } } bail: return ret; } #ifndef LWS_NO_SERVER /* * Enable or disable listen sockets on this pt globally... * it's modulated according to the pt having space for a new accept. */ static void lws_accept_modulation(struct lws_context *context, struct lws_context_per_thread *pt, int allow) { struct lws_vhost *vh = context->vhost_list; struct lws_pollargs pa1; while (vh) { if (vh->lserv_wsi) { if (allow) _lws_change_pollfd(vh->lserv_wsi, 0, LWS_POLLIN, &pa1); else _lws_change_pollfd(vh->lserv_wsi, LWS_POLLIN, 0, &pa1); } vh = vh->vhost_next; } } #endif #if defined(_DEBUG) void __dump_fds(struct lws_context_per_thread *pt, const char *s) { unsigned int n; lwsl_warn("%s: fds_count %u, %s\n", __func__, pt->fds_count, s); for (n = 0; n < pt->fds_count; n++) { struct lws *wsi = wsi_from_fd(pt->context, pt->fds[n].fd); lwsl_warn(" %d: fd %d, wsi %p, pos_in_fds: %d\n", n + 1, pt->fds[n].fd, wsi, wsi ? wsi->position_in_fds_table : -1); } } #else #define __dump_fds(x, y) #endif int __insert_wsi_socket_into_fds(struct lws_context *context, struct lws *wsi) { #if defined(LWS_WITH_EXTERNAL_POLL) struct lws_pollargs pa = { wsi->desc.sockfd, LWS_POLLIN, 0 }; #endif struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; int ret = 0; // __dump_fds(pt, "pre insert"); lwsl_debug("%s: %p: tsi=%d, sock=%d, pos-in-fds=%d\n", __func__, wsi, wsi->tsi, wsi->desc.sockfd, pt->fds_count); if ((unsigned int)pt->fds_count >= context->fd_limit_per_thread) { lwsl_err("Too many fds (%d vs %d)\n", context->max_fds, context->fd_limit_per_thread ); return 1; } #if !defined(_WIN32) if (!wsi->context->max_fds_unrelated_to_ulimit && wsi->desc.sockfd - lws_plat_socket_offset() >= context->max_fds) { lwsl_err("Socket fd %d is too high (%d) offset %d\n", wsi->desc.sockfd, context->max_fds, lws_plat_socket_offset()); return 1; } #endif assert(wsi); assert(wsi->event_pipe || wsi->vhost); assert(lws_socket_is_valid(wsi->desc.sockfd)); #if defined(LWS_WITH_EXTERNAL_POLL) if (wsi->vhost && wsi->vhost->protocols[0].callback(wsi, LWS_CALLBACK_LOCK_POLL, wsi->user_space, (void *) &pa, 1)) return -1; #endif if (insert_wsi(context, wsi)) return -1; pt->count_conns++; wsi->position_in_fds_table = pt->fds_count; pt->fds[wsi->position_in_fds_table].fd = wsi->desc.sockfd; pt->fds[wsi->position_in_fds_table].events = LWS_POLLIN; #if defined(LWS_WITH_EXTERNAL_POLL) pa.events = pt->fds[pt->fds_count].events; #endif lws_plat_insert_socket_into_fds(context, wsi); #if defined(LWS_WITH_EXTERNAL_POLL) /* external POLL support via protocol 0 */ if (wsi->vhost && wsi->vhost->protocols[0].callback(wsi, LWS_CALLBACK_ADD_POLL_FD, wsi->user_space, (void *) &pa, 0)) ret = -1; #endif #ifndef LWS_NO_SERVER /* if no more room, defeat accepts on this thread */ if ((unsigned int)pt->fds_count == context->fd_limit_per_thread - 1) lws_accept_modulation(context, pt, 0); #endif #if defined(LWS_WITH_EXTERNAL_POLL) if (wsi->vhost && wsi->vhost->protocols[0].callback(wsi, LWS_CALLBACK_UNLOCK_POLL, wsi->user_space, (void *)&pa, 1)) ret = -1; #endif // __dump_fds(pt, "post insert"); return ret; } int __remove_wsi_socket_from_fds(struct lws *wsi) { struct lws_context *context = wsi->context; #if defined(LWS_WITH_EXTERNAL_POLL) struct lws_pollargs pa = { wsi->desc.sockfd, 0, 0 }; #endif struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws *end_wsi; int v, m, ret = 0; // __dump_fds(pt, "pre remove"); #if !defined(_WIN32) if (!wsi->context->max_fds_unrelated_to_ulimit && wsi->desc.sockfd - lws_plat_socket_offset() > context->max_fds) { lwsl_err("fd %d too high (%d)\n", wsi->desc.sockfd, context->max_fds); return 1; } #endif #if defined(LWS_WITH_EXTERNAL_POLL) if (wsi->vhost && wsi->vhost->protocols && wsi->vhost->protocols[0].callback(wsi, LWS_CALLBACK_LOCK_POLL, wsi->user_space, (void *)&pa, 1)) return -1; #endif lws_same_vh_protocol_remove(wsi); /* the guy who is to be deleted's slot index in pt->fds */ m = wsi->position_in_fds_table; /* these are the only valid possibilities for position_in_fds_table */ assert(m == LWS_NO_FDS_POS || (m >= 0 && (unsigned int)m < pt->fds_count)); if (context->event_loop_ops->io) context->event_loop_ops->io(wsi, LWS_EV_STOP | LWS_EV_READ | LWS_EV_WRITE | LWS_EV_PREPARE_DELETION); /* lwsl_notice("%s: wsi=%p, skt=%d, fds pos=%d, end guy pos=%d, endfd=%d\n", __func__, wsi, wsi->desc.sockfd, wsi->position_in_fds_table, pt->fds_count, pt->fds[pt->fds_count - 1].fd); */ if (m != LWS_NO_FDS_POS) { char fixup = 0; assert(pt->fds_count && (unsigned int)m != pt->fds_count); /* deletion guy's lws_lookup entry needs nuking */ delete_from_fd(context, wsi->desc.sockfd); if ((unsigned int)m != pt->fds_count - 1) { /* have the last guy take up the now vacant slot */ pt->fds[m] = pt->fds[pt->fds_count - 1]; fixup = 1; } pt->fds[pt->fds_count - 1].fd = -1; /* this decrements pt->fds_count */ lws_plat_delete_socket_from_fds(context, wsi, m); pt->count_conns--; if (fixup) { v = (int) pt->fds[m].fd; /* old end guy's "position in fds table" is now the * deletion guy's old one */ end_wsi = wsi_from_fd(context, v); if (!end_wsi) { lwsl_err("no wsi for fd %d pos %d, " "pt->fds_count=%d\n", (int)pt->fds[m].fd, m, pt->fds_count); assert(0); } else end_wsi->position_in_fds_table = m; } /* removed wsi has no position any more */ wsi->position_in_fds_table = LWS_NO_FDS_POS; } #if defined(LWS_WITH_EXTERNAL_POLL) /* remove also from external POLL support via protocol 0 */ if (lws_socket_is_valid(wsi->desc.sockfd) && wsi->vhost && wsi->vhost->protocols[0].callback(wsi, LWS_CALLBACK_DEL_POLL_FD, wsi->user_space, (void *) &pa, 0)) ret = -1; #endif #ifndef LWS_NO_SERVER if (!context->being_destroyed && /* if this made some room, accept connects on this thread */ (unsigned int)pt->fds_count < context->fd_limit_per_thread - 1) lws_accept_modulation(context, pt, 1); #endif #if defined(LWS_WITH_EXTERNAL_POLL) if (wsi->vhost && wsi->vhost->protocols[0].callback(wsi, LWS_CALLBACK_UNLOCK_POLL, wsi->user_space, (void *) &pa, 1)) ret = -1; #endif // __dump_fds(pt, "post remove"); return ret; } int __lws_change_pollfd(struct lws *wsi, int _and, int _or) { struct lws_context *context; struct lws_pollargs pa; int ret = 0; if (!wsi || (!wsi->protocol && !wsi->event_pipe) || wsi->position_in_fds_table == LWS_NO_FDS_POS) return 0; context = lws_get_context(wsi); if (!context) return 1; #if defined(LWS_WITH_EXTERNAL_POLL) if (wsi->vhost && wsi->vhost->protocols[0].callback(wsi, LWS_CALLBACK_LOCK_POLL, wsi->user_space, (void *) &pa, 0)) return -1; #endif ret = _lws_change_pollfd(wsi, _and, _or, &pa); #if defined(LWS_WITH_EXTERNAL_POLL) if (wsi->vhost && wsi->vhost->protocols[0].callback(wsi, LWS_CALLBACK_UNLOCK_POLL, wsi->user_space, (void *) &pa, 0)) ret = -1; #endif return ret; } int lws_change_pollfd(struct lws *wsi, int _and, int _or) { struct lws_context_per_thread *pt; int ret = 0; pt = &wsi->context->pt[(int)wsi->tsi]; lws_pt_lock(pt, __func__); ret = __lws_change_pollfd(wsi, _and, _or); lws_pt_unlock(pt); return ret; } LWS_VISIBLE int lws_callback_on_writable(struct lws *wsi) { struct lws_context_per_thread *pt; if (lwsi_state(wsi) == LRS_SHUTDOWN) return 0; if (wsi->socket_is_permanently_unusable) return 0; pt = &wsi->context->pt[(int)wsi->tsi]; lws_stats_bump(pt, LWSSTATS_C_WRITEABLE_CB_REQ, 1); #if defined(LWS_WITH_STATS) if (!wsi->active_writable_req_us) { wsi->active_writable_req_us = lws_now_usecs(); lws_stats_bump(pt, LWSSTATS_C_WRITEABLE_CB_EFF_REQ, 1); } #endif if (wsi->role_ops->callback_on_writable) { if (wsi->role_ops->callback_on_writable(wsi)) return 1; wsi = lws_get_network_wsi(wsi); } if (wsi->position_in_fds_table == LWS_NO_FDS_POS) { lwsl_debug("%s: failed to find socket %d\n", __func__, wsi->desc.sockfd); return -1; } if (__lws_change_pollfd(wsi, 0, LWS_POLLOUT)) return -1; return 1; } /* * stitch protocol choice into the vh protocol linked list * We always insert ourselves at the start of the list * * X <-> B * X <-> pAn <-> pB * * Illegal to attach more than once without detach inbetween */ void lws_same_vh_protocol_insert(struct lws *wsi, int n) { lws_vhost_lock(wsi->vhost); lws_dll2_remove(&wsi->same_vh_protocol); lws_dll2_add_head(&wsi->same_vh_protocol, &wsi->vhost->same_vh_protocol_owner[n]); wsi->bound_vhost_index = n; lws_vhost_unlock(wsi->vhost); } void __lws_same_vh_protocol_remove(struct lws *wsi) { if (wsi->vhost && wsi->vhost->same_vh_protocol_owner) lws_dll2_remove(&wsi->same_vh_protocol); } void lws_same_vh_protocol_remove(struct lws *wsi) { if (!wsi->vhost) return; lws_vhost_lock(wsi->vhost); __lws_same_vh_protocol_remove(wsi); lws_vhost_unlock(wsi->vhost); } LWS_VISIBLE int lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost, const struct lws_protocols *protocol) { struct lws *wsi; int n; if (protocol < vhost->protocols || protocol >= (vhost->protocols + vhost->count_protocols)) { lwsl_err("%s: protocol %p is not from vhost %p (%p - %p)\n", __func__, protocol, vhost->protocols, vhost, (vhost->protocols + vhost->count_protocols)); return -1; } n = (int)(protocol - vhost->protocols); lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head(&vhost->same_vh_protocol_owner[n])) { wsi = lws_container_of(d, struct lws, same_vh_protocol); assert(wsi->protocol == protocol); lws_callback_on_writable(wsi); } lws_end_foreach_dll_safe(d, d1); return 0; } LWS_VISIBLE int lws_callback_on_writable_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol) { struct lws_vhost *vhost; int n; if (!context) return 0; vhost = context->vhost_list; while (vhost) { for (n = 0; n < vhost->count_protocols; n++) if (protocol->callback == vhost->protocols[n].callback && !strcmp(protocol->name, vhost->protocols[n].name)) break; if (n != vhost->count_protocols) lws_callback_on_writable_all_protocol_vhost( vhost, &vhost->protocols[n]); vhost = vhost->vhost_next; } return 0; } libwebsockets-3.2.1/lib/core-net/private.h000066400000000000000000000717551357643561300205160ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #if !defined(__LWS_CORE_NET_PRIVATE_H__) #define __LWS_CORE_NET_PRIVATE_H__ #if !defined(_POSIX_C_SOURCE) #define _POSIX_C_SOURCE 200112L #endif #include "roles/private.h" #ifdef LWS_WITH_IPV6 #if defined(WIN32) || defined(_WIN32) #include #else #include #endif #endif #ifdef __cplusplus extern "C" { #endif /* * All lws_tls...() functions must return this type, converting the * native backend result and doing the extra work to determine which one * as needed. * * Native TLS backend return codes are NOT ALLOWED outside the backend. * * Non-SSL mode also uses these types. */ enum lws_ssl_capable_status { LWS_SSL_CAPABLE_ERROR = -1, /* it failed */ LWS_SSL_CAPABLE_DONE = 0, /* it succeeded */ LWS_SSL_CAPABLE_MORE_SERVICE_READ = -2, /* retry WANT_READ */ LWS_SSL_CAPABLE_MORE_SERVICE_WRITE = -3, /* retry WANT_WRITE */ LWS_SSL_CAPABLE_MORE_SERVICE = -4, /* general retry */ }; /* * * ------ roles ------ * */ /* null-terminated array of pointers to roles lws built with */ extern const struct lws_role_ops *available_roles[]; #define LWS_FOR_EVERY_AVAILABLE_ROLE_START(xx) { \ const struct lws_role_ops **ppxx = available_roles; \ while (*ppxx) { \ const struct lws_role_ops *xx = *ppxx++; #define LWS_FOR_EVERY_AVAILABLE_ROLE_END }} /* * * ------ event_loop ops ------ * */ /* enums of socks version */ enum socks_version { SOCKS_VERSION_4 = 4, SOCKS_VERSION_5 = 5 }; /* enums of subnegotiation version */ enum socks_subnegotiation_version { SOCKS_SUBNEGOTIATION_VERSION_1 = 1, }; /* enums of socks commands */ enum socks_command { SOCKS_COMMAND_CONNECT = 1, SOCKS_COMMAND_BIND = 2, SOCKS_COMMAND_UDP_ASSOCIATE = 3 }; /* enums of socks address type */ enum socks_atyp { SOCKS_ATYP_IPV4 = 1, SOCKS_ATYP_DOMAINNAME = 3, SOCKS_ATYP_IPV6 = 4 }; /* enums of socks authentication methods */ enum socks_auth_method { SOCKS_AUTH_NO_AUTH = 0, SOCKS_AUTH_GSSAPI = 1, SOCKS_AUTH_USERNAME_PASSWORD = 2 }; /* enums of subnegotiation status */ enum socks_subnegotiation_status { SOCKS_SUBNEGOTIATION_STATUS_SUCCESS = 0, }; /* enums of socks request reply */ enum socks_request_reply { SOCKS_REQUEST_REPLY_SUCCESS = 0, SOCKS_REQUEST_REPLY_FAILURE_GENERAL = 1, SOCKS_REQUEST_REPLY_CONNECTION_NOT_ALLOWED = 2, SOCKS_REQUEST_REPLY_NETWORK_UNREACHABLE = 3, SOCKS_REQUEST_REPLY_HOST_UNREACHABLE = 4, SOCKS_REQUEST_REPLY_CONNECTION_REFUSED = 5, SOCKS_REQUEST_REPLY_TTL_EXPIRED = 6, SOCKS_REQUEST_REPLY_COMMAND_NOT_SUPPORTED = 7, SOCKS_REQUEST_REPLY_ATYP_NOT_SUPPORTED = 8 }; /* enums used to generate socks messages */ enum socks_msg_type { /* greeting */ SOCKS_MSG_GREETING, /* credential, user name and password */ SOCKS_MSG_USERNAME_PASSWORD, /* connect command */ SOCKS_MSG_CONNECT }; enum { LWS_RXFLOW_ALLOW = (1 << 0), LWS_RXFLOW_PENDING_CHANGE = (1 << 1), }; enum lws_parser_return { LPR_OK = 0, LPR_FAIL = -1, LPR_DO_FALLBACK = 2, LPR_FORBIDDEN = -2 }; enum pmd_return { PMDR_UNKNOWN, PMDR_DID_NOTHING, PMDR_HAS_PENDING, PMDR_EMPTY_NONFINAL, PMDR_EMPTY_FINAL, PMDR_FAILED = -1 }; typedef union { #ifdef LWS_WITH_IPV6 struct sockaddr_in6 sa6; #endif struct sockaddr_in sa4; } sockaddr46; #if defined(LWS_WITH_PEER_LIMITS) struct lws_peer { struct lws_peer *next; struct lws_peer *peer_wait_list; time_t time_created; time_t time_closed_all; uint8_t addr[32]; uint32_t hash; uint32_t count_wsi; uint32_t total_wsi; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) struct lws_peer_role_http http; #endif uint8_t af; }; #endif enum { LWS_EV_READ = (1 << 0), LWS_EV_WRITE = (1 << 1), LWS_EV_START = (1 << 2), LWS_EV_STOP = (1 << 3), LWS_EV_PREPARE_DELETION = (1u << 31), }; #ifdef LWS_WITH_IPV6 #define LWS_IPV6_ENABLED(vh) \ (!lws_check_opt(vh->context->options, LWS_SERVER_OPTION_DISABLE_IPV6) && \ !lws_check_opt(vh->options, LWS_SERVER_OPTION_DISABLE_IPV6)) #else #define LWS_IPV6_ENABLED(context) (0) #endif #ifdef LWS_WITH_UNIX_SOCK #define LWS_UNIX_SOCK_ENABLED(vhost) \ (vhost->options & LWS_SERVER_OPTION_UNIX_SOCK) #else #define LWS_UNIX_SOCK_ENABLED(vhost) (0) #endif enum uri_path_states { URIPS_IDLE, URIPS_SEEN_SLASH, URIPS_SEEN_SLASH_DOT, URIPS_SEEN_SLASH_DOT_DOT, }; enum uri_esc_states { URIES_IDLE, URIES_SEEN_PERCENT, URIES_SEEN_PERCENT_H1, }; #ifndef LWS_NO_CLIENT struct client_info_stash { char *address; char *path; char *host; char *origin; char *protocol; char *method; char *iface; char *alpn; void *opaque_user_data; /* not allocated or freed by lws */ }; #endif #define lws_wsi_is_udp(___wsi) (!!___wsi->udp) #define LWS_H2_FRAME_HEADER_LENGTH 9 int __lws_sul_insert(lws_dll2_owner_t *own, lws_sorted_usec_list_t *sul, lws_usec_t us); lws_usec_t __lws_sul_service_ripe(lws_dll2_owner_t *own, lws_usec_t usnow); struct lws_timed_vh_protocol { struct lws_timed_vh_protocol *next; lws_sorted_usec_list_t sul; const struct lws_protocols *protocol; struct lws_vhost *vhost; /* only used for pending processing */ int reason; int tsi_req; }; /* * lws_dsh */ typedef struct lws_dsh_obj_head { lws_dll2_owner_t owner; int kind; } lws_dsh_obj_head_t; typedef struct lws_dsh_obj { lws_dll2_t list; /* must be first */ lws_dsh_t *dsh; /* invalid when on free list */ size_t size; /* invalid when on free list */ size_t asize; } lws_dsh_obj_t; struct lws_dsh { lws_dll2_t list; uint8_t *buf; lws_dsh_obj_head_t *oha; /* array of object heads/kind */ size_t buffer_size; size_t locally_in_use; size_t locally_free; int count_kinds; uint8_t being_destroyed; /* * Overallocations at create: * * - the buffer itself * - the object heads array */ }; /* * so we can have n connections being serviced simultaneously, * these things need to be isolated per-thread. */ struct lws_context_per_thread { #if LWS_MAX_SMP > 1 pthread_mutex_t lock_stats; struct lws_mutex_refcount mr; pthread_t self; #endif struct lws_dll2_owner dll_buflist_owner; /* guys with pending rxflow */ struct lws_dll2_owner seq_owner; /* list of lws_sequencer-s */ struct lws_dll2_owner pt_sul_owner; #if defined (LWS_WITH_SEQUENCER) lws_sorted_usec_list_t sul_seq_heartbeat; #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) lws_sorted_usec_list_t sul_ah_lifecheck; #endif #if defined(LWS_WITH_TLS) && !defined(LWS_NO_SERVER) lws_sorted_usec_list_t sul_tls; #endif #if defined(LWS_PLAT_UNIX) lws_sorted_usec_list_t sul_plat; #endif #if defined(LWS_WITH_STATS) uint64_t lws_stats[LWSSTATS_SIZE]; int updated; lws_sorted_usec_list_t sul_stats; #endif #if defined(LWS_WITH_PEER_LIMITS) lws_sorted_usec_list_t sul_peer_limits; #endif #if defined(LWS_WITH_TLS) struct lws_pt_tls tls; #endif struct lws *fake_wsi; /* used for callbacks where there's no wsi */ struct lws_context *context; /* * usable by anything in the service code, but only if the scope * does not last longer than the service action (since next service * of any socket can likewise use it and overwrite) */ unsigned char *serv_buf; struct lws_pollfd *fds; volatile struct lws_foreign_thread_pollfd * volatile foreign_pfd_list; #ifdef _WIN32 WSAEVENT events; CRITICAL_SECTION interrupt_lock; #endif lws_sockfd_type dummy_pipe_fds[2]; struct lws *pipe_wsi; /* --- role based members --- */ #if defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS) struct lws_pt_role_ws ws; #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) struct lws_pt_role_http http; #endif #if defined(LWS_ROLE_DBUS) struct lws_pt_role_dbus dbus; #endif /* --- event library based members --- */ #if defined(LWS_WITH_LIBEV) struct lws_pt_eventlibs_libev ev; #endif #if defined(LWS_WITH_LIBUV) struct lws_pt_eventlibs_libuv uv; #endif #if defined(LWS_WITH_LIBEVENT) struct lws_pt_eventlibs_libevent event; #endif #if defined(LWS_WITH_LIBEV) || defined(LWS_WITH_LIBUV) || \ defined(LWS_WITH_LIBEVENT) struct lws_signal_watcher w_sigint; #endif /* --- */ unsigned long count_conns; unsigned int fds_count; /* * set to the Thread ID that's doing the service loop just before entry * to poll indicates service thread likely idling in poll() * volatile because other threads may check it as part of processing * for pollfd event change. */ volatile int service_tid; int service_tid_detected; volatile unsigned char inside_poll; volatile unsigned char foreign_spinlock; unsigned char tid; unsigned char inside_service:1; unsigned char event_loop_foreign:1; unsigned char event_loop_destroy_processing_done:1; #ifdef _WIN32 unsigned char interrupt_requested:1; #endif }; struct lws_conn_stats { unsigned long long rx, tx; unsigned long h1_conn, h1_trans, h2_trans, ws_upg, h2_alpn, h2_subs, h2_upg, rejected; }; /* * virtual host -related context information * vhostwide SSL context * vhostwide proxy * * hierarchy: * * context -> vhost -> wsi * * incoming connection non-SSL vhost binding: * * listen socket -> wsi -> select vhost after first headers * * incoming connection SSL vhost binding: * * SSL SNI -> wsi -> bind after SSL negotiation */ struct lws_vhost { #if !defined(LWS_WITHOUT_CLIENT) char proxy_basic_auth_token[128]; #endif #if LWS_MAX_SMP > 1 pthread_mutex_t lock; char close_flow_vs_tsi[LWS_MAX_SMP]; #endif #if defined(LWS_ROLE_H2) struct lws_vhost_role_h2 h2; #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) struct lws_vhost_role_http http; #endif #if defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS) struct lws_vhost_role_ws ws; #endif #if defined(LWS_WITH_SOCKS5) char socks_proxy_address[128]; char socks_user[96]; char socks_password[96]; #endif #if defined(LWS_WITH_LIBEV) struct lws_io_watcher w_accept; #endif struct lws_conn_stats conn_stats; struct lws_context *context; struct lws_vhost *vhost_next; struct lws *lserv_wsi; const char *name; const char *iface; const char *listen_accept_role; const char *listen_accept_protocol; const char *unix_socket_perms; void (*finalize)(struct lws_vhost *vh, void *arg); void *finalize_arg; #if !defined(LWS_WITH_ESP32) && !defined(OPTEE_TA) && !defined(WIN32) int bind_iface; #endif const struct lws_protocols *protocols; void **protocol_vh_privs; const struct lws_protocol_vhost_options *pvo; const struct lws_protocol_vhost_options *headers; struct lws_dll2_owner *same_vh_protocol_owner; struct lws_vhost *no_listener_vhost_list; struct lws_dll2_owner abstract_instances_owner; #if !defined(LWS_NO_CLIENT) struct lws_dll2_owner dll_cli_active_conns_owner; #endif #if defined(LWS_WITH_TLS) struct lws_vhost_tls tls; #endif struct lws_timed_vh_protocol *timed_vh_protocol_list; void *user; int listen_port; #if defined(LWS_WITH_SOCKS5) unsigned int socks_proxy_port; #endif unsigned int options; int count_protocols; int ka_time; int ka_probes; int ka_interval; int keepalive_timeout; int timeout_secs_ah_idle; int count_bound_wsi; #ifdef LWS_WITH_ACCESS_LOG int log_fd; #endif unsigned int allocated_vhost_protocols:1; unsigned int created_vhost_protocols:1; unsigned int being_destroyed:1; unsigned char default_protocol_index; unsigned char raw_protocol_index; }; void __lws_vhost_destroy2(struct lws_vhost *vh); struct lws { /* structs */ #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) struct _lws_http_mode_related http; #endif #if defined(LWS_ROLE_H2) struct _lws_h2_related h2; #endif #if defined(LWS_ROLE_WS) struct _lws_websocket_related *ws; /* allocated if we upgrade to ws */ lws_sorted_usec_list_t sul_ping; #endif #if defined(LWS_ROLE_DBUS) struct _lws_dbus_mode_related dbus; #endif const struct lws_role_ops *role_ops; lws_wsi_state_t wsistate; lws_wsi_state_t wsistate_pre_close; /* lifetime members */ #if defined(LWS_WITH_LIBEV) || defined(LWS_WITH_LIBUV) || \ defined(LWS_WITH_LIBEVENT) struct lws_io_watcher w_read; #endif #if defined(LWS_WITH_LIBEV) || defined(LWS_WITH_LIBEVENT) struct lws_io_watcher w_write; #endif lws_sorted_usec_list_t sul_timeout; lws_sorted_usec_list_t sul_hrtimer; /* pointers */ struct lws_context *context; struct lws_vhost *vhost; struct lws *parent; /* points to parent, if any */ struct lws *child_list; /* points to first child */ struct lws *sibling_list; /* subsequent children at same level */ const struct lws_protocols *protocol; struct lws_dll2 same_vh_protocol; lws_seq_t *seq; /* associated sequencer if any */ struct lws_dll2 dll_buflist; /* guys with pending rxflow */ #if defined(LWS_WITH_THREADPOOL) struct lws_threadpool_task *tp_task; #endif #if defined(LWS_WITH_PEER_LIMITS) struct lws_peer *peer; #endif struct lws_udp *udp; #ifndef LWS_NO_CLIENT struct client_info_stash *stash; char *cli_hostname_copy; struct lws_dll2 dll_cli_active_conns; struct lws_dll2_owner dll2_cli_txn_queue_owner; struct lws_dll2 dll2_cli_txn_queue; #endif void *user_space; void *opaque_parent_data; void *opaque_user_data; struct lws_buflist *buflist; /* input-side buflist */ struct lws_buflist *buflist_out; /* output-side buflist */ #if defined(LWS_WITH_TLS) struct lws_lws_tls tls; #endif lws_sock_file_fd_type desc; /* .filefd / .sockfd */ #if defined(LWS_WITH_STATS) uint64_t active_writable_req_us; #if defined(LWS_WITH_TLS) uint64_t accept_start_us; #endif #endif #ifdef LWS_LATENCY unsigned long action_start; unsigned long latency_start; #endif /* ints */ #define LWS_NO_FDS_POS (-1) int position_in_fds_table; #ifndef LWS_NO_CLIENT int chunk_remaining; #endif unsigned int cache_secs; unsigned int hdr_parsing_completed:1; unsigned int http2_substream:1; unsigned int upgraded_to_http2:1; unsigned int h2_stream_carries_ws:1; unsigned int h2_stream_carries_sse:1; unsigned int seen_nonpseudoheader:1; unsigned int listener:1; unsigned int user_space_externally_allocated:1; unsigned int socket_is_permanently_unusable:1; unsigned int rxflow_change_to:2; unsigned int conn_stat_done:1; unsigned int cache_reuse:1; unsigned int cache_revalidate:1; unsigned int cache_intermediaries:1; unsigned int favoured_pollin:1; unsigned int sending_chunked:1; unsigned int interpreting:1; unsigned int already_did_cce:1; unsigned int told_user_closed:1; unsigned int told_event_loop_closed:1; unsigned int waiting_to_send_close_frame:1; unsigned int close_needs_ack:1; unsigned int ipv6:1; unsigned int parent_pending_cb_on_writable:1; unsigned int cgi_stdout_zero_length:1; unsigned int seen_zero_length_recv:1; unsigned int rxflow_will_be_applied:1; unsigned int event_pipe:1; unsigned int handling_404:1; unsigned int protocol_bind_balance:1; unsigned int unix_skt:1; unsigned int close_when_buffered_out_drained:1; unsigned int h1_ws_proxied; unsigned int proxied_ws_parent; unsigned int could_have_pending:1; /* detect back-to-back writes */ unsigned int outer_will_close:1; unsigned int shadow:1; /* we do not control fd lifecycle at all */ #ifdef LWS_WITH_ACCESS_LOG unsigned int access_log_pending:1; #endif #ifndef LWS_NO_CLIENT unsigned int do_ws:1; /* whether we are doing http or ws flow */ unsigned int chunked:1; /* if the clientside connection is chunked */ unsigned int client_rx_avail:1; unsigned int client_http_body_pending:1; unsigned int transaction_from_pipeline_queue:1; unsigned int keepalive_active:1; unsigned int keepalive_rejected:1; unsigned int client_pipeline:1; unsigned int client_h2_alpn:1; unsigned int client_h2_substream:1; #endif #ifdef _WIN32 unsigned int sock_send_blocking:1; #endif #ifndef LWS_NO_CLIENT unsigned short ocport, c_port; #endif /* chars */ char lws_rx_parse_state; /* enum lws_rx_parse_state */ char rx_frame_type; /* enum lws_write_protocol */ char pending_timeout; /* enum pending_timeout */ char tsi; /* thread service index we belong to */ char protocol_interpret_idx; char redirects; uint8_t rxflow_bitmap; uint8_t bound_vhost_index; #ifdef LWS_WITH_CGI char cgi_channel; /* which of stdin/out/err */ char hdr_state; #endif #ifndef LWS_NO_CLIENT char chunk_parser; /* enum lws_chunk_parser */ #endif #if defined(LWS_WITH_CGI) || !defined(LWS_NO_CLIENT) char reason_bf; /* internal writeable callback reason bitfield */ #endif #if defined(LWS_WITH_STATS) && defined(LWS_WITH_TLS) char seen_rx; #endif uint8_t immortal_substream_count; /* volatile to make sure code is aware other thread can change */ volatile char handling_pollout; volatile char leave_pollout_active; #if LWS_MAX_SMP > 1 volatile char undergoing_init_from_other_pt; #endif }; #define lws_is_flowcontrolled(w) (!!(wsi->rxflow_bitmap)) void lws_service_do_ripe_rxflow(struct lws_context_per_thread *pt); const struct lws_role_ops * lws_role_by_name(const char *name); LWS_EXTERN int lws_socket_bind(struct lws_vhost *vhost, lws_sockfd_type sockfd, int port, const char *iface, int ipv6_allowed); #if defined(LWS_WITH_IPV6) LWS_EXTERN unsigned long lws_get_addr_scope(const char *ipaddr); #endif LWS_EXTERN void lws_close_free_wsi(struct lws *wsi, enum lws_close_status, const char *caller); LWS_EXTERN void __lws_close_free_wsi(struct lws *wsi, enum lws_close_status, const char *caller); LWS_EXTERN void __lws_free_wsi(struct lws *wsi); #if LWS_MAX_SMP > 1 static LWS_INLINE void lws_pt_mutex_init(struct lws_context_per_thread *pt) { lws_mutex_refcount_init(&pt->mr); pthread_mutex_init(&pt->lock_stats, NULL); } static LWS_INLINE void lws_pt_mutex_destroy(struct lws_context_per_thread *pt) { pthread_mutex_destroy(&pt->lock_stats); lws_mutex_refcount_destroy(&pt->mr); } #define lws_pt_lock(pt, reason) lws_mutex_refcount_lock(&pt->mr, reason) #define lws_pt_unlock(pt) lws_mutex_refcount_unlock(&pt->mr) static LWS_INLINE void lws_pt_stats_lock(struct lws_context_per_thread *pt) { pthread_mutex_lock(&pt->lock_stats); } static LWS_INLINE void lws_pt_stats_unlock(struct lws_context_per_thread *pt) { pthread_mutex_unlock(&pt->lock_stats); } #endif /* * EXTENSIONS */ #if defined(LWS_WITHOUT_EXTENSIONS) #define lws_any_extension_handled(_a, _b, _c, _d) (0) #define lws_ext_cb_active(_a, _b, _c, _d) (0) #define lws_ext_cb_all_exts(_a, _b, _c, _d, _e) (0) #define lws_issue_raw_ext_access lws_issue_raw #define lws_context_init_extensions(_a, _b) #endif LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_client_interpret_server_handshake(struct lws *wsi); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ws_rx_sm(struct lws *wsi, char already_processed, unsigned char c); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_issue_raw_ext_access(struct lws *wsi, unsigned char *buf, size_t len); LWS_EXTERN void lws_role_transition(struct lws *wsi, enum lwsi_role role, enum lwsi_state state, const struct lws_role_ops *ops); int lws_http_to_fallback(struct lws *wsi, unsigned char *buf, size_t len); LWS_EXTERN int LWS_WARN_UNUSED_RESULT user_callback_handle_rxflow(lws_callback_function, struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len); LWS_EXTERN int lws_plat_set_nonblocking(int fd); LWS_EXTERN int lws_plat_set_socket_options(struct lws_vhost *vhost, lws_sockfd_type fd, int unix_skt); LWS_EXTERN int lws_plat_check_connection_error(struct lws *wsi); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_header_table_attach(struct lws *wsi, int autoservice); LWS_EXTERN int lws_header_table_detach(struct lws *wsi, int autoservice); LWS_EXTERN int __lws_header_table_detach(struct lws *wsi, int autoservice); LWS_EXTERN void lws_header_table_reset(struct lws *wsi, int autoservice); void __lws_header_table_reset(struct lws *wsi, int autoservice); LWS_EXTERN char * LWS_WARN_UNUSED_RESULT lws_hdr_simple_ptr(struct lws *wsi, enum lws_token_indexes h); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_hdr_simple_create(struct lws *wsi, enum lws_token_indexes h, const char *s); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ensure_user_space(struct lws *wsi); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_change_pollfd(struct lws *wsi, int _and, int _or); #ifndef LWS_NO_SERVER int _lws_vhost_init_server(const struct lws_context_creation_info *info, struct lws_vhost *vhost); LWS_EXTERN struct lws_vhost * lws_select_vhost(struct lws_context *context, int port, const char *servername); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_parse_ws(struct lws *wsi, unsigned char **buf, size_t len); LWS_EXTERN void lws_server_get_canonical_hostname(struct lws_context *context, const struct lws_context_creation_info *info); #else #define _lws_vhost_init_server(_a, _b) (0) #define lws_parse_ws(_a, _b, _c) (0) #define lws_server_get_canonical_hostname(_a, _b) #endif LWS_EXTERN int __remove_wsi_socket_from_fds(struct lws *wsi); enum { LWSRXFC_ERROR = -1, LWSRXFC_CACHED = 0, LWSRXFC_ADDITIONAL = 1, LWSRXFC_TRIMMED = 2, }; int _lws_plat_service_forced_tsi(struct lws_context *context, int tsi); LWS_EXTERN int lws_rxflow_cache(struct lws *wsi, unsigned char *buf, int n, int len); LWS_EXTERN int lws_service_flag_pending(struct lws_context *context, int tsi); LWS_EXTERN void lws_client_stash_destroy(struct lws *wsi); static LWS_INLINE int lws_has_buffered_out(struct lws *wsi) { return !!wsi->buflist_out; } LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ws_client_rx_sm(struct lws *wsi, unsigned char c); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_parse(struct lws *wsi, unsigned char *buf, int *len); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_parse_urldecode(struct lws *wsi, uint8_t *_c); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_action(struct lws *wsi); LWS_EXTERN void __lws_close_free_wsi_final(struct lws *wsi); LWS_EXTERN void lws_libuv_closehandle(struct lws *wsi); LWS_EXTERN int lws_libuv_check_watcher_active(struct lws *wsi); LWS_VISIBLE LWS_EXTERN int lws_plat_plugins_init(struct lws_context * context, const char * const *d); LWS_VISIBLE LWS_EXTERN int lws_plat_plugins_destroy(struct lws_context * context); LWS_EXTERN void lws_restart_ws_ping_pong_timer(struct lws *wsi); struct lws * lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd); void lws_vhost_bind_wsi(struct lws_vhost *vh, struct lws *wsi); void lws_vhost_unbind_wsi(struct lws *wsi); void __lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs); int __lws_change_pollfd(struct lws *wsi, int _and, int _or); int lws_callback_as_writeable(struct lws *wsi); int lws_role_call_client_bind(struct lws *wsi, const struct lws_client_connect_info *i); void lws_remove_child_from_any_parent(struct lws *wsi); char * lws_generate_client_ws_handshake(struct lws *wsi, char *p, const char *conn1); int lws_client_ws_upgrade(struct lws *wsi, const char **cce); int lws_create_client_ws_object(const struct lws_client_connect_info *i, struct lws *wsi); int lws_alpn_comma_to_openssl(const char *comma, uint8_t *os, int len); int lws_role_call_alpn_negotiated(struct lws *wsi, const char *alpn); int lws_tls_server_conn_alpn(struct lws *wsi); int lws_ws_client_rx_sm_block(struct lws *wsi, unsigned char **buf, size_t len); void lws_destroy_event_pipe(struct lws *wsi); /* socks */ int socks_generate_msg(struct lws *wsi, enum socks_msg_type type, ssize_t *msg_len); void lws_sum_stats(const struct lws_context *ctx, struct lws_conn_stats *cs); LWS_EXTERN int __lws_timed_callback_remove(struct lws_vhost *vh, struct lws_timed_vh_protocol *p); LWS_EXTERN int LWS_WARN_UNUSED_RESULT __insert_wsi_socket_into_fds(struct lws_context *context, struct lws *wsi); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_issue_raw(struct lws *wsi, unsigned char *buf, size_t len); LWS_EXTERN lws_usec_t __lws_seq_timeout_check(struct lws_context_per_thread *pt, lws_usec_t usnow); LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT lws_client_connect_2(struct lws *wsi); LWS_VISIBLE struct lws * LWS_WARN_UNUSED_RESULT lws_client_reset(struct lws **wsi, int ssl, const char *address, int port, const char *path, const char *host); LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT lws_create_new_server_wsi(struct lws_vhost *vhost, int fixed_tsi); LWS_EXTERN char * LWS_WARN_UNUSED_RESULT lws_generate_client_handshake(struct lws *wsi, char *pkt); LWS_EXTERN int lws_handle_POLLOUT_event(struct lws *wsi, struct lws_pollfd *pollfd); LWS_EXTERN struct lws * lws_http_client_connect_via_info2(struct lws *wsi); #ifndef LWS_NO_CLIENT LWS_EXTERN int lws_client_socket_service(struct lws *wsi, struct lws_pollfd *pollfd, struct lws *wsi_conn); LWS_EXTERN struct lws * lws_client_wsi_effective(struct lws *wsi); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed_client(struct lws *wsi); #if !defined(LWS_WITH_TLS) #define lws_context_init_client_ssl(_a, _b) (0) #endif LWS_EXTERN void lws_decode_ssl_error(void); #else #define lws_context_init_client_ssl(_a, _b) (0) #endif LWS_EXTERN int __lws_rx_flow_control(struct lws *wsi); LWS_EXTERN int _lws_change_pollfd(struct lws *wsi, int _and, int _or, struct lws_pollargs *pa); #ifndef LWS_NO_SERVER LWS_EXTERN int lws_handshake_server(struct lws *wsi, unsigned char **buf, size_t len); #else #define lws_server_socket_service(_b, _c) (0) #define lws_handshake_server(_a, _b, _c) (0) #endif #ifdef LWS_WITH_ACCESS_LOG LWS_EXTERN int lws_access_log(struct lws *wsi); LWS_EXTERN void lws_prepare_access_log_info(struct lws *wsi, char *uri_ptr, int len, int meth); #else #define lws_access_log(_a) #endif LWS_EXTERN int lws_cgi_kill_terminated(struct lws_context_per_thread *pt); LWS_EXTERN void lws_cgi_remove_and_kill(struct lws *wsi); LWS_EXTERN void lws_plat_delete_socket_from_fds(struct lws_context *context, struct lws *wsi, int m); LWS_EXTERN void lws_plat_insert_socket_into_fds(struct lws_context *context, struct lws *wsi); LWS_EXTERN int lws_plat_change_pollfd(struct lws_context *context, struct lws *wsi, struct lws_pollfd *pfd); int lws_plat_pipe_create(struct lws *wsi); int lws_plat_pipe_signal(struct lws *wsi); void lws_plat_pipe_close(struct lws *wsi); LWS_EXTERN void lws_add_wsi_to_draining_ext_list(struct lws *wsi); LWS_EXTERN void lws_remove_wsi_from_draining_ext_list(struct lws *wsi); LWS_EXTERN int lws_poll_listen_fd(struct lws_pollfd *fd); LWS_EXTERN int lws_plat_service(struct lws_context *context, int timeout_ms); LWS_EXTERN LWS_VISIBLE int _lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi); LWS_EXTERN int lws_pthread_self_to_tsi(struct lws_context *context); LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT lws_plat_inet_ntop(int af, const void *src, char *dst, int cnt); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_plat_inet_pton(int af, const char *src, void *dst); LWS_EXTERN void lws_same_vh_protocol_remove(struct lws *wsi); LWS_EXTERN void __lws_same_vh_protocol_remove(struct lws *wsi); LWS_EXTERN void lws_same_vh_protocol_insert(struct lws *wsi, int n); void lws_seq_destroy_all_on_pt(struct lws_context_per_thread *pt); LWS_EXTERN int lws_broadcast(struct lws_context_per_thread *pt, int reason, void *in, size_t len); #if defined(LWS_WITH_STATS) void lws_stats_bump(struct lws_context_per_thread *pt, int i, uint64_t bump); void lws_stats_max(struct lws_context_per_thread *pt, int index, uint64_t val); #else static LWS_INLINE uint64_t lws_stats_bump( struct lws_context_per_thread *pt, int index, uint64_t bump) { (void)pt; (void)index; (void)bump; return 0; } static LWS_INLINE uint64_t lws_stats_max( struct lws_context_per_thread *pt, int index, uint64_t val) { (void)pt; (void)index; (void)val; return 0; } #endif #if defined(LWS_WITH_PEER_LIMITS) void lws_peer_track_wsi_close(struct lws_context *context, struct lws_peer *peer); int lws_peer_confirm_ah_attach_ok(struct lws_context *context, struct lws_peer *peer); void lws_peer_track_ah_detach(struct lws_context *context, struct lws_peer *peer); void lws_peer_cull_peer_wait_list(struct lws_context *context); struct lws_peer * lws_get_or_create_peer(struct lws_vhost *vhost, lws_sockfd_type sockfd); void lws_peer_add_wsi(struct lws_context *context, struct lws_peer *peer, struct lws *wsi); void lws_peer_dump_from_wsi(struct lws *wsi); #endif #ifdef LWS_WITH_HUBBUB hubbub_error html_parser_cb(const hubbub_token *token, void *pw); #endif int lws_threadpool_tsi_context(struct lws_context *context, int tsi); void __lws_wsi_remove_from_sul(struct lws *wsi); int lws_seq_pt_init(struct lws_context_per_thread *pt); int lws_buflist_aware_read(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_tokens *ebuf); int lws_buflist_aware_consume(struct lws *wsi, struct lws_tokens *ebuf, int used, int buffered); extern const struct lws_protocols protocol_abs_client_raw_skt, protocol_abs_client_unit_test; void lws_inform_client_conn_fail(struct lws *wsi, void *arg, size_t len); #ifdef __cplusplus }; #endif #endif libwebsockets-3.2.1/lib/core-net/sequencer.c000066400000000000000000000172541357643561300210230ustar00rootroot00000000000000/* * libwebsockets - lib/core-net/sequencer.c * * Copyright (C) 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" /* * per pending event */ typedef struct lws_seq_event { struct lws_dll2 seq_event_list; void *data; void *aux; lws_seq_events_t e; } lws_seq_event_t; /* * per sequencer */ struct lws_sequencer { struct lws_dll2 seq_list; lws_sorted_usec_list_t sul_timeout; lws_sorted_usec_list_t sul_pending; struct lws_dll2_owner seq_event_owner; struct lws_context_per_thread *pt; lws_seq_event_cb cb; const char *name; const lws_retry_bo_t *retry; lws_usec_t time_created; lws_usec_t timeout; /* 0 or time we timeout */ char going_down; }; #define QUEUE_SANITY_LIMIT 10 static void lws_sul_seq_heartbeat_cb(lws_sorted_usec_list_t *sul) { struct lws_context_per_thread *pt = lws_container_of(sul, struct lws_context_per_thread, sul_seq_heartbeat); /* send every sequencer a heartbeat message... it can ignore it */ lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, lws_dll2_get_head(&pt->seq_owner)) { lws_seq_t *s = lws_container_of(p, lws_seq_t, seq_list); /* queue the message to inform the sequencer */ lws_seq_queue_event(s, LWSSEQ_HEARTBEAT, NULL, NULL); } lws_end_foreach_dll_safe(p, tp); /* schedule the next one */ __lws_sul_insert(&pt->pt_sul_owner, &pt->sul_seq_heartbeat, LWS_US_PER_SEC); } int lws_seq_pt_init(struct lws_context_per_thread *pt) { pt->sul_seq_heartbeat.cb = lws_sul_seq_heartbeat_cb; /* schedule the first heartbeat */ __lws_sul_insert(&pt->pt_sul_owner, &pt->sul_seq_heartbeat, LWS_US_PER_SEC); return 0; } lws_seq_t * lws_seq_create(lws_seq_info_t *i) { struct lws_context_per_thread *pt = &i->context->pt[i->tsi]; lws_seq_t *seq = lws_zalloc(sizeof(*seq) + i->user_size, __func__); if (!seq) return NULL; seq->cb = i->cb; seq->pt = pt; seq->name = i->name; seq->retry = i->retry; *i->puser = (void *)&seq[1]; /* add the sequencer to the pt */ lws_pt_lock(pt, __func__); /* ---------------------------------- pt { */ lws_dll2_add_tail(&seq->seq_list, &pt->seq_owner); lws_pt_unlock(pt); /* } pt ------------------------------------------ */ seq->time_created = lws_now_usecs(); /* try to queue the creation cb */ if (lws_seq_queue_event(seq, LWSSEQ_CREATED, NULL, NULL)) { lws_dll2_remove(&seq->seq_list); lws_free(seq); return NULL; } return seq; } static int seq_ev_destroy(struct lws_dll2 *d, void *user) { lws_seq_event_t *seqe = lws_container_of(d, lws_seq_event_t, seq_event_list); lws_dll2_remove(&seqe->seq_event_list); lws_free(seqe); return 0; } void lws_seq_destroy(lws_seq_t **pseq) { lws_seq_t *seq = *pseq; /* defeat another thread racing to add events while we are destroying */ seq->going_down = 1; seq->cb(seq, (void *)&seq[1], LWSSEQ_DESTROYED, NULL, NULL); lws_pt_lock(seq->pt, __func__); /* -------------------------- pt { */ lws_dll2_remove(&seq->seq_list); lws_dll2_remove(&seq->sul_timeout.list); lws_dll2_remove(&seq->sul_pending.list); /* remove and destroy any pending events */ lws_dll2_foreach_safe(&seq->seq_event_owner, NULL, seq_ev_destroy); lws_pt_unlock(seq->pt); /* } pt ---------------------------------- */ lws_free_set_NULL(seq); } void lws_seq_destroy_all_on_pt(struct lws_context_per_thread *pt) { lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, pt->seq_owner.head) { lws_seq_t *s = lws_container_of(p, lws_seq_t, seq_list); lws_seq_destroy(&s); } lws_end_foreach_dll_safe(p, tp); } static void lws_seq_sul_pending_cb(lws_sorted_usec_list_t *sul) { lws_seq_t *seq = lws_container_of(sul, lws_seq_t, sul_pending); lws_seq_event_t *seqe; struct lws_dll2 *dh; int n; if (!seq->seq_event_owner.count) return; /* events are only added at tail, so no race possible yet... */ dh = lws_dll2_get_head(&seq->seq_event_owner); seqe = lws_container_of(dh, lws_seq_event_t, seq_event_list); n = seq->cb(seq, (void *)&seq[1], seqe->e, seqe->data, seqe->aux); /* ... have to lock here though, because we will change the list */ lws_pt_lock(seq->pt, __func__); /* ----------------------------- pt { */ /* detach event from sequencer event list and free it */ lws_dll2_remove(&seqe->seq_event_list); lws_free(seqe); lws_pt_unlock(seq->pt); /* } pt ------------------------------------- */ if (n) { lwsl_info("%s: destroying seq '%s' by request\n", __func__, seq->name); lws_seq_destroy(&seq); } } int lws_seq_queue_event(lws_seq_t *seq, lws_seq_events_t e, void *data, void *aux) { lws_seq_event_t *seqe; if (!seq || seq->going_down) return 1; seqe = lws_zalloc(sizeof(*seqe), __func__); if (!seqe) return 1; seqe->e = e; seqe->data = data; seqe->aux = aux; // lwsl_notice("%s: seq %s: event %d\n", __func__, seq->name, e); lws_pt_lock(seq->pt, __func__); /* ----------------------------- pt { */ if (seq->seq_event_owner.count > QUEUE_SANITY_LIMIT) { lwsl_err("%s: more than %d events queued\n", __func__, QUEUE_SANITY_LIMIT); } lws_dll2_add_tail(&seqe->seq_event_list, &seq->seq_event_owner); seq->sul_pending.cb = lws_seq_sul_pending_cb; __lws_sul_insert(&seq->pt->pt_sul_owner, &seq->sul_pending, 1); lws_pt_unlock(seq->pt); /* } pt ------------------------------------- */ return 0; } /* * Check if wsi still extant, by peeking in the message queue for a * LWSSEQ_WSI_CONN_CLOSE message about wsi. (Doesn't need to do the same for * CONN_FAIL since that will never have produced any messages prior to that). * * Use this to avoid trying to perform operations on wsi that have already * closed but we didn't get to that message yet. * * Returns 0 if not closed yet or 1 if it has closed but we didn't process the * close message yet. */ int lws_seq_check_wsi(lws_seq_t *seq, struct lws *wsi) { lws_seq_event_t *seqe; struct lws_dll2 *dh; lws_pt_lock(seq->pt, __func__); /* ----------------------------- pt { */ dh = lws_dll2_get_head(&seq->seq_event_owner); while (dh) { seqe = lws_container_of(dh, lws_seq_event_t, seq_event_list); if (seqe->e == LWSSEQ_WSI_CONN_CLOSE && seqe->data == wsi) break; dh = dh->next; } lws_pt_unlock(seq->pt); /* } pt ------------------------------------- */ return !!dh; } static void lws_seq_sul_timeout_cb(lws_sorted_usec_list_t *sul) { lws_seq_t *s = lws_container_of(sul, lws_seq_t, sul_timeout); lws_seq_queue_event(s, LWSSEQ_TIMED_OUT, NULL, NULL); } /* set us to LWS_SET_TIMER_USEC_CANCEL to remove timeout */ int lws_seq_timeout_us(lws_seq_t *seq, lws_usec_t us) { seq->sul_timeout.cb = lws_seq_sul_timeout_cb; /* list is always at the very top of the sul */ return __lws_sul_insert(&seq->pt->pt_sul_owner, (lws_sorted_usec_list_t *)&seq->sul_timeout.list, us); } lws_seq_t * lws_seq_from_user(void *u) { return &((lws_seq_t *)u)[-1]; } const char * lws_seq_name(lws_seq_t *seq) { return seq->name; } lws_usec_t lws_seq_us_since_creation(lws_seq_t *seq) { return lws_now_usecs() - seq->time_created; } struct lws_context * lws_seq_get_context(lws_seq_t *seq) { return seq->pt->context; } libwebsockets-3.2.1/lib/core-net/server.c000066400000000000000000000171001357643561300203250ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #if defined(LWS_WITH_SERVER_STATUS) void lws_sum_stats(const struct lws_context *ctx, struct lws_conn_stats *cs) { const struct lws_vhost *vh = ctx->vhost_list; while (vh) { cs->rx += vh->conn_stats.rx; cs->tx += vh->conn_stats.tx; cs->h1_conn += vh->conn_stats.h1_conn; cs->h1_trans += vh->conn_stats.h1_trans; cs->h2_trans += vh->conn_stats.h2_trans; cs->ws_upg += vh->conn_stats.ws_upg; cs->h2_upg += vh->conn_stats.h2_upg; cs->h2_alpn += vh->conn_stats.h2_alpn; cs->h2_subs += vh->conn_stats.h2_subs; cs->rejected += vh->conn_stats.rejected; vh = vh->vhost_next; } } LWS_EXTERN int lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len) { #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) static const char * const prots[] = { "http://", "https://", "file://", "cgi://", ">http://", ">https://", "callback://" }; #endif char *orig = buf, *end = buf + len - 1, first = 1; int n = 0; if (len < 100) return 0; buf += lws_snprintf(buf, end - buf, "{\n \"name\":\"%s\",\n" " \"port\":\"%d\",\n" " \"use_ssl\":\"%d\",\n" " \"sts\":\"%d\",\n" " \"rx\":\"%llu\",\n" " \"tx\":\"%llu\",\n" " \"h1_conn\":\"%lu\",\n" " \"h1_trans\":\"%lu\",\n" " \"h2_trans\":\"%lu\",\n" " \"ws_upg\":\"%lu\",\n" " \"rejected\":\"%lu\",\n" " \"h2_upg\":\"%lu\",\n" " \"h2_alpn\":\"%lu\",\n" " \"h2_subs\":\"%lu\"" , vh->name, vh->listen_port, #if defined(LWS_WITH_TLS) vh->tls.use_ssl & LCCSCF_USE_SSL, #else 0, #endif !!(vh->options & LWS_SERVER_OPTION_STS), vh->conn_stats.rx, vh->conn_stats.tx, vh->conn_stats.h1_conn, vh->conn_stats.h1_trans, vh->conn_stats.h2_trans, vh->conn_stats.ws_upg, vh->conn_stats.rejected, vh->conn_stats.h2_upg, vh->conn_stats.h2_alpn, vh->conn_stats.h2_subs ); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) if (vh->http.mount_list) { const struct lws_http_mount *m = vh->http.mount_list; buf += lws_snprintf(buf, end - buf, ",\n \"mounts\":["); while (m) { if (!first) buf += lws_snprintf(buf, end - buf, ","); buf += lws_snprintf(buf, end - buf, "\n {\n \"mountpoint\":\"%s\",\n" " \"origin\":\"%s%s\",\n" " \"cache_max_age\":\"%d\",\n" " \"cache_reuse\":\"%d\",\n" " \"cache_revalidate\":\"%d\",\n" " \"cache_intermediaries\":\"%d\"\n" , m->mountpoint, prots[m->origin_protocol], m->origin, m->cache_max_age, m->cache_reusable, m->cache_revalidate, m->cache_intermediaries); if (m->def) buf += lws_snprintf(buf, end - buf, ",\n \"default\":\"%s\"", m->def); buf += lws_snprintf(buf, end - buf, "\n }"); first = 0; m = m->mount_next; } buf += lws_snprintf(buf, end - buf, "\n ]"); } #endif if (vh->protocols) { n = 0; first = 1; buf += lws_snprintf(buf, end - buf, ",\n \"ws-protocols\":["); while (n < vh->count_protocols) { if (!first) buf += lws_snprintf(buf, end - buf, ","); buf += lws_snprintf(buf, end - buf, "\n {\n \"%s\":{\n" " \"status\":\"ok\"\n }\n }" , vh->protocols[n].name); first = 0; n++; } buf += lws_snprintf(buf, end - buf, "\n ]"); } buf += lws_snprintf(buf, end - buf, "\n}"); return buf - orig; } LWS_EXTERN LWS_VISIBLE int lws_json_dump_context(const struct lws_context *context, char *buf, int len, int hide_vhosts) { char *orig = buf, *end = buf + len - 1, first = 1; const struct lws_vhost *vh = context->vhost_list; const struct lws_context_per_thread *pt; int n, listening = 0, cgi_count = 0, fd; struct lws_conn_stats cs; double d = 0; #ifdef LWS_WITH_CGI struct lws_cgi * const *pcgi; #endif #ifdef LWS_WITH_LIBUV uv_uptime(&d); #endif buf += lws_snprintf(buf, end - buf, "{ " "\"version\":\"%s\",\n" "\"uptime\":\"%ld\",\n", lws_get_library_version(), (long)d); #ifdef LWS_HAVE_GETLOADAVG { double d[3]; int m; m = getloadavg(d, 3); for (n = 0; n < m; n++) { buf += lws_snprintf(buf, end - buf, "\"l%d\":\"%.2f\",\n", n + 1, d[n]); } } #endif fd = lws_open("/proc/self/statm", LWS_O_RDONLY); if (fd >= 0) { char contents[96], pure[96]; n = read(fd, contents, sizeof(contents) - 1); if (n > 0) { contents[n] = '\0'; if (contents[n - 1] == '\n') contents[--n] = '\0'; lws_json_purify(pure, contents, sizeof(pure)); buf += lws_snprintf(buf, end - buf, "\"statm\": \"%s\",\n", pure); } close(fd); } buf += lws_snprintf(buf, end - buf, "\"heap\":%lld,\n\"contexts\":[\n", (long long)lws_get_allocated_heap()); buf += lws_snprintf(buf, end - buf, "{ " "\"context_uptime\":\"%llu\",\n" "\"cgi_spawned\":\"%d\",\n" "\"pt_fd_max\":\"%d\",\n" "\"ah_pool_max\":\"%d\",\n" "\"deprecated\":\"%d\",\n" "\"wsi_alive\":\"%d\",\n", (unsigned long long)(lws_now_usecs() - context->time_up), context->count_cgi_spawned, context->fd_limit_per_thread, context->max_http_header_pool, context->deprecated, context->count_wsi_allocated); buf += lws_snprintf(buf, end - buf, "\"pt\":[\n "); for (n = 0; n < context->count_threads; n++) { pt = &context->pt[n]; if (n) buf += lws_snprintf(buf, end - buf, ","); buf += lws_snprintf(buf, end - buf, "\n {\n" " \"fds_count\":\"%d\",\n" " \"ah_pool_inuse\":\"%d\",\n" " \"ah_wait_list\":\"%d\"\n" " }", pt->fds_count, pt->http.ah_count_in_use, pt->http.ah_wait_list_length); } buf += lws_snprintf(buf, end - buf, "]"); buf += lws_snprintf(buf, end - buf, ", \"vhosts\":[\n "); first = 1; vh = context->vhost_list; listening = 0; cs = context->conn_stats; lws_sum_stats(context, &cs); while (vh) { if (!hide_vhosts) { if (!first) if(buf != end) *buf++ = ','; buf += lws_json_dump_vhost(vh, buf, end - buf); first = 0; } if (vh->lserv_wsi) listening++; vh = vh->vhost_next; } buf += lws_snprintf(buf, end - buf, "],\n\"listen_wsi\":\"%d\",\n" " \"rx\":\"%llu\",\n" " \"tx\":\"%llu\",\n" " \"h1_conn\":\"%lu\",\n" " \"h1_trans\":\"%lu\",\n" " \"h2_trans\":\"%lu\",\n" " \"ws_upg\":\"%lu\",\n" " \"rejected\":\"%lu\",\n" " \"h2_alpn\":\"%lu\",\n" " \"h2_subs\":\"%lu\",\n" " \"h2_upg\":\"%lu\"", listening, cs.rx, cs.tx, cs.h1_conn, cs.h1_trans, cs.h2_trans, cs.ws_upg, cs.rejected, cs.h2_alpn, cs.h2_subs, cs.h2_upg); #ifdef LWS_WITH_CGI for (n = 0; n < context->count_threads; n++) { pt = &context->pt[n]; pcgi = &pt->http.cgi_list; while (*pcgi) { pcgi = &(*pcgi)->cgi_list; cgi_count++; } } #endif buf += lws_snprintf(buf, end - buf, ",\n \"cgi_alive\":\"%d\"\n ", cgi_count); buf += lws_snprintf(buf, end - buf, "}"); buf += lws_snprintf(buf, end - buf, "]}\n "); return buf - orig; } #endif libwebsockets-3.2.1/lib/core-net/service.c000066400000000000000000000427771357643561300205010ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" int lws_callback_as_writeable(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; int n, m; lws_stats_bump(pt, LWSSTATS_C_WRITEABLE_CB, 1); #if defined(LWS_WITH_STATS) if (wsi->active_writable_req_us) { uint64_t ul = lws_now_usecs() - wsi->active_writable_req_us; lws_stats_bump(pt, LWSSTATS_US_WRITABLE_DELAY_AVG, ul); lws_stats_max(pt, LWSSTATS_US_WORST_WRITABLE_DELAY, ul); wsi->active_writable_req_us = 0; } #endif n = wsi->role_ops->writeable_cb[lwsi_role_server(wsi)]; m = user_callback_handle_rxflow(wsi->protocol->callback, wsi, (enum lws_callback_reasons) n, wsi->user_space, NULL, 0); return m; } LWS_VISIBLE int lws_handle_POLLOUT_event(struct lws *wsi, struct lws_pollfd *pollfd) { volatile struct lws *vwsi = (volatile struct lws *)wsi; int n; // lwsl_notice("%s: %p\n", __func__, wsi); vwsi->leave_pollout_active = 0; vwsi->handling_pollout = 1; /* * if another thread wants POLLOUT on us, from here on while * handling_pollout is set, he will only set leave_pollout_active. * If we are going to disable POLLOUT, we will check that first. */ wsi->could_have_pending = 0; /* clear back-to-back write detection */ /* * user callback is lowest priority to get these notifications * actually, since other pending things cannot be disordered * * Priority 1: pending truncated sends are incomplete ws fragments * If anything else sent first the protocol would be * corrupted. * * These are post- any compression transform */ if (lws_has_buffered_out(wsi)) { //lwsl_notice("%s: completing partial\n", __func__); if (lws_issue_raw(wsi, NULL, 0) < 0) { lwsl_info("%s signalling to close\n", __func__); goto bail_die; } /* leave POLLOUT active either way */ goto bail_ok; } else if (lwsi_state(wsi) == LRS_FLUSHING_BEFORE_CLOSE) { wsi->socket_is_permanently_unusable = 1; goto bail_die; /* retry closing now */ } /* Priority 2: pre- compression transform */ #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more) { enum lws_write_protocol wp = LWS_WRITE_HTTP; lwsl_info("%s: completing comp partial (buflist_comp %p, may %d)\n", __func__, wsi->http.comp_ctx.buflist_comp, wsi->http.comp_ctx.may_have_more ); if (wsi->role_ops->write_role_protocol(wsi, NULL, 0, &wp) < 0) { lwsl_info("%s signalling to close\n", __func__); goto bail_die; } lws_callback_on_writable(wsi); goto bail_ok; } #endif #ifdef LWS_WITH_CGI /* * A cgi master's wire protocol remains h1 or h2. He is just getting * his data from his child cgis. */ if (wsi->http.cgi) { /* also one shot */ if (pollfd) if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_info("failed at set pollfd\n"); return 1; } goto user_service_go_again; } #endif /* if we got here, we should have wire protocol ops set on the wsi */ assert(wsi->role_ops); if (!wsi->role_ops->handle_POLLOUT) goto bail_ok; switch ((wsi->role_ops->handle_POLLOUT)(wsi)) { case LWS_HP_RET_BAIL_OK: goto bail_ok; case LWS_HP_RET_BAIL_DIE: goto bail_die; case LWS_HP_RET_USER_SERVICE: break; default: assert(0); } /* one shot */ if (pollfd) { int eff = vwsi->leave_pollout_active; if (!eff) { if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_info("failed at set pollfd\n"); goto bail_die; } } vwsi->handling_pollout = 0; /* cannot get leave_pollout_active set after the above */ if (!eff && wsi->leave_pollout_active) { /* * got set inbetween sampling eff and clearing * handling_pollout, force POLLOUT on */ lwsl_debug("leave_pollout_active\n"); if (lws_change_pollfd(wsi, 0, LWS_POLLOUT)) { lwsl_info("failed at set pollfd\n"); goto bail_die; } } vwsi->leave_pollout_active = 0; } if (lwsi_role_client(wsi) && !wsi->hdr_parsing_completed && lwsi_state(wsi) != LRS_H2_WAITING_TO_SEND_HEADERS && lwsi_state(wsi) != LRS_ISSUE_HTTP_BODY) goto bail_ok; #ifdef LWS_WITH_CGI user_service_go_again: #endif if (wsi->role_ops->perform_user_POLLOUT) { if (wsi->role_ops->perform_user_POLLOUT(wsi) == -1) goto bail_die; else goto bail_ok; } lwsl_debug("%s: %p: non mux: wsistate 0x%lx, ops %s\n", __func__, wsi, (unsigned long)wsi->wsistate, wsi->role_ops->name); vwsi = (volatile struct lws *)wsi; vwsi->leave_pollout_active = 0; n = lws_callback_as_writeable(wsi); vwsi->handling_pollout = 0; if (vwsi->leave_pollout_active) if (lws_change_pollfd(wsi, 0, LWS_POLLOUT)) goto bail_die; return n; /* * since these don't disable the POLLOUT, they are always doing the * right thing for leave_pollout_active whether it was set or not. */ bail_ok: vwsi->handling_pollout = 0; vwsi->leave_pollout_active = 0; return 0; bail_die: vwsi->handling_pollout = 0; vwsi->leave_pollout_active = 0; return -1; } int lws_rxflow_cache(struct lws *wsi, unsigned char *buf, int n, int len) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; uint8_t *buffered; size_t blen; int ret = LWSRXFC_CACHED, m; /* his RX is flowcontrolled, don't send remaining now */ blen = lws_buflist_next_segment_len(&wsi->buflist, &buffered); if (blen) { if (buf >= buffered && buf + len <= buffered + blen && blen != (size_t)len) { /* * rxflow while we were spilling prev rxflow * * len indicates how much was unused, then... so trim * the head buflist to match that situation */ lws_buflist_use_segment(&wsi->buflist, blen - len); lwsl_debug("%s: trim existing rxflow %d -> %d\n", __func__, (int)blen, (int)len); return LWSRXFC_TRIMMED; } ret = LWSRXFC_ADDITIONAL; } /* a new rxflow, buffer it and warn caller */ m = lws_buflist_append_segment(&wsi->buflist, buf + n, len - n); if (m < 0) return LWSRXFC_ERROR; if (m) { lwsl_debug("%s: added %p to rxflow list\n", __func__, wsi); lws_dll2_add_head(&wsi->dll_buflist, &pt->dll_buflist_owner); } return ret; } /* this is used by the platform service code to stop us waiting for network * activity in poll() when we have something that already needs service */ LWS_VISIBLE LWS_EXTERN int lws_service_adjust_timeout(struct lws_context *context, int timeout_ms, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; /* * Figure out if we really want to wait in poll()... we only need to * wait if really nothing already to do and we have to wait for * something from network */ #if defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS) /* 1) if we know we are draining rx ext, do not wait in poll */ if (pt->ws.rx_draining_ext_list) return 0; #endif #if defined(LWS_WITH_TLS) /* 2) if we know we have non-network pending data, * do not wait in poll */ if (pt->context->tls_ops && pt->context->tls_ops->fake_POLLIN_for_buffered && pt->context->tls_ops->fake_POLLIN_for_buffered(pt)) return 0; #endif /* * 4) If there is any wsi with rxflow buffered and in a state to process * it, we should not wait in poll */ lws_start_foreach_dll(struct lws_dll2 *, d, pt->dll_buflist_owner.head) { struct lws *wsi = lws_container_of(d, struct lws, dll_buflist); if (!lws_is_flowcontrolled(wsi) && lwsi_state(wsi) != LRS_DEFERRING_ACTION) return 0; /* * 5) If any guys with http compression to spill, we shouldn't wait in * poll but hurry along and service them */ } lws_end_foreach_dll(d); return timeout_ms; } /* * POLLIN said there is something... we must read it, and either use it; or * if other material already in the buflist append it and return the buflist * head material. */ int lws_buflist_aware_read(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_tokens *ebuf) { int n, prior = (int)lws_buflist_next_segment_len(&wsi->buflist, NULL); ebuf->token = pt->serv_buf; ebuf->len = lws_ssl_capable_read(wsi, pt->serv_buf, wsi->context->pt_serv_buf_size); if (ebuf->len == LWS_SSL_CAPABLE_MORE_SERVICE && prior) goto get_from_buflist; if (ebuf->len <= 0) return 0; /* nothing in buflist already? Then just use what we read */ if (!prior) return 0; /* stash what we read */ n = lws_buflist_append_segment(&wsi->buflist, ebuf->token, ebuf->len); if (n < 0) return -1; if (n) { lwsl_debug("%s: added %p to rxflow list\n", __func__, wsi); lws_dll2_add_head(&wsi->dll_buflist, &pt->dll_buflist_owner); } /* get the first buflist guy in line */ get_from_buflist: ebuf->len = (int)lws_buflist_next_segment_len(&wsi->buflist, &ebuf->token); return 1; /* came from buflist */ } int lws_buflist_aware_consume(struct lws *wsi, struct lws_tokens *ebuf, int used, int buffered) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; int m; /* it's in the buflist; we didn't use any */ if (!used && buffered) return 0; if (used && buffered) { m = lws_buflist_use_segment(&wsi->buflist, used); lwsl_info("%s: draining rxflow: used %d, next %d\n", __func__, used, m); if (m) return 0; lwsl_info("%s: removed %p from dll_buflist\n", __func__, wsi); lws_dll2_remove(&wsi->dll_buflist); return 0; } /* any remainder goes on the buflist */ if (used != ebuf->len) { m = lws_buflist_append_segment(&wsi->buflist, ebuf->token + used, ebuf->len - used); if (m < 0) return 1; /* OOM */ if (m) { lwsl_debug("%s: added %p to rxflow list\n", __func__, wsi); lws_dll2_add_head(&wsi->dll_buflist, &pt->dll_buflist_owner); } } return 0; } void lws_service_do_ripe_rxflow(struct lws_context_per_thread *pt) { struct lws_pollfd pfd; if (!pt->dll_buflist_owner.head) return; /* * service all guys with pending rxflow that reached a state they can * accept the pending data */ lws_pt_lock(pt, __func__); lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, pt->dll_buflist_owner.head) { struct lws *wsi = lws_container_of(d, struct lws, dll_buflist); pfd.events = LWS_POLLIN; pfd.revents = LWS_POLLIN; pfd.fd = -1; lwsl_debug("%s: rxflow processing: %p fc=%d, 0x%lx\n", __func__, wsi, lws_is_flowcontrolled(wsi), (unsigned long)wsi->wsistate); if (!lws_is_flowcontrolled(wsi) && lwsi_state(wsi) != LRS_DEFERRING_ACTION && (wsi->role_ops->handle_POLLIN)(pt, wsi, &pfd) == LWS_HPI_RET_PLEASE_CLOSE_ME) lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "close_and_handled"); } lws_end_foreach_dll_safe(d, d1); lws_pt_unlock(pt); } /* * guys that need POLLIN service again without waiting for network action * can force POLLIN here if not flowcontrolled, so they will get service. * * Return nonzero if anybody got their POLLIN faked */ int lws_service_flag_pending(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; int forced = 0; lws_pt_lock(pt, __func__); /* * 1) If there is any wsi with a buflist and in a state to process * it, we should not wait in poll */ lws_start_foreach_dll(struct lws_dll2 *, d, pt->dll_buflist_owner.head) { struct lws *wsi = lws_container_of(d, struct lws, dll_buflist); if (!lws_is_flowcontrolled(wsi) && lwsi_state(wsi) != LRS_DEFERRING_ACTION) { forced = 1; break; } } lws_end_foreach_dll(d); #if defined(LWS_ROLE_WS) forced |= role_ops_ws.service_flag_pending(context, tsi); #endif #if defined(LWS_WITH_TLS) /* * 2) For all guys with buffered SSL read data already saved up, if they * are not flowcontrolled, fake their POLLIN status so they'll get * service to use up the buffered incoming data, even though their * network socket may have nothing */ lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, lws_dll2_get_head(&pt->tls.dll_pending_tls_owner)) { struct lws *wsi = lws_container_of(p, struct lws, tls.dll_pending_tls); pt->fds[wsi->position_in_fds_table].revents |= pt->fds[wsi->position_in_fds_table].events & LWS_POLLIN; if (pt->fds[wsi->position_in_fds_table].revents & LWS_POLLIN) { forced = 1; /* * he's going to get serviced now, take him off the * list of guys with buffered SSL. If he still has some * at the end of the service, he'll get put back on the * list then. */ __lws_ssl_remove_wsi_from_buffered_list(wsi); } } lws_end_foreach_dll_safe(p, p1); #endif lws_pt_unlock(pt); return forced; } LWS_VISIBLE int lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws *wsi; if (!context || context->being_destroyed1 ) return -1; if (!pollfd) { /* * calling with NULL pollfd for periodic background processing * is no longer needed and is now illegal. */ assert(pollfd); return -1; } assert(lws_socket_is_valid(pollfd->fd)); /* no, here to service a socket descriptor */ wsi = wsi_from_fd(context, pollfd->fd); if (!wsi) /* not lws connection ... leave revents alone and return */ return 0; #if LWS_MAX_SMP > 1 if (wsi->undergoing_init_from_other_pt) /* * Temporary situation that other service thread is initializing * this wsi right now for use on our service thread. */ return 0; #endif /* * so that caller can tell we handled, past here we need to * zero down pollfd->revents after handling */ /* handle session socket closed */ if ((!(pollfd->revents & pollfd->events & LWS_POLLIN)) && (pollfd->revents & LWS_POLLHUP)) { wsi->socket_is_permanently_unusable = 1; lwsl_debug("Session Socket %p (fd=%d) dead\n", (void *)wsi, pollfd->fd); goto close_and_handled; } #ifdef _WIN32 if (pollfd->revents & LWS_POLLOUT) wsi->sock_send_blocking = FALSE; #endif if ((!(pollfd->revents & pollfd->events & LWS_POLLIN)) && (pollfd->revents & LWS_POLLHUP)) { lwsl_debug("pollhup\n"); wsi->socket_is_permanently_unusable = 1; goto close_and_handled; } #if defined(LWS_WITH_TLS) if (lwsi_state(wsi) == LRS_SHUTDOWN && lws_is_ssl(wsi) && wsi->tls.ssl) { switch (__lws_tls_shutdown(wsi)) { case LWS_SSL_CAPABLE_DONE: case LWS_SSL_CAPABLE_ERROR: goto close_and_handled; case LWS_SSL_CAPABLE_MORE_SERVICE_READ: case LWS_SSL_CAPABLE_MORE_SERVICE_WRITE: case LWS_SSL_CAPABLE_MORE_SERVICE: goto handled; } } #endif wsi->could_have_pending = 0; /* clear back-to-back write detection */ /* okay, what we came here to do... */ /* if we got here, we should have wire protocol ops set on the wsi */ assert(wsi->role_ops); // lwsl_notice("%s: %s: wsistate 0x%x\n", __func__, wsi->role_ops->name, // wsi->wsistate); switch ((wsi->role_ops->handle_POLLIN)(pt, wsi, pollfd)) { case LWS_HPI_RET_WSI_ALREADY_DIED: return 1; case LWS_HPI_RET_HANDLED: break; case LWS_HPI_RET_PLEASE_CLOSE_ME: close_and_handled: lwsl_debug("%p: Close and handled\n", wsi); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "close_and_handled"); #if defined(_DEBUG) && defined(LWS_WITH_LIBUV) /* * confirm close has no problem being called again while * it waits for libuv service to complete the first async * close */ if (context->event_loop_ops == &event_loop_ops_uv) lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "close_and_handled uv repeat test"); #endif /* * pollfd may point to something else after the close * due to pollfd swapping scheme on delete on some platforms * we can't clear revents now because it'd be the wrong guy's * revents */ return 1; default: assert(0); } #if defined(LWS_WITH_TLS) handled: #endif pollfd->revents = 0; if (!context->protocol_init_done) if (lws_protocol_init(context)) { lwsl_err("%s: lws_protocol_init failed\n", __func__); return -1; } return 0; } LWS_VISIBLE int lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd) { return lws_service_fd_tsi(context, pollfd, 0); } LWS_VISIBLE int lws_service(struct lws_context *context, int timeout_ms) { struct lws_context_per_thread *pt = &context->pt[0]; int n; if (!context) return 1; pt->inside_service = 1; if (context->event_loop_ops->run_pt) { /* we are configured for an event loop */ context->event_loop_ops->run_pt(context, 0); pt->inside_service = 0; return 1; } n = lws_plat_service(context, timeout_ms); pt->inside_service = 0; return n; } LWS_VISIBLE int lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; int n; pt->inside_service = 1; #if LWS_MAX_SMP > 1 pt->self = pthread_self(); #endif if (context->event_loop_ops->run_pt) { /* we are configured for an event loop */ context->event_loop_ops->run_pt(context, tsi); pt->inside_service = 0; return 1; } n = _lws_plat_service_tsi(context, timeout_ms, tsi); pt->inside_service = 0; return n; } libwebsockets-3.2.1/lib/core-net/sorted-usec-list.c000066400000000000000000000072141357643561300222320ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" static int sul_compare(const lws_dll2_t *d, const lws_dll2_t *i) { lws_usec_t a = ((lws_sorted_usec_list_t *)d)->us; lws_usec_t b = ((lws_sorted_usec_list_t *)i)->us; /* * Simply returning (a - b) in an int * may lead to an integer overflow bug */ if (a > b) return 1; if (a < b) return -1; return 0; } int __lws_sul_insert(lws_dll2_owner_t *own, lws_sorted_usec_list_t *sul, lws_usec_t us) { lws_usec_t now = lws_now_usecs(); lws_dll2_remove(&sul->list); if (us == LWS_SET_TIMER_USEC_CANCEL) { /* we are clearing the timeout */ sul->us = 0; return 0; } sul->us = now + us; assert(sul->cb); /* * we sort the pt's list of sequencers with pending timeouts, so it's * cheap to check it every second */ lws_dll2_add_sorted(&sul->list, own, sul_compare); #if 0 // defined(_DEBUG) { lws_usec_t worst = 0; int n = 1; lwsl_info("%s: own %p: count %d\n", __func__, own, own->count); lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, lws_dll2_get_head(own)) { lws_sorted_usec_list_t *sul = (lws_sorted_usec_list_t *)p; lwsl_info("%s: %d: %llu (+%lld)\n", __func__, n++, (unsigned long long)sul->us, (long long)(sul->us - now)); if (sul->us < worst) { lwsl_err("%s: wrongly sorted sul entry!\n", __func__); assert(0); } worst = sul->us; } lws_end_foreach_dll_safe(p, tp); } #endif return 0; } void lws_sul_schedule(struct lws_context *context, int tsi, lws_sorted_usec_list_t *sul, sul_cb_t cb, lws_usec_t us) { struct lws_context_per_thread *pt = &context->pt[tsi]; sul->cb = cb; __lws_sul_insert(&pt->pt_sul_owner, sul, us); } lws_usec_t __lws_sul_service_ripe(lws_dll2_owner_t *own, lws_usec_t usnow) { while (lws_dll2_get_head(own)) { /* .list is always first member in lws_sorted_usec_list_t */ lws_sorted_usec_list_t *sul = (lws_sorted_usec_list_t *) lws_dll2_get_head(own); assert(sul->us); /* shouldn't be on the list otherwise */ if (sul->us > usnow) /* * No need to look further if we met one later than now: * the list is sorted in ascending time order */ return sul->us - usnow; /* his moment has come... remove him from timeout list */ lws_dll2_remove(&sul->list); sul->us = 0; sul->cb(sul); /* * The callback may have done any mixture of delete * and add sul entries... eg, close a wsi may pull out * multiple entries making iterating it statefully * unsafe. Always restart at the current head of list. */ } /* * Nothing left to take care of in the list (cannot return 0 otherwise * because we will service anything equal to usnow rather than return) */ return 0; } libwebsockets-3.2.1/lib/core-net/stats.c000066400000000000000000000143641357643561300201660ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #if defined(LWS_WITH_STATS) LWS_VISIBLE LWS_EXTERN uint64_t lws_stats_get(struct lws_context *context, int index) { struct lws_context_per_thread *pt = &context->pt[0]; if (index >= LWSSTATS_SIZE) return 0; return pt->lws_stats[index]; } static const char * stat_names[] = { "C_CONNECTIONS", "C_API_CLOSE", "C_API_READ", "C_API_LWS_WRITE", "C_API_WRITE", "C_WRITE_PARTIALS", "C_WRITEABLE_CB_REQ", "C_WRITEABLE_CB_EFF_REQ", "C_WRITEABLE_CB", "C_SSL_CONNECTIONS_FAILED", "C_SSL_CONNECTIONS_ACCEPTED", "C_SSL_CONNECTIONS_ACCEPT_SPIN", "C_SSL_CONNS_HAD_RX", "C_TIMEOUTS", "C_SERVICE_ENTRY", "B_READ", "B_WRITE", "B_PARTIALS_ACCEPTED_PARTS", "US_SSL_ACCEPT_LATENCY_AVG", "US_WRITABLE_DELAY_AVG", "US_WORST_WRITABLE_DELAY", "US_SSL_RX_DELAY_AVG", "C_PEER_LIMIT_AH_DENIED", "C_PEER_LIMIT_WSI_DENIED", "C_CONNECTIONS_CLIENT", "C_CONNECTIONS_CLIENT_FAILED", }; static int quantify(struct lws_context *context, int tsi, char *p, int len, int idx, uint64_t *sum) { const lws_humanize_unit_t *schema = humanize_schema_si; struct lws_context_per_thread *pt = &context->pt[tsi]; uint64_t u, u1; lws_pt_stats_lock(pt); u = pt->lws_stats[idx]; /* it's supposed to be an average? */ switch (idx) { case LWSSTATS_US_SSL_ACCEPT_LATENCY_AVG: u1 = pt->lws_stats[LWSSTATS_C_SSL_CONNECTIONS_ACCEPTED]; if (u1) u = u / u1; break; case LWSSTATS_US_SSL_RX_DELAY_AVG: u1 = pt->lws_stats[LWSSTATS_C_SSL_CONNS_HAD_RX]; if (u1) u = u / u1; break; case LWSSTATS_US_WRITABLE_DELAY_AVG: u1 = pt->lws_stats[LWSSTATS_C_WRITEABLE_CB]; if (u1) u = u / u1; break; } lws_pt_stats_unlock(pt); *sum += u; switch (stat_names[idx][0]) { case 'U': schema = humanize_schema_us; break; case 'B': schema = humanize_schema_si_bytes; break; } return lws_humanize(p, len, u, schema); } LWS_VISIBLE LWS_EXTERN void lws_stats_log_dump(struct lws_context *context) { struct lws_vhost *v = context->vhost_list; uint64_t summary[LWSSTATS_SIZE]; char bufline[128], *p, *end = bufline + sizeof(bufline) - 1; int n, m; if (!context->updated) return; context->updated = 0; memset(summary, 0, sizeof(summary)); lwsl_notice("\n"); lwsl_notice("LWS internal statistics dump ----->\n"); for (n = 0; n < (int)LWS_ARRAY_SIZE(stat_names); n++) { uint64_t u = 0; /* if it's all zeroes, don't report it */ for (m = 0; m < context->count_threads; m++) { struct lws_context_per_thread *pt = &context->pt[m]; u |= pt->lws_stats[n]; } if (!u) continue; p = bufline; p += lws_snprintf(p, lws_ptr_diff(end, p), "%28s: ", stat_names[n]); for (m = 0; m < context->count_threads; m++) quantify(context, m, p, lws_ptr_diff(end, p), n, &summary[n]); lwsl_notice("%s\n", bufline); } lwsl_notice("Simultaneous SSL restriction: %8d/%d\n", context->simultaneous_ssl, context->simultaneous_ssl_restriction); lwsl_notice("Live wsi: %8d\n", context->count_wsi_allocated); context->updated = 1; while (v) { if (v->lserv_wsi && v->lserv_wsi->position_in_fds_table != LWS_NO_FDS_POS) { struct lws_context_per_thread *pt = &context->pt[(int)v->lserv_wsi->tsi]; struct lws_pollfd *pfd; pfd = &pt->fds[v->lserv_wsi->position_in_fds_table]; lwsl_notice(" Listen port %d actual POLLIN: %d\n", v->listen_port, (int)pfd->events & LWS_POLLIN); } v = v->vhost_next; } for (n = 0; n < context->count_threads; n++) { struct lws_context_per_thread *pt = &context->pt[n]; struct lws *wl; int m = 0; lwsl_notice("PT %d\n", n + 1); lws_pt_lock(pt, __func__); lwsl_notice(" AH in use / max: %d / %d\n", pt->http.ah_count_in_use, context->max_http_header_pool); wl = pt->http.ah_wait_list; while (wl) { m++; wl = wl->http.ah_wait_list; } lwsl_notice(" AH wait list count / actual: %d / %d\n", pt->http.ah_wait_list_length, m); lws_pt_unlock(pt); } #if defined(LWS_WITH_PEER_LIMITS) m = 0; for (n = 0; n < (int)context->pl_hash_elements; n++) { lws_start_foreach_llp(struct lws_peer **, peer, context->pl_hash_table[n]) { m++; } lws_end_foreach_llp(peer, next); } lwsl_notice(" Peers: total active %d\n", m); if (m > 10) { m = 10; lwsl_notice(" (showing 10 peers only)\n"); } if (m) { for (n = 0; n < (int)context->pl_hash_elements; n++) { char buf[72]; lws_start_foreach_llp(struct lws_peer **, peer, context->pl_hash_table[n]) { struct lws_peer *df = *peer; if (!lws_plat_inet_ntop(df->af, df->addr, buf, sizeof(buf) - 1)) strcpy(buf, "unknown"); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) lwsl_notice(" peer %s: count wsi: %d, count ah: %d\n", buf, df->count_wsi, df->http.count_ah); #else lwsl_notice(" peer %s: count wsi: %d\n", buf, df->count_wsi); #endif if (!--m) break; } lws_end_foreach_llp(peer, next); } } #endif lwsl_notice("\n"); } void lws_stats_bump(struct lws_context_per_thread *pt, int i, uint64_t bump) { lws_pt_stats_lock(pt); pt->lws_stats[i] += bump; if (i != LWSSTATS_C_SERVICE_ENTRY) { pt->updated = 1; pt->context->updated = 1; } lws_pt_stats_unlock(pt); } void lws_stats_max(struct lws_context_per_thread *pt, int index, uint64_t val) { lws_pt_stats_lock(pt); if (val > pt->lws_stats[index]) { pt->lws_stats[index] = val; pt->updated = 1; pt->context->updated = 1; } lws_pt_stats_unlock(pt); } #endif libwebsockets-3.2.1/lib/core-net/vhost.c000066400000000000000000000745551357643561300202030ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" const struct lws_role_ops *available_roles[] = { #if defined(LWS_ROLE_H2) &role_ops_h2, #endif #if defined(LWS_ROLE_H1) &role_ops_h1, #endif #if defined(LWS_ROLE_WS) &role_ops_ws, #endif #if defined(LWS_ROLE_DBUS) &role_ops_dbus, #endif #if defined(LWS_ROLE_RAW_PROXY) &role_ops_raw_proxy, #endif NULL }; const struct lws_event_loop_ops *available_event_libs[] = { #if defined(LWS_WITH_POLL) &event_loop_ops_poll, #endif #if defined(LWS_WITH_LIBUV) &event_loop_ops_uv, #endif #if defined(LWS_WITH_LIBEVENT) &event_loop_ops_event, #endif #if defined(LWS_WITH_LIBEV) &event_loop_ops_ev, #endif NULL }; #if defined(LWS_WITH_ABSTRACT) const struct lws_protocols *available_abstract_protocols[] = { #if defined(LWS_ROLE_RAW) &protocol_abs_client_raw_skt, #endif NULL }; #endif static const char * const mount_protocols[] = { "http://", "https://", "file://", "cgi://", ">http://", ">https://", "callback://" }; const struct lws_role_ops * lws_role_by_name(const char *name) { LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) if (!strcmp(ar->name, name)) return ar; LWS_FOR_EVERY_AVAILABLE_ROLE_END; if (!strcmp(name, role_ops_raw_skt.name)) return &role_ops_raw_skt; if (!strcmp(name, role_ops_raw_file.name)) return &role_ops_raw_file; return NULL; } int lws_role_call_alpn_negotiated(struct lws *wsi, const char *alpn) { #if defined(LWS_WITH_TLS) if (!alpn) return 0; lwsl_info("%s: '%s'\n", __func__, alpn); LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) if (ar->alpn && !strcmp(ar->alpn, alpn) && ar->alpn_negotiated) return ar->alpn_negotiated(wsi, alpn); LWS_FOR_EVERY_AVAILABLE_ROLE_END; #endif return 0; } //#if !defined(LWS_WITHOUT_SERVER) int lws_role_call_adoption_bind(struct lws *wsi, int type, const char *prot) { int n; /* * if the vhost is told to bind accepted sockets to a given role, * then look it up by name and try to bind to the specific role. */ if (lws_check_opt(wsi->vhost->options, LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG) && wsi->vhost->listen_accept_role) { const struct lws_role_ops *role = lws_role_by_name(wsi->vhost->listen_accept_role); if (!prot) prot = wsi->vhost->listen_accept_protocol; if (!role) lwsl_err("%s: can't find role '%s'\n", __func__, wsi->vhost->listen_accept_role); if (role && role->adoption_bind) { n = role->adoption_bind(wsi, type, prot); if (n < 0) return -1; if (n) /* did the bind */ return 0; } if (type & _LWS_ADOPT_FINISH) { lwsl_debug("%s: leaving bound to role %s\n", __func__, wsi->role_ops->name); return 0; } lwsl_warn("%s: adoption bind to role '%s', " "protocol '%s', type 0x%x, failed\n", __func__, wsi->vhost->listen_accept_role, prot, type); } /* * Otherwise ask each of the roles in order of preference if they * want to bind to this accepted socket */ LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) if (ar->adoption_bind && ar->adoption_bind(wsi, type, prot)) return 0; LWS_FOR_EVERY_AVAILABLE_ROLE_END; /* fall back to raw socket role if, eg, h1 not configured */ if (role_ops_raw_skt.adoption_bind && role_ops_raw_skt.adoption_bind(wsi, type, prot)) return 0; /* fall back to raw file role if, eg, h1 not configured */ if (role_ops_raw_file.adoption_bind && role_ops_raw_file.adoption_bind(wsi, type, prot)) return 0; return 1; } //#endif #if !defined(LWS_WITHOUT_CLIENT) int lws_role_call_client_bind(struct lws *wsi, const struct lws_client_connect_info *i) { LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) if (ar->client_bind) { int m = ar->client_bind(wsi, i); if (m < 0) return m; if (m) return 0; } LWS_FOR_EVERY_AVAILABLE_ROLE_END; /* fall back to raw socket role if, eg, h1 not configured */ if (role_ops_raw_skt.client_bind && role_ops_raw_skt.client_bind(wsi, i)) return 0; return 1; } #endif LWS_VISIBLE void * lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot, int size) { int n = 0; /* allocate the vh priv array only on demand */ if (!vhost->protocol_vh_privs) { vhost->protocol_vh_privs = (void **)lws_zalloc( vhost->count_protocols * sizeof(void *), "protocol_vh_privs"); if (!vhost->protocol_vh_privs) return NULL; } while (n < vhost->count_protocols && &vhost->protocols[n] != prot) n++; if (n == vhost->count_protocols) { n = 0; while (n < vhost->count_protocols && strcmp(vhost->protocols[n].name, prot->name)) n++; if (n == vhost->count_protocols) return NULL; } vhost->protocol_vh_privs[n] = lws_zalloc(size, "vh priv"); return vhost->protocol_vh_privs[n]; } LWS_VISIBLE void * lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot) { int n = 0; if (!vhost || !vhost->protocol_vh_privs || !prot) return NULL; while (n < vhost->count_protocols && &vhost->protocols[n] != prot) n++; if (n == vhost->count_protocols) { n = 0; while (n < vhost->count_protocols && strcmp(vhost->protocols[n].name, prot->name)) n++; if (n == vhost->count_protocols) { lwsl_err("%s: unknown protocol %p\n", __func__, prot); return NULL; } } return vhost->protocol_vh_privs[n]; } const struct lws_protocol_vhost_options * lws_vhost_protocol_options(struct lws_vhost *vh, const char *name) { const struct lws_protocol_vhost_options *pvo = vh->pvo; if (!name) return NULL; while (pvo) { if (!strcmp(pvo->name, name)) return pvo; pvo = pvo->next; } return NULL; } /* * inform every vhost that hasn't already done it, that * his protocols are initializing */ LWS_VISIBLE int lws_protocol_init(struct lws_context *context) { struct lws_vhost *vh = context->vhost_list; const struct lws_protocol_vhost_options *pvo, *pvo1; struct lws wsi; int n, any = 0; if (context->doing_protocol_init) return 0; context->doing_protocol_init = 1; memset(&wsi, 0, sizeof(wsi)); wsi.context = context; lwsl_info("%s\n", __func__); while (vh) { wsi.vhost = vh; /* only do the protocol init once for a given vhost */ if (vh->created_vhost_protocols || (vh->options & LWS_SERVER_OPTION_SKIP_PROTOCOL_INIT)) goto next; /* initialize supported protocols on this vhost */ for (n = 0; n < vh->count_protocols; n++) { wsi.protocol = &vh->protocols[n]; if (!vh->protocols[n].name) continue; pvo = lws_vhost_protocol_options(vh, vh->protocols[n].name); if (pvo) { /* * linked list of options specific to * vh + protocol */ pvo1 = pvo; pvo = pvo1->options; while (pvo) { lwsl_debug( " vhost \"%s\", " "protocol \"%s\", " "option \"%s\"\n", vh->name, vh->protocols[n].name, pvo->name); if (!strcmp(pvo->name, "default")) { lwsl_info("Setting default " "protocol for vh %s to %s\n", vh->name, vh->protocols[n].name); vh->default_protocol_index = n; } if (!strcmp(pvo->name, "raw")) { lwsl_info("Setting raw " "protocol for vh %s to %s\n", vh->name, vh->protocols[n].name); vh->raw_protocol_index = n; } pvo = pvo->next; } pvo = pvo1->options; } #if defined(LWS_WITH_TLS) any |= !!vh->tls.ssl_ctx; #endif /* * inform all the protocols that they are doing their * one-time initialization if they want to. * * NOTE the wsi is all zeros except for the context, vh * + protocol ptrs so lws_get_context(wsi) etc can work */ if (vh->protocols[n].callback(&wsi, LWS_CALLBACK_PROTOCOL_INIT, NULL, (void *)pvo, 0)) { if (vh->protocol_vh_privs[n]) { lws_free(vh->protocol_vh_privs[n]); vh->protocol_vh_privs[n] = NULL; } lwsl_err("%s: protocol %s failed init\n", __func__, vh->protocols[n].name); return 1; } } vh->created_vhost_protocols = 1; next: vh = vh->vhost_next; } context->doing_protocol_init = 0; if (!context->protocol_init_done && lws_finalize_startup(context)) return 1; context->protocol_init_done = 1; if (any) lws_tls_check_all_cert_lifetimes(context); return 0; } /* list of supported protocols and callbacks */ static const struct lws_protocols protocols_dummy[] = { /* first protocol must always be HTTP handler */ { "http-only", /* name */ lws_callback_http_dummy, /* callback */ 0, /* per_session_data_size */ 0, /* rx_buffer_size */ 0, /* id */ NULL, /* user */ 0 /* tx_packet_size */ }, /* * the other protocols are provided by lws plugins */ { NULL, NULL, 0, 0, 0, NULL, 0} /* terminator */ }; #ifdef LWS_PLAT_OPTEE #undef LWS_HAVE_GETENV #endif LWS_VISIBLE struct lws_vhost * lws_create_vhost(struct lws_context *context, const struct lws_context_creation_info *info) { struct lws_vhost *vh = lws_zalloc(sizeof(*vh), "create vhost"), **vh1 = &context->vhost_list; const struct lws_http_mount *mounts; const struct lws_protocols *pcols = info->protocols; #ifdef LWS_WITH_PLUGINS struct lws_plugin *plugin = context->plugin_list; #endif struct lws_protocols *lwsp; int m, f = !info->pvo, fx = 0, abs_pcol_count = 0; char buf[96]; #if !defined(LWS_WITHOUT_CLIENT) && defined(LWS_HAVE_GETENV) char *p; #endif int n; if (!vh) return NULL; #if LWS_MAX_SMP > 1 pthread_mutex_init(&vh->lock, NULL); #endif if (!pcols && !info->pprotocols) pcols = &protocols_dummy[0]; vh->context = context; if (!info->vhost_name) vh->name = "default"; else vh->name = info->vhost_name; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) vh->http.error_document_404 = info->error_document_404; #endif if (info->options & LWS_SERVER_OPTION_ONLY_RAW) lwsl_info("%s set to only support RAW\n", vh->name); vh->iface = info->iface; #if !defined(LWS_WITH_ESP32) && \ !defined(OPTEE_TA) && !defined(WIN32) vh->bind_iface = info->bind_iface; #endif /* * let's figure out how many protocols the user is handing us, using the * old or new way depending on what he gave us */ if (!pcols) for (vh->count_protocols = 0; info->pprotocols[vh->count_protocols]; vh->count_protocols++) ; else for (vh->count_protocols = 0; pcols[vh->count_protocols].callback; vh->count_protocols++) ; vh->options = info->options; vh->pvo = info->pvo; vh->headers = info->headers; vh->user = info->user; vh->finalize = info->finalize; vh->finalize_arg = info->finalize_arg; vh->listen_accept_role = info->listen_accept_role; vh->listen_accept_protocol = info->listen_accept_protocol; vh->unix_socket_perms = info->unix_socket_perms; LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) if (ar->init_vhost) if (ar->init_vhost(vh, info)) return NULL; LWS_FOR_EVERY_AVAILABLE_ROLE_END; if (info->keepalive_timeout) vh->keepalive_timeout = info->keepalive_timeout; else vh->keepalive_timeout = 5; if (info->timeout_secs_ah_idle) vh->timeout_secs_ah_idle = info->timeout_secs_ah_idle; else vh->timeout_secs_ah_idle = 10; #if defined(LWS_WITH_TLS) vh->tls.alpn = info->alpn; vh->tls.ssl_info_event_mask = info->ssl_info_event_mask; if (info->ecdh_curve) lws_strncpy(vh->tls.ecdh_curve, info->ecdh_curve, sizeof(vh->tls.ecdh_curve)); /* carefully allocate and take a copy of cert + key paths if present */ n = 0; if (info->ssl_cert_filepath) n += (int)strlen(info->ssl_cert_filepath) + 1; if (info->ssl_private_key_filepath) n += (int)strlen(info->ssl_private_key_filepath) + 1; if (n) { vh->tls.key_path = vh->tls.alloc_cert_path = lws_malloc(n, "vh paths"); if (info->ssl_cert_filepath) { n = (int)strlen(info->ssl_cert_filepath) + 1; memcpy(vh->tls.alloc_cert_path, info->ssl_cert_filepath, n); vh->tls.key_path += n; } if (info->ssl_private_key_filepath) memcpy(vh->tls.key_path, info->ssl_private_key_filepath, strlen(info->ssl_private_key_filepath) + 1); } #endif #if defined(LWS_WITH_HTTP_PROXY) && defined(LWS_ROLE_WS) fx = 1; #endif #if defined(LWS_WITH_ABSTRACT) abs_pcol_count = (int)LWS_ARRAY_SIZE(available_abstract_protocols) - 1; #endif /* * give the vhost a unified list of protocols including: * * - internal, abstracted ones * - the ones that came from plugins * - his user protocols */ lwsp = lws_zalloc(sizeof(struct lws_protocols) * (vh->count_protocols + abs_pcol_count + context->plugin_protocol_count + fx + 1), "vhost-specific plugin table"); if (!lwsp) { lwsl_err("OOM\n"); return NULL; } /* * 1: user protocols (from pprotocols or protocols) */ m = vh->count_protocols; if (!pcols) { for (n = 0; n < m; n++) memcpy(&lwsp[n], info->pprotocols[n], sizeof(lwsp[0])); } else memcpy(lwsp, pcols, sizeof(struct lws_protocols) * m); /* * 2: abstract protocols */ #if defined(LWS_WITH_ABSTRACT) for (n = 0; n < abs_pcol_count; n++) { memcpy(&lwsp[m++], available_abstract_protocols[n], sizeof(*lwsp)); vh->count_protocols++; } #endif /* * 3: For compatibility, all protocols enabled on vhost if only * the default vhost exists. Otherwise only vhosts who ask * for a protocol get it enabled. */ if (context->options & LWS_SERVER_OPTION_EXPLICIT_VHOSTS) f = 0; (void)f; #ifdef LWS_WITH_PLUGINS if (plugin) { while (plugin) { for (n = 0; n < plugin->caps.count_protocols; n++) { /* * for compatibility's sake, no pvo implies * allow all protocols */ if (f || lws_vhost_protocol_options(vh, plugin->caps.protocols[n].name)) { memcpy(&lwsp[m], &plugin->caps.protocols[n], sizeof(struct lws_protocols)); m++; vh->count_protocols++; } } plugin = plugin->list; } } #endif #if defined(LWS_WITH_HTTP_PROXY) && defined(LWS_ROLE_WS) memcpy(&lwsp[m++], &lws_ws_proxy, sizeof(*lwsp)); vh->count_protocols++; #endif vh->protocols = lwsp; vh->allocated_vhost_protocols = 1; vh->same_vh_protocol_owner = (struct lws_dll2_owner *) lws_zalloc(sizeof(struct lws_dll2_owner) * vh->count_protocols, "same vh list"); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) vh->http.mount_list = info->mounts; #endif #ifdef LWS_WITH_UNIX_SOCK if (LWS_UNIX_SOCK_ENABLED(vh)) { lwsl_info("Creating Vhost '%s' path \"%s\", %d protocols\n", vh->name, vh->iface, vh->count_protocols); } else #endif { switch(info->port) { case CONTEXT_PORT_NO_LISTEN: strcpy(buf, "(serving disabled)"); break; case CONTEXT_PORT_NO_LISTEN_SERVER: strcpy(buf, "(no listener)"); break; default: lws_snprintf(buf, sizeof(buf), "port %u", info->port); break; } lwsl_info("Creating Vhost '%s' %s, %d protocols, IPv6 %s\n", vh->name, buf, vh->count_protocols, LWS_IPV6_ENABLED(vh) ? "on" : "off"); } mounts = info->mounts; while (mounts) { (void)mount_protocols[0]; lwsl_info(" mounting %s%s to %s\n", mount_protocols[mounts->origin_protocol], mounts->origin, mounts->mountpoint); mounts = mounts->mount_next; } vh->listen_port = info->port; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) vh->http.http_proxy_port = 0; vh->http.http_proxy_address[0] = '\0'; #endif #if defined(LWS_WITH_SOCKS5) vh->socks_proxy_port = 0; vh->socks_proxy_address[0] = '\0'; #endif #if !defined(LWS_WITHOUT_CLIENT) /* either use proxy from info, or try get it from env var */ #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) /* http proxy */ if (info->http_proxy_address) { /* override for backwards compatibility */ if (info->http_proxy_port) vh->http.http_proxy_port = info->http_proxy_port; lws_set_proxy(vh, info->http_proxy_address); } else #endif { #ifdef LWS_HAVE_GETENV p = getenv("http_proxy"); if (p) { lws_strncpy(buf, p, sizeof(buf)); lws_set_proxy(vh, buf); } #endif } #endif #if defined(LWS_WITH_SOCKS5) /* socks proxy */ if (info->socks_proxy_address) { /* override for backwards compatibility */ if (info->socks_proxy_port) vh->socks_proxy_port = info->socks_proxy_port; lws_set_socks(vh, info->socks_proxy_address); } else { #ifdef LWS_HAVE_GETENV p = getenv("socks_proxy"); if (p && strlen(p) > 0 && strlen(p) < 95) lws_set_socks(vh, p); #endif } #endif vh->ka_time = info->ka_time; vh->ka_interval = info->ka_interval; vh->ka_probes = info->ka_probes; if (vh->options & LWS_SERVER_OPTION_STS) lwsl_notice(" STS enabled\n"); #ifdef LWS_WITH_ACCESS_LOG if (info->log_filepath) { vh->log_fd = lws_open(info->log_filepath, O_CREAT | O_APPEND | O_RDWR, 0600); if (vh->log_fd == (int)LWS_INVALID_FILE) { lwsl_err("unable to open log filepath %s\n", info->log_filepath); goto bail; } #ifndef WIN32 if (context->uid != -1) if (chown(info->log_filepath, context->uid, context->gid) == -1) lwsl_err("unable to chown log file %s\n", info->log_filepath); #endif } else vh->log_fd = (int)LWS_INVALID_FILE; #endif if (lws_context_init_server_ssl(info, vh)) { lwsl_err("%s: lws_context_init_server_ssl failed\n", __func__); goto bail1; } if (lws_context_init_client_ssl(info, vh)) { lwsl_err("%s: lws_context_init_client_ssl failed\n", __func__); goto bail1; } lws_context_lock(context, "create_vhost"); n = _lws_vhost_init_server(info, vh); lws_context_unlock(context); if (n < 0) { lwsl_err("init server failed\n"); goto bail1; } while (1) { if (!(*vh1)) { *vh1 = vh; break; } vh1 = &(*vh1)->vhost_next; }; /* for the case we are adding a vhost much later, after server init */ if (context->protocol_init_done) if (lws_protocol_init(context)) { lwsl_err("%s: lws_protocol_init failed\n", __func__); goto bail1; } return vh; bail1: lws_vhost_destroy(vh); return NULL; #ifdef LWS_WITH_ACCESS_LOG bail: lws_free(vh); #endif return NULL; } LWS_VISIBLE int lws_init_vhost_client_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost) { struct lws_context_creation_info i; memcpy(&i, info, sizeof(i)); i.port = CONTEXT_PORT_NO_LISTEN; return lws_context_init_client_ssl(&i, vhost); } LWS_VISIBLE void lws_cancel_service_pt(struct lws *wsi) { lws_plat_pipe_signal(wsi); } LWS_VISIBLE void lws_cancel_service(struct lws_context *context) { struct lws_context_per_thread *pt = &context->pt[0]; short m = context->count_threads; if (context->being_destroyed1) return; lwsl_info("%s\n", __func__); while (m--) { if (pt->pipe_wsi) lws_plat_pipe_signal(pt->pipe_wsi); pt++; } } int lws_create_event_pipes(struct lws_context *context) { struct lws *wsi; int n; /* * Create the pt event pipes... these are unique in that they are * not bound to a vhost or protocol (both are NULL) */ for (n = 0; n < context->count_threads; n++) { if (context->pt[n].pipe_wsi) continue; wsi = lws_zalloc(sizeof(*wsi), "event pipe wsi"); if (!wsi) { lwsl_err("%s: Out of mem\n", __func__); return 1; } wsi->context = context; lws_role_transition(wsi, 0, LRS_UNCONNECTED, &role_ops_pipe); wsi->protocol = NULL; wsi->tsi = n; wsi->vhost = NULL; wsi->event_pipe = 1; wsi->desc.sockfd = LWS_SOCK_INVALID; context->pt[n].pipe_wsi = wsi; context->count_wsi_allocated++; if (lws_plat_pipe_create(wsi)) /* * platform code returns 0 if it actually created pipes * and initialized pt->dummy_pipe_fds[]. If it used * some other mechanism outside of signaling in the * normal event loop, we skip treating the pipe as * related to dummy_pipe_fds[], adding it to the fds, * etc. */ continue; wsi->desc.sockfd = context->pt[n].dummy_pipe_fds[0]; lwsl_debug("event pipe fd %d\n", wsi->desc.sockfd); #if !defined(LWS_AMAZON_RTOS) if (context->event_loop_ops->accept) if (context->event_loop_ops->accept(wsi)) return 1; #endif if (__insert_wsi_socket_into_fds(context, wsi)) return 1; } return 0; } void lws_destroy_event_pipe(struct lws *wsi) { lwsl_info("%s\n", __func__); __remove_wsi_socket_from_fds(wsi); if (wsi->context->event_loop_ops->wsi_logical_close) { wsi->context->event_loop_ops->wsi_logical_close(wsi); lws_plat_pipe_close(wsi); return; } if (wsi->context->event_loop_ops->destroy_wsi) wsi->context->event_loop_ops->destroy_wsi(wsi); lws_plat_pipe_close(wsi); wsi->context->count_wsi_allocated--; lws_free(wsi); } void lws_vhost_destroy1(struct lws_vhost *vh) { struct lws_context *context = vh->context; lwsl_info("%s\n", __func__); lws_context_lock(context, "vhost destroy 1"); /* ---------- context { */ if (vh->being_destroyed) goto out; lws_vhost_lock(vh); /* -------------- vh { */ vh->being_destroyed = 1; #if defined(LWS_WITH_NETWORK) /* * PHASE 1: take down or reassign any listen wsi * * Are there other vhosts that are piggybacking on our listen socket? * If so we need to hand the listen socket off to one of the others * so it will remain open. * * If not, leave it attached to the closing vhost, the vh being marked * being_destroyed will defeat any service and it will get closed in * later phases. */ if (vh->lserv_wsi) lws_start_foreach_ll(struct lws_vhost *, v, context->vhost_list) { if (v != vh && !v->being_destroyed && v->listen_port == vh->listen_port && ((!v->iface && !vh->iface) || (v->iface && vh->iface && !strcmp(v->iface, vh->iface)))) { /* * this can only be a listen wsi, which is * restricted... it has no protocol or other * bindings or states. So we can simply * swap it to a vhost that has the same * iface + port, but is not closing. */ assert(v->lserv_wsi == NULL); v->lserv_wsi = vh->lserv_wsi; lwsl_notice("%s: listen skt from %s to %s\n", __func__, vh->name, v->name); if (v->lserv_wsi) { lws_vhost_unbind_wsi(vh->lserv_wsi); lws_vhost_bind_wsi(v, v->lserv_wsi); } break; } } lws_end_foreach_ll(v, vhost_next); #endif lws_vhost_unlock(vh); /* } vh -------------- */ /* * lws_check_deferred_free() will notice there is a vhost that is * marked for destruction during the next 1s, for all tsi. * * It will start closing all wsi on this vhost. When the last wsi * is closed, it will trigger lws_vhost_destroy2() */ out: lws_context_unlock(context); /* --------------------------- context { */ } #if defined(LWS_WITH_ABSTRACT) static int destroy_ais(struct lws_dll2 *d, void *user) { lws_abs_t *ai = lws_container_of(d, lws_abs_t, abstract_instances); lws_abs_destroy_instance(&ai); return 0; } #endif void __lws_vhost_destroy2(struct lws_vhost *vh) { const struct lws_protocols *protocol = NULL; struct lws_context *context = vh->context; struct lws_deferred_free *df; struct lws wsi; int n; /* * destroy any pending timed events */ while (vh->timed_vh_protocol_list) __lws_timed_callback_remove(vh, vh->timed_vh_protocol_list); /* * let the protocols destroy the per-vhost protocol objects */ memset(&wsi, 0, sizeof(wsi)); wsi.context = vh->context; wsi.vhost = vh; /* not a real bound wsi */ protocol = vh->protocols; if (protocol && vh->created_vhost_protocols) { n = 0; while (n < vh->count_protocols) { wsi.protocol = protocol; if (protocol->callback) protocol->callback(&wsi, LWS_CALLBACK_PROTOCOL_DESTROY, NULL, NULL, 0); protocol++; n++; } } /* * remove vhost from context list of vhosts */ lws_start_foreach_llp(struct lws_vhost **, pv, context->vhost_list) { if (*pv == vh) { *pv = vh->vhost_next; break; } } lws_end_foreach_llp(pv, vhost_next); /* add ourselves to the pending destruction list */ vh->vhost_next = vh->context->vhost_pending_destruction_list; vh->context->vhost_pending_destruction_list = vh; lwsl_info("%s: %p\n", __func__, vh); /* if we are still on deferred free list, remove ourselves */ lws_start_foreach_llp(struct lws_deferred_free **, pdf, context->deferred_free_list) { if ((*pdf)->payload == vh) { df = *pdf; *pdf = df->next; lws_free(df); break; } } lws_end_foreach_llp(pdf, next); /* remove ourselves from the pending destruction list */ lws_start_foreach_llp(struct lws_vhost **, pv, context->vhost_pending_destruction_list) { if ((*pv) == vh) { *pv = (*pv)->vhost_next; break; } } lws_end_foreach_llp(pv, vhost_next); /* * Free all the allocations associated with the vhost */ protocol = vh->protocols; if (protocol) { n = 0; while (n < vh->count_protocols) { if (vh->protocol_vh_privs && vh->protocol_vh_privs[n]) { lws_free(vh->protocol_vh_privs[n]); vh->protocol_vh_privs[n] = NULL; } protocol++; n++; } } if (vh->protocol_vh_privs) lws_free(vh->protocol_vh_privs); lws_ssl_SSL_CTX_destroy(vh); lws_free(vh->same_vh_protocol_owner); if (context->plugin_list || (context->options & LWS_SERVER_OPTION_EXPLICIT_VHOSTS) || vh->allocated_vhost_protocols) lws_free((void *)vh->protocols); #if defined(LWS_WITH_NETWORK) LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) if (ar->destroy_vhost) ar->destroy_vhost(vh); LWS_FOR_EVERY_AVAILABLE_ROLE_END; #endif #ifdef LWS_WITH_ACCESS_LOG if (vh->log_fd != (int)LWS_INVALID_FILE) close(vh->log_fd); #endif #if defined (LWS_WITH_TLS) lws_free_set_NULL(vh->tls.alloc_cert_path); #endif #if LWS_MAX_SMP > 1 pthread_mutex_destroy(&vh->lock); #endif #if defined(LWS_WITH_UNIX_SOCK) if (LWS_UNIX_SOCK_ENABLED(vh)) { n = unlink(vh->iface); if (n) lwsl_info("Closing unix socket %s: errno %d\n", vh->iface, errno); } #endif /* * although async event callbacks may still come for wsi handles with * pending close in the case of asycn event library like libuv, * they do not refer to the vhost. So it's safe to free. */ if (vh->finalize) vh->finalize(vh, vh->finalize_arg); #if defined(LWS_WITH_ABSTRACT) /* * abstract instances */ lws_dll2_foreach_safe(&vh->abstract_instances_owner, NULL, destroy_ais); #endif lwsl_info(" %s: Freeing vhost %p\n", __func__, vh); memset(vh, 0, sizeof(*vh)); lws_free(vh); } /* * each service thread calls this once a second or so */ int lws_check_deferred_free(struct lws_context *context, int tsi, int force) { struct lws_context_per_thread *pt; int n; /* * If we see a vhost is being destroyed, forcibly close every wsi on * this tsi associated with this vhost. That will include the listen * socket if it is still associated with the closing vhost. * * For SMP, we do this once per tsi per destroyed vhost. The reference * counting on the vhost as the bound wsi close will notice that there * are no bound wsi left, that vhost destruction can complete, * and perform it. It doesn't matter which service thread does that * because there is nothing left using the vhost to conflict. */ lws_context_lock(context, "check deferred free"); /* ------ context { */ lws_start_foreach_ll_safe(struct lws_vhost *, v, context->vhost_list, vhost_next) { if (v->being_destroyed #if LWS_MAX_SMP > 1 && !v->close_flow_vs_tsi[tsi] #endif ) { pt = &context->pt[tsi]; lws_pt_lock(pt, "vhost removal"); /* -------------- pt { */ #if LWS_MAX_SMP > 1 v->close_flow_vs_tsi[tsi] = 1; #endif for (n = 0; (unsigned int)n < pt->fds_count; n++) { struct lws *wsi = wsi_from_fd(context, pt->fds[n].fd); if (!wsi) continue; if (wsi->vhost != v) continue; __lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY, "vh destroy" /* no protocol close */); n--; } lws_pt_unlock(pt); /* } pt -------------- */ } } lws_end_foreach_ll_safe(v); lws_context_unlock(context); /* } context ------------------- */ return 0; } LWS_VISIBLE void lws_vhost_destroy(struct lws_vhost *vh) { struct lws_deferred_free *df = lws_malloc(sizeof(*df), "deferred free"); struct lws_context *context = vh->context; if (!df) return; lws_context_lock(context, __func__); /* ------ context { */ lws_vhost_destroy1(vh); if (!vh->count_bound_wsi) { /* * After listen handoff, there are already no wsi bound to this * vhost by any pt: nothing can be servicing any wsi belonging * to it any more. * * Finalize the vh destruction immediately */ __lws_vhost_destroy2(vh); lws_free(df); goto out; } /* part 2 is deferred to allow all the handle closes to complete */ df->next = vh->context->deferred_free_list; df->deadline = lws_now_secs(); df->payload = vh; vh->context->deferred_free_list = df; out: lws_context_unlock(context); /* } context ------------------- */ } LWS_EXTERN void * lws_vhost_user(struct lws_vhost *vhost) { return vhost->user; } LWS_VISIBLE LWS_EXTERN int lws_get_vhost_listen_port(struct lws_vhost *vhost) { return vhost->listen_port; } LWS_VISIBLE LWS_EXTERN void lws_context_deprecate(struct lws_context *context, lws_reload_func cb) { struct lws_vhost *vh = context->vhost_list, *vh1; /* * "deprecation" means disable the context from accepting any new * connections and free up listen sockets to be used by a replacement * context. * * Otherwise the deprecated context remains operational, until its * number of connected sockets falls to zero, when it is deleted. */ /* for each vhost, close his listen socket */ while (vh) { struct lws *wsi = vh->lserv_wsi; if (wsi) { wsi->socket_is_permanently_unusable = 1; lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "ctx deprecate"); wsi->context->deprecation_pending_listen_close_count++; /* * other vhosts can share the listen port, they * point to the same wsi. So zap those too. */ vh1 = context->vhost_list; while (vh1) { if (vh1->lserv_wsi == wsi) vh1->lserv_wsi = NULL; vh1 = vh1->vhost_next; } } vh = vh->vhost_next; } context->deprecated = 1; context->deprecation_cb = cb; } #if defined(LWS_WITH_NETWORK) struct lws_vhost * lws_get_vhost_by_name(struct lws_context *context, const char *name) { lws_start_foreach_ll(struct lws_vhost *, v, context->vhost_list) { if (!strcmp(v->name, name)) return v; } lws_end_foreach_ll(v, vhost_next); return NULL; } #endif libwebsockets-3.2.1/lib/core-net/wsi-timeout.c000066400000000000000000000170061357643561300213120ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" void __lws_wsi_remove_from_sul(struct lws *wsi) { //struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; //lwsl_notice("%s: wsi %p, to %p, hr %p\n", __func__, wsi, // &wsi->sul_timeout.list, &wsi->sul_hrtimer.list); // lws_dll2_describe(&pt->pt_sul_owner, "pre-remove"); lws_dll2_remove(&wsi->sul_timeout.list); lws_dll2_remove(&wsi->sul_hrtimer.list); // lws_dll2_describe(&pt->pt_sul_owner, "post-remove"); } /* * hrtimer */ static void lws_sul_hrtimer_cb(lws_sorted_usec_list_t *sul) { struct lws *wsi = lws_container_of(sul, struct lws, sul_hrtimer); if (wsi->protocol && wsi->protocol->callback(wsi, LWS_CALLBACK_TIMER, wsi->user_space, NULL, 0)) __lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "hrtimer cb errored"); } void __lws_set_timer_usecs(struct lws *wsi, lws_usec_t us) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; wsi->sul_hrtimer.cb = lws_sul_hrtimer_cb; __lws_sul_insert(&pt->pt_sul_owner, &wsi->sul_hrtimer, us); } LWS_VISIBLE void lws_set_timer_usecs(struct lws *wsi, lws_usec_t usecs) { __lws_set_timer_usecs(wsi, usecs); } /* * wsi timeout */ static void lws_sul_wsitimeout_cb(lws_sorted_usec_list_t *sul) { struct lws *wsi = lws_container_of(sul, struct lws, sul_timeout); struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; if (wsi->pending_timeout != PENDING_TIMEOUT_USER_OK) lws_stats_bump(pt, LWSSTATS_C_TIMEOUTS, 1); /* no need to log normal idle keepalive timeout */ // if (wsi->pending_timeout != PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE) #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) if (wsi->pending_timeout != PENDING_TIMEOUT_USER_OK) lwsl_info("wsi %p: TIMEDOUT WAITING on %d " "(did hdr %d, ah %p, wl %d)\n", (void *)wsi, wsi->pending_timeout, wsi->hdr_parsing_completed, wsi->http.ah, pt->http.ah_wait_list_length); #if defined(LWS_WITH_CGI) if (wsi->http.cgi) lwsl_notice("CGI timeout: %s\n", wsi->http.cgi->summary); #endif #else if (wsi->pending_timeout != PENDING_TIMEOUT_USER_OK) lwsl_info("wsi %p: TIMEDOUT WAITING on %d ", (void *)wsi, wsi->pending_timeout); #endif /* cgi timeout */ if (wsi->pending_timeout != PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE) /* * Since he failed a timeout, he already had a chance to * do something and was unable to... that includes * situations like half closed connections. So process * this "failed timeout" close as a violent death and * don't try to do protocol cleanup like flush partials. */ wsi->socket_is_permanently_unusable = 1; #if !defined(LWS_NO_CLIENT) if (lwsi_state(wsi) == LRS_WAITING_SSL) lws_inform_client_conn_fail(wsi, (void *)"Timed out waiting SSL", 21); #endif __lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "timeout"); } void __lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; wsi->sul_timeout.cb = lws_sul_wsitimeout_cb; __lws_sul_insert(&pt->pt_sul_owner, &wsi->sul_timeout, ((lws_usec_t)secs) * LWS_US_PER_SEC); lwsl_debug("%s: %p: %d secs, reason %d\n", __func__, wsi, secs, reason); wsi->pending_timeout = reason; } void lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; lws_pt_lock(pt, __func__); lws_dll2_remove(&wsi->sul_timeout.list); lws_pt_unlock(pt); if (!secs) return; if (secs == LWS_TO_KILL_SYNC) { lwsl_debug("synchronously killing %p\n", wsi); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "to sync kill"); return; } if (secs == LWS_TO_KILL_ASYNC) secs = 0; lws_pt_lock(pt, __func__); __lws_set_timeout(wsi, reason, secs); lws_pt_unlock(pt); } void lws_set_timeout_us(struct lws *wsi, enum pending_timeout reason, lws_usec_t us) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; lws_pt_lock(pt, __func__); lws_dll2_remove(&wsi->sul_timeout.list); lws_pt_unlock(pt); if (!us) return; lws_pt_lock(pt, __func__); __lws_sul_insert(&pt->pt_sul_owner, &wsi->sul_timeout, us); lwsl_notice("%s: %p: %llu us, reason %d\n", __func__, wsi, (unsigned long long)us, reason); wsi->pending_timeout = reason; lws_pt_unlock(pt); } /* requires context + vh lock */ int __lws_timed_callback_remove(struct lws_vhost *vh, struct lws_timed_vh_protocol *p) { lws_start_foreach_llp_safe(struct lws_timed_vh_protocol **, pt, vh->timed_vh_protocol_list, next) { if (*pt == p) { *pt = p->next; lws_dll2_remove(&p->sul.list); lws_free(p); return 0; } } lws_end_foreach_llp_safe(pt); return 1; } void lws_sul_timed_callback_vh_protocol_cb(lws_sorted_usec_list_t *sul) { struct lws_timed_vh_protocol *tvp = lws_container_of(sul, struct lws_timed_vh_protocol, sul); struct lws_context_per_thread *pt = &tvp->vhost->context->pt[tvp->tsi_req]; pt->fake_wsi->context = tvp->vhost->context; pt->fake_wsi->vhost = tvp->vhost; /* not a real bound wsi */ pt->fake_wsi->protocol = tvp->protocol; lwsl_debug("%s: timed cb: vh %s, protocol %s, reason %d\n", __func__, tvp->vhost->name, tvp->protocol->name, tvp->reason); tvp->protocol->callback(pt->fake_wsi, tvp->reason, NULL, NULL, 0); __lws_timed_callback_remove(tvp->vhost, tvp); } LWS_VISIBLE LWS_EXTERN int lws_timed_callback_vh_protocol_us(struct lws_vhost *vh, const struct lws_protocols *prot, int reason, lws_usec_t us) { struct lws_timed_vh_protocol *p = (struct lws_timed_vh_protocol *) lws_malloc(sizeof(*p), "timed_vh"); if (!p) return 1; memset(p, 0, sizeof(*p)); p->tsi_req = lws_pthread_self_to_tsi(vh->context); if (p->tsi_req < 0) /* not called from a service thread --> tsi 0 */ p->tsi_req = 0; lws_context_lock(vh->context, __func__); /* context ----------------- */ p->protocol = prot; p->reason = reason; p->vhost = vh; p->sul.cb = lws_sul_timed_callback_vh_protocol_cb; /* list is always at the very top of the sul */ __lws_sul_insert(&vh->context->pt[p->tsi_req].pt_sul_owner, (lws_sorted_usec_list_t *)&p->sul.list, us); // lwsl_notice("%s: %s.%s %d\n", __func__, vh->name, prot->name, secs); lws_vhost_lock(vh); /* vhost ---------------------------------------- */ p->next = vh->timed_vh_protocol_list; vh->timed_vh_protocol_list = p; lws_vhost_unlock(vh); /* -------------------------------------- vhost */ lws_context_unlock(vh->context); /* ------------------------- context */ return 0; } LWS_VISIBLE LWS_EXTERN int lws_timed_callback_vh_protocol(struct lws_vhost *vh, const struct lws_protocols *prot, int reason, int secs) { return lws_timed_callback_vh_protocol_us(vh, prot, reason, ((lws_usec_t)secs) * LWS_US_PER_SEC); } libwebsockets-3.2.1/lib/core-net/wsi.c000066400000000000000000000456431357643561300176360ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #if defined (_DEBUG) void lwsi_set_role(struct lws *wsi, lws_wsi_state_t role) { wsi->wsistate = (wsi->wsistate & (~LWSI_ROLE_MASK)) | role; lwsl_debug("lwsi_set_role(%p, 0x%lx)\n", wsi, (unsigned long)wsi->wsistate); } void lwsi_set_state(struct lws *wsi, lws_wsi_state_t lrs) { wsi->wsistate = (wsi->wsistate & (~LRS_MASK)) | lrs; lwsl_debug("lwsi_set_state(%p, 0x%lx)\n", wsi, (unsigned long)wsi->wsistate); } #endif void lws_vhost_bind_wsi(struct lws_vhost *vh, struct lws *wsi) { if (wsi->vhost == vh) return; lws_context_lock(vh->context, __func__); /* ---------- context { */ wsi->vhost = vh; vh->count_bound_wsi++; lws_context_unlock(vh->context); /* } context ---------- */ lwsl_info("%s: vh %s: count_bound_wsi %d\n", __func__, vh->name, vh->count_bound_wsi); assert(wsi->vhost->count_bound_wsi > 0); } void lws_vhost_unbind_wsi(struct lws *wsi) { if (!wsi->vhost) return; lws_context_lock(wsi->context, __func__); /* ---------- context { */ assert(wsi->vhost->count_bound_wsi > 0); wsi->vhost->count_bound_wsi--; lwsl_info("%s: vh %s: count_bound_wsi %d\n", __func__, wsi->vhost->name, wsi->vhost->count_bound_wsi); if (!wsi->vhost->count_bound_wsi && wsi->vhost->being_destroyed) { /* * We have closed all wsi that were bound to this vhost * by any pt: nothing can be servicing any wsi belonging * to it any more. * * Finalize the vh destruction */ __lws_vhost_destroy2(wsi->vhost); } wsi->vhost = NULL; lws_context_unlock(wsi->context); /* } context ---------- */ } LWS_VISIBLE struct lws * lws_get_network_wsi(struct lws *wsi) { if (!wsi) return NULL; #if defined(LWS_WITH_HTTP2) if (!wsi->http2_substream #if !defined(LWS_NO_CLIENT) && !wsi->client_h2_substream #endif ) return wsi; while (wsi->h2.parent_wsi) wsi = wsi->h2.parent_wsi; #endif return wsi; } LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name) { int n; for (n = 0; n < vh->count_protocols; n++) if (vh->protocols[n].name && !strcmp(name, vh->protocols[n].name)) return &vh->protocols[n]; return NULL; } LWS_VISIBLE int lws_callback_all_protocol(struct lws_context *context, const struct lws_protocols *protocol, int reason) { struct lws_context_per_thread *pt = &context->pt[0]; unsigned int n, m = context->count_threads; struct lws *wsi; while (m--) { for (n = 0; n < pt->fds_count; n++) { wsi = wsi_from_fd(context, pt->fds[n].fd); if (!wsi) continue; if (wsi->protocol == protocol) protocol->callback(wsi, reason, wsi->user_space, NULL, 0); } pt++; } return 0; } LWS_VISIBLE int lws_callback_all_protocol_vhost_args(struct lws_vhost *vh, const struct lws_protocols *protocol, int reason, void *argp, size_t len) { struct lws_context *context = vh->context; struct lws_context_per_thread *pt = &context->pt[0]; unsigned int n, m = context->count_threads; struct lws *wsi; while (m--) { for (n = 0; n < pt->fds_count; n++) { wsi = wsi_from_fd(context, pt->fds[n].fd); if (!wsi) continue; if (wsi->vhost == vh && (wsi->protocol == protocol || !protocol)) wsi->protocol->callback(wsi, reason, wsi->user_space, argp, len); } pt++; } return 0; } LWS_VISIBLE int lws_callback_all_protocol_vhost(struct lws_vhost *vh, const struct lws_protocols *protocol, int reason) { return lws_callback_all_protocol_vhost_args(vh, protocol, reason, NULL, 0); } LWS_VISIBLE LWS_EXTERN int lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, int len) { int n; for (n = 0; n < wsi->vhost->count_protocols; n++) if (wsi->vhost->protocols[n].callback(wsi, reason, NULL, in, len)) return 1; return 0; } LWS_VISIBLE LWS_EXTERN int lws_callback_vhost_protocols_vhost(struct lws_vhost *vh, int reason, void *in, size_t len) { int n; struct lws *wsi = lws_zalloc(sizeof(*wsi), "fake wsi"); if (!wsi) return 1; wsi->context = vh->context; lws_vhost_bind_wsi(vh, wsi); for (n = 0; n < wsi->vhost->count_protocols; n++) { wsi->protocol = &vh->protocols[n]; if (wsi->protocol->callback(wsi, reason, NULL, in, len)) { lws_free(wsi); return 1; } } lws_free(wsi); return 0; } LWS_VISIBLE int lws_rx_flow_control(struct lws *wsi, int _enable) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; int en = _enable; // h2 ignores rx flow control atm if (lwsi_role_h2(wsi) || wsi->http2_substream || lwsi_role_h2_ENCAPSULATION(wsi)) return 0; // !!! lwsl_info("%s: %p 0x%x\n", __func__, wsi, _enable); if (!(_enable & LWS_RXFLOW_REASON_APPLIES)) { /* * convert user bool style to bitmap style... in user simple * bool style _enable = 0 = flow control it, = 1 = allow rx */ en = LWS_RXFLOW_REASON_APPLIES | LWS_RXFLOW_REASON_USER_BOOL; if (_enable & 1) en |= LWS_RXFLOW_REASON_APPLIES_ENABLE_BIT; } lws_pt_lock(pt, __func__); /* any bit set in rxflow_bitmap DISABLEs rxflow control */ if (en & LWS_RXFLOW_REASON_APPLIES_ENABLE_BIT) wsi->rxflow_bitmap &= ~(en & 0xff); else wsi->rxflow_bitmap |= en & 0xff; if ((LWS_RXFLOW_PENDING_CHANGE | (!wsi->rxflow_bitmap)) == wsi->rxflow_change_to) goto skip; wsi->rxflow_change_to = LWS_RXFLOW_PENDING_CHANGE | (!wsi->rxflow_bitmap); lwsl_info("%s: %p: bitmap 0x%x: en 0x%x, ch 0x%x\n", __func__, wsi, wsi->rxflow_bitmap, en, wsi->rxflow_change_to); if (_enable & LWS_RXFLOW_REASON_FLAG_PROCESS_NOW || !wsi->rxflow_will_be_applied) { en = __lws_rx_flow_control(wsi); lws_pt_unlock(pt); return en; } skip: lws_pt_unlock(pt); return 0; } LWS_VISIBLE void lws_rx_flow_allow_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol) { const struct lws_context_per_thread *pt = &context->pt[0]; struct lws *wsi; unsigned int n, m = context->count_threads; while (m--) { for (n = 0; n < pt->fds_count; n++) { wsi = wsi_from_fd(context, pt->fds[n].fd); if (!wsi) continue; if (wsi->protocol == protocol) lws_rx_flow_control(wsi, LWS_RXFLOW_ALLOW); } pt++; } } int user_callback_handle_rxflow(lws_callback_function callback_function, struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { int n; wsi->rxflow_will_be_applied = 1; n = callback_function(wsi, reason, user, in, len); wsi->rxflow_will_be_applied = 0; if (!n) n = __lws_rx_flow_control(wsi); return n; } LWS_EXTERN int __lws_rx_flow_control(struct lws *wsi) { struct lws *wsic = wsi->child_list; // h2 ignores rx flow control atm if (lwsi_role_h2(wsi) || wsi->http2_substream || lwsi_role_h2_ENCAPSULATION(wsi)) return 0; // !!! /* if he has children, do those if they were changed */ while (wsic) { if (wsic->rxflow_change_to & LWS_RXFLOW_PENDING_CHANGE) __lws_rx_flow_control(wsic); wsic = wsic->sibling_list; } /* there is no pending change */ if (!(wsi->rxflow_change_to & LWS_RXFLOW_PENDING_CHANGE)) return 0; /* stuff is still buffered, not ready to really accept new input */ if (lws_buflist_next_segment_len(&wsi->buflist, NULL)) { /* get ourselves called back to deal with stashed buffer */ lws_callback_on_writable(wsi); // return 0; } /* now the pending is cleared, we can change rxflow state */ wsi->rxflow_change_to &= ~LWS_RXFLOW_PENDING_CHANGE; lwsl_info("rxflow: wsi %p change_to %d\n", wsi, wsi->rxflow_change_to & LWS_RXFLOW_ALLOW); /* adjust the pollfd for this wsi */ if (wsi->rxflow_change_to & LWS_RXFLOW_ALLOW) { lwsl_info("%s: reenable POLLIN\n", __func__); // lws_buflist_describe(&wsi->buflist, NULL); if (__lws_change_pollfd(wsi, 0, LWS_POLLIN)) { lwsl_info("%s: fail\n", __func__); return -1; } } else if (__lws_change_pollfd(wsi, LWS_POLLIN, 0)) return -1; return 0; } LWS_VISIBLE const struct lws_protocols * lws_get_protocol(struct lws *wsi) { return wsi->protocol; } int lws_ensure_user_space(struct lws *wsi) { if (!wsi->protocol) return 0; /* allocate the per-connection user memory (if any) */ if (wsi->protocol->per_session_data_size && !wsi->user_space) { wsi->user_space = lws_zalloc( wsi->protocol->per_session_data_size, "user space"); if (wsi->user_space == NULL) { lwsl_err("%s: OOM\n", __func__); return 1; } } else lwsl_debug("%s: %p protocol pss %lu, user_space=%p\n", __func__, wsi, (long)wsi->protocol->per_session_data_size, wsi->user_space); return 0; } LWS_VISIBLE void * lws_adjust_protocol_psds(struct lws *wsi, size_t new_size) { ((struct lws_protocols *)lws_get_protocol(wsi))->per_session_data_size = new_size; if (lws_ensure_user_space(wsi)) return NULL; return wsi->user_space; } LWS_VISIBLE int lws_is_ssl(struct lws *wsi) { #if defined(LWS_WITH_TLS) return wsi->tls.use_ssl & LCCSCF_USE_SSL; #else (void)wsi; return 0; #endif } #if defined(LWS_WITH_TLS) && !defined(LWS_WITH_MBEDTLS) LWS_VISIBLE lws_tls_conn* lws_get_ssl(struct lws *wsi) { return wsi->tls.ssl; } #endif LWS_VISIBLE int lws_partial_buffered(struct lws *wsi) { return lws_has_buffered_out(wsi); } LWS_VISIBLE lws_fileofs_t lws_get_peer_write_allowance(struct lws *wsi) { if (!wsi->role_ops->tx_credit) return -1; return wsi->role_ops->tx_credit(wsi); } LWS_VISIBLE void lws_role_transition(struct lws *wsi, enum lwsi_role role, enum lwsi_state state, const struct lws_role_ops *ops) { #if defined(_DEBUG) const char *name = "(unset)"; #endif wsi->wsistate = role | state; if (ops) wsi->role_ops = ops; #if defined(_DEBUG) if (wsi->role_ops) name = wsi->role_ops->name; lwsl_debug("%s: %p: wsistate 0x%lx, ops %s\n", __func__, wsi, (unsigned long)wsi->wsistate, name); #endif } LWS_VISIBLE LWS_EXTERN int lws_parse_uri(char *p, const char **prot, const char **ads, int *port, const char **path) { const char *end; char unix_skt = 0; /* cut up the location into address, port and path */ *prot = p; while (*p && (*p != ':' || p[1] != '/' || p[2] != '/')) p++; if (!*p) { end = p; p = (char *)*prot; *prot = end; } else { *p = '\0'; p += 3; } if (*p == '+') /* unix skt */ unix_skt = 1; *ads = p; if (!strcmp(*prot, "http") || !strcmp(*prot, "ws")) *port = 80; else if (!strcmp(*prot, "https") || !strcmp(*prot, "wss")) *port = 443; if (*p == '[') { ++(*ads); while (*p && *p != ']') p++; if (*p) *p++ = '\0'; } else while (*p && *p != ':' && (unix_skt || *p != '/')) p++; if (*p == ':') { *p++ = '\0'; *port = atoi(p); while (*p && *p != '/') p++; } *path = "/"; if (*p) { *p++ = '\0'; if (*p) *path = p; } return 0; } /* ... */ LWS_VISIBLE LWS_EXTERN const char * lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len) { int n = 0, sl = (int)strlen(name); while (lws_hdr_copy_fragment(wsi, buf, len, WSI_TOKEN_HTTP_URI_ARGS, n) >= 0) { if (!strncmp(buf, name, sl)) return buf + sl; n++; } return NULL; } #if defined(LWS_WITHOUT_EXTENSIONS) /* we need to provide dummy callbacks for internal exts * so user code runs when faced with a lib compiled with * extensions disabled. */ LWS_VISIBLE int lws_extension_callback_pm_deflate(struct lws_context *context, const struct lws_extension *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len) { (void)context; (void)ext; (void)wsi; (void)reason; (void)user; (void)in; (void)len; return 0; } LWS_EXTERN int lws_set_extension_option(struct lws *wsi, const char *ext_name, const char *opt_name, const char *opt_val) { return -1; } #endif LWS_VISIBLE LWS_EXTERN int lws_is_cgi(struct lws *wsi) { #ifdef LWS_WITH_CGI return !!wsi->http.cgi; #else return 0; #endif } const struct lws_protocol_vhost_options * lws_pvo_search(const struct lws_protocol_vhost_options *pvo, const char *name) { while (pvo) { if (!strcmp(pvo->name, name)) break; pvo = pvo->next; } return pvo; } int lws_pvo_get_str(void *in, const char *name, const char **result) { const struct lws_protocol_vhost_options *pv = lws_pvo_search((const struct lws_protocol_vhost_options *)in, name); if (!pv) return 1; *result = (const char *)pv->value; return 0; } int lws_broadcast(struct lws_context_per_thread *pt, int reason, void *in, size_t len) { struct lws_vhost *v = pt->context->vhost_list; int n, ret = 0; pt->fake_wsi->context = pt->context; while (v) { const struct lws_protocols *p = v->protocols; pt->fake_wsi->vhost = v; /* not a real bound wsi */ for (n = 0; n < v->count_protocols; n++) { pt->fake_wsi->protocol = p; if (p->callback && p->callback(pt->fake_wsi, reason, NULL, in, len)) ret |= 1; p++; } v = v->vhost_next; } return ret; } LWS_VISIBLE LWS_EXTERN void * lws_wsi_user(struct lws *wsi) { return wsi->user_space; } LWS_VISIBLE LWS_EXTERN void lws_set_wsi_user(struct lws *wsi, void *data) { if (wsi->user_space_externally_allocated) wsi->user_space = data; else lwsl_err("%s: Cannot set internally-allocated user_space\n", __func__); } LWS_VISIBLE LWS_EXTERN struct lws * lws_get_parent(const struct lws *wsi) { return wsi->parent; } LWS_VISIBLE LWS_EXTERN struct lws * lws_get_child(const struct lws *wsi) { return wsi->child_list; } LWS_VISIBLE LWS_EXTERN void * lws_get_opaque_parent_data(const struct lws *wsi) { return wsi->opaque_parent_data; } LWS_VISIBLE LWS_EXTERN void lws_set_opaque_parent_data(struct lws *wsi, void *data) { wsi->opaque_parent_data = data; } LWS_VISIBLE LWS_EXTERN void * lws_get_opaque_user_data(const struct lws *wsi) { return wsi->opaque_user_data; } LWS_VISIBLE LWS_EXTERN void lws_set_opaque_user_data(struct lws *wsi, void *data) { wsi->opaque_user_data = data; } LWS_VISIBLE LWS_EXTERN int lws_get_child_pending_on_writable(const struct lws *wsi) { return wsi->parent_pending_cb_on_writable; } LWS_VISIBLE LWS_EXTERN void lws_clear_child_pending_on_writable(struct lws *wsi) { wsi->parent_pending_cb_on_writable = 0; } LWS_VISIBLE LWS_EXTERN const char * lws_get_vhost_name(struct lws_vhost *vhost) { return vhost->name; } LWS_VISIBLE LWS_EXTERN int lws_get_vhost_port(struct lws_vhost *vhost) { return vhost->listen_port; } LWS_VISIBLE LWS_EXTERN void * lws_get_vhost_user(struct lws_vhost *vhost) { return vhost->user; } LWS_VISIBLE LWS_EXTERN const char * lws_get_vhost_iface(struct lws_vhost *vhost) { return vhost->iface; } LWS_VISIBLE lws_sockfd_type lws_get_socket_fd(struct lws *wsi) { if (!wsi) return -1; return wsi->desc.sockfd; } LWS_VISIBLE struct lws_vhost * lws_vhost_get(struct lws *wsi) { return wsi->vhost; } LWS_VISIBLE struct lws_vhost * lws_get_vhost(struct lws *wsi) { return wsi->vhost; } LWS_VISIBLE const struct lws_protocols * lws_protocol_get(struct lws *wsi) { return wsi->protocol; } LWS_VISIBLE const struct lws_udp * lws_get_udp(const struct lws *wsi) { return wsi->udp; } LWS_VISIBLE LWS_EXTERN struct lws_context * lws_get_context(const struct lws *wsi) { return wsi->context; } #ifdef LWS_LATENCY void lws_latency(struct lws_context *context, struct lws *wsi, const char *action, int ret, int completed) { unsigned long long u; char buf[256]; u = lws_now_usecs(); if (!action) { wsi->latency_start = u; if (!wsi->action_start) wsi->action_start = u; return; } if (completed) { if (wsi->action_start == wsi->latency_start) sprintf(buf, "Completion first try lat %lluus: %p: ret %d: %s\n", u - wsi->latency_start, (void *)wsi, ret, action); else sprintf(buf, "Completion %lluus: lat %lluus: %p: ret %d: %s\n", u - wsi->action_start, u - wsi->latency_start, (void *)wsi, ret, action); wsi->action_start = 0; } else sprintf(buf, "lat %lluus: %p: ret %d: %s\n", u - wsi->latency_start, (void *)wsi, ret, action); if (u - wsi->latency_start > context->worst_latency) { context->worst_latency = u - wsi->latency_start; strcpy(context->worst_latency_info, buf); } lwsl_latency("%s", buf); } #endif LWS_VISIBLE int LWS_WARN_UNUSED_RESULT lws_raw_transaction_completed(struct lws *wsi) { if (lws_has_buffered_out(wsi)) { /* * ...so he tried to send something large, but it went out * as a partial, but he immediately called us to say he wants * to close the connection. * * Defer the close until the last part of the partial is sent. * */ lwsl_debug("%s: %p: deferring due to partial\n", __func__, wsi); wsi->close_when_buffered_out_drained = 1; lws_callback_on_writable(wsi); return 0; } return -1; } int lws_bind_protocol(struct lws *wsi, const struct lws_protocols *p, const char *reason) { // if (wsi->protocol == p) // return 0; const struct lws_protocols *vp = wsi->vhost->protocols, *vpo; if (wsi->protocol && wsi->protocol_bind_balance) { wsi->protocol->callback(wsi, wsi->role_ops->protocol_unbind_cb[!!lwsi_role_server(wsi)], wsi->user_space, (void *)reason, 0); wsi->protocol_bind_balance = 0; } if (!wsi->user_space_externally_allocated) lws_free_set_NULL(wsi->user_space); lws_same_vh_protocol_remove(wsi); wsi->protocol = p; if (!p) return 0; if (lws_ensure_user_space(wsi)) return 1; if (p > vp && p < &vp[wsi->vhost->count_protocols]) lws_same_vh_protocol_insert(wsi, (int)(p - vp)); else { int n = wsi->vhost->count_protocols; int hit = 0; vpo = vp; while (n--) { if (p->name && vp->name && !strcmp(p->name, vp->name)) { hit = 1; lws_same_vh_protocol_insert(wsi, (int)(vp - vpo)); break; } vp++; } if (!hit) lwsl_err("%s: %p is not in vhost '%s' protocols list\n", __func__, p, wsi->vhost->name); } if (wsi->protocol->callback(wsi, wsi->role_ops->protocol_bind_cb[ !!lwsi_role_server(wsi)], wsi->user_space, NULL, 0)) return 1; wsi->protocol_bind_balance = 1; return 0; } int lws_http_mark_sse(struct lws *wsi) { lws_http_headers_detach(wsi); lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); if (wsi->http2_substream) { struct lws *nwsi = lws_get_network_wsi(wsi); wsi->h2_stream_carries_sse = 1; nwsi->immortal_substream_count++; if (nwsi->immortal_substream_count == 1) lws_set_timeout(nwsi, NO_PENDING_TIMEOUT, 0); } return 0; } libwebsockets-3.2.1/lib/core/000077500000000000000000000000001357643561300160705ustar00rootroot00000000000000libwebsockets-3.2.1/lib/core/alloc.c000066400000000000000000000054051357643561300173320ustar00rootroot00000000000000#include "core/private.h" #if defined(LWS_HAVE_MALLOC_USABLE_SIZE) #include /* the heap is processwide */ static size_t allocated; #endif #if defined(LWS_PLAT_OPTEE) #define TEE_USER_MEM_HINT_NO_FILL_ZERO 0x80000000 #if defined (LWS_WITH_NETWORK) /* normal TA apis */ void *__attribute__((weak)) TEE_Malloc(uint32_t size, uint32_t hint) { return NULL; } void *__attribute__((weak)) TEE_Realloc(void *buffer, uint32_t newSize) { return NULL; } void __attribute__((weak)) TEE_Free(void *buffer) { } #else /* in-OP-TEE core apis */ void * TEE_Malloc(uint32_t size, uint32_t hint) { return malloc(size); } void * TEE_Realloc(void *buffer, uint32_t newSize) { return realloc(buffer, newSize); } void TEE_Free(void *buffer) { free(buffer); } #endif void *lws_realloc(void *ptr, size_t size, const char *reason) { return TEE_Realloc(ptr, size); } void *lws_malloc(size_t size, const char *reason) { return TEE_Malloc(size, TEE_USER_MEM_HINT_NO_FILL_ZERO); } void lws_free(void *p) { TEE_Free(p); } void *lws_zalloc(size_t size, const char *reason) { void *ptr = TEE_Malloc(size, TEE_USER_MEM_HINT_NO_FILL_ZERO); if (ptr) memset(ptr, 0, size); return ptr; } void lws_set_allocator(void *(*cb)(void *ptr, size_t size, const char *reason)) { (void)cb; } #else static void * _realloc(void *ptr, size_t size, const char *reason) { void *v; if (size) { #if defined(LWS_WITH_ESP32) lwsl_notice("%s: size %lu: %s (free heap %d)\n", __func__, #if defined(LWS_AMAZON_RTOS) (unsigned long)size, reason, (unsigned int)xPortGetFreeHeapSize() - (int)size); #else (unsigned long)size, reason, (unsigned int)esp_get_free_heap_size() - (int)size); #endif #else lwsl_debug("%s: size %lu: %s\n", __func__, (unsigned long)size, reason); #endif #if defined(LWS_HAVE_MALLOC_USABLE_SIZE) if (ptr) allocated -= malloc_usable_size(ptr); #endif #if defined(LWS_PLAT_OPTEE) v = (void *)TEE_Realloc(ptr, size); #else v = (void *)realloc(ptr, size); #endif #if defined(LWS_HAVE_MALLOC_USABLE_SIZE) allocated += malloc_usable_size(v); #endif return v; } if (ptr) { #if defined(LWS_HAVE_MALLOC_USABLE_SIZE) allocated -= malloc_usable_size(ptr); #endif free(ptr); } return NULL; } void *(*_lws_realloc)(void *ptr, size_t size, const char *reason) = _realloc; void *lws_realloc(void *ptr, size_t size, const char *reason) { return _lws_realloc(ptr, size, reason); } void *lws_zalloc(size_t size, const char *reason) { void *ptr = _lws_realloc(NULL, size, reason); if (ptr) memset(ptr, 0, size); return ptr; } void lws_set_allocator(void *(*cb)(void *ptr, size_t size, const char *reason)) { _lws_realloc = cb; } size_t lws_get_allocated_heap(void) { #if defined(LWS_HAVE_MALLOC_USABLE_SIZE) return allocated; #else return 0; #endif } #endif libwebsockets-3.2.1/lib/core/buflist.c000066400000000000000000000067501357643561300177140ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #ifdef LWS_HAVE_SYS_TYPES_H #include #endif /* lws_buflist */ int lws_buflist_append_segment(struct lws_buflist **head, const uint8_t *buf, size_t len) { struct lws_buflist *nbuf; int first = !*head; void *p = *head; int sanity = 1024; assert(buf); assert(len); /* append at the tail */ while (*head) { if (!--sanity) { lwsl_err("%s: buflist reached sanity limit\n", __func__); return -1; } if (*head == (*head)->next) { lwsl_err("%s: corrupt list points to self\n", __func__); return -1; } head = &((*head)->next); } (void)p; lwsl_info("%s: len %u first %d %p\n", __func__, (unsigned int)len, first, p); nbuf = (struct lws_buflist *)lws_malloc(sizeof(**head) + len, __func__); if (!nbuf) { lwsl_err("%s: OOM\n", __func__); return -1; } nbuf->len = len; nbuf->pos = 0; nbuf->next = NULL; p = (void *)nbuf->buf; memcpy(p, buf, len); *head = nbuf; return first; /* returns 1 if first segment just created */ } static int lws_buflist_destroy_segment(struct lws_buflist **head) { struct lws_buflist *old = *head; assert(*head); *head = old->next; old->next = NULL; lws_free(old); return !*head; /* returns 1 if last segment just destroyed */ } void lws_buflist_destroy_all_segments(struct lws_buflist **head) { struct lws_buflist *p = *head, *p1; while (p) { p1 = p->next; p->next = NULL; lws_free(p); p = p1; } *head = NULL; } size_t lws_buflist_next_segment_len(struct lws_buflist **head, uint8_t **buf) { if (!*head) { if (buf) *buf = NULL; return 0; } if (!(*head)->len && (*head)->next) lws_buflist_destroy_segment(head); if (!*head) { if (buf) *buf = NULL; return 0; } assert((*head)->pos < (*head)->len); if (buf) *buf = (*head)->buf + (*head)->pos; return (*head)->len - (*head)->pos; } int lws_buflist_use_segment(struct lws_buflist **head, size_t len) { assert(*head); assert(len); assert((*head)->pos + len <= (*head)->len); (*head)->pos += len; if ((*head)->pos == (*head)->len) lws_buflist_destroy_segment(head); if (!*head) return 0; return (int)((*head)->len - (*head)->pos); } void lws_buflist_describe(struct lws_buflist **head, void *id) { struct lws_buflist *old; int n = 0; if (*head == NULL) lwsl_notice("%p: buflist empty\n", id); while (*head) { lwsl_notice("%p: %d: %llu / %llu (%llu left)\n", id, n, (unsigned long long)(*head)->pos, (unsigned long long)(*head)->len, (unsigned long long)(*head)->len - (*head)->pos); old = *head; head = &((*head)->next); if (*head == old) { lwsl_err("%s: next points to self\n", __func__); break; } n++; } } libwebsockets-3.2.1/lib/core/context.c000066400000000000000000000564171357643561300177350ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #ifndef LWS_BUILD_HASH #define LWS_BUILD_HASH "unknown-build-hash" #endif static const char *library_version = LWS_LIBRARY_VERSION " " LWS_BUILD_HASH; /** * lws_get_library_version: get version and git hash library built from * * returns a const char * to a string like "1.1 178d78c" * representing the library version followed by the git head hash it * was built from */ LWS_VISIBLE const char * lws_get_library_version(void) { return library_version; } #if defined(LWS_WITH_STATS) static void lws_sul_stats_cb(lws_sorted_usec_list_t *sul) { struct lws_context_per_thread *pt = lws_container_of(sul, struct lws_context_per_thread, sul_stats); lws_stats_log_dump(pt->context); __lws_sul_insert(&pt->pt_sul_owner, &pt->sul_stats, 10 * LWS_US_PER_SEC); } #endif #if defined(LWS_WITH_PEER_LIMITS) static void lws_sul_peer_limits_cb(lws_sorted_usec_list_t *sul) { struct lws_context_per_thread *pt = lws_container_of(sul, struct lws_context_per_thread, sul_peer_limits); lws_peer_cull_peer_wait_list(pt->context); __lws_sul_insert(&pt->pt_sul_owner, &pt->sul_peer_limits, 10 * LWS_US_PER_SEC); } #endif LWS_VISIBLE struct lws_context * lws_create_context(const struct lws_context_creation_info *info) { struct lws_context *context = NULL; struct lws_plat_file_ops *prev; #ifndef LWS_NO_DAEMONIZE pid_t pid_daemon = get_daemonize_pid(); #endif #if defined(LWS_WITH_NETWORK) int n; #endif #if defined(__ANDROID__) struct rlimit rt; #endif lwsl_info("Initial logging level %d\n", log_level); lwsl_info("Libwebsockets version: %s\n", library_version); #ifdef LWS_WITH_IPV6 if (!lws_check_opt(info->options, LWS_SERVER_OPTION_DISABLE_IPV6)) lwsl_info("IPV6 compiled in and enabled\n"); else lwsl_info("IPV6 compiled in but disabled\n"); #else lwsl_info("IPV6 not compiled in\n"); #endif lwsl_info(" LWS_DEF_HEADER_LEN : %u\n", LWS_DEF_HEADER_LEN); lwsl_info(" LWS_MAX_PROTOCOLS : %u\n", LWS_MAX_PROTOCOLS); lwsl_info(" LWS_MAX_SMP : %u\n", LWS_MAX_SMP); lwsl_info(" sizeof (*info) : %ld\n", (long)sizeof(*info)); #if defined(LWS_WITH_STATS) lwsl_info(" LWS_WITH_STATS : on\n"); #endif lwsl_info(" SYSTEM_RANDOM_FILEPATH: '%s'\n", SYSTEM_RANDOM_FILEPATH); #if defined(LWS_WITH_HTTP2) lwsl_info(" HTTP2 support : available\n"); #else lwsl_info(" HTTP2 support : not configured\n"); #endif if (lws_plat_context_early_init()) return NULL; context = lws_zalloc(sizeof(struct lws_context), "context"); if (!context) { lwsl_err("No memory for websocket context\n"); return NULL; } context->uid = info->uid; context->gid = info->gid; context->username = info->username; context->groupname = info->groupname; context->system_ops = info->system_ops; /* if he gave us names, set the uid / gid */ if (lws_plat_drop_app_privileges(context, 0)) goto bail; lwsl_info("context created\n"); #if defined(LWS_WITH_TLS) && defined(LWS_WITH_NETWORK) #if defined(LWS_WITH_MBEDTLS) context->tls_ops = &tls_ops_mbedtls; #else context->tls_ops = &tls_ops_openssl; #endif #endif if (info->pt_serv_buf_size) context->pt_serv_buf_size = info->pt_serv_buf_size; else context->pt_serv_buf_size = 4096; #if defined(LWS_ROLE_H2) role_ops_h2.init_context(context, info); #endif #if LWS_MAX_SMP > 1 lws_mutex_refcount_init(&context->mr); #endif #if defined(LWS_WITH_ESP32) context->last_free_heap = esp_get_free_heap_size(); #endif /* default to just the platform fops implementation */ context->fops_platform.LWS_FOP_OPEN = _lws_plat_file_open; context->fops_platform.LWS_FOP_CLOSE = _lws_plat_file_close; context->fops_platform.LWS_FOP_SEEK_CUR = _lws_plat_file_seek_cur; context->fops_platform.LWS_FOP_READ = _lws_plat_file_read; context->fops_platform.LWS_FOP_WRITE = _lws_plat_file_write; context->fops_platform.fi[0].sig = NULL; /* * arrange a linear linked-list of fops starting from context->fops * * platform fops * [ -> fops_zip (copied into context so .next settable) ] * [ -> info->fops ] */ context->fops = &context->fops_platform; prev = (struct lws_plat_file_ops *)context->fops; #if defined(LWS_WITH_ZIP_FOPS) /* make a soft copy so we can set .next */ context->fops_zip = fops_zip; prev->next = &context->fops_zip; prev = (struct lws_plat_file_ops *)prev->next; #endif /* if user provided fops, tack them on the end of the list */ if (info->fops) prev->next = info->fops; context->reject_service_keywords = info->reject_service_keywords; if (info->external_baggage_free_on_destroy) context->external_baggage_free_on_destroy = info->external_baggage_free_on_destroy; #if defined(LWS_WITH_NETWORK) context->time_up = lws_now_usecs(); #endif context->pcontext_finalize = info->pcontext; context->simultaneous_ssl_restriction = info->simultaneous_ssl_restriction; context->options = info->options; #ifndef LWS_NO_DAEMONIZE if (pid_daemon) { context->started_with_parent = pid_daemon; lwsl_info(" Started with daemon pid %u\n", (unsigned int)pid_daemon); } #endif #if defined(__ANDROID__) n = getrlimit(RLIMIT_NOFILE, &rt); if (n == -1) { lwsl_err("Get RLIMIT_NOFILE failed!\n"); return NULL; } context->max_fds = rt.rlim_cur; #else #if defined(WIN32) || defined(_WIN32) || defined(LWS_AMAZON_RTOS) context->max_fds = getdtablesize(); #else context->max_fds = sysconf(_SC_OPEN_MAX); #endif #endif if (context->max_fds < 0) { lwsl_err("%s: problem getting process max files\n", __func__); return NULL; } if (info->count_threads) context->count_threads = info->count_threads; else context->count_threads = 1; if (context->count_threads > LWS_MAX_SMP) context->count_threads = LWS_MAX_SMP; /* * deal with any max_fds override, if it's reducing (setting it to * more than ulimit -n is meaningless). The platform init will * figure out what if this is something it can deal with. */ if (info->fd_limit_per_thread) { int mf = info->fd_limit_per_thread * context->count_threads; if (mf < context->max_fds) { context->max_fds_unrelated_to_ulimit = 1; context->max_fds = mf; } } context->token_limits = info->token_limits; #if defined(LWS_WITH_NETWORK) /* * set the context event loops ops struct * * after this, all event_loop actions use the generic ops */ #if defined(LWS_WITH_POLL) context->event_loop_ops = &event_loop_ops_poll; #endif if (lws_check_opt(context->options, LWS_SERVER_OPTION_LIBUV)) #if defined(LWS_WITH_LIBUV) context->event_loop_ops = &event_loop_ops_uv; #else goto fail_event_libs; #endif if (lws_check_opt(context->options, LWS_SERVER_OPTION_LIBEV)) #if defined(LWS_WITH_LIBEV) context->event_loop_ops = &event_loop_ops_ev; #else goto fail_event_libs; #endif if (lws_check_opt(context->options, LWS_SERVER_OPTION_LIBEVENT)) #if defined(LWS_WITH_LIBEVENT) context->event_loop_ops = &event_loop_ops_event; #else goto fail_event_libs; #endif if (!context->event_loop_ops) goto fail_event_libs; lwsl_info("Using event loop: %s\n", context->event_loop_ops->name); #endif #if defined(LWS_WITH_TLS) && defined(LWS_WITH_NETWORK) time(&context->tls.last_cert_check_s); if (info->alpn) context->tls.alpn_default = info->alpn; else { char *p = context->tls.alpn_discovered, first = 1; LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) { if (ar->alpn) { if (!first) *p++ = ','; p += lws_snprintf(p, context->tls.alpn_discovered + sizeof(context->tls.alpn_discovered) - 2 - p, "%s", ar->alpn); first = 0; } } LWS_FOR_EVERY_AVAILABLE_ROLE_END; context->tls.alpn_default = context->tls.alpn_discovered; } lwsl_info("Default ALPN advertisment: %s\n", context->tls.alpn_default); #endif if (info->timeout_secs) context->timeout_secs = info->timeout_secs; else context->timeout_secs = AWAITING_TIMEOUT; context->ws_ping_pong_interval = info->ws_ping_pong_interval; lwsl_info(" default timeout (secs): %u\n", context->timeout_secs); if (info->max_http_header_data) context->max_http_header_data = info->max_http_header_data; else if (info->max_http_header_data2) context->max_http_header_data = info->max_http_header_data2; else context->max_http_header_data = LWS_DEF_HEADER_LEN; if (info->max_http_header_pool) context->max_http_header_pool = info->max_http_header_pool; else if (info->max_http_header_pool2) context->max_http_header_pool = info->max_http_header_pool2; else context->max_http_header_pool = context->max_fds; if (info->fd_limit_per_thread) context->fd_limit_per_thread = info->fd_limit_per_thread; else context->fd_limit_per_thread = context->max_fds / context->count_threads; #if defined(LWS_WITH_NETWORK) /* * Allocate the per-thread storage for scratchpad buffers, * and header data pool */ for (n = 0; n < context->count_threads; n++) { context->pt[n].serv_buf = lws_malloc( context->pt_serv_buf_size + sizeof(struct lws), "pt_serv_buf"); if (!context->pt[n].serv_buf) { lwsl_err("OOM\n"); return NULL; } context->pt[n].context = context; context->pt[n].tid = n; /* * We overallocated for a fakewsi (can't compose it in the * pt because size isn't known at that time). point to it * and zero it down. Fakewsis are needed to make callbacks work * when the source of the callback is not actually from a wsi * context. */ context->pt[n].fake_wsi = (struct lws *)(context->pt[n].serv_buf + context->pt_serv_buf_size); memset(context->pt[n].fake_wsi, 0, sizeof(struct lws)); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) context->pt[n].http.ah_list = NULL; context->pt[n].http.ah_pool_length = 0; #endif lws_pt_mutex_init(&context->pt[n]); #if defined(LWS_WITH_SEQUENCER) lws_seq_pt_init(&context->pt[n]); #endif } lwsl_info(" Threads: %d each %d fds\n", context->count_threads, context->fd_limit_per_thread); if (!info->ka_interval && info->ka_time > 0) { lwsl_err("info->ka_interval can't be 0 if ka_time used\n"); return NULL; } #if defined(LWS_WITH_PEER_LIMITS) /* scale the peer hash table according to the max fds for the process, * so that the max list depth averages 16. Eg, 1024 fd -> 64, * 102400 fd -> 6400 */ context->pl_hash_elements = (context->count_threads * context->fd_limit_per_thread) / 16; context->pl_hash_table = lws_zalloc(sizeof(struct lws_peer *) * context->pl_hash_elements, "peer limits hash table"); context->ip_limit_ah = info->ip_limit_ah; context->ip_limit_wsi = info->ip_limit_wsi; #endif lwsl_info(" mem: context: %5lu B (%ld ctx + (%ld thr x %d))\n", (long)sizeof(struct lws_context) + (context->count_threads * context->pt_serv_buf_size), (long)sizeof(struct lws_context), (long)context->count_threads, context->pt_serv_buf_size); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) lwsl_info(" mem: http hdr size: (%u + %lu), max count %u\n", context->max_http_header_data, (long)sizeof(struct allocated_headers), context->max_http_header_pool); #endif /* * fds table contains pollfd structs for as many pollfds as we can * handle... spread across as many service threads as we have going */ n = sizeof(struct lws_pollfd) * context->count_threads * context->fd_limit_per_thread; context->pt[0].fds = lws_zalloc(n, "fds table"); if (context->pt[0].fds == NULL) { lwsl_err("OOM allocating %d fds\n", context->max_fds); goto bail; } lwsl_info(" mem: pollfd map: %5u B\n", n); #endif if (info->server_string) { context->server_string = info->server_string; context->server_string_len = (short) strlen(context->server_string); } #if LWS_MAX_SMP > 1 /* each thread serves his own chunk of fds */ for (n = 1; n < (int)context->count_threads; n++) context->pt[n].fds = context->pt[n - 1].fds + context->fd_limit_per_thread; #endif if (lws_plat_init(context, info)) goto bail; #if defined(LWS_WITH_NETWORK) if (context->event_loop_ops->init_context) if (context->event_loop_ops->init_context(context, info)) goto bail; if (context->event_loop_ops->init_pt) for (n = 0; n < context->count_threads; n++) { void *lp = NULL; if (info->foreign_loops) lp = info->foreign_loops[n]; if (context->event_loop_ops->init_pt(context, lp, n)) goto bail; } #if !defined(LWS_AMAZON_RTOS) if (lws_create_event_pipes(context)) goto bail; #endif #endif lws_context_init_ssl_library(info); context->user_space = info->user; #if defined(LWS_WITH_NETWORK) /* * if he's not saying he'll make his own vhosts later then act * compatibly and make a default vhost using the data in the info */ if (!lws_check_opt(info->options, LWS_SERVER_OPTION_EXPLICIT_VHOSTS)) if (!lws_create_vhost(context, info)) { lwsl_err("Failed to create default vhost\n"); for (n = 0; n < context->count_threads; n++) lws_free_set_NULL(context->pt[n].serv_buf); #if defined(LWS_WITH_PEER_LIMITS) lws_free_set_NULL(context->pl_hash_table); #endif goto fail_clean_pipes; } lws_context_init_extensions(info, context); lwsl_info(" mem: per-conn: %5lu bytes + protocol rx buf\n", (unsigned long)sizeof(struct lws)); #endif strcpy(context->canonical_hostname, "unknown"); #if defined(LWS_WITH_NETWORK) lws_server_get_canonical_hostname(context, info); #endif #if defined(LWS_WITH_STATS) context->pt[0].sul_stats.cb = lws_sul_stats_cb; __lws_sul_insert(&context->pt[0].pt_sul_owner, &context->pt[0].sul_stats, 10 * LWS_US_PER_SEC); #endif #if defined(LWS_WITH_PEER_LIMITS) context->pt[0].sul_peer_limits.cb = lws_sul_peer_limits_cb; __lws_sul_insert(&context->pt[0].pt_sul_owner, &context->pt[0].sul_peer_limits, 10 * LWS_US_PER_SEC); #endif #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) memcpy(context->caps, info->caps, sizeof(context->caps)); context->count_caps = info->count_caps; #endif /* * drop any root privs for this process * to listen on port < 1023 we would have needed root, but now we are * listening, we don't want the power for anything else */ if (!lws_check_opt(info->options, LWS_SERVER_OPTION_EXPLICIT_VHOSTS)) if (lws_plat_drop_app_privileges(context, 1)) goto bail; #if defined(LWS_WITH_NETWORK) /* expedite post-context init (eg, protocols) */ lws_cancel_service(context); #endif return context; #if defined(LWS_WITH_NETWORK) fail_clean_pipes: for (n = 0; n < context->count_threads; n++) lws_destroy_event_pipe(context->pt[n].pipe_wsi); lws_free_set_NULL(context->pt[0].fds); lws_plat_context_late_destroy(context); lws_free_set_NULL(context); return NULL; #endif bail: lws_context_destroy(context); return NULL; #if defined(LWS_WITH_NETWORK) fail_event_libs: lwsl_err("Requested event library support not configured, available:\n"); { extern const struct lws_event_loop_ops *available_event_libs[]; const struct lws_event_loop_ops **elops = available_event_libs; while (*elops) { lwsl_err(" - %s\n", (*elops)->name); elops++; } } #endif lws_free(context); return NULL; } LWS_VISIBLE LWS_EXTERN int lws_context_is_deprecated(struct lws_context *context) { return context->deprecated; } /* * When using an event loop, the context destruction is in three separate * parts. This is to cover both internal and foreign event loops cleanly. * * - lws_context_destroy() simply starts a soft close of all wsi and * related allocations. The event loop continues. * * As the closes complete in the event loop, reference counting is used * to determine when everything is closed. It then calls * lws_context_destroy2(). * * - lws_context_destroy2() cleans up the rest of the higher-level logical * lws pieces like vhosts. If the loop was foreign, it then proceeds to * lws_context_destroy3(). If it the loop is internal, it stops the * internal loops and waits for lws_context_destroy() to be called again * outside the event loop (since we cannot destroy the loop from * within the loop). That will cause lws_context_destroy3() to run * directly. * * - lws_context_destroy3() destroys any internal event loops and then * destroys the context itself, setting what was info.pcontext to NULL. */ /* * destroy the actual context itself */ static void lws_context_destroy3(struct lws_context *context) { struct lws_context **pcontext_finalize = context->pcontext_finalize; #if defined(LWS_WITH_NETWORK) int n; lwsl_debug("%s\n", __func__); for (n = 0; n < context->count_threads; n++) { struct lws_context_per_thread *pt = &context->pt[n]; (void)pt; #if defined(LWS_WITH_SEQUENCER) lws_seq_destroy_all_on_pt(pt); #endif if (context->event_loop_ops->destroy_pt) context->event_loop_ops->destroy_pt(context, n); lws_free_set_NULL(context->pt[n].serv_buf); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) while (pt->http.ah_list) _lws_destroy_ah(pt, pt->http.ah_list); #endif } if (context->pt[0].fds) lws_free_set_NULL(context->pt[0].fds); #endif lws_context_deinit_ssl_library(context); lws_free(context); lwsl_info("%s: ctx %p freed\n", __func__, context); if (pcontext_finalize) *pcontext_finalize = NULL; } /* * really start destroying things */ void lws_context_destroy2(struct lws_context *context) { #if defined(LWS_WITH_NETWORK) struct lws_vhost *vh = NULL, *vh1; #endif #if defined(LWS_WITH_PEER_LIMITS) uint32_t nu; #endif lwsl_info("%s: ctx %p\n", __func__, context); lws_context_lock(context, "context destroy 2"); /* ------ context { */ context->being_destroyed2 = 1; #if defined(LWS_WITH_NETWORK) /* * free all the per-vhost allocations */ vh = context->vhost_list; while (vh) { vh1 = vh->vhost_next; __lws_vhost_destroy2(vh); vh = vh1; } lwsl_debug("%p: post vh listl\n", __func__); /* remove ourselves from the pending destruction list */ while (context->vhost_pending_destruction_list) /* removes itself from list */ __lws_vhost_destroy2(context->vhost_pending_destruction_list); #endif lwsl_debug("%p: post pdl\n", __func__); lws_stats_log_dump(context); #if defined(LWS_WITH_NETWORK) lws_ssl_context_destroy(context); #endif lws_plat_context_late_destroy(context); #if defined(LWS_WITH_PEER_LIMITS) for (nu = 0; nu < context->pl_hash_elements; nu++) { lws_start_foreach_llp(struct lws_peer **, peer, context->pl_hash_table[nu]) { struct lws_peer *df = *peer; *peer = df->next; lws_free(df); continue; } lws_end_foreach_llp(peer, next); } lws_free(context->pl_hash_table); #endif lwsl_debug("%p: baggage\n", __func__); if (context->external_baggage_free_on_destroy) free(context->external_baggage_free_on_destroy); #if defined(LWS_WITH_NETWORK) lws_check_deferred_free(context, 0, 1); #endif #if LWS_MAX_SMP > 1 lws_mutex_refcount_destroy(&context->mr); #endif #if defined(LWS_WITH_NETWORK) if (context->event_loop_ops->destroy_context2) if (context->event_loop_ops->destroy_context2(context)) { lws_context_unlock(context); /* } context ----------- */ context->finalize_destroy_after_internal_loops_stopped = 1; return; } lwsl_debug("%p: post dc2\n", __func__); if (!context->pt[0].event_loop_foreign) { int n; for (n = 0; n < context->count_threads; n++) if (context->pt[n].inside_service) { lwsl_debug("%p: bailing as inside service\n", __func__); lws_context_unlock(context); /* } context --- */ return; } } #endif lws_context_unlock(context); /* } context ------------------- */ lws_context_destroy3(context); } /* * Begin the context takedown */ LWS_VISIBLE void lws_context_destroy(struct lws_context *context) { #if defined(LWS_WITH_NETWORK) volatile struct lws_foreign_thread_pollfd *ftp, *next; volatile struct lws_context_per_thread *vpt; struct lws_vhost *vh = NULL; struct lws wsi; int n, m; #endif if (!context) return; #if defined(LWS_WITH_NETWORK) if (context->finalize_destroy_after_internal_loops_stopped) { if (context->event_loop_ops->destroy_context2) context->event_loop_ops->destroy_context2(context); lws_context_destroy3(context); return; } #endif if (context->being_destroyed1) { if (!context->being_destroyed2) { lws_context_destroy2(context); return; } lwsl_info("%s: ctx %p: already being destroyed\n", __func__, context); lws_context_destroy3(context); return; } lwsl_info("%s: ctx %p\n", __func__, context); context->being_destroyed = 1; context->being_destroyed1 = 1; context->requested_kill = 1; #if defined(LWS_WITH_NETWORK) m = context->count_threads; memset(&wsi, 0, sizeof(wsi)); wsi.context = context; #ifdef LWS_LATENCY if (context->worst_latency_info[0]) lwsl_notice("Worst latency: %s\n", context->worst_latency_info); #endif while (m--) { struct lws_context_per_thread *pt = &context->pt[m]; vpt = (volatile struct lws_context_per_thread *)pt; ftp = vpt->foreign_pfd_list; while (ftp) { next = ftp->next; lws_free((void *)ftp); ftp = next; } vpt->foreign_pfd_list = NULL; for (n = 0; (unsigned int)n < context->pt[m].fds_count; n++) { struct lws *wsi = wsi_from_fd(context, pt->fds[n].fd); if (!wsi) continue; if (wsi->event_pipe) lws_destroy_event_pipe(wsi); else lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY, "ctx destroy" /* no protocol close */); n--; } lws_pt_mutex_destroy(pt); } /* * inform all the protocols that they are done and will have no more * callbacks. * * We can't free things until after the event loop shuts down. */ if (context->protocol_init_done) vh = context->vhost_list; while (vh) { struct lws_vhost *vhn = vh->vhost_next; lws_vhost_destroy1(vh); vh = vhn; } #endif lws_plat_context_early_destroy(context); #if defined(LWS_WITH_NETWORK) /* * We face two different needs depending if foreign loop or not. * * 1) If foreign loop, we really want to advance the destroy_context() * past here, and block only for libuv-style async close completion. * * 2a) If poll, and we exited by ourselves and are calling a final * destroy_context() outside of any service already, we want to * advance all the way in one step. * * 2b) If poll, and we are reacting to a SIGINT, service thread(s) may * be in poll wait or servicing. We can't advance the * destroy_context() to the point it's freeing things; we have to * leave that for the final destroy_context() after the service * thread(s) are finished calling for service. */ if (context->event_loop_ops->destroy_context1) { context->event_loop_ops->destroy_context1(context); return; } #endif #if defined(LWS_WITH_ESP32) #if defined(LWS_AMAZON_RTOS) context->last_free_heap = xPortGetFreeHeapSize(); #else context->last_free_heap = esp_get_free_heap_size(); #endif #endif lws_context_destroy2(context); } libwebsockets-3.2.1/lib/core/libwebsockets.c000066400000000000000000000455721357643561300211110ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #ifdef LWS_HAVE_SYS_TYPES_H #include #endif signed char char_to_hex(const char c) { if (c >= '0' && c <= '9') return c - '0'; if (c >= 'a' && c <= 'f') return c - 'a' + 10; if (c >= 'A' && c <= 'F') return c - 'A' + 10; return -1; } int lws_hex_to_byte_array(const char *h, uint8_t *dest, int max) { uint8_t *odest = dest; while (max-- && *h) { int t = char_to_hex(*h++), t1; if (!*h || t < 0) return -1; t1 = char_to_hex(*h++); if (t1 < 0) return -1; *dest++ = (t << 4) | t1; } if (max < 0) return -1; return dest - odest; } #if !defined(LWS_PLAT_OPTEE) #if !defined(LWS_AMAZON_RTOS) int lws_open(const char *__file, int __oflag, ...) { va_list ap; int n; va_start(ap, __oflag); if (((__oflag & O_CREAT) == O_CREAT) #if defined(O_TMPFILE) || ((__oflag & O_TMPFILE) == O_TMPFILE) #endif ) /* last arg is really a mode_t. But windows... */ n = open(__file, __oflag, va_arg(ap, uint32_t)); else n = open(__file, __oflag); va_end(ap); if (n != -1 && lws_plat_apply_FD_CLOEXEC(n)) { close(n); return -1; } return n; } #endif #endif int lws_pthread_self_to_tsi(struct lws_context *context) { #if LWS_MAX_SMP > 1 pthread_t ps = pthread_self(); struct lws_context_per_thread *pt = &context->pt[0]; int n; for (n = 0; n < context->count_threads; n++) { if (pthread_equal(ps, pt->self)) return n; pt++; } return -1; #else return 0; #endif } LWS_EXTERN void * lws_context_user(struct lws_context *context) { return context->user_space; } LWS_VISIBLE void lws_explicit_bzero(void *p, size_t len) { volatile uint8_t *vp = p; while (len--) *vp++ = 0; } #if !(defined(LWS_PLAT_OPTEE) && !defined(LWS_WITH_NETWORK)) /** * lws_now_secs() - seconds since 1970-1-1 * */ LWS_VISIBLE LWS_EXTERN unsigned long lws_now_secs(void) { struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec; } #endif LWS_VISIBLE extern const char * lws_canonical_hostname(struct lws_context *context) { return (const char *)context->canonical_hostname; } #if defined(LWS_WITH_SOCKS5) LWS_VISIBLE int lws_set_socks(struct lws_vhost *vhost, const char *socks) { char *p_at, *p_colon; char user[96]; char password[96]; if (!socks) return -1; vhost->socks_user[0] = '\0'; vhost->socks_password[0] = '\0'; p_at = strrchr(socks, '@'); if (p_at) { /* auth is around */ if ((unsigned int)(p_at - socks) > (sizeof(user) + sizeof(password) - 2)) { lwsl_err("Socks auth too long\n"); goto bail; } p_colon = strchr(socks, ':'); if (p_colon) { if ((unsigned int)(p_colon - socks) > (sizeof(user) - 1) ) { lwsl_err("Socks user too long\n"); goto bail; } if ((unsigned int)(p_at - p_colon) > (sizeof(password) - 1) ) { lwsl_err("Socks password too long\n"); goto bail; } lws_strncpy(vhost->socks_user, socks, p_colon - socks + 1); lws_strncpy(vhost->socks_password, p_colon + 1, p_at - (p_colon + 1) + 1); } lwsl_info(" Socks auth, user: %s, password: %s\n", vhost->socks_user, vhost->socks_password ); socks = p_at + 1; } lws_strncpy(vhost->socks_proxy_address, socks, sizeof(vhost->socks_proxy_address)); p_colon = strchr(vhost->socks_proxy_address, ':'); if (!p_colon && !vhost->socks_proxy_port) { lwsl_err("socks_proxy needs to be address:port\n"); return -1; } else { if (p_colon) { *p_colon = '\0'; vhost->socks_proxy_port = atoi(p_colon + 1); } } lwsl_info(" Socks %s:%u\n", vhost->socks_proxy_address, vhost->socks_proxy_port); return 0; bail: return -1; } #endif LWS_VISIBLE LWS_EXTERN int lws_get_count_threads(struct lws_context *context) { return context->count_threads; } static const unsigned char e0f4[] = { 0xa0 | ((2 - 1) << 2) | 1, /* e0 */ 0x80 | ((4 - 1) << 2) | 1, /* e1 */ 0x80 | ((4 - 1) << 2) | 1, /* e2 */ 0x80 | ((4 - 1) << 2) | 1, /* e3 */ 0x80 | ((4 - 1) << 2) | 1, /* e4 */ 0x80 | ((4 - 1) << 2) | 1, /* e5 */ 0x80 | ((4 - 1) << 2) | 1, /* e6 */ 0x80 | ((4 - 1) << 2) | 1, /* e7 */ 0x80 | ((4 - 1) << 2) | 1, /* e8 */ 0x80 | ((4 - 1) << 2) | 1, /* e9 */ 0x80 | ((4 - 1) << 2) | 1, /* ea */ 0x80 | ((4 - 1) << 2) | 1, /* eb */ 0x80 | ((4 - 1) << 2) | 1, /* ec */ 0x80 | ((2 - 1) << 2) | 1, /* ed */ 0x80 | ((4 - 1) << 2) | 1, /* ee */ 0x80 | ((4 - 1) << 2) | 1, /* ef */ 0x90 | ((3 - 1) << 2) | 2, /* f0 */ 0x80 | ((4 - 1) << 2) | 2, /* f1 */ 0x80 | ((4 - 1) << 2) | 2, /* f2 */ 0x80 | ((4 - 1) << 2) | 2, /* f3 */ 0x80 | ((1 - 1) << 2) | 2, /* f4 */ 0, /* s0 */ 0x80 | ((4 - 1) << 2) | 0, /* s2 */ 0x80 | ((4 - 1) << 2) | 1, /* s3 */ }; LWS_EXTERN int lws_check_byte_utf8(unsigned char state, unsigned char c) { unsigned char s = state; if (!s) { if (c >= 0x80) { if (c < 0xc2 || c > 0xf4) return -1; if (c < 0xe0) return 0x80 | ((4 - 1) << 2); else return e0f4[c - 0xe0]; } return s; } if (c < (s & 0xf0) || c >= (s & 0xf0) + 0x10 + ((s << 2) & 0x30)) return -1; return e0f4[21 + (s & 3)]; } LWS_EXTERN int lws_check_utf8(unsigned char *state, unsigned char *buf, size_t len) { unsigned char s = *state; while (len--) { unsigned char c = *buf++; if (!s) { if (c >= 0x80) { if (c < 0xc2 || c > 0xf4) return 1; if (c < 0xe0) s = 0x80 | ((4 - 1) << 2); else s = e0f4[c - 0xe0]; } } else { if (c < (s & 0xf0) || c >= (s & 0xf0) + 0x10 + ((s << 2) & 0x30)) return 1; s = e0f4[21 + (s & 3)]; } } *state = s; return 0; } char * lws_strdup(const char *s) { char *d = lws_malloc(strlen(s) + 1, "strdup"); if (d) strcpy(d, s); return d; } static const char *hex = "0123456789ABCDEF"; LWS_VISIBLE LWS_EXTERN const char * lws_sql_purify(char *escaped, const char *string, int len) { const char *p = string; char *q = escaped; while (*p && len-- > 2) { if (*p == '\'') { *q++ = '\''; *q++ = '\''; len --; p++; } else *q++ = *p++; } *q = '\0'; return escaped; } LWS_VISIBLE LWS_EXTERN const char * lws_json_purify(char *escaped, const char *string, int len) { const char *p = string; char *q = escaped; if (!p) { escaped[0] = '\0'; return escaped; } while (*p && len-- > 6) { if (*p == '\t') { p++; *q++ = '\\'; *q++ = 't'; continue; } if (*p == '\n') { p++; *q++ = '\\'; *q++ = 'n'; continue; } if (*p == '\r') { p++; *q++ = '\\'; *q++ = 'r'; continue; } if (*p == '\"' || *p == '\\' || *p < 0x20) { *q++ = '\\'; *q++ = 'u'; *q++ = '0'; *q++ = '0'; *q++ = hex[((*p) >> 4) & 15]; *q++ = hex[(*p) & 15]; len -= 5; p++; } else *q++ = *p++; } *q = '\0'; return escaped; } LWS_VISIBLE LWS_EXTERN void lws_filename_purify_inplace(char *filename) { while (*filename) { if (*filename == '.' && filename[1] == '.') { *filename = '_'; filename[1] = '_'; } if (*filename == ':' || *filename == '\\' || *filename == '$' || *filename == '%') *filename = '_'; filename++; } } LWS_VISIBLE LWS_EXTERN const char * lws_urlencode(char *escaped, const char *string, int len) { const char *p = string; char *q = escaped; while (*p && len-- > 3) { if (*p == ' ') { *q++ = '+'; p++; continue; } if ((*p >= '0' && *p <= '9') || (*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')) { *q++ = *p++; continue; } *q++ = '%'; *q++ = hex[(*p >> 4) & 0xf]; *q++ = hex[*p & 0xf]; len -= 2; p++; } *q = '\0'; return escaped; } LWS_VISIBLE LWS_EXTERN int lws_urldecode(char *string, const char *escaped, int len) { int state = 0, n; char sum = 0; while (*escaped && len) { switch (state) { case 0: if (*escaped == '%') { state++; escaped++; continue; } if (*escaped == '+') { escaped++; *string++ = ' '; len--; continue; } *string++ = *escaped++; len--; break; case 1: n = char_to_hex(*escaped); if (n < 0) return -1; escaped++; sum = n << 4; state++; break; case 2: n = char_to_hex(*escaped); if (n < 0) return -1; escaped++; *string++ = sum | n; len--; state = 0; break; } } *string = '\0'; return 0; } LWS_VISIBLE LWS_EXTERN int lws_finalize_startup(struct lws_context *context) { if (lws_check_opt(context->options, LWS_SERVER_OPTION_EXPLICIT_VHOSTS)) if (lws_plat_drop_app_privileges(context, 1)) return 1; return 0; } LWS_VISIBLE LWS_EXTERN void lws_get_effective_uid_gid(struct lws_context *context, int *uid, int *gid) { *uid = context->uid; *gid = context->gid; } int lws_snprintf(char *str, size_t size, const char *format, ...) { va_list ap; int n; if (!size) return 0; va_start(ap, format); n = vsnprintf(str, size, format, ap); va_end(ap); if (n >= (int)size) return (int)size; return n; } char * lws_strncpy(char *dest, const char *src, size_t size) { strncpy(dest, src, size - 1); dest[size - 1] = '\0'; return dest; } int lws_timingsafe_bcmp(const void *a, const void *b, uint32_t len) { const uint8_t *pa = a, *pb = b; uint8_t sum = 0; while (len--) sum |= (*pa++ ^ *pb++); return sum; } typedef enum { LWS_TOKZS_LEADING_WHITESPACE, LWS_TOKZS_QUOTED_STRING, LWS_TOKZS_TOKEN, LWS_TOKZS_TOKEN_POST_TERMINAL } lws_tokenize_state; #if defined(LWS_AMAZON_RTOS) lws_tokenize_elem #else int #endif lws_tokenize(struct lws_tokenize *ts) { const char *rfc7230_delims = "(),/:;<=>?@[\\]{}"; lws_tokenize_state state = LWS_TOKZS_LEADING_WHITESPACE; char c, flo = 0, d_minus = '-', d_dot = '.', s_minus = '\0', s_dot = '\0'; signed char num = ts->flags & LWS_TOKENIZE_F_NO_INTEGERS ? 0 : -1; int utf8 = 0; /* for speed, compute the effect of the flags outside the loop */ if (ts->flags & LWS_TOKENIZE_F_MINUS_NONTERM) { d_minus = '\0'; s_minus = '-'; } if (ts->flags & LWS_TOKENIZE_F_DOT_NONTERM) { d_dot = '\0'; s_dot = '.'; } ts->token = NULL; ts->token_len = 0; while (ts->len) { c = *ts->start++; ts->len--; utf8 = lws_check_byte_utf8((unsigned char)utf8, c); if (utf8 < 0) return LWS_TOKZE_ERR_BROKEN_UTF8; if (!c) break; /* whitespace */ if (c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\f') { switch (state) { case LWS_TOKZS_LEADING_WHITESPACE: case LWS_TOKZS_TOKEN_POST_TERMINAL: continue; case LWS_TOKZS_QUOTED_STRING: ts->token_len++; continue; case LWS_TOKZS_TOKEN: /* we want to scan forward to look for = */ state = LWS_TOKZS_TOKEN_POST_TERMINAL; continue; } } /* quoted string */ if (c == '\"') { if (state == LWS_TOKZS_QUOTED_STRING) return LWS_TOKZE_QUOTED_STRING; /* starting a quoted string */ if (ts->flags & LWS_TOKENIZE_F_COMMA_SEP_LIST) { if (ts->delim == LWSTZ_DT_NEED_DELIM) return LWS_TOKZE_ERR_COMMA_LIST; ts->delim = LWSTZ_DT_NEED_DELIM; } state = LWS_TOKZS_QUOTED_STRING; ts->token = ts->start; ts->token_len = 0; continue; } /* token= aggregation */ if (c == '=' && (state == LWS_TOKZS_TOKEN_POST_TERMINAL || state == LWS_TOKZS_TOKEN)) { if (num == 1) return LWS_TOKZE_ERR_NUM_ON_LHS; /* swallow the = */ return LWS_TOKZE_TOKEN_NAME_EQUALS; } /* optional token: aggregation */ if ((ts->flags & LWS_TOKENIZE_F_AGG_COLON) && c == ':' && (state == LWS_TOKZS_TOKEN_POST_TERMINAL || state == LWS_TOKZS_TOKEN)) /* swallow the : */ return LWS_TOKZE_TOKEN_NAME_COLON; /* aggregate . in a number as a float */ if (c == '.' && !(ts->flags & LWS_TOKENIZE_F_NO_FLOATS) && state == LWS_TOKZS_TOKEN && num == 1) { if (flo) return LWS_TOKZE_ERR_MALFORMED_FLOAT; flo = 1; ts->token_len++; continue; } /* * Delimiter... by default anything that: * * - isn't matched earlier, or * - is [A-Z, a-z, 0-9, _], and * - is not a partial utf8 char * * is a "delimiter", it marks the end of a token and is itself * reported as a single LWS_TOKZE_DELIMITER each time. * * However with LWS_TOKENIZE_F_RFC7230_DELIMS flag, tokens may * contain any noncontrol character that isn't defined in * rfc7230_delims, and only characters listed there are treated * as delimiters. */ if (!utf8 && ((ts->flags & LWS_TOKENIZE_F_RFC7230_DELIMS && strchr(rfc7230_delims, c) && c > 32) || ((!(ts->flags & LWS_TOKENIZE_F_RFC7230_DELIMS) && (c < '0' || c > '9') && (c < 'A' || c > 'Z') && (c < 'a' || c > 'z') && c != '_') && c != s_minus && c != s_dot) || c == d_minus || c == d_dot )) { switch (state) { case LWS_TOKZS_LEADING_WHITESPACE: if (ts->flags & LWS_TOKENIZE_F_COMMA_SEP_LIST) { if (c != ',' || ts->delim != LWSTZ_DT_NEED_DELIM) return LWS_TOKZE_ERR_COMMA_LIST; ts->delim = LWSTZ_DT_NEED_NEXT_CONTENT; } ts->token = ts->start - 1; ts->token_len = 1; return LWS_TOKZE_DELIMITER; case LWS_TOKZS_QUOTED_STRING: ts->token_len++; continue; case LWS_TOKZS_TOKEN_POST_TERMINAL: case LWS_TOKZS_TOKEN: /* report the delimiter next time */ ts->start--; ts->len++; goto token_or_numeric; } } /* anything that's not whitespace or delimiter is payload */ switch (state) { case LWS_TOKZS_LEADING_WHITESPACE: if (ts->flags & LWS_TOKENIZE_F_COMMA_SEP_LIST) { if (ts->delim == LWSTZ_DT_NEED_DELIM) return LWS_TOKZE_ERR_COMMA_LIST; ts->delim = LWSTZ_DT_NEED_DELIM; } state = LWS_TOKZS_TOKEN; ts->token = ts->start - 1; ts->token_len = 1; goto checknum; case LWS_TOKZS_QUOTED_STRING: case LWS_TOKZS_TOKEN: ts->token_len++; checknum: if (!(ts->flags & LWS_TOKENIZE_F_NO_INTEGERS)) { if (c < '0' || c > '9') num = 0; else if (num < 0) num = 1; } continue; case LWS_TOKZS_TOKEN_POST_TERMINAL: /* report the new token next time */ ts->start--; ts->len++; goto token_or_numeric; } } /* we ran out of content */ if (utf8) /* ended partway through a multibyte char */ return LWS_TOKZE_ERR_BROKEN_UTF8; if (state == LWS_TOKZS_QUOTED_STRING) return LWS_TOKZE_ERR_UNTERM_STRING; if (state != LWS_TOKZS_TOKEN_POST_TERMINAL && state != LWS_TOKZS_TOKEN) { if ((ts->flags & LWS_TOKENIZE_F_COMMA_SEP_LIST) && ts->delim == LWSTZ_DT_NEED_NEXT_CONTENT) return LWS_TOKZE_ERR_COMMA_LIST; return LWS_TOKZE_ENDED; } /* report the pending token */ token_or_numeric: if (num != 1) return LWS_TOKZE_TOKEN; if (flo) return LWS_TOKZE_FLOAT; return LWS_TOKZE_INTEGER; } LWS_VISIBLE LWS_EXTERN int lws_tokenize_cstr(struct lws_tokenize *ts, char *str, int max) { if (ts->token_len + 1 >= max) return 1; memcpy(str, ts->token, ts->token_len); str[ts->token_len] = '\0'; return 0; } LWS_VISIBLE LWS_EXTERN void lws_tokenize_init(struct lws_tokenize *ts, const char *start, int flags) { ts->start = start; ts->len = 0x7fffffff; ts->flags = flags; ts->delim = LWSTZ_DT_NEED_FIRST_CONTENT; } #if LWS_MAX_SMP > 1 void lws_mutex_refcount_init(struct lws_mutex_refcount *mr) { pthread_mutex_init(&mr->lock, NULL); mr->last_lock_reason = NULL; mr->lock_depth = 0; mr->metadata = 0; mr->lock_owner = 0; } void lws_mutex_refcount_destroy(struct lws_mutex_refcount *mr) { pthread_mutex_destroy(&mr->lock); } void lws_mutex_refcount_lock(struct lws_mutex_refcount *mr, const char *reason) { /* if true, this sequence is atomic because our thread has the lock * * - if true, only guy who can race to make it untrue is our thread, * and we are here. * * - if false, only guy who could race to make it true is our thread, * and we are here * * - it can be false and change to a different tid that is also false */ if (mr->lock_owner == pthread_self()) { /* atomic because we only change it if we own the lock */ mr->lock_depth++; return; } pthread_mutex_lock(&mr->lock); /* atomic because only we can have the lock */ mr->last_lock_reason = reason; mr->lock_owner = pthread_self(); mr->lock_depth = 1; //lwsl_notice("tid %d: lock %s\n", mr->tid, reason); } void lws_mutex_refcount_unlock(struct lws_mutex_refcount *mr) { if (--mr->lock_depth) /* atomic because only thread that has the lock can unlock */ return; mr->last_lock_reason = "free"; mr->lock_owner = 0; //lwsl_notice("tid %d: unlock %s\n", mr->tid, mr->last_lock_reason); pthread_mutex_unlock(&mr->lock); } #endif /* SMP */ const char * lws_cmdline_option(int argc, const char **argv, const char *val) { int n = (int)strlen(val), c = argc; while (--c > 0) { if (!strncmp(argv[c], val, n)) { if (!*(argv[c] + n) && c < argc - 1) { /* coverity treats unchecked argv as "tainted" */ if (!argv[c + 1] || strlen(argv[c + 1]) > 1024) return NULL; return argv[c + 1]; } return argv[c] + n; } } return NULL; } const lws_humanize_unit_t humanize_schema_si[] = { { "Pi ", LWS_PI }, { "Ti ", LWS_TI }, { "Gi ", LWS_GI }, { "Mi ", LWS_MI }, { "Ki ", LWS_KI }, { " ", 1 }, { NULL, 0 } }; const lws_humanize_unit_t humanize_schema_si_bytes[] = { { "PiB", LWS_PI }, { "TiB", LWS_TI }, { "GiB", LWS_GI }, { "MiB", LWS_MI }, { "KiB", LWS_KI }, { "B ", 1 }, { NULL, 0 } }; const lws_humanize_unit_t humanize_schema_us[] = { { "y ", (uint64_t)365 * 24 * 3600 * LWS_US_PER_SEC }, { "d ", (uint64_t)24 * 3600 * LWS_US_PER_SEC }, { "hr ", (uint64_t)3600 * LWS_US_PER_SEC }, { "min", 60 * LWS_US_PER_SEC }, { "s ", LWS_US_PER_SEC }, { "ms ", LWS_US_PER_MS }, { "us ", 1 }, { NULL, 0 } }; int lws_humanize(char *p, int len, uint64_t v, const lws_humanize_unit_t *schema) { do { if (v >= schema->factor || schema->factor == 1) { if (schema->factor == 1) return lws_snprintf(p, len, " %4"PRIu64"%s ", v / schema->factor, schema->name); return lws_snprintf(p, len, " %4"PRIu64".%03"PRIu64"%s", v / schema->factor, (v % schema->factor) / (schema->factor / 1000), schema->name); } schema++; } while (schema->name); assert(0); return 0; } int lws_system_get_info(struct lws_context *context, lws_system_item_t item, lws_system_arg_t arg, size_t *len) { if (!context->system_ops || !context->system_ops->get_info) return 1; return context->system_ops->get_info(item, arg, len); } int lws_system_reboot(struct lws_context *context) { if (!context->system_ops || !context->system_ops->reboot) return 1; return context->system_ops->reboot(); } libwebsockets-3.2.1/lib/core/logs.c000066400000000000000000000127751357643561300172140ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #ifdef LWS_HAVE_SYS_TYPES_H #include #endif #if defined(LWS_PLAT_OPTEE) void lwsl_emit_optee(int level, const char *line); #endif int log_level = LLL_ERR | LLL_WARN | LLL_NOTICE; static void (*lwsl_emit)(int level, const char *line) #ifndef LWS_PLAT_OPTEE = lwsl_emit_stderr #else = lwsl_emit_optee; #endif ; #ifndef LWS_PLAT_OPTEE static const char * const log_level_names[] = { "E", "W", "N", "I", "D", "P", "H", "EXT", "C", "L", "U", "T", "?", "?" }; #endif LWS_VISIBLE int lwsl_timestamp(int level, char *p, int len) { #ifndef LWS_PLAT_OPTEE #ifndef _WIN32_WCE time_t o_now = time(NULL); #endif unsigned long long now; struct tm *ptm = NULL; #ifndef WIN32 struct tm tm; #endif int n; #ifndef _WIN32_WCE #ifdef WIN32 ptm = localtime(&o_now); #else if (localtime_r(&o_now, &tm)) ptm = &tm; #endif #endif p[0] = '\0'; for (n = 0; n < LLL_COUNT; n++) { if (level != (1 << n)) continue; now = lws_now_usecs() / 100; if (ptm) n = lws_snprintf(p, len, "[%04d/%02d/%02d %02d:%02d:%02d:%04d] %s: ", ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec, (int)(now % 10000), log_level_names[n]); else n = lws_snprintf(p, len, "[%llu:%04d] %s: ", (unsigned long long) now / 10000, (int)(now % 10000), log_level_names[n]); return n; } #else p[0] = '\0'; #endif return 0; } #ifndef LWS_PLAT_OPTEE static const char * const colours[] = { "[31;1m", /* LLL_ERR */ "[36;1m", /* LLL_WARN */ "[35;1m", /* LLL_NOTICE */ "[32;1m", /* LLL_INFO */ "[34;1m", /* LLL_DEBUG */ "[33;1m", /* LLL_PARSER */ "[33m", /* LLL_HEADER */ "[33m", /* LLL_EXT */ "[33m", /* LLL_CLIENT */ "[33;1m", /* LLL_LATENCY */ "[30;1m", /* LLL_USER */ "[31m", /* LLL_THREAD */ }; static char tty; LWS_VISIBLE void lwsl_emit_stderr(int level, const char *line) { char buf[50]; int n, m = LWS_ARRAY_SIZE(colours) - 1; if (!tty) tty = isatty(2) | 2; lwsl_timestamp(level, buf, sizeof(buf)); if (tty == 3) { n = 1 << (LWS_ARRAY_SIZE(colours) - 1); while (n) { if (level & n) break; m--; n >>= 1; } fprintf(stderr, "%c%s%s%s%c[0m", 27, colours[m], buf, line, 27); } else fprintf(stderr, "%s%s", buf, line); } LWS_VISIBLE void lwsl_emit_stderr_notimestamp(int level, const char *line) { int n, m = LWS_ARRAY_SIZE(colours) - 1; if (!tty) tty = isatty(2) | 2; if (tty == 3) { n = 1 << (LWS_ARRAY_SIZE(colours) - 1); while (n) { if (level & n) break; m--; n >>= 1; } fprintf(stderr, "%c%s%s%c[0m", 27, colours[m], line, 27); } else fprintf(stderr, "%s", line); } #endif #if !(defined(LWS_PLAT_OPTEE) && !defined(LWS_WITH_NETWORK)) LWS_VISIBLE void _lws_logv(int filter, const char *format, va_list vl) { static char buf[256]; int n; if (!(log_level & filter)) return; n = vsnprintf(buf, sizeof(buf) - 1, format, vl); (void)n; /* vnsprintf returns what it would have written, even if truncated */ if (n > (int)sizeof(buf) - 1) { n = sizeof(buf) - 5; buf[n++] = '.'; buf[n++] = '.'; buf[n++] = '.'; buf[n++] = '\n'; buf[n] = '\0'; } if (n > 0) buf[n] = '\0'; lwsl_emit(filter, buf); } LWS_VISIBLE void _lws_log(int filter, const char *format, ...) { va_list ap; va_start(ap, format); _lws_logv(filter, format, ap); va_end(ap); } #endif LWS_VISIBLE void lws_set_log_level(int level, void (*func)(int level, const char *line)) { log_level = level; if (func) lwsl_emit = func; } LWS_VISIBLE int lwsl_visible(int level) { return log_level & level; } LWS_VISIBLE void lwsl_hexdump_level(int hexdump_level, const void *vbuf, size_t len) { unsigned char *buf = (unsigned char *)vbuf; unsigned int n; if (!lwsl_visible(hexdump_level)) return; if (!len) { _lws_log(hexdump_level, "(hexdump: zero length)\n"); return; } if (!vbuf) { _lws_log(hexdump_level, "(hexdump: trying to dump %d at NULL)\n", (int)len); return; } _lws_log(hexdump_level, "\n"); for (n = 0; n < len;) { unsigned int start = n, m; char line[80], *p = line; p += lws_snprintf(p, 10, "%04X: ", start); for (m = 0; m < 16 && n < len; m++) p += lws_snprintf(p, 5, "%02X ", buf[n++]); while (m++ < 16) p += lws_snprintf(p, 5, " "); p += lws_snprintf(p, 6, " "); for (m = 0; m < 16 && (start + m) < len; m++) { if (buf[start + m] >= ' ' && buf[start + m] < 127) *p++ = buf[start + m]; else *p++ = '.'; } while (m++ < 16) *p++ = ' '; *p++ = '\n'; *p = '\0'; _lws_log(hexdump_level, "%s", line); (void)line; } _lws_log(hexdump_level, "\n"); } LWS_VISIBLE void lwsl_hexdump(const void *vbuf, size_t len) { #if defined(_DEBUG) lwsl_hexdump_level(LLL_DEBUG, vbuf, len); #endif } libwebsockets-3.2.1/lib/core/lws_dll.c000066400000000000000000000132671357643561300177050ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #ifdef LWS_HAVE_SYS_TYPES_H #include #endif void lws_dll_add_head(struct lws_dll *d, struct lws_dll *phead) { if (!lws_dll_is_detached(d, phead)) { assert(0); /* only wholly detached things can be added */ return; } /* our next guy is current first guy, if any */ if (phead->next != d) d->next = phead->next; /* if there is a next guy, set his prev ptr to our next ptr */ if (d->next) d->next->prev = d; /* there is nobody previous to us, we are the head */ d->prev = NULL; /* set the first guy to be us */ phead->next = d; /* if there was nothing on the list before, we are also now the tail */ if (!phead->prev) phead->prev = d; assert(d->prev != d); assert(d->next != d); } void lws_dll_add_tail(struct lws_dll *d, struct lws_dll *phead) { if (!lws_dll_is_detached(d, phead)) { assert(0); /* only wholly detached things can be added */ return; } /* our previous guy is current last guy */ d->prev = phead->prev; /* if there is a prev guy, set his next ptr to our prev ptr */ if (d->prev) d->prev->next = d; /* our next ptr is NULL */ d->next = NULL; /* set the last guy to be us */ phead->prev = d; /* list head is also us if we're the first */ if (!phead->next) phead->next = d; assert(d->prev != d); assert(d->next != d); } void lws_dll_insert(struct lws_dll *n, struct lws_dll *target, struct lws_dll *phead, int before) { if (!lws_dll_is_detached(n, phead)) { assert(0); /* only wholly detached things can be inserted */ return; } if (!target) { /* * the case where there's no target identified degenerates to * a simple add at head or tail */ if (before) { lws_dll_add_head(n, phead); return; } lws_dll_add_tail(n, phead); return; } /* * in the case there's a target "cursor", we have to do the work to * stitch the new guy in appropriately */ if (before) { /* * we go before dd * DDp <-> DD <-> DDn --> DDp <-> us <-> DD <-> DDn */ /* we point forward to dd */ n->next = target; /* we point back to what dd used to point back to */ n->prev = target->prev; /* DDp points forward to us now */ if (target->prev) target->prev->next = n; /* DD points back to us now */ target->prev = n; /* if target was the head, we are now the head */ if (phead->next == target) phead->next = n; /* since we are before another guy, we cannot become the tail */ } else { /* * we go after dd * DDp <-> DD <-> DDn --> DDp <-> DD <-> us <-> DDn */ /* we point forward to what dd used to point forward to */ n->next = target->next; /* we point back to dd */ n->prev = target; /* DDn points back to us */ if (target->next) target->next->prev = n; /* DD points forward to us */ target->next = n; /* if target was the tail, we are now the tail */ if (phead->prev == target) phead->prev = n; /* since we go after another guy, we cannot become the head */ } } /* situation is: * * HEAD: struct lws_dll * = &entry1 * * Entry 1: struct lws_dll .pprev = &HEAD , .next = Entry 2 * Entry 2: struct lws_dll .pprev = &entry1 , .next = &entry2 * Entry 3: struct lws_dll .pprev = &entry2 , .next = NULL * * Delete Entry1: * * - HEAD = &entry2 * - Entry2: .pprev = &HEAD, .next = &entry3 * - Entry3: .pprev = &entry2, .next = NULL * * Delete Entry2: * * - HEAD = &entry1 * - Entry1: .pprev = &HEAD, .next = &entry3 * - Entry3: .pprev = &entry1, .next = NULL * * Delete Entry3: * * - HEAD = &entry1 * - Entry1: .pprev = &HEAD, .next = &entry2 * - Entry2: .pprev = &entry1, .next = NULL * */ void lws_dll_remove(struct lws_dll *d) { if (!d->prev && !d->next) return; /* * remove us * * USp <-> us <-> USn --> USp <-> USn */ /* if we have a next guy, set his prev to our prev */ if (d->next) d->next->prev = d->prev; /* set our prev guy to our next guy instead of us */ if (d->prev) d->prev->next = d->next; /* we're out of the list, we should not point anywhere any more */ d->prev = NULL; d->next = NULL; } void lws_dll_remove_track_tail(struct lws_dll *d, struct lws_dll *phead) { if (lws_dll_is_detached(d, phead)) { assert(phead->prev != d); assert(phead->next != d); return; } /* if we have a next guy, set his prev to our prev */ if (d->next) d->next->prev = d->prev; /* if we have a previous guy, set his next to our next */ if (d->prev) d->prev->next = d->next; if (phead->prev == d) phead->prev = d->prev; if (phead->next == d) phead->next = d->next; /* we're out of the list, we should not point anywhere any more */ d->prev = NULL; d->next = NULL; } int lws_dll_foreach_safe(struct lws_dll *phead, void *user, int (*cb)(struct lws_dll *d, void *user)) { lws_start_foreach_dll_safe(struct lws_dll *, p, tp, phead->next) { if (cb(p, user)) return 1; } lws_end_foreach_dll_safe(p, tp); return 0; } libwebsockets-3.2.1/lib/core/lws_dll2.c000066400000000000000000000116221357643561300177600ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #ifdef LWS_HAVE_SYS_TYPES_H #include #endif int lws_dll2_foreach_safe(struct lws_dll2_owner *owner, void *user, int (*cb)(struct lws_dll2 *d, void *user)) { lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, owner->head) { if (cb(p, user)) return 1; } lws_end_foreach_dll_safe(p, tp); return 0; } void lws_dll2_add_head(struct lws_dll2 *d, struct lws_dll2_owner *owner) { if (!lws_dll2_is_detached(d)) { assert(0); /* only wholly detached things can be added */ return; } /* our next guy is current first guy, if any */ if (owner->head != d) d->next = owner->head; /* if there is a next guy, set his prev ptr to our next ptr */ if (d->next) d->next->prev = d; /* there is nobody previous to us, we are the head */ d->prev = NULL; /* set the first guy to be us */ owner->head = d; if (!owner->tail) owner->tail = d; d->owner = owner; owner->count++; } /* * add us to the list that 'after' is in, just before him */ void lws_dll2_add_before(struct lws_dll2 *d, struct lws_dll2 *after) { lws_dll2_owner_t *owner = after->owner; if (!lws_dll2_is_detached(d)) { assert(0); /* only wholly detached things can be added */ return; } if (lws_dll2_is_detached(after)) { assert(0); /* can't add after something detached */ return; } d->owner = owner; /* we need to point forward to after */ d->next = after; /* we need to point back to after->prev */ d->prev = after->prev; /* guy that used to point to after, needs to point to us */ if (after->prev) after->prev->next = d; else owner->head = d; /* then after needs to point back to us */ after->prev = d; owner->count++; } void lws_dll2_add_tail(struct lws_dll2 *d, struct lws_dll2_owner *owner) { if (!lws_dll2_is_detached(d)) { assert(0); /* only wholly detached things can be added */ return; } /* our previous guy is current last guy */ d->prev = owner->tail; /* if there is a prev guy, set his next ptr to our prev ptr */ if (d->prev) d->prev->next = d; /* our next ptr is NULL */ d->next = NULL; /* set the last guy to be us */ owner->tail = d; /* list head is also us if we're the first */ if (!owner->head) owner->head = d; d->owner = owner; owner->count++; } void lws_dll2_remove(struct lws_dll2 *d) { if (lws_dll2_is_detached(d)) return; /* if we have a next guy, set his prev to our prev */ if (d->next) d->next->prev = d->prev; /* if we have a previous guy, set his next to our next */ if (d->prev) d->prev->next = d->next; /* if we have phead, track the tail and head if it points to us... */ if (d->owner->tail == d) d->owner->tail = d->prev; if (d->owner->head == d) d->owner->head = d->next; d->owner->count--; /* we're out of the list, we should not point anywhere any more */ d->owner = NULL; d->prev = NULL; d->next = NULL; } void lws_dll2_clear(struct lws_dll2 *d) { d->owner = NULL; d->prev = NULL; d->next = NULL; } void lws_dll2_owner_clear(struct lws_dll2_owner *d) { d->head = NULL; d->tail = NULL; d->count = 0; } void lws_dll2_add_sorted(lws_dll2_t *d, lws_dll2_owner_t *own, int (*compare)(const lws_dll2_t *d, const lws_dll2_t *i)) { lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, lws_dll2_get_head(own)) { assert(p != d); if (compare(p, d) >= 0) { /* drop us in before this guy */ lws_dll2_add_before(d, p); // lws_dll2_describe(own, "post-insert"); return; } } lws_end_foreach_dll_safe(p, tp); /* * Either nobody on the list yet to compare him to, or he's the * furthest away timeout... stick him at the tail end */ lws_dll2_add_tail(d, own); } #if defined(_DEBUG) void lws_dll2_describe(lws_dll2_owner_t *owner, const char *desc) { int n = 1; lwsl_info("%s: %s: owner %p: count %d, head %p, tail %p\n", __func__, desc, owner, owner->count, owner->head, owner->tail); lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, lws_dll2_get_head(owner)) { lwsl_info("%s: %d: %p: owner %p, prev %p, next %p\n", __func__, n++, p, p->owner, p->prev, p->next); } lws_end_foreach_dll_safe(p, tp); } #endif libwebsockets-3.2.1/lib/core/private.h000066400000000000000000000343221357643561300177170ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "lws_config.h" #include "lws_config_private.h" #if defined(LWS_WITH_CGI) && defined(LWS_HAVE_VFORK) && \ !defined(NO_GNU_SOURCE_THIS_TIME) #define _GNU_SOURCE #endif /* #if !defined(_POSIX_C_SOURCE) #define _POSIX_C_SOURCE 200112L #endif */ #include #include #include #include #include #include #include #ifdef LWS_HAVE_INTTYPES_H #include #endif #include #ifdef LWS_HAVE_SYS_TYPES_H #include #endif #if defined(LWS_HAVE_SYS_STAT_H) && !defined(LWS_PLAT_OPTEE) #include #endif #if LWS_MAX_SMP > 1 #include #endif #ifndef LWS_DEF_HEADER_LEN #define LWS_DEF_HEADER_LEN 4096 #endif #ifndef LWS_DEF_HEADER_POOL #define LWS_DEF_HEADER_POOL 4 #endif #ifndef LWS_MAX_PROTOCOLS #define LWS_MAX_PROTOCOLS 5 #endif #ifndef LWS_MAX_EXTENSIONS_ACTIVE #define LWS_MAX_EXTENSIONS_ACTIVE 1 #endif #ifndef LWS_MAX_EXT_OFFERS #define LWS_MAX_EXT_OFFERS 8 #endif #ifndef SPEC_LATEST_SUPPORTED #define SPEC_LATEST_SUPPORTED 13 #endif #ifndef AWAITING_TIMEOUT #define AWAITING_TIMEOUT 20 #endif #ifndef CIPHERS_LIST_STRING #define CIPHERS_LIST_STRING "DEFAULT" #endif #ifndef LWS_SOMAXCONN #define LWS_SOMAXCONN SOMAXCONN #endif #define MAX_WEBSOCKET_04_KEY_LEN 128 #ifndef SYSTEM_RANDOM_FILEPATH #define SYSTEM_RANDOM_FILEPATH "/dev/urandom" #endif #define LWS_H2_RX_SCRATCH_SIZE 512 #define lws_socket_is_valid(x) (x != LWS_SOCK_INVALID) #ifndef LWS_HAVE_STRERROR #define strerror(x) "" #endif /* * * ------ private platform defines ------ * */ #if defined(LWS_WITH_ESP32) #include "plat/esp32/private.h" #else #if defined(WIN32) || defined(_WIN32) #include "plat/windows/private.h" #else #if defined(LWS_PLAT_OPTEE) #include "plat/optee/private.h" #else #include "plat/unix/private.h" #endif #endif #endif /* * * ------ public api ------ * */ #include "libwebsockets.h" #include "tls/private.h" #if defined(WIN32) || defined(_WIN32) // Visual studio older than 2015 and WIN_CE has only _stricmp #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE) #define strcasecmp _stricmp #define strncasecmp _strnicmp #elif !defined(__MINGW32__) #define strcasecmp stricmp #define strncasecmp strnicmp #endif #define getdtablesize() 30000 #endif #ifndef LWS_ARRAY_SIZE #define LWS_ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) #endif #ifdef __cplusplus extern "C" { #endif #if defined(__clang__) #define lws_memory_barrier() __sync_synchronize() #elif defined(__GNUC__) #define lws_memory_barrier() __sync_synchronize() #else #define lws_memory_barrier() #endif struct lws_ring { void *buf; void (*destroy_element)(void *element); uint32_t buflen; uint32_t element_len; uint32_t head; uint32_t oldest_tail; }; struct lws_protocols; struct lws; #if defined(LWS_WITH_NETWORK) #include "event-libs/private.h" struct lws_io_watcher { #ifdef LWS_WITH_LIBEV struct lws_io_watcher_libev ev; #endif #ifdef LWS_WITH_LIBUV struct lws_io_watcher_libuv uv; #endif #ifdef LWS_WITH_LIBEVENT struct lws_io_watcher_libevent event; #endif struct lws_context *context; uint8_t actual_events; }; struct lws_signal_watcher { #ifdef LWS_WITH_LIBEV struct lws_signal_watcher_libev ev; #endif #ifdef LWS_WITH_LIBUV struct lws_signal_watcher_libuv uv; #endif #ifdef LWS_WITH_LIBEVENT struct lws_signal_watcher_libevent event; #endif struct lws_context *context; }; struct lws_foreign_thread_pollfd { struct lws_foreign_thread_pollfd *next; int fd_index; int _and; int _or; }; #endif #if LWS_MAX_SMP > 1 struct lws_mutex_refcount { pthread_mutex_t lock; pthread_t lock_owner; const char *last_lock_reason; char lock_depth; char metadata; }; void lws_mutex_refcount_init(struct lws_mutex_refcount *mr); void lws_mutex_refcount_destroy(struct lws_mutex_refcount *mr); void lws_mutex_refcount_lock(struct lws_mutex_refcount *mr, const char *reason); void lws_mutex_refcount_unlock(struct lws_mutex_refcount *mr); #endif #if defined(LWS_WITH_NETWORK) #include "core-net/private.h" #endif struct lws_deferred_free { struct lws_deferred_free *next; time_t deadline; void *payload; }; /* * the rest is managed per-context, that includes * * - processwide single fd -> wsi lookup * - contextwide headers pool */ struct lws_context { time_t last_ws_ping_pong_check_s; lws_usec_t time_up; /* monotonic */ const struct lws_plat_file_ops *fops; struct lws_plat_file_ops fops_platform; struct lws_context **pcontext_finalize; const struct lws_tls_ops *tls_ops; const char *username, *groupname; #if defined(LWS_WITH_HTTP2) struct http2_settings set; #endif #if defined(LWS_WITH_ZIP_FOPS) struct lws_plat_file_ops fops_zip; #endif #if defined(LWS_WITH_NETWORK) struct lws_context_per_thread pt[LWS_MAX_SMP]; struct lws_conn_stats conn_stats; struct lws_vhost *vhost_list; struct lws_vhost *no_listener_vhost_list; struct lws_vhost *vhost_pending_destruction_list; struct lws_plugin *plugin_list; #ifdef _WIN32 /* different implementation between unix and windows */ struct lws_fd_hashtable fd_hashtable[FD_HASHTABLE_MODULUS]; #else struct lws **lws_lookup; #endif #endif #if LWS_MAX_SMP > 1 struct lws_mutex_refcount mr; #endif #if defined(LWS_AMAZON_RTOS) mbedtls_entropy_context mec; mbedtls_ctr_drbg_context mcdc; #endif struct lws_deferred_free *deferred_free_list; #if defined(LWS_WITH_THREADPOOL) struct lws_threadpool *tp_list_head; #endif #if defined(LWS_WITH_PEER_LIMITS) struct lws_peer **pl_hash_table; struct lws_peer *peer_wait_list; time_t next_cull; #endif const lws_system_ops_t *system_ops; void *external_baggage_free_on_destroy; const struct lws_token_limits *token_limits; void *user_space; const struct lws_protocol_vhost_options *reject_service_keywords; lws_reload_func deprecation_cb; void (*eventlib_signal_cb)(void *event_lib_handle, int signum); #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) cap_value_t caps[4]; char count_caps; #endif #if defined(LWS_WITH_NETWORK) #if defined(LWS_WITH_LIBEV) struct lws_context_eventlibs_libev ev; #endif #if defined(LWS_WITH_LIBUV) struct lws_context_eventlibs_libuv uv; #endif #if defined(LWS_WITH_LIBEVENT) struct lws_context_eventlibs_libevent event; #endif struct lws_event_loop_ops *event_loop_ops; #endif #if defined(LWS_WITH_TLS) && defined(LWS_WITH_NETWORK) struct lws_context_tls tls; #endif char canonical_hostname[128]; const char *server_string; #ifdef LWS_LATENCY unsigned long worst_latency; char worst_latency_info[256]; #endif #if defined(LWS_WITH_ESP32) unsigned long time_last_state_dump; uint32_t last_free_heap; #endif int max_fds; int count_event_loop_static_asset_handles; #if !defined(LWS_NO_DAEMONIZE) pid_t started_with_parent; #endif int uid, gid; int fd_random; int count_wsi_allocated; int count_cgi_spawned; unsigned int options; unsigned int fd_limit_per_thread; unsigned int timeout_secs; unsigned int pt_serv_buf_size; int max_http_header_data; int max_http_header_pool; int simultaneous_ssl_restriction; int simultaneous_ssl; #if defined(LWS_WITH_PEER_LIMITS) uint32_t pl_hash_elements; /* protected by context->lock */ uint32_t count_peers; /* protected by context->lock */ unsigned short ip_limit_ah; unsigned short ip_limit_wsi; #endif unsigned int deprecated:1; unsigned int being_destroyed:1; unsigned int being_destroyed1:1; unsigned int being_destroyed2:1; unsigned int requested_kill:1; unsigned int protocol_init_done:1; unsigned int doing_protocol_init:1; unsigned int done_protocol_destroy_cb:1; unsigned int finalize_destroy_after_internal_loops_stopped:1; unsigned int max_fds_unrelated_to_ulimit:1; short count_threads; short plugin_protocol_count; short plugin_extension_count; short server_string_len; unsigned short ws_ping_pong_interval; unsigned short deprecation_pending_listen_close_count; uint8_t max_fi; #if defined(LWS_WITH_STATS) uint8_t updated; #endif }; int lws_check_deferred_free(struct lws_context *context, int tsi, int force); #define lws_get_context_protocol(ctx, x) ctx->vhost_list->protocols[x] #define lws_get_vh_protocol(vh, x) vh->protocols[x] int lws_jws_base64_enc(const char *in, size_t in_len, char *out, size_t out_max); void lws_vhost_destroy1(struct lws_vhost *vh); #if defined(LWS_WITH_ESP32) LWS_EXTERN int lws_find_string_in_file(const char *filename, const char *str, int stringlen); #endif signed char char_to_hex(const char c); struct lws_buflist { struct lws_buflist *next; size_t len; size_t pos; uint8_t buf[1]; /* true length of this is set by the oversize malloc */ }; LWS_EXTERN char * lws_strdup(const char *s); LWS_EXTERN int log_level; #ifndef LWS_LATENCY static LWS_INLINE void lws_latency(struct lws_context *context, struct lws *wsi, const char *action, int ret, int completion) { do { (void)context; (void)wsi; (void)action; (void)ret; (void)completion; } while (0); } static LWS_INLINE void lws_latency_pre(struct lws_context *context, struct lws *wsi) { do { (void)context; (void)wsi; } while (0); } #else #define lws_latency_pre(_context, _wsi) lws_latency(_context, _wsi, NULL, 0, 0) extern void lws_latency(struct lws_context *context, struct lws *wsi, const char *action, int ret, int completion); #endif LWS_EXTERN int lws_b64_selftest(void); #ifndef LWS_NO_DAEMONIZE LWS_EXTERN pid_t get_daemonize_pid(); #else #define get_daemonize_pid() (0) #endif LWS_EXTERN void lwsl_emit_stderr(int level, const char *line); #if !defined(LWS_WITH_TLS) #define LWS_SSL_ENABLED(context) (0) #define lws_context_init_server_ssl(_a, _b) (0) #define lws_ssl_destroy(_a) #define lws_context_init_alpn(_a) #define lws_ssl_capable_read lws_ssl_capable_read_no_ssl #define lws_ssl_capable_write lws_ssl_capable_write_no_ssl #define lws_ssl_pending lws_ssl_pending_no_ssl #define lws_server_socket_service_ssl(_b, _c) (0) #define lws_ssl_close(_a) (0) #define lws_ssl_context_destroy(_a) #define lws_ssl_SSL_CTX_destroy(_a) #define lws_ssl_remove_wsi_from_buffered_list(_a) #define __lws_ssl_remove_wsi_from_buffered_list(_a) #define lws_context_init_ssl_library(_a) #define lws_context_deinit_ssl_library(_a) #define lws_tls_check_all_cert_lifetimes(_a) #define lws_tls_acme_sni_cert_destroy(_a) #endif #if LWS_MAX_SMP > 1 #define lws_context_lock(c, reason) lws_mutex_refcount_lock(&c->mr, reason) #define lws_context_unlock(c) lws_mutex_refcount_unlock(&c->mr) static LWS_INLINE void lws_vhost_lock(struct lws_vhost *vhost) { pthread_mutex_lock(&vhost->lock); } static LWS_INLINE void lws_vhost_unlock(struct lws_vhost *vhost) { pthread_mutex_unlock(&vhost->lock); } #else #define lws_pt_mutex_init(_a) (void)(_a) #define lws_pt_mutex_destroy(_a) (void)(_a) #define lws_pt_lock(_a, b) (void)(_a) #define lws_pt_unlock(_a) (void)(_a) #define lws_context_lock(_a, _b) (void)(_a) #define lws_context_unlock(_a) (void)(_a) #define lws_vhost_lock(_a) (void)(_a) #define lws_vhost_unlock(_a) (void)(_a) #define lws_pt_stats_lock(_a) (void)(_a) #define lws_pt_stats_unlock(_a) (void)(_a) #endif LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ssl_capable_read_no_ssl(struct lws *wsi, unsigned char *buf, int len); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ssl_capable_write_no_ssl(struct lws *wsi, unsigned char *buf, int len); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ssl_pending_no_ssl(struct lws *wsi); int lws_tls_check_cert_lifetime(struct lws_vhost *vhost); int lws_jws_selftest(void); int lws_jwe_selftest(void); int lws_protocol_init(struct lws_context *context); int lws_bind_protocol(struct lws *wsi, const struct lws_protocols *p, const char *reason); const struct lws_protocol_vhost_options * lws_vhost_protocol_options(struct lws_vhost *vh, const char *name); const struct lws_http_mount * lws_find_mount(struct lws *wsi, const char *uri_ptr, int uri_len); /* * custom allocator */ LWS_EXTERN void * lws_realloc(void *ptr, size_t size, const char *reason); LWS_EXTERN void * LWS_WARN_UNUSED_RESULT lws_zalloc(size_t size, const char *reason); #ifdef LWS_PLAT_OPTEE void *lws_malloc(size_t size, const char *reason); void lws_free(void *p); #define lws_free_set_NULL(P) do { lws_free(P); (P) = NULL; } while(0) #else #define lws_malloc(S, R) lws_realloc(NULL, S, R) #define lws_free(P) lws_realloc(P, 0, "lws_free") #define lws_free_set_NULL(P) do { lws_realloc(P, 0, "free"); (P) = NULL; } while(0) #endif int lws_create_event_pipes(struct lws_context *context); int lws_plat_apply_FD_CLOEXEC(int n); const struct lws_plat_file_ops * lws_vfs_select_fops(const struct lws_plat_file_ops *fops, const char *vfs_path, const char **vpath); /* lws_plat_ */ LWS_EXTERN int lws_plat_context_early_init(void); LWS_EXTERN void lws_plat_context_early_destroy(struct lws_context *context); LWS_EXTERN void lws_plat_context_late_destroy(struct lws_context *context); LWS_EXTERN int lws_plat_init(struct lws_context *context, const struct lws_context_creation_info *info); LWS_EXTERN int lws_plat_drop_app_privileges(struct lws_context *context, int actually_drop); #if defined(LWS_WITH_UNIX_SOCK) int lws_plat_user_colon_group_to_ids(const char *u_colon_g, uid_t *puid, gid_t *pgid); #endif LWS_EXTERN int lws_check_byte_utf8(unsigned char state, unsigned char c); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_check_utf8(unsigned char *state, unsigned char *buf, size_t len); LWS_EXTERN int alloc_file(struct lws_context *context, const char *filename, uint8_t **buf, lws_filepos_t *amount); void lws_context_destroy2(struct lws_context *context); #ifdef __cplusplus }; #endif libwebsockets-3.2.1/lib/core/vfs.c000066400000000000000000000060401357643561300170320ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" LWS_VISIBLE LWS_EXTERN void lws_set_fops(struct lws_context *context, const struct lws_plat_file_ops *fops) { context->fops = fops; } LWS_VISIBLE LWS_EXTERN lws_filepos_t lws_vfs_tell(lws_fop_fd_t fop_fd) { return fop_fd->pos; } LWS_VISIBLE LWS_EXTERN lws_filepos_t lws_vfs_get_length(lws_fop_fd_t fop_fd) { return fop_fd->len; } LWS_VISIBLE LWS_EXTERN uint32_t lws_vfs_get_mod_time(lws_fop_fd_t fop_fd) { return fop_fd->mod_time; } LWS_VISIBLE lws_fileofs_t lws_vfs_file_seek_set(lws_fop_fd_t fop_fd, lws_fileofs_t offset) { lws_fileofs_t ofs; ofs = fop_fd->fops->LWS_FOP_SEEK_CUR(fop_fd, offset - fop_fd->pos); return ofs; } LWS_VISIBLE lws_fileofs_t lws_vfs_file_seek_end(lws_fop_fd_t fop_fd, lws_fileofs_t offset) { return fop_fd->fops->LWS_FOP_SEEK_CUR(fop_fd, fop_fd->len + fop_fd->pos + offset); } const struct lws_plat_file_ops * lws_vfs_select_fops(const struct lws_plat_file_ops *fops, const char *vfs_path, const char **vpath) { const struct lws_plat_file_ops *pf; const char *p = vfs_path; int n; *vpath = NULL; /* no non-platform fops, just use that */ if (!fops->next) return fops; /* * scan the vfs path looking for indications we are to be * handled by a specific fops */ while (p && *p) { if (*p != '/') { p++; continue; } /* the first one is always platform fops, so skip */ pf = fops->next; while (pf) { n = 0; while (n < (int)LWS_ARRAY_SIZE(pf->fi) && pf->fi[n].sig) { if (p >= vfs_path + pf->fi[n].len) if (!strncmp(p - (pf->fi[n].len - 1), pf->fi[n].sig, pf->fi[n].len - 1)) { *vpath = p + 1; return pf; } n++; } pf = pf->next; } p++; } return fops; } LWS_VISIBLE LWS_EXTERN lws_fop_fd_t LWS_WARN_UNUSED_RESULT lws_vfs_file_open(const struct lws_plat_file_ops *fops, const char *vfs_path, lws_fop_flags_t *flags) { const char *vpath = ""; const struct lws_plat_file_ops *selected; selected = lws_vfs_select_fops(fops, vfs_path, &vpath); return selected->LWS_FOP_OPEN(fops, vfs_path, vpath, flags); } LWS_VISIBLE struct lws_plat_file_ops * lws_get_fops(struct lws_context *context) { return (struct lws_plat_file_ops *)context->fops; } libwebsockets-3.2.1/lib/event-libs/000077500000000000000000000000001357643561300172105ustar00rootroot00000000000000libwebsockets-3.2.1/lib/event-libs/README.md000066400000000000000000000101311357643561300204630ustar00rootroot00000000000000## Information for new event lib implementers ### Introduction By default lws has built-in support for POSIX poll() as the event loop. However either to get access to epoll() or other platform specific better poll waits, or to integrate with existing applications already using a specific event loop, it can be desirable for lws to use another external event library, like libuv, libevent or libev. ### Code placement The code specific to the event library should live in `./lib/event-libs/**lib name**` ### Allowing control over enabling event libs All event libs should add a cmake define `LWS_WITH_**lib name**` and make its build dependent on it in CMakeLists.txt. Export the cmakedefine in `./cmake/lws_config.h.in` as well so user builds can understand if the event lib is available in the lws build it is trying to bind to. If the event lib is disabled in cmake, nothing in its directory is built or referenced. ### Event loop ops struct The event lib support is defined by `struct lws_event_loop_ops` in `lib/event-libs/private.h`, each event lib support instantiates one of these and fills in the appropriate ops callbacks to perform its job. By convention that lives in `./lib/event-libs/**lib name**/**lib_name**.c`. ### Private event lib declarations Truly private declarations for the event lib can go in the event-libs directory as you like. However when the declarations must be accessible to other things in lws build, eg, the event lib support adds members to `struct lws` when enabled, they should be in the event lib supporr directory in a file `private.h`. Search for "bring in event libs private declarations" in `./lib/core/private.h and add your private event lib support file there following the style used for the other event libs, eg, ``` #if defined(LWS_WITH_LIBUV) #include "event-libs/libuv/private.h" #endif ``` If the event lib support is disabled at cmake, nothing from its private.h should be used anywhere. ### Integrating event lib assets to lws If your event lib needs special storage in lws objects, that's no problem. But to keep things sane, there are some rules. - declare a "container struct" in your private.h for everything, eg, the libuv event lib support need to add its own assets in the perthread struct, it declares in its private.h ``` struct lws_pt_eventlibs_libuv { uv_loop_t *io_loop; uv_signal_t signals[8]; uv_timer_t timeout_watcher; uv_timer_t hrtimer; uv_idle_t idle; }; ``` - add your event lib content in one place in the related lws struct, protected by `#if defined(LWS_WITH_**lib name**)`, eg, again for LWS_WITH_LIBUV ``` struct lws_context_per_thread { ... #if defined(LWS_WITH_LIBUV) struct lws_pt_eventlibs_libuv uv; #endif ... ``` ### Adding to lws available event libs list Edit the NULL-terminated array `available_event_libs` at the top of `./lib/context.c` to include a pointer to your new event lib support's ops struct, following the style already there. ``` const struct lws_event_loop_ops *available_event_libs[] = { #if defined(LWS_WITH_POLL) &event_loop_ops_poll, #endif #if defined(LWS_WITH_LIBUV) &event_loop_ops_uv, #endif ... ``` This is used to provide a list of avilable configured backends. ### Enabling event lib adoption You need to add a `LWS_SERVER_OPTION...` flag as necessary in `./lib/libwebsockets.h` `enum lws_context_options`, and follow the existing code in `lws_create_context()` to convert the flag into binding your ops struct to the context. ### Implementation of the event lib bindings Study eg libuv implementation, using the available ops in the struct lws_event_loop_ops as a guide. ### Destruction Ending the event loop is generally a bit tricky, because if the event loop is internal to the lws context, you cannot destroy it while the event loop is running. Don't add special exports... we tried that, it's a huge mess. The same user code should be able work with any of the event loops including poll. The solution we found was hide the different processing necessary for the different cases in lws_destroy_context(). To help with that there are ops available at two different places in the context destroy processing. libwebsockets-3.2.1/lib/event-libs/libev/000077500000000000000000000000001357643561300203115ustar00rootroot00000000000000libwebsockets-3.2.1/lib/event-libs/libev/libev.c000066400000000000000000000216601357643561300215630ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" static void lws_ev_hrtimer_cb(struct ev_loop *loop, struct ev_timer *watcher, int revents) { struct lws_context_per_thread *pt = (struct lws_context_per_thread *)watcher->data; lws_usec_t us; lws_pt_lock(pt, __func__); us = __lws_sul_service_ripe(&pt->pt_sul_owner, lws_now_usecs()); if (us) { ev_timer_set(&pt->ev.hrtimer, ((float)us) / 1000000.0, 0); ev_timer_start(pt->ev.io_loop, &pt->ev.hrtimer); } lws_pt_unlock(pt); } static void lws_ev_idle_cb(struct ev_loop *loop, struct ev_idle *handle, int revents) { struct lws_context_per_thread *pt = lws_container_of(handle, struct lws_context_per_thread, ev.idle); lws_usec_t us; lws_service_do_ripe_rxflow(pt); /* * is there anybody with pending stuff that needs service forcing? */ if (!lws_service_adjust_timeout(pt->context, 1, pt->tid)) /* -1 timeout means just do forced service */ _lws_plat_service_forced_tsi(pt->context, pt->tid); /* account for hrtimer */ lws_pt_lock(pt, __func__); us = __lws_sul_service_ripe(&pt->pt_sul_owner, lws_now_usecs()); if (us) { ev_timer_set(&pt->ev.hrtimer, ((float)us) / 1000000.0, 0); ev_timer_start(pt->ev.io_loop, &pt->ev.hrtimer); } lws_pt_unlock(pt); /* there is nobody who needs service forcing, shut down idle */ ev_idle_stop(loop, handle); } static void lws_accept_cb(struct ev_loop *loop, struct ev_io *watcher, int revents) { struct lws_context_per_thread *pt; struct lws_io_watcher *lws_io = lws_container_of(watcher, struct lws_io_watcher, ev.watcher); struct lws_context *context = lws_io->context; struct lws_pollfd eventfd; struct lws *wsi; if (revents & EV_ERROR) return; eventfd.fd = watcher->fd; eventfd.events = 0; eventfd.revents = EV_NONE; if (revents & EV_READ) { eventfd.events |= LWS_POLLIN; eventfd.revents |= LWS_POLLIN; } if (revents & EV_WRITE) { eventfd.events |= LWS_POLLOUT; eventfd.revents |= LWS_POLLOUT; } wsi = wsi_from_fd(context, watcher->fd); pt = &context->pt[(int)wsi->tsi]; lws_service_fd_tsi(context, &eventfd, (int)wsi->tsi); ev_idle_start(pt->ev.io_loop, &pt->ev.idle); } LWS_VISIBLE void lws_ev_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents) { struct lws_context *context = watcher->data; if (context->eventlib_signal_cb) { context->eventlib_signal_cb((void *)watcher, watcher->signum); return; } ev_break(loop, EVBREAK_ALL); } static int elops_init_pt_ev(struct lws_context *context, void *_loop, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct ev_signal *w_sigint = &context->pt[tsi].w_sigint.ev.watcher; struct lws_vhost *vh = context->vhost_list; const char *backend_name; struct ev_loop *loop = (struct ev_loop *)_loop; int status = 0; int backend; lwsl_info("%s: loop %p\n", __func__, _loop); if (!loop) loop = ev_loop_new(0); else context->pt[tsi].event_loop_foreign = 1; if (!loop) { lwsl_err("%s: creating event base failed\n", __func__); return -1; } pt->ev.io_loop = loop; /* * Initialize the accept w_accept with all the listening sockets * and register a callback for read operations */ while (vh) { if (vh->lserv_wsi) { vh->lserv_wsi->w_read.context = context; vh->w_accept.context = context; ev_io_init(&vh->w_accept.ev.watcher, lws_accept_cb, vh->lserv_wsi->desc.sockfd, EV_READ); ev_io_start(loop, &vh->w_accept.ev.watcher); } vh = vh->vhost_next; } /* Register the signal watcher unless it's a foreign loop */ if (!context->pt[tsi].event_loop_foreign) { ev_signal_init(w_sigint, lws_ev_sigint_cb, SIGINT); w_sigint->data = context; ev_signal_start(loop, w_sigint); } backend = ev_backend(loop); switch (backend) { case EVBACKEND_SELECT: backend_name = "select"; break; case EVBACKEND_POLL: backend_name = "poll"; break; case EVBACKEND_EPOLL: backend_name = "epoll"; break; case EVBACKEND_KQUEUE: backend_name = "kqueue"; break; case EVBACKEND_DEVPOLL: backend_name = "/dev/poll"; break; case EVBACKEND_PORT: backend_name = "Solaris 10 \"port\""; break; default: backend_name = "Unknown libev backend"; break; } lwsl_info(" libev backend: %s\n", backend_name); (void)backend_name; ev_timer_init(&pt->ev.hrtimer, lws_ev_hrtimer_cb, 0, 0); pt->ev.hrtimer.data = pt; ev_idle_init(&pt->ev.idle, lws_ev_idle_cb); return status; } static void elops_destroy_pt_ev(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_vhost *vh = context->vhost_list; while (vh) { if (vh->lserv_wsi) ev_io_stop(pt->ev.io_loop, &vh->w_accept.ev.watcher); vh = vh->vhost_next; } /* static assets */ ev_timer_stop(pt->ev.io_loop, &pt->ev.hrtimer); ev_idle_stop(pt->ev.io_loop, &pt->ev.idle); if (!pt->event_loop_foreign) { ev_signal_stop(pt->ev.io_loop, &pt->w_sigint.ev.watcher); ev_loop_destroy(pt->ev.io_loop); } } static int elops_init_context_ev(struct lws_context *context, const struct lws_context_creation_info *info) { int n; context->eventlib_signal_cb = info->signal_cb; for (n = 0; n < context->count_threads; n++) context->pt[n].w_sigint.context = context; return 0; } static int elops_accept_ev(struct lws *wsi) { int fd; if (wsi->role_ops->file_handle) fd = wsi->desc.filefd; else fd = wsi->desc.sockfd; wsi->w_read.context = wsi->context; wsi->w_write.context = wsi->context; ev_io_init(&wsi->w_read.ev.watcher, lws_accept_cb, fd, EV_READ); ev_io_init(&wsi->w_write.ev.watcher, lws_accept_cb, fd, EV_WRITE); return 0; } static void elops_io_ev(struct lws *wsi, int flags) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; if (!pt->ev.io_loop) return; assert((flags & (LWS_EV_START | LWS_EV_STOP)) && (flags & (LWS_EV_READ | LWS_EV_WRITE))); if (flags & LWS_EV_START) { if (flags & LWS_EV_WRITE) ev_io_start(pt->ev.io_loop, &wsi->w_write.ev.watcher); if (flags & LWS_EV_READ) ev_io_start(pt->ev.io_loop, &wsi->w_read.ev.watcher); } else { if (flags & LWS_EV_WRITE) ev_io_stop(pt->ev.io_loop, &wsi->w_write.ev.watcher); if (flags & LWS_EV_READ) ev_io_stop(pt->ev.io_loop, &wsi->w_read.ev.watcher); } } static void elops_run_pt_ev(struct lws_context *context, int tsi) { if (context->pt[tsi].ev.io_loop) ev_run(context->pt[tsi].ev.io_loop, 0); } static int elops_destroy_context2_ev(struct lws_context *context) { struct lws_context_per_thread *pt; int n, m; lwsl_debug("%s\n", __func__); for (n = 0; n < context->count_threads; n++) { int budget = 1000; pt = &context->pt[n]; /* only for internal loops... */ if (pt->event_loop_foreign || !pt->ev.io_loop) continue; if (!context->finalize_destroy_after_internal_loops_stopped) { ev_break(pt->ev.io_loop, EVBREAK_ONE); continue; } while (budget-- && (m = ev_run(pt->ev.io_loop, 0))) ; ev_loop_destroy(pt->ev.io_loop); } return 0; } static int elops_init_vhost_listen_wsi_ev(struct lws *wsi) { int fd; if (!wsi) { assert(0); return 0; } wsi->w_read.context = wsi->context; wsi->w_write.context = wsi->context; if (wsi->role_ops->file_handle) fd = wsi->desc.filefd; else fd = wsi->desc.sockfd; ev_io_init(&wsi->w_read.ev.watcher, lws_accept_cb, fd, EV_READ); ev_io_init(&wsi->w_write.ev.watcher, lws_accept_cb, fd, EV_WRITE); elops_io_ev(wsi, LWS_EV_START | LWS_EV_READ); return 0; } static void elops_destroy_wsi_ev(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; ev_io_stop(pt->ev.io_loop, &wsi->w_read.ev.watcher); ev_io_stop(pt->ev.io_loop, &wsi->w_write.ev.watcher); } struct lws_event_loop_ops event_loop_ops_ev = { /* name */ "libev", /* init_context */ elops_init_context_ev, /* destroy_context1 */ NULL, /* destroy_context2 */ elops_destroy_context2_ev, /* init_vhost_listen_wsi */ elops_init_vhost_listen_wsi_ev, /* init_pt */ elops_init_pt_ev, /* wsi_logical_close */ NULL, /* check_client_connect_ok */ NULL, /* close_handle_manually */ NULL, /* accept */ elops_accept_ev, /* io */ elops_io_ev, /* run_pt */ elops_run_pt_ev, /* destroy_pt */ elops_destroy_pt_ev, /* destroy wsi */ elops_destroy_wsi_ev, /* periodic_events_available */ 0, }; libwebsockets-3.2.1/lib/event-libs/libev/private.h000066400000000000000000000031601357643561300221340ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is included from core/private.h if LWS_WITH_LIBEV */ #include #define LWS_EV_REFCOUNT_STATIC_HANDLE_NEW(_x, _ctx) \ { (_x)->data = _ctx; \ _ctx->count_event_loop_static_asset_handles++; } #define LWS_EV_REFCOUNT_STATIC_HANDLE_TO_CONTEXT(_x) \ ((struct lws_context *)(_x)->data))) #define LWS_EV_REFCOUNT_STATIC_HANDLE_DESTROYED(_x) \ (--(LWS_UV_REFCOUNT_STATIC_HANDLE_TO_CONTEXT(_x)-> \ count_event_loop_static_asset_handles)) struct lws_pt_eventlibs_libev { struct ev_loop *io_loop; struct ev_timer hrtimer; struct ev_idle idle; }; struct lws_io_watcher_libev { ev_io watcher; }; struct lws_signal_watcher_libev { ev_signal watcher; }; struct lws_context_eventlibs_libev { int placeholder; }; extern struct lws_event_loop_ops event_loop_ops_ev; libwebsockets-3.2.1/lib/event-libs/libevent/000077500000000000000000000000001357643561300210205ustar00rootroot00000000000000libwebsockets-3.2.1/lib/event-libs/libevent/libevent.c000066400000000000000000000237671357643561300230130ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" static void lws_event_hrtimer_cb(int fd, short event, void *p) { struct lws_context_per_thread *pt = (struct lws_context_per_thread *)p; struct timeval tv; lws_usec_t us; lws_pt_lock(pt, __func__); us = __lws_sul_service_ripe(&pt->pt_sul_owner, lws_now_usecs()); if (us) { tv.tv_sec = us / LWS_US_PER_SEC; tv.tv_usec = us - (tv.tv_sec * LWS_US_PER_SEC); evtimer_add(pt->event.hrtimer, &tv); } lws_pt_unlock(pt); } static void lws_event_idle_timer_cb(int fd, short event, void *p) { struct lws_context_per_thread *pt = (struct lws_context_per_thread *)p; struct timeval tv; lws_usec_t us; lws_service_do_ripe_rxflow(pt); /* * is there anybody with pending stuff that needs service forcing? */ if (!lws_service_adjust_timeout(pt->context, 1, pt->tid)) { /* -1 timeout means just do forced service */ _lws_plat_service_forced_tsi(pt->context, pt->tid); /* still somebody left who wants forced service? */ if (!lws_service_adjust_timeout(pt->context, 1, pt->tid)) { /* yes... come back again later */ tv.tv_sec = 0; tv.tv_usec = 1000; evtimer_add(pt->event.idle_timer, &tv); return; } } lwsl_debug("%s: wait\n", __func__); /* account for hrtimer */ lws_pt_lock(pt, __func__); us = __lws_sul_service_ripe(&pt->pt_sul_owner, lws_now_usecs()); if (us) { tv.tv_sec = us / LWS_US_PER_SEC; tv.tv_usec = us - (tv.tv_sec * LWS_US_PER_SEC); evtimer_add(pt->event.hrtimer, &tv); } lws_pt_unlock(pt); } static void lws_event_cb(evutil_socket_t sock_fd, short revents, void *ctx) { struct lws_io_watcher *lws_io = (struct lws_io_watcher *)ctx; struct lws_context *context = lws_io->context; struct lws_context_per_thread *pt; struct lws_pollfd eventfd; struct timeval tv; struct lws *wsi; if (revents & EV_TIMEOUT) return; /* !!! EV_CLOSED doesn't exist in libevent2 */ #if LIBEVENT_VERSION_NUMBER < 0x02000000 if (revents & EV_CLOSED) { event_del(lws_io->event.watcher); event_free(lws_io->event.watcher); return; } #endif eventfd.fd = sock_fd; eventfd.events = 0; eventfd.revents = 0; if (revents & EV_READ) { eventfd.events |= LWS_POLLIN; eventfd.revents |= LWS_POLLIN; } if (revents & EV_WRITE) { eventfd.events |= LWS_POLLOUT; eventfd.revents |= LWS_POLLOUT; } wsi = wsi_from_fd(context, sock_fd); if (!wsi) { return; } pt = &context->pt[(int)wsi->tsi]; lws_service_fd_tsi(context, &eventfd, wsi->tsi); /* set the idle timer for 1ms ahead */ tv.tv_sec = 0; tv.tv_usec = 1000; evtimer_add(pt->event.idle_timer, &tv); } LWS_VISIBLE void lws_event_sigint_cb(evutil_socket_t sock_fd, short revents, void *ctx) { struct lws_context_per_thread *pt = ctx; struct event *signal = (struct event *)ctx; if (pt->context->eventlib_signal_cb) { pt->context->eventlib_signal_cb((void *)(lws_intptr_t)sock_fd, event_get_signal(signal)); return; } if (!pt->event_loop_foreign) event_base_loopbreak(pt->event.io_loop); } static int elops_init_pt_event(struct lws_context *context, void *_loop, int tsi) { struct lws_vhost *vh = context->vhost_list; struct event_base *loop = (struct event_base *)_loop; struct lws_context_per_thread *pt = &context->pt[tsi]; lwsl_info("%s: loop %p\n", __func__, _loop); if (!loop) loop = event_base_new(); else context->pt[tsi].event_loop_foreign = 1; if (!loop) { lwsl_err("%s: creating event base failed\n", __func__); return -1; } pt->event.io_loop = loop; /* * Initialize all events with the listening sockets * and register a callback for read operations */ while (vh) { if (vh->lserv_wsi) { vh->lserv_wsi->w_read.context = context; vh->lserv_wsi->w_read.event.watcher = event_new( loop, vh->lserv_wsi->desc.sockfd, (EV_READ | EV_PERSIST), lws_event_cb, &vh->lserv_wsi->w_read); event_add(vh->lserv_wsi->w_read.event.watcher, NULL); } vh = vh->vhost_next; } /* static event loop objects */ pt->event.hrtimer = event_new(loop, -1, EV_PERSIST, lws_event_hrtimer_cb, pt); pt->event.idle_timer = event_new(loop, -1, 0, lws_event_idle_timer_cb, pt); /* Register the signal watcher unless it's a foreign loop */ if (pt->event_loop_foreign) return 0; pt->w_sigint.event.watcher = evsignal_new(loop, SIGINT, lws_event_sigint_cb, pt); event_add(pt->w_sigint.event.watcher, NULL); return 0; } static int elops_init_context_event(struct lws_context *context, const struct lws_context_creation_info *info) { int n; context->eventlib_signal_cb = info->signal_cb; for (n = 0; n < context->count_threads; n++) context->pt[n].w_sigint.context = context; return 0; } static int elops_accept_event(struct lws *wsi) { struct lws_context *context = lws_get_context(wsi); struct lws_context_per_thread *pt; int fd; wsi->w_read.context = context; wsi->w_write.context = context; // Initialize the event pt = &context->pt[(int)wsi->tsi]; if (wsi->role_ops->file_handle) fd = wsi->desc.filefd; else fd = wsi->desc.sockfd; wsi->w_read.event.watcher = event_new(pt->event.io_loop, fd, (EV_READ | EV_PERSIST), lws_event_cb, &wsi->w_read); wsi->w_write.event.watcher = event_new(pt->event.io_loop, fd, (EV_WRITE | EV_PERSIST), lws_event_cb, &wsi->w_write); return 0; } static void elops_io_event(struct lws *wsi, int flags) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; if (!pt->event.io_loop || wsi->context->being_destroyed) return; assert((flags & (LWS_EV_START | LWS_EV_STOP)) && (flags & (LWS_EV_READ | LWS_EV_WRITE))); if (flags & LWS_EV_START) { if (flags & LWS_EV_WRITE) event_add(wsi->w_write.event.watcher, NULL); if (flags & LWS_EV_READ) event_add(wsi->w_read.event.watcher, NULL); } else { if (flags & LWS_EV_WRITE) event_del(wsi->w_write.event.watcher); if (flags & LWS_EV_READ) event_del(wsi->w_read.event.watcher); } } static void elops_run_pt_event(struct lws_context *context, int tsi) { /* Run / Dispatch the event_base loop */ if (context->pt[tsi].event.io_loop) event_base_dispatch(context->pt[tsi].event.io_loop); } static void elops_destroy_pt_event(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_vhost *vh = context->vhost_list; lwsl_info("%s\n", __func__); if (!pt->event.io_loop) return; /* * Free all events with the listening sockets */ while (vh) { if (vh->lserv_wsi) { event_free(vh->lserv_wsi->w_read.event.watcher); vh->lserv_wsi->w_read.event.watcher = NULL; event_free(vh->lserv_wsi->w_write.event.watcher); vh->lserv_wsi->w_write.event.watcher = NULL; } vh = vh->vhost_next; } event_free(pt->event.hrtimer); event_free(pt->event.idle_timer); if (!pt->event_loop_foreign) { event_del(pt->w_sigint.event.watcher); event_free(pt->w_sigint.event.watcher); event_base_free(pt->event.io_loop); } } static void elops_destroy_wsi_event(struct lws *wsi) { if (!wsi) return; if (wsi->w_read.event.watcher) event_free(wsi->w_read.event.watcher); if (wsi->w_write.event.watcher) event_free(wsi->w_write.event.watcher); } static int elops_init_vhost_listen_wsi_event(struct lws *wsi) { struct lws_context_per_thread *pt; int fd; if (!wsi) { assert(0); return 0; } wsi->w_read.context = wsi->context; wsi->w_write.context = wsi->context; pt = &wsi->context->pt[(int)wsi->tsi]; if (wsi->role_ops->file_handle) fd = wsi->desc.filefd; else fd = wsi->desc.sockfd; wsi->w_read.event.watcher = event_new(pt->event.io_loop, fd, (EV_READ | EV_PERSIST), lws_event_cb, &wsi->w_read); wsi->w_write.event.watcher = event_new(pt->event.io_loop, fd, (EV_WRITE | EV_PERSIST), lws_event_cb, &wsi->w_write); elops_io_event(wsi, LWS_EV_START | LWS_EV_READ); return 0; } static int elops_destroy_context2_event(struct lws_context *context) { struct lws_context_per_thread *pt; int n, m; lwsl_debug("%s: in\n", __func__); for (n = 0; n < context->count_threads; n++) { int budget = 1000; pt = &context->pt[n]; /* only for internal loops... */ if (pt->event_loop_foreign || !pt->event.io_loop) continue; if (!context->finalize_destroy_after_internal_loops_stopped) { event_base_loopexit(pt->event.io_loop, NULL); continue; } while (budget-- && (m = event_base_loop(pt->event.io_loop, EVLOOP_NONBLOCK))) ; #if 0 if (m) { lwsl_err("%s: tsi %d: NOT everything closed\n", __func__, n); event_base_dump_events(pt->event.io_loop, stderr); } else lwsl_debug("%s: %d: everything closed OK\n", __func__, n); #endif event_base_free(pt->event.io_loop); } lwsl_debug("%s: out\n", __func__); return 0; } struct lws_event_loop_ops event_loop_ops_event = { /* name */ "libevent", /* init_context */ elops_init_context_event, /* destroy_context1 */ NULL, /* destroy_context2 */ elops_destroy_context2_event, /* init_vhost_listen_wsi */ elops_init_vhost_listen_wsi_event, /* init_pt */ elops_init_pt_event, /* wsi_logical_close */ NULL, /* check_client_connect_ok */ NULL, /* close_handle_manually */ NULL, /* accept */ elops_accept_event, /* io */ elops_io_event, /* run_pt */ elops_run_pt_event, /* destroy_pt */ elops_destroy_pt_event, /* destroy wsi */ elops_destroy_wsi_event, /* periodic_events_available */ 0, }; libwebsockets-3.2.1/lib/event-libs/libevent/private.h000066400000000000000000000024431357643561300226460ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is included from core/private.h if LWS_WITH_LIBEVENT */ #include struct lws_pt_eventlibs_libevent { struct event_base *io_loop; struct event *hrtimer; struct event *idle_timer; }; struct lws_io_watcher_libevent { struct event *watcher; }; struct lws_signal_watcher_libevent { struct event *watcher; }; struct lws_context_eventlibs_libevent { int placeholder; }; extern struct lws_event_loop_ops event_loop_ops_event; libwebsockets-3.2.1/lib/event-libs/libuv/000077500000000000000000000000001357643561300203315ustar00rootroot00000000000000libwebsockets-3.2.1/lib/event-libs/libuv/libuv.c000066400000000000000000000535671357643561300216360ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" static void lws_uv_sultimer_cb(uv_timer_t *timer #if UV_VERSION_MAJOR == 0 , int status #endif ) { struct lws_context_per_thread *pt = lws_container_of(timer, struct lws_context_per_thread, uv.sultimer); lws_usec_t us; lws_pt_lock(pt, __func__); us = __lws_sul_service_ripe(&pt->pt_sul_owner, lws_now_usecs()); if (us) uv_timer_start(&pt->uv.sultimer, lws_uv_sultimer_cb, LWS_US_TO_MS(us), 0); lws_pt_unlock(pt); } static void lws_uv_idle(uv_idle_t *handle #if UV_VERSION_MAJOR == 0 , int status #endif ) { struct lws_context_per_thread *pt = lws_container_of(handle, struct lws_context_per_thread, uv.idle); lws_usec_t us; lws_service_do_ripe_rxflow(pt); /* * is there anybody with pending stuff that needs service forcing? */ if (!lws_service_adjust_timeout(pt->context, 1, pt->tid)) /* -1 timeout means just do forced service */ _lws_plat_service_forced_tsi(pt->context, pt->tid); /* account for sultimer */ lws_pt_lock(pt, __func__); us = __lws_sul_service_ripe(&pt->pt_sul_owner, lws_now_usecs()); if (us) uv_timer_start(&pt->uv.sultimer, lws_uv_sultimer_cb, LWS_US_TO_MS(us), 0); lws_pt_unlock(pt); /* there is nobody who needs service forcing, shut down idle */ uv_idle_stop(handle); } static void lws_io_cb(uv_poll_t *watcher, int status, int revents) { struct lws *wsi = (struct lws *)((uv_handle_t *)watcher)->data; struct lws_context *context = wsi->context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws_pollfd eventfd; #if defined(WIN32) || defined(_WIN32) eventfd.fd = watcher->socket; #else eventfd.fd = watcher->io_watcher.fd; #endif eventfd.events = 0; eventfd.revents = 0; if (status < 0) { /* * At this point status will be an UV error, like UV_EBADF, * we treat all errors as LWS_POLLHUP * * You might want to return; instead of servicing the fd in * some cases */ if (status == UV_EAGAIN) return; eventfd.events |= LWS_POLLHUP; eventfd.revents |= LWS_POLLHUP; } else { if (revents & UV_READABLE) { eventfd.events |= LWS_POLLIN; eventfd.revents |= LWS_POLLIN; } if (revents & UV_WRITABLE) { eventfd.events |= LWS_POLLOUT; eventfd.revents |= LWS_POLLOUT; } } lws_service_fd_tsi(context, &eventfd, wsi->tsi); uv_idle_start(&pt->uv.idle, lws_uv_idle); } /* * This does not actually stop the event loop. The reason is we have to pass * libuv handle closures through its event loop. So this tries to close all * wsi, and set a flag; when all the wsi closures are finalized then we * actually stop the libuv event loops. */ static void lws_libuv_stop(struct lws_context *context) { struct lws_context_per_thread *pt; int n, m; lwsl_err("%s\n", __func__); if (context->requested_kill) { lwsl_err("%s: ignoring\n", __func__); return; } context->requested_kill = 1; m = context->count_threads; context->being_destroyed = 1; /* * Phase 1: start the close of every dynamic uv handle */ while (m--) { pt = &context->pt[m]; if (pt->pipe_wsi) { uv_poll_stop(pt->pipe_wsi->w_read.uv.pwatcher); lws_destroy_event_pipe(pt->pipe_wsi); pt->pipe_wsi = NULL; } for (n = 0; (unsigned int)n < context->pt[m].fds_count; n++) { struct lws *wsi = wsi_from_fd(context, pt->fds[n].fd); if (!wsi) continue; lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY, __func__ /* no protocol close */); n--; } } lwsl_info("%s: started closing all wsi\n", __func__); /* we cannot have completed... there are at least the cancel pipes */ } static void lws_uv_signal_handler(uv_signal_t *watcher, int signum) { struct lws_context *context = watcher->data; if (context->eventlib_signal_cb) { context->eventlib_signal_cb((void *)watcher, signum); return; } lwsl_err("internal signal handler caught signal %d\n", signum); lws_libuv_stop(watcher->data); } static const int sigs[] = { SIGINT, SIGTERM, SIGSEGV, SIGFPE, SIGHUP }; /* * Closing Phase 2: Close callback for a static UV asset */ static void lws_uv_close_cb_sa(uv_handle_t *handle) { struct lws_context *context = LWS_UV_REFCOUNT_STATIC_HANDLE_TO_CONTEXT(handle); int n; lwsl_info("%s: sa left %d: dyn left: %d\n", __func__, context->count_event_loop_static_asset_handles, context->count_wsi_allocated); /* any static assets left? */ if (LWS_UV_REFCOUNT_STATIC_HANDLE_DESTROYED(handle) || context->count_wsi_allocated) return; /* * That's it... all wsi were down, and now every * static asset lws had a UV handle for is down. * * Stop the loop so we can get out of here. */ for (n = 0; n < context->count_threads; n++) { struct lws_context_per_thread *pt = &context->pt[n]; if (pt->uv.io_loop && !pt->event_loop_foreign) uv_stop(pt->uv.io_loop); } if (!context->pt[0].event_loop_foreign) { lwsl_info("%s: calling lws_context_destroy2\n", __func__); lws_context_destroy2(context); } lwsl_info("%s: all done\n", __func__); } /* * These must be called by protocols that want to use libuv objects directly... * * .... when the libuv object is created... */ LWS_VISIBLE void lws_libuv_static_refcount_add(uv_handle_t *h, struct lws_context *context) { LWS_UV_REFCOUNT_STATIC_HANDLE_NEW(h, context); } /* * ... and in the close callback when the object is closed. */ LWS_VISIBLE void lws_libuv_static_refcount_del(uv_handle_t *h) { lws_uv_close_cb_sa(h); } static void lws_uv_close_cb(uv_handle_t *handle) { } static void lws_uv_walk_cb(uv_handle_t *handle, void *arg) { if (!uv_is_closing(handle)) uv_close(handle, lws_uv_close_cb); } LWS_VISIBLE void lws_close_all_handles_in_loop(uv_loop_t *loop) { uv_walk(loop, lws_uv_walk_cb, NULL); } LWS_VISIBLE void lws_libuv_stop_without_kill(const struct lws_context *context, int tsi) { if (context->pt[tsi].uv.io_loop) uv_stop(context->pt[tsi].uv.io_loop); } LWS_VISIBLE uv_loop_t * lws_uv_getloop(struct lws_context *context, int tsi) { if (context->pt[tsi].uv.io_loop) return context->pt[tsi].uv.io_loop; return NULL; } int lws_libuv_check_watcher_active(struct lws *wsi) { uv_handle_t *h = (uv_handle_t *)wsi->w_read.uv.pwatcher; if (!h) return 0; return uv_is_active(h); } #if defined(LWS_WITH_PLUGINS) && (UV_VERSION_MAJOR > 0) int lws_uv_plugins_init(struct lws_context *context, const char * const *d) { struct lws_plugin_capability lcaps; struct lws_plugin *plugin; lws_plugin_init_func initfunc; int m, ret = 0; void *v; uv_dirent_t dent; uv_fs_t req; char path[256]; uv_lib_t lib; int pofs = 0; #if defined(__MINGW32__) || !defined(WIN32) pofs = 3; #endif lib.errmsg = NULL; lib.handle = NULL; uv_loop_init(&context->uv.loop); lwsl_notice(" Plugins:\n"); while (d && *d) { lwsl_notice(" Scanning %s\n", *d); m =uv_fs_scandir(&context->uv.loop, &req, *d, 0, NULL); if (m < 1) { lwsl_err("Scandir on %s failed\n", *d); return 1; } while (uv_fs_scandir_next(&req, &dent) != UV_EOF) { if (strlen(dent.name) < 7) continue; lwsl_notice(" %s\n", dent.name); lws_snprintf(path, sizeof(path) - 1, "%s/%s", *d, dent.name); if (uv_dlopen(path, &lib)) { uv_dlerror(&lib); lwsl_err("Error loading DSO: %s\n", lib.errmsg); uv_dlclose(&lib); goto bail; } /* we could open it, can we get his init function? */ #if !defined(WIN32) && !defined(__MINGW32__) m = lws_snprintf(path, sizeof(path) - 1, "init_%s", dent.name + pofs /* snip lib... */); path[m - 3] = '\0'; /* snip the .so */ #else m = lws_snprintf(path, sizeof(path) - 1, "init_%s", dent.name + pofs); path[m - 4] = '\0'; /* snip the .dll */ #endif if (uv_dlsym(&lib, path, &v)) { uv_dlerror(&lib); lwsl_err("Failed to get %s on %s: %s", path, dent.name, lib.errmsg); uv_dlclose(&lib); goto bail; } initfunc = (lws_plugin_init_func)v; lcaps.api_magic = LWS_PLUGIN_API_MAGIC; m = initfunc(context, &lcaps); if (m) { lwsl_err("Init %s failed %d\n", dent.name, m); goto skip; } plugin = lws_malloc(sizeof(*plugin), "plugin"); if (!plugin) { uv_dlclose(&lib); lwsl_err("OOM\n"); goto bail; } plugin->list = context->plugin_list; context->plugin_list = plugin; lws_strncpy(plugin->name, dent.name, sizeof(plugin->name)); plugin->lib = lib; plugin->caps = lcaps; context->plugin_protocol_count += lcaps.count_protocols; context->plugin_extension_count += lcaps.count_extensions; continue; skip: uv_dlclose(&lib); } bail: uv_fs_req_cleanup(&req); d++; } return ret; } int lws_uv_plugins_destroy(struct lws_context *context) { struct lws_plugin *plugin = context->plugin_list, *p; lws_plugin_destroy_func func; char path[256]; int pofs = 0; void *v; int m; #if defined(__MINGW32__) || !defined(WIN32) pofs = 3; #endif if (!plugin) return 0; while (plugin) { p = plugin; #if !defined(WIN32) && !defined(__MINGW32__) m = lws_snprintf(path, sizeof(path) - 1, "destroy_%s", plugin->name + pofs); path[m - 3] = '\0'; #else m = lws_snprintf(path, sizeof(path) - 1, "destroy_%s", plugin->name + pofs); path[m - 4] = '\0'; #endif if (uv_dlsym(&plugin->lib, path, &v)) { uv_dlerror(&plugin->lib); lwsl_err("Failed to get %s on %s: %s", path, plugin->name, plugin->lib.errmsg); } else { func = (lws_plugin_destroy_func)v; m = func(context); if (m) lwsl_err("Destroying %s failed %d\n", plugin->name, m); } uv_dlclose(&p->lib); plugin = p->list; p->list = NULL; free(p); } context->plugin_list = NULL; while (uv_loop_close(&context->uv.loop)) ; return 0; } #endif static int elops_init_context_uv(struct lws_context *context, const struct lws_context_creation_info *info) { int n; context->eventlib_signal_cb = info->signal_cb; for (n = 0; n < context->count_threads; n++) context->pt[n].w_sigint.context = context; return 0; } static int elops_destroy_context1_uv(struct lws_context *context) { struct lws_context_per_thread *pt; int n, m = 0; for (n = 0; n < context->count_threads; n++) { int budget = 10000; pt = &context->pt[n]; /* only for internal loops... */ if (!pt->event_loop_foreign) { while (budget-- && (m = uv_run(pt->uv.io_loop, UV_RUN_NOWAIT))) ; if (m) lwsl_err("%s: tsi %d: not all closed\n", __func__, n); } } /* call destroy2 if internal loop */ return !context->pt[0].event_loop_foreign; } static int elops_destroy_context2_uv(struct lws_context *context) { struct lws_context_per_thread *pt; int n, internal = 0; for (n = 0; n < context->count_threads; n++) { pt = &context->pt[n]; /* only for internal loops... */ if (!pt->event_loop_foreign && pt->uv.io_loop) { internal = 1; if (!context->finalize_destroy_after_internal_loops_stopped) uv_stop(pt->uv.io_loop); else { #if UV_VERSION_MAJOR > 0 uv_loop_close(pt->uv.io_loop); #endif lws_free_set_NULL(pt->uv.io_loop); } } } return internal; } static int elops_wsi_logical_close_uv(struct lws *wsi) { if (!lws_socket_is_valid(wsi->desc.sockfd)) return 0; if (wsi->listener || wsi->event_pipe) { lwsl_debug("%s: %p: %d %d stop listener / pipe poll\n", __func__, wsi, wsi->listener, wsi->event_pipe); if (wsi->w_read.uv.pwatcher) uv_poll_stop(wsi->w_read.uv.pwatcher); } lwsl_debug("%s: lws_libuv_closehandle: wsi %p\n", __func__, wsi); /* * libuv has to do his own close handle processing asynchronously */ lws_libuv_closehandle(wsi); return 1; /* do not complete the wsi close, uv close cb will do it */ } static int elops_check_client_connect_ok_uv(struct lws *wsi) { if (lws_libuv_check_watcher_active(wsi)) { lwsl_warn("Waiting for libuv watcher to close\n"); return 1; } return 0; } static void lws_libuv_closewsi_m(uv_handle_t* handle) { lws_sockfd_type sockfd = (lws_sockfd_type)(lws_intptr_t)handle->data; lwsl_debug("%s: sockfd %d\n", __func__, sockfd); compatible_close(sockfd); lws_free(handle); } static void elops_close_handle_manually_uv(struct lws *wsi) { uv_handle_t *h = (uv_handle_t *)wsi->w_read.uv.pwatcher; lwsl_debug("%s: lws_libuv_closehandle: wsi %p\n", __func__, wsi); /* * the "manual" variant only closes the handle itself and the * related fd. handle->data is the fd. */ h->data = (void *)(lws_intptr_t)wsi->desc.sockfd; /* * We take responsibility to close / destroy these now. * Remove any trace from the wsi. */ wsi->desc.sockfd = LWS_SOCK_INVALID; wsi->w_read.uv.pwatcher = NULL; wsi->told_event_loop_closed = 1; uv_close(h, lws_libuv_closewsi_m); } static int elops_accept_uv(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; wsi->w_read.context = wsi->context; wsi->w_read.uv.pwatcher = lws_malloc(sizeof(*wsi->w_read.uv.pwatcher), "uvh"); if (!wsi->w_read.uv.pwatcher) return -1; if (wsi->role_ops->file_handle) uv_poll_init(pt->uv.io_loop, wsi->w_read.uv.pwatcher, (int)(long long)wsi->desc.filefd); else uv_poll_init_socket(pt->uv.io_loop, wsi->w_read.uv.pwatcher, wsi->desc.sockfd); ((uv_handle_t *)wsi->w_read.uv.pwatcher)->data = (void *)wsi; return 0; } static void elops_io_uv(struct lws *wsi, int flags) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; struct lws_io_watcher *w = &wsi->w_read; int current_events = w->actual_events & (UV_READABLE | UV_WRITABLE); lwsl_debug("%s: %p: %d\n", __func__, wsi, flags); /* w->context is set after the loop is initialized */ if (!pt->uv.io_loop || !w->context) { lwsl_info("%s: no io loop yet\n", __func__); return; } if (!((flags & (LWS_EV_START | LWS_EV_STOP)) && (flags & (LWS_EV_READ | LWS_EV_WRITE)))) { lwsl_err("%s: assert: flags %d", __func__, flags); assert(0); } if (!w->uv.pwatcher || wsi->told_event_loop_closed) { lwsl_err("%s: no watcher\n", __func__); return; } if (flags & LWS_EV_START) { if (flags & LWS_EV_WRITE) current_events |= UV_WRITABLE; if (flags & LWS_EV_READ) current_events |= UV_READABLE; uv_poll_start(w->uv.pwatcher, current_events, lws_io_cb); } else { if (flags & LWS_EV_WRITE) current_events &= ~UV_WRITABLE; if (flags & LWS_EV_READ) current_events &= ~UV_READABLE; if (!(current_events & (UV_READABLE | UV_WRITABLE))) uv_poll_stop(w->uv.pwatcher); else uv_poll_start(w->uv.pwatcher, current_events, lws_io_cb); } w->actual_events = current_events; } static int elops_init_vhost_listen_wsi_uv(struct lws *wsi) { struct lws_context_per_thread *pt; int n; if (!wsi) return 0; if (wsi->w_read.context) return 0; pt = &wsi->context->pt[(int)wsi->tsi]; if (!pt->uv.io_loop) return 0; wsi->w_read.context = wsi->context; wsi->w_read.uv.pwatcher = lws_malloc(sizeof(*wsi->w_read.uv.pwatcher), "uvh"); if (!wsi->w_read.uv.pwatcher) return -1; n = uv_poll_init_socket(pt->uv.io_loop, wsi->w_read.uv.pwatcher, wsi->desc.sockfd); if (n) { lwsl_err("uv_poll_init failed %d, sockfd=%p\n", n, (void *)(lws_intptr_t)wsi->desc.sockfd); return -1; } ((uv_handle_t *)wsi->w_read.uv.pwatcher)->data = (void *)wsi; elops_io_uv(wsi, LWS_EV_START | LWS_EV_READ); return 0; } static void elops_run_pt_uv(struct lws_context *context, int tsi) { if (context->pt[tsi].uv.io_loop) uv_run(context->pt[tsi].uv.io_loop, 0); } static void elops_destroy_pt_uv(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; int m, ns; lwsl_info("%s: %d\n", __func__, tsi); if (!lws_check_opt(context->options, LWS_SERVER_OPTION_LIBUV)) return; if (!pt->uv.io_loop) return; if (pt->event_loop_destroy_processing_done) return; pt->event_loop_destroy_processing_done = 1; if (!pt->event_loop_foreign) { uv_signal_stop(&pt->w_sigint.uv.watcher); ns = LWS_ARRAY_SIZE(sigs); if (lws_check_opt(context->options, LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN)) ns = 2; for (m = 0; m < ns; m++) { uv_signal_stop(&pt->uv.signals[m]); uv_close((uv_handle_t *)&pt->uv.signals[m], lws_uv_close_cb_sa); } } else lwsl_debug("%s: not closing pt signals\n", __func__); uv_timer_stop(&pt->uv.sultimer); uv_close((uv_handle_t *)&pt->uv.sultimer, lws_uv_close_cb_sa); uv_idle_stop(&pt->uv.idle); uv_close((uv_handle_t *)&pt->uv.idle, lws_uv_close_cb_sa); } /* * This needs to be called after vhosts have been defined. * * If later, after server start, another vhost is added, this must be * called again to bind the vhost */ LWS_VISIBLE int elops_init_pt_uv(struct lws_context *context, void *_loop, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_vhost *vh = context->vhost_list; int status = 0, n, ns, first = 1; uv_loop_t *loop = (uv_loop_t *)_loop; if (!pt->uv.io_loop) { if (!loop) { loop = lws_malloc(sizeof(*loop), "libuv loop"); if (!loop) { lwsl_err("OOM\n"); return -1; } #if UV_VERSION_MAJOR > 0 uv_loop_init(loop); #else lwsl_err("This libuv is too old to work...\n"); return 1; #endif pt->event_loop_foreign = 0; } else { lwsl_notice(" Using foreign event loop...\n"); pt->event_loop_foreign = 1; } pt->uv.io_loop = loop; uv_idle_init(loop, &pt->uv.idle); LWS_UV_REFCOUNT_STATIC_HANDLE_NEW(&pt->uv.idle, context); ns = LWS_ARRAY_SIZE(sigs); if (lws_check_opt(context->options, LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN)) ns = 2; if (!pt->event_loop_foreign) { assert(ns <= (int)LWS_ARRAY_SIZE(pt->uv.signals)); for (n = 0; n < ns; n++) { uv_signal_init(loop, &pt->uv.signals[n]); LWS_UV_REFCOUNT_STATIC_HANDLE_NEW(&pt->uv.signals[n], context); pt->uv.signals[n].data = pt->context; uv_signal_start(&pt->uv.signals[n], lws_uv_signal_handler, sigs[n]); } } } else first = 0; /* * Initialize the accept wsi read watcher with all the listening sockets * and register a callback for read operations * * We have to do it here because the uv loop(s) are not * initialized until after context creation. */ while (vh) { if (elops_init_vhost_listen_wsi_uv(vh->lserv_wsi) == -1) return -1; vh = vh->vhost_next; } if (!first) return status; uv_timer_init(pt->uv.io_loop, &pt->uv.sultimer); LWS_UV_REFCOUNT_STATIC_HANDLE_NEW(&pt->uv.sultimer, context); return status; } static void lws_libuv_closewsi(uv_handle_t* handle) { struct lws *wsi = (struct lws *)handle->data; struct lws_context *context = lws_get_context(wsi); struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; #if !defined(LWS_WITHOUT_SERVER) int lspd = 0; #endif lwsl_info("%s: %p\n", __func__, wsi); /* * We get called back here for every wsi that closes */ #if !defined(LWS_WITHOUT_SERVER) if (wsi->role_ops == &role_ops_listen && wsi->context->deprecated) { lspd = 1; context->deprecation_pending_listen_close_count--; if (!context->deprecation_pending_listen_close_count) lspd = 2; } #endif lws_pt_lock(pt, __func__); __lws_close_free_wsi_final(wsi); lws_pt_unlock(pt); /* it's our job to close the handle finally */ lws_free(handle); #if !defined(LWS_WITHOUT_SERVER) if (lspd == 2 && context->deprecation_cb) { lwsl_notice("calling deprecation callback\n"); context->deprecation_cb(); } #endif lwsl_info("%s: sa left %d: dyn left: %d (rk %d)\n", __func__, context->count_event_loop_static_asset_handles, context->count_wsi_allocated, context->requested_kill); /* * eventually, we closed all the wsi... */ if (context->requested_kill && !context->count_wsi_allocated) { struct lws_vhost *vh = context->vhost_list; int m; /* * Start Closing Phase 2: close of static handles */ lwsl_info("%s: all lws dynamic handles down, closing static\n", __func__); for (m = 0; m < context->count_threads; m++) elops_destroy_pt_uv(context, m); /* protocols may have initialized libuv objects */ while (vh) { lws_vhost_destroy1(vh); vh = vh->vhost_next; } if (!context->count_event_loop_static_asset_handles && context->pt[0].event_loop_foreign) { lwsl_info("%s: call lws_context_destroy2\n", __func__); lws_context_destroy2(context); } } } void lws_libuv_closehandle(struct lws *wsi) { uv_handle_t* handle; if (!wsi->w_read.uv.pwatcher) return; if (wsi->told_event_loop_closed) { // assert(0); return; } lwsl_debug("%s: %p\n", __func__, wsi); wsi->told_event_loop_closed = 1; /* * The normal close path attaches the related wsi as the * handle->data. */ handle = (uv_handle_t *)wsi->w_read.uv.pwatcher; /* ensure we can only do this once */ wsi->w_read.uv.pwatcher = NULL; uv_close(handle, lws_libuv_closewsi); } struct lws_event_loop_ops event_loop_ops_uv = { /* name */ "libuv", /* init_context */ elops_init_context_uv, /* destroy_context1 */ elops_destroy_context1_uv, /* destroy_context2 */ elops_destroy_context2_uv, /* init_vhost_listen_wsi */ elops_init_vhost_listen_wsi_uv, /* init_pt */ elops_init_pt_uv, /* wsi_logical_close */ elops_wsi_logical_close_uv, /* check_client_connect_ok */ elops_check_client_connect_ok_uv, /* close_handle_manually */ elops_close_handle_manually_uv, /* accept */ elops_accept_uv, /* io */ elops_io_uv, /* run_pt */ elops_run_pt_uv, /* destroy_pt */ elops_destroy_pt_uv, /* destroy wsi */ NULL, /* periodic_events_available */ 0, }; libwebsockets-3.2.1/lib/event-libs/libuv/private.h000066400000000000000000000044551357643561300221640ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is included from core/private.h if LWS_WITH_LIBUV */ #include /* * libuv's async destroy cb means that asking to close something doesn't mean * you can destroy it or parent things until after the close completes. * * So we must reference-count creation and close completions with libuv. * * All "static" (per-pt or per-context) uv handles must * * - have their .data set to point to the context * * - contribute to context->uv_count_static_asset_handles * counting */ #define LWS_UV_REFCOUNT_STATIC_HANDLE_NEW(_x, _ctx) \ { uv_handle_t *_uht = (uv_handle_t *)(_x); _uht->data = _ctx; \ _ctx->count_event_loop_static_asset_handles++; } #define LWS_UV_REFCOUNT_STATIC_HANDLE_TO_CONTEXT(_x) \ ((struct lws_context *)((uv_handle_t *)((_x)->data))) #define LWS_UV_REFCOUNT_STATIC_HANDLE_DESTROYED(_x) \ (--(LWS_UV_REFCOUNT_STATIC_HANDLE_TO_CONTEXT(_x)-> \ count_event_loop_static_asset_handles)) struct lws_pt_eventlibs_libuv { uv_loop_t *io_loop; uv_signal_t signals[8]; uv_timer_t sultimer; uv_idle_t idle; }; struct lws_context_eventlibs_libuv { uv_loop_t loop; }; struct lws_io_watcher_libuv { uv_poll_t *pwatcher; }; struct lws_signal_watcher_libuv { uv_signal_t watcher; }; extern struct lws_event_loop_ops event_loop_ops_uv; uv_loop_t * lws_uv_getloop(struct lws_context *context, int tsi); int lws_uv_plugins_init(struct lws_context *context, const char * const *d); int lws_uv_plugins_destroy(struct lws_context *context); libwebsockets-3.2.1/lib/event-libs/poll/000077500000000000000000000000001357643561300201565ustar00rootroot00000000000000libwebsockets-3.2.1/lib/event-libs/poll/poll.c000066400000000000000000000026141357643561300212730ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is included from core/private.h if LWS_ROLE_WS */ #include struct lws_event_loop_ops event_loop_ops_poll = { /* name */ "poll", /* init_context */ NULL, /* destroy_context1 */ NULL, /* destroy_context2 */ NULL, /* init_vhost_listen_wsi */ NULL, /* init_pt */ NULL, /* wsi_logical_close */ NULL, /* check_client_connect_ok */ NULL, /* close_handle_manually */ NULL, /* accept */ NULL, /* io */ NULL, /* run */ NULL, /* destroy_pt */ NULL, /* destroy wsi */ NULL, /* periodic_events_available */ 1, }; libwebsockets-3.2.1/lib/event-libs/poll/private.h000066400000000000000000000016261357643561300220060ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * */ extern struct lws_event_loop_ops event_loop_ops_poll; libwebsockets-3.2.1/lib/event-libs/private.h000066400000000000000000000050321357643561300210330ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is included from core/private.h */ struct lws_event_loop_ops { const char *name; /* event loop-specific context init during context creation */ int (*init_context)(struct lws_context *context, const struct lws_context_creation_info *info); /* called during lws_destroy_context */ int (*destroy_context1)(struct lws_context *context); /* called during lws_destroy_context2 */ int (*destroy_context2)(struct lws_context *context); /* init vhost listening wsi */ int (*init_vhost_listen_wsi)(struct lws *wsi); /* init the event loop for a pt */ int (*init_pt)(struct lws_context *context, void *_loop, int tsi); /* called at end of first phase of close_free_wsi() */ int (*wsi_logical_close)(struct lws *wsi); /* return nonzero if client connect not allowed */ int (*check_client_connect_ok)(struct lws *wsi); /* close handle manually */ void (*close_handle_manually)(struct lws *wsi); /* event loop accept processing */ int (*accept)(struct lws *wsi); /* control wsi active events */ void (*io)(struct lws *wsi, int flags); /* run the event loop for a pt */ void (*run_pt)(struct lws_context *context, int tsi); /* called before pt is destroyed */ void (*destroy_pt)(struct lws_context *context, int tsi); /* called just before wsi is freed */ void (*destroy_wsi)(struct lws *wsi); unsigned int periodic_events_available:1; }; /* bring in event libs private declarations */ #if defined(LWS_WITH_POLL) #include "event-libs/poll/private.h" #endif #if defined(LWS_WITH_LIBUV) #include "event-libs/libuv/private.h" #endif #if defined(LWS_WITH_LIBEVENT) #include "event-libs/libevent/private.h" #endif #if defined(LWS_WITH_LIBEV) #include "event-libs/libev/private.h" #endif libwebsockets-3.2.1/lib/jose/000077500000000000000000000000001357643561300161005ustar00rootroot00000000000000libwebsockets-3.2.1/lib/jose/README.md000066400000000000000000000040611357643561300173600ustar00rootroot00000000000000# JOSE support JOSE is a set of web standards aimed at encapsulating crypto operations flexibly inside JSON objects. Lws provides lightweight apis to performs operations on JWK, JWS and JWE independent of the tls backend in use. The JSON parsing is handled by the lws lejp stream parser. |Part|RFC|Function| |---|---|---| |JWS|[RFC7515](https://tools.ietf.org/html/rfc7515)|JSON Web Signatures| |JWE|[RFC7516](https://tools.ietf.org/html/rfc7516)|JSON Web Encryption| |JWK|[RFC7517](https://tools.ietf.org/html/rfc7517)|JSON Web Keys| |JWA|[RFC7518](https://tools.ietf.org/html/rfc7518)|JSON Web Algorithms| JWA is a set of recommendations for which combinations of algorithms are deemed desirable and secure, which implies what must be done for useful implementations of JWS, JWE and JWK. ## Supported algorithms ### Supported keys - All RFC7517 / JWK forms: octet, RSA and EC - singleton and keys[] arrays of keys supported ### Symmetric ciphers - All common AES varaiants: CBC, CFB128, CFB8, CTR, EVB, OFB, KW and XTS ### Asymmetric ciphers - RSA - EC (P-256, P-384 and P-521 JWA curves) ### Payload auth and crypt - AES_128_CBC_HMAC_SHA_256 - AES_192_CBC_HMAC_SHA_384 - AES_256_CBC_HMAC_SHA_512 - AES_128_GCM For the required and recommended asymmetric algorithms, support currently looks like this |JWK kty|JWA|lws| |---|---|---| |EC|Recommended+|yes| |RSA|Required|yes| |oct|Required|yes| |JWE alg|JWA|lws| |---|---|---| |RSA1_5|Recommended-|yes| |RSA-OAEP|Recommended+|no| |ECDH-ES|Recommended+|no| |JWS alg|JWA|lws| |---|---|---| |HS256|Required|yes| |RS256|Recommended+|yes| |ES256|Recommended|yes| ## Minimal Example tools [JWK](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-jwk) [JWS](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-jws) [JWE](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-jwe) ## API tests See `./minimal-examples/api-tests/api-test-jose/` for example test code. The tests are built and confirmed during CI. libwebsockets-3.2.1/lib/jose/jwe/000077500000000000000000000000001357643561300166655ustar00rootroot00000000000000libwebsockets-3.2.1/lib/jose/jwe/enc/000077500000000000000000000000001357643561300174325ustar00rootroot00000000000000libwebsockets-3.2.1/lib/jose/jwe/enc/aescbc.c000066400000000000000000000166471357643561300210340ustar00rootroot00000000000000/* * libwebsockets - JSON Web Encryption support * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * * JWE code for payload encrypt / decrypt using aescbc * */ #include "core/private.h" #include "jose/jwe/private.h" int lws_jwe_encrypt_cbc_hs(struct lws_jwe *jwe, uint8_t *cek, uint8_t *aad, int aad_len) { int n, hlen = lws_genhmac_size(jwe->jose.enc_alg->hmac_type); uint8_t digest[LWS_GENHASH_LARGEST]; struct lws_gencrypto_keyelem el; struct lws_genhmac_ctx hmacctx; struct lws_genaes_ctx aesctx; uint8_t al[8]; /* Caller must have prepared space for the results */ if (jwe->jws.map.len[LJWE_ATAG] != (unsigned int)hlen / 2) { lwsl_notice("%s: expected tag len %d, got %d\n", __func__, hlen / 2, jwe->jws.map.len[LJWE_ATAG]); return -1; } if (jwe->jws.map.len[LJWE_IV] != 16) { lwsl_notice("expected iv len %d, got %d\n", 16, jwe->jws.map.len[LJWE_IV]); return -1; } /* first create the authentication hmac */ /* JWA Section 5.2.2.1 * * 1. The secondary keys MAC_KEY and ENC_KEY are generated from the * input key K as follows. Each of these two keys is an octet * string. * * MAC_KEY consists of the initial MAC_KEY_LEN octets of K, in * order. * ENC_KEY consists of the final ENC_KEY_LEN octets of K, in * order. */ /* * 2. The IV used is a 128-bit value generated randomly or * pseudorandomly for use in the cipher. */ lws_get_random(jwe->jws.context, (void *)jwe->jws.map.buf[LJWE_IV], 16); /* * 3. The plaintext is CBC encrypted using PKCS #7 padding using * ENC_KEY as the key and the IV. We denote the ciphertext output * from this step as E. */ /* second half is the AES ENC_KEY */ el.buf = cek + (hlen / 2); el.len = hlen / 2; if (lws_genaes_create(&aesctx, LWS_GAESO_ENC, LWS_GAESM_CBC, &el, LWS_GAESP_NO_PADDING, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return -1; } /* * the plaintext gets delivered to us in LJWE_CTXT, this replaces * the plaintext there with the same amount of ciphertext */ n = lws_genaes_crypt(&aesctx, (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], jwe->jws.map.len[LJWE_CTXT], (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], (uint8_t *)jwe->jws.map.buf[LJWE_IV], NULL, NULL, 16); lws_genaes_destroy(&aesctx, NULL, 0); if (n) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); return -1; } /* * 4. The octet string AL is equal to the number of bits in the * Additional Authenticated Data A expressed as a 64-bit unsigned * big-endian integer. */ lws_jwe_be64(aad_len * 8, al); /* first half of the CEK is the MAC key */ if (lws_genhmac_init(&hmacctx, jwe->jose.enc_alg->hmac_type, cek, hlen / 2)) return -1; /* * 5. A message Authentication Tag T is computed by applying HMAC * [RFC2104] to the following data, in order: * * - the Additional Authenticated Data A, * - the Initialization Vector IV, * - the ciphertext E computed in the previous step, and * - the octet string AL defined above. * * The string MAC_KEY is used as the MAC key. We denote the output * of the MAC computed in this step as M. The first T_LEN octets of * M are used as T. */ if (lws_genhmac_update(&hmacctx, aad, aad_len) || lws_genhmac_update(&hmacctx, jwe->jws.map.buf[LJWE_IV], LWS_JWE_AES_IV_BYTES) || /* since we encrypted it, this is the ciphertext */ lws_genhmac_update(&hmacctx, (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], jwe->jws.map.len[LJWE_CTXT]) || lws_genhmac_update(&hmacctx, al, 8)) { lwsl_err("%s: hmac computation failed\n", __func__); lws_genhmac_destroy(&hmacctx, NULL); return -1; } if (lws_genhmac_destroy(&hmacctx, digest)) { lwsl_err("%s: problem destroying hmac\n", __func__); return -1; } /* create tag */ memcpy((void *)jwe->jws.map.buf[LJWE_ATAG], digest, hlen / 2); return jwe->jws.map.len[LJWE_CTXT]; } int lws_jwe_auth_and_decrypt_cbc_hs(struct lws_jwe *jwe, uint8_t *enc_cek, uint8_t *aad, int aad_len) { int n, hlen = lws_genhmac_size(jwe->jose.enc_alg->hmac_type); uint8_t digest[LWS_GENHASH_LARGEST]; struct lws_gencrypto_keyelem el; struct lws_genhmac_ctx hmacctx; struct lws_genaes_ctx aesctx; uint8_t al[8]; /* Some sanity checks on what came in */ if (jwe->jws.map.len[LJWE_ATAG] != (unsigned int)hlen / 2) { lwsl_notice("%s: expected tag len %d, got %d\n", __func__, hlen / 2, jwe->jws.map.len[LJWE_ATAG]); return -1; } if (jwe->jws.map.len[LJWE_IV] != 16) { lwsl_notice("expected iv len %d, got %d\n", 16, jwe->jws.map.len[LJWE_IV]); return -1; } /* Prepare to check authentication * * AAD is the b64 JOSE header. * * The octet string AL, which is the number of bits in AAD expressed as * a big-endian 64-bit unsigned integer is: * * [0, 0, 0, 0, 0, 0, 1, 152] * * Concatenate the AAD, the Initialization Vector, the ciphertext, and * the AL value. * */ lws_jwe_be64(aad_len * 8, al); /* first half of enc_cek is the MAC key */ if (lws_genhmac_init(&hmacctx, jwe->jose.enc_alg->hmac_type, enc_cek, hlen / 2)) { lwsl_err("%s: lws_genhmac_init fail\n", __func__); return -1; } if (lws_genhmac_update(&hmacctx, aad, aad_len) || lws_genhmac_update(&hmacctx, (uint8_t *)jwe->jws.map.buf[LJWE_IV], jwe->jws.map.len[LJWE_IV]) || lws_genhmac_update(&hmacctx, (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], jwe->jws.map.len[LJWE_CTXT]) || lws_genhmac_update(&hmacctx, al, 8)) { lwsl_err("%s: hmac computation failed\n", __func__); lws_genhmac_destroy(&hmacctx, NULL); return -1; } if (lws_genhmac_destroy(&hmacctx, digest)) { lwsl_err("%s: problem destroying hmac\n", __func__); return -1; } /* first half of digest is the auth tag */ if (lws_timingsafe_bcmp(digest, jwe->jws.map.buf[LJWE_ATAG], hlen / 2)) { lwsl_err("%s: auth failed: hmac tag (%d) != ATAG (%d)\n", __func__, hlen / 2, jwe->jws.map.len[LJWE_ATAG]); lwsl_hexdump_notice(jwe->jws.map.buf[LJWE_ATAG], hlen / 2); lwsl_hexdump_notice(digest, hlen / 2); return -1; } /* second half of enc cek is the CEK KEY */ el.buf = enc_cek + (hlen / 2); el.len = hlen / 2; if (lws_genaes_create(&aesctx, LWS_GAESO_DEC, LWS_GAESM_CBC, &el, LWS_GAESP_NO_PADDING, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return -1; } n = lws_genaes_crypt(&aesctx, (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], jwe->jws.map.len[LJWE_CTXT], (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], (uint8_t *)jwe->jws.map.buf[LJWE_IV], NULL, NULL, 16); n |= lws_genaes_destroy(&aesctx, NULL, 0); if (n) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); return -1; } return jwe->jws.map.len[LJWE_CTXT]; } libwebsockets-3.2.1/lib/jose/jwe/enc/aesgcm.c000066400000000000000000000114231357643561300210360ustar00rootroot00000000000000/* * libwebsockets - JSON Web Encryption support * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * * JWE code related to aes gcm * */ #include "core/private.h" #include "jose/jwe/private.h" /* * NOTICE this is AESGCM content encryption, it's not AES GCM key wrapping * * * This section defines the specifics of performing authenticated * encryption with AES in Galois/Counter Mode (GCM) ([AES] and * [NIST.800-38D]). * * The CEK is used as the encryption key. * * Use of an IV of size 96 bits is REQUIRED with this algorithm. * * The requested size of the Authentication Tag output MUST be 128 bits, * regardless of the key size. * * For decrypt: decrypt the KEK, then decrypt the payload * * For encrypt: encrypt the payload, then encrypt the KEK */ /* * encrypting... enc_cek is unencrypted */ int lws_jwe_encrypt_gcm(struct lws_jwe *jwe, uint8_t *enc_cek, uint8_t *aad, int aad_len) { struct lws_gencrypto_keyelem el; struct lws_genaes_ctx aesctx; size_t ivs = LWS_AESGCM_IV; int n; /* Some sanity checks on what came in */ /* MUST be 128-bit for all sizes */ if (jwe->jws.map.len[LJWE_ATAG] != LWS_AESGCM_TAG) { lwsl_notice("%s: AESGCM tag size must be 128b, got %d\n", __func__, jwe->jws.map.len[LJWE_ATAG]); return -1; } if (jwe->jws.map.len[LJWE_IV] != LWS_AESGCM_IV) { /* MUST be 96-bit */ lwsl_notice("%s: AESGCM IV must be 128b, got %d\n", __func__, jwe->jws.map.len[LJWE_IV]); return -1; } /* EKEY is directly the CEK KEY */ el.buf = enc_cek; el.len = jwe->jose.enc_alg->keybits_fixed / 8; if (lws_genaes_create(&aesctx, LWS_GAESO_ENC, LWS_GAESM_GCM, &el, LWS_GAESP_NO_PADDING, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return -1; } /* aad */ n = lws_genaes_crypt(&aesctx, aad, aad_len, NULL, (uint8_t *)jwe->jws.map.buf[LJWE_IV], (uint8_t *)jwe->jws.map.buf[LJWE_ATAG], &ivs, LWS_AESGCM_TAG); if (n) { lwsl_err("%s: lws_genaes_crypt aad failed\n", __func__); return -1; } /* payload */ n = lws_genaes_crypt(&aesctx, (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], jwe->jws.map.len[LJWE_CTXT], (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], (uint8_t *)jwe->jws.map.buf[LJWE_IV], NULL, &ivs, LWS_AESGCM_TAG); n |= lws_genaes_destroy(&aesctx, (uint8_t *)jwe->jws.map.buf[LJWE_ATAG], LWS_AESGCM_TAG); if (n) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); return -1; } return jwe->jws.map.len[LJWE_CTXT]; } int lws_jwe_auth_and_decrypt_gcm(struct lws_jwe *jwe, uint8_t *enc_cek, uint8_t *aad, int aad_len) { struct lws_gencrypto_keyelem el; struct lws_genaes_ctx aesctx; size_t ivs = LWS_AESGCM_IV; uint8_t tag[LWS_AESGCM_TAG]; int n; /* Some sanity checks on what came in */ /* Tag MUST be 128-bit for all sizes */ if (jwe->jws.map.len[LJWE_ATAG] != LWS_AESGCM_TAG) { lwsl_notice("%s: AESGCM tag size must be 128b, got %d\n", __func__, jwe->jws.map.len[LJWE_ATAG]); return -1; } if (jwe->jws.map.len[LJWE_IV] != LWS_AESGCM_IV) { /* MUST be 96-bit */ lwsl_notice("%s: AESGCM IV must be 128b, got %d\n", __func__, jwe->jws.map.len[LJWE_IV]); return -1; } /* EKEY is directly the CEK KEY */ el.buf = enc_cek; el.len = jwe->jose.enc_alg->keybits_fixed / 8; if (lws_genaes_create(&aesctx, LWS_GAESO_DEC, LWS_GAESM_GCM, &el, LWS_GAESP_NO_PADDING, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return -1; } n = lws_genaes_crypt(&aesctx, aad, aad_len, NULL, (uint8_t *)jwe->jws.map.buf[LJWE_IV], (uint8_t *)jwe->jws.map.buf[LJWE_ATAG], &ivs, 16); if (n) { lwsl_err("%s: lws_genaes_crypt aad failed\n", __func__); return -1; } n = lws_genaes_crypt(&aesctx, (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], jwe->jws.map.len[LJWE_CTXT], (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], (uint8_t *)jwe->jws.map.buf[LJWE_IV], (uint8_t *)jwe->jws.map.buf[LJWE_ATAG], &ivs, 16); n |= lws_genaes_destroy(&aesctx, tag, sizeof(tag)); if (n) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); return -1; } return jwe->jws.map.len[LJWE_CTXT]; } libwebsockets-3.2.1/lib/jose/jwe/enc/aeskw.c000066400000000000000000000121261357643561300207120ustar00rootroot00000000000000/* * libwebsockets - JSON Web Encryption support * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * * JWE code related to aeskw cbc * */ #include "core/private.h" #include "jose/jwe/private.h" /* * RFC3394 Key Wrap uses a 128-bit key, and bloats what it is wrapping by * one 8-byte block. So, if you had a 32 byte plaintext CEK to wrap, after * wrapping it becomes a 40 byte wrapped, enciphered, key. * * The CEK comes in from and goes out in LJWE_EKEY. So LJWE_EKEY length * increases by 8 from calling this. */ int lws_jwe_encrypt_aeskw_cbc_hs(struct lws_jwe *jwe, char *temp, int *temp_len) { struct lws_genaes_ctx aesctx; /* we are wrapping a key, so size for the worst case after wrap */ uint8_t enc_cek[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES + LWS_JWE_RFC3394_OVERHEAD_BYTES]; int n, m, hlen = lws_genhmac_size(jwe->jose.enc_alg->hmac_type), ot = *temp_len; if (jwe->jws.jwk->kty != LWS_GENCRYPTO_KTY_OCT) { lwsl_err("%s: unexpected kty %d\n", __func__, jwe->jws.jwk->kty); return -1; } /* create a b64 version of the JOSE header, needed for hashing */ if (lws_jws_encode_b64_element(&jwe->jws.map_b64, LJWE_JOSE, temp + (ot - *temp_len), temp_len, jwe->jws.map.buf[LJWE_JOSE], jwe->jws.map.len[LJWE_JOSE])) return -1; /* Allocate temp space for ATAG and IV */ if (lws_jws_alloc_element(&jwe->jws.map, LJWE_ATAG, temp + (ot - *temp_len), temp_len, hlen / 2, 0)) return -1; if (lws_jws_alloc_element(&jwe->jws.map, LJWE_IV, temp + (ot - *temp_len), temp_len, LWS_JWE_AES_IV_BYTES, 0)) return -1; /* 1) Encrypt the payload... */ /* the CEK is 256-bit in the example encrypted with a 128-bit key */ n = lws_jwe_encrypt_cbc_hs(jwe, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY], (uint8_t *)jwe->jws.map_b64.buf[LJWE_JOSE], jwe->jws.map_b64.len[LJWE_JOSE]); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt_cbc_hs failed\n", __func__); return -1; } /* 2) Encrypt the JWE Encrypted Key: RFC3394 Key Wrap uses 64 bit blocks * and 128-bit input key*/ if (lws_genaes_create(&aesctx, LWS_GAESO_ENC, LWS_GAESM_KW, jwe->jws.jwk->e, 1, NULL)) { lwsl_notice("%s: lws_genaes_create\n", __func__); return -1; } /* tag size is determined by enc cipher key length */ n = lws_genaes_crypt(&aesctx, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY], jwe->jws.map.len[LJWE_EKEY], enc_cek, NULL, NULL, NULL, lws_gencrypto_bits_to_bytes( jwe->jose.enc_alg->keybits_fixed)); m = lws_genaes_destroy(&aesctx, NULL, 0); if (n < 0) { lwsl_err("%s: encrypt cek fail\n", __func__); return -1; } if (m < 0) { lwsl_err("%s: lws_genaes_destroy fail\n", __func__); return -1; } jwe->jws.map.len[LJWE_EKEY] += LWS_JWE_RFC3394_OVERHEAD_BYTES; memcpy((uint8_t *)jwe->jws.map.buf[LJWE_EKEY], enc_cek, jwe->jws.map.len[LJWE_EKEY]); return jwe->jws.map.len[LJWE_CTXT]; } int lws_jwe_auth_and_decrypt_aeskw_cbc_hs(struct lws_jwe *jwe) { struct lws_genaes_ctx aesctx; uint8_t enc_cek[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES + LWS_JWE_RFC3394_OVERHEAD_BYTES]; int n, m; if (jwe->jws.jwk->kty != LWS_GENCRYPTO_KTY_OCT) { lwsl_err("%s: unexpected kty %d\n", __func__, jwe->jws.jwk->kty); return -1; } /* the CEK is 256-bit in the example encrypted with a 128-bit key */ if (jwe->jws.map.len[LJWE_EKEY] > sizeof(enc_cek)) return -1; /* 1) Decrypt the JWE Encrypted Key to get the raw MAC / CEK */ if (lws_genaes_create(&aesctx, LWS_GAESO_DEC, LWS_GAESM_KW, jwe->jws.jwk->e, 1, NULL)) { lwsl_notice("%s: lws_genaes_create\n", __func__); return -1; } /* * Decrypt the CEK into enc_cek * tag size is determined by enc cipher key length */ n = lws_genaes_crypt(&aesctx, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY], jwe->jws.map.len[LJWE_EKEY], enc_cek, NULL, NULL, NULL, lws_gencrypto_bits_to_bytes( jwe->jose.enc_alg->keybits_fixed)); m = lws_genaes_destroy(&aesctx, NULL, 0); if (n < 0) { lwsl_err("%s: decrypt CEK fail\n", __func__); return -1; } if (m < 0) { lwsl_err("%s: lws_genaes_destroy fail\n", __func__); return -1; } /* 2) Decrypt the payload */ n = lws_jwe_auth_and_decrypt_cbc_hs(jwe, enc_cek, (uint8_t *)jwe->jws.map_b64.buf[LJWE_JOSE], jwe->jws.map_b64.len[LJWE_JOSE]); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt_cbc_hs failed\n", __func__); return -1; } return jwe->jws.map.len[LJWE_CTXT]; } libwebsockets-3.2.1/lib/jose/jwe/jwe-ecdh-es-aeskw.c000066400000000000000000000474531357643561300222510ustar00rootroot00000000000000/* * libwebsockets - JSON Web Encryption support * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * * JWE code related to ecdh-es + Concat KDF and aes kw * */ #include "core/private.h" #include "jose/jwe/private.h" /* * From RFC7518 JWA * * 4.6. Key Agreement with Elliptic Curve Diffie-Hellman Ephemeral Static * (ECDH-ES) * * This section defines the specifics of key agreement with Elliptic * Curve Diffie-Hellman Ephemeral Static [RFC6090], in combination with * the Concat KDF, as defined in Section 5.8.1 of [NIST.800-56A]. The * key agreement result can be used in one of two ways: * * 1. directly as the Content Encryption Key (CEK) for the "enc" * algorithm, in the Direct Key Agreement mode, or * * 2. as a symmetric key used to wrap the CEK with the "A128KW", * "A192KW", or "A256KW" algorithms, in the Key Agreement with Key * Wrapping mode. * * A new ephemeral public key value MUST be generated for each key * agreement operation. * * In Direct Key Agreement mode, the output of the Concat KDF MUST be a * key of the same length as that used by the "enc" algorithm. In this * case, the empty octet sequence is used as the JWE Encrypted Key * value. The "alg" (algorithm) Header Parameter value "ECDH-ES" is * used in the Direct Key Agreement mode. * * In Key Agreement with Key Wrapping mode, the output of the Concat KDF * MUST be a key of the length needed for the specified key wrapping * algorithm. In this case, the JWE Encrypted Key is the CEK wrapped * with the agreed-upon key. * * The following "alg" (algorithm) Header Parameter values are used to * indicate that the JWE Encrypted Key is the result of encrypting the * CEK using the result of the key agreement algorithm as the key * encryption key for the corresponding key wrapping algorithm: * * +-----------------+-------------------------------------------------+ * | "alg" Param | Key Management Algorithm | * | Value | | * +-----------------+-------------------------------------------------+ * | ECDH-ES+A128KW | ECDH-ES using Concat KDF and CEK wrapped with | * | | "A128KW" | * | ECDH-ES+A192KW | ECDH-ES using Concat KDF and CEK wrapped with | * | | "A192KW" | * | ECDH-ES+A256KW | ECDH-ES using Concat KDF and CEK wrapped with | * | | "A256KW" | * +-----------------+-------------------------------------------------+ * * 4.6.1. Header Parameters Used for ECDH Key Agreement * * The following Header Parameter names are used for key agreement as * defined below. * * 4.6.1.1. "epk" (Ephemeral Public Key) Header Parameter * * The "epk" (ephemeral public key) value created by the originator for * the use in key agreement algorithms. This key is represented as a * JSON Web Key [JWK] public key value. It MUST contain only public key * parameters and SHOULD contain only the minimum JWK parameters * necessary to represent the key; other JWK parameters included can be * checked for consistency and honored, or they can be ignored. This * Header Parameter MUST be present and MUST be understood and processed * by implementations when these algorithms are used. * * 4.6.1.2. "apu" (Agreement PartyUInfo) Header Parameter * * The "apu" (agreement PartyUInfo) value for key agreement algorithms * using it (such as "ECDH-ES"), represented as a base64url-encoded * string. When used, the PartyUInfo value contains information about * the producer. Use of this Header Parameter is OPTIONAL. This Header * Parameter MUST be understood and processed by implementations when * these algorithms are used. * * 4.6.1.3. "apv" (Agreement PartyVInfo) Header Parameter * * The "apv" (agreement PartyVInfo) value for key agreement algorithms * using it (such as "ECDH-ES"), represented as a base64url encoded * string. When used, the PartyVInfo value contains information about * the recipient. Use of this Header Parameter is OPTIONAL. This * Header Parameter MUST be understood and processed by implementations * when these algorithms are used. * * 4.6.2. Key Derivation for ECDH Key Agreement * * The key derivation process derives the agreed-upon key from the * shared secret Z established through the ECDH algorithm, per * Section 6.2.2.2 of [NIST.800-56A]. * * Key derivation is performed using the Concat KDF, as defined in * Section 5.8.1 of [NIST.800-56A], where the Digest Method is SHA-256. * The Concat KDF parameters are set as follows: * * Z * This is set to the representation of the shared secret Z as an * octet sequence. * * keydatalen * This is set to the number of bits in the desired output key. For * "ECDH-ES", this is length of the key used by the "enc" algorithm. * For "ECDH-ES+A128KW", "ECDH-ES+A192KW", and "ECDH-ES+A256KW", this * is 128, 192, and 256, respectively. * * AlgorithmID * The AlgorithmID value is of the form Datalen || Data, where Data * is a variable-length string of zero or more octets, and Datalen is * a fixed-length, big-endian 32-bit counter that indicates the * length (in octets) of Data. In the Direct Key Agreement case, * Data is set to the octets of the ASCII representation of the "enc" * Header Parameter value. In the Key Agreement with Key Wrapping * case, Data is set to the octets of the ASCII representation of the * "alg" (algorithm) Header Parameter value. * * PartyUInfo * The PartyUInfo value is of the form Datalen || Data, where Data is * a variable-length string of zero or more octets, and Datalen is a * fixed-length, big-endian 32-bit counter that indicates the length * (in octets) of Data. If an "apu" (agreement PartyUInfo) Header * Parameter is present, Data is set to the result of base64url * decoding the "apu" value and Datalen is set to the number of * octets in Data. Otherwise, Datalen is set to 0 and Data is set to * the empty octet sequence. * * PartyVInfo * The PartyVInfo value is of the form Datalen || Data, where Data is * a variable-length string of zero or more octets, and Datalen is a * fixed-length, big-endian 32-bit counter that indicates the length * (in octets) of Data. If an "apv" (agreement PartyVInfo) Header * Parameter is present, Data is set to the result of base64url * decoding the "apv" value and Datalen is set to the number of * octets in Data. Otherwise, Datalen is set to 0 and Data is set to * the empty octet sequence. * * SuppPubInfo * This is set to the keydatalen represented as a 32-bit big-endian * integer. * * SuppPrivInfo * This is set to the empty octet sequence. * * Applications need to specify how the "apu" and "apv" Header * Parameters are used for that application. The "apu" and "apv" values * MUST be distinct, when used. Applications wishing to conform to * [NIST.800-56A] need to provide values that meet the requirements of * that document, e.g., by using values that identify the producer and * consumer. Alternatively, applications MAY conduct key derivation in * a manner similar to "Diffie-Hellman Key Agreement Method" [RFC2631]: * in that case, the "apu" parameter MAY either be omitted or represent * a random 512-bit value (analogous to PartyAInfo in Ephemeral-Static * mode in RFC 2631) and the "apv" parameter SHOULD NOT be present. * */ /* * - ECDH-ES[-variant] comes in the jose "alg" and just covers key agreement. * The "enc" action is completely separate and handled elsewhere. However * the key size throughout is determined by the needs of the "enc" action. * * - The jwe->jws.jwk is the PEER - the encryption consumer's - public key. * * - The public part of the ephemeral key comes out in jose.jwk_ephemeral * * - Return shared secret length or < 0 for error * * - Unwrapped CEK in EKEY. If any, wrapped CEK in "wrapped". * * - Caller responsibility to cleanse EKEY. */ static int lws_jwe_encrypt_ecdh(struct lws_jwe *jwe, char *temp, int *temp_len, uint8_t *cek) { uint8_t shared_secret[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES], derived[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES]; int m, n, ret = -1, ot = *temp_len, ss_len = sizeof(shared_secret), // kw_hlen = lws_genhash_size(jwe->jose.alg->hash_type), enc_hlen = lws_genhmac_size(jwe->jose.enc_alg->hmac_type), ekbytes = 32; //jwe->jose.alg->keybits_fixed / 8; struct lws_genec_ctx ecctx; struct lws_jwk *ephem = &jwe->jose.recipient[jwe->recip].jwk_ephemeral; if (jwe->jws.jwk->kty != LWS_GENCRYPTO_KTY_EC) { lwsl_err("%s: unexpected kty %d\n", __func__, jwe->jws.jwk->kty); return -1; } ephem->kty = LWS_GENCRYPTO_KTY_EC; ephem->private_key = 1; /* Generate jose.jwk_ephemeral on the peer public key curve */ if (lws_genecdh_create(&ecctx, jwe->jws.context, NULL)) goto bail; /* ephemeral context gets random key on same curve as recip pubkey */ if (lws_genecdh_new_keypair(&ecctx, LDHS_OURS, (const char *) jwe->jws.jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].buf, ephem->e)) goto bail; /* peer context gets js->jwk key */ if (lws_genecdh_set_key(&ecctx, jwe->jws.jwk->e, LDHS_THEIRS)) { lwsl_err("%s: setting peer pubkey failed\n", __func__); goto bail; } /* combine our ephemeral key and the peer pubkey to get the secret */ if (lws_genecdh_compute_shared_secret(&ecctx, shared_secret, &ss_len)) { lwsl_notice("%s: lws_genecdh_compute_shared_secret failed\n", __func__); goto bail; } /* * The private part of the ephemeral key is finished with... * cleanse and free it. We need to keep the public part around so we * can publish it with the JWE as "epk". */ lws_explicit_bzero(ephem->e[LWS_GENCRYPTO_EC_KEYEL_D].buf, ephem->e[LWS_GENCRYPTO_EC_KEYEL_D].len); lws_free_set_NULL(ephem->e[LWS_GENCRYPTO_EC_KEYEL_D].buf); ephem->e[LWS_GENCRYPTO_EC_KEYEL_D].len = 0; ephem->private_key = 0; /* * Derive the CEK from the shared secret... amount of bytes written to * derived matches bitcount in jwe->jose.enc_alg->keybits_fixed * * In Direct Key Agreement mode, the output of the Concat KDF MUST be a * key of the same length as that used by the "enc" algorithm. */ if (lws_jwa_concat_kdf(jwe, jwe->jose.alg->algtype_crypto == LWS_JOSE_ENCTYPE_NONE, derived, shared_secret, ss_len)) { lwsl_notice("%s: lws_jwa_concat_kdf failed\n", __func__); goto bail; } /* in P-521 case, we get a 66-byte shared secret for a 64-byte key */ if (ss_len < enc_hlen) { lwsl_err("%s: concat KDF bad derived key len %d\n", __func__, ss_len); goto bail; } /* * For "ECDH-ES", that was it, and we use what we just wrapped in * wrapped as the CEK without publishing it. * * For "ECDH-ES-AES[128,192,256]KW", we generate a new, random CEK and * then wrap it using the key we just wrapped, and make the wrapped * version available in EKEY. */ if (jwe->jose.alg->algtype_crypto != LWS_JOSE_ENCTYPE_NONE) { struct lws_gencrypto_keyelem el; struct lws_genaes_ctx aesctx; /* generate the actual CEK in cek */ if (lws_get_random(jwe->jws.context, cek, enc_hlen) != enc_hlen) { lwsl_err("Problem getting random\n"); goto bail; } /* wrap with the derived key */ el.buf = derived; el.len = enc_hlen / 2; if (lws_genaes_create(&aesctx, LWS_GAESO_ENC, LWS_GAESM_KW, &el, 1, NULL)) { lwsl_notice("%s: lws_genaes_create\n", __func__); goto bail; } /* wrap CEK into EKEY */ n = lws_genaes_crypt(&aesctx, cek, enc_hlen, (void *)jwe->jws.map.buf[LJWE_EKEY], NULL, NULL, NULL, 0); m = lws_genaes_destroy(&aesctx, NULL, 0); if (n < 0) { lwsl_err("%s: encrypt cek fail\n", __func__); goto bail; } if (m < 0) { lwsl_err("%s: lws_genaes_destroy fail\n", __func__); goto bail; } jwe->jws.map.len[LJWE_EKEY] = enc_hlen + 8; /* Wrapped CEK is in EKEY. Random CEK is in cek. */ } else /* direct derived CEK is in cek */ memcpy(cek, derived, enc_hlen); /* rewrite the protected JOSE header to have the epk pieces */ jwe->jws.map.buf[LJWE_JOSE] = temp + (ot - *temp_len); m = n = lws_snprintf(temp + (ot - *temp_len), *temp_len, "{\"alg\":\"%s\", \"enc\":\"%s\", \"epk\":", jwe->jose.alg->alg, jwe->jose.enc_alg->alg); *temp_len -= n; n = lws_jwk_export(ephem, 0, temp + (ot - *temp_len), temp_len); if (n < 0) { lwsl_err("%s: ephemeral export failed\n", __func__); goto bail; } m += n; n = lws_snprintf(temp + (ot - *temp_len), *temp_len, "}"); *temp_len -= n + 1; m += n; jwe->jws.map.len[LJWE_JOSE] = m; /* create a b64 version of the JOSE header, needed later for AAD */ if (lws_jws_encode_b64_element(&jwe->jws.map_b64, LJWE_JOSE, temp + (ot - *temp_len), temp_len, jwe->jws.map.buf[LJWE_JOSE], jwe->jws.map.len[LJWE_JOSE])) return -1; ret = enc_hlen; bail: lws_genec_destroy(&ecctx); /* cleanse the shared secret (watch out for cek at parent too) */ lws_explicit_bzero(shared_secret, ekbytes); lws_explicit_bzero(derived, ekbytes); return ret; } int lws_jwe_encrypt_ecdh_cbc_hs(struct lws_jwe *jwe, char *temp, int *temp_len) { int ss_len, // kw_hlen = lws_genhash_size(jwe->jose.alg->hash_type), enc_hlen = lws_genhmac_size(jwe->jose.enc_alg->hmac_type); uint8_t cek[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES]; int ekbytes = jwe->jose.alg->keybits_fixed / 8; int n, ot = *temp_len, ret = -1; /* if we will produce an EKEY, make space for it */ if (jwe->jose.alg->algtype_crypto != LWS_JOSE_ENCTYPE_NONE) { if (lws_jws_alloc_element(&jwe->jws.map, LJWE_EKEY, temp + (ot - *temp_len), temp_len, enc_hlen + 8, 0)) goto bail; } /* decrypt the CEK */ ss_len = lws_jwe_encrypt_ecdh(jwe, temp + (ot - *temp_len), temp_len, cek); if (ss_len < 0) { lwsl_err("%s: lws_jwe_encrypt_ecdh failed\n", __func__); return -1; } /* cek contains the unwrapped CEK. EKEY may contain wrapped CEK */ /* make space for the payload encryption pieces */ if (lws_jws_alloc_element(&jwe->jws.map, LJWE_ATAG, temp + (ot - *temp_len), temp_len, enc_hlen / 2, 0)) goto bail; if (lws_jws_alloc_element(&jwe->jws.map, LJWE_IV, temp + (ot - *temp_len), temp_len, LWS_JWE_AES_IV_BYTES, 0)) goto bail; /* Perform the authenticated encryption on CTXT... * ...the AAD is b64u(protected JOSE header) */ n = lws_jwe_encrypt_cbc_hs(jwe, cek, (uint8_t *)jwe->jws.map_b64.buf[LJWE_JOSE], jwe->jws.map_b64.len[LJWE_JOSE]); if (n < 0) { lwsl_notice("%s: lws_jwe_encrypt_cbc_hs failed\n", __func__); goto bail; } ret = 0; bail: /* if fail or direct CEK, cleanse and remove EKEY */ if (ret || jwe->jose.enc_alg->algtype_crypto == LWS_JOSE_ENCTYPE_NONE) { if (jwe->jws.map.len[LJWE_EKEY]) lws_explicit_bzero((void *)jwe->jws.map.buf[LJWE_EKEY], jwe->jws.map.len[LJWE_EKEY]); jwe->jws.map.len[LJWE_EKEY] = 0; } lws_explicit_bzero(cek, ekbytes); return ret; } /* * jwe->jws.jwk is recipient private key * * If kw mode, then EKEY is the wrapped CEK * * */ static int lws_jwe_auth_and_decrypt_ecdh(struct lws_jwe *jwe) { uint8_t shared_secret[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES], derived[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES]; int ekbytes = jwe->jose.enc_alg->keybits_fixed / 8, enc_hlen = lws_genhmac_size(jwe->jose.enc_alg->hmac_type); struct lws_genec_ctx ecctx; int n, ret = -1, ss_len = sizeof(shared_secret); if (jwe->jws.jwk->kty != LWS_GENCRYPTO_KTY_EC) { lwsl_err("%s: unexpected kty %d\n", __func__, jwe->jws.jwk->kty); return -1; } if (jwe->jose.recipient[jwe->recip].jwk_ephemeral.kty != LWS_GENCRYPTO_KTY_EC) { lwsl_err("%s: missing epk\n", __func__); return -1; } /* * Recompute the shared secret... * * - direct: it's the CEK * * - aeskw: apply it as AES keywrap to EKEY to get the CEK */ /* Generate jose.jwk_ephemeral on the peer public key curve */ if (lws_genecdh_create(&ecctx, jwe->jws.context, NULL)) goto bail; /* Load our private key into our side of the ecdh context */ if (lws_genecdh_set_key(&ecctx, jwe->jws.jwk->e, LDHS_OURS)) { lwsl_err("%s: setting our private key failed\n", __func__); goto bail; } /* Import the ephemeral public key into the peer side */ if (lws_genecdh_set_key(&ecctx, jwe->jose.recipient[jwe->recip].jwk_ephemeral.e, LDHS_THEIRS)) { lwsl_err("%s: setting epk pubkey failed\n", __func__); goto bail; } /* combine their ephemeral key and our private key to get the secret */ if (lws_genecdh_compute_shared_secret(&ecctx, shared_secret, &ss_len)) { lwsl_notice("%s: lws_genecdh_compute_shared_secret failed\n", __func__); goto bail; } lws_genec_destroy(&ecctx); if (ss_len < enc_hlen) { lwsl_err("%s: ss_len %d ekbytes %d\n", __func__, ss_len, enc_hlen); goto bail; } /* * Derive the CEK from the shared secret... amount of bytes written to * cek[] matches bitcount in jwe->jose.enc_alg->keybits_fixed */ if (lws_jwa_concat_kdf(jwe, jwe->jose.alg->algtype_crypto == LWS_JOSE_ENCTYPE_NONE, derived, shared_secret, ss_len)) { lwsl_notice("%s: lws_jwa_concat_kdf failed\n", __func__); goto bail; } /* * "ECDH-ES": derived is the CEK * "ECDH-ES-AES[128,192,256]KW": wrapped key is in EKEY, * "derived" contains KEK */ if (jwe->jose.alg->algtype_crypto != LWS_JOSE_ENCTYPE_NONE) { struct lws_gencrypto_keyelem el; struct lws_genaes_ctx aesctx; int m; /* Confirm space for EKEY */ if (jwe->jws.map.len[LJWE_EKEY] < (unsigned int)enc_hlen) { lwsl_err("%s: missing EKEY\n", __func__); goto bail; } /* unwrap with the KEK we derived */ el.buf = derived; el.len = enc_hlen / 2; if (lws_genaes_create(&aesctx, LWS_GAESO_DEC, LWS_GAESM_KW, &el, 1, NULL)) { lwsl_notice("%s: lws_genaes_create\n", __func__); goto bail; } /* decrypt the EKEY to end up with CEK in "shared_secret" */ n = lws_genaes_crypt(&aesctx, (const uint8_t *)jwe->jws.map.buf[LJWE_EKEY], jwe->jws.map.len[LJWE_EKEY], (uint8_t *)shared_secret, NULL, NULL, NULL, 0); m = lws_genaes_destroy(&aesctx, NULL, 0); if (n < 0) { lwsl_err("%s: decrypt cek fail\n", __func__); goto bail; } if (m < 0) { lwsl_err("%s: lws_genaes_destroy fail\n", __func__); goto bail; } } else memcpy(shared_secret, derived, enc_hlen); /* either way, the recovered CEK is in shared_secret */ if (lws_jwe_auth_and_decrypt_cbc_hs(jwe, shared_secret, (uint8_t *)jwe->jws.map_b64.buf[LJWE_JOSE], jwe->jws.map_b64.len[LJWE_JOSE]) < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt_cbc_hs fail\n", __func__); goto bail; } /* if all went well, then CTXT is now the plaintext */ ret = 0; bail: /* cleanse wrapped on stack that contained the CEK / wrapped key */ lws_explicit_bzero(derived, ekbytes); /* cleanse the shared secret */ lws_explicit_bzero(shared_secret, ekbytes); return ret; } int lws_jwe_auth_and_decrypt_ecdh_cbc_hs(struct lws_jwe *jwe, char *temp, int *temp_len) { /* create a b64 version of the JOSE header, needed later for AAD */ if (lws_jws_encode_b64_element(&jwe->jws.map_b64, LJWE_JOSE, temp, temp_len, jwe->jws.map.buf[LJWE_JOSE], jwe->jws.map.len[LJWE_JOSE])) return -1; return lws_jwe_auth_and_decrypt_ecdh(jwe); } libwebsockets-3.2.1/lib/jose/jwe/jwe-rsa-aescbc.c000066400000000000000000000131671357643561300216270ustar00rootroot00000000000000/* * libwebsockets - JSON Web Encryption support * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * * JWE code related to rsa + aescbc * */ #include "core/private.h" #include "jose/jwe/private.h" /* * Requirements on entry: * * - jwe->jws.map LJWE_JOSE contains the ASCII JOSE header * - jwe->jws.map LJWE_EKEY contains cek of enc_alg hmac length * - jwe->jws.map LJWE_CTXT contains the plaintext * * On successful exit: * * - jwe->jws.map LJWE_ATAG contains the tag * - jwe->jws.map LJWE_IV contains the new random IV that was used * - jwe->jws.map LJWE_EKEY contains the encrypted CEK * - jwe->jws.map LJWE_CTXT contains the ciphertext * * Return the amount of temp used, or -1 */ int lws_jwe_encrypt_rsa_aes_cbc_hs(struct lws_jwe *jwe, char *temp, int *temp_len) { int n, hlen = lws_genhmac_size(jwe->jose.enc_alg->hmac_type), ot = *temp_len; char ekey[LWS_GENHASH_LARGEST]; struct lws_genrsa_ctx rsactx; if (jwe->jws.jwk->kty != LWS_GENCRYPTO_KTY_RSA) { lwsl_err("%s: unexpected kty %d\n", __func__, jwe->jws.jwk->kty); return -1; } /* * Notice that the unencrypted EKEY coming in is smaller than the * RSA-encrypted EKEY going out, which is going to be the RSA key size * * Create a b64 version of the JOSE header, needed as aad */ if (lws_jws_encode_b64_element(&jwe->jws.map_b64, LJWE_JOSE, temp + (ot - *temp_len), temp_len, jwe->jws.map.buf[LJWE_JOSE], jwe->jws.map.len[LJWE_JOSE])) return -1; if (lws_jws_alloc_element(&jwe->jws.map, LJWE_ATAG, temp + (ot - *temp_len), temp_len, hlen / 2, 0)) return -1; if (lws_jws_alloc_element(&jwe->jws.map, LJWE_IV, temp + (ot - *temp_len), temp_len, LWS_JWE_AES_IV_BYTES, 0)) return -1; /* * Without changing the unencrypted CEK in EKEY, reallocate enough * space to write the RSA-encrypted version in-situ. */ if (lws_jws_dup_element(&jwe->jws.map, LJWE_EKEY, temp + (ot - *temp_len), temp_len, jwe->jws.map.buf[LJWE_EKEY], jwe->jws.map.len[LJWE_EKEY], jwe->jws.jwk->e[LWS_GENCRYPTO_RSA_KEYEL_N].len)) return -1; /* Encrypt using the raw CEK (treated as MAC KEY | ENC KEY) */ n = lws_jwe_encrypt_cbc_hs(jwe, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY], (uint8_t *)jwe->jws.map_b64.buf[LJWE_JOSE], jwe->jws.map_b64.len[LJWE_JOSE]); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt_cbc_hs failed\n", __func__); return -1; } if (lws_genrsa_create(&rsactx, jwe->jws.jwk->e, jwe->jws.context, !strcmp(jwe->jose.alg->alg, "RSA-OAEP") ? LGRSAM_PKCS1_OAEP_PSS : LGRSAM_PKCS1_1_5, LWS_GENHASH_TYPE_UNKNOWN)) { lwsl_notice("%s: lws_genrsa_create\n", __func__); return -1; } /* encrypt the CEK using RSA, mbedtls can't handle both in and out are * the EKEY, so copy the unencrypted ekey out temporarily */ memcpy(ekey, jwe->jws.map.buf[LJWE_EKEY], hlen); n = lws_genrsa_public_encrypt(&rsactx, (uint8_t *)ekey, hlen, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY]); lws_genrsa_destroy(&rsactx); lws_explicit_bzero(ekey, hlen); /* cleanse the temp CEK copy */ if (n < 0) { lwsl_err("%s: encrypt cek fail\n", __func__); return -1; } jwe->jws.map.len[LJWE_EKEY] = n; /* update to encrypted EKEY size */ /* * We end up with IV, ATAG, set, EKEY encrypted and CTXT is ciphertext, * and b64u version of ATAG in map_b64. */ return 0; } int lws_jwe_auth_and_decrypt_rsa_aes_cbc_hs(struct lws_jwe *jwe) { int n; struct lws_genrsa_ctx rsactx; uint8_t enc_cek[512]; if (jwe->jws.jwk->kty != LWS_GENCRYPTO_KTY_RSA) { lwsl_err("%s: unexpected kty %d\n", __func__, jwe->jws.jwk->kty); return -1; } if (jwe->jws.map.len[LJWE_EKEY] < 40) { lwsl_err("%s: EKEY length too short %d\n", __func__, jwe->jws.map.len[LJWE_EKEY]); return -1; } /* Decrypt the JWE Encrypted Key to get the raw MAC || CEK */ if (lws_genrsa_create(&rsactx, jwe->jws.jwk->e, jwe->jws.context, !strcmp(jwe->jose.alg->alg, "RSA-OAEP") ? LGRSAM_PKCS1_OAEP_PSS : LGRSAM_PKCS1_1_5, LWS_GENHASH_TYPE_UNKNOWN)) { lwsl_notice("%s: lws_genrsa_public_decrypt_create\n", __func__); return -1; } n = lws_genrsa_private_decrypt(&rsactx, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY], jwe->jws.map.len[LJWE_EKEY], enc_cek, sizeof(enc_cek)); lws_genrsa_destroy(&rsactx); if (n < 0) { lwsl_err("%s: decrypt cek fail: \n", __func__); return -1; } n = lws_jwe_auth_and_decrypt_cbc_hs(jwe, enc_cek, (uint8_t *)jwe->jws.map_b64.buf[LJWE_JOSE], jwe->jws.map_b64.len[LJWE_JOSE]); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt_cbc_hs failed\n", __func__); return -1; } #if defined(LWS_WITH_MBEDTLS) && defined(LWS_PLAT_OPTEE) /* strip padding */ n = jwe->jws.map.buf[LJWE_CTXT][jwe->jws.map.len[LJWE_CTXT] - 1]; if (n > 16) { lwsl_err("%s: n == %d, plen %d\n", __func__, n, (int)jwe->jws.map.len[LJWE_CTXT]); return -1; } jwe->jws.map.len[LJWE_CTXT] -= n; #endif return jwe->jws.map.len[LJWE_CTXT]; } libwebsockets-3.2.1/lib/jose/jwe/jwe-rsa-aesgcm.c000066400000000000000000000116141357643561300216410ustar00rootroot00000000000000/* * libwebsockets - JSON Web Encryption support * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * * JWE code related to aes gcm * */ #include "core/private.h" #include "jose/jwe/private.h" #define LWS_AESGCM_IV 12 int lws_jwe_encrypt_rsa_aes_gcm(struct lws_jwe *jwe, char *temp, int *temp_len) { int ekbytes = jwe->jose.enc_alg->keybits_fixed / 8; struct lws_genrsa_ctx rsactx; int n, ret = -1, ot = *temp_len; if (jwe->jws.jwk->kty != LWS_GENCRYPTO_KTY_RSA) { lwsl_err("%s: wrong kty %d\n", __func__, jwe->jws.jwk->kty); return -1; } /* create the IV + CEK */ if (lws_jws_randomize_element(jwe->jws.context, &jwe->jws.map, LJWE_IV, temp + (ot - *temp_len), temp_len, LWS_AESGCM_IV, 0)) return -1; if (lws_jws_alloc_element(&jwe->jws.map, LJWE_ATAG, temp + (ot - *temp_len), temp_len, LWS_AESGCM_TAG, 0)) return -1; /* create a b64 version of the JOSE header, needed as aad */ if (lws_jws_encode_b64_element(&jwe->jws.map_b64, LJWE_JOSE, temp + (ot - *temp_len), temp_len, jwe->jws.map.buf[LJWE_JOSE], jwe->jws.map.len[LJWE_JOSE])) return -1; /* * If none already, create a new, random CEK in the JWE (so it can be * reused for other recipients on same payload). If it already exists, * just reuse it. It will be cleansed in the JWE destroy. */ if (!jwe->cek_valid) { if (lws_get_random(jwe->jws.context, jwe->cek, ekbytes) != ekbytes) { lwsl_err("%s: Problem getting random\n", __func__); return -1; } jwe->cek_valid = 1; } if (lws_jws_dup_element(&jwe->jws.map, LJWE_EKEY, temp + (ot - *temp_len), temp_len, jwe->cek, ekbytes, 0)) return -1; /* encrypt the payload */ n = lws_jwe_encrypt_gcm(jwe, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY], (uint8_t *)jwe->jws.map_b64.buf[LJWE_JOSE], jwe->jws.map_b64.len[LJWE_JOSE]); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt_gcm failed\n", __func__); goto bail; } /* Encrypt the CEK into EKEY to make the JWE Encrypted Key */ if (lws_genrsa_create(&rsactx, jwe->jws.jwk->e, jwe->jws.context, !strcmp(jwe->jose.alg->alg, "RSA-OAEP") ? LGRSAM_PKCS1_OAEP_PSS : LGRSAM_PKCS1_1_5, LWS_GENHASH_TYPE_SHA1 /* !!! */)) { lwsl_notice("%s: lws_genrsa_public_decrypt_create\n", __func__); goto bail; } n = lws_genrsa_public_encrypt(&rsactx, jwe->cek, ekbytes, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY]); lws_genrsa_destroy(&rsactx); if (n < 0) { lwsl_err("%s: encrypt cek fail: \n", __func__); goto bail; } /* set the EKEY length to the actual enciphered length */ jwe->jws.map.len[LJWE_EKEY] = n; ret = jwe->jws.map.len[LJWE_CTXT]; bail: return ret; } int lws_jwe_auth_and_decrypt_rsa_aes_gcm(struct lws_jwe *jwe) { int n; struct lws_genrsa_ctx rsactx; uint8_t enc_cek[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES]; if (jwe->jws.jwk->kty != LWS_GENCRYPTO_KTY_RSA) { lwsl_err("%s: unexpected kty %d\n", __func__, jwe->jws.jwk->kty); return -1; } if (jwe->jws.map.len[LJWE_EKEY] < 32) { lwsl_err("%s: EKEY length too short %d\n", __func__, jwe->jws.map.len[LJWE_EKEY]); return -1; } /* Decrypt the JWE Encrypted Key to get the direct CEK */ if (lws_genrsa_create(&rsactx, jwe->jws.jwk->e, jwe->jws.context, !strcmp(jwe->jose.alg->alg, "RSA-OAEP") ? LGRSAM_PKCS1_OAEP_PSS : LGRSAM_PKCS1_1_5, LWS_GENHASH_TYPE_SHA1 /* !!! */)) { lwsl_notice("%s: lws_genrsa_public_decrypt_create\n", __func__); return -1; } n = lws_genrsa_private_decrypt(&rsactx, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY], jwe->jws.map.len[LJWE_EKEY], enc_cek, sizeof(enc_cek)); lws_genrsa_destroy(&rsactx); if (n < 0) { lwsl_err("%s: decrypt cek fail: \n", __func__); return -1; } n = lws_jwe_auth_and_decrypt_gcm(jwe, enc_cek, (uint8_t *)jwe->jws.map_b64.buf[LJWE_JOSE], jwe->jws.map_b64.len[LJWE_JOSE]); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt_gcm_hs failed\n", __func__); return -1; } #if defined(LWS_WITH_MBEDTLS) && defined(LWS_PLAT_OPTEE) /* strip padding */ n = jwe->jws.map.buf[LJWE_CTXT][jwe->jws.map.len[LJWE_CTXT] - 1]; if (n > 16) return -1; jwe->jws.map.len[LJWE_CTXT] -= n; #endif return jwe->jws.map.len[LJWE_CTXT]; } libwebsockets-3.2.1/lib/jose/jwe/jwe.c000066400000000000000000000511121357643561300176160ustar00rootroot00000000000000/* * libwebsockets - JSON Web Encryption support * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * * This supports RFC7516 JSON Web Encryption * */ #include "core/private.h" #include "jose/private.h" #include "jose/jwe/private.h" /* * Currently only support flattened or compact (implicitly single signature) */ static const char * const jwe_json[] = { "protected", "iv", "ciphertext", "tag", "encrypted_key" }; enum enum_jwe_complete_tokens { LWS_EJCT_PROTECTED, LWS_EJCT_IV, LWS_EJCT_CIPHERTEXT, LWS_EJCT_TAG, LWS_EJCT_RECIP_ENC_KEY, }; /* parse a JWS complete or flattened JSON object */ struct jwe_cb_args { struct lws_jws *jws; char *temp; int *temp_len; }; static signed char lws_jwe_json_cb(struct lejp_ctx *ctx, char reason) { struct jwe_cb_args *args = (struct jwe_cb_args *)ctx->user; int n, m; if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; switch (ctx->path_match - 1) { /* strings */ case LWS_EJCT_PROTECTED: /* base64u: JOSE: must contain 'alg' */ m = LJWS_JOSE; goto append_string; case LWS_EJCT_IV: /* base64u */ m = LJWE_IV; goto append_string; case LWS_EJCT_CIPHERTEXT: /* base64u */ m = LJWE_CTXT; goto append_string; case LWS_EJCT_TAG: /* base64u */ m = LJWE_ATAG; goto append_string; case LWS_EJCT_RECIP_ENC_KEY: /* base64u */ m = LJWE_EKEY; goto append_string; default: return -1; } return 0; append_string: if (*args->temp_len < ctx->npos) { lwsl_err("%s: out of parsing space\n", __func__); return -1; } /* * We keep both b64u and decoded in temp mapped using map / map_b64, * the jws signature is actually over the b64 content not the plaintext, * and we can't do it until we see the protected alg. */ if (!args->jws->map_b64.buf[m]) { args->jws->map_b64.buf[m] = args->temp; args->jws->map_b64.len[m] = 0; } memcpy(args->temp, ctx->buf, ctx->npos); args->temp += ctx->npos; *args->temp_len -= ctx->npos; args->jws->map_b64.len[m] += ctx->npos; if (reason == LEJPCB_VAL_STR_END) { args->jws->map.buf[m] = args->temp; n = lws_b64_decode_string_len( (const char *)args->jws->map_b64.buf[m], args->jws->map_b64.len[m], (char *)args->temp, *args->temp_len); if (n < 0) { lwsl_err("%s: b64 decode failed\n", __func__); return -1; } args->temp += n; *args->temp_len -= n; args->jws->map.len[m] = n; } return 0; } int lws_jwe_json_parse(struct lws_jwe *jwe, const uint8_t *buf, int len, char *temp, int *temp_len) { struct jwe_cb_args args; struct lejp_ctx jctx; int m = 0; args.jws = &jwe->jws; args.temp = temp; args.temp_len = temp_len; lejp_construct(&jctx, lws_jwe_json_cb, &args, jwe_json, LWS_ARRAY_SIZE(jwe_json)); m = (int)(signed char)lejp_parse(&jctx, (uint8_t *)buf, len); lejp_destruct(&jctx); if (m < 0) { lwsl_notice("%s: parse returned %d\n", __func__, m); return -1; } return 0; } void lws_jwe_init(struct lws_jwe *jwe, struct lws_context *context) { lws_jose_init(&jwe->jose); lws_jws_init(&jwe->jws, &jwe->jwk, context); memset(&jwe->jwk, 0, sizeof(jwe->jwk)); jwe->recip = 0; jwe->cek_valid = 0; } void lws_jwe_destroy(struct lws_jwe *jwe) { lws_jws_destroy(&jwe->jws); lws_jose_destroy(&jwe->jose); lws_jwk_destroy(&jwe->jwk); /* cleanse the CEK we held on to in case of further encryptions of it */ lws_explicit_bzero(jwe->cek, sizeof(jwe->cek)); jwe->cek_valid = 0; } static uint8_t * be32(uint32_t i, uint32_t *p32) { uint8_t *p = (uint8_t *)p32; *p++ = (i >> 24) & 0xff; *p++ = (i >> 16) & 0xff; *p++ = (i >> 8) & 0xff; *p++ = i & 0xff; return (uint8_t *)p32; } /* * The key derivation process derives the agreed-upon key from the * shared secret Z established through the ECDH algorithm, per * Section 6.2.2.2 of [NIST.800-56A]. * * * Key derivation is performed using the Concat KDF, as defined in * Section 5.8.1 of [NIST.800-56A], where the Digest Method is SHA-256. * * out must be prepared to take at least 32 bytes or the encrypted key size, * whichever is larger. */ int lws_jwa_concat_kdf(struct lws_jwe *jwe, int direct, uint8_t *out, const uint8_t *shared_secret, int sslen) { int hlen = lws_genhash_size(LWS_GENHASH_TYPE_SHA256), aidlen; struct lws_genhash_ctx hash_ctx; uint32_t ctr = 1, t; const char *aid; if (!jwe->jose.enc_alg || !jwe->jose.alg) return -1; /* * Hash * * AlgorithmID || PartyUInfo || PartyVInfo * {|| SuppPubInfo }{|| SuppPrivInfo } * * AlgorithmID * * The AlgorithmID value is of the form Datalen || Data, where Data * is a variable-length string of zero or more octets, and Datalen is * a fixed-length, big-endian 32-bit counter that indicates the * length (in octets) of Data. In the Direct Key Agreement case, * Data is set to the octets of the ASCII representation of the "enc" * Header Parameter value. In the Key Agreement with Key Wrapping * case, Data is set to the octets of the ASCII representation of the * "alg" (algorithm) Header Parameter value. */ aid = direct ? jwe->jose.enc_alg->alg : jwe->jose.alg->alg; aidlen = strlen(aid); /* * PartyUInfo (PartyVInfo is the same deal) * * The PartyUInfo value is of the form Datalen || Data, where Data is * a variable-length string of zero or more octets, and Datalen is a * fixed-length, big-endian 32-bit counter that indicates the length * (in octets) of Data. If an "apu" (agreement PartyUInfo) Header * Parameter is present, Data is set to the result of base64url * decoding the "apu" value and Datalen is set to the number of * octets in Data. Otherwise, Datalen is set to 0 and Data is set to * the empty octet sequence * * SuppPubInfo * * This is set to the keydatalen represented as a 32-bit big-endian * integer. * * keydatalen * * This is set to the number of bits in the desired output key. For * "ECDH-ES", this is length of the key used by the "enc" algorithm. * For "ECDH-ES+A128KW", "ECDH-ES+A192KW", and "ECDH-ES+A256KW", this * is 128, 192, and 256, respectively. * * Compute Hash i = H(counter || Z || OtherInfo). * * We must iteratively hash over key material that's larger than * one hash output size (256b for SHA-256) */ while (ctr <= (uint32_t)((jwe->jose.enc_alg->keybits_fixed + (hlen - 1)) / hlen)) { /* * Key derivation is performed using the Concat KDF, as defined * in Section 5.8.1 of [NIST.800-56A], where the Digest Method * is SHA-256. */ if (lws_genhash_init(&hash_ctx, LWS_GENHASH_TYPE_SHA256)) return -1; if (/* counter */ lws_genhash_update(&hash_ctx, be32(ctr++, &t), 4) || /* Z */ lws_genhash_update(&hash_ctx, shared_secret, sslen) || /* other info */ lws_genhash_update(&hash_ctx, be32(strlen(aid), &t), 4) || lws_genhash_update(&hash_ctx, aid, aidlen) || lws_genhash_update(&hash_ctx, be32(jwe->jose.e[LJJHI_APU].len, &t), 4) || lws_genhash_update(&hash_ctx, jwe->jose.e[LJJHI_APU].buf, jwe->jose.e[LJJHI_APU].len) || lws_genhash_update(&hash_ctx, be32(jwe->jose.e[LJJHI_APV].len, &t), 4) || lws_genhash_update(&hash_ctx, jwe->jose.e[LJJHI_APV].buf, jwe->jose.e[LJJHI_APV].len) || lws_genhash_update(&hash_ctx, be32(jwe->jose.enc_alg->keybits_fixed, &t), 4) || lws_genhash_destroy(&hash_ctx, out)) { lwsl_err("%s: fail\n", __func__); lws_genhash_destroy(&hash_ctx, NULL); return -1; } out += hlen; } return 0; } LWS_VISIBLE void lws_jwe_be64(uint64_t c, uint8_t *p8) { int n; for (n = 56; n >= 0; n -= 8) *p8++ = (uint8_t)((c >> n) & 0xff); } LWS_VISIBLE int lws_jwe_auth_and_decrypt(struct lws_jwe *jwe, char *temp, int *temp_len) { int valid_aescbc_hmac, valid_aesgcm; if (lws_jwe_parse_jose(&jwe->jose, jwe->jws.map.buf[LJWS_JOSE], jwe->jws.map.len[LJWS_JOSE], temp, temp_len) < 0) { lwsl_err("%s: JOSE parse '%.*s' failed\n", __func__, jwe->jws.map.len[LJWS_JOSE], jwe->jws.map.buf[LJWS_JOSE]); return -1; } if (!jwe->jose.alg) { lwsl_err("%s: no jose.alg: %.*s\n", __func__, jwe->jws.map.len[LJWS_JOSE], jwe->jws.map.buf[LJWS_JOSE]); return -1; } valid_aescbc_hmac = jwe->jose.enc_alg && jwe->jose.enc_alg->algtype_crypto == LWS_JOSE_ENCTYPE_AES_CBC && (jwe->jose.enc_alg->hmac_type == LWS_GENHMAC_TYPE_SHA256 || jwe->jose.enc_alg->hmac_type == LWS_GENHMAC_TYPE_SHA384 || jwe->jose.enc_alg->hmac_type == LWS_GENHMAC_TYPE_SHA512); valid_aesgcm = jwe->jose.enc_alg && jwe->jose.enc_alg->algtype_crypto == LWS_JOSE_ENCTYPE_AES_GCM; if ((jwe->jose.alg->algtype_signing == LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5 || jwe->jose.alg->algtype_signing == LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP)) { /* RSA + AESCBC */ if (valid_aescbc_hmac) return lws_jwe_auth_and_decrypt_rsa_aes_cbc_hs(jwe); /* RSA + AESGCM */ if (valid_aesgcm) return lws_jwe_auth_and_decrypt_rsa_aes_gcm(jwe); } /* AESKW */ if (jwe->jose.alg->algtype_signing == LWS_JOSE_ENCTYPE_AES_ECB && valid_aescbc_hmac) return lws_jwe_auth_and_decrypt_aeskw_cbc_hs(jwe); /* ECDH-ES + AESKW */ if (jwe->jose.alg->algtype_signing == LWS_JOSE_ENCTYPE_ECDHES && valid_aescbc_hmac) return lws_jwe_auth_and_decrypt_ecdh_cbc_hs(jwe, temp, temp_len); lwsl_err("%s: unknown cipher alg combo %s / %s\n", __func__, jwe->jose.alg->alg, jwe->jose.enc_alg ? jwe->jose.enc_alg->alg : "NULL"); return -1; } LWS_VISIBLE int lws_jwe_encrypt(struct lws_jwe *jwe, char *temp, int *temp_len) { int valid_aescbc_hmac, valid_aesgcm, ot = *temp_len, ret = -1; if (jwe->jose.recipients >= (int)LWS_ARRAY_SIZE(jwe->jose.recipient)) { lwsl_err("%s: max recipients reached\n", __func__); return -1; } valid_aesgcm = jwe->jose.enc_alg && jwe->jose.enc_alg->algtype_crypto == LWS_JOSE_ENCTYPE_AES_GCM; if (lws_jwe_parse_jose(&jwe->jose, jwe->jws.map.buf[LJWS_JOSE], jwe->jws.map.len[LJWS_JOSE], temp, temp_len) < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } temp += ot - *temp_len; valid_aescbc_hmac = jwe->jose.enc_alg && jwe->jose.enc_alg->algtype_crypto == LWS_JOSE_ENCTYPE_AES_CBC && (jwe->jose.enc_alg->hmac_type == LWS_GENHMAC_TYPE_SHA256 || jwe->jose.enc_alg->hmac_type == LWS_GENHMAC_TYPE_SHA384 || jwe->jose.enc_alg->hmac_type == LWS_GENHMAC_TYPE_SHA512); if ((jwe->jose.alg->algtype_signing == LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5 || jwe->jose.alg->algtype_signing == LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP)) { /* RSA + AESCBC */ if (valid_aescbc_hmac) { ret = lws_jwe_encrypt_rsa_aes_cbc_hs(jwe, temp, temp_len); goto bail; } /* RSA + AESGCM */ if (valid_aesgcm) { ret = lws_jwe_encrypt_rsa_aes_gcm(jwe, temp, temp_len); goto bail; } } /* AESKW */ if (jwe->jose.alg->algtype_signing == LWS_JOSE_ENCTYPE_AES_ECB && valid_aescbc_hmac) { ret = lws_jwe_encrypt_aeskw_cbc_hs(jwe, temp, temp_len); goto bail; } /* ECDH-ES + AESKW */ if (jwe->jose.alg->algtype_signing == LWS_JOSE_ENCTYPE_ECDHES && valid_aescbc_hmac) { ret = lws_jwe_encrypt_ecdh_cbc_hs(jwe, temp, temp_len); goto bail; } lwsl_err("%s: unknown cipher alg combo %s / %s\n", __func__, jwe->jose.alg->alg, jwe->jose.enc_alg ? jwe->jose.enc_alg->alg : "NULL"); bail: if (ret) memset(&jwe->jose.recipient[jwe->jose.recipients], 0, sizeof(jwe->jose.recipient[0])); else jwe->jose.recipients++; return ret; } /* * JWE Compact Serialization consists of * * BASE64URL(UTF8(JWE Protected Header)) || '.' || * BASE64URL(JWE Encrypted Key) || '.' || * BASE64URL(JWE Initialization Vector) || '.' || * BASE64URL(JWE Ciphertext) || '.' || * BASE64URL(JWE Authentication Tag) * * * In the JWE Compact Serialization, no JWE Shared Unprotected Header or * JWE Per-Recipient Unprotected Header are used. In this case, the * JOSE Header and the JWE Protected Header are the same. * * Therefore: * * - Everything needed in the header part must go in the protected header * (it's the only part emitted). We expect the caller did this. * * - You can't emit Compact representation if there are multiple recipients */ LWS_VISIBLE int lws_jwe_render_compact(struct lws_jwe *jwe, char *out, size_t out_len) { size_t orig = out_len; int n; if (jwe->jose.recipients > 1) { lwsl_notice("%s: can't issue compact representation for" " multiple recipients (%d)\n", __func__, jwe->jose.recipients); return -1; } n = lws_jws_base64_enc(jwe->jws.map.buf[LJWS_JOSE], jwe->jws.map.len[LJWS_JOSE], out, out_len); if (n < 0 || (int)out_len == n) { lwsl_info("%s: unable to encode JOSE\n", __func__); return n; } out += n; *out++ = '.'; out_len -= n + 1; n = lws_jws_base64_enc(jwe->jws.map.buf[LJWE_EKEY], jwe->jws.map.len[LJWE_EKEY], out, out_len); if (n < 0 || (int)out_len == n) { lwsl_info("%s: unable to encode EKEY\n", __func__); return n; } out += n; *out++ = '.'; out_len -= n + 1; n = lws_jws_base64_enc(jwe->jws.map.buf[LJWE_IV], jwe->jws.map.len[LJWE_IV], out, out_len); if (n < 0 || (int)out_len == n) { lwsl_info("%s: unable to encode IV\n", __func__); return n; } out += n; *out++ = '.'; out_len -= n + 1; n = lws_jws_base64_enc(jwe->jws.map.buf[LJWE_CTXT], jwe->jws.map.len[LJWE_CTXT], out, out_len); if (n < 0 || (int)out_len == n) { lwsl_info("%s: unable to encode CTXT\n", __func__); return n; } out += n; *out++ = '.'; out_len -= n + 1; n = lws_jws_base64_enc(jwe->jws.map.buf[LJWE_ATAG], jwe->jws.map.len[LJWE_ATAG], out, out_len); if (n < 0 || (int)out_len == n) { lwsl_info("%s: unable to encode ATAG\n", __func__); return n; } out += n; *out++ = '\0'; out_len -= n; return orig - out_len; } LWS_VISIBLE int lws_jwe_create_packet(struct lws_jwe *jwe, const char *payload, size_t len, const char *nonce, char *out, size_t out_len, struct lws_context *context) { char *buf, *start, *p, *end, *p1, *end1; struct lws_jws jws; int n, m; lws_jws_init(&jws, &jwe->jwk, context); /* * This buffer is local to the function, the actual output is prepared * into out. Only the plaintext protected header * (which contains the public key, 512 bytes for 4096b) goes in * here temporarily. */ n = LWS_PRE + 2048; buf = malloc(n); if (!buf) { lwsl_notice("%s: malloc %d failed\n", __func__, n); return -1; } p = start = buf + LWS_PRE; end = buf + n - LWS_PRE - 1; /* * temporary JWS protected header plaintext */ if (!jwe->jose.alg || !jwe->jose.alg->alg) goto bail; p += lws_snprintf(p, end - p, "{\"alg\":\"%s\",\"jwk\":", jwe->jose.alg->alg); m = end - p; n = lws_jwk_export(&jwe->jwk, 0, p, &m); if (n < 0) { lwsl_notice("failed to export jwk\n"); goto bail; } p += n; p += lws_snprintf(p, end - p, ",\"nonce\":\"%s\"}", nonce); /* * prepare the signed outer JSON with all the parts in */ p1 = out; end1 = out + out_len - 1; p1 += lws_snprintf(p1, end1 - p1, "{\"protected\":\""); jws.map_b64.buf[LJWS_JOSE] = p1; n = lws_jws_base64_enc(start, p - start, p1, end1 - p1); if (n < 0) { lwsl_notice("%s: failed to encode protected\n", __func__); goto bail; } jws.map_b64.len[LJWS_JOSE] = n; p1 += n; p1 += lws_snprintf(p1, end1 - p1, "\",\"payload\":\""); jws.map_b64.buf[LJWS_PYLD] = p1; n = lws_jws_base64_enc(payload, len, p1, end1 - p1); if (n < 0) { lwsl_notice("%s: failed to encode payload\n", __func__); goto bail; } jws.map_b64.len[LJWS_PYLD] = n; p1 += n; p1 += lws_snprintf(p1, end1 - p1, "\",\"header\":\""); jws.map_b64.buf[LJWS_UHDR] = p1; n = lws_jws_base64_enc(payload, len, p1, end1 - p1); if (n < 0) { lwsl_notice("%s: failed to encode payload\n", __func__); goto bail; } jws.map_b64.len[LJWS_UHDR] = n; p1 += n; p1 += lws_snprintf(p1, end1 - p1, "\",\"signature\":\""); /* * taking the b64 protected header and the b64 payload, sign them * and place the signature into the packet */ n = lws_jws_sign_from_b64(&jwe->jose, &jws, p1, end1 - p1); if (n < 0) { lwsl_notice("sig gen failed\n"); goto bail; } jws.map_b64.buf[LJWS_SIG] = p1; jws.map_b64.len[LJWS_SIG] = n; p1 += n; p1 += lws_snprintf(p1, end1 - p1, "\"}"); free(buf); return p1 - out; bail: lws_jws_destroy(&jws); free(buf); return -1; } static const char *protected_en[] = { "encrypted_key", "aad", "iv", "ciphertext", "tag" }; static int protected_idx[] = { LJWE_EKEY, LJWE_AAD, LJWE_IV, LJWE_CTXT, LJWE_ATAG }; /* * The complete JWE may look something like this: * * { * "protected": * "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0", * "unprotected": * {"jku":"https://server.example.com/keys.jwks"}, * "recipients":[ * {"header": * {"alg":"RSA1_5","kid":"2011-04-29"}, * "encrypted_key": * "UGhIOguC7IuEvf_NPVaXsGMoLOmwvc1GyqlIKOK1nN94nHPoltGRhWhw7Zx0- * kFm1NJn8LE9XShH59_i8J0PH5ZZyNfGy2xGdULU7sHNF6Gp2vPLgNZ__deLKx * GHZ7PcHALUzoOegEI-8E66jX2E4zyJKx-YxzZIItRzC5hlRirb6Y5Cl_p-ko3 * YvkkysZIFNPccxRU7qve1WYPxqbb2Yw8kZqa2rMWI5ng8OtvzlV7elprCbuPh * cCdZ6XDP0_F8rkXds2vE4X-ncOIM8hAYHHi29NX0mcKiRaD0-D-ljQTP-cFPg * wCp6X-nZZd9OHBv-B3oWh2TbqmScqXMR4gp_A"}, * {"header": * {"alg":"A128KW","kid":"7"}, * "encrypted_key": * "6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ"}], * "iv": * "AxY8DCtDaGlsbGljb3RoZQ", * "ciphertext": * "KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY", * "tag": * "Mz-VPPyU4RlcuYv1IwIvzw" * } * * The flattened JWE ends up like this * * { * "protected": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0", * "unprotected": {"jku":"https://server.example.com/keys.jwks"}, * "header": {"alg":"A128KW","kid":"7"}, * "encrypted_key": "6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ", * "iv": "AxY8DCtDaGlsbGljb3RoZQ", * "ciphertext": "KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY", * "tag": "Mz-VPPyU4RlcuYv1IwIvzw" * } * * { * "protected":"", * "unprotected":, * "header":, * "encrypted_key":"", * "aad":"", * "iv":"", * "ciphertext":"", * "tag":"" * } */ LWS_VISIBLE int lws_jwe_render_flattened(struct lws_jwe *jwe, char *out, size_t out_len) { char buf[3072], *p1, *end1, protected[128]; int m, n, jlen, plen; jlen = lws_jose_render(&jwe->jose, jwe->jws.jwk, buf, sizeof(buf)); if (jlen < 0) { lwsl_err("%s: lws_jose_render failed\n", __func__); return -1; } /* * prepare the JWE JSON with all the parts in */ p1 = out; end1 = out + out_len - 1; /* * The protected header is b64url encoding of the JOSE header part */ plen = lws_snprintf(protected, sizeof(protected), "{\"alg\":\"%s\",\"enc\":\"%s\"}", jwe->jose.alg->alg, jwe->jose.enc_alg->alg); p1 += lws_snprintf(p1, end1 - p1, "{\"protected\":\""); jwe->jws.map_b64.buf[LJWS_JOSE] = p1; n = lws_jws_base64_enc(protected, plen, p1, end1 - p1); if (n < 0) { lwsl_notice("%s: failed to encode protected\n", __func__); goto bail; } jwe->jws.map_b64.len[LJWS_JOSE] = n; p1 += n; /* unprotected not supported atm */ p1 += lws_snprintf(p1, end1 - p1, "\",\n\"header\":%.*s", jlen, buf); for (m = 0; m < (int)LWS_ARRAY_SIZE(protected_en); m++) if (jwe->jws.map.buf[protected_idx[m]]) { p1 += lws_snprintf(p1, end1 - p1, ",\n\"%s\":\"", protected_en[m]); //jwe->jws.map_b64.buf[protected_idx[m]] = p1; n = lws_jws_base64_enc(jwe->jws.map.buf[protected_idx[m]], jwe->jws.map.len[protected_idx[m]], p1, end1 - p1); if (n < 0) { lwsl_notice("%s: failed to encode %s\n", __func__, protected_en[m]); goto bail; } //jwe->jws.map_b64.len[protected_idx[m]] = n; p1 += n; p1 += lws_snprintf(p1, end1 - p1, "\""); } p1 += lws_snprintf(p1, end1 - p1, "\n}\n"); return p1 - out; bail: lws_jws_destroy(&jwe->jws); return -1; } libwebsockets-3.2.1/lib/jose/jwe/private.h000066400000000000000000000041421357643561300205110ustar00rootroot00000000000000/* * libwebsockets - JSON Web Encryption support * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * */ #define LWS_AESGCM_IV 12 #define LWS_AESGCM_TAG 16 /* jwe-rsa-aescbc.c */ int lws_jwe_auth_and_decrypt_rsa_aes_cbc_hs(struct lws_jwe *jwe); int lws_jwe_encrypt_rsa_aes_cbc_hs(struct lws_jwe *jwe, char *temp, int *temp_len); int lws_jwe_auth_and_decrypt_cbc_hs(struct lws_jwe *jwe, uint8_t *enc_cek, uint8_t *aad, int aad_len); /* jws-rsa-aesgcm.c */ int lws_jwe_auth_and_decrypt_gcm(struct lws_jwe *jwe, uint8_t *enc_cek, uint8_t *aad, int aad_len); int lws_jwe_auth_and_decrypt_rsa_aes_gcm(struct lws_jwe *jwe); int lws_jwe_encrypt_gcm(struct lws_jwe *jwe, uint8_t *enc_cek, uint8_t *aad, int aad_len); int lws_jwe_encrypt_rsa_aes_gcm(struct lws_jwe *jwe, char *temp, int *temp_len); /* jwe-rsa-aeskw.c */ int lws_jwe_encrypt_aeskw_cbc_hs(struct lws_jwe *jwe, char *temp, int *temp_len); int lws_jwe_auth_and_decrypt_aeskw_cbc_hs(struct lws_jwe *jwe); /* aescbc.c */ int lws_jwe_auth_and_decrypt_cbc_hs(struct lws_jwe *jwe, uint8_t *enc_cek, uint8_t *aad, int aad_len); int lws_jwe_encrypt_cbc_hs(struct lws_jwe *jwe, uint8_t *cek, uint8_t *aad, int aad_len); int lws_jwe_auth_and_decrypt_ecdh_cbc_hs(struct lws_jwe *jwe, char *temp, int *temp_len); int lws_jwe_encrypt_ecdh_cbc_hs(struct lws_jwe *jwe, char *temp, int *temp_len); libwebsockets-3.2.1/lib/jose/jwk/000077500000000000000000000000001357643561300166735ustar00rootroot00000000000000libwebsockets-3.2.1/lib/jose/jwk/jwk.c000066400000000000000000000531341357643561300176400ustar00rootroot00000000000000/* * libwebsockets - JSON Web Key support * * Copyright (C) 2017 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "jose/private.h" #if !defined(LWS_PLAT_OPTEE) && !defined(OPTEE_DEV_KIT) #include #endif static const char * const kty_names[] = { "unknown", /* LWS_GENCRYPTO_KTY_UNKNOWN */ "oct", /* LWS_GENCRYPTO_KTY_OCT */ "RSA", /* LWS_GENCRYPTO_KTY_RSA */ "EC" /* LWS_GENCRYPTO_KTY_EC */ }; /* * These are the entire legal token set for names in jwk. * * The first version is used to parse a detached single jwk that don't have any * parent JSON context. The second version is used to parse full jwk objects * that has a "keys": [ ] array containing the keys. */ static const char * const jwk_tok[] = { "keys[]", /* dummy */ "e", "n", "d", "p", "q", "dp", "dq", "qi", /* RSA */ "kty", /* generic */ "k", /* symmetric key data */ "crv", "x", "y", /* EC (also "D") */ "kid", /* generic */ "use" /* mutually exclusive with "key_ops" */, "key_ops" /* mutually exclusive with "use" */, "x5c", /* generic */ "alg" /* generic */ }, * const jwk_outer_tok[] = { "keys[]", "keys[].e", "keys[].n", "keys[].d", "keys[].p", "keys[].q", "keys[].dp", "keys[].dq", "keys[].qi", "keys[].kty", "keys[].k", /* generic */ "keys[].crv", "keys[].x", "keys[].y", /* EC (also "D") */ "keys[].kid", "keys[].use" /* mutually exclusive with "key_ops" */, "keys[].key_ops", /* mutually exclusive with "use" */ "keys[].x5c", "keys[].alg" }; /* information about each token declared above */ #define F_M (1 << 9) /* Mandatory for key type */ #define F_B64 (1 << 10) /* Base64 coded octets */ #define F_B64U (1 << 11) /* Base64 Url coded octets */ #define F_META (1 << 12) /* JWK key metainformation */ #define F_RSA (1 << 13) /* RSA key */ #define F_EC (1 << 14) /* Elliptic curve key */ #define F_OCT (1 << 15) /* octet key */ static unsigned short tok_map[] = { F_RSA | F_EC | F_OCT | F_META | 0xff, F_RSA | F_B64U | F_M | LWS_GENCRYPTO_RSA_KEYEL_E, F_RSA | F_B64U | F_M | LWS_GENCRYPTO_RSA_KEYEL_N, F_RSA | F_EC | F_B64U | LWS_GENCRYPTO_RSA_KEYEL_D, F_RSA | F_B64U | LWS_GENCRYPTO_RSA_KEYEL_P, F_RSA | F_B64U | LWS_GENCRYPTO_RSA_KEYEL_Q, F_RSA | F_B64U | LWS_GENCRYPTO_RSA_KEYEL_DP, F_RSA | F_B64U | LWS_GENCRYPTO_RSA_KEYEL_DQ, F_RSA | F_B64U | LWS_GENCRYPTO_RSA_KEYEL_QI, F_RSA | F_EC | F_OCT | F_META | F_M | JWK_META_KTY, F_OCT | F_B64U | F_M | LWS_GENCRYPTO_OCT_KEYEL_K, F_EC | F_M | LWS_GENCRYPTO_EC_KEYEL_CRV, F_EC | F_B64U | F_M | LWS_GENCRYPTO_EC_KEYEL_X, F_EC | F_B64U | F_M | LWS_GENCRYPTO_EC_KEYEL_Y, F_RSA | F_EC | F_OCT | F_META | JWK_META_KID, F_RSA | F_EC | F_OCT | F_META | JWK_META_USE, F_RSA | F_EC | F_OCT | F_META | JWK_META_KEY_OPS, F_RSA | F_EC | F_OCT | F_META | F_B64 | JWK_META_X5C, F_RSA | F_EC | F_OCT | F_META | JWK_META_ALG, }; static const char *meta_names[] = { "kty", "kid", "use", "key_ops", "x5c", "alg" }; struct lexico { const char *name; int idx; char meta; } lexico_ec[] = { { "alg", JWK_META_ALG, 1 }, { "crv", LWS_GENCRYPTO_EC_KEYEL_CRV, 0 }, { "d", LWS_GENCRYPTO_EC_KEYEL_D, 2 | 0 }, { "key_ops", JWK_META_KEY_OPS, 1 }, { "kid", JWK_META_KID, 1 }, { "kty", JWK_META_KTY, 1 }, { "use", JWK_META_USE, 1 }, { "x", LWS_GENCRYPTO_EC_KEYEL_X, 0 }, { "x5c", JWK_META_X5C, 1 }, { "y", LWS_GENCRYPTO_EC_KEYEL_Y, 0 } }, lexico_oct[] = { { "alg", JWK_META_ALG, 1 }, { "k", LWS_GENCRYPTO_OCT_KEYEL_K, 0 }, { "key_ops", JWK_META_KEY_OPS, 1 }, { "kid", JWK_META_KID, 1 }, { "kty", JWK_META_KTY, 1 }, { "use", JWK_META_USE, 1 }, { "x5c", JWK_META_X5C, 1 } }, lexico_rsa[] = { { "alg", JWK_META_ALG, 1 }, { "d", LWS_GENCRYPTO_RSA_KEYEL_D, 2 | 0 }, { "dp", LWS_GENCRYPTO_RSA_KEYEL_DP, 2 | 0 }, { "dq", LWS_GENCRYPTO_RSA_KEYEL_DQ, 2 | 0 }, { "e", LWS_GENCRYPTO_RSA_KEYEL_E, 0 }, { "key_ops", JWK_META_KEY_OPS, 1 }, { "kid", JWK_META_KID, 1 }, { "kty", JWK_META_KTY, 1 }, { "n", LWS_GENCRYPTO_RSA_KEYEL_N, 0 }, { "p", LWS_GENCRYPTO_RSA_KEYEL_P, 2 | 0 }, { "q", LWS_GENCRYPTO_RSA_KEYEL_Q, 2 | 0 }, { "qi", LWS_GENCRYPTO_RSA_KEYEL_QI, 2 | 0 }, { "use", JWK_META_USE, 1 }, { "x5c", JWK_META_X5C, 1 } }; static const char meta_b64[] = { 0, 0, 0, 0, 1, 0 }; static const char *oct_names[] = { "k" }; static const char oct_b64[] = { 1 }; static const char *rsa_names[] = { "e", "n", "d", "p", "q", "dp", "dq", "qi" }; static const char rsa_b64[] = { 1, 1, 1, 1, 1, 1, 1, 1 }; static const char *ec_names[] = { "crv", "x", "d", "y", }; static const char ec_b64[] = { 0, 1, 1, 1 }; LWS_VISIBLE int lws_jwk_dump(struct lws_jwk *jwk) { const char **enames, *b64; int elems; int n; (void)enames; (void)meta_names; switch (jwk->kty) { default: case LWS_GENCRYPTO_KTY_UNKNOWN: lwsl_err("%s: jwk %p: unknown type\n", __func__, jwk); return 1; case LWS_GENCRYPTO_KTY_OCT: elems = LWS_GENCRYPTO_OCT_KEYEL_COUNT; enames = oct_names; b64 = oct_b64; break; case LWS_GENCRYPTO_KTY_RSA: elems = LWS_GENCRYPTO_RSA_KEYEL_COUNT; enames = rsa_names; b64 = rsa_b64; break; case LWS_GENCRYPTO_KTY_EC: elems = LWS_GENCRYPTO_EC_KEYEL_COUNT; enames = ec_names; b64 = ec_b64; break; } lwsl_info("%s: jwk %p\n", __func__, jwk); for (n = 0; n < LWS_COUNT_JWK_ELEMENTS; n++) { if (jwk->meta[n].buf && meta_b64[n]) { lwsl_info(" meta: %s\n", meta_names[n]); lwsl_hexdump_info(jwk->meta[n].buf, jwk->meta[n].len); } if (jwk->meta[n].buf && !meta_b64[n]) lwsl_info(" meta: %s: '%s'\n", meta_names[n], jwk->meta[n].buf); } for (n = 0; n < elems; n++) { if (jwk->e[n].buf && b64[n]) { lwsl_info(" e: %s\n", enames[n]); lwsl_hexdump_info(jwk->e[n].buf, jwk->e[n].len); } if (jwk->e[n].buf && !b64[n]) lwsl_info(" e: %s: '%s'\n", enames[n], jwk->e[n].buf); } return 0; } static int _lws_jwk_set_el_jwk(struct lws_gencrypto_keyelem *e, char *in, int len) { e->buf = lws_malloc(len + 1, "jwk"); if (!e->buf) return -1; memcpy(e->buf, in, len); e->buf[len] = '\0'; e->len = len; return 0; } static int _lws_jwk_set_el_jwk_b64(struct lws_gencrypto_keyelem *e, char *in, int len) { int dec_size = lws_base64_size(len), n; e->buf = lws_malloc(dec_size, "jwk"); if (!e->buf) return -1; /* same decoder accepts both url or original styles */ n = lws_b64_decode_string_len(in, len, (char *)e->buf, dec_size - 1); if (n < 0) return -1; e->len = n; return 0; } static int _lws_jwk_set_el_jwk_b64u(struct lws_gencrypto_keyelem *e, char *in, int len) { int dec_size = lws_base64_size(len), n; e->buf = lws_malloc(dec_size, "jwk"); if (!e->buf) return -1; /* same decoder accepts both url or original styles */ n = lws_b64_decode_string_len(in, len, (char *)e->buf, dec_size - 1); if (n < 0) return -1; e->len = n; return 0; } void lws_jwk_destroy_elements(struct lws_gencrypto_keyelem *el, int m) { int n; for (n = 0; n < m; n++) if (el[n].buf) { /* wipe all key material when it goes out of scope */ lws_explicit_bzero(el[n].buf, el[n].len); lws_free_set_NULL(el[n].buf); el[n].len = 0; } } LWS_VISIBLE void lws_jwk_destroy(struct lws_jwk *jwk) { lws_jwk_destroy_elements(jwk->e, LWS_ARRAY_SIZE(jwk->e)); lws_jwk_destroy_elements(jwk->meta, LWS_ARRAY_SIZE(jwk->meta)); } static signed char cb_jwk(struct lejp_ctx *ctx, char reason) { struct lws_jwk_parse_state *jps = (struct lws_jwk_parse_state *)ctx->user; struct lws_jwk *jwk = jps->jwk; unsigned int idx, poss, n; if (reason == LEJPCB_VAL_STR_START) jps->pos = 0; if (reason == LEJPCB_OBJECT_START && ctx->path_match == 0 + 1) /* * new keys[] member is starting * * Until we see some JSON names, it could be anything... * there is no requirement for kty to be given first and eg, * ACME specifies the keys must be ordered in lexographic * order - where kty is not first. */ jps->possible = F_RSA | F_EC | F_OCT; if (reason == LEJPCB_OBJECT_END && ctx->path_match == 0 + 1) { /* we completed parsing a key */ if (jps->per_key_cb && jps->possible) { if (jps->per_key_cb(jps->jwk, jps->user)) { lwsl_notice("%s: user cb halts import\n", __func__); return -2; } /* clear it down */ lws_jwk_destroy(jps->jwk); jps->possible = 0; } } if (reason == LEJPCB_COMPLETE) { /* * Now we saw the whole jwk and know the key type, let'jwk insist * that as a whole, it must be consistent and complete. * * The tracking of ->possible bits from even before we know the * kty already makes certain we cannot have key element members * defined that are inconsistent with the key type. */ for (n = 0; n < LWS_ARRAY_SIZE(tok_map); n++) /* * All mandataory elements for the key type * must be present */ if ((tok_map[n] & jps->possible) && ( ((tok_map[n] & (F_M | F_META)) == (F_M | F_META) && !jwk->meta[tok_map[n] & 0xff].buf) || ((tok_map[n] & (F_M | F_META)) == F_M && !jwk->e[tok_map[n] & 0xff].buf))) { lwsl_notice("%s: missing %s\n", __func__, jwk_tok[n]); return -3; } /* * When the key may be public or public + private, ensure the * intra-key members related to that are consistent. * * Only RSA keys need extra care, since EC keys are already * confirmed by making CRV, X and Y mandatory and only D * (the singular private part) optional. For RSA, N and E are * also already known to be present using mandatory checking. */ /* * If a private key, it must have all D, P and Q. Public key * must have none of them. */ if (jwk->kty == LWS_GENCRYPTO_KTY_RSA && !(((!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf) && (!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_P].buf) && (!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_Q].buf)) || (jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf && jwk->e[LWS_GENCRYPTO_RSA_KEYEL_P].buf && jwk->e[LWS_GENCRYPTO_RSA_KEYEL_Q].buf)) ) { lwsl_notice("%s: RSA requires D, P and Q for private\n", __func__); return -3; } /* * If the precomputed private key terms appear, they must all * appear together. */ if (jwk->kty == LWS_GENCRYPTO_KTY_RSA && !(((!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_DP].buf) && (!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_DQ].buf) && (!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_QI].buf)) || (jwk->e[LWS_GENCRYPTO_RSA_KEYEL_DP].buf && jwk->e[LWS_GENCRYPTO_RSA_KEYEL_DQ].buf && jwk->e[LWS_GENCRYPTO_RSA_KEYEL_QI].buf)) ) { lwsl_notice("%s: RSA DP, DQ, QI must all appear " "or none\n", __func__); return -3; } /* * The precomputed private key terms must not appear without * the private key itself also appearing. */ if (jwk->kty == LWS_GENCRYPTO_KTY_RSA && !jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf && jwk->e[LWS_GENCRYPTO_RSA_KEYEL_DQ].buf) { lwsl_notice("%s: RSA DP, DQ, QI can appear only with " "private key\n", __func__); return -3; } if ((jwk->kty == LWS_GENCRYPTO_KTY_RSA || jwk->kty == LWS_GENCRYPTO_KTY_EC) && jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf) jwk->private_key = 1; } if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; if (ctx->path_match == 0 + 1) return 0; idx = tok_map[ctx->path_match - 1]; if ((idx & 0xff) == 0xff) return 0; switch (idx) { /* note: kty is not necessarily first... we have to keep track of * what could match given which element names have already been * seen. Once kty comes, we confirm it'jwk still possible (ie, it'jwk * not trying to tell us that it'jwk RSA now when we saw a "crv" * earlier) and then reduce the possibilities to just the one that * kty told. */ case F_RSA | F_EC | F_OCT | F_META | F_M | JWK_META_KTY: if (ctx->npos == 3 && !strncmp(ctx->buf, "oct", 3)) { if (!(jps->possible & F_OCT)) goto elements_mismatch; jwk->kty = LWS_GENCRYPTO_KTY_OCT; jps->possible = F_OCT; goto cont; } if (ctx->npos == 3 && !strncmp(ctx->buf, "RSA", 3)) { if (!(jps->possible & F_RSA)) goto elements_mismatch; jwk->kty = LWS_GENCRYPTO_KTY_RSA; jps->possible = F_RSA; goto cont; } if (ctx->npos == 2 && !strncmp(ctx->buf, "EC", 2)) { if (!(jps->possible & F_EC)) goto elements_mismatch; jwk->kty = LWS_GENCRYPTO_KTY_EC; jps->possible = F_EC; goto cont; } lwsl_err("%s: Unknown KTY '%.*s'\n", __func__, ctx->npos, ctx->buf); return -1; default: cont: if (jps->pos + ctx->npos >= (int)sizeof(jps->b64)) goto bail; memcpy(jps->b64 + jps->pos, ctx->buf, ctx->npos); jps->pos += ctx->npos; if (reason == LEJPCB_VAL_STR_CHUNK) return 0; /* chunking has been collated */ poss = idx & (F_RSA | F_EC | F_OCT); jps->possible &= poss; if (!jps->possible) goto elements_mismatch; if (idx & F_META) { if (_lws_jwk_set_el_jwk(&jwk->meta[idx & 0x7f], jps->b64, jps->pos) < 0) goto bail; break; } if (idx & F_B64U) { /* key data... do the base64 decode as needed */ if (_lws_jwk_set_el_jwk_b64u(&jwk->e[idx & 0x7f], jps->b64, jps->pos) < 0) goto bail; if (jwk->e[idx & 0x7f].len > LWS_JWE_LIMIT_KEY_ELEMENT_BYTES) { lwsl_notice("%s: oversize keydata\n", __func__); goto bail; } return 0; } if (idx & F_B64) { /* cert data... do non-urlcoded base64 decode */ if (_lws_jwk_set_el_jwk_b64(&jwk->e[idx & 0x7f], jps->b64, jps->pos) < 0) goto bail; return 0; } if (_lws_jwk_set_el_jwk(&jwk->e[idx & 0x7f], jps->b64, jps->pos) < 0) goto bail; break; } return 0; elements_mismatch: lwsl_err("%s: jwk elements mismatch\n", __func__); bail: lwsl_err("%s: element failed\n", __func__); return -1; } void lws_jwk_init_jps(struct lejp_ctx *jctx, struct lws_jwk_parse_state *jps, struct lws_jwk *jwk, lws_jwk_key_import_callback cb, void *user) { if (jwk) memset(jwk, 0, sizeof(*jwk)); jps->jwk = jwk; jps->possible = F_RSA | F_EC | F_OCT; jps->per_key_cb = cb; jps->user = user; jps->pos = 0; lejp_construct(jctx, cb_jwk, jps, cb ? jwk_outer_tok: jwk_tok, LWS_ARRAY_SIZE(jwk_tok)); } LWS_VISIBLE int lws_jwk_dup_oct(struct lws_jwk *jwk, const void *key, int len) { jwk->e[LWS_GENCRYPTO_KTY_OCT].buf = lws_malloc(len, __func__); if (!jwk->e[LWS_GENCRYPTO_KTY_OCT].buf) return -1; jwk->kty = LWS_GENCRYPTO_KTY_OCT; jwk->e[LWS_GENCRYPTO_OCT_KEYEL_K].len = len; memcpy(jwk->e[LWS_GENCRYPTO_KTY_OCT].buf, key, len); return 0; } LWS_VISIBLE int lws_jwk_generate(struct lws_context *context, struct lws_jwk *jwk, enum lws_gencrypto_kty kty, int bits, const char *curve) { int n; memset(jwk, 0, sizeof(*jwk)); jwk->kty = kty; jwk->private_key = 1; switch (kty) { case LWS_GENCRYPTO_KTY_RSA: { struct lws_genrsa_ctx ctx; lwsl_notice("%s: generating %d bit RSA key\n", __func__, bits); n = lws_genrsa_new_keypair(context, &ctx, LGRSAM_PKCS1_1_5, jwk->e, bits); lws_genrsa_destroy(&ctx); if (n) { lwsl_err("%s: problem generating RSA key\n", __func__); return 1; } } break; case LWS_GENCRYPTO_KTY_OCT: n = lws_gencrypto_bits_to_bytes(bits); jwk->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf = lws_malloc(n, "oct"); jwk->e[LWS_GENCRYPTO_OCT_KEYEL_K].len = n; if (lws_get_random(context, jwk->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, n) != n) { lwsl_err("%s: problem getting random\n", __func__); return 1; } break; case LWS_GENCRYPTO_KTY_EC: { struct lws_genec_ctx ctx; if (!curve) { lwsl_err("%s: must have a named curve\n", __func__); return 1; } if (lws_genecdsa_create(&ctx, context, NULL)) return 1; lwsl_notice("%s: generating ECDSA key on curve %s\n", __func__, curve); n = lws_genecdsa_new_keypair(&ctx, curve, jwk->e); lws_genec_destroy(&ctx); if (n) { lwsl_err("%s: problem generating ECDSA key\n", __func__); return 1; } } break; case LWS_GENCRYPTO_KTY_UNKNOWN: default: lwsl_err("%s: unknown kty\n", __func__); return 1; } return 0; } LWS_VISIBLE int lws_jwk_import(struct lws_jwk *jwk, lws_jwk_key_import_callback cb, void *user, const char *in, size_t len) { struct lejp_ctx jctx; struct lws_jwk_parse_state jps; int m; lws_jwk_init_jps(&jctx, &jps, jwk, cb, user); m = (int)(signed char)lejp_parse(&jctx, (uint8_t *)in, len); lejp_destruct(&jctx); if (m < 0) { lwsl_notice("%s: parse got %d\n", __func__, m); lws_jwk_destroy(jwk); return -1; } switch (jwk->kty) { case LWS_GENCRYPTO_KTY_UNKNOWN: lwsl_notice("%s: missing or unknown kyt\n", __func__); lws_jwk_destroy(jwk); return -1; default: break; } return 0; } LWS_VISIBLE int lws_jwk_export(struct lws_jwk *jwk, int private, char *p, int *len) { char *start = p, *end = &p[*len - 1]; int n, m, limit, first = 1, asym = 0; struct lexico *l; /* RFC7638 lexicographic order requires * RSA: e -> kty -> n * oct: k -> kty * * ie, meta and key data elements appear interleaved in name alpha order */ p += lws_snprintf(p, end - p, "{"); switch (jwk->kty) { case LWS_GENCRYPTO_KTY_OCT: l = lexico_oct; limit = LWS_ARRAY_SIZE(lexico_oct); break; case LWS_GENCRYPTO_KTY_RSA: l = lexico_rsa; limit = LWS_ARRAY_SIZE(lexico_rsa); asym = 1; break; case LWS_GENCRYPTO_KTY_EC: l = lexico_ec; limit = LWS_ARRAY_SIZE(lexico_ec); asym = 1; break; default: return -1; } for (n = 0; n < limit; n++) { const char *q, *q_end; char tok[12]; int pos = 0, f = 1; if ((l->meta & 1) && (jwk->meta[l->idx].buf || l->idx == (int)JWK_META_KTY)) { switch (l->idx) { case JWK_META_KTY: if (!first) *p++ = ','; first = 0; p += lws_snprintf(p, end - p, "\"%s\":\"%s\"", l->name, kty_names[jwk->kty]); break; case JWK_META_KEY_OPS: if (!first) *p++ = ','; first = 0; q = (const char *)jwk->meta[l->idx].buf; q_end = q + jwk->meta[l->idx].len; p += lws_snprintf(p, end - p, "\"%s\":[", l->name); /* * For the public version, usages that * require the private part must be * snipped */ while (q < q_end) { if (*q != ' ' && pos < (int)sizeof(tok) - 1) { tok[pos++] = *q++; if (q != q_end) continue; } tok[pos] = '\0'; pos = 0; if (private || !asym || (strcmp(tok, "sign") && strcmp(tok, "encrypt"))) { if (!f) *p++ = ','; f = 0; p += lws_snprintf(p, end - p, "\"%s\"", tok); } q++; } *p++ = ']'; break; default: /* both sig and enc require asym private key */ if (!private && asym && l->idx == (int)JWK_META_USE) break; if (!first) *p++ = ','; first = 0; p += lws_snprintf(p, end - p, "\"%s\":\"%.*s\"", l->name, jwk->meta[l->idx].len, jwk->meta[l->idx].buf); break; } } if ((!(l->meta & 1)) && jwk->e[l->idx].buf && (private || !(l->meta & 2))) { if (!first) *p++ = ','; first = 0; p += lws_snprintf(p, end - p, "\"%s\":\"", l->name); if (jwk->kty == LWS_GENCRYPTO_KTY_EC && l->idx == (int)LWS_GENCRYPTO_EC_KEYEL_CRV) m = lws_snprintf(p, end - p, "%.*s", jwk->e[l->idx].len, (const char *)jwk->e[l->idx].buf); else m = lws_jws_base64_enc( (const char *)jwk->e[l->idx].buf, jwk->e[l->idx].len, p, end - p - 4); if (m < 0) { lwsl_notice("%s: enc failed\n", __func__); return -1; } p += m; p += lws_snprintf(p, end - p, "\""); } l++; } p += lws_snprintf(p, end - p, "}\n"); *len -= p - start; return p - start; } LWS_VISIBLE int lws_jwk_rfc7638_fingerprint(struct lws_jwk *jwk, char *digest32) { struct lws_genhash_ctx hash_ctx; int tmpsize = 2536, n; char *tmp; tmp = lws_malloc(tmpsize, "rfc7638 tmp"); n = lws_jwk_export(jwk, 0, tmp, &tmpsize); if (n < 0) goto bail; if (lws_genhash_init(&hash_ctx, LWS_GENHASH_TYPE_SHA256)) goto bail; if (lws_genhash_update(&hash_ctx, tmp, n)) { lws_genhash_destroy(&hash_ctx, NULL); goto bail; } lws_free(tmp); if (lws_genhash_destroy(&hash_ctx, digest32)) return -1; return 0; bail: lws_free(tmp); return -1; } LWS_VISIBLE int lws_jwk_strdup_meta(struct lws_jwk *jwk, enum enum_jwk_meta_tok idx, const char *in, int len) { jwk->meta[idx].buf = lws_malloc(len, __func__); if (!jwk->meta[idx].buf) return 1; jwk->meta[idx].len = len; memcpy(jwk->meta[idx].buf, in, len); return 0; } LWS_VISIBLE int lws_jwk_load(struct lws_jwk *jwk, const char *filename, lws_jwk_key_import_callback cb, void *user) { int buflen = 4096; char *buf = lws_malloc(buflen, "jwk-load"); int n; if (!buf) return -1; n = lws_plat_read_file(filename, buf, buflen); if (n < 0) goto bail; n = lws_jwk_import(jwk, cb, user, buf, n); lws_free(buf); return n; bail: lws_free(buf); return -1; } LWS_VISIBLE int lws_jwk_save(struct lws_jwk *jwk, const char *filename) { int buflen = 4096; char *buf = lws_malloc(buflen, "jwk-save"); int n, m; if (!buf) return -1; n = lws_jwk_export(jwk, 1, buf, &buflen); if (n < 0) goto bail; m = lws_plat_write_file(filename, buf, n); lws_free(buf); if (m) return -1; return 0; bail: lws_free(buf); return -1; } libwebsockets-3.2.1/lib/jose/jws/000077500000000000000000000000001357643561300167035ustar00rootroot00000000000000libwebsockets-3.2.1/lib/jose/jws/jose.c000066400000000000000000000356501357643561300200200ustar00rootroot00000000000000/* * libwebsockets - JSON Web Signature support * * Copyright (C) 2017 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * JOSE is actually specified as part of JWS RFC7515. JWE references RFC7515 * to specify its JOSE JSON object. So it lives in ./lib/jose/jws/jose.c. */ #include "core/private.h" #include "jose/private.h" #include static const char * const jws_jose[] = { "alg", /* REQUIRED */ "jku", "jwk", "kid", "x5u", "x5c", "x5t", "x5t#S256", "typ", "cty", "crit", /* valid for JWE only below here */ "recipients[].header", "recipients[].header.alg", "recipients[].header.kid", "recipients[].encrypted_key", "enc", "zip", /* ("DEF" = deflate) */ "epk", /* valid for JWE ECDH only */ "apu", /* valid for JWE ECDH only */ "apv", /* valid for JWE ECDH only */ "iv", /* valid for JWE AES only */ "tag", /* valid for JWE AES only */ "p2s", /* valid for JWE PBES2 only */ "p2c" /* valid for JWE PBES2 only */ }; struct jose_cb_args { struct lws_jose *jose; struct lejp_ctx jwk_jctx; /* fake lejp context used to parse epk */ struct lws_jwk_parse_state jps; /* fake jwk parse state */ char *temp; int *temp_len; unsigned int is_jwe; unsigned int recipients_array; int recip; }; /* * JWE A.4.7 Complete JWE JSON Serialization example * * LEJPCB_CONSTRUCTED * LEJPCB_START * LEJPCB_OBJECT_START * * protected LEJPCB_PAIR_NAME * protected LEJPCB_VAL_STR_START * protected LEJPCB_VAL_STR_END * * unprotected LEJPCB_PAIR_NAME * unprotected LEJPCB_OBJECT_START * unprotected.jku LEJPCB_PAIR_NAME * unprotected.jku LEJPCB_VAL_STR_START * unprotected.jku LEJPCB_VAL_STR_END * unprotected.jku LEJPCB_OBJECT_END * * recipients LEJPCB_PAIR_NAME * recipients[] LEJPCB_ARRAY_START * * recipients[] LEJPCB_OBJECT_START * recipients[].header LEJPCB_PAIR_NAME * recipients[].header LEJPCB_OBJECT_START * recipients[].header.alg LEJPCB_PAIR_NAME * recipients[].header.alg LEJPCB_VAL_STR_START * recipients[].header.alg LEJPCB_VAL_STR_END * recipients[].header.kid LEJPCB_PAIR_NAME * recipients[].header.kid LEJPCB_VAL_STR_START * recipients[].header.kid LEJPCB_VAL_STR_END * recipients[] LEJPCB_OBJECT_END * recipients[].encrypted_key LEJPCB_PAIR_NAME * recipients[].encrypted_key LEJPCB_VAL_STR_START * recipients[].encrypted_key LEJPCB_VAL_STR_CHUNK * recipients[].encrypted_key LEJPCB_VAL_STR_END * recipients[] LEJPCB_OBJECT_END (ctx->sp = 1) * * recipients[] LEJPCB_OBJECT_START * recipients[].header LEJPCB_PAIR_NAME * recipients[].header LEJPCB_OBJECT_START * recipients[].header.alg LEJPCB_PAIR_NAME * recipients[].header.alg LEJPCB_VAL_STR_START * recipients[].header.alg LEJPCB_VAL_STR_END * recipients[].header.kid LEJPCB_PAIR_NAME * recipients[].header.kid LEJPCB_VAL_STR_START * recipients[].header.kid LEJPCB_VAL_STR_END * recipients[] LEJPCB_OBJECT_END * recipients[].encrypted_key LEJPCB_PAIR_NAME * recipients[].encrypted_key LEJPCB_VAL_STR_START * recipients[].encrypted_key LEJPCB_VAL_STR_END * recipients[] LEJPCB_OBJECT_END (ctx->sp = 1) * * recipients[] LEJPCB_ARRAY_END * * iv LEJPCB_PAIR_NAME * iv LEJPCB_VAL_STR_START * iv LEJPCB_VAL_STR_END * ciphertext LEJPCB_PAIR_NAME * ciphertext LEJPCB_VAL_STR_START * ciphertext LEJPCB_VAL_STR_END * tag LEJPCB_PAIR_NAME * tag LEJPCB_VAL_STR_START * tag LEJPCB_VAL_STR_END * * tag LEJPCB_OBJECT_END * tag LEJPCB_COMPLETE * tag LEJPCB_DESTRUCTED * */ /* * RFC7516 7.2.2 * * Note that when using the flattened syntax, just as when using the * general syntax, any unprotected Header Parameter values can reside in * either the "unprotected" member or the "header" member, or in both. */ static signed char lws_jws_jose_cb(struct lejp_ctx *ctx, char reason) { struct jose_cb_args *args = (struct jose_cb_args *)ctx->user; int n; //, dest; /* * In JOSE JSON, the element "epk" contains a fully-formed JWK. * * For JOSE paths beginning "epk.", we pass them through to a JWK * LEJP subcontext to parse using the JWK parser directly. */ if (args->is_jwe && !strncmp(ctx->path, "epk.", 4)) { memcpy(args->jwk_jctx.path, ctx->path + 4, sizeof(ctx->path) - 4); memcpy(args->jwk_jctx.buf, ctx->buf, ctx->npos); args->jwk_jctx.npos = ctx->npos; if (!ctx->path_match) args->jwk_jctx.path_match = 0; lejp_check_path_match(&args->jwk_jctx); if (args->jwk_jctx.path_match) args->jwk_jctx.pst[args->jwk_jctx.pst_sp]. callback(&args->jwk_jctx, reason); } // lwsl_notice("%s: %s %d (%d)\n", __func__, ctx->path, reason, ctx->sp); /* at the end of each recipients[] entry, bump recipients count */ if (args->is_jwe && reason == LEJPCB_OBJECT_END && ctx->sp == 1 && !strcmp(ctx->path, "recipients[]")) args->jose->recipients++; if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; //dest = ctx->path_match - 1; switch (ctx->path_match - 1) { /* strings */ case LJJHI_ALG: /* REQUIRED */ /* * look up whether we support this alg and point the caller at * its definition if so */ if (!args->is_jwe && lws_gencrypto_jws_alg_to_definition(ctx->buf, &args->jose->alg)) { lwsl_notice("%s: unknown alg '%s'\n", __func__, ctx->buf); return -1; } if (args->is_jwe && lws_gencrypto_jwe_alg_to_definition(ctx->buf, &args->jose->alg)) { lwsl_notice("%s: unknown JWE alg '%s'\n", __func__, ctx->buf); return -1; } return 0; case LJJHI_TYP: /* Optional: string: media type */ if (strcmp(ctx->buf, "JWT")) return -1; break; case LJJHI_JKU: /* Optional: string */ case LJJHI_KID: /* Optional: string */ case LJJHI_X5U: /* Optional: string: url of public key cert / chain */ case LJJHI_CTY: /* Optional: string: content media type */ /* base64 */ case LJJHI_X5C: /* Optional: base64 (NOT -url): actual cert */ /* base64-url */ case LJJHI_X5T: /* Optional: base64url: SHA-1 of actual cert */ case LJJHI_X5T_S256: /* Optional: base64url: SHA-256 of actual cert */ /* array of strings */ case LJJHI_CRIT: /* Optional for send, REQUIRED: array of strings: * mustn't contain standardized strings or null set */ break; /* jwk child */ case LJJHI_JWK: /* Optional: jwk JSON object: public key: */ /* past here, JWE only */ case LJJHI_RECIPS_HDR: if (!args->is_jwe) { lwsl_info("%s: recipients in jws\n", __func__); return -1; } args->recipients_array = 1; break; case LJJHI_RECIPS_HDR_ALG: case LJJHI_RECIPS_HDR_KID: break; case LJJHI_RECIPS_EKEY: if (!args->is_jwe) { lwsl_info("%s: recipients in jws\n", __func__); return -1; } args->recipients_array = 1; //dest = ; goto append_string; case LJJHI_ENC: /* JWE only: Mandatory: string */ if (!args->is_jwe) { lwsl_info("%s: enc in jws\n", __func__); return -1; } if (lws_gencrypto_jwe_enc_to_definition(ctx->buf, &args->jose->enc_alg)) { lwsl_notice("%s: unknown enc '%s'\n", __func__, ctx->buf); return -1; } break; case LJJHI_ZIP: /* JWE only: Optional: string ("DEF" = deflate) */ if (!args->is_jwe) return -1; goto append_string; case LJJHI_EPK: /* Additional arg for JWE ECDH */ if (!args->is_jwe) return -1; /* Ephemeral key... this JSON subsection is actually a JWK */ lwsl_err("LJJHI_EPK\n"); break; case LJJHI_APU: /* Additional arg for JWE ECDH */ if (!args->is_jwe) return -1; /* Agreement Party U */ goto append_string; case LJJHI_APV: /* Additional arg for JWE ECDH */ if (!args->is_jwe) return -1; /* Agreement Party V */ goto append_string; case LJJHI_IV: /* Additional arg for JWE AES */ if (!args->is_jwe) return -1; goto append_string; case LJJHI_TAG: /* Additional arg for JWE AES */ if (!args->is_jwe) return -1; goto append_string; case LJJHI_P2S: /* Additional arg for JWE PBES2 */ if (!args->is_jwe) return -1; goto append_string; case LJJHI_P2C: /* Additional arg for JWE PBES2 */ if (!args->is_jwe) return -1; goto append_string; /* ignore what we don't understand */ default: return 0; } return 0; append_string: if (*args->temp_len < ctx->npos) { lwsl_err("%s: out of parsing space\n", __func__); return -1; } if (!args->jose->e[ctx->path_match - 1].buf) { args->jose->e[ctx->path_match - 1].buf = (uint8_t *)args->temp; args->jose->e[ctx->path_match - 1].len = 0; } memcpy(args->temp, ctx->buf, ctx->npos); args->temp += ctx->npos; *args->temp_len -= ctx->npos; args->jose->e[ctx->path_match - 1].len += ctx->npos; if (reason == LEJPCB_VAL_STR_END) { n = lws_b64_decode_string_len( (const char *)args->jose->e[ctx->path_match - 1].buf, args->jose->e[ctx->path_match - 1].len, (char *)args->jose->e[ctx->path_match - 1].buf, args->jose->e[ctx->path_match - 1].len + 1); if (n < 0) { lwsl_err("%s: b64 decode failed\n", __func__); return -1; } args->temp -= args->jose->e[ctx->path_match - 1].len - n - 1; *args->temp_len += args->jose->e[ctx->path_match - 1].len - n - 1; args->jose->e[ctx->path_match - 1].len = n; } return 0; } void lws_jose_init(struct lws_jose *jose) { memset(jose, 0, sizeof(*jose)); } static void lws_jose_recip_destroy(struct lws_jws_recpient *r) { lws_jwk_destroy(&r->jwk_ephemeral); lws_jwk_destroy(&r->jwk); } void lws_jose_destroy(struct lws_jose *jose) { int n; for (n = 0; n < (int)LWS_ARRAY_SIZE(jose->recipient); n++) lws_jose_recip_destroy(&jose->recipient[n]); } static int lws_jose_parse(struct lws_jose *jose, const uint8_t *buf, int n, char *temp, int *temp_len, int is_jwe) { struct lejp_ctx jctx; struct jose_cb_args args; int m; if (is_jwe) /* prepare a context for JOSE epk ephemeral jwk parsing */ lws_jwk_init_jps(&args.jwk_jctx, &args.jps, &jose->recipient[jose->recipients].jwk_ephemeral, NULL, NULL); args.is_jwe = is_jwe; args.temp = temp; args.temp_len = temp_len; args.jose = jose; args.recip = 0; args.recipients_array = 0; jose->recipients = 0; lejp_construct(&jctx, lws_jws_jose_cb, &args, jws_jose, LWS_ARRAY_SIZE(jws_jose)); m = (int)(signed char)lejp_parse(&jctx, (uint8_t *)buf, n); lejp_destruct(&jctx); if (m < 0) { lwsl_notice("%s: parse %.*s returned %d\n", __func__, n, buf, m); return -1; } if (!args.recipients_array && jose->recipient[0].unprot[LJJHI_ALG].buf) /* if no explicit recipients[], we got one */ jose->recipients++; return 0; } int lws_jws_parse_jose(struct lws_jose *jose, const char *buf, int len, char *temp, int *temp_len) { return lws_jose_parse(jose, (const uint8_t *)buf, len, temp, temp_len, 0); } int lws_jwe_parse_jose(struct lws_jose *jose, const char *buf, int len, char *temp, int *temp_len) { return lws_jose_parse(jose, (const uint8_t *)buf, len, temp, temp_len, 1); } int lws_jose_render(struct lws_jose *jose, struct lws_jwk *aux_jwk, char *out, size_t out_len) { struct lws_jwk *jwk; char *end = out + out_len - 1; int n, m, f, sub = 0, vl; /* JOSE requires an alg */ if (!jose->alg || !jose->alg->alg) goto bail; *out++ = '{'; for (n = 0; n < LWS_COUNT_JOSE_HDR_ELEMENTS; n++) { switch (n) { /* strings */ case LJJHI_ALG: /* REQUIRED */ case LJJHI_JKU: /* Optional: string */ case LJJHI_KID: /* Optional: string */ case LJJHI_TYP: /* Optional: string: media type */ case LJJHI_CTY: /* Optional: string: content media type */ case LJJHI_X5U: /* Optional: string: pubkey cert / chain URL */ case LJJHI_ENC: /* JWE only: Optional: string */ case LJJHI_ZIP: /* JWE only: Optional: string ("DEF"=deflate) */ if (jose->e[n].buf) { out += lws_snprintf(out, end - out, "%s\"%s\":\"%s\"", sub ? ",\n" : "", jws_jose[n], jose->e[n].buf); sub = 1; } break; case LJJHI_X5T: /* Optional: base64url: SHA-1 of actual cert */ case LJJHI_X5T_S256: /* Optional: base64url: SHA-256 of cert */ case LJJHI_APU: /* Additional arg for JWE ECDH: b64url */ case LJJHI_APV: /* Additional arg for JWE ECDH: b64url */ case LJJHI_IV: /* Additional arg for JWE AES: b64url */ case LJJHI_TAG: /* Additional arg for JWE AES: b64url */ case LJJHI_P2S: /* Additional arg for JWE PBES2: b64url: salt */ if (jose->e[n].buf) { out += lws_snprintf(out, end - out, "%s\"%s\":\"", sub ? ",\n" : "", jws_jose[n]); sub = 1; m = lws_b64_encode_string_url((const char *) jose->e[n].buf, jose->e[n].len, out, end - out); if (m < 0) return -1; out += m; out += lws_snprintf(out, end - out, "\""); } break; case LJJHI_P2C: /* Additional arg for JWE PBES2: int: count */ break; /* don't support atm */ case LJJHI_X5C: /* Optional: base64 (NOT -url): actual cert */ if (jose->e[n].buf) { out += lws_snprintf(out, end - out, "%s\"%s\":\"", sub ? ",\n" : "", jws_jose[n]); sub = 1; m = lws_b64_encode_string((const char *) jose->e[n].buf, jose->e[n].len, out, end - out); if (m < 0) return -1; out += m; out += lws_snprintf(out, end - out, "\""); } break; case LJJHI_EPK: /* Additional arg for JWE ECDH: eph pubkey */ case LJJHI_JWK: /* Optional: jwk JSON object: public key: */ jwk = n == LJJHI_EPK ? &jose->recipient[0].jwk_ephemeral : aux_jwk; if (!jwk || !jwk->kty) break; out += lws_snprintf(out, end - out, "%s\"%s\":", sub ? ",\n" : "", jws_jose[n]); sub = 1; vl = end - out; m = lws_jwk_export(jwk, 0, out, &vl); if (m < 0) { lwsl_notice("%s: failed to export key\n", __func__); return -1; } out += m; break; case LJJHI_CRIT:/* Optional for send, REQUIRED: array of strings: * mustn't contain standardized strings or null set */ if (!jose->e[n].buf) break; out += lws_snprintf(out, end - out, "%s\"%s\":[", sub ? ",\n" : "", jws_jose[n]); sub = 1; m = 0; f = 1; while ((unsigned int)m < jose->e[n].len && (end - out) > 1) { if (jose->e[n].buf[m] == ' ') { if (!f) *out++ = '\"'; m++; f = 1; continue; } if (f) { if (m) *out++ = ','; *out++ = '\"'; f = 0; } *out++ = jose->e[n].buf[m]; m++; } break; } } *out++ = '}'; if (out > end - 2) return -1; return out_len - (end - out) - 1; bail: return -1; } libwebsockets-3.2.1/lib/jose/jws/jws.c000066400000000000000000000531551357643561300176630ustar00rootroot00000000000000/* * libwebsockets - JSON Web Signature support * * Copyright (C) 2017 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "private.h" /* * Currently only support flattened or compact (implicitly single signature) */ static const char * const jws_json[] = { "protected", /* base64u */ "header", /* JSON */ "payload", /* base64u payload */ "signature", /* base64u signature */ //"signatures[].protected", //"signatures[].header", //"signatures[].signature" }; enum lws_jws_json_tok { LJWSJT_PROTECTED, LJWSJT_HEADER, LJWSJT_PAYLOAD, LJWSJT_SIGNATURE, // LJWSJT_SIGNATURES_PROTECTED, // LJWSJT_SIGNATURES_HEADER, // LJWSJT_SIGNATURES_SIGNATURE, }; /* parse a JWS complete or flattened JSON object */ struct jws_cb_args { struct lws_jws *jws; char *temp; int *temp_len; }; static signed char lws_jws_json_cb(struct lejp_ctx *ctx, char reason) { struct jws_cb_args *args = (struct jws_cb_args *)ctx->user; int n, m; if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; switch (ctx->path_match - 1) { /* strings */ case LJWSJT_PROTECTED: /* base64u: JOSE: must contain 'alg' */ m = LJWS_JOSE; goto append_string; case LJWSJT_PAYLOAD: /* base64u */ m = LJWS_PYLD; goto append_string; case LJWSJT_SIGNATURE: /* base64u */ m = LJWS_SIG; goto append_string; case LJWSJT_HEADER: /* unprotected freeform JSON */ break; default: return -1; } return 0; append_string: if (*args->temp_len < ctx->npos) { lwsl_err("%s: out of parsing space\n", __func__); return -1; } /* * We keep both b64u and decoded in temp mapped using map / map_b64, * the jws signature is actually over the b64 content not the plaintext, * and we can't do it until we see the protected alg. */ if (!args->jws->map_b64.buf[m]) { args->jws->map_b64.buf[m] = args->temp; args->jws->map_b64.len[m] = 0; } memcpy(args->temp, ctx->buf, ctx->npos); args->temp += ctx->npos; *args->temp_len -= ctx->npos; args->jws->map_b64.len[m] += ctx->npos; if (reason == LEJPCB_VAL_STR_END) { args->jws->map.buf[m] = args->temp; n = lws_b64_decode_string_len( (const char *)args->jws->map_b64.buf[m], args->jws->map_b64.len[m], (char *)args->temp, *args->temp_len); if (n < 0) { lwsl_err("%s: b64 decode failed: in len %d, m %d\n", __func__, (int)args->jws->map_b64.len[m], m); return -1; } args->temp += n; *args->temp_len -= n; args->jws->map.len[m] = n; } return 0; } static int lws_jws_json_parse(struct lws_jws *jws, const uint8_t *buf, int len, char *temp, int *temp_len) { struct jws_cb_args args; struct lejp_ctx jctx; int m = 0; args.jws = jws; args.temp = temp; args.temp_len = temp_len; lejp_construct(&jctx, lws_jws_json_cb, &args, jws_json, LWS_ARRAY_SIZE(jws_json)); m = (int)(signed char)lejp_parse(&jctx, (uint8_t *)buf, len); lejp_destruct(&jctx); if (m < 0) { lwsl_notice("%s: parse returned %d\n", __func__, m); return -1; } return 0; } LWS_VISIBLE void lws_jws_init(struct lws_jws *jws, struct lws_jwk *jwk, struct lws_context *context) { memset(jws, 0, sizeof(*jws)); jws->context = context; jws->jwk = jwk; } static void lws_jws_map_bzero(struct lws_jws_map *map) { int n; /* no need to scrub first jose header element (it can be canned then) */ for (n = 1; n < LWS_JWS_MAX_COMPACT_BLOCKS; n++) if (map->buf[n]) lws_explicit_bzero((void *)map->buf[n], map->len[n]); } LWS_VISIBLE void lws_jws_destroy(struct lws_jws *jws) { lws_jws_map_bzero(&jws->map); jws->jwk = NULL; } LWS_VISIBLE int lws_jws_dup_element(struct lws_jws_map *map, int idx, char *temp, int *temp_len, const void *in, size_t in_len, size_t actual_alloc) { if (!actual_alloc) actual_alloc = in_len; if ((size_t)*temp_len < actual_alloc) return -1; memcpy(temp, in, in_len); map->len[idx] = in_len; map->buf[idx] = temp; *temp_len -= actual_alloc; return 0; } LWS_VISIBLE int lws_jws_encode_b64_element(struct lws_jws_map *map, int idx, char *temp, int *temp_len, const void *in, size_t in_len) { int n; if (*temp_len < lws_base64_size((int)in_len)) return -1; n = lws_jws_base64_enc(in, in_len, temp, *temp_len); if (n < 0) return -1; map->len[idx] = n; map->buf[idx] = temp; *temp_len -= n; return 0; } LWS_VISIBLE int lws_jws_randomize_element(struct lws_context *context, struct lws_jws_map *map, int idx, char *temp, int *temp_len, size_t random_len, size_t actual_alloc) { if (!actual_alloc) actual_alloc = random_len; if ((size_t)*temp_len < actual_alloc) return -1; map->len[idx] = random_len; map->buf[idx] = temp; if (lws_get_random(context, temp, random_len) != (int)random_len) { lwsl_err("Problem getting random\n"); return -1; } *temp_len -= actual_alloc; return 0; } LWS_VISIBLE int lws_jws_alloc_element(struct lws_jws_map *map, int idx, char *temp, int *temp_len, size_t len, size_t actual_alloc) { if (!actual_alloc) actual_alloc = len; if ((size_t)*temp_len < actual_alloc) return -1; map->len[idx] = len; map->buf[idx] = temp; *temp_len -= actual_alloc; return 0; } LWS_VISIBLE int lws_jws_base64_enc(const char *in, size_t in_len, char *out, size_t out_max) { int n; n = lws_b64_encode_string_url(in, in_len, out, out_max - 1); if (n < 0) { lwsl_notice("%s: in len %d too large for %d out buf\n", __func__, (int)in_len, (int)out_max); return n; /* too large for output buffer */ } /* trim the terminal = */ while (n && out[n - 1] == '=') n--; out[n] = '\0'; return n; } LWS_VISIBLE int lws_jws_b64_compact_map(const char *in, int len, struct lws_jws_map *map) { int me = 0; memset(map, 0, sizeof(*map)); map->buf[me] = (char *)in; map->len[me] = 0; while (len--) { if (*in++ == '.') { if (++me == LWS_JWS_MAX_COMPACT_BLOCKS) return -1; map->buf[me] = (char *)in; map->len[me] = 0; continue; } map->len[me]++; } return me + 1; } /* b64 in, map contains decoded elements, if non-NULL, * map_b64 set to b64 elements */ LWS_VISIBLE int lws_jws_compact_decode(const char *in, int len, struct lws_jws_map *map, struct lws_jws_map *map_b64, char *out, int *out_len) { int blocks, n, m = 0; if (!map_b64) map_b64 = map; memset(map_b64, 0, sizeof(*map_b64)); memset(map, 0, sizeof(*map)); blocks = lws_jws_b64_compact_map(in, len, map_b64); if (blocks > LWS_JWS_MAX_COMPACT_BLOCKS) return -1; while (m < blocks) { n = lws_b64_decode_string_len(map_b64->buf[m], map_b64->len[m], out, *out_len); if (n < 0) { lwsl_err("%s: b64 decode failed\n", __func__); return -1; } /* replace the map entry with the decoded content */ if (n) map->buf[m] = out; else map->buf[m] = NULL; map->len[m++] = n; out += n; *out_len -= n; if (*out_len < 1) return -1; } return blocks; } static int lws_jws_compact_decode_map(struct lws_jws_map *map_b64, struct lws_jws_map *map, char *out, int *out_len) { int n, m = 0; for (n = 0; n < LWS_JWS_MAX_COMPACT_BLOCKS; n++) { n = lws_b64_decode_string_len(map_b64->buf[m], map_b64->len[m], out, *out_len); if (n < 0) { lwsl_err("%s: b64 decode failed\n", __func__); return -1; } /* replace the map entry with the decoded content */ map->buf[m] = out; map->len[m++] = n; out += n; *out_len -= n; if (*out_len < 1) return -1; } return 0; } LWS_VISIBLE int lws_jws_encode_section(const char *in, size_t in_len, int first, char **p, char *end) { int n, len = (end - *p) - 1; char *p_entry = *p; if (len < 3) return -1; if (!first) *(*p)++ = '.'; n = lws_jws_base64_enc(in, in_len, *p, len - 1); if (n < 0) return -1; *p += n; return (*p) - p_entry; } LWS_VISIBLE int lws_jws_compact_encode(struct lws_jws_map *map_b64, /* b64-encoded */ const struct lws_jws_map *map, /* non-b64 */ char *buf, int *len) { int n, m; for (n = 0; n < LWS_JWS_MAX_COMPACT_BLOCKS; n++) { if (!map->buf[n]) { map_b64->buf[n] = NULL; map_b64->len[n] = 0; continue; } m = lws_jws_base64_enc(map->buf[n], map->len[n], buf, *len); if (m < 0) return -1; buf += m; *len -= m; if (*len < 1) return -1; } return 0; } /* * This takes both a base64 -encoded map and a plaintext map. * * JWS demands base-64 encoded elements for hash computation and at least for * the JOSE header and signature, decoded versions too. */ LWS_VISIBLE int lws_jws_sig_confirm(struct lws_jws_map *map_b64, struct lws_jws_map *map, struct lws_jwk *jwk, struct lws_context *context) { enum enum_genrsa_mode padding = LGRSAM_PKCS1_1_5; char temp[256]; int n, h_len, b = 3, temp_len = sizeof(temp); uint8_t digest[LWS_GENHASH_LARGEST]; struct lws_genhash_ctx hash_ctx; struct lws_genec_ctx ecdsactx; struct lws_genrsa_ctx rsactx; struct lws_genhmac_ctx ctx; struct lws_jose jose; lws_jose_init(&jose); /* only valid if no signature or key */ if (!map_b64->buf[LJWS_SIG] && !map->buf[LJWS_UHDR]) b = 2; if (lws_jws_parse_jose(&jose, map->buf[LJWS_JOSE], map->len[LJWS_JOSE], temp, &temp_len) < 0 || !jose.alg) { lwsl_notice("%s: parse failed\n", __func__); return -1; } if (!strcmp(jose.alg->alg, "none")) { /* "none" compact serialization has 2 blocks: jose.payload */ if (b != 2 || jwk) return -1; /* the lack of a key matches the lack of a signature */ return 0; } /* all other have 3 blocks: jose.payload.sig */ if (b != 3 || !jwk) { lwsl_notice("%s: %d blocks\n", __func__, b); return -1; } switch (jose.alg->algtype_signing) { case LWS_JOSE_ENCTYPE_RSASSA_PKCS1_PSS: case LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP: padding = LGRSAM_PKCS1_OAEP_PSS; /* fallthru */ case LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5: /* RSASSA-PKCS1-v1_5 or OAEP using SHA-256/384/512 */ if (jwk->kty != LWS_GENCRYPTO_KTY_RSA) return -1; /* 6(RSA): compute the hash of the payload into "digest" */ if (lws_genhash_init(&hash_ctx, jose.alg->hash_type)) return -1; /* * JWS Signing Input value: * * BASE64URL(UTF8(JWS Protected Header)) || '.' || * BASE64URL(JWS Payload) */ if (lws_genhash_update(&hash_ctx, map_b64->buf[LJWS_JOSE], map_b64->len[LJWS_JOSE]) || lws_genhash_update(&hash_ctx, ".", 1) || lws_genhash_update(&hash_ctx, map_b64->buf[LJWS_PYLD], map_b64->len[LJWS_PYLD]) || lws_genhash_destroy(&hash_ctx, digest)) { lws_genhash_destroy(&hash_ctx, NULL); return -1; } h_len = lws_genhash_size(jose.alg->hash_type); if (lws_genrsa_create(&rsactx, jwk->e, context, padding, LWS_GENHASH_TYPE_UNKNOWN)) { lwsl_notice("%s: lws_genrsa_public_decrypt_create\n", __func__); return -1; } n = lws_genrsa_hash_sig_verify(&rsactx, digest, jose.alg->hash_type, (uint8_t *)map->buf[LJWS_SIG], map->len[LJWS_SIG]); lws_genrsa_destroy(&rsactx); if (n < 0) { lwsl_notice("%s: decrypt fail\n", __func__); return -1; } break; case LWS_JOSE_ENCTYPE_NONE: /* HSxxx */ /* SHA256/384/512 HMAC */ h_len = lws_genhmac_size(jose.alg->hmac_type); /* 6) compute HMAC over payload */ if (lws_genhmac_init(&ctx, jose.alg->hmac_type, jwk->e[LWS_GENCRYPTO_RSA_KEYEL_E].buf, jwk->e[LWS_GENCRYPTO_RSA_KEYEL_E].len)) return -1; /* * JWS Signing Input value: * * BASE64URL(UTF8(JWS Protected Header)) || '.' || * BASE64URL(JWS Payload) */ if (lws_genhmac_update(&ctx, map_b64->buf[LJWS_JOSE], map_b64->len[LJWS_JOSE]) || lws_genhmac_update(&ctx, ".", 1) || lws_genhmac_update(&ctx, map_b64->buf[LJWS_PYLD], map_b64->len[LJWS_PYLD]) || lws_genhmac_destroy(&ctx, digest)) { lws_genhmac_destroy(&ctx, NULL); return -1; } /* 7) Compare the computed and decoded hashes */ if (lws_timingsafe_bcmp(digest, map->buf[2], h_len)) { lwsl_notice("digest mismatch\n"); return -1; } break; case LWS_JOSE_ENCTYPE_ECDSA: /* ECDSA using SHA-256/384/512 */ /* Confirm the key coming in with this makes sense */ /* has to be an EC key :-) */ if (jwk->kty != LWS_GENCRYPTO_KTY_EC) return -1; /* key must state its curve */ if (!jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].buf) return -1; /* key must match the selected alg curve */ if (strcmp((const char *)jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].buf, jose.alg->curve_name)) return -1; /* * JWS Signing Input value: * * BASE64URL(UTF8(JWS Protected Header)) || '.' || * BASE64URL(JWS Payload) * * Validating the JWS Signature is a bit different from the * previous examples. We need to split the 64 member octet * sequence of the JWS Signature (which is base64url decoded * from the value encoded in the JWS representation) into two * 32 octet sequences, the first representing R and the second * S. We then pass the public key (x, y), the signature (R, S), * and the JWS Signing Input (which is the initial substring of * the JWS Compact Serialization representation up until but not * including the second period character) to an ECDSA signature * verifier that has been configured to use the P-256 curve with * the SHA-256 hash function. */ if (lws_genhash_init(&hash_ctx, jose.alg->hash_type) || lws_genhash_update(&hash_ctx, map_b64->buf[LJWS_JOSE], map_b64->len[LJWS_JOSE]) || lws_genhash_update(&hash_ctx, ".", 1) || lws_genhash_update(&hash_ctx, map_b64->buf[LJWS_PYLD], map_b64->len[LJWS_PYLD]) || lws_genhash_destroy(&hash_ctx, digest)) { lws_genhash_destroy(&hash_ctx, NULL); return -1; } h_len = lws_genhash_size(jose.alg->hash_type); if (lws_genecdsa_create(&ecdsactx, context, NULL)) { lwsl_notice("%s: lws_genrsa_public_decrypt_create\n", __func__); return -1; } if (lws_genecdsa_set_key(&ecdsactx, jwk->e)) { lws_genec_destroy(&ecdsactx); lwsl_notice("%s: ec key import fail\n", __func__); return -1; } n = lws_genecdsa_hash_sig_verify_jws(&ecdsactx, digest, jose.alg->hash_type, jose.alg->keybits_fixed, (uint8_t *)map->buf[LJWS_SIG], map->len[LJWS_SIG]); lws_genec_destroy(&ecdsactx); if (n < 0) { lwsl_notice("%s: verify fail\n", __func__); return -1; } break; default: lwsl_err("%s: unknown alg from jose\n", __func__); return -1; } return 0; } /* it's already a b64 map, we will make a temp plain version */ LWS_VISIBLE int lws_jws_sig_confirm_compact_b64_map(struct lws_jws_map *map_b64, struct lws_jwk *jwk, struct lws_context *context, char *temp, int *temp_len) { struct lws_jws_map map; int n; n = lws_jws_compact_decode_map(map_b64, &map, temp, temp_len); if (n > 3 || n < 0) return -1; return lws_jws_sig_confirm(map_b64, &map, jwk, context); } /* * it's already a compact / concatenated b64 string, we will make a temp * plain version */ LWS_VISIBLE int lws_jws_sig_confirm_compact_b64(const char *in, size_t len, struct lws_jws_map *map, struct lws_jwk *jwk, struct lws_context *context, char *temp, int *temp_len) { struct lws_jws_map map_b64; int n; if (lws_jws_b64_compact_map(in, len, &map_b64) < 0) return -1; n = lws_jws_compact_decode(in, len, map, &map_b64, temp, temp_len); if (n > 3 || n < 0) return -1; return lws_jws_sig_confirm(&map_b64, map, jwk, context); } /* it's already plain, we will make a temp b64 version */ LWS_VISIBLE int lws_jws_sig_confirm_compact(struct lws_jws_map *map, struct lws_jwk *jwk, struct lws_context *context, char *temp, int *temp_len) { struct lws_jws_map map_b64; if (lws_jws_compact_encode(&map_b64, map, temp, temp_len) < 0) return -1; return lws_jws_sig_confirm(&map_b64, map, jwk, context); } int lws_jws_sig_confirm_json(const char *in, size_t len, struct lws_jws *jws, struct lws_jwk *jwk, struct lws_context *context, char *temp, int *temp_len) { if (lws_jws_json_parse(jws, (const uint8_t *)in, len, temp, temp_len)) { lwsl_err("%s: lws_jws_json_parse failed\n", __func__); return -1; } return lws_jws_sig_confirm(&jws->map_b64, &jws->map, jwk, context); } int lws_jws_sign_from_b64(struct lws_jose *jose, struct lws_jws *jws, char *b64_sig, size_t sig_len) { enum enum_genrsa_mode pad = LGRSAM_PKCS1_1_5; uint8_t digest[LWS_GENHASH_LARGEST]; struct lws_genhash_ctx hash_ctx; struct lws_genec_ctx ecdsactx; struct lws_genrsa_ctx rsactx; uint8_t *buf; int n, m; if (jose->alg->hash_type == LWS_GENHASH_TYPE_UNKNOWN && jose->alg->hmac_type == LWS_GENHMAC_TYPE_UNKNOWN && !strcmp(jose->alg->alg, "none")) return 0; if (lws_genhash_init(&hash_ctx, jose->alg->hash_type) || lws_genhash_update(&hash_ctx, jws->map_b64.buf[LJWS_JOSE], jws->map_b64.len[LJWS_JOSE]) || lws_genhash_update(&hash_ctx, ".", 1) || lws_genhash_update(&hash_ctx, jws->map_b64.buf[LJWS_PYLD], jws->map_b64.len[LJWS_PYLD]) || lws_genhash_destroy(&hash_ctx, digest)) { lws_genhash_destroy(&hash_ctx, NULL); return -1; } switch (jose->alg->algtype_signing) { case LWS_JOSE_ENCTYPE_RSASSA_PKCS1_PSS: case LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP: pad = LGRSAM_PKCS1_OAEP_PSS; /* fallthru */ case LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5: if (jws->jwk->kty != LWS_GENCRYPTO_KTY_RSA) return -1; if (lws_genrsa_create(&rsactx, jws->jwk->e, jws->context, pad, LWS_GENHASH_TYPE_UNKNOWN)) { lwsl_notice("%s: lws_genrsa_public_decrypt_create\n", __func__); return -1; } n = jws->jwk->e[LWS_GENCRYPTO_RSA_KEYEL_N].len; buf = lws_malloc(lws_base64_size(n), "jws sign"); if (!buf) return -1; n = lws_genrsa_hash_sign(&rsactx, digest, jose->alg->hash_type, buf, n); lws_genrsa_destroy(&rsactx); if (n < 0) { lwsl_err("%s: lws_genrsa_hash_sign failed\n", __func__); lws_free(buf); return -1; } n = lws_jws_base64_enc((char *)buf, n, b64_sig, sig_len); lws_free(buf); if (n < 0) { lwsl_err("%s: lws_jws_base64_enc failed\n", __func__); } return n; case LWS_JOSE_ENCTYPE_NONE: return lws_jws_base64_enc((char *)digest, lws_genhash_size(jose->alg->hash_type), b64_sig, sig_len); case LWS_JOSE_ENCTYPE_ECDSA: /* ECDSA using SHA-256/384/512 */ /* the key coming in with this makes sense, right? */ /* has to be an EC key :-) */ if (jws->jwk->kty != LWS_GENCRYPTO_KTY_EC) return -1; /* key must state its curve */ if (!jws->jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].buf) return -1; /* must have all his pieces for a private key */ if (!jws->jwk->e[LWS_GENCRYPTO_EC_KEYEL_X].buf || !jws->jwk->e[LWS_GENCRYPTO_EC_KEYEL_Y].buf || !jws->jwk->e[LWS_GENCRYPTO_EC_KEYEL_D].buf) return -1; /* key must match the selected alg curve */ if (strcmp((const char *) jws->jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].buf, jose->alg->curve_name)) return -1; if (lws_genecdsa_create(&ecdsactx, jws->context, NULL)) { lwsl_notice("%s: lws_genrsa_public_decrypt_create\n", __func__); return -1; } if (lws_genecdsa_set_key(&ecdsactx, jws->jwk->e)) { lws_genec_destroy(&ecdsactx); lwsl_notice("%s: ec key import fail\n", __func__); return -1; } m = lws_gencrypto_bits_to_bytes(jose->alg->keybits_fixed) * 2; buf = lws_malloc(m, "jws sign"); if (!buf) return -1; n = lws_genecdsa_hash_sign_jws(&ecdsactx, digest, jose->alg->hash_type, jose->alg->keybits_fixed, (uint8_t *)buf, m); lws_genec_destroy(&ecdsactx); if (n < 0) { lws_free(buf); lwsl_notice("%s: lws_genecdsa_hash_sign_jws fail\n", __func__); return -1; } n = lws_jws_base64_enc((char *)buf, m, b64_sig, sig_len); lws_free(buf); return n; default: break; } /* unknown key type */ return -1; } /* * Flattened JWS JSON: * * { * "payload": "", * "protected": "", * "header": , * "signature": "" * } */ LWS_VISIBLE int lws_jws_write_flattened_json(struct lws_jws *jws, char *flattened, size_t len) { size_t n = 0; if (len < 1) return 1; n += lws_snprintf(flattened + n, len - n , "{\"payload\": \"%.*s\",\n", jws->map_b64.len[LJWS_PYLD], jws->map_b64.buf[LJWS_PYLD]); n += lws_snprintf(flattened + n, len - n , " \"protected\": \"%.*s\",\n", jws->map_b64.len[LJWS_JOSE], jws->map_b64.buf[LJWS_JOSE]); if (jws->map_b64.buf[LJWS_UHDR]) n += lws_snprintf(flattened + n, len - n , " \"header\": %.*s,\n", jws->map_b64.len[LJWS_UHDR], jws->map_b64.buf[LJWS_UHDR]); n += lws_snprintf(flattened + n, len - n , " \"signature\": \"%.*s\"}\n", jws->map_b64.len[LJWS_SIG], jws->map_b64.buf[LJWS_SIG]); return (n >= len - 1); } LWS_VISIBLE int lws_jws_write_compact(struct lws_jws *jws, char *compact, size_t len) { size_t n = 0; if (len < 1) return 1; n += lws_snprintf(compact + n, len - n , "%.*s", jws->map_b64.len[LJWS_JOSE], jws->map_b64.buf[LJWS_JOSE]); n += lws_snprintf(compact + n, len - n , ".%.*s", jws->map_b64.len[LJWS_PYLD], jws->map_b64.buf[LJWS_PYLD]); n += lws_snprintf(compact + n, len - n , ".%.*s", jws->map_b64.len[LJWS_SIG], jws->map_b64.buf[LJWS_SIG]); return n >= len - 1; } libwebsockets-3.2.1/lib/jose/jws/private.h000066400000000000000000000017221357643561300205300ustar00rootroot00000000000000/* * libwebsockets - JSON Web Signature support * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * JOSE is actually specified as part of JWS RFC7515. JWE references RFC7515 * to specify its JOSE JSON object. So it lives in ./lib/jose/jws/jose.c. */ libwebsockets-3.2.1/lib/jose/private.h000066400000000000000000000021611357643561300177230ustar00rootroot00000000000000/* * libwebsockets - jose private header * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ void lws_jwk_destroy_elements(struct lws_gencrypto_keyelem *el, int m); void lws_jwk_init_jps(struct lejp_ctx *jctx, struct lws_jwk_parse_state *jps, struct lws_jwk *jwk, lws_jwk_key_import_callback cb, void *user); int lws_jose_render(struct lws_jose *jose, struct lws_jwk *aux_jwk, char *out, size_t out_len); libwebsockets-3.2.1/lib/misc/000077500000000000000000000000001357643561300160735ustar00rootroot00000000000000libwebsockets-3.2.1/lib/misc/base64-decode.c000066400000000000000000000146231357643561300205520ustar00rootroot00000000000000/* * This code originally came from here * * http://base64.sourceforge.net/b64.c * * with the following license: * * LICENCE: Copyright (c) 2001 Bob Trower, Trantor Standard Systems Inc. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated * documentation files (the "Software"), to deal in the * Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, * sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall * be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY * KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS * OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * VERSION HISTORY: * Bob Trower 08/04/01 -- Create Version 0.00.00B * * I cleaned it up quite a bit to match the (linux kernel) style of the rest * of libwebsockets; this version is under LGPL2.1 + SLE like the rest of lws * since he explicitly allows sublicensing, but I give the URL above so you can * get the original with Bob's super-liberal terms directly if you prefer. */ #include #include #include "core/private.h" static const char encode_orig[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789+/"; static const char encode_url[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789-_"; static const char decode[] = "|$$$}rstuvwxyz{$$$$$$$>?@ABCDEFGHIJKLMNOPQRSTUVW" "$$$$$$XYZ[\\]^_`abcdefghijklmnopq"; static int _lws_b64_encode_string(const char *encode, const char *in, int in_len, char *out, int out_size) { unsigned char triple[3]; int i; int line = 0; int done = 0; while (in_len) { int len = 0; for (i = 0; i < 3; i++) { if (in_len) { triple[i] = *in++; len++; in_len--; } else triple[i] = 0; } if (done + 4 >= out_size) return -1; *out++ = encode[triple[0] >> 2]; *out++ = encode[((triple[0] & 0x03) << 4) | ((triple[1] & 0xf0) >> 4)]; *out++ = (len > 1 ? encode[((triple[1] & 0x0f) << 2) | ((triple[2] & 0xc0) >> 6)] : '='); *out++ = (len > 2 ? encode[triple[2] & 0x3f] : '='); done += 4; line += 4; } if (done + 1 >= out_size) return -1; *out++ = '\0'; return done; } LWS_VISIBLE int lws_b64_encode_string(const char *in, int in_len, char *out, int out_size) { return _lws_b64_encode_string(encode_orig, in, in_len, out, out_size); } LWS_VISIBLE int lws_b64_encode_string_url(const char *in, int in_len, char *out, int out_size) { return _lws_b64_encode_string(encode_url, in, in_len, out, out_size); } /* * returns length of decoded string in out, or -1 if out was too small * according to out_size * * Only reads up to in_len chars, otherwise if in_len is -1 on entry reads until * the first NUL in the input. */ static int _lws_b64_decode_string(const char *in, int in_len, char *out, int out_size) { int len, i, c = 0, done = 0; unsigned char v, quad[4]; while (in_len && *in) { len = 0; for (i = 0; i < 4 && in_len && *in; i++) { v = 0; c = 0; while (in_len && *in && !v) { c = v = *in++; in_len--; /* support the url base64 variant too */ if (v == '-') c = v = '+'; if (v == '_') c = v = '/'; v = (v < 43 || v > 122) ? 0 : decode[v - 43]; if (v) v = (v == '$') ? 0 : v - 61; } if (c) { len++; if (v) quad[i] = v - 1; } else quad[i] = 0; } if (out_size < (done + len + 1)) /* out buffer is too small */ return -1; /* * "The '==' sequence indicates that the last group contained * only one byte, and '=' indicates that it contained two * bytes." (wikipedia) */ if ((!in_len || !*in) && c == '=') len--; if (len >= 2) *out++ = quad[0] << 2 | quad[1] >> 4; if (len >= 3) *out++ = quad[1] << 4 | quad[2] >> 2; if (len >= 4) *out++ = ((quad[2] << 6) & 0xc0) | quad[3]; done += len - 1; } if (done + 1 >= out_size) return -1; *out = '\0'; return done; } LWS_VISIBLE int lws_b64_decode_string(const char *in, char *out, int out_size) { return _lws_b64_decode_string(in, -1, out, out_size); } LWS_VISIBLE int lws_b64_decode_string_len(const char *in, int in_len, char *out, int out_size) { return _lws_b64_decode_string(in, in_len, out, out_size); } #if 0 int lws_b64_selftest(void) { char buf[64]; unsigned int n, r = 0; unsigned int test; /* examples from https://en.wikipedia.org/wiki/Base64 */ static const char * const plaintext[] = { "any carnal pleasure.", "any carnal pleasure", "any carnal pleasur", "any carnal pleasu", "any carnal pleas", "Admin:kloikloi" }; static const char * const coded[] = { "YW55IGNhcm5hbCBwbGVhc3VyZS4=", "YW55IGNhcm5hbCBwbGVhc3VyZQ==", "YW55IGNhcm5hbCBwbGVhc3Vy", "YW55IGNhcm5hbCBwbGVhc3U=", "YW55IGNhcm5hbCBwbGVhcw==", "QWRtaW46a2xvaWtsb2k=" }; for (test = 0; test < sizeof plaintext / sizeof(plaintext[0]); test++) { buf[sizeof(buf) - 1] = '\0'; n = lws_b64_encode_string(plaintext[test], strlen(plaintext[test]), buf, sizeof buf); if (n != strlen(coded[test]) || strcmp(buf, coded[test])) { lwsl_err("Failed lws_b64 encode selftest " "%d result '%s' %d\n", test, buf, n); r = -1; } buf[sizeof(buf) - 1] = '\0'; n = lws_b64_decode_string(coded[test], buf, sizeof buf); if (n != strlen(plaintext[test]) || strcmp(buf, plaintext[test])) { lwsl_err("Failed lws_b64 decode selftest " "%d result '%s' / '%s', %d / %d\n", test, buf, plaintext[test], n, strlen(plaintext[test])); r = -1; } } lwsl_notice("Base 64 selftests passed\n"); return r; } #endif libwebsockets-3.2.1/lib/misc/daemonize.c000066400000000000000000000125071357643561300202170ustar00rootroot00000000000000/* * This code is mainly taken from Doug Potter's page * * http://www-theorie.physik.unizh.ch/~dpotter/howto/daemonize * * I contacted him 2007-04-16 about the license for the original code, * he replied it is Public Domain. Use the URL above to get the original * Public Domain version if you want it. * * This version is LGPL2.1+SLE like the rest of libwebsockets and is * Copyright (c)2006 - 2013 Andy Green * * * You're much better advised to use systemd to daemonize stuff without needing * this kind of support in the app itself. */ #include #include #include #include #include #include #include #include #include #include #include "core/private.h" pid_t pid_daemon; static char *lock_path; pid_t get_daemonize_pid() { return pid_daemon; } static void child_handler(int signum) { int len, sent, fd; char sz[20]; switch (signum) { case SIGALRM: /* timed out daemonizing */ exit(0); break; case SIGUSR1: /* positive confirmation we daemonized well */ if (!lock_path) exit(0); /* Create the lock file as the current user */ fd = lws_open(lock_path, O_TRUNC | O_RDWR | O_CREAT, 0640); if (fd < 0) { fprintf(stderr, "unable to create lock file %s, code=%d (%s)\n", lock_path, errno, strerror(errno)); exit(0); } len = sprintf(sz, "%u", (unsigned int)pid_daemon); sent = write(fd, sz, len); if (sent != len) fprintf(stderr, "unable to write pid to lock file %s, code=%d (%s)\n", lock_path, errno, strerror(errno)); close(fd); exit(0); //!!(sent == len)); case SIGCHLD: /* daemonization failed */ exit(0); break; } } static void lws_daemon_closing(int sigact) { if (getpid() == pid_daemon) if (lock_path) { unlink(lock_path); lws_free_set_NULL(lock_path); } kill(getpid(), SIGKILL); } /* * You just need to call this from your main(), when it * returns you are all set "in the background" decoupled * from the console you were started from. * * The process context you called from has been terminated then. */ LWS_VISIBLE int lws_daemonize(const char *_lock_path) { struct sigaction act; pid_t sid, parent; /* already a daemon */ // if (getppid() == 1) // return 1; if (_lock_path) { int n; int fd = lws_open(_lock_path, O_RDONLY); if (fd >= 0) { char buf[10]; n = read(fd, buf, sizeof(buf)); close(fd); if (n) { int ret; n = atoi(buf); ret = kill(n, 0); if (ret >= 0) { fprintf(stderr, "Daemon already running pid %d\n", n); exit(1); } fprintf(stderr, "Removing stale lock %s from dead pid %d\n", _lock_path, n); unlink(lock_path); } } n = strlen(_lock_path) + 1; lock_path = lws_malloc(n, "daemonize lock"); if (!lock_path) { fprintf(stderr, "Out of mem in lws_daemonize\n"); return 1; } strcpy(lock_path, _lock_path); } /* Trap signals that we expect to receive */ signal(SIGCHLD, child_handler); /* died */ signal(SIGUSR1, child_handler); /* was happy */ signal(SIGALRM, child_handler); /* timeout daemonizing */ /* Fork off the parent process */ pid_daemon = fork(); if ((int)pid_daemon < 0) { fprintf(stderr, "unable to fork daemon, code=%d (%s)", errno, strerror(errno)); exit(9); } /* If we got a good PID, then we can exit the parent process. */ if (pid_daemon > 0) { /* * Wait for confirmation signal from the child via * SIGCHILD / USR1, or for two seconds to elapse * (SIGALRM). pause() should not return. */ alarm(2); pause(); /* should not be reachable */ exit(1); } /* At this point we are executing as the child process */ parent = getppid(); pid_daemon = getpid(); /* Cancel certain signals */ signal(SIGCHLD, SIG_DFL); /* A child process dies */ signal(SIGTSTP, SIG_IGN); /* Various TTY signals */ signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); signal(SIGHUP, SIG_IGN); /* Ignore hangup signal */ /* Change the file mode mask */ umask(0); /* Create a new SID for the child process */ sid = setsid(); if (sid < 0) { fprintf(stderr, "unable to create a new session, code %d (%s)", errno, strerror(errno)); exit(2); } /* * Change the current working directory. This prevents the current * directory from being locked; hence not being able to remove it. */ if (chdir("/tmp") < 0) { fprintf(stderr, "unable to change directory to %s, code %d (%s)", "/", errno, strerror(errno)); exit(3); } /* Redirect standard files to /dev/null */ if (!freopen("/dev/null", "r", stdin)) fprintf(stderr, "unable to freopen() stdin, code %d (%s)", errno, strerror(errno)); if (!freopen("/dev/null", "w", stdout)) fprintf(stderr, "unable to freopen() stdout, code %d (%s)", errno, strerror(errno)); if (!freopen("/dev/null", "w", stderr)) fprintf(stderr, "unable to freopen() stderr, code %d (%s)", errno, strerror(errno)); /* Tell the parent process that we are A-okay */ kill(parent, SIGUSR1); act.sa_handler = lws_daemon_closing; sigemptyset(&act.sa_mask); act.sa_flags = 0; sigaction(SIGTERM, &act, NULL); /* return to continue what is now "the daemon" */ return 0; } libwebsockets-3.2.1/lib/misc/dir.c000066400000000000000000000070151357643561300170200ustar00rootroot00000000000000/* * Lws directory scan wrapper * * Copyright (C) 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #define NO_GNU_SOURCE_THIS_TIME #define _DARWIN_C_SOURCE #include #include "core/private.h" #include #include #if defined(LWS_WITH_LIBUV) && UV_VERSION_MAJOR > 0 int lws_dir(const char *dirpath, void *user, lws_dir_callback_function cb) { struct lws_dir_entry lde; uv_dirent_t dent; uv_fs_t req; int ret = 1, ir; uv_loop_t loop; ir = uv_loop_init(&loop); if (ir) { lwsl_err("%s: loop init failed %d\n", __func__, ir); } ir = uv_fs_scandir(&loop, &req, dirpath, 0, NULL); if (ir < 0) { lwsl_err("Scandir on %s failed, errno %d\n", dirpath, LWS_ERRNO); return 2; } while (uv_fs_scandir_next(&req, &dent) != UV_EOF) { lde.name = dent.name; lde.type = (int)dent.type; if (cb(dirpath, user, &lde)) goto bail; } ret = 0; bail: uv_fs_req_cleanup(&req); while (uv_loop_close(&loop)) ; return ret; } #else #if !defined(_WIN32) && !defined(LWS_WITH_ESP32) #include static int filter(const struct dirent *ent) { if (!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) return 0; return 1; } int lws_dir(const char *dirpath, void *user, lws_dir_callback_function cb) { struct lws_dir_entry lde; struct dirent **namelist; int n, i, ret = 1; n = scandir((char *)dirpath, &namelist, filter, alphasort); if (n < 0) { lwsl_err("Scandir on '%s' failed, errno %d\n", dirpath, LWS_ERRNO); return 1; } for (i = 0; i < n; i++) { if (strchr(namelist[i]->d_name, '~')) goto skip; lde.name = namelist[i]->d_name; /* * some filesystems don't report this (ZFS) and tell that * files are LDOT_UNKNOWN */ #if defined(__smartos__) struct stat s; stat(namelist[i]->d_name, &s); switch (s.st_mode) { case S_IFBLK: lde.type = LDOT_BLOCK; break; case S_IFCHR: lde.type = LDOT_CHAR; break; case S_IFDIR: lde.type = LDOT_DIR; break; case S_IFIFO: lde.type = LDOT_FIFO; break; case S_IFLNK: lde.type = LDOT_LINK; break; case S_IFREG: lde.type = LDOT_FILE; break; default: lde.type = LDOT_UNKNOWN; break; } #else switch (namelist[i]->d_type) { case DT_BLK: lde.type = LDOT_BLOCK; break; case DT_CHR: lde.type = LDOT_CHAR; break; case DT_DIR: lde.type = LDOT_DIR; break; case DT_FIFO: lde.type = LDOT_FIFO; break; case DT_LNK: lde.type = LDOT_LINK; break; case DT_REG: lde.type = LDOT_FILE; break; case DT_SOCK: lde.type = LDOTT_SOCKET; break; default: lde.type = LDOT_UNKNOWN; break; } #endif if (cb(dirpath, user, &lde)) { while (i++ < n) free(namelist[i]); goto bail; } skip: free(namelist[i]); } ret = 0; bail: free(namelist); return ret; } #else #error "If you want lws_dir onw windows, you need libuv" #endif #endif libwebsockets-3.2.1/lib/misc/diskcache.c000066400000000000000000000262761357643561300201720ustar00rootroot00000000000000/* * libwebsockets - disk cache helpers * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #define _GNU_SOURCE #include #include "core/private.h" #include #include #include #include #include #include #include #include #include #include #include struct file_entry { lws_list_ptr sorted; lws_list_ptr prev; char name[64]; time_t modified; size_t size; }; struct lws_diskcache_scan { struct file_entry *batch; const char *cache_dir_base; lws_list_ptr head; time_t last_scan_completed; uint64_t agg_size; uint64_t cache_size_limit; uint64_t avg_size; uint64_t cache_tries; uint64_t cache_hits; int cache_subdir; int batch_in_use; int agg_file_count; int secs_waiting; }; #define KIB (1024) #define MIB (KIB * KIB) #define lp_to_fe(p, _n) lws_list_ptr_container(p, struct file_entry, _n) static const char *hex = "0123456789abcdef"; #define BATCH_COUNT 128 static int fe_modified_sort(lws_list_ptr a, lws_list_ptr b) { struct file_entry *p1 = lp_to_fe(a, sorted), *p2 = lp_to_fe(b, sorted); return p2->modified - p1->modified; } struct lws_diskcache_scan * lws_diskcache_create(const char *cache_dir_base, uint64_t cache_size_limit) { struct lws_diskcache_scan *lds = lws_malloc(sizeof(*lds), "cachescan"); if (!lds) return NULL; memset(lds, 0, sizeof(*lds)); lds->cache_dir_base = cache_dir_base; lds->cache_size_limit = cache_size_limit; return lds; } void lws_diskcache_destroy(struct lws_diskcache_scan **lds) { if ((*lds)->batch) lws_free((*lds)->batch); lws_free(*lds); *lds = NULL; } int lws_diskcache_prepare(const char *cache_base_dir, int mode, int uid) { char dir[256]; int n, m; (void)mkdir(cache_base_dir, mode); if (chown(cache_base_dir, uid, -1)) lwsl_err("%s: %s: unable to chown %d\n", __func__, cache_base_dir, uid); for (n = 0; n < 16; n++) { lws_snprintf(dir, sizeof(dir), "%s/%c", cache_base_dir, hex[n]); (void)mkdir(dir, mode); if (chown(dir, uid, -1)) lwsl_err("%s: %s: unable to chown %d\n", __func__, dir, uid); for (m = 0; m < 16; m++) { lws_snprintf(dir, sizeof(dir), "%s/%c/%c", cache_base_dir, hex[n], hex[m]); (void)mkdir(dir, mode); if (chown(dir, uid, -1)) lwsl_err("%s: %s: unable to chown %d\n", __func__, dir, uid); } } return 0; } /* copies and then truncates the incoming name, and renames the file at the * untruncated path to have the new truncated name */ int lws_diskcache_finalize_name(char *cache) { char ren[256], *p; strncpy(ren, cache, sizeof(ren) - 1); ren[sizeof(ren) - 1] = '\0'; p = strchr(cache, '~'); if (p) { *p = '\0'; if (rename(ren, cache)) { lwsl_err("%s: problem renaming %s to %s\n", __func__, ren, cache); return 1; } return 0; } return 1; } int lws_diskcache_query(struct lws_diskcache_scan *lds, int is_bot, const char *hash_hex, int *_fd, char *cache, int cache_len, size_t *extant_cache_len) { struct stat s; int n; /* caching is disabled? */ if (!lds->cache_dir_base) return LWS_DISKCACHE_QUERY_NO_CACHE; if (!is_bot) lds->cache_tries++; n = lws_snprintf(cache, cache_len, "%s/%c/%c/%s", lds->cache_dir_base, hash_hex[0], hash_hex[1], hash_hex); lwsl_info("%s: job cache %s\n", __func__, cache); *_fd = open(cache, O_RDONLY); if (*_fd >= 0) { int fd; if (!is_bot) lds->cache_hits++; if (fstat(*_fd, &s)) { close(*_fd); return LWS_DISKCACHE_QUERY_NO_CACHE; } *extant_cache_len = (size_t)s.st_size; /* "touch" the hit cache file so it's last for LRU now */ fd = open(cache, O_RDWR); if (fd >= 0) close(fd); return LWS_DISKCACHE_QUERY_EXISTS; } /* bots are too random to pollute the cache with their antics */ if (is_bot) return LWS_DISKCACHE_QUERY_NO_CACHE; /* let's create it first with a unique temp name */ lws_snprintf(cache + n, cache_len - n, "~%d-%p", (int)getpid(), extant_cache_len); *_fd = open(cache, O_RDWR | O_CREAT | O_TRUNC, 0600); if (*_fd < 0) { /* well... ok... we will proceed without cache then... */ lwsl_notice("%s: Problem creating cache %s: errno %d\n", __func__, cache, errno); return LWS_DISKCACHE_QUERY_NO_CACHE; } return LWS_DISKCACHE_QUERY_CREATING; } int lws_diskcache_secs_to_idle(struct lws_diskcache_scan *lds) { return lds->secs_waiting; } /* * The goal is to collect the oldest BATCH_COUNT filepaths and filesizes from * the dirs under the cache dir. Since we don't need or want a full list of * files in there in memory at once, we restrict the linked-list size to * BATCH_COUNT entries, and once it is full, simply ignore any further files * that are newer than the newest one on that list. Files older than the * newest guy already on the list evict the newest guy already on the list * and are sorted into the correct order. In this way no matter the number * of files to be processed the memory requirement is fixed at BATCH_COUNT * struct file_entry-s. * * The oldest subset of BATCH_COUNT files are sorted into the cd->batch * allocation in more recent -> least recent order. * * We want to track the total size of all files we saw as well, so we know if * we need to actually do anything yet to restrict how much space it's taking * up. * * And we want to do those things statefully and incrementally instead of one * big atomic operation, since the user may want a huge cache, so we look in * one cache dir at a time and track state in the repodir struct. * * When we have seen everything, we add the doubly-linked prev pointers and then * if we are over the limit, start deleting up to BATCH_COUNT files working back * from the end. */ int lws_diskcache_trim(struct lws_diskcache_scan *lds) { size_t cache_size_limit = lds->cache_size_limit; char dirpath[132], filepath[132 + 32]; lws_list_ptr lp, op = NULL; int files_trimmed = 0; struct file_entry *p; int fd, n, ret = -1; size_t trimmed = 0; struct dirent *de; struct stat s; DIR *dir; if (!lds->cache_subdir) { if (lds->last_scan_completed + lds->secs_waiting > time(NULL)) return 0; lds->batch = lws_malloc(sizeof(struct file_entry) * BATCH_COUNT, "cache_trim"); if (!lds->batch) { lwsl_err("%s: OOM\n", __func__); return 1; } lds->agg_size = 0; lds->head = NULL; lds->batch_in_use = 0; lds->agg_file_count = 0; } lws_snprintf(dirpath, sizeof(dirpath), "%s/%c/%c", lds->cache_dir_base, hex[(lds->cache_subdir >> 4) & 15], hex[lds->cache_subdir & 15]); dir = opendir(dirpath); if (!dir) { lwsl_err("Unable to walk repo dir '%s'\n", lds->cache_dir_base); return -1; } do { de = readdir(dir); if (!de) break; if (de->d_type != DT_REG) continue; lds->agg_file_count++; lws_snprintf(filepath, sizeof(filepath), "%s/%s", dirpath, de->d_name); fd = open(filepath, O_RDONLY); if (fd < 0) { lwsl_err("%s: cannot open %s\n", __func__, filepath); continue; } n = fstat(fd, &s); close(fd); if (n) { lwsl_notice("%s: cannot stat %s\n", __func__, filepath); continue; } lds->agg_size += s.st_size; if (lds->batch_in_use == BATCH_COUNT) { /* * once we filled up the batch with candidates, we don't * need to consider any files newer than the newest guy * on the list... */ if (lp_to_fe(lds->head, sorted)->modified < s.st_mtime) continue; /* * ... and if we find an older file later, we know it * will be replacing the newest guy on the list, so use * that directly... */ p = lds->head; lds->head = p->sorted; } else /* we are still accepting anything to fill the batch */ p = &lds->batch[lds->batch_in_use++]; p->sorted = NULL; strncpy(p->name, de->d_name, sizeof(p->name) - 1); p->name[sizeof(p->name) - 1] = '\0'; p->modified = s.st_mtime; p->size = s.st_size; lws_list_ptr_insert(&lds->head, &p->sorted, fe_modified_sort); } while (de); ret = 0; lds->cache_subdir++; if (lds->cache_subdir != 0x100) goto done; /* we completed the whole scan... */ /* if really no guidence, then 256MiB */ if (!cache_size_limit) cache_size_limit = 256 * 1024 * 1024; if (lds->agg_size > cache_size_limit) { /* apply prev pointers to make the list doubly-linked */ lp = lds->head; while (lp) { p = lp_to_fe(lp, sorted); p->prev = op; op = &p->prev; lp = p->sorted; } /* * reverse the list (start from tail, now traverse using * .prev)... it's oldest-first now... */ lp = op; while (lp && lds->agg_size > cache_size_limit) { p = lp_to_fe(lp, prev); lws_snprintf(filepath, sizeof(filepath), "%s/%c/%c/%s", lds->cache_dir_base, p->name[0], p->name[1], p->name); if (!unlink(filepath)) { lds->agg_size -= p->size; trimmed += p->size; files_trimmed++; } else lwsl_notice("%s: Failed to unlink %s\n", __func__, filepath); lp = p->prev; } if (files_trimmed) lwsl_notice("%s: %s: trimmed %d files totalling " "%lldKib, leaving %lldMiB\n", __func__, lds->cache_dir_base, files_trimmed, ((unsigned long long)trimmed) / KIB, ((unsigned long long)lds->agg_size) / MIB); } if (lds->agg_size && lds->agg_file_count) lds->avg_size = lds->agg_size / lds->agg_file_count; /* * estimate how long we can go before scanning again... default we need * to start again immediately */ lds->last_scan_completed = time(NULL); lds->secs_waiting = 1; if (lds->agg_size < cache_size_limit) { uint64_t avg = 4096, capacity, projected; /* let's use 80% of the real average for margin */ if (lds->agg_size && lds->agg_file_count) avg = ((lds->agg_size * 8) / lds->agg_file_count) / 10; /* * if we collected BATCH_COUNT files of the average size, * how much can we clean up in 256s? */ capacity = avg * BATCH_COUNT; /* * if the cache grew by 10%, would we hit the limit even then? */ projected = (lds->agg_size * 11) / 10; if (projected < cache_size_limit) /* no... */ lds->secs_waiting = (256 / 2) * ((cache_size_limit - projected) / capacity); /* * large waits imply we may not have enough info yet, so * check once an hour at least. */ if (lds->secs_waiting > 3600) lds->secs_waiting = 3600; } else lds->secs_waiting = 0; lwsl_info("%s: cache %s: %lldKiB / %lldKiB, next scan %ds\n", __func__, lds->cache_dir_base, (unsigned long long)lds->agg_size / KIB, (unsigned long long)cache_size_limit / KIB, lds->secs_waiting); lws_free(lds->batch); lds->batch = NULL; lds->cache_subdir = 0; done: closedir(dir); return ret; } libwebsockets-3.2.1/lib/misc/fts/000077500000000000000000000000001357643561300166675ustar00rootroot00000000000000libwebsockets-3.2.1/lib/misc/fts/README.md000066400000000000000000000260201357643561300201460ustar00rootroot00000000000000# LWS Full Text Search ## Introduction ![lwsac flow](/doc-assets/lws-fts.svg) The general approach is to scan one or more UTF-8 input text "files" (they may only exist in memory) and create an in-memory optimized trie for every token in the file. This can then be serialized out to disk in the form of a single index file (no matter how many input files were involved or how large they were). The implementation is designed to be modest on memory and cpu for both index creation and querying, and suitable for weak machines with some kind of random access storage. For searching only memory to hold results is required, the actual searches and autocomplete suggestions are done very rapidly by seeking around structures in the on-disk index file. Function|Related Link ---|--- Public API|[include/libwebsockets/lws-fts.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-fts.h) CI test app|[minimal-examples/api-tests/api-test-fts](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-fts) Demo minimal example|[minimal-examples/http-server/minimal-http-server-fulltext-search](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/http-server/minimal-http-server-fulltext-search) Live Demo|[https://libwebsockets.org/ftsdemo/](https://libwebsockets.org/ftsdemo/) ## Query API overview Searching returns a potentially very large lwsac allocated object, with contents and max size controlled by the members of a struct lws_fts_search_params passed to the search function. Three kinds of result are possible: ### Autocomplete suggestions These are useful to provide lists of extant results in realtime as the user types characters that constrain the search. So if the user has typed 'len', any hits for 'len' itself are reported along with 'length', and whatever else is in the index beginning 'len'.. The results are selected using and are accompanied by an aggregated count of results down that path, and the results so the "most likely" results already measured by potential hits appear first. These results are in a linked-list headed by `result.autocomplete_head` and each is in a `struct lws_fts_result_autocomplete`. They're enabled in the search results by giving the flag `LWSFTS_F_QUERY_AUTOCOMPLETE` in the search parameter flags. ### Filepath results Simply a list of input files containing the search term with some statistics, one file is mentioned in a `struct lws_fts_result_filepath` result struct. This would be useful for creating a selection UI to "drill down" to individual files when there are many with matches. This is enabled by the `LWSFTS_F_QUERY_FILES` search flag. ### Filepath and line results Same as the file path list, but for each filepath, information on the line numbers and input file offset where the line starts are provided. This is enabled by `LWSFTS_F_QUERY_FILE_LINES`... if you additionally give `LWSFTS_F_QUERY_QUOTE_LINE` flag then the contents of each hit line from the input file are also provided. ## Result format inside the lwsac A `struct lws_fts_result` at the start of the lwsac contains heads for linked- lists of autocomplete and filepath results inside the lwsac. For autocomplete suggestions, the string itself is immediately after the `struct lws_fts_result_autocomplete` in memory. For filepath results, after each `struct lws_fts_result_filepath` is - match information depending on the flags given to the search - the filepath string You can always skip the line number table to get the filepath string by adding .matches_length to the address of the byte after the struct. The matches information is either - 0 bytes per match - 2x int32_t per match (8 bytes) if `LWSFTS_F_QUERY_FILE_LINES` given... the first is the native-endian line number of the match, the second is the byte offset in the original file where that line starts - 2 x int32_t as above plus a const char * if `LWSFTS_F_QUERY_QUOTE_LINE` is also given... this points to a NUL terminated string also stored in the results lwsac that contains up to 255 chars of the line from the original file. In some cases, the original file was either virtual (you are indexing a git revision) or is not stored with the index, in that case you can't usefully use `LWSFTS_F_QUERY_QUOTE_LINE`. To facilitate interpreting what is stored per match, the original search flags that created the result are stored in the `struct lws_fts_result`. ## Indexing In-memory and serialized to file When creating the trie, in-memory structs are used with various optimization schemes trading off memory usage for speed. While in-memory, it's possible to add more indexed filepaths to the single index. Once the trie is complete in terms of having indexed everything, it is serialized to disk. These contain many additional housekeeping pointers and trie entries which can be optimized out. Most in-memory values must be held literally in large types, whereas most of the values in the serialized file use smaller VLI which use more or less bytes according to the value. So the peak memory requirements for large tries are much bigger than the size of the serialized trie file that is output. For the linux kernel at 4.14 and default indexing whitelist on a 2.8GHz AMD threadripper (using one thread), the stats are: Name|Value ---|--- Files indexed|52932 Input corpus size|694MiB Indexing cpu time|50.1s (>1000 files / sec; 13.8MBytes/sec) Peak alloc|78MiB Serialization time|202ms Trie File size|347MiB To index libwebsockets master under the same conditions: Name|Value ---|--- Files indexed|489 Input corpus size|3MiB Indexing time|123ms Peak alloc|3MiB Serialization time|1ms Trie File size|1.4MiB Once it's generated, querying the trie file is very inexpensive, even when there are lots of results. - trie entry child lists are kept sorted by the character they map to. This allows discovering there is no match as soon as a character later in the order than the one being matched is seen - for the root trie, in addition to the linked-list child + sibling entries, a 256-entry pointer table is associated with the root trie, allowing one- step lookup. But as the table is 2KiB, it's too expensive to use on all trie entries ## Structure on disk All explicit multibyte numbers are stored in Network (MSB-first) byte order. - file header - filepath line number tables - filepath information - filepath map table - tries, trie instances (hits), trie child tables ### VLI coding VLI (Variable Length Integer) coding works like this [b7 EON] [b6 .. b0 DATA] If EON = 0, then DATA represents the Least-significant 7 bits of the number. if EON = 1, DATA represents More-significant 7-bits that should be shifted left until the byte with EON = 0 is found to terminate the number. The VLI used is predicated around 32-bit unsigned integers Examples: - 0x30 = 48 - 0x81 30 = 176 - 0x81 0x80 0x00 = 16384 Bytes | Range ---|--- 1|<= 127 2|<= 16K - 1 3|<= 2M -1 4|<= 256M - 1 5|<= 4G - 1 The coding is very efficient if there's a high probabilty the number being stored is not large. So it's great for line numbers for example, where most files have less that 16K lines and the VLI for the line number fits in 2 bytes, but if you meet a huge file, the VLI coding can also handle it. All numbers except a few in the headers that are actually written after the following data are stored using VLI for space- efficiency without limiting capability. The numbers that are fixed up after the fact have to have a fixed size and can't use VLI. ### File header The first byte of the file header where the magic is, is "fileoffset" 0. All the stored "fileoffset"s are relative to that. The header has a fixed size of 16 bytes. size|function ---|--- 32-bits|Magic 0xCA7A5F75 32-bits|Fileoffset to root trie entry 32-bits|Size of the trie file when it was created (to detect truncation) 32-bits|Fileoffset to the filepath map 32-bits|Number of filepaths ### Filepath line tables Immediately after the file header are the line length tables. As the input files are parsed, line length tables are written for each file... at that time the rest of the parser data is held in memory so nothing else is in the file yet. These allow you to map logical line numbers in the file to file offsets space- and time- efficiently without having to walk through the file contents. The line information is cut into blocks, allowing quick skipping over the VLI data that doesn't contain the line you want just by following the 8-byte header part. Once you find the block with your line, you have to iteratively add the VLIs until you hit the one you want. For normal text files with average line length below 128, the VLIs will typically be a single byte. So a block of 200 line lengths is typically 208 bytes long. There is a final linetable chunk consisting of all zeros to indicate the end of the filepath line chunk series for a filepath. size|function ---|--- 16-bit|length of this chunk itself in bytes 16-bit|count of lines covered in this chunk 32-bit|count of bytes in the input file this chunk covers VLI...|for each line in the chunk, the number of bytes in the line ### Filepaths The single trie in the file may contain information from multiple files, for example one trie may cover all files in a directory. The "Filepaths" are listed after the line tables, and referred to by index thereafter. For each filepath, one after the other: size|function ---|--- VLI|fileoffset of the start of this filepath's line table VLI|count of lines in the file VLI|length of filepath in bytes ...|the filepath (with no NUL) ### Filepath map To facilitate rapid filepath lookup, there's a filepath map table with a 32-bit fileoffset per filepath. This is the way to convert filepath indexes to information on the filepath like its name, etc size|function ---|--- 32-bit...|fileoffset to filepath table for each filepath ### Trie entries Immediately after that, the trie entries are dumped, for each one a header: #### Trie entry header size|function ---|--- VLI|Fileoffset of first file table in this trie entry instance list VLI|number of child trie entries this trie entry has VLI|number of instances this trie entry has The child list follows immediately after this header #### Trie entry instance file For each file that has instances of this symbol: size|function ---|--- VLI|Fileoffset of next file table in this trie entry instance list VLI|filepath index VLI|count of line number instances following #### Trie entry file line number table Then for the file mentioned above, a list of all line numbers in the file with the symbol in them, in ascending order. As a VLI, the median size per entry will typically be ~15.9 bits due to the probability of line numbers below 16K. size|function ---|--- VLI|line number ... #### Trie entry child table For each child node size|function ---|--- VLI|file offset of child VLI|instance count belonging directly to this child VLI|aggregated number of instances down all descendent paths of child VLI|aggregated number of children down all descendent paths of child VLI|match string length ...|the match string libwebsockets-3.2.1/lib/misc/fts/private.h000066400000000000000000000006241357643561300205140ustar00rootroot00000000000000#include /* if you need > 2GB trie files */ //typedef off_t jg2_file_offset; typedef uint32_t jg2_file_offset; struct lws_fts_file { int fd; jg2_file_offset root, flen, filepath_table; int max_direct_hits; int max_completion_hits; int filepaths; }; #define TRIE_FILE_HDR_SIZE 20 #define MAX_VLI 5 #define LWS_FTS_LINES_PER_CHUNK 200 int rq32(unsigned char *b, uint32_t *d); libwebsockets-3.2.1/lib/misc/fts/trie-fd.c000066400000000000000000000507221357643561300203730ustar00rootroot00000000000000/* * libjsongit2 - trie file functions * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "misc/fts/private.h" #include #include #include #include #include #include #define AC_COUNT_STASHED_CHILDREN 8 struct ch { jg2_file_offset ofs; char name[64]; int inst; int child_agg; int name_length; int effpos; int descendents; }; struct wac { struct ch ch[AC_COUNT_STASHED_CHILDREN]; jg2_file_offset self; jg2_file_offset tifs; int child_count; int child; int agg; int desc; char done_children; char once; }; struct linetable { struct linetable *next; int chunk_line_number_start; int chunk_line_number_count; off_t chunk_filepos_start; off_t vli_ofs_in_index; }; static uint32_t b32(unsigned char *b) { return (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]; } static uint16_t b16(unsigned char *b) { return (b[0] << 8) | b[1]; } static int lws_fts_filepath(struct lws_fts_file *jtf, int filepath_index, char *result, size_t len, uint32_t *ofs_linetable, uint32_t *lines) { unsigned char buf[256 + 15]; uint32_t flen; int ra, bp = 0; size_t m; off_t o; if (filepath_index > jtf->filepaths) return 1; if (lseek(jtf->fd, jtf->filepath_table + (4 * filepath_index), SEEK_SET) < 0) { lwsl_err("%s: unable to seek\n", __func__); return 1; } ra = read(jtf->fd, buf, 4); if (ra < 0) return 1; o = (unsigned int)b32(buf); if (lseek(jtf->fd, o, SEEK_SET) < 0) { lwsl_err("%s: unable to seek\n", __func__); return 1; } ra = read(jtf->fd, buf, sizeof(buf)); if (ra < 0) return 1; if (ofs_linetable) bp += rq32(&buf[bp], ofs_linetable); else bp += rq32(&buf[bp], &flen); if (lines) bp += rq32(&buf[bp], lines); else bp += rq32(&buf[bp], &flen); bp += rq32(&buf[bp], &flen); m = flen; if (len - 1 < m) m = flen - 1; strncpy(result, (char *)&buf[bp], m); result[m] = '\0'; result[len - 1] = '\0'; return 0; } /* * returns -1 for fail or fd open on the trie file. * * *root is set to the position of the root trie entry. * *flen is set to the length of the whole file */ int lws_fts_adopt(struct lws_fts_file *jtf) { unsigned char buf[256]; off_t ot; if (read(jtf->fd, buf, TRIE_FILE_HDR_SIZE) != TRIE_FILE_HDR_SIZE) { lwsl_err("%s: unable to read file header\n", __func__); goto bail; } if (buf[0] != 0xca || buf[1] != 0x7a || buf[2] != 0x5f || buf[3] != 0x75) { lwsl_err("%s: bad magic %02X %02X %02X %02X\n", __func__, buf[0], buf[1], buf[2], buf[3]); goto bail; } jtf->root = b32(&buf[4]); ot = lseek(jtf->fd, 0, SEEK_END); if (ot < 0) { lwsl_err("%s: unable to seek\n", __func__); goto bail; } jtf->flen = ot; if (jtf->flen != b32(&buf[8])) { lwsl_err("%s: file size doesn't match expected\n", __func__); goto bail; } jtf->filepath_table = b32(&buf[12]); jtf->filepaths = b32(&buf[16]); return jtf->fd; bail: return -1; } struct lws_fts_file * lws_fts_open(const char *filepath) { struct lws_fts_file *jtf; jtf = lws_malloc(sizeof(*jtf), "fts open"); if (!jtf) goto bail1; jtf->fd = open(filepath, O_RDONLY); if (jtf->fd < 0) { lwsl_err("%s: unable to open %s\n", __func__, filepath); goto bail2; } if (lws_fts_adopt(jtf) < 0) goto bail3; return jtf; bail3: close(jtf->fd); bail2: lws_free(jtf); bail1: return NULL; } void lws_fts_close(struct lws_fts_file *jtf) { close(jtf->fd); lws_free(jtf); } #define grab(_pos, _size) { \ bp = 0; \ if (lseek(jtf->fd, _pos, SEEK_SET) < 0) { \ lwsl_err("%s: unable to seek\n", __func__); \ \ goto bail; \ } \ \ ra = read(jtf->fd, buf, _size); \ if (ra < 0) \ goto bail; \ } static struct linetable * lws_fts_cache_chunktable(struct lws_fts_file *jtf, uint32_t ofs_linetable, struct lwsac **linetable_head) { struct linetable *lt, *first = NULL, **prev = NULL; unsigned char buf[8]; int line = 1, bp, ra; off_t cfs = 0; *linetable_head = NULL; do { grab(ofs_linetable, sizeof(buf)); lt = lwsac_use(linetable_head, sizeof(*lt), 0); if (!lt) goto bail; if (!first) first = lt; lt->next = NULL; if (prev) *prev = lt; prev = <->next; lt->chunk_line_number_start = line; lt->chunk_line_number_count = b16(&buf[bp + 2]); lt->vli_ofs_in_index = ofs_linetable + 8; lt->chunk_filepos_start = cfs; line += lt->chunk_line_number_count; cfs += b32(&buf[bp + 4]); ofs_linetable += b16(&buf[bp]); } while (b16(&buf[bp])); return first; bail: lwsac_free(linetable_head); return NULL; } static int lws_fts_getfileoffset(struct lws_fts_file *jtf, struct linetable *ltstart, int line, off_t *_ofs) { struct linetable *lt = ltstart; unsigned char buf[LWS_FTS_LINES_PER_CHUNK * 5]; uint32_t ll; off_t ofs; int bp, ra; /* first figure out which chunk */ do { if (line >= lt->chunk_line_number_start && line < lt->chunk_line_number_start + lt->chunk_line_number_count) break; lt = lt->next; } while (lt); if (!lt) goto bail; /* we know it's in this chunk */ ofs = lt->chunk_filepos_start; line -= lt->chunk_line_number_start; grab(lt->vli_ofs_in_index, sizeof(buf)); bp = 0; while (line) { bp += rq32(&buf[bp], &ll); ofs += ll; line--; } /* we know the offset it is at in the original file */ *_ofs = ofs; return 0; bail: lwsl_info("%s: bail %d\n", __func__, line); return 1; } static int ac_record(struct lws_fts_file *jtf, struct lwsac **results_head, const char *needle, int pos, struct wac *s, int sp, uint32_t instances, uint32_t agg_instances, uint32_t children, struct lws_fts_result_autocomplete ***ppac) { struct lws_fts_result_autocomplete *ac; int n, m; char *p; if (!instances && !agg_instances) return 1; m = pos; for (n = 1; n <= sp; n++) m += s[n].ch[s[n].child - 1].name_length; ac = lwsac_use(results_head, sizeof(*ac) + m + 1, 0); if (!ac) return -1; p = (char *)(ac + 1); **ppac = ac; ac->next = NULL; *ppac = &ac->next; ac->instances = instances; ac->agg_instances = agg_instances; ac->ac_length = m; ac->has_children = !!children; ac->elided = 0; memcpy(p, needle, pos); p += pos; for (n = 1; n <= sp; n++) { int w = s[n].child - 1; memcpy(p, s[n].ch[w].name, s[n].ch[w].name_length); p += s[n].ch[w].name_length; } p = (char *)(ac + 1); p[m] = '\0'; /* * deduct this child's instance weight from his antecdents to track * relative path attractiveness dynamically, after we already used its * best results (children are sorted best-first) */ for (n = sp; n >= 0; n--) { s[n].ch[s[n].child - 1].child_agg -= instances; s[n].agg -= instances; } return 0; } struct lws_fts_result * lws_fts_search(struct lws_fts_file *jtf, struct lws_fts_search_params *ftsp) { uint32_t children, instances, co, sl, agg, slt, chunk, fileofs_tif_start, desc, agg_instances; int pos = 0, n, m, nl, bp, base = 0, ra, palm, budget, sp, ofd = -1; unsigned long long tf = lws_now_usecs(); struct lws_fts_result_autocomplete **pac = NULL; char stasis, nac = 0, credible, needle[32]; struct lws_fts_result_filepath *fp; struct lws_fts_result *result; unsigned char buf[4096]; off_t o, child_ofs; struct wac s[128]; ftsp->results_head = NULL; if (!ftsp->needle) return NULL; nl = (int)strlen(ftsp->needle); if ((size_t)nl > sizeof(needle) - 2) return NULL; result = lwsac_use(&ftsp->results_head, sizeof(*result), 0); if (!result) return NULL; /* start with no results... */ result->autocomplete_head = NULL; pac = &result->autocomplete_head; result->filepath_head = NULL; result->duration_ms = 0; result->effective_flags = ftsp->flags; palm = 0; for (n = 0; n < nl; n++) needle[n] = tolower(ftsp->needle[n]); needle[nl] = '\0'; o = jtf->root; do { bp = 0; base = 0; grab(o, sizeof(buf)); child_ofs = o + bp; bp += rq32(&buf[bp], &fileofs_tif_start); bp += rq32(&buf[bp], &children); bp += rq32(&buf[bp], &instances); bp += rq32(&buf[bp], &agg_instances); palm = pos; /* the children follow here */ if (pos == nl) { nac = 0; if (!fileofs_tif_start) /* * we matched, but there are no instances of * this, it's actually an intermediate */ goto autocomp; /* we leave with bp positioned at the instance list */ o = fileofs_tif_start; grab(o, sizeof(buf)); break; } if (ra - bp < 1024) { /* * We don't have enough. So reload the buffer starting * at where we got to. */ base += bp; grab(o + base, sizeof(buf)); } /* gets set if any child COULD match needle if it went on */ credible = 0; for (n = 0; (uint32_t)n < children; n++) { uint32_t inst; bp += rq32(&buf[bp], &co); bp += rq32(&buf[bp], &inst); bp += rq32(&buf[bp], &agg); bp += rq32(&buf[bp], &desc); bp += rq32(&buf[bp], &sl); if (sl > (uint32_t)(nl - pos)) { /* * it can't be a match because it's longer than * our needle string (but that leaves it as a * perfectly fine autocomplete candidate) */ size_t g = nl - pos; /* * "credible" means at least one child matches * all the chars in needle up to as many as it * has. If not "credible" this path cannot * match. */ if (!strncmp((char *)&buf[bp], &needle[pos], g)) credible = 1; else /* * deflate the parent agg using the * knowledge this child is not on the * path shown by the remainder of needle */ agg_instances -= agg; nac = 0; bp += sl; slt = 0; pos = palm; goto ensure; } /* the comparison string potentially has huge length */ slt = sl; while (slt) { /* * the strategy is to compare whatever we have * lying around, then bring in more if it didn't * fail to match yet. That way we don't bring * in anything we could already have known was * not needed due to a match fail. */ chunk = ra - bp; if (chunk > slt) chunk = slt; if ((chunk == 1 && needle[pos] != buf[bp]) || (chunk != 1 && memcmp(&needle[pos], &buf[bp], chunk))) { /* * it doesn't match... so nothing can * autocomplete this... */ bp += slt; slt = 0; nac = 1; goto ensure; } slt -= chunk; pos += chunk; bp += chunk; /* so far, it matches */ if (!slt) { /* we matched the whole thing */ o = co; if (!co) goto bail; n = (int)children; credible = 1; } ensure: /* * do we have at least buf more to match, or the * remainder of the string, whichever is less? * * bp may exceed sizeof(buf) on no match path */ chunk = sizeof(buf); if (slt < chunk) chunk = slt; if (ra - bp >= (int)chunk) continue; /* * We don't have enough. So reload buf starting * at where we got to. */ base += bp; grab(o + base, sizeof(buf)); } /* while we are still comparing */ } /* for each child */ if ((uint32_t)n == children) { if (!credible) goto bail; nac = 0; goto autocomp; } } while(1); result->duration_ms = (int)((lws_now_usecs() - tf) / 1000); if (!instances && !children) return result; /* the match list may easily exceed one read buffer load ... */ o += bp; /* * Only do the file match list if it was requested in the search flags */ if (!(ftsp->flags & LWSFTS_F_QUERY_FILES)) goto autocomp; do { uint32_t fi, tot, line, ro, ofs_linetable, lines, fplen, *u, _o; struct lwsac *lt_head = NULL; struct linetable *ltst; char path[256], *pp; int footprint; off_t fo; ofd = -1; grab(o, sizeof(buf)); ro = o; bp += rq32(&buf[bp], &_o); o = _o; assert(!o || o > TRIE_FILE_HDR_SIZE); bp += rq32(&buf[bp], &fi); bp += rq32(&buf[bp], &tot); if (lws_fts_filepath(jtf, fi, path, sizeof(path) - 1, &ofs_linetable, &lines)) { lwsl_err("can't get filepath index %d\n", fi); goto bail; } if (ftsp->only_filepath && strcmp(path, ftsp->only_filepath)) continue; ltst = lws_fts_cache_chunktable(jtf, ofs_linetable, <_head); if (!ltst) goto bail; if (ftsp->flags & LWSFTS_F_QUERY_QUOTE_LINE) { ofd = open(path, O_RDONLY); if (ofd < 0) { lwsac_free(<_head); goto bail; } } fplen = (int)strlen(path); footprint = sizeof(*fp) + fplen + 1; if (ftsp->flags & LWSFTS_F_QUERY_FILE_LINES) { /* line number and offset in file */ footprint += 2 * sizeof(uint32_t) * tot; if (ftsp->flags & LWSFTS_F_QUERY_QUOTE_LINE) /* pointer to quote string */ footprint += sizeof(void *) * tot; } fp = lwsac_use(&ftsp->results_head, footprint, 0); if (!fp) { lwsac_free(<_head); goto bail; } fp->filepath_length = fplen; fp->lines_in_file = lines; fp->matches = tot; fp->matches_length = footprint - sizeof(*fp) - (fplen + 1); fp->next = result->filepath_head; result->filepath_head = fp; /* line table first so it can be aligned */ u = (uint32_t*)(fp + 1); if (ftsp->flags & LWSFTS_F_QUERY_FILE_LINES) { /* for each line number */ for (n = 0; (uint32_t)n < tot; n++) { unsigned char lbuf[256], *p; char ebuf[384]; const char **v; int m; if ((ra - bp) < 8) { base += bp; grab(ro + base, sizeof(buf)); } bp += rq32(&buf[bp], &line); *u++ = line; if (lws_fts_getfileoffset(jtf, ltst, line, &fo)) continue; *u++ = (uint32_t)fo; if (!(ftsp->flags & LWSFTS_F_QUERY_QUOTE_LINE)) continue; if (lseek(ofd, fo, SEEK_SET) < 0) continue; m = read(ofd, lbuf, sizeof(lbuf) - 1); if (m < 0) continue; lbuf[sizeof(lbuf) - 1] = '\0'; p = (unsigned char *)strchr((char *)lbuf, '\n'); if (p) m = lws_ptr_diff(p, lbuf); lbuf[m] = '\0'; p = (unsigned char *)strchr((char *)lbuf, '\r'); if (p) m = lws_ptr_diff(p, lbuf); lbuf[m] = '\0'; lws_json_purify(ebuf, (const char *)lbuf, sizeof(ebuf) - 1); m = (int)strlen(ebuf); p = lwsac_use(&ftsp->results_head, m + 1, 0); if (!p) { lwsac_free(<_head); goto bail; } memcpy(p, ebuf, m); p[m] = '\0'; v = (const char **)u; *v = (const char *)p; u += sizeof(const char *) / sizeof(uint32_t); } } pp = ((char *)&fp[1]) + fp->matches_length; memcpy(pp, path, fplen); pp[fplen] = '\0'; if (ofd >= 0) { close(ofd); ofd = -1; } lwsac_free(<_head); if (ftsp->only_filepath) break; } while (o); /* sort the instance file list by results density */ do { struct lws_fts_result_filepath **prf, *rf1, *rf2; stasis = 1; /* bubble sort keeps going until nothing changed */ prf = &result->filepath_head; while (*prf) { rf1 = *prf; rf2 = rf1->next; if (rf2 && rf1->lines_in_file && rf2->lines_in_file && ((rf1->matches * 1000) / rf1->lines_in_file) < ((rf2->matches * 1000) / rf2->lines_in_file)) { stasis = 0; *prf = rf2; rf1->next = rf2->next; rf2->next = rf1; } prf = &(*prf)->next; } } while (!stasis); autocomp: if (!(ftsp->flags & LWSFTS_F_QUERY_AUTOCOMPLETE) || nac) return result; /* * autocomplete (ie, the descendent paths that yield the most hits) * * We actually need to spider the earliest terminal descendents from * the child we definitely got past, and present the first n terminal * strings. The descendents are already sorted in order of highest * aggregated hits in their descendents first, so simply collecting n * earliest leaf children is enough. * * The leaf children may be quite deep down in a stack however. So we * have to go through all the walking motions collecting and retaining * child into for when we come back up the walk. * * We can completely ignore file instances for this, we just need the * earliest children. And we can restrict how many children we stash * in each stack level to eg, 5. * * child_ofs comes in pointing at the start of the trie entry that is * to be the starting point for making suggestions. */ budget = ftsp->max_autocomplete; base = 0; bp = 0; pac = &result->autocomplete_head; sp = 0; if (pos > (int)sizeof(s[sp].ch[0].name) - 1) pos = (int)sizeof(s[sp].ch[0].name) - 1; memset(&s[sp], 0, sizeof(s[sp])); s[sp].child = 1; s[sp].tifs = fileofs_tif_start; s[sp].self = child_ofs; s[sp].ch[0].effpos = pos; if (pos == nl) n = ac_record(jtf, &ftsp->results_head, needle, pos, s, 0, instances, agg_instances, children, &pac); while (sp >= 0 && budget) { int nobump = 0; struct ch *tch = &s[sp].ch[s[sp].child - 1]; grab(child_ofs, sizeof(buf)); bp += rq32(&buf[bp], &fileofs_tif_start); bp += rq32(&buf[bp], &children); bp += rq32(&buf[bp], &instances); bp += rq32(&buf[bp], &agg_instances); if (sp > 0 && s[sp - 1].done_children && tch->effpos + tch->name_length >= nl && tch->inst && fileofs_tif_start) { n = ac_record(jtf, &ftsp->results_head, needle, pos, s, sp, tch->inst, tch->child_agg, tch->descendents, &pac); if (n < 0) goto bail; if (!n) if (--budget == 0) break; } if (!s[sp].done_children && children) { s[sp].done_children = 1; sp++; memset(&s[sp], 0, sizeof(s[sp])); s[sp].tifs = fileofs_tif_start; s[sp].self = child_ofs; for (n = 0; n < (int)children && s[sp].child_count < (int)LWS_ARRAY_SIZE(s[0].ch); n++) { uint32_t slen, cho, agg, inst; int i = s[sp].child_count; struct ch *ch = &s[sp].ch[i]; size_t max; bp += rq32(&buf[bp], &cho); bp += rq32(&buf[bp], &inst); bp += rq32(&buf[bp], &agg); bp += rq32(&buf[bp], &desc); bp += rq32(&buf[bp], &slen); max = slen; if (max > sizeof(ch->name) - 1) max = sizeof(ch->name) - 1; strncpy(ch->name, (char *)&buf[bp], max); bp += slen; ch->name_length = (int)max; ch->name[sizeof(ch->name) - 1] = '\0'; ch->inst = inst; ch->effpos = s[sp - 1].ch[s[sp - 1].child - 1].effpos; ch->child_agg = agg; ch->descendents = desc; /* * if we have more needle chars than we matched * to get this far, we can only allow potential * matches that are consistent with the * additional unmatched character(s)... */ m = nl - ch->effpos; if (m > ch->name_length) m = ch->name_length; if (m > 0 && strncmp(&needle[ch->effpos], ch->name, m)) continue; ch->effpos += m; s[sp].ch[s[sp].child_count++].ofs = cho; } } while (sp >= 0 && s[sp].child >= s[sp].child_count) { s[sp].done_children = 0; sp--; } /* * Compare parent remaining agg vs parent's next siblings' still * intact original agg... if the next sibling has more, abandon * the parent path and go with the sibling... this keeps the * autocomplete results related to popularity. */ nobump = 0; n = sp - 1; while (n >= 0) { struct lws_fts_result_autocomplete *ac = (struct lws_fts_result_autocomplete *)pac; if (s[n].child < s[n].child_count && s[n].ch[s[n].child - 1].child_agg < s[n].ch[s[n].child].child_agg) { if (pac) /* * mark the autocomplete result that * there were more children down his * path that we skipped in these results */ ac->elided = 1; for (m = n; m < sp + 1; m++) s[m].done_children = 0; sp = n; child_ofs = s[sp].ch[s[sp].child++].ofs; nobump = 1; } n--; } if (nobump || sp < 0) continue; child_ofs = s[sp].ch[s[sp].child++].ofs; } /* let's do a final sort into agg order */ do { struct lws_fts_result_autocomplete *ac1, *ac2; stasis = 1; /* bubble sort keeps going until nothing changed */ pac = &result->autocomplete_head; while (*pac) { ac1 = *pac; ac2 = ac1->next; if (ac2 && ac1->instances < ac2->instances) { stasis = 0; *pac = ac2; ac1->next = ac2->next; ac2->next = ac1; } pac = &(*pac)->next; } } while (!stasis); return result; bail: if (ofd >= 0) close(ofd); lwsl_info("%s: search ended up at bail\n", __func__); return result; } libwebsockets-3.2.1/lib/misc/fts/trie.c000066400000000000000000000747021357643561300200100ustar00rootroot00000000000000/* * libwebsockets - trie * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * The functions allow * * - collecting a concordance of strings from one or more files (eg, a * directory of files) into a single in-memory, lac-backed trie; * * - to optimize and serialize the in-memory trie to an fd; * * - to very quickly report any instances of a string in any of the files * indexed by the trie, by a seeking around a serialized trie fd, without * having to load it all in memory */ #include "core/private.h" #include "misc/fts/private.h" #include #include #include #include #include #include struct lws_fts_entry; /* notice these are stored in t->lwsac_input_head which has input file scope */ struct lws_fts_filepath { struct lws_fts_filepath *next; struct lws_fts_filepath *prev; char filepath[256]; jg2_file_offset ofs; jg2_file_offset line_table_ofs; int filepath_len; int file_index; int total_lines; int priority; }; /* notice these are stored in t->lwsac_input_head which has input file scope */ struct lws_fts_lines { struct lws_fts_lines *lines_next; /* * amount of line numbers needs to meet average count for best * efficiency. * * Line numbers are stored in VLI format since if we don't, around half * the total lac allocation consists of struct lws_fts_lines... * size chosen to maintain 8-byte struct alignment */ uint8_t vli[119]; char count; }; /* this represents the instances of a symbol inside a given filepath */ struct lws_fts_instance_file { /* linked-list of tifs generated for current file */ struct lws_fts_instance_file *inst_file_next; struct lws_fts_entry *owner; struct lws_fts_lines *lines_list, *lines_tail; uint32_t file_index; uint32_t total; /* * optimization for the common case there's only 1 - ~3 matches, so we * don't have to allocate any lws_fts_lines struct * * Using 8 bytes total for this maintains 8-byte struct alignment... */ uint8_t vli[7]; char count; }; /* * this is the main trie in-memory allocation object */ struct lws_fts_entry { struct lws_fts_entry *parent; struct lws_fts_entry *child_list; struct lws_fts_entry *sibling; /* * care... this points to content in t->lwsac_input_head, it goes * out of scope when the input file being indexed completes */ struct lws_fts_instance_file *inst_file_list; jg2_file_offset ofs_last_inst_file; char *suffix; /* suffix string or NULL if one char (in .c) */ jg2_file_offset ofs; uint32_t child_count; uint32_t instance_count; uint32_t agg_inst_count; uint32_t agg_child_count; uint32_t suffix_len; unsigned char c; }; /* there's only one of these per trie file */ struct lws_fts { struct lwsac *lwsac_head; struct lwsac *lwsac_input_head; struct lws_fts_entry *root; struct lws_fts_filepath *filepath_list; struct lws_fts_filepath *fp; struct lws_fts_entry *parser; struct lws_fts_entry *root_lookup[256]; /* * head of linked-list of tifs generated for current file * care... this points to content in t->lwsac_input_head */ struct lws_fts_instance_file *tif_list; jg2_file_offset c; /* length of output file so far */ uint64_t agg_trie_creation_us; uint64_t agg_raw_input; uint64_t worst_lwsac_input_size; int last_file_index; int chars_in_line; jg2_file_offset last_block_len_ofs; int line_number; int lines_in_unsealed_linetable; int next_file_index; int count_entries; int fd; unsigned int agg_pos; unsigned int str_match_pos; unsigned char aggregate; unsigned char agg[128]; }; /* since the kernel case allocates >300MB, no point keeping this too low */ #define TRIE_LWSAC_BLOCK_SIZE (1024 * 1024) #define spill(margin, force) \ if (bp && ((uint32_t)bp >= (sizeof(buf) - (margin)) || (force))) { \ if (write(t->fd, buf, bp) != bp) { \ lwsl_err("%s: write %d failed (%d)\n", __func__, \ bp, errno); \ return 1; \ } \ t->c += bp; \ bp = 0; \ } static int g32(unsigned char *b, uint32_t d) { *b++ = (d >> 24) & 0xff; *b++ = (d >> 16) & 0xff; *b++ = (d >> 8) & 0xff; *b = d & 0xff; return 4; } static int g16(unsigned char *b, int d) { *b++ = (d >> 8) & 0xff; *b = d & 0xff; return 2; } static int wq32(unsigned char *b, uint32_t d) { unsigned char *ob = b; if (d > (1 << 28) - 1) *b++ = ((d >> 28) | 0x80) & 0xff; if (d > (1 << 21) - 1) *b++ = ((d >> 21) | 0x80) & 0xff; if (d > (1 << 14) - 1) *b++ = ((d >> 14) | 0x80) & 0xff; if (d > (1 << 7) - 1) *b++ = ((d >> 7) | 0x80) & 0xff; *b++ = d & 0x7f; return (int)(b - ob); } /* read a VLI, return the number of bytes used */ int rq32(unsigned char *b, uint32_t *d) { unsigned char *ob = b; uint32_t t = 0; t = *b & 0x7f; if (*(b++) & 0x80) { t = (t << 7) | (*b & 0x7f); if (*(b++) & 0x80) { t = (t << 7) | (*b & 0x7f); if (*(b++) & 0x80) { t = (t << 7) | (*b & 0x7f); if (*(b++) & 0x80) { t = (t << 7) | (*b & 0x7f); b++; } } } } *d = t; return (int)(b - ob); } struct lws_fts * lws_fts_create(int fd) { struct lws_fts *t; struct lwsac *lwsac_head = NULL; unsigned char buf[TRIE_FILE_HDR_SIZE]; t = lwsac_use(&lwsac_head, sizeof(*t), TRIE_LWSAC_BLOCK_SIZE); if (!t) return NULL; memset(t, 0, sizeof(*t)); t->fd = fd; t->lwsac_head = lwsac_head; t->root = lwsac_use(&lwsac_head, sizeof(*t->root), TRIE_LWSAC_BLOCK_SIZE); if (!t->root) goto unwind; memset(t->root, 0, sizeof(*t->root)); t->parser = t->root; t->last_file_index = -1; t->line_number = 1; t->filepath_list = NULL; memset(t->root_lookup, 0, sizeof(*t->root_lookup)); /* write the header */ buf[0] = 0xca; buf[1] = 0x7a; buf[2] = 0x5f; buf[3] = 0x75; /* (these are filled in with correct data at the end) */ /* file offset to root trie entry */ g32(&buf[4], 0); /* file length when it was created */ g32(&buf[8], 0); /* fileoffset to the filepath table */ g32(&buf[0xc], 0); /* count of filepaths */ g32(&buf[0x10], 0); if (write(t->fd, buf, TRIE_FILE_HDR_SIZE) != TRIE_FILE_HDR_SIZE) { lwsl_err("%s: trie header write failed\n", __func__); goto unwind; } t->c = TRIE_FILE_HDR_SIZE; return t; unwind: lwsac_free(&lwsac_head); return NULL; } void lws_fts_destroy(struct lws_fts **trie) { struct lwsac *lwsac_head = (*trie)->lwsac_head; lwsac_free(&(*trie)->lwsac_input_head); lwsac_free(&lwsac_head); *trie = NULL; } int lws_fts_file_index(struct lws_fts *t, const char *filepath, int filepath_len, int priority) { struct lws_fts_filepath *fp = t->filepath_list; #if 0 while (fp) { if (fp->filepath_len == filepath_len && !strcmp(fp->filepath, filepath)) return fp->file_index; fp = fp->next; } #endif fp = lwsac_use(&t->lwsac_head, sizeof(*fp), TRIE_LWSAC_BLOCK_SIZE); if (!fp) return -1; fp->next = t->filepath_list; t->filepath_list = fp; strncpy(fp->filepath, filepath, sizeof(fp->filepath) - 1); fp->filepath[sizeof(fp->filepath) - 1] = '\0'; fp->filepath_len = filepath_len; fp->file_index = t->next_file_index++; fp->line_table_ofs = t->c; fp->priority = priority; fp->total_lines = 0; t->fp = fp; return fp->file_index; } static struct lws_fts_entry * lws_fts_entry_child_add(struct lws_fts *t, unsigned char c, struct lws_fts_entry *parent) { struct lws_fts_entry *e, **pe; e = lwsac_use(&t->lwsac_head, sizeof(*e), TRIE_LWSAC_BLOCK_SIZE); if (!e) return NULL; memset(e, 0, sizeof(*e)); e->c = c; parent->child_count++; e->parent = parent; t->count_entries++; /* keep the parent child list in ascending sort order for c */ pe = &parent->child_list; while (*pe) { assert((*pe)->parent == parent); if ((*pe)->c > c) { /* add it before */ e->sibling = *pe; *pe = e; break; } pe = &(*pe)->sibling; } if (!*pe) { /* add it at the end */ e->sibling = NULL; *pe = e; } return e; } static int finalize_per_input(struct lws_fts *t) { struct lws_fts_instance_file *tif; unsigned char buf[8192]; uint64_t lwsac_input_size; jg2_file_offset temp; int bp = 0; bp += g16(&buf[bp], 0); bp += g16(&buf[bp], 0); bp += g32(&buf[bp], 0); if (write(t->fd, buf, bp) != bp) return 1; t->c += bp; bp = 0; /* * Write the generated file index + instances (if any) * * Notice the next same-parent file instance fileoffset list is * backwards, so it does not require seeks to fill in. The first * entry has 0 but the second entry points to the first entry (whose * fileoffset is known). * * After all the file instance structs are finalized, * .ofs_last_inst_file contains the fileoffset of that child's tif * list head in the file. * * The file instances are written to disk in the order that the files * were indexed, along with their prev pointers inline. */ tif = t->tif_list; while (tif) { struct lws_fts_lines *i; spill((3 * MAX_VLI) + tif->count, 0); temp = tif->owner->ofs_last_inst_file; if (tif->total) tif->owner->ofs_last_inst_file = t->c + bp; assert(!temp || (temp > TRIE_FILE_HDR_SIZE && temp < t->c)); /* fileoffset of prev instance file for this entry, or 0 */ bp += wq32(&buf[bp], temp); bp += wq32(&buf[bp], tif->file_index); bp += wq32(&buf[bp], tif->total); /* remove any pointers into this disposable lac footprint */ tif->owner->inst_file_list = NULL; memcpy(&buf[bp], &tif->vli, tif->count); bp += tif->count; i = tif->lines_list; while (i) { spill(i->count, 0); memcpy(&buf[bp], &i->vli, i->count); bp += i->count; i = i->lines_next; } tif = tif->inst_file_next; } spill(0, 1); assert(lseek(t->fd, 0, SEEK_END) == (off_t)t->c); if (t->lwsac_input_head) { lwsac_input_size = lwsac_total_alloc(t->lwsac_input_head); if (lwsac_input_size > t->worst_lwsac_input_size) t->worst_lwsac_input_size = lwsac_input_size; } /* * those per-file allocations are all on a separate lac so we can * free it cleanly afterwards */ lwsac_free(&t->lwsac_input_head); /* and lose the pointer into the deallocated lac */ t->tif_list = NULL; return 0; } /* * 0 = punctuation, whitespace, brackets etc * 1 = character inside symbol set * 2 = upper-case character inside symbol set */ static char classify[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, //1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; #if 0 static const char * name_entry(struct lws_fts_entry *e1, char *s, int len) { struct lws_fts_entry *e2; int n = len; s[--n] = '\0'; e2 = e1; while (e2) { if (e2->suffix) { if ((int)e2->suffix_len < n) { n -= e2->suffix_len; memcpy(&s[n], e2->suffix, e2->suffix_len); } } else { n--; s[n] = e2->c; } e2 = e2->parent; } return &s[n + 1]; } #endif /* * as we parse the input, we create a line length table for the file index. * Only the file header has been written before we start doing this. */ int lws_fts_fill(struct lws_fts *t, uint32_t file_index, const char *buf, size_t len) { unsigned long long tf = lws_now_usecs(); unsigned char c, linetable[256], vlibuf[8]; struct lws_fts_entry *e, *e1, *dcl; struct lws_fts_instance_file *tif; int bp = 0, sline, chars, m; char *osuff, skipline = 0; struct lws_fts_lines *tl; unsigned int olen, n; off_t lbh; if ((int)file_index != t->last_file_index) { if (t->last_file_index >= 0) finalize_per_input(t); t->last_file_index = file_index; t->line_number = 1; t->chars_in_line = 0; t->lines_in_unsealed_linetable = 0; } t->agg_raw_input += len; resume: chars = 0; lbh = t->c; sline = t->line_number; bp += g16(&linetable[bp], 0); bp += g16(&linetable[bp], 0); bp += g32(&linetable[bp], 0); while (len) { char go_around = 0; if (t->lines_in_unsealed_linetable >= LWS_FTS_LINES_PER_CHUNK) break; len--; c = (unsigned char)*buf++; t->chars_in_line++; if (c == '\n') { skipline = 0; t->filepath_list->total_lines++; t->lines_in_unsealed_linetable++; t->line_number++; bp += wq32(&linetable[bp], t->chars_in_line); if ((unsigned int)bp > sizeof(linetable) - 6) { if (write(t->fd, linetable, bp) != bp) { lwsl_err("%s: linetable write failed\n", __func__); return 1; } t->c += bp; bp = 0; // assert(lseek(t->fd, 0, SEEK_END) == t->c); } chars += t->chars_in_line; t->chars_in_line = 0; /* * Detect overlength lines and skip them (eg, BASE64 * in css etc) */ if (len > 200) { n = 0; m = 0; while (n < 200 && m < 80 && buf[n] != '\n') { if (buf[n] == ' ' || buf[n] == '\t') m = 0; n++; m++; } /* 80 lines no whitespace, or >=200-char line */ if (m == 80 || n == 200) skipline = 1; } goto seal; } if (skipline) continue; m = classify[(int)c]; if (!m) goto seal; if (m == 2) c += 'a' - 'A'; if (t->aggregate) { /* * We created a trie entry for an earlier char in this * symbol already. So we know at the moment, any * further chars in the symbol are the only children. * * Aggregate them and add them as a string suffix to * the trie symbol at the end (when we know how much to * allocate). */ if (t->agg_pos < sizeof(t->agg) - 1) /* symbol is not too long to stash */ t->agg[t->agg_pos++] = c; continue; } if (t->str_match_pos) { go_around = 1; goto seal; } /* zeroth-iteration child matching */ if (t->parser == t->root) { e = t->root_lookup[(int)c]; if (e) { t->parser = e; continue; } } else { /* look for the char amongst the children */ e = t->parser->child_list; while (e) { /* since they're alpha ordered... */ if (e->c > c) { e = NULL; break; } if (e->c == c) { t->parser = e; if (e->suffix) t->str_match_pos = 1; break; } e = e->sibling; } if (e) continue; } /* * we are blazing a new trail, add a new child representing * the whole suffix that couldn't be matched until now. */ e = lws_fts_entry_child_add(t, c, t->parser); if (!e) { lwsl_err("%s: lws_fts_entry_child_add failed\n", __func__); return 1; } /* if it's the root node, keep the root_lookup table in sync */ if (t->parser == t->root) t->root_lookup[(int)c] = e; /* follow the new path */ t->parser = e; { struct lws_fts_entry **pe = &e->child_list; while (*pe) { assert((*pe)->parent == e); pe = &(*pe)->sibling; } } /* * If there are any more symbol characters coming, just * create a suffix string on t->parser instead of what must * currently be single-child nodes, since we just created e * as a child with a single character due to no existing match * on that single character... so if no match on 'h' with this * guy's parent, we created e that matches on the single char * 'h'. If the symbol continues ... 'a' 'p' 'p' 'y', then * instead of creating singleton child nodes under e, * modify e to match on the whole string suffix "happy". * * If later "hoppy" appears, we will remove the suffix on e, * so it reverts to a char match for 'h', add singleton children * for 'a' and 'o', and attach a "ppy" suffix child to each of * those. * * We want to do this so we don't have to allocate trie entries * for every char in the string to save memory and consequently * time. * * Don't try this optimization if the parent is the root node... * it's not compatible with it's root_lookup table and it's * highly likely children off the root entry are going to have * to be fragmented. */ if (e->parent != t->root) { t->aggregate = 1; t->agg_pos = 0; } continue; seal: if (t->str_match_pos) { /* * We're partway through matching an elaborated string * on a child, not just a character. String matches * only exist when we met a child entry that only had * one path until now... so we had an 'h', and the * only child had a string "hello". * * We are following the right path and will not need * to back up, but we may find as we go we have the * first instance of a second child path, eg, "help". * * When we get to the 'p', we have to split what was * the only string option "hello" into "hel" and then * two child entries, for "lo" and 'p'. */ if (c == t->parser->suffix[t->str_match_pos++]) { if (t->str_match_pos < t->parser->suffix_len) continue; /* * We simply matched everything, continue * parsing normally from this trie entry. */ t->str_match_pos = 0; continue; } /* * So... we hit a mismatch somewhere... it means we * have to split this string entry. * * We know the first char actually matched in order to * start down this road. So for the current trie entry, * we need to truncate his suffix at the char before * this mismatched one, where we diverged (if the * second char, simply remove the suffix string from the * current trie entry to turn it back to a 1-char match) * * The original entry, which becomes the lhs post-split, * is t->parser. */ olen = t->parser->suffix_len; osuff = t->parser->suffix; if (t->str_match_pos == 2) t->parser->suffix = NULL; else t->parser->suffix_len = t->str_match_pos - 1; /* * Then we need to create a new child trie entry that * represents the remainder of the original string * path that we didn't match. For the "hello" / * "help" case, this guy will have "lo". * * Any instances or children (not siblings...) that were * attached to the original trie entry must be detached * first and then migrate to this new guy that completes * the original string. */ dcl = t->parser->child_list; m = t->parser->child_count; t->parser->child_list = NULL; t->parser->child_count = 0; e = lws_fts_entry_child_add(t, osuff[t->str_match_pos - 1], t->parser); if (!e) { lwsl_err("%s: lws_fts_entry_child_add fail1\n", __func__); return 1; } e->child_list = dcl; e->child_count = m; /* * any children we took over must point to us as the * parent now they appear on our child list */ e1 = e->child_list; while (e1) { e1->parent = e; e1 = e1->sibling; } /* * We detached any children, gave them to the new guy * and replaced them with just our new guy */ t->parser->child_count = 1; t->parser->child_list = e; /* * any instances that belonged to the original entry we * are splitting now must be reassigned to the end * part */ e->inst_file_list = t->parser->inst_file_list; if (e->inst_file_list) e->inst_file_list->owner = e; t->parser->inst_file_list = NULL; e->instance_count = t->parser->instance_count; t->parser->instance_count = 0; e->ofs_last_inst_file = t->parser->ofs_last_inst_file; t->parser->ofs_last_inst_file = 0; if (t->str_match_pos != olen) { /* we diverged partway */ e->suffix = &osuff[t->str_match_pos - 1]; e->suffix_len = olen - (t->str_match_pos - 1); } /* * if the current char is a terminal, skip creating a * new way forward. */ if (classify[(int)c]) { /* * Lastly we need to create a new child trie * entry that represents the new way forward * from the point that we diverged. For the * "hello" / "help" case, this guy will start * as a child of "hel" with the single * character match 'p'. * * Since he becomes the current parser context, * more symbol characters may be coming to make * him into, eg, "helping", in which case he * will acquire a suffix eventually of "ping" * via the aggregation stuff */ e = lws_fts_entry_child_add(t, c, t->parser); if (!e) { lwsl_err("%s: child_add fail2\n", __func__); return 1; } } /* go on following this path */ t->parser = e; t->aggregate = 1; t->agg_pos = 0; t->str_match_pos = 0; if (go_around) continue; /* this is intended to be a seal */ } /* end of token */ if (t->aggregate && t->agg_pos) { /* if nothing in agg[]: leave as single char match */ /* otherwise copy out the symbol aggregation */ t->parser->suffix = lwsac_use(&t->lwsac_head, t->agg_pos + 1, TRIE_LWSAC_BLOCK_SIZE); if (!t->parser->suffix) { lwsl_err("%s: lac for suffix failed\n", __func__); return 1; } /* add the first char at the beginning */ *t->parser->suffix = t->parser->c; /* and then add the agg buffer stuff */ memcpy(t->parser->suffix + 1, t->agg, t->agg_pos); t->parser->suffix_len = t->agg_pos + 1; } t->aggregate = 0; if (t->parser == t->root) /* multiple terminal chars */ continue; if (!t->parser->inst_file_list || t->parser->inst_file_list->file_index != file_index) { tif = lwsac_use(&t->lwsac_input_head, sizeof(*tif), TRIE_LWSAC_BLOCK_SIZE); if (!tif) { lwsl_err("%s: lac for tif failed\n", __func__); return 1; } tif->file_index = file_index; tif->owner = t->parser; tif->lines_list = NULL; tif->lines_tail = NULL; tif->total = 0; tif->count = 0; tif->inst_file_next = t->tif_list; t->tif_list = tif; t->parser->inst_file_list = tif; } /* * A naive allocation strategy for this leads to 50% of the * total inmem lac allocation being for line numbers... * * It's mainly solved by only holding the instance and line * number tables for the duration of a file being input, as soon * as one input file is finished it is written to disk. * * For the common case of 1 - ~3 matches the line number are * stored in a small VLI array inside the filepath inst. If the * next one won't fit, it allocates a line number struct with * more vli space and continues chaining those if needed. */ n = wq32(vlibuf, t->line_number); tif = t->parser->inst_file_list; if (!tif->lines_list) { /* we are still trying to use the file inst vli */ if (LWS_ARRAY_SIZE(tif->vli) - tif->count >= n) { tif->count += wq32(tif->vli + tif->count, t->line_number); goto after; } /* we are going to have to allocate */ } /* can we add to an existing line numbers struct? */ if (tif->lines_tail && LWS_ARRAY_SIZE(tif->lines_tail->vli) - tif->lines_tail->count >= n) { tif->lines_tail->count += wq32(tif->lines_tail->vli + tif->lines_tail->count, t->line_number); goto after; } /* either no existing line numbers struct at tail, or full */ /* have to create a(nother) line numbers struct */ tl = lwsac_use(&t->lwsac_input_head, sizeof(*tl), TRIE_LWSAC_BLOCK_SIZE); if (!tl) { lwsl_err("%s: lac for tl failed\n", __func__); return 1; } tl->lines_next = NULL; if (tif->lines_tail) tif->lines_tail->lines_next = tl; tif->lines_tail = tl; if (!tif->lines_list) tif->lines_list = tl; tl->count = wq32(tl->vli, t->line_number); after: tif->total++; #if 0 { char s[128]; const char *ne = name_entry(t->parser, s, sizeof(s)); if (!strcmp(ne, "describ")) { lwsl_err(" %s %d\n", ne, t->str_match_pos); write(1, buf - 10, 20); } } #endif t->parser->instance_count++; t->parser = t->root; t->str_match_pos = 0; } /* seal off the line length table block */ if (bp) { if (write(t->fd, linetable, bp) != bp) return 1; t->c += bp; bp = 0; } if (lseek(t->fd, lbh, SEEK_SET) < 0) { lwsl_err("%s: seek to 0x%llx failed\n", __func__, (unsigned long long)lbh); return 1; } g16(linetable, t->c - lbh); g16(linetable + 2, t->line_number - sline); g32(linetable + 4, chars); if (write(t->fd, linetable, 8) != 8) { lwsl_err("%s: write linetable header failed\n", __func__); return 1; } assert(lseek(t->fd, 0, SEEK_END) == (off_t)t->c); if (lseek(t->fd, t->c, SEEK_SET) < 0) { lwsl_err("%s: end seek failed\n", __func__); return 1; } bp = 0; if (len) { t->lines_in_unsealed_linetable = 0; goto resume; } /* dump the collected per-input instance and line data, and free it */ t->agg_trie_creation_us += lws_now_usecs() - tf; return 0; } /* refer to ./README.md */ int lws_fts_serialize(struct lws_fts *t) { struct lws_fts_filepath *fp = t->filepath_list, *ofp; unsigned long long tf = lws_now_usecs(); struct lws_fts_entry *e, *e1, *s[256]; unsigned char buf[8192], stasis; int n, bp, sp = 0, do_parent; (void)tf; finalize_per_input(t); /* * Compute aggregated instance counts (parents should know the total * number of instances below each child path) * * * If we have * * (root) -> (c1) -> (c2) * -> (c3) * * we need to visit the nodes in the order * * c2, c1, c3, root */ sp = 0; s[0] = t->root; do_parent = 0; while (sp >= 0) { int n; /* aggregate in every antecedent */ for (n = 0; n <= sp; n++) { s[n]->agg_inst_count += s[sp]->instance_count; s[n]->agg_child_count += s[sp]->child_count; } /* handle any children before the parent */ if (s[sp]->child_list) { if (sp + 1 == LWS_ARRAY_SIZE(s)) { lwsl_err("Stack too deep\n"); goto bail; } s[sp + 1] = s[sp]->child_list; sp++; continue; } do { if (s[sp]->sibling) { s[sp] = s[sp]->sibling; break; } else sp--; } while (sp >= 0); } /* dump the filepaths and set prev */ fp = t->filepath_list; ofp = NULL; bp = 0; while (fp) { fp->ofs = t->c + bp; n = (int)strlen(fp->filepath); spill(15 + n, 0); bp += wq32(&buf[bp], fp->line_table_ofs); bp += wq32(&buf[bp], fp->total_lines); bp += wq32(&buf[bp], n); memcpy(&buf[bp], fp->filepath, n); bp += n; fp->prev = ofp; ofp = fp; fp = fp->next; } spill(0, 1); /* record the fileoffset of the filepath map and filepath count */ if (lseek(t->fd, 0xc, SEEK_SET) < 0) goto bail_seek; g32(buf, t->c + bp); g32(buf + 4, t->next_file_index); if (write(t->fd, buf, 8) != 8) goto bail; if (lseek(t->fd, t->c + bp, SEEK_SET) < 0) goto bail_seek; /* dump the filepath map, starting from index 0, which is at the tail */ fp = ofp; bp = 0; while (fp) { spill(5, 0); g32(buf + bp, fp->ofs); bp += 4; fp = fp->prev; } spill(0, 1); /* * The trie entries in reverse order... because of the reversal, we have * always written children first, and marked them with their file offset * before we come to refer to them. */ bp = 0; sp = 0; s[0] = t->root; do_parent = 0; while (s[sp]) { /* handle any children before the parent */ if (!do_parent && s[sp]->child_list) { if (sp + 1 == LWS_ARRAY_SIZE(s)) { lwsl_err("Stack too deep\n"); goto bail; } s[sp + 1] = s[sp]->child_list; sp++; continue; } /* leaf nodes with no children */ e = s[sp]; e->ofs = t->c + bp; /* write the trie entry header */ spill((3 * MAX_VLI), 0); bp += wq32(&buf[bp], e->ofs_last_inst_file); bp += wq32(&buf[bp], e->child_count); bp += wq32(&buf[bp], e->instance_count); bp += wq32(&buf[bp], e->agg_inst_count); /* sort the children in order of highest aggregate hits first */ do { struct lws_fts_entry **pe, *te1, *te2; stasis = 1; /* bubble sort keeps going until nothing changed */ pe = &e->child_list; while (*pe) { te1 = *pe; te2 = te1->sibling; if (te2 && te1->agg_inst_count < te2->agg_inst_count) { stasis = 0; *pe = te2; te1->sibling = te2->sibling; te2->sibling = te1; } pe = &(*pe)->sibling; } } while (!stasis); /* write the children */ e1 = e->child_list; while (e1) { spill((5 * MAX_VLI) + e1->suffix_len + 1, 0); bp += wq32(&buf[bp], e1->ofs); bp += wq32(&buf[bp], e1->instance_count); bp += wq32(&buf[bp], e1->agg_inst_count); bp += wq32(&buf[bp], e1->agg_child_count); if (e1->suffix) { /* string */ bp += wq32(&buf[bp], e1->suffix_len); memmove(&buf[bp], e1->suffix, e1->suffix_len); bp += e1->suffix_len; } else { /* char */ bp += wq32(&buf[bp], 1); buf[bp++] = e1->c; } #if 0 if (e1->suffix && e1->suffix_len == 3 && !memcmp(e1->suffix, "cri", 3)) { struct lws_fts_entry *e2; e2 = e1; while (e2){ if (e2->suffix) lwsl_notice("%s\n", e2->suffix); else lwsl_notice("%c\n", e2->c); e2 = e2->parent; } lwsl_err("*** %c CRI inst %d ch %d\n", e1->parent->c, e1->instance_count, e1->child_count); } #endif e1 = e1->sibling; } /* if there are siblings, do those next */ if (do_parent) { do_parent = 0; sp--; } if (s[sp]->sibling) s[sp] = s[sp]->sibling; else { /* if there are no siblings, do the parent */ do_parent = 1; s[sp] = s[sp]->parent; } } spill(0, 1); assert(lseek(t->fd, 0, SEEK_END) == (off_t)t->c); /* drop the correct root trie offset + file length into the header */ if (lseek(t->fd, 4, SEEK_SET) < 0) { lwsl_err("%s: unable to seek\n", __func__); goto bail; } g32(buf, t->root->ofs); g32(buf + 4, t->c); if (write(t->fd, buf, 0x8) != 0x8) goto bail; lwsl_notice("%s: index %d files (%uMiB) cpu time %dms, " "alloc: %dKiB + %dKiB, " "serialize: %dms, file: %dKiB\n", __func__, t->next_file_index, (int)(t->agg_raw_input / (1024 * 1024)), (int)(t->agg_trie_creation_us / 1000), (int)(lwsac_total_alloc(t->lwsac_head) / 1024), (int)(t->worst_lwsac_input_size / 1024), (int)((lws_now_usecs() - tf) / 1000), (int)(t->c / 1024)); return 0; bail_seek: lwsl_err("%s: problem seekings\n", __func__); bail: return 1; } libwebsockets-3.2.1/lib/misc/getifaddrs.c000066400000000000000000000151111357643561300203520ustar00rootroot00000000000000/* * Copyright (c) 2000 - 2001 Kungliga Tekniska Hļæ½gskolan * (Royal Institute of Technology, Stockholm, Sweden). * 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. * * 3. Neither the name of the Institute nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE 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 INSTITUTE 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. * * originally downloaded from * * http://ftp.uninett.no/pub/OpenBSD/src/kerberosV/src/lib/roken/getifaddrs.c */ #include #include #include #include #include #include #include #include #include "core/private.h" #ifdef LWS_HAVE_SYS_SOCKIO_H #include #endif #ifdef LWS_HAVE_NETINET_IN6_VAR_H #include #endif #ifndef max #define max(a, b) ((a) > (b) ? (a) : (b)) #endif #include "getifaddrs.h" static int getifaddrs2(struct ifaddrs **ifap, int af, int siocgifconf, int siocgifflags, size_t ifreq_sz) { int ret; int fd; size_t buf_size; char *buf; struct ifconf ifconf; char *p; size_t sz; struct sockaddr sa_zero; struct ifreq *ifr; struct ifaddrs *start, **end = &start; buf = NULL; memset(&sa_zero, 0, sizeof(sa_zero)); fd = socket(af, SOCK_DGRAM, 0); if (fd < 0) return -1; buf_size = 8192; for (;;) { buf = lws_zalloc(buf_size, "getifaddrs2"); if (buf == NULL) { ret = ENOMEM; goto error_out; } ifconf.ifc_len = buf_size; ifconf.ifc_buf = buf; /* * Solaris returns EINVAL when the buffer is too small. */ if (ioctl(fd, siocgifconf, &ifconf) < 0 && errno != EINVAL) { ret = errno; goto error_out; } /* * Can the difference between a full and a overfull buf * be determined? */ if (ifconf.ifc_len < (int)buf_size) break; lws_free(buf); buf_size *= 2; } for (p = ifconf.ifc_buf; p < ifconf.ifc_buf + ifconf.ifc_len; p += sz) { struct ifreq ifreq; struct sockaddr *sa; size_t salen; ifr = (struct ifreq *)p; sa = &ifr->ifr_addr; sz = ifreq_sz; salen = sizeof(struct sockaddr); #ifdef LWS_HAVE_STRUCT_SOCKADDR_SA_LEN salen = sa->sa_len; sz = max(sz, sizeof(ifr->ifr_name) + sa->sa_len); #endif #ifdef SA_LEN salen = SA_LEN(sa); sz = max(sz, sizeof(ifr->ifr_name) + SA_LEN(sa)); #endif memset(&ifreq, 0, sizeof(ifreq)); memcpy(ifreq.ifr_name, ifr->ifr_name, sizeof(ifr->ifr_name)); if (ioctl(fd, siocgifflags, &ifreq) < 0) { ret = errno; goto error_out; } *end = lws_malloc(sizeof(**end), "getifaddrs"); (*end)->ifa_next = NULL; (*end)->ifa_name = strdup(ifr->ifr_name); (*end)->ifa_flags = ifreq.ifr_flags; (*end)->ifa_addr = lws_malloc(salen, "getifaddrs"); memcpy((*end)->ifa_addr, sa, salen); (*end)->ifa_netmask = NULL; #if 0 /* fix these when we actually need them */ if (ifreq.ifr_flags & IFF_BROADCAST) { (*end)->ifa_broadaddr = lws_malloc(sizeof(ifr->ifr_broadaddr), "getifaddrs"); memcpy((*end)->ifa_broadaddr, &ifr->ifr_broadaddr, sizeof(ifr->ifr_broadaddr)); } else if (ifreq.ifr_flags & IFF_POINTOPOINT) { (*end)->ifa_dstaddr = lws_malloc(sizeof(ifr->ifr_dstaddr), "getifaddrs"); memcpy((*end)->ifa_dstaddr, &ifr->ifr_dstaddr, sizeof(ifr->ifr_dstaddr)); } else (*end)->ifa_dstaddr = NULL; #else (*end)->ifa_dstaddr = NULL; #endif (*end)->ifa_data = NULL; end = &(*end)->ifa_next; } *ifap = start; close(fd); lws_free(buf); return 0; error_out: close(fd); lws_free(buf); errno = ret; return -1; } int getifaddrs(struct ifaddrs **ifap) { int ret = -1; errno = ENXIO; #if defined(AF_INET6) && defined(SIOCGIF6CONF) && defined(SIOCGIF6FLAGS) if (ret) ret = getifaddrs2(ifap, AF_INET6, SIOCGIF6CONF, SIOCGIF6FLAGS, sizeof(struct in6_ifreq)); #endif #if defined(LWS_HAVE_IPV6) && defined(SIOCGIFCONF) if (ret) ret = getifaddrs2(ifap, AF_INET6, SIOCGIFCONF, SIOCGIFFLAGS, sizeof(struct ifreq)); #endif #if defined(AF_INET) && defined(SIOCGIFCONF) && defined(SIOCGIFFLAGS) if (ret) ret = getifaddrs2(ifap, AF_INET, SIOCGIFCONF, SIOCGIFFLAGS, sizeof(struct ifreq)); #endif return ret; } void freeifaddrs(struct ifaddrs *ifp) { struct ifaddrs *p, *q; for (p = ifp; p; ) { lws_free(p->ifa_name); lws_free(p->ifa_addr); lws_free(p->ifa_dstaddr); lws_free(p->ifa_netmask); lws_free(p->ifa_data); q = p; p = p->ifa_next; lws_free(q); } } #ifdef TEST void print_addr(const char *s, struct sockaddr *sa) { int i; printf(" %s=%d/", s, sa->sa_family); #ifdef LWS_HAVE_STRUCT_SOCKADDR_SA_LEN for (i = 0; i < sa->sa_len - ((lws_intptr_t)sa->sa_data - (lws_intptr_t)&sa->sa_family); i++) printf("%02x", ((unsigned char *)sa->sa_data)[i]); #else for (i = 0; i < sizeof(sa->sa_data); i++) printf("%02x", ((unsigned char *)sa->sa_data)[i]); #endif printf("\n"); } void print_ifaddrs(struct ifaddrs *x) { struct ifaddrs *p; for (p = x; p; p = p->ifa_next) { printf("%s\n", p->ifa_name); printf(" flags=%x\n", p->ifa_flags); if (p->ifa_addr) print_addr("addr", p->ifa_addr); if (p->ifa_dstaddr) print_addr("dstaddr", p->ifa_dstaddr); if (p->ifa_netmask) print_addr("netmask", p->ifa_netmask); printf(" %p\n", p->ifa_data); } } int main() { struct ifaddrs *a = NULL, *b; getifaddrs2(&a, AF_INET, SIOCGIFCONF, SIOCGIFFLAGS, sizeof(struct ifreq)); print_ifaddrs(a); printf("---\n"); getifaddrs(&b); print_ifaddrs(b); return 0; } #endif libwebsockets-3.2.1/lib/misc/getifaddrs.h000066400000000000000000000050271357643561300203640ustar00rootroot00000000000000#ifndef LWS_HAVE_GETIFADDRS #define LWS_HAVE_GETIFADDRS 0 #endif #if LWS_HAVE_GETIFADDRS #include #include #else #ifdef __cplusplus extern "C" { #endif /* * Copyright (c) 2000 Kungliga Tekniska Hļæ½gskolan * (Royal Institute of Technology, Stockholm, Sweden). * 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. * * 3. Neither the name of the Institute nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE 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 INSTITUTE 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. */ /* $KTH: ifaddrs.hin,v 1.3 2000/12/11 00:01:13 assar Exp $ */ #ifndef ifaddrs_h_7467027A95AD4B5C8DDD40FE7D973791 #define ifaddrs_h_7467027A95AD4B5C8DDD40FE7D973791 /* * the interface is defined in terms of the fields below, and this is * sometimes #define'd, so there seems to be no simple way of solving * this and this seemed the best. */ #undef ifa_dstaddr struct ifaddrs { struct ifaddrs *ifa_next; char *ifa_name; unsigned int ifa_flags; struct sockaddr *ifa_addr; struct sockaddr *ifa_netmask; struct sockaddr *ifa_dstaddr; void *ifa_data; }; #ifndef ifa_broadaddr #define ifa_broadaddr ifa_dstaddr #endif int getifaddrs(struct ifaddrs **); void freeifaddrs(struct ifaddrs *); #endif /* __ifaddrs_h__ */ #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/lib/misc/lejp.c000066400000000000000000000517501357643561300172010ustar00rootroot00000000000000/* * Lightweight Embedded JSON Parser * * Copyright (C) 2013-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include #include "core/private.h" #include #include static const char * const parser_errs[] = { "", "", "No opening '{'", "Expected closing '}'", "Expected '\"'", "String underrun", "Illegal unescaped control char", "Illegal escape format", "Illegal hex number", "Expected ':'", "Illegal value start", "Digit required after decimal point", "Bad number format", "Bad exponent format", "Unknown token", "Too many ']'", "Mismatched ']'", "Expected ']'", "JSON nesting limit exceeded", "Nesting tracking used up", "Number too long", "Comma or block end expected", "Unknown", "Parser callback errored (see earlier error)", }; /** * lejp_construct - prepare a struct lejp_ctx for use * * \param ctx: pointer to your struct lejp_ctx * \param callback: your user callback which will received parsed tokens * \param user: optional user data pointer untouched by lejp * \param paths: your array of name elements you are interested in * \param count_paths: LWS_ARRAY_SIZE() of @paths * * Prepares your context struct for use with lejp */ void lejp_construct(struct lejp_ctx *ctx, signed char (*callback)(struct lejp_ctx *ctx, char reason), void *user, const char * const *paths, unsigned char count_paths) { ctx->st[0].s = 0; ctx->st[0].p = 0; ctx->st[0].i = 0; ctx->st[0].b = 0; ctx->sp = 0; ctx->ipos = 0; ctx->path_match = 0; ctx->path_stride = 0; ctx->path[0] = '\0'; ctx->user = user; ctx->line = 1; ctx->pst_sp = 0; ctx->pst[0].callback = callback; ctx->pst[0].paths = paths; ctx->pst[0].count_paths = count_paths; ctx->pst[0].user = NULL; ctx->pst[0].ppos = 0; ctx->pst[0].callback(ctx, LEJPCB_CONSTRUCTED); } /** * lejp_destruct - retire a previously constructed struct lejp_ctx * * \param ctx: pointer to your struct lejp_ctx * * lejp does not perform any allocations, but since your user code might, this * provides a one-time LEJPCB_DESTRUCTED callback at destruction time where * you can clean up in your callback. */ void lejp_destruct(struct lejp_ctx *ctx) { /* no allocations... just let callback know what it happening */ ctx->pst[0].callback(ctx, LEJPCB_DESTRUCTED); } /** * lejp_change_callback - switch to a different callback from now on * * \param ctx: pointer to your struct lejp_ctx * \param callback: your user callback which will received parsed tokens * * This tells the old callback it was destroyed, in case you want to take any * action because that callback "lost focus", then changes to the new * callback and tells it first that it was constructed, and then started. * * Changing callback is a cheap and powerful trick to split out handlers * according to information earlier in the parse. For example you may have * a JSON pair "schema" whose value defines what can be expected for the rest * of the JSON. Rather than having one huge callback for all cases, you can * have an initial one looking for "schema" which then calls * lejp_change_callback() to a handler specific for the schema. * * Notice that afterwards, you need to construct the context again anyway to * parse another JSON object, and the callback is reset then to the main, * schema-interpreting one. The construction action is very lightweight. */ void lejp_change_callback(struct lejp_ctx *ctx, signed char (*callback)(struct lejp_ctx *ctx, char reason)) { ctx->pst[0].callback(ctx, LEJPCB_DESTRUCTED); ctx->pst[0].callback = callback; ctx->pst[0].callback(ctx, LEJPCB_CONSTRUCTED); ctx->pst[0].callback(ctx, LEJPCB_START); } void lejp_check_path_match(struct lejp_ctx *ctx) { const char *p, *q; int n, s = sizeof(char *); if (ctx->path_stride) s = ctx->path_stride; /* we only need to check if a match is not active */ for (n = 0; !ctx->path_match && n < ctx->pst[ctx->pst_sp].count_paths; n++) { ctx->wildcount = 0; p = ctx->path; q = *((char **)(((char *)ctx->pst[ctx->pst_sp].paths) + (n * s))); while (*p && *q) { if (*q != '*') { if (*p != *q) break; p++; q++; continue; } ctx->wild[ctx->wildcount++] = lws_ptr_diff(p, ctx->path); q++; /* * if * has something after it, match to . * if ends with *, eat everything. * This implies match sequences must be ordered like * x.*.* * x.* * if both options are possible */ while (*p && (*p != '.' || !*q)) p++; } if (*p || *q) continue; ctx->path_match = n + 1; ctx->path_match_len = ctx->pst[ctx->pst_sp].ppos; return; } if (!ctx->path_match) ctx->wildcount = 0; } int lejp_get_wildcard(struct lejp_ctx *ctx, int wildcard, char *dest, int len) { int n; if (wildcard >= ctx->wildcount || !len) return 0; n = ctx->wild[wildcard]; while (--len && n < ctx->pst[ctx->pst_sp].ppos && (n == ctx->wild[wildcard] || ctx->path[n] != '.')) *dest++ = ctx->path[n++]; *dest = '\0'; n++; return n - ctx->wild[wildcard]; } /** * lejp_parse - interpret some more incoming data incrementally * * \param ctx: previously constructed parsing context * \param json: char buffer with the new data to interpret * \param len: amount of data in the buffer * * Because lejp is a stream parser, it incrementally parses as new data * becomes available, maintaining all state in the context struct. So an * incomplete JSON is a normal situation, getting you a LEJP_CONTINUE * return, signalling there's no error but to call again with more data when * it comes to complete the parsing. Successful parsing completes with a * 0 or positive integer indicating how much of the last input buffer was * unused. */ int lejp_parse(struct lejp_ctx *ctx, const unsigned char *json, int len) { unsigned char c, n, s, ret = LEJP_REJECT_UNKNOWN; static const char esc_char[] = "\"\\/bfnrt"; static const char esc_tran[] = "\"\\/\b\f\n\r\t"; static const char tokens[] = "rue alse ull "; if (!ctx->sp && !ctx->pst[ctx->pst_sp].ppos) ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_START); while (len--) { c = *json++; s = ctx->st[ctx->sp].s; /* skip whitespace unless we should care */ if (c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '#') { if (c == '\n') { ctx->line++; ctx->st[ctx->sp].s &= ~LEJP_FLAG_WS_COMMENTLINE; } if (!(s & LEJP_FLAG_WS_KEEP)) { if (c == '#') ctx->st[ctx->sp].s |= LEJP_FLAG_WS_COMMENTLINE; continue; } } if (ctx->st[ctx->sp].s & LEJP_FLAG_WS_COMMENTLINE) continue; switch (s) { case LEJP_IDLE: if (c != '{') { ret = LEJP_REJECT_IDLE_NO_BRACE; goto reject; } if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_OBJECT_START)) { ret = LEJP_REJECT_CALLBACK; goto reject; } ctx->st[ctx->sp].s = LEJP_MEMBERS; break; case LEJP_MEMBERS: if (c == '}') { ctx->st[ctx->sp].s = LEJP_IDLE; ret = LEJP_REJECT_MEMBERS_NO_CLOSE; goto reject; } ctx->st[ctx->sp].s = LEJP_M_P; goto redo_character; case LEJP_M_P: if (c != '\"') { ret = LEJP_REJECT_MP_NO_OPEN_QUOTE; goto reject; } /* push */ ctx->st[ctx->sp].s = LEJP_MP_DELIM; c = LEJP_MP_STRING; goto add_stack_level; case LEJP_MP_STRING: if (c == '\"') { if (!ctx->sp) { /* JSON can't end on quote */ ret = LEJP_REJECT_MP_STRING_UNDERRUN; goto reject; } if (ctx->st[ctx->sp - 1].s != LEJP_MP_DELIM) { ctx->buf[ctx->npos] = '\0'; if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_VAL_STR_END) < 0) { ret = LEJP_REJECT_CALLBACK; goto reject; } } /* pop */ ctx->sp--; break; } if (c == '\\') { ctx->st[ctx->sp].s = LEJP_MP_STRING_ESC; break; } if (c < ' ') {/* "control characters" not allowed */ ret = LEJP_REJECT_MP_ILLEGAL_CTRL; goto reject; } goto emit_string_char; case LEJP_MP_STRING_ESC: if (c == 'u') { ctx->st[ctx->sp].s = LEJP_MP_STRING_ESC_U1; ctx->uni = 0; break; } for (n = 0; n < sizeof(esc_char); n++) { if (c != esc_char[n]) continue; /* found it */ c = esc_tran[n]; ctx->st[ctx->sp].s = LEJP_MP_STRING; goto emit_string_char; } ret = LEJP_REJECT_MP_STRING_ESC_ILLEGAL_ESC; /* illegal escape char */ goto reject; case LEJP_MP_STRING_ESC_U1: case LEJP_MP_STRING_ESC_U2: case LEJP_MP_STRING_ESC_U3: case LEJP_MP_STRING_ESC_U4: ctx->uni <<= 4; if (c >= '0' && c <= '9') ctx->uni |= c - '0'; else if (c >= 'a' && c <= 'f') ctx->uni = c - 'a' + 10; else if (c >= 'A' && c <= 'F') ctx->uni = c - 'A' + 10; else { ret = LEJP_REJECT_ILLEGAL_HEX; goto reject; } ctx->st[ctx->sp].s++; switch (s) { case LEJP_MP_STRING_ESC_U2: if (ctx->uni < 0x08) break; /* * 0x08-0xff (0x0800 - 0xffff) * emit 3-byte UTF-8 */ c = 0xe0 | ((ctx->uni >> 4) & 0xf); goto emit_string_char; case LEJP_MP_STRING_ESC_U3: if (ctx->uni >= 0x080) { /* * 0x080 - 0xfff (0x0800 - 0xffff) * middle 3-byte seq * send ....XXXXXX.. */ c = 0x80 | ((ctx->uni >> 2) & 0x3f); goto emit_string_char; } if (ctx->uni < 0x008) break; /* * 0x008 - 0x7f (0x0080 - 0x07ff) * start 2-byte seq */ c = 0xc0 | (ctx->uni >> 2); goto emit_string_char; case LEJP_MP_STRING_ESC_U4: if (ctx->uni >= 0x0080) /* end of 2 or 3-byte seq */ c = 0x80 | (ctx->uni & 0x3f); else /* literal */ c = (unsigned char)ctx->uni; ctx->st[ctx->sp].s = LEJP_MP_STRING; goto emit_string_char; default: break; } break; case LEJP_MP_DELIM: if (c != ':') { ret = LEJP_REJECT_MP_DELIM_MISSING_COLON; goto reject; } ctx->st[ctx->sp].s = LEJP_MP_VALUE; ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; lejp_check_path_match(ctx); if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_PAIR_NAME)) { ret = LEJP_REJECT_CALLBACK; goto reject; } break; case LEJP_MP_VALUE: if (c >= '0' && c <= '9') { ctx->npos = 0; ctx->dcount = 0; ctx->f = 0; ctx->st[ctx->sp].s = LEJP_MP_VALUE_NUM_INT; goto redo_character; } switch (c) { case'\"': /* push */ ctx->st[ctx->sp].s = LEJP_MP_COMMA_OR_END; c = LEJP_MP_STRING; ctx->npos = 0; ctx->buf[0] = '\0'; if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_VAL_STR_START)) { ret = LEJP_REJECT_CALLBACK; goto reject; } goto add_stack_level; case '{': /* push */ ctx->st[ctx->sp].s = LEJP_MP_COMMA_OR_END; c = LEJP_MEMBERS; lejp_check_path_match(ctx); if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_OBJECT_START)) { ret = LEJP_REJECT_CALLBACK; goto reject; } ctx->path_match = 0; goto add_stack_level; case '[': /* push */ ctx->st[ctx->sp].s = LEJP_MP_ARRAY_END; c = LEJP_MP_VALUE; ctx->path[ctx->pst[ctx->pst_sp].ppos++] = '['; ctx->path[ctx->pst[ctx->pst_sp].ppos++] = ']'; ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_ARRAY_START)) { ret = LEJP_REJECT_CALLBACK; goto reject; } ctx->i[ctx->ipos++] = 0; if (ctx->ipos > LWS_ARRAY_SIZE(ctx->i)) { ret = LEJP_REJECT_MP_DELIM_ISTACK; goto reject; } goto add_stack_level; case ']': /* pop */ if (!ctx->sp) { /* JSON can't end on ] */ ret = LEJP_REJECT_MP_C_OR_E_UNDERF; goto reject; } ctx->sp--; if (ctx->st[ctx->sp].s != LEJP_MP_ARRAY_END) { ret = LEJP_REJECT_MP_C_OR_E_NOTARRAY; goto reject; } /* drop the path [n] bit */ if (ctx->sp) { ctx->pst[ctx->pst_sp].ppos = ctx->st[ctx->sp - 1].p; ctx->ipos = ctx->st[ctx->sp - 1].i; } ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; if (ctx->path_match && ctx->pst[ctx->pst_sp].ppos <= ctx->path_match_len) /* * we shrank the path to be * smaller than the matching point */ ctx->path_match = 0; goto array_end; case 't': /* true */ ctx->uni = 0; ctx->st[ctx->sp].s = LEJP_MP_VALUE_TOK; break; case 'f': ctx->uni = 4; ctx->st[ctx->sp].s = LEJP_MP_VALUE_TOK; break; case 'n': ctx->uni = 4 + 5; ctx->st[ctx->sp].s = LEJP_MP_VALUE_TOK; break; default: ret = LEJP_REJECT_MP_DELIM_BAD_VALUE_START; goto reject; } break; case LEJP_MP_VALUE_NUM_INT: if (!ctx->npos && c == '-') { ctx->f |= LEJP_SEEN_MINUS; goto append_npos; } if (ctx->dcount < 20 && c >= '0' && c <= '9') { if (ctx->f & LEJP_SEEN_POINT) ctx->f |= LEJP_SEEN_POST_POINT; ctx->dcount++; goto append_npos; } if (c == '.') { if (!ctx->dcount || (ctx->f & LEJP_SEEN_POINT)) { ret = LEJP_REJECT_MP_VAL_NUM_FORMAT; goto reject; } ctx->f |= LEJP_SEEN_POINT; goto append_npos; } /* * before exponent, if we had . we must have had at * least one more digit */ if ((ctx->f & (LEJP_SEEN_POINT | LEJP_SEEN_POST_POINT)) == LEJP_SEEN_POINT) { ret = LEJP_REJECT_MP_VAL_NUM_INT_NO_FRAC; goto reject; } if (c == 'e' || c == 'E') { if (ctx->f & LEJP_SEEN_EXP) { ret = LEJP_REJECT_MP_VAL_NUM_FORMAT; goto reject; } ctx->f |= LEJP_SEEN_EXP; ctx->st[ctx->sp].s = LEJP_MP_VALUE_NUM_EXP; goto append_npos; } /* if none of the above, did we even have a number? */ if (!ctx->dcount) { ret = LEJP_REJECT_MP_VAL_NUM_FORMAT; goto reject; } ctx->buf[ctx->npos] = '\0'; if (ctx->f & LEJP_SEEN_POINT) { if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_VAL_NUM_FLOAT)) { ret = LEJP_REJECT_CALLBACK; goto reject; } } else { if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_VAL_NUM_INT)) { ret = LEJP_REJECT_CALLBACK; goto reject; } } /* then this is the post-number character, loop */ ctx->st[ctx->sp].s = LEJP_MP_COMMA_OR_END; goto redo_character; case LEJP_MP_VALUE_NUM_EXP: ctx->st[ctx->sp].s = LEJP_MP_VALUE_NUM_INT; if (c >= '0' && c <= '9') goto redo_character; if (c == '+' || c == '-') goto append_npos; ret = LEJP_REJECT_MP_VAL_NUM_EXP_BAD_EXP; goto reject; case LEJP_MP_VALUE_TOK: /* true, false, null */ if (c != tokens[ctx->uni]) { ret = LEJP_REJECT_MP_VAL_TOK_UNKNOWN; goto reject; } ctx->uni++; if (tokens[ctx->uni] != ' ') break; switch (ctx->uni) { case 3: ctx->buf[0] = '1'; ctx->buf[1] = '\0'; if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_VAL_TRUE)) { ret = LEJP_REJECT_CALLBACK; goto reject; } break; case 8: ctx->buf[0] = '0'; ctx->buf[1] = '\0'; if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_VAL_FALSE)) { ret = LEJP_REJECT_CALLBACK; goto reject; } break; case 12: ctx->buf[0] = '\0'; if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_VAL_NULL)) { ret = LEJP_REJECT_CALLBACK; goto reject; } break; } ctx->st[ctx->sp].s = LEJP_MP_COMMA_OR_END; break; case LEJP_MP_COMMA_OR_END: ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; if (c == ',') { /* increment this stack level's index */ ctx->st[ctx->sp].s = LEJP_M_P; if (!ctx->sp) { ctx->pst[ctx->pst_sp].ppos = 0; /* * since we came back to root level, * no path can still match */ ctx->path_match = 0; break; } ctx->pst[ctx->pst_sp].ppos = ctx->st[ctx->sp - 1].p; ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; if (ctx->path_match && ctx->pst[ctx->pst_sp].ppos <= ctx->path_match_len) /* * we shrank the path to be * smaller than the matching point */ ctx->path_match = 0; if (ctx->st[ctx->sp - 1].s != LEJP_MP_ARRAY_END) break; /* top level is definitely an array... */ if (ctx->ipos) ctx->i[ctx->ipos - 1]++; ctx->st[ctx->sp].s = LEJP_MP_VALUE; break; } if (c == ']') { if (!ctx->sp) { /* JSON can't end on ] */ ret = LEJP_REJECT_MP_C_OR_E_UNDERF; goto reject; } /* pop */ ctx->sp--; if (ctx->st[ctx->sp].s != LEJP_MP_ARRAY_END) { ret = LEJP_REJECT_MP_C_OR_E_NOTARRAY; goto reject; } /* drop the path [n] bit */ if (ctx->sp) { ctx->pst[ctx->pst_sp].ppos = ctx->st[ctx->sp - 1].p; ctx->ipos = ctx->st[ctx->sp - 1].i; } ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; if (ctx->path_match && ctx->pst[ctx->pst_sp].ppos <= ctx->path_match_len) /* * we shrank the path to be * smaller than the matching point */ ctx->path_match = 0; /* do LEJP_MP_ARRAY_END processing */ goto redo_character; } if (c == '}') { if (!ctx->sp) { lejp_check_path_match(ctx); if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_OBJECT_END)) { ret = LEJP_REJECT_CALLBACK; goto reject; } if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_COMPLETE)) goto reject; else /* done, return unused amount */ return len; } /* pop */ ctx->sp--; if (ctx->sp) { ctx->pst[ctx->pst_sp].ppos = ctx->st[ctx->sp].p; ctx->ipos = ctx->st[ctx->sp].i; } ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; if (ctx->path_match && ctx->pst[ctx->pst_sp].ppos <= ctx->path_match_len) /* * we shrank the path to be * smaller than the matching point */ ctx->path_match = 0; lejp_check_path_match(ctx); if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_OBJECT_END)) { ret = LEJP_REJECT_CALLBACK; goto reject; } break; } ret = LEJP_REJECT_MP_C_OR_E_NEITHER; goto reject; case LEJP_MP_ARRAY_END: array_end: ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; if (c == ',') { /* increment this stack level's index */ if (ctx->ipos) ctx->i[ctx->ipos - 1]++; ctx->st[ctx->sp].s = LEJP_MP_VALUE; if (ctx->sp) ctx->pst[ctx->pst_sp].ppos = ctx->st[ctx->sp - 1].p; ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; break; } if (c != ']') { ret = LEJP_REJECT_MP_ARRAY_END_MISSING; goto reject; } ctx->st[ctx->sp].s = LEJP_MP_COMMA_OR_END; ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_ARRAY_END); break; } continue; emit_string_char: if (!ctx->sp || ctx->st[ctx->sp - 1].s != LEJP_MP_DELIM) { /* assemble the string value into chunks */ ctx->buf[ctx->npos++] = c; if (ctx->npos == sizeof(ctx->buf) - 1) { if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_VAL_STR_CHUNK)) { ret = LEJP_REJECT_CALLBACK; goto reject; } ctx->npos = 0; } continue; } /* name part of name:value pair */ ctx->path[ctx->pst[ctx->pst_sp].ppos++] = c; continue; add_stack_level: /* push on to the object stack */ if (ctx->pst[ctx->pst_sp].ppos && ctx->st[ctx->sp].s != LEJP_MP_COMMA_OR_END && ctx->st[ctx->sp].s != LEJP_MP_ARRAY_END) ctx->path[ctx->pst[ctx->pst_sp].ppos++] = '.'; ctx->st[ctx->sp].p = ctx->pst[ctx->pst_sp].ppos; ctx->st[ctx->sp].i = ctx->ipos; if (++ctx->sp == LWS_ARRAY_SIZE(ctx->st)) { ret = LEJP_REJECT_STACK_OVERFLOW; goto reject; } ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; ctx->st[ctx->sp].s = c; ctx->st[ctx->sp].b = 0; continue; append_npos: if (ctx->npos >= sizeof(ctx->buf)) { ret = LEJP_REJECT_NUM_TOO_LONG; goto reject; } ctx->buf[ctx->npos++] = c; continue; redo_character: json--; len++; } return LEJP_CONTINUE; reject: ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_FAILED); return ret; } int lejp_parser_push(struct lejp_ctx *ctx, void *user, const char * const *paths, unsigned char paths_count, lejp_callback lejp_cb) { struct _lejp_parsing_stack *p; if (ctx->pst_sp + 1 == LEJP_MAX_PARSING_STACK_DEPTH) return -1; lejp_check_path_match(ctx); ctx->pst[ctx->pst_sp].path_match = ctx->path_match; ctx->pst_sp++; p = &ctx->pst[ctx->pst_sp]; p->user = user; p->callback = lejp_cb; p->paths = paths; p->count_paths = paths_count; p->ppos = 0; ctx->path_match = 0; lejp_check_path_match(ctx); lwsl_debug("%s: pushed parser stack to %d (path %s)\n", __func__, ctx->pst_sp, ctx->path); return 0; } int lejp_parser_pop(struct lejp_ctx *ctx) { if (!ctx->pst_sp) return -1; ctx->pst_sp--; lwsl_debug("%s: popped parser stack to %d\n", __func__, ctx->pst_sp); ctx->path_match = 0; /* force it to check */ lejp_check_path_match(ctx); return 0; } const char * lejp_error_to_string(int e) { if (e > 0) e = 0; else e = -e; if (e >= (int)LWS_ARRAY_SIZE(parser_errs)) return "Unknown error"; return parser_errs[e]; } libwebsockets-3.2.1/lib/misc/lws-ring.c000066400000000000000000000157231357643561300200110ustar00rootroot00000000000000/* * libwebsockets - lws-ring multi-tail abstract ringbuffer api * * Copyright (C) 2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" LWS_VISIBLE LWS_EXTERN struct lws_ring * lws_ring_create(size_t element_len, size_t count, void (*destroy_element)(void *)) { struct lws_ring *ring = lws_malloc(sizeof(*ring), "ring create"); if (!ring) return NULL; ring->buflen = (uint32_t)(count * element_len); ring->element_len = (uint32_t)element_len; ring->head = 0; ring->oldest_tail = 0; ring->destroy_element = destroy_element; ring->buf = lws_malloc(ring->buflen, "ring buf"); if (!ring->buf) { lws_free(ring); return NULL; } return ring; } LWS_VISIBLE LWS_EXTERN void lws_ring_destroy(struct lws_ring *ring) { if (ring->destroy_element) while (ring->oldest_tail != ring->head) { ring->destroy_element((uint8_t *)ring->buf + ring->oldest_tail); ring->oldest_tail = (ring->oldest_tail + ring->element_len) % ring->buflen; } if (ring->buf) lws_free_set_NULL(ring->buf); lws_free(ring); } LWS_VISIBLE LWS_EXTERN size_t lws_ring_get_count_free_elements(struct lws_ring *ring) { int f; /* * possible ringbuf patterns * * h == t * |--------t***h---| * |**h-----------t*| * |t**************h| * |*****ht*********| */ if (ring->head == ring->oldest_tail) f = ring->buflen - ring->element_len; else if (ring->head < ring->oldest_tail) f = (ring->oldest_tail - ring->head) - ring->element_len; else f = (ring->buflen - ring->head) + ring->oldest_tail - ring->element_len; if (f < 2) return 0; return f / ring->element_len; } LWS_VISIBLE LWS_EXTERN size_t lws_ring_get_count_waiting_elements(struct lws_ring *ring, uint32_t *tail) { int f; if (!tail) tail = &ring->oldest_tail; /* * possible ringbuf patterns * * h == t * |--------t***h---| * |**h-----------t*| * |t**************h| * |*****ht*********| */ if (ring->head == *tail) f = 0; else if (ring->head > *tail) f = (ring->head - *tail); else f = (ring->buflen - *tail) + ring->head; return f / ring->element_len; } LWS_VISIBLE LWS_EXTERN int lws_ring_next_linear_insert_range(struct lws_ring *ring, void **start, size_t *bytes) { int n; /* n is how many bytes the whole fifo can take */ n = (int)(lws_ring_get_count_free_elements(ring) * ring->element_len); if (!n) return 1; if (ring->head + n > ring->buflen) { *start = (void *)(((uint8_t *)ring->buf) + ring->head); *bytes = ring->buflen - ring->head; return 0; } *start = (void *)(((uint8_t *)ring->buf) + ring->head); *bytes = n; return 0; } LWS_VISIBLE LWS_EXTERN void lws_ring_bump_head(struct lws_ring *ring, size_t bytes) { ring->head = (ring->head + (uint32_t)bytes) % ring->buflen; } LWS_VISIBLE LWS_EXTERN size_t lws_ring_insert(struct lws_ring *ring, const void *src, size_t max_count) { const uint8_t *osrc = src; int m, n; /* n is how many bytes the whole fifo can take */ n = (int)(lws_ring_get_count_free_elements(ring) * ring->element_len); /* restrict n to how much we want to insert */ if ((uint32_t)n > max_count * ring->element_len) n = (int)(max_count * ring->element_len); /* * n is legal to insert, but as an optimization we can cut the * insert into one or two memcpys, depending on if it wraps */ if (ring->head + n > ring->buflen) { /* * He does wrap. The first memcpy should take us up to * the end of the buffer */ m = ring->buflen - ring->head; memcpy(((uint8_t *)ring->buf) + ring->head, src, m); /* we know it will wrap exactly back to zero */ ring->head = 0; /* adapt the second memcpy for what we already did */ src = ((uint8_t *)src) + m; n -= m; } memcpy(((uint8_t *)ring->buf) + ring->head, src, n); ring->head = (ring->head + n) % ring->buflen; return (((uint8_t *)src + n) - osrc) / ring->element_len; } LWS_VISIBLE LWS_EXTERN size_t lws_ring_consume(struct lws_ring *ring, uint32_t *tail, void *dest, size_t max_count) { uint8_t *odest = dest; void *orig_tail = tail; uint32_t fake_tail; int m, n; if (!tail) { fake_tail = ring->oldest_tail; tail = &fake_tail; } /* n is how many bytes the whole fifo has for us */ n = (int)(lws_ring_get_count_waiting_elements(ring, tail) * ring->element_len); /* restrict n to how much we want to insert */ if ((size_t)n > max_count * ring->element_len) n = (int)(max_count * ring->element_len); if (!dest) { *tail = ((*tail) + n) % ring->buflen; if (!orig_tail) /* single tail */ lws_ring_update_oldest_tail(ring, *tail); return n / ring->element_len; } if (*tail + n > ring->buflen) { /* * He does wrap. The first memcpy should take us up to * the end of the buffer */ m = ring->buflen - *tail; memcpy(dest, ((uint8_t *)ring->buf) + *tail, m); /* we know it will wrap exactly back to zero */ *tail = 0; /* adapt the second memcpy for what we already did */ dest = ((uint8_t *)dest) + m; n -= m; } memcpy(dest, ((uint8_t *)ring->buf) + *tail, n); *tail = ((*tail) + n) % ring->buflen; if (!orig_tail) /* single tail */ lws_ring_update_oldest_tail(ring, *tail); return (((uint8_t *)dest + n) - odest) / ring->element_len; } LWS_VISIBLE LWS_EXTERN const void * lws_ring_get_element(struct lws_ring *ring, uint32_t *tail) { if (!tail) tail = &ring->oldest_tail; if (*tail == ring->head) return NULL; return ((uint8_t *)ring->buf) + *tail; } LWS_VISIBLE LWS_EXTERN void lws_ring_update_oldest_tail(struct lws_ring *ring, uint32_t tail) { if (!ring->destroy_element) { ring->oldest_tail = tail; return; } while (ring->oldest_tail != tail) { ring->destroy_element((uint8_t *)ring->buf + ring->oldest_tail); ring->oldest_tail = (ring->oldest_tail + ring->element_len) % ring->buflen; } } LWS_VISIBLE LWS_EXTERN uint32_t lws_ring_get_oldest_tail(struct lws_ring *ring) { return ring->oldest_tail; } LWS_VISIBLE LWS_EXTERN void lws_ring_dump(struct lws_ring *ring, uint32_t *tail) { if (tail == NULL) tail = &ring->oldest_tail; lwsl_notice("ring %p: buflen %u, elem_len %u, head %u, oldest_tail %u\n" " free_elems: %u; for tail %u, waiting elements: %u\n", ring, ring->buflen, ring->element_len, ring->head, ring->oldest_tail, (int)lws_ring_get_count_free_elements(ring), *tail, (int)lws_ring_get_count_waiting_elements(ring, tail)); } libwebsockets-3.2.1/lib/misc/lws-struct-lejp.c000066400000000000000000000372761357643561300213350ustar00rootroot00000000000000/* * libwebsockets - lws_struct JSON serialization helpers * * Copyright (C) 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include #include #include signed char lws_struct_schema_only_lejp_cb(struct lejp_ctx *ctx, char reason) { lws_struct_args_t *a = (lws_struct_args_t *)ctx->user; const lws_struct_map_t *map = a->map_st[ctx->pst_sp]; int n = a->map_entries_st[ctx->pst_sp]; lejp_callback cb = map->lejp_cb; if (reason != LEJPCB_VAL_STR_END || ctx->path_match != 1) return 0; while (n--) { if (strcmp(ctx->buf, map->colname)) { map++; continue; } a->dest = lwsac_use_zero(&a->ac, map->aux, a->ac_block_size); if (!a->dest) { lwsl_err("%s: OOT\n", __func__); return 1; } a->dest_len = map->aux; if (!cb) cb = lws_struct_default_lejp_cb; lejp_parser_push(ctx, a->dest, &map->child_map[0].colname, (uint8_t)map->child_map_size, cb); a->map_st[ctx->pst_sp] = map->child_map; a->map_entries_st[ctx->pst_sp] = map->child_map_size; return 0; } lwsl_notice("%s: unknown schema %s\n", __func__, ctx->buf); return 1; } static int lws_struct_lejp_push(struct lejp_ctx *ctx, lws_struct_args_t *args, const lws_struct_map_t *map, uint8_t *ch) { lejp_callback cb = map->lejp_cb; if (!cb) cb = lws_struct_default_lejp_cb; lejp_parser_push(ctx, ch, (const char * const*)map->child_map, (uint8_t)map->child_map_size, cb); args->map_st[ctx->pst_sp] = map->child_map; args->map_entries_st[ctx->pst_sp] = map->child_map_size; return 0; } signed char lws_struct_default_lejp_cb(struct lejp_ctx *ctx, char reason) { lws_struct_args_t *args = (lws_struct_args_t *)ctx->user; const lws_struct_map_t *map, *pmap = NULL; uint8_t *ch; char *u; int n; if (reason == LEJPCB_ARRAY_END) { lejp_parser_pop(ctx); return 0; } if (reason == LEJPCB_ARRAY_START) { map = &args->map_st[ctx->pst_sp][ctx->path_match - 1]; n = args->map_entries_st[ctx->pst_sp]; if (map->type == LSMT_LIST) lws_struct_lejp_push(ctx, args, map, NULL); return 0; } if (ctx->pst_sp) pmap = &args->map_st[ctx->pst_sp - 1] [ctx->pst[ctx->pst_sp - 1].path_match - 1]; map = &args->map_st[ctx->pst_sp][ctx->path_match - 1]; n = args->map_entries_st[ctx->pst_sp]; if (reason == LEJPCB_OBJECT_START) { if (map->type != LSMT_CHILD_PTR) { ctx->pst[ctx->pst_sp].user = NULL; return 0; } pmap = map; lws_struct_lejp_push(ctx, args, map, NULL); map = &args->map_st[ctx->pst_sp][ctx->path_match - 1]; n = args->map_entries_st[ctx->pst_sp]; } if (reason == LEJPCB_OBJECT_END && pmap && pmap->type == LSMT_CHILD_PTR) lejp_parser_pop(ctx); if (map->type == LSMT_SCHEMA) { while (n--) { if (strcmp(map->colname, ctx->buf)) { map++; continue; } /* instantiate the correct toplevel object */ ch = lwsac_use_zero(&args->ac, map->aux, args->ac_block_size); if (!ch) { lwsl_err("OOM\n"); return 1; } lws_struct_lejp_push(ctx, args, map, ch); return 0; } lwsl_notice("%s: unknown schema\n", __func__); goto cleanup; } if (!ctx->pst[ctx->pst_sp].user) { struct lws_dll2_owner *owner; struct lws_dll2 *list; /* create list item object if none already */ if (!ctx->path_match || !pmap) return 0; map = &args->map_st[ctx->pst_sp - 1][ctx->path_match - 1]; n = args->map_entries_st[ctx->pst_sp - 1]; if (pmap->type != LSMT_LIST && pmap->type != LSMT_CHILD_PTR) return 1; /* we need to create a child or array item object */ owner = (struct lws_dll2_owner *) (((char *)ctx->pst[ctx->pst_sp - 1].user) + pmap->ofs); assert(pmap->aux); /* instantiate one of the child objects */ ctx->pst[ctx->pst_sp].user = lwsac_use_zero(&args->ac, pmap->aux, args->ac_block_size); if (!ctx->pst[ctx->pst_sp].user) { lwsl_err("OOM\n"); return 1; } lwsl_notice("%s: created child object size %d\n", __func__, (int)pmap->aux); if (pmap->type == LSMT_LIST) { list = (struct lws_dll2 *)((char *)ctx->pst[ctx->pst_sp].user + map->ofs_clist); lws_dll2_add_tail(list, owner); } } if (!ctx->path_match) return 0; if (reason == LEJPCB_VAL_STR_CHUNK) { lejp_collation_t *coll; /* don't cache stuff we are going to ignore */ if (map->type == LSMT_STRING_CHAR_ARRAY && args->chunks_length >= map->aux) return 0; coll = lwsac_use_zero(&args->ac_chunks, sizeof(*coll), sizeof(*coll)); if (!coll) { lwsl_err("%s: OOT\n", __func__); return 1; } coll->chunks.prev = NULL; coll->chunks.next = NULL; coll->chunks.owner = NULL; coll->len = ctx->npos; lws_dll2_add_tail(&coll->chunks, &args->chunks_owner); memcpy(coll->buf, ctx->buf, ctx->npos); args->chunks_length += ctx->npos; return 0; } if (reason != LEJPCB_VAL_STR_END && reason != LEJPCB_VAL_NUM_INT && reason != LEJPCB_VAL_TRUE && reason != LEJPCB_VAL_FALSE) return 0; /* this is the end of the string */ if (ctx->pst[ctx->pst_sp].user && pmap && pmap->type == LSMT_CHILD_PTR) { void **pp = (void **) (((char *)ctx->pst[ctx->pst_sp - 1].user) + pmap->ofs); *pp = ctx->pst[ctx->pst_sp].user; } u = (char *)ctx->pst[ctx->pst_sp].user; if (!u) u = (char *)ctx->pst[ctx->pst_sp - 1].user; { char **pp, *s; size_t lim, b; long long li; switch (map->type) { case LSMT_SIGNED: if (map->aux == sizeof(signed char)) { signed char *pc; pc = (signed char *)(u + map->ofs); *pc = atoi(ctx->buf); break; } if (map->aux == sizeof(int)) { int *pi; pi = (int *)(u + map->ofs); *pi = atoi(ctx->buf); break; } if (map->aux == sizeof(long)) { long *pl; pl = (long *)(u + map->ofs); *pl = atol(ctx->buf); } else { long long *pll; pll = (long long *)(u + map->ofs); *pll = atoll(ctx->buf); } break; case LSMT_UNSIGNED: if (map->aux == sizeof(unsigned char)) { unsigned char *pc; pc = (unsigned char *)(u + map->ofs); *pc = atoi(ctx->buf); break; } if (map->aux == sizeof(unsigned int)) { unsigned int *pi; pi = (unsigned int *)(u + map->ofs); *pi = atoi(ctx->buf); break; } if (map->aux == sizeof(unsigned long)) { unsigned long *pl; pl = (unsigned long *)(u + map->ofs); *pl = atol(ctx->buf); } else { unsigned long long *pll; pll = (unsigned long long *)(u + map->ofs); *pll = atoll(ctx->buf); } break; case LSMT_BOOLEAN: li = reason == LEJPCB_VAL_TRUE; if (map->aux == sizeof(char)) { char *pc; pc = (char *)(u + map->ofs); *pc = (char)li; break; } if (map->aux == sizeof(int)) { int *pi; pi = (int *)(u + map->ofs); *pi = (int)li; } else { uint64_t *p64; p64 = (uint64_t *)(u + map->ofs); *p64 = li; } break; case LSMT_STRING_CHAR_ARRAY: s = (char *)(u + map->ofs); lim = map->aux - 1; goto chunk_copy; case LSMT_STRING_PTR: pp = (char **)(u + map->ofs); lim = args->chunks_length + ctx->npos; s = lwsac_use(&args->ac, lim + 1, args->ac_block_size); if (!s) goto cleanup; *pp = s; chunk_copy: s[lim] = '\0'; /* copy up to lim from the string chunk ac first */ lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, args->chunks_owner.head) { lejp_collation_t *coll = (lejp_collation_t *)p; if (lim) { b = coll->len; if (b > lim) b = lim; memcpy(s, coll->buf, b); s += b; lim -= b; } } lws_end_foreach_dll_safe(p, p1); lwsac_free(&args->ac_chunks); args->chunks_owner.count = 0; args->chunks_owner.head = NULL; args->chunks_owner.tail = NULL; if (lim) { b = ctx->npos; if (b > lim) b = lim; memcpy(s, ctx->buf, b); } break; default: break; } } if (args->cb) args->cb(args->dest, args->cb_arg); return 0; cleanup: lwsl_notice("%s: cleanup\n", __func__); lwsac_free(&args->ac_chunks); args->chunks_owner.count = 0; args->chunks_owner.head = NULL; args->chunks_owner.tail = NULL; return 1; } static const char * schema[] = { "schema" }; int lws_struct_json_init_parse(struct lejp_ctx *ctx, lejp_callback cb, void *user) { if (!cb) cb = lws_struct_schema_only_lejp_cb; lejp_construct(ctx, cb, user, schema, 1); ctx->path_stride = sizeof(lws_struct_map_t); return 0; } lws_struct_serialize_t * lws_struct_json_serialize_create(const lws_struct_map_t *map, size_t map_entries, int flags, void *ptoplevel) { lws_struct_serialize_t *js = lws_zalloc(sizeof(*js), __func__); lws_struct_serialize_st_t *j; if (!js) return NULL; js->flags = flags; j = &js->st[0]; j->map = map; j->map_entries = map_entries; j->obj = ptoplevel; j->idt = 0; return js; } void lws_struct_json_serialize_destroy(lws_struct_serialize_t **pjs) { if (!*pjs) return; lws_free(*pjs); *pjs = NULL; } static void lws_struct_pretty(lws_struct_serialize_t *js, uint8_t **pbuf, size_t *plen) { if (js->flags & LSSERJ_FLAG_PRETTY) { int n; *(*pbuf)++ = '\n'; (*plen)--; for (n = 0; n < js->st[js->sp].idt; n++) { *(*pbuf)++ = ' '; (*plen)--; } } } lws_struct_json_serialize_result_t lws_struct_json_serialize(lws_struct_serialize_t *js, uint8_t *buf, size_t len, size_t *written) { lws_struct_serialize_st_t *j; const lws_struct_map_t *map; size_t budget = 0, olen = len; struct lws_dll2_owner *o; unsigned long long uli; const char *q; const void *p; char dbuf[72]; long long li; int n; *written = 0; *buf = '\0'; while (len > sizeof(dbuf) + 20) { j = &js->st[js->sp]; map = &j->map[j->map_entry]; q = j->obj + map->ofs; /* early check if the entry should be elided */ switch (map->type) { case LSMT_STRING_PTR: case LSMT_CHILD_PTR: q = (char *)*(char **)q; if (!q) goto up; break; case LSMT_LIST: o = (struct lws_dll2_owner *)q; p = j->dllpos = lws_dll2_get_head(o); if (!p) goto up; break; default: break; } if (j->subsequent) { *buf++ = ','; len--; lws_struct_pretty(js, &buf, &len); } j->subsequent = 1; if (map->type != LSMT_SCHEMA && !js->offset) { n = lws_snprintf((char *)buf, len, "\"%s\":", map->colname); buf += n; len -= n; if (js->flags & LSSERJ_FLAG_PRETTY) { *buf++ = ' '; len--; } } switch (map->type) { case LSMT_BOOLEAN: case LSMT_UNSIGNED: if (map->aux == sizeof(char)) { uli = *(unsigned char *)q; } else { if (map->aux == sizeof(int)) { uli = *(unsigned int *)q; } else { if (map->aux == sizeof(long)) uli = *(unsigned long *)q; else uli = *(unsigned long long *)q; } } q = dbuf; if (map->type == LSMT_BOOLEAN) { budget = lws_snprintf(dbuf, sizeof(dbuf), "%s", uli ? "true" : "false"); } else budget = lws_snprintf(dbuf, sizeof(dbuf), "%llu", uli); break; case LSMT_SIGNED: if (map->aux == sizeof(signed char)) { li = (long long)*(signed char *)q; } else { if (map->aux == sizeof(int)) { li = (long long)*(int *)q; } else { if (map->aux == sizeof(long)) li = (long long)*(long *)q; else li = *(long long *)q; } } q = dbuf; budget = lws_snprintf(dbuf, sizeof(dbuf), "%lld", li); break; case LSMT_STRING_CHAR_ARRAY: budget = strlen(q); if (!js->offset) { *buf++ = '\"'; len--; } break; case LSMT_STRING_PTR: budget = strlen(q); if (!js->offset) { *buf++ = '\"'; len--; } break; case LSMT_LIST: *buf++ = '['; len--; if (js->sp + 1 == LEJP_MAX_PARSING_STACK_DEPTH) return LSJS_RESULT_ERROR; /* add a stack level to handle parsing array members */ o = (struct lws_dll2_owner *)q; p = j->dllpos = lws_dll2_get_head(o); if (!j->dllpos) { *buf++ = ']'; len--; goto up; } n = j->idt; j = &js->st[++js->sp]; j->idt = n + 2; j->map = map->child_map; j->map_entries = map->child_map_size; j->size = map->aux; j->subsequent = 0; j->map_entry = 0; lws_struct_pretty(js, &buf, &len); *buf++ = '{'; len--; lws_struct_pretty(js, &buf, &len); if (p) j->obj = ((char *)p) - j->map->ofs_clist; else j->obj = NULL; continue; case LSMT_CHILD_PTR: if (js->sp + 1 == LEJP_MAX_PARSING_STACK_DEPTH) return LSJS_RESULT_ERROR; /* add a stack level tto handle parsing child members */ n = j->idt; j = &js->st[++js->sp]; j->idt = n + 2; j->map = map->child_map; j->map_entries = map->child_map_size; j->size = map->aux; j->subsequent = 0; j->map_entry = 0; *buf++ = '{'; len--; lws_struct_pretty(js, &buf, &len); j->obj = q; continue; case LSMT_SCHEMA: q = dbuf; *buf++ = '{'; len--; j = &js->st[++js->sp]; lws_struct_pretty(js, &buf, &len); budget = lws_snprintf(dbuf, 15, "\"schema\":"); if (js->flags & LSSERJ_FLAG_PRETTY) dbuf[budget++] = ' '; budget += lws_snprintf(dbuf + budget, sizeof(dbuf) - budget, "\"%s\"", map->colname); if (js->sp != 1) return LSJS_RESULT_ERROR; j->map = map->child_map; j->map_entries = map->child_map_size; j->size = map->aux; j->subsequent = 0; j->map_entry = 0; j->obj = js->st[js->sp - 1].obj; j->dllpos = NULL; /* we're actually at the same level */ j->subsequent = 1; j->idt = 1; break; } q += js->offset; budget -= js->remaining; if (budget > len) { js->remaining = budget - len; js->offset = len; budget = len; } else { js->remaining = 0; js->offset = 0; } memcpy(buf, q, budget); buf += budget; *buf = '\0'; len -= budget; switch (map->type) { case LSMT_STRING_CHAR_ARRAY: case LSMT_STRING_PTR: *buf++ = '\"'; len--; break; case LSMT_SCHEMA: continue; default: break; } if (js->remaining) continue; up: if (++j->map_entry < j->map_entries) continue; if (!js->sp) continue; js->sp--; if (!js->sp) { lws_struct_pretty(js, &buf, &len); *buf++ = '}'; len--; lws_struct_pretty(js, &buf, &len); break; } js->offset = 0; j = &js->st[js->sp]; map = &j->map[j->map_entry]; if (map->type == LSMT_CHILD_PTR) { lws_struct_pretty(js, &buf, &len); *buf++ = '}'; len--; /* we have done the singular child pointer */ js->offset = 0; goto up; } if (map->type != LSMT_LIST) continue; /* * we are coming back up to an array map, it means we should * advance to the next array member if there is one */ lws_struct_pretty(js, &buf, &len); *buf++ = '}'; len--; p = j->dllpos = j->dllpos->next; if (j->dllpos) { /* * there was another item in the array to do... let's * move on to that nd do it */ *buf++ = ','; len--; lws_struct_pretty(js, &buf, &len); js->offset = 0; j = &js->st[++js->sp]; j->map_entry = 0; map = &j->map[j->map_entry]; *buf++ = '{'; len--; lws_struct_pretty(js, &buf, &len); j->subsequent = 0; j->obj = ((char *)p) - j->map->ofs_clist; continue; } /* there are no further items in the array */ js->offset = 0; lws_struct_pretty(js, &buf, &len); *buf++ = ']'; len--; goto up; } *written = olen - len; *buf = '\0'; /* convenience, a NUL after the official end */ return LSJS_RESULT_FINISH; } libwebsockets-3.2.1/lib/misc/lws-struct-sqlite.c000066400000000000000000000146231357643561300216730ustar00rootroot00000000000000/* * libwebsockets - lws_struct JSON serialization helpers * * Copyright (C) 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include #include #include /* * we get one of these per matching result from the query */ static int lws_struct_sq3_deser_cb(void *priv, int cols, char **cv, char **cn) { lws_struct_args_t *a = (lws_struct_args_t *)priv; const lws_struct_map_t *map = a->map_st[0]; int n, mems = a->map_entries_st[0]; lws_dll2_owner_t *o = (lws_dll2_owner_t *)a->cb_arg; char *u = lwsac_use_zero(&a->ac, a->dest_len, a->ac_block_size); long long li; size_t lim; char **pp; char *s; if (!u) { lwsl_err("OOM\n"); return 1; } lws_dll2_add_tail((lws_dll2_t *)((char *)u + a->toplevel_dll2_ofs), o); while (mems--) { for (n = 0; n < cols; n++) { if (!cv[n] || strcmp(cn[n], map->colname)) continue; switch (map->type) { case LSMT_SIGNED: if (map->aux == sizeof(signed char)) { signed char *pc; pc = (signed char *)(u + map->ofs); *pc = atoi(cv[n]); break; } if (map->aux == sizeof(int)) { int *pi; pi = (int *)(u + map->ofs); *pi = atoi(cv[n]); break; } if (map->aux == sizeof(long)) { long *pl; pl = (long *)(u + map->ofs); *pl = atol(cv[n]); break; } { long long *pll; pll = (long long *)(u + map->ofs); *pll = atoll(cv[n]); } break; case LSMT_UNSIGNED: if (map->aux == sizeof(unsigned char)) { unsigned char *pc; pc = (unsigned char *)(u + map->ofs); *pc = atoi(cv[n]); break; } if (map->aux == sizeof(unsigned int)) { unsigned int *pi; pi = (unsigned int *)(u + map->ofs); *pi = atoi(cv[n]); break; } if (map->aux == sizeof(unsigned long)) { unsigned long *pl; pl = (unsigned long *)(u + map->ofs); *pl = atol(cv[n]); break; } { unsigned long long *pll; pll = (unsigned long long *)(u + map->ofs); *pll = atoll(cv[n]); } break; case LSMT_BOOLEAN: li = 0; if (!strcmp(cv[n], "true") || !strcmp(cv[n], "TRUE") || cv[n][0] == '1') li = 1; if (map->aux == sizeof(char)) { char *pc; pc = (char *)(u + map->ofs); *pc = (char)li; break; } if (map->aux == sizeof(int)) { int *pi; pi = (int *)(u + map->ofs); *pi = (int)li; } else { uint64_t *p64; p64 = (uint64_t *)(u + map->ofs); *p64 = li; } break; case LSMT_STRING_CHAR_ARRAY: s = (char *)(u + map->ofs); lim = map->aux - 1; lws_strncpy(s, cv[n], lim); break; case LSMT_STRING_PTR: pp = (char **)(u + map->ofs); lim = strlen(cv[n]); s = lwsac_use(&a->ac, lim + 1, a->ac_block_size); if (!s) return 1; *pp = s; memcpy(s, cv[n], lim); s[lim] = '\0'; break; default: break; } } map++; } return 0; } /* * Call this with an LSM_SCHEMA map, its colname is the table name and its * type information describes the toplevel type. Schema is dereferenced and * put in args before the actual sq3 query, which is given the child map. */ int lws_struct_sq3_deserialize(sqlite3 *pdb, const lws_struct_map_t *schema, lws_dll2_owner_t *o, struct lwsac **ac, uint64_t start, int limit) { char s[150], where[32]; lws_struct_args_t a; memset(&a, 0, sizeof(a)); a.cb_arg = o; /* lws_dll2_owner tracking query result objects */ a.map_st[0] = schema->child_map; a.map_entries_st[0] = schema->child_map_size; a.dest_len = schema->aux; /* size of toplevel object to allocate */ a.toplevel_dll2_ofs = schema->ofs; lws_dll2_owner_clear(o); where[0] = '\0'; if (start) lws_snprintf(where, sizeof(where), " where when < %llu ", (unsigned long long)start); lws_snprintf(s, sizeof(s) - 1, "select * " "from %s %s order by created desc limit %d;", schema->colname, where, limit); if (sqlite3_exec(pdb, s, lws_struct_sq3_deser_cb, &a, NULL) != SQLITE_OK) { lwsl_err("%s: fail\n", sqlite3_errmsg(pdb)); lwsac_free(&a.ac); return -1; } *ac = a.ac; return 0; } int lws_struct_sq3_create_table(sqlite3 *pdb, const lws_struct_map_t *schema) { const lws_struct_map_t *map = schema->child_map; int map_size = schema->child_map_size, subsequent = 0; char s[2048], *p = s, *end = &s[sizeof(s) - 1], *pri = "primary key"; p += lws_snprintf(p, end - p, "create table if not exists %s (", schema->colname); while (map_size--) { if (map->type > LSMT_STRING_PTR) { map++; continue; } if (subsequent && (end - p) > 3) *p++ = ','; subsequent = 1; if (map->type < LSMT_STRING_CHAR_ARRAY) p += lws_snprintf(p, end - p, "%s integer %s", map->colname, pri); else p += lws_snprintf(p, end - p, "%s varchar %s", map->colname, pri); pri = ""; map++; } p += lws_snprintf(p, end - p, ");"); if (sqlite3_exec(pdb, s, NULL, NULL, NULL) != SQLITE_OK) { lwsl_err("%s: %s: fail\n", __func__, sqlite3_errmsg(pdb)); return -1; } return 0; } int lws_struct_sq3_open(struct lws_context *context, const char *sqlite3_path, sqlite3 **pdb) { int uid = 0, gid = 0; if (sqlite3_open_v2(sqlite3_path, pdb, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL) != SQLITE_OK) { lwsl_err("%s: Unable to open db %s: %s\n", __func__, sqlite3_path, sqlite3_errmsg(*pdb)); return 1; } lws_get_effective_uid_gid(context, &uid, &gid); if (uid) chown(sqlite3_path, uid, gid); chmod(sqlite3_path, 0600); lwsl_notice("%s: created %s owned by %u:%u mode 0600\n", __func__, sqlite3_path, (unsigned int)uid, (unsigned int)gid); sqlite3_extended_result_codes(*pdb, 1); return 0; } int lws_struct_sq3_close(sqlite3 **pdb) { if (!*pdb) return 0; sqlite3_close(*pdb); *pdb = NULL; return 0; } libwebsockets-3.2.1/lib/misc/lwsac/000077500000000000000000000000001357643561300172045ustar00rootroot00000000000000libwebsockets-3.2.1/lib/misc/lwsac/README.md000066400000000000000000000105501357643561300204640ustar00rootroot00000000000000## LWS Allocated Chunks ![lwsac flow](/doc-assets/lwsac.svg) These apis provide a way to manage a linked-list of allocated chunks... [ HEAD alloc ] -> [ next alloc ] -> [ next alloc ] -> [ curr alloc ] ... and sub-allocate trivially inside the chunks. These sub-allocations are not tracked by lwsac at all, there is a "used" high-water mark for each chunk that's simply advanced by the amount sub-allocated. If the allocation size matches the platform pointer alignment, there is zero overhead to sub-allocate (otherwise the allocation is padded to the next platform pointer alignment automatically). If you have an unknown amount of relatively little things to allocate, including strings or other unstructured data, lwsac is significantly more efficient than individual allocations using malloc or so. [lwsac full public api](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-lwsac.h) ## lwsac_use() api ``` /** * lwsac_use - allocate / use some memory from a lwsac * * \param head: pointer to the lwsac list object * \param ensure: the number of bytes we want to use * \param chunk_size: 0, or the size of the chunk to (over)allocate if * what we want won't fit in the current tail chunk. If * 0, the default value of 4000 is used. If ensure is * larger, it is used instead. * * This also serves to init the lwsac if *head is NULL. Basically it does * whatever is necessary to return you a pointer to ensure bytes of memory * reserved for the caller. * * Returns NULL if OOM. */ LWS_VISIBLE LWS_EXTERN void * lwsac_use(struct lwsac **head, size_t ensure, size_t chunk_size); ``` When you make an sub-allocation using `lwsac_use()`, you can either set the `chunk_size` arg to zero, defaulting to 4000, or a specific chunk size. In the event the requested sub-allocation exceeds the chunk size, the chunk size is increated to match it automatically for this allocation only. Subsequent `lwsac_use()` calls will advance internal pointers to use up the remaining space inside the current chunk if possible; if not enough remaining space it is skipped, a new allocation is chained on and the request pointed to there. Lwsac does not store information about sub-allocations. There is really zero overhead for individual sub-allocations (unless their size is not pointer-aligned, in which case the actual amount sub-allocated is rounded up to the next pointer alignment automatically). For structs, which are pointer- aligned naturally, and a chunk size relatively large for the sub-allocation size, lwsac is extremely efficient even for huge numbers of small allocations. This makes lwsac very effective when the total amount of allocation needed is not known at the start and may be large... it will simply add on chunks to cope with whatever happens. ## lwsac_free() api ``` /** * lwsac_free - deallocate all chunks in the lwsac and set head NULL * * \param head: pointer to the lwsac list object * * This deallocates all chunks in the lwsac, then sets *head to NULL. All * lwsac_use() pointers are invalidated in one hit without individual frees. */ LWS_VISIBLE LWS_EXTERN void lwsac_free(struct lwsac **head); ``` When you are finished with the lwsac, you simply free the chain of allocated chunks using lwsac_free() on the lwsac head. There's no tracking or individual destruction of suballocations - the whole chain of chunks the suballocations live in are freed and invalidated all together. If the structs stored in the lwsac allocated things **outside** the lwsac, then the user must unwind through them and perform the frees. But the idea of lwsac is things stored in the lwsac also suballocate into the lwsac, and point into the lwsac if they need to, avoiding any need to visit them during destroy. It's like clearing up after a kids' party by gathering up a disposable tablecloth: no matter what was left on the table, it's all gone in one step. ## lws_list_ptr helpers ``` /* sort may be NULL if you don't care about order */ LWS_VISIBLE LWS_EXTERN void lws_list_ptr_insert(lws_list_ptr *phead, lws_list_ptr *add, lws_list_ptr_sort_func_t sort); ``` A common pattern needed with sub-allocated structs is they are on one or more linked-list. To make that simple to do cleanly, lws_list... apis are provided along with a generic insertion function that can take a sort callback. These allow a struct to participate on multiple linked-lists simultaneously. libwebsockets-3.2.1/lib/misc/lwsac/cached-file.c000066400000000000000000000115061357643561300214770ustar00rootroot00000000000000/* * libwebsockets - lws alloc chunk live file caching * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #if !defined(LWS_PLAT_OPTEE) && !defined(OPTEE_DEV_KIT) #include "core/private.h" #include "misc/lwsac/private.h" /* * Helper for caching a file in memory in a lac, but also to check at intervals * no less than 5s if the file is still fresh. * * Set *cache to NULL the first time before calling. * * You should call this each time before using the cache... if it's * * - less than 5s since the last freshness check, and * - the file is already in memory * * it just returns with *cache left alone; this costs very little. You should * call `lwsac_use_cached_file_start()` and `lwsac_use_cached_file_end()` * to lock the cache against deletion while you are using it. * * If it's * * - at least 5s since the last freshness check, and * - the file timestamp has changed * * then * * - the file is reloaded into a new lac and *cache set to that * * - the old cache lac, if any, is detached (so it will be freed when its * reference count reaches zero, or immediately if nobody has it) * * Note the call can fail due to OOM or filesystem issue at any time. * * * After the LAC header there is stored a `struct cached_file_info` and then * the raw file contents. * * * [LAC header] * [struct cached_file_info] * [file contents] <--- *cache is set to here * * The api returns a lwsac_cached_file_t type offset to point to the file * contents. Helpers for reference counting and freeing are also provided * that take that type and know how to correct it back to operate on the LAC. */ #define cache_file_to_lac(c) ((struct lwsac *)((char *)c - \ sizeof(struct cached_file_info) - \ sizeof(struct lwsac))) void lwsac_use_cached_file_start(lwsac_cached_file_t cache) { struct lwsac *lac = cache_file_to_lac(cache); lac->refcount++; // lwsl_debug("%s: html refcount: %d\n", __func__, lac->refcount); } void lwsac_use_cached_file_end(lwsac_cached_file_t *cache) { struct lwsac *lac; if (!cache || !*cache) return; lac = cache_file_to_lac(*cache); if (!lac->refcount) lwsl_err("%s: html refcount zero on entry\n", __func__); if (lac->refcount && !--lac->refcount && lac->detached) { *cache = NULL; /* not usable any more */ lwsac_free(&lac); } } void lwsac_use_cached_file_detach(lwsac_cached_file_t *cache) { struct lwsac *lac = cache_file_to_lac(*cache); lac->detached = 1; if (lac->refcount) return; *cache = NULL; lwsac_free(&lac); } int lwsac_cached_file(const char *filepath, lwsac_cached_file_t *cache, size_t *len) { struct cached_file_info *info = NULL; lwsac_cached_file_t old = *cache; struct lwsac *lac = NULL; time_t t = time(NULL); unsigned char *a; struct stat s; size_t all; ssize_t rd; int fd; if (old) { /* we already have a cached copy of it */ info = (struct cached_file_info *)((*cache) - sizeof(*info)); if (t - info->last_confirm < 5) /* we checked it as fresh less than 5s ago, use old */ return 0; } /* * ...it's been 5s, we should check again on the filesystem * that the file hasn't changed */ fd = open(filepath, O_RDONLY); if (fd < 0) { lwsl_err("%s: cannot open %s\n", __func__, filepath); return 1; } if (fstat(fd, &s)) { lwsl_err("%s: cannot stat %s\n", __func__, filepath); goto bail; } if (old && s.st_mtime == info->s.st_mtime) { /* it still seems to be the same as our cached one */ info->last_confirm = t; close(fd); return 0; } /* * we either didn't cache it yet, or it has changed since we cached * it... reload in a new lac and then detach the old lac. */ all = sizeof(*info) + s.st_size + 1; info = lwsac_use(&lac, all, all); if (!info) goto bail; info->s = s; info->last_confirm = t; a = (unsigned char *)(info + 1); *len = s.st_size; a[s.st_size] = '\0'; rd = read(fd, a, s.st_size); if (rd != s.st_size) { lwsl_err("%s: cannot read %s (%d)\n", __func__, filepath, (int)rd); goto bail1; } close(fd); *cache = (lwsac_cached_file_t)a; if (old) lwsac_use_cached_file_detach(&old); return 0; bail1: lwsac_free(&lac); bail: close(fd); return 1; } #endif libwebsockets-3.2.1/lib/misc/lwsac/lwsac.c000066400000000000000000000110621357643561300204610ustar00rootroot00000000000000/* * libwebsockets - lws alloc chunk * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "misc/lwsac/private.h" void lws_list_ptr_insert(lws_list_ptr *head, lws_list_ptr *add, lws_list_ptr_sort_func_t sort_func) { while (sort_func && *head) { if (sort_func(add, *head) <= 0) break; head = *head; } *add = *head; *head = add; } size_t lwsac_align(size_t length) { size_t align = sizeof(int *); if (length & (align - 1)) length += align - (length & (align - 1)); return length; } size_t lwsac_sizeof(void) { return sizeof(struct lwsac); } size_t lwsac_get_tail_pos(struct lwsac *lac) { return lac->ofs; } struct lwsac * lwsac_get_next(struct lwsac *lac) { return lac->next; } void * lwsac_use(struct lwsac **head, size_t ensure, size_t chunk_size) { struct lwsac *chunk; size_t ofs, alloc; /* ensure there's a chunk and enough space in it for this name */ if (!*head || (*head)->curr->alloc_size - (*head)->curr->ofs < ensure) { if (!chunk_size) alloc = LWSAC_CHUNK_SIZE + sizeof(*chunk); else alloc = chunk_size + sizeof(*chunk); /* * If we get asked for something outside our expectation, * allocate to meet it */ if (ensure >= alloc - sizeof(*chunk)) alloc = ensure + sizeof(*chunk); chunk = malloc(alloc); if (!chunk) { lwsl_err("%s: OOM trying to alloc %llud\n", __func__, (unsigned long long)alloc); return NULL; } if (!*head) { *head = chunk; chunk->total_alloc_size = 0; chunk->total_blocks = 0; } else (*head)->curr->next = chunk; (*head)->curr = chunk; (*head)->curr->head = *head; chunk->next = NULL; chunk->alloc_size = alloc; chunk->detached = 0; chunk->refcount = 0; (*head)->total_alloc_size += alloc; (*head)->total_blocks++; /* * belabouring the point... ofs is aligned to the platform's * generic struct alignment at the start then */ (*head)->curr->ofs = sizeof(*chunk); } ofs = (*head)->curr->ofs; (*head)->curr->ofs += lwsac_align(ensure); if ((*head)->curr->ofs >= (*head)->curr->alloc_size) (*head)->curr->ofs = (*head)->curr->alloc_size; return (char *)(*head)->curr + ofs; } void * lwsac_use_zero(struct lwsac **head, size_t ensure, size_t chunk_size) { void *p = lwsac_use(head, ensure, chunk_size); if (p) memset(p, 0, ensure); return p; } void * lwsac_use_zeroed(struct lwsac **head, size_t ensure, size_t chunk_size) { void *r = lwsac_use(head, ensure, chunk_size); if (r) memset(r, 0, ensure); return r; } void lwsac_free(struct lwsac **head) { struct lwsac *it = *head; *head = NULL; lwsl_debug("%s: head %p\n", __func__, *head); while (it) { struct lwsac *tmp = it->next; free(it); it = tmp; } } void lwsac_info(struct lwsac *head) { if (!head) lwsl_debug("%s: empty\n", __func__); else lwsl_debug("%s: lac %p: %dKiB in %d blocks\n", __func__, head, (int)(head->total_alloc_size >> 10), head->total_blocks); } uint64_t lwsac_total_alloc(struct lwsac *head) { return head->total_alloc_size; } void lwsac_reference(struct lwsac *head) { head->refcount++; lwsl_debug("%s: head %p: (det %d) refcount -> %d\n", __func__, head, head->detached, head->refcount); } void lwsac_unreference(struct lwsac **head) { if (!(*head)) return; if (!(*head)->refcount) lwsl_warn("%s: refcount going below zero\n", __func__); (*head)->refcount--; lwsl_debug("%s: head %p: (det %d) refcount -> %d\n", __func__, *head, (*head)->detached, (*head)->refcount); if ((*head)->detached && !(*head)->refcount) { lwsl_debug("%s: head %p: FREED\n", __func__, *head); lwsac_free(head); } } void lwsac_detach(struct lwsac **head) { (*head)->detached = 1; if (!(*head)->refcount) { lwsl_debug("%s: head %p: FREED\n", __func__, *head); lwsac_free(head); } else lwsl_debug("%s: head %p: refcount %d: Marked as detached\n", __func__, *head, (*head)->refcount); } libwebsockets-3.2.1/lib/misc/lwsac/private.h000066400000000000000000000032361357643561300210330ustar00rootroot00000000000000/* * libwebsockets - lws alloc chunk * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #if !defined(LWS_PLAT_OPTEE) #include #endif /* under page size of 4096 to allow overhead */ #define LWSAC_CHUNK_SIZE 4000 /* * the chunk list members all point back to the head themselves so the list * can be detached from the formal head and free itself when its reference * count reaches zero. */ struct lwsac { struct lwsac *next; struct lwsac *head; /* pointer back to the first chunk */ struct lwsac *curr; /* applies to head chunk only */ size_t total_alloc_size; /* applies to head chunk only */ size_t alloc_size; size_t ofs; /* next writeable position inside chunk */ int refcount; /* applies to head chunk only */ int total_blocks; /* applies to head chunk only */ char detached; /* if our refcount gets to zero, free the chunk list */ }; #if !defined(LWS_PLAT_OPTEE) struct cached_file_info { struct stat s; time_t last_confirm; }; #endif libwebsockets-3.2.1/lib/misc/peer-limits.c000066400000000000000000000157471357643561300205070ustar00rootroot00000000000000/* * libwebsockets - peer limits tracking * * Copyright (C) 2010-2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" /* requires context->lock */ static void __lws_peer_remove_from_peer_wait_list(struct lws_context *context, struct lws_peer *peer) { struct lws_peer *df; lws_start_foreach_llp(struct lws_peer **, p, context->peer_wait_list) { if (*p == peer) { df = *p; *p = df->peer_wait_list; df->peer_wait_list = NULL; return; } } lws_end_foreach_llp(p, peer_wait_list); } /* requires context->lock */ static void __lws_peer_add_to_peer_wait_list(struct lws_context *context, struct lws_peer *peer) { __lws_peer_remove_from_peer_wait_list(context, peer); peer->peer_wait_list = context->peer_wait_list; context->peer_wait_list = peer; } struct lws_peer * lws_get_or_create_peer(struct lws_vhost *vhost, lws_sockfd_type sockfd) { struct lws_context *context = vhost->context; socklen_t rlen = 0; void *q; uint8_t *q8; struct lws_peer *peer; uint32_t hash = 0; int n, af = AF_INET; struct sockaddr_storage addr; if (vhost->options & LWS_SERVER_OPTION_UNIX_SOCK) return NULL; #ifdef LWS_WITH_IPV6 if (LWS_IPV6_ENABLED(vhost)) { af = AF_INET6; } #endif rlen = sizeof(addr); if (getpeername(sockfd, (struct sockaddr*)&addr, &rlen)) /* eg, udp doesn't have to have a peer */ return NULL; #ifdef LWS_WITH_IPV6 if (af == AF_INET) #endif { struct sockaddr_in *s = (struct sockaddr_in *)&addr; q = &s->sin_addr; rlen = sizeof(s->sin_addr); } #ifdef LWS_WITH_IPV6 else { struct sockaddr_in6 *s = (struct sockaddr_in6 *)&addr; q = &s->sin6_addr; rlen = sizeof(s->sin6_addr); } #endif q8 = q; for (n = 0; n < (int)rlen; n++) hash = (((hash << 4) | (hash >> 28)) * n) ^ q8[n]; hash = hash % context->pl_hash_elements; lws_context_lock(context, "peer search"); /* <======================= */ lws_start_foreach_ll(struct lws_peer *, peerx, context->pl_hash_table[hash]) { if (peerx->af == af && !memcmp(q, peerx->addr, rlen)) { lws_context_unlock(context); /* === */ return peerx; } } lws_end_foreach_ll(peerx, next); lwsl_info("%s: creating new peer\n", __func__); peer = lws_zalloc(sizeof(*peer), "peer"); if (!peer) { lws_context_unlock(context); /* === */ lwsl_err("%s: OOM for new peer\n", __func__); return NULL; } context->count_peers++; peer->next = context->pl_hash_table[hash]; peer->hash = hash; peer->af = af; context->pl_hash_table[hash] = peer; memcpy(peer->addr, q, rlen); time(&peer->time_created); /* * On creation, the peer has no wsi attached, so is created on the * wait list. When a wsi is added it is removed from the wait list. */ time(&peer->time_closed_all); __lws_peer_add_to_peer_wait_list(context, peer); lws_context_unlock(context); /* ====================================> */ return peer; } /* requires context->lock */ static int __lws_peer_destroy(struct lws_context *context, struct lws_peer *peer) { lws_start_foreach_llp(struct lws_peer **, p, context->pl_hash_table[peer->hash]) { if (*p == peer) { struct lws_peer *df = *p; *p = df->next; lws_free(df); context->count_peers--; return 0; } } lws_end_foreach_llp(p, next); return 1; } void lws_peer_cull_peer_wait_list(struct lws_context *context) { struct lws_peer *df; time_t t; time(&t); if (context->next_cull && t < context->next_cull) return; lws_context_lock(context, "peer cull"); /* <========================= */ context->next_cull = t + 5; lws_start_foreach_llp(struct lws_peer **, p, context->peer_wait_list) { if (t - (*p)->time_closed_all > 10) { df = *p; /* remove us from the peer wait list */ *p = df->peer_wait_list; df->peer_wait_list = NULL; __lws_peer_destroy(context, df); continue; /* we already point to next, if any */ } } lws_end_foreach_llp(p, peer_wait_list); lws_context_unlock(context); /* ====================================> */ } void lws_peer_add_wsi(struct lws_context *context, struct lws_peer *peer, struct lws *wsi) { if (!peer) return; lws_context_lock(context, "peer add"); /* <========================== */ peer->count_wsi++; wsi->peer = peer; __lws_peer_remove_from_peer_wait_list(context, peer); lws_context_unlock(context); /* ====================================> */ } void lws_peer_dump_from_wsi(struct lws *wsi) { struct lws_peer *peer; if (!wsi || !wsi->peer) return; peer = wsi->peer; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) lwsl_notice("%s: wsi %p: created %llu: wsi: %d/%d, ah %d/%d\n", __func__, wsi, (unsigned long long)peer->time_created, peer->count_wsi, peer->total_wsi, peer->http.count_ah, peer->http.total_ah); #else lwsl_notice("%s: wsi %p: created %llu: wsi: %d/%d\n", __func__, wsi, (unsigned long long)peer->time_created, peer->count_wsi, peer->total_wsi); #endif } void lws_peer_track_wsi_close(struct lws_context *context, struct lws_peer *peer) { if (!peer) return; lws_context_lock(context, "peer wsi close"); /* <==================== */ assert(peer->count_wsi); peer->count_wsi--; if (!peer->count_wsi #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) && !peer->http.count_ah #endif ) { /* * in order that we can accumulate peer activity correctly * allowing for periods when the peer has no connections, * we don't synchronously destroy the peer when his last * wsi closes. Instead we mark the time his last wsi * closed and add him to a peer_wait_list to be reaped * later if no further activity is coming. */ time(&peer->time_closed_all); __lws_peer_add_to_peer_wait_list(context, peer); } lws_context_unlock(context); /* ====================================> */ } #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) int lws_peer_confirm_ah_attach_ok(struct lws_context *context, struct lws_peer *peer) { if (!peer) return 0; if (context->ip_limit_ah && peer->http.count_ah >= context->ip_limit_ah) { lwsl_info("peer reached ah limit %d, deferring\n", context->ip_limit_ah); return 1; } return 0; } void lws_peer_track_ah_detach(struct lws_context *context, struct lws_peer *peer) { if (!peer) return; lws_context_lock(context, "peer ah detach"); /* <==================== */ assert(peer->http.count_ah); peer->http.count_ah--; lws_context_unlock(context); /* ====================================> */ } #endif libwebsockets-3.2.1/lib/misc/romfs.c000066400000000000000000000125201357643561300173650ustar00rootroot00000000000000/* * Copyright (C) 2017 National Institute of Advanced Industrial Science * and Technology (AIST) * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of AIST nor the names of its contributors may be used * to endorse or promote products derived from this software without specific * prior written permission. * * 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 HOLDER 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 "romfs.h" #include "esp_spi_flash.h" #define RFS_STRING_MAX 96 static u32_be_t cache[(RFS_STRING_MAX + 32) / 4]; static romfs_inode_t ci = (romfs_inode_t)cache; static romfs_t cr = (romfs_t)cache; static void set_cache(romfs_inode_t inode, size_t len) { spi_flash_read((uint32_t)inode, cache, len); } static uint32_t ntohl(const u32_be_t be) { return ((be >> 24) & 0xff) | ((be >> 16) & 0xff) << 8 | ((be >> 8) & 0xff) << 16 | (be & 0xff) << 24; } static romfs_inode_t romfs_lookup(romfs_t romfs, romfs_inode_t start, const char *path); static int plus_padding(const uint8_t *s) { int n; set_cache((romfs_inode_t)s, RFS_STRING_MAX); n = strlen((const char *)cache); if (!(n & 15)) n += 0x10; return (n + 15) & ~15; } static romfs_inode_t skip_and_pad(romfs_inode_t ri) { const uint8_t *p = ((const uint8_t *)ri) + sizeof(*ri); return (romfs_inode_t)(p + plus_padding(p)); } size_t romfs_mount_check(romfs_t romfs) { set_cache((romfs_inode_t)romfs, sizeof(*romfs)); if (cr->magic1 != 0x6d6f722d || cr->magic2 != 0x2d736631) return 0; return ntohl(cr->size); } static romfs_inode_t romfs_symlink(romfs_t romfs, romfs_inode_t level, romfs_inode_t i) { const char *p = (const char *)skip_and_pad(i); if (*p == '/') { level = skip_and_pad((romfs_inode_t)romfs); p++; } return romfs_lookup(romfs, level, p); } static romfs_inode_t dir_link(romfs_t romfs, romfs_inode_t i) { set_cache(i, sizeof(*i)); return (romfs_inode_t)((const uint8_t *)romfs + ntohl(ci->dir_start)); } static romfs_inode_t romfs_lookup(romfs_t romfs, romfs_inode_t start, const char *path) { romfs_inode_t level, i = start, i_in; const char *p, *cp; uint32_t next_be; if (start == (romfs_inode_t)romfs) i = skip_and_pad((romfs_inode_t)romfs); level = i; while (i != (romfs_inode_t)romfs) { const char *n = ((const char *)i) + sizeof(*i); p = path; i_in = i; set_cache(i, sizeof(*i)); next_be = ci->next; cp = (const char *)cache; set_cache((romfs_inode_t)n, RFS_STRING_MAX); while (*p && *p != '/' && *cp && *p == *cp && (p - path) < RFS_STRING_MAX) { p++; n++; cp++; } while (*p == '/' && p[1] == '/') p++; if (!*cp && (!*p || *p == '/') && (ntohl(next_be) & 7) == RFST_HARDLINK) { set_cache(i, sizeof(*i)); return (romfs_inode_t) ((const uint8_t *)romfs + (ntohl(ci->dir_start) & ~15)); } if (!*p && !*cp) { set_cache(i, sizeof(*i)); if ((ntohl(ci->next) & 7) == RFST_SYMLINK) { i = romfs_symlink(romfs, level, i); continue; } return i; } if (!*p && *cp == '/') return NULL; while (*p == '/' && p[1] == '/') p++; if (*p == '/' && !*cp) { set_cache(i, sizeof(*i)); switch (ntohl(ci->next) & 7) { case RFST_SYMLINK: i = romfs_symlink(romfs, level, i); if (!i) return NULL; i = dir_link(romfs, i); while (*path != '/' && *path) path++; if (!*path) return NULL; path++; continue; case RFST_DIR: path = p + 1; i = dir_link(romfs, i); break; default: path = p + 1; i = skip_and_pad(i); break; } level = i; continue; } set_cache(i, sizeof(*i)); if (!(ntohl(ci->next) & ~15)) return NULL; i = (romfs_inode_t)((const uint8_t *)romfs + (ntohl(ci->next) & ~15)); if (i == i_in) return NULL; } return NULL; } const void * romfs_get_info(romfs_t romfs, const char *path, size_t *len, size_t *csum) { romfs_inode_t i; if (*path == '/') path++; i = romfs_lookup(romfs, (romfs_inode_t)romfs, path); if (!i) return NULL; set_cache(i, sizeof(*i)); *len = ntohl(ci->size); if (csum) *csum = ntohl(ci->checksum); return (void *)skip_and_pad(i); } libwebsockets-3.2.1/lib/misc/romfs.h000066400000000000000000000041361357643561300173760ustar00rootroot00000000000000/* * Copyright (C) 2017 National Institute of Advanced Industrial Science * and Technology (AIST) * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of AIST nor the names of its contributors may be used * to endorse or promote products derived from this software without specific * prior written permission. * * 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 HOLDER 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. */ typedef uint32_t u32_be_t; struct romfs_superblock { u32_be_t magic1; u32_be_t magic2; u32_be_t size; u32_be_t checksum; }; struct romfs_i { u32_be_t next; u32_be_t dir_start; u32_be_t size; u32_be_t checksum; }; enum { RFST_HARDLINK = 0, RFST_DIR = 1, RFST_SYMLINK = 3, }; typedef const struct romfs_i *romfs_inode_t; typedef const struct romfs_superblock *romfs_t; const void * romfs_get_info(romfs_t romfs, const char *path, size_t *len, size_t *csum); size_t romfs_mount_check(romfs_t romfs); libwebsockets-3.2.1/lib/misc/sha-1.c000066400000000000000000000220761357643561300171570ustar00rootroot00000000000000/* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. * 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. * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE PROJECT 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 PROJECT 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. */ /* * FIPS pub 180-1: Secure Hash Algorithm (SHA-1) * based on: http://csrc.nist.gov/fips/fip180-1.txt * implemented by Jun-ichiro itojun Itoh */ #include "core/private.h" #ifdef LWS_HAVE_SYS_TYPES_H #include #endif struct sha1_ctxt { union { unsigned char b8[20]; unsigned int b32[5]; } h; union { unsigned char b8[8]; uint64_t b64[1]; } c; union { unsigned char b8[64]; unsigned int b32[16]; } m; unsigned char count; }; /* sanity check */ #if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN) || !defined(BIG_ENDIAN) # define unsupported 1 #elif BYTE_ORDER != BIG_ENDIAN # if BYTE_ORDER != LITTLE_ENDIAN # define unsupported 1 # endif #endif #ifndef unsupported /* constant table */ static const unsigned int _K[] = { 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6 }; #define K(t) _K[(t) / 20] #define F0(b, c, d) (((b) & (c)) | ((~(b)) & (d))) #define F1(b, c, d) (((b) ^ (c)) ^ (d)) #define F2(b, c, d) (((b) & (c)) | ((b) & (d)) | ((c) & (d))) #define F3(b, c, d) (((b) ^ (c)) ^ (d)) #define S(n, x) (((x) << (n)) | ((x) >> (32 - n))) #define H(n) (ctxt->h.b32[(n)]) #define COUNT (ctxt->count) #define BCOUNT (ctxt->c.b64[0] / 8) #define W(n) (ctxt->m.b32[(n)]) #define PUTBYTE(x) { \ ctxt->m.b8[(COUNT % 64)] = (x); \ COUNT++; \ COUNT %= 64; \ ctxt->c.b64[0] += 8; \ if (COUNT % 64 == 0) \ sha1_step(ctxt); \ } #define PUTPAD(x) { \ ctxt->m.b8[(COUNT % 64)] = (x); \ COUNT++; \ COUNT %= 64; \ if (COUNT % 64 == 0) \ sha1_step(ctxt); \ } static void sha1_step(struct sha1_ctxt *ctxt) { unsigned int a, b, c, d, e, tmp; size_t t, s; #if BYTE_ORDER == LITTLE_ENDIAN struct sha1_ctxt tctxt; memcpy(&tctxt.m.b8[0], &ctxt->m.b8[0], 64); ctxt->m.b8[0] = tctxt.m.b8[3]; ctxt->m.b8[1] = tctxt.m.b8[2]; ctxt->m.b8[2] = tctxt.m.b8[1]; ctxt->m.b8[3] = tctxt.m.b8[0]; ctxt->m.b8[4] = tctxt.m.b8[7]; ctxt->m.b8[5] = tctxt.m.b8[6]; ctxt->m.b8[6] = tctxt.m.b8[5]; ctxt->m.b8[7] = tctxt.m.b8[4]; ctxt->m.b8[8] = tctxt.m.b8[11]; ctxt->m.b8[9] = tctxt.m.b8[10]; ctxt->m.b8[10] = tctxt.m.b8[9]; ctxt->m.b8[11] = tctxt.m.b8[8]; ctxt->m.b8[12] = tctxt.m.b8[15]; ctxt->m.b8[13] = tctxt.m.b8[14]; ctxt->m.b8[14] = tctxt.m.b8[13]; ctxt->m.b8[15] = tctxt.m.b8[12]; ctxt->m.b8[16] = tctxt.m.b8[19]; ctxt->m.b8[17] = tctxt.m.b8[18]; ctxt->m.b8[18] = tctxt.m.b8[17]; ctxt->m.b8[19] = tctxt.m.b8[16]; ctxt->m.b8[20] = tctxt.m.b8[23]; ctxt->m.b8[21] = tctxt.m.b8[22]; ctxt->m.b8[22] = tctxt.m.b8[21]; ctxt->m.b8[23] = tctxt.m.b8[20]; ctxt->m.b8[24] = tctxt.m.b8[27]; ctxt->m.b8[25] = tctxt.m.b8[26]; ctxt->m.b8[26] = tctxt.m.b8[25]; ctxt->m.b8[27] = tctxt.m.b8[24]; ctxt->m.b8[28] = tctxt.m.b8[31]; ctxt->m.b8[29] = tctxt.m.b8[30]; ctxt->m.b8[30] = tctxt.m.b8[29]; ctxt->m.b8[31] = tctxt.m.b8[28]; ctxt->m.b8[32] = tctxt.m.b8[35]; ctxt->m.b8[33] = tctxt.m.b8[34]; ctxt->m.b8[34] = tctxt.m.b8[33]; ctxt->m.b8[35] = tctxt.m.b8[32]; ctxt->m.b8[36] = tctxt.m.b8[39]; ctxt->m.b8[37] = tctxt.m.b8[38]; ctxt->m.b8[38] = tctxt.m.b8[37]; ctxt->m.b8[39] = tctxt.m.b8[36]; ctxt->m.b8[40] = tctxt.m.b8[43]; ctxt->m.b8[41] = tctxt.m.b8[42]; ctxt->m.b8[42] = tctxt.m.b8[41]; ctxt->m.b8[43] = tctxt.m.b8[40]; ctxt->m.b8[44] = tctxt.m.b8[47]; ctxt->m.b8[45] = tctxt.m.b8[46]; ctxt->m.b8[46] = tctxt.m.b8[45]; ctxt->m.b8[47] = tctxt.m.b8[44]; ctxt->m.b8[48] = tctxt.m.b8[51]; ctxt->m.b8[49] = tctxt.m.b8[50]; ctxt->m.b8[50] = tctxt.m.b8[49]; ctxt->m.b8[51] = tctxt.m.b8[48]; ctxt->m.b8[52] = tctxt.m.b8[55]; ctxt->m.b8[53] = tctxt.m.b8[54]; ctxt->m.b8[54] = tctxt.m.b8[53]; ctxt->m.b8[55] = tctxt.m.b8[52]; ctxt->m.b8[56] = tctxt.m.b8[59]; ctxt->m.b8[57] = tctxt.m.b8[58]; ctxt->m.b8[58] = tctxt.m.b8[57]; ctxt->m.b8[59] = tctxt.m.b8[56]; ctxt->m.b8[60] = tctxt.m.b8[63]; ctxt->m.b8[61] = tctxt.m.b8[62]; ctxt->m.b8[62] = tctxt.m.b8[61]; ctxt->m.b8[63] = tctxt.m.b8[60]; #endif a = H(0); b = H(1); c = H(2); d = H(3); e = H(4); for (t = 0; t < 20; t++) { s = t & 0x0f; if (t >= 16) W(s) = S(1, W((s+13) & 0x0f) ^ W((s+8) & 0x0f) ^ W((s+2) & 0x0f) ^ W(s)); tmp = S(5, a) + F0(b, c, d) + e + W(s) + K(t); e = d; d = c; c = S(30, b); b = a; a = tmp; } for (t = 20; t < 40; t++) { s = t & 0x0f; W(s) = S(1, W((s+13) & 0x0f) ^ W((s+8) & 0x0f) ^ W((s+2) & 0x0f) ^ W(s)); tmp = S(5, a) + F1(b, c, d) + e + W(s) + K(t); e = d; d = c; c = S(30, b); b = a; a = tmp; } for (t = 40; t < 60; t++) { s = t & 0x0f; W(s) = S(1, W((s+13) & 0x0f) ^ W((s+8) & 0x0f) ^ W((s+2) & 0x0f) ^ W(s)); tmp = S(5, a) + F2(b, c, d) + e + W(s) + K(t); e = d; d = c; c = S(30, b); b = a; a = tmp; } for (t = 60; t < 80; t++) { s = t & 0x0f; W(s) = S(1, W((s+13) & 0x0f) ^ W((s+8) & 0x0f) ^ W((s+2) & 0x0f) ^ W(s)); tmp = S(5, a) + F3(b, c, d) + e + W(s) + K(t); e = d; d = c; c = S(30, b); b = a; a = tmp; } H(0) = H(0) + a; H(1) = H(1) + b; H(2) = H(2) + c; H(3) = H(3) + d; H(4) = H(4) + e; memset(&ctxt->m.b8[0], 0, 64); } /*------------------------------------------------------------*/ static void _sha1_init(struct sha1_ctxt *ctxt) { memset(ctxt, 0, sizeof(struct sha1_ctxt)); H(0) = 0x67452301; H(1) = 0xefcdab89; H(2) = 0x98badcfe; H(3) = 0x10325476; H(4) = 0xc3d2e1f0; } void sha1_pad(struct sha1_ctxt *ctxt) { size_t padlen; /*pad length in bytes*/ size_t padstart; PUTPAD(0x80); padstart = COUNT % 64; padlen = 64 - padstart; if (padlen < 8) { memset(&ctxt->m.b8[padstart], 0, padlen); COUNT += (unsigned char)padlen; COUNT %= 64; sha1_step(ctxt); padstart = COUNT % 64; /* should be 0 */ padlen = 64 - padstart; /* should be 64 */ } memset(&ctxt->m.b8[padstart], 0, padlen - 8); COUNT += ((unsigned char)padlen - 8); COUNT %= 64; #if BYTE_ORDER == BIG_ENDIAN PUTPAD(ctxt->c.b8[0]); PUTPAD(ctxt->c.b8[1]); PUTPAD(ctxt->c.b8[2]); PUTPAD(ctxt->c.b8[3]); PUTPAD(ctxt->c.b8[4]); PUTPAD(ctxt->c.b8[5]); PUTPAD(ctxt->c.b8[6]); PUTPAD(ctxt->c.b8[7]); #else PUTPAD(ctxt->c.b8[7]); PUTPAD(ctxt->c.b8[6]); PUTPAD(ctxt->c.b8[5]); PUTPAD(ctxt->c.b8[4]); PUTPAD(ctxt->c.b8[3]); PUTPAD(ctxt->c.b8[2]); PUTPAD(ctxt->c.b8[1]); PUTPAD(ctxt->c.b8[0]); #endif } void sha1_loop(struct sha1_ctxt *ctxt, const unsigned char *input, size_t len) { size_t off; off = 0; while (off < len) { size_t gapstart = COUNT % 64, gaplen = 64 - gapstart, copysiz = (gaplen < len - off) ? gaplen : len - off; memcpy(&ctxt->m.b8[gapstart], &input[off], copysiz); COUNT += (unsigned char)copysiz; COUNT %= 64; ctxt->c.b64[0] += copysiz * 8; if (COUNT % 64 == 0) sha1_step(ctxt); off += copysiz; } } void sha1_result(struct sha1_ctxt *ctxt, void *digest0) { unsigned char *digest; digest = (unsigned char *)digest0; sha1_pad(ctxt); #if BYTE_ORDER == BIG_ENDIAN memcpy(digest, &ctxt->h.b8[0], 20); #else digest[0] = ctxt->h.b8[3]; digest[1] = ctxt->h.b8[2]; digest[2] = ctxt->h.b8[1]; digest[3] = ctxt->h.b8[0]; digest[4] = ctxt->h.b8[7]; digest[5] = ctxt->h.b8[6]; digest[6] = ctxt->h.b8[5]; digest[7] = ctxt->h.b8[4]; digest[8] = ctxt->h.b8[11]; digest[9] = ctxt->h.b8[10]; digest[10] = ctxt->h.b8[9]; digest[11] = ctxt->h.b8[8]; digest[12] = ctxt->h.b8[15]; digest[13] = ctxt->h.b8[14]; digest[14] = ctxt->h.b8[13]; digest[15] = ctxt->h.b8[12]; digest[16] = ctxt->h.b8[19]; digest[17] = ctxt->h.b8[18]; digest[18] = ctxt->h.b8[17]; digest[19] = ctxt->h.b8[16]; #endif } /* * This should look and work like the libcrypto implementation */ LWS_VISIBLE unsigned char * lws_SHA1(const unsigned char *d, size_t n, unsigned char *md) { struct sha1_ctxt ctx; _sha1_init(&ctx); sha1_loop(&ctx, d, n); sha1_result(&ctx, (void *)md); return md; } #endif /*unsupported*/ libwebsockets-3.2.1/lib/misc/threadpool/000077500000000000000000000000001357643561300202345ustar00rootroot00000000000000libwebsockets-3.2.1/lib/misc/threadpool/README.md000066400000000000000000000201371357643561300215160ustar00rootroot00000000000000## Threadpool ### Overview ![overview](/doc-assets/threadpool.svg) An api that lets you create a pool of worker threads, and a queue of tasks that are bound to a wsi. Tasks in their own thread synchronize communication to the lws service thread of the wsi via `LWS_CALLBACK_SERVER_WRITEABLE` and friends. Tasks can produce some output, then return that they want to "sync" with the service thread. That causes a `LWS_CALLBACK_SERVER_WRITEABLE` in the service thread context, where the output can be consumed, and the task told to continue, or completed tasks be reaped. ALL of the details related to thread synchronization and an associated wsi in the lws service thread context are handled by the threadpool api, without needing any pthreads in user code. ### Example https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/ws-server/minimal-ws-server-threadpool ### Lifecycle considerations #### Tasks vs wsi Although all tasks start out as being associated to a wsi, in fact the lifetime of a task and that of the wsi are not necessarily linked. You may start a long task, eg, that runs atomically in its thread for 30s, and at any time the client may close the connection, eg, close a browser window. There are arrangements that a task can "check in" periodically with lws to see if it has been asked to stop, allowing the task lifetime to be related to the wsi lifetime somewhat, but some tasks are going to be atomic and longlived. For that reason, at wsi close an ongoing task can detach from the wsi and continue until it ends or understands it has been asked to stop. To make that work, the task is created with a `cleanup` callback that performs any freeing independent of still having a wsi around to do it... the task takes over responsibility to free the user pointer on destruction when the task is created. ![Threadpool States](/doc-assets/threadpool-states.svg) #### Reaping completed tasks Once created, although tasks may run asynchronously, the task itself does not get destroyed on completion but added to a "done queue". Only when the lws service thread context queries the task state with `lws_threadpool_task_status()` may the task be reaped and memory freed. This is analogous to unix processes and `wait()`. If a task became detached from its wsi, then joining the done queue is enough to get the task reaped, since there's nobody left any more to synchronize the reaping with. ### User interface The api is declared at https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-threadpool.h #### Threadpool creation / destruction The threadpool should be created at program or vhost init using `lws_threadpool_create()` and destroyed on exit or vhost destruction using first `lws_threadpool_finish()` and then `lws_threadpool_destroy()`. Threadpools should be named, varargs are provided on the create function to facilite eg, naming the threadpool by the vhost it's associated with. Threadpool creation takes an args struct with the following members: Member|function ---|--- threads|The maxiumum number of independent threads in the pool max_queue_depth|The maximum number of tasks allowed to wait for a place in the pool #### Task creation / destruction Tasks are created and queued using `lws_threadpool_enqueue()`, this takes an args struct with the following members Member|function ---|--- wsi|The wsi the task is initially associated with user|An opaque user-private pointer used for communication with the lws service thread and private state / data task|A pointer to the function that will run in the pool thread cleanup|A pointer to a function that will clean up finished or stopped tasks (perhaps freeing user) Tasks also should have a name, the creation function again provides varargs to simplify naming the task with string elements related to who started it and why. #### The task function itself The task function receives the task user pointer and the task state. The possible task states are State|Meaning ---|--- LWS_TP_STATUS_QUEUED|Task is still waiting for a pool thread LWS_TP_STATUS_RUNNING|Task is supposed to do its work LWS_TP_STATUS_SYNCING|Task is blocked waiting for sync from lws service thread LWS_TP_STATUS_STOPPING|Task has been asked to stop but didn't stop yet LWS_TP_STATUS_FINISHED|Task has reported it has completed LWS_TP_STATUS_STOPPED|Task has aborted The task function will only be told `LWS_TP_STATUS_RUNNING` or `LWS_TP_STATUS_STOPPING` in its status argument... RUNNING means continue with the user task and STOPPING means clean up and return `LWS_TP_RETURN_STOPPED`. If possible every 100ms or so the task should return `LWS_TP_RETURN_CHECKING_IN` to allow lws to inform it reasonably quickly that it has been asked to stop (eg, because the related wsi has closed), or if it can continue. If not possible, it's okay but eg exiting the application may experience delays until the running task finishes, and since the wsi may have gone, the work is wasted. The task function may return one of Return|Meaning ---|--- LWS_TP_RETURN_CHECKING_IN|Still wants to run, but confirming nobody asked him to stop. Will be called again immediately with `LWS_TP_STATUS_RUNNING` or `LWS_TP_STATUS_STOPPING` LWS_TP_RETURN_SYNC|Task wants to trigger a WRITABLE callback and block until lws service thread restarts it with `lws_threadpool_task_sync()` LWS_TP_RETURN_FINISHED|Task has finished, successfully as far as it goes LWS_TP_RETURN_STOPPED|Task has finished, aborting in response to a request to stop The SYNC or CHECKING_IN return may also have a flag `LWS_TP_RETURN_FLAG_OUTLIVE` applied to it, which indicates to threadpool that this task wishes to remain unstopped after the wsi closes. This is useful in the case where the task understands it will take a long time to complete, and wants to return a complete status and maybe close the connection, perhaps with a token identifying the task. The task can then be monitored separately by using the token. #### Synchronizing The task can choose to "SYNC" with the lws service thread, in other words cause a WRITABLE callback on the associated wsi in the lws service thread context and block itself until it hears back from there via `lws_threadpool_task_sync()` to resume the task. This is typically used when, eg, the task has filled its buffer, or ringbuffer, and needs to pause operations until what's done has been sent and some buffer space is open again. In the WRITABLE callback, in lws service thread context, the buffer can be sent with `lws_write()` and then `lws_threadpool_task_sync()` to allow the task to fill another buffer and continue that way. If the WRITABLE callback determines that the task should stop, it can just call `lws_threadpool_task_sync()` with the second argument as 1, to force the task to stop immediately after it resumes. #### The cleanup function When a finished task is reaped, or a task that become detached from its initial wsi completes or is stopped, it calls the `.cleanup` function defined in the task creation args struct to free anything related to the user pointer. With threadpool, responsibility for freeing allocations used by the task belongs strictly with the task, via the `.cleanup` function, once the task has been enqueued. That's different from a typical non-threadpool protocol where the wsi lifecycle controls deallocation. This reflects the fact that the task may outlive the wsi. #### Protecting against WRITABLE and / or SYNC duplication Care should be taken than data prepared by the task thread in the user priv memory should only be sent once. For example, after sending data from a user priv buffer of a given length stored in the priv, zero down the length. Task execution and the SYNC writable callbacks are mutually exclusive, so there is no danger of collision between the task thread and the lws service thread if the reason for the callback is a SYNC operation from the task thread. ### Thread overcommit If the tasks running on the threads are ultimately network-bound for all or some of their processing (via the SYNC with the WRITEABLE callback), it's possible to overcommit the number of threads in the pool compared to the number of threads the processor has in hardware to get better occupancy in the CPU. libwebsockets-3.2.1/lib/misc/threadpool/threadpool.c000066400000000000000000000600231357643561300225420ustar00rootroot00000000000000/* * libwebsockets - threadpool api * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #define _GNU_SOURCE #include #include "core/private.h" #include #include struct lws_threadpool; struct lws_threadpool_task { struct lws_threadpool_task *task_queue_next; struct lws_threadpool *tp; char name[32]; struct lws_threadpool_task_args args; lws_usec_t created; lws_usec_t acquired; lws_usec_t done; lws_usec_t entered_state; lws_usec_t acc_running; lws_usec_t acc_syncing; pthread_cond_t wake_idle; enum lws_threadpool_task_status status; int late_sync_retries; char wanted_writeable_cb; char outlive; }; struct lws_pool { struct lws_threadpool *tp; pthread_t thread; pthread_mutex_t lock; /* part of task wake_idle */ struct lws_threadpool_task *task; lws_usec_t acquired; int worker_index; }; struct lws_threadpool { pthread_mutex_t lock; /* protects all pool lists */ pthread_cond_t wake_idle; struct lws_pool *pool_list; struct lws_context *context; struct lws_threadpool *tp_list; /* context list of threadpools */ struct lws_threadpool_task *task_queue_head; struct lws_threadpool_task *task_done_head; char name[32]; int threads_in_pool; int queue_depth; int done_queue_depth; int max_queue_depth; int running_tasks; unsigned int destroying:1; }; static int ms_delta(lws_usec_t now, lws_usec_t then) { return (int)((now - then) / 1000); } static void us_accrue(lws_usec_t *acc, lws_usec_t then) { lws_usec_t now = lws_now_usecs(); *acc += now - then; } static int pc_delta(lws_usec_t now, lws_usec_t then, lws_usec_t us) { lws_usec_t delta = (now - then) + 1; return (int)((us * 100) / delta); } static void __lws_threadpool_task_dump(struct lws_threadpool_task *task, char *buf, int len) { lws_usec_t now = lws_now_usecs(); char *end = buf + len - 1; int syncms = 0, runms = 0; if (!task->acquired) { buf += lws_snprintf(buf, end - buf, "task: %s, QUEUED queued: %dms", task->name, ms_delta(now, task->created)); return; } if (task->acc_running) runms = task->acc_running; if (task->acc_syncing) syncms = task->acc_syncing; if (!task->done) { buf += lws_snprintf(buf, end - buf, "task: %s, ONGOING state %d (%dms) alive: %dms " "(queued %dms, acquired: %dms, " "run: %d%%, sync: %d%%)", task->name, task->status, ms_delta(now, task->entered_state), ms_delta(now, task->created), ms_delta(task->acquired, task->created), ms_delta(now, task->acquired), pc_delta(now, task->acquired, runms), pc_delta(now, task->acquired, syncms)); return; } buf += lws_snprintf(buf, end - buf, "task: %s, DONE state %d lived: %dms " "(queued %dms, on thread: %dms, " "ran: %d%%, synced: %d%%)", task->name, task->status, ms_delta(task->done, task->created), ms_delta(task->acquired, task->created), ms_delta(task->done, task->acquired), pc_delta(task->done, task->acquired, runms), pc_delta(task->done, task->acquired, syncms)); } void lws_threadpool_dump(struct lws_threadpool *tp) { #if defined(_DEBUG) struct lws_threadpool_task **c; char buf[160]; int n, count; pthread_mutex_lock(&tp->lock); /* ======================== tpool lock */ lwsl_thread("%s: tp: %s, Queued: %d, Run: %d, Done: %d\n", __func__, tp->name, tp->queue_depth, tp->running_tasks, tp->done_queue_depth); count = 0; c = &tp->task_queue_head; while (*c) { struct lws_threadpool_task *task = *c; __lws_threadpool_task_dump(task, buf, sizeof(buf)); lwsl_thread(" - %s\n", buf); count++; c = &(*c)->task_queue_next; } if (count != tp->queue_depth) lwsl_err("%s: tp says queue depth %d, but actually %d\n", __func__, tp->queue_depth, count); count = 0; for (n = 0; n < tp->threads_in_pool; n++) { struct lws_pool *pool = &tp->pool_list[n]; struct lws_threadpool_task *task = pool->task; if (task) { __lws_threadpool_task_dump(task, buf, sizeof(buf)); lwsl_thread(" - worker %d: %s\n", n, buf); count++; } } if (count != tp->running_tasks) lwsl_err("%s: tp says %d running_tasks, but actually %d\n", __func__, tp->running_tasks, count); count = 0; c = &tp->task_done_head; while (*c) { struct lws_threadpool_task *task = *c; __lws_threadpool_task_dump(task, buf, sizeof(buf)); lwsl_thread(" - %s\n", buf); count++; c = &(*c)->task_queue_next; } if (count != tp->done_queue_depth) lwsl_err("%s: tp says done_queue_depth %d, but actually %d\n", __func__, tp->done_queue_depth, count); pthread_mutex_unlock(&tp->lock); /* --------------- tp unlock */ #endif } static void state_transition(struct lws_threadpool_task *task, enum lws_threadpool_task_status status) { task->entered_state = lws_now_usecs(); task->status = status; } static void lws_threadpool_task_cleanup_destroy(struct lws_threadpool_task *task) { if (task->args.cleanup) task->args.cleanup(task->args.wsi, task->args.user); if (task->args.wsi) task->args.wsi->tp_task = NULL; lwsl_thread("%s: tp %p: cleaned finished task for wsi %p\n", __func__, task->tp, task->args.wsi); lws_free(task); } static void __lws_threadpool_reap(struct lws_threadpool_task *task) { struct lws_threadpool_task **c, *t = NULL; struct lws_threadpool *tp = task->tp; /* remove the task from the done queue */ c = &tp->task_done_head; while (*c) { if ((*c) == task) { t = *c; *c = t->task_queue_next; t->task_queue_next = NULL; tp->done_queue_depth--; lwsl_thread("%s: tp %s: reaped task wsi %p\n", __func__, tp->name, task->args.wsi); break; } c = &(*c)->task_queue_next; } if (!t) lwsl_err("%s: task %p not in done queue\n", __func__, task); /* call the task's cleanup and delete the task itself */ lws_threadpool_task_cleanup_destroy(task); } /* * this gets called from each tsi service context after the service was * cancelled... we need to ask for the writable callback from the matching * tsi context for any wsis bound to a worked thread that need it */ int lws_threadpool_tsi_context(struct lws_context *context, int tsi) { struct lws_threadpool_task **c, *task = NULL; struct lws_threadpool *tp; struct lws *wsi; lws_context_lock(context, __func__); tp = context->tp_list_head; while (tp) { int n; /* for the running (syncing...) tasks... */ for (n = 0; n < tp->threads_in_pool; n++) { struct lws_pool *pool = &tp->pool_list[n]; task = pool->task; if (!task) continue; wsi = task->args.wsi; if (!wsi || wsi->tsi != tsi || !task->wanted_writeable_cb) continue; task->wanted_writeable_cb = 0; lws_memory_barrier(); /* * finally... we can ask for the callback on * writable from the correct service thread * context */ lws_callback_on_writable(wsi); } /* for the done tasks... */ c = &tp->task_done_head; while (*c) { task = *c; wsi = task->args.wsi; if (wsi && wsi->tsi == tsi && task->wanted_writeable_cb) { task->wanted_writeable_cb = 0; lws_memory_barrier(); /* * finally... we can ask for the callback on * writable from the correct service thread * context */ lws_callback_on_writable(wsi); } c = &task->task_queue_next; } tp = tp->tp_list; } lws_context_unlock(context); return 0; } static int lws_threadpool_worker_sync(struct lws_pool *pool, struct lws_threadpool_task *task) { enum lws_threadpool_task_status temp; struct timespec abstime; struct lws *wsi; int tries = 15; /* block until writable acknowledges */ lwsl_debug("%s: %p: LWS_TP_RETURN_SYNC in\n", __func__, task); pthread_mutex_lock(&pool->lock); /* ======================= pool lock */ lwsl_info("%s: %s: task %p (%s): syncing with wsi %p\n", __func__, pool->tp->name, task, task->name, task->args.wsi); temp = task->status; state_transition(task, LWS_TP_STATUS_SYNCING); while (tries--) { wsi = task->args.wsi; /* * if the wsi is no longer attached to this task, there is * nothing we can sync to usefully. Since the work wants to * sync, it means we should react to the situation by telling * the task it can't continue usefully by stopping it. */ if (!wsi) { lwsl_thread("%s: %s: task %p (%s): No longer bound to any " "wsi to sync to\n", __func__, pool->tp->name, task, task->name); state_transition(task, LWS_TP_STATUS_STOPPING); goto done; } /* * So tries times this is the maximum time between SYNC asking * for a callback on writable and actually getting it we are * willing to sit still for. * * If it is exceeded, we will stop the task. */ abstime.tv_sec = time(NULL) + 2; abstime.tv_nsec = 0; task->wanted_writeable_cb = 1; lws_memory_barrier(); /* * This will cause lws_threadpool_tsi_context() to get called * from each tsi service context, where we can safely ask for * a callback on writeable on the wsi we are associated with. */ lws_cancel_service(lws_get_context(wsi)); /* * so the danger here is that we asked for a writable callback * on the wsi, but for whatever reason, we are never going to * get one. To avoid deadlocking forever, we allow a set time * for the sync to happen naturally, otherwise the cond wait * times out and we stop the task. */ if (pthread_cond_timedwait(&task->wake_idle, &pool->lock, &abstime) == ETIMEDOUT) { task->late_sync_retries++; if (!tries) { lwsl_err("%s: %s: task %p (%s): SYNC timed out " "(associated wsi %p)\n", __func__, pool->tp->name, task, task->name, task->args.wsi); state_transition(task, LWS_TP_STATUS_STOPPING); goto done; } continue; } else break; } if (task->status == LWS_TP_STATUS_SYNCING) state_transition(task, temp); lwsl_debug("%s: %p: LWS_TP_RETURN_SYNC out\n", __func__, task); done: pthread_mutex_unlock(&pool->lock); /* ----------------- - pool unlock */ return 0; } static void * lws_threadpool_worker(void *d) { struct lws_threadpool_task **c, **c2, *task; struct lws_pool *pool = d; struct lws_threadpool *tp = pool->tp; char buf[160]; while (!tp->destroying) { /* we have no running task... wait and get one from the queue */ pthread_mutex_lock(&tp->lock); /* =================== tp lock */ /* * if there's no task already waiting in the queue, wait for * the wake_idle condition to signal us that might have changed */ while (!tp->task_queue_head && !tp->destroying) pthread_cond_wait(&tp->wake_idle, &tp->lock); if (tp->destroying) { pthread_mutex_unlock(&tp->lock); /* ------ tp unlock */ continue; } c = &tp->task_queue_head; c2 = NULL; task = NULL; pool->task = NULL; /* look at the queue tail */ while (*c) { c2 = c; c = &(*c)->task_queue_next; } /* is there a task at the queue tail? */ if (c2 && *c2) { pool->task = task = *c2; task->acquired = pool->acquired = lws_now_usecs(); /* remove it from the queue */ *c2 = task->task_queue_next; task->task_queue_next = NULL; tp->queue_depth--; /* mark it as running */ state_transition(task, LWS_TP_STATUS_RUNNING); } /* someone else got it first... wait and try again */ if (!task) { pthread_mutex_unlock(&tp->lock); /* ------ tp unlock */ continue; } task->wanted_writeable_cb = 0; /* we have acquired a new task */ __lws_threadpool_task_dump(task, buf, sizeof(buf)); lwsl_thread("%s: %s: worker %d ACQUIRING: %s\n", __func__, tp->name, pool->worker_index, buf); tp->running_tasks++; pthread_mutex_unlock(&tp->lock); /* --------------- tp unlock */ /* * 1) The task can return with LWS_TP_RETURN_CHECKING_IN to * "resurface" periodically, and get called again with * cont = 1 immediately to indicate it is picking up where it * left off if the task is not being "stopped". * * This allows long tasks to respond to requests to stop in * a clean and opaque way. * * 2) The task can return with LWS_TP_RETURN_SYNC to register * a "callback on writable" request on the service thread and * block until it hears back from the WRITABLE handler. * * This allows the work on the thread to be synchronized to the * previous work being dispatched cleanly. * * 3) The task can return with LWS_TP_RETURN_FINISHED to * indicate its work is completed nicely. * * 4) The task can return with LWS_TP_RETURN_STOPPED to indicate * it stopped and cleaned up after incomplete work. */ do { lws_usec_t then; int n; if (tp->destroying || !task->args.wsi) { lwsl_info("%s: stopping on wsi gone\n", __func__); state_transition(task, LWS_TP_STATUS_STOPPING); } then = lws_now_usecs(); n = task->args.task(task->args.user, task->status); lwsl_debug(" %d, status %d\n", n, task->status); us_accrue(&task->acc_running, then); if (n & LWS_TP_RETURN_FLAG_OUTLIVE) task->outlive = 1; switch (n & 7) { case LWS_TP_RETURN_CHECKING_IN: /* if not destroying the tp, continue */ break; case LWS_TP_RETURN_SYNC: if (!task->args.wsi) { lwsl_debug("%s: task that wants to " "outlive lost wsi asked " "to sync: bypassed\n", __func__); break; } /* block until writable acknowledges */ then = lws_now_usecs(); lws_threadpool_worker_sync(pool, task); us_accrue(&task->acc_syncing, then); break; case LWS_TP_RETURN_FINISHED: state_transition(task, LWS_TP_STATUS_FINISHED); break; case LWS_TP_RETURN_STOPPED: state_transition(task, LWS_TP_STATUS_STOPPED); break; } } while (task->status == LWS_TP_STATUS_RUNNING); pthread_mutex_lock(&tp->lock); /* =================== tp lock */ tp->running_tasks--; if (pool->task->status == LWS_TP_STATUS_STOPPING) state_transition(task, LWS_TP_STATUS_STOPPED); /* move the task to the done queue */ pool->task->task_queue_next = tp->task_done_head; tp->task_done_head = task; tp->done_queue_depth++; pool->task->done = lws_now_usecs(); if (!pool->task->args.wsi && (pool->task->status == LWS_TP_STATUS_STOPPED || pool->task->status == LWS_TP_STATUS_FINISHED)) { __lws_threadpool_task_dump(pool->task, buf, sizeof(buf)); lwsl_thread("%s: %s: worker %d REAPING: %s\n", __func__, tp->name, pool->worker_index, buf); /* * there is no longer any wsi attached, so nothing is * going to take care of reaping us. So we must take * care of it ourselves. */ __lws_threadpool_reap(pool->task); } else { __lws_threadpool_task_dump(pool->task, buf, sizeof(buf)); lwsl_thread("%s: %s: worker %d DONE: %s\n", __func__, tp->name, pool->worker_index, buf); /* signal the associated wsi to take a fresh look at * task status */ if (pool->task->args.wsi) { task->wanted_writeable_cb = 1; lws_cancel_service( lws_get_context(pool->task->args.wsi)); } } pool->task = NULL; pthread_mutex_unlock(&tp->lock); /* --------------- tp unlock */ } /* threadpool is being destroyed */ pthread_exit(NULL); return NULL; } struct lws_threadpool * lws_threadpool_create(struct lws_context *context, const struct lws_threadpool_create_args *args, const char *format, ...) { struct lws_threadpool *tp; va_list ap; int n; tp = lws_malloc(sizeof(*tp) + (sizeof(struct lws_pool) * args->threads), "threadpool alloc"); if (!tp) return NULL; memset(tp, 0, sizeof(*tp) + (sizeof(struct lws_pool) * args->threads)); tp->pool_list = (struct lws_pool *)(tp + 1); tp->max_queue_depth = args->max_queue_depth; va_start(ap, format); n = vsnprintf(tp->name, sizeof(tp->name) - 1, format, ap); va_end(ap); lws_context_lock(context, __func__); tp->context = context; tp->tp_list = context->tp_list_head; context->tp_list_head = tp; lws_context_unlock(context); pthread_mutex_init(&tp->lock, NULL); pthread_cond_init(&tp->wake_idle, NULL); for (n = 0; n < args->threads; n++) { #if defined(LWS_HAS_PTHREAD_SETNAME_NP) char name[16]; #endif tp->pool_list[n].tp = tp; tp->pool_list[n].worker_index = n; pthread_mutex_init(&tp->pool_list[n].lock, NULL); if (pthread_create(&tp->pool_list[n].thread, NULL, lws_threadpool_worker, &tp->pool_list[n])) { lwsl_err("thread creation failed\n"); } else { #if defined(LWS_HAS_PTHREAD_SETNAME_NP) lws_snprintf(name, sizeof(name), "%s-%d", tp->name, n); pthread_setname_np(tp->pool_list[n].thread, name); #endif tp->threads_in_pool++; } } return tp; } void lws_threadpool_finish(struct lws_threadpool *tp) { struct lws_threadpool_task **c, *task; pthread_mutex_lock(&tp->lock); /* ======================== tpool lock */ /* nothing new can start, running jobs will abort as STOPPED and the * pool threads will exit ASAP (they are joined in destroy) */ tp->destroying = 1; /* stop everyone in the pending queue and move to the done queue */ c = &tp->task_queue_head; while (*c) { task = *c; *c = task->task_queue_next; task->task_queue_next = tp->task_done_head; tp->task_done_head = task; state_transition(task, LWS_TP_STATUS_STOPPED); tp->queue_depth--; tp->done_queue_depth++; task->done = lws_now_usecs(); c = &task->task_queue_next; } pthread_mutex_unlock(&tp->lock); /* -------------------- tpool unlock */ pthread_cond_broadcast(&tp->wake_idle); } void lws_threadpool_destroy(struct lws_threadpool *tp) { struct lws_threadpool_task *task, *next; struct lws_threadpool **ptp; void *retval; int n; /* remove us from the context list of threadpools */ lws_context_lock(tp->context, __func__); ptp = &tp->context->tp_list_head; while (*ptp) { if (*ptp == tp) { *ptp = tp->tp_list; break; } ptp = &(*ptp)->tp_list; } lws_context_unlock(tp->context); pthread_mutex_lock(&tp->lock); /* ======================== tpool lock */ tp->destroying = 1; pthread_cond_broadcast(&tp->wake_idle); pthread_mutex_unlock(&tp->lock); /* -------------------- tpool unlock */ lws_threadpool_dump(tp); for (n = 0; n < tp->threads_in_pool; n++) { task = tp->pool_list[n].task; /* he could be sitting waiting for SYNC */ if (task != NULL) pthread_cond_broadcast(&task->wake_idle); pthread_join(tp->pool_list[n].thread, &retval); pthread_mutex_destroy(&tp->pool_list[n].lock); } lwsl_info("%s: all threadpools exited\n", __func__); task = tp->task_done_head; while (task) { next = task->task_queue_next; lws_threadpool_task_cleanup_destroy(task); tp->done_queue_depth--; task = next; } pthread_mutex_destroy(&tp->lock); lws_free(tp); } /* * we want to stop and destroy the task and related priv. The wsi may no * longer exist. */ int lws_threadpool_dequeue(struct lws *wsi) { struct lws_threadpool *tp; struct lws_threadpool_task **c, *task; int n; task = wsi->tp_task; if (!task) return 0; tp = task->tp; pthread_mutex_lock(&tp->lock); /* ======================== tpool lock */ if (task->outlive && !tp->destroying) { /* disconnect from wsi, and wsi from task */ wsi->tp_task = NULL; task->args.wsi = NULL; goto bail; } c = &tp->task_queue_head; /* is he queued waiting for a chance to run? Mark him as stopped and * move him on to the done queue */ while (*c) { if ((*c) == task) { *c = task->task_queue_next; task->task_queue_next = tp->task_done_head; tp->task_done_head = task; state_transition(task, LWS_TP_STATUS_STOPPED); tp->queue_depth--; tp->done_queue_depth++; task->done = lws_now_usecs(); lwsl_debug("%s: tp %p: removed queued task wsi %p\n", __func__, tp, task->args.wsi); break; } c = &(*c)->task_queue_next; } /* is he on the done queue? */ c = &tp->task_done_head; while (*c) { if ((*c) == task) { *c = task->task_queue_next; task->task_queue_next = NULL; lws_threadpool_task_cleanup_destroy(task); tp->done_queue_depth--; goto bail; } c = &(*c)->task_queue_next; } /* he's not in the queue... is he already running on a thread? */ for (n = 0; n < tp->threads_in_pool; n++) { if (!tp->pool_list[n].task || tp->pool_list[n].task != task) continue; /* * ensure we don't collide with tests or changes in the * worker thread */ pthread_mutex_lock(&tp->pool_list[n].lock); /* * mark him as having been requested to stop... * the caller will hear about it in his service thread * context as a request to close */ state_transition(task, LWS_TP_STATUS_STOPPING); /* disconnect from wsi, and wsi from task */ task->args.wsi->tp_task = NULL; task->args.wsi = NULL; pthread_mutex_unlock(&tp->pool_list[n].lock); lwsl_debug("%s: tp %p: request stop running task " "for wsi %p\n", __func__, tp, task->args.wsi); break; } if (n == tp->threads_in_pool) { /* can't find it */ lwsl_notice("%s: tp %p: no task for wsi %p, decoupling\n", __func__, tp, task->args.wsi); task->args.wsi->tp_task = NULL; task->args.wsi = NULL; } bail: pthread_mutex_unlock(&tp->lock); /* -------------------- tpool unlock */ return 0; } struct lws_threadpool_task * lws_threadpool_enqueue(struct lws_threadpool *tp, const struct lws_threadpool_task_args *args, const char *format, ...) { struct lws_threadpool_task *task = NULL; va_list ap; if (tp->destroying) return NULL; pthread_mutex_lock(&tp->lock); /* ======================== tpool lock */ /* * if there's room on the queue, the job always goes on the queue * first, then any free thread may pick it up after the wake_idle */ if (tp->queue_depth == tp->max_queue_depth) { lwsl_notice("%s: queue reached limit %d\n", __func__, tp->max_queue_depth); goto bail; } /* * create the task object */ task = lws_malloc(sizeof(*task), __func__); if (!task) goto bail; memset(task, 0, sizeof(*task)); pthread_cond_init(&task->wake_idle, NULL); task->args = *args; task->tp = tp; task->created = lws_now_usecs(); va_start(ap, format); vsnprintf(task->name, sizeof(task->name) - 1, format, ap); va_end(ap); /* * add him on the tp task queue */ task->task_queue_next = tp->task_queue_head; state_transition(task, LWS_TP_STATUS_QUEUED); tp->task_queue_head = task; tp->queue_depth++; /* * mark the wsi itself as depending on this tp (so wsi close for * whatever reason can clean up) */ args->wsi->tp_task = task; lwsl_thread("%s: tp %s: enqueued task %p (%s) for wsi %p, depth %d\n", __func__, tp->name, task, task->name, args->wsi, tp->queue_depth); /* alert any idle thread there's something new on the task list */ lws_memory_barrier(); pthread_cond_signal(&tp->wake_idle); bail: pthread_mutex_unlock(&tp->lock); /* -------------------- tpool unlock */ return task; } /* this should be called from the service thread */ enum lws_threadpool_task_status lws_threadpool_task_status_wsi(struct lws *wsi, struct lws_threadpool_task **task, void **user) { enum lws_threadpool_task_status status; struct lws_threadpool *tp; *task = wsi->tp_task; if (!*task) return -1; tp = (*task)->tp; *user = (*task)->args.user; status = (*task)->status; if (status == LWS_TP_STATUS_FINISHED || status == LWS_TP_STATUS_STOPPED) { char buf[160]; pthread_mutex_lock(&tp->lock); /* ================ tpool lock */ __lws_threadpool_task_dump(*task, buf, sizeof(buf)); lwsl_thread("%s: %s: service thread REAPING: %s\n", __func__, tp->name, buf); __lws_threadpool_reap(*task); lws_memory_barrier(); pthread_mutex_unlock(&tp->lock); /* ------------ tpool unlock */ } return status; } void lws_threadpool_task_sync(struct lws_threadpool_task *task, int stop) { lwsl_debug("%s\n", __func__); if (stop) state_transition(task, LWS_TP_STATUS_STOPPING); pthread_cond_signal(&task->wake_idle); } libwebsockets-3.2.1/lib/plat/000077500000000000000000000000001357643561300161005ustar00rootroot00000000000000libwebsockets-3.2.1/lib/plat/esp32/000077500000000000000000000000001357643561300170345ustar00rootroot00000000000000libwebsockets-3.2.1/lib/plat/esp32/esp32-fds.c000066400000000000000000000031661357643561300207140ustar00rootroot00000000000000/* * libwebsockets - lib/plat/lws-plat-esp32.c * * Copyright (C) 2010-2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" void lws_plat_insert_socket_into_fds(struct lws_context *context, struct lws *wsi) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; pt->fds[pt->fds_count++].revents = 0; } void lws_plat_delete_socket_from_fds(struct lws_context *context, struct lws *wsi, int m) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; pt->fds_count--; } int lws_plat_change_pollfd(struct lws_context *context, struct lws *wsi, struct lws_pollfd *pfd) { return 0; } int insert_wsi(const struct lws_context *context, struct lws *wsi) { assert(context->lws_lookup[wsi->desc.sockfd - lws_plat_socket_offset()] == 0); context->lws_lookup[wsi->desc.sockfd - \ lws_plat_socket_offset()] = wsi; return 0; }libwebsockets-3.2.1/lib/plat/esp32/esp32-file.c000066400000000000000000000105711357643561300210550ustar00rootroot00000000000000/* * libwebsockets - lib/plat/lws-plat-esp32.c * * Copyright (C) 2010-2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" int lws_plat_apply_FD_CLOEXEC(int n) { return 0; } LWS_VISIBLE lws_fop_fd_t IRAM_ATTR _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, const char *vpath, lws_fop_flags_t *flags) { struct stat stat_buf; lws_fop_fd_t fop_fd; int ret = open(filename, *flags, 0664); if (ret < 0) return NULL; if (fstat(ret, &stat_buf) < 0) goto bail; fop_fd = lws_malloc(sizeof(*fop_fd), "fops open"); if (!fop_fd) goto bail; fop_fd->fops = fops; fop_fd->fd = ret; fop_fd->flags = *flags; fop_fd->filesystem_priv = NULL; /* we don't use it */ fop_fd->pos = 0; fop_fd->len = stat_buf.st_size; return fop_fd; bail: close(ret); return NULL; } LWS_VISIBLE int IRAM_ATTR _lws_plat_file_close(lws_fop_fd_t *fops_fd) { int fd = (*fops_fd)->fd; lws_free(*fops_fd); *fops_fd = NULL; return close(fd); } LWS_VISIBLE lws_fileofs_t IRAM_ATTR _lws_plat_file_seek_cur(lws_fop_fd_t fops_fd, lws_fileofs_t offset) { return lseek(fops_fd->fd, offset, SEEK_CUR); } LWS_VISIBLE int IRAM_ATTR _lws_plat_file_read(lws_fop_fd_t fops_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { long n; n = read(fops_fd->fd, buf, len); if (n == -1) { *amount = 0; return -1; } fops_fd->pos += n; *amount = n; return 0; } LWS_VISIBLE int IRAM_ATTR _lws_plat_file_write(lws_fop_fd_t fops_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { long n; n = write(fops_fd->fd, buf, len); if (n == -1) { *amount = 0; return -1; } fops_fd->pos += n; *amount = n; return 0; } #if defined(LWS_AMAZON_RTOS) int lws_find_string_in_file(const char *filename, const char *string, int stringlen) { return 0; } #else int lws_find_string_in_file(const char *filename, const char *string, int stringlen) { nvs_handle nvh; size_t s; int n; char buf[64], result[64]; const char *p = strchr(string, ':'), *q; if (!p) return 0; q = string; n = 0; while (n < sizeof(buf) - 1 && q != p) buf[n++] = *q++; buf[n] = '\0'; ESP_ERROR_CHECK(nvs_open(filename, NVS_READWRITE, &nvh)); s = sizeof(result) - 1; n = nvs_get_str(nvh, buf, result, &s); nvs_close(nvh); if (n != ESP_OK) return 0; return !strcmp(p + 1, result); } #endif #if !defined(LWS_AMAZON_RTOS) LWS_VISIBLE int lws_plat_write_file(const char *filename, void *buf, int len) { nvs_handle nvh; int n; if (nvs_open("lws-station", NVS_READWRITE, &nvh)) { lwsl_notice("%s: failed to open nvs\n", __func__); return -1; } n = nvs_set_blob(nvh, filename, buf, len); if (n >= 0) nvs_commit(nvh); nvs_close(nvh); lwsl_notice("%s: wrote %s (%d)\n", __func__, filename, n); return n; } /* we write vhostname.cert.pem and vhostname.key.pem, 0 return means OK */ LWS_VISIBLE int lws_plat_write_cert(struct lws_vhost *vhost, int is_key, int fd, void *buf, int len) { const char *name = vhost->tls.alloc_cert_path; if (is_key) name = vhost->tls.key_path; return lws_plat_write_file(name, buf, len) < 0; } LWS_VISIBLE int lws_plat_read_file(const char *filename, void *buf, int len) { nvs_handle nvh; size_t s = 0; int n = 0; if (nvs_open("lws-station", NVS_READWRITE, &nvh)) { lwsl_notice("%s: failed to open nvs\n", __func__); return 1; } ESP_ERROR_CHECK(nvs_open("lws-station", NVS_READWRITE, &nvh)); if (nvs_get_blob(nvh, filename, NULL, &s) != ESP_OK) goto bail; if (s > (size_t)len) goto bail; n = nvs_get_blob(nvh, filename, buf, &s); nvs_close(nvh); lwsl_notice("%s: read %s (%d)\n", __func__, filename, (int)s); if (n) return -1; return (int)s; bail: nvs_close(nvh); return -1; } #endif /* LWS_AMAZON_RTOS */ libwebsockets-3.2.1/lib/plat/esp32/esp32-helpers.c000066400000000000000000001025761357643561300216070ustar00rootroot00000000000000/* * libwebsockets - lib/plat/lws-plat-esp32.c * * Copyright (C) 2010-2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "misc/romfs.h" #include #include #include #include #include "soc/ledc_reg.h" #include "driver/ledc.h" struct lws_esp32 lws_esp32 = { .model = CONFIG_LWS_MODEL_NAME, .serial = "unknown", }; /* * Group AP / Station State */ enum lws_gapss { LWS_GAPSS_INITIAL, /* just started up, init and move to * LWS_GAPSS_SCAN */ LWS_GAPSS_SCAN, /* * Unconnected, scanning: AP known in one of the * config slots -> configure it, start timeout + * LWS_GAPSS_STAT, if no AP already up in same * group with lower MAC, after a random period * start up our AP (LWS_GAPSS_AP) */ LWS_GAPSS_AP, /* * Trying to be the group AP... periodically do * a scan LWS_GAPSS_AP_SCAN, faster and then * slower */ LWS_GAPSS_AP_SCAN, /* * doing a scan while trying to be the group * AP... if we see a lower MAC being the AP for * the same group AP, abandon being an AP and * join that AP as a station */ LWS_GAPSS_STAT_GRP_AP, /* * We have decided to join another group member * who is being the AP, as its MAC is lower than * ours. This is a stable state, but we still * do periodic scans LWS_GAPSS_STAT_GRP_AP_SCAN * and will always prefer an AP configured in a * slot. */ LWS_GAPSS_STAT_GRP_AP_SCAN, /* * We have joined a group member who is doing * the AP job... we want to check every now and * then if a configured AP has appeared that we * should better use instead. Otherwise stay in * LWS_GAPSS_STAT_GRP_AP */ LWS_GAPSS_STAT, /* * trying to connect to another non-group AP. * If we don't get an IP within a timeout and * retries, blacklist it and go back */ LWS_GAPSS_STAT_HAPPY, }; static const char *gapss_str[] = { "LWS_GAPSS_INITIAL", "LWS_GAPSS_SCAN", "LWS_GAPSS_AP", "LWS_GAPSS_AP_SCAN", "LWS_GAPSS_STAT_GRP_AP", "LWS_GAPSS_STAT_GRP_AP_SCAN", "LWS_GAPSS_STAT", "LWS_GAPSS_STAT_HAPPY", }; static romfs_t lws_esp32_romfs; static TimerHandle_t leds_timer, scan_timer, debounce_timer, association_timer #if !defined(CONFIG_LWS_IS_FACTORY_APPLICATION) , mdns_timer #endif ; static enum lws_gapss gapss = LWS_GAPSS_INITIAL; #if !defined(CONFIG_LWS_IS_FACTORY_APPLICATION) static mdns_result_t *mdns_results_head; #endif #define GPIO_SW 14 struct esp32_file { const struct inode *i; }; static void lws_gapss_to(enum lws_gapss to) { lwsl_notice("gapss from %s to %s\n", gapss_str[gapss], gapss_str[to]); gapss = to; } uint32_t lws_esp32_get_reboot_type(void) { uint32_t *p = (uint32_t *)LWS_MAGIC_REBOOT_TYPE_ADS, val = *p; nvs_handle nvh; size_t s = 0; int n = 0; ESP_ERROR_CHECK(nvs_open("lws-station", NVS_READWRITE, &nvh)); if (nvs_get_blob(nvh, "ssl-pub.pem", NULL, &s) == ESP_OK) n = 1; if (nvs_get_blob(nvh, "ssl-pri.pem", NULL, &s) == ESP_OK) n |= 2; nvs_close(nvh); /* * in the case the SSL certs are not there, don't require * the button to be down to access all features. */ if (n != 3) val = LWS_MAGIC_REBOOT_TYPE_FORCED_FACTORY_BUTTON; return val; } static void render_ip(char *dest, int len, uint8_t *ip) { snprintf(dest, len, "%u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]); } void lws_esp32_restart_guided(uint32_t type) { uint32_t *p_force_factory_magic = (uint32_t *)LWS_MAGIC_REBOOT_TYPE_ADS; lwsl_notice("%s: %x\n", __func__, type); *p_force_factory_magic = type; esp_restart(); } /* * esp-idf goes crazy with zero length str nvs. Use this as a workaround * to delete the key in that case. */ esp_err_t lws_nvs_set_str(nvs_handle handle, const char* key, const char* value) { if (*value) return nvs_set_str(handle, key, value); return nvs_erase_key(handle, key); } static wifi_scan_config_t scan_config = { .ssid = 0, .bssid = 0, .channel = 0, .show_hidden = true }; static char scan_ongoing = 0, scan_timer_exists = 0; static int try_slot = -1; static wifi_config_t config = { .ap = { .channel = 6, .authmode = WIFI_AUTH_OPEN, .max_connection = 1, } }, sta_config = { .sta = { .bssid_set = 0, } }; static void lws_esp32_scan_timer_cb(TimerHandle_t th) { int n; lwsl_notice("%s\n", __func__); scan_ongoing = 0; n = esp_wifi_scan_start(&scan_config, false); if (n != ESP_OK) lwsl_err("scan start failed %d\n", n); } static void lws_esp32_assoc_timer_cb(TimerHandle_t th) { int n; xTimerStop(association_timer, 0); if (gapss == LWS_GAPSS_STAT_HAPPY) { lwsl_debug("%s: saw we were happy\n", __func__); return; } lwsl_notice("%s: forcing rescan\n", __func__); lws_gapss_to(LWS_GAPSS_SCAN); scan_ongoing = 0; n = esp_wifi_scan_start(&scan_config, false); if (n != ESP_OK) lwsl_err("scan start failed %d\n", n); } #if !defined(CONFIG_LWS_IS_FACTORY_APPLICATION) void __attribute__(( weak )) lws_group_member_event(int e, void *p) { } void __attribute__(( weak )) lws_get_iframe_size(int *w, int *h) { *w = 320; *h = 160; } void lws_group_member_event_call(int e, void *p) { lws_group_member_event(e, p); } static int get_txt_param(const mdns_result_t *mr, const char *param, char *result, int len) { const char *p; *result = '\0'; p = strstr(mr->txt->key, param); if (!p) { *result = '\0'; return 1; } lws_strncpy(result, mr->txt->value, len); return 0; } static void lws_esp32_mdns_timer_cb(TimerHandle_t th) { uint64_t now = lws_now_usecs(); struct lws_group_member *p, **p1; const mdns_result_t *r = mdns_results_head; while (r) { char ch = 0, group[16]; get_txt_param(r, "group", group, sizeof(group)); if (strcmp(group, lws_esp32.group)) /* not our group */ { lwsl_notice("group %s vs %s %s\n", group, lws_esp32.group, r->txt->value); continue; } p = lws_esp32.first; while (p) { if (strcmp(r->hostname, p->host)) goto next; if (memcmp(&r->addr, &p->addr, sizeof(r->addr))) goto next; p->last_seen = now; break; next: p = p->next; } if (!p) { /* did not find */ char temp[8]; p = lws_malloc(sizeof(*p), "group"); if (!p) continue; lws_strncpy(p->host, r->hostname, sizeof(p->host)); get_txt_param(r, "model", p->model, sizeof(p->model)); get_txt_param(r, "role", p->role, sizeof(p->role)); get_txt_param(r, "mac", p->mac, sizeof(p->mac)); get_txt_param(r, "width", temp, sizeof(temp)); p->width = atoi(temp); get_txt_param(r, "height", temp, sizeof(temp)); p->height = atoi(temp); memcpy(&p->addr, &r->addr, sizeof(p->addr)); // memcpy(&p->addrv6, &r->addrv6, sizeof(p->addrv6)); p->last_seen = now; p->flags = 0; p->next = lws_esp32.first; lws_esp32.first = p; lws_esp32.extant_group_members++; lws_group_member_event_call(LWS_SYSTEM_GROUP_MEMBER_ADD, p); } else { if (memcmp(&p->addr, &r->addr, sizeof(p->addr))) { memcpy(&p->addr, &r->addr, sizeof(p->addr)); ch = 1; } /* if (memcmp(&p->addrv6, &r->addrv6, sizeof(p->addrv6))) { memcpy(&p->addrv6, &r->addrv6, sizeof(p->addrv6)); ch = 1; } */ if (ch) lws_group_member_event_call(LWS_SYSTEM_GROUP_MEMBER_CHANGE, p); } } mdns_query_results_free(mdns_results_head); /* garbage-collect group members not seen for too long */ p1 = &lws_esp32.first; while (*p1) { p = *p1; if (!(p->flags & LWS_GROUP_FLAG_SELF) && now - p->last_seen > 60000000) { lws_esp32.extant_group_members--; *p1 = p->next; lws_group_member_event_call(LWS_SYSTEM_GROUP_MEMBER_REMOVE, p); lws_free(p); continue; } p1 = &(*p1)->next; } mdns_query_txt(lws_esp32.group, "_lwsgrmem", "_tcp", 0, &mdns_results_head); xTimerStart(mdns_timer, 0); } #endif void __attribute__(( weak )) lws_esp32_button(int down) { } void IRAM_ATTR gpio_irq(void *arg) { gpio_set_intr_type(GPIO_SW, GPIO_INTR_DISABLE); xTimerStart(debounce_timer, 0); } static void lws_esp32_debounce_timer_cb(TimerHandle_t th) { if (lws_esp32.button_is_down) gpio_set_intr_type(GPIO_SW, GPIO_INTR_POSEDGE); else gpio_set_intr_type(GPIO_SW, GPIO_INTR_NEGEDGE); lws_esp32.button_is_down = gpio_get_level(GPIO_SW); lws_esp32_button(lws_esp32.button_is_down); } static int start_scan() { /* if no APs configured, no point... */ if (!lws_esp32.ssid[0][0] && !lws_esp32.ssid[1][0] && !lws_esp32.ssid[2][0] && !lws_esp32.ssid[3][0]) return 0; if (scan_timer_exists && !scan_ongoing) { // lwsl_notice("Starting scan timer...\n"); scan_ongoing = 1; xTimerStart(scan_timer, 0); } return 0; } static void end_scan() { wifi_ap_record_t ap_records[10]; uint16_t count_ap_records; int n, m; count_ap_records = LWS_ARRAY_SIZE(ap_records); if (esp_wifi_scan_get_ap_records(&count_ap_records, ap_records)) { lwsl_err("%s: failed\n", __func__); return; } if (!count_ap_records) goto passthru; if (gapss != LWS_GAPSS_SCAN) { lwsl_info("ignoring scan as gapss %s\n", gapss_str[gapss]); goto passthru; } /* no point if no APs set up */ if (!lws_esp32.ssid[0][0] && !lws_esp32.ssid[1][0] && !lws_esp32.ssid[2][0] && !lws_esp32.ssid[3][0]) goto passthru; lwsl_info("checking %d scan records\n", count_ap_records); for (n = 0; n < 4; n++) { if (!lws_esp32.ssid[(n + try_slot + 1) & 3][0]) continue; lwsl_debug("looking for %s\n", lws_esp32.ssid[(n + try_slot + 1) & 3]); /* this ssid appears in scan results? */ for (m = 0; m < count_ap_records; m++) { // lwsl_notice(" %s\n", ap_records[m].ssid); if (!strcmp((char *)ap_records[m].ssid, lws_esp32.ssid[(n + try_slot + 1) & 3])) goto hit; } continue; hit: m = (n + try_slot + 1) & 3; try_slot = m; lwsl_info("Attempting connection with slot %d: %s:\n", m, lws_esp32.ssid[m]); /* set the ssid we last tried to connect to */ lws_strncpy(lws_esp32.active_ssid, lws_esp32.ssid[m], sizeof(lws_esp32.active_ssid)); lws_strncpy((char *)sta_config.sta.ssid, lws_esp32.ssid[m], sizeof(sta_config.sta.ssid)); lws_strncpy((char *)sta_config.sta.password, lws_esp32.password[m], sizeof(sta_config.sta.password)); tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_STA, (const char *)&config.ap.ssid[7]); lws_gapss_to(LWS_GAPSS_STAT); xTimerStop(association_timer, 0); xTimerStart(association_timer, 0); esp_wifi_set_config(WIFI_IF_STA, &sta_config); esp_wifi_connect(); break; } if (n == 4) start_scan(); passthru: if (lws_esp32.scan_consumer) lws_esp32.scan_consumer(count_ap_records, ap_records, lws_esp32.scan_consumer_arg); } static void lws_set_genled(int n) { lws_esp32.genled_t = lws_now_usecs(); lws_esp32.genled = n; } int lws_esp32_leds_network_indication(void) { uint64_t us, r; int n, fadein = 100, speed = 1199, div = 1, base = 0; r = lws_now_usecs(); us = r - lws_esp32.genled_t; switch (lws_esp32.genled) { case LWSESP32_GENLED__INIT: lws_esp32.genled = LWSESP32_GENLED__LOST_NETWORK; /* fallthru */ case LWSESP32_GENLED__LOST_NETWORK: fadein = us / 10000; /* 100 steps in 1s */ if (fadein > 100) { fadein = 100; lws_esp32.genled = LWSESP32_GENLED__NO_NETWORK; } /* fallthru */ case LWSESP32_GENLED__NO_NETWORK: break; case LWSESP32_GENLED__CONN_AP: base = 4096; speed = 933; div = 2; break; case LWSESP32_GENLED__GOT_IP: fadein = us / 10000; /* 100 steps in 1s */ if (fadein > 100) { fadein = 100; lws_esp32.genled = LWSESP32_GENLED__OK; } fadein = 100 - fadein; /* we are fading out */ /* fallthru */ case LWSESP32_GENLED__OK: if (lws_esp32.genled == LWSESP32_GENLED__OK) return 0; base = 4096; speed = 766; div = 3; break; } n = base + (lws_esp32_sine_interp(r / speed) / div); return (n * fadein) / 100; } esp_err_t lws_esp32_event_passthru(void *ctx, system_event_t *event) { #if !defined(CONFIG_LWS_IS_FACTORY_APPLICATION) struct lws_group_member *mem; int n; #endif nvs_handle nvh; uint32_t use; switch((int)event->event_id) { case SYSTEM_EVENT_STA_START: //esp_wifi_connect(); // break; /* fallthru */ case SYSTEM_EVENT_STA_DISCONNECTED: lwsl_notice("SYSTEM_EVENT_STA_DISCONNECTED\n"); if (sntp_enabled()) sntp_stop(); lws_esp32.conn_ap = 0; lws_esp32.inet = 0; lws_esp32.sta_ip[0] = '\0'; lws_esp32.sta_mask[0] = '\0'; lws_esp32.sta_gw[0] = '\0'; lws_gapss_to(LWS_GAPSS_SCAN); mdns_free(); lws_set_genled(LWSESP32_GENLED__LOST_NETWORK); start_scan(); esp_wifi_connect(); break; case SYSTEM_EVENT_STA_CONNECTED: lws_esp32.conn_ap = 1; lws_set_genled(LWSESP32_GENLED__CONN_AP); break; case SYSTEM_EVENT_STA_GOT_IP: lwsl_notice("SYSTEM_EVENT_STA_GOT_IP\n"); lws_esp32.inet = 1; lws_set_genled(LWSESP32_GENLED__GOT_IP); render_ip(lws_esp32.sta_ip, sizeof(lws_esp32.sta_ip) - 1, (uint8_t *)&event->event_info.got_ip.ip_info.ip); render_ip(lws_esp32.sta_mask, sizeof(lws_esp32.sta_mask) - 1, (uint8_t *)&event->event_info.got_ip.ip_info.netmask); render_ip(lws_esp32.sta_gw, sizeof(lws_esp32.sta_gw) - 1, (uint8_t *)&event->event_info.got_ip.ip_info.gw); if (!nvs_open("lws-station", NVS_READWRITE, &nvh)) { char slot[8]; lws_snprintf(slot, sizeof(slot) - 1, "%duse", try_slot); use = 0; nvs_get_u32(nvh, slot, &use); nvs_set_u32(nvh, slot, use + 1); nvs_commit(nvh); nvs_close(nvh); } lws_gapss_to(LWS_GAPSS_STAT_HAPPY); #if !defined(CONFIG_LWS_IS_FACTORY_APPLICATION) n = mdns_init(); if (!n) { static mdns_txt_item_t txta[6]; static char wh[2][6]; int w, h; mdns_hostname_set(lws_esp32.hostname); mdns_instance_name_set(lws_esp32.group); lws_get_iframe_size(&w, &h); txta[0].key = "model"; txta[1].key = "group"; txta[2].key = "role"; txta[3].key = "mac"; txta[4].key = "width"; txta[5].key = "height"; txta[0].value = lws_esp32.model; txta[1].value = lws_esp32.group; txta[2].value = lws_esp32.role; txta[3].value = lws_esp32.mac; txta[4].value = wh[0]; txta[5].value = wh[1]; lws_snprintf(wh[0], 6, "%d", w); lws_snprintf(wh[1], 6, "%d", h); mdns_service_add(lws_esp32.group, "_lwsgrmem", "_tcp", 443, txta, LWS_ARRAY_SIZE(txta)); mem = lws_esp32.first; while (mem) { if (mem->flags & 1) break; mem = mem->next; } if (!mem) { struct lws_group_member *mem = lws_malloc(sizeof(*mem), "group"); if (mem) { mem->last_seen = ~(uint64_t)0; strcpy(mem->model, lws_esp32.model); strcpy(mem->role, lws_esp32.role); strcpy(mem->host, lws_esp32.hostname); strcpy(mem->mac, lws_esp32.mac); mem->flags = LWS_GROUP_FLAG_SELF; lws_get_iframe_size(&mem->width, &mem->height); memcpy(&mem->addr, &event->event_info.got_ip.ip_info.ip, sizeof(mem->addr)); memcpy(&mem->addrv6, &event->event_info.got_ip6.ip6_info.ip, sizeof(mem->addrv6)); mem->next = lws_esp32.first; lws_esp32.first = mem; lws_esp32.extant_group_members++; lws_group_member_event_call( LWS_SYSTEM_GROUP_MEMBER_ADD, mem); } } else { /* update our IP */ memcpy(&mem->addr, &event->event_info.got_ip.ip_info.ip, sizeof(mem->addr)); memcpy(&mem->addrv6, &event->event_info.got_ip6.ip6_info.ip, sizeof(mem->addrv6)); lws_group_member_event_call( LWS_SYSTEM_GROUP_MEMBER_CHANGE, mem); } } else lwsl_err("unable to init mdns on STA: %d\n", n); mdns_query_txt(lws_esp32.group, "_lwsgrmem", "_tcp", 0, &mdns_results_head); xTimerStart(mdns_timer, 0); #endif lwsl_notice(" --- Got IP %s\n", lws_esp32.sta_ip); if (!sntp_enabled()) { sntp_setoperatingmode(SNTP_OPMODE_POLL); sntp_setservername(0, "pool.ntp.org"); sntp_init(); } break; case SYSTEM_EVENT_SCAN_DONE: lwsl_notice("SYSTEM_EVENT_SCAN_DONE\n"); end_scan(); break; default: break; } return ESP_OK; } static lws_fop_fd_t IRAM_ATTR esp32_lws_fops_open(const struct lws_plat_file_ops *fops, const char *filename, const char *vfs_path, lws_fop_flags_t *flags) { struct esp32_file *f = malloc(sizeof(*f)); lws_fop_fd_t fop_fd; size_t len, csum; lwsl_notice("%s: %s\n", __func__, filename); if (!f) return NULL; f->i = romfs_get_info(lws_esp32_romfs, filename, &len, &csum); if (!f->i) goto bail; fop_fd = malloc(sizeof(*fop_fd)); if (!fop_fd) goto bail; fop_fd->fops = fops; fop_fd->filesystem_priv = f; fop_fd->mod_time = csum; *flags |= LWS_FOP_FLAG_MOD_TIME_VALID; fop_fd->flags = *flags; fop_fd->len = len; fop_fd->pos = 0; return fop_fd; bail: free(f); return NULL; } static int IRAM_ATTR esp32_lws_fops_close(lws_fop_fd_t *fop_fd) { free((*fop_fd)->filesystem_priv); free(*fop_fd); *fop_fd = NULL; return 0; } static lws_fileofs_t IRAM_ATTR esp32_lws_fops_seek_cur(lws_fop_fd_t fop_fd, lws_fileofs_t offset_from_cur_pos) { fop_fd->pos += offset_from_cur_pos; if (fop_fd->pos > fop_fd->len) fop_fd->pos = fop_fd->len; return 0; } static int IRAM_ATTR esp32_lws_fops_read(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { struct esp32_file *f = fop_fd->filesystem_priv; #if 0 if ((long)buf & 3) { lwsl_err("misaligned buf\n"); return -1; } #endif if (fop_fd->pos >= fop_fd->len) return 0; if (len > fop_fd->len - fop_fd->pos) len = fop_fd->len - fop_fd->pos; spi_flash_read((uint32_t)(char *)f->i + fop_fd->pos, buf, len); *amount = len; fop_fd->pos += len; return 0; } static const struct lws_plat_file_ops fops = { .next = &fops_zip, .LWS_FOP_OPEN = esp32_lws_fops_open, .LWS_FOP_CLOSE = esp32_lws_fops_close, .LWS_FOP_READ = esp32_lws_fops_read, .LWS_FOP_SEEK_CUR = esp32_lws_fops_seek_cur, }; int lws_esp32_wlan_nvs_get(int retry) { nvs_handle nvh; char lws_esp32_force_ap = 0, slot[12]; size_t s; uint8_t mac[6]; int n; esp_efuse_mac_get_default(mac); mac[5] |= 1; /* match the AP MAC */ snprintf(lws_esp32.serial, sizeof(lws_esp32.serial) - 1, "%02X%02X%02X", mac[3], mac[4], mac[5]); snprintf(lws_esp32.mac, sizeof(lws_esp32.mac) - 1, "%02X%02X%02X%02X%02X%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); ESP_ERROR_CHECK(nvs_open("lws-station", NVS_READWRITE, &nvh)); config.sta.ssid[0] = '\0'; config.sta.password[0] = '\0'; for (n = 0; n < 4; n++) { lws_snprintf(slot, sizeof(slot) - 1, "%dssid", n); s = sizeof(lws_esp32.ssid[0]) - 1; lws_esp32.ssid[n][0] = '\0'; nvs_get_str(nvh, slot, lws_esp32.ssid[n], &s); lws_snprintf(slot, sizeof(slot) - 1, "%dpassword", n); s = sizeof(lws_esp32.password[0]) - 1; lws_esp32.password[n][0] = '\0'; nvs_get_str(nvh, slot, lws_esp32.password[n], &s); } s = sizeof(lws_esp32.serial) - 1; if (nvs_get_str(nvh, "serial", lws_esp32.serial, &s) != ESP_OK) lws_esp32_force_ap = 1; else snprintf((char *)config.ap.ssid, sizeof(config.ap.ssid) - 1, "config-%s-%s", lws_esp32.model, lws_esp32.serial); s = sizeof(lws_esp32.opts) - 1; if (nvs_get_str(nvh, "opts", lws_esp32.opts, &s) != ESP_OK) lws_esp32_force_ap = 1; lws_esp32.access_pw[0] = '\0'; nvs_get_str(nvh, "access_pw", lws_esp32.access_pw, &s); lws_esp32.group[0] = '\0'; s = sizeof(lws_esp32.group); nvs_get_str(nvh, "group", lws_esp32.group, &s); lws_esp32.role[0] = '\0'; s = sizeof(lws_esp32.role); nvs_get_str(nvh, "role", lws_esp32.role, &s); /* if group and role defined: group-role */ if (lws_esp32.group[0] && lws_esp32.role[0]) lws_snprintf(lws_esp32.hostname, sizeof(lws_esp32.hostname) - 1, "%s-%s", lws_esp32.group, lws_esp32.role); else /* otherwise model-serial */ lws_snprintf(lws_esp32.hostname, sizeof(lws_esp32.hostname) - 1, "%s-%s", lws_esp32.model, lws_esp32.serial); nvs_close(nvh); lws_gapss_to(LWS_GAPSS_SCAN); start_scan(); return lws_esp32_force_ap; } void lws_esp32_wlan_config(void) { ledc_timer_config_t ledc_timer = { .bit_num = LEDC_TIMER_13_BIT, .freq_hz = 5000, .speed_mode = LEDC_HIGH_SPEED_MODE, .timer_num = LEDC_TIMER_0 }; int n; lwsl_debug("%s\n", __func__); ledc_timer_config(&ledc_timer); lws_set_genled(LWSESP32_GENLED__INIT); /* user code needs to provide lws_esp32_leds_timer_cb */ leds_timer = xTimerCreate("lws_leds", pdMS_TO_TICKS(25), 1, NULL, (TimerCallbackFunction_t)lws_esp32_leds_timer_cb); scan_timer = xTimerCreate("lws_scan", pdMS_TO_TICKS(10000), 0, NULL, (TimerCallbackFunction_t)lws_esp32_scan_timer_cb); debounce_timer = xTimerCreate("lws_db", pdMS_TO_TICKS(100), 0, NULL, (TimerCallbackFunction_t)lws_esp32_debounce_timer_cb); association_timer = xTimerCreate("lws_assoc", pdMS_TO_TICKS(10000), 0, NULL, (TimerCallbackFunction_t)lws_esp32_assoc_timer_cb); #if !defined(CONFIG_LWS_IS_FACTORY_APPLICATION) mdns_timer = xTimerCreate("lws_mdns", pdMS_TO_TICKS(5000), 0, NULL, (TimerCallbackFunction_t)lws_esp32_mdns_timer_cb); #endif scan_timer_exists = 1; xTimerStart(leds_timer, 0); *(volatile uint32_t *)PERIPHS_IO_MUX_MTMS_U = FUNC_MTMS_GPIO14; gpio_output_set(0, 0, 0, (1 << GPIO_SW)); n = gpio_install_isr_service(0); if (!n) { gpio_config_t c; c.intr_type = GPIO_INTR_NEGEDGE; c.mode = GPIO_MODE_INPUT; c.pin_bit_mask = 1 << GPIO_SW; c.pull_down_en = 0; c.pull_up_en = 0; gpio_config(&c); if (gpio_isr_handler_add(GPIO_SW, gpio_irq, NULL)) lwsl_notice("isr handler add for 14 failed\n"); } else lwsl_notice("failed to install gpio isr service: %d\n", n); lws_esp32_wlan_nvs_get(0); tcpip_adapter_init(); } void lws_esp32_wlan_start_ap(void) { wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK( esp_wifi_init(&cfg)); ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM)); ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_APSTA) ); ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_AP, &config) ); ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &sta_config)); ESP_ERROR_CHECK( esp_wifi_start()); esp_wifi_scan_start(&scan_config, false); if (sta_config.sta.ssid[0]) { tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_STA, (const char *)&config.ap.ssid[7]); // esp_wifi_set_auto_connect(1); ESP_ERROR_CHECK( esp_wifi_connect()); ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &sta_config)); ESP_ERROR_CHECK( esp_wifi_connect()); } } void lws_esp32_wlan_start_station(void) { wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK( esp_wifi_init(&cfg)); ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM)); ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA)); ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &sta_config)); ESP_ERROR_CHECK( esp_wifi_start()); tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_STA, (const char *)&config.ap.ssid[7]); //esp_wifi_set_auto_connect(1); //ESP_ERROR_CHECK( esp_wifi_connect()); lws_esp32_scan_timer_cb(NULL); } const esp_partition_t * lws_esp_ota_get_boot_partition(void) { const esp_partition_t *part = esp_ota_get_boot_partition(), *factory_part, *ota; esp_image_header_t eih, ota_eih; uint32_t *p_force_factory_magic = (uint32_t *)LWS_MAGIC_REBOOT_TYPE_ADS; /* confirm what we are told is the boot part is sane */ spi_flash_read(part->address , &eih, sizeof(eih)); factory_part = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, NULL); ota = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_OTA_0, NULL); spi_flash_read(ota->address , &ota_eih, sizeof(ota_eih)); if (eih.spi_mode == 0xff || *p_force_factory_magic == LWS_MAGIC_REBOOT_TYPE_FORCED_FACTORY || *p_force_factory_magic == LWS_MAGIC_REBOOT_TYPE_FORCED_FACTORY_BUTTON ) { /* * we believed we were going to boot OTA, but we fell * back to FACTORY in the bootloader when we saw it * had been erased. esp_ota_get_boot_partition() still * says the OTA partition then even if we are in the * factory partition right now. */ part = factory_part; } #ifdef CONFIG_LWS_IS_FACTORY_APPLICATION else if (ota_eih.spi_mode != 0xff && part->address != factory_part->address) { uint8_t buf[4096]; uint32_t n; /* * we are a FACTORY image running in an OTA slot... * it means we were just written and need to copy * ourselves into the FACTORY slot. */ lwsl_notice("Copying FACTORY update into place " "0x%x len 0x%x\n", factory_part->address, factory_part->size); esp_task_wdt_reset(); if (spi_flash_erase_range(factory_part->address, factory_part->size)) { lwsl_err("spi: Failed to erase\n"); goto retry; } for (n = 0; n < factory_part->size; n += sizeof(buf)) { esp_task_wdt_reset(); spi_flash_read(part->address + n , buf, sizeof(buf)); if (spi_flash_write(factory_part->address + n, buf, sizeof(buf))) { lwsl_err("spi: Failed to write\n"); goto retry; } } /* * We send a message to the bootloader to erase the OTA header, we will come back up in * factory where the user can reload the OTA image */ lwsl_notice(" FACTORY copy successful, rebooting\n"); lws_esp32_restart_guided(LWS_MAGIC_REBOOT_TYPE_REQ_FACTORY_ERASE_OTA); retry: esp_restart(); } #endif return part; } void lws_esp32_set_creation_defaults(struct lws_context_creation_info *info) { const esp_partition_t *part; memset(info, 0, sizeof(*info)); lws_set_log_level(63, lwsl_emit_syslog); part = lws_esp_ota_get_boot_partition(); (void)part; info->vhost_name = "default"; info->port = 443; info->fd_limit_per_thread = 16; info->max_http_header_pool = 5; info->max_http_header_data = 1024; info->pt_serv_buf_size = 4096; info->keepalive_timeout = 30; info->timeout_secs = 30; info->simultaneous_ssl_restriction = 2; info->options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; } int lws_esp32_get_image_info(const esp_partition_t *part, struct lws_esp32_image *i, char *json, int json_len) { esp_image_segment_header_t eis; esp_image_header_t eih; uint32_t hdr; spi_flash_read(part->address , &eih, sizeof(eih)); hdr = part->address + sizeof(eih); if (eih.magic != ESP_IMAGE_HEADER_MAGIC) { lwsl_notice("%s: bad image header magic\n", __func__); return 1; } eis.data_len = 0; while (eih.segment_count-- && eis.data_len != 0xffffffff) { spi_flash_read(hdr, &eis, sizeof(eis)); hdr += sizeof(eis) + eis.data_len; } hdr += (~hdr & 15) + 1; if (eih.hash_appended) hdr += 0x20; // lwsl_notice("romfs estimated at 0x%x\n", hdr); i->romfs = hdr + 0x4; spi_flash_read(hdr, &i->romfs_len, sizeof(i->romfs_len)); i->json = i->romfs + i->romfs_len + 4; spi_flash_read(i->json - 4, &i->json_len, sizeof(i->json_len)); if (i->json_len < json_len - 1) json_len = i->json_len; spi_flash_read(i->json, json, json_len); json[json_len] = '\0'; return 0; } static int _rngf(void *context, unsigned char *buf, size_t len) { if ((size_t)lws_get_random(context, buf, len) == len) return 0; return -1; } int lws_esp32_selfsigned(struct lws_vhost *vhost) { mbedtls_x509write_cert crt; char subject[200]; mbedtls_pk_context mpk; int buf_size = 4096, n; uint8_t *buf = malloc(buf_size); /* malloc because given to user code */ mbedtls_mpi mpi; nvs_handle nvh; size_t s; lwsl_notice("%s: %s\n", __func__, vhost->name); if (!buf) return -1; if (nvs_open("lws-station", NVS_READWRITE, &nvh)) { lwsl_notice("%s: can't open nvs\n", __func__); free(buf); return 1; } n = 0; if (!nvs_get_blob(nvh, vhost->tls.alloc_cert_path, NULL, &s)) n |= 1; if (!nvs_get_blob(nvh, vhost->tls.key_path, NULL, &s)) n |= 2; nvs_close(nvh); if (n == 3) { lwsl_notice("%s: certs exist\n", __func__); free(buf); return 0; /* certs already exist */ } lwsl_notice("%s: creating selfsigned initial certs\n", __func__); mbedtls_x509write_crt_init(&crt); mbedtls_pk_init(&mpk); if (mbedtls_pk_setup(&mpk, mbedtls_pk_info_from_type(MBEDTLS_PK_RSA))) { lwsl_notice("%s: pk_setup failed\n", __func__); goto fail; } lwsl_notice("%s: generating 2048-bit RSA keypair... " "this may take a minute or so...\n", __func__); n = mbedtls_rsa_gen_key(mbedtls_pk_rsa(mpk), _rngf, vhost->context, 2048, 65537); if (n) { lwsl_notice("%s: failed to generate keys\n", __func__); goto fail1; } lwsl_notice("%s: keys done\n", __func__); /* subject must be formatted like "C=TW,O=warmcat,CN=myserver" */ lws_snprintf(subject, sizeof(subject) - 1, "C=TW,ST=New Taipei City,L=Taipei,O=warmcat,CN=%s", lws_esp32.hostname); if (mbedtls_x509write_crt_set_subject_name(&crt, subject)) { lwsl_notice("set SN failed\n"); goto fail1; } mbedtls_x509write_crt_set_subject_key(&crt, &mpk); if (mbedtls_x509write_crt_set_issuer_name(&crt, subject)) { lwsl_notice("set IN failed\n"); goto fail1; } mbedtls_x509write_crt_set_issuer_key(&crt, &mpk); lws_get_random(vhost->context, &n, sizeof(n)); lws_snprintf(subject, sizeof(subject), "%d", n); mbedtls_mpi_init(&mpi); mbedtls_mpi_read_string(&mpi, 10, subject); mbedtls_x509write_crt_set_serial(&crt, &mpi); mbedtls_mpi_free(&mpi); mbedtls_x509write_crt_set_validity(&crt, "20171105235959", "20491231235959"); mbedtls_x509write_crt_set_key_usage(&crt, MBEDTLS_X509_KU_DIGITAL_SIGNATURE | MBEDTLS_X509_KU_KEY_ENCIPHERMENT); mbedtls_x509write_crt_set_md_alg(&crt, MBEDTLS_MD_SHA256); n = mbedtls_x509write_crt_pem(&crt, buf, buf_size, _rngf, vhost->context); if (n < 0) { lwsl_notice("%s: write crt der failed\n", __func__); goto fail1; } lws_plat_write_cert(vhost, 0, 0, buf, strlen((const char *)buf)); if (mbedtls_pk_write_key_pem(&mpk, buf, buf_size)) { lwsl_notice("write key pem failed\n"); goto fail1; } lws_plat_write_cert(vhost, 1, 0, buf, strlen((const char *)buf)); mbedtls_pk_free(&mpk); mbedtls_x509write_crt_free(&crt); lwsl_notice("%s: cert creation complete\n", __func__); return n; fail1: mbedtls_pk_free(&mpk); fail: mbedtls_x509write_crt_free(&crt); free(buf); nvs_close(nvh); return -1; } void lws_esp32_update_acme_info(void) { int n; n = lws_plat_read_file("acme-email", lws_esp32.le_email, sizeof(lws_esp32.le_email) - 1); if (n >= 0) lws_esp32.le_email[n] = '\0'; n = lws_plat_read_file("acme-cn", lws_esp32.le_dns, sizeof(lws_esp32.le_dns) - 1); if (n >= 0) lws_esp32.le_dns[n] = '\0'; } struct lws_context * lws_esp32_init(struct lws_context_creation_info *info, struct lws_vhost **pvh) { const esp_partition_t *part = lws_esp_ota_get_boot_partition(); struct lws_context *context; struct lws_esp32_image i; struct lws_vhost *vhost; struct lws wsi; char buf[512]; context = lws_create_context(info); if (context == NULL) { lwsl_err("Failed to create context\n"); return NULL; } lws_esp32_get_image_info(part, &i, buf, sizeof(buf) - 1); lws_esp32_romfs = (romfs_t)i.romfs; if (!romfs_mount_check(lws_esp32_romfs)) { lwsl_err("mount error on ROMFS at %p 0x%x\n", lws_esp32_romfs, i.romfs); return NULL; } lwsl_notice("ROMFS length %uKiB\n", i.romfs_len >> 10); puts(buf); /* set the lws vfs to use our romfs */ lws_set_fops(context, &fops); info->options |= LWS_SERVER_OPTION_CREATE_VHOST_SSL_CTX | LWS_SERVER_OPTION_IGNORE_MISSING_CERT; vhost = lws_create_vhost(context, info); if (!vhost) { lwsl_err("Failed to create vhost\n"); return NULL; } lws_esp32_update_acme_info(); lws_esp32_selfsigned(vhost); wsi.context = vhost->context; wsi.vhost = vhost; lws_tls_server_certs_load(vhost, &wsi, info->ssl_cert_filepath, info->ssl_private_key_filepath, NULL, 0, NULL, 0); lws_init_vhost_client_ssl(info, vhost); if (pvh) *pvh = vhost; if (lws_protocol_init(context)) return NULL; return context; } static const uint16_t sineq16[] = { 0x0000, 0x0191, 0x031e, 0x04a4, 0x061e, 0x0789, 0x08e2, 0x0a24, 0x0b4e, 0x0c5c, 0x0d4b, 0x0e1a, 0x0ec6, 0x0f4d, 0x0faf, 0x0fea, }; static uint16_t sine_lu(int n) { switch ((n >> 4) & 3) { case 1: return 4096 + sineq16[n & 15]; case 2: return 4096 + sineq16[15 - (n & 15)]; case 3: return 4096 - sineq16[n & 15]; default: return 4096 - sineq16[15 - (n & 15)]; } } /* useful for sine led fade patterns */ uint16_t lws_esp32_sine_interp(int n) { /* * 2: quadrant * 4: table entry in quadrant * 4: interp (LSB) * * total 10 bits / 1024 steps per cycle * * + 0: 0 * + 256: 4096 * + 512: 8192 * + 768: 4096 * +1023: 0 */ return (sine_lu(n >> 4) * (15 - (n & 15)) + sine_lu((n >> 4) + 1) * (n & 15)) / 15; } libwebsockets-3.2.1/lib/plat/esp32/esp32-init.c000066400000000000000000000056471357643561300211110ustar00rootroot00000000000000/* * libwebsockets - lib/plat/lws-plat-esp32.c * * Copyright (C) 2010-2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" int lws_plat_context_early_init(void) { return 0; } void lws_plat_context_early_destroy(struct lws_context *context) { #if defined(LWS_AMAZON_RTOS) mbedtls_ctr_drbg_free(&context->mcdc); mbedtls_entropy_free(&context->mec); #endif } void lws_plat_context_late_destroy(struct lws_context *context) { #ifdef LWS_WITH_PLUGINS if (context->plugin_list) lws_plat_plugins_destroy(context); #endif if (context->lws_lookup) lws_free(context->lws_lookup); } #if defined(LWS_WITH_HTTP2) /* * These are the default SETTINGS used on this platform. The user * can selectively modify them for a vhost during vhost creation. */ const struct http2_settings lws_h2_defaults_esp32 = { { 1, /* H2SET_HEADER_TABLE_SIZE */ 512, /* H2SET_ENABLE_PUSH */ 0, /* H2SET_MAX_CONCURRENT_STREAMS */ 8, /* H2SET_INITIAL_WINDOW_SIZE */ 65535, /* H2SET_MAX_FRAME_SIZE */ 16384, /* H2SET_MAX_HEADER_LIST_SIZE */ 512, /* H2SET_RESERVED7 */ 0, /* H2SET_ENABLE_CONNECT_PROTOCOL */ 1, }}; #endif int lws_plat_init(struct lws_context *context, const struct lws_context_creation_info *info) { #if defined(LWS_AMAZON_RTOS) int n; /* initialize platform random through mbedtls */ mbedtls_entropy_init(&context->mec); mbedtls_ctr_drbg_init(&context->mcdc); n = mbedtls_ctr_drbg_seed(&context->mcdc, mbedtls_entropy_func, &context->mec, NULL, 0); if (n) { lwsl_err("%s: mbedtls_ctr_drbg_seed() returned 0x%x\n", __func__, n); return 1; } #endif /* master context has the global fd lookup array */ context->lws_lookup = lws_zalloc(sizeof(struct lws *) * context->max_fds, "esp32 lws_lookup"); if (context->lws_lookup == NULL) { lwsl_err("OOM on lws_lookup array for %d connections\n", context->max_fds); return 1; } lwsl_notice(" mem: platform fd map: %5lu bytes\n", (unsigned long)(sizeof(struct lws *) * context->max_fds)); #ifdef LWS_WITH_PLUGINS if (info->plugin_dirs) lws_plat_plugins_init(context, info->plugin_dirs); #endif #if defined(LWS_WITH_HTTP2) /* override settings */ context->set = lws_h2_defaults_esp32; #endif return 0; } libwebsockets-3.2.1/lib/plat/esp32/esp32-misc.c000066400000000000000000000037101357643561300210660ustar00rootroot00000000000000/* * libwebsockets - lib/plat/lws-plat-esp32.c * * Copyright (C) 2010-2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" lws_usec_t lws_now_usecs(void) { struct timeval tv; gettimeofday(&tv, NULL); return ((unsigned long long)tv.tv_sec * 1000000LL) + tv.tv_usec; } LWS_VISIBLE int lws_get_random(struct lws_context *context, void *buf, int len) { #if defined(LWS_AMAZON_RTOS) int n; n = mbedtls_ctr_drbg_random(&context->mcdc, buf, len); if (!n) return len; /* failed */ lwsl_err("%s: mbedtls_ctr_drbg_random returned 0x%x\n", __func__, n); return 0; #else uint8_t *pb = buf; while (len) { uint32_t r = esp_random(); uint8_t *p = (uint8_t *)&r; int b = 4; if (len < b) b = len; len -= b; while (b--) *pb++ = p[b]; } return pb - (uint8_t *)buf; #endif } LWS_VISIBLE void lwsl_emit_syslog(int level, const char *line) { lwsl_emit_stderr(level, line); } int lws_plat_drop_app_privileges(struct lws_context *context, int actually_init) { return 0; } int lws_plat_recommended_rsa_bits(void) { /* * 2048-bit key generation takes up to a minute on ESP32, 4096 * is like 15 minutes + */ return 2048; } void esp32_uvtimer_cb(TimerHandle_t t) { struct timer_mapping *p = pvTimerGetTimerID(t); p->cb(p->t); } libwebsockets-3.2.1/lib/plat/esp32/esp32-pipe.c000066400000000000000000000017671357643561300211020ustar00rootroot00000000000000/* * libwebsockets - lib/plat/lws-plat-esp32.c * * Copyright (C) 2010-2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" int lws_plat_pipe_create(struct lws *wsi) { return 1; } int lws_plat_pipe_signal(struct lws *wsi) { return 1; } void lws_plat_pipe_close(struct lws *wsi) { } libwebsockets-3.2.1/lib/plat/esp32/esp32-service.c000066400000000000000000000121301357643561300215670ustar00rootroot00000000000000/* * libwebsockets - lib/plat/lws-plat-esp32.c * * Copyright (C) 2010-2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" int lws_plat_service(struct lws_context *context, int timeout_ms) { int n = _lws_plat_service_tsi(context, timeout_ms, 0); #if !defined(LWS_AMAZON_RTOS) esp_task_wdt_reset(); #endif return n; } LWS_EXTERN int _lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi) { struct lws_context_per_thread *pt; lws_usec_t timeout_us; int n = -1, m, c, a = 0; /* stay dead once we are dead */ if (!context || !context->vhost_list) return 1; pt = &context->pt[tsi]; lws_stats_bump(pt, LWSSTATS_C_SERVICE_ENTRY, 1); { unsigned long m = lws_now_secs(); if (m > context->time_last_state_dump) { context->time_last_state_dump = m; #if defined(LWS_AMAZON_RTOS) n = xPortGetFreeHeapSize(); #else n = esp_get_free_heap_size(); #endif if ((unsigned int)n != context->last_free_heap) { if ((unsigned int)n > context->last_free_heap) lwsl_notice(" heap :%ld (+%ld)\n", (unsigned long)n, (unsigned long)(n - context->last_free_heap)); else lwsl_notice(" heap :%ld (-%ld)\n", (unsigned long)n, (unsigned long)( context->last_free_heap - n)); context->last_free_heap = n; } } } if (timeout_ms < 0) timeout_ms = 0; else /* force a default timeout of 23 days */ timeout_ms = 2000000000; timeout_us = ((lws_usec_t)timeout_ms) * LWS_US_PER_MS; if (!pt->service_tid_detected) { struct lws *_lws = lws_zalloc(sizeof(*_lws), "tid probe"); if (!_lws) return 1; _lws->context = context; pt->service_tid = context->vhost_list->protocols[0].callback( _lws, LWS_CALLBACK_GET_THREAD_ID, NULL, NULL, 0); pt->service_tid_detected = 1; lws_free(_lws); } /* * is there anybody with pending stuff that needs service forcing? */ if (lws_service_adjust_timeout(context, 1, tsi)) { again: a = 0; if (timeout_us) { lws_usec_t us; lws_pt_lock(pt, __func__); /* don't stay in poll wait longer than next hr timeout */ us = __lws_sul_service_ripe(&pt->pt_sul_owner, lws_now_usecs()); if (us && us < timeout_us) timeout_us = us; lws_pt_unlock(pt); } // n = poll(pt->fds, pt->fds_count, timeout_ms); { fd_set readfds, writefds, errfds; struct timeval tv = { timeout_us / LWS_US_PER_SEC, timeout_us % LWS_US_PER_SEC }, *ptv = &tv; int max_fd = 0; FD_ZERO(&readfds); FD_ZERO(&writefds); FD_ZERO(&errfds); for (n = 0; n < (int)pt->fds_count; n++) { pt->fds[n].revents = 0; if (pt->fds[n].fd >= max_fd) max_fd = pt->fds[n].fd; if (pt->fds[n].events & LWS_POLLIN) FD_SET(pt->fds[n].fd, &readfds); if (pt->fds[n].events & LWS_POLLOUT) FD_SET(pt->fds[n].fd, &writefds); FD_SET(pt->fds[n].fd, &errfds); } n = select(max_fd + 1, &readfds, &writefds, &errfds, ptv); n = 0; #if defined(LWS_WITH_DETAILED_LATENCY) /* * so we can track how long it took before we actually read a POLLIN * that was signalled when we last exited poll() */ if (context->detailed_latency_cb) pt->ust_left_poll = lws_now_usecs(); #endif for (m = 0; m < (int)pt->fds_count; m++) { c = 0; if (FD_ISSET(pt->fds[m].fd, &readfds)) { pt->fds[m].revents |= LWS_POLLIN; c = 1; } if (FD_ISSET(pt->fds[m].fd, &writefds)) { pt->fds[m].revents |= LWS_POLLOUT; c = 1; } if (FD_ISSET(pt->fds[m].fd, &errfds)) { // lwsl_notice("errfds %d\n", pt->fds[m].fd); pt->fds[m].revents |= LWS_POLLHUP; c = 1; } if (c) n++; } } m = 0; #if defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS) m |= !!pt->ws.rx_draining_ext_list; #endif if (pt->context->tls_ops && pt->context->tls_ops->fake_POLLIN_for_buffered) m |= pt->context->tls_ops->fake_POLLIN_for_buffered(pt); if (!m && !n) return 0; } else a = 1; m = lws_service_flag_pending(context, tsi); if (m) c = -1; /* unknown limit */ else if (n < 0) { if (LWS_ERRNO != LWS_EINTR) return -1; return 0; } else c = n; /* any socket with events to service? */ for (n = 0; n < (int)pt->fds_count && c; n++) { if (!pt->fds[n].revents) continue; c--; m = lws_service_fd_tsi(context, &pt->fds[n], tsi); if (m < 0) return -1; /* if something closed, retry this slot */ if (m) n--; } if (a) goto again; return 0; } libwebsockets-3.2.1/lib/plat/esp32/esp32-sockets.c000066400000000000000000000123021357643561300216030ustar00rootroot00000000000000/* * libwebsockets - lib/plat/lws-plat-esp32.c * * Copyright (C) 2010-2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" int lws_send_pipe_choked(struct lws *wsi) { struct lws *wsi_eff = wsi; fd_set writefds; struct timeval tv = { 0, 0 }; int n; #if defined(LWS_WITH_HTTP2) wsi_eff = lws_get_network_wsi(wsi); #endif /* the fact we checked implies we avoided back-to-back writes */ wsi_eff->could_have_pending = 0; /* treat the fact we got a truncated send pending as if we're choked */ if (lws_has_buffered_out(wsi) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) || wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more #endif ) return 1; FD_ZERO(&writefds); FD_SET(wsi_eff->desc.sockfd, &writefds); n = select(wsi_eff->desc.sockfd + 1, NULL, &writefds, NULL, &tv); if (n < 0) return 1; /* choked */ return !n; /* n = 0 = not writable = choked */ } int lws_poll_listen_fd(struct lws_pollfd *fd) { fd_set readfds; struct timeval tv = { 0, 0 }; FD_ZERO(&readfds); FD_SET(fd->fd, &readfds); return select(fd->fd + 1, &readfds, NULL, NULL, &tv); } int lws_plat_check_connection_error(struct lws *wsi) { return 0; } int lws_plat_set_nonblocking(int fd) { return fcntl(fd, F_SETFL, O_NONBLOCK) < 0; } int lws_plat_set_socket_options(struct lws_vhost *vhost, int fd, int unix_skt) { int optval = 1; socklen_t optlen = sizeof(optval); #if defined(__APPLE__) || \ defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ defined(__NetBSD__) || \ defined(__OpenBSD__) struct protoent *tcp_proto; #endif if (vhost->ka_time) { /* enable keepalive on this socket */ optval = 1; if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (const void *)&optval, optlen) < 0) return 1; #if defined(__APPLE__) || \ defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ defined(__NetBSD__) || \ defined(__CYGWIN__) || defined(__OpenBSD__) || defined (__sun) /* * didn't find a way to set these per-socket, need to * tune kernel systemwide values */ #else /* set the keepalive conditions we want on it too */ optval = vhost->ka_time; if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, (const void *)&optval, optlen) < 0) return 1; optval = vhost->ka_interval; if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, (const void *)&optval, optlen) < 0) return 1; optval = vhost->ka_probes; if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, (const void *)&optval, optlen) < 0) return 1; #endif } /* Disable Nagle */ optval = 1; if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &optval, optlen) < 0) return 1; return lws_plat_set_nonblocking(fd); } /* cast a struct sockaddr_in6 * into addr for ipv6 */ int lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen) { #if 0 int rc = LWS_ITOSA_NOT_EXIST; struct ifaddrs *ifr; struct ifaddrs *ifc; #ifdef LWS_WITH_IPV6 struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)addr; #endif getifaddrs(&ifr); for (ifc = ifr; ifc != NULL && rc; ifc = ifc->ifa_next) { if (!ifc->ifa_addr) continue; lwsl_info(" interface %s vs %s\n", ifc->ifa_name, ifname); if (strcmp(ifc->ifa_name, ifname)) continue; switch (ifc->ifa_addr->sa_family) { case AF_INET: #ifdef LWS_WITH_IPV6 if (ipv6) { /* map IPv4 to IPv6 */ memset((char *)&addr6->sin6_addr, 0, sizeof(struct in6_addr)); addr6->sin6_addr.s6_addr[10] = 0xff; addr6->sin6_addr.s6_addr[11] = 0xff; memcpy(&addr6->sin6_addr.s6_addr[12], &((struct sockaddr_in *)ifc->ifa_addr)->sin_addr, sizeof(struct in_addr)); } else #endif memcpy(addr, (struct sockaddr_in *)ifc->ifa_addr, sizeof(struct sockaddr_in)); break; #ifdef LWS_WITH_IPV6 case AF_INET6: memcpy(&addr6->sin6_addr, &((struct sockaddr_in6 *)ifc->ifa_addr)->sin6_addr, sizeof(struct in6_addr)); break; #endif default: continue; } rc = LWS_ITOSA_USABLE; } freeifaddrs(ifr); if (rc == LWS_ITOSA_NOT_EXIST) { /* check if bind to IP address */ #ifdef LWS_WITH_IPV6 if (inet_pton(AF_INET6, ifname, &addr6->sin6_addr) == 1) rc = LWS_ITOSA_USABLE; else #endif if (inet_pton(AF_INET, ifname, &addr->sin_addr) == 1) rc = LWS_ITOSA_USABLE; } return rc; #endif return LWS_ITOSA_NOT_EXIST; } const char * lws_plat_inet_ntop(int af, const void *src, char *dst, int cnt) { return inet_ntop(af, src, dst, cnt); } int lws_plat_inet_pton(int af, const char *src, void *dst) { return 1; // inet_pton(af, src, dst); } libwebsockets-3.2.1/lib/plat/esp32/esp_attr.h000066400000000000000000000044761357643561300210410ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef __ESP_ATTR_H__ #define __ESP_ATTR_H__ #define ROMFN_ATTR //Normally, the linker script will put all code and rodata in flash, //and all variables in shared RAM. These macros can be used to redirect //particular functions/variables to other memory regions. // Forces code into IRAM instead of flash. #define IRAM_ATTR __attribute__((section(".iram1"))) // Forces data into DRAM instead of flash #define DRAM_ATTR __attribute__((section(".dram1"))) // Forces data to be 4 bytes aligned #define WORD_ALIGNED_ATTR __attribute__((aligned(4))) // Forces data to be placed to DMA-capable places #define DMA_ATTR WORD_ALIGNED_ATTR DRAM_ATTR // Forces a string into DRAM instead of flash // Use as ets_printf(DRAM_STR("Hello world!\n")); #define DRAM_STR(str) (__extension__({static const DRAM_ATTR char __c[] = (str); (const char *)&__c;})) // Forces code into RTC fast memory. See "docs/deep-sleep-stub.rst" #define RTC_IRAM_ATTR __attribute__((section(".rtc.text"))) // Forces data into RTC slow memory. See "docs/deep-sleep-stub.rst" // Any variable marked with this attribute will keep its value // during a deep sleep / wake cycle. #define RTC_DATA_ATTR __attribute__((section(".rtc.data"))) // Forces read-only data into RTC slow memory. See "docs/deep-sleep-stub.rst" #define RTC_RODATA_ATTR __attribute__((section(".rtc.rodata"))) // Forces data into noinit section to avoid initialization after restart. #define __NOINIT_ATTR __attribute__((section(".noinit"))) // Forces data into RTC slow memory of .noinit section. // Any variable marked with this attribute will keep its value // after restart or during a deep sleep / wake cycle. #define RTC_NOINIT_ATTR __attribute__((section(".rtc_noinit"))) #endif /* __ESP_ATTR_H__ */ libwebsockets-3.2.1/lib/plat/esp32/private.h000066400000000000000000000047001357643561300206600ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * Included from lib/core/private.h if LWS_WITH_ESP32 */ #define MSG_NOSIGNAL 0 #define SOMAXCONN 3 #if defined(LWS_AMAZON_RTOS) int open(const char *path, int oflag, ...); #else #include #endif #include #include #include #include #include #include #ifndef __cplusplus #include #endif #include #include #if defined(LWS_AMAZON_RTOS) const char * gai_strerror(int); #else #include #endif #if defined(LWS_AMAZON_RTOS) #include "FreeRTOS.h" #include "timers.h" #include #else #include "freertos/timers.h" #include #include #include #endif #include "lwip/apps/sntp.h" #include #if defined(LWS_BUILTIN_GETIFADDRS) #include "./misc/getifaddrs.h" #endif #define LWS_ERRNO errno #define LWS_EAGAIN EAGAIN #define LWS_EALREADY EALREADY #define LWS_EINPROGRESS EINPROGRESS #define LWS_EINTR EINTR #define LWS_EISCONN EISCONN #define LWS_ENOTCONN ENOTCONN #define LWS_EWOULDBLOCK EWOULDBLOCK #define LWS_EADDRINUSE EADDRINUSE #define lws_set_blocking_send(wsi) #ifndef LWS_NO_FORK #ifdef LWS_HAVE_SYS_PRCTL_H #include #endif #endif #define compatible_close(x) close(x) #define lws_plat_socket_offset() LWIP_SOCKET_OFFSET #define wsi_from_fd(A,B) A->lws_lookup[B - lws_plat_socket_offset()] struct lws_context; struct lws; int insert_wsi(const struct lws_context *context, struct lws *wsi); #define delete_from_fd(A,B) A->lws_lookup[B - lws_plat_socket_offset()] = 0 libwebsockets-3.2.1/lib/plat/optee/000077500000000000000000000000001357643561300172145ustar00rootroot00000000000000libwebsockets-3.2.1/lib/plat/optee/lws-plat-optee.c000066400000000000000000000074561357643561300222510ustar00rootroot00000000000000#include "core/private.h" #if !defined(LWS_WITH_NETWORK) #include #endif int errno; #if !defined(LWS_WITH_NETWORK) char * strcpy(char *dest, const char *src) { char *desto = dest; while (*src) *(dest++) = *(src++); *(dest++) = '\0'; return desto; } char *strncpy(char *dest, const char *src, size_t limit) { char *desto = dest; while (*src && limit--) *(dest++) = *(src++); if (limit) *(dest++) = '\0'; return desto; } #endif int lws_plat_apply_FD_CLOEXEC(int n) { return 0; } void TEE_GenerateRandom(void *randomBuffer, uint32_t randomBufferLen); #if defined(LWS_WITH_NETWORK) uint64_t lws_now_usecs(void) { return ((unsigned long long)time(NULL)) * 1000000; } #endif int lws_get_random(struct lws_context *context, void *buf, int len) { #if defined(LWS_WITH_NETWORK) TEE_GenerateRandom(buf, len); #else crypto_rng_read(buf, len); #endif return len; } static const char * const colours[] = { "[31;1m", /* LLL_ERR */ "[36;1m", /* LLL_WARN */ "[35;1m", /* LLL_NOTICE */ "[32;1m", /* LLL_INFO */ "[34;1m", /* LLL_DEBUG */ "[33;1m", /* LLL_PARSER */ "[33;1m", /* LLL_HEADER */ "[33;1m", /* LLL_EXT */ "[33;1m", /* LLL_CLIENT */ "[33;1m", /* LLL_LATENCY */ "[30;1m", /* LLL_USER */ }; void lwsl_emit_optee(int level, const char *line) { char buf[50], linecp[512]; int n, m = LWS_ARRAY_SIZE(colours) - 1; lwsl_timestamp(level, buf, sizeof(buf)); n = 1 << (LWS_ARRAY_SIZE(colours) - 1); while (n) { if (level & n) break; m--; n >>= 1; } n = strlen(line); if ((unsigned int)n > sizeof(linecp) - 1) n = sizeof(linecp) - 1; if (n) { memcpy(linecp, line, n - 1); linecp[n - 1] = '\0'; } else linecp[0] = '\0'; EMSG("%c%s%s%s%c[0m", 27, colours[m], buf, linecp, 27); } int lws_plat_set_nonblocking(int fd) { return 0; } int lws_plat_drop_app_privileges(struct lws_context *context, int actually_init) { return 0; } int lws_plat_context_early_init(void) { return 0; } void lws_plat_context_early_destroy(struct lws_context *context) { } void lws_plat_context_late_destroy(struct lws_context *context) { #if defined(LWS_WITH_NETWORK) if (context->lws_lookup) lws_free(context->lws_lookup); #endif } lws_fop_fd_t _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, const char *vpath, lws_fop_flags_t *flags) { return NULL; } int _lws_plat_file_close(lws_fop_fd_t *fop_fd) { return 0; } lws_fileofs_t _lws_plat_file_seek_cur(lws_fop_fd_t fop_fd, lws_fileofs_t offset) { return 0; } int _lws_plat_file_read(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { return 0; } int _lws_plat_file_write(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { return 0; } int lws_plat_init(struct lws_context *context, const struct lws_context_creation_info *info) { #if defined(LWS_WITH_NETWORK) /* master context has the global fd lookup array */ context->lws_lookup = lws_zalloc(sizeof(struct lws *) * context->max_fds, "lws_lookup"); if (context->lws_lookup == NULL) { lwsl_err("OOM on lws_lookup array for %d connections\n", context->max_fds); return 1; } lwsl_notice(" mem: platform fd map: %5lu bytes\n", (long)sizeof(struct lws *) * context->max_fds); #endif #ifdef LWS_WITH_PLUGINS if (info->plugin_dirs) lws_plat_plugins_init(context, info->plugin_dirs); #endif return 0; } int lws_plat_write_file(const char *filename, void *buf, int len) { return 1; } int lws_plat_read_file(const char *filename, void *buf, int len) { return -1; } int lws_plat_recommended_rsa_bits(void) { return 4096; } libwebsockets-3.2.1/lib/plat/optee/network.c000066400000000000000000000103321357643561300210500ustar00rootroot00000000000000#include "core/private.h" int lws_plat_pipe_create(struct lws *wsi) { return 1; } int lws_plat_pipe_signal(struct lws *wsi) { return 1; } void lws_plat_pipe_close(struct lws *wsi) { } LWS_VISIBLE int lws_send_pipe_choked(struct lws *wsi) { struct lws *wsi_eff; #if defined(LWS_WITH_HTTP2) wsi_eff = lws_get_network_wsi(wsi); #else wsi_eff = wsi; #endif /* the fact we checked implies we avoided back-to-back writes */ wsi_eff->could_have_pending = 0; /* treat the fact we got a truncated send pending as if we're choked */ if (lws_has_buffered_out(wsi_eff) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) || wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more #endif ) return 1; /* okay to send another packet without blocking */ return 0; } int lws_poll_listen_fd(struct lws_pollfd *fd) { // return poll(fd, 1, 0); return 0; } LWS_EXTERN int _lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi) { lws_usec_t timeout_us = timeout_ms * LWS_US_PER_MS; struct lws_context_per_thread *pt; int n = -1, m, c, a = 0; //char buf; /* stay dead once we are dead */ if (!context || !context->vhost_list) return 1; pt = &context->pt[tsi]; if (timeout_ms < 0) timeout_ms = 0; else timeout_ms = 2000000000; if (!pt->service_tid_detected) { struct lws _lws; memset(&_lws, 0, sizeof(_lws)); _lws.context = context; pt->service_tid = context->vhost_list->protocols[0].callback( &_lws, LWS_CALLBACK_GET_THREAD_ID, NULL, NULL, 0); pt->service_tid_detected = 1; } /* * is there anybody with pending stuff that needs service forcing? */ if (lws_service_adjust_timeout(context, 1, tsi)) { again: a = 0; if (timeout_us) { lws_usec_t us; lws_pt_lock(pt, __func__); /* don't stay in poll wait longer than next hr timeout */ us = __lws_sul_service_ripe(&pt->pt_sul_owner, lws_now_usecs()); if (us && us < timeout_us) timeout_us = us; lws_pt_unlock(pt); } n = poll(pt->fds, pt->fds_count, timeout_us / LWS_US_PER_MS); m = 0; if (pt->context->tls_ops && pt->context->tls_ops->fake_POLLIN_for_buffered) m = pt->context->tls_ops->fake_POLLIN_for_buffered(pt); if (/*!pt->ws.rx_draining_ext_list && */!m && !n) /* nothing to do */ return 0; } else a = 1; m = lws_service_flag_pending(context, tsi); if (m) c = -1; /* unknown limit */ else if (n < 0) { if (LWS_ERRNO != LWS_EINTR) return -1; return 0; } else c = n; /* any socket with events to service? */ for (n = 0; n < (int)pt->fds_count && c; n++) { if (!pt->fds[n].revents) continue; c--; #if 0 if (pt->fds[n].fd == pt->dummy_pipe_fds[0]) { if (read(pt->fds[n].fd, &buf, 1) != 1) lwsl_err("Cannot read from dummy pipe."); continue; } #endif m = lws_service_fd_tsi(context, &pt->fds[n], tsi); if (m < 0) return -1; /* if something closed, retry this slot */ if (m) n--; } if (a) goto again; return 0; } int lws_plat_check_connection_error(struct lws *wsi) { return 0; } int lws_plat_service(struct lws_context *context, int timeout_ms) { return _lws_plat_service_tsi(context, timeout_ms, 0); } int lws_plat_set_socket_options(struct lws_vhost *vhost, int fd, int unix_skt) { return 0; } int lws_plat_write_cert(struct lws_vhost *vhost, int is_key, int fd, void *buf, int len) { return 1; } /* cast a struct sockaddr_in6 * into addr for ipv6 */ int lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen) { return -1; } void lws_plat_insert_socket_into_fds(struct lws_context *context, struct lws *wsi) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; pt->fds[pt->fds_count++].revents = 0; } void lws_plat_delete_socket_from_fds(struct lws_context *context, struct lws *wsi, int m) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; pt->fds_count--; } int lws_plat_change_pollfd(struct lws_context *context, struct lws *wsi, struct lws_pollfd *pfd) { return 0; } const char * lws_plat_inet_ntop(int af, const void *src, char *dst, int cnt) { //return inet_ntop(af, src, dst, cnt); return "lws_plat_inet_ntop"; } int lws_plat_inet_pton(int af, const char *src, void *dst) { //return inet_pton(af, src, dst); return 1; } libwebsockets-3.2.1/lib/plat/optee/private.h000066400000000000000000000032221357643561300210360ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * Included from lib/core/private.h if LWS_WITH_OPTEE */ #include #include #define LWS_ERRNO errno #define LWS_EAGAIN EAGAIN #define LWS_EALREADY EALREADY #define LWS_EINPROGRESS EINPROGRESS #define LWS_EINTR EINTR #define LWS_EISCONN EISCONN #define LWS_ENOTCONN ENOTCONN #define LWS_EWOULDBLOCK EWOULDBLOCK #define LWS_EADDRINUSE EADDRINUSE #define lws_set_blocking_send(wsi) #define compatible_close(x) close(x) #define lws_plat_socket_offset() (0) #define wsi_from_fd(A,B) A->lws_lookup[B - lws_plat_socket_offset()] #define insert_wsi(A,B) assert(A->lws_lookup[B->desc.sockfd - \ lws_plat_socket_offset()] == 0); \ A->lws_lookup[B->desc.sockfd - \ lws_plat_socket_offset()] = B #define delete_from_fd(A,B) A->lws_lookup[B - lws_plat_socket_offset()] = 0 libwebsockets-3.2.1/lib/plat/unix/000077500000000000000000000000001357643561300170635ustar00rootroot00000000000000libwebsockets-3.2.1/lib/plat/unix/private.h000066400000000000000000000100531357643561300207050ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * Included from lib/core/private.h if no explicit platform */ #include #include #include #include #include #include #include #include #ifndef __cplusplus #include #endif #include #include #include #include #include #include #include #include #if defined(__APPLE__) #include #endif #if defined(__FreeBSD__) #include #endif #if defined(__linux__) #include #endif #if defined(__QNX__) #include #if defined(__LITTLEENDIAN__) #define BYTE_ORDER __LITTLEENDIAN__ #define LITTLE_ENDIAN __LITTLEENDIAN__ #define BIG_ENDIAN 4321 /* to show byte order (taken from gcc); for suppres warning that BIG_ENDIAN is not defined. */ #endif #if defined(__BIGENDIAN__) #define BYTE_ORDER __BIGENDIAN__ #define LITTLE_ENDIAN 1234 /* to show byte order (taken from gcc); for suppres warning that LITTLE_ENDIAN is not defined. */ #define BIG_ENDIAN __BIGENDIAN__ #endif #endif #if defined(__sun) && defined(__GNUC__) #include #if !defined (BYTE_ORDER) #define BYTE_ORDER __BYTE_ORDER__ #endif #if !defined(LITTLE_ENDIAN) #define LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__ #endif #if !defined(BIG_ENDIAN) #define BIG_ENDIAN __ORDER_BIG_ENDIAN__ #endif #endif /* sun + GNUC */ #if !defined(BYTE_ORDER) #define BYTE_ORDER __BYTE_ORDER #endif #if !defined(LITTLE_ENDIAN) #define LITTLE_ENDIAN __LITTLE_ENDIAN #endif #if !defined(BIG_ENDIAN) #define BIG_ENDIAN __BIG_ENDIAN #endif #if defined(LWS_BUILTIN_GETIFADDRS) #include "./misc/getifaddrs.h" #else #if defined(__HAIKU__) #define _BSD_SOURCE #endif #include #endif #if defined (__sun) || defined(__HAIKU__) || defined(__QNX__) || defined(__ANDROID__) #include #if defined(__ANDROID__) #include #endif #else #include #endif #ifdef __QNX__ # include "netinet/tcp_var.h" # define TCP_KEEPINTVL TCPCTL_KEEPINTVL # define TCP_KEEPIDLE TCPCTL_KEEPIDLE # define TCP_KEEPCNT TCPCTL_KEEPCNT #endif #define LWS_ERRNO errno #define LWS_EAGAIN EAGAIN #define LWS_EALREADY EALREADY #define LWS_EINPROGRESS EINPROGRESS #define LWS_EINTR EINTR #define LWS_EISCONN EISCONN #define LWS_ENOTCONN ENOTCONN #define LWS_EWOULDBLOCK EWOULDBLOCK #define LWS_EADDRINUSE EADDRINUSE #define lws_set_blocking_send(wsi) #define LWS_SOCK_INVALID (-1) struct lws_context; struct lws * wsi_from_fd(const struct lws_context *context, int fd); int insert_wsi(const struct lws_context *context, struct lws *wsi); void delete_from_fd(const struct lws_context *context, int fd); #ifndef LWS_NO_FORK #ifdef LWS_HAVE_SYS_PRCTL_H #include #endif #endif #define compatible_close(x) close(x) #define lws_plat_socket_offset() (0) /* * Mac OSX as well as iOS do not define the MSG_NOSIGNAL flag, * but happily have something equivalent in the SO_NOSIGPIPE flag. */ #ifdef __APPLE__ #define MSG_NOSIGNAL SO_NOSIGPIPE #endif /* * Solaris 11.X only supports POSIX 2001, MSG_NOSIGNAL appears in * POSIX 2008. */ #if defined(__sun) && !defined(MSG_NOSIGNAL) #define MSG_NOSIGNAL 0 #endif libwebsockets-3.2.1/lib/plat/unix/unix-caps.c000066400000000000000000000104241357643561300211370ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #define _GNU_SOURCE #include "core/private.h" #include #include #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) static void _lws_plat_apply_caps(int mode, const cap_value_t *cv, int count) { cap_t caps; if (!count) return; caps = cap_get_proc(); cap_set_flag(caps, mode, count, cv, CAP_SET); cap_set_proc(caps); prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0); cap_free(caps); } #endif int lws_plat_user_colon_group_to_ids(const char *u_colon_g, uid_t *puid, gid_t *pgid) { char *colon = strchr(u_colon_g, ':'), u[33]; struct passwd *p; struct group *g; int ulen; if (!colon) return 1; ulen = lws_ptr_diff(colon, u_colon_g); if (ulen < 2 || ulen > (int)sizeof(u) - 1) return 1; memcpy(u, u_colon_g, ulen); u[ulen] = '\0'; colon++; g = getgrnam(colon); if (!g) { lwsl_err("%s: unknown group '%s'\n", __func__, colon); return 1; } *pgid = g->gr_gid; p = getpwnam(u); if (!p) { lwsl_err("%s: unknown group '%s'\n", __func__, u); return 1; } *puid = p->pw_uid; return 0; } int lws_plat_drop_app_privileges(struct lws_context *context, int actually_drop) { struct passwd *p; struct group *g; /* if he gave us the groupname, align gid to match it */ if (context->groupname) { g = getgrnam(context->groupname); if (g) { lwsl_info("%s: group %s -> gid %u\n", __func__, context->groupname, g->gr_gid); context->gid = g->gr_gid; } else { lwsl_err("%s: unknown groupname '%s'\n", __func__, context->groupname); return 1; } } /* if he gave us the username, align uid to match it */ if (context->username) { p = getpwnam(context->username); if (p) { context->uid = p->pw_uid; lwsl_info("%s: username %s -> uid %u\n", __func__, context->username, (unsigned int)p->pw_uid); } else { lwsl_err("%s: unknown username %s\n", __func__, context->username); return 1; } } if (!actually_drop) return 0; /* if he gave us the gid or we have it from the groupname, set it */ if (context->gid && context->gid != -1) { g = getgrgid(context->gid); if (!g) { lwsl_err("%s: cannot find name for gid %d\n", __func__, context->gid); return 1; } if (setgid(context->gid)) { lwsl_err("%s: setgid: %s failed\n", __func__, strerror(LWS_ERRNO)); return 1; } lwsl_notice("%s: effective group '%s'\n", __func__, g->gr_name); } else lwsl_info("%s: not changing group\n", __func__); /* if he gave us the uid or we have it from the username, set it */ if (context->uid && context->uid != -1) { p = getpwuid(context->uid); if (!p) { lwsl_err("%s: getpwuid: unable to find uid %d\n", __func__, context->uid); return 1; } #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) _lws_plat_apply_caps(CAP_PERMITTED, context->caps, context->count_caps); #endif initgroups(p->pw_name, context->gid); if (setuid(context->uid)) { lwsl_err("%s: setuid: %s failed\n", __func__, strerror(LWS_ERRNO)); return 1; } else lwsl_notice("%s: effective user '%s'\n", __func__, p->pw_name); #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) _lws_plat_apply_caps(CAP_EFFECTIVE, context->caps, context->count_caps); if (context->count_caps) { int n; for (n = 0; n < context->count_caps; n++) lwsl_notice(" RETAINING CAP %d\n", (int)context->caps[n]); } #endif } else lwsl_info("%s: not changing user\n", __func__); return 0; } libwebsockets-3.2.1/lib/plat/unix/unix-fds.c000066400000000000000000000073071357643561300207730ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #define _GNU_SOURCE #include "core/private.h" struct lws * wsi_from_fd(const struct lws_context *context, int fd) { struct lws **p, **done; if (!context->max_fds_unrelated_to_ulimit) return context->lws_lookup[fd - lws_plat_socket_offset()]; /* slow fds handling */ p = context->lws_lookup; done = &p[context->max_fds]; while (p != done) { if (*p && (*p)->desc.sockfd == fd) return *p; p++; } return NULL; } int insert_wsi(const struct lws_context *context, struct lws *wsi) { struct lws **p, **done; if (!context->max_fds_unrelated_to_ulimit) { assert(context->lws_lookup[wsi->desc.sockfd - lws_plat_socket_offset()] == 0); context->lws_lookup[wsi->desc.sockfd - \ lws_plat_socket_offset()] = wsi; return 0; } /* slow fds handling */ p = context->lws_lookup; done = &p[context->max_fds]; #if defined(_DEBUG) /* confirm it doesn't already exist */ while (p != done && *p != wsi) p++; assert(p == done); p = context->lws_lookup; /* confirm fd doesn't already exist */ while (p != done && (!*p || (*p && (*p)->desc.sockfd != wsi->desc.sockfd))) p++; if (p != done) { lwsl_err("%s: wsi %p already says it has fd %d\n", __func__, *p, wsi->desc.sockfd); assert(0); } p = context->lws_lookup; #endif /* find an empty slot */ while (p != done && *p) p++; if (p == done) { lwsl_err("%s: reached max fds\n", __func__); return 1; } *p = wsi; return 0; } void delete_from_fd(const struct lws_context *context, int fd) { struct lws **p, **done; if (!context->max_fds_unrelated_to_ulimit) { context->lws_lookup[fd - lws_plat_socket_offset()] = NULL; return; } /* slow fds handling */ p = context->lws_lookup; done = &p[context->max_fds]; /* find the match */ while (p != done && (!*p || (*p && (*p)->desc.sockfd != fd))) p++; if (p == done) lwsl_err("%s: fd %d not found\n", __func__, fd); else *p = NULL; #if defined(_DEBUG) p = context->lws_lookup; while (p != done && (!*p || (*p && (*p)->desc.sockfd != fd))) p++; if (p != done) { lwsl_err("%s: fd %d in lws_lookup again at %d\n", __func__, fd, (int)(p - context->lws_lookup)); assert(0); } #endif } void lws_plat_insert_socket_into_fds(struct lws_context *context, struct lws *wsi) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; if (context->event_loop_ops->io) context->event_loop_ops->io(wsi, LWS_EV_START | LWS_EV_READ); pt->fds[pt->fds_count++].revents = 0; } void lws_plat_delete_socket_from_fds(struct lws_context *context, struct lws *wsi, int m) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; if (context->event_loop_ops->io) context->event_loop_ops->io(wsi, LWS_EV_STOP | LWS_EV_READ | LWS_EV_WRITE); pt->fds_count--; } int lws_plat_change_pollfd(struct lws_context *context, struct lws *wsi, struct lws_pollfd *pfd) { return 0; } libwebsockets-3.2.1/lib/plat/unix/unix-file.c000066400000000000000000000066011357643561300211320ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #define _GNU_SOURCE #include "core/private.h" #include #include #ifdef LWS_WITH_PLUGINS #include #endif #include int lws_plat_apply_FD_CLOEXEC(int n) { if (n == -1) return 0; return fcntl(n, F_SETFD, FD_CLOEXEC); } int lws_plat_write_file(const char *filename, void *buf, int len) { int m, fd; fd = lws_open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600); if (fd == -1) return 1; m = write(fd, buf, len); close(fd); return m != len; } int lws_plat_read_file(const char *filename, void *buf, int len) { int n, fd = lws_open(filename, O_RDONLY); if (fd == -1) return -1; n = read(fd, buf, len); close(fd); return n; } lws_fop_fd_t _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, const char *vpath, lws_fop_flags_t *flags) { struct stat stat_buf; int ret = lws_open(filename, (*flags) & LWS_FOP_FLAGS_MASK, 0664); lws_fop_fd_t fop_fd; if (ret < 0) return NULL; if (fstat(ret, &stat_buf) < 0) goto bail; fop_fd = malloc(sizeof(*fop_fd)); if (!fop_fd) goto bail; fop_fd->fops = fops; fop_fd->flags = *flags; fop_fd->fd = ret; fop_fd->filesystem_priv = NULL; /* we don't use it */ fop_fd->len = stat_buf.st_size; fop_fd->pos = 0; return fop_fd; bail: close(ret); return NULL; } int _lws_plat_file_close(lws_fop_fd_t *fop_fd) { int fd = (*fop_fd)->fd; free(*fop_fd); *fop_fd = NULL; return close(fd); } lws_fileofs_t _lws_plat_file_seek_cur(lws_fop_fd_t fop_fd, lws_fileofs_t offset) { lws_fileofs_t r; if (offset > 0 && offset > (lws_fileofs_t)fop_fd->len - (lws_fileofs_t)fop_fd->pos) offset = fop_fd->len - fop_fd->pos; if ((lws_fileofs_t)fop_fd->pos + offset < 0) offset = -fop_fd->pos; r = lseek(fop_fd->fd, offset, SEEK_CUR); if (r >= 0) fop_fd->pos = r; else lwsl_err("error seeking from cur %ld, offset %ld\n", (long)fop_fd->pos, (long)offset); return r; } int _lws_plat_file_read(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { long n; n = read((int)fop_fd->fd, buf, len); if (n == -1) { *amount = 0; return -1; } fop_fd->pos += n; lwsl_debug("%s: read %ld of req %ld, pos %ld, len %ld\n", __func__, n, (long)len, (long)fop_fd->pos, (long)fop_fd->len); *amount = n; return 0; } int _lws_plat_file_write(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { long n; n = write((int)fop_fd->fd, buf, len); if (n == -1) { *amount = 0; return -1; } fop_fd->pos += n; *amount = n; return 0; } libwebsockets-3.2.1/lib/plat/unix/unix-init.c000066400000000000000000000123151357643561300211550ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #define _GNU_SOURCE #include "core/private.h" #include #include #ifdef LWS_WITH_PLUGINS #include #endif #include #if defined(LWS_HAVE_MALLOC_TRIM) #include #endif #if defined(LWS_WITH_NETWORK) static void lws_sul_plat_unix(lws_sorted_usec_list_t *sul) { struct lws_context_per_thread *pt = lws_container_of(sul, struct lws_context_per_thread, sul_plat); struct lws_context *context = pt->context; #if defined(LWS_ROLE_CGI) || defined(LWS_ROLE_DBUS) time_t now = time(NULL); #endif #if !defined(LWS_NO_DAEMONIZE) /* if our parent went down, don't linger around */ if (pt->context->started_with_parent && kill(pt->context->started_with_parent, 0) < 0) kill(getpid(), SIGTERM); #endif #if defined(LWS_HAVE_MALLOC_TRIM) malloc_trim(4 * 1024); #endif if (pt->context->deprecated && !pt->context->count_wsi_allocated) { lwsl_notice("%s: ending deprecated context\n", __func__); kill(getpid(), SIGINT); return; } lws_check_deferred_free(context, 0, 0); lws_context_lock(context, "periodic checks"); lws_start_foreach_llp(struct lws_vhost **, pv, context->no_listener_vhost_list) { struct lws_vhost *v = *pv; lwsl_debug("deferred iface: checking if on vh %s\n", (*pv)->name); if (_lws_vhost_init_server(NULL, *pv) == 0) { /* became happy */ lwsl_notice("vh %s: became connected\n", v->name); *pv = v->no_listener_vhost_list; v->no_listener_vhost_list = NULL; break; } } lws_end_foreach_llp(pv, no_listener_vhost_list); lws_context_unlock(context); #if defined(LWS_ROLE_CGI) role_ops_cgi.periodic_checks(context, 0, now); #endif #if defined(LWS_ROLE_DBUS) role_ops_dbus.periodic_checks(context, 0, now); #endif __lws_sul_insert(&pt->pt_sul_owner, &pt->sul_plat, 30 * LWS_US_PER_SEC); } #endif int lws_plat_init(struct lws_context *context, const struct lws_context_creation_info *info) { int fd; #if defined(LWS_WITH_NETWORK) /* * master context has the process-global fd lookup array. This can be * done two different ways now; one or the other is done depending on if * info->fd_limit_per_thread was snonzero * * - default: allocate a worst-case lookup array sized for ulimit -n * and use the fd directly as an index into it * * - slow: allocate context->max_fds entries only (which can be * forced at context creation time to be * info->fd_limit_per_thread * the number of threads) * and search the array to lookup fds * * the default way is optimized for server, if you only use one or two * client wsi the slow way may save a lot of memory. * * Both ways allocate an array of struct lws *... one allocates it for * all possible fd indexes the process could produce and uses it as a * map, the other allocates for an amount of wsi the lws context is * expected to use and searches through it to manipulate it. */ context->lws_lookup = lws_zalloc(sizeof(struct lws *) * context->max_fds, "lws_lookup"); if (!context->lws_lookup) { lwsl_err("%s: OOM on alloc lws_lookup array for %d conn\n", __func__, context->max_fds); return 1; } lwsl_info(" mem: platform fd map: %5lu B\n", (unsigned long)(sizeof(struct lws *) * context->max_fds)); #endif fd = lws_open(SYSTEM_RANDOM_FILEPATH, O_RDONLY); context->fd_random = fd; if (context->fd_random < 0) { lwsl_err("Unable to open random device %s %d\n", SYSTEM_RANDOM_FILEPATH, context->fd_random); return 1; } #if defined(LWS_WITH_PLUGINS) if (info->plugin_dirs) lws_plat_plugins_init(context, info->plugin_dirs); #endif #if defined(LWS_WITH_NETWORK) /* we only need to do this on pt[0] */ context->pt[0].sul_plat.cb = lws_sul_plat_unix; __lws_sul_insert(&context->pt[0].pt_sul_owner, &context->pt[0].sul_plat, 30 * LWS_US_PER_SEC); #endif return 0; } int lws_plat_context_early_init(void) { #if !defined(LWS_AVOID_SIGPIPE_IGN) signal(SIGPIPE, SIG_IGN); #endif return 0; } void lws_plat_context_early_destroy(struct lws_context *context) { } void lws_plat_context_late_destroy(struct lws_context *context) { #ifdef LWS_WITH_PLUGINS if (context->plugin_list) lws_plat_plugins_destroy(context); #endif #if defined(LWS_WITH_NETWORK) if (context->lws_lookup) lws_free_set_NULL(context->lws_lookup); #endif if (!context->fd_random) lwsl_err("ZERO RANDOM FD\n"); if (context->fd_random != LWS_INVALID_FILE) close(context->fd_random); } libwebsockets-3.2.1/lib/plat/unix/unix-misc.c000066400000000000000000000040301357643561300211400ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #define _GNU_SOURCE #include "core/private.h" lws_usec_t lws_now_usecs(void) { #if defined(LWS_HAVE_CLOCK_GETTIME) struct timespec ts; if (clock_gettime(CLOCK_MONOTONIC, &ts)) return 0; return (((lws_usec_t)ts.tv_sec) * LWS_US_PER_SEC) + ((lws_usec_t)ts.tv_nsec / LWS_NS_PER_US); #else struct timeval now; gettimeofday(&now, NULL); return (((lws_usec_t)now.tv_sec) * LWS_US_PER_SEC) + (lws_usec_t)now.tv_usec; #endif } LWS_VISIBLE int lws_get_random(struct lws_context *context, void *buf, int len) { return read(context->fd_random, (char *)buf, len); } LWS_VISIBLE void lwsl_emit_syslog(int level, const char *line) { int syslog_level = LOG_DEBUG; switch (level) { case LLL_ERR: syslog_level = LOG_ERR; break; case LLL_WARN: syslog_level = LOG_WARNING; break; case LLL_NOTICE: syslog_level = LOG_NOTICE; break; case LLL_INFO: syslog_level = LOG_INFO; break; } syslog(syslog_level, "%s", line); } int lws_plat_write_cert(struct lws_vhost *vhost, int is_key, int fd, void *buf, int len) { int n; n = write(fd, buf, len); fsync(fd); if (lseek(fd, 0, SEEK_SET) < 0) return 1; return n != len; } int lws_plat_recommended_rsa_bits(void) { return 4096; } libwebsockets-3.2.1/lib/plat/unix/unix-pipe.c000066400000000000000000000032521357643561300211470ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #define _GNU_SOURCE #include "core/private.h" int lws_plat_pipe_create(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; #if defined(LWS_HAVE_PIPE2) return pipe2(pt->dummy_pipe_fds, O_NONBLOCK); #else return pipe(pt->dummy_pipe_fds); #endif } int lws_plat_pipe_signal(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; char buf = 0; int n; n = write(pt->dummy_pipe_fds[1], &buf, 1); return n != 1; } void lws_plat_pipe_close(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; if (pt->dummy_pipe_fds[0] && pt->dummy_pipe_fds[0] != -1) close(pt->dummy_pipe_fds[0]); if (pt->dummy_pipe_fds[1] && pt->dummy_pipe_fds[1] != -1) close(pt->dummy_pipe_fds[1]); pt->dummy_pipe_fds[0] = pt->dummy_pipe_fds[1] = -1; } libwebsockets-3.2.1/lib/plat/unix/unix-plugins.c000066400000000000000000000101311357643561300216650ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #define _GNU_SOURCE #include "core/private.h" #include #include #ifdef LWS_WITH_PLUGINS #include #endif #include static int filter(const struct dirent *ent) { if (!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) return 0; return 1; } int lws_plat_plugins_init(struct lws_context * context, const char * const *d) { struct lws_plugin_capability lcaps; struct lws_plugin *plugin; lws_plugin_init_func initfunc; struct dirent **namelist; int n, i, m, ret = 0; char path[256]; void *l; #if defined(LWS_WITH_PLUGINS) && (UV_VERSION_MAJOR > 0) if (lws_check_opt(context->options, LWS_SERVER_OPTION_LIBUV)) return lws_uv_plugins_init(context, d); #endif lwsl_notice(" Plugins:\n"); while (d && *d) { n = scandir(*d, &namelist, filter, alphasort); if (n < 0) { lwsl_err("Scandir on %s failed\n", *d); return 1; } for (i = 0; i < n; i++) { if (strlen(namelist[i]->d_name) < 7) goto inval; lwsl_notice(" %s\n", namelist[i]->d_name); lws_snprintf(path, sizeof(path) - 1, "%s/%s", *d, namelist[i]->d_name); l = dlopen(path, RTLD_NOW); if (!l) { lwsl_err("Error loading DSO: %s\n", dlerror()); while (i++ < n) free(namelist[i]); goto bail; } /* we could open it, can we get his init function? */ m = lws_snprintf(path, sizeof(path) - 1, "init_%s", namelist[i]->d_name + 3 /* snip lib... */); path[m - 3] = '\0'; /* snip the .so */ initfunc = dlsym(l, path); if (!initfunc) { lwsl_err("Failed to get init on %s: %s", namelist[i]->d_name, dlerror()); dlclose(l); } lcaps.api_magic = LWS_PLUGIN_API_MAGIC; m = initfunc(context, &lcaps); if (m) { lwsl_err("Initializing %s failed %d\n", namelist[i]->d_name, m); dlclose(l); goto skip; } plugin = lws_malloc(sizeof(*plugin), "plugin"); if (!plugin) { lwsl_err("OOM\n"); goto bail; } plugin->list = context->plugin_list; context->plugin_list = plugin; lws_strncpy(plugin->name, namelist[i]->d_name, sizeof(plugin->name)); plugin->l = l; plugin->caps = lcaps; context->plugin_protocol_count += lcaps.count_protocols; context->plugin_extension_count += lcaps.count_extensions; free(namelist[i]); continue; skip: dlclose(l); inval: free(namelist[i]); } free(namelist); d++; } return 0; bail: free(namelist); return ret; } int lws_plat_plugins_destroy(struct lws_context * context) { struct lws_plugin *plugin = context->plugin_list, *p; lws_plugin_destroy_func func; char path[256]; int m; #if defined(LWS_WITH_PLUGINS) && (UV_VERSION_MAJOR > 0) if (lws_check_opt(context->options, LWS_SERVER_OPTION_LIBUV)) return lws_uv_plugins_destroy(context); #endif if (!plugin) return 0; lwsl_notice("%s\n", __func__); while (plugin) { p = plugin; m = lws_snprintf(path, sizeof(path) - 1, "destroy_%s", plugin->name + 3); path[m - 3] = '\0'; func = dlsym(plugin->l, path); if (!func) { lwsl_err("Failed to get destroy on %s: %s", plugin->name, dlerror()); goto next; } m = func(context); if (m) lwsl_err("Initializing %s failed %d\n", plugin->name, m); next: dlclose(p->l); plugin = p->list; p->list = NULL; free(p); } context->plugin_list = NULL; return 0; } libwebsockets-3.2.1/lib/plat/unix/unix-service.c000066400000000000000000000125461357643561300216600ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #define _GNU_SOURCE #include "core/private.h" int lws_poll_listen_fd(struct lws_pollfd *fd) { return poll(fd, 1, 0); } int _lws_plat_service_forced_tsi(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; int m, n; lws_service_flag_pending(context, tsi); /* any socket with events to service? */ for (n = 0; n < (int)pt->fds_count; n++) { if (!pt->fds[n].revents) continue; m = lws_service_fd_tsi(context, &pt->fds[n], tsi); if (m < 0) { lwsl_err("%s: lws_service_fd_tsi returned %d\n", __func__, m); return -1; } /* if something closed, retry this slot */ if (m) n--; } lws_service_do_ripe_rxflow(pt); return 0; } #define LWS_POLL_WAIT_LIMIT 2000000000 int _lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi) { volatile struct lws_foreign_thread_pollfd *ftp, *next; volatile struct lws_context_per_thread *vpt; struct lws_context_per_thread *pt; lws_usec_t timeout_us, us; int n = -1; #if (defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS)) || defined(LWS_WITH_TLS) int m; #endif /* stay dead once we are dead */ if (!context || !context->vhost_list) return 1; pt = &context->pt[tsi]; vpt = (volatile struct lws_context_per_thread *)pt; lws_stats_bump(pt, LWSSTATS_C_SERVICE_ENTRY, 1); if (timeout_ms < 0) timeout_ms = 0; else /* force a default timeout of 23 days */ timeout_ms = LWS_POLL_WAIT_LIMIT; timeout_us = ((lws_usec_t)timeout_ms) * LWS_US_PER_MS; if (context->event_loop_ops->run_pt) context->event_loop_ops->run_pt(context, tsi); if (!pt->service_tid_detected) { struct lws _lws; memset(&_lws, 0, sizeof(_lws)); _lws.context = context; pt->service_tid = context->vhost_list->protocols[0].callback( &_lws, LWS_CALLBACK_GET_THREAD_ID, NULL, NULL, 0); pt->service_tid_detected = 1; } us = lws_now_usecs(); lws_pt_lock(pt, __func__); /* * service ripe scheduled events, and limit wait to next expected one */ us = __lws_sul_service_ripe(&pt->pt_sul_owner, us); if (us && us < timeout_us) timeout_us = us; lws_pt_unlock(pt); /* * is there anybody with pending stuff that needs service forcing? */ if (!lws_service_adjust_timeout(context, 1, tsi)) timeout_us = 0; /* ensure we don't wrap at 2^31 with poll()'s signed int ms */ timeout_us /= LWS_US_PER_MS; /* ms now */ if (timeout_us > LWS_POLL_WAIT_LIMIT) timeout_us = LWS_POLL_WAIT_LIMIT; vpt->inside_poll = 1; lws_memory_barrier(); n = poll(pt->fds, pt->fds_count, timeout_us /* ms now */ ); vpt->inside_poll = 0; lws_memory_barrier(); #if defined(LWS_WITH_DETAILED_LATENCY) /* * so we can track how long it took before we actually read a * POLLIN that was signalled when we last exited poll() */ if (context->detailed_latency_cb) pt->ust_left_poll = lws_now_usecs(); #endif /* Collision will be rare and brief. Spin until it completes */ while (vpt->foreign_spinlock) ; /* * At this point we are not inside a foreign thread pollfd * change, and we have marked ourselves as outside the poll() * wait. So we are the only guys that can modify the * lws_foreign_thread_pollfd list on the pt. Drain the list * and apply the changes to the affected pollfds in the correct * order. */ lws_pt_lock(pt, __func__); ftp = vpt->foreign_pfd_list; //lwsl_notice("cleared list %p\n", ftp); while (ftp) { struct lws *wsi; struct lws_pollfd *pfd; next = ftp->next; pfd = &vpt->fds[ftp->fd_index]; if (lws_socket_is_valid(pfd->fd)) { wsi = wsi_from_fd(context, pfd->fd); if (wsi) __lws_change_pollfd(wsi, ftp->_and, ftp->_or); } lws_free((void *)ftp); ftp = next; } vpt->foreign_pfd_list = NULL; lws_memory_barrier(); lws_pt_unlock(pt); #if (defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS)) || defined(LWS_WITH_TLS) m = 0; #endif #if defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS) m |= !!pt->ws.rx_draining_ext_list; #endif #if defined(LWS_WITH_TLS) if (pt->context->tls_ops && pt->context->tls_ops->fake_POLLIN_for_buffered) m |= pt->context->tls_ops->fake_POLLIN_for_buffered(pt); #endif if ( #if (defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS)) || defined(LWS_WITH_TLS) !m && #endif !n) { /* nothing to do */ lws_service_do_ripe_rxflow(pt); return 0; } if (_lws_plat_service_forced_tsi(context, tsi)) return -1; return 0; } int lws_plat_check_connection_error(struct lws *wsi) { return 0; } int lws_plat_service(struct lws_context *context, int timeout_ms) { return _lws_plat_service_tsi(context, timeout_ms, 0); } libwebsockets-3.2.1/lib/plat/unix/unix-sockets.c000066400000000000000000000147471357643561300217000ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #define _GNU_SOURCE #include "core/private.h" #include #include int lws_send_pipe_choked(struct lws *wsi) { struct lws_pollfd fds; struct lws *wsi_eff; #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws && wsi->ws->tx_draining_ext) return 1; #endif #if defined(LWS_WITH_HTTP2) wsi_eff = lws_get_network_wsi(wsi); #else wsi_eff = wsi; #endif /* the fact we checked implies we avoided back-to-back writes */ wsi_eff->could_have_pending = 0; /* treat the fact we got a truncated send pending as if we're choked */ if (lws_has_buffered_out(wsi_eff) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) ||wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more #endif ) return 1; fds.fd = wsi_eff->desc.sockfd; fds.events = POLLOUT; fds.revents = 0; if (poll(&fds, 1, 0) != 1) return 1; if ((fds.revents & POLLOUT) == 0) return 1; /* okay to send another packet without blocking */ return 0; } int lws_plat_set_nonblocking(int fd) { return fcntl(fd, F_SETFL, O_NONBLOCK) < 0; } int lws_plat_set_socket_options(struct lws_vhost *vhost, int fd, int unix_skt) { int optval = 1; socklen_t optlen = sizeof(optval); #if defined(__APPLE__) || \ defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ defined(__NetBSD__) || \ defined(__OpenBSD__) || \ defined(__HAIKU__) struct protoent *tcp_proto; #endif (void)fcntl(fd, F_SETFD, FD_CLOEXEC); if (!unix_skt && vhost->ka_time) { /* enable keepalive on this socket */ optval = 1; if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (const void *)&optval, optlen) < 0) return 1; #if defined(__APPLE__) || \ defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ defined(__NetBSD__) || \ defined(__CYGWIN__) || defined(__OpenBSD__) || defined (__sun) || \ defined(__HAIKU__) /* * didn't find a way to set these per-socket, need to * tune kernel systemwide values */ #else /* set the keepalive conditions we want on it too */ #if defined(LWS_HAVE_TCP_USER_TIMEOUT) optval = 1000 * (vhost->ka_time + (vhost->ka_interval * vhost->ka_probes)); if (setsockopt(fd, IPPROTO_TCP, TCP_USER_TIMEOUT, (const void *)&optval, optlen) < 0) return 1; #endif optval = vhost->ka_time; if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, (const void *)&optval, optlen) < 0) return 1; optval = vhost->ka_interval; if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, (const void *)&optval, optlen) < 0) return 1; optval = vhost->ka_probes; if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, (const void *)&optval, optlen) < 0) return 1; #endif } #if defined(SO_BINDTODEVICE) if (!unix_skt && vhost->bind_iface && vhost->iface) { lwsl_info("binding listen skt to %s using SO_BINDTODEVICE\n", vhost->iface); if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, vhost->iface, strlen(vhost->iface)) < 0) { lwsl_warn("Failed to bind to device %s\n", vhost->iface); return 1; } } #endif /* Disable Nagle */ optval = 1; #if defined (__sun) || defined(__QNX__) if (!unix_skt && setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (const void *)&optval, optlen) < 0) return 1; #elif !defined(__APPLE__) && \ !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && \ !defined(__NetBSD__) && \ !defined(__OpenBSD__) && \ !defined(__HAIKU__) if (!unix_skt && setsockopt(fd, SOL_TCP, TCP_NODELAY, (const void *)&optval, optlen) < 0) return 1; #else tcp_proto = getprotobyname("TCP"); if (!unix_skt && setsockopt(fd, tcp_proto->p_proto, TCP_NODELAY, &optval, optlen) < 0) return 1; #endif return lws_plat_set_nonblocking(fd); } /* cast a struct sockaddr_in6 * into addr for ipv6 */ int lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen) { int rc = LWS_ITOSA_NOT_EXIST; struct ifaddrs *ifr; struct ifaddrs *ifc; #ifdef LWS_WITH_IPV6 struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)addr; #endif getifaddrs(&ifr); for (ifc = ifr; ifc != NULL && rc; ifc = ifc->ifa_next) { if (!ifc->ifa_addr) continue; lwsl_debug(" interface %s vs %s (fam %d) ipv6 %d\n", ifc->ifa_name, ifname, ifc->ifa_addr->sa_family, ipv6); if (strcmp(ifc->ifa_name, ifname)) continue; switch (ifc->ifa_addr->sa_family) { #if defined(AF_PACKET) case AF_PACKET: /* interface exists but is not usable */ rc = LWS_ITOSA_NOT_USABLE; continue; #endif case AF_INET: #ifdef LWS_WITH_IPV6 if (ipv6) { /* map IPv4 to IPv6 */ memset((char *)&addr6->sin6_addr, 0, sizeof(struct in6_addr)); addr6->sin6_addr.s6_addr[10] = 0xff; addr6->sin6_addr.s6_addr[11] = 0xff; memcpy(&addr6->sin6_addr.s6_addr[12], &((struct sockaddr_in *)ifc->ifa_addr)->sin_addr, sizeof(struct in_addr)); lwsl_debug("%s: uplevelling ipv4 bind to ipv6\n", __func__); } else #endif memcpy(addr, (struct sockaddr_in *)ifc->ifa_addr, sizeof(struct sockaddr_in)); break; #ifdef LWS_WITH_IPV6 case AF_INET6: memcpy(&addr6->sin6_addr, &((struct sockaddr_in6 *)ifc->ifa_addr)->sin6_addr, sizeof(struct in6_addr)); break; #endif default: continue; } rc = LWS_ITOSA_USABLE; } freeifaddrs(ifr); if (rc) { /* check if bind to IP address */ #ifdef LWS_WITH_IPV6 if (inet_pton(AF_INET6, ifname, &addr6->sin6_addr) == 1) rc = LWS_ITOSA_USABLE; else #endif if (inet_pton(AF_INET, ifname, &addr->sin_addr) == 1) rc = LWS_ITOSA_USABLE; } return rc; } const char * lws_plat_inet_ntop(int af, const void *src, char *dst, int cnt) { return inet_ntop(af, src, dst, cnt); } int lws_plat_inet_pton(int af, const char *src, void *dst) { return inet_pton(af, src, dst); } libwebsockets-3.2.1/lib/plat/windows/000077500000000000000000000000001357643561300175725ustar00rootroot00000000000000libwebsockets-3.2.1/lib/plat/windows/private.h000066400000000000000000000067241357643561300214260ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * Included from lib/core/private.h if defined(WIN32) || defined(_WIN32) */ #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #if defined(WINVER) && (WINVER < 0x0501) #undef WINVER #undef _WIN32_WINNT #define WINVER 0x0501 #define _WIN32_WINNT WINVER #endif #define LWS_NO_DAEMONIZE #define LWS_ERRNO WSAGetLastError() #define LWS_EAGAIN WSAEWOULDBLOCK #define LWS_EALREADY WSAEALREADY #define LWS_EINPROGRESS WSAEINPROGRESS #define LWS_EINTR WSAEINTR #define LWS_EISCONN WSAEISCONN #define LWS_ENOTCONN WSAENOTCONN #define LWS_EWOULDBLOCK WSAEWOULDBLOCK #define LWS_EADDRINUSE WSAEADDRINUSE #define MSG_NOSIGNAL 0 #define SHUT_RDWR SD_BOTH #define SOL_TCP IPPROTO_TCP #define SHUT_WR SD_SEND #define compatible_close(fd) closesocket(fd) #define lws_set_blocking_send(wsi) wsi->sock_send_blocking = 1 #include #include #include #include #ifdef LWS_HAVE_IN6ADDR_H #include #endif #include #include #if !defined(LWS_HAVE_ATOLL) #if defined(LWS_HAVE__ATOI64) #define atoll _atoi64 #else #warning No atoll or _atoi64 available, using atoi #define atoll atoi #endif #endif #ifndef __func__ #define __func__ __FUNCTION__ #endif #ifdef LWS_HAVE__VSNPRINTF #define vsnprintf _vsnprintf #endif /* we don't have an implementation for this on windows... */ int kill(int pid, int sig); int fork(void); #ifndef SIGINT #define SIGINT 2 #endif #include #ifndef BIG_ENDIAN #define BIG_ENDIAN 4321 /* to show byte order (taken from gcc) */ #endif #ifndef LITTLE_ENDIAN #define LITTLE_ENDIAN 1234 #endif #ifndef BYTE_ORDER #define BYTE_ORDER LITTLE_ENDIAN #endif #undef __P #ifndef __P #if __STDC__ #define __P(protos) protos #else #define __P(protos) () #endif #endif #ifdef _WIN32 #ifndef FD_HASHTABLE_MODULUS #define FD_HASHTABLE_MODULUS 32 #endif #endif #define lws_plat_socket_offset() (0) struct lws; struct lws_context; #define LWS_FD_HASH(fd) ((fd ^ (fd >> 8) ^ (fd >> 16)) % FD_HASHTABLE_MODULUS) struct lws_fd_hashtable { struct lws **wsi; int length; }; #ifdef LWS_DLL #ifdef LWS_INTERNAL #define LWS_EXTERN extern __declspec(dllexport) #else #define LWS_EXTERN extern __declspec(dllimport) #endif #else #define LWS_EXTERN #endif typedef SOCKET lws_sockfd_type; typedef HANDLE lws_filefd_type; #define LWS_WIN32_HANDLE_TYPES LWS_EXTERN struct lws * wsi_from_fd(const struct lws_context *context, lws_sockfd_type fd); LWS_EXTERN int insert_wsi(struct lws_context *context, struct lws *wsi); LWS_EXTERN int delete_from_fd(struct lws_context *context, lws_sockfd_type fd); libwebsockets-3.2.1/lib/plat/windows/windows-fds.c000066400000000000000000000040611357643561300222030ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #include "core/private.h" struct lws * wsi_from_fd(const struct lws_context *context, lws_sockfd_type fd) { int h = LWS_FD_HASH(fd); int n = 0; for (n = 0; n < context->fd_hashtable[h].length; n++) if (context->fd_hashtable[h].wsi[n]->desc.sockfd == fd) return context->fd_hashtable[h].wsi[n]; return NULL; } int insert_wsi(struct lws_context *context, struct lws *wsi) { int h = LWS_FD_HASH(wsi->desc.sockfd); if (context->fd_hashtable[h].length == (getdtablesize() - 1)) { lwsl_err("hash table overflow\n"); return 1; } context->fd_hashtable[h].wsi[context->fd_hashtable[h].length++] = wsi; return 0; } int delete_from_fd(struct lws_context *context, lws_sockfd_type fd) { int h = LWS_FD_HASH(fd); int n = 0; for (n = 0; n < context->fd_hashtable[h].length; n++) if (context->fd_hashtable[h].wsi[n]->desc.sockfd == fd) { while (n < context->fd_hashtable[h].length) { context->fd_hashtable[h].wsi[n] = context->fd_hashtable[h].wsi[n + 1]; n++; } context->fd_hashtable[h].length--; return 0; } lwsl_err("Failed to find fd %d requested for " "delete in hashtable\n", fd); return 1; } libwebsockets-3.2.1/lib/plat/windows/windows-file.c000066400000000000000000000067461357643561300223620ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #include "core/private.h" int lws_plat_apply_FD_CLOEXEC(int n) { return 0; } lws_fop_fd_t _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, const char *vpath, lws_fop_flags_t *flags) { HANDLE ret; WCHAR buf[MAX_PATH]; lws_fop_fd_t fop_fd; LARGE_INTEGER llFileSize = {0}; MultiByteToWideChar(CP_UTF8, 0, filename, -1, buf, LWS_ARRAY_SIZE(buf)); if (((*flags) & 7) == _O_RDONLY) { ret = CreateFileW(buf, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); } else { ret = CreateFileW(buf, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); } if (ret == LWS_INVALID_FILE) goto bail; fop_fd = malloc(sizeof(*fop_fd)); if (!fop_fd) goto bail; fop_fd->fops = fops; fop_fd->fd = ret; fop_fd->filesystem_priv = NULL; /* we don't use it */ fop_fd->flags = *flags; fop_fd->len = GetFileSize(ret, NULL); if(GetFileSizeEx(ret, &llFileSize)) fop_fd->len = llFileSize.QuadPart; fop_fd->pos = 0; return fop_fd; bail: return NULL; } int _lws_plat_file_close(lws_fop_fd_t *fop_fd) { HANDLE fd = (*fop_fd)->fd; free(*fop_fd); *fop_fd = NULL; CloseHandle((HANDLE)fd); return 0; } lws_fileofs_t _lws_plat_file_seek_cur(lws_fop_fd_t fop_fd, lws_fileofs_t offset) { LARGE_INTEGER l; l.QuadPart = offset; return SetFilePointerEx((HANDLE)fop_fd->fd, l, NULL, FILE_CURRENT); } int _lws_plat_file_read(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { DWORD _amount; if (!ReadFile((HANDLE)fop_fd->fd, buf, (DWORD)len, &_amount, NULL)) { *amount = 0; return 1; } fop_fd->pos += _amount; *amount = (unsigned long)_amount; return 0; } int _lws_plat_file_write(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t* buf, lws_filepos_t len) { DWORD _amount; if (!WriteFile((HANDLE)fop_fd->fd, buf, (DWORD)len, &_amount, NULL)) { *amount = 0; return 1; } fop_fd->pos += _amount; *amount = (unsigned long)_amount; return 0; } int lws_plat_write_cert(struct lws_vhost *vhost, int is_key, int fd, void *buf, int len) { int n; n = write(fd, buf, len); lseek(fd, 0, SEEK_SET); return n != len; } int lws_plat_write_file(const char *filename, void *buf, int len) { int m, fd; fd = lws_open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600); if (fd == -1) return -1; m = write(fd, buf, len); close(fd); return m != len; } int lws_plat_read_file(const char *filename, void *buf, int len) { int n, fd = lws_open(filename, O_RDONLY); if (fd == -1) return -1; n = read(fd, buf, len); close(fd); return n; } libwebsockets-3.2.1/lib/plat/windows/windows-init.c000066400000000000000000000051601357643561300223730ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #include "core/private.h" int lws_plat_drop_app_privileges(struct lws_context *context, int actually_set) { return 0; } int lws_plat_context_early_init(void) { WORD wVersionRequested; WSADATA wsaData; int err; /* Use the MAKEWORD(lowbyte, highbyte) macro from Windef.h */ wVersionRequested = MAKEWORD(2, 2); err = WSAStartup(wVersionRequested, &wsaData); if (!err) return 0; /* * Tell the user that we could not find a usable * Winsock DLL */ lwsl_err("WSAStartup failed with error: %d\n", err); return 1; } int lws_plat_init(struct lws_context *context, const struct lws_context_creation_info *info) { struct lws_context_per_thread *pt = &context->pt[0]; int i, n = context->count_threads; for (i = 0; i < FD_HASHTABLE_MODULUS; i++) { context->fd_hashtable[i].wsi = lws_zalloc(sizeof(struct lws*) * context->max_fds, "win hashtable"); if (!context->fd_hashtable[i].wsi) return -1; } while (n--) { pt->fds_count = 0; pt->events = WSACreateEvent(); /* the cancel event */ InitializeCriticalSection(&pt->interrupt_lock); pt++; } context->fd_random = 0; #ifdef LWS_WITH_PLUGINS if (info->plugin_dirs) lws_plat_plugins_init(context, info->plugin_dirs); #endif return 0; } void lws_plat_context_early_destroy(struct lws_context *context) { struct lws_context_per_thread *pt = &context->pt[0]; int n = context->count_threads; while (n--) { WSACloseEvent(pt->events); DeleteCriticalSection(&pt->interrupt_lock); pt++; } } void lws_plat_context_late_destroy(struct lws_context *context) { int n; for (n = 0; n < FD_HASHTABLE_MODULUS; n++) { if (context->fd_hashtable[n].wsi) lws_free(context->fd_hashtable[n].wsi); } WSACleanup(); } libwebsockets-3.2.1/lib/plat/windows/windows-misc.c000066400000000000000000000044201357643561300223610ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #include "core/private.h" lws_usec_t lws_now_usecs(void) { #ifndef DELTA_EPOCH_IN_MICROSECS #define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL #endif FILETIME filetime; ULARGE_INTEGER datetime; #ifdef _WIN32_WCE GetCurrentFT(&filetime); #else GetSystemTimeAsFileTime(&filetime); #endif /* * As per Windows documentation for FILETIME, copy the resulting * FILETIME structure to a ULARGE_INTEGER structure using memcpy * (using memcpy instead of direct assignment can prevent alignment * faults on 64-bit Windows). */ memcpy(&datetime, &filetime, sizeof(datetime)); /* Windows file times are in 100s of nanoseconds. */ return (datetime.QuadPart / 10) - DELTA_EPOCH_IN_MICROSECS; } #ifdef _WIN32_WCE time_t time(time_t *t) { time_t ret = lws_now_usecs() / 1000000; if(t != NULL) *t = ret; return ret; } #endif LWS_VISIBLE int lws_get_random(struct lws_context *context, void *buf, int len) { int n; char *p = (char *)buf; for (n = 0; n < len; n++) p[n] = (unsigned char)rand(); return n; } LWS_VISIBLE void lwsl_emit_syslog(int level, const char *line) { lwsl_emit_stderr(level, line); } int kill(int pid, int sig) { lwsl_err("Sorry Windows doesn't support kill()."); exit(0); } int fork(void) { lwsl_err("Sorry Windows doesn't support fork()."); exit(0); } int lws_plat_recommended_rsa_bits(void) { return 4096; } libwebsockets-3.2.1/lib/plat/windows/windows-pipe.c000066400000000000000000000025511357643561300223660ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #include "core/private.h" int lws_plat_pipe_create(struct lws *wsi) { return 1; } int lws_plat_pipe_signal(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; EnterCriticalSection(&pt->interrupt_lock); pt->interrupt_requested = 1; LeaveCriticalSection(&pt->interrupt_lock); WSASetEvent(pt->events); /* trigger the cancel event */ return 0; } void lws_plat_pipe_close(struct lws *wsi) { } libwebsockets-3.2.1/lib/plat/windows/windows-plugins.c000066400000000000000000000027121357643561300231110ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #include "core/private.h" int lws_plat_plugins_init(struct lws_context * context, const char * const *d) { #if defined(LWS_WITH_PLUGINS) && (UV_VERSION_MAJOR > 0) if (lws_check_opt(context->options, LWS_SERVER_OPTION_LIBUV)) return lws_uv_plugins_init(context, d); #endif return 0; } int lws_plat_plugins_destroy(struct lws_context * context) { #if defined(LWS_WITH_PLUGINS) && (UV_VERSION_MAJOR > 0) if (lws_check_opt(context->options, LWS_SERVER_OPTION_LIBUV)) return lws_uv_plugins_destroy(context); #endif return 0; } libwebsockets-3.2.1/lib/plat/windows/windows-service.c000066400000000000000000000131021357643561300230630ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #include "core/private.h" int _lws_plat_service_forced_tsi(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; int m, n; lws_service_flag_pending(context, tsi); /* any socket with events to service? */ for (n = 0; n < (int)pt->fds_count; n++) { if (!pt->fds[n].revents) continue; m = lws_service_fd_tsi(context, &pt->fds[n], tsi); if (m < 0) return -1; /* if something closed, retry this slot */ if (m) n--; } lws_service_do_ripe_rxflow(pt); return 0; } LWS_EXTERN int _lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi) { struct lws_context_per_thread *pt; WSANETWORKEVENTS networkevents; struct lws_pollfd *pfd; lws_usec_t timeout_us; struct lws *wsi; unsigned int i; DWORD ev; int n; unsigned int eIdx; int interrupt_requested; /* stay dead once we are dead */ if (context == NULL || !context->vhost_list) return 1; pt = &context->pt[tsi]; if (!pt->service_tid_detected) { struct lws _lws; memset(&_lws, 0, sizeof(_lws)); _lws.context = context; pt->service_tid = context->vhost_list-> protocols[0].callback(&_lws, LWS_CALLBACK_GET_THREAD_ID, NULL, NULL, 0); pt->service_tid_detected = 1; } if (timeout_ms < 0) timeout_ms = 0; else /* force a default timeout of 23 days */ timeout_ms = 2000000000; timeout_us = ((lws_usec_t)timeout_ms) * LWS_US_PER_MS; if (context->event_loop_ops->run_pt) context->event_loop_ops->run_pt(context, tsi); for (i = 0; i < pt->fds_count; ++i) { pfd = &pt->fds[i]; if (!(pfd->events & LWS_POLLOUT)) continue; wsi = wsi_from_fd(context, pfd->fd); if (!wsi || wsi->listener) continue; if (wsi->sock_send_blocking) continue; pfd->revents = LWS_POLLOUT; n = lws_service_fd(context, pfd); if (n < 0) return -1; /* * Force WSAWaitForMultipleEvents() to check events * and then return immediately. */ timeout_us = 0; /* if something closed, retry this slot */ if (n) i--; } /* * is there anybody with pending stuff that needs service forcing? */ if (!lws_service_adjust_timeout(context, 1, tsi)) _lws_plat_service_forced_tsi(context, tsi); /* * service pending callbakcs and get maximum wait time */ { lws_usec_t us; lws_pt_lock(pt, __func__); /* don't stay in poll wait longer than next hr timeout */ us = __lws_sul_service_ripe(&pt->pt_sul_owner, lws_now_usecs()); if (us && us < timeout_us) timeout_us = us; lws_pt_unlock(pt); } for (n = 0; n < (int)pt->fds_count; n++) WSAEventSelect(pt->fds[n].fd, pt->events, FD_READ | (!!(pt->fds[n].events & LWS_POLLOUT) * FD_WRITE) | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE | FD_QOS | FD_ROUTING_INTERFACE_CHANGE | FD_ADDRESS_LIST_CHANGE); ev = WSAWaitForMultipleEvents(1, &pt->events, FALSE, (DWORD)(timeout_us / LWS_US_PER_MS), FALSE); if (ev == WSA_WAIT_EVENT_0) { EnterCriticalSection(&pt->interrupt_lock); interrupt_requested = pt->interrupt_requested; pt->interrupt_requested = 0; LeaveCriticalSection(&pt->interrupt_lock); if (interrupt_requested) { lws_broadcast(pt, LWS_CALLBACK_EVENT_WAIT_CANCELLED, NULL, 0); return 0; } #if defined(LWS_WITH_TLS) if (pt->context->tls_ops && pt->context->tls_ops->fake_POLLIN_for_buffered) pt->context->tls_ops->fake_POLLIN_for_buffered(pt); #endif for (eIdx = 0; eIdx < pt->fds_count; ++eIdx) { unsigned int err; if (WSAEnumNetworkEvents(pt->fds[eIdx].fd, pt->events, &networkevents) == SOCKET_ERROR) { lwsl_err("WSAEnumNetworkEvents() failed " "with error %d\n", LWS_ERRNO); return -1; } if (!networkevents.lNetworkEvents) networkevents.lNetworkEvents = LWS_POLLOUT; pfd = &pt->fds[eIdx]; pfd->revents = (short)networkevents.lNetworkEvents; err = networkevents.iErrorCode[FD_CONNECT_BIT]; if ((networkevents.lNetworkEvents & FD_CONNECT) && err && err != LWS_EALREADY && err != LWS_EINPROGRESS && err != LWS_EWOULDBLOCK && err != WSAEINVAL) { lwsl_debug("Unable to connect errno=%d\n", err); pfd->revents |= LWS_POLLHUP; } if (pfd->revents & LWS_POLLOUT) { wsi = wsi_from_fd(context, pfd->fd); if (wsi) wsi->sock_send_blocking = 0; } /* if something closed, retry this slot */ if (pfd->revents & LWS_POLLHUP) --eIdx; if (pfd->revents) { recv(pfd->fd, NULL, 0, 0); lws_service_fd_tsi(context, pfd, tsi); } } return 0; } // if (ev == WSA_WAIT_TIMEOUT) { } // if (ev == WSA_WAIT_FAILED) // return 0; return 0; } int lws_plat_service(struct lws_context *context, int timeout_ms) { return _lws_plat_service_tsi(context, timeout_ms, 0); } libwebsockets-3.2.1/lib/plat/windows/windows-sockets.c000066400000000000000000000162031357643561300231030ustar00rootroot00000000000000#ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #include "core/private.h" LWS_VISIBLE int lws_send_pipe_choked(struct lws *wsi) { struct lws *wsi_eff; #if defined(LWS_WITH_HTTP2) wsi_eff = lws_get_network_wsi(wsi); #else wsi_eff = wsi; #endif /* the fact we checked implies we avoided back-to-back writes */ wsi_eff->could_have_pending = 0; /* treat the fact we got a truncated send pending as if we're choked */ if (lws_has_buffered_out(wsi_eff) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) ||wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more #endif ) return 1; return (int)wsi_eff->sock_send_blocking; } int lws_poll_listen_fd(struct lws_pollfd *fd) { fd_set readfds; struct timeval tv = { 0, 0 }; assert((fd->events & LWS_POLLIN) == LWS_POLLIN); FD_ZERO(&readfds); FD_SET(fd->fd, &readfds); return select(((int)fd->fd) + 1, &readfds, NULL, NULL, &tv); } int lws_plat_set_nonblocking(int fd) { u_long optl = 1; int result = !!ioctlsocket(fd, FIONBIO, &optl); if (result) { int error = LWS_ERRNO; lwsl_err("ioctlsocket FIONBIO 1 failed with error %d\n", error); } return result; } int lws_plat_set_socket_options(struct lws_vhost *vhost, lws_sockfd_type fd, int unix_skt) { int optval = 1; int optlen = sizeof(optval); DWORD dwBytesRet; struct tcp_keepalive alive; int protonbr; #ifndef _WIN32_WCE struct protoent *tcp_proto; #endif if (vhost->ka_time) { /* enable keepalive on this socket */ optval = 1; if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (const char *)&optval, optlen) < 0) { int error = LWS_ERRNO; lwsl_err("setsockopt SO_KEEPALIVE 1 failed with error %d\n", error); return 1; } alive.onoff = TRUE; alive.keepalivetime = vhost->ka_time * 1000; alive.keepaliveinterval = vhost->ka_interval * 1000; if (WSAIoctl(fd, SIO_KEEPALIVE_VALS, &alive, sizeof(alive), NULL, 0, &dwBytesRet, NULL, NULL)) { int error = LWS_ERRNO; lwsl_err("WSAIoctl SIO_KEEPALIVE_VALS 1 %lu %lu failed with error %d\n", alive.keepalivetime, alive.keepaliveinterval, error); return 1; } } /* Disable Nagle */ optval = 1; #ifndef _WIN32_WCE tcp_proto = getprotobyname("TCP"); if (!tcp_proto) { int error = LWS_ERRNO; lwsl_warn("getprotobyname(\"TCP\") failed with error, falling back to 6 %d\n", error); protonbr = 6; /* IPPROTO_TCP */ } else protonbr = tcp_proto->p_proto; #else protonbr = 6; #endif if (setsockopt(fd, protonbr, TCP_NODELAY, (const char *)&optval, optlen) ) { int error = LWS_ERRNO; lwsl_warn("setsockopt TCP_NODELAY 1 failed with error %d\n", error); } return lws_plat_set_nonblocking(fd); } LWS_EXTERN int lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen) { #ifdef LWS_WITH_IPV6 struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)addr; if (ipv6) { if (lws_plat_inet_pton(AF_INET6, ifname, &addr6->sin6_addr) == 1) { return LWS_ITOSA_USABLE; } } #endif long long address = inet_addr(ifname); if (address == INADDR_NONE) { struct hostent *entry = gethostbyname(ifname); if (entry) address = ((struct in_addr *)entry->h_addr_list[0])->s_addr; } if (address == INADDR_NONE) return LWS_ITOSA_NOT_EXIST; addr->sin_addr.s_addr = (unsigned long)(lws_intptr_t)address; return LWS_ITOSA_USABLE; } void lws_plat_insert_socket_into_fds(struct lws_context *context, struct lws *wsi) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; int n = LWS_POLLIN | LWS_POLLHUP | FD_CONNECT; if (wsi->udp) { lwsl_info("%s: UDP\n", __func__); n = LWS_POLLIN; } pt->fds[pt->fds_count++].revents = 0; WSAEventSelect(wsi->desc.sockfd, pt->events, n); } void lws_plat_delete_socket_from_fds(struct lws_context *context, struct lws *wsi, int m) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; pt->fds_count--; } int lws_plat_check_connection_error(struct lws *wsi) { int optVal; int optLen = sizeof(int); if (getsockopt(wsi->desc.sockfd, SOL_SOCKET, SO_ERROR, (char*)&optVal, &optLen) != SOCKET_ERROR && optVal && optVal != LWS_EALREADY && optVal != LWS_EINPROGRESS && optVal != LWS_EWOULDBLOCK && optVal != WSAEINVAL) { lwsl_debug("Connect failed SO_ERROR=%d\n", optVal); return 1; } return 0; } int lws_plat_change_pollfd(struct lws_context *context, struct lws *wsi, struct lws_pollfd *pfd) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; long e = LWS_POLLHUP | FD_CONNECT; if ((pfd->events & LWS_POLLIN)) e |= LWS_POLLIN; if ((pfd->events & LWS_POLLOUT)) e |= LWS_POLLOUT; if (WSAEventSelect(wsi->desc.sockfd, pt->events, e) != SOCKET_ERROR) return 0; lwsl_err("WSAEventSelect() failed with error %d\n", LWS_ERRNO); return 1; } const char * lws_plat_inet_ntop(int af, const void *src, char *dst, int cnt) { WCHAR *buffer; DWORD bufferlen = cnt; BOOL ok = FALSE; buffer = lws_malloc(bufferlen * 2, "inet_ntop"); if (!buffer) { lwsl_err("Out of memory\n"); return NULL; } if (af == AF_INET) { struct sockaddr_in srcaddr; memset(&srcaddr, 0, sizeof(srcaddr)); srcaddr.sin_family = AF_INET; memcpy(&(srcaddr.sin_addr), src, sizeof(srcaddr.sin_addr)); if (!WSAAddressToStringW((struct sockaddr*)&srcaddr, sizeof(srcaddr), 0, buffer, &bufferlen)) ok = TRUE; #ifdef LWS_WITH_IPV6 } else if (af == AF_INET6) { struct sockaddr_in6 srcaddr; memset(&srcaddr, 0, sizeof(srcaddr)); srcaddr.sin6_family = AF_INET6; memcpy(&(srcaddr.sin6_addr), src, sizeof(srcaddr.sin6_addr)); if (!WSAAddressToStringW((struct sockaddr*)&srcaddr, sizeof(srcaddr), 0, buffer, &bufferlen)) ok = TRUE; #endif } else lwsl_err("Unsupported type\n"); if (!ok) { int rv = WSAGetLastError(); lwsl_err("WSAAddressToString() : %d\n", rv); } else { if (WideCharToMultiByte(CP_ACP, 0, buffer, bufferlen, dst, cnt, 0, NULL) <= 0) ok = FALSE; } lws_free(buffer); return ok ? dst : NULL; } int lws_plat_inet_pton(int af, const char *src, void *dst) { WCHAR *buffer; DWORD bufferlen = (int)strlen(src) + 1; BOOL ok = FALSE; buffer = lws_malloc(bufferlen * 2, "inet_pton"); if (!buffer) { lwsl_err("Out of memory\n"); return -1; } if (MultiByteToWideChar(CP_ACP, 0, src, bufferlen, buffer, bufferlen) <= 0) { lwsl_err("Failed to convert multi byte to wide char\n"); lws_free(buffer); return -1; } if (af == AF_INET) { struct sockaddr_in dstaddr; int dstaddrlen = sizeof(dstaddr); memset(&dstaddr, 0, sizeof(dstaddr)); dstaddr.sin_family = AF_INET; if (!WSAStringToAddressW(buffer, af, 0, (struct sockaddr *) &dstaddr, &dstaddrlen)) { ok = TRUE; memcpy(dst, &dstaddr.sin_addr, sizeof(dstaddr.sin_addr)); } #ifdef LWS_WITH_IPV6 } else if (af == AF_INET6) { struct sockaddr_in6 dstaddr; int dstaddrlen = sizeof(dstaddr); memset(&dstaddr, 0, sizeof(dstaddr)); dstaddr.sin6_family = AF_INET6; if (!WSAStringToAddressW(buffer, af, 0, (struct sockaddr *) &dstaddr, &dstaddrlen)) { ok = TRUE; memcpy(dst, &dstaddr.sin6_addr, sizeof(dstaddr.sin6_addr)); } #endif } else lwsl_err("Unsupported type\n"); if (!ok) { int rv = WSAGetLastError(); lwsl_err("WSAAddressToString() : %d\n", rv); } lws_free(buffer); return ok ? 1 : -1; } libwebsockets-3.2.1/lib/roles/000077500000000000000000000000001357643561300162645ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/README.md000066400000000000000000000127071357643561300175520ustar00rootroot00000000000000## Information for new role implementers ### Introduction In lws the "role" is the job the wsi is doing in the system, eg, being an http1 or h2, or ws connection, or being a listen socket, etc. This is different than, eg, a new ws protocol or a different callback for an existing role. A new role is needed when you want to add support for something completely new, like a completely new wire protocol that doesn't use http or ws. So... what's the point of implementing the protocol inside the lws role framework? You inherit all the well-maintained lws core functionality around: - connection lifecycle sequencing in a valgrind-clean way - proxy support, HTTP and Socks5 - tls support working equally on mbedTLS and OpenSSL and derivatives without any code in the role - apis for cert lifecycle management and parsing - event loop support working on all the lws event loops (poll, libuv , ev, and event) - clean connection tracking and closing even on advanced event loops - user code follows the same simple callbacks on wsi - multi-vhost support - core multithreaded service support with usually no locking requirement on the role code - direct compatibility with all other lws roles + protocols in the same event loop - compatibility with higher-level stuff like lwsws as the server application ### Code placement The code specific to that role should live in `./lib/roles/**role name**` If a role is asymmetic between a client and server side, like http is, it should generally be implemented as a single role. ### Allowing control over enabling roles All roles should add a cmake define `LWS_ROLE_**role name**` and make its build dependent on it in CMakeLists.txt. Export the cmakedefine in `./cmake/lws_config.h.in` as well so user builds can understand if the role is available in the lws build it is trying to bind to. If the role is disabled in cmake, nothing in its directory is built. ### Role ops struct The role is defined by `struct lws_role_ops` in `lib/roles/private.h`, each role instantiates one of these and fills in the appropriate ops callbacks to perform its job. By convention that lives in `./lib/roles/**role name**/ops-**role_name**.c`. ### Private role declarations Truly private declarations for the role can go in the role directory as you like. However when the declarations must be accessible to other things in lws build, eg, the role adds members to `struct lws` when enabled, they should be in the role directory in a file `private.h`. Search for "bring in role private declarations" in `./lib/roles/private.h and add your private role file there following the style used for the other roles, eg, ``` #if defined(LWS_ROLE_WS) #include "roles/ws/private.h" #else #define lwsi_role_ws(wsi) (0) #endif ``` If the role is disabled at cmake, nothing from its private.h should be used anywhere. ### Integrating role assets to lws If your role needs special storage in lws objects, that's no problem. But to keep things sane, there are some rules. - declare a "container struct" in your private.h for everything, eg, the ws role wants to add storage in lws_vhost for enabled extensions, it declares in its private.h ``` struct lws_vhost_role_ws { #if !defined(LWS_WITHOUT_EXTENSIONS) const struct lws_extension *extensions; #endif }; ``` - add your role content in one place in the lws struct, protected by `#if defined(LWS_ROLE_**role name**)`, eg, again for LWS_ROLE_WS ``` struct lws_vhost { ... #if defined(LWS_ROLE_WS) struct lws_vhost_role_ws ws; #endif ... ``` ### Adding to lws available roles list Edit the NULL-terminated array `available_roles` at the top of `./lib/core/context.c` to include a pointer to your new role's ops struct, following the style already there. ``` const struct lws_role_ops * available_roles[] = { #if defined(LWS_ROLE_H2) &role_ops_h2, #endif ... ``` This makes lws aware that your role exists, and it can auto-generate some things like ALPN lists, and call your role ops callbacks for things like hooking vhost creation. ### Enabling role adoption The primary way wsi get bound to a specific role is via the lws adoption api `lws_adopt_descriptor_vhost()`. Add flags as necessary in `./include/libwebsockets/lws-adopt.h` `enum lws_adoption_type` and follow the existing code in `lws_adopt_descriptor_vhost()` to bind a wsi with suitable flags to your role ops. ### Implementation of the role After that plumbing-in is completed, the role ops you declare are "live" on a wsi bound to them via the adoption api. The core support for wsis in lws has some generic concepts - the wsi holds a pointer member `role_ops` that indicates which role ops the wsi is bound to - the wsi holds a generic uint32 `wsistate` that contains role flags and wsi state - role flags are provided (LWSIFR_CLIENT, LWSIFR_SERVER) to differentiate between client and server connections inside a wsi, along with helpers `lwsi_role_client(wsi)` and `lwsi_role_server(wsi)`. - lws provides around 30 generic states for the wsi starting from 'unconnected' through various proxy or tunnel states, to 'established', and then various states shutting down until 'dead socket'. The states have testable flags and helpers to discover if the wsi state is before establishment `lwsi_state_est(wsi)` and if in the state it is in, it can handle pollout `lwsi_state_can_handle_POLLOUT(wsi)`. - You set the initial binding, role flags and state using `lws_role_transition()`. Afterwards you can adjust the state using `lwsi_set_state()`. libwebsockets-3.2.1/lib/roles/cgi/000077500000000000000000000000001357643561300170265ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/cgi/cgi-server.c000066400000000000000000000755221357643561300212530ustar00rootroot00000000000000/* * libwebsockets - CGI management * * Copyright (C) 2010-2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #define _GNU_SOURCE #include "core/private.h" #if defined(WIN32) || defined(_WIN32) #else #include #endif static const char *hex = "0123456789ABCDEF"; static int urlencode(const char *in, int inlen, char *out, int outlen) { char *start = out, *end = out + outlen; while (inlen-- && out < end - 4) { if ((*in >= 'A' && *in <= 'Z') || (*in >= 'a' && *in <= 'z') || (*in >= '0' && *in <= '9') || *in == '-' || *in == '_' || *in == '.' || *in == '~') { *out++ = *in++; continue; } if (*in == ' ') { *out++ = '+'; in++; continue; } *out++ = '%'; *out++ = hex[(*in) >> 4]; *out++ = hex[(*in++) & 15]; } *out = '\0'; if (out >= end - 4) return -1; return out - start; } static struct lws * lws_create_basic_wsi(struct lws_context *context, int tsi) { struct lws *new_wsi; if (!context->vhost_list) return NULL; if ((unsigned int)context->pt[tsi].fds_count == context->fd_limit_per_thread - 1) { lwsl_err("no space for new conn\n"); return NULL; } new_wsi = lws_zalloc(sizeof(struct lws), "new wsi"); if (new_wsi == NULL) { lwsl_err("Out of memory for new connection\n"); return NULL; } new_wsi->tsi = tsi; new_wsi->context = context; new_wsi->pending_timeout = NO_PENDING_TIMEOUT; new_wsi->rxflow_change_to = LWS_RXFLOW_ALLOW; /* initialize the instance struct */ lws_role_transition(new_wsi, 0, LRS_ESTABLISHED, &role_ops_cgi); new_wsi->hdr_parsing_completed = 0; new_wsi->position_in_fds_table = LWS_NO_FDS_POS; /* * these can only be set once the protocol is known * we set an unestablished connection's protocol pointer * to the start of the defauly vhost supported list, so it can look * for matching ones during the handshake */ new_wsi->protocol = context->vhost_list->protocols; new_wsi->user_space = NULL; new_wsi->desc.sockfd = LWS_SOCK_INVALID; context->count_wsi_allocated++; return new_wsi; } LWS_VISIBLE LWS_EXTERN int lws_cgi(struct lws *wsi, const char * const *exec_array, int script_uri_path_len, int timeout_secs, const struct lws_protocol_vhost_options *mp_cgienv) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; char *env_array[30], cgi_path[500], e[1024], *p = e, *end = p + sizeof(e) - 1, tok[256], *t, *sum, *sumend; struct lws_cgi *cgi; int n, m = 0, i, uritok = -1, c; /* * give the master wsi a cgi struct */ wsi->http.cgi = lws_zalloc(sizeof(*wsi->http.cgi), "new cgi"); if (!wsi->http.cgi) { lwsl_err("%s: OOM\n", __func__); return -1; } wsi->http.cgi->response_code = HTTP_STATUS_OK; cgi = wsi->http.cgi; cgi->wsi = wsi; /* set cgi's owning wsi */ sum = cgi->summary; sumend = sum + strlen(cgi->summary) - 1; for (n = 0; n < 3; n++) { cgi->pipe_fds[n][0] = -1; cgi->pipe_fds[n][1] = -1; } /* create pipes for [stdin|stdout] and [stderr] */ for (n = 0; n < 3; n++) if (pipe(cgi->pipe_fds[n]) == -1) goto bail1; /* create cgi wsis for each stdin/out/err fd */ for (n = 0; n < 3; n++) { cgi->stdwsi[n] = lws_create_basic_wsi(wsi->context, wsi->tsi); if (!cgi->stdwsi[n]) { lwsl_err("%s: unable to create cgi stdwsi\n", __func__); goto bail2; } cgi->stdwsi[n]->cgi_channel = n; lws_vhost_bind_wsi(wsi->vhost, cgi->stdwsi[n]); lwsl_debug("%s: cgi stdwsi %p: pipe idx %d -> fd %d / %d\n", __func__, cgi->stdwsi[n], n, cgi->pipe_fds[n][!!(n == 0)], cgi->pipe_fds[n][!(n == 0)]); /* read side is 0, stdin we want the write side, others read */ cgi->stdwsi[n]->desc.sockfd = cgi->pipe_fds[n][!!(n == 0)]; if (fcntl(cgi->pipe_fds[n][!!(n == 0)], F_SETFL, O_NONBLOCK) < 0) { lwsl_err("%s: setting NONBLOCK failed\n", __func__); goto bail2; } } for (n = 0; n < 3; n++) { if (wsi->context->event_loop_ops->accept) if (wsi->context->event_loop_ops->accept(cgi->stdwsi[n])) goto bail3; if (__insert_wsi_socket_into_fds(wsi->context, cgi->stdwsi[n])) goto bail3; cgi->stdwsi[n]->parent = wsi; cgi->stdwsi[n]->sibling_list = wsi->child_list; wsi->child_list = cgi->stdwsi[n]; } if (lws_change_pollfd(cgi->stdwsi[LWS_STDIN], LWS_POLLIN, LWS_POLLOUT)) goto bail3; if (lws_change_pollfd(cgi->stdwsi[LWS_STDOUT], LWS_POLLOUT, LWS_POLLIN)) goto bail3; if (lws_change_pollfd(cgi->stdwsi[LWS_STDERR], LWS_POLLOUT, LWS_POLLIN)) goto bail3; lwsl_debug("%s: fds in %d, out %d, err %d\n", __func__, cgi->stdwsi[LWS_STDIN]->desc.sockfd, cgi->stdwsi[LWS_STDOUT]->desc.sockfd, cgi->stdwsi[LWS_STDERR]->desc.sockfd); if (timeout_secs) lws_set_timeout(wsi, PENDING_TIMEOUT_CGI, timeout_secs); /* the cgi stdout is always sending us http1.x header data first */ wsi->hdr_state = LCHS_HEADER; /* add us to the pt list of active cgis */ lwsl_debug("%s: adding cgi %p to list\n", __func__, wsi->http.cgi); cgi->cgi_list = pt->http.cgi_list; pt->http.cgi_list = cgi; sum += lws_snprintf(sum, sumend - sum, "%s ", exec_array[0]); if (0) { char *pct = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_ENCODING); if (pct && !strcmp(pct, "gzip")) wsi->http.cgi->gzip_inflate = 1; } /* prepare his CGI env */ n = 0; if (lws_is_ssl(wsi)) { env_array[n++] = p; p += lws_snprintf(p, end - p, "HTTPS=ON"); p++; } if (wsi->http.ah) { static const unsigned char meths[] = { WSI_TOKEN_GET_URI, WSI_TOKEN_POST_URI, WSI_TOKEN_OPTIONS_URI, WSI_TOKEN_PUT_URI, WSI_TOKEN_PATCH_URI, WSI_TOKEN_DELETE_URI, WSI_TOKEN_CONNECT, WSI_TOKEN_HEAD_URI, #ifdef LWS_WITH_HTTP2 WSI_TOKEN_HTTP_COLON_PATH, #endif }; static const char * const meth_names[] = { "GET", "POST", "OPTIONS", "PUT", "PATCH", "DELETE", "CONNECT", "HEAD", ":path" }; if (script_uri_path_len >= 0) for (m = 0; m < (int)LWS_ARRAY_SIZE(meths); m++) if (lws_hdr_total_length(wsi, meths[m]) >= script_uri_path_len) { uritok = meths[m]; break; } if (script_uri_path_len < 0 && uritok < 0) goto bail3; // if (script_uri_path_len < 0) // uritok = 0; if (m >= 0) { env_array[n++] = p; if (m < 8) { p += lws_snprintf(p, end - p, "REQUEST_METHOD=%s", meth_names[m]); sum += lws_snprintf(sum, sumend - sum, "%s ", meth_names[m]); } else { p += lws_snprintf(p, end - p, "REQUEST_METHOD=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD)); sum += lws_snprintf(sum, sumend - sum, "%s ", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD)); } p++; } if (uritok >= 0) sum += lws_snprintf(sum, sumend - sum, "%s ", lws_hdr_simple_ptr(wsi, uritok)); env_array[n++] = p; p += lws_snprintf(p, end - p, "QUERY_STRING="); /* dump the individual URI Arg parameters */ m = 0; while (script_uri_path_len >= 0) { i = lws_hdr_copy_fragment(wsi, tok, sizeof(tok), WSI_TOKEN_HTTP_URI_ARGS, m); if (i < 0) break; t = tok; while (*t && *t != '=' && p < end - 4) *p++ = *t++; if (*t == '=') *p++ = *t++; i = urlencode(t, i- (t - tok), p, end - p); if (i > 0) { p += i; *p++ = '&'; } m++; } if (m) p--; *p++ = '\0'; if (uritok >= 0) { strcpy(cgi_path, "REQUEST_URI="); c = lws_hdr_copy(wsi, cgi_path + 12, sizeof(cgi_path) - 12, uritok); if (c < 0) goto bail3; cgi_path[sizeof(cgi_path) - 1] = '\0'; env_array[n++] = cgi_path; } sum += lws_snprintf(sum, sumend - sum, "%s", env_array[n - 1]); if (script_uri_path_len >= 0) { env_array[n++] = p; p += lws_snprintf(p, end - p, "PATH_INFO=%s", cgi_path + 12 + script_uri_path_len); p++; } } if (script_uri_path_len >= 0 && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_REFERER)) { env_array[n++] = p; p += lws_snprintf(p, end - p, "HTTP_REFERER=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_REFERER)); p++; } if (script_uri_path_len >= 0 && lws_hdr_total_length(wsi, WSI_TOKEN_HOST)) { env_array[n++] = p; p += lws_snprintf(p, end - p, "HTTP_HOST=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST)); p++; } if (script_uri_path_len >= 0 && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COOKIE)) { env_array[n++] = p; p += lws_snprintf(p, end - p, "HTTP_COOKIE="); m = lws_hdr_copy(wsi, p, end - p, WSI_TOKEN_HTTP_COOKIE); if (m > 0) p += lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COOKIE); *p++ = '\0'; } if (script_uri_path_len >= 0 && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_USER_AGENT)) { env_array[n++] = p; p += lws_snprintf(p, end - p, "HTTP_USER_AGENT=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_USER_AGENT)); p++; } if (script_uri_path_len >= 0 && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_ENCODING)) { env_array[n++] = p; p += lws_snprintf(p, end - p, "HTTP_CONTENT_ENCODING=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_ENCODING)); p++; } if (script_uri_path_len >= 0 && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_ACCEPT)) { env_array[n++] = p; p += lws_snprintf(p, end - p, "HTTP_ACCEPT=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_ACCEPT)); p++; } if (script_uri_path_len >= 0 && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_ACCEPT_ENCODING)) { env_array[n++] = p; p += lws_snprintf(p, end - p, "HTTP_ACCEPT_ENCODING=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_ACCEPT_ENCODING)); p++; } if (script_uri_path_len >= 0 && uritok == WSI_TOKEN_POST_URI) { if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE)) { env_array[n++] = p; p += lws_snprintf(p, end - p, "CONTENT_TYPE=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE)); p++; } if (!wsi->http.cgi->gzip_inflate && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) { env_array[n++] = p; p += lws_snprintf(p, end - p, "CONTENT_LENGTH=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)); p++; } if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) wsi->http.cgi->post_in_expected = atoll(lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)); } env_array[n++] = p; p += lws_snprintf(p, end - p, "PATH=/bin:/usr/bin:/usr/local/bin:/var/www/cgi-bin"); p++; env_array[n++] = p; p += lws_snprintf(p, end - p, "SCRIPT_PATH=%s", exec_array[0]); p++; while (mp_cgienv) { env_array[n++] = p; p += lws_snprintf(p, end - p, "%s=%s", mp_cgienv->name, mp_cgienv->value); if (!strcmp(mp_cgienv->name, "GIT_PROJECT_ROOT")) { wsi->http.cgi->implied_chunked = 1; wsi->http.cgi->explicitly_chunked = 1; } lwsl_info(" Applying mount-specific cgi env '%s'\n", env_array[n - 1]); p++; mp_cgienv = mp_cgienv->next; } env_array[n++] = p; p += lws_snprintf(p, end - p, "SERVER_SOFTWARE=libwebsockets"); p++; env_array[n] = NULL; #if 0 for (m = 0; m < n; m++) lwsl_notice(" %s\n", env_array[m]); #endif /* * Actually having made the env, as a cgi we don't need the ah * any more */ if (script_uri_path_len >= 0) lws_header_table_detach(wsi, 0); /* we are ready with the redirection pipes... run the thing */ #if !defined(LWS_HAVE_VFORK) || !defined(LWS_HAVE_EXECVPE) cgi->pid = fork(); #else cgi->pid = vfork(); #endif if (cgi->pid < 0) { lwsl_err("fork failed, errno %d", errno); goto bail3; } #if defined(__linux__) prctl(PR_SET_PDEATHSIG, SIGTERM); #endif if (script_uri_path_len >= 0) /* stops non-daemonized main processess getting SIGINT * from TTY */ setpgrp(); if (cgi->pid) { /* we are the parent process */ wsi->context->count_cgi_spawned++; lwsl_info("%s: cgi %p spawned PID %d\n", __func__, cgi, cgi->pid); /* * close: stdin:r, stdout:w, stderr:w * hide from other forks: stdin:w, stdout:r, stderr:r */ for (n = 0; n < 3; n++) { lws_plat_apply_FD_CLOEXEC(cgi->pipe_fds[n][!!(n == 0)]); close(cgi->pipe_fds[n][!(n == 0)]); } /* inform cgi owner of the child PID */ n = user_callback_handle_rxflow(wsi->protocol->callback, wsi, LWS_CALLBACK_CGI_PROCESS_ATTACH, wsi->user_space, NULL, cgi->pid); (void)n; return 0; } /* somewhere we can at least read things and enter it */ if (chdir("/tmp")) lwsl_notice("%s: Failed to chdir\n", __func__); /* We are the forked process, redirect and kill inherited things. * * Because of vfork(), we cannot do anything that changes pages in * the parent environment. Stuff that changes kernel state for the * process is OK. Stuff that happens after the execvpe() is OK. */ for (m = 0; m < 3; m++) { if (dup2(cgi->pipe_fds[m][!(m == 0)], m) < 0) { lwsl_err("%s: stdin dup2 failed\n", __func__); goto bail3; } close(cgi->pipe_fds[m][0]); close(cgi->pipe_fds[m][1]); } #if !defined(LWS_HAVE_VFORK) || !defined(LWS_HAVE_EXECVPE) for (m = 0; m < n; m++) { p = strchr(env_array[m], '='); *p++ = '\0'; setenv(env_array[m], p, 1); } execvp(exec_array[0], (char * const *)&exec_array[0]); #else execvpe(exec_array[0], (char * const *)&exec_array[0], &env_array[0]); #endif exit(1); bail3: /* drop us from the pt cgi list */ pt->http.cgi_list = cgi->cgi_list; while (--n >= 0) __remove_wsi_socket_from_fds(wsi->http.cgi->stdwsi[n]); bail2: for (n = 0; n < 3; n++) if (wsi->http.cgi->stdwsi[n]) __lws_free_wsi(cgi->stdwsi[n]); bail1: for (n = 0; n < 3; n++) { if (cgi->pipe_fds[n][0] >= 0) close(cgi->pipe_fds[n][0]); if (cgi->pipe_fds[n][1] >= 0) close(cgi->pipe_fds[n][1]); } lws_free_set_NULL(wsi->http.cgi); lwsl_err("%s: failed\n", __func__); return -1; } /* we have to parse out these headers in the CGI output */ static const char * const significant_hdr[SIGNIFICANT_HDR_COUNT] = { "content-length: ", "location: ", "status: ", "transfer-encoding: chunked", "content-encoding: gzip", }; enum header_recode { HR_NAME, HR_WHITESPACE, HR_ARG, HR_CRLF, }; LWS_VISIBLE LWS_EXTERN int lws_cgi_write_split_stdout_headers(struct lws *wsi) { int n, m, cmd; unsigned char buf[LWS_PRE + 4096], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1 - LWS_PRE], *name, *value = NULL; char c, hrs; if (!wsi->http.cgi) return -1; while (wsi->hdr_state != LHCS_PAYLOAD) { /* * We have to separate header / finalize and payload chunks, * since they need to be handled separately */ switch (wsi->hdr_state) { case LHCS_RESPONSE: lwsl_debug("LHCS_RESPONSE: issuing response %d\n", wsi->http.cgi->response_code); if (lws_add_http_header_status(wsi, wsi->http.cgi->response_code, &p, end)) return 1; if (!wsi->http.cgi->explicitly_chunked && !wsi->http.cgi->content_length && lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_TRANSFER_ENCODING, (unsigned char *)"chunked", 7, &p, end)) return 1; if (!(wsi->http2_substream)) if (lws_add_http_header_by_token(wsi, WSI_TOKEN_CONNECTION, (unsigned char *)"close", 5, &p, end)) return 1; n = lws_write(wsi, start, p - start, LWS_WRITE_HTTP_HEADERS | LWS_WRITE_NO_FIN); /* * so we have a bunch of http/1 style ascii headers * starting from wsi->http.cgi->headers_buf through * wsi->http.cgi->headers_pos. These are OK for http/1 * connections, but they're no good for http/2 conns. * * Let's redo them at headers_pos forward using the * correct coding for http/1 or http/2 */ if (!wsi->http2_substream) goto post_hpack_recode; p = wsi->http.cgi->headers_start; wsi->http.cgi->headers_start = wsi->http.cgi->headers_pos; wsi->http.cgi->headers_dumped = wsi->http.cgi->headers_start; hrs = HR_NAME; name = buf; while (p < wsi->http.cgi->headers_start) { switch (hrs) { case HR_NAME: /* * in http/2 upper-case header names * are illegal. So convert to lower- * case. */ if (name - buf > 64) return -1; if (*p != ':') { if (*p >= 'A' && *p <= 'Z') *name++ = (*p++) + ('a' - 'A'); else *name++ = *p++; } else { p++; *name++ = '\0'; value = name; hrs = HR_WHITESPACE; } break; case HR_WHITESPACE: if (*p == ' ') { p++; break; } hrs = HR_ARG; /* fallthru */ case HR_ARG: if (name > end - 64) return -1; if (*p != '\x0a' && *p != '\x0d') { *name++ = *p++; break; } hrs = HR_CRLF; /* fallthru */ case HR_CRLF: if ((*p != '\x0a' && *p != '\x0d') || p + 1 == wsi->http.cgi->headers_start) { *name = '\0'; if ((strcmp((const char *)buf, "transfer-encoding") )) { lwsl_debug("+ %s: %s\n", buf, value); if ( lws_add_http_header_by_name(wsi, buf, (unsigned char *)value, name - value, (unsigned char **)&wsi->http.cgi->headers_pos, (unsigned char *)wsi->http.cgi->headers_end)) return 1; hrs = HR_NAME; name = buf; break; } } p++; break; } } post_hpack_recode: /* finalize cached headers before dumping them */ if (lws_finalize_http_header(wsi, (unsigned char **)&wsi->http.cgi->headers_pos, (unsigned char *)wsi->http.cgi->headers_end)) { lwsl_notice("finalize failed\n"); return -1; } wsi->hdr_state = LHCS_DUMP_HEADERS; wsi->reason_bf |= LWS_CB_REASON_AUX_BF__CGI_HEADERS; lws_callback_on_writable(wsi); /* back to the loop for writeability again */ return 0; case LHCS_DUMP_HEADERS: n = wsi->http.cgi->headers_pos - wsi->http.cgi->headers_dumped; if (n > 512) n = 512; lwsl_debug("LHCS_DUMP_HEADERS: %d\n", n); cmd = LWS_WRITE_HTTP_HEADERS_CONTINUATION; if (wsi->http.cgi->headers_dumped + n != wsi->http.cgi->headers_pos) { lwsl_notice("adding no fin flag\n"); cmd |= LWS_WRITE_NO_FIN; } m = lws_write(wsi, (unsigned char *)wsi->http.cgi->headers_dumped, n, cmd); if (m < 0) { lwsl_debug("%s: write says %d\n", __func__, m); return -1; } wsi->http.cgi->headers_dumped += n; if (wsi->http.cgi->headers_dumped == wsi->http.cgi->headers_pos) { wsi->hdr_state = LHCS_PAYLOAD; lws_free_set_NULL(wsi->http.cgi->headers_buf); lwsl_debug("freed cgi headers\n"); } else { wsi->reason_bf |= LWS_CB_REASON_AUX_BF__CGI_HEADERS; lws_callback_on_writable(wsi); } /* writeability becomes uncertain now we wrote * something, we must return to the event loop */ return 0; } if (!wsi->http.cgi->headers_buf) { /* if we don't already have a headers buf, cook one */ n = 2048; if (wsi->http2_substream) n = 4096; wsi->http.cgi->headers_buf = lws_malloc(n + LWS_PRE, "cgi hdr buf"); if (!wsi->http.cgi->headers_buf) { lwsl_err("OOM\n"); return -1; } lwsl_debug("allocated cgi hdrs\n"); wsi->http.cgi->headers_start = wsi->http.cgi->headers_buf + LWS_PRE; wsi->http.cgi->headers_pos = wsi->http.cgi->headers_start; wsi->http.cgi->headers_dumped = wsi->http.cgi->headers_pos; wsi->http.cgi->headers_end = wsi->http.cgi->headers_buf + n - 1; for (n = 0; n < SIGNIFICANT_HDR_COUNT; n++) { wsi->http.cgi->match[n] = 0; wsi->http.cgi->lp = 0; } } n = lws_get_socket_fd(wsi->http.cgi->stdwsi[LWS_STDOUT]); if (n < 0) return -1; n = read(n, &c, 1); if (n < 0) { if (errno != EAGAIN) { lwsl_debug("%s: read says %d\n", __func__, n); return -1; } else n = 0; if (wsi->http.cgi->headers_pos >= wsi->http.cgi->headers_end - 4) { lwsl_notice("CGI hdrs > buf size\n"); return -1; } } if (!n) goto agin; lwsl_debug("-- 0x%02X %c %d %d\n", (unsigned char)c, c, wsi->http.cgi->match[1], wsi->hdr_state); if (!c) return -1; switch (wsi->hdr_state) { case LCHS_HEADER: hdr: for (n = 0; n < SIGNIFICANT_HDR_COUNT; n++) { /* * significant headers with * numeric decimal payloads */ if (!significant_hdr[n][wsi->http.cgi->match[n]] && (c >= '0' && c <= '9') && wsi->http.cgi->lp < (int)sizeof(wsi->http.cgi->l) - 1) { wsi->http.cgi->l[wsi->http.cgi->lp++] = c; wsi->http.cgi->l[wsi->http.cgi->lp] = '\0'; switch (n) { case SIGNIFICANT_HDR_CONTENT_LENGTH: wsi->http.cgi->content_length = atoll(wsi->http.cgi->l); break; case SIGNIFICANT_HDR_STATUS: wsi->http.cgi->response_code = atol(wsi->http.cgi->l); lwsl_debug("Status set to %d\n", wsi->http.cgi->response_code); break; default: break; } } /* hits up to the NUL are sticky until next hdr */ if (significant_hdr[n][wsi->http.cgi->match[n]]) { if (tolower(c) == significant_hdr[n][wsi->http.cgi->match[n]]) wsi->http.cgi->match[n]++; else wsi->http.cgi->match[n] = 0; } } /* some cgi only send us \x0a for EOL */ if (c == '\x0a') { wsi->hdr_state = LCHS_SINGLE_0A; *wsi->http.cgi->headers_pos++ = '\x0d'; } *wsi->http.cgi->headers_pos++ = c; if (c == '\x0d') wsi->hdr_state = LCHS_LF1; if (wsi->hdr_state != LCHS_HEADER && !significant_hdr[SIGNIFICANT_HDR_TRANSFER_ENCODING] [wsi->http.cgi->match[ SIGNIFICANT_HDR_TRANSFER_ENCODING]]) { lwsl_info("cgi produced chunked\n"); wsi->http.cgi->explicitly_chunked = 1; } /* presence of Location: mandates 302 retcode */ if (wsi->hdr_state != LCHS_HEADER && !significant_hdr[SIGNIFICANT_HDR_LOCATION][ wsi->http.cgi->match[SIGNIFICANT_HDR_LOCATION]]) { lwsl_debug("CGI: Location hdr seen\n"); wsi->http.cgi->response_code = 302; } break; case LCHS_LF1: *wsi->http.cgi->headers_pos++ = c; if (c == '\x0a') { wsi->hdr_state = LCHS_CR2; break; } /* we got \r[^\n]... it's unreasonable */ lwsl_debug("%s: funny CRLF 0x%02X\n", __func__, (unsigned char)c); return -1; case LCHS_CR2: if (c == '\x0d') { /* drop the \x0d */ wsi->hdr_state = LCHS_LF2; break; } wsi->hdr_state = LCHS_HEADER; for (n = 0; n < SIGNIFICANT_HDR_COUNT; n++) wsi->http.cgi->match[n] = 0; wsi->http.cgi->lp = 0; goto hdr; case LCHS_LF2: case LCHS_SINGLE_0A: m = wsi->hdr_state; if (c == '\x0a') { lwsl_debug("Content-Length: %lld\n", (unsigned long long) wsi->http.cgi->content_length); wsi->hdr_state = LHCS_RESPONSE; /* * drop the \0xa ... finalize * will add it if needed (HTTP/1) */ break; } if (m == LCHS_LF2) /* we got \r\n\r[^\n]... unreasonable */ return -1; /* we got \x0anext header, it's reasonable */ *wsi->http.cgi->headers_pos++ = c; wsi->hdr_state = LCHS_HEADER; for (n = 0; n < SIGNIFICANT_HDR_COUNT; n++) wsi->http.cgi->match[n] = 0; wsi->http.cgi->lp = 0; break; case LHCS_PAYLOAD: break; } agin: /* ran out of input, ended the hdrs, or filled up the hdrs buf */ if (!n || wsi->hdr_state == LHCS_PAYLOAD) return 0; } /* payload processing */ m = !wsi->http.cgi->implied_chunked && !wsi->http2_substream && !wsi->http.cgi->explicitly_chunked && !wsi->http.cgi->content_length; n = lws_get_socket_fd(wsi->http.cgi->stdwsi[LWS_STDOUT]); if (n < 0) return -1; if (m) { uint8_t term[LWS_PRE + 6]; lwsl_info("%s: zero chunk\n", __func__); memcpy(term + LWS_PRE, (uint8_t *)"0\x0d\x0a\x0d\x0a", 5); if (lws_write(wsi, term + LWS_PRE, 5, LWS_WRITE_HTTP_FINAL) != 5) return -1; wsi->http.cgi->cgi_transaction_over = 1; return 0; } n = read(n, start, sizeof(buf) - LWS_PRE); if (n < 0 && errno != EAGAIN) { lwsl_debug("%s: stdout read says %d\n", __func__, n); return -1; } if (n > 0) { /* if (!wsi->http2_substream && m) { char chdr[LWS_HTTP_CHUNK_HDR_SIZE]; m = lws_snprintf(chdr, LWS_HTTP_CHUNK_HDR_SIZE - 3, "%X\x0d\x0a", n); memmove(start + m, start, n); memcpy(start, chdr, m); memcpy(start + m + n, "\x0d\x0a", 2); n += m + 2; } */ #if defined(LWS_WITH_HTTP2) if (wsi->http2_substream) { struct lws *nwsi = lws_get_network_wsi(wsi); __lws_set_timeout(wsi, PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE, 31); if (!nwsi->immortal_substream_count) __lws_set_timeout(nwsi, PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE, 31); } #endif cmd = LWS_WRITE_HTTP; if (wsi->http.cgi->content_length_seen + n == wsi->http.cgi->content_length) cmd = LWS_WRITE_HTTP_FINAL; m = lws_write(wsi, (unsigned char *)start, n, cmd); //lwsl_notice("write %d\n", m); if (m < 0) { lwsl_debug("%s: stdout write says %d\n", __func__, m); return -1; } wsi->http.cgi->content_length_seen += n; } else { if (wsi->cgi_stdout_zero_length) { lwsl_debug("%s: stdout is POLLHUP'd\n", __func__); if (wsi->http2_substream) m = lws_write(wsi, (unsigned char *)start, 0, LWS_WRITE_HTTP_FINAL); else return -1; return 1; } wsi->cgi_stdout_zero_length = 1; } return 0; } LWS_VISIBLE LWS_EXTERN int lws_cgi_kill(struct lws *wsi) { struct lws_cgi_args args; int status, n; lwsl_debug("%s: %p\n", __func__, wsi); if (!wsi->http.cgi) return 0; if (wsi->http.cgi->pid > 0) { n = waitpid(wsi->http.cgi->pid, &status, WNOHANG); if (n > 0) { lwsl_debug("%s: PID %d reaped\n", __func__, wsi->http.cgi->pid); goto handled; } /* kill the process group */ n = kill(-wsi->http.cgi->pid, SIGTERM); lwsl_debug("%s: SIGTERM child PID %d says %d (errno %d)\n", __func__, wsi->http.cgi->pid, n, errno); if (n < 0) { /* * hum seen errno=3 when process is listed in ps, * it seems we don't always retain process grouping * * Direct these fallback attempt to the exact child */ n = kill(wsi->http.cgi->pid, SIGTERM); if (n < 0) { n = kill(wsi->http.cgi->pid, SIGPIPE); if (n < 0) { n = kill(wsi->http.cgi->pid, SIGKILL); if (n < 0) lwsl_info("%s: SIGKILL PID %d " "failed errno %d " "(maybe zombie)\n", __func__, wsi->http.cgi->pid, errno); } } } /* He could be unkillable because he's a zombie */ n = 1; while (n > 0) { n = waitpid(-wsi->http.cgi->pid, &status, WNOHANG); if (n > 0) lwsl_debug("%s: reaped PID %d\n", __func__, n); if (n <= 0) { n = waitpid(wsi->http.cgi->pid, &status, WNOHANG); if (n > 0) lwsl_debug("%s: reaped PID %d\n", __func__, n); } } } handled: args.stdwsi = &wsi->http.cgi->stdwsi[0]; if (wsi->http.cgi->pid != -1) { n = user_callback_handle_rxflow(wsi->protocol->callback, wsi, LWS_CALLBACK_CGI_TERMINATED, wsi->user_space, (void *)&args, wsi->http.cgi->pid); wsi->http.cgi->pid = -1; if (n && !wsi->http.cgi->being_closed) lws_close_free_wsi(wsi, 0, "lws_cgi_kill"); } return 0; } LWS_EXTERN int lws_cgi_kill_terminated(struct lws_context_per_thread *pt) { struct lws_cgi **pcgi, *cgi = NULL; int status, n = 1; while (n > 0) { /* find finished guys but don't reap yet */ n = waitpid(-1, &status, WNOHANG); if (n <= 0) continue; lwsl_debug("%s: observed PID %d terminated\n", __func__, n); pcgi = &pt->http.cgi_list; /* check all the subprocesses on the cgi list */ while (*pcgi) { /* get the next one first as list may change */ cgi = *pcgi; pcgi = &(*pcgi)->cgi_list; if (cgi->pid <= 0) continue; /* finish sending cached headers */ if (cgi->headers_buf) continue; /* wait for stdout to be drained */ if (cgi->content_length > cgi->content_length_seen) continue; if (cgi->content_length) { lwsl_debug("%s: wsi %p: expected content " "length seen: %lld\n", __func__, cgi->wsi, (unsigned long long)cgi->content_length_seen); } /* reap it */ waitpid(n, &status, WNOHANG); /* * he's already terminated so no need for kill() * but we should do the terminated cgi callback * and close him if he's not already closing */ if (n == cgi->pid) { lwsl_debug("%s: found PID %d on cgi list\n", __func__, n); if (!cgi->content_length) { /* * well, if he sends chunked... * give him 2s after the * cgi terminated to send buffered */ cgi->chunked_grace++; continue; } /* defeat kill() */ cgi->pid = 0; lws_cgi_kill(cgi->wsi); break; } cgi = NULL; } /* if not found on the cgi list, as he's one of ours, reap */ if (!cgi) { lwsl_debug("%s: reading PID %d although no cgi match\n", __func__, n); waitpid(n, &status, WNOHANG); } } pcgi = &pt->http.cgi_list; /* check all the subprocesses on the cgi list */ while (*pcgi) { /* get the next one first as list may change */ cgi = *pcgi; pcgi = &(*pcgi)->cgi_list; if (cgi->pid <= 0) continue; /* we deferred killing him after reaping his PID */ if (cgi->chunked_grace) { cgi->chunked_grace++; if (cgi->chunked_grace < 2) continue; goto finish_him; } /* finish sending cached headers */ if (cgi->headers_buf) continue; /* wait for stdout to be drained */ if (cgi->content_length > cgi->content_length_seen) continue; if (cgi->content_length) lwsl_debug("%s: wsi %p: expected " "content len seen: %lld\n", __func__, cgi->wsi, (unsigned long long)cgi->content_length_seen); /* reap it */ if (waitpid(cgi->pid, &status, WNOHANG) > 0) { if (!cgi->content_length) { /* * well, if he sends chunked... * give him 2s after the * cgi terminated to send buffered */ cgi->chunked_grace++; continue; } finish_him: lwsl_debug("%s: found PID %d on cgi list\n", __func__, cgi->pid); /* defeat kill() */ cgi->pid = 0; lws_cgi_kill(cgi->wsi); break; } } return 0; } LWS_VISIBLE LWS_EXTERN struct lws * lws_cgi_get_stdwsi(struct lws *wsi, enum lws_enum_stdinouterr ch) { if (!wsi->http.cgi) return NULL; return wsi->http.cgi->stdwsi[ch]; } void lws_cgi_remove_and_kill(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; struct lws_cgi **pcgi = &pt->http.cgi_list; /* remove us from the cgi list */ lwsl_debug("%s: remove cgi %p from list\n", __func__, wsi->http.cgi); while (*pcgi) { if (*pcgi == wsi->http.cgi) { /* drop us from the pt cgi list */ *pcgi = (*pcgi)->cgi_list; break; } pcgi = &(*pcgi)->cgi_list; } if (wsi->http.cgi->headers_buf) { lwsl_debug("close: freed cgi headers\n"); lws_free_set_NULL(wsi->http.cgi->headers_buf); } /* we have a cgi going, we must kill it */ wsi->http.cgi->being_closed = 1; lws_cgi_kill(wsi); } libwebsockets-3.2.1/lib/roles/cgi/ops-cgi.c000066400000000000000000000065531357643561300205440ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include static int rops_handle_POLLIN_cgi(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { struct lws_cgi_args args; assert(wsi->role_ops == &role_ops_cgi); if (wsi->cgi_channel >= LWS_STDOUT && !(pollfd->revents & pollfd->events & LWS_POLLIN)) return LWS_HPI_RET_HANDLED; if (wsi->cgi_channel == LWS_STDIN && !(pollfd->revents & pollfd->events & LWS_POLLOUT)) return LWS_HPI_RET_HANDLED; if (wsi->cgi_channel == LWS_STDIN && lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_info("failed at set pollfd\n"); return LWS_HPI_RET_WSI_ALREADY_DIED; } args.ch = wsi->cgi_channel; args.stdwsi = &wsi->parent->http.cgi->stdwsi[0]; args.hdr_state = wsi->hdr_state; lwsl_debug("CGI LWS_STDOUT %p wsistate 0x%x\n", wsi->parent, wsi->wsistate); if (user_callback_handle_rxflow(wsi->parent->protocol->callback, wsi->parent, LWS_CALLBACK_CGI, wsi->parent->user_space, (void *)&args, 0)) return 1; return LWS_HPI_RET_HANDLED; } static int rops_handle_POLLOUT_cgi(struct lws *wsi) { return LWS_HP_RET_USER_SERVICE; } static int rops_periodic_checks_cgi(struct lws_context *context, int tsi, time_t now) { struct lws_context_per_thread *pt = &context->pt[tsi]; lws_cgi_kill_terminated(pt); return 0; } static int rops_destroy_role_cgi(struct lws *wsi) { #if defined(LWS_WITH_ZLIB) if (!wsi->http.cgi) return 0; if (!wsi->http.cgi->gzip_init) return 0; inflateEnd(&wsi->http.cgi->inflate); wsi->http.cgi->gzip_init = 0; #endif return 0; } struct lws_role_ops role_ops_cgi = { /* role name */ "cgi", /* alpn id */ NULL, /* check_upgrades */ NULL, /* init_context */ NULL, /* init_vhost */ NULL, /* destroy_vhost */ NULL, /* periodic_checks */ rops_periodic_checks_cgi, /* service_flag_pending */ NULL, /* handle_POLLIN */ rops_handle_POLLIN_cgi, /* handle_POLLOUT */ rops_handle_POLLOUT_cgi, /* perform_user_POLLOUT */ NULL, /* callback_on_writable */ NULL, /* tx_credit */ NULL, /* write_role_protocol */ NULL, /* encapsulation_parent */ NULL, /* alpn_negotiated */ NULL, /* close_via_role_protocol */ NULL, /* close_role */ NULL, /* close_kill_connection */ NULL, /* destroy_role */ rops_destroy_role_cgi, /* adoption_bind */ NULL, /* client_bind */ NULL, /* adoption_cb clnt, srv */ { 0, 0 }, /* rx_cb clnt, srv */ { 0, 0 }, /* writeable cb clnt, srv */ { 0, 0 }, /* close cb clnt, srv */ { 0, 0 }, /* protocol_bind_cb c,s */ { 0, 0 }, /* protocol_unbind_cb c,s */ { 0, 0 }, /* file_handle */ 0, }; libwebsockets-3.2.1/lib/roles/cgi/private.h000066400000000000000000000044121357643561300206520ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is included from core/private.h if LWS_ROLE_WS */ #if defined(LWS_WITH_ZLIB) #if defined(LWS_WITH_MINIZ) #include #else #include #endif #endif extern struct lws_role_ops role_ops_cgi; #define lwsi_role_cgi(wsi) (wsi->role_ops == &role_ops_cgi) #define LWS_HTTP_CHUNK_HDR_SIZE 16 enum { SIGNIFICANT_HDR_CONTENT_LENGTH, /* numeric */ SIGNIFICANT_HDR_LOCATION, SIGNIFICANT_HDR_STATUS, /* numeric */ SIGNIFICANT_HDR_TRANSFER_ENCODING, SIGNIFICANT_HDR_CONTENT_ENCODING_GZIP, SIGNIFICANT_HDR_COUNT }; struct lws; /* wsi who is master of the cgi points to an lws_cgi */ struct lws_cgi { struct lws_cgi *cgi_list; struct lws *stdwsi[3]; /* points to the associated stdin/out/err wsis */ struct lws *wsi; /* owner */ unsigned char *headers_buf; unsigned char *headers_start; unsigned char *headers_pos; unsigned char *headers_dumped; unsigned char *headers_end; char summary[128]; #if defined(LWS_WITH_ZLIB) z_stream inflate; uint8_t inflate_buf[1024]; #endif lws_filepos_t post_in_expected; lws_filepos_t content_length; lws_filepos_t content_length_seen; int pipe_fds[3][2]; int match[SIGNIFICANT_HDR_COUNT]; char l[12]; int pid; int response_code; int lp; unsigned char being_closed:1; unsigned char explicitly_chunked:1; unsigned char cgi_transaction_over:1; unsigned char implied_chunked:1; unsigned char gzip_inflate:1; unsigned char gzip_init:1; unsigned char chunked_grace; }; libwebsockets-3.2.1/lib/roles/dbus/000077500000000000000000000000001357643561300172215ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/dbus/README.md000066400000000000000000000054161357643561300205060ustar00rootroot00000000000000# DBUS Role Support ## DBUS-related distro packages Fedora: dbus-devel Debian / Ubuntu: libdbus-1-dev ## Enabling for build at cmake Fedora example: ``` $ cmake .. -DLWS_ROLE_DBUS=1 -DLWS_DBUS_INCLUDE2="/usr/lib64/dbus-1.0/include" ``` Ubuntu example: ``` $ cmake .. -DLWS_ROLE_DBUS=1 -DLWS_DBUS_INCLUDE2="/usr/lib/x86_64-linux-gnu/dbus-1.0/include" ``` Dbus requires two include paths, which you can force by setting `LWS_DBUS_INCLUDE1` and `LWS_DBUS_INCLUDE2`. Although INCLUDE1 is usually guessable, both can be forced to allow cross-build. If these are not forced, then lws cmake will try to check some popular places, for `LWS_DBUS_INCLUDE1`, on both Fedora and Debian / Ubuntu, this is `/usr/include/dbus-1.0`... if the directory exists, it is used. For `LWS_DBUS_INCLUDE2`, it is the arch-specific dbus header which may be packaged separately than the main dbus headers. On Fedora, this is in `/usr/lib[64]/dbus-1.0/include`... if not given externally, lws cmake will try `/usr/lib64/dbus-1.0/include`. On Debian / Ubuntu, the package installs it in an arch-specific dir like `/usr/lib/x86_64-linux-gnu/dbus-1.0/include`, you should force the path. The library path is usually \[lib\] "dbus-1", but this can also be forced if you want to build cross or use a special build, via `LWS_DBUS_LIB`. ## Building against local dbus build If you built your own local dbus and installed it in /usr/local, then this is the incantation to direct lws to use the local version of dbus: ``` cmake .. -DLWS_ROLE_DBUS=1 -DLWS_DBUS_INCLUDE1="/usr/local/include/dbus-1.0" -DLWS_DBUS_INCLUDE2="/usr/local/lib/dbus-1.0/include" -DLWS_DBUS_LIB="/usr/local/lib/libdbus-1.so" ``` You'll also need to give the loader a helping hand to do what you want if there's a perfectly good dbus lib already in `/usr/lib[64]` using `LD_PRELOAD` like this ``` LD_PRELOAD=/usr/local/lib/libdbus-1.so.3.24.0 myapp ``` ## Lws dbus api exports Because of the irregular situation with libdbus includes, if lws exports the dbus helpers, which use dbus types, as usual from `#include ` then if lws was compiled with dbus role support it forces all users to take care about the dbus include path mess whether they use dbus themselves or not. For that reason, if you need access to the lws dbus apis, you must explicitly include them by ``` #include ``` This includes `` and so requires the include paths set up. But otherwise non-dbus users that don't include `libwebsockets/lws-dbus.h` don't have to care about it. ## DBUS and valgrind https://cgit.freedesktop.org/dbus/dbus/tree/README.valgrind 1) One-time 6KiB "Still reachable" caused by abstract unix domain socket + libc `getgrouplist()` via nss... bug since 2004(!) https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=273051 libwebsockets-3.2.1/lib/roles/dbus/dbus.c000066400000000000000000000323551357643561300203320ustar00rootroot00000000000000/* * libwebsockets - dbus role * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * * This role for wrapping dbus fds in a wsi + role is unusual in that the * wsi it creates and binds to the role do not have control over the related fd * lifecycle. In fact dbus doesn't inform us directly about the lifecycle of * the fds it wants to be managed by the lws event loop. * * What it does tell us is when it wants to wait on POLLOUT and / or POLLIN, * and since it should stop any watchers before close, we take the approach to * create a lightweight "shadow" wsi for any fd from dbus that has a POLLIN or * POLLOUT wait active. When the dbus fd asks to have no wait active, we * destroy the wsi, since this is indistinguishable from dbus close path * behaviour. If it actually stays alive and later asks to wait again, well no * worries we create a new shadow wsi until it looks like it is closing again. */ #include #include /* * retreives existing or creates new shadow wsi for fd owned by dbus stuff. * * Requires vhost lock */ static struct lws * __lws_shadow_wsi(struct lws_dbus_ctx *ctx, DBusWatch *w, int fd, int create_ok) { struct lws *wsi; if (fd < 0 || fd >= (int)ctx->vh->context->fd_limit_per_thread) { lwsl_err("%s: fd %d vs fds_count %d\n", __func__, fd, (int)ctx->vh->context->fd_limit_per_thread); assert(0); return NULL; } wsi = wsi_from_fd(ctx->vh->context, fd); if (wsi) { assert(wsi->opaque_parent_data == ctx); return wsi; } if (!create_ok) return NULL; wsi = lws_zalloc(sizeof(*wsi), "shadow wsi"); if (wsi == NULL) { lwsl_err("Out of mem\n"); return NULL; } lwsl_info("%s: creating shadow wsi\n", __func__); wsi->context = ctx->vh->context; wsi->desc.sockfd = fd; lws_role_transition(wsi, 0, LRS_ESTABLISHED, &role_ops_dbus); wsi->protocol = ctx->vh->protocols; wsi->tsi = ctx->tsi; wsi->shadow = 1; wsi->opaque_parent_data = ctx; ctx->w[0] = w; lws_vhost_bind_wsi(ctx->vh, wsi); if (__insert_wsi_socket_into_fds(ctx->vh->context, wsi)) { lwsl_err("inserting wsi socket into fds failed\n"); lws_vhost_unbind_wsi(wsi); lws_free(wsi); return NULL; } ctx->vh->context->count_wsi_allocated++; return wsi; } /* * Requires vhost lock */ static int __lws_shadow_wsi_destroy(struct lws_dbus_ctx *ctx, struct lws *wsi) { lwsl_info("%s: destroying shadow wsi\n", __func__); if (__remove_wsi_socket_from_fds(wsi)) { lwsl_err("%s: unable to remove %d from fds\n", __func__, wsi->desc.sockfd); return 1; } ctx->vh->context->count_wsi_allocated--; lws_vhost_unbind_wsi(wsi); lws_free(wsi); return 0; } static void handle_dispatch_status(DBusConnection *c, DBusDispatchStatus s, void *data) { lwsl_info("%s: new dbus dispatch status: %d\n", __func__, s); } /* * These are complicated by the fact libdbus can have two separate DBusWatch * objects for the same fd, to control watching POLLIN and POLLOUT individually. * * However we will actually watch using poll(), where the unit is the fd, and * it has a unified events field with just POLLIN / POLLOUT flags. * * So we have to be prepared for one or two watchers coming in any order. */ static dbus_bool_t lws_dbus_add_watch(DBusWatch *w, void *data) { struct lws_dbus_ctx *ctx = (struct lws_dbus_ctx *)data; struct lws_context_per_thread *pt = &ctx->vh->context->pt[ctx->tsi]; unsigned int flags = 0, lws_flags = 0; struct lws *wsi; int n; lws_pt_lock(pt, __func__); wsi = __lws_shadow_wsi(ctx, w, dbus_watch_get_unix_fd(w), 1); if (!wsi) { lws_pt_unlock(pt); lwsl_err("%s: unable to get wsi\n", __func__); return FALSE; } for (n = 0; n < (int)LWS_ARRAY_SIZE(ctx->w); n++) if (w == ctx->w[n]) break; if (n == (int)LWS_ARRAY_SIZE(ctx->w)) for (n = 0; n < (int)LWS_ARRAY_SIZE(ctx->w); n++) if (!ctx->w[n]) { ctx->w[n] = w; break; } for (n = 0; n < (int)LWS_ARRAY_SIZE(ctx->w); n++) if (ctx->w[n]) flags |= dbus_watch_get_flags(ctx->w[n]); if (flags & DBUS_WATCH_READABLE) lws_flags |= LWS_POLLIN; if (flags & DBUS_WATCH_WRITABLE) lws_flags |= LWS_POLLOUT; lwsl_info("%s: w %p, fd %d, data %p, flags %d\n", __func__, w, dbus_watch_get_unix_fd(w), data, lws_flags); __lws_change_pollfd(wsi, 0, lws_flags); lws_pt_unlock(pt); return TRUE; } static int check_destroy_shadow_wsi(struct lws_dbus_ctx *ctx, struct lws *wsi) { int n; if (!wsi) return 0; for (n = 0; n < (int)LWS_ARRAY_SIZE(ctx->w); n++) if (ctx->w[n]) return 0; __lws_shadow_wsi_destroy(ctx, wsi); if (!ctx->conn || !ctx->hup || ctx->timeouts) return 0; if (dbus_connection_get_dispatch_status(ctx->conn) == DBUS_DISPATCH_DATA_REMAINS) return 0; if (ctx->cb_closing) ctx->cb_closing(ctx); return 1; } static void lws_dbus_remove_watch(DBusWatch *w, void *data) { struct lws_dbus_ctx *ctx = (struct lws_dbus_ctx *)data; struct lws_context_per_thread *pt = &ctx->vh->context->pt[ctx->tsi]; unsigned int flags = 0, lws_flags = 0; struct lws *wsi; int n; lws_pt_lock(pt, __func__); wsi = __lws_shadow_wsi(ctx, w, dbus_watch_get_unix_fd(w), 0); if (!wsi) goto bail; for (n = 0; n < (int)LWS_ARRAY_SIZE(ctx->w); n++) if (w == ctx->w[n]) { ctx->w[n] = NULL; break; } for (n = 0; n < (int)LWS_ARRAY_SIZE(ctx->w); n++) if (ctx->w[n]) flags |= dbus_watch_get_flags(ctx->w[n]); if ((~flags) & DBUS_WATCH_READABLE) lws_flags |= LWS_POLLIN; if ((~flags) & DBUS_WATCH_WRITABLE) lws_flags |= LWS_POLLOUT; lwsl_info("%s: w %p, fd %d, data %p, clearing lws flags %d\n", __func__, w, dbus_watch_get_unix_fd(w), data, lws_flags); __lws_change_pollfd(wsi, lws_flags, 0); bail: lws_pt_unlock(pt); } static void lws_dbus_toggle_watch(DBusWatch *w, void *data) { if (dbus_watch_get_enabled(w)) lws_dbus_add_watch(w, data); else lws_dbus_remove_watch(w, data); } static dbus_bool_t lws_dbus_add_timeout(DBusTimeout *t, void *data) { struct lws_dbus_ctx *ctx = (struct lws_dbus_ctx *)data; struct lws_context_per_thread *pt = &ctx->vh->context->pt[ctx->tsi]; int ms = dbus_timeout_get_interval(t); struct lws_role_dbus_timer *dbt; time_t ti = time(NULL); if (!dbus_timeout_get_enabled(t)) return TRUE; if (ms < 1000) ms = 1000; dbt = lws_malloc(sizeof(*dbt), "dbus timer"); if (!dbt) return FALSE; lwsl_info("%s: adding timeout %dms\n", __func__, dbus_timeout_get_interval(t)); dbt->data = t; dbt->fire = ti + (ms < 1000); dbt->timer_list.prev = NULL; dbt->timer_list.next = NULL; dbt->timer_list.owner = NULL; lws_dll2_add_head(&dbt->timer_list, &pt->dbus.timer_list_owner); ctx->timeouts++; return TRUE; } static void lws_dbus_remove_timeout(DBusTimeout *t, void *data) { struct lws_dbus_ctx *ctx = (struct lws_dbus_ctx *)data; struct lws_context_per_thread *pt = &ctx->vh->context->pt[ctx->tsi]; lwsl_info("%s: t %p, data %p\n", __func__, t, data); lws_start_foreach_dll_safe(struct lws_dll2 *, rdt, nx, lws_dll2_get_head(&pt->dbus.timer_list_owner)) { struct lws_role_dbus_timer *r = lws_container_of(rdt, struct lws_role_dbus_timer, timer_list); if (t == r->data) { lws_dll2_remove(rdt); lws_free(rdt); ctx->timeouts--; break; } } lws_end_foreach_dll_safe(rdt, nx); } static void lws_dbus_toggle_timeout(DBusTimeout *t, void *data) { if (dbus_timeout_get_enabled(t)) lws_dbus_add_timeout(t, data); else lws_dbus_remove_timeout(t, data); } /* * This sets up a connection along the same lines as * dbus_connection_setup_with_g_main(), but for using the lws event loop. */ int lws_dbus_connection_setup(struct lws_dbus_ctx *ctx, DBusConnection *conn, lws_dbus_closing_t cb_closing) { int n; ctx->conn = conn; ctx->cb_closing = cb_closing; ctx->hup = 0; ctx->timeouts = 0; for (n = 0; n < (int)LWS_ARRAY_SIZE(ctx->w); n++) ctx->w[n] = NULL; if (!dbus_connection_set_watch_functions(conn, lws_dbus_add_watch, lws_dbus_remove_watch, lws_dbus_toggle_watch, ctx, NULL)) { lwsl_err("%s: dbus_connection_set_watch_functions fail\n", __func__); return 1; } if (!dbus_connection_set_timeout_functions(conn, lws_dbus_add_timeout, lws_dbus_remove_timeout, lws_dbus_toggle_timeout, ctx, NULL)) { lwsl_err("%s: dbus_connection_set_timeout_functions fail\n", __func__); return 1; } dbus_connection_set_dispatch_status_function(conn, handle_dispatch_status, ctx, NULL); return 0; } /* * This wraps dbus_server_listen(), additionally taking care of the event loop * -related setups. */ DBusServer * lws_dbus_server_listen(struct lws_dbus_ctx *ctx, const char *ads, DBusError *e, DBusNewConnectionFunction new_conn) { ctx->cb_closing = NULL; ctx->hup = 0; ctx->timeouts = 0; ctx->dbs = dbus_server_listen(ads, e); if (!ctx->dbs) return NULL; dbus_server_set_new_connection_function(ctx->dbs, new_conn, ctx, NULL); if (!dbus_server_set_watch_functions(ctx->dbs, lws_dbus_add_watch, lws_dbus_remove_watch, lws_dbus_toggle_watch, ctx, NULL)) { lwsl_err("%s: dbus_connection_set_watch_functions fail\n", __func__); goto bail; } if (!dbus_server_set_timeout_functions(ctx->dbs, lws_dbus_add_timeout, lws_dbus_remove_timeout, lws_dbus_toggle_timeout, ctx, NULL)) { lwsl_err("%s: dbus_connection_set_timeout_functions fail\n", __func__); goto bail; } return ctx->dbs; bail: dbus_server_disconnect(ctx->dbs); dbus_server_unref(ctx->dbs); return NULL; } /* * There shouldn't be a race here with watcher removal and poll wait, because * everything including the dbus activity is serialized in one event loop. * * If it removes the watcher and we remove the wsi and fd entry before this, * actually we can no longer map the fd to this invalidated wsi pointer to call * this. */ static int rops_handle_POLLIN_dbus(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { struct lws_dbus_ctx *ctx = (struct lws_dbus_ctx *)wsi->opaque_parent_data; unsigned int flags = 0; int n; if (pollfd->revents & LWS_POLLIN) flags |= DBUS_WATCH_READABLE; if (pollfd->revents & LWS_POLLOUT) flags |= DBUS_WATCH_WRITABLE; if (pollfd->revents & (LWS_POLLHUP)) ctx->hup = 1; /* * POLLIN + POLLOUT gets us called here on the corresponding shadow * wsi. wsi->opaque_parent_data is the watcher handle bound to the wsi */ for (n = 0; n < (int)LWS_ARRAY_SIZE(ctx->w); n++) if (ctx->w[n] && !dbus_watch_handle(ctx->w[n], flags)) lwsl_err("%s: dbus_watch_handle failed\n", __func__); if (ctx->conn) { lwsl_info("%s: conn: flags %d\n", __func__, flags); while (dbus_connection_get_dispatch_status(ctx->conn) == DBUS_DISPATCH_DATA_REMAINS) dbus_connection_dispatch(ctx->conn); handle_dispatch_status(NULL, DBUS_DISPATCH_DATA_REMAINS, NULL); check_destroy_shadow_wsi(ctx, wsi); } else if (ctx->dbs) /* ??? */ lwsl_debug("%s: dbs: %d\n", __func__, flags); return LWS_HPI_RET_HANDLED; } static int rops_periodic_checks_dbus(struct lws_context *context, int tsi, time_t now) { struct lws_context_per_thread *pt = &context->pt[tsi]; /* * locking shouldn't be needed here, because periodic_checks is called * from the tsi-specific service thread context, and only the same * service thread can modify stuff on the same pt. */ lws_start_foreach_dll_safe(struct lws_dll2 *, rdt, nx, lws_dll2_get_head(&pt->dbus.timer_list_owner)) { struct lws_role_dbus_timer *r = lws_container_of(rdt, struct lws_role_dbus_timer, timer_list); if (now > r->fire) { lwsl_notice("%s: firing timer\n", __func__); dbus_timeout_handle(r->data); lws_dll2_remove(rdt); lws_free(rdt); } } lws_end_foreach_dll_safe(rdt, nx); return 0; } struct lws_role_ops role_ops_dbus = { /* role name */ "dbus", /* alpn id */ NULL, /* check_upgrades */ NULL, /* init_context */ NULL, /* init_vhost */ NULL, /* destroy_vhost */ NULL, /* periodic_checks */ rops_periodic_checks_dbus, /* service_flag_pending */ NULL, /* handle_POLLIN */ rops_handle_POLLIN_dbus, /* handle_POLLOUT */ NULL, /* perform_user_POLLOUT */ NULL, /* callback_on_writable */ NULL, /* tx_credit */ NULL, /* write_role_protocol */ NULL, /* encapsulation_parent */ NULL, /* alpn_negotiated */ NULL, /* close_via_role_protocol */ NULL, /* close_role */ NULL, /* close_kill_connection */ NULL, /* destroy_role */ NULL, /* adoption_bind */ NULL, /* client_bind */ NULL, /* adoption_cb clnt, srv */ { 0, 0 }, /* rx_cb clnt, srv */ { 0, 0 }, /* writeable cb clnt, srv */ { 0, 0 }, /* close cb clnt, srv */ { 0, 0 }, /* protocol_bind_cb c,s */ { 0, 0 }, /* protocol_unbind_cb c,s */ { 0, 0 }, /* file_handle */ 0, }; libwebsockets-3.2.1/lib/roles/dbus/private.h000066400000000000000000000023661357643561300210530ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is included from core/private.h if LWS_ROLE_DBUS */ #include extern struct lws_role_ops role_ops_dbus; #define lwsi_role_dbus(wsi) (wsi->role_ops == &role_ops_dbus) struct lws_role_dbus_timer { struct lws_dll2 timer_list; void *data; time_t fire; }; struct lws_pt_role_dbus { struct lws_dll2_owner timer_list_owner; }; struct _lws_dbus_mode_related { DBusConnection *conn; }; libwebsockets-3.2.1/lib/roles/h1/000077500000000000000000000000001357643561300165745ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/h1/ops-h1.c000066400000000000000000000724751357643561300200660ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include #ifndef min #define min(a, b) ((a) < (b) ? (a) : (b)) #endif /* * We have to take care about parsing because the headers may be split * into multiple fragments. They may contain unknown headers with arbitrary * argument lengths. So, we parse using a single-character at a time state * machine that is completely independent of packet size. * * Returns <0 for error or length of chars consumed from buf (up to len) */ int lws_read_h1(struct lws *wsi, unsigned char *buf, lws_filepos_t len) { unsigned char *last_char, *oldbuf = buf; lws_filepos_t body_chunk_len; size_t n; lwsl_debug("%s: h1 path: wsi state 0x%x\n", __func__, lwsi_state(wsi)); switch (lwsi_state(wsi)) { case LRS_ISSUING_FILE: return 0; case LRS_ESTABLISHED: if (lwsi_role_ws(wsi)) goto ws_mode; if (lwsi_role_client(wsi)) break; wsi->hdr_parsing_completed = 0; /* fallthru */ case LRS_HEADERS: if (!wsi->http.ah) { lwsl_err("%s: LRS_HEADERS: NULL ah\n", __func__); assert(0); } lwsl_parser("issuing %d bytes to parser\n", (int)len); #if defined(LWS_ROLE_WS) && !defined(LWS_NO_CLIENT) if (lws_ws_handshake_client(wsi, &buf, (size_t)len)) goto bail; #endif last_char = buf; if (lws_handshake_server(wsi, &buf, (size_t)len)) /* Handshake indicates this session is done. */ goto bail; /* we might have transitioned to RAW */ if (wsi->role_ops == &role_ops_raw_skt || wsi->role_ops == &role_ops_raw_file) /* we gave the read buffer to RAW handler already */ goto read_ok; /* * It's possible that we've exhausted our data already, or * rx flow control has stopped us dealing with this early, * but lws_handshake_server doesn't update len for us. * Figure out how much was read, so that we can proceed * appropriately: */ len -= (buf - last_char); if (!wsi->hdr_parsing_completed) /* More header content on the way */ goto read_ok; switch (lwsi_state(wsi)) { case LRS_ESTABLISHED: case LRS_HEADERS: goto read_ok; case LRS_ISSUING_FILE: goto read_ok; case LRS_DISCARD_BODY: case LRS_BODY: wsi->http.rx_content_remain = wsi->http.rx_content_length; if (wsi->http.rx_content_remain) goto http_postbody; /* there is no POST content */ goto postbody_completion; default: break; } break; case LRS_DISCARD_BODY: case LRS_BODY: http_postbody: lwsl_debug("%s: http post body: remain %d\n", __func__, (int)wsi->http.rx_content_remain); if (!wsi->http.rx_content_remain) goto postbody_completion; while (len && wsi->http.rx_content_remain) { /* Copy as much as possible, up to the limit of: * what we have in the read buffer (len) * remaining portion of the POST body (content_remain) */ body_chunk_len = min(wsi->http.rx_content_remain, len); wsi->http.rx_content_remain -= body_chunk_len; // len -= body_chunk_len; #ifdef LWS_WITH_CGI if (wsi->http.cgi) { struct lws_cgi_args args; args.ch = LWS_STDIN; args.stdwsi = &wsi->http.cgi->stdwsi[0]; args.data = buf; args.len = body_chunk_len; /* returns how much used */ n = user_callback_handle_rxflow( wsi->protocol->callback, wsi, LWS_CALLBACK_CGI_STDIN_DATA, wsi->user_space, (void *)&args, 0); if ((int)n < 0) goto bail; } else { #endif if (lwsi_state(wsi) != LRS_DISCARD_BODY) { n = wsi->protocol->callback(wsi, LWS_CALLBACK_HTTP_BODY, wsi->user_space, buf, (size_t)body_chunk_len); if (n) goto bail; } n = (size_t)body_chunk_len; #ifdef LWS_WITH_CGI } #endif buf += n; if (wsi->http.rx_content_remain) { lws_set_timeout(wsi, PENDING_TIMEOUT_HTTP_CONTENT, wsi->context->timeout_secs); break; } /* he sent all the content in time */ postbody_completion: #ifdef LWS_WITH_CGI /* * If we're running a cgi, we can't let him off the * hook just because he sent his POST data */ if (wsi->http.cgi) lws_set_timeout(wsi, PENDING_TIMEOUT_CGI, wsi->context->timeout_secs); else #endif lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); #ifdef LWS_WITH_CGI if (!wsi->http.cgi) #endif { #if !defined(LWS_NO_SERVER) if (lwsi_state(wsi) == LRS_DISCARD_BODY) { /* * repeat the transaction completed * that got us into this state, having * consumed the pending body now */ if (lws_http_transaction_completed(wsi)) return -1; break; } #endif lwsl_info("HTTP_BODY_COMPLETION: %p (%s)\n", wsi, wsi->protocol->name); n = wsi->protocol->callback(wsi, LWS_CALLBACK_HTTP_BODY_COMPLETION, wsi->user_space, NULL, 0); if (n) goto bail; if (wsi->http2_substream) lwsi_set_state(wsi, LRS_ESTABLISHED); } break; } break; case LRS_RETURNED_CLOSE: case LRS_AWAITING_CLOSE_ACK: case LRS_WAITING_TO_SEND_CLOSE: case LRS_SHUTDOWN: ws_mode: #if !defined(LWS_NO_CLIENT) && defined(LWS_ROLE_WS) // lwsl_notice("%s: ws_mode\n", __func__); if (lws_ws_handshake_client(wsi, &buf, (size_t)len)) goto bail; #endif #if defined(LWS_ROLE_WS) if (lwsi_role_ws(wsi) && lwsi_role_server(wsi) && /* * for h2 we are on the swsi */ lws_parse_ws(wsi, &buf, (size_t)len) < 0) { lwsl_info("%s: lws_parse_ws bailed\n", __func__); goto bail; } #endif // lwsl_notice("%s: ws_mode: buf moved on by %d\n", __func__, // lws_ptr_diff(buf, oldbuf)); break; case LRS_DEFERRING_ACTION: lwsl_notice("%s: LRS_DEFERRING_ACTION\n", __func__); break; case LRS_SSL_ACK_PENDING: break; case LRS_DEAD_SOCKET: lwsl_err("%s: Unhandled state LRS_DEAD_SOCKET\n", __func__); goto bail; // assert(0); /* fallthru */ default: lwsl_err("%s: Unhandled state %d\n", __func__, lwsi_state(wsi)); assert(0); goto bail; } read_ok: /* Nothing more to do for now */ // lwsl_info("%s: %p: read_ok, used %ld (len %d, state %d)\n", __func__, // wsi, (long)(buf - oldbuf), (int)len, wsi->state); return lws_ptr_diff(buf, oldbuf); bail: /* * h2 / h2-ws calls us recursively in * * lws_read_h1()-> * lws_h2_parser()-> * lws_read_h1() * * pattern, having stripped the h2 framing in the middle. * * When taking down the whole connection, make sure that only the * outer lws_read() does the wsi close. */ if (!wsi->outer_will_close) lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "lws_read_h1 bail"); return -1; } #if !defined(LWS_NO_SERVER) static int lws_h1_server_socket_service(struct lws *wsi, struct lws_pollfd *pollfd) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; struct lws_tokens ebuf; int n, buffered; if (lwsi_state(wsi) == LRS_DEFERRING_ACTION) goto try_pollout; /* any incoming data ready? */ if (!(pollfd->revents & pollfd->events & LWS_POLLIN)) goto try_pollout; /* * If we previously just did POLLIN when IN and OUT were signaled * (because POLLIN processing may have used up the POLLOUT), don't let * that happen twice in a row... next time we see the situation favour * POLLOUT */ if (wsi->favoured_pollin && (pollfd->revents & pollfd->events & LWS_POLLOUT)) { // lwsl_notice("favouring pollout\n"); wsi->favoured_pollin = 0; goto try_pollout; } /* * We haven't processed that the tunnel is set up yet, so * defer reading */ if (lwsi_state(wsi) == LRS_SSL_ACK_PENDING) return LWS_HPI_RET_HANDLED; /* these states imply we MUST have an ah attached */ if ((lwsi_state(wsi) == LRS_ESTABLISHED || lwsi_state(wsi) == LRS_ISSUING_FILE || lwsi_state(wsi) == LRS_HEADERS || lwsi_state(wsi) == LRS_DISCARD_BODY || lwsi_state(wsi) == LRS_BODY)) { if (!wsi->http.ah && lws_header_table_attach(wsi, 0)) { lwsl_info("%s: wsi %p: ah not available\n", __func__, wsi); goto try_pollout; } /* * We got here because there was specifically POLLIN... * regardless of our buflist state, we need to get it, * and either use it, or append to the buflist and use * buflist head material. * * We will not notice a connection close until the buflist is * exhausted and we tried to do a read of some kind. */ buffered = lws_buflist_aware_read(pt, wsi, &ebuf); switch (ebuf.len) { case 0: lwsl_info("%s: read 0 len a\n", __func__); wsi->seen_zero_length_recv = 1; if (lws_change_pollfd(wsi, LWS_POLLIN, 0)) goto fail; #if !defined(LWS_WITHOUT_EXTENSIONS) /* * autobahn requires us to win the race between close * and draining the extensions */ if (wsi->ws && (wsi->ws->rx_draining_ext || wsi->ws->tx_draining_ext)) goto try_pollout; #endif /* * normally, we respond to close with logically closing * our side immediately */ goto fail; case LWS_SSL_CAPABLE_ERROR: goto fail; case LWS_SSL_CAPABLE_MORE_SERVICE: goto try_pollout; } /* just ignore incoming if waiting for close */ if (lwsi_state(wsi) == LRS_FLUSHING_BEFORE_CLOSE) { lwsl_notice("%s: just ignoring\n", __func__); goto try_pollout; } if (lwsi_state(wsi) == LRS_ISSUING_FILE) { // lwsl_notice("stashing: wsi %p: bd %d\n", wsi, buffered); if (lws_buflist_aware_consume(wsi, &ebuf, 0, buffered)) return LWS_HPI_RET_PLEASE_CLOSE_ME; goto try_pollout; } /* * Otherwise give it to whoever wants it according to the * connection state */ #if defined(LWS_ROLE_H2) if (lwsi_role_h2(wsi) && lwsi_state(wsi) != LRS_BODY) n = lws_read_h2(wsi, ebuf.token, ebuf.len); else #endif n = lws_read_h1(wsi, ebuf.token, ebuf.len); if (n < 0) /* we closed wsi */ return LWS_HPI_RET_WSI_ALREADY_DIED; lwsl_debug("%s: consumed %d\n", __func__, n); if (lws_buflist_aware_consume(wsi, &ebuf, n, buffered)) return LWS_HPI_RET_PLEASE_CLOSE_ME; /* * during the parsing our role changed to something non-http, * so the ah has no further meaning */ if (wsi->http.ah && !lwsi_role_h1(wsi) && !lwsi_role_h2(wsi) && !lwsi_role_cgi(wsi)) lws_header_table_detach(wsi, 0); /* * He may have used up the writability above, if we will defer * POLLOUT processing in favour of POLLIN, note it */ if (pollfd->revents & LWS_POLLOUT) wsi->favoured_pollin = 1; return LWS_HPI_RET_HANDLED; } /* * He may have used up the writability above, if we will defer POLLOUT * processing in favour of POLLIN, note it */ if (pollfd->revents & LWS_POLLOUT) wsi->favoured_pollin = 1; try_pollout: /* this handles POLLOUT for http serving fragments */ if (!(pollfd->revents & LWS_POLLOUT)) return LWS_HPI_RET_HANDLED; /* one shot */ if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_notice("%s a\n", __func__); goto fail; } /* clear back-to-back write detection */ wsi->could_have_pending = 0; if (lwsi_state(wsi) == LRS_DEFERRING_ACTION) { lwsl_debug("%s: LRS_DEFERRING_ACTION now writable\n", __func__); lwsi_set_state(wsi, LRS_ESTABLISHED); if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_info("failed at set pollfd\n"); goto fail; } } if (!wsi->hdr_parsing_completed) return LWS_HPI_RET_HANDLED; if (lwsi_state(wsi) != LRS_ISSUING_FILE) { if (lws_has_buffered_out(wsi)) { //lwsl_notice("%s: completing partial\n", __func__); if (lws_issue_raw(wsi, NULL, 0) < 0) { lwsl_info("%s signalling to close\n", __func__); goto fail; } return LWS_HPI_RET_HANDLED; } lws_stats_bump(pt, LWSSTATS_C_WRITEABLE_CB, 1); #if defined(LWS_WITH_STATS) if (wsi->active_writable_req_us) { uint64_t ul = lws_now_usecs() - wsi->active_writable_req_us; lws_stats_bump(pt, LWSSTATS_US_WRITABLE_DELAY_AVG, ul); lws_stats_max(pt, LWSSTATS_US_WORST_WRITABLE_DELAY, ul); wsi->active_writable_req_us = 0; } #endif n = user_callback_handle_rxflow(wsi->protocol->callback, wsi, LWS_CALLBACK_HTTP_WRITEABLE, wsi->user_space, NULL, 0); if (n < 0) { lwsl_info("writeable_fail\n"); goto fail; } return LWS_HPI_RET_HANDLED; } /* >0 == completion, <0 == error * * We'll get a LWS_CALLBACK_HTTP_FILE_COMPLETION callback when * it's done. That's the case even if we just completed the * send, so wait for that. */ n = lws_serve_http_file_fragment(wsi); if (n < 0) goto fail; return LWS_HPI_RET_HANDLED; fail: lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "server socket svc fail"); return LWS_HPI_RET_WSI_ALREADY_DIED; } #endif static int rops_handle_POLLIN_h1(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { if (lwsi_state(wsi) == LRS_IDLING) { uint8_t buf[1]; int rlen; /* * h1 staggered spins here in IDLING if we don't close it. * It shows POLLIN but the tls connection returns ERROR if * you try to read it. */ // lwsl_notice("%s: %p: wsistate 0x%x %s, revents 0x%x\n", // __func__, wsi, wsi->wsistate, wsi->role_ops->name, // pollfd->revents); rlen = lws_ssl_capable_read(wsi, buf, sizeof(buf)); if (rlen == LWS_SSL_CAPABLE_ERROR) return LWS_HPI_RET_PLEASE_CLOSE_ME; } #ifdef LWS_WITH_CGI if (wsi->http.cgi && (pollfd->revents & LWS_POLLOUT)) { if (lws_handle_POLLOUT_event(wsi, pollfd)) return LWS_HPI_RET_PLEASE_CLOSE_ME; return LWS_HPI_RET_HANDLED; } #endif #if 0 /* * !!! lws_serve_http_file_fragment() seems to duplicate most of * lws_handle_POLLOUT_event() in its own loop... */ lwsl_debug("%s: %d %d\n", __func__, (pollfd->revents & LWS_POLLOUT), lwsi_state_can_handle_POLLOUT(wsi)); if ((pollfd->revents & LWS_POLLOUT) && lwsi_state_can_handle_POLLOUT(wsi) && lws_handle_POLLOUT_event(wsi, pollfd)) { if (lwsi_state(wsi) == LRS_RETURNED_CLOSE) lwsi_set_state(wsi, LRS_FLUSHING_BEFORE_CLOSE); /* the write failed... it's had it */ wsi->socket_is_permanently_unusable = 1; return LWS_HPI_RET_PLEASE_CLOSE_ME; } #endif /* Priority 2: pre- compression transform */ #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more) { enum lws_write_protocol wp = LWS_WRITE_HTTP; lwsl_info("%s: completing comp partial (buflist_comp %p, may %d)\n", __func__, wsi->http.comp_ctx.buflist_comp, wsi->http.comp_ctx.may_have_more ); if (wsi->role_ops->write_role_protocol(wsi, NULL, 0, &wp) < 0) { lwsl_info("%s signalling to close\n", __func__); return LWS_HPI_RET_PLEASE_CLOSE_ME; } lws_callback_on_writable(wsi); if (!wsi->http.comp_ctx.buflist_comp && !wsi->http.comp_ctx.may_have_more && wsi->http.deferred_transaction_completed) { wsi->http.deferred_transaction_completed = 0; if (lws_http_transaction_completed(wsi)) return LWS_HPI_RET_PLEASE_CLOSE_ME; } return LWS_HPI_RET_HANDLED; } #endif if (lws_is_flowcontrolled(wsi)) /* We cannot deal with any kind of new RX because we are * RX-flowcontrolled. */ return LWS_HPI_RET_HANDLED; #if !defined(LWS_NO_SERVER) if (!lwsi_role_client(wsi)) { int n; lwsl_debug("%s: %p: wsistate 0x%x\n", __func__, wsi, wsi->wsistate); n = lws_h1_server_socket_service(wsi, pollfd); if (n != LWS_HPI_RET_HANDLED) return n; if (lwsi_state(wsi) != LRS_SSL_INIT) if (lws_server_socket_service_ssl(wsi, LWS_SOCK_INVALID)) return LWS_HPI_RET_PLEASE_CLOSE_ME; return LWS_HPI_RET_HANDLED; } #endif #ifndef LWS_NO_CLIENT if ((pollfd->revents & LWS_POLLIN) && wsi->hdr_parsing_completed && !wsi->told_user_closed) { /* * In SSL mode we get POLLIN notification about * encrypted data in. * * But that is not necessarily related to decrypted * data out becoming available; in may need to perform * other in or out before that happens. * * simply mark ourselves as having readable data * and turn off our POLLIN */ wsi->client_rx_avail = 1; if (lws_change_pollfd(wsi, LWS_POLLIN, 0)) return LWS_HPI_RET_PLEASE_CLOSE_ME; //lwsl_notice("calling back %s\n", wsi->protocol->name); /* let user code know, he'll usually ask for writeable * callback and drain / re-enable it there */ if (user_callback_handle_rxflow(wsi->protocol->callback, wsi, LWS_CALLBACK_RECEIVE_CLIENT_HTTP, wsi->user_space, NULL, 0)) { lwsl_info("RECEIVE_CLIENT_HTTP closed it\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } return LWS_HPI_RET_HANDLED; } #endif // if (lwsi_state(wsi) == LRS_ESTABLISHED) // return LWS_HPI_RET_HANDLED; #if !defined(LWS_NO_CLIENT) if ((pollfd->revents & LWS_POLLOUT) && lws_handle_POLLOUT_event(wsi, pollfd)) { lwsl_debug("POLLOUT event closed it\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } if (lws_client_socket_service(wsi, pollfd, NULL)) return LWS_HPI_RET_WSI_ALREADY_DIED; #endif return LWS_HPI_RET_HANDLED; } static int rops_handle_POLLOUT_h1(struct lws *wsi) { if (lwsi_state(wsi) == LRS_ISSUE_HTTP_BODY) { #if defined(LWS_WITH_HTTP_PROXY) if (wsi->http.proxy_clientside) { unsigned char *buf, prebuf[LWS_PRE + 1024]; size_t len = lws_buflist_next_segment_len( &wsi->parent->http.buflist_post_body, &buf); int n; if (len > sizeof(prebuf) - LWS_PRE) len = sizeof(prebuf) - LWS_PRE; if (len) { memcpy(prebuf + LWS_PRE, buf, len); lwsl_debug("%s: %p: proxying body %d %d %d %d %d\n", __func__, wsi, (int)len, (int)wsi->http.tx_content_length, (int)wsi->http.tx_content_remain, (int)wsi->http.rx_content_length, (int)wsi->http.rx_content_remain ); n = lws_write(wsi, prebuf + LWS_PRE, len, LWS_WRITE_HTTP); if (n < 0) { lwsl_err("%s: PROXY_BODY: write %d failed\n", __func__, (int)len); return LWS_HP_RET_BAIL_DIE; } lws_buflist_use_segment(&wsi->parent->http.buflist_post_body, len); } if (wsi->parent->http.buflist_post_body) lws_callback_on_writable(wsi); else { #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) /* prepare ourselves to do the parsing */ wsi->http.ah->parser_state = WSI_TOKEN_NAME_PART; wsi->http.ah->lextable_pos = 0; #if defined(LWS_WITH_CUSTOM_HEADERS) wsi->http.ah->unk_pos = 0; #endif #endif lwsi_set_state(wsi, LRS_WAITING_SERVER_REPLY); lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE, wsi->context->timeout_secs); } } #endif return LWS_HP_RET_USER_SERVICE; } if (lwsi_role_client(wsi)) return LWS_HP_RET_USER_SERVICE; return LWS_HP_RET_BAIL_OK; } static int rops_write_role_protocol_h1(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol *wp) { size_t olen = len; int n; #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (wsi->http.lcs && (((*wp) & 0x1f) == LWS_WRITE_HTTP_FINAL || ((*wp) & 0x1f) == LWS_WRITE_HTTP)) { unsigned char mtubuf[1400 + LWS_PRE + LWS_HTTP_CHUNK_HDR_MAX_SIZE + LWS_HTTP_CHUNK_TRL_MAX_SIZE], *out = mtubuf + LWS_PRE + LWS_HTTP_CHUNK_HDR_MAX_SIZE; size_t o = sizeof(mtubuf) - LWS_PRE - LWS_HTTP_CHUNK_HDR_MAX_SIZE - LWS_HTTP_CHUNK_TRL_MAX_SIZE; n = lws_http_compression_transform(wsi, buf, len, wp, &out, &o); if (n) return n; lwsl_info("%s: %p: transformed %d bytes to %d " "(wp 0x%x, more %d)\n", __func__, wsi, (int)len, (int)o, (int)*wp, wsi->http.comp_ctx.may_have_more); if (!o) return olen; if (wsi->http.comp_ctx.chunking) { char c[LWS_HTTP_CHUNK_HDR_MAX_SIZE + 2]; /* * this only needs dealing with on http/1.1 to allow * pipelining */ n = lws_snprintf(c, sizeof(c), "%X\x0d\x0a", (int)o); lwsl_info("%s: chunk (%d) %s", __func__, (int)o, c); out -= n; o += n; memcpy(out, c, n); out[o++] = '\x0d'; out[o++] = '\x0a'; if (((*wp) & 0x1f) == LWS_WRITE_HTTP_FINAL) { lwsl_info("%s: final chunk\n", __func__); out[o++] = '0'; out[o++] = '\x0d'; out[o++] = '\x0a'; out[o++] = '\x0d'; out[o++] = '\x0a'; } } buf = out; len = o; } #endif n = lws_issue_raw(wsi, (unsigned char *)buf, len); if (n < 0) return n; /* hide there may have been compression */ return (int)olen; } static int rops_alpn_negotiated_h1(struct lws *wsi, const char *alpn) { lwsl_debug("%s: client %d\n", __func__, lwsi_role_client(wsi)); #if !defined(LWS_NO_CLIENT) if (lwsi_role_client(wsi)) { /* * If alpn asserts it is http/1.1, server support for KA is * mandatory. * * Knowing this lets us proceed with sending pipelined headers * before we received the first response headers. */ wsi->keepalive_active = 1; } #endif return 0; } static int rops_destroy_role_h1(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; struct allocated_headers *ah; /* we may not have an ah, but may be on the waiting list... */ lwsl_info("%s: ah det due to close\n", __func__); __lws_header_table_detach(wsi, 0); ah = pt->http.ah_list; while (ah) { if (ah->in_use && ah->wsi == wsi) { lwsl_err("%s: ah leak: wsi %p\n", __func__, wsi); ah->in_use = 0; ah->wsi = NULL; pt->http.ah_count_in_use--; break; } ah = ah->next; } #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) lws_http_compression_destroy(wsi); #endif #ifdef LWS_ROLE_WS lws_free_set_NULL(wsi->ws); #endif return 0; } #if !defined(LWS_NO_SERVER) static int rops_adoption_bind_h1(struct lws *wsi, int type, const char *vh_prot_name) { if (!(type & LWS_ADOPT_HTTP)) return 0; /* no match */ if (type & _LWS_ADOPT_FINISH && !lwsi_role_http(wsi)) return 0; if (type & _LWS_ADOPT_FINISH) { if (!lws_header_table_attach(wsi, 0)) lwsl_debug("Attached ah immediately\n"); else lwsl_info("%s: waiting for ah\n", __func__); return 1; } lws_role_transition(wsi, LWSIFR_SERVER, (type & LWS_ADOPT_ALLOW_SSL) ? LRS_SSL_INIT : LRS_HEADERS, &role_ops_h1); /* * We have to bind to h1 as a default even when we're actually going to * replace it as an h2 bind later. So don't take this seriously if the * default is disabled (ws upgrade caees properly about it) */ if (!vh_prot_name && wsi->vhost->default_protocol_index < wsi->vhost->count_protocols) wsi->protocol = &wsi->vhost->protocols[ wsi->vhost->default_protocol_index]; else wsi->protocol = &wsi->vhost->protocols[0]; /* the transport is accepted... give him time to negotiate */ lws_set_timeout(wsi, PENDING_TIMEOUT_ESTABLISH_WITH_SERVER, wsi->context->timeout_secs); return 1; /* bound */ } #endif #if !defined(LWS_NO_CLIENT) static const char * const http_methods[] = { "GET", "POST", "OPTIONS", "PUT", "PATCH", "DELETE", "CONNECT" }; static int rops_client_bind_h1(struct lws *wsi, const struct lws_client_connect_info *i) { int n; if (!i) { /* we are finalizing an already-selected role */ /* * If we stay in http, assuming there wasn't already-set * external user_space, since we know our initial protocol * we can assign the user space now, otherwise do it after the * ws subprotocol negotiated */ if (!wsi->user_space && wsi->stash->method) if (lws_ensure_user_space(wsi)) return 1; /* * For ws, default to http/1.1 only. If i->alpn had been set * though, defer to whatever he has set in there (eg, "h2"). * * The problem is he has to commit to h2 before he can find * out if the server has the SETTINGS for ws-over-h2 enabled; * if not then ws is not possible on that connection. So we * only try h2 if he assertively said to use h2 alpn, otherwise * ws implies alpn restriction to h1. */ if (!wsi->stash->method && !wsi->stash->alpn) { wsi->stash->alpn = lws_strdup("http/1.1"); if (!wsi->stash->alpn) return 1; } /* if we went on the ah waiting list, it's ok, we can wait. * * When we do get the ah, now or later, he will end up at * lws_http_client_connect_via_info2(). */ if (lws_header_table_attach(wsi, 0) #ifndef LWS_NO_CLIENT < 0) /* * if we failed here, the connection is already closed * and freed. */ return -1; #else ) return 0; #endif return 0; } /* * Clients that want to be h1, h2, or ws all start out as h1 * (we don't yet know if the server supports h2 or ws) */ if (!i->method) { /* websockets */ #if defined(LWS_ROLE_WS) if (lws_create_client_ws_object(i, wsi)) goto fail_wsi; #else lwsl_err("%s: ws role not configured\n", __func__); goto fail_wsi; #endif goto bind_h1; } /* if a recognized http method, bind to it */ for (n = 0; n < (int)LWS_ARRAY_SIZE(http_methods); n++) if (!strcmp(i->method, http_methods[n])) goto bind_h1; /* other roles may bind to it */ return 0; /* no match */ bind_h1: /* assert the mode and union status (hdr) clearly */ lws_role_transition(wsi, LWSIFR_CLIENT, LRS_UNCONNECTED, &role_ops_h1); return 1; /* matched */ fail_wsi: return -1; } #endif #if 0 static int rops_perform_user_POLLOUT_h1(struct lws *wsi) { volatile struct lws *vwsi = (volatile struct lws *)wsi; int n; /* priority 1: post compression-transform buffered output */ if (lws_has_buffered_out(wsi)) { lwsl_debug("%s: completing partial\n", __func__); if (lws_issue_raw(wsi, NULL, 0) < 0) { lwsl_info("%s signalling to close\n", __func__); return -1; } n = 0; vwsi->leave_pollout_active = 1; goto cleanup; } /* priority 2: pre compression-transform buffered output */ #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more) { enum lws_write_protocol wp = LWS_WRITE_HTTP; lwsl_info("%s: completing comp partial" "(buflist_comp %p, may %d)\n", __func__, wsi->http.comp_ctx.buflist_comp, wsi->http.comp_ctx.may_have_more); if (rops_write_role_protocol_h1(wsi, NULL, 0, &wp) < 0) { lwsl_info("%s signalling to close\n", __func__); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "comp write fail"); } n = 0; vwsi->leave_pollout_active = 1; goto cleanup; } #endif /* priority 3: if no buffered out and waiting for that... */ if (lwsi_state(wsi) == LRS_FLUSHING_BEFORE_CLOSE) { wsi->socket_is_permanently_unusable = 1; return -1; } /* priority 4: user writeable callback */ vwsi = (volatile struct lws *)wsi; vwsi->leave_pollout_active = 0; n = lws_callback_as_writeable(wsi); cleanup: vwsi->handling_pollout = 0; if (vwsi->leave_pollout_active) lws_change_pollfd(wsi, 0, LWS_POLLOUT); return n; } #endif static int rops_close_kill_connection_h1(struct lws *wsi, enum lws_close_status reason) { #if defined(LWS_WITH_HTTP_PROXY) struct lws *wsi_eff = lws_client_wsi_effective(wsi); if (!wsi_eff->http.proxy_clientside) return 0; wsi_eff->http.proxy_clientside = 0; if (user_callback_handle_rxflow(wsi_eff->protocol->callback, wsi_eff, LWS_CALLBACK_COMPLETED_CLIENT_HTTP, wsi_eff->user_space, NULL, 0)) return 0; #endif return 0; } int rops_init_context_h1(struct lws_context *context, const struct lws_context_creation_info *info) { /* * We only want to do this once... we will do it if no h2 support * otherwise let h2 ops do it. */ #if !defined(LWS_ROLE_H2) int n; for (n = 0; n < context->count_threads; n++) { struct lws_context_per_thread *pt = &context->pt[n]; pt->sul_ah_lifecheck.cb = lws_sul_http_ah_lifecheck; __lws_sul_insert(&pt->pt_sul_owner, &pt->sul_ah_lifecheck, 30 * LWS_US_PER_SEC); } #endif return 0; } struct lws_role_ops role_ops_h1 = { /* role name */ "h1", /* alpn id */ "http/1.1", /* check_upgrades */ NULL, /* init_context */ rops_init_context_h1, /* init_vhost */ NULL, /* destroy_vhost */ NULL, /* periodic_checks */ NULL, /* service_flag_pending */ NULL, /* handle_POLLIN */ rops_handle_POLLIN_h1, /* handle_POLLOUT */ rops_handle_POLLOUT_h1, /* perform_user_POLLOUT */ NULL, /* callback_on_writable */ NULL, /* tx_credit */ NULL, /* write_role_protocol */ rops_write_role_protocol_h1, /* encapsulation_parent */ NULL, /* alpn_negotiated */ rops_alpn_negotiated_h1, /* close_via_role_protocol */ NULL, /* close_role */ NULL, /* close_kill_connection */ rops_close_kill_connection_h1, /* destroy_role */ rops_destroy_role_h1, #if !defined(LWS_NO_SERVER) /* adoption_bind */ rops_adoption_bind_h1, #else NULL, #endif #if !defined(LWS_NO_CLIENT) /* client_bind */ rops_client_bind_h1, #else NULL, #endif /* adoption_cb clnt, srv */ { LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED, LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED }, /* rx_cb clnt, srv */ { LWS_CALLBACK_RECEIVE_CLIENT_HTTP, 0 /* may be POST, etc */ }, /* writeable cb clnt, srv */ { LWS_CALLBACK_CLIENT_HTTP_WRITEABLE, LWS_CALLBACK_HTTP_WRITEABLE }, /* close cb clnt, srv */ { LWS_CALLBACK_CLOSED_CLIENT_HTTP, LWS_CALLBACK_CLOSED_HTTP }, /* protocol_bind cb c, srv */ { LWS_CALLBACK_CLIENT_HTTP_BIND_PROTOCOL, LWS_CALLBACK_HTTP_BIND_PROTOCOL }, /* protocol_unbind cb c, srv */ { LWS_CALLBACK_CLIENT_HTTP_DROP_PROTOCOL, LWS_CALLBACK_HTTP_DROP_PROTOCOL }, /* file_handle */ 0, }; libwebsockets-3.2.1/lib/roles/h1/private.h000066400000000000000000000021111357643561300204120ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is included from core/private.h if LWS_ROLE_H1 * * Most of the h1 business is defined in the h1 / h2 common roles/http dir */ extern struct lws_role_ops role_ops_h1; #define lwsi_role_h1(wsi) (wsi->role_ops == &role_ops_h1) libwebsockets-3.2.1/lib/roles/h2/000077500000000000000000000000001357643561300165755ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/h2/hpack.c000066400000000000000000001106441357643561300200350ustar00rootroot00000000000000/* * lib/hpack.c * * Copyright (C) 2014-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" /* * Official static header table for HPACK * +-------+-----------------------------+---------------+ | 1 | :authority | | | 2 | :method | GET | | 3 | :method | POST | | 4 | :path | / | | 5 | :path | /index.html | | 6 | :scheme | http | | 7 | :scheme | https | | 8 | :status | 200 | | 9 | :status | 204 | | 10 | :status | 206 | | 11 | :status | 304 | | 12 | :status | 400 | | 13 | :status | 404 | | 14 | :status | 500 | | 15 | accept-charset | | | 16 | accept-encoding | gzip, deflate | | 17 | accept-language | | | 18 | accept-ranges | | | 19 | accept | | | 20 | access-control-allow-origin | | | 21 | age | | | 22 | allow | | | 23 | authorization | | | 24 | cache-control | | | 25 | content-disposition | | | 26 | content-encoding | | | 27 | content-language | | | 28 | content-length | | | 29 | content-location | | | 30 | content-range | | | 31 | content-type | | | 32 | cookie | | | 33 | date | | | 34 | etag | | | 35 | expect | | | 36 | expires | | | 37 | from | | | 38 | host | | | 39 | if-match | | | 40 | if-modified-since | | | 41 | if-none-match | | | 42 | if-range | | | 43 | if-unmodified-since | | | 44 | last-modified | | | 45 | link | | | 46 | location | | | 47 | max-forwards | | | 48 | proxy-authenticate | | | 49 | proxy-authorization | | | 50 | range | | | 51 | referer | | | 52 | refresh | | | 53 | retry-after | | | 54 | server | | | 55 | set-cookie | | | 56 | strict-transport-security | | | 57 | transfer-encoding | | | 58 | user-agent | | | 59 | vary | | | 60 | via | | | 61 | www-authenticate | | +-------+-----------------------------+---------------+ */ static const uint8_t static_hdr_len[62] = { 0, /* starts at 1 */ 10, 7, 7, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 15, 15, 13, 6, 27, 3, 5, 13, 13, 19, 16, 16, 14, 16, 13, 12, 6, 4, 4, 6, 7, 4, 4, 8, 17, 13, 8, 19, 13, 4, 8, 12, 18, 19, 5, 7, 7, 11, 6, 10, 25, 17, 10, 4, 3, 16 }; static const unsigned char static_token[] = { 0, WSI_TOKEN_HTTP_COLON_AUTHORITY, WSI_TOKEN_HTTP_COLON_METHOD, WSI_TOKEN_HTTP_COLON_METHOD, WSI_TOKEN_HTTP_COLON_PATH, WSI_TOKEN_HTTP_COLON_PATH, WSI_TOKEN_HTTP_COLON_SCHEME, WSI_TOKEN_HTTP_COLON_SCHEME, WSI_TOKEN_HTTP_COLON_STATUS, WSI_TOKEN_HTTP_COLON_STATUS, WSI_TOKEN_HTTP_COLON_STATUS, WSI_TOKEN_HTTP_COLON_STATUS, WSI_TOKEN_HTTP_COLON_STATUS, WSI_TOKEN_HTTP_COLON_STATUS, WSI_TOKEN_HTTP_COLON_STATUS, WSI_TOKEN_HTTP_ACCEPT_CHARSET, WSI_TOKEN_HTTP_ACCEPT_ENCODING, WSI_TOKEN_HTTP_ACCEPT_LANGUAGE, WSI_TOKEN_HTTP_ACCEPT_RANGES, WSI_TOKEN_HTTP_ACCEPT, WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN, WSI_TOKEN_HTTP_AGE, WSI_TOKEN_HTTP_ALLOW, WSI_TOKEN_HTTP_AUTHORIZATION, WSI_TOKEN_HTTP_CACHE_CONTROL, WSI_TOKEN_HTTP_CONTENT_DISPOSITION, WSI_TOKEN_HTTP_CONTENT_ENCODING, WSI_TOKEN_HTTP_CONTENT_LANGUAGE, WSI_TOKEN_HTTP_CONTENT_LENGTH, WSI_TOKEN_HTTP_CONTENT_LOCATION, WSI_TOKEN_HTTP_CONTENT_RANGE, WSI_TOKEN_HTTP_CONTENT_TYPE, WSI_TOKEN_HTTP_COOKIE, WSI_TOKEN_HTTP_DATE, WSI_TOKEN_HTTP_ETAG, WSI_TOKEN_HTTP_EXPECT, WSI_TOKEN_HTTP_EXPIRES, WSI_TOKEN_HTTP_FROM, WSI_TOKEN_HOST, WSI_TOKEN_HTTP_IF_MATCH, WSI_TOKEN_HTTP_IF_MODIFIED_SINCE, WSI_TOKEN_HTTP_IF_NONE_MATCH, WSI_TOKEN_HTTP_IF_RANGE, WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE, WSI_TOKEN_HTTP_LAST_MODIFIED, WSI_TOKEN_HTTP_LINK, WSI_TOKEN_HTTP_LOCATION, WSI_TOKEN_HTTP_MAX_FORWARDS, WSI_TOKEN_HTTP_PROXY_AUTHENTICATE, WSI_TOKEN_HTTP_PROXY_AUTHORIZATION, WSI_TOKEN_HTTP_RANGE, WSI_TOKEN_HTTP_REFERER, WSI_TOKEN_HTTP_REFRESH, WSI_TOKEN_HTTP_RETRY_AFTER, WSI_TOKEN_HTTP_SERVER, WSI_TOKEN_HTTP_SET_COOKIE, WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY, WSI_TOKEN_HTTP_TRANSFER_ENCODING, WSI_TOKEN_HTTP_USER_AGENT, WSI_TOKEN_HTTP_VARY, WSI_TOKEN_HTTP_VIA, WSI_TOKEN_HTTP_WWW_AUTHENTICATE, }; /* some of the entries imply values as well as header names */ static const char * const http2_canned[] = { "", "", "GET", "POST", "/", "/index.html", "http", "https", "200", "204", "206", "304", "400", "404", "500", "", "gzip, deflate" }; /* see minihuf.c */ #include "huftable.h" static int huftable_decode(int pos, char c) { int q = pos + !!c; if (lextable_terms[q >> 3] & (1 << (q & 7))) /* terminal */ return lextable[q] | 0x8000; return pos + (lextable[q] << 1); } static int lws_frag_start(struct lws *wsi, int hdr_token_idx) { struct allocated_headers *ah = wsi->http.ah; if (!ah) { lwsl_notice("%s: no ah\n", __func__); return 1; } ah->hdr_token_idx = -1; lwsl_header("%s: token %d ah->pos = %d, ah->nfrag = %d\n", __func__, hdr_token_idx, ah->pos, ah->nfrag); if (!hdr_token_idx) { lwsl_err("%s: zero hdr_token_idx\n", __func__); return 1; } if (ah->nfrag >= LWS_ARRAY_SIZE(ah->frag_index)) { lwsl_err("%s: frag index %d too big\n", __func__, ah->nfrag); return 1; } if ((hdr_token_idx == WSI_TOKEN_HTTP_COLON_AUTHORITY || hdr_token_idx == WSI_TOKEN_HTTP_COLON_METHOD || hdr_token_idx == WSI_TOKEN_HTTP_COLON_PATH || hdr_token_idx == WSI_TOKEN_COLON_PROTOCOL || hdr_token_idx == WSI_TOKEN_HTTP_COLON_SCHEME) && ah->frag_index[hdr_token_idx]) { if (!(ah->frags[ah->frag_index[hdr_token_idx]].flags & 1)) { lws_h2_goaway(lws_get_network_wsi(wsi), H2_ERR_PROTOCOL_ERROR, "Duplicated pseudoheader"); return 1; } } if (ah->nfrag == 0) ah->nfrag = 1; ah->frags[ah->nfrag].offset = ah->pos; ah->frags[ah->nfrag].len = 0; ah->frags[ah->nfrag].nfrag = 0; ah->frags[ah->nfrag].flags = 2; /* we had reason to set it */ ah->hdr_token_idx = hdr_token_idx; /* * Okay, but we could be, eg, the second or subsequent cookie: header */ if (ah->frag_index[hdr_token_idx]) { int n; /* find the last fragment for this header... */ n = ah->frag_index[hdr_token_idx]; while (ah->frags[n].nfrag) n = ah->frags[n].nfrag; /* and point it to continue in our continuation fragment */ ah->frags[n].nfrag = ah->nfrag; /* cookie continuations need a separator token of ';' */ if (hdr_token_idx == WSI_TOKEN_HTTP_COOKIE) { ah->data[ah->pos++] = ';'; ah->frags[ah->nfrag].len++; } } else ah->frag_index[hdr_token_idx] = ah->nfrag; return 0; } static int lws_frag_append(struct lws *wsi, unsigned char c) { struct allocated_headers *ah = wsi->http.ah; ah->data[ah->pos++] = c; ah->frags[ah->nfrag].len++; return (int)ah->pos >= wsi->context->max_http_header_data; } static int lws_frag_end(struct lws *wsi) { lwsl_header("%s\n", __func__); if (lws_frag_append(wsi, 0)) return 1; /* don't account for the terminating NUL in the logical length */ wsi->http.ah->frags[wsi->http.ah->nfrag].len--; wsi->http.ah->nfrag++; return 0; } int lws_hdr_extant(struct lws *wsi, enum lws_token_indexes h) { struct allocated_headers *ah = wsi->http.ah; int n; if (!ah) return 0; n = ah->frag_index[h]; if (!n) return 0; return !!(ah->frags[n].flags & 2); } static void lws_dump_header(struct lws *wsi, int hdr) { char s[200]; const unsigned char *p; int len; if (hdr == LWS_HPACK_IGNORE_ENTRY) { lwsl_notice("hdr tok ignored\n"); return; } (void)p; len = lws_hdr_copy(wsi, s, sizeof(s) - 1, hdr); if (len < 0) strcpy(s, "(too big to show)"); else s[len] = '\0'; p = lws_token_to_string(hdr); lwsl_header(" hdr tok %d (%s) = '%s' (len %d)\n", hdr, p ? (char *)p : (char *)"null", s, len); } /* * dynamic table * * [ 0 .... num_entries - 1] * * Starts filling at 0+ * * #62 is *most recently entered* * * Number of entries is not restricted, but aggregated size of the entry * payloads is. Unfortunately the way HPACK does this is specific to an * imagined implementation, and lws implementation is much more efficient * (ignoring unknown headers and using the lws token index for the header * name part). */ /* * returns 0 if dynamic entry (arg and len are filled) * returns -1 if failure * returns nonzero token index if actually static token */ static int lws_token_from_index(struct lws *wsi, int index, const char **arg, int *len, uint32_t *hdr_len) { struct hpack_dynamic_table *dyn; if (index == LWS_HPACK_IGNORE_ENTRY) return LWS_HPACK_IGNORE_ENTRY; /* dynamic table only belongs to network wsi */ wsi = lws_get_network_wsi(wsi); if (!wsi->h2.h2n) return -1; dyn = &wsi->h2.h2n->hpack_dyn_table; if (index < 0) return -1; if (index < (int)LWS_ARRAY_SIZE(static_token)) { if (arg && index < (int)LWS_ARRAY_SIZE(http2_canned)) { *arg = http2_canned[index]; *len = (int)strlen(http2_canned[index]); } if (hdr_len) *hdr_len = static_hdr_len[index]; return static_token[index]; } if (!dyn) { lwsl_notice("no dynamic table\n"); return -1; } if (index < (int)LWS_ARRAY_SIZE(static_token) || index >= (int)LWS_ARRAY_SIZE(static_token) + dyn->used_entries) { lwsl_info(" %s: adjusted index %d >= %d\n", __func__, index, dyn->used_entries); lws_h2_goaway(wsi, H2_ERR_COMPRESSION_ERROR, "index out of range"); return -1; } index -= (int)LWS_ARRAY_SIZE(static_token); index = (dyn->pos - 1 - index) % dyn->num_entries; if (index < 0) index += dyn->num_entries; lwsl_header("%s: dyn index %d, tok %d\n", __func__, index, dyn->entries[index].lws_hdr_idx); if (arg && len) { *arg = dyn->entries[index].value; *len = dyn->entries[index].value_len; } if (hdr_len) *hdr_len = dyn->entries[index].hdr_len; return dyn->entries[index].lws_hdr_idx; } static int lws_h2_dynamic_table_dump(struct lws *wsi) { #if 0 struct lws *nwsi = lws_get_network_wsi(wsi); struct hpack_dynamic_table *dyn; int n, m; const char *p; if (!nwsi->h2.h2n) return 1; dyn = &nwsi->h2.h2n->hpack_dyn_table; lwsl_header("Dump dyn table for nwsi %p (%d / %d members, pos = %d, " "start index %d, virt used %d / %d)\n", nwsi, dyn->used_entries, dyn->num_entries, dyn->pos, (uint32_t)LWS_ARRAY_SIZE(static_token), dyn->virtual_payload_usage, dyn->virtual_payload_max); for (n = 0; n < dyn->used_entries; n++) { m = (dyn->pos - 1 - n) % dyn->num_entries; if (m < 0) m += dyn->num_entries; if (dyn->entries[m].lws_hdr_idx != LWS_HPACK_IGNORE_ENTRY) p = (const char *)lws_token_to_string( dyn->entries[m].lws_hdr_idx); else p = "(ignored)"; lwsl_header(" %3d: tok %s: (len %d) val '%s'\n", (int)(n + LWS_ARRAY_SIZE(static_token)), p, dyn->entries[m].hdr_len, dyn->entries[m].value ? dyn->entries[m].value : "null"); } #endif return 0; } static void lws_dynamic_free(struct hpack_dynamic_table *dyn, int idx) { lwsl_header("freeing %d for reuse\n", idx); dyn->virtual_payload_usage -= dyn->entries[idx].value_len + dyn->entries[idx].hdr_len; lws_free_set_NULL(dyn->entries[idx].value); dyn->entries[idx].value = NULL; dyn->entries[idx].value_len = 0; dyn->entries[idx].hdr_len = 0; dyn->entries[idx].lws_hdr_idx = LWS_HPACK_IGNORE_ENTRY; dyn->used_entries--; } /* * There are two address spaces, 1) internal ringbuffer and 2) HPACK indexes. * * Internal ringbuffer: * * The internal ringbuffer wraps as we keep filling it, dyn->pos points to * the next index to be written. * * HPACK indexes: * * The last-written entry becomes entry 0, the previously-last-written entry * becomes entry 1 etc. */ static int lws_dynamic_token_insert(struct lws *wsi, int hdr_len, int lws_hdr_index, char *arg, int len) { struct hpack_dynamic_table *dyn; int new_index; /* dynamic table only belongs to network wsi */ wsi = lws_get_network_wsi(wsi); if (!wsi->h2.h2n) return 1; dyn = &wsi->h2.h2n->hpack_dyn_table; if (!dyn->entries) { lwsl_err("%s: unsized dyn table\n", __func__); return 1; } lws_h2_dynamic_table_dump(wsi); new_index = (dyn->pos) % dyn->num_entries; if (dyn->num_entries && dyn->used_entries == dyn->num_entries) { if (dyn->virtual_payload_usage < dyn->virtual_payload_max) lwsl_err("Dropping header content before limit!\n"); /* we have to drop the oldest to make space */ lws_dynamic_free(dyn, new_index); } /* * evict guys to make room, allowing for some overage. We have to * take care about getting a single huge header, and evicting * everything */ while (dyn->virtual_payload_usage && dyn->used_entries && dyn->virtual_payload_usage + hdr_len + len > dyn->virtual_payload_max + 1024) { int n = (dyn->pos - dyn->used_entries) % dyn->num_entries; if (n < 0) n += dyn->num_entries; lws_dynamic_free(dyn, n); } if (dyn->used_entries < dyn->num_entries) dyn->used_entries++; dyn->entries[new_index].value_len = 0; if (lws_hdr_index != LWS_HPACK_IGNORE_ENTRY) { if (dyn->entries[new_index].value) lws_free_set_NULL(dyn->entries[new_index].value); dyn->entries[new_index].value = lws_malloc(len + 1, "hpack dyn"); if (!dyn->entries[new_index].value) return 1; memcpy(dyn->entries[new_index].value, arg, len); dyn->entries[new_index].value[len] = '\0'; dyn->entries[new_index].value_len = len; } else dyn->entries[new_index].value = NULL; dyn->entries[new_index].lws_hdr_idx = lws_hdr_index; dyn->entries[new_index].hdr_len = hdr_len; dyn->virtual_payload_usage += hdr_len + len; lwsl_info("%s: index %ld: lws_hdr_index 0x%x, hdr len %d, '%s' len %d\n", __func__, (long)LWS_ARRAY_SIZE(static_token), lws_hdr_index, hdr_len, dyn->entries[new_index].value ? dyn->entries[new_index].value : "null", len); dyn->pos = (dyn->pos + 1) % dyn->num_entries; lws_h2_dynamic_table_dump(wsi); return 0; } int lws_hpack_dynamic_size(struct lws *wsi, int size) { struct hpack_dynamic_table *dyn; struct hpack_dt_entry *dte; struct lws *nwsi; int min, n = 0, m; /* * "size" here is coming from the http/2 SETTING * SETTINGS_HEADER_TABLE_SIZE. This is a (virtual, in our case) * linear buffer containing dynamic header names and values... when it * is full, old entries are evicted. * * We encode the header as an lws_hdr_idx, which is all the rest of * lws cares about; if there is no matching header we store an empty * entry in the dyn table as a placeholder. * * So to make the two systems work together we keep an accounting of * what we are using to decide when to evict... we must only evict * things when the remote peer's accounting also makes him feel he * should evict something. */ nwsi = lws_get_network_wsi(wsi); if (!nwsi->h2.h2n) goto bail; dyn = &nwsi->h2.h2n->hpack_dyn_table; lwsl_info("%s: from %d to %d, lim %d\n", __func__, (int)dyn->num_entries, size, nwsi->vhost->h2.set.s[H2SET_HEADER_TABLE_SIZE]); if (!size) { size = dyn->num_entries * 8; lws_hpack_destroy_dynamic_header(wsi); } if (size > (int)nwsi->vhost->h2.set.s[H2SET_HEADER_TABLE_SIZE]) { lwsl_info("rejecting hpack dyn size %u vs %u\n", size, nwsi->vhost->h2.set.s[H2SET_HEADER_TABLE_SIZE]); // this seems necessary to work with some browsers if (nwsi->vhost->h2.set.s[H2SET_HEADER_TABLE_SIZE] == 65536 && size == 65537) { /* h2spec */ lws_h2_goaway(nwsi, H2_ERR_COMPRESSION_ERROR, "Asked for header table bigger than we told"); goto bail; } size = nwsi->vhost->h2.set.s[H2SET_HEADER_TABLE_SIZE]; } dyn->virtual_payload_max = size; size = size / 8; min = size; if (min > dyn->used_entries) min = dyn->used_entries; if (size == dyn->num_entries) return 0; if (dyn->num_entries < min) min = dyn->num_entries; // lwsl_notice("dte requested size %d\n", size); dte = lws_zalloc(sizeof(*dte) * (size + 1), "dynamic table entries"); if (!dte) goto bail; while (dyn->virtual_payload_usage && dyn->used_entries && dyn->virtual_payload_usage > dyn->virtual_payload_max) { n = (dyn->pos - dyn->used_entries) % dyn->num_entries; if (n < 0) n += dyn->num_entries; lws_dynamic_free(dyn, n); } if (min > dyn->used_entries) min = dyn->used_entries; if (dyn->entries) { for (n = 0; n < min; n++) { m = (dyn->pos - dyn->used_entries + n) % dyn->num_entries; if (m < 0) m += dyn->num_entries; dte[n] = dyn->entries[m]; } lws_free(dyn->entries); } dyn->entries = dte; dyn->num_entries = size; dyn->used_entries = min; if (size) dyn->pos = min % size; else dyn->pos = 0; lws_h2_dynamic_table_dump(wsi); return 0; bail: lwsl_info("%s: failed to resize to %d\n", __func__, size); return 1; } void lws_hpack_destroy_dynamic_header(struct lws *wsi) { struct hpack_dynamic_table *dyn; int n; if (!wsi->h2.h2n) return; dyn = &wsi->h2.h2n->hpack_dyn_table; if (!dyn->entries) return; for (n = 0; n < dyn->num_entries; n++) if (dyn->entries[n].value) lws_free_set_NULL(dyn->entries[n].value); lws_free_set_NULL(dyn->entries); } static int lws_hpack_use_idx_hdr(struct lws *wsi, int idx, int known_token) { const char *arg = NULL; int len = 0; const char *p = NULL; int tok = lws_token_from_index(wsi, idx, &arg, &len, NULL); if (tok == LWS_HPACK_IGNORE_ENTRY) { lwsl_header("%s: lws_token says ignore, returning\n", __func__); return 0; } if (tok == -1) { lwsl_info("%s: idx %d mapped to tok %d\n", __func__, idx, tok); return 1; } if (arg) { /* dynamic result */ if (known_token > 0) tok = known_token; lwsl_header("%s: dyn: idx %d '%s' tok %d\n", __func__, idx, arg, tok); } else lwsl_header("writing indexed hdr %d (tok %d '%s')\n", idx, tok, lws_token_to_string(tok)); if (tok == LWS_HPACK_IGNORE_ENTRY) return 0; if (arg) p = arg; if (idx < (int)LWS_ARRAY_SIZE(http2_canned)) p = http2_canned[idx]; if (lws_frag_start(wsi, tok)) return 1; if (p) while (*p && len--) if (lws_frag_append(wsi, *p++)) return 1; if (lws_frag_end(wsi)) return 1; lws_dump_header(wsi, tok); return 0; } static uint8_t lws_header_implies_psuedoheader_map[] = { 0x07, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00 /* <-64 */, 0x0e /* <- 72 */, 0x04 /* <- 80 */, 0, 0, 0, 0 }; static int lws_hpack_handle_pseudo_rules(struct lws *nwsi, struct lws *wsi, int m) { if (m == LWS_HPACK_IGNORE_ENTRY || m == -1) return 0; if (wsi->seen_nonpseudoheader && (lws_header_implies_psuedoheader_map[m >> 3] & (1 << (m & 7)))) { lwsl_info("lws tok %d seems to be a pseudoheader\n", m); /* * it's not legal to see a * pseudoheader after normal * headers */ lws_h2_goaway(nwsi, H2_ERR_PROTOCOL_ERROR, "Pseudoheader after normal hdrs"); return 1; } if (!(lws_header_implies_psuedoheader_map[m >> 3] & (1 << (m & 7)))) wsi->seen_nonpseudoheader = 1; return 0; } int lws_hpack_interpret(struct lws *wsi, unsigned char c) { struct lws *nwsi = lws_get_network_wsi(wsi); struct lws_h2_netconn *h2n = nwsi->h2.h2n; struct allocated_headers *ah = wsi->http.ah; unsigned int prev; unsigned char c1; int n, m, plen; if (!h2n) return -1; /* * HPKT_INDEXED_HDR_7 1xxxxxxx: just "header field" * HPKT_INDEXED_HDR_6_VALUE_INCR 01xxxxxx: NEW indexed hdr + val * HPKT_LITERAL_HDR_VALUE_INCR 01000000: NEW literal hdr + val * HPKT_INDEXED_HDR_4_VALUE 0000xxxx: indexed hdr + val * HPKT_INDEXED_HDR_4_VALUE_NEVER 0001xxxx: NEVER NEW indexed hdr + val * HPKT_LITERAL_HDR_VALUE 00000000: literal hdr + val * HPKT_LITERAL_HDR_VALUE_NEVER 00010000: NEVER NEW literal hdr + val */ switch (h2n->hpack) { case HPKS_TYPE: h2n->is_first_header_char = 1; h2n->huff_pad = 0; h2n->zero_huff_padding = 0; h2n->last_action_dyntable_resize = 0; h2n->ext_count = 0; h2n->hpack_hdr_len = 0; h2n->unknown_header = 0; ah->parser_state = 255; if (c & 0x80) { /* 1.... indexed header field only */ /* just a possibly-extended integer */ h2n->hpack_type = HPKT_INDEXED_HDR_7; lwsl_header("HPKT_INDEXED_HDR_7 hdr %d\n", c & 0x7f); lws_h2_dynamic_table_dump(wsi); h2n->hdr_idx = c & 0x7f; if ((c & 0x7f) == 0x7f) { h2n->hpack_len = 0; h2n->hpack_m = 0x7f; h2n->hpack = HPKS_IDX_EXT; break; } if (!h2n->hdr_idx) { lws_h2_goaway(nwsi, H2_ERR_COMPRESSION_ERROR, "hdr index 0 seen"); return 1; } m = lws_token_from_index(wsi, h2n->hdr_idx, NULL, NULL, NULL); if (lws_hpack_handle_pseudo_rules(nwsi, wsi, m)) return 1; lwsl_header("HPKT_INDEXED_HDR_7: hdr %d\n", c & 0x7f); if (lws_hpack_use_idx_hdr(wsi, c & 0x7f, -1)) { lwsl_header("%s: idx hdr wr fail\n", __func__); return 1; } /* stay at same state */ break; } if (c & 0x40) { /* 01.... indexed or literal header incr idx */ /* * [possibly-ext hdr idx (6) | new literal hdr name] * H + possibly-ext value length * literal value */ h2n->hdr_idx = 0; if (c == 0x40) { /* literal header */ lwsl_header(" HPKT_LITERAL_HDR_VALUE_INCR\n"); h2n->hpack_type = HPKT_LITERAL_HDR_VALUE_INCR; h2n->value = 0; h2n->hpack_len = 0; h2n->hpack = HPKS_HLEN; break; } /* indexed header */ h2n->hpack_type = HPKT_INDEXED_HDR_6_VALUE_INCR; lwsl_header(" HPKT_INDEXED_HDR_6_VALUE_INCR (hdr %d)\n", c & 0x3f); h2n->hdr_idx = c & 0x3f; if ((c & 0x3f) == 0x3f) { h2n->hpack_m = 0x3f; h2n->hpack_len = 0; h2n->hpack = HPKS_IDX_EXT; break; } h2n->value = 1; h2n->hpack = HPKS_HLEN; if (!h2n->hdr_idx) { lws_h2_goaway(nwsi, H2_ERR_COMPRESSION_ERROR, "hdr index 0 seen"); return 1; } break; } switch(c & 0xf0) { case 0x10: /* literal header never index */ case 0: /* literal header without indexing */ /* * follows 0x40 except 4-bit hdr idx * and don't add to index */ if (c == 0) { /* literal name */ h2n->hpack_type = HPKT_LITERAL_HDR_VALUE; lwsl_header(" HPKT_LITERAL_HDR_VALUE\n"); h2n->hpack = HPKS_HLEN; h2n->value = 0; break; } if (c == 0x10) { /* literal name NEVER */ h2n->hpack_type = HPKT_LITERAL_HDR_VALUE_NEVER; lwsl_header(" HPKT_LITERAL_HDR_VALUE_NEVER\n"); h2n->hpack = HPKS_HLEN; h2n->value = 0; break; } lwsl_header("indexed\n"); /* indexed name */ if (c & 0x10) { h2n->hpack_type = HPKT_INDEXED_HDR_4_VALUE_NEVER; lwsl_header("HPKT_LITERAL_HDR_4_VALUE_NEVER\n"); } else { h2n->hpack_type = HPKT_INDEXED_HDR_4_VALUE; lwsl_header(" HPKT_INDEXED_HDR_4_VALUE\n"); } h2n->hdr_idx = 0; if ((c & 0xf) == 0xf) { h2n->hpack_len = c & 0xf; h2n->hpack_m = 0xf; h2n->hpack_len = 0; h2n->hpack = HPKS_IDX_EXT; break; } h2n->hdr_idx = c & 0xf; h2n->value = 1; h2n->hpack = HPKS_HLEN; break; case 0x20: case 0x30: /* header table size update */ /* possibly-extended size value (5) */ lwsl_header("HPKT_SIZE_5 %x\n", c &0x1f); h2n->hpack_type = HPKT_SIZE_5; h2n->hpack_len = c & 0x1f; if (h2n->hpack_len == 0x1f) { h2n->hpack_m = 0x1f; h2n->hpack_len = 0; h2n->hpack = HPKS_IDX_EXT; break; } h2n->last_action_dyntable_resize = 1; if (lws_hpack_dynamic_size(wsi, h2n->hpack_len)) return 1; break; } break; case HPKS_IDX_EXT: h2n->hpack_len = h2n->hpack_len | ((c & 0x7f) << h2n->ext_count); h2n->ext_count += 7; if (c & 0x80) /* extended int not complete yet */ break; /* extended integer done */ h2n->hpack_len += h2n->hpack_m; lwsl_header("HPKS_IDX_EXT: hpack_len %d\n", h2n->hpack_len); switch (h2n->hpack_type) { case HPKT_INDEXED_HDR_7: if (lws_hpack_use_idx_hdr(wsi, h2n->hpack_len, h2n->hdr_idx)) { lwsl_notice("%s: hd7 use fail\n", __func__); return 1; } h2n->hpack = HPKS_TYPE; break; case HPKT_SIZE_5: h2n->last_action_dyntable_resize = 1; if (lws_hpack_dynamic_size(wsi, h2n->hpack_len)) return 1; h2n->hpack = HPKS_TYPE; break; default: h2n->hdr_idx = h2n->hpack_len; if (!h2n->hdr_idx) { lws_h2_goaway(nwsi, H2_ERR_COMPRESSION_ERROR, "extended header index was 0"); return 1; } h2n->value = 1; h2n->hpack = HPKS_HLEN; break; } break; case HPKS_HLEN: /* [ H | 7+ ] */ h2n->huff = !!(c & 0x80); h2n->hpack_pos = 0; h2n->hpack_len = c & 0x7f; if (h2n->hpack_len == 0x7f) { h2n->hpack_m = 0x7f; h2n->hpack_len = 0; h2n->ext_count = 0; h2n->hpack = HPKS_HLEN_EXT; break; } pre_data: h2n->hpack = HPKS_DATA; if (!h2n->value || !h2n->hdr_idx) { ah->parser_state = WSI_TOKEN_NAME_PART; ah->lextable_pos = 0; h2n->unknown_header = 0; break; } if (h2n->hpack_type == HPKT_LITERAL_HDR_VALUE || h2n->hpack_type == HPKT_LITERAL_HDR_VALUE_INCR || h2n->hpack_type == HPKT_LITERAL_HDR_VALUE_NEVER) { n = ah->parser_state; if (n == 255) { n = -1; h2n->hdr_idx = -1; } else h2n->hdr_idx = 1; } else { n = lws_token_from_index(wsi, h2n->hdr_idx, NULL, NULL, NULL); lwsl_header(" lws_tok_from_idx(%d) says %d\n", h2n->hdr_idx, n); } if (n == LWS_HPACK_IGNORE_ENTRY || n == -1) h2n->hdr_idx = LWS_HPACK_IGNORE_ENTRY; switch (h2n->hpack_type) { /* * hpack types with literal headers were parsed by the lws * header SM... on recognition of a known lws header, it does * the correct lws_frag_start() for us already. Other types * (ie, indexed header) need us to do it here. */ case HPKT_LITERAL_HDR_VALUE_INCR: case HPKT_LITERAL_HDR_VALUE: case HPKT_LITERAL_HDR_VALUE_NEVER: break; default: if (n != -1 && n != LWS_HPACK_IGNORE_ENTRY && lws_frag_start(wsi, n)) { lwsl_header("%s: frag start failed\n", __func__); return 1; } break; } break; case HPKS_HLEN_EXT: h2n->hpack_len = h2n->hpack_len | ((c & 0x7f) << h2n->ext_count); h2n->ext_count += 7; if (c & 0x80) /* extended integer not complete yet */ break; h2n->hpack_len += h2n->hpack_m; goto pre_data; case HPKS_DATA: //lwsl_header(" 0x%02X huff %d\n", c, h2n->huff); c1 = c; for (n = 0; n < 8; n++) { if (h2n->huff) { char b = (c >> 7) & 1; prev = h2n->hpack_pos; h2n->hpack_pos = huftable_decode( h2n->hpack_pos, b); c <<= 1; if (h2n->hpack_pos == 0xffff) { lwsl_notice("Huffman err\n"); return 1; } if (!(h2n->hpack_pos & 0x8000)) { if (!b) h2n->zero_huff_padding = 1; h2n->huff_pad++; continue; } c1 = h2n->hpack_pos & 0x7fff; h2n->hpack_pos = 0; h2n->huff_pad = 0; h2n->zero_huff_padding = 0; /* EOS |11111111|11111111|11111111|111111 */ if (!c1 && prev == HUFTABLE_0x100_PREV) { lws_h2_goaway(nwsi, H2_ERR_COMPRESSION_ERROR, "Huffman EOT seen"); return 1; } } else n = 8; if (h2n->value) { /* value */ if (h2n->hdr_idx && h2n->hdr_idx != LWS_HPACK_IGNORE_ENTRY) { if (ah->hdr_token_idx == WSI_TOKEN_HTTP_COLON_PATH) { switch (lws_parse_urldecode( wsi, &c1)) { case LPUR_CONTINUE: break; case LPUR_SWALLOW: goto swallow; case LPUR_EXCESSIVE: case LPUR_FORBID: lws_h2_goaway(nwsi, H2_ERR_PROTOCOL_ERROR, "Evil URI"); return 1; default: return -1; } } if (lws_frag_append(wsi, c1)) { lwsl_notice( "%s: frag app fail\n", __func__); return 1; } } //else //lwsl_header("ignoring %c\n", c1); } else { /* * Convert name using existing parser, * If h2n->unknown_header == 0, result is * in wsi->parser_state * using WSI_TOKEN_GET_URI. * * If unknown header h2n->unknown_header * will be set. */ h2n->hpack_hdr_len++; if (h2n->is_first_header_char) { h2n->is_first_header_char = 0; h2n->first_hdr_char = c1; } lwsl_header("parser: %c\n", c1); /* uppercase header names illegal */ if (c1 >= 'A' && c1 <= 'Z') { lws_h2_goaway(nwsi, H2_ERR_COMPRESSION_ERROR, "Uppercase literal hpack hdr"); return 1; } plen = 1; if (!h2n->unknown_header && lws_parse(wsi, &c1, &plen)) h2n->unknown_header = 1; } swallow: (void)n; } // for n if (--h2n->hpack_len) break; /* * The header (h2n->value = 0) or the payload (h2n->value = 1) * is complete. */ if (h2n->huff && (h2n->huff_pad > 7 || (h2n->zero_huff_padding && h2n->huff_pad))) { lwsl_info("zero_huff_padding: %d huff_pad: %d\n", h2n->zero_huff_padding, h2n->huff_pad); lws_h2_goaway(nwsi, H2_ERR_COMPRESSION_ERROR, "Huffman padding excessive or wrong"); return 1; } if (!h2n->value && ( h2n->hpack_type == HPKT_LITERAL_HDR_VALUE || h2n->hpack_type == HPKT_LITERAL_HDR_VALUE_INCR || h2n->hpack_type == HPKT_LITERAL_HDR_VALUE_NEVER)) { h2n->hdr_idx = LWS_HPACK_IGNORE_ENTRY; lwsl_header("wsi->parser_state: %d\n", ah->parser_state); if (ah->parser_state == WSI_TOKEN_NAME_PART) { /* h2 headers come without the colon */ c1 = ':'; plen = 1; n = lws_parse(wsi, &c1, &plen); (void)n; } if (ah->parser_state == WSI_TOKEN_NAME_PART || #if defined(LWS_WITH_CUSTOM_HEADERS) ah->parser_state == WSI_TOKEN_UNKNOWN_VALUE_PART || #endif ah->parser_state == WSI_TOKEN_SKIPPING) { h2n->unknown_header = 1; ah->parser_state = -1; wsi->seen_nonpseudoheader = 1; } } n = 8; /* we have the header */ if (!h2n->value) { h2n->value = 1; h2n->hpack = HPKS_HLEN; h2n->huff_pad = 0; h2n->zero_huff_padding = 0; h2n->ext_count = 0; break; } /* * we have got both the header and value */ m = -1; switch (h2n->hpack_type) { /* * These are the only two that insert to the dyntable */ /* NEW indexed hdr with value */ case HPKT_INDEXED_HDR_6_VALUE_INCR: /* header length is determined by known index */ m = lws_token_from_index(wsi, h2n->hdr_idx, NULL, NULL, &h2n->hpack_hdr_len); goto add_it; /* NEW literal hdr with value */ case HPKT_LITERAL_HDR_VALUE_INCR: /* * hdr is a new literal, so length is already in * h2n->hpack_hdr_len */ m = ah->parser_state; if (h2n->unknown_header || ah->parser_state == WSI_TOKEN_NAME_PART || ah->parser_state == WSI_TOKEN_SKIPPING) { if (h2n->first_hdr_char == ':') { lwsl_info("HPKT_LITERAL_HDR_VALUE_INCR:" " end state %d unk hdr %d\n", ah->parser_state, h2n->unknown_header); /* unknown pseudoheaders are illegal */ lws_h2_goaway(nwsi, H2_ERR_PROTOCOL_ERROR, "Unknown pseudoheader"); return 1; } m = LWS_HPACK_IGNORE_ENTRY; } add_it: /* * mark us as having been set at the time of dynamic * token insertion. */ ah->frags[ah->nfrag].flags |= 1; if (lws_dynamic_token_insert(wsi, h2n->hpack_hdr_len, m, &ah->data[ah->frags[ah->nfrag].offset], ah->frags[ah->nfrag].len)) { lwsl_notice("%s: tok_insert fail\n", __func__); return 1; } break; default: break; } if (h2n->hdr_idx != LWS_HPACK_IGNORE_ENTRY && lws_frag_end(wsi)) return 1; if (h2n->hpack_type != HPKT_INDEXED_HDR_6_VALUE_INCR) { if (h2n->hpack_type == HPKT_LITERAL_HDR_VALUE || h2n->hpack_type == HPKT_LITERAL_HDR_VALUE_INCR || h2n->hpack_type == HPKT_LITERAL_HDR_VALUE_NEVER) { m = ah->parser_state; if (m == 255) m = -1; } else m = lws_token_from_index(wsi, h2n->hdr_idx, NULL, NULL, NULL); } if (m != -1 && m != LWS_HPACK_IGNORE_ENTRY) lws_dump_header(wsi, m); if (lws_hpack_handle_pseudo_rules(nwsi, wsi, m)) return 1; h2n->is_first_header_char = 1; h2n->hpack = HPKS_TYPE; break; } return 0; } static int lws_h2_num_start(int starting_bits, unsigned long num) { unsigned int mask = (1 << starting_bits) - 1; if (num < mask) return (int)num; return mask; } static int lws_h2_num(int starting_bits, unsigned long num, unsigned char **p, unsigned char *end) { unsigned int mask = (1 << starting_bits) - 1; if (num < mask) return 0; num -= mask; do { if (num > 127) *((*p)++) = 0x80 | (num & 0x7f); else *((*p)++) = 0x00 | (num & 0x7f); if (*p >= end) return 1; num >>= 7; } while (num); return 0; } int lws_add_http2_header_by_name(struct lws *wsi, const unsigned char *name, const unsigned char *value, int length, unsigned char **p, unsigned char *end) { int len; lwsl_header("%s: %p %s:%s\n", __func__, *p, name, value); len = (int)strlen((char *)name); if (len) if (name[len - 1] == ':') len--; if (wsi->http2_substream && !strncmp((const char *)name, "transfer-encoding", len)) { lwsl_header("rejecting %s\n", name); return 0; } if (end - *p < len + length + 8) return 1; *((*p)++) = 0; /* literal hdr, literal name, */ *((*p)++) = 0 | lws_h2_num_start(7, len); /* non-HUF */ if (lws_h2_num(7, len, p, end)) return 1; /* upper-case header names are verboten in h2, but OK on h1, so * they're not illegal per se. Silently convert them for h2... */ while(len--) *((*p)++) = tolower((int)*name++); *((*p)++) = 0 | lws_h2_num_start(7, length); /* non-HUF */ if (lws_h2_num(7, length, p, end)) return 1; memcpy(*p, value, length); *p += length; return 0; } int lws_add_http2_header_by_token(struct lws *wsi, enum lws_token_indexes token, const unsigned char *value, int length, unsigned char **p, unsigned char *end) { const unsigned char *name; name = lws_token_to_string(token); if (!name) return 1; return lws_add_http2_header_by_name(wsi, name, value, length, p, end); } int lws_add_http2_header_status(struct lws *wsi, unsigned int code, unsigned char **p, unsigned char *end) { unsigned char status[10]; int n; wsi->h2.send_END_STREAM = 0; // !!(code >= 400); n = sprintf((char *)status, "%u", code); if (lws_add_http2_header_by_token(wsi, WSI_TOKEN_HTTP_COLON_STATUS, status, n, p, end)) return 1; return 0; } libwebsockets-3.2.1/lib/roles/h2/http2.c000066400000000000000000001735121357643561300200130ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" /* * bitmap of control messages that are valid to receive for each http2 state */ static const uint16_t http2_rx_validity[] = { /* LWS_H2S_IDLE */ (1 << LWS_H2_FRAME_TYPE_SETTINGS) | (1 << LWS_H2_FRAME_TYPE_PRIORITY) | // (1 << LWS_H2_FRAME_TYPE_WINDOW_UPDATE)| /* ignore */ (1 << LWS_H2_FRAME_TYPE_HEADERS) | (1 << LWS_H2_FRAME_TYPE_CONTINUATION), /* LWS_H2S_RESERVED_LOCAL */ (1 << LWS_H2_FRAME_TYPE_SETTINGS) | (1 << LWS_H2_FRAME_TYPE_RST_STREAM) | (1 << LWS_H2_FRAME_TYPE_PRIORITY) | (1 << LWS_H2_FRAME_TYPE_WINDOW_UPDATE), /* LWS_H2S_RESERVED_REMOTE */ (1 << LWS_H2_FRAME_TYPE_SETTINGS) | (1 << LWS_H2_FRAME_TYPE_HEADERS) | (1 << LWS_H2_FRAME_TYPE_CONTINUATION) | (1 << LWS_H2_FRAME_TYPE_RST_STREAM) | (1 << LWS_H2_FRAME_TYPE_PRIORITY), /* LWS_H2S_OPEN */ (1 << LWS_H2_FRAME_TYPE_DATA) | (1 << LWS_H2_FRAME_TYPE_HEADERS) | (1 << LWS_H2_FRAME_TYPE_PRIORITY) | (1 << LWS_H2_FRAME_TYPE_RST_STREAM) | (1 << LWS_H2_FRAME_TYPE_SETTINGS) | (1 << LWS_H2_FRAME_TYPE_PUSH_PROMISE) | (1 << LWS_H2_FRAME_TYPE_PING) | (1 << LWS_H2_FRAME_TYPE_GOAWAY) | (1 << LWS_H2_FRAME_TYPE_WINDOW_UPDATE) | (1 << LWS_H2_FRAME_TYPE_CONTINUATION), /* LWS_H2S_HALF_CLOSED_REMOTE */ (1 << LWS_H2_FRAME_TYPE_SETTINGS) | (1 << LWS_H2_FRAME_TYPE_WINDOW_UPDATE) | (1 << LWS_H2_FRAME_TYPE_PRIORITY) | (1 << LWS_H2_FRAME_TYPE_RST_STREAM), /* LWS_H2S_HALF_CLOSED_LOCAL */ (1 << LWS_H2_FRAME_TYPE_DATA) | (1 << LWS_H2_FRAME_TYPE_HEADERS) | (1 << LWS_H2_FRAME_TYPE_PRIORITY) | (1 << LWS_H2_FRAME_TYPE_RST_STREAM) | (1 << LWS_H2_FRAME_TYPE_SETTINGS) | (1 << LWS_H2_FRAME_TYPE_PUSH_PROMISE) | (1 << LWS_H2_FRAME_TYPE_PING) | (1 << LWS_H2_FRAME_TYPE_GOAWAY) | (1 << LWS_H2_FRAME_TYPE_WINDOW_UPDATE) | (1 << LWS_H2_FRAME_TYPE_CONTINUATION), /* LWS_H2S_CLOSED */ (1 << LWS_H2_FRAME_TYPE_SETTINGS) | (1 << LWS_H2_FRAME_TYPE_PRIORITY) | (1 << LWS_H2_FRAME_TYPE_WINDOW_UPDATE) | (1 << LWS_H2_FRAME_TYPE_RST_STREAM), }; static const char *preface = "PRI * HTTP/2.0\x0d\x0a\x0d\x0aSM\x0d\x0a\x0d\x0a"; static const char * const h2_state_names[] = { "LWS_H2S_IDLE", "LWS_H2S_RESERVED_LOCAL", "LWS_H2S_RESERVED_REMOTE", "LWS_H2S_OPEN", "LWS_H2S_HALF_CLOSED_REMOTE", "LWS_H2S_HALF_CLOSED_LOCAL", "LWS_H2S_CLOSED", }; #if 0 static const char * const h2_setting_names[] = { "", "H2SET_HEADER_TABLE_SIZE", "H2SET_ENABLE_PUSH", "H2SET_MAX_CONCURRENT_STREAMS", "H2SET_INITIAL_WINDOW_SIZE", "H2SET_MAX_FRAME_SIZE", "H2SET_MAX_HEADER_LIST_SIZE", "reserved", "H2SET_ENABLE_CONNECT_PROTOCOL" }; void lws_h2_dump_settings(struct http2_settings *set) { int n; for (n = 1; n < H2SET_COUNT; n++) lwsl_notice(" %30s: %10d\n", h2_setting_names[n], set->s[n]); } #else void lws_h2_dump_settings(struct http2_settings *set) { } #endif static struct lws_h2_protocol_send * lws_h2_new_pps(enum lws_h2_protocol_send_type type) { struct lws_h2_protocol_send *pps = lws_malloc(sizeof(*pps), "pps"); if (pps) pps->type = type; return pps; } void lws_h2_init(struct lws *wsi) { wsi->h2.h2n->set = wsi->vhost->h2.set; } void lws_h2_state(struct lws *wsi, enum lws_h2_states s) { if (!wsi) return; lwsl_info("%s: wsi %p: state %s -> %s\n", __func__, wsi, h2_state_names[wsi->h2.h2_state], h2_state_names[s]); (void)h2_state_names; wsi->h2.h2_state = (uint8_t)s; } struct lws * lws_wsi_server_new(struct lws_vhost *vh, struct lws *parent_wsi, unsigned int sid) { struct lws *wsi; struct lws *nwsi = lws_get_network_wsi(parent_wsi); struct lws_h2_netconn *h2n = nwsi->h2.h2n; /* * The identifier of a newly established stream MUST be numerically * greater than all streams that the initiating endpoint has opened or * reserved. This governs streams that are opened using a HEADERS frame * and streams that are reserved using PUSH_PROMISE. An endpoint that * receives an unexpected stream identifier MUST respond with a * connection error (Section 5.4.1) of type PROTOCOL_ERROR. */ if (sid <= h2n->highest_sid_opened) { lwsl_info("%s: tried to open lower sid %d\n", __func__, sid); lws_h2_goaway(nwsi, H2_ERR_PROTOCOL_ERROR, "Bad sid"); return NULL; } /* no more children allowed by parent */ if (parent_wsi->h2.child_count + 1 > parent_wsi->h2.h2n->set.s[H2SET_MAX_CONCURRENT_STREAMS]) { lwsl_notice("reached concurrent stream limit\n"); return NULL; } wsi = lws_create_new_server_wsi(vh, parent_wsi->tsi); if (!wsi) { lwsl_notice("new server wsi failed (vh %p)\n", vh); return NULL; } h2n->highest_sid_opened = sid; wsi->h2.my_sid = sid; wsi->http2_substream = 1; wsi->seen_nonpseudoheader = 0; wsi->h2.parent_wsi = parent_wsi; wsi->role_ops = parent_wsi->role_ops; /* new guy's sibling is whoever was the first child before */ wsi->h2.sibling_list = parent_wsi->h2.child_list; /* first child is now the new guy */ parent_wsi->h2.child_list = wsi; parent_wsi->h2.child_count++; wsi->h2.my_priority = 16; wsi->h2.tx_cr = nwsi->h2.h2n->set.s[H2SET_INITIAL_WINDOW_SIZE]; wsi->h2.peer_tx_cr_est = nwsi->vhost->h2.set.s[H2SET_INITIAL_WINDOW_SIZE]; lwsi_set_state(wsi, LRS_ESTABLISHED); lwsi_set_role(wsi, lwsi_role(parent_wsi)); wsi->protocol = &vh->protocols[0]; if (lws_ensure_user_space(wsi)) goto bail1; wsi->vhost->conn_stats.h2_subs++; lwsl_info("%s: %p new ch %p, sid %d, usersp=%p, tx cr %d, " "peer_credit %d (nwsi tx_cr %d)\n", __func__, parent_wsi, wsi, sid, wsi->user_space, wsi->h2.tx_cr, wsi->h2.peer_tx_cr_est, nwsi->h2.tx_cr); return wsi; bail1: /* undo the insert */ parent_wsi->h2.child_list = wsi->h2.sibling_list; parent_wsi->h2.child_count--; vh->context->count_wsi_allocated--; if (wsi->user_space) lws_free_set_NULL(wsi->user_space); vh->protocols[0].callback(wsi, LWS_CALLBACK_WSI_DESTROY, NULL, NULL, 0); lws_vhost_unbind_wsi(wsi); lws_free(wsi); return NULL; } struct lws * lws_wsi_h2_adopt(struct lws *parent_wsi, struct lws *wsi) { struct lws *nwsi = lws_get_network_wsi(parent_wsi); /* no more children allowed by parent */ if (parent_wsi->h2.child_count + 1 > parent_wsi->h2.h2n->set.s[H2SET_MAX_CONCURRENT_STREAMS]) { lwsl_notice("reached concurrent stream limit\n"); return NULL; } /* sid is set just before issuing the headers, ensuring monoticity */ wsi->seen_nonpseudoheader = 0; #if !defined(LWS_NO_CLIENT) wsi->client_h2_substream = 1; #endif wsi->h2.initialized = 1; wsi->h2.parent_wsi = parent_wsi; /* new guy's sibling is whoever was the first child before */ wsi->h2.sibling_list = parent_wsi->h2.child_list; /* first child is now the new guy */ parent_wsi->h2.child_list = wsi; parent_wsi->h2.child_count++; wsi->h2.my_priority = 16; wsi->h2.tx_cr = nwsi->h2.h2n->set.s[H2SET_INITIAL_WINDOW_SIZE]; wsi->h2.peer_tx_cr_est = nwsi->vhost->h2.set.s[H2SET_INITIAL_WINDOW_SIZE]; if (lws_ensure_user_space(wsi)) goto bail1; lws_role_transition(wsi, LWSIFR_CLIENT, LRS_H2_WAITING_TO_SEND_HEADERS, &role_ops_h2); lws_callback_on_writable(wsi); wsi->vhost->conn_stats.h2_subs++; return wsi; bail1: /* undo the insert */ parent_wsi->h2.child_list = wsi->h2.sibling_list; parent_wsi->h2.child_count--; if (wsi->user_space) lws_free_set_NULL(wsi->user_space); wsi->protocol->callback(wsi, LWS_CALLBACK_WSI_DESTROY, NULL, NULL, 0); lws_free(wsi); return NULL; } int lws_h2_issue_preface(struct lws *wsi) { struct lws_h2_netconn *h2n = wsi->h2.h2n; struct lws_h2_protocol_send *pps; if (lws_issue_raw(wsi, (uint8_t *)preface, strlen(preface)) != (int)strlen(preface)) return 1; lws_role_transition(wsi, LWSIFR_CLIENT, LRS_H2_WAITING_TO_SEND_HEADERS, &role_ops_h2); h2n->count = 0; wsi->h2.tx_cr = 65535; /* * we must send a settings frame */ pps = lws_h2_new_pps(LWS_H2_PPS_MY_SETTINGS); if (!pps) return 1; lws_pps_schedule(wsi, pps); lwsl_info("%s: h2 client sending settings\n", __func__); return 0; } struct lws * lws_h2_wsi_from_id(struct lws *parent_wsi, unsigned int sid) { lws_start_foreach_ll(struct lws *, wsi, parent_wsi->h2.child_list) { if (wsi->h2.my_sid == sid) return wsi; } lws_end_foreach_ll(wsi, h2.sibling_list); return NULL; } int lws_remove_server_child_wsi(struct lws_context *context, struct lws *wsi) { lws_start_foreach_llp(struct lws **, w, wsi->h2.child_list) { if (*w == wsi) { *w = wsi->h2.sibling_list; (wsi->h2.parent_wsi)->h2.child_count--; return 0; } } lws_end_foreach_llp(w, h2.sibling_list); lwsl_err("%s: can't find %p\n", __func__, wsi); return 1; } void lws_pps_schedule(struct lws *wsi, struct lws_h2_protocol_send *pps) { struct lws *nwsi = lws_get_network_wsi(wsi); struct lws_h2_netconn *h2n = nwsi->h2.h2n; pps->next = h2n->pps; h2n->pps = pps; lws_rx_flow_control(wsi, LWS_RXFLOW_REASON_APPLIES_DISABLE | LWS_RXFLOW_REASON_H2_PPS_PENDING); lws_callback_on_writable(wsi); } int lws_h2_goaway(struct lws *wsi, uint32_t err, const char *reason) { struct lws_h2_netconn *h2n = wsi->h2.h2n; struct lws_h2_protocol_send *pps; if (h2n->type == LWS_H2_FRAME_TYPE_COUNT) return 0; pps = lws_h2_new_pps(LWS_H2_PPS_GOAWAY); if (!pps) return 1; lwsl_info("%s: %p: ERR 0x%x, '%s'\n", __func__, wsi, err, reason); pps->u.ga.err = err; pps->u.ga.highest_sid = h2n->highest_sid; lws_strncpy(pps->u.ga.str, reason, sizeof(pps->u.ga.str)); lws_pps_schedule(wsi, pps); h2n->type = LWS_H2_FRAME_TYPE_COUNT; /* ie, IGNORE */ return 0; } int lws_h2_rst_stream(struct lws *wsi, uint32_t err, const char *reason) { struct lws *nwsi = lws_get_network_wsi(wsi); struct lws_h2_netconn *h2n = nwsi->h2.h2n; struct lws_h2_protocol_send *pps; if (!h2n) return 0; if (!wsi->h2_stream_carries_ws && h2n->type == LWS_H2_FRAME_TYPE_COUNT) return 0; pps = lws_h2_new_pps(LWS_H2_PPS_RST_STREAM); if (!pps) return 1; lwsl_info("%s: RST_STREAM 0x%x, sid %d, REASON '%s'\n", __func__, err, wsi->h2.my_sid, reason); pps->u.rs.sid = wsi->h2.my_sid; pps->u.rs.err = err; lws_pps_schedule(wsi, pps); h2n->type = LWS_H2_FRAME_TYPE_COUNT; /* ie, IGNORE */ lws_h2_state(wsi, LWS_H2_STATE_CLOSED); return 0; } int lws_h2_settings(struct lws *wsi, struct http2_settings *settings, unsigned char *buf, int len) { struct lws *nwsi = lws_get_network_wsi(wsi); unsigned int a, b; if (!len) return 0; if (len < LWS_H2_SETTINGS_LEN) return 1; while (len >= LWS_H2_SETTINGS_LEN) { a = (buf[0] << 8) | buf[1]; if (!a || a >= H2SET_COUNT) goto skip; b = buf[2] << 24 | buf[3] << 16 | buf[4] << 8 | buf[5]; switch (a) { case H2SET_HEADER_TABLE_SIZE: break; case H2SET_ENABLE_PUSH: if (b > 1) { lws_h2_goaway(nwsi, H2_ERR_PROTOCOL_ERROR, "ENABLE_PUSH invalid arg"); return 1; } break; case H2SET_MAX_CONCURRENT_STREAMS: break; case H2SET_INITIAL_WINDOW_SIZE: if (b > 0x7fffffff) { lws_h2_goaway(nwsi, H2_ERR_FLOW_CONTROL_ERROR, "Inital Window beyond max"); return 1; } #if defined(LWS_AMAZON_RTOS) || defined(LWS_AMAZON_LINUX) //FIXME: Workaround for FIRMWARE-4632 until cloud-side issue is fixed. if (b == 0x7fffffff) { b = 65535; lwsl_info("init window size 0x7fffffff\n"); break; } //FIXME: end of FIRMWARE-4632 workaround #endif /* * In addition to changing the flow-control window for * streams that are not yet active, a SETTINGS frame * can alter the initial flow-control window size for * streams with active flow-control windows (that is, * streams in the "open" or "half-closed (remote)" * state). When the value of * SETTINGS_INITIAL_WINDOW_SIZE changes, a receiver * MUST adjust the size of all stream flow-control * windows that it maintains by the difference between * the new value and the old value. */ lws_start_foreach_ll(struct lws *, w, nwsi->h2.child_list) { lwsl_info("%s: adi child tc cr %d +%d -> %d", __func__, w->h2.tx_cr, b - settings->s[a], w->h2.tx_cr + b - settings->s[a]); w->h2.tx_cr += b - settings->s[a]; if (w->h2.tx_cr > 0 && w->h2.tx_cr <= (int32_t)(b - settings->s[a])) lws_callback_on_writable(w); } lws_end_foreach_ll(w, h2.sibling_list); break; case H2SET_MAX_FRAME_SIZE: if (b < wsi->vhost->h2.set.s[H2SET_MAX_FRAME_SIZE]) { lws_h2_goaway(nwsi, H2_ERR_PROTOCOL_ERROR, "Frame size < initial"); return 1; } if (b > 0x00ffffff) { lws_h2_goaway(nwsi, H2_ERR_PROTOCOL_ERROR, "Settings Frame size above max"); return 1; } break; case H2SET_MAX_HEADER_LIST_SIZE: break; } settings->s[a] = b; lwsl_info("http2 settings %d <- 0x%x\n", a, b); skip: len -= LWS_H2_SETTINGS_LEN; buf += LWS_H2_SETTINGS_LEN; } if (len) return 1; lws_h2_dump_settings(settings); return 0; } /* RFC7640 Sect 6.9 * * The WINDOW_UPDATE frame can be specific to a stream or to the entire * connection. In the former case, the frame's stream identifier * indicates the affected stream; in the latter, the value "0" indicates * that the entire connection is the subject of the frame. * * ... * * Two flow-control windows are applicable: the stream flow-control * window and the connection flow-control window. The sender MUST NOT * send a flow-controlled frame with a length that exceeds the space * available in either of the flow-control windows advertised by the * receiver. Frames with zero length with the END_STREAM flag set (that * is, an empty DATA frame) MAY be sent if there is no available space * in either flow-control window. */ int lws_h2_tx_cr_get(struct lws *wsi) { int c = wsi->h2.tx_cr; struct lws *nwsi; if (!wsi->http2_substream && !wsi->upgraded_to_http2) return ~0x80000000; nwsi = lws_get_network_wsi(wsi); lwsl_info ("%s: %p: own tx credit %d: nwsi credit %d\n", __func__, wsi, c, nwsi->h2.tx_cr); if (nwsi->h2.tx_cr < c) c = nwsi->h2.tx_cr; if (c < 0) return 0; return c; } void lws_h2_tx_cr_consume(struct lws *wsi, int consumed) { struct lws *nwsi = lws_get_network_wsi(wsi); wsi->h2.tx_cr -= consumed; if (nwsi != wsi) nwsi->h2.tx_cr -= consumed; } int lws_h2_frame_write(struct lws *wsi, int type, int flags, unsigned int sid, unsigned int len, unsigned char *buf) { struct lws *nwsi = lws_get_network_wsi(wsi); unsigned char *p = &buf[-LWS_H2_FRAME_HEADER_LENGTH]; int n; //if (wsi->h2_stream_carries_ws) // lwsl_hexdump_level(LLL_NOTICE, buf, len); *p++ = len >> 16; *p++ = len >> 8; *p++ = len; *p++ = type; *p++ = flags; *p++ = sid >> 24; *p++ = sid >> 16; *p++ = sid >> 8; *p++ = sid; lwsl_debug("%s: %p (eff %p). typ %d, fl 0x%x, sid=%d, len=%d, " "txcr=%d, nwsi->txcr=%d\n", __func__, wsi, nwsi, type, flags, sid, len, wsi->h2.tx_cr, nwsi->h2.tx_cr); if (type == LWS_H2_FRAME_TYPE_DATA) { if (wsi->h2.tx_cr < (int)len) lwsl_err("%s: %p: sending payload len %d" " but tx_cr only %d!\n", __func__, wsi, len, wsi->h2.tx_cr); lws_h2_tx_cr_consume(wsi, len); } n = lws_issue_raw(nwsi, &buf[-LWS_H2_FRAME_HEADER_LENGTH], len + LWS_H2_FRAME_HEADER_LENGTH); if (n < 0) return n; if (n >= LWS_H2_FRAME_HEADER_LENGTH) return n - LWS_H2_FRAME_HEADER_LENGTH; return n; } static void lws_h2_set_bin(struct lws *wsi, int n, unsigned char *buf) { *buf++ = n >> 8; *buf++ = n; *buf++ = wsi->h2.h2n->set.s[n] >> 24; *buf++ = wsi->h2.h2n->set.s[n] >> 16; *buf++ = wsi->h2.h2n->set.s[n] >> 8; *buf = wsi->h2.h2n->set.s[n]; } /* we get called on the network connection */ int lws_h2_do_pps_send(struct lws *wsi) { struct lws_h2_netconn *h2n = wsi->h2.h2n; struct lws_h2_protocol_send *pps = NULL; struct lws *cwsi; uint8_t set[LWS_PRE + 64], *p = &set[LWS_PRE], *q; int n, m = 0, flags = 0; if (!h2n) return 1; /* get the oldest pps */ lws_start_foreach_llp(struct lws_h2_protocol_send **, pps1, h2n->pps) { if ((*pps1)->next == NULL) { /* we are the oldest in the list */ pps = *pps1; /* remove us from the list */ *pps1 = NULL; continue; } } lws_end_foreach_llp(pps1, next); if (!pps) return 1; lwsl_info("%s: %p: %d\n", __func__, wsi, pps->type); switch (pps->type) { case LWS_H2_PPS_MY_SETTINGS: /* * if any of our settings varies from h2 "default defaults" * then we must inform the peer */ for (n = 1; n < H2SET_COUNT; n++) if (h2n->set.s[n] != lws_h2_defaults.s[n]) { lwsl_debug("sending SETTING %d 0x%x\n", n, wsi->h2.h2n->set.s[n]); lws_h2_set_bin(wsi, n, &set[LWS_PRE + m]); m += sizeof(h2n->one_setting); } n = lws_h2_frame_write(wsi, LWS_H2_FRAME_TYPE_SETTINGS, flags, LWS_H2_STREAM_ID_MASTER, m, &set[LWS_PRE]); if (n != m) { lwsl_info("send %d %d\n", n, m); goto bail; } break; case LWS_H2_PPS_ACK_SETTINGS: /* send ack ... always empty */ n = lws_h2_frame_write(wsi, LWS_H2_FRAME_TYPE_SETTINGS, 1, LWS_H2_STREAM_ID_MASTER, 0, &set[LWS_PRE]); if (n) { lwsl_err("ack tells %d\n", n); goto bail; } /* this is the end of the preface dance then? */ if (lwsi_state(wsi) == LRS_H2_AWAIT_SETTINGS) { lwsi_set_state(wsi, LRS_ESTABLISHED); wsi->http.fop_fd = NULL; if (lws_is_ssl(lws_get_network_wsi(wsi))) break; /* * we need to treat the headers from the upgrade as the * first job. So these need to get shifted to sid 1. */ h2n->swsi = lws_wsi_server_new(wsi->vhost, wsi, 1); if (!h2n->swsi) goto bail; /* pass on the initial headers to SID 1 */ h2n->swsi->http.ah = wsi->http.ah; wsi->http.ah = NULL; lwsl_info("%s: inherited headers %p\n", __func__, h2n->swsi->http.ah); h2n->swsi->h2.tx_cr = h2n->set.s[H2SET_INITIAL_WINDOW_SIZE]; lwsl_info("initial tx credit on conn %p: %d\n", h2n->swsi, h2n->swsi->h2.tx_cr); h2n->swsi->h2.initialized = 1; /* demanded by HTTP2 */ h2n->swsi->h2.END_STREAM = 1; lwsl_info("servicing initial http request\n"); wsi->vhost->conn_stats.h2_trans++; if (lws_http_action(h2n->swsi)) goto bail; break; } break; case LWS_H2_PPS_PONG: lwsl_debug("sending PONG\n"); memcpy(&set[LWS_PRE], pps->u.ping.ping_payload, 8); n = lws_h2_frame_write(wsi, LWS_H2_FRAME_TYPE_PING, LWS_H2_FLAG_SETTINGS_ACK, LWS_H2_STREAM_ID_MASTER, 8, &set[LWS_PRE]); if (n != 8) { lwsl_info("send %d %d\n", n, m); goto bail; } break; case LWS_H2_PPS_GOAWAY: lwsl_info("LWS_H2_PPS_GOAWAY\n"); *p++ = pps->u.ga.highest_sid >> 24; *p++ = pps->u.ga.highest_sid >> 16; *p++ = pps->u.ga.highest_sid >> 8; *p++ = pps->u.ga.highest_sid; *p++ = pps->u.ga.err >> 24; *p++ = pps->u.ga.err >> 16; *p++ = pps->u.ga.err >> 8; *p++ = pps->u.ga.err; q = (unsigned char *)pps->u.ga.str; n = 0; while (*q && n++ < (int)sizeof(pps->u.ga.str)) *p++ = *q++; h2n->we_told_goaway = 1; n = lws_h2_frame_write(wsi, LWS_H2_FRAME_TYPE_GOAWAY, 0, LWS_H2_STREAM_ID_MASTER, lws_ptr_diff(p, &set[LWS_PRE]), &set[LWS_PRE]); if (n != 4) { lwsl_info("send %d %d\n", n, m); goto bail; } goto bail; case LWS_H2_PPS_RST_STREAM: lwsl_info("LWS_H2_PPS_RST_STREAM\n"); *p++ = pps->u.rs.err >> 24; *p++ = pps->u.rs.err >> 16; *p++ = pps->u.rs.err >> 8; *p++ = pps->u.rs.err; n = lws_h2_frame_write(wsi, LWS_H2_FRAME_TYPE_RST_STREAM, 0, pps->u.rs.sid, 4, &set[LWS_PRE]); if (n != 4) { lwsl_info("send %d %d\n", n, m); goto bail; } cwsi = lws_h2_wsi_from_id(wsi, pps->u.rs.sid); if (cwsi) { lwsl_debug("%s: closing cwsi %p %s %s (wsi %p)\n", __func__, cwsi, cwsi->role_ops->name, cwsi->protocol->name, wsi); lws_close_free_wsi(cwsi, 0, "reset stream"); } break; case LWS_H2_PPS_UPDATE_WINDOW: lwsl_debug("Issuing LWS_H2_PPS_UPDATE_WINDOW: sid %d: add %d\n", pps->u.update_window.sid, pps->u.update_window.credit); *p++ = pps->u.update_window.credit >> 24; *p++ = pps->u.update_window.credit >> 16; *p++ = pps->u.update_window.credit >> 8; *p++ = pps->u.update_window.credit; n = lws_h2_frame_write(wsi, LWS_H2_FRAME_TYPE_WINDOW_UPDATE, 0, pps->u.update_window.sid, 4, &set[LWS_PRE]); if (n != 4) { lwsl_info("send %d %d\n", n, m); goto bail; } break; default: break; } lws_free(pps); return 0; bail: lws_free(pps); return 1; } /* * The frame header part has just completely arrived. * Perform actions for header completion. */ static int lws_h2_parse_frame_header(struct lws *wsi) { struct lws_h2_netconn *h2n = wsi->h2.h2n; struct lws_h2_protocol_send *pps; int n; /* * We just got the frame header */ h2n->count = 0; h2n->swsi = wsi; /* b31 is a reserved bit */ h2n->sid = h2n->sid & 0x7fffffff; if (h2n->sid && !(h2n->sid & 1)) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Even Stream ID"); return 0; } /* let the network wsi live a bit longer if subs are active */ if (!wsi->immortal_substream_count) #if defined(LWS_AMAZON_RTOS) || defined(LWS_AMAZON_LINUX) lws_set_timeout(wsi, PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE, wsi->vhost->keepalive_timeout); #else lws_set_timeout(wsi, PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE, 31); #endif if (h2n->sid) h2n->swsi = lws_h2_wsi_from_id(wsi, h2n->sid); lwsl_debug("%p (%p): fr hdr: typ 0x%x, fla 0x%x, sid 0x%x, len 0x%x\n", wsi, h2n->swsi, h2n->type, h2n->flags, h2n->sid, h2n->length); if (h2n->we_told_goaway && h2n->sid > h2n->highest_sid) h2n->type = LWS_H2_FRAME_TYPE_COUNT; /* ie, IGNORE */ if (h2n->type == LWS_H2_FRAME_TYPE_COUNT) return 0; if (h2n->length > h2n->set.s[H2SET_MAX_FRAME_SIZE]) { /* * peer sent us something bigger than we told * it we would allow */ lwsl_info("received oversize frame %d\n", h2n->length); lws_h2_goaway(wsi, H2_ERR_FRAME_SIZE_ERROR, "Peer ignored our frame size setting"); return 1; } if (h2n->swsi) lwsl_info("%s: wsi %p, State: %s, received cmd %d\n", __func__, h2n->swsi, h2_state_names[h2n->swsi->h2.h2_state], h2n->type); else { /* if it's data, either way no swsi means CLOSED state */ if (h2n->type == LWS_H2_FRAME_TYPE_DATA) { if (h2n->sid <= h2n->highest_sid_opened #if !defined(LWS_NO_CLIENT) && wsi->client_h2_alpn #endif ) { lwsl_notice("ignoring straggling data\n"); /* ie, IGNORE */ h2n->type = LWS_H2_FRAME_TYPE_COUNT; } else { lws_h2_goaway(wsi, H2_ERR_STREAM_CLOSED, "Data for nonexistent sid"); return 0; } } /* if the sid is credible, treat as wsi for it closed */ if (h2n->sid > h2n->highest_sid_opened && h2n->type != LWS_H2_FRAME_TYPE_HEADERS && h2n->type != LWS_H2_FRAME_TYPE_PRIORITY) { /* if not credible, reject it */ lwsl_info("%s: wsi %p, No child for sid %d, rxcmd %d\n", __func__, h2n->swsi, h2n->sid, h2n->type); lws_h2_goaway(wsi, H2_ERR_STREAM_CLOSED, "Data for nonexistent sid"); return 0; } } if (h2n->swsi && h2n->sid && !(http2_rx_validity[h2n->swsi->h2.h2_state] & (1 << h2n->type))) { lwsl_info("%s: wsi %p, State: %s, ILLEGAL cmdrx %d (OK 0x%x)\n", __func__, h2n->swsi, h2_state_names[h2n->swsi->h2.h2_state], h2n->type, http2_rx_validity[h2n->swsi->h2.h2_state]); if (h2n->swsi->h2.h2_state == LWS_H2_STATE_CLOSED || h2n->swsi->h2.h2_state == LWS_H2_STATE_HALF_CLOSED_REMOTE) n = H2_ERR_STREAM_CLOSED; else n = H2_ERR_PROTOCOL_ERROR; lws_h2_goaway(wsi, n, "invalid rx for state"); return 0; } if (h2n->cont_exp && (h2n->cont_exp_sid != h2n->sid || h2n->type != LWS_H2_FRAME_TYPE_CONTINUATION)) { lwsl_info("%s: expected cont on sid %d (got %d on sid %d)\n", __func__, h2n->cont_exp_sid, h2n->type, h2n->sid); h2n->cont_exp = 0; if (h2n->cont_exp_headers) n = H2_ERR_COMPRESSION_ERROR; else n = H2_ERR_PROTOCOL_ERROR; lws_h2_goaway(wsi, n, "Continuation hdrs State"); return 0; } switch (h2n->type) { case LWS_H2_FRAME_TYPE_DATA: lwsl_info("seen incoming LWS_H2_FRAME_TYPE_DATA start\n"); if (!h2n->sid) { lwsl_info("DATA: 0 sid\n"); lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "DATA 0 sid"); break; } lwsl_info("Frame header DATA: sid %d\n", h2n->sid); if (!h2n->swsi) { lwsl_notice("DATA: NULL swsi\n"); break; } lwsl_info("DATA rx on state %d\n", h2n->swsi->h2.h2_state); if ( h2n->swsi->h2.h2_state == LWS_H2_STATE_HALF_CLOSED_REMOTE || h2n->swsi->h2.h2_state == LWS_H2_STATE_CLOSED) { lws_h2_goaway(wsi, H2_ERR_STREAM_CLOSED, "conn closed"); break; } break; case LWS_H2_FRAME_TYPE_PRIORITY: lwsl_info("LWS_H2_FRAME_TYPE_PRIORITY complete frame\n"); if (!h2n->sid) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Priority has 0 sid"); break; } if (h2n->length != 5) { lws_h2_goaway(wsi, H2_ERR_FRAME_SIZE_ERROR, "Priority has length other than 5"); break; } break; case LWS_H2_FRAME_TYPE_PUSH_PROMISE: lwsl_info("LWS_H2_FRAME_TYPE_PUSH_PROMISE complete frame\n"); lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Server only"); break; case LWS_H2_FRAME_TYPE_GOAWAY: lwsl_debug("LWS_H2_FRAME_TYPE_GOAWAY received\n"); break; case LWS_H2_FRAME_TYPE_RST_STREAM: if (!h2n->sid) return 1; if (!h2n->swsi) { if (h2n->sid <= h2n->highest_sid_opened) break; lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "crazy sid on RST_STREAM"); return 1; } if (h2n->length != 4) { lws_h2_goaway(wsi, H2_ERR_FRAME_SIZE_ERROR, "RST_STREAM can only be length 4"); break; } lws_h2_state(h2n->swsi, LWS_H2_STATE_CLOSED); break; case LWS_H2_FRAME_TYPE_SETTINGS: lwsl_info("LWS_H2_FRAME_TYPE_SETTINGS complete frame\n"); /* nonzero sid on settings is illegal */ if (h2n->sid) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Settings has nonzero sid"); break; } if (!(h2n->flags & LWS_H2_FLAG_SETTINGS_ACK)) { if ((!h2n->length) || h2n->length % 6) { lws_h2_goaway(wsi, H2_ERR_FRAME_SIZE_ERROR, "Settings length error"); break; } if (h2n->type == LWS_H2_FRAME_TYPE_COUNT) return 0; if (wsi->upgraded_to_http2) { pps = lws_h2_new_pps(LWS_H2_PPS_ACK_SETTINGS); if (!pps) return 1; lws_pps_schedule(wsi, pps); } break; } /* came to us with ACK set... not allowed to have payload */ if (h2n->length) { lws_h2_goaway(wsi, H2_ERR_FRAME_SIZE_ERROR, "Settings with ACK not allowed payload"); break; } break; case LWS_H2_FRAME_TYPE_PING: if (h2n->sid) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Ping has nonzero sid"); break; } if (h2n->length != 8) { lws_h2_goaway(wsi, H2_ERR_FRAME_SIZE_ERROR, "Ping payload can only be 8"); break; } break; case LWS_H2_FRAME_TYPE_CONTINUATION: lwsl_info("LWS_H2_FRAME_TYPE_CONTINUATION: sid = %d\n", h2n->sid); if (!h2n->cont_exp || h2n->cont_exp_sid != h2n->sid || !h2n->sid || !h2n->swsi) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "unexpected CONTINUATION"); break; } if (h2n->swsi->h2.END_HEADERS) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "END_HEADERS already seen"); break; } /* END_STREAM is in HEADERS, skip resetting it */ goto update_end_headers; case LWS_H2_FRAME_TYPE_HEADERS: lwsl_info("HEADERS: frame header: sid = %d\n", h2n->sid); if (!h2n->sid) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "sid 0"); return 1; } if (h2n->swsi && !h2n->swsi->h2.END_STREAM && h2n->swsi->h2.END_HEADERS && !(h2n->flags & LWS_H2_FLAG_END_STREAM)) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "extra HEADERS together"); return 1; } #if !defined(LWS_NO_CLIENT) if (wsi->client_h2_alpn) { if (h2n->sid) { h2n->swsi = lws_h2_wsi_from_id(wsi, h2n->sid); lwsl_info("HEADERS: nwsi %p: sid %d mapped " "to wsi %p\n", wsi, h2n->sid, h2n->swsi); if (!h2n->swsi) break; } goto update_end_headers; } #endif if (!h2n->swsi) { /* no more children allowed by parent */ if (wsi->h2.child_count + 1 > wsi->h2.h2n->set.s[H2SET_MAX_CONCURRENT_STREAMS]) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Another stream not allowed"); return 1; } h2n->swsi = lws_wsi_server_new(wsi->vhost, wsi, h2n->sid); if (!h2n->swsi) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "OOM"); return 1; } pps = lws_h2_new_pps(LWS_H2_PPS_UPDATE_WINDOW); if (!pps) goto cleanup_wsi; pps->u.update_window.sid = h2n->sid; pps->u.update_window.credit = 4 * 65536; h2n->swsi->h2.peer_tx_cr_est += pps->u.update_window.credit; lws_pps_schedule(wsi, pps); pps = lws_h2_new_pps(LWS_H2_PPS_UPDATE_WINDOW); if (!pps) goto cleanup_wsi; pps->u.update_window.sid = 0; pps->u.update_window.credit = 4 * 65536; wsi->h2.peer_tx_cr_est += pps->u.update_window.credit; lws_pps_schedule(wsi, pps); } /* * ah needs attaching to child wsi, even though * we only fill it from network wsi */ if (!h2n->swsi->http.ah) if (lws_header_table_attach(h2n->swsi, 0)) { lwsl_err("%s: Failed to get ah\n", __func__); return 1; } /* * The first use of a new stream identifier implicitly closes * all streams in the "idle" state that might have been * initiated by that peer with a lower-valued stream identifier. * * For example, if a client sends a HEADERS frame on stream 7 * without ever sending a frame on stream 5, then stream 5 * transitions to the "closed" state when the first frame for * stream 7 is sent or received. */ lws_start_foreach_ll(struct lws *, w, wsi->h2.child_list) { if (w->h2.my_sid < h2n->sid && w->h2.h2_state == LWS_H2_STATE_IDLE) lws_close_free_wsi(w, 0, "h2 sid close"); assert(w->h2.sibling_list != w); } lws_end_foreach_ll(w, h2.sibling_list); /* END_STREAM means after servicing this, close the stream */ h2n->swsi->h2.END_STREAM = !!(h2n->flags & LWS_H2_FLAG_END_STREAM); lwsl_info("%s: hdr END_STREAM = %d\n",__func__, h2n->swsi->h2.END_STREAM); h2n->cont_exp = !(h2n->flags & LWS_H2_FLAG_END_HEADERS); h2n->cont_exp_sid = h2n->sid; h2n->cont_exp_headers = 1; // lws_header_table_reset(h2n->swsi, 0); update_end_headers: /* no END_HEADERS means CONTINUATION must come */ h2n->swsi->h2.END_HEADERS = !!(h2n->flags & LWS_H2_FLAG_END_HEADERS); lwsl_info("%p: END_HEADERS %d\n", h2n->swsi, h2n->swsi->h2.END_HEADERS); if (h2n->swsi->h2.END_HEADERS) h2n->cont_exp = 0; lwsl_debug("END_HEADERS %d\n", h2n->swsi->h2.END_HEADERS); break; cleanup_wsi: return 1; case LWS_H2_FRAME_TYPE_WINDOW_UPDATE: if (h2n->length != 4) { lws_h2_goaway(wsi, H2_ERR_FRAME_SIZE_ERROR, "window update frame not 4"); break; } lwsl_info("LWS_H2_FRAME_TYPE_WINDOW_UPDATE\n"); break; case LWS_H2_FRAME_TYPE_COUNT: break; default: lwsl_info("%s: ILLEGAL FRAME TYPE %d\n", __func__, h2n->type); h2n->type = LWS_H2_FRAME_TYPE_COUNT; /* ie, IGNORE */ break; } if (h2n->length == 0) h2n->frame_state = 0; return 0; } static const char * const method_names[] = { "GET", "POST", "OPTIONS", "PUT", "PATCH", "DELETE", "CONNECT", "HEAD" }; static unsigned char method_index[] = { WSI_TOKEN_GET_URI, WSI_TOKEN_POST_URI, WSI_TOKEN_OPTIONS_URI, WSI_TOKEN_PUT_URI, WSI_TOKEN_PATCH_URI, WSI_TOKEN_DELETE_URI, WSI_TOKEN_CONNECT, WSI_TOKEN_HEAD_URI, }; /* * The last byte of the whole frame has been handled. * Perform actions for frame completion. * * This is the crunch time for parsing that may have occured on a network * wsi with a pending partial send... we may call lws_http_action() to send * a response, conflicting with the partial. * * So in that case we change the wsi state and do the lws_http_action() in the * WRITABLE handler as a priority. */ static int lws_h2_parse_end_of_frame(struct lws *wsi) { struct lws_h2_netconn *h2n = wsi->h2.h2n; struct lws *eff_wsi = wsi; const char *p; int n; h2n->frame_state = 0; h2n->count = 0; if (h2n->sid) h2n->swsi = lws_h2_wsi_from_id(wsi, h2n->sid); if (h2n->sid > h2n->highest_sid) h2n->highest_sid = h2n->sid; /* set our initial window size */ if (!wsi->h2.initialized) { wsi->h2.tx_cr = h2n->set.s[H2SET_INITIAL_WINDOW_SIZE]; lwsl_info("initial tx credit on master %p: %d\n", wsi, wsi->h2.tx_cr); wsi->h2.initialized = 1; } if (h2n->collected_priority && (h2n->dep & ~(1u << 31)) == h2n->sid) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "depends on own sid"); return 0; } switch (h2n->type) { case LWS_H2_FRAME_TYPE_SETTINGS: #if !defined(LWS_NO_CLIENT) if (wsi->client_h2_alpn && !(h2n->flags & LWS_H2_FLAG_SETTINGS_ACK)) { struct lws_h2_protocol_send *pps; /* migrate original client ask on to substream 1 */ wsi->http.fop_fd = NULL; /* * we need to treat the headers from the upgrade as the * first job. So these need to get shifted to sid 1. */ h2n->swsi = lws_wsi_server_new(wsi->vhost, wsi, 1); if (!h2n->swsi) return 1; h2n->sid = 1; assert(lws_h2_wsi_from_id(wsi, 1) == h2n->swsi); lws_role_transition(wsi, LWSIFR_CLIENT, LRS_H2_WAITING_TO_SEND_HEADERS, &role_ops_h2); lws_role_transition(h2n->swsi, LWSIFR_CLIENT, LRS_H2_WAITING_TO_SEND_HEADERS, &role_ops_h2); /* pass on the initial headers to SID 1 */ h2n->swsi->http.ah = wsi->http.ah; h2n->swsi->client_h2_substream = 1; h2n->swsi->protocol = wsi->protocol; if (h2n->swsi->user_space && !h2n->swsi->user_space_externally_allocated) lws_free(h2n->swsi->user_space); h2n->swsi->user_space = wsi->user_space; h2n->swsi->user_space_externally_allocated = wsi->user_space_externally_allocated; h2n->swsi->opaque_user_data = wsi->opaque_user_data; wsi->opaque_user_data = NULL; wsi->user_space = NULL; if (h2n->swsi->http.ah) h2n->swsi->http.ah->wsi = h2n->swsi; wsi->http.ah = NULL; lwsl_info("%s: MIGRATING nwsi %p: swsi %p\n", __func__, wsi, h2n->swsi); h2n->swsi->h2.tx_cr = h2n->set.s[H2SET_INITIAL_WINDOW_SIZE]; lwsl_info("initial tx credit on conn %p: %d\n", h2n->swsi, h2n->swsi->h2.tx_cr); h2n->swsi->h2.initialized = 1; lws_callback_on_writable(h2n->swsi); pps = lws_h2_new_pps(LWS_H2_PPS_ACK_SETTINGS); if (!pps) return 1; lws_pps_schedule(wsi, pps); lwsl_info("%s: scheduled settings ack PPS\n", __func__); /* also attach any queued guys */ /* we have a transaction queue that wants to pipeline */ lws_vhost_lock(wsi->vhost); lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, wsi->dll2_cli_txn_queue_owner.head) { struct lws *w = lws_container_of(d, struct lws, dll2_cli_txn_queue); if (lwsi_state(w) == LRS_H1C_ISSUE_HANDSHAKE2) { lwsl_info("%s: cli pipeq %p to be h2\n", __func__, w); /* remove ourselves from client queue */ lws_dll2_remove(&w->dll2_cli_txn_queue); /* attach ourselves as an h2 stream */ lws_wsi_h2_adopt(wsi, w); } } lws_end_foreach_dll_safe(d, d1); lws_vhost_unlock(wsi->vhost); } #endif break; case LWS_H2_FRAME_TYPE_CONTINUATION: case LWS_H2_FRAME_TYPE_HEADERS: if (!h2n->swsi) break; /* service the http request itself */ if (h2n->last_action_dyntable_resize) { lws_h2_goaway(wsi, H2_ERR_COMPRESSION_ERROR, "dyntable resize last in headers"); break; } if (!h2n->swsi->h2.END_HEADERS) { /* we are not finished yet */ lwsl_info("witholding http action for continuation\n"); break; } /* confirm the hpack stream state is reasonable for finishing */ if (h2n->hpack != HPKS_TYPE) { /* hpack incomplete */ lwsl_info("hpack incomplete %d (type %d, len %d)\n", h2n->hpack, h2n->type, h2n->hpack_len); lws_h2_goaway(wsi, H2_ERR_COMPRESSION_ERROR, "hpack incomplete"); break; } /* this is the last part of HEADERS */ switch (h2n->swsi->h2.h2_state) { case LWS_H2_STATE_IDLE: lws_h2_state(h2n->swsi, LWS_H2_STATE_OPEN); break; case LWS_H2_STATE_RESERVED_REMOTE: lws_h2_state(h2n->swsi, LWS_H2_STATE_HALF_CLOSED_LOCAL); break; } lwsl_info("http req, wsi=%p, h2n->swsi=%p\n", wsi, h2n->swsi); h2n->swsi->hdr_parsing_completed = 1; #if !defined(LWS_NO_CLIENT) if (h2n->swsi->client_h2_substream) { if (lws_client_interpret_server_handshake(h2n->swsi)) { lws_h2_rst_stream(h2n->swsi, H2_ERR_STREAM_CLOSED, "protocol CLI_EST closed it"); break; } } #endif if (lws_hdr_extant(h2n->swsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) { h2n->swsi->http.rx_content_length = atoll( lws_hdr_simple_ptr(h2n->swsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)); h2n->swsi->http.rx_content_remain = h2n->swsi->http.rx_content_length; lwsl_info("setting rx_content_length %lld\n", (long long)h2n->swsi->http.rx_content_length); } { int n = 0, len; char buf[256]; const unsigned char *c; do { c = lws_token_to_string(n); if (!c) { n++; continue; } len = lws_hdr_total_length(h2n->swsi, n); if (!len || len > (int)sizeof(buf) - 1) { n++; continue; } if (lws_hdr_copy(h2n->swsi, buf, sizeof buf, n) < 0) { lwsl_info(" %s !oversize!\n", (char *)c); } else { buf[sizeof(buf) - 1] = '\0'; lwsl_info(" %s = %s\n", (char *)c, buf); } n++; } while (c); } if (h2n->swsi->h2.h2_state == LWS_H2_STATE_HALF_CLOSED_REMOTE || h2n->swsi->h2.h2_state == LWS_H2_STATE_CLOSED) { lws_h2_goaway(wsi, H2_ERR_STREAM_CLOSED, "Banning service on CLOSED_REMOTE"); break; } switch (h2n->swsi->h2.h2_state) { case LWS_H2_STATE_OPEN: if (h2n->swsi->h2.END_STREAM) lws_h2_state(h2n->swsi, LWS_H2_STATE_HALF_CLOSED_REMOTE); break; case LWS_H2_STATE_HALF_CLOSED_LOCAL: if (h2n->swsi->h2.END_STREAM) lws_h2_state(h2n->swsi, LWS_H2_STATE_CLOSED); break; } #if !defined(LWS_NO_CLIENT) if (h2n->swsi->client_h2_substream) { lwsl_info("%s: headers: client path\n", __func__); break; } #endif if (!lws_hdr_total_length(h2n->swsi, WSI_TOKEN_HTTP_COLON_PATH) || !lws_hdr_total_length(h2n->swsi, WSI_TOKEN_HTTP_COLON_METHOD) || !lws_hdr_total_length(h2n->swsi, WSI_TOKEN_HTTP_COLON_SCHEME) || lws_hdr_total_length(h2n->swsi, WSI_TOKEN_HTTP_COLON_STATUS) || lws_hdr_extant(h2n->swsi, WSI_TOKEN_CONNECTION)) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Pseudoheader checks"); break; } if (lws_hdr_extant(h2n->swsi, WSI_TOKEN_TE)) { n = lws_hdr_total_length(h2n->swsi, WSI_TOKEN_TE); if (n != 8 || strncmp(lws_hdr_simple_ptr(h2n->swsi, WSI_TOKEN_TE), "trailers", n)) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Illegal transfer-encoding"); break; } } #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) lws_http_compression_validate(h2n->swsi); #endif wsi->vhost->conn_stats.h2_trans++; p = lws_hdr_simple_ptr(h2n->swsi, WSI_TOKEN_HTTP_COLON_METHOD); /* * duplicate :path into the individual method uri header * index, so that it looks the same as h1 in the ah */ for (n = 0; n < (int)LWS_ARRAY_SIZE(method_names); n++) if (!strcasecmp(p, method_names[n])) { h2n->swsi->http.ah->frag_index[method_index[n]] = h2n->swsi->http.ah->frag_index[ WSI_TOKEN_HTTP_COLON_PATH]; break; } lwsl_debug("%s: setting DEF_ACT from 0x%x\n", __func__, h2n->swsi->wsistate); lwsi_set_state(h2n->swsi, LRS_DEFERRING_ACTION); lws_callback_on_writable(h2n->swsi); break; case LWS_H2_FRAME_TYPE_DATA: if (!h2n->swsi) break; if (lws_hdr_total_length(h2n->swsi, WSI_TOKEN_HTTP_CONTENT_LENGTH) && h2n->swsi->h2.END_STREAM && h2n->swsi->http.rx_content_length && h2n->swsi->http.rx_content_remain) { lws_h2_rst_stream(h2n->swsi, H2_ERR_PROTOCOL_ERROR, "Not enough rx content"); break; } if (h2n->swsi->h2.END_STREAM && h2n->swsi->h2.h2_state == LWS_H2_STATE_OPEN) lws_h2_state(h2n->swsi, LWS_H2_STATE_HALF_CLOSED_REMOTE); if (h2n->swsi->h2.END_STREAM && h2n->swsi->h2.h2_state == LWS_H2_STATE_HALF_CLOSED_LOCAL) lws_h2_state(h2n->swsi, LWS_H2_STATE_CLOSED); #if !defined(LWS_NO_CLIENT) /* * client... remote END_STREAM implies we weren't going to * send anything else anyway. */ if (h2n->swsi->client_h2_substream && h2n->flags & LWS_H2_FLAG_END_STREAM) { lwsl_info("%s: %p: DATA: end stream\n", __func__, h2n->swsi); if (h2n->swsi->h2.h2_state == LWS_H2_STATE_OPEN) { lws_h2_state(h2n->swsi, LWS_H2_STATE_HALF_CLOSED_REMOTE); // lws_h2_rst_stream(h2n->swsi, H2_ERR_NO_ERROR, // "client done"); // if (lws_http_transaction_completed_client(h2n->swsi)) // lwsl_debug("tx completed returned close\n"); } //if (h2n->swsi->h2.h2_state == LWS_H2_STATE_HALF_CLOSED_LOCAL) { lws_h2_state(h2n->swsi, LWS_H2_STATE_CLOSED); lws_h2_rst_stream(h2n->swsi, H2_ERR_NO_ERROR, "client done"); if (lws_http_transaction_completed_client(h2n->swsi)) lwsl_debug("tx completed returned close\n"); } } #endif break; case LWS_H2_FRAME_TYPE_PING: if (h2n->flags & LWS_H2_FLAG_SETTINGS_ACK) { // ack } else {/* they're sending us a ping request */ struct lws_h2_protocol_send *pps = lws_h2_new_pps(LWS_H2_PPS_PONG); if (!pps) return 1; lwsl_info("rx ping, preparing pong\n"); memcpy(pps->u.ping.ping_payload, h2n->ping_payload, 8); lws_pps_schedule(wsi, pps); } break; case LWS_H2_FRAME_TYPE_WINDOW_UPDATE: h2n->hpack_e_dep &= ~(1u << 31); lwsl_info("WINDOW_UPDATE: sid %d %u (0x%x)\n", h2n->sid, h2n->hpack_e_dep, h2n->hpack_e_dep); if (h2n->sid) eff_wsi = h2n->swsi; if (!eff_wsi) { if (h2n->sid > h2n->highest_sid_opened) lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "alien sid"); break; /* ignore */ } if (eff_wsi->vhost->options & LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW && (uint64_t)eff_wsi->h2.tx_cr + (uint64_t)h2n->hpack_e_dep > (uint64_t)0x7fffffff) h2n->hpack_e_dep = 0x7fffffff - eff_wsi->h2.tx_cr; if ((uint64_t)eff_wsi->h2.tx_cr + (uint64_t)h2n->hpack_e_dep > (uint64_t)0x7fffffff) { if (h2n->sid) lws_h2_rst_stream(h2n->swsi, H2_ERR_FLOW_CONTROL_ERROR, "Flow control exceeded max"); else lws_h2_goaway(wsi, H2_ERR_FLOW_CONTROL_ERROR, "Flow control exceeded max"); break; } if (!h2n->hpack_e_dep) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Zero length window update"); break; } n = eff_wsi->h2.tx_cr; eff_wsi->h2.tx_cr += h2n->hpack_e_dep; if (n <= 0 && eff_wsi->h2.tx_cr <= 0) /* it helps, but won't change sendability for anyone */ break; /* * It did change sendability... for us and any children waiting * on us... reassess blockage for all children first */ lws_start_foreach_ll(struct lws *, w, wsi->h2.child_list) { lws_callback_on_writable(w); } lws_end_foreach_ll(w, h2.sibling_list); if (eff_wsi->h2.skint && lws_h2_tx_cr_get(eff_wsi)) { lwsl_info("%s: %p: skint\n", __func__, wsi); eff_wsi->h2.skint = 0; lws_callback_on_writable(eff_wsi); } break; case LWS_H2_FRAME_TYPE_GOAWAY: lwsl_info("GOAWAY: last sid %d, error 0x%08X, string '%s'\n", h2n->goaway_last_sid, h2n->goaway_err, h2n->goaway_str); wsi->h2.GOING_AWAY = 1; return 1; case LWS_H2_FRAME_TYPE_RST_STREAM: lwsl_info("LWS_H2_FRAME_TYPE_RST_STREAM: sid %d: reason 0x%x\n", h2n->sid, h2n->hpack_e_dep); break; case LWS_H2_FRAME_TYPE_COUNT: /* IGNORING FRAME */ break; } return 0; } /* * This may want to send something on the network wsi, which may be in the * middle of a partial send. PPS sends are OK because they are queued to * go through the WRITABLE handler already. * * The read parser for the network wsi has no choice but to parse its stream * anyway, because otherwise it will not be able to get tx credit window * messages. * * Therefore if we will send non-PPS, ie, lws_http_action() for a stream * wsi, we must change its state and handle it as a priority in the * POLLOUT handler instead of writing it here. * * About closing... for the main network wsi, it should return nonzero to * close it all. If it needs to close an swsi, it can do it here. */ int lws_h2_parser(struct lws *wsi, unsigned char *in, lws_filepos_t inlen, lws_filepos_t *inused) { struct lws_h2_netconn *h2n = wsi->h2.h2n; struct lws_h2_protocol_send *pps; unsigned char c, *oldin = in; int n, m; if (!h2n) goto fail; while (inlen--) { c = *in++; // lwsl_notice("%s: 0x%x\n", __func__, c); switch (lwsi_state(wsi)) { case LRS_H2_AWAIT_PREFACE: if (preface[h2n->count++] != c) goto fail; if (preface[h2n->count]) break; lwsl_info("http2: %p: established\n", wsi); lwsi_set_state(wsi, LRS_H2_AWAIT_SETTINGS); h2n->count = 0; wsi->h2.tx_cr = 65535; /* * we must send a settings frame -- empty one is OK... * that must be the first thing sent by server * and the peer must send a SETTINGS with ACK flag... */ pps = lws_h2_new_pps(LWS_H2_PPS_MY_SETTINGS); if (!pps) goto fail; lws_pps_schedule(wsi, pps); break; case LRS_H2_WAITING_TO_SEND_HEADERS: case LRS_ESTABLISHED: case LRS_H2_AWAIT_SETTINGS: if (h2n->frame_state != LWS_H2_FRAME_HEADER_LENGTH) goto try_frame_start; /* * post-header, preamble / payload / padding part */ h2n->count++; if (h2n->flags & LWS_H2_FLAG_PADDED && !h2n->pad_length) { /* * Get the padding count... actual padding is * at the end of the frame. */ h2n->padding = c; h2n->pad_length = 1; h2n->preamble++; if (h2n->padding > h2n->length - 1) lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "execssive padding"); break; /* we consumed this */ } if (h2n->flags & LWS_H2_FLAG_PRIORITY && !h2n->collected_priority) { /* going to be 5 preamble bytes */ lwsl_debug("PRIORITY FLAG: 0x%x\n", c); if (h2n->preamble++ - h2n->pad_length < 4) { h2n->dep = ((h2n->dep) << 8) | c; break; /* we consumed this */ } h2n->weight_temp = c; h2n->collected_priority = 1; lwsl_debug("PRI FL: dep 0x%x, weight 0x%02X\n", h2n->dep, h2n->weight_temp); break; /* we consumed this */ } if (h2n->padding && h2n->count > (h2n->length - h2n->padding)) { if (c) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "nonzero padding"); break; } goto frame_end; } /* applies to wsi->h2.swsi which may be wsi */ switch(h2n->type) { case LWS_H2_FRAME_TYPE_SETTINGS: n = (h2n->count - 1 - h2n->preamble) % LWS_H2_SETTINGS_LEN; h2n->one_setting[n] = c; if (n != LWS_H2_SETTINGS_LEN - 1) break; lws_h2_settings(wsi, &h2n->set, h2n->one_setting, LWS_H2_SETTINGS_LEN); break; case LWS_H2_FRAME_TYPE_CONTINUATION: case LWS_H2_FRAME_TYPE_HEADERS: if (!h2n->swsi) break; if (lws_hpack_interpret(h2n->swsi, c)) { lwsl_info("%s: hpack failed\n", __func__); goto fail; } break; case LWS_H2_FRAME_TYPE_GOAWAY: switch (h2n->inside++) { case 0: case 1: case 2: case 3: h2n->goaway_last_sid <<= 8; h2n->goaway_last_sid |= c; h2n->goaway_str[0] = '\0'; break; case 4: case 5: case 6: case 7: h2n->goaway_err <<= 8; h2n->goaway_err |= c; break; default: if (h2n->inside - 9 < sizeof(h2n->goaway_str) - 1) h2n->goaway_str[ h2n->inside - 9] = c; h2n->goaway_str[ sizeof(h2n->goaway_str) - 1] = '\0'; break; } break; case LWS_H2_FRAME_TYPE_DATA: lwsl_info("%s: LWS_H2_FRAME_TYPE_DATA\n", __func__); /* * let the network wsi live a bit longer if * subs are active... our frame may take a long * time to chew through */ if (!wsi->immortal_substream_count) lws_set_timeout(wsi, PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE, #if defined(LWS_AMAZON_RTOS) || defined(LWS_AMAZON_LINUX) wsi->vhost->keepalive_timeout); #else 31); #endif if (!h2n->swsi) break; if (lws_buflist_next_segment_len( &h2n->swsi->buflist, NULL)) lwsl_info("%s: substream has pending\n", __func__); if (lwsi_role_http(h2n->swsi) && lwsi_state(h2n->swsi) == LRS_ESTABLISHED) { lwsi_set_state(h2n->swsi, LRS_BODY); lwsl_info("%s: swsi %p to LRS_BODY\n", __func__, h2n->swsi); } if (lws_hdr_total_length(h2n->swsi, WSI_TOKEN_HTTP_CONTENT_LENGTH) && h2n->swsi->http.rx_content_length && h2n->swsi->http.rx_content_remain < inlen + 1 && /* last */ h2n->inside < h2n->length) { /* unread data in frame */ lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "More rx than content_length told"); break; } /* * We operate on a frame. The RX we have at * hand may exceed the current frame. */ n = (int)inlen + 1; if (n > (int)(h2n->length - h2n->count + 1)) { n = h2n->length - h2n->count + 1; lwsl_debug("---- restricting len to %d vs %ld\n", n, (long)inlen + 1); } #if !defined(LWS_NO_CLIENT) if (h2n->swsi->client_h2_substream) { m = user_callback_handle_rxflow( h2n->swsi->protocol->callback, h2n->swsi, LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ, h2n->swsi->user_space, in - 1, n); in += n - 1; h2n->inside += n; h2n->count += n - 1; inlen -= n - 1; if (m) { lwsl_info("RECEIVE_CLIENT_HTTP " "closed it\n"); goto close_swsi_and_return; } break; } else #endif { if (lwsi_state(h2n->swsi) == LRS_DEFERRING_ACTION) { // lwsl_notice("appending because we are in LRS_DEFERRING_ACTION\n"); m = lws_buflist_append_segment( &h2n->swsi->buflist, in - 1, n); if (m < 0) return -1; if (m) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; lwsl_debug("%s: added %p to rxflow list\n", __func__, wsi); lws_dll2_add_head(&h2n->swsi->dll_buflist, &pt->dll_buflist_owner); } in += n - 1; h2n->inside += n; h2n->count += n - 1; inlen -= n - 1; lwsl_debug("%s: deferred %d\n", __func__, n); goto do_windows; } h2n->swsi->outer_will_close = 1; /* * choose the length for this go so that we end at * the frame boundary, in the case there is already * more waiting leave it for next time around */ n = lws_read_h1(h2n->swsi, in - 1, n); // lwsl_notice("%s: lws_read_h1 %d\n", __func__, n); h2n->swsi->outer_will_close = 0; /* * can return 0 in POST body with * content len exhausted somehow. */ if (n < 0 || (!n && !lws_buflist_next_segment_len(&wsi->buflist, NULL))) { lwsl_info("%s: lws_read_h1 told %d %d / %d\n", __func__, n, h2n->count, h2n->length); in += h2n->length - h2n->count; h2n->inside = h2n->length; h2n->count = h2n->length - 1; //if (n < 0) // goto already_closed_swsi; goto close_swsi_and_return; } inlen -= n - 1; in += n - 1; h2n->inside += n; h2n->count += n - 1; } do_windows: /* account for both network and stream wsi windows */ wsi->h2.peer_tx_cr_est -= n; h2n->swsi->h2.peer_tx_cr_est -= n; // lwsl_notice(" peer_tx_cr_est %d, parent %d\n", // h2n->swsi->h2.peer_tx_cr_est, wsi->h2.peer_tx_cr_est); if (h2n->swsi->h2.peer_tx_cr_est < (int)(2 * h2n->length) + 65536) { pps = lws_h2_new_pps(LWS_H2_PPS_UPDATE_WINDOW); if (!pps) return 1; pps->u.update_window.sid = h2n->sid; pps->u.update_window.credit = (2 * h2n->length + 65536); h2n->swsi->h2.peer_tx_cr_est += pps->u.update_window.credit; lws_pps_schedule(wsi, pps); } if (wsi->h2.peer_tx_cr_est < (int)(2 * h2n->length) + 65536) { pps = lws_h2_new_pps(LWS_H2_PPS_UPDATE_WINDOW); if (!pps) return 1; pps->u.update_window.sid = 0; pps->u.update_window.credit = (2 * h2n->length + 65536); wsi->h2.peer_tx_cr_est += pps->u.update_window.credit; lws_pps_schedule(wsi, pps); } // lwsl_notice("%s: count %d len %d\n", __func__, (int)h2n->count, (int)h2n->length); break; case LWS_H2_FRAME_TYPE_PRIORITY: if (h2n->count <= 4) { h2n->dep <<= 8; h2n->dep |= c; } else { h2n->weight_temp = c; lwsl_info("PRIORITY: dep 0x%x, weight 0x%02X\n", h2n->dep, h2n->weight_temp); if ((h2n->dep & ~(1u << 31)) == h2n->sid) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "cant depend on own sid"); break; } } break; case LWS_H2_FRAME_TYPE_RST_STREAM: h2n->hpack_e_dep <<= 8; h2n->hpack_e_dep |= c; break; case LWS_H2_FRAME_TYPE_PUSH_PROMISE: break; case LWS_H2_FRAME_TYPE_PING: if (h2n->flags & LWS_H2_FLAG_SETTINGS_ACK) { // ack } else { /* they're sending us a ping request */ if (h2n->count > 8) return 1; h2n->ping_payload[h2n->count - 1] = c; } break; case LWS_H2_FRAME_TYPE_WINDOW_UPDATE: h2n->hpack_e_dep <<= 8; h2n->hpack_e_dep |= c; break; case LWS_H2_FRAME_TYPE_COUNT: /* IGNORING FRAME */ break; default: lwsl_notice("%s: unhandled frame type %d\n", __func__, h2n->type); goto fail; } frame_end: if (h2n->count > h2n->length) { lwsl_notice("%s: count > length %d %d\n", __func__, h2n->count, h2n->length); goto fail; } if (h2n->count != h2n->length) break; /* * end of frame just happened */ if (lws_h2_parse_end_of_frame(wsi)) goto fail; break; try_frame_start: if (h2n->frame_state <= 8) { switch (h2n->frame_state++) { case 0: h2n->pad_length = 0; h2n->collected_priority = 0; h2n->padding = 0; h2n->preamble = 0; h2n->length = c; h2n->inside = 0; break; case 1: case 2: h2n->length <<= 8; h2n->length |= c; break; case 3: h2n->type = c; break; case 4: h2n->flags = c; break; case 5: case 6: case 7: case 8: h2n->sid <<= 8; h2n->sid |= c; break; } } if (h2n->frame_state == LWS_H2_FRAME_HEADER_LENGTH) if (lws_h2_parse_frame_header(wsi)) goto fail; break; default: break; } } *inused = in - oldin; return 0; close_swsi_and_return: lws_close_free_wsi(h2n->swsi, 0, "close_swsi_and_return"); h2n->swsi = NULL; h2n->frame_state = 0; h2n->count = 0; // already_closed_swsi: *inused = in - oldin; return 2; fail: *inused = in - oldin; return 1; } int lws_h2_client_handshake(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; uint8_t *buf, *start, *p, *end; char *meth = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_METHOD), *uri = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_URI); struct lws *nwsi = lws_get_network_wsi(wsi); struct lws_h2_protocol_send *pps; int n; /* * The identifier of a newly established stream MUST be numerically * greater than all streams that the initiating endpoint has opened or * reserved. This governs streams that are opened using a HEADERS frame * and streams that are reserved using PUSH_PROMISE. An endpoint that * receives an unexpected stream identifier MUST respond with a * connection error (Section 5.4.1) of type PROTOCOL_ERROR. */ int sid = nwsi->h2.h2n->highest_sid_opened + 2; nwsi->h2.h2n->highest_sid_opened = sid; wsi->h2.my_sid = sid; lwsl_info("%s: CLIENT_WAITING_TO_SEND_HEADERS: pollout (sid %d)\n", __func__, wsi->h2.my_sid); pps = lws_h2_new_pps(LWS_H2_PPS_UPDATE_WINDOW); if (!pps) return 1; pps->u.update_window.sid = sid; pps->u.update_window.credit = 4 * 65536; wsi->h2.peer_tx_cr_est += pps->u.update_window.credit; lws_pps_schedule(wsi, pps); pps = lws_h2_new_pps(LWS_H2_PPS_UPDATE_WINDOW); if (!pps) return 1; pps->u.update_window.sid = 0; pps->u.update_window.credit = 4 * 65536; wsi->h2.peer_tx_cr_est += pps->u.update_window.credit; lws_pps_schedule(wsi, pps); p = start = buf = pt->serv_buf + LWS_PRE; end = start + wsi->context->pt_serv_buf_size - LWS_PRE - 1; /* it's time for us to send our client stream headers */ if (!meth) meth = "GET"; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_COLON_METHOD, (unsigned char *)meth, (int)strlen(meth), &p, end)) goto fail_length; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_COLON_SCHEME, (unsigned char *)"https", 4, &p, end)) goto fail_length; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_COLON_PATH, (unsigned char *)uri, lws_hdr_total_length(wsi, _WSI_TOKEN_CLIENT_URI), &p, end)) goto fail_length; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_COLON_AUTHORITY, (unsigned char *)lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_ORIGIN), lws_hdr_total_length(wsi, _WSI_TOKEN_CLIENT_ORIGIN), &p, end)) goto fail_length; /* give userland a chance to append, eg, cookies */ if (wsi->protocol->callback(wsi, LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER, wsi->user_space, &p, (end - p) - 12)) goto fail_length; if (lws_finalize_http_header(wsi, &p, end)) goto fail_length; n = lws_write(wsi, start, p - start, LWS_WRITE_HTTP_HEADERS); if (n != (p - start)) { lwsl_err("_write returned %d from %ld\n", n, (long)(p - start)); return -1; } lws_h2_state(wsi, LWS_H2_STATE_OPEN); lwsi_set_state(wsi, LRS_ESTABLISHED); return 0; fail_length: lwsl_err("Client hdrs too long: incr context info.pt_serv_buf_size\n"); return -1; } int lws_h2_ws_handshake(struct lws *wsi) { uint8_t buf[LWS_PRE + 2048], *p = buf + LWS_PRE, *start = p, *end = &buf[sizeof(buf) - 1]; const struct lws_http_mount *hit; const char * uri_ptr; int n, m; if (lws_add_http_header_status(wsi, HTTP_STATUS_OK, &p, end)) return -1; if (lws_hdr_total_length(wsi, WSI_TOKEN_PROTOCOL) > 64) return -1; if (wsi->proxied_ws_parent && wsi->child_list) { if (lws_hdr_simple_ptr(wsi, WSI_TOKEN_PROTOCOL)) { if (lws_add_http_header_by_token(wsi, WSI_TOKEN_PROTOCOL, (uint8_t *)lws_hdr_simple_ptr(wsi, WSI_TOKEN_PROTOCOL), (int)strlen(lws_hdr_simple_ptr(wsi, WSI_TOKEN_PROTOCOL)), &p, end)) return -1; } } else { /* we can only return the protocol header if: * - one came in, and ... */ if (lws_hdr_total_length(wsi, WSI_TOKEN_PROTOCOL) && /* - it is not an empty string */ wsi->protocol->name && wsi->protocol->name[0]) { if (lws_add_http_header_by_token(wsi, WSI_TOKEN_PROTOCOL, (unsigned char *)wsi->protocol->name, (int)strlen(wsi->protocol->name), &p, end)) return -1; } } if (lws_finalize_http_header(wsi, &p, end)) return -1; m = lws_ptr_diff(p, start); // lwsl_hexdump_notice(start, m); n = lws_write(wsi, start, m, LWS_WRITE_HTTP_HEADERS); if (n != m) { lwsl_err("_write returned %d from %d\n", n, m); return -1; } /* * alright clean up, set our state to generic ws established, the * mode / state of the nwsi will get the h2 processing done. */ lwsi_set_state(wsi, LRS_ESTABLISHED); wsi->lws_rx_parse_state = 0; // ==LWS_RXPS_NEW; uri_ptr = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_PATH); n = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_PATH); hit = lws_find_mount(wsi, uri_ptr, n); if (hit && hit->cgienv && wsi->protocol->callback(wsi, LWS_CALLBACK_HTTP_PMO, wsi->user_space, (void *)hit->cgienv, 0)) return 1; return 0; } int lws_read_h2(struct lws *wsi, unsigned char *buf, lws_filepos_t len) { unsigned char *oldbuf = buf; lws_filepos_t body_chunk_len; // lwsl_notice("%s: h2 path: wsistate 0x%x len %d\n", __func__, // wsi->wsistate, (int)len); /* * wsi here is always the network connection wsi, not a stream * wsi. Once we unpicked the framing we will find the right * swsi and make it the target of the frame. * * If it's ws over h2, the nwsi will get us here to do the h2 * processing, and that will call us back with the swsi + * ESTABLISHED state for the inner payload, handled in a later * case. */ while (len) { int m; /* * we were accepting input but now we stopped doing so */ if (lws_is_flowcontrolled(wsi)) { lws_rxflow_cache(wsi, buf, 0, (int)len); buf += len; len = 0; break; } /* * lws_h2_parser() may send something; when it gets the * whole frame, it will want to perform some action * involving a reply. But we may be in a partial send * situation on the network wsi... * * Even though we may be in a partial send and unable to * send anything new, we still have to parse the network * wsi in order to gain tx credit to send, which is * potentially necessary to clear the old partial send. * * ALL network wsi-specific frames are sent by PPS * already, these are sent as a priority on the writable * handler, and so respect partial sends. The only * problem is when a stream wsi wants to send an, eg, * reply headers frame in response to the parsing * we will do now... the *stream wsi* must stall in a * different state until it is able to do so from a * priority on the WRITABLE callback, same way that * file transfers operate. */ m = lws_h2_parser(wsi, buf, len, &body_chunk_len); if (m && m != 2) { lwsl_debug("%s: http2_parser bail: %d\n", __func__, m); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "lws_read_h2 bail"); return -1; } if (m == 2) { /* swsi has been closed */ buf += body_chunk_len; len -= body_chunk_len; break; } buf += body_chunk_len; len -= body_chunk_len; } return lws_ptr_diff(buf, oldbuf); } libwebsockets-3.2.1/lib/roles/h2/huftable.h000066400000000000000000000724001357643561300205430ustar00rootroot00000000000000static unsigned char lextable[] = { /* pos 0000: 0 */ /* 0 */ 0x42 /* (to 0x0084 state 98) */, /* 1 */ 0x01 /* (to 0x0002 state 1) */, /* pos 0002: 1 */ /* 0 */ 0x5C /* (to 0x00BA state 151) */, /* 1 */ 0x01 /* (to 0x0004 state 2) */, /* pos 0004: 2 */ /* 0 */ 0x66 /* (to 0x00D0 state 173) */, /* 1 */ 0x01 /* (to 0x0006 state 3) */, /* pos 0006: 3 */ /* 0 */ 0x74 /* (to 0x00EE state 204) */, /* 1 */ 0x01 /* (to 0x0008 state 4) */, /* pos 0008: 4 */ /* 0 */ 0x8C /* (to 0x0120 state 263) */, /* 1 */ 0x01 /* (to 0x000A state 5) */, /* pos 000a: 5 */ /* 0 */ 0x46 /* (to 0x0096 state 113) */, /* 1 */ 0x01 /* (to 0x000C state 6) */, /* pos 000c: 6 */ /* 0 */ 0x75 /* (to 0x00F6 state 211) */, /* 1 */ 0x01 /* (to 0x000E state 7) */, /* pos 000e: 7 */ /* 0 */ 0x40 /* (to 0x008E state 104) */, /* 1 */ 0x01 /* (to 0x0010 state 8) */, /* pos 0010: 8 */ /* 0 */ 0x45 /* (to 0x009A state 116) */, /* 1 */ 0x01 /* (to 0x0012 state 9) */, /* pos 0012: 9 */ /* 0 */ 0x40 /* (to 0x0092 state 108) */, /* 1 */ 0x01 /* (to 0x0014 state 10) */, /* pos 0014: 10 */ /* 0 */ 0x01 /* (to 0x0016 state 11) */, /* 1 */ 0x03 /* (to 0x001A state 14) */, /* pos 0016: 11 */ /* 0 */ 0x01 /* (to 0x0018 state 12) */, /* 1 */ 0x5B /* (to 0x00CC state 166) */, /* pos 0018: 12 */ /* terminal 0 */ 0x00, /* terminal 36 */ 0x24, /* pos 001a: 14 */ /* 0 */ 0x72 /* (to 0x00FE state 220) */, /* 1 */ 0x01 /* (to 0x001C state 15) */, /* pos 001c: 15 */ /* 0 */ 0x72 /* (to 0x0100 state 222) */, /* 1 */ 0x01 /* (to 0x001E state 16) */, /* pos 001e: 16 */ /* 0 */ 0x53 /* (to 0x00C4 state 158) */, /* 1 */ 0x01 /* (to 0x0020 state 17) */, /* pos 0020: 17 */ /* terminal 123 */ 0x7B, /* 1 */ 0x01 /* (to 0x0022 state 18) */, /* pos 0022: 18 */ /* 0 */ 0x6B /* (to 0x00F8 state 216) */, /* 1 */ 0x01 /* (to 0x0024 state 19) */, /* pos 0024: 19 */ /* 0 */ 0x84 /* (to 0x012C state 279) */, /* 1 */ 0x01 /* (to 0x0026 state 20) */, /* pos 0026: 20 */ /* 0 */ 0x01 /* (to 0x0028 state 21) */, /* 1 */ 0x06 /* (to 0x0032 state 27) */, /* pos 0028: 21 */ /* 0 */ 0xB3 /* (to 0x018E state 377) */, /* 1 */ 0x01 /* (to 0x002A state 22) */, /* pos 002a: 22 */ /* 0 */ 0xC3 /* (to 0x01B0 state 414) */, /* 1 */ 0x01 /* (to 0x002C state 23) */, /* pos 002c: 23 */ /* 0 */ 0x01 /* (to 0x002E state 24) */, /* 1 */ 0x8C /* (to 0x0144 state 301) */, /* pos 002e: 24 */ /* 0 */ 0x01 /* (to 0x0030 state 25) */, /* 1 */ 0x8A /* (to 0x0142 state 298) */, /* pos 0030: 25 */ /* terminal 1 */ 0x01, /* terminal 135 */ 0x87, /* pos 0032: 27 */ /* 0 */ 0x8E /* (to 0x014E state 314) */, /* 1 */ 0x01 /* (to 0x0034 state 28) */, /* pos 0034: 28 */ /* 0 */ 0x0F /* (to 0x0052 state 50) */, /* 1 */ 0x01 /* (to 0x0036 state 29) */, /* pos 0036: 29 */ /* 0 */ 0xA4 /* (to 0x017E state 362) */, /* 1 */ 0x01 /* (to 0x0038 state 30) */, /* pos 0038: 30 */ /* 0 */ 0xB7 /* (to 0x01A6 state 403) */, /* 1 */ 0x01 /* (to 0x003A state 31) */, /* pos 003a: 31 */ /* 0 */ 0xC8 /* (to 0x01CA state 440) */, /* 1 */ 0x01 /* (to 0x003C state 32) */, /* pos 003c: 32 */ /* 0 */ 0x01 /* (to 0x003E state 33) */, /* 1 */ 0x0F /* (to 0x005A state 55) */, /* pos 003e: 33 */ /* 0 */ 0x01 /* (to 0x0040 state 34) */, /* 1 */ 0x07 /* (to 0x004C state 46) */, /* pos 0040: 34 */ /* 0 */ 0x01 /* (to 0x0042 state 35) */, /* 1 */ 0x03 /* (to 0x0046 state 39) */, /* pos 0042: 35 */ /* terminal 254 */ 0xFE, /* 1 */ 0x01 /* (to 0x0044 state 36) */, /* pos 0044: 36 */ /* terminal 2 */ 0x02, /* terminal 3 */ 0x03, /* pos 0046: 39 */ /* 0 */ 0x01 /* (to 0x0048 state 40) */, /* 1 */ 0x02 /* (to 0x004A state 43) */, /* pos 0048: 40 */ /* terminal 4 */ 0x04, /* terminal 5 */ 0x05, /* pos 004a: 43 */ /* terminal 6 */ 0x06, /* terminal 7 */ 0x07, /* pos 004c: 46 */ /* 0 */ 0x01 /* (to 0x004E state 47) */, /* 1 */ 0x0E /* (to 0x0068 state 67) */, /* pos 004e: 47 */ /* 0 */ 0x01 /* (to 0x0050 state 48) */, /* 1 */ 0x0C /* (to 0x0066 state 63) */, /* pos 0050: 48 */ /* terminal 8 */ 0x08, /* terminal 11 */ 0x0B, /* pos 0052: 50 */ /* 0 */ 0xA7 /* (to 0x01A0 state 396) */, /* 1 */ 0x01 /* (to 0x0054 state 51) */, /* pos 0054: 51 */ /* 0 */ 0x01 /* (to 0x0056 state 52) */, /* 1 */ 0x7B /* (to 0x014A state 309) */, /* pos 0056: 52 */ /* terminal 239 */ 0xEF, /* 1 */ 0x01 /* (to 0x0058 state 53) */, /* pos 0058: 53 */ /* terminal 9 */ 0x09, /* terminal 142 */ 0x8E, /* pos 005a: 55 */ /* 0 */ 0x0A /* (to 0x006E state 74) */, /* 1 */ 0x01 /* (to 0x005C state 56) */, /* pos 005c: 56 */ /* 0 */ 0x11 /* (to 0x007E state 91) */, /* 1 */ 0x01 /* (to 0x005E state 57) */, /* pos 005e: 57 */ /* 0 */ 0x64 /* (to 0x0126 state 274) */, /* 1 */ 0x01 /* (to 0x0060 state 58) */, /* pos 0060: 58 */ /* terminal 249 */ 0xF9, /* 1 */ 0x01 /* (to 0x0062 state 59) */, /* pos 0062: 59 */ /* 0 */ 0x01 /* (to 0x0064 state 60) */, /* 1 */ 0x0A /* (to 0x0076 state 81) */, /* pos 0064: 60 */ /* terminal 10 */ 0x0A, /* terminal 13 */ 0x0D, /* pos 0066: 63 */ /* terminal 12 */ 0x0C, /* terminal 14 */ 0x0E, /* pos 0068: 67 */ /* 0 */ 0x01 /* (to 0x006A state 68) */, /* 1 */ 0x02 /* (to 0x006C state 71) */, /* pos 006a: 68 */ /* terminal 15 */ 0x0F, /* terminal 16 */ 0x10, /* pos 006c: 71 */ /* terminal 17 */ 0x11, /* terminal 18 */ 0x12, /* pos 006e: 74 */ /* 0 */ 0x01 /* (to 0x0070 state 75) */, /* 1 */ 0x05 /* (to 0x0078 state 84) */, /* pos 0070: 75 */ /* 0 */ 0x01 /* (to 0x0072 state 76) */, /* 1 */ 0x02 /* (to 0x0074 state 79) */, /* pos 0072: 76 */ /* terminal 19 */ 0x13, /* terminal 20 */ 0x14, /* pos 0074: 79 */ /* terminal 21 */ 0x15, /* terminal 23 */ 0x17, /* pos 0076: 81 */ /* terminal 22 */ 0x16, /* terminal 256 */ 0x00, /* pos 0078: 84 */ /* 0 */ 0x01 /* (to 0x007A state 85) */, /* 1 */ 0x02 /* (to 0x007C state 88) */, /* pos 007a: 85 */ /* terminal 24 */ 0x18, /* terminal 25 */ 0x19, /* pos 007c: 88 */ /* terminal 26 */ 0x1A, /* terminal 27 */ 0x1B, /* pos 007e: 91 */ /* 0 */ 0x01 /* (to 0x0080 state 92) */, /* 1 */ 0x02 /* (to 0x0082 state 95) */, /* pos 0080: 92 */ /* terminal 28 */ 0x1C, /* terminal 29 */ 0x1D, /* pos 0082: 95 */ /* terminal 30 */ 0x1E, /* terminal 31 */ 0x1F, /* pos 0084: 98 */ /* 0 */ 0x13 /* (to 0x00AA state 133) */, /* 1 */ 0x01 /* (to 0x0086 state 99) */, /* pos 0086: 99 */ /* 0 */ 0x01 /* (to 0x0088 state 100) */, /* 1 */ 0x0F /* (to 0x00A4 state 129) */, /* pos 0088: 100 */ /* 0 */ 0x4B /* (to 0x011E state 258) */, /* 1 */ 0x01 /* (to 0x008A state 101) */, /* pos 008a: 101 */ /* 0 */ 0x01 /* (to 0x008C state 102) */, /* 1 */ 0x0C /* (to 0x00A2 state 126) */, /* pos 008c: 102 */ /* terminal 32 */ 0x20, /* terminal 37 */ 0x25, /* pos 008e: 104 */ /* 0 */ 0x01 /* (to 0x0090 state 105) */, /* 1 */ 0x08 /* (to 0x009E state 119) */, /* pos 0090: 105 */ /* terminal 33 */ 0x21, /* terminal 34 */ 0x22, /* pos 0092: 108 */ /* terminal 124 */ 0x7C, /* 1 */ 0x01 /* (to 0x0094 state 109) */, /* pos 0094: 109 */ /* terminal 35 */ 0x23, /* terminal 62 */ 0x3E, /* pos 0096: 113 */ /* 0 */ 0x01 /* (to 0x0098 state 114) */, /* 1 */ 0x05 /* (to 0x00A0 state 124) */, /* pos 0098: 114 */ /* terminal 38 */ 0x26, /* terminal 42 */ 0x2A, /* pos 009a: 116 */ /* terminal 63 */ 0x3F, /* 1 */ 0x01 /* (to 0x009C state 117) */, /* pos 009c: 117 */ /* terminal 39 */ 0x27, /* terminal 43 */ 0x2B, /* pos 009e: 119 */ /* terminal 40 */ 0x28, /* terminal 41 */ 0x29, /* pos 00a0: 124 */ /* terminal 44 */ 0x2C, /* terminal 59 */ 0x3B, /* pos 00a2: 126 */ /* terminal 45 */ 0x2D, /* terminal 46 */ 0x2E, /* pos 00a4: 129 */ /* 0 */ 0x01 /* (to 0x00A6 state 130) */, /* 1 */ 0x08 /* (to 0x00B4 state 144) */, /* pos 00a6: 130 */ /* 0 */ 0x01 /* (to 0x00A8 state 131) */, /* 1 */ 0x06 /* (to 0x00B2 state 141) */, /* pos 00a8: 131 */ /* terminal 47 */ 0x2F, /* terminal 51 */ 0x33, /* pos 00aa: 133 */ /* 0 */ 0x01 /* (to 0x00AC state 134) */, /* 1 */ 0x2D /* (to 0x0104 state 229) */, /* pos 00ac: 134 */ /* 0 */ 0x01 /* (to 0x00AE state 135) */, /* 1 */ 0x02 /* (to 0x00B0 state 138) */, /* pos 00ae: 135 */ /* terminal 48 */ 0x30, /* terminal 49 */ 0x31, /* pos 00b0: 138 */ /* terminal 50 */ 0x32, /* terminal 97 */ 0x61, /* pos 00b2: 141 */ /* terminal 52 */ 0x34, /* terminal 53 */ 0x35, /* pos 00b4: 144 */ /* 0 */ 0x01 /* (to 0x00B6 state 145) */, /* 1 */ 0x02 /* (to 0x00B8 state 148) */, /* pos 00b6: 145 */ /* terminal 54 */ 0x36, /* terminal 55 */ 0x37, /* pos 00b8: 148 */ /* terminal 56 */ 0x38, /* terminal 57 */ 0x39, /* pos 00ba: 151 */ /* 0 */ 0x06 /* (to 0x00C6 state 160) */, /* 1 */ 0x01 /* (to 0x00BC state 152) */, /* pos 00bc: 152 */ /* 0 */ 0x2C /* (to 0x0114 state 246) */, /* 1 */ 0x01 /* (to 0x00BE state 153) */, /* pos 00be: 153 */ /* 0 */ 0x2F /* (to 0x011C state 256) */, /* 1 */ 0x01 /* (to 0x00C0 state 154) */, /* pos 00c0: 154 */ /* 0 */ 0x01 /* (to 0x00C2 state 155) */, /* 1 */ 0x07 /* (to 0x00CE state 170) */, /* pos 00c2: 155 */ /* terminal 58 */ 0x3A, /* terminal 66 */ 0x42, /* pos 00c4: 158 */ /* terminal 60 */ 0x3C, /* terminal 96 */ 0x60, /* pos 00c6: 160 */ /* 0 */ 0x01 /* (to 0x00C8 state 161) */, /* 1 */ 0x21 /* (to 0x0108 state 232) */, /* pos 00c8: 161 */ /* 0 */ 0x01 /* (to 0x00CA state 162) */, /* 1 */ 0x1D /* (to 0x0102 state 224) */, /* pos 00ca: 162 */ /* terminal 61 */ 0x3D, /* terminal 65 */ 0x41, /* pos 00cc: 166 */ /* terminal 64 */ 0x40, /* terminal 91 */ 0x5B, /* pos 00ce: 170 */ /* terminal 67 */ 0x43, /* terminal 68 */ 0x44, /* pos 00d0: 173 */ /* 0 */ 0x01 /* (to 0x00D2 state 174) */, /* 1 */ 0x08 /* (to 0x00E0 state 189) */, /* pos 00d2: 174 */ /* 0 */ 0x01 /* (to 0x00D4 state 175) */, /* 1 */ 0x04 /* (to 0x00DA state 182) */, /* pos 00d4: 175 */ /* 0 */ 0x01 /* (to 0x00D6 state 176) */, /* 1 */ 0x02 /* (to 0x00D8 state 179) */, /* pos 00d6: 176 */ /* terminal 69 */ 0x45, /* terminal 70 */ 0x46, /* pos 00d8: 179 */ /* terminal 71 */ 0x47, /* terminal 72 */ 0x48, /* pos 00da: 182 */ /* 0 */ 0x01 /* (to 0x00DC state 183) */, /* 1 */ 0x02 /* (to 0x00DE state 186) */, /* pos 00dc: 183 */ /* terminal 73 */ 0x49, /* terminal 74 */ 0x4A, /* pos 00de: 186 */ /* terminal 75 */ 0x4B, /* terminal 76 */ 0x4C, /* pos 00e0: 189 */ /* 0 */ 0x01 /* (to 0x00E2 state 190) */, /* 1 */ 0x04 /* (to 0x00E8 state 197) */, /* pos 00e2: 190 */ /* 0 */ 0x01 /* (to 0x00E4 state 191) */, /* 1 */ 0x02 /* (to 0x00E6 state 194) */, /* pos 00e4: 191 */ /* terminal 77 */ 0x4D, /* terminal 78 */ 0x4E, /* pos 00e6: 194 */ /* terminal 79 */ 0x4F, /* terminal 80 */ 0x50, /* pos 00e8: 197 */ /* 0 */ 0x01 /* (to 0x00EA state 198) */, /* 1 */ 0x02 /* (to 0x00EC state 201) */, /* pos 00ea: 198 */ /* terminal 81 */ 0x51, /* terminal 82 */ 0x52, /* pos 00ec: 201 */ /* terminal 83 */ 0x53, /* terminal 84 */ 0x54, /* pos 00ee: 204 */ /* 0 */ 0x01 /* (to 0x00F0 state 205) */, /* 1 */ 0x11 /* (to 0x0110 state 242) */, /* pos 00f0: 205 */ /* 0 */ 0x01 /* (to 0x00F2 state 206) */, /* 1 */ 0x02 /* (to 0x00F4 state 209) */, /* pos 00f2: 206 */ /* terminal 85 */ 0x55, /* terminal 86 */ 0x56, /* pos 00f4: 209 */ /* terminal 87 */ 0x57, /* terminal 89 */ 0x59, /* pos 00f6: 211 */ /* terminal 88 */ 0x58, /* terminal 90 */ 0x5A, /* pos 00f8: 216 */ /* 0 */ 0x01 /* (to 0x00FA state 217) */, /* 1 */ 0x1F /* (to 0x0136 state 286) */, /* pos 00fa: 217 */ /* 0 */ 0x01 /* (to 0x00FC state 218) */, /* 1 */ 0x17 /* (to 0x0128 state 276) */, /* pos 00fc: 218 */ /* terminal 92 */ 0x5C, /* terminal 195 */ 0xC3, /* pos 00fe: 220 */ /* terminal 93 */ 0x5D, /* terminal 126 */ 0x7E, /* pos 0100: 222 */ /* terminal 94 */ 0x5E, /* terminal 125 */ 0x7D, /* pos 0102: 224 */ /* terminal 95 */ 0x5F, /* terminal 98 */ 0x62, /* pos 0104: 229 */ /* 0 */ 0x01 /* (to 0x0106 state 230) */, /* 1 */ 0x05 /* (to 0x010E state 240) */, /* pos 0106: 230 */ /* terminal 99 */ 0x63, /* terminal 101 */ 0x65, /* pos 0108: 232 */ /* 0 */ 0x01 /* (to 0x010A state 233) */, /* 1 */ 0x02 /* (to 0x010C state 237) */, /* pos 010a: 233 */ /* terminal 100 */ 0x64, /* terminal 102 */ 0x66, /* pos 010c: 237 */ /* terminal 103 */ 0x67, /* terminal 104 */ 0x68, /* pos 010e: 240 */ /* terminal 105 */ 0x69, /* terminal 111 */ 0x6F, /* pos 0110: 242 */ /* 0 */ 0x01 /* (to 0x0112 state 243) */, /* 1 */ 0x05 /* (to 0x011A state 254) */, /* pos 0112: 243 */ /* terminal 106 */ 0x6A, /* terminal 107 */ 0x6B, /* pos 0114: 246 */ /* 0 */ 0x01 /* (to 0x0116 state 247) */, /* 1 */ 0x02 /* (to 0x0118 state 250) */, /* pos 0116: 247 */ /* terminal 108 */ 0x6C, /* terminal 109 */ 0x6D, /* pos 0118: 250 */ /* terminal 110 */ 0x6E, /* terminal 112 */ 0x70, /* pos 011a: 254 */ /* terminal 113 */ 0x71, /* terminal 118 */ 0x76, /* pos 011c: 256 */ /* terminal 114 */ 0x72, /* terminal 117 */ 0x75, /* pos 011e: 258 */ /* terminal 115 */ 0x73, /* terminal 116 */ 0x74, /* pos 0120: 263 */ /* 0 */ 0x01 /* (to 0x0122 state 264) */, /* 1 */ 0x02 /* (to 0x0124 state 267) */, /* pos 0122: 264 */ /* terminal 119 */ 0x77, /* terminal 120 */ 0x78, /* pos 0124: 267 */ /* terminal 121 */ 0x79, /* terminal 122 */ 0x7A, /* pos 0126: 274 */ /* terminal 127 */ 0x7F, /* terminal 220 */ 0xDC, /* pos 0128: 276 */ /* terminal 208 */ 0xD0, /* 1 */ 0x01 /* (to 0x012A state 277) */, /* pos 012a: 277 */ /* terminal 128 */ 0x80, /* terminal 130 */ 0x82, /* pos 012c: 279 */ /* 0 */ 0x2E /* (to 0x0188 state 372) */, /* 1 */ 0x01 /* (to 0x012E state 280) */, /* pos 012e: 280 */ /* 0 */ 0x01 /* (to 0x0130 state 281) */, /* 1 */ 0x1B /* (to 0x0164 state 332) */, /* pos 0130: 281 */ /* 0 */ 0x01 /* (to 0x0132 state 282) */, /* 1 */ 0x06 /* (to 0x013C state 291) */, /* pos 0132: 282 */ /* terminal 230 */ 0xE6, /* 1 */ 0x01 /* (to 0x0134 state 283) */, /* pos 0134: 283 */ /* terminal 129 */ 0x81, /* terminal 132 */ 0x84, /* pos 0136: 286 */ /* 0 */ 0x01 /* (to 0x0138 state 287) */, /* 1 */ 0x14 /* (to 0x015E state 328) */, /* pos 0138: 287 */ /* 0 */ 0x01 /* (to 0x013A state 288) */, /* 1 */ 0x30 /* (to 0x0198 state 388) */, /* pos 013a: 288 */ /* terminal 131 */ 0x83, /* terminal 162 */ 0xA2, /* pos 013c: 291 */ /* 0 */ 0x01 /* (to 0x013E state 292) */, /* 1 */ 0x02 /* (to 0x0140 state 296) */, /* pos 013e: 292 */ /* terminal 133 */ 0x85, /* terminal 134 */ 0x86, /* pos 0140: 296 */ /* terminal 136 */ 0x88, /* terminal 146 */ 0x92, /* pos 0142: 298 */ /* terminal 137 */ 0x89, /* terminal 138 */ 0x8A, /* pos 0144: 301 */ /* 0 */ 0x01 /* (to 0x0146 state 302) */, /* 1 */ 0x02 /* (to 0x0148 state 305) */, /* pos 0146: 302 */ /* terminal 139 */ 0x8B, /* terminal 140 */ 0x8C, /* pos 0148: 305 */ /* terminal 141 */ 0x8D, /* terminal 143 */ 0x8F, /* pos 014a: 309 */ /* 0 */ 0x01 /* (to 0x014C state 310) */, /* 1 */ 0x06 /* (to 0x0156 state 319) */, /* pos 014c: 310 */ /* terminal 144 */ 0x90, /* terminal 145 */ 0x91, /* pos 014e: 314 */ /* 0 */ 0x01 /* (to 0x0150 state 315) */, /* 1 */ 0x12 /* (to 0x0172 state 350) */, /* pos 0150: 315 */ /* 0 */ 0x01 /* (to 0x0152 state 316) */, /* 1 */ 0x05 /* (to 0x015A state 325) */, /* pos 0152: 316 */ /* 0 */ 0x01 /* (to 0x0154 state 317) */, /* 1 */ 0x03 /* (to 0x0158 state 322) */, /* pos 0154: 317 */ /* terminal 147 */ 0x93, /* terminal 149 */ 0x95, /* pos 0156: 319 */ /* terminal 148 */ 0x94, /* terminal 159 */ 0x9F, /* pos 0158: 322 */ /* terminal 150 */ 0x96, /* terminal 151 */ 0x97, /* pos 015a: 325 */ /* 0 */ 0x01 /* (to 0x015C state 326) */, /* 1 */ 0x08 /* (to 0x016A state 338) */, /* pos 015c: 326 */ /* terminal 152 */ 0x98, /* terminal 155 */ 0x9B, /* pos 015e: 328 */ /* 0 */ 0x42 /* (to 0x01E2 state 465) */, /* 1 */ 0x01 /* (to 0x0160 state 329) */, /* pos 0160: 329 */ /* 0 */ 0x01 /* (to 0x0162 state 330) */, /* 1 */ 0x0C /* (to 0x0178 state 355) */, /* pos 0162: 330 */ /* terminal 153 */ 0x99, /* terminal 161 */ 0xA1, /* pos 0164: 332 */ /* 0 */ 0x01 /* (to 0x0166 state 333) */, /* 1 */ 0x05 /* (to 0x016E state 347) */, /* pos 0166: 333 */ /* 0 */ 0x01 /* (to 0x0168 state 334) */, /* 1 */ 0x03 /* (to 0x016C state 342) */, /* pos 0168: 334 */ /* terminal 154 */ 0x9A, /* terminal 156 */ 0x9C, /* pos 016a: 338 */ /* terminal 157 */ 0x9D, /* terminal 158 */ 0x9E, /* pos 016c: 342 */ /* terminal 160 */ 0xA0, /* terminal 163 */ 0xA3, /* pos 016e: 347 */ /* 0 */ 0x01 /* (to 0x0170 state 348) */, /* 1 */ 0x07 /* (to 0x017C state 360) */, /* pos 0170: 348 */ /* terminal 164 */ 0xA4, /* terminal 169 */ 0xA9, /* pos 0172: 350 */ /* 0 */ 0x01 /* (to 0x0174 state 351) */, /* 1 */ 0x09 /* (to 0x0184 state 369) */, /* pos 0174: 351 */ /* 0 */ 0x01 /* (to 0x0176 state 352) */, /* 1 */ 0x03 /* (to 0x017A state 357) */, /* pos 0176: 352 */ /* terminal 165 */ 0xA5, /* terminal 166 */ 0xA6, /* pos 0178: 355 */ /* terminal 167 */ 0xA7, /* terminal 172 */ 0xAC, /* pos 017a: 357 */ /* terminal 168 */ 0xA8, /* terminal 174 */ 0xAE, /* pos 017c: 360 */ /* terminal 170 */ 0xAA, /* terminal 173 */ 0xAD, /* pos 017e: 362 */ /* 0 */ 0x01 /* (to 0x0180 state 363) */, /* 1 */ 0x1B /* (to 0x01B4 state 417) */, /* pos 0180: 363 */ /* 0 */ 0x01 /* (to 0x0182 state 364) */, /* 1 */ 0x2A /* (to 0x01D4 state 449) */, /* pos 0182: 364 */ /* terminal 171 */ 0xAB, /* terminal 206 */ 0xCE, /* pos 0184: 369 */ /* 0 */ 0x01 /* (to 0x0186 state 370) */, /* 1 */ 0x09 /* (to 0x0196 state 385) */, /* pos 0186: 370 */ /* terminal 175 */ 0xAF, /* terminal 180 */ 0xB4, /* pos 0188: 372 */ /* 0 */ 0x01 /* (to 0x018A state 373) */, /* 1 */ 0x27 /* (to 0x01D6 state 451) */, /* pos 018a: 373 */ /* 0 */ 0x01 /* (to 0x018C state 374) */, /* 1 */ 0x05 /* (to 0x0194 state 381) */, /* pos 018c: 374 */ /* terminal 176 */ 0xB0, /* terminal 177 */ 0xB1, /* pos 018e: 377 */ /* 0 */ 0x01 /* (to 0x0190 state 378) */, /* 1 */ 0x07 /* (to 0x019C state 393) */, /* pos 0190: 378 */ /* 0 */ 0x01 /* (to 0x0192 state 379) */, /* 1 */ 0x05 /* (to 0x019A state 390) */, /* pos 0192: 379 */ /* terminal 178 */ 0xB2, /* terminal 181 */ 0xB5, /* pos 0194: 381 */ /* terminal 179 */ 0xB3, /* terminal 209 */ 0xD1, /* pos 0196: 385 */ /* terminal 182 */ 0xB6, /* terminal 183 */ 0xB7, /* pos 0198: 388 */ /* terminal 184 */ 0xB8, /* terminal 194 */ 0xC2, /* pos 019a: 390 */ /* terminal 185 */ 0xB9, /* terminal 186 */ 0xBA, /* pos 019c: 393 */ /* 0 */ 0x01 /* (to 0x019E state 394) */, /* 1 */ 0x04 /* (to 0x01A4 state 400) */, /* pos 019e: 394 */ /* terminal 187 */ 0xBB, /* terminal 189 */ 0xBD, /* pos 01a0: 396 */ /* 0 */ 0x01 /* (to 0x01A2 state 397) */, /* 1 */ 0x07 /* (to 0x01AE state 412) */, /* pos 01a2: 397 */ /* terminal 188 */ 0xBC, /* terminal 191 */ 0xBF, /* pos 01a4: 400 */ /* terminal 190 */ 0xBE, /* terminal 196 */ 0xC4, /* pos 01a6: 403 */ /* 0 */ 0x01 /* (to 0x01A8 state 404) */, /* 1 */ 0x0D /* (to 0x01C0 state 427) */, /* pos 01a8: 404 */ /* 0 */ 0x01 /* (to 0x01AA state 405) */, /* 1 */ 0x0A /* (to 0x01BC state 424) */, /* pos 01aa: 405 */ /* 0 */ 0x01 /* (to 0x01AC state 406) */, /* 1 */ 0x08 /* (to 0x01BA state 421) */, /* pos 01ac: 406 */ /* terminal 192 */ 0xC0, /* terminal 193 */ 0xC1, /* pos 01ae: 412 */ /* terminal 197 */ 0xC5, /* terminal 231 */ 0xE7, /* pos 01b0: 414 */ /* 0 */ 0x01 /* (to 0x01B2 state 415) */, /* 1 */ 0x1B /* (to 0x01E6 state 475) */, /* pos 01b2: 415 */ /* terminal 198 */ 0xC6, /* terminal 228 */ 0xE4, /* pos 01b4: 417 */ /* 0 */ 0x1B /* (to 0x01EA state 481) */, /* 1 */ 0x01 /* (to 0x01B6 state 418) */, /* pos 01b6: 418 */ /* 0 */ 0x01 /* (to 0x01B8 state 419) */, /* 1 */ 0x19 /* (to 0x01E8 state 478) */, /* pos 01b8: 419 */ /* terminal 199 */ 0xC7, /* terminal 207 */ 0xCF, /* pos 01ba: 421 */ /* terminal 200 */ 0xC8, /* terminal 201 */ 0xC9, /* pos 01bc: 424 */ /* 0 */ 0x01 /* (to 0x01BE state 425) */, /* 1 */ 0x06 /* (to 0x01C8 state 438) */, /* pos 01be: 425 */ /* terminal 202 */ 0xCA, /* terminal 205 */ 0xCD, /* pos 01c0: 427 */ /* 0 */ 0x0D /* (to 0x01DA state 455) */, /* 1 */ 0x01 /* (to 0x01C2 state 428) */, /* pos 01c2: 428 */ /* 0 */ 0x17 /* (to 0x01F0 state 490) */, /* 1 */ 0x01 /* (to 0x01C4 state 429) */, /* pos 01c4: 429 */ /* terminal 255 */ 0xFF, /* 1 */ 0x01 /* (to 0x01C6 state 430) */, /* pos 01c6: 430 */ /* terminal 203 */ 0xCB, /* terminal 204 */ 0xCC, /* pos 01c8: 438 */ /* terminal 210 */ 0xD2, /* terminal 213 */ 0xD5, /* pos 01ca: 440 */ /* 0 */ 0x01 /* (to 0x01CC state 441) */, /* 1 */ 0x14 /* (to 0x01F2 state 494) */, /* pos 01cc: 441 */ /* 0 */ 0x01 /* (to 0x01CE state 442) */, /* 1 */ 0x09 /* (to 0x01DE state 461) */, /* pos 01ce: 442 */ /* 0 */ 0x01 /* (to 0x01D0 state 443) */, /* 1 */ 0x02 /* (to 0x01D2 state 447) */, /* pos 01d0: 443 */ /* terminal 211 */ 0xD3, /* terminal 212 */ 0xD4, /* pos 01d2: 447 */ /* terminal 214 */ 0xD6, /* terminal 221 */ 0xDD, /* pos 01d4: 449 */ /* terminal 215 */ 0xD7, /* terminal 225 */ 0xE1, /* pos 01d6: 451 */ /* 0 */ 0x01 /* (to 0x01D8 state 452) */, /* 1 */ 0x07 /* (to 0x01E4 state 469) */, /* pos 01d8: 452 */ /* terminal 216 */ 0xD8, /* terminal 217 */ 0xD9, /* pos 01da: 455 */ /* 0 */ 0x01 /* (to 0x01DC state 456) */, /* 1 */ 0x09 /* (to 0x01EC state 484) */, /* pos 01dc: 456 */ /* terminal 218 */ 0xDA, /* terminal 219 */ 0xDB, /* pos 01de: 461 */ /* 0 */ 0x01 /* (to 0x01E0 state 462) */, /* 1 */ 0x08 /* (to 0x01EE state 488) */, /* pos 01e0: 462 */ /* terminal 222 */ 0xDE, /* terminal 223 */ 0xDF, /* pos 01e2: 465 */ /* terminal 224 */ 0xE0, /* terminal 226 */ 0xE2, /* pos 01e4: 469 */ /* terminal 227 */ 0xE3, /* terminal 229 */ 0xE5, /* pos 01e6: 475 */ /* terminal 232 */ 0xE8, /* terminal 233 */ 0xE9, /* pos 01e8: 478 */ /* terminal 234 */ 0xEA, /* terminal 235 */ 0xEB, /* pos 01ea: 481 */ /* terminal 236 */ 0xEC, /* terminal 237 */ 0xED, /* pos 01ec: 484 */ /* terminal 238 */ 0xEE, /* terminal 240 */ 0xF0, /* pos 01ee: 488 */ /* terminal 241 */ 0xF1, /* terminal 244 */ 0xF4, /* pos 01f0: 490 */ /* terminal 242 */ 0xF2, /* terminal 243 */ 0xF3, /* pos 01f2: 494 */ /* 0 */ 0x01 /* (to 0x01F4 state 495) */, /* 1 */ 0x04 /* (to 0x01FA state 503) */, /* pos 01f4: 495 */ /* 0 */ 0x01 /* (to 0x01F6 state 496) */, /* 1 */ 0x02 /* (to 0x01F8 state 499) */, /* pos 01f6: 496 */ /* terminal 245 */ 0xF5, /* terminal 246 */ 0xF6, /* pos 01f8: 499 */ /* terminal 247 */ 0xF7, /* terminal 248 */ 0xF8, /* pos 01fa: 503 */ /* 0 */ 0x01 /* (to 0x01FC state 504) */, /* 1 */ 0x02 /* (to 0x01FE state 507) */, /* pos 01fc: 504 */ /* terminal 250 */ 0xFA, /* terminal 251 */ 0xFB, /* pos 01fe: 507 */ /* terminal 252 */ 0xFC, /* terminal 253 */ 0xFD, /* total size 512 bytes, biggest jump 200/256, fails=0 */ }; static unsigned char lextable_terms[] = { 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x03, 0x00, 0x34, 0x0f, 0x43, 0x03, 0xf1, 0x3c, 0xfc, 0x3c, 0x0f, 0x30, 0x37, 0xf7, 0x0f, 0xc3, 0xcf, 0x03, 0x3c, 0xfc, 0xc0, 0xf3, 0xf0, 0x3c, 0xfc, 0xf0, 0xcf, 0xfc, 0xcc, 0xff, 0xfc, 0x0d, 0x34, 0xcc, 0xcf, 0x33, 0xf0, 0x33, 0x0c, 0x3f, 0xc3, 0x3f, 0xcc, 0x30, 0xfc, 0xcf, 0x3c, 0xf0, 0x0c, 0xcf, 0xd0, 0x03, 0x3f, 0x33, 0xff, 0xff, 0xc3, 0xf3, }; /* state that points to 0x100 for disambiguation with 0x0 */ #define HUFTABLE_0x100_PREV 118 libwebsockets-3.2.1/lib/roles/h2/minihuf.c000066400000000000000000000271521357643561300204070ustar00rootroot00000000000000/* * minilex.c * * High efficiency lexical state parser * * Copyright (C)2011-2014 Andy Green * * Licensed under LGPL2 * * Usage: gcc minihuf.c -o minihuf && ./minihuf > huftable.h * * Run it twice to test parsing on the generated table on stderr */ #include #include #include #define LWS_ARRAY_SIZE(n) (sizeof(n) / sizeof(n[0])) struct huf { unsigned int code; unsigned char len; }; static struct huf huf_literal[] = { /* 0x00 */ { 0x1ff8, 13 }, /* 0x01 */ { 0x7fffd8, 23 }, /* 0x02 */ { 0xfffffe2, 28 }, /* 0x03 */ { 0xfffffe3, 28 }, /* 0x04 */ { 0xfffffe4, 28 }, /* 0x05 */ { 0xfffffe5, 28 }, /* 0x06 */ { 0xfffffe6, 28 }, /* 0x07 */ { 0xfffffe7, 28 }, /* 0x08 */ { 0xfffffe8, 28 }, /* 0x09 */ { 0xffffea, 24 }, /* 0x0a */ { 0x3ffffffc, 30 }, /* 0x0b */ { 0xfffffe9, 28 }, /* 0x0c */ { 0xfffffea, 28 }, /* 0x0d */ { 0x3ffffffd, 30 }, /* 0x0e */ { 0xfffffeb, 28 }, /* 0x0f */ { 0xfffffec, 28 }, /* 0x10 */ { 0xfffffed, 28 }, /* 0x11 */ { 0xfffffee, 28 }, /* 0x12 */ { 0xfffffef, 28 }, /* 0x13 */ { 0xffffff0, 28 }, /* 0x14 */ { 0xffffff1, 28 }, /* 0x15 */ { 0xffffff2, 28 }, /* 0x16 */ { 0x3ffffffe, 30 }, /* 0x17 */ { 0xffffff3, 28 }, /* 0x18 */ { 0xffffff4, 28 }, /* 0x19 */ { 0xffffff5, 28 }, /* 0x1a */ { 0xffffff6, 28 }, /* 0x1b */ { 0xffffff7, 28 }, /* 0x1c */ { 0xffffff8, 28 }, /* 0x1d */ { 0xffffff9, 28 }, /* 0x1e */ { 0xffffffa, 28 }, /* 0x1f */ { 0xffffffb, 28 }, /* 0x20 */ { 0x14, 6 }, /* 0x21 */ { 0x3f8, 10 }, /* 0x22 */ { 0x3f9, 10 }, /* 0x23 */ { 0xffa, 12 }, /* 0x24 */ { 0x1ff9, 13 }, /* 0x25 */ { 0x15, 6 }, /* 0x26 */ { 0xf8, 8 }, /* 0x27 */ { 0x7fa, 11 }, /* 0x28 */ { 0x3fa, 10 }, /* 0x29 */ { 0x3fb, 10 }, /* 0x2a */ { 0xf9, 8 }, /* 0x2b */ { 0x7fb, 11 }, /* 0x2c */ { 0xfa, 8 }, /* 0x2d */ { 0x16, 6 }, /* 0x2e */ { 0x17, 6 }, /* 0x2f */ { 0x18, 6 }, /* 0x30 */ { 0x0, 5 }, /* 0x31 */ { 0x1, 5 }, /* 0x32 */ { 0x2, 5 }, /* 0x33 */ { 0x19, 6 }, /* 0x34 */ { 0x1a, 6 }, /* 0x35 */ { 0x1b, 6 }, /* 0x36 */ { 0x1c, 6 }, /* 0x37 */ { 0x1d, 6 }, /* 0x38 */ { 0x1e, 6 }, /* 0x39 */ { 0x1f, 6 }, /* 0x3a */ { 0x5c, 7 }, /* 0x3b */ { 0xfb, 8 }, /* 0x3c */ { 0x7ffc, 15 }, /* 0x3d */ { 0x20, 6 }, /* 0x3e */ { 0xffb, 12 }, /* 0x3f */ { 0x3fc, 10 }, /* 0x40 */ { 0x1ffa, 13 }, /* 0x41 */ { 0x21, 6 }, /* 0x42 */ { 0x5d, 7 }, /* 0x43 */ { 0x5e, 7 }, /* 0x44 */ { 0x5f, 7 }, /* 0x45 */ { 0x60, 7 }, /* 0x46 */ { 0x61, 7 }, /* 0x47 */ { 0x62, 7 }, /* 0x48 */ { 0x63, 7 }, /* 0x49 */ { 0x64, 7 }, /* 0x4a */ { 0x65, 7 }, /* 0x4b */ { 0x66, 7 }, /* 0x4c */ { 0x67, 7 }, /* 0x4d */ { 0x68, 7 }, /* 0x4e */ { 0x69, 7 }, /* 0x4f */ { 0x6a, 7 }, /* 0x50 */ { 0x6b, 7 }, /* 0x51 */ { 0x6c, 7 }, /* 0x52 */ { 0x6d, 7 }, /* 0x53 */ { 0x6e, 7 }, /* 0x54 */ { 0x6f, 7 }, /* 0x55 */ { 0x70, 7 }, /* 0x56 */ { 0x71, 7 }, /* 0x57 */ { 0x72, 7 }, /* 0x58 */ { 0xfc, 8 }, /* 0x59 */ { 0x73, 7 }, /* 0x5a */ { 0xfd, 8 }, /* 0x5b */ { 0x1ffb, 13 }, /* 0x5c */ { 0x7fff0, 19 }, /* 0x5d */ { 0x1ffc, 13 }, /* 0x5e */ { 0x3ffc, 14 }, /* 0x5f */ { 0x22, 6 }, /* 0x60 */ { 0x7ffd, 15 }, /* 0x61 */ { 0x3, 5 }, /* 0x62 */ { 0x23, 6 }, /* 0x63 */ { 0x4, 5 }, /* 0x64 */ { 0x24, 6 }, /* 0x65 */ { 0x5, 5 }, /* 0x66 */ { 0x25, 6 }, /* 0x67 */ { 0x26, 6 }, /* 0x68 */ { 0x27, 6 }, /* 0x69 */ { 0x6, 5 }, /* 0x6a */ { 0x74, 7 }, /* 0x6b */ { 0x75, 7 }, /* 0x6c */ { 0x28, 6 }, /* 0x6d */ { 0x29, 6 }, /* 0x6e */ { 0x2a, 6 }, /* 0x6f */ { 0x7, 5 }, /* 0x70 */ { 0x2b, 6 }, /* 0x71 */ { 0x76, 7 }, /* 0x72 */ { 0x2c, 6 }, /* 0x73 */ { 0x8, 5 }, /* 0x74 */ { 0x9, 5 }, /* 0x75 */ { 0x2d, 6 }, /* 0x76 */ { 0x77, 7 }, /* 0x77 */ { 0x78, 7 }, /* 0x78 */ { 0x79, 7 }, /* 0x79 */ { 0x7a, 7 }, /* 0x7a */ { 0x7b, 7 }, /* 0x7b */ { 0x7ffe, 15 }, /* 0x7c */ { 0x7fc, 11 }, /* 0x7d */ { 0x3ffd, 14 }, /* 0x7e */ { 0x1ffd, 13 }, /* 0x7f */ { 0xffffffc, 28 }, /* 0x80 */ { 0xfffe6, 20 }, /* 0x81 */ { 0x3fffd2, 22 }, /* 0x82 */ { 0xfffe7, 20 }, /* 0x83 */ { 0xfffe8, 20 }, /* 0x84 */ { 0x3fffd3, 22 }, /* 0x85 */ { 0x3fffd4, 22 }, /* 0x86 */ { 0x3fffd5, 22 }, /* 0x87 */ { 0x7fffd9, 23 }, /* 0x88 */ { 0x3fffd6, 22 }, /* 0x89 */ { 0x7fffda, 23 }, /* 0x8a */ { 0x7fffdb, 23 }, /* 0x8b */ { 0x7fffdc, 23 }, /* 0x8c */ { 0x7fffdd, 23 }, /* 0x8d */ { 0x7fffde, 23 }, /* 0x8e */ { 0xffffeb, 24 }, /* 0x8f */ { 0x7fffdf, 23 }, /* 0x90 */ { 0xffffec, 24 }, /* 0x91 */ { 0xffffed, 24 }, /* 0x92 */ { 0x3fffd7, 22 }, /* 0x93 */ { 0x7fffe0, 23 }, /* 0x94 */ { 0xffffee, 24 }, /* 0x95 */ { 0x7fffe1, 23 }, /* 0x96 */ { 0x7fffe2, 23 }, /* 0x97 */ { 0x7fffe3, 23 }, /* 0x98 */ { 0x7fffe4, 23 }, /* 0x99 */ { 0x1fffdc, 21 }, /* 0x9a */ { 0x3fffd8, 22 }, /* 0x9b */ { 0x7fffe5, 23 }, /* 0x9c */ { 0x3fffd9, 22 }, /* 0x9d */ { 0x7fffe6, 23 }, /* 0x9e */ { 0x7fffe7, 23 }, /* 0x9f */ { 0xffffef, 24 }, /* 0xa0 */ { 0x3fffda, 22 }, /* 0xa1 */ { 0x1fffdd, 21 }, /* 0xa2 */ { 0xfffe9, 20 }, /* 0xa3 */ { 0x3fffdb, 22 }, /* 0xa4 */ { 0x3fffdc, 22 }, /* 0xa5 */ { 0x7fffe8, 23 }, /* 0xa6 */ { 0x7fffe9, 23 }, /* 0xa7 */ { 0x1fffde, 21 }, /* 0xa8 */ { 0x7fffea, 23 }, /* 0xa9 */ { 0x3fffdd, 22 }, /* 0xaa */ { 0x3fffde, 22 }, /* 0xab */ { 0xfffff0, 24 }, /* 0xac */ { 0x1fffdf, 21 }, /* 0xad */ { 0x3fffdf, 22 }, /* 0xae */ { 0x7fffeb, 23 }, /* 0xaf */ { 0x7fffec, 23 }, /* 0xb0 */ { 0x1fffe0, 21 }, /* 0xb1 */ { 0x1fffe1, 21 }, /* 0xb2 */ { 0x3fffe0, 22 }, /* 0xb3 */ { 0x1fffe2, 21 }, /* 0xb4 */ { 0x7fffed, 23 }, /* 0xb5 */ { 0x3fffe1, 22 }, /* 0xb6 */ { 0x7fffee, 23 }, /* 0xb7 */ { 0x7fffef, 23 }, /* 0xb8 */ { 0xfffea, 20 }, /* 0xb9 */ { 0x3fffe2, 22 }, /* 0xba */ { 0x3fffe3, 22 }, /* 0xbb */ { 0x3fffe4, 22 }, /* 0xbc */ { 0x7ffff0, 23 }, /* 0xbd */ { 0x3fffe5, 22 }, /* 0xbe */ { 0x3fffe6, 22 }, /* 0xbf */ { 0x7ffff1, 23 }, /* 0xc0 */ { 0x3ffffe0, 26 }, /* 0xc1 */ { 0x3ffffe1, 26 }, /* 0xc2 */ { 0xfffeb, 20 }, /* 0xc3 */ { 0x7fff1, 19 }, /* 0xc4 */ { 0x3fffe7, 22 }, /* 0xc5 */ { 0x7ffff2, 23 }, /* 0xc6 */ { 0x3fffe8, 22 }, /* 0xc7 */ { 0x1ffffec, 25 }, /* 0xc8 */ { 0x3ffffe2, 26 }, /* 0xc9 */ { 0x3ffffe3, 26 }, /* 0xca */ { 0x3ffffe4, 26 }, /* 0xcb */ { 0x7ffffde, 27 }, /* 0xcc */ { 0x7ffffdf, 27 }, /* 0xcd */ { 0x3ffffe5, 26 }, /* 0xce */ { 0xfffff1, 24 }, /* 0xcf */ { 0x1ffffed, 25 }, /* 0xd0 */ { 0x7fff2, 19 }, /* 0xd1 */ { 0x1fffe3, 21 }, /* 0xd2 */ { 0x3ffffe6, 26 }, /* 0xd3 */ { 0x7ffffe0, 27 }, /* 0xd4 */ { 0x7ffffe1, 27 }, /* 0xd5 */ { 0x3ffffe7, 26 }, /* 0xd6 */ { 0x7ffffe2, 27 }, /* 0xd7 */ { 0xfffff2, 24 }, /* 0xd8 */ { 0x1fffe4, 21 }, /* 0xd9 */ { 0x1fffe5, 21 }, /* 0xda */ { 0x3ffffe8, 26 }, /* 0xdb */ { 0x3ffffe9, 26 }, /* 0xdc */ { 0xffffffd, 28 }, /* 0xdd */ { 0x7ffffe3, 27 }, /* 0xde */ { 0x7ffffe4, 27 }, /* 0xdf */ { 0x7ffffe5, 27 }, /* 0xe0 */ { 0xfffec, 20 }, /* 0xe1 */ { 0xfffff3, 24 }, /* 0xe2 */ { 0xfffed, 20 }, /* 0xe3 */ { 0x1fffe6, 21 }, /* 0xe4 */ { 0x3fffe9, 22 }, /* 0xe5 */ { 0x1fffe7, 21 }, /* 0xe6 */ { 0x1fffe8, 21 }, /* 0xe7 */ { 0x7ffff3, 23 }, /* 0xe8 */ { 0x3fffea, 22 }, /* 0xe9 */ { 0x3fffeb, 22 }, /* 0xea */ { 0x1ffffee, 25 }, /* 0xeb */ { 0x1ffffef, 25 }, /* 0xec */ { 0xfffff4, 24 }, /* 0xed */ { 0xfffff5, 24 }, /* 0xee */ { 0x3ffffea, 26 }, /* 0xef */ { 0x7ffff4, 23 }, /* 0xf0 */ { 0x3ffffeb, 26 }, /* 0xf1 */ { 0x7ffffe6, 27 }, /* 0xf2 */ { 0x3ffffec, 26 }, /* 0xf3 */ { 0x3ffffed, 26 }, /* 0xf4 */ { 0x7ffffe7, 27 }, /* 0xf5 */ { 0x7ffffe8, 27 }, /* 0xf6 */ { 0x7ffffe9, 27 }, /* 0xf7 */ { 0x7ffffea, 27 }, /* 0xf8 */ { 0x7ffffeb, 27 }, /* 0xf9 */ { 0xffffffe, 28 }, /* 0xfa */ { 0x7ffffec, 27 }, /* 0xfb */ { 0x7ffffed, 27 }, /* 0xfc */ { 0x7ffffee, 27 }, /* 0xfd */ { 0x7ffffef, 27 }, /* 0xfe */ { 0x7fffff0, 27 }, /* 0xff */ { 0x3ffffee, 26 }, /* 0x100 */ { 0x3fffffff, 30 }, }; int code_bit(int idx, int bit) { if (bit < huf_literal[idx].len) return !!(huf_literal[idx].code & (1 << (huf_literal[idx].len - 1 - bit))); return -1; } #include "huftable.h" #define PARALLEL 2 struct state { int terminal; int state[PARALLEL]; int bytepos; int real_pos; }; struct state state[2000]; unsigned char terms[2000]; int next = 1; int lextable_decode(int pos, char c) { int q = pos + !!c; if (lextable_terms[q >> 3] & (1 << (q & 7))) /* terminal */ return lextable[q] | 0x8000; return pos + (lextable[q] << 1); } int main(void) { int n = 0; int m = 0; int prev; char c; int walk; int saw; int y; int j; int q; int pos = 0; int biggest = 0; int fails = 0; m = 0; while (m < LWS_ARRAY_SIZE(state)) { for (j = 0; j < PARALLEL; j++) { state[m].state[j] = 0xffff; state[m].terminal = 0; } m++; } while (n < LWS_ARRAY_SIZE(huf_literal)) { m = 0; walk = 0; prev = 0; while (m < huf_literal[n].len) { saw = 0; if (state[walk].state[code_bit(n, m)] != 0xffff) { /* exists -- go forward */ walk = state[walk].state[code_bit(n, m)]; goto again; } /* something we didn't see before */ state[walk].state[code_bit(n, m)] = next; walk = next++; again: m++; } state[walk].terminal = n++; state[walk].state[0] = 0; /* terminal marker */ } walk = 0; for (n = 0; n < next; n++) { state[n].bytepos = walk; walk += (2 * 2); } /* compute everyone's position first */ pos = 0; walk = 0; for (n = 0; n < next; n++) { state[n].real_pos = pos; if (state[n].state[0]) /* nonterminal */ pos += 2; walk ++; } fprintf(stdout, "static unsigned char lextable[] = {\n"); #define TERMINAL_MASK 0x8000 walk = 0; pos = 0; q = 0; for (n = 0; n < next; n++) { q = pos; for (m = 0; m < 2; m++) { saw = state[n].state[m]; if (saw == 0) { // c is a terminal then m = 2; continue; } if (!m) fprintf(stdout, "/* pos %04x: %3d */ ", state[n].real_pos, n); else fprintf(stdout, " "); if (saw == 0xffff) { fprintf(stdout, " 0xff, 0xff, /* 0 = fail */\n "); pos ++; /* fail */ fails++; continue; } if (state[saw].state[0] == 0) { /* points to terminal */ fprintf(stdout, " /* terminal %d */ 0x%02X,\n", state[saw].terminal, state[saw].terminal & 0xff); terms[(state[n].real_pos + m) >> 3] |= 1 << ((state[n].real_pos + m) & 7); pos++; walk++; continue; } j = (state[saw].real_pos - q) >> 1; if (j > biggest) biggest = j; if (j > 0xffff) { fprintf(stderr, "Jump > 64K bytes ahead (%d to %d)\n", state[n].real_pos, state[saw].real_pos); return 1; } fprintf(stdout, " /* %d */ 0x%02X " "/* (to 0x%04X state %3d) */,\n", m, j & 0xff, state[saw].real_pos, saw); pos++; walk++; } } fprintf(stdout, "/* total size %d bytes, biggest jump %d/256, fails=%d */\n};\n" "\n static unsigned char lextable_terms[] = {\n", pos, biggest, fails); for (n = 0; n < (walk + 7) / 8; n++) { if (!(n & 7)) fprintf(stdout, "\n\t"); fprintf(stdout, "0x%02x, ", terms[n]); } fprintf(stdout, "\n};\n"); /* * Try to parse every legal input string */ for (n = 0; n < LWS_ARRAY_SIZE(huf_literal); n++) { walk = 0; m = 0; y = -1; fprintf(stderr, " trying %d\n", n); while (m < huf_literal[n].len) { prev = walk; walk = lextable_decode(walk, code_bit(n, m)); if (walk == 0xffff) { fprintf(stderr, "failed\n"); return 3; } if (walk & 0x8000) { y = walk & 0x7fff; if (y == 0 && m == 29) { y |= 0x100; fprintf(stdout, "\n/* state that points to " "0x100 for disambiguation with " "0x0 */\n" "#define HUFTABLE_0x100_PREV " "%d\n", prev); } break; } m++; } if (y != n) { fprintf(stderr, "decode failed %d got %d (0x%x)\n", n, y, y); return 4; } } fprintf(stderr, "All decode OK\n"); return 0; } libwebsockets-3.2.1/lib/roles/h2/ops-h2.c000066400000000000000000001021111357643561300200450ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include /* * These are the standardized defaults. * Override what actually goes in the vhost settings in platform or user code. * Leave these alone because they are used to determine "what is different * from the protocol defaults". */ const struct http2_settings lws_h2_defaults = { { 1, /* H2SET_HEADER_TABLE_SIZE */ 4096, /* *** This controls how many entries in the dynamic table *** * Allows the sender to inform the remote endpoint of the maximum * size of the header compression table used to decode header * blocks, in octets. The encoder can select any size equal to or * less than this value by using signaling specific to the header * compression format inside a header block (see [COMPRESSION]). * The initial value is 4,096 octets. */ /* H2SET_ENABLE_PUSH */ 1, /* H2SET_MAX_CONCURRENT_STREAMS */ 0x7fffffff, /* H2SET_INITIAL_WINDOW_SIZE */ 65535, /* H2SET_MAX_FRAME_SIZE */ 16384, /* H2SET_MAX_HEADER_LIST_SIZE */ 0x7fffffff, /*< This advisory setting informs a peer of the maximum size of * header list that the sender is prepared to accept, in octets. * The value is based on the uncompressed size of header fields, * including the length of the name and value in octets plus an * overhead of 32 octets for each header field. */ /* H2SET_RESERVED7 */ 0, /* H2SET_ENABLE_CONNECT_PROTOCOL */ 0, }}; /* these are the "lws defaults"... they can be overridden in plat */ const struct http2_settings lws_h2_stock_settings = { { 1, /* H2SET_HEADER_TABLE_SIZE */ 65536, /* ffox */ /* *** This controls how many entries in the dynamic table *** * Allows the sender to inform the remote endpoint of the maximum * size of the header compression table used to decode header * blocks, in octets. The encoder can select any size equal to or * less than this value by using signaling specific to the header * compression format inside a header block (see [COMPRESSION]). * The initial value is 4,096 octets. * * Can't pass h2spec with less than 4096 here... */ /* H2SET_ENABLE_PUSH */ 1, /* H2SET_MAX_CONCURRENT_STREAMS */ 24, /* H2SET_INITIAL_WINDOW_SIZE */ 65535, /* H2SET_MAX_FRAME_SIZE */ 16384, /* H2SET_MAX_HEADER_LIST_SIZE */ 4096, /*< This advisory setting informs a peer of the maximum size of * header list that the sender is prepared to accept, in octets. * The value is based on the uncompressed size of header fields, * including the length of the name and value in octets plus an * overhead of 32 octets for each header field. */ /* H2SET_RESERVED7 */ 0, /* H2SET_ENABLE_CONNECT_PROTOCOL */ 1, }}; /* * The wsi at this level is the network wsi */ static int rops_handle_POLLIN_h2(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { struct lws_tokens ebuf; unsigned int pending = 0; char buffered = 0; struct lws *wsi1; int n, m; #ifdef LWS_WITH_CGI if (wsi->http.cgi && (pollfd->revents & LWS_POLLOUT)) { if (lws_handle_POLLOUT_event(wsi, pollfd)) return LWS_HPI_RET_PLEASE_CLOSE_ME; return LWS_HPI_RET_HANDLED; } #endif lwsl_info("%s: wsistate 0x%x, pollout %d\n", __func__, wsi->wsistate, pollfd->revents & LWS_POLLOUT); /* * something went wrong with parsing the handshake, and * we ended up back in the event loop without completing it */ if (lwsi_state(wsi) == LRS_PRE_WS_SERVING_ACCEPT) { wsi->socket_is_permanently_unusable = 1; return LWS_HPI_RET_PLEASE_CLOSE_ME; } if (lwsi_state(wsi) == LRS_WAITING_CONNECT) { #if !defined(LWS_NO_CLIENT) if ((pollfd->revents & LWS_POLLOUT) && lws_handle_POLLOUT_event(wsi, pollfd)) { lwsl_debug("POLLOUT event closed it\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } n = lws_client_socket_service(wsi, pollfd, NULL); if (n) return LWS_HPI_RET_WSI_ALREADY_DIED; #endif return LWS_HPI_RET_HANDLED; } /* 1: something requested a callback when it was OK to write */ if ((pollfd->revents & LWS_POLLOUT) && lwsi_state_can_handle_POLLOUT(wsi) && lws_handle_POLLOUT_event(wsi, pollfd)) { if (lwsi_state(wsi) == LRS_RETURNED_CLOSE) lwsi_set_state(wsi, LRS_FLUSHING_BEFORE_CLOSE); /* the write failed... it's had it */ wsi->socket_is_permanently_unusable = 1; return LWS_HPI_RET_PLEASE_CLOSE_ME; } if (lwsi_state(wsi) == LRS_RETURNED_CLOSE || lwsi_state(wsi) == LRS_WAITING_TO_SEND_CLOSE || lwsi_state(wsi) == LRS_AWAITING_CLOSE_ACK) { /* * we stopped caring about anything except control * packets. Force flow control off, defeat tx * draining. */ lws_rx_flow_control(wsi, 1); #if defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws) wsi->ws->tx_draining_ext = 0; #endif } if (wsi->http2_substream || wsi->upgraded_to_http2) { wsi1 = lws_get_network_wsi(wsi); if (wsi1 && lws_has_buffered_out(wsi1)) /* * We cannot deal with any kind of new RX * because we are dealing with a partial send * (new RX may trigger new http_action() that * expect to be able to send) */ return LWS_HPI_RET_HANDLED; } read: /* 3: network wsi buflist needs to be drained */ // lws_buflist_describe(&wsi->buflist, wsi); ebuf.len = (int)lws_buflist_next_segment_len(&wsi->buflist, &ebuf.token); if (ebuf.len) { lwsl_info("draining buflist (len %d)\n", ebuf.len); buffered = 1; goto drain; } if (!lws_ssl_pending(wsi) && !(pollfd->revents & pollfd->events & LWS_POLLIN)) return LWS_HPI_RET_HANDLED; if (!(lwsi_role_client(wsi) && (lwsi_state(wsi) != LRS_ESTABLISHED && lwsi_state(wsi) != LRS_H2_WAITING_TO_SEND_HEADERS))) { ebuf.token = pt->serv_buf; ebuf.len = lws_ssl_capable_read(wsi, ebuf.token, wsi->context->pt_serv_buf_size); switch (ebuf.len) { case 0: lwsl_info("%s: zero length read\n", __func__); return LWS_HPI_RET_PLEASE_CLOSE_ME; case LWS_SSL_CAPABLE_MORE_SERVICE: lwsl_info("SSL Capable more service\n"); return LWS_HPI_RET_HANDLED; case LWS_SSL_CAPABLE_ERROR: lwsl_info("%s: LWS_SSL_CAPABLE_ERROR\n", __func__); return LWS_HPI_RET_PLEASE_CLOSE_ME; } // lwsl_notice("%s: Actual RX %d\n", __func__, ebuf.len); // if (ebuf.len > 0) // lwsl_hexdump_notice(ebuf.token, ebuf.len); } if (ebuf.len < 0) return LWS_HPI_RET_PLEASE_CLOSE_ME; drain: #ifndef LWS_NO_CLIENT if (lwsi_role_http(wsi) && lwsi_role_client(wsi) && wsi->hdr_parsing_completed && !wsi->told_user_closed) { /* * In SSL mode we get POLLIN notification about * encrypted data in. * * But that is not necessarily related to decrypted * data out becoming available; in may need to perform * other in or out before that happens. * * simply mark ourselves as having readable data * and turn off our POLLIN */ wsi->client_rx_avail = 1; if (lws_change_pollfd(wsi, LWS_POLLIN, 0)) return LWS_HPI_RET_PLEASE_CLOSE_ME; /* let user code know, he'll usually ask for writeable * callback and drain / re-enable it there */ if (user_callback_handle_rxflow( wsi->protocol->callback, wsi, LWS_CALLBACK_RECEIVE_CLIENT_HTTP, wsi->user_space, NULL, 0)) { lwsl_info("RECEIVE_CLIENT_HTTP closed it\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } return LWS_HPI_RET_HANDLED; } #endif /* service incoming data */ if (ebuf.len) { n = 0; if (lwsi_role_h2(wsi) && lwsi_state(wsi) != LRS_BODY && lwsi_state(wsi) != LRS_DISCARD_BODY) n = lws_read_h2(wsi, ebuf.token, ebuf.len); else n = lws_read_h1(wsi, ebuf.token, ebuf.len); if (n < 0) { /* we closed wsi */ n = 0; return LWS_HPI_RET_WSI_ALREADY_DIED; } if (n && buffered) { m = lws_buflist_use_segment(&wsi->buflist, n); lwsl_info("%s: draining rxflow: used %d, next %d\n", __func__, n, m); if (!m) { lwsl_notice("%s: removed %p from dll_buflist\n", __func__, wsi); lws_dll2_remove(&wsi->dll_buflist); } } else if (n && n != ebuf.len) { m = lws_buflist_append_segment(&wsi->buflist, ebuf.token + n, ebuf.len - n); if (m < 0) return LWS_HPI_RET_PLEASE_CLOSE_ME; if (m) { lwsl_debug("%s: added %p to rxflow list\n", __func__, wsi); lws_dll2_add_head(&wsi->dll_buflist, &pt->dll_buflist_owner); } } } // lws_buflist_describe(&wsi->buflist, wsi); #if 0 /* * This seems to be too aggressive... we don't want the ah stuck * there but eg, WINDOW_UPDATE may come and detach it if we leave * it like that... it will get detached at stream close */ if (wsi->http.ah #if !defined(LWS_NO_CLIENT) && !wsi->client_h2_alpn #endif ) { lwsl_err("xxx\n"); lws_header_table_detach(wsi, 0); } #endif pending = lws_ssl_pending(wsi); if (pending) { // lwsl_info("going around\n"); goto read; } return LWS_HPI_RET_HANDLED; } int rops_handle_POLLOUT_h2(struct lws *wsi) { // lwsl_notice("%s\n", __func__); if (lwsi_state(wsi) == LRS_ISSUE_HTTP_BODY) return LWS_HP_RET_USER_SERVICE; /* * Priority 2: H2 protocol packets */ if ((wsi->upgraded_to_http2 #if !defined(LWS_NO_CLIENT) || wsi->client_h2_alpn #endif ) && wsi->h2.h2n->pps) { lwsl_info("servicing pps\n"); /* * this is called on the network connection, but may close * substreams... that may affect callers */ if (lws_h2_do_pps_send(wsi)) { wsi->socket_is_permanently_unusable = 1; return LWS_HP_RET_BAIL_DIE; } if (wsi->h2.h2n->pps) return LWS_HP_RET_BAIL_OK; /* we can resume whatever we were doing */ lws_rx_flow_control(wsi, LWS_RXFLOW_REASON_APPLIES_ENABLE | LWS_RXFLOW_REASON_H2_PPS_PENDING); return LWS_HP_RET_BAIL_OK; /* leave POLLOUT active */ } /* Priority 4: if we are closing, not allowed to send more data frags * which means user callback or tx ext flush banned now */ if (lwsi_state(wsi) == LRS_RETURNED_CLOSE) return LWS_HP_RET_USER_SERVICE; return LWS_HP_RET_USER_SERVICE; } static int rops_write_role_protocol_h2(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol *wp) { unsigned char flags = 0, base = (*wp) & 0x1f; size_t olen = len; int n; #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) unsigned char mtubuf[4096 + LWS_PRE]; #endif /* if not in a state to send stuff, then just send nothing */ if (!lwsi_role_ws(wsi) && base != LWS_WRITE_HTTP && base != LWS_WRITE_HTTP_FINAL && base != LWS_WRITE_HTTP_HEADERS_CONTINUATION && base != LWS_WRITE_HTTP_HEADERS && ((lwsi_state(wsi) != LRS_RETURNED_CLOSE && lwsi_state(wsi) != LRS_WAITING_TO_SEND_CLOSE && lwsi_state(wsi) != LRS_AWAITING_CLOSE_ACK) #if defined(LWS_ROLE_WS) || base != LWS_WRITE_CLOSE #endif )) { //assert(0); lwsl_notice("binning wsistate 0x%x %d\n", wsi->wsistate, *wp); return 0; } /* compression transform... */ #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (wsi->http.lcs) { unsigned char *out = mtubuf + LWS_PRE; size_t o = sizeof(mtubuf) - LWS_PRE; n = lws_http_compression_transform(wsi, buf, len, wp, &out, &o); if (n) return n; lwsl_info("%s: %p: transformed %d bytes to %d " "(wp 0x%x, more %d)\n", __func__, wsi, (int)len, (int)o, (int)*wp, wsi->http.comp_ctx.may_have_more); buf = out; len = o; base = (*wp) & 0x1f; if (!len) return olen; } #endif /* * ws-over-h2 also ends up here after the ws framing applied */ n = LWS_H2_FRAME_TYPE_DATA; if (base == LWS_WRITE_HTTP_HEADERS) { n = LWS_H2_FRAME_TYPE_HEADERS; if (!((*wp) & LWS_WRITE_NO_FIN)) flags = LWS_H2_FLAG_END_HEADERS; if (wsi->h2.send_END_STREAM || ((*wp) & LWS_WRITE_H2_STREAM_END)) { flags |= LWS_H2_FLAG_END_STREAM; wsi->h2.send_END_STREAM = 1; } } if (base == LWS_WRITE_HTTP_HEADERS_CONTINUATION) { n = LWS_H2_FRAME_TYPE_CONTINUATION; if (!((*wp) & LWS_WRITE_NO_FIN)) flags = LWS_H2_FLAG_END_HEADERS; if (wsi->h2.send_END_STREAM || ((*wp) & LWS_WRITE_H2_STREAM_END)) { flags |= LWS_H2_FLAG_END_STREAM; wsi->h2.send_END_STREAM = 1; } } if ((base == LWS_WRITE_HTTP || base == LWS_WRITE_HTTP_FINAL) && wsi->http.tx_content_length) { wsi->http.tx_content_remain -= len; lwsl_info("%s: wsi %p: tx_content_rem = %llu\n", __func__, wsi, (unsigned long long)wsi->http.tx_content_remain); if (!wsi->http.tx_content_remain) { lwsl_info("%s: selecting final write mode\n", __func__); base = *wp = LWS_WRITE_HTTP_FINAL; } } if (base == LWS_WRITE_HTTP_FINAL || ((*wp) & LWS_WRITE_H2_STREAM_END)) { lwsl_info("%s: %p: setting END_STREAM\n", __func__, wsi); flags |= LWS_H2_FLAG_END_STREAM; wsi->h2.send_END_STREAM = 1; } n = lws_h2_frame_write(wsi, n, flags, wsi->h2.my_sid, (int)len, buf); if (n < 0) return n; /* hide it may have been compressed... */ return (int)olen; } static int rops_check_upgrades_h2(struct lws *wsi) { #if defined(LWS_ROLE_WS) struct lws *nwsi; char *p; /* * with H2 there's also a way to upgrade a stream to something * else... :method is CONNECT and :protocol says the name of * the new protocol we want to carry. We have to have sent a * SETTINGS saying that we support it though. */ p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD); if (!wsi->vhost->h2.set.s[H2SET_ENABLE_CONNECT_PROTOCOL] || !wsi->http2_substream || !p || strcmp(p, "CONNECT")) return LWS_UPG_RET_CONTINUE; p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_COLON_PROTOCOL); if (!p || strcmp(p, "websocket")) return LWS_UPG_RET_CONTINUE; nwsi = lws_get_network_wsi(wsi); wsi->vhost->conn_stats.ws_upg++; lwsl_info("Upgrade h2 to ws\n"); wsi->h2_stream_carries_ws = 1; nwsi->immortal_substream_count++; if (lws_process_ws_upgrade(wsi)) return LWS_UPG_RET_BAIL; if (nwsi->immortal_substream_count == 1) lws_set_timeout(nwsi, NO_PENDING_TIMEOUT, 0); lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); lwsl_info("Upgraded h2 to ws OK\n"); return LWS_UPG_RET_DONE; #else return LWS_UPG_RET_CONTINUE; #endif } static int rops_init_vhost_h2(struct lws_vhost *vh, const struct lws_context_creation_info *info) { vh->h2.set = vh->context->set; if (info->http2_settings[0]) { int n; for (n = 1; n < LWS_H2_SETTINGS_LEN; n++) vh->h2.set.s[n] = info->http2_settings[n]; } return 0; } static int rops_init_context_h2(struct lws_context *context, const struct lws_context_creation_info *info) { int n; context->set = lws_h2_stock_settings; /* * We only want to do this once... we will do it if we are built * otherwise h1 ops will do it (or nobody if no http at all) */ for (n = 0; n < context->count_threads; n++) { struct lws_context_per_thread *pt = &context->pt[n]; pt->sul_ah_lifecheck.cb = lws_sul_http_ah_lifecheck; __lws_sul_insert(&pt->pt_sul_owner, &pt->sul_ah_lifecheck, 30 * LWS_US_PER_SEC); } return 0; } static lws_fileofs_t rops_tx_credit_h2(struct lws *wsi) { return lws_h2_tx_cr_get(wsi); } static int rops_destroy_role_h2(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; struct allocated_headers *ah; /* we may not have an ah, but may be on the waiting list... */ lwsl_info("%s: ah det due to close\n", __func__); __lws_header_table_detach(wsi, 0); ah = pt->http.ah_list; while (ah) { if (ah->in_use && ah->wsi == wsi) { lwsl_err("%s: ah leak: wsi %p\n", __func__, wsi); ah->in_use = 0; ah->wsi = NULL; pt->http.ah_count_in_use--; break; } ah = ah->next; } #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) lws_http_compression_destroy(wsi); #endif if (wsi->upgraded_to_http2 || wsi->http2_substream) { lws_hpack_destroy_dynamic_header(wsi); if (wsi->h2.h2n) lws_free_set_NULL(wsi->h2.h2n); } return 0; } static int rops_close_kill_connection_h2(struct lws *wsi, enum lws_close_status reason) { struct lws *wsi2; #if defined(LWS_WITH_HTTP_PROXY) if (wsi->http.proxy_clientside) { struct lws *wsi_eff = lws_client_wsi_effective(wsi); wsi->http.proxy_clientside = 0; if (user_callback_handle_rxflow(wsi_eff->protocol->callback, wsi_eff, LWS_CALLBACK_COMPLETED_CLIENT_HTTP, wsi_eff->user_space, NULL, 0)) wsi->http.proxy_clientside = 0; } #endif if (wsi->http2_substream && wsi->h2_stream_carries_ws) lws_h2_rst_stream(wsi, 0, "none"); if (wsi->h2.parent_wsi && lwsl_visible(LLL_INFO)) { lwsl_info(" wsi: %p, his parent %p: siblings:\n", wsi, wsi->h2.parent_wsi); lws_start_foreach_llp(struct lws **, w, wsi->h2.parent_wsi->h2.child_list) { lwsl_info(" \\---- child %s %p\n", (*w)->role_ops ? (*w)->role_ops->name : "?", *w); } lws_end_foreach_llp(w, h2.sibling_list); } if (wsi->upgraded_to_http2 || wsi->http2_substream #if !defined(LWS_NO_CLIENT) || wsi->client_h2_substream #endif ) { lwsl_info("closing %p: parent %p\n", wsi, wsi->h2.parent_wsi); if (wsi->h2.child_list && lwsl_visible(LLL_INFO)) { lwsl_info(" parent %p: closing children: list:\n", wsi); lws_start_foreach_llp(struct lws **, w, wsi->h2.child_list) { lwsl_info(" \\---- child %s %p\n", (*w)->role_ops ? (*w)->role_ops->name : "?", *w); } lws_end_foreach_llp(w, h2.sibling_list); } if (wsi->h2.child_list) { /* trigger closing of all of our http2 children first */ lws_start_foreach_llp(struct lws **, w, wsi->h2.child_list) { lwsl_info(" closing child %p\n", *w); /* disconnect from siblings */ wsi2 = (*w)->h2.sibling_list; (*w)->h2.sibling_list = NULL; (*w)->socket_is_permanently_unusable = 1; __lws_close_free_wsi(*w, reason, "h2 child recurse"); *w = wsi2; continue; } lws_end_foreach_llp(w, h2.sibling_list); } } if (wsi->upgraded_to_http2) { /* remove pps */ struct lws_h2_protocol_send *w = wsi->h2.h2n->pps, *w1; while (w) { w1 = w->next; free(w); w = w1; } wsi->h2.h2n->pps = NULL; } if (( #if !defined(LWS_NO_CLIENT) wsi->client_h2_substream || #endif wsi->http2_substream) && wsi->h2.parent_wsi) { lwsl_info(" %p: disentangling from siblings\n", wsi); lws_start_foreach_llp(struct lws **, w, wsi->h2.parent_wsi->h2.child_list) { /* disconnect from siblings */ if (*w == wsi) { wsi2 = (*w)->h2.sibling_list; (*w)->h2.sibling_list = NULL; *w = wsi2; lwsl_info(" %p disentangled from sibling %p\n", wsi, wsi2); break; } } lws_end_foreach_llp(w, h2.sibling_list); wsi->h2.parent_wsi->h2.child_count--; wsi->h2.parent_wsi = NULL; if (wsi->h2.pending_status_body) lws_free_set_NULL(wsi->h2.pending_status_body); } if (wsi->h2_stream_carries_ws || wsi->h2_stream_carries_sse) { struct lws *nwsi = lws_get_network_wsi(wsi); nwsi->immortal_substream_count--; /* if no ws, then put a timeout on the parent wsi */ if (!nwsi->immortal_substream_count) __lws_set_timeout(nwsi, PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE, 31); } return 0; } static int rops_callback_on_writable_h2(struct lws *wsi) { struct lws *network_wsi, *wsi2; int already; //lwsl_notice("%s: %p (wsistate 0x%x)\n", __func__, wsi, wsi->wsistate); // if (!lwsi_role_h2(wsi) && !lwsi_role_h2_ENCAPSULATION(wsi)) // return 0; if (wsi->h2.requested_POLLOUT #if !defined(LWS_NO_CLIENT) && !wsi->client_h2_alpn #endif ) { lwsl_debug("already pending writable\n"); return 1; } /* is this for DATA or for control messages? */ if (wsi->upgraded_to_http2 && !wsi->h2.h2n->pps && !lws_h2_tx_cr_get(wsi)) { /* * other side is not able to cope with us sending DATA * anything so no matter if we have POLLOUT on our side if it's * DATA we want to send. * * Delay waiting for our POLLOUT until peer indicates he has * space for more using tx window command in http2 layer */ lwsl_notice("%s: %p: skint (%d)\n", __func__, wsi, wsi->h2.tx_cr); wsi->h2.skint = 1; return 0; } wsi->h2.skint = 0; network_wsi = lws_get_network_wsi(wsi); already = network_wsi->h2.requested_POLLOUT; /* mark everybody above him as requesting pollout */ wsi2 = wsi; while (wsi2) { wsi2->h2.requested_POLLOUT = 1; lwsl_info("mark %p pending writable\n", wsi2); wsi2 = wsi2->h2.parent_wsi; } /* for network action, act only on the network wsi */ if (already #if !defined(LWS_NO_CLIENT) && !network_wsi->client_h2_alpn && !network_wsi->client_h2_substream #endif ) return 1; return 0; } static void lws_h2_dump_waiting_children(struct lws *wsi) { #if defined(_DEBUG) lwsl_info("%s: %p: children waiting for POLLOUT service:\n", __func__, wsi); wsi = wsi->h2.child_list; while (wsi) { lwsl_info(" %c %p %s %s\n", wsi->h2.requested_POLLOUT ? '*' : ' ', wsi, wsi->role_ops->name, wsi->protocol->name); wsi = wsi->h2.sibling_list; } #endif } static int lws_h2_bind_for_post_before_action(struct lws *wsi) { const char *p; p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD); if (p && !strcmp(p, "POST")) { const struct lws_http_mount *hit = lws_find_mount(wsi, lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_PATH), lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_PATH)); lwsl_debug("%s: %s: hit %p: %s\n", __func__, lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_PATH), hit, hit ? hit->origin : "null"); if (hit) { const struct lws_protocols *pp; const char *name = hit->origin; if (hit->protocol) name = hit->protocol; pp = lws_vhost_name_to_protocol(wsi->vhost, name); if (!pp) { lwsl_info("Unable to find protocol '%s'\n", name); return 1; } if (lws_bind_protocol(wsi, pp, __func__)) return 1; } lwsl_info("%s: setting LRS_BODY from 0x%x (%s)\n", __func__, wsi->wsistate, wsi->protocol->name); lwsi_set_state(wsi, LRS_BODY); } return 0; } /* * we are the 'network wsi' for potentially many muxed child wsi with * no network connection of their own, who have to use us for all their * network actions. So we use a round-robin scheme to share out the * POLLOUT notifications to our children. * * But because any child could exhaust the socket's ability to take * writes, we can only let one child get notified each time. * * In addition children may be closed / deleted / added between POLLOUT * notifications, so we can't hold pointers */ static int rops_perform_user_POLLOUT_h2(struct lws *wsi) { struct lws **wsi2, *wsi2a; #if defined(LWS_ROLE_WS) int write_type = LWS_WRITE_PONG; #endif int n; wsi = lws_get_network_wsi(wsi); wsi->h2.requested_POLLOUT = 0; if (!wsi->h2.initialized) { lwsl_info("pollout on uninitialized http2 conn\n"); return 0; } lws_h2_dump_waiting_children(wsi); wsi2 = &wsi->h2.child_list; if (!*wsi2) return 0; do { struct lws *w, **wa; wa = &(*wsi2)->h2.sibling_list; if (!(*wsi2)->h2.requested_POLLOUT) goto next_child; /* * we're going to do writable callback for this child. * move him to be the last child */ lwsl_debug("servicing child %p\n", *wsi2); w = *wsi2; while (w) { if (!w->h2.sibling_list) { /* w is the current last */ lwsl_debug("w=%p, *wsi2 = %p\n", w, *wsi2); if (w == *wsi2) /* we are already last */ break; /* last points to us as new last */ w->h2.sibling_list = *wsi2; /* guy pointing to us until now points to * our old next */ *wsi2 = (*wsi2)->h2.sibling_list; /* we point to nothing because we are last */ w->h2.sibling_list->h2.sibling_list = NULL; /* w becomes us */ w = w->h2.sibling_list; break; } w = w->h2.sibling_list; } if (!w) { wa = &wsi->h2.child_list; goto next_child; } w->h2.requested_POLLOUT = 0; lwsl_info("%s: child %p (wsistate 0x%x)\n", __func__, w, w->wsistate); /* priority 1: post compression-transform buffered output */ if (lws_has_buffered_out(w)) { lwsl_debug("%s: completing partial\n", __func__); if (lws_issue_raw(w, NULL, 0) < 0) { lwsl_info("%s signalling to close\n", __func__); lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "h2 end stream 1"); wa = &wsi->h2.child_list; goto next_child; } lws_callback_on_writable(w); wa = &wsi->h2.child_list; goto next_child; } /* priority 2: pre compression-transform buffered output */ #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (w->http.comp_ctx.buflist_comp || w->http.comp_ctx.may_have_more) { enum lws_write_protocol wp = LWS_WRITE_HTTP; lwsl_info("%s: completing comp partial" "(buflist_comp %p, may %d)\n", __func__, w->http.comp_ctx.buflist_comp, w->http.comp_ctx.may_have_more); if (rops_write_role_protocol_h2(w, NULL, 0, &wp) < 0) { lwsl_info("%s signalling to close\n", __func__); lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "comp write fail"); } lws_callback_on_writable(w); wa = &wsi->h2.child_list; goto next_child; } #endif /* priority 3: if no buffered out and waiting for that... */ if (lwsi_state(w) == LRS_FLUSHING_BEFORE_CLOSE) { w->socket_is_permanently_unusable = 1; lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "h2 end stream 1"); wa = &wsi->h2.child_list; goto next_child; } /* if we arrived here, even by looping, we checked choked */ w->could_have_pending = 0; wsi->could_have_pending = 0; if (w->h2.pending_status_body) { w->h2.send_END_STREAM = 1; n = lws_write(w, (uint8_t *)w->h2.pending_status_body + LWS_PRE, strlen(w->h2.pending_status_body + LWS_PRE), LWS_WRITE_HTTP_FINAL); lws_free_set_NULL(w->h2.pending_status_body); lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "h2 end stream 1"); wa = &wsi->h2.child_list; goto next_child; } if (lwsi_state(w) == LRS_H2_WAITING_TO_SEND_HEADERS) { if (lws_h2_client_handshake(w)) return -1; goto next_child; } if (lwsi_state(w) == LRS_DEFERRING_ACTION) { /* * we had to defer the http_action to the POLLOUT * handler, because we know it will send something and * only in the POLLOUT handler do we know for sure * that there is no partial pending on the network wsi. */ lwsi_set_state(w, LRS_ESTABLISHED); lws_h2_bind_for_post_before_action(w); lwsl_info(" h2 action start...\n"); n = lws_http_action(w); if (n < 0) lwsl_info (" h2 action result %d\n", n); else lwsl_info(" h2 action result %d " "(wsi->http.rx_content_remain %lld)\n", n, w->http.rx_content_remain); /* * Commonly we only managed to start a larger transfer * that will complete asynchronously under its own wsi * states. In those cases we will hear about * END_STREAM going out in the POLLOUT handler. */ if (n >= 0 && !w->h2.pending_status_body && (n || w->h2.send_END_STREAM)) { lwsl_info("closing stream after h2 action\n"); lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "h2 end stream"); wa = &wsi->h2.child_list; } if (n < 0) wa = &wsi->h2.child_list; goto next_child; } if (lwsi_state(w) == LRS_ISSUING_FILE) { ((volatile struct lws *)w)->leave_pollout_active = 0; /* >0 == completion, <0 == error * * We'll get a LWS_CALLBACK_HTTP_FILE_COMPLETION * callback when it's done. That's the case even if we * just completed the send, so wait for that. */ n = lws_serve_http_file_fragment(w); lwsl_debug("lws_serve_http_file_fragment says %d\n", n); /* * We will often hear about out having sent the final * DATA here... if so close the actual wsi */ if (n < 0 || w->h2.send_END_STREAM) { lwsl_debug("Closing POLLOUT child %p\n", w); lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "h2 end stream file"); wa = &wsi->h2.child_list; goto next_child; } if (n > 0) if (lws_http_transaction_completed(w)) return -1; if (!n) { lws_callback_on_writable(w); (w)->h2.requested_POLLOUT = 1; } goto next_child; } #if defined(LWS_ROLE_WS) /* Notify peer that we decided to close */ if (lwsi_role_ws(w) && lwsi_state(w) == LRS_WAITING_TO_SEND_CLOSE) { lwsl_debug("sending close packet\n"); w->waiting_to_send_close_frame = 0; n = lws_write(w, &w->ws->ping_payload_buf[LWS_PRE], w->ws->close_in_ping_buffer_len, LWS_WRITE_CLOSE); if (n >= 0) { lwsi_set_state(w, LRS_AWAITING_CLOSE_ACK); lws_set_timeout(w, PENDING_TIMEOUT_CLOSE_ACK, 5); lwsl_debug("sent close frame, awaiting ack\n"); } goto next_child; } /* * Acknowledge receipt of peer's notification he closed, * then logically close ourself */ if ((lwsi_role_ws(w) && w->ws->ping_pending_flag) || (lwsi_state(w) == LRS_RETURNED_CLOSE && w->ws->payload_is_close)) { if (w->ws->payload_is_close) write_type = LWS_WRITE_CLOSE | LWS_WRITE_H2_STREAM_END; n = lws_write(w, &w->ws->ping_payload_buf[LWS_PRE], w->ws->ping_payload_len, write_type); if (n < 0) return -1; /* well he is sent, mark him done */ w->ws->ping_pending_flag = 0; if (w->ws->payload_is_close) { /* oh... a close frame... then we are done */ lwsl_debug("Ack'd peer's close packet\n"); w->ws->payload_is_close = 0; lwsi_set_state(w, LRS_RETURNED_CLOSE); lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "returned close packet"); wa = &wsi->h2.child_list; goto next_child; } lws_callback_on_writable(w); (w)->h2.requested_POLLOUT = 1; /* otherwise for PING, leave POLLOUT active both ways */ goto next_child; } #endif if (lws_callback_as_writeable(w)) { lwsl_info("Closing POLLOUT child (end stream %d)\n", w->h2.send_END_STREAM); lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "h2 pollout handle"); wa = &wsi->h2.child_list; } else if (w->h2.send_END_STREAM) lws_h2_state(w, LWS_H2_STATE_HALF_CLOSED_LOCAL); next_child: wsi2 = wa; } while (wsi2 && *wsi2 && !lws_send_pipe_choked(wsi)); // lws_h2_dump_waiting_children(wsi); wsi2a = wsi->h2.child_list; while (wsi2a) { if (wsi2a->h2.requested_POLLOUT) { if (lws_change_pollfd(wsi, 0, LWS_POLLOUT)) return -1; break; } wsi2a = wsi2a->h2.sibling_list; } return 0; } static struct lws * rops_encapsulation_parent_h2(struct lws *wsi) { if (wsi->h2.parent_wsi) return wsi->h2.parent_wsi; return NULL; } static int rops_alpn_negotiated_h2(struct lws *wsi, const char *alpn) { struct allocated_headers *ah; lwsl_debug("%s: client %d\n", __func__, lwsi_role_client(wsi)); #if !defined(LWS_NO_CLIENT) if (lwsi_role_client(wsi)) { lwsl_info("%s: upgraded to H2\n", __func__); wsi->client_h2_alpn = 1; } #endif wsi->upgraded_to_http2 = 1; wsi->vhost->conn_stats.h2_alpn++; /* adopt the header info */ ah = wsi->http.ah; lws_role_transition(wsi, LWSIFR_SERVER, LRS_H2_AWAIT_PREFACE, &role_ops_h2); /* http2 union member has http union struct at start */ wsi->http.ah = ah; if (!wsi->h2.h2n) wsi->h2.h2n = lws_zalloc(sizeof(*wsi->h2.h2n), "h2n"); if (!wsi->h2.h2n) return 1; lws_h2_init(wsi); /* HTTP2 union */ lws_hpack_dynamic_size(wsi, wsi->h2.h2n->set.s[H2SET_HEADER_TABLE_SIZE]); wsi->h2.tx_cr = 65535; lwsl_info("%s: wsi %p: configured for h2\n", __func__, wsi); return 0; } struct lws_role_ops role_ops_h2 = { /* role name */ "h2", /* alpn id */ "h2", /* check_upgrades */ rops_check_upgrades_h2, /* init_context */ rops_init_context_h2, /* init_vhost */ rops_init_vhost_h2, /* destroy_vhost */ NULL, /* periodic_checks */ NULL, /* service_flag_pending */ NULL, /* handle_POLLIN */ rops_handle_POLLIN_h2, /* handle_POLLOUT */ rops_handle_POLLOUT_h2, /* perform_user_POLLOUT */ rops_perform_user_POLLOUT_h2, /* callback_on_writable */ rops_callback_on_writable_h2, /* tx_credit */ rops_tx_credit_h2, /* write_role_protocol */ rops_write_role_protocol_h2, /* encapsulation_parent */ rops_encapsulation_parent_h2, /* alpn_negotiated */ rops_alpn_negotiated_h2, /* close_via_role_protocol */ NULL, /* close_role */ NULL, /* close_kill_connection */ rops_close_kill_connection_h2, /* destroy_role */ rops_destroy_role_h2, /* adoption_bind */ NULL, /* client_bind */ NULL, /* adoption_cb clnt, srv */ { LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED, LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED }, /* rx cb clnt, srv */ { LWS_CALLBACK_RECEIVE_CLIENT_HTTP, 0 /* may be POST, etc */ }, /* writeable cb clnt, srv */ { LWS_CALLBACK_CLIENT_HTTP_WRITEABLE, LWS_CALLBACK_HTTP_WRITEABLE }, /* close cb clnt, srv */ { LWS_CALLBACK_CLOSED_CLIENT_HTTP, LWS_CALLBACK_CLOSED_HTTP }, /* protocol_bind cb c, srv */ { LWS_CALLBACK_CLIENT_HTTP_BIND_PROTOCOL, LWS_CALLBACK_HTTP_BIND_PROTOCOL }, /* protocol_unbind cb c, srv */ { LWS_CALLBACK_CLIENT_HTTP_DROP_PROTOCOL, LWS_CALLBACK_HTTP_DROP_PROTOCOL }, /* file_handle */ 0, }; libwebsockets-3.2.1/lib/roles/h2/private.h000066400000000000000000000266461357643561300204360ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is included from core/private.h if LWS_ROLE_H2 */ extern struct lws_role_ops role_ops_h2; #define lwsi_role_h2(wsi) (wsi->role_ops == &role_ops_h2) enum lws_h2_settings { H2SET_HEADER_TABLE_SIZE = 1, H2SET_ENABLE_PUSH, H2SET_MAX_CONCURRENT_STREAMS, H2SET_INITIAL_WINDOW_SIZE, H2SET_MAX_FRAME_SIZE, H2SET_MAX_HEADER_LIST_SIZE, H2SET_RESERVED7, H2SET_ENABLE_CONNECT_PROTOCOL, /* defined in mcmanus-httpbis-h2-ws-02 */ H2SET_COUNT /* always last */ }; struct http2_settings { uint32_t s[H2SET_COUNT]; }; struct lws_vhost_role_h2 { struct http2_settings set; }; enum lws_h2_wellknown_frame_types { LWS_H2_FRAME_TYPE_DATA, LWS_H2_FRAME_TYPE_HEADERS, LWS_H2_FRAME_TYPE_PRIORITY, LWS_H2_FRAME_TYPE_RST_STREAM, LWS_H2_FRAME_TYPE_SETTINGS, LWS_H2_FRAME_TYPE_PUSH_PROMISE, LWS_H2_FRAME_TYPE_PING, LWS_H2_FRAME_TYPE_GOAWAY, LWS_H2_FRAME_TYPE_WINDOW_UPDATE, LWS_H2_FRAME_TYPE_CONTINUATION, LWS_H2_FRAME_TYPE_COUNT /* always last */ }; enum lws_h2_flags { LWS_H2_FLAG_END_STREAM = 1, LWS_H2_FLAG_END_HEADERS = 4, LWS_H2_FLAG_PADDED = 8, LWS_H2_FLAG_PRIORITY = 0x20, LWS_H2_FLAG_SETTINGS_ACK = 1, }; enum lws_h2_errors { H2_ERR_NO_ERROR, /* Graceful shutdown */ H2_ERR_PROTOCOL_ERROR, /* Protocol error detected */ H2_ERR_INTERNAL_ERROR, /* Implementation fault */ H2_ERR_FLOW_CONTROL_ERROR, /* Flow-control limits exceeded */ H2_ERR_SETTINGS_TIMEOUT, /* Settings not acknowledged */ H2_ERR_STREAM_CLOSED, /* Frame received for closed stream */ H2_ERR_FRAME_SIZE_ERROR, /* Frame size incorrect */ H2_ERR_REFUSED_STREAM, /* Stream not processed */ H2_ERR_CANCEL, /* Stream cancelled */ H2_ERR_COMPRESSION_ERROR, /* Compression state not updated */ H2_ERR_CONNECT_ERROR, /* TCP connection error for CONNECT method */ H2_ERR_ENHANCE_YOUR_CALM, /* Processing capacity exceeded */ H2_ERR_INADEQUATE_SECURITY, /* Negotiated TLS parameters not acceptable */ H2_ERR_HTTP_1_1_REQUIRED, /* Use HTTP/1.1 for the request */ }; enum lws_h2_states { LWS_H2_STATE_IDLE, /* * Send PUSH_PROMISE -> LWS_H2_STATE_RESERVED_LOCAL * Recv PUSH_PROMISE -> LWS_H2_STATE_RESERVED_REMOTE * Send HEADERS -> LWS_H2_STATE_OPEN * Recv HEADERS -> LWS_H2_STATE_OPEN * * - Only PUSH_PROMISE + HEADERS valid to send * - Only HEADERS or PRIORITY valid to receive */ LWS_H2_STATE_RESERVED_LOCAL, /* * Send RST_STREAM -> LWS_H2_STATE_CLOSED * Recv RST_STREAM -> LWS_H2_STATE_CLOSED * Send HEADERS -> LWS_H2_STATE_HALF_CLOSED_REMOTE * * - Only HEADERS, RST_STREAM, or PRIORITY valid to send * - Only RST_STREAM, PRIORITY, or WINDOW_UPDATE valid to receive */ LWS_H2_STATE_RESERVED_REMOTE, /* * Send RST_STREAM -> LWS_H2_STATE_CLOSED * Recv RST_STREAM -> LWS_H2_STATE_CLOSED * Recv HEADERS -> LWS_H2_STATE_HALF_CLOSED_LOCAL * * - Only RST_STREAM, WINDOW_UPDATE, or PRIORITY valid to send * - Only HEADERS, RST_STREAM, or PRIORITY valid to receive */ LWS_H2_STATE_OPEN, /* * Send RST_STREAM -> LWS_H2_STATE_CLOSED * Recv RST_STREAM -> LWS_H2_STATE_CLOSED * Send END_STREAM flag -> LWS_H2_STATE_HALF_CLOSED_LOCAL * Recv END_STREAM flag -> LWS_H2_STATE_HALF_CLOSED_REMOTE */ LWS_H2_STATE_HALF_CLOSED_REMOTE, /* * Send RST_STREAM -> LWS_H2_STATE_CLOSED * Recv RST_STREAM -> LWS_H2_STATE_CLOSED * Send END_STREAM flag -> LWS_H2_STATE_CLOSED * * - Any frame valid to send * - Only WINDOW_UPDATE, PRIORITY, or RST_STREAM valid to receive */ LWS_H2_STATE_HALF_CLOSED_LOCAL, /* * Send RST_STREAM -> LWS_H2_STATE_CLOSED * Recv RST_STREAM -> LWS_H2_STATE_CLOSED * Recv END_STREAM flag -> LWS_H2_STATE_CLOSED * * - Only WINDOW_UPDATE, PRIORITY, and RST_STREAM valid to send * - Any frame valid to receive */ LWS_H2_STATE_CLOSED, /* * - Only PRIORITY, WINDOW_UPDATE (IGNORE) and RST_STREAM (IGNORE) * may be received * * - Only PRIORITY valid to send */ }; void lws_h2_state(struct lws *wsi, enum lws_h2_states s); #define LWS_H2_STREAM_ID_MASTER 0 #define LWS_H2_SETTINGS_LEN 6 #define LWS_H2_FLAG_SETTINGS_ACK 1 enum http2_hpack_state { HPKS_TYPE, HPKS_IDX_EXT, HPKS_HLEN, HPKS_HLEN_EXT, HPKS_DATA, }; /* * lws general parsimonious header strategy is only store values from known * headers, and refer to them by index. * * That means if we can't map the peer header name to one that lws knows, we * will drop the content but track the indexing with associated_lws_hdr_idx = * LWS_HPACK_IGNORE_ENTRY. */ enum http2_hpack_type { HPKT_INDEXED_HDR_7, /* 1xxxxxxx: just "header field" */ HPKT_INDEXED_HDR_6_VALUE_INCR, /* 01xxxxxx: NEW indexed hdr with value */ HPKT_LITERAL_HDR_VALUE_INCR, /* 01000000: NEW literal hdr with value */ HPKT_INDEXED_HDR_4_VALUE, /* 0000xxxx: indexed hdr with value */ HPKT_INDEXED_HDR_4_VALUE_NEVER, /* 0001xxxx: indexed hdr with value NEVER NEW */ HPKT_LITERAL_HDR_VALUE, /* 00000000: literal hdr with value */ HPKT_LITERAL_HDR_VALUE_NEVER, /* 00010000: literal hdr with value NEVER NEW */ HPKT_SIZE_5 }; #define LWS_HPACK_IGNORE_ENTRY 0xffff struct hpack_dt_entry { char *value; /* malloc'd */ uint16_t value_len; uint16_t hdr_len; /* virtual, for accounting */ uint16_t lws_hdr_idx; /* LWS_HPACK_IGNORE_ENTRY = IGNORE */ }; struct hpack_dynamic_table { struct hpack_dt_entry *entries; /* malloc'd */ uint32_t virtual_payload_usage; uint32_t virtual_payload_max; uint16_t pos; uint16_t used_entries; uint16_t num_entries; }; enum lws_h2_protocol_send_type { LWS_PPS_NONE, LWS_H2_PPS_MY_SETTINGS, LWS_H2_PPS_ACK_SETTINGS, LWS_H2_PPS_PONG, LWS_H2_PPS_GOAWAY, LWS_H2_PPS_RST_STREAM, LWS_H2_PPS_UPDATE_WINDOW, }; struct lws_h2_protocol_send { struct lws_h2_protocol_send *next; /* linked list */ enum lws_h2_protocol_send_type type; union uu { struct { char str[32]; uint32_t highest_sid; uint32_t err; } ga; struct { uint32_t sid; uint32_t err; } rs; struct { uint8_t ping_payload[8]; } ping; struct { uint32_t sid; uint32_t credit; } update_window; } u; }; struct lws_h2_ghost_sid { struct lws_h2_ghost_sid *next; uint32_t sid; }; /* * http/2 connection info that is only used by the root connection that has * the network connection. * * h2 tends to spawn many child connections from one network connection, so * it's necessary to make members only needed by the network connection * distinct and only malloc'd on network connections. * * There's only one HPACK parser per network connection. * * But there is an ah per logical child connection... the network connection * fills it but it belongs to the logical child. */ struct lws_h2_netconn { struct http2_settings set; struct hpack_dynamic_table hpack_dyn_table; uint8_t ping_payload[8]; uint8_t one_setting[LWS_H2_SETTINGS_LEN]; char goaway_str[32]; /* for rx */ struct lws *swsi; struct lws_h2_protocol_send *pps; /* linked list */ enum http2_hpack_state hpack; enum http2_hpack_type hpack_type; unsigned int huff:1; unsigned int value:1; unsigned int unknown_header:1; unsigned int cont_exp:1; unsigned int cont_exp_headers:1; unsigned int we_told_goaway:1; unsigned int pad_length:1; unsigned int collected_priority:1; unsigned int is_first_header_char:1; unsigned int zero_huff_padding:1; unsigned int last_action_dyntable_resize:1; uint32_t hdr_idx; uint32_t hpack_len; uint32_t hpack_e_dep; uint32_t count; uint32_t preamble; uint32_t length; uint32_t sid; uint32_t inside; uint32_t highest_sid; uint32_t highest_sid_opened; uint32_t cont_exp_sid; uint32_t dep; uint32_t goaway_last_sid; uint32_t goaway_err; uint32_t hpack_hdr_len; uint16_t hpack_pos; uint8_t frame_state; uint8_t type; uint8_t flags; uint8_t padding; uint8_t weight_temp; uint8_t huff_pad; char first_hdr_char; uint8_t hpack_m; uint8_t ext_count; }; struct _lws_h2_related { struct lws_h2_netconn *h2n; /* malloc'd for root net conn */ struct lws *parent_wsi; struct lws *child_list; struct lws *sibling_list; char *pending_status_body; int tx_cr; int peer_tx_cr_est; unsigned int my_sid; unsigned int child_count; int my_priority; uint32_t dependent_on; unsigned int END_STREAM:1; unsigned int END_HEADERS:1; unsigned int send_END_STREAM:1; unsigned int GOING_AWAY; unsigned int requested_POLLOUT:1; unsigned int skint:1; uint16_t round_robin_POLLOUT; uint16_t count_POLLOUT_children; uint8_t h2_state; /* the RFC7540 state of the connection */ uint8_t weight; uint8_t initialized; }; #define HTTP2_IS_TOPLEVEL_WSI(wsi) (!wsi->h2.parent_wsi) int lws_h2_rst_stream(struct lws *wsi, uint32_t err, const char *reason); struct lws * lws_h2_get_nth_child(struct lws *wsi, int n); LWS_EXTERN void lws_h2_init(struct lws *wsi); LWS_EXTERN int lws_h2_settings(struct lws *nwsi, struct http2_settings *settings, unsigned char *buf, int len); LWS_EXTERN int lws_h2_parser(struct lws *wsi, unsigned char *in, lws_filepos_t inlen, lws_filepos_t *inused); LWS_EXTERN int lws_h2_do_pps_send(struct lws *wsi); LWS_EXTERN int lws_h2_frame_write(struct lws *wsi, int type, int flags, unsigned int sid, unsigned int len, unsigned char *buf); LWS_EXTERN struct lws * lws_h2_wsi_from_id(struct lws *wsi, unsigned int sid); LWS_EXTERN int lws_hpack_interpret(struct lws *wsi, unsigned char c); LWS_EXTERN int lws_add_http2_header_by_name(struct lws *wsi, const unsigned char *name, const unsigned char *value, int length, unsigned char **p, unsigned char *end); LWS_EXTERN int lws_add_http2_header_by_token(struct lws *wsi, enum lws_token_indexes token, const unsigned char *value, int length, unsigned char **p, unsigned char *end); LWS_EXTERN int lws_add_http2_header_status(struct lws *wsi, unsigned int code, unsigned char **p, unsigned char *end); LWS_EXTERN void lws_hpack_destroy_dynamic_header(struct lws *wsi); LWS_EXTERN int lws_hpack_dynamic_size(struct lws *wsi, int size); LWS_EXTERN int lws_h2_goaway(struct lws *wsi, uint32_t err, const char *reason); LWS_EXTERN int lws_h2_tx_cr_get(struct lws *wsi); LWS_EXTERN void lws_h2_tx_cr_consume(struct lws *wsi, int consumed); LWS_EXTERN int lws_hdr_extant(struct lws *wsi, enum lws_token_indexes h); LWS_EXTERN void lws_pps_schedule(struct lws *wsi, struct lws_h2_protocol_send *pss); LWS_EXTERN const struct http2_settings lws_h2_defaults; LWS_EXTERN int lws_h2_ws_handshake(struct lws *wsi); LWS_EXTERN int lws_h2_issue_preface(struct lws *wsi); LWS_EXTERN int lws_h2_client_handshake(struct lws *wsi); LWS_EXTERN struct lws * lws_wsi_h2_adopt(struct lws *parent_wsi, struct lws *wsi); int lws_handle_POLLOUT_event_h2(struct lws *wsi); int lws_read_h2(struct lws *wsi, unsigned char *buf, lws_filepos_t len); libwebsockets-3.2.1/lib/roles/http/000077500000000000000000000000001357643561300172435ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/http/client/000077500000000000000000000000001357643561300205215ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/http/client/client-handshake.c000066400000000000000000000724641357643561300241040ustar00rootroot00000000000000#include "core/private.h" static int lws_getaddrinfo46(struct lws *wsi, const char *ads, struct addrinfo **result) { struct addrinfo hints; memset(&hints, 0, sizeof(hints)); *result = NULL; hints.ai_socktype = SOCK_STREAM; #ifdef LWS_WITH_IPV6 if (wsi->ipv6) { #if !defined(__ANDROID__) hints.ai_family = AF_INET6; hints.ai_flags = AI_V4MAPPED; #endif } else #endif { hints.ai_family = PF_UNSPEC; } return getaddrinfo(ads, NULL, &hints, result); } struct lws * lws_client_connect_3(struct lws *wsi, struct lws *wsi_piggyback, ssize_t plen) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; const char *meth = NULL; struct lws_pollfd pfd; const char *cce = ""; int n, m, rawish = 0; if (wsi->stash) meth = wsi->stash->method; else meth = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_METHOD); if (meth && !strcmp(meth, "RAW")) rawish = 1; if (wsi_piggyback) goto send_hs; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) /* we are connected to server, or proxy */ /* http proxy */ if (wsi->vhost->http.http_proxy_port) { /* * OK from now on we talk via the proxy, so connect to that * * (will overwrite existing pointer, * leaving old string/frag there but unreferenced) */ if (wsi->stash) { lws_free(wsi->stash->address); wsi->stash->address = lws_strdup(wsi->vhost->http.http_proxy_address); if (!wsi->stash->address) goto failed; } else if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_PEER_ADDRESS, wsi->vhost->http.http_proxy_address)) goto failed; wsi->c_port = wsi->vhost->http.http_proxy_port; n = send(wsi->desc.sockfd, (char *)pt->serv_buf, (int)plen, MSG_NOSIGNAL); if (n < 0) { lwsl_debug("ERROR writing to proxy socket\n"); cce = "proxy write failed"; goto failed; } lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE, AWAITING_TIMEOUT); lwsi_set_state(wsi, LRS_WAITING_PROXY_REPLY); return wsi; } #endif #if defined(LWS_WITH_SOCKS5) /* socks proxy */ else if (wsi->vhost->socks_proxy_port) { n = send(wsi->desc.sockfd, (char *)pt->serv_buf, plen, MSG_NOSIGNAL); if (n < 0) { lwsl_debug("ERROR writing socks greeting\n"); cce = "socks write failed"; goto failed; } lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_SOCKS_GREETING_REPLY, AWAITING_TIMEOUT); lwsi_set_state(wsi, LRS_WAITING_SOCKS_GREETING_REPLY); return wsi; } #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) send_hs: if (wsi_piggyback && !lws_dll2_is_detached(&wsi->dll2_cli_txn_queue)) { /* * We are pipelining on an already-established connection... * we can skip tls establishment. */ lwsi_set_state(wsi, LRS_H1C_ISSUE_HANDSHAKE2); /* * we can't send our headers directly, because they have to * be sent when the parent is writeable. The parent will check * for anybody on his client transaction queue that is in * LRS_H1C_ISSUE_HANDSHAKE2, and let them write. * * If we are trying to do this too early, before the master * connection has written his own headers, then it will just * wait in the queue until it's possible to send them. */ lws_callback_on_writable(wsi_piggyback); lwsl_info("%s: wsi %p: waiting to send hdrs (par state 0x%x)\n", __func__, wsi, lwsi_state(wsi_piggyback)); } else { lwsl_info("%s: wsi %p: %s %s client created own conn (raw %d)\n", __func__, wsi, wsi->role_ops->name, wsi->protocol->name, rawish); /* we are making our own connection */ if (!rawish) lwsi_set_state(wsi, LRS_H1C_ISSUE_HANDSHAKE); else { /* for a method = "RAW" connection, this makes us * established */ /* clear his established timeout */ lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); m = wsi->role_ops->adoption_cb[0]; if (m) { n = user_callback_handle_rxflow( wsi->protocol->callback, wsi, m, wsi->user_space, NULL, 0); if (n < 0) { lwsl_info("LWS_CALLBACK_RAW_PROXY_CLI_ADOPT failed\n"); goto failed; } } /* service.c pollout processing wants this */ wsi->hdr_parsing_completed = 1; lwsl_info("%s: setting ESTABLISHED\n", __func__); lwsi_set_state(wsi, LRS_ESTABLISHED); return wsi; } /* * provoke service to issue the handshake directly. * * we need to do it this way because in the proxy case, this is * the next state and executed only if and when we get a good * proxy response inside the state machine... but notice in * SSL case this may not have sent anything yet with 0 return, * and won't until many retries from main loop. To stop that * becoming endless, cover with a timeout. */ lws_set_timeout(wsi, PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE, AWAITING_TIMEOUT); assert(lws_socket_is_valid(wsi->desc.sockfd)); pfd.fd = wsi->desc.sockfd; pfd.events = LWS_POLLIN; pfd.revents = LWS_POLLIN; n = lws_service_fd(wsi->context, &pfd); if (n < 0) { cce = "first service failed"; goto failed; } if (n) /* returns 1 on failure after closing wsi */ return NULL; } #endif return wsi; failed: lws_inform_client_conn_fail(wsi, (void *)cce, strlen(cce)); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "client_connect2"); return NULL; } struct lws * lws_client_connect_2(struct lws *wsi) { #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) struct lws_context *context = wsi->context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; const char *adsin; ssize_t plen = 0; #endif #if defined(LWS_WITH_UNIX_SOCK) struct sockaddr_un sau; char unix_skt = 0; #endif int n, port = 0; const char *cce = "", *iface; const struct sockaddr *psa; const char *meth = NULL; struct addrinfo *result; const char *ads; sockaddr46 sa46; #ifdef LWS_WITH_IPV6 char ipv6only = lws_check_opt(wsi->vhost->options, LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY | LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE); struct sockaddr_in addr; #if defined(__ANDROID__) ipv6only = 0; #endif #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) if (!wsi->http.ah && !wsi->stash) { cce = "ah was NULL at cc2"; lwsl_err("%s\n", cce); goto oom4; } /* we can only piggyback GET or POST */ if (wsi->stash) meth = wsi->stash->method; else meth = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_METHOD); if (meth && strcmp(meth, "GET") && strcmp(meth, "POST")) goto create_new_conn; /* we only pipeline connections that said it was okay */ if (!wsi->client_pipeline) goto create_new_conn; /* * let's take a look first and see if there are any already-active * client connections we can piggy-back on. */ adsin = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_PEER_ADDRESS); lws_vhost_lock(wsi->vhost); /* ----------------------------------- { */ lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head(&wsi->vhost->dll_cli_active_conns_owner)) { struct lws *w = lws_container_of(d, struct lws, dll_cli_active_conns); lwsl_debug("%s: check %s %s %d %d\n", __func__, adsin, w->cli_hostname_copy, wsi->c_port, w->c_port); if (w != wsi && w->cli_hostname_copy && !strcmp(adsin, w->cli_hostname_copy) && #if defined(LWS_WITH_TLS) (wsi->tls.use_ssl & LCCSCF_USE_SSL) == (w->tls.use_ssl & LCCSCF_USE_SSL) && #endif wsi->c_port == w->c_port) { /* someone else is already connected to the right guy */ /* do we know for a fact pipelining won't fly? */ if (w->keepalive_rejected) { lwsl_info("defeating pipelining due to no " "keepalive on server\n"); lws_vhost_unlock(wsi->vhost); /* } ---------- */ goto create_new_conn; } #if defined (LWS_WITH_HTTP2) /* * h2: in usable state already: just use it without * going through the queue */ if (w->client_h2_alpn && (lwsi_state(w) == LRS_H2_WAITING_TO_SEND_HEADERS || lwsi_state(w) == LRS_ESTABLISHED)) { lwsl_info("%s: just join h2 directly\n", __func__); wsi->client_h2_alpn = 1; lws_wsi_h2_adopt(w, wsi); lws_vhost_unlock(wsi->vhost); /* } ---------- */ return wsi; } #endif lwsl_info("apply %p to txn queue on %p state 0x%lx\n", wsi, w, (unsigned long)w->wsistate); /* * ...let's add ourselves to his transaction queue... * we are adding ourselves at the HEAD */ lws_dll2_add_head(&wsi->dll2_cli_txn_queue, &w->dll2_cli_txn_queue_owner); /* * h1: pipeline our headers out on him, * and wait for our turn at client transaction_complete * to take over parsing the rx. */ lws_vhost_unlock(wsi->vhost); /* } ---------- */ return lws_client_connect_3(wsi, w, plen); } } lws_end_foreach_dll_safe(d, d1); lws_vhost_unlock(wsi->vhost); /* } ---------------------------------- */ create_new_conn: #endif /* * clients who will create their own fresh connection keep a copy of * the hostname they originally connected to, in case other connections * want to use it too */ if (!wsi->cli_hostname_copy) { if (wsi->stash) wsi->cli_hostname_copy = lws_strdup(wsi->stash->host); else { char *pa = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_PEER_ADDRESS); if (pa) wsi->cli_hostname_copy = lws_strdup(pa); } } /* * If we made our own connection, and we're doing a method that can take * a pipeline, we are an "active client connection". * * Add ourselves to the vhost list of those so that others can * piggyback on our transaction queue */ if (meth && (!strcmp(meth, "GET") || !strcmp(meth, "POST")) && lws_dll2_is_detached(&wsi->dll2_cli_txn_queue) && lws_dll2_is_detached(&wsi->dll_cli_active_conns)) { lws_vhost_lock(wsi->vhost); /* caution... we will have to unpick this on oom4 path */ lws_dll2_add_head(&wsi->dll_cli_active_conns, &wsi->vhost->dll_cli_active_conns_owner); lws_vhost_unlock(wsi->vhost); } /* * unix socket destination? */ if (wsi->stash) ads = wsi->stash->address; else ads = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_PEER_ADDRESS); #if defined(LWS_WITH_UNIX_SOCK) if (*ads == '+') { ads++; memset(&sau, 0, sizeof(sau)); sau.sun_family = AF_UNIX; strncpy(sau.sun_path, ads, sizeof(sau.sun_path)); sau.sun_path[sizeof(sau.sun_path) - 1] = '\0'; lwsl_info("%s: Unix skt: %s\n", __func__, ads); if (sau.sun_path[0] == '@') sau.sun_path[0] = '\0'; unix_skt = 1; goto ads_known; } #endif /* * start off allowing ipv6 on connection if vhost allows it */ wsi->ipv6 = LWS_IPV6_ENABLED(wsi->vhost); #ifdef LWS_WITH_IPV6 if (wsi->stash) iface = wsi->stash->iface; else iface = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_IFACE); if (wsi->ipv6 && iface && inet_pton(AF_INET, iface, &addr.sin_addr) == 1) { lwsl_notice("%s: client connection forced to IPv4\n", __func__); wsi->ipv6 = 0; } #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) /* Decide what it is we need to connect to: * * Priority 1: connect to http proxy */ if (wsi->vhost->http.http_proxy_port) { lwsl_info("%s: going via proxy\n", __func__); plen = lws_snprintf((char *)pt->serv_buf, 256, "CONNECT %s:%u HTTP/1.0\x0d\x0a" "Host: %s:%u\x0d\x0a" "User-agent: libwebsockets\x0d\x0a", ads, wsi->ocport, ads, wsi->ocport); if (wsi->vhost->proxy_basic_auth_token[0]) plen += lws_snprintf((char *)pt->serv_buf + plen, 256, "Proxy-authorization: basic %s\x0d\x0a", wsi->vhost->proxy_basic_auth_token); plen += lws_snprintf((char *)pt->serv_buf + plen, 5, "\x0d\x0a"); ads = wsi->vhost->http.http_proxy_address; port = wsi->vhost->http.http_proxy_port; #else if (0) { #endif #if defined(LWS_WITH_SOCKS5) /* Priority 2: Connect to SOCK5 Proxy */ } else if (wsi->vhost->socks_proxy_port) { if (socks_generate_msg(wsi, SOCKS_MSG_GREETING, &plen)) { cce = "socks msg too large"; goto oom4; } lwsl_client("Sending SOCKS Greeting\n"); ads = wsi->vhost->socks_proxy_address; port = wsi->vhost->socks_proxy_port; #endif } else { /* Priority 3: Connect directly */ /* ads already set */ port = wsi->c_port; } /* * prepare the actual connection * to whatever we decided to connect to */ lwsl_info("%s: %p: address %s:%u\n", __func__, wsi, ads, port); n = lws_getaddrinfo46(wsi, ads, &result); memset(&sa46, 0, sizeof(sa46)); #ifdef LWS_WITH_IPV6 if (wsi->ipv6) { struct sockaddr_in6 *sa6; if (n || !result) { /* lws_getaddrinfo46 failed, there is no usable result */ lwsl_notice("%s: lws_getaddrinfo46 failed %d\n", __func__, n); cce = "ipv6 lws_getaddrinfo46 failed"; goto oom4; } sa6 = ((struct sockaddr_in6 *)result->ai_addr); sa46.sa6.sin6_family = AF_INET6; switch (result->ai_family) { case AF_INET: if (ipv6only) break; /* map IPv4 to IPv6 */ memset((char *)&sa46.sa6.sin6_addr, 0, sizeof(sa46.sa6.sin6_addr)); sa46.sa6.sin6_addr.s6_addr[10] = 0xff; sa46.sa6.sin6_addr.s6_addr[11] = 0xff; memcpy(&sa46.sa6.sin6_addr.s6_addr[12], &((struct sockaddr_in *)result->ai_addr)->sin_addr, sizeof(struct in_addr)); lwsl_notice("uplevelling AF_INET to AF_INET6\n"); break; case AF_INET6: memcpy(&sa46.sa6.sin6_addr, &sa6->sin6_addr, sizeof(struct in6_addr)); sa46.sa6.sin6_scope_id = sa6->sin6_scope_id; sa46.sa6.sin6_flowinfo = sa6->sin6_flowinfo; break; default: lwsl_err("Unknown address family\n"); freeaddrinfo(result); cce = "unknown address family"; goto oom4; } } else #endif /* use ipv6 */ /* use ipv4 */ { void *p = NULL; if (!n) { struct addrinfo *res = result; /* pick the first AF_INET (IPv4) result */ while (!p && res) { switch (res->ai_family) { case AF_INET: p = &((struct sockaddr_in *)res->ai_addr)->sin_addr; break; } res = res->ai_next; } #if defined(LWS_FALLBACK_GETHOSTBYNAME) } else if (n == EAI_SYSTEM) { struct hostent *host; lwsl_info("ipv4 getaddrinfo err, try gethostbyname\n"); host = gethostbyname(ads); if (host) { p = host->h_addr; } else { lwsl_err("gethostbyname failed\n"); cce = "gethostbyname (ipv4) failed"; goto oom4; } #endif } else { lwsl_err("getaddrinfo failed: %d\n", n); cce = "getaddrinfo failed"; goto oom4; } if (!p) { if (result) freeaddrinfo(result); lwsl_err("Couldn't identify address\n"); cce = "unable to lookup address"; goto oom4; } sa46.sa4.sin_family = AF_INET; sa46.sa4.sin_addr = *((struct in_addr *)p); memset(&sa46.sa4.sin_zero, 0, sizeof(sa46.sa4.sin_zero)); } if (result) freeaddrinfo(result); #if defined(LWS_WITH_UNIX_SOCK) ads_known: #endif /* now we decided on ipv4 or ipv6, set the port */ if (!lws_socket_is_valid(wsi->desc.sockfd)) { if (wsi->context->event_loop_ops->check_client_connect_ok && wsi->context->event_loop_ops->check_client_connect_ok(wsi)) { cce = "waiting for event loop watcher to close"; goto oom4; } #if defined(LWS_WITH_UNIX_SOCK) if (unix_skt) { wsi->unix_skt = 1; wsi->desc.sockfd = socket(AF_UNIX, SOCK_STREAM, 0); } else #endif { #ifdef LWS_WITH_IPV6 if (wsi->ipv6) wsi->desc.sockfd = socket(AF_INET6, SOCK_STREAM, 0); else #endif wsi->desc.sockfd = socket(AF_INET, SOCK_STREAM, 0); } if (!lws_socket_is_valid(wsi->desc.sockfd)) { lwsl_warn("Unable to open socket\n"); cce = "unable to open socket"; goto oom4; } if (lws_plat_set_socket_options(wsi->vhost, wsi->desc.sockfd, #if defined(LWS_WITH_UNIX_SOCK) unix_skt)) { #else 0)) { #endif lwsl_err("Failed to set wsi socket options\n"); compatible_close(wsi->desc.sockfd); cce = "set socket opts failed"; goto oom4; } lwsi_set_state(wsi, LRS_WAITING_CONNECT); #if !defined(LWS_AMAZON_RTOS) if (wsi->context->event_loop_ops->accept) if (wsi->context->event_loop_ops->accept(wsi)) { compatible_close(wsi->desc.sockfd); cce = "event loop accept failed"; goto oom4; } #endif if (__insert_wsi_socket_into_fds(wsi->context, wsi)) { compatible_close(wsi->desc.sockfd); cce = "insert wsi failed"; goto oom4; } if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) { compatible_close(wsi->desc.sockfd); cce = "change_pollfd failed"; goto oom4; } /* * past here, we can't simply free the structs as error * handling as oom4 does. We have to run the whole close flow. */ if (!wsi->protocol) wsi->protocol = &wsi->vhost->protocols[0]; wsi->protocol->callback(wsi, LWS_CALLBACK_WSI_CREATE, wsi->user_space, NULL, 0); lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE, AWAITING_TIMEOUT); if (wsi->stash) iface = wsi->stash->iface; else iface = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_IFACE); if (iface) { n = lws_socket_bind(wsi->vhost, wsi->desc.sockfd, 0, iface, wsi->ipv6); if (n < 0) { cce = "unable to bind socket"; goto failed; } } } #if defined(LWS_WITH_UNIX_SOCK) if (unix_skt) { psa = (const struct sockaddr *)&sau; n = sizeof(sau); } else #endif { #ifdef LWS_WITH_IPV6 if (wsi->ipv6) { sa46.sa6.sin6_port = htons(port); n = sizeof(struct sockaddr_in6); psa = (const struct sockaddr *)&sa46; } else #endif { sa46.sa4.sin_port = htons(port); n = sizeof(struct sockaddr); psa = (const struct sockaddr *)&sa46; } } if (connect(wsi->desc.sockfd, (const struct sockaddr *)psa, n) == -1 || LWS_ERRNO == LWS_EISCONN) { if (LWS_ERRNO == LWS_EALREADY || LWS_ERRNO == LWS_EINPROGRESS || LWS_ERRNO == LWS_EWOULDBLOCK #ifdef _WIN32 || LWS_ERRNO == WSAEINVAL #endif ) { lwsl_client("nonblocking connect retry (errno = %d)\n", LWS_ERRNO); if (lws_plat_check_connection_error(wsi)) { cce = "socket connect failed"; goto failed; } /* * must do specifically a POLLOUT poll to hear * about the connect completion */ if (lws_change_pollfd(wsi, 0, LWS_POLLOUT)) { cce = "POLLOUT set failed"; goto failed; } return wsi; } if (LWS_ERRNO != LWS_EISCONN) { lwsl_notice("Connect failed errno=%d\n", LWS_ERRNO); cce = "connect failed"; goto failed; } } return lws_client_connect_3(wsi, NULL, plen); oom4: if (lwsi_role_client(wsi) && wsi->protocol /* && lwsi_state_est(wsi) */) lws_inform_client_conn_fail(wsi,(void *)cce, strlen(cce)); /* take care that we might be inserted in fds already */ if (wsi->position_in_fds_table != LWS_NO_FDS_POS) goto failed1; /* * We can't be an active client connection any more, if we thought * that was what we were going to be doing. It should be if we are * failing by oom4 path, we are still called by * lws_client_connect_via_info() and will be returning NULL to that, * so nobody else should have had a chance to queue on us. */ { struct lws_vhost *vhost = wsi->vhost; lws_vhost_lock(vhost); __lws_free_wsi(wsi); lws_vhost_unlock(vhost); } return NULL; failed: lws_inform_client_conn_fail(wsi, (void *)cce, strlen(cce)); failed1: lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "client_connect2"); return NULL; } #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) /** * lws_client_reset() - retarget a connected wsi to start over with a new * connection (ie, redirect) * this only works if still in HTTP, ie, not upgraded yet * wsi: connection to reset * address: network address of the new server * port: port to connect to * path: uri path to connect to on the new server * host: host header to send to the new server */ LWS_VISIBLE struct lws * lws_client_reset(struct lws **pwsi, int ssl, const char *address, int port, const char *path, const char *host) { char origin[300] = "", protocol[300] = "", method[32] = "", iface[16] = "", alpn[32] = "", *p; struct lws *wsi; if (!pwsi) return NULL; wsi = *pwsi; if (wsi->redirects == 3) { lwsl_err("%s: Too many redirects\n", __func__); return NULL; } wsi->redirects++; p = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_ORIGIN); if (p) lws_strncpy(origin, p, sizeof(origin)); p = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_SENT_PROTOCOLS); if (p) lws_strncpy(protocol, p, sizeof(protocol)); p = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_METHOD); if (p) lws_strncpy(method, p, sizeof(method)); p = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_IFACE); if (p) lws_strncpy(iface, p, sizeof(iface)); p = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_ALPN); if (p) lws_strncpy(alpn, p, sizeof(alpn)); if (!port) { port = 443; ssl = 1; } lwsl_info("redirect ads='%s', port=%d, path='%s', ssl = %d\n", address, port, path, ssl); /* close the connection by hand */ #if defined(LWS_WITH_TLS) lws_ssl_close(wsi); #endif __remove_wsi_socket_from_fds(wsi); if (wsi->context->event_loop_ops->close_handle_manually) wsi->context->event_loop_ops->close_handle_manually(wsi); else compatible_close(wsi->desc.sockfd); #if defined(LWS_WITH_TLS) wsi->tls.use_ssl = ssl; #else if (ssl) { lwsl_err("%s: not configured for ssl\n", __func__); return NULL; } #endif wsi->desc.sockfd = LWS_SOCK_INVALID; lwsi_set_state(wsi, LRS_UNCONNECTED); // wsi->protocol = NULL; wsi->pending_timeout = NO_PENDING_TIMEOUT; wsi->c_port = port; wsi->hdr_parsing_completed = 0; _lws_header_table_reset(wsi->http.ah); if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_PEER_ADDRESS, address)) return NULL; if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_HOST, host)) return NULL; if (origin[0]) if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_ORIGIN, origin)) return NULL; if (protocol[0]) if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_SENT_PROTOCOLS, protocol)) return NULL; if (method[0]) if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_METHOD, method)) return NULL; if (iface[0]) if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_IFACE, iface)) return NULL; if (alpn[0]) if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_ALPN, alpn)) return NULL; origin[0] = '/'; strncpy(&origin[1], path, sizeof(origin) - 2); if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_URI, origin)) return NULL; *pwsi = lws_client_connect_2(wsi); return *pwsi; } #if defined(LWS_WITH_HTTP_PROXY) && defined(LWS_WITH_HUBBUB) hubbub_error html_parser_cb(const hubbub_token *token, void *pw) { struct lws_rewrite *r = (struct lws_rewrite *)pw; char buf[1024], *start = buf + LWS_PRE, *p = start, *end = &buf[sizeof(buf) - 1]; size_t i; switch (token->type) { case HUBBUB_TOKEN_DOCTYPE: p += lws_snprintf(p, end - p, "data.doctype.name.len, token->data.doctype.name.ptr, token->data.doctype.force_quirks ? "(force-quirks) " : ""); if (token->data.doctype.public_missing) lwsl_debug("\tpublic: missing\n"); else p += lws_snprintf(p, end - p, "PUBLIC \"%.*s\"\n", (int) token->data.doctype.public_id.len, token->data.doctype.public_id.ptr); if (token->data.doctype.system_missing) lwsl_debug("\tsystem: missing\n"); else p += lws_snprintf(p, end - p, " \"%.*s\">\n", (int) token->data.doctype.system_id.len, token->data.doctype.system_id.ptr); break; case HUBBUB_TOKEN_START_TAG: p += lws_snprintf(p, end - p, "<%.*s", (int)token->data.tag.name.len, token->data.tag.name.ptr); /* (token->data.tag.self_closing) ? "(self-closing) " : "", (token->data.tag.n_attributes > 0) ? "attributes:" : ""); */ for (i = 0; i < token->data.tag.n_attributes; i++) { if (!hstrcmp(&token->data.tag.attributes[i].name, "href", 4) || !hstrcmp(&token->data.tag.attributes[i].name, "action", 6) || !hstrcmp(&token->data.tag.attributes[i].name, "src", 3)) { const char *pp = (const char *)token->data.tag.attributes[i].value.ptr; int plen = (int) token->data.tag.attributes[i].value.len; if (strncmp(pp, "http:", 5) && strncmp(pp, "https:", 6)) { if (!hstrcmp(&token->data.tag.attributes[i].value, r->from, r->from_len)) { pp += r->from_len; plen -= r->from_len; } p += lws_snprintf(p, end - p, " %.*s=\"%s/%.*s\"", (int) token->data.tag.attributes[i].name.len, token->data.tag.attributes[i].name.ptr, r->to, plen, pp); continue; } } p += lws_snprintf(p, end - p, " %.*s=\"%.*s\"", (int) token->data.tag.attributes[i].name.len, token->data.tag.attributes[i].name.ptr, (int) token->data.tag.attributes[i].value.len, token->data.tag.attributes[i].value.ptr); } p += lws_snprintf(p, end - p, ">"); break; case HUBBUB_TOKEN_END_TAG: p += lws_snprintf(p, end - p, "data.tag.name.len, token->data.tag.name.ptr); /* (token->data.tag.self_closing) ? "(self-closing) " : "", (token->data.tag.n_attributes > 0) ? "attributes:" : ""); */ for (i = 0; i < token->data.tag.n_attributes; i++) { p += lws_snprintf(p, end - p, " %.*s='%.*s'\n", (int) token->data.tag.attributes[i].name.len, token->data.tag.attributes[i].name.ptr, (int) token->data.tag.attributes[i].value.len, token->data.tag.attributes[i].value.ptr); } p += lws_snprintf(p, end - p, ">"); break; case HUBBUB_TOKEN_COMMENT: p += lws_snprintf(p, end - p, "\n", (int) token->data.comment.len, token->data.comment.ptr); break; case HUBBUB_TOKEN_CHARACTER: if (token->data.character.len == 1) { if (*token->data.character.ptr == '<') { p += lws_snprintf(p, end - p, "<"); break; } if (*token->data.character.ptr == '>') { p += lws_snprintf(p, end - p, ">"); break; } if (*token->data.character.ptr == '&') { p += lws_snprintf(p, end - p, "&"); break; } } p += lws_snprintf(p, end - p, "%.*s", (int) token->data.character.len, token->data.character.ptr); break; case HUBBUB_TOKEN_EOF: p += lws_snprintf(p, end - p, "\n"); break; } if (r->wsi->protocol_bind_balance && user_callback_handle_rxflow(r->wsi->protocol->callback, r->wsi, LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ, r->wsi->user_space, start, p - start)) return -1; return HUBBUB_OK; } #endif #endif struct lws * lws_http_client_connect_via_info2(struct lws *wsi) { struct client_info_stash *stash = wsi->stash; lwsl_debug("%s: %p (stash %p)\n", __func__, wsi, stash); if (!stash) return wsi; wsi->opaque_user_data = wsi->stash->opaque_user_data; if (stash->method && !strcmp(stash->method, "RAW")) goto no_ah; /* * we're not necessarily in a position to action these right away, * stash them... we only need during connect phase so into a temp * allocated stash */ if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_PEER_ADDRESS, stash->address)) goto bail1; if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_URI, stash->path)) goto bail1; if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_HOST, stash->host)) goto bail1; if (stash->origin) if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_ORIGIN, stash->origin)) goto bail1; /* * this is a list of protocols we tell the server we're okay with * stash it for later when we compare server response with it */ if (stash->protocol) if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_SENT_PROTOCOLS, stash->protocol)) goto bail1; if (stash->method) if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_METHOD, stash->method)) goto bail1; if (stash->iface) if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_IFACE, stash->iface)) goto bail1; if (stash->alpn) if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_ALPN, stash->alpn)) goto bail1; #if defined(LWS_WITH_SOCKS5) if (!wsi->vhost->socks_proxy_port) lws_client_stash_destroy(wsi); #endif no_ah: wsi->context->count_wsi_allocated++; return lws_client_connect_2(wsi); bail1: #if defined(LWS_WITH_SOCKS5) if (!wsi->vhost->socks_proxy_port) lws_free_set_NULL(wsi->stash); #endif return NULL; } #if defined(LWS_WITH_SOCKS5) int socks_generate_msg(struct lws *wsi, enum socks_msg_type type, ssize_t *msg_len) { struct lws_context *context = wsi->context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; uint8_t *p = pt->serv_buf, *end = &p[context->pt_serv_buf_size]; ssize_t n, passwd_len; short net_num; char *cp; switch (type) { case SOCKS_MSG_GREETING: if (lws_ptr_diff(end, p) < 4) return 1; /* socks version, version 5 only */ *p++ = SOCKS_VERSION_5; /* number of methods */ *p++ = 2; /* username password method */ *p++ = SOCKS_AUTH_USERNAME_PASSWORD; /* no authentication method */ *p++ = SOCKS_AUTH_NO_AUTH; break; case SOCKS_MSG_USERNAME_PASSWORD: n = strlen(wsi->vhost->socks_user); passwd_len = strlen(wsi->vhost->socks_password); if (n > 254 || passwd_len > 254) return 1; if (lws_ptr_diff(end, p) < 3 + n + passwd_len) return 1; /* the subnegotiation version */ *p++ = SOCKS_SUBNEGOTIATION_VERSION_1; /* length of the user name */ *p++ = n; /* user name */ memcpy(p, wsi->vhost->socks_user, n); p += n; /* length of the password */ *p++ = passwd_len; /* password */ memcpy(p, wsi->vhost->socks_password, passwd_len); p += passwd_len; break; case SOCKS_MSG_CONNECT: n = strlen(wsi->stash->address); if (n > 254 || lws_ptr_diff(end, p) < 5 + n + 2) return 1; cp = (char *)&net_num; /* socks version */ *p++ = SOCKS_VERSION_5; /* socks command */ *p++ = SOCKS_COMMAND_CONNECT; /* reserved */ *p++ = 0; /* address type */ *p++ = SOCKS_ATYP_DOMAINNAME; /* length of ---> */ *p++ = n; /* the address we tell SOCKS proxy to connect to */ memcpy(p, wsi->stash->address, n); p += n; net_num = htons(wsi->c_port); /* the port we tell SOCKS proxy to connect to */ *p++ = cp[0]; *p++ = cp[1]; break; default: return 1; } *msg_len = lws_ptr_diff(p, pt->serv_buf); return 0; } #endif libwebsockets-3.2.1/lib/roles/http/client/client.c000066400000000000000000001025341357643561300221500ustar00rootroot00000000000000/* * libwebsockets - lib/client/client.c * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" LWS_VISIBLE LWS_EXTERN void lws_client_http_body_pending(struct lws *wsi, int something_left_to_send) { wsi->client_http_body_pending = !!something_left_to_send; } /* * return self, or queued client wsi we are acting on behalf of * * That is the TAIL of the queue (new queue elements are added at the HEAD) */ struct lws * lws_client_wsi_effective(struct lws *wsi) { struct lws_dll2 *tail = lws_dll2_get_tail(&wsi->dll2_cli_txn_queue_owner); if (!wsi->transaction_from_pipeline_queue || !tail) return wsi; return lws_container_of(tail, struct lws, dll2_cli_txn_queue); } /* * return self or the guy we are queued under * * REQUIRES VHOST LOCK HELD */ static struct lws * _lws_client_wsi_master(struct lws *wsi) { struct lws_dll2_owner *o = wsi->dll2_cli_txn_queue.owner; if (!o) return wsi; return lws_container_of(o, struct lws, dll2_cli_txn_queue_owner); } int lws_client_socket_service(struct lws *wsi, struct lws_pollfd *pollfd, struct lws *wsi_conn) { struct lws_context *context = wsi->context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; char *p = (char *)&pt->serv_buf[0]; struct lws *w; #if defined(LWS_WITH_TLS) char ebuf[128]; #endif const char *cce = NULL; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) ssize_t len = 0; unsigned char c; #endif char *sb = p; int n = 0; #if defined(LWS_WITH_SOCKS5) int conn_mode = 0, pending_timeout = 0; #endif if ((pollfd->revents & LWS_POLLOUT) && wsi->keepalive_active && wsi->dll2_cli_txn_queue_owner.head) { struct lws *wfound = NULL; lwsl_debug("%s: pollout HANDSHAKE2\n", __func__); /* * We have a transaction queued that wants to pipeline. * * We have to allow it to send headers strictly in the order * that it was queued, ie, tail-first. */ lws_vhost_lock(wsi->vhost); lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, wsi->dll2_cli_txn_queue_owner.head) { struct lws *w = lws_container_of(d, struct lws, dll2_cli_txn_queue); lwsl_debug("%s: %p states 0x%lx\n", __func__, w, (unsigned long)w->wsistate); if (lwsi_state(w) == LRS_H1C_ISSUE_HANDSHAKE2) wfound = w; } lws_end_foreach_dll_safe(d, d1); if (wfound) { /* * pollfd has the master sockfd in it... we * need to use that in HANDSHAKE2 to understand * which wsi to actually write on */ if (lws_client_socket_service(wfound, pollfd, wsi) < 0) { /* closed */ lws_vhost_unlock(wsi->vhost); return -1; } lws_callback_on_writable(wsi); } else lwsl_debug("%s: didn't find anything in txn q in HS2\n", __func__); lws_vhost_unlock(wsi->vhost); return 0; } switch (lwsi_state(wsi)) { case LRS_WAITING_CONNECT: /* * we are under PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE * timeout protection set in client-handshake.c */ if (!lws_client_connect_2(wsi)) { /* closed */ lwsl_client("closed\n"); return -1; } /* either still pending connection, or changed mode */ return 0; #if defined(LWS_WITH_SOCKS5) /* SOCKS Greeting Reply */ case LRS_WAITING_SOCKS_GREETING_REPLY: case LRS_WAITING_SOCKS_AUTH_REPLY: case LRS_WAITING_SOCKS_CONNECT_REPLY: /* handle proxy hung up on us */ if (pollfd->revents & LWS_POLLHUP) { lwsl_warn("SOCKS connection %p (fd=%d) dead\n", (void *)wsi, pollfd->fd); cce = "socks conn dead"; goto bail3; } n = recv(wsi->desc.sockfd, sb, context->pt_serv_buf_size, 0); if (n < 0) { if (LWS_ERRNO == LWS_EAGAIN) { lwsl_debug("SOCKS read EAGAIN, retrying\n"); return 0; } lwsl_err("ERROR reading from SOCKS socket\n"); cce = "socks recv fail"; goto bail3; } switch (lwsi_state(wsi)) { case LRS_WAITING_SOCKS_GREETING_REPLY: if (pt->serv_buf[0] != SOCKS_VERSION_5) goto socks_reply_fail; if (pt->serv_buf[1] == SOCKS_AUTH_NO_AUTH) { lwsl_client("SOCKS GR: No Auth Method\n"); if (socks_generate_msg(wsi, SOCKS_MSG_CONNECT, &len)) goto socks_send_msg_fail; conn_mode = LRS_WAITING_SOCKS_CONNECT_REPLY; pending_timeout = PENDING_TIMEOUT_AWAITING_SOCKS_CONNECT_REPLY; goto socks_send; } if (pt->serv_buf[1] == SOCKS_AUTH_USERNAME_PASSWORD) { lwsl_client("SOCKS GR: User/Pw Method\n"); if (socks_generate_msg(wsi, SOCKS_MSG_USERNAME_PASSWORD, &len)) goto socks_send_msg_fail; conn_mode = LRS_WAITING_SOCKS_AUTH_REPLY; pending_timeout = PENDING_TIMEOUT_AWAITING_SOCKS_AUTH_REPLY; goto socks_send; } goto socks_reply_fail; case LRS_WAITING_SOCKS_AUTH_REPLY: if (pt->serv_buf[0] != SOCKS_SUBNEGOTIATION_VERSION_1 || pt->serv_buf[1] != SOCKS_SUBNEGOTIATION_STATUS_SUCCESS) goto socks_reply_fail; lwsl_client("SOCKS password OK, sending connect\n"); if (socks_generate_msg(wsi, SOCKS_MSG_CONNECT, &len)) { socks_send_msg_fail: cce = "socks gen msg fail"; goto bail3; } conn_mode = LRS_WAITING_SOCKS_CONNECT_REPLY; pending_timeout = PENDING_TIMEOUT_AWAITING_SOCKS_CONNECT_REPLY; socks_send: n = send(wsi->desc.sockfd, (char *)pt->serv_buf, len, MSG_NOSIGNAL); if (n < 0) { lwsl_debug("ERROR writing to socks proxy\n"); cce = "socks write fail"; goto bail3; } lws_set_timeout(wsi, pending_timeout, AWAITING_TIMEOUT); lwsi_set_state(wsi, conn_mode); break; socks_reply_fail: lwsl_notice("socks reply: v%d, err %d\n", pt->serv_buf[0], pt->serv_buf[1]); cce = "socks reply fail"; goto bail3; case LRS_WAITING_SOCKS_CONNECT_REPLY: if (pt->serv_buf[0] != SOCKS_VERSION_5 || pt->serv_buf[1] != SOCKS_REQUEST_REPLY_SUCCESS) goto socks_reply_fail; lwsl_client("socks connect OK\n"); /* free stash since we are done with it */ lws_client_stash_destroy(wsi); if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_PEER_ADDRESS, wsi->vhost->socks_proxy_address)) { cce = "socks connect fail"; goto bail3; } wsi->c_port = wsi->vhost->socks_proxy_port; /* clear his proxy connection timeout */ lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); goto start_ws_handshake; default: break; } break; #endif case LRS_WAITING_PROXY_REPLY: /* handle proxy hung up on us */ if (pollfd->revents & LWS_POLLHUP) { lwsl_warn("Proxy connection %p (fd=%d) dead\n", (void *)wsi, pollfd->fd); cce = "proxy conn dead"; goto bail3; } n = recv(wsi->desc.sockfd, sb, context->pt_serv_buf_size, 0); if (n < 0) { if (LWS_ERRNO == LWS_EAGAIN) { lwsl_debug("Proxy read EAGAIN... retrying\n"); return 0; } lwsl_err("ERROR reading from proxy socket\n"); cce = "proxy read err"; goto bail3; } pt->serv_buf[13] = '\0'; if (n < 13 || (strncmp(sb, "HTTP/1.0 200 ", 13) && strncmp(sb, "HTTP/1.1 200 ", 13))) { lwsl_err("%s: ERROR proxy did not reply with h1\n", __func__); /* lwsl_hexdump_notice(sb, n); */ cce = "proxy not h1"; goto bail3; } lwsl_info("%s: proxy connection extablished\n", __func__); /* clear his proxy connection timeout */ lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); /* fallthru */ case LRS_H1C_ISSUE_HANDSHAKE: /* * we are under PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE * timeout protection set in client-handshake.c * * take care of our lws_callback_on_writable * happening at a time when there's no real connection yet */ #if defined(LWS_WITH_SOCKS5) start_ws_handshake: #endif if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) return -1; #if defined(LWS_WITH_TLS) /* we can retry this... just cook the SSL BIO the first time */ if ((wsi->tls.use_ssl & LCCSCF_USE_SSL) && !wsi->tls.ssl && lws_ssl_client_bio_create(wsi) < 0) { cce = "bio_create failed"; goto bail3; } if (wsi->tls.use_ssl & LCCSCF_USE_SSL) { n = lws_ssl_client_connect1(wsi); if (!n) return 0; if (n < 0) { cce = "lws_ssl_client_connect1 failed"; goto bail3; } } else wsi->tls.ssl = NULL; /* fallthru */ case LRS_WAITING_SSL: if (wsi->tls.use_ssl & LCCSCF_USE_SSL) { n = lws_ssl_client_connect2(wsi, ebuf, sizeof(ebuf)); if (!n) return 0; if (n < 0) { cce = ebuf; goto bail3; } } else wsi->tls.ssl = NULL; #endif #if defined (LWS_WITH_HTTP2) if (wsi->client_h2_alpn) { /* * We connected to the server and set up tls, and * negotiated "h2". * * So this is it, we are an h2 master client connection * now, not an h1 client connection. */ #if defined (LWS_WITH_TLS) lws_tls_server_conn_alpn(wsi); #endif /* send the H2 preface to legitimize the connection */ if (lws_h2_issue_preface(wsi)) { cce = "error sending h2 preface"; goto bail3; } break; } #endif lwsi_set_state(wsi, LRS_H1C_ISSUE_HANDSHAKE2); lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND, context->timeout_secs); /* fallthru */ case LRS_H1C_ISSUE_HANDSHAKE2: p = lws_generate_client_handshake(wsi, p); if (p == NULL) { if (wsi->role_ops == &role_ops_raw_skt || wsi->role_ops == &role_ops_raw_file) return 0; lwsl_err("Failed to generate handshake for client\n"); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "chs"); return 0; } /* send our request to the server */ lws_latency_pre(context, wsi); w = _lws_client_wsi_master(wsi); lwsl_info("%s: HANDSHAKE2: %p: sending headers on %p " "(wsistate 0x%lx 0x%lx), w sock %d, wsi sock %d\n", __func__, wsi, w, (unsigned long)wsi->wsistate, (unsigned long)w->wsistate, w->desc.sockfd, wsi->desc.sockfd); n = lws_ssl_capable_write(w, (unsigned char *)sb, (int)(p - sb)); lws_latency(context, wsi, "send lws_issue_raw", n, n == p - sb); switch (n) { case LWS_SSL_CAPABLE_ERROR: lwsl_debug("ERROR writing to client socket\n"); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "cws"); return 0; case LWS_SSL_CAPABLE_MORE_SERVICE: lws_callback_on_writable(wsi); break; } if (wsi->client_http_body_pending) { lwsl_debug("body pending\n"); lwsi_set_state(wsi, LRS_ISSUE_HTTP_BODY); lws_set_timeout(wsi, PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD, context->timeout_secs); #if defined(LWS_WITH_HTTP_PROXY) if (wsi->http.proxy_clientside) lws_callback_on_writable(wsi); #endif /* user code must ask for writable callback */ break; } lwsi_set_state(wsi, LRS_WAITING_SERVER_REPLY); wsi->hdr_parsing_completed = 0; if (lwsi_state(w) == LRS_IDLING) { lwsi_set_state(w, LRS_WAITING_SERVER_REPLY); w->hdr_parsing_completed = 0; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) w->http.ah->parser_state = WSI_TOKEN_NAME_PART; w->http.ah->lextable_pos = 0; #if defined(LWS_WITH_CUSTOM_HEADERS) w->http.ah->unk_pos = 0; #endif /* If we're (re)starting on hdr, need other implied init */ wsi->http.ah->ues = URIES_IDLE; #endif } lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE, wsi->context->timeout_secs); lws_callback_on_writable(w); goto client_http_body_sent; case LRS_ISSUE_HTTP_BODY: #if defined(LWS_WITH_HTTP_PROXY) if (wsi->http.proxy_clientside) { lws_callback_on_writable(wsi); break; } #endif if (wsi->client_http_body_pending) { //lws_set_timeout(wsi, // PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD, // context->timeout_secs); /* user code must ask for writable callback */ break; } client_http_body_sent: #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) /* prepare ourselves to do the parsing */ wsi->http.ah->parser_state = WSI_TOKEN_NAME_PART; wsi->http.ah->lextable_pos = 0; #if defined(LWS_WITH_CUSTOM_HEADERS) wsi->http.ah->unk_pos = 0; #endif #endif lwsi_set_state(wsi, LRS_WAITING_SERVER_REPLY); lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE, context->timeout_secs); break; case LRS_WAITING_SERVER_REPLY: /* * handle server hanging up on us... * but if there is POLLIN waiting, handle that first */ if ((pollfd->revents & (LWS_POLLIN | LWS_POLLHUP)) == LWS_POLLHUP) { lwsl_debug("Server connection %p (fd=%d) dead\n", (void *)wsi, pollfd->fd); cce = "Peer hung up"; goto bail3; } if (!(pollfd->revents & LWS_POLLIN)) break; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) /* interpret the server response * * HTTP/1.1 101 Switching Protocols * Upgrade: websocket * Connection: Upgrade * Sec-WebSocket-Accept: me89jWimTRKTWwrS3aRrL53YZSo= * Sec-WebSocket-Nonce: AQIDBAUGBwgJCgsMDQ4PEC== * Sec-WebSocket-Protocol: chat * * we have to take some care here to only take from the * socket bytewise. The browser may (and has been seen to * in the case that onopen() performs websocket traffic) * coalesce both handshake response and websocket traffic * in one packet, since at that point the connection is * definitively ready from browser pov. */ len = 1; while (wsi->http.ah->parser_state != WSI_PARSING_COMPLETE && len > 0) { int plen = 1; n = lws_ssl_capable_read(wsi, &c, 1); lws_latency(context, wsi, "send lws_issue_raw", n, n == 1); switch (n) { case 0: case LWS_SSL_CAPABLE_ERROR: cce = "read failed"; goto bail3; case LWS_SSL_CAPABLE_MORE_SERVICE: return 0; } if (lws_parse(wsi, &c, &plen)) { lwsl_warn("problems parsing header\n"); cce = "problems parsing header"; goto bail3; } } /* * hs may also be coming in multiple packets, there is a 5-sec * libwebsocket timeout still active here too, so if parsing did * not complete just wait for next packet coming in this state */ if (wsi->http.ah->parser_state != WSI_PARSING_COMPLETE) break; #endif /* * otherwise deal with the handshake. If there's any * packet traffic already arrived we'll trigger poll() again * right away and deal with it that way */ return lws_client_interpret_server_handshake(wsi); bail3: lwsl_info("closing conn at LWS_CONNMODE...SERVER_REPLY\n"); if (cce) lwsl_info("reason: %s\n", cce); lws_inform_client_conn_fail(wsi, (void *)cce, strlen(cce)); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "cbail3"); return -1; default: break; } return 0; } #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed_client(struct lws *wsi) { struct lws *wsi_eff = lws_client_wsi_effective(wsi); lwsl_info("%s: wsi: %p, wsi_eff: %p (%s)\n", __func__, wsi, wsi_eff, wsi_eff->protocol->name); if (user_callback_handle_rxflow(wsi_eff->protocol->callback, wsi_eff, LWS_CALLBACK_COMPLETED_CLIENT_HTTP, wsi_eff->user_space, NULL, 0)) { lwsl_debug("%s: Completed call returned nonzero (role 0x%lx)\n", __func__, (unsigned long)lwsi_role(wsi_eff)); return -1; } /* * Are we constitutionally capable of having a queue, ie, we are on * the "active client connections" list? * * If not, that's it for us. */ if (lws_dll2_is_detached(&wsi->dll_cli_active_conns)) return -1; /* if this was a queued guy, close him and remove from queue */ if (wsi->transaction_from_pipeline_queue) { lwsl_debug("closing queued wsi %p\n", wsi_eff); /* so the close doesn't trigger a CCE */ wsi_eff->already_did_cce = 1; __lws_close_free_wsi(wsi_eff, LWS_CLOSE_STATUS_CLIENT_TRANSACTION_DONE, "queued client done"); } _lws_header_table_reset(wsi->http.ah); /* after the first one, they can only be coming from the queue */ wsi->transaction_from_pipeline_queue = 1; wsi->http.rx_content_length = 0; wsi->hdr_parsing_completed = 0; /* is there a new tail after removing that one? */ wsi_eff = lws_client_wsi_effective(wsi); /* * Do we have something pipelined waiting? * it's OK if he hasn't managed to send his headers yet... he's next * in line to do that... */ if (wsi_eff == wsi) { /* * Nothing pipelined... we should hang around a bit * in case something turns up... */ lwsl_info("%s: nothing pipelined waiting\n", __func__); lwsi_set_state(wsi, LRS_IDLING); lws_set_timeout(wsi, PENDING_TIMEOUT_CLIENT_CONN_IDLE, 5); return 0; } /* * H1: we can serialize the queued guys into the same ah * H2: everybody needs their own ah until their own STREAM_END */ /* otherwise set ourselves up ready to go again */ lwsi_set_state(wsi, LRS_WAITING_SERVER_REPLY); wsi->http.ah->parser_state = WSI_TOKEN_NAME_PART; wsi->http.ah->lextable_pos = 0; #if defined(LWS_WITH_CUSTOM_HEADERS) wsi->http.ah->unk_pos = 0; #endif lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE, wsi->context->timeout_secs); /* If we're (re)starting on headers, need other implied init */ wsi->http.ah->ues = URIES_IDLE; lwsl_info("%s: %p: new queued transaction as %p\n", __func__, wsi, wsi_eff); lws_callback_on_writable(wsi); return 0; } LWS_VISIBLE LWS_EXTERN unsigned int lws_http_client_http_response(struct lws *_wsi) { struct lws *wsi; unsigned int resp; if (_wsi->http.ah && _wsi->http.ah->http_response) return _wsi->http.ah->http_response; lws_vhost_lock(_wsi->vhost); wsi = _lws_client_wsi_master(_wsi); resp = wsi->http.ah->http_response; lws_vhost_unlock(_wsi->vhost); return resp; } #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) int lws_client_interpret_server_handshake(struct lws *wsi) { int n, port = 0, ssl = 0; int close_reason = LWS_CLOSE_STATUS_PROTOCOL_ERR; const char *prot, *ads = NULL, *path, *cce = NULL; struct allocated_headers *ah; struct lws *w = lws_client_wsi_effective(wsi); char *p, *q; char new_path[300]; lws_client_stash_destroy(wsi); ah = wsi->http.ah; if (!wsi->do_ws) { /* we are being an http client... */ #if defined(LWS_ROLE_H2) if (wsi->client_h2_alpn || wsi->client_h2_substream) { lwsl_debug("%s: %p: transitioning to h2 client\n", __func__, wsi); lws_role_transition(wsi, LWSIFR_CLIENT, LRS_ESTABLISHED, &role_ops_h2); } else #endif { #if defined(LWS_ROLE_H1) { lwsl_debug("%s: %p: transitioning to h1 client\n", __func__, wsi); lws_role_transition(wsi, LWSIFR_CLIENT, LRS_ESTABLISHED, &role_ops_h1); } #else return -1; #endif } wsi->http.ah = ah; ah->http_response = 0; } /* * well, what the server sent looked reasonable for syntax. * Now let's confirm it sent all the necessary headers * * http (non-ws) client will expect something like this * * HTTP/1.0.200 * server:.libwebsockets * content-type:.text/html * content-length:.17703 * set-cookie:.test=LWS_1456736240_336776_COOKIE;Max-Age=360000 */ wsi->http.conn_type = HTTP_CONNECTION_KEEP_ALIVE; if (!wsi->client_h2_substream) { p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP); if (wsi->do_ws && !p) { lwsl_info("no URI\n"); cce = "HS: URI missing"; goto bail3; } if (!p) { p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP1_0); wsi->http.conn_type = HTTP_CONNECTION_CLOSE; } if (!p) { cce = "HS: URI missing"; lwsl_info("no URI\n"); goto bail3; } } else { p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_STATUS); if (!p) { cce = "HS: :status missing"; lwsl_info("no status\n"); goto bail3; } } n = atoi(p); if (ah) ah->http_response = n; if ( #if defined(LWS_WITH_HTTP_PROXY) !wsi->http.proxy_clientside && #endif (n == 301 || n == 302 || n == 303 || n == 307 || n == 308)) { p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_LOCATION); if (!p) { cce = "HS: Redirect code but no Location"; goto bail3; } /* Relative reference absolute path */ if (p[0] == '/') { #if defined(LWS_WITH_TLS) ssl = wsi->tls.use_ssl & LCCSCF_USE_SSL; #endif ads = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_PEER_ADDRESS); port = wsi->c_port; /* +1 as lws_client_reset expects leading / omitted */ path = p + 1; } /* Absolute (Full) URI */ else if (strchr(p, ':')) { if (lws_parse_uri(p, &prot, &ads, &port, &path)) { cce = "HS: URI did not parse"; goto bail3; } if (!strcmp(prot, "wss") || !strcmp(prot, "https")) ssl = 1; } /* Relative reference relative path */ else { /* This doesn't try to calculate an absolute path, * that will be left to the server */ #if defined(LWS_WITH_TLS) ssl = wsi->tls.use_ssl & LCCSCF_USE_SSL; #endif ads = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_PEER_ADDRESS); port = wsi->c_port; /* +1 as lws_client_reset expects leading / omitted */ path = new_path + 1; if (lws_hdr_simple_ptr(wsi,_WSI_TOKEN_CLIENT_URI)) lws_strncpy(new_path, lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_URI), sizeof(new_path)); else { new_path[0] = '/'; new_path[1] = '\0'; } q = strrchr(new_path, '/'); if (q) lws_strncpy(q + 1, p, sizeof(new_path) - (q - new_path) - 1); else path = p; } #if defined(LWS_WITH_TLS) if ((wsi->tls.use_ssl & LCCSCF_USE_SSL) && !ssl) { cce = "HS: Redirect attempted SSL downgrade"; goto bail3; } #endif if (!ads) /* make coverity happy */ { cce = "no ads"; goto bail3; } if (!lws_client_reset(&wsi, ssl, ads, port, path, ads)) { /* there are two ways to fail out with NULL return... * simple, early problem where the wsi is intact, or * we went through with the reconnect attempt and the * wsi is already closed. In the latter case, the wsi * has beet set to NULL additionally. */ lwsl_err("Redirect failed\n"); cce = "HS: Redirect failed"; if (wsi) goto bail3; return 1; } return 0; } if (!wsi->do_ws) { /* if h1 KA is allowed, enable the queued pipeline guys */ if (!wsi->client_h2_alpn && !wsi->client_h2_substream && w == wsi) { /* ie, coming to this for the first time */ if (wsi->http.conn_type == HTTP_CONNECTION_KEEP_ALIVE) wsi->keepalive_active = 1; else { /* * Ugh... now the main http connection has seen * both sides, we learn the server doesn't * support keepalive. * * That means any guys queued on us are going * to have to be restarted from connect2 with * their own connections. */ /* * stick around telling any new guys they can't * pipeline to this server */ wsi->keepalive_rejected = 1; lws_vhost_lock(wsi->vhost); lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, wsi->dll2_cli_txn_queue_owner.head) { struct lws *ww = lws_container_of(d, struct lws, dll2_cli_txn_queue); /* remove him from our queue */ lws_dll2_remove(&ww->dll2_cli_txn_queue); /* give up on pipelining */ ww->client_pipeline = 0; /* go back to "trying to connect" state */ lws_role_transition(ww, LWSIFR_CLIENT, LRS_UNCONNECTED, #if defined(LWS_ROLE_H1) &role_ops_h1); #else #if defined (LWS_ROLE_H2) &role_ops_h2); #else &role_ops_raw); #endif #endif ww->user_space = NULL; } lws_end_foreach_dll_safe(d, d1); lws_vhost_unlock(wsi->vhost); } } #ifdef LWS_WITH_HTTP_PROXY wsi->http.perform_rewrite = 0; if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE)) { if (!strncmp(lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE), "text/html", 9)) wsi->http.perform_rewrite = 0; } #endif /* allocate the per-connection user memory (if any) */ if (lws_ensure_user_space(wsi)) { lwsl_err("Problem allocating wsi user mem\n"); cce = "HS: OOM"; goto bail2; } /* he may choose to send us stuff in chunked transfer-coding */ wsi->chunked = 0; wsi->chunk_remaining = 0; /* ie, next thing is chunk size */ if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_TRANSFER_ENCODING)) { wsi->chunked = !strcmp(lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_TRANSFER_ENCODING), "chunked"); /* first thing is hex, after payload there is crlf */ wsi->chunk_parser = ELCP_HEX; } if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) { wsi->http.rx_content_length = atoll(lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)); lwsl_info("%s: incoming content length %llu\n", __func__, (unsigned long long) wsi->http.rx_content_length); wsi->http.rx_content_remain = wsi->http.rx_content_length; } else /* can't do 1.1 without a content length or chunked */ if (!wsi->chunked) wsi->http.conn_type = HTTP_CONNECTION_CLOSE; /* * we seem to be good to go, give client last chance to check * headers and OK it */ if (w->protocol->callback(w, LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH, w->user_space, NULL, 0)) { cce = "HS: disallowed by client filter"; goto bail2; } /* clear his proxy connection timeout */ lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); wsi->rxflow_change_to = LWS_RXFLOW_ALLOW; /* call him back to inform him he is up */ if (w->protocol->callback(w, LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP, w->user_space, NULL, 0)) { cce = "HS: disallowed at ESTABLISHED"; goto bail3; } /* * for pipelining, master needs to keep his ah... guys who * queued on him can drop it now though. */ if (w != wsi) /* free up parsing allocations for queued guy */ lws_header_table_detach(w, 0); lwsl_info("%s: client connection up\n", __func__); /* * Did we get a response from the server with an explicit * content-length of zero? If so, this transaction is already * completed at the end of the header processing... */ if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH) && !wsi->http.rx_content_length) return !!lws_http_transaction_completed_client(wsi); return 0; } #if defined(LWS_ROLE_WS) switch (lws_client_ws_upgrade(wsi, &cce)) { case 2: goto bail2; case 3: goto bail3; } return 0; #endif bail3: close_reason = LWS_CLOSE_STATUS_NOSTATUS; bail2: if (wsi->protocol) { n = 0; if (cce) n = (int)strlen(cce); lws_inform_client_conn_fail(wsi, (void *)cce, (unsigned int)n); } lwsl_info("closing connection (prot %s) " "due to bail2 connection error: %s\n", wsi->protocol ? wsi->protocol->name : "unknown", cce); /* closing will free up his parsing allocations */ lws_close_free_wsi(wsi, close_reason, "c hs interp"); return 1; } #endif char * lws_generate_client_handshake(struct lws *wsi, char *pkt) { char *p = pkt; const char *meth; const char *pp = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_SENT_PROTOCOLS); meth = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_METHOD); if (!meth) { meth = "GET"; wsi->do_ws = 1; } else { wsi->do_ws = 0; } if (!strcmp(meth, "RAW")) { lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); lwsl_notice("client transition to raw\n"); if (pp) { const struct lws_protocols *pr; pr = lws_vhost_name_to_protocol(wsi->vhost, pp); if (!pr) { lwsl_err("protocol %s not enabled on vhost\n", pp); return NULL; } lws_bind_protocol(wsi, pr, __func__); } if ((wsi->protocol->callback)(wsi, LWS_CALLBACK_RAW_ADOPT, wsi->user_space, NULL, 0)) return NULL; lws_role_transition(wsi, LWSIFR_CLIENT, LRS_ESTABLISHED, &role_ops_raw_skt); lws_header_table_detach(wsi, 1); return NULL; } /* * 04 example client handshake * * GET /chat HTTP/1.1 * Host: server.example.com * Upgrade: websocket * Connection: Upgrade * Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== * Sec-WebSocket-Origin: http://example.com * Sec-WebSocket-Protocol: chat, superchat * Sec-WebSocket-Version: 4 */ p += lws_snprintf(p, 2048, "%s %s HTTP/1.1\x0d\x0a", meth, lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_URI)); p += lws_snprintf(p, 64, "Pragma: no-cache\x0d\x0a" "Cache-Control: no-cache\x0d\x0a"); p += lws_snprintf(p, 128, "Host: %s\x0d\x0a", lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_HOST)); if (lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_ORIGIN)) { if (lws_check_opt(wsi->context->options, LWS_SERVER_OPTION_JUST_USE_RAW_ORIGIN)) p += lws_snprintf(p, 128, "Origin: %s\x0d\x0a", lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_ORIGIN)); else p += lws_snprintf(p, 128, "Origin: http://%s\x0d\x0a", lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_ORIGIN)); } #if defined(LWS_WITH_HTTP_PROXY) if (wsi->parent && lws_hdr_total_length(wsi->parent, WSI_TOKEN_HTTP_CONTENT_LENGTH)) { p += lws_snprintf(p, 128, "Content-Length: %s\x0d\x0a", lws_hdr_simple_ptr(wsi->parent, WSI_TOKEN_HTTP_CONTENT_LENGTH)); if (atoi(lws_hdr_simple_ptr(wsi->parent, WSI_TOKEN_HTTP_CONTENT_LENGTH))) wsi->client_http_body_pending = 1; } if (wsi->parent && lws_hdr_total_length(wsi->parent, WSI_TOKEN_HTTP_AUTHORIZATION)) { p += lws_snprintf(p, 128, "Authorization: %s\x0d\x0a", lws_hdr_simple_ptr(wsi->parent, WSI_TOKEN_HTTP_AUTHORIZATION)); } if (wsi->parent && lws_hdr_total_length(wsi->parent, WSI_TOKEN_HTTP_CONTENT_TYPE)) { p += lws_snprintf(p, 128, "Content-Type: %s\x0d\x0a", lws_hdr_simple_ptr(wsi->parent, WSI_TOKEN_HTTP_CONTENT_TYPE)); } #endif #if defined(LWS_ROLE_WS) if (wsi->do_ws) { const char *conn1 = ""; // if (!wsi->client_pipeline) // conn1 = "close, "; p = lws_generate_client_ws_handshake(wsi, p, conn1); } else #endif { if (!wsi->client_pipeline) p += lws_snprintf(p, 64, "connection: close\x0d\x0a"); } /* give userland a chance to append, eg, cookies */ if (wsi->protocol->callback(wsi, LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER, wsi->user_space, &p, (pkt + wsi->context->pt_serv_buf_size) - p - 12)) return NULL; p += lws_snprintf(p, 4, "\x0d\x0a"); // puts(pkt); return p; } #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) LWS_VISIBLE int lws_http_client_read(struct lws *wsi, char **buf, int *len) { int rlen, n; rlen = lws_ssl_capable_read(wsi, (unsigned char *)*buf, *len); *len = 0; // lwsl_notice("%s: rlen %d\n", __func__, rlen); /* allow the source to signal he has data again next time */ if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) return -1; if (rlen == LWS_SSL_CAPABLE_ERROR) { lwsl_debug("%s: SSL capable error\n", __func__); return -1; } if (rlen <= 0) return 0; *len = rlen; wsi->client_rx_avail = 0; /* * server may insist on transfer-encoding: chunked, * so http client must deal with it */ spin_chunks: while (wsi->chunked && (wsi->chunk_parser != ELCP_CONTENT) && *len) { switch (wsi->chunk_parser) { case ELCP_HEX: if ((*buf)[0] == '\x0d') { wsi->chunk_parser = ELCP_CR; break; } n = char_to_hex((*buf)[0]); if (n < 0) { lwsl_info("%s: chunking failure\n", __func__); return -1; } wsi->chunk_remaining <<= 4; wsi->chunk_remaining |= n; break; case ELCP_CR: if ((*buf)[0] != '\x0a') { lwsl_info("%s: chunking failure\n", __func__); return -1; } wsi->chunk_parser = ELCP_CONTENT; lwsl_info("chunk %d\n", wsi->chunk_remaining); if (wsi->chunk_remaining) break; lwsl_info("final chunk\n"); goto completed; case ELCP_CONTENT: break; case ELCP_POST_CR: if ((*buf)[0] != '\x0d') { lwsl_info("%s: chunking failure\n", __func__); return -1; } wsi->chunk_parser = ELCP_POST_LF; break; case ELCP_POST_LF: if ((*buf)[0] != '\x0a') { lwsl_info("%s: chunking failure\n", __func__); return -1; } wsi->chunk_parser = ELCP_HEX; wsi->chunk_remaining = 0; break; } (*buf)++; (*len)--; } if (wsi->chunked && !wsi->chunk_remaining) return 0; if (wsi->http.rx_content_remain && wsi->http.rx_content_remain < (unsigned int)*len) n = (int)wsi->http.rx_content_remain; else n = *len; if (wsi->chunked && wsi->chunk_remaining && wsi->chunk_remaining < n) n = wsi->chunk_remaining; #if defined(LWS_WITH_HTTP_PROXY) && defined(LWS_WITH_HUBBUB) /* hubbub */ if (wsi->http.perform_rewrite) lws_rewrite_parse(wsi->http.rw, (unsigned char *)*buf, n); else #endif { struct lws *wsi_eff = lws_client_wsi_effective(wsi); if ( #if defined(LWS_WITH_HTTP_PROXY) !wsi_eff->protocol_bind_balance == !!wsi_eff->http.proxy_clientside && #else !!wsi_eff->protocol_bind_balance && #endif user_callback_handle_rxflow(wsi_eff->protocol->callback, wsi_eff, LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ, wsi_eff->user_space, *buf, n)) { lwsl_info("%s: RECEIVE_CLIENT_HTTP_READ returned -1\n", __func__); return -1; } } if (wsi->chunked && wsi->chunk_remaining) { (*buf) += n; wsi->chunk_remaining -= n; *len -= n; } if (wsi->chunked && !wsi->chunk_remaining) wsi->chunk_parser = ELCP_POST_CR; if (wsi->chunked && *len) goto spin_chunks; if (wsi->chunked) return 0; /* if we know the content length, decrement the content remaining */ if (wsi->http.rx_content_length > 0) wsi->http.rx_content_remain -= n; // lwsl_notice("rx_content_remain %lld, rx_content_length %lld\n", // wsi->http.rx_content_remain, wsi->http.rx_content_length); if (wsi->http.rx_content_remain || !wsi->http.rx_content_length) return 0; completed: if (lws_http_transaction_completed_client(wsi)) { lwsl_notice("%s: transaction completed says -1\n", __func__); return -1; } return 0; } #endif libwebsockets-3.2.1/lib/roles/http/compression/000077500000000000000000000000001357643561300216045ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/http/compression/README.md000066400000000000000000000014031357643561300230610ustar00rootroot00000000000000HTTP compression ---------------- This directory contains generic compression transforms that can be applied to specifically HTTP content streams, after the header, be it h1 or h2. The compression transforms expose an "ops" type struct and a compressor name as used by `content-encoding`... the ops struct definition can be found in ./private.h. Because the compression transform depends on being able to send on its output before it can process new input, the transform adds a new kind of buflist `wsi->buflist_comp` that represents pre-compression transform data ("input data" from the perspective of the compression transform) that was delivered to be processed but couldn't be accepted. Currently, zlib 'deflate' and brotli 'br' are supported on the server side. libwebsockets-3.2.1/lib/roles/http/compression/brotli/000077500000000000000000000000001357643561300230775ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/http/compression/brotli/brotli.c000066400000000000000000000056621357643561300245470ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" static int lcs_init_compression_brotli(lws_comp_ctx_t *ctx, int decomp) { ctx->is_decompression = decomp; if (!decomp) { ctx->u.br_en = BrotliEncoderCreateInstance(NULL, NULL, NULL); if (ctx->u.br_en) { BrotliEncoderSetParameter(ctx->u.br_en, BROTLI_PARAM_MODE, BROTLI_MODE_TEXT); BrotliEncoderSetParameter(ctx->u.br_en, BROTLI_PARAM_QUALITY, BROTLI_MIN_QUALITY); } } else ctx->u.br_de = BrotliDecoderCreateInstance(NULL, NULL, NULL); return !ctx->u.br_de; } static int lcs_process_brotli(lws_comp_ctx_t *ctx, const void *in, size_t *ilen_iused, void *out, size_t *olen_oused) { size_t a_in, a_out, t_out; const uint8_t *n_in; uint8_t *n_out; int n; n_in = (void *)in; a_in = *ilen_iused; a_out = *olen_oused; n_out = out; t_out = 0; if (!ctx->is_decompression) { if (!a_in && !BrotliEncoderHasMoreOutput(ctx->u.br_en)) { *olen_oused = 0; goto bail; } n = BROTLI_OPERATION_PROCESS; if (!ctx->buflist_comp && ctx->final_on_input_side) n = BROTLI_OPERATION_FINISH; if (BrotliEncoderCompressStream(ctx->u.br_en, n, &a_in, &n_in, &a_out, &n_out, &t_out) == BROTLI_FALSE) { lwsl_err("brotli encode failed\n"); return -1; } ctx->may_have_more = !a_out; } else { n = BrotliDecoderDecompressStream(ctx->u.br_de, &a_in, &n_in, &a_out, &n_out, &t_out); switch (n) { case BROTLI_DECODER_RESULT_ERROR: lwsl_err("brotli decoder error\n"); return -1; } } *ilen_iused -= a_in; *olen_oused -= a_out; bail: if (!ctx->is_decompression) return BrotliEncoderIsFinished(ctx->u.br_en); else return BrotliDecoderIsFinished(ctx->u.br_de); } static void lcs_destroy_brotli(lws_comp_ctx_t *ctx) { if (!ctx) return; if (!(*ctx).is_decompression) BrotliEncoderDestroyInstance((*ctx).u.br_en); else BrotliDecoderDestroyInstance((*ctx).u.br_de); (*ctx).u.generic_ctx_ptr = NULL; } struct lws_compression_support lcs_brotli = { /* .encoding_name */ "br", /* .init_compression */ lcs_init_compression_brotli, /* .process */ lcs_process_brotli, /* .destroy */ lcs_destroy_brotli, }; libwebsockets-3.2.1/lib/roles/http/compression/deflate/000077500000000000000000000000001357643561300232105ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/http/compression/deflate/deflate.c000066400000000000000000000053071357643561300247650ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" static int lcs_init_compression_deflate(lws_comp_ctx_t *ctx, int decomp) { int n; ctx->is_decompression = decomp; ctx->u.deflate = lws_malloc(sizeof(*ctx->u.deflate), __func__); if (!ctx->u.deflate) return 2; memset(ctx->u.deflate, 0, sizeof(*ctx->u.deflate)); if (!decomp && (n = deflateInit2(ctx->u.deflate, 1, Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY)) != Z_OK) { lwsl_err("deflate init failed: %d\n", n); lws_free_set_NULL(ctx->u.deflate); return 1; } if (decomp && inflateInit2(ctx->u.deflate, 16 + 15) != Z_OK) { lws_free_set_NULL(ctx->u.deflate); return 1; } return 0; } static int lcs_process_deflate(lws_comp_ctx_t *ctx, const void *in, size_t *ilen_iused, void *out, size_t *olen_oused) { size_t olen_oused_in = *olen_oused; int n; ctx->u.deflate->next_in = (void *)in; ctx->u.deflate->avail_in = *ilen_iused; ctx->u.deflate->next_out = out; ctx->u.deflate->avail_out = *olen_oused; if (!ctx->is_decompression) n = deflate(ctx->u.deflate, Z_SYNC_FLUSH); else n = inflate(ctx->u.deflate, Z_SYNC_FLUSH); switch (n) { case Z_NEED_DICT: case Z_STREAM_ERROR: case Z_DATA_ERROR: case Z_MEM_ERROR: lwsl_err("zlib error inflate %d\n", n); return -1; } *ilen_iused -= ctx->u.deflate->avail_in; *olen_oused -= ctx->u.deflate->avail_out; /* it's ambiguous with zlib... */ ctx->may_have_more = (*olen_oused == olen_oused_in); return n == Z_STREAM_END; } static void lcs_destroy_deflate(lws_comp_ctx_t *ctx) { if (!ctx) return; if (!(*ctx).is_decompression) deflateEnd((*ctx).u.deflate); else inflateEnd((*ctx).u.deflate); lws_free_set_NULL(ctx->u.deflate); } struct lws_compression_support lcs_deflate = { /* .encoding_name */ "deflate", /* .init_compression */ lcs_init_compression_deflate, /* .process */ lcs_process_deflate, /* .destroy */ lcs_destroy_deflate, }; libwebsockets-3.2.1/lib/roles/http/compression/private.h000066400000000000000000000050421357643561300234300ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is included from core/private.h if LWS_WITH_HTTP_STREAM_COMPRESSION */ #if defined(LWS_WITH_MINIZ) #include #else #include #endif #if defined(LWS_WITH_HTTP_BROTLI) #include #include #endif /* * struct holding union of all the available compression methods' context data, * and state if it's compressing or decompressing */ typedef struct lws_compression_ctx { union { #if defined(LWS_WITH_HTTP_BROTLI) BrotliEncoderState *br_en; BrotliDecoderState *br_de; #endif z_stream *deflate; void *generic_ctx_ptr; } u; struct lws_buflist *buflist_comp; unsigned int is_decompression:1; unsigned int final_on_input_side:1; unsigned int may_have_more:1; unsigned int chunking:1; } lws_comp_ctx_t; /* generic structure defining the interface to a compression method */ struct lws_compression_support { /** compression name as used by, eg, content-ecoding */ const char *encoding_name; /** create a compression context for the compression method, or NULL */ int (*init_compression)(lws_comp_ctx_t *ctx, int decomp); /** pass data into the context to be processed */ int (*process)(lws_comp_ctx_t *ctx, const void *in, size_t *ilen_iused, void *out, size_t *olen_oused); /** destroy the de/compression context */ void (*destroy)(lws_comp_ctx_t *ctx); }; extern struct lws_compression_support lcs_deflate; extern struct lws_compression_support lcs_brotli; int lws_http_compression_validate(struct lws *wsi); int lws_http_compression_transform(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol *wp, unsigned char **outbuf, size_t *olen_oused); void lws_http_compression_destroy(struct lws *wsi); libwebsockets-3.2.1/lib/roles/http/compression/stream.c000066400000000000000000000140701357643561300232450ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" /* compression methods listed in order of preference */ struct lws_compression_support *lcs_available[] = { #if defined(LWS_WITH_HTTP_BROTLI) &lcs_brotli, #endif &lcs_deflate, }; /* compute acceptable compression encodings while we still have an ah */ int lws_http_compression_validate(struct lws *wsi) { const char *a; size_t n; wsi->http.comp_accept_mask = 0; if (!wsi->http.ah || !lwsi_role_server(wsi)) return 0; a = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_ACCEPT_ENCODING); if (!a) return 0; for (n = 0; n < LWS_ARRAY_SIZE(lcs_available); n++) if (strstr(a, lcs_available[n]->encoding_name)) wsi->http.comp_accept_mask |= 1 << n; return 0; } LWS_VISIBLE int lws_http_compression_apply(struct lws *wsi, const char *name, unsigned char **p, unsigned char *end, char decomp) { size_t n; for (n = 0; n < LWS_ARRAY_SIZE(lcs_available); n++) { /* if name is non-NULL, choose only that compression method */ if (name && !strcmp(lcs_available[n]->encoding_name, name)) continue; /* * If we're the server, confirm that the client told us he could * handle this kind of compression transform... */ if (!decomp && !(wsi->http.comp_accept_mask & (1 << n))) continue; /* let's go with this one then... */ break; } if (n == LWS_ARRAY_SIZE(lcs_available)) return 1; lcs_available[n]->init_compression(&wsi->http.comp_ctx, decomp); if (!wsi->http.comp_ctx.u.generic_ctx_ptr) { lwsl_err("%s: init_compression %d failed\n", __func__, (int)n); return 1; } wsi->http.lcs = lcs_available[n]; wsi->http.comp_ctx.may_have_more = 0; wsi->http.comp_ctx.final_on_input_side = 0; wsi->http.comp_ctx.chunking = 0; wsi->http.comp_ctx.is_decompression = decomp; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_ENCODING, (unsigned char *)lcs_available[n]->encoding_name, strlen(lcs_available[n]->encoding_name), p, end)) return -1; lwsl_info("%s: wsi %p: applied %s content-encoding\n", __func__, wsi, lcs_available[n]->encoding_name); return 0; } void lws_http_compression_destroy(struct lws *wsi) { if (!wsi->http.lcs || !wsi->http.comp_ctx.u.generic_ctx_ptr) return; wsi->http.lcs->destroy(&wsi->http.comp_ctx); wsi->http.lcs = NULL; } /* * This manages the compression transform independent of h1 or h2. * * wsi->buflist_comp stashes pre-transform input that was not yet compressed */ int lws_http_compression_transform(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol *wp, unsigned char **outbuf, size_t *olen_oused) { size_t ilen_iused = len; int n, use = 0, wp1f = (*wp) & 0x1f; lws_comp_ctx_t *ctx = &wsi->http.comp_ctx; ctx->may_have_more = 0; if (!wsi->http.lcs || (wp1f != LWS_WRITE_HTTP && wp1f != LWS_WRITE_HTTP_FINAL)) { *outbuf = buf; *olen_oused = len; return 0; } if (wp1f == LWS_WRITE_HTTP_FINAL) { /* * ...we may get a large buffer that represents the final input * buffer, but it may form multiple frames after being * tranformed by compression; only the last of those is actually * the final frame on the output stream. * * Note that we have received the FINAL input, and downgrade it * to a non-final for now. */ ctx->final_on_input_side = 1; *wp = LWS_WRITE_HTTP | ((*wp) & ~0x1f); } if (ctx->buflist_comp || ctx->may_have_more) { /* * we can't send this new stuff when we have old stuff * buffered and not compressed yet. Add it to the tail * and switch to trying to process the head. */ if (buf && len) { if (lws_buflist_append_segment( &ctx->buflist_comp, buf, len) < 0) return -1; lwsl_debug("%s: %p: adding %d to comp buflist\n", __func__,wsi, (int)len); } len = lws_buflist_next_segment_len(&ctx->buflist_comp, &buf); ilen_iused = len; use = 1; lwsl_debug("%s: %p: trying comp buflist %d\n", __func__, wsi, (int)len); } if (!buf && ilen_iused) return 0; lwsl_debug("%s: %p: pre-process: ilen_iused %d, olen_oused %d\n", __func__, wsi, (int)ilen_iused, (int)*olen_oused); n = wsi->http.lcs->process(ctx, buf, &ilen_iused, *outbuf, olen_oused); if (n && n != 1) { lwsl_err("%s: problem with compression\n", __func__); return -1; } if (!ctx->may_have_more && ctx->final_on_input_side) *wp = LWS_WRITE_HTTP_FINAL | ((*wp) & ~0x1f); lwsl_debug("%s: %p: more %d, ilen_iused %d\n", __func__, wsi, ctx->may_have_more, (int)ilen_iused); if (use && ilen_iused) { /* * we were flushing stuff from the buflist head... account for * however much actually got processed by the compression * transform */ lws_buflist_use_segment(&ctx->buflist_comp, ilen_iused); lwsl_debug("%s: %p: marking %d of comp buflist as used " "(ctx->buflist_comp %p)\n", __func__, wsi, (int)len, ctx->buflist_comp); } if (!use && ilen_iused != len) { /* * ...we were sending stuff from the caller directly and not * all of it got processed... stash on the buflist tail */ if (lws_buflist_append_segment(&ctx->buflist_comp, buf + ilen_iused, len - ilen_iused) < 0) return -1; lwsl_debug("%s: buffering %d unused comp input\n", __func__, (int)(len - ilen_iused)); } if (ctx->buflist_comp || ctx->may_have_more) lws_callback_on_writable(wsi); return 0; } libwebsockets-3.2.1/lib/roles/http/header.c000066400000000000000000000361311357643561300206430ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "lextable-strings.h" const unsigned char * lws_token_to_string(enum lws_token_indexes token) { if ((unsigned int)token >= LWS_ARRAY_SIZE(set)) return NULL; return (unsigned char *)set[token]; } int lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name, const unsigned char *value, int length, unsigned char **p, unsigned char *end) { #ifdef LWS_WITH_HTTP2 if (lwsi_role_h2(wsi) || lwsi_role_h2_ENCAPSULATION(wsi)) return lws_add_http2_header_by_name(wsi, name, value, length, p, end); #else (void)wsi; #endif if (name) { while (*p < end && *name) *((*p)++) = *name++; if (*p == end) return 1; *((*p)++) = ' '; } if (*p + length + 3 >= end) return 1; memcpy(*p, value, length); *p += length; *((*p)++) = '\x0d'; *((*p)++) = '\x0a'; return 0; } int lws_finalize_http_header(struct lws *wsi, unsigned char **p, unsigned char *end) { #ifdef LWS_WITH_HTTP2 if (lwsi_role_h2(wsi) || lwsi_role_h2_ENCAPSULATION(wsi)) return 0; #else (void)wsi; #endif if ((lws_intptr_t)(end - *p) < 3) return 1; *((*p)++) = '\x0d'; *((*p)++) = '\x0a'; return 0; } int lws_finalize_write_http_header(struct lws *wsi, unsigned char *start, unsigned char **pp, unsigned char *end) { unsigned char *p; int len; if (lws_finalize_http_header(wsi, pp, end)) return 1; p = *pp; len = lws_ptr_diff(p, start); if (lws_write(wsi, start, len, LWS_WRITE_HTTP_HEADERS) != len) return 1; return 0; } int lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token, const unsigned char *value, int length, unsigned char **p, unsigned char *end) { const unsigned char *name; #ifdef LWS_WITH_HTTP2 if (lwsi_role_h2(wsi) || lwsi_role_h2_ENCAPSULATION(wsi)) return lws_add_http2_header_by_token(wsi, token, value, length, p, end); #endif name = lws_token_to_string(token); if (!name) return 1; return lws_add_http_header_by_name(wsi, name, value, length, p, end); } int lws_add_http_header_content_length(struct lws *wsi, lws_filepos_t content_length, unsigned char **p, unsigned char *end) { char b[24]; int n; n = lws_snprintf(b, sizeof(b) - 1, "%llu", (unsigned long long)content_length); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH, (unsigned char *)b, n, p, end)) return 1; wsi->http.tx_content_length = content_length; wsi->http.tx_content_remain = content_length; lwsl_info("%s: wsi %p: tx_content_length/remain %llu\n", __func__, wsi, (unsigned long long)content_length); return 0; } int lws_add_http_common_headers(struct lws *wsi, unsigned int code, const char *content_type, lws_filepos_t content_len, unsigned char **p, unsigned char *end) { const char *ka[] = { "close", "keep-alive" }; int types[] = { HTTP_CONNECTION_CLOSE, HTTP_CONNECTION_KEEP_ALIVE }, t = 0; if (lws_add_http_header_status(wsi, code, p, end)) return 1; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)content_type, (int)strlen(content_type), p, end)) return 1; #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (!wsi->http.lcs && (!strncmp(content_type, "text/", 5) || !strcmp(content_type, "application/javascript") || !strcmp(content_type, "image/svg+xml"))) lws_http_compression_apply(wsi, NULL, p, end, 0); #endif /* * if we decided to compress it, we don't know the content length... * the compressed data will go out chunked on h1 */ if ( #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) !wsi->http.lcs && #endif content_len != LWS_ILLEGAL_HTTP_CONTENT_LEN) { if (lws_add_http_header_content_length(wsi, content_len, p, end)) return 1; } else { /* there was no length... it normally means CONNECTION_CLOSE */ #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (!wsi->http2_substream && wsi->http.lcs) { /* so... * - h1 connection * - http compression transform active * - did not send content length * * then mark as chunked... */ wsi->http.comp_ctx.chunking = 1; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_TRANSFER_ENCODING, (unsigned char *)"chunked", 7, p, end)) return -1; /* ... but h1 compression is chunked, if active we can * still pipeline */ if (wsi->http.lcs && wsi->http.conn_type == HTTP_CONNECTION_KEEP_ALIVE) t = 1; } #endif if (!wsi->http2_substream) { if (lws_add_http_header_by_token(wsi, WSI_TOKEN_CONNECTION, (unsigned char *)ka[t], (int)strlen(ka[t]), p, end)) return 1; wsi->http.conn_type = types[t]; } } return 0; } static const char * const err400[] = { "Bad Request", "Unauthorized", "Payment Required", "Forbidden", "Not Found", "Method Not Allowed", "Not Acceptable", "Proxy Auth Required", "Request Timeout", "Conflict", "Gone", "Length Required", "Precondition Failed", "Request Entity Too Large", "Request URI too Long", "Unsupported Media Type", "Requested Range Not Satisfiable", "Expectation Failed" }; static const char * const err500[] = { "Internal Server Error", "Not Implemented", "Bad Gateway", "Service Unavailable", "Gateway Timeout", "HTTP Version Not Supported" }; /* security best practices from Mozilla Observatory */ static const struct lws_protocol_vhost_options pvo_hsbph[] = {{ NULL, NULL, "referrer-policy:", "no-referrer" }, { &pvo_hsbph[0], NULL, "x-frame-options:", "deny" }, { &pvo_hsbph[1], NULL, "x-xss-protection:", "1; mode=block" }, { &pvo_hsbph[2], NULL, "x-content-type-options:", "nosniff" }, { &pvo_hsbph[3], NULL, "content-security-policy:", "default-src 'none'; img-src 'self' data: ; " "script-src 'self'; font-src 'self'; " "style-src 'self'; connect-src 'self'; " "frame-ancestors 'none'; base-uri 'none';" "form-action 'self';" }}; int lws_add_http_header_status(struct lws *wsi, unsigned int _code, unsigned char **p, unsigned char *end) { static const char * const hver[] = { "HTTP/1.0", "HTTP/1.1", "HTTP/2" }; const struct lws_protocol_vhost_options *headers; unsigned int code = _code & LWSAHH_CODE_MASK; const char *description = "", *p1; unsigned char code_and_desc[60]; int n; #ifdef LWS_WITH_ACCESS_LOG wsi->http.access_log.response = code; #endif #ifdef LWS_WITH_HTTP2 if (lwsi_role_h2(wsi) || lwsi_role_h2_ENCAPSULATION(wsi)) { n = lws_add_http2_header_status(wsi, code, p, end); if (n) return n; } else #endif { if (code >= 400 && code < (400 + LWS_ARRAY_SIZE(err400))) description = err400[code - 400]; if (code >= 500 && code < (500 + LWS_ARRAY_SIZE(err500))) description = err500[code - 500]; if (code == 100) description = "Continue"; if (code == 200) description = "OK"; if (code == 304) description = "Not Modified"; else if (code >= 300 && code < 400) description = "Redirect"; if (wsi->http.request_version < LWS_ARRAY_SIZE(hver)) p1 = hver[wsi->http.request_version]; else p1 = hver[0]; n = lws_snprintf((char *)code_and_desc, sizeof(code_and_desc) - 1, "%s %u %s", p1, code, description); if (lws_add_http_header_by_name(wsi, NULL, code_and_desc, n, p, end)) return 1; } headers = wsi->vhost->headers; while (headers) { if (lws_add_http_header_by_name(wsi, (const unsigned char *)headers->name, (unsigned char *)headers->value, (int)strlen(headers->value), p, end)) return 1; headers = headers->next; } if (wsi->vhost->options & LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE) { headers = &pvo_hsbph[LWS_ARRAY_SIZE(pvo_hsbph) - 1]; while (headers) { if (lws_add_http_header_by_name(wsi, (const unsigned char *)headers->name, (unsigned char *)headers->value, (int)strlen(headers->value), p, end)) return 1; headers = headers->next; } } if (wsi->context->server_string && !(_code & LWSAHH_FLAG_NO_SERVER_NAME)) if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_SERVER, (unsigned char *)wsi->context->server_string, wsi->context->server_string_len, p, end)) return 1; if (wsi->vhost->options & LWS_SERVER_OPTION_STS) if (lws_add_http_header_by_name(wsi, (unsigned char *) "Strict-Transport-Security:", (unsigned char *)"max-age=15768000 ; " "includeSubDomains", 36, p, end)) return 1; if (*p >= (end - 2)) { lwsl_err("%s: reached end of buffer\n", __func__); return 1; } return 0; } LWS_VISIBLE int lws_return_http_status(struct lws *wsi, unsigned int code, const char *html_body) { struct lws_context *context = lws_get_context(wsi); struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; unsigned char *p = pt->serv_buf + LWS_PRE; unsigned char *start = p; unsigned char *end = p + context->pt_serv_buf_size - LWS_PRE; char *body = (char *)start + context->pt_serv_buf_size - 512; int n = 0, m = 0, len; char slen[20]; if (!wsi->vhost) { lwsl_err("%s: wsi not bound to vhost\n", __func__); return 1; } #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) if (!wsi->handling_404 && wsi->vhost->http.error_document_404 && code == HTTP_STATUS_NOT_FOUND) /* we should do a redirect, and do the 404 there */ if (lws_http_redirect(wsi, HTTP_STATUS_FOUND, (uint8_t *)wsi->vhost->http.error_document_404, (int)strlen(wsi->vhost->http.error_document_404), &p, end) > 0) return 0; #endif /* if the redirect failed, just do a simple status */ p = start; if (!html_body) html_body = ""; if (lws_add_http_header_status(wsi, code, &p, end)) return 1; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"text/html", 9, &p, end)) return 1; len = lws_snprintf(body, 510, "" "" "" "

%u

%s", code, html_body); n = lws_snprintf(slen, 12, "%d", len); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH, (unsigned char *)slen, n, &p, end)) return 1; if (lws_finalize_http_header(wsi, &p, end)) return 1; #if defined(LWS_WITH_HTTP2) if (wsi->http2_substream) { /* * for HTTP/2, the headers must be sent separately, since they * go out in their own frame. That puts us in a bind that * we won't always be able to get away with two lws_write()s in * sequence, since the first may use up the writability due to * the pipe being choked or SSL_WANT_. * * However we do need to send the human-readable body, and the * END_STREAM. * * Solve it by writing the headers now... */ m = lws_write(wsi, start, lws_ptr_diff(p, start), LWS_WRITE_HTTP_HEADERS); if (m != lws_ptr_diff(p, start)) return 1; /* * ... but stash the body and send it as a priority next * handle_POLLOUT */ wsi->http.tx_content_length = len; wsi->http.tx_content_remain = len; wsi->h2.pending_status_body = lws_malloc(len + LWS_PRE + 1, "pending status body"); if (!wsi->h2.pending_status_body) return -1; strcpy(wsi->h2.pending_status_body + LWS_PRE, body); lws_callback_on_writable(wsi); return 0; } else #endif { /* * for http/1, we can just append the body after the finalized * headers and send it all in one go. */ n = lws_ptr_diff(p, start) + len; memcpy(p, body, len); m = lws_write(wsi, start, n, LWS_WRITE_HTTP); if (m != n) return 1; } return m != n; } LWS_VISIBLE int lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len, unsigned char **p, unsigned char *end) { unsigned char *start = *p; if (lws_add_http_header_status(wsi, code, p, end)) return -1; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_LOCATION, loc, len, p, end)) return -1; /* * if we're going with http/1.1 and keepalive, we have to give fake * content metadata so the client knows we completed the transaction and * it can do the redirect... */ if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"text/html", 9, p, end)) return -1; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH, (unsigned char *)"0", 1, p, end)) return -1; if (lws_finalize_http_header(wsi, p, end)) return -1; return lws_write(wsi, start, *p - start, LWS_WRITE_HTTP_HEADERS | LWS_WRITE_H2_STREAM_END); } #if !defined(LWS_WITH_HTTP_STREAM_COMPRESSION) LWS_VISIBLE int lws_http_compression_apply(struct lws *wsi, const char *name, unsigned char **p, unsigned char *end, char decomp) { (void)wsi; (void)name; (void)p; (void)end; (void)decomp; return 0; } #endif int lws_http_headers_detach(struct lws *wsi) { return lws_header_table_detach(wsi, 0); } void lws_sul_http_ah_lifecheck(lws_sorted_usec_list_t *sul) { struct allocated_headers *ah; struct lws_context_per_thread *pt = lws_container_of(sul, struct lws_context_per_thread, sul_ah_lifecheck); struct lws *wsi; time_t now; int m; now = time(NULL); lws_pt_lock(pt, __func__); ah = pt->http.ah_list; while (ah) { int len; char buf[256]; const unsigned char *c; if (!ah->in_use || !ah->wsi || !ah->assigned || (ah->wsi->vhost && (now - ah->assigned) < ah->wsi->vhost->timeout_secs_ah_idle + 360)) { ah = ah->next; continue; } /* * a single ah session somehow got held for * an unreasonable amount of time. * * Dump info on the connection... */ wsi = ah->wsi; buf[0] = '\0'; #if !defined(LWS_PLAT_OPTEE) lws_get_peer_simple(wsi, buf, sizeof(buf)); #else buf[0] = '\0'; #endif lwsl_notice("ah excessive hold: wsi %p\n" " peer address: %s\n" " ah pos %lu\n", wsi, buf, (unsigned long)ah->pos); buf[0] = '\0'; m = 0; do { c = lws_token_to_string(m); if (!c) break; if (!(*c)) break; len = lws_hdr_total_length(wsi, m); if (!len || len > (int)sizeof(buf) - 1) { m++; continue; } if (lws_hdr_copy(wsi, buf, sizeof buf, m) > 0) { buf[sizeof(buf) - 1] = '\0'; lwsl_notice(" %s = %s\n", (const char *)c, buf); } m++; } while (1); /* explicitly detach the ah */ lws_header_table_detach(wsi, 0); /* ... and then drop the connection */ __lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "excessive ah"); ah = pt->http.ah_list; } lws_pt_unlock(pt); } libwebsockets-3.2.1/lib/roles/http/lextable-strings.h000066400000000000000000000033101357643561300227000ustar00rootroot00000000000000/* set of parsable strings -- ALL LOWER CASE */ static const char * const set[] = { "get ", "post ", "options ", "host:", "connection:", "upgrade:", "origin:", "sec-websocket-draft:", "\x0d\x0a", "sec-websocket-extensions:", "sec-websocket-key1:", "sec-websocket-key2:", "sec-websocket-protocol:", "sec-websocket-accept:", "sec-websocket-nonce:", "http/1.1 ", "http2-settings:", "accept:", "access-control-request-headers:", "if-modified-since:", "if-none-match:", "accept-encoding:", "accept-language:", "pragma:", "cache-control:", "authorization:", "cookie:", "content-length:", "content-type:", "date:", "range:", "referer:", "sec-websocket-key:", "sec-websocket-version:", "sec-websocket-origin:", ":authority", ":method", ":path", ":scheme", ":status", "accept-charset:", "accept-ranges:", "access-control-allow-origin:", "age:", "allow:", "content-disposition:", "content-encoding:", "content-language:", "content-location:", "content-range:", "etag:", "expect:", "expires:", "from:", "if-match:", "if-range:", "if-unmodified-since:", "last-modified:", "link:", "location:", "max-forwards:", "proxy-authenticate:", "proxy-authorization:", "refresh:", "retry-after:", "server:", "set-cookie:", "strict-transport-security:", "transfer-encoding:", "user-agent:", "vary:", "via:", "www-authenticate:", "patch", "put", "delete", "uri-args", /* fake header used for uri-only storage */ "proxy ", "x-real-ip:", "http/1.0 ", "x-forwarded-for", "connect ", "head ", "te:", /* http/2 wants it to reject it */ "replay-nonce:", /* ACME */ ":protocol", /* defined in mcmanus-httpbis-h2-ws-02 */ "x-auth-token:", "", /* not matchable */ }; libwebsockets-3.2.1/lib/roles/http/lextable.h000066400000000000000000001244231357643561300212220ustar00rootroot00000000000000/* pos 0000: 0 */ 0x67 /* 'g' */, 0x40, 0x00 /* (to 0x0040 state 1) */, 0x70 /* 'p' */, 0x42, 0x00 /* (to 0x0045 state 5) */, 0x6F /* 'o' */, 0x51, 0x00 /* (to 0x0057 state 10) */, 0x68 /* 'h' */, 0x5D, 0x00 /* (to 0x0066 state 18) */, 0x63 /* 'c' */, 0x69, 0x00 /* (to 0x0075 state 23) */, 0x75 /* 'u' */, 0x8A, 0x00 /* (to 0x0099 state 34) */, 0x73 /* 's' */, 0xA0, 0x00 /* (to 0x00B2 state 48) */, 0x0D /* '.' */, 0xD9, 0x00 /* (to 0x00EE state 68) */, 0x61 /* 'a' */, 0x31, 0x01 /* (to 0x0149 state 129) */, 0x69 /* 'i' */, 0x70, 0x01 /* (to 0x018B state 163) */, 0x64 /* 'd' */, 0x19, 0x02 /* (to 0x0237 state 265) */, 0x72 /* 'r' */, 0x22, 0x02 /* (to 0x0243 state 270) */, 0x3A /* ':' */, 0x56, 0x02 /* (to 0x027A state 299) */, 0x65 /* 'e' */, 0xE8, 0x02 /* (to 0x030F state 409) */, 0x66 /* 'f' */, 0x04, 0x03 /* (to 0x032E state 425) */, 0x6C /* 'l' */, 0x26, 0x03 /* (to 0x0353 state 458) */, 0x6D /* 'm' */, 0x49, 0x03 /* (to 0x0379 state 484) */, 0x74 /* 't' */, 0xB8, 0x03 /* (to 0x03EB state 578) */, 0x76 /* 'v' */, 0xD9, 0x03 /* (to 0x040F state 606) */, 0x77 /* 'w' */, 0xE6, 0x03 /* (to 0x041F state 614) */, 0x78 /* 'x' */, 0x0D, 0x04 /* (to 0x0449 state 650) */, 0x08, /* fail */ /* pos 0040: 1 */ 0xE5 /* 'e' -> */, /* pos 0041: 2 */ 0xF4 /* 't' -> */, /* pos 0042: 3 */ 0xA0 /* ' ' -> */, /* pos 0043: 4 */ 0x00, 0x00 /* - terminal marker 0 - */, /* pos 0045: 5 */ 0x6F /* 'o' */, 0x0D, 0x00 /* (to 0x0052 state 6) */, 0x72 /* 'r' */, 0x95, 0x01 /* (to 0x01DD state 211) */, 0x61 /* 'a' */, 0xE6, 0x03 /* (to 0x0431 state 631) */, 0x75 /* 'u' */, 0xE8, 0x03 /* (to 0x0436 state 635) */, 0x08, /* fail */ /* pos 0052: 6 */ 0xF3 /* 's' -> */, /* pos 0053: 7 */ 0xF4 /* 't' -> */, /* pos 0054: 8 */ 0xA0 /* ' ' -> */, /* pos 0055: 9 */ 0x00, 0x01 /* - terminal marker 1 - */, /* pos 0057: 10 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x005E state 11) */, 0x72 /* 'r' */, 0x51, 0x00 /* (to 0x00AB state 42) */, 0x08, /* fail */ /* pos 005e: 11 */ 0xF4 /* 't' -> */, /* pos 005f: 12 */ 0xE9 /* 'i' -> */, /* pos 0060: 13 */ 0xEF /* 'o' -> */, /* pos 0061: 14 */ 0xEE /* 'n' -> */, /* pos 0062: 15 */ 0xF3 /* 's' -> */, /* pos 0063: 16 */ 0xA0 /* ' ' -> */, /* pos 0064: 17 */ 0x00, 0x02 /* - terminal marker 2 - */, /* pos 0066: 18 */ 0x6F /* 'o' */, 0x0A, 0x00 /* (to 0x0070 state 19) */, 0x74 /* 't' */, 0xBF, 0x00 /* (to 0x0128 state 110) */, 0x65 /* 'e' */, 0x04, 0x04 /* (to 0x0470 state 676) */, 0x08, /* fail */ /* pos 0070: 19 */ 0xF3 /* 's' -> */, /* pos 0071: 20 */ 0xF4 /* 't' -> */, /* pos 0072: 21 */ 0xBA /* ':' -> */, /* pos 0073: 22 */ 0x00, 0x03 /* - terminal marker 3 - */, /* pos 0075: 23 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x007C state 24) */, 0x61 /* 'a' */, 0x72, 0x01 /* (to 0x01EA state 217) */, 0x08, /* fail */ /* pos 007c: 24 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0083 state 25) */, 0x6F /* 'o' */, 0x87, 0x01 /* (to 0x0206 state 243) */, 0x08, /* fail */ /* pos 0083: 25 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x008A state 26) */, 0x74 /* 't' */, 0x86, 0x01 /* (to 0x020C state 248) */, 0x08, /* fail */ /* pos 008a: 26 */ 0xE5 /* 'e' -> */, /* pos 008b: 27 */ 0xE3 /* 'c' -> */, /* pos 008c: 28 */ 0xF4 /* 't' -> */, /* pos 008d: 29 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x0094 state 30) */, 0x20 /* ' ' */, 0xDE, 0x03 /* (to 0x046E state 675) */, 0x08, /* fail */ /* pos 0094: 30 */ 0xEF /* 'o' -> */, /* pos 0095: 31 */ 0xEE /* 'n' -> */, /* pos 0096: 32 */ 0xBA /* ':' -> */, /* pos 0097: 33 */ 0x00, 0x04 /* - terminal marker 4 - */, /* pos 0099: 34 */ 0x70 /* 'p' */, 0x0A, 0x00 /* (to 0x00A3 state 35) */, 0x73 /* 's' */, 0x68, 0x03 /* (to 0x0404 state 596) */, 0x72 /* 'r' */, 0xA0, 0x03 /* (to 0x043F state 642) */, 0x08, /* fail */ /* pos 00a3: 35 */ 0xE7 /* 'g' -> */, /* pos 00a4: 36 */ 0xF2 /* 'r' -> */, /* pos 00a5: 37 */ 0xE1 /* 'a' -> */, /* pos 00a6: 38 */ 0xE4 /* 'd' -> */, /* pos 00a7: 39 */ 0xE5 /* 'e' -> */, /* pos 00a8: 40 */ 0xBA /* ':' -> */, /* pos 00a9: 41 */ 0x00, 0x05 /* - terminal marker 5 - */, /* pos 00ab: 42 */ 0xE9 /* 'i' -> */, /* pos 00ac: 43 */ 0xE7 /* 'g' -> */, /* pos 00ad: 44 */ 0xE9 /* 'i' -> */, /* pos 00ae: 45 */ 0xEE /* 'n' -> */, /* pos 00af: 46 */ 0xBA /* ':' -> */, /* pos 00b0: 47 */ 0x00, 0x06 /* - terminal marker 6 - */, /* pos 00b2: 48 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x00B9 state 49) */, 0x74 /* 't' */, 0x1C, 0x03 /* (to 0x03D1 state 553) */, 0x08, /* fail */ /* pos 00b9: 49 */ 0x63 /* 'c' */, 0x0A, 0x00 /* (to 0x00C3 state 50) */, 0x72 /* 'r' */, 0x05, 0x03 /* (to 0x03C1 state 539) */, 0x74 /* 't' */, 0x08, 0x03 /* (to 0x03C7 state 544) */, 0x08, /* fail */ /* pos 00c3: 50 */ 0xAD /* '-' -> */, /* pos 00c4: 51 */ 0xF7 /* 'w' -> */, /* pos 00c5: 52 */ 0xE5 /* 'e' -> */, /* pos 00c6: 53 */ 0xE2 /* 'b' -> */, /* pos 00c7: 54 */ 0xF3 /* 's' -> */, /* pos 00c8: 55 */ 0xEF /* 'o' -> */, /* pos 00c9: 56 */ 0xE3 /* 'c' -> */, /* pos 00ca: 57 */ 0xEB /* 'k' -> */, /* pos 00cb: 58 */ 0xE5 /* 'e' -> */, /* pos 00cc: 59 */ 0xF4 /* 't' -> */, /* pos 00cd: 60 */ 0xAD /* '-' -> */, /* pos 00ce: 61 */ 0x64 /* 'd' */, 0x19, 0x00 /* (to 0x00E7 state 62) */, 0x65 /* 'e' */, 0x20, 0x00 /* (to 0x00F1 state 70) */, 0x6B /* 'k' */, 0x29, 0x00 /* (to 0x00FD state 81) */, 0x70 /* 'p' */, 0x38, 0x00 /* (to 0x010F state 88) */, 0x61 /* 'a' */, 0x3F, 0x00 /* (to 0x0119 state 97) */, 0x6E /* 'n' */, 0x44, 0x00 /* (to 0x0121 state 104) */, 0x76 /* 'v' */, 0x89, 0x01 /* (to 0x0269 state 284) */, 0x6F /* 'o' */, 0x8F, 0x01 /* (to 0x0272 state 292) */, 0x08, /* fail */ /* pos 00e7: 62 */ 0xF2 /* 'r' -> */, /* pos 00e8: 63 */ 0xE1 /* 'a' -> */, /* pos 00e9: 64 */ 0xE6 /* 'f' -> */, /* pos 00ea: 65 */ 0xF4 /* 't' -> */, /* pos 00eb: 66 */ 0xBA /* ':' -> */, /* pos 00ec: 67 */ 0x00, 0x07 /* - terminal marker 7 - */, /* pos 00ee: 68 */ 0x8A /* '.' -> */, /* pos 00ef: 69 */ 0x00, 0x08 /* - terminal marker 8 - */, /* pos 00f1: 70 */ 0xF8 /* 'x' -> */, /* pos 00f2: 71 */ 0xF4 /* 't' -> */, /* pos 00f3: 72 */ 0xE5 /* 'e' -> */, /* pos 00f4: 73 */ 0xEE /* 'n' -> */, /* pos 00f5: 74 */ 0xF3 /* 's' -> */, /* pos 00f6: 75 */ 0xE9 /* 'i' -> */, /* pos 00f7: 76 */ 0xEF /* 'o' -> */, /* pos 00f8: 77 */ 0xEE /* 'n' -> */, /* pos 00f9: 78 */ 0xF3 /* 's' -> */, /* pos 00fa: 79 */ 0xBA /* ':' -> */, /* pos 00fb: 80 */ 0x00, 0x09 /* - terminal marker 9 - */, /* pos 00fd: 81 */ 0xE5 /* 'e' -> */, /* pos 00fe: 82 */ 0xF9 /* 'y' -> */, /* pos 00ff: 83 */ 0x31 /* '1' */, 0x0A, 0x00 /* (to 0x0109 state 84) */, 0x32 /* '2' */, 0x0A, 0x00 /* (to 0x010C state 86) */, 0x3A /* ':' */, 0x62, 0x01 /* (to 0x0267 state 283) */, 0x08, /* fail */ /* pos 0109: 84 */ 0xBA /* ':' -> */, /* pos 010a: 85 */ 0x00, 0x0A /* - terminal marker 10 - */, /* pos 010c: 86 */ 0xBA /* ':' -> */, /* pos 010d: 87 */ 0x00, 0x0B /* - terminal marker 11 - */, /* pos 010f: 88 */ 0xF2 /* 'r' -> */, /* pos 0110: 89 */ 0xEF /* 'o' -> */, /* pos 0111: 90 */ 0xF4 /* 't' -> */, /* pos 0112: 91 */ 0xEF /* 'o' -> */, /* pos 0113: 92 */ 0xE3 /* 'c' -> */, /* pos 0114: 93 */ 0xEF /* 'o' -> */, /* pos 0115: 94 */ 0xEC /* 'l' -> */, /* pos 0116: 95 */ 0xBA /* ':' -> */, /* pos 0117: 96 */ 0x00, 0x0C /* - terminal marker 12 - */, /* pos 0119: 97 */ 0xE3 /* 'c' -> */, /* pos 011a: 98 */ 0xE3 /* 'c' -> */, /* pos 011b: 99 */ 0xE5 /* 'e' -> */, /* pos 011c: 100 */ 0xF0 /* 'p' -> */, /* pos 011d: 101 */ 0xF4 /* 't' -> */, /* pos 011e: 102 */ 0xBA /* ':' -> */, /* pos 011f: 103 */ 0x00, 0x0D /* - terminal marker 13 - */, /* pos 0121: 104 */ 0xEF /* 'o' -> */, /* pos 0122: 105 */ 0xEE /* 'n' -> */, /* pos 0123: 106 */ 0xE3 /* 'c' -> */, /* pos 0124: 107 */ 0xE5 /* 'e' -> */, /* pos 0125: 108 */ 0xBA /* ':' -> */, /* pos 0126: 109 */ 0x00, 0x0E /* - terminal marker 14 - */, /* pos 0128: 110 */ 0xF4 /* 't' -> */, /* pos 0129: 111 */ 0xF0 /* 'p' -> */, /* pos 012a: 112 */ 0x2F /* '/' */, 0x07, 0x00 /* (to 0x0131 state 113) */, 0x32 /* '2' */, 0x10, 0x00 /* (to 0x013D state 118) */, 0x08, /* fail */ /* pos 0131: 113 */ 0xB1 /* '1' -> */, /* pos 0132: 114 */ 0xAE /* '.' -> */, /* pos 0133: 115 */ 0x31 /* '1' */, 0x07, 0x00 /* (to 0x013A state 116) */, 0x30 /* '0' */, 0x27, 0x03 /* (to 0x045D state 660) */, 0x08, /* fail */ /* pos 013a: 116 */ 0xA0 /* ' ' -> */, /* pos 013b: 117 */ 0x00, 0x0F /* - terminal marker 15 - */, /* pos 013d: 118 */ 0xAD /* '-' -> */, /* pos 013e: 119 */ 0xF3 /* 's' -> */, /* pos 013f: 120 */ 0xE5 /* 'e' -> */, /* pos 0140: 121 */ 0xF4 /* 't' -> */, /* pos 0141: 122 */ 0xF4 /* 't' -> */, /* pos 0142: 123 */ 0xE9 /* 'i' -> */, /* pos 0143: 124 */ 0xEE /* 'n' -> */, /* pos 0144: 125 */ 0xE7 /* 'g' -> */, /* pos 0145: 126 */ 0xF3 /* 's' -> */, /* pos 0146: 127 */ 0xBA /* ':' -> */, /* pos 0147: 128 */ 0x00, 0x10 /* - terminal marker 16 - */, /* pos 0149: 129 */ 0x63 /* 'c' */, 0x0D, 0x00 /* (to 0x0156 state 130) */, 0x75 /* 'u' */, 0xAC, 0x00 /* (to 0x01F8 state 230) */, 0x67 /* 'g' */, 0x86, 0x01 /* (to 0x02D5 state 358) */, 0x6C /* 'l' */, 0x87, 0x01 /* (to 0x02D9 state 361) */, 0x08, /* fail */ /* pos 0156: 130 */ 0xE3 /* 'c' -> */, /* pos 0157: 131 */ 0xE5 /* 'e' -> */, /* pos 0158: 132 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x015F state 133) */, 0x73 /* 's' */, 0x0E, 0x00 /* (to 0x0169 state 136) */, 0x08, /* fail */ /* pos 015f: 133 */ 0xF4 /* 't' -> */, /* pos 0160: 134 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x0167 state 135) */, 0x2D /* '-' */, 0x59, 0x00 /* (to 0x01BC state 192) */, 0x08, /* fail */ /* pos 0167: 135 */ 0x00, 0x11 /* - terminal marker 17 - */, /* pos 0169: 136 */ 0xF3 /* 's' -> */, /* pos 016a: 137 */ 0xAD /* '-' -> */, /* pos 016b: 138 */ 0xE3 /* 'c' -> */, /* pos 016c: 139 */ 0xEF /* 'o' -> */, /* pos 016d: 140 */ 0xEE /* 'n' -> */, /* pos 016e: 141 */ 0xF4 /* 't' -> */, /* pos 016f: 142 */ 0xF2 /* 'r' -> */, /* pos 0170: 143 */ 0xEF /* 'o' -> */, /* pos 0171: 144 */ 0xEC /* 'l' -> */, /* pos 0172: 145 */ 0xAD /* '-' -> */, /* pos 0173: 146 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x017A state 147) */, 0x61 /* 'a' */, 0x51, 0x01 /* (to 0x02C7 state 345) */, 0x08, /* fail */ /* pos 017a: 147 */ 0xE5 /* 'e' -> */, /* pos 017b: 148 */ 0xF1 /* 'q' -> */, /* pos 017c: 149 */ 0xF5 /* 'u' -> */, /* pos 017d: 150 */ 0xE5 /* 'e' -> */, /* pos 017e: 151 */ 0xF3 /* 's' -> */, /* pos 017f: 152 */ 0xF4 /* 't' -> */, /* pos 0180: 153 */ 0xAD /* '-' -> */, /* pos 0181: 154 */ 0xE8 /* 'h' -> */, /* pos 0182: 155 */ 0xE5 /* 'e' -> */, /* pos 0183: 156 */ 0xE1 /* 'a' -> */, /* pos 0184: 157 */ 0xE4 /* 'd' -> */, /* pos 0185: 158 */ 0xE5 /* 'e' -> */, /* pos 0186: 159 */ 0xF2 /* 'r' -> */, /* pos 0187: 160 */ 0xF3 /* 's' -> */, /* pos 0188: 161 */ 0xBA /* ':' -> */, /* pos 0189: 162 */ 0x00, 0x12 /* - terminal marker 18 - */, /* pos 018b: 163 */ 0xE6 /* 'f' -> */, /* pos 018c: 164 */ 0xAD /* '-' -> */, /* pos 018d: 165 */ 0x6D /* 'm' */, 0x0D, 0x00 /* (to 0x019A state 166) */, 0x6E /* 'n' */, 0x20, 0x00 /* (to 0x01B0 state 181) */, 0x72 /* 'r' */, 0xA7, 0x01 /* (to 0x033A state 435) */, 0x75 /* 'u' */, 0xAB, 0x01 /* (to 0x0341 state 441) */, 0x08, /* fail */ /* pos 019a: 166 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x01A1 state 167) */, 0x61 /* 'a' */, 0x97, 0x01 /* (to 0x0334 state 430) */, 0x08, /* fail */ /* pos 01a1: 167 */ 0xE4 /* 'd' -> */, /* pos 01a2: 168 */ 0xE9 /* 'i' -> */, /* pos 01a3: 169 */ 0xE6 /* 'f' -> */, /* pos 01a4: 170 */ 0xE9 /* 'i' -> */, /* pos 01a5: 171 */ 0xE5 /* 'e' -> */, /* pos 01a6: 172 */ 0xE4 /* 'd' -> */, /* pos 01a7: 173 */ 0xAD /* '-' -> */, /* pos 01a8: 174 */ 0xF3 /* 's' -> */, /* pos 01a9: 175 */ 0xE9 /* 'i' -> */, /* pos 01aa: 176 */ 0xEE /* 'n' -> */, /* pos 01ab: 177 */ 0xE3 /* 'c' -> */, /* pos 01ac: 178 */ 0xE5 /* 'e' -> */, /* pos 01ad: 179 */ 0xBA /* ':' -> */, /* pos 01ae: 180 */ 0x00, 0x13 /* - terminal marker 19 - */, /* pos 01b0: 181 */ 0xEF /* 'o' -> */, /* pos 01b1: 182 */ 0xEE /* 'n' -> */, /* pos 01b2: 183 */ 0xE5 /* 'e' -> */, /* pos 01b3: 184 */ 0xAD /* '-' -> */, /* pos 01b4: 185 */ 0xED /* 'm' -> */, /* pos 01b5: 186 */ 0xE1 /* 'a' -> */, /* pos 01b6: 187 */ 0xF4 /* 't' -> */, /* pos 01b7: 188 */ 0xE3 /* 'c' -> */, /* pos 01b8: 189 */ 0xE8 /* 'h' -> */, /* pos 01b9: 190 */ 0xBA /* ':' -> */, /* pos 01ba: 191 */ 0x00, 0x14 /* - terminal marker 20 - */, /* pos 01bc: 192 */ 0x65 /* 'e' */, 0x0D, 0x00 /* (to 0x01C9 state 193) */, 0x6C /* 'l' */, 0x14, 0x00 /* (to 0x01D3 state 202) */, 0x63 /* 'c' */, 0xF4, 0x00 /* (to 0x02B6 state 330) */, 0x72 /* 'r' */, 0xFA, 0x00 /* (to 0x02BF state 338) */, 0x08, /* fail */ /* pos 01c9: 193 */ 0xEE /* 'n' -> */, /* pos 01ca: 194 */ 0xE3 /* 'c' -> */, /* pos 01cb: 195 */ 0xEF /* 'o' -> */, /* pos 01cc: 196 */ 0xE4 /* 'd' -> */, /* pos 01cd: 197 */ 0xE9 /* 'i' -> */, /* pos 01ce: 198 */ 0xEE /* 'n' -> */, /* pos 01cf: 199 */ 0xE7 /* 'g' -> */, /* pos 01d0: 200 */ 0xBA /* ':' -> */, /* pos 01d1: 201 */ 0x00, 0x15 /* - terminal marker 21 - */, /* pos 01d3: 202 */ 0xE1 /* 'a' -> */, /* pos 01d4: 203 */ 0xEE /* 'n' -> */, /* pos 01d5: 204 */ 0xE7 /* 'g' -> */, /* pos 01d6: 205 */ 0xF5 /* 'u' -> */, /* pos 01d7: 206 */ 0xE1 /* 'a' -> */, /* pos 01d8: 207 */ 0xE7 /* 'g' -> */, /* pos 01d9: 208 */ 0xE5 /* 'e' -> */, /* pos 01da: 209 */ 0xBA /* ':' -> */, /* pos 01db: 210 */ 0x00, 0x16 /* - terminal marker 22 - */, /* pos 01dd: 211 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x01E4 state 212) */, 0x6F /* 'o' */, 0xA7, 0x01 /* (to 0x0387 state 497) */, 0x08, /* fail */ /* pos 01e4: 212 */ 0xE7 /* 'g' -> */, /* pos 01e5: 213 */ 0xED /* 'm' -> */, /* pos 01e6: 214 */ 0xE1 /* 'a' -> */, /* pos 01e7: 215 */ 0xBA /* ':' -> */, /* pos 01e8: 216 */ 0x00, 0x17 /* - terminal marker 23 - */, /* pos 01ea: 217 */ 0xE3 /* 'c' -> */, /* pos 01eb: 218 */ 0xE8 /* 'h' -> */, /* pos 01ec: 219 */ 0xE5 /* 'e' -> */, /* pos 01ed: 220 */ 0xAD /* '-' -> */, /* pos 01ee: 221 */ 0xE3 /* 'c' -> */, /* pos 01ef: 222 */ 0xEF /* 'o' -> */, /* pos 01f0: 223 */ 0xEE /* 'n' -> */, /* pos 01f1: 224 */ 0xF4 /* 't' -> */, /* pos 01f2: 225 */ 0xF2 /* 'r' -> */, /* pos 01f3: 226 */ 0xEF /* 'o' -> */, /* pos 01f4: 227 */ 0xEC /* 'l' -> */, /* pos 01f5: 228 */ 0xBA /* ':' -> */, /* pos 01f6: 229 */ 0x00, 0x18 /* - terminal marker 24 - */, /* pos 01f8: 230 */ 0xF4 /* 't' -> */, /* pos 01f9: 231 */ 0xE8 /* 'h' -> */, /* pos 01fa: 232 */ 0xEF /* 'o' -> */, /* pos 01fb: 233 */ 0xF2 /* 'r' -> */, /* pos 01fc: 234 */ 0xE9 /* 'i' -> */, /* pos 01fd: 235 */ 0xFA /* 'z' -> */, /* pos 01fe: 236 */ 0xE1 /* 'a' -> */, /* pos 01ff: 237 */ 0xF4 /* 't' -> */, /* pos 0200: 238 */ 0xE9 /* 'i' -> */, /* pos 0201: 239 */ 0xEF /* 'o' -> */, /* pos 0202: 240 */ 0xEE /* 'n' -> */, /* pos 0203: 241 */ 0xBA /* ':' -> */, /* pos 0204: 242 */ 0x00, 0x19 /* - terminal marker 25 - */, /* pos 0206: 243 */ 0xEB /* 'k' -> */, /* pos 0207: 244 */ 0xE9 /* 'i' -> */, /* pos 0208: 245 */ 0xE5 /* 'e' -> */, /* pos 0209: 246 */ 0xBA /* ':' -> */, /* pos 020a: 247 */ 0x00, 0x1A /* - terminal marker 26 - */, /* pos 020c: 248 */ 0xE5 /* 'e' -> */, /* pos 020d: 249 */ 0xEE /* 'n' -> */, /* pos 020e: 250 */ 0xF4 /* 't' -> */, /* pos 020f: 251 */ 0xAD /* '-' -> */, /* pos 0210: 252 */ 0x6C /* 'l' */, 0x10, 0x00 /* (to 0x0220 state 253) */, 0x74 /* 't' */, 0x1E, 0x00 /* (to 0x0231 state 260) */, 0x64 /* 'd' */, 0xC9, 0x00 /* (to 0x02DF state 366) */, 0x65 /* 'e' */, 0xD3, 0x00 /* (to 0x02EC state 378) */, 0x72 /* 'r' */, 0xEC, 0x00 /* (to 0x0308 state 403) */, 0x08, /* fail */ /* pos 0220: 253 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x022A state 254) */, 0x61 /* 'a' */, 0xD3, 0x00 /* (to 0x02F6 state 387) */, 0x6F /* 'o' */, 0xD9, 0x00 /* (to 0x02FF state 395) */, 0x08, /* fail */ /* pos 022a: 254 */ 0xEE /* 'n' -> */, /* pos 022b: 255 */ 0xE7 /* 'g' -> */, /* pos 022c: 256 */ 0xF4 /* 't' -> */, /* pos 022d: 257 */ 0xE8 /* 'h' -> */, /* pos 022e: 258 */ 0xBA /* ':' -> */, /* pos 022f: 259 */ 0x00, 0x1B /* - terminal marker 27 - */, /* pos 0231: 260 */ 0xF9 /* 'y' -> */, /* pos 0232: 261 */ 0xF0 /* 'p' -> */, /* pos 0233: 262 */ 0xE5 /* 'e' -> */, /* pos 0234: 263 */ 0xBA /* ':' -> */, /* pos 0235: 264 */ 0x00, 0x1C /* - terminal marker 28 - */, /* pos 0237: 265 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x023E state 266) */, 0x65 /* 'e' */, 0xFF, 0x01 /* (to 0x0439 state 637) */, 0x08, /* fail */ /* pos 023e: 266 */ 0xF4 /* 't' -> */, /* pos 023f: 267 */ 0xE5 /* 'e' -> */, /* pos 0240: 268 */ 0xBA /* ':' -> */, /* pos 0241: 269 */ 0x00, 0x1D /* - terminal marker 29 - */, /* pos 0243: 270 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x024A state 271) */, 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x0250 state 276) */, 0x08, /* fail */ /* pos 024a: 271 */ 0xEE /* 'n' -> */, /* pos 024b: 272 */ 0xE7 /* 'g' -> */, /* pos 024c: 273 */ 0xE5 /* 'e' -> */, /* pos 024d: 274 */ 0xBA /* ':' -> */, /* pos 024e: 275 */ 0x00, 0x1E /* - terminal marker 30 - */, /* pos 0250: 276 */ 0x66 /* 'f' */, 0x0A, 0x00 /* (to 0x025A state 277) */, 0x74 /* 't' */, 0x63, 0x01 /* (to 0x03B6 state 529) */, 0x70 /* 'p' */, 0x22, 0x02 /* (to 0x0478 state 682) */, 0x08, /* fail */ /* pos 025a: 277 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0261 state 278) */, 0x72 /* 'r' */, 0x53, 0x01 /* (to 0x03B0 state 524) */, 0x08, /* fail */ /* pos 0261: 278 */ 0xF2 /* 'r' -> */, /* pos 0262: 279 */ 0xE5 /* 'e' -> */, /* pos 0263: 280 */ 0xF2 /* 'r' -> */, /* pos 0264: 281 */ 0xBA /* ':' -> */, /* pos 0265: 282 */ 0x00, 0x1F /* - terminal marker 31 - */, /* pos 0267: 283 */ 0x00, 0x20 /* - terminal marker 32 - */, /* pos 0269: 284 */ 0xE5 /* 'e' -> */, /* pos 026a: 285 */ 0xF2 /* 'r' -> */, /* pos 026b: 286 */ 0xF3 /* 's' -> */, /* pos 026c: 287 */ 0xE9 /* 'i' -> */, /* pos 026d: 288 */ 0xEF /* 'o' -> */, /* pos 026e: 289 */ 0xEE /* 'n' -> */, /* pos 026f: 290 */ 0xBA /* ':' -> */, /* pos 0270: 291 */ 0x00, 0x21 /* - terminal marker 33 - */, /* pos 0272: 292 */ 0xF2 /* 'r' -> */, /* pos 0273: 293 */ 0xE9 /* 'i' -> */, /* pos 0274: 294 */ 0xE7 /* 'g' -> */, /* pos 0275: 295 */ 0xE9 /* 'i' -> */, /* pos 0276: 296 */ 0xEE /* 'n' -> */, /* pos 0277: 297 */ 0xBA /* ':' -> */, /* pos 0278: 298 */ 0x00, 0x22 /* - terminal marker 34 - */, /* pos 027a: 299 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x0287 state 300) */, 0x6D /* 'm' */, 0x14, 0x00 /* (to 0x0291 state 309) */, 0x70 /* 'p' */, 0x18, 0x00 /* (to 0x0298 state 315) */, 0x73 /* 's' */, 0x20, 0x00 /* (to 0x02A3 state 319) */, 0x08, /* fail */ /* pos 0287: 300 */ 0xF5 /* 'u' -> */, /* pos 0288: 301 */ 0xF4 /* 't' -> */, /* pos 0289: 302 */ 0xE8 /* 'h' -> */, /* pos 028a: 303 */ 0xEF /* 'o' -> */, /* pos 028b: 304 */ 0xF2 /* 'r' -> */, /* pos 028c: 305 */ 0xE9 /* 'i' -> */, /* pos 028d: 306 */ 0xF4 /* 't' -> */, /* pos 028e: 307 */ 0xF9 /* 'y' -> */, /* pos 028f: 308 */ 0x00, 0x23 /* - terminal marker 35 - */, /* pos 0291: 309 */ 0xE5 /* 'e' -> */, /* pos 0292: 310 */ 0xF4 /* 't' -> */, /* pos 0293: 311 */ 0xE8 /* 'h' -> */, /* pos 0294: 312 */ 0xEF /* 'o' -> */, /* pos 0295: 313 */ 0xE4 /* 'd' -> */, /* pos 0296: 314 */ 0x00, 0x24 /* - terminal marker 36 - */, /* pos 0298: 315 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x029F state 316) */, 0x72 /* 'r' */, 0xE9, 0x01 /* (to 0x0484 state 693) */, 0x08, /* fail */ /* pos 029f: 316 */ 0xF4 /* 't' -> */, /* pos 02a0: 317 */ 0xE8 /* 'h' -> */, /* pos 02a1: 318 */ 0x00, 0x25 /* - terminal marker 37 - */, /* pos 02a3: 319 */ 0x63 /* 'c' */, 0x07, 0x00 /* (to 0x02AA state 320) */, 0x74 /* 't' */, 0x0A, 0x00 /* (to 0x02B0 state 325) */, 0x08, /* fail */ /* pos 02aa: 320 */ 0xE8 /* 'h' -> */, /* pos 02ab: 321 */ 0xE5 /* 'e' -> */, /* pos 02ac: 322 */ 0xED /* 'm' -> */, /* pos 02ad: 323 */ 0xE5 /* 'e' -> */, /* pos 02ae: 324 */ 0x00, 0x26 /* - terminal marker 38 - */, /* pos 02b0: 325 */ 0xE1 /* 'a' -> */, /* pos 02b1: 326 */ 0xF4 /* 't' -> */, /* pos 02b2: 327 */ 0xF5 /* 'u' -> */, /* pos 02b3: 328 */ 0xF3 /* 's' -> */, /* pos 02b4: 329 */ 0x00, 0x27 /* - terminal marker 39 - */, /* pos 02b6: 330 */ 0xE8 /* 'h' -> */, /* pos 02b7: 331 */ 0xE1 /* 'a' -> */, /* pos 02b8: 332 */ 0xF2 /* 'r' -> */, /* pos 02b9: 333 */ 0xF3 /* 's' -> */, /* pos 02ba: 334 */ 0xE5 /* 'e' -> */, /* pos 02bb: 335 */ 0xF4 /* 't' -> */, /* pos 02bc: 336 */ 0xBA /* ':' -> */, /* pos 02bd: 337 */ 0x00, 0x28 /* - terminal marker 40 - */, /* pos 02bf: 338 */ 0xE1 /* 'a' -> */, /* pos 02c0: 339 */ 0xEE /* 'n' -> */, /* pos 02c1: 340 */ 0xE7 /* 'g' -> */, /* pos 02c2: 341 */ 0xE5 /* 'e' -> */, /* pos 02c3: 342 */ 0xF3 /* 's' -> */, /* pos 02c4: 343 */ 0xBA /* ':' -> */, /* pos 02c5: 344 */ 0x00, 0x29 /* - terminal marker 41 - */, /* pos 02c7: 345 */ 0xEC /* 'l' -> */, /* pos 02c8: 346 */ 0xEC /* 'l' -> */, /* pos 02c9: 347 */ 0xEF /* 'o' -> */, /* pos 02ca: 348 */ 0xF7 /* 'w' -> */, /* pos 02cb: 349 */ 0xAD /* '-' -> */, /* pos 02cc: 350 */ 0xEF /* 'o' -> */, /* pos 02cd: 351 */ 0xF2 /* 'r' -> */, /* pos 02ce: 352 */ 0xE9 /* 'i' -> */, /* pos 02cf: 353 */ 0xE7 /* 'g' -> */, /* pos 02d0: 354 */ 0xE9 /* 'i' -> */, /* pos 02d1: 355 */ 0xEE /* 'n' -> */, /* pos 02d2: 356 */ 0xBA /* ':' -> */, /* pos 02d3: 357 */ 0x00, 0x2A /* - terminal marker 42 - */, /* pos 02d5: 358 */ 0xE5 /* 'e' -> */, /* pos 02d6: 359 */ 0xBA /* ':' -> */, /* pos 02d7: 360 */ 0x00, 0x2B /* - terminal marker 43 - */, /* pos 02d9: 361 */ 0xEC /* 'l' -> */, /* pos 02da: 362 */ 0xEF /* 'o' -> */, /* pos 02db: 363 */ 0xF7 /* 'w' -> */, /* pos 02dc: 364 */ 0xBA /* ':' -> */, /* pos 02dd: 365 */ 0x00, 0x2C /* - terminal marker 44 - */, /* pos 02df: 366 */ 0xE9 /* 'i' -> */, /* pos 02e0: 367 */ 0xF3 /* 's' -> */, /* pos 02e1: 368 */ 0xF0 /* 'p' -> */, /* pos 02e2: 369 */ 0xEF /* 'o' -> */, /* pos 02e3: 370 */ 0xF3 /* 's' -> */, /* pos 02e4: 371 */ 0xE9 /* 'i' -> */, /* pos 02e5: 372 */ 0xF4 /* 't' -> */, /* pos 02e6: 373 */ 0xE9 /* 'i' -> */, /* pos 02e7: 374 */ 0xEF /* 'o' -> */, /* pos 02e8: 375 */ 0xEE /* 'n' -> */, /* pos 02e9: 376 */ 0xBA /* ':' -> */, /* pos 02ea: 377 */ 0x00, 0x2D /* - terminal marker 45 - */, /* pos 02ec: 378 */ 0xEE /* 'n' -> */, /* pos 02ed: 379 */ 0xE3 /* 'c' -> */, /* pos 02ee: 380 */ 0xEF /* 'o' -> */, /* pos 02ef: 381 */ 0xE4 /* 'd' -> */, /* pos 02f0: 382 */ 0xE9 /* 'i' -> */, /* pos 02f1: 383 */ 0xEE /* 'n' -> */, /* pos 02f2: 384 */ 0xE7 /* 'g' -> */, /* pos 02f3: 385 */ 0xBA /* ':' -> */, /* pos 02f4: 386 */ 0x00, 0x2E /* - terminal marker 46 - */, /* pos 02f6: 387 */ 0xEE /* 'n' -> */, /* pos 02f7: 388 */ 0xE7 /* 'g' -> */, /* pos 02f8: 389 */ 0xF5 /* 'u' -> */, /* pos 02f9: 390 */ 0xE1 /* 'a' -> */, /* pos 02fa: 391 */ 0xE7 /* 'g' -> */, /* pos 02fb: 392 */ 0xE5 /* 'e' -> */, /* pos 02fc: 393 */ 0xBA /* ':' -> */, /* pos 02fd: 394 */ 0x00, 0x2F /* - terminal marker 47 - */, /* pos 02ff: 395 */ 0xE3 /* 'c' -> */, /* pos 0300: 396 */ 0xE1 /* 'a' -> */, /* pos 0301: 397 */ 0xF4 /* 't' -> */, /* pos 0302: 398 */ 0xE9 /* 'i' -> */, /* pos 0303: 399 */ 0xEF /* 'o' -> */, /* pos 0304: 400 */ 0xEE /* 'n' -> */, /* pos 0305: 401 */ 0xBA /* ':' -> */, /* pos 0306: 402 */ 0x00, 0x30 /* - terminal marker 48 - */, /* pos 0308: 403 */ 0xE1 /* 'a' -> */, /* pos 0309: 404 */ 0xEE /* 'n' -> */, /* pos 030a: 405 */ 0xE7 /* 'g' -> */, /* pos 030b: 406 */ 0xE5 /* 'e' -> */, /* pos 030c: 407 */ 0xBA /* ':' -> */, /* pos 030d: 408 */ 0x00, 0x31 /* - terminal marker 49 - */, /* pos 030f: 409 */ 0x74 /* 't' */, 0x07, 0x00 /* (to 0x0316 state 410) */, 0x78 /* 'x' */, 0x09, 0x00 /* (to 0x031B state 414) */, 0x08, /* fail */ /* pos 0316: 410 */ 0xE1 /* 'a' -> */, /* pos 0317: 411 */ 0xE7 /* 'g' -> */, /* pos 0318: 412 */ 0xBA /* ':' -> */, /* pos 0319: 413 */ 0x00, 0x32 /* - terminal marker 50 - */, /* pos 031b: 414 */ 0xF0 /* 'p' -> */, /* pos 031c: 415 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0323 state 416) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x0328 state 420) */, 0x08, /* fail */ /* pos 0323: 416 */ 0xE3 /* 'c' -> */, /* pos 0324: 417 */ 0xF4 /* 't' -> */, /* pos 0325: 418 */ 0xBA /* ':' -> */, /* pos 0326: 419 */ 0x00, 0x33 /* - terminal marker 51 - */, /* pos 0328: 420 */ 0xF2 /* 'r' -> */, /* pos 0329: 421 */ 0xE5 /* 'e' -> */, /* pos 032a: 422 */ 0xF3 /* 's' -> */, /* pos 032b: 423 */ 0xBA /* ':' -> */, /* pos 032c: 424 */ 0x00, 0x34 /* - terminal marker 52 - */, /* pos 032e: 425 */ 0xF2 /* 'r' -> */, /* pos 032f: 426 */ 0xEF /* 'o' -> */, /* pos 0330: 427 */ 0xED /* 'm' -> */, /* pos 0331: 428 */ 0xBA /* ':' -> */, /* pos 0332: 429 */ 0x00, 0x35 /* - terminal marker 53 - */, /* pos 0334: 430 */ 0xF4 /* 't' -> */, /* pos 0335: 431 */ 0xE3 /* 'c' -> */, /* pos 0336: 432 */ 0xE8 /* 'h' -> */, /* pos 0337: 433 */ 0xBA /* ':' -> */, /* pos 0338: 434 */ 0x00, 0x36 /* - terminal marker 54 - */, /* pos 033a: 435 */ 0xE1 /* 'a' -> */, /* pos 033b: 436 */ 0xEE /* 'n' -> */, /* pos 033c: 437 */ 0xE7 /* 'g' -> */, /* pos 033d: 438 */ 0xE5 /* 'e' -> */, /* pos 033e: 439 */ 0xBA /* ':' -> */, /* pos 033f: 440 */ 0x00, 0x37 /* - terminal marker 55 - */, /* pos 0341: 441 */ 0xEE /* 'n' -> */, /* pos 0342: 442 */ 0xED /* 'm' -> */, /* pos 0343: 443 */ 0xEF /* 'o' -> */, /* pos 0344: 444 */ 0xE4 /* 'd' -> */, /* pos 0345: 445 */ 0xE9 /* 'i' -> */, /* pos 0346: 446 */ 0xE6 /* 'f' -> */, /* pos 0347: 447 */ 0xE9 /* 'i' -> */, /* pos 0348: 448 */ 0xE5 /* 'e' -> */, /* pos 0349: 449 */ 0xE4 /* 'd' -> */, /* pos 034a: 450 */ 0xAD /* '-' -> */, /* pos 034b: 451 */ 0xF3 /* 's' -> */, /* pos 034c: 452 */ 0xE9 /* 'i' -> */, /* pos 034d: 453 */ 0xEE /* 'n' -> */, /* pos 034e: 454 */ 0xE3 /* 'c' -> */, /* pos 034f: 455 */ 0xE5 /* 'e' -> */, /* pos 0350: 456 */ 0xBA /* ':' -> */, /* pos 0351: 457 */ 0x00, 0x38 /* - terminal marker 56 - */, /* pos 0353: 458 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x035D state 459) */, 0x69 /* 'i' */, 0x15, 0x00 /* (to 0x036B state 472) */, 0x6F /* 'o' */, 0x17, 0x00 /* (to 0x0370 state 476) */, 0x08, /* fail */ /* pos 035d: 459 */ 0xF3 /* 's' -> */, /* pos 035e: 460 */ 0xF4 /* 't' -> */, /* pos 035f: 461 */ 0xAD /* '-' -> */, /* pos 0360: 462 */ 0xED /* 'm' -> */, /* pos 0361: 463 */ 0xEF /* 'o' -> */, /* pos 0362: 464 */ 0xE4 /* 'd' -> */, /* pos 0363: 465 */ 0xE9 /* 'i' -> */, /* pos 0364: 466 */ 0xE6 /* 'f' -> */, /* pos 0365: 467 */ 0xE9 /* 'i' -> */, /* pos 0366: 468 */ 0xE5 /* 'e' -> */, /* pos 0367: 469 */ 0xE4 /* 'd' -> */, /* pos 0368: 470 */ 0xBA /* ':' -> */, /* pos 0369: 471 */ 0x00, 0x39 /* - terminal marker 57 - */, /* pos 036b: 472 */ 0xEE /* 'n' -> */, /* pos 036c: 473 */ 0xEB /* 'k' -> */, /* pos 036d: 474 */ 0xBA /* ':' -> */, /* pos 036e: 475 */ 0x00, 0x3A /* - terminal marker 58 - */, /* pos 0370: 476 */ 0xE3 /* 'c' -> */, /* pos 0371: 477 */ 0xE1 /* 'a' -> */, /* pos 0372: 478 */ 0xF4 /* 't' -> */, /* pos 0373: 479 */ 0xE9 /* 'i' -> */, /* pos 0374: 480 */ 0xEF /* 'o' -> */, /* pos 0375: 481 */ 0xEE /* 'n' -> */, /* pos 0376: 482 */ 0xBA /* ':' -> */, /* pos 0377: 483 */ 0x00, 0x3B /* - terminal marker 59 - */, /* pos 0379: 484 */ 0xE1 /* 'a' -> */, /* pos 037a: 485 */ 0xF8 /* 'x' -> */, /* pos 037b: 486 */ 0xAD /* '-' -> */, /* pos 037c: 487 */ 0xE6 /* 'f' -> */, /* pos 037d: 488 */ 0xEF /* 'o' -> */, /* pos 037e: 489 */ 0xF2 /* 'r' -> */, /* pos 037f: 490 */ 0xF7 /* 'w' -> */, /* pos 0380: 491 */ 0xE1 /* 'a' -> */, /* pos 0381: 492 */ 0xF2 /* 'r' -> */, /* pos 0382: 493 */ 0xE4 /* 'd' -> */, /* pos 0383: 494 */ 0xF3 /* 's' -> */, /* pos 0384: 495 */ 0xBA /* ':' -> */, /* pos 0385: 496 */ 0x00, 0x3C /* - terminal marker 60 - */, /* pos 0387: 497 */ 0xF8 /* 'x' -> */, /* pos 0388: 498 */ 0xF9 /* 'y' -> */, /* pos 0389: 499 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x0390 state 500) */, 0x20 /* ' ' */, 0xBB, 0x00 /* (to 0x0447 state 649) */, 0x08, /* fail */ /* pos 0390: 500 */ 0xE1 /* 'a' -> */, /* pos 0391: 501 */ 0xF5 /* 'u' -> */, /* pos 0392: 502 */ 0xF4 /* 't' -> */, /* pos 0393: 503 */ 0xE8 /* 'h' -> */, /* pos 0394: 504 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x039B state 505) */, 0x6F /* 'o' */, 0x0E, 0x00 /* (to 0x03A5 state 514) */, 0x08, /* fail */ /* pos 039b: 505 */ 0xEE /* 'n' -> */, /* pos 039c: 506 */ 0xF4 /* 't' -> */, /* pos 039d: 507 */ 0xE9 /* 'i' -> */, /* pos 039e: 508 */ 0xE3 /* 'c' -> */, /* pos 039f: 509 */ 0xE1 /* 'a' -> */, /* pos 03a0: 510 */ 0xF4 /* 't' -> */, /* pos 03a1: 511 */ 0xE5 /* 'e' -> */, /* pos 03a2: 512 */ 0xBA /* ':' -> */, /* pos 03a3: 513 */ 0x00, 0x3D /* - terminal marker 61 - */, /* pos 03a5: 514 */ 0xF2 /* 'r' -> */, /* pos 03a6: 515 */ 0xE9 /* 'i' -> */, /* pos 03a7: 516 */ 0xFA /* 'z' -> */, /* pos 03a8: 517 */ 0xE1 /* 'a' -> */, /* pos 03a9: 518 */ 0xF4 /* 't' -> */, /* pos 03aa: 519 */ 0xE9 /* 'i' -> */, /* pos 03ab: 520 */ 0xEF /* 'o' -> */, /* pos 03ac: 521 */ 0xEE /* 'n' -> */, /* pos 03ad: 522 */ 0xBA /* ':' -> */, /* pos 03ae: 523 */ 0x00, 0x3E /* - terminal marker 62 - */, /* pos 03b0: 524 */ 0xE5 /* 'e' -> */, /* pos 03b1: 525 */ 0xF3 /* 's' -> */, /* pos 03b2: 526 */ 0xE8 /* 'h' -> */, /* pos 03b3: 527 */ 0xBA /* ':' -> */, /* pos 03b4: 528 */ 0x00, 0x3F /* - terminal marker 63 - */, /* pos 03b6: 529 */ 0xF2 /* 'r' -> */, /* pos 03b7: 530 */ 0xF9 /* 'y' -> */, /* pos 03b8: 531 */ 0xAD /* '-' -> */, /* pos 03b9: 532 */ 0xE1 /* 'a' -> */, /* pos 03ba: 533 */ 0xE6 /* 'f' -> */, /* pos 03bb: 534 */ 0xF4 /* 't' -> */, /* pos 03bc: 535 */ 0xE5 /* 'e' -> */, /* pos 03bd: 536 */ 0xF2 /* 'r' -> */, /* pos 03be: 537 */ 0xBA /* ':' -> */, /* pos 03bf: 538 */ 0x00, 0x40 /* - terminal marker 64 - */, /* pos 03c1: 539 */ 0xF6 /* 'v' -> */, /* pos 03c2: 540 */ 0xE5 /* 'e' -> */, /* pos 03c3: 541 */ 0xF2 /* 'r' -> */, /* pos 03c4: 542 */ 0xBA /* ':' -> */, /* pos 03c5: 543 */ 0x00, 0x41 /* - terminal marker 65 - */, /* pos 03c7: 544 */ 0xAD /* '-' -> */, /* pos 03c8: 545 */ 0xE3 /* 'c' -> */, /* pos 03c9: 546 */ 0xEF /* 'o' -> */, /* pos 03ca: 547 */ 0xEF /* 'o' -> */, /* pos 03cb: 548 */ 0xEB /* 'k' -> */, /* pos 03cc: 549 */ 0xE9 /* 'i' -> */, /* pos 03cd: 550 */ 0xE5 /* 'e' -> */, /* pos 03ce: 551 */ 0xBA /* ':' -> */, /* pos 03cf: 552 */ 0x00, 0x42 /* - terminal marker 66 - */, /* pos 03d1: 553 */ 0xF2 /* 'r' -> */, /* pos 03d2: 554 */ 0xE9 /* 'i' -> */, /* pos 03d3: 555 */ 0xE3 /* 'c' -> */, /* pos 03d4: 556 */ 0xF4 /* 't' -> */, /* pos 03d5: 557 */ 0xAD /* '-' -> */, /* pos 03d6: 558 */ 0xF4 /* 't' -> */, /* pos 03d7: 559 */ 0xF2 /* 'r' -> */, /* pos 03d8: 560 */ 0xE1 /* 'a' -> */, /* pos 03d9: 561 */ 0xEE /* 'n' -> */, /* pos 03da: 562 */ 0xF3 /* 's' -> */, /* pos 03db: 563 */ 0xF0 /* 'p' -> */, /* pos 03dc: 564 */ 0xEF /* 'o' -> */, /* pos 03dd: 565 */ 0xF2 /* 'r' -> */, /* pos 03de: 566 */ 0xF4 /* 't' -> */, /* pos 03df: 567 */ 0xAD /* '-' -> */, /* pos 03e0: 568 */ 0xF3 /* 's' -> */, /* pos 03e1: 569 */ 0xE5 /* 'e' -> */, /* pos 03e2: 570 */ 0xE3 /* 'c' -> */, /* pos 03e3: 571 */ 0xF5 /* 'u' -> */, /* pos 03e4: 572 */ 0xF2 /* 'r' -> */, /* pos 03e5: 573 */ 0xE9 /* 'i' -> */, /* pos 03e6: 574 */ 0xF4 /* 't' -> */, /* pos 03e7: 575 */ 0xF9 /* 'y' -> */, /* pos 03e8: 576 */ 0xBA /* ':' -> */, /* pos 03e9: 577 */ 0x00, 0x43 /* - terminal marker 67 - */, /* pos 03eb: 578 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x03F2 state 579) */, 0x65 /* 'e' */, 0x87, 0x00 /* (to 0x0475 state 680) */, 0x08, /* fail */ /* pos 03f2: 579 */ 0xE1 /* 'a' -> */, /* pos 03f3: 580 */ 0xEE /* 'n' -> */, /* pos 03f4: 581 */ 0xF3 /* 's' -> */, /* pos 03f5: 582 */ 0xE6 /* 'f' -> */, /* pos 03f6: 583 */ 0xE5 /* 'e' -> */, /* pos 03f7: 584 */ 0xF2 /* 'r' -> */, /* pos 03f8: 585 */ 0xAD /* '-' -> */, /* pos 03f9: 586 */ 0xE5 /* 'e' -> */, /* pos 03fa: 587 */ 0xEE /* 'n' -> */, /* pos 03fb: 588 */ 0xE3 /* 'c' -> */, /* pos 03fc: 589 */ 0xEF /* 'o' -> */, /* pos 03fd: 590 */ 0xE4 /* 'd' -> */, /* pos 03fe: 591 */ 0xE9 /* 'i' -> */, /* pos 03ff: 592 */ 0xEE /* 'n' -> */, /* pos 0400: 593 */ 0xE7 /* 'g' -> */, /* pos 0401: 594 */ 0xBA /* ':' -> */, /* pos 0402: 595 */ 0x00, 0x44 /* - terminal marker 68 - */, /* pos 0404: 596 */ 0xE5 /* 'e' -> */, /* pos 0405: 597 */ 0xF2 /* 'r' -> */, /* pos 0406: 598 */ 0xAD /* '-' -> */, /* pos 0407: 599 */ 0xE1 /* 'a' -> */, /* pos 0408: 600 */ 0xE7 /* 'g' -> */, /* pos 0409: 601 */ 0xE5 /* 'e' -> */, /* pos 040a: 602 */ 0xEE /* 'n' -> */, /* pos 040b: 603 */ 0xF4 /* 't' -> */, /* pos 040c: 604 */ 0xBA /* ':' -> */, /* pos 040d: 605 */ 0x00, 0x45 /* - terminal marker 69 - */, /* pos 040f: 606 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0416 state 607) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x041B state 611) */, 0x08, /* fail */ /* pos 0416: 607 */ 0xF2 /* 'r' -> */, /* pos 0417: 608 */ 0xF9 /* 'y' -> */, /* pos 0418: 609 */ 0xBA /* ':' -> */, /* pos 0419: 610 */ 0x00, 0x46 /* - terminal marker 70 - */, /* pos 041b: 611 */ 0xE1 /* 'a' -> */, /* pos 041c: 612 */ 0xBA /* ':' -> */, /* pos 041d: 613 */ 0x00, 0x47 /* - terminal marker 71 - */, /* pos 041f: 614 */ 0xF7 /* 'w' -> */, /* pos 0420: 615 */ 0xF7 /* 'w' -> */, /* pos 0421: 616 */ 0xAD /* '-' -> */, /* pos 0422: 617 */ 0xE1 /* 'a' -> */, /* pos 0423: 618 */ 0xF5 /* 'u' -> */, /* pos 0424: 619 */ 0xF4 /* 't' -> */, /* pos 0425: 620 */ 0xE8 /* 'h' -> */, /* pos 0426: 621 */ 0xE5 /* 'e' -> */, /* pos 0427: 622 */ 0xEE /* 'n' -> */, /* pos 0428: 623 */ 0xF4 /* 't' -> */, /* pos 0429: 624 */ 0xE9 /* 'i' -> */, /* pos 042a: 625 */ 0xE3 /* 'c' -> */, /* pos 042b: 626 */ 0xE1 /* 'a' -> */, /* pos 042c: 627 */ 0xF4 /* 't' -> */, /* pos 042d: 628 */ 0xE5 /* 'e' -> */, /* pos 042e: 629 */ 0xBA /* ':' -> */, /* pos 042f: 630 */ 0x00, 0x48 /* - terminal marker 72 - */, /* pos 0431: 631 */ 0xF4 /* 't' -> */, /* pos 0432: 632 */ 0xE3 /* 'c' -> */, /* pos 0433: 633 */ 0xE8 /* 'h' -> */, /* pos 0434: 634 */ 0x00, 0x49 /* - terminal marker 73 - */, /* pos 0436: 635 */ 0xF4 /* 't' -> */, /* pos 0437: 636 */ 0x00, 0x4A /* - terminal marker 74 - */, /* pos 0439: 637 */ 0xEC /* 'l' -> */, /* pos 043a: 638 */ 0xE5 /* 'e' -> */, /* pos 043b: 639 */ 0xF4 /* 't' -> */, /* pos 043c: 640 */ 0xE5 /* 'e' -> */, /* pos 043d: 641 */ 0x00, 0x4B /* - terminal marker 75 - */, /* pos 043f: 642 */ 0xE9 /* 'i' -> */, /* pos 0440: 643 */ 0xAD /* '-' -> */, /* pos 0441: 644 */ 0xE1 /* 'a' -> */, /* pos 0442: 645 */ 0xF2 /* 'r' -> */, /* pos 0443: 646 */ 0xE7 /* 'g' -> */, /* pos 0444: 647 */ 0xF3 /* 's' -> */, /* pos 0445: 648 */ 0x00, 0x4C /* - terminal marker 76 - */, /* pos 0447: 649 */ 0x00, 0x4D /* - terminal marker 77 - */, /* pos 0449: 650 */ 0xAD /* '-' -> */, /* pos 044a: 651 */ 0x72 /* 'r' */, 0x0A, 0x00 /* (to 0x0454 state 652) */, 0x66 /* 'f' */, 0x13, 0x00 /* (to 0x0460 state 662) */, 0x61 /* 'a' */, 0x3C, 0x00 /* (to 0x048C state 700) */, 0x08, /* fail */ /* pos 0454: 652 */ 0xE5 /* 'e' -> */, /* pos 0455: 653 */ 0xE1 /* 'a' -> */, /* pos 0456: 654 */ 0xEC /* 'l' -> */, /* pos 0457: 655 */ 0xAD /* '-' -> */, /* pos 0458: 656 */ 0xE9 /* 'i' -> */, /* pos 0459: 657 */ 0xF0 /* 'p' -> */, /* pos 045a: 658 */ 0xBA /* ':' -> */, /* pos 045b: 659 */ 0x00, 0x4E /* - terminal marker 78 - */, /* pos 045d: 660 */ 0xA0 /* ' ' -> */, /* pos 045e: 661 */ 0x00, 0x4F /* - terminal marker 79 - */, /* pos 0460: 662 */ 0xEF /* 'o' -> */, /* pos 0461: 663 */ 0xF2 /* 'r' -> */, /* pos 0462: 664 */ 0xF7 /* 'w' -> */, /* pos 0463: 665 */ 0xE1 /* 'a' -> */, /* pos 0464: 666 */ 0xF2 /* 'r' -> */, /* pos 0465: 667 */ 0xE4 /* 'd' -> */, /* pos 0466: 668 */ 0xE5 /* 'e' -> */, /* pos 0467: 669 */ 0xE4 /* 'd' -> */, /* pos 0468: 670 */ 0xAD /* '-' -> */, /* pos 0469: 671 */ 0xE6 /* 'f' -> */, /* pos 046a: 672 */ 0xEF /* 'o' -> */, /* pos 046b: 673 */ 0xF2 /* 'r' -> */, /* pos 046c: 674 */ 0x00, 0x50 /* - terminal marker 80 - */, /* pos 046e: 675 */ 0x00, 0x51 /* - terminal marker 81 - */, /* pos 0470: 676 */ 0xE1 /* 'a' -> */, /* pos 0471: 677 */ 0xE4 /* 'd' -> */, /* pos 0472: 678 */ 0xA0 /* ' ' -> */, /* pos 0473: 679 */ 0x00, 0x52 /* - terminal marker 82 - */, /* pos 0475: 680 */ 0xBA /* ':' -> */, /* pos 0476: 681 */ 0x00, 0x53 /* - terminal marker 83 - */, /* pos 0478: 682 */ 0xEC /* 'l' -> */, /* pos 0479: 683 */ 0xE1 /* 'a' -> */, /* pos 047a: 684 */ 0xF9 /* 'y' -> */, /* pos 047b: 685 */ 0xAD /* '-' -> */, /* pos 047c: 686 */ 0xEE /* 'n' -> */, /* pos 047d: 687 */ 0xEF /* 'o' -> */, /* pos 047e: 688 */ 0xEE /* 'n' -> */, /* pos 047f: 689 */ 0xE3 /* 'c' -> */, /* pos 0480: 690 */ 0xE5 /* 'e' -> */, /* pos 0481: 691 */ 0xBA /* ':' -> */, /* pos 0482: 692 */ 0x00, 0x54 /* - terminal marker 84 - */, /* pos 0484: 693 */ 0xEF /* 'o' -> */, /* pos 0485: 694 */ 0xF4 /* 't' -> */, /* pos 0486: 695 */ 0xEF /* 'o' -> */, /* pos 0487: 696 */ 0xE3 /* 'c' -> */, /* pos 0488: 697 */ 0xEF /* 'o' -> */, /* pos 0489: 698 */ 0xEC /* 'l' -> */, /* pos 048a: 699 */ 0x00, 0x55 /* - terminal marker 85 - */, /* pos 048c: 700 */ 0xF5 /* 'u' -> */, /* pos 048d: 701 */ 0xF4 /* 't' -> */, /* pos 048e: 702 */ 0xE8 /* 'h' -> */, /* pos 048f: 703 */ 0xAD /* '-' -> */, /* pos 0490: 704 */ 0xF4 /* 't' -> */, /* pos 0491: 705 */ 0xEF /* 'o' -> */, /* pos 0492: 706 */ 0xEB /* 'k' -> */, /* pos 0493: 707 */ 0xE5 /* 'e' -> */, /* pos 0494: 708 */ 0xEE /* 'n' -> */, /* pos 0495: 709 */ 0xBA /* ':' -> */, /* pos 0496: 710 */ 0x00, 0x56 /* - terminal marker 86 - */, /* total size 1176 bytes */ libwebsockets-3.2.1/lib/roles/http/minilex.c000066400000000000000000000114141357643561300210550ustar00rootroot00000000000000/* * minilex.c * * High efficiency lexical state parser * * Copyright (C)2011-2014 Andy Green * * Licensed under LGPL2 * * Usage: gcc minilex.c -o minilex && ./minilex > lextable.h * * Run it twice to test parsing on the generated table on stderr */ #include #include #include #include "lextable-strings.h" /* * b7 = 0 = 1-byte seq * 0x08 = fail * 2-byte seq * 0x00 - 0x07, then terminal as given in 2nd byte 3-byte seq * no match: go fwd 3 byte, match: jump fwd by amt in +1/+2 bytes * = 1 = 1-byte seq * no match: die, match go fwd 1 byte */ unsigned char lextable[] = { #include "lextable.h" }; #define PARALLEL 30 struct state { char c[PARALLEL]; int state[PARALLEL]; int count; int bytepos; int real_pos; }; struct state state[1000]; int next = 1; #define FAIL_CHAR 0x08 int lextable_decode(int pos, char c) { while (1) { if (lextable[pos] & (1 << 7)) { /* 1-byte, fail on mismatch */ if ((lextable[pos] & 0x7f) != c) return -1; /* fall thru */ pos++; if (lextable[pos] == FAIL_CHAR) return -1; return pos; } else { /* b7 = 0, end or 3-byte */ if (lextable[pos] < FAIL_CHAR) /* terminal marker */ return pos; if (lextable[pos] == c) /* goto */ return pos + (lextable[pos + 1]) + (lextable[pos + 2] << 8); /* fall thru goto */ pos += 3; /* continue */ } } } int main(void) { int n = 0; int m = 0; int prev; char c; int walk; int saw; int y; int j; int pos = 0; while (n < sizeof(set) / sizeof(set[0])) { m = 0; walk = 0; prev = 0; if (set[n][0] == '\0') { n++; continue; } while (set[n][m]) { saw = 0; for (y = 0; y < state[walk].count; y++) if (state[walk].c[y] == set[n][m]) { /* exists -- go forward */ walk = state[walk].state[y]; saw = 1; break; } if (saw) goto again; /* something we didn't see before */ state[walk].c[state[walk].count] = set[n][m]; state[walk].state[state[walk].count] = next; state[walk].count++; walk = next++; again: m++; } state[walk].c[0] = n++; state[walk].state[0] = 0; /* terminal marker */ state[walk].count = 1; } walk = 0; for (n = 0; n < next; n++) { state[n].bytepos = walk; walk += (2 * state[n].count); } /* compute everyone's position first */ pos = 0; walk = 0; for (n = 0; n < next; n++) { state[n].real_pos = pos; for (m = 0; m < state[n].count; m++) { if (state[n].state[m] == 0) pos += 2; /* terminal marker */ else { /* c is a character */ if ((state[state[n].state[m]].bytepos - walk) == 2) pos++; else { pos += 3; if (m == state[n].count - 1) pos++; /* fail */ } } walk += 2; } } walk = 0; pos = 0; for (n = 0; n < next; n++) { for (m = 0; m < state[n].count; m++) { if (!m) fprintf(stdout, "/* pos %04x: %3d */ ", state[n].real_pos, n); else fprintf(stdout, " "); y = state[n].c[m]; saw = state[n].state[m]; if (saw == 0) { // c is a terminal then if (y > 0x7ff) { fprintf(stderr, "terminal too big\n"); return 2; } fprintf(stdout, " 0x%02X, 0x%02X " " " "/* - terminal marker %2d - */,\n", y >> 8, y & 0xff, y & 0x7f); pos += 2; walk += 2; continue; } /* c is a character */ prev = y &0x7f; if (prev < 32 || prev > 126) prev = '.'; if ((state[saw].bytepos - walk) == 2) { fprintf(stdout, " 0x%02X /* '%c' -> */,\n", y | 0x80, prev); pos++; walk += 2; continue; } j = state[saw].real_pos - pos; if (j > 0xffff) { fprintf(stderr, "Jump > 64K bytes ahead (%d to %d)\n", state[n].real_pos, state[saw].real_pos); return 1; } fprintf(stdout, " 0x%02X /* '%c' */, 0x%02X, 0x%02X " "/* (to 0x%04X state %3d) */,\n", y, prev, j & 0xff, j >> 8, state[saw].real_pos, saw); pos += 3; if (m == state[n].count - 1) { fprintf(stdout, " 0x%02X, /* fail */\n", FAIL_CHAR); pos++; /* fail */ } walk += 2; } } fprintf(stdout, "/* total size %d bytes */\n", pos); /* * Try to parse every legal input string */ for (n = 0; n < sizeof(set) / sizeof(set[0]); n++) { walk = 0; m = 0; y = -1; if (set[n][0] == '\0') continue; fprintf(stderr, " trying '%s'\n", set[n]); while (set[n][m]) { walk = lextable_decode(walk, set[n][m]); if (walk < 0) { fprintf(stderr, "failed\n"); return 3; } if (lextable[walk] < FAIL_CHAR) { y = (lextable[walk] << 8) + lextable[walk + 1]; break; } m++; } if (y != n) { fprintf(stderr, "decode failed %d\n", y); return 4; } } fprintf(stderr, "All decode OK\n"); return 0; } libwebsockets-3.2.1/lib/roles/http/private.h000066400000000000000000000165131357643561300210740ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is included from core/private.h if either H1 or H2 roles are * enabled */ #if defined(LWS_WITH_HUBBUB) #include #include #endif #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) #include "roles/http/compression/private.h" #endif #define lwsi_role_http(wsi) (lwsi_role_h1(wsi) || lwsi_role_h2(wsi)) enum http_version { HTTP_VERSION_1_0, HTTP_VERSION_1_1, HTTP_VERSION_2 }; enum http_conn_type { HTTP_CONNECTION_CLOSE, HTTP_CONNECTION_KEEP_ALIVE }; /* * This is totally opaque to code using the library. It's exported as a * forward-reference pointer-only declaration; the user can use the pointer with * other APIs to get information out of it. */ #if defined(LWS_WITH_ESP32) typedef uint16_t ah_data_idx_t; #else typedef uint32_t ah_data_idx_t; #endif struct lws_fragments { ah_data_idx_t offset; uint16_t len; uint8_t nfrag; /* which ah->frag[] continues this content, or 0 */ uint8_t flags; /* only http2 cares */ }; #if defined(LWS_WITH_RANGES) enum range_states { LWSRS_NO_ACTIVE_RANGE, LWSRS_BYTES_EQ, LWSRS_FIRST, LWSRS_STARTING, LWSRS_ENDING, LWSRS_COMPLETED, LWSRS_SYNTAX, }; struct lws_range_parsing { unsigned long long start, end, extent, agg, budget; const char buf[128]; int pos; enum range_states state; char start_valid, end_valid, ctr, count_ranges, did_try, inside, send_ctr; }; int lws_ranges_init(struct lws *wsi, struct lws_range_parsing *rp, unsigned long long extent); int lws_ranges_next(struct lws_range_parsing *rp); void lws_ranges_reset(struct lws_range_parsing *rp); #endif /* * these are assigned from a pool held in the context. * Both client and server mode uses them for http header analysis */ struct allocated_headers { struct allocated_headers *next; /* linked list */ struct lws *wsi; /* owner */ char *data; /* prepared by context init to point to dedicated storage */ ah_data_idx_t data_length; /* * the randomly ordered fragments, indexed by frag_index and * lws_fragments->nfrag for continuation. */ struct lws_fragments frags[WSI_TOKEN_COUNT]; time_t assigned; /* * for each recognized token, frag_index says which frag[] his data * starts in (0 means the token did not appear) * the actual header data gets dumped as it comes in, into data[] */ uint8_t frag_index[WSI_TOKEN_COUNT]; #ifndef LWS_NO_CLIENT char initial_handshake_hash_base64[30]; #endif int hdr_token_idx; ah_data_idx_t pos; ah_data_idx_t http_response; ah_data_idx_t current_token_limit; #if defined(LWS_WITH_CUSTOM_HEADERS) ah_data_idx_t unk_pos; /* to undo speculative unknown header */ ah_data_idx_t unk_value_pos; ah_data_idx_t unk_ll_head; ah_data_idx_t unk_ll_tail; #endif int16_t lextable_pos; uint8_t in_use; uint8_t nfrag; char /*enum uri_path_states */ ups; char /*enum uri_esc_states */ ues; char esc_stash; char post_literal_equal; uint8_t /* enum lws_token_indexes */ parser_state; }; #if defined(LWS_WITH_HUBBUB) struct lws_rewrite { hubbub_parser *parser; hubbub_parser_optparams params; const char *from, *to; int from_len, to_len; unsigned char *p, *end; struct lws *wsi; }; static LWS_INLINE int hstrcmp(hubbub_string *s, const char *p, int len) { if ((int)s->len != len) return 1; return strncmp((const char *)s->ptr, p, len); } typedef hubbub_error (*hubbub_callback_t)(const hubbub_token *token, void *pw); LWS_EXTERN struct lws_rewrite * lws_rewrite_create(struct lws *wsi, hubbub_callback_t cb, const char *from, const char *to); LWS_EXTERN void lws_rewrite_destroy(struct lws_rewrite *r); LWS_EXTERN int lws_rewrite_parse(struct lws_rewrite *r, const unsigned char *in, int in_len); #endif struct lws_pt_role_http { struct allocated_headers *ah_list; struct lws *ah_wait_list; #ifdef LWS_WITH_CGI struct lws_cgi *cgi_list; #endif int ah_wait_list_length; uint32_t ah_pool_length; int ah_count_in_use; }; struct lws_peer_role_http { uint32_t count_ah; uint32_t total_ah; }; struct lws_vhost_role_http { char http_proxy_address[128]; const struct lws_http_mount *mount_list; const char *error_document_404; unsigned int http_proxy_port; }; #ifdef LWS_WITH_ACCESS_LOG struct lws_access_log { char *header_log; char *user_agent; char *referrer; unsigned long sent; int response; }; #endif #define LWS_HTTP_CHUNK_HDR_MAX_SIZE (6 + 2) /* 6 hex digits and then CRLF */ #define LWS_HTTP_CHUNK_TRL_MAX_SIZE (2 + 5) /* CRLF, then maybe 0 CRLF CRLF */ struct _lws_http_mode_related { struct lws *new_wsi_list; unsigned char *pending_return_headers; size_t pending_return_headers_len; size_t prh_content_length; #if defined(LWS_WITH_HTTP_PROXY) struct lws_rewrite *rw; struct lws_buflist *buflist_post_body; #endif struct allocated_headers *ah; struct lws *ah_wait_list; lws_filepos_t filepos; lws_filepos_t filelen; lws_fop_fd_t fop_fd; #if defined(LWS_WITH_RANGES) struct lws_range_parsing range; char multipart_content_type[64]; #endif #ifdef LWS_WITH_ACCESS_LOG struct lws_access_log access_log; #endif #ifdef LWS_WITH_CGI struct lws_cgi *cgi; /* wsi being cgi master have one of these */ #endif #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) struct lws_compression_support *lcs; lws_comp_ctx_t comp_ctx; unsigned char comp_accept_mask; #endif enum http_version request_version; enum http_conn_type conn_type; lws_filepos_t tx_content_length; lws_filepos_t tx_content_remain; lws_filepos_t rx_content_length; lws_filepos_t rx_content_remain; #if defined(LWS_WITH_HTTP_PROXY) unsigned int perform_rewrite:1; unsigned int proxy_clientside:1; unsigned int proxy_parent_chunked:1; #endif unsigned int deferred_transaction_completed:1; unsigned int content_length_explicitly_zero:1; unsigned int did_stream_close:1; }; #ifndef LWS_NO_CLIENT enum lws_chunk_parser { ELCP_HEX, ELCP_CR, ELCP_CONTENT, ELCP_POST_CR, ELCP_POST_LF, }; #endif enum lws_parse_urldecode_results { LPUR_CONTINUE, LPUR_SWALLOW, LPUR_FORBID, LPUR_EXCESSIVE, }; enum lws_check_basic_auth_results { LCBA_CONTINUE, LCBA_FAILED_AUTH, LCBA_END_TRANSACTION, }; enum lws_check_basic_auth_results lws_check_basic_auth(struct lws *wsi, const char *basic_auth_login_file); int lws_unauthorised_basic_auth(struct lws *wsi); int lws_read_h1(struct lws *wsi, unsigned char *buf, lws_filepos_t len); void _lws_header_table_reset(struct allocated_headers *ah); LWS_EXTERN int _lws_destroy_ah(struct lws_context_per_thread *pt, struct allocated_headers *ah); int lws_http_proxy_start(struct lws *wsi, const struct lws_http_mount *hit, char *uri_ptr, char ws); void lws_sul_http_ah_lifecheck(lws_sorted_usec_list_t *sul); libwebsockets-3.2.1/lib/roles/http/server/000077500000000000000000000000001357643561300205515ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/http/server/access-log.c000066400000000000000000000120561357643561300227410ustar00rootroot00000000000000/* * libwebsockets - server access log handling * * Copyright (C) 2010-2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" /* * Produce Apache-compatible log string for wsi, like this: * * 2.31.234.19 - - [27/Mar/2016:03:22:44 +0800] * "GET /aep-screen.png HTTP/1.1" * 200 152987 "https://libwebsockets.org/index.html" * "Mozilla/5.0 (Macint... Chrome/49.0.2623.87 Safari/537.36" * */ extern const char * const method_names[]; static const char * const hver[] = { "HTTP/1.0", "HTTP/1.1", "HTTP/2" }; void lws_prepare_access_log_info(struct lws *wsi, char *uri_ptr, int uri_len, int meth) { char da[64], uri[256]; const char *pa, *me; time_t t = time(NULL); int l = 256, m; #ifdef LWS_WITH_IPV6 char ads[INET6_ADDRSTRLEN]; #else char ads[INET_ADDRSTRLEN]; #endif struct tm *tmp; if (!wsi->vhost) return; /* only worry about preparing it if we store it */ if (wsi->vhost->log_fd == (int)LWS_INVALID_FILE) return; if (wsi->access_log_pending) lws_access_log(wsi); wsi->http.access_log.header_log = lws_malloc(l, "access log"); if (!wsi->http.access_log.header_log) return; tmp = localtime(&t); if (tmp) strftime(da, sizeof(da), "%d/%b/%Y:%H:%M:%S %z", tmp); else strcpy(da, "01/Jan/1970:00:00:00 +0000"); pa = lws_get_peer_simple(wsi, ads, sizeof(ads)); if (!pa) pa = "(unknown)"; if (wsi->http2_substream) me = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD); else me = method_names[meth]; if (!me) me = "(null)"; m = uri_len; if (m > (int)sizeof(uri) - 1) m = sizeof(uri) - 1; strncpy(uri, uri_ptr, m); uri[m] = '\0'; lws_snprintf(wsi->http.access_log.header_log, l, "%s - - [%s] \"%s %s %s\"", pa, da, me, uri, hver[wsi->http.request_version]); //lwsl_notice("%s\n", wsi->http.access_log.header_log); l = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_USER_AGENT); if (l) { wsi->http.access_log.user_agent = lws_malloc(l + 5, "access log"); if (!wsi->http.access_log.user_agent) { lwsl_err("OOM getting user agent\n"); lws_free_set_NULL(wsi->http.access_log.header_log); return; } wsi->http.access_log.user_agent[0] = '\0'; if (lws_hdr_copy(wsi, wsi->http.access_log.user_agent, l + 4, WSI_TOKEN_HTTP_USER_AGENT) >= 0) for (m = 0; m < l; m++) if (wsi->http.access_log.user_agent[m] == '\"') wsi->http.access_log.user_agent[m] = '\''; } l = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_REFERER); if (l) { wsi->http.access_log.referrer = lws_malloc(l + 5, "referrer"); if (!wsi->http.access_log.referrer) { lwsl_err("OOM getting referrer\n"); lws_free_set_NULL(wsi->http.access_log.user_agent); lws_free_set_NULL(wsi->http.access_log.header_log); return; } wsi->http.access_log.referrer[0] = '\0'; if (lws_hdr_copy(wsi, wsi->http.access_log.referrer, l + 4, WSI_TOKEN_HTTP_REFERER) >= 0) for (m = 0; m < l; m++) if (wsi->http.access_log.referrer[m] == '\"') wsi->http.access_log.referrer[m] = '\''; } wsi->access_log_pending = 1; } int lws_access_log(struct lws *wsi) { char *p = wsi->http.access_log.user_agent, ass[512], *p1 = wsi->http.access_log.referrer; int l; if (!wsi->vhost) return 0; if (wsi->vhost->log_fd == (int)LWS_INVALID_FILE) return 0; if (!wsi->access_log_pending) return 0; if (!wsi->http.access_log.header_log) return 0; if (!p) p = ""; if (!p1) p1 = ""; /* * We do this in two parts to restrict an oversize referrer such that * we will always have space left to append an empty useragent, while * maintaining the structure of the log text */ l = lws_snprintf(ass, sizeof(ass) - 7, "%s %d %lu \"%s", wsi->http.access_log.header_log, wsi->http.access_log.response, wsi->http.access_log.sent, p1); if (strlen(p) > sizeof(ass) - 6 - l) { p[sizeof(ass) - 6 - l] = '\0'; l--; } l += lws_snprintf(ass + l, sizeof(ass) - 1 - l, "\" \"%s\"\n", p); ass[sizeof(ass) - 1] = '\0'; if (write(wsi->vhost->log_fd, ass, l) != l) lwsl_err("Failed to write log\n"); if (wsi->http.access_log.header_log) { lws_free(wsi->http.access_log.header_log); wsi->http.access_log.header_log = NULL; } if (wsi->http.access_log.user_agent) { lws_free(wsi->http.access_log.user_agent); wsi->http.access_log.user_agent = NULL; } if (wsi->http.access_log.referrer) { lws_free(wsi->http.access_log.referrer); wsi->http.access_log.referrer = NULL; } wsi->access_log_pending = 0; return 0; } libwebsockets-3.2.1/lib/roles/http/server/fops-zip.c000066400000000000000000000430261357643561300224710ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Original code used in this source file: * * https://github.com/PerBothner/DomTerm.git @912add15f3d0aec * * ./lws-term/io.c * ./lws-term/junzip.c * * Copyright (C) 2017 Per Bothner * * MIT License * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * ( copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * * * lws rewrite: * * Copyright (C) 2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #if defined(LWS_WITH_MINIZ) #include #else #include #endif /* * This code works with zip format containers which may have files compressed * with gzip deflate (type 8) or store uncompressed (type 0). * * Linux zip produces such zipfiles by default, eg * * $ zip ../myzip.zip file1 file2 file3 */ #define ZIP_COMPRESSION_METHOD_STORE 0 #define ZIP_COMPRESSION_METHOD_DEFLATE 8 typedef struct { lws_filepos_t filename_start; uint32_t crc32; uint32_t comp_size; uint32_t uncomp_size; uint32_t offset; uint32_t mod_time; uint16_t filename_len; uint16_t extra; uint16_t method; uint16_t file_com_len; } lws_fops_zip_hdr_t; typedef struct { struct lws_fop_fd fop_fd; /* MUST BE FIRST logical fop_fd into * file inside zip: fops_zip fops */ lws_fop_fd_t zip_fop_fd; /* logical fop fd on to zip file * itself: using platform fops */ lws_fops_zip_hdr_t hdr; z_stream inflate; lws_filepos_t content_start; lws_filepos_t exp_uncomp_pos; union { uint8_t trailer8[8]; uint32_t trailer32[2]; } u; uint8_t rbuf[128]; /* decompression chunk size */ int entry_count; unsigned int decompress:1; /* 0 = direct from file */ unsigned int add_gzip_container:1; } *lws_fops_zip_t; struct lws_plat_file_ops fops_zip; #define fop_fd_to_priv(FD) ((lws_fops_zip_t)(FD)) static const uint8_t hd[] = { 31, 139, 8, 0, 0, 0, 0, 0, 0, 3 }; enum { ZC_SIGNATURE = 0, ZC_VERSION_MADE_BY = 4, ZC_VERSION_NEEDED_TO_EXTRACT = 6, ZC_GENERAL_PURPOSE_BIT_FLAG = 8, ZC_COMPRESSION_METHOD = 10, ZC_LAST_MOD_FILE_TIME = 12, ZC_LAST_MOD_FILE_DATE = 14, ZC_CRC32 = 16, ZC_COMPRESSED_SIZE = 20, ZC_UNCOMPRESSED_SIZE = 24, ZC_FILE_NAME_LENGTH = 28, ZC_EXTRA_FIELD_LENGTH = 30, ZC_FILE_COMMENT_LENGTH = 32, ZC_DISK_NUMBER_START = 34, ZC_INTERNAL_FILE_ATTRIBUTES = 36, ZC_EXTERNAL_FILE_ATTRIBUTES = 38, ZC_REL_OFFSET_LOCAL_HEADER = 42, ZC_DIRECTORY_LENGTH = 46, ZE_SIGNATURE_OFFSET = 0, ZE_DESK_NUMBER = 4, ZE_CENTRAL_DIRECTORY_DISK_NUMBER = 6, ZE_NUM_ENTRIES_THIS_DISK = 8, ZE_NUM_ENTRIES = 10, ZE_CENTRAL_DIRECTORY_SIZE = 12, ZE_CENTRAL_DIR_OFFSET = 16, ZE_ZIP_COMMENT_LENGTH = 20, ZE_DIRECTORY_LENGTH = 22, ZL_REL_OFFSET_CONTENT = 28, ZL_HEADER_LENGTH = 30, LWS_FZ_ERR_SEEK_END_RECORD = 1, LWS_FZ_ERR_READ_END_RECORD, LWS_FZ_ERR_END_RECORD_MAGIC, LWS_FZ_ERR_END_RECORD_SANITY, LWS_FZ_ERR_CENTRAL_SEEK, LWS_FZ_ERR_CENTRAL_READ, LWS_FZ_ERR_CENTRAL_SANITY, LWS_FZ_ERR_NAME_TOO_LONG, LWS_FZ_ERR_NAME_SEEK, LWS_FZ_ERR_NAME_READ, LWS_FZ_ERR_CONTENT_SANITY, LWS_FZ_ERR_CONTENT_SEEK, LWS_FZ_ERR_SCAN_SEEK, LWS_FZ_ERR_NOT_FOUND, LWS_FZ_ERR_ZLIB_INIT, LWS_FZ_ERR_READ_CONTENT, LWS_FZ_ERR_SEEK_COMPRESSED, }; static uint16_t get_u16(void *p) { const uint8_t *c = (const uint8_t *)p; return (uint16_t)((c[0] | (c[1] << 8))); } static uint32_t get_u32(void *p) { const uint8_t *c = (const uint8_t *)p; return (uint32_t)((c[0] | (c[1] << 8) | (c[2] << 16) | (c[3] << 24))); } int lws_fops_zip_scan(lws_fops_zip_t priv, const char *name, int len) { lws_filepos_t amount; uint8_t buf[96]; int i; if (lws_vfs_file_seek_end(priv->zip_fop_fd, -ZE_DIRECTORY_LENGTH) < 0) return LWS_FZ_ERR_SEEK_END_RECORD; if (lws_vfs_file_read(priv->zip_fop_fd, &amount, buf, ZE_DIRECTORY_LENGTH)) return LWS_FZ_ERR_READ_END_RECORD; if (amount != ZE_DIRECTORY_LENGTH) return LWS_FZ_ERR_READ_END_RECORD; /* * We require the zip to have the last record right at the end * Linux zip always does this if no zip comment. */ if (buf[0] != 'P' || buf[1] != 'K' || buf[2] != 5 || buf[3] != 6) return LWS_FZ_ERR_END_RECORD_MAGIC; i = get_u16(buf + ZE_NUM_ENTRIES); if (get_u16(buf + ZE_DESK_NUMBER) || get_u16(buf + ZE_CENTRAL_DIRECTORY_DISK_NUMBER) || i != get_u16(buf + ZE_NUM_ENTRIES_THIS_DISK)) return LWS_FZ_ERR_END_RECORD_SANITY; /* end record is OK... look for our file in the central dir */ if (lws_vfs_file_seek_set(priv->zip_fop_fd, get_u32(buf + ZE_CENTRAL_DIR_OFFSET)) < 0) return LWS_FZ_ERR_CENTRAL_SEEK; while (i--) { priv->content_start = lws_vfs_tell(priv->zip_fop_fd); if (lws_vfs_file_read(priv->zip_fop_fd, &amount, buf, ZC_DIRECTORY_LENGTH)) return LWS_FZ_ERR_CENTRAL_READ; if (amount != ZC_DIRECTORY_LENGTH) return LWS_FZ_ERR_CENTRAL_READ; if (get_u32(buf + ZC_SIGNATURE) != 0x02014B50) return LWS_FZ_ERR_CENTRAL_SANITY; lwsl_debug("cstart 0x%lx\n", (unsigned long)priv->content_start); priv->hdr.filename_len = get_u16(buf + ZC_FILE_NAME_LENGTH); priv->hdr.extra = get_u16(buf + ZC_EXTRA_FIELD_LENGTH); priv->hdr.filename_start = lws_vfs_tell(priv->zip_fop_fd); priv->hdr.method = get_u16(buf + ZC_COMPRESSION_METHOD); priv->hdr.crc32 = get_u32(buf + ZC_CRC32); priv->hdr.comp_size = get_u32(buf + ZC_COMPRESSED_SIZE); priv->hdr.uncomp_size = get_u32(buf + ZC_UNCOMPRESSED_SIZE); priv->hdr.offset = get_u32(buf + ZC_REL_OFFSET_LOCAL_HEADER); priv->hdr.mod_time = get_u32(buf + ZC_LAST_MOD_FILE_TIME); priv->hdr.file_com_len = get_u16(buf + ZC_FILE_COMMENT_LENGTH); if (priv->hdr.filename_len != len) goto next; if (len >= (int)sizeof(buf) - 1) return LWS_FZ_ERR_NAME_TOO_LONG; if (priv->zip_fop_fd->fops->LWS_FOP_READ(priv->zip_fop_fd, &amount, buf, len)) return LWS_FZ_ERR_NAME_READ; if ((int)amount != len) return LWS_FZ_ERR_NAME_READ; buf[len] = '\0'; lwsl_debug("check %s vs %s\n", buf, name); if (strcmp((const char *)buf, name)) goto next; /* we found a match */ if (lws_vfs_file_seek_set(priv->zip_fop_fd, priv->hdr.offset) < 0) return LWS_FZ_ERR_NAME_SEEK; if (priv->zip_fop_fd->fops->LWS_FOP_READ(priv->zip_fop_fd, &amount, buf, ZL_HEADER_LENGTH)) return LWS_FZ_ERR_NAME_READ; if (amount != ZL_HEADER_LENGTH) return LWS_FZ_ERR_NAME_READ; priv->content_start = priv->hdr.offset + ZL_HEADER_LENGTH + priv->hdr.filename_len + get_u16(buf + ZL_REL_OFFSET_CONTENT); lwsl_debug("content supposed to start at 0x%lx\n", (unsigned long)priv->content_start); if (priv->content_start > priv->zip_fop_fd->len) return LWS_FZ_ERR_CONTENT_SANITY; if (lws_vfs_file_seek_set(priv->zip_fop_fd, priv->content_start) < 0) return LWS_FZ_ERR_CONTENT_SEEK; /* we are aligned at the start of the content */ priv->exp_uncomp_pos = 0; return 0; next: if (i && lws_vfs_file_seek_set(priv->zip_fop_fd, priv->content_start + ZC_DIRECTORY_LENGTH + priv->hdr.filename_len + priv->hdr.extra + priv->hdr.file_com_len) < 0) return LWS_FZ_ERR_SCAN_SEEK; } return LWS_FZ_ERR_NOT_FOUND; } static int lws_fops_zip_reset_inflate(lws_fops_zip_t priv) { if (priv->decompress) inflateEnd(&priv->inflate); priv->inflate.zalloc = Z_NULL; priv->inflate.zfree = Z_NULL; priv->inflate.opaque = Z_NULL; priv->inflate.avail_in = 0; priv->inflate.next_in = Z_NULL; if (inflateInit2(&priv->inflate, -MAX_WBITS) != Z_OK) { lwsl_err("inflate init failed\n"); return LWS_FZ_ERR_ZLIB_INIT; } if (lws_vfs_file_seek_set(priv->zip_fop_fd, priv->content_start) < 0) return LWS_FZ_ERR_CONTENT_SEEK; priv->exp_uncomp_pos = 0; return 0; } static lws_fop_fd_t lws_fops_zip_open(const struct lws_plat_file_ops *fops, const char *vfs_path, const char *vpath, lws_fop_flags_t *flags) { lws_fop_flags_t local_flags = 0; lws_fops_zip_t priv; char rp[192]; int m; /* * vpath points at the / after the fops signature in vfs_path, eg * with a vfs_path "/var/www/docs/manual.zip/index.html", vpath * will come pointing at "/index.html" */ priv = lws_zalloc(sizeof(*priv), "fops_zip priv"); if (!priv) return NULL; priv->fop_fd.fops = &fops_zip; m = sizeof(rp) - 1; if ((vpath - vfs_path - 1) < m) m = lws_ptr_diff(vpath, vfs_path) - 1; lws_strncpy(rp, vfs_path, m + 1); /* open the zip file itself using the incoming fops, not fops_zip */ priv->zip_fop_fd = fops->LWS_FOP_OPEN(fops, rp, NULL, &local_flags); if (!priv->zip_fop_fd) { lwsl_err("unable to open zip %s\n", rp); goto bail1; } if (*vpath == '/') vpath++; m = lws_fops_zip_scan(priv, vpath, (int)strlen(vpath)); if (m) { lwsl_err("unable to find record matching '%s' %d\n", vpath, m); goto bail2; } /* the directory metadata tells us modification time, so pass it on */ priv->fop_fd.mod_time = priv->hdr.mod_time; *flags |= LWS_FOP_FLAG_MOD_TIME_VALID | LWS_FOP_FLAG_VIRTUAL; priv->fop_fd.flags = *flags; /* The zip fop_fd is left pointing at the start of the content. * * 1) Content could be uncompressed (STORE), and we can always serve * that directly * * 2) Content could be compressed (GZIP), and the client can handle * receiving GZIP... we can wrap it in a GZIP header and trailer * and serve the content part directly. The flag indicating we * are providing GZIP directly is set so lws will send the right * headers. * * 3) Content could be compressed (GZIP) but the client can't handle * receiving GZIP... we can decompress it and serve as it is * inflated piecemeal. * * 4) Content may be compressed some unknown way... fail * */ if (priv->hdr.method == ZIP_COMPRESSION_METHOD_STORE) { /* * it is stored uncompressed, leave it indicated as * uncompressed, and just serve it from inside the * zip with no gzip container; */ lwsl_info("direct zip serving (stored)\n"); priv->fop_fd.len = priv->hdr.uncomp_size; return &priv->fop_fd; } if ((*flags & LWS_FOP_FLAG_COMPR_ACCEPTABLE_GZIP) && priv->hdr.method == ZIP_COMPRESSION_METHOD_DEFLATE) { /* * We can serve the gzipped file contents directly as gzip * from inside the zip container; client says it is OK. * * To convert to standalone gzip, we have to add a 10-byte * constant header and a variable 8-byte trailer around the * content. * * The 8-byte trailer is prepared now and held in the priv. */ lwsl_info("direct zip serving (gzipped)\n"); priv->fop_fd.len = sizeof(hd) + priv->hdr.comp_size + sizeof(priv->u); if (lws_is_be()) { uint8_t *p = priv->u.trailer8; *p++ = (uint8_t)priv->hdr.crc32; *p++ = (uint8_t)(priv->hdr.crc32 >> 8); *p++ = (uint8_t)(priv->hdr.crc32 >> 16); *p++ = (uint8_t)(priv->hdr.crc32 >> 24); *p++ = (uint8_t)priv->hdr.uncomp_size; *p++ = (uint8_t)(priv->hdr.uncomp_size >> 8); *p++ = (uint8_t)(priv->hdr.uncomp_size >> 16); *p = (uint8_t)(priv->hdr.uncomp_size >> 24); } else { priv->u.trailer32[0] = priv->hdr.crc32; priv->u.trailer32[1] = priv->hdr.uncomp_size; } *flags |= LWS_FOP_FLAG_COMPR_IS_GZIP; priv->fop_fd.flags = *flags; priv->add_gzip_container = 1; return &priv->fop_fd; } if (priv->hdr.method == ZIP_COMPRESSION_METHOD_DEFLATE) { /* we must decompress it to serve it */ lwsl_info("decompressed zip serving\n"); priv->fop_fd.len = priv->hdr.uncomp_size; if (lws_fops_zip_reset_inflate(priv)) { lwsl_err("inflate init failed\n"); goto bail2; } priv->decompress = 1; return &priv->fop_fd; } /* we can't handle it ... */ lwsl_err("zipped file %s compressed in unknown way (%d)\n", vfs_path, priv->hdr.method); bail2: lws_vfs_file_close(&priv->zip_fop_fd); bail1: free(priv); return NULL; } /* ie, we are closing the fop_fd for the file inside the gzip */ static int lws_fops_zip_close(lws_fop_fd_t *fd) { lws_fops_zip_t priv = fop_fd_to_priv(*fd); if (priv->decompress) inflateEnd(&priv->inflate); lws_vfs_file_close(&priv->zip_fop_fd); /* close the gzip fop_fd */ free(priv); *fd = NULL; return 0; } static lws_fileofs_t lws_fops_zip_seek_cur(lws_fop_fd_t fd, lws_fileofs_t offset_from_cur_pos) { fd->pos += offset_from_cur_pos; return fd->pos; } static int lws_fops_zip_read(lws_fop_fd_t fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { lws_fops_zip_t priv = fop_fd_to_priv(fd); lws_filepos_t ramount, rlen, cur = lws_vfs_tell(fd); int ret; if (priv->decompress) { if (priv->exp_uncomp_pos != fd->pos) { /* * there has been a seek in the uncompressed fop_fd * we have to restart the decompression and loop eating * the decompressed data up to the seek point */ lwsl_info("seek in decompressed\n"); lws_fops_zip_reset_inflate(priv); while (priv->exp_uncomp_pos != fd->pos) { rlen = len; if (rlen > fd->pos - priv->exp_uncomp_pos) rlen = fd->pos - priv->exp_uncomp_pos; if (lws_fops_zip_read(fd, amount, buf, rlen)) return LWS_FZ_ERR_SEEK_COMPRESSED; } *amount = 0; } priv->inflate.avail_out = (unsigned int)len; priv->inflate.next_out = buf; spin: if (!priv->inflate.avail_in) { rlen = sizeof(priv->rbuf); if (rlen > priv->hdr.comp_size - (cur - priv->content_start)) rlen = priv->hdr.comp_size - (priv->hdr.comp_size - priv->content_start); if (priv->zip_fop_fd->fops->LWS_FOP_READ( priv->zip_fop_fd, &ramount, priv->rbuf, rlen)) return LWS_FZ_ERR_READ_CONTENT; cur += ramount; priv->inflate.avail_in = (unsigned int)ramount; priv->inflate.next_in = priv->rbuf; } ret = inflate(&priv->inflate, Z_NO_FLUSH); if (ret == Z_STREAM_ERROR) return ret; switch (ret) { case Z_NEED_DICT: ret = Z_DATA_ERROR; /* fallthru */ case Z_DATA_ERROR: case Z_MEM_ERROR: return ret; } if (!priv->inflate.avail_in && priv->inflate.avail_out && cur != priv->content_start + priv->hdr.comp_size) goto spin; *amount = len - priv->inflate.avail_out; priv->exp_uncomp_pos += *amount; fd->pos += *amount; return 0; } if (priv->add_gzip_container) { lwsl_info("%s: gzip + container\n", __func__); *amount = 0; /* place the canned header at the start */ if (len && fd->pos < sizeof(hd)) { rlen = sizeof(hd) - fd->pos; if (rlen > len) rlen = len; /* provide stuff from canned header */ memcpy(buf, hd + fd->pos, (size_t)rlen); fd->pos += rlen; buf += rlen; len -= rlen; *amount += rlen; } /* serve gzipped data direct from zipfile */ if (len && fd->pos >= sizeof(hd) && fd->pos < priv->hdr.comp_size + sizeof(hd)) { rlen = priv->hdr.comp_size - (priv->zip_fop_fd->pos - priv->content_start); if (rlen > len) rlen = len; if (rlen && priv->zip_fop_fd->pos < (priv->hdr.comp_size + priv->content_start)) { if (lws_vfs_file_read(priv->zip_fop_fd, &ramount, buf, rlen)) return LWS_FZ_ERR_READ_CONTENT; *amount += ramount; fd->pos += ramount; // virtual pos buf += ramount; len -= ramount; } } /* place the prepared trailer at the end */ if (len && fd->pos >= priv->hdr.comp_size + sizeof(hd) && fd->pos < priv->hdr.comp_size + sizeof(hd) + sizeof(priv->u)) { cur = fd->pos - priv->hdr.comp_size - sizeof(hd); rlen = sizeof(priv->u) - cur; if (rlen > len) rlen = len; memcpy(buf, priv->u.trailer8 + cur, (size_t)rlen); *amount += rlen; fd->pos += rlen; } return 0; } lwsl_info("%s: store\n", __func__); if (len > priv->hdr.uncomp_size - (cur - priv->content_start)) len = priv->hdr.comp_size - (priv->hdr.comp_size - priv->content_start); if (priv->zip_fop_fd->fops->LWS_FOP_READ(priv->zip_fop_fd, amount, buf, len)) return LWS_FZ_ERR_READ_CONTENT; return 0; } struct lws_plat_file_ops fops_zip = { lws_fops_zip_open, lws_fops_zip_close, lws_fops_zip_seek_cur, lws_fops_zip_read, NULL, { { ".zip/", 5 }, { ".jar/", 5 }, { ".war/", 5 } }, NULL, }; libwebsockets-3.2.1/lib/roles/http/server/lejp-conf.c000066400000000000000000000620601357643561300225760ustar00rootroot00000000000000/* * libwebsockets web server application * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #ifndef _WIN32 /* this is needed for Travis CI */ #include #endif #define ESC_INSTALL_DATADIR "_lws_ddir_" static const char * const paths_global[] = { "global.uid", "global.gid", "global.username", "global.groupname", "global.count-threads", "global.init-ssl", "global.server-string", "global.plugin-dir", "global.ws-pingpong-secs", "global.timeout-secs", "global.reject-service-keywords[].*", "global.reject-service-keywords[]", "global.default-alpn", }; enum lejp_global_paths { LEJPGP_UID, LEJPGP_GID, LEJPGP_USERNAME, LEJPGP_GROUPNAME, LEJPGP_COUNT_THREADS, LWJPGP_INIT_SSL, LEJPGP_SERVER_STRING, LEJPGP_PLUGIN_DIR, LWJPGP_PINGPONG_SECS, LWJPGP_TIMEOUT_SECS, LWJPGP_REJECT_SERVICE_KEYWORDS_NAME, LWJPGP_REJECT_SERVICE_KEYWORDS, LWJPGP_DEFAULT_ALPN, }; static const char * const paths_vhosts[] = { "vhosts[]", "vhosts[].mounts[]", "vhosts[].name", "vhosts[].port", "vhosts[].interface", "vhosts[].unix-socket", "vhosts[].unix-socket-perms", "vhosts[].sts", "vhosts[].host-ssl-key", "vhosts[].host-ssl-cert", "vhosts[].host-ssl-ca", "vhosts[].access-log", "vhosts[].mounts[].mountpoint", "vhosts[].mounts[].origin", "vhosts[].mounts[].protocol", "vhosts[].mounts[].default", "vhosts[].mounts[].auth-mask", "vhosts[].mounts[].cgi-timeout", "vhosts[].mounts[].cgi-env[].*", "vhosts[].mounts[].cache-max-age", "vhosts[].mounts[].cache-reuse", "vhosts[].mounts[].cache-revalidate", "vhosts[].mounts[].basic-auth", "vhosts[].mounts[].cache-intermediaries", "vhosts[].mounts[].extra-mimetypes.*", "vhosts[].mounts[].interpret.*", "vhosts[].ws-protocols[].*.*", "vhosts[].ws-protocols[].*", "vhosts[].ws-protocols[]", "vhosts[].keepalive_timeout", "vhosts[].enable-client-ssl", "vhosts[].ciphers", "vhosts[].ecdh-curve", "vhosts[].noipv6", "vhosts[].ipv6only", "vhosts[].ssl-option-set", "vhosts[].ssl-option-clear", "vhosts[].mounts[].pmo[].*", "vhosts[].headers[].*", "vhosts[].headers[]", "vhosts[].client-ssl-key", "vhosts[].client-ssl-cert", "vhosts[].client-ssl-ca", "vhosts[].client-ssl-ciphers", "vhosts[].onlyraw", "vhosts[].client-cert-required", "vhosts[].ignore-missing-cert", "vhosts[].error-document-404", "vhosts[].alpn", "vhosts[].ssl-client-option-set", "vhosts[].ssl-client-option-clear", "vhosts[].tls13-ciphers", "vhosts[].client-tls13-ciphers", "vhosts[].strict-host-check", "vhosts[].listen-accept-role", "vhosts[].listen-accept-protocol", "vhosts[].apply-listen-accept", /* deprecates "onlyraw" */ "vhosts[].fallback-listen-accept", "vhosts[].allow-non-tls", "vhosts[].redirect-http", "vhosts[].allow-http-on-https", "vhosts[].disable-no-protocol-ws-upgrades", }; enum lejp_vhost_paths { LEJPVP, LEJPVP_MOUNTS, LEJPVP_NAME, LEJPVP_PORT, LEJPVP_INTERFACE, LEJPVP_UNIXSKT, LEJPVP_UNIXSKT_PERMS, LEJPVP_STS, LEJPVP_HOST_SSL_KEY, LEJPVP_HOST_SSL_CERT, LEJPVP_HOST_SSL_CA, LEJPVP_ACCESS_LOG, LEJPVP_MOUNTPOINT, LEJPVP_ORIGIN, LEJPVP_MOUNT_PROTOCOL, LEJPVP_DEFAULT, LEJPVP_DEFAULT_AUTH_MASK, LEJPVP_CGI_TIMEOUT, LEJPVP_CGI_ENV, LEJPVP_MOUNT_CACHE_MAX_AGE, LEJPVP_MOUNT_CACHE_REUSE, LEJPVP_MOUNT_CACHE_REVALIDATE, LEJPVP_MOUNT_BASIC_AUTH, LEJPVP_MOUNT_CACHE_INTERMEDIARIES, LEJPVP_MOUNT_EXTRA_MIMETYPES, LEJPVP_MOUNT_INTERPRET, LEJPVP_PROTOCOL_NAME_OPT, LEJPVP_PROTOCOL_NAME, LEJPVP_PROTOCOL, LEJPVP_KEEPALIVE_TIMEOUT, LEJPVP_ENABLE_CLIENT_SSL, LEJPVP_CIPHERS, LEJPVP_ECDH_CURVE, LEJPVP_NOIPV6, LEJPVP_IPV6ONLY, LEJPVP_SSL_OPTION_SET, LEJPVP_SSL_OPTION_CLEAR, LEJPVP_PMO, LEJPVP_HEADERS_NAME, LEJPVP_HEADERS, LEJPVP_CLIENT_SSL_KEY, LEJPVP_CLIENT_SSL_CERT, LEJPVP_CLIENT_SSL_CA, LEJPVP_CLIENT_CIPHERS, LEJPVP_FLAG_ONLYRAW, LEJPVP_FLAG_CLIENT_CERT_REQUIRED, LEJPVP_IGNORE_MISSING_CERT, LEJPVP_ERROR_DOCUMENT_404, LEJPVP_ALPN, LEJPVP_SSL_CLIENT_OPTION_SET, LEJPVP_SSL_CLIENT_OPTION_CLEAR, LEJPVP_TLS13_CIPHERS, LEJPVP_CLIENT_TLS13_CIPHERS, LEJPVP_FLAG_STRICT_HOST_CHECK, LEJPVP_LISTEN_ACCEPT_ROLE, LEJPVP_LISTEN_ACCEPT_PROTOCOL, LEJPVP_FLAG_APPLY_LISTEN_ACCEPT, LEJPVP_FLAG_FALLBACK_LISTEN_ACCEPT, LEJPVP_FLAG_ALLOW_NON_TLS, LEJPVP_FLAG_REDIRECT_HTTP, LEJPVP_FLAG_ALLOW_HTTP_ON_HTTPS, LEJPVP_FLAG_DISABLE_NO_PROTOCOL_WS_UPGRADES, }; #define MAX_PLUGIN_DIRS 10 struct jpargs { struct lws_context_creation_info *info; struct lws_context *context; const struct lws_protocols *protocols; const struct lws_protocols **pprotocols; const struct lws_extension *extensions; char *p, *end, valid; struct lws_http_mount *head, *last; struct lws_protocol_vhost_options *pvo; struct lws_protocol_vhost_options *pvo_em; struct lws_protocol_vhost_options *pvo_int; struct lws_http_mount m; const char **plugin_dirs; int count_plugin_dirs; unsigned int reject_ws_with_no_protocol:1; unsigned int enable_client_ssl:1; unsigned int fresh_mount:1; unsigned int any_vhosts:1; unsigned int chunk:1; }; static void * lwsws_align(struct jpargs *a) { if ((lws_intptr_t)(a->p) & 15) a->p += 16 - ((lws_intptr_t)(a->p) & 15); a->chunk = 0; return a->p; } static int arg_to_bool(const char *s) { static const char * const on[] = { "on", "yes", "true" }; int n = atoi(s); if (n) return 1; for (n = 0; n < (int)LWS_ARRAY_SIZE(on); n++) if (!strcasecmp(s, on[n])) return 1; return 0; } static void set_reset_flag(unsigned int *p, const char *state, unsigned int flag) { if (arg_to_bool(state)) *p |= flag; else *p &= ~(flag); } static signed char lejp_globals_cb(struct lejp_ctx *ctx, char reason) { struct jpargs *a = (struct jpargs *)ctx->user; struct lws_protocol_vhost_options *rej; int n; /* we only match on the prepared path strings */ if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; /* this catches, eg, vhosts[].headers[].xxx */ if (reason == LEJPCB_VAL_STR_END && ctx->path_match == LWJPGP_REJECT_SERVICE_KEYWORDS_NAME + 1) { rej = lwsws_align(a); a->p += sizeof(*rej); n = lejp_get_wildcard(ctx, 0, a->p, lws_ptr_diff(a->end, a->p)); rej->next = a->info->reject_service_keywords; a->info->reject_service_keywords = rej; rej->name = a->p; lwsl_notice(" adding rej %s=%s\n", a->p, ctx->buf); a->p += n - 1; *(a->p++) = '\0'; rej->value = a->p; rej->options = NULL; goto dostring; } switch (ctx->path_match - 1) { case LEJPGP_UID: a->info->uid = atoi(ctx->buf); return 0; case LEJPGP_GID: a->info->gid = atoi(ctx->buf); return 0; case LEJPGP_USERNAME: a->info->username = a->p; break; case LEJPGP_GROUPNAME: a->info->groupname = a->p; break; case LEJPGP_COUNT_THREADS: a->info->count_threads = atoi(ctx->buf); return 0; case LWJPGP_INIT_SSL: if (arg_to_bool(ctx->buf)) a->info->options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; return 0; case LEJPGP_SERVER_STRING: a->info->server_string = a->p; break; case LEJPGP_PLUGIN_DIR: if (a->count_plugin_dirs == MAX_PLUGIN_DIRS - 1) { lwsl_err("Too many plugin dirs\n"); return -1; } a->plugin_dirs[a->count_plugin_dirs++] = a->p; break; case LWJPGP_PINGPONG_SECS: a->info->ws_ping_pong_interval = atoi(ctx->buf); return 0; case LWJPGP_TIMEOUT_SECS: a->info->timeout_secs = atoi(ctx->buf); return 0; case LWJPGP_DEFAULT_ALPN: a->info->alpn = a->p; break; default: return 0; } dostring: a->p += lws_snprintf(a->p, a->end - a->p, "%s", ctx->buf); *(a->p)++ = '\0'; return 0; } static signed char lejp_vhosts_cb(struct lejp_ctx *ctx, char reason) { struct jpargs *a = (struct jpargs *)ctx->user; struct lws_protocol_vhost_options *pvo, *mp_cgienv, *headers; struct lws_http_mount *m; char *p, *p1; int n; #if 0 lwsl_notice(" %d: %s (%d)\n", reason, ctx->path, ctx->path_match); for (n = 0; n < ctx->wildcount; n++) lwsl_notice(" %d\n", ctx->wild[n]); #endif if (reason == LEJPCB_OBJECT_START && ctx->path_match == LEJPVP + 1) { uint32_t i[4]; const char *ss; /* set the defaults for this vhost */ a->reject_ws_with_no_protocol = 0; a->valid = 1; a->head = NULL; a->last = NULL; i[0] = a->info->count_threads; i[1] = a->info->options & ( LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME | LWS_SERVER_OPTION_LIBUV | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN | LWS_SERVER_OPTION_LIBEVENT | LWS_SERVER_OPTION_LIBEV ); ss = a->info->server_string; i[2] = a->info->ws_ping_pong_interval; i[3] = a->info->timeout_secs; memset(a->info, 0, sizeof(*a->info)); a->info->count_threads = i[0]; a->info->options = i[1]; a->info->server_string = ss; a->info->ws_ping_pong_interval = i[2]; a->info->timeout_secs = i[3]; a->info->protocols = a->protocols; a->info->pprotocols = a->pprotocols; a->info->extensions = a->extensions; #if defined(LWS_WITH_TLS) a->info->client_ssl_cipher_list = "ECDHE-ECDSA-AES256-GCM-SHA384:" "ECDHE-RSA-AES256-GCM-SHA384:" "DHE-RSA-AES256-GCM-SHA384:" "ECDHE-RSA-AES256-SHA384:" "HIGH:!aNULL:!eNULL:!EXPORT:" "!DES:!MD5:!PSK:!RC4:!HMAC_SHA1:" "!SHA1:!DHE-RSA-AES128-GCM-SHA256:" "!DHE-RSA-AES128-SHA256:" "!AES128-GCM-SHA256:" "!AES128-SHA256:" "!DHE-RSA-AES256-SHA256:" "!AES256-GCM-SHA384:" "!AES256-SHA256"; #endif a->info->ssl_cipher_list = "ECDHE-ECDSA-AES256-GCM-SHA384:" "ECDHE-RSA-AES256-GCM-SHA384:" "DHE-RSA-AES256-GCM-SHA384:" "ECDHE-RSA-AES256-SHA384:" "HIGH:!aNULL:!eNULL:!EXPORT:" "!DES:!MD5:!PSK:!RC4:!HMAC_SHA1:" "!SHA1:!DHE-RSA-AES128-GCM-SHA256:" "!DHE-RSA-AES128-SHA256:" "!AES128-GCM-SHA256:" "!AES128-SHA256:" "!DHE-RSA-AES256-SHA256:" "!AES256-GCM-SHA384:" "!AES256-SHA256"; a->info->keepalive_timeout = 5; } if (reason == LEJPCB_OBJECT_START && ctx->path_match == LEJPVP_MOUNTS + 1) { a->fresh_mount = 1; memset(&a->m, 0, sizeof(a->m)); } /* this catches, eg, vhosts[].ws-protocols[].xxx-protocol */ if (reason == LEJPCB_OBJECT_START && ctx->path_match == LEJPVP_PROTOCOL_NAME + 1) { a->pvo = lwsws_align(a); a->p += sizeof(*a->pvo); n = lejp_get_wildcard(ctx, 0, a->p, lws_ptr_diff(a->end, a->p)); /* ie, enable this protocol, no options yet */ a->pvo->next = a->info->pvo; a->info->pvo = a->pvo; a->pvo->name = a->p; lwsl_info(" adding protocol %s\n", a->p); a->p += n; a->pvo->value = a->p; a->pvo->options = NULL; goto dostring; } /* this catches, eg, vhosts[].headers[].xxx */ if ((reason == LEJPCB_VAL_STR_END || reason == LEJPCB_VAL_STR_CHUNK) && ctx->path_match == LEJPVP_HEADERS_NAME + 1) { if (!a->chunk) { headers = lwsws_align(a); a->p += sizeof(*headers); n = lejp_get_wildcard(ctx, 0, a->p, lws_ptr_diff(a->end, a->p)); /* ie, add this header */ headers->next = a->info->headers; a->info->headers = headers; headers->name = a->p; lwsl_notice(" adding header %s=%s\n", a->p, ctx->buf); a->p += n - 1; *(a->p++) = ':'; if (a->p < a->end) *(a->p++) = '\0'; else *(a->p - 1) = '\0'; headers->value = a->p; headers->options = NULL; } a->chunk = reason == LEJPCB_VAL_STR_CHUNK; goto dostring; } if (reason == LEJPCB_OBJECT_END && (ctx->path_match == LEJPVP + 1 || !ctx->path[0]) && a->valid) { struct lws_vhost *vhost; //lwsl_notice("%s\n", ctx->path); if (!a->info->port && !(a->info->options & LWS_SERVER_OPTION_UNIX_SOCK)) { lwsl_err("Port required (eg, 443)\n"); return 1; } a->valid = 0; a->info->mounts = a->head; vhost = lws_create_vhost(a->context, a->info); if (!vhost) { lwsl_err("Failed to create vhost %s\n", a->info->vhost_name); return 1; } a->any_vhosts = 1; if (a->reject_ws_with_no_protocol) { a->reject_ws_with_no_protocol = 0; vhost->default_protocol_index = 255; } #if defined(LWS_WITH_TLS) if (a->enable_client_ssl) { const char *cert_filepath = a->info->client_ssl_cert_filepath; const char *private_key_filepath = a->info->client_ssl_private_key_filepath; const char *ca_filepath = a->info->client_ssl_ca_filepath; const char *cipher_list = a->info->client_ssl_cipher_list; memset(a->info, 0, sizeof(*a->info)); a->info->client_ssl_cert_filepath = cert_filepath; a->info->client_ssl_private_key_filepath = private_key_filepath; a->info->client_ssl_ca_filepath = ca_filepath; a->info->client_ssl_cipher_list = cipher_list; a->info->options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; lws_init_vhost_client_ssl(a->info, vhost); } #endif return 0; } if (reason == LEJPCB_OBJECT_END && ctx->path_match == LEJPVP_MOUNTS + 1) { static const char * const mount_protocols[] = { "http://", "https://", "file://", "cgi://", ">http://", ">https://", "callback://", "gzip://", }; if (!a->fresh_mount) return 0; if (!a->m.mountpoint || !a->m.origin) { lwsl_err("mountpoint and origin required\n"); return 1; } lwsl_debug("adding mount %s\n", a->m.mountpoint); m = lwsws_align(a); memcpy(m, &a->m, sizeof(*m)); if (a->last) a->last->mount_next = m; for (n = 0; n < (int)LWS_ARRAY_SIZE(mount_protocols); n++) if (!strncmp(a->m.origin, mount_protocols[n], strlen(mount_protocols[n]))) { lwsl_info("----%s\n", a->m.origin); m->origin_protocol = n; m->origin = a->m.origin + strlen(mount_protocols[n]); break; } if (n == (int)LWS_ARRAY_SIZE(mount_protocols)) { lwsl_err("unsupported protocol:// %s\n", a->m.origin); return 1; } a->p += sizeof(*m); if (!a->head) a->head = m; a->last = m; a->fresh_mount = 0; } /* we only match on the prepared path strings */ if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; switch (ctx->path_match - 1) { case LEJPVP_NAME: a->info->vhost_name = a->p; break; case LEJPVP_PORT: a->info->port = atoi(ctx->buf); return 0; case LEJPVP_INTERFACE: a->info->iface = a->p; break; case LEJPVP_UNIXSKT: if (arg_to_bool(ctx->buf)) a->info->options |= LWS_SERVER_OPTION_UNIX_SOCK; else a->info->options &= ~(LWS_SERVER_OPTION_UNIX_SOCK); return 0; case LEJPVP_UNIXSKT_PERMS: a->info->unix_socket_perms = a->p; break; case LEJPVP_STS: if (arg_to_bool(ctx->buf)) a->info->options |= LWS_SERVER_OPTION_STS; else a->info->options &= ~(LWS_SERVER_OPTION_STS); return 0; case LEJPVP_HOST_SSL_KEY: a->info->ssl_private_key_filepath = a->p; break; case LEJPVP_HOST_SSL_CERT: a->info->ssl_cert_filepath = a->p; break; case LEJPVP_HOST_SSL_CA: a->info->ssl_ca_filepath = a->p; break; case LEJPVP_ACCESS_LOG: a->info->log_filepath = a->p; break; case LEJPVP_MOUNTPOINT: a->m.mountpoint = a->p; a->m.mountpoint_len = (unsigned char)strlen(ctx->buf); break; case LEJPVP_ORIGIN: if (!strncmp(ctx->buf, "callback://", 11)) a->m.protocol = a->p + 11; if (!a->m.origin) a->m.origin = a->p; break; case LEJPVP_DEFAULT: a->m.def = a->p; break; case LEJPVP_DEFAULT_AUTH_MASK: a->m.auth_mask = atoi(ctx->buf); return 0; case LEJPVP_MOUNT_CACHE_MAX_AGE: a->m.cache_max_age = atoi(ctx->buf); return 0; case LEJPVP_MOUNT_CACHE_REUSE: a->m.cache_reusable = arg_to_bool(ctx->buf); return 0; case LEJPVP_MOUNT_CACHE_REVALIDATE: a->m.cache_revalidate = arg_to_bool(ctx->buf); return 0; case LEJPVP_MOUNT_CACHE_INTERMEDIARIES: a->m.cache_intermediaries = arg_to_bool(ctx->buf);; return 0; case LEJPVP_MOUNT_BASIC_AUTH: a->m.basic_auth_login_file = a->p; break; case LEJPVP_CGI_TIMEOUT: a->m.cgi_timeout = atoi(ctx->buf); return 0; case LEJPVP_KEEPALIVE_TIMEOUT: a->info->keepalive_timeout = atoi(ctx->buf); return 0; #if defined(LWS_WITH_TLS) case LEJPVP_CLIENT_CIPHERS: a->info->client_ssl_cipher_list = a->p; break; #endif case LEJPVP_CIPHERS: a->info->ssl_cipher_list = a->p; break; case LEJPVP_TLS13_CIPHERS: a->info->tls1_3_plus_cipher_list = a->p; break; case LEJPVP_CLIENT_TLS13_CIPHERS: a->info->client_tls_1_3_plus_cipher_list = a->p; break; case LEJPVP_ECDH_CURVE: a->info->ecdh_curve = a->p; break; case LEJPVP_PMO: case LEJPVP_CGI_ENV: mp_cgienv = lwsws_align(a); a->p += sizeof(*a->m.cgienv); mp_cgienv->next = a->m.cgienv; a->m.cgienv = mp_cgienv; n = lejp_get_wildcard(ctx, 0, a->p, lws_ptr_diff(a->end, a->p)); mp_cgienv->name = a->p; a->p += n; mp_cgienv->value = a->p; mp_cgienv->options = NULL; //lwsl_notice(" adding pmo / cgi-env '%s' = '%s'\n", // mp_cgienv->name, mp_cgienv->value); goto dostring; case LEJPVP_PROTOCOL_NAME_OPT: /* this catches, eg, * vhosts[].ws-protocols[].xxx-protocol.yyy-option * ie, these are options attached to a protocol with { } */ pvo = lwsws_align(a); a->p += sizeof(*a->pvo); n = lejp_get_wildcard(ctx, 1, a->p, lws_ptr_diff(a->end, a->p)); /* ie, enable this protocol, no options yet */ pvo->next = a->pvo->options; a->pvo->options = pvo; pvo->name = a->p; a->p += n; pvo->value = a->p; pvo->options = NULL; break; case LEJPVP_MOUNT_EXTRA_MIMETYPES: a->pvo_em = lwsws_align(a); a->p += sizeof(*a->pvo_em); n = lejp_get_wildcard(ctx, 0, a->p, lws_ptr_diff(a->end, a->p)); /* ie, enable this protocol, no options yet */ a->pvo_em->next = a->m.extra_mimetypes; a->m.extra_mimetypes = a->pvo_em; a->pvo_em->name = a->p; lwsl_notice(" + extra-mimetypes %s -> %s\n", a->p, ctx->buf); a->p += n; a->pvo_em->value = a->p; a->pvo_em->options = NULL; break; case LEJPVP_MOUNT_INTERPRET: a->pvo_int = lwsws_align(a); a->p += sizeof(*a->pvo_int); n = lejp_get_wildcard(ctx, 0, a->p, lws_ptr_diff(a->end, a->p)); /* ie, enable this protocol, no options yet */ a->pvo_int->next = a->m.interpret; a->m.interpret = a->pvo_int; a->pvo_int->name = a->p; lwsl_notice(" adding interpret %s -> %s\n", a->p, ctx->buf); a->p += n; a->pvo_int->value = a->p; a->pvo_int->options = NULL; break; case LEJPVP_ENABLE_CLIENT_SSL: a->enable_client_ssl = arg_to_bool(ctx->buf); return 0; #if defined(LWS_WITH_TLS) case LEJPVP_CLIENT_SSL_KEY: a->info->client_ssl_private_key_filepath = a->p; break; case LEJPVP_CLIENT_SSL_CERT: a->info->client_ssl_cert_filepath = a->p; break; case LEJPVP_CLIENT_SSL_CA: a->info->client_ssl_ca_filepath = a->p; break; #endif case LEJPVP_NOIPV6: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_DISABLE_IPV6); return 0; case LEJPVP_FLAG_ONLYRAW: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG); return 0; case LEJPVP_IPV6ONLY: a->info->options |= LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY; set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE); return 0; case LEJPVP_FLAG_CLIENT_CERT_REQUIRED: if (arg_to_bool(ctx->buf)) a->info->options |= LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT; return 0; case LEJPVP_IGNORE_MISSING_CERT: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_IGNORE_MISSING_CERT); return 0; case LEJPVP_FLAG_STRICT_HOST_CHECK: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK); return 0; case LEJPVP_ERROR_DOCUMENT_404: a->info->error_document_404 = a->p; break; case LEJPVP_SSL_OPTION_SET: a->info->ssl_options_set |= atol(ctx->buf); return 0; case LEJPVP_SSL_OPTION_CLEAR: a->info->ssl_options_clear |= atol(ctx->buf); return 0; case LEJPVP_SSL_CLIENT_OPTION_SET: a->info->ssl_client_options_set |= atol(ctx->buf); return 0; case LEJPVP_SSL_CLIENT_OPTION_CLEAR: a->info->ssl_client_options_clear |= atol(ctx->buf); return 0; case LEJPVP_ALPN: a->info->alpn = a->p; break; case LEJPVP_LISTEN_ACCEPT_ROLE: a->info->listen_accept_role = a->p; break; case LEJPVP_LISTEN_ACCEPT_PROTOCOL: a->info->listen_accept_protocol = a->p; break; case LEJPVP_FLAG_APPLY_LISTEN_ACCEPT: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG); return 0; case LEJPVP_FLAG_FALLBACK_LISTEN_ACCEPT: lwsl_notice("vh %s: LEJPVP_FLAG_FALLBACK_LISTEN_ACCEPT: %s\n", a->info->vhost_name, ctx->buf); set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG); return 0; case LEJPVP_FLAG_ALLOW_NON_TLS: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT); return 0; case LEJPVP_FLAG_REDIRECT_HTTP: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS); return 0; case LEJPVP_FLAG_ALLOW_HTTP_ON_HTTPS: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER); return 0; case LEJPVP_FLAG_DISABLE_NO_PROTOCOL_WS_UPGRADES: a->reject_ws_with_no_protocol = 1; return 0; default: return 0; } dostring: p = ctx->buf; p[LEJP_STRING_CHUNK] = '\0'; p1 = strstr(p, ESC_INSTALL_DATADIR); if (p1) { n = lws_ptr_diff(p1, p); if (n > a->end - a->p) n = lws_ptr_diff(a->end, a->p); lws_strncpy(a->p, p, n + 1); a->p += n; a->p += lws_snprintf(a->p, a->end - a->p, "%s", LWS_INSTALL_DATADIR); p += n + strlen(ESC_INSTALL_DATADIR); } a->p += lws_snprintf(a->p, a->end - a->p, "%s", p); if (reason == LEJPCB_VAL_STR_END) *(a->p)++ = '\0'; return 0; } /* * returns 0 = OK, 1 = can't open, 2 = parsing error */ static int lwsws_get_config(void *user, const char *f, const char * const *paths, int count_paths, lejp_callback cb) { unsigned char buf[128]; struct lejp_ctx ctx; int n, m = 0, fd; fd = lws_open(f, O_RDONLY); if (fd < 0) { lwsl_err("Cannot open %s\n", f); return 2; } lwsl_info("%s: %s\n", __func__, f); lejp_construct(&ctx, cb, user, paths, count_paths); do { n = read(fd, buf, sizeof(buf)); if (!n) break; m = (int)(signed char)lejp_parse(&ctx, buf, n); } while (m == LEJP_CONTINUE); close(fd); n = ctx.line; lejp_destruct(&ctx); if (m < 0) { lwsl_err("%s(%u): parsing error %d: %s\n", f, n, m, lejp_error_to_string(m)); return 2; } return 0; } struct lws_dir_args { void *user; const char * const *paths; int count_paths; lejp_callback cb; }; static int lwsws_get_config_d_cb(const char *dirpath, void *user, struct lws_dir_entry *lde) { struct lws_dir_args *da = (struct lws_dir_args *)user; char path[256]; if (lde->type != LDOT_FILE && lde->type != LDOT_UNKNOWN /* ZFS */) return 0; lws_snprintf(path, sizeof(path) - 1, "%s/%s", dirpath, lde->name); return lwsws_get_config(da->user, path, da->paths, da->count_paths, da->cb); } int lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d, char **cs, int *len) { struct lws_dir_args da; struct jpargs a; const char * const *old = info->plugin_dirs; char dd[128]; memset(&a, 0, sizeof(a)); a.info = info; a.p = *cs; a.end = (a.p + *len) - 1; a.valid = 0; lwsws_align(&a); info->plugin_dirs = (void *)a.p; a.plugin_dirs = (void *)a.p; /* writeable version */ a.p += MAX_PLUGIN_DIRS * sizeof(void *); /* copy any default paths */ while (old && *old) { a.plugin_dirs[a.count_plugin_dirs++] = *old; old++; } lws_snprintf(dd, sizeof(dd) - 1, "%s/conf", d); if (lwsws_get_config(&a, dd, paths_global, LWS_ARRAY_SIZE(paths_global), lejp_globals_cb) > 1) return 1; lws_snprintf(dd, sizeof(dd) - 1, "%s/conf.d", d); da.user = &a; da.paths = paths_global; da.count_paths = LWS_ARRAY_SIZE(paths_global), da.cb = lejp_globals_cb; if (lws_dir(dd, &da, lwsws_get_config_d_cb) > 1) return 1; a.plugin_dirs[a.count_plugin_dirs] = NULL; *cs = a.p; *len = lws_ptr_diff(a.end, a.p); return 0; } int lwsws_get_config_vhosts(struct lws_context *context, struct lws_context_creation_info *info, const char *d, char **cs, int *len) { struct lws_dir_args da; struct jpargs a; char dd[128]; memset(&a, 0, sizeof(a)); a.info = info; a.p = *cs; a.end = a.p + *len; a.valid = 0; a.context = context; a.protocols = info->protocols; a.pprotocols = info->pprotocols; a.extensions = info->extensions; lws_snprintf(dd, sizeof(dd) - 1, "%s/conf", d); if (lwsws_get_config(&a, dd, paths_vhosts, LWS_ARRAY_SIZE(paths_vhosts), lejp_vhosts_cb) > 1) return 1; lws_snprintf(dd, sizeof(dd) - 1, "%s/conf.d", d); da.user = &a; da.paths = paths_vhosts; da.count_paths = LWS_ARRAY_SIZE(paths_vhosts), da.cb = lejp_vhosts_cb; if (lws_dir(dd, &da, lwsws_get_config_d_cb) > 1) return 1; *cs = a.p; *len = lws_ptr_diff(a.end, a.p); if (!a.any_vhosts) { lwsl_err("Need at least one vhost\n"); return 1; } // lws_finalize_startup(context); return 0; } libwebsockets-3.2.1/lib/roles/http/server/lws-spa.c000066400000000000000000000314721357643561300223120ustar00rootroot00000000000000/* * libwebsockets - Stateful urldecode for POST * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #define LWS_MAX_ELEM_NAME 32 enum urldecode_stateful { US_NAME, US_IDLE, US_PC1, US_PC2, MT_LOOK_BOUND_IN, MT_HNAME, MT_DISP, MT_TYPE, MT_IGNORE1, MT_IGNORE2, MT_IGNORE3, MT_COMPLETED, }; static const char * const mp_hdr[] = { "content-disposition: ", "content-type: ", "\x0d\x0a" }; struct lws_spa; typedef int (*lws_urldecode_stateful_cb)(struct lws_spa *spa, const char *name, char **buf, int len, int final); struct lws_urldecode_stateful { char *out; struct lws_spa *data; struct lws *wsi; char name[LWS_MAX_ELEM_NAME]; char temp[LWS_MAX_ELEM_NAME]; char content_type[32]; char content_disp[32]; char content_disp_filename[256]; char mime_boundary[128]; int out_len; int pos; int hdr_idx; int mp; int sum; unsigned int multipart_form_data:1; unsigned int inside_quote:1; unsigned int subname:1; unsigned int boundary_real_crlf:1; enum urldecode_stateful state; lws_urldecode_stateful_cb output; }; struct lws_spa { struct lws_urldecode_stateful *s; lws_spa_create_info_t i; int *param_length; char finalized; char **params; char *storage; char *end; }; static struct lws_urldecode_stateful * lws_urldecode_s_create(struct lws_spa *spa, struct lws *wsi, char *out, int out_len, lws_urldecode_stateful_cb output) { struct lws_urldecode_stateful *s; char buf[205], *p; int m = 0; if (spa->i.ac) s = lwsac_use_zero(spa->i.ac, sizeof(*s), spa->i.ac_chunk_size); else s = lws_zalloc(sizeof(*s), "stateful urldecode"); if (!s) return NULL; s->out = out; s->out_len = out_len; s->output = output; s->pos = 0; s->sum = 0; s->mp = 0; s->state = US_NAME; s->name[0] = '\0'; s->data = spa; s->wsi = wsi; if (lws_hdr_copy(wsi, buf, sizeof(buf), WSI_TOKEN_HTTP_CONTENT_TYPE) > 0) { /* multipart/form-data; * boundary=----WebKitFormBoundarycc7YgAPEIHvgE9Bf */ if (!strncmp(buf, "multipart/form-data", 19)) { s->multipart_form_data = 1; s->state = MT_LOOK_BOUND_IN; s->mp = 2; p = strstr(buf, "boundary="); if (p) { p += 9; s->mime_boundary[m++] = '\x0d'; s->mime_boundary[m++] = '\x0a'; s->mime_boundary[m++] = '-'; s->mime_boundary[m++] = '-'; while (m < (int)sizeof(s->mime_boundary) - 1 && *p && *p != ' ') s->mime_boundary[m++] = *p++; s->mime_boundary[m] = '\0'; lwsl_info("boundary '%s'\n", s->mime_boundary); } } } return s; } static int lws_urldecode_s_process(struct lws_urldecode_stateful *s, const char *in, int len) { int n, m, hit = 0; char c, was_end = 0; while (len--) { if (s->pos == s->out_len - s->mp - 1) { if (s->output(s->data, s->name, &s->out, s->pos, LWS_UFS_CONTENT)) return -1; was_end = s->pos; s->pos = 0; } switch (s->state) { /* states for url arg style */ case US_NAME: s->inside_quote = 0; if (*in == '=') { s->name[s->pos] = '\0'; s->pos = 0; s->state = US_IDLE; in++; continue; } if (*in == '&') { s->name[s->pos] = '\0'; if (s->output(s->data, s->name, &s->out, s->pos, LWS_UFS_FINAL_CONTENT)) return -1; s->pos = 0; s->state = US_IDLE; in++; continue; } if (s->pos >= (int)sizeof(s->name) - 1) { lwsl_notice("Name too long\n"); return -1; } s->name[s->pos++] = *in++; break; case US_IDLE: if (*in == '%') { s->state++; in++; continue; } if (*in == '&') { s->out[s->pos] = '\0'; if (s->output(s->data, s->name, &s->out, s->pos, LWS_UFS_FINAL_CONTENT)) return -1; s->pos = 0; s->state = US_NAME; in++; continue; } if (*in == '+') { in++; s->out[s->pos++] = ' '; continue; } s->out[s->pos++] = *in++; break; case US_PC1: n = char_to_hex(*in); if (n < 0) return -1; in++; s->sum = n << 4; s->state++; break; case US_PC2: n = char_to_hex(*in); if (n < 0) return -1; in++; s->out[s->pos++] = s->sum | n; s->state = US_IDLE; break; /* states for multipart / mime style */ case MT_LOOK_BOUND_IN: retry_as_first: if (*in == s->mime_boundary[s->mp] && s->mime_boundary[s->mp]) { in++; s->mp++; if (!s->mime_boundary[s->mp]) { s->mp = 0; s->state = MT_IGNORE1; if (s->pos || was_end) if (s->output(s->data, s->name, &s->out, s->pos, LWS_UFS_FINAL_CONTENT)) return -1; s->pos = 0; s->content_disp[0] = '\0'; s->name[0] = '\0'; s->content_disp_filename[0] = '\0'; s->boundary_real_crlf = 1; } continue; } if (s->mp) { n = 0; if (!s->boundary_real_crlf) n = 2; if (s->mp >= n) { memcpy(s->out + s->pos, s->mime_boundary + n, s->mp - n); s->pos += s->mp; s->mp = 0; goto retry_as_first; } } s->out[s->pos++] = *in; in++; s->mp = 0; break; case MT_HNAME: m = 0; c =*in; if (c >= 'A' && c <= 'Z') c += 'a' - 'A'; for (n = 0; n < (int)LWS_ARRAY_SIZE(mp_hdr); n++) if (c == mp_hdr[n][s->mp]) { m++; hit = n; } in++; if (!m) { /* Unknown header - ignore it */ s->state = MT_IGNORE1; s->mp = 0; continue; } s->mp++; if (m != 1) continue; if (mp_hdr[hit][s->mp]) continue; s->mp = 0; s->temp[0] = '\0'; s->subname = 0; if (hit == 2) s->state = MT_LOOK_BOUND_IN; else s->state += hit + 1; break; case MT_DISP: /* form-data; name="file"; filename="t.txt" */ if (*in == '\x0d') { if (s->content_disp_filename[0]) if (s->output(s->data, s->name, &s->out, s->pos, LWS_UFS_OPEN)) return -1; s->state = MT_IGNORE2; goto done; } if (*in == ';') { s->subname = 1; s->temp[0] = '\0'; s->mp = 0; goto done; } if (*in == '\"') { s->inside_quote ^= 1; goto done; } if (s->subname) { if (*in == '=') { s->temp[s->mp] = '\0'; s->subname = 0; s->mp = 0; goto done; } if (s->mp < (int)sizeof(s->temp) - 1 && (*in != ' ' || s->inside_quote)) s->temp[s->mp++] = *in; goto done; } if (!s->temp[0]) { if (s->mp < (int)sizeof(s->content_disp) - 1) s->content_disp[s->mp++] = *in; if (s->mp < (int)sizeof(s->content_disp)) s->content_disp[s->mp] = '\0'; goto done; } if (!strcmp(s->temp, "name")) { if (s->mp < (int)sizeof(s->name) - 1) s->name[s->mp++] = *in; else s->mp = (int)sizeof(s->name) - 1; s->name[s->mp] = '\0'; goto done; } if (!strcmp(s->temp, "filename")) { if (s->mp < (int)sizeof(s->content_disp_filename) - 1) s->content_disp_filename[s->mp++] = *in; s->content_disp_filename[s->mp] = '\0'; goto done; } done: in++; break; case MT_TYPE: if (*in == '\x0d') s->state = MT_IGNORE2; else { if (s->mp < (int)sizeof(s->content_type) - 1) s->content_type[s->mp++] = *in; s->content_type[s->mp] = '\0'; } in++; break; case MT_IGNORE1: if (*in == '\x0d') s->state = MT_IGNORE2; if (*in == '-') s->state = MT_IGNORE3; in++; break; case MT_IGNORE2: s->mp = 0; if (*in == '\x0a') s->state = MT_HNAME; in++; break; case MT_IGNORE3: if (*in == '\x0d') s->state = MT_IGNORE1; if (*in == '-') { s->state = MT_COMPLETED; s->wsi->http.rx_content_remain = 0; } in++; break; case MT_COMPLETED: break; } } return 0; } static int lws_urldecode_s_destroy(struct lws_spa *spa, struct lws_urldecode_stateful *s) { int ret = 0; if (s->state != US_IDLE) ret = -1; if (!ret) if (s->output(s->data, s->name, &s->out, s->pos, LWS_UFS_FINAL_CONTENT)) ret = -1; if (s->output(s->data, s->name, NULL, 0, LWS_UFS_CLOSE)) return -1; if (!spa->i.ac) lws_free(s); return ret; } static int lws_urldecode_spa_lookup(struct lws_spa *spa, const char *name) { const char * const *pp = spa->i.param_names; int n; for (n = 0; n < spa->i.count_params; n++) { if (!strcmp(*pp, name)) return n; if (spa->i.param_names_stride) pp = (const char * const *)(((char *)pp) + spa->i.param_names_stride); else pp++; } return -1; } static int lws_urldecode_spa_cb(struct lws_spa *spa, const char *name, char **buf, int len, int final) { int n; if (final == LWS_UFS_CLOSE || spa->s->content_disp_filename[0]) { if (spa->i.opt_cb) { n = spa->i.opt_cb(spa->i.opt_data, name, spa->s->content_disp_filename, buf ? *buf : NULL, len, final); if (n < 0) return -1; } return 0; } n = lws_urldecode_spa_lookup(spa, name); if (n == -1 || !len) /* unrecognized */ return 0; if (!spa->i.ac) { if (!spa->params[n]) spa->params[n] = *buf; if ((*buf) + len >= spa->end) { lwsl_info("%s: exceeded storage\n", __func__); return -1; } /* move it on inside storage */ (*buf) += len; *((*buf)++) = '\0'; spa->s->out_len -= len + 1; } else { spa->params[n] = lwsac_use(spa->i.ac, len + 1, spa->i.ac_chunk_size); if (!spa->params[n]) return -1; memcpy(spa->params[n], *buf, len); spa->params[n][len] = '\0'; } spa->param_length[n] += len; return 0; } struct lws_spa * lws_spa_create_via_info(struct lws *wsi, const lws_spa_create_info_t *i) { struct lws_spa *spa; if (i->ac) spa = lwsac_use_zero(i->ac, sizeof(*spa), i->ac_chunk_size); else spa = lws_zalloc(sizeof(*spa), "spa"); if (!spa) return NULL; spa->i = *i; if (!spa->i.max_storage) spa->i.max_storage = 512; if (i->ac) spa->storage = lwsac_use(i->ac, spa->i.max_storage, i->ac_chunk_size); else spa->storage = lws_malloc(spa->i.max_storage, "spa"); if (!spa->storage) goto bail2; spa->end = spa->storage + i->max_storage - 1; if (i->count_params) { if (i->ac) spa->params = lwsac_use_zero(i->ac, sizeof(char *) * i->count_params, i->ac_chunk_size); else spa->params = lws_zalloc(sizeof(char *) * i->count_params, "spa params"); if (!spa->params) goto bail3; } spa->s = lws_urldecode_s_create(spa, wsi, spa->storage, i->max_storage, lws_urldecode_spa_cb); if (!spa->s) goto bail4; if (i->count_params) { if (i->ac) spa->param_length = lwsac_use_zero(i->ac, sizeof(int) * i->count_params, i->ac_chunk_size); else spa->param_length = lws_zalloc(sizeof(int) * i->count_params, "spa param len"); if (!spa->param_length) goto bail5; } lwsl_info("%s: Created SPA %p\n", __func__, spa); return spa; bail5: lws_urldecode_s_destroy(spa, spa->s); bail4: if (!i->ac) lws_free(spa->params); bail3: if (!i->ac) lws_free(spa->storage); bail2: if (!i->ac) lws_free(spa); if (i->ac) lwsac_free(i->ac); return NULL; } struct lws_spa * lws_spa_create(struct lws *wsi, const char * const *param_names, int count_params, int max_storage, lws_spa_fileupload_cb opt_cb, void *opt_data) { lws_spa_create_info_t i; memset(&i, 0, sizeof(i)); i.count_params = count_params; i.max_storage = max_storage; i.opt_cb = opt_cb; i.opt_data = opt_data; i.param_names = param_names; return lws_spa_create_via_info(wsi, &i); } int lws_spa_process(struct lws_spa *spa, const char *in, int len) { if (!spa) { lwsl_err("%s: NULL spa\n", __func__); return -1; } /* we reject any junk after the last part arrived and we finalized */ if (spa->finalized) return 0; return lws_urldecode_s_process(spa->s, in, len); } int lws_spa_get_length(struct lws_spa *spa, int n) { if (n >= spa->i.count_params) return 0; return spa->param_length[n]; } const char * lws_spa_get_string(struct lws_spa *spa, int n) { if (n >= spa->i.count_params) return NULL; return spa->params[n]; } int lws_spa_finalize(struct lws_spa *spa) { if (!spa) return 0; if (spa->s) { lws_urldecode_s_destroy(spa, spa->s); spa->s = NULL; } spa->finalized = 1; return 0; } int lws_spa_destroy(struct lws_spa *spa) { int n = 0; lwsl_info("%s: destroy spa %p\n", __func__, spa); if (spa->s) lws_urldecode_s_destroy(spa, spa->s); if (spa->i.ac) lwsac_free(spa->i.ac); else { lws_free(spa->param_length); lws_free(spa->params); lws_free(spa->storage); lws_free(spa); } return n; } libwebsockets-3.2.1/lib/roles/http/server/parsers.c000066400000000000000000001001411357643561300223710ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" static const unsigned char lextable[] = { #if defined(LWS_AMAZON_RTOS) || defined(LWS_AMAZON_LINUX) #include "roles/http/lextable.h" #else #include "../lextable.h" #endif }; #define FAIL_CHAR 0x08 #if defined(LWS_WITH_CUSTOM_HEADERS) #define UHO_NLEN 0 #define UHO_VLEN 2 #define UHO_LL 4 #define UHO_NAME 8 static uint16_t lws_un16be_get(const void *_p) { const uint8_t *p = _p; return ((uint16_t)p[0] << 8) | p[1]; } static void lws_un16be_set(void *_p, uint16_t v) { uint8_t *p = _p; *p++ = (uint8_t)(v >> 8); *p++ = (uint8_t)v; } static uint32_t lws_un32be_get(const void *_p) { const uint8_t *p = _p; return (uint32_t)((p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]); } static void lws_un32be_set(void *_p, uint32_t v) { uint8_t *p = _p; *p++ = (uint8_t)(v >> 24); *p++ = (uint8_t)(v >> 16); *p++ = (uint8_t)(v >> 8); *p = (uint8_t)v; } #endif static struct allocated_headers * _lws_create_ah(struct lws_context_per_thread *pt, ah_data_idx_t data_size) { struct allocated_headers *ah = lws_zalloc(sizeof(*ah), "ah struct"); if (!ah) return NULL; ah->data = lws_malloc(data_size, "ah data"); if (!ah->data) { lws_free(ah); return NULL; } ah->next = pt->http.ah_list; pt->http.ah_list = ah; ah->data_length = data_size; pt->http.ah_pool_length++; lwsl_info("%s: created ah %p (size %d): pool length %ld\n", __func__, ah, (int)data_size, (unsigned long)pt->http.ah_pool_length); return ah; } int _lws_destroy_ah(struct lws_context_per_thread *pt, struct allocated_headers *ah) { lws_start_foreach_llp(struct allocated_headers **, a, pt->http.ah_list) { if ((*a) == ah) { *a = ah->next; pt->http.ah_pool_length--; lwsl_info("%s: freed ah %p : pool length %ld\n", __func__, ah, (unsigned long)pt->http.ah_pool_length); if (ah->data) lws_free(ah->data); lws_free(ah); return 0; } } lws_end_foreach_llp(a, next); return 1; } void _lws_header_table_reset(struct allocated_headers *ah) { /* init the ah to reflect no headers or data have appeared yet */ memset(ah->frag_index, 0, sizeof(ah->frag_index)); memset(ah->frags, 0, sizeof(ah->frags)); ah->nfrag = 0; ah->pos = 0; ah->http_response = 0; ah->parser_state = WSI_TOKEN_NAME_PART; ah->lextable_pos = 0; #if defined(LWS_WITH_CUSTOM_HEADERS) ah->unk_pos = 0; ah->unk_ll_head = 0; ah->unk_ll_tail = 0; #endif } // doesn't scrub the ah rxbuffer by default, parent must do if needed void __lws_header_table_reset(struct lws *wsi, int autoservice) { struct allocated_headers *ah = wsi->http.ah; struct lws_context_per_thread *pt; struct lws_pollfd *pfd; /* if we have the idea we're resetting 'our' ah, must be bound to one */ assert(ah); /* ah also concurs with ownership */ assert(ah->wsi == wsi); _lws_header_table_reset(ah); /* since we will restart the ah, our new headers are not completed */ wsi->hdr_parsing_completed = 0; /* while we hold the ah, keep a timeout on the wsi */ __lws_set_timeout(wsi, PENDING_TIMEOUT_HOLDING_AH, wsi->vhost->timeout_secs_ah_idle); time(&ah->assigned); if (wsi->position_in_fds_table != LWS_NO_FDS_POS && lws_buflist_next_segment_len(&wsi->buflist, NULL) && autoservice) { lwsl_debug("%s: service on readbuf ah\n", __func__); pt = &wsi->context->pt[(int)wsi->tsi]; /* * Unlike a normal connect, we have the headers already * (or the first part of them anyway) */ pfd = &pt->fds[wsi->position_in_fds_table]; pfd->revents |= LWS_POLLIN; lwsl_err("%s: calling service\n", __func__); lws_service_fd_tsi(wsi->context, pfd, wsi->tsi); } } void lws_header_table_reset(struct lws *wsi, int autoservice) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; lws_pt_lock(pt, __func__); __lws_header_table_reset(wsi, autoservice); lws_pt_unlock(pt); } static void _lws_header_ensure_we_are_on_waiting_list(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; struct lws_pollargs pa; struct lws **pwsi = &pt->http.ah_wait_list; while (*pwsi) { if (*pwsi == wsi) return; pwsi = &(*pwsi)->http.ah_wait_list; } lwsl_info("%s: wsi: %p\n", __func__, wsi); wsi->http.ah_wait_list = pt->http.ah_wait_list; pt->http.ah_wait_list = wsi; pt->http.ah_wait_list_length++; /* we cannot accept input then */ _lws_change_pollfd(wsi, LWS_POLLIN, 0, &pa); } static int __lws_remove_from_ah_waiting_list(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; struct lws **pwsi =&pt->http.ah_wait_list; while (*pwsi) { if (*pwsi == wsi) { lwsl_info("%s: wsi %p\n", __func__, wsi); /* point prev guy to our next */ *pwsi = wsi->http.ah_wait_list; /* we shouldn't point anywhere now */ wsi->http.ah_wait_list = NULL; pt->http.ah_wait_list_length--; return 1; } pwsi = &(*pwsi)->http.ah_wait_list; } return 0; } int LWS_WARN_UNUSED_RESULT lws_header_table_attach(struct lws *wsi, int autoservice) { struct lws_context *context = wsi->context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws_pollargs pa; int n; lwsl_info("%s: wsi %p: ah %p (tsi %d, count = %d) in\n", __func__, (void *)wsi, (void *)wsi->http.ah, wsi->tsi, pt->http.ah_count_in_use); if (!lwsi_role_http(wsi)) { lwsl_err("%s: bad role %s\n", __func__, wsi->role_ops->name); assert(0); return -1; } lws_pt_lock(pt, __func__); /* if we are already bound to one, just clear it down */ if (wsi->http.ah) { lwsl_info("%s: cleardown\n", __func__); goto reset; } n = pt->http.ah_count_in_use == context->max_http_header_pool; #if defined(LWS_WITH_PEER_LIMITS) if (!n) { n = lws_peer_confirm_ah_attach_ok(context, wsi->peer); if (n) lws_stats_bump(pt, LWSSTATS_C_PEER_LIMIT_AH_DENIED, 1); } #endif if (n) { /* * Pool is either all busy, or we don't want to give this * particular guy an ah right now... * * Make sure we are on the waiting list, and return that we * weren't able to provide the ah */ _lws_header_ensure_we_are_on_waiting_list(wsi); goto bail; } __lws_remove_from_ah_waiting_list(wsi); wsi->http.ah = _lws_create_ah(pt, context->max_http_header_data); if (!wsi->http.ah) { /* we could not create an ah */ _lws_header_ensure_we_are_on_waiting_list(wsi); goto bail; } wsi->http.ah->in_use = 1; wsi->http.ah->wsi = wsi; /* mark our owner */ pt->http.ah_count_in_use++; #if defined(LWS_WITH_PEER_LIMITS) && (defined(LWS_ROLE_H1) || \ defined(LWS_ROLE_H2)) lws_context_lock(context, "ah attach"); /* <========================= */ if (wsi->peer) wsi->peer->http.count_ah++; lws_context_unlock(context); /* ====================================> */ #endif _lws_change_pollfd(wsi, 0, LWS_POLLIN, &pa); lwsl_info("%s: did attach wsi %p: ah %p: count %d (on exit)\n", __func__, (void *)wsi, (void *)wsi->http.ah, pt->http.ah_count_in_use); reset: __lws_header_table_reset(wsi, autoservice); lws_pt_unlock(pt); #ifndef LWS_NO_CLIENT if (lwsi_role_client(wsi) && lwsi_state(wsi) == LRS_UNCONNECTED) if (!lws_http_client_connect_via_info2(wsi)) /* our client connect has failed, the wsi * has been closed */ return -1; #endif return 0; bail: lws_pt_unlock(pt); return 1; } int __lws_header_table_detach(struct lws *wsi, int autoservice) { struct lws_context *context = wsi->context; struct allocated_headers *ah = wsi->http.ah; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws_pollargs pa; struct lws **pwsi, **pwsi_eligible; time_t now; __lws_remove_from_ah_waiting_list(wsi); if (!ah) return 0; lwsl_info("%s: wsi %p: ah %p (tsi=%d, count = %d)\n", __func__, (void *)wsi, (void *)ah, wsi->tsi, pt->http.ah_count_in_use); /* we did have an ah attached */ time(&now); if (ah->assigned && now - ah->assigned > 3) { /* * we're detaching the ah, but it was held an * unreasonably long time */ lwsl_debug("%s: wsi %p: ah held %ds, role/state 0x%lx 0x%x," "\n", __func__, wsi, (int)(now - ah->assigned), (unsigned long)lwsi_role(wsi), lwsi_state(wsi)); } ah->assigned = 0; /* if we think we're detaching one, there should be one in use */ assert(pt->http.ah_count_in_use > 0); /* and this specific one should have been in use */ assert(ah->in_use); memset(&wsi->http.ah, 0, sizeof(wsi->http.ah)); #if defined(LWS_WITH_PEER_LIMITS) if (ah->wsi) lws_peer_track_ah_detach(context, wsi->peer); #endif ah->wsi = NULL; /* no owner */ pwsi = &pt->http.ah_wait_list; /* oh there is nobody on the waiting list... leave the ah unattached */ if (!*pwsi) goto nobody_usable_waiting; /* * at least one wsi on the same tsi is waiting, give it to oldest guy * who is allowed to take it (if any) */ lwsl_info("pt wait list %p\n", *pwsi); wsi = NULL; pwsi_eligible = NULL; while (*pwsi) { #if defined(LWS_WITH_PEER_LIMITS) /* are we willing to give this guy an ah? */ if (!lws_peer_confirm_ah_attach_ok(context, (*pwsi)->peer)) #endif { wsi = *pwsi; pwsi_eligible = pwsi; } #if defined(LWS_WITH_PEER_LIMITS) else if (!(*pwsi)->http.ah_wait_list) lws_stats_bump(pt, LWSSTATS_C_PEER_LIMIT_AH_DENIED, 1); #endif pwsi = &(*pwsi)->http.ah_wait_list; } if (!wsi) /* everybody waiting already has too many ah... */ goto nobody_usable_waiting; lwsl_info("%s: transferring ah to last eligible wsi in wait list " "%p (wsistate 0x%lx)\n", __func__, wsi, (unsigned long)wsi->wsistate); wsi->http.ah = ah; ah->wsi = wsi; /* new owner */ __lws_header_table_reset(wsi, autoservice); #if defined(LWS_WITH_PEER_LIMITS) && (defined(LWS_ROLE_H1) || \ defined(LWS_ROLE_H2)) lws_context_lock(context, "ah detach"); /* <========================= */ if (wsi->peer) wsi->peer->http.count_ah++; lws_context_unlock(context); /* ====================================> */ #endif /* clients acquire the ah and then insert themselves in fds table... */ if (wsi->position_in_fds_table != LWS_NO_FDS_POS) { lwsl_info("%s: Enabling %p POLLIN\n", __func__, wsi); /* he has been stuck waiting for an ah, but now his wait is * over, let him progress */ _lws_change_pollfd(wsi, 0, LWS_POLLIN, &pa); } /* point prev guy to next guy in list instead */ *pwsi_eligible = wsi->http.ah_wait_list; /* the guy who got one is out of the list */ wsi->http.ah_wait_list = NULL; pt->http.ah_wait_list_length--; #ifndef LWS_NO_CLIENT if (lwsi_role_client(wsi) && lwsi_state(wsi) == LRS_UNCONNECTED) { lws_pt_unlock(pt); if (!lws_http_client_connect_via_info2(wsi)) { /* our client connect has failed, the wsi * has been closed */ return -1; } return 0; } #endif assert(!!pt->http.ah_wait_list_length == !!(lws_intptr_t)pt->http.ah_wait_list); bail: lwsl_info("%s: wsi %p: ah %p (tsi=%d, count = %d)\n", __func__, (void *)wsi, (void *)ah, pt->tid, pt->http.ah_count_in_use); return 0; nobody_usable_waiting: lwsl_info("%s: nobody usable waiting\n", __func__); _lws_destroy_ah(pt, ah); pt->http.ah_count_in_use--; goto bail; } int lws_header_table_detach(struct lws *wsi, int autoservice) { struct lws_context *context = wsi->context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; int n; lws_pt_lock(pt, __func__); n = __lws_header_table_detach(wsi, autoservice); lws_pt_unlock(pt); return n; } LWS_VISIBLE int lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx) { int n; if (!wsi->http.ah) return 0; n = wsi->http.ah->frag_index[h]; if (!n) return 0; do { if (!frag_idx) return wsi->http.ah->frags[n].len; n = wsi->http.ah->frags[n].nfrag; } while (frag_idx-- && n); return 0; } LWS_VISIBLE int lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h) { int n; int len = 0; if (!wsi->http.ah) return 0; n = wsi->http.ah->frag_index[h]; if (!n) return 0; do { len += wsi->http.ah->frags[n].len; n = wsi->http.ah->frags[n].nfrag; if (n && h != WSI_TOKEN_HTTP_COOKIE) ++len; } while (n); return len; } LWS_VISIBLE int lws_hdr_copy_fragment(struct lws *wsi, char *dst, int len, enum lws_token_indexes h, int frag_idx) { int n = 0; int f; if (!wsi->http.ah) return -1; f = wsi->http.ah->frag_index[h]; if (!f) return -1; while (n < frag_idx) { f = wsi->http.ah->frags[f].nfrag; if (!f) return -1; n++; } if (wsi->http.ah->frags[f].len >= len) return -1; memcpy(dst, wsi->http.ah->data + wsi->http.ah->frags[f].offset, wsi->http.ah->frags[f].len); dst[wsi->http.ah->frags[f].len] = '\0'; return wsi->http.ah->frags[f].len; } LWS_VISIBLE int lws_hdr_copy(struct lws *wsi, char *dst, int len, enum lws_token_indexes h) { int toklen = lws_hdr_total_length(wsi, h); int n; int comma; *dst = '\0'; if (!toklen) return 0; if (toklen >= len) return -1; if (!wsi->http.ah) return -1; n = wsi->http.ah->frag_index[h]; if (!n) return 0; do { comma = (wsi->http.ah->frags[n].nfrag && h != WSI_TOKEN_HTTP_COOKIE) ? 1 : 0; if (wsi->http.ah->frags[n].len + comma >= len) return -1; strncpy(dst, &wsi->http.ah->data[wsi->http.ah->frags[n].offset], wsi->http.ah->frags[n].len); dst += wsi->http.ah->frags[n].len; len -= wsi->http.ah->frags[n].len; n = wsi->http.ah->frags[n].nfrag; if (comma) *dst++ = ','; } while (n); *dst = '\0'; return toklen; } #if defined(LWS_WITH_CUSTOM_HEADERS) LWS_VISIBLE int lws_hdr_custom_length(struct lws *wsi, const char *name, int nlen) { ah_data_idx_t ll; if (!wsi->http.ah || wsi->http2_substream) return -1; ll = wsi->http.ah->unk_ll_head; while (ll) { if (ll >= wsi->http.ah->data_length) return -1; if (nlen == lws_un16be_get(&wsi->http.ah->data[ll + UHO_NLEN]) && !strncmp(name, &wsi->http.ah->data[ll + UHO_NAME], nlen)) return lws_un16be_get(&wsi->http.ah->data[ll + UHO_VLEN]); ll = lws_un32be_get(&wsi->http.ah->data[ll + UHO_LL]); } return -1; } LWS_VISIBLE int lws_hdr_custom_copy(struct lws *wsi, char *dst, int len, const char *name, int nlen) { ah_data_idx_t ll; int n; if (!wsi->http.ah || wsi->http2_substream) return -1; *dst = '\0'; ll = wsi->http.ah->unk_ll_head; while (ll) { if (ll >= wsi->http.ah->data_length) return -1; if (nlen == lws_un16be_get(&wsi->http.ah->data[ll + UHO_NLEN]) && !strncmp(name, &wsi->http.ah->data[ll + UHO_NAME], nlen)) { n = lws_un16be_get(&wsi->http.ah->data[ll + UHO_VLEN]); if (n + 1 > len) return -1; strncpy(dst, &wsi->http.ah->data[ll + UHO_NAME + nlen], n); dst[n] = '\0'; return n; } ll = lws_un32be_get(&wsi->http.ah->data[ll + UHO_LL]); } return -1; } #endif char *lws_hdr_simple_ptr(struct lws *wsi, enum lws_token_indexes h) { int n; if (!wsi->http.ah) return NULL; n = wsi->http.ah->frag_index[h]; if (!n) return NULL; return wsi->http.ah->data + wsi->http.ah->frags[n].offset; } static int LWS_WARN_UNUSED_RESULT lws_pos_in_bounds(struct lws *wsi) { if (!wsi->http.ah) return -1; if (wsi->http.ah->pos < (unsigned int)wsi->context->max_http_header_data) return 0; if ((int)wsi->http.ah->pos == wsi->context->max_http_header_data) { lwsl_err("Ran out of header data space\n"); return 1; } /* * with these tests everywhere, it should never be able to exceed * the limit, only meet it */ lwsl_err("%s: pos %ld, limit %ld\n", __func__, (unsigned long)wsi->http.ah->pos, (unsigned long)wsi->context->max_http_header_data); assert(0); return 1; } int LWS_WARN_UNUSED_RESULT lws_hdr_simple_create(struct lws *wsi, enum lws_token_indexes h, const char *s) { wsi->http.ah->nfrag++; if (wsi->http.ah->nfrag == LWS_ARRAY_SIZE(wsi->http.ah->frags)) { lwsl_warn("More hdr frags than we can deal with, dropping\n"); return -1; } wsi->http.ah->frag_index[h] = wsi->http.ah->nfrag; wsi->http.ah->frags[wsi->http.ah->nfrag].offset = wsi->http.ah->pos; wsi->http.ah->frags[wsi->http.ah->nfrag].len = 0; wsi->http.ah->frags[wsi->http.ah->nfrag].nfrag = 0; do { if (lws_pos_in_bounds(wsi)) return -1; wsi->http.ah->data[wsi->http.ah->pos++] = *s; if (*s) wsi->http.ah->frags[wsi->http.ah->nfrag].len++; } while (*s++); return 0; } static int LWS_WARN_UNUSED_RESULT issue_char(struct lws *wsi, unsigned char c) { unsigned short frag_len; if (lws_pos_in_bounds(wsi)) return -1; frag_len = wsi->http.ah->frags[wsi->http.ah->nfrag].len; /* * If we haven't hit the token limit, just copy the character into * the header */ if (!wsi->http.ah->current_token_limit || frag_len < wsi->http.ah->current_token_limit) { wsi->http.ah->data[wsi->http.ah->pos++] = c; if (c) wsi->http.ah->frags[wsi->http.ah->nfrag].len++; return 0; } /* Insert a null character when we *hit* the limit: */ if (frag_len == wsi->http.ah->current_token_limit) { if (lws_pos_in_bounds(wsi)) return -1; wsi->http.ah->data[wsi->http.ah->pos++] = '\0'; lwsl_warn("header %li exceeds limit %ld\n", (long)wsi->http.ah->parser_state, (long)wsi->http.ah->current_token_limit); } return 1; } int lws_parse_urldecode(struct lws *wsi, uint8_t *_c) { struct allocated_headers *ah = wsi->http.ah; unsigned int enc = 0; uint8_t c = *_c; // lwsl_notice("ah->ups %d\n", ah->ups); /* * PRIORITY 1 * special URI processing... convert %xx */ switch (ah->ues) { case URIES_IDLE: if (c == '%') { ah->ues = URIES_SEEN_PERCENT; goto swallow; } break; case URIES_SEEN_PERCENT: if (char_to_hex(c) < 0) /* illegal post-% char */ goto forbid; ah->esc_stash = c; ah->ues = URIES_SEEN_PERCENT_H1; goto swallow; case URIES_SEEN_PERCENT_H1: if (char_to_hex(c) < 0) /* illegal post-% char */ goto forbid; *_c = (char_to_hex(ah->esc_stash) << 4) | char_to_hex(c); c = *_c; enc = 1; ah->ues = URIES_IDLE; break; } /* * PRIORITY 2 * special URI processing... * convert /.. or /... or /../ etc to / * convert /./ to / * convert // or /// etc to / * leave /.dir or whatever alone */ switch (ah->ups) { case URIPS_IDLE: if (!c) return -1; /* genuine delimiter */ if ((c == '&' || c == ';') && !enc) { if (issue_char(wsi, '\0') < 0) return -1; /* link to next fragment */ ah->frags[ah->nfrag].nfrag = ah->nfrag + 1; ah->nfrag++; if (ah->nfrag >= LWS_ARRAY_SIZE(ah->frags)) goto excessive; /* start next fragment after the & */ ah->post_literal_equal = 0; ah->frags[ah->nfrag].offset = ++ah->pos; ah->frags[ah->nfrag].len = 0; ah->frags[ah->nfrag].nfrag = 0; goto swallow; } /* uriencoded = in the name part, disallow */ if (c == '=' && enc && ah->frag_index[WSI_TOKEN_HTTP_URI_ARGS] && !ah->post_literal_equal) { c = '_'; *_c =c; } /* after the real =, we don't care how many = */ if (c == '=' && !enc) ah->post_literal_equal = 1; /* + to space */ if (c == '+' && !enc) { c = ' '; *_c = c; } /* issue the first / always */ if (c == '/' && !ah->frag_index[WSI_TOKEN_HTTP_URI_ARGS]) ah->ups = URIPS_SEEN_SLASH; break; case URIPS_SEEN_SLASH: /* swallow subsequent slashes */ if (c == '/') goto swallow; /* track and swallow the first . after / */ if (c == '.') { ah->ups = URIPS_SEEN_SLASH_DOT; goto swallow; } ah->ups = URIPS_IDLE; break; case URIPS_SEEN_SLASH_DOT: /* swallow second . */ if (c == '.') { ah->ups = URIPS_SEEN_SLASH_DOT_DOT; goto swallow; } /* change /./ to / */ if (c == '/') { ah->ups = URIPS_SEEN_SLASH; goto swallow; } /* it was like /.dir ... regurgitate the . */ ah->ups = URIPS_IDLE; if (issue_char(wsi, '.') < 0) return -1; break; case URIPS_SEEN_SLASH_DOT_DOT: /* /../ or /..[End of URI] --> backup to last / */ if (c == '/' || c == '?') { /* * back up one dir level if possible * safe against header fragmentation because * the method URI can only be in 1 fragment */ if (ah->frags[ah->nfrag].len > 2) { ah->pos--; ah->frags[ah->nfrag].len--; do { ah->pos--; ah->frags[ah->nfrag].len--; } while (ah->frags[ah->nfrag].len > 1 && ah->data[ah->pos] != '/'); } ah->ups = URIPS_SEEN_SLASH; if (ah->frags[ah->nfrag].len > 1) break; goto swallow; } /* /..[^/] ... regurgitate and allow */ if (issue_char(wsi, '.') < 0) return -1; if (issue_char(wsi, '.') < 0) return -1; ah->ups = URIPS_IDLE; break; } if (c == '?' && !enc && !ah->frag_index[WSI_TOKEN_HTTP_URI_ARGS]) { /* start of URI args */ if (ah->ues != URIES_IDLE) goto forbid; /* seal off uri header */ if (issue_char(wsi, '\0') < 0) return -1; /* move to using WSI_TOKEN_HTTP_URI_ARGS */ ah->nfrag++; if (ah->nfrag >= LWS_ARRAY_SIZE(ah->frags)) goto excessive; ah->frags[ah->nfrag].offset = ++ah->pos; ah->frags[ah->nfrag].len = 0; ah->frags[ah->nfrag].nfrag = 0; ah->post_literal_equal = 0; ah->frag_index[WSI_TOKEN_HTTP_URI_ARGS] = ah->nfrag; ah->ups = URIPS_IDLE; goto swallow; } return LPUR_CONTINUE; swallow: return LPUR_SWALLOW; forbid: return LPUR_FORBID; excessive: return LPUR_EXCESSIVE; } static const unsigned char methods[] = { WSI_TOKEN_GET_URI, WSI_TOKEN_POST_URI, WSI_TOKEN_OPTIONS_URI, WSI_TOKEN_PUT_URI, WSI_TOKEN_PATCH_URI, WSI_TOKEN_DELETE_URI, WSI_TOKEN_CONNECT, WSI_TOKEN_HEAD_URI, }; /* * possible returns:, -1 fail, 0 ok or 2, transition to raw */ int LWS_WARN_UNUSED_RESULT lws_parse(struct lws *wsi, unsigned char *buf, int *len) { struct allocated_headers *ah = wsi->http.ah; struct lws_context *context = wsi->context; unsigned int n, m; unsigned char c; int r, pos; assert(wsi->http.ah); do { (*len)--; c = *buf++; switch (ah->parser_state) { #if defined(LWS_WITH_CUSTOM_HEADERS) case WSI_TOKEN_UNKNOWN_VALUE_PART: if (c == '\r') break; if (c == '\n') { lws_un16be_set(&ah->data[ah->unk_pos + 2], ah->pos - ah->unk_value_pos); ah->parser_state = WSI_TOKEN_NAME_PART; ah->unk_pos = 0; ah->lextable_pos = 0; break; } /* trim leading whitespace */ if (ah->pos != ah->unk_value_pos || (c != ' ' && c != '\t')) { if (lws_pos_in_bounds(wsi)) return -1; ah->data[ah->pos++] = c; } pos = ah->lextable_pos; break; #endif default: lwsl_parser("WSI_TOK_(%d) '%c'\n", ah->parser_state, c); /* collect into malloc'd buffers */ /* optional initial space swallow */ if (!ah->frags[ah->frag_index[ah->parser_state]].len && c == ' ') break; for (m = 0; m < LWS_ARRAY_SIZE(methods); m++) if (ah->parser_state == methods[m]) break; if (m == LWS_ARRAY_SIZE(methods)) /* it was not any of the methods */ goto check_eol; /* special URI processing... end at space */ if (c == ' ') { /* enforce starting with / */ if (!ah->frags[ah->nfrag].len) if (issue_char(wsi, '/') < 0) return -1; if (ah->ups == URIPS_SEEN_SLASH_DOT_DOT) { /* * back up one dir level if possible * safe against header fragmentation * because the method URI can only be * in 1 fragment */ if (ah->frags[ah->nfrag].len > 2) { ah->pos--; ah->frags[ah->nfrag].len--; do { ah->pos--; ah->frags[ah->nfrag].len--; } while (ah->frags[ah->nfrag].len > 1 && ah->data[ah->pos] != '/'); } } /* begin parsing HTTP version: */ if (issue_char(wsi, '\0') < 0) return -1; ah->parser_state = WSI_TOKEN_HTTP; goto start_fragment; } r = lws_parse_urldecode(wsi, &c); switch (r) { case LPUR_CONTINUE: break; case LPUR_SWALLOW: goto swallow; case LPUR_FORBID: goto forbid; case LPUR_EXCESSIVE: goto excessive; default: return LPR_FAIL; } check_eol: /* bail at EOL */ if (ah->parser_state != WSI_TOKEN_CHALLENGE && c == '\x0d') { if (ah->ues != URIES_IDLE) goto forbid; c = '\0'; ah->parser_state = WSI_TOKEN_SKIPPING_SAW_CR; lwsl_parser("*\n"); } n = issue_char(wsi, c); if ((int)n < 0) return LPR_FAIL; if (n > 0) ah->parser_state = WSI_TOKEN_SKIPPING; swallow: /* per-protocol end of headers management */ if (ah->parser_state == WSI_TOKEN_CHALLENGE) goto set_parsing_complete; break; /* collecting and checking a name part */ case WSI_TOKEN_NAME_PART: lwsl_parser("WSI_TOKEN_NAME_PART '%c' 0x%02X " "(role=0x%lx) " "wsi->lextable_pos=%d\n", c, c, (unsigned long)lwsi_role(wsi), ah->lextable_pos); if (c >= 'A' && c <= 'Z') c += 'a' - 'A'; #if defined(LWS_WITH_CUSTOM_HEADERS) /* * ...in case it's an unknown header, speculatively * store it as the name comes in. If we recognize it as * a known header, we'll snip this. */ if (!ah->unk_pos) { ah->unk_pos = ah->pos; /* * Prepare new unknown header linked-list entry * * - 16-bit BE: name part length * - 16-bit BE: value part length * - 32-bit BE: data offset of next, or 0 */ for (n = 0; n < 8; n++) if (!lws_pos_in_bounds(wsi)) ah->data[ah->pos++] = 0; } #endif if (lws_pos_in_bounds(wsi)) return -1; ah->data[ah->pos++] = c; pos = ah->lextable_pos; #if defined(LWS_WITH_CUSTOM_HEADERS) if (pos < 0 && c == ':') { /* * process unknown headers * * register us in the unknown hdr ll */ if (!ah->unk_ll_head) ah->unk_ll_head = ah->unk_pos; if (ah->unk_ll_tail) lws_un32be_set(&ah->data[ah->unk_ll_tail + UHO_LL], ah->unk_pos); ah->unk_ll_tail = ah->unk_pos; lwsl_debug("%s: unk header %d '%.*s'\n", __func__, ah->pos - (ah->unk_pos + UHO_NAME), ah->pos - (ah->unk_pos + UHO_NAME), &ah->data[ah->unk_pos + UHO_NAME]); /* set the unknown header name part length */ lws_un16be_set(&ah->data[ah->unk_pos], (ah->pos - ah->unk_pos) - UHO_NAME); ah->unk_value_pos = ah->pos; /* * collect whatever's coming for the unknown header * argument until the next CRLF */ ah->parser_state = WSI_TOKEN_UNKNOWN_VALUE_PART; break; } #endif if (pos < 0) break; while (1) { if (lextable[pos] & (1 << 7)) { /* 1-byte, fail on mismatch */ if ((lextable[pos] & 0x7f) != c) { nope: ah->lextable_pos = -1; break; } /* fall thru */ pos++; if (lextable[pos] == FAIL_CHAR) goto nope; ah->lextable_pos = pos; break; } if (lextable[pos] == FAIL_CHAR) goto nope; /* b7 = 0, end or 3-byte */ if (lextable[pos] < FAIL_CHAR) { #if defined(LWS_WITH_CUSTOM_HEADERS) /* * We hit a terminal marker, so we * recognized this header... drop the * speculative name part storage */ ah->pos = ah->unk_pos; ah->unk_pos = 0; #endif ah->lextable_pos = pos; break; } if (lextable[pos] == c) { /* goto */ ah->lextable_pos = pos + (lextable[pos + 1]) + (lextable[pos + 2] << 8); break; } /* fall thru goto */ pos += 3; /* continue */ } /* * If it's h1, server needs to be on the look out for * unknown methods... */ if (ah->lextable_pos < 0 && lwsi_role_h1(wsi) && lwsi_role_server(wsi)) { /* * this is not a header we know about... did * we get a valid method (GET, POST etc) * already, or is this the bogus method? */ for (m = 0; m < LWS_ARRAY_SIZE(methods); m++) if (ah->frag_index[methods[m]]) { /* * already had the method */ #if !defined(LWS_WITH_CUSTOM_HEADERS) ah->parser_state = WSI_TOKEN_SKIPPING; #endif break; } if (m != LWS_ARRAY_SIZE(methods)) #if defined(LWS_WITH_CUSTOM_HEADERS) /* * We have the method, this is just an * unknown header then */ goto unknown_hdr; #else break; #endif /* * ...it's an unknown http method from a client * in fact, it cannot be valid http. * * Are we set up to transition to another role * in these cases? */ if (lws_check_opt(wsi->vhost->options, LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG)) { lwsl_notice("%s: http fail fallback\n", __func__); /* transition to other role */ return LPR_DO_FALLBACK; } lwsl_info("Unknown method - dropping\n"); goto forbid; } if (ah->lextable_pos < 0) { #if defined(LWS_WITH_CUSTOM_HEADERS) goto unknown_hdr; #else /* * ...otherwise for a client, let him ignore * unknown headers coming from the server */ ah->parser_state = WSI_TOKEN_SKIPPING; break; #endif } if (lextable[ah->lextable_pos] < FAIL_CHAR) { /* terminal state */ n = ((unsigned int)lextable[ah->lextable_pos] << 8) | lextable[ah->lextable_pos + 1]; lwsl_parser("known hdr %d\n", n); for (m = 0; m < LWS_ARRAY_SIZE(methods); m++) if (n == methods[m] && ah->frag_index[methods[m]]) { lwsl_warn("Duplicated method\n"); return LPR_FAIL; } /* * WSORIGIN is protocol equiv to ORIGIN, * JWebSocket likes to send it, map to ORIGIN */ if (n == WSI_TOKEN_SWORIGIN) n = WSI_TOKEN_ORIGIN; ah->parser_state = (enum lws_token_indexes) (WSI_TOKEN_GET_URI + n); ah->ups = URIPS_IDLE; if (context->token_limits) ah->current_token_limit = context-> token_limits->token_limit[ ah->parser_state]; else ah->current_token_limit = wsi->context->max_http_header_data; if (ah->parser_state == WSI_TOKEN_CHALLENGE) goto set_parsing_complete; goto start_fragment; } break; #if defined(LWS_WITH_CUSTOM_HEADERS) unknown_hdr: //ah->parser_state = WSI_TOKEN_SKIPPING; //break; break; #endif start_fragment: ah->nfrag++; excessive: if (ah->nfrag == LWS_ARRAY_SIZE(ah->frags)) { lwsl_warn("More hdr frags than we can deal with\n"); return LPR_FAIL; } ah->frags[ah->nfrag].offset = ah->pos; ah->frags[ah->nfrag].len = 0; ah->frags[ah->nfrag].nfrag = 0; ah->frags[ah->nfrag].flags = 2; n = ah->frag_index[ah->parser_state]; if (!n) { /* first fragment */ ah->frag_index[ah->parser_state] = ah->nfrag; ah->hdr_token_idx = ah->parser_state; break; } /* continuation */ while (ah->frags[n].nfrag) n = ah->frags[n].nfrag; ah->frags[n].nfrag = ah->nfrag; if (issue_char(wsi, ' ') < 0) return LPR_FAIL; break; /* skipping arg part of a name we didn't recognize */ case WSI_TOKEN_SKIPPING: lwsl_parser("WSI_TOKEN_SKIPPING '%c'\n", c); if (c == '\x0d') ah->parser_state = WSI_TOKEN_SKIPPING_SAW_CR; break; case WSI_TOKEN_SKIPPING_SAW_CR: lwsl_parser("WSI_TOKEN_SKIPPING_SAW_CR '%c'\n", c); if (ah->ues != URIES_IDLE) goto forbid; if (c == '\x0a') { ah->parser_state = WSI_TOKEN_NAME_PART; #if defined(LWS_WITH_CUSTOM_HEADERS) ah->unk_pos = 0; #endif ah->lextable_pos = 0; } else ah->parser_state = WSI_TOKEN_SKIPPING; break; /* we're done, ignore anything else */ case WSI_PARSING_COMPLETE: lwsl_parser("WSI_PARSING_COMPLETE '%c'\n", c); break; } } while (*len); return LPR_OK; set_parsing_complete: if (ah->ues != URIES_IDLE) goto forbid; if (lws_hdr_total_length(wsi, WSI_TOKEN_UPGRADE)) { if (lws_hdr_total_length(wsi, WSI_TOKEN_VERSION)) wsi->rx_frame_type = /* temp for ws version index */ atoi(lws_hdr_simple_ptr(wsi, WSI_TOKEN_VERSION)); lwsl_parser("v%02d hdrs done\n", wsi->rx_frame_type); } ah->parser_state = WSI_PARSING_COMPLETE; wsi->hdr_parsing_completed = 1; return LPR_OK; forbid: lwsl_notice(" forbidding on uri sanitation\n"); lws_return_http_status(wsi, HTTP_STATUS_FORBIDDEN, NULL); return LPR_FORBIDDEN; } libwebsockets-3.2.1/lib/roles/http/server/ranges.c000066400000000000000000000106131357643561300221750ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * RFC7233 ranges parser * * Copyright (C) 2016 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" /* * RFC7233 examples * * o The first 500 bytes (byte offsets 0-499, inclusive): * * bytes=0-499 * * o The second 500 bytes (byte offsets 500-999, inclusive): * * bytes=500-999 * * o The final 500 bytes (byte offsets 9500-9999, inclusive): * * bytes=-500 * * Or: * * bytes=9500- * * o The first and last bytes only (bytes 0 and 9999): * * bytes=0-0,-1 * * o Other valid (but not canonical) specifications of the second 500 * bytes (byte offsets 500-999, inclusive): * * bytes=500-600,601-999 * bytes=500-700,601-999 */ /* * returns 1 if the range struct represents a usable range * if no ranges header, you get one of these for the whole * file. Otherwise you get one for each valid range in the * header. * * returns 0 if no further valid range forthcoming; rp->state * may be LWSRS_SYNTAX or LWSRS_COMPLETED */ int lws_ranges_next(struct lws_range_parsing *rp) { static const char * const beq = "bytes="; while (1) { char c = rp->buf[rp->pos]; switch (rp->state) { case LWSRS_SYNTAX: case LWSRS_COMPLETED: return 0; case LWSRS_NO_ACTIVE_RANGE: rp->state = LWSRS_COMPLETED; return 0; case LWSRS_BYTES_EQ: // looking for "bytes=" if (c != beq[rp->pos]) { rp->state = LWSRS_SYNTAX; return -1; } if (rp->pos == 5) rp->state = LWSRS_FIRST; break; case LWSRS_FIRST: rp->start = 0; rp->end = 0; rp->start_valid = 0; rp->end_valid = 0; rp->state = LWSRS_STARTING; // fallthru case LWSRS_STARTING: if (c == '-') { rp->state = LWSRS_ENDING; break; } if (!(c >= '0' && c <= '9')) { rp->state = LWSRS_SYNTAX; return 0; } rp->start = (rp->start * 10) + (c - '0'); rp->start_valid = 1; break; case LWSRS_ENDING: if (c == ',' || c == '\0') { rp->state = LWSRS_FIRST; if (c == ',') rp->pos++; /* * By the end of this, start and end are * always valid if the range still is */ if (!rp->start_valid) { /* eg, -500 */ if (rp->end > rp->extent) rp->end = rp->extent; rp->start = rp->extent - rp->end; rp->end = rp->extent - 1; } else if (!rp->end_valid) rp->end = rp->extent - 1; rp->did_try = 1; /* end must be >= start or ignore it */ if (rp->end < rp->start) { if (c == ',') break; rp->state = LWSRS_COMPLETED; return 0; } return 1; /* issue range */ } if (!(c >= '0' && c <= '9')) { rp->state = LWSRS_SYNTAX; return 0; } rp->end = (rp->end * 10) + (c - '0'); rp->end_valid = 1; break; } rp->pos++; } } void lws_ranges_reset(struct lws_range_parsing *rp) { rp->pos = 0; rp->ctr = 0; rp->start = 0; rp->end = 0; rp->start_valid = 0; rp->end_valid = 0; rp->state = LWSRS_BYTES_EQ; } /* * returns count of valid ranges */ int lws_ranges_init(struct lws *wsi, struct lws_range_parsing *rp, unsigned long long extent) { rp->agg = 0; rp->send_ctr = 0; rp->inside = 0; rp->count_ranges = 0; rp->did_try = 0; lws_ranges_reset(rp); rp->state = LWSRS_COMPLETED; rp->extent = extent; if (lws_hdr_copy(wsi, (char *)rp->buf, sizeof(rp->buf), WSI_TOKEN_HTTP_RANGE) <= 0) return 0; rp->state = LWSRS_BYTES_EQ; while (lws_ranges_next(rp)) { rp->count_ranges++; rp->agg += rp->end - rp->start + 1; } lwsl_debug("%s: count %d\n", __func__, rp->count_ranges); lws_ranges_reset(rp); if (rp->did_try && !rp->count_ranges) return -1; /* "not satisfiable */ lws_ranges_next(rp); return rp->count_ranges; } libwebsockets-3.2.1/lib/roles/http/server/rewrite.c000066400000000000000000000020331357643561300223740ustar00rootroot00000000000000#include "core/private.h" #if defined(LWS_WITH_HUBBUB) LWS_EXTERN struct lws_rewrite * lws_rewrite_create(struct lws *wsi, hubbub_callback_t cb, const char *from, const char *to) { struct lws_rewrite *r = lws_malloc(sizeof(*r), "rewrite"); if (!r) { lwsl_err("OOM\n"); return NULL; } if (hubbub_parser_create("UTF-8", false, &r->parser) != HUBBUB_OK) { lws_free(r); return NULL; } r->from = from; r->from_len = strlen(from); r->to = to; r->to_len = strlen(to); r->params.token_handler.handler = cb; r->wsi = wsi; r->params.token_handler.pw = (void *)r; if (hubbub_parser_setopt(r->parser, HUBBUB_PARSER_TOKEN_HANDLER, &r->params) != HUBBUB_OK) { lws_free(r); return NULL; } return r; } LWS_EXTERN int lws_rewrite_parse(struct lws_rewrite *r, const unsigned char *in, int in_len) { if (r && hubbub_parser_parse_chunk(r->parser, in, in_len) != HUBBUB_OK) return -1; return 0; } LWS_EXTERN void lws_rewrite_destroy(struct lws_rewrite *r) { hubbub_parser_destroy(r->parser); lws_free(r); } #endif libwebsockets-3.2.1/lib/roles/http/server/server.c000066400000000000000000002265041357643561300222340ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" const char * const method_names[] = { "GET", "POST", "OPTIONS", "PUT", "PATCH", "DELETE", "CONNECT", "HEAD", #ifdef LWS_WITH_HTTP2 ":path", #endif }; static const char * const intermediates[] = { "private", "public" }; /* * return 0: all done * 1: nonfatal error * <0: fatal error * * REQUIRES CONTEXT LOCK HELD */ #ifndef LWS_NO_SERVER int _lws_vhost_init_server(const struct lws_context_creation_info *info, struct lws_vhost *vhost) { int n, opt = 1, limit = 1; lws_sockfd_type sockfd; struct lws_vhost *vh; struct lws *wsi; int m = 0, is; (void)method_names; (void)opt; if (info) { vhost->iface = info->iface; vhost->listen_port = info->port; } /* set up our external listening socket we serve on */ if (vhost->listen_port == CONTEXT_PORT_NO_LISTEN || vhost->listen_port == CONTEXT_PORT_NO_LISTEN_SERVER) return 0; vh = vhost->context->vhost_list; while (vh) { if (vh->listen_port == vhost->listen_port) { if (((!vhost->iface && !vh->iface) || (vhost->iface && vh->iface && !strcmp(vhost->iface, vh->iface))) && vh->lserv_wsi ) { lwsl_notice(" using listen skt from vhost %s\n", vh->name); return 0; } } vh = vh->vhost_next; } if (vhost->iface) { /* * let's check before we do anything else about the disposition * of the interface he wants to bind to... */ is = lws_socket_bind(vhost, LWS_SOCK_INVALID, vhost->listen_port, vhost->iface, 1); lwsl_debug("initial if check says %d\n", is); if (is == LWS_ITOSA_BUSY) /* treat as fatal */ return -1; deal: lws_start_foreach_llp(struct lws_vhost **, pv, vhost->context->no_listener_vhost_list) { if (is >= LWS_ITOSA_USABLE && *pv == vhost) { /* on the list and shouldn't be: remove it */ lwsl_debug("deferred iface: removing vh %s\n", (*pv)->name); *pv = vhost->no_listener_vhost_list; vhost->no_listener_vhost_list = NULL; goto done_list; } if (is < LWS_ITOSA_USABLE && *pv == vhost) goto done_list; } lws_end_foreach_llp(pv, no_listener_vhost_list); /* not on the list... */ if (is < LWS_ITOSA_USABLE) { /* ... but needs to be: so add it */ lwsl_debug("deferred iface: adding vh %s\n", vhost->name); vhost->no_listener_vhost_list = vhost->context->no_listener_vhost_list; vhost->context->no_listener_vhost_list = vhost; } done_list: switch (is) { default: break; case LWS_ITOSA_NOT_EXIST: /* can't add it */ if (info) /* first time */ lwsl_err("VH %s: iface %s port %d DOESN'T EXIST\n", vhost->name, vhost->iface, vhost->listen_port); else return -1; return (info->options & LWS_SERVER_OPTION_FAIL_UPON_UNABLE_TO_BIND) == LWS_SERVER_OPTION_FAIL_UPON_UNABLE_TO_BIND? -1 : 1; case LWS_ITOSA_NOT_USABLE: /* can't add it */ if (info) /* first time */ lwsl_err("VH %s: iface %s port %d NOT USABLE\n", vhost->name, vhost->iface, vhost->listen_port); else return -1; return (info->options & LWS_SERVER_OPTION_FAIL_UPON_UNABLE_TO_BIND) == LWS_SERVER_OPTION_FAIL_UPON_UNABLE_TO_BIND? -1 : 1; } } (void)n; #if defined(__linux__) #ifdef LWS_WITH_UNIX_SOCK /* * A Unix domain sockets cannot be bound for several times, even if we set * the SO_REUSE* options on. * However, fortunately, each thread is able to independently listen when * running on a reasonably new Linux kernel. So we can safely assume * creating just one listening socket for a multi-threaded environment won't * fail in most cases. */ if (!LWS_UNIX_SOCK_ENABLED(vhost)) #endif limit = vhost->context->count_threads; #endif for (m = 0; m < limit; m++) { #ifdef LWS_WITH_UNIX_SOCK if (LWS_UNIX_SOCK_ENABLED(vhost)) sockfd = socket(AF_UNIX, SOCK_STREAM, 0); else #endif #ifdef LWS_WITH_IPV6 if (LWS_IPV6_ENABLED(vhost)) sockfd = socket(AF_INET6, SOCK_STREAM, 0); else #endif sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == LWS_SOCK_INVALID) { lwsl_err("ERROR opening socket\n"); return 1; } #if !defined(LWS_WITH_ESP32) #if (defined(WIN32) || defined(_WIN32)) && defined(SO_EXCLUSIVEADDRUSE) /* * only accept that we are the only listener on the port * https://msdn.microsoft.com/zh-tw/library/ * windows/desktop/ms740621(v=vs.85).aspx * * for lws, to match Linux, we default to exclusive listen */ if (!lws_check_opt(vhost->options, LWS_SERVER_OPTION_ALLOW_LISTEN_SHARE)) { if (setsockopt(sockfd, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, (const void *)&opt, sizeof(opt)) < 0) { lwsl_err("reuseaddr failed\n"); compatible_close(sockfd); return -1; } } else #endif /* * allow us to restart even if old sockets in TIME_WAIT */ if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const void *)&opt, sizeof(opt)) < 0) { lwsl_err("reuseaddr failed\n"); compatible_close(sockfd); return -1; } #if defined(LWS_WITH_IPV6) && defined(IPV6_V6ONLY) if (LWS_IPV6_ENABLED(vhost) && vhost->options & LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY) { int value = (vhost->options & LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE) ? 1 : 0; if (setsockopt(sockfd, IPPROTO_IPV6, IPV6_V6ONLY, (const void*)&value, sizeof(value)) < 0) { compatible_close(sockfd); return -1; } } #endif #if defined(__linux__) && defined(SO_REUSEPORT) /* keep coverity happy */ #if LWS_MAX_SMP > 1 n = 1; #else n = lws_check_opt(vhost->options, LWS_SERVER_OPTION_ALLOW_LISTEN_SHARE); #endif if (n && vhost->context->count_threads > 1) if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, (const void *)&opt, sizeof(opt)) < 0) { compatible_close(sockfd); return -1; } #endif #endif lws_plat_set_socket_options(vhost, sockfd, 0); is = lws_socket_bind(vhost, sockfd, vhost->listen_port, vhost->iface, 1); if (is == LWS_ITOSA_BUSY) { /* treat as fatal */ compatible_close(sockfd); return -1; } /* * There is a race where the network device may come up and then * go away and fail here. So correctly handle unexpected failure * here despite we earlier confirmed it. */ if (is < 0) { lwsl_info("%s: lws_socket_bind says %d\n", __func__, is); compatible_close(sockfd); goto deal; } wsi = lws_zalloc(sizeof(struct lws), "listen wsi"); if (wsi == NULL) { lwsl_err("Out of mem\n"); goto bail; } #ifdef LWS_WITH_UNIX_SOCK if (!LWS_UNIX_SOCK_ENABLED(vhost)) #endif { wsi->unix_skt = 1; vhost->listen_port = is; lwsl_debug("%s: lws_socket_bind says %d\n", __func__, is); } wsi->context = vhost->context; wsi->desc.sockfd = sockfd; lws_role_transition(wsi, 0, LRS_UNCONNECTED, &role_ops_listen); wsi->protocol = vhost->protocols; wsi->tsi = m; lws_vhost_bind_wsi(vhost, wsi); wsi->listener = 1; if (wsi->context->event_loop_ops->init_vhost_listen_wsi) wsi->context->event_loop_ops->init_vhost_listen_wsi(wsi); if (__insert_wsi_socket_into_fds(vhost->context, wsi)) { lwsl_notice("inserting wsi socket into fds failed\n"); goto bail; } vhost->context->count_wsi_allocated++; vhost->lserv_wsi = wsi; n = listen(wsi->desc.sockfd, LWS_SOMAXCONN); if (n < 0) { lwsl_err("listen failed with error %d\n", LWS_ERRNO); vhost->lserv_wsi = NULL; vhost->context->count_wsi_allocated--; __remove_wsi_socket_from_fds(wsi); goto bail; } } /* for each thread able to independently listen */ if (!lws_check_opt(vhost->context->options, LWS_SERVER_OPTION_EXPLICIT_VHOSTS)) { #ifdef LWS_WITH_UNIX_SOCK if (LWS_UNIX_SOCK_ENABLED(vhost)) lwsl_info(" Listening on \"%s\"\n", vhost->iface); else #endif lwsl_info(" Listening on port %d\n", vhost->listen_port); } // info->port = vhost->listen_port; return 0; bail: compatible_close(sockfd); return -1; } #endif struct lws_vhost * lws_select_vhost(struct lws_context *context, int port, const char *servername) { struct lws_vhost *vhost = context->vhost_list; const char *p; int n, colon; n = (int)strlen(servername); colon = n; p = strchr(servername, ':'); if (p) colon = lws_ptr_diff(p, servername); /* Priotity 1: first try exact matches */ while (vhost) { if (port == vhost->listen_port && !strncmp(vhost->name, servername, colon)) { lwsl_info("SNI: Found: %s\n", servername); return vhost; } vhost = vhost->vhost_next; } /* * Priority 2: if no exact matches, try matching *.vhost-name * unintentional matches are possible but resolve to x.com for *.x.com * which is reasonable. If exact match exists we already chose it and * never reach here. SSL will still fail it if the cert doesn't allow * *.x.com. */ vhost = context->vhost_list; while (vhost) { int m = (int)strlen(vhost->name); if (port && port == vhost->listen_port && m <= (colon - 2) && servername[colon - m - 1] == '.' && !strncmp(vhost->name, servername + colon - m, m)) { lwsl_info("SNI: Found %s on wildcard: %s\n", servername, vhost->name); return vhost; } vhost = vhost->vhost_next; } /* Priority 3: match the first vhost on our port */ vhost = context->vhost_list; while (vhost) { if (port && port == vhost->listen_port) { lwsl_info("%s: vhost match to %s based on port %d\n", __func__, vhost->name, port); return vhost; } vhost = vhost->vhost_next; } /* no match */ return NULL; } static const struct lws_mimetype { const char *extension; const char *mimetype; } server_mimetypes[] = { { ".html", "text/html" }, { ".htm", "text/html" }, { ".js", "text/javascript" }, { ".css", "text/css" }, { ".png", "image/png" }, { ".jpg", "image/jpeg" }, { ".jpeg", "image/jpeg" }, { ".ico", "image/x-icon" }, { ".gif", "image/gif" }, { ".svg", "image/svg+xml" }, { ".ttf", "application/x-font-ttf" }, { ".otf", "application/font-woff" }, { ".woff", "application/font-woff" }, { ".woff2", "application/font-woff2" }, { ".gz", "application/gzip" }, { ".txt", "text/plain" }, { ".xml", "application/xml" }, { ".json", "application/json" }, }; LWS_VISIBLE LWS_EXTERN const char * lws_get_mimetype(const char *file, const struct lws_http_mount *m) { const struct lws_protocol_vhost_options *pvo; size_t n = strlen(file), len, i; const char *fallback_mimetype = NULL; const struct lws_mimetype *mt; /* prioritize user-defined mimetypes */ for (pvo = m ? m->extra_mimetypes : NULL; pvo; pvo = pvo->next) { /* ie, match anything */ if (!fallback_mimetype && pvo->name[0] == '*') { fallback_mimetype = pvo->value; continue; } len = strlen(pvo->name); if (n > len && !strcasecmp(&file[n - len], pvo->name)) { lwsl_info("%s: match to user mimetype: %s\n", __func__, pvo->value); return pvo->value; } } /* fallback to server-defined mimetypes */ for (i = 0; i < LWS_ARRAY_SIZE(server_mimetypes); ++i) { mt = &server_mimetypes[i]; len = strlen(mt->extension); if (n > len && !strcasecmp(&file[n - len], mt->extension)) { lwsl_info("%s: match to server mimetype: %s\n", __func__, mt->mimetype); return mt->mimetype; } } /* fallback to '*' if defined */ if (fallback_mimetype) { lwsl_info("%s: match to any mimetype: %s\n", __func__, fallback_mimetype); return fallback_mimetype; } return NULL; } static lws_fop_flags_t lws_vfs_prepare_flags(struct lws *wsi) { lws_fop_flags_t f = 0; if (!lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_ACCEPT_ENCODING)) return f; if (strstr(lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_ACCEPT_ENCODING), "gzip")) { lwsl_info("client indicates GZIP is acceptable\n"); f |= LWS_FOP_FLAG_COMPR_ACCEPTABLE_GZIP; } return f; } #if !defined(LWS_AMAZON_RTOS) static int lws_http_serve(struct lws *wsi, char *uri, const char *origin, const struct lws_http_mount *m) { const struct lws_protocol_vhost_options *pvo = m->interpret; struct lws_process_html_args args; const char *mimetype; #if !defined(_WIN32_WCE) const struct lws_plat_file_ops *fops; const char *vpath; lws_fop_flags_t fflags = LWS_O_RDONLY; #if defined(WIN32) && defined(LWS_HAVE__STAT32I64) struct _stat32i64 st; #else struct stat st; #endif int spin = 0; #endif char path[256], sym[2048]; unsigned char *p = (unsigned char *)sym + 32 + LWS_PRE, *start = p; unsigned char *end = p + sizeof(sym) - 32 - LWS_PRE; #if !defined(WIN32) && !defined(LWS_WITH_ESP32) size_t len; #endif int n; wsi->handling_404 = 0; if (!wsi->vhost) return -1; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) if (wsi->vhost->http.error_document_404 && !strcmp(uri, wsi->vhost->http.error_document_404)) wsi->handling_404 = 1; #endif lws_snprintf(path, sizeof(path) - 1, "%s/%s", origin, uri); #if !defined(_WIN32_WCE) fflags |= lws_vfs_prepare_flags(wsi); do { spin++; fops = lws_vfs_select_fops(wsi->context->fops, path, &vpath); if (wsi->http.fop_fd) lws_vfs_file_close(&wsi->http.fop_fd); wsi->http.fop_fd = fops->LWS_FOP_OPEN(wsi->context->fops, path, vpath, &fflags); if (!wsi->http.fop_fd) { lwsl_info("%s: Unable to open '%s': errno %d\n", __func__, path, errno); return 1; } /* if it can't be statted, don't try */ if (fflags & LWS_FOP_FLAG_VIRTUAL) break; #if defined(LWS_WITH_ESP32) break; #endif #if !defined(WIN32) if (fstat(wsi->http.fop_fd->fd, &st)) { lwsl_info("unable to stat %s\n", path); goto notfound; } #else #if defined(LWS_HAVE__STAT32I64) if (_stat32i64(path, &st)) { lwsl_info("unable to stat %s\n", path); goto notfound; } #else if (stat(path, &st)) { lwsl_info("unable to stat %s\n", path); goto notfound; } #endif #endif wsi->http.fop_fd->mod_time = (uint32_t)st.st_mtime; fflags |= LWS_FOP_FLAG_MOD_TIME_VALID; #if !defined(WIN32) && !defined(LWS_WITH_ESP32) if ((S_IFMT & st.st_mode) == S_IFLNK) { len = readlink(path, sym, sizeof(sym) - 1); if (len) { lwsl_err("Failed to read link %s\n", path); goto notfound; } sym[len] = '\0'; lwsl_debug("symlink %s -> %s\n", path, sym); lws_snprintf(path, sizeof(path) - 1, "%s", sym); } #endif if ((S_IFMT & st.st_mode) == S_IFDIR) { lwsl_debug("default filename append to dir\n"); lws_snprintf(path, sizeof(path) - 1, "%s/%s/index.html", origin, uri); } } while ((S_IFMT & st.st_mode) != S_IFREG && spin < 5); if (spin == 5) lwsl_err("symlink loop %s \n", path); n = sprintf(sym, "%08llX%08lX", (unsigned long long)lws_vfs_get_length(wsi->http.fop_fd), (unsigned long)lws_vfs_get_mod_time(wsi->http.fop_fd)); /* disable ranges if IF_RANGE token invalid */ if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_IF_RANGE)) if (strcmp(sym, lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_IF_RANGE))) /* differs - defeat Range: */ wsi->http.ah->frag_index[WSI_TOKEN_HTTP_RANGE] = 0; if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_IF_NONE_MATCH)) { /* * he thinks he has some version of it already, * check if the tag matches */ if (!strcmp(sym, lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_IF_NONE_MATCH))) { char cache_control[50], *cc = "no-store"; int cclen = 8; lwsl_debug("%s: ETAG match %s %s\n", __func__, uri, origin); /* we don't need to send the payload */ if (lws_add_http_header_status(wsi, HTTP_STATUS_NOT_MODIFIED, &p, end)) { lwsl_err("%s: failed adding not modified\n", __func__); return -1; } if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_ETAG, (unsigned char *)sym, n, &p, end)) return -1; /* but we still need to send cache control... */ if (m->cache_max_age && m->cache_reusable) { if (!m->cache_revalidate) { cc = cache_control; cclen = sprintf(cache_control, "%s, max-age=%u", intermediates[wsi->cache_intermediaries], m->cache_max_age); } else { cc = cache_control; cclen = sprintf(cache_control, "must-revalidate, %s, max-age=%u", intermediates[wsi->cache_intermediaries], m->cache_max_age); } } if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CACHE_CONTROL, (unsigned char *)cc, cclen, &p, end)) return -1; if (lws_finalize_http_header(wsi, &p, end)) return -1; n = lws_write(wsi, start, p - start, LWS_WRITE_HTTP_HEADERS | LWS_WRITE_H2_STREAM_END); if (n != (p - start)) { lwsl_err("_write returned %d from %ld\n", n, (long)(p - start)); return -1; } lws_vfs_file_close(&wsi->http.fop_fd); if (lws_http_transaction_completed(wsi)) return -1; return 0; } } if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_ETAG, (unsigned char *)sym, n, &p, end)) return -1; #endif mimetype = lws_get_mimetype(path, m); if (!mimetype) { lwsl_info("unknown mimetype for %s\n", path); if (lws_return_http_status(wsi, HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE, NULL) || lws_http_transaction_completed(wsi)) return -1; return 0; } if (!mimetype[0]) lwsl_debug("sending no mimetype for %s\n", path); wsi->sending_chunked = 0; wsi->interpreting = 0; /* * check if this is in the list of file suffixes to be interpreted by * a protocol */ while (pvo) { n = (int)strlen(path); if (n > (int)strlen(pvo->name) && !strcmp(&path[n - strlen(pvo->name)], pvo->name)) { wsi->interpreting = 1; if (!wsi->http2_substream) wsi->sending_chunked = 1; wsi->protocol_interpret_idx = (char)( lws_vhost_name_to_protocol(wsi->vhost, pvo->value) - &lws_get_vhost(wsi)->protocols[0]); lwsl_debug("want %s interpreted by %s (pcol is %s)\n", path, wsi->vhost->protocols[ (int)wsi->protocol_interpret_idx].name, wsi->protocol->name); if (lws_bind_protocol(wsi, &wsi->vhost->protocols[ (int)wsi->protocol_interpret_idx], __func__)) return -1; if (lws_ensure_user_space(wsi)) return -1; break; } pvo = pvo->next; } if (wsi->sending_chunked) { if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_TRANSFER_ENCODING, (unsigned char *)"chunked", 7, &p, end)) return -1; } if (m->protocol) { const struct lws_protocols *pp = lws_vhost_name_to_protocol( wsi->vhost, m->protocol); if (lws_bind_protocol(wsi, pp, __func__)) return -1; args.p = (char *)p; args.max_len = lws_ptr_diff(end, p); if (pp->callback(wsi, LWS_CALLBACK_ADD_HEADERS, wsi->user_space, &args, 0)) return -1; p = (unsigned char *)args.p; } *p = '\0'; n = lws_serve_http_file(wsi, path, mimetype, (char *)start, lws_ptr_diff(p, start)); if (n < 0 || ((n > 0) && lws_http_transaction_completed(wsi))) return -1; /* error or can't reuse connection: close the socket */ return 0; notfound: return 1; } #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) const struct lws_http_mount * lws_find_mount(struct lws *wsi, const char *uri_ptr, int uri_len) { const struct lws_http_mount *hm, *hit = NULL; int best = 0; hm = wsi->vhost->http.mount_list; while (hm) { if (uri_len >= hm->mountpoint_len && !strncmp(uri_ptr, hm->mountpoint, hm->mountpoint_len) && (uri_ptr[hm->mountpoint_len] == '\0' || uri_ptr[hm->mountpoint_len] == '/' || hm->mountpoint_len == 1) ) { if (hm->origin_protocol == LWSMPRO_CALLBACK || ((hm->origin_protocol == LWSMPRO_CGI || lws_hdr_total_length(wsi, WSI_TOKEN_GET_URI) || lws_hdr_total_length(wsi, WSI_TOKEN_POST_URI) || lws_hdr_total_length(wsi, WSI_TOKEN_HEAD_URI) || (wsi->http2_substream && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_PATH)) || hm->protocol) && hm->mountpoint_len > best)) { best = hm->mountpoint_len; hit = hm; } } hm = hm->mount_next; } return hit; } #endif #if !defined(LWS_WITH_ESP32) static int lws_find_string_in_file(const char *filename, const char *string, int stringlen) { char buf[128]; int fd, match = 0, pos = 0, n = 0, hit = 0; fd = lws_open(filename, O_RDONLY); if (fd < 0) { lwsl_err("can't open auth file: %s\n", filename); return 0; } while (1) { if (pos == n) { n = read(fd, buf, sizeof(buf)); if (n <= 0) { if (match == stringlen) hit = 1; break; } pos = 0; } if (match == stringlen) { if (buf[pos] == '\r' || buf[pos] == '\n') { hit = 1; break; } match = 0; } if (buf[pos] == string[match]) match++; else match = 0; pos++; } close(fd); return hit; } #endif int lws_unauthorised_basic_auth(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; unsigned char *start = pt->serv_buf + LWS_PRE, *p = start, *end = p + 2048; char buf[64]; int n; /* no auth... tell him it is required */ if (lws_add_http_header_status(wsi, HTTP_STATUS_UNAUTHORIZED, &p, end)) return -1; n = lws_snprintf(buf, sizeof(buf), "Basic realm=\"lwsws\""); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_WWW_AUTHENTICATE, (unsigned char *)buf, n, &p, end)) return -1; if (lws_add_http_header_content_length(wsi, 0, &p, end)) return -1; if (lws_finalize_http_header(wsi, &p, end)) return -1; n = lws_write(wsi, start, p - start, LWS_WRITE_HTTP_HEADERS | LWS_WRITE_H2_STREAM_END); if (n < 0) return -1; return lws_http_transaction_completed(wsi); } int lws_clean_url(char *p) { if (p[0] == 'h' && p[1] == 't' && p[2] == 't' && p[3] == 'p') { p += 4; if (*p == 's') p++; if (*p == ':') { p++; if (*p == '/') p++; } } while (*p) { if (p[0] == '/' && p[1] == '/') { char *p1 = p; while (*p1) { *p1 = p1[1]; p1++; } continue; } p++; } return 0; } static const unsigned char methods[] = { WSI_TOKEN_GET_URI, WSI_TOKEN_POST_URI, WSI_TOKEN_OPTIONS_URI, WSI_TOKEN_PUT_URI, WSI_TOKEN_PATCH_URI, WSI_TOKEN_DELETE_URI, WSI_TOKEN_CONNECT, WSI_TOKEN_HEAD_URI, #ifdef LWS_WITH_HTTP2 WSI_TOKEN_HTTP_COLON_PATH, #endif }; int lws_http_get_uri_and_method(struct lws *wsi, char **puri_ptr, int *puri_len) { int n, count = 0; for (n = 0; n < (int)LWS_ARRAY_SIZE(methods); n++) if (lws_hdr_total_length(wsi, methods[n])) count++; if (!count) { lwsl_warn("Missing URI in HTTP request\n"); return -1; } if (count != 1 && !((wsi->http2_substream || wsi->h2_stream_carries_ws) && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_PATH))) { lwsl_warn("multiple methods?\n"); return -1; } for (n = 0; n < (int)LWS_ARRAY_SIZE(methods); n++) if (lws_hdr_total_length(wsi, methods[n])) { *puri_ptr = lws_hdr_simple_ptr(wsi, methods[n]); *puri_len = lws_hdr_total_length(wsi, methods[n]); return n; } return -1; } enum lws_check_basic_auth_results lws_check_basic_auth(struct lws *wsi, const char *basic_auth_login_file) { char b64[160], plain[(sizeof(b64) * 3) / 4], *pcolon; int m, ml, fi; if (!basic_auth_login_file) return LCBA_CONTINUE; /* Did he send auth? */ ml = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_AUTHORIZATION); if (!ml) return LCBA_FAILED_AUTH; /* Disallow fragmentation monkey business */ fi = wsi->http.ah->frag_index[WSI_TOKEN_HTTP_AUTHORIZATION]; if (wsi->http.ah->frags[fi].nfrag) { lwsl_err("fragmented basic auth header not allowed\n"); return LCBA_FAILED_AUTH; } m = lws_hdr_copy(wsi, b64, sizeof(b64), WSI_TOKEN_HTTP_AUTHORIZATION); if (m < 7) { lwsl_err("b64 auth too long\n"); return LCBA_END_TRANSACTION; } b64[5] = '\0'; if (strcasecmp(b64, "Basic")) { lwsl_err("auth missing basic: %s\n", b64); return LCBA_END_TRANSACTION; } /* It'll be like Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l */ m = lws_b64_decode_string(b64 + 6, plain, sizeof(plain) - 1); if (m < 0) { lwsl_err("plain auth too long\n"); return LCBA_END_TRANSACTION; } plain[m] = '\0'; pcolon = strchr(plain, ':'); if (!pcolon) { lwsl_err("basic auth format broken\n"); return LCBA_END_TRANSACTION; } if (!lws_find_string_in_file(basic_auth_login_file, plain, m)) { lwsl_err("basic auth lookup failed\n"); return LCBA_FAILED_AUTH; } /* * Rewrite WSI_TOKEN_HTTP_AUTHORIZATION so it is just the * authorized username */ *pcolon = '\0'; wsi->http.ah->frags[fi].len = lws_ptr_diff(pcolon, plain); pcolon = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_AUTHORIZATION); strncpy(pcolon, plain, ml - 1); pcolon[ml - 1] = '\0'; lwsl_info("%s: basic auth accepted for %s\n", __func__, lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_AUTHORIZATION)); return LCBA_CONTINUE; } #if defined(LWS_WITH_HTTP_PROXY) /* * Set up an onward http proxy connection according to the mount this * uri falls under. Notice this can also be starting the proxying of what was * originally an incoming h1 upgrade, or an h2 ws "upgrade". */ int lws_http_proxy_start(struct lws *wsi, const struct lws_http_mount *hit, char *uri_ptr, char ws) { char ads[96], rpath[256], host[96], *pcolon, *pslash, unix_skt = 0; struct lws_client_connect_info i; struct lws *cwsi; int n, na; if (ws) /* * Neither our inbound ws upgrade request side, nor our onward * ws client connection on our side can bind to the actual * protocol that only the remote inbound side and the remote * onward side understand. * * Instead these are both bound to our built-in "lws-ws-proxy" * protocol, which understands how to proxy between the two * sides. * * We bind the parent, inbound part here and our side of the * onward client connection is bound to the same handler using * the .local_protocol_name. */ lws_bind_protocol(wsi, &lws_ws_proxy, __func__); memset(&i, 0, sizeof(i)); i.context = lws_get_context(wsi); if (hit->origin[0] == '+') unix_skt = 1; pcolon = strchr(hit->origin, ':'); pslash = strchr(hit->origin, '/'); if (!pslash) { lwsl_err("Proxy mount origin '%s' must have /\n", hit->origin); return -1; } if (unix_skt) { if (!pcolon) { lwsl_err("Proxy mount origin for unix skt must " "have address delimited by :\n"); return -1; } n = lws_ptr_diff(pcolon, hit->origin); pslash = pcolon; } else { if (pcolon > pslash) pcolon = NULL; if (pcolon) n = (int)(pcolon - hit->origin); else n = (int)(pslash - hit->origin); if (n >= (int)sizeof(ads) - 2) n = sizeof(ads) - 2; } memcpy(ads, hit->origin, n); ads[n] = '\0'; i.address = ads; i.port = 80; if (hit->origin_protocol == LWSMPRO_HTTPS) { i.port = 443; i.ssl_connection = 1; } if (pcolon) i.port = atoi(pcolon + 1); n = lws_snprintf(rpath, sizeof(rpath) - 1, "/%s/%s", pslash + 1, uri_ptr + hit->mountpoint_len) - 2; lws_clean_url(rpath); na = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_URI_ARGS); if (na) { char *p = rpath + n; if (na >= (int)sizeof(rpath) - n - 2) { lwsl_info("%s: query string %d longer " "than we can handle\n", __func__, na); return -1; } *p++ = '?'; if (lws_hdr_copy(wsi, p, (int)(&rpath[sizeof(rpath) - 1] - p), WSI_TOKEN_HTTP_URI_ARGS) > 0) while (na--) { if (*p == '\0') *p = '&'; p++; } *p = '\0'; } i.path = rpath; /* incoming may be h1 or h2... if he sends h1 HOST, use that * directly, otherwise we must convert h2 :authority to h1 * host */ i.host = NULL; n = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_AUTHORITY); if (n > 0) i.host = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_AUTHORITY); else { n = lws_hdr_total_length(wsi, WSI_TOKEN_HOST); if (n > 0) { i.host = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST); } } #if 0 if (i.address[0] != '+' || !lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST)) i.host = i.address; else i.host = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST); #endif i.origin = NULL; if (!ws) { if (lws_hdr_simple_ptr(wsi, WSI_TOKEN_POST_URI) #if defined(LWS_WITH_HTTP2) || ( lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD) && !strcmp(lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD), "post") ) #endif ) i.method = "POST"; else i.method = "GET"; } if (i.host) lws_snprintf(host, sizeof(host), "%s:%u", i.host, wsi->vhost->listen_port); else lws_snprintf(host, sizeof(host), "%s:%d", i.address, i.port); i.host = host; i.alpn = "http/1.1"; i.parent_wsi = wsi; i.pwsi = &cwsi; i.protocol = lws_hdr_simple_ptr(wsi, WSI_TOKEN_PROTOCOL); if (ws) i.local_protocol_name = "lws-ws-proxy"; // i.uri_replace_from = hit->origin; // i.uri_replace_to = hit->mountpoint; lwsl_info("proxying to %s port %d url %s, ssl %d, from %s, to %s\n", i.address, i.port, i.path, i.ssl_connection, i.uri_replace_from, i.uri_replace_to); if (!lws_client_connect_via_info(&i)) { lwsl_err("proxy connect fail\n"); /* * ... we can't do the proxy action, but we can * cleanly return him a 503 and a description */ lws_return_http_status(wsi, HTTP_STATUS_SERVICE_UNAVAILABLE, "

Service Temporarily Unavailable

" "The server is temporarily unable to service " "your request due to maintenance downtime or " "capacity problems. Please try again later."); return 1; } lwsl_info("%s: setting proxy clientside on %p (parent %p)\n", __func__, cwsi, lws_get_parent(cwsi)); cwsi->http.proxy_clientside = 1; if (ws) { wsi->proxied_ws_parent = 1; cwsi->h1_ws_proxied = 1; if (i.protocol) { lwsl_debug("%s: (requesting '%s')\n", __func__, i.protocol); } } return 0; } #endif static const char * const oprot[] = { "http://", "https://" }; int lws_http_action(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; const struct lws_http_mount *hit = NULL; enum http_version request_version; struct lws_process_html_args args; enum http_conn_type conn_type; char content_length_str[32]; char http_version_str[12]; char *uri_ptr = NULL, *s; int uri_len = 0, meth, m; char http_conn_str[25]; int http_version_len; unsigned int n; meth = lws_http_get_uri_and_method(wsi, &uri_ptr, &uri_len); if (meth < 0 || meth >= (int)LWS_ARRAY_SIZE(method_names)) goto bail_nuke_ah; /* we insist on absolute paths */ if (!uri_ptr || uri_ptr[0] != '/') { lws_return_http_status(wsi, HTTP_STATUS_FORBIDDEN, NULL); goto bail_nuke_ah; } lwsl_info("Method: '%s' (%d), request for '%s'\n", method_names[meth], meth, uri_ptr); if (wsi->role_ops && wsi->role_ops->check_upgrades) switch (wsi->role_ops->check_upgrades(wsi)) { case LWS_UPG_RET_DONE: return 0; case LWS_UPG_RET_CONTINUE: break; case LWS_UPG_RET_BAIL: goto bail_nuke_ah; } if (lws_ensure_user_space(wsi)) goto bail_nuke_ah; /* HTTP header had a content length? */ wsi->http.rx_content_length = 0; wsi->http.content_length_explicitly_zero = 0; if (lws_hdr_total_length(wsi, WSI_TOKEN_POST_URI) || lws_hdr_total_length(wsi, WSI_TOKEN_PATCH_URI) || lws_hdr_total_length(wsi, WSI_TOKEN_PUT_URI)) wsi->http.rx_content_length = 100 * 1024 * 1024; if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH) && lws_hdr_copy(wsi, content_length_str, sizeof(content_length_str) - 1, WSI_TOKEN_HTTP_CONTENT_LENGTH) > 0) { wsi->http.rx_content_remain = wsi->http.rx_content_length = atoll(content_length_str); if (!wsi->http.rx_content_length) { wsi->http.content_length_explicitly_zero = 1; lwsl_debug("%s: explicit 0 content-length\n", __func__); } } if (wsi->http2_substream) { wsi->http.request_version = HTTP_VERSION_2; } else { /* http_version? Default to 1.0, override with token: */ request_version = HTTP_VERSION_1_0; /* Works for single digit HTTP versions. : */ http_version_len = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP); if (http_version_len > 7 && lws_hdr_copy(wsi, http_version_str, sizeof(http_version_str) - 1, WSI_TOKEN_HTTP) > 0 && http_version_str[5] == '1' && http_version_str[7] == '1') request_version = HTTP_VERSION_1_1; wsi->http.request_version = request_version; /* HTTP/1.1 defaults to "keep-alive", 1.0 to "close" */ if (request_version == HTTP_VERSION_1_1) conn_type = HTTP_CONNECTION_KEEP_ALIVE; else conn_type = HTTP_CONNECTION_CLOSE; /* Override default if http "Connection:" header: */ if (lws_hdr_total_length(wsi, WSI_TOKEN_CONNECTION) && lws_hdr_copy(wsi, http_conn_str, sizeof(http_conn_str) - 1, WSI_TOKEN_CONNECTION) > 0) { http_conn_str[sizeof(http_conn_str) - 1] = '\0'; if (!strcasecmp(http_conn_str, "keep-alive")) conn_type = HTTP_CONNECTION_KEEP_ALIVE; else if (!strcasecmp(http_conn_str, "close")) conn_type = HTTP_CONNECTION_CLOSE; } wsi->http.conn_type = conn_type; } n = wsi->protocol->callback(wsi, LWS_CALLBACK_FILTER_HTTP_CONNECTION, wsi->user_space, uri_ptr, uri_len); if (n) { lwsl_info("LWS_CALLBACK_HTTP closing\n"); return 1; } /* * if there is content supposed to be coming, * put a timeout on it having arrived */ lws_set_timeout(wsi, PENDING_TIMEOUT_HTTP_CONTENT, wsi->context->timeout_secs); #ifdef LWS_WITH_TLS if (wsi->tls.redirect_to_https) { /* * we accepted http:// only so we could redirect to * https://, so issue the redirect. Create the redirection * URI from the host: header and ignore the path part */ unsigned char *start = pt->serv_buf + LWS_PRE, *p = start, *end = p + wsi->context->pt_serv_buf_size - LWS_PRE; n = lws_hdr_total_length(wsi, WSI_TOKEN_HOST); if (!n || n > 128) goto bail_nuke_ah; p += lws_snprintf((char *)p, lws_ptr_diff(end, p), "https://"); memcpy(p, lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST), n); p += n; *p++ = '/'; *p = '\0'; n = lws_ptr_diff(p, start); p += LWS_PRE; n = lws_http_redirect(wsi, HTTP_STATUS_MOVED_PERMANENTLY, start, n, &p, end); if ((int)n < 0) goto bail_nuke_ah; return lws_http_transaction_completed(wsi); } #endif #ifdef LWS_WITH_ACCESS_LOG lws_prepare_access_log_info(wsi, uri_ptr, uri_len, meth); #endif /* can we serve it from the mount list? */ hit = lws_find_mount(wsi, uri_ptr, uri_len); if (!hit) { /* deferred cleanup and reset to protocols[0] */ lwsl_info("no hit\n"); if (lws_bind_protocol(wsi, &wsi->vhost->protocols[0], "no mount hit")) return 1; lwsi_set_state(wsi, LRS_DOING_TRANSACTION); m = wsi->protocol->callback(wsi, LWS_CALLBACK_HTTP, wsi->user_space, uri_ptr, uri_len); goto after; } s = uri_ptr + hit->mountpoint_len; /* * if we have a mountpoint like https://xxx.com/yyy * there is an implied / at the end for our purposes since * we can only mount on a "directory". * * But if we just go with that, the browser cannot understand * that he is actually looking down one "directory level", so * even though we give him /yyy/abc.html he acts like the * current directory level is /. So relative urls like "x.png" * wrongly look outside the mountpoint. * * Therefore if we didn't come in on a url with an explicit * / at the end, we must redirect to add it so the browser * understands he is one "directory level" down. */ if ((hit->mountpoint_len > 1 || (hit->origin_protocol == LWSMPRO_REDIR_HTTP || hit->origin_protocol == LWSMPRO_REDIR_HTTPS)) && (*s != '/' || (hit->origin_protocol == LWSMPRO_REDIR_HTTP || hit->origin_protocol == LWSMPRO_REDIR_HTTPS)) && (hit->origin_protocol != LWSMPRO_CGI && hit->origin_protocol != LWSMPRO_CALLBACK)) { unsigned char *start = pt->serv_buf + LWS_PRE, *p = start, *end = p + wsi->context->pt_serv_buf_size - LWS_PRE - 512; lwsl_info("Doing 301 '%s' org %s\n", s, hit->origin); /* > at start indicates deal with by redirect */ if (hit->origin_protocol == LWSMPRO_REDIR_HTTP || hit->origin_protocol == LWSMPRO_REDIR_HTTPS) n = lws_snprintf((char *)end, 256, "%s%s", oprot[hit->origin_protocol & 1], hit->origin); else { if (!lws_hdr_total_length(wsi, WSI_TOKEN_HOST)) { if (!lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_AUTHORITY)) goto bail_nuke_ah; n = lws_snprintf((char *)end, 256, "%s%s%s/", oprot[!!lws_is_ssl(wsi)], lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_AUTHORITY), uri_ptr); } else n = lws_snprintf((char *)end, 256, "%s%s%s/", oprot[!!lws_is_ssl(wsi)], lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST), uri_ptr); } lws_clean_url((char *)end); n = lws_http_redirect(wsi, HTTP_STATUS_MOVED_PERMANENTLY, end, n, &p, end); if ((int)n < 0) goto bail_nuke_ah; return lws_http_transaction_completed(wsi); } /* basic auth? */ switch(lws_check_basic_auth(wsi, hit->basic_auth_login_file)) { case LCBA_CONTINUE: break; case LCBA_FAILED_AUTH: return lws_unauthorised_basic_auth(wsi); case LCBA_END_TRANSACTION: lws_return_http_status(wsi, HTTP_STATUS_FORBIDDEN, NULL); return lws_http_transaction_completed(wsi); } #if defined(LWS_WITH_HTTP_PROXY) /* * The mount is a reverse proxy? */ // if (hit) // lwsl_notice("%s: origin_protocol: %d\n", __func__, hit->origin_protocol); //else // lwsl_notice("%s: no hit\n", __func__); if (hit->origin_protocol == LWSMPRO_HTTPS || hit->origin_protocol == LWSMPRO_HTTP) { n = lws_http_proxy_start(wsi, hit, uri_ptr, 0); // lwsl_notice("proxy start says %d\n", n); if (n) return n; goto deal_body; } #endif /* * A particular protocol callback is mounted here? * * For the duration of this http transaction, bind us to the * associated protocol */ if (hit->origin_protocol == LWSMPRO_CALLBACK || hit->protocol) { const struct lws_protocols *pp; const char *name = hit->origin; if (hit->protocol) name = hit->protocol; pp = lws_vhost_name_to_protocol(wsi->vhost, name); if (!pp) { n = -1; lwsl_err("Unable to find plugin '%s'\n", hit->origin); return 1; } if (lws_bind_protocol(wsi, pp, "http action CALLBACK bind")) return 1; lwsl_notice("%s: %s, checking access rights for mask 0x%x\n", __func__, hit->origin, hit->auth_mask); args.p = uri_ptr; args.len = uri_len; args.max_len = hit->auth_mask; args.final = 0; /* used to signal callback dealt with it */ args.chunked = 0; n = wsi->protocol->callback(wsi, LWS_CALLBACK_CHECK_ACCESS_RIGHTS, wsi->user_space, &args, 0); if (n) { lws_return_http_status(wsi, HTTP_STATUS_UNAUTHORIZED, NULL); goto bail_nuke_ah; } if (args.final) /* callback completely handled it well */ return 0; if (hit->cgienv && wsi->protocol->callback(wsi, LWS_CALLBACK_HTTP_PMO, wsi->user_space, (void *)hit->cgienv, 0)) return 1; if (lws_hdr_total_length(wsi, WSI_TOKEN_POST_URI)) { m = wsi->protocol->callback(wsi, LWS_CALLBACK_HTTP, wsi->user_space, uri_ptr + hit->mountpoint_len, uri_len - hit->mountpoint_len); goto after; } } #ifdef LWS_WITH_CGI /* did we hit something with a cgi:// origin? */ if (hit->origin_protocol == LWSMPRO_CGI) { const char *cmd[] = { NULL, /* replace with cgi path */ NULL }; lwsl_debug("%s: cgi\n", __func__); cmd[0] = hit->origin; n = 5; if (hit->cgi_timeout) n = hit->cgi_timeout; n = lws_cgi(wsi, cmd, hit->mountpoint_len, n, hit->cgienv); if (n) { lwsl_err("%s: cgi failed\n", __func__); return -1; } goto deal_body; } #endif n = uri_len - lws_ptr_diff(s, uri_ptr); // (int)strlen(s); if (s[0] == '\0' || (n == 1 && s[n - 1] == '/')) s = (char *)hit->def; if (!s) s = "index.html"; wsi->cache_secs = hit->cache_max_age; wsi->cache_reuse = hit->cache_reusable; wsi->cache_revalidate = hit->cache_revalidate; wsi->cache_intermediaries = hit->cache_intermediaries; m = 1; #if !defined(LWS_AMAZON_RTOS) if (hit->origin_protocol == LWSMPRO_FILE) m = lws_http_serve(wsi, s, hit->origin, hit); #endif if (m > 0) { /* * lws_return_http_status(wsi, HTTP_STATUS_NOT_FOUND, NULL); */ if (hit->protocol) { const struct lws_protocols *pp = lws_vhost_name_to_protocol( wsi->vhost, hit->protocol); lwsi_set_state(wsi, LRS_DOING_TRANSACTION); if (lws_bind_protocol(wsi, pp, "http_action HTTP")) return 1; m = pp->callback(wsi, LWS_CALLBACK_HTTP, wsi->user_space, uri_ptr + hit->mountpoint_len, uri_len - hit->mountpoint_len); } else m = wsi->protocol->callback(wsi, LWS_CALLBACK_HTTP, wsi->user_space, uri_ptr, uri_len); } after: if (m) { lwsl_info("LWS_CALLBACK_HTTP closing\n"); return 1; } #if defined(LWS_WITH_CGI) || defined(LWS_WITH_HTTP_PROXY) deal_body: #endif /* * If we're not issuing a file, check for content_length or * HTTP keep-alive. No keep-alive header allocation for * ISSUING_FILE, as this uses HTTP/1.0. * * In any case, return 0 and let lws_read decide how to * proceed based on state */ if (lwsi_state(wsi) != LRS_ISSUING_FILE) { /* Prepare to read body if we have a content length: */ lwsl_debug("wsi->http.rx_content_length %lld %d %d\n", (long long)wsi->http.rx_content_length, wsi->upgraded_to_http2, wsi->http2_substream); if (wsi->http.content_length_explicitly_zero && lws_hdr_total_length(wsi, WSI_TOKEN_POST_URI)) { /* * POST with an explicit content-length of zero * * If we don't give the user code the empty HTTP_BODY * callback, he may become confused to hear the * HTTP_BODY_COMPLETION (due to, eg, instantiation of * lws_spa never happened). * * HTTP_BODY_COMPLETION is responsible for sending the * result status code and result body if any, and * do the transaction complete processing. */ if (wsi->protocol->callback(wsi, LWS_CALLBACK_HTTP_BODY, wsi->user_space, NULL, 0)) return 1; if (wsi->protocol->callback(wsi, LWS_CALLBACK_HTTP_BODY_COMPLETION, wsi->user_space, NULL, 0)) return 1; return 0; } if (wsi->http.rx_content_length > 0) { if (lwsi_state(wsi) != LRS_DISCARD_BODY) { lwsi_set_state(wsi, LRS_BODY); lwsl_info("%s: %p: LRS_BODY state set (0x%x)\n", __func__, wsi, wsi->wsistate); } wsi->http.rx_content_remain = wsi->http.rx_content_length; /* * At this point we have transitioned from deferred * action to expecting BODY on the stream wsi, if it's * in a bundle like h2. So if the stream wsi has its * own buflist, we need to deal with that first. */ while (1) { struct lws_tokens ebuf; int m; ebuf.len = (int)lws_buflist_next_segment_len( &wsi->buflist, &ebuf.token); if (!ebuf.len) break; lwsl_debug("%s: consuming %d\n", __func__, (int)ebuf.len); m = lws_read_h1(wsi, ebuf.token, ebuf.len); if (m < 0) return -1; if (lws_buflist_aware_consume(wsi, &ebuf, m, 1)) return -1; } } } return 0; bail_nuke_ah: lws_header_table_detach(wsi, 1); return 1; } int lws_confirm_host_header(struct lws *wsi) { struct lws_tokenize ts; lws_tokenize_elem e; char buf[128]; int port = 80; /* * this vhost wants us to validate what the * client sent against our vhost name */ if (!lws_hdr_total_length(wsi, WSI_TOKEN_HOST)) { lwsl_info("%s: missing host on upgrade\n", __func__); return 1; } #if defined(LWS_WITH_TLS) if (wsi->tls.ssl) port = 443; #endif lws_tokenize_init(&ts, buf, LWS_TOKENIZE_F_DOT_NONTERM /* server.com */| LWS_TOKENIZE_F_NO_FLOATS /* 1.server.com */| LWS_TOKENIZE_F_MINUS_NONTERM /* a-b.com */); ts.len = lws_hdr_copy(wsi, buf, sizeof(buf) - 1, WSI_TOKEN_HOST); if (ts.len <= 0) { lwsl_info("%s: missing or oversize host header\n", __func__); return 1; } if (lws_tokenize(&ts) != LWS_TOKZE_TOKEN) goto bad_format; if (strncmp(ts.token, wsi->vhost->name, ts.token_len)) { buf[(ts.token - buf) + ts.token_len] = '\0'; lwsl_info("%s: '%s' in host hdr but vhost name %s\n", __func__, ts.token, wsi->vhost->name); return 1; } e = lws_tokenize(&ts); if (e == LWS_TOKZE_DELIMITER && ts.token[0] == ':') { if (lws_tokenize(&ts) != LWS_TOKZE_INTEGER) goto bad_format; else port = atoi(ts.token); } else if (e != LWS_TOKZE_ENDED) goto bad_format; if (wsi->vhost->listen_port != port) { lwsl_info("%s: host port %d mismatches vhost port %d\n", __func__, port, wsi->vhost->listen_port); return 1; } lwsl_debug("%s: host header OK\n", __func__); return 0; bad_format: lwsl_info("%s: bad host header format\n", __func__); return 1; } #if !defined(LWS_NO_SERVER) int lws_http_to_fallback(struct lws *wsi, unsigned char *obuf, size_t olen) { const struct lws_role_ops *role = &role_ops_raw_skt; const struct lws_protocols *p1, *protocol = &wsi->vhost->protocols[wsi->vhost->raw_protocol_index]; char ipbuf[64]; int n; if (wsi->vhost->listen_accept_role && lws_role_by_name(wsi->vhost->listen_accept_role)) role = lws_role_by_name(wsi->vhost->listen_accept_role); if (wsi->vhost->listen_accept_protocol) { p1 = lws_vhost_name_to_protocol(wsi->vhost, wsi->vhost->listen_accept_protocol); if (p1) protocol = p1; } lws_bind_protocol(wsi, protocol, __func__); lws_role_transition(wsi, LWSIFR_SERVER, LRS_ESTABLISHED, role); lws_header_table_detach(wsi, 0); lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); n = LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED; if (wsi->role_ops->adoption_cb[lwsi_role_server(wsi)]) n = wsi->role_ops->adoption_cb[lwsi_role_server(wsi)]; ipbuf[0] = '\0'; #if !defined(LWS_PLAT_OPTEE) lws_get_peer_simple(wsi, ipbuf, sizeof(ipbuf)); #endif lwsl_notice("%s: vh %s, peer: %s, role %s, " "protocol %s, cb %d, ah %p\n", __func__, wsi->vhost->name, ipbuf, role->name, protocol->name, n, wsi->http.ah); if ((wsi->protocol->callback)(wsi, n, wsi->user_space, NULL, 0)) return 1; n = LWS_CALLBACK_RAW_RX; if (wsi->role_ops->rx_cb[lwsi_role_server(wsi)]) n = wsi->role_ops->rx_cb[lwsi_role_server(wsi)]; if (wsi->protocol->callback(wsi, n, wsi->user_space, obuf, olen)) return 1; return 0; } int lws_handshake_server(struct lws *wsi, unsigned char **buf, size_t len) { struct lws_context *context = lws_get_context(wsi); #if defined(LWS_WITH_HTTP2) struct allocated_headers *ah; #endif unsigned char *obuf = *buf; #if defined(LWS_WITH_HTTP2) char tbuf[128], *p; #endif size_t olen = len; int n = 0, m, i; if (len >= 10000000) { lwsl_err("%s: assert: len %ld\n", __func__, (long)len); assert(0); } if (!wsi->http.ah) { lwsl_err("%s: assert: NULL ah\n", __func__); assert(0); } while (len) { if (!lwsi_role_server(wsi) || !lwsi_role_http(wsi)) { lwsl_err("%s: bad wsi role 0x%x\n", __func__, lwsi_role(wsi)); goto bail_nuke_ah; } i = (int)len; m = lws_parse(wsi, *buf, &i); lwsl_info("%s: parsed count %d\n", __func__, (int)len - i); (*buf) += (int)len - i; len = i; if (m == LPR_DO_FALLBACK) { /* * http parser went off the rails and * LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ * ACCEPT_CONFIG is set on this vhost. * * We are transitioning from http with an AH, to * a backup role (raw-skt, by default). Drop * the ah, bind to the role with mode as * ESTABLISHED. */ raw_transition: if (lws_http_to_fallback(wsi, obuf, olen)) { lwsl_info("%s: fallback -> close\n", __func__); goto bail_nuke_ah; } (*buf) = obuf + olen; return 0; } if (m) { lwsl_info("lws_parse failed\n"); goto bail_nuke_ah; } if (wsi->http.ah->parser_state != WSI_PARSING_COMPLETE) continue; lwsl_parser("%s: lws_parse sees parsing complete\n", __func__); /* select vhost */ if (wsi->vhost->listen_port && lws_hdr_total_length(wsi, WSI_TOKEN_HOST)) { struct lws_vhost *vhost = lws_select_vhost( context, wsi->vhost->listen_port, lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST)); if (vhost) lws_vhost_bind_wsi(vhost, wsi); } else lwsl_info("no host\n"); if (!lwsi_role_h2(wsi) || !lwsi_role_server(wsi)) { wsi->vhost->conn_stats.h1_trans++; if (!wsi->conn_stat_done) { wsi->vhost->conn_stats.h1_conn++; wsi->conn_stat_done = 1; } } /* check for unwelcome guests */ if (wsi->context->reject_service_keywords) { const struct lws_protocol_vhost_options *rej = wsi->context->reject_service_keywords; char ua[384], *msg = NULL; if (lws_hdr_copy(wsi, ua, sizeof(ua) - 1, WSI_TOKEN_HTTP_USER_AGENT) > 0) { #ifdef LWS_WITH_ACCESS_LOG char *uri_ptr = NULL; int meth, uri_len; #endif ua[sizeof(ua) - 1] = '\0'; while (rej) { if (!strstr(ua, rej->name)) { rej = rej->next; continue; } msg = strchr(rej->value, ' '); if (msg) msg++; lws_return_http_status(wsi, atoi(rej->value), msg); #ifdef LWS_WITH_ACCESS_LOG meth = lws_http_get_uri_and_method(wsi, &uri_ptr, &uri_len); if (meth >= 0) lws_prepare_access_log_info(wsi, uri_ptr, uri_len, meth); /* wsi close will do the log */ #endif wsi->vhost->conn_stats.rejected++; /* * We don't want anything from * this rejected guy. Follow * the close flow, not the * transaction complete flow. */ goto bail_nuke_ah; } } } if (lws_hdr_total_length(wsi, WSI_TOKEN_CONNECT)) { lwsl_info("Changing to RAW mode\n"); m = 0; goto raw_transition; } lwsi_set_state(wsi, LRS_PRE_WS_SERVING_ACCEPT); lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); if (lws_hdr_total_length(wsi, WSI_TOKEN_UPGRADE)) { const char *up = lws_hdr_simple_ptr(wsi, WSI_TOKEN_UPGRADE); if (strcasecmp(up, "websocket") && strcasecmp(up, "h2c")) { lwsl_info("Unknown upgrade '%s'\n", up); if (lws_return_http_status(wsi, HTTP_STATUS_FORBIDDEN, NULL) || lws_http_transaction_completed(wsi)) goto bail_nuke_ah; } n = user_callback_handle_rxflow(wsi->protocol->callback, wsi, LWS_CALLBACK_HTTP_CONFIRM_UPGRADE, wsi->user_space, (char *)up, 0); /* just hang up? */ if (n < 0) goto bail_nuke_ah; /* callback returned headers already, do t_c? */ if (n > 0) { if (lws_http_transaction_completed(wsi)) goto bail_nuke_ah; /* continue on */ return 0; } /* callback said 0, it was allowed */ if (wsi->vhost->options & LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK && lws_confirm_host_header(wsi)) goto bail_nuke_ah; if (!strcasecmp(up, "websocket")) { #if defined(LWS_ROLE_WS) wsi->vhost->conn_stats.ws_upg++; lwsl_info("Upgrade to ws\n"); goto upgrade_ws; #endif } #if defined(LWS_WITH_HTTP2) if (!strcasecmp(up, "h2c")) { wsi->vhost->conn_stats.h2_upg++; lwsl_info("Upgrade to h2c\n"); goto upgrade_h2c; } #endif } /* no upgrade ack... he remained as HTTP */ lwsl_info("%s: %p: No upgrade\n", __func__, wsi); lwsi_set_state(wsi, LRS_ESTABLISHED); wsi->http.fop_fd = NULL; #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) lws_http_compression_validate(wsi); #endif lwsl_debug("%s: wsi %p: ah %p\n", __func__, (void *)wsi, (void *)wsi->http.ah); n = lws_http_action(wsi); return n; #if defined(LWS_WITH_HTTP2) upgrade_h2c: if (!lws_hdr_total_length(wsi, WSI_TOKEN_HTTP2_SETTINGS)) { lwsl_info("missing http2_settings\n"); goto bail_nuke_ah; } lwsl_info("h2c upgrade...\n"); p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP2_SETTINGS); /* convert the peer's HTTP-Settings */ n = lws_b64_decode_string(p, tbuf, sizeof(tbuf)); if (n < 0) { lwsl_parser("HTTP2_SETTINGS too long\n"); return 1; } wsi->upgraded_to_http2 = 1; /* adopt the header info */ ah = wsi->http.ah; lws_role_transition(wsi, LWSIFR_SERVER, LRS_H2_AWAIT_PREFACE, &role_ops_h2); /* http2 union member has http union struct at start */ wsi->http.ah = ah; if (!wsi->h2.h2n) { wsi->h2.h2n = lws_zalloc(sizeof(*wsi->h2.h2n), "h2n"); if (!wsi->h2.h2n) return 1; } lws_h2_init(wsi); /* HTTP2 union */ lws_h2_settings(wsi, &wsi->h2.h2n->set, (unsigned char *)tbuf, n); lws_hpack_dynamic_size(wsi, wsi->h2.h2n->set.s[ H2SET_HEADER_TABLE_SIZE]); strcpy(tbuf, "HTTP/1.1 101 Switching Protocols\x0d\x0a" "Connection: Upgrade\x0d\x0a" "Upgrade: h2c\x0d\x0a\x0d\x0a"); m = (int)strlen(tbuf); n = lws_issue_raw(wsi, (unsigned char *)tbuf, m); if (n != m) { lwsl_debug("http2 switch: ERROR writing to socket\n"); return 1; } return 0; #endif #if defined(LWS_ROLE_WS) upgrade_ws: if (lws_process_ws_upgrade(wsi)) goto bail_nuke_ah; return 0; #endif } /* while all chars are handled */ return 0; bail_nuke_ah: /* drop the header info */ lws_header_table_detach(wsi, 1); return 1; } #endif LWS_VISIBLE int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed(struct lws *wsi) { int n = NO_PENDING_TIMEOUT; if (lws_has_buffered_out(wsi) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) || wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more #endif ) { /* * ...so he tried to send something large as the http reply, * it went as a partial, but he immediately said the * transaction was completed. * * Defer the transaction completed until the last part of the * partial is sent. */ lwsl_debug("%s: %p: deferring due to partial\n", __func__, wsi); wsi->http.deferred_transaction_completed = 1; lws_callback_on_writable(wsi); return 0; } /* * Are we finishing the transaction before we have consumed any body? * * For h1 this would kill keepalive pipelining, and for h2, considering * it can extend over multiple DATA frames, it would kill the network * connection. */ if (wsi->http.rx_content_length && wsi->http.rx_content_remain) { /* * are we already in LRS_DISCARD_BODY and didn't clear the * remaining before trying to complete the transaction again? */ if (lwsi_state(wsi) == LRS_DISCARD_BODY) return -1; /* * let's defer transaction completed processing until we * discarded the remaining body */ lwsi_set_state(wsi, LRS_DISCARD_BODY); return 0; } lwsl_info("%s: wsi %p\n", __func__, wsi); #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) lws_http_compression_destroy(wsi); #endif lws_access_log(wsi); if (!wsi->hdr_parsing_completed) { char peer[64]; #if !defined(LWS_PLAT_OPTEE) lws_get_peer_simple(wsi, peer, sizeof(peer) - 1); #else peer[0] = '\0'; #endif peer[sizeof(peer) - 1] = '\0'; lwsl_notice("%s: (from %s) ignoring, ah parsing incomplete\n", __func__, peer); return 0; } /* if we can't go back to accept new headers, drop the connection */ if (wsi->http2_substream) return 1; if (wsi->seen_zero_length_recv) return 1; if (wsi->http.conn_type != HTTP_CONNECTION_KEEP_ALIVE) { lwsl_info("%s: %p: close connection\n", __func__, wsi); return 1; } if (lws_bind_protocol(wsi, &wsi->vhost->protocols[0], __func__)) return 1; /* * otherwise set ourselves up ready to go again, but because we have no * idea about the wsi writability, we make put it in a holding state * until we can verify POLLOUT. The part of this that confirms POLLOUT * with no partials is in lws_server_socket_service() below. */ lwsl_debug("%s: %p: setting DEF_ACT from 0x%x\n", __func__, wsi, wsi->wsistate); lwsi_set_state(wsi, LRS_DEFERRING_ACTION); wsi->http.tx_content_length = 0; wsi->http.tx_content_remain = 0; wsi->hdr_parsing_completed = 0; wsi->sending_chunked = 0; #ifdef LWS_WITH_ACCESS_LOG wsi->http.access_log.sent = 0; #endif #if defined(LWS_WITH_FILE_OPS) && (defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2)) if (lwsi_role_http(wsi) && lwsi_role_server(wsi) && wsi->http.fop_fd != NULL) lws_vfs_file_close(&wsi->http.fop_fd); #endif if (wsi->vhost->keepalive_timeout) n = PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE; lws_set_timeout(wsi, n, wsi->vhost->keepalive_timeout); /* * We already know we are on http1.1 / keepalive and the next thing * coming will be another header set. * * If there is no pending rx and we still have the ah, drop it and * reacquire a new ah when the new headers start to arrive. (Otherwise * we needlessly hog an ah indefinitely.) * * However if there is pending rx and we know from the keepalive state * that is already at least the start of another header set, simply * reset the existing header table and keep it. */ if (wsi->http.ah) { // lws_buflist_describe(&wsi->buflist, wsi); if (!lws_buflist_next_segment_len(&wsi->buflist, NULL)) { lwsl_debug("%s: %p: nothing in buflist, detaching ah\n", __func__, wsi); lws_header_table_detach(wsi, 1); #ifdef LWS_WITH_TLS /* * additionally... if we are hogging an SSL instance * with no pending pipelined headers (or ah now), and * SSL is scarce, drop this connection without waiting */ if (wsi->vhost->tls.use_ssl && wsi->context->simultaneous_ssl_restriction && wsi->context->simultaneous_ssl == wsi->context->simultaneous_ssl_restriction) { lwsl_info("%s: simultaneous_ssl_restriction\n", __func__); return 1; } #endif } else { lwsl_info("%s: %p: resetting/keeping ah as pipeline\n", __func__, wsi); lws_header_table_reset(wsi, 0); /* * If we kept the ah, we should restrict the amount * of time we are willing to keep it. Otherwise it * will be bound the whole time the connection remains * open. */ lws_set_timeout(wsi, PENDING_TIMEOUT_HOLDING_AH, wsi->vhost->keepalive_timeout); } /* If we're (re)starting on headers, need other implied init */ if (wsi->http.ah) wsi->http.ah->ues = URIES_IDLE; //lwsi_set_state(wsi, LRS_ESTABLISHED); // !!! } else if (lws_buflist_next_segment_len(&wsi->buflist, NULL)) if (lws_header_table_attach(wsi, 0)) lwsl_debug("acquired ah\n"); lwsl_debug("%s: %p: keep-alive await new transaction (state 0x%x)\n", __func__, wsi, wsi->wsistate); lws_callback_on_writable(wsi); return 0; } #if !defined(LWS_AMAZON_RTOS) LWS_VISIBLE int lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type, const char *other_headers, int other_headers_len) { struct lws_context *context = lws_get_context(wsi); struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; unsigned char *response = pt->serv_buf + LWS_PRE; #if defined(LWS_WITH_RANGES) struct lws_range_parsing *rp = &wsi->http.range; #endif int ret = 0, cclen = 8, n = HTTP_STATUS_OK; char cache_control[50], *cc = "no-store"; lws_fop_flags_t fflags = LWS_O_RDONLY; const struct lws_plat_file_ops *fops; lws_filepos_t total_content_length; unsigned char *p = response; unsigned char *end = p + context->pt_serv_buf_size - LWS_PRE; const char *vpath; #if defined(LWS_WITH_RANGES) int ranges; #endif if (wsi->handling_404) n = HTTP_STATUS_NOT_FOUND; /* * We either call the platform fops .open with first arg platform fops, * or we call fops_zip .open with first arg platform fops, and fops_zip * open will decide whether to switch to fops_zip or stay with fops_def. * * If wsi->http.fop_fd is already set, the caller already opened it */ if (!wsi->http.fop_fd) { fops = lws_vfs_select_fops(wsi->context->fops, file, &vpath); fflags |= lws_vfs_prepare_flags(wsi); wsi->http.fop_fd = fops->LWS_FOP_OPEN(wsi->context->fops, file, vpath, &fflags); if (!wsi->http.fop_fd) { lwsl_info("%s: Unable to open: '%s': errno %d\n", __func__, file, errno); if (lws_return_http_status(wsi, HTTP_STATUS_NOT_FOUND, NULL)) return -1; return !wsi->http2_substream; } } /* * Caution... wsi->http.fop_fd is live from here */ wsi->http.filelen = lws_vfs_get_length(wsi->http.fop_fd); total_content_length = wsi->http.filelen; #if defined(LWS_WITH_RANGES) ranges = lws_ranges_init(wsi, rp, wsi->http.filelen); lwsl_debug("Range count %d\n", ranges); /* * no ranges -> 200; * 1 range -> 206 + Content-Type: normal; Content-Range; * more -> 206 + Content-Type: multipart/byteranges * Repeat the true Content-Type in each multipart header * along with Content-Range */ if (ranges < 0) { /* it means he expressed a range in Range:, but it was illegal */ lws_return_http_status(wsi, HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE, NULL); if (lws_http_transaction_completed(wsi)) goto bail; /* <0 means just hang up */ lws_vfs_file_close(&wsi->http.fop_fd); return 0; /* == 0 means we did the transaction complete */ } if (ranges) n = HTTP_STATUS_PARTIAL_CONTENT; #endif if (lws_add_http_header_status(wsi, n, &p, end)) goto bail; if ((wsi->http.fop_fd->flags & (LWS_FOP_FLAG_COMPR_ACCEPTABLE_GZIP | LWS_FOP_FLAG_COMPR_IS_GZIP)) == (LWS_FOP_FLAG_COMPR_ACCEPTABLE_GZIP | LWS_FOP_FLAG_COMPR_IS_GZIP)) { if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_ENCODING, (unsigned char *)"gzip", 4, &p, end)) goto bail; lwsl_info("file is being provided in gzip\n"); } #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) else { /* * if we know its very compressible, and we can use * compression, then use the most preferred compression * method that the client said he will accept */ if (!wsi->interpreting && ( !strncmp(content_type, "text/", 5) || !strcmp(content_type, "application/javascript") || !strcmp(content_type, "image/svg+xml"))) lws_http_compression_apply(wsi, NULL, &p, end, 0); } #endif if ( #if defined(LWS_WITH_RANGES) ranges < 2 && #endif content_type && content_type[0]) if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)content_type, (int)strlen(content_type), &p, end)) goto bail; #if defined(LWS_WITH_RANGES) if (ranges >= 2) { /* multipart byteranges */ lws_strncpy(wsi->http.multipart_content_type, content_type, sizeof(wsi->http.multipart_content_type)); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *) "multipart/byteranges; " "boundary=_lws", 20, &p, end)) goto bail; /* * our overall content length has to include * * - (n + 1) x "_lws\r\n" * - n x Content-Type: xxx/xxx\r\n * - n x Content-Range: bytes xxx-yyy/zzz\r\n * - n x /r/n * - the actual payloads (aggregated in rp->agg) * * Precompute it for the main response header */ total_content_length = (lws_filepos_t)rp->agg + 6 /* final _lws\r\n */; lws_ranges_reset(rp); while (lws_ranges_next(rp)) { n = lws_snprintf(cache_control, sizeof(cache_control), "bytes %llu-%llu/%llu", rp->start, rp->end, rp->extent); total_content_length += 6 /* header _lws\r\n */ + /* Content-Type: xxx/xxx\r\n */ 14 + strlen(content_type) + 2 + /* Content-Range: xxxx\r\n */ 15 + n + 2 + 2; /* /r/n */ } lws_ranges_reset(rp); lws_ranges_next(rp); } if (ranges == 1) { total_content_length = (lws_filepos_t)rp->agg; n = lws_snprintf(cache_control, sizeof(cache_control), "bytes %llu-%llu/%llu", rp->start, rp->end, rp->extent); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_RANGE, (unsigned char *)cache_control, n, &p, end)) goto bail; } wsi->http.range.inside = 0; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_ACCEPT_RANGES, (unsigned char *)"bytes", 5, &p, end)) goto bail; #endif if (!wsi->http2_substream) { /* for http/1.1 ... */ if (!wsi->sending_chunked #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) && !wsi->http.lcs #endif ) { /* ... if not already using chunked and not using an * http compression translation, then send the naive * content length */ if (lws_add_http_header_content_length(wsi, total_content_length, &p, end)) goto bail; } else { #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (wsi->http.lcs) { /* ...otherwise, for http 1 it must go chunked. * For the compression case, the reason is we * compress on the fly and do not know the * compressed content-length until it has all * been sent. Http/1.1 pipelining must be able * to know where the transaction boundaries are * ... so chunking... */ if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_TRANSFER_ENCODING, (unsigned char *)"chunked", 7, &p, end)) goto bail; /* * ...this is fun, isn't it :-) For h1 that is * using an http compression translation, the * compressor must chunk its output privately. * * h2 doesn't need (or support) any of this * crap. */ lwsl_debug("setting chunking\n"); wsi->http.comp_ctx.chunking = 1; } #endif } } if (wsi->cache_secs && wsi->cache_reuse) { if (!wsi->cache_revalidate) { cc = cache_control; cclen = sprintf(cache_control, "%s, max-age=%u", intermediates[wsi->cache_intermediaries], wsi->cache_secs); } else { cc = cache_control; cclen = sprintf(cache_control, "must-revalidate, %s, max-age=%u", intermediates[wsi->cache_intermediaries], wsi->cache_secs); } } /* Only add cache control if its not specified by any other_headers. */ if (!other_headers || (!strstr(other_headers, "cache-control") && !strstr(other_headers, "Cache-Control"))) { if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CACHE_CONTROL, (unsigned char *)cc, cclen, &p, end)) goto bail; } if (other_headers) { if ((end - p) < other_headers_len) goto bail; memcpy(p, other_headers, other_headers_len); p += other_headers_len; } if (lws_finalize_http_header(wsi, &p, end)) goto bail; ret = lws_write(wsi, response, p - response, LWS_WRITE_HTTP_HEADERS); if (ret != (p - response)) { lwsl_err("_write returned %d from %ld\n", ret, (long)(p - response)); goto bail; } wsi->http.filepos = 0; lwsi_set_state(wsi, LRS_ISSUING_FILE); if (lws_hdr_total_length(wsi, WSI_TOKEN_HEAD_URI)) { /* we do not emit the body */ lws_vfs_file_close(&wsi->http.fop_fd); if (lws_http_transaction_completed(wsi)) goto bail; return 0; } lws_callback_on_writable(wsi); return 0; bail: lws_vfs_file_close(&wsi->http.fop_fd); return -1; } #endif LWS_VISIBLE int lws_serve_http_file_fragment(struct lws *wsi) { struct lws_context *context = wsi->context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws_process_html_args args; lws_filepos_t amount, poss; unsigned char *p, *pstart; #if defined(LWS_WITH_RANGES) unsigned char finished = 0; #endif int n, m; lwsl_debug("wsi->http2_substream %d\n", wsi->http2_substream); do { /* priority 1: buffered output */ if (lws_has_buffered_out(wsi)) { if (lws_issue_raw(wsi, NULL, 0) < 0) { lwsl_info("%s: closing\n", __func__); goto file_had_it; } break; } /* priority 2: buffered pre-compression-transform */ #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more) { enum lws_write_protocol wp = LWS_WRITE_HTTP; lwsl_info("%s: completing comp partial (buflist %p, may %d)\n", __func__, wsi->http.comp_ctx.buflist_comp, wsi->http.comp_ctx.may_have_more); if (wsi->role_ops->write_role_protocol(wsi, NULL, 0, &wp) < 0) { lwsl_info("%s signalling to close\n", __func__); goto file_had_it; } lws_callback_on_writable(wsi); break; } #endif if (wsi->http.filepos == wsi->http.filelen) goto all_sent; n = 0; pstart = pt->serv_buf + LWS_H2_FRAME_HEADER_LENGTH; p = pstart; #if defined(LWS_WITH_RANGES) if (wsi->http.range.count_ranges && !wsi->http.range.inside) { lwsl_notice("%s: doing range start %llu\n", __func__, wsi->http.range.start); if ((long long)lws_vfs_file_seek_cur(wsi->http.fop_fd, wsi->http.range.start - wsi->http.filepos) < 0) goto file_had_it; wsi->http.filepos = wsi->http.range.start; if (wsi->http.range.count_ranges > 1) { n = lws_snprintf((char *)p, context->pt_serv_buf_size - LWS_H2_FRAME_HEADER_LENGTH, "_lws\x0d\x0a" "Content-Type: %s\x0d\x0a" "Content-Range: bytes " "%llu-%llu/%llu\x0d\x0a" "\x0d\x0a", wsi->http.multipart_content_type, wsi->http.range.start, wsi->http.range.end, wsi->http.range.extent); p += n; } wsi->http.range.budget = wsi->http.range.end - wsi->http.range.start + 1; wsi->http.range.inside = 1; } #endif poss = context->pt_serv_buf_size - n - LWS_H2_FRAME_HEADER_LENGTH; if (wsi->http.tx_content_length) if (poss > wsi->http.tx_content_remain) poss = wsi->http.tx_content_remain; /* * if there is a hint about how much we will do well to send at * one time, restrict ourselves to only trying to send that. */ if (wsi->protocol->tx_packet_size && poss > wsi->protocol->tx_packet_size) poss = wsi->protocol->tx_packet_size; if (wsi->role_ops->tx_credit) { lws_filepos_t txc = wsi->role_ops->tx_credit(wsi); if (!txc) { lwsl_info("%s: came here with no tx credit\n", __func__); return 0; } if (txc < poss) poss = txc; /* * consumption of the actual payload amount sent will be * handled when the role data frame is sent */ } #if defined(LWS_WITH_RANGES) if (wsi->http.range.count_ranges) { if (wsi->http.range.count_ranges > 1) poss -= 7; /* allow for final boundary */ if (poss > wsi->http.range.budget) poss = wsi->http.range.budget; } #endif if (wsi->sending_chunked) { /* we need to drop the chunk size in here */ p += 10; /* allow for the chunk to grow by 128 in translation */ poss -= 10 + 128; } if (lws_vfs_file_read(wsi->http.fop_fd, &amount, p, poss) < 0) goto file_had_it; /* caller will close */ if (wsi->sending_chunked) n = (int)amount; else n = lws_ptr_diff(p, pstart) + (int)amount; lwsl_debug("%s: sending %d\n", __func__, n); if (n) { lws_set_timeout(wsi, PENDING_TIMEOUT_HTTP_CONTENT, context->timeout_secs); if (wsi->interpreting) { args.p = (char *)p; args.len = n; args.max_len = (unsigned int)poss + 128; args.final = wsi->http.filepos + n == wsi->http.filelen; args.chunked = wsi->sending_chunked; if (user_callback_handle_rxflow( wsi->vhost->protocols[ (int)wsi->protocol_interpret_idx].callback, wsi, LWS_CALLBACK_PROCESS_HTML, wsi->user_space, &args, 0) < 0) goto file_had_it; n = args.len; p = (unsigned char *)args.p; } else p = pstart; #if defined(LWS_WITH_RANGES) if (wsi->http.range.send_ctr + 1 == wsi->http.range.count_ranges && // last range wsi->http.range.count_ranges > 1 && // was 2+ ranges (ie, multipart) wsi->http.range.budget - amount == 0) {// final part n += lws_snprintf((char *)pstart + n, 6, "_lws\x0d\x0a"); // append trailing boundary lwsl_debug("added trailing boundary\n"); } #endif m = lws_write(wsi, p, n, wsi->http.filepos + amount == wsi->http.filelen ? LWS_WRITE_HTTP_FINAL : LWS_WRITE_HTTP); if (m < 0) goto file_had_it; wsi->http.filepos += amount; #if defined(LWS_WITH_RANGES) if (wsi->http.range.count_ranges >= 1) { wsi->http.range.budget -= amount; if (wsi->http.range.budget == 0) { lwsl_notice("range budget exhausted\n"); wsi->http.range.inside = 0; wsi->http.range.send_ctr++; if (lws_ranges_next(&wsi->http.range) < 1) { finished = 1; goto all_sent; } } } #endif if (m != n) { /* adjust for what was not sent */ if (lws_vfs_file_seek_cur(wsi->http.fop_fd, m - n) == (lws_fileofs_t)-1) goto file_had_it; } } all_sent: if ((!lws_has_buffered_out(wsi) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) && !wsi->http.comp_ctx.buflist_comp && !wsi->http.comp_ctx.may_have_more #endif ) && (wsi->http.filepos >= wsi->http.filelen #if defined(LWS_WITH_RANGES) || finished) #else ) #endif ) { lwsi_set_state(wsi, LRS_ESTABLISHED); /* we might be in keepalive, so close it off here */ lws_vfs_file_close(&wsi->http.fop_fd); lwsl_debug("file completed\n"); if (wsi->protocol->callback && user_callback_handle_rxflow(wsi->protocol->callback, wsi, LWS_CALLBACK_HTTP_FILE_COMPLETION, wsi->user_space, NULL, 0) < 0) { /* * For http/1.x, the choices from * transaction_completed are either * 0 to use the connection for pipelined * or nonzero to hang it up. * * However for http/2. while we are * still interested in hanging up the * nwsi if there was a network-level * fatal error, simply completing the * transaction is a matter of the stream * state, not the root connection at the * network level */ if (wsi->http2_substream) return 1; else return -1; } return 1; /* >0 indicates completed */ } /* * while(1) here causes us to spam the whole file contents into * a hugely bloated output buffer if it ever can't send the * whole chunk... */ } while (!lws_send_pipe_choked(wsi)); lws_callback_on_writable(wsi); return 0; /* indicates further processing must be done */ file_had_it: lws_vfs_file_close(&wsi->http.fop_fd); return -1; } #ifndef LWS_NO_SERVER LWS_VISIBLE void lws_server_get_canonical_hostname(struct lws_context *context, const struct lws_context_creation_info *info) { if (lws_check_opt(info->options, LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME)) return; #if !defined(LWS_WITH_ESP32) /* find canonical hostname */ gethostname((char *)context->canonical_hostname, sizeof(context->canonical_hostname) - 1); lwsl_info(" canonical_hostname = %s\n", context->canonical_hostname); #else (void)context; #endif } #endif LWS_VISIBLE LWS_EXTERN int lws_chunked_html_process(struct lws_process_html_args *args, struct lws_process_html_state *s) { char *sp, buffer[32]; const char *pc; int old_len, n; /* do replacements */ sp = args->p; old_len = args->len; args->len = 0; s->start = sp; while (sp < args->p + old_len) { if (args->len + 7 >= args->max_len) { lwsl_err("Used up interpret padding\n"); return -1; } if ((!s->pos && *sp == '$') || s->pos) { int hits = 0, hit = 0; if (!s->pos) s->start = sp; s->swallow[s->pos++] = *sp; if (s->pos == sizeof(s->swallow) - 1) goto skip; for (n = 0; n < s->count_vars; n++) if (!strncmp(s->swallow, s->vars[n], s->pos)) { hits++; hit = n; } if (!hits) { skip: s->swallow[s->pos] = '\0'; memcpy(s->start, s->swallow, s->pos); args->len++; s->pos = 0; sp = s->start + 1; continue; } if (hits == 1 && s->pos == (int)strlen(s->vars[hit])) { pc = s->replace(s->data, hit); if (!pc) pc = "NULL"; n = (int)strlen(pc); s->swallow[s->pos] = '\0'; if (n != s->pos) { memmove(s->start + n, s->start + s->pos, old_len - (sp - args->p) - 1); old_len += (n - s->pos) + 1; } memcpy(s->start, pc, n); args->len++; sp = s->start + 1; s->pos = 0; } sp++; continue; } args->len++; sp++; } if (args->chunked) { /* no space left for final chunk trailer */ if (args->final && args->len + 7 >= args->max_len) return -1; n = sprintf(buffer, "%X\x0d\x0a", args->len); args->p -= n; memcpy(args->p, buffer, n); args->len += n; if (args->final) { sp = args->p + args->len; *sp++ = '\x0d'; *sp++ = '\x0a'; *sp++ = '0'; *sp++ = '\x0d'; *sp++ = '\x0a'; *sp++ = '\x0d'; *sp++ = '\x0a'; args->len += 7; } else { sp = args->p + args->len; *sp++ = '\x0d'; *sp++ = '\x0a'; args->len += 2; } } return 0; } libwebsockets-3.2.1/lib/roles/listen/000077500000000000000000000000001357643561300175625ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/listen/ops-listen.c000066400000000000000000000137011357643561300220250ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include static int rops_handle_POLLIN_listen(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { struct lws_context *context = wsi->context; lws_sockfd_type accept_fd = LWS_SOCK_INVALID; lws_sock_file_fd_type fd; struct sockaddr_storage cli_addr; socklen_t clilen; /* if our vhost is going down, ignore it */ if (wsi->vhost->being_destroyed) return LWS_HPI_RET_HANDLED; /* pollin means a client has connected to us then * * pollout is a hack on esp32 for background accepts signalling * they completed */ do { struct lws *cwsi; int opts = LWS_ADOPT_SOCKET | LWS_ADOPT_ALLOW_SSL; if (!(pollfd->revents & (LWS_POLLIN | LWS_POLLOUT)) || !(pollfd->events & LWS_POLLIN)) break; #if defined(LWS_WITH_TLS) /* * can we really accept it, with regards to SSL limit? * another vhost may also have had POLLIN on his * listener this round and used it up already */ if (wsi->vhost->tls.use_ssl && context->simultaneous_ssl_restriction && context->simultaneous_ssl == context->simultaneous_ssl_restriction) /* * no... ignore it, he won't come again until * we are below the simultaneous_ssl_restriction * limit and POLLIN is enabled on him again */ break; #endif /* listen socket got an unencrypted connection... */ clilen = sizeof(cli_addr); lws_latency_pre(context, wsi); /* * We cannot identify the peer who is in the listen * socket connect queue before we accept it; even if * we could, not accepting it due to PEER_LIMITS would * block the connect queue for other legit peers. */ accept_fd = accept((int)pollfd->fd, (struct sockaddr *)&cli_addr, &clilen); lws_latency(context, wsi, "listener accept", (int)accept_fd, accept_fd != LWS_SOCK_INVALID); if (accept_fd == LWS_SOCK_INVALID) { if (LWS_ERRNO == LWS_EAGAIN || LWS_ERRNO == LWS_EWOULDBLOCK) { break; } lwsl_err("accept: %s\n", strerror(LWS_ERRNO)); return LWS_HPI_RET_HANDLED; } if (context->being_destroyed) { compatible_close(accept_fd); return LWS_HPI_RET_PLEASE_CLOSE_ME; } lws_plat_set_socket_options(wsi->vhost, accept_fd, 0); #if defined(LWS_WITH_IPV6) lwsl_debug("accepted new conn port %u on fd=%d\n", ((cli_addr.ss_family == AF_INET6) ? ntohs(((struct sockaddr_in6 *) &cli_addr)->sin6_port) : ntohs(((struct sockaddr_in *) &cli_addr)->sin_port)), accept_fd); #else { struct sockaddr_in sain; memcpy(&sain, &cli_addr, sizeof(sain)); lwsl_debug("accepted new conn port %u on fd=%d\n", ntohs(sain.sin_port), accept_fd); } #endif /* * look at who we connected to and give user code a * chance to reject based on client IP. There's no * protocol selected yet so we issue this to * protocols[0] */ if ((wsi->vhost->protocols[0].callback)(wsi, LWS_CALLBACK_FILTER_NETWORK_CONNECTION, NULL, (void *)(lws_intptr_t)accept_fd, 0)) { lwsl_debug("Callback denied net connection\n"); compatible_close(accept_fd); return LWS_HPI_RET_PLEASE_CLOSE_ME; } if (!(wsi->vhost->options & LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG)) opts |= LWS_ADOPT_HTTP; #if defined(LWS_WITH_TLS) if (!wsi->vhost->tls.use_ssl) #endif opts &= ~LWS_ADOPT_ALLOW_SSL; fd.sockfd = accept_fd; cwsi = lws_adopt_descriptor_vhost(wsi->vhost, opts, fd, NULL, NULL); if (!cwsi) { lwsl_err("%s: lws_adopt_descriptor_vhost failed\n", __func__); /* already closed cleanly as necessary */ return LWS_HPI_RET_WSI_ALREADY_DIED; } /* if (lws_server_socket_service_ssl(cwsi, accept_fd)) { lws_close_free_wsi(cwsi, LWS_CLOSE_STATUS_NOSTATUS, "listen svc fail"); return LWS_HPI_RET_WSI_ALREADY_DIED; } lwsl_info("%s: new wsi %p: wsistate 0x%lx, role_ops %s\n", __func__, cwsi, (unsigned long)cwsi->wsistate, cwsi->role_ops->name); */ } while (pt->fds_count < context->fd_limit_per_thread - 1 && wsi->position_in_fds_table != LWS_NO_FDS_POS && lws_poll_listen_fd(&pt->fds[wsi->position_in_fds_table]) > 0); return LWS_HPI_RET_HANDLED; } int rops_handle_POLLOUT_listen(struct lws *wsi) { return LWS_HP_RET_USER_SERVICE; } struct lws_role_ops role_ops_listen = { /* role name */ "listen", /* alpn id */ NULL, /* check_upgrades */ NULL, /* init_context */ NULL, /* init_vhost */ NULL, /* destroy_vhost */ NULL, /* periodic_checks */ NULL, /* service_flag_pending */ NULL, /* handle_POLLIN */ rops_handle_POLLIN_listen, /* handle_POLLOUT */ rops_handle_POLLOUT_listen, /* perform_user_POLLOUT */ NULL, /* callback_on_writable */ NULL, /* tx_credit */ NULL, /* write_role_protocol */ NULL, /* encapsulation_parent */ NULL, /* alpn_negotiated */ NULL, /* close_via_role_protocol */ NULL, /* close_role */ NULL, /* close_kill_connection */ NULL, /* destroy_role */ NULL, /* adoption_bind */ NULL, /* client_bind */ NULL, /* adoption_cb clnt, srv */ { 0, 0 }, /* rx_cb clnt, srv */ { 0, 0 }, /* writeable cb clnt, srv */ { 0, 0 }, /* close cb clnt, srv */ { 0, 0 }, /* protocol_bind_cb c,s */ { 0, 0 }, /* protocol_unbind_cb c,s */ { 0, 0 }, /* file_handle */ 0, }; libwebsockets-3.2.1/lib/roles/pipe/000077500000000000000000000000001357643561300172215ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/pipe/ops-pipe.c000066400000000000000000000057271357643561300211340ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include static int rops_handle_POLLIN_pipe(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { #if !defined(WIN32) && !defined(_WIN32) char s[100]; int n; /* * discard the byte(s) that signaled us * We really don't care about the number of bytes, but coverity * thinks we should. */ n = read(wsi->desc.sockfd, s, sizeof(s)); (void)n; if (n < 0) return LWS_HPI_RET_PLEASE_CLOSE_ME; #endif #if defined(LWS_WITH_THREADPOOL) /* * threadpools that need to call for on_writable callbacks do it by * marking the task as needing one for its wsi, then cancelling service. * * Each tsi will call this to perform the actual callback_on_writable * from the correct service thread context */ lws_threadpool_tsi_context(pt->context, pt->tid); #endif /* * the poll() wait, or the event loop for libuv etc is a * process-wide resource that we interrupted. So let every * protocol that may be interested in the pipe event know that * it happened. */ if (lws_broadcast(pt, LWS_CALLBACK_EVENT_WAIT_CANCELLED, NULL, 0)) { lwsl_info("closed in event cancel\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } return LWS_HPI_RET_HANDLED; } struct lws_role_ops role_ops_pipe = { /* role name */ "pipe", /* alpn id */ NULL, /* check_upgrades */ NULL, /* init_context */ NULL, /* init_vhost */ NULL, /* destroy_vhost */ NULL, /* periodic_checks */ NULL, /* service_flag_pending */ NULL, /* handle_POLLIN */ rops_handle_POLLIN_pipe, /* handle_POLLOUT */ NULL, /* perform_user_POLLOUT */ NULL, /* callback_on_writable */ NULL, /* tx_credit */ NULL, /* write_role_protocol */ NULL, /* encapsulation_parent */ NULL, /* alpn_negotiated */ NULL, /* close_via_role_protocol */ NULL, /* close_role */ NULL, /* close_kill_connection */ NULL, /* destroy_role */ NULL, /* adoption_bind */ NULL, /* client_bind */ NULL, /* adoption_cb clnt, srv */ { 0, 0 }, /* rx_cb clnt, srv */ { 0, 0 }, /* writeable cb clnt, srv */ { 0, 0 }, /* close cb clnt, srv */ { 0, 0 }, /* protocol_bind_cb c,s */ { 0, 0 }, /* protocol_unbind_cb c,s */ { 0, 0 }, /* file_handle */ 1, }; libwebsockets-3.2.1/lib/roles/private.h000066400000000000000000000252641357643561300201200ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is included from core/private.h */ typedef uint32_t lws_wsi_state_t; /* * The wsi->role_ops pointer decides almost everything about what role the wsi * will play, h2, raw, ws, etc. * * However there are a few additional flags needed that vary, such as if the * role is a client or server side, if it has that concept. And the connection * fulfilling the role, has a separate dynamic state. * * 31 16 15 0 * [ role flags ] [ state ] * * The role flags part is generally invariant for the lifetime of the wsi, * although it can change if the connection role itself does, eg, if the * connection upgrades from H1 -> WS1 the role flags may be changed at that * point. * * The state part reflects the dynamic connection state, and the states are * reused between roles. * * None of the internal role or state representations are made available outside * of lws internals. Even for lws internals, if you add stuff here, please keep * the constants inside this header only by adding necessary helpers here and * use the helpers in the actual code. This is to ease any future refactors. * * Notice LWSIFR_ENCAP means we have a parent wsi that actually carries our * data as a stream inside a different protocol. */ #define _RS 16 #define LWSIFR_CLIENT (0x1000 << _RS) /* client side */ #define LWSIFR_SERVER (0x2000 << _RS) /* server side */ #define LWSIFR_P_ENCAP_H2 (0x0100 << _RS) /* we are encapsulated by h2 */ enum lwsi_role { LWSI_ROLE_MASK = (0xffff << _RS), LWSI_ROLE_ENCAP_MASK = (0x0f00 << _RS), }; #define lwsi_role(wsi) (wsi->wsistate & LWSI_ROLE_MASK) #if !defined (_DEBUG) #define lwsi_set_role(wsi, role) wsi->wsistate = \ (wsi->wsistate & (~LWSI_ROLE_MASK)) | role #else void lwsi_set_role(struct lws *wsi, lws_wsi_state_t role); #endif #define lwsi_role_client(wsi) (!!(wsi->wsistate & LWSIFR_CLIENT)) #define lwsi_role_server(wsi) (!!(wsi->wsistate & LWSIFR_SERVER)) #define lwsi_role_h2_ENCAPSULATION(wsi) \ ((wsi->wsistate & LWSI_ROLE_ENCAP_MASK) == LWSIFR_P_ENCAP_H2) /* Pollout wants a callback in this state */ #define LWSIFS_POCB (0x100) /* Before any protocol connection was established */ #define LWSIFS_NOT_EST (0x200) enum lwsi_state { /* Phase 1: pre-transport */ LRS_UNCONNECTED = LWSIFS_NOT_EST | 0, LRS_WAITING_CONNECT = LWSIFS_NOT_EST | 1, /* Phase 2: establishing intermediaries on top of transport */ LRS_WAITING_PROXY_REPLY = LWSIFS_NOT_EST | 2, LRS_WAITING_SSL = LWSIFS_NOT_EST | 3, LRS_WAITING_SOCKS_GREETING_REPLY = LWSIFS_NOT_EST | 4, LRS_WAITING_SOCKS_CONNECT_REPLY = LWSIFS_NOT_EST | 5, LRS_WAITING_SOCKS_AUTH_REPLY = LWSIFS_NOT_EST | 6, /* Phase 3: establishing tls tunnel */ LRS_SSL_INIT = LWSIFS_NOT_EST | 7, LRS_SSL_ACK_PENDING = LWSIFS_NOT_EST | 8, LRS_PRE_WS_SERVING_ACCEPT = LWSIFS_NOT_EST | 9, /* Phase 4: connected */ LRS_WAITING_SERVER_REPLY = LWSIFS_NOT_EST | 10, LRS_H2_AWAIT_PREFACE = LWSIFS_NOT_EST | 11, LRS_H2_AWAIT_SETTINGS = LWSIFS_NOT_EST | LWSIFS_POCB | 12, /* Phase 5: protocol logically established */ LRS_H2_CLIENT_SEND_SETTINGS = LWSIFS_POCB | 13, LRS_H2_WAITING_TO_SEND_HEADERS = LWSIFS_POCB | 14, LRS_DEFERRING_ACTION = LWSIFS_POCB | 15, LRS_IDLING = 16, LRS_H1C_ISSUE_HANDSHAKE = 17, LRS_H1C_ISSUE_HANDSHAKE2 = 18, LRS_ISSUE_HTTP_BODY = 19, LRS_ISSUING_FILE = 20, LRS_HEADERS = 21, LRS_BODY = 22, LRS_DISCARD_BODY = 31, LRS_ESTABLISHED = LWSIFS_POCB | 23, /* we are established, but we have embarked on serving a single * transaction. Other transaction input may be pending, but we will * not service it while we are busy dealing with the current * transaction. * * When we complete the current transaction, we would reset our state * back to ESTABLISHED and start to process the next transaction. */ LRS_DOING_TRANSACTION = LWSIFS_POCB | 24, /* Phase 6: finishing */ LRS_WAITING_TO_SEND_CLOSE = LWSIFS_POCB | 25, LRS_RETURNED_CLOSE = LWSIFS_POCB | 26, LRS_AWAITING_CLOSE_ACK = LWSIFS_POCB | 27, LRS_FLUSHING_BEFORE_CLOSE = LWSIFS_POCB | 28, LRS_SHUTDOWN = 29, /* Phase 7: dead */ LRS_DEAD_SOCKET = 30, LRS_MASK = 0xffff }; #define lwsi_state(wsi) ((enum lwsi_state)(wsi->wsistate & LRS_MASK)) #define lwsi_state_PRE_CLOSE(wsi) \ ((enum lwsi_state)(wsi->wsistate_pre_close & LRS_MASK)) #define lwsi_state_est(wsi) (!(wsi->wsistate & LWSIFS_NOT_EST)) #define lwsi_state_est_PRE_CLOSE(wsi) \ (!(wsi->wsistate_pre_close & LWSIFS_NOT_EST)) #define lwsi_state_can_handle_POLLOUT(wsi) (wsi->wsistate & LWSIFS_POCB) #if !defined (_DEBUG) #define lwsi_set_state(wsi, lrs) wsi->wsistate = \ (wsi->wsistate & (~LRS_MASK)) | lrs #else void lwsi_set_state(struct lws *wsi, lws_wsi_state_t lrs); #endif #define _LWS_ADOPT_FINISH (1 << 24) /* * internal role-specific ops */ struct lws_context_per_thread; struct lws_role_ops { const char *name; const char *alpn; /* * After http headers have parsed, this is the last chance for a role * to upgrade the connection to something else using the headers. * ws-over-h2 is upgraded from h2 like this. */ int (*check_upgrades)(struct lws *wsi); /* role-specific context init during context creation */ int (*init_context)(struct lws_context *context, const struct lws_context_creation_info *info); /* role-specific per-vhost init during vhost creation */ int (*init_vhost)(struct lws_vhost *vh, const struct lws_context_creation_info *info); /* role-specific per-vhost destructor during vhost destroy */ int (*destroy_vhost)(struct lws_vhost *vh); /* generic 1Hz callback for the role itself */ int (*periodic_checks)(struct lws_context *context, int tsi, time_t now); /* chance for the role to force POLLIN without network activity */ int (*service_flag_pending)(struct lws_context *context, int tsi); /* an fd using this role has POLLIN signalled */ int (*handle_POLLIN)(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd); /* an fd using the role wanted a POLLOUT callback and now has it */ int (*handle_POLLOUT)(struct lws *wsi); /* perform user pollout */ int (*perform_user_POLLOUT)(struct lws *wsi); /* do effective callback on writeable */ int (*callback_on_writable)(struct lws *wsi); /* connection-specific tx credit in bytes */ lws_fileofs_t (*tx_credit)(struct lws *wsi); /* role-specific write formatting */ int (*write_role_protocol)(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol *wp); /* get encapsulation parent */ struct lws * (*encapsulation_parent)(struct lws *wsi); /* role-specific destructor */ int (*alpn_negotiated)(struct lws *wsi, const char *alpn); /* chance for the role to handle close in the protocol */ int (*close_via_role_protocol)(struct lws *wsi, enum lws_close_status reason); /* role-specific close processing */ int (*close_role)(struct lws_context_per_thread *pt, struct lws *wsi); /* role-specific connection close processing */ int (*close_kill_connection)(struct lws *wsi, enum lws_close_status reason); /* role-specific destructor */ int (*destroy_role)(struct lws *wsi); /* role-specific socket-adopt */ int (*adoption_bind)(struct lws *wsi, int type, const char *prot); /* role-specific client-bind: * ret 1 = bound, 0 = not bound, -1 = fail out * i may be NULL, indicating client_bind is being called after * a successful bind earlier, to finalize the binding. In that * case ret 0 = OK, 1 = fail, wsi needs freeing, -1 = fail, wsi freed */ int (*client_bind)(struct lws *wsi, const struct lws_client_connect_info *i); /* * the callback reasons for adoption for client, server * (just client applies if no concept of client or server) */ uint16_t adoption_cb[2]; /* * the callback reasons for adoption for client, server * (just client applies if no concept of client or server) */ uint16_t rx_cb[2]; /* * the callback reasons for WRITEABLE for client, server * (just client applies if no concept of client or server) */ uint16_t writeable_cb[2]; /* * the callback reasons for CLOSE for client, server * (just client applies if no concept of client or server) */ uint16_t close_cb[2]; /* * the callback reasons for protocol bind for client, server * (just client applies if no concept of client or server) */ uint16_t protocol_bind_cb[2]; /* * the callback reasons for protocol unbind for client, server * (just client applies if no concept of client or server) */ uint16_t protocol_unbind_cb[2]; unsigned int file_handle:1; /* role operates on files not sockets */ }; /* core roles */ extern struct lws_role_ops role_ops_raw_skt, role_ops_raw_file, role_ops_listen, role_ops_pipe; /* bring in role private declarations */ #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) #include "roles/http/private.h" #else #define lwsi_role_http(wsi) (0) #endif #if defined(LWS_ROLE_H1) #include "roles/h1/private.h" #else #define lwsi_role_h1(wsi) (0) #endif #if defined(LWS_ROLE_H2) #include "roles/h2/private.h" #else #define lwsi_role_h2(wsi) (0) #endif #if defined(LWS_ROLE_WS) #include "roles/ws/private.h" #else #define lwsi_role_ws(wsi) (0) #endif #if defined(LWS_ROLE_CGI) #include "roles/cgi/private.h" #else #define lwsi_role_cgi(wsi) (0) #endif #if defined(LWS_ROLE_DBUS) #include "roles/dbus/private.h" #else #define lwsi_role_dbus(wsi) (0) #endif #if defined(LWS_ROLE_RAW_PROXY) #include "roles/raw-proxy/private.h" #else #define lwsi_role_raw_proxy(wsi) (0) #endif enum { LWS_HP_RET_BAIL_OK, LWS_HP_RET_BAIL_DIE, LWS_HP_RET_USER_SERVICE, LWS_HPI_RET_WSI_ALREADY_DIED, /* we closed it */ LWS_HPI_RET_HANDLED, /* no probs */ LWS_HPI_RET_PLEASE_CLOSE_ME, /* close it for us */ LWS_UPG_RET_DONE, LWS_UPG_RET_CONTINUE, LWS_UPG_RET_BAIL }; int lws_role_call_adoption_bind(struct lws *wsi, int type, const char *prot); struct lws * lws_client_connect_3(struct lws *wsi, struct lws *wsi_piggyback, ssize_t plen); libwebsockets-3.2.1/lib/roles/raw-file/000077500000000000000000000000001357643561300177725ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/raw-file/ops-raw-file.c000066400000000000000000000071631357643561300224520ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include static int rops_handle_POLLIN_raw_file(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { int n; if (pollfd->revents & LWS_POLLOUT) { n = lws_callback_as_writeable(wsi); if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_info("failed at set pollfd\n"); return LWS_HPI_RET_WSI_ALREADY_DIED; } if (n) return LWS_HPI_RET_PLEASE_CLOSE_ME; } if (pollfd->revents & LWS_POLLIN) { if (user_callback_handle_rxflow(wsi->protocol->callback, wsi, LWS_CALLBACK_RAW_RX_FILE, wsi->user_space, NULL, 0)) { lwsl_debug("raw rx callback closed it\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } } if (pollfd->revents & LWS_POLLHUP) return LWS_HPI_RET_PLEASE_CLOSE_ME; return LWS_HPI_RET_HANDLED; } //#if !defined(LWS_NO_SERVER) static int rops_adoption_bind_raw_file(struct lws *wsi, int type, const char *vh_prot_name) { /* no socket or http: it can only be a raw file */ if ((type & LWS_ADOPT_HTTP) || (type & LWS_ADOPT_SOCKET) || (type & _LWS_ADOPT_FINISH)) return 0; /* no match */ lws_role_transition(wsi, 0, LRS_ESTABLISHED, &role_ops_raw_file); if (!vh_prot_name) { if (wsi->vhost->default_protocol_index >= wsi->vhost->count_protocols) return 0; wsi->protocol = &wsi->vhost->protocols[ wsi->vhost->default_protocol_index]; } return 1; /* bound */ } //#endif struct lws_role_ops role_ops_raw_file = { /* role name */ "raw-file", /* alpn id */ NULL, /* check_upgrades */ NULL, /* init_context */ NULL, /* init_vhost */ NULL, /* destroy_vhost */ NULL, /* periodic_checks */ NULL, /* service_flag_pending */ NULL, /* handle_POLLIN */ rops_handle_POLLIN_raw_file, /* handle_POLLOUT */ NULL, /* perform_user_POLLOUT */ NULL, /* callback_on_writable */ NULL, /* tx_credit */ NULL, /* write_role_protocol */ NULL, /* encapsulation_parent */ NULL, /* alpn_negotiated */ NULL, /* close_via_role_protocol */ NULL, /* close_role */ NULL, /* close_kill_connection */ NULL, /* destroy_role */ NULL, //#if !defined(LWS_NO_SERVER) /* adoption_bind */ rops_adoption_bind_raw_file, //#else // NULL, //#endif /* client_bind */ NULL, /* adoption_cb clnt, srv */ { LWS_CALLBACK_RAW_ADOPT_FILE, LWS_CALLBACK_RAW_ADOPT_FILE }, /* rx_cb clnt, srv */ { LWS_CALLBACK_RAW_RX_FILE, LWS_CALLBACK_RAW_RX_FILE }, /* writeable cb clnt, srv */ { LWS_CALLBACK_RAW_WRITEABLE_FILE, LWS_CALLBACK_RAW_WRITEABLE_FILE}, /* close cb clnt, srv */ { LWS_CALLBACK_RAW_CLOSE_FILE, LWS_CALLBACK_RAW_CLOSE_FILE}, /* protocol_bind cb c, srv */ { LWS_CALLBACK_RAW_FILE_BIND_PROTOCOL, LWS_CALLBACK_RAW_FILE_BIND_PROTOCOL }, /* protocol_unbind cb c, srv */ { LWS_CALLBACK_RAW_FILE_DROP_PROTOCOL, LWS_CALLBACK_RAW_FILE_DROP_PROTOCOL }, /* file_handle */ 1, }; libwebsockets-3.2.1/lib/roles/raw-proxy/000077500000000000000000000000001357643561300202345ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/raw-proxy/ops-raw-proxy.c000066400000000000000000000142441357643561300231540ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include static int rops_handle_POLLIN_raw_proxy(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { struct lws_tokens ebuf; int n, buffered; /* pending truncated sends have uber priority */ if (lws_has_buffered_out(wsi)) { if (!(pollfd->revents & LWS_POLLOUT)) return LWS_HPI_RET_HANDLED; /* drain the output buflist */ if (lws_issue_raw(wsi, NULL, 0) < 0) goto fail; /* * we can't afford to allow input processing to send * something new, so spin around he event loop until * he doesn't have any partials */ return LWS_HPI_RET_HANDLED; } if ((pollfd->revents & pollfd->events & LWS_POLLIN) && /* any tunnel has to have been established... */ lwsi_state(wsi) != LRS_SSL_ACK_PENDING && !(wsi->favoured_pollin && (pollfd->revents & pollfd->events & LWS_POLLOUT))) { buffered = lws_buflist_aware_read(pt, wsi, &ebuf); switch (ebuf.len) { case 0: lwsl_info("%s: read 0 len\n", __func__); wsi->seen_zero_length_recv = 1; if (lws_change_pollfd(wsi, LWS_POLLIN, 0)) goto fail; /* * we need to go to fail here, since it's the only * chance we get to understand that the socket has * closed */ // goto try_pollout; goto fail; case LWS_SSL_CAPABLE_ERROR: goto fail; case LWS_SSL_CAPABLE_MORE_SERVICE: goto try_pollout; } n = user_callback_handle_rxflow(wsi->protocol->callback, wsi, lwsi_role_client(wsi) ? LWS_CALLBACK_RAW_PROXY_CLI_RX : LWS_CALLBACK_RAW_PROXY_SRV_RX, wsi->user_space, ebuf.token, ebuf.len); if (n < 0) { lwsl_info("LWS_CALLBACK_RAW_PROXY_*_RX fail\n"); goto fail; } if (lws_buflist_aware_consume(wsi, &ebuf, ebuf.len, buffered)) return LWS_HPI_RET_PLEASE_CLOSE_ME; } else if (wsi->favoured_pollin && (pollfd->revents & pollfd->events & LWS_POLLOUT)) /* we balanced the last favouring of pollin */ wsi->favoured_pollin = 0; try_pollout: if (!(pollfd->revents & LWS_POLLOUT)) return LWS_HPI_RET_HANDLED; if (lws_handle_POLLOUT_event(wsi, pollfd)) { lwsl_debug("POLLOUT event closed it\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } #if !defined(LWS_NO_CLIENT) if (lws_client_socket_service(wsi, pollfd, NULL)) return LWS_HPI_RET_WSI_ALREADY_DIED; #endif return LWS_HPI_RET_HANDLED; fail: lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "raw svc fail"); return LWS_HPI_RET_WSI_ALREADY_DIED; } static int rops_adoption_bind_raw_proxy(struct lws *wsi, int type, const char *vh_prot_name) { /* no http but socket... must be raw skt */ if ((type & LWS_ADOPT_HTTP) || !(type & LWS_ADOPT_SOCKET) || (!(type & LWS_ADOPT_FLAG_RAW_PROXY)) || (type & _LWS_ADOPT_FINISH)) return 0; /* no match */ if (type & LWS_ADOPT_FLAG_UDP) /* * these can be >128 bytes, so just alloc for UDP */ wsi->udp = lws_malloc(sizeof(*wsi->udp), "udp struct"); lws_role_transition(wsi, LWSIFR_SERVER, (type & LWS_ADOPT_ALLOW_SSL) ? LRS_SSL_INIT : LRS_ESTABLISHED, &role_ops_raw_proxy); if (vh_prot_name) lws_bind_protocol(wsi, wsi->protocol, __func__); else /* this is the only time he will transition */ lws_bind_protocol(wsi, &wsi->vhost->protocols[wsi->vhost->raw_protocol_index], __func__); return 1; /* bound */ } static int rops_client_bind_raw_proxy(struct lws *wsi, const struct lws_client_connect_info *i) { if (!i) { /* finalize */ if (!wsi->user_space && wsi->stash->method) if (lws_ensure_user_space(wsi)) return 1; return 0; } /* we are a fallback if nothing else matched */ // lws_role_transition(wsi, LWSIFR_CLIENT, LRS_UNCONNECTED, // &role_ops_raw_proxy); return 0; } static int rops_handle_POLLOUT_raw_proxy(struct lws *wsi) { if (lwsi_state(wsi) == LRS_ESTABLISHED) return LWS_HP_RET_USER_SERVICE; if (lwsi_role_client(wsi)) return LWS_HP_RET_USER_SERVICE; return LWS_HP_RET_BAIL_OK; } struct lws_role_ops role_ops_raw_proxy = { /* role name */ "raw-proxy", /* alpn id */ NULL, /* check_upgrades */ NULL, /* init_context */ NULL, /* init_vhost */ NULL, /* destroy_vhost */ NULL, /* periodic_checks */ NULL, /* service_flag_pending */ NULL, /* handle_POLLIN */ rops_handle_POLLIN_raw_proxy, /* handle_POLLOUT */ rops_handle_POLLOUT_raw_proxy, /* perform_user_POLLOUT */ NULL, /* callback_on_writable */ NULL, /* tx_credit */ NULL, /* write_role_protocol */ NULL, /* encapsulation_parent */ NULL, /* alpn_negotiated */ NULL, /* close_via_role_protocol */ NULL, /* close_role */ NULL, /* close_kill_connection */ NULL, /* destroy_role */ NULL, /* adoption_bind */ rops_adoption_bind_raw_proxy, /* client_bind */ rops_client_bind_raw_proxy, /* adoption_cb clnt, srv */ { LWS_CALLBACK_RAW_PROXY_CLI_ADOPT, LWS_CALLBACK_RAW_PROXY_SRV_ADOPT }, /* rx_cb clnt, srv */ { LWS_CALLBACK_RAW_PROXY_CLI_RX, LWS_CALLBACK_RAW_PROXY_SRV_RX }, /* writeable cb clnt, srv */ { LWS_CALLBACK_RAW_PROXY_CLI_WRITEABLE, LWS_CALLBACK_RAW_PROXY_SRV_WRITEABLE, }, /* close cb clnt, srv */ { LWS_CALLBACK_RAW_PROXY_CLI_CLOSE, LWS_CALLBACK_RAW_PROXY_SRV_CLOSE }, /* protocol_bind cb c, srv */ { LWS_CALLBACK_RAW_PROXY_CLI_BIND_PROTOCOL, LWS_CALLBACK_RAW_PROXY_SRV_BIND_PROTOCOL }, /* protocol_unbind cb c, srv */ { LWS_CALLBACK_RAW_PROXY_CLI_DROP_PROTOCOL, LWS_CALLBACK_RAW_PROXY_SRV_DROP_PROTOCOL }, /* file_handle */ 0, }; libwebsockets-3.2.1/lib/roles/raw-proxy/private.h000066400000000000000000000024131357643561300220570ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is included from core/private.h if LWS_ROLE_RAW_PROXY */ extern struct lws_role_ops role_ops_raw_proxy; #define lwsi_role_raw_proxy(wsi) (wsi->role_ops == &role_ops_raw_proxy) #if 0 struct lws_vhost_role_ws { const struct lws_extension *extensions; }; struct lws_pt_role_ws { struct lws *rx_draining_ext_list; struct lws *tx_draining_ext_list; }; struct _lws_raw_proxy_related { struct lws *wsi_onward; }; #endif libwebsockets-3.2.1/lib/roles/raw-skt/000077500000000000000000000000001357643561300176545ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/raw-skt/ops-raw-skt.c000066400000000000000000000155011357643561300222110ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include static int rops_handle_POLLIN_raw_skt(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { struct lws_tokens ebuf; int n, buffered; /* pending truncated sends have uber priority */ if (lws_has_buffered_out(wsi)) { if (!(pollfd->revents & LWS_POLLOUT)) return LWS_HPI_RET_HANDLED; /* drain the output buflist */ if (lws_issue_raw(wsi, NULL, 0) < 0) goto fail; /* * we can't afford to allow input processing to send * something new, so spin around he event loop until * he doesn't have any partials */ return LWS_HPI_RET_HANDLED; } #if !defined(LWS_NO_SERVER) if (!lwsi_role_client(wsi) && lwsi_state(wsi) != LRS_ESTABLISHED) { lwsl_debug("%s: %p: wsistate 0x%x\n", __func__, wsi, wsi->wsistate); if (lwsi_state(wsi) != LRS_SSL_INIT) if (lws_server_socket_service_ssl(wsi, LWS_SOCK_INVALID)) return LWS_HPI_RET_PLEASE_CLOSE_ME; return LWS_HPI_RET_HANDLED; } #endif if ((pollfd->revents & pollfd->events & LWS_POLLIN) && /* any tunnel has to have been established... */ lwsi_state(wsi) != LRS_SSL_ACK_PENDING && !(wsi->favoured_pollin && (pollfd->revents & pollfd->events & LWS_POLLOUT))) { buffered = lws_buflist_aware_read(pt, wsi, &ebuf); switch (ebuf.len) { case 0: lwsl_info("%s: read 0 len\n", __func__); wsi->seen_zero_length_recv = 1; if (lws_change_pollfd(wsi, LWS_POLLIN, 0)) goto fail; /* * we need to go to fail here, since it's the only * chance we get to understand that the socket has * closed */ // goto try_pollout; goto fail; case LWS_SSL_CAPABLE_ERROR: goto fail; case LWS_SSL_CAPABLE_MORE_SERVICE: goto try_pollout; } n = user_callback_handle_rxflow(wsi->protocol->callback, wsi, LWS_CALLBACK_RAW_RX, wsi->user_space, ebuf.token, ebuf.len); if (n < 0) { lwsl_info("LWS_CALLBACK_RAW_RX_fail\n"); goto fail; } if (lws_buflist_aware_consume(wsi, &ebuf, ebuf.len, buffered)) return LWS_HPI_RET_PLEASE_CLOSE_ME; } else if (wsi->favoured_pollin && (pollfd->revents & pollfd->events & LWS_POLLOUT)) /* we balanced the last favouring of pollin */ wsi->favoured_pollin = 0; try_pollout: if (!(pollfd->revents & LWS_POLLOUT)) return LWS_HPI_RET_HANDLED; #if !defined(LWS_WITHOUT_CLIENT) if (lwsi_state(wsi) == LRS_WAITING_CONNECT) lws_client_connect_3(wsi, NULL, 0); #endif /* one shot */ if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_notice("%s a\n", __func__); goto fail; } /* clear back-to-back write detection */ wsi->could_have_pending = 0; lws_stats_bump(pt, LWSSTATS_C_WRITEABLE_CB, 1); #if defined(LWS_WITH_STATS) if (wsi->active_writable_req_us) { uint64_t ul = lws_now_usecs() - wsi->active_writable_req_us; lws_stats_bump(pt, LWSSTATS_US_WRITABLE_DELAY_AVG, ul); lws_stats_max(pt, LWSSTATS_US_WORST_WRITABLE_DELAY, ul); wsi->active_writable_req_us = 0; } #endif n = user_callback_handle_rxflow(wsi->protocol->callback, wsi, LWS_CALLBACK_RAW_WRITEABLE, wsi->user_space, NULL, 0); if (n < 0) { lwsl_info("writeable_fail\n"); goto fail; } return LWS_HPI_RET_HANDLED; fail: lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "raw svc fail"); return LWS_HPI_RET_WSI_ALREADY_DIED; } #if !defined(LWS_NO_SERVER) static int rops_adoption_bind_raw_skt(struct lws *wsi, int type, const char *vh_prot_name) { /* no http but socket... must be raw skt */ if ((type & LWS_ADOPT_HTTP) || !(type & LWS_ADOPT_SOCKET) || (type & _LWS_ADOPT_FINISH)) return 0; /* no match */ #if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) if (type & LWS_ADOPT_FLAG_UDP) /* * these can be >128 bytes, so just alloc for UDP */ wsi->udp = lws_malloc(sizeof(*wsi->udp), "udp struct"); #endif lws_role_transition(wsi, 0, (type & LWS_ADOPT_ALLOW_SSL) ? LRS_SSL_INIT : LRS_ESTABLISHED, &role_ops_raw_skt); if (vh_prot_name) lws_bind_protocol(wsi, wsi->protocol, __func__); else /* this is the only time he will transition */ lws_bind_protocol(wsi, &wsi->vhost->protocols[wsi->vhost->raw_protocol_index], __func__); return 1; /* bound */ } #endif #if !defined(LWS_NO_CLIENT) static int rops_client_bind_raw_skt(struct lws *wsi, const struct lws_client_connect_info *i) { if (!i) { /* finalize */ if (!wsi->user_space && wsi->stash->method) if (lws_ensure_user_space(wsi)) return 1; return 0; } /* we are a fallback if nothing else matched */ lws_role_transition(wsi, LWSIFR_CLIENT, LRS_UNCONNECTED, &role_ops_raw_skt); return 1; /* matched */ } #endif struct lws_role_ops role_ops_raw_skt = { /* role name */ "raw-skt", /* alpn id */ NULL, /* check_upgrades */ NULL, /* init_context */ NULL, /* init_vhost */ NULL, /* destroy_vhost */ NULL, /* periodic_checks */ NULL, /* service_flag_pending */ NULL, /* handle_POLLIN */ rops_handle_POLLIN_raw_skt, /* handle_POLLOUT */ NULL, /* perform_user_POLLOUT */ NULL, /* callback_on_writable */ NULL, /* tx_credit */ NULL, /* write_role_protocol */ NULL, /* encapsulation_parent */ NULL, /* alpn_negotiated */ NULL, /* close_via_role_protocol */ NULL, /* close_role */ NULL, /* close_kill_connection */ NULL, /* destroy_role */ NULL, #if !defined(LWS_NO_SERVER) /* adoption_bind */ rops_adoption_bind_raw_skt, #else NULL, #endif #if !defined(LWS_NO_CLIENT) /* client_bind */ rops_client_bind_raw_skt, #else NULL, #endif /* adoption_cb clnt, srv */ { LWS_CALLBACK_RAW_CONNECTED, LWS_CALLBACK_RAW_ADOPT }, /* rx_cb clnt, srv */ { LWS_CALLBACK_RAW_RX, LWS_CALLBACK_RAW_RX }, /* writeable cb clnt, srv */ { LWS_CALLBACK_RAW_WRITEABLE, LWS_CALLBACK_RAW_WRITEABLE}, /* close cb clnt, srv */ { LWS_CALLBACK_RAW_CLOSE, LWS_CALLBACK_RAW_CLOSE }, /* protocol_bind cb c, srv */ { LWS_CALLBACK_RAW_SKT_BIND_PROTOCOL, LWS_CALLBACK_RAW_SKT_BIND_PROTOCOL }, /* protocol_unbind cb c, srv */ { LWS_CALLBACK_RAW_SKT_DROP_PROTOCOL, LWS_CALLBACK_RAW_SKT_DROP_PROTOCOL }, /* file_handle */ 0, }; libwebsockets-3.2.1/lib/roles/ws/000077500000000000000000000000001357643561300167155ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/ws/client-parser-ws.c000066400000000000000000000440441357643561300222660ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" /* * parsers.c: lws_ws_rx_sm() needs to be roughly kept in * sync with changes here, esp related to ext draining */ int lws_ws_client_rx_sm(struct lws *wsi, unsigned char c) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; int callback_action = LWS_CALLBACK_CLIENT_RECEIVE; struct lws_ext_pm_deflate_rx_ebufs pmdrx; unsigned short close_code; unsigned char *pp; int handled, m, n; #if !defined(LWS_WITHOUT_EXTENSIONS) int rx_draining_ext = 0; #endif pmdrx.eb_in.token = NULL; pmdrx.eb_in.len = 0; pmdrx.eb_out.token = NULL; pmdrx.eb_out.len = 0; #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->rx_draining_ext) { assert(!c); lws_remove_wsi_from_draining_ext_list(wsi); rx_draining_ext = 1; lwsl_debug("%s: doing draining flow\n", __func__); goto drain_extension; } #endif if (wsi->socket_is_permanently_unusable) return -1; switch (wsi->lws_rx_parse_state) { case LWS_RXPS_NEW: /* control frames (PING) may interrupt checkable sequences */ wsi->ws->defeat_check_utf8 = 0; switch (wsi->ws->ietf_spec_revision) { case 13: wsi->ws->opcode = c & 0xf; /* revisit if an extension wants them... */ switch (wsi->ws->opcode) { case LWSWSOPC_TEXT_FRAME: wsi->ws->rsv_first_msg = (c & 0x70); #if !defined(LWS_WITHOUT_EXTENSIONS) /* * set the expectation that we will have to * fake up the zlib trailer to the inflator for * this frame */ wsi->ws->pmd_trailer_application = !!(c & 0x40); #endif wsi->ws->continuation_possible = 1; wsi->ws->check_utf8 = lws_check_opt( wsi->context->options, LWS_SERVER_OPTION_VALIDATE_UTF8); wsi->ws->utf8 = 0; wsi->ws->first_fragment = 1; break; case LWSWSOPC_BINARY_FRAME: wsi->ws->rsv_first_msg = (c & 0x70); #if !defined(LWS_WITHOUT_EXTENSIONS) /* * set the expectation that we will have to * fake up the zlib trailer to the inflator for * this frame */ wsi->ws->pmd_trailer_application = !!(c & 0x40); #endif wsi->ws->check_utf8 = 0; wsi->ws->continuation_possible = 1; wsi->ws->first_fragment = 1; break; case LWSWSOPC_CONTINUATION: if (!wsi->ws->continuation_possible) { lwsl_info("disordered continuation\n"); return -1; } wsi->ws->first_fragment = 0; break; case LWSWSOPC_CLOSE: wsi->ws->check_utf8 = 0; wsi->ws->utf8 = 0; break; case 3: case 4: case 5: case 6: case 7: case 0xb: case 0xc: case 0xd: case 0xe: case 0xf: lwsl_info("illegal opcode\n"); return -1; default: wsi->ws->defeat_check_utf8 = 1; break; } wsi->ws->rsv = (c & 0x70); /* revisit if an extension wants them... */ if ( #if !defined(LWS_WITHOUT_EXTENSIONS) !wsi->ws->count_act_ext && #endif wsi->ws->rsv) { lwsl_info("illegal rsv bits set\n"); return -1; } wsi->ws->final = !!((c >> 7) & 1); lwsl_ext("%s: This RX frame Final %d\n", __func__, wsi->ws->final); if (wsi->ws->owed_a_fin && (wsi->ws->opcode == LWSWSOPC_TEXT_FRAME || wsi->ws->opcode == LWSWSOPC_BINARY_FRAME)) { lwsl_info("hey you owed us a FIN\n"); return -1; } if ((!(wsi->ws->opcode & 8)) && wsi->ws->final) { wsi->ws->continuation_possible = 0; wsi->ws->owed_a_fin = 0; } if ((wsi->ws->opcode & 8) && !wsi->ws->final) { lwsl_info("control msg can't be fragmented\n"); return -1; } if (!wsi->ws->final) wsi->ws->owed_a_fin = 1; switch (wsi->ws->opcode) { case LWSWSOPC_TEXT_FRAME: case LWSWSOPC_BINARY_FRAME: wsi->ws->frame_is_binary = wsi->ws->opcode == LWSWSOPC_BINARY_FRAME; break; } wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN; break; default: lwsl_err("unknown spec version %02d\n", wsi->ws->ietf_spec_revision); break; } break; case LWS_RXPS_04_FRAME_HDR_LEN: wsi->ws->this_frame_masked = !!(c & 0x80); switch (c & 0x7f) { case 126: /* control frames are not allowed to have big lengths */ if (wsi->ws->opcode & 8) goto illegal_ctl_length; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN16_2; break; case 127: /* control frames are not allowed to have big lengths */ if (wsi->ws->opcode & 8) goto illegal_ctl_length; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_8; break; default: wsi->ws->rx_packet_length = c & 0x7f; if (wsi->ws->this_frame_masked) wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_1; else { if (wsi->ws->rx_packet_length) { wsi->lws_rx_parse_state = LWS_RXPS_WS_FRAME_PAYLOAD; } else { wsi->lws_rx_parse_state = LWS_RXPS_NEW; goto spill; } } break; } break; case LWS_RXPS_04_FRAME_HDR_LEN16_2: wsi->ws->rx_packet_length = c << 8; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN16_1; break; case LWS_RXPS_04_FRAME_HDR_LEN16_1: wsi->ws->rx_packet_length |= c; if (wsi->ws->this_frame_masked) wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_1; else { if (wsi->ws->rx_packet_length) wsi->lws_rx_parse_state = LWS_RXPS_WS_FRAME_PAYLOAD; else { wsi->lws_rx_parse_state = LWS_RXPS_NEW; goto spill; } } break; case LWS_RXPS_04_FRAME_HDR_LEN64_8: if (c & 0x80) { lwsl_warn("b63 of length must be zero\n"); /* kill the connection */ return -1; } #if defined __LP64__ wsi->ws->rx_packet_length = ((size_t)c) << 56; #else wsi->ws->rx_packet_length = 0; #endif wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_7; break; case LWS_RXPS_04_FRAME_HDR_LEN64_7: #if defined __LP64__ wsi->ws->rx_packet_length |= ((size_t)c) << 48; #endif wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_6; break; case LWS_RXPS_04_FRAME_HDR_LEN64_6: #if defined __LP64__ wsi->ws->rx_packet_length |= ((size_t)c) << 40; #endif wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_5; break; case LWS_RXPS_04_FRAME_HDR_LEN64_5: #if defined __LP64__ wsi->ws->rx_packet_length |= ((size_t)c) << 32; #endif wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_4; break; case LWS_RXPS_04_FRAME_HDR_LEN64_4: wsi->ws->rx_packet_length |= ((size_t)c) << 24; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_3; break; case LWS_RXPS_04_FRAME_HDR_LEN64_3: wsi->ws->rx_packet_length |= ((size_t)c) << 16; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_2; break; case LWS_RXPS_04_FRAME_HDR_LEN64_2: wsi->ws->rx_packet_length |= ((size_t)c) << 8; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_1; break; case LWS_RXPS_04_FRAME_HDR_LEN64_1: wsi->ws->rx_packet_length |= (size_t)c; if (wsi->ws->this_frame_masked) wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_1; else { if (wsi->ws->rx_packet_length) wsi->lws_rx_parse_state = LWS_RXPS_WS_FRAME_PAYLOAD; else { wsi->lws_rx_parse_state = LWS_RXPS_NEW; goto spill; } } break; case LWS_RXPS_07_COLLECT_FRAME_KEY_1: wsi->ws->mask[0] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_2; break; case LWS_RXPS_07_COLLECT_FRAME_KEY_2: wsi->ws->mask[1] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_3; break; case LWS_RXPS_07_COLLECT_FRAME_KEY_3: wsi->ws->mask[2] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_4; break; case LWS_RXPS_07_COLLECT_FRAME_KEY_4: wsi->ws->mask[3] = c; if (c) wsi->ws->all_zero_nonce = 0; if (wsi->ws->rx_packet_length) wsi->lws_rx_parse_state = LWS_RXPS_WS_FRAME_PAYLOAD; else { wsi->lws_rx_parse_state = LWS_RXPS_NEW; goto spill; } break; case LWS_RXPS_WS_FRAME_PAYLOAD: assert(wsi->ws->rx_ubuf); #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->rx_draining_ext) goto drain_extension; #endif if (wsi->ws->this_frame_masked && !wsi->ws->all_zero_nonce) c ^= wsi->ws->mask[(wsi->ws->mask_idx++) & 3]; /* * unmask and collect the payload body in * rx_ubuf_head + LWS_PRE */ wsi->ws->rx_ubuf[LWS_PRE + (wsi->ws->rx_ubuf_head++)] = c; if (--wsi->ws->rx_packet_length == 0) { /* spill because we have the whole frame */ wsi->lws_rx_parse_state = LWS_RXPS_NEW; lwsl_debug("%s: spilling as we have the whole frame\n", __func__); goto spill; } /* * if there's no protocol max frame size given, we are * supposed to default to context->pt_serv_buf_size */ if (!wsi->protocol->rx_buffer_size && wsi->ws->rx_ubuf_head != wsi->context->pt_serv_buf_size) break; if (wsi->protocol->rx_buffer_size && wsi->ws->rx_ubuf_head != wsi->protocol->rx_buffer_size) break; /* spill because we filled our rx buffer */ lwsl_debug("%s: spilling as we filled our rx buffer\n", __func__); spill: handled = 0; /* * is this frame a control packet we should take care of at this * layer? If so service it and hide it from the user callback */ switch (wsi->ws->opcode) { case LWSWSOPC_CLOSE: pp = &wsi->ws->rx_ubuf[LWS_PRE]; if (lws_check_opt(wsi->context->options, LWS_SERVER_OPTION_VALIDATE_UTF8) && wsi->ws->rx_ubuf_head > 2 && lws_check_utf8(&wsi->ws->utf8, pp + 2, wsi->ws->rx_ubuf_head - 2)) goto utf8_fail; /* is this an acknowledgment of our close? */ if (lwsi_state(wsi) == LRS_AWAITING_CLOSE_ACK) { /* * fine he has told us he is closing too, let's * finish our close */ lwsl_parser("seen server's close ack\n"); return -1; } lwsl_parser("client sees server close len = %d\n", wsi->ws->rx_ubuf_head); if (wsi->ws->rx_ubuf_head >= 2) { close_code = (pp[0] << 8) | pp[1]; if (close_code < 1000 || close_code == 1004 || close_code == 1005 || close_code == 1006 || close_code == 1012 || close_code == 1013 || close_code == 1014 || close_code == 1015 || (close_code >= 1016 && close_code < 3000) ) { pp[0] = (LWS_CLOSE_STATUS_PROTOCOL_ERR >> 8) & 0xff; pp[1] = LWS_CLOSE_STATUS_PROTOCOL_ERR & 0xff; } } if (user_callback_handle_rxflow( wsi->protocol->callback, wsi, LWS_CALLBACK_WS_PEER_INITIATED_CLOSE, wsi->user_space, pp, wsi->ws->rx_ubuf_head)) return -1; memcpy(wsi->ws->ping_payload_buf + LWS_PRE, pp, wsi->ws->rx_ubuf_head); wsi->ws->close_in_ping_buffer_len = wsi->ws->rx_ubuf_head; lwsl_info("%s: scheduling return close as ack\n", __func__); __lws_change_pollfd(wsi, LWS_POLLIN, 0); lws_set_timeout(wsi, PENDING_TIMEOUT_CLOSE_SEND, 3); wsi->waiting_to_send_close_frame = 1; wsi->close_needs_ack = 0; lwsi_set_state(wsi, LRS_WAITING_TO_SEND_CLOSE); lws_callback_on_writable(wsi); handled = 1; break; case LWSWSOPC_PING: lwsl_info("received %d byte ping, sending pong\n", wsi->ws->rx_ubuf_head); /* he set a close reason on this guy, ignore PING */ if (wsi->ws->close_in_ping_buffer_len) goto ping_drop; if (wsi->ws->ping_pending_flag) { /* * there is already a pending ping payload * we should just log and drop */ lwsl_parser("DROP PING since one pending\n"); goto ping_drop; } /* control packets can only be < 128 bytes long */ if (wsi->ws->rx_ubuf_head > 128 - 3) { lwsl_parser("DROP PING payload too large\n"); goto ping_drop; } /* stash the pong payload */ memcpy(wsi->ws->ping_payload_buf + LWS_PRE, &wsi->ws->rx_ubuf[LWS_PRE], wsi->ws->rx_ubuf_head); wsi->ws->ping_payload_len = wsi->ws->rx_ubuf_head; wsi->ws->ping_pending_flag = 1; /* get it sent as soon as possible */ lws_callback_on_writable(wsi); ping_drop: wsi->ws->rx_ubuf_head = 0; handled = 1; break; case LWSWSOPC_PONG: lwsl_info("%s: client %p received pong\n", __func__, wsi); lwsl_hexdump(&wsi->ws->rx_ubuf[LWS_PRE], wsi->ws->rx_ubuf_head); if (wsi->ws->await_pong) { lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); wsi->ws->await_pong = 0; /* * prepare to send the ping again if nothing * sent to countermand it */ __lws_sul_insert(&pt->pt_sul_owner, &wsi->sul_ping, (lws_usec_t)wsi->context->ws_ping_pong_interval * LWS_USEC_PER_SEC); } /* issue it */ callback_action = LWS_CALLBACK_CLIENT_RECEIVE_PONG; break; case LWSWSOPC_CONTINUATION: case LWSWSOPC_TEXT_FRAME: case LWSWSOPC_BINARY_FRAME: break; default: /* not handled or failed */ lwsl_ext("Unhandled ext opc 0x%x\n", wsi->ws->opcode); wsi->ws->rx_ubuf_head = 0; return -1; } /* * No it's real payload, pass it up to the user callback. * * We have been statefully collecting it in the * LWS_RXPS_WS_FRAME_PAYLOAD clause above. * * It's nicely buffered with the pre-padding taken care of * so it can be sent straight out again using lws_write. * * However, now we have a chunk of it, we want to deal with it * all here. Since this may be input to permessage-deflate and * there are block limits on that for input and output, we may * need to iterate. */ if (handled) goto already_done; pmdrx.eb_in.token = &wsi->ws->rx_ubuf[LWS_PRE]; pmdrx.eb_in.len = wsi->ws->rx_ubuf_head; /* for the non-pm-deflate case */ pmdrx.eb_out = pmdrx.eb_in; lwsl_debug("%s: starting disbursal of %d deframed rx\n", __func__, wsi->ws->rx_ubuf_head); #if !defined(LWS_WITHOUT_EXTENSIONS) drain_extension: #endif do { // lwsl_notice("%s: pmdrx.eb_in.len: %d\n", __func__, // (int)pmdrx.eb_in.len); n = PMDR_DID_NOTHING; #if !defined(LWS_WITHOUT_EXTENSIONS) lwsl_ext("%s: +++ passing %d %p to ext\n", __func__, pmdrx.eb_in.len, pmdrx.eb_in.token); n = lws_ext_cb_active(wsi, LWS_EXT_CB_PAYLOAD_RX, &pmdrx, 0); lwsl_ext("Ext RX returned %d\n", n); if (n < 0) { wsi->socket_is_permanently_unusable = 1; return -1; } if (n == PMDR_DID_NOTHING) break; #endif lwsl_ext("%s: post inflate ebuf in len %d / out len %d\n", __func__, pmdrx.eb_in.len, pmdrx.eb_out.len); #if !defined(LWS_WITHOUT_EXTENSIONS) if (rx_draining_ext && !pmdrx.eb_out.len) { lwsl_debug(" --- ending drain on 0 read result\n"); goto already_done; } if (n == PMDR_HAS_PENDING) { /* 1 means stuff to drain */ /* extension had more... main loop will come back */ lwsl_ext("%s: adding to draining ext list\n", __func__); lws_add_wsi_to_draining_ext_list(wsi); } else { lwsl_ext("%s: removing from draining ext list\n", __func__); lws_remove_wsi_from_draining_ext_list(wsi); } rx_draining_ext = wsi->ws->rx_draining_ext; #endif if (wsi->ws->check_utf8 && !wsi->ws->defeat_check_utf8) { if (lws_check_utf8(&wsi->ws->utf8, pmdrx.eb_out.token, pmdrx.eb_out.len)) { lws_close_reason(wsi, LWS_CLOSE_STATUS_INVALID_PAYLOAD, (uint8_t *)"bad utf8", 8); goto utf8_fail; } /* we are ending partway through utf-8 character? */ if (!wsi->ws->rx_packet_length && wsi->ws->final && wsi->ws->utf8 #if !defined(LWS_WITHOUT_EXTENSIONS) /* if ext not negotiated, going to be UNKNOWN */ && (n == PMDR_EMPTY_FINAL || n == PMDR_UNKNOWN) #endif ) { lwsl_info("FINAL utf8 error\n"); lws_close_reason(wsi, LWS_CLOSE_STATUS_INVALID_PAYLOAD, (uint8_t *)"partial utf8", 12); utf8_fail: lwsl_info("utf8 error\n"); lwsl_hexdump_info(pmdrx.eb_out.token, pmdrx.eb_out.len); return -1; } } if (pmdrx.eb_out.len < 0 && callback_action != LWS_CALLBACK_CLIENT_RECEIVE_PONG) goto already_done; if (!pmdrx.eb_out.token) goto already_done; pmdrx.eb_out.token[pmdrx.eb_out.len] = '\0'; if (!wsi->protocol->callback) goto already_done; if (callback_action == LWS_CALLBACK_CLIENT_RECEIVE_PONG) lwsl_info("Client doing pong callback\n"); #if !defined(LWS_WITHOUT_EXTENSIONS) if (n == PMDR_HAS_PENDING) /* extension had more... main loop will come back * we want callback to be done with this set, if so, * because lws_is_final() hides it was final until the * last chunk */ lws_add_wsi_to_draining_ext_list(wsi); else lws_remove_wsi_from_draining_ext_list(wsi); #endif if (lwsi_state(wsi) == LRS_RETURNED_CLOSE || lwsi_state(wsi) == LRS_WAITING_TO_SEND_CLOSE || lwsi_state(wsi) == LRS_AWAITING_CLOSE_ACK) goto already_done; /* if pmd not enabled, in == out */ if (n == PMDR_DID_NOTHING #if !defined(LWS_WITHOUT_EXTENSIONS) || n == PMDR_UNKNOWN #endif ) pmdrx.eb_in.len -= pmdrx.eb_out.len; m = wsi->protocol->callback(wsi, (enum lws_callback_reasons)callback_action, wsi->user_space, pmdrx.eb_out.token, pmdrx.eb_out.len); wsi->ws->first_fragment = 0; lwsl_debug("%s: bulk ws rx: inp used %d, output %d\n", __func__, wsi->ws->rx_ubuf_head, pmdrx.eb_out.len); /* if user code wants to close, let caller know */ if (m) return 1; } while (pmdrx.eb_in.len #if !defined(LWS_WITHOUT_EXTENSIONS) || rx_draining_ext #endif ); already_done: wsi->ws->rx_ubuf_head = 0; break; default: lwsl_err("client rx illegal state\n"); return 1; } return 0; illegal_ctl_length: lwsl_warn("Control frame asking for extended length is illegal\n"); /* kill the connection */ return -1; } libwebsockets-3.2.1/lib/roles/ws/client-ws.c000066400000000000000000000403121357643561300207660ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include /* * In-place str to lower case */ static void strtolower(char *s) { while (*s) { #ifdef LWS_PLAT_OPTEE int tolower_optee(int c); *s = tolower_optee((int)*s); #else *s = tolower((int)*s); #endif s++; } } int lws_create_client_ws_object(const struct lws_client_connect_info *i, struct lws *wsi) { int v = SPEC_LATEST_SUPPORTED; /* allocate the ws struct for the wsi */ wsi->ws = lws_zalloc(sizeof(*wsi->ws), "client ws struct"); if (!wsi->ws) { lwsl_notice("OOM\n"); return 1; } /* -1 means just use latest supported */ if (i->ietf_version_or_minus_one != -1 && i->ietf_version_or_minus_one) v = i->ietf_version_or_minus_one; wsi->ws->ietf_spec_revision = v; return 0; } #if !defined(LWS_NO_CLIENT) int lws_ws_handshake_client(struct lws *wsi, unsigned char **buf, size_t len) { unsigned char *bufin = *buf; if ((lwsi_state(wsi) != LRS_WAITING_PROXY_REPLY) && (lwsi_state(wsi) != LRS_H1C_ISSUE_HANDSHAKE) && (lwsi_state(wsi) != LRS_WAITING_SERVER_REPLY) && !lwsi_role_client(wsi)) return 0; lwsl_debug("%s: hs client feels it has %d in\n", __func__, (int)len); while (len) { /* * we were accepting input but now we stopped doing so */ if (lws_is_flowcontrolled(wsi)) { lwsl_debug("%s: caching %ld\n", __func__, (long)len); /* * Since we cached the remaining available input, we * can say we "consumed" it. * * But what about the case where the available input * came out of the rxflow cache already? If we are * effectively "putting it back in the cache", we have * to place it at the cache head, not the tail as usual. */ if (lws_rxflow_cache(wsi, *buf, 0, (int)len) == LWSRXFC_TRIMMED) { /* * we dealt with it by trimming the existing * rxflow cache HEAD to account for what we used. * * indicate we didn't use anything to the caller * so he doesn't do any consumed processing */ lwsl_info("%s: trimming inside rxflow cache\n", __func__); *buf = bufin; } else *buf += len; return 0; } #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->rx_draining_ext) { int m; lwsl_info("%s: draining ext\n", __func__); if (lwsi_role_client(wsi)) m = lws_ws_client_rx_sm(wsi, 0); else m = lws_ws_rx_sm(wsi, 0, 0); if (m < 0) return -1; continue; } #endif /* * caller will account for buflist usage by studying what * happened to *buf */ if (lws_ws_client_rx_sm(wsi, *(*buf)++)) { lwsl_notice("%s: client_rx_sm exited, DROPPING %d\n", __func__, (int)len); return -1; } len--; } // lwsl_notice("%s: finished with %ld\n", __func__, (long)len); return 0; } #endif char * lws_generate_client_ws_handshake(struct lws *wsi, char *p, const char *conn1) { char buf[128], hash[20], key_b64[40]; int n; #if !defined(LWS_WITHOUT_EXTENSIONS) const struct lws_extension *ext; int ext_count = 0; #endif /* * create the random key */ n = lws_get_random(wsi->context, hash, 16); if (n != 16) { lwsl_err("Unable to read from random dev %s\n", SYSTEM_RANDOM_FILEPATH); return NULL; } lws_b64_encode_string(hash, 16, key_b64, sizeof(key_b64)); p += sprintf(p, "Upgrade: websocket\x0d\x0a" "Connection: %sUpgrade\x0d\x0a" "Sec-WebSocket-Key: ", conn1); strcpy(p, key_b64); p += strlen(key_b64); p += sprintf(p, "\x0d\x0a"); if (lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_SENT_PROTOCOLS)) p += sprintf(p, "Sec-WebSocket-Protocol: %s\x0d\x0a", lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_SENT_PROTOCOLS)); /* tell the server what extensions we could support */ #if !defined(LWS_WITHOUT_EXTENSIONS) ext = wsi->vhost->ws.extensions; while (ext && ext->callback) { n = wsi->vhost->protocols[0].callback(wsi, LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED, wsi->user_space, (char *)ext->name, 0); /* * zero return from callback means go ahead and allow * the extension, it's what we get if the callback is * unhandled */ if (n) { ext++; continue; } /* apply it */ if (ext_count) *p++ = ','; else p += sprintf(p, "Sec-WebSocket-Extensions: "); p += sprintf(p, "%s", ext->client_offer); ext_count++; ext++; } if (ext_count) p += sprintf(p, "\x0d\x0a"); #endif if (wsi->ws->ietf_spec_revision) p += sprintf(p, "Sec-WebSocket-Version: %d\x0d\x0a", wsi->ws->ietf_spec_revision); /* prepare the expected server accept response */ key_b64[39] = '\0'; /* enforce composed length below buf sizeof */ n = sprintf(buf, "%s258EAFA5-E914-47DA-95CA-C5AB0DC85B11", key_b64); lws_SHA1((unsigned char *)buf, n, (unsigned char *)hash); lws_b64_encode_string(hash, 20, wsi->http.ah->initial_handshake_hash_base64, sizeof(wsi->http.ah->initial_handshake_hash_base64)); return p; } int lws_client_ws_upgrade(struct lws *wsi, const char **cce) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; struct lws_context *context = wsi->context; struct lws_tokenize ts; int n, len, okay = 0; lws_tokenize_elem e; char *p, buf[64]; const char *pc; #if !defined(LWS_WITHOUT_EXTENSIONS) char *sb = (char *)&pt->serv_buf[0]; const struct lws_ext_options *opts; const struct lws_extension *ext; char ext_name[128]; const char *c, *a; int more = 1; char ignore; #endif if (wsi->client_h2_substream) {/* !!! client ws-over-h2 not there yet */ lwsl_warn("%s: client ws-over-h2 upgrade not supported yet\n", __func__); *cce = "HS: h2 / ws upgrade unsupported"; goto bail3; } if (wsi->http.ah->http_response == 401) { lwsl_warn( "lws_client_handshake: got bad HTTP response '%d'\n", wsi->http.ah->http_response); *cce = "HS: ws upgrade unauthorized"; goto bail3; } if (wsi->http.ah->http_response != 101) { lwsl_warn( "lws_client_handshake: got bad HTTP response '%d'\n", wsi->http.ah->http_response); *cce = "HS: ws upgrade response not 101"; goto bail3; } if (lws_hdr_total_length(wsi, WSI_TOKEN_ACCEPT) == 0) { lwsl_info("no ACCEPT\n"); *cce = "HS: ACCEPT missing"; goto bail3; } p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_UPGRADE); if (!p) { lwsl_info("no UPGRADE\n"); *cce = "HS: UPGRADE missing"; goto bail3; } strtolower(p); if (strcmp(p, "websocket")) { lwsl_warn( "lws_client_handshake: got bad Upgrade header '%s'\n", p); *cce = "HS: Upgrade to something other than websocket"; goto bail3; } /* connection: must have "upgrade" */ lws_tokenize_init(&ts, buf, LWS_TOKENIZE_F_COMMA_SEP_LIST | LWS_TOKENIZE_F_MINUS_NONTERM); ts.len = lws_hdr_copy(wsi, buf, sizeof(buf) - 1, WSI_TOKEN_CONNECTION); if (ts.len <= 0) /* won't fit, or absent */ goto bad_conn_format; do { e = lws_tokenize(&ts); switch (e) { case LWS_TOKZE_TOKEN: if (!strncasecmp(ts.token, "upgrade", ts.token_len)) e = LWS_TOKZE_ENDED; break; case LWS_TOKZE_DELIMITER: break; default: /* includes ENDED found by the tokenizer itself */ bad_conn_format: lwsl_info("%s: malfored connection '%s'\n", __func__, buf); *cce = "HS: UPGRADE malformed"; goto bail3; } } while (e > 0); pc = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_SENT_PROTOCOLS); #if defined(_DEBUG) if (!pc) { lwsl_parser("lws_client_int_s_hs: no protocol list\n"); } else lwsl_parser("lws_client_int_s_hs: protocol list '%s'\n", pc); #endif /* * confirm the protocol the server wants to talk was in the list * of protocols we offered */ len = lws_hdr_total_length(wsi, WSI_TOKEN_PROTOCOL); if (!len) { lwsl_info("%s: WSI_TOKEN_PROTOCOL is null\n", __func__); /* * no protocol name to work from, if we don't already have one * default to first protocol */ if (wsi->protocol) { p = (char *)wsi->protocol->name; goto identify_protocol; } /* no choice but to use the default protocol */ n = 0; wsi->protocol = &wsi->vhost->protocols[0]; goto check_extensions; } p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_PROTOCOL); len = (int)strlen(p); while (pc && *pc && !okay) { if (!strncmp(pc, p, len) && (pc[len] == ',' || pc[len] == '\0')) { okay = 1; continue; } while (*pc && *pc++ != ',') ; while (*pc == ' ') pc++; } if (!okay) { lwsl_info("%s: got bad protocol %s\n", __func__, p); *cce = "HS: PROTOCOL malformed"; goto bail2; } identify_protocol: #if defined(LWS_WITH_HTTP_PROXY) lws_strncpy(wsi->ws->actual_protocol, p, sizeof(wsi->ws->actual_protocol)); #endif /* * identify the selected protocol struct and set it */ n = 0; /* keep client connection pre-bound protocol */ if (!lwsi_role_client(wsi)) wsi->protocol = NULL; while (wsi->vhost->protocols[n].callback) { if (!wsi->protocol && strcmp(p, wsi->vhost->protocols[n].name) == 0) { wsi->protocol = &wsi->vhost->protocols[n]; break; } n++; } if (!wsi->vhost->protocols[n].callback) { /* no match */ /* if server, that's already fatal */ if (!lwsi_role_client(wsi)) { lwsl_info("%s: fail protocol %s\n", __func__, p); *cce = "HS: Cannot match protocol"; goto bail2; } /* for client, find the index of our pre-bound protocol */ n = 0; while (wsi->vhost->protocols[n].callback) { if (wsi->protocol && strcmp(wsi->protocol->name, wsi->vhost->protocols[n].name) == 0) { wsi->protocol = &wsi->vhost->protocols[n]; break; } n++; } if (!wsi->vhost->protocols[n].callback) { if (wsi->protocol) lwsl_err("Failed to match protocol %s\n", wsi->protocol->name); else lwsl_err("No protocol on client\n"); *cce = "ws protocol no match"; goto bail2; } } lwsl_debug("Selected protocol %s\n", wsi->protocol->name); check_extensions: /* * stitch protocol choice into the vh protocol linked list * We always insert ourselves at the start of the list * * X <-> B * X <-> pAn <-> pB */ lws_same_vh_protocol_insert(wsi, n); #if !defined(LWS_WITHOUT_EXTENSIONS) /* instantiate the accepted extensions */ if (!lws_hdr_total_length(wsi, WSI_TOKEN_EXTENSIONS)) { lwsl_ext("no client extensions allowed by server\n"); goto check_accept; } /* * break down the list of server accepted extensions * and go through matching them or identifying bogons */ if (lws_hdr_copy(wsi, sb, context->pt_serv_buf_size, WSI_TOKEN_EXTENSIONS) < 0) { lwsl_warn("ext list from server failed to copy\n"); *cce = "HS: EXT: list too big"; goto bail2; } c = sb; n = 0; ignore = 0; a = NULL; while (more) { if (*c && (*c != ',' && *c != '\t')) { if (*c == ';') { ignore = 1; if (!a) a = c + 1; } if (ignore || *c == ' ') { c++; continue; } ext_name[n] = *c++; if (n < (int)sizeof(ext_name) - 1) n++; continue; } ext_name[n] = '\0'; ignore = 0; if (!*c) more = 0; else { c++; if (!n) continue; } /* check we actually support it */ lwsl_notice("checking client ext %s\n", ext_name); n = 0; ext = wsi->vhost->ws.extensions; while (ext && ext->callback) { if (strcmp(ext_name, ext->name)) { ext++; continue; } n = 1; lwsl_notice("instantiating client ext %s\n", ext_name); /* instantiate the extension on this conn */ wsi->ws->active_extensions[wsi->ws->count_act_ext] = ext; /* allow him to construct his ext instance */ if (ext->callback(lws_get_context(wsi), ext, wsi, LWS_EXT_CB_CLIENT_CONSTRUCT, (void *)&wsi->ws->act_ext_user[ wsi->ws->count_act_ext], (void *)&opts, 0)) { lwsl_info(" ext %s failed construction\n", ext_name); ext++; continue; } /* * allow the user code to override ext defaults if it * wants to */ ext_name[0] = '\0'; if (user_callback_handle_rxflow(wsi->protocol->callback, wsi, LWS_CALLBACK_WS_EXT_DEFAULTS, (char *)ext->name, ext_name, sizeof(ext_name))) { *cce = "HS: EXT: failed setting defaults"; goto bail2; } if (ext_name[0] && lws_ext_parse_options(ext, wsi, wsi->ws->act_ext_user[ wsi->ws->count_act_ext], opts, ext_name, (int)strlen(ext_name))) { lwsl_err("%s: unable to parse user defaults '%s'", __func__, ext_name); *cce = "HS: EXT: failed parsing defaults"; goto bail2; } /* * give the extension the server options */ if (a && lws_ext_parse_options(ext, wsi, wsi->ws->act_ext_user[ wsi->ws->count_act_ext], opts, a, lws_ptr_diff(c, a))) { lwsl_err("%s: unable to parse remote def '%s'", __func__, a); *cce = "HS: EXT: failed parsing options"; goto bail2; } if (ext->callback(lws_get_context(wsi), ext, wsi, LWS_EXT_CB_OPTION_CONFIRM, wsi->ws->act_ext_user[wsi->ws->count_act_ext], NULL, 0)) { lwsl_err("%s: ext %s rejects server options %s", __func__, ext->name, a); *cce = "HS: EXT: Rejects server options"; goto bail2; } wsi->ws->count_act_ext++; ext++; } if (n == 0) { lwsl_warn("Unknown ext '%s'!\n", ext_name); *cce = "HS: EXT: unknown ext"; goto bail2; } a = NULL; n = 0; } check_accept: #endif /* * Confirm his accept token is the one we precomputed */ p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_ACCEPT); if (strcmp(p, wsi->http.ah->initial_handshake_hash_base64)) { lwsl_warn("lws_client_int_s_hs: accept '%s' wrong vs '%s'\n", p, wsi->http.ah->initial_handshake_hash_base64); *cce = "HS: Accept hash wrong"; goto bail2; } /* allocate the per-connection user memory (if any) */ if (lws_ensure_user_space(wsi)) { lwsl_err("Problem allocating wsi user mem\n"); *cce = "HS: OOM"; goto bail2; } /* * we seem to be good to go, give client last chance to check * headers and OK it */ if (wsi->protocol->callback(wsi, LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH, wsi->user_space, NULL, 0)) { *cce = "HS: Rejected by filter cb"; goto bail2; } /* clear his proxy connection timeout */ lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); /* free up his parsing allocations */ lws_header_table_detach(wsi, 0); lws_role_transition(wsi, LWSIFR_CLIENT, LRS_ESTABLISHED, &role_ops_ws); if (wsi->context->ws_ping_pong_interval && !wsi->http2_substream ) { wsi->sul_ping.cb = lws_sul_wsping_cb; __lws_sul_insert(&pt->pt_sul_owner, &wsi->sul_ping, (lws_usec_t)wsi->context->ws_ping_pong_interval * LWS_USEC_PER_SEC); } wsi->rxflow_change_to = LWS_RXFLOW_ALLOW; /* * create the frame buffer for this connection according to the * size mentioned in the protocol definition. If 0 there, then * use a big default for compatibility */ n = (int)wsi->protocol->rx_buffer_size; if (!n) n = context->pt_serv_buf_size; n += LWS_PRE; wsi->ws->rx_ubuf = lws_malloc(n + 4 /* 0x0000ffff zlib */, "client frame buffer"); if (!wsi->ws->rx_ubuf) { lwsl_err("Out of Mem allocating rx buffer %d\n", n); *cce = "HS: OOM"; goto bail2; } wsi->ws->rx_ubuf_alloc = n; lwsl_info("Allocating client RX buffer %d\n", n); #if !defined(LWS_WITH_ESP32) if (setsockopt(wsi->desc.sockfd, SOL_SOCKET, SO_SNDBUF, (const char *)&n, sizeof n)) { lwsl_warn("Failed to set SNDBUF to %d", n); *cce = "HS: SO_SNDBUF failed"; goto bail3; } #endif lwsl_debug("handshake OK for protocol %s\n", wsi->protocol->name); /* call him back to inform him he is up */ if (wsi->protocol->callback(wsi, LWS_CALLBACK_CLIENT_ESTABLISHED, wsi->user_space, NULL, 0)) { *cce = "HS: Rejected at CLIENT_ESTABLISHED"; goto bail3; } return 0; bail3: return 3; bail2: return 2; } libwebsockets-3.2.1/lib/roles/ws/ext/000077500000000000000000000000001357643561300175155ustar00rootroot00000000000000libwebsockets-3.2.1/lib/roles/ws/ext/extension-permessage-deflate.c000066400000000000000000000354161357643561300254410ustar00rootroot00000000000000/* * ./lib/extension-permessage-deflate.c * * Copyright (C) 2016 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "extension-permessage-deflate.h" #include #include #include #define LWS_ZLIB_MEMLEVEL 8 const struct lws_ext_options lws_ext_pm_deflate_options[] = { /* public RFC7692 settings */ { "server_no_context_takeover", EXTARG_NONE }, { "client_no_context_takeover", EXTARG_NONE }, { "server_max_window_bits", EXTARG_OPT_DEC }, { "client_max_window_bits", EXTARG_OPT_DEC }, /* ones only user code can set */ { "rx_buf_size", EXTARG_DEC }, { "tx_buf_size", EXTARG_DEC }, { "compression_level", EXTARG_DEC }, { "mem_level", EXTARG_DEC }, { NULL, 0 }, /* sentinel */ }; static void lws_extension_pmdeflate_restrict_args(struct lws *wsi, struct lws_ext_pm_deflate_priv *priv) { int n, extra; /* cap the RX buf at the nearest power of 2 to protocol rx buf */ n = wsi->context->pt_serv_buf_size; if (wsi->protocol->rx_buffer_size) n = (int)wsi->protocol->rx_buffer_size; extra = 7; while (n >= 1 << (extra + 1)) extra++; if (extra < priv->args[PMD_RX_BUF_PWR2]) { priv->args[PMD_RX_BUF_PWR2] = extra; lwsl_info(" Capping pmd rx to %d\n", 1 << extra); } } static unsigned char trail[] = { 0, 0, 0xff, 0xff }; LWS_VISIBLE int lws_extension_callback_pm_deflate(struct lws_context *context, const struct lws_extension *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len) { struct lws_ext_pm_deflate_priv *priv = (struct lws_ext_pm_deflate_priv *)user; struct lws_ext_pm_deflate_rx_ebufs *pmdrx = (struct lws_ext_pm_deflate_rx_ebufs *)in; struct lws_ext_option_arg *oa; int n, ret = 0, was_fin = 0, m; unsigned int pen = 0; int penbits = 0; switch (reason) { case LWS_EXT_CB_NAMED_OPTION_SET: oa = in; if (!oa->option_name) break; lwsl_ext("%s: named option set: %s\n", __func__, oa->option_name); for (n = 0; n < (int)LWS_ARRAY_SIZE(lws_ext_pm_deflate_options); n++) if (!strcmp(lws_ext_pm_deflate_options[n].name, oa->option_name)) break; if (n == (int)LWS_ARRAY_SIZE(lws_ext_pm_deflate_options)) break; oa->option_index = n; /* fallthru */ case LWS_EXT_CB_OPTION_SET: oa = in; lwsl_ext("%s: option set: idx %d, %s, len %d\n", __func__, oa->option_index, oa->start, oa->len); if (oa->start) priv->args[oa->option_index] = atoi(oa->start); else priv->args[oa->option_index] = 1; if (priv->args[PMD_CLIENT_MAX_WINDOW_BITS] == 8) priv->args[PMD_CLIENT_MAX_WINDOW_BITS] = 9; lws_extension_pmdeflate_restrict_args(wsi, priv); break; case LWS_EXT_CB_OPTION_CONFIRM: if (priv->args[PMD_SERVER_MAX_WINDOW_BITS] < 8 || priv->args[PMD_SERVER_MAX_WINDOW_BITS] > 15 || priv->args[PMD_CLIENT_MAX_WINDOW_BITS] < 8 || priv->args[PMD_CLIENT_MAX_WINDOW_BITS] > 15) return -1; break; case LWS_EXT_CB_CLIENT_CONSTRUCT: case LWS_EXT_CB_CONSTRUCT: n = context->pt_serv_buf_size; if (wsi->protocol->rx_buffer_size) n = (int)wsi->protocol->rx_buffer_size; if (n < 128) { lwsl_info(" permessage-deflate requires the protocol " "(%s) to have an RX buffer >= 128\n", wsi->protocol->name); return -1; } /* fill in **user */ priv = lws_zalloc(sizeof(*priv), "pmd priv"); *((void **)user) = priv; lwsl_ext("%s: LWS_EXT_CB_*CONSTRUCT\n", __func__); memset(priv, 0, sizeof(*priv)); /* fill in pointer to options list */ if (in) *((const struct lws_ext_options **)in) = lws_ext_pm_deflate_options; /* fallthru */ case LWS_EXT_CB_OPTION_DEFAULT: /* set the public, RFC7692 defaults... */ priv->args[PMD_SERVER_NO_CONTEXT_TAKEOVER] = 0, priv->args[PMD_CLIENT_NO_CONTEXT_TAKEOVER] = 0; priv->args[PMD_SERVER_MAX_WINDOW_BITS] = 15; priv->args[PMD_CLIENT_MAX_WINDOW_BITS] = 15; /* ...and the ones the user code can override */ priv->args[PMD_RX_BUF_PWR2] = 10; /* ie, 1024 */ priv->args[PMD_TX_BUF_PWR2] = 10; /* ie, 1024 */ priv->args[PMD_COMP_LEVEL] = 1; priv->args[PMD_MEM_LEVEL] = 8; lws_extension_pmdeflate_restrict_args(wsi, priv); break; case LWS_EXT_CB_DESTROY: lwsl_ext("%s: LWS_EXT_CB_DESTROY\n", __func__); lws_free(priv->buf_rx_inflated); lws_free(priv->buf_tx_deflated); if (priv->rx_init) (void)inflateEnd(&priv->rx); if (priv->tx_init) (void)deflateEnd(&priv->tx); lws_free(priv); return ret; case LWS_EXT_CB_PAYLOAD_RX: lwsl_ext(" %s: LWS_EXT_CB_PAYLOAD_RX: in %d, existing in %d\n", __func__, pmdrx->eb_in.len, priv->rx.avail_in); /* if this frame is not marked as compressed, we ignore it */ if (!(wsi->ws->rsv_first_msg & 0x40) || (wsi->ws->opcode & 8)) return PMDR_DID_NOTHING; /* * we shouldn't come back in here if we already applied the * trailer for this compressed packet */ if (!wsi->ws->pmd_trailer_application) return PMDR_DID_NOTHING; pmdrx->eb_out.len = 0; lwsl_ext("%s: LWS_EXT_CB_PAYLOAD_RX: in %d, " "existing avail in %d, pkt fin: %d\n", __func__, pmdrx->eb_in.len, priv->rx.avail_in, wsi->ws->final); /* if needed, initialize the inflator */ if (!priv->rx_init) { if (inflateInit2(&priv->rx, -priv->args[PMD_SERVER_MAX_WINDOW_BITS]) != Z_OK) { lwsl_err("%s: iniflateInit failed\n", __func__); return PMDR_FAILED; } priv->rx_init = 1; if (!priv->buf_rx_inflated) priv->buf_rx_inflated = lws_malloc( LWS_PRE + 7 + 5 + (1 << priv->args[PMD_RX_BUF_PWR2]), "pmd rx inflate buf"); if (!priv->buf_rx_inflated) { lwsl_err("%s: OOM\n", __func__); return PMDR_FAILED; } } #if 0 /* * don't give us new input while we still work through * the last input */ if (priv->rx.avail_in && pmdrx->eb_in.token && pmdrx->eb_in.len) { lwsl_warn("%s: priv->rx.avail_in %d while getting new in\n", __func__, priv->rx.avail_in); // assert(0); } #endif if (!priv->rx.avail_in && pmdrx->eb_in.token && pmdrx->eb_in.len) { priv->rx.next_in = (unsigned char *)pmdrx->eb_in.token; priv->rx.avail_in = pmdrx->eb_in.len; } priv->rx.next_out = priv->buf_rx_inflated + LWS_PRE; pmdrx->eb_out.token = priv->rx.next_out; priv->rx.avail_out = 1 << priv->args[PMD_RX_BUF_PWR2]; pen = penbits = 0; deflatePending(&priv->rx, &pen, &penbits); pen |= penbits; /* so... if... * * - he has no remaining input content for this message, and * - and this is the final fragment, and * - we used everything that could be drained on the input side * * ...then put back the 00 00 FF FF the sender stripped as our * input to zlib */ if (!priv->rx.avail_in && wsi->ws->final && !wsi->ws->rx_packet_length && wsi->ws->pmd_trailer_application) { lwsl_ext("%s: trailer apply 1\n", __func__); was_fin = 1; wsi->ws->pmd_trailer_application = 0; priv->rx.next_in = trail; priv->rx.avail_in = sizeof(trail); } /* * if after all that there's nothing pending and nothing to give * him right now, bail without having done anything */ if (!priv->rx.avail_in && !pen) return PMDR_DID_NOTHING; n = inflate(&priv->rx, was_fin ? Z_SYNC_FLUSH : Z_NO_FLUSH); lwsl_ext("inflate ret %d, avi %d, avo %d, wsifinal %d\n", n, priv->rx.avail_in, priv->rx.avail_out, wsi->ws->final); switch (n) { case Z_NEED_DICT: case Z_STREAM_ERROR: case Z_DATA_ERROR: case Z_MEM_ERROR: lwsl_err("%s: zlib error inflate %d: \"%s\"\n", __func__, n, priv->rx.msg); return PMDR_FAILED; } /* * track how much input was used, and advance it */ pmdrx->eb_in.token = pmdrx->eb_in.token + (pmdrx->eb_in.len - priv->rx.avail_in); pmdrx->eb_in.len = priv->rx.avail_in; pen = penbits = 0; deflatePending(&priv->rx, &pen, &penbits); pen |= penbits; lwsl_debug("%s: %d %d %d %d %d %d\n", __func__, priv->rx.avail_in, wsi->ws->final, (int)wsi->ws->rx_packet_length, was_fin, wsi->ws->pmd_trailer_application, pen); if (!priv->rx.avail_in && wsi->ws->final && !wsi->ws->rx_packet_length && !was_fin && wsi->ws->pmd_trailer_application && !pen ) { lwsl_ext("%s: RX trailer apply 2\n", __func__); /* we overallocated just for this situation where * we might issue something */ priv->rx.avail_out += 5; was_fin = 1; wsi->ws->pmd_trailer_application = 0; priv->rx.next_in = trail; priv->rx.avail_in = sizeof(trail); n = inflate(&priv->rx, Z_SYNC_FLUSH); lwsl_ext("RX trailer infl ret %d, avi %d, avo %d\n", n, priv->rx.avail_in, priv->rx.avail_out); switch (n) { case Z_NEED_DICT: case Z_STREAM_ERROR: case Z_DATA_ERROR: case Z_MEM_ERROR: lwsl_info("zlib error inflate %d: %s\n", n, priv->rx.msg); return -1; } assert(priv->rx.avail_out); pen = penbits = 0; deflatePending(&priv->rx, &pen, &penbits); pen |= penbits; } pmdrx->eb_out.len = lws_ptr_diff(priv->rx.next_out, pmdrx->eb_out.token); priv->count_rx_between_fin += pmdrx->eb_out.len; lwsl_ext(" %s: RX leaving with new effbuff len %d, " "rx.avail_in=%d, TOTAL RX since FIN %lu\n", __func__, pmdrx->eb_out.len, priv->rx.avail_in, (unsigned long)priv->count_rx_between_fin); if (was_fin && !pen) { lwsl_ext("%s: was_fin\n", __func__); priv->count_rx_between_fin = 0; if (priv->args[PMD_SERVER_NO_CONTEXT_TAKEOVER]) { lwsl_ext("PMD_SERVER_NO_CONTEXT_TAKEOVER\n"); (void)inflateEnd(&priv->rx); priv->rx_init = 0; } return PMDR_EMPTY_FINAL; } if (pen || priv->rx.avail_in) return PMDR_HAS_PENDING; return PMDR_EMPTY_NONFINAL; case LWS_EXT_CB_PAYLOAD_TX: /* initialize us if needed */ if (!priv->tx_init) { n = deflateInit2(&priv->tx, priv->args[PMD_COMP_LEVEL], Z_DEFLATED, -priv->args[PMD_SERVER_MAX_WINDOW_BITS + (wsi->vhost->listen_port <= 0)], priv->args[PMD_MEM_LEVEL], Z_DEFAULT_STRATEGY); if (n != Z_OK) { lwsl_ext("inflateInit2 failed %d\n", n); return PMDR_FAILED; } priv->tx_init = 1; } if (!priv->buf_tx_deflated) priv->buf_tx_deflated = lws_malloc(LWS_PRE + 7 + 5 + (1 << priv->args[PMD_TX_BUF_PWR2]), "pmd tx deflate buf"); if (!priv->buf_tx_deflated) { lwsl_err("%s: OOM\n", __func__); return PMDR_FAILED; } /* hook us up with any deflated input that the caller has */ if (pmdrx->eb_in.token) { assert(!priv->tx.avail_in); priv->count_tx_between_fin += pmdrx->eb_in.len; lwsl_ext("%s: TX: eb_in length %d, " "TOTAL TX since FIN: %d\n", __func__, pmdrx->eb_in.len, (int)priv->count_tx_between_fin); priv->tx.next_in = (unsigned char *)pmdrx->eb_in.token; priv->tx.avail_in = pmdrx->eb_in.len; } priv->tx.next_out = priv->buf_tx_deflated + LWS_PRE + 5; pmdrx->eb_out.token = priv->tx.next_out; priv->tx.avail_out = 1 << priv->args[PMD_TX_BUF_PWR2]; pen = penbits = 0; deflatePending(&priv->tx, &pen, &penbits); pen |= penbits; if (!priv->tx.avail_in && (len & LWS_WRITE_NO_FIN)) { lwsl_ext("%s: no available in, pen: %u\n", __func__, pen); if (!pen) return PMDR_DID_NOTHING; } m = Z_NO_FLUSH; if (!(len & LWS_WRITE_NO_FIN)) { lwsl_ext("%s: deflate with SYNC_FLUSH, pkt len %d\n", __func__, (int)wsi->ws->rx_packet_length); m = Z_SYNC_FLUSH; } n = deflate(&priv->tx, m); if (n == Z_STREAM_ERROR) { lwsl_notice("%s: Z_STREAM_ERROR\n", __func__); return PMDR_FAILED; } pen = (!priv->tx.avail_out) && n != Z_STREAM_END; lwsl_ext("%s: deflate ret %d, len 0x%x\n", __func__, n, (unsigned int)len); if ((len & 0xf) == LWS_WRITE_TEXT) priv->tx_first_frame_type = LWSWSOPC_TEXT_FRAME; if ((len & 0xf) == LWS_WRITE_BINARY) priv->tx_first_frame_type = LWSWSOPC_BINARY_FRAME; pmdrx->eb_out.len = lws_ptr_diff(priv->tx.next_out, pmdrx->eb_out.token); if (m == Z_SYNC_FLUSH && !(len & LWS_WRITE_NO_FIN) && !pen && pmdrx->eb_out.len < 4) { lwsl_err("%s: FAIL want to trim out length %d\n", __func__, (int)pmdrx->eb_out.len); assert(0); } if (!(len & LWS_WRITE_NO_FIN) && m == Z_SYNC_FLUSH && !pen && pmdrx->eb_out.len >= 4) { // lwsl_err("%s: Trimming 4 from end of write\n", __func__); priv->tx.next_out -= 4; priv->tx.avail_out += 4; priv->count_tx_between_fin = 0; assert(priv->tx.next_out[0] == 0x00 && priv->tx.next_out[1] == 0x00 && priv->tx.next_out[2] == 0xff && priv->tx.next_out[3] == 0xff); } /* * track how much input was used and advance it */ pmdrx->eb_in.token = pmdrx->eb_in.token + (pmdrx->eb_in.len - priv->tx.avail_in); pmdrx->eb_in.len = priv->tx.avail_in; priv->compressed_out = 1; pmdrx->eb_out.len = lws_ptr_diff(priv->tx.next_out, pmdrx->eb_out.token); lwsl_ext(" TX rewritten with new eb_in len %d, " "eb_out len %d, deflatePending %d\n", pmdrx->eb_in.len, pmdrx->eb_out.len, pen); if (pmdrx->eb_in.len || pen) return PMDR_HAS_PENDING; if (!(len & LWS_WRITE_NO_FIN)) return PMDR_EMPTY_FINAL; return PMDR_EMPTY_NONFINAL; case LWS_EXT_CB_PACKET_TX_PRESEND: if (!priv->compressed_out) break; priv->compressed_out = 0; /* * we may have not produced any output for the actual "first" * write... in that case, we need to fix up the inappropriate * use of CONTINUATION when the first real write does come. */ if (priv->tx_first_frame_type & 0xf) { *pmdrx->eb_in.token = ((*pmdrx->eb_in.token) & ~0xf) | (priv->tx_first_frame_type & 0xf); /* * We have now written the "first" fragment, only * do that once */ priv->tx_first_frame_type = 0; } n = *(pmdrx->eb_in.token) & 15; /* set RSV1, but not on CONTINUATION */ if (n == LWSWSOPC_TEXT_FRAME || n == LWSWSOPC_BINARY_FRAME) *pmdrx->eb_in.token |= 0x40; lwsl_ext("%s: PRESEND compressed: ws frame 0x%02X, len %d\n", __func__, ((*pmdrx->eb_in.token) & 0xff), pmdrx->eb_in.len); if (((*pmdrx->eb_in.token) & 0x80) && /* fin */ priv->args[PMD_CLIENT_NO_CONTEXT_TAKEOVER]) { lwsl_debug("PMD_CLIENT_NO_CONTEXT_TAKEOVER\n"); (void)deflateEnd(&priv->tx); priv->tx_init = 0; } break; default: break; } return 0; } libwebsockets-3.2.1/lib/roles/ws/ext/extension-permessage-deflate.h000066400000000000000000000016121357643561300254350ustar00rootroot00000000000000 #if defined(LWS_WITH_MINIZ) #include #else #include #endif #define DEFLATE_FRAME_COMPRESSION_LEVEL_SERVER 1 #define DEFLATE_FRAME_COMPRESSION_LEVEL_CLIENT Z_DEFAULT_COMPRESSION enum arg_indexes { PMD_SERVER_NO_CONTEXT_TAKEOVER, PMD_CLIENT_NO_CONTEXT_TAKEOVER, PMD_SERVER_MAX_WINDOW_BITS, PMD_CLIENT_MAX_WINDOW_BITS, PMD_RX_BUF_PWR2, PMD_TX_BUF_PWR2, PMD_COMP_LEVEL, PMD_MEM_LEVEL, PMD_ARG_COUNT }; struct lws_ext_pm_deflate_priv { z_stream rx; z_stream tx; unsigned char *buf_rx_inflated; /* RX inflated output buffer */ unsigned char *buf_tx_deflated; /* TX deflated output buffer */ unsigned char *buf_tx_holding; size_t count_rx_between_fin; size_t count_tx_between_fin; size_t len_tx_holding; unsigned char args[PMD_ARG_COUNT]; unsigned char tx_first_frame_type; unsigned char tx_init:1; unsigned char rx_init:1; unsigned char compressed_out:1; }; libwebsockets-3.2.1/lib/roles/ws/ext/extension.c000066400000000000000000000163121357643561300217000ustar00rootroot00000000000000#include "core/private.h" #include "extension-permessage-deflate.h" LWS_VISIBLE void lws_context_init_extensions(const struct lws_context_creation_info *info, struct lws_context *context) { lwsl_info(" LWS_MAX_EXTENSIONS_ACTIVE: %u\n", LWS_MAX_EXTENSIONS_ACTIVE); } enum lws_ext_option_parser_states { LEAPS_SEEK_NAME, LEAPS_EAT_NAME, LEAPS_SEEK_VAL, LEAPS_EAT_DEC, LEAPS_SEEK_ARG_TERM }; LWS_VISIBLE int lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi, void *ext_user, const struct lws_ext_options *opts, const char *in, int len) { enum lws_ext_option_parser_states leap = LEAPS_SEEK_NAME; unsigned int match_map = 0, n, m, w = 0, count_options = 0, pending_close_quote = 0; struct lws_ext_option_arg oa; oa.option_name = NULL; while (opts[count_options].name) count_options++; while (len) { lwsl_ext("'%c' %d", *in, leap); switch (leap) { case LEAPS_SEEK_NAME: if (*in == ' ') break; if (*in == ',') { len = 1; break; } match_map = (1 << count_options) - 1; leap = LEAPS_EAT_NAME; w = 0; /* fallthru */ case LEAPS_EAT_NAME: oa.start = NULL; oa.len = 0; m = match_map; n = 0; pending_close_quote = 0; while (m) { if (!(m & 1)) { m >>= 1; n++; continue; } lwsl_ext(" m=%d, n=%d, w=%d\n", m, n, w); if (*in == opts[n].name[w]) { if (!opts[n].name[w + 1]) { oa.option_index = n; lwsl_ext("hit %d\n", oa.option_index); leap = LEAPS_SEEK_VAL; if (len == 1) goto set_arg; break; } } else { match_map &= ~(1 << n); if (!match_map) { lwsl_ext("empty match map\n"); return -1; } } m >>= 1; n++; } w++; break; case LEAPS_SEEK_VAL: if (*in == ' ') break; if (*in == ',') { len = 1; break; } if (*in == ';' || len == 1) { /* ie,nonoptional */ if (opts[oa.option_index].type == EXTARG_DEC) return -1; leap = LEAPS_SEEK_NAME; goto set_arg; } if (*in == '=') { w = 0; pending_close_quote = 0; if (opts[oa.option_index].type == EXTARG_NONE) return -1; leap = LEAPS_EAT_DEC; break; } return -1; case LEAPS_EAT_DEC: if (*in >= '0' && *in <= '9') { if (!w) oa.start = in; w++; if (len != 1) break; } if (!w && *in =='"') { pending_close_quote = 1; break; } if (!w) return -1; if (pending_close_quote && *in != '"' && len != 1) return -1; leap = LEAPS_SEEK_ARG_TERM; if (oa.start) oa.len = lws_ptr_diff(in, oa.start); if (len == 1) oa.len++; set_arg: ext->callback(lws_get_context(wsi), ext, wsi, LWS_EXT_CB_OPTION_SET, ext_user, (char *)&oa, 0); if (len == 1) break; if (pending_close_quote && *in == '"') break; /* fallthru */ case LEAPS_SEEK_ARG_TERM: if (*in == ' ') break; if (*in == ';') { leap = LEAPS_SEEK_NAME; break; } if (*in == ',') { len = 1; break; } return -1; } len--; in++; } return 0; } /* 0 = nobody had nonzero return, 1 = somebody had positive return, -1 = fail */ int lws_ext_cb_active(struct lws *wsi, int reason, void *arg, int len) { int n, m, handled = 0; if (!wsi->ws) return 0; for (n = 0; n < wsi->ws->count_act_ext; n++) { m = wsi->ws->active_extensions[n]->callback( lws_get_context(wsi), wsi->ws->active_extensions[n], wsi, reason, wsi->ws->act_ext_user[n], arg, len); if (m < 0) { lwsl_ext("Ext '%s' failed to handle callback %d!\n", wsi->ws->active_extensions[n]->name, reason); return -1; } /* valgrind... */ if (reason == LWS_EXT_CB_DESTROY) wsi->ws->act_ext_user[n] = NULL; if (m > handled) handled = m; } return handled; } int lws_ext_cb_all_exts(struct lws_context *context, struct lws *wsi, int reason, void *arg, int len) { int n = 0, m, handled = 0; const struct lws_extension *ext; if (!wsi || !wsi->vhost || !wsi->ws) return 0; ext = wsi->vhost->ws.extensions; while (ext && ext->callback && !handled) { m = ext->callback(context, ext, wsi, reason, (void *)(lws_intptr_t)n, arg, len); if (m < 0) { lwsl_ext("Ext '%s' failed to handle callback %d!\n", wsi->ws->active_extensions[n]->name, reason); return -1; } if (m) handled = 1; ext++; n++; } return 0; } int lws_issue_raw_ext_access(struct lws *wsi, unsigned char *buf, size_t len) { struct lws_tokens ebuf; int ret, m, n = 0; ebuf.token = buf; ebuf.len = (int)len; /* * while we have original buf to spill ourselves, or extensions report * more in their pipeline */ ret = 1; while (ret == 1) { /* default to nobody has more to spill */ ret = 0; /* show every extension the new incoming data */ m = lws_ext_cb_active(wsi, LWS_EXT_CB_PACKET_TX_PRESEND, &ebuf, 0); if (m < 0) return -1; if (m) /* handled */ ret = 1; if (buf != ebuf.token) /* * extension recreated it: * need to buffer this if not all sent */ wsi->ws->clean_buffer = 0; /* assuming they left us something to send, send it */ if (ebuf.len) { n = lws_issue_raw(wsi, ebuf.token, ebuf.len); if (n < 0) { lwsl_info("closing from ext access\n"); return -1; } /* always either sent it all or privately buffered */ if (wsi->ws->clean_buffer) len = n; lwsl_ext("%s: written %d bytes to client\n", __func__, n); } /* no extension has more to spill? Then we can go */ if (!ret) break; /* we used up what we had */ ebuf.token = NULL; ebuf.len = 0; /* * Did that leave the pipe choked? * Or we had to hold on to some of it? */ if (!lws_send_pipe_choked(wsi) && !lws_has_buffered_out(wsi)) /* no we could add more, lets's do that */ continue; lwsl_debug("choked\n"); /* * Yes, he's choked. Don't spill the rest now get a callback * when he is ready to send and take care of it there */ lws_callback_on_writable(wsi); wsi->ws->extension_data_pending = 1; ret = 0; } return (int)len; } int lws_any_extension_handled(struct lws *wsi, enum lws_extension_callback_reasons r, void *v, size_t len) { struct lws_context *context = wsi->context; int n, handled = 0; if (!wsi->ws) return 0; /* maybe an extension will take care of it for us */ for (n = 0; n < wsi->ws->count_act_ext && !handled; n++) { if (!wsi->ws->active_extensions[n]->callback) continue; handled |= wsi->ws->active_extensions[n]->callback(context, wsi->ws->active_extensions[n], wsi, r, wsi->ws->act_ext_user[n], v, len); } return handled; } int lws_set_extension_option(struct lws *wsi, const char *ext_name, const char *opt_name, const char *opt_val) { struct lws_ext_option_arg oa; int idx = 0; if (!wsi->ws) return 0; /* first identify if the ext is active on this wsi */ while (idx < wsi->ws->count_act_ext && strcmp(wsi->ws->active_extensions[idx]->name, ext_name)) idx++; if (idx == wsi->ws->count_act_ext) return -1; /* request ext not active on this wsi */ oa.option_name = opt_name; oa.option_index = 0; oa.start = opt_val; oa.len = 0; return wsi->ws->active_extensions[idx]->callback(wsi->context, wsi->ws->active_extensions[idx], wsi, LWS_EXT_CB_NAMED_OPTION_SET, wsi->ws->act_ext_user[idx], &oa, 0); } libwebsockets-3.2.1/lib/roles/ws/ops-ws.c000066400000000000000000001557031357643561300203240ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include #define LWS_CPYAPP(ptr, str) { strcpy(ptr, str); ptr += strlen(str); } /* * client-parser.c: lws_ws_client_rx_sm() needs to be roughly kept in * sync with changes here, esp related to ext draining */ int lws_ws_rx_sm(struct lws *wsi, char already_processed, unsigned char c) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; int callback_action = LWS_CALLBACK_RECEIVE; struct lws_ext_pm_deflate_rx_ebufs pmdrx; unsigned short close_code; unsigned char *pp; int ret = 0; int n = 0; #if !defined(LWS_WITHOUT_EXTENSIONS) int rx_draining_ext = 0; int lin; #endif pmdrx.eb_in.token = NULL; pmdrx.eb_in.len = 0; pmdrx.eb_out.token = NULL; pmdrx.eb_out.len = 0; if (wsi->socket_is_permanently_unusable) return -1; switch (wsi->lws_rx_parse_state) { case LWS_RXPS_NEW: #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->rx_draining_ext) { pmdrx.eb_in.token = NULL; pmdrx.eb_in.len = 0; pmdrx.eb_out.token = NULL; pmdrx.eb_out.len = 0; lws_remove_wsi_from_draining_ext_list(wsi); rx_draining_ext = 1; lwsl_debug("%s: doing draining flow\n", __func__); goto drain_extension; } #endif switch (wsi->ws->ietf_spec_revision) { case 13: /* * no prepended frame key any more */ wsi->ws->all_zero_nonce = 1; goto handle_first; default: lwsl_warn("lws_ws_rx_sm: unknown spec version %d\n", wsi->ws->ietf_spec_revision); break; } break; case LWS_RXPS_04_mask_1: wsi->ws->mask[1] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_04_mask_2; break; case LWS_RXPS_04_mask_2: wsi->ws->mask[2] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_04_mask_3; break; case LWS_RXPS_04_mask_3: wsi->ws->mask[3] = c; if (c) wsi->ws->all_zero_nonce = 0; /* * start from the zero'th byte in the XOR key buffer since * this is the start of a frame with a new key */ wsi->ws->mask_idx = 0; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_1; break; /* * 04 logical framing from the spec (all this is masked when incoming * and has to be unmasked) * * We ignore the possibility of extension data because we don't * negotiate any extensions at the moment. * * 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-------+-+-------------+-------------------------------+ * |F|R|R|R| opcode|R| Payload len | Extended payload length | * |I|S|S|S| (4) |S| (7) | (16/63) | * |N|V|V|V| |V| | (if payload len==126/127) | * | |1|2|3| |4| | | * +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - + * | Extended payload length continued, if payload len == 127 | * + - - - - - - - - - - - - - - - +-------------------------------+ * | | Extension data | * +-------------------------------+ - - - - - - - - - - - - - - - + * : : * +---------------------------------------------------------------+ * : Application data : * +---------------------------------------------------------------+ * * We pass payload through to userland as soon as we get it, ignoring * FIN. It's up to userland to buffer it up if it wants to see a * whole unfragmented block of the original size (which may be up to * 2^63 long!) */ case LWS_RXPS_04_FRAME_HDR_1: handle_first: wsi->ws->opcode = c & 0xf; wsi->ws->rsv = c & 0x70; wsi->ws->final = !!((c >> 7) & 1); wsi->ws->defeat_check_utf8 = 0; if (((wsi->ws->opcode) & 8) && !wsi->ws->final) { lws_close_reason(wsi, LWS_CLOSE_STATUS_PROTOCOL_ERR, (uint8_t *)"frag ctl", 8); return -1; } switch (wsi->ws->opcode) { case LWSWSOPC_TEXT_FRAME: wsi->ws->check_utf8 = lws_check_opt( wsi->context->options, LWS_SERVER_OPTION_VALIDATE_UTF8); /* fallthru */ case LWSWSOPC_BINARY_FRAME: if (wsi->ws->opcode == LWSWSOPC_BINARY_FRAME) wsi->ws->check_utf8 = 0; if (wsi->ws->continuation_possible) { lws_close_reason(wsi, LWS_CLOSE_STATUS_PROTOCOL_ERR, (uint8_t *)"bad cont", 8); return -1; } wsi->ws->rsv_first_msg = (c & 0x70); #if !defined(LWS_WITHOUT_EXTENSIONS) /* * set the expectation that we will have to * fake up the zlib trailer to the inflator for this * frame */ wsi->ws->pmd_trailer_application = !!(c & 0x40); #endif wsi->ws->frame_is_binary = wsi->ws->opcode == LWSWSOPC_BINARY_FRAME; wsi->ws->first_fragment = 1; wsi->ws->continuation_possible = !wsi->ws->final; break; case LWSWSOPC_CONTINUATION: if (!wsi->ws->continuation_possible) { lws_close_reason(wsi, LWS_CLOSE_STATUS_PROTOCOL_ERR, (uint8_t *)"bad cont", 8); return -1; } break; case LWSWSOPC_CLOSE: wsi->ws->check_utf8 = 0; wsi->ws->utf8 = 0; break; case 3: case 4: case 5: case 6: case 7: case 0xb: case 0xc: case 0xd: case 0xe: case 0xf: lws_close_reason(wsi, LWS_CLOSE_STATUS_PROTOCOL_ERR, (uint8_t *)"bad opc", 7); lwsl_info("illegal opcode\n"); return -1; } if (wsi->ws->owed_a_fin && (wsi->ws->opcode == LWSWSOPC_TEXT_FRAME || wsi->ws->opcode == LWSWSOPC_BINARY_FRAME)) { lwsl_info("hey you owed us a FIN\n"); lws_close_reason(wsi, LWS_CLOSE_STATUS_PROTOCOL_ERR, (uint8_t *)"bad fin", 7); return -1; } if ((!(wsi->ws->opcode & 8)) && wsi->ws->final) { wsi->ws->continuation_possible = 0; wsi->ws->owed_a_fin = 0; } if (!wsi->ws->final) wsi->ws->owed_a_fin = 1; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN; if (wsi->ws->rsv && ( #if !defined(LWS_WITHOUT_EXTENSIONS) !wsi->ws->count_act_ext || #endif (wsi->ws->rsv & ~0x40))) { lws_close_reason(wsi, LWS_CLOSE_STATUS_PROTOCOL_ERR, (uint8_t *)"rsv bits", 8); return -1; } break; case LWS_RXPS_04_FRAME_HDR_LEN: wsi->ws->this_frame_masked = !!(c & 0x80); switch (c & 0x7f) { case 126: /* control frames are not allowed to have big lengths */ if (wsi->ws->opcode & 8) goto illegal_ctl_length; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN16_2; break; case 127: /* control frames are not allowed to have big lengths */ if (wsi->ws->opcode & 8) goto illegal_ctl_length; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_8; break; default: wsi->ws->rx_packet_length = c & 0x7f; if (wsi->ws->this_frame_masked) wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_1; else if (wsi->ws->rx_packet_length) { wsi->lws_rx_parse_state = LWS_RXPS_WS_FRAME_PAYLOAD; } else { wsi->lws_rx_parse_state = LWS_RXPS_NEW; goto spill; } break; } break; case LWS_RXPS_04_FRAME_HDR_LEN16_2: wsi->ws->rx_packet_length = c << 8; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN16_1; break; case LWS_RXPS_04_FRAME_HDR_LEN16_1: wsi->ws->rx_packet_length |= c; if (wsi->ws->this_frame_masked) wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_1; else { wsi->lws_rx_parse_state = LWS_RXPS_WS_FRAME_PAYLOAD; } break; case LWS_RXPS_04_FRAME_HDR_LEN64_8: if (c & 0x80) { lwsl_warn("b63 of length must be zero\n"); /* kill the connection */ return -1; } #if defined __LP64__ wsi->ws->rx_packet_length = ((size_t)c) << 56; #else wsi->ws->rx_packet_length = 0; #endif wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_7; break; case LWS_RXPS_04_FRAME_HDR_LEN64_7: #if defined __LP64__ wsi->ws->rx_packet_length |= ((size_t)c) << 48; #endif wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_6; break; case LWS_RXPS_04_FRAME_HDR_LEN64_6: #if defined __LP64__ wsi->ws->rx_packet_length |= ((size_t)c) << 40; #endif wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_5; break; case LWS_RXPS_04_FRAME_HDR_LEN64_5: #if defined __LP64__ wsi->ws->rx_packet_length |= ((size_t)c) << 32; #endif wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_4; break; case LWS_RXPS_04_FRAME_HDR_LEN64_4: wsi->ws->rx_packet_length |= ((size_t)c) << 24; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_3; break; case LWS_RXPS_04_FRAME_HDR_LEN64_3: wsi->ws->rx_packet_length |= ((size_t)c) << 16; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_2; break; case LWS_RXPS_04_FRAME_HDR_LEN64_2: wsi->ws->rx_packet_length |= ((size_t)c) << 8; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_1; break; case LWS_RXPS_04_FRAME_HDR_LEN64_1: wsi->ws->rx_packet_length |= ((size_t)c); if (wsi->ws->this_frame_masked) wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_1; else wsi->lws_rx_parse_state = LWS_RXPS_WS_FRAME_PAYLOAD; break; case LWS_RXPS_07_COLLECT_FRAME_KEY_1: wsi->ws->mask[0] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_2; break; case LWS_RXPS_07_COLLECT_FRAME_KEY_2: wsi->ws->mask[1] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_3; break; case LWS_RXPS_07_COLLECT_FRAME_KEY_3: wsi->ws->mask[2] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_4; break; case LWS_RXPS_07_COLLECT_FRAME_KEY_4: wsi->ws->mask[3] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_WS_FRAME_PAYLOAD; wsi->ws->mask_idx = 0; if (wsi->ws->rx_packet_length == 0) { wsi->lws_rx_parse_state = LWS_RXPS_NEW; goto spill; } break; case LWS_RXPS_WS_FRAME_PAYLOAD: assert(wsi->ws->rx_ubuf); if (wsi->ws->rx_ubuf_head + LWS_PRE >= wsi->ws->rx_ubuf_alloc) { lwsl_err("Attempted overflow \n"); return -1; } if (!(already_processed & ALREADY_PROCESSED_IGNORE_CHAR)) { if (wsi->ws->all_zero_nonce) wsi->ws->rx_ubuf[LWS_PRE + (wsi->ws->rx_ubuf_head++)] = c; else wsi->ws->rx_ubuf[LWS_PRE + (wsi->ws->rx_ubuf_head++)] = c ^ wsi->ws->mask[(wsi->ws->mask_idx++) & 3]; --wsi->ws->rx_packet_length; } if (!wsi->ws->rx_packet_length) { lwsl_debug("%s: ws fragment length exhausted\n", __func__); /* spill because we have the whole frame */ wsi->lws_rx_parse_state = LWS_RXPS_NEW; goto spill; } #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->rx_draining_ext) { lwsl_debug("%s: UNTIL_EXHAUSTED draining\n", __func__); goto drain_extension; } #endif /* * if there's no protocol max frame size given, we are * supposed to default to context->pt_serv_buf_size */ if (!wsi->protocol->rx_buffer_size && wsi->ws->rx_ubuf_head != wsi->context->pt_serv_buf_size) break; if (wsi->protocol->rx_buffer_size && wsi->ws->rx_ubuf_head != wsi->protocol->rx_buffer_size) break; /* spill because we filled our rx buffer */ spill: /* * is this frame a control packet we should take care of at this * layer? If so service it and hide it from the user callback */ lwsl_parser("spill on %s\n", wsi->protocol->name); switch (wsi->ws->opcode) { case LWSWSOPC_CLOSE: if (wsi->ws->peer_has_sent_close) break; wsi->ws->peer_has_sent_close = 1; pp = &wsi->ws->rx_ubuf[LWS_PRE]; if (lws_check_opt(wsi->context->options, LWS_SERVER_OPTION_VALIDATE_UTF8) && wsi->ws->rx_ubuf_head > 2 && lws_check_utf8(&wsi->ws->utf8, pp + 2, wsi->ws->rx_ubuf_head - 2)) goto utf8_fail; /* is this an acknowledgment of our close? */ if (lwsi_state(wsi) == LRS_AWAITING_CLOSE_ACK) { /* * fine he has told us he is closing too, let's * finish our close */ lwsl_parser("seen client close ack\n"); return -1; } if (lwsi_state(wsi) == LRS_RETURNED_CLOSE) /* if he sends us 2 CLOSE, kill him */ return -1; if (lws_partial_buffered(wsi)) { /* * if we're in the middle of something, * we can't do a normal close response and * have to just close our end. */ wsi->socket_is_permanently_unusable = 1; lwsl_parser("Closing on peer close " "due to pending tx\n"); return -1; } if (wsi->ws->rx_ubuf_head >= 2) { close_code = (pp[0] << 8) | pp[1]; if (close_code < 1000 || close_code == 1004 || close_code == 1005 || close_code == 1006 || close_code == 1012 || close_code == 1013 || close_code == 1014 || close_code == 1015 || (close_code >= 1016 && close_code < 3000) ) { pp[0] = (LWS_CLOSE_STATUS_PROTOCOL_ERR >> 8) & 0xff; pp[1] = LWS_CLOSE_STATUS_PROTOCOL_ERR & 0xff; } } if (user_callback_handle_rxflow( wsi->protocol->callback, wsi, LWS_CALLBACK_WS_PEER_INITIATED_CLOSE, wsi->user_space, &wsi->ws->rx_ubuf[LWS_PRE], wsi->ws->rx_ubuf_head)) return -1; lwsl_parser("server sees client close packet\n"); lwsi_set_state(wsi, LRS_RETURNED_CLOSE); /* deal with the close packet contents as a PONG */ wsi->ws->payload_is_close = 1; goto process_as_ping; case LWSWSOPC_PING: lwsl_info("received %d byte ping, sending pong\n", wsi->ws->rx_ubuf_head); if (wsi->ws->ping_pending_flag) { /* * there is already a pending ping payload * we should just log and drop */ lwsl_parser("DROP PING since one pending\n"); goto ping_drop; } process_as_ping: /* control packets can only be < 128 bytes long */ if (wsi->ws->rx_ubuf_head > 128 - 3) { lwsl_parser("DROP PING payload too large\n"); goto ping_drop; } /* stash the pong payload */ memcpy(wsi->ws->ping_payload_buf + LWS_PRE, &wsi->ws->rx_ubuf[LWS_PRE], wsi->ws->rx_ubuf_head); wsi->ws->ping_payload_len = wsi->ws->rx_ubuf_head; wsi->ws->ping_pending_flag = 1; /* get it sent as soon as possible */ lws_callback_on_writable(wsi); ping_drop: wsi->ws->rx_ubuf_head = 0; return 0; case LWSWSOPC_PONG: lwsl_info("received pong\n"); lwsl_hexdump(&wsi->ws->rx_ubuf[LWS_PRE], wsi->ws->rx_ubuf_head); if (wsi->ws->await_pong) { lwsl_info("received expected PONG on wsi %p\n", wsi); lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); wsi->ws->await_pong = 0; /* * prepare to send the ping again if nothing * sent to countermand it */ __lws_sul_insert(&pt->pt_sul_owner, &wsi->sul_ping, (lws_usec_t)wsi->context->ws_ping_pong_interval * LWS_USEC_PER_SEC); } /* issue it */ callback_action = LWS_CALLBACK_RECEIVE_PONG; break; case LWSWSOPC_TEXT_FRAME: case LWSWSOPC_BINARY_FRAME: case LWSWSOPC_CONTINUATION: break; default: lwsl_parser("unknown opc %x\n", wsi->ws->opcode); return -1; } /* * No it's real payload, pass it up to the user callback. * * We have been statefully collecting it in the * LWS_RXPS_WS_FRAME_PAYLOAD clause above. * * It's nicely buffered with the pre-padding taken care of * so it can be sent straight out again using lws_write. * * However, now we have a chunk of it, we want to deal with it * all here. Since this may be input to permessage-deflate and * there are block limits on that for input and output, we may * need to iterate. */ pmdrx.eb_in.token = &wsi->ws->rx_ubuf[LWS_PRE]; pmdrx.eb_in.len = wsi->ws->rx_ubuf_head; /* for the non-pm-deflate case */ pmdrx.eb_out = pmdrx.eb_in; if (wsi->ws->opcode == LWSWSOPC_PONG && !pmdrx.eb_in.len) goto already_done; #if !defined(LWS_WITHOUT_EXTENSIONS) drain_extension: #endif do { // lwsl_notice("%s: pmdrx.eb_in.len: %d\n", __func__, // (int)pmdrx.eb_in.len); if (lwsi_state(wsi) == LRS_RETURNED_CLOSE || lwsi_state(wsi) == LRS_AWAITING_CLOSE_ACK) goto already_done; n = PMDR_DID_NOTHING; #if !defined(LWS_WITHOUT_EXTENSIONS) lin = pmdrx.eb_in.len; //if (lin) // lwsl_hexdump_notice(ebuf.token, ebuf.len); lwsl_ext("%s: +++ passing %d %p to ext\n", __func__, pmdrx.eb_in.len, pmdrx.eb_in.token); n = lws_ext_cb_active(wsi, LWS_EXT_CB_PAYLOAD_RX, &pmdrx, 0); lwsl_debug("%s: ext says %d / ebuf.len %d\n", __func__, n, pmdrx.eb_out.len); if (wsi->ws->rx_draining_ext) already_processed &= ~ALREADY_PROCESSED_NO_CB; #endif /* * ebuf may be pointing somewhere completely different * now, it's the output */ #if !defined(LWS_WITHOUT_EXTENSIONS) if (n < 0) { /* * we may rely on this to get RX, just drop * connection */ wsi->socket_is_permanently_unusable = 1; return -1; } if (n == PMDR_DID_NOTHING) break; #endif lwsl_debug("%s: post ext ret %d, ebuf in %d / out %d\n", __func__, n, pmdrx.eb_in.len, pmdrx.eb_out.len); #if !defined(LWS_WITHOUT_EXTENSIONS) if (rx_draining_ext && !pmdrx.eb_out.len) { lwsl_debug(" --- ending drain on 0 read\n"); goto already_done; } if (n == PMDR_HAS_PENDING) /* * extension had more... * main loop will come back */ lws_add_wsi_to_draining_ext_list(wsi); else lws_remove_wsi_from_draining_ext_list(wsi); rx_draining_ext = wsi->ws->rx_draining_ext; #endif if (pmdrx.eb_out.len && wsi->ws->check_utf8 && !wsi->ws->defeat_check_utf8) { if (lws_check_utf8(&wsi->ws->utf8, pmdrx.eb_out.token, pmdrx.eb_out.len)) { lws_close_reason(wsi, LWS_CLOSE_STATUS_INVALID_PAYLOAD, (uint8_t *)"bad utf8", 8); goto utf8_fail; } /* we are ending partway through utf-8 character? */ if (!wsi->ws->rx_packet_length && wsi->ws->final && wsi->ws->utf8 #if !defined(LWS_WITHOUT_EXTENSIONS) /* if ext not negotiated, going to be UNKNOWN */ && (n == PMDR_EMPTY_FINAL || n == PMDR_UNKNOWN) #endif ) { lwsl_info("FINAL utf8 error\n"); lws_close_reason(wsi, LWS_CLOSE_STATUS_INVALID_PAYLOAD, (uint8_t *)"partial utf8", 12); utf8_fail: lwsl_notice("utf8 error\n"); lwsl_hexdump_notice(pmdrx.eb_out.token, pmdrx.eb_out.len); return -1; } } /* if pmd not enabled, in == out */ if (n == PMDR_DID_NOTHING #if !defined(LWS_WITHOUT_EXTENSIONS) || n == PMDR_UNKNOWN #endif ) pmdrx.eb_in.len -= pmdrx.eb_out.len; if (!wsi->wsistate_pre_close && (pmdrx.eb_out.len >= 0 || callback_action == LWS_CALLBACK_RECEIVE_PONG || n == PMDR_EMPTY_FINAL)) { if (pmdrx.eb_out.len) pmdrx.eb_out.token[pmdrx.eb_out.len] = '\0'; if (wsi->protocol->callback && !(already_processed & ALREADY_PROCESSED_NO_CB)) { if (callback_action == LWS_CALLBACK_RECEIVE_PONG) lwsl_info("Doing pong callback\n"); ret = user_callback_handle_rxflow( wsi->protocol->callback, wsi, (enum lws_callback_reasons) callback_action, wsi->user_space, pmdrx.eb_out.token, pmdrx.eb_out.len); } wsi->ws->first_fragment = 0; } #if !defined(LWS_WITHOUT_EXTENSIONS) if (!lin) break; #endif } while (pmdrx.eb_in.len #if !defined(LWS_WITHOUT_EXTENSIONS) || rx_draining_ext #endif ); already_done: wsi->ws->rx_ubuf_head = 0; break; } return ret; illegal_ctl_length: lwsl_warn("Control frame with xtended length is illegal\n"); /* kill the connection */ return -1; } LWS_VISIBLE size_t lws_remaining_packet_payload(struct lws *wsi) { return wsi->ws->rx_packet_length; } LWS_VISIBLE int lws_frame_is_binary(struct lws *wsi) { return wsi->ws->frame_is_binary; } void lws_add_wsi_to_draining_ext_list(struct lws *wsi) { #if !defined(LWS_WITHOUT_EXTENSIONS) struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; if (wsi->ws->rx_draining_ext) return; lwsl_debug("%s: RX EXT DRAINING: Adding to list\n", __func__); wsi->ws->rx_draining_ext = 1; wsi->ws->rx_draining_ext_list = pt->ws.rx_draining_ext_list; pt->ws.rx_draining_ext_list = wsi; #endif } void lws_remove_wsi_from_draining_ext_list(struct lws *wsi) { #if !defined(LWS_WITHOUT_EXTENSIONS) struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; struct lws **w = &pt->ws.rx_draining_ext_list; if (!wsi->ws->rx_draining_ext) return; lwsl_debug("%s: RX EXT DRAINING: Removing from list\n", __func__); wsi->ws->rx_draining_ext = 0; /* remove us from context draining ext list */ while (*w) { if (*w == wsi) { /* if us, point it instead to who we were pointing to */ *w = wsi->ws->rx_draining_ext_list; break; } w = &((*w)->ws->rx_draining_ext_list); } wsi->ws->rx_draining_ext_list = NULL; #endif } static int lws_0405_frame_mask_generate(struct lws *wsi) { int n; /* fetch the per-frame nonce */ n = lws_get_random(lws_get_context(wsi), wsi->ws->mask, 4); if (n != 4) { lwsl_parser("Unable to read from random device %s %d\n", SYSTEM_RANDOM_FILEPATH, n); return 1; } /* start masking from first byte of masking key buffer */ wsi->ws->mask_idx = 0; return 0; } void lws_sul_wsping_cb(lws_sorted_usec_list_t *sul) { struct lws *wsi = lws_container_of(sul, struct lws, sul_ping); if (!wsi->ws) return; /* * The sul_ping timer came up... either it's time to send a PING * (!wsi->ws->send_check_ping), or we didn't get the PONG in time * (wsi->ws->send_check_ping) */ if (!wsi->ws->send_check_ping) { lwsl_info("%s: req pp on wsi %p\n", __func__, wsi); wsi->ws->send_check_ping = 1; lws_set_timeout(wsi, PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING, wsi->context->timeout_secs); lws_callback_on_writable(wsi); return; } if (wsi->ws->await_pong) { /* it didn't return the PONG in time */ lwsl_info("%s: wsi %p: failed to send PONG\n", __func__, wsi); __lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "PONG timeout"); } } int lws_server_init_wsi_for_ws(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; int n; lwsi_set_state(wsi, LRS_ESTABLISHED); if (wsi->context->ws_ping_pong_interval && !wsi->http2_substream ) { wsi->sul_ping.cb = lws_sul_wsping_cb; __lws_sul_insert(&pt->pt_sul_owner, &wsi->sul_ping, (lws_usec_t)wsi->context->ws_ping_pong_interval * LWS_USEC_PER_SEC); } /* * create the frame buffer for this connection according to the * size mentioned in the protocol definition. If 0 there, use * a big default for compatibility */ n = (int)wsi->protocol->rx_buffer_size; if (!n) n = wsi->context->pt_serv_buf_size; n += LWS_PRE; wsi->ws->rx_ubuf = lws_malloc(n + 4 /* 0x0000ffff zlib */, "rx_ubuf"); if (!wsi->ws->rx_ubuf) { lwsl_err("Out of Mem allocating rx buffer %d\n", n); return 1; } wsi->ws->rx_ubuf_alloc = n; lwsl_debug("Allocating RX buffer %d\n", n); #if !defined(LWS_WITH_ESP32) if (!wsi->h2_stream_carries_ws) if (setsockopt(wsi->desc.sockfd, SOL_SOCKET, SO_SNDBUF, (const char *)&n, sizeof n)) { lwsl_warn("Failed to set SNDBUF to %d", n); return 1; } #endif /* notify user code that we're ready to roll */ if (wsi->protocol->callback) if (wsi->protocol->callback(wsi, LWS_CALLBACK_ESTABLISHED, wsi->user_space, #ifdef LWS_WITH_TLS wsi->tls.ssl, #else NULL, #endif wsi->h2_stream_carries_ws)) return 1; lwsl_debug("ws established\n"); return 0; } LWS_VISIBLE int lws_is_final_fragment(struct lws *wsi) { #if !defined(LWS_WITHOUT_EXTENSIONS) lwsl_debug("%s: final %d, rx pk length %ld, draining %ld\n", __func__, wsi->ws->final, (long)wsi->ws->rx_packet_length, (long)wsi->ws->rx_draining_ext); return wsi->ws->final && !wsi->ws->rx_packet_length && !wsi->ws->rx_draining_ext; #else return wsi->ws->final && !wsi->ws->rx_packet_length; #endif } LWS_VISIBLE int lws_is_first_fragment(struct lws *wsi) { return wsi->ws->first_fragment; } LWS_VISIBLE unsigned char lws_get_reserved_bits(struct lws *wsi) { return wsi->ws->rsv; } LWS_VISIBLE LWS_EXTERN int lws_get_close_length(struct lws *wsi) { return wsi->ws->close_in_ping_buffer_len; } LWS_VISIBLE LWS_EXTERN unsigned char * lws_get_close_payload(struct lws *wsi) { return &wsi->ws->ping_payload_buf[LWS_PRE]; } LWS_VISIBLE LWS_EXTERN void lws_close_reason(struct lws *wsi, enum lws_close_status status, unsigned char *buf, size_t len) { unsigned char *p, *start; int budget = sizeof(wsi->ws->ping_payload_buf) - LWS_PRE; assert(lwsi_role_ws(wsi)); start = p = &wsi->ws->ping_payload_buf[LWS_PRE]; *p++ = (((int)status) >> 8) & 0xff; *p++ = ((int)status) & 0xff; if (buf) while (len-- && p < start + budget) *p++ = *buf++; wsi->ws->close_in_ping_buffer_len = lws_ptr_diff(p, start); } static int lws_is_ws_with_ext(struct lws *wsi) { #if defined(LWS_WITHOUT_EXTENSIONS) return 0; #else return lwsi_role_ws(wsi) && !!wsi->ws->count_act_ext; #endif } static int rops_handle_POLLIN_ws(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { unsigned int pending = 0; struct lws_tokens ebuf; char buffered = 0; int n = 0, m; #if defined(LWS_WITH_HTTP2) struct lws *wsi1; #endif if (!wsi->ws) { lwsl_err("ws role wsi with no ws\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } // lwsl_notice("%s: %s\n", __func__, wsi->protocol->name); //lwsl_info("%s: wsistate 0x%x, pollout %d\n", __func__, // wsi->wsistate, pollfd->revents & LWS_POLLOUT); /* * something went wrong with parsing the handshake, and * we ended up back in the event loop without completing it */ if (lwsi_state(wsi) == LRS_PRE_WS_SERVING_ACCEPT) { wsi->socket_is_permanently_unusable = 1; return LWS_HPI_RET_PLEASE_CLOSE_ME; } ebuf.token = NULL; ebuf.len = 0; if (lwsi_state(wsi) == LRS_WAITING_CONNECT) { #if !defined(LWS_NO_CLIENT) if ((pollfd->revents & LWS_POLLOUT) && lws_handle_POLLOUT_event(wsi, pollfd)) { lwsl_debug("POLLOUT event closed it\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } n = lws_client_socket_service(wsi, pollfd, NULL); if (n) return LWS_HPI_RET_WSI_ALREADY_DIED; #endif return LWS_HPI_RET_HANDLED; } /* 1: something requested a callback when it was OK to write */ if ((pollfd->revents & LWS_POLLOUT) && lwsi_state_can_handle_POLLOUT(wsi) && lws_handle_POLLOUT_event(wsi, pollfd)) { if (lwsi_state(wsi) == LRS_RETURNED_CLOSE) lwsi_set_state(wsi, LRS_FLUSHING_BEFORE_CLOSE); return LWS_HPI_RET_PLEASE_CLOSE_ME; } if (lwsi_state(wsi) == LRS_RETURNED_CLOSE || lwsi_state(wsi) == LRS_WAITING_TO_SEND_CLOSE) { /* * we stopped caring about anything except control * packets. Force flow control off, defeat tx * draining. */ lws_rx_flow_control(wsi, 1); #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws) wsi->ws->tx_draining_ext = 0; #endif } #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->tx_draining_ext) { lws_handle_POLLOUT_event(wsi, pollfd); //lwsl_notice("%s: tx drain\n", __func__); /* * We cannot deal with new RX until the TX ext path has * been drained. It's because new rx will, eg, crap on * the wsi rx buf that may be needed to retain state. * * TX ext drain path MUST go through event loop to avoid * blocking. */ lws_callback_on_writable(wsi); return LWS_HPI_RET_HANDLED; } #endif if ((pollfd->revents & LWS_POLLIN) && lws_is_flowcontrolled(wsi)) { /* We cannot deal with any kind of new RX because we are * RX-flowcontrolled. */ lwsl_info("%s: flowcontrolled, ignoring rx\n", __func__); if (__lws_change_pollfd(wsi, LWS_POLLIN, 0)) return -1; return LWS_HPI_RET_HANDLED; } if (lws_is_flowcontrolled(wsi)) return LWS_HPI_RET_HANDLED; #if defined(LWS_WITH_HTTP2) if (wsi->http2_substream || wsi->upgraded_to_http2) { wsi1 = lws_get_network_wsi(wsi); if (wsi1 && lws_has_buffered_out(wsi1)) /* We cannot deal with any kind of new RX * because we are dealing with a partial send * (new RX may trigger new http_action() that * expect to be able to send) */ return LWS_HPI_RET_HANDLED; } #endif #if !defined(LWS_WITHOUT_EXTENSIONS) /* 2: RX Extension needs to be drained */ if (wsi->ws->rx_draining_ext) { lwsl_debug("%s: RX EXT DRAINING: Service\n", __func__); #ifndef LWS_NO_CLIENT if (lwsi_role_client(wsi)) { n = lws_ws_client_rx_sm(wsi, 0); if (n < 0) /* we closed wsi */ return LWS_HPI_RET_PLEASE_CLOSE_ME; } else #endif n = lws_ws_rx_sm(wsi, ALREADY_PROCESSED_IGNORE_CHAR, 0); return LWS_HPI_RET_HANDLED; } if (wsi->ws->rx_draining_ext) /* * We have RX EXT content to drain, but can't do it * right now. That means we cannot do anything lower * priority either. */ return LWS_HPI_RET_HANDLED; #endif /* 3: buflist needs to be drained */ read: //lws_buflist_describe(&wsi->buflist, wsi); ebuf.len = (int)lws_buflist_next_segment_len(&wsi->buflist, &ebuf.token); if (ebuf.len) { lwsl_info("draining buflist (len %d)\n", ebuf.len); buffered = 1; goto drain; } if (!(pollfd->revents & pollfd->events & LWS_POLLIN) && !wsi->http.ah) return LWS_HPI_RET_HANDLED; if (lws_is_flowcontrolled(wsi)) { lwsl_info("%s: %p should be rxflow (bm 0x%x)..\n", __func__, wsi, wsi->rxflow_bitmap); return LWS_HPI_RET_HANDLED; } if (!(lwsi_role_client(wsi) && (lwsi_state(wsi) != LRS_ESTABLISHED && lwsi_state(wsi) != LRS_AWAITING_CLOSE_ACK && lwsi_state(wsi) != LRS_H2_WAITING_TO_SEND_HEADERS))) { /* * In case we are going to react to this rx by scheduling * writes, we need to restrict the amount of rx to the size * the protocol reported for rx buffer. * * Otherwise we get a situation we have to absorb possibly a * lot of reads before we get a chance to drain them by writing * them, eg, with echo type tests in autobahn. */ buffered = 0; ebuf.token = pt->serv_buf; if (lwsi_role_ws(wsi)) ebuf.len = wsi->ws->rx_ubuf_alloc; else ebuf.len = wsi->context->pt_serv_buf_size; if ((unsigned int)ebuf.len > wsi->context->pt_serv_buf_size) ebuf.len = wsi->context->pt_serv_buf_size; if ((int)pending > ebuf.len) pending = ebuf.len; ebuf.len = lws_ssl_capable_read(wsi, ebuf.token, pending ? (int)pending : ebuf.len); switch (ebuf.len) { case 0: lwsl_info("%s: zero length read\n", __func__); return LWS_HPI_RET_PLEASE_CLOSE_ME; case LWS_SSL_CAPABLE_MORE_SERVICE: lwsl_info("SSL Capable more service\n"); return LWS_HPI_RET_HANDLED; case LWS_SSL_CAPABLE_ERROR: lwsl_info("%s: LWS_SSL_CAPABLE_ERROR\n", __func__); return LWS_HPI_RET_PLEASE_CLOSE_ME; } /* * coverity thinks ssl_capable_read() may read over * 2GB. Dissuade it... */ ebuf.len &= 0x7fffffff; } drain: /* * give any active extensions a chance to munge the buffer * before parse. We pass in a pointer to an lws_tokens struct * prepared with the default buffer and content length that's in * there. Rather than rewrite the default buffer, extensions * that expect to grow the buffer can adapt .token to * point to their own per-connection buffer in the extension * user allocation. By default with no extensions or no * extension callback handling, just the normal input buffer is * used then so it is efficient. */ m = 0; do { /* service incoming data */ //lws_buflist_describe(&wsi->buflist, wsi); if (ebuf.len) { #if defined(LWS_ROLE_H2) if (lwsi_role_h2(wsi) && lwsi_state(wsi) != LRS_BODY && lwsi_state(wsi) != LRS_DISCARD_BODY) n = lws_read_h2(wsi, ebuf.token, ebuf.len); else #endif n = lws_read_h1(wsi, ebuf.token, ebuf.len); if (n < 0) { /* we closed wsi */ n = 0; return LWS_HPI_RET_WSI_ALREADY_DIED; } //lws_buflist_describe(&wsi->buflist, wsi); //lwsl_notice("%s: consuming %d / %d\n", __func__, n, ebuf.len); if (lws_buflist_aware_consume(wsi, &ebuf, n, buffered)) return LWS_HPI_RET_PLEASE_CLOSE_ME; } ebuf.token = NULL; ebuf.len = 0; } while (m); if (wsi->http.ah #if !defined(LWS_NO_CLIENT) && !wsi->client_h2_alpn #endif ) { lwsl_info("%s: %p: detaching ah\n", __func__, wsi); lws_header_table_detach(wsi, 0); } pending = lws_ssl_pending(wsi); if (pending) { if (lws_is_ws_with_ext(wsi)) pending = pending > wsi->ws->rx_ubuf_alloc ? wsi->ws->rx_ubuf_alloc : pending; else pending = pending > wsi->context->pt_serv_buf_size ? wsi->context->pt_serv_buf_size : pending; goto read; } if (buffered && /* were draining, now nothing left */ !lws_buflist_next_segment_len(&wsi->buflist, NULL)) { lwsl_info("%s: %p flow buf: drained\n", __func__, wsi); /* having drained the rxflow buffer, can rearm POLLIN */ #ifdef LWS_NO_SERVER n = #endif __lws_rx_flow_control(wsi); /* n ignored, needed for NO_SERVER case */ } /* n = 0 */ return LWS_HPI_RET_HANDLED; } int rops_handle_POLLOUT_ws(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; int write_type = LWS_WRITE_PONG; #if !defined(LWS_WITHOUT_EXTENSIONS) struct lws_ext_pm_deflate_rx_ebufs pmdrx; int ret, m; #endif int n; #if !defined(LWS_WITHOUT_EXTENSIONS) lwsl_debug("%s: %s: wsi->ws->tx_draining_ext %d\n", __func__, wsi->protocol->name, wsi->ws->tx_draining_ext); #endif /* Priority 3: pending control packets (pong or close) * * 3a: close notification packet requested from close api */ if (lwsi_state(wsi) == LRS_WAITING_TO_SEND_CLOSE) { lwsl_debug("sending close packet\n"); lwsl_hexdump_debug(&wsi->ws->ping_payload_buf[LWS_PRE], wsi->ws->close_in_ping_buffer_len); wsi->waiting_to_send_close_frame = 0; n = lws_write(wsi, &wsi->ws->ping_payload_buf[LWS_PRE], wsi->ws->close_in_ping_buffer_len, LWS_WRITE_CLOSE); if (n >= 0) { if (wsi->close_needs_ack) { lwsi_set_state(wsi, LRS_AWAITING_CLOSE_ACK); lws_set_timeout(wsi, PENDING_TIMEOUT_CLOSE_ACK, 5); lwsl_debug("sent close, await ack\n"); return LWS_HP_RET_BAIL_OK; } wsi->close_needs_ack = 0; lwsi_set_state(wsi, LRS_RETURNED_CLOSE); } return LWS_HP_RET_BAIL_DIE; } /* else, the send failed and we should just hang up */ if ((lwsi_role_ws(wsi) && wsi->ws->ping_pending_flag) || (lwsi_state(wsi) == LRS_RETURNED_CLOSE && wsi->ws->payload_is_close)) { if (wsi->ws->payload_is_close) write_type = LWS_WRITE_CLOSE; else { if (wsi->wsistate_pre_close) { /* we started close flow, forget pong */ wsi->ws->ping_pending_flag = 0; return LWS_HP_RET_BAIL_OK; } lwsl_info("issuing pong %d on wsi %p\n", wsi->ws->ping_payload_len, wsi); } n = lws_write(wsi, &wsi->ws->ping_payload_buf[LWS_PRE], wsi->ws->ping_payload_len, write_type); if (n < 0) return LWS_HP_RET_BAIL_DIE; /* well he is sent, mark him done */ wsi->ws->ping_pending_flag = 0; if (wsi->ws->payload_is_close) { // assert(0); /* oh... a close frame was it... then we are done */ return LWS_HP_RET_BAIL_DIE; } /* otherwise for PING, leave POLLOUT active either way */ return LWS_HP_RET_BAIL_OK; } if (!wsi->socket_is_permanently_unusable && wsi->ws->send_check_ping && wsi->context->ws_ping_pong_interval) { lwsl_info("%s: issuing ping on wsi %p: %s %s h2: %d\n", __func__, wsi, wsi->role_ops->name, wsi->protocol->name, wsi->http2_substream); wsi->ws->send_check_ping = 0; wsi->ws->await_pong = 1; n = lws_write(wsi, &wsi->ws->ping_payload_buf[LWS_PRE], 0, LWS_WRITE_PING); if (n < 0) return LWS_HP_RET_BAIL_DIE; /* give it a few seconds to respond with the PONG */ __lws_sul_insert(&pt->pt_sul_owner, &wsi->sul_ping, (lws_usec_t)wsi->context->timeout_secs * LWS_USEC_PER_SEC); return LWS_HP_RET_BAIL_OK; } /* Priority 4: if we are closing, not allowed to send more data frags * which means user callback or tx ext flush banned now */ if (lwsi_state(wsi) == LRS_RETURNED_CLOSE) return LWS_HP_RET_USER_SERVICE; #if !defined(LWS_WITHOUT_EXTENSIONS) /* Priority 5: Tx path extension with more to send * * These are handled as new fragments each time around * So while we must block new writeable callback to enforce * payload ordering, but since they are always complete * fragments control packets can interleave OK. */ if (wsi->ws->tx_draining_ext) { lwsl_ext("SERVICING TX EXT DRAINING\n"); if (lws_write(wsi, NULL, 0, LWS_WRITE_CONTINUATION) < 0) return LWS_HP_RET_BAIL_DIE; /* leave POLLOUT active */ return LWS_HP_RET_BAIL_OK; } /* Priority 6: extensions */ if (!wsi->ws->extension_data_pending && !wsi->ws->tx_draining_ext) { lwsl_ext("%s: !wsi->ws->extension_data_pending\n", __func__); return LWS_HP_RET_USER_SERVICE; } /* * Check in on the active extensions, see if they had pending stuff to * spill... they need to get the first look-in otherwise sequence will * be disordered. * * coming here with a NULL, zero-length ebuf means just spill pending */ ret = 1; if (wsi->role_ops == &role_ops_raw_skt || wsi->role_ops == &role_ops_raw_file) ret = 0; while (ret == 1) { /* default to nobody has more to spill */ ret = 0; pmdrx.eb_in.token = NULL; pmdrx.eb_in.len = 0; /* give every extension a chance to spill */ m = lws_ext_cb_active(wsi, LWS_EXT_CB_PACKET_TX_PRESEND, &pmdrx, 0); if (m < 0) { lwsl_err("ext reports fatal error\n"); return LWS_HP_RET_BAIL_DIE; } if (m) /* * at least one extension told us he has more * to spill, so we will go around again after */ ret = 1; /* assuming they gave us something to send, send it */ if (pmdrx.eb_in.len) { n = lws_issue_raw(wsi, (unsigned char *)pmdrx.eb_in.token, pmdrx.eb_in.len); if (n < 0) { lwsl_info("closing from POLLOUT spill\n"); return LWS_HP_RET_BAIL_DIE; } /* * Keep amount spilled small to minimize chance of this */ if (n != pmdrx.eb_in.len) { lwsl_err("Unable to spill ext %d vs %d\n", pmdrx.eb_in.len, n); return LWS_HP_RET_BAIL_DIE; } } else continue; /* no extension has more to spill */ if (!ret) continue; /* * There's more to spill from an extension, but we just sent * something... did that leave the pipe choked? */ if (!lws_send_pipe_choked(wsi)) /* no we could add more */ continue; lwsl_info("choked in POLLOUT service\n"); /* * Yes, he's choked. Leave the POLLOUT masked on so we will * come back here when he is unchoked. Don't call the user * callback to enforce ordering of spilling, he'll get called * when we come back here and there's nothing more to spill. */ return LWS_HP_RET_BAIL_OK; } wsi->ws->extension_data_pending = 0; #endif return LWS_HP_RET_USER_SERVICE; } static int rops_service_flag_pending_ws(struct lws_context *context, int tsi) { #if !defined(LWS_WITHOUT_EXTENSIONS) struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws *wsi; int forced = 0; /* POLLIN faking (the pt lock is taken by the parent) */ /* * 1) For all guys with already-available ext data to drain, if they are * not flowcontrolled, fake their POLLIN status */ wsi = pt->ws.rx_draining_ext_list; while (wsi && wsi->position_in_fds_table != LWS_NO_FDS_POS) { pt->fds[wsi->position_in_fds_table].revents |= pt->fds[wsi->position_in_fds_table].events & LWS_POLLIN; if (pt->fds[wsi->position_in_fds_table].revents & LWS_POLLIN) forced = 1; wsi = wsi->ws->rx_draining_ext_list; } return forced; #else return 0; #endif } static int rops_close_via_role_protocol_ws(struct lws *wsi, enum lws_close_status reason) { if (!wsi->ws) return 0; if (!wsi->ws->close_in_ping_buffer_len && /* already a reason */ (reason == LWS_CLOSE_STATUS_NOSTATUS || reason == LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY)) return 0; lwsl_debug("%s: sending close indication...\n", __func__); /* if no prepared close reason, use 1000 and no aux data */ if (!wsi->ws->close_in_ping_buffer_len) { wsi->ws->close_in_ping_buffer_len = 2; wsi->ws->ping_payload_buf[LWS_PRE] = (reason >> 8) & 0xff; wsi->ws->ping_payload_buf[LWS_PRE + 1] = reason & 0xff; } wsi->waiting_to_send_close_frame = 1; wsi->close_needs_ack = 1; lwsi_set_state(wsi, LRS_WAITING_TO_SEND_CLOSE); __lws_set_timeout(wsi, PENDING_TIMEOUT_CLOSE_SEND, 5); lws_callback_on_writable(wsi); return 1; } static int rops_close_role_ws(struct lws_context_per_thread *pt, struct lws *wsi) { if (!wsi->ws) return 0; #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->rx_draining_ext) { struct lws **w = &pt->ws.rx_draining_ext_list; wsi->ws->rx_draining_ext = 0; /* remove us from context draining ext list */ while (*w) { if (*w == wsi) { *w = wsi->ws->rx_draining_ext_list; break; } w = &((*w)->ws->rx_draining_ext_list); } wsi->ws->rx_draining_ext_list = NULL; } if (wsi->ws->tx_draining_ext) { struct lws **w = &pt->ws.tx_draining_ext_list; lwsl_ext("%s: CLEARING tx_draining_ext\n", __func__); wsi->ws->tx_draining_ext = 0; /* remove us from context draining ext list */ while (*w) { if (*w == wsi) { *w = wsi->ws->tx_draining_ext_list; break; } w = &((*w)->ws->tx_draining_ext_list); } wsi->ws->tx_draining_ext_list = NULL; } #endif lws_free_set_NULL(wsi->ws->rx_ubuf); wsi->ws->ping_payload_len = 0; wsi->ws->ping_pending_flag = 0; /* deallocate any active extension contexts */ if (lws_ext_cb_active(wsi, LWS_EXT_CB_DESTROY, NULL, 0) < 0) lwsl_warn("extension destruction failed\n"); return 0; } static int rops_write_role_protocol_ws(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol *wp) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; #if !defined(LWS_WITHOUT_EXTENSIONS) enum lws_write_protocol wpt; #endif struct lws_ext_pm_deflate_rx_ebufs pmdrx; int masked7 = lwsi_role_client(wsi); unsigned char is_masked_bit = 0; unsigned char *dropmask = NULL; size_t orig_len = len; int pre = 0, n = 0; // lwsl_err("%s: wp 0x%x len %d\n", __func__, *wp, (int)len); #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->tx_draining_ext) { /* remove us from the list */ struct lws **w = &pt->ws.tx_draining_ext_list; lwsl_ext("%s: CLEARING tx_draining_ext\n", __func__); wsi->ws->tx_draining_ext = 0; /* remove us from context draining ext list */ while (*w) { if (*w == wsi) { *w = wsi->ws->tx_draining_ext_list; break; } w = &((*w)->ws->tx_draining_ext_list); } wsi->ws->tx_draining_ext_list = NULL; wpt = *wp; *wp = (wsi->ws->tx_draining_stashed_wp & 0xc0) | LWS_WRITE_CONTINUATION; /* * When we are just flushing (len == 0), we can trust the * stashed wp info completely. Otherwise adjust it to the * FIN status of the incoming packet. */ if (!(wpt & LWS_WRITE_NO_FIN) && len) *wp &= ~LWS_WRITE_NO_FIN; lwsl_ext("FORCED draining wp to 0x%02X " "(stashed 0x%02X, incoming 0x%02X)\n", *wp, wsi->ws->tx_draining_stashed_wp, wpt); // assert(0); } #endif /* reset the ping wait */ if (wsi->context->ws_ping_pong_interval) { wsi->sul_ping.cb = lws_sul_wsping_cb; __lws_sul_insert(&pt->pt_sul_owner, &wsi->sul_ping, (lws_usec_t)wsi->context->ws_ping_pong_interval * LWS_USEC_PER_SEC); } if (((*wp) & 0x1f) == LWS_WRITE_HTTP || ((*wp) & 0x1f) == LWS_WRITE_HTTP_FINAL || ((*wp) & 0x1f) == LWS_WRITE_HTTP_HEADERS_CONTINUATION || ((*wp) & 0x1f) == LWS_WRITE_HTTP_HEADERS) goto send_raw; /* if we are continuing a frame that already had its header done */ if (wsi->ws->inside_frame) { lwsl_debug("INSIDE FRAME\n"); goto do_more_inside_frame; } wsi->ws->clean_buffer = 1; /* * give a chance to the extensions to modify payload * the extension may decide to produce unlimited payload erratically * (eg, compression extension), so we require only that if he produces * something, it will be a complete fragment of the length known at * the time (just the fragment length known), and if he has * more we will come back next time he is writeable and allow him to * produce more fragments until he's drained. * * This allows what is sent each time it is writeable to be limited to * a size that can be sent without partial sends or blocking, allows * interleaving of control frames and other connection service. */ pmdrx.eb_in.token = buf; pmdrx.eb_in.len = (int)len; /* for the non-pm-deflate case */ pmdrx.eb_out = pmdrx.eb_in; switch ((int)*wp) { case LWS_WRITE_PING: case LWS_WRITE_PONG: case LWS_WRITE_CLOSE: break; default: #if !defined(LWS_WITHOUT_EXTENSIONS) n = lws_ext_cb_active(wsi, LWS_EXT_CB_PAYLOAD_TX, &pmdrx, *wp); if (n < 0) return -1; lwsl_ext("%s: defl ext ret %d, ext in remaining %d, " "out %d compressed (wp 0x%x)\n", __func__, n, (int)pmdrx.eb_in.len, (int)pmdrx.eb_out.len, *wp); if (n == PMDR_HAS_PENDING) { lwsl_ext("%s: HAS PENDING: write drain len %d " "(wp 0x%x) SETTING tx_draining_ext " "(remaining in %d)\n", __func__, (int)pmdrx.eb_out.len, *wp, (int)pmdrx.eb_in.len); /* extension requires further draining */ wsi->ws->tx_draining_ext = 1; wsi->ws->tx_draining_ext_list = pt->ws.tx_draining_ext_list; pt->ws.tx_draining_ext_list = wsi; /* we must come back to do more */ lws_callback_on_writable(wsi); /* * keep a copy of the write type for the overall * action that has provoked generation of these * fragments, so the last guy can use its FIN state. */ wsi->ws->tx_draining_stashed_wp = *wp; /* * Despite what we may have thought, this is definitely * NOT the last fragment, because the extension asserted * he has more coming. For example, the extension may * be compressing, and has saved up everything until the * end, where the output is larger than one chunk. * * Make sure this intermediate one doesn't actually * go out with a FIN. */ *wp |= LWS_WRITE_NO_FIN; } #endif if (pmdrx.eb_out.len && wsi->ws->stashed_write_pending) { wsi->ws->stashed_write_pending = 0; *wp = ((*wp) & 0xc0) | (int)wsi->ws->stashed_write_type; } } /* * an extension did something we need to keep... for example, if * compression extension, it has already updated its state according * to this being issued */ if (buf != pmdrx.eb_out.token) { /* * ext might eat it, but not have anything to issue yet. * In that case we have to follow his lead, but stash and * replace the write type that was lost here the first time. */ if (len && !pmdrx.eb_out.len) { if (!wsi->ws->stashed_write_pending) wsi->ws->stashed_write_type = (char)(*wp) & 0x3f; wsi->ws->stashed_write_pending = 1; return (int)len; } /* * extension recreated it: * need to buffer this if not all sent */ wsi->ws->clean_buffer = 0; } buf = pmdrx.eb_out.token; len = pmdrx.eb_out.len; if (!buf) { lwsl_err("null buf (%d)\n", (int)len); return -1; } switch (wsi->ws->ietf_spec_revision) { case 13: if (masked7) { pre += 4; dropmask = &buf[0 - pre]; is_masked_bit = 0x80; } switch ((*wp) & 0xf) { case LWS_WRITE_TEXT: n = LWSWSOPC_TEXT_FRAME; break; case LWS_WRITE_BINARY: n = LWSWSOPC_BINARY_FRAME; break; case LWS_WRITE_CONTINUATION: n = LWSWSOPC_CONTINUATION; break; case LWS_WRITE_CLOSE: n = LWSWSOPC_CLOSE; break; case LWS_WRITE_PING: n = LWSWSOPC_PING; break; case LWS_WRITE_PONG: n = LWSWSOPC_PONG; break; default: lwsl_warn("lws_write: unknown write opc / wp\n"); return -1; } if (!((*wp) & LWS_WRITE_NO_FIN)) n |= 1 << 7; if (len < 126) { pre += 2; buf[-pre] = n; buf[-pre + 1] = (unsigned char)(len | is_masked_bit); } else { if (len < 65536) { pre += 4; buf[-pre] = n; buf[-pre + 1] = 126 | is_masked_bit; buf[-pre + 2] = (unsigned char)(len >> 8); buf[-pre + 3] = (unsigned char)len; } else { pre += 10; buf[-pre] = n; buf[-pre + 1] = 127 | is_masked_bit; #if defined __LP64__ buf[-pre + 2] = (len >> 56) & 0x7f; buf[-pre + 3] = len >> 48; buf[-pre + 4] = len >> 40; buf[-pre + 5] = len >> 32; #else buf[-pre + 2] = 0; buf[-pre + 3] = 0; buf[-pre + 4] = 0; buf[-pre + 5] = 0; #endif buf[-pre + 6] = (unsigned char)(len >> 24); buf[-pre + 7] = (unsigned char)(len >> 16); buf[-pre + 8] = (unsigned char)(len >> 8); buf[-pre + 9] = (unsigned char)len; } } break; } do_more_inside_frame: /* * Deal with masking if we are in client -> server direction and * the wp demands it */ if (masked7) { if (!wsi->ws->inside_frame) if (lws_0405_frame_mask_generate(wsi)) { lwsl_err("frame mask generation failed\n"); return -1; } /* * in v7, just mask the payload */ if (dropmask) { /* never set if already inside frame */ for (n = 4; n < (int)len + 4; n++) dropmask[n] = dropmask[n] ^ wsi->ws->mask[ (wsi->ws->mask_idx++) & 3]; /* copy the frame nonce into place */ memcpy(dropmask, wsi->ws->mask, 4); } } if (lwsi_role_h2_ENCAPSULATION(wsi)) { struct lws *encap = lws_get_network_wsi(wsi); assert(encap != wsi); return encap->role_ops->write_role_protocol(wsi, buf - pre, len + pre, wp); } switch ((*wp) & 0x1f) { case LWS_WRITE_TEXT: case LWS_WRITE_BINARY: case LWS_WRITE_CONTINUATION: if (!wsi->h2_stream_carries_ws) { /* * give any active extensions a chance to munge the * buffer before send. We pass in a pointer to an * lws_tokens struct prepared with the default buffer * and content length that's in there. Rather than * rewrite the default buffer, extensions that expect * to grow the buffer can adapt .token to point to their * own per-connection buffer in the extension user * allocation. By default with no extensions or no * extension callback handling, just the normal input * buffer is used then so it is efficient. * * callback returns 1 in case it wants to spill more * buffers * * This takes care of holding the buffer if send is * incomplete, ie, if wsi->ws->clean_buffer is 0 * (meaning an extension meddled with the buffer). If * wsi->ws->clean_buffer is 1, it will instead return * to the user code how much OF THE USER BUFFER was * consumed. */ n = lws_issue_raw_ext_access(wsi, buf - pre, len + pre); wsi->ws->inside_frame = 1; if (n <= 0) return n; if (n == (int)len + pre) { /* everything in the buffer was handled * (or rebuffered...) */ wsi->ws->inside_frame = 0; return (int)orig_len; } /* * it is how many bytes of user buffer got sent... may * be < orig_len in which case callback when writable * has already been arranged and user code can call * lws_write() again with the rest later. */ return n - pre; } break; default: break; } send_raw: return lws_issue_raw(wsi, (unsigned char *)buf - pre, len + pre); } static int rops_close_kill_connection_ws(struct lws *wsi, enum lws_close_status reason) { lws_dll2_remove(&wsi->sul_ping.list); /* deal with ws encapsulation in h2 */ #if defined(LWS_WITH_HTTP2) if (wsi->http2_substream && wsi->h2_stream_carries_ws) return role_ops_h2.close_kill_connection(wsi, reason); return 0; #else return 0; #endif } static int rops_callback_on_writable_ws(struct lws *wsi) { #if defined(LWS_WITH_HTTP2) if (lwsi_role_h2_ENCAPSULATION(wsi)) { /* we know then that it has an h2 parent */ struct lws *enc = role_ops_h2.encapsulation_parent(wsi); assert(enc); if (enc->role_ops->callback_on_writable(wsi)) return 1; } #endif return 0; } static int rops_init_vhost_ws(struct lws_vhost *vh, const struct lws_context_creation_info *info) { #if !defined(LWS_WITHOUT_EXTENSIONS) #ifdef LWS_WITH_PLUGINS struct lws_plugin *plugin = vh->context->plugin_list; int m; if (vh->context->plugin_extension_count) { m = 0; while (info->extensions && info->extensions[m].callback) m++; /* * give the vhost a unified list of extensions including the * ones that came from plugins */ vh->ws.extensions = lws_zalloc(sizeof(struct lws_extension) * (m + vh->context->plugin_extension_count + 1), "extensions"); if (!vh->ws.extensions) return 1; memcpy((struct lws_extension *)vh->ws.extensions, info->extensions, sizeof(struct lws_extension) * m); plugin = vh->context->plugin_list; while (plugin) { memcpy((struct lws_extension *)&vh->ws.extensions[m], plugin->caps.extensions, sizeof(struct lws_extension) * plugin->caps.count_extensions); m += plugin->caps.count_extensions; plugin = plugin->list; } } else #endif vh->ws.extensions = info->extensions; #endif return 0; } static int rops_destroy_vhost_ws(struct lws_vhost *vh) { #ifdef LWS_WITH_PLUGINS #if !defined(LWS_WITHOUT_EXTENSIONS) if (vh->context->plugin_extension_count) lws_free((void *)vh->ws.extensions); #endif #endif return 0; } #if defined(LWS_WITH_HTTP_PROXY) static int ws_destroy_proxy_buf(struct lws_dll2 *d, void *user) { lws_free(d); return 0; } #endif static int rops_destroy_role_ws(struct lws *wsi) { #if defined(LWS_WITH_HTTP_PROXY) lws_dll2_foreach_safe(&wsi->ws->proxy_owner, NULL, ws_destroy_proxy_buf); #endif lws_free_set_NULL(wsi->ws); return 0; } struct lws_role_ops role_ops_ws = { /* role name */ "ws", /* alpn id */ NULL, /* check_upgrades */ NULL, /* init_context */ NULL, /* init_vhost */ rops_init_vhost_ws, /* destroy_vhost */ rops_destroy_vhost_ws, /* periodic_checks */ NULL, /* service_flag_pending */ rops_service_flag_pending_ws, /* handle_POLLIN */ rops_handle_POLLIN_ws, /* handle_POLLOUT */ rops_handle_POLLOUT_ws, /* perform_user_POLLOUT */ NULL, /* callback_on_writable */ rops_callback_on_writable_ws, /* tx_credit */ NULL, /* write_role_protocol */ rops_write_role_protocol_ws, /* encapsulation_parent */ NULL, /* alpn_negotiated */ NULL, /* close_via_role_protocol */ rops_close_via_role_protocol_ws, /* close_role */ rops_close_role_ws, /* close_kill_connection */ rops_close_kill_connection_ws, /* destroy_role */ rops_destroy_role_ws, /* adoption_bind */ NULL, /* client_bind */ NULL, /* adoption_cb clnt, srv */ { LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED, LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED }, /* rx_cb clnt, srv */ { LWS_CALLBACK_CLIENT_RECEIVE, LWS_CALLBACK_RECEIVE }, /* writeable cb clnt, srv */ { LWS_CALLBACK_CLIENT_WRITEABLE, LWS_CALLBACK_SERVER_WRITEABLE }, /* close cb clnt, srv */ { LWS_CALLBACK_CLIENT_CLOSED, LWS_CALLBACK_CLOSED }, /* protocol_bind cb c, srv */ { LWS_CALLBACK_WS_CLIENT_BIND_PROTOCOL, LWS_CALLBACK_WS_SERVER_BIND_PROTOCOL }, /* protocol_unbind cb c, srv */ { LWS_CALLBACK_WS_CLIENT_DROP_PROTOCOL, LWS_CALLBACK_WS_SERVER_DROP_PROTOCOL }, /* file handles */ 0 }; libwebsockets-3.2.1/lib/roles/ws/private.h000066400000000000000000000122051357643561300205400ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is included from core/private.h if LWS_ROLE_WS */ extern struct lws_role_ops role_ops_ws; #define lwsi_role_ws(wsi) (wsi->role_ops == &role_ops_ws) enum lws_rx_parse_state { LWS_RXPS_NEW, LWS_RXPS_04_mask_1, LWS_RXPS_04_mask_2, LWS_RXPS_04_mask_3, LWS_RXPS_04_FRAME_HDR_1, LWS_RXPS_04_FRAME_HDR_LEN, LWS_RXPS_04_FRAME_HDR_LEN16_2, LWS_RXPS_04_FRAME_HDR_LEN16_1, LWS_RXPS_04_FRAME_HDR_LEN64_8, LWS_RXPS_04_FRAME_HDR_LEN64_7, LWS_RXPS_04_FRAME_HDR_LEN64_6, LWS_RXPS_04_FRAME_HDR_LEN64_5, LWS_RXPS_04_FRAME_HDR_LEN64_4, LWS_RXPS_04_FRAME_HDR_LEN64_3, LWS_RXPS_04_FRAME_HDR_LEN64_2, LWS_RXPS_04_FRAME_HDR_LEN64_1, LWS_RXPS_07_COLLECT_FRAME_KEY_1, LWS_RXPS_07_COLLECT_FRAME_KEY_2, LWS_RXPS_07_COLLECT_FRAME_KEY_3, LWS_RXPS_07_COLLECT_FRAME_KEY_4, LWS_RXPS_WS_FRAME_PAYLOAD }; enum lws_websocket_opcodes_07 { LWSWSOPC_CONTINUATION = 0, LWSWSOPC_TEXT_FRAME = 1, LWSWSOPC_BINARY_FRAME = 2, LWSWSOPC_NOSPEC__MUX = 7, /* control extensions 8+ */ LWSWSOPC_CLOSE = 8, LWSWSOPC_PING = 9, LWSWSOPC_PONG = 0xa, }; /* this is not usable directly by user code any more, lws_close_reason() */ #define LWS_WRITE_CLOSE 4 #define ALREADY_PROCESSED_IGNORE_CHAR 1 #define ALREADY_PROCESSED_NO_CB 2 #if !defined(LWS_WITHOUT_EXTENSIONS) struct lws_vhost_role_ws { const struct lws_extension *extensions; }; struct lws_pt_role_ws { struct lws *rx_draining_ext_list; struct lws *tx_draining_ext_list; }; #endif struct _lws_websocket_related { unsigned char *rx_ubuf; #if !defined(LWS_WITHOUT_EXTENSIONS) const struct lws_extension *active_extensions[LWS_MAX_EXTENSIONS_ACTIVE]; void *act_ext_user[LWS_MAX_EXTENSIONS_ACTIVE]; struct lws *rx_draining_ext_list; struct lws *tx_draining_ext_list; #endif #if defined(LWS_WITH_HTTP_PROXY) struct lws_dll2_owner proxy_owner; char actual_protocol[16]; size_t proxy_buffered; #endif /* Also used for close content... control opcode == < 128 */ uint8_t ping_payload_buf[128 - 3 + LWS_PRE]; uint8_t mask[4]; size_t rx_packet_length; uint32_t rx_ubuf_head; uint32_t rx_ubuf_alloc; uint8_t ping_payload_len; uint8_t mask_idx; uint8_t opcode; uint8_t rsv; uint8_t rsv_first_msg; /* zero if no info, or length including 2-byte close code */ uint8_t close_in_ping_buffer_len; uint8_t utf8; uint8_t stashed_write_type; uint8_t tx_draining_stashed_wp; uint8_t ietf_spec_revision; unsigned int final:1; unsigned int frame_is_binary:1; unsigned int all_zero_nonce:1; unsigned int this_frame_masked:1; unsigned int inside_frame:1; /* next write will be more of frame */ unsigned int clean_buffer:1; /* buffer not rewritten by extension */ unsigned int payload_is_close:1; /* process as PONG, but it is close */ unsigned int ping_pending_flag:1; unsigned int continuation_possible:1; unsigned int owed_a_fin:1; unsigned int check_utf8:1; unsigned int defeat_check_utf8:1; unsigned int stashed_write_pending:1; unsigned int send_check_ping:1; unsigned int first_fragment:1; unsigned int peer_has_sent_close:1; unsigned int await_pong; #if !defined(LWS_WITHOUT_EXTENSIONS) unsigned int extension_data_pending:1; unsigned int rx_draining_ext:1; unsigned int tx_draining_ext:1; unsigned int pmd_trailer_application:1; uint8_t count_act_ext; #endif }; /* * we need to separately track what's happening with both compressed rx in * and with inflated rx out that will be passed to the user code */ struct lws_ext_pm_deflate_rx_ebufs { struct lws_tokens eb_in; struct lws_tokens eb_out; }; int lws_ws_handshake_client(struct lws *wsi, unsigned char **buf, size_t len); #if !defined(LWS_WITHOUT_EXTENSIONS) LWS_VISIBLE void lws_context_init_extensions(const struct lws_context_creation_info *info, struct lws_context *context); LWS_EXTERN int lws_any_extension_handled(struct lws *wsi, enum lws_extension_callback_reasons r, void *v, size_t len); LWS_EXTERN int lws_ext_cb_active(struct lws *wsi, int reason, void *buf, int len); LWS_EXTERN int lws_ext_cb_all_exts(struct lws_context *context, struct lws *wsi, int reason, void *arg, int len); #endif int handshake_0405(struct lws_context *context, struct lws *wsi); int lws_process_ws_upgrade(struct lws *wsi); int lws_process_ws_upgrade2(struct lws *wsi); extern const struct lws_protocols lws_ws_proxy; int lws_server_init_wsi_for_ws(struct lws *wsi); void lws_sul_wsping_cb(lws_sorted_usec_list_t *sul); libwebsockets-3.2.1/lib/roles/ws/server-ws.c000066400000000000000000000611711357643561300210240ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include #define LWS_CPYAPP(ptr, str) { strcpy(ptr, str); ptr += strlen(str); } #if !defined(LWS_WITHOUT_EXTENSIONS) static int lws_extension_server_handshake(struct lws *wsi, char **p, int budget) { struct lws_context *context = wsi->context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; char ext_name[64], *args, *end = (*p) + budget - 1; const struct lws_ext_options *opts, *po; const struct lws_extension *ext; struct lws_ext_option_arg oa; int n, m, more = 1; int ext_count = 0; char ignore; char *c; /* * Figure out which extensions the client has that we want to * enable on this connection, and give him back the list */ if (!lws_hdr_total_length(wsi, WSI_TOKEN_EXTENSIONS)) return 0; /* * break down the list of client extensions * and go through them */ if (lws_hdr_copy(wsi, (char *)pt->serv_buf, context->pt_serv_buf_size, WSI_TOKEN_EXTENSIONS) < 0) return 1; c = (char *)pt->serv_buf; lwsl_parser("WSI_TOKEN_EXTENSIONS = '%s'\n", c); wsi->ws->count_act_ext = 0; ignore = 0; n = 0; args = NULL; /* * We may get a simple request * * Sec-WebSocket-Extensions: permessage-deflate * * or an elaborated one with requested options * * Sec-WebSocket-Extensions: permessage-deflate; \ * server_no_context_takeover; \ * client_no_context_takeover */ while (more) { if (c >= (char *)pt->serv_buf + 255) return -1; if (*c && (*c != ',' && *c != '\t')) { if (*c == ';') { ignore = 1; if (!args) args = c + 1; } if (ignore || *c == ' ') { c++; continue; } ext_name[n] = *c++; if (n < (int)sizeof(ext_name) - 1) n++; continue; } ext_name[n] = '\0'; ignore = 0; if (!*c) more = 0; else { c++; if (!n) continue; } while (args && *args == ' ') args++; /* check a client's extension against our support */ ext = wsi->vhost->ws.extensions; while (ext && ext->callback) { if (strcmp(ext_name, ext->name)) { ext++; continue; } /* * oh, we do support this one he asked for... but let's * confirm he only gave it once */ for (m = 0; m < wsi->ws->count_act_ext; m++) if (wsi->ws->active_extensions[m] == ext) { lwsl_info("ext mentioned twice\n"); return 1; /* shenanigans */ } /* * ask user code if it's OK to apply it on this * particular connection + protocol */ m = (wsi->protocol->callback)(wsi, LWS_CALLBACK_CONFIRM_EXTENSION_OKAY, wsi->user_space, ext_name, 0); /* * zero return from callback means go ahead and allow * the extension, it's what we get if the callback is * unhandled */ if (m) { ext++; continue; } /* apply it */ ext_count++; /* instantiate the extension on this conn */ wsi->ws->active_extensions[wsi->ws->count_act_ext] = ext; /* allow him to construct his context */ if (ext->callback(lws_get_context(wsi), ext, wsi, LWS_EXT_CB_CONSTRUCT, (void *)&wsi->ws->act_ext_user[ wsi->ws->count_act_ext], (void *)&opts, 0)) { lwsl_info("ext %s failed construction\n", ext_name); ext_count--; ext++; continue; } if (ext_count > 1) *(*p)++ = ','; else LWS_CPYAPP(*p, "\x0d\x0aSec-WebSocket-Extensions: "); *p += lws_snprintf(*p, (end - *p), "%s", ext_name); /* * The client may send a bunch of different option * sets for the same extension, we are supposed to * pick one we like the look of. The option sets are * separated by comma. * * Actually we just either accept the first one or * nothing. * * Go through the options trying to apply the * recognized ones */ lwsl_info("ext args %s\n", args); while (args && *args && *args != ',') { while (*args == ' ') args++; po = opts; while (po->name) { /* only support arg-less options... */ if (po->type != EXTARG_NONE || strncmp(args, po->name, strlen(po->name))) { po++; continue; } oa.option_name = NULL; oa.option_index = (int)(po - opts); oa.start = NULL; oa.len = 0; lwsl_info("setting '%s'\n", po->name); if (!ext->callback(lws_get_context(wsi), ext, wsi, LWS_EXT_CB_OPTION_SET, wsi->ws->act_ext_user[ wsi->ws->count_act_ext], &oa, (end - *p))) { *p += lws_snprintf(*p, (end - *p), "; %s", po->name); lwsl_debug("adding option %s\n", po->name); } po++; } while (*args && *args != ',' && *args != ';') args++; if (*args == ';') args++; } wsi->ws->count_act_ext++; lwsl_parser("cnt_act_ext <- %d\n", wsi->ws->count_act_ext); if (args && *args == ',') more = 0; ext++; } n = 0; args = NULL; } return 0; } #endif int lws_process_ws_upgrade2(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; const struct lws_protocol_vhost_options *pvos = NULL; const char *ws_prot_basic_auth = NULL; /* * Allow basic auth a look-in now we bound the wsi to the protocol. * * For vhost ws basic auth, it is "basic-auth": "path" as usual but * applied to the protocol's entry in the vhost's "ws-protocols": * section, as a pvo. */ pvos = lws_vhost_protocol_options(wsi->vhost, wsi->protocol->name); if (pvos && pvos->options && !lws_pvo_get_str((void *)pvos->options, "basic-auth", &ws_prot_basic_auth)) { lwsl_info("%s: ws upgrade requires basic auth\n", __func__); switch(lws_check_basic_auth(wsi, ws_prot_basic_auth)) { case LCBA_CONTINUE: break; case LCBA_FAILED_AUTH: return lws_unauthorised_basic_auth(wsi); case LCBA_END_TRANSACTION: lws_return_http_status(wsi, HTTP_STATUS_FORBIDDEN, NULL); return lws_http_transaction_completed(wsi); } } /* * We are upgrading to ws, so http/1.1 + h2 and keepalive + pipelined * header considerations about keeping the ah around no longer apply. * * However it's common for the first ws protocol data to have been * coalesced with the browser upgrade request and to already be in the * ah rx buffer. */ lws_pt_lock(pt, __func__); if (!wsi->h2_stream_carries_ws) lws_role_transition(wsi, LWSIFR_SERVER, LRS_ESTABLISHED, &role_ops_ws); lws_pt_unlock(pt); /* allocate the ws struct for the wsi */ wsi->ws = lws_zalloc(sizeof(*wsi->ws), "ws struct"); if (!wsi->ws) { lwsl_notice("OOM\n"); return 1; } if (lws_hdr_total_length(wsi, WSI_TOKEN_VERSION)) wsi->ws->ietf_spec_revision = atoi(lws_hdr_simple_ptr(wsi, WSI_TOKEN_VERSION)); /* allocate wsi->user storage */ if (lws_ensure_user_space(wsi)) { lwsl_notice("problem with user space\n"); return 1; } /* * Give the user code a chance to study the request and * have the opportunity to deny it */ if ((wsi->protocol->callback)(wsi, LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION, wsi->user_space, lws_hdr_simple_ptr(wsi, WSI_TOKEN_PROTOCOL), 0)) { lwsl_warn("User code denied connection\n"); return 1; } /* * Perform the handshake according to the protocol version the * client announced */ switch (wsi->ws->ietf_spec_revision) { default: lwsl_notice("Unknown client spec version %d\n", wsi->ws->ietf_spec_revision); wsi->ws->ietf_spec_revision = 13; //return 1; /* fallthru */ case 13: #if defined(LWS_WITH_HTTP2) if (wsi->h2_stream_carries_ws) { if (lws_h2_ws_handshake(wsi)) { lwsl_notice("h2 ws handshake failed\n"); return 1; } lws_role_transition(wsi, LWSIFR_SERVER | LWSIFR_P_ENCAP_H2, LRS_ESTABLISHED, &role_ops_ws); } else #endif { lwsl_parser("lws_parse calling handshake_04\n"); if (handshake_0405(wsi->context, wsi)) { lwsl_notice("hs0405 has failed the connection\n"); return 1; } } break; } lws_server_init_wsi_for_ws(wsi); lwsl_parser("accepted v%02d connection\n", wsi->ws->ietf_spec_revision); #if defined(LWS_WITH_ACCESS_LOG) { char *uptr = NULL, combo[128]; int l, meth = lws_http_get_uri_and_method(wsi, &uptr, &l); if (wsi->h2_stream_carries_ws) wsi->http.request_version = HTTP_VERSION_2; wsi->http.access_log.response = 101; l = lws_snprintf(combo, sizeof(combo), "%.*s (%s)", l, uptr, wsi->protocol->name); lws_prepare_access_log_info(wsi, combo, l, meth); lws_access_log(wsi); } #endif lwsl_info("%s: %p: dropping ah on ws upgrade\n", __func__, wsi); lws_header_table_detach(wsi, 1); return 0; } int lws_process_ws_upgrade(struct lws *wsi) { const struct lws_protocols *pcol = NULL; char buf[128], name[64]; struct lws_tokenize ts; lws_tokenize_elem e; if (!wsi->protocol) lwsl_err("NULL protocol at lws_read\n"); /* * It's either websocket or h2->websocket * * If we are on h1, confirm we got the required "connection: upgrade" * header. h2 / ws-over-h2 does not have this. */ #if defined(LWS_WITH_HTTP2) if (!wsi->http2_substream) { #endif lws_tokenize_init(&ts, buf, LWS_TOKENIZE_F_COMMA_SEP_LIST | LWS_TOKENIZE_F_DOT_NONTERM | LWS_TOKENIZE_F_RFC7230_DELIMS | LWS_TOKENIZE_F_MINUS_NONTERM); ts.len = lws_hdr_copy(wsi, buf, sizeof(buf) - 1, WSI_TOKEN_CONNECTION); if (ts.len <= 0) goto bad_conn_format; do { e = lws_tokenize(&ts); switch (e) { case LWS_TOKZE_TOKEN: if (!strncasecmp(ts.token, "upgrade", ts.token_len)) e = LWS_TOKZE_ENDED; break; case LWS_TOKZE_DELIMITER: break; default: /* includes ENDED */ bad_conn_format: lwsl_err("%s: malformed or absent conn hdr\n", __func__); return 1; } } while (e > 0); #if defined(LWS_WITH_HTTP2) } #endif #if defined(LWS_WITH_HTTP_PROXY) { const struct lws_http_mount *hit; int uri_len = 0, meth; char *uri_ptr; meth = lws_http_get_uri_and_method(wsi, &uri_ptr, &uri_len); hit = lws_find_mount(wsi, uri_ptr, uri_len); if (hit && (meth == 0 || meth == 8) && (hit->origin_protocol == LWSMPRO_HTTPS || hit->origin_protocol == LWSMPRO_HTTP)) /* * We are an h1 ws upgrade on a urlpath that corresponds * to a proxying mount. Don't try to deal with it * locally, eg, we won't even have the right protocol * handler since we're not the guy handling it, just a * conduit. * * Instead open the related ongoing h1 connection * according to the mount configuration and proxy * whatever that has to say from now on. */ return lws_http_proxy_start(wsi, hit, uri_ptr, 1); } #endif /* * Select the first protocol we support from the list * the client sent us. */ lws_tokenize_init(&ts, buf, LWS_TOKENIZE_F_COMMA_SEP_LIST | LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_DOT_NONTERM | LWS_TOKENIZE_F_RFC7230_DELIMS); ts.len = lws_hdr_copy(wsi, buf, sizeof(buf) - 1, WSI_TOKEN_PROTOCOL); if (ts.len < 0) { lwsl_err("%s: protocol list too long\n", __func__); return 1; } if (!ts.len) { int n = wsi->vhost->default_protocol_index; /* * Some clients only have one protocol and do not send the * protocol list header... allow it and match to the vhost's * default protocol (which itself defaults to zero). * * Setting the vhost default protocol index to -1 or anything * more than the actual number of protocols on the vhost causes * these "no protocol" ws connections to be rejected. */ if (n >= wsi->vhost->count_protocols) { lwsl_notice("%s: rejecting ws upg with no protocol\n", __func__); return 1; } lwsl_info("%s: defaulting to prot handler %d\n", __func__, n); lws_bind_protocol(wsi, &wsi->vhost->protocols[n], "ws upgrade default pcol"); goto alloc_ws; } /* otherwise go through the user-provided protocol list */ do { e = lws_tokenize(&ts); switch (e) { case LWS_TOKZE_TOKEN: if (lws_tokenize_cstr(&ts, name, sizeof(name))) { lwsl_err("%s: pcol name too long\n", __func__); return 1; } lwsl_debug("checking %s\n", name); pcol = lws_vhost_name_to_protocol(wsi->vhost, name); if (pcol) { /* if we know it, bind to it and stop looking */ lws_bind_protocol(wsi, pcol, "ws upg pcol"); e = LWS_TOKZE_ENDED; } break; case LWS_TOKZE_DELIMITER: case LWS_TOKZE_ENDED: break; default: lwsl_err("%s: malformatted protocol list", __func__); return 1; } } while (e > 0); /* we didn't find a protocol he wanted? */ if (!pcol) { lwsl_notice("No supported protocol \"%s\"\n", buf); return 1; } alloc_ws: return lws_process_ws_upgrade2(wsi); } int handshake_0405(struct lws_context *context, struct lws *wsi) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws_process_html_args args; unsigned char hash[20]; int n, accept_len; char *response; char *p; if (!lws_hdr_total_length(wsi, WSI_TOKEN_HOST) || !lws_hdr_total_length(wsi, WSI_TOKEN_KEY)) { lwsl_info("handshake_04 missing pieces\n"); /* completed header processing, but missing some bits */ goto bail; } if (lws_hdr_total_length(wsi, WSI_TOKEN_KEY) >= MAX_WEBSOCKET_04_KEY_LEN) { lwsl_warn("Client key too long %d\n", MAX_WEBSOCKET_04_KEY_LEN); goto bail; } /* * since key length is restricted above (currently 128), cannot * overflow */ n = sprintf((char *)pt->serv_buf, "%s258EAFA5-E914-47DA-95CA-C5AB0DC85B11", lws_hdr_simple_ptr(wsi, WSI_TOKEN_KEY)); lws_SHA1(pt->serv_buf, n, hash); accept_len = lws_b64_encode_string((char *)hash, 20, (char *)pt->serv_buf, context->pt_serv_buf_size); if (accept_len < 0) { lwsl_warn("Base64 encoded hash too long\n"); goto bail; } /* allocate the per-connection user memory (if any) */ if (lws_ensure_user_space(wsi)) goto bail; /* create the response packet */ /* make a buffer big enough for everything */ response = (char *)pt->serv_buf + MAX_WEBSOCKET_04_KEY_LEN + 256 + LWS_PRE; p = response; LWS_CPYAPP(p, "HTTP/1.1 101 Switching Protocols\x0d\x0a" "Upgrade: WebSocket\x0d\x0a" "Connection: Upgrade\x0d\x0a" "Sec-WebSocket-Accept: "); strcpy(p, (char *)pt->serv_buf); p += accept_len; /* we can only return the protocol header if: * - one came in, and ... */ if (lws_hdr_total_length(wsi, WSI_TOKEN_PROTOCOL) && /* - it is not an empty string */ wsi->protocol->name && wsi->protocol->name[0]) { const char *prot = wsi->protocol->name; #if defined(LWS_WITH_HTTP_PROXY) if (wsi->proxied_ws_parent && wsi->child_list) prot = wsi->child_list->ws->actual_protocol; #endif LWS_CPYAPP(p, "\x0d\x0aSec-WebSocket-Protocol: "); p += lws_snprintf(p, 128, "%s", prot); } #if !defined(LWS_WITHOUT_EXTENSIONS) /* * Figure out which extensions the client has that we want to * enable on this connection, and give him back the list. * * Give him a limited write bugdet */ if (lws_extension_server_handshake(wsi, &p, 192)) goto bail; #endif LWS_CPYAPP(p, "\x0d\x0a"); args.p = p; args.max_len = lws_ptr_diff((char *)pt->serv_buf + context->pt_serv_buf_size, p); if (user_callback_handle_rxflow(wsi->protocol->callback, wsi, LWS_CALLBACK_ADD_HEADERS, wsi->user_space, &args, 0)) goto bail; p = args.p; /* end of response packet */ LWS_CPYAPP(p, "\x0d\x0a"); /* okay send the handshake response accepting the connection */ lwsl_parser("issuing resp pkt %d len\n", lws_ptr_diff(p, response)); #if defined(DEBUG) fwrite(response, 1, p - response, stderr); #endif n = lws_write(wsi, (unsigned char *)response, p - response, LWS_WRITE_HTTP_HEADERS); if (n != (p - response)) { lwsl_info("%s: ERROR writing to socket %d\n", __func__, n); goto bail; } /* alright clean up and set ourselves into established state */ lwsi_set_state(wsi, LRS_ESTABLISHED); wsi->lws_rx_parse_state = LWS_RXPS_NEW; { const char * uri_ptr = lws_hdr_simple_ptr(wsi, WSI_TOKEN_GET_URI); int uri_len = lws_hdr_total_length(wsi, WSI_TOKEN_GET_URI); const struct lws_http_mount *hit = lws_find_mount(wsi, uri_ptr, uri_len); if (hit && hit->cgienv && wsi->protocol->callback(wsi, LWS_CALLBACK_HTTP_PMO, wsi->user_space, (void *)hit->cgienv, 0)) return 1; } return 0; bail: /* caller will free up his parsing allocations */ return -1; } /* * Once we reach LWS_RXPS_WS_FRAME_PAYLOAD, we know how much * to expect in that state and can deal with it in bulk more efficiently. */ static int lws_ws_frame_rest_is_payload(struct lws *wsi, uint8_t **buf, size_t len) { struct lws_ext_pm_deflate_rx_ebufs pmdrx; unsigned int avail = (unsigned int)len; uint8_t *buffer = *buf, mask[4]; #if !defined(LWS_WITHOUT_EXTENSIONS) unsigned int old_packet_length = (int)wsi->ws->rx_packet_length; #endif int n = 0; /* * With zlib, we can give it as much input as we like. The pmd * extension will draw it down in chunks (default 1024). * * If we try to restrict how much we give it, because we must go * back to the event loop each time, we will drop the remainder... */ #if !defined(LWS_WITHOUT_EXTENSIONS) if (!wsi->ws->count_act_ext) #endif { if (wsi->protocol->rx_buffer_size) avail = (int)wsi->protocol->rx_buffer_size; else avail = wsi->context->pt_serv_buf_size; } /* do not consume more than we should */ if (avail > wsi->ws->rx_packet_length) avail = (unsigned int)wsi->ws->rx_packet_length; /* do not consume more than what is in the buffer */ if (avail > len) avail = (unsigned int)len; if (!avail) return 0; pmdrx.eb_in.token = buffer; pmdrx.eb_in.len = avail; pmdrx.eb_out.token = buffer; pmdrx.eb_out.len = avail; if (!wsi->ws->all_zero_nonce) { for (n = 0; n < 4; n++) mask[n] = wsi->ws->mask[(wsi->ws->mask_idx + n) & 3]; /* deal with 4-byte chunks using unwrapped loop */ n = avail >> 2; while (n--) { *(buffer) = *(buffer) ^ mask[0]; buffer++; *(buffer) = *(buffer) ^ mask[1]; buffer++; *(buffer) = *(buffer) ^ mask[2]; buffer++; *(buffer) = *(buffer) ^ mask[3]; buffer++; } /* and the remaining bytes bytewise */ for (n = 0; n < (int)(avail & 3); n++) { *(buffer) = *(buffer) ^ mask[n]; buffer++; } wsi->ws->mask_idx = (wsi->ws->mask_idx + avail) & 3; } lwsl_info("%s: using %d of raw input (total %d on offer)\n", __func__, avail, (int)len); (*buf) += avail; len -= avail; wsi->ws->rx_packet_length -= avail; #if !defined(LWS_WITHOUT_EXTENSIONS) n = lws_ext_cb_active(wsi, LWS_EXT_CB_PAYLOAD_RX, &pmdrx, 0); lwsl_info("%s: ext says %d / ebuf_out.len %d\n", __func__, n, pmdrx.eb_out.len); /* * ebuf may be pointing somewhere completely different now, * it's the output */ if (n < 0) { /* * we may rely on this to get RX, just drop connection */ lwsl_notice("%s: LWS_EXT_CB_PAYLOAD_RX blew out\n", __func__); wsi->socket_is_permanently_unusable = 1; return -1; } /* * if we had an rx fragment right at the last compressed byte of the * message, we can get a zero length inflated output, where no prior * rx inflated output marked themselves with FIN, since there was * raw ws payload still to drain at that time. * * Then we need to generate a zero length ws rx that can be understood * as the message completion. */ if (!pmdrx.eb_out.len && /* zero-length inflation output */ n == PMDR_EMPTY_FINAL && /* nothing to drain from the inflator */ old_packet_length && /* we gave the inflator new input */ !wsi->ws->rx_packet_length && /* raw ws packet payload all gone */ wsi->ws->final && /* the raw ws packet is a FIN guy */ wsi->protocol->callback && !wsi->wsistate_pre_close) { lwsl_ext("%s: issuing zero length FIN pkt\n", __func__); if (user_callback_handle_rxflow(wsi->protocol->callback, wsi, LWS_CALLBACK_RECEIVE, wsi->user_space, NULL, 0)) return -1; return avail; } /* * If doing permessage-deflate, above was the only way to get a zero * length receive. Otherwise we're more willing. */ if (wsi->ws->count_act_ext && !pmdrx.eb_out.len) return avail; if (n == PMDR_HAS_PENDING) /* extension had more... main loop will come back */ lws_add_wsi_to_draining_ext_list(wsi); else lws_remove_wsi_from_draining_ext_list(wsi); #endif if (pmdrx.eb_out.len && wsi->ws->check_utf8 && !wsi->ws->defeat_check_utf8) { if (lws_check_utf8(&wsi->ws->utf8, pmdrx.eb_out.token, pmdrx.eb_out.len)) { lws_close_reason(wsi, LWS_CLOSE_STATUS_INVALID_PAYLOAD, (uint8_t *)"bad utf8", 8); goto utf8_fail; } /* we are ending partway through utf-8 character? */ if (!wsi->ws->rx_packet_length && wsi->ws->final && wsi->ws->utf8 && !n) { lwsl_info("FINAL utf8 error\n"); lws_close_reason(wsi, LWS_CLOSE_STATUS_INVALID_PAYLOAD, (uint8_t *)"partial utf8", 12); utf8_fail: lwsl_info("utf8 error\n"); lwsl_hexdump_info(pmdrx.eb_out.token, pmdrx.eb_out.len); return -1; } } if (wsi->protocol->callback && !wsi->wsistate_pre_close) if (user_callback_handle_rxflow(wsi->protocol->callback, wsi, LWS_CALLBACK_RECEIVE, wsi->user_space, pmdrx.eb_out.token, pmdrx.eb_out.len)) return -1; wsi->ws->first_fragment = 0; #if !defined(LWS_WITHOUT_EXTENSIONS) lwsl_info("%s: input used %d, output %d, rem len %d, rx_draining_ext %d\n", __func__, avail, pmdrx.eb_out.len, (int)len, wsi->ws->rx_draining_ext); #endif return avail; /* how much we used from the input */ } int lws_parse_ws(struct lws *wsi, unsigned char **buf, size_t len) { unsigned char *bufin = *buf; int m, bulk = 0; lwsl_debug("%s: received %d byte packet\n", __func__, (int)len); //lwsl_hexdump_notice(*buf, len); /* let the rx protocol state machine have as much as it needs */ while (len) { /* * we were accepting input but now we stopped doing so */ if (wsi->rxflow_bitmap) { lwsl_info("%s: doing rxflow, caching %d\n", __func__, (int)len); /* * Since we cached the remaining available input, we * can say we "consumed" it. * * But what about the case where the available input * came out of the rxflow cache already? If we are * effectively "putting it back in the cache", we have * leave it where it is, already pointed to by the head. */ if (lws_rxflow_cache(wsi, *buf, 0, (int)len) == LWSRXFC_TRIMMED) { /* * We dealt with it by trimming the existing * rxflow cache HEAD to account for what we used. * * indicate we didn't use anything to the caller * so he doesn't do any consumed processing */ lwsl_info("%s: trimming inside rxflow cache\n", __func__); *buf = bufin; } else *buf += len; return 1; } #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->rx_draining_ext) { lwsl_debug("%s: draining rx ext\n", __func__); m = lws_ws_rx_sm(wsi, ALREADY_PROCESSED_IGNORE_CHAR, 0); if (m < 0) return -1; continue; } #endif /* consume payload bytes efficiently */ while (wsi->lws_rx_parse_state == LWS_RXPS_WS_FRAME_PAYLOAD && (wsi->ws->opcode == LWSWSOPC_TEXT_FRAME || wsi->ws->opcode == LWSWSOPC_BINARY_FRAME || wsi->ws->opcode == LWSWSOPC_CONTINUATION) && len) { uint8_t *bin = *buf; bulk = 1; m = lws_ws_frame_rest_is_payload(wsi, buf, len); assert((int)lws_ptr_diff(*buf, bin) <= (int)len); len -= lws_ptr_diff(*buf, bin); if (!m) { break; } if (m < 0) { lwsl_info("%s: rest_is_payload bailed\n", __func__); return -1; } } if (!bulk) { /* process the byte */ m = lws_ws_rx_sm(wsi, 0, *(*buf)++); len--; } else { /* * We already handled this byte in bulk, just deal * with the ramifications */ #if !defined(LWS_WITHOUT_EXTENSIONS) lwsl_debug("%s: coming out of bulk with len %d, " "wsi->ws->rx_draining_ext %d\n", __func__, (int)len, wsi->ws->rx_draining_ext); #endif m = lws_ws_rx_sm(wsi, ALREADY_PROCESSED_IGNORE_CHAR | ALREADY_PROCESSED_NO_CB, 0); } if (m < 0) { lwsl_info("%s: lws_ws_rx_sm bailed %d\n", __func__, bulk); return -1; } bulk = 0; } lwsl_debug("%s: exit with %d unused\n", __func__, (int)len); return 0; } libwebsockets-3.2.1/lib/tls/000077500000000000000000000000001357643561300157425ustar00rootroot00000000000000libwebsockets-3.2.1/lib/tls/lws-gencrypto-common.c000066400000000000000000000517751357643561300222300ustar00rootroot00000000000000/* * libwebsockets - generic crypto hiding the backend - common parts * * Copyright (C) 2017 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" /* * These came from RFC7518 (JSON Web Algorithms) Section 3 * * Cryptographic Algorithms for Digital Signatures and MACs */ static const struct lws_jose_jwe_alg lws_gencrypto_jws_alg_map[] = { /* * JWSs MAY also be created that do not provide integrity protection. * Such a JWS is called an Unsecured JWS. An Unsecured JWS uses the * "alg" value "none" and is formatted identically to other JWSs, but * MUST use the empty octet sequence as its JWS Signature value. * Recipients MUST verify that the JWS Signature value is the empty * octet sequence. * * Implementations that support Unsecured JWSs MUST NOT accept such * objects as valid unless the application specifies that it is * acceptable for a specific object to not be integrity protected. * Implementations MUST NOT accept Unsecured JWSs by default. In order * to mitigate downgrade attacks, applications MUST NOT signal * acceptance of Unsecured JWSs at a global level, and SHOULD signal * acceptance on a per-object basis. See Section 8.5 for security * considerations associated with using this algorithm. */ { /* optional */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_NONE, "none", NULL, 0, 0, 0 }, /* * HMAC with SHA-2 Functions * * The HMAC SHA-256 MAC for a JWS is validated by computing an HMAC * value per RFC 2104, using SHA-256 as the hash algorithm "H", using * the received JWS Signing Input as the "text" value, and using the * shared key. This computed HMAC value is then compared to the result * of base64url decoding the received encoded JWS Signature value. The * comparison of the computed HMAC value to the JWS Signature value MUST * be done in a constant-time manner to thwart timing attacks. * * Alternatively, the computed HMAC value can be base64url encoded and * compared to the received encoded JWS Signature value (also in a * constant-time manner), as this comparison produces the same result as * comparing the unencoded values. In either case, if the values match, * the HMAC has been validated. */ { /* required: HMAC using SHA-256 */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_SHA256, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_NONE, "HS256", NULL, 0, 0, 0 }, { /* optional: HMAC using SHA-384 */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_SHA384, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_NONE, "HS384", NULL, 0, 0, 0 }, { /* optional: HMAC using SHA-512 */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_SHA512, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_NONE, "HS512", NULL, 0, 0, 0 }, /* * Digital Signature with RSASSA-PKCS1-v1_5 * * This section defines the use of the RSASSA-PKCS1-v1_5 digital * signature algorithm as defined in Section 8.2 of RFC 3447 [RFC3447] * (commonly known as PKCS #1), using SHA-2 [SHS] hash functions. * * A key of size 2048 bits or larger MUST be used with these algorithms. * * The RSASSA-PKCS1-v1_5 SHA-256 digital signature is generated as * follows: generate a digital signature of the JWS Signing Input using * RSASSA-PKCS1-v1_5-SIGN and the SHA-256 hash function with the desired * private key. This is the JWS Signature value. * * The RSASSA-PKCS1-v1_5 SHA-256 digital signature for a JWS is * validated as follows: submit the JWS Signing Input, the JWS * Signature, and the public key corresponding to the private key used * by the signer to the RSASSA-PKCS1-v1_5-VERIFY algorithm using SHA-256 * as the hash function. */ { /* recommended: RSASSA-PKCS1-v1_5 using SHA-256 */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5, LWS_JOSE_ENCTYPE_NONE, "RS256", NULL, 2048, 4096, 0 }, { /* optional: RSASSA-PKCS1-v1_5 using SHA-384 */ LWS_GENHASH_TYPE_SHA384, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5, LWS_JOSE_ENCTYPE_NONE, "RS384", NULL, 2048, 4096, 0 }, { /* optional: RSASSA-PKCS1-v1_5 using SHA-512 */ LWS_GENHASH_TYPE_SHA512, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5, LWS_JOSE_ENCTYPE_NONE, "RS512", NULL, 2048, 4096, 0 }, /* * Digital Signature with ECDSA * * The ECDSA P-256 SHA-256 digital signature is generated as follows: * * 1. Generate a digital signature of the JWS Signing Input using ECDSA * P-256 SHA-256 with the desired private key. The output will be * the pair (R, S), where R and S are 256-bit unsigned integers. * 2. Turn R and S into octet sequences in big-endian order, with each * array being be 32 octets long. The octet sequence * representations MUST NOT be shortened to omit any leading zero * octets contained in the values. * * 3. Concatenate the two octet sequences in the order R and then S. * (Note that many ECDSA implementations will directly produce this * concatenation as their output.) * * 4. The resulting 64-octet sequence is the JWS Signature value. * * The ECDSA P-256 SHA-256 digital signature for a JWS is validated as * follows: * * 1. The JWS Signature value MUST be a 64-octet sequence. If it is * not a 64-octet sequence, the validation has failed. * * 2. Split the 64-octet sequence into two 32-octet sequences. The * first octet sequence represents R and the second S. The values R * and S are represented as octet sequences using the Integer-to- * OctetString Conversion defined in Section 2.3.7 of SEC1 [SEC1] * (in big-endian octet order). * 3. Submit the JWS Signing Input, R, S, and the public key (x, y) to * the ECDSA P-256 SHA-256 validator. */ { /* Recommended+: ECDSA using P-256 and SHA-256 */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_ECDSA, LWS_JOSE_ENCTYPE_NONE, "ES256", "P-256", 256, 256, 0 }, { /* optional: ECDSA using P-384 and SHA-384 */ LWS_GENHASH_TYPE_SHA384, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_ECDSA, LWS_JOSE_ENCTYPE_NONE, "ES384", "P-384", 384, 384, 0 }, { /* optional: ECDSA using P-521 and SHA-512 */ LWS_GENHASH_TYPE_SHA512, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_ECDSA, LWS_JOSE_ENCTYPE_NONE, "ES512", "P-521", 521, 521, 0 }, #if 0 Not yet supported /* * Digital Signature with RSASSA-PSS * * A key of size 2048 bits or larger MUST be used with this algorithm. * * The RSASSA-PSS SHA-256 digital signature is generated as follows: * generate a digital signature of the JWS Signing Input using RSASSA- * PSS-SIGN, the SHA-256 hash function, and the MGF1 mask generation * function with SHA-256 with the desired private key. This is the JWS * Signature value. * * The RSASSA-PSS SHA-256 digital signature for a JWS is validated as * follows: submit the JWS Signing Input, the JWS Signature, and the * public key corresponding to the private key used by the signer to the * RSASSA-PSS-VERIFY algorithm using SHA-256 as the hash function and * using MGF1 as the mask generation function with SHA-256. * */ { /* optional: RSASSA-PSS using SHA-256 and MGF1 with SHA-256 */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_PSS, LWS_JOSE_ENCTYPE_NONE, "PS256", NULL, 2048, 4096, 0 }, { /* optional: RSASSA-PSS using SHA-384 and MGF1 with SHA-384 */ LWS_GENHASH_TYPE_SHA384, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_PSS, LWS_JOSE_ENCTYPE_NONE, "PS384", NULL, 2048, 4096, 0 }, { /* optional: RSASSA-PSS using SHA-512 and MGF1 with SHA-512*/ LWS_GENHASH_TYPE_SHA512, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_PSS, LWS_JOSE_ENCTYPE_NONE, "PS512", NULL, 2048, 4096, 0 }, #endif }; /* * These came from RFC7518 (JSON Web Algorithms) Section 4 * * Cryptographic Algorithms for Key Management * * JWE uses cryptographic algorithms to encrypt or determine the Content * Encryption Key (CEK). */ static const struct lws_jose_jwe_alg lws_gencrypto_jwe_alg_map[] = { /* * This section defines the specifics of encrypting a JWE CEK with * RSAES-PKCS1-v1_5 [RFC3447]. The "alg" (algorithm) Header Parameter * value "RSA1_5" is used for this algorithm. * * A key of size 2048 bits or larger MUST be used with this algorithm. */ { /* recommended-: RSAES-PKCS1-v1_5 */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5, LWS_JOSE_ENCTYPE_NONE, "RSA1_5", NULL, 2048, 4096, 0 }, { /* recommended+: RSAES OAEP using default parameters */ LWS_GENHASH_TYPE_SHA1, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP, LWS_JOSE_ENCTYPE_NONE, "RSA-OAEP", NULL, 2048, 4096, 0 }, { /* recommended+: RSAES OAEP using SHA-256 and MGF1 SHA-256 */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP, LWS_JOSE_ENCTYPE_NONE, "RSA-OAEP-256", NULL, 2048, 4096, 0 }, /* * Key Wrapping with AES Key Wrap * * This section defines the specifics of encrypting a JWE CEK with the * Advanced Encryption Standard (AES) Key Wrap Algorithm [RFC3394] using * the default initial value specified in Section 2.2.3.1 of that * document. * * */ { /* recommended: AES Key Wrap with AES Key Wrap with defaults using 128-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_AES_ECB, LWS_JOSE_ENCTYPE_NONE, "A128KW", NULL, 128, 128, 64 }, { /* optional: AES Key Wrap with AES Key Wrap with defaults using 192-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_AES_ECB, LWS_JOSE_ENCTYPE_NONE, "A192KW", NULL, 192, 192, 64 }, { /* recommended: AES Key Wrap with AES Key Wrap with defaults using 256-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_AES_ECB, LWS_JOSE_ENCTYPE_NONE, "A256KW", NULL, 256, 256, 64 }, /* * This section defines the specifics of directly performing symmetric * key encryption without performing a key wrapping step. In this case, * the shared symmetric key is used directly as the Content Encryption * Key (CEK) value for the "enc" algorithm. An empty octet sequence is * used as the JWE Encrypted Key value. The "alg" (algorithm) Header * Parameter value "dir" is used in this case. */ { /* recommended */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_NONE, "dir", NULL, 0, 0, 0 }, /* * Key Agreement with Elliptic Curve Diffie-Hellman Ephemeral Static * (ECDH-ES) * * This section defines the specifics of key agreement with Elliptic * Curve Diffie-Hellman Ephemeral Static [RFC6090], in combination with * the Concat KDF, as defined in Section 5.8.1 of [NIST.800-56A]. The * key agreement result can be used in one of two ways: * * 1. directly as the Content Encryption Key (CEK) for the "enc" * algorithm, in the Direct Key Agreement mode, or * * 2. as a symmetric key used to wrap the CEK with the "A128KW", * "A192KW", or "A256KW" algorithms, in the Key Agreement with Key * Wrapping mode. * * A new ephemeral public key value MUST be generated for each key * agreement operation. * * In Direct Key Agreement mode, the output of the Concat KDF MUST be a * key of the same length as that used by the "enc" algorithm. In this * case, the empty octet sequence is used as the JWE Encrypted Key * value. The "alg" (algorithm) Header Parameter value "ECDH-ES" is * used in the Direct Key Agreement mode. * * In Key Agreement with Key Wrapping mode, the output of the Concat KDF * MUST be a key of the length needed for the specified key wrapping * algorithm. In this case, the JWE Encrypted Key is the CEK wrapped * with the agreed-upon key. */ { /* recommended+: ECDH Ephemeral Static Key agreement Concat KDF */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_ECDHES, LWS_JOSE_ENCTYPE_NONE, "ECDH-ES", NULL, 128, 128, 0 }, { /* recommended: ECDH-ES + Concat KDF + wrapped by AES128KW */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_ECDHES, LWS_JOSE_ENCTYPE_AES_ECB, "ECDH-ES+A128KW", NULL, 128, 128, 0 }, { /* optional: ECDH-ES + Concat KDF + wrapped by AES192KW */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_ECDHES, LWS_JOSE_ENCTYPE_AES_ECB, "ECDH-ES+A192KW", NULL, 192, 192, 0 }, { /* recommended: ECDH-ES + Concat KDF + wrapped by AES256KW */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_ECDHES, LWS_JOSE_ENCTYPE_AES_ECB, "ECDH-ES+A256KW", NULL, 256, 256, 0 }, /* * Key Encryption with AES GCM * * This section defines the specifics of encrypting a JWE Content * Encryption Key (CEK) with Advanced Encryption Standard (AES) in * Galois/Counter Mode (GCM) ([AES] and [NIST.800-38D]). * * Use of an Initialization Vector (IV) of size 96 bits is REQUIRED with * this algorithm. The IV is represented in base64url-encoded form as * the "iv" (initialization vector) Header Parameter value. * * The Additional Authenticated Data value used is the empty octet * string. * * The requested size of the Authentication Tag output MUST be 128 bits, * regardless of the key size. * * The JWE Encrypted Key value is the ciphertext output. * * The Authentication Tag output is represented in base64url-encoded * form as the "tag" (authentication tag) Header Parameter value. * * * "iv" (Initialization Vector) Header Parameter * * The "iv" (initialization vector) Header Parameter value is the * base64url-encoded representation of the 96-bit IV value used for the * key encryption operation. This Header Parameter MUST be present and * MUST be understood and processed by implementations when these * algorithms are used. * * "tag" (Authentication Tag) Header Parameter * * The "tag" (authentication tag) Header Parameter value is the * base64url-encoded representation of the 128-bit Authentication Tag * value resulting from the key encryption operation. This Header * Parameter MUST be present and MUST be understood and processed by * implementations when these algorithms are used. */ { /* optional: Key wrapping with AES GCM using 128-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_AES_ECB, LWS_JOSE_ENCTYPE_NONE, "A128GCMKW", NULL, 128, 128, 96 }, { /* optional: Key wrapping with AES GCM using 192-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_AES_ECB, LWS_JOSE_ENCTYPE_NONE, "A192GCMKW", NULL, 192, 192, 96 }, { /* optional: Key wrapping with AES GCM using 256-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_AES_ECB, LWS_JOSE_ENCTYPE_NONE, "A256GCMKW", NULL, 256, 256, 96 }, /* list terminator */ { 0, 0, 0, 0, NULL, NULL } }; /* * The "enc" (encryption algorithm) Header Parameter identifies the * content encryption algorithm used to perform authenticated encryption * on the plaintext to produce the ciphertext and the Authentication * Tag. This algorithm MUST be an AEAD algorithm with a specified key * length. The encrypted content is not usable if the "enc" value does * not represent a supported algorithm. "enc" values should either be * registered in the IANA "JSON Web Signature and Encryption Algorithms" * registry established by [JWA] or be a value that contains a * Collision-Resistant Name. The "enc" value is a case-sensitive ASCII * string containing a StringOrURI value. This Header Parameter MUST be * present and MUST be understood and processed by implementations. */ static const struct lws_jose_jwe_alg lws_gencrypto_jwe_enc_map[] = { /* * AES_128_CBC_HMAC_SHA_256 / 512 * * It uses the HMAC message authentication code [RFC2104] with the * SHA-256 hash function [SHS] to provide message authentication, with * the HMAC output truncated to 128 bits, corresponding to the * HMAC-SHA-256-128 algorithm defined in [RFC4868]. For encryption, it * uses AES in the CBC mode of operation as defined in Section 6.2 of * [NIST.800-38A], with PKCS #7 padding and a 128-bit IV value. * * The AES_CBC_HMAC_SHA2 parameters specific to AES_128_CBC_HMAC_SHA_256 * are: * * The input key K is 32 octets long. * ENC_KEY_LEN is 16 octets. * MAC_KEY_LEN is 16 octets. * The SHA-256 hash algorithm is used for the HMAC. * The HMAC-SHA-256 output is truncated to T_LEN=16 octets, by * stripping off the final 16 octets. */ { /* required */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_SHA256, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_AES_CBC, "A128CBC-HS256", NULL, 256, 256, 128 }, /* * AES_192_CBC_HMAC_SHA_384 is based on AES_128_CBC_HMAC_SHA_256, but * with the following differences: * * The input key K is 48 octets long instead of 32. * ENC_KEY_LEN is 24 octets instead of 16. * MAC_KEY_LEN is 24 octets instead of 16. * SHA-384 is used for the HMAC instead of SHA-256. * The HMAC SHA-384 value is truncated to T_LEN=24 octets instead of 16. */ { /* required */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_SHA384, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_AES_CBC, "A192CBC-HS384", NULL, 384, 384, 192 }, /* * AES_256_CBC_HMAC_SHA_512 is based on AES_128_CBC_HMAC_SHA_256, but * with the following differences: * * The input key K is 64 octets long instead of 32. * ENC_KEY_LEN is 32 octets instead of 16. * MAC_KEY_LEN is 32 octets instead of 16. * SHA-512 is used for the HMAC instead of SHA-256. * The HMAC SHA-512 value is truncated to T_LEN=32 octets instead of 16. */ { /* required */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_SHA512, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_AES_CBC, "A256CBC-HS512", NULL, 512, 512, 256 }, /* * The CEK is used as the encryption key. * * Use of an IV of size 96 bits is REQUIRED with this algorithm. * * The requested size of the Authentication Tag output MUST be 128 bits, * regardless of the key size. */ { /* recommended: AES GCM using 128-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_AES_GCM, "A128GCM", NULL, 128, 128, 96 }, { /* optional: AES GCM using 192-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_AES_GCM, "A192GCM", NULL, 192, 192, 96 }, { /* recommended: AES GCM using 256-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_AES_GCM, "A256GCM", NULL, 256, 256, 96 }, { 0, 0, 0, 0, NULL, NULL, 0, 0, 0 } /* sentinel */ }; LWS_VISIBLE int lws_gencrypto_jws_alg_to_definition(const char *alg, const struct lws_jose_jwe_alg **jose) { const struct lws_jose_jwe_alg *a = lws_gencrypto_jws_alg_map; while (a->alg) { if (!strcmp(alg, a->alg)) { *jose = a; return 0; } a++; } return 1; } LWS_VISIBLE int lws_gencrypto_jwe_alg_to_definition(const char *alg, const struct lws_jose_jwe_alg **jose) { const struct lws_jose_jwe_alg *a = lws_gencrypto_jwe_alg_map; while (a->alg) { if (!strcmp(alg, a->alg)) { *jose = a; return 0; } a++; } return 1; } LWS_VISIBLE int lws_gencrypto_jwe_enc_to_definition(const char *enc, const struct lws_jose_jwe_alg **jose) { const struct lws_jose_jwe_alg *e = lws_gencrypto_jwe_enc_map; while (e->alg) { if (!strcmp(enc, e->alg)) { *jose = e; return 0; } e++; } return 1; } size_t lws_genhash_size(enum lws_genhash_types type) { switch(type) { case LWS_GENHASH_TYPE_UNKNOWN: return 0; case LWS_GENHASH_TYPE_MD5: return 16; case LWS_GENHASH_TYPE_SHA1: return 20; case LWS_GENHASH_TYPE_SHA256: return 32; case LWS_GENHASH_TYPE_SHA384: return 48; case LWS_GENHASH_TYPE_SHA512: return 64; } return 0; } size_t lws_genhmac_size(enum lws_genhmac_types type) { switch(type) { case LWS_GENHMAC_TYPE_UNKNOWN: return 0; case LWS_GENHMAC_TYPE_SHA256: return 32; case LWS_GENHMAC_TYPE_SHA384: return 48; case LWS_GENHMAC_TYPE_SHA512: return 64; } return 0; } int lws_gencrypto_bits_to_bytes(int bits) { if (bits & 7) return (bits / 8) + 1; return bits / 8; } int lws_base64_size(int bytes) { return ((bytes * 4) / 3) + 6; } void lws_gencrypto_destroy_elements(struct lws_gencrypto_keyelem *el, int m) { int n; for (n = 0; n < m; n++) if (el[n].buf) lws_free_set_NULL(el[n].buf); } libwebsockets-3.2.1/lib/tls/lws-genec-common.c000066400000000000000000000062771357643561300212740ustar00rootroot00000000000000/* * libwebsockets - generic EC api hiding the backend - common parts * * Copyright (C) 2017 - 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * lws_genec provides an EC abstraction api in lws that works the * same whether you are using openssl or mbedtls crypto functions underneath. */ #include "core/private.h" const struct lws_ec_curves * lws_genec_curve(const struct lws_ec_curves *table, const char *name) { const struct lws_ec_curves *c = lws_ec_curves; if (table) c = table; while (c->name) { if (!strcmp(name, c->name)) return c; c++; } return NULL; } //extern const struct lws_ec_curves *lws_ec_curves; int lws_genec_confirm_curve_allowed_by_tls_id(const char *allowed, int id, struct lws_jwk *jwk) { struct lws_tokenize ts; lws_tokenize_elem e; int n, len; lws_tokenize_init(&ts, allowed, LWS_TOKENIZE_F_COMMA_SEP_LIST | LWS_TOKENIZE_F_MINUS_NONTERM); ts.len = strlen(allowed); do { e = lws_tokenize(&ts); switch (e) { case LWS_TOKZE_TOKEN: n = 0; while (lws_ec_curves[n].name) { if (id != lws_ec_curves[n].tls_lib_nid) { n++; continue; } lwsl_info("match curve %s\n", lws_ec_curves[n].name); len = strlen(lws_ec_curves[n].name); jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].len = len; jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].buf = lws_malloc(len + 1, "cert crv"); if (!jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].buf) { lwsl_err("%s: OOM\n", __func__); return 1; } memcpy(jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].buf, lws_ec_curves[n].name, len + 1); return 0; } break; case LWS_TOKZE_DELIMITER: break; default: /* includes ENDED */ lwsl_err("%s: malformed or curve name in list\n", __func__); return -1; } } while (e > 0); lwsl_err("%s: unsupported curve group nid %d\n", __func__, n); return -1; } LWS_VISIBLE void lws_genec_destroy_elements(struct lws_gencrypto_keyelem *el) { int n; for (n = 0; n < LWS_GENCRYPTO_EC_KEYEL_COUNT; n++) if (el[n].buf) lws_free_set_NULL(el[n].buf); } static const char *enames[] = { "crv", "x", "d", "y" }; LWS_VISIBLE int lws_genec_dump(struct lws_gencrypto_keyelem *el) { int n; (void)enames; lwsl_info(" genec %p: crv: '%s'\n", el, !!el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf ? (char *)el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf: "no curve name"); for (n = LWS_GENCRYPTO_EC_KEYEL_X; n < LWS_GENCRYPTO_EC_KEYEL_COUNT; n++) { lwsl_info(" e: %s\n", enames[n]); lwsl_hexdump_info(el[n].buf, el[n].len); } lwsl_info("\n"); return 0; } libwebsockets-3.2.1/lib/tls/mbedtls/000077500000000000000000000000001357643561300173745ustar00rootroot00000000000000libwebsockets-3.2.1/lib/tls/mbedtls/lws-genaes.c000066400000000000000000000216721357643561300216150ustar00rootroot00000000000000/* * libwebsockets - generic AES api hiding the backend * * Copyright (C) 2017 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * lws_genaes provides an abstraction api for AES in lws that works the * same whether you are using openssl or mbedtls hash functions underneath. */ #include "core/private.h" #include "../../jose/private.h" static int operation_map[] = { MBEDTLS_AES_ENCRYPT, MBEDTLS_AES_DECRYPT }; LWS_VISIBLE int lws_genaes_create(struct lws_genaes_ctx *ctx, enum enum_aes_operation op, enum enum_aes_modes mode, struct lws_gencrypto_keyelem *el, enum enum_aes_padding padding, void *engine) { int n = 0; ctx->mode = mode; ctx->k = el; ctx->op = operation_map[op]; ctx->underway = 0; switch (ctx->mode) { case LWS_GAESM_XTS: #if defined(MBEDTLS_CIPHER_MODE_XTS) mbedtls_aes_xts_init(&ctx->u.ctx_xts); break; #else return -1; #endif case LWS_GAESM_GCM: mbedtls_gcm_init(&ctx->u.ctx_gcm); n = mbedtls_gcm_setkey(&ctx->u.ctx_gcm, MBEDTLS_CIPHER_ID_AES, ctx->k->buf, ctx->k->len * 8); if (n) { lwsl_notice("%s: mbedtls_gcm_setkey: -0x%x\n", __func__, -n); return n; } return n; default: mbedtls_aes_init(&ctx->u.ctx); break; } switch (op) { case LWS_GAESO_ENC: if (ctx->mode == LWS_GAESM_XTS) #if defined(MBEDTLS_CIPHER_MODE_XTS) n = mbedtls_aes_xts_setkey_enc(&ctx->u.ctx_xts, ctx->k->buf, ctx->k->len * 8); #else return -1; #endif else n = mbedtls_aes_setkey_enc(&ctx->u.ctx, ctx->k->buf, ctx->k->len * 8); break; case LWS_GAESO_DEC: switch (ctx->mode) { case LWS_GAESM_XTS: #if defined(MBEDTLS_CIPHER_MODE_XTS) n = mbedtls_aes_xts_setkey_dec(&ctx->u.ctx_xts, ctx->k->buf, ctx->k->len * 8); break; #else return -1; #endif case LWS_GAESM_CFB128: case LWS_GAESM_CFB8: case LWS_GAESM_CTR: case LWS_GAESM_OFB: n = mbedtls_aes_setkey_enc(&ctx->u.ctx, ctx->k->buf, ctx->k->len * 8); break; default: n = mbedtls_aes_setkey_dec(&ctx->u.ctx, ctx->k->buf, ctx->k->len * 8); break; } break; } if (n) lwsl_notice("%s: setting key: -0x%x\n", __func__, -n); return n; } LWS_VISIBLE int lws_genaes_destroy(struct lws_genaes_ctx *ctx, unsigned char *tag, size_t tlen) { int n = 0; if (ctx->mode == LWS_GAESM_GCM) { n = mbedtls_gcm_finish(&ctx->u.ctx_gcm, tag, tlen); if (n) lwsl_notice("%s: mbedtls_gcm_finish: -0x%x\n", __func__, -n); if (tag && ctx->op == MBEDTLS_AES_DECRYPT && !n) { if (lws_timingsafe_bcmp(ctx->tag, tag, ctx->taglen)) { lwsl_err("%s: lws_genaes_crypt tag " "mismatch (bad first)\n", __func__); lwsl_hexdump_notice(tag, tlen); lwsl_hexdump_notice(ctx->tag, ctx->taglen); n = -1; } } mbedtls_gcm_free(&ctx->u.ctx_gcm); return n; } if (ctx->mode == LWS_GAESM_XTS) #if defined(MBEDTLS_CIPHER_MODE_XTS) mbedtls_aes_xts_free(&ctx->u.ctx_xts); #else return -1; #endif else mbedtls_aes_free(&ctx->u.ctx); return 0; } static int lws_genaes_rfc3394_wrap(int wrap, int cek_bits, const uint8_t *kek, int kek_bits, const uint8_t *in, uint8_t *out) { int n, m, ret = -1, c64 = cek_bits / 64; mbedtls_aes_context ctx; uint8_t a[8], b[16]; /* * notice the KEK key used to perform the wrapping or unwrapping is * always the size of the AES key used, eg, A128KW == 128 bits. The * key being wrapped or unwrapped may be larger and is set by the * 'bits' parameter. * * If it's larger than the KEK key size bits, we iterate over it */ mbedtls_aes_init(&ctx); if (wrap) { /* * The inputs to the key wrapping process are the KEK and the * plaintext to be wrapped. The plaintext consists of n 64-bit * blocks, containing the key data being wrapped. * * Inputs: Plaintext, n 64-bit values {P1, P2, ..., Pn}, * and Key, K (the KEK). * Outputs: Ciphertext, (n+1) 64-bit values * {C0, C1, ..., Cn}. * * The default initial value (IV) is defined to be the * hexadecimal constant: * * A[0] = IV = A6A6A6A6A6A6A6A6 */ memset(out, 0xa6, 8); memcpy(out + 8, in, 8 * c64); n = mbedtls_aes_setkey_enc(&ctx, kek, kek_bits); } else { /* * 2.2.2 Key Unwrap * * The inputs to the unwrap process are the KEK and (n+1) * 64-bit blocks of ciphertext consisting of previously * wrapped key. It returns n blocks of plaintext consisting * of the n 64-bit blocks of the decrypted key data. * * Inputs: Ciphertext, (n+1) 64-bit values {C0, C1, ..., Cn}, * and Key, K (the KEK). * * Outputs: Plaintext, n 64-bit values {P1, P2, ..., Pn}. */ memcpy(a, in, 8); memcpy(out, in + 8, 8 * c64); n = mbedtls_aes_setkey_dec(&ctx, kek, kek_bits); } if (n < 0) { lwsl_err("%s: setkey failed\n", __func__); goto bail; } if (wrap) { for (n = 0; n <= 5; n++) { uint8_t *r = out + 8; for (m = 1; m <= c64; m++) { memcpy(b, out, 8); memcpy(b + 8, r, 8); if (mbedtls_internal_aes_encrypt(&ctx, b, b)) goto bail; memcpy(out, b, 8); out[7] ^= c64 * n + m; memcpy(r, b + 8, 8); r += 8; } } ret = 0; } else { /* * */ for (n = 5; n >= 0; n--) { uint8_t *r = out + (c64 - 1) * 8; for (m = c64; m >= 1; m--) { memcpy(b, a, 8); b[7] ^= c64 * n + m; memcpy(b + 8, r, 8); if (mbedtls_internal_aes_decrypt(&ctx, b, b)) goto bail; memcpy(a, b, 8); memcpy(r, b + 8, 8); r -= 8; } } ret = 0; for (n = 0; n < 8; n++) if (a[n] != 0xa6) ret = -1; } bail: if (ret) lwsl_notice("%s: failed\n", __func__); mbedtls_aes_free(&ctx); return ret; } LWS_VISIBLE int lws_genaes_crypt(struct lws_genaes_ctx *ctx, const uint8_t *in, size_t len, uint8_t *out, uint8_t *iv_or_nonce_ctr_or_data_unit_16, uint8_t *stream_block_16, size_t *nc_or_iv_off, int taglen) { uint8_t iv[LWS_JWE_AES_IV_BYTES], sb[16]; int n = 0; switch (ctx->mode) { case LWS_GAESM_KW: /* a key of length ctx->k->len is wrapped by a 128-bit KEK */ n = lws_genaes_rfc3394_wrap(ctx->op == MBEDTLS_AES_ENCRYPT, ctx->op == MBEDTLS_AES_ENCRYPT ? len * 8 : (len - 8) * 8, ctx->k->buf, ctx->k->len * 8, in, out); break; case LWS_GAESM_CBC: memcpy(iv, iv_or_nonce_ctr_or_data_unit_16, 16); n = mbedtls_aes_crypt_cbc(&ctx->u.ctx, ctx->op, len, iv, in, out); break; case LWS_GAESM_CFB128: memcpy(iv, iv_or_nonce_ctr_or_data_unit_16, 16); n = mbedtls_aes_crypt_cfb128(&ctx->u.ctx, ctx->op, len, nc_or_iv_off, iv, in, out); break; case LWS_GAESM_CFB8: memcpy(iv, iv_or_nonce_ctr_or_data_unit_16, 16); n = mbedtls_aes_crypt_cfb8(&ctx->u.ctx, ctx->op, len, iv, in, out); break; case LWS_GAESM_CTR: memcpy(iv, iv_or_nonce_ctr_or_data_unit_16, 16); memcpy(sb, stream_block_16, 16); n = mbedtls_aes_crypt_ctr(&ctx->u.ctx, len, nc_or_iv_off, iv, sb, in, out); memcpy(iv_or_nonce_ctr_or_data_unit_16, iv, 16); memcpy(stream_block_16, sb, 16); break; case LWS_GAESM_ECB: n = mbedtls_aes_crypt_ecb(&ctx->u.ctx, ctx->op, in, out); break; case LWS_GAESM_OFB: #if defined(MBEDTLS_CIPHER_MODE_OFB) memcpy(iv, iv_or_nonce_ctr_or_data_unit_16, 16); n = mbedtls_aes_crypt_ofb(&ctx->u.ctx, len, nc_or_iv_off, iv, in, out); break; #else return -1; #endif case LWS_GAESM_XTS: #if defined(MBEDTLS_CIPHER_MODE_XTS) memcpy(iv, iv_or_nonce_ctr_or_data_unit_16, 16); n = mbedtls_aes_crypt_xts(&ctx->u.ctx_xts, ctx->op, len, iv, in, out); break; #else return -1; #endif case LWS_GAESM_GCM: if (!ctx->underway) { ctx->underway = 1; memcpy(ctx->tag, stream_block_16, taglen); ctx->taglen = taglen; /* * iv: iv_or_nonce_ctr_or_data_unit_16 * iv_len: *nc_or_iv_off * stream_block_16: pointer to tag * additional data: in * additional data len: len */ n = mbedtls_gcm_starts(&ctx->u.ctx_gcm, ctx->op, iv_or_nonce_ctr_or_data_unit_16, *nc_or_iv_off, in, len); if (n) { lwsl_notice("%s: mbedtls_gcm_starts: -0x%x\n", __func__, -n); return -1; } break; } n = mbedtls_gcm_update(&ctx->u.ctx_gcm, len, in, out); if (n) { lwsl_notice("%s: mbedtls_gcm_update: -0x%x\n", __func__, -n); return -1; } break; } if (n) { lwsl_notice("%s: failed: -0x%x, len %d\n", __func__, -n, (int)len); return -1; } return 0; } libwebsockets-3.2.1/lib/tls/mbedtls/lws-gencrypto.c000066400000000000000000000032241357643561300223560ustar00rootroot00000000000000/* * libwebsockets - generic crypto api hiding the backend * * Copyright (C) 2017 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * lws-gencrypto openssl-specific common code */ #include "core/private.h" #include "tls/mbedtls/private.h" mbedtls_md_type_t lws_gencrypto_mbedtls_hash_to_MD_TYPE(enum lws_genhash_types hash_type) { mbedtls_md_type_t h = -1; switch (hash_type) { case LWS_GENHASH_TYPE_MD5: h = MBEDTLS_MD_MD5; break; case LWS_GENHASH_TYPE_SHA1: h = MBEDTLS_MD_SHA1; break; case LWS_GENHASH_TYPE_SHA256: h = MBEDTLS_MD_SHA256; break; case LWS_GENHASH_TYPE_SHA384: h = MBEDTLS_MD_SHA384; break; case LWS_GENHASH_TYPE_SHA512: h = MBEDTLS_MD_SHA512; break; default: break; } return h; } int lws_gencrypto_mbedtls_rngf(void *context, unsigned char *buf, size_t len) { if ((size_t)lws_get_random(context, buf, len) == len) { // lwsl_hexdump_err(buf, len); return 0; } lwsl_err("%s: rng failed\n", __func__); return -1; } libwebsockets-3.2.1/lib/tls/mbedtls/lws-genec.c000066400000000000000000000320141357643561300214240ustar00rootroot00000000000000/* * libwebsockets - generic EC api hiding the backend - mbedtls implementation * * Copyright (C) 2017 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * lws_genec provides an EC abstraction api in lws that works the * same whether you are using openssl or mbedtls crypto functions underneath. */ #include "core/private.h" #include "tls/mbedtls/private.h" const struct lws_ec_curves lws_ec_curves[] = { /* * These are the curves we are willing to use by default... * * The 3 recommended+ (P-256) and optional curves in RFC7518 7.6 * * Specific keys lengths from RFC8422 p20 */ { "P-256", MBEDTLS_ECP_DP_SECP256R1, 32 }, { "P-384", MBEDTLS_ECP_DP_SECP384R1, 48 }, { "P-521", MBEDTLS_ECP_DP_SECP521R1, 66 }, { NULL, 0, 0 } }; static int lws_genec_keypair_import(struct lws_genec_ctx *ctx, enum enum_lws_dh_side side, struct lws_gencrypto_keyelem *el) { const struct lws_ec_curves *curve; mbedtls_ecp_keypair kp; int ret = -1; if (el[LWS_GENCRYPTO_EC_KEYEL_CRV].len < 4) { lwsl_notice("%s: crv '%s' (%d)\n", __func__, el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf ? (char *)el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf : "null", el[LWS_GENCRYPTO_EC_KEYEL_CRV].len); return -21; } curve = lws_genec_curve(ctx->curve_table, (char *)el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf); if (!curve) return -22; /* * d (the private part) may be missing, otherwise it and everything * else must match the expected bignum size */ if ((el[LWS_GENCRYPTO_EC_KEYEL_D].len && el[LWS_GENCRYPTO_EC_KEYEL_D].len != curve->key_bytes) || el[LWS_GENCRYPTO_EC_KEYEL_X].len != curve->key_bytes || el[LWS_GENCRYPTO_EC_KEYEL_Y].len != curve->key_bytes) return -23; mbedtls_ecp_keypair_init(&kp); if (mbedtls_ecp_group_load(&kp.grp, curve->tls_lib_nid)) goto bail1; ctx->has_private = !!el[LWS_GENCRYPTO_EC_KEYEL_D].len; /* d (the private key) is directly an mpi */ if (ctx->has_private && mbedtls_mpi_read_binary(&kp.d, el[LWS_GENCRYPTO_EC_KEYEL_D].buf, el[LWS_GENCRYPTO_EC_KEYEL_D].len)) goto bail1; mbedtls_ecp_set_zero(&kp.Q); if (mbedtls_mpi_read_binary(&kp.Q.X, el[LWS_GENCRYPTO_EC_KEYEL_X].buf, el[LWS_GENCRYPTO_EC_KEYEL_X].len)) goto bail1; if (mbedtls_mpi_read_binary(&kp.Q.Y, el[LWS_GENCRYPTO_EC_KEYEL_Y].buf, el[LWS_GENCRYPTO_EC_KEYEL_Y].len)) goto bail1; mbedtls_mpi_lset(&kp.Q.Z, 1); switch (ctx->genec_alg) { case LEGENEC_ECDH: if (mbedtls_ecdh_get_params(ctx->u.ctx_ecdh, &kp, (mbedtls_ecdh_side)side)) goto bail1; /* verify the key is consistent with the claimed curve */ if (ctx->has_private && mbedtls_ecp_check_privkey(&ctx->u.ctx_ecdh->grp, &ctx->u.ctx_ecdh->d)) goto bail1; if (mbedtls_ecp_check_pubkey(&ctx->u.ctx_ecdh->grp, &ctx->u.ctx_ecdh->Q)) goto bail1; break; case LEGENEC_ECDSA: if (mbedtls_ecdsa_from_keypair(ctx->u.ctx_ecdsa, &kp)) goto bail1; /* verify the key is consistent with the claimed curve */ if (ctx->has_private && mbedtls_ecp_check_privkey(&ctx->u.ctx_ecdsa->grp, &ctx->u.ctx_ecdsa->d)) goto bail1; if (mbedtls_ecp_check_pubkey(&ctx->u.ctx_ecdsa->grp, &ctx->u.ctx_ecdsa->Q)) goto bail1; break; default: goto bail1; } ret = 0; bail1: mbedtls_ecp_keypair_free(&kp); return ret; } LWS_VISIBLE int lws_genecdh_create(struct lws_genec_ctx *ctx, struct lws_context *context, const struct lws_ec_curves *curve_table) { memset(ctx, 0, sizeof(*ctx)); ctx->context = context; ctx->curve_table = curve_table; ctx->genec_alg = LEGENEC_ECDH; ctx->u.ctx_ecdh = lws_zalloc(sizeof(*ctx->u.ctx_ecdh), "genecdh"); if (!ctx->u.ctx_ecdh) return 1; mbedtls_ecdh_init(ctx->u.ctx_ecdh); return 0; } LWS_VISIBLE int lws_genecdsa_create(struct lws_genec_ctx *ctx, struct lws_context *context, const struct lws_ec_curves *curve_table) { memset(ctx, 0, sizeof(*ctx)); ctx->context = context; ctx->curve_table = curve_table; ctx->genec_alg = LEGENEC_ECDSA; ctx->u.ctx_ecdsa = lws_zalloc(sizeof(*ctx->u.ctx_ecdsa), "genecdsa"); if (!ctx->u.ctx_ecdsa) return 1; mbedtls_ecdsa_init(ctx->u.ctx_ecdsa); return 0; } LWS_VISIBLE int lws_genecdh_set_key(struct lws_genec_ctx *ctx, struct lws_gencrypto_keyelem *el, enum enum_lws_dh_side side) { if (ctx->genec_alg != LEGENEC_ECDH) return -1; return lws_genec_keypair_import(ctx, side, el); } LWS_VISIBLE int lws_genecdsa_set_key(struct lws_genec_ctx *ctx, struct lws_gencrypto_keyelem *el) { if (ctx->genec_alg != LEGENEC_ECDSA) return -1; return lws_genec_keypair_import(ctx, 0, el); } LWS_VISIBLE void lws_genec_destroy(struct lws_genec_ctx *ctx) { switch (ctx->genec_alg) { case LEGENEC_ECDH: if (ctx->u.ctx_ecdh) { mbedtls_ecdh_free(ctx->u.ctx_ecdh); lws_free(ctx->u.ctx_ecdh); ctx->u.ctx_ecdh = NULL; } break; case LEGENEC_ECDSA: if (ctx->u.ctx_ecdsa) { mbedtls_ecdsa_free(ctx->u.ctx_ecdsa); lws_free(ctx->u.ctx_ecdsa); ctx->u.ctx_ecdsa = NULL; } break; default: break; } } LWS_VISIBLE int lws_genecdh_new_keypair(struct lws_genec_ctx *ctx, enum enum_lws_dh_side side, const char *curve_name, struct lws_gencrypto_keyelem *el) { const struct lws_ec_curves *curve; mbedtls_ecdsa_context ecdsa; mbedtls_ecp_keypair *kp; mbedtls_mpi *mpi[3]; int n; if (ctx->genec_alg != LEGENEC_ECDH) return -1; curve = lws_genec_curve(ctx->curve_table, curve_name); if (!curve) { lwsl_err("%s: curve '%s' not supported\n", __func__, curve_name); return -22; } mbedtls_ecdsa_init(&ecdsa); n = mbedtls_ecdsa_genkey(&ecdsa, curve->tls_lib_nid, lws_gencrypto_mbedtls_rngf, ctx->context); if (n) { lwsl_err("mbedtls_ecdsa_genkey failed 0x%x\n", -n); goto bail1; } kp = (mbedtls_ecp_keypair *)&ecdsa; n = mbedtls_ecdh_get_params(ctx->u.ctx_ecdh, kp, (mbedtls_ecdh_side)side); if (n) { lwsl_err("mbedtls_ecdh_get_params failed 0x%x\n", -n); goto bail1; } /* * we need to capture the individual element BIGNUMs into * lws_gencrypto_keyelem, so they can be serialized, used in jwk etc */ mpi[0] = &kp->Q.X; mpi[1] = &kp->d; mpi[2] = &kp->Q.Y; el[LWS_GENCRYPTO_EC_KEYEL_CRV].len = strlen(curve_name) + 1; el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf = lws_malloc(el[LWS_GENCRYPTO_EC_KEYEL_CRV].len, "ec"); if (!el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf) goto bail1; strcpy((char *)el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf, curve_name); for (n = LWS_GENCRYPTO_EC_KEYEL_X; n < LWS_GENCRYPTO_EC_KEYEL_COUNT; n++) { el[n].len = curve->key_bytes; el[n].buf = lws_malloc(curve->key_bytes, "ec"); if (!el[n].buf) goto bail2; if (mbedtls_mpi_write_binary(mpi[n - 1], el[n].buf, curve->key_bytes)) goto bail2; } mbedtls_ecdsa_free(&ecdsa); return 0; bail2: for (n = 0; n < LWS_GENCRYPTO_EC_KEYEL_COUNT; n++) if (el[n].buf) lws_free_set_NULL(el[n].buf); bail1: mbedtls_ecdsa_free(&ecdsa); lws_free_set_NULL(ctx->u.ctx_ecdh); return -1; } LWS_VISIBLE int lws_genecdsa_new_keypair(struct lws_genec_ctx *ctx, const char *curve_name, struct lws_gencrypto_keyelem *el) { const struct lws_ec_curves *curve; mbedtls_ecp_keypair *kp; mbedtls_mpi *mpi[3]; int n; if (ctx->genec_alg != LEGENEC_ECDSA) return -1; curve = lws_genec_curve(ctx->curve_table, curve_name); if (!curve) { lwsl_err("%s: curve '%s' not supported\n", __func__, curve_name); return -22; } //mbedtls_ecdsa_init(ctx->u.ctx_ecdsa); n = mbedtls_ecdsa_genkey(ctx->u.ctx_ecdsa, curve->tls_lib_nid, lws_gencrypto_mbedtls_rngf, ctx->context); if (n) { lwsl_err("mbedtls_ecdsa_genkey failed 0x%x\n", -n); goto bail1; } /* * we need to capture the individual element BIGNUMs into * lws_gencrypto_keyelems, so they can be serialized, used in jwk etc */ kp = (mbedtls_ecp_keypair *)ctx->u.ctx_ecdsa; mpi[0] = &kp->Q.X; mpi[1] = &kp->d; mpi[2] = &kp->Q.Y; el[LWS_GENCRYPTO_EC_KEYEL_CRV].len = strlen(curve_name) + 1; el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf = lws_malloc(el[LWS_GENCRYPTO_EC_KEYEL_CRV].len, "ec"); if (!el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf) goto bail1; strcpy((char *)el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf, curve_name); for (n = LWS_GENCRYPTO_EC_KEYEL_X; n < LWS_GENCRYPTO_EC_KEYEL_COUNT; n++) { el[n].len = curve->key_bytes; el[n].buf = lws_malloc(curve->key_bytes, "ec"); if (!el[n].buf) goto bail2; if (mbedtls_mpi_write_binary(mpi[n - 1], el[n].buf, el[n].len)) { lwsl_err("%s: mbedtls_mpi_write_binary failed\n", __func__); goto bail2; } } return 0; bail2: for (n = 0; n < LWS_GENCRYPTO_EC_KEYEL_COUNT; n++) if (el[n].buf) lws_free_set_NULL(el[n].buf); bail1: lws_free_set_NULL(ctx->u.ctx_ecdsa); return -1; } LWS_VISIBLE LWS_EXTERN int lws_genecdsa_hash_sign_jws(struct lws_genec_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, int keybits, uint8_t *sig, size_t sig_len) { int n, keybytes = lws_gencrypto_bits_to_bytes(keybits); size_t hlen = lws_genhash_size(hash_type); mbedtls_mpi mpi_r, mpi_s; size_t slen = sig_len; if (ctx->genec_alg != LEGENEC_ECDSA) return -1; /* * The ECDSA P-256 SHA-256 digital signature is generated as follows: * * 1. Generate a digital signature of the JWS Signing Input using ECDSA * P-256 SHA-256 with the desired private key. The output will be * the pair (R, S), where R and S are 256-bit unsigned integers. * * 2. Turn R and S into octet sequences in big-endian order, with each * array being be 32 octets long. The octet sequence * representations MUST NOT be shortened to omit any leading zero * octets contained in the values. * * 3. Concatenate the two octet sequences in the order R and then S. * (Note that many ECDSA implementations will directly produce this * concatenation as their output.) * * 4. The resulting 64-octet sequence is the JWS Signature value. */ mbedtls_mpi_init(&mpi_r); mbedtls_mpi_init(&mpi_s); n = mbedtls_ecdsa_sign(&ctx->u.ctx_ecdsa->grp, &mpi_r, &mpi_s, &ctx->u.ctx_ecdsa->d, in, hlen, lws_gencrypto_mbedtls_rngf, ctx->context); if (n) { lwsl_err("%s: mbedtls_ecdsa_sign failed: -0x%x\n", __func__, -n); goto bail2; } if (mbedtls_mpi_write_binary(&mpi_r, sig, keybytes)) goto bail2; mbedtls_mpi_free(&mpi_r); if (mbedtls_mpi_write_binary(&mpi_s, sig + keybytes, keybytes)) goto bail1; mbedtls_mpi_free(&mpi_s); return (int)slen; bail2: mbedtls_mpi_free(&mpi_r); bail1: mbedtls_mpi_free(&mpi_s); return -3; } LWS_VISIBLE LWS_EXTERN int lws_genecdsa_hash_sig_verify_jws(struct lws_genec_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, int keybits, const uint8_t *sig, size_t sig_len) { int n, keybytes = lws_gencrypto_bits_to_bytes(keybits); size_t hlen = lws_genhash_size(hash_type); mbedtls_mpi mpi_r, mpi_s; if (ctx->genec_alg != LEGENEC_ECDSA) return -1; if ((int)sig_len != keybytes * 2) return -1; /* * 1. The JWS Signature value MUST be a 64-octet sequence. If it is * not a 64-octet sequence, the validation has failed. * * 2. Split the 64-octet sequence into two 32-octet sequences. The * first octet sequence represents R and the second S. The values R * and S are represented as octet sequences using the Integer-to- * OctetString Conversion defined in Section 2.3.7 of SEC1 [SEC1] * (in big-endian octet order). * * 3. Submit the JWS Signing Input, R, S, and the public key (x, y) to * the ECDSA P-256 SHA-256 validator. */ mbedtls_mpi_init(&mpi_r); mbedtls_mpi_init(&mpi_s); if (mbedtls_mpi_read_binary(&mpi_r, sig, keybytes)) return -1; if (mbedtls_mpi_read_binary(&mpi_s, sig + keybytes, keybytes)) goto bail1; n = mbedtls_ecdsa_verify(&ctx->u.ctx_ecdsa->grp, in, hlen, &ctx->u.ctx_ecdsa->Q, &mpi_r, &mpi_s); mbedtls_mpi_free(&mpi_s); mbedtls_mpi_free(&mpi_r); if (n) { lwsl_err("%s: mbedtls_ecdsa_verify failed: -0x%x\n", __func__, -n); goto bail; } return 0; bail1: mbedtls_mpi_free(&mpi_r); bail: return -3; } int lws_genecdh_compute_shared_secret(struct lws_genec_ctx *ctx, uint8_t *ss, int *ss_len) { int n; size_t st; if (mbedtls_ecp_check_pubkey(&ctx->u.ctx_ecdh->grp, &ctx->u.ctx_ecdh->Q) || mbedtls_ecp_check_pubkey(&ctx->u.ctx_ecdh->grp, &ctx->u.ctx_ecdh->Qp)) { lwsl_err("%s: both sides must be set up\n", __func__); return -1; } n = mbedtls_ecdh_calc_secret(ctx->u.ctx_ecdh, &st, ss, *ss_len, lws_gencrypto_mbedtls_rngf, ctx->context); if (n) return -1; *ss_len = (int)st; return 0; } libwebsockets-3.2.1/lib/tls/mbedtls/lws-genhash.c000066400000000000000000000104161357643561300217620ustar00rootroot00000000000000/* * libwebsockets - generic hash and HMAC api hiding the backend * * Copyright (C) 2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * lws_genhash provides a hash / hmac abstraction api in lws that works the * same whether you are using openssl or mbedtls hash functions underneath. */ #include "libwebsockets.h" #include #if (MBEDTLS_VERSION_NUMBER >= 0x02070000) #define MBA(fn) fn##_ret #else #define MBA(fn) fn #endif int lws_genhash_init(struct lws_genhash_ctx *ctx, enum lws_genhash_types type) { ctx->type = type; switch (ctx->type) { case LWS_GENHASH_TYPE_MD5: mbedtls_md5_init(&ctx->u.md5); MBA(mbedtls_md5_starts)(&ctx->u.md5); break; case LWS_GENHASH_TYPE_SHA1: mbedtls_sha1_init(&ctx->u.sha1); MBA(mbedtls_sha1_starts)(&ctx->u.sha1); break; case LWS_GENHASH_TYPE_SHA256: mbedtls_sha256_init(&ctx->u.sha256); MBA(mbedtls_sha256_starts)(&ctx->u.sha256, 0); break; case LWS_GENHASH_TYPE_SHA384: mbedtls_sha512_init(&ctx->u.sha512); MBA(mbedtls_sha512_starts)(&ctx->u.sha512, 1 /* is384 */); break; case LWS_GENHASH_TYPE_SHA512: mbedtls_sha512_init(&ctx->u.sha512); MBA(mbedtls_sha512_starts)(&ctx->u.sha512, 0); break; default: return 1; } return 0; } int lws_genhash_update(struct lws_genhash_ctx *ctx, const void *in, size_t len) { if (!len) return 0; switch (ctx->type) { case LWS_GENHASH_TYPE_MD5: MBA(mbedtls_md5_update)(&ctx->u.md5, in, len); break; case LWS_GENHASH_TYPE_SHA1: MBA(mbedtls_sha1_update)(&ctx->u.sha1, in, len); break; case LWS_GENHASH_TYPE_SHA256: MBA(mbedtls_sha256_update)(&ctx->u.sha256, in, len); break; case LWS_GENHASH_TYPE_SHA384: MBA(mbedtls_sha512_update)(&ctx->u.sha512, in, len); break; case LWS_GENHASH_TYPE_SHA512: MBA(mbedtls_sha512_update)(&ctx->u.sha512, in, len); break; } return 0; } int lws_genhash_destroy(struct lws_genhash_ctx *ctx, void *result) { switch (ctx->type) { case LWS_GENHASH_TYPE_MD5: MBA(mbedtls_md5_finish)(&ctx->u.md5, result); mbedtls_md5_free(&ctx->u.md5); break; case LWS_GENHASH_TYPE_SHA1: MBA(mbedtls_sha1_finish)(&ctx->u.sha1, result); mbedtls_sha1_free(&ctx->u.sha1); break; case LWS_GENHASH_TYPE_SHA256: MBA(mbedtls_sha256_finish)(&ctx->u.sha256, result); mbedtls_sha256_free(&ctx->u.sha256); break; case LWS_GENHASH_TYPE_SHA384: MBA(mbedtls_sha512_finish)(&ctx->u.sha512, result); mbedtls_sha512_free(&ctx->u.sha512); break; case LWS_GENHASH_TYPE_SHA512: MBA(mbedtls_sha512_finish)(&ctx->u.sha512, result); mbedtls_sha512_free(&ctx->u.sha512); break; } return 0; } int lws_genhmac_init(struct lws_genhmac_ctx *ctx, enum lws_genhmac_types type, const uint8_t *key, size_t key_len) { int t; ctx->type = type; switch (type) { case LWS_GENHMAC_TYPE_SHA256: t = MBEDTLS_MD_SHA256; break; case LWS_GENHMAC_TYPE_SHA384: t = MBEDTLS_MD_SHA384; break; case LWS_GENHMAC_TYPE_SHA512: t = MBEDTLS_MD_SHA512; break; default: return -1; } ctx->hmac = mbedtls_md_info_from_type(t); if (!ctx->hmac) return -1; if (mbedtls_md_init_ctx(&ctx->ctx, ctx->hmac)) return -1; if (mbedtls_md_hmac_starts(&ctx->ctx, key, key_len)) { mbedtls_md_free(&ctx->ctx); ctx->hmac = NULL; return -1; } return 0; } int lws_genhmac_update(struct lws_genhmac_ctx *ctx, const void *in, size_t len) { if (!len) return 0; if (mbedtls_md_hmac_update(&ctx->ctx, in, len)) return -1; return 0; } int lws_genhmac_destroy(struct lws_genhmac_ctx *ctx, void *result) { int n = 0; if (result) n = mbedtls_md_hmac_finish(&ctx->ctx, result); mbedtls_md_free(&ctx->ctx); ctx->hmac = NULL; if (n) return -1; return 0; } libwebsockets-3.2.1/lib/tls/mbedtls/lws-genrsa.c000066400000000000000000000241051357643561300216240ustar00rootroot00000000000000/* * libwebsockets - generic RSA api hiding the backend * * Copyright (C) 2017 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * lws_genrsa provides an RSA abstraction api in lws that works the * same whether you are using openssl or mbedtls crypto functions underneath. */ #include "core/private.h" #include "tls/mbedtls/private.h" #include LWS_VISIBLE void lws_genrsa_destroy_elements(struct lws_gencrypto_keyelem *el) { int n; for (n = 0; n < LWS_GENCRYPTO_RSA_KEYEL_COUNT; n++) if (el[n].buf) lws_free_set_NULL(el[n].buf); } static int mode_map[] = { MBEDTLS_RSA_PKCS_V15, MBEDTLS_RSA_PKCS_V21 }; LWS_VISIBLE int lws_genrsa_create(struct lws_genrsa_ctx *ctx, struct lws_gencrypto_keyelem *el, struct lws_context *context, enum enum_genrsa_mode mode, enum lws_genhash_types oaep_hashid) { memset(ctx, 0, sizeof(*ctx)); ctx->ctx = lws_zalloc(sizeof(*ctx->ctx), "genrsa"); if (!ctx->ctx) return 1; ctx->context = context; ctx->mode = mode; if (mode >= LGRSAM_COUNT) return -1; mbedtls_rsa_init(ctx->ctx, mode_map[mode], 0); ctx->ctx->padding = mode_map[mode]; ctx->ctx->hash_id = lws_gencrypto_mbedtls_hash_to_MD_TYPE(oaep_hashid); { int n; mbedtls_mpi *mpi[LWS_GENCRYPTO_RSA_KEYEL_COUNT] = { &ctx->ctx->E, &ctx->ctx->N, &ctx->ctx->D, &ctx->ctx->P, &ctx->ctx->Q, &ctx->ctx->DP, &ctx->ctx->DQ, &ctx->ctx->QP, }; for (n = 0; n < LWS_GENCRYPTO_RSA_KEYEL_COUNT; n++) if (el[n].buf && mbedtls_mpi_read_binary(mpi[n], el[n].buf, el[n].len)) { lwsl_notice("mpi load failed\n"); lws_free_set_NULL(ctx->ctx); return -1; } /* mbedtls... compute missing P & Q */ if ( el[LWS_GENCRYPTO_RSA_KEYEL_D].len && !el[LWS_GENCRYPTO_RSA_KEYEL_P].len && !el[LWS_GENCRYPTO_RSA_KEYEL_Q].len) { if (mbedtls_rsa_complete(ctx->ctx)) { lwsl_notice("mbedtls_rsa_complete failed\n"); lws_free_set_NULL(ctx->ctx); return -1; } } } ctx->ctx->len = el[LWS_GENCRYPTO_RSA_KEYEL_N].len; return 0; } static int _rngf(void *context, unsigned char *buf, size_t len) { if ((size_t)lws_get_random(context, buf, len) == len) return 0; return -1; } LWS_VISIBLE int lws_genrsa_new_keypair(struct lws_context *context, struct lws_genrsa_ctx *ctx, enum enum_genrsa_mode mode, struct lws_gencrypto_keyelem *el, int bits) { int n; memset(ctx, 0, sizeof(*ctx)); ctx->ctx = lws_zalloc(sizeof(*ctx->ctx), "genrsa"); if (!ctx->ctx) return -1; ctx->context = context; ctx->mode = mode; if (mode >= LGRSAM_COUNT) return -1; mbedtls_rsa_init(ctx->ctx, mode_map[mode], 0); n = mbedtls_rsa_gen_key(ctx->ctx, _rngf, context, bits, 65537); if (n) { lwsl_err("mbedtls_rsa_gen_key failed 0x%x\n", -n); goto cleanup_1; } { mbedtls_mpi *mpi[LWS_GENCRYPTO_RSA_KEYEL_COUNT] = { &ctx->ctx->E, &ctx->ctx->N, &ctx->ctx->D, &ctx->ctx->P, &ctx->ctx->Q, &ctx->ctx->DP, &ctx->ctx->DQ, &ctx->ctx->QP, }; for (n = 0; n < LWS_GENCRYPTO_RSA_KEYEL_COUNT; n++) if (mbedtls_mpi_size(mpi[n])) { el[n].buf = lws_malloc( mbedtls_mpi_size(mpi[n]), "genrsakey"); if (!el[n].buf) goto cleanup; el[n].len = mbedtls_mpi_size(mpi[n]); if (mbedtls_mpi_write_binary(mpi[n], el[n].buf, el[n].len)) goto cleanup; } } return 0; cleanup: for (n = 0; n < LWS_GENCRYPTO_RSA_KEYEL_COUNT; n++) if (el[n].buf) lws_free_set_NULL(el[n].buf); cleanup_1: lws_free(ctx->ctx); return -1; } LWS_VISIBLE int lws_genrsa_public_decrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out, size_t out_max) { size_t olen = 0; int n; ctx->ctx->len = in_len; mbedtls_rsa_complete(ctx->ctx); switch(ctx->mode) { case LGRSAM_PKCS1_1_5: n = mbedtls_rsa_rsaes_pkcs1_v15_decrypt(ctx->ctx, _rngf, ctx->context, MBEDTLS_RSA_PUBLIC, &olen, in, out, out_max); break; case LGRSAM_PKCS1_OAEP_PSS: n = mbedtls_rsa_rsaes_oaep_decrypt(ctx->ctx, _rngf, ctx->context, MBEDTLS_RSA_PUBLIC, NULL, 0, &olen, in, out, out_max); break; default: return -1; } if (n) { lwsl_notice("%s: -0x%x\n", __func__, -n); return -1; } return olen; } LWS_VISIBLE int lws_genrsa_private_decrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out, size_t out_max) { size_t olen = 0; int n; ctx->ctx->len = in_len; mbedtls_rsa_complete(ctx->ctx); switch(ctx->mode) { case LGRSAM_PKCS1_1_5: n = mbedtls_rsa_rsaes_pkcs1_v15_decrypt(ctx->ctx, _rngf, ctx->context, MBEDTLS_RSA_PRIVATE, &olen, in, out, out_max); break; case LGRSAM_PKCS1_OAEP_PSS: n = mbedtls_rsa_rsaes_oaep_decrypt(ctx->ctx, _rngf, ctx->context, MBEDTLS_RSA_PRIVATE, NULL, 0, &olen, in, out, out_max); break; default: return -1; } if (n) { lwsl_notice("%s: -0x%x\n", __func__, -n); return -1; } return olen; } LWS_VISIBLE int lws_genrsa_public_encrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out) { int n; mbedtls_rsa_complete(ctx->ctx); switch(ctx->mode) { case LGRSAM_PKCS1_1_5: n = mbedtls_rsa_rsaes_pkcs1_v15_encrypt(ctx->ctx, _rngf, ctx->context, MBEDTLS_RSA_PUBLIC, in_len, in, out); break; case LGRSAM_PKCS1_OAEP_PSS: n = mbedtls_rsa_rsaes_oaep_encrypt(ctx->ctx, _rngf, ctx->context, MBEDTLS_RSA_PUBLIC, NULL, 0, in_len, in, out); break; default: return -1; } if (n < 0) { lwsl_notice("%s: -0x%x: in_len: %d\n", __func__, -n, (int)in_len); return -1; } return mbedtls_mpi_size(&ctx->ctx->N); } LWS_VISIBLE int lws_genrsa_private_encrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out) { int n; mbedtls_rsa_complete(ctx->ctx); switch(ctx->mode) { case LGRSAM_PKCS1_1_5: n = mbedtls_rsa_rsaes_pkcs1_v15_encrypt(ctx->ctx, _rngf, ctx->context, MBEDTLS_RSA_PRIVATE, in_len, in, out); break; case LGRSAM_PKCS1_OAEP_PSS: n = mbedtls_rsa_rsaes_oaep_encrypt(ctx->ctx, _rngf, ctx->context, MBEDTLS_RSA_PRIVATE, NULL, 0, in_len, in, out); break; default: return -1; } if (n) { lwsl_notice("%s: -0x%x: in_len: %d\n", __func__, -n, (int)in_len); return -1; } return mbedtls_mpi_size(&ctx->ctx->N); } LWS_VISIBLE int lws_genrsa_hash_sig_verify(struct lws_genrsa_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, const uint8_t *sig, size_t sig_len) { int n, h = lws_gencrypto_mbedtls_hash_to_MD_TYPE(hash_type); if (h < 0) return -1; mbedtls_rsa_complete(ctx->ctx); switch(ctx->mode) { case LGRSAM_PKCS1_1_5: n = mbedtls_rsa_rsassa_pkcs1_v15_verify(ctx->ctx, NULL, NULL, MBEDTLS_RSA_PUBLIC, h, 0, in, sig); break; case LGRSAM_PKCS1_OAEP_PSS: n = mbedtls_rsa_rsassa_pss_verify(ctx->ctx, NULL, NULL, MBEDTLS_RSA_PUBLIC, h, 0, in, sig); break; default: return -1; } if (n < 0) { lwsl_notice("%s: -0x%x\n", __func__, -n); return -1; } return n; } LWS_VISIBLE int lws_genrsa_hash_sign(struct lws_genrsa_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, uint8_t *sig, size_t sig_len) { int n, h = lws_gencrypto_mbedtls_hash_to_MD_TYPE(hash_type); if (h < 0) return -1; mbedtls_rsa_complete(ctx->ctx); /* * The "sig" buffer must be as large as the size of ctx->N * (eg. 128 bytes if RSA-1024 is used). */ if (sig_len < ctx->ctx->len) return -1; switch(ctx->mode) { case LGRSAM_PKCS1_1_5: n = mbedtls_rsa_rsassa_pkcs1_v15_sign(ctx->ctx, NULL, NULL, MBEDTLS_RSA_PRIVATE, h, 0, in, sig); break; case LGRSAM_PKCS1_OAEP_PSS: n = mbedtls_rsa_rsassa_pss_sign(ctx->ctx, NULL, NULL, MBEDTLS_RSA_PRIVATE, h, 0, in, sig); break; default: return -1; } if (n < 0) { lwsl_notice("%s: -0x%x\n", __func__, -n); return -1; } return ctx->ctx->len; } LWS_VISIBLE int lws_genrsa_render_pkey_asn1(struct lws_genrsa_ctx *ctx, int _private, uint8_t *pkey_asn1, size_t pkey_asn1_len) { uint8_t *p = pkey_asn1, *totlen, *end = pkey_asn1 + pkey_asn1_len - 1; mbedtls_mpi *mpi[LWS_GENCRYPTO_RSA_KEYEL_COUNT] = { &ctx->ctx->N, &ctx->ctx->E, &ctx->ctx->D, &ctx->ctx->P, &ctx->ctx->Q, &ctx->ctx->DP, &ctx->ctx->DQ, &ctx->ctx->QP, }; int n; /* 30 82 - sequence * 09 29 <-- length(0x0929) less 4 bytes * 02 01 <- length (1) * 00 * 02 82 * 02 01 <- length (513) N * ... * * 02 03 <- length (3) E * 01 00 01 * * 02 82 * 02 00 <- length (512) D P Q EXP1 EXP2 COEFF * * */ *p++ = 0x30; *p++ = 0x82; totlen = p; p += 2; *p++ = 0x02; *p++ = 0x01; *p++ = 0x00; for (n = 0; n < LWS_GENCRYPTO_RSA_KEYEL_COUNT; n++) { int m = mbedtls_mpi_size(mpi[n]); uint8_t *elen; *p++ = 0x02; elen = p; if (m < 0x7f) *p++ = m; else { *p++ = 0x82; *p++ = m >> 8; *p++ = m & 0xff; } if (p + m > end) return -1; if (mbedtls_mpi_write_binary(mpi[n], p, m)) return -1; if (p[0] & 0x80) { p[0] = 0x00; if (mbedtls_mpi_write_binary(mpi[n], &p[1], m)) return -1; m++; } if (m < 0x7f) *elen = m; else { *elen++ = 0x82; *elen++ = m >> 8; *elen = m & 0xff; } p += m; } n = lws_ptr_diff(p, pkey_asn1); *totlen++ = (n - 4) >> 8; *totlen = (n - 4) & 0xff; return n; } LWS_VISIBLE void lws_genrsa_destroy(struct lws_genrsa_ctx *ctx) { if (!ctx->ctx) return; mbedtls_rsa_free(ctx->ctx); lws_free(ctx->ctx); ctx->ctx = NULL; } libwebsockets-3.2.1/lib/tls/mbedtls/mbedtls-client.c000066400000000000000000000200401357643561300224420ustar00rootroot00000000000000/* * libwebsockets - mbedtls-specific client TLS code * * Copyright (C) 2010-2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" static int OpenSSL_client_verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) { return 0; } int lws_ssl_client_bio_create(struct lws *wsi) { char hostname[128], *p; const char *alpn_comma = wsi->context->tls.alpn_default; struct alpn_ctx protos; if (lws_hdr_copy(wsi, hostname, sizeof(hostname), _WSI_TOKEN_CLIENT_HOST) <= 0) { lwsl_err("%s: Unable to get hostname\n", __func__); return -1; } /* * remove any :port part on the hostname... necessary for network * connection but typical certificates do not contain it */ p = hostname; while (*p) { if (*p == ':') { *p = '\0'; break; } p++; } wsi->tls.ssl = SSL_new(wsi->vhost->tls.ssl_client_ctx); if (!wsi->tls.ssl) { lwsl_info("%s: SSL_new() failed\n", __func__); return -1; } if (wsi->vhost->tls.ssl_info_event_mask) SSL_set_info_callback(wsi->tls.ssl, lws_ssl_info_callback); if (!(wsi->tls.use_ssl & LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK)) { X509_VERIFY_PARAM *param = SSL_get0_param(wsi->tls.ssl); /* Enable automatic hostname checks */ // X509_VERIFY_PARAM_set_hostflags(param, // X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS); X509_VERIFY_PARAM_set1_host(param, hostname, 0); } if (wsi->vhost->tls.alpn) alpn_comma = wsi->vhost->tls.alpn; if (lws_hdr_copy(wsi, hostname, sizeof(hostname), _WSI_TOKEN_CLIENT_ALPN) > 0) alpn_comma = hostname; lwsl_info("%s: %p: client conn sending ALPN list '%s'\n", __func__, wsi, alpn_comma); protos.len = lws_alpn_comma_to_openssl(alpn_comma, protos.data, sizeof(protos.data) - 1); /* with mbedtls, protos is not pointed to after exit from this call */ SSL_set_alpn_select_cb(wsi->tls.ssl, &protos); /* * use server name indication (SNI), if supported, * when establishing connection */ SSL_set_verify(wsi->tls.ssl, SSL_VERIFY_PEER, OpenSSL_client_verify_callback); SSL_set_fd(wsi->tls.ssl, wsi->desc.sockfd); return 0; } int ERR_get_error(void) { return 0; } enum lws_ssl_capable_status lws_tls_client_connect(struct lws *wsi) { int m, n = SSL_connect(wsi->tls.ssl); const unsigned char *prot; unsigned int len; if (n == 1) { SSL_get0_alpn_selected(wsi->tls.ssl, &prot, &len); lws_role_call_alpn_negotiated(wsi, (const char *)prot); lwsl_info("client connect OK\n"); return LWS_SSL_CAPABLE_DONE; } m = SSL_get_error(wsi->tls.ssl, n); if (m == SSL_ERROR_WANT_READ || SSL_want_read(wsi->tls.ssl)) return LWS_SSL_CAPABLE_MORE_SERVICE_READ; if (m == SSL_ERROR_WANT_WRITE || SSL_want_write(wsi->tls.ssl)) return LWS_SSL_CAPABLE_MORE_SERVICE_WRITE; if (!n) /* we don't know what he wants, but he says to retry */ return LWS_SSL_CAPABLE_MORE_SERVICE; return LWS_SSL_CAPABLE_ERROR; } int lws_tls_client_confirm_peer_cert(struct lws *wsi, char *ebuf, int ebuf_len) { int n; X509 *peer = SSL_get_peer_certificate(wsi->tls.ssl); struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; char *sb = (char *)&pt->serv_buf[0]; if (!peer) { lwsl_info("peer did not provide cert\n"); lws_snprintf(ebuf, ebuf_len, "no peer cert"); return -1; } lwsl_info("peer provided cert\n"); n = SSL_get_verify_result(wsi->tls.ssl); lws_latency(wsi->context, wsi, "SSL_get_verify_result LWS_CONNMODE..HANDSHAKE", n, n > 0); lwsl_debug("get_verify says %d\n", n); if (n == X509_V_OK) return 0; if (n == X509_V_ERR_HOSTNAME_MISMATCH && (wsi->tls.use_ssl & LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK)) { lwsl_info("accepting certificate for invalid hostname\n"); return 0; } if (n == X509_V_ERR_INVALID_CA && (wsi->tls.use_ssl & LCCSCF_ALLOW_SELFSIGNED)) { lwsl_info("accepting certificate from untrusted CA\n"); return 0; } if ((n == X509_V_ERR_CERT_NOT_YET_VALID || n == X509_V_ERR_CERT_HAS_EXPIRED) && (wsi->tls.use_ssl & LCCSCF_ALLOW_EXPIRED)) { lwsl_info("accepting expired or not yet valid certificate\n"); return 0; } lws_snprintf(ebuf, ebuf_len, "server's cert didn't look good, X509_V_ERR = %d: %s\n", n, ERR_error_string(n, sb)); lwsl_info("%s\n", ebuf); lws_tls_err_describe_clear(); return -1; } int lws_tls_client_create_vhost_context(struct lws_vhost *vh, const struct lws_context_creation_info *info, const char *cipher_list, const char *ca_filepath, const void *ca_mem, unsigned int ca_mem_len, const char *cert_filepath, const void *cert_mem, unsigned int cert_mem_len, const char *private_key_filepath) { X509 *d2i_X509(X509 **cert, const unsigned char *buffer, long len); SSL_METHOD *method = (SSL_METHOD *)TLS_client_method(); unsigned long error; int n; if (!method) { error = ERR_get_error(); lwsl_err("problem creating ssl method %lu: %s\n", error, ERR_error_string(error, (char *)vh->context->pt[0].serv_buf)); return 1; } /* create context */ vh->tls.ssl_client_ctx = SSL_CTX_new(method); if (!vh->tls.ssl_client_ctx) { error = ERR_get_error(); lwsl_err("problem creating ssl context %lu: %s\n", error, ERR_error_string(error, (char *)vh->context->pt[0].serv_buf)); return 1; } if (!ca_filepath && (!ca_mem || !ca_mem_len)) return 0; if (ca_filepath) { #if !defined(LWS_PLAT_OPTEE) uint8_t *buf; lws_filepos_t len; if (alloc_file(vh->context, ca_filepath, &buf, &len)) { lwsl_err("Load CA cert file %s failed\n", ca_filepath); return 1; } vh->tls.x509_client_CA = d2i_X509(NULL, buf, len); free(buf); lwsl_notice("Loading client CA for verification %s\n", ca_filepath); #endif } else { vh->tls.x509_client_CA = d2i_X509(NULL, (uint8_t*)ca_mem, ca_mem_len); lwsl_notice("%s: using mem client CA cert %d\n", __func__, ca_mem_len); } if (!vh->tls.x509_client_CA) { lwsl_err("client CA: x509 parse failed\n"); return 1; } if (!vh->tls.ssl_ctx) SSL_CTX_add_client_CA(vh->tls.ssl_client_ctx, vh->tls.x509_client_CA); else SSL_CTX_add_client_CA(vh->tls.ssl_ctx, vh->tls.x509_client_CA); /* support for client-side certificate authentication */ if (cert_filepath) { #if !defined(LWS_PLAT_OPTEE) uint8_t *buf; lws_filepos_t amount; if (lws_tls_use_any_upgrade_check_extant(cert_filepath) != LWS_TLS_EXTANT_YES && (info->options & LWS_SERVER_OPTION_IGNORE_MISSING_CERT)) return 0; lwsl_notice("%s: doing cert filepath %s\n", __func__, cert_filepath); if (alloc_file(vh->context, cert_filepath, &buf, &amount)) return 1; buf[amount++] = '\0'; SSL_CTX_use_PrivateKey_ASN1(0, vh->tls.ssl_client_ctx, buf, amount); n = SSL_CTX_use_certificate_ASN1(vh->tls.ssl_client_ctx, amount, buf); lws_free(buf); if (n < 1) { lwsl_err("problem %d getting cert '%s'\n", n, cert_filepath); lws_tls_err_describe_clear(); return 1; } lwsl_notice("Loaded client cert %s\n", cert_filepath); #endif } else if (cert_mem && cert_mem_len) { // lwsl_hexdump_notice(cert_mem, cert_mem_len - 1); SSL_CTX_use_PrivateKey_ASN1(0, vh->tls.ssl_client_ctx, cert_mem, cert_mem_len - 1); n = SSL_CTX_use_certificate_ASN1(vh->tls.ssl_client_ctx, cert_mem_len, cert_mem); if (n < 1) { lwsl_err("%s: problem interpreting client cert\n", __func__); lws_tls_err_describe_clear(); return 1; } lwsl_notice("%s: using mem client cert %d\n", __func__, cert_mem_len); } return 0; } libwebsockets-3.2.1/lib/tls/mbedtls/mbedtls-server.c000066400000000000000000000436731357643561300225130ustar00rootroot00000000000000/* * libwebsockets - mbedTLS-specific server functions * * Copyright (C) 2010-2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include int lws_tls_server_client_cert_verify_config(struct lws_vhost *vh) { int verify_options = SSL_VERIFY_PEER; /* as a server, are we requiring clients to identify themselves? */ if (!lws_check_opt(vh->options, LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT)) { lwsl_notice("no client cert required\n"); return 0; } /* * The wrapper has this messed-up mapping: * * else if (ctx->verify_mode == SSL_VERIFY_FAIL_IF_NO_PEER_CERT) * mode = MBEDTLS_SSL_VERIFY_OPTIONAL; * * ie the meaning is inverted. So where we should test for ! we don't */ if (lws_check_opt(vh->options, LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED)) verify_options = SSL_VERIFY_FAIL_IF_NO_PEER_CERT; lwsl_notice("%s: vh %s requires client cert %d\n", __func__, vh->name, verify_options); SSL_CTX_set_verify(vh->tls.ssl_ctx, verify_options, NULL); return 0; } static int lws_mbedtls_sni_cb(void *arg, mbedtls_ssl_context *mbedtls_ctx, const unsigned char *servername, size_t len) { SSL *ssl = SSL_SSL_from_mbedtls_ssl_context(mbedtls_ctx); struct lws_context *context = (struct lws_context *)arg; struct lws_vhost *vhost, *vh; lwsl_notice("%s: %s\n", __func__, servername); /* * We can only get ssl accepted connections by using a vhost's ssl_ctx * find out which listening one took us and only match vhosts on the * same port. */ vh = context->vhost_list; while (vh) { if (!vh->being_destroyed && vh->tls.ssl_ctx == SSL_get_SSL_CTX(ssl)) break; vh = vh->vhost_next; } if (!vh) { assert(vh); /* can't match the incoming vh? */ return 0; } vhost = lws_select_vhost(context, vh->listen_port, (const char *)servername); if (!vhost) { lwsl_info("SNI: none: %s:%d\n", servername, vh->listen_port); return 0; } lwsl_info("SNI: Found: %s:%d at vhost '%s'\n", servername, vh->listen_port, vhost->name); if (!vhost->tls.ssl_ctx) { lwsl_err("%s: vhost %s matches SNI but no valid cert\n", __func__, vh->name); return 1; } /* select the ssl ctx from the selected vhost for this conn */ SSL_set_SSL_CTX(ssl, vhost->tls.ssl_ctx); return 0; } int lws_tls_server_certs_load(struct lws_vhost *vhost, struct lws *wsi, const char *cert, const char *private_key, const char *mem_cert, size_t mem_cert_len, const char *mem_privkey, size_t mem_privkey_len) { lws_filepos_t flen; uint8_t *p = NULL; long err; int n; if ((!cert || !private_key) && (!mem_cert || !mem_privkey)) { lwsl_notice("%s: no usable input\n", __func__); return 0; } n = lws_tls_generic_cert_checks(vhost, cert, private_key); if (n == LWS_TLS_EXTANT_NO && (!mem_cert || !mem_privkey)) return 0; /* * we can't read the root-privs files. But if mem_cert is provided, * we should use that. */ if (n == LWS_TLS_EXTANT_NO) n = LWS_TLS_EXTANT_ALTERNATIVE; if (n == LWS_TLS_EXTANT_ALTERNATIVE && (!mem_cert || !mem_privkey)) return 1; /* no alternative */ if (n == LWS_TLS_EXTANT_ALTERNATIVE) { /* * Although we have prepared update certs, we no longer have * the rights to read our own cert + key we saved. * * If we were passed copies in memory buffers, use those * instead. * * The passed memory-buffer cert image is in DER, and the * memory-buffer private key image is PEM. */ cert = NULL; private_key = NULL; if (!mem_cert) return 1; } if (lws_tls_alloc_pem_to_der_file(vhost->context, cert, mem_cert, mem_cert_len, &p, &flen)) { lwsl_err("couldn't find cert file %s\n", cert); return 1; } err = SSL_CTX_use_certificate_ASN1(vhost->tls.ssl_ctx, flen, p); lws_free_set_NULL(p); if (!err) { lwsl_err("Problem loading cert\n"); return 1; } if (lws_tls_alloc_pem_to_der_file(vhost->context, private_key, (char *)mem_privkey, mem_privkey_len, &p, &flen)) { lwsl_err("couldn't find private key\n"); return 1; } err = SSL_CTX_use_PrivateKey_ASN1(0, vhost->tls.ssl_ctx, p, flen); lws_free_set_NULL(p); if (!err) { lwsl_err("Problem loading key\n"); return 1; } if (!private_key && !mem_privkey && vhost->protocols[0].callback(wsi, LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY, vhost->tls.ssl_ctx, NULL, 0)) { lwsl_err("ssl private key not set\n"); return 1; } vhost->tls.skipped_certs = 0; return 0; } int lws_tls_server_vhost_backend_init(const struct lws_context_creation_info *info, struct lws_vhost *vhost, struct lws *wsi) { const SSL_METHOD *method = TLS_server_method(); uint8_t *p; lws_filepos_t flen; int n; vhost->tls.ssl_ctx = SSL_CTX_new(method); /* create context */ if (!vhost->tls.ssl_ctx) { lwsl_err("problem creating ssl context\n"); return 1; } if (!vhost->tls.use_ssl || (!info->ssl_cert_filepath && !info->server_ssl_cert_mem)) return 0; if (info->ssl_ca_filepath) { lwsl_notice("%s: vh %s: loading CA filepath %s\n", __func__, vhost->name, info->ssl_ca_filepath); if (lws_tls_alloc_pem_to_der_file(vhost->context, info->ssl_ca_filepath, NULL, 0, &p, &flen)) { lwsl_err("couldn't find client CA file %s\n", info->ssl_ca_filepath); return 1; } if (SSL_CTX_add_client_CA_ASN1(vhost->tls.ssl_ctx, (int)flen, p) != 1) { lwsl_err("%s: SSL_CTX_add_client_CA_ASN1 unhappy\n", __func__); free(p); return 1; } free(p); } else { if (info->server_ssl_ca_mem && info->server_ssl_ca_mem_len && SSL_CTX_add_client_CA_ASN1(vhost->tls.ssl_ctx, (int)info->server_ssl_ca_mem_len, info->server_ssl_ca_mem) != 1) { lwsl_err("%s: mem SSL_CTX_add_client_CA_ASN1 unhappy\n", __func__); return 1; } lwsl_notice("%s: vh %s: mem CA OK\n", __func__, vhost->name); } n = lws_tls_server_certs_load(vhost, wsi, info->ssl_cert_filepath, info->ssl_private_key_filepath, info->server_ssl_cert_mem, info->server_ssl_cert_mem_len, info->server_ssl_private_key_mem, info->server_ssl_private_key_mem_len); if (n) return n; return 0; } int lws_tls_server_new_nonblocking(struct lws *wsi, lws_sockfd_type accept_fd) { errno = 0; wsi->tls.ssl = SSL_new(wsi->vhost->tls.ssl_ctx); if (wsi->tls.ssl == NULL) { lwsl_err("SSL_new failed: errno %d\n", errno); lws_tls_err_describe_clear(); return 1; } SSL_set_fd(wsi->tls.ssl, accept_fd); if (wsi->vhost->tls.ssl_info_event_mask) SSL_set_info_callback(wsi->tls.ssl, lws_ssl_info_callback); SSL_set_sni_callback(wsi->tls.ssl, lws_mbedtls_sni_cb, wsi->context); return 0; } #if defined(LWS_AMAZON_RTOS) enum lws_ssl_capable_status #else int #endif lws_tls_server_abort_connection(struct lws *wsi) { __lws_tls_shutdown(wsi); SSL_free(wsi->tls.ssl); return 0; } enum lws_ssl_capable_status lws_tls_server_accept(struct lws *wsi) { union lws_tls_cert_info_results ir; int m, n; n = SSL_accept(wsi->tls.ssl); if (n == 1) { if (strstr(wsi->vhost->name, ".invalid")) { lwsl_notice("%s: vhost has .invalid, " "rejecting accept\n", __func__); return LWS_SSL_CAPABLE_ERROR; } n = lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_COMMON_NAME, &ir, sizeof(ir.ns.name)); if (!n) lwsl_notice("%s: client cert CN '%s'\n", __func__, ir.ns.name); else lwsl_info("%s: couldn't get client cert CN\n", __func__); return LWS_SSL_CAPABLE_DONE; } m = SSL_get_error(wsi->tls.ssl, n); lwsl_debug("%s: %p: accept SSL_get_error %d errno %d\n", __func__, wsi, m, errno); // mbedtls wrapper only if (m == SSL_ERROR_SYSCALL && errno == 11) return LWS_SSL_CAPABLE_MORE_SERVICE_READ; #if defined(WIN32) if (m == SSL_ERROR_SYSCALL && errno == 0) return LWS_SSL_CAPABLE_MORE_SERVICE_READ; #endif if (m == SSL_ERROR_SYSCALL || m == SSL_ERROR_SSL) return LWS_SSL_CAPABLE_ERROR; if (m == SSL_ERROR_WANT_READ || SSL_want_read(wsi->tls.ssl)) { if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) { lwsl_info("%s: WANT_READ change_pollfd failed\n", __func__); return LWS_SSL_CAPABLE_ERROR; } lwsl_info("SSL_ERROR_WANT_READ\n"); return LWS_SSL_CAPABLE_MORE_SERVICE_READ; } if (m == SSL_ERROR_WANT_WRITE || SSL_want_write(wsi->tls.ssl)) { lwsl_debug("%s: WANT_WRITE\n", __func__); if (lws_change_pollfd(wsi, 0, LWS_POLLOUT)) { lwsl_info("%s: WANT_WRITE change_pollfd failed\n", __func__); return LWS_SSL_CAPABLE_ERROR; } return LWS_SSL_CAPABLE_MORE_SERVICE_WRITE; } return LWS_SSL_CAPABLE_ERROR; } #if defined(LWS_WITH_ACME) /* * mbedtls doesn't support SAN for cert creation. So we use a known-good * tls-sni-01 cert from OpenSSL that worked on Let's Encrypt, and just replace * the pubkey n part and the signature part. * * This will need redoing for tls-sni-02... */ static uint8_t ss_cert_leadin[] = { 0x30, 0x82, 0x05, 0x56, /* total length: LEN1 (+2 / +3) (correct for 513 + 512)*/ 0x30, 0x82, /* length: LEN2 (+6 / +7) (correct for 513) */ 0x03, 0x3e, /* addition: v3 cert (+5 bytes)*/ 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x01, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x3f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x73, 0x6f, 0x6d, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x2e, 0x61, 0x63, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x30, 0x1e, 0x17, 0x0d, /* from 2017-10-29 ... */ 0x31, 0x37, 0x31, 0x30, 0x32, 0x39, 0x31, 0x31, 0x34, 0x39, 0x34, 0x35, 0x5a, 0x17, 0x0d, /* thru 2049-10-29 we immediately discard the private key, no worries */ 0x34, 0x39, 0x31, 0x30, 0x32, 0x39, 0x31, 0x32, 0x34, 0x39, 0x34, 0x35, 0x5a, 0x30, 0x3f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x73, 0x6f, 0x6d, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x2e, 0x61, 0x63, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x30, 0x82, 0x02, 0x22, /* LEN3 (+C3 / C4) */ 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, /* LEN4 (+D6 / D7) */ 0x00, 0x30, 0x82, 0x02, 0x0a, /* LEN5 (+ DB / DC) */ 0x02, 0x82, //0x02, 0x01, /* length of n in bytes (including leading 00 if any) */ }, /* 1 + (keybits / 8) bytes N */ ss_cert_san_leadin[] = { /* e - fixed */ 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x5d, 0x30, 0x5b, 0x30, 0x59, 0x06, 0x03, 0x55, 0x1d, 0x11, 0x04, 0x52, 0x30, 0x50, /* <-- SAN length + 2 */ 0x82, 0x4e, /* <-- SAN length */ }, /* 78 bytes of SAN (tls-sni-01) 0x61, 0x64, 0x34, 0x31, 0x61, 0x66, 0x62, 0x65, 0x30, 0x63, 0x61, 0x34, 0x36, 0x34, 0x32, 0x66, 0x30, 0x61, 0x34, 0x34, 0x39, 0x64, 0x39, 0x63, 0x61, 0x37, 0x36, 0x65, 0x62, 0x61, 0x61, 0x62, 0x2e, 0x32, 0x38, 0x39, 0x34, 0x64, 0x34, 0x31, 0x36, 0x63, 0x39, 0x38, 0x33, 0x66, 0x31, 0x32, 0x65, 0x64, 0x37, 0x33, 0x31, 0x61, 0x33, 0x30, 0x66, 0x35, 0x63, 0x34, 0x34, 0x37, 0x37, 0x66, 0x65, 0x2e, 0x61, 0x63, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, */ /* end of LEN2 area */ ss_cert_sig_leadin[] = { /* it's saying that the signature is SHA256 + RSA */ 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, }; /* (keybits / 8) bytes signature to end of LEN1 area */ #define SAN_A_LENGTH 78 LWS_VISIBLE int lws_tls_acme_sni_cert_create(struct lws_vhost *vhost, const char *san_a, const char *san_b) { int buflen = 0x560; uint8_t *buf = lws_malloc(buflen, "tmp cert buf"), *p = buf, *pkey_asn1; struct lws_genrsa_ctx ctx; struct lws_gencrypto_keyelem el; uint8_t digest[32]; struct lws_genhash_ctx hash_ctx; int pkey_asn1_len = 3 * 1024; int n, m, keybits = lws_plat_recommended_rsa_bits(), adj; if (!buf) return 1; n = lws_genrsa_new_keypair(vhost->context, &ctx, &el, keybits); if (n < 0) { lws_genrsa_destroy_elements(&el); goto bail1; } n = sizeof(ss_cert_leadin); memcpy(p, ss_cert_leadin, n); p += n; adj = (0x0556 - 0x401) + (keybits / 4) + 1; buf[2] = adj >> 8; buf[3] = adj & 0xff; adj = (0x033e - 0x201) + (keybits / 8) + 1; buf[6] = adj >> 8; buf[7] = adj & 0xff; adj = (0x0222 - 0x201) + (keybits / 8) + 1; buf[0xc3] = adj >> 8; buf[0xc4] = adj & 0xff; adj = (0x020f - 0x201) + (keybits / 8) + 1; buf[0xd6] = adj >> 8; buf[0xd7] = adj & 0xff; adj = (0x020a - 0x201) + (keybits / 8) + 1; buf[0xdb] = adj >> 8; buf[0xdc] = adj & 0xff; *p++ = ((keybits / 8) + 1) >> 8; *p++ = ((keybits / 8) + 1) & 0xff; /* we need to drop 1 + (keybits / 8) bytes of n in here, 00 + key */ *p++ = 0x00; memcpy(p, el.e[LWS_GENCRYPTO_RSA_KEYEL_N].buf, el.e[LWS_GENCRYPTO_RSA_KEYEL_N].len); p += el.e[LWS_GENCRYPTO_RSA_KEYEL_N].len; memcpy(p, ss_cert_san_leadin, sizeof(ss_cert_san_leadin)); p += sizeof(ss_cert_san_leadin); /* drop in 78 bytes of san_a */ memcpy(p, san_a, SAN_A_LENGTH); p += SAN_A_LENGTH; memcpy(p, ss_cert_sig_leadin, sizeof(ss_cert_sig_leadin)); p[17] = ((keybits / 8) + 1) >> 8; p[18] = ((keybits / 8) + 1) & 0xff; p += sizeof(ss_cert_sig_leadin); /* hash the cert plaintext */ if (lws_genhash_init(&hash_ctx, LWS_GENHASH_TYPE_SHA256)) goto bail2; if (lws_genhash_update(&hash_ctx, buf, lws_ptr_diff(p, buf))) { lws_genhash_destroy(&hash_ctx, NULL); goto bail2; } if (lws_genhash_destroy(&hash_ctx, digest)) goto bail2; /* sign the hash */ n = lws_genrsa_hash_sign(&ctx, digest, LWS_GENHASH_TYPE_SHA256, p, buflen - lws_ptr_diff(p, buf)); if (n < 0) goto bail2; p += n; pkey_asn1 = lws_malloc(pkey_asn1_len, "mbed crt tmp"); if (!pkey_asn1) goto bail2; m = lws_genrsa_render_pkey_asn1(&ctx, 1, pkey_asn1, pkey_asn1_len); if (m < 0) { lws_free(pkey_asn1); goto bail2; } // lwsl_hexdump_level(LLL_DEBUG, buf, lws_ptr_diff(p, buf)); n = SSL_CTX_use_certificate_ASN1(vhost->tls.ssl_ctx, lws_ptr_diff(p, buf), buf); if (n != 1) { lws_free(pkey_asn1); lwsl_err("%s: generated cert failed to load 0x%x\n", __func__, -n); } else { //lwsl_debug("private key\n"); //lwsl_hexdump_level(LLL_DEBUG, pkey_asn1, n); /* and to use our generated private key */ n = SSL_CTX_use_PrivateKey_ASN1(0, vhost->tls.ssl_ctx, pkey_asn1, m); lws_free(pkey_asn1); if (n != 1) { lwsl_err("%s: SSL_CTX_use_PrivateKey_ASN1 failed\n", __func__); } } lws_genrsa_destroy(&ctx); lws_genrsa_destroy_elements(&el); lws_free(buf); return n != 1; bail2: lws_genrsa_destroy(&ctx); lws_genrsa_destroy_elements(&el); bail1: lws_free(buf); return -1; } void lws_tls_acme_sni_cert_destroy(struct lws_vhost *vhost) { } #if defined(LWS_WITH_JOSE) static int _rngf(void *context, unsigned char *buf, size_t len) { if ((size_t)lws_get_random(context, buf, len) == len) return 0; return -1; } static const char *x5[] = { "C", "ST", "L", "O", "CN" }; /* * CSR is output formatted as b64url(DER) * Private key is output as a PEM in memory */ LWS_VISIBLE LWS_EXTERN int lws_tls_acme_sni_csr_create(struct lws_context *context, const char *elements[], uint8_t *dcsr, size_t csr_len, char **privkey_pem, size_t *privkey_len) { mbedtls_x509write_csr csr; mbedtls_pk_context mpk; int buf_size = 4096, n; char subject[200], *p = subject, *end = p + sizeof(subject) - 1; uint8_t *buf = malloc(buf_size); /* malloc because given to user code */ if (!buf) return -1; mbedtls_x509write_csr_init(&csr); mbedtls_pk_init(&mpk); if (mbedtls_pk_setup(&mpk, mbedtls_pk_info_from_type(MBEDTLS_PK_RSA))) { lwsl_notice("%s: pk_setup failed\n", __func__); goto fail; } n = mbedtls_rsa_gen_key(mbedtls_pk_rsa(mpk), _rngf, context, lws_plat_recommended_rsa_bits(), 65537); if (n) { lwsl_notice("%s: failed to generate keys\n", __func__); goto fail1; } /* subject must be formatted like "C=TW,O=warmcat,CN=myserver" */ for (n = 0; n < (int)LWS_ARRAY_SIZE(x5); n++) { if (p != subject) *p++ = ','; if (elements[n]) p += lws_snprintf(p, end - p, "%s=%s", x5[n], elements[n]); } if (mbedtls_x509write_csr_set_subject_name(&csr, subject)) goto fail1; mbedtls_x509write_csr_set_key(&csr, &mpk); mbedtls_x509write_csr_set_md_alg(&csr, MBEDTLS_MD_SHA256); /* * data is written at the end of the buffer! Use the * return value to determine where you should start * using the buffer */ n = mbedtls_x509write_csr_der(&csr, buf, buf_size, _rngf, context); if (n < 0) { lwsl_notice("%s: write csr der failed\n", __func__); goto fail1; } /* we have it in DER, we need it in b64URL */ n = lws_jws_base64_enc((char *)(buf + buf_size) - n, n, (char *)dcsr, csr_len); if (n < 0) goto fail1; /* * okay, the CSR is done, last we need the private key in PEM * re-use the DER CSR buf as the result buffer since we cn do it in * one step */ if (mbedtls_pk_write_key_pem(&mpk, buf, buf_size)) { lwsl_notice("write key pem failed\n"); goto fail1; } *privkey_pem = (char *)buf; *privkey_len = strlen((const char *)buf); mbedtls_pk_free(&mpk); mbedtls_x509write_csr_free(&csr); return n; fail1: mbedtls_pk_free(&mpk); fail: mbedtls_x509write_csr_free(&csr); free(buf); return -1; } #endif #endif libwebsockets-3.2.1/lib/tls/mbedtls/private.h000066400000000000000000000022721357643561300212220ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * gencrypto mbedtls-specific helper declarations */ #include struct lws_x509_cert { mbedtls_x509_crt cert; /* has a .next for linked-list / chain */ }; mbedtls_md_type_t lws_gencrypto_mbedtls_hash_to_MD_TYPE(enum lws_genhash_types hash_type); int lws_gencrypto_mbedtls_rngf(void *context, unsigned char *buf, size_t len); libwebsockets-3.2.1/lib/tls/mbedtls/ssl.c000066400000000000000000000174761357643561300203600ustar00rootroot00000000000000/* * libwebsockets - mbedTLS-specific lws apis * * Copyright (C) 2010 - 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "tls/mbedtls/private.h" LWS_VISIBLE void lws_ssl_destroy(struct lws_vhost *vhost) { if (!lws_check_opt(vhost->context->options, LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT)) return; if (vhost->tls.ssl_ctx) SSL_CTX_free(vhost->tls.ssl_ctx); if (!vhost->tls.user_supplied_ssl_ctx && vhost->tls.ssl_client_ctx) SSL_CTX_free(vhost->tls.ssl_client_ctx); if (vhost->tls.x509_client_CA) X509_free(vhost->tls.x509_client_CA); } LWS_VISIBLE int lws_ssl_capable_read(struct lws *wsi, unsigned char *buf, int len) { struct lws_context *context = wsi->context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; int n = 0, m; if (!wsi->tls.ssl) return lws_ssl_capable_read_no_ssl(wsi, buf, len); lws_stats_bump(pt, LWSSTATS_C_API_READ, 1); errno = 0; n = SSL_read(wsi->tls.ssl, buf, len); #if defined(LWS_WITH_ESP32) if (!n && errno == LWS_ENOTCONN) { lwsl_debug("%p: SSL_read ENOTCONN\n", wsi); return LWS_SSL_CAPABLE_ERROR; } #endif #if defined(LWS_WITH_STATS) if (!wsi->seen_rx && wsi->accept_start_us) { lws_stats_bump(pt, LWSSTATS_US_SSL_RX_DELAY_AVG, lws_now_usecs() - wsi->accept_start_us); lws_stats_bump(pt, LWSSTATS_C_SSL_CONNS_HAD_RX, 1); wsi->seen_rx = 1; } #endif lwsl_debug("%p: SSL_read says %d\n", wsi, n); /* manpage: returning 0 means connection shut down */ if (!n) { wsi->socket_is_permanently_unusable = 1; return LWS_SSL_CAPABLE_ERROR; } if (n < 0) { m = SSL_get_error(wsi->tls.ssl, n); lwsl_debug("%p: ssl err %d errno %d\n", wsi, m, errno); if (errno == LWS_ENOTCONN) { /* If the socket isn't connected anymore, bail out. */ wsi->socket_is_permanently_unusable = 1; return LWS_SSL_CAPABLE_ERROR; } if (m == SSL_ERROR_ZERO_RETURN || m == SSL_ERROR_SYSCALL) return LWS_SSL_CAPABLE_ERROR; if (m == SSL_ERROR_WANT_READ || SSL_want_read(wsi->tls.ssl)) { lwsl_debug("%s: WANT_READ\n", __func__); lwsl_debug("%p: LWS_SSL_CAPABLE_MORE_SERVICE\n", wsi); return LWS_SSL_CAPABLE_MORE_SERVICE; } if (m == SSL_ERROR_WANT_WRITE || SSL_want_write(wsi->tls.ssl)) { lwsl_debug("%s: WANT_WRITE\n", __func__); lwsl_debug("%p: LWS_SSL_CAPABLE_MORE_SERVICE\n", wsi); return LWS_SSL_CAPABLE_MORE_SERVICE; } wsi->socket_is_permanently_unusable = 1; return LWS_SSL_CAPABLE_ERROR; } lws_stats_bump(pt, LWSSTATS_B_READ, n); if (wsi->vhost) wsi->vhost->conn_stats.rx += n; /* * if it was our buffer that limited what we read, * check if SSL has additional data pending inside SSL buffers. * * Because these won't signal at the network layer with POLLIN * and if we don't realize, this data will sit there forever */ if (n != len) goto bail; if (!wsi->tls.ssl) goto bail; if (SSL_pending(wsi->tls.ssl) && lws_dll2_is_detached(&wsi->tls.dll_pending_tls)) lws_dll2_add_head(&wsi->tls.dll_pending_tls, &pt->tls.dll_pending_tls_owner); return n; bail: lws_ssl_remove_wsi_from_buffered_list(wsi); return n; } LWS_VISIBLE int lws_ssl_pending(struct lws *wsi) { if (!wsi->tls.ssl) return 0; return SSL_pending(wsi->tls.ssl); } LWS_VISIBLE int lws_ssl_capable_write(struct lws *wsi, unsigned char *buf, int len) { int n, m; if (!wsi->tls.ssl) return lws_ssl_capable_write_no_ssl(wsi, buf, len); n = SSL_write(wsi->tls.ssl, buf, len); if (n > 0) return n; m = SSL_get_error(wsi->tls.ssl, n); if (m != SSL_ERROR_SYSCALL) { if (m == SSL_ERROR_WANT_READ || SSL_want_read(wsi->tls.ssl)) { lwsl_notice("%s: want read\n", __func__); return LWS_SSL_CAPABLE_MORE_SERVICE; } if (m == SSL_ERROR_WANT_WRITE || SSL_want_write(wsi->tls.ssl)) { lws_set_blocking_send(wsi); lwsl_debug("%s: want write\n", __func__); return LWS_SSL_CAPABLE_MORE_SERVICE; } } lwsl_debug("%s failed: %d\n",__func__, m); wsi->socket_is_permanently_unusable = 1; return LWS_SSL_CAPABLE_ERROR; } int openssl_SSL_CTX_private_data_index; void lws_ssl_info_callback(const SSL *ssl, int where, int ret) { struct lws *wsi; struct lws_context *context; struct lws_ssl_info si; context = (struct lws_context *)SSL_CTX_get_ex_data( SSL_get_SSL_CTX(ssl), openssl_SSL_CTX_private_data_index); if (!context) return; wsi = wsi_from_fd(context, SSL_get_fd(ssl)); if (!wsi) return; if (!(where & wsi->vhost->tls.ssl_info_event_mask)) return; si.where = where; si.ret = ret; if (user_callback_handle_rxflow(wsi->protocol->callback, wsi, LWS_CALLBACK_SSL_INFO, wsi->user_space, &si, 0)) lws_set_timeout(wsi, PENDING_TIMEOUT_KILLED_BY_SSL_INFO, -1); } LWS_VISIBLE int lws_ssl_close(struct lws *wsi) { lws_sockfd_type n; if (!wsi->tls.ssl) return 0; /* not handled */ #if defined (LWS_HAVE_SSL_SET_INFO_CALLBACK) /* kill ssl callbacks, becausse we will remove the fd from the * table linking it to the wsi */ if (wsi->vhost->tls.ssl_info_event_mask) SSL_set_info_callback(wsi->tls.ssl, NULL); #endif n = SSL_get_fd(wsi->tls.ssl); if (!wsi->socket_is_permanently_unusable) SSL_shutdown(wsi->tls.ssl); compatible_close(n); SSL_free(wsi->tls.ssl); wsi->tls.ssl = NULL; if (!lwsi_role_client(wsi) && wsi->context->simultaneous_ssl_restriction && wsi->context->simultaneous_ssl-- == wsi->context->simultaneous_ssl_restriction) /* we made space and can do an accept */ lws_gate_accepts(wsi->context, 1); #if defined(LWS_WITH_STATS) wsi->context->updated = 1; #endif return 1; /* handled */ } void lws_ssl_SSL_CTX_destroy(struct lws_vhost *vhost) { if (vhost->tls.ssl_ctx) SSL_CTX_free(vhost->tls.ssl_ctx); if (!vhost->tls.user_supplied_ssl_ctx && vhost->tls.ssl_client_ctx) SSL_CTX_free(vhost->tls.ssl_client_ctx); #if defined(LWS_WITH_ACME) lws_tls_acme_sni_cert_destroy(vhost); #endif } void lws_ssl_context_destroy(struct lws_context *context) { } lws_tls_ctx * lws_tls_ctx_from_wsi(struct lws *wsi) { if (!wsi->tls.ssl) return NULL; return SSL_get_SSL_CTX(wsi->tls.ssl); } enum lws_ssl_capable_status __lws_tls_shutdown(struct lws *wsi) { int n = SSL_shutdown(wsi->tls.ssl); lwsl_debug("SSL_shutdown=%d for fd %d\n", n, wsi->desc.sockfd); switch (n) { case 1: /* successful completion */ n = shutdown(wsi->desc.sockfd, SHUT_WR); return LWS_SSL_CAPABLE_DONE; case 0: /* needs a retry */ __lws_change_pollfd(wsi, 0, LWS_POLLIN); return LWS_SSL_CAPABLE_MORE_SERVICE; default: /* fatal error, or WANT */ n = SSL_get_error(wsi->tls.ssl, n); if (n != SSL_ERROR_SYSCALL && n != SSL_ERROR_SSL) { if (SSL_want_read(wsi->tls.ssl)) { lwsl_debug("(wants read)\n"); __lws_change_pollfd(wsi, 0, LWS_POLLIN); return LWS_SSL_CAPABLE_MORE_SERVICE_READ; } if (SSL_want_write(wsi->tls.ssl)) { lwsl_debug("(wants write)\n"); __lws_change_pollfd(wsi, 0, LWS_POLLOUT); return LWS_SSL_CAPABLE_MORE_SERVICE_WRITE; } } return LWS_SSL_CAPABLE_ERROR; } } static int tops_fake_POLLIN_for_buffered_mbedtls(struct lws_context_per_thread *pt) { return lws_tls_fake_POLLIN_for_buffered(pt); } const struct lws_tls_ops tls_ops_mbedtls = { /* fake_POLLIN_for_buffered */ tops_fake_POLLIN_for_buffered_mbedtls, }; libwebsockets-3.2.1/lib/tls/mbedtls/tls.c000066400000000000000000000024251357643561300203450ustar00rootroot00000000000000/* * libwebsockets - mbedTLS-specific lws apis * * Copyright (C) 2010 - 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "tls/mbedtls/private.h" void lws_tls_err_describe_clear(void) { } int lws_context_init_ssl_library(const struct lws_context_creation_info *info) { lwsl_info(" Compiled with MbedTLS support\n"); if (!lws_check_opt(info->options, LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT)) lwsl_info(" SSL disabled: no " "LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT\n"); return 0; } void lws_context_deinit_ssl_library(struct lws_context *context) { } libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/000077500000000000000000000000001357643561300210545ustar00rootroot00000000000000libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/000077500000000000000000000000001357643561300224775ustar00rootroot00000000000000libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/internal/000077500000000000000000000000001357643561300243135ustar00rootroot00000000000000libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/internal/ssl3.h000066400000000000000000000026471357643561300253610ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL3_H_ #define _SSL3_H_ #ifdef __cplusplus extern "C" { #endif # define SSL3_AD_CLOSE_NOTIFY 0 # define SSL3_AD_UNEXPECTED_MESSAGE 10/* fatal */ # define SSL3_AD_BAD_RECORD_MAC 20/* fatal */ # define SSL3_AD_DECOMPRESSION_FAILURE 30/* fatal */ # define SSL3_AD_HANDSHAKE_FAILURE 40/* fatal */ # define SSL3_AD_NO_CERTIFICATE 41 # define SSL3_AD_BAD_CERTIFICATE 42 # define SSL3_AD_UNSUPPORTED_CERTIFICATE 43 # define SSL3_AD_CERTIFICATE_REVOKED 44 # define SSL3_AD_CERTIFICATE_EXPIRED 45 # define SSL3_AD_CERTIFICATE_UNKNOWN 46 # define SSL3_AD_ILLEGAL_PARAMETER 47/* fatal */ # define SSL3_AL_WARNING 1 # define SSL3_AL_FATAL 2 #define SSL3_VERSION 0x0300 #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/internal/ssl_cert.h000066400000000000000000000024151357643561300263040ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_CERT_H_ #define _SSL_CERT_H_ #ifdef __cplusplus extern "C" { #endif #include "ssl_types.h" /** * @brief create a certification object include private key object according to input certification * * @param ic - input certification point * * @return certification object point */ CERT *__ssl_cert_new(CERT *ic); /** * @brief create a certification object include private key object * * @param none * * @return certification object point */ CERT* ssl_cert_new(void); /** * @brief free a certification object * * @param cert - certification object point * * @return none */ void ssl_cert_free(CERT *cert); #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/internal/ssl_code.h000066400000000000000000000066511357643561300262670ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_CODE_H_ #define _SSL_CODE_H_ #ifdef __cplusplus extern "C" { #endif #include "ssl3.h" #include "tls1.h" #include "x509_vfy.h" /* Used in SSL_set_shutdown()/SSL_get_shutdown(); */ # define SSL_SENT_SHUTDOWN 1 # define SSL_RECEIVED_SHUTDOWN 2 # define SSL_VERIFY_NONE 0x00 # define SSL_VERIFY_PEER 0x01 # define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02 # define SSL_VERIFY_CLIENT_ONCE 0x04 /* * The following 3 states are kept in ssl->rlayer.rstate when reads fail, you * should not need these */ # define SSL_ST_READ_HEADER 0xF0 # define SSL_ST_READ_BODY 0xF1 # define SSL_ST_READ_DONE 0xF2 # define SSL_NOTHING 1 # define SSL_WRITING 2 # define SSL_READING 3 # define SSL_X509_LOOKUP 4 # define SSL_ASYNC_PAUSED 5 # define SSL_ASYNC_NO_JOBS 6 # define SSL_ERROR_NONE 0 # define SSL_ERROR_SSL 1 # define SSL_ERROR_WANT_READ 2 # define SSL_ERROR_WANT_WRITE 3 # define SSL_ERROR_WANT_X509_LOOKUP 4 # define SSL_ERROR_SYSCALL 5/* look at error stack/return value/errno */ # define SSL_ERROR_ZERO_RETURN 6 # define SSL_ERROR_WANT_CONNECT 7 # define SSL_ERROR_WANT_ACCEPT 8 # define SSL_ERROR_WANT_ASYNC 9 # define SSL_ERROR_WANT_ASYNC_JOB 10 /* Message flow states */ typedef enum { /* No handshake in progress */ MSG_FLOW_UNINITED, /* A permanent error with this connection */ MSG_FLOW_ERROR, /* We are about to renegotiate */ MSG_FLOW_RENEGOTIATE, /* We are reading messages */ MSG_FLOW_READING, /* We are writing messages */ MSG_FLOW_WRITING, /* Handshake has finished */ MSG_FLOW_FINISHED } MSG_FLOW_STATE; /* SSL subsystem states */ typedef enum { TLS_ST_BEFORE, TLS_ST_OK, DTLS_ST_CR_HELLO_VERIFY_REQUEST, TLS_ST_CR_SRVR_HELLO, TLS_ST_CR_CERT, TLS_ST_CR_CERT_STATUS, TLS_ST_CR_KEY_EXCH, TLS_ST_CR_CERT_REQ, TLS_ST_CR_SRVR_DONE, TLS_ST_CR_SESSION_TICKET, TLS_ST_CR_CHANGE, TLS_ST_CR_FINISHED, TLS_ST_CW_CLNT_HELLO, TLS_ST_CW_CERT, TLS_ST_CW_KEY_EXCH, TLS_ST_CW_CERT_VRFY, TLS_ST_CW_CHANGE, TLS_ST_CW_NEXT_PROTO, TLS_ST_CW_FINISHED, TLS_ST_SW_HELLO_REQ, TLS_ST_SR_CLNT_HELLO, DTLS_ST_SW_HELLO_VERIFY_REQUEST, TLS_ST_SW_SRVR_HELLO, TLS_ST_SW_CERT, TLS_ST_SW_KEY_EXCH, TLS_ST_SW_CERT_REQ, TLS_ST_SW_SRVR_DONE, TLS_ST_SR_CERT, TLS_ST_SR_KEY_EXCH, TLS_ST_SR_CERT_VRFY, TLS_ST_SR_NEXT_PROTO, TLS_ST_SR_CHANGE, TLS_ST_SR_FINISHED, TLS_ST_SW_SESSION_TICKET, TLS_ST_SW_CERT_STATUS, TLS_ST_SW_CHANGE, TLS_ST_SW_FINISHED } OSSL_HANDSHAKE_STATE; #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/internal/ssl_dbg.h000066400000000000000000000160731357643561300261100ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_DEBUG_H_ #define _SSL_DEBUG_H_ #include "platform/ssl_port.h" #ifdef __cplusplus extern "C" { #endif #ifdef CONFIG_OPENSSL_DEBUG_LEVEL #define SSL_DEBUG_LEVEL CONFIG_OPENSSL_DEBUG_LEVEL #else #define SSL_DEBUG_LEVEL 0 #endif #define SSL_DEBUG_ON (SSL_DEBUG_LEVEL + 1) #define SSL_DEBUG_OFF (SSL_DEBUG_LEVEL - 1) #ifdef CONFIG_OPENSSL_DEBUG #ifndef SSL_DEBUG_LOG #error "SSL_DEBUG_LOG is not defined" #endif #ifndef SSL_DEBUG_FL #define SSL_DEBUG_FL "\n" #endif #define SSL_SHOW_LOCATION() \ SSL_DEBUG_LOG("SSL assert : %s %d\n", \ __FILE__, __LINE__) #define SSL_DEBUG(level, fmt, ...) \ { \ if (level > SSL_DEBUG_LEVEL) { \ SSL_DEBUG_LOG(fmt SSL_DEBUG_FL, ##__VA_ARGS__); \ } \ } #else /* CONFIG_OPENSSL_DEBUG */ #define SSL_SHOW_LOCATION() #define SSL_DEBUG(level, fmt, ...) #endif /* CONFIG_OPENSSL_DEBUG */ /** * OpenSSL assert function * * if select "CONFIG_OPENSSL_ASSERT_DEBUG", SSL_ASSERT* will show error file name and line * if select "CONFIG_OPENSSL_ASSERT_EXIT", SSL_ASSERT* will just return error code. * if select "CONFIG_OPENSSL_ASSERT_DEBUG_EXIT" SSL_ASSERT* will show error file name and line, * then return error code. * if select "CONFIG_OPENSSL_ASSERT_DEBUG_BLOCK", SSL_ASSERT* will show error file name and line, * then block here with "while (1)" * * SSL_ASSERT1 may will return "-1", so function's return argument is integer. * SSL_ASSERT2 may will return "NULL", so function's return argument is a point. * SSL_ASSERT2 may will return nothing, so function's return argument is "void". */ #if defined(CONFIG_OPENSSL_ASSERT_DEBUG) #define SSL_ASSERT1(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ } \ } #define SSL_ASSERT2(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ } \ } #define SSL_ASSERT3(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ } \ } #elif defined(CONFIG_OPENSSL_ASSERT_EXIT) #define SSL_ASSERT1(s) \ { \ if (!(s)) { \ return -1; \ } \ } #define SSL_ASSERT2(s) \ { \ if (!(s)) { \ return NULL; \ } \ } #define SSL_ASSERT3(s) \ { \ if (!(s)) { \ return ; \ } \ } #elif defined(CONFIG_OPENSSL_ASSERT_DEBUG_EXIT) #define SSL_ASSERT1(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ return -1; \ } \ } #define SSL_ASSERT2(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ return NULL; \ } \ } #define SSL_ASSERT3(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ return ; \ } \ } #elif defined(CONFIG_OPENSSL_ASSERT_DEBUG_BLOCK) #define SSL_ASSERT1(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ while (1); \ } \ } #define SSL_ASSERT2(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ while (1); \ } \ } #define SSL_ASSERT3(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ while (1); \ } \ } #else #define SSL_ASSERT1(s) #define SSL_ASSERT2(s) #define SSL_ASSERT3(s) #endif #define SSL_PLATFORM_DEBUG_LEVEL SSL_DEBUG_OFF #define SSL_PLATFORM_ERROR_LEVEL SSL_DEBUG_ON #define SSL_CERT_DEBUG_LEVEL SSL_DEBUG_OFF #define SSL_CERT_ERROR_LEVEL SSL_DEBUG_ON #define SSL_PKEY_DEBUG_LEVEL SSL_DEBUG_OFF #define SSL_PKEY_ERROR_LEVEL SSL_DEBUG_ON #define SSL_X509_DEBUG_LEVEL SSL_DEBUG_OFF #define SSL_X509_ERROR_LEVEL SSL_DEBUG_ON #define SSL_LIB_DEBUG_LEVEL SSL_DEBUG_OFF #define SSL_LIB_ERROR_LEVEL SSL_DEBUG_ON #define SSL_STACK_DEBUG_LEVEL SSL_DEBUG_OFF #define SSL_STACK_ERROR_LEVEL SSL_DEBUG_ON #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/internal/ssl_lib.h000066400000000000000000000014421357643561300261140ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_LIB_H_ #define _SSL_LIB_H_ #ifdef __cplusplus extern "C" { #endif #include "ssl_types.h" void _ssl_set_alpn_list(const SSL *ssl); #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/internal/ssl_methods.h000066400000000000000000000061741357643561300270200ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_METHODS_H_ #define _SSL_METHODS_H_ #include "ssl_types.h" #ifdef __cplusplus extern "C" { #endif /** * TLS method function implement */ #define IMPLEMENT_TLS_METHOD_FUNC(func_name, \ new, free, \ handshake, shutdown, clear, \ read, send, pending, \ set_fd, get_fd, \ set_bufflen, \ get_verify_result, \ get_state) \ static const SSL_METHOD_FUNC func_name LOCAL_ATRR = { \ new, \ free, \ handshake, \ shutdown, \ clear, \ read, \ send, \ pending, \ set_fd, \ get_fd, \ set_bufflen, \ get_verify_result, \ get_state \ }; #define IMPLEMENT_TLS_METHOD(ver, mode, fun, func_name) \ const SSL_METHOD* func_name(void) { \ static const SSL_METHOD func_name##_data LOCAL_ATRR = { \ ver, \ mode, \ &(fun), \ }; \ return &func_name##_data; \ } #define IMPLEMENT_SSL_METHOD(ver, mode, fun, func_name) \ const SSL_METHOD* func_name(void) { \ static const SSL_METHOD func_name##_data LOCAL_ATRR = { \ ver, \ mode, \ &(fun), \ }; \ return &func_name##_data; \ } #define IMPLEMENT_X509_METHOD(func_name, \ new, \ free, \ load, \ show_info) \ const X509_METHOD* func_name(void) { \ static const X509_METHOD func_name##_data LOCAL_ATRR = { \ new, \ free, \ load, \ show_info \ }; \ return &func_name##_data; \ } #define IMPLEMENT_PKEY_METHOD(func_name, \ new, \ free, \ load) \ const PKEY_METHOD* func_name(void) { \ static const PKEY_METHOD func_name##_data LOCAL_ATRR = { \ new, \ free, \ load \ }; \ return &func_name##_data; \ } /** * @brief get X509 object method * * @param none * * @return X509 object method point */ const X509_METHOD* X509_method(void); /** * @brief get private key object method * * @param none * * @return private key object method point */ const PKEY_METHOD* EVP_PKEY_method(void); #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/internal/ssl_pkey.h000066400000000000000000000041121357643561300263130ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_PKEY_H_ #define _SSL_PKEY_H_ #ifdef __cplusplus extern "C" { #endif #include "ssl_types.h" /** * @brief create a private key object according to input private key * * @param ipk - input private key point * * @return new private key object point */ EVP_PKEY* __EVP_PKEY_new(EVP_PKEY *ipk); /** * @brief create a private key object * * @param none * * @return private key object point */ EVP_PKEY* EVP_PKEY_new(void); /** * @brief load a character key context into system context. If '*a' is pointed to the * private key, then load key into it. Or create a new private key object * * @param type - private key type * @param a - a point pointed to a private key point * @param pp - a point pointed to the key context memory point * @param length - key bytes * * @return private key object point */ EVP_PKEY* d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, long length); /** * @brief free a private key object * * @param pkey - private key object point * * @return none */ void EVP_PKEY_free(EVP_PKEY *x); /** * @brief load private key into the SSL * * @param type - private key type * @param ssl - SSL point * @param len - data bytes * @param d - data point * * @return result * 0 : failed * 1 : OK */ int SSL_use_PrivateKey_ASN1(int type, SSL *ssl, const unsigned char *d, long len); #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/internal/ssl_stack.h000066400000000000000000000016521357643561300264560ustar00rootroot00000000000000#ifndef _SSL_STACK_H_ #define _SSL_STACK_H_ #ifdef __cplusplus extern "C" { #endif #include "ssl_types.h" #define STACK_OF(type) struct stack_st_##type #define SKM_DEFINE_STACK_OF(t1, t2, t3) \ STACK_OF(t1); \ static ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \ { \ return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \ } \ #define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) /** * @brief create a openssl stack object * * @param c - stack function * * @return openssl stack object point */ OPENSSL_STACK* OPENSSL_sk_new(OPENSSL_sk_compfunc c); /** * @brief create a NULL function openssl stack object * * @param none * * @return openssl stack object point */ OPENSSL_STACK *OPENSSL_sk_new_null(void); /** * @brief free openssl stack object * * @param openssl stack object point * * @return none */ void OPENSSL_sk_free(OPENSSL_STACK *stack); #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/internal/ssl_types.h000066400000000000000000000133431357643561300265150ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_TYPES_H_ #define _SSL_TYPES_H_ #ifdef __cplusplus extern "C" { #endif //#include "core/private.h" #include #if defined(LWS_WITH_ESP32) /* AMAZON RTOS has its own setting via MTK_MBEDTLS_CONFIG_FILE */ #if !defined(LWS_AMAZON_RTOS) #undef MBEDTLS_CONFIG_FILE #define MBEDTLS_CONFIG_FILE #endif #endif #include "ssl_code.h" typedef void SSL_CIPHER; typedef void X509_STORE_CTX; typedef void X509_STORE; typedef void RSA; typedef void STACK; typedef void BIO; #if defined(WIN32) || defined(_WIN32) #define ossl_inline __inline #else #define ossl_inline inline #endif #define SSL_METHOD_CALL(f, s, ...) s->method->func->ssl_##f(s, ##__VA_ARGS__) #define X509_METHOD_CALL(f, x, ...) x->method->x509_##f(x, ##__VA_ARGS__) #define EVP_PKEY_METHOD_CALL(f, k, ...) k->method->pkey_##f(k, ##__VA_ARGS__) typedef int (*OPENSSL_sk_compfunc)(const void *, const void *); struct stack_st; typedef struct stack_st OPENSSL_STACK; struct ssl_method_st; typedef struct ssl_method_st SSL_METHOD; struct ssl_method_func_st; typedef struct ssl_method_func_st SSL_METHOD_FUNC; struct record_layer_st; typedef struct record_layer_st RECORD_LAYER; struct ossl_statem_st; typedef struct ossl_statem_st OSSL_STATEM; struct ssl_session_st; typedef struct ssl_session_st SSL_SESSION; struct ssl_ctx_st; typedef struct ssl_ctx_st SSL_CTX; struct ssl_st; typedef struct ssl_st SSL; struct cert_st; typedef struct cert_st CERT; struct x509_st; typedef struct x509_st X509; struct X509_VERIFY_PARAM_st; typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; struct evp_pkey_st; typedef struct evp_pkey_st EVP_PKEY; struct x509_method_st; typedef struct x509_method_st X509_METHOD; struct pkey_method_st; typedef struct pkey_method_st PKEY_METHOD; struct stack_st { char **data; int num_alloc; OPENSSL_sk_compfunc c; }; struct evp_pkey_st { void *pkey_pm; const PKEY_METHOD *method; }; struct x509_st { /* X509 certification platform private point */ void *x509_pm; const X509_METHOD *method; }; struct cert_st { int sec_level; X509 *x509; EVP_PKEY *pkey; }; struct ossl_statem_st { MSG_FLOW_STATE state; int hand_state; }; struct record_layer_st { int rstate; int read_ahead; }; struct ssl_session_st { long timeout; long time; X509 *peer; }; struct X509_VERIFY_PARAM_st { int depth; }; typedef int (*next_proto_cb)(SSL *ssl, const unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg); struct ssl_ctx_st { int version; int references; unsigned long options; const SSL_METHOD *method; CERT *cert; X509 *client_CA; const char **alpn_protos; next_proto_cb alpn_cb; int verify_mode; int (*default_verify_callback) (int ok, X509_STORE_CTX *ctx); long session_timeout; int read_ahead; int read_buffer_len; X509_VERIFY_PARAM param; }; struct ssl_st { /* protocol version(one of SSL3.0, TLS1.0, etc.) */ int version; unsigned long options; /* shut things down(0x01 : sent, 0x02 : received) */ int shutdown; CERT *cert; X509 *client_CA; SSL_CTX *ctx; const SSL_METHOD *method; const char **alpn_protos; RECORD_LAYER rlayer; /* where we are */ OSSL_STATEM statem; SSL_SESSION *session; int verify_mode; int (*verify_callback) (int ok, X509_STORE_CTX *ctx); int rwstate; int interrupted_remaining_write; long verify_result; X509_VERIFY_PARAM param; int err; void (*info_callback) (const SSL *ssl, int type, int val); /* SSL low-level system arch point */ void *ssl_pm; }; struct ssl_method_st { /* protocol version(one of SSL3.0, TLS1.0, etc.) */ int version; /* SSL mode(client(0) , server(1), not known(-1)) */ int endpoint; const SSL_METHOD_FUNC *func; }; struct ssl_method_func_st { int (*ssl_new)(SSL *ssl); void (*ssl_free)(SSL *ssl); int (*ssl_handshake)(SSL *ssl); int (*ssl_shutdown)(SSL *ssl); int (*ssl_clear)(SSL *ssl); int (*ssl_read)(SSL *ssl, void *buffer, int len); int (*ssl_send)(SSL *ssl, const void *buffer, int len); int (*ssl_pending)(const SSL *ssl); void (*ssl_set_fd)(SSL *ssl, int fd, int mode); int (*ssl_get_fd)(const SSL *ssl, int mode); void (*ssl_set_bufflen)(SSL *ssl, int len); long (*ssl_get_verify_result)(const SSL *ssl); OSSL_HANDSHAKE_STATE (*ssl_get_state)(const SSL *ssl); }; struct x509_method_st { int (*x509_new)(X509 *x, X509 *m_x); void (*x509_free)(X509 *x); int (*x509_load)(X509 *x, const unsigned char *buf, int len); int (*x509_show_info)(X509 *x); }; struct pkey_method_st { int (*pkey_new)(EVP_PKEY *pkey, EVP_PKEY *m_pkey); void (*pkey_free)(EVP_PKEY *pkey); int (*pkey_load)(EVP_PKEY *pkey, const unsigned char *buf, int len); }; #define OPENSSL_NPN_NEGOTIATED 1 int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/internal/ssl_x509.h000066400000000000000000000050421357643561300260530ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_X509_H_ #define _SSL_X509_H_ #ifdef __cplusplus extern "C" { #endif #include "ssl_types.h" #include "ssl_stack.h" DEFINE_STACK_OF(X509_NAME) /** * @brief create a X509 certification object according to input X509 certification * * @param ix - input X509 certification point * * @return new X509 certification object point */ X509* __X509_new(X509 *ix); /** * @brief create a X509 certification object * * @param none * * @return X509 certification object point */ X509* X509_new(void); /** * @brief load a character certification context into system context. If '*cert' is pointed to the * certification, then load certification into it. Or create a new X509 certification object * * @param cert - a point pointed to X509 certification * @param buffer - a point pointed to the certification context memory point * @param length - certification bytes * * @return X509 certification object point */ X509* d2i_X509(X509 **cert, const unsigned char *buffer, long len); /** * @brief free a X509 certification object * * @param x - X509 certification object point * * @return none */ void X509_free(X509 *x); /** * @brief set SSL context client CA certification * * @param ctx - SSL context point * @param x - X509 certification point * * @return result * 0 : failed * 1 : OK */ int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x); /** * @brief add CA client certification into the SSL * * @param ssl - SSL point * @param x - X509 certification point * * @return result * 0 : failed * 1 : OK */ int SSL_add_client_CA(SSL *ssl, X509 *x); /** * @brief load certification into the SSL * * @param ssl - SSL point * @param len - data bytes * @param d - data point * * @return result * 0 : failed * 1 : OK * */ int SSL_use_certificate_ASN1(SSL *ssl, int len, const unsigned char *d); const char *X509_verify_cert_error_string(long n); #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/internal/tls1.h000066400000000000000000000040511357643561300253470ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _TLS1_H_ #define _TLS1_H_ #ifdef __cplusplus extern "C" { #endif # define TLS1_AD_DECRYPTION_FAILED 21 # define TLS1_AD_RECORD_OVERFLOW 22 # define TLS1_AD_UNKNOWN_CA 48/* fatal */ # define TLS1_AD_ACCESS_DENIED 49/* fatal */ # define TLS1_AD_DECODE_ERROR 50/* fatal */ # define TLS1_AD_DECRYPT_ERROR 51 # define TLS1_AD_EXPORT_RESTRICTION 60/* fatal */ # define TLS1_AD_PROTOCOL_VERSION 70/* fatal */ # define TLS1_AD_INSUFFICIENT_SECURITY 71/* fatal */ # define TLS1_AD_INTERNAL_ERROR 80/* fatal */ # define TLS1_AD_INAPPROPRIATE_FALLBACK 86/* fatal */ # define TLS1_AD_USER_CANCELLED 90 # define TLS1_AD_NO_RENEGOTIATION 100 /* codes 110-114 are from RFC3546 */ # define TLS1_AD_UNSUPPORTED_EXTENSION 110 # define TLS1_AD_CERTIFICATE_UNOBTAINABLE 111 # define TLS1_AD_UNRECOGNIZED_NAME 112 # define TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE 113 # define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114 # define TLS1_AD_UNKNOWN_PSK_IDENTITY 115/* fatal */ # define TLS1_AD_NO_APPLICATION_PROTOCOL 120 /* fatal */ /* Special value for method supporting multiple versions */ #define TLS_ANY_VERSION 0x10000 #define TLS1_VERSION 0x0301 #define TLS1_1_VERSION 0x0302 #define TLS1_2_VERSION 0x0303 #define SSL_TLSEXT_ERR_OK 0 #define SSL_TLSEXT_ERR_NOACK 3 #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/internal/x509_vfy.h000066400000000000000000000136671357643561300260720ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _X509_VFY_H_ #define _X509_VFY_H_ #ifdef __cplusplus extern "C" { #endif #define X509_V_OK 0 #define X509_V_ERR_UNSPECIFIED 1 #define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 #define X509_V_ERR_UNABLE_TO_GET_CRL 3 #define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 #define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 #define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 #define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 #define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 #define X509_V_ERR_CERT_NOT_YET_VALID 9 #define X509_V_ERR_CERT_HAS_EXPIRED 10 #define X509_V_ERR_CRL_NOT_YET_VALID 11 #define X509_V_ERR_CRL_HAS_EXPIRED 12 #define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 #define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 #define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 #define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 #define X509_V_ERR_OUT_OF_MEM 17 #define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 #define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 #define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 #define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 #define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 #define X509_V_ERR_CERT_REVOKED 23 #define X509_V_ERR_INVALID_CA 24 #define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 #define X509_V_ERR_INVALID_PURPOSE 26 #define X509_V_ERR_CERT_UNTRUSTED 27 #define X509_V_ERR_CERT_REJECTED 28 /* These are 'informational' when looking for issuer cert */ #define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 #define X509_V_ERR_AKID_SKID_MISMATCH 30 #define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 #define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 #define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 #define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 #define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 #define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 #define X509_V_ERR_INVALID_NON_CA 37 #define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 #define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 #define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 #define X509_V_ERR_INVALID_EXTENSION 41 #define X509_V_ERR_INVALID_POLICY_EXTENSION 42 #define X509_V_ERR_NO_EXPLICIT_POLICY 43 #define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 #define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 #define X509_V_ERR_UNNESTED_RESOURCE 46 #define X509_V_ERR_PERMITTED_VIOLATION 47 #define X509_V_ERR_EXCLUDED_VIOLATION 48 #define X509_V_ERR_SUBTREE_MINMAX 49 /* The application is not happy */ #define X509_V_ERR_APPLICATION_VERIFICATION 50 #define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 #define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 #define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 #define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 /* Another issuer check debug option */ #define X509_V_ERR_PATH_LOOP 55 /* Suite B mode algorithm violation */ #define X509_V_ERR_SUITE_B_INVALID_VERSION 56 #define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 #define X509_V_ERR_SUITE_B_INVALID_CURVE 58 #define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 #define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 #define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 /* Host, email and IP check errors */ #define X509_V_ERR_HOSTNAME_MISMATCH 62 #define X509_V_ERR_EMAIL_MISMATCH 63 #define X509_V_ERR_IP_ADDRESS_MISMATCH 64 /* DANE TLSA errors */ #define X509_V_ERR_DANE_NO_MATCH 65 /* security level errors */ #define X509_V_ERR_EE_KEY_TOO_SMALL 66 #define X509_V_ERR_CA_KEY_TOO_SMALL 67 #define X509_V_ERR_CA_MD_TOO_WEAK 68 /* Caller error */ #define X509_V_ERR_INVALID_CALL 69 /* Issuer lookup error */ #define X509_V_ERR_STORE_LOOKUP 70 /* Certificate transparency */ #define X509_V_ERR_NO_VALID_SCTS 71 #define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/openssl/000077500000000000000000000000001357643561300241625ustar00rootroot00000000000000libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/openssl/ssl.h000077500000000000000000001145521357643561300251470ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_H_ #define _SSL_H_ #ifdef __cplusplus extern "C" { #endif #include #include "internal/ssl_x509.h" #include "internal/ssl_pkey.h" /* { */ #define SSL_CB_ALERT 0x4000 #define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT (1 << 0) #define X509_CHECK_FLAG_NO_WILDCARDS (1 << 1) #define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS (1 << 2) #define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS (1 << 3) #define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS (1 << 4) mbedtls_x509_crt * ssl_ctx_get_mbedtls_x509_crt(SSL_CTX *ssl_ctx); mbedtls_x509_crt * ssl_get_peer_mbedtls_x509_crt(SSL *ssl); int SSL_set_sni_callback(SSL *ssl, int(*cb)(void *, mbedtls_ssl_context *, const unsigned char *, size_t), void *param); void SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx); int SSL_CTX_add_client_CA_ASN1(SSL_CTX *ssl, int len, const unsigned char *d); SSL *SSL_SSL_from_mbedtls_ssl_context(mbedtls_ssl_context *msc); /** * @brief create a SSL context * * @param method - the SSL context method point * * @return the context point */ SSL_CTX* SSL_CTX_new(const SSL_METHOD *method); /** * @brief free a SSL context * * @param method - the SSL context point * * @return none */ void SSL_CTX_free(SSL_CTX *ctx); /** * @brief create a SSL * * @param ctx - the SSL context point * * @return the SSL point */ SSL* SSL_new(SSL_CTX *ctx); /** * @brief free the SSL * * @param ssl - the SSL point * * @return none */ void SSL_free(SSL *ssl); /** * @brief connect to the remote SSL server * * @param ssl - the SSL point * * @return result * 1 : OK * -1 : failed */ int SSL_connect(SSL *ssl); /** * @brief accept the remote connection * * @param ssl - the SSL point * * @return result * 1 : OK * -1 : failed */ int SSL_accept(SSL *ssl); /** * @brief read data from to remote * * @param ssl - the SSL point which has been connected * @param buffer - the received data buffer point * @param len - the received data length * * @return result * > 0 : OK, and return received data bytes * = 0 : connection is closed * < 0 : an error catch */ int SSL_read(SSL *ssl, void *buffer, int len); /** * @brief send the data to remote * * @param ssl - the SSL point which has been connected * @param buffer - the send data buffer point * @param len - the send data length * * @return result * > 0 : OK, and return sent data bytes * = 0 : connection is closed * < 0 : an error catch */ int SSL_write(SSL *ssl, const void *buffer, int len); /** * @brief get the verifying result of the SSL certification * * @param ssl - the SSL point * * @return the result of verifying */ long SSL_get_verify_result(const SSL *ssl); /** * @brief shutdown the connection * * @param ssl - the SSL point * * @return result * 1 : OK * 0 : shutdown is not finished * -1 : an error catch */ int SSL_shutdown(SSL *ssl); /** * @brief bind the socket file description into the SSL * * @param ssl - the SSL point * @param fd - socket handle * * @return result * 1 : OK * 0 : failed */ int SSL_set_fd(SSL *ssl, int fd); /** * @brief These functions load the private key into the SSL_CTX or SSL object * * @param ctx - the SSL context point * @param pkey - private key object point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); /** * @brief These functions load the certification into the SSL_CTX or SSL object * * @param ctx - the SSL context point * @param pkey - certification object point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); /** * @brief create the target SSL context client method * * @param none * * @return the SSLV2.3 version SSL context client method */ const SSL_METHOD* SSLv23_client_method(void); /** * @brief create the target SSL context client method * * @param none * * @return the TLSV1.0 version SSL context client method */ const SSL_METHOD* TLSv1_client_method(void); /** * @brief create the target SSL context client method * * @param none * * @return the SSLV1.0 version SSL context client method */ const SSL_METHOD* SSLv3_client_method(void); /** * @brief create the target SSL context client method * * @param none * * @return the TLSV1.1 version SSL context client method */ const SSL_METHOD* TLSv1_1_client_method(void); /** * @brief create the target SSL context client method * * @param none * * @return the TLSV1.2 version SSL context client method */ const SSL_METHOD* TLSv1_2_client_method(void); /** * @brief create the target SSL context server method * * @param none * * @return the TLS any version SSL context client method */ const SSL_METHOD* TLS_client_method(void); /** * @brief create the target SSL context server method * * @param none * * @return the SSLV2.3 version SSL context server method */ const SSL_METHOD* SSLv23_server_method(void); /** * @brief create the target SSL context server method * * @param none * * @return the TLSV1.1 version SSL context server method */ const SSL_METHOD* TLSv1_1_server_method(void); /** * @brief create the target SSL context server method * * @param none * * @return the TLSV1.2 version SSL context server method */ const SSL_METHOD* TLSv1_2_server_method(void); /** * @brief create the target SSL context server method * * @param none * * @return the TLSV1.0 version SSL context server method */ const SSL_METHOD* TLSv1_server_method(void); /** * @brief create the target SSL context server method * * @param none * * @return the SSLV3.0 version SSL context server method */ const SSL_METHOD* SSLv3_server_method(void); /** * @brief create the target SSL context server method * * @param none * * @return the TLS any version SSL context server method */ const SSL_METHOD* TLS_server_method(void); /** * @brief set the SSL context ALPN select callback function * * @param ctx - SSL context point * @param cb - ALPN select callback function * @param arg - ALPN select callback function entry private data point * * @return none */ void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, next_proto_cb cb, void *arg); void SSL_set_alpn_select_cb(SSL *ssl, void *arg); /** * @brief set the SSL context ALPN select protocol * * @param ctx - SSL context point * @param protos - ALPN protocol name * @param protos_len - ALPN protocol name bytes * * @return result * 0 : OK * 1 : failed */ int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, unsigned int protos_len); /** * @brief set the SSL context next ALPN select callback function * * @param ctx - SSL context point * @param cb - ALPN select callback function * @param arg - ALPN select callback function entry private data point * * @return none */ void SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx, int (*cb) (SSL *ssl, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg), void *arg); void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, unsigned int *len); void _ssl_set_alpn_list(const SSL *ssl); /** * @brief get SSL error code * * @param ssl - SSL point * @param ret_code - SSL return code * * @return SSL error number */ int SSL_get_error(const SSL *ssl, int ret_code); /** * @brief clear the SSL error code * * @param none * * @return none */ void ERR_clear_error(void); /** * @brief get the current SSL error code * * @param none * * @return current SSL error number */ int ERR_get_error(void); /** * @brief register the SSL error strings * * @param none * * @return none */ void ERR_load_SSL_strings(void); /** * @brief initialize the SSL library * * @param none * * @return none */ void SSL_library_init(void); /** * @brief generates a human-readable string representing the error code e * and store it into the "ret" point memory * * @param e - error code * @param ret - memory point to store the string * * @return the result string point */ char *ERR_error_string(unsigned long e, char *ret); /** * @brief add the SSL context option * * @param ctx - SSL context point * @param opt - new SSL context option * * @return the SSL context option */ unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long opt); /** * @brief add the SSL context mode * * @param ctx - SSL context point * @param mod - new SSL context mod * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_set_mode(SSL_CTX *ctx, int mod); /* } */ /** * @brief perform the SSL handshake * * @param ssl - SSL point * * @return result * 1 : OK * 0 : failed * -1 : a error catch */ int SSL_do_handshake(SSL *ssl); /** * @brief get the SSL current version * * @param ssl - SSL point * * @return the version string */ const char *SSL_get_version(const SSL *ssl); /** * @brief set the SSL context version * * @param ctx - SSL context point * @param meth - SSL method point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); /** * @brief get the bytes numbers which are to be read * * @param ssl - SSL point * * @return bytes number */ int SSL_pending(const SSL *ssl); /** * @brief check if SSL want nothing * * @param ssl - SSL point * * @return result * 0 : false * 1 : true */ int SSL_want_nothing(const SSL *ssl); /** * @brief check if SSL want to read * * @param ssl - SSL point * * @return result * 0 : false * 1 : true */ int SSL_want_read(const SSL *ssl); /** * @brief check if SSL want to write * * @param ssl - SSL point * * @return result * 0 : false * 1 : true */ int SSL_want_write(const SSL *ssl); /** * @brief get the SSL context current method * * @param ctx - SSL context point * * @return the SSL context current method */ const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx); /** * @brief get the SSL current method * * @param ssl - SSL point * * @return the SSL current method */ const SSL_METHOD *SSL_get_ssl_method(SSL *ssl); /** * @brief set the SSL method * * @param ssl - SSL point * @param meth - SSL method point * * @return result * 1 : OK * 0 : failed */ int SSL_set_ssl_method(SSL *ssl, const SSL_METHOD *method); /** * @brief add CA client certification into the SSL * * @param ssl - SSL point * @param x - CA certification point * * @return result * 1 : OK * 0 : failed */ int SSL_add_client_CA(SSL *ssl, X509 *x); /** * @brief add CA client certification into the SSL context * * @param ctx - SSL context point * @param x - CA certification point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x); /** * @brief set the SSL CA certification list * * @param ssl - SSL point * @param name_list - CA certification list * * @return none */ void SSL_set_client_CA_list(SSL *ssl, STACK_OF(X509_NAME) *name_list); /** * @brief set the SSL context CA certification list * * @param ctx - SSL context point * @param name_list - CA certification list * * @return none */ void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); /** * @briefget the SSL CA certification list * * @param ssl - SSL point * * @return CA certification list */ STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *ssl); /** * @brief get the SSL context CA certification list * * @param ctx - SSL context point * * @return CA certification list */ STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *ctx); /** * @brief get the SSL certification point * * @param ssl - SSL point * * @return SSL certification point */ X509 *SSL_get_certificate(const SSL *ssl); /** * @brief get the SSL private key point * * @param ssl - SSL point * * @return SSL private key point */ EVP_PKEY *SSL_get_privatekey(const SSL *ssl); /** * @brief set the SSL information callback function * * @param ssl - SSL point * @param cb - information callback function * * @return none */ void SSL_set_info_callback(SSL *ssl, void (*cb) (const SSL *ssl, int type, int val)); /** * @brief get the SSL state * * @param ssl - SSL point * * @return SSL state */ OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl); /** * @brief set the SSL context read buffer length * * @param ctx - SSL context point * @param len - read buffer length * * @return none */ void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); /** * @brief set the SSL read buffer length * * @param ssl - SSL point * @param len - read buffer length * * @return none */ void SSL_set_default_read_buffer_len(SSL *ssl, size_t len); /** * @brief set the SSL security level * * @param ssl - SSL point * @param level - security level * * @return none */ void SSL_set_security_level(SSL *ssl, int level); /** * @brief get the SSL security level * * @param ssl - SSL point * * @return security level */ int SSL_get_security_level(const SSL *ssl); /** * @brief get the SSL verifying mode of the SSL context * * @param ctx - SSL context point * * @return verifying mode */ int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); /** * @brief get the SSL verifying depth of the SSL context * * @param ctx - SSL context point * * @return verifying depth */ int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); /** * @brief set the SSL context verifying of the SSL context * * @param ctx - SSL context point * @param mode - verifying mode * @param verify_callback - verifying callback function * * @return none */ void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*verify_callback)(int, X509_STORE_CTX *)); /** * @brief set the SSL verifying of the SSL context * * @param ctx - SSL point * @param mode - verifying mode * @param verify_callback - verifying callback function * * @return none */ void SSL_set_verify(SSL *s, int mode, int (*verify_callback)(int, X509_STORE_CTX *)); /** * @brief set the SSL verify depth of the SSL context * * @param ctx - SSL context point * @param depth - verifying depth * * @return none */ void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth); /** * @brief certification verifying callback function * * @param preverify_ok - verifying result * @param x509_ctx - X509 certification point * * @return verifying result */ int verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx); /** * @brief set the session timeout time * * @param ctx - SSL context point * @param t - new session timeout time * * @return old session timeout time */ long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); /** * @brief get the session timeout time * * @param ctx - SSL context point * * @return current session timeout time */ long SSL_CTX_get_timeout(const SSL_CTX *ctx); /** * @brief set the SSL context cipher through the list string * * @param ctx - SSL context point * @param str - cipher controller list string * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str); /** * @brief set the SSL cipher through the list string * * @param ssl - SSL point * @param str - cipher controller list string * * @return result * 1 : OK * 0 : failed */ int SSL_set_cipher_list(SSL *ssl, const char *str); /** * @brief get the SSL cipher list string * * @param ssl - SSL point * * @return cipher controller list string */ const char *SSL_get_cipher_list(const SSL *ssl, int n); /** * @brief get the SSL cipher * * @param ssl - SSL point * * @return current cipher */ const SSL_CIPHER *SSL_get_current_cipher(const SSL *ssl); /** * @brief get the SSL cipher string * * @param ssl - SSL point * * @return cipher string */ const char *SSL_get_cipher(const SSL *ssl); /** * @brief get the SSL context object X509 certification storage * * @param ctx - SSL context point * * @return x509 certification storage */ X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx); /** * @brief set the SSL context object X509 certification store * * @param ctx - SSL context point * @param store - X509 certification store * * @return none */ void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store); /** * @brief get the SSL specifical statement * * @param ssl - SSL point * * @return specifical statement */ int SSL_want(const SSL *ssl); /** * @brief check if the SSL is SSL_X509_LOOKUP state * * @param ssl - SSL point * * @return result * 1 : OK * 0 : failed */ int SSL_want_x509_lookup(const SSL *ssl); /** * @brief reset the SSL * * @param ssl - SSL point * * @return result * 1 : OK * 0 : failed */ int SSL_clear(SSL *ssl); /** * @brief get the socket handle of the SSL * * @param ssl - SSL point * * @return result * >= 0 : yes, and return socket handle * < 0 : a error catch */ int SSL_get_fd(const SSL *ssl); /** * @brief get the read only socket handle of the SSL * * @param ssl - SSL point * * @return result * >= 0 : yes, and return socket handle * < 0 : a error catch */ int SSL_get_rfd(const SSL *ssl); /** * @brief get the write only socket handle of the SSL * * @param ssl - SSL point * * @return result * >= 0 : yes, and return socket handle * < 0 : a error catch */ int SSL_get_wfd(const SSL *ssl); /** * @brief set the SSL if we can read as many as data * * @param ssl - SSL point * @param yes - enable the function * * @return none */ void SSL_set_read_ahead(SSL *s, int yes); /** * @brief set the SSL context if we can read as many as data * * @param ctx - SSL context point * @param yes - enbale the function * * @return none */ void SSL_CTX_set_read_ahead(SSL_CTX *ctx, int yes); /** * @brief get the SSL ahead signal if we can read as many as data * * @param ssl - SSL point * * @return SSL context ahead signal */ int SSL_get_read_ahead(const SSL *ssl); /** * @brief get the SSL context ahead signal if we can read as many as data * * @param ctx - SSL context point * * @return SSL context ahead signal */ long SSL_CTX_get_read_ahead(SSL_CTX *ctx); /** * @brief check if some data can be read * * @param ssl - SSL point * * @return * 1 : there are bytes to be read * 0 : no data */ int SSL_has_pending(const SSL *ssl); /** * @brief load the X509 certification into SSL context * * @param ctx - SSL context point * @param x - X509 certification point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);//loads the certificate x into ctx /** * @brief load the ASN1 certification into SSL context * * @param ctx - SSL context point * @param len - certification length * @param d - data point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d); /** * @brief load the certification file into SSL context * * @param ctx - SSL context point * @param file - certification file name * @param type - certification encoding type * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type); /** * @brief load the certification chain file into SSL context * * @param ctx - SSL context point * @param file - certification chain file name * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); /** * @brief load the ASN1 private key into SSL context * * @param ctx - SSL context point * @param d - data point * @param len - private key length * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, const unsigned char *d, long len);//adds the private key of type pk stored at memory location d (length len) to ctx /** * @brief load the private key file into SSL context * * @param ctx - SSL context point * @param file - private key file name * @param type - private key encoding type * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type); /** * @brief load the RSA private key into SSL context * * @param ctx - SSL context point * @param x - RSA private key point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); /** * @brief load the RSA ASN1 private key into SSL context * * @param ctx - SSL context point * @param d - data point * @param len - RSA private key length * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len); /** * @brief load the RSA private key file into SSL context * * @param ctx - SSL context point * @param file - RSA private key file name * @param type - private key encoding type * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type); /** * @brief check if the private key and certification is matched * * @param ctx - SSL context point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_check_private_key(const SSL_CTX *ctx); /** * @brief set the SSL context server information * * @param ctx - SSL context point * @param serverinfo - server information string * @param serverinfo_length - server information length * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, size_t serverinfo_length); /** * @brief load the SSL context server infomation file into SSL context * * @param ctx - SSL context point * @param file - server information file * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); /** * @brief SSL select next function * * @param out - point of output data point * @param outlen - output data length * @param in - input data * @param inlen - input data length * @param client - client data point * @param client_len -client data length * * @return NPN state * OPENSSL_NPN_UNSUPPORTED : not support * OPENSSL_NPN_NEGOTIATED : negotiated * OPENSSL_NPN_NO_OVERLAP : no overlap */ int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, const unsigned char *client, unsigned int client_len); /** * @brief load the extra certification chain into the SSL context * * @param ctx - SSL context point * @param x509 - X509 certification * * @return result * 1 : OK * 0 : failed */ long SSL_CTX_add_extra_chain_cert(SSL_CTX *ctx, X509 *); /** * @brief control the SSL context * * @param ctx - SSL context point * @param cmd - command * @param larg - parameter length * @param parg - parameter point * * @return result * 1 : OK * 0 : failed */ long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, char *parg); /** * @brief get the SSL context cipher * * @param ctx - SSL context point * * @return SSL context cipher */ STACK *SSL_CTX_get_ciphers(const SSL_CTX *ctx); /** * @brief check if the SSL context can read as many as data * * @param ctx - SSL context point * * @return result * 1 : OK * 0 : failed */ long SSL_CTX_get_default_read_ahead(SSL_CTX *ctx); /** * @brief get the SSL context extra data * * @param ctx - SSL context point * @param idx - index * * @return data point */ void *SSL_CTX_get_ex_data(const SSL_CTX *ctx, int idx); /** * @brief get the SSL context quiet shutdown option * * @param ctx - SSL context point * * @return quiet shutdown option */ int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); /** * @brief load the SSL context CA file * * @param ctx - SSL context point * @param CAfile - CA certification file * @param CApath - CA certification file path * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath); /** * @brief add SSL context reference count by '1' * * @param ctx - SSL context point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_up_ref(SSL_CTX *ctx); /** * @brief set SSL context application private data * * @param ctx - SSL context point * @param arg - private data * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_set_app_data(SSL_CTX *ctx, void *arg); /** * @brief set SSL context client certification callback function * * @param ctx - SSL context point * @param cb - callback function * * @return none */ void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey)); /** * @brief set the SSL context if we can read as many as data * * @param ctx - SSL context point * @param m - enable the fuction * * @return none */ void SSL_CTX_set_default_read_ahead(SSL_CTX *ctx, int m); /** * @brief set SSL context default verifying path * * @param ctx - SSL context point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); /** * @brief set SSL context default verifying directory * * @param ctx - SSL context point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); /** * @brief set SSL context default verifying file * * @param ctx - SSL context point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); /** * @brief set SSL context extra data * * @param ctx - SSL context point * @param idx - data index * @param arg - data point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, char *arg); /** * @brief clear the SSL context option bit of "op" * * @param ctx - SSL context point * @param op - option * * @return SSL context option */ unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op); /** * @brief get the SSL context option * * @param ctx - SSL context point * @param op - option * * @return SSL context option */ unsigned long SSL_CTX_get_options(SSL_CTX *ctx); /** * @brief set the SSL context quiet shutdown mode * * @param ctx - SSL context point * @param mode - mode * * @return none */ void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); /** * @brief get the SSL context X509 certification * * @param ctx - SSL context point * * @return X509 certification */ X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); /** * @brief get the SSL context private key * * @param ctx - SSL context point * * @return private key */ EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); /** * @brief set SSL context PSK identity hint * * @param ctx - SSL context point * @param hint - PSK identity hint * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *hint); /** * @brief set SSL context PSK server callback function * * @param ctx - SSL context point * @param callback - callback function * * @return none */ void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, unsigned int (*callback)(SSL *ssl, const char *identity, unsigned char *psk, int max_psk_len)); /** * @brief get alert description string * * @param value - alert value * * @return alert description string */ const char *SSL_alert_desc_string(int value); /** * @brief get alert description long string * * @param value - alert value * * @return alert description long string */ const char *SSL_alert_desc_string_long(int value); /** * @brief get alert type string * * @param value - alert value * * @return alert type string */ const char *SSL_alert_type_string(int value); /** * @brief get alert type long string * * @param value - alert value * * @return alert type long string */ const char *SSL_alert_type_string_long(int value); /** * @brief get SSL context of the SSL * * @param ssl - SSL point * * @return SSL context */ SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl); /** * @brief get SSL application data * * @param ssl - SSL point * * @return application data */ char *SSL_get_app_data(SSL *ssl); /** * @brief get SSL cipher bits * * @param ssl - SSL point * @param alg_bits - algorithm bits * * @return strength bits */ int SSL_get_cipher_bits(const SSL *ssl, int *alg_bits); /** * @brief get SSL cipher name * * @param ssl - SSL point * * @return SSL cipher name */ char *SSL_get_cipher_name(const SSL *ssl); /** * @brief get SSL cipher version * * @param ssl - SSL point * * @return SSL cipher version */ char *SSL_get_cipher_version(const SSL *ssl); /** * @brief get SSL extra data * * @param ssl - SSL point * @param idx - data index * * @return extra data */ char *SSL_get_ex_data(const SSL *ssl, int idx); /** * @brief get index of the SSL extra data X509 storage context * * @param none * * @return data index */ int SSL_get_ex_data_X509_STORE_CTX_idx(void); /** * @brief get peer certification chain * * @param ssl - SSL point * * @return certification chain */ STACK *SSL_get_peer_cert_chain(const SSL *ssl); /** * @brief get peer certification * * @param ssl - SSL point * * @return certification */ X509 *SSL_get_peer_certificate(const SSL *ssl); /** * @brief get SSL quiet shutdown mode * * @param ssl - SSL point * * @return quiet shutdown mode */ int SSL_get_quiet_shutdown(const SSL *ssl); /** * @brief get SSL read only IO handle * * @param ssl - SSL point * * @return IO handle */ BIO *SSL_get_rbio(const SSL *ssl); /** * @brief get SSL shared ciphers * * @param ssl - SSL point * @param buf - buffer to store the ciphers * @param len - buffer len * * @return shared ciphers */ char *SSL_get_shared_ciphers(const SSL *ssl, char *buf, int len); /** * @brief get SSL shutdown mode * * @param ssl - SSL point * * @return shutdown mode */ int SSL_get_shutdown(const SSL *ssl); /** * @brief get SSL session time * * @param ssl - SSL point * * @return session time */ long SSL_get_time(const SSL *ssl); /** * @brief get SSL session timeout time * * @param ssl - SSL point * * @return session timeout time */ long SSL_get_timeout(const SSL *ssl); /** * @brief get SSL verifying mode * * @param ssl - SSL point * * @return verifying mode */ int SSL_get_verify_mode(const SSL *ssl); /** * @brief get SSL verify parameters * * @param ssl - SSL point * * @return verify parameters */ X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); /** * @brief set expected hostname the peer cert CN should have * * @param param - verify parameters from SSL_get0_param() * * @param name - the expected hostname * * @param namelen - the length of the hostname, or 0 if NUL terminated * * @return verify parameters */ int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen); /** * @brief set parameters for X509 host verify action * * @param param -verify parameters from SSL_get0_param() * * @param flags - bitfield of X509_CHECK_FLAG_... parameters to set * * @return 1 for success, 0 for failure */ int X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, unsigned long flags); /** * @brief clear parameters for X509 host verify action * * @param param -verify parameters from SSL_get0_param() * * @param flags - bitfield of X509_CHECK_FLAG_... parameters to clear * * @return 1 for success, 0 for failure */ int X509_VERIFY_PARAM_clear_hostflags(X509_VERIFY_PARAM *param, unsigned long flags); /** * @brief get SSL write only IO handle * * @param ssl - SSL point * * @return IO handle */ BIO *SSL_get_wbio(const SSL *ssl); /** * @brief load SSL client CA certification file * * @param file - file name * * @return certification loading object */ STACK *SSL_load_client_CA_file(const char *file); /** * @brief add SSL reference by '1' * * @param ssl - SSL point * * @return result * 1 : OK * 0 : failed */ int SSL_up_ref(SSL *ssl); /** * @brief read and put data into buf, but not clear the SSL low-level storage * * @param ssl - SSL point * @param buf - storage buffer point * @param num - data bytes * * @return result * > 0 : OK, and return read bytes * = 0 : connect is closed * < 0 : a error catch */ int SSL_peek(SSL *ssl, void *buf, int num); /** * @brief make SSL renegotiate * * @param ssl - SSL point * * @return result * 1 : OK * 0 : failed */ int SSL_renegotiate(SSL *ssl); /** * @brief get the state string where SSL is reading * * @param ssl - SSL point * * @return state string */ const char *SSL_rstate_string(SSL *ssl); /** * @brief get the statement long string where SSL is reading * * @param ssl - SSL point * * @return statement long string */ const char *SSL_rstate_string_long(SSL *ssl); /** * @brief set SSL accept statement * * @param ssl - SSL point * * @return none */ void SSL_set_accept_state(SSL *ssl); /** * @brief set SSL application data * * @param ssl - SSL point * @param arg - SSL application data point * * @return none */ void SSL_set_app_data(SSL *ssl, char *arg); /** * @brief set SSL BIO * * @param ssl - SSL point * @param rbio - read only IO * @param wbio - write only IO * * @return none */ void SSL_set_bio(SSL *ssl, BIO *rbio, BIO *wbio); /** * @brief clear SSL option * * @param ssl - SSL point * @param op - clear option * * @return SSL option */ unsigned long SSL_clear_options(SSL *ssl, unsigned long op); /** * @brief get SSL option * * @param ssl - SSL point * * @return SSL option */ unsigned long SSL_get_options(SSL *ssl); /** * @brief clear SSL option * * @param ssl - SSL point * @param op - setting option * * @return SSL option */ unsigned long SSL_set_options(SSL *ssl, unsigned long op); /** * @brief set SSL quiet shutdown mode * * @param ssl - SSL point * @param mode - quiet shutdown mode * * @return none */ void SSL_set_quiet_shutdown(SSL *ssl, int mode); /** * @brief set SSL shutdown mode * * @param ssl - SSL point * @param mode - shutdown mode * * @return none */ void SSL_set_shutdown(SSL *ssl, int mode); /** * @brief set SSL session time * * @param ssl - SSL point * @param t - session time * * @return session time */ long SSL_set_time(SSL *ssl, long t); /** * @brief set SSL session timeout time * * @param ssl - SSL point * @param t - session timeout time * * @return session timeout time */ long SSL_set_timeout(SSL *ssl, long t); /** * @brief get SSL statement string * * @param ssl - SSL point * * @return SSL statement string */ char *SSL_state_string(const SSL *ssl); /** * @brief get SSL statement long string * * @param ssl - SSL point * * @return SSL statement long string */ char *SSL_state_string_long(const SSL *ssl); /** * @brief get SSL renegotiation count * * @param ssl - SSL point * * @return renegotiation count */ long SSL_total_renegotiations(SSL *ssl); /** * @brief get SSL version * * @param ssl - SSL point * * @return SSL version */ int SSL_version(const SSL *ssl); /** * @brief set SSL PSK identity hint * * @param ssl - SSL point * @param hint - identity hint * * @return result * 1 : OK * 0 : failed */ int SSL_use_psk_identity_hint(SSL *ssl, const char *hint); /** * @brief get SSL PSK identity hint * * @param ssl - SSL point * * @return identity hint */ const char *SSL_get_psk_identity_hint(SSL *ssl); /** * @brief get SSL PSK identity * * @param ssl - SSL point * * @return identity */ const char *SSL_get_psk_identity(SSL *ssl); #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/platform/000077500000000000000000000000001357643561300243235ustar00rootroot00000000000000libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/platform/ssl_pm.h000066400000000000000000000032031357643561300257670ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_PM_H_ #define _SSL_PM_H_ #ifdef __cplusplus extern "C" { #endif #include #include "ssl_types.h" #include "ssl_port.h" #define LOCAL_ATRR int ssl_pm_new(SSL *ssl); void ssl_pm_free(SSL *ssl); int ssl_pm_handshake(SSL *ssl); int ssl_pm_shutdown(SSL *ssl); int ssl_pm_clear(SSL *ssl); int ssl_pm_read(SSL *ssl, void *buffer, int len); int ssl_pm_send(SSL *ssl, const void *buffer, int len); int ssl_pm_pending(const SSL *ssl); void ssl_pm_set_fd(SSL *ssl, int fd, int mode); int ssl_pm_get_fd(const SSL *ssl, int mode); OSSL_HANDSHAKE_STATE ssl_pm_get_state(const SSL *ssl); void ssl_pm_set_bufflen(SSL *ssl, int len); int x509_pm_show_info(X509 *x); int x509_pm_new(X509 *x, X509 *m_x); void x509_pm_free(X509 *x); int x509_pm_load(X509 *x, const unsigned char *buffer, int len); int pkey_pm_new(EVP_PKEY *pk, EVP_PKEY *m_pk); void pkey_pm_free(EVP_PKEY *pk); int pkey_pm_load(EVP_PKEY *pk, const unsigned char *buffer, int len); long ssl_pm_get_verify_result(const SSL *ssl); #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/include/platform/ssl_port.h000066400000000000000000000021711357643561300263420ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_PORT_H_ #define _SSL_PORT_H_ #ifdef __cplusplus extern "C" { #endif #include "string.h" #include "stdlib.h" #if defined(LWS_HAVE_MALLOC_H) #include "malloc.h" #endif void *ssl_mem_zalloc(size_t size); #define ssl_mem_malloc malloc #define ssl_mem_free free #define ssl_memcpy memcpy #define ssl_strlen strlen #define ssl_speed_up_enter() #define ssl_speed_up_exit() #define SSL_DEBUG_FL #define SSL_DEBUG_LOG(fmt, ...) ESP_LOGI("openssl", fmt, ##__VA_ARGS__) #ifdef __cplusplus } #endif #endif libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/library/000077500000000000000000000000001357643561300225205ustar00rootroot00000000000000libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/library/ssl_cert.c000066400000000000000000000036171357643561300245110ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "ssl_cert.h" #include "ssl_pkey.h" #include "ssl_x509.h" #include "ssl_dbg.h" #include "ssl_port.h" /** * @brief create a certification object according to input certification */ CERT *__ssl_cert_new(CERT *ic) { CERT *cert; X509 *ix; EVP_PKEY *ipk; cert = ssl_mem_zalloc(sizeof(CERT)); if (!cert) { SSL_DEBUG(SSL_CERT_ERROR_LEVEL, "no enough memory > (cert)"); goto no_mem; } if (ic) { ipk = ic->pkey; ix = ic->x509; } else { ipk = NULL; ix = NULL; } cert->pkey = __EVP_PKEY_new(ipk); if (!cert->pkey) { SSL_DEBUG(SSL_CERT_ERROR_LEVEL, "__EVP_PKEY_new() return NULL"); goto pkey_err; } cert->x509 = __X509_new(ix); if (!cert->x509) { SSL_DEBUG(SSL_CERT_ERROR_LEVEL, "__X509_new() return NULL"); goto x509_err; } return cert; x509_err: EVP_PKEY_free(cert->pkey); pkey_err: ssl_mem_free(cert); no_mem: return NULL; } /** * @brief create a certification object include private key object */ CERT *ssl_cert_new(void) { return __ssl_cert_new(NULL); } /** * @brief free a certification object */ void ssl_cert_free(CERT *cert) { SSL_ASSERT3(cert); X509_free(cert->x509); EVP_PKEY_free(cert->pkey); ssl_mem_free(cert); } libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/library/ssl_lib.c000066400000000000000000001056671357643561300243320ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "ssl_lib.h" #include "ssl_pkey.h" #include "ssl_x509.h" #include "ssl_cert.h" #include "ssl_dbg.h" #include "ssl_port.h" #include "core/private.h" char * lws_strncpy(char *dest, const char *src, size_t size); #define SSL_SEND_DATA_MAX_LENGTH 1460 /** * @brief create a new SSL session object */ static SSL_SESSION* SSL_SESSION_new(void) { SSL_SESSION *session; session = ssl_mem_zalloc(sizeof(SSL_SESSION)); if (!session) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "no enough memory > (session)"); goto failed1; } session->peer = X509_new(); if (!session->peer) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "X509_new() return NULL"); goto failed2; } return session; failed2: ssl_mem_free(session); failed1: return NULL; } /** * @brief free a new SSL session object */ static void SSL_SESSION_free(SSL_SESSION *session) { X509_free(session->peer); ssl_mem_free(session); } /** * @brief Discover whether the current connection is in the error state */ int ossl_statem_in_error(const SSL *ssl) { SSL_ASSERT1(ssl); if (ssl->statem.state == MSG_FLOW_ERROR) return 1; return 0; } /** * @brief get the SSL specifical statement */ int SSL_want(const SSL *ssl) { SSL_ASSERT1(ssl); return ssl->rwstate; } /** * @brief check if SSL want nothing */ int SSL_want_nothing(const SSL *ssl) { SSL_ASSERT1(ssl); if (ssl->err) return 1; return (SSL_want(ssl) == SSL_NOTHING); } /** * @brief check if SSL want to read */ int SSL_want_read(const SSL *ssl) { SSL_ASSERT1(ssl); if (ssl->err) return 0; return (SSL_want(ssl) == SSL_READING); } /** * @brief check if SSL want to write */ int SSL_want_write(const SSL *ssl) { SSL_ASSERT1(ssl); if (ssl->err) return 0; return (SSL_want(ssl) == SSL_WRITING); } /** * @brief check if SSL want to lookup X509 certification */ int SSL_want_x509_lookup(const SSL *ssl) { SSL_ASSERT1(ssl); return (SSL_want(ssl) == SSL_WRITING); } /** * @brief get SSL error code */ int SSL_get_error(const SSL *ssl, int ret_code) { int ret = SSL_ERROR_SYSCALL; SSL_ASSERT1(ssl); if (ret_code > 0) ret = SSL_ERROR_NONE; else if (ret_code < 0) { if (ssl->err == SSL_ERROR_WANT_READ || SSL_want_read(ssl)) ret = SSL_ERROR_WANT_READ; else if (ssl->err == SSL_ERROR_WANT_WRITE || SSL_want_write(ssl)) ret = SSL_ERROR_WANT_WRITE; else ret = SSL_ERROR_SYSCALL; //unknown } else // ret_code == 0 { if (ssl->shutdown & SSL_RECEIVED_SHUTDOWN) ret = SSL_ERROR_ZERO_RETURN; else ret = SSL_ERROR_SYSCALL; } return ret; } /** * @brief get the SSL state */ OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl) { OSSL_HANDSHAKE_STATE state; SSL_ASSERT1(ssl); state = SSL_METHOD_CALL(get_state, ssl); return state; } /** * @brief create a SSL context */ SSL_CTX* SSL_CTX_new(const SSL_METHOD *method) { SSL_CTX *ctx; CERT *cert; X509 *client_ca; if (!method) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "no no_method"); return NULL; } client_ca = X509_new(); if (!client_ca) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "X509_new() return NULL"); goto failed1; } cert = ssl_cert_new(); if (!cert) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "ssl_cert_new() return NULL"); goto failed2; } ctx = (SSL_CTX *)ssl_mem_zalloc(sizeof(SSL_CTX)); if (!ctx) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "no enough memory > (ctx)"); goto failed3; } ctx->method = method; ctx->client_CA = client_ca; ctx->cert = cert; ctx->version = method->version; return ctx; failed3: ssl_cert_free(cert); failed2: X509_free(client_ca); failed1: return NULL; } /** * @brief free a SSL context */ void SSL_CTX_free(SSL_CTX* ctx) { SSL_ASSERT3(ctx); ssl_cert_free(ctx->cert); X509_free(ctx->client_CA); if (ctx->alpn_protos) ssl_mem_free(ctx->alpn_protos); ssl_mem_free(ctx); } /** * @brief set the SSL context version */ int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth) { SSL_ASSERT1(ctx); SSL_ASSERT1(meth); ctx->method = meth; ctx->version = meth->version; return 1; } /** * @brief get the SSL context current method */ const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx) { SSL_ASSERT2(ctx); return ctx->method; } /** * @brief create a SSL */ SSL *SSL_new(SSL_CTX *ctx) { int ret = 0; SSL *ssl; if (!ctx) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "no ctx"); return NULL; } ssl = (SSL *)ssl_mem_zalloc(sizeof(SSL)); if (!ssl) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "no enough memory > (ssl)"); goto failed1; } ssl->session = SSL_SESSION_new(); if (!ssl->session) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "SSL_SESSION_new() return NULL"); goto failed2; } ssl->cert = __ssl_cert_new(ctx->cert); if (!ssl->cert) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "__ssl_cert_new() return NULL"); goto failed3; } ssl->client_CA = __X509_new(ctx->client_CA); if (!ssl->client_CA) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "__X509_new() return NULL"); goto failed4; } ssl->ctx = ctx; ssl->method = ctx->method; ssl->version = ctx->version; ssl->options = ctx->options; ssl->verify_mode = ctx->verify_mode; ret = SSL_METHOD_CALL(new, ssl); if (ret) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "SSL_METHOD_CALL(new) return %d", ret); goto failed5; } _ssl_set_alpn_list(ssl); ssl->rwstate = SSL_NOTHING; return ssl; failed5: X509_free(ssl->client_CA); failed4: ssl_cert_free(ssl->cert); failed3: SSL_SESSION_free(ssl->session); failed2: ssl_mem_free(ssl); failed1: return NULL; } /** * @brief free the SSL */ void SSL_free(SSL *ssl) { SSL_ASSERT3(ssl); SSL_METHOD_CALL(free, ssl); X509_free(ssl->client_CA); ssl_cert_free(ssl->cert); SSL_SESSION_free(ssl->session); if (ssl->alpn_protos) ssl_mem_free(ssl->alpn_protos); ssl_mem_free(ssl); } /** * @brief perform the SSL handshake */ int SSL_do_handshake(SSL *ssl) { int ret; SSL_ASSERT1(ssl); ret = SSL_METHOD_CALL(handshake, ssl); return ret; } /** * @brief connect to the remote SSL server */ int SSL_connect(SSL *ssl) { SSL_ASSERT1(ssl); return SSL_do_handshake(ssl); } /** * @brief accept the remote connection */ int SSL_accept(SSL *ssl) { SSL_ASSERT1(ssl); return SSL_do_handshake(ssl); } /** * @brief shutdown the connection */ int SSL_shutdown(SSL *ssl) { int ret; SSL_ASSERT1(ssl); if (SSL_get_state(ssl) != TLS_ST_OK) return 1; ret = SSL_METHOD_CALL(shutdown, ssl); return ret; } /** * @brief reset the SSL */ int SSL_clear(SSL *ssl) { int ret; SSL_ASSERT1(ssl); ret = SSL_shutdown(ssl); if (1 != ret) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "SSL_shutdown return %d", ret); goto failed1; } SSL_METHOD_CALL(free, ssl); ret = SSL_METHOD_CALL(new, ssl); if (!ret) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "SSL_METHOD_CALL(new) return %d", ret); goto failed1; } return 1; failed1: return ret; } /** * @brief read data from to remote */ int SSL_read(SSL *ssl, void *buffer, int len) { int ret; SSL_ASSERT1(ssl); SSL_ASSERT1(buffer); SSL_ASSERT1(len); ssl->rwstate = SSL_READING; ret = SSL_METHOD_CALL(read, ssl, buffer, len); if (ret == len) ssl->rwstate = SSL_NOTHING; return ret; } /** * @brief send the data to remote */ int SSL_write(SSL *ssl, const void *buffer, int len) { int ret; int send_bytes, bytes; const unsigned char *pbuf; SSL_ASSERT1(ssl); SSL_ASSERT1(buffer); SSL_ASSERT1(len); ssl->rwstate = SSL_WRITING; send_bytes = len; pbuf = (const unsigned char *)buffer; do { if (send_bytes > SSL_SEND_DATA_MAX_LENGTH) bytes = SSL_SEND_DATA_MAX_LENGTH; else bytes = send_bytes; if (ssl->interrupted_remaining_write) { bytes = ssl->interrupted_remaining_write; ssl->interrupted_remaining_write = 0; } ret = SSL_METHOD_CALL(send, ssl, pbuf, bytes); //printf("%s: ssl_pm said %d for %d requested (cum %d)\n", __func__, ret, bytes, len -send_bytes); /* the return is a NEGATIVE OpenSSL error code, or the length sent */ if (ret > 0) { pbuf += ret; send_bytes -= ret; } else ssl->interrupted_remaining_write = bytes; } while (ret > 0 && send_bytes && ret == bytes); if (ret >= 0) { ret = len - send_bytes; if (!ret) ssl->rwstate = SSL_NOTHING; } else { if (send_bytes == len) ret = -1; else ret = len - send_bytes; } return ret; } /** * @brief get SSL context of the SSL */ SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl) { SSL_ASSERT2(ssl); return ssl->ctx; } /** * @brief get the SSL current method */ const SSL_METHOD *SSL_get_ssl_method(SSL *ssl) { SSL_ASSERT2(ssl); return ssl->method; } /** * @brief set the SSL method */ int SSL_set_ssl_method(SSL *ssl, const SSL_METHOD *method) { int ret; SSL_ASSERT1(ssl); SSL_ASSERT1(method); if (ssl->version != method->version) { ret = SSL_shutdown(ssl); if (1 != ret) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "SSL_shutdown return %d", ret); goto failed1; } SSL_METHOD_CALL(free, ssl); ssl->method = method; ret = SSL_METHOD_CALL(new, ssl); if (!ret) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "SSL_METHOD_CALL(new) return %d", ret); goto failed1; } } else { ssl->method = method; } return 1; failed1: return ret; } /** * @brief get SSL shutdown mode */ int SSL_get_shutdown(const SSL *ssl) { SSL_ASSERT1(ssl); return ssl->shutdown; } /** * @brief set SSL shutdown mode */ void SSL_set_shutdown(SSL *ssl, int mode) { SSL_ASSERT3(ssl); ssl->shutdown = mode; } /** * @brief get the number of the bytes to be read */ int SSL_pending(const SSL *ssl) { int ret; SSL_ASSERT1(ssl); ret = SSL_METHOD_CALL(pending, ssl); return ret; } /** * @brief check if some data can be read */ int SSL_has_pending(const SSL *ssl) { int ret; SSL_ASSERT1(ssl); if (SSL_pending(ssl)) ret = 1; else ret = 0; return ret; } /** * @brief clear the SSL context option bit of "op" */ unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op) { SSL_ASSERT1(ctx); return ctx->options &= ~op; } /** * @brief get the SSL context option */ unsigned long SSL_CTX_get_options(SSL_CTX *ctx) { SSL_ASSERT1(ctx); return ctx->options; } /** * @brief set the option of the SSL context */ unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long opt) { SSL_ASSERT1(ctx); return ctx->options |= opt; } /** * @brief clear SSL option */ unsigned long SSL_clear_options(SSL *ssl, unsigned long op) { SSL_ASSERT1(ssl); return ssl->options & ~op; } /** * @brief get SSL option */ unsigned long SSL_get_options(SSL *ssl) { SSL_ASSERT1(ssl); return ssl->options; } /** * @brief clear SSL option */ unsigned long SSL_set_options(SSL *ssl, unsigned long op) { SSL_ASSERT1(ssl); return ssl->options |= op; } /** * @brief get the socket handle of the SSL */ int SSL_get_fd(const SSL *ssl) { int ret; SSL_ASSERT1(ssl); ret = SSL_METHOD_CALL(get_fd, ssl, 0); return ret; } /** * @brief get the read only socket handle of the SSL */ int SSL_get_rfd(const SSL *ssl) { int ret; SSL_ASSERT1(ssl); ret = SSL_METHOD_CALL(get_fd, ssl, 0); return ret; } /** * @brief get the write only socket handle of the SSL */ int SSL_get_wfd(const SSL *ssl) { int ret; SSL_ASSERT1(ssl); ret = SSL_METHOD_CALL(get_fd, ssl, 0); return ret; } /** * @brief bind the socket file description into the SSL */ int SSL_set_fd(SSL *ssl, int fd) { SSL_ASSERT1(ssl); SSL_ASSERT1(fd >= 0); SSL_METHOD_CALL(set_fd, ssl, fd, 0); return 1; } /** * @brief bind the read only socket file description into the SSL */ int SSL_set_rfd(SSL *ssl, int fd) { SSL_ASSERT1(ssl); SSL_ASSERT1(fd >= 0); SSL_METHOD_CALL(set_fd, ssl, fd, 0); return 1; } /** * @brief bind the write only socket file description into the SSL */ int SSL_set_wfd(SSL *ssl, int fd) { SSL_ASSERT1(ssl); SSL_ASSERT1(fd >= 0); SSL_METHOD_CALL(set_fd, ssl, fd, 0); return 1; } /** * @brief get SSL version */ int SSL_version(const SSL *ssl) { SSL_ASSERT1(ssl); return ssl->version; } /** * @brief get the SSL version string */ static const char* ssl_protocol_to_string(int version) { const char *str; if (version == TLS1_2_VERSION) str = "TLSv1.2"; else if (version == TLS1_1_VERSION) str = "TLSv1.1"; else if (version == TLS1_VERSION) str = "TLSv1"; else if (version == SSL3_VERSION) str = "SSLv3"; else str = "unknown"; return str; } /** * @brief get the SSL current version */ const char *SSL_get_version(const SSL *ssl) { SSL_ASSERT2(ssl); return ssl_protocol_to_string(SSL_version(ssl)); } /** * @brief get alert description string */ const char* SSL_alert_desc_string(int value) { const char *str; switch (value & 0xff) { case SSL3_AD_CLOSE_NOTIFY: str = "CN"; break; case SSL3_AD_UNEXPECTED_MESSAGE: str = "UM"; break; case SSL3_AD_BAD_RECORD_MAC: str = "BM"; break; case SSL3_AD_DECOMPRESSION_FAILURE: str = "DF"; break; case SSL3_AD_HANDSHAKE_FAILURE: str = "HF"; break; case SSL3_AD_NO_CERTIFICATE: str = "NC"; break; case SSL3_AD_BAD_CERTIFICATE: str = "BC"; break; case SSL3_AD_UNSUPPORTED_CERTIFICATE: str = "UC"; break; case SSL3_AD_CERTIFICATE_REVOKED: str = "CR"; break; case SSL3_AD_CERTIFICATE_EXPIRED: str = "CE"; break; case SSL3_AD_CERTIFICATE_UNKNOWN: str = "CU"; break; case SSL3_AD_ILLEGAL_PARAMETER: str = "IP"; break; case TLS1_AD_DECRYPTION_FAILED: str = "DC"; break; case TLS1_AD_RECORD_OVERFLOW: str = "RO"; break; case TLS1_AD_UNKNOWN_CA: str = "CA"; break; case TLS1_AD_ACCESS_DENIED: str = "AD"; break; case TLS1_AD_DECODE_ERROR: str = "DE"; break; case TLS1_AD_DECRYPT_ERROR: str = "CY"; break; case TLS1_AD_EXPORT_RESTRICTION: str = "ER"; break; case TLS1_AD_PROTOCOL_VERSION: str = "PV"; break; case TLS1_AD_INSUFFICIENT_SECURITY: str = "IS"; break; case TLS1_AD_INTERNAL_ERROR: str = "IE"; break; case TLS1_AD_USER_CANCELLED: str = "US"; break; case TLS1_AD_NO_RENEGOTIATION: str = "NR"; break; case TLS1_AD_UNSUPPORTED_EXTENSION: str = "UE"; break; case TLS1_AD_CERTIFICATE_UNOBTAINABLE: str = "CO"; break; case TLS1_AD_UNRECOGNIZED_NAME: str = "UN"; break; case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: str = "BR"; break; case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: str = "BH"; break; case TLS1_AD_UNKNOWN_PSK_IDENTITY: str = "UP"; break; default: str = "UK"; break; } return str; } /** * @brief get alert description long string */ const char* SSL_alert_desc_string_long(int value) { const char *str; switch (value & 0xff) { case SSL3_AD_CLOSE_NOTIFY: str = "close notify"; break; case SSL3_AD_UNEXPECTED_MESSAGE: str = "unexpected_message"; break; case SSL3_AD_BAD_RECORD_MAC: str = "bad record mac"; break; case SSL3_AD_DECOMPRESSION_FAILURE: str = "decompression failure"; break; case SSL3_AD_HANDSHAKE_FAILURE: str = "handshake failure"; break; case SSL3_AD_NO_CERTIFICATE: str = "no certificate"; break; case SSL3_AD_BAD_CERTIFICATE: str = "bad certificate"; break; case SSL3_AD_UNSUPPORTED_CERTIFICATE: str = "unsupported certificate"; break; case SSL3_AD_CERTIFICATE_REVOKED: str = "certificate revoked"; break; case SSL3_AD_CERTIFICATE_EXPIRED: str = "certificate expired"; break; case SSL3_AD_CERTIFICATE_UNKNOWN: str = "certificate unknown"; break; case SSL3_AD_ILLEGAL_PARAMETER: str = "illegal parameter"; break; case TLS1_AD_DECRYPTION_FAILED: str = "decryption failed"; break; case TLS1_AD_RECORD_OVERFLOW: str = "record overflow"; break; case TLS1_AD_UNKNOWN_CA: str = "unknown CA"; break; case TLS1_AD_ACCESS_DENIED: str = "access denied"; break; case TLS1_AD_DECODE_ERROR: str = "decode error"; break; case TLS1_AD_DECRYPT_ERROR: str = "decrypt error"; break; case TLS1_AD_EXPORT_RESTRICTION: str = "export restriction"; break; case TLS1_AD_PROTOCOL_VERSION: str = "protocol version"; break; case TLS1_AD_INSUFFICIENT_SECURITY: str = "insufficient security"; break; case TLS1_AD_INTERNAL_ERROR: str = "internal error"; break; case TLS1_AD_USER_CANCELLED: str = "user canceled"; break; case TLS1_AD_NO_RENEGOTIATION: str = "no renegotiation"; break; case TLS1_AD_UNSUPPORTED_EXTENSION: str = "unsupported extension"; break; case TLS1_AD_CERTIFICATE_UNOBTAINABLE: str = "certificate unobtainable"; break; case TLS1_AD_UNRECOGNIZED_NAME: str = "unrecognized name"; break; case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: str = "bad certificate status response"; break; case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: str = "bad certificate hash value"; break; case TLS1_AD_UNKNOWN_PSK_IDENTITY: str = "unknown PSK identity"; break; default: str = "unknown"; break; } return str; } /** * @brief get alert type string */ const char *SSL_alert_type_string(int value) { const char *str; switch (value >> 8) { case SSL3_AL_WARNING: str = "W"; break; case SSL3_AL_FATAL: str = "F"; break; default: str = "U"; break; } return str; } /** * @brief get alert type long string */ const char *SSL_alert_type_string_long(int value) { const char *str; switch (value >> 8) { case SSL3_AL_WARNING: str = "warning"; break; case SSL3_AL_FATAL: str = "fatal"; break; default: str = "unknown"; break; } return str; } /** * @brief get the state string where SSL is reading */ const char *SSL_rstate_string(SSL *ssl) { const char *str; SSL_ASSERT2(ssl); switch (ssl->rlayer.rstate) { case SSL_ST_READ_HEADER: str = "RH"; break; case SSL_ST_READ_BODY: str = "RB"; break; case SSL_ST_READ_DONE: str = "RD"; break; default: str = "unknown"; break; } return str; } /** * @brief get the statement long string where SSL is reading */ const char *SSL_rstate_string_long(SSL *ssl) { const char *str = "unknown"; SSL_ASSERT2(ssl); switch (ssl->rlayer.rstate) { case SSL_ST_READ_HEADER: str = "read header"; break; case SSL_ST_READ_BODY: str = "read body"; break; case SSL_ST_READ_DONE: str = "read done"; break; default: break; } return str; } /** * @brief get SSL statement string */ char *SSL_state_string(const SSL *ssl) { char *str = "UNKWN "; SSL_ASSERT2(ssl); if (ossl_statem_in_error(ssl)) str = "SSLERR"; else { switch (SSL_get_state(ssl)) { case TLS_ST_BEFORE: str = "PINIT "; break; case TLS_ST_OK: str = "SSLOK "; break; case TLS_ST_CW_CLNT_HELLO: str = "TWCH"; break; case TLS_ST_CR_SRVR_HELLO: str = "TRSH"; break; case TLS_ST_CR_CERT: str = "TRSC"; break; case TLS_ST_CR_KEY_EXCH: str = "TRSKE"; break; case TLS_ST_CR_CERT_REQ: str = "TRCR"; break; case TLS_ST_CR_SRVR_DONE: str = "TRSD"; break; case TLS_ST_CW_CERT: str = "TWCC"; break; case TLS_ST_CW_KEY_EXCH: str = "TWCKE"; break; case TLS_ST_CW_CERT_VRFY: str = "TWCV"; break; case TLS_ST_SW_CHANGE: case TLS_ST_CW_CHANGE: str = "TWCCS"; break; case TLS_ST_SW_FINISHED: case TLS_ST_CW_FINISHED: str = "TWFIN"; break; case TLS_ST_SR_CHANGE: case TLS_ST_CR_CHANGE: str = "TRCCS"; break; case TLS_ST_SR_FINISHED: case TLS_ST_CR_FINISHED: str = "TRFIN"; break; case TLS_ST_SW_HELLO_REQ: str = "TWHR"; break; case TLS_ST_SR_CLNT_HELLO: str = "TRCH"; break; case TLS_ST_SW_SRVR_HELLO: str = "TWSH"; break; case TLS_ST_SW_CERT: str = "TWSC"; break; case TLS_ST_SW_KEY_EXCH: str = "TWSKE"; break; case TLS_ST_SW_CERT_REQ: str = "TWCR"; break; case TLS_ST_SW_SRVR_DONE: str = "TWSD"; break; case TLS_ST_SR_CERT: str = "TRCC"; break; case TLS_ST_SR_KEY_EXCH: str = "TRCKE"; break; case TLS_ST_SR_CERT_VRFY: str = "TRCV"; break; case DTLS_ST_CR_HELLO_VERIFY_REQUEST: str = "DRCHV"; break; case DTLS_ST_SW_HELLO_VERIFY_REQUEST: str = "DWCHV"; break; default: break; } } return str; } /** * @brief get SSL statement long string */ char *SSL_state_string_long(const SSL *ssl) { char *str = "UNKWN "; SSL_ASSERT2(ssl); if (ossl_statem_in_error(ssl)) str = "SSLERR"; else { switch (SSL_get_state(ssl)) { case TLS_ST_BEFORE: str = "before SSL initialization"; break; case TLS_ST_OK: str = "SSL negotiation finished successfully"; break; case TLS_ST_CW_CLNT_HELLO: str = "SSLv3/TLS write client hello"; break; case TLS_ST_CR_SRVR_HELLO: str = "SSLv3/TLS read server hello"; break; case TLS_ST_CR_CERT: str = "SSLv3/TLS read server certificate"; break; case TLS_ST_CR_KEY_EXCH: str = "SSLv3/TLS read server key exchange"; break; case TLS_ST_CR_CERT_REQ: str = "SSLv3/TLS read server certificate request"; break; case TLS_ST_CR_SESSION_TICKET: str = "SSLv3/TLS read server session ticket"; break; case TLS_ST_CR_SRVR_DONE: str = "SSLv3/TLS read server done"; break; case TLS_ST_CW_CERT: str = "SSLv3/TLS write client certificate"; break; case TLS_ST_CW_KEY_EXCH: str = "SSLv3/TLS write client key exchange"; break; case TLS_ST_CW_CERT_VRFY: str = "SSLv3/TLS write certificate verify"; break; case TLS_ST_CW_CHANGE: case TLS_ST_SW_CHANGE: str = "SSLv3/TLS write change cipher spec"; break; case TLS_ST_CW_FINISHED: case TLS_ST_SW_FINISHED: str = "SSLv3/TLS write finished"; break; case TLS_ST_CR_CHANGE: case TLS_ST_SR_CHANGE: str = "SSLv3/TLS read change cipher spec"; break; case TLS_ST_CR_FINISHED: case TLS_ST_SR_FINISHED: str = "SSLv3/TLS read finished"; break; case TLS_ST_SR_CLNT_HELLO: str = "SSLv3/TLS read client hello"; break; case TLS_ST_SW_HELLO_REQ: str = "SSLv3/TLS write hello request"; break; case TLS_ST_SW_SRVR_HELLO: str = "SSLv3/TLS write server hello"; break; case TLS_ST_SW_CERT: str = "SSLv3/TLS write certificate"; break; case TLS_ST_SW_KEY_EXCH: str = "SSLv3/TLS write key exchange"; break; case TLS_ST_SW_CERT_REQ: str = "SSLv3/TLS write certificate request"; break; case TLS_ST_SW_SESSION_TICKET: str = "SSLv3/TLS write session ticket"; break; case TLS_ST_SW_SRVR_DONE: str = "SSLv3/TLS write server done"; break; case TLS_ST_SR_CERT: str = "SSLv3/TLS read client certificate"; break; case TLS_ST_SR_KEY_EXCH: str = "SSLv3/TLS read client key exchange"; break; case TLS_ST_SR_CERT_VRFY: str = "SSLv3/TLS read certificate verify"; break; case DTLS_ST_CR_HELLO_VERIFY_REQUEST: str = "DTLS1 read hello verify request"; break; case DTLS_ST_SW_HELLO_VERIFY_REQUEST: str = "DTLS1 write hello verify request"; break; default: break; } } return str; } /** * @brief set the SSL context read buffer length */ void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len) { SSL_ASSERT3(ctx); ctx->read_buffer_len = len; } /** * @brief set the SSL read buffer length */ void SSL_set_default_read_buffer_len(SSL *ssl, size_t len) { SSL_ASSERT3(ssl); SSL_ASSERT3(len); SSL_METHOD_CALL(set_bufflen, ssl, len); } /** * @brief set the SSL information callback function */ void SSL_set_info_callback(SSL *ssl, void (*cb) (const SSL *ssl, int type, int val)) { SSL_ASSERT3(ssl); ssl->info_callback = cb; } /** * @brief add SSL context reference count by '1' */ int SSL_CTX_up_ref(SSL_CTX *ctx) { SSL_ASSERT1(ctx); /** * no support multi-thread SSL here */ ctx->references++; return 1; } /** * @brief set the SSL security level */ void SSL_set_security_level(SSL *ssl, int level) { SSL_ASSERT3(ssl); ssl->cert->sec_level = level; } /** * @brief get the SSL security level */ int SSL_get_security_level(const SSL *ssl) { SSL_ASSERT1(ssl); return ssl->cert->sec_level; } /** * @brief get the SSL verifying mode of the SSL context */ int SSL_CTX_get_verify_mode(const SSL_CTX *ctx) { SSL_ASSERT1(ctx); return ctx->verify_mode; } /** * @brief set the session timeout time */ long SSL_CTX_set_timeout(SSL_CTX *ctx, long t) { long l; SSL_ASSERT1(ctx); l = ctx->session_timeout; ctx->session_timeout = t; return l; } /** * @brief get the session timeout time */ long SSL_CTX_get_timeout(const SSL_CTX *ctx) { SSL_ASSERT1(ctx); return ctx->session_timeout; } /** * @brief set the SSL if we can read as many as data */ void SSL_set_read_ahead(SSL *ssl, int yes) { SSL_ASSERT3(ssl); ssl->rlayer.read_ahead = yes; } /** * @brief set the SSL context if we can read as many as data */ void SSL_CTX_set_read_ahead(SSL_CTX *ctx, int yes) { SSL_ASSERT3(ctx); ctx->read_ahead = yes; } /** * @brief get the SSL ahead signal if we can read as many as data */ int SSL_get_read_ahead(const SSL *ssl) { SSL_ASSERT1(ssl); return ssl->rlayer.read_ahead; } /** * @brief get the SSL context ahead signal if we can read as many as data */ long SSL_CTX_get_read_ahead(SSL_CTX *ctx) { SSL_ASSERT1(ctx); return ctx->read_ahead; } /** * @brief check if the SSL context can read as many as data */ long SSL_CTX_get_default_read_ahead(SSL_CTX *ctx) { SSL_ASSERT1(ctx); return ctx->read_ahead; } /** * @brief set SSL session time */ long SSL_set_time(SSL *ssl, long t) { SSL_ASSERT1(ssl); ssl->session->time = t; return t; } /** * @brief set SSL session timeout time */ long SSL_set_timeout(SSL *ssl, long t) { SSL_ASSERT1(ssl); ssl->session->timeout = t; return t; } /** * @brief get the verifying result of the SSL certification */ long SSL_get_verify_result(const SSL *ssl) { SSL_ASSERT1(ssl); return SSL_METHOD_CALL(get_verify_result, ssl); } /** * @brief get the SSL verifying depth of the SSL context */ int SSL_CTX_get_verify_depth(const SSL_CTX *ctx) { SSL_ASSERT1(ctx); return ctx->param.depth; } /** * @brief set the SSL verify depth of the SSL context */ void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth) { SSL_ASSERT3(ctx); ctx->param.depth = depth; } /** * @brief get the SSL verifying depth of the SSL */ int SSL_get_verify_depth(const SSL *ssl) { SSL_ASSERT1(ssl); return ssl->param.depth; } /** * @brief set the SSL verify depth of the SSL */ void SSL_set_verify_depth(SSL *ssl, int depth) { SSL_ASSERT3(ssl); ssl->param.depth = depth; } /** * @brief set the SSL context verifying of the SSL context */ void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*verify_callback)(int, X509_STORE_CTX *)) { SSL_ASSERT3(ctx); ctx->verify_mode = mode; ctx->default_verify_callback = verify_callback; } /** * @brief set the SSL verifying of the SSL context */ void SSL_set_verify(SSL *ssl, int mode, int (*verify_callback)(int, X509_STORE_CTX *)) { SSL_ASSERT3(ssl); ssl->verify_mode = mode; ssl->verify_callback = verify_callback; } void ERR_error_string_n(unsigned long e, char *buf, size_t len) { lws_strncpy(buf, "unknown", len); } void ERR_free_strings(void) { } char *ERR_error_string(unsigned long e, char *buf) { if (!buf) return "unknown"; switch(e) { case X509_V_ERR_INVALID_CA: strcpy(buf, "CA is not trusted"); break; case X509_V_ERR_HOSTNAME_MISMATCH: strcpy(buf, "Hostname mismatch"); break; case X509_V_ERR_CA_KEY_TOO_SMALL: strcpy(buf, "CA key too small"); break; case X509_V_ERR_CA_MD_TOO_WEAK: strcpy(buf, "MD key too weak"); break; case X509_V_ERR_CERT_NOT_YET_VALID: strcpy(buf, "Cert from the future"); break; case X509_V_ERR_CERT_HAS_EXPIRED: strcpy(buf, "Cert expired"); break; default: strcpy(buf, "unknown"); break; } return buf; } void *SSL_CTX_get_ex_data(const SSL_CTX *ctx, int idx) { return NULL; } /* * Openssl wants the valid protocol names supplied like this: * * (unsigned char *)"\x02h2\x08http/1.1", 6 + 9 * * Mbedtls wants this: * * Pointer to a NULL-terminated list of supported protocols, in decreasing * preference order. The pointer to the list is recorded by the library for * later reference as required, so the lifetime of the table must be at least * as long as the lifetime of the SSL configuration structure. * * So accept the OpenSSL style and convert to mbedtls style */ static void _openssl_alpn_to_mbedtls(struct alpn_ctx *ac, char ***palpn_protos) { unsigned char *p = ac->data, *q; unsigned char len; char **alpn_protos; int count = 0; /* find out how many entries he gave us */ len = *p++; while (p - ac->data < ac->len) { if (len--) { p++; continue; } count++; len = *p++; if (!len) break; } if (!len) count++; if (!count) return; /* allocate space for count + 1 pointers and the data afterwards */ alpn_protos = ssl_mem_zalloc((count + 1) * sizeof(char *) + ac->len + 1); if (!alpn_protos) return; *palpn_protos = alpn_protos; /* convert to mbedtls format */ q = (unsigned char *)alpn_protos + (count + 1) * sizeof(char *); p = ac->data; count = 0; len = *p++; alpn_protos[count] = (char *)q; while (p - ac->data < ac->len) { if (len--) { *q++ = *p++; continue; } *q++ = '\0'; count++; len = *p++; alpn_protos[count] = (char *)q; if (!len) break; } if (!len) { *q++ = '\0'; count++; /* len = *p++; */ alpn_protos[count] = (char *)q; } alpn_protos[count] = NULL; /* last pointer ends list with NULL */ } void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, next_proto_cb cb, void *arg) { struct alpn_ctx *ac = arg; ctx->alpn_cb = cb; _openssl_alpn_to_mbedtls(ac, (char ***)&ctx->alpn_protos); } void SSL_set_alpn_select_cb(SSL *ssl, void *arg) { struct alpn_ctx *ac = arg; _openssl_alpn_to_mbedtls(ac, (char ***)&ssl->alpn_protos); _ssl_set_alpn_list(ssl); } libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/library/ssl_methods.c000066400000000000000000000051101357643561300252050ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "ssl_methods.h" #include "ssl_pm.h" /** * TLS method function collection */ IMPLEMENT_TLS_METHOD_FUNC(TLS_method_func, ssl_pm_new, ssl_pm_free, ssl_pm_handshake, ssl_pm_shutdown, ssl_pm_clear, ssl_pm_read, ssl_pm_send, ssl_pm_pending, ssl_pm_set_fd, ssl_pm_get_fd, ssl_pm_set_bufflen, ssl_pm_get_verify_result, ssl_pm_get_state); /** * TLS or SSL client method collection */ IMPLEMENT_TLS_METHOD(TLS_ANY_VERSION, 0, TLS_method_func, TLS_client_method); IMPLEMENT_TLS_METHOD(TLS1_2_VERSION, 0, TLS_method_func, TLSv1_2_client_method); IMPLEMENT_TLS_METHOD(TLS1_1_VERSION, 0, TLS_method_func, TLSv1_1_client_method); IMPLEMENT_TLS_METHOD(TLS1_VERSION, 0, TLS_method_func, TLSv1_client_method); IMPLEMENT_SSL_METHOD(SSL3_VERSION, 0, TLS_method_func, SSLv3_client_method); /** * TLS or SSL server method collection */ IMPLEMENT_TLS_METHOD(TLS_ANY_VERSION, 1, TLS_method_func, TLS_server_method); IMPLEMENT_TLS_METHOD(TLS1_1_VERSION, 1, TLS_method_func, TLSv1_1_server_method); IMPLEMENT_TLS_METHOD(TLS1_2_VERSION, 1, TLS_method_func, TLSv1_2_server_method); IMPLEMENT_TLS_METHOD(TLS1_VERSION, 0, TLS_method_func, TLSv1_server_method); IMPLEMENT_SSL_METHOD(SSL3_VERSION, 1, TLS_method_func, SSLv3_server_method); /** * TLS or SSL method collection */ IMPLEMENT_TLS_METHOD(TLS_ANY_VERSION, -1, TLS_method_func, TLS_method); IMPLEMENT_SSL_METHOD(TLS1_2_VERSION, -1, TLS_method_func, TLSv1_2_method); IMPLEMENT_SSL_METHOD(TLS1_1_VERSION, -1, TLS_method_func, TLSv1_1_method); IMPLEMENT_SSL_METHOD(TLS1_VERSION, -1, TLS_method_func, TLSv1_method); IMPLEMENT_SSL_METHOD(SSL3_VERSION, -1, TLS_method_func, SSLv3_method); /** * @brief get X509 object method */ IMPLEMENT_X509_METHOD(X509_method, x509_pm_new, x509_pm_free, x509_pm_load, x509_pm_show_info); /** * @brief get private key object method */ IMPLEMENT_PKEY_METHOD(EVP_PKEY_method, pkey_pm_new, pkey_pm_free, pkey_pm_load); libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/library/ssl_pkey.c000066400000000000000000000116321357643561300245200ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "ssl_pkey.h" #include "ssl_methods.h" #include "ssl_dbg.h" #include "ssl_port.h" /** * @brief create a private key object according to input private key */ EVP_PKEY* __EVP_PKEY_new(EVP_PKEY *ipk) { int ret; EVP_PKEY *pkey; pkey = ssl_mem_zalloc(sizeof(EVP_PKEY)); if (!pkey) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "no enough memory > (pkey)"); goto no_mem; } if (ipk) { pkey->method = ipk->method; } else { pkey->method = EVP_PKEY_method(); } ret = EVP_PKEY_METHOD_CALL(new, pkey, ipk); if (ret) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "EVP_PKEY_METHOD_CALL(new) return %d", ret); goto failed; } return pkey; failed: ssl_mem_free(pkey); no_mem: return NULL; } /** * @brief create a private key object */ EVP_PKEY* EVP_PKEY_new(void) { return __EVP_PKEY_new(NULL); } /** * @brief free a private key object */ void EVP_PKEY_free(EVP_PKEY *pkey) { SSL_ASSERT3(pkey); EVP_PKEY_METHOD_CALL(free, pkey); ssl_mem_free(pkey); } /** * @brief load a character key context into system context. If '*a' is pointed to the * private key, then load key into it. Or create a new private key object */ EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, long length) { int m = 0; int ret; EVP_PKEY *pkey; SSL_ASSERT2(pp); SSL_ASSERT2(*pp); SSL_ASSERT2(length); if (a && *a) { pkey = *a; } else { pkey = EVP_PKEY_new();; if (!pkey) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "EVP_PKEY_new() return NULL"); goto failed1; } m = 1; } ret = EVP_PKEY_METHOD_CALL(load, pkey, *pp, length); if (ret) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "EVP_PKEY_METHOD_CALL(load) return %d", ret); goto failed2; } if (a) *a = pkey; return pkey; failed2: if (m) EVP_PKEY_free(pkey); failed1: return NULL; } /** * @brief set the SSL context private key */ int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey) { SSL_ASSERT1(ctx); SSL_ASSERT1(pkey); if (ctx->cert->pkey == pkey) return 1; if (ctx->cert->pkey) EVP_PKEY_free(ctx->cert->pkey); ctx->cert->pkey = pkey; return 1; } /** * @brief set the SSL private key */ int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey) { SSL_ASSERT1(ssl); SSL_ASSERT1(pkey); if (ssl->cert->pkey == pkey) return 1; if (ssl->cert->pkey) EVP_PKEY_free(ssl->cert->pkey); ssl->cert->pkey = pkey; return 1; } /** * @brief load private key into the SSL context */ int SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx, const unsigned char *d, long len) { int ret; EVP_PKEY *pk; pk = d2i_PrivateKey(0, NULL, &d, len); if (!pk) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "d2i_PrivateKey() return NULL"); goto failed1; } ret = SSL_CTX_use_PrivateKey(ctx, pk); if (!ret) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "SSL_CTX_use_PrivateKey() return %d", ret); goto failed2; } return 1; failed2: EVP_PKEY_free(pk); failed1: return 0; } /** * @brief load private key into the SSL */ int SSL_use_PrivateKey_ASN1(int type, SSL *ssl, const unsigned char *d, long len) { int ret; EVP_PKEY *pk; pk = d2i_PrivateKey(0, NULL, &d, len); if (!pk) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "d2i_PrivateKey() return NULL"); goto failed1; } ret = SSL_use_PrivateKey(ssl, pk); if (!ret) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "SSL_use_PrivateKey() return %d", ret); goto failed2; } return 1; failed2: EVP_PKEY_free(pk); failed1: return 0; } /** * @brief load the private key file into SSL context */ int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type) { return 0; } /** * @brief load the private key file into SSL */ int SSL_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type) { return 0; } /** * @brief load the RSA ASN1 private key into SSL context */ int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len) { return SSL_CTX_use_PrivateKey_ASN1(0, ctx, d, len); } libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/library/ssl_stack.c000066400000000000000000000033471357643561300246610ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "ssl_stack.h" #include "ssl_dbg.h" #include "ssl_port.h" #ifndef CONFIG_MIN_NODES #define MIN_NODES 4 #else #define MIN_NODES CONFIG_MIN_NODES #endif /** * @brief create a openssl stack object */ OPENSSL_STACK* OPENSSL_sk_new(OPENSSL_sk_compfunc c) { OPENSSL_STACK *stack; char **data; stack = ssl_mem_zalloc(sizeof(OPENSSL_STACK)); if (!stack) { SSL_DEBUG(SSL_STACK_ERROR_LEVEL, "no enough memory > (stack)"); goto no_mem1; } data = ssl_mem_zalloc(sizeof(*data) * MIN_NODES); if (!data) { SSL_DEBUG(SSL_STACK_ERROR_LEVEL, "no enough memory > (data)"); goto no_mem2; } stack->data = data; stack->num_alloc = MIN_NODES; stack->c = c; return stack; no_mem2: ssl_mem_free(stack); no_mem1: return NULL; } /** * @brief create a NULL function openssl stack object */ OPENSSL_STACK *OPENSSL_sk_new_null(void) { return OPENSSL_sk_new((OPENSSL_sk_compfunc)NULL); } /** * @brief free openssl stack object */ void OPENSSL_sk_free(OPENSSL_STACK *stack) { SSL_ASSERT3(stack); ssl_mem_free(stack->data); ssl_mem_free(stack); } libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/library/ssl_x509.c000066400000000000000000000146111357643561300242550ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "ssl_x509.h" #include "ssl_methods.h" #include "ssl_dbg.h" #include "ssl_port.h" #include /** * @brief show X509 certification information */ int __X509_show_info(X509 *x) { return X509_METHOD_CALL(show_info, x); } /** * @brief create a X509 certification object according to input X509 certification */ X509* __X509_new(X509 *ix) { int ret; X509 *x; x = ssl_mem_zalloc(sizeof(X509)); if (!x) { SSL_DEBUG(SSL_X509_ERROR_LEVEL, "no enough memory > (x)"); goto no_mem; } if (ix) x->method = ix->method; else x->method = X509_method(); ret = X509_METHOD_CALL(new, x, ix); if (ret) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "X509_METHOD_CALL(new) return %d", ret); goto failed; } return x; failed: ssl_mem_free(x); no_mem: return NULL; } /** * @brief create a X509 certification object */ X509* X509_new(void) { return __X509_new(NULL); } /** * @brief free a X509 certification object */ void X509_free(X509 *x) { SSL_ASSERT3(x); X509_METHOD_CALL(free, x); ssl_mem_free(x); }; /** * @brief load a character certification context into system context. If '*cert' is pointed to the * certification, then load certification into it. Or create a new X509 certification object */ X509* d2i_X509(X509 **cert, const unsigned char *buffer, long len) { int m = 0; int ret; X509 *x; SSL_ASSERT2(buffer); SSL_ASSERT2(len); if (cert && *cert) { x = *cert; } else { x = X509_new(); if (!x) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "X509_new() return NULL"); goto failed1; } m = 1; } ret = X509_METHOD_CALL(load, x, buffer, len); if (ret) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "X509_METHOD_CALL(load) return %d", ret); goto failed2; } return x; failed2: if (m) X509_free(x); failed1: return NULL; } /** * @brief return SSL X509 verify parameters */ X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl) { return &ssl->param; } /** * @brief set X509 host verification flags */ int X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, unsigned long flags) { /* flags not supported yet */ return 0; } /** * @brief clear X509 host verification flags */ int X509_VERIFY_PARAM_clear_hostflags(X509_VERIFY_PARAM *param, unsigned long flags) { /* flags not supported yet */ return 0; } /** * @brief set SSL context client CA certification */ int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x) { SSL_ASSERT1(ctx); SSL_ASSERT1(x); assert(ctx); if (ctx->client_CA == x) return 1; X509_free(ctx->client_CA); ctx->client_CA = x; return 1; } /** * @brief add CA client certification into the SSL */ int SSL_CTX_add_client_CA_ASN1(SSL_CTX *ctx, int len, const unsigned char *d) { X509 *x; x = d2i_X509(NULL, d, len); if (!x) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "d2i_X509() return NULL"); return 0; } SSL_ASSERT1(ctx); X509_free(ctx->client_CA); ctx->client_CA = x; return 1; } /** * @brief add CA client certification into the SSL */ int SSL_add_client_CA(SSL *ssl, X509 *x) { SSL_ASSERT1(ssl); SSL_ASSERT1(x); if (ssl->client_CA == x) return 1; X509_free(ssl->client_CA); ssl->client_CA = x; return 1; } /** * @brief set the SSL context certification */ int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x) { SSL_ASSERT1(ctx); SSL_ASSERT1(x); if (ctx->cert->x509 == x) return 1; X509_free(ctx->cert->x509); ctx->cert->x509 = x; return 1; } /** * @brief set the SSL certification */ int SSL_use_certificate(SSL *ssl, X509 *x) { SSL_ASSERT1(ssl); SSL_ASSERT1(x); if (ssl->cert->x509 == x) return 1; X509_free(ssl->cert->x509); ssl->cert->x509 = x; return 1; } /** * @brief get the SSL certification point */ X509 *SSL_get_certificate(const SSL *ssl) { SSL_ASSERT2(ssl); return ssl->cert->x509; } /** * @brief load certification into the SSL context */ int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d) { int ret; X509 *x; x = d2i_X509(NULL, d, len); if (!x) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "d2i_X509() return NULL"); goto failed1; } ret = SSL_CTX_use_certificate(ctx, x); if (!ret) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "SSL_CTX_use_certificate() return %d", ret); goto failed2; } return 1; failed2: X509_free(x); failed1: return 0; } /** * @brief load certification into the SSL */ int SSL_use_certificate_ASN1(SSL *ssl, int len, const unsigned char *d) { int ret; X509 *x; x = d2i_X509(NULL, d, len); if (!x) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "d2i_X509() return NULL"); goto failed1; } ret = SSL_use_certificate(ssl, x); if (!ret) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "SSL_use_certificate() return %d", ret); goto failed2; } return 1; failed2: X509_free(x); failed1: return 0; } /** * @brief load the certification file into SSL context */ int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type) { return 0; } /** * @brief load the certification file into SSL */ int SSL_use_certificate_file(SSL *ssl, const char *file, int type) { return 0; } /** * @brief get peer certification */ X509 *SSL_get_peer_certificate(const SSL *ssl) { SSL_ASSERT2(ssl); return ssl->session->peer; } int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx) { return X509_V_ERR_UNSPECIFIED; } int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx) { return 0; } const char *X509_verify_cert_error_string(long n) { return "unknown"; } libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/platform/000077500000000000000000000000001357643561300227005ustar00rootroot00000000000000libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/platform/ssl_pm.c000077500000000000000000000606421357643561300243540ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "ssl_pm.h" #include "ssl_port.h" #include "ssl_dbg.h" /* mbedtls include */ #include "mbedtls/platform.h" #include "mbedtls/net_sockets.h" #include "mbedtls/debug.h" #include "mbedtls/entropy.h" #include "mbedtls/ctr_drbg.h" #include "mbedtls/error.h" #include "mbedtls/certs.h" #include "core/private.h" #define X509_INFO_STRING_LENGTH 8192 struct ssl_pm { /* local socket file description */ mbedtls_net_context fd; /* remote client socket file description */ mbedtls_net_context cl_fd; mbedtls_ssl_config conf; mbedtls_ctr_drbg_context ctr_drbg; mbedtls_ssl_context ssl; mbedtls_entropy_context entropy; SSL *owner; }; struct x509_pm { mbedtls_x509_crt *x509_crt; mbedtls_x509_crt *ex_crt; }; struct pkey_pm { mbedtls_pk_context *pkey; mbedtls_pk_context *ex_pkey; }; unsigned int max_content_len; /*********************************************************************************************/ /************************************ SSL arch interface *************************************/ //#ifdef CONFIG_OPENSSL_LOWLEVEL_DEBUG /* mbedtls debug level */ #define MBEDTLS_DEBUG_LEVEL 4 /** * @brief mbedtls debug function */ static void ssl_platform_debug(void *ctx, int level, const char *file, int line, const char *str) { /* Shorten 'file' from the whole file path to just the filename This is a bit wasteful because the macros are compiled in with the full _FILE_ path in each case. */ // char *file_sep = rindex(file, '/'); // if(file_sep) // file = file_sep + 1; printf("%s:%d %s", file, line, str); } //#endif /** * @brief create SSL low-level object */ int ssl_pm_new(SSL *ssl) { struct ssl_pm *ssl_pm; int ret; const unsigned char pers[] = "OpenSSL PM"; size_t pers_len = sizeof(pers); int endpoint; int version; const SSL_METHOD *method = ssl->method; ssl_pm = ssl_mem_zalloc(sizeof(struct ssl_pm)); if (!ssl_pm) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "no enough memory > (ssl_pm)"); goto no_mem; } ssl_pm->owner = ssl; if (!ssl->ctx->read_buffer_len) ssl->ctx->read_buffer_len = 2048; max_content_len = ssl->ctx->read_buffer_len; // printf("ssl->ctx->read_buffer_len = %d ++++++++++++++++++++\n", ssl->ctx->read_buffer_len); mbedtls_net_init(&ssl_pm->fd); mbedtls_net_init(&ssl_pm->cl_fd); mbedtls_ssl_config_init(&ssl_pm->conf); mbedtls_ctr_drbg_init(&ssl_pm->ctr_drbg); mbedtls_entropy_init(&ssl_pm->entropy); mbedtls_ssl_init(&ssl_pm->ssl); ret = mbedtls_ctr_drbg_seed(&ssl_pm->ctr_drbg, mbedtls_entropy_func, &ssl_pm->entropy, pers, pers_len); if (ret) { lwsl_notice("%s: mbedtls_ctr_drbg_seed() return -0x%x", __func__, -ret); //goto mbedtls_err1; } if (method->endpoint) { endpoint = MBEDTLS_SSL_IS_SERVER; } else { endpoint = MBEDTLS_SSL_IS_CLIENT; } ret = mbedtls_ssl_config_defaults(&ssl_pm->conf, endpoint, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT); if (ret) { lwsl_err("%s: mbedtls_ssl_config_defaults() return -0x%x", __func__, -ret); SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_config_defaults() return -0x%x", -ret); goto mbedtls_err2; } if (TLS_ANY_VERSION != ssl->version) { if (TLS1_2_VERSION == ssl->version) version = MBEDTLS_SSL_MINOR_VERSION_3; else if (TLS1_1_VERSION == ssl->version) version = MBEDTLS_SSL_MINOR_VERSION_2; else if (TLS1_VERSION == ssl->version) version = MBEDTLS_SSL_MINOR_VERSION_1; else version = MBEDTLS_SSL_MINOR_VERSION_0; mbedtls_ssl_conf_max_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, version); mbedtls_ssl_conf_min_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, version); } else { mbedtls_ssl_conf_max_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3); mbedtls_ssl_conf_min_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0); } mbedtls_ssl_conf_rng(&ssl_pm->conf, mbedtls_ctr_drbg_random, &ssl_pm->ctr_drbg); //#ifdef CONFIG_OPENSSL_LOWLEVEL_DEBUG // mbedtls_debug_set_threshold(MBEDTLS_DEBUG_LEVEL); // mbedtls_ssl_conf_dbg(&ssl_pm->conf, ssl_platform_debug, NULL); //#else mbedtls_ssl_conf_dbg(&ssl_pm->conf, ssl_platform_debug, NULL); //#endif ret = mbedtls_ssl_setup(&ssl_pm->ssl, &ssl_pm->conf); if (ret) { lwsl_err("%s: mbedtls_ssl_setup() return -0x%x", __func__, -ret); SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_setup() return -0x%x", -ret); goto mbedtls_err2; } mbedtls_ssl_set_bio(&ssl_pm->ssl, &ssl_pm->fd, mbedtls_net_send, mbedtls_net_recv, NULL); ssl->ssl_pm = ssl_pm; return 0; mbedtls_err2: mbedtls_ssl_config_free(&ssl_pm->conf); mbedtls_ctr_drbg_free(&ssl_pm->ctr_drbg); //mbedtls_err1: mbedtls_entropy_free(&ssl_pm->entropy); ssl_mem_free(ssl_pm); no_mem: return -1; } /** * @brief free SSL low-level object */ void ssl_pm_free(SSL *ssl) { struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; mbedtls_ctr_drbg_free(&ssl_pm->ctr_drbg); mbedtls_entropy_free(&ssl_pm->entropy); mbedtls_ssl_config_free(&ssl_pm->conf); mbedtls_ssl_free(&ssl_pm->ssl); ssl_mem_free(ssl_pm); ssl->ssl_pm = NULL; } /** * @brief reload SSL low-level certification object */ static int ssl_pm_reload_crt(SSL *ssl) { int ret; int mode; struct ssl_pm *ssl_pm = ssl->ssl_pm; struct x509_pm *ca_pm = (struct x509_pm *)ssl->client_CA->x509_pm; struct pkey_pm *pkey_pm = (struct pkey_pm *)ssl->cert->pkey->pkey_pm; struct x509_pm *crt_pm = (struct x509_pm *)ssl->cert->x509->x509_pm; if (ssl->verify_mode == SSL_VERIFY_PEER) mode = MBEDTLS_SSL_VERIFY_OPTIONAL; else if (ssl->verify_mode == SSL_VERIFY_FAIL_IF_NO_PEER_CERT) mode = MBEDTLS_SSL_VERIFY_OPTIONAL; else if (ssl->verify_mode == SSL_VERIFY_CLIENT_ONCE) mode = MBEDTLS_SSL_VERIFY_UNSET; else mode = MBEDTLS_SSL_VERIFY_NONE; mbedtls_ssl_conf_authmode(&ssl_pm->conf, mode); if (ca_pm->x509_crt) { mbedtls_ssl_conf_ca_chain(&ssl_pm->conf, ca_pm->x509_crt, NULL); } else if (ca_pm->ex_crt) { mbedtls_ssl_conf_ca_chain(&ssl_pm->conf, ca_pm->ex_crt, NULL); } if (crt_pm->x509_crt && pkey_pm->pkey) { ret = mbedtls_ssl_conf_own_cert(&ssl_pm->conf, crt_pm->x509_crt, pkey_pm->pkey); } else if (crt_pm->ex_crt && pkey_pm->ex_pkey) { ret = mbedtls_ssl_conf_own_cert(&ssl_pm->conf, crt_pm->ex_crt, pkey_pm->ex_pkey); } else { ret = 0; } if (ret) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_conf_own_cert() return -0x%x", -ret); ret = -1; } return ret; } /* * Perform the mbedtls SSL handshake instead of mbedtls_ssl_handshake. * We can add debug here. */ static int mbedtls_handshake( mbedtls_ssl_context *ssl ) { int ret = 0; while (ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER) { ret = mbedtls_ssl_handshake_step(ssl); lwsl_info("%s: ssl ret -%x state %d\n", __func__, -ret, ssl->state); if (ret != 0) break; } return ret; } #if !defined(LWS_PLAT_OPTEE) #include #endif int ssl_pm_handshake(SSL *ssl) { int ret; struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; ssl->err = 0; errno = 0; ret = ssl_pm_reload_crt(ssl); if (ret) { printf("%s: cert reload failed\n", __func__); return 0; } if (ssl_pm->ssl.state != MBEDTLS_SSL_HANDSHAKE_OVER) { ssl_speed_up_enter(); /* mbedtls return codes * 0 = successful, or MBEDTLS_ERR_SSL_WANT_READ/WRITE * anything else = death */ ret = mbedtls_handshake(&ssl_pm->ssl); ssl_speed_up_exit(); } else ret = 0; /* * OpenSSL return codes: * 0 = did not complete, but may be retried * 1 = successfully completed * <0 = death */ if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) { ssl->err = ret; SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_handshake() return -0x%x", -ret); return 0; /* OpenSSL: did not complete but may be retried */ } if (ret == 0) { /* successful */ struct x509_pm *x509_pm = (struct x509_pm *)ssl->session->peer->x509_pm; x509_pm->ex_crt = (mbedtls_x509_crt *)mbedtls_ssl_get_peer_cert(&ssl_pm->ssl); return 1; /* openssl successful */ } if (errno == 11) { ssl->err = ret == MBEDTLS_ERR_SSL_WANT_READ; return 0; } lwsl_info("%s: mbedtls_ssl_handshake() returned -0x%x\n", __func__, -ret); /* it's had it */ ssl->err = SSL_ERROR_SYSCALL; return -1; /* openssl death */ } mbedtls_x509_crt * ssl_ctx_get_mbedtls_x509_crt(SSL_CTX *ssl_ctx) { struct x509_pm *x509_pm = (struct x509_pm *)ssl_ctx->cert->x509->x509_pm; if (!x509_pm) return NULL; return x509_pm->x509_crt; } mbedtls_x509_crt * ssl_get_peer_mbedtls_x509_crt(SSL *ssl) { struct x509_pm *x509_pm = (struct x509_pm *)ssl->session->peer->x509_pm; if (!x509_pm) return NULL; return x509_pm->ex_crt; } int ssl_pm_shutdown(SSL *ssl) { int ret; struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; ret = mbedtls_ssl_close_notify(&ssl_pm->ssl); if (ret) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_close_notify() return -0x%x", -ret); if (ret == MBEDTLS_ERR_NET_CONN_RESET) ssl->err = SSL_ERROR_SYSCALL; ret = -1; /* OpenSSL: "Call SSL_get_error with the return value to find the reason */ } else { struct x509_pm *x509_pm = (struct x509_pm *)ssl->session->peer->x509_pm; x509_pm->ex_crt = NULL; ret = 1; /* OpenSSL: "The shutdown was successfully completed" ...0 means retry */ } return ret; } int ssl_pm_clear(SSL *ssl) { return ssl_pm_shutdown(ssl); } int ssl_pm_read(SSL *ssl, void *buffer, int len) { int ret; struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; ret = mbedtls_ssl_read(&ssl_pm->ssl, buffer, len); if (ret < 0) { // lwsl_notice("%s: mbedtls_ssl_read says -0x%x\n", __func__, -ret); SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_read() return -0x%x", -ret); if (ret == MBEDTLS_ERR_NET_CONN_RESET || ret <= MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE) /* fatal errors */ ssl->err = SSL_ERROR_SYSCALL; ret = -1; } return ret; } /* * This returns -1, or the length sent. * If -1, then you need to find out if the error was * fatal or recoverable using SSL_get_error() */ int ssl_pm_send(SSL *ssl, const void *buffer, int len) { int ret; struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; ret = mbedtls_ssl_write(&ssl_pm->ssl, buffer, len); /* * We can get a positive number, which may be less than len... that * much was sent successfully and you can call again to send more. * * We can get a negative mbedtls error code... if WANT_WRITE or WANT_READ, * it's nonfatal and means it should be retried as-is. If something else, * it's fatal actually. * * If this function returns something other than a positive value or * MBEDTLS_ERR_SSL_WANT_READ/WRITE, the ssl context becomes unusable, and * you should either free it or call mbedtls_ssl_session_reset() on it * before re-using it for a new connection; the current connection must * be closed. * * When this function returns MBEDTLS_ERR_SSL_WANT_WRITE/READ, it must be * called later with the same arguments, until it returns a positive value. */ if (ret < 0) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_write() return -0x%x", -ret); switch (ret) { case MBEDTLS_ERR_NET_SEND_FAILED: case MBEDTLS_ERR_NET_CONN_RESET: ssl->err = SSL_ERROR_SYSCALL; break; case MBEDTLS_ERR_SSL_WANT_WRITE: ssl->err = SSL_ERROR_WANT_WRITE; break; case MBEDTLS_ERR_SSL_WANT_READ: ssl->err = SSL_ERROR_WANT_READ; break; default: break; } ret = -1; } return ret; } int ssl_pm_pending(const SSL *ssl) { struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; return mbedtls_ssl_get_bytes_avail(&ssl_pm->ssl); } void ssl_pm_set_fd(SSL *ssl, int fd, int mode) { struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; ssl_pm->fd.fd = fd; } int ssl_pm_get_fd(const SSL *ssl, int mode) { struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; return ssl_pm->fd.fd; } OSSL_HANDSHAKE_STATE ssl_pm_get_state(const SSL *ssl) { OSSL_HANDSHAKE_STATE state; struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; switch (ssl_pm->ssl.state) { case MBEDTLS_SSL_CLIENT_HELLO: state = TLS_ST_CW_CLNT_HELLO; break; case MBEDTLS_SSL_SERVER_HELLO: state = TLS_ST_SW_SRVR_HELLO; break; case MBEDTLS_SSL_SERVER_CERTIFICATE: state = TLS_ST_SW_CERT; break; case MBEDTLS_SSL_SERVER_HELLO_DONE: state = TLS_ST_SW_SRVR_DONE; break; case MBEDTLS_SSL_CLIENT_KEY_EXCHANGE: state = TLS_ST_CW_KEY_EXCH; break; case MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC: state = TLS_ST_CW_CHANGE; break; case MBEDTLS_SSL_CLIENT_FINISHED: state = TLS_ST_CW_FINISHED; break; case MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC: state = TLS_ST_SW_CHANGE; break; case MBEDTLS_SSL_SERVER_FINISHED: state = TLS_ST_SW_FINISHED; break; case MBEDTLS_SSL_CLIENT_CERTIFICATE: state = TLS_ST_CW_CERT; break; case MBEDTLS_SSL_SERVER_KEY_EXCHANGE: state = TLS_ST_SR_KEY_EXCH; break; case MBEDTLS_SSL_SERVER_NEW_SESSION_TICKET: state = TLS_ST_SW_SESSION_TICKET; break; case MBEDTLS_SSL_SERVER_HELLO_VERIFY_REQUEST_SENT: state = TLS_ST_SW_CERT_REQ; break; case MBEDTLS_SSL_HANDSHAKE_OVER: state = TLS_ST_OK; break; default : state = TLS_ST_BEFORE; break; } return state; } int x509_pm_show_info(X509 *x) { int ret; char *buf; mbedtls_x509_crt *x509_crt; struct x509_pm *x509_pm = x->x509_pm; if (x509_pm->x509_crt) x509_crt = x509_pm->x509_crt; else if (x509_pm->ex_crt) x509_crt = x509_pm->ex_crt; else x509_crt = NULL; if (!x509_crt) return -1; buf = ssl_mem_malloc(X509_INFO_STRING_LENGTH); if (!buf) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "no enough memory > (buf)"); goto no_mem; } ret = mbedtls_x509_crt_info(buf, X509_INFO_STRING_LENGTH - 1, "", x509_crt); if (ret <= 0) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_x509_crt_info() return -0x%x", -ret); goto mbedtls_err1; } buf[ret] = 0; ssl_mem_free(buf); SSL_DEBUG(SSL_DEBUG_ON, "%s", buf); return 0; mbedtls_err1: ssl_mem_free(buf); no_mem: return -1; } int x509_pm_new(X509 *x, X509 *m_x) { struct x509_pm *x509_pm; x509_pm = ssl_mem_zalloc(sizeof(struct x509_pm)); if (!x509_pm) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "no enough memory > (x509_pm)"); goto failed1; } x->x509_pm = x509_pm; if (m_x) { struct x509_pm *m_x509_pm = (struct x509_pm *)m_x->x509_pm; x509_pm->ex_crt = m_x509_pm->x509_crt; } return 0; failed1: return -1; } void x509_pm_free(X509 *x) { struct x509_pm *x509_pm = (struct x509_pm *)x->x509_pm; if (x509_pm->x509_crt) { mbedtls_x509_crt_free(x509_pm->x509_crt); ssl_mem_free(x509_pm->x509_crt); x509_pm->x509_crt = NULL; } ssl_mem_free(x->x509_pm); x->x509_pm = NULL; } int x509_pm_load(X509 *x, const unsigned char *buffer, int len) { int ret; unsigned char *load_buf; struct x509_pm *x509_pm = (struct x509_pm *)x->x509_pm; if (x509_pm->x509_crt) mbedtls_x509_crt_free(x509_pm->x509_crt); if (!x509_pm->x509_crt) { x509_pm->x509_crt = ssl_mem_malloc(sizeof(mbedtls_x509_crt)); if (!x509_pm->x509_crt) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "no enough memory > (x509_pm->x509_crt)"); goto no_mem; } } mbedtls_x509_crt_init(x509_pm->x509_crt); if (buffer[0] != 0x30) { load_buf = ssl_mem_malloc(len + 1); if (!load_buf) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "no enough memory > (load_buf)"); goto failed; } ssl_memcpy(load_buf, buffer, len); load_buf[len] = '\0'; ret = mbedtls_x509_crt_parse(x509_pm->x509_crt, load_buf, len + 1); ssl_mem_free(load_buf); } else { // printf("parsing as der\n"); ret = mbedtls_x509_crt_parse_der(x509_pm->x509_crt, buffer, len); } if (ret) { printf("mbedtls_x509_crt_parse return -0x%x", -ret); goto failed; } return 0; failed: mbedtls_x509_crt_free(x509_pm->x509_crt); ssl_mem_free(x509_pm->x509_crt); x509_pm->x509_crt = NULL; no_mem: return -1; } int pkey_pm_new(EVP_PKEY *pk, EVP_PKEY *m_pkey) { struct pkey_pm *pkey_pm; pkey_pm = ssl_mem_zalloc(sizeof(struct pkey_pm)); if (!pkey_pm) return -1; pk->pkey_pm = pkey_pm; if (m_pkey) { struct pkey_pm *m_pkey_pm = (struct pkey_pm *)m_pkey->pkey_pm; pkey_pm->ex_pkey = m_pkey_pm->pkey; } return 0; } void pkey_pm_free(EVP_PKEY *pk) { struct pkey_pm *pkey_pm = (struct pkey_pm *)pk->pkey_pm; if (pkey_pm->pkey) { mbedtls_pk_free(pkey_pm->pkey); ssl_mem_free(pkey_pm->pkey); pkey_pm->pkey = NULL; } ssl_mem_free(pk->pkey_pm); pk->pkey_pm = NULL; } int pkey_pm_load(EVP_PKEY *pk, const unsigned char *buffer, int len) { int ret; unsigned char *load_buf; struct pkey_pm *pkey_pm = (struct pkey_pm *)pk->pkey_pm; if (pkey_pm->pkey) mbedtls_pk_free(pkey_pm->pkey); if (!pkey_pm->pkey) { pkey_pm->pkey = ssl_mem_malloc(sizeof(mbedtls_pk_context)); if (!pkey_pm->pkey) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "no enough memory > (pkey_pm->pkey)"); goto no_mem; } } load_buf = ssl_mem_malloc(len + 1); if (!load_buf) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "no enough memory > (load_buf)"); goto failed; } ssl_memcpy(load_buf, buffer, len); load_buf[len] = '\0'; mbedtls_pk_init(pkey_pm->pkey); ret = mbedtls_pk_parse_key(pkey_pm->pkey, load_buf, len + 1, NULL, 0); ssl_mem_free(load_buf); if (ret) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_pk_parse_key return -0x%x", -ret); goto failed; } return 0; failed: mbedtls_pk_free(pkey_pm->pkey); ssl_mem_free(pkey_pm->pkey); pkey_pm->pkey = NULL; no_mem: return -1; } void ssl_pm_set_bufflen(SSL *ssl, int len) { max_content_len = len; } long ssl_pm_get_verify_result(const SSL *ssl) { uint32_t ret; long verify_result; struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; ret = mbedtls_ssl_get_verify_result(&ssl_pm->ssl); if (!ret) return X509_V_OK; if (ret & MBEDTLS_X509_BADCERT_NOT_TRUSTED || (ret & MBEDTLS_X509_BADCRL_NOT_TRUSTED)) verify_result = X509_V_ERR_INVALID_CA; else if (ret & MBEDTLS_X509_BADCERT_CN_MISMATCH) verify_result = X509_V_ERR_HOSTNAME_MISMATCH; else if ((ret & MBEDTLS_X509_BADCERT_BAD_KEY) || (ret & MBEDTLS_X509_BADCRL_BAD_KEY)) verify_result = X509_V_ERR_CA_KEY_TOO_SMALL; else if ((ret & MBEDTLS_X509_BADCERT_BAD_MD) || (ret & MBEDTLS_X509_BADCRL_BAD_MD)) verify_result = X509_V_ERR_CA_MD_TOO_WEAK; else if ((ret & MBEDTLS_X509_BADCERT_FUTURE) || (ret & MBEDTLS_X509_BADCRL_FUTURE)) verify_result = X509_V_ERR_CERT_NOT_YET_VALID; else if ((ret & MBEDTLS_X509_BADCERT_EXPIRED) || (ret & MBEDTLS_X509_BADCRL_EXPIRED)) verify_result = X509_V_ERR_CERT_HAS_EXPIRED; else verify_result = X509_V_ERR_UNSPECIFIED; SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_get_verify_result() return 0x%x", ret); return verify_result; } /** * @brief set expected hostname on peer cert CN */ int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen) { SSL *ssl = (SSL *)((char *)param - offsetof(SSL, param)); struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; char *name_cstr = NULL; if (namelen) { name_cstr = malloc(namelen + 1); if (!name_cstr) return 0; memcpy(name_cstr, name, namelen); name_cstr[namelen] = '\0'; name = name_cstr; } mbedtls_ssl_set_hostname(&ssl_pm->ssl, name); if (namelen) free(name_cstr); return 1; } void _ssl_set_alpn_list(const SSL *ssl) { #if defined(LWS_HAVE_mbedtls_ssl_conf_alpn_protocols) if (ssl->alpn_protos) { if (mbedtls_ssl_conf_alpn_protocols(&((struct ssl_pm *)(ssl->ssl_pm))->conf, ssl->alpn_protos)) fprintf(stderr, "mbedtls_ssl_conf_alpn_protocols failed\n"); return; } if (!ssl->ctx->alpn_protos) return; if (mbedtls_ssl_conf_alpn_protocols(&((struct ssl_pm *)(ssl->ssl_pm))->conf, ssl->ctx->alpn_protos)) fprintf(stderr, "mbedtls_ssl_conf_alpn_protocols failed\n"); #endif } void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, unsigned int *len) { #if defined(LWS_HAVE_mbedtls_ssl_get_alpn_protocol) const char *alp = mbedtls_ssl_get_alpn_protocol(&((struct ssl_pm *)(ssl->ssl_pm))->ssl); *data = (const unsigned char *)alp; if (alp) *len = strlen(alp); else *len = 0; #endif } int SSL_set_sni_callback(SSL *ssl, int(*cb)(void *, mbedtls_ssl_context *, const unsigned char *, size_t), void *param) { #if defined(LWS_HAVE_mbedtls_ssl_conf_sni) struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; mbedtls_ssl_conf_sni(&ssl_pm->conf, cb, param); #endif return 0; } SSL *SSL_SSL_from_mbedtls_ssl_context(mbedtls_ssl_context *msc) { struct ssl_pm *ssl_pm = (struct ssl_pm *)((char *)msc - offsetof(struct ssl_pm, ssl)); return ssl_pm->owner; } #include "ssl_cert.h" void SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx) { #if defined(LWS_HAVE_mbedtls_ssl_set_hs_authmode) || \ defined(LWS_HAVE_mbedtls_ssl_set_hs_ca_chain) || \ defined(LWS_HAVE_mbedtls_ssl_set_hs_own_cert) struct ssl_pm *ssl_pm = ssl->ssl_pm; #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_own_cert) struct x509_pm *x509_pm; #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_ca_chain) struct x509_pm *x509_pm_ca; #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_own_cert) struct pkey_pm *pkey_pm; #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_authmode) int mode; #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_own_cert) if (!ctx->cert || !ctx->cert->x509) return; x509_pm = (struct x509_pm *)ctx->cert->x509->x509_pm; #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_ca_chain) if (!ctx->client_CA) return; x509_pm_ca = (struct x509_pm *)ctx->client_CA->x509_pm; #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_own_cert) if (!ctx->cert || !ctx->cert->pkey) return; pkey_pm = (struct pkey_pm *)ctx->cert->pkey->pkey_pm; #endif if (ssl->cert) ssl_cert_free(ssl->cert); ssl->ctx = ctx; ssl->cert = __ssl_cert_new(ctx->cert); #if defined(LWS_HAVE_mbedtls_ssl_set_hs_authmode) if (ctx->verify_mode == SSL_VERIFY_PEER) mode = MBEDTLS_SSL_VERIFY_OPTIONAL; else if (ctx->verify_mode == SSL_VERIFY_FAIL_IF_NO_PEER_CERT) mode = MBEDTLS_SSL_VERIFY_OPTIONAL; else if (ctx->verify_mode == SSL_VERIFY_CLIENT_ONCE) mode = MBEDTLS_SSL_VERIFY_UNSET; else mode = MBEDTLS_SSL_VERIFY_NONE; #endif /* apply new ctx cert to ssl */ ssl->verify_mode = ctx->verify_mode; #if defined(LWS_HAVE_mbedtls_ssl_set_hs_ca_chain) mbedtls_ssl_set_hs_ca_chain(&ssl_pm->ssl, x509_pm_ca->x509_crt, NULL); #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_own_cert) mbedtls_ssl_set_hs_own_cert(&ssl_pm->ssl, x509_pm->x509_crt, pkey_pm->pkey); #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_authmode) mbedtls_ssl_set_hs_authmode(&ssl_pm->ssl, mode); #endif } libwebsockets-3.2.1/lib/tls/mbedtls/wrapper/platform/ssl_port.c000066400000000000000000000016731357643561300247200ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "ssl_port.h" /*********************************************************************************************/ /********************************* SSL general interface *************************************/ void *ssl_mem_zalloc(size_t size) { void *p = malloc(size); if (p) memset(p, 0, size); return p; } libwebsockets-3.2.1/lib/tls/mbedtls/x509.c000066400000000000000000000236071357643561300202550ustar00rootroot00000000000000/* * libwebsockets - mbedTLS-specific lws apis * * Copyright (C) 2010-2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "tls/mbedtls/private.h" #include #if defined(LWS_PLAT_OPTEE) || defined(OPTEE_DEV_KIT) struct tm { int tm_sec; // seconds [0,61] int tm_min; // minutes [0,59] int tm_hour; // hour [0,23] int tm_mday; // day of month [1,31] int tm_mon; // month of year [0,11] int tm_year; // years since 1900 int tm_wday; // day of week [0,6] (Sunday = 0) int tm_yday; // day of year [0,365] int tm_isdst; // daylight savings flag }; time_t mktime(struct tm *t) { return (time_t)0; } #endif static time_t lws_tls_mbedtls_time_to_unix(mbedtls_x509_time *xtime) { struct tm t; if (!xtime || !xtime->year || xtime->year < 0) return (time_t)(long long)-1; memset(&t, 0, sizeof(t)); t.tm_year = xtime->year - 1900; t.tm_mon = xtime->mon - 1; /* mbedtls months are 1+, tm are 0+ */ t.tm_mday = xtime->day - 1; /* mbedtls days are 1+, tm are 0+ */ t.tm_hour = xtime->hour; t.tm_min = xtime->min; t.tm_sec = xtime->sec; t.tm_isdst = -1; return mktime(&t); } static int lws_tls_mbedtls_get_x509_name(mbedtls_x509_name *name, union lws_tls_cert_info_results *buf, size_t len) { while (name) { if (MBEDTLS_OID_CMP(MBEDTLS_OID_AT_CN, &name->oid)) { name = name->next; continue; } if (len - 1 < name->val.len) return -1; memcpy(&buf->ns.name[0], name->val.p, name->val.len); buf->ns.name[name->val.len] = '\0'; buf->ns.len = name->val.len; return 0; } return -1; } static int lws_tls_mbedtls_cert_info(mbedtls_x509_crt *x509, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len) { if (!x509) return -1; switch (type) { case LWS_TLS_CERT_INFO_VALIDITY_FROM: buf->time = lws_tls_mbedtls_time_to_unix(&x509->valid_from); if (buf->time == (time_t)(long long)-1) return -1; break; case LWS_TLS_CERT_INFO_VALIDITY_TO: buf->time = lws_tls_mbedtls_time_to_unix(&x509->valid_to); if (buf->time == (time_t)(long long)-1) return -1; break; case LWS_TLS_CERT_INFO_COMMON_NAME: return lws_tls_mbedtls_get_x509_name(&x509->subject, buf, len); case LWS_TLS_CERT_INFO_ISSUER_NAME: return lws_tls_mbedtls_get_x509_name(&x509->issuer, buf, len); case LWS_TLS_CERT_INFO_USAGE: buf->usage = x509->key_usage; break; case LWS_TLS_CERT_INFO_OPAQUE_PUBLIC_KEY: { char *p = buf->ns.name; size_t r = len, u; switch (mbedtls_pk_get_type(&x509->pk)) { case MBEDTLS_PK_RSA: { mbedtls_rsa_context *rsa = mbedtls_pk_rsa(x509->pk); if (mbedtls_mpi_write_string(&rsa->N, 16, p, r, &u)) return -1; r -= u; p += u; if (mbedtls_mpi_write_string(&rsa->E, 16, p, r, &u)) return -1; p += u; buf->ns.len = lws_ptr_diff(p, buf->ns.name); break; } case MBEDTLS_PK_ECKEY: { mbedtls_ecp_keypair *ecp = mbedtls_pk_ec(x509->pk); if (mbedtls_mpi_write_string(&ecp->Q.X, 16, p, r, &u)) return -1; r -= u; p += u; if (mbedtls_mpi_write_string(&ecp->Q.Y, 16, p, r, &u)) return -1; r -= u; p += u; if (mbedtls_mpi_write_string(&ecp->Q.Z, 16, p, r, &u)) return -1; p += u; buf->ns.len = lws_ptr_diff(p, buf->ns.name); break; } default: lwsl_notice("%s: x509 has unsupported pubkey type %d\n", __func__, mbedtls_pk_get_type(&x509->pk)); return -1; } break; } default: return -1; } return 0; } #if defined(LWS_WITH_NETWORK) int lws_tls_vhost_cert_info(struct lws_vhost *vhost, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len) { mbedtls_x509_crt *x509; x509 = ssl_ctx_get_mbedtls_x509_crt(vhost->tls.ssl_ctx); return lws_tls_mbedtls_cert_info(x509, type, buf, len); } int lws_tls_peer_cert_info(struct lws *wsi, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len) { mbedtls_x509_crt *x509; wsi = lws_get_network_wsi(wsi); x509 = ssl_get_peer_mbedtls_x509_crt(wsi->tls.ssl); if (!x509) return -1; switch (type) { case LWS_TLS_CERT_INFO_VERIFIED: buf->verified = SSL_get_verify_result(wsi->tls.ssl) == X509_V_OK; return 0; default: return lws_tls_mbedtls_cert_info(x509, type, buf, len); } return -1; } #endif int lws_x509_info(struct lws_x509_cert *x509, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len) { return lws_tls_mbedtls_cert_info(&x509->cert, type, buf, len); } int lws_x509_create(struct lws_x509_cert **x509) { *x509 = lws_malloc(sizeof(**x509), __func__); return !(*x509); } /* * Parse one DER-encoded or one or more concatenated PEM-encoded certificates * and add them to the chained list. */ int lws_x509_parse_from_pem(struct lws_x509_cert *x509, const void *pem, size_t len) { int ret; mbedtls_x509_crt_init(&x509->cert); ret = mbedtls_x509_crt_parse(&x509->cert, pem, len); if (ret) { mbedtls_x509_crt_free(&x509->cert); lwsl_err("%s: unable to parse PEM cert: -0x%x\n", __func__, -ret); return -1; } return 0; } int lws_x509_verify(struct lws_x509_cert *x509, struct lws_x509_cert *trusted, const char *common_name) { uint32_t flags = 0; int ret; ret = mbedtls_x509_crt_verify_with_profile(&x509->cert, &trusted->cert, NULL, &mbedtls_x509_crt_profile_next, common_name, &flags, NULL, NULL); if (ret) { lwsl_err("%s: unable to parse PEM cert: -0x%x\n", __func__, -ret); return -1; } return 0; } #if defined(LWS_WITH_JOSE) int lws_x509_public_to_jwk(struct lws_jwk *jwk, struct lws_x509_cert *x509, const char *curves, int rsa_min_bits) { int kt = mbedtls_pk_get_type(&x509->cert.pk), n, count = 0, ret = -1; mbedtls_rsa_context *rsactx; mbedtls_ecp_keypair *ecpctx; mbedtls_mpi *mpi[LWS_GENCRYPTO_RSA_KEYEL_COUNT]; memset(jwk, 0, sizeof(*jwk)); switch (kt) { case MBEDTLS_PK_RSA: lwsl_notice("%s: RSA key\n", __func__); jwk->kty = LWS_GENCRYPTO_KTY_RSA; rsactx = mbedtls_pk_rsa(x509->cert.pk); mpi[LWS_GENCRYPTO_RSA_KEYEL_E] = &rsactx->E; mpi[LWS_GENCRYPTO_RSA_KEYEL_N] = &rsactx->N; mpi[LWS_GENCRYPTO_RSA_KEYEL_D] = &rsactx->D; mpi[LWS_GENCRYPTO_RSA_KEYEL_P] = &rsactx->P; mpi[LWS_GENCRYPTO_RSA_KEYEL_Q] = &rsactx->Q; mpi[LWS_GENCRYPTO_RSA_KEYEL_DP] = &rsactx->DP; mpi[LWS_GENCRYPTO_RSA_KEYEL_DQ] = &rsactx->DQ; mpi[LWS_GENCRYPTO_RSA_KEYEL_QI] = &rsactx->QP; count = LWS_GENCRYPTO_RSA_KEYEL_COUNT; n = LWS_GENCRYPTO_RSA_KEYEL_E; break; case MBEDTLS_PK_ECKEY: lwsl_notice("%s: EC key\n", __func__); jwk->kty = LWS_GENCRYPTO_KTY_EC; ecpctx = mbedtls_pk_ec(x509->cert.pk); mpi[LWS_GENCRYPTO_EC_KEYEL_X] = &ecpctx->Q.X; mpi[LWS_GENCRYPTO_EC_KEYEL_D] = &ecpctx->d; mpi[LWS_GENCRYPTO_EC_KEYEL_Y] = &ecpctx->Q.Y; if (lws_genec_confirm_curve_allowed_by_tls_id(curves, ecpctx->grp.id, jwk)) /* already logged */ goto bail; count = LWS_GENCRYPTO_EC_KEYEL_COUNT; n = LWS_GENCRYPTO_EC_KEYEL_X; break; default: lwsl_err("%s: key type %d not supported\n", __func__, kt); return -1; } for (; n < count; n++) { if (!mbedtls_mpi_size(mpi[n])) continue; jwk->e[n].buf = lws_malloc(mbedtls_mpi_size(mpi[n]), "certjwk"); if (!jwk->e[n].buf) goto bail; jwk->e[n].len = mbedtls_mpi_size(mpi[n]); mbedtls_mpi_write_binary(mpi[n], jwk->e[n].buf, jwk->e[n].len); } ret = 0; bail: /* jwk destroy will clean up partials */ if (ret) lws_jwk_destroy(jwk); return ret; } int lws_x509_jwk_privkey_pem(struct lws_jwk *jwk, void *pem, size_t len, const char *passphrase) { mbedtls_rsa_context *rsactx; mbedtls_ecp_keypair *ecpctx; mbedtls_pk_context pk; mbedtls_mpi *mpi[LWS_GENCRYPTO_RSA_KEYEL_COUNT]; int n, ret = -1, count = 0; mbedtls_pk_init(&pk); n = 0; if (passphrase) n = strlen(passphrase); n = mbedtls_pk_parse_key(&pk, pem, len, (uint8_t *)passphrase, n); if (n) { lwsl_err("%s: parse PEM key failed: -0x%x\n", __func__, -n); return -1; } /* the incoming private key type */ switch (mbedtls_pk_get_type(&pk)) { case MBEDTLS_PK_RSA: if (jwk->kty != LWS_GENCRYPTO_KTY_RSA) { lwsl_err("%s: RSA privkey, non-RSA jwk\n", __func__); goto bail; } rsactx = mbedtls_pk_rsa(pk); mpi[LWS_GENCRYPTO_RSA_KEYEL_D] = &rsactx->D; mpi[LWS_GENCRYPTO_RSA_KEYEL_P] = &rsactx->P; mpi[LWS_GENCRYPTO_RSA_KEYEL_Q] = &rsactx->Q; n = LWS_GENCRYPTO_RSA_KEYEL_D; count = LWS_GENCRYPTO_RSA_KEYEL_Q + 1; break; case MBEDTLS_PK_ECKEY: if (jwk->kty != LWS_GENCRYPTO_KTY_EC) { lwsl_err("%s: EC privkey, non-EC jwk\n", __func__); goto bail; } ecpctx = mbedtls_pk_ec(pk); mpi[LWS_GENCRYPTO_EC_KEYEL_D] = &ecpctx->d; n = LWS_GENCRYPTO_EC_KEYEL_D; count = n + 1; break; default: lwsl_err("%s: unusable key type %d\n", __func__, mbedtls_pk_get_type(&pk)); goto bail; } for (; n < count; n++) { if (!mbedtls_mpi_size(mpi[n])) { lwsl_err("%s: empty privkey\n", __func__); goto bail; } jwk->e[n].buf = lws_malloc(mbedtls_mpi_size(mpi[n]), "certjwk"); if (!jwk->e[n].buf) goto bail; jwk->e[n].len = mbedtls_mpi_size(mpi[n]); mbedtls_mpi_write_binary(mpi[n], jwk->e[n].buf, jwk->e[n].len); } ret = 0; bail: mbedtls_pk_free(&pk); return ret; } #endif void lws_x509_destroy(struct lws_x509_cert **x509) { if (!*x509) return; mbedtls_x509_crt_free(&(*x509)->cert); lws_free_set_NULL(*x509); } libwebsockets-3.2.1/lib/tls/openssl/000077500000000000000000000000001357643561300174255ustar00rootroot00000000000000libwebsockets-3.2.1/lib/tls/openssl/lws-genaes.c000066400000000000000000000210271357643561300216400ustar00rootroot00000000000000/* * libwebsockets - generic AES api hiding the backend * * Copyright (C) 2017 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * lws_genaes provides an AES abstraction api in lws that works the * same whether you are using openssl or mbedtls hash functions underneath. */ #include "core/private.h" #include "../../jose/private.h" /* * Care: many openssl apis return 1 for success. These are translated to the * lws convention of 0 for success. */ LWS_VISIBLE int lws_genaes_create(struct lws_genaes_ctx *ctx, enum enum_aes_operation op, enum enum_aes_modes mode, struct lws_gencrypto_keyelem *el, enum enum_aes_padding padding, void *engine) { int n = 0; ctx->ctx = EVP_CIPHER_CTX_new(); if (!ctx->ctx) return -1; ctx->mode = mode; ctx->k = el; ctx->engine = engine; ctx->init = 0; ctx->op = op; ctx->padding = padding; switch (ctx->k->len) { case 128 / 8: switch (mode) { case LWS_GAESM_KW: #if defined(LWS_HAVE_EVP_aes_128_wrap) EVP_CIPHER_CTX_set_flags(ctx->ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW); ctx->cipher = EVP_aes_128_wrap(); break; #else lwsl_err("%s: your OpenSSL lacks AES wrap apis, update it\n", __func__); return -1; #endif case LWS_GAESM_CBC: ctx->cipher = EVP_aes_128_cbc(); break; #if defined(LWS_HAVE_EVP_aes_128_cfb128) case LWS_GAESM_CFB128: ctx->cipher = EVP_aes_128_cfb128(); break; #endif #if defined(LWS_HAVE_EVP_aes_128_cfb8) case LWS_GAESM_CFB8: ctx->cipher = EVP_aes_128_cfb8(); break; #endif case LWS_GAESM_CTR: ctx->cipher = EVP_aes_128_ctr(); break; case LWS_GAESM_ECB: ctx->cipher = EVP_aes_128_ecb(); break; case LWS_GAESM_OFB: ctx->cipher = EVP_aes_128_ofb(); break; case LWS_GAESM_XTS: lwsl_err("%s: AES XTS requires double-length key\n", __func__); break; case LWS_GAESM_GCM: ctx->cipher = EVP_aes_128_gcm(); break; default: goto bail; } break; case 192 / 8: switch (mode) { case LWS_GAESM_KW: #if defined(LWS_HAVE_EVP_aes_128_wrap) EVP_CIPHER_CTX_set_flags(ctx->ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW); ctx->cipher = EVP_aes_192_wrap(); break; #else lwsl_err("%s: your OpenSSL lacks AES wrap apis, update it\n", __func__); return -1; #endif case LWS_GAESM_CBC: ctx->cipher = EVP_aes_192_cbc(); break; #if defined(LWS_HAVE_EVP_aes_192_cfb128) case LWS_GAESM_CFB128: ctx->cipher = EVP_aes_192_cfb128(); break; #endif #if defined(LWS_HAVE_EVP_aes_192_cfb8) case LWS_GAESM_CFB8: ctx->cipher = EVP_aes_192_cfb8(); break; #endif case LWS_GAESM_CTR: ctx->cipher = EVP_aes_192_ctr(); break; case LWS_GAESM_ECB: ctx->cipher = EVP_aes_192_ecb(); break; case LWS_GAESM_OFB: ctx->cipher = EVP_aes_192_ofb(); break; case LWS_GAESM_XTS: lwsl_err("%s: AES XTS 192 invalid\n", __func__); goto bail; case LWS_GAESM_GCM: ctx->cipher = EVP_aes_192_gcm(); break; default: goto bail; } break; case 256 / 8: switch (mode) { case LWS_GAESM_KW: #if defined(LWS_HAVE_EVP_aes_128_wrap) EVP_CIPHER_CTX_set_flags(ctx->ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW); ctx->cipher = EVP_aes_256_wrap(); break; #else lwsl_err("%s: your OpenSSL lacks AES wrap apis, update it\n", __func__); return -1; #endif case LWS_GAESM_CBC: ctx->cipher = EVP_aes_256_cbc(); break; #if defined(LWS_HAVE_EVP_aes_256_cfb128) case LWS_GAESM_CFB128: ctx->cipher = EVP_aes_256_cfb128(); break; #endif #if defined(LWS_HAVE_EVP_aes_256_cfb8) case LWS_GAESM_CFB8: ctx->cipher = EVP_aes_256_cfb8(); break; #endif case LWS_GAESM_CTR: ctx->cipher = EVP_aes_256_ctr(); break; case LWS_GAESM_ECB: ctx->cipher = EVP_aes_256_ecb(); break; case LWS_GAESM_OFB: ctx->cipher = EVP_aes_256_ofb(); break; #if defined(LWS_HAVE_EVP_aes_128_xts) case LWS_GAESM_XTS: ctx->cipher = EVP_aes_128_xts(); break; #endif case LWS_GAESM_GCM: ctx->cipher = EVP_aes_256_gcm(); break; default: goto bail; } break; case 512 / 8: switch (mode) { case LWS_GAESM_XTS: ctx->cipher = EVP_aes_256_xts(); break; default: goto bail; } break; default: lwsl_err("%s: unsupported AES size %d bits\n", __func__, ctx->k->len * 8); goto bail; } switch (ctx->op) { case LWS_GAESO_ENC: n = EVP_EncryptInit_ex(ctx->ctx, ctx->cipher, ctx->engine, NULL, NULL); EVP_CIPHER_CTX_set_padding(ctx->ctx, padding); break; case LWS_GAESO_DEC: n = EVP_DecryptInit_ex(ctx->ctx, ctx->cipher, ctx->engine, NULL, NULL); EVP_CIPHER_CTX_set_padding(ctx->ctx, padding); break; } if (!n) { lwsl_err("%s: cipher init failed (cipher %p)\n", __func__, ctx->cipher); lws_tls_err_describe_clear(); goto bail; } return 0; bail: EVP_CIPHER_CTX_free(ctx->ctx); ctx->ctx = NULL; return -1; } LWS_VISIBLE int lws_genaes_destroy(struct lws_genaes_ctx *ctx, unsigned char *tag, size_t tlen) { int outl = 0, n = 0; uint8_t buf[256]; if (!ctx->ctx) return 0; if (ctx->init) { switch (ctx->op) { case LWS_GAESO_ENC: if (EVP_EncryptFinal_ex(ctx->ctx, buf, &outl) != 1) { lwsl_err("%s: enc final failed\n", __func__); n = -1; } if (ctx->mode == LWS_GAESM_GCM) { if (EVP_CIPHER_CTX_ctrl(ctx->ctx, EVP_CTRL_GCM_GET_TAG, ctx->taglen, tag) != 1) { lwsl_err("get tag ctrl failed\n"); //lws_tls_err_describe_clear(); n = 1; } } break; case LWS_GAESO_DEC: if (EVP_DecryptFinal_ex(ctx->ctx, buf, &outl) != 1) { lwsl_err("%s: dec final failed\n", __func__); lws_tls_err_describe_clear(); n = -1; } break; } if (outl) lwsl_debug("%s: final len %d\n", __func__, outl); } ctx->k = NULL; EVP_CIPHER_CTX_free(ctx->ctx); ctx->ctx = NULL; return n; } LWS_VISIBLE int lws_genaes_crypt(struct lws_genaes_ctx *ctx, const uint8_t *in, size_t len, uint8_t *out, uint8_t *iv_or_nonce_ctr_or_data_unit_16, uint8_t *stream_block_16, size_t *nc_or_iv_off, int taglen) { int n = 0, outl, olen; if (!ctx->init) { EVP_CIPHER_CTX_set_key_length(ctx->ctx, ctx->k->len); if (ctx->mode == LWS_GAESM_GCM) { n = EVP_CIPHER_CTX_ctrl(ctx->ctx, EVP_CTRL_GCM_SET_IVLEN, *nc_or_iv_off, NULL); if (n != 1) { lwsl_err("%s: SET_IVLEN failed\n", __func__); return -1; } memcpy(ctx->tag, stream_block_16, taglen); ctx->taglen = taglen; } switch (ctx->op) { case LWS_GAESO_ENC: n = EVP_EncryptInit_ex(ctx->ctx, NULL, NULL, ctx->k->buf, iv_or_nonce_ctr_or_data_unit_16); break; case LWS_GAESO_DEC: if (ctx->mode == LWS_GAESM_GCM) EVP_CIPHER_CTX_ctrl(ctx->ctx, EVP_CTRL_GCM_SET_TAG, ctx->taglen, ctx->tag); n = EVP_DecryptInit_ex(ctx->ctx, NULL, NULL, ctx->k->buf, iv_or_nonce_ctr_or_data_unit_16); break; } if (!n) { lws_tls_err_describe_clear(); lwsl_err("%s: init failed (cipher %p)\n", __func__, ctx->cipher); return -1; } ctx->init = 1; } if (ctx->mode == LWS_GAESM_GCM && !out) { /* AAD */ if (!len) return 0; switch (ctx->op) { case LWS_GAESO_ENC: n = EVP_EncryptUpdate(ctx->ctx, NULL, &olen, in, len); break; case LWS_GAESO_DEC: n = EVP_DecryptUpdate(ctx->ctx, NULL, &olen, in, len); break; default: return -1; } if (n != 1) { lwsl_err("%s: set AAD failed\n", __func__); lws_tls_err_describe_clear(); lwsl_hexdump_err(in, len); return -1; } return 0; } switch (ctx->op) { case LWS_GAESO_ENC: n = EVP_EncryptUpdate(ctx->ctx, out, &outl, in, len); break; case LWS_GAESO_DEC: n = EVP_DecryptUpdate(ctx->ctx, out, &outl, in, len); break; default: return -1; } // lwsl_notice("discarding outl %d\n", (int)outl); if (!n) { lwsl_notice("%s: update failed\n", __func__); lws_tls_err_describe_clear(); return -1; } return 0; } libwebsockets-3.2.1/lib/tls/openssl/lws-gencrypto.c000066400000000000000000000037251357643561300224150ustar00rootroot00000000000000/* * libwebsockets - generic crypto api hiding the backend * * Copyright (C) 2017 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * lws-gencrypto openssl-specific common code */ #include "core/private.h" #include "tls/openssl/private.h" /* * Care: many openssl apis return 1 for success. These are translated to the * lws convention of 0 for success. */ int lws_gencrypto_openssl_hash_to_NID(enum lws_genhash_types hash_type) { int h = -1; switch (hash_type) { case LWS_GENHASH_TYPE_UNKNOWN: break; case LWS_GENHASH_TYPE_MD5: h = NID_md5; break; case LWS_GENHASH_TYPE_SHA1: h = NID_sha1; break; case LWS_GENHASH_TYPE_SHA256: h = NID_sha256; break; case LWS_GENHASH_TYPE_SHA384: h = NID_sha384; break; case LWS_GENHASH_TYPE_SHA512: h = NID_sha512; break; } return h; } const EVP_MD * lws_gencrypto_openssl_hash_to_EVP_MD(enum lws_genhash_types hash_type) { const EVP_MD *h = NULL; switch (hash_type) { case LWS_GENHASH_TYPE_UNKNOWN: break; case LWS_GENHASH_TYPE_MD5: h = EVP_md5(); break; case LWS_GENHASH_TYPE_SHA1: h = EVP_sha1(); break; case LWS_GENHASH_TYPE_SHA256: h = EVP_sha256(); break; case LWS_GENHASH_TYPE_SHA384: h = EVP_sha384(); break; case LWS_GENHASH_TYPE_SHA512: h = EVP_sha512(); break; } return h; } libwebsockets-3.2.1/lib/tls/openssl/lws-genec.c000066400000000000000000000365041357643561300214650ustar00rootroot00000000000000/* * libwebsockets - generic EC api hiding the backend - openssl implementation * * Copyright (C) 2017 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * lws_genec provides an EC abstraction api in lws that works the * same whether you are using openssl or mbedtls crypto functions underneath. */ #include "core/private.h" #include "tls/openssl/private.h" /* * Care: many openssl apis return 1 for success. These are translated to the * lws convention of 0 for success. */ #if !defined(LWS_HAVE_ECDSA_SIG_set0) static void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps) { if (pr != NULL) *pr = sig->r; if (ps != NULL) *ps = sig->s; } static int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s) { if (r == NULL || s == NULL) return 0; BN_clear_free(sig->r); BN_clear_free(sig->s); sig->r = r; sig->s = s; return 1; } #endif #if !defined(LWS_HAVE_BN_bn2binpad) int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen) { int i; BN_ULONG l; bn_check_top(a); i = BN_num_bytes(a); /* Add leading zeroes if necessary */ if (tolen > i) { memset(to, 0, tolen - i); to += tolen - i; } while (i--) { l = a->d[i / BN_BYTES]; *(to++) = (unsigned char)(l >> (8 * (i % BN_BYTES))) & 0xff; } return tolen; } #endif const struct lws_ec_curves lws_ec_curves[4] = { /* * These are the curves we are willing to use by default... * * The 3 recommended+ (P-256) and optional curves in RFC7518 7.6 * * Specific keys lengths from RFC8422 p20 */ { "P-256", NID_X9_62_prime256v1, 32 }, { "P-384", NID_secp384r1, 48 }, { "P-521", NID_secp521r1, 66 }, { NULL, 0, 0 } }; static int lws_genec_eckey_import(int nid, EVP_PKEY *pkey, struct lws_gencrypto_keyelem *el) { EC_KEY *ec = EC_KEY_new_by_curve_name(nid); BIGNUM *bn_d, *bn_x, *bn_y; int n; if (!ec) return -1; /* * EC_KEY contains * * EC_GROUP * group * EC_POINT * pub_key * BIGNUM * priv_key (ie, d) */ bn_x = BN_bin2bn(el[LWS_GENCRYPTO_EC_KEYEL_X].buf, el[LWS_GENCRYPTO_EC_KEYEL_X].len, NULL); if (!bn_x) { lwsl_err("%s: BN_bin2bn (x) fail\n", __func__); goto bail; } bn_y = BN_bin2bn(el[LWS_GENCRYPTO_EC_KEYEL_Y].buf, el[LWS_GENCRYPTO_EC_KEYEL_Y].len, NULL); if (!bn_y) { lwsl_err("%s: BN_bin2bn (y) fail\n", __func__); goto bail1; } n = EC_KEY_set_public_key_affine_coordinates(ec, bn_x, bn_y); BN_free(bn_x); BN_free(bn_y); if (n != 1) { lwsl_err("%s: EC_KEY_set_public_key_affine_coordinates fail:\n", __func__); lws_tls_err_describe_clear(); goto bail; } if (el[LWS_GENCRYPTO_EC_KEYEL_D].len) { bn_d = BN_bin2bn(el[LWS_GENCRYPTO_EC_KEYEL_D].buf, el[LWS_GENCRYPTO_EC_KEYEL_D].len, NULL); if (!bn_d) { lwsl_err("%s: BN_bin2bn (d) fail\n", __func__); goto bail; } n = EC_KEY_set_private_key(ec, bn_d); BN_clear_free(bn_d); if (n != 1) { lwsl_err("%s: EC_KEY_set_private_key fail\n", __func__); goto bail; } } /* explicitly confirm the key pieces are consistent */ if (EC_KEY_check_key(ec) != 1) { lwsl_err("%s: EC_KEY_set_private_key fail\n", __func__); goto bail; } n = EVP_PKEY_assign_EC_KEY(pkey, ec); if (n != 1) { lwsl_err("%s: EVP_PKEY_set1_EC_KEY failed\n", __func__); return -1; } return 0; bail1: BN_free(bn_x); bail: EC_KEY_free(ec); return -1; } static int lws_genec_keypair_import(struct lws_genec_ctx *ctx, const struct lws_ec_curves *curve_table, EVP_PKEY_CTX **pctx, struct lws_gencrypto_keyelem *el) { EVP_PKEY *pkey = NULL; const struct lws_ec_curves *curve; if (el[LWS_GENCRYPTO_EC_KEYEL_CRV].len < 4) return -2; curve = lws_genec_curve(curve_table, (char *)el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf); if (!curve) return -3; if ((el[LWS_GENCRYPTO_EC_KEYEL_D].len && el[LWS_GENCRYPTO_EC_KEYEL_D].len != curve->key_bytes) || el[LWS_GENCRYPTO_EC_KEYEL_X].len != curve->key_bytes || el[LWS_GENCRYPTO_EC_KEYEL_Y].len != curve->key_bytes) return -4; ctx->has_private = !!el[LWS_GENCRYPTO_EC_KEYEL_D].len; pkey = EVP_PKEY_new(); if (!pkey) return -7; if (lws_genec_eckey_import(curve->tls_lib_nid, pkey, el)) { lwsl_err("%s: lws_genec_eckey_import fail\n", __func__); goto bail; } *pctx = EVP_PKEY_CTX_new(pkey, NULL); EVP_PKEY_free(pkey); pkey = NULL; if (!*pctx) goto bail; return 0; bail: if (pkey) EVP_PKEY_free(pkey); if (*pctx) { EVP_PKEY_CTX_free(*pctx); *pctx = NULL; } return -9; } LWS_VISIBLE int lws_genecdh_create(struct lws_genec_ctx *ctx, struct lws_context *context, const struct lws_ec_curves *curve_table) { ctx->context = context; ctx->ctx[0] = NULL; ctx->ctx[1] = NULL; ctx->curve_table = curve_table; ctx->genec_alg = LEGENEC_ECDH; return 0; } LWS_VISIBLE int lws_genecdsa_create(struct lws_genec_ctx *ctx, struct lws_context *context, const struct lws_ec_curves *curve_table) { ctx->context = context; ctx->ctx[0] = NULL; ctx->ctx[1] = NULL; ctx->curve_table = curve_table; ctx->genec_alg = LEGENEC_ECDSA; return 0; } LWS_VISIBLE int lws_genecdh_set_key(struct lws_genec_ctx *ctx, struct lws_gencrypto_keyelem *el, enum enum_lws_dh_side side) { if (ctx->genec_alg != LEGENEC_ECDH) return -1; return lws_genec_keypair_import(ctx, ctx->curve_table, &ctx->ctx[side], el); } LWS_VISIBLE int lws_genecdsa_set_key(struct lws_genec_ctx *ctx, struct lws_gencrypto_keyelem *el) { if (ctx->genec_alg != LEGENEC_ECDSA) return -1; return lws_genec_keypair_import(ctx, ctx->curve_table, &ctx->ctx[0], el); } static void lws_genec_keypair_destroy(EVP_PKEY_CTX **pctx) { if (!*pctx) return; // lwsl_err("%p\n", EVP_PKEY_get1_EC_KEY(EVP_PKEY_CTX_get0_pkey(*pctx))); // EC_KEY_free(EVP_PKEY_get1_EC_KEY(EVP_PKEY_CTX_get0_pkey(*pctx))); EVP_PKEY_CTX_free(*pctx); *pctx = NULL; } LWS_VISIBLE void lws_genec_destroy(struct lws_genec_ctx *ctx) { if (ctx->ctx[0]) lws_genec_keypair_destroy(&ctx->ctx[0]); if (ctx->ctx[1]) lws_genec_keypair_destroy(&ctx->ctx[1]); } static int lws_genec_new_keypair(struct lws_genec_ctx *ctx, enum enum_lws_dh_side side, const char *curve_name, struct lws_gencrypto_keyelem *el) { const struct lws_ec_curves *curve; const EC_POINT *pubkey; EVP_PKEY *pkey = NULL; int ret = -29, n, m; BIGNUM *bn[3]; EC_KEY *ec; curve = lws_genec_curve(ctx->curve_table, curve_name); if (!curve) { lwsl_err("%s: curve '%s' not supported\n", __func__, curve_name); return -22; } ec = EC_KEY_new_by_curve_name(curve->tls_lib_nid); if (!ec) { lwsl_err("%s: unknown nid %d\n", __func__, curve->tls_lib_nid); return -23; } if (EC_KEY_generate_key(ec) != 1) { lwsl_err("%s: EC_KEY_generate_key failed\n", __func__); goto bail; } pkey = EVP_PKEY_new(); if (!pkey) goto bail; if (EVP_PKEY_set1_EC_KEY(pkey, ec) != 1) { lwsl_err("%s: EVP_PKEY_assign_EC_KEY failed\n", __func__); goto bail1; } ctx->ctx[side] = EVP_PKEY_CTX_new(pkey, NULL); if (!ctx->ctx[side]) { lwsl_err("%s: EVP_PKEY_CTX_new failed\n", __func__); goto bail1; } /* * we need to capture the individual element BIGNUMs into * lws_gencrypto_keyelem, so they can be serialized, used in jwk etc */ pubkey = EC_KEY_get0_public_key(ec); if (!pubkey) { lwsl_err("%s: EC_KEY_get0_public_key failed\n", __func__); goto bail1; } bn[0] = BN_new(); bn[1] = (BIGNUM *)EC_KEY_get0_private_key(ec); bn[2] = BN_new(); #if defined(LWS_HAVE_EC_POINT_get_affine_coordinates) if (EC_POINT_get_affine_coordinates(EC_KEY_get0_group(ec), #else if (EC_POINT_get_affine_coordinates_GFp(EC_KEY_get0_group(ec), #endif pubkey, bn[0], bn[2], NULL) != 1) { lwsl_err("%s: EC_POINT_get_affine_coordinates_GFp failed\n", __func__); goto bail2; } el[LWS_GENCRYPTO_EC_KEYEL_CRV].len = strlen(curve_name) + 1; el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf = lws_malloc(el[LWS_GENCRYPTO_EC_KEYEL_CRV].len, "ec"); if (!el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf) { lwsl_err("%s: OOM\n", __func__); goto bail2; } strcpy((char *)el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf, curve_name); for (n = LWS_GENCRYPTO_EC_KEYEL_X; n < LWS_GENCRYPTO_EC_KEYEL_COUNT; n++) { el[n].len = curve->key_bytes; el[n].buf = lws_malloc(curve->key_bytes, "ec"); if (!el[n].buf) goto bail2; m = BN_bn2binpad(bn[n - 1], el[n].buf, el[n].len); if ((uint32_t)m != el[n].len) goto bail2; } ctx->has_private = 1; ret = 0; bail2: BN_clear_free(bn[0]); BN_clear_free(bn[2]); bail1: EVP_PKEY_free(pkey); bail: EC_KEY_free(ec); return ret; } LWS_VISIBLE int lws_genecdh_new_keypair(struct lws_genec_ctx *ctx, enum enum_lws_dh_side side, const char *curve_name, struct lws_gencrypto_keyelem *el) { if (ctx->genec_alg != LEGENEC_ECDH) return -1; return lws_genec_new_keypair(ctx, side, curve_name, el); } LWS_VISIBLE int lws_genecdsa_new_keypair(struct lws_genec_ctx *ctx, const char *curve_name, struct lws_gencrypto_keyelem *el) { if (ctx->genec_alg != LEGENEC_ECDSA) return -1; return lws_genec_new_keypair(ctx, LDHS_OURS, curve_name, el); } #if 0 LWS_VISIBLE LWS_EXTERN int lws_genecdsa_hash_sign(struct lws_genec_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, uint8_t *sig, size_t sig_len) { const EVP_MD *md = lws_gencrypto_openssl_hash_to_EVP_MD(hash_type); EVP_MD_CTX *mdctx = NULL; if (ctx->genec_alg != LEGENEC_ECDSA) return -1; if (!md) return -1; mdctx = EVP_MD_CTX_create(); if (!mdctx) goto bail; if (EVP_DigestSignInit(mdctx, NULL, md, NULL, EVP_PKEY_CTX_get0_pkey(ctx->ctx))) { lwsl_err("%s: EVP_DigestSignInit failed\n", __func__); goto bail; } if (EVP_DigestSignUpdate(mdctx, in, EVP_MD_size(md))) { lwsl_err("%s: EVP_DigestSignUpdate failed\n", __func__); goto bail; } if (EVP_DigestSignFinal(mdctx, sig, &sig_len)) { lwsl_err("%s: EVP_DigestSignFinal failed\n", __func__); goto bail; } EVP_MD_CTX_free(mdctx); return (int)sig_len; bail: if (mdctx) EVP_MD_CTX_free(mdctx); return -1; } #endif LWS_VISIBLE LWS_EXTERN int lws_genecdsa_hash_sign_jws(struct lws_genec_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, int keybits, uint8_t *sig, size_t sig_len) { int ret = -1, n, keybytes = lws_gencrypto_bits_to_bytes(keybits); const BIGNUM *r = NULL, *s = NULL; ECDSA_SIG *ecdsasig; EC_KEY *eckey; if (ctx->genec_alg != LEGENEC_ECDSA) { lwsl_notice("%s: ctx alg %d\n", __func__, ctx->genec_alg); return -1; } if (!ctx->has_private) return -1; if ((int)sig_len < keybytes * 2) { lwsl_notice("%s: sig buff %d < %d\n", __func__, (int)sig_len, keybytes * 2); return -1; } eckey = EVP_PKEY_get1_EC_KEY(EVP_PKEY_CTX_get0_pkey(ctx->ctx[0])); /* * The ECDSA P-256 SHA-256 digital signature is generated as follows: * * 1. Generate a digital signature of the JWS Signing Input using ECDSA * P-256 SHA-256 with the desired private key. The output will be * the pair (R, S), where R and S are 256-bit unsigned integers. * * 2. Turn R and S into octet sequences in big-endian order, with each * array being be 32 octets long. The octet sequence * representations MUST NOT be shortened to omit any leading zero * octets contained in the values. * * 3. Concatenate the two octet sequences in the order R and then S. * (Note that many ECDSA implementations will directly produce this * concatenation as their output.) * * 4. The resulting 64-octet sequence is the JWS Signature value. */ ecdsasig = ECDSA_do_sign(in, lws_genhash_size(hash_type), eckey); EC_KEY_free(eckey); if (!ecdsasig) { lwsl_notice("%s: ECDSA_do_sign fail\n", __func__); goto bail; } ECDSA_SIG_get0(ecdsasig, &r, &s); /* * in the 521-bit case, we have to pad the last byte as it only * generates 65 bytes */ n = BN_bn2binpad(r, sig, keybytes); if (n != keybytes) { lwsl_notice("%s: bignum r fail %d %d\n", __func__, n, keybytes); goto bail; } n = BN_bn2binpad(s, sig + keybytes, keybytes); if (n != keybytes) { lwsl_notice("%s: bignum s fail %d %d\n", __func__, n, keybytes); goto bail; } ret = 0; bail: if (ecdsasig) ECDSA_SIG_free(ecdsasig); return ret; } /* in is the JWS Signing Input hash */ LWS_VISIBLE LWS_EXTERN int lws_genecdsa_hash_sig_verify_jws(struct lws_genec_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, int keybits, const uint8_t *sig, size_t sig_len) { int ret = -1, n, keybytes = lws_gencrypto_bits_to_bytes(keybits), hlen = lws_genhash_size(hash_type); ECDSA_SIG *ecsig = ECDSA_SIG_new(); BIGNUM *r = NULL, *s = NULL; EC_KEY *eckey; if (!ecsig) return -1; if (ctx->genec_alg != LEGENEC_ECDSA) goto bail; if ((int)sig_len != keybytes * 2) { lwsl_err("%s: sig buf too small %d vs %d\n", __func__, (int)sig_len, keybytes * 2); goto bail; } /* * 1. The JWS Signature value MUST be a 64-octet sequence. If it is * not a 64-octet sequence, the validation has failed. * * 2. Split the 64-octet sequence into two 32-octet sequences. The * first octet sequence represents R and the second S. The values R * and S are represented as octet sequences using the Integer-to- * OctetString Conversion defined in Section 2.3.7 of SEC1 [SEC1] * (in big-endian octet order). * * 3. Submit the JWS Signing Input, R, S, and the public key (x, y) to * the ECDSA P-256 SHA-256 validator. */ r = BN_bin2bn(sig, keybytes, NULL); if (!r) { lwsl_err("%s: BN_bin2bn (r) fail\n", __func__); goto bail; } s = BN_bin2bn(sig + keybytes, keybytes, NULL); if (!s) { lwsl_err("%s: BN_bin2bn (s) fail\n", __func__); goto bail1; } if (ECDSA_SIG_set0(ecsig, r, s) != 1) { lwsl_err("%s: ECDSA_SIG_set0 fail\n", __func__); goto bail1; } eckey = EVP_PKEY_get1_EC_KEY(EVP_PKEY_CTX_get0_pkey(ctx->ctx[0])); n = ECDSA_do_verify(in, hlen, ecsig, eckey); EC_KEY_free(eckey); if (n != 1) { lwsl_err("%s: ECDSA_do_verify fail\n", __func__); lws_tls_err_describe_clear(); goto bail; } ret = 0; goto bail; bail1: if (r) BN_free(r); if (s) BN_free(s); bail: ECDSA_SIG_free(ecsig); return ret; } int lws_genecdh_compute_shared_secret(struct lws_genec_ctx *ctx, uint8_t *ss, int *ss_len) { int len, ret = -1; EC_KEY *eckey[2]; if (!ctx->ctx[LDHS_OURS] || !ctx->ctx[LDHS_THEIRS]) { lwsl_err("%s: both sides must be set up\n", __func__); return -1; } eckey[LDHS_OURS] = EVP_PKEY_get1_EC_KEY( EVP_PKEY_CTX_get0_pkey(ctx->ctx[LDHS_OURS])); eckey[LDHS_THEIRS] = EVP_PKEY_get1_EC_KEY( EVP_PKEY_CTX_get0_pkey(ctx->ctx[LDHS_THEIRS])); len = (EC_GROUP_get_degree(EC_KEY_get0_group(eckey[LDHS_OURS])) + 7) / 8; if (len <= *ss_len) { *ss_len = ECDH_compute_key(ss, len, EC_KEY_get0_public_key(eckey[LDHS_THEIRS]), eckey[LDHS_OURS], NULL); ret = -(*ss_len < 0); } EC_KEY_free(eckey[LDHS_OURS]); EC_KEY_free(eckey[LDHS_THEIRS]); return ret; } libwebsockets-3.2.1/lib/tls/openssl/lws-genhash.c000066400000000000000000000073351357643561300220210ustar00rootroot00000000000000/* * libwebsockets - generic hash and HMAC api hiding the backend * * Copyright (C) 2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * lws_genhash provides a hash / hmac abstraction api in lws that works the * same whether you are using openssl or mbedtls hash functions underneath. */ #include "libwebsockets.h" #include /* * Care: many openssl apis return 1 for success. These are translated to the * lws convention of 0 for success. */ int lws_genhash_init(struct lws_genhash_ctx *ctx, enum lws_genhash_types type) { ctx->type = type; ctx->mdctx = EVP_MD_CTX_create(); if (!ctx->mdctx) return 1; switch (ctx->type) { case LWS_GENHASH_TYPE_MD5: ctx->evp_type = EVP_md5(); break; case LWS_GENHASH_TYPE_SHA1: ctx->evp_type = EVP_sha1(); break; case LWS_GENHASH_TYPE_SHA256: ctx->evp_type = EVP_sha256(); break; case LWS_GENHASH_TYPE_SHA384: ctx->evp_type = EVP_sha384(); break; case LWS_GENHASH_TYPE_SHA512: ctx->evp_type = EVP_sha512(); break; default: return 1; } if (EVP_DigestInit_ex(ctx->mdctx, ctx->evp_type, NULL) != 1) { EVP_MD_CTX_destroy(ctx->mdctx); return 1; } return 0; } int lws_genhash_update(struct lws_genhash_ctx *ctx, const void *in, size_t len) { if (!len) return 0; return EVP_DigestUpdate(ctx->mdctx, in, len) != 1; } int lws_genhash_destroy(struct lws_genhash_ctx *ctx, void *result) { unsigned int len; int ret = 0; if (result) ret = EVP_DigestFinal_ex(ctx->mdctx, result, &len) != 1; (void)len; EVP_MD_CTX_destroy(ctx->mdctx); return ret; } int lws_genhmac_init(struct lws_genhmac_ctx *ctx, enum lws_genhmac_types type, const uint8_t *key, size_t key_len) { #if defined(LWS_HAVE_HMAC_CTX_new) ctx->ctx = HMAC_CTX_new(); if (!ctx->ctx) return -1; #else HMAC_CTX_init(&ctx->ctx); #endif ctx->evp_type = 0; /* coverity unable to see we set this or fail */ switch (type) { case LWS_GENHMAC_TYPE_SHA256: ctx->evp_type = EVP_sha256(); break; case LWS_GENHMAC_TYPE_SHA384: ctx->evp_type = EVP_sha384(); break; case LWS_GENHMAC_TYPE_SHA512: ctx->evp_type = EVP_sha512(); break; default: lwsl_err("%s: unknown HMAC type %d\n", __func__, type); goto bail; } #if defined(LWS_HAVE_HMAC_CTX_new) if (HMAC_Init_ex(ctx->ctx, key, key_len, ctx->evp_type, NULL) != 1) #else if (HMAC_Init_ex(&ctx->ctx, key, key_len, ctx->evp_type, NULL) != 1) #endif goto bail; return 0; bail: #if defined(LWS_HAVE_HMAC_CTX_new) HMAC_CTX_free(ctx->ctx); #endif return -1; } int lws_genhmac_update(struct lws_genhmac_ctx *ctx, const void *in, size_t len) { #if defined(LWS_HAVE_HMAC_CTX_new) if (HMAC_Update(ctx->ctx, in, len) != 1) #else if (HMAC_Update(&ctx->ctx, in, len) != 1) #endif return -1; return 0; } int lws_genhmac_destroy(struct lws_genhmac_ctx *ctx, void *result) { unsigned int size = lws_genhmac_size(ctx->type); #if defined(LWS_HAVE_HMAC_CTX_new) int n = HMAC_Final(ctx->ctx, result, &size); HMAC_CTX_free(ctx->ctx); #else int n = HMAC_Final(&ctx->ctx, result, &size); #endif if (n != 1) return -1; return 0; } libwebsockets-3.2.1/lib/tls/openssl/lws-genrsa.c000066400000000000000000000217311357643561300216570ustar00rootroot00000000000000/* * libwebsockets - generic RSA api hiding the backend * * Copyright (C) 2017 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * lws_genrsa provides an RSA abstraction api in lws that works the * same whether you are using openssl or mbedtls crypto functions underneath. */ #include "core/private.h" #include "tls/openssl/private.h" /* * Care: many openssl apis return 1 for success. These are translated to the * lws convention of 0 for success. */ LWS_VISIBLE void lws_genrsa_destroy_elements(struct lws_gencrypto_keyelem *el) { lws_gencrypto_destroy_elements(el, LWS_GENCRYPTO_RSA_KEYEL_COUNT); } static int mode_map_crypt[] = { RSA_PKCS1_PADDING, RSA_PKCS1_OAEP_PADDING }, mode_map_sig[] = { RSA_PKCS1_PADDING, RSA_PKCS1_PSS_PADDING }; static int rsa_pkey_wrap(struct lws_genrsa_ctx *ctx, RSA *rsa) { EVP_PKEY *pkey; /* we have the RSA object filled up... wrap in a PKEY */ pkey = EVP_PKEY_new(); if (!pkey) return 1; /* bind the PKEY to the RSA key we just prepared */ if (EVP_PKEY_assign_RSA(pkey, rsa) != 1) { lwsl_err("%s: EVP_PKEY_assign_RSA_KEY failed\n", __func__); goto bail; } /* pepare our PKEY_CTX with the PKEY */ ctx->ctx = EVP_PKEY_CTX_new(pkey, NULL); EVP_PKEY_free(pkey); pkey = NULL; if (!ctx->ctx) goto bail; return 0; bail: if (pkey) EVP_PKEY_free(pkey); return 1; } LWS_VISIBLE int lws_genrsa_create(struct lws_genrsa_ctx *ctx, struct lws_gencrypto_keyelem *el, struct lws_context *context, enum enum_genrsa_mode mode, enum lws_genhash_types oaep_hashid) { int n; memset(ctx, 0, sizeof(*ctx)); ctx->context = context; ctx->mode = mode; /* Step 1: * * convert the MPI for e and n to OpenSSL BIGNUMs */ for (n = 0; n < 5; n++) { ctx->bn[n] = BN_bin2bn(el[n].buf, el[n].len, NULL); if (!ctx->bn[n]) { lwsl_notice("mpi load failed\n"); goto bail; } } /* Step 2: * * assemble the OpenSSL RSA from the BIGNUMs */ ctx->rsa = RSA_new(); if (!ctx->rsa) { lwsl_notice("Failed to create RSA\n"); goto bail; } #if defined(LWS_HAVE_RSA_SET0_KEY) if (RSA_set0_key(ctx->rsa, ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_N], ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_E], ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_D]) != 1) { lwsl_notice("RSA_set0_key failed\n"); goto bail; } RSA_set0_factors(ctx->rsa, ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_P], ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_Q]); #else ctx->rsa->e = ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_E]; ctx->rsa->n = ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_N]; ctx->rsa->d = ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_D]; ctx->rsa->p = ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_P]; ctx->rsa->q = ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_Q]; #endif if (!rsa_pkey_wrap(ctx, ctx->rsa)) return 0; bail: for (n = 0; n < 5; n++) if (ctx->bn[n]) { BN_clear_free(ctx->bn[n]); ctx->bn[n] = NULL; } if (ctx->rsa) { RSA_free(ctx->rsa); ctx->rsa = NULL; } return 1; } LWS_VISIBLE int lws_genrsa_new_keypair(struct lws_context *context, struct lws_genrsa_ctx *ctx, enum enum_genrsa_mode mode, struct lws_gencrypto_keyelem *el, int bits) { BIGNUM *bn; int n; memset(ctx, 0, sizeof(*ctx)); ctx->context = context; ctx->mode = mode; ctx->rsa = RSA_new(); if (!ctx->rsa) { lwsl_notice("Failed to create RSA\n"); return -1; } bn = BN_new(); if (!bn) goto cleanup_1; if (BN_set_word(bn, RSA_F4) != 1) { BN_free(bn); goto cleanup_1; } n = RSA_generate_key_ex(ctx->rsa, bits, bn, NULL); BN_clear_free(bn); if (n != 1) goto cleanup_1; #if defined(LWS_HAVE_RSA_SET0_KEY) { const BIGNUM *mpi[5]; RSA_get0_key(ctx->rsa, &mpi[LWS_GENCRYPTO_RSA_KEYEL_N], &mpi[LWS_GENCRYPTO_RSA_KEYEL_E], &mpi[LWS_GENCRYPTO_RSA_KEYEL_D]); RSA_get0_factors(ctx->rsa, &mpi[LWS_GENCRYPTO_RSA_KEYEL_P], &mpi[LWS_GENCRYPTO_RSA_KEYEL_Q]); #else { BIGNUM *mpi[5] = { ctx->rsa->e, ctx->rsa->n, ctx->rsa->d, ctx->rsa->p, ctx->rsa->q, }; #endif for (n = 0; n < 5; n++) if (BN_num_bytes(mpi[n])) { el[n].buf = lws_malloc( BN_num_bytes(mpi[n]), "genrsakey"); if (!el[n].buf) goto cleanup; el[n].len = BN_num_bytes(mpi[n]); BN_bn2bin(mpi[n], el[n].buf); } } if (!rsa_pkey_wrap(ctx, ctx->rsa)) return 0; cleanup: for (n = 0; n < LWS_GENCRYPTO_RSA_KEYEL_COUNT; n++) if (el[n].buf) lws_free_set_NULL(el[n].buf); cleanup_1: RSA_free(ctx->rsa); ctx->rsa = NULL; return -1; } /* * in_len must be less than RSA_size(rsa) - 11 for the PKCS #1 v1.5 * based padding modes */ LWS_VISIBLE int lws_genrsa_public_encrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out) { int n = RSA_public_encrypt((int)in_len, in, out, ctx->rsa, mode_map_crypt[ctx->mode]); if (n < 0) { lwsl_err("%s: RSA_public_encrypt failed\n", __func__); lws_tls_err_describe_clear(); return -1; } return n; } LWS_VISIBLE int lws_genrsa_private_encrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out) { int n = RSA_private_encrypt((int)in_len, in, out, ctx->rsa, mode_map_crypt[ctx->mode]); if (n < 0) { lwsl_err("%s: RSA_private_encrypt failed\n", __func__); lws_tls_err_describe_clear(); return -1; } return n; } LWS_VISIBLE int lws_genrsa_public_decrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out, size_t out_max) { int n = RSA_public_decrypt((int)in_len, in, out, ctx->rsa, mode_map_crypt[ctx->mode]); if (n < 0) { lwsl_err("%s: RSA_public_decrypt failed\n", __func__); return -1; } return n; } LWS_VISIBLE int lws_genrsa_private_decrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out, size_t out_max) { int n = RSA_private_decrypt((int)in_len, in, out, ctx->rsa, mode_map_crypt[ctx->mode]); if (n < 0) { lwsl_err("%s: RSA_private_decrypt failed\n", __func__); lws_tls_err_describe_clear(); return -1; } return n; } LWS_VISIBLE int lws_genrsa_hash_sig_verify(struct lws_genrsa_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, const uint8_t *sig, size_t sig_len) { int n = lws_gencrypto_openssl_hash_to_NID(hash_type), h = (int)lws_genhash_size(hash_type); const EVP_MD *md = NULL; if (n < 0) return -1; switch(ctx->mode) { case LGRSAM_PKCS1_1_5: n = RSA_verify(n, in, h, (uint8_t *)sig, (int)sig_len, ctx->rsa); break; case LGRSAM_PKCS1_OAEP_PSS: md = lws_gencrypto_openssl_hash_to_EVP_MD(hash_type); if (!md) return -1; #if defined(LWS_HAVE_RSA_verify_pss_mgf1) n = RSA_verify_pss_mgf1(ctx->rsa, in, h, md, NULL, -1, (uint8_t *)sig, #else n = RSA_verify_PKCS1_PSS(ctx->rsa, in, md, (uint8_t *)sig, #endif (int)sig_len); break; default: return -1; } if (n != 1) { lwsl_notice("%s: fail\n", __func__); lws_tls_err_describe_clear(); return -1; } return 0; } LWS_VISIBLE int lws_genrsa_hash_sign(struct lws_genrsa_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, uint8_t *sig, size_t sig_len) { int n = lws_gencrypto_openssl_hash_to_NID(hash_type), h = (int)lws_genhash_size(hash_type); unsigned int used = 0; EVP_MD_CTX *mdctx = NULL; const EVP_MD *md = NULL; if (n < 0) return -1; switch(ctx->mode) { case LGRSAM_PKCS1_1_5: if (RSA_sign(n, in, h, sig, &used, ctx->rsa) != 1) { lwsl_err("%s: RSA_sign failed\n", __func__); goto bail; } break; case LGRSAM_PKCS1_OAEP_PSS: md = lws_gencrypto_openssl_hash_to_EVP_MD(hash_type); if (!md) return -1; if (EVP_PKEY_CTX_set_rsa_padding(ctx->ctx, mode_map_sig[ctx->mode]) != 1) { lwsl_err("%s: set_rsa_padding failed\n", __func__); goto bail; } mdctx = EVP_MD_CTX_create(); if (!mdctx) goto bail; if (EVP_DigestSignInit(mdctx, NULL, md, NULL, EVP_PKEY_CTX_get0_pkey(ctx->ctx))) { lwsl_err("%s: EVP_DigestSignInit failed\n", __func__); goto bail; } if (EVP_DigestSignUpdate(mdctx, in, EVP_MD_size(md))) { lwsl_err("%s: EVP_DigestSignUpdate failed\n", __func__); goto bail; } if (EVP_DigestSignFinal(mdctx, sig, &sig_len)) { lwsl_err("%s: EVP_DigestSignFinal failed\n", __func__); goto bail; } EVP_MD_CTX_free(mdctx); used = (int)sig_len; break; default: return -1; } return used; bail: if (mdctx) EVP_MD_CTX_free(mdctx); return -1; } LWS_VISIBLE void lws_genrsa_destroy(struct lws_genrsa_ctx *ctx) { if (!ctx->ctx) return; EVP_PKEY_CTX_free(ctx->ctx); ctx->ctx = NULL; ctx->rsa = NULL; } libwebsockets-3.2.1/lib/tls/openssl/openssl-client.c000066400000000000000000000456061357643561300225430ustar00rootroot00000000000000/* * libwebsockets - openSSL-specific client tls code * * Copyright (C) 2010-2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "tls/openssl/private.h" /* * Care: many openssl apis return 1 for success. These are translated to the * lws convention of 0 for success. */ int lws_openssl_describe_cipher(struct lws *wsi); extern int openssl_websocket_private_data_index, openssl_SSL_CTX_private_data_index; #if !defined(USE_WOLFSSL) static int OpenSSL_client_verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) { SSL *ssl; int n; struct lws *wsi; /* keep old behaviour accepting self-signed server certs */ if (!preverify_ok) { int err = X509_STORE_CTX_get_error(x509_ctx); if (err != X509_V_OK) { ssl = X509_STORE_CTX_get_ex_data(x509_ctx, SSL_get_ex_data_X509_STORE_CTX_idx()); wsi = SSL_get_ex_data(ssl, openssl_websocket_private_data_index); if (!wsi) { lwsl_err("%s: can't get wsi from ssl privdata\n", __func__); return 0; } if ((err == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT || err == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN) && wsi->tls.use_ssl & LCCSCF_ALLOW_SELFSIGNED) { lwsl_notice("accepting self-signed " "certificate (verify_callback)\n"); X509_STORE_CTX_set_error(x509_ctx, X509_V_OK); return 1; // ok } else if ((err == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY || err == X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE) && wsi->tls.use_ssl & LCCSCF_ALLOW_INSECURE) { lwsl_notice("accepting non-trusted certificate\n"); X509_STORE_CTX_set_error(x509_ctx, X509_V_OK); return 1; /* ok */ } else if ((err == X509_V_ERR_CERT_NOT_YET_VALID || err == X509_V_ERR_CERT_HAS_EXPIRED) && wsi->tls.use_ssl & LCCSCF_ALLOW_EXPIRED) { if (err == X509_V_ERR_CERT_NOT_YET_VALID) lwsl_notice("accepting not yet valid " "certificate (verify_" "callback)\n"); else if (err == X509_V_ERR_CERT_HAS_EXPIRED) lwsl_notice("accepting expired " "certificate (verify_" "callback)\n"); X509_STORE_CTX_set_error(x509_ctx, X509_V_OK); return 1; // ok } } } ssl = X509_STORE_CTX_get_ex_data(x509_ctx, SSL_get_ex_data_X509_STORE_CTX_idx()); wsi = SSL_get_ex_data(ssl, openssl_websocket_private_data_index); if (!wsi) { lwsl_err("%s: can't get wsi from ssl privdata\n", __func__); return 0; } n = lws_get_context_protocol(wsi->context, 0).callback(wsi, LWS_CALLBACK_OPENSSL_PERFORM_SERVER_CERT_VERIFICATION, x509_ctx, ssl, preverify_ok); /* keep old behaviour if something wrong with server certs */ /* if ssl error is overruled in callback and cert is ok, * X509_STORE_CTX_set_error(x509_ctx, X509_V_OK); must be set and * return value is 0 from callback */ if (!preverify_ok) { int err = X509_STORE_CTX_get_error(x509_ctx); if (err != X509_V_OK) { /* cert validation error was not handled in callback */ int depth = X509_STORE_CTX_get_error_depth(x509_ctx); const char *msg = X509_verify_cert_error_string(err); lwsl_err("SSL error: %s (preverify_ok=%d;err=%d;" "depth=%d)\n", msg, preverify_ok, err, depth); return preverify_ok; // not ok } } /* * convert callback return code from 0 = OK to verify callback * return value 1 = OK */ return !n; } #endif int lws_ssl_client_bio_create(struct lws *wsi) { char hostname[128], *p; #if defined(LWS_HAVE_SSL_set_alpn_protos) && \ defined(LWS_HAVE_SSL_get0_alpn_selected) uint8_t openssl_alpn[40]; const char *alpn_comma = wsi->context->tls.alpn_default; int n; #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) if (lws_hdr_copy(wsi, hostname, sizeof(hostname), _WSI_TOKEN_CLIENT_HOST) <= 0) #endif { lwsl_err("%s: Unable to get hostname\n", __func__); return -1; } /* * remove any :port part on the hostname... necessary for network * connection but typical certificates do not contain it */ p = hostname; while (*p) { if (*p == ':') { *p = '\0'; break; } p++; } wsi->tls.ssl = SSL_new(wsi->vhost->tls.ssl_client_ctx); if (!wsi->tls.ssl) { lwsl_err("SSL_new failed: %s\n", ERR_error_string(lws_ssl_get_error(wsi, 0), NULL)); lws_tls_err_describe_clear(); return -1; } #if defined (LWS_HAVE_SSL_SET_INFO_CALLBACK) if (wsi->vhost->tls.ssl_info_event_mask) SSL_set_info_callback(wsi->tls.ssl, lws_ssl_info_callback); #endif #if defined LWS_HAVE_X509_VERIFY_PARAM_set1_host if (!(wsi->tls.use_ssl & LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK)) { X509_VERIFY_PARAM *param = SSL_get0_param(wsi->tls.ssl); /* Enable automatic hostname checks */ X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS); // Handle the case where the hostname is an IP address. if (!X509_VERIFY_PARAM_set1_ip_asc(param, hostname)) X509_VERIFY_PARAM_set1_host(param, hostname, 0); } #endif #if !defined(USE_WOLFSSL) #ifndef USE_OLD_CYASSL /* OpenSSL_client_verify_callback will be called @ SSL_connect() */ SSL_set_verify(wsi->tls.ssl, SSL_VERIFY_PEER, OpenSSL_client_verify_callback); #endif #endif #if !defined(USE_WOLFSSL) SSL_set_mode(wsi->tls.ssl, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER); #endif /* * use server name indication (SNI), if supported, * when establishing connection */ #ifdef USE_WOLFSSL #ifdef USE_OLD_CYASSL #ifdef CYASSL_SNI_HOST_NAME CyaSSL_UseSNI(wsi->tls.ssl, CYASSL_SNI_HOST_NAME, hostname, strlen(hostname)); #endif #else #ifdef WOLFSSL_SNI_HOST_NAME wolfSSL_UseSNI(wsi->tls.ssl, WOLFSSL_SNI_HOST_NAME, hostname, strlen(hostname)); #endif #endif #else #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME SSL_set_tlsext_host_name(wsi->tls.ssl, hostname); #endif #endif #ifdef USE_WOLFSSL /* * wolfSSL/CyaSSL does certificate verification differently * from OpenSSL. * If we should ignore the certificate, we need to set * this before SSL_new and SSL_connect is called. * Otherwise the connect will simply fail with error code -155 */ #ifdef USE_OLD_CYASSL if (wsi->tls.use_ssl == 2) CyaSSL_set_verify(wsi->tls.ssl, SSL_VERIFY_NONE, NULL); #else if (wsi->tls.use_ssl == 2) wolfSSL_set_verify(wsi->tls.ssl, SSL_VERIFY_NONE, NULL); #endif #endif /* USE_WOLFSSL */ wsi->tls.client_bio = BIO_new_socket((int)(long long)wsi->desc.sockfd, BIO_NOCLOSE); SSL_set_bio(wsi->tls.ssl, wsi->tls.client_bio, wsi->tls.client_bio); #ifdef USE_WOLFSSL #ifdef USE_OLD_CYASSL CyaSSL_set_using_nonblock(wsi->tls.ssl, 1); #else wolfSSL_set_using_nonblock(wsi->tls.ssl, 1); #endif #else BIO_set_nbio(wsi->tls.client_bio, 1); /* nonblocking */ #endif #if defined(LWS_HAVE_SSL_set_alpn_protos) && \ defined(LWS_HAVE_SSL_get0_alpn_selected) if (wsi->vhost->tls.alpn) alpn_comma = wsi->vhost->tls.alpn; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) if (lws_hdr_copy(wsi, hostname, sizeof(hostname), _WSI_TOKEN_CLIENT_ALPN) > 0) alpn_comma = hostname; #endif lwsl_info("client conn using alpn list '%s'\n", alpn_comma); n = lws_alpn_comma_to_openssl(alpn_comma, openssl_alpn, sizeof(openssl_alpn) - 1); SSL_set_alpn_protos(wsi->tls.ssl, openssl_alpn, n); #endif SSL_set_ex_data(wsi->tls.ssl, openssl_websocket_private_data_index, wsi); return 0; } enum lws_ssl_capable_status lws_tls_client_connect(struct lws *wsi) { #if defined(LWS_HAVE_SSL_set_alpn_protos) && \ defined(LWS_HAVE_SSL_get0_alpn_selected) const unsigned char *prot; char a[32]; unsigned int len; #endif int m, n; errno = 0; ERR_clear_error(); n = SSL_connect(wsi->tls.ssl); if (n == 1) { #if defined(LWS_HAVE_SSL_set_alpn_protos) && \ defined(LWS_HAVE_SSL_get0_alpn_selected) SSL_get0_alpn_selected(wsi->tls.ssl, &prot, &len); if (len >= sizeof(a)) len = sizeof(a) - 1; memcpy(a, (const char *)prot, len); a[len] = '\0'; lws_role_call_alpn_negotiated(wsi, (const char *)a); #endif lwsl_info("client connect OK\n"); lws_openssl_describe_cipher(wsi); return LWS_SSL_CAPABLE_DONE; } m = lws_ssl_get_error(wsi, n); if (m == SSL_ERROR_SYSCALL) return LWS_SSL_CAPABLE_ERROR; if (m == SSL_ERROR_WANT_READ || SSL_want_read(wsi->tls.ssl)) return LWS_SSL_CAPABLE_MORE_SERVICE_READ; if (m == SSL_ERROR_WANT_WRITE || SSL_want_write(wsi->tls.ssl)) return LWS_SSL_CAPABLE_MORE_SERVICE_WRITE; if (!n) /* we don't know what he wants, but he says to retry */ return LWS_SSL_CAPABLE_MORE_SERVICE; return LWS_SSL_CAPABLE_ERROR; } int lws_tls_client_confirm_peer_cert(struct lws *wsi, char *ebuf, int ebuf_len) { #if !defined(USE_WOLFSSL) struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; char *p = (char *)&pt->serv_buf[0]; char *sb = p; int n; lws_latency_pre(wsi->context, wsi); errno = 0; ERR_clear_error(); n = SSL_get_verify_result(wsi->tls.ssl); lws_latency(wsi->context, wsi, "SSL_get_verify_result LWS_CONNMODE..HANDSHAKE", n, n > 0); lwsl_debug("get_verify says %d\n", n); if (n == X509_V_OK) return 0; if ((n == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT || n == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN) && (wsi->tls.use_ssl & LCCSCF_ALLOW_SELFSIGNED)) { lwsl_info("accepting self-signed certificate\n"); return 0; } if ((n == X509_V_ERR_CERT_NOT_YET_VALID || n == X509_V_ERR_CERT_HAS_EXPIRED) && (wsi->tls.use_ssl & LCCSCF_ALLOW_EXPIRED)) { lwsl_info("accepting expired certificate\n"); return 0; } if (n == X509_V_ERR_CERT_NOT_YET_VALID) { lwsl_info("Cert is from the future... " "probably our clock... accepting...\n"); return 0; } lws_snprintf(ebuf, ebuf_len, "server's cert didn't look good, X509_V_ERR = %d: %s\n", n, ERR_error_string(n, sb)); lwsl_info("%s\n", ebuf); lws_tls_err_describe_clear(); return -1; #else /* USE_WOLFSSL */ return 0; #endif } int lws_tls_client_create_vhost_context(struct lws_vhost *vh, const struct lws_context_creation_info *info, const char *cipher_list, const char *ca_filepath, const void *ca_mem, unsigned int ca_mem_len, const char *cert_filepath, const void *cert_mem, unsigned int cert_mem_len, const char *private_key_filepath) { struct lws_tls_client_reuse *tcr; const unsigned char *ca_mem_ptr; X509_STORE *x509_store; unsigned long error; SSL_METHOD *method; EVP_MD_CTX *mdctx; unsigned int len; uint8_t hash[32]; X509 *client_CA; char c; int n; /* basic openssl init already happened in context init */ /* choose the most recent spin of the api */ #if defined(LWS_HAVE_TLS_CLIENT_METHOD) method = (SSL_METHOD *)TLS_client_method(); #elif defined(LWS_HAVE_TLSV1_2_CLIENT_METHOD) method = (SSL_METHOD *)TLSv1_2_client_method(); #else method = (SSL_METHOD *)SSLv23_client_method(); #endif if (!method) { error = ERR_get_error(); lwsl_err("problem creating ssl method %lu: %s\n", error, ERR_error_string(error, (char *)vh->context->pt[0].serv_buf)); return 1; } /* * OpenSSL client contexts are quite expensive, because they bring in * the system certificate bundle for each one. So if you have multiple * vhosts, each with a client context, it can add up to several * megabytes of heap. In the case the client contexts are configured * identically, they could perfectly well have shared just the one. * * For that reason, use a hash to fingerprint the context configuration * and prefer to reuse an existing one with the same fingerprint if * possible. */ mdctx = EVP_MD_CTX_create(); if (!mdctx) return 1; if (EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL) != 1) { EVP_MD_CTX_destroy(mdctx); return 1; } if (info->ssl_client_options_set) EVP_DigestUpdate(mdctx, &info->ssl_client_options_set, sizeof(info->ssl_client_options_set)); #if (OPENSSL_VERSION_NUMBER >= 0x009080df) && !defined(USE_WOLFSSL) if (info->ssl_client_options_clear) EVP_DigestUpdate(mdctx, &info->ssl_client_options_clear, sizeof(info->ssl_client_options_clear)); #endif if (cipher_list) EVP_DigestUpdate(mdctx, cipher_list, strlen(cipher_list)); #if defined(LWS_HAVE_SSL_CTX_set_ciphersuites) if (info->client_tls_1_3_plus_cipher_list) EVP_DigestUpdate(mdctx, info->client_tls_1_3_plus_cipher_list, strlen(info->client_tls_1_3_plus_cipher_list)); #endif if (!lws_check_opt(vh->options, LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS)) { c = 1; EVP_DigestUpdate(mdctx, &c, 1); } if (ca_filepath) EVP_DigestUpdate(mdctx, ca_filepath, strlen(ca_filepath)); if (cert_filepath) EVP_DigestUpdate(mdctx, cert_filepath, strlen(cert_filepath)); if (private_key_filepath) EVP_DigestUpdate(mdctx, private_key_filepath, strlen(private_key_filepath)); if (ca_mem && ca_mem_len) EVP_DigestUpdate(mdctx, ca_mem, ca_mem_len); if (cert_mem && cert_mem_len) EVP_DigestUpdate(mdctx, cert_mem, cert_mem_len); len = sizeof(hash); EVP_DigestFinal_ex(mdctx, hash, &len); EVP_MD_CTX_destroy(mdctx); /* look for existing client context with same config already */ lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, lws_dll2_get_head(&vh->context->tls.cc_owner)) { tcr = lws_container_of(p, struct lws_tls_client_reuse, cc_list); if (!memcmp(hash, tcr->hash, len)) { /* it's a match */ tcr->refcount++; vh->tls.ssl_client_ctx = tcr->ssl_client_ctx; lwsl_info("%s: vh %s: reusing client ctx %d: use %d\n", __func__, vh->name, tcr->index, tcr->refcount); return 0; } } lws_end_foreach_dll_safe(p, tp); /* no existing one the same... create new client SSL_CTX */ errno = 0; ERR_clear_error(); vh->tls.ssl_client_ctx = SSL_CTX_new(method); if (!vh->tls.ssl_client_ctx) { error = ERR_get_error(); lwsl_err("problem creating ssl context %lu: %s\n", error, ERR_error_string(error, (char *)vh->context->pt[0].serv_buf)); return 1; } tcr = lws_zalloc(sizeof(*tcr), "client ctx tcr"); if (!tcr) { SSL_CTX_free(vh->tls.ssl_client_ctx); return 1; } tcr->ssl_client_ctx = vh->tls.ssl_client_ctx; tcr->refcount = 1; memcpy(tcr->hash, hash, len); tcr->index = vh->context->tls.count_client_contexts++; lws_dll2_add_head(&tcr->cc_list, &vh->context->tls.cc_owner); lwsl_info("%s: vh %s: created new client ctx %d\n", __func__, vh->name, tcr->index); /* bind the tcr to the client context */ SSL_CTX_set_ex_data(vh->tls.ssl_client_ctx, openssl_SSL_CTX_private_data_index, (char *)tcr); #ifdef SSL_OP_NO_COMPRESSION SSL_CTX_set_options(vh->tls.ssl_client_ctx, SSL_OP_NO_COMPRESSION); #endif SSL_CTX_set_options(vh->tls.ssl_client_ctx, SSL_OP_CIPHER_SERVER_PREFERENCE); SSL_CTX_set_mode(vh->tls.ssl_client_ctx, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER | SSL_MODE_RELEASE_BUFFERS); if (info->ssl_client_options_set) SSL_CTX_set_options(vh->tls.ssl_client_ctx, info->ssl_client_options_set); /* SSL_clear_options introduced in 0.9.8m */ #if (OPENSSL_VERSION_NUMBER >= 0x009080df) && !defined(USE_WOLFSSL) if (info->ssl_client_options_clear) SSL_CTX_clear_options(vh->tls.ssl_client_ctx, info->ssl_client_options_clear); #endif if (cipher_list) SSL_CTX_set_cipher_list(vh->tls.ssl_client_ctx, cipher_list); #if defined(LWS_HAVE_SSL_CTX_set_ciphersuites) if (info->client_tls_1_3_plus_cipher_list) SSL_CTX_set_ciphersuites(vh->tls.ssl_client_ctx, info->client_tls_1_3_plus_cipher_list); #endif #ifdef LWS_SSL_CLIENT_USE_OS_CA_CERTS if (!lws_check_opt(vh->options, LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS)) /* loads OS default CA certs */ SSL_CTX_set_default_verify_paths(vh->tls.ssl_client_ctx); #endif /* openssl init for cert verification (for client sockets) */ if (!ca_filepath && (!ca_mem || !ca_mem_len)) { if (!SSL_CTX_load_verify_locations( vh->tls.ssl_client_ctx, NULL, LWS_OPENSSL_CLIENT_CERTS)) lwsl_err("Unable to load SSL Client certs from %s " "(set by LWS_OPENSSL_CLIENT_CERTS) -- " "client ssl isn't going to work\n", LWS_OPENSSL_CLIENT_CERTS); } else if (ca_filepath) { if (!SSL_CTX_load_verify_locations( vh->tls.ssl_client_ctx, ca_filepath, NULL)) { lwsl_err( "Unable to load SSL Client certs " "file from %s -- client ssl isn't " "going to work\n", ca_filepath); lws_tls_err_describe_clear(); } else lwsl_info("loaded ssl_ca_filepath\n"); } else { ca_mem_ptr = (const unsigned char*)ca_mem; client_CA = d2i_X509(NULL, &ca_mem_ptr, ca_mem_len); x509_store = X509_STORE_new(); if (!client_CA || !X509_STORE_add_cert(x509_store, client_CA)) { X509_STORE_free(x509_store); lwsl_err("Unable to load SSL Client certs from " "ssl_ca_mem -- client ssl isn't going to " "work\n"); lws_tls_err_describe_clear(); } else { /* it doesn't increment x509_store ref counter */ SSL_CTX_set_cert_store(vh->tls.ssl_client_ctx, x509_store); lwsl_info("loaded ssl_ca_mem\n"); } if (client_CA) X509_free(client_CA); } /* * callback allowing user code to load extra verification certs * helping the client to verify server identity */ /* support for client-side certificate authentication */ if (cert_filepath) { if (lws_tls_use_any_upgrade_check_extant(cert_filepath) != LWS_TLS_EXTANT_YES && (info->options & LWS_SERVER_OPTION_IGNORE_MISSING_CERT)) return 0; lwsl_notice("%s: doing cert filepath %s\n", __func__, cert_filepath); n = SSL_CTX_use_certificate_chain_file(vh->tls.ssl_client_ctx, cert_filepath); if (n < 1) { lwsl_err("problem %d getting cert '%s'\n", n, cert_filepath); lws_tls_err_describe_clear(); return 1; } lwsl_notice("Loaded client cert %s\n", cert_filepath); } else if (cert_mem && cert_mem_len) { n = SSL_CTX_use_certificate_ASN1(vh->tls.ssl_client_ctx, cert_mem_len, cert_mem); if (n < 1) { lwsl_err("%s: problem interpreting client cert\n", __func__); lws_tls_err_describe_clear(); return 1; } } if (private_key_filepath) { lwsl_notice("%s: doing private key filepath\n", __func__); lws_ssl_bind_passphrase(vh->tls.ssl_client_ctx, 1, info); /* set the private key from KeyFile */ if (SSL_CTX_use_PrivateKey_file(vh->tls.ssl_client_ctx, private_key_filepath, SSL_FILETYPE_PEM) != 1) { lwsl_err("use_PrivateKey_file '%s'\n", private_key_filepath); lws_tls_err_describe_clear(); return 1; } lwsl_notice("Loaded client cert private key %s\n", private_key_filepath); /* verify private key */ if (!SSL_CTX_check_private_key(vh->tls.ssl_client_ctx)) { lwsl_err("Private SSL key doesn't match cert\n"); return 1; } } return 0; } libwebsockets-3.2.1/lib/tls/openssl/openssl-server.c000066400000000000000000000604071357643561300225670ustar00rootroot00000000000000/* * libwebsockets - OpenSSL-specific server functions * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" /* * Care: many openssl apis return 1 for success. These are translated to the * lws convention of 0 for success. */ extern int openssl_websocket_private_data_index, openssl_SSL_CTX_private_data_index; int lws_openssl_describe_cipher(struct lws *wsi); static int OpenSSL_verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) { SSL *ssl; int n; struct lws *wsi; union lws_tls_cert_info_results ir; X509 *topcert = X509_STORE_CTX_get_current_cert(x509_ctx); ssl = X509_STORE_CTX_get_ex_data(x509_ctx, SSL_get_ex_data_X509_STORE_CTX_idx()); /* * !!! nasty openssl requires the index to come as a library-scope * static */ wsi = SSL_get_ex_data(ssl, openssl_websocket_private_data_index); n = lws_tls_openssl_cert_info(topcert, LWS_TLS_CERT_INFO_COMMON_NAME, &ir, sizeof(ir.ns.name)); if (!n) lwsl_info("%s: client cert CN '%s'\n", __func__, ir.ns.name); else lwsl_info("%s: couldn't get client cert CN\n", __func__); n = wsi->vhost->protocols[0].callback(wsi, LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION, x509_ctx, ssl, preverify_ok); /* convert return code from 0 = OK to 1 = OK */ return !n; } int lws_tls_server_client_cert_verify_config(struct lws_vhost *vh) { int verify_options = SSL_VERIFY_PEER; /* as a server, are we requiring clients to identify themselves? */ if (!lws_check_opt(vh->options, LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT)) return 0; if (!lws_check_opt(vh->options, LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED)) verify_options |= SSL_VERIFY_FAIL_IF_NO_PEER_CERT; SSL_CTX_set_session_id_context(vh->tls.ssl_ctx, (uint8_t *)vh->context, sizeof(void *)); /* absolutely require the client cert */ SSL_CTX_set_verify(vh->tls.ssl_ctx, verify_options, OpenSSL_verify_callback); return 0; } #if defined(SSL_TLSEXT_ERR_NOACK) && !defined(OPENSSL_NO_TLSEXT) static int lws_ssl_server_name_cb(SSL *ssl, int *ad, void *arg) { struct lws_context *context = (struct lws_context *)arg; struct lws_vhost *vhost, *vh; const char *servername; if (!ssl) return SSL_TLSEXT_ERR_NOACK; /* * We can only get ssl accepted connections by using a vhost's ssl_ctx * find out which listening one took us and only match vhosts on the * same port. */ vh = context->vhost_list; while (vh) { if (!vh->being_destroyed && vh->tls.ssl_ctx == SSL_get_SSL_CTX(ssl)) break; vh = vh->vhost_next; } if (!vh) { assert(vh); /* can't match the incoming vh? */ return SSL_TLSEXT_ERR_OK; } servername = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name); if (!servername) { /* the client doesn't know what hostname it wants */ lwsl_info("SNI: Unknown ServerName\n"); return SSL_TLSEXT_ERR_OK; } vhost = lws_select_vhost(context, vh->listen_port, servername); if (!vhost) { lwsl_info("SNI: none: %s:%d\n", servername, vh->listen_port); return SSL_TLSEXT_ERR_OK; } lwsl_info("SNI: Found: %s:%d\n", servername, vh->listen_port); /* select the ssl ctx from the selected vhost for this conn */ SSL_set_SSL_CTX(ssl, vhost->tls.ssl_ctx); return SSL_TLSEXT_ERR_OK; } #endif /* * this may now get called after the vhost creation, when certs become * available. */ int lws_tls_server_certs_load(struct lws_vhost *vhost, struct lws *wsi, const char *cert, const char *private_key, const char *mem_cert, size_t mem_cert_len, const char *mem_privkey, size_t mem_privkey_len) { #if !defined(OPENSSL_NO_EC) const char *ecdh_curve = "prime256v1"; #if !defined(LWS_WITH_BORINGSSL) && defined(LWS_HAVE_SSL_EXTRA_CHAIN_CERTS) STACK_OF(X509) *extra_certs = NULL; #endif EC_KEY *ecdh, *EC_key = NULL; EVP_PKEY *pkey; X509 *x = NULL; int ecdh_nid; int KeyType; #endif unsigned long error; lws_filepos_t flen; uint8_t *p; int ret; int n = lws_tls_generic_cert_checks(vhost, cert, private_key), m; (void)ret; if (!cert && !private_key) n = LWS_TLS_EXTANT_ALTERNATIVE; if (n == LWS_TLS_EXTANT_NO && (!mem_cert || !mem_privkey)) return 0; if (n == LWS_TLS_EXTANT_NO) n = LWS_TLS_EXTANT_ALTERNATIVE; if (n == LWS_TLS_EXTANT_ALTERNATIVE && (!mem_cert || !mem_privkey)) return 1; /* no alternative */ if (n == LWS_TLS_EXTANT_ALTERNATIVE) { #if OPENSSL_VERSION_NUMBER >= 0x10100000L /* * Although we have prepared update certs, we no longer have * the rights to read our own cert + key we saved. * * If we were passed copies in memory buffers, use those * in favour of the filepaths we normally want. */ cert = NULL; private_key = NULL; } /* * use the multi-cert interface for backwards compatibility in the * both simple files case */ if (n != LWS_TLS_EXTANT_ALTERNATIVE && cert) { /* set the local certificate from CertFile */ m = SSL_CTX_use_certificate_chain_file(vhost->tls.ssl_ctx, cert); if (m != 1) { error = ERR_get_error(); lwsl_err("problem getting cert '%s' %lu: %s\n", cert, error, ERR_error_string(error, (char *)vhost->context->pt[0].serv_buf)); return 1; } if (private_key) { /* set the private key from KeyFile */ if (SSL_CTX_use_PrivateKey_file(vhost->tls.ssl_ctx, private_key, SSL_FILETYPE_PEM) != 1) { error = ERR_get_error(); lwsl_err("ssl problem getting key '%s' %lu: %s\n", private_key, error, ERR_error_string(error, (char *)vhost->context->pt[0].serv_buf)); return 1; } } else { if (vhost->protocols[0].callback(wsi, LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY, vhost->tls.ssl_ctx, NULL, 0)) { lwsl_err("ssl private key not set\n"); return 1; } } return 0; } /* otherwise allow for DER or PEM, file or memory image */ if (lws_tls_alloc_pem_to_der_file(vhost->context, cert, mem_cert, mem_cert_len, &p, &flen)) { lwsl_err("%s: couldn't read cert file\n", __func__); return 1; } #if !defined(USE_WOLFSSL) ret = SSL_CTX_use_certificate_ASN1(vhost->tls.ssl_ctx, (int)flen, p); #else ret = wolfSSL_CTX_use_certificate_buffer(vhost->tls.ssl_ctx, (uint8_t *)p, (int)flen, WOLFSSL_FILETYPE_ASN1); #endif lws_free_set_NULL(p); if (ret != 1) { lwsl_err("%s: Problem loading cert\n", __func__); return 1; } if (lws_tls_alloc_pem_to_der_file(vhost->context, private_key, mem_privkey, mem_privkey_len, &p, &flen)) { lwsl_notice("unable to convert memory privkey\n"); return 1; } #if !defined(USE_WOLFSSL) ret = SSL_CTX_use_PrivateKey_ASN1(EVP_PKEY_RSA, vhost->tls.ssl_ctx, p, (long)(long long)flen); if (ret != 1) { ret = SSL_CTX_use_PrivateKey_ASN1(EVP_PKEY_EC, vhost->tls.ssl_ctx, p, (long)(long long)flen); } #else ret = wolfSSL_CTX_use_PrivateKey_buffer(vhost->tls.ssl_ctx, p, flen, WOLFSSL_FILETYPE_ASN1); #endif lws_free_set_NULL(p); if (ret != 1) { lwsl_notice("unable to use memory privkey\n"); return 1; } #else /* * Although we have prepared update certs, we no longer have * the rights to read our own cert + key we saved. * * If we were passed copies in memory buffers, use those * instead. * * The passed memory-buffer cert image is in DER, and the * memory-buffer private key image is PEM. */ #ifndef USE_WOLFSSL if (lws_tls_alloc_pem_to_der_file(vhost->context, cert, mem_cert, mem_cert_len, &p, &flen)) { lwsl_err("%s: couldn't convert pem to der\n", __func__); return 1; } if (SSL_CTX_use_certificate_ASN1(vhost->tls.ssl_ctx, (int)flen, (uint8_t *)p) != 1) { #else if (wolfSSL_CTX_use_certificate_buffer(vhost->tls.ssl_ctx, (uint8_t *)mem_cert, (int)mem_cert_len, WOLFSSL_FILETYPE_ASN1) != 1) { #endif lwsl_err("Problem loading update cert\n"); return 1; } if (lws_tls_alloc_pem_to_der_file(vhost->context, NULL, mem_privkey, mem_privkey_len, &p, &flen)) { lwsl_notice("unable to convert memory privkey\n"); return 1; } #ifndef USE_WOLFSSL if (SSL_CTX_use_PrivateKey_ASN1(EVP_PKEY_RSA, vhost->tls.ssl_ctx, p, (long)(long long)flen) != 1) { #else if (wolfSSL_CTX_use_PrivateKey_buffer(vhost->tls.ssl_ctx, p, flen, WOLFSSL_FILETYPE_ASN1) != 1) { #endif lwsl_notice("unable to use memory privkey\n"); return 1; } goto check_key; } /* set the local certificate from CertFile */ m = SSL_CTX_use_certificate_chain_file(vhost->tls.ssl_ctx, cert); if (m != 1) { error = ERR_get_error(); lwsl_err("problem getting cert '%s' %lu: %s\n", cert, error, ERR_error_string(error, (char *)vhost->context->pt[0].serv_buf)); return 1; } if (n != LWS_TLS_EXTANT_ALTERNATIVE && private_key) { /* set the private key from KeyFile */ if (SSL_CTX_use_PrivateKey_file(vhost->tls.ssl_ctx, private_key, SSL_FILETYPE_PEM) != 1) { error = ERR_get_error(); lwsl_err("ssl problem getting key '%s' %lu: %s\n", private_key, error, ERR_error_string(error, (char *)vhost->context->pt[0].serv_buf)); return 1; } } else { if (vhost->protocols[0].callback(wsi, LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY, vhost->tls.ssl_ctx, NULL, 0)) { lwsl_err("ssl private key not set\n"); return 1; } } check_key: #endif /* verify private key */ if (!SSL_CTX_check_private_key(vhost->tls.ssl_ctx)) { lwsl_err("Private SSL key doesn't match cert\n"); return 1; } #if !defined(OPENSSL_NO_EC) if (vhost->tls.ecdh_curve[0]) ecdh_curve = vhost->tls.ecdh_curve; ecdh_nid = OBJ_sn2nid(ecdh_curve); if (NID_undef == ecdh_nid) { lwsl_err("SSL: Unknown curve name '%s'", ecdh_curve); return 1; } ecdh = EC_KEY_new_by_curve_name(ecdh_nid); if (NULL == ecdh) { lwsl_err("SSL: Unable to create curve '%s'", ecdh_curve); return 1; } SSL_CTX_set_tmp_ecdh(vhost->tls.ssl_ctx, ecdh); EC_KEY_free(ecdh); SSL_CTX_set_options(vhost->tls.ssl_ctx, SSL_OP_SINGLE_ECDH_USE); lwsl_notice(" SSL ECDH curve '%s'\n", ecdh_curve); if (lws_check_opt(vhost->context->options, LWS_SERVER_OPTION_SSL_ECDH)) lwsl_notice(" Using ECDH certificate support\n"); /* Get X509 certificate from ssl context */ #if !defined(LWS_WITH_BORINGSSL) #if !defined(LWS_HAVE_SSL_EXTRA_CHAIN_CERTS) x = sk_X509_value(vhost->tls.ssl_ctx->extra_certs, 0); #else SSL_CTX_get_extra_chain_certs_only(vhost->tls.ssl_ctx, &extra_certs); if (extra_certs) x = sk_X509_value(extra_certs, 0); else lwsl_info("%s: no extra certs\n", __func__); #endif if (!x) { //lwsl_err("%s: x is NULL\n", __func__); goto post_ecdh; } #else return 0; #endif /* Get the public key from certificate */ pkey = X509_get_pubkey(x); if (!pkey) { lwsl_err("%s: pkey is NULL\n", __func__); return 1; } /* Get the key type */ KeyType = EVP_PKEY_type(EVP_PKEY_id(pkey)); if (EVP_PKEY_EC != KeyType) { lwsl_notice("Key type is not EC\n"); return 0; } /* Get the key */ EC_key = EVP_PKEY_get1_EC_KEY(pkey); /* Set ECDH parameter */ if (!EC_key) { lwsl_err("%s: ECDH key is NULL \n", __func__); return 1; } SSL_CTX_set_tmp_ecdh(vhost->tls.ssl_ctx, EC_key); EC_KEY_free(EC_key); #else lwsl_notice(" OpenSSL doesn't support ECDH\n"); #endif #if !defined(OPENSSL_NO_EC) && !defined(LWS_WITH_BORINGSSL) post_ecdh: #endif vhost->tls.skipped_certs = 0; return 0; } int lws_tls_server_vhost_backend_init(const struct lws_context_creation_info *info, struct lws_vhost *vhost, struct lws *wsi) { unsigned long error; SSL_METHOD *method = (SSL_METHOD *)SSLv23_server_method(); if (!method) { error = ERR_get_error(); lwsl_err("problem creating ssl method %lu: %s\n", error, ERR_error_string(error, (char *)vhost->context->pt[0].serv_buf)); return 1; } vhost->tls.ssl_ctx = SSL_CTX_new(method); /* create context */ if (!vhost->tls.ssl_ctx) { error = ERR_get_error(); lwsl_err("problem creating ssl context %lu: %s\n", error, ERR_error_string(error, (char *)vhost->context->pt[0].serv_buf)); return 1; } SSL_CTX_set_ex_data(vhost->tls.ssl_ctx, openssl_SSL_CTX_private_data_index, (char *)vhost->context); /* Disable SSLv2 and SSLv3 */ SSL_CTX_set_options(vhost->tls.ssl_ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3); #ifdef SSL_OP_NO_COMPRESSION SSL_CTX_set_options(vhost->tls.ssl_ctx, SSL_OP_NO_COMPRESSION); #endif SSL_CTX_set_options(vhost->tls.ssl_ctx, SSL_OP_SINGLE_DH_USE); SSL_CTX_set_options(vhost->tls.ssl_ctx, SSL_OP_CIPHER_SERVER_PREFERENCE); if (info->ssl_cipher_list) SSL_CTX_set_cipher_list(vhost->tls.ssl_ctx, info->ssl_cipher_list); #if defined(LWS_HAVE_SSL_CTX_set_ciphersuites) if (info->tls1_3_plus_cipher_list) SSL_CTX_set_ciphersuites(vhost->tls.ssl_ctx, info->tls1_3_plus_cipher_list); #endif #if !defined(OPENSSL_NO_TLSEXT) SSL_CTX_set_tlsext_servername_callback(vhost->tls.ssl_ctx, lws_ssl_server_name_cb); SSL_CTX_set_tlsext_servername_arg(vhost->tls.ssl_ctx, vhost->context); #endif if (info->ssl_ca_filepath && !SSL_CTX_load_verify_locations(vhost->tls.ssl_ctx, info->ssl_ca_filepath, NULL)) { lwsl_err("%s: SSL_CTX_load_verify_locations unhappy\n", __func__); } if (info->ssl_options_set) SSL_CTX_set_options(vhost->tls.ssl_ctx, info->ssl_options_set); /* SSL_clear_options introduced in 0.9.8m */ #if (OPENSSL_VERSION_NUMBER >= 0x009080df) && !defined(USE_WOLFSSL) if (info->ssl_options_clear) SSL_CTX_clear_options(vhost->tls.ssl_ctx, info->ssl_options_clear); #endif lwsl_info(" SSL options 0x%lX\n", (unsigned long)SSL_CTX_get_options(vhost->tls.ssl_ctx)); if (!vhost->tls.use_ssl || (!info->ssl_cert_filepath && !info->server_ssl_cert_mem)) return 0; lws_ssl_bind_passphrase(vhost->tls.ssl_ctx, 0, info); return lws_tls_server_certs_load(vhost, wsi, info->ssl_cert_filepath, info->ssl_private_key_filepath, info->server_ssl_cert_mem, info->server_ssl_cert_mem_len, info->server_ssl_private_key_mem, info->server_ssl_private_key_mem_len); } int lws_tls_server_new_nonblocking(struct lws *wsi, lws_sockfd_type accept_fd) { #if !defined(USE_WOLFSSL) BIO *bio; #endif errno = 0; ERR_clear_error(); wsi->tls.ssl = SSL_new(wsi->vhost->tls.ssl_ctx); if (wsi->tls.ssl == NULL) { lwsl_err("SSL_new failed: %d (errno %d)\n", lws_ssl_get_error(wsi, 0), errno); lws_tls_err_describe_clear(); return 1; } SSL_set_ex_data(wsi->tls.ssl, openssl_websocket_private_data_index, wsi); SSL_set_fd(wsi->tls.ssl, (int)(long long)accept_fd); #ifdef USE_WOLFSSL #ifdef USE_OLD_CYASSL CyaSSL_set_using_nonblock(wsi->tls.ssl, 1); #else wolfSSL_set_using_nonblock(wsi->tls.ssl, 1); #endif #else SSL_set_mode(wsi->tls.ssl, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER | SSL_MODE_RELEASE_BUFFERS); bio = SSL_get_rbio(wsi->tls.ssl); if (bio) BIO_set_nbio(bio, 1); /* nonblocking */ else lwsl_notice("NULL rbio\n"); bio = SSL_get_wbio(wsi->tls.ssl); if (bio) BIO_set_nbio(bio, 1); /* nonblocking */ else lwsl_notice("NULL rbio\n"); #endif #if defined (LWS_HAVE_SSL_SET_INFO_CALLBACK) if (wsi->vhost->tls.ssl_info_event_mask) SSL_set_info_callback(wsi->tls.ssl, lws_ssl_info_callback); #endif return 0; } int lws_tls_server_abort_connection(struct lws *wsi) { SSL_shutdown(wsi->tls.ssl); SSL_free(wsi->tls.ssl); return 0; } enum lws_ssl_capable_status lws_tls_server_accept(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; union lws_tls_cert_info_results ir; int m, n; errno = 0; ERR_clear_error(); n = SSL_accept(wsi->tls.ssl); if (n == 1) { n = lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_COMMON_NAME, &ir, sizeof(ir.ns.name)); if (!n) lwsl_notice("%s: client cert CN '%s'\n", __func__, ir.ns.name); else lwsl_info("%s: no client cert CN\n", __func__); lws_openssl_describe_cipher(wsi); if (SSL_pending(wsi->tls.ssl) && lws_dll2_is_detached(&wsi->tls.dll_pending_tls)) lws_dll2_add_head(&wsi->tls.dll_pending_tls, &pt->tls.dll_pending_tls_owner); return LWS_SSL_CAPABLE_DONE; } m = lws_ssl_get_error(wsi, n); lws_tls_err_describe_clear(); if (m == SSL_ERROR_SYSCALL || m == SSL_ERROR_SSL) return LWS_SSL_CAPABLE_ERROR; if (m == SSL_ERROR_WANT_READ || (m != SSL_ERROR_ZERO_RETURN && SSL_want_read(wsi->tls.ssl))) { if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) { lwsl_info("%s: WANT_READ change_pollfd failed\n", __func__); return LWS_SSL_CAPABLE_ERROR; } lwsl_info("SSL_ERROR_WANT_READ: m %d\n", m); return LWS_SSL_CAPABLE_MORE_SERVICE_READ; } if (m == SSL_ERROR_WANT_WRITE || SSL_want_write(wsi->tls.ssl)) { lwsl_debug("%s: WANT_WRITE\n", __func__); if (lws_change_pollfd(wsi, 0, LWS_POLLOUT)) { lwsl_info("%s: WANT_WRITE change_pollfd failed\n", __func__); return LWS_SSL_CAPABLE_ERROR; } return LWS_SSL_CAPABLE_MORE_SERVICE_WRITE; } return LWS_SSL_CAPABLE_ERROR; } #if defined(LWS_WITH_ACME) static int lws_tls_openssl_rsa_new_key(RSA **rsa, int bits) { BIGNUM *bn = BN_new(); int n; if (!bn) return 1; if (BN_set_word(bn, RSA_F4) != 1) { BN_free(bn); return 1; } *rsa = RSA_new(); if (!*rsa) { BN_free(bn); return 1; } n = RSA_generate_key_ex(*rsa, bits, bn, NULL); BN_free(bn); if (n == 1) return 0; RSA_free(*rsa); *rsa = NULL; return 1; } struct lws_tls_ss_pieces { X509 *x509; EVP_PKEY *pkey; RSA *rsa; }; LWS_VISIBLE LWS_EXTERN int lws_tls_acme_sni_cert_create(struct lws_vhost *vhost, const char *san_a, const char *san_b) { GENERAL_NAMES *gens = sk_GENERAL_NAME_new_null(); GENERAL_NAME *gen = NULL; ASN1_IA5STRING *ia5 = NULL; X509_NAME *name; if (!gens) return 1; vhost->tls.ss = lws_zalloc(sizeof(*vhost->tls.ss), "sni cert"); if (!vhost->tls.ss) { GENERAL_NAMES_free(gens); return 1; } vhost->tls.ss->x509 = X509_new(); if (!vhost->tls.ss->x509) goto bail; ASN1_INTEGER_set(X509_get_serialNumber(vhost->tls.ss->x509), 1); X509_gmtime_adj(X509_get_notBefore(vhost->tls.ss->x509), 0); X509_gmtime_adj(X509_get_notAfter(vhost->tls.ss->x509), 3600); vhost->tls.ss->pkey = EVP_PKEY_new(); if (!vhost->tls.ss->pkey) goto bail0; if (lws_tls_openssl_rsa_new_key(&vhost->tls.ss->rsa, 4096)) goto bail1; if (!EVP_PKEY_assign_RSA(vhost->tls.ss->pkey, vhost->tls.ss->rsa)) goto bail2; X509_set_pubkey(vhost->tls.ss->x509, vhost->tls.ss->pkey); name = X509_get_subject_name(vhost->tls.ss->x509); X509_NAME_add_entry_by_txt(name, "C", MBSTRING_ASC, (unsigned char *)"GB", -1, -1, 0); X509_NAME_add_entry_by_txt(name, "O", MBSTRING_ASC, (unsigned char *)"somecompany", -1, -1, 0); if (X509_NAME_add_entry_by_txt(name, "CN", MBSTRING_UTF8, (unsigned char *)"temp.acme.invalid", -1, -1, 0) != 1) { lwsl_notice("failed to add CN\n"); goto bail2; } X509_set_issuer_name(vhost->tls.ss->x509, name); /* add the SAN payloads */ gen = GENERAL_NAME_new(); ia5 = ASN1_IA5STRING_new(); if (!ASN1_STRING_set(ia5, san_a, -1)) { lwsl_notice("failed to set ia5\n"); GENERAL_NAME_free(gen); goto bail2; } GENERAL_NAME_set0_value(gen, GEN_DNS, ia5); sk_GENERAL_NAME_push(gens, gen); if (X509_add1_ext_i2d(vhost->tls.ss->x509, NID_subject_alt_name, gens, 0, X509V3_ADD_APPEND) != 1) goto bail2; GENERAL_NAMES_free(gens); if (san_b && san_b[0]) { gens = sk_GENERAL_NAME_new_null(); gen = GENERAL_NAME_new(); ia5 = ASN1_IA5STRING_new(); if (!ASN1_STRING_set(ia5, san_a, -1)) { lwsl_notice("failed to set ia5\n"); GENERAL_NAME_free(gen); goto bail2; } GENERAL_NAME_set0_value(gen, GEN_DNS, ia5); sk_GENERAL_NAME_push(gens, gen); if (X509_add1_ext_i2d(vhost->tls.ss->x509, NID_subject_alt_name, gens, 0, X509V3_ADD_APPEND) != 1) goto bail2; GENERAL_NAMES_free(gens); } /* sign it with our private key */ if (!X509_sign(vhost->tls.ss->x509, vhost->tls.ss->pkey, EVP_sha256())) goto bail2; #if 0 {/* useful to take a sample of a working cert for mbedtls to crib */ FILE *fp = fopen("/tmp/acme-temp-cert", "w+"); i2d_X509_fp(fp, vhost->tls.ss->x509); fclose(fp); } #endif /* tell the vhost to use our crafted certificate */ SSL_CTX_use_certificate(vhost->tls.ssl_ctx, vhost->tls.ss->x509); /* and to use our generated private key */ SSL_CTX_use_PrivateKey(vhost->tls.ssl_ctx, vhost->tls.ss->pkey); return 0; bail2: RSA_free(vhost->tls.ss->rsa); bail1: EVP_PKEY_free(vhost->tls.ss->pkey); bail0: X509_free(vhost->tls.ss->x509); bail: lws_free(vhost->tls.ss); GENERAL_NAMES_free(gens); return 1; } void lws_tls_acme_sni_cert_destroy(struct lws_vhost *vhost) { if (!vhost->tls.ss) return; EVP_PKEY_free(vhost->tls.ss->pkey); X509_free(vhost->tls.ss->x509); lws_free_set_NULL(vhost->tls.ss); } static int lws_tls_openssl_add_nid(X509_NAME *name, int nid, const char *value) { X509_NAME_ENTRY *e; int n; if (!value || value[0] == '\0') value = "none"; e = X509_NAME_ENTRY_create_by_NID(NULL, nid, MBSTRING_ASC, (unsigned char *)value, -1); if (!e) return 1; n = X509_NAME_add_entry(name, e, -1, 0); X509_NAME_ENTRY_free(e); return n != 1; } static int nid_list[] = { NID_countryName, /* LWS_TLS_REQ_ELEMENT_COUNTRY */ NID_stateOrProvinceName, /* LWS_TLS_REQ_ELEMENT_STATE */ NID_localityName, /* LWS_TLS_REQ_ELEMENT_LOCALITY */ NID_organizationName, /* LWS_TLS_REQ_ELEMENT_ORGANIZATION */ NID_commonName, /* LWS_TLS_REQ_ELEMENT_COMMON_NAME */ NID_organizationalUnitName, /* LWS_TLS_REQ_ELEMENT_EMAIL */ }; LWS_VISIBLE LWS_EXTERN int lws_tls_acme_sni_csr_create(struct lws_context *context, const char *elements[], uint8_t *csr, size_t csr_len, char **privkey_pem, size_t *privkey_len) { uint8_t *csr_in = csr; RSA *rsakey; X509_REQ *req; X509_NAME *subj; EVP_PKEY *pkey; char *p, *end; BIO *bio; long bio_len; int n, ret = -1; if (lws_tls_openssl_rsa_new_key(&rsakey, 4096)) return -1; pkey = EVP_PKEY_new(); if (!pkey) goto bail0; if (!EVP_PKEY_set1_RSA(pkey, rsakey)) goto bail1; req = X509_REQ_new(); if (!req) goto bail1; X509_REQ_set_pubkey(req, pkey); subj = X509_NAME_new(); if (!subj) goto bail2; for (n = 0; n < LWS_TLS_REQ_ELEMENT_COUNT; n++) if (lws_tls_openssl_add_nid(subj, nid_list[n], elements[n])) { lwsl_notice("%s: failed to add element %d\n", __func__, n); goto bail3; } if (X509_REQ_set_subject_name(req, subj) != 1) goto bail3; if (!X509_REQ_sign(req, pkey, EVP_sha256())) goto bail3; /* * issue the CSR as PEM to a BIO, and translate to b64urlenc without * headers, trailers, or whitespace */ bio = BIO_new(BIO_s_mem()); if (!bio) goto bail3; if (PEM_write_bio_X509_REQ(bio, req) != 1) { BIO_free(bio); goto bail3; } bio_len = BIO_get_mem_data(bio, &p); end = p + bio_len; /* strip the header line */ while (p < end && *p != '\n') p++; while (p < end && csr_len) { if (*p == '\n') { p++; continue; } if (*p == '-') break; if (*p == '+') *csr++ = '-'; else if (*p == '/') *csr++ = '_'; else *csr++ = *p; p++; csr_len--; } BIO_free(bio); if (!csr_len) { lwsl_notice("%s: need %ld for CSR\n", __func__, bio_len); goto bail3; } /* * Also return the private key as a PEM in memory * (platform may not have a filesystem) */ bio = BIO_new(BIO_s_mem()); if (!bio) goto bail3; if (PEM_write_bio_PrivateKey(bio, pkey, NULL, NULL, 0, 0, NULL) != 1) { BIO_free(bio); goto bail3; } bio_len = BIO_get_mem_data(bio, &p); *privkey_pem = malloc(bio_len); /* malloc so user code can own / free */ *privkey_len = (size_t)bio_len; if (!*privkey_pem) { lwsl_notice("%s: need %ld for private key\n", __func__, bio_len); BIO_free(bio); goto bail3; } memcpy(*privkey_pem, p, (int)(long long)bio_len); BIO_free(bio); ret = lws_ptr_diff(csr, csr_in); bail3: X509_NAME_free(subj); bail2: X509_REQ_free(req); bail1: EVP_PKEY_free(pkey); bail0: RSA_free(rsakey); return ret; } #endif libwebsockets-3.2.1/lib/tls/openssl/private.h000066400000000000000000000032551357643561300212550ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * gencrypto openssl-specific helper declarations */ /* * one of these per different client context * cc_owner is in lws_context.lws_context_tls */ struct lws_tls_client_reuse { lws_tls_ctx *ssl_client_ctx; uint8_t hash[32]; struct lws_dll2 cc_list; int refcount; int index; }; typedef int (*next_proto_cb)(SSL *, const unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg); struct lws_x509_cert { X509 *cert; /* X509 is opaque, this has to be a pointer */ }; int lws_gencrypto_openssl_hash_to_NID(enum lws_genhash_types hash_type); const EVP_MD * lws_gencrypto_openssl_hash_to_EVP_MD(enum lws_genhash_types hash_type); #if !defined(LWS_HAVE_BN_bn2binpad) int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen); #endif libwebsockets-3.2.1/lib/tls/openssl/ssl.c000066400000000000000000000314751357643561300204040ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "tls/openssl/private.h" #include int openssl_websocket_private_data_index, openssl_SSL_CTX_private_data_index; /* * Care: many openssl apis return 1 for success. These are translated to the * lws convention of 0 for success. */ int lws_openssl_describe_cipher(struct lws *wsi) { #if !defined(LWS_WITH_NO_LOGS) int np = -1; SSL *s = wsi->tls.ssl; SSL_get_cipher_bits(s, &np); lwsl_info("%s: wsi %p: %s, %s, %d bits, %s\n", __func__, wsi, SSL_get_cipher_name(s), SSL_get_cipher(s), np, SSL_get_cipher_version(s)); #endif return 0; } int lws_ssl_get_error(struct lws *wsi, int n) { int m; if (!wsi->tls.ssl) return 99; m = SSL_get_error(wsi->tls.ssl, n); lwsl_debug("%s: %p %d -> %d (errno %d)\n", __func__, wsi->tls.ssl, n, m, errno); return m; } static int lws_context_init_ssl_pem_passwd_cb(char *buf, int size, int rwflag, void *userdata) { struct lws_context_creation_info * info = (struct lws_context_creation_info *)userdata; strncpy(buf, info->ssl_private_key_password, size); buf[size - 1] = '\0'; return (int)strlen(buf); } static int lws_context_init_ssl_pem_passwd_client_cb(char *buf, int size, int rwflag, void *userdata) { struct lws_context_creation_info * info = (struct lws_context_creation_info *)userdata; const char *p = info->ssl_private_key_password; if (info->client_ssl_private_key_password) p = info->client_ssl_private_key_password; strncpy(buf, p, size); buf[size - 1] = '\0'; return (int)strlen(buf); } void lws_ssl_bind_passphrase(SSL_CTX *ssl_ctx, int is_client, const struct lws_context_creation_info *info) { if (!info->ssl_private_key_password && !info->client_ssl_private_key_password) return; /* * password provided, set ssl callback and user data * for checking password which will be trigered during * SSL_CTX_use_PrivateKey_file function */ SSL_CTX_set_default_passwd_cb_userdata(ssl_ctx, (void *)info); SSL_CTX_set_default_passwd_cb(ssl_ctx, is_client ? lws_context_init_ssl_pem_passwd_client_cb: lws_context_init_ssl_pem_passwd_cb); } static void lws_ssl_destroy_client_ctx(struct lws_vhost *vhost) { struct lws_tls_client_reuse *tcr; if (vhost->tls.user_supplied_ssl_ctx || !vhost->tls.ssl_client_ctx) return; tcr = SSL_CTX_get_ex_data(vhost->tls.ssl_client_ctx, openssl_SSL_CTX_private_data_index); if (!tcr || --tcr->refcount) return; SSL_CTX_free(vhost->tls.ssl_client_ctx); vhost->tls.ssl_client_ctx = NULL; vhost->context->tls.count_client_contexts--; lws_dll2_remove(&tcr->cc_list); lws_free(tcr); } LWS_VISIBLE void lws_ssl_destroy(struct lws_vhost *vhost) { if (!lws_check_opt(vhost->context->options, LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT)) return; if (vhost->tls.ssl_ctx) SSL_CTX_free(vhost->tls.ssl_ctx); lws_ssl_destroy_client_ctx(vhost); // after 1.1.0 no need #if (OPENSSL_VERSION_NUMBER < 0x10100000) // <= 1.0.1f = old api, 1.0.1g+ = new api #if (OPENSSL_VERSION_NUMBER <= 0x1000106f) || defined(USE_WOLFSSL) ERR_remove_state(0); #else #if OPENSSL_VERSION_NUMBER >= 0x1010005f && \ !defined(LIBRESSL_VERSION_NUMBER) && \ !defined(OPENSSL_IS_BORINGSSL) ERR_remove_thread_state(); #else ERR_remove_thread_state(NULL); #endif #endif /* not needed after 1.1.0 */ #if (OPENSSL_VERSION_NUMBER >= 0x10002000) && \ (OPENSSL_VERSION_NUMBER <= 0x10100000) SSL_COMP_free_compression_methods(); #endif ERR_free_strings(); EVP_cleanup(); CRYPTO_cleanup_all_ex_data(); #endif } LWS_VISIBLE int lws_ssl_capable_read(struct lws *wsi, unsigned char *buf, int len) { struct lws_context *context = wsi->context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; int n = 0, m; if (!wsi->tls.ssl) return lws_ssl_capable_read_no_ssl(wsi, buf, len); lws_stats_bump(pt, LWSSTATS_C_API_READ, 1); errno = 0; ERR_clear_error(); n = SSL_read(wsi->tls.ssl, buf, len); #if defined(LWS_WITH_ESP32) if (!n && errno == LWS_ENOTCONN) { lwsl_debug("%p: SSL_read ENOTCONN\n", wsi); return LWS_SSL_CAPABLE_ERROR; } #endif #if defined(LWS_WITH_STATS) if (!wsi->seen_rx && wsi->accept_start_us) { lws_stats_bump(pt, LWSSTATS_US_SSL_RX_DELAY_AVG, lws_now_usecs() - wsi->accept_start_us); lws_stats_bump(pt, LWSSTATS_C_SSL_CONNS_HAD_RX, 1); wsi->seen_rx = 1; } #endif lwsl_debug("%p: SSL_read says %d\n", wsi, n); /* manpage: returning 0 means connection shut down * * 2018-09-10: https://github.com/openssl/openssl/issues/1903 * * So, in summary, if you get a 0 or -1 return from SSL_read() / * SSL_write(), you should call SSL_get_error(): * * - If you get back SSL_ERROR_RETURN_ZERO then you know the connection * has been cleanly shutdown by the peer. To fully close the * connection you may choose to call SSL_shutdown() to send a * close_notify back. * * - If you get back SSL_ERROR_SSL then some kind of internal or * protocol error has occurred. More details will be on the SSL error * queue. You can also call SSL_get_shutdown(). If this indicates a * state of SSL_RECEIVED_SHUTDOWN then you know a fatal alert has * been received from the peer (if it had been a close_notify then * SSL_get_error() would have returned SSL_ERROR_RETURN_ZERO). * SSL_ERROR_SSL is considered fatal - you should not call * SSL_shutdown() in this case. * * - If you get back SSL_ERROR_SYSCALL then some kind of fatal (i.e. * non-retryable) error has occurred in a system call. */ if (n <= 0) { m = lws_ssl_get_error(wsi, n); lwsl_debug("%p: ssl err %d errno %d\n", wsi, m, errno); if (m == SSL_ERROR_ZERO_RETURN) /* cleanly shut down */ return LWS_SSL_CAPABLE_ERROR; /* hm not retryable.. could be 0 size pkt or error */ if (m == SSL_ERROR_SSL || m == SSL_ERROR_SYSCALL || errno == LWS_ENOTCONN) { /* unclean, eg closed conn */ wsi->socket_is_permanently_unusable = 1; return LWS_SSL_CAPABLE_ERROR; } /* retryable? */ if (SSL_want_read(wsi->tls.ssl)) { lwsl_debug("%s: WANT_READ\n", __func__); lwsl_debug("%p: LWS_SSL_CAPABLE_MORE_SERVICE\n", wsi); return LWS_SSL_CAPABLE_MORE_SERVICE; } if (SSL_want_write(wsi->tls.ssl)) { lwsl_debug("%s: WANT_WRITE\n", __func__); lwsl_debug("%p: LWS_SSL_CAPABLE_MORE_SERVICE\n", wsi); return LWS_SSL_CAPABLE_MORE_SERVICE; } /* keep on trucking it seems */ } lws_stats_bump(pt, LWSSTATS_B_READ, n); if (wsi->vhost) wsi->vhost->conn_stats.rx += n; // lwsl_hexdump_err(buf, n); /* * if it was our buffer that limited what we read, * check if SSL has additional data pending inside SSL buffers. * * Because these won't signal at the network layer with POLLIN * and if we don't realize, this data will sit there forever */ if (n != len) goto bail; if (!wsi->tls.ssl) goto bail; if (SSL_pending(wsi->tls.ssl) && lws_dll2_is_detached(&wsi->tls.dll_pending_tls)) lws_dll2_add_head(&wsi->tls.dll_pending_tls, &pt->tls.dll_pending_tls_owner); return n; bail: lws_ssl_remove_wsi_from_buffered_list(wsi); return n; } LWS_VISIBLE int lws_ssl_pending(struct lws *wsi) { if (!wsi->tls.ssl) return 0; return SSL_pending(wsi->tls.ssl); } LWS_VISIBLE int lws_ssl_capable_write(struct lws *wsi, unsigned char *buf, int len) { int n, m; if (!wsi->tls.ssl) return lws_ssl_capable_write_no_ssl(wsi, buf, len); errno = 0; ERR_clear_error(); n = SSL_write(wsi->tls.ssl, buf, len); if (n > 0) return n; m = lws_ssl_get_error(wsi, n); if (m != SSL_ERROR_SYSCALL) { if (m == SSL_ERROR_WANT_READ || SSL_want_read(wsi->tls.ssl)) { lwsl_notice("%s: want read\n", __func__); return LWS_SSL_CAPABLE_MORE_SERVICE; } if (m == SSL_ERROR_WANT_WRITE || SSL_want_write(wsi->tls.ssl)) { lws_set_blocking_send(wsi); lwsl_debug("%s: want write\n", __func__); return LWS_SSL_CAPABLE_MORE_SERVICE; } } lwsl_debug("%s failed: %s\n",__func__, ERR_error_string(m, NULL)); lws_tls_err_describe_clear(); wsi->socket_is_permanently_unusable = 1; return LWS_SSL_CAPABLE_ERROR; } void lws_ssl_info_callback(const SSL *ssl, int where, int ret) { struct lws *wsi; struct lws_context *context; struct lws_ssl_info si; #ifndef USE_WOLFSSL context = (struct lws_context *)SSL_CTX_get_ex_data( SSL_get_SSL_CTX(ssl), openssl_SSL_CTX_private_data_index); #else context = (struct lws_context *)SSL_CTX_get_ex_data( SSL_get_SSL_CTX((SSL*) ssl), openssl_SSL_CTX_private_data_index); #endif if (!context) return; wsi = wsi_from_fd(context, SSL_get_fd(ssl)); if (!wsi) return; if (!(where & wsi->vhost->tls.ssl_info_event_mask)) return; si.where = where; si.ret = ret; if (user_callback_handle_rxflow(wsi->protocol->callback, wsi, LWS_CALLBACK_SSL_INFO, wsi->user_space, &si, 0)) lws_set_timeout(wsi, PENDING_TIMEOUT_KILLED_BY_SSL_INFO, -1); } LWS_VISIBLE int lws_ssl_close(struct lws *wsi) { lws_sockfd_type n; if (!wsi->tls.ssl) return 0; /* not handled */ #if defined (LWS_HAVE_SSL_SET_INFO_CALLBACK) /* kill ssl callbacks, because we will remove the fd from the * table linking it to the wsi */ if (wsi->vhost->tls.ssl_info_event_mask) SSL_set_info_callback(wsi->tls.ssl, NULL); #endif n = SSL_get_fd(wsi->tls.ssl); if (!wsi->socket_is_permanently_unusable) SSL_shutdown(wsi->tls.ssl); compatible_close(n); SSL_free(wsi->tls.ssl); wsi->tls.ssl = NULL; if (wsi->context->simultaneous_ssl_restriction && wsi->context->simultaneous_ssl-- == wsi->context->simultaneous_ssl_restriction) /* we made space and can do an accept */ lws_gate_accepts(wsi->context, 1); // lwsl_notice("%s: ssl restr %d, simul %d\n", __func__, // wsi->context->simultaneous_ssl_restriction, // wsi->context->simultaneous_ssl); #if defined(LWS_WITH_STATS) wsi->context->updated = 1; #endif return 1; /* handled */ } void lws_ssl_SSL_CTX_destroy(struct lws_vhost *vhost) { if (vhost->tls.ssl_ctx) SSL_CTX_free(vhost->tls.ssl_ctx); lws_ssl_destroy_client_ctx(vhost); #if defined(LWS_WITH_ACME) lws_tls_acme_sni_cert_destroy(vhost); #endif } void lws_ssl_context_destroy(struct lws_context *context) { // after 1.1.0 no need #if (OPENSSL_VERSION_NUMBER < 0x10100000) // <= 1.0.1f = old api, 1.0.1g+ = new api #if (OPENSSL_VERSION_NUMBER <= 0x1000106f) || defined(USE_WOLFSSL) ERR_remove_state(0); #else #if OPENSSL_VERSION_NUMBER >= 0x1010005f && \ !defined(LIBRESSL_VERSION_NUMBER) && \ !defined(OPENSSL_IS_BORINGSSL) ERR_remove_thread_state(); #else ERR_remove_thread_state(NULL); #endif #endif // after 1.1.0 no need #if (OPENSSL_VERSION_NUMBER >= 0x10002000) && (OPENSSL_VERSION_NUMBER <= 0x10100000) SSL_COMP_free_compression_methods(); #endif ERR_free_strings(); EVP_cleanup(); CRYPTO_cleanup_all_ex_data(); #endif } lws_tls_ctx * lws_tls_ctx_from_wsi(struct lws *wsi) { if (!wsi->tls.ssl) return NULL; return SSL_get_SSL_CTX(wsi->tls.ssl); } enum lws_ssl_capable_status __lws_tls_shutdown(struct lws *wsi) { int n; errno = 0; ERR_clear_error(); n = SSL_shutdown(wsi->tls.ssl); lwsl_debug("SSL_shutdown=%d for fd %d\n", n, wsi->desc.sockfd); switch (n) { case 1: /* successful completion */ n = shutdown(wsi->desc.sockfd, SHUT_WR); return LWS_SSL_CAPABLE_DONE; case 0: /* needs a retry */ __lws_change_pollfd(wsi, 0, LWS_POLLIN); return LWS_SSL_CAPABLE_MORE_SERVICE; default: /* fatal error, or WANT */ n = SSL_get_error(wsi->tls.ssl, n); if (n != SSL_ERROR_SYSCALL && n != SSL_ERROR_SSL) { if (SSL_want_read(wsi->tls.ssl)) { lwsl_debug("(wants read)\n"); __lws_change_pollfd(wsi, 0, LWS_POLLIN); return LWS_SSL_CAPABLE_MORE_SERVICE_READ; } if (SSL_want_write(wsi->tls.ssl)) { lwsl_debug("(wants write)\n"); __lws_change_pollfd(wsi, 0, LWS_POLLOUT); return LWS_SSL_CAPABLE_MORE_SERVICE_WRITE; } } return LWS_SSL_CAPABLE_ERROR; } } static int tops_fake_POLLIN_for_buffered_openssl(struct lws_context_per_thread *pt) { return lws_tls_fake_POLLIN_for_buffered(pt); } const struct lws_tls_ops tls_ops_openssl = { /* fake_POLLIN_for_buffered */ tops_fake_POLLIN_for_buffered_openssl, }; libwebsockets-3.2.1/lib/tls/openssl/tls.c000066400000000000000000000114151357643561300203750ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "tls/openssl/private.h" extern int openssl_websocket_private_data_index, openssl_SSL_CTX_private_data_index; char* lws_ssl_get_error_string(int status, int ret, char *buf, size_t len) { switch (status) { case SSL_ERROR_NONE: return lws_strncpy(buf, "SSL_ERROR_NONE", len); case SSL_ERROR_ZERO_RETURN: return lws_strncpy(buf, "SSL_ERROR_ZERO_RETURN", len); case SSL_ERROR_WANT_READ: return lws_strncpy(buf, "SSL_ERROR_WANT_READ", len); case SSL_ERROR_WANT_WRITE: return lws_strncpy(buf, "SSL_ERROR_WANT_WRITE", len); case SSL_ERROR_WANT_CONNECT: return lws_strncpy(buf, "SSL_ERROR_WANT_CONNECT", len); case SSL_ERROR_WANT_ACCEPT: return lws_strncpy(buf, "SSL_ERROR_WANT_ACCEPT", len); case SSL_ERROR_WANT_X509_LOOKUP: return lws_strncpy(buf, "SSL_ERROR_WANT_X509_LOOKUP", len); case SSL_ERROR_SYSCALL: switch (ret) { case 0: lws_snprintf(buf, len, "SSL_ERROR_SYSCALL: EOF"); return buf; case -1: #ifndef LWS_PLAT_OPTEE lws_snprintf(buf, len, "SSL_ERROR_SYSCALL: %s", strerror(errno)); #else lws_snprintf(buf, len, "SSL_ERROR_SYSCALL: %d", errno); #endif return buf; default: return strncpy(buf, "SSL_ERROR_SYSCALL", len); } case SSL_ERROR_SSL: return "SSL_ERROR_SSL"; default: return "SSL_ERROR_UNKNOWN"; } } void lws_tls_err_describe_clear(void) { char buf[160]; unsigned long l; do { l = ERR_get_error(); if (!l) break; ERR_error_string_n(l, buf, sizeof(buf)); lwsl_info(" openssl error: %s\n", buf); } while (l); lwsl_info("\n"); } #if LWS_MAX_SMP != 1 static pthread_mutex_t *openssl_mutexes; static void lws_openssl_lock_callback(int mode, int type, const char *file, int line) { (void)file; (void)line; if (mode & CRYPTO_LOCK) pthread_mutex_lock(&openssl_mutexes[type]); else pthread_mutex_unlock(&openssl_mutexes[type]); } static unsigned long lws_openssl_thread_id(void) { return (unsigned long)pthread_self(); } #endif int lws_context_init_ssl_library(const struct lws_context_creation_info *info) { #ifdef USE_WOLFSSL #ifdef USE_OLD_CYASSL lwsl_info(" Compiled with CyaSSL support\n"); #else lwsl_info(" Compiled with wolfSSL support\n"); #endif #else #if defined(LWS_WITH_BORINGSSL) lwsl_info(" Compiled with BoringSSL support\n"); #else lwsl_info(" Compiled with OpenSSL support\n"); #endif #endif if (!lws_check_opt(info->options, LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT)) { lwsl_info(" SSL disabled: no " "LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT\n"); return 0; } /* basic openssl init */ lwsl_info("Doing SSL library init\n"); #if OPENSSL_VERSION_NUMBER < 0x10100000L SSL_library_init(); OpenSSL_add_all_algorithms(); SSL_load_error_strings(); #else OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif #if defined(LWS_WITH_NETWORK) openssl_websocket_private_data_index = SSL_get_ex_new_index(0, "lws", NULL, NULL, NULL); openssl_SSL_CTX_private_data_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL, NULL); #endif #if LWS_MAX_SMP != 1 { int n; openssl_mutexes = (pthread_mutex_t *) OPENSSL_malloc(CRYPTO_num_locks() * sizeof(openssl_mutexes[0])); for (n = 0; n < CRYPTO_num_locks(); n++) pthread_mutex_init(&openssl_mutexes[n], NULL); /* * These "functions" disappeared in later OpenSSL which is * already threadsafe. */ (void)lws_openssl_thread_id; (void)lws_openssl_lock_callback; CRYPTO_set_id_callback(lws_openssl_thread_id); CRYPTO_set_locking_callback(lws_openssl_lock_callback); } #endif return 0; } void lws_context_deinit_ssl_library(struct lws_context *context) { #if LWS_MAX_SMP != 1 int n; if (!lws_check_opt(context->options, LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT)) return; CRYPTO_set_locking_callback(NULL); for (n = 0; n < CRYPTO_num_locks(); n++) pthread_mutex_destroy(&openssl_mutexes[n]); OPENSSL_free(openssl_mutexes); #endif } libwebsockets-3.2.1/lib/tls/openssl/x509.c000066400000000000000000000357101357643561300203040ustar00rootroot00000000000000/* * libwebsockets - OpenSSL-specific lws apis * * Copyright (C) 2010 - 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "tls/openssl/private.h" #if !defined(LWS_PLAT_OPTEE) static int dec(char c) { return c - '0'; } #endif static time_t lws_tls_openssl_asn1time_to_unix(ASN1_TIME *as) { #if !defined(LWS_PLAT_OPTEE) const char *p = (const char *)as->data; struct tm t; /* [YY]YYMMDDHHMMSSZ */ memset(&t, 0, sizeof(t)); if (strlen(p) == 13) { t.tm_year = (dec(p[0]) * 10) + dec(p[1]) + 100; p += 2; } else { t.tm_year = (dec(p[0]) * 1000) + (dec(p[1]) * 100) + (dec(p[2]) * 10) + dec(p[3]); p += 4; } t.tm_mon = (dec(p[0]) * 10) + dec(p[1]) - 1; p += 2; t.tm_mday = (dec(p[0]) * 10) + dec(p[1]) - 1; p += 2; t.tm_hour = (dec(p[0]) * 10) + dec(p[1]); p += 2; t.tm_min = (dec(p[0]) * 10) + dec(p[1]); p += 2; t.tm_sec = (dec(p[0]) * 10) + dec(p[1]); t.tm_isdst = 0; return mktime(&t); #else return (time_t)-1; #endif } int lws_tls_openssl_cert_info(X509 *x509, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len) { X509_NAME *xn; #if !defined(LWS_PLAT_OPTEE) char *p; #endif if (!x509) return -1; #if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(X509_get_notBefore) #define X509_get_notBefore(x) X509_getm_notBefore(x) #define X509_get_notAfter(x) X509_getm_notAfter(x) #endif switch (type) { case LWS_TLS_CERT_INFO_VALIDITY_FROM: buf->time = lws_tls_openssl_asn1time_to_unix( X509_get_notBefore(x509)); if (buf->time == (time_t)-1) return -1; break; case LWS_TLS_CERT_INFO_VALIDITY_TO: buf->time = lws_tls_openssl_asn1time_to_unix( X509_get_notAfter(x509)); if (buf->time == (time_t)-1) return -1; break; case LWS_TLS_CERT_INFO_COMMON_NAME: #if defined(LWS_PLAT_OPTEE) return -1; #else xn = X509_get_subject_name(x509); if (!xn) return -1; X509_NAME_oneline(xn, buf->ns.name, (int)len - 2); p = strstr(buf->ns.name, "/CN="); if (p) memmove(buf->ns.name, p + 4, strlen(p + 4) + 1); buf->ns.len = (int)strlen(buf->ns.name); return 0; #endif case LWS_TLS_CERT_INFO_ISSUER_NAME: xn = X509_get_issuer_name(x509); if (!xn) return -1; X509_NAME_oneline(xn, buf->ns.name, (int)len - 1); buf->ns.len = (int)strlen(buf->ns.name); return 0; case LWS_TLS_CERT_INFO_USAGE: #if defined(LWS_HAVE_X509_get_key_usage) buf->usage = X509_get_key_usage(x509); break; #else return -1; #endif case LWS_TLS_CERT_INFO_OPAQUE_PUBLIC_KEY: { #ifndef USE_WOLFSSL size_t klen = i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x509), NULL); uint8_t *tmp, *ptmp; if (!klen || klen > len) return -1; tmp = (uint8_t *)OPENSSL_malloc(klen); if (!tmp) return -1; ptmp = tmp; if (i2d_X509_PUBKEY( X509_get_X509_PUBKEY(x509), &ptmp) != (int)klen || !ptmp || lws_ptr_diff(ptmp, tmp) != (int)klen) { lwsl_info("%s: cert public key extraction failed\n", __func__); if (ptmp) OPENSSL_free(tmp); return -1; } buf->ns.len = (int)klen; memcpy(buf->ns.name, tmp, klen); OPENSSL_free(tmp); #endif return 0; } default: return -1; } return 0; } int lws_x509_info(struct lws_x509_cert *x509, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len) { return lws_tls_openssl_cert_info(x509->cert, type, buf, len); } #if defined(LWS_WITH_NETWORK) int lws_tls_vhost_cert_info(struct lws_vhost *vhost, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len) { #if defined(LWS_HAVE_SSL_CTX_get0_certificate) X509 *x509 = SSL_CTX_get0_certificate(vhost->tls.ssl_ctx); return lws_tls_openssl_cert_info(x509, type, buf, len); #else lwsl_notice("openssl is too old to support %s\n", __func__); return -1; #endif } int lws_tls_peer_cert_info(struct lws *wsi, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len) { int rc = 0; X509 *x509; wsi = lws_get_network_wsi(wsi); x509 = SSL_get_peer_certificate(wsi->tls.ssl); if (!x509) { lwsl_debug("no peer cert\n"); return -1; } switch (type) { case LWS_TLS_CERT_INFO_VERIFIED: buf->verified = SSL_get_verify_result(wsi->tls.ssl) == X509_V_OK; break; default: rc = lws_tls_openssl_cert_info(x509, type, buf, len); } X509_free(x509); return rc; } #endif int lws_x509_create(struct lws_x509_cert **x509) { *x509 = lws_malloc(sizeof(**x509), __func__); if (*x509) (*x509)->cert = NULL; return !(*x509); } int lws_x509_parse_from_pem(struct lws_x509_cert *x509, const void *pem, size_t len) { BIO* bio = BIO_new(BIO_s_mem()); BIO_write(bio, pem, (int)len); x509->cert = PEM_read_bio_X509(bio, NULL, NULL, NULL); BIO_free(bio); if (!x509->cert) { lwsl_err("%s: unable to parse PEM cert\n", __func__); lws_tls_err_describe_clear(); return -1; } return 0; } int lws_x509_verify(struct lws_x509_cert *x509, struct lws_x509_cert *trusted, const char *common_name) { char c[32], *p; int ret; if (common_name) { X509_NAME *xn = X509_get_subject_name(x509->cert); if (!xn) return -1; X509_NAME_oneline(xn, c, (int)sizeof(c) - 2); p = strstr(c, "/CN="); if (p) p = p + 4; else p = c; if (strcmp(p, common_name)) { lwsl_err("%s: common name mismatch\n", __func__); return -1; } } ret = X509_check_issued(trusted->cert, x509->cert); if (ret != X509_V_OK) { lwsl_err("%s: unable to verify cert relationship\n", __func__); lws_tls_err_describe_clear(); return -1; } return 0; } #if defined(LWS_WITH_JOSE) int lws_x509_public_to_jwk(struct lws_jwk *jwk, struct lws_x509_cert *x509, const char *curves, int rsa_min_bits) { int id, n, ret = -1, count; ASN1_OBJECT *obj = NULL; const EC_POINT *ecpoint; const EC_GROUP *ecgroup; EC_KEY *ecpub = NULL; X509_PUBKEY *pubkey; RSA *rsapub = NULL; BIGNUM *mpi[4]; EVP_PKEY *pkey; memset(jwk, 0, sizeof(*jwk)); pubkey = X509_get_X509_PUBKEY(x509->cert); if (!pubkey) { lwsl_err("%s: missing pubkey alg in cert\n", __func__); goto bail; } if (X509_PUBKEY_get0_param(&obj, NULL, NULL, NULL, pubkey) != 1) { lwsl_err("%s: missing pubkey alg in cert\n", __func__); goto bail; } id = OBJ_obj2nid(obj); if (id == NID_undef) { lwsl_err("%s: missing pubkey alg in cert\n", __func__); goto bail; } lwsl_debug("%s: key type %d \"%s\"\n", __func__, id, OBJ_nid2ln(id)); pkey = X509_get_pubkey(x509->cert); if (!pkey) { lwsl_notice("%s: unable to extract pubkey", __func__); goto bail; } switch (id) { case NID_X9_62_id_ecPublicKey: lwsl_debug("%s: EC key\n", __func__); jwk->kty = LWS_GENCRYPTO_KTY_EC; if (!curves) { lwsl_err("%s: ec curves not allowed\n", __func__); goto bail1; } ecpub = EVP_PKEY_get1_EC_KEY(pkey); if (!ecpub) { lwsl_notice("%s: missing EC pubkey\n", __func__); goto bail1; } ecpoint = EC_KEY_get0_public_key(ecpub); if (!ecpoint) { lwsl_err("%s: EC_KEY_get0_public_key failed\n", __func__); goto bail2; } ecgroup = EC_KEY_get0_group(ecpub); if (!ecgroup) { lwsl_err("%s: EC_KEY_get0_group failed\n", __func__); goto bail2; } /* validate the curve against ones we allow */ if (lws_genec_confirm_curve_allowed_by_tls_id(curves, EC_GROUP_get_curve_name(ecgroup), jwk)) /* already logged */ goto bail2; mpi[LWS_GENCRYPTO_EC_KEYEL_CRV] = NULL; mpi[LWS_GENCRYPTO_EC_KEYEL_X] = BN_new(); /* X */ mpi[LWS_GENCRYPTO_EC_KEYEL_D] = NULL; mpi[LWS_GENCRYPTO_EC_KEYEL_Y] = BN_new(); /* Y */ #if defined(LWS_HAVE_EC_POINT_get_affine_coordinates) if (EC_POINT_get_affine_coordinates(ecgroup, ecpoint, #else if (EC_POINT_get_affine_coordinates_GFp(ecgroup, ecpoint, #endif mpi[LWS_GENCRYPTO_EC_KEYEL_X], mpi[LWS_GENCRYPTO_EC_KEYEL_Y], NULL) != 1) { BN_clear_free(mpi[LWS_GENCRYPTO_EC_KEYEL_X]); BN_clear_free(mpi[LWS_GENCRYPTO_EC_KEYEL_Y]); lwsl_err("%s: EC_POINT_get_aff failed\n", __func__); goto bail2; } count = LWS_GENCRYPTO_EC_KEYEL_COUNT; n = LWS_GENCRYPTO_EC_KEYEL_X; break; case NID_rsaEncryption: lwsl_debug("%s: rsa key\n", __func__); jwk->kty = LWS_GENCRYPTO_KTY_RSA; rsapub = EVP_PKEY_get1_RSA(pkey); if (!rsapub) { lwsl_notice("%s: missing RSA pubkey\n", __func__); goto bail1; } if ((size_t)RSA_size(rsapub) * 8 < (size_t)rsa_min_bits) { lwsl_err("%s: key bits %d less than minimum %d\n", __func__, RSA_size(rsapub) * 8, rsa_min_bits); goto bail2; } #if defined(LWS_HAVE_RSA_SET0_KEY) /* we don't need d... but the api wants to write it */ RSA_get0_key(rsapub, (const BIGNUM **)&mpi[LWS_GENCRYPTO_RSA_KEYEL_N], (const BIGNUM **)&mpi[LWS_GENCRYPTO_RSA_KEYEL_E], (const BIGNUM **)&mpi[LWS_GENCRYPTO_RSA_KEYEL_D]); #else mpi[LWS_GENCRYPTO_RSA_KEYEL_E] = rsapub->e; mpi[LWS_GENCRYPTO_RSA_KEYEL_N] = rsapub->n; mpi[LWS_GENCRYPTO_RSA_KEYEL_D] = NULL; #endif count = LWS_GENCRYPTO_RSA_KEYEL_D; n = LWS_GENCRYPTO_RSA_KEYEL_E; break; default: lwsl_err("%s: unknown NID\n", __func__); goto bail2; } for (; n < count; n++) { if (!mpi[n]) continue; jwk->e[n].len = BN_num_bytes(mpi[n]); jwk->e[n].buf = lws_malloc(jwk->e[n].len, "certkeyimp"); if (!jwk->e[n].buf) { if (id == NID_X9_62_id_ecPublicKey) { BN_clear_free(mpi[LWS_GENCRYPTO_EC_KEYEL_X]); BN_clear_free(mpi[LWS_GENCRYPTO_EC_KEYEL_Y]); } goto bail2; } BN_bn2bin(mpi[n], jwk->e[n].buf); } if (id == NID_X9_62_id_ecPublicKey) { BN_clear_free(mpi[LWS_GENCRYPTO_EC_KEYEL_X]); BN_clear_free(mpi[LWS_GENCRYPTO_EC_KEYEL_Y]); } ret = 0; bail2: if (id == NID_X9_62_id_ecPublicKey) EC_KEY_free(ecpub); else RSA_free(rsapub); bail1: EVP_PKEY_free(pkey); bail: /* jwk destroy will clean any partial state */ if (ret) lws_jwk_destroy(jwk); return ret; } static int lws_x509_jwk_privkey_pem_pp_cb(char *buf, int size, int rwflag, void *u) { const char *pp = (const char *)u; int n = strlen(pp); if (n > size - 1) return -1; memcpy(buf, pp, n + 1); return n; } int lws_x509_jwk_privkey_pem(struct lws_jwk *jwk, void *pem, size_t len, const char *passphrase) { BIO* bio = BIO_new(BIO_s_mem()); BIGNUM *mpi, *dummy[6]; EVP_PKEY *pkey = NULL; EC_KEY *ecpriv = NULL; RSA *rsapriv = NULL; const BIGNUM *cmpi; int n, m, ret = -1; BIO_write(bio, pem, (int)len); PEM_read_bio_PrivateKey(bio, &pkey, lws_x509_jwk_privkey_pem_pp_cb, (void *)passphrase); BIO_free(bio); lws_explicit_bzero((void *)pem, len); if (!pkey) { lwsl_err("%s: unable to parse PEM privkey\n", __func__); lws_tls_err_describe_clear(); return -1; } /* confirm the key type matches the existing jwk situation */ switch (jwk->kty) { case LWS_GENCRYPTO_KTY_EC: if (EVP_PKEY_type(EVP_PKEY_id(pkey)) != EVP_PKEY_EC) { lwsl_err("%s: jwk is EC but privkey isn't\n", __func__); goto bail; } ecpriv = EVP_PKEY_get1_EC_KEY(pkey); if (!ecpriv) { lwsl_notice("%s: missing EC key\n", __func__); goto bail; } cmpi = EC_KEY_get0_private_key(ecpriv); /* quick size check first */ n = BN_num_bytes(cmpi); if (jwk->e[LWS_GENCRYPTO_EC_KEYEL_Y].len != (uint32_t)n) { lwsl_err("%s: jwk key size doesn't match\n", __func__); goto bail1; } /* TODO.. check public curve / group + point */ jwk->e[LWS_GENCRYPTO_EC_KEYEL_D].len = n; jwk->e[LWS_GENCRYPTO_EC_KEYEL_D].buf = lws_malloc(n, "ec"); if (!jwk->e[LWS_GENCRYPTO_EC_KEYEL_D].buf) goto bail1; m = BN_bn2binpad(cmpi, jwk->e[LWS_GENCRYPTO_EC_KEYEL_D].buf, jwk->e[LWS_GENCRYPTO_EC_KEYEL_D].len); if ((unsigned int)m != (unsigned int)BN_num_bytes(cmpi)) goto bail1; break; case LWS_GENCRYPTO_KTY_RSA: if (EVP_PKEY_type(EVP_PKEY_id(pkey)) != EVP_PKEY_RSA) { lwsl_err("%s: RSA jwk, non-RSA privkey\n", __func__); goto bail; } rsapriv = EVP_PKEY_get1_RSA(pkey); if (!rsapriv) { lwsl_notice("%s: missing RSA key\n", __func__); goto bail; } #if defined(LWS_HAVE_RSA_SET0_KEY) RSA_get0_key(rsapriv, (const BIGNUM **)&dummy[0], /* n */ (const BIGNUM **)&dummy[1], /* e */ (const BIGNUM **)&mpi); /* d */ RSA_get0_factors(rsapriv, (const BIGNUM **)&dummy[4], /* p */ (const BIGNUM **)&dummy[5]); /* q */ #else dummy[0] = rsapriv->n; dummy[1] = rsapriv->e; dummy[4] = rsapriv->p; dummy[5] = rsapriv->q; mpi = rsapriv->d; #endif /* quick size check first */ n = BN_num_bytes(mpi); if (jwk->e[LWS_GENCRYPTO_RSA_KEYEL_N].len != (uint32_t)n) { lwsl_err("%s: jwk key size doesn't match\n", __func__); goto bail1; } /* then check that n & e match what we got from the cert */ dummy[2] = BN_bin2bn(jwk->e[LWS_GENCRYPTO_RSA_KEYEL_N].buf, jwk->e[LWS_GENCRYPTO_RSA_KEYEL_N].len, NULL); dummy[3] = BN_bin2bn(jwk->e[LWS_GENCRYPTO_RSA_KEYEL_E].buf, jwk->e[LWS_GENCRYPTO_RSA_KEYEL_E].len, NULL); m = BN_cmp(dummy[2], dummy[0]) | BN_cmp(dummy[3], dummy[1]); BN_clear_free(dummy[2]); BN_clear_free(dummy[3]); if (m) { lwsl_err("%s: privkey doesn't match jwk pubkey\n", __func__); goto bail1; } /* accept d from the PEM privkey into the JWK */ jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].len = n; jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf = lws_malloc(n, "privjk"); if (!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf) goto bail1; BN_bn2bin(mpi, jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf); /* accept p and q from the PEM privkey into the JWK */ jwk->e[LWS_GENCRYPTO_RSA_KEYEL_P].len = BN_num_bytes(dummy[4]); jwk->e[LWS_GENCRYPTO_RSA_KEYEL_P].buf = lws_malloc(n, "privjk"); if (!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_P].buf) { lws_free_set_NULL(jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf); goto bail1; } BN_bn2bin(dummy[4], jwk->e[LWS_GENCRYPTO_RSA_KEYEL_P].buf); jwk->e[LWS_GENCRYPTO_RSA_KEYEL_Q].len = BN_num_bytes(dummy[5]); jwk->e[LWS_GENCRYPTO_RSA_KEYEL_Q].buf = lws_malloc(n, "privjk"); if (!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_Q].buf) { lws_free_set_NULL(jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf); lws_free_set_NULL(jwk->e[LWS_GENCRYPTO_RSA_KEYEL_P].buf); goto bail1; } BN_bn2bin(dummy[5], jwk->e[LWS_GENCRYPTO_RSA_KEYEL_Q].buf); break; default: lwsl_err("%s: JWK has unknown kty %d\n", __func__, jwk->kty); return -1; } ret = 0; bail1: if (jwk->kty == LWS_GENCRYPTO_KTY_EC) EC_KEY_free(ecpriv); else RSA_free(rsapriv); bail: EVP_PKEY_free(pkey); return ret; } #endif void lws_x509_destroy(struct lws_x509_cert **x509) { if (!*x509) return; if ((*x509)->cert) { X509_free((*x509)->cert); (*x509)->cert = NULL; } lws_free_set_NULL(*x509); } libwebsockets-3.2.1/lib/tls/private-network.h000066400000000000000000000130431357643561300212550ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is included from core/private.h if LWS_WITH_TLS */ struct lws_context_per_thread; struct lws_tls_ops { int (*fake_POLLIN_for_buffered)(struct lws_context_per_thread *pt); }; struct lws_context_tls { char alpn_discovered[32]; const char *alpn_default; time_t last_cert_check_s; struct lws_dll2_owner cc_owner; int count_client_contexts; }; struct lws_pt_tls { struct lws_dll2_owner dll_pending_tls_owner; }; struct lws_tls_ss_pieces; struct alpn_ctx { uint8_t data[23]; uint8_t len; }; struct lws_vhost_tls { lws_tls_ctx *ssl_ctx; lws_tls_ctx *ssl_client_ctx; const char *alpn; struct lws_tls_ss_pieces *ss; /* for acme tls certs */ char *alloc_cert_path; char *key_path; #if defined(LWS_WITH_MBEDTLS) lws_tls_x509 *x509_client_CA; #endif char ecdh_curve[16]; struct alpn_ctx alpn_ctx; int use_ssl; int allow_non_ssl_on_ssl_port; int ssl_info_event_mask; unsigned int user_supplied_ssl_ctx:1; unsigned int skipped_certs:1; }; struct lws_lws_tls { lws_tls_conn *ssl; lws_tls_bio *client_bio; struct lws_dll2 dll_pending_tls; unsigned int use_ssl; unsigned int redirect_to_https:1; }; LWS_EXTERN void lws_context_init_alpn(struct lws_vhost *vhost); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ssl_capable_read(struct lws *wsi, unsigned char *buf, int len); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ssl_capable_write(struct lws *wsi, unsigned char *buf, int len); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ssl_pending(struct lws *wsi); LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_server_socket_service_ssl(struct lws *new_wsi, lws_sockfd_type accept_fd); LWS_EXTERN int lws_ssl_close(struct lws *wsi); LWS_EXTERN void lws_ssl_SSL_CTX_destroy(struct lws_vhost *vhost); LWS_EXTERN void lws_ssl_context_destroy(struct lws_context *context); void __lws_ssl_remove_wsi_from_buffered_list(struct lws *wsi); LWS_VISIBLE void lws_ssl_remove_wsi_from_buffered_list(struct lws *wsi); LWS_EXTERN int lws_ssl_client_bio_create(struct lws *wsi); LWS_EXTERN int lws_ssl_client_connect1(struct lws *wsi); LWS_EXTERN int lws_ssl_client_connect2(struct lws *wsi, char *errbuf, int len); LWS_EXTERN int lws_tls_fake_POLLIN_for_buffered(struct lws_context_per_thread *pt); LWS_EXTERN int lws_gate_accepts(struct lws_context *context, int on); LWS_EXTERN void lws_ssl_bind_passphrase(lws_tls_ctx *ssl_ctx, int is_client, const struct lws_context_creation_info *info); LWS_EXTERN void lws_ssl_info_callback(const lws_tls_conn *ssl, int where, int ret); LWS_EXTERN int lws_tls_server_certs_load(struct lws_vhost *vhost, struct lws *wsi, const char *cert, const char *private_key, const char *mem_cert, size_t len_mem_cert, const char *mem_privkey, size_t mem_privkey_len); LWS_EXTERN enum lws_tls_extant lws_tls_generic_cert_checks(struct lws_vhost *vhost, const char *cert, const char *private_key); #if !defined(LWS_NO_SERVER) LWS_EXTERN int lws_context_init_server_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost); void lws_tls_acme_sni_cert_destroy(struct lws_vhost *vhost); #else #define lws_context_init_server_ssl(_a, _b) (0) #define lws_tls_acme_sni_cert_destroy(_a) #endif LWS_EXTERN void lws_ssl_destroy(struct lws_vhost *vhost); /* * lws_tls_ abstract backend implementations */ LWS_EXTERN int lws_tls_server_client_cert_verify_config(struct lws_vhost *vh); LWS_EXTERN int lws_tls_server_vhost_backend_init(const struct lws_context_creation_info *info, struct lws_vhost *vhost, struct lws *wsi); LWS_EXTERN int lws_tls_server_new_nonblocking(struct lws *wsi, lws_sockfd_type accept_fd); LWS_EXTERN enum lws_ssl_capable_status lws_tls_server_accept(struct lws *wsi); LWS_EXTERN enum lws_ssl_capable_status lws_tls_server_abort_connection(struct lws *wsi); LWS_EXTERN enum lws_ssl_capable_status __lws_tls_shutdown(struct lws *wsi); LWS_EXTERN enum lws_ssl_capable_status lws_tls_client_connect(struct lws *wsi); LWS_EXTERN int lws_tls_client_confirm_peer_cert(struct lws *wsi, char *ebuf, int ebuf_len); LWS_EXTERN int lws_tls_client_create_vhost_context(struct lws_vhost *vh, const struct lws_context_creation_info *info, const char *cipher_list, const char *ca_filepath, const void *ca_mem, unsigned int ca_mem_len, const char *cert_filepath, const void *cert_mem, unsigned int cert_mem_len, const char *private_key_filepath); LWS_EXTERN lws_tls_ctx * lws_tls_ctx_from_wsi(struct lws *wsi); LWS_EXTERN int lws_ssl_get_error(struct lws *wsi, int n); LWS_EXTERN int lws_context_init_client_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost); LWS_EXTERN void lws_ssl_info_callback(const lws_tls_conn *ssl, int where, int ret); int lws_tls_fake_POLLIN_for_buffered(struct lws_context_per_thread *pt); libwebsockets-3.2.1/lib/tls/private.h000066400000000000000000000122351357643561300175700ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is included from core/private.h if LWS_WITH_TLS */ #if !defined(__LWS_TLS_PRIVATE_H__) #define __LWS_TLS_PRIVATE_H__ #if defined(LWS_WITH_TLS) #if defined(USE_WOLFSSL) #if defined(USE_OLD_CYASSL) #if defined(_WIN32) #include #include #else #include #endif #include #include #else #if defined(_WIN32) #include #include #else #include #endif #include #include #define OPENSSL_NO_TLSEXT #endif /* not USE_OLD_CYASSL */ #else /* WOLFSSL */ #if defined(LWS_WITH_ESP32) #define OPENSSL_NO_TLSEXT #if !defined(LWS_AMAZON_RTOS) /* AMAZON RTOS has its own setting via MTK_MBEDTLS_CONFIG_FILE */ #undef MBEDTLS_CONFIG_FILE #define MBEDTLS_CONFIG_FILE #endif #include #include #include #include #include "tls/mbedtls/wrapper/include/openssl/ssl.h" /* wrapper !!!! */ #else /* not esp32 */ #if defined(LWS_WITH_MBEDTLS) #include #include #include #include #include #include #include #include "tls/mbedtls/wrapper/include/openssl/ssl.h" /* wrapper !!!! */ #else #include #include #include #include #include #include #include #include #ifdef LWS_HAVE_OPENSSL_ECDH_H #include #endif #if !defined(LWS_HAVE_EVP_MD_CTX_free) #define EVP_MD_CTX_free EVP_MD_CTX_destroy #endif #include #endif /* not mbedtls */ #if defined(OPENSSL_VERSION_NUMBER) #if (OPENSSL_VERSION_NUMBER < 0x0009080afL) /* * later openssl defines this to negate the presence of tlsext... but it was * only introduced at 0.9.8j. Earlier versions don't know it exists so don't * define it... making it look like the feature exists... */ #define OPENSSL_NO_TLSEXT #endif #endif #endif /* not ESP32 */ #endif /* not USE_WOLFSSL */ #endif /* LWS_WITH_TLS */ enum lws_tls_extant { LWS_TLS_EXTANT_NO, LWS_TLS_EXTANT_YES, LWS_TLS_EXTANT_ALTERNATIVE }; #if defined(LWS_WITH_TLS) typedef SSL lws_tls_conn; typedef SSL_CTX lws_tls_ctx; typedef BIO lws_tls_bio; typedef X509 lws_tls_x509; #if defined(LWS_WITH_NETWORK) #include "tls/private-network.h" #endif LWS_EXTERN int lws_context_init_ssl_library(const struct lws_context_creation_info *info); LWS_EXTERN void lws_context_deinit_ssl_library(struct lws_context *context); #define LWS_SSL_ENABLED(vh) (vh && vh->tls.use_ssl) extern const struct lws_tls_ops tls_ops_openssl, tls_ops_mbedtls; struct lws_ec_valid_curves { int id; const char *jwa_name; /* list terminates with NULL jwa_name */ }; LWS_EXTERN enum lws_tls_extant lws_tls_use_any_upgrade_check_extant(const char *name); LWS_EXTERN int openssl_websocket_private_data_index; LWS_EXTERN void lws_tls_err_describe_clear(void); LWS_EXTERN int lws_tls_openssl_cert_info(X509 *x509, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len); LWS_EXTERN int lws_tls_check_all_cert_lifetimes(struct lws_context *context); LWS_EXTERN int lws_tls_alloc_pem_to_der_file(struct lws_context *context, const char *filename, const char *inbuf, lws_filepos_t inlen, uint8_t **buf, lws_filepos_t *amount); LWS_EXTERN char * lws_ssl_get_error_string(int status, int ret, char *buf, size_t len); int lws_gencrypto_bits_to_bytes(int bits); void lws_gencrypto_destroy_elements(struct lws_gencrypto_keyelem *el, int m); /* genec */ struct lws_gencrypto_keyelem; struct lws_ec_curves; LWS_EXTERN const struct lws_ec_curves lws_ec_curves[4]; const struct lws_ec_curves * lws_genec_curve(const struct lws_ec_curves *table, const char *name); LWS_VISIBLE void lws_genec_destroy_elements(struct lws_gencrypto_keyelem *el); int lws_gencrypto_mbedtls_rngf(void *context, unsigned char *buf, size_t len); int lws_genec_confirm_curve_allowed_by_tls_id(const char *allowed, int id, struct lws_jwk *jwk); #endif #endif libwebsockets-3.2.1/lib/tls/tls-client.c000066400000000000000000000105331357643561300201660ustar00rootroot00000000000000/* * libwebsockets - client-related ssl code independent of backend * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" int lws_ssl_client_connect1(struct lws *wsi) { struct lws_context *context = wsi->context; int n = 0; lws_latency_pre(context, wsi); n = lws_tls_client_connect(wsi); lws_latency(context, wsi, "SSL_connect hs", n, n > 0); switch (n) { case LWS_SSL_CAPABLE_ERROR: return -1; case LWS_SSL_CAPABLE_DONE: return 1; /* connected */ case LWS_SSL_CAPABLE_MORE_SERVICE_WRITE: lws_callback_on_writable(wsi); /* fallthru */ case LWS_SSL_CAPABLE_MORE_SERVICE: case LWS_SSL_CAPABLE_MORE_SERVICE_READ: lwsi_set_state(wsi, LRS_WAITING_SSL); break; } return 0; /* retry */ } int lws_ssl_client_connect2(struct lws *wsi, char *errbuf, int len) { int n = 0; if (lwsi_state(wsi) == LRS_WAITING_SSL) { lws_latency_pre(wsi->context, wsi); n = lws_tls_client_connect(wsi); lwsl_debug("%s: SSL_connect says %d\n", __func__, n); lws_latency(wsi->context, wsi, "SSL_connect LRS_WAITING_SSL", n, n > 0); switch (n) { case LWS_SSL_CAPABLE_ERROR: lws_snprintf(errbuf, len, "client connect failed"); return -1; case LWS_SSL_CAPABLE_DONE: break; /* connected */ case LWS_SSL_CAPABLE_MORE_SERVICE_WRITE: lws_callback_on_writable(wsi); /* fallthru */ case LWS_SSL_CAPABLE_MORE_SERVICE_READ: lwsi_set_state(wsi, LRS_WAITING_SSL); /* fallthru */ case LWS_SSL_CAPABLE_MORE_SERVICE: return 0; } } if (lws_tls_client_confirm_peer_cert(wsi, errbuf, len)) return -1; return 1; } int lws_context_init_client_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost) { const char *private_key_filepath = info->ssl_private_key_filepath; const char *cert_filepath = info->ssl_cert_filepath; const char *ca_filepath = info->ssl_ca_filepath; const char *cipher_list = info->ssl_cipher_list; struct lws wsi; if (vhost->options & LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG) return 0; if (vhost->tls.ssl_ctx) { cert_filepath = NULL; private_key_filepath = NULL; ca_filepath = NULL; } /* * for backwards-compatibility default to using ssl_... members, but * if the newer client-specific ones are given, use those */ if (info->client_ssl_cipher_list) cipher_list = info->client_ssl_cipher_list; if (info->client_ssl_cert_filepath) cert_filepath = info->client_ssl_cert_filepath; if (info->client_ssl_private_key_filepath) private_key_filepath = info->client_ssl_private_key_filepath; if (info->client_ssl_ca_filepath) ca_filepath = info->client_ssl_ca_filepath; if (!lws_check_opt(info->options, LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT)) return 0; if (vhost->tls.ssl_client_ctx) return 0; if (info->provided_client_ssl_ctx) { /* use the provided OpenSSL context if given one */ vhost->tls.ssl_client_ctx = info->provided_client_ssl_ctx; /* nothing for lib to delete */ vhost->tls.user_supplied_ssl_ctx = 1; return 0; } if (lws_tls_client_create_vhost_context(vhost, info, cipher_list, ca_filepath, info->client_ssl_ca_mem, info->client_ssl_ca_mem_len, cert_filepath, info->client_ssl_cert_mem, info->client_ssl_cert_mem_len, private_key_filepath)) return 1; lwsl_info("created client ssl context for %s\n", vhost->name); /* * give him a fake wsi with context set, so he can use * lws_get_context() in the callback */ memset(&wsi, 0, sizeof(wsi)); wsi.vhost = vhost; /* not a real bound wsi */ wsi.context = vhost->context; vhost->protocols[0].callback(&wsi, LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS, vhost->tls.ssl_client_ctx, NULL, 0); return 0; } libwebsockets-3.2.1/lib/tls/tls-network.c000066400000000000000000000141251357643561300204020ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" /* * fakes POLLIN on all tls guys with buffered rx * * returns nonzero if any tls guys had POLLIN faked */ int lws_tls_fake_POLLIN_for_buffered(struct lws_context_per_thread *pt) { int ret = 0; lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, lws_dll2_get_head(&pt->tls.dll_pending_tls_owner)) { struct lws *wsi = lws_container_of(p, struct lws, tls.dll_pending_tls); pt->fds[wsi->position_in_fds_table].revents |= pt->fds[wsi->position_in_fds_table].events & LWS_POLLIN; ret |= pt->fds[wsi->position_in_fds_table].revents & LWS_POLLIN; } lws_end_foreach_dll_safe(p, p1); return !!ret; } void __lws_ssl_remove_wsi_from_buffered_list(struct lws *wsi) { lws_dll2_remove(&wsi->tls.dll_pending_tls); } void lws_ssl_remove_wsi_from_buffered_list(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi]; lws_pt_lock(pt, __func__); __lws_ssl_remove_wsi_from_buffered_list(wsi); lws_pt_unlock(pt); } int lws_tls_check_cert_lifetime(struct lws_vhost *v) { time_t now = (time_t)lws_now_secs(), life = 0; struct lws_acme_cert_aging_args caa; union lws_tls_cert_info_results ir; int n; if (v->tls.ssl_ctx && !v->tls.skipped_certs) { if (now < 1542933698) /* Nov 23 2018 00:42 UTC */ /* our clock is wrong and we can't judge the certs */ return -1; n = lws_tls_vhost_cert_info(v, LWS_TLS_CERT_INFO_VALIDITY_TO, &ir, 0); if (n) return 1; life = (ir.time - now) / (24 * 3600); lwsl_notice(" vhost %s: cert expiry: %dd\n", v->name, (int)life); } else lwsl_info(" vhost %s: no cert\n", v->name); memset(&caa, 0, sizeof(caa)); caa.vh = v; lws_broadcast(&v->context->pt[0], LWS_CALLBACK_VHOST_CERT_AGING, (void *)&caa, (size_t)(ssize_t)life); return 0; } int lws_tls_check_all_cert_lifetimes(struct lws_context *context) { struct lws_vhost *v = context->vhost_list; while (v) { if (lws_tls_check_cert_lifetime(v) < 0) return -1; v = v->vhost_next; } return 0; } /* * LWS_TLS_EXTANT_NO : skip adding the cert * LWS_TLS_EXTANT_YES : use the cert and private key paths normally * LWS_TLS_EXTANT_ALTERNATIVE: normal paths not usable, try alternate if poss */ enum lws_tls_extant lws_tls_generic_cert_checks(struct lws_vhost *vhost, const char *cert, const char *private_key) { int n, m; /* * The user code can choose to either pass the cert and * key filepaths using the info members like this, or it can * leave them NULL; force the vhost SSL_CTX init using the info * options flag LWS_SERVER_OPTION_CREATE_VHOST_SSL_CTX; and * set up the cert himself using the user callback * LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS, which * happened just above and has the vhost SSL_CTX * in the user * parameter. */ if (!cert || !private_key) return LWS_TLS_EXTANT_NO; n = lws_tls_use_any_upgrade_check_extant(cert); if (n == LWS_TLS_EXTANT_ALTERNATIVE) return LWS_TLS_EXTANT_ALTERNATIVE; m = lws_tls_use_any_upgrade_check_extant(private_key); if (m == LWS_TLS_EXTANT_ALTERNATIVE) return LWS_TLS_EXTANT_ALTERNATIVE; if ((n == LWS_TLS_EXTANT_NO || m == LWS_TLS_EXTANT_NO) && (vhost->options & LWS_SERVER_OPTION_IGNORE_MISSING_CERT)) { lwsl_notice("Ignoring missing %s or %s\n", cert, private_key); vhost->tls.skipped_certs = 1; return LWS_TLS_EXTANT_NO; } /* * the cert + key exist */ return LWS_TLS_EXTANT_YES; } #if !defined(LWS_NO_SERVER) /* * update the cert for every vhost using the given path */ LWS_VISIBLE int lws_tls_cert_updated(struct lws_context *context, const char *certpath, const char *keypath, const char *mem_cert, size_t len_mem_cert, const char *mem_privkey, size_t len_mem_privkey) { struct lws wsi; wsi.context = context; lws_start_foreach_ll(struct lws_vhost *, v, context->vhost_list) { wsi.vhost = v; /* not a real bound wsi */ if (v->tls.alloc_cert_path && v->tls.key_path && !strcmp(v->tls.alloc_cert_path, certpath) && !strcmp(v->tls.key_path, keypath)) { lws_tls_server_certs_load(v, &wsi, certpath, keypath, mem_cert, len_mem_cert, mem_privkey, len_mem_privkey); if (v->tls.skipped_certs) lwsl_notice("%s: vhost %s: cert unset\n", __func__, v->name); } } lws_end_foreach_ll(v, vhost_next); return 0; } #endif int lws_gate_accepts(struct lws_context *context, int on) { struct lws_vhost *v = context->vhost_list; lwsl_notice("%s: on = %d\n", __func__, on); #if defined(LWS_WITH_STATS) context->updated = 1; #endif while (v) { if (v->tls.use_ssl && v->lserv_wsi && lws_change_pollfd(v->lserv_wsi, (LWS_POLLIN) * !on, (LWS_POLLIN) * on)) lwsl_notice("Unable to set accept POLLIN %d\n", on); v = v->vhost_next; } return 0; } /* comma-separated alpn list, like "h2,http/1.1" to openssl alpn format */ int lws_alpn_comma_to_openssl(const char *comma, uint8_t *os, int len) { uint8_t *oos = os, *plen = NULL; while (*comma && len > 1) { if (!plen && *comma == ' ') { comma++; continue; } if (!plen) { plen = os++; len--; } if (*comma == ',') { *plen = lws_ptr_diff(os, plen + 1); plen = NULL; comma++; } else { *os++ = *comma++; len--; } } if (plen) *plen = lws_ptr_diff(os, plen + 1); return lws_ptr_diff(os, oos); } libwebsockets-3.2.1/lib/tls/tls-server.c000066400000000000000000000302731357643561300202210ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #if defined(LWS_WITH_MBEDTLS) || (defined(OPENSSL_VERSION_NUMBER) && \ OPENSSL_VERSION_NUMBER >= 0x10002000L) static int alpn_cb(SSL *s, const unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg) { #if !defined(LWS_WITH_MBEDTLS) struct alpn_ctx *alpn_ctx = (struct alpn_ctx *)arg; if (SSL_select_next_proto((unsigned char **)out, outlen, alpn_ctx->data, alpn_ctx->len, in, inlen) != OPENSSL_NPN_NEGOTIATED) return SSL_TLSEXT_ERR_NOACK; #endif return SSL_TLSEXT_ERR_OK; } #endif void lws_context_init_alpn(struct lws_vhost *vhost) { #if defined(LWS_WITH_MBEDTLS) || (defined(OPENSSL_VERSION_NUMBER) && \ OPENSSL_VERSION_NUMBER >= 0x10002000L) const char *alpn_comma = vhost->context->tls.alpn_default; if (vhost->tls.alpn) alpn_comma = vhost->tls.alpn; lwsl_info(" Server '%s' advertising ALPN: %s\n", vhost->name, alpn_comma); vhost->tls.alpn_ctx.len = lws_alpn_comma_to_openssl(alpn_comma, vhost->tls.alpn_ctx.data, sizeof(vhost->tls.alpn_ctx.data) - 1); SSL_CTX_set_alpn_select_cb(vhost->tls.ssl_ctx, alpn_cb, &vhost->tls.alpn_ctx); #else lwsl_err( " HTTP2 / ALPN configured but not supported by OpenSSL 0x%lx\n", OPENSSL_VERSION_NUMBER); #endif // OPENSSL_VERSION_NUMBER >= 0x10002000L } int lws_tls_server_conn_alpn(struct lws *wsi) { #if defined(LWS_WITH_MBEDTLS) || (defined(OPENSSL_VERSION_NUMBER) && \ OPENSSL_VERSION_NUMBER >= 0x10002000L) const unsigned char *name = NULL; char cstr[10]; unsigned len; if (!wsi->tls.ssl) return 0; SSL_get0_alpn_selected(wsi->tls.ssl, &name, &len); if (!len) { lwsl_info("no ALPN upgrade\n"); return 0; } if (len > sizeof(cstr) - 1) len = sizeof(cstr) - 1; memcpy(cstr, name, len); cstr[len] = '\0'; lwsl_info("negotiated '%s' using ALPN\n", cstr); wsi->tls.use_ssl |= LCCSCF_USE_SSL; return lws_role_call_alpn_negotiated(wsi, (const char *)cstr); #endif // OPENSSL_VERSION_NUMBER >= 0x10002000L return 0; } #if !defined(LWS_NO_SERVER) static void lws_sul_tls_cb(lws_sorted_usec_list_t *sul) { struct lws_context_per_thread *pt = lws_container_of(sul, struct lws_context_per_thread, sul_tls); lws_tls_check_all_cert_lifetimes(pt->context); __lws_sul_insert(&pt->pt_sul_owner, &pt->sul_tls, (lws_usec_t)24 * 3600 * LWS_US_PER_SEC); } LWS_VISIBLE int lws_context_init_server_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost) { struct lws_context *context = vhost->context; struct lws wsi; if (!lws_check_opt(info->options, LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT)) { vhost->tls.use_ssl = 0; return 0; } /* * If he is giving a server cert, take it as a sign he wants to use * it on this vhost. User code can leave the cert filepath NULL and * set the LWS_SERVER_OPTION_CREATE_VHOST_SSL_CTX option itself, in * which case he's expected to set up the cert himself at * LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS, which * provides the vhost SSL_CTX * in the user parameter. */ if (info->ssl_cert_filepath || info->server_ssl_cert_mem) vhost->options |= LWS_SERVER_OPTION_CREATE_VHOST_SSL_CTX; if (info->port != CONTEXT_PORT_NO_LISTEN) { vhost->tls.use_ssl = lws_check_opt(vhost->options, LWS_SERVER_OPTION_CREATE_VHOST_SSL_CTX); if (vhost->tls.use_ssl && info->ssl_cipher_list) lwsl_notice(" SSL ciphers: '%s'\n", info->ssl_cipher_list); if (vhost->tls.use_ssl) lwsl_notice(" Using SSL mode\n"); else lwsl_notice(" Using non-SSL mode\n"); } /* * give him a fake wsi with context + vhost set, so he can use * lws_get_context() in the callback */ memset(&wsi, 0, sizeof(wsi)); wsi.vhost = vhost; /* not a real bound wsi */ wsi.context = context; /* * as a server, if we are requiring clients to identify themselves * then set the backend up for it */ if (lws_check_opt(info->options, LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT)) /* Normally SSL listener rejects non-ssl, optionally allow */ vhost->tls.allow_non_ssl_on_ssl_port = 1; /* * give user code a chance to load certs into the server * allowing it to verify incoming client certs */ if (vhost->tls.use_ssl) { if (lws_tls_server_vhost_backend_init(info, vhost, &wsi)) return -1; lws_tls_server_client_cert_verify_config(vhost); if (vhost->protocols[0].callback(&wsi, LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS, vhost->tls.ssl_ctx, vhost, 0)) return -1; } if (vhost->tls.use_ssl) lws_context_init_alpn(vhost); /* check certs once a day */ context->pt[0].sul_tls.cb = lws_sul_tls_cb; __lws_sul_insert(&context->pt[0].pt_sul_owner, &context->pt[0].sul_tls, (lws_usec_t)24 * 3600 * LWS_US_PER_SEC); return 0; } #endif LWS_VISIBLE int lws_server_socket_service_ssl(struct lws *wsi, lws_sockfd_type accept_fd) { struct lws_context *context = wsi->context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws_vhost *vh; char buf[256]; int n; (void)buf; if (!LWS_SSL_ENABLED(wsi->vhost)) return 0; switch (lwsi_state(wsi)) { case LRS_SSL_INIT: if (wsi->tls.ssl) lwsl_err("%s: leaking ssl\n", __func__); if (accept_fd == LWS_SOCK_INVALID) assert(0); if (context->simultaneous_ssl_restriction && context->simultaneous_ssl >= context->simultaneous_ssl_restriction) { lwsl_notice("unable to deal with SSL connection\n"); return 1; } if (lws_tls_server_new_nonblocking(wsi, accept_fd)) { if (accept_fd != LWS_SOCK_INVALID) compatible_close(accept_fd); goto fail; } if (context->simultaneous_ssl_restriction && ++context->simultaneous_ssl == context->simultaneous_ssl_restriction) /* that was the last allowed SSL connection */ lws_gate_accepts(context, 0); #if defined(LWS_WITH_STATS) context->updated = 1; #endif /* * we are not accepted yet, but we need to enter ourselves * as a live connection. That way we can retry when more * pieces come if we're not sorted yet */ lwsi_set_state(wsi, LRS_SSL_ACK_PENDING); lws_pt_lock(pt, __func__); if (__insert_wsi_socket_into_fds(context, wsi)) { lwsl_err("%s: failed to insert into fds\n", __func__); goto fail; } lws_pt_unlock(pt); lws_set_timeout(wsi, PENDING_TIMEOUT_SSL_ACCEPT, context->timeout_secs); lwsl_debug("inserted SSL accept into fds, trying SSL_accept\n"); /* fallthru */ case LRS_SSL_ACK_PENDING: if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_err("%s: lws_change_pollfd failed\n", __func__); goto fail; } lws_latency_pre(context, wsi); if (wsi->vhost->tls.allow_non_ssl_on_ssl_port) { n = recv(wsi->desc.sockfd, (char *)pt->serv_buf, context->pt_serv_buf_size, MSG_PEEK); /* * We have LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT.. * this just means don't hang up on him because of no * tls hello... what happens next is driven by * additional option flags: * * none: fail the connection * * LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS: * Destroy the TLS, issue a redirect using plaintext * http (this may not be accepted by a client that * has visited the site before and received an STS * header). * * LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER: * Destroy the TLS, continue and serve normally * using http * * LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG: * Destroy the TLS, apply whatever role and protocol * were told in the vhost info struct * .listen_accept_role / .listen_accept_protocol and * continue with that */ if (n >= 1 && pt->serv_buf[0] >= ' ') { /* * TLS content-type for Handshake is 0x16, and * for ChangeCipherSpec Record, it's 0x14 * * A non-ssl session will start with the HTTP * method in ASCII. If we see it's not a legit * SSL handshake kill the SSL for this * connection and try to handle as a HTTP * connection upgrade directly. */ wsi->tls.use_ssl = 0; lws_tls_server_abort_connection(wsi); /* * care... this creates wsi with no ssl when ssl * is enabled and normally mandatory */ wsi->tls.ssl = NULL; if (lws_check_opt(wsi->vhost->options, LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS)) { lwsl_info("%s: redirecting from http " "to https\n", __func__); wsi->tls.redirect_to_https = 1; goto notls_accepted; } if (lws_check_opt(wsi->vhost->options, LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER)) { lwsl_info("%s: allowing unencrypted " "http service on tls port\n", __func__); goto notls_accepted; } if (lws_check_opt(wsi->vhost->options, LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG)) { if (lws_http_to_fallback(wsi, NULL, 0)) goto fail; lwsl_info("%s: allowing non-tls " "fallback\n", __func__); goto notls_accepted; } lwsl_notice("%s: client did not send a valid " "tls hello (default vhost %s)\n", __func__, wsi->vhost->name); goto fail; } if (!n) { /* * connection is gone, fail out */ lwsl_debug("PEEKed 0\n"); goto fail; } if (n < 0 && (LWS_ERRNO == LWS_EAGAIN || LWS_ERRNO == LWS_EWOULDBLOCK)) { /* * well, we get no way to know ssl or not * so go around again waiting for something * to come and give us a hint, or timeout the * connection. */ if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) { lwsl_info("%s: change_pollfd failed\n", __func__); return -1; } lwsl_info("SSL_ERROR_WANT_READ\n"); return 0; } } /* normal SSL connection processing path */ #if defined(LWS_WITH_STATS) /* only set this the first time around */ if (!wsi->accept_start_us) wsi->accept_start_us = lws_now_usecs(); #endif errno = 0; lws_stats_bump(pt, LWSSTATS_C_SSL_ACCEPT_SPIN, 1); n = lws_tls_server_accept(wsi); lws_latency(context, wsi, "SSL_accept LRS_SSL_ACK_PENDING\n", n, n == 1); lwsl_info("SSL_accept says %d\n", n); switch (n) { case LWS_SSL_CAPABLE_DONE: break; case LWS_SSL_CAPABLE_ERROR: lws_stats_bump(pt, LWSSTATS_C_SSL_CONNECTIONS_FAILED, 1); lwsl_info("SSL_accept failed socket %u: %d\n", wsi->desc.sockfd, n); wsi->socket_is_permanently_unusable = 1; goto fail; default: /* MORE_SERVICE */ return 0; } lws_stats_bump(pt, LWSSTATS_C_SSL_CONNECTIONS_ACCEPTED, 1); #if defined(LWS_WITH_STATS) if (wsi->accept_start_us) lws_stats_bump(pt, LWSSTATS_US_SSL_ACCEPT_LATENCY_AVG, lws_now_usecs() - wsi->accept_start_us); wsi->accept_start_us = lws_now_usecs(); #endif /* adapt our vhost to match the SNI SSL_CTX that was chosen */ vh = context->vhost_list; while (vh) { if (!vh->being_destroyed && wsi->tls.ssl && vh->tls.ssl_ctx == lws_tls_ctx_from_wsi(wsi)) { lwsl_info("setting wsi to vh %s\n", vh->name); lws_vhost_bind_wsi(vh, wsi); break; } vh = vh->vhost_next; } /* OK, we are accepted... give him some time to negotiate */ lws_set_timeout(wsi, PENDING_TIMEOUT_ESTABLISH_WITH_SERVER, context->timeout_secs); lwsi_set_state(wsi, LRS_ESTABLISHED); if (lws_tls_server_conn_alpn(wsi)) goto fail; lwsl_debug("accepted new SSL conn\n"); break; default: break; } return 0; notls_accepted: lwsi_set_state(wsi, LRS_ESTABLISHED); return 0; fail: return 1; } libwebsockets-3.2.1/lib/tls/tls.c000066400000000000000000000162541357643561300167200ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "core/private.h" #include "tls/private.h" #if !defined(LWS_PLAT_OPTEE) && !defined(OPTEE_DEV_KIT) #if defined(LWS_WITH_ESP32) && !defined(LWS_AMAZON_RTOS) int alloc_file(struct lws_context *context, const char *filename, uint8_t **buf, lws_filepos_t *amount) { nvs_handle nvh; size_t s; int n = 0; ESP_ERROR_CHECK(nvs_open("lws-station", NVS_READWRITE, &nvh)); if (nvs_get_blob(nvh, filename, NULL, &s) != ESP_OK) { n = 1; goto bail; } *buf = lws_malloc(s + 1, "alloc_file"); if (!*buf) { n = 2; goto bail; } if (nvs_get_blob(nvh, filename, (char *)*buf, &s) != ESP_OK) { lws_free(*buf); n = 1; goto bail; } *amount = s; (*buf)[s] = '\0'; lwsl_notice("%s: nvs: read %s, %d bytes\n", __func__, filename, (int)s); bail: nvs_close(nvh); return n; } #else int alloc_file(struct lws_context *context, const char *filename, uint8_t **buf, lws_filepos_t *amount) { FILE *f; size_t s; int n = 0; f = fopen(filename, "rb"); if (f == NULL) { n = 1; goto bail; } if (fseek(f, 0, SEEK_END) != 0) { n = 1; goto bail; } s = ftell(f); if (s == (size_t)-1) { n = 1; goto bail; } if (fseek(f, 0, SEEK_SET) != 0) { n = 1; goto bail; } *buf = lws_malloc(s, "alloc_file"); if (!*buf) { n = 2; goto bail; } if (fread(*buf, s, 1, f) != 1) { lws_free(*buf); n = 1; goto bail; } *amount = s; bail: if (f) fclose(f); return n; } #endif /* * filename: NULL means use buffer inbuf length inlen directly, otherwise * load the file "filename" into an allocated buffer. * * Allocates a separate DER output buffer if inbuf / inlen are the input, * since the * * Contents may be PEM or DER: returns with buf pointing to DER and amount * set to the DER length. */ int lws_tls_alloc_pem_to_der_file(struct lws_context *context, const char *filename, const char *inbuf, lws_filepos_t inlen, uint8_t **buf, lws_filepos_t *amount) { uint8_t *pem = NULL, *p, *end, *opem; lws_filepos_t len; uint8_t *q; int n; if (filename) { n = alloc_file(context, filename, (uint8_t **)&pem, &len); if (n) return n; } else { pem = (uint8_t *)inbuf; len = inlen; } opem = p = pem; end = p + len; if (strncmp((char *)p, "-----", 5)) { /* take it as being already DER */ pem = lws_malloc(inlen, "alloc_der"); if (!pem) return 1; memcpy(pem, inbuf, inlen); *buf = pem; *amount = inlen; return 0; } /* PEM -> DER */ if (!filename) { /* we don't know if it's in const memory... alloc the output */ pem = lws_malloc((inlen * 3) / 4, "alloc_der"); if (!pem) { lwsl_err("a\n"); return 1; } } /* else overwrite the allocated, b64 input with decoded DER */ /* trim the first line */ p += 5; while (p < end && *p != '\n' && *p != '-') p++; if (*p != '-') { lwsl_err("b\n"); goto bail; } while (p < end && *p != '\n') p++; if (p >= end) { lwsl_err("c\n"); goto bail; } p++; /* trim the last line */ q = (uint8_t *)end - 2; while (q > opem && *q != '\n') q--; if (*q != '\n') { lwsl_err("d\n"); goto bail; } /* we can't write into the input buffer for mem, since it may be in RO * const segment */ if (filename) *q = '\0'; *amount = lws_b64_decode_string_len((char *)p, lws_ptr_diff(q, p), (char *)pem, (int)(long long)len); *buf = (uint8_t *)pem; return 0; bail: lws_free((uint8_t *)pem); return 4; } #endif #if !defined(LWS_WITH_ESP32) && !defined(LWS_PLAT_OPTEE) && !defined(OPTEE_DEV_KIT) static int lws_tls_extant(const char *name) { /* it exists if we can open it... */ int fd = open(name, O_RDONLY), n; char buf[1]; if (fd < 0) return 1; /* and we can read at least one byte out of it */ n = read(fd, buf, 1); close(fd); return n != 1; } #endif /* * Returns 0 if the filepath "name" exists and can be read from. * * In addition, if "name".upd exists, backup "name" to "name.old.1" * and rename "name".upd to "name" before reporting its existence. * * There are four situations and three results possible: * * 1) LWS_TLS_EXTANT_NO: There are no certs at all (we are waiting for them to * be provisioned). We also feel like this if we need privs we don't have * any more to look in the directory. * * 2) There are provisioned certs written (xxx.upd) and we still have root * privs... in this case we rename any existing cert to have a backup name * and move the upd cert into place with the correct name. This then becomes * situation 4 for the caller. * * 3) LWS_TLS_EXTANT_ALTERNATIVE: There are provisioned certs written (xxx.upd) * but we no longer have the privs needed to read or rename them. In this * case, indicate that the caller should use temp copies if any we do have * rights to access. This is normal after we have updated the cert. * * But if we dropped privs, we can't detect the provisioned xxx.upd cert + * key, because we can't see in the dir. So we have to upgrade NO to * ALTERNATIVE when we actually have the in-memory alternative. * * 4) LWS_TLS_EXTANT_YES: The certs are present with the correct name and we * have the rights to read them. */ #if !defined(LWS_AMAZON_RTOS) enum lws_tls_extant lws_tls_use_any_upgrade_check_extant(const char *name) { #if !defined(LWS_PLAT_OPTEE) int n; #if !defined(LWS_WITH_ESP32) char buf[256]; lws_snprintf(buf, sizeof(buf) - 1, "%s.upd", name); if (!lws_tls_extant(buf)) { /* ah there is an updated file... how about the desired file? */ if (!lws_tls_extant(name)) { /* rename the desired file */ for (n = 0; n < 50; n++) { lws_snprintf(buf, sizeof(buf) - 1, "%s.old.%d", name, n); if (!rename(name, buf)) break; } if (n == 50) { lwsl_notice("unable to rename %s\n", name); return LWS_TLS_EXTANT_ALTERNATIVE; } lws_snprintf(buf, sizeof(buf) - 1, "%s.upd", name); } /* desired file is out of the way, rename the updated file */ if (rename(buf, name)) { lwsl_notice("unable to rename %s to %s\n", buf, name); return LWS_TLS_EXTANT_ALTERNATIVE; } } if (lws_tls_extant(name)) return LWS_TLS_EXTANT_NO; #else nvs_handle nvh; size_t s = 8192; if (nvs_open("lws-station", NVS_READWRITE, &nvh)) { lwsl_notice("%s: can't open nvs\n", __func__); return LWS_TLS_EXTANT_NO; } n = nvs_get_blob(nvh, name, NULL, &s); nvs_close(nvh); if (n) return LWS_TLS_EXTANT_NO; #endif #endif return LWS_TLS_EXTANT_YES; } #endif libwebsockets-3.2.1/libwebsockets.dox000066400000000000000000000335411357643561300177540ustar00rootroot00000000000000# Doxyfile 1.8.11 #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "libwebsockets" PROJECT_NUMBER = PROJECT_BRIEF = "Lightweight C library for HTML5 websockets" PROJECT_LOGO = "./test-apps/libwebsockets.org-logo.svg" OUTPUT_DIRECTORY = "doc" CREATE_SUBDIRS = NO ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = YES STRIP_FROM_PATH = STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 8 ALIASES = TCL_SUBST = OPTIMIZE_OUTPUT_FOR_C = YES OPTIMIZE_OUTPUT_JAVA = NO OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO EXTENSION_MAPPING = MARKDOWN_SUPPORT = YES AUTOLINK_SUPPORT = YES BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES DISTRIBUTE_GROUP_DOC = NO GROUP_NESTED_COMPOUNDS = NO SUBGROUPING = YES INLINE_GROUPED_CLASSES = NO INLINE_SIMPLE_STRUCTS = NO TYPEDEF_HIDES_STRUCT = NO LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = NO EXTRACT_PRIVATE = NO EXTRACT_PACKAGE = NO EXTRACT_STATIC = NO EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = NO EXTRACT_ANON_NSPACES = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO HIDE_COMPOUND_REFERENCE= NO SHOW_INCLUDE_FILES = YES SHOW_GROUPED_MEMB_INC = YES FORCE_LOCAL_INCLUDES = NO INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_MEMBERS_CTORS_1ST = NO SORT_GROUP_NAMES = YES SORT_BY_SCOPE_NAME = NO STRICT_PROTO_MATCHING = YES GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_FILES = YES SHOW_NAMESPACES = YES FILE_VERSION_FILTER = LAYOUT_FILE = CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = NO WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO WARN_AS_ERROR = NO WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- INPUT = include/libwebsockets.h \ include/libwebsockets/lws-adopt.h \ include/libwebsockets/lws-callbacks.h \ include/libwebsockets/lws-cgi.h \ include/libwebsockets/lws-client.h \ include/libwebsockets/lws-context-vhost.h \ include/libwebsockets/lws-dbus.h \ include/libwebsockets/lws-diskcache.h \ include/libwebsockets/lws-dsh.h \ include/libwebsockets/lws-esp32.h \ include/libwebsockets/lws-fts.h \ include/libwebsockets/lws-genaes.h \ include/libwebsockets/lws-gencrypto.h \ include/libwebsockets/lws-genec.h \ include/libwebsockets/lws-genhash.h \ include/libwebsockets/lws-genrsa.h \ include/libwebsockets/lws-http.h \ include/libwebsockets/lws-jose.h \ include/libwebsockets/lws-jwe.h \ include/libwebsockets/lws-jwk.h \ include/libwebsockets/lws-jws.h \ include/libwebsockets/lws-lejp.h \ include/libwebsockets/lws-logs.h \ include/libwebsockets/lws-lwsac.h \ include/libwebsockets/lws-misc.h \ include/libwebsockets/lws-network-helper.h \ include/libwebsockets/lws-plugin-generic-sessions.h \ include/libwebsockets/lws-protocols-plugins.h \ include/libwebsockets/lws-purify.h \ include/libwebsockets/lws-retry.h \ include/libwebsockets/lws-ring.h \ include/libwebsockets/lws-sequencer.h \ include/libwebsockets/lws-service.h \ include/libwebsockets/lws-sha1-base64.h \ include/libwebsockets/lws-spa.h \ include/libwebsockets/lws-stats.h \ include/libwebsockets/lws-struct.h \ include/libwebsockets/lws-system.h \ include/libwebsockets/lws-test-sequencer.h \ include/libwebsockets/lws-threadpool.h \ include/libwebsockets/lws-timeout-timer.h \ include/libwebsockets/lws-tokenize.h \ include/libwebsockets/lws-vfs.h \ include/libwebsockets/lws-write.h \ include/libwebsockets/lws-writeable.h \ include/libwebsockets/lws-ws-close.h \ include/libwebsockets/lws-ws-ext.h \ include/libwebsockets/lws-ws-state.h \ include/libwebsockets/lws-x509.h \ plugins/ssh-base/include/lws-plugin-ssh.h \ ./READMEs/mainpage.md \ ./READMEs/README.build.md \ ./READMEs/README.ci.md \ ./READMEs/README.coding.md \ ./READMEs/README.content-security-policy.md \ ./READMEs/README.contributing.md \ ./READMEs/README.crypto-apis.md \ ./READMEs/README.esp32.md \ ./READMEs/README.generic-sessions.md \ ./READMEs/README.generic-table.md \ ./READMEs/README.http-fallback.md \ ./READMEs/README.lws_dll.md \ ./READMEs/README.lws_sequencer.md \ ./READMEs/README.lws_struct.md \ ./READMEs/README.lws_sul.md \ ./READMEs/README.lwsws.md \ ./READMEs/README.plugin-sshd-base.md \ ./READMEs/README.plugin-acme.md \ ./READMEs/README.porting.md \ ./READMEs/README.problems.md \ ./READMEs/README.release-policy.md \ ./READMEs/README.test-apps.md \ ./READMEs/README.unix-domain-reverse-proxy.md \ ./READMEs/README.vulnerability-reporting.md \ ./doc-assets INPUT_ENCODING = UTF-8 FILE_PATTERNS = lib/*.c *.md *.png include/*.h RECURSIVE = NO EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXCLUDE_SYMBOLS = EXAMPLE_PATH = EXAMPLE_PATTERNS = EXAMPLE_RECURSIVE = NO IMAGE_PATH = doc-assets INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO FILTER_SOURCE_PATTERNS = USE_MDFILE_AS_MAINPAGE = mainpage.md #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = NO INLINE_SOURCES = YES STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = NO REFERENCES_RELATION = NO REFERENCES_LINK_SOURCE = YES SOURCE_TOOLTIPS = YES USE_HTAGS = NO VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = YES COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = HTML_COLORSTYLE_HUE = 220 HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 HTML_TIMESTAMP = NO HTML_DYNAMIC_SECTIONS = NO HTML_INDEX_NUM_ENTRIES = 100 GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" DOCSET_BUNDLE_ID = org.doxygen.Project DOCSET_PUBLISHER_ID = org.doxygen.Publisher DOCSET_PUBLISHER_NAME = Publisher GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO CHM_INDEX_ENCODING = BINARY_TOC = NO TOC_EXPAND = NO GENERATE_QHP = NO QCH_FILE = QHP_NAMESPACE = org.doxygen.Project QHP_VIRTUAL_FOLDER = doc QHP_CUST_FILTER_NAME = QHP_CUST_FILTER_ATTRS = QHP_SECT_FILTER_ATTRS = QHG_LOCATION = GENERATE_ECLIPSEHELP = NO ECLIPSE_DOC_ID = org.doxygen.Project DISABLE_INDEX = NO GENERATE_TREEVIEW = YES ENUM_VALUES_PER_LINE = 4 TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO FORMULA_FONTSIZE = 10 FORMULA_TRANSPARENT = YES USE_MATHJAX = NO MATHJAX_FORMAT = HTML-CSS MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest MATHJAX_EXTENSIONS = MATHJAX_CODEFILE = SEARCHENGINE = NO SERVER_BASED_SEARCH = NO EXTERNAL_SEARCH = NO SEARCHENGINE_URL = SEARCHDATA_FILE = searchdata.xml EXTERNAL_SEARCH_ID = EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- # Configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4 EXTRA_PACKAGES = LATEX_HEADER = LATEX_FOOTER = LATEX_EXTRA_STYLESHEET = LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES USE_PDFLATEX = YES LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO LATEX_SOURCE_CODE = NO LATEX_BIB_STYLE = plain LATEX_TIMESTAMP = NO #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = RTF_SOURCE_CODE = NO #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 MAN_SUBDIR = MAN_LINKS = NO #--------------------------------------------------------------------------- # Configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook DOCBOOK_PROGRAMLISTING = NO #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # Configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = ./include INCLUDE_FILE_PATTERNS = PREDEFINED = EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration options related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ALLEXTERNALS = NO EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES MSCGEN_PATH = DIA_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO DOT_NUM_THREADS = 0 DOT_FONTNAME = Helvetica DOT_FONTSIZE = 10 DOT_FONTPATH = CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO UML_LIMIT_NUM_FIELDS = 10 TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png INTERACTIVE_SVG = NO DOT_PATH = DOTFILE_DIRS = MSCFILE_DIRS = DIAFILE_DIRS = PLANTUML_JAR_PATH = PLANTUML_INCLUDE_PATH = DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 0 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES DOT_CLEANUP = YES libwebsockets-3.2.1/lwsws/000077500000000000000000000000001357643561300155515ustar00rootroot00000000000000libwebsockets-3.2.1/lwsws/etc-logrotate.d-lwsws000066400000000000000000000003021357643561300216370ustar00rootroot00000000000000/var/log/lwsws/*log { copytruncate missingok notifempty delaycompress postrotate /bin/systemctl reload lwsws.service > /dev/null 2>/dev/null || true endscript } libwebsockets-3.2.1/lwsws/etc-lwsws-conf-EXAMPLE000066400000000000000000000004511357643561300214400ustar00rootroot00000000000000# these are the server global settings # stuff related to vhosts should go in one # file per vhost in ../conf.d/ { "global": { "uid": "48", "gid": "48", "interface": "eth0", "count-threads": "1", "server-string": "lwsws", "ws-pingpong-secs": "200", "init-ssl": "yes" } } libwebsockets-3.2.1/lwsws/etc-lwsws-conf.d-localhost-EXAMPLE000066400000000000000000000031541357643561300236530ustar00rootroot00000000000000{ "vhosts": [ { "name": "localhost", "port": "7681", # by default, bind to all interfaces, but you can restrict it # "interface": "lo", # "host-ssl-key": "/etc/pki/tls/private/libwebsockets.org.key", # "host-ssl-cert": "/etc/pki/tls/certs/libwebsockets.org.crt", # "host-ssl-ca": "/etc/pki/tls/certs/libwebsockets.org.cer", "access-log": "/var/log/lwsws/test-access-log", # "sts": "on", "mounts": [{ "mountpoint": "/", "origin": "file://_lws_ddir_/libwebsockets-test-server", "default": "test.html", "cache-max-age": "60", "cache-reuse": "1", "cache-revalidate": "1", "cache-intermediaries": "0" }, { "mountpoint": "/server-status", "origin": "file://_lws_ddir_/libwebsockets-test-server/server-status", "default": "server-status.html" }, { "mountpoint": "/testcgi", "origin": "cgi://_lws_ddir_/libwebsockets-test-server/lws-cgi-test.sh" }, { "mountpoint": "/formtest", "origin": "callback://protocol-post-demo" }], # which protocols are enabled for this vhost, and optional # vhost-specific config options for the protocol # "ws-protocols": [{ "lws-meta": { "status": "ok" }, "dumb-increment-protocol": { "status": "ok" }, "lws-mirror-protocol": { "status": "ok" }, "lws-status": { "status": "ok" }, "protocol-post-demo": { "status": "ok" }, "lws-server-status": { "status": "ok", "update-ms": "5000" } }] } ] } libwebsockets-3.2.1/lwsws/main.c000066400000000000000000000164051357643561300166470ustar00rootroot00000000000000/* * libwebsockets web server application * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #include "lws_config.h" #include #include #if defined(LWS_HAS_GETOPT_LONG) || defined(WIN32) #include #endif #include #include #include #include #include #ifndef _WIN32 #include #include #include #include #include #else #include #include "gettimeofday.h" #include int fork(void) { fprintf(stderr, "Sorry Windows doesn't support fork().\n"); return 0; } #endif #include #include static struct lws_context *context; static char config_dir[128]; static int opts = 0, do_reload = 1; static uv_loop_t loop; static uv_signal_t signal_outer[2]; static int pids[32]; void lwsl_emit_stderr(int level, const char *line); #define LWSWS_CONFIG_STRING_SIZE (32 * 1024) static const struct lws_extension exts[] = { #if !defined(LWS_WITHOUT_EXTENSIONS) { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" }, #endif { NULL, NULL, NULL /* terminator */ } }; static const char * const plugin_dirs[] = { INSTALL_DATADIR"/libwebsockets-test-server/plugins/", NULL }; #if defined(LWS_HAS_GETOPT_LONG) || defined(WIN32) static struct option options[] = { { "help", no_argument, NULL, 'h' }, { "debug", required_argument, NULL, 'd' }, { "configdir", required_argument, NULL, 'c' }, { NULL, 0, 0, 0 } }; #endif void signal_cb(uv_signal_t *watcher, int signum) { switch (watcher->signum) { case SIGTERM: case SIGINT: break; case SIGHUP: if (lws_context_is_deprecated(context)) return; lwsl_notice("Dropping listen sockets\n"); lws_context_deprecate(context, NULL); return; default: signal(SIGABRT, SIG_DFL); abort(); break; } lwsl_err("Signal %d caught\n", watcher->signum); uv_signal_stop(watcher); uv_signal_stop(&signal_outer[1]); lws_context_destroy(context); } static int context_creation(void) { int cs_len = LWSWS_CONFIG_STRING_SIZE - 1; struct lws_context_creation_info info; char *cs, *config_strings; void *foreign_loops[1]; cs = config_strings = malloc(LWSWS_CONFIG_STRING_SIZE); if (!config_strings) { lwsl_err("Unable to allocate config strings heap\n"); return -1; } memset(&info, 0, sizeof(info)); info.external_baggage_free_on_destroy = config_strings; info.pt_serv_buf_size = 8192; info.options = opts | LWS_SERVER_OPTION_VALIDATE_UTF8 | LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_LIBUV; info.plugin_dirs = plugin_dirs; lwsl_notice("Using config dir: \"%s\"\n", config_dir); /* * first go through the config for creating the outer context */ if (lwsws_get_config_globals(&info, config_dir, &cs, &cs_len)) goto init_failed; foreign_loops[0] = &loop; info.foreign_loops = foreign_loops; info.pcontext = &context; context = lws_create_context(&info); if (context == NULL) { lwsl_err("libwebsocket init failed\n"); goto init_failed; } /* * then create the vhosts... protocols are entirely coming from * plugins, so we leave it NULL */ info.extensions = exts; if (lwsws_get_config_vhosts(context, &info, config_dir, &cs, &cs_len)) return 1; return 0; init_failed: free(config_strings); return 1; } /* * root-level sighup handler */ static void reload_handler(int signum) { #ifndef _WIN32 int m; switch (signum) { case SIGHUP: /* reload */ fprintf(stderr, "root process receives reload\n"); if (!do_reload) { fprintf(stderr, "passing HUP to child processes\n"); for (m = 0; m < (int)LWS_ARRAY_SIZE(pids); m++) if (pids[m]) kill(pids[m], SIGHUP); sleep(1); } do_reload = 1; break; case SIGINT: case SIGTERM: case SIGKILL: fprintf(stderr, "master process waiting 2s...\n"); sleep(2); /* give children a chance to deal with the signal */ fprintf(stderr, "killing service processes\n"); for (m = 0; m < (int)LWS_ARRAY_SIZE(pids); m++) if (pids[m]) kill(pids[m], SIGTERM); exit(0); } #else // kill() implementation needed for WIN32 #endif } int main(int argc, char **argv) { int n = 0, budget = 100, debug_level = 1024 + 7; #ifndef _WIN32 int m; int status;//, syslog_options = LOG_PID | LOG_PERROR; #endif strcpy(config_dir, "/etc/lwsws"); while (n >= 0) { #if defined(LWS_HAS_GETOPT_LONG) || defined(WIN32) n = getopt_long(argc, argv, "hd:c:", options, NULL); #else n = getopt(argc, argv, "hd:c:"); #endif if (n < 0) continue; switch (n) { case 'd': debug_level = atoi(optarg); break; case 'c': lws_strncpy(config_dir, optarg, sizeof(config_dir)); break; case 'h': fprintf(stderr, "Usage: lwsws [-c ] " "[-d ] [--help]\n"); exit(1); } } #ifndef _WIN32 /* * We leave our original process up permanently, because that * suits systemd. * * Otherwise we get into problems when reload spawns new processes and * the original one dies randomly. */ signal(SIGHUP, reload_handler); signal(SIGINT, reload_handler); fprintf(stderr, "Root process is %u\n", getpid()); while (1) { if (do_reload) { do_reload = 0; n = fork(); if (n == 0) /* new */ break; /* old */ if (n > 0) for (m = 0; m < (int)LWS_ARRAY_SIZE(pids); m++) if (!pids[m]) { pids[m] = n; break; } } #ifndef _WIN32 sleep(2); n = waitpid(-1, &status, WNOHANG); if (n > 0) for (m = 0; m < (int)LWS_ARRAY_SIZE(pids); m++) if (pids[m] == n) { pids[m] = 0; break; } #else // !!! implemenation needed #endif } #endif /* child process */ lws_set_log_level(debug_level, lwsl_emit_stderr_notimestamp); lwsl_notice("lwsws libwebsockets web server - license CC0 + LGPL2.1\n"); lwsl_notice("(C) Copyright 2010-2018 Andy Green \n"); #if (UV_VERSION_MAJOR > 0) // Travis... uv_loop_init(&loop); #else fprintf(stderr, "Your libuv is too old!\n"); return 0; #endif uv_signal_init(&loop, &signal_outer[0]); uv_signal_start(&signal_outer[0], signal_cb, SIGINT); uv_signal_init(&loop, &signal_outer[1]); uv_signal_start(&signal_outer[1], signal_cb, SIGHUP); if (context_creation()) { lwsl_err("Context creation failed\n"); return 1; } lws_service(context, 0); lwsl_err("%s: closing\n", __func__); for (n = 0; n < 2; n++) { uv_signal_stop(&signal_outer[n]); uv_close((uv_handle_t *)&signal_outer[n], NULL); } lws_context_destroy(context); (void)budget; #if (UV_VERSION_MAJOR > 0) // Travis... while ((n = uv_loop_close(&loop)) && --budget) uv_run(&loop, UV_RUN_ONCE); #endif fprintf(stderr, "lwsws exited cleanly: %d\n", n); #ifndef _WIN32 closelog(); #endif context = NULL; return 0; } libwebsockets-3.2.1/lwsws/usr-lib-systemd-system-lwsws.service000066400000000000000000000003301357643561300246710ustar00rootroot00000000000000[Unit] Description=Libwebsockets Web Server After=syslog.target [Service] ExecStart=/usr/local/bin/lwsws ExecReload=/usr/bin/kill -HUP $MAINPID ExecStop=/usr/bin/killall lwsws [Install] WantedBy=multi-user.target libwebsockets-3.2.1/minimal-examples/000077500000000000000000000000001357643561300176345ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/README.md000066400000000000000000000076531357643561300211260ustar00rootroot00000000000000|name|demonstrates| ---|--- client-server|Minimal examples providing client and server connections simultaneously crypto|Minimal examples related to using lws crypto apis dbus-server|Minimal examples showing how to integrate DBUS into lws event loop http-client|Minimal examples providing an http client http-server|Minimal examples providing an http server raw|Minimal examples related to adopting raw file or socket descriptors into the event loop ws-client|Minimal examples providing a ws client ws-server|Minimal examples providing a ws server (and an http server) ## FAQ ### Getting started Build and install lws itself first (note that after installing lws on \*nix, you need to run `ldconfig` one time so the OS can learn about the new library. Lws installs in `/usr/local` by default, Debian / Ubuntu ldconfig knows to look there already, but Fedora / CentOS need you to add the line `/usr/local/lib` to `/etc/ld.so.conf` and run ldconfig) Then start with the simplest: `http-server/minimal-http-server` ### Why are most of the sources split into a main C file file and a protocol file? Lws supports three ways to implement the protocol callback code: - you can just add it all in the same source file - you can separate it as these examples do, and #include it into the main sources - you can build it as a standalone plugin that is discovered and loaded at runtime. The way these examples are structured, you can easily also build the protocol callback as a plugin just with a different CMakeLists.txt... see https://github.com/warmcat/libwebsockets/tree/master/plugin-standalone for an example. ### Why would we want the protocol as a plugin? You will notice a lot of the main C code is the same boilerplate repeated for each example. The actual interesting part is in the protocol callback only. Lws provides (-DLWS_WITH_LWSWS=1) a generic lightweight server app called 'lwsws' that can be configured by JSON. Combined with your protocol as a plugin, it means you don't actually have to make a special server "app" part, you can just use lwsws and pass per-vhost configuration from JSON into your protocol. (Of course in some cases you have an existing app you are bolting lws on to, then you don't care about this for that particular case). Because lwsws has no dependency on whatever your plugin does, it can mix and match different protocols randomly without needing any code changes. It reduces the size of the task to just writing the code you care about in your protocol handler, and nothing else to write or maintain. Lwsws supports advanced features like reload, where it starts a new server instance with changed config or different plugins, while keeping the old instance around until the last connection to it closes. ### I get why there is a pss, but why is there a vhd? The pss is instantiated per-connection. But there are almost always other variables that have a lifetime longer than a single connection. You could make these variables "filescope" one-time globals, but that means your protocol cannot instantiate multiple times. Lws supports vhosts (virtual hosts), for example both https://warmcat.com and https://libwebsockets are running on the same lwsws instance on the same server and same IP... each of these is a separate vhost. Your protocol may be enabled on multiple vhosts, each of these vhosts provides a different vhd specific to the protocol instance on that vhost. For example many of the samples keep a linked-list head to a list of live pss in the vhd... that means it's cleanly a list of pss opened **on that vhost**. If another vhost has the protocol enabled, connections to that will point to a different vhd, and the linked-list head on that vhd will only list connections to his vhost. The example "ws-server/minimal-ws-server-threads" demonstrates how to deliver external configuration data to a specific vhost + protocol combination using code. In lwsws, this is simply a matter of setting the desired JSON config. libwebsockets-3.2.1/minimal-examples/abstract/000077500000000000000000000000001357643561300214375ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/abstract/protocols/000077500000000000000000000000001357643561300234635ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/abstract/protocols/smtp-client/000077500000000000000000000000001357643561300257225ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/abstract/protocols/smtp-client/CMakeLists.txt000066400000000000000000000036771357643561300304770ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-api-test-smtp_client) set(SRCS main.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_WITH_SMTP 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/abstract/protocols/smtp-client/README.md000066400000000000000000000012251357643561300272010ustar00rootroot00000000000000# lws api test smtp client Demonstrates how to send email through your local MTA ## build Requires lws was built with `-DLWS_WITH_SMTP=1` at cmake. ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -r |Send the test email to this email address ``` $ ./lws-api-test-smtp_client -r andy@warmcat.com [2019/04/17 05:12:06:5293] USER: LWS API selftest: SMTP client [2019/04/17 05:12:06:5635] NOTICE: LGSSMTP_IDLE: connecting to 127.0.0.1:25 [2019/04/17 05:12:06:6238] NOTICE: email_sent_or_failed: sent OK [2019/04/17 05:12:06:6394] USER: Completed: PASS ``` libwebsockets-3.2.1/minimal-examples/abstract/protocols/smtp-client/main.c000066400000000000000000000071021357643561300270120ustar00rootroot00000000000000/* * lws-api-test-smtp_client * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include static int interrupted, result = 1; static const char *recip; static void sigint_handler(int sig) { interrupted = 1; } static int email_sent_or_failed(struct lws_smtp_email *email, void *buf, size_t len) { /* you could examine email->data here */ if (buf) lwsl_notice("%s: %.*s\n", __func__, (int)len, (const char *)buf); else lwsl_notice("%s:\n", __func__); /* destroy any allocations in email */ free((char *)email->payload); result = 0; interrupted = 1; return 0; } /* * We're going to bind to the raw-skt transport, so tell that what we want it * to connect to */ static const lws_token_map_t smtp_raw_skt_transport_tokens[] = { { .u = { .value = "127.0.0.1" }, .name_index = LTMI_PEER_V_DNS_ADDRESS, }, { .u = { .lvalue = 25 }, .name_index = LTMI_PEER_LV_PORT, }, { } }; static const lws_token_map_t smtp_protocol_tokens[] = { { .u = { .value = "lws-test-client" }, .name_index = LTMI_PSMTP_V_HELO, }, { } }; int main(int argc, const char **argv) { int n = 1, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; struct lws_context *context; lws_abs_t abs, *instance; lws_smtp_email_t email; struct lws_vhost *vh; const char *p; /* the normal lws init */ signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); p = lws_cmdline_option(argc, argv, "-r"); if (!p) { lwsl_err("-r is required\n"); return 1; } recip = p; lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: SMTP client\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } vh = lws_create_vhost(context, &info); if (!vh) { lwsl_err("Failed to create first vhost\n"); goto bail1; } /* * create an smtp client that's hooked up to real sockets */ memset(&abs, 0, sizeof(abs)); abs.vh = vh; /* select the protocol and bind its tokens */ abs.ap = lws_abs_protocol_get_by_name("smtp"); if (!abs.ap) goto bail1; abs.ap_tokens = smtp_protocol_tokens; /* select the transport and bind its tokens */ abs.at = lws_abs_transport_get_by_name("raw_skt"); if (!abs.at) goto bail1; abs.at_tokens = smtp_raw_skt_transport_tokens; instance = lws_abs_bind_and_create_instance(&abs); if (!instance) { lwsl_err("%s: failed to create SMTP client\n", __func__); goto bail1; } /* attach an email to it */ memset(&email, 0, sizeof(email)); email.data = NULL /* email specific user data */; email.email_from = "andy@warmcat.com"; email.email_to = recip; email.payload = malloc(2048); if (!email.payload) { goto bail1; } lws_snprintf((char *)email.payload, 2048, "From: noreply@example.com\n" "To: %s\n" "Subject: Test email for lws smtp-client\n" "\n" "Hello this was an api test for lws smtp-client\n" "\r\n.\r\n", recip); email.done = email_sent_or_failed; if (lws_smtp_client_add_email(instance, &email)) { lwsl_err("%s: failed to add email\n", __func__); goto bail; } /* the usual lws event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: bail1: lwsl_user("Completed: %s\n", result ? "FAIL" : "PASS"); lws_context_destroy(context); return result; } libwebsockets-3.2.1/minimal-examples/api-tests/000077500000000000000000000000001357643561300215455ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/api-tests/README.md000066400000000000000000000007021357643561300230230ustar00rootroot00000000000000These are buildable test apps that run in CI to confirm correct api operation. |name|tests| ---|--- api-test-lwsac|LWS Allocated Chunks api api-test-lws_struct-json|Selftests for lws_struct JSON serialization and deserialization api-test-lws_tokenize|Generic secure string tokenizer api api-test-fts|LWS Full-text Search api api-test-gencrypto|LWS Generic Crypto apis api-test-jose|LWS JOSE apis api-test-smtp_client|SMTP client for sending emails libwebsockets-3.2.1/minimal-examples/api-tests/api-test-fts/000077500000000000000000000000001357643561300240655ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/api-tests/api-test-fts/CMakeLists.txt000066400000000000000000000036661357643561300266400ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-api-test-fts) set(SRCS main.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_WITH_FTS 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/api-tests/api-test-fts/README.md000066400000000000000000000043431357643561300253500ustar00rootroot00000000000000# lws api test fts Demonstrates how to create indexes and perform full-text searches. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -c / --createindex|Create an index file, instead of searching -i / --index |Use this file as the index The two modes are: - create an index: `--createindex inputfile [inputfile...]` ``` $ ./lws-api-test-fts -c ./the-picture-of-dorian-gray.txt [2018/10/15 07:14:15:1175] USER: LWS API selftest: full-text search [2018/10/15 07:14:15:1531] NOTICE: lws_fts_serialize: index 1 files (0MiB) cpu time 32ms, alloc: 1024KiB + 1024KiB, serialize: 3ms, file: 325KiB ``` - perform search[es]: `searchterm [searchterm...]` ``` $ ./lws-api-test-fts b [2018/10/15 07:15:44:1442] USER: LWS API selftest: full-text search [2018/10/15 07:15:44:1442] NOTICE: lws_fts_search: 'b' Matched: 3 instances, 8 children, 0ms [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC b: 3 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC be: 472 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC bee: 3 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC been: 236 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC beaut: 1 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC beauty: 55 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC because: 40 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC believe: 49 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC better: 54 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC before: 75 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC beg: 5 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC began: 44 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC but: 401 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC basil: 158 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC broke: 22 agg hits [2018/10/15 07:15:44:1444] NOTICE: lws_fts_results_dump: AC by: 242 agg hits [2018/10/15 07:15:44:1444] NOTICE: lws_fts_results_dump: AC boy: 36 agg hits ``` libwebsockets-3.2.1/minimal-examples/api-tests/api-test-fts/canned-1.txt000066400000000000000000000007641357643561300262230ustar00rootroot00000000000000API selftest: full-text search AC be: 472 agg hits AC but: 401 agg hits AC by: 242 agg hits AC been: 236 agg hits AC basil: 158 agg hits AC before: 75 agg hits AC beauty: 55 agg hits AC better: 54 agg hits AC believe: 49 agg hits AC began: 44 agg hits AC because: 40 agg hits AC boy: 36 agg hits AC book: 31 agg hits AC body: 28 agg hits AC both: 26 agg hits AC broke: 22 agg hits AC beg: 5 agg hits AC bore: 5 agg hits AC b: 3 agg hits AC bee: 3 agg hits AC beaut: 1 agg hits no filepath results libwebsockets-3.2.1/minimal-examples/api-tests/api-test-fts/canned-2.txt000066400000000000000000000006671357643561300262260ustar00rootroot00000000000000API selftest: full-text search no autocomplete results ../minimal-examples/api-tests/api-test-fts/the-picture-of-dorian-gray.txt: (8904 lines) 32 hits 360 17482 393 18984 562 28820 837 42903 1640 82057 2037 102214 2091 105019 2145 107351 2725 137188 2808 141127 2977 149971 3429 173810 4417 229186 4431 230058 4656 241181 4708 244372 ../minimal-examples/api-tests/api-test-fts/les-mis-utf8.txt: (14399 lines) 3 hits 14106 14313 14396 libwebsockets-3.2.1/minimal-examples/api-tests/api-test-fts/les-mis-utf8.txt000066400000000000000000025534131357643561300271000ustar00rootroot00000000000000The Project Gutenberg EBook of Les misĆ©rables Tome I, by Victor Hugo This eBook is for the use of anyone anywhere at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included with this eBook or online at www.gutenberg.org Title: Les misĆ©rables Tome I Fantine Author: Victor Hugo Release Date: January 10, 2006 [EBook #17489] [Date last updated: July 28, 2010] Language: French *** START OF THIS PROJECT GUTENBERG EBOOK LES MISƉRABLES TOME I *** Produced by www.ebooksgratuits.com and Chuck Greif Victor Hugo LES MISƉRABLES Tome I--FANTINE (1862) TABLE DES MATIƈRES Livre premier--Un juste Chapitre I Monsieur Myriel Chapitre II Monsieur Myriel devient monseigneur Bienvenu Chapitre III ƀ bon Ć©vĆŖque dur Ć©vĆŖchĆ© Chapitre IV Les oeuvres semblables aux paroles Chapitre V Que monseigneur Bienvenu faisait durer trop longtemps ses soutanes Chapitre VI Par qui il faisait garder sa maison Chapitre VII Cravatte Chapitre VIII Philosophie aprĆØs boire Chapitre IX Le frĆØre racontĆ© par la soeur Chapitre X L'Ć©vĆŖque en prĆ©sence d'une lumiĆØre inconnue Chapitre XI Une restriction Chapitre XII Solitude de monseigneur Bienvenu Chapitre XIII Ce qu'il croyait Chapitre XIV Ce qu'il pensait Livre deuxiĆØme--La chute Chapitre I Le soir d'un jour de marche Chapitre II La prudence conseillĆ©e Ć  la sagesse Chapitre III HĆ©roĆÆsme de l'obĆ©issance passive Chapitre IV DĆ©tails sur les fromageries de Pontarlier Chapitre V TranquillitĆ© Chapitre VI Jean Valjean Chapitre VII Le dedans du dĆ©sespoir Chapitre VIII L'onde et l'ombre Chapitre IX Nouveaux griefs Chapitre X L'homme rĆ©veillĆ© Chapitre XI Ce qu'il fait Chapitre XII L'Ć©vĆŖque travaille Chapitre XIII Petit-Gervais Livre troisiĆØme--En l'annĆ©e 1817 Chapitre I L'annĆ©e 1817 Chapitre II Double quatuor Chapitre III Quatre Ć  quatre Chapitre IV TholomyĆØs est si joyeux qu'il chante une chanson espagnole Chapitre V Chez Bombarda Chapitre VI Chapitre où l'on s'adore Chapitre VII Sagesse de TholomyĆØs Chapitre VIII Mort d'un cheval Chapitre IX Fin joyeuse de la joie Livre quatriĆØme--Confier, c'est quelquefois livrer Chapitre I Une mĆØre qui en rencontre une autre Chapitre II PremiĆØre esquisse de deux figures louches Chapitre III L'Alouette Livre cinquiĆØme--La descente Chapitre I Histoire d'un progrĆØs dans les verroteries noires Chapitre II M. Madeleine Chapitre III Sommes dĆ©posĆ©es chez Laffitte Chapitre IV M. Madeleine en deuil Chapitre V Vagues Ć©clairs Ć  l'horizon Chapitre VI Le pĆØre Fauchelevent Chapitre VII Fauchelevent devient jardinier Ć  Paris Chapitre VIII Madame Victurnien dĆ©pense trente-cinq francs pour la morale Chapitre IX SuccĆØs de Madame Victurnien Chapitre X Suite du succĆØs Chapitre XI _Christus nos liberavit_ Chapitre XII Le dĆ©soeuvrement de M. Bamatabois Chapitre XIII Solution de quelques questions de police municipale Livre sixiĆØme--Javert Chapitre I Commencement du repos Chapitre II Comment Jean peut devenir Champ Livre septiĆØme--L'affaire Champmathieu Chapitre I La soeur Simplice Chapitre II PerspicacitĆ© de maĆ®tre Scaufflaire Chapitre III Une tempĆŖte sous un crĆ¢ne Chapitre IV Formes que prend la souffrance pendant le sommeil Chapitre V BĆ¢tons dans les roues Chapitre VI La soeur Simplice mise Ć  l'Ć©preuve Chapitre VII Le voyageur arrivĆ© prend ses prĆ©cautions pour repartir Chapitre VIII EntrĆ©e de faveur Chapitre IX Un lieu où des convictions sont en train de se former Chapitre X Le systĆØme de dĆ©nĆ©gations Chapitre XI Champmathieu de plus en plus Ć©tonnĆ© Livre huitiĆØme--Contre-coup Chapitre I Dans quel miroir M. Madeleine regarde ses cheveux Chapitre II Fantine heureuse Chapitre III Javert content Chapitre IV L'autoritĆ© reprend ses droits Chapitre V Tombeau convenable Livre premier--Un juste Chapitre I Monsieur Myriel En 1815, M. Charles-FranƧois-Bienvenu Myriel Ć©tait Ć©vĆŖque de Digne. C'Ć©tait un vieillard d'environ soixante-quinze ans; il occupait le siĆØge de Digne depuis 1806. Quoique ce dĆ©tail ne touche en aucune maniĆØre au fond mĆŖme de ce que nous avons Ć  raconter, il n'est peut-ĆŖtre pas inutile, ne fĆ»t-ce que pour ĆŖtre exact en tout, d'indiquer ici les bruits et les propos qui avaient couru sur son compte au moment où il Ć©tait arrivĆ© dans le diocĆØse. Vrai ou faux, ce qu'on dit des hommes tient souvent autant de place dans leur vie et surtout dans leur destinĆ©e que ce qu'ils font. M. Myriel Ć©tait fils d'un conseiller au parlement d'Aix; noblesse de robe. On contait de lui que son pĆØre, le rĆ©servant pour hĆ©riter de sa charge, l'avait mariĆ© de fort bonne heure, Ć  dix-huit ou vingt ans, suivant un usage assez rĆ©pandu dans les familles parlementaires. Charles Myriel, nonobstant ce mariage, avait, disait-on, beaucoup fait parler de lui. Il Ć©tait bien fait de sa personne, quoique d'assez petite taille, Ć©lĆ©gant, gracieux, spirituel; toute la premiĆØre partie de sa vie avait Ć©tĆ© donnĆ©e au monde et aux galanteries. La rĆ©volution survint, les Ć©vĆ©nements se prĆ©cipitĆØrent, les familles parlementaires dĆ©cimĆ©es, chassĆ©es, traquĆ©es, se dispersĆØrent. M. Charles Myriel, dĆØs les premiers jours de la rĆ©volution, Ć©migra en Italie. Sa femme y mourut d'une maladie de poitrine dont elle Ć©tait atteinte depuis longtemps. Ils n'avaient point d'enfants. Que se passa-t-il ensuite dans la destinĆ©e de M. Myriel? L'Ć©croulement de l'ancienne sociĆ©tĆ© franƧaise, la chute de sa propre famille, les tragiques spectacles de 93, plus effrayants encore peut-ĆŖtre pour les Ć©migrĆ©s qui les voyaient de loin avec le grossissement de l'Ć©pouvante, firent-ils germer en lui des idĆ©es de renoncement et de solitude? Fut-il, au milieu d'une de ces distractions et de ces affections qui occupaient sa vie, subitement atteint d'un de ces coups mystĆ©rieux et terribles qui viennent quelquefois renverser, en le frappant au coeur, l'homme que les catastrophes publiques n'Ć©branleraient pas en le frappant dans son existence et dans sa fortune? Nul n'aurait pu le dire; tout ce qu'on savait, c'est que, lorsqu'il revint d'Italie, il Ć©tait prĆŖtre. En 1804, M. Myriel Ć©tait curĆ© de Brignolles. Il Ć©tait dĆ©jĆ  vieux, et vivait dans une retraite profonde. Vers l'Ć©poque du couronnement, une petite affaire de sa cure, on ne sait plus trop quoi, l'amena Ć  Paris. Entre autres personnes puissantes, il alla solliciter pour ses paroissiens M. le cardinal Fesch. Un jour que l'empereur Ć©tait venu faire visite Ć  son oncle, le digne curĆ©, qui attendait dans l'antichambre, se trouva sur le passage de sa majestĆ©. NapolĆ©on, se voyant regardĆ© avec une certaine curiositĆ© par ce vieillard, se retourna, et dit brusquement: --Quel est ce bonhomme qui me regarde? --Sire, dit M. Myriel, vous regardez un bonhomme, et moi je regarde un grand homme. Chacun de nous peut profiter. L'empereur, le soir mĆŖme, demanda au cardinal le nom de ce curĆ©, et quelque temps aprĆØs M. Myriel fut tout surpris d'apprendre qu'il Ć©tait nommĆ© Ć©vĆŖque de Digne. Qu'y avait-il de vrai, du reste, dans les rĆ©cits qu'on faisait sur la premiĆØre partie de la vie de M. Myriel? Personne ne le savait. Peu de familles avaient connu la famille Myriel avant la rĆ©volution. M. Myriel devait subir le sort de tout nouveau venu dans une petite ville où il y a beaucoup de bouches qui parlent et fort peu de tĆŖtes qui pensent. Il devait le subir, quoiqu'il fĆ»t Ć©vĆŖque et parce qu'il Ć©tait Ć©vĆŖque. Mais, aprĆØs tout, les propos auxquels on mĆŖlait son nom n'Ć©taient peut-ĆŖtre que des propos; du bruit, des mots, des paroles; moins que des paroles, des _palabres_, comme dit l'Ć©nergique langue du midi. Quoi qu'il en fĆ»t, aprĆØs neuf ans d'Ć©piscopat et de rĆ©sidence Ć  Digne, tous ces racontages, sujets de conversation qui occupent dans le premier moment les petites villes et les petites gens, Ć©taient tombĆ©s dans un oubli profond. Personne n'eĆ»t osĆ© en parler, personne n'eĆ»t mĆŖme osĆ© s'en souvenir. M. Myriel Ć©tait arrivĆ© Ć  Digne accompagnĆ© d'une vieille fille, mademoiselle Baptistine, qui Ć©tait sa soeur et qui avait dix ans de moins que lui. Ils avaient pour tout domestique une servante du mĆŖme Ć¢ge que mademoiselle Baptistine, et appelĆ©e madame Magloire, laquelle, aprĆØs avoir Ć©tĆ© _la servante de M. le CurĆ©_, prenait maintenant le double titre de femme de chambre de mademoiselle et femme de charge de monseigneur. Mademoiselle Baptistine Ć©tait une personne longue, pĆ¢le, mince, douce; elle rĆ©alisait l'idĆ©al de ce qu'exprime le mot Ā«respectableĀ»; car il semble qu'il soit nĆ©cessaire qu'une femme soit mĆØre pour ĆŖtre vĆ©nĆ©rable. Elle n'avait jamais Ć©tĆ© jolie; toute sa vie, qui n'avait Ć©tĆ© qu'une suite de saintes oeuvres, avait fini par mettre sur elle une sorte de blancheur et de clartĆ©; et, en vieillissant, elle avait gagnĆ© ce qu'on pourrait appeler la beautĆ© de la bontĆ©. Ce qui avait Ć©tĆ© de la maigreur dans sa jeunesse Ć©tait devenu, dans sa maturitĆ©, de la transparence; et cette diaphanĆ©itĆ© laissait voir l'ange. C'Ć©tait une Ć¢me plus encore que ce n'Ć©tait une vierge. Sa personne semblait faite d'ombre; Ć  peine assez de corps pour qu'il y eĆ»t lĆ  un sexe; un peu de matiĆØre contenant une lueur; de grands yeux toujours baissĆ©s; un prĆ©texte pour qu'une Ć¢me reste sur la terre. Madame Magloire Ć©tait une petite vieille, blanche, grasse, replĆØte, affairĆ©e, toujours haletante, Ć  cause de son activitĆ© d'abord, ensuite Ć  cause d'un asthme. ƀ son arrivĆ©e, on installa M. Myriel en son palais Ć©piscopal avec les honneurs voulus par les dĆ©crets impĆ©riaux qui classent l'Ć©vĆŖque immĆ©diatement aprĆØs le marĆ©chal de camp. Le maire et le prĆ©sident lui firent la premiĆØre visite, et lui de son cĆ“tĆ© fit la premiĆØre visite au gĆ©nĆ©ral et au prĆ©fet. L'installation terminĆ©e, la ville attendit son Ć©vĆŖque Ć  l'oeuvre. Chapitre II Monsieur Myriel devient monseigneur Bienvenu Le palais Ć©piscopal de Digne Ć©tait attenant Ć  l'hĆ“pital. Le palais Ć©piscopal Ć©tait un vaste et bel hĆ“tel bĆ¢ti en pierre au commencement du siĆØcle dernier par monseigneur Henri Puget, docteur en thĆ©ologie de la facultĆ© de Paris, abbĆ© de Simore, lequel Ć©tait Ć©vĆŖque de Digne en 1712. Ce palais Ć©tait un vrai logis seigneurial. Tout y avait grand air, les appartements de l'Ć©vĆŖque, les salons, les chambres, la cour d'honneur, fort large, avec promenoirs Ć  arcades, selon l'ancienne mode florentine, les jardins plantĆ©s de magnifiques arbres. Dans la salle Ć  manger, longue et superbe galerie qui Ć©tait au rez-de-chaussĆ©e et s'ouvrait sur les jardins, monseigneur Henri Puget avait donnĆ© Ć  manger en cĆ©rĆ©monie le 29 juillet 1714 Ć  messeigneurs Charles BrĆ»lart de Genlis, archevĆŖque-prince d'Embrun, Antoine de Mesgrigny, capucin, Ć©vĆŖque de Grasse, Philippe de VendĆ“me, grand prieur de France, abbĆ© de Saint-HonorĆ© de LĆ©rins, FranƧois de Berton de Grillon, Ć©vĆŖque-baron de Vence, CĆ©sar de Sabran de Forcalquier, Ć©vĆŖque-seigneur de GlandĆØve, et Jean Soanen, prĆŖtre de l'oratoire, prĆ©dicateur ordinaire du roi, Ć©vĆŖque-seigneur de Senez. Les portraits de ces sept rĆ©vĆ©rends personnages dĆ©coraient cette salle, et cette date mĆ©morable, 29 juillet 1714, y Ć©tait gravĆ©e en lettres d'or sur une table de marbre blanc. L'hĆ“pital Ć©tait une maison Ć©troite et basse Ć  un seul Ć©tage avec un petit jardin. Trois jours aprĆØs son arrivĆ©e, l'Ć©vĆŖque visita l'hĆ“pital. La visite terminĆ©e, il fit prier le directeur de vouloir bien venir jusque chez lui. --Monsieur le directeur de l'hĆ“pital, lui dit-il, combien en ce moment avez-vous de malades? --Vingt-six, monseigneur. --C'est ce que j'avais comptĆ©, dit l'Ć©vĆŖque. --Les lits, reprit le directeur, sont bien serrĆ©s les uns contre les autres. --C'est ce que j'avais remarquĆ©. --Les salles ne sont que des chambres, et l'air s'y renouvelle difficilement. --C'est ce qui me semble. --Et puis, quand il y a un rayon de soleil, le jardin est bien petit pour les convalescents. --C'est ce que je me disais. --Dans les Ć©pidĆ©mies, nous avons eu cette annĆ©e le typhus, nous avons eu une suette militaire il y a deux ans, cent malades quelquefois; nous ne savons que faire. --C'est la pensĆ©e qui m'Ć©tait venue. --Que voulez-vous, monseigneur? dit le directeur, il faut se rĆ©signer. Cette conversation avait lieu dans la salle Ć  manger-galerie du rez-de-chaussĆ©e. L'Ć©vĆŖque garda un moment le silence, puis il se tourna brusquement vers le directeur de l'hĆ“pital: --Monsieur, dit-il, combien pensez-vous qu'il tiendrait de lits rien que dans cette salle? --La salle Ć  manger de monseigneur! s'Ć©cria le directeur stupĆ©fait. L'Ć©vĆŖque parcourait la salle du regard et semblait y faire avec les yeux des mesures et des calculs. --Il y tiendrait bien vingt lits! dit-il, comme se parlant Ć  lui-mĆŖme. Puis Ć©levant la voix: --Tenez, monsieur le directeur de l'hĆ“pital, je vais vous dire. Il y a Ć©videmment une erreur. Vous ĆŖtes vingt-six personnes dans cinq ou six petites chambres. Nous sommes trois ici, et nous avons place pour soixante. Il y a erreur, je vous dis. Vous avez mon logis, et j'ai le vĆ“tre. Rendez-moi ma maison. C'est ici chez vous. Le lendemain, les vingt-six pauvres Ć©taient installĆ©s dans le palais de l'Ć©vĆŖque et l'Ć©vĆŖque Ć©tait Ć  l'hĆ“pital. M. Myriel n'avait point de bien, sa famille ayant Ć©tĆ© ruinĆ©e par la rĆ©volution. Sa soeur touchait une rente viagĆØre de cinq cents francs qui, au presbytĆØre, suffisait Ć  sa dĆ©pense personnelle. M. Myriel recevait de l'Ć©tat comme Ć©vĆŖque un traitement de quinze mille francs. Le jour mĆŖme où il vint se loger dans la maison de l'hĆ“pital, M. Myriel dĆ©termina l'emploi de cette somme une fois pour toutes de la maniĆØre suivante. Nous transcrivons ici une note Ć©crite de sa main. _Note pour rĆ©gler les dĆ©penses de ma maison._ _Pour le petit sĆ©minaire: quinze cents livres_ _CongrĆ©gation de la mission: cent livres_ _Pour les lazaristes de Montdidier: cent livres_ _SĆ©minaire des missions Ć©trangĆØres Ć  Paris: deux cents livres_ _CongrĆ©gation du Saint-Esprit: cent cinquante livres_ _Ɖtablissements religieux de la Terre-Sainte: cent livres_ _SociĆ©tĆ©s de charitĆ© maternelle: trois cents livres_ _En sus, pour celle d'Arles: cinquante livres_ _OEuvre pour l'amĆ©lioration des prisons: quatre cents livres_ _OEuvre pour le soulagement et la dĆ©livrance des prisonniers: cinq cents livres_ _Pour libĆ©rer des pĆØres de famille prisonniers pour dettes: mille livres_ _SupplĆ©ment au traitement des pauvres maĆ®tres d'Ć©cole du diocĆØse: deux mille livres_ _Grenier d'abondance des Hautes-Alpes: cent livres_ _CongrĆ©gation des dames de Digne, de Manosque et de Sisteron, pour l'enseignement gratuit des filles indigentes: quinze cents livres_ _Pour les pauvres: six mille livres_ _Ma dĆ©pense personnelle: mille livres_ Total: _quinze mille livres_ Pendant tout le temps qu'il occupa le siĆØge de Digne, M. Myriel ne changea presque rien Ć  cet arrangement. Il appelait cela, comme on voit, _avoir rĆ©glĆ© les dĆ©penses de sa maison_. Cet arrangement fut acceptĆ© avec une soumission absolue par mademoiselle Baptistine. Pour cette sainte fille, M. de Digne Ć©tait tout Ć  la fois son frĆØre et son Ć©vĆŖque, son ami selon la nature et son supĆ©rieur selon l'Ć©glise. Elle l'aimait et elle le vĆ©nĆ©rait tout simplement. Quand il parlait, elle s'inclinait; quand il agissait, elle adhĆ©rait. La servante seule, madame Magloire, murmura un peu. M. l'Ć©vĆŖque, on l'a pu remarquer, ne s'Ć©tait rĆ©servĆ© que mille livres, ce qui, joint Ć  la pension de mademoiselle Baptistine, faisait quinze cents francs par an. Avec ces quinze cents francs, ces deux vieilles femmes et ce vieillard vivaient. Et quand un curĆ© de village venait Ć  Digne, M. l'Ć©vĆŖque trouvait encore moyen de le traiter, grĆ¢ce Ć  la sĆ©vĆØre Ć©conomie de madame Magloire et Ć  l'intelligente administration de mademoiselle Baptistine. Un jour--il Ć©tait Ć  Digne depuis environ trois mois--l'Ć©vĆŖque dit: --Avec tout cela je suis bien gĆŖnĆ©! --Je le crois bien! s'Ć©cria madame Magloire, Monseigneur n'a seulement pas rĆ©clamĆ© la rente que le dĆ©partement lui doit pour ses frais de carrosse en ville et de tournĆ©es dans le diocĆØse. Pour les Ć©vĆŖques d'autrefois c'Ć©tait l'usage. --Tiens! dit l'Ć©vĆŖque, vous avez raison, madame Magloire. Il fit sa rĆ©clamation. Quelque temps aprĆØs, le conseil gĆ©nĆ©ral, prenant cette demande en considĆ©ration, lui vota une somme annuelle de trois mille francs, sous cette rubrique: _Allocation Ć  M. l'Ć©vĆŖque pour frais de carrosse, frais de poste et frais de tournĆ©es pastorales_. Cela fit beaucoup crier la bourgeoisie locale, et, Ć  cette occasion, un sĆ©nateur de l'empire, ancien membre du conseil des cinq-cents favorable au dix-huit brumaire et pourvu prĆØs de la ville de Digne d'une sĆ©natorerie magnifique, Ć©crivit au ministre des cultes, M. Bigot de PrĆ©ameneu, un petit billet irritĆ© et confidentiel dont nous extrayons ces lignes authentiques: Ā«--Des frais de carrosse? pourquoi faire dans une ville de moins de quatre mille habitants? Des frais de poste et de tournĆ©es? Ć  quoi bon ces tournĆ©es d'abord? ensuite comment courir la poste dans un pays de montagnes? Il n'y a pas de routes. On ne va qu'Ć  cheval. Le pont mĆŖme de la Durance Ć  ChĆ¢teau-Arnoux peut Ć  peine porter des charrettes Ć  boeufs. Ces prĆŖtres sont tous ainsi. Avides et avares. Celui-ci a fait le bon apĆ“tre en arrivant. Maintenant il fait comme les autres. Il lui faut carrosse et chaise de poste. Il lui faut du luxe comme aux anciens Ć©vĆŖques. Oh! toute cette prĆŖtraille! Monsieur le comte, les choses n'iront bien que lorsque l'empereur nous aura dĆ©livrĆ©s des calotins. ƀ bas le pape! (les affaires se brouillaient avec Rome). Quant Ć  moi, je suis pour CĆ©sar tout seul. Etc., etc.Ā» La chose, en revanche, rĆ©jouit fort madame Magloire. --Bon, dit-elle Ć  mademoiselle Baptistine, Monseigneur a commencĆ© par les autres, mais il a bien fallu qu'il finĆ®t par lui-mĆŖme. Il a rĆ©glĆ© toutes ses charitĆ©s. VoilĆ  trois mille livres pour nous. Enfin! Le soir mĆŖme, l'Ć©vĆŖque Ć©crivit et remit Ć  sa soeur une note ainsi conƧue: _Frais de carrosse et de tournĆ©es._ _Pour donner du bouillon de viande aux malades de l'hĆ“pital: quinze cents livres_ _Pour la sociĆ©tĆ© de charitĆ© maternelle d'Aix: deux cent cinquante livres_ _Pour la sociĆ©tĆ© de charitĆ© maternelle de Draguignan: deux cent cinquante livres_ _Pour les enfants trouvĆ©s: cinq cents livres_ _Pour les orphelins: cinq cents livres_ Total: _trois mille livres_ Tel Ć©tait le budget de M. Myriel. Quant au casuel Ć©piscopal, rachats de bans, dispenses, ondoiements, prĆ©dications, bĆ©nĆ©dictions d'Ć©glises ou de chapelles, mariages, etc., l'Ć©vĆŖque le percevait sur les riches avec d'autant plus d'Ć¢pretĆ© qu'il le donnait aux pauvres. Au bout de peu de temps, les offrandes d'argent affluĆØrent. Ceux qui ont et ceux qui manquent frappaient Ć  la porte de M. Myriel, les uns venant chercher l'aumĆ“ne que les autres venaient y dĆ©poser. L'Ć©vĆŖque, en moins d'un an, devint le trĆ©sorier de tous les bienfaits et le caissier de toutes les dĆ©tresses. Des sommes considĆ©rables passaient par ses mains; mais rien ne put faire qu'il changeĆ¢t quelque chose Ć  son genre de vie et qu'il ajoutĆ¢t le moindre superflu Ć  son nĆ©cessaire. Loin de lĆ . Comme il y a toujours encore plus de misĆØre en bas que de fraternitĆ© en haut, tout Ć©tait donnĆ©, pour ainsi dire, avant d'ĆŖtre reƧu; c'Ć©tait comme de l'eau sur une terre sĆØche; il avait beau recevoir de l'argent, il n'en avait jamais. Alors il se dĆ©pouillait. L'usage Ć©tant que les Ć©vĆŖques Ć©noncent leurs noms de baptĆŖme en tĆŖte de leurs mandements et de leurs lettres pastorales, les pauvres gens du pays avaient choisi, avec une sorte d'instinct affectueux, dans les noms et prĆ©noms de l'Ć©vĆŖque, celui qui leur prĆ©sentait un sens, et ils ne l'appelaient que monseigneur Bienvenu. Nous ferons comme eux, et nous le nommerons ainsi dans l'occasion. Du reste, cette appellation lui plaisait. --J'aime ce nom-lĆ , disait-il. Bienvenu corrige monseigneur. Nous ne prĆ©tendons pas que le portrait que nous faisons ici soit vraisemblable; nous nous bornons Ć  dire qu'il est ressemblant. Chapitre III ƀ bon Ć©vĆŖque dur Ć©vĆŖchĆ© M. l'Ć©vĆŖque, pour avoir converti son carrosse en aumĆ“nes, n'en faisait pas moins ses tournĆ©es. C'est un diocĆØse fatigant que celui de Digne. Il a fort peu de plaines, beaucoup de montagnes, presque pas de routes, on l'a vu tout Ć  l'heure; trente-deux cures, quarante et un vicariats et deux cent quatre-vingt-cinq succursales. Visiter tout cela, c'est une affaire. M. l'Ć©vĆŖque en venait Ć  bout. Il allait Ć  pied quand c'Ć©tait dans le voisinage, en carriole dans la plaine, en cacolet dans la montagne. Les deux vieilles femmes l'accompagnaient. Quand le trajet Ć©tait trop pĆ©nible pour elles, il allait seul. Un jour, il arriva Ć  Senez, qui est une ancienne ville Ć©piscopale, montĆ© sur un Ć¢ne. Sa bourse, fort Ć  sec dans ce moment, ne lui avait pas permis d'autre Ć©quipage. Le maire de la ville vint le recevoir Ć  la porte de l'Ć©vĆŖchĆ© et le regardait descendre de son Ć¢ne avec des yeux scandalisĆ©s. Quelques bourgeois riaient autour de lui. --Monsieur le maire, dit l'Ć©vĆŖque, et messieurs les bourgeois, je vois ce qui vous scandalise; vous trouvez que c'est bien de l'orgueil Ć  un pauvre prĆŖtre de monter une monture qui a Ć©tĆ© celle de JĆ©sus-Christ. Je l'ai fait par nĆ©cessitĆ©, je vous assure, non par vanitĆ©. Dans ses tournĆ©es, il Ć©tait indulgent et doux, et prĆŖchait moins qu'il ne causait. Il ne mettait aucune vertu sur un plateau inaccessible. Il n'allait jamais chercher bien loin ses raisonnements et ses modĆØles. Aux habitants d'un pays il citait l'exemple du pays voisin. Dans les cantons où l'on Ć©tait dur pour les nĆ©cessiteux, il disait: --Voyez les gens de BrianƧon. Ils ont donnĆ© aux indigents, aux veuves et aux orphelins le droit de faire faucher leurs prairies trois jours avant tous les autres. Ils leur rebĆ¢tissent gratuitement leurs maisons quand elles sont en ruines. Aussi est-ce un pays bĆ©ni de Dieu. Durant tout un siĆØcle de cent ans, il n'y a pas eu un meurtrier. Dans les villages Ć¢pres au gain et Ć  la moisson, il disait: --Voyez ceux d'Embrun. Si un pĆØre de famille, au temps de la rĆ©colte, a ses fils au service Ć  l'armĆ©e et ses filles en service Ć  la ville, et qu'il soit malade et empĆŖchĆ©, le curĆ© le recommande au prĆ“ne; et le dimanche, aprĆØs la messe, tous les gens du village, hommes, femmes, enfants, vont dans le champ du pauvre homme lui faire sa moisson, et lui rapportent paille et grain dans son grenier. Aux familles divisĆ©es par des questions d'argent et d'hĆ©ritage, il disait: --Voyez les montagnards de Devoluy, pays si sauvage qu'on n'y entend pas le rossignol une fois en cinquante ans. Eh bien, quand le pĆØre meurt dans une famille, les garƧons s'en vont chercher fortune, et laissent le bien aux filles, afin qu'elles puissent trouver des maris. Aux cantons qui ont le goĆ»t des procĆØs et où les fermiers se ruinent en papier timbrĆ©, il disait: --Voyez ces bons paysans de la vallĆ©e de Queyras. Ils sont lĆ  trois mille Ć¢mes. Mon Dieu! c'est comme une petite rĆ©publique. On n'y connaĆ®t ni le juge, ni l'huissier. Le maire fait tout. Il rĆ©partit l'impĆ“t, taxe chacun en conscience, juge les querelles gratis, partage les patrimoines sans honoraires, rend des sentences sans frais; et on lui obĆ©it, parce que c'est un homme juste parmi des hommes simples. Aux villages où il ne trouvait pas de maĆ®tre d'Ć©cole, il citait encore ceux de Queyras: --Savez-vous comment ils font? disait-il. Comme un petit pays de douze ou quinze feux ne peut pas toujours nourrir un magister, ils ont des maĆ®tres d'Ć©cole payĆ©s par toute la vallĆ©e qui parcourent les villages, passant huit jours dans celui-ci, dix dans celui-lĆ , et enseignant. Ces magisters vont aux foires, où je les ai vus. On les reconnaĆ®t Ć  des plumes Ć  Ć©crire qu'ils portent dans la ganse de leur chapeau. Ceux qui n'enseignent qu'Ć  lire ont une plume, ceux qui enseignent la lecture et le calcul ont deux plumes; ceux qui enseignent la lecture, le calcul et le latin ont trois plumes. Ceux-lĆ  sont de grands savants. Mais quelle honte d'ĆŖtre ignorants! Faites comme les gens de Queyras. Il parlait ainsi, gravement et paternellement, Ć  dĆ©faut d'exemples inventant des paraboles, allant droit au but, avec peu de phrases et beaucoup d'images, ce qui Ć©tait l'Ć©loquence mĆŖme de JĆ©sus-Christ, convaincu et persuadant. Chapitre IV Les oeuvres semblables aux paroles Sa conversation Ć©tait affable et gaie. Il se mettait Ć  la portĆ©e des deux vieilles femmes qui passaient leur vie prĆØs de lui; quand il riait, c'Ć©tait le rire d'un Ć©colier. Madame Magloire l'appelait volontiers _Votre Grandeur_. Un jour, il se leva de son fauteuil et alla Ć  sa bibliothĆØque chercher un livre. Ce livre Ć©tait sur un des rayons d'en haut. Comme l'Ć©vĆŖque Ć©tait d'assez petite taille, il ne put y atteindre. --Madame Magloire, dit-il, apportez-moi une chaise. Ma grandeur ne va pas jusqu'Ć  cette planche. Une de ses parentes Ć©loignĆ©es, madame la comtesse de LĆ“, laissait rarement Ć©chapper une occasion d'Ć©numĆ©rer en sa prĆ©sence ce qu'elle appelait Ā«les espĆ©rancesĀ» de ses trois fils. Elle avait plusieurs ascendants fort vieux et proches de la mort dont ses fils Ć©taient naturellement les hĆ©ritiers. Le plus jeune des trois avait Ć  recueillir d'une grand'tante cent bonnes mille livres de rentes; le deuxiĆØme Ć©tait substituĆ© au titre de duc de son oncle; l'aĆ®nĆ© devait succĆ©der Ć  la pairie de son aĆÆeul. L'Ć©vĆŖque Ć©coutait habituellement en silence ces innocents et pardonnables Ć©talages maternels. Une fois pourtant, il paraissait plus rĆŖveur que de coutume, tandis que madame de LĆ“ renouvelait le dĆ©tail de toutes ces successions et de toutes ces Ā«espĆ©rancesĀ». Elle s'interrompit avec quelque impatience: --Mon Dieu, mon cousin! mais Ć  quoi songez-vous donc? --Je songe, dit l'Ć©vĆŖque, Ć  quelque chose de singulier qui est, je crois, dans saint Augustin: Ā«Mettez votre espĆ©rance dans celui auquel on ne succĆØde point.Ā» Une autre fois, recevant une lettre de faire-part du dĆ©cĆØs d'un gentilhomme du pays, où s'Ć©talaient en une longue page, outre les dignitĆ©s du dĆ©funt, toutes les qualifications fĆ©odales et nobiliaires de tous ses parents: --Quel bon dos a la mort! s'Ć©cria-t-il. Quelle admirable charge de titres on lui fait allĆØgrement porter, et comme il faut que les hommes aient de l'esprit pour employer ainsi la tombe Ć  la vanitĆ©! Il avait dans l'occasion une raillerie douce qui contenait presque toujours un sens sĆ©rieux. Pendant un carĆŖme, un jeune vicaire vint Ć  Digne et prĆŖcha dans la cathĆ©drale. Il fut assez Ć©loquent. Le sujet de son sermon Ć©tait la charitĆ©. Il invita les riches Ć  donner aux indigents, afin d'Ć©viter l'enfer qu'il peignit le plus effroyable qu'il put et de gagner le paradis qu'il fit dĆ©sirable et charmant. Il y avait dans l'auditoire un riche marchand retirĆ©, un peu usurier, nommĆ© M. GĆ©borand, lequel avait gagnĆ© un demi-million Ć  fabriquer de gros draps, des serges, des cadis et des gasquets. De sa vie M. GĆ©borand n'avait fait l'aumĆ“ne Ć  un malheureux. ƀ partir de ce sermon, on remarqua qu'il donnait tous les dimanches un sou aux vieilles mendiantes du portail de la cathĆ©drale. Elles Ć©taient six Ć  se partager cela. Un jour, l'Ć©vĆŖque le vit faisant sa charitĆ© et dit Ć  sa soeur avec un sourire: --VoilĆ  monsieur GĆ©borand qui achĆØte pour un sou de paradis. Quand il s'agissait de charitĆ©, il ne se rebutait pas, mĆŖme devant un refus, et il trouvait alors des mots qui faisaient rĆ©flĆ©chir. Une fois, il quĆŖtait pour les pauvres dans un salon de la ville. Il y avait lĆ  le marquis de Champtercier, vieux, riche, avare, lequel trouvait moyen d'ĆŖtre tout ensemble ultra-royaliste et ultra-voltairien. Cette variĆ©tĆ© a existĆ©. L'Ć©vĆŖque, arrivĆ© Ć  lui, lui toucha le bras. --Monsieur le marquis, il faut que vous me donniez quelque chose. Le marquis se retourna et rĆ©pondit sĆØchement: --Monseigneur, j'ai mes pauvres. --Donnez-les-moi, dit l'Ć©vĆŖque. Un jour, dans la cathĆ©drale, il fit ce sermon. Ā«Mes trĆØs chers frĆØres, mes bons amis, il y a en France treize cent vingt mille maisons de paysans qui n'ont que trois ouvertures, dix-huit cent dix-sept mille qui ont deux ouvertures, la porte et une fenĆŖtre, et enfin trois cent quarante-six mille cabanes qui n'ont qu'une ouverture, la porte. Et cela, Ć  cause d'une chose qu'on appelle l'impĆ“t des portes et fenĆŖtres. Mettez-moi de pauvres familles, des vieilles femmes, des petits enfants, dans ces logis-lĆ , et voyez les fiĆØvres et les maladies. HĆ©las! Dieu donne l'air aux hommes, la loi le leur vend. Je n'accuse pas la loi, mais je bĆ©nis Dieu. Dans l'IsĆØre, dans le Var, dans les deux Alpes, les hautes et les basses, les paysans n'ont pas mĆŖme de brouettes, ils transportent les engrais Ć  dos d'hommes; ils n'ont pas de chandelles, et ils brĆ»lent des bĆ¢tons rĆ©sineux et des bouts de corde trempĆ©s dans la poix rĆ©sine. C'est comme cela dans tout le pays haut du DauphinĆ©. Ils font le pain pour six mois, ils le font cuire avec de la bouse de vache sĆ©chĆ©e. L'hiver, ils cassent ce pain Ć  coups de hache et ils le font tremper dans l'eau vingt-quatre heures pour pouvoir le manger.--Mes frĆØres, ayez pitiĆ©! voyez comme on souffre autour de vous.Ā» NĆ© provenƧal, il s'Ć©tait facilement familiarisĆ© avec tous les patois du midi. Il disait: Ā«_Eh bĆ©! moussu, sĆØs sagĆ©?_Ā» comme dans le bas Languedoc. Ā«_OntĆ© anaras passa?_Ā» comme dans les basses Alpes. Ā«_Puerte un bouen moutou embe un bouen froumage grase_Ā», comme dans le haut DauphinĆ©. Ceci plaisait au peuple, et n'avait pas peu contribuĆ© Ć  lui donner accĆØs prĆØs de tous les esprits. Il Ć©tait dans la chaumiĆØre et dans la montagne comme chez lui. Il savait dire les choses les plus grandes dans les idiomes les plus vulgaires. Parlant toutes les langues, il entrait dans toutes les Ć¢mes. Du reste, il Ć©tait le mĆŖme pour les gens du monde et pour les gens du peuple. Il ne condamnait rien hĆ¢tivement, et sans tenir compte des circonstances environnantes. Il disait: --Voyons le chemin par où la faute a passĆ©. Ɖtant, comme il se qualifiait lui-mĆŖme en souriant, un _ex-pĆ©cheur_, il n'avait aucun des escarpements du rigorisme, et il professait assez haut, et sans le froncement de sourcil des vertueux fĆ©roces, une doctrine qu'on pourrait rĆ©sumer Ć  peu prĆØs ainsi: Ā«L'homme a sur lui la chair qui est tout Ć  la fois son fardeau et sa tentation. Il la traĆ®ne et lui cĆØde. Ā«Il doit la surveiller, la contenir, la rĆ©primer, et ne lui obĆ©ir qu'Ć  la derniĆØre extrĆ©mitĆ©. Dans cette obĆ©issance-lĆ , il peut encore y avoir de la faute; mais la faute, ainsi faite, est vĆ©nielle. C'est une chute, mais une chute sur les genoux, qui peut s'achever en priĆØre. «Être un saint, c'est l'exception; ĆŖtre un juste, c'est la rĆØgle. Errez, dĆ©faillez, pĆ©chez, mais soyez des justes. Ā«Le moins de pĆ©chĆ© possible, c'est la loi de l'homme. Pas de pĆ©chĆ© du tout est le rĆŖve de l'ange. Tout ce qui est terrestre est soumis au pĆ©chĆ©. Le pĆ©chĆ© est une gravitation.Ā» Quand il voyait tout le monde crier bien fort et s'indigner bien vite: --Oh! oh! disait-il en souriant, il y a apparence que ceci est un gros crime que tout le monde commet. VoilĆ  les hypocrisies effarĆ©es qui se dĆ©pĆŖchent de protester et de se mettre Ć  couvert. Il Ć©tait indulgent pour les femmes et les pauvres sur qui pĆØse le poids de la sociĆ©tĆ© humaine. Il disait: --Les fautes des femmes, des enfants, des serviteurs, des faibles, des indigents et des ignorants sont la faute des maris, des pĆØres, des maĆ®tres, des forts, des riches et des savants. Il disait encore: --ƀ ceux qui ignorent, enseignez-leur le plus de choses que vous pourrez; la sociĆ©tĆ© est coupable de ne pas donner l'instruction gratis; elle rĆ©pond de la nuit qu'elle produit. Cette Ć¢me est pleine d'ombre, le pĆ©chĆ© s'y commet. Le coupable n'est pas celui qui y fait le pĆ©chĆ©, mais celui qui y a fait l'ombre. Comme on voit, il avait une maniĆØre Ć©trange et Ć  lui de juger les choses. Je soupƧonne qu'il avait pris cela dans l'Ć©vangile. Il entendit un jour conter dans un salon un procĆØs criminel qu'on instruisait et qu'on allait juger. Un misĆ©rable homme, par amour pour une femme et pour l'enfant qu'il avait d'elle, Ć  bout de ressources, avait fait de la fausse monnaie. La fausse monnaie Ć©tait encore punie de mort Ć  cette Ć©poque. La femme avait Ć©tĆ© arrĆŖtĆ©e Ć©mettant la premiĆØre piĆØce fausse fabriquĆ©e par l'homme. On la tenait, mais on n'avait de preuves que contre elle. Elle seule pouvait charger son amant et le perdre en avouant. Elle nia. On insista. Elle s'obstina Ć  nier. Sur ce, le procureur du roi avait eu une idĆ©e. Il avait supposĆ© une infidĆ©litĆ© de l'amant, et Ć©tait parvenu, avec des fragments de lettres savamment prĆ©sentĆ©s, Ć  persuader Ć  la malheureuse qu'elle avait une rivale et que cet homme la trompait. Alors, exaspĆ©rĆ©e de jalousie, elle avait dĆ©noncĆ© son amant, tout avouĆ©, tout prouvĆ©. L'homme Ć©tait perdu. Il allait ĆŖtre prochainement jugĆ© Ć  Aix avec sa complice. On racontait le fait, et chacun s'extasiait sur l'habiletĆ© du magistrat. En mettant la jalousie en jeu, il avait fait jaillir la vĆ©ritĆ© par la colĆØre, il avait fait sortir la justice de la vengeance. L'Ć©vĆŖque Ć©coutait tout cela en silence. Quand ce fut fini, il demanda: --Où jugera-t-on cet homme et cette femme? --ƀ la cour d'assises. Il reprit: --Et où jugera-t-on monsieur le procureur du roi? Il arriva Ć  Digne une aventure tragique. Un homme fut condamnĆ© Ć  mort pour meurtre. C'Ć©tait un malheureux pas tout Ć  fait lettrĆ©, pas tout Ć  fait ignorant, qui avait Ć©tĆ© bateleur dans les foires et Ć©crivain public. Le procĆØs occupa beaucoup la ville. La veille du jour fixĆ© pour l'exĆ©cution du condamnĆ©, l'aumĆ“nier de la prison tomba malade. Il fallait un prĆŖtre pour assister le patient Ć  ses derniers moments. On alla chercher le curĆ©. Il paraĆ®t qu'il refusa en disant: Cela ne me regarde pas. Je n'ai que faire de cette corvĆ©e et de ce saltimbanque; moi aussi, je suis malade; d'ailleurs ce n'est pas lĆ  ma place. On rapporta cette rĆ©ponse Ć  l'Ć©vĆŖque qui dit: --Monsieur le curĆ© a raison. Ce n'est pas sa place, c'est la mienne. Il alla sur-le-champ Ć  la prison, il descendit au cabanon du Ā«saltimbanqueĀ», il l'appela par son nom, lui prit la main et lui parla. Il passa toute la journĆ©e et toute la nuit prĆØs de lui, oubliant la nourriture et le sommeil, priant Dieu pour l'Ć¢me du condamnĆ© et priant le condamnĆ© pour la sienne propre. Il lui dit les meilleures vĆ©ritĆ©s qui sont les plus simples. Il fut pĆØre, frĆØre, ami; Ć©vĆŖque pour bĆ©nir seulement. Il lui enseigna tout, en le rassurant et en le consolant. Cet homme allait mourir dĆ©sespĆ©rĆ©. La mort Ć©tait pour lui comme un abĆ®me. Debout et frĆ©missant sur ce seuil lugubre, il reculait avec horreur. Il n'Ć©tait pas assez ignorant pour ĆŖtre absolument indiffĆ©rent. Sa condamnation, secousse profonde, avait en quelque sorte rompu ƧƠ et lĆ  autour de lui cette cloison qui nous sĆ©pare du mystĆØre des choses et que nous appelons la vie. Il regardait sans cesse au dehors de ce monde par ces brĆØches fatales, et ne voyait que des tĆ©nĆØbres. L'Ć©vĆŖque lui fit voir une clartĆ©. Le lendemain, quand on vint chercher le malheureux, l'Ć©vĆŖque Ć©tait lĆ . Il le suivit. Il se montra aux yeux de la foule en camail violet et avec sa croix Ć©piscopale au cou, cĆ“te Ć  cĆ“te avec ce misĆ©rable liĆ© de cordes. Il monta sur la charrette avec lui, il monta sur l'Ć©chafaud avec lui. Le patient, si morne et si accablĆ© la veille, Ć©tait rayonnant. Il sentait que son Ć¢me Ć©tait rĆ©conciliĆ©e et il espĆ©rait Dieu. L'Ć©vĆŖque l'embrassa, et, au moment où le couteau allait tomber, il lui dit: --Celui que l'homme tue, Dieu le ressuscite; celui que les frĆØres chassent retrouve le PĆØre. Priez, croyez, entrez dans la vie! le PĆØre est lĆ . Quand il redescendit de l'Ć©chafaud, il avait quelque chose dans son regard qui fit ranger le peuple. On ne savait ce qui Ć©tait le plus admirable de sa pĆ¢leur ou de sa sĆ©rĆ©nitĆ©. En rentrant Ć  cet humble logis qu'il appelait en souriant son palais, il dit Ć  sa soeur: --Je viens d'officier pontificalement. Comme les choses les plus sublimes sont souvent aussi les choses les moins comprises, il y eut dans la ville des gens qui dirent, en commentant cette conduite de l'Ć©vĆŖque: Ā«C'est de l'affectation.Ā» Ceci ne fut du reste qu'un propos de salons. Le peuple, qui n'entend pas malice aux actions saintes, fut attendri et admira. Quant Ć  l'Ć©vĆŖque, avoir vu la guillotine fut pour lui un choc, et il fut longtemps Ć  s'en remettre. L'Ć©chafaud, en effet, quand il est lĆ , dressĆ© et debout, a quelque chose qui hallucine. On peut avoir une certaine indiffĆ©rence sur la peine de mort, ne point se prononcer, dire oui et non, tant qu'on n'a pas vu de ses yeux une guillotine; mais si l'on en rencontre une, la secousse est violente, il faut se dĆ©cider et prendre parti pour ou contre. Les uns admirent, comme de Maistre; les autres exĆØcrent, comme Beccaria. La guillotine est la concrĆ©tion de la loi; elle se nomme _vindicte;_ elle n'est pas neutre, et ne vous permet pas de rester neutre. Qui l'aperƧoit frissonne du plus mystĆ©rieux des frissons. Toutes les questions sociales dressent autour de ce couperet leur point d'interrogation. L'Ć©chafaud est vision. L'Ć©chafaud n'est pas une charpente, l'Ć©chafaud n'est pas une machine, l'Ć©chafaud n'est pas une mĆ©canique inerte faite de bois, de fer et de cordes. Il semble que ce soit une sorte d'ĆŖtre qui a je ne sais quelle sombre initiative; on dirait que cette charpente voit, que cette machine entend, que cette mĆ©canique comprend, que ce bois, ce fer et ces cordes veulent. Dans la rĆŖverie affreuse où sa prĆ©sence jette l'Ć¢me, l'Ć©chafaud apparaĆ®t terrible et se mĆŖlant de ce qu'il fait. L'Ć©chafaud est le complice du bourreau; il dĆ©vore; il mange de la chair, il boit du sang. L'Ć©chafaud est une sorte de monstre fabriquĆ© par le juge et par le charpentier, un spectre qui semble vivre d'une espĆØce de vie Ć©pouvantable faite de toute la mort qu'il a donnĆ©e. Aussi l'impression fut-elle horrible et profonde; le lendemain de l'exĆ©cution et beaucoup de jours encore aprĆØs, l'Ć©vĆŖque parut accablĆ©. La sĆ©rĆ©nitĆ© presque violente du moment funĆØbre avait disparu: le fantĆ“me de la justice sociale l'obsĆ©dait. Lui qui d'ordinaire revenait de toutes ses actions avec une satisfaction si rayonnante, il semblait qu'il se fĆ®t un reproche. Par moments, il se parlait Ć  lui-mĆŖme, et bĆ©gayait Ć  demi-voix des monologues lugubres. En voici un que sa soeur entendit un soir et recueillit: --Je ne croyais pas que cela fĆ»t si monstrueux. C'est un tort de s'absorber dans la loi divine au point de ne plus s'apercevoir de la loi humaine. La mort n'appartient qu'Ć  Dieu. De quel droit les hommes touchent-ils Ć  cette chose inconnue? Avec le temps ces impressions s'attĆ©nuĆØrent, et probablement s'effacĆØrent. Cependant on remarqua que l'Ć©vĆŖque Ć©vitait dĆ©sormais de passer sur la place des exĆ©cutions. On pouvait appeler M. Myriel Ć  toute heure au chevet des malades et des mourants. Il n'ignorait pas que lĆ  Ć©tait son plus grand devoir et son plus grand travail. Les familles veuves ou orphelines n'avaient pas besoin de le demander, il arrivait de lui-mĆŖme. Il savait s'asseoir et se taire de longues heures auprĆØs de l'homme qui avait perdu la femme qu'il aimait, de la mĆØre qui avait perdu son enfant. Comme il savait le moment de se taire, il savait aussi le moment de parler. Ɣ admirable consolateur! il ne cherchait pas Ć  effacer la douleur par l'oubli, mais Ć  l'agrandir et Ć  la dignifier par l'espĆ©rance. Il disait: --Prenez garde Ć  la faƧon dont vous vous tournez vers les morts. Ne songez pas Ć  ce qui pourrit. Regardez fixement. Vous apercevrez la lueur vivante de votre mort bien-aimĆ© au fond du ciel. Il savait que la croyance est saine. Il cherchait Ć  conseiller et Ć  calmer l'homme dĆ©sespĆ©rĆ© en lui indiquant du doigt l'homme rĆ©signĆ©, et Ć  transformer la douleur qui regarde une fosse en lui montrant la douleur qui regarde une Ć©toile. Chapitre V Que monseigneur Bienvenu faisait durer trop longtemps ses soutanes La vie intĆ©rieure de M. Myriel Ć©tait pleine des mĆŖmes pensĆ©es que sa vie publique. Pour qui eĆ»t pu la voir de prĆØs, c'eĆ»t Ć©tĆ© un spectacle grave et charmant que cette pauvretĆ© volontaire dans laquelle vivait M. l'Ć©vĆŖque de Digne. Comme tous les vieillards et comme la plupart des penseurs, il dormait peu. Ce court sommeil Ć©tait profond. Le matin il se recueillait pendant une heure, puis il disait sa messe, soit Ć  la cathĆ©drale, soit dans son oratoire. Sa messe dite, il dĆ©jeunait d'un pain de seigle trempĆ© dans le lait de ses vaches. Puis il travaillait. Un Ć©vĆŖque est un homme fort occupĆ©; il faut qu'il reƧoive tous les jours le secrĆ©taire de l'Ć©vĆŖchĆ©, qui est d'ordinaire un chanoine, presque tous les jours ses grands vicaires. Il a des congrĆ©gations Ć  contrĆ“ler, des privilĆØges Ć  donner, toute une librairie ecclĆ©siastique Ć  examiner, paroissiens, catĆ©chismes diocĆ©sains, livres d'heures, etc., des mandements Ć  Ć©crire, des prĆ©dications Ć  autoriser, des curĆ©s et des maires Ć  mettre d'accord, une correspondance clĆ©ricale, une correspondance administrative, d'un cĆ“tĆ© l'Ć©tat, de l'autre le Saint-SiĆØge, mille affaires. Le temps que lui laissaient ces mille affaires, ses offices et son brĆ©viaire, il le donnait d'abord aux nĆ©cessiteux, aux malades et aux affligĆ©s; le temps que les affligĆ©s, les malades et les nĆ©cessiteux lui laissaient, il le donnait au travail. TantĆ“t il bĆŖchait la terre dans son jardin, tantĆ“t il lisait et Ć©crivait. Il n'avait qu'un mot pour ces deux sortes de travail; il appelait cela _jardiner_. --L'esprit est un jardin, disait-il. ƀ midi, il dĆ®nait. Le dĆ®ner ressemblait au dĆ©jeuner. Vers deux heures, quand le temps Ć©tait beau, il sortait et se promenait Ć  pied dans la campagne ou dans la ville, entrant souvent dans les masures. On le voyait cheminer seul, tout Ć  ses pensĆ©es, l'oeil baissĆ©, appuyĆ© sur sa longue canne, vĆŖtu de sa douillette violette ouatĆ©e et bien chaude, chaussĆ© de bas violets dans de gros souliers, et coiffĆ© de son chapeau plat qui laissait passer par ses trois cornes trois glands d'or Ć  graine d'Ć©pinards. C'Ć©tait une fĆŖte partout où il paraissait. On eĆ»t dit que son passage avait quelque chose de rĆ©chauffant et de lumineux. Les enfants et les vieillards venaient sur le seuil des portes pour l'Ć©vĆŖque comme pour le soleil. Il bĆ©nissait et on le bĆ©nissait. On montrait sa maison Ć  quiconque avait besoin de quelque chose. ƇƠ et lĆ , il s'arrĆŖtait, parlait aux petits garƧons et aux petites filles et souriait aux mĆØres. Il visitait les pauvres tant qu'il avait de l'argent; quand il n'en avait plus, il visitait les riches. Comme il faisait durer ses soutanes beaucoup de temps, et qu'il ne voulait pas qu'on s'en aperƧƻt, il ne sortait jamais dans la ville autrement qu'avec sa douillette violette. Cela le gĆŖnait un peu en Ć©tĆ©. Le soir Ć  huit heures et demie il soupait avec sa soeur, madame Magloire debout derriĆØre eux et les servant Ć  table. Rien de plus frugal que ce repas. Si pourtant l'Ć©vĆŖque avait un de ses curĆ©s Ć  souper, madame Magloire en profitait pour servir Ć  Monseigneur quelque excellent poisson des lacs ou quelque fin gibier de la montagne. Tout curĆ© Ć©tait un prĆ©texte Ć  bon repas; l'Ć©vĆŖque se laissait faire. Hors de lĆ , son ordinaire ne se composait guĆØre que de lĆ©gumes cuits dans l'eau et de soupe Ć  l'huile. Aussi disait-on dans la ville: --Quand l'Ć©vĆŖque fait pas chĆØre de curĆ©, il fait chĆØre de trappiste. AprĆØs son souper, il causait pendant une demi-heure avec mademoiselle Baptistine et madame Magloire; puis il rentrait dans sa chambre et se remettait Ć  Ć©crire, tantĆ“t sur des feuilles volantes, tantĆ“t sur la marge de quelque in-folio. Il Ć©tait lettrĆ© et quelque peu savant. Il a laissĆ© cinq ou six manuscrits assez curieux; entre autres une dissertation sur le verset de la GenĆØse: _Au commencement l'esprit de Dieu flottait sur les eaux_. Il confronte avec ce verset trois textes: la version arabe qui dit: _Les vents de Dieu soufflaient;_ Flavius JosĆØphe qui dit: _Un vent d'en haut se prĆ©cipitait sur la terre_, et enfin la paraphrase chaldaĆÆque d'Onkelos qui porte: _Un vent venant de Dieu soufflait sur la face des eaux_. Dans une autre dissertation, il examine les oeuvres thĆ©ologiques de Hugo, Ć©vĆŖque de PtolĆ©maĆÆs, arriĆØre-grand-oncle de celui qui Ć©crit ce livre, et il Ć©tablit qu'il faut attribuer Ć  cet Ć©vĆŖque les divers opuscules publiĆ©s, au siĆØcle dernier, sous le pseudonyme de Barleycourt. Parfois au milieu d'une lecture, quel que fĆ»t le livre qu'il eĆ»t entre les mains, il tombait tout Ć  coup dans une mĆ©ditation profonde, d'où il ne sortait que pour Ć©crire quelques lignes sur les pages mĆŖmes du volume. Ces lignes souvent n'ont aucun rapport avec le livre qui les contient. Nous avons sous les yeux une note Ć©crite par lui sur une des marges d'un in-quarto intitulĆ©: _Correspondance du lord Germain avec les gĆ©nĆ©raux Clinton, Cornwallis et les amiraux de la station de l'AmĆ©rique. ƀ Versailles, chez PoinƧot, libraire, et Ć  Paris, chez Pissot, libraire, quai des Augustins_. Voici cette note: «Ô vous qui ĆŖtes! Ā«L'EcclĆ©siaste vous nomme Toute-Puissance, les MacchabĆ©es vous nomment CrĆ©ateur, l'ƉpĆ®tre aux ƉphĆ©siens vous nomme LibertĆ©, Baruch vous nomme ImmensitĆ©, les Psaumes vous nomment Sagesse et VĆ©ritĆ©, Jean vous nomme LumiĆØre, les Rois vous nomment Seigneur, l'Exode vous appelle Providence, le LĆ©vitique SaintetĆ©, Esdras Justice, la crĆ©ation vous nomme Dieu, l'homme vous nomme PĆØre; mais Salomon vous nomme MisĆ©ricorde, et c'est lĆ  le plus beau de tous vos noms.Ā» Vers neuf heures du soir, les deux femmes se retiraient et montaient Ć  leurs chambres au premier, le laissant jusqu'au matin seul au rez-de-chaussĆ©e. Ici il est nĆ©cessaire que nous donnions une idĆ©e exacte du logis de M. l'Ć©vĆŖque de Digne. Chapitre VI Par qui il faisait garder sa maison La maison qu'il habitait se composait, nous l'avons dit, d'un rez-de-chaussĆ©e et d'un seul Ć©tage: trois piĆØces au rez-de-chaussĆ©e, trois chambres au premier, au-dessus un grenier. DerriĆØre la maison, un jardin d'un quart d'arpent. Les deux femmes occupaient le premier. L'Ć©vĆŖque logeait en bas. La premiĆØre piĆØce, qui s'ouvrait sur la rue, lui servait de salle Ć  manger, la deuxiĆØme de chambre Ć  coucher, et la troisiĆØme d'oratoire. On ne pouvait sortir de cet oratoire sans passer par la chambre Ć  coucher, et sortir de la chambre Ć  coucher sans passer par la salle Ć  manger. Dans l'oratoire, au fond, il y avait une alcĆ“ve fermĆ©e, avec un lit pour les cas d'hospitalitĆ©. M. l'Ć©vĆŖque offrait ce lit aux curĆ©s de campagne que des affaires ou les besoins de leur paroisse amenaient Ć  Digne. La pharmacie de l'hĆ“pital, petit bĆ¢timent ajoutĆ© Ć  la maison et pris sur le jardin, avait Ć©tĆ© transformĆ©e en cuisine et en cellier. Il y avait en outre dans le jardin une Ć©table qui Ć©tait l'ancienne cuisine de l'hospice et où l'Ć©vĆŖque entretenait deux vaches. Quelle que fĆ»t la quantitĆ© de lait qu'elles lui donnassent, il en envoyait invariablement tous les matins la moitiĆ© aux malades de l'hĆ“pital.--Je paye ma dĆ®me, disait-il. Sa chambre Ć©tait assez grande et assez difficile Ć  chauffer dans la mauvaise saison. Comme le bois est trĆØs cher Ć  Digne, il avait imaginĆ© de faire faire dans l'Ć©table Ć  vaches un compartiment fermĆ© d'une cloison en planches. C'Ć©tait lĆ  qu'il passait ses soirĆ©es dans les grands froids. Il appelait cela son _salon d'hiver_. Il n'y avait dans ce salon d'hiver, comme dans la salle Ć  manger, d'autres meubles qu'une table de bois blanc, carrĆ©e, et quatre chaises de paille. La salle Ć  manger Ć©tait ornĆ©e en outre d'un vieux buffet peint en rose Ć  la dĆ©trempe. Du buffet pareil, convenablement habillĆ© de napperons blancs et de fausses dentelles, l'Ć©vĆŖque avait fait l'autel qui dĆ©corait son oratoire. Ses pĆ©nitentes riches et les saintes femmes de Digne s'Ć©taient souvent cotisĆ©es pour faire les frais d'un bel autel neuf Ć  l'oratoire de monseigneur; il avait chaque fois pris l'argent et l'avait donnĆ© aux pauvres. --Le plus beau des autels, disait-il, c'est l'Ć¢me d'un malheureux consolĆ© qui remercie Dieu. Il avait dans son oratoire deux chaises prie-Dieu en paille, et un fauteuil Ć  bras Ć©galement en paille dans sa chambre Ć  coucher. Quand par hasard il recevait sept ou huit personnes Ć  la fois, le prĆ©fet, ou le gĆ©nĆ©ral, ou l'Ć©tat-major du rĆ©giment en garnison, ou quelques Ć©lĆØves du petit sĆ©minaire, on Ć©tait obligĆ© d'aller chercher dans l'Ć©table les chaises du salon d'hiver, dans l'oratoire les prie-Dieu, et le fauteuil dans la chambre Ć  coucher; de cette faƧon, on pouvait rĆ©unir jusqu'Ć  onze siĆØges pour les visiteurs. ƀ chaque nouvelle visite on dĆ©meublait une piĆØce. Il arrivait parfois qu'on Ć©tait douze; alors l'Ć©vĆŖque dissimulait l'embarras de la situation en se tenant debout devant la cheminĆ©e si c'Ć©tait l'hiver, ou en proposant un tour dans le jardin si c'Ć©tait l'Ć©tĆ©. Il y avait bien encore dans l'alcĆ“ve fermĆ©e une chaise, mais elle Ć©tait Ć  demi dĆ©paillĆ©e et ne portait que sur trois pieds, ce qui faisait qu'elle ne pouvait servir qu'appuyĆ©e contre le mur. Mademoiselle Baptistine avait bien aussi dans sa chambre une trĆØs grande bergĆØre en bois jadis dorĆ© et revĆŖtue de pĆ©kin Ć  fleurs, mais on avait Ć©tĆ© obligĆ© de monter cette bergĆØre au premier par la fenĆŖtre, l'escalier Ć©tant trop Ć©troit; elle ne pouvait donc pas compter parmi les en-cas du mobilier. L'ambition de mademoiselle Baptistine eĆ»t Ć©tĆ© de pouvoir acheter un meuble de salon en velours d'Utrecht jaune Ć  rosaces et en acajou Ć  cou de cygne, avec canapĆ©. Mais cela eĆ»t coĆ»tĆ© au moins cinq cents francs, et, ayant vu qu'elle n'avait rĆ©ussi Ć  Ć©conomiser pour cet objet que quarante-deux francs dix sous en cinq ans, elle avait fini par y renoncer. D'ailleurs qui est-ce qui atteint son idĆ©al? Rien de plus simple Ć  se figurer que la chambre Ć  coucher de l'Ć©vĆŖque. Une porte-fenĆŖtre donnant sur le jardin, vis-Ć -vis le lit; un lit d'hĆ“pital, en fer avec baldaquin de serge verte; dans l'ombre du lit, derriĆØre un rideau, les ustensiles de toilette trahissant encore les anciennes habitudes Ć©lĆ©gantes de l'homme du monde; deux portes, l'une prĆØs de la cheminĆ©e, donnant dans l'oratoire; l'autre, prĆØs de la bibliothĆØque, donnant dans la salle Ć  manger; la bibliothĆØque, grande armoire vitrĆ©e pleine de livres; la cheminĆ©e, de bois peint en marbre, habituellement sans feu; dans la cheminĆ©e, une paire de chenets en fer ornĆ©s de deux vases Ć  guirlandes et cannelures jadis argentĆ©s Ć  l'argent hachĆ©, ce qui Ć©tait un genre de luxe Ć©piscopal; au-dessus, Ć  l'endroit où d'ordinaire on met la glace, un crucifix de cuivre dĆ©sargentĆ© fixĆ© sur un velours noir rĆ¢pĆ© dans un cadre de bois dĆ©dorĆ©. PrĆØs de la porte-fenĆŖtre, une grande table avec un encrier, chargĆ©e de papiers confus et de gros volumes. Devant la table, le fauteuil de paille. Devant le lit, un prie-Dieu, empruntĆ© Ć  l'oratoire. Deux portraits dans des cadres ovales Ć©taient accrochĆ©s au mur des deux cĆ“tĆ©s du lit. De petites inscriptions dorĆ©es sur le fond neutre de la toile Ć  cĆ“tĆ© des figures indiquaient que les portraits reprĆ©sentaient, l'un, l'abbĆ© de Chaliot, Ć©vĆŖque de Saint-Claude, l'autre, l'abbĆ© Tourteau, vicaire gĆ©nĆ©ral d'Agde, abbĆ© de Grand-Champ, ordre de CĆ®teaux, diocĆØse de Chartres. L'Ć©vĆŖque, en succĆ©dant dans cette chambre aux malades de l'hĆ“pital, y avait trouvĆ© ces portraits et les y avait laissĆ©s. C'Ć©taient des prĆŖtres, probablement des donateurs: deux motifs pour qu'il les respectĆ¢t. Tout ce qu'il savait de ces deux personnages, c'est qu'ils avaient Ć©tĆ© nommĆ©s par le roi, l'un Ć  son Ć©vĆŖchĆ©, l'autre Ć  son bĆ©nĆ©fice, le mĆŖme jour, le 27 avril 1785. Madame Magloire ayant dĆ©crochĆ© les tableaux pour en secouer la poussiĆØre, l'Ć©vĆŖque avait trouvĆ© cette particularitĆ© Ć©crite d'une encre blanchĆ¢tre sur un petit carrĆ© de papier jauni par le temps, collĆ© avec quatre pains Ć  cacheter derriĆØre le portrait de l'abbĆ© de Grand-Champ. Il avait Ć  sa fenĆŖtre un antique rideau de grosse Ć©toffe de laine qui finit par devenir tellement vieux que, pour Ć©viter la dĆ©pense d'un neuf, madame Magloire fut obligĆ©e de faire une grande couture au beau milieu. Cette couture dessinait une croix. L'Ć©vĆŖque le faisait souvent remarquer. --Comme cela fait bien! disait-il. Toutes les chambres de la maison, au rez-de-chaussĆ©e ainsi qu'au premier, sans exception, Ć©taient blanchies au lait de chaux, ce qui est une mode de caserne et d'hĆ“pital. Cependant, dans les derniĆØres annĆ©es, madame Magloire retrouva, comme on le verra plus loin, sous le papier badigeonnĆ©, des peintures qui ornaient l'appartement de mademoiselle Baptistine. Avant d'ĆŖtre l'hĆ“pital, cette maison avait Ć©tĆ© le parloir aux bourgeois. De lĆ  cette dĆ©coration. Les chambres Ć©taient pavĆ©es de briques rouges qu'on lavait toutes les semaines, avec des nattes de paille tressĆ©e devant tous les lits. Du reste, ce logis, tenu par deux femmes, Ć©tait du haut en bas d'une propretĆ© exquise. C'Ć©tait le seul luxe que l'Ć©vĆŖque permit. Il disait: --Cela ne prend rien aux pauvres. Il faut convenir cependant qu'il lui restait de ce qu'il avait possĆ©dĆ© jadis six couverts d'argent et une grande cuiller Ć  soupe que madame Magloire regardait tous les jours avec bonheur reluire splendidement sur la grosse nappe de toile blanche. Et comme nous peignons ici l'Ć©vĆŖque de Digne tel qu'il Ć©tait, nous devons ajouter qu'il lui Ć©tait arrivĆ© plus d'une fois de dire: --Je renoncerais difficilement Ć  manger dans de l'argenterie. Il faut ajouter Ć  cette argenterie deux gros flambeaux d'argent massif qui lui venaient de l'hĆ©ritage d'une grand'tante. Ces flambeaux portaient deux bougies de cire et figuraient habituellement sur la cheminĆ©e de l'Ć©vĆŖque. Quand il avait quelqu'un Ć  dĆ®ner, madame Magloire allumait les deux bougies et mettait les deux flambeaux sur la table. Il y avait dans la chambre mĆŖme de l'Ć©vĆŖque, Ć  la tĆŖte de son lit, un petit placard dans lequel madame Magloire serrait chaque soir les six couverts d'argent et la grande cuiller. Il faut dire qu'on n'en Ć“tait jamais la clef. Le jardin, un peu gĆ¢tĆ© par les constructions assez laides dont nous avons parlĆ©, se composait de quatre allĆ©es en croix rayonnant autour d'un puisard; une autre allĆ©e faisait tout le tour du jardin et cheminait le long du mur blanc dont il Ć©tait enclos. Ces allĆ©es laissaient entre elles quatre carrĆ©s bordĆ©s de buis. Dans trois, madame Magloire cultivait des lĆ©gumes; dans le quatriĆØme, l'Ć©vĆŖque avait mis des fleurs. Il y avait ƧƠ et lĆ  quelques arbres fruitiers. Une fois madame Magloire lui avait dit avec une sorte de malice douce: --Monseigneur, vous qui tirez parti de tout, voilĆ  pourtant un carrĆ© inutile. Il vaudrait mieux avoir lĆ  des salades que des bouquets. --Madame Magloire, rĆ©pondit l'Ć©vĆŖque, vous vous trompez. Le beau est aussi utile que l'utile. Il ajouta aprĆØs un silence: --Plus peut-ĆŖtre. Ce carrĆ©, composĆ© de trois ou quatre plates-bandes, occupait M. l'Ć©vĆŖque presque autant que ses livres. Il y passait volontiers une heure ou deux, coupant, sarclant, et piquant ƧƠ et lĆ  des trous en terre où il mettait des graines. Il n'Ć©tait pas aussi hostile aux insectes qu'un jardinier l'eĆ»t voulu. Du reste, aucune prĆ©tention Ć  la botanique; il ignorait les groupes et le solidisme; il ne cherchait pas le moins du monde Ć  dĆ©cider entre Tournefort et la mĆ©thode naturelle; il ne prenait parti ni pour les utricules contre les cotylĆ©dons, ni pour Jussieu contre LinnĆ©. Il n'Ć©tudiait pas les plantes; il aimait les fleurs. Il respectait beaucoup les savants, il respectait encore plus les ignorants, et, sans jamais manquer Ć  ces deux respects, il arrosait ses plates-bandes chaque soir d'Ć©tĆ© avec un arrosoir de fer-blanc peint en vert. La maison n'avait pas une porte qui fermĆ¢t Ć  clef. La porte de la salle Ć  manger qui, nous l'avons dit, donnait de plain-pied sur la place de la cathĆ©drale, Ć©tait jadis armĆ©e de serrures et de verrous comme une porte de prison. L'Ć©vĆŖque avait fait Ć“ter toutes ces ferrures, et cette porte, la nuit comme le jour, n'Ć©tait fermĆ©e qu'au loquet. Le premier passant venu, Ć  quelque heure que ce fĆ»t, n'avait qu'Ć  la pousser. Dans les commencements, les deux femmes avaient Ć©tĆ© fort tourmentĆ©es de cette porte jamais close; mais M. de Digne leur avait dit: --Faites mettre des verrous Ć  vos chambres, si cela vous plaĆ®t. Elles avaient fini par partager sa confiance ou du moins par faire comme si elles la partageaient. Madame Magloire seule avait de temps en temps des frayeurs. Pour ce qui est de l'Ć©vĆŖque, on peut trouver sa pensĆ©e expliquĆ©e ou du moins indiquĆ©e dans ces trois lignes Ć©crites par lui sur la marge d'une bible: Ā«Voici la nuance: la porte du mĆ©decin ne doit jamais ĆŖtre fermĆ©e; la porte du prĆŖtre doit toujours ĆŖtre ouverte.Ā» Sur un autre livre, intitulĆ© _Philosophie de la science mĆ©dicale_, il avait Ć©crit cette autre note: Ā«Est-ce que je ne suis pas mĆ©decin comme eux? Moi aussi j'ai mes malades; d'abord j'ai les leurs, qu'ils appellent les malades; et puis j'ai les miens, que j'appelle les malheureux.Ā» Ailleurs encore il avait Ć©crit: Ā«Ne demandez pas son nom Ć  qui vous demande un gĆ®te. C'est surtout celui-lĆ  que son nom embarrasse qui a besoin d'asile.Ā» Il advint qu'un digne curĆ©, je ne sais plus si c'Ć©tait le curĆ© de Couloubroux ou le curĆ© de Pompierry, s'avisa de lui demander un jour, probablement Ć  l'instigation de madame Magloire, si Monseigneur Ć©tait bien sĆ»r de ne pas commettre jusqu'Ć  un certain point une imprudence en laissant jour et nuit sa porte ouverte Ć  la disposition de qui voulait entrer, et s'il ne craignait pas enfin qu'il n'arrivĆ¢t quelque malheur dans une maison si peu gardĆ©e. L'Ć©vĆŖque lui toucha l'Ć©paule avec une gravitĆ© douce et lui dit:--_Nisi Dominus custodierit domum, in vanum vigilant qui custodiunt eam_. Puis il parla d'autre chose. Il disait assez volontiers: --Il y a la bravoure du prĆŖtre comme il y a la bravoure du colonel de dragons. Seulement, ajoutait-il, la nĆ“tre doit ĆŖtre tranquille. Chapitre VII Cravatte Ici se place naturellement un fait que nous ne devons pas omettre, car il est de ceux qui font le mieux voir quel homme c'Ć©tait que M. l'Ć©vĆŖque de Digne. AprĆØs la destruction de la bande de Gaspard BĆØs qui avait infestĆ© les gorges d'Ollioules, un de ses lieutenants, Cravatte, se rĆ©fugia dans la montagne. Il se cacha quelque temps avec ses bandits, reste de la troupe de Gaspard BĆØs, dans le comtĆ© de Nice, puis gagna le PiĆ©mont, et tout Ć  coup reparut en France, du cĆ“tĆ© de Barcelonnette. On le vit Ć  Jauziers d'abord, puis aux Tuiles. Il se cacha dans les cavernes du Joug-de-l'Aigle, et de lĆ  il descendait vers les hameaux et les villages par les ravins de l'Ubaye et de l'Ubayette. Il osa mĆŖme pousser jusqu'Ć  Embrun, pĆ©nĆ©tra une nuit dans la cathĆ©drale et dĆ©valisa la sacristie. Ses brigandages dĆ©solaient le pays. On mit la gendarmerie Ć  ses trousses, mais en vain. Il Ć©chappait toujours; quelquefois il rĆ©sistait de vive force. C'Ć©tait un hardi misĆ©rable. Au milieu de toute cette terreur, l'Ć©vĆŖque arriva. Il faisait sa tournĆ©e. Au Chastelar, le maire vint le trouver et l'engagea Ć  rebrousser chemin. Cravatte tenait la montagne jusqu'Ć  l'Arche, et au-delĆ . Il y avait danger, mĆŖme avec une escorte. C'Ć©tait exposer inutilement trois ou quatre malheureux gendarmes. --Aussi, dit l'Ć©vĆŖque, je compte aller sans escorte. --Y pensez-vous, monseigneur? s'Ć©cria le maire. --J'y pense tellement, que je refuse absolument les gendarmes et que je vais partir dans une heure. --Partir? --Partir. --Seul? --Seul. --Monseigneur! vous ne ferez pas cela. --Il y a lĆ , dans la montagne, reprit l'Ć©vĆŖque, une humble petite commune grande comme Ƨa, que je n'ai pas vue depuis trois ans. Ce sont mes bons amis. De doux et honnĆŖtes bergers. Ils possĆØdent une chĆØvre sur trente qu'ils gardent. Ils font de fort jolis cordons de laine de diverses couleurs, et ils jouent des airs de montagne sur de petites flĆ»tes Ć  six trous. Ils ont besoin qu'on leur parle de temps en temps du bon Dieu. Que diraient-ils d'un Ć©vĆŖque qui a peur? Que diraient-ils si je n'y allais pas? --Mais, monseigneur, les brigands! Si vous rencontrez les brigands! --Tiens, dit l'Ć©vĆŖque, j'y songe. Vous avez raison. Je puis les rencontrer. Eux aussi doivent avoir besoin qu'on leur parle du bon Dieu. --Monseigneur! mais c'est une bande! c'est un troupeau de loups! --Monsieur le maire, c'est peut-ĆŖtre prĆ©cisĆ©ment de ce troupeau que JĆ©sus me fait le pasteur. Qui sait les voies de la Providence? --Monseigneur, ils vous dĆ©valiseront. --Je n'ai rien. --Ils vous tueront. --Un vieux bonhomme de prĆŖtre qui passe en marmottant ses momeries? Bah! Ć  quoi bon? --Ah! mon Dieu! si vous alliez les rencontrer! --Je leur demanderai l'aumĆ“ne pour mes pauvres. --Monseigneur, n'y allez pas, au nom du ciel! vous exposez votre vie. --Monsieur le maire, dit l'Ć©vĆŖque, n'est-ce dĆ©cidĆ©ment que cela? Je ne suis pas en ce monde pour garder ma vie, mais pour garder les Ć¢mes. Il fallut le laisser faire. Il partit, accompagnĆ© seulement d'un enfant qui s'offrit Ć  lui servir de guide. Son obstination fit bruit dans le pays, et effraya trĆØs fort. Il ne voulut emmener ni sa soeur ni madame Magloire. Il traversa la montagne Ć  mulet, ne rencontra personne, et arriva sain et sauf chez ses Ā«bons amisĀ» les bergers. Il y resta quinze jours, prĆŖchant, administrant, enseignant, moralisant. Lorsqu'il fut proche de son dĆ©part, il rĆ©solut de chanter pontificalement un _Te Deum_. Il en parla au curĆ©. Mais comment faire? pas d'ornements Ć©piscopaux. On ne pouvait mettre Ć  sa disposition qu'une chĆ©tive sacristie de village avec quelques vieilles chasubles de damas usĆ© ornĆ©es de galons faux. --Bah! dit l'Ć©vĆŖque. Monsieur le curĆ©, annonƧons toujours au prĆ“ne notre _Te Deum_. Cela s'arrangera. On chercha dans les Ć©glises d'alentour. Toutes les magnificences de ces humbles paroisses rĆ©unies n'auraient pas suffi Ć  vĆŖtir convenablement un chantre de cathĆ©drale. Comme on Ć©tait dans cet embarras, une grande caisse fut apportĆ©e et dĆ©posĆ©e au presbytĆØre pour M. l'Ć©vĆŖque par deux cavaliers inconnus qui repartirent sur-le-champ. On ouvrit la caisse; elle contenait une chape de drap d'or, une mitre ornĆ©e de diamants, une croix archiĆ©piscopale, une crosse magnifique, tous les vĆŖtements pontificaux volĆ©s un mois auparavant au trĆ©sor de Notre-Dame d'Embrun. Dans la caisse, il y avait un papier sur lequel Ć©taient Ć©crits ces mots: _Cravatte Ć  monseigneur Bienvenu_. --Quand je disais que cela s'arrangerait! dit l'Ć©vĆŖque. Puis il ajouta en souriant: --ƀ qui se contente d'un surplis de curĆ©, Dieu envoie une chape d'archevĆŖque. --Monseigneur, murmura le curĆ© en hochant la tĆŖte avec un sourire, Dieu, ou le diable. L'Ć©vĆŖque regarda fixement le curĆ© et reprit avec autoritĆ©: --Dieu! Quand il revint au Chastelar, et tout le long de la route, on venait le regarder par curiositĆ©. Il retrouva au presbytĆØre du Chastelar mademoiselle Baptistine et madame Magloire qui l'attendaient, et il dit Ć  sa soeur: --Eh bien, avais-je raison? Le pauvre prĆŖtre est allĆ© chez ces pauvres montagnards les mains vides, il en revient les mains pleines. J'Ć©tais parti n'emportant que ma confiance en Dieu; je rapporte le trĆ©sor d'une cathĆ©drale. Le soir, avant de se coucher, il dit encore: --Ne craignons jamais les voleurs ni les meurtriers. Ce sont lĆ  les dangers du dehors, les petits dangers. Craignons-nous nous-mĆŖmes. Les prĆ©jugĆ©s, voilĆ  les voleurs; les vices, voilĆ  les meurtriers. Les grands dangers sont au dedans de nous. Qu'importe ce qui menace notre tĆŖte ou notre bourse! Ne songeons qu'Ć  ce qui menace notre Ć¢me. Puis se tournant vers sa soeur: --Ma soeur, de la part du prĆŖtre jamais de prĆ©caution contre le prochain. Ce que le prochain fait, Dieu le permet. Bornons-nous Ć  prier Dieu quand nous croyons qu'un danger arrive sur nous. Prions-le, non pour nous, mais pour que notre frĆØre ne tombe pas en faute Ć  notre occasion. Du reste, les Ć©vĆ©nements Ć©taient rares dans son existence. Nous racontons ceux que nous savons; mais d'ordinaire il passait sa vie Ć  faire toujours les mĆŖmes choses aux mĆŖmes moments. Un mois de son annĆ©e ressemblait Ć  une heure de sa journĆ©e. Quant Ć  ce que devint Ā«le trĆ©sorĀ» de la cathĆ©drale d'Embrun, on nous embarrasserait de nous interroger lĆ -dessus. C'Ć©taient lĆ  de bien belles choses, et bien tentantes, et bien bonnes Ć  voler au profit des malheureux. VolĆ©es, elles l'Ć©taient dĆ©jĆ  d'ailleurs. La moitiĆ© de l'aventure Ć©tait accomplie; il ne restait plus qu'Ć  changer la direction du vol, et qu'Ć  lui faire faire un petit bout de chemin du cĆ“tĆ© des pauvres. Nous n'affirmons rien du reste Ć  ce sujet. Seulement on a trouvĆ© dans les papiers de l'Ć©vĆŖque une note assez obscure qui se rapporte peut-ĆŖtre Ć  cette affaire, et qui est ainsi conƧue: _La question est de savoir si cela doit faire retour Ć  la cathĆ©drale ou Ć  l'hĆ“pital_. Chapitre VIII Philosophie aprĆØs boire Le sĆ©nateur dont il a Ć©tĆ© parlĆ© plus haut Ć©tait un homme entendu qui avait fait son chemin avec une rectitude inattentive Ć  toutes ces rencontres qui font obstacle et qu'on nomme conscience, foi jurĆ©e, justice, devoir; il avait marchĆ© droit Ć  son but et sans broncher une seule fois dans la ligne de son avancement et de son intĆ©rĆŖt. C'Ć©tait un ancien procureur, attendri par le succĆØs, pas mĆ©chant homme du tout, rendant tous les petits services qu'il pouvait Ć  ses fils, Ć  ses gendres, Ć  ses parents, mĆŖme Ć  des amis; ayant sagement pris de la vie les bons cĆ“tĆ©s, les bonnes occasions, les bonnes aubaines. Le reste lui semblait assez bĆŖte. Il Ć©tait spirituel, et juste assez lettrĆ© pour se croire un disciple d'Ɖpicure en n'Ć©tant peut-ĆŖtre qu'un produit de Pigault-Lebrun. Il riait volontiers, et agrĆ©ablement, des choses infinies et Ć©ternelles, et des Ā«billevesĆ©es du bonhomme Ć©vĆŖqueĀ». Il en riait quelquefois, avec une aimable autoritĆ©, devant M. Myriel lui-mĆŖme, qui Ć©coutait. ƀ je ne sais plus quelle cĆ©rĆ©monie demi-officielle, le comte*** (ce sĆ©nateur) et M. Myriel durent dĆ®ner chez le prĆ©fet. Au dessert, le sĆ©nateur, un peu Ć©gayĆ©, quoique toujours digne, s'Ć©cria: --Parbleu, monsieur l'Ć©vĆŖque, causons. Un sĆ©nateur et un Ć©vĆŖque se regardent difficilement sans cligner de l'oeil. Nous sommes deux augures. Je vais vous faire un aveu. J'ai ma philosophie. --Et vous avez raison, rĆ©pondit l'Ć©vĆŖque. Comme on fait sa philosophie on se couche. Vous ĆŖtes sur le lit de pourpre, monsieur le sĆ©nateur. Le sĆ©nateur, encouragĆ©, reprit: --Soyons bons enfants. --Bons diables mĆŖme, dit l'Ć©vĆŖque. --Je vous dĆ©clare, reprit le sĆ©nateur, que le marquis d'Argens, Pyrrhon, Hobbes et M. Naigeon ne sont pas des maroufles. J'ai dans ma bibliothĆØque tous mes philosophes dorĆ©s sur tranche. --Comme vous-mĆŖme, monsieur le comte, interrompit l'Ć©vĆŖque. Le sĆ©nateur poursuivit: --Je hais Diderot; c'est un idĆ©ologue, un dĆ©clamateur et un rĆ©volutionnaire, au fond croyant en Dieu, et plus bigot que Voltaire. Voltaire s'est moquĆ© de Needham, et il a eu tort; car les anguilles de Needham prouvent que Dieu est inutile. Une goutte de vinaigre dans une cuillerĆ©e de pĆ¢te de farine supplĆ©e le _fiat lux_. Supposez la goutte plus grosse et la cuillerĆ©e plus grande, vous avez le monde. L'homme, c'est l'anguille. Alors Ć  quoi bon le PĆØre Ć©ternel? Monsieur l'Ć©vĆŖque, l'hypothĆØse JĆ©hovah me fatigue. Elle n'est bonne qu'Ć  produire des gens maigres qui songent creux. ƀ bas ce grand Tout qui me tracasse! Vive ZĆ©ro qui me laisse tranquille! De vous Ć  moi, et pour vider mon sac, et pour me confesser Ć  mon pasteur comme il convient, je vous avoue que j'ai du bon sens. Je ne suis pas fou de votre JĆ©sus qui prĆŖche Ć  tout bout de champ le renoncement et le sacrifice. Conseil d'avare Ć  des gueux. Renoncement! pourquoi? Sacrifice! Ć  quoi? Je ne vois pas qu'un loup s'immole au bonheur d'un autre loup. Restons donc dans la nature. Nous sommes au sommet; ayons la philosophie supĆ©rieure. Que sert d'ĆŖtre en haut, si l'on ne voit pas plus loin que le bout du nez des autres? Vivons gaĆ®ment. La vie, c'est tout. Que l'homme ait un autre avenir, ailleurs, lĆ -haut, lĆ -bas, quelque part, je n'en crois pas un traĆ®tre mot. Ah! l'on me recommande le sacrifice et le renoncement, je dois prendre garde Ć  tout ce que je fais, il faut que je me casse la tĆŖte sur le bien et le mal, sur le juste et l'injuste, sur le _fas_ et le _nefas_. Pourquoi? parce que j'aurai Ć  rendre compte de mes actions. Quand? aprĆØs ma mort. Quel bon rĆŖve! AprĆØs ma mort, bien fin qui me pincera. Faites donc saisir une poignĆ©e de cendre par une main d'ombre. Disons le vrai, nous qui sommes des initiĆ©s et qui avons levĆ© la jupe d'Isis: il n'y a ni bien, ni mal; il y a de la vĆ©gĆ©tation. Cherchons le rĆ©el. Creusons tout Ć  fait. Allons au fond, que diable! Il faut flairer la vĆ©ritĆ©, fouiller sous terre, et la saisir. Alors elle vous donne des joies exquises. Alors vous devenez fort, et vous riez. Je suis carrĆ© par la base, moi. Monsieur l'Ć©vĆŖque, l'immortalitĆ© de l'homme est un Ć©coute-s'il-pleut. Oh! la charmante promesse! Fiez-vous-y. Le bon billet qu'a Adam! On est Ć¢me, on sera ange, on aura des ailes bleues aux omoplates. Aidez-moi donc, n'est-ce pas Tertullien qui dit que les bienheureux iront d'un astre Ć  l'autre? Soit. On sera les sauterelles des Ć©toiles. Et puis, on verra Dieu. Ta ta ta. Fadaises que tous ces paradis. Dieu est une sonnette monstre. Je ne dirais point cela dans le _Moniteur_, parbleu! mais je le chuchote entre amis. _Inter pocula_. Sacrifier la terre au paradis, c'est lĆ¢cher la proie pour l'ombre. Être dupe de l'infini! pas si bĆŖte. Je suis nĆ©ant. Je m'appelle monsieur le comte NĆ©ant, sĆ©nateur. Ɖtais-je avant ma naissance? Non. Serai-je aprĆØs ma mort? Non. Que suis-je? un peu de poussiĆØre agrĆ©gĆ©e par un organisme. Qu'ai-je Ć  faire sur cette terre? J'ai le choix. Souffrir ou jouir. Où me mĆØnera la souffrance? Au nĆ©ant. Mais j'aurai souffert. Où me mĆØnera la jouissance? Au nĆ©ant. Mais j'aurai joui. Mon choix est fait. Il faut ĆŖtre mangeant ou mangĆ©. Je mange. Mieux vaut ĆŖtre la dent que l'herbe. Telle est ma sagesse. AprĆØs quoi, va comme je te pousse, le fossoyeur est lĆ , le PanthĆ©on pour nous autres, tout tombe dans le grand trou. Fin. _Finis_. Liquidation totale. Ceci est l'endroit de l'Ć©vanouissement. La mort est morte, croyez-moi. Qu'il y ait lĆ  quelqu'un qui ait quelque chose Ć  me dire, je ris d'y songer. Invention de nourrices. Croquemitaine pour les enfants, JĆ©hovah pour les hommes. Non, notre lendemain est de la nuit. DerriĆØre la tombe, il n'y a plus que des nĆ©ants Ć©gaux. Vous avez Ć©tĆ© Sardanapale, vous avez Ć©tĆ© Vincent de Paul, cela fait le mĆŖme rien. VoilĆ  le vrai. Donc vivez, par-dessus tout. Usez de votre moi pendant que vous le tenez. En vĆ©ritĆ©, je vous le dis, monsieur l'Ć©vĆŖque, j'ai ma philosophie, et j'ai mes philosophes. Je ne me laisse pas enguirlander par des balivernes. AprĆØs Ƨa, il faut bien quelque chose Ć  ceux qui sont en bas, aux va-nu-pieds, aux gagne-petit, aux misĆ©rables. On leur donne Ć  gober les lĆ©gendes, les chimĆØres, l'Ć¢me, l'immortalitĆ©, le paradis, les Ć©toiles. Ils mĆ¢chent cela. Ils le mettent sur leur pain sec. Qui n'a rien a le bon Dieu. C'est bien le moins. Je n'y fais point obstacle, mais je garde pour moi monsieur Naigeon. Le bon Dieu est bon pour le peuple. L'Ć©vĆŖque battit des mains. --VoilĆ  parler! s'Ć©cria-t-il. L'excellente chose, et vraiment merveilleuse, que ce matĆ©rialisme-lĆ ! Ne l'a pas qui veut. Ah! quand on l'a, on n'est plus dupe; on ne se laisse pas bĆŖtement exiler comme Caton, ni lapider comme Ɖtienne, ni brĆ»ler vif comme Jeanne d'Arc. Ceux qui ont rĆ©ussi Ć  se procurer ce matĆ©rialisme admirable ont la joie de se sentir irresponsables, et de penser qu'ils peuvent dĆ©vorer tout, sans inquiĆ©tude, les places, les sinĆ©cures, les dignitĆ©s, le pouvoir bien ou mal acquis, les palinodies lucratives, les trahisons utiles, les savoureuses capitulations de conscience, et qu'ils entreront dans la tombe, leur digestion faite. Comme c'est agrĆ©able! Je ne dis pas cela pour vous, monsieur le sĆ©nateur. Cependant il m'est impossible de ne point vous fĆ©liciter. Vous autres grands seigneurs, vous avez, vous le dites, une philosophie Ć  vous et pour vous, exquise, raffinĆ©e, accessible aux riches seuls, bonne Ć  toutes les sauces, assaisonnant admirablement les voluptĆ©s de la vie. Cette philosophie est prise dans les profondeurs et dĆ©terrĆ©e par des chercheurs spĆ©ciaux. Mais vous ĆŖtes bons princes, et vous ne trouvez pas mauvais que la croyance au bon Dieu soit la philosophie du peuple, Ć  peu prĆØs comme l'oie aux marrons est la dinde aux truffes du pauvre. Chapitre IX Le frĆØre racontĆ© par la soeur Pour donner une idĆ©e du mĆ©nage intĆ©rieur de M. l'Ć©vĆŖque de Digne et de la faƧon dont ces deux saintes filles subordonnaient leurs actions, leurs pensĆ©es, mĆŖme leurs instincts de femmes aisĆ©ment effrayĆ©es, aux habitudes et aux intentions de l'Ć©vĆŖque, sans qu'il eĆ»t mĆŖme Ć  prendre la peine de parler pour les exprimer, nous ne pouvons mieux faire que de transcrire ici une lettre de mademoiselle Baptistine Ć  madame la vicomtesse de Boischevron, son amie d'enfance. Cette lettre est entre nos mains. Ā«Digne, 16 dĆ©cembre 18.... Ā«Ma bonne madame, pas un jour ne se passe sans que nous parlions de vous. C'est assez notre habitude, mais il y a une raison de plus. Figurez-vous qu'en lavant et Ć©poussetant les plafonds et les murs, madame Magloire a fait des dĆ©couvertes; maintenant nos deux chambres tapissĆ©es de vieux papier blanchi Ć  la chaux ne dĆ©pareraient pas un chĆ¢teau dans le genre du vĆ“tre. Madame Magloire a dĆ©chirĆ© tout le papier. Il y avait des choses dessous. Mon salon, où il n'y a pas de meubles, et dont nous nous servons pour Ć©tendre le linge aprĆØs les lessives, a quinze pieds de haut, dix-huit de large carrĆ©s, un plafond peint anciennement avec dorure, des solives comme chez vous. C'Ć©tait recouvert d'une toile, du temps que c'Ć©tait l'hĆ“pital. Enfin des boiseries du temps de nos grand'mĆØres. Mais c'est ma chambre qu'il faut voir. Madame Magloire a dĆ©couvert, sous au moins dix papiers collĆ©s dessus, des peintures, sans ĆŖtre bonnes, qui peuvent se supporter. C'est TĆ©lĆ©maque reƧu chevalier par Minerve, c'est lui encore dans les jardins. Le nom m'Ć©chappe. Enfin où les dames romaines se rendaient une seule nuit. Que vous dirai-je? j'ai des romains, des romaines (_ici un mot illisible_), et toute la suite. Madame Magloire a dĆ©barbouillĆ© tout cela, et cet Ć©tĆ© elle va rĆ©parer quelques petites avaries, revenir le tout, et ma chambre sera un vrai musĆ©e. Elle a trouvĆ© aussi dans un coin du grenier deux consoles en bois, genre ancien. On demandait deux Ć©cus de six livres pour les redorer, mais il vaut bien mieux donner cela aux pauvres; d'ailleurs c'est fort laid, et j'aimerais mieux une table ronde en acajou. Ā«Je suis toujours bien heureuse. Mon frĆØre est si bon. Il donne tout ce qu'il a aux indigents et aux malades. Nous sommes trĆØs gĆŖnĆ©s. Le pays est dur l'hiver, et il faut bien faire quelque chose pour ceux qui manquent. Nous sommes Ć  peu prĆØs chauffĆ©s et Ć©clairĆ©s. Vous voyez que ce sont de grandes douceurs. Ā«Mon frĆØre a ses habitudes Ć  lui. Quand il cause, il dit qu'un Ć©vĆŖque doit ĆŖtre ainsi. Figurez-vous que la porte de la maison n'est jamais fermĆ©e. Entre qui veut, et l'on est tout de suite chez mon frĆØre. Il ne craint rien, mĆŖme la nuit. C'est lĆ  sa bravoure Ć  lui, comme il dit. Ā«Il ne veut pas que je craigne pour lui, ni que madame Magloire craigne. Il s'expose Ć  tous les dangers, et il ne veut mĆŖme pas que nous ayons l'air de nous en apercevoir. Il faut savoir le comprendre. Ā«Il sort par la pluie, il marche dans l'eau, il voyage en hiver. Il n'a pas peur de la nuit, des routes suspectes ni des rencontres. Ā«L'an dernier, il est allĆ© tout seul dans un pays de voleurs. Il n'a pas voulu nous emmener. Il est restĆ© quinze jours absent. ƀ son retour, il n'avait rien eu, on le croyait mort, et il se portait bien, et il a dit: "VoilĆ  comme on m'a volĆ©!" Et il a ouvert une malle pleine de tous les bijoux de la cathĆ©drale d'Embrun, que les voleurs lui avaient donnĆ©s. Ā«Cette fois-lĆ , en revenant, comme j'Ć©tais allĆ©e Ć  sa rencontre Ć  deux lieues avec d'autres de ses amis, je n'ai pu m'empĆŖcher de le gronder un peu, en ayant soin de ne parler que pendant que la voiture faisait du bruit, afin que personne autre ne pĆ»t entendre. Ā«Dans les premiers temps, je me disais: il n'y a pas de dangers qui l'arrĆŖtent, il est terrible. ƀ prĆ©sent j'ai fini par m'y accoutumer. Je fais signe Ć  madame Magloire pour qu'elle ne le contrarie pas. Il se risque comme il veut. Moi j'emmĆØne madame Magloire, je rentre dans ma chambre, je prie pour lui, et je m'endors. Je suis tranquille, parce que je sais bien que s'il lui arrivait malheur, ce serait ma fin. Je m'en irais au bon Dieu avec mon frĆØre et mon Ć©vĆŖque. Madame Magloire a eu plus de peine que moi Ć  s'habituer Ć  ce qu'elle appelait ses imprudences. Mais Ć  prĆ©sent le pli est pris. Nous prions toutes les deux, nous avons peur ensemble, et nous nous endormons. Le diable entrerait dans la maison qu'on le laisserait faire. AprĆØs tout, que craignons-nous dans cette maison? Il y a toujours quelqu'un avec nous, qui est le plus fort. Le diable peut y passer, mais le bon Dieu l'habite. Ā«VoilĆ  qui me suffit. Mon frĆØre n'a plus mĆŖme besoin de me dire un mot maintenant. Je le comprends sans qu'il parle, et nous nous abandonnons Ć  la Providence. Ā«VoilĆ  comme il faut ĆŖtre avec un homme qui a du grand dans l'esprit. Ā«J'ai questionnĆ© mon frĆØre pour le renseignement que vous me demandez sur la famille de Faux. Vous savez comme il sait tout et comme il a des souvenirs, car il est toujours trĆØs bon royaliste. C'est de vrai une trĆØs ancienne famille normande de la gĆ©nĆ©ralitĆ© de Caen. Il y a cinq cents ans d'un Raoul de Faux, d'un Jean de Faux et d'un Thomas de Faux, qui Ć©taient des gentilshommes, dont un seigneur de Rochefort. Le dernier Ć©tait Guy-Ɖtienne-Alexandre, et Ć©tait maĆ®tre de camp, et quelque chose dans les chevaux-lĆ©gers de Bretagne. Sa fille Marie-Louise a Ć©pousĆ© Adrien-Charles de Gramont, fils du duc Louis de Gramont, pair de France, colonel des gardes franƧaises et lieutenant gĆ©nĆ©ral des armĆ©es. On Ć©crit Faux, Fauq et Faoucq. Ā«Bonne madame, recommandez-nous aux priĆØres de votre saint parent, M. le cardinal. Quant Ć  votre chĆØre Sylvanie, elle a bien fait de ne pas prendre les courts instants qu'elle passe prĆØs de vous pour m'Ć©crire. Elle se porte bien, travaille selon vos dĆ©sirs, m'aime toujours. C'est tout ce que je veux. Son souvenir par vous m'est arrivĆ©. Je m'en trouve heureuse. Ma santĆ© n'est pas trop mauvaise, et cependant je maigris tous les jours davantage. Adieu, le papier me manque et me force de vous quitter. Mille bonnes choses. Ā«Baptistine. Ā«P. S. Madame votre belle-soeur est toujours ici avec sa jeune famille. Votre petit-neveu est charmant. Savez-vous qu'il a cinq ans bientĆ“t! Hier il a vu passer un cheval auquel on avait mis des genouillĆØres, et il disait: "Qu'est-ce qu'il a donc aux genoux?" Il est si gentil, cet enfant! Son petit frĆØre traĆ®ne un vieux balai dans l'appartement comme une voiture, et dit: "Hu!" Ā»Comme on le voit par cette lettre, ces deux femmes savaient se plier aux faƧons d'ĆŖtre de l'Ć©vĆŖque avec ce gĆ©nie particulier de la femme qui comprend l'homme mieux que l'homme ne se comprend. L'Ć©vĆŖque de Digne, sous cet air doux et candide qui ne se dĆ©mentait jamais, faisait parfois des choses grandes, hardies et magnifiques, sans paraĆ®tre mĆŖme s'en douter. Elles en tremblaient, mais elles le laissaient faire. Quelquefois madame Magloire essayait une remontrance avant; jamais pendant ni aprĆØs. Jamais on ne le troublait, ne fĆ»t-ce que par un signe, dans une action commencĆ©e. ƀ de certains moments, sans qu'il eĆ»t besoin de le dire, lorsqu'il n'en avait peut-ĆŖtre pas lui-mĆŖme conscience, tant sa simplicitĆ© Ć©tait parfaite, elles sentaient vaguement qu'il agissait comme Ć©vĆŖque; alors elles n'Ć©taient plus que deux ombres dans la maison. Elles le servaient passivement, et, si c'Ć©tait obĆ©ir que de disparaĆ®tre, elles disparaissaient. Elles savaient, avec une admirable dĆ©licatesse d'instinct, que certaines sollicitudes peuvent gĆŖner. Aussi, mĆŖme le croyant en pĆ©ril, elles comprenaient, je ne dis pas sa pensĆ©e, mais sa nature, jusqu'au point de ne plus veiller sur lui. Elles le confiaient Ć  Dieu. D'ailleurs Baptistine disait, comme on vient de le lire, que la fin de son frĆØre serait la sienne. Madame Magloire ne le disait pas, mais elle le savait. Chapitre X L'Ć©vĆŖque en prĆ©sence d'une lumiĆØre inconnue ƀ une Ć©poque un peu postĆ©rieure Ć  la date de la lettre citĆ©e dans les pages prĆ©cĆ©dentes, il fit une chose, Ć  en croire toute la ville, plus risquĆ©e encore que sa promenade Ć  travers les montagnes des bandits. Il y avait prĆØs de Digne, dans la campagne, un homme qui vivait solitaire. Cet homme, disons tout de suite le gros mot, Ć©tait un ancien conventionnel. Il se nommait G. On parlait du conventionnel G. dans le petit monde de Digne avec une sorte d'horreur. Un conventionnel, vous figurez-vous cela? Cela existait du temps qu'on se tutoyait et qu'on disait: citoyen. Cet homme Ć©tait Ć  peu prĆØs un monstre. Il n'avait pas votĆ© la mort du roi, mais presque. C'Ć©tait un quasi-rĆ©gicide. Il avait Ć©tĆ© terrible. Comment, au retour des princes lĆ©gitimes, n'avait-on pas traduit cet homme-lĆ  devant une cour prĆ©vĆ“tale? On ne lui eĆ»t pas coupĆ© la tĆŖte, si vous voulez, il faut de la clĆ©mence, soit; mais un bon bannissement Ć  vie. Un exemple enfin! etc., etc. C'Ć©tait un athĆ©e d'ailleurs, comme tous ces gens-lĆ .--CommĆ©rages des oies sur le vautour. Ɖtait-ce du reste un vautour que G.? Oui, si l'on en jugeait par ce qu'il y avait de farouche dans sa solitude. N'ayant pas votĆ© la mort du roi, il n'avait pas Ć©tĆ© compris dans les dĆ©crets d'exil et avait pu rester en France. Il habitait, Ć  trois quarts d'heure de la ville, loin de tout hameau, loin de tout chemin, on ne sait quel repli perdu d'un vallon trĆØs sauvage. Il avait lĆ , disait-on, une espĆØce de champ, un trou, un repaire. Pas de voisins; pas mĆŖme de passants. Depuis qu'il demeurait dans ce vallon, le sentier qui y conduisait avait disparu sous l'herbe. On parlait de cet endroit-lĆ  comme de la maison du bourreau. Pourtant l'Ć©vĆŖque songeait, et de temps en temps regardait l'horizon Ć  l'endroit où un bouquet d'arbres marquait le vallon du vieux conventionnel, et il disait: --Il y a lĆ  une Ć¢me qui est seule. Et au fond de sa pensĆ©e il ajoutait: Ā«Je lui dois ma visite.Ā» Mais, avouons-le, cette idĆ©e, au premier abord naturelle, lui apparaissait, aprĆØs un moment de rĆ©flexion, comme Ć©trange et impossible, et presque repoussante. Car, au fond, il partageait l'impression gĆ©nĆ©rale, et le conventionnel lui inspirait, sans qu'il s'en rendĆ®t clairement compte, ce sentiment qui est comme la frontiĆØre de la haine et qu'exprime si bien le mot Ć©loignement. Toutefois, la gale de la brebis doit-elle faire reculer le pasteur? Non. Mais quelle brebis! Le bon Ć©vĆŖque Ć©tait perplexe. Quelquefois il allait de ce cĆ“tĆ©-lĆ , puis il revenait. Un jour enfin le bruit se rĆ©pandit dans la ville qu'une faƧon de jeune pĆ¢tre qui servait le conventionnel G. dans sa bauge Ć©tait venu chercher un mĆ©decin; que le vieux scĆ©lĆ©rat se mourait, que la paralysie le gagnait, et qu'il ne passerait pas la nuit. --Dieu merci! ajoutaient quelques-uns. L'Ć©vĆŖque prit son bĆ¢ton, mit son pardessus Ć  cause de sa soutane un peu trop usĆ©e, comme nous l'avons dit, et aussi Ć  cause du vent du soir qui ne devait pas tarder Ć  souffler, et partit. Le soleil dĆ©clinait et touchait presque Ć  l'horizon, quand l'Ć©vĆŖque arriva Ć  l'endroit excommuniĆ©. Il reconnut avec un certain battement de coeur qu'il Ć©tait prĆØs de la taniĆØre. Il enjamba un fossĆ©, franchit une haie, leva un Ć©chalier, entra dans un courtil dĆ©labrĆ©, fit quelques pas assez hardiment, et tout Ć  coup, au fond de la friche, derriĆØre une haute broussaille, il aperƧut la caverne. C'Ć©tait une cabane toute basse, indigente, petite et propre, avec une treille clouĆ©e Ć  la faƧade. Devant la porte, dans une vieille chaise Ć  roulettes, fauteuil du paysan, il y avait un homme en cheveux blancs qui souriait au soleil. PrĆØs du vieillard assis se tenait debout un jeune garƧon, le petit pĆ¢tre. Il tendait au vieillard une jatte de lait. Pendant que l'Ć©vĆŖque regardait, le vieillard Ć©leva la voix: --Merci, dit-il, je n'ai plus besoin de rien. Et son sourire quitta le soleil pour s'arrĆŖter sur l'enfant. L'Ć©vĆŖque s'avanƧa. Au bruit qu'il fit en marchant, le vieux homme assis tourna la tĆŖte, et son visage exprima toute la quantitĆ© de surprise qu'on peut avoir aprĆØs une longue vie. --Depuis que je suis ici, dit-il, voilĆ  la premiĆØre fois qu'on entre chez moi. Qui ĆŖtes-vous, monsieur? L'Ć©vĆŖque rĆ©pondit: --Je me nomme Bienvenu Myriel. --Bienvenu Myriel! j'ai entendu prononcer ce nom. Est-ce que c'est vous que le peuple appelle monseigneur Bienvenu? --C'est moi. Le vieillard reprit avec un demi-sourire: --En ce cas, vous ĆŖtes mon Ć©vĆŖque? --Un peu. --Entrez, monsieur. Le conventionnel tendit la main Ć  l'Ć©vĆŖque, mais l'Ć©vĆŖque ne la prit pas. L'Ć©vĆŖque se borna Ć  dire: --Je suis satisfait de voir qu'on m'avait trompĆ©. Vous ne me semblez, certes, pas malade. --Monsieur, rĆ©pondit le vieillard, je vais guĆ©rir. Il fit une pause et dit: --Je mourrai dans trois heures. Puis il reprit: --Je suis un peu mĆ©decin; je sais de quelle faƧon la derniĆØre heure vient. Hier, je n'avais que les pieds froids; aujourd'hui, le froid a gagnĆ© les genoux; maintenant je le sens qui monte jusqu'Ć  la ceinture; quand il sera au coeur, je m'arrĆŖterai. Le soleil est beau, n'est-ce pas? je me suis fait rouler dehors pour jeter un dernier coup d'oeil sur les choses, vous pouvez me parler, cela ne me fatigue point. Vous faites bien de venir regarder un homme qui va mourir. Il est bon que ce moment-lĆ  ait des tĆ©moins. On a des manies; j'aurais voulu aller jusqu'Ć  l'aube. Mais je sais que j'en ai Ć  peine pour trois heures. Il fera nuit. Au fait, qu'importe! Finir est une affaire simple. On n'a pas besoin du matin pour cela. Soit. Je mourrai Ć  la belle Ć©toile. Le vieillard se tourna vers le pĆ¢tre. --Toi, va te coucher. Tu as veillĆ© l'autre nuit. Tu es fatiguĆ©. L'enfant rentra dans la cabane. Le vieillard le suivit des yeux et ajouta comme se parlant Ć  lui-mĆŖme: --Pendant qu'il dormira, je mourrai. Les deux sommeils peuvent faire bon voisinage. L'Ć©vĆŖque n'Ć©tait pas Ć©mu comme il semble qu'il aurait pu l'ĆŖtre. Il ne croyait pas sentir Dieu dans cette faƧon de mourir. Disons tout, car les petites contradictions des grands coeurs veulent ĆŖtre indiquĆ©es comme le reste, lui qui, dans l'occasion, riait si volontiers de Sa Grandeur, il Ć©tait quelque peu choquĆ© de ne pas ĆŖtre appelĆ© monseigneur, et il Ć©tait presque tentĆ© de rĆ©pliquer: citoyen. Il lui vint une vellĆ©itĆ© de familiaritĆ© bourrue, assez ordinaire aux mĆ©decins et aux prĆŖtres, mais qui ne lui Ć©tait pas habituelle, Ć  lui. Cet homme, aprĆØs tout, ce conventionnel, ce reprĆ©sentant du peuple, avait Ć©tĆ© un puissant de la terre; pour la premiĆØre fois de sa vie peut-ĆŖtre, l'Ć©vĆŖque se sentit en humeur de sĆ©vĆ©ritĆ©. Le conventionnel cependant le considĆ©rait avec une cordialitĆ© modeste, où l'on eĆ»t pu dĆ©mĆŖler l'humilitĆ© qui sied quand on est si prĆØs de sa mise en poussiĆØre. L'Ć©vĆŖque, de son cĆ“tĆ©, quoiqu'il se gardĆ¢t ordinairement de la curiositĆ©, laquelle, selon lui, Ć©tait contiguĆ« Ć  l'offense, ne pouvait s'empĆŖcher d'examiner le conventionnel avec une attention qui, n'ayant pas sa source dans la sympathie, lui eĆ»t Ć©tĆ© probablement reprochĆ©e par sa conscience vis-Ć -vis de tout autre homme. Un conventionnel lui faisait un peu l'effet d'ĆŖtre hors la loi, mĆŖme hors la loi de charitĆ©. G., calme, le buste presque droit, la voix vibrante, Ć©tait un de ces grands octogĆ©naires qui font l'Ć©tonnement du physiologiste. La rĆ©volution a eu beaucoup de ces hommes proportionnĆ©s Ć  l'Ć©poque. On sentait dans ce vieillard l'homme Ć  l'Ć©preuve. Si prĆØs de sa fin, il avait conservĆ© tous les gestes de la santĆ©. Il y avait dans son coup d'oeil clair, dans son accent ferme, dans son robuste mouvement d'Ć©paules, de quoi dĆ©concerter la mort. AzraĆ«l, l'ange mahomĆ©tan du sĆ©pulcre, eĆ»t rebroussĆ© chemin et eĆ»t cru se tromper de porte. G. semblait mourir parce qu'il le voulait bien. Il y avait de la libertĆ© dans son agonie. Les jambes seulement Ć©taient immobiles. Les tĆ©nĆØbres le tenaient par lĆ . Les pieds Ć©taient morts et froids, et la tĆŖte vivait de toute la puissance de la vie et paraissait en pleine lumiĆØre. G., en ce grave moment, ressemblait Ć  ce roi du conte oriental, chair par en haut, marbre par en bas. Une pierre Ć©tait lĆ . L'Ć©vĆŖque s'y assit. L'exorde fut _ex abrupto_. --Je vous fĆ©licite, dit-il du ton dont on rĆ©primande. Vous n'avez toujours pas votĆ© la mort du roi. Le conventionnel ne parut pas remarquer le sous-entendu amer cachĆ© dans ce mot: toujours. Il rĆ©pondit. Tout sourire avait disparu de sa face. --Ne me fĆ©licitez pas trop, monsieur; j'ai votĆ© la fin du tyran. C'Ć©tait l'accent austĆØre en prĆ©sence de l'accent sĆ©vĆØre. --Que voulez-vous dire? reprit l'Ć©vĆŖque. --Je veux dire que l'homme a un tyran, l'ignorance. J'ai votĆ© la fin de ce tyran-lĆ . Ce tyran-lĆ  a engendrĆ© la royautĆ© qui est l'autoritĆ© prise dans le faux, tandis que la science est l'autoritĆ© prise dans le vrai. L'homme ne doit ĆŖtre gouvernĆ© que par la science. --Et la conscience, ajouta l'Ć©vĆŖque. --C'est la mĆŖme chose. La conscience, c'est la quantitĆ© de science innĆ©e que nous avons en nous. Monseigneur Bienvenu Ć©coutait, un peu Ć©tonnĆ©, ce langage trĆØs nouveau pour lui. Le conventionnel poursuivit: --Quant Ć  Louis XVI, j'ai dit non. Je ne me crois pas le droit de tuer un homme; mais je me sens le devoir d'exterminer le mal. J'ai votĆ© la fin du tyran. C'est-Ć -dire la fin de la prostitution pour la femme, la fin de l'esclavage pour l'homme, la fin de la nuit pour l'enfant. En votant la rĆ©publique, j'ai votĆ© cela. J'ai votĆ© la fraternitĆ©, la concorde, l'aurore! J'ai aidĆ© Ć  la chute des prĆ©jugĆ©s et des erreurs. Les Ć©croulements des erreurs et des prĆ©jugĆ©s font de la lumiĆØre. Nous avons fait tomber le vieux monde, nous autres, et le vieux monde, vase des misĆØres, en se renversant sur le genre humain, est devenu une urne de joie. --Joie mĆŖlĆ©e, dit l'Ć©vĆŖque. --Vous pourriez dire joie troublĆ©e, et aujourd'hui, aprĆØs ce fatal retour du passĆ© qu'on nomme 1814, joie disparue. HĆ©las, l'oeuvre a Ć©tĆ© incomplĆØte, j'en conviens; nous avons dĆ©moli l'ancien rĆ©gime dans les faits, nous n'avons pu entiĆØrement le supprimer dans les idĆ©es. DĆ©truire les abus, cela ne suffit pas; il faut modifier les moeurs. Le moulin n'y est plus, le vent y est encore. --Vous avez dĆ©moli. DĆ©molir peut ĆŖtre utile; mais je me dĆ©fie d'une dĆ©molition compliquĆ©e de colĆØre. --Le droit a sa colĆØre, monsieur l'Ć©vĆŖque, et la colĆØre du droit est un Ć©lĆ©ment du progrĆØs. N'importe, et quoi qu'on en dise, la rĆ©volution franƧaise est le plus puissant pas du genre humain depuis l'avĆØnement du Christ. IncomplĆØte, soit; mais sublime. Elle a dĆ©gagĆ© toutes les inconnues sociales. Elle a adouci les esprits; elle a calmĆ©, apaisĆ©, Ć©clairĆ©; elle a fait couler sur la terre des flots de civilisation. Elle a Ć©tĆ© bonne. La rĆ©volution franƧaise, c'est le sacre de l'humanitĆ©. L'Ć©vĆŖque ne put s'empĆŖcher de murmurer: --Oui? 93! Le conventionnel se dressa sur sa chaise avec une solennitĆ© presque lugubre, et, autant qu'un mourant peut s'Ć©crier, il s'Ć©cria: --Ah! vous y voilĆ ! 93! J'attendais ce mot-lĆ . Un nuage s'est formĆ© pendant quinze cents ans. Au bout de quinze siĆØcles, il a crevĆ©. Vous faites le procĆØs au coup de tonnerre. L'Ć©vĆŖque sentit, sans se l'avouer peut-ĆŖtre, que quelque chose en lui Ć©tait atteint. Pourtant il fit bonne contenance. Il rĆ©pondit: --Le juge parle au nom de la justice; le prĆŖtre parle au nom de la pitiĆ©, qui n'est autre chose qu'une justice plus Ć©levĆ©e. Un coup de tonnerre ne doit pas se tromper. Et il ajouta en regardant fixement le conventionnel. --Louis XVII? Le conventionnel Ć©tendit la main et saisit le bras de l'Ć©vĆŖque: --Louis XVII! Voyons, sur qui pleurez-vous? Est-ce sur l'enfant innocent? alors, soit. Je pleure avec vous. Est-ce sur l'enfant royal? je demande Ć  rĆ©flĆ©chir. Pour moi, le frĆØre de Cartouche, enfant innocent, pendu sous les aisselles en place de GrĆØve jusqu'Ć  ce que mort s'ensuive, pour le seul crime d'avoir Ć©tĆ© le frĆØre de Cartouche, n'est pas moins douloureux que le petit-fils de Louis XV, enfant innocent, martyrisĆ© dans la tour du Temple pour le seul crime d'avoir Ć©tĆ© le petit-fils de Louis XV. --Monsieur, dit l'Ć©vĆŖque, je n'aime pas ces rapprochements de noms. --Cartouche? Louis XV? pour lequel des deux rĆ©clamez-vous? Il y eut un moment de silence. L'Ć©vĆŖque regrettait presque d'ĆŖtre venu, et pourtant il se sentait vaguement et Ć©trangement Ć©branlĆ©. Le conventionnel reprit: --Ah! monsieur le prĆŖtre, vous n'aimez pas les cruditĆ©s du vrai. Christ les aimait, lui. Il prenait une verge et il Ć©poussetait le temple. Son fouet plein d'Ć©clairs Ć©tait un rude diseur de vĆ©ritĆ©s. Quand il s'Ć©criait: _Sinite parvulos_..., il ne distinguait pas entre les petits enfants. Il ne se fĆ»t pas gĆŖnĆ© de rapprocher le dauphin de Barabbas du dauphin d'HĆ©rode. Monsieur, l'innocence est sa couronne Ć  elle-mĆŖme. L'innocence n'a que faire d'ĆŖtre altesse. Elle est aussi auguste dĆ©guenillĆ©e que fleurdelysĆ©e. --C'est vrai, dit l'Ć©vĆŖque Ć  voix basse. --J'insiste, continua le conventionnel G. Vous m'avez nommĆ© Louis XVII. Entendons-nous. Pleurons-nous sur tous les innocents, sur tous les martyrs, sur tous les enfants, sur ceux d'en bas comme sur ceux d'en haut? J'en suis. Mais alors, je vous l'ai dit, il faut remonter plus haut que 93, et c'est avant Louis XVII qu'il faut commencer nos larmes. Je pleurerai sur les enfants des rois avec vous, pourvu que vous pleuriez avec moi sur les petits du peuple. --Je pleure sur tous, dit l'Ć©vĆŖque. --Ɖgalement! s'Ć©cria G., et si la balance doit pencher, que ce soit du cĆ“tĆ© du peuple. Il y a plus longtemps qu'il souffre. Il y eut encore un silence. Ce fut le conventionnel qui le rompit. Il se souleva sur un coude, prit entre son pouce et son index repliĆ© un peu de sa joue, comme on fait machinalement lorsqu'on interroge et qu'on juge, et interpella l'Ć©vĆŖque avec un regard plein de toutes les Ć©nergies de l'agonie. Ce fut presque une explosion. --Oui, monsieur, il y a longtemps que le peuple souffre. Et puis, tenez, ce n'est pas tout cela, que venez-vous me questionner et me parler de Louis XVII? Je ne vous connais pas, moi. Depuis que je suis dans ce pays, j'ai vĆ©cu dans cet enclos, seul, ne mettant pas les pieds dehors, ne vient personne que cet enfant qui m'aide. Votre nom est, il est vrai, arrivĆ© confusĆ©ment jusqu'Ć  moi, et, je dois le dire, pas trĆØs mal prononcĆ©; mais cela ne signifie rien; les gens habiles ont tant de maniĆØres d'en faire accroire Ć  ce brave bonhomme de peuple. ƀ propos, je n'ai pas entendu le bruit de votre voiture, vous l'aurez sans doute laissĆ©e derriĆØre le taillis, lĆ -bas, Ć  l'embranchement de la route. Je ne vous connais pas, vous dis-je. Vous m'avez dit que vous Ć©tiez l'Ć©vĆŖque, mais cela ne me renseigne point sur votre personne morale. En somme, je vous rĆ©pĆØte ma question. Qui ĆŖtes-vous? Vous ĆŖtes un Ć©vĆŖque, c'est-Ć -dire un prince de l'Ć©glise, un de ces hommes dorĆ©s, armoriĆ©s, rentĆ©s, qui ont de grosses prĆ©bendes--l'Ć©vĆŖchĆ© de Digne, quinze mille francs de fixe, dix mille francs de casuel, total, vingt-cinq mille francs--, qui ont des cuisines, qui ont des livrĆ©es, qui font bonne chĆØre, qui mangent des poules d'eau le vendredi, qui se pavanent, laquais devant, laquais derriĆØre, en berline de gala, et qui ont des palais, et qui roulent carrosse au nom de JĆ©sus-Christ qui allait pieds nus! Vous ĆŖtes un prĆ©lat; rentes, palais, chevaux, valets, bonne table, toutes les sensualitĆ©s de la vie, vous avez cela comme les autres, et comme les autres vous en jouissez, c'est bien, mais cela en dit trop ou pas assez; cela ne m'Ć©claire pas sur votre valeur intrinsĆØque et essentielle, Ć  vous qui venez avec la prĆ©tention probable de m'apporter de la sagesse. ƀ qui est-ce que je parle? Qui ĆŖtes-vous? L'Ć©vĆŖque baissa la tĆŖte et rĆ©pondit: --_Vermis sum_. --Un ver de terre en carrosse! grommela le conventionnel. C'Ć©tait le tour du conventionnel d'ĆŖtre hautain, et de l'Ć©vĆŖque d'ĆŖtre humble. L'Ć©vĆŖque reprit avec douceur. --Monsieur, soit. Mais expliquez-moi en quoi mon carrosse, qui est lĆ  Ć  deux pas derriĆØre les arbres, en quoi ma bonne table et les poules d'eau que je mange le vendredi, en quoi mes vingt-cinq mille livres de rentes, en quoi mon palais et mes laquais prouvent que la pitiĆ© n'est pas une vertu, que la clĆ©mence n'est pas un devoir, et que 93 n'a pas Ć©tĆ© inexorable. Le conventionnel passa la main sur son front comme pour en Ć©carter un nuage. --Avant de vous rĆ©pondre, dit-il, je vous prie de me pardonner. Je viens d'avoir un tort, monsieur. Vous ĆŖtes chez moi, vous ĆŖtes mon hĆ“te. Je vous dois courtoisie. Vous discutez mes idĆ©es, il sied que je me borne Ć  combattre vos raisonnements. Vos richesses et vos jouissances sont des avantages que j'ai contre vous dans le dĆ©bat, mais il est de bon goĆ»t de ne pas m'en servir. Je vous promets de ne plus en user. --Je vous remercie, dit l'Ć©vĆŖque. G. reprit: --Revenons Ć  l'explication que vous me demandiez. Où en Ć©tions-nous? Que me disiez-vous? que 93 a Ć©tĆ© inexorable? --Inexorable, oui, dit l'Ć©vĆŖque. Que pensez-vous de Marat battant des mains Ć  la guillotine? --Que pensez-vous de Bossuet chantant le _Te Deum_ sur les dragonnades? La rĆ©ponse Ć©tait dure, mais elle allait au but avec la rigiditĆ© d'une pointe d'acier. L'Ć©vĆŖque en tressaillit; il ne lui vint aucune riposte, mais il Ć©tait froissĆ© de cette faƧon de nommer Bossuet. Les meilleurs esprits ont leurs fĆ©tiches, et parfois se sentent vaguement meurtris des manques de respect de la logique. Le conventionnel commenƧait Ć  haleter; l'asthme de l'agonie, qui se mĆŖle aux derniers souffles, lui entrecoupait la voix; cependant il avait encore une parfaite luciditĆ© d'Ć¢me dans les yeux. Il continua: --Disons encore quelques mots ƧƠ et lĆ , je veux bien. En dehors de la rĆ©volution qui, prise dans son ensemble, est une immense affirmation humaine, 93, hĆ©las! est une rĆ©plique. Vous le trouvez inexorable, mais toute la monarchie, monsieur? Carrier est un bandit; mais quel nom donnez-vous Ć  Montrevel? Fouquier-Tinville est un gueux, mais quel est votre avis sur Lamoignon-BĆ¢ville? Maillard est affreux, mais Saulx-Tavannes, s'il vous plaĆ®t? Le pĆØre DuchĆŖne est fĆ©roce, mais quelle Ć©pithĆØte m'accorderez-vous pour le pĆØre Letellier? Jourdan-Coupe-TĆŖte est un monstre, mais moindre que M. le marquis de Louvois. Monsieur, monsieur, je plains Marie-Antoinette, archiduchesse et reine, mais je plains aussi cette pauvre femme huguenote qui, en 1685, sous Louis le Grand, monsieur, allaitant son enfant, fut liĆ©e, nue jusqu'Ć  la ceinture, Ć  un poteau, l'enfant tenu Ć  distance; le sein se gonflait de lait et le coeur d'angoisse. Le petit, affamĆ© et pĆ¢le, voyait ce sein, agonisait et criait, et le bourreau disait Ć  la femme, mĆØre et nourrice: Ā«Abjure!Ā» lui donnant Ć  choisir entre la mort de son enfant et la mort de sa conscience. Que dites-vous de ce supplice de Tantale accommodĆ© Ć  une mĆØre? Monsieur, retenez bien ceci: la rĆ©volution franƧaise a eu ses raisons. Sa colĆØre sera absoute par l'avenir. Son rĆ©sultat, c'est le monde meilleur. De ses coups les plus terribles, il sort une caresse pour le genre humain. J'abrĆØge. Je m'arrĆŖte, j'ai trop beau jeu. D'ailleurs je me meurs. Et, cessant de regarder l'Ć©vĆŖque, le conventionnel acheva sa pensĆ©e en ces quelques mots tranquilles: --Oui, les brutalitĆ©s du progrĆØs s'appellent rĆ©volutions. Quand elles sont finies, on reconnaĆ®t ceci: que le genre humain a Ć©tĆ© rudoyĆ©, mais qu'il a marchĆ©. Le conventionnel ne se doutait pas qu'il venait d'emporter successivement l'un aprĆØs l'autre tous les retranchements intĆ©rieurs de l'Ć©vĆŖque. Il en restait un pourtant, et de ce retranchement, suprĆŖme ressource de la rĆ©sistance de monseigneur Bienvenu, sortit cette parole où reparut presque toute la rudesse du commencement: --Le progrĆØs doit croire en Dieu. Le bien ne peut pas avoir de serviteur impie. C'est un mauvais conducteur du genre humain que celui qui est athĆ©e. Le vieux reprĆ©sentant du peuple ne rĆ©pondit pas. Il eut un tremblement. Il regarda le ciel, et une larme germa lentement dans ce regard. Quand la paupiĆØre fut pleine, la larme coula le long de sa joue livide, et il dit presque en bĆ©gayant, bas et se parlant Ć  lui-mĆŖme, l'oeil perdu dans les profondeurs: --O toi! Ć“ idĆ©al! toi seul existes! L'Ć©vĆŖque eut une sorte d'inexprimable commotion. AprĆØs un silence, le vieillard leva un doigt vers le ciel, et dit: --L'infini est. Il est lĆ . Si l'infini n'avait pas de moi, le moi serait sa borne; il ne serait pas infini; en d'autres termes, il ne serait pas. Or il est. Donc il a un moi. Ce moi de l'infini, c'est Dieu. Le mourant avait prononcĆ© ces derniĆØres paroles d'une voix haute et avec le frĆ©missement de l'extase, comme s'il voyait quelqu'un. Quand il eut parlĆ©, ses yeux se fermĆØrent. L'effort l'avait Ć©puisĆ©. Il Ć©tait Ć©vident qu'il venait de vivre en une minute les quelques heures qui lui restaient. Ce qu'il venait de dire l'avait approchĆ© de celui qui est dans la mort. L'instant suprĆŖme arrivait. L'Ć©vĆŖque le comprit, le moment pressait, c'Ć©tait comme prĆŖtre qu'il Ć©tait venu; de l'extrĆŖme froideur, il Ć©tait passĆ© par degrĆ©s Ć  l'Ć©motion extrĆŖme; il regarda ces yeux fermĆ©s, il prit cette vieille main ridĆ©e et glacĆ©e, et se pencha vers le moribond: --Cette heure est celle de Dieu. Ne trouvez-vous pas qu'il serait regrettable que nous nous fussions rencontrĆ©s en vain? Le conventionnel rouvrit les yeux. Une gravitĆ© où il y avait de l'ombre s'empreignit sur son visage. --Monsieur l'Ć©vĆŖque, dit-il, avec une lenteur qui venait peut-ĆŖtre plus encore de la dignitĆ© de l'Ć¢me que de la dĆ©faillance des forces, j'ai passĆ© ma vie dans la mĆ©ditation, l'Ć©tude et la contemplation. J'avais soixante ans quand mon pays m'a appelĆ©, et m'a ordonnĆ© de me mĆŖler de ses affaires. J'ai obĆ©i. Il y avait des abus, je les ai combattus; il y avait des tyrannies, je les ai dĆ©truites; il y avait des droits et des principes, je les ai proclamĆ©s et confessĆ©s. Le territoire Ć©tait envahi, je l'ai dĆ©fendu; la France Ć©tait menacĆ©e, j'ai offert ma poitrine. Je n'Ć©tais pas riche; je suis pauvre. J'ai Ć©tĆ© l'un des maĆ®tres de l'Ɖtat, les caves du TrĆ©sor Ć©taient encombrĆ©es d'espĆØces au point qu'on Ć©tait forcĆ© d'Ć©tanƧonner les murs, prĆŖts Ć  se fendre sous le poids de l'or et de l'argent, je dĆ®nais rue de l'Arbre-Sec Ć  vingt-deux sous par tĆŖte. J'ai secouru les opprimĆ©s, j'ai soulagĆ© les souffrants. J'ai dĆ©chirĆ© la nappe de l'autel, c'est vrai; mais c'Ć©tait pour panser les blessures de la patrie. J'ai toujours soutenu la marche en avant du genre humain vers la lumiĆØre, et j'ai rĆ©sistĆ© quelquefois au progrĆØs sans pitiĆ©. J'ai, dans l'occasion, protĆ©gĆ© mes propres adversaires, vous autres. Et il y a Ć  Peteghem en Flandre, Ć  l'endroit mĆŖme où les rois mĆ©rovingiens avaient leur palais d'Ć©tĆ©, un couvent d'urbanistes, l'abbaye de Sainte-Claire en Beaulieu, que j'ai sauvĆ© en 1793. J'ai fait mon devoir selon mes forces, et le bien que j'ai pu. AprĆØs quoi j'ai Ć©tĆ© chassĆ©, traquĆ©, poursuivi, persĆ©cutĆ©, noirci, raillĆ©, conspuĆ©, maudit, proscrit. Depuis bien des annĆ©es dĆ©jĆ , avec mes cheveux blancs, je sens que beaucoup de gens se croient sur moi le droit de mĆ©pris, j'ai pour la pauvre foule ignorante visage de damnĆ©, et j'accepte, ne haĆÆssant personne, l'isolement de la haine. Maintenant, j'ai quatre-vingt-six ans; je vais mourir. Qu'est-ce que vous venez me demander? --Votre bĆ©nĆ©diction, dit l'Ć©vĆŖque. Et il s'agenouilla. Quand l'Ć©vĆŖque releva la tĆŖte, la face du conventionnel Ć©tait devenue auguste. Il venait d'expirer. L'Ć©vĆŖque rentra chez lui profondĆ©ment absorbĆ© dans on ne sait quelles pensĆ©es. Il passa toute la nuit en priĆØre. Le lendemain, quelques braves curieux essayĆØrent de lui parler du conventionnel G.; il se borna Ć  montrer le ciel. ƀ partir de ce moment, il redoubla de tendresse et de fraternitĆ© pour les petits et les souffrants. Toute allusion Ć  ce Ā«vieux scĆ©lĆ©rat de G.Ā» le faisait tomber dans une prĆ©occupation singuliĆØre. Personne ne pourrait dire que le passage de cet esprit devant le sien et le reflet de cette grande conscience sur la sienne ne fĆ»t pas pour quelque chose dans son approche de la perfection. Cette Ā«visite pastoraleĀ» fut naturellement une occasion de bourdonnement pour les petites coteries locales: --Ɖtait-ce la place d'un Ć©vĆŖque que le chevet d'un tel mourant? Il n'y avait Ć©videmment pas de conversion Ć  attendre. Tous ces rĆ©volutionnaires sont relaps. Alors pourquoi y aller? Qu'a-t-il Ć©tĆ© regarder lĆ ? Il fallait donc qu'il fĆ»t bien curieux d'un emportement d'Ć¢me par le diable. Un jour, une douairiĆØre, de la variĆ©tĆ© impertinente qui se croit spirituelle, lui adressa cette saillie: --Monseigneur, on demande quand Votre Grandeur aura le bonnet rouge. --Oh! oh! voilĆ  une grosse couleur, rĆ©pondit l'Ć©vĆŖque. Heureusement que ceux qui la mĆ©prisent dans un bonnet la vĆ©nĆØrent dans un chapeau. Chapitre XI Une restriction On risquerait fort de se tromper si l'on concluait de lĆ  que monseigneur Bienvenu fĆ»t Ā«un Ć©vĆŖque philosopheĀ» ou Ā«un curĆ© patrioteĀ». Sa rencontre, ce qu'on pourrait presque appeler sa conjonction avec le conventionnel G., lui laissa une sorte d'Ć©tonnement qui le rendit plus doux encore. VoilĆ  tout. Quoique monseigneur Bienvenu n'ait Ć©tĆ© rien moins qu'un homme politique, c'est peut-ĆŖtre ici le lieu d'indiquer, trĆØs briĆØvement, quelle fut son attitude dans les Ć©vĆ©nements d'alors, en supposant que monseigneur Bienvenu ait jamais songĆ© Ć  avoir une attitude. Remontons donc en arriĆØre de quelques annĆ©es. Quelque temps aprĆØs l'Ć©lĆ©vation de M. Myriel Ć  l'Ć©piscopat, l'empereur l'avait fait baron de l'empire, en mĆŖme temps que plusieurs autres Ć©vĆŖques. L'arrestation du pape eut lieu, comme on sait, dans la nuit du 5 au 6 juillet 1809; Ć  cette occasion, M. Myriel fut appelĆ© par NapolĆ©on au synode des Ć©vĆŖques de France et d'Italie convoquĆ© Ć  Paris. Ce synode se tint Ć  Notre-Dame et s'assembla pour la premiĆØre fois le 15 juin 1811 sous la prĆ©sidence de M. le cardinal Fesch. M. Myriel fut du nombre des quatre-vingt-quinze Ć©vĆŖques qui s'y rendirent. Mais il n'assista qu'Ć  une sĆ©ance et Ć  trois ou quatre confĆ©rences particuliĆØres. ƉvĆŖque d'un diocĆØse montagnard, vivant si prĆØs de la nature, dans la rusticitĆ© et le dĆ©nuement, il paraĆ®t qu'il apportait parmi ces personnages Ć©minents des idĆ©es qui changeaient la tempĆ©rature de l'assemblĆ©e. Il revint bien vite Ć  Digne. On le questionna sur ce prompt retour, il rĆ©pondit: --Je les gĆŖnais. L'air du dehors leur venait par moi. Je leur faisais l'effet d'une porte ouverte. Une autre fois il dit: --Que voulez-vous? ces messeigneurs-lĆ  sont des princes. Moi, je ne suis qu'un pauvre Ć©vĆŖque paysan. Le fait est qu'il avait dĆ©plu. Entre autres choses Ć©tranges, il lui serait Ć©chappĆ© de dire, un soir qu'il se trouvait chez un de ses collĆØgues les plus qualifiĆ©s: --Les belles pendules! les beaux tapis! les belles livrĆ©es! Ce doit ĆŖtre bien importun! Oh! que je ne voudrais pas avoir tout ce superflu-lĆ  Ć  me crier sans cesse aux oreilles: Il y a des gens qui ont faim! il y a des gens qui ont froid! il y a des pauvres! il y a des pauvres! Disons-le en passant, ce ne serait pas une haine intelligente que la haine du luxe. Cette haine impliquerait la haine des arts. Cependant, chez les gens d'Ć©glise, en dehors de la reprĆ©sentation et des cĆ©rĆ©monies, le luxe est un tort. Il semble rĆ©vĆ©ler des habitudes peu rĆ©ellement charitables. Un prĆŖtre opulent est un contre-sens. Le prĆŖtre doit se tenir prĆØs des pauvres. Or peut-on toucher sans cesse, et nuit et jour, Ć  toutes les dĆ©tresses, Ć  toutes les infortunes, Ć  toutes les indigences, sans avoir soi-mĆŖme sur soi un peu de cette sainte misĆØre, comme la poussiĆØre du travail? Se figure-t-on un homme qui est prĆØs d'un brasier, et qui n'a pas chaud? Se figure-t-on un ouvrier qui travaille sans cesse Ć  une fournaise, et qui n'a ni un cheveu brĆ»lĆ©, ni un ongle noirci, ni une goutte de sueur, ni un grain de cendre au visage? La premiĆØre preuve de la charitĆ© chez le prĆŖtre, chez l'Ć©vĆŖque surtout, c'est la pauvretĆ©. C'Ć©tait lĆ  sans doute ce que pensait M. l'Ć©vĆŖque de Digne. Il ne faudrait pas croire d'ailleurs qu'il partageait sur certains points dĆ©licats ce que nous appellerions Ā«les idĆ©es du siĆØcleĀ». Il se mĆŖlait peu aux querelles thĆ©ologiques du moment et se taisait sur les questions où sont compromis l'Ɖglise et l'Ɖtat; mais si on l'eĆ»t beaucoup pressĆ©, il paraĆ®t qu'on l'eĆ»t trouvĆ© plutĆ“t ultramontain que gallican. Comme nous faisons un portrait et que nous ne voulons rien cacher, nous sommes forcĆ© d'ajouter qu'il fut glacial pour NapolĆ©on dĆ©clinant. ƀ partir de 1813, il adhĆ©ra ou il applaudit Ć  toutes les manifestations hostiles. Il refusa de le voir Ć  son passage au retour de l'Ć®le d'Elbe, et s'abstint d'ordonner dans son diocĆØse les priĆØres publiques pour l'empereur pendant les Cent-Jours. Outre sa soeur, mademoiselle Baptistine, il avait deux frĆØres: l'un gĆ©nĆ©ral, l'autre prĆ©fet. Il Ć©crivait assez souvent Ć  tous les deux. Il tint quelque temps rigueur au premier, parce qu'ayant un commandement en Provence, Ć  l'Ć©poque du dĆ©barquement de Cannes, le gĆ©nĆ©ral s'Ć©tait mis Ć  la tĆŖte de douze cents hommes et avait poursuivi l'empereur comme quelqu'un qui veut le laisser Ć©chapper. Sa correspondance resta plus affectueuse pour l'autre frĆØre, l'ancien prĆ©fet, brave et digne homme qui vivait retirĆ© Ć  Paris, rue Cassette. Monseigneur Bienvenu eut donc, aussi lui, son heure d'esprit de parti, son heure d'amertume, son nuage. L'ombre des passions du moment traversa ce doux et grand esprit occupĆ© des choses Ć©ternelles. Certes, un pareil homme eĆ»t mĆ©ritĆ© de n'avoir pas d'opinions politiques. Qu'on ne se mĆ©prenne pas sur notre pensĆ©e, nous ne confondons point ce qu'on appelle Ā«opinions politiquesĀ» avec la grande aspiration au progrĆØs, avec la sublime foi patriotique, dĆ©mocratique et humaine, qui, de nos jours, doit ĆŖtre le fond mĆŖme de toute intelligence gĆ©nĆ©reuse. Sans approfondir des questions qui ne touchent qu'indirectement au sujet de ce livre, nous disons simplement ceci: Il eĆ»t Ć©tĆ© beau que monseigneur Bienvenu n'eĆ»t pas Ć©tĆ© royaliste et que son regard ne se fĆ»t pas dĆ©tournĆ© un seul instant de cette contemplation sereine où l'on voit rayonner distinctement, au-dessus du va-et-vient orageux des choses humaines, ces trois pures lumiĆØres, la VĆ©ritĆ©, la Justice, la CharitĆ©. Tout en convenant que ce n'Ć©tait point pour une fonction politique que Dieu avait crƩƩ monseigneur Bienvenu, nous eussions compris et admirĆ© la protestation au nom du droit et de la libertĆ©, l'opposition fiĆØre, la rĆ©sistance pĆ©rilleuse et juste Ć  NapolĆ©on tout-puissant. Mais ce qui nous plaĆ®t vis-Ć -vis de ceux qui montent nous plaĆ®t moins vis-Ć -vis de ceux qui tombent. Nous n'aimons le combat que tant qu'il y a danger; et, dans tous les cas, les combattants de la premiĆØre heure ont seuls le droit d'ĆŖtre les exterminateurs de la derniĆØre. Qui n'a pas Ć©tĆ© accusateur opiniĆ¢tre pendant la prospĆ©ritĆ© doit se taire devant l'Ć©croulement. Le dĆ©nonciateur du succĆØs est le seul lĆ©gitime justicier de la chute. Quant Ć  nous, lorsque la Providence s'en mĆŖle et frappe, nous la laissons faire. 1812 commence Ć  nous dĆ©sarmer. En 1813, la lĆ¢che rupture de silence de ce corps lĆ©gislatif taciturne enhardi par les catastrophes n'avait que de quoi indigner, et c'Ć©tait un tort d'applaudir; en 1814, devant ces marĆ©chaux trahissant, devant ce sĆ©nat passant d'une fange Ć  l'autre, insultant aprĆØs avoir divinisĆ©, devant cette idolĆ¢trie lĆ¢chant pied et crachant sur l'idole, c'Ć©tait un devoir de dĆ©tourner la tĆŖte; en 1815, comme les suprĆŖmes dĆ©sastres Ć©taient dans l'air, comme la France avait le frisson de leur approche sinistre, comme on pouvait vaguement distinguer Waterloo ouvert devant NapolĆ©on, la douloureuse acclamation de l'armĆ©e et du peuple au condamnĆ© du destin n'avait rien de risible, et, toute rĆ©serve faite sur le despote, un coeur comme l'Ć©vĆŖque de Digne n'eĆ»t peut-ĆŖtre pas dĆ» mĆ©connaĆ®tre ce qu'avait d'auguste et de touchant, au bord de l'abĆ®me, l'Ć©troit embrassement d'une grande nation et d'un grand homme. ƀ cela prĆØs, il Ć©tait et il fut, en toute chose, juste, vrai, Ć©quitable, intelligent, humble et digne; bienfaisant, et bienveillant, ce qui est une autre bienfaisance. C'Ć©tait un prĆŖtre, un sage, et un homme. MĆŖme, il faut le dire, dans cette opinion politique que nous venons de lui reprocher et que nous sommes disposĆ© Ć  juger presque sĆ©vĆØrement, il Ć©tait tolĆ©rant et facile, peut-ĆŖtre plus que nous qui parlons ici.--Le portier de la maison de ville avait Ć©tĆ© placĆ© lĆ  par l'empereur. C'Ć©tait un vieux sous-officier de la vieille garde, lĆ©gionnaire d'Austerlitz, bonapartiste comme l'aigle. Il Ć©chappait dans l'occasion Ć  ce pauvre diable de ces paroles peu rĆ©flĆ©chies que la loi d'alors qualifiait _propos sĆ©ditieux_. Depuis que le profil impĆ©rial avait disparu de la lĆ©gion d'honneur, il ne s'habillait jamais _dans l'ordonnance_, comme il disait, afin de ne pas ĆŖtre forcĆ© de porter sa croix. Il avait Ć“tĆ© lui-mĆŖme dĆ©votement l'effigie impĆ©riale de la croix que NapolĆ©on lui avait donnĆ©e, cela faisait un trou, et il n'avait rien voulu mettre Ć  la place. Ā«PlutĆ“t mourir, disait-il, que de porter sur mon coeur les trois crapauds!Ā» Il raillait volontiers tout haut Louis XVIII. Ā«Vieux goutteux Ć  guĆŖtres d'anglais!Ā» disait-il, Ā«qu'il s'en aille en Prusse avec son salsifis!Ā» Heureux de rĆ©unir dans la mĆŖme imprĆ©cation les deux choses qu'il dĆ©testait le plus, la Prusse et l'Angleterre. Il en fit tant qu'il perdit sa place. Le voilĆ  sans pain sur le pavĆ© avec femme et enfants. L'Ć©vĆŖque le fit venir, le gronda doucement, et le nomma suisse de la cathĆ©drale. M. Myriel Ć©tait dans le diocĆØse le vrai pasteur, l'ami de tous. En neuf ans, Ć  force de saintes actions et de douces maniĆØres, monseigneur Bienvenu avait rempli la ville de Digne d'une sorte de vĆ©nĆ©ration tendre et filiale. Sa conduite mĆŖme envers NapolĆ©on avait Ć©tĆ© acceptĆ©e et comme tacitement pardonnĆ©e par le peuple, bon troupeau faible, qui adorait son empereur, mais qui aimait son Ć©vĆŖque. Chapitre XII Solitude de monseigneur Bienvenu Il y a presque toujours autour d'un Ć©vĆŖque une escouade de petits abbĆ©s comme autour d'un gĆ©nĆ©ral une volĆ©e de jeunes officiers. C'est lĆ  ce que ce charmant saint FranƧois de Sales appelle quelque part Ā«les prĆŖtres blancs-becsĀ». Toute carriĆØre a ses aspirants qui font cortĆØge aux arrivĆ©s. Pas une puissance qui n'ait son entourage; pas une fortune qui n'ait sa cour. Les chercheurs d'avenir tourbillonnent autour du prĆ©sent splendide. Toute mĆ©tropole a son Ć©tat-major. Tout Ć©vĆŖque un peu influent a prĆØs de lui sa patrouille de chĆ©rubins sĆ©minaristes, qui fait la ronde et maintient le bon ordre dans le palais Ć©piscopal, et qui monte la garde autour du sourire de monseigneur. AgrĆ©er Ć  un Ć©vĆŖque, c'est le pied Ć  l'Ć©trier pour un sous-diacre. Il faut bien faire son chemin; l'apostolat ne dĆ©daigne pas le canonicat. De mĆŖme qu'il y a ailleurs les gros bonnets, il y a dans l'Ć©glise les grosses mitres. Ce sont les Ć©vĆŖques bien en cour, riches, rentĆ©s, habiles, acceptĆ©s du monde, sachant prier, sans doute, mais sachant aussi solliciter, peu scrupuleux de faire faire antichambre en leur personne Ć  tout un diocĆØse, traits d'union entre la sacristie et la diplomatie, plutĆ“t abbĆ©s que prĆŖtres, plutĆ“t prĆ©lats qu'Ć©vĆŖques. Heureux qui les approche! Gens en crĆ©dit qu'ils sont, ils font pleuvoir autour d'eux, sur les empressĆ©s et les favorisĆ©s, et sur toute cette jeunesse qui sait plaire, les grasses paroisses, les prĆ©bendes, les archidiaconats, les aumĆ“neries et les fonctions cathĆ©drales, en attendant les dignitĆ©s Ć©piscopales. En avanƧant eux-mĆŖmes, ils font progresser leurs satellites; c'est tout un systĆØme solaire en marche. Leur rayonnement empourpre leur suite. Leur prospĆ©ritĆ© s'Ć©miette sur la cantonade en bonnes petites promotions. Plus grand diocĆØse au patron, plus grosse cure au favori. Et puis Rome est lĆ . Un Ć©vĆŖque qui sait devenir archevĆŖque, un archevĆŖque qui sait devenir cardinal, vous emmĆØne comme conclaviste, vous entrez dans la rote, vous avez le pallium, vous voilĆ  auditeur, vous voilĆ  camĆ©rier, vous voilĆ  monsignor, et de la Grandeur Ć  Imminence il n'y a qu'un pas, et entre Imminence et la SaintetĆ© il n'y a que la fumĆ©e d'un scrutin. Toute calotte peut rĆŖver la tiare. Le prĆŖtre est de nos jours le seul homme qui puisse rĆ©guliĆØrement devenir roi; et quel roi! le roi suprĆŖme. Aussi quelle pĆ©piniĆØre d'aspirations qu'un sĆ©minaire! Que d'enfants de choeur rougissants, que de jeunes abbĆ©s ont sur la tĆŖte le pot au lait de Perrette! Comme l'ambition s'intitule aisĆ©ment vocation, qui sait? de bonne foi peut-ĆŖtre et se trompant elle-mĆŖme, bĆ©ate qu'elle est! Monseigneur Bienvenu, humble, pauvre, particulier, n'Ć©tait pas comptĆ© parmi les grosses mitres. Cela Ć©tait visible Ć  l'absence complĆØte de jeunes prĆŖtres autour de lui. On a vu qu'Ć  Paris Ā«il n'avait pas prisĀ». Pas un avenir ne songeait Ć  se greffer sur ce vieillard solitaire. Pas une ambition en herbe ne faisait la folie de verdir Ć  son ombre. Ses chanoines et ses grands vicaires Ć©taient de bons vieux hommes, un peu peuple comme lui, murĆ©s comme lui dans ce diocĆØse sans issue sur le cardinafat, et qui ressemblaient Ć  leur Ć©vĆŖque, avec cette diffĆ©rence qu'eux Ć©taient finis, et que lui Ć©tait achevĆ©. On sentait si bien l'impossibilitĆ© de croĆ®tre prĆØs de monseigneur Bienvenu qu'Ć  peine sortis du sĆ©minaire, les jeunes gens ordonnĆ©s par lui se faisaient recommander aux archevĆŖques d'Aix ou d'Auch, et s'en allaient bien vite. Car enfin, nous le rĆ©pĆ©tons, on veut ĆŖtre poussĆ©. Un saint qui vit dans un excĆØs d'abnĆ©gation est un voisinage dangereux; il pourrait bien vous communiquer par contagion une pauvretĆ© incurable, l'ankylose des articulations utiles Ć  l'avancement, et, en somme, plus de renoncement que vous n'en voulez; et l'on fuit cette vertu galeuse. De lĆ  l'isolement de monseigneur Bienvenu. Nous vivons dans une sociĆ©tĆ© sombre. RĆ©ussir, voilĆ  l'enseignement qui tombe goutte Ć  goutte de la corruption en surplomb. Soit dit en passant, c'est une chose assez hideuse que le succĆØs. Sa fausse ressemblance avec le mĆ©rite trompe les hommes. Pour la foule, la rĆ©ussite a presque le mĆŖme profil que la suprĆ©matie. Le succĆØs, ce mĆ©nechme du talent, a une dupe: l'histoire. JuvĆ©nal et Tacite seuls en bougonnent. De nos jours, une philosophie Ć  peu prĆØs officielle est entrĆ©e en domesticitĆ© chez lui, porte la livrĆ©e du succĆØs, et fait le service de son antichambre. RĆ©ussissez: thĆ©orie. ProspĆ©ritĆ© suppose CapacitĆ©. Gagnez Ć  la loterie, vous voilĆ  un habile homme. Qui triomphe est vĆ©nĆ©rĆ©. Naissez coiffĆ©, tout est lĆ . Ayez de la chance, vous aurez le reste; soyez heureux, on vous croira grand. En dehors des cinq ou six exceptions immenses qui font l'Ć©clat d'un siĆØcle, l'admiration contemporaine n'est guĆØre que myopie. Dorure est or. Être le premier venu, cela ne gĆ¢te rien, pourvu qu'on soit le parvenu. Le vulgaire est un vieux Narcisse qui s'adore lui-mĆŖme et qui applaudit le vulgaire. Cette facultĆ© Ć©norme par laquelle on est MoĆÆse, Eschyle, Dante, Michel-Ange ou NapolĆ©on, la multitude la dĆ©cerne d'emblĆ©e et par acclamation Ć  quiconque atteint son but dans quoi que ce soit. Qu'un notaire se transfigure en dĆ©putĆ©, qu'un faux Corneille fasse _Tiridate_, qu'un eunuque parvienne Ć  possĆ©der un harem, qu'un Prud'homme militaire gagne par accident la bataille dĆ©cisive d'une Ć©poque, qu'un apothicaire invente les semelles de carton pour l'armĆ©e de Sambre-et-Meuse et se construise, avec ce carton vendu pour du cuir, quatre cent mille livres de rente, qu'un porte-balle Ć©pouse l'usure et la fasse accoucher de sept ou huit millions dont il est le pĆØre et dont elle est la mĆØre, qu'un prĆ©dicateur devienne Ć©vĆŖque par le nasillement, qu'un intendant de bonne maison soit si riche en sortant de service qu'on le fasse ministre des finances, les hommes appellent cela GĆ©nie, de mĆŖme qu'ils appellent BeautĆ© la figure de Mousqueton et MajestĆ© l'encolure de Claude. Ils confondent avec les constellations de l'abĆ®me les Ć©toiles que font dans la vase molle du bourbier les pattes des canards. Chapitre XIII Ce qu'il croyait Au point de vue de l'orthodoxie, nous n'avons point Ć  sonder M. l'Ć©vĆŖque de Digne. Devant une telle Ć¢me, nous ne nous sentons en humeur que de respect. La conscience du juste doit ĆŖtre crue sur parole. D'ailleurs, de certaines natures Ć©tant donnĆ©es, nous admettons le dĆ©veloppement possible de toutes les beautĆ©s de la vertu humaine dans une croyance diffĆ©rente de la nĆ“tre. Que pensait-il de ce dogme-ci ou de ce mystĆØre-lĆ ? Ces secrets du for intĆ©rieur ne sont connus que de la tombe où les Ć¢mes entrent nues. Ce dont nous sommes certain, c'est que jamais les difficultĆ©s de foi ne se rĆ©solvaient pour lui en hypocrisie. Aucune pourriture n'est possible au diamant. Il croyait le plus qu'il pouvait. _Credo in Patrem_, s'Ć©criait-il souvent. Puisant d'ailleurs dans les bonnes oeuvres cette quantitĆ© de satisfaction qui suffit Ć  la conscience, et qui vous dit tout bas: Ā«Tu es avec Dieu.Ā» Ce que nous croyons devoir noter, c'est que, en dehors, pour ainsi dire, et au-delĆ  de sa foi, l'Ć©vĆŖque avait un excĆØs d'amour. C'est par lĆ , _quia multum amavit_, qu'il Ć©tait jugĆ© vulnĆ©rable par les Ā«hommes sĆ©rieuxĀ», les Ā«personnes gravesĀ» et les Ā«gens raisonnablesĀ»; locutions favorites de notre triste monde où l'Ć©goĆÆsme reƧoit le mot d'ordre du pĆ©dantisme. Qu'Ć©tait-ce que cet excĆØs d'amour? C'Ć©tait une bienveillance sereine, dĆ©bordant les hommes, comme nous l'avons indiquĆ© dĆ©jĆ , et, dans l'occasion, s'Ć©tendant jusqu'aux choses. Il vivait sans dĆ©dain. Il Ć©tait indulgent pour la crĆ©ation de Dieu. Tout homme, mĆŖme le meilleur, a en lui une duretĆ© irrĆ©flĆ©chie qu'il tient en rĆ©serve pour l'animal. L'Ć©vĆŖque de Digne n'avait point cette duretĆ©-lĆ , particuliĆØre Ć  beaucoup de prĆŖtres pourtant. Il n'allait pas jusqu'au bramine, mais il semblait avoir mĆ©ditĆ© cette parole de l'EcclĆ©siaste: Ā«Sait-on où va l'Ć¢me des animaux?Ā» Les laideurs de l'aspect, les difformitĆ©s de l'instinct, ne le troublaient pas et ne l'indignaient pas. Il en Ć©tait Ć©mu, presque attendri. Il semblait que, pensif, il en allĆ¢t chercher, au-delĆ  de la vie apparente, la cause, l'explication ou l'excuse. Il semblait par moments demander Ć  Dieu des commutations. Il examinait sans colĆØre, et avec l'oeil du linguiste qui dĆ©chiffre un palimpseste, la quantitĆ© de chaos qui est encore dans la nature. Cette rĆŖverie faisait parfois sortir de lui des mots Ć©tranges. Un matin, il Ć©tait dans son jardin; il se croyait seul, mais sa soeur marchait derriĆØre lui sans qu'il la vĆ®t; tout Ć  coup, il s'arrĆŖta, et il regarda quelque chose Ć  terre; c'Ć©tait une grosse araignĆ©e, noire, velue, horrible. Sa soeur l'entendit qui disait: --Pauvre bĆŖte! ce n'est pas sa faute. Pourquoi ne pas dire ces enfantillages presque divins de la bontĆ©? PuĆ©rilitĆ©s, soit; mais ces puĆ©rilitĆ©s sublimes ont Ć©tĆ© celles de saint FranƧois d'Assise et de Marc-AurĆØle. Un jour il se donna une entorse pour n'avoir pas voulu Ć©craser une fourmi. Ainsi vivait cet homme juste. Quelquefois, il s'endormait dans son jardin, et alors il n'Ć©tait rien de plus vĆ©nĆ©rable. Monseigneur Bienvenu avait Ć©tĆ© jadis, Ć  en croire les rĆ©cits sur sa jeunesse et mĆŖme sur sa virilitĆ©, un homme passionnĆ©, peut-ĆŖtre violent. Sa mansuĆ©tude universelle Ć©tait moins un instinct de nature que le rĆ©sultat d'une grande conviction filtrĆ©e dans son coeur Ć  travers la vie et lentement tombĆ©e en lui, pensĆ©e Ć  pensĆ©e; car, dans un caractĆØre comme dans un rocher, il peut y avoir des trous de gouttes d'eau. Ces creusements-lĆ  sont ineffaƧables; ces formations-lĆ  sont indestructibles. En 1815, nous croyons l'avoir dit, il atteignit soixante-quinze ans, mais il n'en paraissait pas avoir plus de soixante. Il n'Ć©tait pas grand; il avait quelque embonpoint, et, pour le combattre, il faisait volontiers de longues marches Ć  pied, il avait le pas ferme et n'Ć©tait que fort peu courbĆ©, dĆ©tail d'où nous ne prĆ©tendons rien conclure; GrĆ©goire XVI, Ć  quatre-vingts ans, se tenait droit et souriant, ce qui ne l'empĆŖchait pas d'ĆŖtre un mauvais Ć©vĆŖque. Monseigneur Bienvenu avait ce que le peuple appelle Ā«une belle tĆŖteĀ», mais si aimable qu'on oubliait qu'elle Ć©tait belle. Quand il causait avec cette santĆ© enfantine qui Ć©tait une de ses grĆ¢ces, et dont nous avons dĆ©jĆ  parlĆ©, on se sentait Ć  l'aise prĆØs de lui, il semblait que de toute sa personne il sortĆ®t de la joie. Son teint colorĆ© et frais, toutes ses dents bien blanches qu'il avait conservĆ©es et que son rire faisait voir, lui donnaient cet air ouvert et facile qui fait dire d'un homme: Ā«C'est un bon enfantĀ», et d'un vieillard: Ā«C'est un bonhommeĀ». C'Ć©tait, on s'en souvient, l'effet qu'il avait fait Ć  NapolĆ©on. Au premier abord, et pour qui le voyait pour la premiĆØre fois, ce n'Ć©tait guĆØre qu'un bonhomme en effet. Mais si l'on restait quelques heures prĆØs de lui, et pour peu qu'on le vĆ®t pensif, le bonhomme se transfigurait peu Ć  peu et prenait je ne sais quoi d'imposant; son front large et sĆ©rieux, auguste par les cheveux blancs, devenait auguste aussi par la mĆ©ditation; la majestĆ© se dĆ©gageait de cette bontĆ©, sans que la bontĆ© cessĆ¢t de rayonner; on Ć©prouvait quelque chose de l'Ć©motion qu'on aurait si l'on voyait un ange souriant ouvrir lentement ses ailes sans cesser de sourire. Le respect, un respect inexprimable, vous pĆ©nĆ©trait par degrĆ©s et vous montait au coeur, et l'on sentait qu'on avait devant soi une de ces Ć¢mes fortes, Ć©prouvĆ©es et indulgentes, où la pensĆ©e est si grande qu'elle ne peut plus ĆŖtre que douce. Comme on l'a vu, la priĆØre, la cĆ©lĆ©bration des offices religieux, l'aumĆ“ne, la consolation aux affligĆ©s, la culture d'un coin de terre, la fraternitĆ©, la frugalitĆ©, l'hospitalitĆ©, le renoncement, la confiance, l'Ć©tude, le travail remplissaient chacune des journĆ©es de sa vie. _Remplissaient_ est bien le mot, et certes cette journĆ©e de l'Ć©vĆŖque Ć©tait bien pleine jusqu'aux bords de bonnes pensĆ©es, de bonnes paroles et de bonnes actions. Cependant elle n'Ć©tait pas complĆØte si le temps froid ou pluvieux l'empĆŖchait d'aller passer, le soir, quand les deux femmes s'Ć©taient retirĆ©es, une heure ou deux dans son jardin avant de s'endormir. Il semblait que ce fĆ»t une sorte de rite pour lui de se prĆ©parer au sommeil par la mĆ©ditation en prĆ©sence des grands spectacles du ciel nocturne. Quelquefois, Ć  une heure mĆŖme assez avancĆ©e de la nuit, si les deux vieilles filles ne dormaient pas, elles l'entendaient marcher lentement dans les allĆ©es. Il Ć©tait lĆ , seul avec lui-mĆŖme, recueilli, paisible, adorant, comparant la sĆ©rĆ©nitĆ© de son coeur Ć  la sĆ©rĆ©nitĆ© de l'Ć©ther, Ć©mu dans les tĆ©nĆØbres par les splendeurs visibles des constellations et les splendeurs invisibles de Dieu, ouvrant son Ć¢me aux pensĆ©es qui tombent de l'inconnu. Dans ces moments-lĆ , offrant son coeur Ć  l'heure où les fleurs nocturnes offrent leur parfum, allumĆ© comme une lampe au centre de la nuit Ć©toilĆ©e, se rĆ©pandant en extase au milieu du rayonnement universel de la crĆ©ation, il n'eĆ»t pu peut-ĆŖtre dire lui-mĆŖme ce qui se passait dans son esprit, il sentait quelque chose s'envoler hors de lui et quelque chose descendre en lui. MystĆ©rieux Ć©changes des gouffres de l'Ć¢me avec les gouffres de l'univers! Il songeait Ć  la grandeur et Ć  la prĆ©sence de Dieu; Ć  l'Ć©ternitĆ© future, Ć©trange mystĆØre; Ć  l'Ć©ternitĆ© passĆ©e, mystĆØre plus Ć©trange encore; Ć  tous les infinis qui s'enfonƧaient sous ses yeux dans tous les sens; et, sans chercher Ć  comprendre l'incomprĆ©hensible, il le regardait. Il n'Ć©tudiait pas Dieu, il s'en Ć©blouissait. Il considĆ©rait ces magnifiques rencontres des atomes qui donnent des aspects Ć  la matiĆØre, rĆ©vĆØlent les forces en les constatant, crĆ©ent les individualitĆ©s dans l'unitĆ©, les proportions dans l'Ć©tendue, l'innombrable dans l'infini, et par la lumiĆØre produisent la beautĆ©. Ces rencontres se nouent et se dĆ©nouent sans cesse; de lĆ  la vie et la mort. Il s'asseyait sur un banc de bois adossĆ© Ć  une treille dĆ©crĆ©pite, et il regardait les astres Ć  travers les silhouettes chĆ©tives et rachitiques de ses arbres fruitiers. Ce quart d'arpent, si pauvrement plantĆ©, si encombrĆ© de masures et de hangars, lui Ć©tait cher et lui suffisait. Que fallait-il de plus Ć  ce vieillard, qui partageait le loisir de sa vie, où il y avait si peu de loisir, entre le jardinage le jour et la contemplation la nuit? Cet Ć©troit enclos, ayant les cieux pour plafond, n'Ć©tait-ce pas assez pour pouvoir adorer Dieu tour Ć  tour dans ses oeuvres les plus charmantes et dans ses oeuvres les plus sublimes? N'est-ce pas lĆ  tout, en effet, et que dĆ©sirer au-delĆ ? Un petit jardin pour se promener, et l'immensitĆ© pour rĆŖver. ƀ ses pieds ce qu'on peut cultiver et cueillir; sur sa tĆŖte ce qu'on peut Ć©tudier et mĆ©diter; quelques fleurs sur la terre et toutes les Ć©toiles dans le ciel. Chapitre XIV Ce qu'il pensait Un dernier mot. Comme cette nature de dĆ©tails pourrait, particuliĆØrement au moment où nous sommes, et pour nous servir d'une expression actuellement Ć  la mode, donner Ć  l'Ć©vĆŖque de Digne une certaine physionomie Ā«panthĆ©isteĀ», et faire croire, soit Ć  son blĆ¢me, soit Ć  sa louange, qu'il y avait en lui une de ces philosophies personnelles, propres Ć  notre siĆØcle, qui germent quelquefois dans les esprits solitaires et s'y construisent et y grandissent jusqu'Ć  y remplacer les religions, nous insistons sur ceci que pas un de ceux qui ont connu monseigneur Bienvenu ne se fĆ»t cru autorisĆ© Ć  penser rien de pareil. Ce qui Ć©clairait cet homme, c'Ć©tait le coeur. Sa sagesse Ć©tait faite de la lumiĆØre qui vient de lĆ . Point de systĆØmes, beaucoup d'oeuvres. Les spĆ©culations abstruses contiennent du vertige; rien n'indique qu'il hasardĆ¢t son esprit dans les apocalypses. L'apĆ“tre peut ĆŖtre hardi, mais l'Ć©vĆŖque doit ĆŖtre timide. Il se fĆ»t probablement fait scrupule de sonder trop avant de certains problĆØmes rĆ©servĆ©s en quelque sorte aux grands esprits terribles. Il y a de l'horreur sacrĆ©e sous les porches de l'Ć©nigme; ces ouvertures sombres sont lĆ  bĆ©antes, mais quelque chose vous dit, Ć  vous passant de la vie, qu'on n'entre pas. Malheur Ć  qui y pĆ©nĆØtre! Les gĆ©nies, dans les profondeurs inouĆÆes de l'abstraction et de la spĆ©culation pure, situĆ©s pour ainsi dire au-dessus des dogmes, proposent leurs idĆ©es Ć  Dieu. Leur priĆØre offre audacieusement la discussion. Leur adoration interroge. Ceci est la religion directe, pleine d'anxiĆ©tĆ© et de responsabilitĆ© pour qui en tente les escarpements. La mĆ©ditation humaine n'a point de limite. ƀ ses risques et pĆ©rils, elle analyse et creuse son propre Ć©blouissement. On pourrait presque dire que, par une sorte de rĆ©action splendide, elle en Ć©blouit la nature; le mystĆ©rieux monde qui nous entoure rend ce qu'il reƧoit, il est probable que les contemplateurs sont contemplĆ©s. Quoi qu'il en soit, il y a sur la terre des hommes--sont-ce des hommes?--qui aperƧoivent distinctement au fond des horizons du rĆŖve les hauteurs de l'absolu, et qui ont la vision terrible de la montagne infinie. Monseigneur Bienvenu n'Ć©tait point de ces hommes-lĆ , monseigneur Bienvenu n'Ć©tait pas un gĆ©nie. Il eĆ»t redoutĆ© ces sublimitĆ©s d'où quelques-uns, trĆØs grands mĆŖme, comme Swedenborg et Pascal, ont glissĆ© dans la dĆ©mence. Certes, ces puissantes rĆŖveries ont leur utilitĆ© morale, et par ces routes ardues on s'approche de la perfection idĆ©ale. Lui, il prenait le sentier qui abrĆØge: l'Ć©vangile. Il n'essayait point de faire faire Ć  sa chasuble les plis du manteau d'Ɖlie, il ne projetait aucun rayon d'avenir sur le roulis tĆ©nĆ©breux des Ć©vĆ©nements, il ne cherchait pas Ć  condenser en flamme la lueur des choses, il n'avait rien du prophĆØte et rien du mage. Cette Ć¢me simple aimait, voilĆ  tout. Qu'il dilatĆ¢t la priĆØre jusqu'Ć  une aspiration surhumaine, cela est probable; mais on ne peut pas plus prier trop qu'aimer trop; et, si c'Ć©tait une hĆ©rĆ©sie de prier au-delĆ  des textes, sainte ThĆ©rĆØse et saint JĆ©rĆ“me seraient des hĆ©rĆ©tiques. Il se penchait sur ce qui gĆ©mit et sur ce qui expie. L'univers lui apparaissait comme une immense maladie; il sentait partout de la fiĆØvre, il auscultait partout de la souffrance, et, sans chercher Ć  deviner l'Ć©nigme, il tĆ¢chait de panser la plaie. Le redoutable spectacle des choses crƩƩes dĆ©veloppait en lui l'attendrissement; il n'Ć©tait occupĆ© qu'Ć  trouver pour lui-mĆŖme et Ć  inspirer aux autres la meilleure maniĆØre de plaindre et de soulager. Ce qui existe Ć©tait pour ce bon et rare prĆŖtre un sujet permanent de tristesse cherchant Ć  consoler. Il y a des hommes qui travaillent Ć  l'extraction de l'or; lui, il travaillait Ć  l'extraction de la pitiĆ©. L'universelle misĆØre Ć©tait sa mine. La douleur partout n'Ć©tait qu'une occasion de bontĆ© toujours. _Aimez-vous les uns les autres;_ il dĆ©clarait cela complet, ne souhaitait rien de plus, et c'Ć©tait lĆ  toute sa doctrine. Un jour, cet homme qui se croyait Ā«philosopheĀ», ce sĆ©nateur, dĆ©jĆ  nommĆ©, dit Ć  l'Ć©vĆŖque: --Mais voyez donc le spectacle du monde; guerre de tous contre tous; le plus fort a le plus d'esprit. Votre _aimez-vous les uns les autres_ est une bĆŖtise. --Eh bien, rĆ©pondit monseigneur Bienvenu sans disputer, si c'est une bĆŖtise, l'Ć¢me doit s'y enfermer comme la perle dans l'huĆ®tre. Il s'y enfermait donc, il y vivait, il s'en satisfaisait absolument, laissant de cĆ“tĆ© les questions prodigieuses qui attirent et qui Ć©pouvantent, les perspectives insondables de l'abstraction, les prĆ©cipices de la mĆ©taphysique, toutes ces profondeurs convergentes, pour l'apĆ“tre Ć  Dieu, pour l'athĆ©e au nĆ©ant: la destinĆ©e, le bien et le mal, la guerre de l'ĆŖtre contre l'ĆŖtre, la conscience de l'homme, le somnambulisme pensif de l'animal, la transformation par la mort, la rĆ©capitulation d'existences que contient le tombeau, la greffe incomprĆ©hensible des amours successifs sur le moi persistant, l'essence, la substance, le Nil et l'Ens, l'Ć¢me, la nature, la libertĆ©, la nĆ©cessitĆ©; problĆØmes Ć  pic, Ć©paisseurs sinistres, où se penchent les gigantesques archanges de l'esprit humain; formidables abĆ®mes que LucrĆØce, Manou, saint Paul et Dante contemplent avec cet oeil fulgurant qui semble, en regardant fixement l'infini, y faire Ć©clore des Ć©toiles. Monseigneur Bienvenu Ć©tait simplement un homme qui constatait du dehors les questions mystĆ©rieuses sans les scruter, sans les agiter, et sans en troubler son propre esprit, et qui avait dans l'Ć¢me le grave respect de l'ombre. Livre deuxiĆØme--La chute Chapitre I Le soir d'un jour de marche Dans les premiers jours du mois d'octobre 1815, une heure environ avant le coucher du soleil, un homme qui voyageait Ć  pied entrait dans la petite ville de Digne. Les rares habitants qui se trouvaient en ce moment Ć  leurs fenĆŖtres ou sur le seuil de leurs maisons regardaient ce voyageur avec une sorte d'inquiĆ©tude. Il Ć©tait difficile de rencontrer un passant d'un aspect plus misĆ©rable. C'Ć©tait un homme de moyenne taille, trapu et robuste, dans la force de l'Ć¢ge. Il pouvait avoir quarante-six ou quarante-huit ans. Une casquette Ć  visiĆØre de cuir rabattue cachait en partie son visage, brĆ»lĆ© par le soleil et le hĆ¢le, et ruisselant de sueur. Sa chemise de grosse toile jaune, rattachĆ©e au col par une petite ancre d'argent, laissait voir sa poitrine velue; il avait une cravate tordue en corde, un pantalon de coutil bleu, usĆ© et rĆ¢pĆ©, blanc Ć  un genou, trouĆ© Ć  l'autre, une vieille blouse grise en haillons, rapiĆ©cĆ©e Ć  l'un des coudes d'un morceau de drap vert cousu avec de la ficelle, sur le dos un sac de soldat fort plein, bien bouclĆ© et tout neuf, Ć  la main un Ć©norme bĆ¢ton noueux, les pieds sans bas dans des souliers ferrĆ©s, la tĆŖte tondue et la barbe longue. La sueur, la chaleur, le voyage Ć  pied, la poussiĆØre, ajoutaient je ne sais quoi de sordide Ć  cet ensemble dĆ©labrĆ©. Les cheveux Ć©taient ras, et pourtant hĆ©rissĆ©s; car ils commenƧaient Ć  pousser un peu, et semblaient n'avoir pas Ć©tĆ© coupĆ©s depuis quelque temps. Personne ne le connaissait. Ce n'Ć©tait Ć©videmment qu'un passant. D'où venait-il? Du midi. Des bords de la mer peut-ĆŖtre. Car il faisait son entrĆ©e dans Digne par la mĆŖme rue qui, sept mois auparavant, avait vu passer l'empereur NapolĆ©on allant de Cannes Ć  Paris. Cet homme avait dĆ» marcher tout le jour. Il paraissait trĆØs fatiguĆ©. Des femmes de l'ancien bourg qui est au bas de la ville l'avaient vu s'arrĆŖter sous les arbres du boulevard Gassendi et boire Ć  la fontaine qui est Ć  l'extrĆ©mitĆ© de la promenade. Il fallait qu'il eĆ»t bien soif, car des enfants qui le suivaient le virent encore s'arrĆŖter, et boire, deux cents pas plus loin, Ć  la fontaine de la place du marchĆ©. ArrivĆ© au coin de la rue Poichevert, il tourna Ć  gauche et se dirigea vers la mairie. Il y entra, puis sortit un quart d'heure aprĆØs. Un gendarme Ć©tait assis prĆØs de la porte sur le banc de pierre où le gĆ©nĆ©ral Drouot monta le 4 mars pour lire Ć  la foule effarĆ©e des habitants de Digne la proclamation du golfe Juan. L'homme Ć“ta sa casquette et salua humblement le gendarme. Le gendarme, sans rĆ©pondre Ć  son salut, le regarda avec attention, le suivit quelque temps des yeux, puis entra dans la maison de ville. Il y avait alors Ć  Digne une belle auberge Ć  l'enseigne de _la Croix-de-Colbas_. Cette auberge avait pour hĆ“telier un nommĆ© Jacquin Labarre, homme considĆ©rĆ© dans la ville pour sa parentĆ© avec un autre Labarre, qui tenait Ć  Grenoble l'auberge des _Trois-Dauphins_ et qui avait servi dans les guides. Lors du dĆ©barquement de l'empereur, beaucoup de bruits avaient couru dans le pays sur cette auberge des _Trois-Dauphins_. On contait que le gĆ©nĆ©ral Bertrand, dĆ©guisĆ© en charretier, y avait fait de frĆ©quents voyages au mois de janvier, et qu'il y avait distribuĆ© des croix d'honneur Ć  des soldats et des poignĆ©es de napolĆ©ons Ć  des bourgeois. La rĆ©alitĆ© est que l'empereur, entrĆ© dans Grenoble, avait refusĆ© de s'installer Ć  l'hĆ“tel de la prĆ©fecture; il avait remerciĆ© le maire en disant: _Je vais chez un brave homme que je connais_, et il Ć©tait allĆ© aux _Trois-Dauphins_. Cette gloire du Labarre des _Trois-Dauphins_ se reflĆ©tait Ć  vingt-cinq lieues de distance jusque sur le Labarre de la _Croix-de-Colbas_. On disait de lui dans la ville: _C'est le cousin de celui de Grenoble_. L'homme se dirigea vers cette auberge, qui Ć©tait la meilleure du pays. Il entra dans la cuisine, laquelle s'ouvrait de plain-pied sur la rue. Tous les fourneaux Ć©taient allumĆ©s; un grand feu flambait gaĆ®ment dans la cheminĆ©e. L'hĆ“te, qui Ć©tait en mĆŖme temps le chef, allait de l'Ć¢tre aux casseroles, fort occupĆ© et surveillant un excellent dĆ®ner destinĆ© Ć  des rouliers qu'on entendait rire et parler Ć  grand bruit dans une salle voisine. Quiconque a voyagĆ© sait que personne ne fait meilleure chĆØre que les rouliers. Une marmotte grasse, flanquĆ©e de perdrix blanches et de coqs de bruyĆØre, tournait sur une longue broche devant le feu; sur les fourneaux cuisaient deux grosses carpes du lac de Lauzet et une truite du lac d'Alloz. L'hĆ“te, entendant la porte s'ouvrir et entrer un nouveau venu, dit sans lever les yeux de ses fourneaux: --Que veut monsieur? --Manger et coucher, dit l'homme. --Rien de plus facile, reprit l'hĆ“te. En ce moment il tourna la tĆŖte, embrassa d'un coup d'oeil tout l'ensemble du voyageur, et ajouta: --... en payant. L'homme tira une grosse bourse de cuir de la poche de sa blouse et rĆ©pondit: --J'ai de l'argent. --En ce cas on est Ć  vous, dit l'hĆ“te. L'homme remit sa bourse en poche, se dĆ©chargea de son sac, le posa Ć  terre prĆØs de la porte, garda son bĆ¢ton Ć  la main, et alla s'asseoir sur une escabelle basse prĆØs du feu. Digne est dans la montagne. Les soirĆ©es d'octobre y sont froides. Cependant, tout en allant et venant, l'homme considĆ©rait le voyageur. --DĆ®ne-t-on bientĆ“t? dit l'homme. --Tout Ć  l'heure, dit l'hĆ“te. Pendant que le nouveau venu se chauffait, le dos tournĆ©, le digne aubergiste Jacquin Labarre tira un crayon de sa poche, puis il dĆ©chira le coin d'un vieux journal qui traĆ®nait sur une petite table prĆØs de la fenĆŖtre. Sur la marge blanche il Ć©crivit une ligne ou deux, plia sans cacheter et remit ce chiffon de papier Ć  un enfant qui paraissait lui servir tout Ć  la fois de marmiton et de laquais. L'aubergiste dit un mot Ć  l'oreille du marmiton, et l'enfant partit en courant dans la direction de la mairie. Le voyageur n'avait rien vu de tout cela. Il demanda encore une fois: --DĆ®ne-t-on bientĆ“t? --Tout Ć  l'heure, dit l'hĆ“te. L'enfant revint. Il rapportait le papier. L'hĆ“te le dĆ©plia avec empressement, comme quelqu'un qui attend une rĆ©ponse. Il parut lire attentivement, puis hocha la tĆŖte, et resta un moment pensif. Enfin il fit un pas vers le voyageur qui semblait plongĆ© dans des rĆ©flexions peu sereines. --Monsieur, dit-il, je ne puis vous recevoir. L'homme se dressa Ć  demi sur son sĆ©ant. --Comment! Avez-vous peur que je ne paye pas? Voulez-vous que je paye d'avance? J'ai de l'argent, vous dis-je. --Ce n'est pas cela. --Quoi donc? --Vous avez de l'argent.... --Oui, dit l'homme. --Et moi, dit l'hĆ“te, je n'ai pas de chambre. L'homme reprit tranquillement: --Mettez-moi Ć  l'Ć©curie. --Je ne puis. --Pourquoi? --Les chevaux prennent toute la place. --Eh bien, repartit l'homme, un coin dans le grenier. Une botte de paille. Nous verrons cela aprĆØs dĆ®ner. --Je ne puis vous donner Ć  dĆ®ner. Cette dĆ©claration, faite d'un ton mesurĆ©, mais ferme, parut grave Ć  l'Ć©tranger. Il se leva. --Ah bah! mais je meurs de faim, moi. J'ai marchĆ© dĆØs le soleil levĆ©. J'ai fait douze lieues. Je paye. Je veux manger. --Je n'ai rien, dit l'hĆ“te. L'homme Ć©clata de rire et se tourna vers la cheminĆ©e et les fourneaux. --Rien! et tout cela? --Tout cela m'est retenu. --Par qui? --Par ces messieurs les rouliers. --Combien sont-ils? --Douze. --Il y a lĆ  Ć  manger pour vingt. --Ils ont tout retenu et tout payĆ© d'avance. L'homme se rassit et dit sans hausser la voix: --Je suis Ć  l'auberge, j'ai faim, et je reste. L'hĆ“te alors se pencha Ć  son oreille, et lui dit d'un accent qui le fit tressaillir: --Allez-vous en. Le voyageur Ć©tait courbĆ© en cet instant et poussait quelques braises dans le feu avec le bout ferrĆ© de son bĆ¢ton, il se retourna vivement, et, comme il ouvrait la bouche pour rĆ©pliquer, l'hĆ“te le regarda fixement et ajouta toujours Ć  voix basse: --Tenez, assez de paroles comme cela. Voulez-vous que je vous dise votre nom? Vous vous appelez Jean Valjean. Maintenant voulez-vous que je vous dise qui vous ĆŖtes? En vous voyant entrer, je me suis doutĆ© de quelque chose, j'ai envoyĆ© Ć  la mairie, et voici ce qu'on m'a rĆ©pondu. Savez-vous lire? En parlant ainsi il tendait Ć  l'Ć©tranger, tout dĆ©pliĆ©, le papier qui venait de voyager de l'auberge Ć  la mairie, et de la mairie Ć  l'auberge. L'homme y jeta un regard. L'aubergiste reprit aprĆØs un silence: --J'ai l'habitude d'ĆŖtre poli avec tout le monde. Allez-vous-en. L'homme baissa la tĆŖte, ramassa le sac qu'il avait dĆ©posĆ© Ć  terre, et s'en alla. Il prit la grande rue. Il marchait devant lui au hasard, rasant de prĆØs les maisons, comme un homme humiliĆ© et triste. Il ne se retourna pas une seule fois. S'il s'Ć©tait retournĆ©, il aurait vu l'aubergiste de la _Croix-de-Colbas_ sur le seuil de sa porte, entourĆ© de tous les voyageurs de son auberge et de tous les passants de la rue, parlant vivement et le dĆ©signant du doigt, et, aux regards de dĆ©fiance et d'effroi du groupe, il aurait devinĆ© qu'avant peu son arrivĆ©e serait l'Ć©vĆ©nement de toute la ville. Il ne vit rien de tout cela. Les gens accablĆ©s ne regardent pas derriĆØre eux. Ils ne savent que trop que le mauvais sort les suit. Il chemina ainsi quelque temps, marchant toujours, allant Ć  l'aventure par des rues qu'il ne connaissait pas, oubliant la fatigue, comme cela arrive dans la tristesse. Tout Ć  coup il sentit vivement la faim. La nuit approchait. Il regarda autour de lui pour voir s'il ne dĆ©couvrirait pas quelque gĆ®te. La belle hĆ“tellerie s'Ć©tait fermĆ©e pour lui; il cherchait quelque cabaret bien humble, quelque bouge bien pauvre. PrĆ©cisĆ©ment une lumiĆØre s'allumait au bout de la rue; une branche de pin, pendue Ć  une potence en fer, se dessinait sur le ciel blanc du crĆ©puscule. Il y alla. C'Ć©tait en effet un cabaret. Le cabaret qui est dans la rue de Chaffaut. Le voyageur s'arrĆŖta un moment, et regarda par la vitre l'intĆ©rieur de la salle basse du cabaret, Ć©clairĆ©e par une petite lampe sur une table et par un grand feu dans la cheminĆ©e. Quelques hommes y buvaient. L'hĆ“te se chauffait. La flamme faisait bruire une marmite de fer accrochĆ©e Ć  la crĆ©maillĆØre. On entre dans ce cabaret, qui est aussi une espĆØce d'auberge, par deux portes. L'une donne sur la rue, l'autre s'ouvre sur une petite cour pleine de fumier. Le voyageur n'osa pas entrer par la porte de la rue. Il se glissa dans la cour, s'arrĆŖta encore, puis leva timidement le loquet et poussa la porte. --Qui va lĆ ? dit le maĆ®tre. --Quelqu'un qui voudrait souper et coucher. --C'est bon. Ici on soupe et on couche. Il entra. Tous les gens qui buvaient se retournĆØrent. La lampe l'Ć©clairait d'un cĆ“tĆ©, le feu de l'autre. On l'examina quelque temps pendant qu'il dĆ©faisait son sac. L'hĆ“te lui dit: --VoilĆ  du feu. Le souper cuit dans la marmite. Venez vous chauffer, camarade. Il alla s'asseoir prĆØs de l'Ć¢tre. Il allongea devant le feu ses pieds meurtris par la fatigue; une bonne odeur sortait de la marmite. Tout ce qu'on pouvait distinguer de son visage sous sa casquette baissĆ©e prit une vague apparence de bien-ĆŖtre mĆŖlĆ©e Ć  cet autre aspect si poignant que donne l'habitude de la souffrance. C'Ć©tait d'ailleurs un profil ferme, Ć©nergique et triste. Cette physionomie Ć©tait Ć©trangement composĆ©e; elle commenƧait par paraĆ®tre humble et finissait par sembler sĆ©vĆØre. L'oeil luisait sous les sourcils comme un feu sous une broussaille. Cependant un des hommes attablĆ©s Ć©tait un poissonnier qui, avant d'entrer au cabaret de la rue de Chaffaut, Ć©tait allĆ© mettre son cheval Ć  l'Ć©curie chez Labarre. Le hasard faisait que le matin mĆŖme il avait rencontrĆ© cet Ć©tranger de mauvaise mine, cheminant entre Bras dasse et... j'ai oubliĆ© le nom. (Je crois que c'est Escoublon). Or, en le rencontrant, l'homme, qui paraissait dĆ©jĆ  trĆØs fatiguĆ©, lui avait demandĆ© de le prendre en croupe; Ć  quoi le poissonnier n'avait rĆ©pondu qu'en doublant le pas. Ce poissonnier faisait partie, une demi-heure auparavant, du groupe qui entourait Jacquin Labarre, et lui-mĆŖme avait racontĆ© sa dĆ©sagrĆ©able rencontre du matin aux gens de _la Croix-de-Colbas_. Il fit de sa place au cabaretier un signe imperceptible. Le cabaretier vint Ć  lui. Ils Ć©changĆØrent quelques paroles Ć  voix basse. L'homme Ć©tait retombĆ© dans ses rĆ©flexions. Le cabaretier revint Ć  la cheminĆ©e, posa brusquement sa main sur l'Ć©paule de l'homme, et lui dit: --Tu vas t'en aller d'ici. L'Ć©tranger se retourna et rĆ©pondit avec douceur. --Ah! vous savez? --Oui. --On m'a renvoyĆ© de l'autre auberge. --Et l'on te chasse de celle-ci. --Où voulez-vous que j'aille? --Ailleurs. L'homme prit son bĆ¢ton et son sac, et s'en alla. Comme il sortait, quelques enfants, qui l'avaient suivi depuis _la Croix-de-Colbas_ et qui semblaient l'attendre, lui jetĆØrent des pierres. Il revint sur ses pas avec colĆØre et les menaƧa de son bĆ¢ton; les enfants se dispersĆØrent comme une volĆ©e d'oiseaux. Il passa devant la prison. ƀ la porte pendait une chaĆ®ne de fer attachĆ©e Ć  une cloche. Il sonna. Un guichet s'ouvrit. --Monsieur le guichetier, dit-il en Ć“tant respectueusement sa casquette, voudriez-vous bien m'ouvrir et me loger pour cette nuit? Une voix rĆ©pondit: --Une prison n'est pas une auberge. Faites-vous arrĆŖter. On vous ouvrira. Le guichet se referma. Il entra dans une petite rue où il y a beaucoup de jardins. Quelques-uns ne sont enclos que de haies, ce qui Ć©gaye la rue. Parmi ces jardins et ces haies, il vit une petite maison d'un seul Ć©tage dont la fenĆŖtre Ć©tait Ć©clairĆ©e. Il regarda par cette vitre comme il avait fait pour le cabaret. C'Ć©tait une grande chambre blanchie Ć  la chaux, avec un lit drapĆ© d'indienne imprimĆ©e, et un berceau dans un coin, quelques chaises de bois et un fusil Ć  deux coups accrochĆ© au mur. Une table Ć©tait servie au milieu de la chambre. Une lampe de cuivre Ć©clairait la nappe de grosse toile blanche, le broc d'Ć©tain luisant comme l'argent et plein de vin et la soupiĆØre brune qui fumait. ƀ cette table Ć©tait assis un homme d'une quarantaine d'annĆ©es, Ć  la figure joyeuse et ouverte, qui faisait sauter un petit enfant sur ses genoux. PrĆØs de lui, une femme toute jeune allaitait un autre enfant. Le pĆØre riait, l'enfant riait, la mĆØre souriait. L'Ć©tranger resta un moment rĆŖveur devant ce spectacle doux et calmant. Que se passait-il en lui? Lui seul eĆ»t pu le dire. Il est probable qu'il pensa que cette maison joyeuse serait hospitaliĆØre, et que lĆ  où il voyait tant de bonheur il trouverait peut-ĆŖtre un peu de pitiĆ©. Il frappa au carreau un petit coup trĆØs faible. On n'entendit pas. Il frappa un second coup. Il entendit la femme qui disait: --Mon homme, il me semble qu'on frappe. --Non, rĆ©pondit le mari. Il frappa un troisiĆØme coup. Le mari se leva, prit la lampe, et alla Ć  la porte qu'il ouvrit. C'Ć©tait un homme de haute taille, demi-paysan, demi-artisan. Il portait un vaste tablier de cuir qui montait jusqu'Ć  son Ć©paule gauche, et dans lequel faisaient ventre un marteau, un mouchoir rouge, une poire Ć  poudre, toutes sortes d'objets que la ceinture retenait comme dans une poche. Il renversait la tĆŖte en arriĆØre; sa chemise largement ouverte et rabattue montrait son cou de taureau, blanc et nu. Il avait d'Ć©pais sourcils, d'Ć©normes favoris noirs, les yeux Ć  fleur de tĆŖte, le bas du visage en museau, et sur tout cela cet air d'ĆŖtre chez soi qui est une chose inexprimable. --Monsieur, dit le voyageur, pardon. En payant, pourriez-vous me donner une assiettĆ©e de soupe et un coin pour dormir dans ce hangar qui est lĆ  dans ce jardin? Dites, pourriez-vous? En payant? --Qui ĆŖtes-vous? demanda le maĆ®tre du logis. L'homme rĆ©pondit: --J'arrive de Puy-Moisson. J'ai marchĆ© toute la journĆ©e. J'ai fait douze lieues. Pourriez-vous? En payant? --Je ne refuserais pas, dit le paysan, de loger quelqu'un de bien qui payerait. Mais pourquoi n'allez-vous pas Ć  l'auberge. --Il n'y a pas de place. --Bah! pas possible. Ce n'est pas jour de foire ni de marchĆ©. Êtes-vous allĆ© chez Labarre? --Oui. --Eh bien? Le voyageur rĆ©pondit avec embarras: --Je ne sais pas, il ne m'a pas reƧu. --Êtes-vous allĆ© chez chose, de la rue de Chaffaut? L'embarras de l'Ć©tranger croissait. Il balbutia: --Il ne m'a pas reƧu non plus. Le visage du paysan prit une expression de dĆ©fiance, il regarda le nouveau venu de la tĆŖte aux pieds, et tout Ć  coup il s'Ć©cria avec une sorte de frĆ©missement: --Est-ce que vous seriez l'homme?... Il jeta un nouveau coup d'oeil sur l'Ć©tranger, fit trois pas en arriĆØre, posa la lampe sur la table et dĆ©crocha son fusil du mur. Cependant aux paroles du paysan: _Est-ce que vous seriez l'homme?..._ la femme s'Ć©tait levĆ©e, avait pris ses deux enfants dans ses bras et s'Ć©tait rĆ©fugiĆ©e prĆ©cipitamment derriĆØre son mari, regardant l'Ć©tranger avec Ć©pouvante, la gorge nue, les yeux effarĆ©s, en murmurant tout bas:_ Tso-maraude_. Tout cela se fit en moins de temps qu'il ne faut pour se le figurer. AprĆØs avoir examinĆ© quelques instants l'homme comme on examine une vipĆØre, le maĆ®tre du logis revint Ć  la porte et dit: --Va-t'en. --Par grĆ¢ce, reprit l'homme, un verre d'eau. --Un coup de fusil! dit le paysan. Puis il referma la porte violemment, et l'homme l'entendit tirer deux gros verrous. Un moment aprĆØs, la fenĆŖtre se ferma au volet, et un bruit de barre de fer qu'on posait parvint au dehors. La nuit continuait de tomber. Le vent froid des Alpes soufflait. ƀ la lueur du jour expirant, l'Ć©tranger aperƧut dans un des jardins qui bordent la rue une sorte de hutte qui lui parut maƧonnĆ©e en mottes de gazon. Il franchit rĆ©solument une barriĆØre de bois et se trouva dans le jardin. Il s'approcha de la hutte; elle avait pour porte une Ć©troite ouverture trĆØs basse et elle ressemblait Ć  ces constructions que les cantonniers se bĆ¢tissent au bord des routes. Il pensa sans doute que c'Ć©tait en effet le logis d'un cantonnier; il souffrait du froid et de la faim; il s'Ć©tait rĆ©signĆ© Ć  la faim, mais c'Ć©tait du moins lĆ  un abri contre le froid. Ces sortes de logis ne sont habituellement pas occupĆ©s la nuit. Il se coucha Ć  plat ventre et se glissa dans la hutte. Il y faisait chaud, et il y trouva un assez bon lit de paille. Il resta un moment Ć©tendu sur ce lit, sans pouvoir faire un mouvement tant il Ć©tait fatiguĆ©. Puis, comme son sac sur son dos le gĆŖnait et que c'Ć©tait d'ailleurs un oreiller tout trouvĆ©, il se mit Ć  dĆ©boucler une des courroies. En ce moment un grondement farouche se fit entendre. Il leva les yeux. La tĆŖte d'un dogue Ć©norme se dessinait dans l'ombre Ć  l'ouverture de la hutte. C'Ć©tait la niche d'un chien. Il Ć©tait lui-mĆŖme vigoureux et redoutable; il s'arma de son bĆ¢ton, il se fit de son sac un bouclier, et sortit de la niche comme il put, non sans Ć©largir les dĆ©chirures de ses haillons. Il sortit Ć©galement du jardin, mais Ć  reculons, obligĆ©, pour tenir le dogue en respect, d'avoir recours Ć  cette manoeuvre du bĆ¢ton que les maĆ®tres en ce genre d'escrime appellent _la rose couverte_. Quand il eut, non sans peine, repassĆ© la barriĆØre et qu'il se retrouva dans la rue, seul, sans gĆ®te, sans toit, sans abri, chassĆ© mĆŖme de ce lit de paille et de cette niche misĆ©rable, il se laissa tomber plutĆ“t qu'il ne s'assit sur une pierre, et il paraĆ®t qu'un passant qui traversait l'entendit s'Ć©crier: --Je ne suis pas mĆŖme un chien! BientĆ“t il se releva et se remit Ć  marcher. Il sortit de la ville, espĆ©rant trouver quelque arbre ou quelque meule dans les champs, et s'y abriter. Il chemina ainsi quelque temps, la tĆŖte toujours baissĆ©e. Quand il se sentit loin de toute habitation humaine, il leva les yeux et chercha autour de lui. Il Ć©tait dans un champ; il avait devant lui une de ces collines basses couvertes de chaume coupĆ© ras, qui aprĆØs la moisson ressemblent Ć  des tĆŖtes tondues. L'horizon Ć©tait tout noir; ce n'Ć©tait pas seulement le sombre de la nuit; c'Ć©taient des nuages trĆØs bas qui semblaient s'appuyer sur la colline mĆŖme et qui montaient, emplissant tout le ciel. Cependant, comme la lune allait se lever et qu'il flottait encore au zĆ©nith un reste de clartĆ© crĆ©pusculaire, ces nuages formaient au haut du ciel une sorte de voĆ»te blanchĆ¢tre d'où tombait sur la terre une lueur. La terre Ć©tait donc plus Ć©clairĆ©e que le ciel, ce qui est un effet particuliĆØrement sinistre, et la colline, d'un pauvre et chĆ©tif contour, se dessinait vague et blafarde sur l'horizon tĆ©nĆ©breux. Tout cet ensemble Ć©tait hideux, petit, lugubre et bornĆ©. Rien dans le champ ni sur la colline qu'un arbre difforme qui se tordait en frissonnant Ć  quelques pas du voyageur. Cet homme Ć©tait Ć©videmment trĆØs loin d'avoir de ces dĆ©licates habitudes d'intelligence et d'esprit qui font qu'on est sensible aux aspects mystĆ©rieux des choses; cependant il y avait dans ce ciel, dans cette colline, dans cette plaine et dans cet arbre, quelque chose de si profondĆ©ment dĆ©solĆ© qu'aprĆØs un moment d'immobilitĆ© et de rĆŖverie, il rebroussa chemin brusquement. Il y a des instants où la nature semble hostile. Il revint sur ses pas. Les portes de Digne Ć©taient fermĆ©es. Digne, qui a soutenu des siĆØges dans les guerres de religion, Ć©tait encore entourĆ©e en 1815 de vieilles murailles flanquĆ©es de tours carrĆ©es qu'on a dĆ©molies depuis. Il passa par une brĆØche et rentra dans la ville. Il pouvait ĆŖtre huit heures du soir. Comme il ne connaissait pas les rues, il recommenƧa sa promenade Ć  l'aventure. Il parvint ainsi Ć  la prĆ©fecture, puis au sĆ©minaire. En passant sur la place de la cathĆ©drale, il montra le poing Ć  l'Ć©glise. Il y a au coin de cette place une imprimerie. C'est lĆ  que furent imprimĆ©es pour la premiĆØre fois les proclamations de l'empereur et de la garde impĆ©riale Ć  l'armĆ©e, apportĆ©es de l'Ć®le d'Elbe et dictĆ©es par NapolĆ©on lui-mĆŖme. ƉpuisĆ© de fatigue et n'espĆ©rant plus rien, il se coucha sur le banc de pierre qui est Ć  la porte de cette imprimerie. Une vieille femme sortait de l'Ć©glise en ce moment. Elle vit cet homme Ć©tendu dans l'ombre. --Que faites-vous lĆ , mon ami? dit-elle. Il rĆ©pondit durement et avec colĆØre: --Vous le voyez, bonne femme, je me couche. La bonne femme, bien digne de ce nom en effet, Ć©tait madame la marquise de R. --Sur ce banc? reprit-elle. --J'ai eu pendant dix-neuf ans un matelas de bois, dit l'homme, j'ai aujourd'hui un matelas de pierre. --Vous avez Ć©tĆ© soldat? --Oui, bonne femme. Soldat. --Pourquoi n'allez-vous pas Ć  l'auberge? --Parce que je n'ai pas d'argent. --HĆ©las, dit madame de R., je n'ai dans ma bourse que quatre sous. --Donnez toujours. L'homme prit les quatre sous. Madame de R. continua: --Vous ne pouvez vous loger avec si peu dans une auberge. Avez-vous essayĆ© pourtant? Il est impossible que vous passiez ainsi la nuit. Vous avez sans doute froid et faim. On aurait pu vous loger par charitĆ©. --J'ai frappĆ© Ć  toutes les portes. --Eh bien? --Partout on m'a chassĆ©. La Ā«bonne femmeĀ» toucha le bras de l'homme et lui montra de l'autre cĆ“tĆ© de la place une petite maison basse Ć  cĆ“tĆ© de l'Ć©vĆŖchĆ©. --Vous avez, reprit-elle, frappĆ© Ć  toutes les portes? --Oui. --Avez-vous frappĆ© Ć  celle-lĆ ? --Non. --Frappez-y. Chapitre II La prudence conseillĆ©e Ć  la sagesse Ce soir-lĆ , M. l'Ć©vĆŖque de Digne, aprĆØs sa promenade en ville, Ć©tait restĆ© assez tard enfermĆ© dans sa chambre. Il s'occupait d'un grand travail sur les _Devoirs_, lequel est malheureusement demeurĆ© inachevĆ©. Il dĆ©pouillait soigneusement tout ce que les PĆØres et les Docteurs ont dit sur cette grave matiĆØre. Son livre Ć©tait divisĆ© en deux parties; premiĆØrement les devoirs de tous, deuxiĆØmement les devoirs de chacun, selon la classe Ć  laquelle il appartient. Les devoirs de tous sont les grands devoirs. Il y en a quatre. Saint Matthieu les indique: devoirs envers Dieu (Matth., VI), devoirs envers soi-mĆŖme (Matth., V, 29, 30), devoirs envers le prochain (Matth., VII, 12), devoirs envers les crĆ©atures (Matth., VI, 20, 25). Pour les autres devoirs, l'Ć©vĆŖque les avait trouvĆ©s indiquĆ©s et prescrits ailleurs; aux souverains et aux sujets, dans l'ƉpĆ®tre aux Romains; aux magistrats, aux Ć©pouses, aux mĆØres et aux jeunes hommes, par saint Pierre; aux maris, aux pĆØres, aux enfants et aux serviteurs, dans l'ƉpĆ®tre aux ƉphĆ©siens; aux fidĆØles, dans l'ƉpĆ®tre aux HĆ©breux; aux vierges, dans l'ƉpĆ®tre aux Corinthiens. Il faisait laborieusement de toutes ces prescriptions un ensemble harmonieux qu'il voulait prĆ©senter aux Ć¢mes. Il travaillait encore Ć  huit heures, Ć©crivant assez incommodĆ©ment sur de petits carrĆ©s de papier avec un gros livre ouvert sur ses genoux, quand madame Magloire entra, selon son habitude, pour prendre l'argenterie dans le placard prĆØs du lit. Un moment aprĆØs, l'Ć©vĆŖque, sentant que le couvert Ć©tait mis et que sa soeur l'attendait peut-ĆŖtre, ferma son livre, se leva de sa table et entra dans la salle Ć  manger. La salle Ć  manger Ć©tait une piĆØce oblongue Ć  cheminĆ©e, avec porte sur la rue (nous l'avons dit), et fenĆŖtre sur le jardin. Madame Magloire achevait en effet de mettre le couvert. Tout en vaquant au service, elle causait avec mademoiselle Baptistine. Une lampe Ć©tait sur la table; la table Ć©tait prĆØs de la cheminĆ©e. Un assez bon feu Ć©tait allumĆ©. On peut se figurer facilement ces deux femmes qui avaient toutes deux passĆ© soixante ans: madame Magloire petite, grasse, vive; mademoiselle Baptistine, douce, mince, frĆŖle, un peu plus grande que son frĆØre, vĆŖtue d'une robe de soie puce, couleur Ć  la mode en 1806, qu'elle avait achetĆ©e alors Ć  Paris et qui lui durait encore. Pour emprunter des locutions vulgaires qui ont le mĆ©rite de dire avec un seul mot une idĆ©e qu'une page suffirait Ć  peine Ć  exprimer, madame Magloire avait l'air d'une _paysanne_ et mademoiselle Baptistine d'une _dame_. Madame Magloire avait un bonnet blanc Ć  tuyaux, au cou une jeannette d'or, le seul bijou de femme qu'il y eĆ»t dans la maison, un fichu trĆØs blanc sortant de la robe de bure noire Ć  manches larges et courtes, un tablier de toile de coton Ć  carreaux rouges et verts, nouĆ© Ć  la ceinture d'un ruban vert, avec piĆØce d'estomac pareille rattachĆ©e par deux Ć©pingles aux deux coins d'en haut, aux pieds de gros souliers et des bas jaunes comme les femmes de Marseille. La robe de mademoiselle Baptistine Ć©tait coupĆ©e sur les patrons de 1806, taille courte, fourreau Ć©troit, manches Ć  Ć©paulettes, avec pattes et boutons. Elle cachait ses cheveux gris sous une perruque frisĆ©e dite Ć  _l'enfant_. Madame Magloire avait l'air intelligent, vif et bon; les deux angles de sa bouche inĆ©galement relevĆ©s et la lĆØvre supĆ©rieure plus grosse que la lĆØvre infĆ©rieure lui donnaient quelque chose de bourru et d'impĆ©rieux. Tant que monseigneur se taisait, elle lui parlait rĆ©solument avec un mĆ©lange de respect et de libertĆ©; mais dĆØs que monseigneur parlait, on a vu cela, elle obĆ©issait passivement comme mademoiselle. Mademoiselle Baptistine ne parlait mĆŖme pas. Elle se bornait Ć  obĆ©ir et Ć  complaire. MĆŖme quand elle Ć©tait jeune, elle n'Ć©tait pas jolie, elle avait de gros yeux bleus Ć  fleur de tĆŖte et le nez long et busquĆ©; mais tout son visage, toute sa personne, nous l'avons dit en commenƧant, respiraient une ineffable bontĆ©. Elle avait toujours Ć©tĆ© prĆ©destinĆ©e Ć  la mansuĆ©tude; mais la foi, la charitĆ©, l'espĆ©rance, ces trois vertus qui chauffent doucement l'Ć¢me, avaient Ć©levĆ© peu Ć  peu cette mansuĆ©tude jusqu'Ć  la saintetĆ©. La nature n'en avait fait qu'une brebis, la religion en avait fait un ange. Pauvre sainte fille! doux souvenir disparu! Mademoiselle Baptistine a depuis racontĆ© tant de fois ce qui s'Ć©tait passĆ© Ć  l'Ć©vĆŖchĆ© cette soirĆ©e-lĆ , que plusieurs personnes qui vivent encore s'en rappellent les moindres dĆ©tails. Au moment où M. l'Ć©vĆŖque entra, madame Magloire parlait avec quelque vivacitĆ©. Elle entretenait _mademoiselle_ d'un sujet qui lui Ć©tait familier et auquel l'Ć©vĆŖque Ć©tait accoutumĆ©. Il s'agissait du loquet de la porte d'entrĆ©e. Il paraĆ®t que, tout en allant faire quelques provisions pour le souper, madame Magloire avait entendu dire des choses en divers lieux. On parlait d'un rĆ“deur de mauvaise mine; qu'un vagabond suspect serait arrivĆ©, qu'il devait ĆŖtre quelque part dans la ville, et qu'il se pourrait qu'il y eĆ»t de mĆ©chantes rencontres pour ceux qui s'aviseraient de rentrer tard chez eux cette nuit-lĆ . Que la police Ć©tait bien mal faite du reste, attendu que M. le prĆ©fet et M. le maire ne s'aimaient pas, et cherchaient Ć  se nuire en faisant arriver des Ć©vĆ©nements. Que c'Ć©tait donc aux gens sages Ć  faire la police eux-mĆŖmes et Ć  se bien garder, et qu'il faudrait avoir soin de dĆ»ment clore, verrouiller et barricader sa maison, _et de bien fermer ses portes_. Madame Magloire appuya sur ce dernier mot; mais l'Ć©vĆŖque venait de sa chambre où il avait eu assez froid, il s'Ć©tait assis devant la cheminĆ©e et se chauffait, et puis il pensait Ć  autre chose. Il ne releva pas le mot Ć  effet que madame Magloire venait de laisser tomber. Elle le rĆ©pĆ©ta. Alors, mademoiselle Baptistine, voulant satisfaire madame Magloire sans dĆ©plaire Ć  son frĆØre, se hasarda Ć  dire timidement: --Mon frĆØre, entendez-vous ce que dit madame Magloire? --J'en ai entendu vaguement quelque chose, rĆ©pondit l'Ć©vĆŖque. Puis tournant Ć  demi sa chaise, mettant ses deux mains sur ses genoux, et levant vers la vieille servante son visage cordial et facilement joyeux, que le feu Ć©clairait d'en bas: --Voyons. Qu'y a-t-il? qu'y a-t-il? Nous sommes donc dans quelque gros danger? Alors madame Magloire recommenƧa toute l'histoire, en l'exagĆ©rant quelque peu, sans s'en douter. Il paraĆ®trait qu'un bohĆ©mien, un va-nu-pieds, une espĆØce de mendiant dangereux serait en ce moment dans la ville. Il s'Ć©tait prĆ©sentĆ© pour loger chez Jacquin Labarre qui n'avait pas voulu le recevoir. On l'avait vu arriver par le boulevard Gassendi et rĆ“der dans les rues Ć  la brume. Un homme de sac et de corde avec une figure terrible. --Vraiment? dit l'Ć©vĆŖque. Ce consentement Ć  l'interroger encouragea madame Magloire; cela lui semblait indiquer que l'Ć©vĆŖque n'Ć©tait pas loin de s'alarmer; elle poursuivit triomphante: --Oui, monseigneur. C'est comme cela. Il y aura quelque malheur cette nuit dans la ville. Tout le monde le dit. Avec cela que la police est si mal faite (rĆ©pĆ©tition inutile). Vivre dans un pays de montagnes, et n'avoir pas mĆŖme de lanternes la nuit dans les rues! On sort. Des fours, quoi! Et je dis, monseigneur, et mademoiselle que voilĆ  dit comme moi.... --Moi, interrompit la soeur, je ne dis rien. Ce que mon frĆØre fait est bien fait. Madame Magloire continua comme s'il n'y avait pas eu de protestation: --Nous disons que cette maison-ci n'est pas sĆ»re du tout; que, si monseigneur le permet, je vais aller dire Ć  Paulin Musebois, le serrurier, qu'il vienne remettre les anciens verrous de la porte; on les a lĆ , c'est une minute; et je dis qu'il faut des verrous, monseigneur, ne serait-ce que pour cette nuit; car je dis qu'une porte qui s'ouvre du dehors avec un loquet, par le premier passant venu, rien n'est plus terrible; avec cela que monseigneur a l'habitude de toujours dire d'entrer, et que d'ailleurs, mĆŖme au milieu de la nuit, Ć“ mon Dieu! on n'a pas besoin d'en demander la permission.... En ce moment, on frappa Ć  la porte un coup assez violent. --Entrez, dit l'Ć©vĆŖque. Chapitre III HĆ©roĆÆsme de l'obĆ©issance passive La porte s'ouvrit. Elle s'ouvrit vivement, toute grande, comme si quelqu'un la poussait avec Ć©nergie et rĆ©solution. Un homme entra. Cet homme, nous le connaissons dĆ©jĆ . C'est le voyageur que nous avons vu tout Ć  l'heure errer cherchant un gĆ®te. Il entra, fit un pas, et s'arrĆŖta, laissant la porte ouverte derriĆØre lui. Il avait son sac sur l'Ć©paule, son bĆ¢ton Ć  la main, une expression rude, hardie, fatiguĆ©e et violente dans les yeux. Le feu de la cheminĆ©e l'Ć©clairait. Il Ć©tait hideux. C'Ć©tait une sinistre apparition. Madame Magloire n'eut pas mĆŖme la force de jeter un cri. Elle tressaillit, et resta bĆ©ante. Mademoiselle Baptistine se retourna, aperƧut l'homme qui entrait et se dressa Ć  demi d'effarement, puis, ramenant peu Ć  peu sa tĆŖte vers la cheminĆ©e, elle se mit Ć  regarder son frĆØre et son visage redevint profondĆ©ment calme et serein. L'Ć©vĆŖque fixait sur l'homme un oeil tranquille. Comme il ouvrait la bouche, sans doute pour demander au nouveau venu ce qu'il dĆ©sirait, l'homme appuya ses deux mains Ć  la fois sur son bĆ¢ton, promena ses yeux tour Ć  tour sur le vieillard et les femmes, et, sans attendre que l'Ć©vĆŖque parlĆ¢t, dit d'une voix haute: --Voici. Je m'appelle Jean Valjean. Je suis un galĆ©rien. J'ai passĆ© dix-neuf ans au bagne. Je suis libĆ©rĆ© depuis quatre jours et en route pour Pontarlier qui est ma destination. Quatre jours et que je marche depuis Toulon. Aujourd'hui, j'ai fait douze lieues Ć  pied. Ce soir, en arrivant dans ce pays, j'ai Ć©tĆ© dans une auberge, on m'a renvoyĆ© Ć  cause de mon passeport jaune que j'avais montrĆ© Ć  la mairie. Il avait fallu. J'ai Ć©tĆ© Ć  une autre auberge. On m'a dit: Va-t-en! Chez l'un, chez l'autre. Personne n'a voulu de moi. J'ai Ć©tĆ© Ć  la prison, le guichetier n'a pas ouvert. J'ai Ć©tĆ© dans la niche d'un chien. Ce chien m'a mordu et m'a chassĆ©, comme s'il avait Ć©tĆ© un homme. On aurait dit qu'il savait qui j'Ć©tais. Je m'en suis allĆ© dans les champs pour coucher Ć  la belle Ć©toile. Il n'y avait pas d'Ć©toile. J'ai pensĆ© qu'il pleuvrait, et qu'il n'y avait pas de bon Dieu pour empĆŖcher de pleuvoir, et je suis rentrĆ© dans la ville pour y trouver le renfoncement d'une porte. LĆ , dans la place, j'allais me coucher sur une pierre. Une bonne femme m'a montrĆ© votre maison et m'a dit: Ā«Frappe lĆ Ā». J'ai frappĆ©. Qu'est-ce que c'est ici? Êtes-vous une auberge? J'ai de l'argent. Ma masse. Cent neuf francs quinze sous que j'ai gagnĆ©s au bagne par mon travail en dix-neuf ans. Je payerai. Qu'est-ce que cela me fait? J'ai de l'argent. Je suis trĆØs fatiguĆ©, douze lieues Ć  pied, j'ai bien faim. Voulez-vous que je reste? --Madame Magloire, dit l'Ć©vĆŖque, vous mettrez un couvert de plus. L'homme fit trois pas et s'approcha de la lampe qui Ć©tait sur la table. --Tenez, reprit-il, comme s'il n'avait pas bien compris, ce n'est pas Ƨa. Avez-vous entendu? Je suis un galĆ©rien. Un forƧat. Je viens des galĆØres. Il tira de sa poche une grande feuille de papier jaune qu'il dĆ©plia. --VoilĆ  mon passeport. Jaune, comme vous voyez. Cela sert Ć  me faire chasser de partout où je suis. Voulez-vous lire? Je sais lire, moi. J'ai appris au bagne. Il y a une Ć©cole pour ceux qui veulent. Tenez, voilĆ  ce qu'on a mis sur le passeport: Ā«Jean Valjean, forƧat libĆ©rĆ©, natif de...--cela vous est Ć©gal...--Est restĆ© dix-neuf ans au bagne. Cinq ans pour vol avec effraction. Quatorze ans pour avoir tentĆ© de s'Ć©vader quatre fois. Cet homme est trĆØs dangereux.Ā»--VoilĆ ! Tout le monde m'a jetĆ© dehors. Voulez-vous me recevoir, vous? Est-ce une auberge? Voulez-vous me donner Ć  manger et Ć  coucher? Avez-vous une Ć©curie? --Madame Magloire, dit l'Ć©vĆŖque, vous mettrez des draps blancs au lit de l'alcĆ“ve. Nous avons dĆ©jĆ  expliquĆ© de quelle nature Ć©tait l'obĆ©issance des deux femmes. Madame Magloire sortit pour exĆ©cuter ces ordres. L'Ć©vĆŖque se tourna vers l'homme. --Monsieur, asseyez-vous et chauffez-vous. Nous allons souper dans un instant, et l'on fera votre lit pendant que vous souperez. Ici l'homme comprit tout Ć  fait. L'expression de son visage, jusqu'alors sombre et dure, s'empreignit de stupĆ©faction, de doute, de joie, et devint extraordinaire. Il se mit Ć  balbutier comme un homme fou: --Vrai? quoi? vous me gardez? vous ne me chassez pas! un forƧat! Vous m'appelez monsieur! vous ne me tutoyez pas! Va-t-en, chien! qu'on me dit toujours. Je croyais bien que vous me chasseriez. Aussi j'avais dit tout de suite qui je suis. Oh! la brave femme qui m'a enseignĆ© ici! Je vais souper! un lit! Un lit avec des matelas et des draps! comme tout le monde! il y a dix-neuf ans que je n'ai couchĆ© dans un lit! Vous voulez bien que je ne m'en aille pas! Vous ĆŖtes de dignes gens! D'ailleurs j'ai de l'argent. Je payerai bien. Pardon, monsieur l'aubergiste, comment vous appelez-vous? Je payerai tout ce qu'on voudra. Vous ĆŖtes un brave homme. Vous ĆŖtes aubergiste, n'est-ce pas? --Je suis, dit l'Ć©vĆŖque, un prĆŖtre qui demeure ici. --Un prĆŖtre! reprit l'homme. Oh! un brave homme de prĆŖtre! Alors vous ne me demandez pas d'argent? Le curĆ©, n'est-ce pas? le curĆ© de cette grande Ć©glise? Tiens! c'est vrai, que je suis bĆŖte! je n'avais pas vu votre calotte! Tout en parlant, il avait dĆ©posĆ© son sac et son bĆ¢ton dans un coin, puis remis son passeport dans sa poche, et il s'Ć©tait assis. Mademoiselle Baptistine le considĆ©rait avec douceur. Il continua: --Vous ĆŖtes humain, monsieur le curĆ©. Vous n'avez pas de mĆ©pris. C'est bien bon un bon prĆŖtre. Alors vous n'avez pas besoin que je paye? --Non, dit l'Ć©vĆŖque, gardez votre argent. Combien avez-vous? ne m'avez-vous pas dit cent neuf francs? --Quinze sous, ajouta l'homme. --Cent neuf francs quinze sous. Et combien de temps avez-vous mis Ć  gagner cela? --Dix-neuf ans. --Dix-neuf ans! L'Ć©vĆŖque soupira profondĆ©ment. L'homme poursuivit: --J'ai encore tout mon argent. Depuis quatre jours je n'ai dĆ©pensĆ© que vingt-cinq sous que j'ai gagnĆ©s en aidant Ć  dĆ©charger des voitures Ć  Grasse. Puisque vous ĆŖtes abbĆ©, je vais vous dire, nous avions un aumĆ“nier au bagne. Et puis un jour j'ai vu un Ć©vĆŖque. Monseigneur, qu'on appelle. C'Ć©tait l'Ć©vĆŖque de la Majore, Ć  Marseille. C'est le curĆ© qui est sur les curĆ©s. Vous savez, pardon, je dis mal cela, mais pour moi, c'est si loin!--Vous comprenez, nous autres! Il a dit la messe au milieu du bagne, sur un autel, il avait une chose pointue, en or, sur la tĆŖte. Au grand jour de midi, cela brillait. Nous Ć©tions en rang. Des trois cĆ“tĆ©s. Avec les canons, mĆØche allumĆ©e, en face de nous. Nous ne voyions pas bien. Il a parlĆ©, mais il Ć©tait trop au fond, nous n'entendions pas. VoilĆ  ce que c'est qu'un Ć©vĆŖque. Pendant qu'il parlait, l'Ć©vĆŖque Ć©tait allĆ© pousser la porte qui Ć©tait restĆ©e toute grande ouverte. Madame Magloire rentra. Elle apportait un couvert qu'elle mit sur la table. --Madame Magloire, dit l'Ć©vĆŖque, mettez ce couvert le plus prĆØs possible du feu. Et se tournant vers son hĆ“te: --Le vent de nuit est dur dans les Alpes. Vous devez avoir froid, monsieur? Chaque fois qu'il disait ce mot monsieur, avec sa voix doucement grave et de si bonne compagnie, le visage de l'homme s'illuminait. Monsieur Ć  un forƧat, c'est un verre d'eau Ć  un naufragĆ© de la MĆ©duse. L'ignominie a soif de considĆ©ration. --Voici, reprit l'Ć©vĆŖque, une lampe qui Ć©claire bien mal. Madame Magloire comprit, et elle alla chercher sur la cheminĆ©e de la chambre Ć  coucher de monseigneur les deux chandeliers d'argent qu'elle posa sur la table tout allumĆ©s. --Monsieur le curĆ©, dit l'homme, vous ĆŖtes bon. Vous ne me mĆ©prisez pas. Vous me recevez chez vous. Vous allumez vos cierges pour moi. Je ne vous ai pourtant pas cachĆ© d'où je viens et que je suis un homme malheureux. L'Ć©vĆŖque, assis prĆØs de lui, lui toucha doucement la main. --Vous pouviez ne pas me dire qui vous Ć©tiez. Ce n'est pas ici ma maison, c'est la maison de JĆ©sus-Christ. Cette porte ne demande pas Ć  celui qui entre s'il a un nom, mais s'il a une douleur. Vous souffrez; vous avez faim et soif; soyez le bienvenu. Et ne me remerciez pas, ne me dites pas que je vous reƧois chez moi. Personne n'est ici chez soi, exceptĆ© celui qui a besoin d'un asile. Je vous le dis Ć  vous qui passez, vous ĆŖtes ici chez vous plus que moi-mĆŖme. Tout ce qui est ici est Ć  vous. Qu'ai-je besoin de savoir votre nom? D'ailleurs, avant que vous me le disiez, vous en avez un que je savais. L'homme ouvrit des yeux Ć©tonnĆ©s. --Vrai? vous saviez comment je m'appelle? --Oui, rĆ©pondit l'Ć©vĆŖque, vous vous appelez mon frĆØre. --Tenez, monsieur le curĆ©! s'Ć©cria l'homme, j'avais bien faim en entrant ici; mais vous ĆŖtes si bon qu'Ć  prĆ©sent je ne sais plus ce que j'ai; cela m'a passĆ©. L'Ć©vĆŖque le regarda et lui dit: --Vous avez bien souffert? --Oh! la casaque rouge, le boulet au pied, une planche pour dormir, le chaud, le froid, le travail, la chiourme, les coups de bĆ¢ton! La double chaĆ®ne pour rien. Le cachot pour un mot. MĆŖme malade au lit, la chaĆ®ne. Les chiens, les chiens sont plus heureux! Dix-neuf ans! J'en ai quarante-six. ƀ prĆ©sent, le passeport jaune! VoilĆ . --Oui, reprit l'Ć©vĆŖque, vous sortez d'un lieu de tristesse. Ɖcoutez. Il y aura plus de joie au ciel pour le visage en larmes d'un pĆ©cheur repentant que pour la robe blanche de cent justes. Si vous sortez de ce lieu douloureux avec des pensĆ©es de haine et de colĆØre contre les hommes, vous ĆŖtes digne de pitiĆ©; si vous en sortez avec des pensĆ©es de bienveillance, de douceur et de paix, vous valez mieux qu'aucun de nous. Cependant madame Magloire avait servi le souper. Une soupe faite avec de l'eau, de l'huile, du pain et du sel, un peu de lard, un morceau de viande de mouton, des figues, un fromage frais, et un gros pain de seigle. Elle avait d'elle-mĆŖme ajoutĆ© Ć  l'ordinaire de M. l'Ć©vĆŖque une bouteille de vieux vin de Mauves. Le visage de l'Ć©vĆŖque prit tout Ć  coup cette expression de gaĆ®tĆ© propre aux natures hospitaliĆØres: --ƀ table! dit-il vivement. Comme il en avait coutume lorsque quelque Ć©tranger soupait avec lui, il fit asseoir l'homme Ć  sa droite. Mademoiselle Baptistine, parfaitement paisible et naturelle, prit place Ć  sa gauche. L'Ć©vĆŖque dit le bĆ©nĆ©dicitĆ©, puis servit lui-mĆŖme la soupe, selon son habitude. L'homme se mit Ć  manger avidement. Tout Ć  coup l'Ć©vĆŖque dit: --Mais il me semble qu'il manque quelque chose sur cette table. Madame Magloire en effet n'avait mis que les trois couverts absolument nĆ©cessaires. Or c'Ć©tait l'usage de la maison, quand l'Ć©vĆŖque avait quelqu'un Ć  souper, de disposer sur la nappe les six couverts d'argent, Ć©talage innocent. Ce gracieux semblant de luxe Ć©tait une sorte d'enfantillage plein de charme dans cette maison douce et sĆ©vĆØre qui Ć©levait la pauvretĆ© jusqu'Ć  la dignitĆ©. Madame Magloire comprit l'observation, sortit sans dire un mot, et un moment aprĆØs les trois couverts rĆ©clamĆ©s par l'Ć©vĆŖque brillaient sur la nappe, symĆ©triquement arrangĆ©s devant chacun des trois convives. Chapitre IV DĆ©tails sur les fromageries de Pontarlier Maintenant, pour donner une idĆ©e de ce qui se passa Ć  cette table, nous ne saurions mieux faire que de transcrire ici un passage d'une lettre de mademoiselle Baptistine Ć  madame de Boischevron, où la conversation du forƧat et de l'Ć©vĆŖque est racontĆ©e avec une minutie naĆÆve: * * * * * Ā«...Cet homme ne faisait aucune attention Ć  personne. Il mangeait avec une voracitĆ© d'affamĆ©. Cependant, aprĆØs la soupe, il a dit: Ā«--Monsieur le curĆ© du bon Dieu, tout ceci est encore bien trop bon pour moi, mais je dois dire que les rouliers qui n'ont pas voulu me laisser manger avec eux font meilleure chĆØre que vous. Ā«Entre nous, l'observation m'a un peu choquĆ©e. Mon frĆØre a rĆ©pondu: Ā«--Ils ont plus de fatigue que moi. Ā«--Non, a repris cet homme, ils ont plus d'argent. Vous ĆŖtes pauvre. Je vois bien. Vous n'ĆŖtes peut-ĆŖtre pas mĆŖme curĆ©. Êtes-vous curĆ© seulement? Ah! par exemple, si le bon Dieu Ć©tait juste, vous devriez bien ĆŖtre curĆ©. Ā«--Le bon Dieu est plus que juste, a dit mon frĆØre. Ā«Un moment aprĆØs il a ajoutĆ©: Ā«--Monsieur Jean Valjean, c'est Ć  Pontarlier que vous allez? Ā«--Avec itinĆ©raire obligĆ©. Ā«Je crois bien que c'est comme cela que l'homme a dit. Puis il a continuĆ©: Ā«--Il faut que je sois en route demain Ć  la pointe du jour. Il fait dur voyager. Si les nuits sont froides, les journĆ©es sont chaudes. Ā«--Vous allez lĆ , a repris mon frĆØre, dans un bon pays. ƀ la rĆ©volution, ma famille a Ć©tĆ© ruinĆ©e, je me suis rĆ©fugiĆ© en Franche-ComtĆ© d'abord, et j'y ai vĆ©cu quelque temps du travail de mes bras. J'avais de la bonne volontĆ©. J'ai trouvĆ© Ć  m'y occuper. On n'a qu'Ć  choisir. Il y a des papeteries, des tanneries, des distilleries, des huileries, des fabriques d'horlogerie en grand, des fabriques d'acier, des fabriques de cuivre, au moins vingt usines de fer, dont quatre Ć  Lods, Ć  ChĆ¢tillon, Ć  Audincourt et Ć  Beure qui sont trĆØs considĆ©rables.... Ā«Je crois ne pas me tromper et que ce sont bien lĆ  les noms que mon frĆØre a citĆ©s, puis il s'est interrompu et m'a adressĆ© la parole: Ā«--ChĆØre soeur, n'avons-nous pas des parents dans ce pays-lĆ ? Ā«J'ai rĆ©pondu: Ā«--Nous en avions, entre autres M. de Lucenet qui Ć©tait capitaine des portes Ć  Pontarlier dans l'ancien rĆ©gime. Ā«--Oui, a repris mon frĆØre, mais en 93 on n'avait plus de parents, on n'avait que ses bras. J'ai travaillĆ©. Ils ont dans le pays de Pontarlier, où vous allez, monsieur Valjean, une industrie toute patriarcale et toute charmante, ma soeur. Ce sont leurs fromageries qu'ils appellent fruitiĆØres. Ā«Alors mon frĆØre, tout en faisant manger cet homme, lui a expliquĆ© trĆØs en dĆ©tail ce que c'Ć©taient que les fruitiĆØres de Pontarlier;--qu'on en distinguait deux sortes:--les _grosses granges_, qui sont aux riches, et où il y a quarante ou cinquante vaches, lesquelles produisent sept Ć  huit milliers de fromages par Ć©tĆ©; les _fruitiĆØres d'association_, qui sont aux pauvres; ce sont les paysans de la moyenne montagne qui mettent leurs vaches en commun et partagent les produits.--Ils prennent Ć  leurs gages un fromager qu'ils appellent le grurin;--le grurin reƧoit le lait des associĆ©s trois fois par jour et marque les quantitĆ©s sur une taille double;--c'est vers la fin d'avril que le travail des fromageries commence; c'est vers la mi-juin que les fromagers conduisent leurs vaches dans la montagne. Ā«L'homme se ranimait tout en mangeant. Mon frĆØre lui faisait boire de ce bon vin de Mauves dont il ne boit pas lui-mĆŖme parce qu'il dit que c'est du vin cher. Mon frĆØre lui disait tous ces dĆ©tails avec cette gaĆ®tĆ© aisĆ©e que vous lui connaissez, entremĆŖlant ses paroles de faƧons gracieuses pour moi. Il est beaucoup revenu sur ce bon Ć©tat de grurin, comme s'il eĆ»t souhaitĆ© que cet homme comprĆ®t, sans le lui conseiller directement et durement, que ce serait un asile pour lui. Une chose m'a frappĆ©e. Cet homme Ć©tait ce que je vous ai dit. Eh bien! mon frĆØre, pendant tout le souper, ni de toute la soirĆ©e, Ć  l'exception de quelques paroles sur JĆ©sus quand il est entrĆ©, n'a pas dit un mot qui pĆ»t rappeler Ć  cet homme qui il Ć©tait ni apprendre Ć  cet homme qui Ć©tait mon frĆØre. C'Ć©tait bien une occasion en apparence de faire un peu de sermon et d'appuyer l'Ć©vĆŖque sur le galĆ©rien pour laisser la marque du passage. Il eĆ»t paru peut-ĆŖtre Ć  un autre que c'Ć©tait le cas, ayant ce malheureux sous la main, de lui nourrir l'Ć¢me en mĆŖme temps que le corps et de lui faire quelque reproche assaisonnĆ© de morale et de conseil, ou bien un peu de commisĆ©ration avec exhortation de se mieux conduire Ć  l'avenir. Mon frĆØre ne lui a mĆŖme pas demandĆ© de quel pays il Ć©tait, ni son histoire. Car dans son histoire il y a sa faute, et mon frĆØre semblait Ć©viter tout ce qui pouvait l'en faire souvenir. C'est au point qu'Ć  un certain moment, comme mon frĆØre parlait des montagnards de Pontarlier, qui ont _un doux travail prĆØs du ciel et qui_, ajoutait-il, _sont heureux parce qu'ils sont innocents_, il s'est arrĆŖtĆ© court, craignant qu'il n'y eĆ»t dans ce mot qui lui Ć©chappait quelque chose qui pĆ»t froisser l'homme. ƀ force d'y rĆ©flĆ©chir, je crois avoir compris ce qui se passait dans le coeur de mon frĆØre. Il pensait sans doute que cet homme, qui s'appelle Jean Valjean, n'avait que trop sa misĆØre prĆ©sente Ć  l'esprit, que le mieux Ć©tait de l'en distraire, et de lui faire croire, ne fĆ»t-ce qu'un moment, qu'il Ć©tait une personne comme une autre, en Ć©tant pour lui tout ordinaire. N'est-ce pas lĆ  en effet bien entendre la charitĆ©? N'y a-t-il pas, bonne madame, quelque chose de vraiment Ć©vangĆ©lique dans cette dĆ©licatesse qui s'abstient de sermon, de morale et d'allusion, et la meilleure pitiĆ©, quand un homme a un point douloureux, n'est-ce pas de n'y point toucher du tout? Il m'a semblĆ© que ce pouvait ĆŖtre lĆ  la pensĆ©e intĆ©rieure de mon frĆØre. Dans tous les cas, ce que je puis dire, c'est que, s'il a eu toutes ces idĆ©es, il n'en a rien marquĆ©, mĆŖme pour moi; il a Ć©tĆ© d'un bout Ć  l'autre le mĆŖme homme que tous les soirs, et il a soupĆ© avec ce Jean Valjean du mĆŖme air et de la mĆŖme faƧon qu'il aurait soupĆ© avec M. GĆ©dĆ©on Le PrĆ©vost ou avec M. le curĆ© de la paroisse. Ā«Vers la fin, comme nous Ć©tions aux figues, on a cognĆ© Ć  la porte. C'Ć©tait la mĆØre Gerbaud avec son petit dans ses bras. Mon frĆØre a baisĆ© l'enfant au front, et m'a empruntĆ© quinze sous que j'avais sur moi pour les donner Ć  la mĆØre Gerbaud. L'homme pendant ce temps-lĆ  ne faisait pas grande attention. Il ne parlait plus et paraissait trĆØs fatiguĆ©. La pauvre vieille Gerbaud partie, mon frĆØre a dit les grĆ¢ces, puis il s'est tournĆ© vers cet homme, et il lui a dit: Vous devez avoir bien besoin de votre lit. Madame Magloire a enlevĆ© le couvert bien vite. J'ai compris qu'il fallait nous retirer pour laisser dormir ce voyageur, et nous sommes montĆ©es toutes les deux. J'ai cependant envoyĆ© madame Magloire un instant aprĆØs porter sur le lit de cet homme une peau de chevreuil de la ForĆŖt-Noire qui est dans ma chambre. Les nuits sont glaciales, et cela tient chaud. C'est dommage que cette peau soit vieille; tout le poil s'en va. Mon frĆØre l'a achetĆ©e du temps qu'il Ć©tait en Allemagne, Ć  Tottlingen, prĆØs des sources du Danube, ainsi que le petit couteau Ć  manche d'ivoire dont je me sers Ć  table. Ā«Madame Magloire est remontĆ©e presque tout de suite, nous nous sommes mises Ć  prier Dieu dans le salon où l'on Ć©tend le linge, et puis nous sommes rentrĆ©es chacune dans notre chambre sans nous rien dire.Ā» Chapitre V TranquillitĆ© AprĆØs avoir donnĆ© le bonsoir Ć  sa soeur, monseigneur Bienvenu prit sur la table un des deux flambeaux d'argent, remit l'autre Ć  son hĆ“te, et lui dit: --Monsieur, je vais vous conduire Ć  votre chambre. L'homme le suivit. Comme on a pu le remarquer dans ce qui a Ć©tĆ© dit plus haut, le logis Ć©tait distribuĆ© de telle sorte que, pour passer dans l'oratoire où Ć©tait l'alcĆ“ve ou pour en sortir, il fallait traverser la chambre Ć  coucher de l'Ć©vĆŖque. Au moment où ils traversaient cette chambre, madame Magloire serrait l'argenterie dans le placard qui Ć©tait au chevet du lit. C'Ć©tait le dernier soin qu'elle prenait chaque soir avant de s'aller coucher. L'Ć©vĆŖque installa son hĆ“te dans l'alcĆ“ve. Un lit blanc et frais y Ć©tait dressĆ©. L'homme posa le flambeau sur une petite table. --Allons, dit l'Ć©vĆŖque, faites une bonne nuit. Demain matin, avant de partir, vous boirez une tasse de lait de nos vaches tout chaud. --Merci, monsieur l'abbĆ©, dit l'homme. ƀ peine eut-il prononcĆ© ces paroles pleines de paix que, tout Ć  coup et sans transition, il eut un mouvement Ć©trange et qui eĆ»t glacĆ© d'Ć©pouvante les deux saintes filles si elles en eussent Ć©tĆ© tĆ©moins. Aujourd'hui mĆŖme il nous est difficile de nous rendre compte de ce qui le poussait en ce moment. Voulait-il donner un avertissement ou jeter une menace? ObĆ©issait-il simplement Ć  une sorte d'impulsion instinctive et obscure pour lui-mĆŖme? Il se tourna brusquement vers le vieillard, croisa les bras, et, fixant sur son hĆ“te un regard sauvage, il s'Ć©cria d'une voix rauque: --Ah ƧƠ! dĆ©cidĆ©ment! vous me logez chez vous prĆØs de vous comme cela! Il s'interrompit et ajouta avec un rire où il y avait quelque chose de monstrueux: --Avez-vous bien fait toutes vos rĆ©flexions? Qui est-ce qui vous dit que je n'ai pas assassinĆ©? L'Ć©vĆŖque leva les yeux vers le plafond et rĆ©pondit: --Cela regarde le bon Dieu. Puis, gravement et remuant les lĆØvres comme quelqu'un qui prie ou qui se parle Ć  lui-mĆŖme, il dressa les deux doigts de sa main droite et bĆ©nit l'homme qui ne se courba pas, et, sans tourner la tĆŖte et sans regarder derriĆØre lui, il rentra dans sa chambre. Quand l'alcĆ“ve Ć©tait habitĆ©e, un grand rideau de serge tirĆ© de part en part dans l'oratoire cachait l'autel. L'Ć©vĆŖque s'agenouilla en passant devant ce rideau et fit une courte priĆØre. Un moment aprĆØs, il Ć©tait dans son jardin, marchant, rĆŖvant, contemplant, l'Ć¢me et la pensĆ©e tout entiĆØres Ć  ces grandes choses mystĆ©rieuses que Dieu montre la nuit aux yeux qui restent ouverts. Quant Ć  l'homme, il Ć©tait vraiment si fatiguĆ© qu'il n'avait mĆŖme pas profitĆ© de ces bons draps blancs. Il avait soufflĆ© sa bougie avec sa narine Ć  la maniĆØre des forƧats et s'Ć©tait laissĆ© tomber tout habillĆ© sur le lit, où il s'Ć©tait tout de suite profondĆ©ment endormi. Minuit sonnait comme l'Ć©vĆŖque rentrait de son jardin dans son appartement. Quelques minutes aprĆØs, tout dormait dans la petite maison. Chapitre VI Jean Valjean Vers le milieu de la nuit, Jean Valjean se rĆ©veilla. Jean Valjean Ć©tait d'une pauvre famille de paysans de la Brie. Dans son enfance, il n'avait pas appris Ć  lire. Quand il eut l'Ć¢ge d'homme, il Ć©tait Ć©mondeur Ć  Faverolles. Sa mĆØre s'appelait Jeanne Mathieu; son pĆØre s'appelait Jean Valjean, ou Vlajean, sobriquet probablement, et contraction de _VoilĆ  Jean_. Jean Valjean Ć©tait d'un caractĆØre pensif sans ĆŖtre triste, ce qui est le propre des natures affectueuses. Somme toute, pourtant, c'Ć©tait quelque chose d'assez endormi et d'assez insignifiant, en apparence du moins, que Jean Valjean. Il avait perdu en trĆØs bas Ć¢ge son pĆØre et sa mĆØre. Sa mĆØre Ć©tait morte d'une fiĆØvre de lait mal soignĆ©e. Son pĆØre, Ć©mondeur comme lui, s'Ć©tait tuĆ© en tombant d'un arbre. Il n'Ć©tait restĆ© Ć  Jean Valjean qu'une soeur plus Ć¢gĆ©e que lui, veuve, avec sept enfants, filles et garƧons. Cette soeur avait Ć©levĆ© Jean Valjean, et tant qu'elle eut son mari elle logea et nourrit son jeune frĆØre. Le mari mourut. L'aĆ®nĆ© des sept enfants avait huit ans, le dernier un an. Jean Valjean venait d'atteindre, lui, sa vingt-cinquiĆØme annĆ©e. Il remplaƧa le pĆØre, et soutint Ć  son tour sa soeur qui l'avait Ć©levĆ©. Cela se fit simplement, comme un devoir, mĆŖme avec quelque chose de bourru de la part de Jean Valjean. Sa jeunesse se dĆ©pensait ainsi dans un travail rude et mal payĆ©. On ne lui avait jamais connu de Ā«bonne amieĀ» dans le pays. Il n'avait pas eu le temps d'ĆŖtre amoureux. Le soir il rentrait fatiguĆ© et mangeait sa soupe sans dire un mot. Sa soeur, mĆØre Jeanne, pendant qu'il mangeait, lui prenait souvent dans son Ć©cuelle le meilleur de son repas, le morceau de viande, la tranche de lard le coeur de chou, pour le donner Ć  quelqu'un de ses enfants; lui, mangeant toujours, penchĆ© sur la table, presque la tĆŖte dans sa soupe, ses longs cheveux tombant autour de son Ć©cuelle et cachant ses yeux, avait l'air de ne rien voir et laissait faire. Il y avait Ć  Faverolles, pas loin de la chaumiĆØre Valjean, de l'autre cĆ“tĆ© de la ruelle, une fermiĆØre appelĆ©e Marie-Claude; les enfants Valjean, habituellement affamĆ©s, allaient quelquefois emprunter au nom de leur mĆØre une pinte de lait Ć  Marie-Claude, qu'ils buvaient derriĆØre une haie ou dans quelque coin d'allĆ©e, s'arrachant le pot, et si hĆ¢tivement que les petites filles s'en rĆ©pandaient sur leur tablier et dans leur goulotte. La mĆØre, si elle eĆ»t su cette maraude, eĆ»t sĆ©vĆØrement corrigĆ© les dĆ©linquants. Jean Valjean, brusque et bougon, payait en arriĆØre de la mĆØre la pinte de lait Ć  Marie-Claude, et les enfants n'Ć©taient pas punis. Il gagnait dans la saison de l'Ć©mondage vingt-quatre sous par jour, puis il se louait comme moissonneur, comme manoeuvre, comme garƧon de ferme bouvier, comme homme de peine. Il faisait ce qu'il pouvait. Sa soeur travaillait de son cĆ“tĆ©, mais que faire avec sept petits enfants? C'Ć©tait un triste groupe que la misĆØre enveloppa et Ć©treignit peu Ć  peu. Il arriva qu'un hiver fut rude. Jean n'eut pas d'ouvrage. La famille n'eut pas de pain. Pas de pain. ƀ la lettre. Sept enfants! Un dimanche soir, Maubert Isabeau, boulanger sur la place de l'Ɖglise, Ć  Faverolles, se disposait Ć  se coucher, lorsqu'il entendit un coup violent dans la devanture grillĆ©e et vitrĆ©e de sa boutique. Il arriva Ć  temps pour voir un bras passĆ© Ć  travers un trou fait d'un coup de poing dans la grille et dans la vitre. Le bras saisit un pain et l'emporta. Isabeau sortit en hĆ¢te; le voleur s'enfuyait Ć  toutes jambes; Isabeau courut aprĆØs lui et l'arrĆŖta. Le voleur avait jetĆ© le pain, mais il avait encore le bras ensanglantĆ©. C'Ć©tait Jean Valjean. Ceci se passait en 1795. Jean Valjean fut traduit devant les tribunaux du temps Ā«pour vol avec effraction la nuit dans une maison habitĆ©eĀ». Il avait un fusil dont il se servait mieux que tireur au monde, il Ć©tait quelque peu braconnier; ce qui lui nuisit. Il y a contre les braconniers un prĆ©jugĆ© lĆ©gitime. Le braconnier, de mĆŖme que le contrebandier, cĆ“toie de fort prĆØs le brigand. Pourtant, disons-le en passant, il y a encore un abĆ®me entre ces races d'hommes et le hideux assassin des villes. Le braconnier vit dans la forĆŖt; le contrebandier vit dans la montagne ou sur la mer. Les villes font des hommes fĆ©roces parce qu'elles font des hommes corrompus. La montagne, la mer, la forĆŖt, font des hommes sauvages. Elles dĆ©veloppent le cĆ“tĆ© farouche, mais souvent sans dĆ©truire le cĆ“tĆ© humain. Jean Valjean fut dĆ©clarĆ© coupable. Les termes du code Ć©taient formels. Il y a dans notre civilisation des heures redoutables; ce sont les moments où la pĆ©nalitĆ© prononce un naufrage. Quelle minute funĆØbre que celle où la sociĆ©tĆ© s'Ć©loigne et consomme l'irrĆ©parable abandon d'un ĆŖtre pensant! Jean Valjean fut condamnĆ© Ć  cinq ans de galĆØres. Le 22 avril 1796, on cria dans Paris la victoire de Montenotte remportĆ©e par le gĆ©nĆ©ral en chef de l'annĆ©e d'Italie, que le message du Directoire aux Cinq-Cents, du 2 florĆ©al an IV, appelle Buona-Parte; ce mĆŖme jour une grande chaĆ®ne fut ferrĆ©e Ć  BicĆŖtre. Jean Valjean fit partie de cette chaĆ®ne. Un ancien guichetier de la prison, qui a prĆØs de quatre-vingt-dix ans aujourd'hui, se souvient encore parfaitement de ce malheureux qui fut ferrĆ© Ć  l'extrĆ©mitĆ© du quatriĆØme cordon dans l'angle nord de la cour. Il Ć©tait assis Ć  terre comme tous les autres. Il paraissait ne rien comprendre Ć  sa position, sinon qu'elle Ć©tait horrible. Il est probable qu'il y dĆ©mĆŖlait aussi, Ć  travers les vagues idĆ©es d'un pauvre homme ignorant de tout, quelque chose d'excessif. Pendant qu'on rivait Ć  grands coups de marteau derriĆØre sa tĆŖte le boulon de son carcan, il pleurait, les larmes l'Ć©touffaient, elles l'empĆŖchaient de parler, il parvenait seulement Ć  dire de temps en temps: _J'Ć©tais Ć©mondeur Ć  Faverolles_. Puis, tout en sanglotant, il Ć©levait sa main droite et l'abaissait graduellement sept fois comme s'il touchait successivement sept tĆŖtes inĆ©gales, et par ce geste on devinait que la chose quelconque qu'il avait faite, il l'avait faite pour vĆŖtir et nourrir sept petits enfants. Il partit pour Toulon. Il y arriva aprĆØs un voyage de vingt-sept jours, sur une charrette, la chaĆ®ne au cou. ƀ Toulon, il fut revĆŖtu de la casaque rouge. Tout s'effaƧa de ce qui avait Ć©tĆ© sa vie, jusqu'Ć  son nom; il ne fut mĆŖme plus Jean Valjean; il fut le numĆ©ro 24601. Que devint la soeur? que devinrent les sept enfants? Qui est-ce qui s'occupe de cela? Que devient la poignĆ©e de feuilles du jeune arbre sciĆ© par le pied? C'est toujours la mĆŖme histoire. Ces pauvres ĆŖtres vivants, ces crĆ©atures de Dieu, sans appui dĆ©sormais, sans guide, sans asile, s'en allĆØrent au hasard, qui sait mĆŖme? chacun de leur cĆ“tĆ© peut-ĆŖtre, et s'enfoncĆØrent peu Ć  peu dans cette froide brume où s'engloutissent les destinĆ©es solitaires, moines tĆ©nĆØbres où disparaissent successivement tant de tĆŖtes infortunĆ©es dans la sombre marche du genre humain. Ils quittĆØrent le pays. Le clocher de ce qui avait Ć©tĆ© leur village les oublia; la borne de ce qui avait Ć©tĆ© leur champ les oublia; aprĆØs quelques annĆ©es de sĆ©jour au bagne, Jean Valjean lui-mĆŖme les oublia. Dans ce coeur où il y avait eu une plaie, il y eut une cicatrice. VoilĆ  tout. ƀ peine, pendant tout le temps qu'il passa Ć  Toulon, entendit-il parler une seule fois de sa soeur. C'Ć©tait, je crois, vers la fin de la quatriĆØme annĆ©e de sa captivitĆ©. Je ne sais plus par quelle voie ce renseignement lui parvint. Quelqu'un, qui les avait connus au pays, avait vu sa soeur. Elle Ć©tait Ć  Paris. Elle habitait une pauvre rue prĆØs de Saint-Sulpice, la rue du Geindre. Elle n'avait plus avec elle qu'un enfant, un petit garƧon, le dernier. Où Ć©taient les six autres? Elle ne le savait peut-ĆŖtre pas elle-mĆŖme. Tous les matins elle allait Ć  une imprimerie rue du Sabot, n° 3, où elle Ć©tait plieuse et brocheuse. Il fallait ĆŖtre lĆ  Ć  six heures du matin, bien avant le jour l'hiver. Dans la maison de l'imprimerie il y avait une Ć©cole, elle menait Ć  cette Ć©cole son petit garƧon qui avait sept ans. Seulement, comme elle entrait Ć  l'imprimerie Ć  six heures et que l'Ć©cole n'ouvrait qu'Ć  sept, il fallait que l'enfant attendĆ®t, dans la cour, que l'Ć©cole ouvrit, une heure; l'hiver, une heure de nuit, en plein air. On ne voulait pas que l'enfant entrĆ¢t dans l'imprimerie, parce qu'il gĆŖnait, disait-on. Les ouvriers voyaient le matin en passant ce pauvre petit ĆŖtre assis sur le pavĆ©, tombant de sommeil, et souvent endormi dans l'ombre, accroupi et pliĆ© sur son panier. Quand il pleuvait, une vieille femme, la portiĆØre, en avait pitiĆ©; elle le recueillait dans son bouge où il n'y avait qu'un grabat, un rouet et deux chaises de bois, et le petit dormait lĆ  dans un coin, se serrant contre le chat pour avoir moins froid. ƀ sept heures, l'Ć©cole ouvrait et il y entrait. VoilĆ  ce qu'on dit Ć  Jean Valjean. On l'en entretint un jour, ce fut un moment, un Ć©clair, comme une fenĆŖtre brusquement ouverte sur la destinĆ©e de ces ĆŖtres qu'il avait aimĆ©s, puis tout se referma; il n'en entendit plus parler, et ce fut pour jamais. Plus rien n'arriva d'eux Ć  lui; jamais il ne les revit, jamais il ne les rencontra, et, dans la suite de cette douloureuse histoire, on ne les retrouvera plus. Vers la fin de cette quatriĆØme annĆ©e, le tour d'Ć©vasion de Jean Valjean arriva. Ses camarades l'aidĆØrent comme cela se fait dans ce triste lieu. Il s'Ć©vada. Il erra deux jours en libertĆ© dans les champs; si c'est ĆŖtre libre que d'ĆŖtre traquĆ©; de tourner la tĆŖte Ć  chaque instant; de tressaillir au moindre bruit; d'avoir peur de tout, du toit qui fume, de l'homme qui passe, du chien qui aboie, du cheval qui galope, de l'heure qui sonne, du jour parce qu'on voit, de la nuit parce qu'on ne voit pas, de la route, du sentier, du buisson, du sommeil. Le soir du second jour, il fut repris. Il n'avait ni mangĆ© ni dormi depuis trente-six heures. Le tribunal maritime le condamna pour ce dĆ©lit Ć  une prolongation de trois ans, ce qui lui fit huit ans. La sixiĆØme annĆ©e, ce fut encore son tour de s'Ć©vader; il en usa, mais il ne put consommer sa fuite. Il avait manquĆ© Ć  l'appel. On tira le coup de canon, et Ć  la nuit les gens de ronde le trouvĆØrent cachĆ© sous la quille d'un vaisseau en construction; il rĆ©sista aux gardes-chiourme qui le saisirent. Ɖvasion et rĆ©bellion. Ce fait prĆ©vu par le code spĆ©cial fut puni d'une aggravation de cinq ans, dont deux ans de double chaĆ®ne. Treize ans. La dixiĆØme annĆ©e, son tour revint, il en profita encore. Il ne rĆ©ussit pas mieux. Trois ans pour cette nouvelle tentative. Seize ans. Enfin, ce fut, je crois, pendant la treiziĆØme annĆ©e qu'il essaya une derniĆØre fois et ne rĆ©ussit qu'Ć  se faire reprendre aprĆØs quatre heures d'absence. Trois ans pour ces quatre heures. Dix-neuf ans. En octobre 1815 il fut libĆ©rĆ©; il Ć©tait entrĆ© lĆ  en 1796 pour avoir cassĆ© un carreau et pris un pain. Place pour une courte parenthĆØse. C'est la seconde fois que, dans ses Ć©tudes sur la question pĆ©nale et sur la damnation par la loi, l'auteur de ce livre rencontre le vol d'un pain, comme point de dĆ©part du dĆ©sastre d'une destinĆ©e. Claude Gueux avait volĆ© un pain; Jean Valjean avait volĆ© un pain. Une statistique anglaise constate qu'Ć  Londres quatre vols sur cinq ont pour cause immĆ©diate la faim. Jean Valjean Ć©tait entrĆ© au bagne sanglotant et frĆ©missant; il en sortit impassible. Il y Ć©tait entrĆ© dĆ©sespĆ©rĆ©; il en sortit sombre. Que s'Ć©tait-il passĆ© dans cette Ć¢me? Chapitre VII Le dedans du dĆ©sespoir Essayons de le dire. Il faut bien que la sociĆ©tĆ© regarde ces choses puisque c'est elle qui les fait. C'Ć©tait, nous l'avons dit, un ignorant; mais ce n'Ć©tait pas un imbĆ©cile. La lumiĆØre naturelle Ć©tait allumĆ©e en lui. Le malheur, qui a aussi sa clartĆ©, augmenta le peu de jour qu'il y avait dans cet esprit. Sous le bĆ¢ton, sous la chaĆ®ne, au cachot, Ć  la fatigue, sous l'ardent soleil du bagne, sur le lit de planches des forƧats, il se replia en sa conscience et rĆ©flĆ©chit. Il se constitua tribunal. Il commenƧa par se juger lui-mĆŖme. Il reconnut qu'il n'Ć©tait pas un innocent injustement puni. Il s'avoua qu'il avait commis une action extrĆŖme et blĆ¢mable; qu'on ne lui eĆ»t peut-ĆŖtre pas refusĆ© ce pain s'il l'avait demandĆ©; que dans tous les cas il eĆ»t mieux valu l'attendre, soit de la pitiĆ©, soit du travail; que ce n'est pas tout Ć  fait une raison sans rĆ©plique de dire: peut-on attendre quand on a faim? que d'abord il est trĆØs rare qu'on meure littĆ©ralement de faim; ensuite que, malheureusement ou heureusement, l'homme est ainsi fait qu'il peut souffrir longtemps et beaucoup, moralement et physiquement, sans mourir; qu'il fallait donc de la patience; que cela eĆ»t mieux valu mĆŖme pour ces pauvres petits enfants; que c'Ć©tait un acte de folie, Ć  lui, malheureux homme chĆ©tif, de prendre violemment au collet la sociĆ©tĆ© tout entiĆØre et de se figurer qu'on sort de la misĆØre par le vol; que c'Ć©tait, dans tous les cas, une mauvaise porte pour sortir de la misĆØre que celle par où l'on entre dans l'infamie; enfin qu'il avait eu tort. Puis il se demanda: S'il Ć©tait le seul qui avait eu tort dans sa fatale histoire? Si d'abord ce n'Ć©tait pas une chose grave qu'il eĆ»t, lui travailleur, manquĆ© de travail, lui laborieux, manquĆ© de pain. Si, ensuite, la faute commise et avouĆ©e, le chĆ¢timent n'avait pas Ć©tĆ© fĆ©roce et outrĆ©. S'il n'y avait pas plus d'abus de la part de la loi dans la peine qu'il n'y avait eu d'abus de la part du coupable dans la faute. S'il n'y avait pas excĆØs de poids dans un des plateaux de la balance, celui où est l'expiation. Si la surcharge de la peine n'Ć©tait point l'effacement du dĆ©lit, et n'arrivait pas Ć  ce rĆ©sultat: de retourner la situation, de remplacer la faute du dĆ©linquant par la faute de la rĆ©pression, de faire du coupable la victime et du dĆ©biteur le crĆ©ancier, et de mettre dĆ©finitivement le droit du cĆ“tĆ© de celui-lĆ  mĆŖme qui l'avait violĆ©. Si cette peine, compliquĆ©e des aggravations successives pour les tentatives d'Ć©vasion, ne finissait pas par ĆŖtre une sorte d'attentat du plus fort sur le plus faible, un crime de la sociĆ©tĆ© sur l'individu, un crime qui recommenƧait tous les jours, un crime qui durait dix-neuf ans. Il se demanda si la sociĆ©tĆ© humaine pouvait avoir le droit de faire Ć©galement subir Ć  ses membres, dans un cas son imprĆ©voyance dĆ©raisonnable, et dans l'autre cas sa prĆ©voyance impitoyable, et de saisir Ć  jamais un pauvre homme entre un dĆ©faut et un excĆØs, dĆ©faut de travail, excĆØs de chĆ¢timent. S'il n'Ć©tait pas exorbitant que la sociĆ©tĆ© traitĆ¢t ainsi prĆ©cisĆ©ment ses membres les plus mal dotĆ©s dans la rĆ©partition de biens que fait le hasard, et par consĆ©quent les plus dignes de mĆ©nagements. Ces questions faites et rĆ©solues, il jugea la sociĆ©tĆ© et la condamna. Il la condamna sans haine. Il la fit responsable du sort qu'il subissait, et se dit qu'il n'hĆ©siterait peut-ĆŖtre pas Ć  lui en demander compte un jour. Il se dĆ©clara Ć  lui-mĆŖme qu'il n'y avait pas Ć©quilibre entre le dommage qu'il avait causĆ© et le dommage qu'on lui causait; il conclut enfin que son chĆ¢timent n'Ć©tait pas, Ć  la vĆ©ritĆ©, une injustice, mais qu'Ć  coup sĆ»r c'Ć©tait une iniquitĆ©. La colĆØre peut ĆŖtre folle et absurde; on peut ĆŖtre irritĆ© Ć  tort; on n'est indignĆ© que lorsqu'on a raison au fond par quelque cĆ“tĆ©. Jean Valjean se sentait indignĆ©. Et puis, la sociĆ©tĆ© humaine ne lui avait fait que du mal. Jamais il n'avait vu d'elle que ce visage courroucĆ© qu'elle appelle sa justice et qu'elle montre Ć  ceux qu'elle frappe. Les hommes ne l'avaient touchĆ© que pour le meurtrir. Tout contact avec eux lui avait Ć©tĆ© un coup. Jamais, depuis son enfance, depuis sa mĆØre, depuis sa soeur, jamais il n'avait rencontrĆ© une parole amie et un regard bienveillant. De souffrance en souffrance il arriva peu Ć  peu Ć  cette conviction que la vie Ć©tait une guerre; et que dans cette guerre il Ć©tait le vaincu. Il n'avait d'autre arme que sa haine. Il rĆ©solut de l'aiguiser au bagne et de l'emporter en s'en allant. Il y avait Ć  Toulon une Ć©cole pour la chiourme tenue par des frĆØres ignorantins où l'on enseignait le plus nĆ©cessaire Ć  ceux de ces malheureux qui avaient de la bonne volontĆ©. Il fut du nombre des hommes de bonne volontĆ©. Il alla Ć  l'Ć©cole Ć  quarante ans, et apprit Ć  lire, Ć  Ć©crire, Ć  compter. Il sentit que fortifier son intelligence, c'Ć©tait fortifier sa haine. Dans certains cas, l'instruction et la lumiĆØre peuvent servir de rallonge au mal. Cela est triste Ć  dire, aprĆØs avoir jugĆ© la sociĆ©tĆ© qui avait fait son malheur, il jugea la providence qui avait fait la sociĆ©tĆ©. Il la condamna aussi. Ainsi, pendant ces dix-neuf ans de torture et d'esclavage, cette Ć¢me monta et tomba en mĆŖme temps. Il y entra de la lumiĆØre d'un cĆ“tĆ© et des tĆ©nĆØbres de l'autre. Jean Valjean n'Ć©tait pas, on l'a vu, d'une nature mauvaise. Il Ć©tait encore bon lorsqu'il arriva au bagne. Il y condamna la sociĆ©tĆ© et sentit qu'il devenait mĆ©chant, il y condamna la providence et sentit qu'il devenait impie. Ici il est difficile de ne pas mĆ©diter un instant. La nature humaine se transforme-t-elle ainsi de fond en comble et tout Ć  fait? L'homme crƩƩ bon par Dieu peut-il ĆŖtre fait mĆ©chant par l'homme? L'Ć¢me peut-elle ĆŖtre refaite tout d'une piĆØce par la destinĆ©e, et devenir mauvaise, la destinĆ©e Ć©tant mauvaise? Le coeur peut-il devenir difforme et contracter des laideurs et des infirmitĆ©s incurables sous la pression d'un malheur disproportionnĆ©, comme la colonne vertĆ©brale sous une voĆ»te trop basse? N'y a-t-il pas dans toute Ć¢me humaine, n'y avait-il pas dans l'Ć¢me de Jean Valjean en particulier, une premiĆØre Ć©tincelle, un Ć©lĆ©ment divin, incorruptible dans ce monde, immortel dans l'autre, que le bien peut dĆ©velopper, attiser, allumer, enflammer et faire rayonner splendidement, et que le mal ne peut jamais entiĆØrement Ć©teindre? Questions graves et obscures, Ć  la derniĆØre desquelles tout physiologiste eĆ»t probablement rĆ©pondu non, et sans hĆ©siter, s'il eĆ»t vu Ć  Toulon, aux heures de repos qui Ć©taient pour Jean Valjean des heures de rĆŖverie, assis, les bras croisĆ©s, sur la barre de quelque cabestan, le bout de sa chaĆ®ne enfoncĆ© dans sa poche pour l'empĆŖcher de traĆ®ner, ce galĆ©rien morne, sĆ©rieux, silencieux et pensif, paria des lois qui regardait l'homme avec colĆØre, damnĆ© de la civilisation qui regardait le ciel avec sĆ©vĆ©ritĆ©. Certes, et nous ne voulons pas le dissimuler, le physiologiste observateur eĆ»t vu lĆ  une misĆØre irrĆ©mĆ©diable, il eĆ»t plaint peut-ĆŖtre ce malade du fait de la loi, mais il n'eĆ»t pas mĆŖme essayĆ© de traitement; il eĆ»t dĆ©tournĆ© le regard des cavernes qu'il aurait entrevues dans cette Ć¢me; et, comme Dante de la porte de l'enfer, il eĆ»t effacĆ© de cette existence le mot que le doigt de Dieu Ć©crit pourtant sur le front de tout homme: _EspĆ©rance_! Cet Ć©tat de son Ć¢me que nous avons tentĆ© d'analyser Ć©tait-il aussi parfaitement clair pour Jean Valjean que nous avons essayĆ© de le rendre pour ceux qui nous lisent? Jean Valjean voyait-il distinctement, aprĆØs leur formation, et avait-il vu distinctement, Ć  mesure qu'ils se formaient, tous les Ć©lĆ©ments dont se composait sa misĆØre morale? Cet homme rude et illettrĆ© s'Ć©tait-il bien nettement rendu compte de la succession d'idĆ©es par laquelle il Ć©tait, degrĆ© Ć  degrĆ©, montĆ© et descendu jusqu'aux lugubres aspects qui Ć©taient depuis tant d'annĆ©es dĆ©jĆ  l'horizon intĆ©rieur de son esprit? Avait-il bien conscience de tout ce qui s'Ć©tait passĆ© en lui et de tout ce qui s'y remuait? C'est ce que nous n'oserions dire; c'est mĆŖme ce que nous ne croyons pas. Il y avait trop d'ignorance dans Jean Valjean pour que, mĆŖme aprĆØs tant de malheur, il n'y restĆ¢t pas beaucoup de vague. Par moments il ne savait pas mĆŖme bien au juste ce qu'il Ć©prouvait. Jean Valjean Ć©tait dans les tĆ©nĆØbres; il souffrait dans les tĆ©nĆØbres; il haĆÆssait dans les tĆ©nĆØbres; on eĆ»t pu dire qu'il haĆÆssait devant lui. Il vivait habituellement dans cette ombre, tĆ¢tonnant comme un aveugle et comme un rĆŖveur. Seulement, par intervalles, il lui venait tout Ć  coup, de lui-mĆŖme ou du dehors, une secousse de colĆØre, un surcroĆ®t de souffrance, un pĆ¢le et rapide Ć©clair qui illuminait toute son Ć¢me, et faisait brusquement apparaĆ®tre partout autour de lui, en avant et en arriĆØre, aux lueurs d'une lumiĆØre affreuse, les hideux prĆ©cipices et les sombres perspectives de sa destinĆ©e. L'Ć©clair passĆ©, la nuit retombait, et où Ć©tait-il? il ne le savait plus. Le propre des peines de cette nature, dans lesquelles domine ce qui est impitoyable, c'est-Ć -dire ce qui est abrutissant, c'est de transformer peu Ć  peu, par une sorte de transfiguration stupide, un homme en une bĆŖte fauve. Quelquefois en une bĆŖte fĆ©roce. Les tentatives d'Ć©vasion de Jean Valjean, successives et obstinĆ©es, suffiraient Ć  prouver cet Ć©trange travail fait par la loi sur l'Ć¢me humaine. Jean Valjean eĆ»t renouvelĆ© ces tentatives, si parfaitement inutiles et folles, autant de fois que l'occasion s'en fĆ»t prĆ©sentĆ©e, sans songer un instant au rĆ©sultat, ni aux expĆ©riences dĆ©jĆ  faites. Il s'Ć©chappait impĆ©tueusement comme le loup qui trouve la cage ouverte. L'instinct lui disait: sauve-toi! Le raisonnement lui eĆ»t dit: reste! Mais, devant une tentation si violente, le raisonnement avait disparu; il n'y avait plus que l'instinct. La bĆŖte seule agissait. Quand il Ć©tait repris, les nouvelles sĆ©vĆ©ritĆ©s qu'on lui infligeait ne servaient qu'Ć  l'effarer davantage. Un dĆ©tail que nous ne devons pas omettre, c'est qu'il Ć©tait d'une force physique dont n'approchait pas un des habitants du bagne. ƀ la fatigue, pour filer un cĆ¢ble, pour virer un cabestan, Jean Valjean valait quatre hommes. Il soulevait et soutenait parfois d'Ć©normes poids sur son dos, et remplaƧait dans l'occasion cet instrument qu'on appelle cric et qu'on appelait jadis orgueil, d'où a pris nom, soit dit en passant, la rue Montorgueil prĆØs des halles de Paris. Ses camarades l'avaient surnommĆ© Jean-le-Cric. Une fois, comme on rĆ©parait le balcon de l'hĆ“tel de ville de Toulon, une des admirables cariatides de Puget qui soutiennent ce balcon se descella et faillit tomber. Jean Valjean, qui se trouvait lĆ , soutint de l'Ć©paule la cariatide et donna le temps aux ouvriers d'arriver. Sa souplesse dĆ©passait encore sa vigueur. Certains forƧats, rĆŖveurs perpĆ©tuels d'Ć©vasions, finissent par faire de la force et de l'adresse combinĆ©es une vĆ©ritable science. C'est la science des muscles. Toute une statique mystĆ©rieuse est quotidiennement pratiquĆ©e par les prisonniers, ces Ć©ternels envieux des mouches et des oiseaux. Gravir une verticale, et trouver des points d'appui lĆ  où l'on voit Ć  peine une saillie, Ć©tait un jeu pour Jean Valjean. Ɖtant donnĆ© un angle de mur, avec la tension de son dos et de ses jarrets, avec ses coudes et ses talons emboĆ®tĆ©s dans les aspĆ©ritĆ©s de la pierre, il se hissait comme magiquement Ć  un troisiĆØme Ć©tage. Quelquefois il montait ainsi jusqu'au toit du bagne. Il parlait peu. Il ne riait pas. Il fallait quelque Ć©motion extrĆŖme pour lui arracher, une ou deux fois l'an, ce lugubre rire du forƧat qui est comme un Ć©cho du rire du dĆ©mon. ƀ le voir, il semblait occupĆ© Ć  regarder continuellement quelque chose de terrible. Il Ć©tait absorbĆ© en effet. ƀ travers les perceptions maladives d'une nature incomplĆØte et d'une intelligence accablĆ©e, il sentait confusĆ©ment qu'une chose monstrueuse Ć©tait sur lui. Dans cette pĆ©nombre obscure et blafarde où il rampait, chaque fois qu'il tournait le cou et qu'il essayait d'Ć©lever son regard, il voyait, avec une terreur mĆŖlĆ©e de rage, s'Ć©chafauder, s'Ć©tager et monter Ć  perte de vue au-dessus de lui, avec des escarpements horribles, une sorte d'entassement effrayant de choses, de lois, de prĆ©jugĆ©s, d'hommes et de faits, dont les contours lui Ć©chappaient, dont la masse l'Ć©pouvantait, et qui n'Ć©tait autre chose que cette prodigieuse pyramide que nous appelons la civilisation. Il distinguait ƧƠ et lĆ  dans cet ensemble fourmillant et difforme, tantĆ“t prĆØs de lui, tantĆ“t loin et sur des plateaux inaccessibles, quelque groupe, quelque dĆ©tail vivement Ć©clairĆ©, ici l'argousin et son bĆ¢ton, ici le gendarme et son sabre, lĆ -bas l'archevĆŖque mitrĆ©, tout en haut, dans une sorte de soleil, l'empereur couronnĆ© et Ć©blouissant. Il lui semblait que ces splendeurs lointaines, loin de dissiper sa nuit, la rendaient plus funĆØbre et plus noire. Tout cela, lois, prĆ©jugĆ©s, faits, hommes, choses, allait et venait au-dessus de lui, selon le mouvement compliquĆ© et mystĆ©rieux que Dieu imprime Ć  la civilisation, marchant sur lui et l'Ć©crasant avec je ne sais quoi de paisible dans la cruautĆ© et d'inexorable dans l'indiffĆ©rence. Ƃmes tombĆ©es au fond de l'infortune possible, malheureux hommes perdus au plus bas de ces limbes où l'on ne regarde plus, les rĆ©prouvĆ©s de la loi sentent peser de tout son poids sur leur tĆŖte cette sociĆ©tĆ© humaine, si formidable pour qui est dehors, si effroyable pour qui est dessous. Dans cette situation, Jean Valjean songeait, et quelle pouvait ĆŖtre la nature de sa rĆŖverie? Si le grain de mil sous la meule avait des pensĆ©es, il penserait sans doute ce que pensait Jean Valjean. Toutes ces choses, rĆ©alitĆ©s pleines de spectres, fantasmagories pleines de rĆ©alitĆ©s, avaient fini par lui crĆ©er une sorte d'Ć©tat intĆ©rieur presque inexprimable. Par moments, au milieu de son travail du bagne, il s'arrĆŖtait. Il se mettait Ć  penser. Sa raison, Ć  la fois plus mĆ»re et plus troublĆ©e qu'autrefois, se rĆ©voltait. Tout ce qui lui Ć©tait arrivĆ© lui paraissait absurde; tout ce qui l'entourait lui paraissait impossible. Il se disait: c'est un rĆŖve. Il regardait l'argousin debout Ć  quelques pas de lui; l'argousin lui semblait un fantĆ“me; tout Ć  coup le fantĆ“me lui donnait un coup de bĆ¢ton. La nature visible existait Ć  peine pour lui. Il serait presque vrai de dire qu'il n'y avait point pour Jean Valjean de soleil, ni de beaux jours d'Ć©tĆ©, ni de ciel rayonnant, ni de fraĆ®ches aubes d'avril. Je ne sais quel jour de soupirail Ć©clairait habituellement son Ć¢me. Pour rĆ©sumer, en terminant, ce qui peut ĆŖtre rĆ©sumĆ© et traduit en rĆ©sultats positifs dans tout ce que nous venons d'indiquer, nous nous bornerons Ć  constater qu'en dix-neuf ans, Jean Valjean, l'inoffensif Ć©mondeur de Faverolles, le redoutable galĆ©rien de Toulon, Ć©tait devenu capable, grĆ¢ce Ć  la maniĆØre dont le bagne l'avait faƧonnĆ©, de deux espĆØces de mauvaises actions: premiĆØrement, d'une mauvaise action rapide, irrĆ©flĆ©chie, pleine d'Ć©tourdissement, toute d'instinct, sorte de reprĆ©saille pour le mal souffert; deuxiĆØmement, d'une mauvaise action grave, sĆ©rieuse, dĆ©battue en conscience et mĆ©ditĆ©e avec les idĆ©es fausses que peut donner un pareil malheur. Ses prĆ©mĆ©ditations passaient par les trois phases successives que les natures d'une certaine trempe peuvent seules parcourir, raisonnement, volontĆ©, obstination. Il avait pour mobiles l'indignation habituelle, l'amertume de l'Ć¢me, le profond sentiment des iniquitĆ©s subies, la rĆ©action, mĆŖme contre les bons, les innocents et les justes, s'il y en a. Le point de dĆ©part comme le point d'arrivĆ©e de toutes ses pensĆ©es Ć©tait la haine de la loi humaine; cette haine qui, si elle n'est arrĆŖtĆ©e dans son dĆ©veloppement par quelque incident providentiel, devient, dans un temps donnĆ©, la haine de la sociĆ©tĆ©, puis la haine du genre humain, puis la haine de la crĆ©ation, et se traduit par un vague et incessant et brutal dĆ©sir de nuire, n'importe Ć  qui, Ć  un ĆŖtre vivant quelconque. Comme on voit, ce n'Ć©tait pas sans raison que le passeport qualifiait Jean Valjean d'_homme trĆØs dangereux_. D'annĆ©e en annĆ©e, cette Ć¢me s'Ć©tait dessĆ©chĆ©e de plus en plus, lentement, mais fatalement. ƀ coeur sec, oeil sec. ƀ sa sortie du bagne, il y avait dix-neuf ans qu'il n'avait versĆ© une larme. Chapitre VIII L'onde et l'ombre Un homme Ć  la mer! Qu'importe! le navire ne s'arrĆŖte pas. Le vent souffle, ce sombre navire-lĆ  a une route qu'il est forcĆ© de continuer. Il passe. L'homme disparaĆ®t, puis reparaĆ®t, il plonge et remonte Ć  la surface, il appelle, il tend les bras, on ne l'entend pas; le navire, frissonnant sous l'ouragan, est tout Ć  sa manoeuvre, les matelots et les passagers ne voient mĆŖme plus l'homme submergĆ©; sa misĆ©rable tĆŖte n'est qu'un point dans l'Ć©normitĆ© des vagues. Il jette des cris dĆ©sespĆ©rĆ©s dans les profondeurs. Quel spectre que cette voile qui s'en va! Il la regarde, il la regarde frĆ©nĆ©tiquement. Elle s'Ć©loigne, elle blĆŖmit, elle dĆ©croĆ®t. Il Ć©tait lĆ  tout Ć  l'heure, il Ć©tait de l'Ć©quipage, il allait et venait sur le pont avec les autres, il avait sa part de respiration et de soleil, il Ć©tait un vivant. Maintenant, que s'est-il donc passĆ©? Il a glissĆ©, il est tombĆ©, c'est fini. Il est dans l'eau monstrueuse. Il n'a plus sous les pieds que de la fuite et de l'Ć©croulement. Les flots dĆ©chirĆ©s et dĆ©chiquetĆ©s par le vent l'environnent hideusement, les roulis de l'abĆ®me l'emportent, tous les haillons de l'eau s'agitent autour de sa tĆŖte, une populace de vagues crache sur lui, de confuses ouvertures le dĆ©vorent Ć  demi; chaque fois qu'il enfonce, il entrevoit des prĆ©cipices pleins de nuit; d'affreuses vĆ©gĆ©tations inconnues le saisissent, lui nouent les pieds, le tirent Ć  elles; il sent qu'il devient abĆ®me, il fait partie de l'Ć©cume, les flots se le jettent de l'un Ć  l'autre, il boit l'amertume, l'ocĆ©an lĆ¢che s'acharne Ć  le noyer, l'Ć©normitĆ© joue avec son agonie. Il semble que toute cette eau soit de la haine. Il lutte pourtant, il essaie de se dĆ©fendre, il essaie de se soutenir, il fait effort, il nage. Lui, cette pauvre force tout de suite Ć©puisĆ©e, il combat l'inĆ©puisable. Où donc est le navire? LĆ -bas. ƀ peine visible dans les pĆ¢les tĆ©nĆØbres de l'horizon. Les rafales soufflent; toutes les Ć©cumes l'accablent. Il lĆØve les yeux et ne voit que les lividitĆ©s des nuages. Il assiste, agonisant, Ć  l'immense dĆ©mence de la mer. Il est suppliciĆ© par cette folie. Il entend des bruits Ć©trangers Ć  l'homme qui semblent venir d'au delĆ  de la terre et d'on ne sait quel dehors effrayant. Il y a des oiseaux dans les nuĆ©es, de mĆŖme qu'il y a des anges au-dessus des dĆ©tresses humaines, mais que peuvent-ils pour lui? Cela vole, chante et plane, et lui, il rĆ¢le. Il se sent enseveli Ć  la fois par ces deux infinis, l'ocĆ©an et le ciel; l'un est une tombe, l'autre est un linceul. La nuit descend, voilĆ  des heures qu'il nage, ses forces sont Ć  bout; ce navire, cette chose lointaine où il y avait des hommes, s'est effacĆ©; il est seul dans le formidable gouffre crĆ©pusculaire, il enfonce, il se roidit, il se tord, il sent au-dessous de lui les vagues monstres de l'invisible; il appelle. Il n'y a plus d'hommes. Où est Dieu? Il appelle. Quelqu'un! quelqu'un! Il appelle toujours. Rien Ć  l'horizon. Rien au ciel. Il implore l'Ć©tendue, la vague, l'algue, l'Ć©cueil; cela est sourd. Il supplie la tempĆŖte; la tempĆŖte imperturbable n'obĆ©it qu'Ć  l'infini. Autour de lui, l'obscuritĆ©, la brume, la solitude, le tumulte orageux et inconscient, le plissement indĆ©fini des eaux farouches. En lui l'horreur et la fatigue. Sous lui la chute. Pas de point d'appui. Il songe aux aventures tĆ©nĆ©breuses du cadavre dans l'ombre illimitĆ©e. Le froid sans fond le paralyse. Ses mains se crispent et se ferment et prennent du nĆ©ant. Vents, nuĆ©es, tourbillons, souffles, Ć©toiles inutiles! Que faire? Le dĆ©sespĆ©rĆ© s'abandonne, qui est las prend le parti de mourir, il se laisse faire, il se laisse aller, il lĆ¢che prise, et le voilĆ  qui roule Ć  jamais dans les profondeurs lugubres de l'engloutissement. Ɣ marche implacable des sociĆ©tĆ©s humaines! Pertes d'hommes et d'Ć¢mes chemin faisant! OcĆ©an où tombe tout ce que laisse tomber la loi! Disparition sinistre du secours! Ć“ mort morale! La mer, c'est l'inexorable nuit sociale où la pĆ©nalitĆ© jette ses damnĆ©s. La mer, c'est l'immense misĆØre. L'Ć¢me, Ć  vau-l'eau dans ce gouffre, peut devenir un cadavre. Qui la ressuscitera? Chapitre IX Nouveaux griefs Quand vint l'heure de la sortie du bagne, quand Jean Valjean entendit Ć  son oreille ce mot Ć©trange: _tu es libre_! le moment fut invraisemblable et inouĆÆ, un rayon de vive lumiĆØre, un rayon de la vraie lumiĆØre des vivants pĆ©nĆ©tra subitement en lui. Mais ce rayon ne tarda point Ć  pĆ¢lir. Jean Valjean avait Ć©tĆ© Ć©bloui de l'idĆ©e de la libertĆ©. Il avait cru Ć  une vie nouvelle. Il vit bien vite ce que c'Ć©tait qu'une libertĆ© Ć  laquelle on donne un passeport jaune. Et autour de cela bien des amertumes. Il avait calculĆ© que sa masse, pendant son sĆ©jour au bagne, aurait dĆ» s'Ć©lever Ć  cent soixante et onze francs. Il est juste d'ajouter qu'il avait oubliĆ© de faire entrer dans ses calculs le repos forcĆ© des dimanches et fĆŖtes qui, pour dix-neuf ans, entraĆ®nait une diminution de vingt-quatre francs environ. Quoi qu'il en fĆ»t, cette masse avait Ć©tĆ© rĆ©duite, par diverses retenues locales, Ć  la somme de cent neuf francs quinze sous, qui lui avait Ć©tĆ© comptĆ©e Ć  sa sortie. Il n'y avait rien compris, et se croyait lĆ©sĆ©. Disons le mot, volĆ©. Le lendemain de sa libĆ©ration, Ć  Grasse, il vit devant la porte d'une distillerie de fleurs d'oranger des hommes qui dĆ©chargeaient des ballots. Il offrit ses services. La besogne pressait, on les accepta. Il se mit Ć  l'ouvrage. Il Ć©tait intelligent, robuste et adroit; il faisait de son mieux; le maĆ®tre paraissait content. Pendant qu'il travaillait, un gendarme passa, le remarqua, et lui demanda ses papiers. Il fallut montrer le passeport jaune. Cela fait, Jean Valjean reprit son travail. Un peu auparavant, il avait questionnĆ© l'un des ouvriers sur ce qu'ils gagnaient Ć  cette besogne par jour; on lui avait rĆ©pondu: _trente sous_. Le soir venu, comme il Ć©tait forcĆ© de repartir le lendemain matin, il se prĆ©senta devant le maĆ®tre de la distillerie et le pria de le payer. Le maĆ®tre ne profĆ©ra pas une parole, et lui remit vingt-cinq sous. Il rĆ©clama. On lui rĆ©pondit: cela est assez bon pour toi. Il insista. Le maĆ®tre le regarda entre les deux yeux et lui dit: _Gare le bloc_. LĆ  encore il se considĆ©ra comme volĆ©. La sociĆ©tĆ©, l'Ć©tat, en lui diminuant sa masse, l'avait volĆ© en grand. Maintenant, c'Ć©tait le tour de l'individu qui le volait en petit. LibĆ©ration n'est pas dĆ©livrance. On sort du bagne, mais non de la condamnation. VoilĆ  ce qui lui Ć©tait arrivĆ© Ć  Grasse. On a vu de quelle faƧon il avait Ć©tĆ© accueilli Ć  Digne. Chapitre X L'homme rĆ©veillĆ© Donc, comme deux heures du matin sonnaient Ć  l'horloge de la cathĆ©drale, Jean Valjean se rĆ©veilla. Ce qui le rĆ©veilla, c'est que le lit Ć©tait trop bon. Il y avait vingt ans bientĆ“t qu'il n'avait couchĆ© dans un lit, et quoiqu'il ne se fĆ»t pas dĆ©shabillĆ©, la sensation Ć©tait trop nouvelle pour ne pas troubler son sommeil. Il avait dormi plus de quatre heures. Sa fatigue Ć©tait passĆ©e. Il Ć©tait accoutumĆ© Ć  ne pas donner beaucoup d'heures au repos. Il ouvrit les yeux et regarda un moment dans l'obscuritĆ© autour de lui, puis il les referma pour se rendormir. Quand beaucoup de sensations diverses ont agitĆ© la journĆ©e, quand des choses prĆ©occupent l'esprit, on s'endort, mais on ne se rendort pas. Le sommeil vient plus aisĆ©ment qu'il ne revient. C'est ce qui arriva Ć  Jean Valjean. Il ne put se rendormir, et il se mit Ć  penser. Il Ć©tait dans un de ces moments où les idĆ©es qu'on a dans l'esprit sont troubles. Il avait une sorte de va-et-vient obscur dans le cerveau. Ses souvenirs anciens et ses souvenirs immĆ©diats y flottaient pĆŖle-mĆŖle et s'y croisaient confusĆ©ment, perdant leurs formes, se grossissant dĆ©mesurĆ©ment, puis disparaissant tout Ć  coup comme dans une eau fangeuse et agitĆ©e. Beaucoup de pensĆ©es lui venaient, mais il y en avait une qui se reprĆ©sentait continuellement et qui chassait toutes les autres. Cette pensĆ©e, nous allons la dire tout de suite:--Il avait remarquĆ© les six couverts d'argent et la grande cuiller que madame Magloire avait posĆ©s sur la table. Ces six couverts d'argent l'obsĆ©daient.--Ils Ć©taient lĆ .--ƀ quelques pas.--ƀ l'instant où il avait traversĆ© la chambre d'Ć  cĆ“tĆ© pour venir dans celle où il Ć©tait, la vieille servante les mettait dans un petit placard Ć  la tĆŖte du lit.--Il avait bien remarquĆ© ce placard.--ƀ droite, en entrant par la salle Ć  manger.--Ils Ć©taient massifs.--Et de vieille argenterie.--Avec la grande cuiller, on en tirerait au moins deux cents francs.--Le double de ce qu'il avait gagnĆ© en dix-neuf ans.--Il est vrai qu'il eĆ»t gagnĆ© davantage si l'_administration_ ne l'avait pas _volĆ©_. Son esprit oscilla toute une grande heure dans des fluctuations auxquelles se mĆŖlait bien quelque lutte. Trois heures sonnĆØrent. Il rouvrit les yeux, se dressa brusquement sur son sĆ©ant, Ć©tendit le bras et tĆ¢ta son havresac qu'il avait jetĆ© dans le coin de l'alcĆ“ve, puis il laissa pendre ses jambes et poser ses pieds Ć  terre, et se trouva, presque sans savoir comment, assis sur son lit. Il resta un certain temps rĆŖveur dans cette attitude qui eĆ»t eu quelque chose de sinistre pour quelqu'un qui l'eĆ»t aperƧu ainsi dans cette ombre, seul Ć©veillĆ© dans la maison endormie. Tout Ć  coup il se baissa, Ć“ta ses souliers et les posa doucement sur la natte prĆØs du lit, puis il reprit sa posture de rĆŖverie et redevint immobile. Au milieu de cette mĆ©ditation hideuse, les idĆ©es que nous venons d'indiquer remuaient sans relĆ¢che son cerveau, entraient, sortaient, rentraient, faisaient sur lui une sorte de pesĆ©e; et puis il songeait aussi, sans savoir pourquoi, et avec cette obstination machinale de la rĆŖverie, Ć  un forƧat nommĆ© Brevet qu'il avait connu au bagne, et dont le pantalon n'Ć©tait retenu que par une seule bretelle de coton tricotĆ©. Le dessin en damier de cette bretelle lui revenait sans cesse Ć  l'esprit. Il demeurait dans cette situation, et y fĆ»t peut-ĆŖtre restĆ© indĆ©finiment jusqu'au lever du jour, si l'horloge n'eĆ»t sonnĆ© un coup--le quart ou la demie. Il sembla que ce coup lui eĆ»t dit: allons! Il se leva debout, hĆ©sita encore un moment, et Ć©couta; tout se taisait dans la maison; alors il marcha droit et Ć  petits pas vers la fenĆŖtre qu'il entrevoyait. La nuit n'Ć©tait pas trĆØs obscure; c'Ć©tait une pleine lune sur laquelle couraient de larges nuĆ©es chassĆ©es par le vent. Cela faisait au dehors des alternatives d'ombre et de clartĆ©, des Ć©clipses, puis des Ć©claircies, et au dedans une sorte de crĆ©puscule. Ce crĆ©puscule, suffisant pour qu'on pĆ»t se guider, intermittent Ć  cause des nuages, ressemblait Ć  l'espĆØce de lividitĆ© qui tombe d'un soupirail de cave devant lequel vont et viennent des passants. ArrivĆ© Ć  la fenĆŖtre, Jean Valjean l'examina. Elle Ć©tait sans barreaux, donnait sur le jardin et n'Ć©tait fermĆ©e, selon la mode du pays, que d'une petite clavette. Il l'ouvrit, mais, comme un air froid et vif entra brusquement dans la chambre, il la referma tout de suite. Il regarda le jardin de ce regard attentif qui Ć©tudie plus encore qu'il ne regarde. Le jardin Ć©tait enclos d'un mur blanc assez bas, facile Ć  escalader. Au fond, au-delĆ , il distingua des tĆŖtes d'arbres Ć©galement espacĆ©es, ce qui indiquait que ce mur sĆ©parait le jardin d'une avenue ou d'une ruelle plantĆ©e. Ce coup d'oeil jetĆ©, il fit le mouvement d'un homme dĆ©terminĆ©, marcha Ć  son alcĆ“ve, prit son havresac, l'ouvrit, le fouilla, en tira quelque chose qu'il posa sur le lit, mit ses souliers dans une des poches, referma le tout, chargea le sac sur ses Ć©paules, se couvrit de sa casquette dont il baissa la visiĆØre sur ses yeux, chercha son bĆ¢ton en tĆ¢tonnant, et l'alla poser dans l'angle de la fenĆŖtre, puis revint au lit et saisit rĆ©solument l'objet qu'il y avait dĆ©posĆ©. Cela ressemblait Ć  une barre de fer courte, aiguisĆ©e comme un Ć©pieu Ć  l'une de ses extrĆ©mitĆ©s. Il eĆ»t Ć©tĆ© difficile de distinguer dans les tĆ©nĆØbres pour quel emploi avait pu ĆŖtre faƧonnĆ© ce morceau de fer. C'Ć©tait peut-ĆŖtre un levier? C'Ć©tait peut-ĆŖtre une massue? Au jour on eĆ»t pu reconnaĆ®tre que ce n'Ć©tait autre chose qu'un chandelier de mineur. On employait alors quelquefois les forƧats Ć  extraire de la roche des hautes collines qui environnent Toulon, et il n'Ć©tait pas rare qu'ils eussent Ć  leur disposition des outils de mineur. Les chandeliers des mineurs sont en fer massif, terminĆ©s Ć  leur extrĆ©mitĆ© infĆ©rieure par une pointe au moyen de laquelle on les enfonce dans le rocher. Il prit ce chandelier dans sa main droite, et retenant son haleine, assourdissant son pas, il se dirigea vers la porte de la chambre voisine, celle de l'Ć©vĆŖque, comme on sait. ArrivĆ© Ć  cette porte, il la trouva entrebĆ¢illĆ©e. L'Ć©vĆŖque ne l'avait point fermĆ©e. Chapitre XI Ce qu'il fait Jean Valjean Ć©couta. Aucun bruit. Il poussa la porte. Il la poussa du bout du doigt, lĆ©gĆØrement, avec cette douceur furtive et inquiĆØte d'un chat qui veut entrer. La porte cĆ©da Ć  la pression et fit un mouvement imperceptible et silencieux qui Ć©largit un peu l'ouverture. Il attendit un moment, puis poussa la porte une seconde fois, plus hardiment. Elle continua de cĆ©der en silence. L'ouverture Ć©tait assez grande maintenant pour qu'il pĆ»t passer. Mais il y avait prĆØs de la porte une petite table qui faisait avec elle un angle gĆŖnant et qui barrait l'entrĆ©e. Jean Valjean reconnut la difficultĆ©. Il fallait Ć  toute force que l'ouverture fĆ»t encore Ć©largie. Il prit son parti, et poussa une troisiĆØme fois la porte, plus Ć©nergiquement que les deux premiĆØres. Cette fois il y eut un gond mal huilĆ© qui jeta tout Ć  coup dans cette obscuritĆ© un cri rauque et prolongĆ©. Jean Valjean tressaillit. Le bruit de ce gond sonna dans son oreille avec quelque chose d'Ć©clatant et de formidable comme le clairon du jugement dernier. Dans les grossissements fantastiques de la premiĆØre minute, il se figura presque que ce gond venait de s'animer et de prendre tout Ć  coup une vie terrible, et qu'il aboyait comme un chien pour avertir tout le monde et rĆ©veiller les gens endormis. Il s'arrĆŖta, frissonnant, Ć©perdu, et retomba de la pointe du pied sur le talon. Il entendait ses artĆØres battre dans ses tempes comme deux marteaux de forge, et il lui semblait que son souffle sortait de sa poitrine avec le bruit du vent qui sort d'une caverne. Il lui paraissait impossible que l'horrible clameur de ce gond irritĆ© n'eĆ»t pas Ć©branlĆ© toute la maison comme une secousse de tremblement de terre; la porte, poussĆ©e par lui, avait pris l'alarme et avait appelĆ©; le vieillard allait se lever, les deux vieilles femmes allaient crier, on viendrait Ć  l'aide; avant un quart d'heure, la ville serait en rumeur et la gendarmerie sur pied. Un moment il se crut perdu. Il demeura où il Ć©tait, pĆ©trifiĆ© comme la statue de sel, n'osant faire un mouvement. Quelques minutes s'Ć©coulĆØrent. La porte s'Ć©tait ouverte toute grande. Il se hasarda Ć  regarder dans la chambre. Rien n'y avait bougĆ©. Il prĆŖta l'oreille. Rien ne remuait dans la maison. Le bruit du gond rouillĆ© n'avait Ć©veillĆ© personne. Ce premier danger Ć©tait passĆ©, mais il y avait encore en lui un affreux tumulte. Il ne recula pas pourtant. MĆŖme quand il s'Ć©tait cru perdu, il n'avait pas reculĆ©. Il ne songea plus qu'Ć  finir vite. Il fit un pas et entra dans la chambre. Cette chambre Ć©tait dans un calme parfait. On y distinguait ƧƠ et lĆ  des formes confuses et vagues qui, au jour, Ć©taient des papiers Ć©pars sur une table, des in-folio ouverts, des volumes empilĆ©s sur un tabouret, un fauteuil chargĆ© de vĆŖtements, un prie-Dieu, et qui Ć  cette heure n'Ć©taient plus que des coins tĆ©nĆ©breux et des places blanchĆ¢tres. Jean Valjean avanƧa avec prĆ©caution en Ć©vitant de se heurter aux meubles. Il entendait au fond de la chambre la respiration Ć©gale et tranquille de l'Ć©vĆŖque endormi. Il s'arrĆŖta tout Ć  coup. Il Ć©tait prĆØs du lit. Il y Ć©tait arrivĆ© plus tĆ“t qu'il n'aurait cru. La nature mĆŖle quelquefois ses effets et ses spectacles Ć  nos actions avec une espĆØce d'Ć -propos sombre et intelligent, comme si elle voulait nous faire rĆ©flĆ©chir. Depuis prĆØs d'une demi-heure un grand nuage couvrait le ciel. Au moment où Jean Valjean s'arrĆŖta en face du lit, ce nuage se dĆ©chira, comme s'il l'eĆ»t fait exprĆØs, et un rayon de lune, traversant la longue fenĆŖtre, vint Ć©clairer subitement le visage pĆ¢le de l'Ć©vĆŖque. Il dormait paisiblement. Il Ć©tait presque vĆŖtu dans son lit, Ć  cause des nuits froides des Basses-Alpes, d'un vĆŖtement de laine brune qui lui couvrait les bras jusqu'aux poignets. Sa tĆŖte Ć©tait renversĆ©e sur l'oreiller dans l'attitude abandonnĆ©e du repos; il laissait pendre hors du lit sa main ornĆ©e de l'anneau pastoral et d'où Ć©taient tombĆ©es tant de bonnes oeuvres et de saintes actions. Toute sa face s'illuminait d'une vague expression de satisfaction, d'espĆ©rance et de bĆ©atitude. C'Ć©tait plus qu'un sourire et presque un rayonnement. Il y avait sur son front l'inexprimable rĆ©verbĆ©ration d'une lumiĆØre qu'on ne voyait pas. L'Ć¢me des justes pendant le sommeil contemple un ciel mystĆ©rieux. Un reflet de ce ciel Ć©tait sur l'Ć©vĆŖque. C'Ć©tait en mĆŖme temps une transparence lumineuse, car ce ciel Ć©tait au dedans de lui. Ce ciel, c'Ć©tait sa conscience. Au moment où le rayon de lune vint se superposer, pour ainsi dire, Ć  cette clartĆ© intĆ©rieure, l'Ć©vĆŖque endormi apparut comme dans une gloire. Cela pourtant resta doux et voilĆ© d'un demi-jour ineffable. Cette lune dans le ciel, cette nature assoupie, ce jardin sans un frisson, cette maison si calme, l'heure, le moment, le silence, ajoutaient je ne sais quoi de solennel et d'indicible au vĆ©nĆ©rable repos de ce sage, et enveloppaient d'une sorte d'aurĆ©ole majestueuse et sereine ces cheveux blancs et ces yeux fermĆ©s, cette figure où tout Ć©tait espĆ©rance et où tout Ć©tait confiance, cette tĆŖte de vieillard et ce sommeil d'enfant. Il y avait presque de la divinitĆ© dans cet homme ainsi auguste Ć  son insu. Jean Valjean, lui, Ć©tait dans l'ombre, son chandelier de fer Ć  la main, debout, immobile, effarĆ© de ce vieillard lumineux. Jamais il n'avait rien vu de pareil. Cette confiance l'Ć©pouvantait. Le monde moral n'a pas de plus grand spectacle que celui-lĆ : une conscience troublĆ©e et inquiĆØte, parvenue au bord d'une mauvaise action, et contemplant le sommeil d'un juste. Ce sommeil, dans cet isolement, et avec un voisin tel que lui, avait quelque chose de sublime qu'il sentait vaguement, mais impĆ©rieusement. Nul n'eĆ»t pu dire ce qui se passait en lui, pas mĆŖme lui. Pour essayer de s'en rendre compte, il faut rĆŖver ce qu'il y a de plus violent en prĆ©sence de ce qu'il y a de plus doux. Sur son visage mĆŖme on n'eĆ»t rien pu distinguer avec certitude. C'Ć©tait une sorte d'Ć©tonnement hagard. Il regardait cela. VoilĆ  tout. Mais quelle Ć©tait sa pensĆ©e? Il eĆ»t Ć©tĆ© impossible de le deviner. Ce qui Ć©tait Ć©vident, c'est qu'il Ć©tait Ć©mu et bouleversĆ©. Mais de quelle nature Ć©tait cette Ć©motion? Son oeil ne se dĆ©tachait pas du vieillard. La seule chose qui se dĆ©gageĆ¢t clairement de son attitude et de sa physionomie, c'Ć©tait une Ć©trange indĆ©cision. On eĆ»t dit qu'il hĆ©sitait entre les deux abĆ®mes, celui où l'on se perd et celui où l'on se sauve. Il semblait prĆŖt Ć  briser ce crĆ¢ne ou Ć  baiser cette main. Au bout de quelques instants, son bras gauche se leva lentement vers son front, et il Ć“ta sa casquette, puis son bras retomba avec la mĆŖme lenteur, et Jean Valjean rentra dans sa contemplation, sa casquette dans la main gauche, sa massue dans la main droite, ses cheveux hĆ©rissĆ©s sur sa tĆŖte farouche. L'Ć©vĆŖque continuait de dormir dans une paix profonde sous ce regard effrayant. Un reflet de lune faisait confusĆ©ment visible au-dessus de la cheminĆ©e le crucifix qui semblait leur ouvrir les bras Ć  tous les deux, avec une bĆ©nĆ©diction pour l'un et un pardon pour l'autre. Tout Ć  coup Jean Valjean remit sa casquette sur son front, puis marcha rapidement, le long du lit, sans regarder l'Ć©vĆŖque, droit au placard qu'il entrevoyait prĆØs du chevet; il leva le chandelier de fer comme pour forcer la serrure; la clef y Ć©tait; il l'ouvrit; la premiĆØre chose qui lui apparut fut le panier d'argenterie; il le prit, traversa la chambre Ć  grands pas sans prĆ©caution et sans s'occuper du bruit, gagna la porte, rentra dans l'oratoire, ouvrit la fenĆŖtre, saisit un bĆ¢ton, enjamba l'appui du rez-de-chaussĆ©e, mit l'argenterie dans son sac, jeta le panier, franchit le jardin, sauta par-dessus le mur comme un tigre, et s'enfuit. Chapitre XII L'Ć©vĆŖque travaille Le lendemain, au soleil levant, monseigneur Bienvenu se promenait dans son jardin. Madame Magloire accourut vers lui toute bouleversĆ©e. --Monseigneur, monseigneur, cria-t-elle, votre grandeur sait-elle où est le panier d'argenterie? --Oui, dit l'Ć©vĆŖque. --JĆ©sus-Dieu soit bĆ©ni! reprit-elle. Je ne savais ce qu'il Ć©tait devenu. L'Ć©vĆŖque venait de ramasser le panier dans une plate-bande. Il le prĆ©senta Ć  madame Magloire. --Le voilĆ . --Eh bien? dit-elle. Rien dedans! et l'argenterie? --Ah! repartit l'Ć©vĆŖque. C'est donc l'argenterie qui vous occupe? Je ne sais où elle est. --Grand bon Dieu! elle est volĆ©e! C'est l'homme d'hier soir qui l'a volĆ©e! En un clin d'oeil, avec toute sa vivacitĆ© de vieille alerte, madame Magloire courut Ć  l'oratoire, entra dans l'alcĆ“ve et revint vers l'Ć©vĆŖque. L'Ć©vĆŖque venait de se baisser et considĆ©rait en soupirant un plant de cochlĆ©aria des Guillons que le panier avait brisĆ© en tombant Ć  travers la plate-bande. Il se redressa au cri de madame Magloire. --Monseigneur, l'homme est parti! l'argenterie est volĆ©e! Tout en poussant cette exclamation, ses yeux tombaient sur un angle du jardin où l'on voyait des traces d'escalade. Le chevron du mur avait Ć©tĆ© arrachĆ©. --Tenez! c'est par lĆ  qu'il s'en est allĆ©. Il a sautĆ© dans la ruelle Cochefilet! Ah! l'abomination! Il nous a volĆ© notre argenterie! L'Ć©vĆŖque resta un moment silencieux, puis leva son oeil sĆ©rieux, et dit Ć  madame Magloire avec douceur: --Et d'abord, cette argenterie Ć©tait-elle Ć  nous? Madame Magloire resta interdite. Il y eut encore un silence, puis l'Ć©vĆŖque continua: --Madame Magloire, je dĆ©tenais Ć  tort et depuis longtemps cette argenterie. Elle Ć©tait aux pauvres. Qu'Ć©tait-ce que cet homme? Un pauvre Ć©videmment. --HĆ©las JĆ©sus! repartit madame Magloire. Ce n'est pas pour moi ni pour mademoiselle. Cela nous est bien Ć©gal. Mais c'est pour monseigneur. Dans quoi monseigneur va-t-il manger maintenant? L'Ć©vĆŖque la regarda d'un air Ć©tonnĆ©. --Ah ƧƠ mais! est-ce qu'il n'y a pas des couverts d'Ć©tain? Madame Magloire haussa les Ć©paules. --L'Ć©tain a une odeur. --Alors, des couverts de fer. Madame Magloire fit une grimace significative. --Le fer a un goĆ»t. --Eh bien, dit l'Ć©vĆŖque, des couverts de bois. Quelques instants aprĆØs, il dĆ©jeunait Ć  cette mĆŖme table où Jean Valjean s'Ć©tait assis la veille. Tout en dĆ©jeunant, monseigneur Bienvenu faisait gaĆ®ment remarquer Ć  sa soeur qui ne disait rien et Ć  madame Magloire qui grommelait sourdement qu'il n'est nullement besoin d'une cuiller ni d'une fourchette, mĆŖme en bois, pour tremper un morceau de pain dans une tasse de lait. --Aussi a-t-on idĆ©e! disait madame Magloire toute seule en allant et venant, recevoir un homme comme cela! et le loger Ć  cĆ“tĆ© de soi! et quel bonheur encore qu'il n'ait fait que voler! Ah mon Dieu! cela fait frĆ©mir quand on songe! Comme le frĆØre et la soeur allaient se lever de table, on frappa Ć  la porte. --Entrez, dit l'Ć©vĆŖque. La porte s'ouvrit. Un groupe Ć©trange et violent apparut sur le seuil. Trois hommes en tenaient un quatriĆØme au collet. Les trois hommes Ć©taient des gendarmes; l'autre Ć©tait Jean Valjean. Un brigadier de gendarmerie, qui semblait conduire le groupe, Ć©tait prĆØs de la porte. Il entra et s'avanƧa vers l'Ć©vĆŖque en faisant le salut militaire. --Monseigneur... dit-il. ƀ ce mot Jean Valjean, qui Ć©tait morne et semblait abattu, releva la tĆŖte d'un air stupĆ©fait. --Monseigneur! murmura-t-il. Ce n'est donc pas le curĆ©?... --Silence! dit un gendarme. C'est monseigneur l'Ć©vĆŖque. Cependant monseigneur Bienvenu s'Ć©tait approchĆ© aussi vivement que son grand Ć¢ge le lui permettait. --Ah! vous voilĆ ! s'Ć©cria-t-il en regardant Jean Valjean. Je suis aise de vous voir. Et bien mais! je vous avais donnĆ© les chandeliers aussi, qui sont en argent comme le reste et dont vous pourrez bien avoir deux cents francs. Pourquoi ne les avez-vous pas emportĆ©s avec vos couverts? Jean Valjean ouvrit les yeux et regarda le vĆ©nĆ©rable Ć©vĆŖque avec une expression qu'aucune langue humaine ne pourrait rendre. --Monseigneur, dit le brigadier de gendarmerie, ce que cet homme disait Ć©tait donc vrai? Nous l'avons rencontrĆ©. Il allait comme quelqu'un qui s'en va. Nous l'avons arrĆŖtĆ© pour voir. Il avait cette argenterie.... --Et il vous a dit, interrompit l'Ć©vĆŖque en souriant, qu'elle lui avait Ć©tĆ© donnĆ©e par un vieux bonhomme de prĆŖtre chez lequel il avait passĆ© la nuit? Je vois la chose. Et vous l'avez ramenĆ© ici? C'est une mĆ©prise. --Comme cela, reprit le brigadier, nous pouvons le laisser aller? --Sans doute, rĆ©pondit l'Ć©vĆŖque. Les gendarmes lĆ¢chĆØrent Jean Valjean qui recula. --Est-ce que c'est vrai qu'on me laisse? dit-il d'une voix presque inarticulĆ©e et comme s'il parlait dans le sommeil. --Oui, on te laisse, tu n'entends donc pas? dit un gendarme. --Mon ami, reprit l'Ć©vĆŖque, avant de vous en aller, voici vos chandeliers. Prenez-les. Il alla Ć  la cheminĆ©e, prit les deux flambeaux d'argent et les apporta Ć  Jean Valjean. Les deux femmes le regardaient faire sans un mot, sans un geste, sans un regard qui pĆ»t dĆ©ranger l'Ć©vĆŖque. Jean Valjean tremblait de tous ses membres. Il prit les deux chandeliers machinalement et d'un air Ć©garĆ©. --Maintenant, dit l'Ć©vĆŖque, allez en paix. --ƀ propos, quand vous reviendrez, mon ami, il est inutile de passer par le jardin. Vous pourrez toujours entrer et sortir par la porte de la rue. Elle n'est fermĆ©e qu'au loquet jour et nuit. Puis se tournant vers la gendarmerie: --Messieurs, vous pouvez vous retirer. Les gendarmes s'Ć©loignĆØrent. Jean Valjean Ć©tait comme un homme qui va s'Ć©vanouir. L'Ć©vĆŖque s'approcha de lui, et lui dit Ć  voix basse: --N'oubliez pas, n'oubliez jamais que vous m'avez promis d'employer cet argent Ć  devenir honnĆŖte homme. Jean Valjean, qui n'avait aucun souvenir d'avoir rien promis, resta interdit. L'Ć©vĆŖque avait appuyĆ© sur ces paroles en les prononƧant. Il reprit avec une sorte de solennitĆ©: --Jean Valjean, mon frĆØre, vous n'appartenez plus au mal, mais au bien. C'est votre Ć¢me que je vous achĆØte; je la retire aux pensĆ©es noires et Ć  l'esprit de perdition, et je la donne Ć  Dieu. Chapitre XIII Petit-Gervais Jean Valjean sortit de la ville comme s'il s'Ć©chappait. Il se mit Ć  marcher en toute hĆ¢te dans les champs, prenant les chemins et les sentiers qui se prĆ©sentaient sans s'apercevoir qu'il revenait Ć  chaque instant sur ses pas. Il erra ainsi toute la matinĆ©e, n'ayant pas mangĆ© et n'ayant pas faim. Il Ć©tait en proie Ć  une foule de sensations nouvelles. Il se sentait une sorte de colĆØre; il ne savait contre qui. Il n'eĆ»t pu dire s'il Ć©tait touchĆ© ou humiliĆ©. Il lui venait par moments un attendrissement Ć©trange qu'il combattait et auquel il opposait l'endurcissement de ses vingt derniĆØres annĆ©es. Cet Ć©tat le fatiguait. Il voyait avec inquiĆ©tude s'Ć©branler au dedans de lui l'espĆØce de calme affreux que l'injustice de son malheur lui avait donnĆ©. Il se demandait qu'est-ce qui remplacerait cela. Parfois il eĆ»t vraiment mieux aimĆ© ĆŖtre en prison avec les gendarmes, et que les choses ne se fussent point passĆ©es ainsi; cela l'eĆ»t moins agitĆ©. Bien que la saison fut assez avancĆ©e, il y avait encore ƧƠ et lĆ  dans les haies quelques fleurs tardives dont l'odeur, qu'il traversait en marchant, lui rappelait des souvenirs d'enfance. Ces souvenirs lui Ć©taient presque insupportables, tant il y avait longtemps qu'ils ne lui Ć©taient apparus. Des pensĆ©es inexprimables s'amoncelĆØrent ainsi en lui toute la journĆ©e. Comme le soleil dĆ©clinait au couchant, allongeant sur le sol l'ombre du moindre caillou, Jean Valjean Ć©tait assis derriĆØre un buisson dans une grande plaine rousse absolument dĆ©serte. Il n'y avait Ć  l'horizon que les Alpes. Pas mĆŖme le clocher d'un village lointain. Jean Valjean pouvait ĆŖtre Ć  trois lieues de Digne. Un sentier qui coupait la plaine passait Ć  quelques pas du buisson. Au milieu de cette mĆ©ditation qui n'eĆ»t pas peu contribuĆ© Ć  rendre ses haillons effrayants pour quelqu'un qui l'eĆ»t rencontrĆ©, il entendit un bruit joyeux. Il tourna la tĆŖte, et vit venir par le sentier un petit savoyard d'une dizaine d'annĆ©es qui chantait, sa vielle au flanc et sa boĆ®te Ć  marmotte sur le dos; un de ces doux et gais enfants qui vont de pays en pays, laissant voir leurs genoux par les trous de leur pantalon. Tout en chantant l'enfant interrompait de temps en temps sa marche et jouait aux osselets avec quelques piĆØces de monnaie qu'il avait dans sa main, toute sa fortune probablement. Parmi cette monnaie il y avait une piĆØce de quarante sous. L'enfant s'arrĆŖta Ć  cĆ“tĆ© du buisson sans voir Jean Valjean et fit sauter sa poignĆ©e de sous que jusque-lĆ  il avait reƧue avec assez d'adresse tout entiĆØre sur le dos de sa main. Cette fois la piĆØce de quarante sous lui Ć©chappa, et vint rouler vers la broussaille jusqu'Ć  Jean Valjean. Jean Valjean posa le pied dessus. Cependant l'enfant avait suivi sa piĆØce du regard, et l'avait vu. Il ne s'Ć©tonna point et marcha droit Ć  l'homme. C'Ć©tait un lieu absolument solitaire. Aussi loin que le regard pouvait s'Ć©tendre, il n'y avait personne dans la plaine ni dans le sentier. On n'entendait que les petits cris faibles d'une nuĆ©e d'oiseaux de passage qui traversaient le ciel Ć  une hauteur immense. L'enfant tournait le dos au soleil qui lui mettait des fils d'or dans les cheveux et qui empourprait d'une lueur sanglante la face sauvage de Jean Valjean. --Monsieur, dit le petit savoyard, avec cette confiance de l'enfance qui se compose d'ignorance et d'innocence,--ma piĆØce? --Comment t'appelles-tu? dit Jean Valjean. --Petit-Gervais, monsieur. --Va-t'en, dit Jean Valjean. --Monsieur, reprit l'enfant, rendez-moi ma piĆØce. Jean Valjean baissa la tĆŖte et ne rĆ©pondit pas. L'enfant recommenƧa: --Ma piĆØce, monsieur! L'oeil de Jean Valjean resta fixĆ© Ć  terre. --Ma piĆØce! cria l'enfant, ma piĆØce blanche! mon argent! Il semblait que Jean Valjean n'entendit point. L'enfant le prit au collet de sa blouse et le secoua. Et en mĆŖme temps il faisait effort pour dĆ©ranger le gros soulier ferrĆ© posĆ© sur son trĆ©sor. --Je veux ma piĆØce! ma piĆØce de quarante sous! L'enfant pleurait. La tĆŖte de Jean Valjean se releva. Il Ć©tait toujours assis. Ses yeux Ć©taient troubles. Il considĆ©ra l'enfant avec une sorte d'Ć©tonnement, puis il Ć©tendit la main vers son bĆ¢ton et cria d'une voix terrible: --Qui est lĆ ? --Moi, monsieur, rĆ©pondit l'enfant. Petit-Gervais! moi! moi! Rendez-moi mes quarante sous, s'il vous plaĆ®t! Ɣtez votre pied, monsieur, s'il vous plaĆ®t! Puis irritĆ©, quoique tout petit, et devenant presque menaƧant: --Ah, ƧƠ, Ć“terez-vous votre pied? Ɣtez donc votre pied, voyons. --Ah! c'est encore toi! dit Jean Valjean, et se dressant brusquement tout debout, le pied toujours sur la piĆØce d'argent, il ajouta:--Veux-tu bien te sauver! L'enfant effarĆ© le regarda, puis commenƧa Ć  trembler de la tĆŖte aux pieds, et, aprĆØs quelques secondes de stupeur, se mit Ć  s'enfuir en courant de toutes ses forces sans oser tourner le cou ni jeter un cri. Cependant Ć  une certaine distance l'essoufflement le forƧa de s'arrĆŖter, et Jean Valjean, Ć  travers sa rĆŖverie, l'entendit qui sanglotait. Au bout de quelques instants l'enfant avait disparu. Le soleil s'Ć©tait couchĆ©. L'ombre se faisait autour de Jean Valjean. Il n'avait pas mangĆ© de la journĆ©e; il est probable qu'il avait la fiĆØvre. Il Ć©tait restĆ© debout, et n'avait pas changĆ© d'attitude depuis que l'enfant s'Ć©tait enfui. Son souffle soulevait sa poitrine Ć  des intervalles longs et inĆ©gaux. Son regard, arrĆŖtĆ© Ć  dix ou douze pas devant lui, semblait Ć©tudier avec une attention profonde la forme d'un vieux tesson de faĆÆence bleue tombĆ© dans l'herbe. Tout Ć  coup il tressaillit; il venait de sentir le froid du soir. Il raffermit sa casquette sur son front, chercha machinalement Ć  croiser et Ć  boutonner sa blouse, fit un pas, et se baissa pour reprendre Ć  terre son bĆ¢ton. En ce moment il aperƧut la piĆØce de quarante sous que son pied avait Ć  demi enfoncĆ©e dans la terre et qui brillait parmi les cailloux. Ce fut comme une commotion galvanique. Qu'est-ce que c'est que Ƨa? dit-il entre ses dents. Il recula de trois pas, puis s'arrĆŖta, sans pouvoir dĆ©tacher son regard de ce point que son pied avait foulĆ© l'instant d'auparavant, comme si cette chose qui luisait lĆ  dans l'obscuritĆ© eĆ»t Ć©tĆ© un oeil ouvert fixĆ© sur lui. Au bout de quelques minutes, il s'Ć©lanƧa convulsivement vers la piĆØce d'argent, la saisit, et, se redressant, se mit Ć  regarder au loin dans la plaine, jetant Ć  la fois ses yeux vers tous les points de l'horizon, debout et frissonnant comme une bĆŖte fauve effarĆ©e qui cherche un asile. Il ne vit rien. La nuit tombait, la plaine Ć©tait froide et vague, de grandes brumes violettes montaient dans la clartĆ© crĆ©pusculaire. Il dit: Ā«Ah!Ā» et se mit Ć  marcher rapidement dans une certaine direction, du cĆ“tĆ© où l'enfant avait disparu. AprĆØs une centaine de pas, il s'arrĆŖta, regarda, et ne vit rien. Alors il cria de toute sa force: Ā«Petit-Gervais! Petit-Gervais!Ā» Il se tut, et attendit. Rien ne rĆ©pondit. La campagne Ć©tait dĆ©serte et morne. Il Ć©tait environnĆ© de l'Ć©tendue. Il n'y avait rien autour de lui qu'une ombre où se perdait son regard et un silence où sa voix se perdait. Une bise glaciale soufflait, et donnait aux choses autour de lui une sorte de vie lugubre. Des arbrisseaux secouaient leurs petits bras maigres avec une furie incroyable. On eĆ»t dit qu'ils menaƧaient et poursuivaient quelqu'un. Il recommenƧa Ć  marcher, puis il se mit Ć  courir, et de temps en temps il s'arrĆŖtait, et criait dans cette solitude, avec une voix qui Ć©tait ce qu'on pouvait entendre de plus formidable et de plus dĆ©solĆ©: Ā«Petit-Gervais! Petit-Gervais!Ā» Certes, si l'enfant l'eĆ»t entendu, il eĆ»t eu peur et se fĆ»t bien gardĆ© de se montrer. Mais l'enfant Ć©tait sans doute dĆ©jĆ  bien loin. Il rencontra un prĆŖtre qui Ć©tait Ć  cheval. Il alla Ć  lui et lui dit: --Monsieur le curĆ©, avez-vous vu passer un enfant? --Non, dit le prĆŖtre. --Un nommĆ© Petit-Gervais? --Je n'ai vu personne. Il tira deux piĆØces de cinq francs de sa sacoche et les remit au prĆŖtre. --Monsieur le curĆ©, voici pour vos pauvres.--Monsieur le curĆ©, c'est un petit d'environ dix ans qui a une marmotte, je crois, et une vielle. Il allait. Un de ces savoyards, vous savez? --Je ne l'ai point vu. --Petit-Gervais? il n'est point des villages d'ici? pouvez-vous me dire? --Si c'est comme vous dites, mon ami, c'est un petit enfant Ć©tranger. Cela passe dans le pays. On ne les connaĆ®t pas. Jean Valjean prit violemment deux autres Ć©cus de cinq francs qu'il donna au prĆŖtre. --Pour vos pauvres, dit-il. Puis il ajouta avec Ć©garement: --Monsieur l'abbĆ©, faites-moi arrĆŖter. Je suis un voleur. Le prĆŖtre piqua des deux et s'enfuit trĆØs effrayĆ©. Jean Valjean se remit Ć  courir dans la direction qu'il avait d'abord prise. Il fit de la sorte un assez long chemin, regardant, appelant, criant, mais il ne rencontra plus personne. Deux ou trois fois il courut dans la plaine vers quelque chose qui lui faisait l'effet d'un ĆŖtre couchĆ© ou accroupi; ce n'Ć©taient que des broussailles ou des roches Ć  fleur de terre. Enfin, Ć  un endroit où trois sentiers se croisaient, il s'arrĆŖta. La lune s'Ć©tait levĆ©e. Il promena sa vue au loin et appela une derniĆØre fois: Ā«Petit-Gervais! Petit-Gervais! Petit-Gervais!Ā» Son cri s'Ć©teignit dans la brume, sans mĆŖme Ć©veiller un Ć©cho. Il murmura encore: Ā«Petit-Gervais!Ā» mais d'une voix faible et presque inarticulĆ©e. Ce fut lĆ  son dernier effort; ses jarrets flĆ©chirent brusquement sous lui comme si une puissance invisible l'accablait tout Ć  coup du poids de sa mauvaise conscience; il tomba Ć©puisĆ© sur une grosse pierre, les poings dans ses cheveux et le visage dans ses genoux, et il cria: Ā«Je suis un misĆ©rable!Ā» Alors son coeur creva et il se mit Ć  pleurer. C'Ć©tait la premiĆØre fois qu'il pleurait depuis dix-neuf ans. Quand Jean Valjean Ć©tait sorti de chez l'Ć©vĆŖque, on l'a vu, il Ć©tait hors de tout ce qui avait Ć©tĆ© sa pensĆ©e jusque-lĆ . Il ne pouvait se rendre compte de ce qui se passait en lui. Il se raidissait contre l'action angĆ©lique et contre les douces paroles du vieillard. Ā«Vous m'avez promis de devenir honnĆŖte homme. Je vous achĆØte votre Ć¢me. Je la retire Ć  l'esprit de perversitĆ© et je la donne au bon Dieu.Ā» Cela lui revenait sans cesse. Il opposait Ć  cette indulgence cĆ©leste l'orgueil, qui est en nous comme la forteresse du mal. Il sentait indistinctement que le pardon de ce prĆŖtre Ć©tait le plus grand assaut et la plus formidable attaque dont il eĆ»t encore Ć©tĆ© Ć©branlĆ©; que son endurcissement serait dĆ©finitif s'il rĆ©sistait Ć  cette clĆ©mence; que, s'il cĆ©dait, il faudrait renoncer Ć  cette haine dont les actions des autres hommes avaient rempli son Ć¢me pendant tant d'annĆ©es, et qui lui plaisait; que cette fois il fallait vaincre ou ĆŖtre vaincu, et que la lutte, une lutte colossale et dĆ©cisive, Ć©tait engagĆ©e entre sa mĆ©chancetĆ© Ć  lui et la bontĆ© de cet homme. En prĆ©sence de toutes ces lueurs, il allait comme un homme ivre. Pendant qu'il marchait ainsi, les yeux hagards, avait-il une perception distincte de ce qui pourrait rĆ©sulter pour lui de son aventure Ć  Digne? Entendait-il tous ces bourdonnements mystĆ©rieux qui avertissent ou importunent l'esprit Ć  de certains moments de la vie? Une voix lui disait-elle Ć  l'oreille qu'il venait de traverser l'heure solennelle de sa destinĆ©e, qu'il n'y avait plus de milieu pour lui, que si dĆ©sormais il n'Ć©tait pas le meilleur des hommes il en serait le pire, qu'il fallait pour ainsi dire que maintenant il montĆ¢t plus haut que l'Ć©vĆŖque ou retombĆ¢t plus bas que le galĆ©rien, que s'il voulait devenir bon il fallait qu'il devĆ®nt ange; que s'il voulait rester mĆ©chant il fallait qu'il devĆ®nt monstre? Ici encore il faut se faire ces questions que nous nous sommes dĆ©jĆ  faites ailleurs, recueillait-il confusĆ©ment quelque ombre de tout ceci dans sa pensĆ©e? Certes, le malheur, nous l'avons dit, fait l'Ć©ducation de l'intelligence; cependant il est douteux que Jean Valjean fĆ»t en Ć©tat de dĆ©mĆŖler tout ce que nous indiquons ici. Si ces idĆ©es lui arrivaient, il les entrevoyait plutĆ“t qu'il ne les voyait, et elles ne rĆ©ussissaient qu'Ć  le jeter dans un trouble insupportable et presque douloureux. Au sortir de cette chose difforme et noire qu'on appelle le bagne, l'Ć©vĆŖque lui avait fait mal Ć  l'Ć¢me comme une clartĆ© trop vive lui eĆ»t fait mal aux yeux en sortant des tĆ©nĆØbres. La vie future, la vie possible qui s'offrait dĆ©sormais Ć  lui toute pure et toute rayonnante le remplissait de frĆ©missements et d'anxiĆ©tĆ©. Il ne savait vraiment plus où il en Ć©tait. Comme une chouette qui verrait brusquement se lever le soleil, le forƧat avait Ć©tĆ© Ć©bloui et comme aveuglĆ© par la vertu. Ce qui Ć©tait certain, ce dont il ne se doutait pas, c'est qu'il n'Ć©tait dĆ©jĆ  plus le mĆŖme homme, c'est que tout Ć©tait changĆ© en lui, c'est qu'il n'Ć©tait plus en son pouvoir de faire que l'Ć©vĆŖque ne lui eĆ»t pas parlĆ© et ne l'eĆ»t pas touchĆ©. Dans cette situation d'esprit, il avait rencontrĆ© Petit-Gervais et lui avait volĆ© ses quarante sous. Pourquoi? Il n'eĆ»t assurĆ©ment pu l'expliquer; Ć©tait-ce un dernier effet et comme un suprĆŖme effort des mauvaises pensĆ©es qu'il avait apportĆ©es du bagne, un reste d'impulsion, un rĆ©sultat de ce qu'on appelle en statique la _force acquise_? C'Ć©tait cela, et c'Ć©tait aussi peut-ĆŖtre moins encore que cela. Disons-le simplement, ce n'Ć©tait pas lui qui avait volĆ©, ce n'Ć©tait pas l'homme, c'Ć©tait la bĆŖte qui, par habitude et par instinct, avait stupidement posĆ© le pied sur cet argent, pendant que l'intelligence se dĆ©battait au milieu de tant d'obsessions inouĆÆes et nouvelles. Quand l'intelligence se rĆ©veilla et vit cette action de la brute, Jean Valjean recula avec angoisse et poussa un cri d'Ć©pouvante. C'est que, phĆ©nomĆØne Ć©trange et qui n'Ć©tait possible que dans la situation où il Ć©tait, en volant cet argent Ć  cet enfant, il avait fait une chose dont il n'Ć©tait dĆ©jĆ  plus capable. Quoi qu'il en soit, cette derniĆØre mauvaise action eut sur lui un effet dĆ©cisif; elle traversa brusquement ce chaos qu'il avait dans l'intelligence et le dissipa, mit d'un cĆ“tĆ© les Ć©paisseurs obscures et de l'autre la lumiĆØre, et agit sur son Ć¢me, dans l'Ć©tat où elle se trouvait, comme de certains rĆ©actifs chimiques agissent sur un mĆ©lange trouble en prĆ©cipitant un Ć©lĆ©ment et en clarifiant l'autre. Tout d'abord, avant mĆŖme de s'examiner et de rĆ©flĆ©chir, Ć©perdu, comme quelqu'un qui cherche Ć  se sauver, il tĆ¢cha de retrouver l'enfant pour lui rendre son argent, puis, quand il reconnut que cela Ć©tait inutile et impossible, il s'arrĆŖta dĆ©sespĆ©rĆ©. Au moment où il s'Ć©cria: Ā«je suis un misĆ©rable!Ā» il venait de s'apercevoir tel qu'il Ć©tait, et il Ć©tait dĆ©jĆ  Ć  ce point sĆ©parĆ© de lui-mĆŖme, qu'il lui semblait qu'il n'Ć©tait plus qu'un fantĆ“me, et qu'il avait lĆ  devant lui, en chair et en os, le bĆ¢ton Ć  la main, la blouse sur les reins, son sac rempli d'objets volĆ©s sur le dos, avec son visage rĆ©solu et morne, avec sa pensĆ©e pleine de projets abominables, le hideux galĆ©rien Jean Valjean. L'excĆØs du malheur, nous l'avons remarquĆ©, l'avait fait en quelque sorte visionnaire. Ceci fut donc comme une vision. Il vit vĆ©ritablement ce Jean Valjean, cette face sinistre devant lui. Il fut presque au moment de se demander qui Ć©tait cet homme, et il en eut horreur. Son cerveau Ć©tait dans un de ces moments violents et pourtant affreusement calmes où la rĆŖverie est si profonde qu'elle absorbe la rĆ©alitĆ©. On ne voit plus les objets qu'on a autour de soi, et l'on voit comme en dehors de soi les figures qu'on a dans l'esprit. Il se contempla donc, pour ainsi dire, face Ć  face, et en mĆŖme temps, Ć  travers cette hallucination, il voyait dans une profondeur mystĆ©rieuse une sorte de lumiĆØre qu'il prit d'abord pour un flambeau. En regardant avec plus d'attention cette lumiĆØre qui apparaissait Ć  sa conscience, il reconnut qu'elle avait la forme humaine, et que ce flambeau Ć©tait l'Ć©vĆŖque. Sa conscience considĆ©ra tour Ć  tour ces deux hommes ainsi placĆ©s devant elle, l'Ć©vĆŖque et Jean Valjean. Il n'avait pas fallu moins que le premier pour dĆ©tremper le second. Par un de ces effets singuliers qui sont propres Ć  ces sortes d'extases, Ć  mesure que sa rĆŖverie se prolongeait, l'Ć©vĆŖque grandissait et resplendissait Ć  ses yeux, Jean Valjean s'amoindrissait et s'effaƧait. ƀ un certain moment il ne fut plus qu'une ombre. Tout Ć  coup il disparut. L'Ć©vĆŖque seul Ć©tait restĆ©. Il remplissait toute l'Ć¢me de ce misĆ©rable d'un rayonnement magnifique. Jean Valjean pleura longtemps. Il pleura Ć  chaudes larmes, il pleura Ć  sanglots, avec plus de faiblesse qu'une femme, avec plus d'effroi qu'un enfant. Pendant qu'il pleurait, le jour se faisait de plus en plus dans son cerveau, un jour extraordinaire, un jour ravissant et terrible Ć  la fois. Sa vie passĆ©e, sa premiĆØre faute, sa longue expiation, son abrutissement extĆ©rieur, son endurcissement intĆ©rieur, sa mise en libertĆ© rĆ©jouie par tant de plans de vengeance, ce qui lui Ć©tait arrivĆ© chez l'Ć©vĆŖque, la derniĆØre chose qu'il avait faite, ce vol de quarante sous Ć  un enfant, crime d'autant plus lĆ¢che et d'autant plus monstrueux qu'il venait aprĆØs le pardon de l'Ć©vĆŖque, tout cela lui revint et lui apparut, clairement, mais dans une clartĆ© qu'il n'avait jamais vue jusque-lĆ . Il regarda sa vie, et elle lui parut horrible; son Ć¢me, et elle lui parut affreuse. Cependant un jour doux Ć©tait sur cette vie et sur cette Ć¢me. Il lui semblait qu'il voyait Satan Ć  la lumiĆØre du paradis. Combien d'heures pleura-t-il ainsi? que fit-il aprĆØs avoir pleurĆ©? où alla-t-il? on ne l'a jamais su. Il paraĆ®t seulement avĆ©rĆ© que, dans cette mĆŖme nuit, le voiturier qui faisait Ć  cette Ć©poque le service de Grenoble et qui arrivait Ć  Digne vers trois heures du matin, vit en traversant la rue de l'Ć©vĆŖchĆ© un homme dans l'attitude de la priĆØre, Ć  genoux sur le pavĆ©, dans l'ombre, devant la porte de monseigneur Bienvenu. Livre troisiĆØme--En l'annĆ©e 1817 Chapitre I L'annĆ©e 1817 1817 est l'annĆ©e que Louis XVIII, avec un certain aplomb royal qui ne manquait pas de fiertĆ©, qualifiait la vingt-deuxiĆØme de son rĆØgne. C'est l'annĆ©e où M. BruguiĆØre de Sorsum Ć©tait cĆ©lĆØbre. Toutes les boutiques des perruquiers, espĆ©rant la poudre et le retour de l'oiseau royal, Ć©taient badigeonnĆ©es d'azur et fleurdelysĆ©es. C'Ć©tait le temps candide où le comte Lynch siĆ©geait tous les dimanches comme marguillier au banc d'oeuvre de Saint-Germain-des-PrĆ©s en habit de pair de France, avec son cordon rouge et son long nez, et cette majestĆ© de profil particuliĆØre Ć  un homme qui a fait une action d'Ć©clat. L'action d'Ć©clat commise par M. Lynch Ć©tait ceci: avoir, Ć©tant maire de Bordeaux, le 12 mars 1814, donnĆ© la ville un peu trop tĆ“t Ć  M. le duc d'AngoulĆŖme. De lĆ  sa pairie. En 1817, la mode engloutissait les petits garƧons de quatre Ć  six ans sous de vastes casquettes en cuir maroquinĆ© Ć  oreillons assez ressemblantes Ć  des mitres d'esquimaux. L'armĆ©e franƧaise Ć©tait vĆŖtue de blanc, Ć  l'autrichienne; les rĆ©giments s'appelaient lĆ©gions; au lieu de chiffres ils portaient les noms des dĆ©partements. NapolĆ©on Ć©tait Ć  Sainte-HĆ©lĆØne, et, comme l'Angleterre lui refusait du drap vert, il faisait retourner ses vieux habits. En 1817, Pellegrini chantait, mademoiselle Bigottini dansait; Potier rĆ©gnait; Odry n'existait pas encore. Madame Saqui succĆ©dait Ć  Forioso. Il y avait encore des Prussiens en France. M. Delalot Ć©tait un personnage. La lĆ©gitimitĆ© venait de s'affirmer en coupant le poing, puis la tĆŖte, Ć  Pleignier, Ć  Carbonneau et Ć  Tolleron. Le prince de Talleyrand, grand chambellan, et l'abbĆ© Louis, ministre dĆ©signĆ© des finances, se regardaient en riant du rire de deux augures; tous deux avaient cĆ©lĆ©brĆ©, le 14 juillet 1790, la messe de la FĆ©dĆ©ration au Champ de Mars; Talleyrand l'avait dite comme Ć©vĆŖque, Louis l'avait servie comme diacre. En 1817, dans les contre-allĆ©es de ce mĆŖme Champ de Mars, on apercevait de gros cylindres de bois, gisant sous la pluie, pourrissant dans l'herbe, peints en bleu avec des traces d'aigles et d'abeilles dĆ©dorĆ©es. C'Ć©taient les colonnes qui, deux ans auparavant, avaient soutenu l'estrade de l'empereur au Champ-de-Mai. Elles Ć©taient noircies ƧƠ et lĆ  de la brĆ»lure du bivouac des Autrichiens baraquĆ©s prĆØs du Gros-Caillou. Deux ou trois de ces colonnes avaient disparu dans les feux de ces bivouacs et avaient chauffĆ© les larges mains des _kaiserlicks_. Le Champ de Mai avait eu cela de remarquable qu'il avait Ć©tĆ© tenu au mois de juin et au Champ de Mars. En cette annĆ©e 1817, deux choses Ć©taient populaires: le Voltaire-Touquet et la tabatiĆØre Ć  la Charte. L'Ć©motion parisienne la plus rĆ©cente Ć©tait le crime de Dautun qui avait jetĆ© la tĆŖte de son frĆØre dans le bassin du MarchĆ©-aux-Fleurs. On commenƧait Ć  faire au ministĆØre de la marine une enquĆŖte sur cette fatale frĆ©gate de la MĆ©duse qui devait couvrir de honte Chaumareix et de gloire GĆ©ricault. Le colonel Selves allait en Ɖgypte pour y devenir Soliman pacha. Le palais des Thermes, rue de la Harpe, servait de boutique Ć  un tonnelier. On voyait encore sur la plate-forme de la tour octogone de l'hĆ“tel de Cluny la petite logette en planches qui avait servi d'observatoire Ć  Messier, astronome de la marine sous Louis XVI. La duchesse de Duras lisait Ć  trois ou quatre amis, dans son boudoir meublĆ© d'X en satin bleu ciel, _Ourika_ inĆ©dite. On grattait les N au Louvre. Le pont d'Austerlitz abdiquait et s'intitulait pont du Jardin du Roi, double Ć©nigme qui dĆ©guisait Ć  la fois le pont d'Austerlitz et le jardin des Plantes. Louis XVIII, prĆ©occupĆ©, tout en annotant du coin de l'ongle Horace, des hĆ©ros qui se font empereurs et des sabotiers qui se font dauphins, avait deux soucis: NapolĆ©on et Mathurin Bruneau. L'acadĆ©mie franƧaise donnait pour sujet de prix: _Le bonheur que procure l'Ć©tude_. M. Bellart Ć©tait officiellement Ć©loquent. On voyait germer Ć  son ombre ce futur avocat gĆ©nĆ©ral de BroĆØ, promis aux sarcasmes de Paul-Louis Courier. Il y avait un faux Chateaubriand appelĆ© Marchangy, en attendant qu'il y eut un faux Marchangy appelĆ© d'Arlincourt. _Claire d'Albe_ et _Malek-Adel_ Ć©taient des chefs-d'oeuvre; madame Cottin Ć©tait dĆ©clarĆ©e le premier Ć©crivain de l'Ć©poque. L'institut laissait rayer de sa liste l'acadĆ©micien NapolĆ©on Bonaparte. Une ordonnance royale Ć©rigeait AngoulĆŖme en Ć©cole de marine, car, le duc d'AngoulĆŖme Ć©tant grand amiral, il Ć©tait Ć©vident que la ville d'AngoulĆŖme avait de droit toutes les qualitĆ©s d'un port de mer, sans quoi le principe monarchique eĆ»t Ć©tĆ© entamĆ©. On agitait en conseil des ministres la question de savoir si l'on devait tolĆ©rer les vignettes reprĆ©sentant des voltiges qui assaisonnaient les affiches de Franconi et qui attroupaient les polissons des rues. M. PaĆ«r, auteur de l'_Agnese_, bonhomme Ć  la face carrĆ©e qui avait une verrue sur la joue, dirigeait les petits concerts intimes de la marquise de Sassenaye, rue de la Ville-l'ƉvĆŖque. Toutes les jeunes filles chantaient _l'Ermite de Saint-Avelle_, paroles d'Edmond GĆ©raud. _Le Nain jaune_ se transformait en _Miroir_. Le cafĆ© Lemblin tenait pour l'empereur contre le cafĆ© Valois qui tenait pour les Bourbons. On venait de marier Ć  une princesse de Sicile M. le duc de Berry, dĆ©jĆ  regardĆ© du fond de l'ombre par Louvel. Il y avait un an que madame de StaĆ«l Ć©tait morte. Les gardes du corps sifflaient mademoiselle Mars. Les grands journaux Ć©taient tout petits. Le format Ć©tait restreint, mais la libertĆ© Ć©tait grande. _Le Constitutionnel_ Ć©tait constitutionnel. _La Minerve_ appelait Chateaubriand _Chateaubriant_. Ce _t_ faisait beaucoup rire les bourgeois aux dĆ©pens du grand Ć©crivain. Dans des journaux vendus, des journalistes prostituĆ©s insultaient les proscrits de 1815; David n'avait plus de talent, Arnault n'avait plus d'esprit, Carnot n'avait plus de probitĆ©; Soult n'avait gagnĆ© aucune bataille; il est vrai que NapolĆ©on n'avait plus de gĆ©nie. Personne n'ignore qu'il est assez rare que les lettres adressĆ©es par la poste Ć  un exilĆ© lui parviennent, les polices se faisant un religieux devoir de les intercepter. Le fait n'est point nouveau; Descartes, banni, s'en plaignait. Or, David ayant, dans un journal belge, montrĆ© quelque humeur de ne pas recevoir les lettres qu'on lui Ć©crivait, ceci paraissait plaisant aux feuilles royalistes qui bafouaient Ć  cette occasion le proscrit. Dire: _les rĆ©gicides_, ou dire: _les votants_, dire: _les ennemis_, ou dire: _les alliĆ©s_, dire: _NapolĆ©on_, ou dire: _Buonaparte_, cela sĆ©parait deux hommes plus qu'un abĆ®me. Tous les gens de bons sens convenaient que l'ĆØre des rĆ©volutions Ć©tait Ć  jamais fermĆ©e par le roi Louis XVIII, surnommĆ© Ā«l'immortel auteur de la charteĀ». Au terre-plein du Pont-Neuf, on sculptait le mot _Redivivus_, sur le piĆ©destal qui attendait la statue de Henri IV. M. Piet Ć©bauchait, rue ThĆ©rĆØse, n° 4, son conciliabule pour consolider la monarchie. Les chefs de la droite disaient dans les conjonctures graves: Ā«Il faut Ć©crire Ć  BacotĀ». MM. Canuel, O'Mahony et de Chappedelaine esquissaient, un peu approuvĆ©s de Monsieur, ce qui devait ĆŖtre plus tard Ā«la conspiration du bord de l'eauĀ». L'Ɖpingle Noire complotait de son cĆ“tĆ©. Delaverderie s'abouchait avec Trogoff. M. Decazes, esprit dans une certaine mesure libĆ©ral, dominait. Chateaubriand, debout tous les matins devant sa fenĆŖtre du n° 27 de la rue Saint-Dominique, en pantalon Ć  pieds et en pantoufles, ses cheveux gris coiffĆ©s d'un madras, les yeux fixĆ©s sur un miroir, une trousse complĆØte de chirurgien dentiste ouverte devant lui, se curait les dents, qu'il avait charmantes, tout en dictant des variantes de _la Monarchie selon la Charte_ Ć  M. Pilorge, son secrĆ©taire. La critique faisant autoritĆ© prĆ©fĆ©rait Lafon Ć  Talma. M. de FĆ©letz signait A.; M. Hoffmann signait Z. Charles Nodier Ć©crivait _ThĆ©rĆØse Aubert_. Le divorce Ć©tait aboli. Les lycĆ©es s'appelaient collĆØges. Les collĆ©giens, ornĆ©s au collet d'une fleur de lys d'or, s'y gourmaient Ć  propos du roi de Rome. La contre-police du chĆ¢teau dĆ©nonƧait Ć  son altesse royale Madame le portrait, partout exposĆ©, de M. le duc d'OrlĆ©ans, lequel avait meilleure mine en uniforme de colonel gĆ©nĆ©ral des houzards que M. le duc de Berry en uniforme de colonel gĆ©nĆ©ral des dragons; grave inconvĆ©nient. La ville de Paris faisait redorer Ć  ses frais le dĆ“me des Invalides. Les hommes sĆ©rieux se demandaient ce que ferait, dans telle ou telle occasion, M. de Trinquelague; M. Clausel de Montals se sĆ©parait, sur divers points, de M. Clausel de Coussergues; M. de Salaberry n'Ć©tait pas content. Le comĆ©dien Picard, qui Ć©tait de l'AcadĆ©mie dont le comĆ©dien MoliĆØre n'avait pu ĆŖtre, faisait jouer _les deux Philibert_ Ć  l'OdĆ©on, sur le fronton duquel l'arrachement des lettres laissait encore lire distinctement: THƉƂTRE DE L'IMPƉRATRICE. On prenait parti pour ou contre Cugnet de Montarlot. Fabvier Ć©tait factieux; Bavoux Ć©tait rĆ©volutionnaire. Le libraire PĆ©licier publiait une Ć©dition de Voltaire, sous ce titre: _OEuvres de Voltaire_, de l'AcadĆ©mie franƧaise. Ā«Cela fait venir les acheteursĀ», disait cet Ć©diteur naĆÆf. L'opinion gĆ©nĆ©rale Ć©tait que M. Charles Loyson, serait le gĆ©nie du siĆØcle; l'envie commenƧait Ć  le mordre, signe de gloire; et l'on faisait sur lui ce vers: _MĆŖme quand Loyson vole, on sent qu'il a des pattes._ Le cardinal Fesch refusant de se dĆ©mettre, M. de Pins, archevĆŖque d'Amasie, administrait le diocĆØse de Lyon. La querelle de la vallĆ©e des Dappes commenƧait entre la Suisse et la France par un mĆ©moire du capitaine Dufour, depuis gĆ©nĆ©ral. Saint-Simon, ignorĆ©, Ć©chafaudait son rĆŖve sublime. Il y avait Ć  l'acadĆ©mie des sciences un Fourier cĆ©lĆØbre que la postĆ©ritĆ© a oubliĆ© et dans je ne sais quel grenier un Fourier obscur dont l'avenir se souviendra. Lord Byron commenƧait Ć  poindre; une note d'un poĆØme de Millevoye l'annonƧait Ć  la France en ces termes: _un certain lord Baron_. David d'Angers s'essayait Ć  pĆ©trir le marbre. L'abbĆ© Caron parlait avec Ć©loge, en petit comitĆ© de sĆ©minaristes, dans le cul-de-sac des Feuillantines, d'un prĆŖtre inconnu nommĆ© FĆ©licitĆ© Robert qui a Ć©tĆ© plus tard Lamennais. Une chose qui fumait et clapotait sur la Seine avec le bruit d'un chien qui nage allait et venait sous les fenĆŖtres des Tuileries, du pont Royal au pont Louis XV c'Ć©tait une mĆ©canique bonne Ć  pas grand'chose, une espĆØce de joujou, une rĆŖverie d'inventeur songe-creux, une utopie: un bateau Ć  vapeur. Les Parisiens regardaient cette inutilitĆ© avec indiffĆ©rence. M. de Vaublanc, rĆ©formateur de l'Institut par coup d'Ɖtat, ordonnance et fournĆ©e, auteur distinguĆ© de plusieurs acadĆ©miciens, aprĆØs en avoir fait, ne pouvait parvenir Ć  l'ĆŖtre. Le faubourg Saint-Germain et la pavillon Marsan souhaitaient pour prĆ©fet de police M. Delaveau, Ć  cause de sa dĆ©votion. Dupuytren et RĆ©camier se prenaient de querelle Ć  l'amphithéâtre de l'Ɖcole de mĆ©decine et se menaƧaient du poing Ć  propos de la divinitĆ© de JĆ©sus-Christ. Cuvier, un oeil sur la GenĆØse et l'autre sur la nature, s'efforƧait de plaire Ć  la rĆ©action bigote en mettant les fossiles d'accord avec les textes et en faisant flatter MoĆÆse par les mastodontes. M. FranƧois de NeufchĆ¢teau, louable cultivateur de la mĆ©moire de Parmentier, faisait mille efforts pour que _pomme de terre_ fĆ»t prononcĆ©e _parmentiĆØre_, et n'y rĆ©ussissait point. L'abbĆ© GrĆ©goire, ancien Ć©vĆŖque, ancien conventionnel, ancien sĆ©nateur, Ć©tait passĆ© dans la polĆ©mique royaliste Ć  l'Ć©tat Ā«d'infĆ¢me GrĆ©goireĀ». Cette locution que nous venons d'employer: _passer Ć  l'Ć©tat de_, Ć©tait dĆ©noncĆ©e comme nĆ©ologisme par M. Royer-Collard. On pouvait distinguer encore Ć  sa blancheur, sous la troisiĆØme arche du pont d'IĆ©na, la pierre neuve avec laquelle, deux ans auparavant, on avait bouchĆ© le trou de mine pratiquĆ© par Blücher pour faire sauter le pont. La justice appelait Ć  sa barre un homme qui, en voyant entrer le comte d'Artois Ć  Notre-Dame, avait dit tout haut: _Sapristi! je regrette le temps où je voyais Bonaparte et Talma entrer bras dessus bras dessous au Bal-Sauvage_. Propos sĆ©ditieux. Six mois de prison. Des traĆ®tres se montraient dĆ©boutonnĆ©s; des hommes qui avaient passĆ© Ć  l'ennemi la veille d'une bataille ne cachaient rien de la rĆ©compense et marchaient impudiquement en plein soleil dans le cynisme des richesses et des dignitĆ©s; des dĆ©serteurs de Ligny et des Quatre-Bras, dans le dĆ©braillĆ© de leur turpitude payĆ©e, Ć©talaient leur dĆ©vouement monarchique tout nu; oubliant ce qui est Ć©crit en Angleterre sur la muraille intĆ©rieure des water-closets publics: _Please adjust your dress before leaving_. VoilĆ , pĆŖle-mĆŖle, ce qui surnage confusĆ©ment de l'annĆ©e 1817, oubliĆ©e aujourd'hui. L'histoire nĆ©glige presque toutes ces particularitĆ©s, et ne peut faire autrement; l'infini l'envahirait. Pourtant ces dĆ©tails, qu'on appelle Ć  tort petits--il n'y a ni petits faits dans l'humanitĆ©, ni petites feuilles dans la vĆ©gĆ©tation--sont utiles. C'est de la physionomie des annĆ©es que se compose la figure des siĆØcles. En cette annĆ©e 1817, quatre jeunes Parisiens firent Ā«une bonne farceĀ». Chapitre II Double quatuor Ces Parisiens Ć©taient l'un de Toulouse, l'autre de Limoges, le troisiĆØme de Cahors et le quatriĆØme de Montauban; mais ils Ć©taient Ć©tudiants, et qui dit Ć©tudiant dit parisien; Ć©tudier Ć  Paris, c'est naĆ®tre Ć  Paris. Ces jeunes gens Ć©taient insignifiants; tout le monde a vu ces figures-lĆ ; quatre Ć©chantillons du premier venu; ni bons ni mauvais, ni savants ni ignorants, ni des gĆ©nies ni des imbĆ©ciles; beaux de ce charmant avril qu'on appelle vingt ans. C'Ć©taient quatre Oscars quelconques, car Ć  cette Ć©poque les Arthurs n'existaient pas encore. _BrĆ»lez pour lui les parfums d'Arabie_, s'Ć©criait la romance, _Oscar s'avance, Oscar, je vais le voir!_ On sortait d'Ossian, l'Ć©lĆ©gance Ć©tait scandinave et calĆ©donienne, le genre anglais pur ne devait prĆ©valoir que plus tard, et le premier des Arthurs, Wellington, venait Ć  peine de gagner la bataille de Waterloo. Ces Oscars s'appelaient l'un FĆ©lix TholomyĆØs, de Toulouse; l'autre Listolier, de Cahors; l'autre Fameuil, de Limoges; le dernier Blachevelle, de Montauban. Naturellement chacun avait sa maĆ®tresse. Blachevelle aimait Favourite, ainsi nommĆ©e parce qu'elle Ć©tait allĆ©e en Angleterre; Listolier adorait Dahlia, qui avait pris pour nom de guerre un nom de fleur; Fameuil idolĆ¢trait ZĆ©phine, abrĆ©gĆ© de JosĆ©phine; TholomyĆØs avait Fantine, dite la Blonde Ć  cause de ses beaux cheveux couleur de soleil. Favourite, Dahlia, ZĆ©phine et Fantine Ć©taient quatre ravissantes filles, parfumĆ©es et radieuses, encore un peu ouvriĆØres, n'ayant pas tout Ć  fait quittĆ© leur aiguille, dĆ©rangĆ©es par les amourettes, mais ayant sur le visage un reste de la sĆ©rĆ©nitĆ© du travail et dans l'Ć¢me cette fleur d'honnĆŖtetĆ© qui dans la femme survit Ć  la premiĆØre chute. Il y avait une des quatre qu'on appelait la jeune, parce qu'elle Ć©tait la cadette; et une qu'on appelait la vieille. La vieille avait vingt-trois ans. Pour ne rien celer, les trois premiĆØres Ć©taient plus expĆ©rimentĆ©es, plus insouciantes et plus envolĆ©es dans le bruit de la vie que Fantine la Blonde, qui en Ć©tait Ć  sa premiĆØre illusion. Dahlia, ZĆ©phine, et surtout Favourite, n'en auraient pu dire autant. Il y avait dĆ©jĆ  plus d'un Ć©pisode Ć  leur roman Ć  peine commencĆ©, et l'amoureux, qui s'appelait Adolphe au premier chapitre, se trouvait ĆŖtre Alphonse au second, et Gustave au troisiĆØme. PauvretĆ© et coquetterie sont deux conseillĆØres fatales, l'une gronde, l'autre flatte; et les belles filles du peuple les ont toutes les deux qui leur parlent bas Ć  l'oreille, chacune de son cĆ“tĆ©. Ces Ć¢mes mal gardĆ©es Ć©coutent. De lĆ  les chutes qu'elles font et les pierres qu'on leur jette. On les accable avec la splendeur de tout ce qui est immaculĆ© et inaccessible. HĆ©las! si la _Yungfrau_ avait faim? Favourite, ayant Ć©tĆ© en Angleterre, avait pour admiratrices ZĆ©phine et Dahlia. Elle avait eu de trĆØs bonne heure un chez-soi. Son pĆØre Ć©tait un vieux professeur de mathĆ©matiques brutal et qui gasconnait; point mariĆ©, courant le cachet malgrĆ© l'Ć¢ge. Ce professeur, Ć©tant jeune, avait vu un jour la robe d'une femme de chambre s'accrocher Ć  un garde-cendre; il Ć©tait tombĆ© amoureux de cet accident. Il en Ć©tait rĆ©sultĆ© Favourite. Elle rencontrait de temps en temps son pĆØre, qui la saluait. Un matin, une vieille femme Ć  l'air bĆ©guin Ć©tait entrĆ©e chez elle et lui avait dit: --Vous ne me connaissez pas, mademoiselle? --Non. --Je suis ta mĆØre. Puis la vieille avait ouvert le buffet, bu et mangĆ©, fait apporter un matelas qu'elle avait, et s'Ć©tait installĆ©e. Cette mĆØre, grognon et dĆ©vote, ne parlait jamais Ć  Favourite, restait des heures sans souffler mot, dĆ©jeunait, dĆ®nait et soupait comme quatre, et descendait faire salon chez le portier, où elle disait du mal de sa fille. Ce qui avait entraĆ®nĆ© Dahlia vers Listolier, vers d'autres peut-ĆŖtre, vers l'oisivetĆ©, c'Ć©tait d'avoir de trop jolis ongles roses. Comment faire travailler ces ongles-lĆ ? Qui veut rester vertueuse ne doit pas avoir pitiĆ© de ses mains. Quant Ć  ZĆ©phine, elle avait conquis Fameuil par sa petite maniĆØre mutine et caressante de dire: Ā«Oui, monsieurĀ». Les jeunes gens Ć©tant camarades, les jeunes filles Ć©taient amies. Ces amours-lĆ  sont toujours doublĆ©s de ces amitiĆ©s-lĆ . Sage et philosophe, c'est deux; et ce qui le prouve, c'est que, toutes rĆ©serves faites sur ces petits mĆ©nages irrĆ©guliers, Favourite, ZĆ©phine et Dahlia Ć©taient des filles philosophes, et Fantine une fille sage. Sage, dira-t-on? et TholomyĆØs? Salomon rĆ©pondrait que l'amour fait partie de la sagesse. Nous nous bornons Ć  dire que l'amour de Fantine Ć©tait un premier amour, un amour unique, un amour fidĆØle. Elle Ć©tait la seule des quatre qui ne fĆ»t tutoyĆ©e que par un seul. Fantine Ć©tait un de ces ĆŖtres comme il en Ć©clĆ“t, pour ainsi dire, au fond du peuple. Sortie des plus insondables Ć©paisseurs de l'ombre sociale, elle avait au front le signe de l'anonyme et de l'inconnu. Elle Ć©tait nĆ©e Ć  Montreuil-sur-mer. De quels parents? Qui pourrait le dire? On ne lui avait jamais connu ni pĆØre ni mĆØre. Elle se nommait Fantine. Pourquoi Fantine? On ne lui avait jamais connu d'autre nom. ƀ l'Ć©poque de sa naissance, le Directoire existait encore. Point de nom de famille, elle n'avait pas de famille; point de nom de baptĆŖme, l'Ć©glise n'Ć©tait plus lĆ . Elle s'appela comme il plut au premier passant qui la rencontra toute petite, allant pieds nus dans la rue. Elle reƧut un nom comme elle recevait l'eau des nuĆ©es sur son front quand il pleuvait. On l'appela la petite Fantine. Personne n'en savait davantage. Cette crĆ©ature humaine Ć©tait venue dans la vie comme cela. ƀ dix ans, Fantine quitta la ville et s'alla mettre en service chez des fermiers des environs. ƀ quinze ans, elle vint Ć  Paris "chercher fortune". Fantine Ć©tait belle et resta pure le plus longtemps qu'elle put. C'Ć©tait une jolie blonde avec de belles dents. Elle avait de l'or et des perles pour dot, mais son or Ć©tait sur sa tĆŖte et ses perles Ć©taient dans sa bouche. Elle travailla pour vivre; puis, toujours pour vivre, car le coeur a sa faim aussi, elle aima. Elle aima TholomyĆØs. Amourette pour lui, passion pour elle. Les rues du quartier latin, qu'emplit le fourmillement des Ć©tudiants et des grisettes, virent le commencement de ce songe. Fantine, dans ces dĆ©dales de la colline du PanthĆ©on, où tant d'aventures se nouent et se dĆ©nouent, avait fui longtemps TholomyĆØs, mais de faƧon Ć  le rencontrer toujours. Il y a une maniĆØre d'Ć©viter qui ressemble Ć  chercher. Bref, l'Ć©glogue eut lieu. Blachevelle, Listolier et Fameuil formaient une sorte de groupe dont TholomyĆØs Ć©tait la tĆŖte. C'Ć©tait lui qui avait l'esprit. TholomyĆØs Ć©tait l'antique Ć©tudiant vieux; il Ć©tait riche; il avait quatre mille francs de rente; quatre mille francs de rente, splendide scandale sur la montagne Sainte-GeneviĆØve. TholomyĆØs Ć©tait un viveur de trente ans, mal conservĆ©. Il Ć©tait ridĆ© et Ć©dentĆ©; et il Ć©bauchait une calvitie dont il disait lui-mĆŖme sans tristesse: _crĆ¢ne Ć  trente ans, genou Ć  quarante_. Il digĆ©rait mĆ©diocrement, et il lui Ć©tait venu un larmoiement Ć  un oeil. Mais Ć  mesure que sa jeunesse s'Ć©teignait, il allumait sa gaĆ®tĆ©; il remplaƧait ses dents par des lazzis, ses cheveux par la joie, sa santĆ© par l'ironie, et son oeil qui pleurait riait sans cesse. Il Ć©tait dĆ©labrĆ©, mais tout en fleurs. Sa jeunesse, pliant bagage bien avant l'Ć¢ge, battait en retraite en bon ordre, Ć©clatait de rire, et l'on n'y voyait que du feu. Il avait eu une piĆØce refusĆ©e au Vaudeville. Il faisait ƧƠ et lĆ  des vers quelconques. En outre, il doutait supĆ©rieurement de toute chose, grande force aux yeux des faibles. Donc, Ć©tant ironique et chauve, il Ć©tait le chef. _Iron_ est un mot anglais qui veut dire fer. Serait-ce de lĆ  que viendrait ironie? Un jour TholomyĆØs prit Ć  part les trois autres, fĆ®t un geste d'oracle, et leur dit: --Il y a bientĆ“t un an que Fantine, Dahlia, ZĆ©phine et Favourite nous demandent de leur faire une surprise. Nous la leur avons promise solennellement. Elles nous en parlent toujours, Ć  moi surtout. De mĆŖme qu'Ć  Naples les vieilles femmes crient Ć  saint Janvier: _Faccia gialluta, fa o miracolo_. Face jaune, fais ton miracle! nos belles me disent sans cesse: Ā«TholomyĆØs, quand accoucheras-tu de ta surprise?Ā» En mĆŖme temps nos parents nous Ć©crivent. Scie des deux cĆ“tĆ©s. Le moment me semble venu. Causons. Sur ce, TholomyĆØs baissa la voix, et articula mystĆ©rieusement quelque chose de si gai qu'un vaste et enthousiaste ricanement sortit des quatre bouches Ć  la fois et que Blachevelle s'Ć©cria: --Ƈa, c'est une idĆ©e! Un estaminet plein de fumĆ©e se prĆ©senta, ils y entrĆØrent, et le reste de leur confĆ©rence se perdit dans l'ombre. Le rĆ©sultat de ces tĆ©nĆØbres fut une Ć©blouissante partie de plaisir qui eut lieu le dimanche suivant, les quatre jeunes gens invitant les quatre jeunes filles. Chapitre III Quatre Ć  quatre Ce qu'Ć©tait une partie de campagne d'Ć©tudiants et de grisettes, il y a quarante-cinq ans, on se le reprĆ©sente malaisĆ©ment aujourd'hui. Paris n'a plus les mĆŖmes environs; la figure de ce qu'on pourrait appeler la vie circumparisienne a complĆØtement changĆ© depuis un demi-siĆØcle; où il y avait le coucou, il y a le wagon; où il y avait la patache, il y a le bateau Ć  vapeur; on dit aujourd'hui FĆ©camp comme on disait Saint-Cloud. Le Paris de 1862 est une ville qui a la France pour banlieue. Les quatre couples accomplirent consciencieusement toutes les folies champĆŖtres possibles alors. On entrait dans les vacances, et c'Ć©tait une chaude et claire journĆ©e d'Ć©tĆ©. La veille, Favourite, la seule qui sĆ»t Ć©crire, avait Ć©crit ceci Ć  TholomyĆØs au nom des quatre: Ā«C'est un bonne heure de sortir de bonheur.Ā» C'est pourquoi ils se levĆØrent Ć  cinq heures du matin. Puis ils allĆØrent Ć  Saint-Cloud par le coche, regardĆØrent la cascade Ć  sec, et s'Ć©criĆØrent: Ā«Cela doit ĆŖtre bien beau quand il y a de l'eau!Ā» dĆ©jeunĆØrent Ć  la _TĆŖte-Noire_, où Castaing n'avait pas encore passĆ©, se payĆØrent une partie de bagues au quinconce du grand bassin, montĆØrent Ć  la lanterne de DiogĆØne, jouĆØrent des macarons Ć  la roulette du pont de SĆØvres, cueillirent des bouquets Ć  Puteaux, achetĆØrent des mirlitons Ć  Neuilly, mangĆØrent partout des chaussons de pommes, furent parfaitement heureux. Les jeunes filles bruissaient et bavardaient comme des fauvettes Ć©chappĆ©es. C'Ć©tait un dĆ©lire. Elles donnaient par moments de petites tapes aux jeunes gens. Ivresse matinale de la vie! Adorables annĆ©es! L'aile des libellules frissonne. Oh! qui que vous soyez, vous souvenez-vous? Avez-vous marchĆ© dans les broussailles, en Ć©cartant les branches Ć  cause de la tĆŖte charmante qui vient derriĆØre vous? Avez-vous glissĆ© en riant sur quelque talus mouillĆ© par la pluie avec une femme aimĆ©e qui vous retient par la main et qui s'Ć©crie: Ā«Ah! mes brodequins tout neufs! dans quel Ć©tat ils sont!Ā» Disons tout de suite que cette joyeuse contrariĆ©tĆ©, une ondĆ©e, manqua Ć  cette compagnie de belle humeur, quoique Favourite eĆ»t dit en partant, avec un accent magistral et maternel: _Les limaces se promĆØnent dans les sentiers. Signe de pluie, mes enfants_. Toutes quatre Ć©taient follement jolies. Un bon vieux poĆØte classique, alors en renom, un bonhomme qui avait une ƉlĆ©onore, M. le chevalier de LabouĆÆsse, errant ce jour-lĆ  sous les marronniers de Saint-Cloud, les vit passer vers dix heures du matin; il s'Ć©cria: _Il y en a une de trop_, songeant aux GrĆ¢ces. Favourite, l'amie de Blachevelle, celle de vingt-trois ans, la vieille, courait en avant sous les grandes branches vertes, sautait les fossĆ©s, enjambait Ć©perdument les buissons, et prĆ©sidait cette gaĆ®tĆ© avec une verve de jeune faunesse. ZĆ©phine et Dahlia, que le hasard avait faites belles de faƧon qu'elles se faisaient valoir en se rapprochant et se complĆ©taient, ne se quittaient point, par instinct de coquetterie plus encore que par amitiĆ©, et, appuyĆ©es l'une Ć  l'autre, prenaient des poses anglaises; les premiers _keepsakes_ venaient de paraĆ®tre, la mĆ©lancolie pointait pour les femmes, comme, plus tard, le byronisme pour les hommes, et les cheveux du sexe tendre commenƧaient Ć  s'Ć©plorer. ZĆ©phine et Dahlia Ć©taient coiffĆ©es en rouleaux. Listolier et Fameuil, engagĆ©s dans une discussion sur leurs professeurs, expliquaient Ć  Fantine la diffĆ©rence qu'il y avait entre M. Delvincourt et M. Blondeau. Blachevelle semblait avoir Ć©tĆ© crƩƩ expressĆ©ment pour porter sur son bras le dimanche le chĆ¢le-ternaux boiteux de Favourite. TholomyĆØs suivait, dominant le groupe. Il Ć©tait trĆØs gai, mais on sentait en lui le gouvernement; il y avait de la dictature dans sa jovialitĆ©; son ornement principal Ć©tait un pantalon jambes-d'Ć©lĆ©phant, en nankin, avec sous-pieds de tresse de cuivre; il avait un puissant rotin de deux cents francs Ć  la main, et, comme il se permettait tout, une chose Ć©trange appelĆ©e cigare, Ć  la bouche. Rien n'Ć©tant sacrĆ© pour lui, il fumait. --Ce TholomyĆØs est Ć©tonnant, disaient les autres avec vĆ©nĆ©ration. Quels pantalons! quelle Ć©nergie! Quant Ć  Fantine, c'Ć©tait la joie. Ses dents splendides avaient Ć©videmment reƧu de Dieu une fonction, le rire. Elle portait Ć  sa main plus volontiers que sur sa tĆŖte son petit chapeau de paille cousue, aux longues brides blanches. Ses Ć©pais cheveux blonds, enclins Ć  flotter et facilement dĆ©nouĆ©s et qu'il fallait rattacher sans cesse, semblaient faits pour la fuite de GalatĆ©e sous les saules. Ses lĆØvres roses babillaient avec enchantement. Les coins de sa bouche voluptueusement relevĆ©s, comme aux mascarons antiques d'Ɖrigone, avaient l'air d'encourager les audaces; mais ses longs cils pleins d'ombre s'abaissaient discrĆØtement sur ce brouhaha du bas du visage comme pour mettre le holĆ . Toute sa toilette avait on ne sait quoi de chantant et de flambant. Elle avait une robe de barĆØge mauve, de petits souliers-cothurnes mordorĆ©s dont les rubans traƧaient des X sur son fin bas blanc Ć  jour, et cette espĆØce de spencer en mousseline, invention marseillaise, dont le nom, canezou, corruption du mot _quinze aoĆ»t_ prononcĆ© Ć  la CanebiĆØre, signifie beau temps, chaleur et midi. Les trois autres, moins timides, nous l'avons dit, Ć©taient dĆ©colletĆ©es tout net, ce qui, l'Ć©tĆ©, sous des chapeaux couverts de fleurs, a beaucoup de grĆ¢ce et d'agacerie; mais, Ć  cĆ“tĆ© de ces ajustements hardis, le canezou de la blonde Fantine, avec ses transparences, ses indiscrĆ©tions et ses rĆ©ticences, cachant et montrant Ć  la fois, semblait une trouvaille provocante de la dĆ©cence, et la fameuse cour d'amour, prĆ©sidĆ©e par la vicomtesse de Cette aux yeux vert de mer, eĆ»t peut-ĆŖtre donnĆ© le prix de la coquetterie Ć  ce canezou qui concourait pour la chastetĆ©. Le plus naĆÆf est quelquefois le plus savant. Cela arrive. Ɖclatante de face, dĆ©licate de profil, les yeux d'un bleu profond, les paupiĆØres grasses, les pieds cambrĆ©s et petits, les poignets et les chevilles admirablement emboĆ®tĆ©s, la peau blanche laissant voir ƧƠ et lĆ  les arborescences azurĆ©es des veines, la joue puĆ©rile et franche, le cou robuste des Junons Ć©ginĆ©tiques, la nuque forte et souple, les Ć©paules modelĆ©es comme par Coustou, ayant au centre une voluptueuse fossette visible Ć  travers la mousseline; une gaĆ®tĆ© glacĆ©e de rĆŖverie; sculpturale et exquise; telle Ć©tait Fantine; et l'on devinait sous ces chiffons une statue, et dans cette statue une Ć¢me. Fantine Ć©tait belle, sans trop le savoir. Les rares songeurs, prĆŖtres mystĆ©rieux du beau, qui confrontent silencieusement toute chose Ć  la perfection, eussent entrevu en cette petite ouvriĆØre, Ć  travers la transparence de la grĆ¢ce parisienne, l'antique euphonie sacrĆ©e. Cette fille de l'ombre avait de la race. Elle Ć©tait belle sous les deux espĆØces, qui sont le style et le rythme. Le style est la forme de l'idĆ©al; le rythme en est le mouvement. Nous avons dit que Fantine Ć©tait la joie, Fantine Ć©tait aussi la pudeur. Pour un observateur qui l'eĆ»t Ć©tudiĆ©e attentivement, ce qui se dĆ©gageait d'elle, Ć  travers toute cette ivresse de l'Ć¢ge, de la saison et de l'amourette, c'Ć©tait une invincible expression de retenue et de modestie. Elle restait un peu Ć©tonnĆ©e. Ce chaste Ć©tonnement-lĆ  est la nuance qui sĆ©pare PsychĆ© de VĆ©nus. Fantine avait les longs doigts blancs et fins de la vestale qui remue les cendres du feu sacrĆ© avec une Ć©pingle d'or. Quoiqu'elle n'eĆ»t rien refusĆ©, on ne le verra que trop, Ć  TholomyĆØs, son visage, au repos, Ć©tait souverainement virginal; une sorte de dignitĆ© sĆ©rieuse et presque austĆØre l'envahissait soudainement Ć  de certaines heures, et rien n'Ć©tait singulier et troublant comme de voir la gaĆ®tĆ© s'y Ć©teindre si vite et le recueillement y succĆ©der sans transition Ć  l'Ć©panouissement. Cette gravitĆ© subite, parfois sĆ©vĆØrement accentuĆ©e, ressemblait au dĆ©dain d'une dĆ©esse. Son front, son nez et son menton offraient cet Ć©quilibre de ligne, trĆØs distinct de l'Ć©quilibre de proportion, et d'où rĆ©sulte l'harmonie du visage; dans l'intervalle si caractĆ©ristique qui sĆ©pare la base du nez de la lĆØvre supĆ©rieure, elle avait ce pli imperceptible et charmant, signe mystĆ©rieux de la chastetĆ© qui rendit Barberousse amoureux d'une Diane trouvĆ©e dans les fouilles d'IcĆ“ne. L'amour est une faute; soit. Fantine Ć©tait l'innocence surnageant sur la faute. Chapitre IV TholomyĆØs est si joyeux qu'il chante une chanson espagnole Cette journĆ©e-lĆ  Ć©tait d'un bout Ć  l'autre faite d'aurore. Toute la nature semblait avoir congĆ©, et rire. Les parterres de Saint-Cloud embaumaient; le souffle de la Seine remuait vaguement les feuilles; les branches gesticulaient dans le vent; les abeilles mettaient les jasmins au pillage; toute une bohĆØme de papillons s'Ć©battait dans les achillĆ©es, les trĆØfles et les folles avoines; il y avait dans l'auguste parc du roi de France un tas de vagabonds, les oiseaux. Les quatre joyeux couples, mĆŖlĆ©s au soleil, aux champs, aux fleurs, aux arbres, resplendissaient. Et, dans cette communautĆ© de paradis, parlant, chantant, courant, dansant, chassant aux papillons, cueillant des liserons, mouillant leurs bas Ć  jour roses dans les hautes herbes, fraĆ®ches, folles, point mĆ©chantes, toutes recevaient un peu ƧƠ et lĆ  les baisers de tous, exceptĆ© Fantine, enfermĆ©e dans sa vague rĆ©sistance rĆŖveuse et farouche, et qui aimait. --Toi, lui disait Favourite, tu as toujours l'air chose. Ce sont lĆ  les joies. Ces passages de couples heureux sont un appel profond Ć  la vie et Ć  la nature, et font sortir de tout la caresse et la lumiĆØre. Il y avait une fois une fĆ©e qui fit les prairies et les arbres exprĆØs pour les amoureux. De lĆ  cette Ć©ternelle Ć©cole buissonniĆØre des amants qui recommence sans cesse et qui durera tant qu'il y aura des buissons et des Ć©coliers. De lĆ  la popularitĆ© du printemps parmi les penseurs. Le patricien et le gagne-petit, le duc et pair et le robin, les gens de la cour et les gens de la ville, comme on parlait autrefois, tous sont sujets de cette fĆ©e. On rit, on se cherche, il y a dans l'air une clartĆ© d'apothĆ©ose, quelle transfiguration que d'aimer! Les clercs de notaire sont des dieux. Et les petits cris, les poursuites dans l'herbe, les tailles prises au vol, ces jargons qui sont des mĆ©lodies, ces adorations qui Ć©clatent dans la faƧon de dire une syllabe, ces cerises arrachĆ©es d'une bouche Ć  l'autre, tout cela flamboie et passe dans des gloires cĆ©lestes. Les belles filles font un doux gaspillage d'elles-mĆŖmes. On croit que cela ne finira jamais. Les philosophes, les poĆØtes, les peintres regardent ces extases et ne savent qu'en faire, tant cela les Ć©blouit. Le dĆ©part pour CythĆØre! s'Ć©crie Watteau; Lancret, le peintre de la roture, contemple ses bourgeois envolĆ©s dans le bleu; Diderot tend les bras Ć  toutes ces amourettes, et d'UrfĆ© y mĆŖle des druides. AprĆØs le dĆ©jeuner les quatre couples Ć©taient allĆ©s voir, dans ce qu'on appelait alors le carrĆ© du roi, une plante nouvellement arrivĆ©e de l'Inde, dont le nom nous Ć©chappe en ce moment, et qui Ć  cette Ć©poque attirait tout Paris Ć  Saint-Cloud; c'Ć©tait un bizarre et charmant arbrisseau haut sur tige, dont les innombrables branches fines comme des fils, Ć©bouriffĆ©es, sans feuilles, Ć©taient couvertes d'un million de petites rosettes blanches; ce qui faisait que l'arbuste avait l'air d'une chevelure pouilleuse de fleurs. Il y avait toujours foule Ć  l'admirer. L'arbuste vu, TholomyĆØs s'Ć©tait Ć©criĆ©: Ā«J'offre des Ć¢nes!Ā» et, prix fait avec un Ć¢nier, ils Ć©taient revenus par Vanves et Issy. ƀ Issy, incident. Le parc, Bien National possĆ©dĆ© Ć  cette Ć©poque par le munitionnaire Bourguin, Ć©tait d'aventure tout grand ouvert. Ils avaient franchi la grille, visitĆ© l'anachorĆØte mannequin dans sa grotte, essayĆ© les petits effets mystĆ©rieux du fameux cabinet des miroirs, lascif traquenard digne d'un satyre devenu millionnaire ou de Turcaret mĆ©tamorphosĆ© en Priape. Ils avaient robustement secouĆ© le grand filet balanƧoire attachĆ© aux deux chĆ¢taigniers cĆ©lĆ©brĆ©s par l'abbĆ© de Bernis. Tout en y balanƧant ces belles l'une aprĆØs l'autre, ce qui faisait, parmi les rires universels, des plis de jupe envolĆ©e où Greuze eĆ»t trouvĆ© son compte, le toulousain TholomyĆØs, quelque peu espagnol, Toulouse est cousine de Tolosa, chantait, sur une mĆ©lopĆ©e mĆ©lancolique, la vieille chanson _gallega_ probablement inspirĆ©e par quelque belle fille lancĆ©e Ć  toute volĆ©e sur une corde entre deux arbres: _Soy de Badajoz._ _Amor me llama._ _Toda mi alma_ _Es en mi ojos_ _Porque enseƱas_ _ƀ tus piernas._ Fantine seule refusa de se balancer. --Je n'aime pas qu'on ait du genre comme Ƨa, murmura assez aigrement Favourite. Les Ć¢nes quittĆ©s, joie nouvelle; on passa la Seine en bateau, et de Passy, Ć  pied, ils gagnĆØrent la barriĆØre de l'Ɖtoile. Ils Ć©taient, on s'en souvient, debout depuis cinq heures du matin; mais, bah! _il n'y a pas de lassitude le dimanche_, disait Favourite; _le dimanche, la fatigue ne travaille pas_. Vers trois heures les quatre couples, effarĆ©s de bonheur, dĆ©gringolaient aux montagnes russes, Ć©difice singulier qui occupait alors les hauteurs Beaujon et dont on apercevait la ligne serpentante au-dessus des arbres des Champs-ƉlysĆ©es. De temps en temps Favourite s'Ć©criait: --Et la surprise? je demande la surprise. --Patience, rĆ©pondait TholomyĆØs. Chapitre V Chez Bombarda Les montagnes russes Ć©puisĆ©es, on avait songĆ© au dĆ®ner; et le radieux huitain, enfin un peu las, s'Ć©tait Ć©chouĆ© au cabaret Bombarda, succursale qu'avait Ć©tablie aux Champs-ƉlysĆ©es ce fameux restaurateur Bombarda, dont on voyait alors l'enseigne rue de Rivoli Ć  cĆ“tĆ© du passage Delorme. Une chambre grande, mais laide, avec alcĆ“ve et lit au fond (vu la plĆ©nitude du cabaret le dimanche, il avait fallu accepter ce gĆ®te); deux fenĆŖtres d'où l'on pouvait contempler, Ć  travers les ormes, le quai et la riviĆØre; un magnifique rayon d'aoĆ»t effleurant les fenĆŖtres; deux tables; sur l'une une triomphante montagne de bouquets mĆŖlĆ©s Ć  des chapeaux d'hommes et de femmes; Ć  l'autre les quatre couples attablĆ©s autour d'un joyeux encombrement de plats, d'assiettes, de verres et de bouteilles; des cruchons de biĆØre mĆŖlĆ©s Ć  des flacons de vin; peu d'ordre sur la table, quelque dĆ©sordre dessous; _Ils faisaient sous la table_ _Un bruit, un trique-trac de pieds Ć©pouvantable_ dit MoliĆØre. VoilĆ  où en Ć©tait vers quatre heures et demie du soir la bergerade commencĆ©e Ć  cinq heures du matin. Le soleil dĆ©clinait, l'appĆ©tit s'Ć©teignait. Les Champs-ƉlysĆ©es, pleins de soleil et de foule, n'Ć©taient que lumiĆØre et poussiĆØre, deux choses dont se compose la gloire. Les chevaux de Marly, ces marbres hennissants, se cabraient dans un nuage d'or. Les carrosses allaient et venaient. Un escadron de magnifiques gardes du corps, clairon en tĆŖte, descendait l'avenue de Neuilly; le drapeau blanc, vaguement rose au soleil couchant, flottait sur le dĆ“me des Tuileries. La place de la Concorde, redevenue alors place Louis XV, regorgeait de promeneurs contents. Beaucoup portaient la fleur de lys d'argent suspendue au ruban blanc moirĆ© qui, en 1817, n'avait pas encore tout Ć  fait disparu des boutonniĆØres. ƇƠ et lĆ  au milieu des passants faisant cercle et applaudissant, des rondes de petites filles jetaient au vent une bourrĆ©e bourbonienne alors cĆ©lĆØbre, destinĆ©e Ć  foudroyer les Cent-Jours, et qui avait pour ritournelle: _Rendez-nous notre pĆØre de Gand,_ _Rendez-nous notre pĆØre._ Des tas de faubouriens endimanchĆ©s, parfois mĆŖme fleurdelysĆ©s comme les bourgeois, Ć©pars dans le grand carrĆ© et dans le carrĆ© Marigny, jouaient aux bagues et tournaient sur les chevaux de bois; d'autres buvaient; quelques-uns, apprentis imprimeurs, avaient des bonnets de papier; on entendait leurs rires. Tout Ć©tait radieux. C'Ć©tait un temps de paix incontestable et de profonde sĆ©curitĆ© royaliste; c'Ć©tait l'Ć©poque où un rapport intime et spĆ©cial du prĆ©fet de police AnglĆØs au roi sur les faubourgs de Paris se terminait par ces lignes: Ā«Tout bien considĆ©rĆ©, sire, il n'y a rien Ć  craindre de ces gens-lĆ . Ils sont insouciants et indolents comme des chats. Le bas peuple des provinces est remuant, celui de Paris ne l'est pas. Ce sont tous petits hommes. Sire, il en faudrait deux bout Ć  bout pour faire un de vos grenadiers. Il n'y a point de crainte du cĆ“tĆ© de la populace de la capitale. Il est remarquable que la taille a encore dĆ©cru dans cette population depuis cinquante ans; et le peuple des faubourgs de Paris est plus petit qu'avant la rĆ©volution. Il n'est point dangereux. En somme, c'est de la canaille bonne.Ā» Qu'un chat puisse se changer en lion, les prĆ©fets de police ne le croient pas possible; cela est pourtant, et c'est lĆ  le miracle du peuple de Paris. Le chat d'ailleurs, si mĆ©prisĆ© du comte AnglĆØs, avait l'estime des rĆ©publiques antiques; il incarnait Ć  leurs yeux la libertĆ©, et, comme pour servir de pendant Ć  la Minerve aptĆØre du PirĆ©e, il y avait sur la place publique de Corinthe le colosse de bronze d'un chat. La police naĆÆve de la restauration voyait trop Ā«en beauĀ» le peuple de Paris. Ce n'est point, autant qu'on le croit, de la Ā«canaille bonneĀ». Le Parisien est au FranƧais ce que l'AthĆ©nien Ć©tait au Grec; personne ne dort mieux que lui, personne n'est plus franchement frivole et paresseux que lui, personne mieux que lui n'a l'air d'oublier; qu'on ne s'y fie pas pourtant; il est propre Ć  toute sorte de nonchalance, mais, quand il y a de la gloire au bout, il est admirable Ć  toute espĆØce de furie. Donnez-lui une pique, il fera le 10 aoĆ»t; donnez-lui un fusil, vous aurez Austerlitz. Il est le point d'appui de NapolĆ©on et la ressource de Danton. S'agit-il de la patrie? il s'enrĆ“le; s'agit-il de la libertĆ©? il dĆ©pave. Gare! ses cheveux pleins de colĆØre sont Ć©piques; sa blouse se drape en chlamyde. Prenez garde. De la premiĆØre rue Greneta venue, il fera des fourches caudines. Si l'heure sonne, ce faubourien va grandir, ce petit homme va se lever, et il regardera d'une faƧon terrible, et son souffle deviendra tempĆŖte, et il sortira de cette pauvre poitrine grĆŖle assez de vent pour dĆ©ranger les plis des Alpes. C'est grĆ¢ce au faubourien de Paris que la rĆ©volution, mĆŖlĆ©e aux armĆ©es, conquiert l'Europe. Il chante, c'est sa joie. Proportionnez sa chanson Ć  sa nature, et vous verrez! Tant qu'il n'a pour refrain que la Carmagnole, il ne renverse que Louis XVI; faites-lui chanter la Marseillaise, il dĆ©livrera le monde. Cette note Ć©crite en marge du rapport AnglĆØs, nous revenons Ć  nos quatre couples. Le dĆ®ner, comme nous l'avons dit, s'achevait. Chapitre VI Chapitre où l'on s'adore Propos de table et propos d'amour; les uns sont aussi insaisissables que les autres; les propos d'amour sont des nuĆ©es, les propos de table sont des fumĆ©es. Fameuil et Dahlia fredonnaient; TholomyĆØs buvait; ZĆ©phine riait, Fantine souriait. Listolier soufflait dans une trompette de bois achetĆ©e Ć  Saint-Cloud. Favourite regardait tendrement Blachevelle et disait: --Blachevelle, je t'adore. Ceci amena une question de Blachevelle: --Qu'est-ce que tu ferais, Favourite, si je cessais de t'aimer? --Moi! s'Ć©cria Favourite. Ah! ne dis pas cela, mĆŖme pour rire! Si tu cessais de m'aimer, je te sauterais aprĆØs, je te grifferais, je te gratignerais, je te jetterais de l'eau, je te ferais arrĆŖter. Blachevelle sourit avec la fatuitĆ© voluptueuse d'un homme chatouillĆ© Ć  l'amour-propre. Favourite reprit: --Oui, je crierais Ć  la garde! Ah! je me gĆŖnerais par exemple! Canaille! Blachevelle, extasiĆ©, se renversa sur sa chaise et ferma orgueilleusement les deux yeux. Dahlia, tout en mangeant, dit bas Ć  Favourite dans le brouhaha: --Tu l'idolĆ¢tres donc bien, ton Blachevelle? --Moi, je le dĆ©teste, rĆ©pondit Favourite du mĆŖme ton en ressaisissant sa fourchette. Il est avare. J'aime le petit d'en face de chez moi. Il est trĆØs bien, ce jeune homme-lĆ , le connais-tu? On voit qu'il a le genre d'ĆŖtre acteur. J'aime les acteurs. SitĆ“t qu'il rentre, sa mĆØre dit: Ā«Ah! mon Dieu! ma tranquillitĆ© est perdue. Le voilĆ  qui va crier. Mais, mon ami, tu me casses la tĆŖte!Ā» Parce qu'il va dans la maison, dans des greniers Ć  rats, dans des trous noirs, si haut qu'il peut monter,--et chanter, et dĆ©clamer, est-ce que je sais, moi? qu'on l'entend d'en bas! Il gagne dĆ©jĆ  vingt sous par jour chez un avouĆ© Ć  Ć©crire de la chicane. Il est fils d'un ancien chantre de Saint-Jacques-du-Haut-Pas. Ah! il est trĆØs bien. Il m'idolĆ¢tre tant qu'un jour qu'il me voyait faire de la pĆ¢te pour des crĆŖpes, il m'a dit: _Mamselle, faites des beignets de vos gants et je les mangerai_. Il n'y a que les artistes pour dire des choses comme Ƨa. Ah! il est trĆØs bien. Je suis en train d'ĆŖtre insensĆ©e de ce petit-lĆ . C'est Ć©gal, je dis Ć  Blachevelle que je l'adore. Comme je mens! Hein? comme je mens! Favourite fit une pause, et continua: --Dahlia, vois-tu, je suis triste. Il n'a fait que pleuvoir tout l'Ć©tĆ©, le vent m'agace, le vent ne dĆ©colĆØre pas, Blachevelle est trĆØs pingre, c'est Ć  peine s'il y a des petits pois au marchĆ©, on ne sait que manger, j'ai le spleen, comme disent les Anglais, le beurre est si cher! et puis, vois, c'est une horreur, nous dĆ®nons dans un endroit où il y a un lit, Ƨa me dĆ©goĆ»te de la vie. Chapitre VII Sagesse de TholomyĆØs Cependant, tandis que quelques-uns chantaient, les autres causaient tumultueusement, et tous ensemble; ce n'Ć©tait plus que du bruit. TholomyĆØs intervint: --Ne parlons point au hasard ni trop vite, s'Ć©cria-t-il. MĆ©ditons si nous voulons ĆŖtre Ć©blouissants. Trop d'improvisation vide bĆŖtement l'esprit. BiĆØre qui coule n'amasse point de mousse. Messieurs, pas de hĆ¢te. MĆŖlons la majestĆ© Ć  la ripaille; mangeons avec recueillement; festinons lentement. Ne nous pressons pas. Voyez le printemps; s'il se dĆ©pĆŖche, il est flambĆ©, c'est-Ć -dire gelĆ©. L'excĆØs de zĆØle perd les pĆŖchers et les abricotiers. L'excĆØs de zĆØle tue la grĆ¢ce et la joie des bons dĆ®ners. Pas de zĆØle, messieurs! Grimod de la ReyniĆØre est de l'avis de Talleyrand. Une sourde rĆ©bellion gronda dans le groupe. --TholomyĆØs, laisse-nous tranquilles, dit Blachevelle. --ƀ bas le tyran! dit Fameuil. --Bombarda, Bombance et Bamboche! cria Listolier. --Le dimanche existe, reprit Fameuil. --Nous sommes sobres, ajouta Listolier. --TholomyĆØs, fit Blachevelle, contemple mon calme. --Tu en es le marquis, rĆ©pondit TholomyĆØs. Ce mĆ©diocre jeu de mots fit l'effet d'une pierre dans une mare. Le marquis de Montcalm Ć©tait un royaliste alors cĆ©lĆØbre. Toutes les grenouilles se turent. --Amis, s'Ć©cria TholomyĆØs, de l'accent d'un homme qui ressaisit l'empire, remettez-vous. Il ne faut pas que trop de stupeur accueille ce calembour tombĆ© du ciel. Tout ce qui tombe de la sorte n'est pas nĆ©cessairement digne d'enthousiasme et de respect. Le calembour est la fiente de l'esprit qui vole. Le lazzi tombe n'importe où; et l'esprit, aprĆØs la ponte d'une bĆŖtise, s'enfonce dans l'azur. Une tache blanchĆ¢tre qui s'aplatit sur le rocher n'empĆŖche pas le condor de planer. Loin de moi l'insulte au calembour! Je l'honore dans la proportion de ses mĆ©rites; rien de plus. Tout ce qu'il y a de plus auguste, de plus sublime et de plus charmant dans l'humanitĆ©, et peut-ĆŖtre hors de l'humanitĆ©, a fait des jeux de mots. JĆ©sus-Christ a fait un calembour sur saint Pierre, MoĆÆse sur Isaac, Eschyle sur Polynice, ClĆ©opĆ¢tre sur Octave. Et notez que ce calembour de ClĆ©opĆ¢tre a prĆ©cĆ©dĆ© la bataille d'Actium, et que, sans lui, personne ne se souviendrait de la ville de Toryne, nom grec qui signifie cuiller Ć  pot. Cela concĆ©dĆ©, je reviens Ć  mon exhortation. Mes frĆØres, je le rĆ©pĆØte, pas de zĆØle, pas de tohu-bohu, pas d'excĆØs, mĆŖme en pointes, gaĆ®tĆ©s, liesses et jeux de mots. Ɖcoutez-moi, j'ai la prudence d'Amphiaraüs et la calvitie de CĆ©sar. Il faut une limite, mĆŖme aux rĆ©bus. _Est modus in rebus_. Il faut une limite, mĆŖme aux dĆ®ners. Vous aimez les chaussons aux pommes, mesdames, n'en abusez pas. Il faut, mĆŖme en chaussons, du bon sens et de l'art. La gloutonnerie chĆ¢tie le glouton. Gula punit Gulax. L'indigestion est chargĆ©e par le bon Dieu de faire de la morale aux estomacs. Et, retenez ceci: chacune de nos passions, mĆŖme l'amour, a un estomac qu'il ne faut pas trop remplir. En toute chose il faut Ć©crire Ć  temps le mot _finis_, il faut se contenir, quand cela devient urgent, tirer le verrou sur son appĆ©tit, mettre au violon sa fantaisie et se mener soi-mĆŖme au poste. Le sage est celui qui sait Ć  un moment donnĆ© opĆ©rer sa propre arrestation. Ayez quelque confiance en moi. Parce que j'ai fait un peu mon droit, Ć  ce que me disent mes examens, parce que je sais la diffĆ©rence qu'il y a entre la question mue et la question pendante, parce que j'ai soutenu une thĆØse en latin sur la maniĆØre dont on donnait la torture Ć  Rome au temps où Munatius Demens Ć©tait questeur du Parricide, parce que je vais ĆŖtre docteur, Ć  ce qu'il paraĆ®t, il ne s'ensuit pas de toute nĆ©cessitĆ© que je sois un imbĆ©cile. Je vous recommande la modĆ©ration dans vos dĆ©sirs. Vrai comme je m'appelle FĆ©lix TholomyĆØs, je parle bien. Heureux celui qui, lorsque l'heure a sonnĆ©, prend un parti hĆ©roĆÆque, et abdique comme Sylla, ou OrigĆØne! Favourite Ć©coutait avec une attention profonde. --FĆ©lix! dit-elle, quel joli mot! j'aime ce nom-lĆ . C'est en latin. Ƈa veut dire Prosper. TholomyĆØs poursuivit: --Quirites, gentlemen, Caballeros, mes amis! voulez-vous ne sentir aucun aiguillon et vous passer de lit nuptial et braver l'amour? Rien de plus simple. Voici la recette: la limonade, l'exercice outrĆ©, le travail forcĆ©, Ć©reintez-vous, traĆ®nez des blocs, ne dormez pas, veillez, gorgez-vous de boissons nitreuses et de tisanes de nymphaeas, savourez des Ć©mulsions de pavots et d'agnuscastus, assaisonnez-moi cela d'une diĆØte sĆ©vĆØre, crevez de faim, et joignez-y les bains froids, les ceintures d'herbes, l'application d'une plaque de plomb, les lotions avec la liqueur de Saturne et les fomentations avec l'oxycrat. --J'aime mieux une femme, dit Listolier. --La femme! reprit TholomyĆØs, mĆ©fiez-vous-en. Malheur Ć  celui qui se livre au coeur changeant de la femme! La femme est perfide et tortueuse. Elle dĆ©teste le serpent par jalousie de mĆ©tier. Le serpent, c'est la boutique en face. --TholomyĆØs, cria Blachevelle, tu es ivre! --Pardieu! dit TholomyĆØs. --Alors sois gai, reprit Blachevelle. Et, remplissant son verre, il se leva: --Gloire au vin! _Nunc te, Bacche, canam_! Pardon, mesdemoiselles, c'est de l'espagnol. Et la preuve, seƱoras, la voici: tel peuple, telle futaille. L'arrobe de Castille contient seize litres, le cantaro d'Alicante douze, l'almude des Canaries vingt-cinq, le cuartin des BalĆ©ares vingt-six, la botte du czar Pierre trente. Vive ce czar qui Ć©tait grand, et vive sa botte qui Ć©tait plus grande encore! Mesdames, un conseil d'ami: trompez-vous de voisin, si bon vous semble. Le propre de l'amour, c'est d'errer. L'amourette n'est pas faite pour s'accroupir et s'abrutir comme une servante anglaise qui a le calus du scrobage aux genoux. Elle n'est pas faite pour cela, elle erre gaĆ®ment, la douce amourette! On a dit: l'erreur est humaine; moi je dis: l'erreur est amoureuse. Mesdames, je vous idolĆ¢tre toutes. Ɣ ZĆ©phine, Ć“ JosĆ©phine, figure plus que chiffonnĆ©e, vous seriez charmante, si vous n'Ć©tiez de travers. Vous avez l'air d'un joli visage sur lequel, par mĆ©garde, on s'est assis. Quant Ć  Favourite, Ć“ nymphes et muses! un jour que Blachevelle passait le ruisseau de la rue GuĆ©rin-Boisseau, il vit une belle fille aux bas blancs et bien tirĆ©s qui montrait ses jambes. Ce prologue lui plut, et Blachevelle aima. Celle qu'il aima Ć©tait Favourite. Ɣ Favourite, tu as des lĆØvres ioniennes. Il y avait un peintre grec, appelĆ© Euphorion, qu'on avait surnommĆ© le peintre des lĆØvres. Ce Grec seul eĆ»t Ć©tĆ© digne de peindre ta bouche! Ɖcoute! avant toi, il n'y avait pas de crĆ©ature digne de ce nom. Tu es faite pour recevoir la pomme comme VĆ©nus ou pour la manger comme ƈve. La beautĆ© commence Ć  toi. Je viens de parler d'ƈve, c'est toi qui l'as crƩƩe. Tu mĆ©rites le brevet d'invention de la jolie femme. Ɣ Favourite, je cesse de vous tutoyer, parce que je passe de la poĆ©sie Ć  la prose. Vous parliez de mon nom tout Ć  l'heure. Cela m'a attendri; mais, qui que nous soyons, mĆ©fions-nous des noms. Ils peuvent se tromper. Je me nomme FĆ©lix et ne suis pas heureux. Les mots sont des menteurs. N'acceptons pas aveuglĆ©ment les indications qu'ils nous donnent. Ce serait une erreur d'Ć©crire Ć  LiĆØge pour avoir des bouchons et Ć  Pau pour avoir des gants. Miss Dahlia, Ć  votre place, je m'appellerais Rosa. Il faut que la fleur sente bon et que la femme ait de l'esprit. Je ne dis rien de Fantine, c'est une songeuse, une rĆŖveuse, une pensive, une sensitive; c'est un fantĆ“me ayant la forme d'une nymphe et la pudeur d'une nonne, qui se fourvoie dans la vie de grisette, mais qui se rĆ©fugie dans les illusions, et qui chante, et qui prie, et qui regarde l'azur sans trop savoir ce qu'elle voit ni ce qu'elle fait, et qui, les yeux au ciel, erre dans un jardin où il y a plus d'oiseaux qu'il n'en existe! Ɣ Fantine, sache ceci: moi TholomyĆØs, je suis une illusion; mais elle ne m'entend mĆŖme pas, la blonde fille des chimĆØres! Du reste, tout en elle est fraĆ®cheur, suavitĆ©, jeunesse, douce clartĆ© matinale. Ɣ Fantine, fille digne de vous appeler marguerite ou perle, vous ĆŖtes une femme du plus bel orient. Mesdames, un deuxiĆØme conseil: ne vous mariez point; le mariage est une greffe; cela prend bien ou mal; fuyez ce risque. Mais, bah! qu'est-ce que je chante lĆ ? Je perds mes paroles. Les filles sont incurables sur l'Ć©pousaille; et tout ce que nous pouvons dire, nous autres sages, n'empĆŖchera point les giletiĆØres et les piqueuses de bottines de rĆŖver des maris enrichis de diamants. Enfin, soit; mais, belles, retenez ceci: vous mangez trop de sucre. Vous n'avez qu'un tort, Ć“ femmes, c'est de grignoter du sucre. Ɣ sexe rongeur, tes jolies petites dents blanches adorent le sucre. Or, Ć©coutez bien, le sucre est un sel. Tout sel est dessĆ©chant. Le sucre est le plus dessĆ©chant de tous les sels. Il pompe Ć  travers les veines les liquides du sang; de lĆ  la coagulation, puis la solidification du sang; de lĆ  les tubercules dans le poumon; de lĆ  la mort. Et c'est pourquoi le diabĆØte confine Ć  la phthisie. Donc ne croquez pas de sucre, et vous vivrez! Je me tourne vers les hommes. Messieurs, faites des conquĆŖtes. Pillez-vous les uns aux autres sans remords vos bien-aimĆ©es. Chassez-croisez. En amour, il n'y a pas d'amis. Partout où il y a une jolie femme l'hostilitĆ© est ouverte. Pas de quartier, guerre Ć  outrance! Une jolie femme est un casus belli; une jolie femme est un flagrant dĆ©lit. Toutes les invasions de l'histoire sont dĆ©terminĆ©es par des cotillons. La femme est le droit de l'homme. Romulus a enlevĆ© les Sabines, Guillaume a enlevĆ© les Saxonnes, CĆ©sar a enlevĆ© les Romaines. L'homme qui n'est pas aimĆ© plane comme un vautour sur les amantes d'autrui; et quant Ć  moi, Ć  tous ces infortunĆ©s qui sont veufs, je jette la proclamation sublime de Bonaparte Ć  l'armĆ©e d'Italie: Ā«Soldats, vous manquez de tout. L'ennemi en a.Ā» TholomyĆØs s'interrompit. --Souffle, TholomyĆØs, dit Blachevelle. En mĆŖme temps, Blachevelle, appuyĆ© de Listolier et de Fameuil, entonna sur un air de complainte une de ces chansons d'atelier composĆ©es des premiers mots venus, rimĆ©es richement et pas du tout, vides de sens comme le geste de l'arbre et le bruit du vent, qui naissent de la vapeur des pipes et se dissipent et s'envolent avec elle. Voici par quel couplet le groupe donna la rĆ©plique Ć  la harangue de TholomyĆØs: Les pĆØres dindons donnĆØrent de l'argent Ć  un agent pour que mons Clermont-Tonnerre fĆ»t fait pape Ć  la Saint-Jean; Mais Clermont ne put pas ĆŖtre fait pape, n'Ć©tant pas prĆŖtre. Alors leur agent rageant leur rapporta leur argent. Ceci n'Ć©tait pas fait pour calmer l'improvisation de TholomyĆØs; il vida son verre, le remplit, et recommenƧa. --ƀ bas la sagesse! oubliez tout ce que j'ai dit. Ne soyons ni prudes, ni prudents, ni prud'hommes. Je porte un toast Ć  l'allĆ©gresse; soyons allĆØgres! ComplĆ©tons notre cours de droit par la folie et la nourriture. Indigestion et digeste. Que Justinien soit le mĆ¢le et que Ripaille soit la femelle! Joie dans les profondeurs! Vis, Ć“ crĆ©ation! Le monde est un gros diamant! Je suis heureux. Les oiseaux sont Ć©tonnants. Quelle fĆŖte partout! Le rossignol est un Elleviou gratis. ƉtĆ©, je te salue. Ɣ Luxembourg, Ć“ GĆ©orgiques de la rue Madame et de l'allĆ©e de l'Observatoire! Ɣ pioupious rĆŖveurs! Ć“ toutes ces bonnes charmantes qui, tout en gardant des enfants, s'amusent Ć  en Ć©baucher! Les pampas de l'AmĆ©rique me plairaient, si je n'avais les arcades de l'OdĆ©on. Mon Ć¢me s'envole dans les forĆŖts vierges et dans les savanes. Tout est beau. Les mouches bourdonnent dans les rayons. Le soleil a Ć©ternuĆ© le colibri. Embrasse-moi, Fantine! Il se trompa, et embrassa Favourite. Chapitre VIII Mort d'un cheval --On dĆ®ne mieux chez Edon que chez Bombarda, s'Ć©cria ZĆ©phine. --Je prĆ©fĆØre Bombarda Ć  Edon, dĆ©clara Blachevelle. Il a plus de luxe. C'est plus asiatique. Voyez la salle d'en bas. Il y a des glaces sur les murs. --J'en aime mieux dans mon assiette, dit Favourite. Blachevelle insista: --Regardez les couteaux. Les manches sont en argent chez Bombarda, et en os chez Edon. Or, l'argent est plus prĆ©cieux que l'os. --ExceptĆ© pour ceux qui ont un menton d'argent, observa TholomyĆØs. Il regardait en cet instant-lĆ  le dĆ“me des Invalides, visible des fenĆŖtres de Bombarda. Il y eut une pause. --TholomyĆØs, cria Fameuil, tout Ć  l'heure, Listolier et moi, nous avions une discussion. --Une discussion est bonne, rĆ©pondit TholomyĆØs, une querelle vaut mieux. --Nous disputions philosophie. --Soit. --Lequel prĆ©fĆØres-tu de Descartes ou de Spinosa? --DĆ©saugiers, dit TholomyĆØs. Cet arrĆŖt rendu, il but et reprit: --Je consens Ć  vivre. Tout n'est pas fini sur la terre, puisqu'on peut encore dĆ©raisonner. J'en rends grĆ¢ces aux dieux immortels. On ment, mais on rit. On affirme, mais on doute. L'inattendu jaillit du syllogisme. C'est beau. Il est encore ici-bas des humains qui savent joyeusement ouvrir et fermer la boĆ®te Ć  surprises du paradoxe. Ceci, mesdames, que vous buvez d'un air tranquille, est du vin de MadĆØre, sachez-le, du cru de Coural das Freiras qui est Ć  trois cent dix-sept toises au-dessus du niveau de la mer! Attention en buvant! trois cent dix-sept toises! et monsieur Bombarda, le magnifique restaurateur, vous donne ces trois cent dix-sept toises pour quatre francs cinquante centimes! Fameuil interrompit de nouveau: --TholomyĆØs, tes opinions font loi. Quel est ton auteur favori? --Ber.... --Quin? --Non. Choux. Et TholomyĆØs poursuivit: --Honneur Ć  Bombarda! il Ć©galerait Munophis d'Elephanta s'il pouvait me cueillir une almĆ©e, et ThygĆ©lion de ChĆ©ronĆ©e s'il pouvait m'apporter une hĆ©taĆÆre! car, Ć“ mesdames, il y avait des Bombarda en GrĆØce et en Ɖgypte. C'est ApulĆ©e qui nous l'apprend. HĆ©las! toujours les mĆŖmes choses et rien de nouveau. Plus rien d'inĆ©dit dans la crĆ©ation du crĆ©ateur! _Nil sub sole novum_, dit Salomon; _amor omnibus idem_, dit Virgile; et Carabine monte avec Carabin dans la galiote de Saint-Cloud, comme Aspasie s'embarquait avec PĆ©riclĆØs sur la flotte de Samos. Un dernier mot. Savez-vous ce que c'Ć©tait qu'Aspasie, mesdames? Quoiqu'elle vĆ©cĆ»t dans un temps où les femmes n'avaient pas encore d'Ć¢me, c'Ć©tait une Ć¢me; une Ć¢me d'une nuance rose et pourpre, plus embrasĆ©e que le feu, plus franche que l'aurore. Aspasie Ć©tait une crĆ©ature en qui se touchaient les deux extrĆŖmes de la femme; c'Ć©tait la prostituĆ©e dĆ©esse. Socrate, plus Manon Lescaut. Aspasie fut crƩƩe pour le cas où il faudrait une catin Ć  PromĆ©thĆ©e. TholomyĆØs, lancĆ©, se serait difficilement arrĆŖtĆ©, si un cheval ne se fĆ»t abattu sur le quai en cet instant-lĆ  mĆŖme. Du choc, la charrette et l'orateur restĆØrent court. C'Ć©tait une jument beauceronne, vieille et maigre et digne de l'Ć©quarrisseur, qui traĆ®nait une charrette fort lourde. Parvenue devant Bombarda, la bĆŖte, Ć©puisĆ©e et accablĆ©e, avait refusĆ© d'aller plus loin. Cet incident avait fait de la foule. ƀ peine le charretier, jurant et indignĆ©, avait-il eu le temps de prononcer avec l'Ć©nergie convenable le mot sacramentel: _mĆ¢tin_! appuyĆ© d'un implacable coup de fouet, que la haridelle Ć©tait tombĆ©e pour ne plus se relever. Au brouhaha des passants, les gais auditeurs de TholomyĆØs tournĆØrent la tĆŖte, et TholomyĆØs en profita pour clore son allocution par cette strophe mĆ©lancolique: _Elle Ć©tait de ce monde où coucous et carrosses_ _Ont le mĆŖme destin,_ _Et, rosse, elle a vĆ©cu ce que vivent les rosses,_ _L'espace d'un: mĆ¢tin!_ --Pauvre cheval, soupira Fantine. Et Dahlia s'Ć©cria: --VoilĆ  Fantine qui va se mettre Ć  plaindre les chevaux! Peut-on ĆŖtre fichue bĆŖte comme Ƨa! En ce moment, Favourite, croisant les bras et renversant la tĆŖte en arriĆØre, regarda rĆ©solĆ»ment TholomyĆØs et dit: --Ah ƧƠ! et la surprise? --Justement. L'instant est arrivĆ©, rĆ©pondit TholomyĆØs. Messieurs, l'heure de la surprise a sonnĆ©. Mesdames, attendez-nous un moment. --Cela commence par un baiser, dit Blachevelle. --Sur le front, ajouta TholomyĆØs. Chacun dĆ©posa gravement un baiser sur le front de sa maĆ®tresse; puis ils se dirigĆØrent vers la porte tous les quatre Ć  la file, en mettant leur doigt sur la bouche. Favourite battit des mains Ć  leur sortie. --C'est dĆ©jĆ  amusant, dit-elle. --Ne soyez pas trop longtemps, murmura Fantine. Nous vous attendons. Chapitre IX Fin joyeuse de la joie Les jeunes filles, restĆ©es seules, s'accoudĆØrent deux Ć  deux sur l'appui des fenĆŖtres, jasant, penchant leur tĆŖte et se parlant d'une croisĆ©e Ć  l'autre. Elles virent les jeunes gens sortir du cabaret Bombarda bras dessus bras dessous; ils se retournĆØrent, leur firent des signes en riant, et disparurent dans cette poudreuse cohue du dimanche qui envahit hebdomadairement les Champs-ƉlysĆ©es. --Ne soyez pas longtemps! cria Fantine. --Que vont-ils nous rapporter? dit ZĆ©phine. --Pour sĆ»r ce sera joli, dit Dahlia. --Moi, reprit Favourite, je veux que ce soit en or. Elles furent bientĆ“t distraites par le mouvement du bord de l'eau qu'elles distinguaient dans les branches des grands arbres et qui les divertissait fort. C'Ć©tait l'heure du dĆ©part des malles-poste et des diligences. Presque toutes les messageries du midi et de l'ouest passaient alors par les Champs-ƉlysĆ©es. La plupart suivaient le quai et sortaient par la barriĆØre de Passy. De minute en minute, quelque grosse voiture peinte en jaune et en noir, pesamment chargĆ©e, bruyamment attelĆ©e, difforme Ć  force de malles, de bĆ¢ches et de valises, pleine de tĆŖtes tout de suite disparues, broyant la chaussĆ©e, changeant tous les pavĆ©s en briquets, se ruait Ć  travers la foule avec toutes les Ć©tincelles d'une forge, de la poussiĆØre pour fumĆ©e, et un air de furie. Ce vacarme rĆ©jouissait les jeunes filles. Favourite s'exclamait: --Quel tapage! on dirait des tas de chaĆ®nes qui s'envolent. Il arriva une fois qu'une de ces voitures qu'on distinguait difficilement dans l'Ć©paisseur des ormes, s'arrĆŖta un moment, puis repartit au galop. Cela Ć©tonna Fantine. --C'est particulier! dit-elle. Je croyais que la diligence ne s'arrĆŖtait jamais. Favourite haussa les Ć©paules. --Cette Fantine est surprenante. Je viens la voir par curiositĆ©. Elle s'Ć©blouit des choses les plus simples. Une supposition; je suis un voyageur, je dis Ć  la diligence: je vais en avant, vous me prendrez sur le quai en passant. La diligence passe, me voit, s'arrĆŖte, et me prend. Cela se fait tous les jours. Tu ne connais pas la vie, ma chĆØre. Un certain temps s'Ć©coula ainsi. Tout Ć  coup Favourite eut le mouvement de quelqu'un qui se rĆ©veille. --Eh bien, fit-elle, et la surprise? --ƀ propos, oui, reprit Dahlia, la fameuse surprise? --Ils sont bien longtemps! dit Fantine. Comme Fantine achevait ce soupir, le garƧon qui avait servi le dĆ®ner entra. Il tenait Ć  la main quelque chose qui ressemblait Ć  une lettre. --Qu'est-ce que cela? demanda Favourite. Le garƧon rĆ©pondit: --C'est un papier que ces messieurs ont laissĆ© pour ces dames. --Pourquoi ne l'avoir pas apportĆ© tout de suite? --Parce que ces messieurs, reprit le garƧon, ont commandĆ© de ne le remettre Ć  ces dames qu'au bout d'une heure. Favourite arracha le papier des mains du garƧon. C'Ć©tait une lettre en effet. --Tiens! dit-elle. Il n'y a pas d'adresse. Mais voici ce qui est Ć©crit dessus: Ceci est la surprise. Elle dĆ©cacheta vivement la lettre, l'ouvrit et lut (elle savait lire): «Ô nos amantes! Ā«Sachez que nous avons des parents. Des parents, vous ne connaissez pas beaucoup Ƨa. Ƈa s'appelle des pĆØres et mĆØres dans le code civil, puĆ©ril et honnĆŖte. Or, ces parents gĆ©missent, ces vieillards nous rĆ©clament, ces bons hommes et ces bonnes femmes nous appellent enfants prodigues, ils souhaitent nos retours, et nous offrent de tuer des veaux. Nous leur obĆ©issons, Ć©tant vertueux. ƀ l'heure où vous lirez ceci, cinq chevaux fougueux nous rapporteront Ć  nos papas et Ć  nos mamans. Nous fichons le camp, comme dit Bossuet. Nous partons, nous sommes partis. Nous fuyons dans les bras de Laffitte et sur les ailes de Caillard. La diligence de Toulouse nous arrache Ć  l'abĆ®me, et l'abĆ®me c'est vous, Ć“ nos belles petites! Nous rentrons dans la sociĆ©tĆ©, dans le devoir et dans l'ordre, au grand trot, Ć  raison de trois lieues Ć  l'heure. Il importe Ć  la patrie que nous soyons, comme tout le monde, prĆ©fets, pĆØres de famille, gardes champĆŖtres et conseillers d'Ɖtat. VĆ©nĆ©rez-nous. Nous nous sacrifions. Pleurez-nous rapidement et remplacez-nous vite. Si cette lettre vous dĆ©chire, rendez-le-lui. Adieu. Ā«Pendant prĆØs de deux ans, nous vous avons rendues heureuses. Ne nous en gardez pas rancune. Ā«SignĆ©: Blachevelle. Ā«Fameuil. Ā«Listolier. Ā«FĆ©lix TholomyĆØs Ā«Post-scriptum. Le dĆ®ner est payĆ©.Ā» Les quatre jeunes filles se regardĆØrent. Favourite rompit la premiĆØre le silence. --Eh bien! s'Ć©cria-t-elle, c'est tout de mĆŖme une bonne farce. --C'est trĆØs drĆ“le, dit ZĆ©phine. --Ce doit ĆŖtre Blachevelle qui a eu cette idĆ©e-lĆ , reprit Favourite. Ƈa me rend amoureuse de lui. SitĆ“t parti, sitĆ“t aimĆ©. VoilĆ  l'histoire. --Non, dit Dahlia, c'est une idĆ©e Ć  TholomyĆØs. Ƈa se reconnaĆ®t. --En ce cas, reprit Favourite, mort Ć  Blachevelle et vive TholomyĆØs! --Vive TholomyĆØs! criĆØrent Dahlia et ZĆ©phine. Et elles Ć©clatĆØrent de rire. Fantine rit comme les autres. Une heure aprĆØs, quand elle fut rentrĆ©e dans sa chambre, elle pleura. C'Ć©tait, nous l'avons dit, son premier amour; elle s'Ć©tait donnĆ©e Ć  ce TholomyĆØs comme Ć  un mari, et la pauvre fille avait un enfant. Livre quatriĆØme--Confier, c'est quelquefois livrer Chapitre I Une mĆØre qui en rencontre une autre Il y avait, dans le premier quart de ce siĆØcle, Ć  Montfermeil, prĆØs de Paris, une faƧon de gargote qui n'existe plus aujourd'hui. Cette gargote Ć©tait tenue par des gens appelĆ©s ThĆ©nardier, mari et femme. Elle Ć©tait situĆ©e dans la ruelle du Boulanger. On voyait au-dessus de la porte une planche clouĆ©e Ć  plat sur le mur. Sur cette planche Ć©tait peint quelque chose qui ressemblait Ć  un homme portant sur son dos un autre homme, lequel avait de grosses Ć©paulettes de gĆ©nĆ©ral dorĆ©es avec de larges Ć©toiles argentĆ©es; des taches rouges figuraient du sang; le reste du tableau Ć©tait de la fumĆ©e et reprĆ©sentait probablement une bataille. Au bas on lisait cette inscription: _Au Sergent de Waterloo._ Rien n'est plus ordinaire qu'un tombereau ou une charrette Ć  la porte d'une auberge. Cependant le vĆ©hicule ou, pour mieux dire, le fragment de vĆ©hicule qui encombrait la rue devant la gargote du Sergent de Waterloo, un soir du printemps de 1818, eĆ»t certainement attirĆ© par sa masse l'attention d'un peintre qui eĆ»t passĆ© lĆ . C'Ć©tait l'avant-train d'un de ces fardiers, usitĆ©s dans les pays de forĆŖts, et qui servent Ć  charrier des madriers et des troncs d'arbres. Cet avant-train se composait d'un massif essieu de fer Ć  pivot où s'emboĆ®tait un lourd timon, et que supportaient deux roues dĆ©mesurĆ©es. Tout cet ensemble Ć©tait trapu, Ć©crasant et difforme. On eĆ»t dit l'affĆ»t d'un canon gĆ©ant. Les orniĆØres avaient donnĆ© aux roues, aux jantes, aux moyeux, Ć  l'essieu et au timon, une couche de vase, hideux badigeonnage jaunĆ¢tre assez semblable Ć  celui dont on orne volontiers les cathĆ©drales. Le bois disparaissait sous la boue et le fer sous la rouille. Sous l'essieu pendait en draperie une grosse chaĆ®ne digne de Goliath forƧat. Cette chaĆ®ne faisait songer, non aux poutres qu'elle avait fonction de transporter, mais aux mastodontes et aux mammons qu'elle eĆ»t pu atteler; elle avait un air de bagne, mais de bagne cyclopĆ©en et surhumain, et elle semblait dĆ©tachĆ©e de quelque monstre. HomĆØre y eĆ»t liĆ© PolyphĆØme et Shakespeare Caliban. Pourquoi cet avant-train de fardier Ć©tait-il Ć  cette place dans la rue? D'abord, pour encombrer la rue; ensuite pour achever de se rouiller. Il y a dans le vieil ordre social une foule d'institutions qu'on trouve de la sorte sur son passage en plein air et qui n'ont pas pour ĆŖtre lĆ  d'autres raisons. Le centre de la chaĆ®ne pendait sous l'essieu assez prĆØs de terre, et sur la courbure, comme sur la corde d'une balanƧoire, Ć©taient assises et groupĆ©es, ce soir-lĆ , dans un entrelacement exquis, deux petites filles, l'une d'environ deux ans et demi, l'autre de dix-huit mois, la plus petite dans les bras de la plus grande. Un mouchoir savamment nouĆ© les empĆŖchait de tomber. Une mĆØre avait vu cette effroyable chaĆ®ne, et avait dit: Tiens! voilĆ  un joujou pour mes enfants. Les deux enfants, du reste gracieusement attifĆ©es, et avec quelque recherche, rayonnaient; on eĆ»t dit deux roses dans de la ferraille; leurs yeux Ć©taient un triomphe; leurs fraĆ®ches joues riaient. L'une Ć©tait chĆ¢tain, l'autre Ć©tait brune. Leurs naĆÆfs visages Ć©taient deux Ć©tonnements ravis; un buisson fleuri qui Ć©tait prĆØs de lĆ  envoyait aux passants des parfums qui semblaient venir d'elles; celle de dix-huit mois montrait son gentil ventre nu avec cette chaste indĆ©cence de la petitesse. Au-dessus et autour de ces deux tĆŖtes dĆ©licates, pĆ©tries dans le bonheur et trempĆ©es dans la lumiĆØre, le gigantesque avant-train, noir de rouille, presque terrible, tout enchevĆŖtrĆ© de courbes et d'angles farouches, s'arrondissait comme un porche de caverne. ƀ quelques pas, accroupie sur le seuil de l'auberge, la mĆØre, femme d'un aspect peu avenant du reste, mais touchante en ce moment-lĆ , balanƧait les deux enfants au moyen d'une longue ficelle, les couvant des yeux de peur d'accident avec cette expression animale et cĆ©leste propre Ć  la maternitĆ©; Ć  chaque va-et-vient, les hideux anneaux jetaient un bruit strident qui ressemblait Ć  un cri de colĆØre; les petites filles s'extasiaient, le soleil couchant se mĆŖlait Ć  cette joie, et rien n'Ć©tait charmant comme ce caprice du hasard, qui avait fait d'une chaĆ®ne de titans une escarpolette de chĆ©rubins. Tout en berƧant ses deux petites, la mĆØre chantonnait d'une voix fausse une romance alors cĆ©lĆØbre: _Il le faut, disait un guerrier._ Sa chanson et la contemplation de ses filles l'empĆŖchaient d'entendre et de voir ce qui se passait dans la rue. Cependant quelqu'un s'Ć©tait approchĆ© d'elle, comme elle commenƧait le premier couplet de la romance, et tout Ć  coup elle entendit une voix qui disait trĆØs prĆØs de son oreille: --Vous avez lĆ  deux jolis enfants, madame, rĆ©pondit la mĆØre, continuant sa romance: _ƀ la belle et tendre Imogine._ rĆ©pondit la mĆØre, continuant sa romance, puis elle tourna la tĆŖte. Une femme Ć©tait devant elle, Ć  quelques pas. Cette femme, elle aussi, avait un enfant qu'elle portait dans ses bras. Elle portait en outre un assez gros sac de nuit qui semblait fort lourd. L'enfant de cette femme Ć©tait un des plus divins ĆŖtres qu'on pĆ»t voir. C'Ć©tait une fille de deux Ć  trois ans. Elle eĆ»t pu jouter avec les deux autres pour la coquetterie de l'ajustement; elle avait un bavolet de linge fin, des rubans Ć  sa brassiĆØre et de la valenciennes Ć  son bonnet. Le pli de sa jupe relevĆ©e laissait voir sa cuisse blanche, potelĆ©e et ferme. Elle Ć©tait admirablement rose et bien portante. La belle petite donnait envie de mordre dans les pommes de ses joues. On ne pouvait rien dire de ses yeux, sinon qu'ils devaient ĆŖtre trĆØs grands et qu'ils avaient des cils magnifiques. Elle dormait. Elle dormait de ce sommeil d'absolue confiance propre Ć  son Ć¢ge. Les bras des mĆØres sont faits de tendresse; les enfants y dorment profondĆ©ment. Quant Ć  la mĆØre, l'aspect en Ć©tait pauvre et triste. Elle avait la mise d'une ouvriĆØre qui tend Ć  redevenir paysanne. Elle Ć©tait jeune. Ɖtait-elle belle? peut-ĆŖtre; mais avec cette mise il n'y paraissait pas. Ses cheveux, d'où s'Ć©chappait une mĆØche blonde, semblaient fort Ć©pais, mais disparaissaient sĆ©vĆØrement sous une coiffe de bĆ©guine, laide, serrĆ©e, Ć©troite, et nouĆ©e au menton. Le rire montre les belles dents quand on en a; mais elle ne riait point. Ses yeux ne semblaient pas ĆŖtre secs depuis trĆØs longtemps. Elle Ć©tait pĆ¢le; elle avait l'air trĆØs lasse et un peu malade; elle regardait sa fille endormie dans ses bras avec cet air particulier d'une mĆØre qui a nourri son enfant. Un large mouchoir bleu, comme ceux où se mouchent les invalides, pliĆ© en fichu, masquait lourdement sa taille. Elle avait les mains hĆ¢lĆ©es et toutes piquĆ©es de taches de rousseur, l'index durci et dĆ©chiquetĆ© par l'aiguille, une Mante brune de laine bourrue, une robe de toile et de gros souliers. C'Ć©tait Fantine. C'Ć©tait Fantine. Difficile Ć  reconnaĆ®tre. Pourtant, Ć  l'examiner attentivement, elle avait toujours sa beautĆ©. Un pli triste, qui ressemblait Ć  un commencement d'ironie, ridait sa joue droite. Quant Ć  sa toilette, cette aĆ©rienne toilette de mousseline et de rubans qui semblait faite avec de la gaĆ®tĆ©, de la folie et de la musique, pleine de grelots et parfumĆ©e de lilas, elle s'Ć©tait Ć©vanouie comme ces beaux givres Ć©clatants qu'on prend pour des diamants au soleil; ils fondent et laissent la branche toute noire. Dix mois s'Ć©taient Ć©coulĆ©s depuis Ā«la bonne farceĀ». Que s'Ć©tait-il passĆ© pendant ces dix mois? on le devine. AprĆØs l'abandon, la gĆŖne. Fantine avait tout de suite perdu de vue Favourite, ZĆ©phine et Dahlia; le lien, brisĆ© du cĆ“tĆ© des hommes, s'Ć©tait dĆ©fait du cĆ“tĆ© des femmes; on les eĆ»t bien Ć©tonnĆ©es, quinze jours aprĆØs, si on leur eĆ»t dit qu'elles Ć©taient amies; cela n'avait plus de raison d'ĆŖtre. Fantine Ć©tait restĆ©e seule. Le pĆØre de son enfant parti,--hĆ©las! ces ruptures-lĆ  sont irrĆ©vocables,--elle se trouva absolument isolĆ©e, avec l'habitude du travail de moins et le goĆ»t du plaisir de plus. EntraĆ®nĆ©e par sa liaison avec TholomyĆØs Ć  dĆ©daigner le petit mĆ©tier qu'elle savait, elle avait nĆ©gligĆ© ses dĆ©bouchĆ©s; ils s'Ć©taient fermĆ©s. Nulle ressource. Fantine savait Ć  peine lire et ne savait pas Ć©crire; on lui avait seulement appris dans son enfance Ć  signer son nom; elle avait fait Ć©crire par un Ć©crivain public une lettre Ć  TholomyĆØs, puis une seconde, puis une troisiĆØme. TholomyĆØs n'avait rĆ©pondu Ć  aucune. Un jour, Fantine entendit des commĆØres dire en regardant sa fille: --Est-ce qu'on prend ces enfants-lĆ  au sĆ©rieux? on hausse les Ć©paules de ces enfants-lĆ ! Alors elle songea Ć  TholomyĆØs qui haussait les Ć©paules de son enfant et qui ne prenait pas cet ĆŖtre innocent au sĆ©rieux; et son coeur devint sombre Ć  l'endroit de cet homme. Quel parti prendre pourtant? Elle ne savait plus Ć  qui s'adresser. Elle avait commis une faute, mais le fond de sa nature, on s'en souvient, Ć©tait pudeur et vertu. Elle sentit vaguement qu'elle Ć©tait Ć  la veille de tomber dans la dĆ©tresse, et de glisser dans le pire. Il fallait du courage; elle en eut, et se roidit. L'idĆ©e lui vint de retourner dans sa ville natale, Ć  Montreuil-sur-mer. LĆ  quelqu'un peut-ĆŖtre la connaĆ®trait et lui donnerait du travail. Oui; mais il faudrait cacher sa faute. Et elle entrevoyait confusĆ©ment la nĆ©cessitĆ© possible d'une sĆ©paration plus douloureuse encore que la premiĆØre. Son coeur se serra, mais elle prit sa rĆ©solution. Fantine, on le verra, avait la farouche bravoure de la vie. Elle avait dĆ©jĆ  vaillamment renoncĆ© Ć  la parure, s'Ć©tait vĆŖtue de toile, et avait mis toute sa soie, tous ses chiffons, tous ses rubans et toutes ses dentelles sur sa fille, seule vanitĆ© qui lui restĆ¢t, et sainte celle-lĆ . Elle vendit tout ce qu'elle avait, ce qui lui produisit deux cents francs; ses petites dettes payĆ©es, elle n'eut plus que quatre-vingts francs environ. ƀ vingt-deux ans, par une belle matinĆ©e de printemps, elle quittait Paris, emportant son enfant sur son dos. Quelqu'un qui les eĆ»t vues passer toutes les deux eĆ»t pitiĆ©. Cette femme n'avait au monde que cet enfant, et cet enfant n'avait au monde que cette femme. Fantine avait nourri sa fille; cela lui avait fatiguĆ© la poitrine, et elle toussait un peu. Nous n'aurons plus occasion de parler de M. FĆ©lix TholomyĆØs. Bornons-nous Ć  dire que, vingt ans plus tard, sous le roi Louis-Philippe, c'Ć©tait un gros avouĆ© de province, influent et riche, Ć©lecteur sage et jurĆ© trĆØs sĆ©vĆØre; toujours homme de plaisir. Vers le milieu du jour, aprĆØs avoir, pour se reposer, cheminĆ© de temps en temps, moyennant trois ou quatre sous par lieue, dans ce qu'on appelait alors les Petites Voitures des Environs de Paris, Fantine se trouvait Ć  Montfermeil, dans la ruelle du Boulanger. Comme elle passait devant l'auberge ThĆ©nardier, les deux petites filles, enchantĆ©es sur leur escarpolette monstre, avaient Ć©tĆ© pour elle une sorte d'Ć©blouissement, et elle s'Ć©tait arrĆŖtĆ©e devant cette vision de joie. Il y a des charmes. Ces deux petites filles en furent un pour cette mĆØre. Elle les considĆ©rait, toute Ć©mue. La prĆ©sence des anges est une annonce de paradis. Elle crut voir au dessus de cette auberge le mystĆ©rieux ICI de la providence. Ces deux petites Ć©taient si Ć©videmment heureuses! Elle les regardait, elle les admirait, tellement attendrie qu'au moment où la mĆØre reprenait haleine entre deux vers de sa chanson, elle ne put s'empĆŖcher de lui dire ce mot qu'on vient de lire: --Vous avez lĆ  deux jolis enfants, madame. Les crĆ©atures les plus fĆ©roces sont dĆ©sarmĆ©es par la caresse Ć  leurs petits. La mĆØre leva la tĆŖte et remercia, et fit asseoir la passante sur le banc de la porte, elle-mĆŖme Ć©tant sur le seuil. Les deux femmes causĆØrent. --Je m'appelle madame ThĆ©nardier, dit la mĆØre des deux petites. Nous tenons cette auberge. Puis, toujours Ć  sa romance, elle reprit entre ses dents: _Il le faut, je suis chevalier,_ _Et je pars pour la Palestine._ Cette madame ThĆ©nardier Ć©tait une femme rousse, charnue, anguleuse; le type femme-Ć -soldat dans toute sa disgrĆ¢ce. Et, chose bizarre, avec un air penchĆ© qu'elle devait Ć  des lectures romanesques. C'Ć©tait une minaudiĆØre hommasse. De vieux romans qui se sont Ć©raillĆ©s sur des imaginations de gargotiĆØres ont de ces effets-lĆ . Elle Ć©tait jeune encore; elle avait Ć  peine trente ans. Si cette femme, qui Ć©tait accroupie, se fĆ»t tenue droite, peut-ĆŖtre sa haute taille et sa carrure de colosse ambulant propre aux foires, eussent-elles dĆØs l'abord effarouchĆ© la voyageuse, troublĆ© sa confiance, et fait Ć©vanouir ce que nous avons Ć  raconter. Une personne qui est assise au lieu d'ĆŖtre debout, les destinĆ©es tiennent Ć  cela. La voyageuse raconta son histoire, un peu modifiĆ©e: Qu'elle Ć©tait ouvriĆØre; que son mari Ć©tait mort; que le travail lui manquait Ć  Paris, et qu'elle allait en chercher ailleurs; dans son pays; qu'elle avait quittĆ© Paris, le matin mĆŖme, Ć  pied; que, comme elle portait son enfant, se sentant fatiguĆ©e, et ayant rencontrĆ© la voiture de Villemomble, elle y Ć©tait montĆ©e; que de Villemomble elle Ć©tait venue Ć  Montfermeil Ć  pied, que la petite avait un peu marchĆ©, mais pas beaucoup, c'est si jeune, et qu'il avait fallu la prendre, et que le bijou s'Ć©tait endormi. Et sur ce mot elle donna Ć  sa fille un baiser passionnĆ© qui la rĆ©veilla. L'enfant ouvrit les yeux, de grands yeux bleus comme ceux de sa mĆØre, et regarda, quoi? rien, tout, avec cet air sĆ©rieux et quelquefois sĆ©vĆØre des petits enfants, qui est un mystĆØre de leur lumineuse innocence devant nos crĆ©puscules de vertus. On dirait qu'ils se sentent anges et qu'ils nous savent hommes. Puis l'enfant se mit Ć  rire, et, quoique la mĆØre la retint, glissa Ć  terre avec l'indomptable Ć©nergie d'un petit ĆŖtre qui veut courir. Tout Ć  coup elle aperƧut les deux autres sur leur balanƧoire, s'arrĆŖta court, et tira la langue, signe d'admiration. La mĆØre ThĆ©nardier dĆ©tacha ses filles, les fit descendre de l'escarpolette, et dit: --Amusez-vous toutes les trois. Ces Ć¢ges-lĆ  s'apprivoisent vite, et au bout d'une minute les petites ThĆ©nardier jouaient avec la nouvelle venue Ć  faire des trous dans la terre, plaisir immense. Cette nouvelle venue Ć©tait trĆØs gaie; la bontĆ© de la mĆØre est Ć©crite dans la gaĆ®tĆ© du marmot; elle avait pris un brin de bois qui lui servait de pelle, et elle creusait Ć©nergiquement une fosse bonne pour une mouche. Ce que fait le fossoyeur devient riant, fait par l'enfant. Les deux femmes continuaient de causer. --Comment s'appelle votre mioche? --Cosette. Cosette, lisez Euphrasie. La petite se nommait Euphrasie. Mais d'Euphrasie la mĆØre avait fait Cosette, par ce doux et gracieux instinct des mĆØres et du peuple qui change Josefa en Pepita et FranƧoise en Sillette. C'est lĆ  un genre de dĆ©rivĆ©s qui dĆ©range et dĆ©concerte toute la science des Ć©tymologistes. Nous avons connu une grand'mĆØre qui avait rĆ©ussi Ć  faire de ThĆ©odore, Gnon. --Quel Ć¢ge a-t-elle? --Elle va sur trois ans. --C'est comme mon aĆ®nĆ©e. Cependant les trois petites filles Ć©taient groupĆ©es dans une posture d'anxiĆ©tĆ© profonde et de bĆ©atitude; un Ć©vĆ©nement avait lieu; un gros ver venait de sortir de terre; et elles avaient peur, et elles Ć©taient en extase. Leurs fronts radieux se touchaient; on eĆ»t dit trois tĆŖtes dans une aurĆ©ole. --Les enfants, s'Ć©cria la mĆØre ThĆ©nardier, comme Ƨa se connaĆ®t tout de suite! les voilĆ  qu'on jurerait trois soeurs! Ce mot fut l'Ć©tincelle qu'attendait probablement l'autre mĆØre. Elle saisit la main de la ThĆ©nardier, la regarda fixement, et lui dit: --Voulez-vous me garder mon enfant? La ThĆ©nardier eut un de ces mouvements surpris qui ne sont ni le consentement ni le refus. La mĆØre de Cosette poursuivit: --Voyez-vous, je ne peux pas emmener ma fille au pays. L'ouvrage ne le permet pas. Avec un enfant, on ne trouve pas Ć  se placer. Ils sont si ridicules dans ce pays-lĆ . C'est le bon Dieu qui m'a fait passer devant votre auberge. Quand j'ai vu vos petites si jolies et si propres et si contentes, cela m'a bouleversĆ©e. J'ai dit: voilĆ  une bonne mĆØre. C'est Ƨa; Ƨa fera trois soeurs. Et puis, je ne serai pas longtemps Ć  revenir. Voulez-vous me garder mon enfant? --Il faudrait voir, dit la ThĆ©nardier. --Je donnerais six francs par mois. Ici une voix d'homme cria du fond de la gargote: --Pas Ć  moins de sept francs. Et six mois payĆ©s d'avance. --Six fois sept quarante-deux, dit la ThĆ©nardier. --Je les donnerai, dit la mĆØre. --Et quinze francs en dehors pour les premiers frais, ajouta la voix d'homme. --Total cinquante-sept francs, dit la madame ThĆ©nardier. Et Ć  travers ces chiffres, elle chantonnait vaguement: _Il le faut, disait un guerrier._ --Je les donnerai, dit la mĆØre, j'ai quatre-vingts francs. Il me restera de quoi aller au pays. En allant Ć  pied. Je gagnerai de l'argent lĆ -bas, et dĆØs que j'en aurai un peu, je reviendrai chercher l'amour. La voix d'homme reprit: --La petite a un trousseau? --C'est mon mari, dit la ThĆ©nardier. --Sans doute elle a un trousseau, le pauvre trĆ©sor. J'ai bien vu que c'Ć©tait votre mari. Et un beau trousseau encore! un trousseau insensĆ©. Tout par douzaines; et des robes de soie comme une dame. Il est lĆ  dans mon sac de nuit. --Il faudra le donner, repartit la voix d'homme. --Je crois bien que je le donnerai! dit la mĆØre. Ce serait cela qui serait drĆ“le si je laissais ma fille toute nue! La face du maĆ®tre apparut. --C'est bon, dit-il. Le marchĆ© fut conclu. La mĆØre passa la nuit Ć  l'auberge, donna son argent et laissa son enfant, renoua son sac de nuit dĆ©gonflĆ© du trousseau et lĆ©ger dĆ©sormais, et partit le lendemain matin, comptant revenir bientĆ“t. On arrange tranquillement ces dĆ©parts-lĆ , mais ce sont des dĆ©sespoirs. Une voisine des ThĆ©nardier rencontra cette mĆØre comme elle s'en allait, et s'en revint en disant: --Je viens de voir une femme qui pleure dans la rue, que c'est un dĆ©chirement. Quand la mĆØre de Cosette fut partie, l'homme dit Ć  la femme: --Cela va me payer mon effet de cent dix francs qui Ć©choit demain. Il me manquait cinquante francs. Sais-tu que j'aurais eu l'huissier et un protĆŖt? Tu as fait lĆ  une bonne souriciĆØre avec tes petites. --Sans m'en douter, dit la femme. Chapitre II PremiĆØre esquisse de deux figures louches La souris prise Ć©tait bien chĆ©tive; mais le chat se rĆ©jouit mĆŖme d'une souris maigre. Qu'Ć©tait-ce que les ThĆ©nardier? Disons-en un mot dĆØs Ć  prĆ©sent. Nous complĆ©terons le croquis plus tard. Ces ĆŖtres appartenaient Ć  cette classe bĆ¢tarde composĆ©e de gens grossiers parvenus et de gens intelligents dĆ©chus, qui est entre la classe dite moyenne et la classe dite infĆ©rieure, et qui combine quelques-uns des dĆ©fauts de la seconde avec presque tous les vices de la premiĆØre, sans avoir le gĆ©nĆ©reux Ć©lan de l'ouvrier ni l'ordre honnĆŖte du bourgeois. C'Ć©taient de ces natures naines qui, si quelque feu sombre les chauffe par hasard, deviennent facilement monstrueuses. Il y avait dans la femme le fond d'une brute et dans l'homme l'Ć©toffe d'un gueux. Tous deux Ć©taient au plus haut degrĆ© susceptibles de l'espĆØce de hideux progrĆØs qui se fait dans le sens du mal. Il existe des Ć¢mes Ć©crevisses reculant continuellement vers les tĆ©nĆØbres, rĆ©trogradant dans la vie plutĆ“t qu'elles n'y avancent, employant l'expĆ©rience Ć  augmenter leur difformitĆ©, empirant sans cesse, et s'empreignant de plus en plus d'une noirceur croissante. Cet homme et cette femme Ć©taient de ces Ć¢mes-lĆ . Le ThĆ©nardier particuliĆØrement Ć©tait gĆŖnant pour le physionomiste. On n'a qu'Ć  regarder certains hommes pour s'en dĆ©fier, on les sent tĆ©nĆ©breux Ć  leurs deux extrĆ©mitĆ©s. Ils sont inquiets derriĆØre eux et menaƧants devant eux. Il y a en eux de l'inconnu. On ne peut pas plus rĆ©pondre de ce qu'ils ont fait que de ce qu'ils feront. L'ombre qu'ils ont dans le regard les dĆ©nonce. Rien qu'en les entendant dire un mot ou qu'en les voyant faire un geste on entrevoit de sombres secrets dans leur passĆ© et de sombres mystĆØres dans leur avenir. Ce ThĆ©nardier, s'il fallait l'en croire, avait Ć©tĆ© soldat; sergent, disait-il; il avait fait probablement la campagne de 1815, et s'Ć©tait mĆŖme comportĆ© assez bravement, Ć  ce qu'il paraĆ®t. Nous verrons plus tard ce qu'il en Ć©tait. L'enseigne de son cabaret Ć©tait une allusion Ć  l'un de ses faits d'armes. Il l'avait peinte lui-mĆŖme, car il savait faire un peu de tout; mal. C'Ć©tait l'Ć©poque où l'antique roman classique, qui, aprĆØs avoir Ć©tĆ© _ClĆ©lie_, n'Ć©tait plus que _LodoĆÆska_, toujours noble, mais de plus en plus vulgaire, tombĆ© de mademoiselle de ScudĆ©ri Ć  madame BarthĆ©lemy-Hadot, et de madame de Lafayette Ć  madame Bournon-Malarme, incendiait l'Ć¢me aimante des portiĆØres de Paris et ravageait mĆŖme un peu la banlieue. Madame ThĆ©nardier Ć©tait juste assez intelligente pour lire ces espĆØces de livres. Elle s'en nourrissait. Elle y noyait ce qu'elle avait de cervelle; cela lui avait donnĆ©, tant qu'elle avait Ć©tĆ© trĆØs jeune, et mĆŖme un peu plus tard, une sorte d'attitude pensive prĆØs de son mari, coquin d'une certaine profondeur, ruffian lettrĆ© Ć  la grammaire prĆØs, grossier et fin en mĆŖme temps, mais, en fait de sentimentalisme, lisant Pigault-Lebrun, et pour Ā«tout ce qui touche le sexeĀ», comme il disait dans son jargon, butor correct et sans mĆ©lange. Sa femme avait quelque douze ou quinze ans de moins que lui. Plus tard, quand les cheveux romanesquement pleureurs commencĆØrent Ć  grisonner, quand la MĆ©gĆØre se dĆ©gagea de la PamĆ©la, la ThĆ©nardier ne fut plus qu'une grosse mĆ©chante femme ayant savourĆ© des romans bĆŖtes. Or on ne lit pas impunĆ©ment des niaiseries. Il en rĆ©sulta que sa fille aĆ®nĆ©e se nomma Eponine. Quant Ć  la cadette, la pauvre petite faillit se nommer Gulnare; elle dut Ć  je ne sais quelle heureuse diversion faite par un roman de Ducray-Duminil, de ne s'appeler qu'Azelma. Au reste, pour le dire en passant, tout n'est pas ridicule et superficiel dans cette curieuse Ć©poque Ć  laquelle nous faisons ici allusion, et qu'on pourrait appeler l'anarchie des noms de baptĆŖme. ƀ cĆ“tĆ© de l'Ć©lĆ©ment romanesque, que nous venons d'indiquer, il y a le symptĆ“me social. Il n'est pas rare aujourd'hui que le garƧon bouvier se nomme Arthur, Alfred ou Alphonse, et que le vicomte--s'il y a encore des vicomtes--se nomme Thomas, Pierre ou Jacques. Ce dĆ©placement qui met le nom «élĆ©gantĀ» sur le plĆ©bĆ©ien et le nom campagnard sur l'aristocrate n'est autre chose qu'un remous d'Ć©galitĆ©. L'irrĆ©sistible pĆ©nĆ©tration du souffle nouveau est lĆ  comme en tout. Sous cette discordance apparente, il y a une chose grande et profonde: la rĆ©volution franƧaise. Chapitre III L'Alouette Il ne suffit pas d'ĆŖtre mĆ©chant pour prospĆ©rer. La gargote allait mal. GrĆ¢ce aux cinquante-sept francs de la voyageuse, ThĆ©nardier avait pu Ć©viter un protĆŖt et faire honneur Ć  sa signature. Le mois suivant ils eurent encore besoin d'argent; la femme porta Ć  Paris et engagea au Mont-de-PiĆ©tĆ© le trousseau de Cosette pour une somme de soixante francs. DĆØs que cette somme fut dĆ©pensĆ©e, les ThĆ©nardier s'accoutumĆØrent Ć  ne plus voir dans la petite fille qu'un enfant qu'ils avaient chez eux par charitĆ©, et la traitĆØrent en consĆ©quence. Comme elle n'avait plus de trousseau, on l'habilla des vieilles jupes et des vieilles chemises des petites ThĆ©nardier, c'est-Ć -dire de haillons. On la nourrit des restes de tout le monde, un peu mieux que le chien et un peu plus mal que le chat. Le chat et le chien Ć©taient du reste ses commensaux habituels; Cosette mangeait avec eux sous la table dans une Ć©cuelle de bois pareille Ć  la leur. La mĆØre qui s'Ć©tait fixĆ©e, comme on le verra plus tard, Ć  Montreuil-sur-mer, Ć©crivait, ou, pour mieux dire, faisait Ć©crire tous les mois afin d'avoir des nouvelles de son enfant. Les ThĆ©nardier rĆ©pondaient invariablement: Cosette est Ć  merveille. Les six premiers mois rĆ©volus, la mĆØre envoya sept francs pour le septiĆØme mois, et continua assez exactement ses envois de mois en mois. L'annĆ©e n'Ć©tait pas finie que le ThĆ©nardier dit: --Une belle grĆ¢ce qu'elle nous fait lĆ ! que veut-elle que nous fassions avec ses sept francs? Et il Ć©crivit pour exiger douze francs. La mĆØre, Ć  laquelle ils persuadaient que son enfant Ć©tait heureuse "et venait bien", se soumit et envoya les douze francs. Certaines natures ne peuvent aimer d'un cĆ“tĆ© sans haĆÆr de l'autre. La mĆØre ThĆ©nardier aimait passionnĆ©ment ses deux filles Ć  elle, ce qui fit qu'elle dĆ©testa l'Ć©trangĆØre. Il est triste de songer que l'amour d'une mĆØre peut avoir de vilains aspects. Si peu de place que Cosette tĆ®nt chez elle, il lui semblait que cela Ć©tait pris aux siens, et que cette petite diminuait l'air que ses filles respiraient. Cette femme, comme beaucoup de femmes de sa sorte, avait une somme de caresses et une somme de coups et d'injures Ć  dĆ©penser chaque jour. Si elle n'avait pas eu Cosette, il est certain que ses filles, tout idolĆ¢trĆ©es qu'elles Ć©taient, auraient tout reƧu; mais l'Ć©trangĆØre leur rendit le service de dĆ©tourner les coups sur elle. Ses filles n'eurent que les caresses. Cosette ne faisait pas un mouvement qui ne fĆ®t pleuvoir sur sa tĆŖte une grĆŖle de chĆ¢timents violents et immĆ©ritĆ©s. Doux ĆŖtre faible qui ne devait rien comprendre Ć  ce monde ni Ć  Dieu, sans cesse punie, grondĆ©e, rudoyĆ©e, battue et voyant Ć  cĆ“tĆ© d'elle deux petites crĆ©atures comme elle, qui vivaient dans un rayon d'aurore! La ThĆ©nardier Ć©tant mĆ©chante pour Cosette, Ɖponine et Azelma furent mĆ©chantes. Les enfants, Ć  cet Ć¢ge, ne sont que des exemplaires de la mĆØre. Le format est plus petit, voilĆ  tout. Une annĆ©e s'Ć©coula, puis une autre. On disait dans le village: --Ces ThĆ©nardier sont de braves gens. Ils ne sont pas riches, et ils Ć©lĆØvent un pauvre enfant qu'on leur a abandonnĆ© chez eux! On croyait Cosette oubliĆ©e par sa mĆØre. Cependant le ThĆ©nardier, ayant appris par on ne sait quelles voies obscures que l'enfant Ć©tait probablement bĆ¢tard et que la mĆØre ne pouvait l'avouer, exigea quinze francs par mois, disant que Ā«la crĆ©atureĀ» grandissait et Ā«_mangeait_Ā», et menaƧant de la renvoyer. Ā«Quelle ne m'embĆŖte pas! s'Ć©criait-il, je lui bombarde son mioche tout au beau milieu de ses cachotteries. Il me faut de l'augmentation.Ā» La mĆØre paya les quinze francs. D'annĆ©e en annĆ©e, l'enfant grandit, et sa misĆØre aussi. Tant que Cosette fut toute petite, elle fut le souffre-douleur des deux autres enfants; dĆØs qu'elle se mit Ć  se dĆ©velopper un peu, c'est-Ć -dire avant mĆŖme qu'elle eĆ»t cinq ans, elle devint la servante de la maison. Cinq ans, dira-t-on, c'est invraisemblable. HĆ©las, c'est vrai. La souffrance sociale commence Ć  tout Ć¢ge. N'avons-nous pas vu, rĆ©cemment, le procĆØs d'un nommĆ© Dumolard, orphelin devenu bandit, qui, dĆØs l'Ć¢ge de cinq ans, disent les documents officiels, Ć©tant seul au monde Ā«travaillait pour vivre, et volait.Ā» On fit faire Ć  Cosette les commissions, balayer les chambres, la cour, la rue, laver la vaisselle, porter mĆŖme des fardeaux. Les ThĆ©nardier se crurent d'autant plus autorisĆ©s Ć  agir ainsi que la mĆØre qui Ć©tait toujours Ć  Montreuil-sur-mer commenƧa Ć  mal payer. Quelques mois restĆØrent en souffrance. Si cette mĆØre fĆ»t revenue Ć  Montfermeil au bout de ces trois annĆ©es, elle n'eĆ»t point reconnu son enfant. Cosette, si jolie et si fraĆ®che Ć  son arrivĆ©e dans cette maison, Ć©tait maintenant maigre et blĆŖme. Elle avait je ne sais quelle allure inquiĆØte. Sournoise! disaient les ThĆ©nardier. L'injustice l'avait faite hargneuse et la misĆØre l'avait rendue laide. Il ne lui restait plus que ses beaux yeux qui faisaient peine, parce que, grands comme ils Ć©taient, il semblait qu'on y vĆ®t une plus grande quantitĆ© de tristesse. C'Ć©tait une chose navrante de voir, l'hiver, ce pauvre enfant, qui n'avait pas encore six ans, grelottant sous de vieilles loques de toile trouĆ©es, balayer la rue avant le jour avec un Ć©norme balai dans ses petites mains rouges et une larme dans ses grands yeux. Dans le pays on l'appelait l'Alouette. Le peuple, qui aime les figures, s'Ć©tait plu Ć  nommer de ce nom ce petit ĆŖtre pas plus gros qu'un oiseau, tremblant, effarouchĆ© et frissonnant, Ć©veillĆ© le premier chaque matin dans la maison et dans le village, toujours dans la rue ou dans les champs avant l'aube. Seulement la pauvre Alouette ne chantait jamais. Livre cinquiĆØme--La descente Chapitre I Histoire d'un progrĆØs dans les verroteries noires Cette mĆØre cependant qui, au dire des gens de Montfermeil, semblait avoir abandonnĆ© son enfant, que devenait-elle? où Ć©tait-elle? que faisait-elle? AprĆØs avoir laissĆ© sa petite Cosette aux ThĆ©nardier, elle avait continuĆ© son chemin et Ć©tait arrivĆ©e Ć  Montreuil-sur-mer. C'Ć©tait, on se le rappelle, en 1818. Fantine avait quittĆ© sa province depuis une dizaine d'annĆ©es. Montreuil-sur-mer avait changĆ© d'aspect. Tandis que Fantine descendait lentement de misĆØre en misĆØre, sa ville natale avait prospĆ©rĆ©. Depuis deux ans environ, il s'y Ć©tait accompli un de ces faits industriels qui sont les grands Ć©vĆ©nements des petits pays. Ce dĆ©tail importe, et nous croyons utile de le dĆ©velopper; nous dirions presque, de le souligner. De temps immĆ©morial, Montreuil-sur-mer avait pour industrie spĆ©ciale l'imitation des jais anglais et des verroteries noires d'Allemagne. Cette industrie avait toujours vĆ©gĆ©tĆ©, Ć  cause de la chertĆ© des matiĆØres premiĆØres qui rĆ©agissait sur la main-d'oeuvre. Au moment où Fantine revint Ć  Montreuil-sur-mer, une transformation inouĆÆe s'Ć©tait opĆ©rĆ©e dans cette production des Ā«articles noirsĀ». Vers la fin de 1815, un homme, un inconnu, Ć©tait venu s'Ć©tablir dans la ville et avait eu l'idĆ©e de substituer, dans cette fabrication, la gomme laque Ć  la rĆ©sine et, pour les bracelets en particulier, les coulants en tĆ“le simplement rapprochĆ©e aux coulants en tĆ“le soudĆ©e. Ce tout petit changement avait Ć©tĆ© une rĆ©volution. Ce tout petit changement en effet avait prodigieusement rĆ©duit le prix de la matiĆØre premiĆØre, ce qui avait permis, premiĆØrement, d'Ć©lever le prix de la main-d'oeuvre, bienfait pour le pays; deuxiĆØmement, d'amĆ©liorer la fabrication, avantage pour le consommateur; troisiĆØmement, de vendre Ć  meilleur marchĆ© tout en triplant le bĆ©nĆ©fice, profit pour le manufacturier. Ainsi pour une idĆ©e trois rĆ©sultats. En moins de trois ans, l'auteur de ce procĆ©dĆ© Ć©tait devenu riche, ce qui est bien, et avait tout fait riche autour de lui, ce qui est mieux. Il Ć©tait Ć©tranger au dĆ©partement. De son origine, on ne savait rien; de ses commencements, peu de chose. On contait qu'il Ć©tait venu dans la ville avec fort peu d'argent, quelques centaines de francs tout au plus. C'est de ce mince capital, mis au service d'une idĆ©e ingĆ©nieuse, fĆ©condĆ© par l'ordre et par la pensĆ©e, qu'il avait tirĆ© sa fortune et la fortune de tout ce pays. ƀ son arrivĆ©e Ć  Montreuil-sur-mer, il n'avait que les vĆŖtements, la tournure et le langage d'un ouvrier. Il paraĆ®t que, le jour mĆŖme où il faisait obscurĆ©ment son entrĆ©e dans la petite ville de Montreuil-sur-mer, Ć  la tombĆ©e d'un soir de dĆ©cembre, le sac au dos et le bĆ¢ton d'Ć©pine Ć  la main, un gros incendie venait d'Ć©clater Ć  la maison commune. Cet homme s'Ć©tait jetĆ© dans le feu, et avait sauvĆ©, au pĆ©ril de sa vie, deux enfants qui se trouvaient ĆŖtre ceux du capitaine de gendarmerie; ce qui fait qu'on n'avait pas songĆ© Ć  lui demander son passeport. Depuis lors, on avait su son nom. Il s'appelait le _pĆØre Madeleine_. Chapitre II M. Madeleine C'Ć©tait un homme d'environ cinquante ans, qui avait l'air prĆ©occupĆ© et qui Ć©tait bon. VoilĆ  tout ce qu'on en pouvait dire. GrĆ¢ce aux progrĆØs rapides de cette industrie qu'il avait si admirablement remaniĆ©e, Montreuil-sur-mer Ć©tait devenu un centre d'affaires considĆ©rable. L'Espagne, qui consomme beaucoup de jais noir, y commandait chaque annĆ©e des achats immenses. Montreuil-sur-mer, pour ce commerce, faisait presque concurrence Ć  Londres et Ć  Berlin. Les bĆ©nĆ©fices du pĆØre Madeleine Ć©taient tels que, dĆØs la deuxiĆØme annĆ©e, il avait pu bĆ¢tir une grande fabrique dans laquelle il y avait deux vastes ateliers, l'un pour les hommes, l'autre pour les femmes. Quiconque avait faim pouvait s'y prĆ©senter, et Ć©tait sĆ»r de trouver lĆ  de l'emploi et du pain. Le pĆØre Madeleine demandait aux hommes de la bonne volontĆ©, aux femmes des moeurs pures, Ć  tous de la probitĆ©. Il avait divisĆ© les ateliers afin de sĆ©parer les sexes et que les filles et les femmes pussent rester sages. Sur ce point, il Ć©tait inflexible. C'Ć©tait le seul où il fĆ»t en quelque sorte intolĆ©rant. Il Ć©tait d'autant plus fondĆ© Ć  cette sĆ©vĆ©ritĆ© que, Montreuil-sur-mer Ć©tant une ville de garnison, les occasions de corruption abondaient. Du reste sa venue avait Ć©tĆ© un bienfait, et sa prĆ©sence Ć©tait une providence. Avant l'arrivĆ©e du pĆØre Madeleine, tout languissait dans le pays; maintenant tout y vivait de la vie saine du travail. Une forte circulation Ć©chauffait tout et pĆ©nĆ©trait partout. Le chĆ“mage et la misĆØre Ć©taient inconnus. Il n'y avait pas de poche si obscure où il n'y eĆ»t un peu d'argent, pas de logis si pauvre où il n'y eĆ»t un peu de joie. Le pĆØre Madeleine employait tout le monde. Il n'exigeait qu'une chose: soyez honnĆŖte homme! soyez honnĆŖte fille! Comme nous l'avons dit, au milieu de cette activitĆ© dont il Ć©tait la cause et le pivot, le pĆØre Madeleine faisait sa fortune, mais, chose assez singuliĆØre dans un simple homme de commerce, il ne paraissait point que ce fĆ»t lĆ  son principal souci. Il semblait qu'il songeĆ¢t beaucoup aux autres et peu Ć  lui. En 1820, on lui connaissait une somme de six cent trente mille francs placĆ©e Ć  son nom chez Laffitte; mais avant de se rĆ©server ces six cent trente mille francs, il avait dĆ©pensĆ© plus d'un million pour la ville et pour les pauvres. L'hĆ“pital Ć©tait mal dotĆ©; il y avait fondĆ© dix lits. Montreuil-sur-mer est divisĆ© en ville haute et ville basse. La ville basse, qu'il habitait, n'avait qu'une Ć©cole, mĆ©chante masure qui tombait en ruine; il en avait construit deux, une pour les filles, l'autre pour les garƧons. Il allouait de ses deniers aux deux instituteurs une indemnitĆ© double de leur maigre traitement officiel, et un jour, Ć  quelqu'un qui s'en Ć©tonnait, il dit: Ā«Les deux premiers fonctionnaires de l'Ć©tat, c'est la nourrice et le maĆ®tre d'Ć©cole.Ā» Il avait crƩƩ Ć  ses frais une salle d'asile, chose alors presque inconnue en France, et une caisse de secours pour les ouvriers vieux et infirmes. Sa manufacture Ć©tant un centre, un nouveau quartier où il y avait bon nombre de familles indigentes avait rapidement surgi autour de lui; il y avait Ć©tabli une pharmacie gratuite. Dans les premiers temps, quand on le vit commencer, les bonnes Ć¢mes dirent: C'est un gaillard qui veut s'enrichir. Quand on le vit enrichir le pays avant de s'enrichir lui-mĆŖme, les mĆŖmes bonnes Ć¢mes dirent: C'est un ambitieux. Cela semblait d'autant plus probable que cet homme Ć©tait religieux, et mĆŖme pratiquait dans une certaine mesure, chose fort bien vue Ć  cette Ć©poque. Il allait rĆ©guliĆØrement entendre une basse messe tous les dimanches. Le dĆ©putĆ© local, qui flairait partout des concurrences, ne tarda pas Ć  s'inquiĆ©ter de cette religion. Ce dĆ©putĆ©, qui avait Ć©tĆ© membre du corps lĆ©gislatif de l'empire, partageait les idĆ©es religieuses d'un pĆØre de l'oratoire connu sous le nom de FouchĆ©, duc d'Otrante, dont il avait Ć©tĆ© la crĆ©ature et l'ami. ƀ huis clos il riait de Dieu doucement. Mais quand il vit le riche manufacturier Madeleine aller Ć  la basse messe de sept heures, il entrevit un candidat possible, et rĆ©solut de le dĆ©passer; il prit un confesseur jĆ©suite et alla Ć  la grand'messe et Ć  vĆŖpres. L'ambition en ce temps-lĆ  Ć©tait, dans l'acception directe du mot, une course au clocher. Les pauvres profitĆØrent de cette terreur comme le bon Dieu, car l'honorable dĆ©putĆ© fonda aussi deux lits Ć  l'hĆ“pital; ce qui fit douze. Cependant en 1819 le bruit se rĆ©pandit un matin dans la ville que, sur la prĆ©sentation de M. le prĆ©fet, et en considĆ©ration des services rendus au pays, le pĆØre Madeleine allait ĆŖtre nommĆ© par le roi maire de Montreuil-sur-mer. Ceux qui avaient dĆ©clarĆ© ce nouveau venu Ā«un ambitieuxĀ», saisirent avec transport cette occasion que tous les hommes souhaitent de s'Ć©crier: Ā«LĆ ! qu'est-ce que nous avions dit?Ā» Tout Montreuil-sur-mer fut en rumeur. Le bruit Ć©tait fondĆ©. Quelques jours aprĆØs, la nomination parut dans _le Moniteur_. Le lendemain, le pĆØre Madeleine refusa. Dans cette mĆŖme annĆ©e 1819, les produits du nouveau procĆ©dĆ© inventĆ© par Madeleine figurĆØrent Ć  l'exposition de l'industrie; sur le rapport du jury, le roi nomma l'inventeur chevalier de la LĆ©gion d'honneur. Nouvelle rumeur dans la petite ville. Eh bien! c'est la croix qu'il voulait! Le pĆØre Madeleine refusa la croix. DĆ©cidĆ©ment cet homme Ć©tait une Ć©nigme. Les bonnes Ć¢mes se tirĆØrent d'affaire en disant: AprĆØs tout, c'est une espĆØce d'aventurier. On l'a vu, le pays lui devait beaucoup, les pauvres lui devaient tout; il Ć©tait si utile qu'il avait bien fallu qu'on finĆ®t par l'honorer, et il Ć©tait si doux qu'il avait bien fallu qu'on finĆ®t par l'aimer; ses ouvriers en particulier l'adoraient, et il portait cette adoration avec une sorte de gravitĆ© mĆ©lancolique. Quand il fut constatĆ© riche, Ā«les personnes de la sociĆ©té» le saluĆØrent, et on l'appela dans la ville monsieur Madeleine; ses ouvriers et les enfants continuĆØrent de l'appeler _le pĆØre Madeleine_, et c'Ć©tait la chose qui le faisait le mieux sourire. ƀ mesure qu'il montait, les invitations pleuvaient sur lui. Ā«La sociĆ©té» le rĆ©clamait. Les petits salons guindĆ©s de Montreuil-sur-mer qui, bien entendu, se fussent dans les premiers temps fermĆ©s Ć  l'artisan, s'ouvrirent Ć  deux battants au millionnaire. On lui fit mille avances. Il refusa. Cette fois encore les bonnes Ć¢mes ne furent point empĆŖchĆ©es. --C'est un homme ignorant et de basse Ć©ducation. On ne sait d'où cela sort. Il ne saurait pas se tenir dans le monde. Il n'est pas du tout prouvĆ© qu'il sache lire. Quand on l'avait vu gagner de l'argent, on avait dit: c'est un marchand. Quand on l'avait vu semer son argent, on avait dit: c'est un ambitieux. Quand on l'avait vu repousser les honneurs, on avait dit: c'est un aventurier. Quand on le vit repousser le monde, on dit: c'est une brute. En 1820, cinq ans aprĆØs son arrivĆ©e Ć  Montreuil-sur-mer, les services qu'il avait rendus au pays Ć©taient si Ć©clatants, le voeu de la contrĆ©e fut tellement unanime, que le roi le nomma de nouveau maire de la ville. Il refusa encore, mais le prĆ©fet rĆ©sista Ć  son refus, tous les notables vinrent le prier, le peuple en pleine rue le suppliait, l'insistance fut si vive qu'il finit par accepter. On remarqua que ce qui parut surtout le dĆ©terminer, ce fut l'apostrophe presque irritĆ©e d'une vieille femme du peuple qui lui cria du seuil de sa porte avec humeur: _Un bon maire, c'est utile. Est-ce qu'on recule devant du bien qu'on peut faire?_ Ce fut lĆ  la troisiĆØme phase de son ascension. Le pĆØre Madeleine Ć©tait devenu monsieur Madeleine, monsieur Madeleine devint monsieur le maire. Chapitre III Sommes dĆ©posĆ©es chez Laffitte Du reste, il Ć©tait demeurĆ© aussi simple que le premier jour. Il avait les cheveux gris, l'oeil sĆ©rieux, le teint hĆ¢lĆ© d'un ouvrier, le visage pensif d'un philosophe. Il portait habituellement un chapeau Ć  bords larges et une longue redingote de gros drap, boutonnĆ©e jusqu'au menton. Il remplissait ses fonctions de maire, mais hors de lĆ  il vivait solitaire. Il parlait Ć  peu de monde. Il se dĆ©robait aux politesses, saluait de cĆ“tĆ©, s'esquivait vite, souriait pour se dispenser de causer, donnait pour se dispenser de sourire. Les femmes disaient de lui: Quel bon ours! Son plaisir Ć©tait de se promener dans les champs. Il prenait ses repas toujours seul, avec un livre ouvert devant lui où il lisait. Il avait une petite bibliothĆØque bien faite. Il aimait les livres; les livres sont des amis froids et sĆ»rs. ƀ mesure que le loisir lui venait avec la fortune, il semblait qu'il en profitĆ¢t pour cultiver son esprit. Depuis qu'il Ć©tait Ć  Montreuil-sur-mer, on remarquait que d'annĆ©e en annĆ©e son langage devenait plus poli, plus choisi et plus doux. Il emportait volontiers un fusil dans ses promenades, mais il s'en servait rarement. Quand cela lui arrivait par aventure, il avait un tir infaillible qui effrayait. Jamais il ne tuait un animal inoffensif. Jamais il ne tirait un petit oiseau. Quoiqu'il ne fĆ»t plus jeune, on contait qu'il Ć©tait d'une force prodigieuse. Il offrait un coup de main Ć  qui en avait besoin, relevait un cheval, poussait Ć  une roue embourbĆ©e, arrĆŖtait par les cornes un taureau Ć©chappĆ©. Il avait toujours ses poches pleines de monnaie en sortant et vides en rentrant. Quand il passait dans un village, les marmots dĆ©guenillĆ©s couraient joyeusement aprĆØs lui et l'entouraient comme une nuĆ©e de moucherons. On croyait deviner qu'il avait dĆ» vivre jadis de la vie des champs, car il avait toutes sortes de secrets utiles qu'il enseignait aux paysans. Il leur apprenait Ć  dĆ©truire la teigne des blĆ©s en aspergeant le grenier et en inondant les fentes du plancher d'une dissolution de sel commun, et Ć  chasser les charanƧons en suspendant partout, aux murs et aux toits, dans les hĆ©berges et dans les maisons, de l'orviot en fleur. Il avait des "recettes" pour extirper d'un champ la luzette, la nielle, la vesce, la gaverolle, la queue-de-renard, toutes les herbes parasites qui mangent le blĆ©. Il dĆ©fendait une lapiniĆØre contre les rats rien qu'avec l'odeur d'un petit cochon de Barbarie qu'il y mettait. Un jour il voyait des gens du pays trĆØs occupĆ©s Ć  arracher des orties. Il regarda ce tas de plantes dĆ©racinĆ©es et dĆ©jĆ  dessĆ©chĆ©es, et dit: --C'est mort. Cela serait pourtant bon si l'on savait s'en servir. Quand l'ortie est jeune, la feuille est un lĆ©gume excellent; quand elle vieillit, elle a des filaments et des fibres comme le chanvre et le lin. La toile d'ortie vaut la toile de chanvre. HachĆ©e, l'ortie est bonne pour la volaille; broyĆ©e, elle est bonne pour les bĆŖtes Ć  cornes. La graine de l'ortie mĆŖlĆ©e au fourrage donne du luisant au poil des animaux; la racine mĆŖlĆ©e au sel produit une belle couleur jaune. C'est du reste un excellent foin qu'on peut faucher deux fois. Et que faut-il Ć  l'ortie? Peu de terre, nul soin, nulle culture. Seulement la graine tombe Ć  mesure qu'elle mĆ»rit, et est difficile Ć  rĆ©colter. VoilĆ  tout. Avec quelque peine qu'on prendrait, l'ortie serait utile; on la nĆ©glige, elle devient nuisible. Alors on la tue. Que d'hommes ressemblent Ć  l'ortie! Il ajouta aprĆØs un silence: --Mes amis, retenez ceci, il n'y a ni mauvaises herbes ni mauvais hommes. Il n'y a que de mauvais cultivateurs. Les enfants l'aimaient encore parce qu'il savait faire de charmants petits ouvrages avec de la paille et des noix de coco. Quand il voyait la porte d'une Ć©glise tendue de noir, il entrait; il recherchait un enterrement comme d'autres recherchent un baptĆŖme. Le veuvage et le malheur d'autrui l'attiraient Ć  cause de sa grande douceur; il se mĆŖlait aux amis en deuil, aux familles vĆŖtues de noir, aux prĆŖtres gĆ©missant autour d'un cercueil. Il semblait donner volontiers pour texte Ć  ses pensĆ©es ces psalmodies funĆØbres pleines de la vision d'un autre monde. L'oeil au ciel, il Ć©coutait, avec une sorte d'aspiration vers tous les mystĆØres de l'infini, ces voix tristes qui chantent sur le bord de l'abĆ®me obscur de la mort. Il faisait une foule de bonnes actions en se cachant comme on se cache pour les mauvaises. Il pĆ©nĆ©trait Ć  la dĆ©robĆ©e, le soir, dans les maisons; il montait furtivement des escaliers. Un pauvre diable, en rentrant dans son galetas, trouvait que sa porte avait Ć©tĆ© ouverte, quelquefois mĆŖme forcĆ©e, dans son absence. Le pauvre homme se rĆ©criait: quelque malfaiteur est venu! Il entrait, et la premiĆØre chose qu'il voyait, c'Ć©tait une piĆØce d'or oubliĆ©e sur un meuble. "Le malfaiteur" qui Ć©tait venu, c'Ć©tait le pĆØre Madeleine. Il Ć©tait affable et triste. Le peuple disait: Ā«VoilĆ  un homme riche qui n'a pas l'air fier. VoilĆ  un homme heureux qui n'a pas l'air content.Ā» Quelques-uns prĆ©tendaient que c'Ć©tait un personnage mystĆ©rieux, et affirmaient qu'on n'entrait jamais dans sa chambre, laquelle Ć©tait une vraie cellule d'anachorĆØte meublĆ©e de sabliers ailĆ©s et enjolivĆ©e de tibias en croix et de tĆŖtes de mort. Cela se disait beaucoup, si bien que quelques jeunes femmes Ć©lĆ©gantes et malignes de Montreuil-sur-mer vinrent chez lui un jour, et lui demandĆØrent: --Monsieur le maire, montrez-nous donc votre chambre. On dit que c'est une grotte. Il sourit, et les introduisit sur-le-champ dans cette Ā«grotteĀ». Elles furent bien punies de leur curiositĆ©. C'Ć©tait une chambre garnie tout bonnement de meubles d'acajou assez laids comme tous les meubles de ce genre et tapissĆ©e de papier Ć  douze sous. Elles n'y purent rien remarquer que deux flambeaux de forme vieillie qui Ć©taient sur la cheminĆ©e et qui avaient l'air d'ĆŖtre en argent, Ā«car ils Ć©taient contrĆ“lĆ©sĀ». Observation pleine de l'esprit des petites villes. On n'en continua pas moins de dire que personne ne pĆ©nĆ©trait dans cette chambre et que c'Ć©tait une caverne d'ermite, un rĆŖvoir, un trou, un tombeau. On se chuchotait aussi qu'il avait des sommes Ā«immensesĀ» dĆ©posĆ©es chez Laffitte, avec cette particularitĆ© qu'elles Ć©taient toujours Ć  sa disposition immĆ©diate, de telle sorte, ajoutait-on, que M. Madeleine pourrait arriver un matin chez Laffitte, signer un reƧu et emporter ses deux ou trois millions en dix minutes. Dans la rĆ©alitĆ© ces Ā«deux ou trois millionsĀ» se rĆ©duisaient, nous l'avons dit, Ć  six cent trente ou quarante mille francs. Chapitre IV M. Madeleine en deuil Au commencement de 1821, les journaux annoncĆØrent la mort de M. Myriel, Ć©vĆŖque de Digne, Ā«surnommĆ© _monseigneur Bienvenu_Ā», et trĆ©passĆ© en odeur de saintetĆ© Ć  l'Ć¢ge de quatre-vingt-deux ans. L'Ć©vĆŖque de Digne, pour ajouter ici un dĆ©tail que les journaux omirent, Ć©tait, quand il mourut, depuis plusieurs annĆ©es aveugle, et content d'ĆŖtre aveugle, sa soeur Ć©tant prĆØs de lui. Disons-le en passant, ĆŖtre aveugle et ĆŖtre aimĆ©, c'est en effet, sur cette terre où rien n'est complet, une des formes les plus Ć©trangement exquises du bonheur. Avoir continuellement Ć  ses cĆ“tĆ©s une femme, une fille, une soeur, un ĆŖtre charmant, qui est lĆ  parce que vous avez besoin d'elle et parce qu'elle ne peut se passer de vous, se savoir indispensable Ć  qui nous est nĆ©cessaire, pouvoir incessamment mesurer son affection Ć  la quantitĆ© de prĆ©sence qu'elle nous donne, et se dire: puisqu'elle me consacre tout son temps, c'est que j'ai tout son coeur; voir la pensĆ©e Ć  dĆ©faut de la figure, constater la fidĆ©litĆ© d'un ĆŖtre dans l'Ć©clipse du monde, percevoir le frĆ“lement d'une robe comme un bruit d'ailes, l'entendre aller et venir, sortir, rentrer, parler, chanter, et songer qu'on est le centre de ces pas, de cette parole, de ce chant, manifester Ć  chaque minute sa propre attraction, se sentir d'autant plus puissant qu'on est plus infirme, devenir dans l'obscuritĆ©, et par l'obscuritĆ©, l'astre autour duquel gravite cet ange, peu de fĆ©licitĆ©s Ć©galent celle-lĆ . Le suprĆŖme bonheur de la vie, c'est la conviction qu'on est aimĆ©; aimĆ© pour soi-mĆŖme, disons mieux, aimĆ© malgrĆ© soi-mĆŖme; cette conviction, l'aveugle l'a. Dans cette dĆ©tresse, ĆŖtre servi, c'est ĆŖtre caressĆ©. Lui manque-t-il quelque chose? Non. Ce n'est point perdre la lumiĆØre qu'avoir l'amour. Et quel amour! un amour entiĆØrement fait de vertu. Il n'y a point de cĆ©citĆ© où il y a certitude. L'Ć¢me Ć  tĆ¢tons cherche l'Ć¢me, et la trouve. Et cette Ć¢me trouvĆ©e et prouvĆ©e est une femme. Une main vous soutient, c'est la sienne; une bouche effleure votre front, c'est sa bouche; vous entendez une respiration tout prĆØs de vous, c'est elle. Tout avoir d'elle, depuis son culte jusqu'Ć  sa pitiĆ©, n'ĆŖtre jamais quittĆ©, avoir cette douce faiblesse qui vous secourt, s'appuyer sur ce roseau inĆ©branlable, toucher de ses mains la providence et pouvoir la prendre dans ses bras, Dieu palpable, quel ravissement! Le coeur, cette cĆ©leste fleur obscure, entre dans un Ć©panouissement mystĆ©rieux. On ne donnerait pas cette ombre pour toute la clartĆ©. L'Ć¢me ange est lĆ , sans cesse lĆ ; si elle s'Ć©loigne, c'est pour revenir; elle s'efface comme le rĆŖve et reparaĆ®t comme la rĆ©alitĆ©. On sent de la chaleur qui approche, la voilĆ . On dĆ©borde de sĆ©rĆ©nitĆ©, de gaĆ®tĆ© et d'extase; on est un rayonnement dans la nuit. Et mille petits soins. Des riens qui sont Ć©normes dans ce vide. Les plus ineffables accents de la voix fĆ©minine employĆ©s Ć  vous bercer, et supplĆ©ant pour vous Ć  l'univers Ć©vanoui. On est caressĆ© avec de l'Ć¢me. On ne voit rien, mais on se sent adorĆ©. C'est un paradis de tĆ©nĆØbres. C'est de ce paradis que monseigneur Bienvenu Ć©tait passĆ© Ć  l'autre. L'annonce de sa mort fut reproduite par le journal local de Montreuil-sur-mer. M. Madeleine parut le lendemain tout en noir avec un crĆŖpe Ć  son chapeau. On remarqua dans la ville ce deuil, et l'on jasa. Cela parut une lueur sur l'origine de M. Madeleine. On en conclut qu'il avait quelque alliance avec le vĆ©nĆ©rable Ć©vĆŖque. _Il drape pour l'Ć©vĆŖque de Digne_, dirent les salons; cela rehaussa fort M. Madeleine, et lui donna subitement et d'emblĆ©e une certaine considĆ©ration dans le monde noble de Montreuil-sur-mer. Le microscopique faubourg Saint-Germain de l'endroit songea Ć  faire cesser la quarantaine de M. Madeleine, parent probable d'un Ć©vĆŖque. M. Madeleine s'aperƧut de l'avancement qu'il obtenait Ć  plus de rĆ©vĆ©rences des vieilles femmes et Ć  plus de sourires des jeunes. Un soir, une doyenne de ce petit grand monde-lĆ , curieuse par droit d'anciennetĆ©, se hasarda Ć  lui demander: --Monsieur le maire est sans doute cousin du feu Ć©vĆŖque de Digne? Il dit: --Non, madame. --Mais, reprit la douairiĆØre, vous en portez le deuil? Il rĆ©pondit: --C'est que dans ma jeunesse j'ai Ć©tĆ© laquais dans sa famille. Une remarque qu'on faisait encore, c'est que, chaque fois qu'il passait dans la ville un jeune savoyard courant le pays et cherchant des cheminĆ©es Ć  ramoner, M. le maire le faisait appeler, lui demandait son nom, et lui donnait de l'argent. Les petits savoyards se le disaient, et il en passait beaucoup. Chapitre V Vagues Ć©clairs Ć  l'horizon Peu Ć  peu, et avec le temps, toutes les oppositions Ć©taient tombĆ©es. Il y avait eu d'abord contre M. Madeleine, sorte de loi que subissent toujours ceux qui s'Ć©lĆØvent, des noirceurs et des calomnies, puis ce ne fut plus que des mĆ©chancetĆ©s, puis ce ne fut que des malices, puis cela s'Ć©vanouit tout Ć  fait; le respect devint complet, unanime, cordial, et il arriva un moment, vers 1821, où ce mot: monsieur le maire, fut prononcĆ© Ć  Montreuil-sur-mer presque du mĆŖme accent que ce mot: monseigneur l'Ć©vĆŖque, Ć©tait prononcĆ© Ć  Digne en 1815. On venait de dix lieues Ć  la ronde consulter M. Madeleine. Il terminait les diffĆ©rends, il empĆŖchait les procĆØs, il rĆ©conciliait les ennemis. Chacun le prenait pour juge de son bon droit. Il semblait qu'il eĆ»t pour Ć¢me le livre de la loi naturelle. Ce fut comme une contagion de vĆ©nĆ©ration qui, en six ou sept ans et de proche en proche, gagna tout le pays. Un seul homme, dans la ville et dans l'arrondissement, se dĆ©roba absolument Ć  cette contagion, et, quoi que fĆ®t le pĆØre Madeleine, y demeura rebelle, comme si une sorte d'instinct, incorruptible et imperturbable, l'Ć©veillait et l'inquiĆ©tait. Il semblerait en effet qu'il existe dans certains hommes un vĆ©ritable instinct bestial, pur et intĆØgre comme tout instinct, qui crĆ©e les antipathies et les sympathies, qui sĆ©pare fatalement une nature d'une autre nature, qui n'hĆ©site pas, qui ne se trouble, ne se tait et ne se dĆ©ment jamais, clair dans son obscuritĆ©, infaillible, impĆ©rieux, rĆ©fractaire Ć  tous les conseils de l'intelligence et Ć  tous les dissolvants de la raison, et qui, de quelque faƧon que les destinĆ©es soient faites, avertit secrĆØtement l'homme-chien de la prĆ©sence de l'homme-chat, et l'homme-renard de la prĆ©sence de l'homme-lion. Souvent, quand M. Madeleine passait dans une rue, calme, affectueux, entourĆ© des bĆ©nĆ©dictions de tous, il arrivait qu'un homme de haute taille, vĆŖtu d'une redingote gris de fer, armĆ© d'une grosse canne et coiffĆ© d'un chapeau rabattu, se retournait brusquement derriĆØre lui, et le suivait des yeux jusqu'Ć  ce qu'il eĆ»t disparu, croisant les bras, secouant lentement la tĆŖte, et haussant sa lĆØvre supĆ©rieure avec sa lĆØvre infĆ©rieure jusqu'Ć  son nez, sorte de grimace significative qui pourrait se traduire par: Ā«Mais qu'est-ce que c'est que cet homme-lĆ ?--Pour sĆ»r je l'ai vu quelque part.--En tout cas, je ne suis toujours pas sa dupe.Ā» Ce personnage, grave d'une gravitĆ© presque menaƧante, Ć©tait de ceux qui, mĆŖme rapidement entrevus, prĆ©occupent l'observateur. Il se nommait Javert, et il Ć©tait de la police. Il remplissait Ć  Montreuil-sur-mer les fonctions pĆ©nibles, mais utiles, d'inspecteur. Il n'avait pas vu les commencements de Madeleine. Javert devait le poste qu'il occupait Ć  la protection de M. Chabouillet, le secrĆ©taire du ministre d'Ɖtat, comte AnglĆØs, alors prĆ©fet de police Ć  Paris. Quand Javert Ć©tait arrivĆ© Ć  Montreuil-sur-mer, la fortune du grand manufacturier Ć©tait dĆ©jĆ  faite, et le pĆØre Madeleine Ć©tait devenu monsieur Madeleine. Certains officiers de police ont une physionomie Ć  part et qui se complique d'un air de bassesse mĆŖlĆ© Ć  un air d'autoritĆ©. Javert avait cette physionomie, moins la bassesse. Dans notre conviction, si les Ć¢mes Ć©taient visibles aux yeux, on verrait distinctement cette chose Ć©trange que chacun des individus de l'espĆØce humaine correspond Ć  quelqu'une des espĆØces de la crĆ©ation animale; et l'on pourrait reconnaĆ®tre aisĆ©ment cette vĆ©ritĆ© Ć  peine entrevue par le penseur, que, depuis l'huĆ®tre jusqu'Ć  l'aigle, depuis le porc jusqu'au tigre, tous les animaux sont dans l'homme et que chacun d'eux est dans un homme. Quelquefois mĆŖme plusieurs d'entre eux Ć  la fois. Les animaux ne sont autre chose que les figures de nos vertus et de nos vices, errantes devant nos yeux, les fantĆ“mes visibles de nos Ć¢mes. Dieu nous les montre pour nous faire rĆ©flĆ©chir. Seulement, comme les animaux ne sont que des ombres, Dieu ne les a point faits Ć©ducables dans le sens complet du mot; Ć  quoi bon? Au contraire, nos Ć¢mes Ć©tant des rĆ©alitĆ©s et ayant une fin qui leur est propre, Dieu leur a donnĆ© l'intelligence, c'est-Ć -dire l'Ć©ducation possible. L'Ć©ducation sociale bien faite peut toujours tirer d'une Ć¢me, quelle qu'elle soit, l'utilitĆ© qu'elle contient. Ceci soit dit, bien entendu, au point de vue restreint de la vie terrestre apparente, et sans prĆ©juger la question profonde de la personnalitĆ© antĆ©rieure et ultĆ©rieure des ĆŖtres qui ne sont pas l'homme. Le moi visible n'autorise en aucune faƧon le penseur Ć  nier le moi latent. Cette rĆ©serve faite, passons. Maintenant, si l'on admet un moment avec nous que dans tout homme il y a une des espĆØces animales de la crĆ©ation, il nous sera facile de dire ce que c'Ć©tait que l'officier de paix Javert. Les paysans asturiens sont convaincus que dans toute portĆ©e de louve il y a un chien, lequel est tuĆ© par la mĆØre, sans quoi en grandissant il dĆ©vorerait les autres petits. Donnez une face humaine Ć  ce chien fils d'une louve, et ce sera Javert. Javert Ć©tait nĆ© dans une prison d'une tireuse de cartes dont le mari Ć©tait aux galĆØres. En grandissant, il pensa qu'il Ć©tait en dehors de la sociĆ©tĆ© et dĆ©sespĆ©ra d'y rentrer jamais. Il remarqua que la sociĆ©tĆ© maintient irrĆ©missiblement en dehors d'elle deux classes d'hommes, ceux qui l'attaquent et ceux qui la gardent; il n'avait le choix qu'entre ces deux classes; en mĆŖme temps il se sentait je ne sais quel fond de rigiditĆ©, de rĆ©gularitĆ© et de probitĆ©, compliquĆ© d'une inexprimable haine pour cette race de bohĆØmes dont il Ć©tait. Il entra dans la police. Il y rĆ©ussit. ƀ quarante ans il Ć©tait inspecteur. Il avait dans sa jeunesse Ć©tĆ© employĆ© dans les chiourmes du midi. Avant d'aller plus loin, entendons-nous sur ce mot face humaine que nous appliquions tout Ć  l'heure Ć  Javert. La face humaine de Javert consistait en un nez camard, avec deux profondes narines vers lesquelles montaient sur ses deux joues d'Ć©normes favoris. On se sentait mal Ć  l'aise la premiĆØre fois qu'on voyait ces deux forĆŖts et ces deux cavernes. Quand Javert riait, ce qui Ć©tait rare et terrible, ses lĆØvres minces s'Ć©cartaient, et laissaient voir, non seulement ses dents, mais ses gencives, et il se faisait autour de son nez un plissement Ć©patĆ© et sauvage comme sur un mufle de bĆŖte fauve. Javert sĆ©rieux Ć©tait un dogue; lorsqu'il riait, c'Ć©tait un tigre. Du reste, peu de crĆ¢ne, beaucoup de mĆ¢choire, les cheveux cachant le front et tombant sur les sourcils, entre les deux yeux un froncement central permanent comme une Ć©toile de colĆØre, le regard obscur, la bouche pincĆ©e et redoutable, l'air du commandement fĆ©roce. Cet homme Ć©tait composĆ© de deux sentiments trĆØs simples, et relativement trĆØs bons, mais qu'il faisait presque mauvais Ć  force de les exagĆ©rer: le respect de l'autoritĆ©, la haine de la rĆ©bellion; et Ć  ses yeux le vol, le meurtre, tous les crimes, n'Ć©taient que des formes de la rĆ©bellion. Il enveloppait dans une sorte de foi aveugle et profonde tout ce qui a une fonction dans l'Ɖtat, depuis le premier ministre jusqu'au garde champĆŖtre. Il couvrait de mĆ©pris, d'aversion et de dĆ©goĆ»t tout ce qui avait franchi une fois le seuil lĆ©gal du mal. Il Ć©tait absolu et n'admettait pas d'exceptions. D'une part il disait: --Le fonctionnaire ne peut se tromper; le magistrat n'a jamais tort. D'autre part il disait: --Ceux-ci sont irrĆ©mĆ©diablement perdus. Rien de bon n'en peut sortir. Il partageait pleinement l'opinion de ces esprits extrĆŖmes qui attribuent Ć  la loi humaine je ne sais quel pouvoir de faire ou, si l'on veut, de constater des damnĆ©s, et qui mettent un Styx au bas de la sociĆ©tĆ©. Il Ć©tait stoĆÆque, sĆ©rieux, austĆØre; rĆŖveur triste; humble et hautain comme les fanatiques. Son regard Ć©tait une vrille. Cela Ć©tait froid et cela perƧait. Toute sa vie tenait dans ces deux mots: veiller et surveiller. Il avait introduit la ligne droite dans ce qu'il y a de plus tortueux au monde; il avait la conscience de son utilitĆ©, la religion de ses fonctions, et il Ć©tait espion comme on est prĆŖtre. Malheur Ć  qui tombait sous sa main! Il eĆ»t arrĆŖtĆ© son pĆØre s'Ć©vadant du bagne et dĆ©noncĆ© sa mĆØre en rupture de ban. Et il l'eĆ»t fait avec cette sorte de satisfaction intĆ©rieure que donne la vertu. Avec cela une vie de privations, l'isolement, l'abnĆ©gation, la chastetĆ©, jamais une distraction. C'Ć©tait le devoir implacable, la police comprise comme les Spartiates comprenaient Sparte, un guet impitoyable, une honnĆŖtetĆ© farouche, un mouchard marmorĆ©en, Brutus dans Vidocq. Toute la personne de Javert exprimait l'homme qui Ć©pie et qui se dĆ©robe. L'Ć©cole mystique de Joseph de Maistre, laquelle Ć  cette Ć©poque assaisonnait de haute cosmogonie ce qu'on appelait les journaux ultras, n'eĆ»t pas manquĆ© de dire que Javert Ć©tait un symbole. On ne voyait pas son front qui disparaissait sous son chapeau, on ne voyait pas ses yeux qui se perdaient sous ses sourcils, on ne voyait pas son menton qui plongeait dans sa cravate, on ne voyait pas ses mains qui rentraient dans ses manches, on ne voyait pas sa canne qu'il portait sous sa redingote. Mais l'occasion venue, on voyait tout Ć  coup sortir de toute cette ombre, comme d'une embuscade, un front anguleux et Ć©troit, un regard funeste, un menton menaƧant, des mains Ć©normes; et un gourdin monstrueux. ƀ ses moments de loisir, qui Ć©taient peu frĆ©quents, tout en haĆÆssant les livres, il lisait; ce qui fait qu'il n'Ć©tait pas complĆØtement illettrĆ©. Cela se reconnaissait Ć  quelque emphase dans la parole. Il n'avait aucun vice, nous l'avons dit. Quand il Ć©tait content de lui, il s'accordait une prise de tabac. Il tenait Ć  l'humanitĆ© par lĆ . On comprendra sans peine que Javert Ć©tait l'effroi de toute cette classe que la statistique annuelle du ministĆØre de la justice dĆ©signe sous la rubrique: _Gens sans aveu_. Le nom de Javert prononcĆ© les mettait en dĆ©route; la face de Javert apparaissant les pĆ©trifiait. Tel Ć©tait cet homme formidable. Javert Ć©tait comme un oeil toujours fixĆ© sur M. Madeleine. Oeil plein de soupƧon et de conjectures. M. Madeleine avait fini par s'en apercevoir, mais il sembla que cela fĆ»t insignifiant pour lui. Il ne fit pas mĆŖme une question Ć  Javert, il ne le cherchait ni ne l'Ć©vitait, et il portait, sans paraĆ®tre y faire attention, ce regard gĆŖnant et presque pesant. Il traitait Javert comme tout le monde, avec aisance et bontĆ©. ƀ quelques paroles Ć©chappĆ©es Ć  Javert, on devinait qu'il avait recherchĆ© secrĆØtement, avec cette curiositĆ© qui tient Ć  la race et où il entre autant d'instinct que de volontĆ©, toutes les traces antĆ©rieures que le pĆØre Madeleine avait pu laisser ailleurs. Il paraissait savoir, et il disait parfois Ć  mots couverts, que quelqu'un avait pris certaines informations dans un certain pays sur une certaine famille disparue. Une fois il lui arriva de dire, se parlant Ć  lui-mĆŖme: --Je crois que je le tiens! Puis il resta trois jours pensif sans prononcer une parole. Il paraĆ®t que le fil qu'il croyait tenir s'Ć©tait rompu. Du reste, et ceci est le correctif nĆ©cessaire Ć  ce que le sens de certains mots pourrait prĆ©senter de trop absolu, il ne peut y avoir rien de vraiment infaillible dans une crĆ©ature humaine, et le propre de l'instinct est prĆ©cisĆ©ment de pouvoir ĆŖtre troublĆ©, dĆ©pistĆ© et dĆ©routĆ©. Sans quoi il serait supĆ©rieur Ć  l'intelligence, et la bĆŖte se trouverait avoir une meilleure lumiĆØre que l'homme. Javert Ć©tait Ć©videmment quelque peu dĆ©concertĆ© par le complet naturel et la tranquillitĆ© de M. Madeleine. Un jour pourtant son Ć©trange maniĆØre d'ĆŖtre parut faire impression sur M. Madeleine. Voici Ć  quelle occasion. Chapitre VI Le pĆØre Fauchelevent M. Madeleine passait un matin dans une ruelle non pavĆ©e de Montreuil-sur-mer. Il entendit du bruit et vit un groupe Ć  quelque distance. Il y alla. Un vieux homme, nommĆ© le pĆØre Fauchelevent, venait de tomber sous sa charrette dont le cheval s'Ć©tait abattu. Ce Fauchelevent Ć©tait un des rares ennemis qu'eĆ»t encore M. Madeleine Ć  cette Ć©poque. Lorsque Madeleine Ć©tait arrivĆ© dans le pays, Fauchelevent, ancien tabellion et paysan presque lettrĆ©, avait un commerce qui commenƧait Ć  aller mal. Fauchelevent avait vu ce simple ouvrier qui s'enrichissait, tandis que lui, maĆ®tre, se ruinait. Cela l'avait rempli de jalousie, et il avait fait ce qu'il avait pu en toute occasion pour nuire Ć  Madeleine. Puis la faillite Ć©tait venue, et, vieux, n'ayant plus Ć  lui qu'une charrette et un cheval, sans famille et sans enfants du reste, pour vivre il s'Ć©tait fait charretier. Le cheval avait les deux cuisses cassĆ©es et ne pouvait se relever. Le vieillard Ć©tait engagĆ© entre les roues. La chute avait Ć©tĆ© tellement malheureuse que toute la voiture pesait sur sa poitrine. La charrette Ć©tait assez lourdement chargĆ©e. Le pĆØre Fauchelevent poussait des rĆ¢les lamentables. On avait essayĆ© de le tirer, mais en vain. Un effort dĆ©sordonnĆ©, une aide maladroite, une secousse Ć  faux pouvaient l'achever. Il Ć©tait impossible de le dĆ©gager autrement qu'en soulevant la voiture par-dessous. Javert, qui Ć©tait survenu au moment de l'accident, avait envoyĆ© chercher un cric. M. Madeleine arriva. On s'Ć©carta avec respect. --ƀ l'aide! criait le vieux Fauchelevent. Qui est-ce qui est bon enfant pour sauver le vieux? M. Madeleine se tourna vers les assistants: --A-t-on un cric? --On en est allĆ© quĆ©rir un, rĆ©pondit un paysan. --Dans combien de temps l'aura-t-on? --On est allĆ© au plus prĆØs, au lieu Flachot, où il y a un marĆ©chal; mais c'est Ć©gal, il faudra bien un bon quart d'heure. --Un quart d'heure! s'Ć©cria Madeleine. Il avait plu la veille, le sol Ć©tait dĆ©trempĆ©, la charrette s'enfonƧait dans la terre Ć  chaque instant et comprimait de plus en plus la poitrine du vieux charretier. Il Ć©tait Ć©vident qu'avant cinq minutes il aurait les cĆ“tes brisĆ©es. --Il est impossible d'attendre un quart d'heure, dit Madeleine aux paysans qui regardaient. --Il faut bien! --Mais il ne sera plus temps! Vous ne voyez donc pas que la charrette s'enfonce? --Dame! --Ɖcoutez, reprit Madeleine, il y a encore assez de place sous la voiture pour qu'un homme s'y glisse et la soulĆØve avec son dos. Rien qu'une demi-minute, et l'on tirera le pauvre homme. Y a-t-il ici quelqu'un qui ait des reins et du coeur? Cinq louis d'or Ć  gagner! Personne ne bougea dans le groupe. --Dix louis, dit Madeleine. Les assistants baissaient les yeux. Un d'eux murmura: --Il faudrait ĆŖtre diablement fort. Et puis, on risque de se faire Ć©craser! --Allons! recommenƧa Madeleine, vingt louis! MĆŖme silence. --Ce n'est pas la bonne volontĆ© qui leur manque, dit une voix. M. Madeleine se retourna, et reconnut Javert. Il ne l'avait pas aperƧu en arrivant. Javert continua: --C'est la force. Il faudrait ĆŖtre un terrible homme pour faire la chose de lever une voiture comme cela sur son dos. Puis, regardant fixement M. Madeleine, il poursuivit en appuyant sur chacun des mots qu'il prononƧait: --Monsieur Madeleine, je n'ai jamais connu qu'un seul homme capable de faire ce que vous demandez lĆ . Madeleine tressaillit. Javert ajouta avec un air d'indiffĆ©rence, mais sans quitter des yeux Madeleine: --C'Ć©tait un forƧat. --Ah! dit Madeleine. --Du bagne de Toulon. Madeleine devint pĆ¢le. Cependant la charrette continuait Ć  s'enfoncer lentement. Le pĆØre Fauchelevent rĆ¢lait et hurlait: --J'Ć©touffe! Ƈa me brise les cĆ“tes! Un cric! quelque chose! Ah! Madeleine regarda autour de lui: --Il n'y a donc personne qui veuille gagner vingt louis et sauver la vie Ć  ce pauvre vieux? Aucun des assistants ne remua. Javert reprit: --Je n'ai jamais connu qu'un homme qui pĆ»t remplacer un cric. C'Ć©tait ce forƧat. --Ah! voilĆ  que Ƨa m'Ć©crase! cria le vieillard. Madeleine leva la tĆŖte, rencontra l'oeil de faucon de Javert toujours attachĆ© sur lui, regarda les paysans immobiles, et sourit tristement. Puis, sans dire une parole, il tomba Ć  genoux, et avant mĆŖme que la foule eĆ»t eu le temps de jeter un cri, il Ć©tait sous la voiture. Il y eut un affreux moment d'attente et de silence. On vit Madeleine presque Ć  plat ventre sous ce poids effrayant essayer deux fois en vain de rapprocher ses coudes de ses genoux. On lui cria: --PĆØre Madeleine! retirez-vous de lĆ ! Le vieux Fauchelevent lui-mĆŖme lui dit: --Monsieur Madeleine! allez-vous-en! C'est qu'il faut que je meure, voyez-vous! Laissez-moi! Vous allez vous faire Ć©craser aussi! Madeleine ne rĆ©pondit pas. Les assistants haletaient. Les roues avaient continuĆ© de s'enfoncer, et il Ć©tait dĆ©jĆ  devenu presque impossible que Madeleine sortĆ®t de dessous la voiture. Tout Ć  coup on vit l'Ć©norme masse s'Ć©branler, la charrette se soulevait lentement, les roues sortaient Ć  demi de l'orniĆØre. On entendit une voix Ć©touffĆ©e qui criait: --DĆ©pĆŖchez-vous! aidez! C'Ć©tait Madeleine qui venait de faire un dernier effort. Ils se prĆ©cipitĆØrent. Le dĆ©vouement d'un seul avait donnĆ© de la force et du courage Ć  tous. La charrette fut enlevĆ©e par vingt bras. Le vieux Fauchelevent Ć©tait sauvĆ©. Madeleine se releva. Il Ć©tait blĆŖme, quoique ruisselant de sueur. Ses habits Ć©taient dĆ©chirĆ©s et couverts de boue. Tous pleuraient. Le vieillard lui baisait les genoux et l'appelait le bon Dieu. Lui, il avait sur le visage je ne sais quelle expression de souffrance heureuse et cĆ©leste, et il fixait son oeil tranquille sur Javert qui le regardait toujours. Chapitre VII Fauchelevent devient jardinier Ć  Paris Fauchelevent s'Ć©tait dĆ©mis la rotule dans sa chute. Le pĆØre Madeleine le fit transporter dans une infirmerie qu'il avait Ć©tablie pour ses ouvriers dans le bĆ¢timent mĆŖme de sa fabrique et qui Ć©tait desservie par deux soeurs de charitĆ©. Le lendemain matin, le vieillard trouva un billet de mille francs sur sa table de nuit, avec ce mot de la main du pĆØre Madeleine: _Je vous achĆØte votre charrette et votre cheval_. La charrette Ć©tait brisĆ©e et le cheval Ć©tait mort. Fauchelevent guĆ©rit, mais son genou resta ankylosĆ©. M. Madeleine, par les recommandations des soeurs et de son curĆ©, fit placer le bonhomme comme jardinier dans un couvent de femmes du quartier Saint-Antoine Ć  Paris. Quelque temps aprĆØs, M. Madeleine fut nommĆ© maire. La premiĆØre fois que Javert vit M. Madeleine revĆŖtu de l'Ć©charpe qui lui donnait toute autoritĆ© sur la ville, il Ć©prouva cette sorte de frĆ©missement qu'Ć©prouverait un dogue qui flairerait un loup sous les habits de son maĆ®tre. ƀ partir de ce moment, il l'Ć©vita le plus qu'il put. Quand les besoins du service l'exigeaient impĆ©rieusement et qu'il ne pouvait faire autrement que de se trouver avec M. le maire, il lui parlait avec un respect profond. Cette prospĆ©ritĆ© crƩƩe Ć  Montreuil-sur-mer par le pĆØre Madeleine avait, outre les signes visibles que nous avons indiquĆ©s, un autre symptĆ“me qui, pour n'ĆŖtre pas visible, n'Ć©tait pas moins significatif. Ceci ne trompe jamais. Quand la population souffre, quand le travail manque, quand le commerce est nul, le contribuable rĆ©siste Ć  l'impĆ“t par pĆ©nurie, Ć©puise et dĆ©passe les dĆ©lais, et l'Ć©tat dĆ©pense beaucoup d'argent en frais de contrainte et de rentrĆ©e. Quand le travail abonde, quand le pays est heureux et riche, l'impĆ“t se paye aisĆ©ment et coĆ»te peu Ć  l'Ć©tat. On peut dire que la misĆØre et la richesse publiques ont un thermomĆØtre infaillible, les frais de perception de l'impĆ“t. En sept ans, les frais de perception de l'impĆ“t s'Ć©taient rĆ©duits des trois quarts dans l'arrondissement de Montreuil-sur-mer, ce qui faisait frĆ©quemment citer cet arrondissement entre tous par M. de VillĆØle, alors ministre des finances. Telle Ć©tait la situation du pays, lorsque Fantine y revint. Personne ne se souvenait plus d'elle. Heureusement la porte de la fabrique de M. Madeleine Ć©tait comme un visage ami. Elle s'y prĆ©senta, et fut admise dans l'atelier des femmes. Le mĆ©tier Ć©tait tout nouveau pour Fantine, elle n'y pouvait ĆŖtre bien adroite, elle ne tirait donc de sa journĆ©e de travail que peu de chose, mais enfin cela suffisait, le problĆØme Ć©tait rĆ©solu, elle gagnait sa vie. Chapitre VIII Madame Victurnien dĆ©pense trente-cinq francs pour la morale Quand Fantine vit qu'elle vivait, elle eut un moment de joie. Vivre honnĆŖtement de son travail, quelle grĆ¢ce du ciel! Le goĆ»t du travail lui revint vraiment. Elle acheta un miroir, se rĆ©jouit d'y regarder sa jeunesse, ses beaux cheveux et ses belles dents, oublia beaucoup de choses, ne songea plus qu'Ć  sa Cosette et Ć  l'avenir possible, et fut presque heureuse. Elle loua une petite chambre et la meubla Ć  crĆ©dit sur son travail futur; reste de ses habitudes de dĆ©sordre. Ne pouvant pas dire qu'elle Ć©tait mariĆ©e, elle s'Ć©tait bien gardĆ©e, comme nous l'avons dĆ©jĆ  fait entrevoir, de parler de sa petite fille. En ces commencements, on l'a vu, elle payait exactement les ThĆ©nardier. Comme elle ne savait que signer, elle Ć©tait obligĆ©e de leur Ć©crire par un Ć©crivain public. Elle Ć©crivait souvent. Cela fut remarquĆ©. On commenƧa Ć  dire tout bas dans l'atelier des femmes que Fantine «écrivait des lettresĀ» et qu'Ā«elle avait des alluresĀ». Il n'y a rien de tel pour Ć©pier les actions des gens que ceux qu'elles ne regardent pas.--Pourquoi ce monsieur ne vient-il jamais qu'Ć  la brune? pourquoi monsieur un tel n'accroche-t-il jamais sa clef au clou le jeudi? pourquoi prend-il toujours les petites rues? pourquoi madame descend-elle toujours de son fiacre avant d'arriver Ć  la maison? pourquoi envoie-t-elle acheter un cahier de papier Ć  lettres, quand elle en a Ā«plein sa papeterie?Ā» etc., etc.--Il existe des ĆŖtres qui, pour connaĆ®tre le mot de ces Ć©nigmes, lesquelles leur sont du reste parfaitement indiffĆ©rentes, dĆ©pensent plus d'argent, prodiguent plus de temps, se donnent plus de peine qu'il n'en faudrait pour dix bonnes actions; et cela, gratuitement, pour le plaisir, sans ĆŖtre payĆ©s de la curiositĆ© autrement que par la curiositĆ©. Ils suivront celui-ci ou celle-lĆ  des jours entiers, feront faction des heures Ć  des coins de rue, sous des portes d'allĆ©es, la nuit, par le froid et par la pluie, corrompront des commissionnaires, griseront des cochers de fiacre et des laquais, achĆØteront une femme de chambre, feront acquisition d'un portier. Pourquoi? pour rien. Pur acharnement de voir, de savoir et de pĆ©nĆ©trer. Pure dĆ©mangeaison de dire. Et souvent ces secrets connus, ces mystĆØres publiĆ©s, ces Ć©nigmes Ć©clairĆ©es du grand jour, entraĆ®nent des catastrophes, des duels, des faillites, des familles ruinĆ©es, des existences brisĆ©es, Ć  la grande joie de ceux qui ont Ā«tout dĆ©couvertĀ» sans intĆ©rĆŖt et par pur instinct. Chose triste. Certaines personnes sont mĆ©chantes uniquement par besoin de parler. Leur conversation, causerie dans le salon, bavardage dans l'antichambre, est comme ces cheminĆ©es qui usent vite le bois; il leur faut beaucoup de combustible; et le combustible, c'est le prochain. On observa donc Fantine. Avec cela, plus d'une Ć©tait jalouse de ses cheveux blonds et de ses dents blanches. On constata que dans l'atelier, au milieu des autres, elle se dĆ©tournait souvent pour essuyer une larme. C'Ć©taient les moments où elle songeait Ć  son enfant; peut-ĆŖtre aussi Ć  l'homme qu'elle avait aimĆ©. C'est un douloureux labeur que la rupture des sombres attaches du passĆ©. On constata qu'elle Ć©crivait, au moins deux fois par mois, toujours Ć  la mĆŖme adresse, et qu'elle affranchissait la lettre. On parvint Ć  se procurer l'adresse: _Monsieur, Monsieur ThĆ©nardier, aubergiste, Ć  Montfermeil_. On fit jaser au cabaret l'Ć©crivain public, vieux bonhomme qui ne pouvait pas emplir son estomac de vin rouge sans vider sa poche aux secrets. Bref, on sut que Fantine avait un enfant. Ā«Ce devait ĆŖtre une espĆØce de fille.Ā» Il se trouva une commĆØre qui fit le voyage de Montfermeil, parla aux ThĆ©nardier, et dit Ć  son retour: Ā«Pour mes trente-cinq francs, j'en ai eu le coeur net. J'ai vu l'enfant!Ā» La commĆØre qui fit cela Ć©tait une gorgone appelĆ©e madame Victurnien, gardienne et portiĆØre de la vertu de tout le monde. Madame Victurnien avait cinquante-six ans, et doublait le masque de la laideur du masque de la vieillesse. Voix chevrotante, esprit capricant. Cette vieille femme avait Ć©tĆ© jeune, chose Ć©tonnante. Dans sa jeunesse, en plein 93, elle avait Ć©pousĆ© un moine Ć©chappĆ© du cloĆ®tre en bonnet rouge et passĆ© des bernardins aux jacobins. Elle Ć©tait sĆØche, rĆŖche, revĆŖche, pointue, Ć©pineuse, presque venimeuse; tout en se souvenant de son moine dont elle Ć©tait veuve, et qui l'avait fort domptĆ©e et pliĆ©e. C'Ć©tait une ortie où l'on voyait le froissement du froc. ƀ la restauration, elle s'Ć©tait faite bigote, et si Ć©nergiquement que les prĆŖtres lui avaient pardonnĆ© son moine. Elle avait un petit bien qu'elle lĆ©guait bruyamment Ć  une communautĆ© religieuse. Elle Ć©tait fort bien vue Ć  l'Ć©vĆŖchĆ© d'Arras. Cette madame Victurnien donc alla Ć  Montfermeil, et revint en disant: Ā«J'ai vu l'enfantĀ». Tout cela prit du temps. Fantine Ć©tait depuis plus d'un an Ć  la fabrique, lorsqu'un matin la surveillante de l'atelier lui remit, de la part de M. le maire, cinquante francs, en lui disant qu'elle ne faisait plus partie de l'atelier et en l'engageant, de la part de M. le maire, Ć  quitter le pays. C'Ć©tait prĆ©cisĆ©ment dans ce mĆŖme mois que les ThĆ©nardier, aprĆØs avoir demandĆ© douze francs au lieu de six, venaient d'exiger quinze francs au lieu de douze. Fantine fut atterrĆ©e. Elle ne pouvait s'en aller du pays, elle devait son loyer et ses meubles. Cinquante francs ne suffisaient pas pour acquitter cette dette. Elle balbutia quelques mots suppliants. La surveillante lui signifia qu'elle eĆ»t Ć  sortir sur-le-champ de l'atelier. Fantine n'Ć©tait du reste qu'une ouvriĆØre mĆ©diocre. AccablĆ©e de honte plus encore que de dĆ©sespoir, elle quitta l'atelier et rentra dans sa chambre. Sa faute Ć©tait donc maintenant connue de tous! Elle ne se sentit plus la force de dire un mot. On lui conseilla de voir M. le maire; elle n'osa pas. M. le maire lui donnait cinquante francs, parce qu'il Ć©tait bon, et la chassait, parce qu'il Ć©tait juste. Elle plia sous cet arrĆŖt. Chapitre IX SuccĆØs de Madame Victurnien La veuve du moine fut donc bonne Ć  quelque chose. Du reste, M. Madeleine n'avait rien su de tout cela. Ce sont lĆ  de ces combinaisons d'Ć©vĆ©nements dont la vie est pleine. M. Madeleine avait pour habitude de n'entrer presque jamais dans l'atelier des femmes. Il avait mis Ć  la tĆŖte de cet atelier une vieille fille, que le curĆ© lui avait donnĆ©e, et il avait toute confiance dans cette surveillante, personne vraiment respectable, ferme, Ć©quitable, intĆØgre, remplie de la charitĆ© qui consiste Ć  donner, mais n'ayant pas au mĆŖme degrĆ© la charitĆ© qui consiste Ć  comprendre et Ć  pardonner. M. Madeleine se remettait de tout sur elle. Les meilleurs hommes sont souvent forcĆ©s de dĆ©lĆ©guer leur autoritĆ©. C'est dans cette pleine puissance et avec la conviction qu'elle faisait bien, que la surveillante avait instruit le procĆØs, jugĆ©, condamnĆ© et exĆ©cutĆ© Fantine. Quant aux cinquante francs, elle les avait donnĆ©s sur une somme que M. Madeleine lui confiait pour aumĆ“nes et secours aux ouvriĆØres et dont elle ne rendait pas compte. Fantine s'offrit comme servante dans le pays; elle alla d'une maison Ć  l'autre. Personne ne voulut d'elle. Elle n'avait pu quitter la ville. Le marchand fripier auquel elle devait ses meubles, quels meubles! lui avait dit: Ā«Si vous vous en allez, je vous fais arrĆŖter comme voleuse.Ā» Le propriĆ©taire auquel elle devait son loyer, lui avait dit: Ā«Vous ĆŖtes jeune et jolie, vous pouvez payer.Ā» Elle partagea les cinquante francs entre le propriĆ©taire et le fripier, rendit au marchand les trois quarts de son mobilier, ne garda que le nĆ©cessaire, et se trouva sans travail, sans Ć©tat, n'ayant plus que son lit, et devant encore environ cent francs. Elle se mit Ć  coudre de grosses chemises pour les soldats de la garnison, et gagnait douze sous par jour. Sa fille lui en coĆ»tait dix. C'est en ce moment qu'elle commenƧa Ć  mal payer les ThĆ©nardier. Cependant une vieille femme qui lui allumait sa chandelle quand elle rentrait le soir, lui enseigna l'art de vivre dans la misĆØre. DerriĆØre vivre de peu, il y a vivre de rien. Ce sont deux chambres; la premiĆØre est obscure, la seconde est noire. Fantine apprit comment on se passe tout Ć  fait de feu en hiver, comment on renonce Ć  un oiseau qui vous mange un liard de millet tous les deux jours, comment on fait de son jupon sa couverture et de sa couverture son jupon, comment on mĆ©nage sa chandelle en prenant son repas Ć  la lumiĆØre de la fenĆŖtre d'en face. On ne sait pas tout ce que certains ĆŖtres faibles, qui ont vieilli dans le dĆ©nĆ»ment et l'honnĆŖtetĆ©, savent tirer d'un sou. Cela finit par ĆŖtre un talent. Fantine acquit ce sublime talent et reprit un peu de courage. ƀ cette Ć©poque, elle disait Ć  une voisine: --Bah! je me dis: en ne dormant que cinq heures et en travaillant tout le reste Ć  mes coutures, je parviendrai bien toujours Ć  gagner Ć  peu prĆØs du pain. Et puis, quand on est triste, on mange moins. Eh bien! des souffrances, des inquiĆ©tudes, un peu de pain d'un cĆ“tĆ©, des chagrins de l'autre, tout cela me nourrira. Dans cette dĆ©tresse, avoir sa petite fille eĆ»t Ć©tĆ© un Ć©trange bonheur. Elle songea Ć  la faire venir. Mais quoi! lui faire partager son dĆ©nĆ»ment! Et puis, elle devait aux ThĆ©nardier! comment s'acquitter? Et le voyage! comment le payer? La vieille qui lui avait donnĆ© ce qu'on pourrait appeler des leƧons de vie indigente Ć©tait une sainte fille nommĆ©e Marguerite, dĆ©vote de la bonne dĆ©votion, pauvre, et charitable pour les pauvres et mĆŖme pour les riches, sachant tout juste assez Ć©crire pour signer _Margueritte_, et croyant en Dieu, ce qui est la science. Il y a beaucoup de ces vertus-lĆ  en bas; un jour elles seront en haut. Cette vie a un lendemain. Dans les premiers temps, Fantine avait Ć©tĆ© si honteuse qu'elle n'avait pas osĆ© sortir. Quand elle Ć©tait dans la rue, elle devinait qu'on se retournait derriĆØre elle et qu'on la montrait du doigt; tout le monde la regardait et personne ne la saluait; le mĆ©pris Ć¢cre et froid des passants lui pĆ©nĆ©trait dans la chair et dans l'Ć¢me comme une bise. Dans les petites villes, il semble qu'une malheureuse soit nue sous les sarcasmes et la curiositĆ© de tous. ƀ Paris, du moins, personne ne vous connaĆ®t, et cette obscuritĆ© est un vĆŖtement. Oh! comme elle eĆ»t souhaitĆ© venir Ć  Paris! Impossible. Il fallut bien s'accoutumer Ć  la dĆ©considĆ©ration, comme elle s'Ć©tait accoutumĆ©e Ć  l'indigence. Peu Ć  peu elle en prit son parti. AprĆØs deux ou trois mois elle secoua la honte et se remit Ć  sortir comme si de rien n'Ć©tait. --Cela m'est bien Ć©gal, dit-elle. Elle alla et vint, la tĆŖte haute, avec un sourire amer, et sentit qu'elle devenait effrontĆ©e. Madame Victurnien quelquefois la voyait passer de sa fenĆŖtre, remarquait la dĆ©tresse de Ā«cette crĆ©atureĀ», grĆ¢ce Ć  elle "remise Ć  sa place", et se fĆ©licitait. Les mĆ©chants ont un bonheur noir. L'excĆØs du travail fatiguait Fantine, et la petite toux sĆØche qu'elle avait augmenta. Elle disait quelquefois Ć  sa voisine Marguerite: Ā«TĆ¢tez donc comme mes mains sont chaudes.Ā» Cependant le matin, quand elle peignait avec un vieux peigne cassĆ© ses beaux cheveux qui ruisselaient comme de la soie floche, elle avait une minute de coquetterie heureuse. Chapitre X Suite du succĆØs Elle avait Ć©tĆ© congĆ©diĆ©e vers la fin de l'hiver; l'Ć©tĆ© se passa, mais l'hiver revint. Jours courts, moins de travail. L'hiver, point de chaleur, point de lumiĆØre, point de midi, le soir touche au matin, brouillard, crĆ©puscule, la fenĆŖtre est grise, on n'y voit pas clair. Le ciel est un soupirail. Toute la journĆ©e est une cave. Le soleil a l'air d'un pauvre. L'affreuse saison! L'hiver change en pierre l'eau du ciel et le coeur de l'homme. Ses crĆ©anciers la harcelaient. Fantine gagnait trop peu. Ses dettes avaient grossi. Les ThĆ©nardier, mal payĆ©s, lui Ć©crivaient Ć  chaque instant des lettres dont le contenu la dĆ©solait et dont le port la ruinait. Un jour ils lui Ć©crivirent que sa petite Cosette Ć©tait toute nue par le froid qu'il faisait, qu'elle avait besoin d'une jupe de laine, et qu'il fallait au moins que la mĆØre envoyĆ¢t dix francs pour cela. Elle reƧut la lettre, et la froissa dans ses mains tout le jour. Le soir elle entra chez un barbier qui habitait le coin de la rue, et dĆ©fit son peigne. Ses admirables cheveux blonds lui tombĆØrent jusqu'aux reins. --Les beaux cheveux! s'Ć©cria le barbier. --Combien m'en donneriez-vous? dit-elle. --Dix francs. --Coupez-les. Elle acheta une jupe de tricot et l'envoya aux ThĆ©nardier. Cette jupe fit les ThĆ©nardier furieux. C'Ć©tait de l'argent qu'ils voulaient. Ils donnĆØrent la jupe Ć  Eponine. La pauvre Alouette continua de frissonner. Fantine pensa: Ā«Mon enfant n'a plus froid. Je l'ai habillĆ©e de mes cheveux.Ā» Elle mettait de petits bonnets ronds qui cachaient sa tĆŖte tondue et avec lesquels elle Ć©tait encore jolie. Un travail tĆ©nĆ©breux se faisait dans le coeur de Fantine. Quand elle vit qu'elle ne pouvait plus se coiffer, elle commenƧa Ć  tout prendre en haine autour d'elle. Elle avait longtemps partagĆ© la vĆ©nĆ©ration de tous pour le pĆØre Madeleine; cependant, Ć  force de se rĆ©pĆ©ter que c'Ć©tait lui qui l'avait chassĆ©e, et qu'il Ć©tait la cause de son malheur, elle en vint Ć  le haĆÆr lui aussi, lui surtout. Quand elle passait devant la fabrique aux heures où les ouvriers sont sur la porte, elle affectait de rire et de chanter. Une vieille ouvriĆØre qui la vit une fois chanter et rire de cette faƧon dit: --VoilĆ  une fille qui finira mal. Elle prit un amant, le premier venu, un homme qu'elle n'aimait pas, par bravade, avec la rage dans le coeur. C'Ć©tait un misĆ©rable, une espĆØce de musicien mendiant, un oisif gueux, qui la battait, et qui la quitta comme elle l'avait pris, avec dĆ©goĆ»t. Elle adorait son enfant. Plus elle descendait, plus tout devenait sombre autour d'elle plus ce doux petit ange rayonnait dans le fond de son Ć¢me. Elle disait. Quand je serai riche, j'aurai ma Cosette avec moi; et elle riait. La toux ne la quittait pas, et elle avait des sueurs dans le dos. Un jour elle reƧut des ThĆ©nardier une lettre ainsi conƧue: Ā«Cosette est malade d'une maladie qui est dans le pays. Une fiĆØvre miliaire, qu'ils appellent. Il faut des drogues chĆØres. Cela nous ruine et nous ne pouvons plus payer. Si vous ne nous envoyez pas quarante francs avant huit jours, la petite est morte.Ā» Elle se mit Ć  rire aux Ć©clats, et elle dit Ć  sa vieille voisine: --Ah! ils sont bons! quarante francs! que Ƨa! Ƨa fait deux napolĆ©ons! Où veulent-ils que je les prenne? Sont-ils bĆŖtes, ces paysans! Cependant elle alla dans l'escalier prĆØs d'une lucarne et relut la lettre. Puis elle descendit l'escalier et sortit en courant et en sautant, riant toujours. Quelqu'un qui la rencontra lui dit: --Qu'est-ce que vous avez donc Ć  ĆŖtre si gaie? Elle rĆ©pondit: --C'est une bonne bĆŖtise que viennent de m'Ć©crire des gens de la campagne. Ils me demandent quarante francs. Paysans, va! Comme elle passait sur la place, elle vit beaucoup de monde qui entourait une voiture de forme bizarre sur l'impĆ©riale de laquelle pĆ©rorait tout debout un homme vĆŖtu de rouge. C'Ć©tait un bateleur dentiste en tournĆ©e, qui offrait au public des rĆ¢teliers complets, des opiats, des poudres et des Ć©lixirs. Fantine se mĆŖla au groupe et se mit Ć  rire comme les autres de cette harangue où il y avait de l'argot pour la canaille et du jargon pour les gens comme il faut. L'arracheur de dents vit cette belle fille qui riait, et s'Ć©cria tout Ć  coup: --Vous avez de jolies dents, la fille qui riez lĆ . Si vous voulez me vendre vos deux palettes, je vous donne de chaque un napolĆ©on d'or. --Qu'est-ce que c'est que Ƨa, mes palettes? demanda Fantine. --Les palettes, reprit le professeur dentiste, c'est les dents de devant, les deux d'en haut. --Quelle horreur! s'Ć©cria Fantine. --Deux napolĆ©ons! grommela une vieille Ć©dentĆ©e qui Ć©tait lĆ . Qu'en voilĆ  une qui est heureuse! Fantine s'enfuit, et se boucha les oreilles pour ne pas entendre la voix enrouĆ©e de l'homme qui lui criait: RĆ©flĆ©chissez, la belle! deux napolĆ©ons, Ƨa peut servir. Si le coeur vous en dit, venez ce soir Ć  l'auberge du _Tillac d'argent_, vous m'y trouverez. Fantine rentra, elle Ć©tait furieuse et conta la chose Ć  sa bonne voisine Marguerite: --Comprenez-vous cela? ne voilĆ -t-il pas un abominable homme? comment laisse-t-on des gens comme cela aller dans le pays! M'arracher mes deux dents de devant! mais je serais horrible! Les cheveux repoussent, mais les dents! Ah! le monstre d'homme! j'aimerais mieux me jeter d'un cinquiĆØme la tĆŖte la premiĆØre sur le pavĆ©! Il m'a dit qu'il serait ce soir au _Tillac d'argent_. --Et qu'est-ce qu'il offrait? demanda Marguerite. --Deux napolĆ©ons. --Cela fait quarante francs. --Oui, dit Fantine, cela fait quarante francs. Elle resta pensive, et se mit Ć  son ouvrage. Au bout d'un quart d'heure, elle quitta sa couture et alla relire la lettre des ThĆ©nardier sur l'escalier. En rentrant, elle dit Ć  Marguerite qui travaillait prĆØs d'elle: --Qu'est-ce que c'est donc que cela, une fiĆØvre miliaire? Savez-vous? --Oui, rĆ©pondit la vieille fille, c'est une maladie. --Ƈa a donc besoin de beaucoup de drogues? --Oh! des drogues terribles. --Où Ƨa vous prend-il? --C'est une maladie qu'on a comme Ƨa. --Cela attaque donc les enfants? --Surtout les enfants. --Est-ce qu'on en meurt? --TrĆØs bien, dit Marguerite. Fantine sortit et alla encore une fois relire la lettre sur l'escalier. Le soir elle descendit, et on la vit qui se dirigeait du cĆ“tĆ© de la rue de Paris où sont les auberges. Le lendemain matin, comme Marguerite entrait dans la chambre de Fantine avant le jour, car elles travaillaient toujours ensemble et de cette faƧon n'allumaient qu'une chandelle pour deux, elle trouva Fantine assise sur son lit, pĆ¢le, glacĆ©e. Elle ne s'Ć©tait pas couchĆ©e. Son bonnet Ć©tait tombĆ© sur ses genoux. La chandelle avait brĆ»lĆ© toute la nuit et Ć©tait presque entiĆØrement consumĆ©e. Marguerite s'arrĆŖta sur le seuil, pĆ©trifiĆ©e de cet Ć©norme dĆ©sordre, et s'Ć©cria: --Seigneur! la chandelle qui est toute brĆ»lĆ©e! il s'est passĆ© des Ć©vĆ©nements! Puis elle regarda Fantine qui tournait vers elle sa tĆŖte sans cheveux. Fantine depuis la veille avait vieilli de dix ans. --JĆ©sus! fit Marguerite, qu'est-ce que vous avez, Fantine? --Je n'ai rien, rĆ©pondit Fantine. Au contraire. Mon enfant ne mourra pas de cette affreuse maladie, faute de secours. Je suis contente. En parlant ainsi, elle montrait Ć  la vieille fille deux napolĆ©ons qui brillaient sur la table. --Ah, JĆ©sus Dieu! dit Marguerite. Mais c'est une fortune! Où avez-vous eu ces louis d'or? --Je les ai eus, rĆ©pondit Fantine. En mĆŖme temps elle sourit. La chandelle Ć©clairait son visage. C'Ć©tait un sourire sanglant. Une salive rougeĆ¢tre lui souillait le coin des lĆØvres, et elle avait un trou noir dans la bouche. Les deux dents Ć©taient arrachĆ©es. Elle envoya les quarante francs Ć  Montfermeil. Du reste c'Ć©tait une ruse des ThĆ©nardier pour avoir de l'argent. Cosette n'Ć©tait pas malade. Fantine jeta son miroir par la fenĆŖtre. Depuis longtemps elle avait quittĆ© sa cellule du second pour une mansarde fermĆ©e d'un loquet sous le toit; un de ces galetas dont le plafond fait angle avec le plancher et vous heurte Ć  chaque instant la tĆŖte. Le pauvre ne peut aller au fond de sa chambre comme au fond de sa destinĆ©e qu'en se courbant de plus en plus. Elle n'avait plus de lit, il lui restait une loque qu'elle appelait sa couverture, un matelas Ć  terre et une chaise dĆ©paillĆ©e. Un petit rosier qu'elle avait s'Ć©tait dĆ©ssĆ©chĆ© dans un coin, oubliĆ©. Dans l'autre coin, il y avait un pot Ć  beurre Ć  mettre l'eau, qui gelait l'hiver, et où les diffĆ©rents niveaux de l'eau restaient longtemps marquĆ©s par des cercles de glace. Elle avait perdu la honte, elle perdit la coquetterie. Dernier signe. Elle sortait avec des bonnets sales. Soit faute de temps, soit indiffĆ©rence, elle ne raccommodait plus son linge. ƀ mesure que les talons s'usaient, elle tirait ses bas dans ses souliers. Cela se voyait Ć  de certains plis perpendiculaires. Elle rapiƩƧait son corset, vieux et usĆ©, avec des morceaux de calicot qui se dĆ©chiraient au moindre mouvement. Les gens auxquels elle devait, lui faisaient Ā«des scĆØnesĀ», et ne lui laissaient aucun repos. Elle les trouvait dans la rue, elle les retrouvait dans son escalier. Elle passait des nuits Ć  pleurer et Ć  songer. Elle avait les yeux trĆØs brillants, et elle sentait une douleur fixe dans l'Ć©paule, vers le haut de l'omoplate gauche. Elle toussait beaucoup. Elle haĆÆssait profondĆ©ment le pĆØre Madeleine, et ne se plaignait pas. Elle cousait dix-sept heures par jour; mais un entrepreneur du travail des prisons, qui faisait travailler les prisonniĆØres au rabais, fit tout Ć  coup baisser les prix, ce qui rĆ©duisit la journĆ©e des ouvriĆØres libres Ć  neuf sous. Dix-sept heures de travail, et neuf sous par jour! Ses crĆ©anciers Ć©taient plus impitoyables que jamais. Le fripier, qui avait repris presque tous les meubles, lui disait sans cesse: Quand me payeras-tu, coquine? Que voulait-on d'elle, bon Dieu! Elle se sentait traquĆ©e et il se dĆ©veloppait en elle quelque chose de la bĆŖte farouche. Vers le mĆŖme temps, le ThĆ©nardier lui Ć©crivit que dĆ©cidĆ©ment il avait attendu avec beaucoup trop de bontĆ©, et qu'il lui fallait cent francs, tout de suite; sinon qu'il mettrait Ć  la porte la petite Cosette, toute convalescente de sa grande maladie, par le froid, par les chemins, et qu'elle deviendrait ce qu'elle pourrait, et qu'elle crĆØverait, si elle voulait. Ā«Cent francs, songea Fantine! Mais où y a-t-il un Ć©tat Ć  gagner cent sous par jour?Ā» --Allons! dit-elle, vendons le reste. L'infortunĆ©e se fit fille publique. Chapitre XI _Christus nos liberavit_ Qu'est-ce que c'est que cette histoire de Fantine? C'est la sociĆ©tĆ© achetant une esclave. ƀ qui? ƀ la misĆØre. ƀ la faim, au froid, Ć  l'isolement, Ć  l'abandon, au dĆ©nĆ»ment. MarchĆ© douloureux. Une Ć¢me pour un morceau de pain. La misĆØre offre, la sociĆ©tĆ© accepte. La sainte loi de JĆ©sus-Christ gouverne notre civilisation, mais elle ne la pĆ©nĆØtre pas encore. On dit que l'esclavage a disparu de la civilisation europĆ©enne. C'est une erreur. Il existe toujours, mais il ne pĆØse plus que sur la femme, et il s'appelle prostitution. Il pĆØse sur la femme, c'est-Ć -dire sur la grĆ¢ce, sur la faiblesse, sur la beautĆ©, sur la maternitĆ©. Ceci n'est pas une des moindres hontes de l'homme. Au point de ce douloureux drame où nous sommes arrivĆ©s, il ne reste plus rien Ć  Fantine de ce qu'elle a Ć©tĆ© autrefois. Elle est devenue marbre en devenant boue. Qui la touche a froid. Elle passe, elle vous subit et elle vous ignore; elle est la figure dĆ©shonorĆ©e et sĆ©vĆØre. La vie et l'ordre social lui ont dit leur dernier mot. Il lui est arrivĆ© tout ce qui lui arrivera. Elle a tout ressenti, tout supportĆ©, tout Ć©prouvĆ©, tout souffert, tout perdu, tout pleurĆ©. Elle est rĆ©signĆ©e de cette rĆ©signation qui ressemble Ć  l'indiffĆ©rence comme la mort ressemble au sommeil. Elle n'Ć©vite plus rien. Elle ne craint plus rien. Tombe sur elle toute la nuĆ©e et passe sur elle tout l'ocĆ©an! que lui importe! c'est une Ć©ponge imbibĆ©e. Elle le croit du moins, mais c'est une erreur de s'imaginer qu'on Ć©puise le sort et qu'on touche le fond de quoi que ce soit. HĆ©las! qu'est-ce que toutes ces destinĆ©es ainsi poussĆ©es pĆŖle-mĆŖle? où vont-elles? pourquoi sont-elles ainsi? Celui qui sait cela voit toute l'ombre. Il est seul. Il s'appelle Dieu. Chapitre XII Le dĆ©soeuvrement de M. Bamatabois Il y a dans toutes les petites villes, et il y avait Ć  Montreuil-sur-mer en particulier, une classe de jeunes gens qui grignotent quinze cents livres de rente en province du mĆŖme air dont leurs pareils dĆ©vorent Ć  Paris deux cent mille francs par an. Ce sont des ĆŖtres de la grande espĆØce neutre; hongres, parasites, nuls, qui ont un peu de terre, un peu de sottise et un peu d'esprit, qui seraient des rustres dans un salon et se croient des gentilshommes au cabaret, qui disent: mes prĆ©s, mes bois, mes paysans, sifflent les actrices du théâtre pour prouver qu'ils sont gens de goĆ»t, querellent les officiers de la garnison pour montrer qu'ils sont gens de guerre, chassent, fument, bĆ¢illent, boivent, sentent le tabac, jouent au billard, regardent les voyageurs descendre de diligence, vivent au cafĆ©, dĆ®nent Ć  l'auberge, ont un chien qui mange les os sous la table et une maĆ®tresse qui pose les plats dessus, tiennent Ć  un sou, exagĆØrent les modes, admirent la tragĆ©die, mĆ©prisent les femmes, usent leurs vieilles bottes, copient Londres Ć  travers Paris et Paris Ć  travers Pont-Ć -Mousson, vieillissent hĆ©bĆ©tĆ©s, ne travaillent pas, ne servent Ć  rien et ne nuisent pas Ć  grand'chose. M. FĆ©lix TholomyĆØs, restĆ© dans sa province et n'ayant jamais vu Paris, serait un de ces hommes-lĆ . S'ils Ć©taient plus riches, on dirait: ce sont des Ć©lĆ©gants; s'ils Ć©taient plus pauvres, on dirait: ce sont des fainĆ©ants. Ce sont tout simplement des dĆ©soeuvrĆ©s. Parmi ces dĆ©soeuvrĆ©s, il y a des ennuyeux, des ennuyĆ©s, des rĆŖvasseurs, et quelques drĆ“les. Dans ce temps-lĆ , un Ć©lĆ©gant se composait d'un grand col, d'une grande cravate, d'une montre Ć  breloques, de trois gilets superposĆ©s de couleurs diffĆ©rentes, le bleu et le rouge en dedans, d'un habit couleur olive Ć  taille courte, Ć  queue de morue, Ć  double rangĆ©e de boutons d'argent serrĆ©s les uns contre les autres et montant jusque sur l'Ć©paule, et d'un pantalon olive plus clair, ornĆ© sur les deux coutures d'un nombre de cĆ“tes indĆ©terminĆ©, mais toujours impair, variant de une Ć  onze, limite qui n'Ć©tait jamais franchie. Ajoutez Ć  cela des souliers-bottes avec de petits fers au talon, un chapeau Ć  haute forme et Ć  bords Ć©troits, des cheveux en touffe, une Ć©norme canne, et une conversation rehaussĆ©e des calembours de Potier. Sur le tout des Ć©perons et des moustaches. ƀ cette Ć©poque, des moustaches voulaient dire bourgeois et des Ć©perons voulaient dire piĆ©ton. L'Ć©lĆ©gant de province portait les Ć©perons plus longs et les moustaches plus farouches. C'Ć©tait le temps de la lutte des rĆ©publiques de l'AmĆ©rique mĆ©ridionale contre le roi d'Espagne, de Bolivar contre Morillo. Les chapeaux Ć  petits bords Ć©taient royalistes et se nommaient des morillos; les libĆ©raux portaient des chapeaux Ć  larges bords qui s'appelaient des bolivars. Huit ou dix mois donc aprĆØs ce qui a Ć©tĆ© racontĆ© dans les pages prĆ©cĆ©dentes, vers les premiers jours de janvier 1823, un soir qu'il avait neigĆ©, un de ces Ć©lĆ©gants, un de ces dĆ©soeuvrĆ©s, un "bien pensant", car il avait un morillo, de plus chaudement enveloppĆ© d'un de ces grands manteaux qui complĆ©taient dans les temps froids le costume Ć  la mode, se divertissait Ć  harceler une crĆ©ature qui rĆ“dait en robe de bal et toute dĆ©colletĆ©e avec des fleurs sur la tĆŖte devant la vitre du cafĆ© des officiers. Cet Ć©lĆ©gant fumait, car c'Ć©tait dĆ©cidĆ©ment la mode. Chaque fois que cette femme passait devant lui, il lui jetait, avec une bouffĆ©e de la fumĆ©e de son cigare, quelque apostrophe qu'il croyait spirituelle et gaie, comme:--Que tu es laide!--Veux-tu te cacher!--Tu n'as pas de dents! etc., etc.--Ce monsieur s'appelait monsieur Bamatabois. La femme, triste spectre parĆ© qui allait et venait sur la neige, ne lui rĆ©pondait pas, ne le regardait mĆŖme pas, et n'en accomplissait pas moins en silence et avec une rĆ©gularitĆ© sombre sa promenade qui la ramenait de cinq minutes en cinq minutes sous le sarcasme, comme le soldat condamnĆ© qui revient sous les verges. Ce peu d'effet piqua sans doute l'oisif qui, profitant d'un moment où elle se retournait, s'avanƧa derriĆØre elle Ć  pas de loup et en Ć©touffant son rire, se baissa, prit sur le pavĆ© une poignĆ©e de neige et la lui plongea brusquement dans le dos entre ses deux Ć©paules nues. La fille poussa un rugissement, se tourna, bondit comme une panthĆØre, et se rua sur l'homme, lui enfonƧant ses ongles dans le visage, avec les plus effroyables paroles qui puissent tomber du corps de garde dans le ruisseau. Ces injures, vomies d'une voix enrouĆ©e par l'eau-de-vie, sortaient hideusement d'une bouche Ć  laquelle manquaient en effet les deux dents de devant. C'Ć©tait la Fantine. Au bruit que cela fit, les officiers sortirent en foule du cafĆ©, les passants s'amassĆØrent, et il se forma un grand cercle riant, huant et applaudissant, autour de ce tourbillon composĆ© de deux ĆŖtres où l'on avait peine Ć  reconnaĆ®tre un homme et une femme, l'homme se dĆ©battant, son chapeau Ć  terre, la femme frappant des pieds et des poings, dĆ©coiffĆ©e, hurlant, sans dents et sans cheveux, livide de colĆØre, horrible. Tout Ć  coup un homme de haute taille sortit vivement de la foule, saisit la femme Ć  son corsage de satin couvert de boue, et lui dit: Suis-moi! La femme leva la tĆŖte; sa voix furieuse s'Ć©teignit subitement. Ses yeux Ć©taient vitreux, de livide elle Ć©tait devenue pĆ¢le, et elle tremblait d'un tremblement de terreur. Elle avait reconnu Javert. L'Ć©lĆ©gant avait profitĆ© de l'incident pour s'esquiver. Chapitre XIII Solution de quelques questions de police municipale Javert Ć©carta les assistants, rompit le cercle et se mit Ć  marcher Ć  grands pas vers le bureau de police qui est Ć  l'extrĆ©mitĆ© de la place, traĆ®nant aprĆØs lui la misĆ©rable. Elle se laissait faire machinalement. Ni lui ni elle ne disaient un mot. La nuĆ©e des spectateurs, au paroxysme de la joie, suivait avec des quolibets. La suprĆŖme misĆØre, occasion d'obscĆ©nitĆ©s. ArrivĆ© au bureau de police qui Ć©tait une salle basse chauffĆ©e par un poĆŖle et gardĆ©e par un poste, avec une porte vitrĆ©e et grillĆ©e sur la rue, Javert ouvrit la porte, entra avec Fantine, et referma la porte derriĆØre lui, au grand dĆ©sappointement des curieux qui se haussĆØrent sur la pointe du pied et allongĆØrent le cou devant la vitre trouble du corps de garde, cherchant Ć  voir. La curiositĆ© est une gourmandise. Voir, c'est dĆ©vorer. En entrant, la Fantine alla tomber dans un coin, immobile et muette, accroupie comme une chienne qui a peur. Le sergent du poste apporta une chandelle allumĆ©e sur une table. Javert s'assit, tira de sa poche une feuille de papier timbrĆ© et se mit Ć  Ć©crire. Ces classes de femmes sont entiĆØrement remises par nos lois Ć  la discrĆ©tion de la police. Elle en fait ce qu'elle veut, les punit comme bon lui semble, et confisque Ć  son grĆ© ces deux tristes choses qu'elles appellent leur industrie et leur libertĆ©. Javert Ć©tait impassible; son visage sĆ©rieux ne trahissait aucune Ć©motion. Pourtant il Ć©tait gravement et profondĆ©ment prĆ©occupĆ©. C'Ć©tait un de ces moments où il exerƧait sans contrĆ“le, mais avec tous les scrupules d'une conscience sĆ©vĆØre, son redoutable pouvoir discrĆ©tionnaire. En cet instant, il le sentait, son escabeau d'agent de police Ć©tait un tribunal. Il jugeait. Il jugeait, et il condamnait. Il appelait tout ce qu'il pouvait avoir d'idĆ©es dans l'esprit autour de la grande chose qu'il faisait. Plus il examinait le fait de cette fille, plus il se sentait rĆ©voltĆ©. Il Ć©tait Ć©vident qu'il venait de voir commettre un crime. Il venait de voir, lĆ  dans la rue, la sociĆ©tĆ©, reprĆ©sentĆ©e par un propriĆ©taire-Ć©lecteur, insultĆ©e et attaquĆ©e par une crĆ©ature en dehors de tout. Une prostituĆ©e avait attentĆ© Ć  un bourgeois. Il avait vu cela, lui Javert. Il Ć©crivait en silence. Quand il eut fini, il signa, plia le papier et dit au sergent du poste, en le lui remettant: --Prenez trois hommes, et menez cette fille au bloc. Puis se tournant vers la Fantine: --Tu en as pour six mois. La malheureuse tressaillit. --Six mois! six mois de prison! Six mois Ć  gagner sept sous par jour! Mais que deviendra Cosette? ma fille! ma fille! Mais je dois encore plus de cent francs aux ThĆ©nardier, monsieur l'inspecteur, savez-vous cela? Elle se traĆ®na sur la dalle mouillĆ©e par les bottes boueuses de tous ces hommes, sans se lever, joignant les mains, faisant de grands pas avec ses genoux. --Monsieur Javert, dit-elle, je vous demande grĆ¢ce. Je vous assure que je n'ai pas eu tort. Si vous aviez vu le commencement, vous auriez vu! je vous jure le bon Dieu que je n'ai pas eu tort. C'est ce monsieur le bourgeois que je ne connais pas qui m'a mis de la neige dans le dos. Est-ce qu'on a le droit de nous mettre de la neige dans le dos quand nous passons comme cela tranquillement sans faire de mal Ć  personne? Cela m'a saisie. Je suis un peu malade, voyez-vous! Et puis il y avait dĆ©jĆ  un peu de temps qu'il me disait des raisons. Tu es laide! tu n'as pas de dents! Je le sais bien que je n'ai plus mes dents. Je ne faisais rien, moi; je disais: c'est un monsieur qui s'amuse. J'Ć©tais honnĆŖte avec lui, je ne lui parlais pas. C'est Ć  cet instant-lĆ  qu'il m'a mis de la neige. Monsieur Javert, mon bon monsieur l'inspecteur! est-ce qu'il n'y a personne lĆ  qui ait vu pour vous dire que c'est bien vrai? J'ai peut-ĆŖtre eu tort de me fĆ¢cher. Vous savez, dans le premier moment, on n'est pas maĆ®tre. On a des vivacitĆ©s. Et puis, quelque chose de si froid qu'on vous met dans le dos Ć  l'heure que vous ne vous y attendez pas! J'ai eu tort d'abĆ®mer le chapeau de ce monsieur. Pourquoi s'est-il en allĆ©? Je lui demanderais pardon. Oh! mon Dieu, cela me serait bien Ć©gal de lui demander pardon. Faites-moi grĆ¢ce pour aujourd'hui cette fois, monsieur Javert. Tenez, vous ne savez pas Ƨa, dans les prisons on ne gagne que sept sous, ce n'est pas la faute du gouvernement, mais on gagne sept sous, et figurez-vous que j'ai cent francs Ć  payer, ou autrement on me renverra ma petite. Ɣ mon Dieu! je ne peux pas l'avoir avec moi. C'est si vilain ce que je fais! Ɣ ma Cosette, Ć“ mon petit ange de la bonne sainte Vierge, qu'est-ce qu'elle deviendra, pauvre loup! Je vais vous dire, c'est les ThĆ©nardier, des aubergistes, des paysans, Ƨa n'a pas de raisonnement. Il leur faut de l'argent. Ne me mettez pas en prison! Voyez-vous, c'est une petite qu'on mettrait Ć  mĆŖme sur la grande route, va comme tu pourras, en plein coeur d'hiver, il faut avoir pitiĆ© de cette chose-lĆ , mon bon monsieur Javert. Si c'Ć©tait plus grand, Ƨa gagnerait sa vie, mais Ƨa ne peut pas, Ć  ces Ć¢ges-lĆ . Je ne suis pas une mauvaise femme au fond. Ce n'est pas la lĆ¢chetĆ© et la gourmandise qui ont fait de moi Ƨa. J'ai bu de l'eau-de-vie, c'est par misĆØre. Je ne l'aime pas, mais cela Ć©tourdit. Quand j'Ć©tais plus heureuse, on n'aurait eu qu'Ć  regarder dans mes armoires, on aurait bien vu que je n'Ć©tais pas une femme coquette qui a du dĆ©sordre. J'avais du linge, beaucoup de linge. Ayez pitiĆ© de moi, monsieur Javert! Elle parlait ainsi, brisĆ©e en deux, secouĆ©e par les sanglots, aveuglĆ©e par les larmes, la gorge nue, se tordant les mains, toussant d'une toux sĆØche et courte, balbutiant tout doucement avec la voix de l'agonie. La grande douleur est un rayon divin et terrible qui transfigure les misĆ©rables. ƀ ce moment-lĆ , la Fantine Ć©tait redevenue belle. ƀ de certains instants, elle s'arrĆŖtait et baisait tendrement le bas de la redingote du mouchard. Elle eĆ»t attendri un coeur de granit, mais on n'attendrit pas un coeur de bois. --Allons! dit Javert, je t'ai Ć©coutĆ©e. As-tu bien tout dit? Marche Ć  prĆ©sent! Tu as tes six mois; _le PĆØre Ć©ternel en personne n'y pourrait plus rien_. ƀ cette solennelle parole, Le PĆØre Ć©ternel en personne n'y pourrait plus rien, elle comprit que l'arrĆŖt Ć©tait prononcĆ©. Elle s'affaissa sur elle-mĆŖme en murmurant: --GrĆ¢ce! Javert tourna le dos. Les soldats la saisirent par les bras. Depuis quelques minutes, un homme Ć©tait entrĆ© sans qu'on eĆ»t pris garde Ć  lui. Il avait refermĆ© la porte, s'y Ć©tait adossĆ©, et avait entendu les priĆØres dĆ©sespĆ©rĆ©es de la Fantine. Au moment où les soldats mirent la main sur la malheureuse, qui ne voulait pas se lever, il fit un pas, sortit de l'ombre, et dit: --Un instant, s'il vous plaĆ®t! Javert leva les yeux et reconnut M. Madeleine. Il Ć“ta son chapeau, et saluant avec une sorte de gaucherie fĆ¢chĆ©e: --Pardon, monsieur le maire.... Ce mot, monsieur le maire, fit sur la Fantine un effet Ć©trange. Elle se dressa debout tout d'une piĆØce comme un spectre qui sort de terre, repoussa les soldats des deux bras, marcha droit Ć  M. Madeleine avant qu'on eĆ»t pu la retenir, et le regardant fixement, l'air Ć©garĆ©, elle cria: --Ah! c'est donc toi qui es monsieur le maire! Puis elle Ć©clata de rire et lui cracha au visage. M. Madeleine s'essuya le visage, et dit: --Inspecteur Javert, mettez cette femme en libertĆ©. Javert se sentit au moment de devenir fou. Il Ć©prouvait en cet instant, coup sur coup, et presque mĆŖlĆ©es ensemble, les plus violentes Ć©motions qu'il eĆ»t ressenties de sa vie. Voir une fille publique cracher au visage d'un maire, cela Ć©tait une chose si monstrueuse que, dans ses suppositions les plus effroyables, il eĆ»t regardĆ© comme un sacrilĆØge de le croire possible. D'un autre cĆ“tĆ©, dans le fond de sa pensĆ©e, il faisait confusĆ©ment un rapprochement hideux entre ce qu'Ć©tait cette femme et ce que pouvait ĆŖtre ce maire, et alors il entrevoyait avec horreur je ne sais quoi de tout simple dans ce prodigieux attentat. Mais quand il vit ce maire, ce magistrat, s'essuyer tranquillement le visage et dire: _mettez cette femme en libertĆ©_, il eut comme un Ć©blouissement de stupeur; la pensĆ©e et la parole lui manquĆØrent Ć©galement; la somme de l'Ć©tonnement possible Ć©tait dĆ©passĆ©e pour lui. Il resta muet. Ce mot n'avait pas portĆ© un coup moins Ć©trange Ć  la Fantine. Elle leva son bras nu et se cramponna Ć  la clef du poĆŖle comme une personne qui chancelle. Cependant elle regardait tout autour d'elle et elle se mit Ć  parler Ć  voix basse, comme si elle se parlait Ć  elle-mĆŖme. --En libertĆ©! qu'on me laisse aller! que je n'aille pas en prison six mois! Qui est-ce qui a dit cela? Il n'est pas possible qu'on ait dit cela. J'ai mal entendu. Ƈa ne peut pas ĆŖtre ce monstre de maire! Est-ce que c'est vous, mon bon monsieur Javert, qui avez dit qu'on me mette en libertĆ©? Oh! voyez-vous! je vais vous dire et vous me laisserez aller. Ce monstre de maire, ce vieux gredin de maire, c'est lui qui est cause de tout. Figurez-vous, monsieur Javert, qu'il m'a chassĆ©e! Ć  cause d'un tas de gueuses qui tiennent des propos dans l'atelier. Si ce n'est pas lĆ  une horreur! renvoyer une pauvre fille qui fait honnĆŖtement son ouvrage! Alors je n'ai plus gagnĆ© assez, et tout le malheur est venu. D'abord il y a une amĆ©lioration que ces messieurs de la police devraient bien faire, ce serait d'empĆŖcher les entrepreneurs des prisons de faire du tort aux pauvres gens. Je vais vous expliquer cela, voyez-vous. Vous gagnez douze sous dans les chemises, cela tombe Ć  neuf sous, il n'y a plus moyen de vivre. Il faut donc devenir ce qu'on peut. Moi, j'avais ma petite Cosette, j'ai bien Ć©tĆ© forcĆ©e de devenir une mauvaise femme. Vous comprenez Ć  prĆ©sent, que c'est ce gueux de maire qui a tout fait le mal. AprĆØs cela, j'ai piĆ©tinĆ© le chapeau de ce monsieur bourgeois devant le cafĆ© des officiers. Mais lui, il m'avait perdu toute ma robe avec sa neige. Nous autres, nous n'avons qu'une robe de soie, pour le soir. Voyez-vous, je n'ai jamais fait de mal exprĆØs, vrai, monsieur Javert, et je vois partout des femmes bien plus mĆ©chantes que moi qui sont bien plus heureuses. Ɣ monsieur Javert, c'est vous qui avez dit qu'on me mette dehors, n'est-ce pas? Prenez des informations, parlez Ć  mon propriĆ©taire, maintenant je paye mon terme, on vous dira bien que je suis honnĆŖte. Ah! mon Dieu, je vous demande pardon, j'ai touchĆ©, sans faire attention, Ć  la clef du poĆŖle, et cela fait fumer. M. Madeleine l'Ć©coutait avec une attention profonde. Pendant qu'elle parlait, il avait fouillĆ© dans son gilet, en avait tirĆ© sa bourse et l'avait ouverte. Elle Ć©tait vide. Il l'avait remise dans sa poche. Il dit Ć  la Fantine: --Combien avez-vous dit que vous deviez? La Fantine, qui ne regardait que Javert, se retourna de son cĆ“tĆ©: --Est-ce que je te parle Ć  toi! Puis s'adressant aux soldats: --Dites donc, vous autres, avez-vous vu comme je te vous lui ai crachĆ© Ć  la figure? Ah! vieux scĆ©lĆ©rat de maire, tu viens ici pour me faire peur, mais je n'ai pas peur de toi. J'ai peur de monsieur Javert. J'ai peur de mon bon monsieur Javert! En parlant ainsi elle se retourna vers l'inspecteur: --Avec Ƨa, voyez-vous, monsieur l'inspecteur, il faut ĆŖtre juste. Je comprends que vous ĆŖtes juste, monsieur l'inspecteur. Au fait, c'est tout simple, un homme qui joue Ć  mettre un peu de neige dans le dos d'une femme, Ƨa les faisait rire, les officiers, il faut bien qu'on se divertisse Ć  quelque chose, nous autres nous sommes lĆ  pour qu'on s'amuse, quoi! Et puis, vous, vous venez, vous ĆŖtes bien forcĆ© de mettre l'ordre, vous emmenez la femme qui a tort, mais en y rĆ©flĆ©chissant, comme vous ĆŖtes bon, vous dites qu'on me mette en libertĆ©, c'est pour la petite, parce que six mois en prison, cela m'empĆŖcherait de nourrir mon enfant. Seulement n'y reviens plus, coquine! Oh! je n'y reviendrai plus, monsieur Javert! on me fera tout ce qu'on voudra maintenant, je ne bougerai plus. Seulement, aujourd'hui, voyez-vous, j'ai criĆ© parce que cela m'a fait mal, je ne m'attendais pas du tout Ć  cette neige de ce monsieur, et puis, je vous ai dit, je ne me porte pas trĆØs bien, je tousse, j'ai lĆ  dans l'estomac comme une boule qui me brĆ»le, que le mĆ©decin me dit: soignez-vous. Tenez, tĆ¢tez, donnez votre main, n'ayez pas peur, c'est ici. Elle ne pleurait plus, sa voix Ć©tait caressante, elle appuyait sur sa gorge blanche et dĆ©licate la grosse main rude de Javert, et elle le regardait en souriant. Tout Ć  coup elle rajusta vivement le dĆ©sordre de ses vĆŖtements, fit retomber les plis de sa robe qui en se traĆ®nant s'Ć©tait relevĆ©e presque Ć  la hauteur du genou, et marcha vers la porte en disant Ć  demi-voix aux soldats avec un signe de tĆŖte amical: --Les enfants, monsieur l'inspecteur a dit qu'on me lĆ¢che, je m'en vas. Elle mit la main sur le loquet. Un pas de plus, elle Ć©tait dans la rue. Javert jusqu'Ć  cet instant Ć©tait restĆ© debout, immobile, l'oeil fixĆ© Ć  terre, posĆ© de travers au milieu de cette scĆØne comme une statue dĆ©rangĆ©e qui attend qu'on la mette quelque part. Le bruit que fit le loquet le rĆ©veilla. Il releva la tĆŖte avec une expression d'autoritĆ© souveraine, expression toujours d'autant plus effrayante que le pouvoir se trouve placĆ© plus bas, fĆ©roce chez la bĆŖte fauve, atroce chez l'homme de rien. --Sergent, cria-t-il, vous ne voyez pas que cette drĆ“lesse s'en va! Qui est-ce qui vous a dit de la laisser aller? --Moi, dit Madeleine. La Fantine Ć  la voix de Javert avait tremblĆ© et lĆ¢chĆ© le loquet comme un voleur pris lĆ¢che l'objet volĆ©. ƀ la voix de Madeleine, elle se retourna, et Ć  partir de ce moment, sans qu'elle prononçât un mot, sans qu'elle osĆ¢t mĆŖme laisser sortir son souffle librement, son regard alla tour Ć  tour de Madeleine Ć  Javert et de Javert Ć  Madeleine, selon que c'Ć©tait l'un ou l'autre qui parlait. Il Ć©tait Ć©vident qu'il fallait que Javert eĆ»t Ć©tĆ©, comme on dit, Ā«jetĆ© hors des gondsĀ» pour qu'il se fĆ»t permis d'apostropher le sergent comme il l'avait fait, aprĆØs l'invitation du maire de mettre Fantine en libertĆ©. En Ć©tait-il venu Ć  oublier la prĆ©sence de monsieur le maire? Avait-il fini par se dĆ©clarer Ć  lui-mĆŖme qu'il Ć©tait impossible qu'une Ā«autorité» eĆ»t donnĆ© un pareil ordre, et que bien certainement monsieur le maire avait dĆ» dire sans le vouloir une chose pour une autre? Ou bien, devant les Ć©normitĆ©s dont il Ć©tait tĆ©moin depuis deux heures, se disait-il qu'il fallait revenir aux suprĆŖmes rĆ©solutions, qu'il Ć©tait nĆ©cessaire que le petit se fit grand, que le mouchard se transformĆ¢t en magistrat, que l'homme de police devĆ®nt homme de justice, et qu'en cette extrĆ©mitĆ© prodigieuse l'ordre, la loi, la morale, le gouvernement, la sociĆ©tĆ© tout entiĆØre, se personnifiaient en lui Javert? Quoi qu'il en soit, quand M. Madeleine eut dit ce moi qu'on vient d'entendre, on vit l'inspecteur de police Javert se tourner vers monsieur le maire, pĆ¢le, froid, les lĆØvres bleues, le regard dĆ©sespĆ©rĆ©, tout le corps agitĆ© d'un tremblement imperceptible, et, chose inouĆÆe, lui dire, l'oeil baissĆ©, mais la voix ferme: --Monsieur le maire, cela ne se peut pas. --Comment? dit M. Madeleine. --Cette malheureuse a insultĆ© un bourgeois. --Inspecteur Javert, repartit M. Madeleine avec un accent conciliant et calme, Ć©coutez. Vous ĆŖtes un honnĆŖte homme, et je ne fais nulle difficultĆ© de m'expliquer avec vous. Voici le vrai. Je passais sur la place comme vous emmeniez cette femme, il y avait encore des groupes, je me suis informĆ©, j'ai tout su, c'est le bourgeois qui a eu tort et qui, en bonne police, eĆ»t dĆ» ĆŖtre arrĆŖtĆ©. Javert reprit: --Cette misĆ©rable vient d'insulter monsieur le maire. --Ceci me regarde, dit M. Madeleine. Mon injure est Ć  moi peut-ĆŖtre. J'en puis faire ce que je veux. --Je demande pardon Ć  monsieur le maire. Son injure n'est pas Ć  lui, elle est Ć  la justice. --Inspecteur Javert, rĆ©pliqua M. Madeleine, la premiĆØre justice, c'est la conscience. J'ai entendu cette femme. Je sais ce que je fais. --Et moi, monsieur le maire, je ne sais pas ce que je vois. --Alors contentez-vous d'obĆ©ir. --J'obĆ©is Ć  mon devoir. Mon devoir veut que cette femme fasse six mois de prison. M. Madeleine rĆ©pondit avec douceur: --Ɖcoutez bien ceci. Elle n'en fera pas un jour. ƀ cette parole dĆ©cisive, Javert osa regarder le maire fixement, et lui dit, mais avec un son de voix toujours profondĆ©ment respectueux: --Je suis au dĆ©sespoir de rĆ©sister Ć  monsieur le maire, c'est la premiĆØre fois de ma vie, mais il daignera me permettre de lui faire observer que je suis dans la limite de mes attributions. Je reste, puisque monsieur le maire le veut, dans le fait du bourgeois. J'Ć©tais lĆ . C'est cette fille qui s'est jetĆ©e sur monsieur Bamatabois, qui est Ć©lecteur et propriĆ©taire de cette belle maison Ć  balcon qui fait le coin de l'esplanade, Ć  trois Ć©tages et toute en pierre de taille. Enfin, il y a des choses dans ce monde! Quoi qu'il en soit, monsieur le maire, cela, c'est un fait de police de la rue qui me regarde, et je retiens la femme Fantine. Alors M. Madeleine croisa les bras et dit avec une voix sĆ©vĆØre que personne dans la ville n'avait encore entendue: --Le fait dont vous parlez est un fait de police municipale. Aux termes des articles neuf, onze, quinze et soixante-six du code d'instruction criminelle, j'en suis juge. J'ordonne que cette femme soit mise en libertĆ©. Javert voulut tenter un dernier effort. --Mais, monsieur le maire.... --Je vous rappelle, Ć  vous, l'article quatre-vingt-un de la loi du 13 dĆ©cembre 1799 sur la dĆ©tention arbitraire. --Monsieur le maire, permettez.... --Plus un mot. --Pourtant.... --Sortez, dit M. Madeleine. Javert reƧut le coup, debout, de face, et en pleine poitrine comme un soldat russe. Il salua jusqu'Ć  terre monsieur le maire, et sortit. Fantine se rangea de la porte et le regarda avec stupeur passer devant elle. Cependant elle aussi Ć©tait en proie Ć  un bouleversement Ć©trange. Elle venait de se voir en quelque sorte disputĆ©e par deux puissances opposĆ©es. Elle avait vu lutter devant ses yeux deux hommes tenant dans leurs mains sa libertĆ©, sa vie, son Ć¢me, son enfant; l'un de ces hommes la tirait du cĆ“tĆ© de l'ombre, l'autre la ramenait vers la lumiĆØre. Dans cette lutte, entrevue Ć  travers les grossissements de l'Ć©pouvante, ces deux hommes lui Ć©taient apparus comme deux gĆ©ants; l'un parlait comme son dĆ©mon, l'autre parlait comme son bon ange. L'ange avait vaincu le dĆ©mon, et, chose qui la faisait frissonner de la tĆŖte aux pieds, cet ange, ce libĆ©rateur, c'Ć©tait prĆ©cisĆ©ment l'homme qu'elle abhorrait, ce maire qu'elle avait si longtemps considĆ©rĆ© comme l'auteur de tous ses maux, ce Madeleine! et au moment mĆŖme où elle venait de l'insulter d'une faƧon hideuse, il la sauvait! S'Ć©tait-elle donc trompĆ©e? Devait-elle donc changer toute son Ć¢me?... Elle ne savait, elle tremblait. Elle Ć©coutait Ć©perdue, elle regardait effarĆ©e, et Ć  chaque parole que disait M. Madeleine, elle sentait fondre et s'Ć©crouler en elle les affreuses tĆ©nĆØbres de la haine et naĆ®tre dans son coeur je ne sais quoi de rĆ©chauffant et d'ineffable qui Ć©tait de la joie, de la confiance et de l'amour. Quand Javert fut sorti, M. Madeleine se tourna vers elle, et lui dit avec une voix lente, ayant peine Ć  parler comme un homme sĆ©rieux qui ne veut pas pleurer: --Je vous ai entendue. Je ne savais rien de ce que vous avez dit. Je crois que c'est vrai, et je sens que c'est vrai. J'ignorais mĆŖme que vous eussiez quittĆ© mes ateliers. Pourquoi ne vous ĆŖtes-vous pas adressĆ©e Ć  moi? Mais voici: je payerai vos dettes, je ferai venir votre enfant, ou vous irez la rejoindre. Vous vivrez ici, Ć  Paris, où vous voudrez. Je me charge de votre enfant et de vous. Vous ne travaillerez plus, si vous voulez. Je vous donnerai tout l'argent qu'il vous faudra. Vous redeviendrez honnĆŖte en redevenant heureuse. Et mĆŖme, Ć©coutez, je vous le dĆ©clare dĆØs Ć  prĆ©sent, si tout est comme vous le dites, et je n'en doute pas, vous n'avez jamais cessĆ© d'ĆŖtre vertueuse et sainte devant Dieu. Oh! pauvre femme! C'en Ć©tait plus que la pauvre Fantine n'en pouvait supporter. Avoir Cosette! sortir de cette vie infĆ¢me! vivre libre, riche, heureuse, honnĆŖte, avec Cosette! voir brusquement s'Ć©panouir au milieu de sa misĆØre toutes ces rĆ©alitĆ©s du paradis! Elle regarda comme hĆ©bĆ©tĆ©e cet homme qui lui parlait, et ne put que jeter deux ou trois sanglots: oh! oh! oh! Ses jarrets pliĆØrent, elle se mit Ć  genoux devant M. Madeleine, et, avant qu'il eĆ»t pu l'en empĆŖcher, il sentit qu'elle lui prenait la main et que ses lĆØvres s'y posaient. Puis elle s'Ć©vanouit. Livre sixiĆØme--Javert Chapitre I Commencement du repos M. Madeleine fit transporter la Fantine Ć  cette infirmerie qu'il avait dans sa propre maison. Il la confia aux soeurs qui la mirent au lit. Une fiĆØvre ardente Ć©tait survenue. Elle passa une partie de la nuit Ć  dĆ©lirer et Ć  parler haut. Cependant elle finit par s'endormir. Le lendemain vers midi Fantine se rĆ©veilla, elle entendit une respiration tout prĆØs de son lit, elle Ć©carta son rideau et vit M. Madeleine debout qui regardait quelque chose au-dessus de sa tĆŖte. Ce regard Ć©tait plein de pitiĆ© et d'angoisse et suppliait. Elle en suivit la direction et vit qu'il s'adressait Ć  un crucifix clouĆ© au mur. M. Madeleine Ć©tait dĆ©sormais transfigurĆ© aux yeux de Fantine. Il lui paraissait enveloppĆ© de lumiĆØre. Il Ć©tait absorbĆ© dans une sorte de priĆØre. Elle le considĆ©ra longtemps sans oser l'interrompre. Enfin elle lui dit timidement: --Que faites-vous donc lĆ ? M. Madeleine Ć©tait Ć  cette place depuis une heure. Il attendait que Fantine se rĆ©veillĆ¢t. Il lui prit la main, lui tĆ¢ta le pouls, et rĆ©pondit: --Comment ĆŖtes-vous? --Bien, j'ai dormi, dit-elle, je crois que je vais mieux. Ce ne sera rien. Lui reprit, rĆ©pondant Ć  la question qu'elle lui avait adressĆ©e d'abord, comme s'il ne faisait que de l'entendre: --Je priais le martyr qui est lĆ -haut. Et il ajouta dans sa pensĆ©e: Ā«Pour la martyre qui est ici-bas.Ā» M. Madeleine avait passĆ© la nuit et la matinĆ©e Ć  s'informer. Il savait tout maintenant. Il connaissait dans tous ses poignants dĆ©tails l'histoire de Fantine. Il continua: --Vous avez bien souffert, pauvre mĆØre. Oh! ne vous plaignez pas, vous avez Ć  prĆ©sent la dot des Ć©lus. C'est de cette faƧon que les hommes font des anges. Ce n'est point leur faute; ils ne savent pas s'y prendre autrement. Voyez-vous, cet enfer dont vous sortez est la premiĆØre forme du ciel. Il fallait commencer par lĆ . Il soupira profondĆ©ment. Elle cependant lui souriait avec ce sublime sourire auquel il manquait deux dents. Javert dans cette mĆŖme nuit avait Ć©crit une lettre. Il remit lui-mĆŖme cette lettre le lendemain matin au bureau de poste de Montreuil-sur-mer. Elle Ć©tait pour Paris, et la suscription portait: ƀ _monsieur Chabouillet, secrĆ©taire de monsieur le prĆ©fet de police_. Comme l'affaire du corps de garde s'Ć©tait Ć©bruitĆ©e, la directrice du bureau de poste et quelques autres personnes qui virent la lettre avant le dĆ©part et qui reconnurent l'Ć©criture de Javert sur l'adresse, pensĆØrent que c'Ć©tait sa dĆ©mission qu'il envoyait. M. Madeleine se hĆ¢ta d'Ć©crire aux ThĆ©nardier. Fantine leur devait cent vingt francs. Il leur envoya trois cents francs en leur disant de se payer sur cette somme, et d'amener tout de suite l'enfant Ć  Montreuil-sur-mer où sa mĆØre malade la rĆ©clamait. Ceci Ć©blouit le ThĆ©nardier. --Diable! dit-il Ć  sa femme, ne lĆ¢chons pas l'enfant. VoilĆ  que cette mauviette va devenir une vache Ć  lait. Je devine. Quelque jocrisse se sera amourachĆ© de la mĆØre. Il riposta par un mĆ©moire de cinq cents et quelques francs fort bien fait. Dans ce mĆ©moire figuraient pour plus de trois cents francs deux notes incontestables, l'une d'un mĆ©decin, l'autre d'un apothicaire, lesquels avaient soignĆ© et mĆ©dicamentĆ© dans deux longues maladies Ɖponine et Azelma. Cosette, nous l'avons dit, n'avait pas Ć©tĆ© malade. Ce fut l'affaire d'une toute petite substitution de noms. ThĆ©nardier mit au bas du mĆ©moire: _reƧu Ć  compte trois cents francs_. M. Madeleine envoya tout de suite trois cents autres francs et Ć©crivit: DĆ©pĆŖchez-vous d'amener Cosette. --Christi! dit le ThĆ©nardier, ne lĆ¢chons pas l'enfant. Cependant Fantine ne se rĆ©tablissait point. Elle Ć©tait toujours Ć  l'infirmerie. Les soeurs n'avaient d'abord reƧu et soignĆ© Ā«cette filleĀ» qu'avec rĆ©pugnance. Qui a vu les bas-reliefs de Reims se souvient du gonflement de la lĆØvre infĆ©rieure des vierges sages regardant les vierges folles. Cet antique mĆ©pris des vestales pour les ambulaĆÆes est un des plus profonds instincts de la dignitĆ© fĆ©minine; les soeurs l'avaient Ć©prouvĆ©, avec le redoublement qu'ajoute la religion. Mais, en peu de jours, Fantine les avait dĆ©sarmĆ©es. Elle avait toutes sortes de paroles humbles et douces, et la mĆØre qui Ć©tait en elle attendrissait. Un jour les soeurs l'entendirent qui disait Ć  travers la fiĆØvre: --J'ai Ć©tĆ© une pĆ©cheresse, mais quand j'aurai mon enfant prĆØs de moi, cela voudra dire que Dieu m'a pardonnĆ©. Pendant que j'Ć©tais dans le mal, je n'aurais pas voulu avoir ma Cosette avec moi, je n'aurais pas pu supporter ses yeux Ć©tonnĆ©s et tristes. C'Ć©tait pour elle pourtant que je faisais le mal, et c'est ce qui fait que Dieu me pardonne. Je sentirai la bĆ©nĆ©diction du bon Dieu quand Cosette sera ici. Je la regarderai, cela me fera du bien de voir cette innocente. Elle ne sait rien du tout. C'est un ange, voyez-vous, mes soeurs. ƀ cet Ć¢ge-lĆ , les ailes, Ƨa n'est pas encore tombĆ©. M. Madeleine l'allait voir deux fois par jour, et chaque fois elle lui demandait: --Verrai-je bientĆ“t ma Cosette? Il lui rĆ©pondait: --Peut-ĆŖtre demain matin. D'un moment Ć  l'autre elle arrivera, je l'attends. Et le visage pĆ¢le de la mĆØre rayonnait. --Oh! disait-elle, comme je vais ĆŖtre heureuse! Nous venons de dire qu'elle ne se rĆ©tablissait pas. Au contraire, son Ć©tat semblait s'aggraver de semaine en semaine. Cette poignĆ©e de neige appliquĆ©e Ć  nu sur la peau entre les deux omoplates avait dĆ©terminĆ© une suppression subite de transpiration Ć  la suite de laquelle la maladie qu'elle couvait depuis plusieurs annĆ©es finit par se dĆ©clarer violemment. On commenƧait alors Ć  suivre pour l'Ć©tude et le traitement des maladies de poitrine les belles indications de Laennec. Le mĆ©decin ausculta Fantine et hocha la tĆŖte. M. Madeleine dit au mĆ©decin: --Eh bien? --N'a-t-elle pas un enfant qu'elle dĆ©sire voir? dit le mĆ©decin. --Oui. --Eh bien, hĆ¢tez-vous de le faire venir. M. Madeleine eut un tressaillement. Fantine lui demanda: --Qu'a dit le mĆ©decin? M. Madeleine s'efforƧa de sourire. --Il a dit de faire venir bien vite votre enfant. Que cela vous rendra la santĆ©. --Oh! reprit-elle, il a raison! Mais qu'est-ce qu'ils ont donc ces ThĆ©nardier Ć  me garder ma Cosette! Oh! elle va venir. Voici enfin que je vois le bonheur tout prĆØs de moi! Le ThĆ©nardier cependant ne Ā«lĆ¢chait pas l'enfantĀ» et donnait cent mauvaises raisons. Cosette Ć©tait un peu souffrante pour se mettre en route l'hiver. Et puis il y avait un reste de petites dettes criardes dans le pays dont il rassemblait les factures, etc., etc. --J'enverrai quelqu'un chercher Cosette, dit le pĆØre Madeleine. S'il le faut, j'irai moi-mĆŖme. Il Ć©crivit sous la dictĆ©e de Fantine cette lettre qu'il lui fit signer: Ā«Monsieur ThĆ©nardier, Ā«Vous remettrez Cosette Ć  la personne. Ā«On vous payera toutes les petites choses. Ā«J'ai l'honneur de vous saluer avec considĆ©ration. Ā«Fantine.Ā» Sur ces entrefaites, il survint un grave incident. Nous avons beau tailler de notre mieux le bloc mystĆ©rieux dont notre vie est faite, la veine noire de la destinĆ©e y reparaĆ®t toujours. Chapitre II Comment Jean peut devenir Champ Un matin, M. Madeleine Ć©tait dans son cabinet, occupĆ© Ć  rĆ©gler d'avance quelques affaires pressantes de la mairie pour le cas où il se dĆ©ciderait Ć  ce voyage de Montfermeil, lorsqu'on vint lui dire que l'inspecteur de police Javert demandait Ć  lui parler. En entendant prononcer ce nom, M. Madeleine ne put se dĆ©fendre d'une impression dĆ©sagrĆ©able. Depuis l'aventure du bureau de police, Javert l'avait plus que jamais Ć©vitĆ©, et M. Madeleine ne l'avait point revu. --Faites entrer, dit-il. Javert entra. M. Madeleine Ć©tait restĆ© assis prĆØs de la cheminĆ©e, une plume Ć  la main, l'oeil sur un dossier qu'il feuilletait et qu'il annotait, et qui contenait des procĆØs-verbaux de contraventions Ć  la police de la voirie. Il ne se dĆ©rangea point pour Javert. Il ne pouvait s'empĆŖcher de songer Ć  la pauvre Fantine, et il lui convenait d'ĆŖtre glacial. Javert salua respectueusement M. le maire qui lui tournait le dos. M. le maire ne le regarda pas et continua d'annoter son dossier. Javert fit deux ou trois pas dans le cabinet, et s'arrĆŖta sans rompre le silence. Un physionomiste qui eĆ»t Ć©tĆ© familier avec la nature de Javert, qui eĆ»t Ć©tudiĆ© depuis longtemps ce sauvage au service de la civilisation, ce composĆ© bizarre du Romain, du Spartiate, du moine et du caporal, cet espion incapable d'un mensonge, ce mouchard vierge, un physionomiste qui eĆ»t su sa secrĆØte et ancienne aversion pour M. Madeleine, son conflit avec le maire au sujet de la Fantine, et qui eĆ»t considĆ©rĆ© Javert en ce moment, se fĆ»t dit: que s'est-il passĆ©? Il Ć©tait Ć©vident, pour qui eĆ»t connu cette conscience droite, claire, sincĆØre, probe, austĆØre et fĆ©roce, que Javert sortait de quelque grand Ć©vĆ©nement intĆ©rieur. Javert n'avait rien dans l'Ć¢me qu'il ne l'eĆ»t aussi sur le visage. Il Ć©tait, comme les gens violents, sujet aux revirements brusques. Jamais sa physionomie n'avait Ć©tĆ© plus Ć©trange et plus inattendue. En entrant, il s'Ć©tait inclinĆ© devant M. Madeleine avec un regard où il n'y avait ni rancune, ni colĆØre, ni dĆ©fiance, il s'Ć©tait arrĆŖtĆ© Ć  quelques pas derriĆØre le fauteuil du maire; et maintenant il se tenait lĆ , debout, dans une attitude presque disciplinaire, avec la rudesse naĆÆve et froide d'un homme qui n'a jamais Ć©tĆ© doux et qui a toujours Ć©tĆ© patient; il attendait, sans dire un mot, sans faire un mouvement, dans une humilitĆ© vraie et dans une rĆ©signation tranquille, qu'il plĆ»t Ć  monsieur le maire de se retourner, calme, sĆ©rieux, le chapeau Ć  la main, les yeux baissĆ©s, avec une expression qui tenait le milieu entre le soldat devant son officier et le coupable devant son juge. Tous les sentiments comme tous les souvenirs qu'on eĆ»t pu lui supposer avaient disparu. Il n'y avait plus rien sur ce visage impĆ©nĆ©trable et simple comme le granit, qu'une morne tristesse. Toute sa personne respirait l'abaissement et la fermetĆ©, et je ne sais quel accablement courageux. Enfin M. le maire posa sa plume et se tourna Ć  demi. --Eh bien! qu'est-ce? qu'y a-t-il, Javert? Javert demeura un instant silencieux comme s'il se recueillait, puis Ć©leva la voix avec une sorte de solennitĆ© triste qui n'excluait pourtant pas la simplicitĆ©: --Il y a, monsieur le maire, qu'un acte coupable a Ć©tĆ© commis. --Quel acte? --Un agent infĆ©rieur de l'autoritĆ© a manquĆ© de respect Ć  un magistrat de la faƧon la plus grave. Je viens, comme c'est mon devoir, porter le fait Ć  votre connaissance. --Quel est cet agent? demanda M. Madeleine. --Moi, dit Javert. --Vous? --Moi. --Et quel est le magistrat qui aurait Ć  se plaindre de l'agent? --Vous, monsieur le maire. M. Madeleine se dressa sur son fauteuil. Javert poursuivit, l'air sĆ©vĆØre et les yeux toujours baissĆ©s: --Monsieur le maire, je viens vous prier de vouloir bien provoquer prĆØs de l'autoritĆ© ma destitution. M. Madeleine stupĆ©fait ouvrit la bouche. Javert l'interrompit. --Vous direz, j'aurais pu donner ma dĆ©mission, mais cela ne suffit pas. Donner sa dĆ©mission, c'est honorable. J'ai failli, je dois ĆŖtre puni. Il faut que je sois chassĆ©. Et aprĆØs une pause, il ajouta: --Monsieur le maire, vous avez Ć©tĆ© sĆ©vĆØre pour moi l'autre jour injustement. Soyez-le aujourd'hui justement. --Ah ƧƠ! pourquoi? s'Ć©cria M. Madeleine. Quel est ce galimatias? qu'est-ce que cela veut dire? où y a-t-il un acte coupable commis contre moi par vous? qu'est-ce que vous m'avez fait? quels torts avez-vous envers moi? Vous vous accusez, vous voulez ĆŖtre remplacĆ©.... --ChassĆ©, dit Javert. --ChassĆ©, soit. C'est fort bien. Je ne comprends pas. --Vous allez comprendre, monsieur le maire. Javert soupira du fond de sa poitrine et reprit toujours froidement et tristement: --Monsieur le maire, il y a six semaines, Ć  la suite de cette scĆØne pour cette fille, j'Ć©tais furieux, je vous ai dĆ©noncĆ©. --DĆ©noncĆ©! --ƀ la prĆ©fecture de police de Paris. M. Madeleine, qui ne riait pas beaucoup plus souvent que Javert, se mit Ć  rire. --Comme maire ayant empiĆ©tĆ© sur la police? --Comme ancien forƧat. Le maire devint livide. Javert, qui n'avait pas levĆ© les yeux, continua: --Je le croyais. Depuis longtemps j'avais des idĆ©es. Une ressemblance, des renseignements que vous avez fait prendre Ć  Faverolles, votre force des reins, l'aventure du vieux Fauchelevent, votre adresse au tir, votre jambe qui traĆ®ne un peu, est-ce que je sais, moi? des bĆŖtises! mais enfin je vous prenais pour un nommĆ© Jean Valjean. --Un nommĆ©?... Comment dites-vous ce nom-lĆ ? --Jean Valjean. C'est un forƧat que j'avais vu il y a vingt ans quand j'Ć©tais adjudant-garde-chiourme Ć  Toulon. En sortant du bagne, ce Jean Valjean avait, Ć  ce qu'il paraĆ®t, volĆ© chez un Ć©vĆŖque, puis il avait commis un autre vol Ć  main armĆ©e, dans un chemin public, sur un petit savoyard. Depuis huit ans il s'Ć©tait dĆ©robĆ©, on ne sait comment, et on le cherchait. Moi je m'Ć©tais figurĆ©... Enfin, j'ai fait cette chose! La colĆØre m'a dĆ©cidĆ©, je vous ai dĆ©noncĆ© Ć  la prĆ©fecture. M. Madeleine, qui avait ressaisi le dossier depuis quelques instants, reprit avec un accent de parfaite indiffĆ©rence: --Et que vous a-t-on rĆ©pondu? --Que j'Ć©tais fou. --Eh bien? --Eh bien, on avait raison. --C'est heureux que vous le reconnaissiez! --Il faut bien, puisque le vĆ©ritable Jean Valjean est trouvĆ©. La feuille que tenait M. Madeleine lui Ć©chappa des mains, il leva la tĆŖte, regarda fixement Javert, et dit avec un accent inexprimable: --Ah! Javert poursuivit: --VoilĆ  ce que c'est, monsieur le maire. Il paraĆ®t qu'il y avait dans le pays, du cĆ“tĆ© d'Ailly-le-Haut-Clocher, une espĆØce de bonhomme qu'on appelait le pĆØre Champmathieu. C'Ć©tait trĆØs misĆ©rable. On n'y faisait pas attention. Ces gens-lĆ , on ne sait pas de quoi cela vit. DerniĆØrement, cet automne, le pĆØre Champmathieu a Ć©tĆ© arrĆŖtĆ© pour un vol de pommes Ć  cidre, commis chez...--enfin n'importe! Il y a eu vol, mur escaladĆ©, branches de l'arbre cassĆ©es. On a arrĆŖtĆ© mon Champmathieu. Il avait encore la branche de pommier Ć  la main. On coffre le drĆ“le. Jusqu'ici ce n'est pas beaucoup plus qu'une affaire correctionnelle. Mais voici qui est de la providence. La geĆ“le Ć©tant en mauvais Ć©tat, monsieur le juge d'instruction trouve Ć  propos de faire transfĆ©rer Champmathieu Ć  Arras où est la prison dĆ©partementale. Dans cette prison d'Arras, il y a un ancien forƧat nommĆ© Brevet qui est dĆ©tenu pour je ne sais quoi et qu'on a fait guichetier de chambrĆ©e parce qu'il se conduit bien. Monsieur le maire, Champmathieu n'est pas plus tĆ“t dĆ©barquĆ© que voilĆ  Brevet qui s'Ć©crie: Ā«Eh mais! je connais cet homme-lĆ . C'est un fagot. Regardez-moi donc, bonhomme! Vous ĆŖtes Jean Valjean!--Jean Valjean! qui Ƨa Jean Valjean? Le Champmathieu joue l'Ć©tonnĆ©.--Ne fais donc pas le sinvre, dit Brevet. Tu es Jean Valjean! Tu as Ć©tĆ© au bagne de Toulon. Il y a vingt ans. Nous y Ć©tions ensemble.--Le Champmathieu nie. Parbleu! vous comprenez. On approfondit. On me fouille cette aventure-lĆ . Voici ce qu'on trouve: ce Champmathieu, il y a une trentaine d'annĆ©es, a Ć©tĆ© ouvrier Ć©mondeur d'arbres dans plusieurs pays, notamment Ć  Faverolles. LĆ  on perd sa trace. Longtemps aprĆØs, on le revoit en Auvergne, puis Ć  Paris, où il dit avoir Ć©tĆ© charron et avoir eu une fille blanchisseuse, mais cela n'est pas prouvĆ©; enfin dans ce pays-ci. Or, avant d'aller au bagne pour vol qualifiĆ©, qu'Ć©tait Jean Valjean? Ć©mondeur. Où? Ć  Faverolles. Autre fait. Ce Valjean s'appelait de son nom de baptĆŖme Jean et sa mĆØre se nommait de son nom de famille Mathieu. Quoi de plus naturel que de penser qu'en sortant du bagne il aura pris le nom de sa mĆØre pour se cacher et se sera fait appeler Jean Mathieu? Il va en Auvergne. De _Jean_ la prononciation du pays fait _Chan_, on l'appelle Chan Mathieu. Notre homme se laisse faire et le voilĆ  transformĆ© en Champmathieu. Vous me suivez, n'est-ce pas? On s'informe Ć  Faverolles. La famille de Jean Valjean n'y est plus. On ne sait plus où elle est. Vous savez, dans ces classes-lĆ , il y a souvent de ces Ć©vanouissements d'une famille. On cherche, on ne trouve plus rien. Ces gens-lĆ , quand ce n'est pas de la boue, c'est de la poussiĆØre. Et puis, comme le commencement de ces histoires date de trente ans, il n'y a plus personne Ć  Faverolles qui ait connu Jean Valjean. On s'informe Ć  Toulon. Avec Brevet, il n'y a plus que deux forƧats qui aient vu Jean Valjean. Ce sont les condamnĆ©s Ć  vie Cochepaille et Chenildieu. On les extrait du bagne et on les fait venir. On les confronte au prĆ©tendu Champmathieu. Ils n'hĆ©sitent pas. Pour eux comme pour Brevet, c'est Jean Valjean. MĆŖme Ć¢ge, il a cinquante-quatre ans, mĆŖme taille, mĆŖme air, mĆŖme homme enfin, c'est lui. C'est en ce moment-lĆ  mĆŖme que j'envoyais ma dĆ©nonciation Ć  la prĆ©fecture de Paris. On me rĆ©pond que je perds l'esprit et que Jean Valjean est Ć  Arras au pouvoir de la justice. Vous concevez si cela m'Ć©tonne, moi qui croyais tenir ici ce mĆŖme Jean Valjean! J'Ć©cris Ć  monsieur le juge d'instruction. Il me fait venir, on m'amĆØne le Champmathieu.... --Eh bien? interrompit M. Madeleine. Javert rĆ©pondit avec son visage incorruptible et triste: --Monsieur le maire, la vĆ©ritĆ© est la vĆ©ritĆ©. J'en suis fĆ¢chĆ©, mais c'est cet homme-lĆ  qui est Jean Valjean. Moi aussi je l'ai reconnu. M. Madeleine reprit d'une voix trĆØs basse: --Vous ĆŖtes sĆ»r? Javert se mit Ć  rire de ce rire douloureux qui Ć©chappe Ć  une conviction profonde: --Oh, sĆ»r! Il demeura un moment pensif, prenant machinalement des pincĆ©es de poudre de bois dans la sĆ©bille Ć  sĆ©cher l'encre qui Ć©tait sur la table, et il ajouta: --Et mĆŖme, maintenant que je vois le vrai Jean Valjean, je ne comprends pas comment j'ai pu croire autre chose. Je vous demande pardon, monsieur le maire. En adressant cette parole suppliante et grave Ć  celui qui, six semaines auparavant, l'avait humiliĆ© en plein corps de garde et lui avait dit: Ā«sortez!Ā» Javert, cet homme hautain, Ć©tait Ć  son insu plein de simplicitĆ© et de dignitĆ©. M. Madeleine ne rĆ©pondit Ć  sa priĆØre que par cette question brusque: --Et que dit cet homme? --Ah, dame! monsieur le maire, l'affaire est mauvaise. Si c'est Jean Valjean, il y a rĆ©cidive. Enjamber un mur, casser une branche, chiper des pommes, pour un enfant, c'est une polissonnerie; pour un homme, c'est un dĆ©lit; pour un forƧat, c'est un crime. Escalade et vol, tout y est. Ce n'est plus la police correctionnelle, c'est la cour d'assises. Ce n'est plus quelques jours de prison, ce sont les galĆØres Ć  perpĆ©tuitĆ©. Et puis, il y a l'affaire du petit savoyard que j'espĆØre bien qui reviendra. Diable! il y a de quoi se dĆ©battre, n'est-ce pas? Oui, pour un autre que Jean Valjean. Mais Jean Valjean est un sournois. C'est encore lĆ  que je le reconnais. Un autre sentirait que cela chauffe; il se dĆ©mĆØnerait, il crierait, la bouilloire chante devant le feu, il ne voudrait pas ĆŖtre Jean Valjean, et caetera. Lui, il n'a pas l'air de comprendre, il dit: Je suis Champmathieu, je ne sors pas de lĆ ! Il a l'air Ć©tonnĆ©, il fait la brute, c'est bien mieux. Oh! le drĆ“le est habile. Mais c'est Ć©gal, les preuves sont lĆ . Il est reconnu par quatre personnes, le vieux coquin sera condamnĆ©. C'est portĆ© aux assises, Ć  Arras. Je vais y aller pour tĆ©moigner. Je suis citĆ©. M. Madeleine s'Ć©tait remis Ć  son bureau, avait ressaisi son dossier, et le feuilletait tranquillement, lisant et Ć©crivant tour Ć  tour comme un homme affairĆ©. Il se tourna vers Javert: --Assez, Javert. Au fait, tous ces dĆ©tails m'intĆ©ressent fort peu. Nous perdons notre temps, et nous avons des affaires pressĆ©es. Javert, vous allez vous rendre sur-le-champ chez la bonne femme Buseaupied qui vend des herbes lĆ -bas au coin de la rue Saint-Saulve. Vous lui direz de dĆ©poser sa plainte contre le charretier Pierre Chesnelong. Cet homme est un brutal qui a failli Ć©craser cette femme et son enfant. Il faut qu'il soit puni. Vous irez ensuite chez M. Charcellay, rue Montre-de-Champigny. Il se plaint qu'il y a une gouttiĆØre de la maison voisine qui verse l'eau de la pluie chez lui, et qui affouille les fondations de sa maison. AprĆØs vous constaterez des contraventions de police qu'on me signale rue Guibourg chez la veuve Doris, et rue du Garraud-Blanc chez madame RenĆ©e Le BossĆ©, et vous dresserez procĆØs-verbal. Mais je vous donne lĆ  beaucoup de besogne. N'allez-vous pas ĆŖtre absent? ne m'avez-vous pas dit que vous alliez Ć  Arras pour cette affaire dans huit ou dix jours?... --Plus tĆ“t que cela, monsieur le maire. --Quel jour donc? --Mais je croyais avoir dit Ć  monsieur le maire que cela se jugeait demain et que je partais par la diligence cette nuit. M. Madeleine fit un mouvement imperceptible. --Et combien de temps durera l'affaire? --Un jour tout au plus. L'arrĆŖt sera prononcĆ© au plus tard demain dans la nuit. Mais je n'attendrai pas l'arrĆŖt, qui ne peut manquer. SitĆ“t ma dĆ©position faite, je reviendrai ici. --C'est bon, dit M. Madeleine. Et il congĆ©dia Javert d'un signe de main. Javert ne s'en alla pas. --Pardon, monsieur le maire, dit-il. --Qu'est-ce encore? demanda M. Madeleine. --Monsieur le maire, il me reste une chose Ć  vous rappeler. --Laquelle? --C'est que je dois ĆŖtre destituĆ©. M. Madeleine se leva. --Javert, vous ĆŖtes un homme d'honneur, et je vous estime. Vous vous exagĆ©rez votre faute. Ceci d'ailleurs est encore une offense qui me concerne. Javert, vous ĆŖtes digne de monter et non de descendre. J'entends que vous gardiez votre place. Javert regarda M. Madeleine avec sa prunelle candide au fond de laquelle il semblait qu'on vit cette conscience peu Ć©clairĆ©e, mais rigide et chaste, et il dit d'une voix tranquille: --Monsieur le maire, je ne puis vous accorder cela. --Je vous rĆ©pĆØte, rĆ©pliqua M. Madeleine, que la chose me regarde. Mais Javert, attentif Ć  sa seule pensĆ©e, continua: --Quant Ć  exagĆ©rer, je n'exagĆØre point. Voici comment je raisonne. Je vous ai soupƧonnĆ© injustement. Cela, ce n'est rien. C'est notre droit Ć  nous autres de soupƧonner, quoiqu'il y ait pourtant abus Ć  soupƧonner au-dessus de soi. Mais, sans preuves, dans un accĆØs de colĆØre, dans le but de me venger, je vous ai dĆ©noncĆ© comme forƧat, vous, un homme respectable, un maire, un magistrat! ceci est grave. TrĆØs grave. J'ai offensĆ© l'autoritĆ© dans votre personne, moi, agent de l'autoritĆ©! Si l'un de mes subordonnĆ©s avait fait ce que j'ai fait, je l'aurais dĆ©clarĆ© indigne du service, et chassĆ©. Eh bien? Tenez, monsieur le maire, encore un mot. J'ai souvent Ć©tĆ© sĆ©vĆØre dans ma vie. Pour les autres. C'Ć©tait juste. Je faisais bien. Maintenant, si je n'Ć©tais pas sĆ©vĆØre pour moi, tout ce que j'ai fait de juste deviendrait injuste. Est-ce que je dois m'Ć©pargner plus que les autres? Non. Quoi! je n'aurais Ć©tĆ© bon qu'Ć  chĆ¢tier autrui, et pas moi! mais je serais un misĆ©rable! mais ceux qui disent: ce gueux de Javert! auraient raison! Monsieur le maire, je ne souhaite pas que vous me traitiez avec bontĆ©, votre bontĆ© m'a fait faire assez de mauvais sang quand elle Ć©tait pour les autres. Je n'en veux pas pour moi. La bontĆ© qui consiste Ć  donner raison Ć  la fille publique contre le bourgeois, Ć  l'agent de police contre le maire, Ć  celui qui est en bas contre celui qui est en haut, c'est ce que j'appelle de la mauvaise bontĆ©. C'est avec cette bontĆ©-lĆ  que la sociĆ©tĆ© se dĆ©sorganise. Mon Dieu! c'est bien facile d'ĆŖtre bon, le malaisĆ© c'est d'ĆŖtre juste. Allez! si vous aviez Ć©tĆ© ce que je croyais, je n'aurais pas Ć©tĆ© bon pour vous, moi! vous auriez vu! Monsieur le maire, je dois me traiter comme je traiterais tout autre. Quand je rĆ©primais des malfaiteurs, quand je sĆ©vissais sur des gredins, je me suis souvent dit Ć  moi-mĆŖme: toi, si tu bronches, si jamais je te prends en faute, sois tranquille!--J'ai bronchĆ©, je me prends en faute, tant pis! Allons, renvoyĆ©, cassĆ©, chassĆ©! c'est bon. J'ai des bras, je travaillerai Ć  la terre, cela m'est Ć©gal. Monsieur le maire, le bien du service veut un exemple. Je demande simplement la destitution de l'inspecteur Javert. Tout cela Ć©tait prononcĆ© d'un accent humble, fier, dĆ©sespĆ©rĆ© et convaincu qui donnait je ne sais quelle grandeur bizarre Ć  cet Ć©trange honnĆŖte homme. --Nous verrons, fit M. Madeleine. Et il lui tendit la main. Javert recula, et dit d'un ton farouche: --Pardon, monsieur le maire, mais cela ne doit pas ĆŖtre. Un maire ne donne pas la main Ć  un mouchard. Il ajouta entre ses dents: --Mouchard, oui; du moment où j'ai mĆ©dusĆ© de la police, je ne suis plus qu'un mouchard. Puis il salua profondĆ©ment, et se dirigea vers la porte. LĆ  il se retourna, et, les yeux toujours baissĆ©s: --Monsieur le maire, dit-il, je continuerai le service jusqu'Ć  ce que je sois remplacĆ©. Il sortit. M. Madeleine resta rĆŖveur, Ć©coutant ce pas ferme et assurĆ© qui s'Ć©loignait sur le pavĆ© du corridor. Livre septiĆØme--L'affaire Champmathieu Chapitre I La soeur Simplice Les incidents qu'on va lire n'ont pas tous Ć©tĆ© connus Ć  Montreuil-sur-mer, mais le peu qui en a percĆ© a laissĆ© dans cette ville un tel souvenir, que ce serait une grave lacune dans ce livre si nous ne les racontions dans leurs moindres dĆ©tails. Dans ces dĆ©tails, le lecteur rencontrera deux ou trois circonstances invraisemblables que nous maintenons par respect pour la vĆ©ritĆ©. Dans l'aprĆØs-midi qui suivit la visite de Javert, M. Madeleine alla voir la Fantine comme d'habitude. Avant de pĆ©nĆ©trer prĆØs de Fantine, il fit demander la soeur Simplice. Les deux religieuses qui faisaient le service de l'infirmerie, dames lazaristes comme toutes les soeurs de charitĆ©, s'appelaient soeur PerpĆ©tue et soeur Simplice. La soeur PerpĆ©tue Ć©tait la premiĆØre villageoise venue, grossiĆØrement soeur de charitĆ©, entrĆ©e chez Dieu comme on entre en place. Elle Ć©tait religieuse comme on est cuisiniĆØre. Ce type n'est point trĆØs rare. Les ordres monastiques acceptent volontiers cette lourde poterie paysanne, aisĆ©ment faƧonnĆ©e en capucin ou en ursuline. Ces rusticitĆ©s s'utilisent pour les grosses besognes de la dĆ©votion. La transition d'un bouvier Ć  un carme n'a rien de heurtĆ©; l'un devient l'autre sans grand travail; le fond commun d'ignorance du village et du cloĆ®tre est une prĆ©paration toute faite, et met tout de suite le campagnard de plain-pied avec le moine. Un peu d'ampleur au sarrau, et voilĆ  un froc. La soeur PerpĆ©tue Ć©tait une forte religieuse, de Marines, prĆØs Pontoise, patoisant, psalmodiant, bougonnant, sucrant la tisane selon le bigotisme ou l'hypocrisie du grabataire, brusquant les malades, bourrue avec les mourants, leur jetant presque Dieu au visage, lapidant l'agonie avec des priĆØres en colĆØre, hardie, honnĆŖte et rougeaude. La soeur Simplice Ć©tait blanche d'une blancheur de cire. PrĆØs de soeur PerpĆ©tue, c'Ć©tait le cierge Ć  cĆ“tĆ© de la chandelle. Vincent de Paul a divinement fixĆ© la figure de la soeur de charitĆ© dans ces admirables paroles où il mĆŖle tant de libertĆ© Ć  tant de servitude: Ā«Elles n'auront pour monastĆØre que la maison des malades, pour cellule qu'une chambre de louage, pour chapelle que l'Ć©glise de leur paroisse, pour cloĆ®tre que les rues de la ville ou les salles des hĆ“pitaux, pour clĆ“ture que l'obĆ©issance, pour grille que la crainte de Dieu, pour voile que la modestie.Ā» Cet idĆ©al Ć©tait vivant dans la soeur Simplice. Personne n'eĆ»t pu dire l'Ć¢ge de la soeur Simplice; elle n'avait jamais Ć©tĆ© jeune et semblait ne devoir jamais ĆŖtre vieille. C'Ć©tait une personne--nous n'osons dire une femme--calme, austĆØre, de bonne compagnie, froide, et qui n'avait jamais menti. Elle Ć©tait si douce qu'elle paraissait fragile; plus solide d'ailleurs que le granit. Elle touchait aux malheureux avec de charmants doigts fins et purs. Il y avait, pour ainsi dire, du silence dans sa parole; elle parlait juste le nĆ©cessaire, et elle avait un son de voix qui eĆ»t tout Ć  la fois Ć©difiĆ© un confessionnal et enchantĆ© un salon. Cette dĆ©licatesse s'accommodait de la robe de bure, trouvant Ć  ce rude contact un rappel continuel du ciel et de Dieu. Insistons sur un dĆ©tail. N'avoir jamais menti, n'avoir jamais dit, pour un intĆ©rĆŖt quelconque, mĆŖme indiffĆ©remment, une chose qui ne fĆ»t la vĆ©ritĆ©, la sainte vĆ©ritĆ©, c'Ć©tait le trait distinctif de la soeur Simplice; c'Ć©tait l'accent de sa vertu. Elle Ć©tait presque cĆ©lĆØbre dans la congrĆ©gation pour cette vĆ©racitĆ© imperturbable. L'abbĆ© Sicard parle de la soeur Simplice dans une lettre au sourd-muet Massieu. Si sincĆØres, si loyaux et si purs que nous soyons, nous avons tous sur notre candeur au moins la fĆŖlure du petit mensonge innocent. Elle, point. Petit mensonge, mensonge innocent, est-ce que cela existe? Mentir, c'est l'absolu du mal. Peu mentir n'est pas possible; celui qui ment, ment tout le mensonge; mentir, c'est la face mĆŖme du dĆ©mon; Satan a deux noms, il s'appelle Satan et il s'appelle Mensonge. VoilĆ  ce qu'elle pensait. Et comme elle pensait, elle pratiquait. Il en rĆ©sultait cette blancheur dont nous avons parlĆ©, blancheur qui couvrait de son rayonnement mĆŖme ses lĆØvres et ses yeux. Son sourire Ć©tait blanc, son regard Ć©tait blanc. Il n'y avait pas une toile d'araignĆ©e, pas un grain de poussiĆØre Ć  la vitre de cette conscience. En entrant dans l'obĆ©dience de saint Vincent de Paul, elle avait pris le nom de Simplice par choix spĆ©cial. Simplice de Sicile, on le sait, est cette sainte qui aima mieux se laisser arracher les deux seins que de rĆ©pondre, Ć©tant nĆ©e Ć  Syracuse, qu'elle Ć©tait nĆ©e Ć  SĆ©geste, mensonge qui la sauvait. Cette patronne convenait Ć  cette Ć¢me. La soeur Simplice, en entrant dans l'ordre, avait deux dĆ©fauts dont elle s'Ć©tait peu Ć  peu corrigĆ©e; elle avait eu le goĆ»t des friandises et elle avait aimĆ© Ć  recevoir des lettres. Elle ne lisait jamais qu'un livre de priĆØres en gros caractĆØres et en latin. Elle ne comprenait pas le latin, mais elle comprenait le livre. La pieuse fille avait pris en affection Fantine, y sentant probablement de la vertu latente, et s'Ć©tait dĆ©vouĆ©e Ć  la soigner presque exclusivement. M. Madeleine emmena Ć  part la soeur Simplice et lui recommanda Fantine avec un accent singulier dont la soeur se souvint plus tard. En quittant la soeur, il s'approcha de Fantine. Fantine attendait chaque jour l'apparition de M. Madeleine comme on attend un rayon de chaleur et de joie. Elle disait aux soeurs: --Je ne vis que lorsque monsieur le maire est lĆ . Elle avait ce jour-lĆ  beaucoup de fiĆØvre. DĆØs qu'elle vit M. Madeleine, elle lui demanda: --Et Cosette? Il rĆ©pondit en souriant: --BientĆ“t. M. Madeleine fut avec Fantine comme Ć  l'ordinaire. Seulement il resta une heure au lieu d'une demi-heure, au grand contentement de Fantine. Il fĆ®t mille instances Ć  tout le monde pour que rien ne manquĆ¢t Ć  la malade. On remarqua qu'il y eut un moment où son visage devint trĆØs sombre. Mais cela s'expliqua quand on sut que le mĆ©decin s'Ć©tait penchĆ© Ć  son oreille et lui avait dit: --Elle baisse beaucoup. Puis il rentra Ć  la mairie, et le garƧon de bureau le vit examiner avec attention une carte routiĆØre de France qui Ć©tait suspendue dans son cabinet. Il Ć©crivit quelques chiffres au crayon sur un papier. Chapitre II PerspicacitĆ© de maĆ®tre Scaufflaire De la mairie il se rendit au bout de la ville chez un Flamand, maĆ®tre ScaufflaĆ«r, francisĆ© Scaufflaire, qui louait des chevaux et des Ā«cabriolets Ć  volonté». Pour aller chez ce Scaufflaire, le plus court Ć©tait de prendre une rue peu frĆ©quentĆ©e où Ć©tait le presbytĆØre de la paroisse que M. Madeleine habitait. Le curĆ© Ć©tait, disait-on, un homme digne et respectable, et de bon conseil. ƀ l'instant où M. Madeleine arriva devant le presbytĆØre, il n'y avait dans la rue qu'un passant, et ce passant remarqua ceci: M. le maire, aprĆØs avoir dĆ©passĆ© la maison curiale, s'arrĆŖta, demeura immobile, puis revint sur ses pas et rebroussa chemin jusqu'Ć  la porte du presbytĆØre, qui Ć©tait une porte bĆ¢tarde avec marteau de fer. Il mit vivement la main au marteau, et le souleva; puis il s'arrĆŖta de nouveau, et resta court, et comme pensif, et, aprĆØs quelques secondes, au lieu de laisser bruyamment retomber le marteau, il le reposa doucement et reprit son chemin avec une sorte de hĆ¢te qu'il n'avait pas auparavant. M. Madeleine trouva maĆ®tre Scaufflaire chez lui occupĆ© Ć  repiquer un harnais. --MaĆ®tre Scaufflaire, demanda-t-il, avez-vous un bon cheval? --Monsieur le maire, dit le Flamand, tous mes chevaux sont bons. Qu'entendez-vous par un bon cheval? --J'entends un cheval qui puisse faire vingt lieues en un jour. --Diable! fit le Flamand, vingt lieues! --Oui. --AttelĆ© Ć  un cabriolet? --Oui. --Et combien de temps se reposera-t-il aprĆØs la course? --Il faut qu'il puisse au besoin repartir le lendemain. --Pour refaire le mĆŖme trajet? --Oui. --Diable! diable! et c'est vingt lieues? M. Madeleine tira de sa poche le papier où il avait crayonnĆ© des chiffres. Il les montra au Flamand. C'Ć©taient les chiffres 5, 6, 8-1/2. --Vous voyez, dit-il. Total, dix-neuf et demi, autant dire vingt lieues. --Monsieur le maire, reprit le Flamand, j'ai votre affaire. Mon petit cheval blanc. Vous avez dĆ» le voir passer quelquefois. C'est une petite bĆŖte du bas Boulonnais. C'est plein de feu. On a voulu d'abord en faire un cheval de selle. Bah! il ruait, il flanquait tout le monde par terre. On le croyait vicieux, on ne savait qu'en faire. Je l'ai achetĆ©. Je l'ai mis au cabriolet. Monsieur, c'est cela qu'il voulait; il est doux comme une fille, il va le vent. Ah! par exemple, il ne faudrait pas lui monter sur le dos. Ce n'est pas son idĆ©e d'ĆŖtre cheval de selle. Chacun a son ambition. Tirer, oui, porter, non; il faut croire qu'il s'est dit Ƨa. --Et il fera la course? --Vos vingt lieues. Toujours au grand trot, et en moins de huit heures. Mais voici Ć  quelles conditions. --Dites. --PremiĆØrement, vous le ferez souffler une heure Ć  moitiĆ© chemin; il mangera, et on sera lĆ  pendant qu'il mangera pour empĆŖcher le garƧon de l'auberge de lui voler son avoine; car j'ai remarquĆ© que dans les auberges l'avoine est plus souvent bue par les garƧons d'Ć©curie que mangĆ©e par les chevaux. --On sera lĆ . --DeuxiĆØmement.... Est-ce pour monsieur le maire le cabriolet? --Oui. --Monsieur le maire sait conduire? --Oui. --Eh bien, monsieur le maire voyagera seul et sans bagage afin de ne point charger le cheval. --Convenu. --Mais monsieur le maire, n'ayant personne avec lui, sera obligĆ© de prendre la peine de surveiller lui-mĆŖme l'avoine. --C'est dit. --Il me faudra trente francs par jour. Les jours de repos payĆ©s. Pas un liard de moins, et la nourriture de la bĆŖte Ć  la charge de monsieur le maire. M. Madeleine tira trois napolĆ©ons de sa bourse et les mit sur la table. --VoilĆ  deux jours d'avance. --QuatriĆØmement, pour une course pareille sur cabriolet serait trop lourd et fatiguerait le cheval. Il faudrait que monsieur le maire consentĆ®t Ć  voyager dans un petit tilbury que j'ai. --J'y consens. --C'est lĆ©ger, mais c'est dĆ©couvert. --Cela m'est Ć©gal. --Monsieur le maire a-t-il rĆ©flĆ©chi que nous sommes en hiver?... M. Madeleine ne rĆ©pondit pas. Le Flamand reprit: --Qu'il fait trĆØs froid? M. Madeleine garda le silence. MaĆ®tre Scaufflaire continua: --Qu'il peut pleuvoir? M. Madeleine leva la tĆŖte et dit: --Le tilbury et le cheval seront devant ma porte demain Ć  quatre heures et demie du matin. --C'est entendu, monsieur le maire, rĆ©pondit Scaufflaire, puis, grattant avec l'ongle de son pouce une tache qui Ć©tait dans le bois de la table, il reprit de cet air insouciant que les Flamands savent si bien mĆŖler Ć  leur finesse: --Mais voilĆ  que j'y songe Ć  prĆ©sent! monsieur le maire ne me dit pas où il va. Où est-ce que va monsieur le maire? Il ne songeait pas Ć  autre chose depuis le commencement de la conversation, mais il ne savait pourquoi il n'avait pas osĆ© faire cette question. --Votre cheval a-t-il de bonnes jambes de devant? dit M. Madeleine. --Oui, monsieur le maire. Vous le soutiendrez un peu dans les descentes. Y a-t-il beaucoup de descentes d'ici où vous allez? --N'oubliez pas d'ĆŖtre Ć  ma porte Ć  quatre heures et demie du matin, trĆØs prĆ©cises, rĆ©pondit M. Madeleine; et il sortit. Le Flamand resta Ā«tout bĆŖteĀ», comme il disait lui-mĆŖme quelque temps aprĆØs. Monsieur le maire Ć©tait sorti depuis deux ou trois minutes, lorsque la porte se rouvrit; c'Ć©tait M. le maire. Il avait toujours le mĆŖme air impassible et prĆ©occupĆ©. --Monsieur Scaufflaire, dit-il, Ć  quelle somme estimez-vous le cheval et le tilbury que vous me louerez, l'un portant l'autre? --L'un traĆ®nant l'autre, monsieur le maire, dit le Flamand avec un gros rire. --Soit. Eh bien! --Est-ce que monsieur le maire veut me les acheter? --Non, mais Ć  tout Ć©vĆ©nement, je veux vous les garantir. ƀ mon retour vous me rendrez la somme. Combien estimez-vous cabriolet et cheval? --ƀ cinq cents francs, monsieur le maire. --Les voici. M. Madeleine posa un billet de banque sur la table, puis sortit et cette fois ne rentra plus. MaĆ®tre Scaufflaire regretta affreusement de n'avoir point dit mille francs. Du reste le cheval et le tilbury, en bloc, valaient cent Ć©cus. Le Flamand appela sa femme, et lui conta la chose. Où diable monsieur le maire peut-il aller? Ils tinrent conseil. --Il va Ć  Paris, dit la femme. --Je ne crois pas, dit le mari. M. Madeleine avait oubliĆ© sur la cheminĆ©e le papier où il avait tracĆ© des chiffres. Le Flamand le prit et l'Ć©tudia. --Cinq, six, huit et demi? cela doit marquer des relais de poste. Il se tourna vers sa femme. --J'ai trouvĆ©. --Comment? --Il y a cinq lieues d'ici Ć  Hesdin, six de Hesdin Ć  Saint-Pol, huit et demie de Saint-Pol Ć  Arras. Il va Ć  Arras. Cependant M. Madeleine Ć©tait rentrĆ© chez lui. Pour revenir de chez maĆ®tre Scaufflaire, il avait pris le plus long, comme si la porte du presbytĆØre avait Ć©tĆ© pour lui une tentation, et qu'il eĆ»t voulu l'Ć©viter. Il Ć©tait montĆ© dans sa chambre et s'y Ć©tait enfermĆ©, ce qui n'avait rien que de simple, car il se couchait volontiers de bonne heure. Pourtant la concierge de la fabrique, qui Ć©tait en mĆŖme temps l'unique servante de M. Madeleine, observa que sa lumiĆØre s'Ć©teignit Ć  huit heures et demie, et elle le dit au caissier qui rentrait, en ajoutant: --Est-ce que monsieur le maire est malade? je lui ai trouvĆ© l'air un peu singulier. Ce caissier habitait une chambre situĆ©e prĆ©cisĆ©ment au-dessous de la chambre de M. Madeleine. Il ne prit point garde aux paroles de la portiĆØre, se coucha et s'endormit. Vers minuit, il se rĆ©veilla brusquement; il avait entendu Ć  travers son sommeil un bruit au-dessus de sa tĆŖte. Il Ć©couta. C'Ć©tait un pas qui allait et venait, comme si l'on marchait dans la chambre en haut. Il Ć©couta plus attentivement, et reconnut le pas de M. Madeleine. Cela lui parut Ć©trange; habituellement aucun bruit ne se faisait dans la chambre de M. Madeleine avant l'heure de son lever. Un moment aprĆØs le caissier entendit quelque chose qui ressemblait Ć  une armoire qu'on ouvre et qu'on referme. Puis on dĆ©rangea un meuble, il y eut un silence, et le pas recommenƧa. Le caissier se dressa sur son sĆ©ant, s'Ć©veilla tout Ć  fait, regarda, et Ć  travers les vitres de sa croisĆ©e aperƧut sur le mur d'en face la rĆ©verbĆ©ration rougeĆ¢tre d'une fenĆŖtre Ć©clairĆ©e. ƀ la direction des rayons, ce ne pouvait ĆŖtre que la fenĆŖtre de la chambre de M. Madeleine. La rĆ©verbĆ©ration tremblait comme si elle venait plutĆ“t d'un feu allumĆ© que d'une lumiĆØre. L'ombre des chĆ¢ssis vitrĆ©s ne s'y dessinait pas, ce qui indiquait que la fenĆŖtre Ć©tait toute grande ouverte. Par le froid qu'il faisait, cette fenĆŖtre ouverte Ć©tait surprenante. Le caissier se rendormit. Une heure ou deux aprĆØs, il se rĆ©veilla encore. Le mĆŖme pas, lent et rĆ©gulier, allait et venait toujours au-dessus de sa tĆŖte. La rĆ©verbĆ©ration se dessinait toujours sur le mur, mais elle Ć©tait maintenant pĆ¢le et paisible comme le reflet d'une lampe ou d'une bougie. La fenĆŖtre Ć©tait toujours ouverte. Voici ce qui se passait dans la chambre de M. Madeleine. Chapitre III Une tempĆŖte sous un crĆ¢ne Le lecteur a sans doute devinĆ© que M. Madeleine n'est autre que Jean Valjean. Nous avons dĆ©jĆ  regardĆ© dans les profondeurs de cette conscience; le moment est venu d'y regarder encore. Nous ne le faisons pas sans Ć©motion et sans tremblement. Il n'existe rien de plus terrifiant que cette sorte de contemplation. L'oeil de l'esprit ne peut trouver nulle part plus d'Ć©blouissements ni plus de tĆ©nĆØbres que dans l'homme; il ne peut se fixer sur aucune chose qui soit plus redoutable, plus compliquĆ©e, plus mystĆ©rieuse et plus infinie. Il y a un spectacle plus grand que la mer, c'est le ciel; il y a un spectacle plus grand que le ciel, c'est l'intĆ©rieur de l'Ć¢me. Faire le poĆØme de la conscience humaine, ne fĆ»t-ce qu'Ć  propos d'un seul homme, ne fĆ»t-ce qu'Ć  propos du plus infime des hommes, ce serait fondre toutes les Ć©popĆ©es dans une Ć©popĆ©e supĆ©rieure et dĆ©finitive. La conscience, c'est le chaos des chimĆØres, des convoitises et des tentatives, la fournaise des rĆŖves, l'antre des idĆ©es dont on a honte; c'est le pandĆ©monium des sophismes, c'est le champ de bataille des passions. ƀ de certaines heures, pĆ©nĆ©trez Ć  travers la face livide d'un ĆŖtre humain qui rĆ©flĆ©chit, et regardez derriĆØre, regardez dans cette Ć¢me, regardez dans cette obscuritĆ©. Il y a lĆ , sous le silence extĆ©rieur, des combats de gĆ©ants comme dans HomĆØre, des mĆŖlĆ©es de dragons et d'hydres et des nuĆ©es de fantĆ“mes comme dans Milton, des spirales visionnaires comme chez Dante. Chose sombre que cet infini que tout homme porte en soi et auquel il mesure avec dĆ©sespoir les volontĆ©s de son cerveau et les actions de sa vie! Alighieri rencontra un jour une sinistre porte devant laquelle il hĆ©sita. En voici une aussi devant nous, au seuil de laquelle nous hĆ©sitons. Entrons pourtant. Nous n'avons que peu de chose Ć  ajouter Ć  ce que le lecteur connaĆ®t dĆ©jĆ  de ce qui Ć©tait arrivĆ© Ć  Jean Valjean depuis l'aventure de Petit-Gervais. ƀ partir de ce moment, on l'a vu, il fut un autre homme. Ce que l'Ć©vĆŖque avait voulu faire de lui, il l'exĆ©cuta. Ce fut plus qu'une transformation, ce fut une transfiguration. Il rĆ©ussit Ć  disparaĆ®tre, vendit l'argenterie de l'Ć©vĆŖque, ne gardant que les flambeaux, comme souvenir, se glissa de ville en ville, traversa la France, vint Ć  Montreuil-sur-mer, eut l'idĆ©e que nous avons dite, accomplit ce que nous avons racontĆ©, parvint Ć  se faire insaisissable et inaccessible, et dĆ©sormais, Ć©tabli Ć  Montreuil-sur-mer, heureux de sentir sa conscience attristĆ©e par son passĆ© et la premiĆØre moitiĆ© de son existence dĆ©mentie par la derniĆØre, il vĆ©cut paisible, rassurĆ© et espĆ©rant, n'ayant plus que deux pensĆ©es: cacher son nom, et sanctifier sa vie; Ć©chapper aux hommes, et revenir Ć  Dieu. Ces deux pensĆ©es Ć©taient si Ć©troitement mĆŖlĆ©es dans son esprit qu'elles n'en formaient qu'une seule; elles Ć©taient toutes deux Ć©galement absorbantes et impĆ©rieuses, et dominaient ses moindres actions. D'ordinaire elles Ć©taient d'accord pour rĆ©gler la conduite de sa vie; elles le tournaient vers l'ombre; elles le faisaient bienveillant et simple; elles lui conseillaient les mĆŖmes choses. Quelquefois cependant il y avait conflit entre elles. Dans ce cas-lĆ , on s'en souvient, l'homme que tout le pays de Montreuil-sur-mer appelait M. Madeleine ne balanƧait pas Ć  sacrifier la premiĆØre Ć  la seconde, sa sĆ©curitĆ© Ć  sa vertu. Ainsi, en dĆ©pit de toute rĆ©serve et de toute prudence, il avait gardĆ© les chandeliers de l'Ć©vĆŖque, portĆ© son deuil, appelĆ© et interrogĆ© tous les petits savoyards qui passaient, pris des renseignements sur les familles de Faverolles, et sauvĆ© la vie au vieux Fauchelevent, malgrĆ© les inquiĆ©tantes insinuations de Javert. Il semblait, nous l'avons dĆ©jĆ  remarquĆ©, qu'il pensĆ¢t, Ć  l'exemple de tous ceux qui ont Ć©tĆ© sages, saints et justes, que son premier devoir n'Ć©tait pas envers lui. Toutefois, il faut le dire, jamais rien de pareil ne s'Ć©tait encore prĆ©sentĆ©. Jamais les deux idĆ©es qui gouvernaient le malheureux homme dont nous racontons les souffrances n'avaient engagĆ© une lutte si sĆ©rieuse. Il le comprit confusĆ©ment, mais profondĆ©ment, dĆØs les premiĆØres paroles que prononƧa Javert, en entrant dans son cabinet. Au moment où fut si Ć©trangement articulĆ© ce nom qu'il avait enseveli sous tant d'Ć©paisseurs, il fut saisi de stupeur et comme enivrĆ© par la sinistre bizarrerie de sa destinĆ©e, et, Ć  travers cette stupeur, il eut ce tressaillement qui prĆ©cĆØde les grandes secousses; il se courba comme un chĆŖne Ć  l'approche d'un orage, comme un soldat Ć  l'approche d'un assaut. Il sentit venir sur sa tĆŖte des ombres pleines de foudres et d'Ć©clairs. Tout en Ć©coutant parler Javert, il eut une premiĆØre pensĆ©e d'aller, de courir, de se dĆ©noncer, de tirer ce Champmathieu de prison et de s'y mettre; cela fut douloureux et poignant comme une incision dans la chair vive, puis cela passa, et il se dit: Ā«Voyons! voyons!Ā» Il rĆ©prima ce premier mouvement gĆ©nĆ©reux et recula devant l'hĆ©roĆÆsme. Sans doute, il serait beau qu'aprĆØs les saintes paroles de l'Ć©vĆŖque, aprĆØs tant d'annĆ©es de repentir et d'abnĆ©gation, au milieu d'une pĆ©nitence admirablement commencĆ©e, cet homme, mĆŖme en prĆ©sence d'une si terrible conjoncture, n'eĆ»t pas bronchĆ© un instant et eĆ»t continuĆ© de marcher du mĆŖme pas vers ce prĆ©cipice ouvert au fond duquel Ć©tait le ciel; cela serait beau, mais cela ne fut pas ainsi. Il faut bien que nous rendions compte des choses qui s'accomplissaient dans cette Ć¢me, et nous ne pouvons dire que ce qui y Ć©tait. Ce qui l'emporta tout d'abord, ce fut l'instinct de la conservation; il rallia en hĆ¢te ses idĆ©es, Ć©touffa ses Ć©motions, considĆ©ra la prĆ©sence de Javert, ce grand pĆ©ril, ajourna toute rĆ©solution avec la fermetĆ© de l'Ć©pouvante, s'Ć©tourdit sur ce qu'il y avait Ć  faire, et reprit son calme comme un lutteur ramasse son bouclier. Le reste de la journĆ©e il fut dans cet Ć©tat, un tourbillon au dedans, une tranquillitĆ© profonde au dehors; il ne prit que ce qu'on pourrait appeler Ā«les mesures conservatoiresĀ». Tout Ć©tait encore confus et se heurtait dans son cerveau; le trouble y Ć©tait tel qu'il ne voyait distinctement la forme d'aucune idĆ©e; et lui-mĆŖme n'aurait pu rien dire de lui-mĆŖme, si ce n'est qu'il venait de recevoir un grand coup. Il se rendit comme d'habitude prĆØs du lit de douleur de Fantine et prolongea sa visite, par un instinct de bontĆ©, se disant qu'il fallait agir ainsi et la bien recommander aux soeurs pour le cas où il arriverait qu'il eĆ»t Ć  s'absenter. Il sentit vaguement qu'il faudrait peut-ĆŖtre aller Ć  Arras, et, sans ĆŖtre le moins du monde dĆ©cidĆ© Ć  ce voyage, il se dit qu'Ć  l'abri de tout soupƧon comme il l'Ć©tait, il n'y avait point d'inconvĆ©nient Ć  ĆŖtre tĆ©moin de ce qui se passerait, et il retint le tilbury de Scaufflaire, afin d'ĆŖtre prĆ©parĆ© Ć  tout Ć©vĆ©nement. Il dĆ®na avec assez d'appĆ©tit. RentrĆ© dans sa chambre il se recueillit. Il examina la situation et la trouva inouĆÆe; tellement inouĆÆe qu'au milieu de sa rĆŖverie, par je ne sais quelle impulsion d'anxiĆ©tĆ© presque inexplicable, il se leva de sa chaise et ferma sa porte au verrou. Il craignait qu'il n'entrĆ¢t encore quelque chose. Il se barricadait contre le possible. Un moment aprĆØs il souffla sa lumiĆØre. Elle le gĆŖnait. Il lui semblait qu'on pouvait le voir. Qui, on? HĆ©las! ce qu'il voulait mettre Ć  la porte Ć©tait entrĆ© ce qu'il voulait aveugler, le regardait. Sa conscience. Sa conscience, c'est-Ć -dire Dieu. Pourtant, dans le premier moment, il se fit illusion; il eut un sentiment de sĆ»retĆ© et de solitude; le verrou tirĆ©, il se crut imprenable; la chandelle Ć©teinte, il se sentit invisible. Alors il prit possession de lui-mĆŖme; il posa ses coudes sur la table, appuya la tĆŖte sur sa main, et se mit Ć  songer dans les tĆ©nĆØbres. --Où en suis-je?--Est-ce que je ne rĆŖve pas? Que m'a-t-on dit?--Est-il bien vrai que j'aie vu ce Javert et qu'il m'ait parlĆ© ainsi?--Que peut ĆŖtre ce Champmathieu?--Il me ressemble donc?--Est-ce possible?--Quand je pense qu'hier j'Ć©tais si tranquille et si loin de me douter de rien!--Qu'est-ce que je faisais donc hier Ć  pareille heure?--Qu'y a-t-il dans cet incident?--Comment se dĆ©nouera-t-il?--Que faire? VoilĆ  dans quelle tourmente il Ć©tait. Son cerveau avait perdu la force de retenir ses idĆ©es, elles passaient comme des ondes, et il prenait son front dans ses deux mains pour les arrĆŖter. De ce tumulte qui bouleversait sa volontĆ© et sa raison, et dont il cherchait Ć  tirer une Ć©vidence et une rĆ©solution, rien ne se dĆ©gageait que l'angoisse. Sa tĆŖte Ć©tait brĆ»lante. Il alla Ć  la fenĆŖtre et l'ouvrit toute grande. Il n'y avait pas d'Ć©toiles au ciel. Il revint s'asseoir prĆØs de la table. La premiĆØre heure s'Ć©coula ainsi. Peu Ć  peu cependant des linĆ©aments vagues commencĆØrent Ć  se former et Ć  se fixer dans sa mĆ©ditation, et il put entrevoir avec la prĆ©cision de la rĆ©alitĆ©, non l'ensemble de la situation, mais quelques dĆ©tails. Il commenƧa par reconnaĆ®tre que, si extraordinaire et si critique que fĆ»t cette situation, il en Ć©tait tout Ć  fait le maĆ®tre. Sa stupeur ne fit que s'en accroĆ®tre. IndĆ©pendamment du but sĆ©vĆØre et religieux que se proposaient ses actions, tout ce qu'il avait fait jusqu'Ć  ce jour n'Ć©tait autre chose qu'un trou qu'il creusait pour y enfouir son nom. Ce qu'il avait toujours le plus redoutĆ©, dans ses heures de repli sur lui-mĆŖme, dans ses nuits d'insomnie, c'Ć©tait d'entendre jamais prononcer ce nom; il se disait que ce serait lĆ  pour lui la fin de tout; que le jour où ce nom reparaĆ®trait, il ferait Ć©vanouir autour de lui sa vie nouvelle, et qui sait mĆŖme peut-ĆŖtre? au dedans de lui sa nouvelle Ć¢me. Il frĆ©missait de la seule pensĆ©e que c'Ć©tait possible. Certes, si quelqu'un lui eĆ»t dit en ces moments-lĆ  qu'une heure viendrait où ce nom retentirait Ć  son oreille, où ce hideux mot, Jean Valjean, sortirait tout Ć  coup de la nuit et se dresserait devant lui, où cette lumiĆØre formidable faite pour dissiper le mystĆØre dont il s'enveloppait resplendirait subitement sur sa tĆŖte; et que ce nom ne le menacerait pas, que cette lumiĆØre ne produirait qu'une obscuritĆ© plus Ć©paisse, que ce voile dĆ©chirĆ© accroĆ®trait le mystĆØre; que ce tremblement de terre consoliderait son Ć©difice, que ce prodigieux incident n'aurait d'autre rĆ©sultat, si bon lui semblait, Ć  lui, que de rendre son existence Ć  la fois plus claire et plus impĆ©nĆ©trable, et que, de sa confrontation avec le fantĆ“me de Jean Valjean, le bon et digne bourgeois monsieur Madeleine sortirait plus honorĆ©, plus paisible et plus respectĆ© que jamais,--si quelqu'un lui eĆ»t dit cela, il eĆ»t hochĆ© la tĆŖte et regardĆ© ces paroles comme insensĆ©es. Eh bien! tout cela venait prĆ©cisĆ©ment d'arriver, tout cet entassement de l'impossible Ć©tait un fait, et Dieu avait permis que ces choses folles devinssent des choses rĆ©elles! Sa rĆŖverie continuait de s'Ć©claircir. Il se rendait de plus en plus compte de sa position. Il lui semblait qu'il venait de s'Ć©veiller de je ne sais quel sommeil, et qu'il se trouvait glissant sur une pente au milieu de la nuit, debout, frissonnant, reculant en vain, sur le bord extrĆŖme d'un abĆ®me. Il entrevoyait distinctement dans l'ombre un inconnu, un Ć©tranger, que la destinĆ©e prenait pour lui et poussait dans le gouffre Ć  sa place. Il fallait, pour que le gouffre se refermĆ¢t, que quelqu'un y tombĆ¢t, lui ou l'autre. Il n'avait qu'Ć  laisser faire. La clartĆ© devint complĆØte, et il s'avoua ceci:--Que sa place Ć©tait vide aux galĆØres, qu'il avait beau faire, qu'elle l'y attendait toujours, que le vol de Petit-Gervais l'y ramenait, que cette place vide l'attendrait et l'attirerait jusqu'Ć  ce qu'il y fĆ»t, que cela Ć©tait inĆ©vitable et fatal.--Et puis il se dit:--Qu'en ce moment il avait un remplaƧant, qu'il paraissait qu'un nommĆ© Champmathieu avait cette mauvaise chance, et que, quant Ć  lui, prĆ©sent dĆ©sormais au bagne dans la personne de ce Champmathieu, prĆ©sent dans la sociĆ©tĆ© sous le nom de M. Madeleine, il n'avait plus rien Ć  redouter, pourvu qu'il n'empĆŖchĆ¢t pas les hommes de sceller sur la tĆŖte de ce Champmathieu cette pierre de l'infamie qui, comme la pierre du sĆ©pulcre, tombe une fois et ne se relĆØve jamais. Tout cela Ć©tait si violent et si Ć©trange qu'il se fit soudain en lui cette espĆØce de mouvement indescriptible qu'aucun homme n'Ć©prouve plus de deux ou trois fois dans sa vie, sorte de convulsion de la conscience qui remue tout ce que le coeur a de douteux, qui se compose d'ironie, de joie et de dĆ©sespoir, et qu'on pourrait appeler un Ć©clat de rire intĆ©rieur. Il ralluma brusquement sa bougie. --Eh bien quoi! se dit-il, de quoi est-ce que j'ai peur? qu'est-ce que j'ai Ć  songer comme cela? Me voilĆ  sauvĆ©. Tout est fini. Je n'avais plus qu'une porte entr'ouverte par laquelle mon passĆ© pouvait faire irruption dans ma vie; cette porte, la voilĆ  murĆ©e! Ć  jamais! Ce Javert qui me trouble depuis si longtemps, ce redoutable instinct qui semblait m'avoir devinĆ©, qui m'avait devinĆ©, pardieu! et qui me suivait partout, cet affreux chien de chasse toujours en arrĆŖt sur moi, le voilĆ  dĆ©routĆ©, occupĆ© ailleurs, absolument dĆ©pistĆ©! Il est satisfait dĆ©sormais, il me laissera tranquille, il tient son Jean Valjean! Qui sait mĆŖme, il est probable qu'il voudra quitter la ville! Et tout cela s'est fait sans moi! Et je n'y suis pour rien! Ah ƧƠ, mais! qu'est-ce qu'il y a de malheureux dans ceci? Des gens qui me verraient, parole d'honneur! croiraient qu'il m'est arrivĆ© une catastrophe! AprĆØs tout, s'il y a du mal pour quelqu'un, ce n'est aucunement de ma faute. C'est la providence qui a tout fait. C'est qu'elle veut cela apparemment! Ai-je le droit de dĆ©ranger ce qu'elle arrange? Qu'est-ce que je demande Ć  prĆ©sent? De quoi est-ce que je vais me mĆŖler? Cela ne me regarde pas. Comment! je ne suis pas content! Mais qu'est-ce qu'il me faut donc? Le but auquel j'aspire depuis tant d'annĆ©es, le songe de mes nuits, l'objet de mes priĆØres au ciel, la sĆ©curitĆ©, je l'atteins! C'est Dieu qui le veut. Je n'ai rien Ć  faire contre la volontĆ© de Dieu. Et pourquoi Dieu le veut-il? Pour que je continue ce que j'ai commencĆ©, pour que je fasse le bien, pour que je sois un jour un grand et encourageant exemple, pour qu'il soit dit qu'il y a eu enfin un peu de bonheur attachĆ© Ć  cette pĆ©nitence que j'ai subie et Ć  cette vertu où je suis revenu! Vraiment je ne comprends pas pourquoi j'ai eu peur tantĆ“t d'entrer chez ce brave curĆ© et de tout lui raconter comme Ć  un confesseur, et de lui demander conseil, c'est Ć©videmment lĆ  ce qu'il m'aurait dit. C'est dĆ©cidĆ©, laissons aller les choses! laissons faire le bon Dieu! Il se parlait ainsi dans les profondeurs de sa conscience, penchĆ© sur ce qu'on pourrait appeler son propre abĆ®me. Il se leva de sa chaise, et se mit Ć  marcher dans la chambre.--Allons, dit-il, n'y pensons plus. VoilĆ  une rĆ©solution prise!--Mais il ne sentit aucune joie. Au contraire. On n'empĆŖche pas plus la pensĆ©e de revenir Ć  une idĆ©e que la mer de revenir Ć  un rivage. Pour le matelot, cela s'appelle la marĆ©e; pour le coupable, cela s'appelle le remords. Dieu soulĆØve l'Ć¢me comme l'ocĆ©an. Au bout de peu d'instants, il eut beau faire, il reprit ce sombre dialogue dans lequel c'Ć©tait lui qui parlait et lui qui Ć©coutait, disant ce qu'il eĆ»t voulu taire, Ć©coutant ce qu'il n'eĆ»t pas voulu entendre, cĆ©dant Ć  cette puissance mystĆ©rieuse qui lui disait: pense! comme elle disait il y a deux mille ans Ć  un autre condamnĆ©, marche! Avant d'aller plus loin et pour ĆŖtre pleinement compris, insistons sur une observation nĆ©cessaire. Il est certain qu'on se parle Ć  soi-mĆŖme, il n'est pas un ĆŖtre pensant qui ne l'ait Ć©prouvĆ©. On peut dire mĆŖme que le verbe n'est jamais un plus magnifique mystĆØre que lorsqu'il va, dans l'intĆ©rieur d'un homme, de la pensĆ©e Ć  la conscience et qu'il retourne de la conscience Ć  la pensĆ©e. C'est dans ce sens seulement qu'il faut entendre les mots souvent employĆ©s dans ce chapitre, il dit, il s'Ć©cria. On se dit, on se parle, on s'Ć©crie en soi-mĆŖme, sans que le silence extĆ©rieur soit rompu. Il y a un grand tumulte; tout parle en nous, exceptĆ© la bouche. Les rĆ©alitĆ©s de l'Ć¢me, pour n'ĆŖtre point visibles et palpables, n'en sont pas moins des rĆ©alitĆ©s. Il se demanda donc où il en Ć©tait. Il s'interrogea sur cette Ā«rĆ©solution priseĀ». Il se confessa Ć  lui-mĆŖme que tout ce qu'il venait d'arranger dans son esprit Ć©tait monstrueux, que Ā«laisser aller les choses, laisser faire le bon DieuĀ», c'Ć©tait tout simplement horrible. Laisser s'accomplir cette mĆ©prise de la destinĆ©e et des hommes, ne pas l'empĆŖcher, s'y prĆŖter par son silence, ne rien faire enfin, c'Ć©tait faire tout! c'Ć©tait le dernier degrĆ© de l'indignitĆ© hypocrite! c'Ć©tait un crime bas, lĆ¢che, sournois, abject, hideux! Pour la premiĆØre fois depuis huit annĆ©es, le malheureux homme venait de sentir la saveur amĆØre d'une mauvaise pensĆ©e et d'une mauvaise action. Il la recracha avec dĆ©goĆ»t. Il continua de se questionner. Il se demanda sĆ©vĆØrement ce qu'il avait entendu par ceci: "Mon but est atteint!" Il se dĆ©clara que sa vie avait un but en effet. Mais quel but? cacher son nom? tromper la police? Ɖtait-ce pour une chose si petite qu'il avait fait tout ce qu'il avait fait? Est-ce qu'il n'avait pas un autre but, qui Ć©tait le grand, qui Ć©tait le vrai? Sauver, non sa personne, mais son Ć¢me. Redevenir honnĆŖte et bon. Être un juste! est-ce que ce n'Ć©tait pas lĆ  surtout, lĆ  uniquement, ce qu'il avait toujours voulu, ce que l'Ć©vĆŖque lui avait ordonnĆ©?--Fermer la porte Ć  son passĆ©? Mais il ne la fermait pas, grand Dieu! il la rouvrait en faisant une action infĆ¢me! mais il redevenait un voleur, et le plus odieux des voleurs! il volait Ć  un autre son existence, sa vie, sa paix, sa place au soleil! il devenait un assassin! il tuait, il tuait moralement un misĆ©rable homme, il lui infligeait cette affreuse mort vivante, cette mort Ć  ciel ouvert, qu'on appelle le bagne! Au contraire, se livrer, sauver cet homme frappĆ© d'une si lugubre erreur, reprendre son nom, redevenir par devoir le forƧat Jean Valjean, c'Ć©tait lĆ  vraiment achever sa rĆ©surrection, et fermer Ć  jamais l'enfer d'où il sortait! Y retomber en apparence, c'Ć©tait en sortir en rĆ©alitĆ©! Il fallait faire cela! il n'avait rien fait s'il ne faisait pas cela! toute sa vie Ć©tait inutile, toute sa pĆ©nitence Ć©tait perdue, et il n'y avait plus qu'Ć  dire: Ć  quoi bon? Il sentait que l'Ć©vĆŖque Ć©tait lĆ , que l'Ć©vĆŖque Ć©tait d'autant plus prĆ©sent qu'il Ć©tait mort, que l'Ć©vĆŖque le regardait fixement, que dĆ©sormais le maire Madeleine avec toutes ses vertus lui serait abominable, et que le galĆ©rien Jean Valjean serait admirable et pur devant lui. Que les hommes voyaient son masque, mais que l'Ć©vĆŖque voyait sa face. Que les hommes voyaient sa vie, mais que l'Ć©vĆŖque voyait sa conscience. Il fallait donc aller Ć  Arras, dĆ©livrer le faux Jean Valjean, dĆ©noncer le vĆ©ritable! HĆ©las! c'Ć©tait lĆ  le plus grand des sacrifices, la plus poignante des victoires, le dernier pas Ć  franchir; mais il le fallait. Douloureuse destinĆ©e! il n'entrerait dans la saintetĆ© aux yeux de Dieu que s'il rentrait dans l'infamie aux yeux des hommes! --Eh bien, dit-il, prenons ce parti! faisons notre devoir! sauvons cet homme! Il prononƧa ces paroles Ć  haute voix, sans s'apercevoir qu'il parlait tout haut. Il prit ses livres, les vĆ©rifia et les mit en ordre. Il jeta au feu une liasse de crĆ©ances qu'il avait sur de petits commerƧants gĆŖnĆ©s. Il Ć©crivit une lettre qu'il cacheta et sur l'enveloppe de laquelle on aurait pu lire, s'il y avait eu quelqu'un dans sa chambre en cet instant: _ƀ Monsieur Laffitte, banquier, rue d'Artois, Ć  Paris_. Il tira d'un secrĆ©taire un portefeuille qui contenait quelques billets de banque et le passeport dont il s'Ć©tait servi cette mĆŖme annĆ©e pour aller aux Ć©lections. Qui l'eĆ»t vu pendant qu'il accomplissait ces divers actes auxquels se mĆŖlait une mĆ©ditation si grave, ne se fĆ»t pas doutĆ© de ce qui se passait en lui. Seulement par moments ses lĆØvres remuaient; dans d'autres instants il relevait la tĆŖte et fixait son regard sur un point quelconque de la muraille, comme s'il y avait prĆ©cisĆ©ment lĆ  quelque chose qu'il voulait Ć©claircir ou interroger. La lettre Ć  M. Laffitte terminĆ©e, il la mit dans sa poche ainsi que le portefeuille, et recommenƧa Ć  marcher. Sa rĆŖverie n'avait point dĆ©viĆ©. Il continuait de voir clairement son devoir Ć©crit en lettres lumineuses qui flamboyaient devant ses yeux et se dĆ©plaƧaient avec son regard:--_Va! nomme-toi! dĆ©nonce-toi!_ Il voyait de mĆŖme, et comme si elles se fussent mues devant lui avec des formes sensibles, les deux idĆ©es qui avaient Ć©tĆ© jusque-lĆ  la double rĆØgle de sa vie: cacher son nom, sanctifier son Ć¢me. Pour la premiĆØre fois, elles lui apparaissaient absolument distinctes, et il voyait la diffĆ©rence qui les sĆ©parait. Il reconnaissait que l'une de ces idĆ©es Ć©tait nĆ©cessairement bonne, tandis que l'autre pouvait devenir mauvaise; que celle-lĆ  Ć©tait le dĆ©vouement et que celle-ci Ć©tait la personnalitĆ©; que l'une disait: le _prochain_, et que l'autre disait: _moi_; que l'une venait de la lumiĆØre et que l'autre venait de la nuit. Elles se combattaient, il les voyait se combattre. ƀ mesure qu'il songeait, elles avaient grandi devant l'oeil de son esprit; elles avaient maintenant des statures colossales; et il lui semblait qu'il voyait lutter au dedans de lui-mĆŖme, dans cet infini dont nous parlions tout Ć  l'heure, au milieu des obscuritĆ©s et des lueurs, une dĆ©esse et une gĆ©ante. Il Ć©tait plein d'Ć©pouvante, mais il lui semblait que la bonne pensĆ©e l'emportait. Il sentait qu'il touchait Ć  l'autre moment dĆ©cisif de sa conscience et de sa destinĆ©e; que l'Ć©vĆŖque avait marquĆ© la premiĆØre phase de sa vie nouvelle, et que ce Champmathieu en marquait la seconde. AprĆØs la grande crise, la grande Ć©preuve. Cependant la fiĆØvre, un instant apaisĆ©e, lui revenait peu Ć  peu. Mille pensĆ©es le traversaient, mais elles continuaient de le fortifier dans sa rĆ©solution. Un moment il s'Ć©tait dit:--qu'il prenait peut-ĆŖtre la chose trop vivement, qu'aprĆØs tout ce Champmathieu n'Ć©tait pas intĆ©ressant, qu'en somme il avait volĆ©. Il se rĆ©pondit:--Si cet homme a en effet volĆ© quelques pommes, c'est un mois de prison. Il y a loin de lĆ  aux galĆØres. Et qui sait mĆŖme? a-t-il volĆ©? est-ce prouvĆ©? Le nom de Jean Valjean l'accable et semble dispenser de preuves. Les procureurs du roi n'agissent-ils pas habituellement ainsi? On le croit voleur, parce qu'on le sait forƧat. Dans un autre instant, cette idĆ©e lui vint que, lorsqu'il se serait dĆ©noncĆ©, peut-ĆŖtre on considĆ©rerait l'hĆ©roĆÆsme de son action, et sa vie honnĆŖte depuis sept ans, et ce qu'il avait fait pour le pays, et qu'on lui ferait grĆ¢ce. Mais cette supposition s'Ć©vanouit bien vite, et il sourit amĆØrement en songeant que le vol des quarante sous Ć  Petit-Gervais le faisait rĆ©cidiviste, que cette affaire reparaĆ®trait certainement et, aux termes prĆ©cis de la loi, le ferait passible des travaux forcĆ©s Ć  perpĆ©tuitĆ©. Il se dĆ©tourna de toute illusion, se dĆ©tacha de plus en plus de la terre et chercha la consolation et la force ailleurs. Il se dit qu'il fallait faire son devoir; que peut-ĆŖtre mĆŖme ne serait-il pas plus malheureux aprĆØs avoir fait son devoir qu'aprĆØs l'avoir Ć©ludĆ©; que s'il _laissait faire_, s'il restait Ć  Montreuil-sur-mer, sa considĆ©ration, sa bonne renommĆ©e, ses bonnes oeuvres, la dĆ©fĆ©rence, la vĆ©nĆ©ration, sa charitĆ©, sa richesse, sa popularitĆ©, sa vertu, seraient assaisonnĆ©es d'un crime; et quel goĆ»t auraient toutes ces choses saintes liĆ©es Ć  cette chose hideuse! tandis que, s'il accomplissait son sacrifice, au bagne, au poteau, au carcan, au bonnet vert, au travail sans relĆ¢che, Ć  la honte sans pitiĆ©, il se mĆŖlerait une idĆ©e cĆ©leste! Enfin il se dit qu'il y avait nĆ©cessitĆ©, que sa destinĆ©e Ć©tait ainsi faite, qu'il n'Ć©tait pas maĆ®tre de dĆ©ranger les arrangements d'en haut, que dans tous les cas il fallait choisir: ou la vertu au dehors et l'abomination au dedans, ou la saintetĆ© au dedans et l'infamie au dehors. ƀ remuer tant d'idĆ©es lugubres, son courage ne dĆ©faillait pas, mais son cerveau se fatiguait. Il commenƧait Ć  penser malgrĆ© lui Ć  d'autres choses, Ć  des choses indiffĆ©rentes. Ses artĆØres battaient violemment dans ses tempes. Il allait et venait toujours. Minuit sonna d'abord Ć  la paroisse, puis Ć  la maison de ville. Il compta les douze coups aux deux horloges, et il compara le son des deux cloches. Il se rappela Ć  cette occasion que quelques jours auparavant il avait vu chez un marchand de ferrailles une vieille cloche Ć  vendre sur laquelle ce nom Ć©tait Ć©crit: _Antoine Albin de Romainville_. Il avait froid. Il alluma un peu de feu. Il ne songea pas Ć  fermer la fenĆŖtre. Cependant il Ć©tait retombĆ© dans sa stupeur. Il lui fallait faire un assez grand effort pour se rappeler Ć  quoi il songeait avant que minuit sonnĆ¢t. Il y parvint enfin. --Ah! oui, se dit-il, j'avais pris la rĆ©solution de me dĆ©noncer. Et puis tout Ć  coup il pensa Ć  la Fantine. --Tiens! dit-il, et cette pauvre femme! Ici une crise nouvelle se dĆ©clara. Fantine, apparaissant brusquement dans sa rĆŖverie, y fut comme un rayon d'une lumiĆØre inattendue. Il lui sembla que tout changeait d'aspect autour de lui, il s'Ć©cria: --Ah ƧƠ, mais! jusqu'ici je n'ai considĆ©rĆ© que moi! je n'ai eu Ć©gard qu'Ć  ma convenance! Il me convient de me taire ou de me dĆ©noncer,--cacher ma personne ou sauver mon Ć¢me,--ĆŖtre un magistrat mĆ©prisable et respectĆ© ou un galĆ©rien infĆ¢me et vĆ©nĆ©rable, c'est moi, c'est toujours moi, ce n'est que moi! Mais, mon Dieu, c'est de l'Ć©goĆÆsme tout cela! Ce sont des formes diverses de l'Ć©goĆÆsme, mais c'est de l'Ć©goĆÆsme! Si je songeais un peu aux autres? La premiĆØre saintetĆ© est de penser Ć  autrui. Voyons, examinons. Moi exceptĆ©, moi effacĆ©, moi oubliĆ©, qu'arrivera-t-il de tout ceci?--Si je me dĆ©nonce? on me prend. On lĆ¢che ce Champmathieu, on me remet aux galĆØres, c'est bien. Et puis? Que se passe-t-il ici? Ah! ici, il y a un pays, une ville, des fabriques, une industrie, des ouvriers, des hommes, des femmes, des vieux grands-pĆØres, des enfants, des pauvres gens! J'ai crƩƩ tout ceci, je fais vivre tout cela; partout où il y a une cheminĆ©e qui fume, c'est moi qui ai mis le tison dans le feu et la viande dans la marmite; j'ai fait l'aisance, la circulation, le crĆ©dit; avant moi il n'y avait rien; j'ai relevĆ©, vivifiĆ©, animĆ©, fĆ©condĆ©, stimulĆ©, enrichi tout le pays; moi de moins, c'est l'Ć¢me de moins. Je m'Ć“te, tout meurt.--Et cette femme qui a tant souffert, qui a tant de mĆ©rites dans sa chute, dont j'ai causĆ© sans le vouloir tout le malheur! Et cet enfant que je voulais aller chercher, que j'ai promis Ć  la mĆØre! Est-ce que je ne dois pas aussi quelque chose Ć  cette femme, en rĆ©paration du mal que je lui ai fait? Si je disparais, qu'arrive-t-il? La mĆØre meurt. L'enfant devient ce qu'il peut. VoilĆ  ce qui se passe, si je me dĆ©nonce.--Si je ne me dĆ©nonce pas? Voyons, si je ne me dĆ©nonce pas? AprĆØs s'ĆŖtre fait cette question, il s'arrĆŖta; il eut comme un moment d'hĆ©sitation et de tremblement; mais ce moment dura peu, et il se rĆ©pondit avec calme: --Eh bien, cet homme va aux galĆØres, c'est vrai, mais, que diable! il a volĆ©! J'ai beau me dire qu'il n'a pas volĆ©, il a volĆ©! Moi, je reste ici, je continue. Dans dix ans j'aurai gagnĆ© dix millions, je les rĆ©pands dans le pays, je n'ai rien Ć  moi, qu'est-ce que cela me fait? Ce n'est pas pour moi ce que je fais! La prospĆ©ritĆ© de tous va croissant, les industries s'Ć©veillent et s'excitent, les manufactures et les usines se multiplient, les familles, cent familles, mille familles! sont heureuses; la contrĆ©e se peuple; il naĆ®t des villages où il n'y a que des fermes, il naĆ®t des fermes où il n'y a rien; la misĆØre disparaĆ®t, et avec la misĆØre disparaissent la dĆ©bauche, la prostitution, le vol, le meurtre, tous les vices, tous les crimes! Et cette pauvre mĆØre Ć©lĆØve son enfant! et voilĆ  tout un pays riche et honnĆŖte! Ah ƧƠ, j'Ć©tais fou, j'Ć©tais absurde, qu'est-ce que je parlais donc de me dĆ©noncer? Il faut faire attention, vraiment, et ne rien prĆ©cipiter. Quoi! parce qu'il m'aura plu de faire le grand et le gĆ©nĆ©reux,--c'est du mĆ©lodrame, aprĆØs tout!--parce que je n'aurai songĆ© qu'Ć  moi, qu'Ć  moi seul, quoi! pour sauver d'une punition peut-ĆŖtre un peu exagĆ©rĆ©e, mais juste au fond, on ne sait qui, un voleur, un drĆ“le Ć©videmment, il faudra que tout un pays pĆ©risse! il faudra qu'une pauvre femme crĆØve Ć  l'hĆ“pital! qu'une pauvre petite fille crĆØve sur le pavĆ©! comme des chiens! Ah! mais c'est abominable! Sans mĆŖme que la mĆØre ait revu son enfant! sans que l'enfant ait presque connu sa mĆØre! Et tout Ƨa pour ce vieux gredin de voleur de pommes qui, Ć  coup sĆ»r, a mĆ©ritĆ© les galĆØres pour autre chose, si ce n'est pour cela! Beaux scrupules qui sauvent un coupable et qui sacrifient des innocents, qui sauvent un vieux vagabond, lequel n'a plus que quelques annĆ©es Ć  vivre au bout du compte et ne sera guĆØre plus malheureux au bagne que dans sa masure, et qui sacrifient toute une population, mĆØres, femmes, enfants! Cette pauvre petite Cosette qui n'a que moi au monde et qui est sans doute en ce moment toute bleue de froid dans le bouge de ces ThĆ©nardier! VoilĆ  encore des canailles ceux-lĆ ! Et je manquerais Ć  mes devoirs envers tous ces pauvres ĆŖtres! Et je m'en irais me dĆ©noncer! Et je ferais cette inepte sottise! Mettons tout au pis. Supposons qu'il y ait une mauvaise action pour moi dans ceci et que ma conscience me la reproche un jour, accepter, pour le bien d'autrui, ces reproches qui ne chargent que moi, cette mauvaise action qui ne compromet que mon Ć¢me, c'est lĆ  qu'est le dĆ©vouement, c'est lĆ  qu'est la vertu. Il se leva, il se remit Ć  marcher. Cette fois il lui semblait qu'il Ć©tait content. On ne trouve les diamants que dans les tĆ©nĆØbres de la terre; on ne trouve les vĆ©ritĆ©s que dans les profondeurs de la pensĆ©e. Il lui semblait qu'aprĆØs ĆŖtre descendu dans ces profondeurs, aprĆØs avoir longtemps tĆ¢tonnĆ© au plus noir de ces tĆ©nĆØbres, il venait enfin de trouver un de ces diamants, une de ces vĆ©ritĆ©s, et qu'il la tenait dans sa main; et il s'Ć©blouissait Ć  la regarder. --Oui, pensa-t-il, c'est cela. Je suis dans le vrai. J'ai la solution. Il faut finir par s'en tenir Ć  quelque chose. Mon parti est pris. Laissons faire! Ne vacillons plus, ne reculons plus. Ceci est dans l'intĆ©rĆŖt de tous, non dans le mien. Je suis Madeleine, je reste Madeleine. Malheur Ć  celui qui est Jean Valjean! Ce n'est plus moi. Je ne connais pas cet homme, je ne sais plus ce que c'est, s'il se trouve que quelqu'un est Jean Valjean Ć  cette heure, qu'il s'arrange! cela ne me regarde pas. C'est un nom de fatalitĆ© qui flotte dans la nuit, s'il s'arrĆŖte et s'abat sur une tĆŖte, tant pis pour elle! Il se regarda dans le petit miroir qui Ć©tait sur sa cheminĆ©e, et dit: --Tiens! cela m'a soulagĆ© de prendre une rĆ©solution! Je suis tout autre Ć  prĆ©sent. Il marcha encore quelques pas, puis il s'arrĆŖta court: --Allons! dit-il, il ne faut hĆ©siter devant aucune des consĆ©quences de la rĆ©solution prise. Il y a encore des fils qui m'attachent Ć  ce Jean Valjean. Il faut les briser! Il y a ici, dans cette chambre mĆŖme, des objets qui m'accuseraient, des choses muettes qui seraient des tĆ©moins, c'est dit, il faut que tout cela disparaisse. Il fouilla dans sa poche, en tira sa bourse, l'ouvrit, et y prit une petite clef. Il introduisit cette clef dans une serrure dont on voyait Ć  peine le trou, perdu qu'il Ć©tait dans les nuances les plus sombres du dessin qui couvrait le papier collĆ© sur le mur. Une cachette s'ouvrit, une espĆØce de fausse armoire mĆ©nagĆ©e entre l'angle de la muraille et le manteau de la cheminĆ©e. Il n'y avait dans cette cachette que quelques guenilles, un sarrau de toile bleue, un vieux pantalon, un vieux havresac, et un gros bĆ¢ton d'Ć©pine ferrĆ© aux deux bouts. Ceux qui avaient vu Jean Valjean Ć  l'Ć©poque où il traversait Digne, en octobre 1815, eussent aisĆ©ment reconnu toutes les piĆØces de ce misĆ©rable accoutrement. Il les avait conservĆ©es comme il avait conservĆ© les chandeliers d'argent, pour se rappeler toujours son point de dĆ©part. Seulement il cachait ceci qui venait du bagne, et il laissait voir les flambeaux qui venaient de l'Ć©vĆŖque. Il jeta un regard furtif vers la porte, comme s'il eĆ»t craint qu'elle ne s'ouvrĆ®t malgrĆ© le verrou qui la fermait; puis d'un mouvement vif et brusque et d'une seule brassĆ©e, sans mĆŖme donner un coup d'oeil Ć  ces choses qu'il avait si religieusement et si pĆ©rilleusement gardĆ©es pendant tant d'annĆ©es, il prit tout, haillons, bĆ¢ton, havresac, et jeta tout au feu. Il referma la fausse armoire, et, redoublant de prĆ©cautions, dĆ©sormais inutiles puisqu'elle Ć©tait vide, en cacha la porte derriĆØre un gros meuble qu'il y poussa. Au bout de quelques secondes, la chambre et le mur d'en face furent Ć©clairĆ©s d'une grande rĆ©verbĆ©ration rouge et tremblante. Tout brĆ»lait. Le bĆ¢ton d'Ć©pine pĆ©tillait et jetait des Ć©tincelles jusqu'au milieu de la chambre. Le havresac, en se consumant avec d'affreux chiffons qu'il contenait, avait mis Ć  nu quelque chose qui brillait dans la cendre. En se penchant, on eĆ»t aisĆ©ment reconnu une piĆØce d'argent. Sans doute la piĆØce de quarante sous volĆ©e au petit savoyard. Lui ne regardait pas le feu et marchait, allant et venant toujours du mĆŖme pas. Tout Ć  coup ses yeux tombĆØrent sur les deux flambeaux d'argent que la rĆ©verbĆ©ration faisait reluire vaguement sur la cheminĆ©e. --Tiens! pensa-t-il, tout Jean Valjean est encore lĆ -dedans. Il faut aussi dĆ©truire cela. Il prit les deux flambeaux. Il y avait assez de feu pour qu'on pĆ»t les dĆ©former promptement et en faire une sorte de lingot mĆ©connaissable. Il se pencha sur le foyer et s'y chauffa un instant. Il eut un vrai bien-ĆŖtre.--La bonne chaleur! dit-il. Il remua le brasier avec un des deux chandeliers. Une minute de plus, et ils Ć©taient dans le feu. En ce moment il lui sembla qu'il entendait une voix qui criait au dedans de lui: --Jean Valjean! Jean Valjean! Ses cheveux se dressĆØrent, il devint comme un homme qui Ć©coute une chose terrible. --Oui, c'est cela, achĆØve! disait la voix. ComplĆØte ce que tu fais! dĆ©truis ces flambeaux! anĆ©antis ce souvenir! oublie l'Ć©vĆŖque! oublie tout! perds ce Champmathieu! va, c'est bien. Applaudis-toi! Ainsi, c'est convenu, c'est rĆ©solu, c'est dit, voilĆ  un homme, voilĆ  un vieillard qui ne sait ce qu'on lui veut, qui n'a rien fait peut-ĆŖtre, un innocent, dont ton nom fait tout le malheur, sur qui ton nom pĆØse comme un crime, qui va ĆŖtre pris pour toi, qui va ĆŖtre condamnĆ©, qui va finir ses jours dans l'abjection et dans l'horreur! c'est bien. Sois honnĆŖte homme, toi. Reste monsieur le maire, reste honorable et honorĆ©, enrichis la ville, nourris des indigents, Ć©lĆØve des orphelins, vis heureux, vertueux et admirĆ©, et pendant ce temps-lĆ , pendant que tu seras ici dans la joie et dans la lumiĆØre, il y aura quelqu'un qui aura ta casaque rouge, qui portera ton nom dans l'ignominie et qui traĆ®nera ta chaĆ®ne au bagne! Oui, c'est bien arrangĆ© ainsi! Ah! misĆ©rable! La sueur lui coulait du front. Il attachait sur les flambeaux un oeil hagard. Cependant ce qui parlait en lui n'avait pas fini. La voix continuait: --Jean Valjean! il y aura autour de toi beaucoup de voix qui feront un grand bruit, qui parleront bien haut, et qui te bĆ©niront, et une seule que personne n'entendra et qui te maudira dans les tĆ©nĆØbres. Eh bien! Ć©coute, infĆ¢me! toutes ces bĆ©nĆ©dictions retomberont avant d'arriver au ciel, et il n'y aura que la malĆ©diction qui montera jusqu'Ć  Dieu! Cette voix, d'abord toute faible et qui s'Ć©tait Ć©levĆ©e du plus obscur de sa conscience, Ć©tait devenue par degrĆ©s Ć©clatante et formidable, et il l'entendait maintenant Ć  son oreille. Il lui semblait qu'elle Ć©tait sortie de lui-mĆŖme et qu'elle parlait Ć  prĆ©sent en dehors de lui. Il crut entendre les derniĆØres paroles si distinctement qu'il regarda dans la chambre avec une sorte de terreur. --Y a-t-il quelqu'un ici? demanda-t-il Ć  haute voix, et tout Ć©garĆ©. Puis il reprit avec un rire qui ressemblait au rire d'un idiot: --Que je suis bĆŖte! il ne peut y avoir personne. Il y avait quelqu'un; mais celui qui y Ć©tait n'Ć©tait pas de ceux que l'oeil humain peut voir. Il posa les flambeaux sur la cheminĆ©e. Alors il reprit cette marche monotone et lugubre qui troublait dans ses rĆŖves et rĆ©veillait en sursaut l'homme endormi au-dessous de lui. Cette marche le soulageait et l'enivrait en mĆŖme temps. Il semble que parfois dans les occasions suprĆŖmes on se remue pour demander conseil Ć  tout ce qu'on peut rencontrer en se dĆ©plaƧant. Au bout de quelques instants il ne savait plus où il en Ć©tait. Il reculait maintenant avec une Ć©gale Ć©pouvante devant les deux rĆ©solutions qu'il avait prises tour Ć  tour. Les deux idĆ©es qui le conseillaient lui paraissaient aussi funestes l'une que l'autre.--Quelle fatalitĆ©! quelle rencontre que ce Champmathieu pris pour lui! Être prĆ©cipitĆ© justement par le moyen que la providence paraissait d'abord avoir employĆ© pour l'affermir! Il y eut un moment où il considĆ©ra l'avenir. Se dĆ©noncer, grand Dieu! se livrer! Il envisagea avec un immense dĆ©sespoir tout ce qu'il faudrait quitter, tout ce qu'il faudrait reprendre. Il faudrait donc dire adieu Ć  cette existence si bonne, si pure, si radieuse, Ć  ce respect de tous, Ć  l'honneur, Ć  la libertĆ©! Il n'irait plus se promener dans les champs, il n'entendrait plus chanter les oiseaux au mois de mai, il ne ferait plus l'aumĆ“ne aux petits enfants! Il ne sentirait plus la douceur des regards de reconnaissance et d'amour fixĆ©s sur lui! Il quitterait cette maison qu'il avait bĆ¢tie, cette chambre, cette petite chambre! Tout lui paraissait charmant Ć  cette heure. Il ne lirait plus dans ces livres, il n'Ć©crirait plus sur cette petite table de bois blanc! Sa vieille portiĆØre, la seule servante qu'il eĆ»t, ne lui monterait plus son cafĆ© le matin. Grand Dieu! au lieu de cela, la chiourme, le carcan, la veste rouge, la chaĆ®ne au pied, la fatigue, le cachot, le lit de camp, toutes ces horreurs connues! ƀ son Ć¢ge, aprĆØs avoir Ć©tĆ© ce qu'il Ć©tait! Si encore il Ć©tait jeune! Mais, vieux, ĆŖtre tutoyĆ© par le premier venu, ĆŖtre fouillĆ© par le garde-chiourme, recevoir le coup de bĆ¢ton de l'argousin! avoir les pieds nus dans des souliers ferrĆ©s! tendre matin et soir sa jambe au marteau du rondier qui visite la manille! subir la curiositĆ© des Ć©trangers auxquels on dirait: _Celui-lĆ , c'est le fameux Jean Valjean, qui a Ć©tĆ© maire Ć  Montreuil-sur-mer_! Le soir, ruisselant de sueur, accablĆ© de lassitude, le bonnet vert sur les yeux, remonter deux Ć  deux, sous le fouet du sergent, l'escalier-Ć©chelle du bagne flottant! Oh! quelle misĆØre! La destinĆ©e peut-elle donc ĆŖtre mĆ©chante comme un ĆŖtre intelligent et devenir monstrueuse comme le coeur humain! Et, quoi qu'il fĆ®t, il retombait toujours sur ce poignant dilemme qui Ć©tait au fond de sa rĆŖverie:--rester dans le paradis, et y devenir dĆ©mon! rentrer dans l'enfer, et y devenir ange! Que faire, grand Dieu! que faire? La tourmente dont il Ć©tait sorti avec tant de peine se dĆ©chaĆ®na de nouveau en lui. Ses idĆ©es recommencĆØrent Ć  se mĆŖler. Elles prirent ce je ne sais quoi de stupĆ©fiĆ© et de machinal qui est propre au dĆ©sespoir. Ce nom de Romainville lui revenait sans cesse Ć  l'esprit avec deux vers d'une chanson qu'il avait entendue autrefois. Il songeait que Romainville est un petit bois prĆØs Paris où les jeunes gens amoureux vont cueillir des lilas au mois d'avril. Il chancelait au dehors comme au dedans. Il marchait comme un petit enfant qu'on laisse aller seul. ƀ de certains moments, luttant contre sa lassitude, il faisait effort pour ressaisir son intelligence. Il tĆ¢chait de se poser une derniĆØre fois, et dĆ©finitivement, le problĆØme sur lequel il Ć©tait en quelque sorte tombĆ© d'Ć©puisement. Faut-il se dĆ©noncer? Faut-il se taire?--Il ne rĆ©ussissait Ć  rien voir de distinct. Les vagues aspects de tous les raisonnements Ć©bauchĆ©s par sa rĆŖverie tremblaient et se dissipaient l'un aprĆØs l'autre en fumĆ©e. Seulement il sentait que, Ć  quelque parti qu'il s'arrĆŖtĆ¢t, nĆ©cessairement, et sans qu'il fĆ»t possible d'y Ć©chapper, quelque chose de lui allait mourir; qu'il entrait dans un sĆ©pulcre Ć  droite comme Ć  gauche; qu'il accomplissait une agonie, l'agonie de son bonheur ou l'agonie de sa vertu. HĆ©las! toutes ses irrĆ©solutions l'avaient repris. Il n'Ć©tait pas plus avancĆ© qu'au commencement. Ainsi se dĆ©battait sous l'angoisse cette malheureuse Ć¢me. Dix-huit cents ans avant cet homme infortunĆ©, l'ĆŖtre mystĆ©rieux, en qui se rĆ©sument toutes les saintetĆ©s et toutes les souffrances de l'humanitĆ©, avait aussi lui, pendant que les oliviers frĆ©missaient au vent farouche de l'infini, longtemps Ć©cartĆ© de la main l'effrayant calice qui lui apparaissait ruisselant d'ombre et dĆ©bordant de tĆ©nĆØbres dans des profondeurs pleines d'Ć©toiles. Chapitre IV Formes que prend la souffrance pendant le sommeil Trois heures du matin venaient de sonner, et il y avait cinq heures qu'il marchait ainsi, presque sans interruption lorsqu'il se laissa tomber sur sa chaise. Il s'y endormit et fit un rĆŖve. Ce rĆŖve, comme la plupart des rĆŖves, ne se rapportait Ć  la situation que par je ne sais quoi de funeste et de poignant, mais il lui fit impression. Ce cauchemar le frappa tellement que plus tard il l'a Ć©crit. C'est un des papiers Ć©crits de sa main qu'il a laissĆ©s. Nous croyons devoir transcrire ici cette chose textuellement. Quel que soit ce rĆŖve, l'histoire de cette nuit serait incomplĆØte si nous l'omettions. C'est la sombre aventure d'une Ć¢me malade. Le voici. Sur l'enveloppe nous trouvons cette ligne Ć©crite: _Le rĆŖve que j'ai eu cette nuit-lĆ ._ Ā«J'Ć©tais dans une campagne. Une grande campagne triste où il n'y avait pas d'herbe. Il ne me semblait pas qu'il fĆ®t jour ni qu'il fĆ®t nuit. Ā«Je me promenais avec mon frĆØre, le frĆØre de mes annĆ©es d'enfance, ce frĆØre auquel je dois dire que je ne pense jamais et dont je ne me souviens presque plus. Ā«Nous causions, et nous rencontrions des passants. Nous parlions d'une voisine que nous avions eue autrefois, et qui, depuis qu'elle demeurait sur la rue, travaillait la fenĆŖtre toujours ouverte. Tout en causant, nous avions froid Ć  cause de cette fenĆŖtre ouverte. Ā«Il n'y avait pas d'arbres dans la campagne. Ā«Nous vĆ®mes un homme qui passa prĆØs de nous. C'Ć©tait un homme tout nu, couleur de cendre, montĆ© sur un cheval couleur de terre. L'homme n'avait pas de cheveux; on voyait son crĆ¢ne et des veines sur son crĆ¢ne. Il tenait Ć  la main une baguette qui Ć©tait souple comme un sarment de vigne et lourde comme du fer. Ce cavalier passa et ne nous dit rien. Ā«Mon frĆØre me dit: Prenons par le chemin creux. Ā«Il y avait un chemin creux où l'on ne voyait pas une broussaille ni un brin de mousse. Tout Ć©tait couleur de terre, mĆŖme le ciel. Au bout de quelques pas, on ne me rĆ©pondit plus quand je parlais. Je m'aperƧus que mon frĆØre n'Ć©tait plus avec moi. Ā«J'entrai dans un village que je vis. Je songeai que ce devait ĆŖtre lĆ  Romainville (pourquoi Romainville?). Ā«La premiĆØre rue où j'entrai Ć©tait dĆ©serte. J'entrai dans une seconde rue. DerriĆØre l'angle que faisaient les deux rues, il y avait un homme debout contre le mur. Je dis Ć  cet homme:--Quel est ce pays? où suis-je? L'homme ne rĆ©pondit pas. Je vis la porte d'une maison ouverte, j'y entrai. Ā«La premiĆØre chambre Ć©tait dĆ©serte. J'entrai dans la seconde. DerriĆØre la porte de cette chambre, il y avait un homme debout contre le mur. Je demandai Ć  cet homme:--ƀ qui est cette maison? où suis-je? L'homme ne rĆ©pondit pas. La maison avait un jardin. Ā«Je sortis de la maison et j'entrai dans le jardin. Le jardin Ć©tait dĆ©sert. DerriĆØre le premier arbre, je trouvai un homme qui se tenait debout. Je dis Ć  cet homme:--Quel est ce jardin? où suis-je? L'homme ne rĆ©pondit pas. Ā«J'errai dans le village, et je m'aperƧus que c'Ć©tait une ville. Toutes les rues Ć©taient dĆ©sertes, toutes les portes Ć©taient ouvertes. Aucun ĆŖtre vivant ne passait dans les rues, ne marchait dans les chambres ou ne se promenait dans les jardins. Mais il y avait derriĆØre chaque angle de mur, derriĆØre chaque porte, derriĆØre chaque arbre, un homme debout qui se taisait. On n'en voyait jamais qu'un Ć  la fois. Ces hommes me regardaient passer. Ā«Je sortis de la ville et je me mis Ć  marcher dans les champs. Ā«Au bout de quelque temps, je me retournai, et je vis une grande foule qui venait derriĆØre moi. Je reconnus tous les hommes que j'avais vus dans la ville. Ils avaient des tĆŖtes Ć©tranges. Ils ne semblaient pas se hĆ¢ter, et cependant ils marchaient plus vite que moi. Ils ne faisaient aucun bruit en marchant. En un instant, cette foule me rejoignit et m'entoura. Les visages de ces hommes Ć©taient couleur de terre. Ā«Alors le premier que j'avais vu et questionnĆ© en entrant dans la ville me dit:--Où allez-vous? Est-ce que vous ne savez pas que vous ĆŖtes mort depuis longtemps? Ā«J'ouvris la bouche pour rĆ©pondre, et je m'aperƧus qu'il n'y avait personne autour de moi.Ā» Il se rĆ©veilla. Il Ć©tait glacĆ©. Un vent qui Ć©tait froid comme le vent du matin faisait tourner dans leurs gonds les chĆ¢ssis de la croisĆ©e restĆ©e ouverte. Le feu s'Ć©tait Ć©teint. La bougie touchait Ć  sa fin. Il Ć©tait encore nuit noire. Il se leva, il alla Ć  la fenĆŖtre. Il n'y avait toujours pas d'Ć©toiles au ciel. De sa fenĆŖtre on voyait la cour de la maison et la rue. Un bruit sec et dur qui rĆ©sonna tout Ć  coup sur le sol lui fit baisser les yeux. Il vit au-dessous de lui deux Ć©toiles rouges dont les rayons s'allongeaient et se raccourcissaient bizarrement dans l'ombre. Comme sa pensĆ©e Ć©tait encore Ć  demi submergĆ©e dans la brume des rĆŖves.--tiens! songea-t-il, il n'y en a pas dans le ciel. Elles sont sur la terre maintenant. Cependant ce trouble se dissipa, un second bruit pareil au premier acheva de le rĆ©veiller; il regarda, et il reconnut que ces deux Ć©toiles Ć©taient les lanternes d'une voiture. ƀ la clartĆ© qu'elles jetaient, il put distinguer la forme de cette voiture. C'Ć©tait un tilbury attelĆ© d'un petit cheval blanc. Le bruit qu'il avait entendu, c'Ć©taient les coups de pied du cheval sur le pavĆ©. --Qu'est-ce que c'est que cette voiture? se dit-il. Qui est-ce qui vient donc si matin? En ce moment on frappa un petit coup Ć  la porte de sa chambre. Il frissonna de la tĆŖte aux pieds, et cria d'une voix terrible: --Qui est lĆ ? Quelqu'un rĆ©pondit: --Moi, monsieur le maire. Il reconnut la voix de la vieille femme, sa portiĆØre. --Eh bien, reprit-il, qu'est-ce que c'est? --Monsieur le maire, il est tout Ć  l'heure cinq heures du matin. --Qu'est-ce que cela me fait? --Monsieur le maire, c'est le cabriolet. --Quel cabriolet? --Le tilbury. --Quel tilbury? --Est-ce que monsieur le maire n'a pas fait demander un tilbury? --Non, dit-il. --Le cocher dit qu'il vient chercher monsieur le maire. --Quel cocher? --Le cocher de M. Scaufflaire. --M. Scaufflaire? Ce nom le fit tressaillir comme si un Ć©clair lui eĆ»t passĆ© devant la face. --Ah! oui! reprit-il, M. Scaufflaire. Si la vieille femme l'eĆ»t pu voir en ce moment, elle eĆ»t Ć©tĆ© Ć©pouvantĆ©e. Il se fit un assez long silence. Il examinait d'un air stupide la flamme de la bougie et prenait autour de la mĆØche de la cire brĆ»lante qu'il roulait dans ses doigts. La vieille attendait. Elle se hasarda pourtant Ć  Ć©lever encore la voix: --Monsieur le maire, que faut-il que je rĆ©ponde? --Dites que c'est bien, et que je descends. Chapitre V BĆ¢tons dans les roues Le service des postes d'Arras Ć  Montreuil-sur-mer se faisait encore Ć  cette Ć©poque par de petites malles du temps de l'empire. Ces malles Ć©taient des cabriolets Ć  deux roues, tapissĆ©s de cuir fauve au dedans, suspendus sur des ressorts Ć  pompe, et n'ayant que deux places, l'une pour le courrier, l'autre pour le voyageur. Les roues Ć©taient armĆ©es de ces longs moyeux offensifs qui tiennent les autres voitures Ć  distance et qu'on voit encore sur les routes d'Allemagne. Le coffre aux dĆ©pĆŖches, immense boĆ®te oblongue, Ć©tait placĆ© derriĆØre le cabriolet et faisait corps avec lui. Ce coffre Ć©tait peint en noir et le cabriolet en jaune. Ces voitures, auxquelles rien ne ressemble aujourd'hui, avaient je ne sais quoi de difforme et de bossu, et, quand on les voyait passer de loin et ramper dans quelque route Ć  l'horizon, elles ressemblaient Ć  ces insectes qu'on appelle, je crois, termites, et qui, avec un petit corsage, traĆ®nent un gros arriĆØre-train. Elles allaient, du reste, fort vite. La malle partie d'Arras toutes les nuits Ć  une heure, aprĆØs le passage du courrier de Paris, arrivait Ć  Montreuil-sur-mer un peu avant cinq heures du matin. Cette nuit-lĆ , la malle qui descendait Ć  Montreuil-sur-mer par la route de Hesdin accrocha, au tournant d'une rue, au moment où elle entrait dans la ville, un petit tilbury attelĆ© d'un cheval blanc, qui venait en sens inverse et dans lequel il n'y avait qu'une personne, un homme enveloppĆ© d'un manteau. La roue du tilbury reƧut un choc assez rude. Le courrier cria Ć  cet homme d'arrĆŖter, mais le voyageur n'Ć©couta pas, et continua sa route au grand trot. --VoilĆ  un homme diablement pressĆ©! dit le courrier. L'homme qui se hĆ¢tait ainsi, c'est celui que nous venons de voir se dĆ©battre dans des convulsions dignes Ć  coup sĆ»r de pitiĆ©. Où allait-il? Il n'eĆ»t pu le dire. Pourquoi se hĆ¢tait-il? Il ne savait. Il allait au hasard devant lui. Où? ƀ Arras sans doute; mais il allait peut-ĆŖtre ailleurs aussi. Par moments il le sentait, et il tressaillait. Il s'enfonƧait dans cette nuit comme dans un gouffre. Quelque chose le poussait, quelque chose l'attirait. Ce qui se passait en lui, personne ne pourrait le dire, tous le comprendront. Quel homme n'est entrĆ©, au moins une fois en sa vie, dans cette obscure caverne de l'inconnu? Du reste il n'avait rien rĆ©solu, rien dĆ©cidĆ©, rien arrĆŖtĆ©, rien fait. Aucun des actes de sa conscience n'avait Ć©tĆ© dĆ©finitif. Il Ć©tait plus que jamais comme au premier moment. Pourquoi allait-il Ć  Arras? Il se rĆ©pĆ©tait ce qu'il s'Ć©tait dĆ©jĆ  dit en retenant le cabriolet de Scaufflaire,--que, quel que dĆ»t ĆŖtre le rĆ©sultat, il n'y avait aucun inconvĆ©nient Ć  voir de ses yeux, Ć  juger les choses par lui-mĆŖme;--que cela mĆŖme Ć©tait prudent, qu'il fallait savoir ce qui se passerait; qu'on ne pouvait rien dĆ©cider sans avoir observĆ© et scrutĆ©;--que de loin on se faisait des montagnes de tout; qu'au bout du compte, lorsqu'il aurait vu ce Champmathieu, quelque misĆ©rable, sa conscience serait probablement fort soulagĆ©e de le laisser aller au bagne Ć  sa place;--qu'Ć  la vĆ©ritĆ© il y aurait lĆ  Javert, et ce Brevet, ce Chenildieu, ce Cochepaille, anciens forƧats qui l'avaient connu; mais qu'Ć  coup sĆ»r ils ne le reconnaĆ®traient pas;--bah! quelle idĆ©e!--que Javert en Ć©tait Ć  cent lieues;--que toutes les conjectures et toutes les suppositions Ć©taient fixĆ©es sur ce Champmathieu, et que rien n'est entĆŖtĆ© comme les suppositions et les conjectures;--qu'il n'y avait donc aucun danger. Que sans doute c'Ć©tait un moment noir, mais qu'il en sortirait;--qu'aprĆØs tout il tenait sa destinĆ©e, si mauvaise qu'elle voulĆ»t ĆŖtre, dans sa main;--qu'il en Ć©tait le maĆ®tre. Il se cramponnait Ć  cette pensĆ©e. Au fond, pour tout dire, il eĆ»t mieux aimĆ© ne point aller Ć  Arras. Cependant il y allait. Tout en songeant, il fouettait le cheval, lequel trottait de ce bon trot rĆ©glĆ© et sĆ»r qui fait deux lieues et demie Ć  l'heure. ƀ mesure que le cabriolet avanƧait, il sentait quelque chose en lui qui reculait. Au point du jour il Ć©tait en rase campagne; la ville de Montreuil-sur-mer Ć©tait assez loin derriĆØre lui. Il regarda l'horizon blanchir; il regarda, sans les voir, passer devant ses yeux toutes les froides figures d'une aube d'hiver. Le matin a ses spectres comme le soir. Il ne les voyait pas, mais, Ć  son insu, et par une sorte de pĆ©nĆ©tration presque physique, ces noires silhouettes d'arbres et de collines ajoutaient Ć  l'Ć©tat violent de son Ć¢me je ne sais quoi de morne et de sinistre. Chaque fois qu'il passait devant une de ces maisons isolĆ©es qui cĆ“toient parfois les routes, il se disait: il y a pourtant lĆ -dedans des gens qui dorment! Le trot du cheval, les grelots du harnais, les roues sur le pavĆ©, faisaient un bruit doux et monotone. Ces choses-lĆ  sont charmantes quand on est joyeux et lugubres quand on est triste. Il Ć©tait grand jour lorsqu'il arriva Ć  Hesdin. Il s'arrĆŖta devant une auberge pour laisser souffler le cheval et lui faire donner l'avoine. Ce cheval Ć©tait, comme l'avait dit Scaufflaire, de cette petite race du Boulonnais qui a trop de tĆŖte, trop de ventre et pas assez d'encolure, mais qui a le poitrail ouvert, la croupe large, la jambe sĆØche et fine et le pied solide; race laide, mais robuste et saine. L'excellente bĆŖte avait fait cinq lieues en deux heures et n'avait pas une goutte de sueur sur la croupe. Il n'Ć©tait pas descendu du tilbury. Le garƧon d'Ć©curie qui apportait l'avoine se baissa tout Ć  coup et examina la roue de gauche. --Allez-vous loin comme cela? dit cet homme. Il rĆ©pondit, presque sans sortir de sa rĆŖverie: --Pourquoi? --Venez-vous de loin? reprit le garƧon. --De cinq lieues d'ici. --Ah! --Pourquoi dites-vous: ah? Le garƧon se pencha de nouveau, resta un moment silencieux, l'oeil fixĆ© sur la roue, puis se redressa en disant: --C'est que voilĆ  une roue qui vient de faire cinq lieues, c'est possible, mais qui Ć  coup sĆ»r ne fera pas maintenant un quart de lieue. Il sauta Ć  bas du tilbury. --Que dites-vous lĆ , mon ami? --Je dis que c'est un miracle que vous ayez fait cinq lieues sans rouler, vous et votre cheval, dans quelque fossĆ© de la grande route. Regardez plutĆ“t. La roue en effet Ć©tait gravement endommagĆ©e. Le choc de la malle-poste avait fendu deux rayons et labourĆ© le moyeu dont l'Ć©crou ne tenait plus. --Mon ami, dit-il au garƧon d'Ć©curie, il y a un charron ici? --Sans doute, monsieur. --Rendez-moi le service de l'aller chercher. --Il est lĆ , Ć  deux pas. HĆ©! maĆ®tre Bourgaillard! MaĆ®tre Bourgaillard, le charron, Ć©tait sur le seuil de sa porte. Il vint examiner la roue et fit la grimace d'un chirurgien qui considĆØre une jambe cassĆ©e. --Pouvez-vous raccommoder cette roue sur-le-champ? --Oui, monsieur. --Quand pourrai-je repartir? --Demain. --Demain! --Il y a une grande journĆ©e d'ouvrage. Est-ce que monsieur est pressĆ©? --TrĆØs pressĆ©. Il faut que je reparte dans une heure au plus tard. --Impossible, monsieur. --Je payerai tout ce qu'on voudra. --Impossible. --Eh bien! dans deux heures. --Impossible pour aujourd'hui. Il faut refaire deux rais et un moyeu. Monsieur ne pourra repartir avant demain. --L'affaire que j'ai ne peut attendre Ć  demain. Si, au lieu de raccommoder cette roue, on la remplaƧait? --Comment cela? --Vous ĆŖtes charron? --Sans doute, monsieur. --Est-ce que vous n'auriez pas une roue Ć  me vendre? Je pourrais repartir tout de suite. --Une roue de rechange? --Oui. --Je n'ai pas une roue toute faite pour votre cabriolet. Deux roues font la paire. Deux roues ne vont pas ensemble au hasard. --En ce cas, vendez-moi une paire de roues. --Monsieur, toutes les roues ne vont pas Ć  tous les essieux. --Essayez toujours. --C'est inutile, monsieur. Je n'ai Ć  vendre que des roues de charrette. Nous sommes un petit pays ici. --Auriez-vous un cabriolet Ć  me louer? Le maĆ®tre charron, du premier coup d'oeil, avait reconnu que le tilbury Ć©tait une voiture de louage. Il haussa les Ć©paules. --Vous les arrangez bien, les cabriolets qu'on vous loue! j'en aurais un que je ne vous le louerais pas. --Eh bien, Ć  me vendre? --Je n'en ai pas. --Quoi! pas une carriole? Je ne suis pas difficile, comme vous voyez. --Nous sommes un petit pays. J'ai bien lĆ  sous la remise, ajouta le charron, une vieille calĆØche qui est Ć  un bourgeois de la ville qui me l'a donnĆ©e en garde et qui s'en sert tous les trente-six du mois. Je vous la louerais bien, qu'est-ce que cela me fait? mais il ne faudrait pas que le bourgeois la vĆ®t passer; et puis, c'est une calĆØche, il faudrait deux chevaux. --Je prendrai des chevaux de poste. --Où va monsieur? --ƀ Arras. --Et monsieur veut arriver aujourd'hui? --Mais oui. --En prenant des chevaux de poste? --Pourquoi pas? --Est-il Ć©gal Ć  monsieur d'arriver cette nuit Ć  quatre heures du matin? --Non certes. --C'est que, voyez-vous bien, il y a une chose Ć  dire, en prenant des chevaux de poste.... --Monsieur a son passeport? --Oui. --Eh bien, en prenant des chevaux de poste, monsieur n'arrivera pas Ć  Arras avant demain. Nous sommes un chemin de traverse. Les relais sont mal servis, les chevaux sont aux champs. C'est la saison des grandes charrues qui commence, il faut de forts attelages, et l'on prend les chevaux partout, Ć  la poste comme ailleurs. Monsieur attendra au moins trois ou quatre heures Ć  chaque relais. Et puis on va au pas. Il y a beaucoup de cĆ“tes Ć  monter. --Allons, j'irai Ć  cheval. DĆ©telez le cabriolet. On me vendra bien une selle dans le pays. --Sans doute. Mais ce cheval-ci endure-t-il la selle? --C'est vrai, vous m'y faites penser. Il ne l'endure pas. --Alors.... --Mais je trouverai bien dans le village un cheval Ć  louer? --Un cheval pour aller Ć  Arras d'une traite! --Oui. --Il faudrait un cheval comme on n'en a pas dans nos endroits. Il faudrait l'acheter d'abord, car on ne vous connaĆ®t pas. Mais ni Ć  vendre ni Ć  louer, ni pour cinq cents francs, ni pour mille, vous ne le trouveriez pas! --Comment faire? --Le mieux, lĆ , en honnĆŖte homme, c'est que je raccommode la roue et que vous remettiez votre voyage Ć  demain. --Demain il sera trop tard. --Dame! --N'y a-t-il pas la malle-poste qui va Ć  Arras? Quand passe-t-elle? --La nuit prochaine. Les deux malles font le service la nuit, celle qui monte comme celle qui descend. --Comment! il vous faut une journĆ©e pour raccommoder cette roue? --Une journĆ©e, et une bonne! --En mettant deux ouvriers? --En en mettant dix! --Si on liait les rayons avec des cordes? --Les rayons, oui; le moyeu, non. Et puis la jante aussi est en mauvais Ć©tat. --Y a-t-il un loueur de voitures dans la ville? --Non. --Y a-t-il un autre charron? Le garƧon d'Ć©curie et le maĆ®tre charron rĆ©pondirent en mĆŖme temps en hochant la tĆŖte. --Non. Il sentit une immense joie. Il Ć©tait Ć©vident que la providence s'en mĆŖlait. C'Ć©tait elle qui avait brisĆ© la roue du tilbury et qui l'arrĆŖtait en route. Il ne s'Ć©tait pas rendu Ć  cette espĆØce de premiĆØre sommation; il venait de faire tous les efforts possibles pour continuer son voyage; il avait loyalement et scrupuleusement Ć©puisĆ© tous les moyens; il n'avait reculĆ© ni devant la saison, ni devant la fatigue, ni devant la dĆ©pense; il n'avait rien Ć  se reprocher. S'il n'allait pas plus loin, cela ne le regardait plus. Ce n'Ć©tait plus sa faute, c'Ć©tait, non le fait de sa conscience, mais le fait de la providence. Il respira. Il respira librement et Ć  pleine poitrine pour la premiĆØre fois depuis la visite de Javert. Il lui semblait que le poignet de fer qui lui serrait le coeur depuis vingt heures venait de le lĆ¢cher. Il lui paraissait que maintenant Dieu Ć©tait pour lui, et se dĆ©clarait. Il se dit qu'il avait fait tout ce qu'il pouvait, et qu'Ć  prĆ©sent il n'avait qu'Ć  revenir sur ses pas, tranquillement. Si sa conversation avec le charron eĆ»t eu lieu dans une chambre de l'auberge, elle n'eĆ»t point eu de tĆ©moins, personne ne l'eĆ»t entendue, les choses en fussent restĆ©es lĆ , et il est probable que nous n'aurions eu Ć  raconter aucun des Ć©vĆ©nements qu'on va lire; mais cette conversation s'Ć©tait faite dans la rue. Tout colloque dans la rue produit inĆ©vitablement un cercle. Il y a toujours des gens qui ne demandent qu'Ć  ĆŖtre spectateurs. Pendant qu'il questionnait le charron, quelques allants et venants s'Ć©taient arrĆŖtĆ©s autour d'eux. AprĆØs avoir Ć©coutĆ© pendant quelques minutes, un jeune garƧon, auquel personne n'avait pris garde, s'Ć©tait dĆ©tachĆ© du groupe en courant. Au moment où le voyageur, aprĆØs la dĆ©libĆ©ration intĆ©rieure que nous venons d'indiquer, prenait la rĆ©solution de rebrousser chemin, cet enfant revenait. Il Ć©tait accompagnĆ© d'une vieille femme. --Monsieur, dit la femme, mon garƧon me dit que vous avez envie de louer un cabriolet. Cette simple parole, prononcĆ©e par une vieille femme que conduisait un enfant, lui fit ruisseler la sueur dans les reins. Il crut voir la main qui l'avait lĆ¢chĆ© reparaĆ®tre dans l'ombre derriĆØre lui, toute prĆŖte Ć  le reprendre. Il rĆ©pondit: --Oui, bonne femme, je cherche un cabriolet Ć  louer. Et il se hĆ¢ta d'ajouter: --Mais il n'y en a pas dans le pays. --Si fait, dit la vieille. --Où Ƨa donc? reprit le charron. --Chez moi, rĆ©pliqua la vieille. Il tressaillit. La main fatale l'avait ressaisi. La vieille avait en effet sous un hangar une faƧon de carriole en osier. Le charron et le garƧon d'auberge, dĆ©solĆ©s que le voyageur leur Ć©chappĆ¢t, intervinrent. --C'Ć©tait une affreuse guimbarde,--cela Ć©tait posĆ© Ć  cru sur l'essieu,--il est vrai que les banquettes Ć©taient suspendues Ć  l'intĆ©rieur avec des laniĆØres de cuir,--il pleuvait dedans,--les roues Ć©taient rouillĆ©es et rongĆ©es d'humiditĆ©,--cela n'irait pas beaucoup plus loin que le tilbury,--une vraie patache!--Ce monsieur aurait bien tort de s'y embarquer,--etc., etc. Tout cela Ć©tait vrai, mais cette guimbarde, cette patache, cette chose, quelle qu'elle fĆ»t, roulait sur ses deux roues et pouvait aller Ć  Arras. Il paya ce qu'on voulut, laissa le tilbury Ć  rĆ©parer chez le charron pour l'y retrouver Ć  son retour, fit atteler le cheval blanc Ć  la carriole, y monta, et reprit la route qu'il suivait depuis le matin. Au moment où la carriole s'Ć©branla, il s'avoua qu'il avait eu l'instant d'auparavant une certaine joie de songer qu'il n'irait point où il allait. Il examina cette joie avec une sorte de colĆØre et la trouva absurde. Pourquoi de la joie Ć  revenir en arriĆØre? AprĆØs tout, il faisait ce voyage librement. Personne ne l'y forƧait. Et, certainement, rien n'arriverait que ce qu'il voudrait bien. Comme il sortait de Hesdin, il entendit une voix qui lui criait: arrĆŖtez! arrĆŖtez! Il arrĆŖta la carriole d'un mouvement vif dans lequel il y avait encore je ne sais quoi de fĆ©brile et de convulsif qui ressemblait Ć  de l'espĆ©rance. C'Ć©tait le petit garƧon de la vieille. --Monsieur, dit-il, c'est moi qui vous ai procurĆ© la carriole. --Eh bien! --Vous ne m'avez rien donnĆ©. Lui qui donnait Ć  tous et si facilement, il trouva cette prĆ©tention exorbitante et presque odieuse. --Ah! c'est toi, drĆ“le? dit-il, tu n'auras rien! Il fouetta le cheval et repartit au grand trot. Il avait perdu beaucoup de temps Ć  Hesdin, il eĆ»t voulu le rattraper. Le petit cheval Ć©tait courageux et tirait comme deux; mais on Ć©tait au mois de fĆ©vrier, il avait plu, les routes Ć©taient mauvaises. Et puis, ce n'Ć©tait plus le tilbury. La carriole Ć©tait dure et trĆØs lourde. Avec cela force montĆ©es. Il mit prĆØs de quatre heures pour aller de Hesdin Ć  Saint-Pol. Quatre heures pour cinq lieues. ƀ Saint-Pol il dĆ©tela Ć  la premiĆØre auberge venue, et fit mener le cheval Ć  l'Ć©curie. Comme il l'avait promis Ć  Scaufflaire, il se tint prĆØs du rĆ¢telier pendant que le cheval mangeait. Il songeait Ć  des choses tristes et confuses. La femme de l'aubergiste entre dans l'Ć©curie. --Est-ce que monsieur ne veut pas dĆ©jeuner? --Tiens, c'est vrai, dit-il, j'ai mĆŖme bon appĆ©tit. Il suivit cette femme qui avait une figure fraĆ®che et rĆ©jouie. Elle le conduisit dans une salle basse où il y avait des tables ayant pour nappes des toiles cirĆ©es. --DĆ©pĆŖchez-vous, reprit-il, il faut que je reparte. Je suis pressĆ©. Une grosse servante flamande mit son couvert en toute hĆ¢te. Il regardait cette fille avec un sentiment de bien-ĆŖtre. --C'est lĆ  ce que j'avais, pensa-t-il. Je n'avais pas dĆ©jeunĆ©. On le servit. Il se jeta sur le pain, mordit une bouchĆ©e, puis le reposa lentement sur la table et n'y toucha plus. Un routier mangeait Ć  une autre table. Il dit Ć  cet homme: --Pourquoi leur pain est-il donc si amer? Le routier Ć©tait allemand et n'entendit pas. Il retourna dans l'Ć©curie prĆØs du cheval. Une heure aprĆØs, il avait quittĆ© Saint-Pol et se dirigeait vers Tinques qui n'est qu'Ć  cinq lieues d'Arras. Que faisait-il pendant ce trajet? ƀ quoi pensait-il? Comme le matin, il regardait passer les arbres, les toits de chaume, les champs cultivĆ©s, et les Ć©vanouissements du paysage qui se disloque Ć  chaque coude du chemin. C'est lĆ  une contemplation qui suffit quelquefois Ć  l'Ć¢me et qui la dispense presque de penser. Voir mille objets pour la premiĆØre et pour la derniĆØre fois, quoi de plus mĆ©lancolique et de plus profond! Voyager, c'est naĆ®tre et mourir Ć  chaque instant. Peut-ĆŖtre, dans la rĆ©gion la plus vague de son esprit, faisait-il des rapprochements entre ces horizons changeants et l'existence humaine. Toutes les choses de la vie sont perpĆ©tuellement en fuite devant nous. Les obscurcissements et les clartĆ©s s'entremĆŖlent: aprĆØs un Ć©blouissement, une Ć©clipse; on regarde, on se hĆ¢te, on tend les mains pour saisir ce qui passe; chaque Ć©vĆ©nement est un tournant de la route; et tout Ć  coup on est vieux. On sent comme une secousse, tout est noir, on distingue une porte obscure, ce sombre cheval de la vie qui vous traĆ®nait s'arrĆŖte, et l'on voit quelqu'un de voilĆ© et d'inconnu qui le dĆ©telle dans les tĆ©nĆØbres. Le crĆ©puscule tombait au moment où des enfants qui sortaient de l'Ć©cole regardĆØrent ce voyageur entrer dans Tinques. Il est vrai qu'on Ć©tait encore aux jours courts de l'annĆ©e. Il ne s'arrĆŖta pas Ć  Tinques. Comme il dĆ©bouchait du village, un cantonnier qui empierrait la route dressa la tĆŖte et dit: --VoilĆ  un cheval bien fatiguĆ©. La pauvre bĆŖte en effet n'allait plus qu'au pas. --Est-ce que vous allez Ć  Arras? ajouta le cantonnier. --Oui. --Si vous allez de ce train, vous n'y arriverez pas de bonne heure. Il arrĆŖta le cheval et demanda au cantonnier: --Combien y a-t-il encore d'ici Ć  Arras? --PrĆØs de sept grandes lieues. --Comment cela? le livre de poste ne marque que cinq lieues et un quart. --Ah! reprit le cantonnier, vous ne savez donc pas que la route est en rĆ©paration? Vous allez la trouver coupĆ©e Ć  un quart d'heure d'ici. Pas moyen d'aller plus loin. --Vraiment. --Vous prendrez Ć  gauche, le chemin qui va Ć  Carency, vous passerez la riviĆØre; et, quand vous serez Ć  Camblin, vous tournerez Ć  droite; c'est la route de Mont-Saint-Ɖloy qui va Ć  Arras. --Mais voilĆ  la nuit, je me perdrai. --Vous n'ĆŖtes pas du pays? --Non. --Avec Ƨa, c'est tout chemins de traverse. Tenez, Monsieur, reprit le cantonnier, voulez-vous que je vous donne un conseil? Votre cheval est las, rentrez dans Tinques. Il y a une bonne auberge. Couchez-y. Vous irez demain Ć  Arras. --Il faut que j'y sois ce soir. --C'est diffĆ©rent. Alors allez tout de mĆŖme Ć  cette auberge et prenez-y un cheval de renfort. Le garƧon du cheval vous guidera dans la traverse. Il suivit le conseil du cantonnier, rebroussa chemin, et une demi-heure aprĆØs il repassait au mĆŖme endroit, mais au grand trot, avec un bon cheval de renfort. Un garƧon d'Ć©curie qui s'intitulait postillon Ć©tait assis sur le brancard de la carriole. Cependant il sentait qu'il perdait du temps. Il faisait tout Ć  fait nuit. Ils s'engagĆØrent dans la traverse. La route devint affreuse. La carriole tombait d'une orniĆØre dans l'autre. Il dit au postillon: --Toujours au trot, et double pourboire. Dans un cahot le palonnier cassa. --Monsieur, dit le postillon, voilĆ  le palonnier cassĆ©, je ne sais plus comment atteler mon cheval, cette route-ci est bien mauvaise la nuit; si vous vouliez revenir coucher Ć  Tinques, nous pourrions ĆŖtre demain matin de bonne heure Ć  Arras. Il rĆ©pondit: --As-tu un bout de corde et un couteau? --Oui, monsieur. Il coupa une branche d'arbre et en fit un palonnier. Ce fut encore une perte de vingt minutes; mais ils repartirent au galop. La plaine Ć©tait tĆ©nĆ©breuse. Des brouillards bas, courts et noirs rampaient sur les collines et s'en arrachaient comme des fumĆ©es. Il y avait des lueurs blanchĆ¢tres dans les nuages. Un grand vent qui venait de la mer faisait dans tous les coins de l'horizon le bruit de quelqu'un qui remue des meubles. Tout ce qu'on entrevoyait avait des attitudes de terreur. Que de choses frissonnent sous ces vastes souffles de la nuit! Le froid le pĆ©nĆ©trait. Il n'avait pas mangĆ© depuis la veille. Il se rappelait vaguement son autre course nocturne dans la grande plaine aux environs de Digne. Il y avait huit ans; et cela lui semblait hier. Une heure sonna Ć  quelque clocher lointain. Il demanda au garƧon: --Quelle est cette heure? --Sept heures, monsieur. Nous serons Ć  Arras Ć  huit. Nous n'avons plus que trois lieues. En ce moment il fit pour la premiĆØre fois cette rĆ©flexion--en trouvant Ć©trange qu'elle ne lui fĆ»t pas venue plus tĆ“t--que c'Ć©tait peut-ĆŖtre inutile, toute la peine qu'il prenait; qu'il ne savait seulement pas l'heure du procĆØs; qu'il aurait dĆ» au moins s'en informer; qu'il Ć©tait extravagant d'aller ainsi devant soi sans savoir si cela servirait Ć  quelque chose.--Puis il Ć©baucha quelques calculs dans son esprit:--qu'ordinairement les sĆ©ances des cours d'assises commenƧaient Ć  neuf heures du matin;--que cela ne devait pas ĆŖtre long, cette affaire-lĆ ;--que le vol de pommes, ce serait trĆØs court;--qu'il n'y aurait plus ensuite qu'une question d'identitĆ©;--quatre ou cinq dĆ©positions, peu de chose Ć  dire pour les avocats;--qu'il allait arriver lorsque tout serait fini! Le postillon fouettait les chevaux. Ils avaient passĆ© la riviĆØre et laissĆ© derriĆØre eux Mont-Saint-Ɖloy. La nuit devenait de plus en plus profonde. Chapitre VI La soeur Simplice mise Ć  l'Ć©preuve Cependant, en ce moment-lĆ  mĆŖme, Fantine Ć©tait dans la joie. Elle avait passĆ© une trĆØs mauvaise nuit. Toux affreuse, redoublement de fiĆØvre; elle avait eu des songes. Le matin, Ć  la visite du mĆ©decin, elle dĆ©lirait. Il avait eu l'air alarmĆ© et avait recommandĆ© qu'on le prĆ©vĆ®nt dĆØs que M. Madeleine viendrait. Toute la matinĆ©e elle fut morne, parla peu, et fit des plis Ć  ses draps en murmurant Ć  voix basse des calculs qui avaient l'air d'ĆŖtre des calculs de distances. Ses yeux Ć©taient caves et fixes. Ils paraissaient presque Ć©teints, et puis, par moments, ils se rallumaient et resplendissaient comme des Ć©toiles. Il semble qu'aux approches d'une certaine heure sombre, la clartĆ© du ciel emplisse ceux que quitte la clartĆ© de la terre. Chaque fois que la soeur Simplice lui demandait comment elle se trouvait, elle rĆ©pondait invariablement: --Bien. Je voudrais voir monsieur Madeleine. Quelques mois auparavant, Ć  ce moment où Fantine venait de perdre sa derniĆØre pudeur, sa derniĆØre honte et sa derniĆØre joie, elle Ć©tait l'ombre d'elle-mĆŖme; maintenant elle en Ć©tait le spectre. Le mal physique avait complĆ©tĆ© l'oeuvre du mal moral. Cette crĆ©ature de vingt-cinq ans avait le front ridĆ©, les joues flasques, les narines pincĆ©es, les dents dĆ©chaussĆ©es, le teint plombĆ©, le cou osseux, les clavicules saillantes, les membres chĆ©tifs, la peau terreuse, et ses cheveux blonds poussaient mĆŖlĆ©s de cheveux gris. HĆ©las! comme la maladie improvise la vieillesse! ƀ midi, le mĆ©decin revint, il fit quelques prescriptions, s'informa si M. le maire avait paru Ć  l'infirmerie, et branla la tĆŖte. M. Madeleine venait d'habitude Ć  trois heures voir la malade. Comme l'exactitude Ć©tait de la bontĆ©, il Ć©tait exact. Vers deux heures et demie, Fantine commenƧa Ć  s'agiter. Dans l'espace de vingt minutes, elle demanda plus de dix fois Ć  la religieuse: --Ma soeur, quelle heure est-il? Trois heures sonnĆØrent. Au troisiĆØme coup, Fantine se dressa sur son sĆ©ant, elle qui d'ordinaire pouvait Ć  peine remuer dans son lit; elle joignit dans une sorte d'Ć©treinte convulsive ses deux mains dĆ©charnĆ©es et jaunes, et la religieuse entendit sortir de sa poitrine un de ces soupirs profonds qui semblent soulever un accablement. Puis Fantine se tourna et regarda la porte. Personne n'entra; la porte ne s'ouvrit point. Elle resta ainsi un quart d'heure, l'oeil attachĆ© sur la porte, immobile et comme retenant son haleine. La soeur n'osait lui parler. L'Ć©glise sonna trois heures un quart. Fantine se laissa retomber sur l'oreiller. Elle ne dit rien et se remit Ć  faire des plis Ć  son drap. La demi-heure passa, puis l'heure. Personne ne vint. Chaque fois que l'horloge sonnait, Fantine se dressait et regardait du cĆ“tĆ© de la porte, puis elle retombait. On voyait clairement sa pensĆ©e, mais elle ne prononƧait aucun nom, elle ne se plaignait pas, elle n'accusait pas. Seulement elle toussait d'une faƧon lugubre. On eĆ»t dit que quelque chose d'obscur s'abaissait sur elle. Elle Ć©tait livide et avait les lĆØvres bleues. Elle souriait par moments. Cinq heures sonnĆØrent. Alors la soeur l'entendit qui disait trĆØs bas et doucement: --Mais puisque je m'en vais demain, il a tort de ne pas venir aujourd'hui! La soeur Simplice elle-mĆŖme Ć©tait surprise du retard de M. Madeleine. Cependant Fantine regardait le ciel de son lit. Elle avait l'air de chercher Ć  se rappeler quelque chose. Tout Ć  coup elle se mit Ć  chanter d'une voix faible comme un souffle. La religieuse Ć©couta. Voici ce que Fantine chantait: _Nous achĆØterons de bien belles choses_ _En nous promenant le long des faubourgs._ _Les bleuets sont bleus, les roses sont roses,_ _Les bleuets sont bleus, j'aime mes amours._ _La vierge Marie auprĆØs de mon poĆŖle_ _Est venue hier en manteau brodĆ©,_ _Et m'a dit:--Voici, cachĆ© sous mon voile,_ _Le petit qu'un jour tu m'as demandĆ©._ _Courez Ć  la ville, ayez de la toile,_ _Achetez du fil, achetez un dĆ©._ _Nous achĆØterons de bien belles choses_ _En nous promenant le long des faubourgs._ _Bonne sainte Vierge, auprĆØs de mon poĆŖle_ _J'ai mis un berceau de rubans ornĆ©_ _Dieu me donnerait sa plus belle Ć©toile,_ _J'aime mieux l'enfant que tu m'as donnĆ©._ --_Madame, que faire avec cette toile?_ --_Faites un trousseau pour mon nouveau-nĆ©._ _Les bleuets sont bleus, les roses sont roses,_ _Les bleuets sont bleus, j'aime mes amours._ --_Lavez cette toile._ --_Où?_--_Dans la riviĆØre._ _Faites-en, sans rien gĆ¢ter ni salir,_ _Une belle jupe avec sa brassiĆØre_ _Que je veux broder et de fleurs emplir._ --_L'enfant n'est plus lĆ , madame, qu'en faire?_ --_Faites-en un drap pour m'ensevelir._ _Nous achĆØterons de bien belles choses_ _En nous promenant le long des faubourgs._ _Les bleuets sont bleus, les roses sont roses,_ _Les bleuets sont bleus, j'aime mes amours._ Cette chanson Ć©tait une vieille romance de berceuse avec laquelle autrefois elle endormait sa petite Cosette, et qui ne s'Ć©tait pas offerte Ć  son esprit depuis cinq ans qu'elle n'avait plus son enfant. Elle chantait cela d'une voix si triste et sur un air si doux que c'Ć©tait Ć  faire pleurer, mĆŖme une religieuse. La soeur, habituĆ©e aux choses austĆØres, sentit une larme lui venir. L'horloge sonna six heures. Fantine ne parut pas entendre. Elle semblait ne plus faire attention Ć  aucune chose autour d'elle. La soeur Simplice envoya une fille de service s'informer prĆØs de la portiĆØre de la fabrique si M. le maire Ć©tait rentrĆ© et s'il ne monterait pas bientĆ“t Ć  l'infirmerie. La fille revint au bout de quelques minutes. Fantine Ć©tait toujours immobile et paraissait attentive Ć  des idĆ©es qu'elle avait. La servante raconta trĆØs bas Ć  la soeur Simplice que M. le maire Ć©tait parti le matin mĆŖme avant six heures dans un petit tilbury attelĆ© d'un cheval blanc, par le froid qu'il faisait, qu'il Ć©tait parti seul, pas mĆŖme de cocher, qu'on ne savait pas le chemin qu'il avait pris, que des personnes disaient l'avoir vu tourner par la route d'Arras, que d'autres assuraient l'avoir rencontrĆ© sur la route de Paris. Qu'en s'en allant il avait Ć©tĆ© comme Ć  l'ordinaire trĆØs doux, et qu'il avait seulement dit Ć  la portiĆØre qu'on ne l'attendĆ®t pas cette nuit. Pendant que les deux femmes, le dos tournĆ© au lit de la Fantine, chuchotaient, la soeur questionnant, la servante conjecturant, la Fantine, avec cette vivacitĆ© fĆ©brile de certaines maladies organiques qui mĆŖle les mouvements libres de la santĆ© Ć  l'effrayante maigreur de la mort, s'Ć©tait mise Ć  genoux sur son lit, ses deux poings crispĆ©s appuyĆ©s sur le traversin, et, la tĆŖte passĆ©e par l'intervalle des rideaux, elle Ć©coutait. Tout Ć  coup elle cria: --Vous parlez lĆ  de monsieur Madeleine! pourquoi parlez-vous tout bas? Qu'est-ce qu'il fait? Pourquoi ne vient-il pas? Sa voix Ć©tait si brusque et si rauque que les deux femmes crurent entendre une voix d'homme; elles se retournĆØrent effrayĆ©es. --RĆ©pondez donc! cria Fantine. La servante balbutia: --La portiĆØre m'a dit qu'il ne pourrait pas venir aujourd'hui. --Mon enfant, dit la soeur, tenez-vous tranquille, recouchez-vous. Fantine, sans changer d'attitude, reprit d'une voix haute et avec un accent tout Ć  la fois impĆ©rieux et dĆ©chirant: --Il ne pourra venir? Pourquoi cela? Vous savez la raison. Vous la chuchotiez lĆ  entre vous. Je veux la savoir. La servante se hĆ¢ta de dire Ć  l'oreille de la religieuse: --RĆ©pondez qu'il est occupĆ© au conseil municipal. La soeur Simplice rougit lĆ©gĆØrement; c'Ć©tait un mensonge que la servante lui proposait. D'un autre cĆ“tĆ© il lui semblait bien que dire la vĆ©ritĆ© Ć  la malade ce serait sans doute lui porter un coup terrible et que cela Ć©tait grave dans l'Ć©tat où Ć©tait Fantine. Cette rougeur dura peu. La soeur leva sur Fantine son oeil calme et triste, et dit: --Monsieur le maire est parti. Fantine se redressa et s'assit sur ses talons. Ses yeux Ć©tincelĆØrent. Une joie inouĆÆe rayonna sur cette physionomie douloureuse. --Parti! s'Ć©cria-t-elle. Il est allĆ© chercher Cosette! Puis elle tendit ses deux mains vers le ciel et tout son visage devint ineffable. Ses lĆØvres remuaient; elle priait Ć  voix basse. Quand sa priĆØre fut finie: --Ma soeur, dit-elle, je veux bien me recoucher, je vais faire tout ce qu'on voudra; tout Ć  l'heure j'ai Ć©tĆ© mĆ©chante, je vous demande pardon d'avoir parlĆ© si haut, c'est trĆØs mal de parler haut, je le sais bien, ma bonne soeur, mais voyez-vous, je suis trĆØs contente. Le bon Dieu est bon, monsieur Madeleine est bon, figurez-vous qu'il est allĆ© chercher ma petite Cosette Ć  Montfermeil. Elle se recoucha, aida la religieuse Ć  arranger l'oreiller et baisa une petite croix d'argent qu'elle avait au cou et que la soeur Simplice lui avait donnĆ©e. --Mon enfant, dit la soeur, tĆ¢chez de reposer maintenant, et ne parlez plus. Fantine prit dans ses mains moites la main de la soeur, qui souffrait de lui sentir cette sueur. --Il est parti ce matin pour aller Ć  Paris. Au fait il n'a pas mĆŖme besoin de passer par Paris. Montfermeil, c'est un peu Ć  gauche en venant. Vous rappelez-vous comme il me disait hier quand je lui parlais de Cosette: bientĆ“t, bientĆ“t? C'est une surprise qu'il veut me faire. Vous savez? il m'avait fait signer une lettre pour la reprendre aux ThĆ©nardier. Ils n'auront rien Ć  dire, pas vrai? Ils rendront Cosette. Puisqu'ils sont payĆ©s. Les autoritĆ©s ne souffriraient pas qu'on garde un enfant quand on est payĆ©. Ma soeur, ne me faites pas signe qu'il ne faut pas que je parle. Je suis extrĆŖmement heureuse, je vais trĆØs bien, je n'ai plus de mal du tout, je vais revoir Cosette, j'ai mĆŖme trĆØs faim. Il y a prĆØs de cinq ans que je ne l'ai vue. Vous ne vous figurez pas, vous, comme cela vous tient, les enfants! Et puis elle sera si gentille, vous verrez! Si vous saviez, elle a de si jolis petits doigts roses! D'abord elle aura de trĆØs belles mains. ƀ un an, elle avait des mains ridicules. Ainsi!--Elle doit ĆŖtre grande Ć  prĆ©sent. Cela vous a sept ans. C'est une demoiselle. Je l'appelle Cosette, mais elle s'appelle Euphrasie. Tenez, ce matin, je regardais de la poussiĆØre qui Ć©tait sur la cheminĆ©e et j'avais bien l'idĆ©e comme cela que je reverrais bientĆ“t Cosette. Mon Dieu! comme on a tort d'ĆŖtre des annĆ©es sans voir ses enfants! on devrait bien rĆ©flĆ©chir que la vie n'est pas Ć©ternelle! Oh! comme il est bon d'ĆŖtre parti, monsieur le maire! C'est vrai Ƨa, qu'il fait bien froid? avait-il son manteau au moins? Il sera ici demain, n'est-ce pas? Ce sera demain fĆŖte. Demain matin, ma soeur, vous me ferez penser Ć  mettre mon petit bonnet qui a de la dentelle. Montfermeil, c'est un pays. J'ai fait cette route-lĆ , Ć  pied, dans le temps. Il y a eu bien loin pour moi. Mais les diligences vont trĆØs vite! Il sera ici demain avec Cosette. Combien y a-t-il d'ici Montfermeil? La soeur, qui n'avait aucune idĆ©e des distances, rĆ©pondit: --Oh! je crois bien qu'il pourra ĆŖtre ici demain. --Demain! demain! dit Fantine, je verrai Cosette demain! Voyez-vous, bonne soeur du bon Dieu, je ne suis plus malade. Je suis folle. Je danserais, si on voulait. Quelqu'un qui l'eĆ»t vue un quart d'heure auparavant n'y eĆ»t rien compris. Elle Ć©tait maintenant toute rose, elle parlait d'une voix vive et naturelle, toute sa figure n'Ć©tait qu'un sourire. Par moments elle riait en se parlant tout bas. Joie de mĆØre, c'est presque joie d'enfant. --Eh bien, reprit la religieuse, vous voilĆ  heureuse, obĆ©issez-moi, ne parlez plus. Fantine posa sa tĆŖte sur l'oreiller et dit Ć  demi-voix: --Oui, recouche-toi, sois sage puisque tu vas avoir ton enfant. Elle a raison, soeur Simplice. Tous ceux qui sont ici ont raison. Et puis, sans bouger, sans remuer la tĆŖte, elle se mit Ć  regarder partout avec ses yeux tout grands ouverts et un air joyeux, et elle ne dit plus rien. La soeur referma ses rideaux, espĆ©rant qu'elle s'assoupirait. Entre sept et huit heures le mĆ©decin vint. N'entendant aucun bruit, il crut que Fantine dormait, entra doucement et s'approcha du lit sur la pointe du pied. Il entrouvrit les rideaux, et Ć  la lueur de la veilleuse il vit les grands yeux calmes de Fantine qui le regardaient. Elle lui dit: --Monsieur, n'est-ce pas, on me laissera la coucher Ć  cĆ“tĆ© de moi dans un petit lit? Le mĆ©decin crut qu'elle dĆ©lirait. Elle ajouta: --Regardez plutĆ“t, il y a juste de la place. Le mĆ©decin prit Ć  part la soeur Simplice qui lui expliqua la chose, que M. Madeleine Ć©tait absent pour un jour ou deux, et que, dans le doute, on n'avait pas cru devoir dĆ©tromper la malade qui croyait monsieur le maire parti pour Montfermeil; qu'il Ć©tait possible en somme qu'elle eĆ»t devinĆ© juste. Le mĆ©decin approuva. Il se rapprocha du lit de Fantine, qui reprit: --C'est que, voyez-vous, le matin, quand elle s'Ć©veillera, je lui dirai bonjour Ć  ce pauvre chat, et la nuit, moi qui ne dors pas, je l'entendrai dormir. Sa petite respiration si douce, cela me fera du bien. --Donnez-moi votre main, dit le mĆ©decin. Elle tendit son bras, et s'Ć©cria en riant. --Ah! tiens! au fait, c'est vrai, vous ne savez pas c'est que je suis guĆ©rie. Cosette arrive demain. Le mĆ©decin fut surpris. Elle Ć©tait mieux. L'oppression Ć©tait moindre. Le pouls avait repris de la force. Une sorte de vie survenue tout Ć  coup ranimait ce pauvre ĆŖtre Ć©puisĆ©. --Monsieur le docteur, reprit-elle, la soeur vous a-t-elle dit que monsieur le maire Ć©tait allĆ© chercher le chiffon? Le mĆ©decin recommanda le silence et qu'on Ć©vitĆ¢t toute Ć©motion pĆ©nible. Il prescrivit une infusion de quinquina pur, et, pour le cas où la fiĆØvre reprendrait dans la nuit, une potion calmante. En s'en allant, il dit Ć  la soeur: --Cela va mieux. Si le bonheur voulait qu'en effet monsieur le maire arrivĆ¢t demain avec l'enfant, qui sait? il y a des crises si Ć©tonnantes, on a vu de grandes joies arrĆŖter court des maladies; je sais bien que celle-ci est une maladie organique, et bien avancĆ©e, mais c'est un tel mystĆØre que tout cela! Nous la sauverions peut-ĆŖtre. Chapitre VII Le voyageur arrivĆ© prend ses prĆ©cautions pour repartir. Il Ć©tait prĆØs de huit heures du soir quand la carriole que nous avons laissĆ©e en route entra sous la porte cochĆØre de l'hĆ“tel de la Poste Ć  Arras. L'homme que nous avons suivi jusqu'Ć  ce moment en descendit, rĆ©pondit d'un air distrait aux empressements des gens de l'auberge, renvoya le cheval de renfort, et conduisit lui-mĆŖme le petit cheval blanc Ć  l'Ć©curie; puis il poussa la porte d'une salle de billard qui Ć©tait au rez-de-chaussĆ©e, s'y assit, et s'accouda sur une table. Il avait mis quatorze heures Ć  ce trajet qu'il comptait faire en six. Il se rendait la justice que ce n'Ć©tait pas sa faute; mais au fond il n'en Ć©tait pas fĆ¢chĆ©. La maĆ®tresse de l'hĆ“tel entra. --Monsieur couche-t-il? monsieur soupe-t-il? Il fit un signe de tĆŖte nĆ©gatif. --Le garƧon d'Ć©curie dit que le cheval de monsieur est bien fatiguĆ©! Ici il rompit le silence. --Est-ce que le cheval ne pourra pas repartir demain matin? --Oh! monsieur! il lui faut au moins deux jours de repos. Il demanda: --N'est-ce pas ici le bureau de poste? --Oui, monsieur. L'hĆ“tesse le mena Ć  ce bureau; il montra son passeport et s'informa s'il y avait moyen de revenir cette nuit mĆŖme Ć  Montreuil-sur-mer par la malle; la place Ć  cĆ“tĆ© du courrier Ć©tait justement vacante; il la retint et la paya. --Monsieur, dit le buraliste, ne manquez pas d'ĆŖtre ici pour partir Ć  une heure prĆ©cise du matin. Cela fait, il sortit de l'hĆ“tel et se mit Ć  marcher dans la ville. Il ne connaissait pas Arras, les rues Ć©taient obscures, et il allait au hasard. Cependant il semblait s'obstiner Ć  ne pas demander son chemin aux passants. Il traversa la petite riviĆØre Crinchon et se trouva dans un dĆ©dale de ruelles Ć©troites où il se perdit. Un bourgeois cheminait avec un falot. AprĆØs quelque hĆ©sitation, il prit le parti de s'adresser Ć  ce bourgeois, non sans avoir d'abord regardĆ© devant et derriĆØre lui, comme s'il craignait que quelqu'un n'entendit la question qu'il allait faire. --Monsieur, dit-il, le palais de justice, s'il vous plaĆ®t? --Vous n'ĆŖtes pas de la ville, monsieur? rĆ©pondit le bourgeois qui Ć©tait un assez vieux homme, eh bien, suivez-moi. Je vais prĆ©cisĆ©ment du cĆ“tĆ© du palais de justice, c'est-Ć -dire du cĆ“tĆ© de l'hĆ“tel de la prĆ©fecture. Car on rĆ©pare en ce moment le palais, et provisoirement les tribunaux ont leurs audiences Ć  la prĆ©fecture. --Est-ce lĆ , demanda-t-il, qu'on tient les assises? --Sans doute, monsieur. Voyez-vous, ce qui est la prĆ©fecture aujourd'hui Ć©tait l'Ć©vĆŖchĆ© avant la rĆ©volution. Monsieur de ConziĆ©, qui Ć©tait Ć©vĆŖque en quatre-vingt-deux, y a fait bĆ¢tir une grande salle. C'est dans cette grande salle qu'on juge. Chemin faisant, le bourgeois lui dit: --Si c'est un procĆØs que monsieur veut voir, il est un peu tard. Ordinairement les sĆ©ances finissent Ć  six heures. Cependant, comme ils arrivaient sur la grande place, le bourgeois lui montra quatre longues fenĆŖtres Ć©clairĆ©es sur la faƧade d'un vaste bĆ¢timent tĆ©nĆ©breux. --Ma foi, monsieur, vous arrivez Ć  temps, vous avez du bonheur. Voyez-vous ces quatre fenĆŖtres? c'est la cour d'assises. Il y a de la lumiĆØre. Donc ce n'est pas fini. L'affaire aura traĆ®nĆ© en longueur et on fait une audience du soir. Vous vous intĆ©ressez Ć  cette affaire? Est-ce que c'est un procĆØs criminel? Est-ce que vous ĆŖtes tĆ©moin? Il rĆ©pondit: --Je ne viens pour aucune affaire, j'ai seulement Ć  parler Ć  un avocat. --C'est diffĆ©rent, dit le bourgeois. Tenez, monsieur, voici la porte. Où est le factionnaire. Vous n'aurez qu'Ć  monter le grand escalier. Il se conforma aux indications du bourgeois, et, quelques minutes aprĆØs, il Ć©tait dans une salle où il y avait beaucoup de monde et où des groupes mĆŖlĆ©s d'avocats en robe chuchotaient ƧƠ et lĆ . C'est toujours une chose qui serre le coeur de voir ces attroupements d'hommes vĆŖtus de noir qui murmurent entre eux Ć  voix basse sur le seuil des chambres de justice. Il est rare que la charitĆ© et la pitiĆ© sortent de toutes ces paroles. Ce qui en sort le plus souvent, ce sont des condamnations faites d'avance. Tous ces groupes semblent Ć  l'observateur qui passe et qui rĆŖve autant de ruches sombres où des espĆØces d'esprits bourdonnants construisent en commun toutes sortes d'Ć©difices tĆ©nĆ©breux. Cette salle, spacieuse et Ć©clairĆ©e d'une seule lampe, Ć©tait une ancienne antichambre de l'Ć©vĆŖchĆ© et servait de salle des pas perdus. Une porte Ć  deux battants, fermĆ©e en ce moment, la sĆ©parait de la grande chambre où siĆ©geait la cour d'assises. L'obscuritĆ© Ć©tait telle qu'il ne craignit pas de s'adresser au premier avocat qu'il rencontra. --Monsieur, dit-il, où en est-on? --C'est fini, dit l'avocat. --Fini! Ce mot fut rĆ©pĆ©tĆ© d'un tel accent que l'avocat se retourna. --Pardon, monsieur, vous ĆŖtes peut-ĆŖtre un parent? --Non. Je ne connais personne ici. Et y a-t-il eu condamnation? --Sans doute. Cela n'Ć©tait guĆØre possible autrement. --Aux travaux forcĆ©s?... --ƀ perpĆ©tuitĆ©. Il reprit d'une voix tellement faible qu'on l'entendait Ć  peine: --L'identitĆ© a donc Ć©tĆ© constatĆ©e? --Quelle identitĆ©? rĆ©pondit l'avocat. Il n'y avait pas d'identitĆ© Ć  constater. L'affaire Ć©tait simple. Cette femme avait tuĆ© son enfant, l'infanticide a Ć©tĆ© prouvĆ©, le jury a Ć©cartĆ© la prĆ©mĆ©ditation, on l'a condamnĆ©e Ć  vie. --C'est donc une femme? dit-il. --Mais sĆ»rement. La fille Limosin. De quoi me parlez-vous donc? --De rien. Mais puisque c'est fini, comment se fait-il que la salle soit encore Ć©clairĆ©e? --C'est pour l'autre affaire qu'on a commencĆ©e il y a Ć  peu prĆØs deux heures. --Quelle autre affaire? --Oh! celle-lĆ  est claire aussi. C'est une espĆØce de gueux, un rĆ©cidiviste, un galĆ©rien, qui a volĆ©. Je ne sais plus trop son nom. En voilĆ  un qui vous a une mine de bandit. Rien que pour avoir cette figure-lĆ , je l'enverrais aux galĆØres. --Monsieur, demanda-t-il, y a-t-il moyen de pĆ©nĆ©trer dans la salle? --Je ne crois vraiment pas. Il y a beaucoup de foule. Cependant l'audience est suspendue. Il y a des gens qui sont sortis, et, Ć  la reprise de l'audience, vous pourrez essayer. --Par où entre-t-on? --Par cette grande porte. L'avocat le quitta. En quelques instants, il avait Ć©prouvĆ©, presque en mĆŖme temps, presque mĆŖlĆ©es, toutes les Ć©motions possibles. Les paroles de cet indiffĆ©rent lui avaient tour Ć  tour traversĆ© le coeur comme des aiguilles de glace et comme des lames de feu. Quand il vit que rien n'Ć©tait terminĆ©, il respira; mais il n'eĆ»t pu dire si ce qu'il ressentait Ć©tait du contentement ou de la douleur. Il s'approcha de plusieurs groupes et il Ć©couta ce qu'on disait. Le rĆ“le de la session Ć©tant trĆØs chargĆ©, le prĆ©sident avait indiquĆ© pour ce mĆŖme jour deux affaires simples et courtes. On avait commencĆ© par l'infanticide, et maintenant on en Ć©tait au forƧat, au rĆ©cidiviste, au "cheval de retour". Cet homme avait volĆ© des pommes, mais cela ne paraissait pas bien prouvĆ©; ce qui Ć©tait prouvĆ©, c'est qu'il avait Ć©tĆ© dĆ©jĆ  aux galĆØres Ć  Toulon. C'est ce qui faisait son affaire mauvaise. Du reste, l'interrogatoire de l'homme Ć©tait terminĆ© et les dĆ©positions des tĆ©moins; mais il y avait encore les plaidoiries de l'avocat et le rĆ©quisitoire du ministĆØre public; cela ne devait guĆØre finir avant minuit. L'homme serait probablement condamnĆ©; l'avocat gĆ©nĆ©ral Ć©tait trĆØs bon--et ne manquait pas ses accusĆ©s--c'Ć©tait un garƧon d'esprit qui faisait des vers. Un huissier se tenait debout prĆØs de la porte qui communiquait avec la salle des assises. Il demanda Ć  cet huissier: --Monsieur, la porte va-t-elle bientĆ“t s'ouvrir? --Elle ne s'ouvrira pas, dit l'huissier. --Comment! on ne l'ouvrira pas Ć  la reprise de l'audience? est-ce que l'audience n'est pas suspendue? --L'audience vient d'ĆŖtre reprise, rĆ©pondit l'huissier, mais la porte ne se rouvrira pas. --Pourquoi? --Parce que la salle est pleine. --Quoi? il n'y a plus une place? --Plus une seule. La porte est fermĆ©e. Personne ne peut plus entrer. L'huissier ajouta aprĆØs un silence: --Il y a bien encore deux ou trois places derriĆØre monsieur le prĆ©sident, mais monsieur le prĆ©sident n'y admet que les fonctionnaires publics. Cela dit, l'huissier lui tourna le dos. Il se retira la tĆŖte baissĆ©e, traversa l'antichambre et redescendit l'escalier lentement, comme hĆ©sitant Ć  chaque marche. Il est probable qu'il tenait conseil avec lui-mĆŖme. Le violent combat qui se livrait en lui depuis la veille n'Ć©tait pas fini; et, Ć  chaque instant, il en traversait quelque nouvelle pĆ©ripĆ©tie. ArrivĆ© sur le palier de l'escalier, il s'adossa Ć  la rampe et croisa les bras. Tout Ć  coup il ouvrit sa redingote, prit son portefeuille, en tira un crayon, dĆ©chira une feuille, et Ć©crivit rapidement sur cette feuille Ć  la lueur du rĆ©verbĆØre cette ligne:--_M. Madeleine, maire de Montreuil-sur-mer_. Puis il remonta l'escalier Ć  grands pas, fendit la foule, marcha droit Ć  l'huissier, lui remit le papier, et lui dit avec autoritĆ©: --Portez ceci Ć  monsieur le prĆ©sident. L'huissier prit le papier, y jeta un coup d'oeil et obĆ©it. Chapitre VIII EntrĆ©e de faveur Sans qu'il s'en doutĆ¢t, le maire de Montreuil-sur-mer avait une sorte de cĆ©lĆ©britĆ©. Depuis sept ans que sa rĆ©putation de vertu remplissait tout le bas Boulonnais, elle avait fini par franchir les limites d'un petit pays et s'Ć©tait rĆ©pandue dans les deux ou trois dĆ©partements voisins. Outre le service considĆ©rable qu'il avait rendu au chef-lieu en y restaurant l'industrie des verroteries noires, il n'Ć©tait pas une des cent quarante et une communes de l'arrondissement de Montreuil-sur-mer qui ne lui dĆ»t quelque bienfait. Il avait su mĆŖme au besoin aider et fĆ©conder les industries des autres arrondissements. C'est ainsi qu'il avait dans l'occasion soutenu de son crĆ©dit et de ses fonds la fabrique de tulle de Boulogne, la filature de lin Ć  la mĆ©canique de FrĆ©vent et la manufacture hydraulique de toiles de Boubers-sur-Canche. Partout on prononƧait avec vĆ©nĆ©ration le nom de M. Madeleine. Arras et Douai enviaient son maire Ć  l'heureuse petite ville de Montreuil-sur-mer. Le conseiller Ć  la cour royale de Douai, qui prĆ©sidait cette session des assises Ć  Arras, connaissait comme tout le monde ce nom si profondĆ©ment et si universellement honorĆ©. Quand l'huissier, ouvrant discrĆØtement la porte qui communiquait de la chambre du conseil Ć  l'audience, se pencha derriĆØre le fauteuil du prĆ©sident et lui remit le papier où Ć©tait Ć©crite la ligne qu'on vient de lire, en ajoutant: _Ce monsieur dĆ©sire assister Ć  l'audience_, le prĆ©sident fit un vif mouvement de dĆ©fĆ©rence, saisit une plume, Ć©crivit quelques mots au bas du papier, et le rendit Ć  l'huissier en lui disant: Faites entrer. L'homme malheureux dont nous racontons l'histoire Ć©tait restĆ© prĆØs de la porte de la salle Ć  la mĆŖme place et dans la mĆŖme attitude où l'huissier l'avait quittĆ©. Il entendit, Ć  travers sa rĆŖverie, quelqu'un qui lui disait: Monsieur veut-il bien me faire l'honneur de me suivre? C'Ć©tait ce mĆŖme huissier qui lui avait tournĆ© le dos l'instant d'auparavant et qui maintenant le saluait jusqu'Ć  terre. L'huissier en mĆŖme temps lui remit le papier. Il le dĆ©plia, et, comme il se rencontrait qu'il Ć©tait prĆØs de la lampe, il put lire: Ā«Le prĆ©sident de la cour d'assises prĆ©sente son respect Ć  M. Madeleine.Ā» Il froissa le papier entre ses mains, comme si ces quelques mots eussent eu pour lui un arriĆØre-goĆ»t Ć©trange et amer. Il suivit l'huissier. Quelques minutes aprĆØs, il se trouvait seul dans une espĆØce de cabinet lambrissĆ©, d'un aspect sĆ©vĆØre, Ć©clairĆ© par deux bougies posĆ©es sur une table Ć  tapis vert. Il avait encore dans l'oreille les derniĆØres paroles de l'huissier qui venait de le quitter--Ā«Monsieur, vous voici dans la chambre du conseil; vous n'avez qu'Ć  tourner le bouton de cuivre de cette porte, et vous vous trouverez dans l'audience derriĆØre le fauteuil de monsieur le prĆ©sident.Ā»--Ces paroles se mĆŖlaient dans sa pensĆ©e Ć  un souvenir vague de corridors Ć©troits et d'escaliers noirs qu'il venait de parcourir. L'huissier l'avait laissĆ© seul. Le moment suprĆŖme Ć©tait arrivĆ©. Il cherchait Ć  se recueillir sans pouvoir y parvenir. C'est surtout aux heures où l'on aurait le plus besoin de les rattacher aux rĆ©alitĆ©s poignantes de la vie que tous les fils de la pensĆ©e se rompent dans le cerveau. Il Ć©tait dans l'endroit mĆŖme où les juges dĆ©libĆØrent et condamnent. Il regardait avec une tranquillitĆ© stupide cette chambre paisible et redoutable où tant d'existences avaient Ć©tĆ© brisĆ©es, où son nom allait retentir tout Ć  l'heure, et que sa destinĆ©e traversait en ce moment. Il regardait la muraille, puis il se regardait lui-mĆŖme, s'Ć©tonnant que ce fĆ»t cette chambre et que ce fĆ»t lui. Il n'avait pas mangĆ© depuis plus de vingt-quatre heures, il Ć©tait brisĆ© par les cahots de la carriole, mais il ne le sentait pas; il lui semblait qu'il ne sentait rien. Il s'approcha d'un cadre noir qui Ć©tait accrochĆ© au mur et qui contenait sous verre une vieille lettre autographe de Jean-Nicolas Pache, maire de Paris et ministre, datĆ©e, sans doute par erreur, du _9 juin an II_, et dans laquelle Pache envoyait Ć  la commune la liste des ministres et des dĆ©putĆ©s tenus en arrestation chez eux. Un tĆ©moin qui l'eĆ»t pu voir et qui l'eĆ»t observĆ© en cet instant eĆ»t sans doute imaginĆ© Fantine et Cosette. Tout en rĆŖvant, il se retourna, et ses yeux rencontrĆØrent le bouton de cuivre de la porte qui le sĆ©parait de la salle des assises. Il avait presque oubliĆ© cette porte. Son regard, d'abord calme, s'y arrĆŖta, resta attachĆ© Ć  ce bouton de cuivre, puis devint effarĆ© et fixe, et s'empreignit peu Ć  peu d'Ć©pouvante. Des gouttes de sueur lui sortaient d'entre les cheveux et ruisselaient sur ses tempes. ƀ un certain moment, il fit avec une sorte d'autoritĆ© mĆŖlĆ©e de rĆ©bellion ce geste indescriptible qui veut dire et qui dit si bien: _Pardieu! qui est-ce qui m'y force?_ Puis il se tourna vivement, vit devant lui la porte par laquelle il Ć©tait entrĆ©, y alla, l'ouvrit, et sortit. Il n'Ć©tait plus dans cette chambre, il Ć©tait dehors, dans un corridor, un corridor long, Ć©troit, coupĆ© de degrĆ©s et de guichets, faisant toutes sortes d'angles, Ć©clairĆ© ƧƠ et lĆ  de rĆ©verbĆØres pareils Ć  des veilleuses de malades, le corridor par où il Ć©tait venu. Il respira, il Ć©couta; aucun bruit derriĆØre lui, aucun bruit devant lui; il se mit Ć  fuir comme si on le poursuivait. Quand il eut doublĆ© plusieurs des coudes de ce couloir, il Ć©couta encore. C'Ć©tait toujours le mĆŖme silence et la mĆŖme ombre autour de lui. Il Ć©tait essoufflĆ©, il chancelait, il s'appuya au mur. La pierre Ć©tait froide, sa sueur Ć©tait glacĆ©e sur son front, il se redressa en frissonnant. Alors, lĆ , seul, debout dans cette obscuritĆ©, tremblant de froid et d'autre chose peut-ĆŖtre, il songea. Il avait songĆ© toute la nuit, il avait songĆ© toute la journĆ©e; il n'entendait plus en lui qu'une voix qui disait: hĆ©las! Un quart d'heure s'Ć©coula ainsi. Enfin, il pencha la tĆŖte, soupira avec angoisse, laissa pendre ses bras, et revint sur ses pas. Il marchait lentement et comme accablĆ©. Il semblait que quelqu'un l'eĆ»t atteint dans sa fuite et le ramenĆ¢t. Il rentra dans la chambre du conseil. La premiĆØre chose qu'il aperƧut, ce fut la gĆ¢chette de la porte. Cette gĆ¢chette, ronde et en cuivre poli, resplendissait pour lui comme une effroyable Ć©toile. Il la regardait comme une brebis regarderait l'oeil d'un tigre. Ses yeux ne pouvaient s'en dĆ©tacher. De temps en temps il faisait un pas et se rapprochait de la porte. S'il eĆ»t Ć©coutĆ©, il eĆ»t entendu, comme une sorte de murmure confus, le bruit de la salle voisine; mais il n'Ć©coutait pas, et il n'entendait pas. Tout Ć  coup, sans qu'il sĆ»t lui-mĆŖme comment, il se trouva prĆØs de la porte. Il saisit convulsivement le bouton; la porte s'ouvrit. Il Ć©tait dans la salle d'audience. Chapitre IX Un lieu où des convictions sont en train de se former Il fit un pas, referma machinalement la porte derriĆØre lui, et resta debout, considĆ©rant ce qu'il voyait. C'Ć©tait une assez vaste enceinte Ć  peine Ć©clairĆ©e, tantĆ“t pleine de rumeur, tantĆ“t pleine de silence, où tout l'appareil d'un procĆØs criminel se dĆ©veloppait avec sa gravitĆ© mesquine et lugubre au milieu de la foule. ƀ un bout de la salle, celui où il se trouvait, des juges Ć  l'air distrait, en robe usĆ©e, se rongeant les ongles ou fermant les paupiĆØres; Ć  l'autre bout, une foule en haillons; des avocats dans toutes sortes d'attitudes; des soldats au visage honnĆŖte et dur; de vieilles boiseries tachĆ©es, un plafond sale, des tables couvertes d'une serge plutĆ“t jaune que verte, des portes noircies par les mains; Ć  des clous plantĆ©s dans le lambris, des quinquets d'estaminet donnant plus de fumĆ©e que de clartĆ©; sur les tables, des chandelles dans des chandeliers de cuivre; l'obscuritĆ©, la laideur, la tristesse; et de tout cela se dĆ©gageait une impression austĆØre et auguste, car on y sentait cette grande chose humaine qu'on appelle la loi et cette grande chose divine qu'on appelle la justice. Personne dans cette foule ne fit attention Ć  lui. Tous les regards convergeaient vers un point unique, un banc de bois adossĆ© Ć  une petite porte, le long de la muraille, Ć  gauche du prĆ©sident. Sur ce banc, que plusieurs chandelles Ć©clairaient, il y avait un homme entre deux gendarmes. Cet homme, c'Ć©tait l'homme. Il ne le chercha pas, il le vit. Ses yeux allĆØrent lĆ  naturellement, comme s'ils avaient su d'avance où Ć©tait cette figure. Il crut se voir lui-mĆŖme, vieilli, non pas sans doute absolument semblable de visage, mais tout pareil d'attitude et d'aspect, avec ces cheveux hĆ©rissĆ©s, avec cette prunelle fauve et inquiĆØte, avec cette blouse, tel qu'il Ć©tait le jour où il entrait Ć  Digne, plein de haine et cachant dans son Ć¢me ce hideux trĆ©sor de pensĆ©es affreuses qu'il avait mis dix-neuf ans Ć  ramasser sur le pavĆ© du bagne. Il se dit avec un frĆ©missement: --Mon Dieu! est-ce que je redeviendrai ainsi? Cet ĆŖtre paraissait au moins soixante ans. Il avait je ne sais quoi de rude, de stupide et d'effarouchĆ©. Au bruit de la porte, on s'Ć©tait rangĆ© pour lui faire place, le prĆ©sident avait tournĆ© la tĆŖte, et comprenant que le personnage qui venait d'entrer Ć©tait M. le maire de Montreuil-sur-mer, il l'avait saluĆ©. L'avocat gĆ©nĆ©ral, qui avait vu M. Madeleine Ć  Montreuil-sur-mer où des opĆ©rations de son ministĆØre l'avaient plus d'une fois appelĆ©, le reconnut, et salua Ć©galement. Lui s'en aperƧut Ć  peine. Il Ć©tait en proie Ć  une sorte d'hallucination; il regardait. Des juges, un greffier, des gendarmes, une foule de tĆŖtes cruellement curieuses, il avait dĆ©jĆ  vu cela une fois, autrefois, il y avait vingt-sept ans. Ces choses funestes, il les retrouvait; elles Ć©taient lĆ , elles remuaient, elles existaient. Ce n'Ć©tait plus un effort de sa mĆ©moire, un mirage de sa pensĆ©e, c'Ć©taient de vrais gendarmes et de vrais juges, une vraie foule et de vrais hommes en chair et en os. C'en Ć©tait fait, il voyait reparaĆ®tre et revivre autour de lui, avec tout ce que la rĆ©alitĆ© a de formidable, les aspects monstrueux de son passĆ©. Tout cela Ć©tait bĆ©ant devant lui. Il en eut horreur, il ferma les yeux, et s'Ć©cria au plus profond de son Ć¢me: jamais! Et par un jeu tragique de la destinĆ©e qui faisait trembler toutes ses idĆ©es et le rendait presque fou, c'Ć©tait un autre lui-mĆŖme qui Ć©tait lĆ ! Cet homme qu'on jugeait, tous l'appelaient Jean Valjean! Il avait sous les yeux, vision inouĆÆe, une sorte de reprĆ©sentation du moment le plus horrible de sa vie, jouĆ©e par son fantĆ“me. Tout y Ć©tait, c'Ć©tait le mĆŖme appareil, la mĆŖme heure de nuit, presque les mĆŖmes faces de juges, de soldats et de spectateurs. Seulement, au-dessus de la tĆŖte du prĆ©sident, il y avait un crucifix, chose qui manquait aux tribunaux du temps de sa condamnation. Quand on l'avait jugĆ©, Dieu Ć©tait absent. Une chaise Ć©tait derriĆØre lui; il s'y laissa tomber, terrifiĆ© de l'idĆ©e qu'on pouvait le voir. Quand il fut assis, il profita d'une pile de cartons qui Ć©tait sur le bureau des juges pour dĆ©rober son visage Ć  toute la salle. Il pouvait maintenant voir sans ĆŖtre vu. Peu Ć  peu il se remit. Il rentra pleinement dans le sentiment du rĆ©el; il arriva Ć  cette phase de calme où l'on peut Ć©couter. M. Bamatabois Ć©tait au nombre des jurĆ©s. Il chercha Javert, mais il ne le vit pas. Le banc des tĆ©moins lui Ć©tait cachĆ© par la table du greffier. Et puis, nous venons de le dire, la salle Ć©tait Ć  peine Ć©clairĆ©e. Au moment où il Ć©tait entrĆ©, l'avocat de l'accusĆ© achevait sa plaidoirie. L'attention de tous Ć©tait excitĆ©e au plus haut point; l'affaire durait depuis trois heures. Depuis trois heures, cette foule regardait plier peu Ć  peu sous le poids d'une vraisemblance terrible un homme, un inconnu, une espĆØce d'ĆŖtre misĆ©rable, profondĆ©ment stupide ou profondĆ©ment habile. Cet homme, on le sait dĆ©jĆ , Ć©tait un vagabond qui avait Ć©tĆ© trouvĆ© dans un champ, emportant une branche chargĆ©e de pommes mĆ»res, cassĆ©e Ć  un pommier dans un clos voisin, appelĆ© le clos Pierron. Qui Ć©tait cet homme? Une enquĆŖte avait eu lieu; des tĆ©moins venaient d'ĆŖtre entendus, ils avaient Ć©tĆ© unanimes, des lumiĆØres avaient jailli de tout le dĆ©bat. L'accusation disait: --Nous ne tenons pas seulement un voleur de fruits, un maraudeur; nous tenons lĆ , dans notre main, un bandit, un relaps en rupture de ban, un ancien forƧat, un scĆ©lĆ©rat des plus dangereux, un malfaiteur appelĆ© Jean Valjean que la justice recherche depuis longtemps, et qui, il y a huit ans, en sortant du bagne de Toulon, a commis un vol de grand chemin Ć  main armĆ©e sur la personne d'un enfant savoyard appelĆ© Petit-Gervais, crime prĆ©vu par l'article 383 du code pĆ©nal, pour lequel nous nous rĆ©servons de le poursuivre ultĆ©rieurement, quand l'identitĆ© sera judiciairement acquise. Il vient de commettre un nouveau vol. C'est un cas de rĆ©cidive. Condamnez-le pour le fait nouveau; il sera jugĆ© plus tard pour le fait ancien. Devant cette accusation, devant l'unanimitĆ© des tĆ©moins, l'accusĆ© paraissait surtout Ć©tonnĆ©. Il faisait des gestes et des signes qui voulaient dire non, ou bien il considĆ©rait le plafond. Il parlait avec peine, rĆ©pondait avec embarras, mais de la tĆŖte aux pieds toute sa personne niait. Il Ć©tait comme un idiot en prĆ©sence de toutes ces intelligences rangĆ©es en bataille autour de lui, et comme un Ć©tranger au milieu de cette sociĆ©tĆ© qui le saisissait. Cependant il y allait pour lui de l'avenir le plus menaƧant, la vraisemblance croissait Ć  chaque minute, et toute cette foule regardait avec plus d'anxiĆ©tĆ© que lui-mĆŖme cette sentence pleine de calamitĆ©s qui penchait sur lui de plus en plus. Une Ć©ventualitĆ© laissait mĆŖme entrevoir, outre le bagne, la peine de mort possible, si l'identitĆ© Ć©tait reconnue et si l'affaire Petit-Gervais se terminait plus tard par une condamnation. Qu'Ć©tait-ce que cet homme? De quelle nature Ć©tait son apathie? Etait-ce imbĆ©cillitĆ© ou ruse? Comprenait-il trop, ou ne comprenait-il pas du tout? Questions qui divisaient la foule et semblaient partager le jury. Il y avait dans ce procĆØs ce qui effraye et ce qui intrigue; le drame n'Ć©tait pas seulement sombre, il Ć©tait obscur. Le dĆ©fenseur avait assez bien plaidĆ©, dans cette langue de province qui a longtemps constituĆ© l'Ć©loquence du barreau et dont usaient jadis tous les avocats, aussi bien Ć  Paris qu'Ć  Romorantin ou Ć  Montbrison, et qui aujourd'hui, Ć©tant devenue classique, n'est plus guĆØre parlĆ©e que par les orateurs officiels du parquet, auxquels elle convient par sa sonoritĆ© grave et son allure majestueuse; langue où un mari s'appelle un Ć©poux, une femme, une Ć©pouse, Paris, le centre des arts et de la civilisation, le roi, le monarque, monseigneur l'Ć©vĆŖque, un saint pontife, l'avocat gĆ©nĆ©ral, l'Ć©loquent interprĆØte de la vindicte, la plaidoirie, les accents qu'on vient d'entendre, le siĆØcle de Louis XIV, le grand siĆØcle, un théâtre, le temple de MelpomĆØne, la famille rĆ©gnante, l'auguste sang de nos rois, un concert, une solennitĆ© musicale, monsieur le gĆ©nĆ©ral commandant le dĆ©partement, l'illustre guerrier qui, etc., les Ć©lĆØves du sĆ©minaire, ces tendres lĆ©vites, les erreurs imputĆ©es aux journaux, l'imposture qui distille son venin dans les colonnes de ces organes, etc., etc.--L'avocat donc avait commencĆ© par s'expliquer sur le vol des pommes,--chose malaisĆ©e en beau style; mais BĆ©nigne Bossuet lui-mĆŖme a Ć©tĆ© obligĆ© de faire allusion Ć  une poule en pleine oraison funĆØbre, et il s'en est tirĆ© avec pompe. L'avocat avait Ć©tabli que le vol de pommes n'Ć©tait pas matĆ©riellement prouvĆ©.--Son client, qu'en sa qualitĆ© de dĆ©fenseur, il persistait Ć  appeler Champmathieu, n'avait Ć©tĆ© vu de personne escaladant le mur ou cassant la branche. On l'avait arrĆŖtĆ© nanti de cette branche (que l'avocat appelait plus volontiers rameau); mais il disait l'avoir trouvĆ©e Ć  terre et ramassĆ©e. Où Ć©tait la preuve du contraire?--Sans doute cette branche avait Ć©tĆ© cassĆ©e et dĆ©robĆ©e aprĆØs escalade, puis jetĆ©e lĆ  par le maraudeur alarmĆ©; sans doute il y avait un voleur. Mais qu'est-ce qui prouvait que ce voleur Ć©tait Champmathieu? Une seule chose. Sa qualitĆ© d'ancien forƧat. L'avocat ne niait pas que cette qualitĆ© ne parĆ»t malheureusement bien constatĆ©e; l'accusĆ© avait rĆ©sidĆ© Ć  Faverolles; l'accusĆ© y avait Ć©tĆ© Ć©mondeur; le nom de Champmathieu pouvait bien avoir pour origine Jean Mathieu; tout cela Ć©tait vrai; enfin quatre tĆ©moins reconnaissaient sans hĆ©siter et positivement Champmathieu pour ĆŖtre le galĆ©rien Jean Valjean; Ć  ces indications, Ć  ces tĆ©moignages, l'avocat ne pouvait opposer que la dĆ©nĆ©gation de son client, dĆ©nĆ©gation intĆ©ressĆ©e; mais en supposant qu'il fĆ»t le forƧat Jean Valjean, cela prouvait-il qu'il fĆ»t le voleur des pommes? C'Ć©tait une prĆ©somption, tout au plus; non une preuve. L'accusĆ©, cela Ć©tait vrai, et le dĆ©fenseur Ā«dans sa bonne foiĀ» devait en convenir, avait adoptĆ© Ā«un mauvais systĆØme de dĆ©fenseĀ»--Il s'obstinait Ć  nier tout, le vol et sa qualitĆ© de forƧat. Un aveu sur ce dernier point eĆ»t mieux valu, Ć  coup sĆ»r, et lui eĆ»t conciliĆ© l'indulgence de ses juges; l'avocat le lui avait conseillĆ©; mais l'accusĆ© s'y Ć©tait refusĆ© obstinĆ©ment, croyant sans doute sauver tout en n'avouant rien. C'Ć©tait un tort; mais ne fallait-il pas considĆ©rer la briĆØvetĆ© de cette intelligence? Cet homme Ć©tait visiblement stupide. Un long malheur au bagne, une longue misĆØre hors du bagne, l'avaient abruti, etc., etc. Il se dĆ©fendait mal, Ć©tait-ce une raison pour le condamner? Quant Ć  l'affaire Petit-Gervais, l'avocat n'avait pas Ć  la discuter, elle n'Ć©tait point dans la cause. L'avocat concluait en suppliant le jury et la cour, si l'identitĆ© de Jean Valjean leur paraissait Ć©vidente, de lui appliquer les peines de police qui s'adressent au condamnĆ© en rupture de ban, et non le chĆ¢timent Ć©pouvantable qui frappe le forƧat rĆ©cidiviste. L'avocat gĆ©nĆ©ral rĆ©pliqua au dĆ©fenseur. Il fut violent et fleuri, comme sont habituellement les avocats gĆ©nĆ©raux. Il fĆ©licita le dĆ©fenseur de sa Ā«loyauté», et profita habilement de cette loyautĆ©. Il atteignit l'accusĆ© par toutes les concessions que l'avocat avait faites. L'avocat semblait accorder que l'accusĆ© Ć©tait Jean Valjean. Il en prit acte. Cet homme Ć©tait donc Jean Valjean. Ceci Ć©tait acquis Ć  l'accusation et ne pouvait plus se contester. Ici, par une habile antonomase, remontant aux sources et aux causes de la criminalitĆ©, l'avocat gĆ©nĆ©ral tonna contre l'immoralitĆ© de l'Ć©cole romantique, alors Ć  son aurore sous le nom d'Ć©cole satanique que lui avaient dĆ©cernĆ© les critiques de l'Oriflamme et de la Quotidienne, il attribua, non sans vraisemblance, Ć  l'influence de cette littĆ©rature perverse le dĆ©lit de Champmathieu, ou pour mieux dire, de Jean Valjean. Ces considĆ©rations Ć©puisĆ©es, il passa Ć  Jean Valjean lui-mĆŖme. Qu'Ć©tait-ce que Jean Valjean? Description de Jean Valjean. Un monstre vomi, etc. Le modĆØle de ces sortes de descriptions est dans le rĆ©cit de ThĆ©ramĆØne, lequel n'est pas utile Ć  la tragĆ©die, mais rend tous les jours de grands services Ć  l'Ć©loquence judiciaire. L'auditoire et les jurĆ©s Ā«frĆ©mirentĀ». La description achevĆ©e, l'avocat gĆ©nĆ©ral reprit, dans un mouvement oratoire fait pour exciter au plus haut point le lendemain matin l'enthousiasme du Journal de la PrĆ©fecture: Et c'est un pareil homme, etc., etc., etc., vagabond, mendiant, sans moyens d'existence, etc., etc.,--accoutumĆ© par sa vie passĆ©e aux actions coupables et peu corrigĆ© par son sĆ©jour au bagne, comme le prouve le crime commis sur Petit-Gervais, etc., etc.,--c'est un homme pareil qui, trouvĆ© sur la voie publique en flagrant dĆ©lit de vol, Ć  quelques pas d'un mur escaladĆ©, tenant encore Ć  la main l'objet volĆ©, nie le flagrant dĆ©lit, le vol, l'escalade, nie tout, nie jusqu'Ć  son nom, nie jusqu'Ć  son identitĆ©! Outre cent autres preuves sur lesquelles nous ne revenons pas, quatre tĆ©moins le reconnaissent, Javert, l'intĆØgre inspecteur de police Javert, et trois de ses anciens compagnons d'ignominie, les forƧats Brevet, Chenildieu et Cochepaille. Qu'oppose-t-il Ć  cette unanimitĆ© foudroyante? Il nie. Quel endurcissement! Vous ferez justice, messieurs les jurĆ©s, etc., etc. Pendant que l'avocat gĆ©nĆ©ral parlait, l'accusĆ© Ć©coutait, la bouche ouverte, avec une sorte d'Ć©tonnement où il entrait bien quelque admiration. Il Ć©tait Ć©videmment surpris qu'un homme pĆ»t parler comme cela. De temps en temps, aux moments les plus «énergiquesĀ» du rĆ©quisitoire, dans ces instants où l'Ć©loquence, qui ne peut se contenir, dĆ©borde dans un flux d'Ć©pithĆØtes flĆ©trissantes et enveloppe l'accusĆ© comme un orage, il remuait lentement la tĆŖte de droite Ć  gauche et de gauche Ć  droite, sorte de protestation triste et muette dont il se contentait depuis le commencement des dĆ©bats. Deux ou trois fois les spectateurs placĆ©s le plus prĆØs de lui l'entendirent dire Ć  demi-voix: --VoilĆ  ce que c'est, de n'avoir pas demandĆ© Ć  M. Baloup! L'avocat gĆ©nĆ©ral fit remarquer au jury cette attitude hĆ©bĆ©tĆ©e, calculĆ©e Ć©videmment, qui dĆ©notait, non l'imbĆ©cillitĆ©, mais l'adresse, la ruse, l'habitude de tromper la justice, et qui mettait dans tout son jour Ā«la profonde perversité» de cet homme. Il termina en faisant ses rĆ©serves pour l'affaire Petit-Gervais, et en rĆ©clamant une condamnation sĆ©vĆØre. C'Ć©tait, pour l'instant, on s'en souvient, les travaux forcĆ©s Ć  perpĆ©tuitĆ©. Le dĆ©fenseur se leva, commenƧa par complimenter Ā«monsieur l'avocat gĆ©nĆ©ralĀ» sur son Ā«admirable paroleĀ», puis rĆ©pliqua comme il put, mais il faiblissait; le terrain Ć©videmment se dĆ©robait sous lui. Chapitre X Le systĆØme de dĆ©nĆ©gations L'instant de clore les dĆ©bats Ć©tait venu. Le prĆ©sident fit lever l'accusĆ© et lui adressa la question d'usage: --Avez-vous quelque chose Ć  ajouter Ć  votre dĆ©fense? L'homme, debout, roulant dans ses mains un affreux bonnet qu'il avait, sembla ne pas entendre. Le prĆ©sident rĆ©pĆ©ta la question. Cette fois l'homme entendit. Il parut comprendre, il fit le mouvement de quelqu'un qui se rĆ©veille, promena ses yeux autour de lui, regarda le public, les gendarmes, son avocat, les jurĆ©s, la cour, posa son poing monstrueux sur le rebord de la boiserie placĆ©e devant son banc, regarda encore, et tout Ć  coup, fixant sont regard sur l'avocat gĆ©nĆ©ral, il se mit Ć  parler. Ce fut comme une Ć©ruption. Il sembla, Ć  la faƧon dont les paroles s'Ć©chappaient de sa bouche, incohĆ©rentes, impĆ©tueuses, heurtĆ©es, pĆŖle-mĆŖle, qu'elles s'y pressaient toutes Ć  la fois pour sortir en mĆŖme temps. Il dit: --J'ai Ć  dire Ƨa. Que j'ai Ć©tĆ© charron Ć  Paris, mĆŖme que c'Ć©tait chez monsieur Baloup. C'est un Ć©tat dur. Dans la chose de charron, on travaille toujours en plein air, dans des cours, sous des hangars chez les bons maĆ®tres, jamais dans des ateliers fermĆ©s, parce qu'il faut des espaces, voyez-vous. L'hiver, on a si froid qu'on se bat les bras pour se rĆ©chauffer; mais les maĆ®tres ne veulent pas, ils disent que cela perd du temps. Manier du fer quand il y a de la glace entre les pavĆ©s, c'est rude. Ƈa vous use vite un homme. On est vieux tout jeune dans cet Ć©tat-lĆ . ƀ quarante ans, un homme est fini. Moi, j'en avais cinquante-trois, j'avais bien du mal. Et puis c'est si mĆ©chant les ouvriers! Quand un bonhomme n'est plus jeune, on vous l'appelle pour tout vieux serin, vieille bĆŖte! Je ne gagnais plus que trente sous par jour, on me payait le moins cher qu'on pouvait, les maĆ®tres profitaient de mon Ć¢ge. Avec Ƨa, j'avais ma fille qui Ć©tait blanchisseuse Ć  la riviĆØre. Elle gagnait un peu de son cĆ“tĆ©. ƀ nous deux, cela allait. Elle avait de la peine aussi. Toute la journĆ©e dans un baquet jusqu'Ć  mi-corps, Ć  la pluie, Ć  la neige, avec le vent qui vous coupe la figure; quand il gĆØle, c'est tout de mĆŖme, il faut laver; il y a des personnes qui n'ont pas beaucoup de linge et qui attendent aprĆØs; si on ne lavait pas, on perdrait des pratiques. Les planches sont mal jointes et il vous tombe des gouttes d'eau partout. On a ses jupes toutes mouillĆ©es, dessus et dessous. Ƈa pĆ©nĆØtre. Elle a aussi travaillĆ© au lavoir des Enfants-Rouges, où l'eau arrive par des robinets. On n'est pas dans le baquet. On lave devant soi au robinet et on rince derriĆØre soi dans le bassin. Comme c'est fermĆ©, on a moins froid au corps. Mais il y a une buĆ©e d'eau chaude qui est terrible et qui vous perd les yeux. Elle revenait Ć  sept heures du soir, et se couchait bien vite; elle Ć©tait si fatiguĆ©e. Son mari la battait. Elle est morte. Nous n'avons pas Ć©tĆ© bien heureux. C'Ć©tait une brave fille qui n'allait pas au bal, qui Ć©tait bien tranquille. Je me rappelle un mardi gras où elle Ć©tait couchĆ©e Ć  huit heures. VoilĆ . Je dis vrai. Vous n'avez qu'Ć  demander. Ah, bien oui, demander! que je suis bĆŖte! Paris, c'est un gouffre. Qui est-ce qui connaĆ®t le pĆØre Champmathieu? Pourtant je vous dis monsieur Baloup. Voyez chez monsieur Baloup. AprĆØs Ƨa, je ne sais pas ce qu'on me veut. L'homme se tut, et resta debout. Il avait dit ces choses d'une voix haute, rapide, rauque, dure et enrouĆ©e, avec une sorte de naĆÆvetĆ© irritĆ©e et sauvage. Une fois il s'Ć©tait interrompu pour saluer quelqu'un dans la foule. Les espĆØces d'affirmations qu'il semblait jeter au hasard devant lui, lui venaient comme des hoquets, et il ajoutait Ć  chacune d'elles le geste d'un bĆ»cheron qui fend du bois. Quand il eut fini, l'auditoire Ć©clata de rire. Il regarda le public, et voyant qu'on riait, et ne comprenant pas, il se mit Ć  rire lui-mĆŖme. Cela Ć©tait sinistre. Le prĆ©sident, homme attentif et bienveillant, Ć©leva la voix. Il rappela Ć  Ā«messieurs les jurĆ©sĀ» que Ā«le sieur Baloup, l'ancien maĆ®tre charron chez lequel l'accusĆ© disait avoir servi, avait Ć©tĆ© inutilement citĆ©. Il Ć©tait en faillite, et n'avait pu ĆŖtre retrouvĆ©.Ā» Puis se tournant vers l'accusĆ©, il l'engagea Ć  Ć©couter ce qu'il allait lui dire et ajouta: --Vous ĆŖtes dans une situation où il faut rĆ©flĆ©chir. Les prĆ©somptions les plus graves pĆØsent sur vous et peuvent entraĆ®ner des consĆ©quences capitales. AccusĆ©, dans votre intĆ©rĆŖt, je vous interpelle une derniĆØre fois, expliquez-vous clairement sur ces deux faits:--PremiĆØrement, avez-vous, oui ou non, franchi le mur du clos Pierron, cassĆ© la branche et volĆ© les pommes, c'est-Ć -dire commis le crime de vol avec escalade? DeuxiĆØmement, oui ou non, ĆŖtes-vous le forƧat libĆ©rĆ© Jean Valjean? L'accusĆ© secoua la tĆŖte d'un air capable, comme un homme qui a bien compris et qui sait ce qu'il va rĆ©pondre. Il ouvrit la bouche, se tourna vers le prĆ©sident et dit: --D'abord.... Puis il regarda son bonnet, il regarda le plafond, et se tut. --AccusĆ©, reprit l'avocat gĆ©nĆ©ral d'une voix sĆ©vĆØre, faites attention. Vous ne rĆ©pondez Ć  rien de ce qu'on vous demande. Votre trouble vous condamne. Il est Ć©vident que vous ne vous appelez pas Champmathieu, que vous ĆŖtes le forƧat Jean Valjean cachĆ© d'abord sous le nom de Jean Mathieu qui Ć©tait le nom de sa mĆØre, que vous ĆŖtes allĆ© en Auvergne, que vous ĆŖtes nĆ© Ć  Faverolles où vous avez Ć©tĆ© Ć©mondeur. Il est Ć©vident que vous avez volĆ© avec escalade des pommes mĆ»res dans le clos Pierron. Messieurs les jurĆ©s apprĆ©cieront. L'accusĆ© avait fini par se rasseoir; il se leva brusquement quand l'avocat gĆ©nĆ©ral eut fini, et s'Ć©cria: --Vous ĆŖtes trĆØs mĆ©chant, vous! VoilĆ  ce que je voulais dire. Je ne trouvais pas d'abord. Je n'ai rien volĆ©. Je suis un homme qui ne mange pas tous les jours. Je venais d'Ailly, je marchais dans le pays aprĆØs une ondĆ©e qui avait fait la campagne toute jaune, mĆŖme que les mares dĆ©bordaient et qu'il ne sortait plus des sables que de petits brins d'herbe au bord de la route, j'ai trouvĆ© une branche cassĆ©e par terre où il y avait des pommes, j'ai ramassĆ© la branche sans savoir qu'elle me ferait arriver de la peine. Il y a trois mois que je suis en prison et qu'on me trimballe. AprĆØs Ƨa, je ne peux pas dire, on parle contre moi, on me dit: rĆ©pondez! le gendarme, qui est bon enfant, me pousse le coude et me dit tout bas: rĆ©ponds donc. Je ne sais pas expliquer, moi, je n'ai pas fait les Ć©tudes, je suis un pauvre homme. VoilĆ  ce qu'on a tort de ne pas voir. Je n'ai pas volĆ©, j'ai ramassĆ© par terre des choses qu'il y avait. Vous dites Jean Valjean, Jean Mathieu! Je ne connais pas ces personnes-lĆ . C'est des villageois. J'ai travaillĆ© chez monsieur Baloup, boulevard de l'HĆ“pital. Je m'appelle Champmathieu. Vous ĆŖtes bien malins de me dire où je suis nĆ©. Moi, je l'ignore. Tout le monde n'a pas des maisons pour y venir au monde. Ce serait trop commode. Je crois que mon pĆØre et ma mĆØre Ć©taient des gens qui allaient sur les routes. Je ne sais pas d'ailleurs. Quand j'Ć©tais enfant, on m'appelait Petit, maintenant, on m'appelle Vieux. VoilĆ  mes noms de baptĆŖme. Prenez Ƨa comme vous voudrez. J'ai Ć©tĆ© en Auvergne, j'ai Ć©tĆ© Ć  Faverolles, pardi! Eh bien? est-ce qu'on ne peut pas avoir Ć©tĆ© en Auvergne et avoir Ć©tĆ© Ć  Faverolles sans avoir Ć©tĆ© aux galĆØres? Je vous dis que je n'ai pas volĆ©, et que je suis le pĆØre Champmathieu. J'ai Ć©tĆ© chez monsieur Baloup, j'ai Ć©tĆ© domiciliĆ©. Vous m'ennuyez avec vos bĆŖtises Ć  la fin! Pourquoi donc est-ce que le monde est aprĆØs moi comme des acharnĆ©s! L'avocat gĆ©nĆ©ral Ć©tait demeurĆ© debout; il s'adressa au prĆ©sident: --Monsieur le prĆ©sident, en prĆ©sence des dĆ©nĆ©gations confuses, mais fort habiles de l'accusĆ©, qui voudrait bien se faire passer pour idiot, mais qui n'y parviendra pas--nous l'en prĆ©venons--nous requĆ©rons qu'il vous plaise et qu'il plaise Ć  la cour appeler de nouveau dans cette enceinte les condamnĆ©s Brevet, Cochepaille et Chenildieu et l'inspecteur de police Javert, et les interpeller une derniĆØre fois sur l'identitĆ© de l'accusĆ© avec le forƧat Jean Valjean. --Je fais remarquer Ć  monsieur l'avocat gĆ©nĆ©ral, dit le prĆ©sident, que l'inspecteur de police Javert, rappelĆ© par ses fonctions au chef-lieu d'un arrondissement voisin, a quittĆ© l'audience et mĆŖme la ville, aussitĆ“t sa dĆ©position faite. Nous lui en avons accordĆ© l'autorisation, avec l'agrĆ©ment de monsieur l'avocat gĆ©nĆ©ral et du dĆ©fenseur de l'accusĆ©. --C'est juste, monsieur le prĆ©sident, reprit l'avocat gĆ©nĆ©ral. En l'absence du sieur Javert, je crois devoir rappeler Ć  messieurs les jurĆ©s ce qu'il a dit ici-mĆŖme, il y a peu d'heures. Javert est un homme estimĆ© qui honore par sa rigoureuse et stricte probitĆ© des fonctions infĆ©rieures, mais importantes. Voici en quels termes il a dĆ©posĆ©:--Ā«Je n'ai pas mĆŖme besoin des prĆ©somptions morales et des preuves matĆ©rielles qui dĆ©mentent les dĆ©nĆ©gations de l'accusĆ©. Je le reconnais parfaitement. Cet homme ne s'appelle pas Champmathieu; c'est un ancien forƧat trĆØs mĆ©chant et trĆØs redoutĆ© nommĆ© Jean Valjean. On ne l'a libĆ©rĆ© Ć  l'expiration de sa peine qu'avec un extrĆŖme regret. Il a subi dix-neuf ans de travaux forcĆ©s pour vol qualifiĆ©. Il avait cinq ou six fois tentĆ© de s'Ć©vader. Outre le vol Petit-Gervais et le vol Pierron, je le soupƧonne encore d'un vol commis chez sa grandeur le dĆ©funt Ć©vĆŖque de Digne. Je l'ai souvent vu, Ć  l'Ć©poque où j'Ć©tais adjudant garde-chiourme au bagne de Toulon. Je rĆ©pĆØte que je le reconnais parfaitement.Ā» Cette dĆ©claration si prĆ©cise parut produire une vive impression sur le public et le jury. L'avocat gĆ©nĆ©ral termina en insistant pour qu'Ć  dĆ©faut de Javert, les trois tĆ©moins Brevet, Chenildieu et Cochepaille fussent entendus de nouveau et interpellĆ©s solennellement. Le prĆ©sident transmit un ordre Ć  un huissier, et un moment aprĆØs la porte de la chambre des tĆ©moins s'ouvrit. L'huissier, accompagnĆ© d'un gendarme prĆŖt Ć  lui prĆŖter main-forte, introduisit le condamnĆ© Brevet. L'auditoire Ć©tait en suspens et toutes les poitrines palpitaient comme si elles n'eussent eu qu'une seule Ć¢me. L'ancien forƧat Brevet portait la veste noire et grise des maisons centrales. Brevet Ć©tait un personnage d'une soixantaine d'annĆ©es qui avait une espĆØce de figure d'homme d'affaires et l'air d'un coquin. Cela va quelquefois ensemble. Il Ć©tait devenu, dans la prison où de nouveaux mĆ©faits l'avaient ramenĆ©, quelque chose comme guichetier. C'Ć©tait un homme dont les chefs disaient: Il cherche Ć  se rendre utile. Les aumĆ“niers portaient bon tĆ©moignage de ses habitudes religieuses. Il ne faut pas oublier que ceci se passait sous la restauration. --Brevet, dit le prĆ©sident, vous avez subi une condamnation infamante et vous ne pouvez prĆŖter serment.... Brevet baissa les yeux. --Cependant, reprit le prĆ©sident, mĆŖme dans l'homme que la loi a dĆ©gradĆ©, il peut rester, quand la pitiĆ© divine le permet, un sentiment d'honneur et d'Ć©quitĆ©. C'est Ć  ce sentiment que je fais appel Ć  cette heure dĆ©cisive. S'il existe encore en vous, et je l'espĆØre, rĆ©flĆ©chissez avant de me rĆ©pondre, considĆ©rez d'une part cet homme qu'un mot de vous peut perdre, d'autre part la justice qu'un mot de vous peut Ć©clairer. L'instant est solennel, et il est toujours temps de vous rĆ©tracter, si vous croyez vous ĆŖtre trompĆ©.--AccusĆ©, levez-vous. --Brevet, regardez bien l'accusĆ©, recueillez vos souvenirs, et dites-nous, en votre Ć¢me et conscience, si vous persistez Ć  reconnaĆ®tre cet homme pour votre ancien camarade de bagne Jean Valjean. Brevet regarda l'accusĆ©, puis se retourna vers la cour. --Oui, monsieur le prĆ©sident. C'est moi qui l'ai reconnu le premier et je persiste. Cet homme est Jean Valjean. EntrĆ© Ć  Toulon en 1796 et sorti en 1815. Je suis sorti l'an d'aprĆØs. Il a l'air d'une brute maintenant, alors ce serait que l'Ć¢ge l'a abruti; au bagne il Ć©tait sournois. Je le reconnais positivement. --Allez vous asseoir, dit le prĆ©sident. AccusĆ©, restez debout. On introduisit Chenildieu, forƧat Ć  vie, comme l'indiquaient sa casaque rouge et son bonnet vert. Il subissait sa peine au bagne de Toulon, d'où on l'avait extrait pour cette affaire. C'Ć©tait un petit homme d'environ cinquante ans, vif, ridĆ©, chĆ©tif, jaune, effrontĆ©, fiĆ©vreux, qui avait dans tous ses membres et dans toute sa personne une sorte de faiblesse maladive et dans le regard une force immense. Ses compagnons du bagne l'avaient surnommĆ© Je-nie-Dieu. Le prĆ©sident lui adressa Ć  peu prĆØs les mĆŖmes paroles qu'Ć  Brevet. Au moment où il lui rappela que son infamie lui Ć“tait le droit de prĆŖter serment, Chenildieu leva la tĆŖte et regarda la foule en face. Le prĆ©sident l'invita Ć  se recueillir et lui demanda, comme Ć  Brevet, s'il persistait Ć  reconnaĆ®tre l'accusĆ©. Chenildieu Ć©clata de rire. --Pardine! si je le reconnais! nous avons Ć©tĆ© cinq ans attachĆ©s Ć  la mĆŖme chaĆ®ne. Tu boudes donc, mon vieux? --Allez vous asseoir, dit le prĆ©sident. L'huissier amena Cochepaille. Cet autre condamnĆ© Ć  perpĆ©tuitĆ©, venu du bagne et vĆŖtu de rouge comme Chenildieu, Ć©tait un paysan de Lourdes et un demi-ours des PyrĆ©nĆ©es. Il avait gardĆ© des troupeaux dans la montagne, et de pĆ¢tre il avait glissĆ© brigand. Cochepaille n'Ć©tait pas moins sauvage et paraissait plus stupide encore que l'accusĆ©. C'Ć©tait un de ces malheureux hommes que la nature a Ć©bauchĆ©s en bĆŖtes fauves et que la sociĆ©tĆ© termine en galĆ©riens. Le prĆ©sident essaya de le remuer par quelques paroles pathĆ©tiques et graves et lui demanda, comme aux deux autres, s'il persistait, sans hĆ©sitation et sans trouble, Ć  reconnaĆ®tre l'homme debout devant lui. --C'est Jean Valjean, dit Cochepaille. MĆŖme qu'on l'appelait Jean-le-Cric, tant il Ć©tait fort. Chacune des affirmations de ces trois hommes, Ć©videmment sincĆØres et de bonne foi, avait soulevĆ© dans l'auditoire un murmure de fĆ¢cheux augure pour l'accusĆ©, murmure qui croissait et se prolongeait plus longtemps chaque fois qu'une dĆ©claration nouvelle venait s'ajouter Ć  la prĆ©cĆ©dente. L'accusĆ©, lui, les avait Ć©coutĆ©es avec ce visage Ć©tonnĆ© qui, selon l'accusation, Ć©tait son principal moyen de dĆ©fense. ƀ la premiĆØre, les gendarmes ses voisins l'avaient entendu grommeler entre ses dents: Ah bien! en voilĆ  un! AprĆØs la seconde il dit un peu plus haut, d'un air presque satisfait: Bon! ƀ la troisiĆØme il s'Ć©cria: Fameux! Le prĆ©sident l'interpella. --AccusĆ©, vous avez entendu. Qu'avez-vous Ć  dire? Il rĆ©pondit: --Je dis--Fameux! Une rumeur Ć©clata dans le public et gagna presque le jury. Il Ć©tait Ć©vident que l'homme Ć©tait perdu. --Huissiers, dit le prĆ©sident, faites faire silence. Je vais clore les dĆ©bats. En ce moment un mouvement se fit tout Ć  cĆ“tĆ© du prĆ©sident. On entendit une voix qui criait: --Brevet, Chenildieu, Cochepaille! regardez de ce cĆ“tĆ©-ci. Tous ceux qui entendirent cette voix se sentirent glacĆ©s, tant elle Ć©tait lamentable et terrible. Les yeux se tournĆØrent vers le point d'où elle venait. Un homme, placĆ© parmi les spectateurs privilĆ©giĆ©s qui Ć©taient assis derriĆØre la cour, venait de se lever, avait poussĆ© la porte Ć  hauteur d'appui qui sĆ©parait le tribunal du prĆ©toire, et Ć©tait debout au milieu de la salle. Le prĆ©sident, l'avocat gĆ©nĆ©ral, M. Bamatabois, vingt personnes, le reconnurent, et s'Ć©criĆØrent Ć  la fois: --Monsieur Madeleine! Chapitre XI Champmathieu de plus en plus Ć©tonnĆ© C'Ć©tait lui en effet. La lampe du greffier Ć©clairait son visage. Il tenait son chapeau Ć  la main, il n'y avait aucun dĆ©sordre dans ses vĆŖtements, sa redingote Ć©tait boutonnĆ©e avec soin. Il Ć©tait trĆØs pĆ¢le et il tremblait lĆ©gĆØrement. Ses cheveux, gris encore au moment de son arrivĆ©e Ć  Arras, Ć©taient maintenant tout Ć  fait blancs. Ils avaient blanchi depuis une heure qu'il Ć©tait lĆ . Toutes les tĆŖtes se dressĆØrent. La sensation fut indescriptible. Il y eut dans l'auditoire un instant d'hĆ©sitation. La voix avait Ć©tĆ© si poignante, l'homme qui Ć©tait lĆ  paraissait si calme, qu'au premier abord on ne comprit pas. On se demanda qui avait criĆ©. On ne pouvait croire que ce fĆ»t cet homme tranquille qui eĆ»t jetĆ© ce cri effrayant. Cette indĆ©cision ne dura que quelques secondes. Avant mĆŖme que le prĆ©sident et l'avocat gĆ©nĆ©ral eussent pu dire un mot, avant que les gendarmes et les huissiers eussent pu faire un geste, l'homme que tous appelaient encore en ce moment M. Madeleine s'Ć©tait avancĆ© vers les tĆ©moins Cochepaille, Brevet et Chenildieu. --Vous ne me reconnaissez pas? dit-il. Tous trois demeurĆØrent interdits et indiquĆØrent par un signe de tĆŖte qu'ils ne le connaissaient point. Cochepaille intimidĆ© fit le salut militaire. M. Madeleine se tourna vers les jurĆ©s et vers la cour et dit d'une voix douce: --Messieurs les jurĆ©s, faites relĆ¢cher l'accusĆ©. Monsieur le prĆ©sident, faites-moi arrĆŖter. L'homme que vous cherchez, ce n'est pas lui, c'est moi. Je suis Jean Valjean. Pas une bouche ne respirait. ƀ la premiĆØre commotion de l'Ć©tonnement avait succĆ©dĆ© un silence de sĆ©pulcre. On sentait dans la salle cette espĆØce de terreur religieuse qui saisit la foule lorsque quelque chose de grand s'accomplit. Cependant le visage du prĆ©sident s'Ć©tait empreint de sympathie et de tristesse; il avait Ć©changĆ© un signe rapide avec l'avocat et quelques paroles Ć  voix basse avec les conseillers assesseurs. Il s'adressa au public, et demanda avec un accent qui fut compris de tous: --Y a-t-il un mĆ©decin ici? L'avocat gĆ©nĆ©ral prit la parole: --Messieurs les jurĆ©s, l'incident si Ć©trange et si inattendu qui trouble l'audience ne nous inspire, ainsi qu'Ć  vous, qu'un sentiment que nous n'avons pas besoin d'exprimer. Vous connaissez tous, au moins de rĆ©putation, l'honorable M. Madeleine, maire de Montreuil-sur-mer. S'il y a un mĆ©decin dans l'auditoire, nous nous joignons Ć  monsieur le prĆ©sident pour le prier de vouloir bien assister monsieur Madeleine et le reconduire Ć  sa demeure. M. Madeleine ne laissa point achever l'avocat gĆ©nĆ©ral. Il l'interrompit d'un accent plein de mansuĆ©tude et d'autoritĆ©. Voici les paroles qu'il prononƧa; les voici littĆ©ralement, telles qu'elles furent Ć©crites immĆ©diatement aprĆØs l'audience par un des tĆ©moins de cette scĆØne; telles qu'elles sont encore dans l'oreille de ceux qui les ont entendues, il y a prĆØs de quarante ans aujourd'hui. --Je vous remercie, monsieur l'avocat gĆ©nĆ©ral, mais je ne suis pas fou. Vous allez voir. Vous Ć©tiez sur le point de commettre une grande erreur, lĆ¢chez cet homme, j'accomplis un devoir, je suis ce malheureux condamnĆ©. Je suis le seul qui voie clair ici, et je vous dis la vĆ©ritĆ©. Ce que je fais en ce moment, Dieu, qui est lĆ -haut, le regarde, et cela suffit. Vous pouvez me prendre, puisque me voilĆ . J'avais pourtant fait de mon mieux. Je me suis cachĆ© sous un nom; je suis devenu riche, je suis devenu maire; j'ai voulu rentrer parmi les honnĆŖtes gens. Il paraĆ®t que cela ne se peut pas. Enfin, il y a bien des choses que je ne puis pas dire, je ne vais pas vous raconter ma vie, un jour on saura. J'ai volĆ© monseigneur l'Ć©vĆŖque, cela est vrai; j'ai volĆ© Petit-Gervais, cela est vrai. On a eu raison de vous dire que Jean Valjean Ć©tait un malheureux trĆØs mĆ©chant. Toute la faute n'est peut-ĆŖtre pas Ć  lui. Ɖcoutez, messieurs les juges, un homme aussi abaissĆ© que moi n'a pas de remontrance Ć  faire Ć  la providence ni de conseil Ć  donner Ć  la sociĆ©tĆ©; mais, voyez-vous, l'infamie d'où j'avais essayĆ© de sortir est une chose nuisible. Les galĆØres font le galĆ©rien. Recueillez cela, si vous voulez. Avant le bagne, j'Ć©tais un pauvre paysan trĆØs peu intelligent, une espĆØce d'idiot; le bagne m'a changĆ©. J'Ć©tais stupide, je suis devenu mĆ©chant; j'Ć©tais bĆ»che, je suis devenu tison. Plus tard l'indulgence et la bontĆ© m'ont sauvĆ©, comme la sĆ©vĆ©ritĆ© m'avait perdu. Mais, pardon, vous ne pouvez pas comprendre ce que je dis lĆ . Vous trouverez chez moi, dans les cendres de la cheminĆ©e, la piĆØce de quarante sous que j'ai volĆ©e il y a sept ans Ć  Petit-Gervais. Je n'ai plus rien Ć  ajouter. Prenez-moi. Mon Dieu! monsieur l'avocat gĆ©nĆ©ral remue la tĆŖte, vous dites: M. Madeleine est devenu fou, vous ne me croyez pas! VoilĆ  qui est affligeant. N'allez point condamner cet homme au moins! Quoi! ceux-ci ne me reconnaissent pas! Je voudrais que Javert fĆ»t ici. Il me reconnaĆ®trait, lui! Rien ne pourrait rendre ce qu'il y avait de mĆ©lancolie bienveillante et sombre dans l'accent qui accompagnait ces paroles. Il se tourna vers les trois forƧats: --Eh bien, je vous reconnais, moi! Brevet! vous rappelez-vous?... Il s'interrompit, hĆ©sita un moment, et dit: --Te rappelles-tu ces bretelles en tricot Ć  damier que tu avais au bagne? Brevet eut comme une secousse de surprise et le regarda de la tĆŖte aux pieds d'un air effrayĆ©. Lui continua: --Chenildieu, qui te surnommais toi-mĆŖme Je-nie-Dieu, tu as toute l'Ć©paule droite brĆ»lĆ©e profondĆ©ment, parce que tu t'es couchĆ© un jour l'Ć©paule sur un rĆ©chaud plein de braise, pour effacer les trois lettres T. F. P., qu'on y voit toujours cependant. RĆ©ponds, est-ce vrai? --C'est vrai, dit Chenildieu. Il s'adressa Ć  Cochepaille: --Cochepaille, tu as prĆØs de la saignĆ©e du bras gauche une date gravĆ©e en lettres bleues avec de la poudre brĆ»lĆ©e. Cette date, c'est celle du dĆ©barquement de l'empereur Ć  Cannes, _1er mars 1815_. RelĆØve ta manche. Cochepaille releva sa manche, tous les regards se penchĆØrent autour de lui sur son bras nu. Un gendarme approcha une lampe; la date y Ć©tait. Le malheureux homme se tourna vers l'auditoire et vers les juges avec un sourire dont ceux qui l'ont vu sont encore navrĆ©s lorsqu'ils y songent. C'Ć©tait le sourire du triomphe, c'Ć©tait aussi le sourire du dĆ©sespoir. --Vous voyez bien, dit-il, que je suis Jean Valjean. Il n'y avait plus dans cette enceinte ni juges, ni accusateurs, ni gendarmes; il n'y avait que des yeux fixes et des coeurs Ć©mus. Personne ne se rappelait plus le rĆ“le que chacun pouvait avoir Ć  jouer; l'avocat gĆ©nĆ©ral oubliait qu'il Ć©tait lĆ  pour requĆ©rir, le prĆ©sident qu'il Ć©tait lĆ  pour prĆ©sider, le dĆ©fenseur qu'il Ć©tait lĆ  pour dĆ©fendre. Chose frappante, aucune question ne fut faite, aucune autoritĆ© n'intervint. Le propre des spectacles sublimes, c'est de prendre toutes les Ć¢mes et de faire de tous les tĆ©moins des spectateurs. Aucun peut-ĆŖtre ne se rendait compte de ce qu'il Ć©prouvait; aucun, sans doute, ne se disait qu'il voyait resplendir lĆ  une grande lumiĆØre; tous intĆ©rieurement se sentaient Ć©blouis. Il Ć©tait Ć©vident qu'on avait sous les yeux Jean Valjean. Cela rayonnait. L'apparition de cet homme avait suffi pour remplir de clartĆ© cette aventure si obscure le moment d'auparavant. Sans qu'il fĆ»t besoin d'aucune explication dĆ©sormais, toute cette foule, comme par une sorte de rĆ©vĆ©lation Ć©lectrique, comprit tout de suite et d'un seul coup d'oeil cette simple et magnifique histoire d'un homme qui se livrait pour qu'un autre homme ne fĆ»t pas condamnĆ© Ć  sa place. Les dĆ©tails, les hĆ©sitations, les petites rĆ©sistances possibles se perdirent dans ce vaste fait lumineux. Impression qui passa vite, mais qui dans l'instant fut irrĆ©sistible. --Je ne veux pas dĆ©ranger davantage l'audience, reprit Jean Valjean. Je m'en vais, puisqu'on ne m'arrĆŖte pas. J'ai plusieurs choses Ć  faire. Monsieur l'avocat gĆ©nĆ©ral sait qui je suis, il sait où je vais, il me fera arrĆŖter quand il voudra. Il se dirigea vers la porte de sortie. Pas une voix ne s'Ć©leva, pas un bras ne s'Ć©tendit pour l'empĆŖcher. Tous s'Ć©cartĆØrent. Il avait en ce moment ce je ne sais quoi de divin qui fait que les multitudes reculent et se rangent devant un homme. Il traversa la foule Ć  pas lents. On n'a jamais su qui ouvrit la porte, mais il est certain que la porte se trouva ouverte lorsqu'il y parvint. ArrivĆ© lĆ , il se retourna et dit: --Monsieur l'avocat gĆ©nĆ©ral, je reste Ć  votre disposition. Puis il s'adressa Ć  l'auditoire: --Vous tous, tous ceux qui sont ici, vous me trouvez digne de pitiĆ©, n'est-ce pas? Mon Dieu! quand je pense Ć  ce que j'ai Ć©tĆ© sur le point de faire, je me trouve digne d'envie. Cependant j'aurais mieux aimĆ© que tout ceci n'arrivĆ¢t pas. Il sortit, et la porte se referma comme elle avait Ć©tĆ© ouverte, car ceux qui font de certaines choses souveraines sont toujours sĆ»rs d'ĆŖtre servis par quelqu'un dans la foule. Moins d'une heure aprĆØs, le verdict du jury dĆ©chargeait de toute accusation le nommĆ© Champmathieu; et Champmathieu, mis en libertĆ© immĆ©diatement, s'en allait stupĆ©fait, croyant tous les hommes fous et ne comprenant rien Ć  cette vision. Livre huitiĆØme--Contre-coup Chapitre I Dans quel miroir M. Madeleine regarde ses cheveux Le jour commenƧait Ć  poindre. Fantine avait eu une nuit de fiĆØvre et d'insomnie, pleine d'ailleurs d'images heureuses; au matin, elle s'endormit. La soeur Simplice qui l'avait veillĆ©e profita de ce sommeil pour aller prĆ©parer une nouvelle potion de quinquina. La digne soeur Ć©tait depuis quelques instants dans le laboratoire de l'infirmerie, penchĆ©e sur ses drogues et sur ses fioles et regardant de trĆØs prĆØs Ć  cause de cette brume que le crĆ©puscule rĆ©pand sur les objets. Tout Ć  coup elle tourna la tĆŖte et fit un lĆ©ger cri. M. Madeleine Ć©tait devant elle. Il venait d'entrer silencieusement. --C'est vous, monsieur le maire! s'Ć©cria-t-elle. Il rĆ©pondit, Ć  voix basse: --Comment va cette pauvre femme? --Pas mal en ce moment. Mais nous avons Ć©tĆ© bien inquiets, allez! Elle lui expliqua ce qui s'Ć©tait passĆ©, que Fantine Ć©tait bien mal la veille et que maintenant elle Ć©tait mieux, parce qu'elle croyait que monsieur le maire Ć©tait allĆ© chercher son enfant Ć  Montfermeil. La soeur n'osa pas interroger monsieur le maire, mais elle vit bien Ć  son air que ce n'Ć©tait point de lĆ  qu'il venait. --Tout cela est bien, dit-il, vous avez eu raison de ne pas la dĆ©tromper. --Oui, reprit la soeur, mais maintenant, monsieur le maire, qu'elle va vous voir et qu'elle ne verra pas son enfant, que lui dirons-nous? Il resta un moment rĆŖveur. --Dieu nous inspirera, dit-il. --On ne pourrait cependant pas mentir, murmura la soeur Ć  demi-voix. Le plein jour s'Ć©tait fait dans la chambre. Il Ć©clairait en face le visage de M. Madeleine. Le hasard fit que la soeur leva les yeux. --Mon Dieu, monsieur! s'Ć©cria-t-elle, que vous est-il donc arrivĆ©? vos cheveux sont tout blancs! --Blancs! dit-il. La soeur Simplice n'avait point de miroir; elle fouilla dans une trousse et en tira une petite glace dont se servait le mĆ©decin de l'infirmerie pour constater qu'un malade Ć©tait mort et ne respirait plus. M. Madeleine prit la glace, y considĆ©ra ses cheveux, et dit: --Tiens! Il prononƧa ce mot avec indiffĆ©rence et comme s'il pensait Ć  autre chose. La soeur se sentit glacĆ©e par je ne sais quoi d'inconnu qu'elle entrevoyait dans tout ceci. Il demanda: --Puis-je la voir? --Est-ce que monsieur le maire ne lui fera pas revenir son enfant? dit la soeur, osant Ć  peine hasarder une question. --Sans doute, mais il faut au moins deux ou trois jours. --Si elle ne voyait pas monsieur le maire d'ici lĆ , reprit timidement la soeur, elle ne saurait pas que monsieur le maire est de retour, il serait aisĆ© de lui faire prendre patience, et quand l'enfant arriverait elle penserait tout naturellement que monsieur le maire est arrivĆ© avec l'enfant. On n'aurait pas de mensonge Ć  faire. M. Madeleine parut rĆ©flĆ©chir quelques instants, puis il dit avec sa gravitĆ© calme: --Non, ma soeur, il faut que je la voie. Je suis peut-ĆŖtre pressĆ©. La religieuse ne sembla pas remarquer ce mot Ā«peut-ĆŖtreĀ», qui donnait un sens obscur et singulier aux paroles de M. le maire. Elle rĆ©pondit en baissant les yeux et la voix respectueusement: --En ce cas, elle repose, mais monsieur le maire peut entrer. Il fit quelques observations sur une porte qui fermait mal, et dont le bruit pouvait rĆ©veiller la malade, puis il entra dans la chambre de Fantine, s'approcha du lit et entrouvrit les rideaux. Elle dormait. Son souffle sortait de sa poitrine avec ce bruit tragique qui est propre Ć  ces maladies, et qui navre les pauvres mĆØres lorsqu'elles veillent la nuit prĆØs de leur enfant condamnĆ© et endormi. Mais cette respiration pĆ©nible troublait Ć  peine une sorte de sĆ©rĆ©nitĆ© ineffable, rĆ©pandue sur son visage, qui la transfigurait dans son sommeil. Sa pĆ¢leur Ć©tait devenue de la blancheur; ses joues Ć©taient vermeilles. Ses longs cils blonds, la seule beautĆ© qui lui fĆ»t restĆ©e de sa virginitĆ© et de sa jeunesse, palpitaient tout en demeurant clos et baissĆ©s. Toute sa personne tremblait de je ne sais quel dĆ©ploiement d'ailes prĆŖtes Ć  s'entrouvrir et Ć  l'emporter, qu'on sentait frĆ©mir, mais qu'on ne voyait pas. ƀ la voir ainsi, on n'eĆ»t jamais pu croire que c'Ć©tait lĆ  une malade presque dĆ©sespĆ©rĆ©e. Elle ressemblait plutĆ“t Ć  ce qui va s'envoler qu'Ć  ce qui va mourir. La branche, lorsqu'une main s'approche pour dĆ©tacher la fleur, frissonne, et semble Ć  la fois se dĆ©rober et s'offrir. Le corps humain a quelque chose de ce tressaillement, quand arrive l'instant où les doigts mystĆ©rieux de la mort vont cueillir l'Ć¢me. M. Madeleine resta quelque temps immobile prĆØs de ce lit, regardant tour Ć  tour la malade et le crucifix, comme il faisait deux mois auparavant, le jour où il Ć©tait venu pour la premiĆØre fois la voir dans cet asile. Ils Ć©taient encore lĆ  tous les deux dans la mĆŖme attitude, elle dormant, lui priant; seulement maintenant, depuis ces deux mois Ć©coulĆ©s, elle avait des cheveux gris et lui des cheveux blancs. La soeur n'Ć©tait pas entrĆ©e avec lui. Il se tenait prĆØs de ce lit, debout, le doigt sur la bouche, comme s'il y eĆ»t eu dans la chambre quelqu'un Ć  faire taire. Elle ouvrit les yeux, le vit, et dit paisiblement, avec un sourire: --Et Cosette? Chapitre II Fantine heureuse Elle n'eut pas un mouvement de surprise, ni un mouvement de joie; elle Ć©tait la joie mĆŖme. Cette simple question: Ā«Et Cosette?Ā» fut faite avec une foi si profonde, avec tant de certitude, avec une absence si complĆØte d'inquiĆ©tude et de doute, qu'il ne trouva pas une parole. Elle continua: --Je savais que vous Ć©tiez lĆ . Je dormais, mais je vous voyais. Il y a longtemps que je vous vois. Je vous ai suivi des yeux toute la nuit. Vous Ć©tiez dans une gloire et vous aviez autour de vous toutes sortes de figures cĆ©lestes. Il leva son regard vers le crucifix. --Mais, reprit-elle, dites-moi donc où est Cosette? Pourquoi ne l'avoir pas mise sur mon lit pour le moment où je m'Ć©veillerais? Il rĆ©pondit machinalement quelque chose qu'il n'a jamais pu se rappeler plus tard. Heureusement le mĆ©decin, averti, Ć©tait survenu. Il vint en aide Ć  M. Madeleine. --Mon enfant, dit le mĆ©decin, calmez-vous. Votre enfant est lĆ . Les yeux de Fantine s'illuminĆØrent et couvrirent de clartĆ© tout son visage. Elle joignit les mains avec une expression qui contenait tout ce que la priĆØre peut avoir Ć  la fois de plus violent et de plus doux. --Oh! s'Ć©cria-t-elle, apportez-la-moi! Touchante illusion de mĆØre! Cosette Ć©tait toujours pour elle le petit enfant qu'on apporte. --Pas encore, reprit le mĆ©decin, pas en ce moment. Vous avez un reste de fiĆØvre. La vue de votre enfant vous agiterait et vous ferait du mal. Il faut d'abord vous guĆ©rir. Elle l'interrompit impĆ©tueusement. --Mais je suis guĆ©rie! je vous dis que je suis guĆ©rie! Est-il Ć¢ne, ce mĆ©decin! Ah ƧƠ! je veux voir mon enfant, moi! --Vous voyez, dit le mĆ©decin, comme vous vous emportez. Tant que vous serez ainsi, je m'opposerai Ć  ce que vous ayez votre enfant. Il ne suffit pas de la voir, il faut vivre pour elle. Quand vous serez raisonnable, je vous l'amĆØnerai moi-mĆŖme. La pauvre mĆØre courba la tĆŖte. --Monsieur le mĆ©decin, je vous demande pardon, je vous demande vraiment bien pardon. Autrefois, je n'aurais pas parlĆ© comme je viens de faire, il m'est arrivĆ© tant de malheurs que quelquefois je ne sais plus ce que je dis. Je comprends, vous craignez l'Ć©motion, j'attendrai tant que vous voudrez, mais je vous jure que cela ne m'aurait pas fait de mal de voir ma fille. Je la vois, je ne la quitte pas des yeux depuis hier au soir. Savez-vous? on me l'apporterait maintenant que je me mettrais Ć  lui parler doucement. VoilĆ  tout. Est-ce que ce n'est pas bien naturel que j'aie envie de voir mon enfant qu'on a Ć©tĆ© me chercher exprĆØs Ć  Montfermeil? Je ne suis pas en colĆØre. Je sais bien que je vais ĆŖtre heureuse. Toute la nuit j'ai vu des choses blanches et des personnes qui me souriaient. Quand monsieur le mĆ©decin voudra, il m'apportera ma Cosette. Je n'ai plus de fiĆØvre, puisque je suis guĆ©rie; je sens bien que je n'ai plus rien du tout; mais je vais faire comme si j'Ć©tais malade et ne pas bouger pour faire plaisir aux dames d'ici. Quand on verra que je suis bien tranquille, on dira: il faut lui donner son enfant. M. Madeleine s'Ć©tait assis sur une chaise qui Ć©tait Ć  cĆ“tĆ© du lit. Elle se tourna vers lui; elle faisait visiblement effort pour paraĆ®tre calme et Ā«bien sageĀ», comme elle disait dans cet affaiblissement de la maladie qui ressemble Ć  l'enfance, afin que, la voyant si paisible, on ne fĆ®t pas difficultĆ© de lui amener Cosette. Cependant, tout en se contenant, elle ne pouvait s'empĆŖcher d'adresser Ć  M. Madeleine mille questions. --Avez-vous fait un bon voyage, monsieur le maire? Oh! comme vous ĆŖtes bon d'avoir Ć©tĆ© me la chercher! Dites-moi seulement comment elle est. A-t-elle bien supportĆ© la route? HĆ©las! elle ne me reconnaĆ®tra pas! Depuis le temps, elle m'a oubliĆ©e, pauvre chou! Les enfants, cela n'a pas de mĆ©moire. C'est comme des oiseaux. Aujourd'hui cela voit une chose et demain une autre, et cela ne pense plus Ć  rien. Avait-elle du linge blanc seulement? Ces ThĆ©nardier la tenaient-ils proprement? Comment la nourrissait-on? Oh! comme j'ai souffert, si vous saviez! de me faire toutes ces questions-lĆ  dans le temps de ma misĆØre! Maintenant, c'est passĆ©. Je suis joyeuse. Oh! que je voudrais donc la voir! Monsieur le maire, l'avez-vous trouvĆ©e jolie? N'est-ce pas qu'elle est belle, ma fille? Vous devez avoir eu bien froid dans cette diligence! Est-ce qu'on ne pourrait pas l'amener rien qu'un petit moment? On la remporterait tout de suite aprĆØs. Dites! vous qui ĆŖtes le maĆ®tre, si vous vouliez! Il lui prit la main: --Cosette est belle, dit-il, Cosette se porte bien, vous la verrez bientĆ“t, mais apaisez-vous. Vous parlez trop vivement, et puis vous sortez vos bras du lit, et cela vous fait tousser. En effet, des quintes de toux interrompaient Fantine presque Ć  chaque mot. Fantine ne murmura pas, elle craignait d'avoir compromis par quelques plaintes trop passionnĆ©es la confiance qu'elle voulait inspirer, et elle se mit Ć  dire des paroles indiffĆ©rentes. --C'est assez joli, Montfermeil, n'est-ce-pas? L'Ć©tĆ©, on va y faire des parties de plaisir. Ces ThĆ©nardier font-ils de bonnes affaires? Il ne passe pas grand monde dans leur pays. C'est une espĆØce de gargote que cette auberge-lĆ . M. Madeleine lui tenait toujours la main, il la considĆ©rait avec anxiĆ©tĆ©; il Ć©tait Ć©vident qu'il Ć©tait venu pour lui dire des choses devant lesquelles sa pensĆ©e hĆ©sitait maintenant. Le mĆ©decin, sa visite faite, s'Ć©tait retirĆ©. La soeur Simplice Ć©tait seule restĆ©e auprĆØs d'eux. Cependant, au milieu de ce silence, Fantine s'Ć©cria: --Je l'entends! mon Dieu! je l'entends! Elle Ć©tendit le bras pour qu'on se tĆ»t autour d'elle, retint son souffle, et se mit Ć  Ć©couter avec ravissement. Il y avait un enfant qui jouait dans la cour; l'enfant de la portiĆØre ou d'une ouvriĆØre quelconque. C'est lĆ  un de ces hasards qu'on retrouve toujours et qui semblent faire partie de la mystĆ©rieuse mise en scĆØne des Ć©vĆ©nements lugubres. L'enfant, c'Ć©tait une petite fille, allait, venait, courait pour se rĆ©chauffer, riait et chantait Ć  haute voix. HĆ©las! Ć  quoi les jeux des enfants ne se mĆŖlent-ils pas! C'Ć©tait cette petite fille que Fantine entendait chanter. --Oh! reprit-elle, c'est ma Cosette! je reconnais sa voix! L'enfant s'Ć©loigna comme il Ć©tait venu, la voix s'Ć©teignit, Fantine Ć©couta encore quelque temps, puis son visage s'assombrit, et M. Madeleine l'entendit qui disait Ć  voix basse: --Comme ce mĆ©decin est mĆ©chant de ne pas me laisser voir ma fille! Il a une mauvaise figure, cet homme-lĆ ! Cependant le fond riant de ses idĆ©es revint. Elle continua de se parler Ć  elle-mĆŖme, la tĆŖte sur l'oreiller. --Comme nous allons ĆŖtre heureuses! Nous aurons un petit jardin, d'abord! M. Madeleine me l'a promis. Ma fille jouera dans le jardin. Elle doit savoir ses lettres maintenant. Je la ferai Ć©peler. Elle courra dans l'herbe aprĆØs les papillons. Je la regarderai. Et puis elle fera sa premiĆØre communion. Ah ƧƠ! quand fera-t-elle sa premiĆØre communion? Elle se mit Ć  compter sur ses doigts. --... Un, deux, trois, quatre... elle a sept ans. Dans cinq ans. Elle aura un voile blanc, des bas Ć  jour, elle aura l'air d'une petite femme. Ɣ ma bonne soeur, vous ne savez pas comme je suis bĆŖte, voilĆ  que je pense Ć  la premiĆØre communion de ma fille! Et elle se mit Ć  rire. Il avait quittĆ© la main de Fantine. Il Ć©coutait ces paroles comme on Ć©coute un vent qui souffle, les yeux Ć  terre, l'esprit plongĆ© dans des rĆ©flexions sans fond. Tout Ć  coup elle cessa de parler, cela lui fit lever machinalement la tĆŖte. Fantine Ć©tait devenue effrayante. Elle ne parlait plus, elle ne respirait plus; elle s'Ć©tait soulevĆ©e Ć  demi sur son sĆ©ant, son Ć©paule maigre sortait de sa chemise, son visage, radieux le moment d'auparavant, Ć©tait blĆŖme, et elle paraissait fixer sur quelque chose de formidable, devant elle, Ć  l'autre extrĆ©mitĆ© de la chambre, son oeil agrandi par la terreur. --Mon Dieu! s'Ć©cria-t-il. Qu'avez-vous, Fantine? Elle ne rĆ©pondit pas, elle ne quitta point des yeux l'objet quelconque qu'elle semblait voir, elle lui toucha le bras d'une main et de l'autre lui fit signe de regarder derriĆØre lui. Il se retourna, et vit Javert. Chapitre III Javert content Voici ce qui s'Ć©tait passĆ©. Minuit et demi venait de sonner, quand M. Madeleine Ć©tait sorti de la salle des assises d'Arras. Il Ć©tait rentrĆ© Ć  son auberge juste Ć  temps pour repartir par la malle-poste où l'on se rappelle qu'il avait retenu sa place. Un peu avant six heures du matin, il Ć©tait arrivĆ© Ć  Montreuil-sur-mer, et son premier soin avait Ć©tĆ© de jeter Ć  la poste sa lettre Ć  M. Laffitte, puis d'entrer Ć  l'infirmerie et de voir Fantine. Cependant, Ć  peine avait-il quittĆ© la salle d'audience de la cour d'assises, que l'avocat gĆ©nĆ©ral, revenu du premier saisissement, avait pris la parole pour dĆ©plorer l'acte de folie de l'honorable maire de Montreuil-sur-mer, dĆ©clarer que ses convictions n'Ć©taient en rien modifiĆ©es par cet incident bizarre qui s'Ć©claircirait plus tard, et requĆ©rir, en attendant, la condamnation de ce Champmathieu, Ć©videmment le vrai Jean Valjean. La persistance de l'avocat gĆ©nĆ©ral Ć©tait visiblement en contradiction avec le sentiment de tous, du public, de la cour et du jury. Le dĆ©fenseur avait eu peu de peine Ć  rĆ©futer cette harangue et Ć  Ć©tablir que, par suite des rĆ©vĆ©lations de M. Madeleine, c'est-Ć -dire du vrai Jean Valjean, la face de l'affaire Ć©tait bouleversĆ©e de fond en comble, et que le jury n'avait plus devant les yeux qu'un innocent. L'avocat avait tirĆ© de lĆ  quelques Ć©piphonĆØmes, malheureusement peu neufs, sur les erreurs judiciaires, etc., etc., le prĆ©sident dans son rĆ©sumĆ© s'Ć©tait joint au dĆ©fenseur, et le jury en quelques minutes avait mis hors de cause Champmathieu. Cependant il fallait un Jean Valjean Ć  l'avocat gĆ©nĆ©ral, et, n'ayant plus Champmathieu, il prit Madeleine. ImmĆ©diatement aprĆØs la mise en libertĆ© de Champmathieu, l'avocat gĆ©nĆ©ral s'enferma avec le prĆ©sident. Ils confĆ©rĆØrent Ā«de la nĆ©cessitĆ© de se saisir de la personne de M. le maire de Montreuil-sur-merĀ». Cette phrase, où il y a beaucoup de _de_, est de M. l'avocat gĆ©nĆ©ral, entiĆØrement Ć©crite de sa main sur la minute de son rapport au procureur gĆ©nĆ©ral. La premiĆØre Ć©motion passĆ©e, le prĆ©sident fit peu d'objections. Il fallait bien que justice eĆ»t son cours. Et puis, pour tout dire, quoique le prĆ©sident fĆ»t homme bon et assez intelligent, il Ć©tait en mĆŖme temps fort royaliste et presque ardent, et il avait Ć©tĆ© choquĆ© que le maire de Montreuil-sur-mer, en parlant du dĆ©barquement Ć  Cannes, eĆ»t dit l'_empereur_ et non _Buonaparte_. L'ordre d'arrestation fut donc expĆ©diĆ©. L'avocat gĆ©nĆ©ral l'envoya Ć  Montreuil-sur-mer par un exprĆØs, Ć  franc Ć©trier, et en chargea l'inspecteur de police Javert. On sait que Javert Ć©tait revenu Ć  Montreuil-sur-mer immĆ©diatement aprĆØs avoir fait sa dĆ©position. Javert se levait au moment où l'exprĆØs lui remit l'ordre d'arrestation et le mandat d'amener. L'exprĆØs Ć©tait lui-mĆŖme un homme de police fort entendu qui, en deux mots, mit Javert au fait de ce qui Ć©tait arrivĆ© Ć  Arras. L'ordre d'arrestation, signĆ© de l'avocat gĆ©nĆ©ral, Ć©tait ainsi conƧu:--L'inspecteur Javert apprĆ©hendera au corps le sieur Madeleine, maire de Montreuil-sur-mer, qui, dans l'audience de ce jour, a Ć©tĆ© reconnu pour ĆŖtre le forƧat libĆ©rĆ© Jean Valjean. Quelqu'un qui n'eĆ»t pas connu Javert et qui l'eĆ»t vu au moment où il pĆ©nĆ©tra dans l'antichambre de l'infirmerie n'eĆ»t pu rien deviner de ce qui se passait, et lui eĆ»t trouvĆ© l'air le plus ordinaire du monde. Il Ć©tait froid, calme, grave, avait ses cheveux gris parfaitement lissĆ©s sur les tempes et venait de monter l'escalier avec sa lenteur habituelle. Quelqu'un qui l'eĆ»t connu Ć  fond et qui l'eĆ»t examinĆ© attentivement eĆ»t frĆ©mi. La boucle de son col de cuir, au lieu d'ĆŖtre sur sa nuque, Ć©tait sur son oreille gauche. Ceci rĆ©vĆ©lait une agitation inouĆÆe. Javert Ć©tait un caractĆØre complet, ne laissant faire de pli ni Ć  son devoir, ni Ć  son uniforme; mĆ©thodique avec les scĆ©lĆ©rats, rigide avec les boutons de son habit. Pour qu'il eĆ»t mal mis la boucle de son col, il fallait qu'il y eĆ»t en lui une de ces Ć©motions qu'on pourrait appeler des tremblements de terre intĆ©rieurs. Il Ć©tait venu simplement, avait requis un caporal et quatre soldats au poste voisin, avait laissĆ© les soldats dans la cour, et s'Ć©tait fait indiquer la chambre de Fantine par la portiĆØre sans dĆ©fiance, accoutumĆ©e qu'elle Ć©tait Ć  voir des gens armĆ©s demander monsieur le maire. ArrivĆ© Ć  la chambre de Fantine, Javert tourna la clef, poussa la porte avec une douceur de garde-malade ou de mouchard, et entra. ƀ proprement parler, il n'entra pas. Il se tint debout dans la porte entrebĆ¢illĆ©e, le chapeau sur la tĆŖte, la main gauche dans sa redingote fermĆ©e jusqu'au menton. Dans le pli du coude on pouvait voir le pommeau de plomb de son Ć©norme canne, laquelle disparaissait derriĆØre lui. Il resta ainsi prĆØs d'une minute sans qu'on s'aperƧƻt de sa prĆ©sence. Tout Ć  coup Fantine leva les yeux, le vit, et fit retourner M. Madeleine. ƀ l'instant où le regard de Madeleine rencontra le regard de Javert, Javert, sans bouger, sans remuer, sans approcher, devint Ć©pouvantable. Aucun sentiment humain ne rĆ©ussit Ć  ĆŖtre effroyable comme la joie. Ce fut le visage d'un dĆ©mon qui vient de retrouver son damnĆ©. La certitude de tenir enfin Jean Valjean fit apparaĆ®tre sur sa physionomie tout ce qu'il avait dans l'Ć¢me. Le fond remuĆ© monta Ć  la surface. L'humiliation d'avoir un peu perdu la piste et de s'ĆŖtre mĆ©pris quelques minutes sur ce Champmathieu, s'effaƧait sous l'orgueil d'avoir si bien devinĆ© d'abord et d'avoir eu si longtemps un instinct juste. Le contentement de Javert Ć©clata dans son attitude souveraine. La difformitĆ© du triomphe s'Ć©panouit sur ce front Ć©troit. Ce fut tout le dĆ©ploiement d'horreur que peut donner une figure satisfaite. Javert en ce moment Ć©tait au ciel. Sans qu'il s'en rendit nettement compte, mais pourtant avec une intuition confuse de sa nĆ©cessitĆ© et de son succĆØs, il personnifiait, lui Javert, la justice, la lumiĆØre et la vĆ©ritĆ© dans leur fonction cĆ©leste d'Ć©crasement du mal. Il avait derriĆØre lui et autour de lui, Ć  une profondeur infinie, l'autoritĆ©, la raison, la chose jugĆ©e, la conscience lĆ©gale, la vindicte publique, toutes les Ć©toiles; il protĆ©geait l'ordre, il faisait sortir de la loi la foudre, il vengeait la sociĆ©tĆ©, il prĆŖtait main-forte Ć  l'absolu; il se dressait dans une gloire; il y avait dans sa victoire un reste de dĆ©fi et de combat; debout, altier, Ć©clatant, il Ć©talait en plein azur la bestialitĆ© surhumaine d'un archange fĆ©roce; l'ombre redoutable de l'action qu'il accomplissait faisait visible Ć  son poing crispĆ© le vague flamboiement de l'Ć©pĆ©e sociale; heureux et indignĆ©, il tenait sous son talon le crime, le vice, la rĆ©bellion, la perdition, l'enfer, il rayonnait, il exterminait, il souriait et il y avait une incontestable grandeur dans ce saint Michel monstrueux. Javert, effroyable, n'avait rien d'ignoble. La probitĆ©, la sincĆ©ritĆ©, la candeur, la conviction, l'idĆ©e du devoir, sont des choses qui, en se trompant, peuvent devenir hideuses, mais qui, mĆŖme hideuses, restent grandes; leur majestĆ©, propre Ć  la conscience humaine, persiste dans l'horreur. Ce sont des vertus qui ont un vice, l'erreur. L'impitoyable joie honnĆŖte d'un fanatique en pleine atrocitĆ© conserve on ne sait quel rayonnement lugubrement vĆ©nĆ©rable. Sans qu'il s'en doutĆ¢t, Javert, dans son bonheur formidable, Ć©tait Ć  plaindre comme tout ignorant qui triomphe. Rien n'Ć©tait poignant et terrible comme cette figure où se montrait ce qu'on pourrait appeler tout le mauvais du bon. Chapitre IV L'autoritĆ© reprend ses droits La Fantine n'avait point vu Javert depuis le jour où M. le maire l'avait arrachĆ©e Ć  cet homme. Son cerveau malade ne se rendit compte de rien, seulement elle ne douta pas qu'il ne revint la chercher. Elle ne put supporter cette figure affreuse, elle se sentit expirer, elle cacha son visage de ses deux mains et cria avec angoisse: --Monsieur Madeleine, sauvez-moi! Jean Valjean--nous ne le nommerons plus dĆ©sormais autrement--s'Ć©tait levĆ©. Il dit Ć  Fantine de sa voix la plus douce et la plus calme: --Soyez tranquille. Ce n'est pas pour vous qu'il vient. Puis il s'adressa Ć  Javert et lui dit: --Je sais ce que vous voulez. Javert rĆ©pondit: --Allons, vite! Il y eut dans l'inflexion qui accompagna ces deux mots je ne sais quoi de fauve et de frĆ©nĆ©tique. Javert ne dit pas: Ā«Allons, vite!Ā» il dit: Ā«Allonouaite!Ā» Aucune orthographe ne pourrait rendre l'accent dont cela fut prononcĆ©; ce n'Ć©tait plus une parole humaine, c'Ć©tait un rugissement. Il ne fit point comme d'habitude; il n'entra point en matiĆØre; il n'exhiba point de mandat d'amener. Pour lui, Jean Valjean Ć©tait une sorte de combattant mystĆ©rieux et insaisissable, un lutteur tĆ©nĆ©breux qu'il Ć©treignait depuis cinq ans sans pouvoir le renverser. Cette arrestation n'Ć©tait pas un commencement, mais une fin. Il se borna Ć  dire: Ā«Allons, vite!Ā» En parlant ainsi, il ne fit point un pas; il lanƧa sur Jean Valjean ce regard qu'il jetait comme un crampon, et avec lequel il avait coutume de tirer violemment les misĆ©rables Ć  lui. C'Ć©tait ce regard que la Fantine avait senti pĆ©nĆ©trer jusque dans la moelle de ses os deux mois auparavant. Au cri de Javert, Fantine avait rouvert les yeux. Mais M. le maire Ć©tait lĆ . Que pouvait-elle craindre? Javert avanƧa au milieu de la chambre et cria: --Ah ƧƠ! viendras-tu? La malheureuse regarda autour d'elle. Il n'y avait personne que la religieuse et monsieur le maire. ƀ qui pouvait s'adresser ce tutoiement abject? elle seulement. Elle frissonna. Alors elle vit une chose inouĆÆe, tellement inouĆÆe que jamais rien de pareil ne lui Ć©tait apparu dans les plus noirs dĆ©lires de la fiĆØvre. Elle vit le mouchard Javert saisir au collet monsieur le maire; elle vit monsieur le maire courber la tĆŖte. Il lui sembla que le monde s'Ć©vanouissait. Javert, en effet, avait pris Jean Valjean au collet. --Monsieur le maire! cria Fantine. Javert Ć©clata de rire, de cet affreux rire qui lui dĆ©chaussait toutes les dents. --Il n'y a plus de monsieur le maire ici! Jean Valjean n'essaya pas de dĆ©ranger la main qui tenait le col de sa redingote. Il dit: --Javert.... Javert l'interrompit: --Appelle-moi monsieur l'inspecteur. --Monsieur, reprit Jean Valjean, je voudrais vous dire un mot en particulier. --Tout haut! parle tout haut! rĆ©pondit Javert; on me parle tout haut Ć  moi! Jean Valjean continua en baissant la voix: --C'est une priĆØre que j'ai Ć  vous faire.... --Je te dis de parler tout haut. --Mais cela ne doit ĆŖtre entendu que de vous seul.... --Qu'est-ce que cela me fait? je n'Ć©coute pas! Jean Valjean se tourna vers lui et lui dit rapidement et trĆØs bas: --Accordez-moi trois jours! trois jours pour aller chercher l'enfant de cette malheureuse femme! Je payerai ce qu'il faudra. Vous m'accompagnerez si vous voulez. --Tu veux rire! cria Javert. Ah ƧƠ! je ne te croyais pas bĆŖte! Tu me demandes trois jours pour t'en aller! Tu dis que c'est pour aller chercher l'enfant de cette fille! Ah! ah! c'est bon! voilĆ  qui est bon! Fantine eut un tremblement. --Mon enfant! s'Ć©cria-t-elle, aller chercher mon enfant! Elle n'est donc pas ici! Ma soeur, rĆ©pondez-moi, où est Cosette? Je veux mon enfant! Monsieur Madeleine! monsieur le maire! Javert frappa du pied. --VoilĆ  l'autre, Ć  prĆ©sent! Te tairas-tu, drĆ“lesse! Gredin de pays où les galĆ©riens sont magistrats et où les filles publiques sont soignĆ©es comme des comtesses! Ah mais! tout Ƨa va changer; il Ć©tait temps! Il regarda fixement Fantine et ajouta en reprenant Ć  poignĆ©e la cravate, la chemise et le collet de Jean Valjean: --Je te dis qu'il n'y a point de monsieur Madeleine et qu'il n'y a point de monsieur le maire. Il y a un voleur, il y a un brigand, il y a un forƧat appelĆ© Jean Valjean! c'est lui que je tiens! voilĆ  ce qu'il y a! Fantine se dressa en sursaut, appuyĆ©e sur ses bras roides et sur ses deux mains, elle regarda Jean Valjean, elle regarda Javert, elle regarda la religieuse, elle ouvrit la bouche comme pour parler, un rĆ¢le sortit du fond de sa gorge, ses dents claquĆØrent, elle Ć©tendit les bras avec angoisse, ouvrant convulsivement les mains, et cherchant autour d'elle comme quelqu'un qui se noie, puis elle s'affaissa subitement sur l'oreiller. Sa tĆŖte heurta le chevet du lit et vint retomber sur sa poitrine, la bouche bĆ©ante, les yeux ouverts et Ć©teints. Elle Ć©tait morte. Jean Valjean posa sa main sur la main de Javert qui le tenait, et l'ouvrit comme il eĆ»t ouvert la main d'un enfant, puis il dit Ć  Javert: --Vous avez tuĆ© cette femme. --Finirons-nous! cria Javert furieux. Je ne suis pas ici pour entendre des raisons. Ɖconomisons tout Ƨa. La garde est en bas. Marchons tout de suite, ou les poucettes! Il y avait dans un coin de la chambre un vieux lit en fer en assez mauvais Ć©tat qui servait de lit de camp aux soeurs quand elles veillaient. Jean Valjean alla Ć  ce lit, disloqua en un clin d'oeil le chevet dĆ©jĆ  fort dĆ©labrĆ©, chose facile Ć  des muscles comme les siens, saisit Ć  poigne-main la maĆ®tresse-tringle, et considĆ©ra Javert. Javert recula vers la porte. Jean Valjean, sa barre de fer au poing, marcha lentement vers le lit de Fantine. Quand il y fut parvenu, il se retourna, et dit Ć  Javert d'une voix qu'on entendait Ć  peine: --Je ne vous conseille pas de me dĆ©ranger en ce moment. Ce qui est certain, c'est que Javert tremblait. Il eut l'idĆ©e d'aller appeler la garde, mais Jean Valjean pouvait profiter de cette minute pour s'Ć©vader. Il resta donc, saisit sa canne par le petit bout, et s'adossa au chambranle de la porte sans quitter du regard Jean Valjean. Jean Valjean posa son coude sur la pomme du chevet du lit et son front sur sa main, et se mit Ć  contempler Fantine immobile et Ć©tendue. Il demeura ainsi, absorbĆ©, muet, et ne songeant Ć©videmment plus Ć  aucune chose de cette vie. Il n'y avait plus rien sur son visage et dans son attitude qu'une inexprimable pitiĆ©. AprĆØs quelques instants de cette rĆŖverie, il se pencha vers Fantine et lui parla Ć  voix basse. Que lui dit-il? Que pouvait dire cet homme qui Ć©tait rĆ©prouvĆ© Ć  cette femme qui Ć©tait morte? Qu'Ć©tait-ce que ces paroles? Personne sur la terre ne les a entendues. La morte les entendit-elle? Il y a des illusions touchantes qui sont peut-ĆŖtre des rĆ©alitĆ©s sublimes. Ce qui est hors de doute, c'est que la soeur Simplice, unique tĆ©moin de la chose qui se passait, a souvent racontĆ© qu'au moment où Jean Valjean parla Ć  l'oreille de Fantine, elle vit distinctement poindre un ineffable sourire sur ces lĆØvres pĆ¢les et dans ces prunelles vagues, pleines de l'Ć©tonnement du tombeau. Jean Valjean prit dans ses deux mains la tĆŖte de Fantine et l'arrangea sur l'oreiller comme une mĆØre eĆ»t fait pour son enfant, il lui rattacha le cordon de sa chemise et rentra ses cheveux sous son bonnet. Cela fait, il lui ferma les yeux. La face de Fantine en cet instant semblait Ć©trangement Ć©clairĆ©e. La mort, c'est l'entrĆ©e dans la grande lueur. La main de Fantine pendait hors du lit. Jean Valjean s'agenouilla devant cette main, la souleva doucement, et la baisa. Puis il se redressa, et, se tournant vers Javert: --Maintenant, dit-il, je suis Ć  vous. Chapitre V Tombeau convenable Javert dĆ©posa Jean Valjean Ć  la prison de la ville. L'arrestation de M. Madeleine produisit Ć  Montreuil-sur-mer une sensation, ou pour mieux dire une commotion extraordinaire. Nous sommes triste de ne pouvoir dissimuler que sur ce seul mot: _c'Ć©tait un galĆ©rien_, tout le monde Ć  peu prĆØs l'abandonna. En moins de deux heures tout le bien qu'il avait fait fut oubliĆ©, et ce ne fut plus Ā«qu'un galĆ©rienĀ». Il est juste de dire qu'on ne connaissait pas encore les dĆ©tails de l'Ć©vĆ©nement d'Arras. Toute la journĆ©e on entendait dans toutes les parties de la ville des conversations comme celle-ci: --Vous ne savez pas? c'Ć©tait un forƧat libĆ©rĆ©! Qui Ƨa?--Le maire.--Bah! M. Madeleine?--Oui. Vraiment?--Il ne s'appelait pas Madeleine, il a un affreux nom, BĆ©jean, Bojean, Boujean.--Ah, mon Dieu!--Il est arrĆŖtĆ©.--ArrĆŖtĆ©!--En prison Ć  la prison de la ville, en attendant qu'on le transfĆØre.--Qu'on le transfĆØre! On va le transfĆ©rer! Où va-t-on le transfĆ©rer?--Il va passer aux assises pour un vol de grand chemin qu'il a fait autrefois.--Eh bien! je m'en doutais. Cet homme Ć©tait trop bon, trop parfait, trop confit. Il refusait la croix, il donnait des sous Ć  tous les petits drĆ“les qu'il rencontrait. J'ai toujours pensĆ© qu'il y avait lĆ -dessous quelque mauvaise histoire. Ā«Les salonsĀ» surtout abondĆØrent dans ce sens. Une vieille dame, abonnĆ©e au _Drapeau blanc_, fit cette rĆ©flexion dont il est presque impossible de sonder la profondeur: --Je n'en suis pas fĆ¢chĆ©e. Cela apprendra aux buonapartistes! C'est ainsi que ce fantĆ“me qui s'Ć©tait appelĆ© M. Madeleine se dissipa Ć  Montreuil-sur-mer. Trois ou quatre personnes seulement dans toute la ville restĆØrent fidĆØles Ć  cette mĆ©moire. La vieille portiĆØre qui l'avait servi fut du nombre. Le soir de ce mĆŖme jour, cette digne vieille Ć©tait assise dans sa loge, encore tout effarĆ©e et rĆ©flĆ©chissant tristement. La fabrique avait Ć©tĆ© fermĆ©e toute la journĆ©e, la porte cochĆØre Ć©tait verrouillĆ©e, la rue Ć©tait dĆ©serte. Il n'y avait dans la maison que deux religieuses, soeur PerpĆ©tue et soeur Simplice, qui veillaient prĆØs du corps de Fantine. Vers l'heure où M. Madeleine avait coutume de rentrer, la brave portiĆØre se leva machinalement, prit la clef de la chambre de M. Madeleine dans un tiroir et le bougeoir dont il se servait tous les soirs pour monter chez lui, puis elle accrocha la clef au clou où il la prenait d'habitude, et plaƧa le bougeoir Ć  cĆ“tĆ©, comme si elle l'attendait. Ensuite elle se rassit sur sa chaise et se remit Ć  songer. La pauvre bonne vieille avait fait tout cela sans en avoir conscience. Ce ne fut qu'au bout de plus de deux heures qu'elle sortit de sa rĆŖverie et s'Ć©cria: Ā«Tiens! mon bon Dieu JĆ©sus! moi qui ai mis sa clef au clou!Ā» En ce moment la vitre de la loge s'ouvrit, une main passa par l'ouverture, saisit la clef et le bougeoir et alluma la bougie Ć  la chandelle qui brĆ»lait. La portiĆØre leva les yeux et resta bĆ©ante, avec un cri dans le gosier qu'elle retint. Elle connaissait cette main, ce bras, cette manche de redingote. C'Ć©tait M. Madeleine. Elle fut quelques secondes avant de pouvoir parler, saisie, comme elle le disait elle-mĆŖme plus tard en racontant son aventure. --Mon Dieu, monsieur le maire, s'Ć©cria-t-elle enfin, je vous croyais.... Elle s'arrĆŖta, la fin de sa phrase eĆ»t manquĆ© de respect au commencement. Jean Valjean Ć©tait toujours pour elle monsieur le maire. Il acheva sa pensĆ©e. --En prison, dit-il. J'y Ć©tais. J'ai brisĆ© un barreau d'une fenĆŖtre, je me suis laissĆ© tomber du haut d'un toit, et me voici. Je monte Ć  ma chambre, allez me chercher la soeur Simplice. Elle est sans doute prĆØs de cette pauvre femme. La vieille obĆ©it en toute hĆ¢te. Il ne lui fit aucune recommandation; il Ć©tait bien sĆ»r qu'elle le garderait mieux qu'il ne se garderait lui-mĆŖme. On n'a jamais su comment il avait rĆ©ussi Ć  pĆ©nĆ©trer dans la cour sans faire ouvrir la porte cochĆØre. Il avait, et portait toujours sur lui, un passe-partout qui ouvrait une petite porte latĆ©rale; mais on avait dĆ» le fouiller et lui prendre son passe-partout. Ce point n'a pas Ć©tĆ© Ć©clairci. Il monta l'escalier qui conduisait Ć  sa chambre. ArrivĆ© en haut, il laissa son bougeoir sur les derniĆØres marches de l'escalier, ouvrit sa porte avec peu de bruit, et alla fermer Ć  tĆ¢tons sa fenĆŖtre et son volet, puis il revint prendre sa bougie et rentra dans sa chambre. La prĆ©caution Ć©tait utile; on se souvient que sa fenĆŖtre pouvait ĆŖtre aperƧue de la rue. Il jeta un coup d'oeil autour de lui, sur sa table, sur sa chaise, sur son lit qui n'avait pas Ć©tĆ© dĆ©fait depuis trois jours. Il ne restait aucune trace du dĆ©sordre de l'avant-derniĆØre nuit. La portiĆØre avait Ā«fait la chambreĀ». Seulement elle avait ramassĆ© dans les cendres et posĆ© proprement sur la table les deux bouts du bĆ¢ton ferrĆ© et la piĆØce de quarante sous noircie par le feu. Il prit une feuille de papier sur laquelle il Ć©crivit: _Voici les deux bouts de mon bĆ¢ton ferrĆ© et la piĆØce de quarante sous volĆ©e Ć  Petit-Gervais dont j'ai parlĆ© Ć  la cour d'assises_, et il posa sur cette feuille la piĆØce d'argent et les deux morceaux de fer, de faƧon que ce fĆ»t la premiĆØre chose qu'on aperƧƻt en entrant dans la chambre. Il tira d'une armoire une vieille chemise Ć  lui qu'il dĆ©chira. Cela fit quelques morceaux de toile dans lesquels il emballa les deux flambeaux d'argent. Du reste il n'avait ni hĆ¢te ni agitation, et, tout en emballant les chandeliers de l'Ć©vĆŖque, il mordait dans un morceau de pain noir. Il est probable que c'Ć©tait le pain de la prison qu'il avait emportĆ© en s'Ć©vadant. Ceci a Ć©tĆ© constatĆ© par les miettes de pain qui furent trouvĆ©es sur le carreau de la chambre, lorsque la justice plus tard fit une perquisition. On frappa deux petits coups Ć  la porte. --Entrez, dit-il. C'Ć©tait la soeur Simplice. Elle Ć©tait pĆ¢le, elle avait les yeux rouges, la chandelle qu'elle tenait vacillait dans sa main. Les violences de la destinĆ©e ont cela de particulier que, si perfectionnĆ©s ou si refroidis que nous soyons, elles nous tirent du fond des entrailles la nature humaine et la forcent de reparaĆ®tre au dehors. Dans les Ć©motions de cette journĆ©e, la religieuse Ć©tait redevenue femme. Elle avait pleurĆ©, et elle tremblait. Jean Valjean venait d'Ć©crire quelques lignes sur un papier qu'il tendit Ć  la religieuse en disant: --Ma soeur, vous remettrez ceci Ć  monsieur le curĆ©. Le papier Ć©tait dĆ©pliĆ©. Elle y jeta les yeux. --Vous pouvez lire, dit-il. Elle lut.--Ā«Je prie monsieur le curĆ© de veiller sur tout ce que je laisse ici. Il voudra bien payer lĆ -dessus les frais de mon procĆØs et l'enterrement de la femme qui est morte aujourd'hui. Le reste sera aux pauvres.Ā» La soeur voulut parler, mais elle put Ć  peine balbutier quelques sons inarticulĆ©s. Elle parvint cependant Ć  dire: --Est-ce que monsieur le maire ne dĆ©sire pas revoir une derniĆØre fois cette pauvre malheureuse? --Non, dit-il, on est Ć  ma poursuite, on n'aurait qu'Ć  m'arrĆŖter dans sa chambre, cela la troublerait. Il achevait Ć  peine qu'un grand bruit se fit dans l'escalier. Ils entendirent un tumulte de pas qui montaient, et la vieille portiĆØre qui disait de sa voix la plus haute et la plus perƧante: --Mon bon monsieur, je vous jure le bon Dieu qu'il n'est entrĆ© personne ici de toute la journĆ©e ni de toute la soirĆ©e, que mĆŖme je n'ai pas quittĆ© ma porte! Un homme rĆ©pondit: --Cependant il y a de la lumiĆØre dans cette chambre. Ils reconnurent la voix de Javert. La chambre Ć©tait disposĆ©e de faƧon que la porte en s'ouvrant masquait l'angle du mur Ć  droite. Jean Valjean souffla la bougie et se mit dans cet angle. La soeur Simplice tomba Ć  genoux prĆØs de la table. La porte s'ouvrit. Javert entra. On entendait le chuchotement de plusieurs hommes et les protestations de la portiĆØre dans le corridor. La religieuse ne leva pas les yeux. Elle priait. La chandelle Ć©tait sur la cheminĆ©e et ne donnait que peu de clartĆ©. Javert aperƧut la soeur et s'arrĆŖta interdit. On se rappelle que le fond mĆŖme de Javert, son Ć©lĆ©ment, son milieu respirable, c'Ć©tait la vĆ©nĆ©ration de toute autoritĆ©. Il Ć©tait tout d'une piĆØce et n'admettait ni objection, ni restriction. Pour lui, bien entendu, l'autoritĆ© ecclĆ©siastique Ć©tait la premiĆØre de toutes. Il Ć©tait religieux, superficiel et correct sur ce point comme sur tous. ƀ ses yeux un prĆŖtre Ć©tait un esprit qui ne se trompe pas, une religieuse Ć©tait une crĆ©ature qui ne pĆØche pas. C'Ć©taient des Ć¢mes murĆ©es Ć  ce monde avec une seule porte qui ne s'ouvrait jamais que pour laisser sortir la vĆ©ritĆ©. En apercevant la soeur, son premier mouvement fut de se retirer. Cependant il y avait aussi un autre devoir qui le tenait, et qui le poussait impĆ©rieusement en sens inverse. Son second mouvement fut de rester, et de hasarder au moins une question. C'Ć©tait cette soeur Simplice qui n'avait menti de sa vie. Javert le savait, et la vĆ©nĆ©rait particuliĆØrement Ć  cause de cela. --Ma soeur, dit-il, ĆŖtes-vous seule dans cette chambre? Il y eut un moment affreux pendant lequel la pauvre portiĆØre se sentit dĆ©faillir. La soeur leva les yeux et rĆ©pondit: --Oui. --Ainsi, reprit Javert, excusez-moi si j'insiste, c'est mon devoir, vous n'avez pas vu ce soir une personne, un homme. Il s'est Ć©vadĆ©, nous le cherchons, ce nommĆ© Jean Valjean, vous ne l'avez pas vu? La soeur rĆ©pondit: --Non. Elle mentit. Elle mentit deux fois de suite, coup sur coup, sans hĆ©siter, rapidement, comme on se dĆ©voue. --Pardon, dit Javert, et il se retira en saluant profondĆ©ment. Ɣ sainte fille! vous n'ĆŖtes plus de ce monde depuis beaucoup d'annĆ©es; vous avez rejoint dans la lumiĆØre vos soeurs les vierges et vos frĆØres les anges; que ce mensonge vous soit comptĆ© dans le paradis! L'affirmation de la soeur fut pour Javert quelque chose de si dĆ©cisif qu'il ne remarqua mĆŖme pas la singularitĆ© de cette bougie qu'on venait de souffler et qui fumait sur la table. Une heure aprĆØs, un homme, marchant Ć  travers les arbres et les brumes, s'Ć©loignait rapidement de Montreuil-sur-mer dans la direction de Paris. Cet homme Ć©tait Jean Valjean. Il a Ć©tĆ© Ć©tabli, par le tĆ©moignage de deux ou trois rouliers qui l'avaient rencontrĆ©, qu'il portait un paquet et qu'il Ć©tait vĆŖtu d'une blouse. Où avait-il pris cette blouse? On ne l'a jamais su. Cependant un vieux ouvrier Ć©tait mort quelques jours auparavant Ć  l'infirmerie de la fabrique, ne laissant que sa blouse. C'Ć©tait peut-ĆŖtre celle-lĆ . Un dernier mot sur Fantine. Nous avons tous une mĆØre, la terre. On rendit Fantine Ć  cette mĆØre. Le curĆ© crut bien faire, et fit bien peut-ĆŖtre, en rĆ©servant, sur ce que Jean Valjean avait laissĆ©, le plus d'argent possible aux pauvres. AprĆØs tout, de qui s'agissait-il? d'un forƧat et d'une fille publique. C'est pourquoi il simplifia l'enterrement de Fantine, et le rĆ©duisit Ć  ce strict nĆ©cessaire qu'on appelle la fosse commune. Fantine fut donc enterrĆ©e dans ce coin gratis du cimetiĆØre qui est Ć  tous et Ć  personne, et où l'on perd les pauvres. Heureusement Dieu sait où retrouver l'Ć¢me. On coucha Fantine dans les tĆ©nĆØbres parmi les premiers os venus; elle subit la promiscuitĆ© des cendres. Elle fut jetĆ©e Ć  la fosse publique. Sa tombe ressembla Ć  son lit. End of the Project Gutenberg EBook of Les misĆ©rables Tome I, by Victor Hugo *** END OF THIS PROJECT GUTENBERG EBOOK LES MISƉRABLES TOME I *** ***** This file should be named 17489-8.txt or 17489-8.zip ***** This and all associated files of various formats will be found in: http://www.gutenberg.org/1/7/4/8/17489/ Produced by www.ebooksgratuits.com and Chuck Greif Updated editions will replace the previous one--the old editions will be renamed. Creating the works from public domain print editions means that no one owns a United States copyright in these works, so the Foundation (and you!) can copy and distribute it in the United States without permission and without paying copyright royalties. Special rules, set forth in the General Terms of Use part of this license, apply to copying and distributing Project Gutenberg-tm electronic works to protect the PROJECT GUTENBERG-tm concept and trademark. Project Gutenberg is a registered trademark, and may not be used if you charge for the eBooks, unless you receive specific permission. If you do not charge anything for copies of this eBook, complying with the rules is very easy. You may use this eBook for nearly any purpose such as creation of derivative works, reports, performances and research. They may be modified and printed and given away--you may do practically ANYTHING with public domain eBooks. Redistribution is subject to the trademark license, especially commercial redistribution. *** START: FULL LICENSE *** THE FULL PROJECT GUTENBERG LICENSE PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK To protect the Project Gutenberg-tm mission of promoting the free distribution of electronic works, by using or distributing this work (or any other work associated in any way with the phrase "Project Gutenberg"), you agree to comply with all the terms of the Full Project Gutenberg-tm License (available with this file or online at http://gutenberg.org/license). Section 1. General Terms of Use and Redistributing Project Gutenberg-tm electronic works 1.A. By reading or using any part of this Project Gutenberg-tm electronic work, you indicate that you have read, understand, agree to and accept all the terms of this license and intellectual property (trademark/copyright) agreement. If you do not agree to abide by all the terms of this agreement, you must cease using and return or destroy all copies of Project Gutenberg-tm electronic works in your possession. If you paid a fee for obtaining a copy of or access to a Project Gutenberg-tm electronic work and you do not agree to be bound by the terms of this agreement, you may obtain a refund from the person or entity to whom you paid the fee as set forth in paragraph 1.E.8. 1.B. "Project Gutenberg" is a registered trademark. It may only be used on or associated in any way with an electronic work by people who agree to be bound by the terms of this agreement. There are a few things that you can do with most Project Gutenberg-tm electronic works even without complying with the full terms of this agreement. See paragraph 1.C below. There are a lot of things you can do with Project Gutenberg-tm electronic works if you follow the terms of this agreement and help preserve free future access to Project Gutenberg-tm electronic works. See paragraph 1.E below. 1.C. The Project Gutenberg Literary Archive Foundation ("the Foundation" or PGLAF), owns a compilation copyright in the collection of Project Gutenberg-tm electronic works. Nearly all the individual works in the collection are in the public domain in the United States. If an individual work is in the public domain in the United States and you are located in the United States, we do not claim a right to prevent you from copying, distributing, performing, displaying or creating derivative works based on the work as long as all references to Project Gutenberg are removed. Of course, we hope that you will support the Project Gutenberg-tm mission of promoting free access to electronic works by freely sharing Project Gutenberg-tm works in compliance with the terms of this agreement for keeping the Project Gutenberg-tm name associated with the work. You can easily comply with the terms of this agreement by keeping this work in the same format with its attached full Project Gutenberg-tm License when you share it without charge with others. 1.D. The copyright laws of the place where you are located also govern what you can do with this work. Copyright laws in most countries are in a constant state of change. If you are outside the United States, check the laws of your country in addition to the terms of this agreement before downloading, copying, displaying, performing, distributing or creating derivative works based on this work or any other Project Gutenberg-tm work. The Foundation makes no representations concerning the copyright status of any work in any country outside the United States. 1.E. Unless you have removed all references to Project Gutenberg: 1.E.1. The following sentence, with active links to, or other immediate access to, the full Project Gutenberg-tm License must appear prominently whenever any copy of a Project Gutenberg-tm work (any work on which the phrase "Project Gutenberg" appears, or with which the phrase "Project Gutenberg" is associated) is accessed, displayed, performed, viewed, copied or distributed: This eBook is for the use of anyone anywhere at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included with this eBook or online at www.gutenberg.org 1.E.2. If an individual Project Gutenberg-tm electronic work is derived from the public domain (does not contain a notice indicating that it is posted with permission of the copyright holder), the work can be copied and distributed to anyone in the United States without paying any fees or charges. If you are redistributing or providing access to a work with the phrase "Project Gutenberg" associated with or appearing on the work, you must comply either with the requirements of paragraphs 1.E.1 through 1.E.7 or obtain permission for the use of the work and the Project Gutenberg-tm trademark as set forth in paragraphs 1.E.8 or 1.E.9. 1.E.3. If an individual Project Gutenberg-tm electronic work is posted with the permission of the copyright holder, your use and distribution must comply with both paragraphs 1.E.1 through 1.E.7 and any additional terms imposed by the copyright holder. Additional terms will be linked to the Project Gutenberg-tm License for all works posted with the permission of the copyright holder found at the beginning of this work. 1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm License terms from this work, or any files containing a part of this work or any other work associated with Project Gutenberg-tm. 1.E.5. Do not copy, display, perform, distribute or redistribute this electronic work, or any part of this electronic work, without prominently displaying the sentence set forth in paragraph 1.E.1 with active links or immediate access to the full terms of the Project Gutenberg-tm License. 1.E.6. You may convert to and distribute this work in any binary, compressed, marked up, nonproprietary or proprietary form, including any word processing or hypertext form. However, if you provide access to or distribute copies of a Project Gutenberg-tm work in a format other than "Plain Vanilla ASCII" or other format used in the official version posted on the official Project Gutenberg-tm web site (www.gutenberg.org), you must, at no additional cost, fee or expense to the user, provide a copy, a means of exporting a copy, or a means of obtaining a copy upon request, of the work in its original "Plain Vanilla ASCII" or other form. Any alternate format must include the full Project Gutenberg-tm License as specified in paragraph 1.E.1. 1.E.7. Do not charge a fee for access to, viewing, displaying, performing, copying or distributing any Project Gutenberg-tm works unless you comply with paragraph 1.E.8 or 1.E.9. 1.E.8. You may charge a reasonable fee for copies of or providing access to or distributing Project Gutenberg-tm electronic works provided that - You pay a royalty fee of 20% of the gross profits you derive from the use of Project Gutenberg-tm works calculated using the method you already use to calculate your applicable taxes. The fee is owed to the owner of the Project Gutenberg-tm trademark, but he has agreed to donate royalties under this paragraph to the Project Gutenberg Literary Archive Foundation. Royalty payments must be paid within 60 days following each date on which you prepare (or are legally required to prepare) your periodic tax returns. Royalty payments should be clearly marked as such and sent to the Project Gutenberg Literary Archive Foundation at the address specified in Section 4, "Information about donations to the Project Gutenberg Literary Archive Foundation." - You provide a full refund of any money paid by a user who notifies you in writing (or by e-mail) within 30 days of receipt that s/he does not agree to the terms of the full Project Gutenberg-tm License. You must require such a user to return or destroy all copies of the works possessed in a physical medium and discontinue all use of and all access to other copies of Project Gutenberg-tm works. - You provide, in accordance with paragraph 1.F.3, a full refund of any money paid for a work or a replacement copy, if a defect in the electronic work is discovered and reported to you within 90 days of receipt of the work. - You comply with all other terms of this agreement for free distribution of Project Gutenberg-tm works. 1.E.9. If you wish to charge a fee or distribute a Project Gutenberg-tm electronic work or group of works on different terms than are set forth in this agreement, you must obtain permission in writing from both the Project Gutenberg Literary Archive Foundation and Michael Hart, the owner of the Project Gutenberg-tm trademark. Contact the Foundation as set forth in Section 3 below. 1.F. 1.F.1. Project Gutenberg volunteers and employees expend considerable effort to identify, do copyright research on, transcribe and proofread public domain works in creating the Project Gutenberg-tm collection. Despite these efforts, Project Gutenberg-tm electronic works, and the medium on which they may be stored, may contain "Defects," such as, but not limited to, incomplete, inaccurate or corrupt data, transcription errors, a copyright or other intellectual property infringement, a defective or damaged disk or other medium, a computer virus, or computer codes that damage or cannot be read by your equipment. 1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right of Replacement or Refund" described in paragraph 1.F.3, the Project Gutenberg Literary Archive Foundation, the owner of the Project Gutenberg-tm trademark, and any other party distributing a Project Gutenberg-tm electronic work under this agreement, disclaim all liability to you for damages, costs and expenses, including legal fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE PROVIDED IN PARAGRAPH F3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH DAMAGE. 1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a defect in this electronic work within 90 days of receiving it, you can receive a refund of the money (if any) you paid for it by sending a written explanation to the person you received the work from. If you received the work on a physical medium, you must return the medium with your written explanation. The person or entity that provided you with the defective work may elect to provide a replacement copy in lieu of a refund. If you received the work electronically, the person or entity providing it to you may choose to give you a second opportunity to receive the work electronically in lieu of a refund. If the second copy is also defective, you may demand a refund in writing without further opportunities to fix the problem. 1.F.4. Except for the limited right of replacement or refund set forth in paragraph 1.F.3, this work is provided to you 'AS-IS', WITH NO OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PURPOSE. 1.F.5. Some states do not allow disclaimers of certain implied warranties or the exclusion or limitation of certain types of damages. If any disclaimer or limitation set forth in this agreement violates the law of the state applicable to this agreement, the agreement shall be interpreted to make the maximum disclaimer or limitation permitted by the applicable state law. The invalidity or unenforceability of any provision of this agreement shall not void the remaining provisions. 1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the trademark owner, any agent or employee of the Foundation, anyone providing copies of Project Gutenberg-tm electronic works in accordance with this agreement, and any volunteers associated with the production, promotion and distribution of Project Gutenberg-tm electronic works, harmless from all liability, costs and expenses, including legal fees, that arise directly or indirectly from any of the following which you do or cause to occur: (a) distribution of this or any Project Gutenberg-tm work, (b) alteration, modification, or additions or deletions to any Project Gutenberg-tm work, and (c) any Defect you cause. Section 2. Information about the Mission of Project Gutenberg-tm Project Gutenberg-tm is synonymous with the free distribution of electronic works in formats readable by the widest variety of computers including obsolete, old, middle-aged and new computers. It exists because of the efforts of hundreds of volunteers and donations from people in all walks of life. Volunteers and financial support to provide volunteers with the assistance they need, is critical to reaching Project Gutenberg-tm's goals and ensuring that the Project Gutenberg-tm collection will remain freely available for generations to come. In 2001, the Project Gutenberg Literary Archive Foundation was created to provide a secure and permanent future for Project Gutenberg-tm and future generations. To learn more about the Project Gutenberg Literary Archive Foundation and how your efforts and donations can help, see Sections 3 and 4 and the Foundation web page at http://www.pglaf.org. Section 3. Information about the Project Gutenberg Literary Archive Foundation The Project Gutenberg Literary Archive Foundation is a non profit 501(c)(3) educational corporation organized under the laws of the state of Mississippi and granted tax exempt status by the Internal Revenue Service. The Foundation's EIN or federal tax identification number is 64-6221541. Its 501(c)(3) letter is posted at http://pglaf.org/fundraising. Contributions to the Project Gutenberg Literary Archive Foundation are tax deductible to the full extent permitted by U.S. federal laws and your state's laws. The Foundation's principal office is located at 4557 Melan Dr. S. Fairbanks, AK, 99712., but its volunteers and employees are scattered throughout numerous locations. Its business office is located at 809 North 1500 West, Salt Lake City, UT 84116, (801) 596-1887, email business@pglaf.org. Email contact links and up to date contact information can be found at the Foundation's web site and official page at http://pglaf.org For additional contact information: Dr. Gregory B. Newby Chief Executive and Director gbnewby@pglaf.org Section 4. Information about Donations to the Project Gutenberg Literary Archive Foundation Project Gutenberg-tm depends upon and cannot survive without wide spread public support and donations to carry out its mission of increasing the number of public domain and licensed works that can be freely distributed in machine readable form accessible by the widest array of equipment including outdated equipment. Many small donations ($1 to $5,000) are particularly important to maintaining tax exempt status with the IRS. The Foundation is committed to complying with the laws regulating charities and charitable donations in all 50 states of the United States. Compliance requirements are not uniform and it takes a considerable effort, much paperwork and many fees to meet and keep up with these requirements. We do not solicit donations in locations where we have not received written confirmation of compliance. To SEND DONATIONS or determine the status of compliance for any particular state visit http://pglaf.org While we cannot and do not solicit contributions from states where we have not met the solicitation requirements, we know of no prohibition against accepting unsolicited donations from donors in such states who approach us with offers to donate. International donations are gratefully accepted, but we cannot make any statements concerning tax treatment of donations received from outside the United States. U.S. laws alone swamp our small staff. Please check the Project Gutenberg Web pages for current donation methods and addresses. Donations are accepted in a number of other ways including checks, online payments and credit card donations. To donate, please visit: http://pglaf.org/donate Section 5. General Information About Project Gutenberg-tm electronic works. Professor Michael S. Hart is the originator of the Project Gutenberg-tm concept of a library of electronic works that could be freely shared with anyone. For thirty years, he produced and distributed Project Gutenberg-tm eBooks with only a loose network of volunteer support. Project Gutenberg-tm eBooks are often created from several printed editions, all of which are confirmed as Public Domain in the U.S. unless a copyright notice is included. Thus, we do not necessarily keep eBooks in compliance with any particular paper edition. Most people start at our Web site which has the main PG search facility: http://www.gutenberg.org This Web site includes information about Project Gutenberg-tm, including how to make donations to the Project Gutenberg Literary Archive Foundation, how to help produce our new eBooks, and how to subscribe to our email newsletter to hear about new eBooks. *** END: FULL LICENSE *** libwebsockets-3.2.1/minimal-examples/api-tests/api-test-fts/main.c000066400000000000000000000110421357643561300251530ustar00rootroot00000000000000/* * lws-api-test-fts - lws full-text search api test * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #if defined(LWS_HAS_GETOPT_LONG) || defined(WIN32) #include #endif #include #if defined(LWS_HAS_GETOPT_LONG) || defined(WIN32) static struct option options[] = { { "help", no_argument, NULL, 'h' }, { "createindex", no_argument, NULL, 'c' }, { "index", required_argument, NULL, 'i' }, { "debug", required_argument, NULL, 'd' }, { "file", required_argument, NULL, 'f' }, { "lines", required_argument, NULL, 'l' }, { NULL, 0, 0, 0 } }; #endif static const char *index_filepath = "/tmp/lws-fts-test-index"; static char filepath[256]; int main(int argc, char **argv) { int n, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; int fd, fi, ft, createindex = 0, flags = LWSFTS_F_QUERY_AUTOCOMPLETE; struct lws_fts_search_params params; struct lws_fts_result *result; struct lws_fts_file *jtf; struct lws_fts *t; char buf[16384]; do { #if defined(LWS_HAS_GETOPT_LONG) || defined(WIN32) n = getopt_long(argc, argv, "hd:i:cfl", options, NULL); #else n = getopt(argc, argv, "hd:i:cfl"); #endif if (n < 0) continue; switch (n) { case 'i': strncpy(filepath, optarg, sizeof(filepath) - 1); filepath[sizeof(filepath) - 1] = '\0'; index_filepath = filepath; break; case 'd': logs = atoi(optarg); break; case 'c': createindex = 1; break; case 'f': flags &= ~LWSFTS_F_QUERY_AUTOCOMPLETE; flags |= LWSFTS_F_QUERY_FILES; break; case 'l': flags |= LWSFTS_F_QUERY_FILES | LWSFTS_F_QUERY_FILE_LINES; break; case 'h': fprintf(stderr, "Usage: %s [--createindex]" "[--index=] " "[-d ] file1 file2 \n", argv[0]); exit(1); } } while (n >= 0); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: full-text search\n"); if (createindex) { lwsl_notice("Creating index\n"); /* * create an index by shifting through argv and indexing each * file given there into a single combined index */ ft = open(index_filepath, O_CREAT | O_WRONLY | O_TRUNC, 0600); if (ft < 0) { lwsl_err("%s: can't open index %s\n", __func__, index_filepath); goto bail; } t = lws_fts_create(ft); if (!t) { lwsl_err("%s: Unable to allocate trie\n", __func__); goto bail1; } while (optind < argc) { fi = lws_fts_file_index(t, argv[optind], strlen(argv[optind]), 1); if (fi < 0) { lwsl_err("%s: Failed to get file idx for %s\n", __func__, argv[optind]); goto bail1; } fd = open(argv[optind], O_RDONLY); if (fd < 0) { lwsl_err("unable to open %s for read\n", argv[optind]); goto bail; } do { int n = read(fd, buf, sizeof(buf)); if (n <= 0) break; if (lws_fts_fill(t, fi, buf, n)) { lwsl_err("%s: lws_fts_fill failed\n", __func__); close(fd); goto bail; } } while (1); close(fd); optind++; } if (lws_fts_serialize(t)) { lwsl_err("%s: serialize failed\n", __func__); goto bail; } lws_fts_destroy(&t); close(ft); return 0; } /* * shift through argv searching for each token */ jtf = lws_fts_open(index_filepath); if (!jtf) goto bail; while (optind < argc) { struct lws_fts_result_autocomplete *ac; struct lws_fts_result_filepath *fp; uint32_t *l, n; memset(¶ms, 0, sizeof(params)); params.needle = argv[optind]; params.flags = flags; params.max_autocomplete = 20; params.max_files = 20; result = lws_fts_search(jtf, ¶ms); if (!result) { lwsl_err("%s: search failed\n", __func__); lws_fts_close(jtf); goto bail; } ac = result->autocomplete_head; fp = result->filepath_head; if (!ac) lwsl_notice("%s: no autocomplete results\n", __func__); while (ac) { lwsl_notice("%s: AC %s: %d agg hits\n", __func__, ((char *)(ac + 1)), ac->instances); ac = ac->next; } if (!fp) lwsl_notice("%s: no filepath results\n", __func__); while (fp) { lwsl_notice("%s: %s: (%d lines) %d hits \n", __func__, (((char *)(fp + 1)) + fp->matches_length), fp->lines_in_file, fp->matches); if (fp->matches_length) { l = (uint32_t *)(fp + 1); n = 0; while ((int)n++ < fp->matches) lwsl_notice(" %d\n", *l++); } fp = fp->next; } lwsac_free(¶ms.results_head); optind++; } lws_fts_close(jtf); return 0; bail1: close(ft); bail: lwsl_user("FAILED\n"); return 1; } libwebsockets-3.2.1/minimal-examples/api-tests/api-test-fts/selftest.sh000077500000000000000000000031251357643561300262560ustar00rootroot00000000000000#!/bin/bash # # $1: path to minimal example binaries... # if lws is built with -DLWS_WITH_MINIMAL_EXAMPLES=1 # that will be ./bin from your build dir # # $2: path for logs and results. The results will go # in a subdir named after the directory this script # is in # # $3: offset for test index count # # $4: total test count # # $5: path to ./minimal-examples dir in lws # # Test return code 0: OK, 254: timed out, other: error indication . $5/selftests-library.sh COUNT_TESTS=4 FAILS=0 # # let's make an index with just Dorian first # dotest $1 $2 apitest -c -i /tmp/lws-fts-dorian.index \ "../minimal-examples/api-tests/api-test-fts/the-picture-of-dorian-gray.txt" # and let's hear about autocompletes for "b" dotest $1 $2 apitest -i /tmp/lws-fts-dorian.index b cat $2/api-test-fts/apitest.log | cut -d' ' -f5- > /tmp/fts1 diff -urN /tmp/fts1 "../minimal-examples/api-tests/api-test-fts/canned-1.txt" if [ $? -ne 0 ] ; then echo "Test 1 failed" FAILS=$(( $FAILS + 1 )) fi # # let's make an index with Dorian + Les Mis in French (ie, UTF-8) as well # dotest $1 $2 apitest -c -i /tmp/lws-fts-both.index \ "../minimal-examples/api-tests/api-test-fts/the-picture-of-dorian-gray.txt" \ "../minimal-examples/api-tests/api-test-fts/les-mis-utf8.txt" # and let's hear about "help", which appears in both dotest $1 $2 apitest -i /tmp/lws-fts-both.index -f -l help cat $2/api-test-fts/apitest.log | cut -d' ' -f5- > /tmp/fts2 diff -urN /tmp/fts2 "../minimal-examples/api-tests/api-test-fts/canned-2.txt" if [ $? -ne 0 ] ; then echo "Test 1 failed" FAILS=$(( $FAILS + 1 )) fi exit $FAILS libwebsockets-3.2.1/minimal-examples/api-tests/api-test-fts/the-picture-of-dorian-gray.txt000066400000000000000000016063731357643561300317130ustar00rootroot00000000000000The Project Gutenberg EBook of The Picture of Dorian Gray, by Oscar Wilde This eBook is for the use of anyone anywhere at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included with this eBook or online at www.gutenberg.net Title: The Picture of Dorian Gray Author: Oscar Wilde Release Date: June 9, 2008 [EBook #174] [This file last updated on July 2, 2011] [This file last updated on July 23, 2014] Language: English *** START OF THIS PROJECT GUTENBERG EBOOK THE PICTURE OF DORIAN GRAY *** Produced by Judith Boss. HTML version by Al Haines. The Picture of Dorian Gray by Oscar Wilde THE PREFACE The artist is the creator of beautiful things. To reveal art and conceal the artist is art's aim. The critic is he who can translate into another manner or a new material his impression of beautiful things. The highest as the lowest form of criticism is a mode of autobiography. Those who find ugly meanings in beautiful things are corrupt without being charming. This is a fault. Those who find beautiful meanings in beautiful things are the cultivated. For these there is hope. They are the elect to whom beautiful things mean only beauty. There is no such thing as a moral or an immoral book. Books are well written, or badly written. That is all. The nineteenth century dislike of realism is the rage of Caliban seeing his own face in a glass. The nineteenth century dislike of romanticism is the rage of Caliban not seeing his own face in a glass. The moral life of man forms part of the subject-matter of the artist, but the morality of art consists in the perfect use of an imperfect medium. No artist desires to prove anything. Even things that are true can be proved. No artist has ethical sympathies. An ethical sympathy in an artist is an unpardonable mannerism of style. No artist is ever morbid. The artist can express everything. Thought and language are to the artist instruments of an art. Vice and virtue are to the artist materials for an art. From the point of view of form, the type of all the arts is the art of the musician. From the point of view of feeling, the actor's craft is the type. All art is at once surface and symbol. Those who go beneath the surface do so at their peril. Those who read the symbol do so at their peril. It is the spectator, and not life, that art really mirrors. Diversity of opinion about a work of art shows that the work is new, complex, and vital. When critics disagree, the artist is in accord with himself. We can forgive a man for making a useful thing as long as he does not admire it. The only excuse for making a useless thing is that one admires it intensely. All art is quite useless. OSCAR WILDE CHAPTER 1 The studio was filled with the rich odour of roses, and when the light summer wind stirred amidst the trees of the garden, there came through the open door the heavy scent of the lilac, or the more delicate perfume of the pink-flowering thorn. From the corner of the divan of Persian saddle-bags on which he was lying, smoking, as was his custom, innumerable cigarettes, Lord Henry Wotton could just catch the gleam of the honey-sweet and honey-coloured blossoms of a laburnum, whose tremulous branches seemed hardly able to bear the burden of a beauty so flamelike as theirs; and now and then the fantastic shadows of birds in flight flitted across the long tussore-silk curtains that were stretched in front of the huge window, producing a kind of momentary Japanese effect, and making him think of those pallid, jade-faced painters of Tokyo who, through the medium of an art that is necessarily immobile, seek to convey the sense of swiftness and motion. The sullen murmur of the bees shouldering their way through the long unmown grass, or circling with monotonous insistence round the dusty gilt horns of the straggling woodbine, seemed to make the stillness more oppressive. The dim roar of London was like the bourdon note of a distant organ. In the centre of the room, clamped to an upright easel, stood the full-length portrait of a young man of extraordinary personal beauty, and in front of it, some little distance away, was sitting the artist himself, Basil Hallward, whose sudden disappearance some years ago caused, at the time, such public excitement and gave rise to so many strange conjectures. As the painter looked at the gracious and comely form he had so skilfully mirrored in his art, a smile of pleasure passed across his face, and seemed about to linger there. But he suddenly started up, and closing his eyes, placed his fingers upon the lids, as though he sought to imprison within his brain some curious dream from which he feared he might awake. "It is your best work, Basil, the best thing you have ever done," said Lord Henry languidly. "You must certainly send it next year to the Grosvenor. The Academy is too large and too vulgar. Whenever I have gone there, there have been either so many people that I have not been able to see the pictures, which was dreadful, or so many pictures that I have not been able to see the people, which was worse. The Grosvenor is really the only place." "I don't think I shall send it anywhere," he answered, tossing his head back in that odd way that used to make his friends laugh at him at Oxford. "No, I won't send it anywhere." Lord Henry elevated his eyebrows and looked at him in amazement through the thin blue wreaths of smoke that curled up in such fanciful whorls from his heavy, opium-tainted cigarette. "Not send it anywhere? My dear fellow, why? Have you any reason? What odd chaps you painters are! You do anything in the world to gain a reputation. As soon as you have one, you seem to want to throw it away. It is silly of you, for there is only one thing in the world worse than being talked about, and that is not being talked about. A portrait like this would set you far above all the young men in England, and make the old men quite jealous, if old men are ever capable of any emotion." "I know you will laugh at me," he replied, "but I really can't exhibit it. I have put too much of myself into it." Lord Henry stretched himself out on the divan and laughed. "Yes, I knew you would; but it is quite true, all the same." "Too much of yourself in it! Upon my word, Basil, I didn't know you were so vain; and I really can't see any resemblance between you, with your rugged strong face and your coal-black hair, and this young Adonis, who looks as if he was made out of ivory and rose-leaves. Why, my dear Basil, he is a Narcissus, and you--well, of course you have an intellectual expression and all that. But beauty, real beauty, ends where an intellectual expression begins. Intellect is in itself a mode of exaggeration, and destroys the harmony of any face. The moment one sits down to think, one becomes all nose, or all forehead, or something horrid. Look at the successful men in any of the learned professions. How perfectly hideous they are! Except, of course, in the Church. But then in the Church they don't think. A bishop keeps on saying at the age of eighty what he was told to say when he was a boy of eighteen, and as a natural consequence he always looks absolutely delightful. Your mysterious young friend, whose name you have never told me, but whose picture really fascinates me, never thinks. I feel quite sure of that. He is some brainless beautiful creature who should be always here in winter when we have no flowers to look at, and always here in summer when we want something to chill our intelligence. Don't flatter yourself, Basil: you are not in the least like him." "You don't understand me, Harry," answered the artist. "Of course I am not like him. I know that perfectly well. Indeed, I should be sorry to look like him. You shrug your shoulders? I am telling you the truth. There is a fatality about all physical and intellectual distinction, the sort of fatality that seems to dog through history the faltering steps of kings. It is better not to be different from one's fellows. The ugly and the stupid have the best of it in this world. They can sit at their ease and gape at the play. If they know nothing of victory, they are at least spared the knowledge of defeat. They live as we all should live--undisturbed, indifferent, and without disquiet. They neither bring ruin upon others, nor ever receive it from alien hands. Your rank and wealth, Harry; my brains, such as they are--my art, whatever it may be worth; Dorian Gray's good looks--we shall all suffer for what the gods have given us, suffer terribly." "Dorian Gray? Is that his name?" asked Lord Henry, walking across the studio towards Basil Hallward. "Yes, that is his name. I didn't intend to tell it to you." "But why not?" "Oh, I can't explain. When I like people immensely, I never tell their names to any one. It is like surrendering a part of them. I have grown to love secrecy. It seems to be the one thing that can make modern life mysterious or marvellous to us. The commonest thing is delightful if one only hides it. When I leave town now I never tell my people where I am going. If I did, I would lose all my pleasure. It is a silly habit, I dare say, but somehow it seems to bring a great deal of romance into one's life. I suppose you think me awfully foolish about it?" "Not at all," answered Lord Henry, "not at all, my dear Basil. You seem to forget that I am married, and the one charm of marriage is that it makes a life of deception absolutely necessary for both parties. I never know where my wife is, and my wife never knows what I am doing. When we meet--we do meet occasionally, when we dine out together, or go down to the Duke's--we tell each other the most absurd stories with the most serious faces. My wife is very good at it--much better, in fact, than I am. She never gets confused over her dates, and I always do. But when she does find me out, she makes no row at all. I sometimes wish she would; but she merely laughs at me." "I hate the way you talk about your married life, Harry," said Basil Hallward, strolling towards the door that led into the garden. "I believe that you are really a very good husband, but that you are thoroughly ashamed of your own virtues. You are an extraordinary fellow. You never say a moral thing, and you never do a wrong thing. Your cynicism is simply a pose." "Being natural is simply a pose, and the most irritating pose I know," cried Lord Henry, laughing; and the two young men went out into the garden together and ensconced themselves on a long bamboo seat that stood in the shade of a tall laurel bush. The sunlight slipped over the polished leaves. In the grass, white daisies were tremulous. After a pause, Lord Henry pulled out his watch. "I am afraid I must be going, Basil," he murmured, "and before I go, I insist on your answering a question I put to you some time ago." "What is that?" said the painter, keeping his eyes fixed on the ground. "You know quite well." "I do not, Harry." "Well, I will tell you what it is. I want you to explain to me why you won't exhibit Dorian Gray's picture. I want the real reason." "I told you the real reason." "No, you did not. You said it was because there was too much of yourself in it. Now, that is childish." "Harry," said Basil Hallward, looking him straight in the face, "every portrait that is painted with feeling is a portrait of the artist, not of the sitter. The sitter is merely the accident, the occasion. It is not he who is revealed by the painter; it is rather the painter who, on the coloured canvas, reveals himself. The reason I will not exhibit this picture is that I am afraid that I have shown in it the secret of my own soul." Lord Henry laughed. "And what is that?" he asked. "I will tell you," said Hallward; but an expression of perplexity came over his face. "I am all expectation, Basil," continued his companion, glancing at him. "Oh, there is really very little to tell, Harry," answered the painter; "and I am afraid you will hardly understand it. Perhaps you will hardly believe it." Lord Henry smiled, and leaning down, plucked a pink-petalled daisy from the grass and examined it. "I am quite sure I shall understand it," he replied, gazing intently at the little golden, white-feathered disk, "and as for believing things, I can believe anything, provided that it is quite incredible." The wind shook some blossoms from the trees, and the heavy lilac-blooms, with their clustering stars, moved to and fro in the languid air. A grasshopper began to chirrup by the wall, and like a blue thread a long thin dragon-fly floated past on its brown gauze wings. Lord Henry felt as if he could hear Basil Hallward's heart beating, and wondered what was coming. "The story is simply this," said the painter after some time. "Two months ago I went to a crush at Lady Brandon's. You know we poor artists have to show ourselves in society from time to time, just to remind the public that we are not savages. With an evening coat and a white tie, as you told me once, anybody, even a stock-broker, can gain a reputation for being civilized. Well, after I had been in the room about ten minutes, talking to huge overdressed dowagers and tedious academicians, I suddenly became conscious that some one was looking at me. I turned half-way round and saw Dorian Gray for the first time. When our eyes met, I felt that I was growing pale. A curious sensation of terror came over me. I knew that I had come face to face with some one whose mere personality was so fascinating that, if I allowed it to do so, it would absorb my whole nature, my whole soul, my very art itself. I did not want any external influence in my life. You know yourself, Harry, how independent I am by nature. I have always been my own master; had at least always been so, till I met Dorian Gray. Then--but I don't know how to explain it to you. Something seemed to tell me that I was on the verge of a terrible crisis in my life. I had a strange feeling that fate had in store for me exquisite joys and exquisite sorrows. I grew afraid and turned to quit the room. It was not conscience that made me do so: it was a sort of cowardice. I take no credit to myself for trying to escape." "Conscience and cowardice are really the same things, Basil. Conscience is the trade-name of the firm. That is all." "I don't believe that, Harry, and I don't believe you do either. However, whatever was my motive--and it may have been pride, for I used to be very proud--I certainly struggled to the door. There, of course, I stumbled against Lady Brandon. 'You are not going to run away so soon, Mr. Hallward?' she screamed out. You know her curiously shrill voice?" "Yes; she is a peacock in everything but beauty," said Lord Henry, pulling the daisy to bits with his long nervous fingers. "I could not get rid of her. She brought me up to royalties, and people with stars and garters, and elderly ladies with gigantic tiaras and parrot noses. She spoke of me as her dearest friend. I had only met her once before, but she took it into her head to lionize me. I believe some picture of mine had made a great success at the time, at least had been chattered about in the penny newspapers, which is the nineteenth-century standard of immortality. Suddenly I found myself face to face with the young man whose personality had so strangely stirred me. We were quite close, almost touching. Our eyes met again. It was reckless of me, but I asked Lady Brandon to introduce me to him. Perhaps it was not so reckless, after all. It was simply inevitable. We would have spoken to each other without any introduction. I am sure of that. Dorian told me so afterwards. He, too, felt that we were destined to know each other." "And how did Lady Brandon describe this wonderful young man?" asked his companion. "I know she goes in for giving a rapid _precis_ of all her guests. I remember her bringing me up to a truculent and red-faced old gentleman covered all over with orders and ribbons, and hissing into my ear, in a tragic whisper which must have been perfectly audible to everybody in the room, the most astounding details. I simply fled. I like to find out people for myself. But Lady Brandon treats her guests exactly as an auctioneer treats his goods. She either explains them entirely away, or tells one everything about them except what one wants to know." "Poor Lady Brandon! You are hard on her, Harry!" said Hallward listlessly. "My dear fellow, she tried to found a _salon_, and only succeeded in opening a restaurant. How could I admire her? But tell me, what did she say about Mr. Dorian Gray?" "Oh, something like, 'Charming boy--poor dear mother and I absolutely inseparable. Quite forget what he does--afraid he--doesn't do anything--oh, yes, plays the piano--or is it the violin, dear Mr. Gray?' Neither of us could help laughing, and we became friends at once." "Laughter is not at all a bad beginning for a friendship, and it is far the best ending for one," said the young lord, plucking another daisy. Hallward shook his head. "You don't understand what friendship is, Harry," he murmured--"or what enmity is, for that matter. You like every one; that is to say, you are indifferent to every one." "How horribly unjust of you!" cried Lord Henry, tilting his hat back and looking up at the little clouds that, like ravelled skeins of glossy white silk, were drifting across the hollowed turquoise of the summer sky. "Yes; horribly unjust of you. I make a great difference between people. I choose my friends for their good looks, my acquaintances for their good characters, and my enemies for their good intellects. A man cannot be too careful in the choice of his enemies. I have not got one who is a fool. They are all men of some intellectual power, and consequently they all appreciate me. Is that very vain of me? I think it is rather vain." "I should think it was, Harry. But according to your category I must be merely an acquaintance." "My dear old Basil, you are much more than an acquaintance." "And much less than a friend. A sort of brother, I suppose?" "Oh, brothers! I don't care for brothers. My elder brother won't die, and my younger brothers seem never to do anything else." "Harry!" exclaimed Hallward, frowning. "My dear fellow, I am not quite serious. But I can't help detesting my relations. I suppose it comes from the fact that none of us can stand other people having the same faults as ourselves. I quite sympathize with the rage of the English democracy against what they call the vices of the upper orders. The masses feel that drunkenness, stupidity, and immorality should be their own special property, and that if any one of us makes an ass of himself, he is poaching on their preserves. When poor Southwark got into the divorce court, their indignation was quite magnificent. And yet I don't suppose that ten per cent of the proletariat live correctly." "I don't agree with a single word that you have said, and, what is more, Harry, I feel sure you don't either." Lord Henry stroked his pointed brown beard and tapped the toe of his patent-leather boot with a tasselled ebony cane. "How English you are Basil! That is the second time you have made that observation. If one puts forward an idea to a true Englishman--always a rash thing to do--he never dreams of considering whether the idea is right or wrong. The only thing he considers of any importance is whether one believes it oneself. Now, the value of an idea has nothing whatsoever to do with the sincerity of the man who expresses it. Indeed, the probabilities are that the more insincere the man is, the more purely intellectual will the idea be, as in that case it will not be coloured by either his wants, his desires, or his prejudices. However, I don't propose to discuss politics, sociology, or metaphysics with you. I like persons better than principles, and I like persons with no principles better than anything else in the world. Tell me more about Mr. Dorian Gray. How often do you see him?" "Every day. I couldn't be happy if I didn't see him every day. He is absolutely necessary to me." "How extraordinary! I thought you would never care for anything but your art." "He is all my art to me now," said the painter gravely. "I sometimes think, Harry, that there are only two eras of any importance in the world's history. The first is the appearance of a new medium for art, and the second is the appearance of a new personality for art also. What the invention of oil-painting was to the Venetians, the face of Antinous was to late Greek sculpture, and the face of Dorian Gray will some day be to me. It is not merely that I paint from him, draw from him, sketch from him. Of course, I have done all that. But he is much more to me than a model or a sitter. I won't tell you that I am dissatisfied with what I have done of him, or that his beauty is such that art cannot express it. There is nothing that art cannot express, and I know that the work I have done, since I met Dorian Gray, is good work, is the best work of my life. But in some curious way--I wonder will you understand me?--his personality has suggested to me an entirely new manner in art, an entirely new mode of style. I see things differently, I think of them differently. I can now recreate life in a way that was hidden from me before. 'A dream of form in days of thought'--who is it who says that? I forget; but it is what Dorian Gray has been to me. The merely visible presence of this lad--for he seems to me little more than a lad, though he is really over twenty--his merely visible presence--ah! I wonder can you realize all that that means? Unconsciously he defines for me the lines of a fresh school, a school that is to have in it all the passion of the romantic spirit, all the perfection of the spirit that is Greek. The harmony of soul and body--how much that is! We in our madness have separated the two, and have invented a realism that is vulgar, an ideality that is void. Harry! if you only knew what Dorian Gray is to me! You remember that landscape of mine, for which Agnew offered me such a huge price but which I would not part with? It is one of the best things I have ever done. And why is it so? Because, while I was painting it, Dorian Gray sat beside me. Some subtle influence passed from him to me, and for the first time in my life I saw in the plain woodland the wonder I had always looked for and always missed." "Basil, this is extraordinary! I must see Dorian Gray." Hallward got up from the seat and walked up and down the garden. After some time he came back. "Harry," he said, "Dorian Gray is to me simply a motive in art. You might see nothing in him. I see everything in him. He is never more present in my work than when no image of him is there. He is a suggestion, as I have said, of a new manner. I find him in the curves of certain lines, in the loveliness and subtleties of certain colours. That is all." "Then why won't you exhibit his portrait?" asked Lord Henry. "Because, without intending it, I have put into it some expression of all this curious artistic idolatry, of which, of course, I have never cared to speak to him. He knows nothing about it. He shall never know anything about it. But the world might guess it, and I will not bare my soul to their shallow prying eyes. My heart shall never be put under their microscope. There is too much of myself in the thing, Harry--too much of myself!" "Poets are not so scrupulous as you are. They know how useful passion is for publication. Nowadays a broken heart will run to many editions." "I hate them for it," cried Hallward. "An artist should create beautiful things, but should put nothing of his own life into them. We live in an age when men treat art as if it were meant to be a form of autobiography. We have lost the abstract sense of beauty. Some day I will show the world what it is; and for that reason the world shall never see my portrait of Dorian Gray." "I think you are wrong, Basil, but I won't argue with you. It is only the intellectually lost who ever argue. Tell me, is Dorian Gray very fond of you?" The painter considered for a few moments. "He likes me," he answered after a pause; "I know he likes me. Of course I flatter him dreadfully. I find a strange pleasure in saying things to him that I know I shall be sorry for having said. As a rule, he is charming to me, and we sit in the studio and talk of a thousand things. Now and then, however, he is horribly thoughtless, and seems to take a real delight in giving me pain. Then I feel, Harry, that I have given away my whole soul to some one who treats it as if it were a flower to put in his coat, a bit of decoration to charm his vanity, an ornament for a summer's day." "Days in summer, Basil, are apt to linger," murmured Lord Henry. "Perhaps you will tire sooner than he will. It is a sad thing to think of, but there is no doubt that genius lasts longer than beauty. That accounts for the fact that we all take such pains to over-educate ourselves. In the wild struggle for existence, we want to have something that endures, and so we fill our minds with rubbish and facts, in the silly hope of keeping our place. The thoroughly well-informed man--that is the modern ideal. And the mind of the thoroughly well-informed man is a dreadful thing. It is like a _bric-a-brac_ shop, all monsters and dust, with everything priced above its proper value. I think you will tire first, all the same. Some day you will look at your friend, and he will seem to you to be a little out of drawing, or you won't like his tone of colour, or something. You will bitterly reproach him in your own heart, and seriously think that he has behaved very badly to you. The next time he calls, you will be perfectly cold and indifferent. It will be a great pity, for it will alter you. What you have told me is quite a romance, a romance of art one might call it, and the worst of having a romance of any kind is that it leaves one so unromantic." "Harry, don't talk like that. As long as I live, the personality of Dorian Gray will dominate me. You can't feel what I feel. You change too often." "Ah, my dear Basil, that is exactly why I can feel it. Those who are faithful know only the trivial side of love: it is the faithless who know love's tragedies." And Lord Henry struck a light on a dainty silver case and began to smoke a cigarette with a self-conscious and satisfied air, as if he had summed up the world in a phrase. There was a rustle of chirruping sparrows in the green lacquer leaves of the ivy, and the blue cloud-shadows chased themselves across the grass like swallows. How pleasant it was in the garden! And how delightful other people's emotions were!--much more delightful than their ideas, it seemed to him. One's own soul, and the passions of one's friends--those were the fascinating things in life. He pictured to himself with silent amusement the tedious luncheon that he had missed by staying so long with Basil Hallward. Had he gone to his aunt's, he would have been sure to have met Lord Goodbody there, and the whole conversation would have been about the feeding of the poor and the necessity for model lodging-houses. Each class would have preached the importance of those virtues, for whose exercise there was no necessity in their own lives. The rich would have spoken on the value of thrift, and the idle grown eloquent over the dignity of labour. It was charming to have escaped all that! As he thought of his aunt, an idea seemed to strike him. He turned to Hallward and said, "My dear fellow, I have just remembered." "Remembered what, Harry?" "Where I heard the name of Dorian Gray." "Where was it?" asked Hallward, with a slight frown. "Don't look so angry, Basil. It was at my aunt, Lady Agatha's. She told me she had discovered a wonderful young man who was going to help her in the East End, and that his name was Dorian Gray. I am bound to state that she never told me he was good-looking. Women have no appreciation of good looks; at least, good women have not. She said that he was very earnest and had a beautiful nature. I at once pictured to myself a creature with spectacles and lank hair, horribly freckled, and tramping about on huge feet. I wish I had known it was your friend." "I am very glad you didn't, Harry." "Why?" "I don't want you to meet him." "You don't want me to meet him?" "No." "Mr. Dorian Gray is in the studio, sir," said the butler, coming into the garden. "You must introduce me now," cried Lord Henry, laughing. The painter turned to his servant, who stood blinking in the sunlight. "Ask Mr. Gray to wait, Parker: I shall be in in a few moments." The man bowed and went up the walk. Then he looked at Lord Henry. "Dorian Gray is my dearest friend," he said. "He has a simple and a beautiful nature. Your aunt was quite right in what she said of him. Don't spoil him. Don't try to influence him. Your influence would be bad. The world is wide, and has many marvellous people in it. Don't take away from me the one person who gives to my art whatever charm it possesses: my life as an artist depends on him. Mind, Harry, I trust you." He spoke very slowly, and the words seemed wrung out of him almost against his will. "What nonsense you talk!" said Lord Henry, smiling, and taking Hallward by the arm, he almost led him into the house. CHAPTER 2 As they entered they saw Dorian Gray. He was seated at the piano, with his back to them, turning over the pages of a volume of Schumann's "Forest Scenes." "You must lend me these, Basil," he cried. "I want to learn them. They are perfectly charming." "That entirely depends on how you sit to-day, Dorian." "Oh, I am tired of sitting, and I don't want a life-sized portrait of myself," answered the lad, swinging round on the music-stool in a wilful, petulant manner. When he caught sight of Lord Henry, a faint blush coloured his cheeks for a moment, and he started up. "I beg your pardon, Basil, but I didn't know you had any one with you." "This is Lord Henry Wotton, Dorian, an old Oxford friend of mine. I have just been telling him what a capital sitter you were, and now you have spoiled everything." "You have not spoiled my pleasure in meeting you, Mr. Gray," said Lord Henry, stepping forward and extending his hand. "My aunt has often spoken to me about you. You are one of her favourites, and, I am afraid, one of her victims also." "I am in Lady Agatha's black books at present," answered Dorian with a funny look of penitence. "I promised to go to a club in Whitechapel with her last Tuesday, and I really forgot all about it. We were to have played a duet together--three duets, I believe. I don't know what she will say to me. I am far too frightened to call." "Oh, I will make your peace with my aunt. She is quite devoted to you. And I don't think it really matters about your not being there. The audience probably thought it was a duet. When Aunt Agatha sits down to the piano, she makes quite enough noise for two people." "That is very horrid to her, and not very nice to me," answered Dorian, laughing. Lord Henry looked at him. Yes, he was certainly wonderfully handsome, with his finely curved scarlet lips, his frank blue eyes, his crisp gold hair. There was something in his face that made one trust him at once. All the candour of youth was there, as well as all youth's passionate purity. One felt that he had kept himself unspotted from the world. No wonder Basil Hallward worshipped him. "You are too charming to go in for philanthropy, Mr. Gray--far too charming." And Lord Henry flung himself down on the divan and opened his cigarette-case. The painter had been busy mixing his colours and getting his brushes ready. He was looking worried, and when he heard Lord Henry's last remark, he glanced at him, hesitated for a moment, and then said, "Harry, I want to finish this picture to-day. Would you think it awfully rude of me if I asked you to go away?" Lord Henry smiled and looked at Dorian Gray. "Am I to go, Mr. Gray?" he asked. "Oh, please don't, Lord Henry. I see that Basil is in one of his sulky moods, and I can't bear him when he sulks. Besides, I want you to tell me why I should not go in for philanthropy." "I don't know that I shall tell you that, Mr. Gray. It is so tedious a subject that one would have to talk seriously about it. But I certainly shall not run away, now that you have asked me to stop. You don't really mind, Basil, do you? You have often told me that you liked your sitters to have some one to chat to." Hallward bit his lip. "If Dorian wishes it, of course you must stay. Dorian's whims are laws to everybody, except himself." Lord Henry took up his hat and gloves. "You are very pressing, Basil, but I am afraid I must go. I have promised to meet a man at the Orleans. Good-bye, Mr. Gray. Come and see me some afternoon in Curzon Street. I am nearly always at home at five o'clock. Write to me when you are coming. I should be sorry to miss you." "Basil," cried Dorian Gray, "if Lord Henry Wotton goes, I shall go, too. You never open your lips while you are painting, and it is horribly dull standing on a platform and trying to look pleasant. Ask him to stay. I insist upon it." "Stay, Harry, to oblige Dorian, and to oblige me," said Hallward, gazing intently at his picture. "It is quite true, I never talk when I am working, and never listen either, and it must be dreadfully tedious for my unfortunate sitters. I beg you to stay." "But what about my man at the Orleans?" The painter laughed. "I don't think there will be any difficulty about that. Sit down again, Harry. And now, Dorian, get up on the platform, and don't move about too much, or pay any attention to what Lord Henry says. He has a very bad influence over all his friends, with the single exception of myself." Dorian Gray stepped up on the dais with the air of a young Greek martyr, and made a little _moue_ of discontent to Lord Henry, to whom he had rather taken a fancy. He was so unlike Basil. They made a delightful contrast. And he had such a beautiful voice. After a few moments he said to him, "Have you really a very bad influence, Lord Henry? As bad as Basil says?" "There is no such thing as a good influence, Mr. Gray. All influence is immoral--immoral from the scientific point of view." "Why?" "Because to influence a person is to give him one's own soul. He does not think his natural thoughts, or burn with his natural passions. His virtues are not real to him. His sins, if there are such things as sins, are borrowed. He becomes an echo of some one else's music, an actor of a part that has not been written for him. The aim of life is self-development. To realize one's nature perfectly--that is what each of us is here for. People are afraid of themselves, nowadays. They have forgotten the highest of all duties, the duty that one owes to one's self. Of course, they are charitable. They feed the hungry and clothe the beggar. But their own souls starve, and are naked. Courage has gone out of our race. Perhaps we never really had it. The terror of society, which is the basis of morals, the terror of God, which is the secret of religion--these are the two things that govern us. And yet--" "Just turn your head a little more to the right, Dorian, like a good boy," said the painter, deep in his work and conscious only that a look had come into the lad's face that he had never seen there before. "And yet," continued Lord Henry, in his low, musical voice, and with that graceful wave of the hand that was always so characteristic of him, and that he had even in his Eton days, "I believe that if one man were to live out his life fully and completely, were to give form to every feeling, expression to every thought, reality to every dream--I believe that the world would gain such a fresh impulse of joy that we would forget all the maladies of mediaevalism, and return to the Hellenic ideal--to something finer, richer than the Hellenic ideal, it may be. But the bravest man amongst us is afraid of himself. The mutilation of the savage has its tragic survival in the self-denial that mars our lives. We are punished for our refusals. Every impulse that we strive to strangle broods in the mind and poisons us. The body sins once, and has done with its sin, for action is a mode of purification. Nothing remains then but the recollection of a pleasure, or the luxury of a regret. The only way to get rid of a temptation is to yield to it. Resist it, and your soul grows sick with longing for the things it has forbidden to itself, with desire for what its monstrous laws have made monstrous and unlawful. It has been said that the great events of the world take place in the brain. It is in the brain, and the brain only, that the great sins of the world take place also. You, Mr. Gray, you yourself, with your rose-red youth and your rose-white boyhood, you have had passions that have made you afraid, thoughts that have filled you with terror, day-dreams and sleeping dreams whose mere memory might stain your cheek with shame--" "Stop!" faltered Dorian Gray, "stop! you bewilder me. I don't know what to say. There is some answer to you, but I cannot find it. Don't speak. Let me think. Or, rather, let me try not to think." For nearly ten minutes he stood there, motionless, with parted lips and eyes strangely bright. He was dimly conscious that entirely fresh influences were at work within him. Yet they seemed to him to have come really from himself. The few words that Basil's friend had said to him--words spoken by chance, no doubt, and with wilful paradox in them--had touched some secret chord that had never been touched before, but that he felt was now vibrating and throbbing to curious pulses. Music had stirred him like that. Music had troubled him many times. But music was not articulate. It was not a new world, but rather another chaos, that it created in us. Words! Mere words! How terrible they were! How clear, and vivid, and cruel! One could not escape from them. And yet what a subtle magic there was in them! They seemed to be able to give a plastic form to formless things, and to have a music of their own as sweet as that of viol or of lute. Mere words! Was there anything so real as words? Yes; there had been things in his boyhood that he had not understood. He understood them now. Life suddenly became fiery-coloured to him. It seemed to him that he had been walking in fire. Why had he not known it? With his subtle smile, Lord Henry watched him. He knew the precise psychological moment when to say nothing. He felt intensely interested. He was amazed at the sudden impression that his words had produced, and, remembering a book that he had read when he was sixteen, a book which had revealed to him much that he had not known before, he wondered whether Dorian Gray was passing through a similar experience. He had merely shot an arrow into the air. Had it hit the mark? How fascinating the lad was! Hallward painted away with that marvellous bold touch of his, that had the true refinement and perfect delicacy that in art, at any rate comes only from strength. He was unconscious of the silence. "Basil, I am tired of standing," cried Dorian Gray suddenly. "I must go out and sit in the garden. The air is stifling here." "My dear fellow, I am so sorry. When I am painting, I can't think of anything else. But you never sat better. You were perfectly still. And I have caught the effect I wanted--the half-parted lips and the bright look in the eyes. I don't know what Harry has been saying to you, but he has certainly made you have the most wonderful expression. I suppose he has been paying you compliments. You mustn't believe a word that he says." "He has certainly not been paying me compliments. Perhaps that is the reason that I don't believe anything he has told me." "You know you believe it all," said Lord Henry, looking at him with his dreamy languorous eyes. "I will go out to the garden with you. It is horribly hot in the studio. Basil, let us have something iced to drink, something with strawberries in it." "Certainly, Harry. Just touch the bell, and when Parker comes I will tell him what you want. I have got to work up this background, so I will join you later on. Don't keep Dorian too long. I have never been in better form for painting than I am to-day. This is going to be my masterpiece. It is my masterpiece as it stands." Lord Henry went out to the garden and found Dorian Gray burying his face in the great cool lilac-blossoms, feverishly drinking in their perfume as if it had been wine. He came close to him and put his hand upon his shoulder. "You are quite right to do that," he murmured. "Nothing can cure the soul but the senses, just as nothing can cure the senses but the soul." The lad started and drew back. He was bareheaded, and the leaves had tossed his rebellious curls and tangled all their gilded threads. There was a look of fear in his eyes, such as people have when they are suddenly awakened. His finely chiselled nostrils quivered, and some hidden nerve shook the scarlet of his lips and left them trembling. "Yes," continued Lord Henry, "that is one of the great secrets of life--to cure the soul by means of the senses, and the senses by means of the soul. You are a wonderful creation. You know more than you think you know, just as you know less than you want to know." Dorian Gray frowned and turned his head away. He could not help liking the tall, graceful young man who was standing by him. His romantic, olive-coloured face and worn expression interested him. There was something in his low languid voice that was absolutely fascinating. His cool, white, flowerlike hands, even, had a curious charm. They moved, as he spoke, like music, and seemed to have a language of their own. But he felt afraid of him, and ashamed of being afraid. Why had it been left for a stranger to reveal him to himself? He had known Basil Hallward for months, but the friendship between them had never altered him. Suddenly there had come some one across his life who seemed to have disclosed to him life's mystery. And, yet, what was there to be afraid of? He was not a schoolboy or a girl. It was absurd to be frightened. "Let us go and sit in the shade," said Lord Henry. "Parker has brought out the drinks, and if you stay any longer in this glare, you will be quite spoiled, and Basil will never paint you again. You really must not allow yourself to become sunburnt. It would be unbecoming." "What can it matter?" cried Dorian Gray, laughing, as he sat down on the seat at the end of the garden. "It should matter everything to you, Mr. Gray." "Why?" "Because you have the most marvellous youth, and youth is the one thing worth having." "I don't feel that, Lord Henry." "No, you don't feel it now. Some day, when you are old and wrinkled and ugly, when thought has seared your forehead with its lines, and passion branded your lips with its hideous fires, you will feel it, you will feel it terribly. Now, wherever you go, you charm the world. Will it always be so? ... You have a wonderfully beautiful face, Mr. Gray. Don't frown. You have. And beauty is a form of genius--is higher, indeed, than genius, as it needs no explanation. It is of the great facts of the world, like sunlight, or spring-time, or the reflection in dark waters of that silver shell we call the moon. It cannot be questioned. It has its divine right of sovereignty. It makes princes of those who have it. You smile? Ah! when you have lost it you won't smile.... People say sometimes that beauty is only superficial. That may be so, but at least it is not so superficial as thought is. To me, beauty is the wonder of wonders. It is only shallow people who do not judge by appearances. The true mystery of the world is the visible, not the invisible.... Yes, Mr. Gray, the gods have been good to you. But what the gods give they quickly take away. You have only a few years in which to live really, perfectly, and fully. When your youth goes, your beauty will go with it, and then you will suddenly discover that there are no triumphs left for you, or have to content yourself with those mean triumphs that the memory of your past will make more bitter than defeats. Every month as it wanes brings you nearer to something dreadful. Time is jealous of you, and wars against your lilies and your roses. You will become sallow, and hollow-cheeked, and dull-eyed. You will suffer horribly.... Ah! realize your youth while you have it. Don't squander the gold of your days, listening to the tedious, trying to improve the hopeless failure, or giving away your life to the ignorant, the common, and the vulgar. These are the sickly aims, the false ideals, of our age. Live! Live the wonderful life that is in you! Let nothing be lost upon you. Be always searching for new sensations. Be afraid of nothing.... A new Hedonism--that is what our century wants. You might be its visible symbol. With your personality there is nothing you could not do. The world belongs to you for a season.... The moment I met you I saw that you were quite unconscious of what you really are, of what you really might be. There was so much in you that charmed me that I felt I must tell you something about yourself. I thought how tragic it would be if you were wasted. For there is such a little time that your youth will last--such a little time. The common hill-flowers wither, but they blossom again. The laburnum will be as yellow next June as it is now. In a month there will be purple stars on the clematis, and year after year the green night of its leaves will hold its purple stars. But we never get back our youth. The pulse of joy that beats in us at twenty becomes sluggish. Our limbs fail, our senses rot. We degenerate into hideous puppets, haunted by the memory of the passions of which we were too much afraid, and the exquisite temptations that we had not the courage to yield to. Youth! Youth! There is absolutely nothing in the world but youth!" Dorian Gray listened, open-eyed and wondering. The spray of lilac fell from his hand upon the gravel. A furry bee came and buzzed round it for a moment. Then it began to scramble all over the oval stellated globe of the tiny blossoms. He watched it with that strange interest in trivial things that we try to develop when things of high import make us afraid, or when we are stirred by some new emotion for which we cannot find expression, or when some thought that terrifies us lays sudden siege to the brain and calls on us to yield. After a time the bee flew away. He saw it creeping into the stained trumpet of a Tyrian convolvulus. The flower seemed to quiver, and then swayed gently to and fro. Suddenly the painter appeared at the door of the studio and made staccato signs for them to come in. They turned to each other and smiled. "I am waiting," he cried. "Do come in. The light is quite perfect, and you can bring your drinks." They rose up and sauntered down the walk together. Two green-and-white butterflies fluttered past them, and in the pear-tree at the corner of the garden a thrush began to sing. "You are glad you have met me, Mr. Gray," said Lord Henry, looking at him. "Yes, I am glad now. I wonder shall I always be glad?" "Always! That is a dreadful word. It makes me shudder when I hear it. Women are so fond of using it. They spoil every romance by trying to make it last for ever. It is a meaningless word, too. The only difference between a caprice and a lifelong passion is that the caprice lasts a little longer." As they entered the studio, Dorian Gray put his hand upon Lord Henry's arm. "In that case, let our friendship be a caprice," he murmured, flushing at his own boldness, then stepped up on the platform and resumed his pose. Lord Henry flung himself into a large wicker arm-chair and watched him. The sweep and dash of the brush on the canvas made the only sound that broke the stillness, except when, now and then, Hallward stepped back to look at his work from a distance. In the slanting beams that streamed through the open doorway the dust danced and was golden. The heavy scent of the roses seemed to brood over everything. After about a quarter of an hour Hallward stopped painting, looked for a long time at Dorian Gray, and then for a long time at the picture, biting the end of one of his huge brushes and frowning. "It is quite finished," he cried at last, and stooping down he wrote his name in long vermilion letters on the left-hand corner of the canvas. Lord Henry came over and examined the picture. It was certainly a wonderful work of art, and a wonderful likeness as well. "My dear fellow, I congratulate you most warmly," he said. "It is the finest portrait of modern times. Mr. Gray, come over and look at yourself." The lad started, as if awakened from some dream. "Is it really finished?" he murmured, stepping down from the platform. "Quite finished," said the painter. "And you have sat splendidly to-day. I am awfully obliged to you." "That is entirely due to me," broke in Lord Henry. "Isn't it, Mr. Gray?" Dorian made no answer, but passed listlessly in front of his picture and turned towards it. When he saw it he drew back, and his cheeks flushed for a moment with pleasure. A look of joy came into his eyes, as if he had recognized himself for the first time. He stood there motionless and in wonder, dimly conscious that Hallward was speaking to him, but not catching the meaning of his words. The sense of his own beauty came on him like a revelation. He had never felt it before. Basil Hallward's compliments had seemed to him to be merely the charming exaggeration of friendship. He had listened to them, laughed at them, forgotten them. They had not influenced his nature. Then had come Lord Henry Wotton with his strange panegyric on youth, his terrible warning of its brevity. That had stirred him at the time, and now, as he stood gazing at the shadow of his own loveliness, the full reality of the description flashed across him. Yes, there would be a day when his face would be wrinkled and wizen, his eyes dim and colourless, the grace of his figure broken and deformed. The scarlet would pass away from his lips and the gold steal from his hair. The life that was to make his soul would mar his body. He would become dreadful, hideous, and uncouth. As he thought of it, a sharp pang of pain struck through him like a knife and made each delicate fibre of his nature quiver. His eyes deepened into amethyst, and across them came a mist of tears. He felt as if a hand of ice had been laid upon his heart. "Don't you like it?" cried Hallward at last, stung a little by the lad's silence, not understanding what it meant. "Of course he likes it," said Lord Henry. "Who wouldn't like it? It is one of the greatest things in modern art. I will give you anything you like to ask for it. I must have it." "It is not my property, Harry." "Whose property is it?" "Dorian's, of course," answered the painter. "He is a very lucky fellow." "How sad it is!" murmured Dorian Gray with his eyes still fixed upon his own portrait. "How sad it is! I shall grow old, and horrible, and dreadful. But this picture will remain always young. It will never be older than this particular day of June.... If it were only the other way! If it were I who was to be always young, and the picture that was to grow old! For that--for that--I would give everything! Yes, there is nothing in the whole world I would not give! I would give my soul for that!" "You would hardly care for such an arrangement, Basil," cried Lord Henry, laughing. "It would be rather hard lines on your work." "I should object very strongly, Harry," said Hallward. Dorian Gray turned and looked at him. "I believe you would, Basil. You like your art better than your friends. I am no more to you than a green bronze figure. Hardly as much, I dare say." The painter stared in amazement. It was so unlike Dorian to speak like that. What had happened? He seemed quite angry. His face was flushed and his cheeks burning. "Yes," he continued, "I am less to you than your ivory Hermes or your silver Faun. You will like them always. How long will you like me? Till I have my first wrinkle, I suppose. I know, now, that when one loses one's good looks, whatever they may be, one loses everything. Your picture has taught me that. Lord Henry Wotton is perfectly right. Youth is the only thing worth having. When I find that I am growing old, I shall kill myself." Hallward turned pale and caught his hand. "Dorian! Dorian!" he cried, "don't talk like that. I have never had such a friend as you, and I shall never have such another. You are not jealous of material things, are you?--you who are finer than any of them!" "I am jealous of everything whose beauty does not die. I am jealous of the portrait you have painted of me. Why should it keep what I must lose? Every moment that passes takes something from me and gives something to it. Oh, if it were only the other way! If the picture could change, and I could be always what I am now! Why did you paint it? It will mock me some day--mock me horribly!" The hot tears welled into his eyes; he tore his hand away and, flinging himself on the divan, he buried his face in the cushions, as though he was praying. "This is your doing, Harry," said the painter bitterly. Lord Henry shrugged his shoulders. "It is the real Dorian Gray--that is all." "It is not." "If it is not, what have I to do with it?" "You should have gone away when I asked you," he muttered. "I stayed when you asked me," was Lord Henry's answer. "Harry, I can't quarrel with my two best friends at once, but between you both you have made me hate the finest piece of work I have ever done, and I will destroy it. What is it but canvas and colour? I will not let it come across our three lives and mar them." Dorian Gray lifted his golden head from the pillow, and with pallid face and tear-stained eyes, looked at him as he walked over to the deal painting-table that was set beneath the high curtained window. What was he doing there? His fingers were straying about among the litter of tin tubes and dry brushes, seeking for something. Yes, it was for the long palette-knife, with its thin blade of lithe steel. He had found it at last. He was going to rip up the canvas. With a stifled sob the lad leaped from the couch, and, rushing over to Hallward, tore the knife out of his hand, and flung it to the end of the studio. "Don't, Basil, don't!" he cried. "It would be murder!" "I am glad you appreciate my work at last, Dorian," said the painter coldly when he had recovered from his surprise. "I never thought you would." "Appreciate it? I am in love with it, Basil. It is part of myself. I feel that." "Well, as soon as you are dry, you shall be varnished, and framed, and sent home. Then you can do what you like with yourself." And he walked across the room and rang the bell for tea. "You will have tea, of course, Dorian? And so will you, Harry? Or do you object to such simple pleasures?" "I adore simple pleasures," said Lord Henry. "They are the last refuge of the complex. But I don't like scenes, except on the stage. What absurd fellows you are, both of you! I wonder who it was defined man as a rational animal. It was the most premature definition ever given. Man is many things, but he is not rational. I am glad he is not, after all--though I wish you chaps would not squabble over the picture. You had much better let me have it, Basil. This silly boy doesn't really want it, and I really do." "If you let any one have it but me, Basil, I shall never forgive you!" cried Dorian Gray; "and I don't allow people to call me a silly boy." "You know the picture is yours, Dorian. I gave it to you before it existed." "And you know you have been a little silly, Mr. Gray, and that you don't really object to being reminded that you are extremely young." "I should have objected very strongly this morning, Lord Henry." "Ah! this morning! You have lived since then." There came a knock at the door, and the butler entered with a laden tea-tray and set it down upon a small Japanese table. There was a rattle of cups and saucers and the hissing of a fluted Georgian urn. Two globe-shaped china dishes were brought in by a page. Dorian Gray went over and poured out the tea. The two men sauntered languidly to the table and examined what was under the covers. "Let us go to the theatre to-night," said Lord Henry. "There is sure to be something on, somewhere. I have promised to dine at White's, but it is only with an old friend, so I can send him a wire to say that I am ill, or that I am prevented from coming in consequence of a subsequent engagement. I think that would be a rather nice excuse: it would have all the surprise of candour." "It is such a bore putting on one's dress-clothes," muttered Hallward. "And, when one has them on, they are so horrid." "Yes," answered Lord Henry dreamily, "the costume of the nineteenth century is detestable. It is so sombre, so depressing. Sin is the only real colour-element left in modern life." "You really must not say things like that before Dorian, Harry." "Before which Dorian? The one who is pouring out tea for us, or the one in the picture?" "Before either." "I should like to come to the theatre with you, Lord Henry," said the lad. "Then you shall come; and you will come, too, Basil, won't you?" "I can't, really. I would sooner not. I have a lot of work to do." "Well, then, you and I will go alone, Mr. Gray." "I should like that awfully." The painter bit his lip and walked over, cup in hand, to the picture. "I shall stay with the real Dorian," he said, sadly. "Is it the real Dorian?" cried the original of the portrait, strolling across to him. "Am I really like that?" "Yes; you are just like that." "How wonderful, Basil!" "At least you are like it in appearance. But it will never alter," sighed Hallward. "That is something." "What a fuss people make about fidelity!" exclaimed Lord Henry. "Why, even in love it is purely a question for physiology. It has nothing to do with our own will. Young men want to be faithful, and are not; old men want to be faithless, and cannot: that is all one can say." "Don't go to the theatre to-night, Dorian," said Hallward. "Stop and dine with me." "I can't, Basil." "Why?" "Because I have promised Lord Henry Wotton to go with him." "He won't like you the better for keeping your promises. He always breaks his own. I beg you not to go." Dorian Gray laughed and shook his head. "I entreat you." The lad hesitated, and looked over at Lord Henry, who was watching them from the tea-table with an amused smile. "I must go, Basil," he answered. "Very well," said Hallward, and he went over and laid down his cup on the tray. "It is rather late, and, as you have to dress, you had better lose no time. Good-bye, Harry. Good-bye, Dorian. Come and see me soon. Come to-morrow." "Certainly." "You won't forget?" "No, of course not," cried Dorian. "And ... Harry!" "Yes, Basil?" "Remember what I asked you, when we were in the garden this morning." "I have forgotten it." "I trust you." "I wish I could trust myself," said Lord Henry, laughing. "Come, Mr. Gray, my hansom is outside, and I can drop you at your own place. Good-bye, Basil. It has been a most interesting afternoon." As the door closed behind them, the painter flung himself down on a sofa, and a look of pain came into his face. CHAPTER 3 At half-past twelve next day Lord Henry Wotton strolled from Curzon Street over to the Albany to call on his uncle, Lord Fermor, a genial if somewhat rough-mannered old bachelor, whom the outside world called selfish because it derived no particular benefit from him, but who was considered generous by Society as he fed the people who amused him. His father had been our ambassador at Madrid when Isabella was young and Prim unthought of, but had retired from the diplomatic service in a capricious moment of annoyance on not being offered the Embassy at Paris, a post to which he considered that he was fully entitled by reason of his birth, his indolence, the good English of his dispatches, and his inordinate passion for pleasure. The son, who had been his father's secretary, had resigned along with his chief, somewhat foolishly as was thought at the time, and on succeeding some months later to the title, had set himself to the serious study of the great aristocratic art of doing absolutely nothing. He had two large town houses, but preferred to live in chambers as it was less trouble, and took most of his meals at his club. He paid some attention to the management of his collieries in the Midland counties, excusing himself for this taint of industry on the ground that the one advantage of having coal was that it enabled a gentleman to afford the decency of burning wood on his own hearth. In politics he was a Tory, except when the Tories were in office, during which period he roundly abused them for being a pack of Radicals. He was a hero to his valet, who bullied him, and a terror to most of his relations, whom he bullied in turn. Only England could have produced him, and he always said that the country was going to the dogs. His principles were out of date, but there was a good deal to be said for his prejudices. When Lord Henry entered the room, he found his uncle sitting in a rough shooting-coat, smoking a cheroot and grumbling over _The Times_. "Well, Harry," said the old gentleman, "what brings you out so early? I thought you dandies never got up till two, and were not visible till five." "Pure family affection, I assure you, Uncle George. I want to get something out of you." "Money, I suppose," said Lord Fermor, making a wry face. "Well, sit down and tell me all about it. Young people, nowadays, imagine that money is everything." "Yes," murmured Lord Henry, settling his button-hole in his coat; "and when they grow older they know it. But I don't want money. It is only people who pay their bills who want that, Uncle George, and I never pay mine. Credit is the capital of a younger son, and one lives charmingly upon it. Besides, I always deal with Dartmoor's tradesmen, and consequently they never bother me. What I want is information: not useful information, of course; useless information." "Well, I can tell you anything that is in an English Blue Book, Harry, although those fellows nowadays write a lot of nonsense. When I was in the Diplomatic, things were much better. But I hear they let them in now by examination. What can you expect? Examinations, sir, are pure humbug from beginning to end. If a man is a gentleman, he knows quite enough, and if he is not a gentleman, whatever he knows is bad for him." "Mr. Dorian Gray does not belong to Blue Books, Uncle George," said Lord Henry languidly. "Mr. Dorian Gray? Who is he?" asked Lord Fermor, knitting his bushy white eyebrows. "That is what I have come to learn, Uncle George. Or rather, I know who he is. He is the last Lord Kelso's grandson. His mother was a Devereux, Lady Margaret Devereux. I want you to tell me about his mother. What was she like? Whom did she marry? You have known nearly everybody in your time, so you might have known her. I am very much interested in Mr. Gray at present. I have only just met him." "Kelso's grandson!" echoed the old gentleman. "Kelso's grandson! ... Of course.... I knew his mother intimately. I believe I was at her christening. She was an extraordinarily beautiful girl, Margaret Devereux, and made all the men frantic by running away with a penniless young fellow--a mere nobody, sir, a subaltern in a foot regiment, or something of that kind. Certainly. I remember the whole thing as if it happened yesterday. The poor chap was killed in a duel at Spa a few months after the marriage. There was an ugly story about it. They said Kelso got some rascally adventurer, some Belgian brute, to insult his son-in-law in public--paid him, sir, to do it, paid him--and that the fellow spitted his man as if he had been a pigeon. The thing was hushed up, but, egad, Kelso ate his chop alone at the club for some time afterwards. He brought his daughter back with him, I was told, and she never spoke to him again. Oh, yes; it was a bad business. The girl died, too, died within a year. So she left a son, did she? I had forgotten that. What sort of boy is he? If he is like his mother, he must be a good-looking chap." "He is very good-looking," assented Lord Henry. "I hope he will fall into proper hands," continued the old man. "He should have a pot of money waiting for him if Kelso did the right thing by him. His mother had money, too. All the Selby property came to her, through her grandfather. Her grandfather hated Kelso, thought him a mean dog. He was, too. Came to Madrid once when I was there. Egad, I was ashamed of him. The Queen used to ask me about the English noble who was always quarrelling with the cabmen about their fares. They made quite a story of it. I didn't dare show my face at Court for a month. I hope he treated his grandson better than he did the jarvies." "I don't know," answered Lord Henry. "I fancy that the boy will be well off. He is not of age yet. He has Selby, I know. He told me so. And ... his mother was very beautiful?" "Margaret Devereux was one of the loveliest creatures I ever saw, Harry. What on earth induced her to behave as she did, I never could understand. She could have married anybody she chose. Carlington was mad after her. She was romantic, though. All the women of that family were. The men were a poor lot, but, egad! the women were wonderful. Carlington went on his knees to her. Told me so himself. She laughed at him, and there wasn't a girl in London at the time who wasn't after him. And by the way, Harry, talking about silly marriages, what is this humbug your father tells me about Dartmoor wanting to marry an American? Ain't English girls good enough for him?" "It is rather fashionable to marry Americans just now, Uncle George." "I'll back English women against the world, Harry," said Lord Fermor, striking the table with his fist. "The betting is on the Americans." "They don't last, I am told," muttered his uncle. "A long engagement exhausts them, but they are capital at a steeplechase. They take things flying. I don't think Dartmoor has a chance." "Who are her people?" grumbled the old gentleman. "Has she got any?" Lord Henry shook his head. "American girls are as clever at concealing their parents, as English women are at concealing their past," he said, rising to go. "They are pork-packers, I suppose?" "I hope so, Uncle George, for Dartmoor's sake. I am told that pork-packing is the most lucrative profession in America, after politics." "Is she pretty?" "She behaves as if she was beautiful. Most American women do. It is the secret of their charm." "Why can't these American women stay in their own country? They are always telling us that it is the paradise for women." "It is. That is the reason why, like Eve, they are so excessively anxious to get out of it," said Lord Henry. "Good-bye, Uncle George. I shall be late for lunch, if I stop any longer. Thanks for giving me the information I wanted. I always like to know everything about my new friends, and nothing about my old ones." "Where are you lunching, Harry?" "At Aunt Agatha's. I have asked myself and Mr. Gray. He is her latest _protege_." "Humph! tell your Aunt Agatha, Harry, not to bother me any more with her charity appeals. I am sick of them. Why, the good woman thinks that I have nothing to do but to write cheques for her silly fads." "All right, Uncle George, I'll tell her, but it won't have any effect. Philanthropic people lose all sense of humanity. It is their distinguishing characteristic." The old gentleman growled approvingly and rang the bell for his servant. Lord Henry passed up the low arcade into Burlington Street and turned his steps in the direction of Berkeley Square. So that was the story of Dorian Gray's parentage. Crudely as it had been told to him, it had yet stirred him by its suggestion of a strange, almost modern romance. A beautiful woman risking everything for a mad passion. A few wild weeks of happiness cut short by a hideous, treacherous crime. Months of voiceless agony, and then a child born in pain. The mother snatched away by death, the boy left to solitude and the tyranny of an old and loveless man. Yes; it was an interesting background. It posed the lad, made him more perfect, as it were. Behind every exquisite thing that existed, there was something tragic. Worlds had to be in travail, that the meanest flower might blow.... And how charming he had been at dinner the night before, as with startled eyes and lips parted in frightened pleasure he had sat opposite to him at the club, the red candleshades staining to a richer rose the wakening wonder of his face. Talking to him was like playing upon an exquisite violin. He answered to every touch and thrill of the bow.... There was something terribly enthralling in the exercise of influence. No other activity was like it. To project one's soul into some gracious form, and let it tarry there for a moment; to hear one's own intellectual views echoed back to one with all the added music of passion and youth; to convey one's temperament into another as though it were a subtle fluid or a strange perfume: there was a real joy in that--perhaps the most satisfying joy left to us in an age so limited and vulgar as our own, an age grossly carnal in its pleasures, and grossly common in its aims.... He was a marvellous type, too, this lad, whom by so curious a chance he had met in Basil's studio, or could be fashioned into a marvellous type, at any rate. Grace was his, and the white purity of boyhood, and beauty such as old Greek marbles kept for us. There was nothing that one could not do with him. He could be made a Titan or a toy. What a pity it was that such beauty was destined to fade! ... And Basil? From a psychological point of view, how interesting he was! The new manner in art, the fresh mode of looking at life, suggested so strangely by the merely visible presence of one who was unconscious of it all; the silent spirit that dwelt in dim woodland, and walked unseen in open field, suddenly showing herself, Dryadlike and not afraid, because in his soul who sought for her there had been wakened that wonderful vision to which alone are wonderful things revealed; the mere shapes and patterns of things becoming, as it were, refined, and gaining a kind of symbolical value, as though they were themselves patterns of some other and more perfect form whose shadow they made real: how strange it all was! He remembered something like it in history. Was it not Plato, that artist in thought, who had first analyzed it? Was it not Buonarotti who had carved it in the coloured marbles of a sonnet-sequence? But in our own century it was strange.... Yes; he would try to be to Dorian Gray what, without knowing it, the lad was to the painter who had fashioned the wonderful portrait. He would seek to dominate him--had already, indeed, half done so. He would make that wonderful spirit his own. There was something fascinating in this son of love and death. Suddenly he stopped and glanced up at the houses. He found that he had passed his aunt's some distance, and, smiling to himself, turned back. When he entered the somewhat sombre hall, the butler told him that they had gone in to lunch. He gave one of the footmen his hat and stick and passed into the dining-room. "Late as usual, Harry," cried his aunt, shaking her head at him. He invented a facile excuse, and having taken the vacant seat next to her, looked round to see who was there. Dorian bowed to him shyly from the end of the table, a flush of pleasure stealing into his cheek. Opposite was the Duchess of Harley, a lady of admirable good-nature and good temper, much liked by every one who knew her, and of those ample architectural proportions that in women who are not duchesses are described by contemporary historians as stoutness. Next to her sat, on her right, Sir Thomas Burdon, a Radical member of Parliament, who followed his leader in public life and in private life followed the best cooks, dining with the Tories and thinking with the Liberals, in accordance with a wise and well-known rule. The post on her left was occupied by Mr. Erskine of Treadley, an old gentleman of considerable charm and culture, who had fallen, however, into bad habits of silence, having, as he explained once to Lady Agatha, said everything that he had to say before he was thirty. His own neighbour was Mrs. Vandeleur, one of his aunt's oldest friends, a perfect saint amongst women, but so dreadfully dowdy that she reminded one of a badly bound hymn-book. Fortunately for him she had on the other side Lord Faudel, a most intelligent middle-aged mediocrity, as bald as a ministerial statement in the House of Commons, with whom she was conversing in that intensely earnest manner which is the one unpardonable error, as he remarked once himself, that all really good people fall into, and from which none of them ever quite escape. "We are talking about poor Dartmoor, Lord Henry," cried the duchess, nodding pleasantly to him across the table. "Do you think he will really marry this fascinating young person?" "I believe she has made up her mind to propose to him, Duchess." "How dreadful!" exclaimed Lady Agatha. "Really, some one should interfere." "I am told, on excellent authority, that her father keeps an American dry-goods store," said Sir Thomas Burdon, looking supercilious. "My uncle has already suggested pork-packing, Sir Thomas." "Dry-goods! What are American dry-goods?" asked the duchess, raising her large hands in wonder and accentuating the verb. "American novels," answered Lord Henry, helping himself to some quail. The duchess looked puzzled. "Don't mind him, my dear," whispered Lady Agatha. "He never means anything that he says." "When America was discovered," said the Radical member--and he began to give some wearisome facts. Like all people who try to exhaust a subject, he exhausted his listeners. The duchess sighed and exercised her privilege of interruption. "I wish to goodness it never had been discovered at all!" she exclaimed. "Really, our girls have no chance nowadays. It is most unfair." "Perhaps, after all, America never has been discovered," said Mr. Erskine; "I myself would say that it had merely been detected." "Oh! but I have seen specimens of the inhabitants," answered the duchess vaguely. "I must confess that most of them are extremely pretty. And they dress well, too. They get all their dresses in Paris. I wish I could afford to do the same." "They say that when good Americans die they go to Paris," chuckled Sir Thomas, who had a large wardrobe of Humour's cast-off clothes. "Really! And where do bad Americans go to when they die?" inquired the duchess. "They go to America," murmured Lord Henry. Sir Thomas frowned. "I am afraid that your nephew is prejudiced against that great country," he said to Lady Agatha. "I have travelled all over it in cars provided by the directors, who, in such matters, are extremely civil. I assure you that it is an education to visit it." "But must we really see Chicago in order to be educated?" asked Mr. Erskine plaintively. "I don't feel up to the journey." Sir Thomas waved his hand. "Mr. Erskine of Treadley has the world on his shelves. We practical men like to see things, not to read about them. The Americans are an extremely interesting people. They are absolutely reasonable. I think that is their distinguishing characteristic. Yes, Mr. Erskine, an absolutely reasonable people. I assure you there is no nonsense about the Americans." "How dreadful!" cried Lord Henry. "I can stand brute force, but brute reason is quite unbearable. There is something unfair about its use. It is hitting below the intellect." "I do not understand you," said Sir Thomas, growing rather red. "I do, Lord Henry," murmured Mr. Erskine, with a smile. "Paradoxes are all very well in their way...." rejoined the baronet. "Was that a paradox?" asked Mr. Erskine. "I did not think so. Perhaps it was. Well, the way of paradoxes is the way of truth. To test reality we must see it on the tight rope. When the verities become acrobats, we can judge them." "Dear me!" said Lady Agatha, "how you men argue! I am sure I never can make out what you are talking about. Oh! Harry, I am quite vexed with you. Why do you try to persuade our nice Mr. Dorian Gray to give up the East End? I assure you he would be quite invaluable. They would love his playing." "I want him to play to me," cried Lord Henry, smiling, and he looked down the table and caught a bright answering glance. "But they are so unhappy in Whitechapel," continued Lady Agatha. "I can sympathize with everything except suffering," said Lord Henry, shrugging his shoulders. "I cannot sympathize with that. It is too ugly, too horrible, too distressing. There is something terribly morbid in the modern sympathy with pain. One should sympathize with the colour, the beauty, the joy of life. The less said about life's sores, the better." "Still, the East End is a very important problem," remarked Sir Thomas with a grave shake of the head. "Quite so," answered the young lord. "It is the problem of slavery, and we try to solve it by amusing the slaves." The politician looked at him keenly. "What change do you propose, then?" he asked. Lord Henry laughed. "I don't desire to change anything in England except the weather," he answered. "I am quite content with philosophic contemplation. But, as the nineteenth century has gone bankrupt through an over-expenditure of sympathy, I would suggest that we should appeal to science to put us straight. The advantage of the emotions is that they lead us astray, and the advantage of science is that it is not emotional." "But we have such grave responsibilities," ventured Mrs. Vandeleur timidly. "Terribly grave," echoed Lady Agatha. Lord Henry looked over at Mr. Erskine. "Humanity takes itself too seriously. It is the world's original sin. If the caveman had known how to laugh, history would have been different." "You are really very comforting," warbled the duchess. "I have always felt rather guilty when I came to see your dear aunt, for I take no interest at all in the East End. For the future I shall be able to look her in the face without a blush." "A blush is very becoming, Duchess," remarked Lord Henry. "Only when one is young," she answered. "When an old woman like myself blushes, it is a very bad sign. Ah! Lord Henry, I wish you would tell me how to become young again." He thought for a moment. "Can you remember any great error that you committed in your early days, Duchess?" he asked, looking at her across the table. "A great many, I fear," she cried. "Then commit them over again," he said gravely. "To get back one's youth, one has merely to repeat one's follies." "A delightful theory!" she exclaimed. "I must put it into practice." "A dangerous theory!" came from Sir Thomas's tight lips. Lady Agatha shook her head, but could not help being amused. Mr. Erskine listened. "Yes," he continued, "that is one of the great secrets of life. Nowadays most people die of a sort of creeping common sense, and discover when it is too late that the only things one never regrets are one's mistakes." A laugh ran round the table. He played with the idea and grew wilful; tossed it into the air and transformed it; let it escape and recaptured it; made it iridescent with fancy and winged it with paradox. The praise of folly, as he went on, soared into a philosophy, and philosophy herself became young, and catching the mad music of pleasure, wearing, one might fancy, her wine-stained robe and wreath of ivy, danced like a Bacchante over the hills of life, and mocked the slow Silenus for being sober. Facts fled before her like frightened forest things. Her white feet trod the huge press at which wise Omar sits, till the seething grape-juice rose round her bare limbs in waves of purple bubbles, or crawled in red foam over the vat's black, dripping, sloping sides. It was an extraordinary improvisation. He felt that the eyes of Dorian Gray were fixed on him, and the consciousness that amongst his audience there was one whose temperament he wished to fascinate seemed to give his wit keenness and to lend colour to his imagination. He was brilliant, fantastic, irresponsible. He charmed his listeners out of themselves, and they followed his pipe, laughing. Dorian Gray never took his gaze off him, but sat like one under a spell, smiles chasing each other over his lips and wonder growing grave in his darkening eyes. At last, liveried in the costume of the age, reality entered the room in the shape of a servant to tell the duchess that her carriage was waiting. She wrung her hands in mock despair. "How annoying!" she cried. "I must go. I have to call for my husband at the club, to take him to some absurd meeting at Willis's Rooms, where he is going to be in the chair. If I am late he is sure to be furious, and I couldn't have a scene in this bonnet. It is far too fragile. A harsh word would ruin it. No, I must go, dear Agatha. Good-bye, Lord Henry, you are quite delightful and dreadfully demoralizing. I am sure I don't know what to say about your views. You must come and dine with us some night. Tuesday? Are you disengaged Tuesday?" "For you I would throw over anybody, Duchess," said Lord Henry with a bow. "Ah! that is very nice, and very wrong of you," she cried; "so mind you come"; and she swept out of the room, followed by Lady Agatha and the other ladies. When Lord Henry had sat down again, Mr. Erskine moved round, and taking a chair close to him, placed his hand upon his arm. "You talk books away," he said; "why don't you write one?" "I am too fond of reading books to care to write them, Mr. Erskine. I should like to write a novel certainly, a novel that would be as lovely as a Persian carpet and as unreal. But there is no literary public in England for anything except newspapers, primers, and encyclopaedias. Of all people in the world the English have the least sense of the beauty of literature." "I fear you are right," answered Mr. Erskine. "I myself used to have literary ambitions, but I gave them up long ago. And now, my dear young friend, if you will allow me to call you so, may I ask if you really meant all that you said to us at lunch?" "I quite forget what I said," smiled Lord Henry. "Was it all very bad?" "Very bad indeed. In fact I consider you extremely dangerous, and if anything happens to our good duchess, we shall all look on you as being primarily responsible. But I should like to talk to you about life. The generation into which I was born was tedious. Some day, when you are tired of London, come down to Treadley and expound to me your philosophy of pleasure over some admirable Burgundy I am fortunate enough to possess." "I shall be charmed. A visit to Treadley would be a great privilege. It has a perfect host, and a perfect library." "You will complete it," answered the old gentleman with a courteous bow. "And now I must bid good-bye to your excellent aunt. I am due at the Athenaeum. It is the hour when we sleep there." "All of you, Mr. Erskine?" "Forty of us, in forty arm-chairs. We are practising for an English Academy of Letters." Lord Henry laughed and rose. "I am going to the park," he cried. As he was passing out of the door, Dorian Gray touched him on the arm. "Let me come with you," he murmured. "But I thought you had promised Basil Hallward to go and see him," answered Lord Henry. "I would sooner come with you; yes, I feel I must come with you. Do let me. And you will promise to talk to me all the time? No one talks so wonderfully as you do." "Ah! I have talked quite enough for to-day," said Lord Henry, smiling. "All I want now is to look at life. You may come and look at it with me, if you care to." CHAPTER 4 One afternoon, a month later, Dorian Gray was reclining in a luxurious arm-chair, in the little library of Lord Henry's house in Mayfair. It was, in its way, a very charming room, with its high panelled wainscoting of olive-stained oak, its cream-coloured frieze and ceiling of raised plasterwork, and its brickdust felt carpet strewn with silk, long-fringed Persian rugs. On a tiny satinwood table stood a statuette by Clodion, and beside it lay a copy of Les Cent Nouvelles, bound for Margaret of Valois by Clovis Eve and powdered with the gilt daisies that Queen had selected for her device. Some large blue china jars and parrot-tulips were ranged on the mantelshelf, and through the small leaded panes of the window streamed the apricot-coloured light of a summer day in London. Lord Henry had not yet come in. He was always late on principle, his principle being that punctuality is the thief of time. So the lad was looking rather sulky, as with listless fingers he turned over the pages of an elaborately illustrated edition of Manon Lescaut that he had found in one of the book-cases. The formal monotonous ticking of the Louis Quatorze clock annoyed him. Once or twice he thought of going away. At last he heard a step outside, and the door opened. "How late you are, Harry!" he murmured. "I am afraid it is not Harry, Mr. Gray," answered a shrill voice. He glanced quickly round and rose to his feet. "I beg your pardon. I thought--" "You thought it was my husband. It is only his wife. You must let me introduce myself. I know you quite well by your photographs. I think my husband has got seventeen of them." "Not seventeen, Lady Henry?" "Well, eighteen, then. And I saw you with him the other night at the opera." She laughed nervously as she spoke, and watched him with her vague forget-me-not eyes. She was a curious woman, whose dresses always looked as if they had been designed in a rage and put on in a tempest. She was usually in love with somebody, and, as her passion was never returned, she had kept all her illusions. She tried to look picturesque, but only succeeded in being untidy. Her name was Victoria, and she had a perfect mania for going to church. "That was at Lohengrin, Lady Henry, I think?" "Yes; it was at dear Lohengrin. I like Wagner's music better than anybody's. It is so loud that one can talk the whole time without other people hearing what one says. That is a great advantage, don't you think so, Mr. Gray?" The same nervous staccato laugh broke from her thin lips, and her fingers began to play with a long tortoise-shell paper-knife. Dorian smiled and shook his head: "I am afraid I don't think so, Lady Henry. I never talk during music--at least, during good music. If one hears bad music, it is one's duty to drown it in conversation." "Ah! that is one of Harry's views, isn't it, Mr. Gray? I always hear Harry's views from his friends. It is the only way I get to know of them. But you must not think I don't like good music. I adore it, but I am afraid of it. It makes me too romantic. I have simply worshipped pianists--two at a time, sometimes, Harry tells me. I don't know what it is about them. Perhaps it is that they are foreigners. They all are, ain't they? Even those that are born in England become foreigners after a time, don't they? It is so clever of them, and such a compliment to art. Makes it quite cosmopolitan, doesn't it? You have never been to any of my parties, have you, Mr. Gray? You must come. I can't afford orchids, but I spare no expense in foreigners. They make one's rooms look so picturesque. But here is Harry! Harry, I came in to look for you, to ask you something--I forget what it was--and I found Mr. Gray here. We have had such a pleasant chat about music. We have quite the same ideas. No; I think our ideas are quite different. But he has been most pleasant. I am so glad I've seen him." "I am charmed, my love, quite charmed," said Lord Henry, elevating his dark, crescent-shaped eyebrows and looking at them both with an amused smile. "So sorry I am late, Dorian. I went to look after a piece of old brocade in Wardour Street and had to bargain for hours for it. Nowadays people know the price of everything and the value of nothing." "I am afraid I must be going," exclaimed Lady Henry, breaking an awkward silence with her silly sudden laugh. "I have promised to drive with the duchess. Good-bye, Mr. Gray. Good-bye, Harry. You are dining out, I suppose? So am I. Perhaps I shall see you at Lady Thornbury's." "I dare say, my dear," said Lord Henry, shutting the door behind her as, looking like a bird of paradise that had been out all night in the rain, she flitted out of the room, leaving a faint odour of frangipanni. Then he lit a cigarette and flung himself down on the sofa. "Never marry a woman with straw-coloured hair, Dorian," he said after a few puffs. "Why, Harry?" "Because they are so sentimental." "But I like sentimental people." "Never marry at all, Dorian. Men marry because they are tired; women, because they are curious: both are disappointed." "I don't think I am likely to marry, Harry. I am too much in love. That is one of your aphorisms. I am putting it into practice, as I do everything that you say." "Who are you in love with?" asked Lord Henry after a pause. "With an actress," said Dorian Gray, blushing. Lord Henry shrugged his shoulders. "That is a rather commonplace _debut_." "You would not say so if you saw her, Harry." "Who is she?" "Her name is Sibyl Vane." "Never heard of her." "No one has. People will some day, however. She is a genius." "My dear boy, no woman is a genius. Women are a decorative sex. They never have anything to say, but they say it charmingly. Women represent the triumph of matter over mind, just as men represent the triumph of mind over morals." "Harry, how can you?" "My dear Dorian, it is quite true. I am analysing women at present, so I ought to know. The subject is not so abstruse as I thought it was. I find that, ultimately, there are only two kinds of women, the plain and the coloured. The plain women are very useful. If you want to gain a reputation for respectability, you have merely to take them down to supper. The other women are very charming. They commit one mistake, however. They paint in order to try and look young. Our grandmothers painted in order to try and talk brilliantly. _Rouge_ and _esprit_ used to go together. That is all over now. As long as a woman can look ten years younger than her own daughter, she is perfectly satisfied. As for conversation, there are only five women in London worth talking to, and two of these can't be admitted into decent society. However, tell me about your genius. How long have you known her?" "Ah! Harry, your views terrify me." "Never mind that. How long have you known her?" "About three weeks." "And where did you come across her?" "I will tell you, Harry, but you mustn't be unsympathetic about it. After all, it never would have happened if I had not met you. You filled me with a wild desire to know everything about life. For days after I met you, something seemed to throb in my veins. As I lounged in the park, or strolled down Piccadilly, I used to look at every one who passed me and wonder, with a mad curiosity, what sort of lives they led. Some of them fascinated me. Others filled me with terror. There was an exquisite poison in the air. I had a passion for sensations.... Well, one evening about seven o'clock, I determined to go out in search of some adventure. I felt that this grey monstrous London of ours, with its myriads of people, its sordid sinners, and its splendid sins, as you once phrased it, must have something in store for me. I fancied a thousand things. The mere danger gave me a sense of delight. I remembered what you had said to me on that wonderful evening when we first dined together, about the search for beauty being the real secret of life. I don't know what I expected, but I went out and wandered eastward, soon losing my way in a labyrinth of grimy streets and black grassless squares. About half-past eight I passed by an absurd little theatre, with great flaring gas-jets and gaudy play-bills. A hideous Jew, in the most amazing waistcoat I ever beheld in my life, was standing at the entrance, smoking a vile cigar. He had greasy ringlets, and an enormous diamond blazed in the centre of a soiled shirt. 'Have a box, my Lord?' he said, when he saw me, and he took off his hat with an air of gorgeous servility. There was something about him, Harry, that amused me. He was such a monster. You will laugh at me, I know, but I really went in and paid a whole guinea for the stage-box. To the present day I can't make out why I did so; and yet if I hadn't--my dear Harry, if I hadn't--I should have missed the greatest romance of my life. I see you are laughing. It is horrid of you!" "I am not laughing, Dorian; at least I am not laughing at you. But you should not say the greatest romance of your life. You should say the first romance of your life. You will always be loved, and you will always be in love with love. A _grande passion_ is the privilege of people who have nothing to do. That is the one use of the idle classes of a country. Don't be afraid. There are exquisite things in store for you. This is merely the beginning." "Do you think my nature so shallow?" cried Dorian Gray angrily. "No; I think your nature so deep." "How do you mean?" "My dear boy, the people who love only once in their lives are really the shallow people. What they call their loyalty, and their fidelity, I call either the lethargy of custom or their lack of imagination. Faithfulness is to the emotional life what consistency is to the life of the intellect--simply a confession of failure. Faithfulness! I must analyse it some day. The passion for property is in it. There are many things that we would throw away if we were not afraid that others might pick them up. But I don't want to interrupt you. Go on with your story." "Well, I found myself seated in a horrid little private box, with a vulgar drop-scene staring me in the face. I looked out from behind the curtain and surveyed the house. It was a tawdry affair, all Cupids and cornucopias, like a third-rate wedding-cake. The gallery and pit were fairly full, but the two rows of dingy stalls were quite empty, and there was hardly a person in what I suppose they called the dress-circle. Women went about with oranges and ginger-beer, and there was a terrible consumption of nuts going on." "It must have been just like the palmy days of the British drama." "Just like, I should fancy, and very depressing. I began to wonder what on earth I should do when I caught sight of the play-bill. What do you think the play was, Harry?" "I should think 'The Idiot Boy', or 'Dumb but Innocent'. Our fathers used to like that sort of piece, I believe. The longer I live, Dorian, the more keenly I feel that whatever was good enough for our fathers is not good enough for us. In art, as in politics, _les grandperes ont toujours tort_." "This play was good enough for us, Harry. It was Romeo and Juliet. I must admit that I was rather annoyed at the idea of seeing Shakespeare done in such a wretched hole of a place. Still, I felt interested, in a sort of way. At any rate, I determined to wait for the first act. There was a dreadful orchestra, presided over by a young Hebrew who sat at a cracked piano, that nearly drove me away, but at last the drop-scene was drawn up and the play began. Romeo was a stout elderly gentleman, with corked eyebrows, a husky tragedy voice, and a figure like a beer-barrel. Mercutio was almost as bad. He was played by the low-comedian, who had introduced gags of his own and was on most friendly terms with the pit. They were both as grotesque as the scenery, and that looked as if it had come out of a country-booth. But Juliet! Harry, imagine a girl, hardly seventeen years of age, with a little, flowerlike face, a small Greek head with plaited coils of dark-brown hair, eyes that were violet wells of passion, lips that were like the petals of a rose. She was the loveliest thing I had ever seen in my life. You said to me once that pathos left you unmoved, but that beauty, mere beauty, could fill your eyes with tears. I tell you, Harry, I could hardly see this girl for the mist of tears that came across me. And her voice--I never heard such a voice. It was very low at first, with deep mellow notes that seemed to fall singly upon one's ear. Then it became a little louder, and sounded like a flute or a distant hautboy. In the garden-scene it had all the tremulous ecstasy that one hears just before dawn when nightingales are singing. There were moments, later on, when it had the wild passion of violins. You know how a voice can stir one. Your voice and the voice of Sibyl Vane are two things that I shall never forget. When I close my eyes, I hear them, and each of them says something different. I don't know which to follow. Why should I not love her? Harry, I do love her. She is everything to me in life. Night after night I go to see her play. One evening she is Rosalind, and the next evening she is Imogen. I have seen her die in the gloom of an Italian tomb, sucking the poison from her lover's lips. I have watched her wandering through the forest of Arden, disguised as a pretty boy in hose and doublet and dainty cap. She has been mad, and has come into the presence of a guilty king, and given him rue to wear and bitter herbs to taste of. She has been innocent, and the black hands of jealousy have crushed her reedlike throat. I have seen her in every age and in every costume. Ordinary women never appeal to one's imagination. They are limited to their century. No glamour ever transfigures them. One knows their minds as easily as one knows their bonnets. One can always find them. There is no mystery in any of them. They ride in the park in the morning and chatter at tea-parties in the afternoon. They have their stereotyped smile and their fashionable manner. They are quite obvious. But an actress! How different an actress is! Harry! why didn't you tell me that the only thing worth loving is an actress?" "Because I have loved so many of them, Dorian." "Oh, yes, horrid people with dyed hair and painted faces." "Don't run down dyed hair and painted faces. There is an extraordinary charm in them, sometimes," said Lord Henry. "I wish now I had not told you about Sibyl Vane." "You could not have helped telling me, Dorian. All through your life you will tell me everything you do." "Yes, Harry, I believe that is true. I cannot help telling you things. You have a curious influence over me. If I ever did a crime, I would come and confess it to you. You would understand me." "People like you--the wilful sunbeams of life--don't commit crimes, Dorian. But I am much obliged for the compliment, all the same. And now tell me--reach me the matches, like a good boy--thanks--what are your actual relations with Sibyl Vane?" Dorian Gray leaped to his feet, with flushed cheeks and burning eyes. "Harry! Sibyl Vane is sacred!" "It is only the sacred things that are worth touching, Dorian," said Lord Henry, with a strange touch of pathos in his voice. "But why should you be annoyed? I suppose she will belong to you some day. When one is in love, one always begins by deceiving one's self, and one always ends by deceiving others. That is what the world calls a romance. You know her, at any rate, I suppose?" "Of course I know her. On the first night I was at the theatre, the horrid old Jew came round to the box after the performance was over and offered to take me behind the scenes and introduce me to her. I was furious with him, and told him that Juliet had been dead for hundreds of years and that her body was lying in a marble tomb in Verona. I think, from his blank look of amazement, that he was under the impression that I had taken too much champagne, or something." "I am not surprised." "Then he asked me if I wrote for any of the newspapers. I told him I never even read them. He seemed terribly disappointed at that, and confided to me that all the dramatic critics were in a conspiracy against him, and that they were every one of them to be bought." "I should not wonder if he was quite right there. But, on the other hand, judging from their appearance, most of them cannot be at all expensive." "Well, he seemed to think they were beyond his means," laughed Dorian. "By this time, however, the lights were being put out in the theatre, and I had to go. He wanted me to try some cigars that he strongly recommended. I declined. The next night, of course, I arrived at the place again. When he saw me, he made me a low bow and assured me that I was a munificent patron of art. He was a most offensive brute, though he had an extraordinary passion for Shakespeare. He told me once, with an air of pride, that his five bankruptcies were entirely due to 'The Bard,' as he insisted on calling him. He seemed to think it a distinction." "It was a distinction, my dear Dorian--a great distinction. Most people become bankrupt through having invested too heavily in the prose of life. To have ruined one's self over poetry is an honour. But when did you first speak to Miss Sibyl Vane?" "The third night. She had been playing Rosalind. I could not help going round. I had thrown her some flowers, and she had looked at me--at least I fancied that she had. The old Jew was persistent. He seemed determined to take me behind, so I consented. It was curious my not wanting to know her, wasn't it?" "No; I don't think so." "My dear Harry, why?" "I will tell you some other time. Now I want to know about the girl." "Sibyl? Oh, she was so shy and so gentle. There is something of a child about her. Her eyes opened wide in exquisite wonder when I told her what I thought of her performance, and she seemed quite unconscious of her power. I think we were both rather nervous. The old Jew stood grinning at the doorway of the dusty greenroom, making elaborate speeches about us both, while we stood looking at each other like children. He would insist on calling me 'My Lord,' so I had to assure Sibyl that I was not anything of the kind. She said quite simply to me, 'You look more like a prince. I must call you Prince Charming.'" "Upon my word, Dorian, Miss Sibyl knows how to pay compliments." "You don't understand her, Harry. She regarded me merely as a person in a play. She knows nothing of life. She lives with her mother, a faded tired woman who played Lady Capulet in a sort of magenta dressing-wrapper on the first night, and looks as if she had seen better days." "I know that look. It depresses me," murmured Lord Henry, examining his rings. "The Jew wanted to tell me her history, but I said it did not interest me." "You were quite right. There is always something infinitely mean about other people's tragedies." "Sibyl is the only thing I care about. What is it to me where she came from? From her little head to her little feet, she is absolutely and entirely divine. Every night of my life I go to see her act, and every night she is more marvellous." "That is the reason, I suppose, that you never dine with me now. I thought you must have some curious romance on hand. You have; but it is not quite what I expected." "My dear Harry, we either lunch or sup together every day, and I have been to the opera with you several times," said Dorian, opening his blue eyes in wonder. "You always come dreadfully late." "Well, I can't help going to see Sibyl play," he cried, "even if it is only for a single act. I get hungry for her presence; and when I think of the wonderful soul that is hidden away in that little ivory body, I am filled with awe." "You can dine with me to-night, Dorian, can't you?" He shook his head. "To-night she is Imogen," he answered, "and to-morrow night she will be Juliet." "When is she Sibyl Vane?" "Never." "I congratulate you." "How horrid you are! She is all the great heroines of the world in one. She is more than an individual. You laugh, but I tell you she has genius. I love her, and I must make her love me. You, who know all the secrets of life, tell me how to charm Sibyl Vane to love me! I want to make Romeo jealous. I want the dead lovers of the world to hear our laughter and grow sad. I want a breath of our passion to stir their dust into consciousness, to wake their ashes into pain. My God, Harry, how I worship her!" He was walking up and down the room as he spoke. Hectic spots of red burned on his cheeks. He was terribly excited. Lord Henry watched him with a subtle sense of pleasure. How different he was now from the shy frightened boy he had met in Basil Hallward's studio! His nature had developed like a flower, had borne blossoms of scarlet flame. Out of its secret hiding-place had crept his soul, and desire had come to meet it on the way. "And what do you propose to do?" said Lord Henry at last. "I want you and Basil to come with me some night and see her act. I have not the slightest fear of the result. You are certain to acknowledge her genius. Then we must get her out of the Jew's hands. She is bound to him for three years--at least for two years and eight months--from the present time. I shall have to pay him something, of course. When all that is settled, I shall take a West End theatre and bring her out properly. She will make the world as mad as she has made me." "That would be impossible, my dear boy." "Yes, she will. She has not merely art, consummate art-instinct, in her, but she has personality also; and you have often told me that it is personalities, not principles, that move the age." "Well, what night shall we go?" "Let me see. To-day is Tuesday. Let us fix to-morrow. She plays Juliet to-morrow." "All right. The Bristol at eight o'clock; and I will get Basil." "Not eight, Harry, please. Half-past six. We must be there before the curtain rises. You must see her in the first act, where she meets Romeo." "Half-past six! What an hour! It will be like having a meat-tea, or reading an English novel. It must be seven. No gentleman dines before seven. Shall you see Basil between this and then? Or shall I write to him?" "Dear Basil! I have not laid eyes on him for a week. It is rather horrid of me, as he has sent me my portrait in the most wonderful frame, specially designed by himself, and, though I am a little jealous of the picture for being a whole month younger than I am, I must admit that I delight in it. Perhaps you had better write to him. I don't want to see him alone. He says things that annoy me. He gives me good advice." Lord Henry smiled. "People are very fond of giving away what they need most themselves. It is what I call the depth of generosity." "Oh, Basil is the best of fellows, but he seems to me to be just a bit of a Philistine. Since I have known you, Harry, I have discovered that." "Basil, my dear boy, puts everything that is charming in him into his work. The consequence is that he has nothing left for life but his prejudices, his principles, and his common sense. The only artists I have ever known who are personally delightful are bad artists. Good artists exist simply in what they make, and consequently are perfectly uninteresting in what they are. A great poet, a really great poet, is the most unpoetical of all creatures. But inferior poets are absolutely fascinating. The worse their rhymes are, the more picturesque they look. The mere fact of having published a book of second-rate sonnets makes a man quite irresistible. He lives the poetry that he cannot write. The others write the poetry that they dare not realize." "I wonder is that really so, Harry?" said Dorian Gray, putting some perfume on his handkerchief out of a large, gold-topped bottle that stood on the table. "It must be, if you say it. And now I am off. Imogen is waiting for me. Don't forget about to-morrow. Good-bye." As he left the room, Lord Henry's heavy eyelids drooped, and he began to think. Certainly few people had ever interested him so much as Dorian Gray, and yet the lad's mad adoration of some one else caused him not the slightest pang of annoyance or jealousy. He was pleased by it. It made him a more interesting study. He had been always enthralled by the methods of natural science, but the ordinary subject-matter of that science had seemed to him trivial and of no import. And so he had begun by vivisecting himself, as he had ended by vivisecting others. Human life--that appeared to him the one thing worth investigating. Compared to it there was nothing else of any value. It was true that as one watched life in its curious crucible of pain and pleasure, one could not wear over one's face a mask of glass, nor keep the sulphurous fumes from troubling the brain and making the imagination turbid with monstrous fancies and misshapen dreams. There were poisons so subtle that to know their properties one had to sicken of them. There were maladies so strange that one had to pass through them if one sought to understand their nature. And, yet, what a great reward one received! How wonderful the whole world became to one! To note the curious hard logic of passion, and the emotional coloured life of the intellect--to observe where they met, and where they separated, at what point they were in unison, and at what point they were at discord--there was a delight in that! What matter what the cost was? One could never pay too high a price for any sensation. He was conscious--and the thought brought a gleam of pleasure into his brown agate eyes--that it was through certain words of his, musical words said with musical utterance, that Dorian Gray's soul had turned to this white girl and bowed in worship before her. To a large extent the lad was his own creation. He had made him premature. That was something. Ordinary people waited till life disclosed to them its secrets, but to the few, to the elect, the mysteries of life were revealed before the veil was drawn away. Sometimes this was the effect of art, and chiefly of the art of literature, which dealt immediately with the passions and the intellect. But now and then a complex personality took the place and assumed the office of art, was indeed, in its way, a real work of art, life having its elaborate masterpieces, just as poetry has, or sculpture, or painting. Yes, the lad was premature. He was gathering his harvest while it was yet spring. The pulse and passion of youth were in him, but he was becoming self-conscious. It was delightful to watch him. With his beautiful face, and his beautiful soul, he was a thing to wonder at. It was no matter how it all ended, or was destined to end. He was like one of those gracious figures in a pageant or a play, whose joys seem to be remote from one, but whose sorrows stir one's sense of beauty, and whose wounds are like red roses. Soul and body, body and soul--how mysterious they were! There was animalism in the soul, and the body had its moments of spirituality. The senses could refine, and the intellect could degrade. Who could say where the fleshly impulse ceased, or the psychical impulse began? How shallow were the arbitrary definitions of ordinary psychologists! And yet how difficult to decide between the claims of the various schools! Was the soul a shadow seated in the house of sin? Or was the body really in the soul, as Giordano Bruno thought? The separation of spirit from matter was a mystery, and the union of spirit with matter was a mystery also. He began to wonder whether we could ever make psychology so absolute a science that each little spring of life would be revealed to us. As it was, we always misunderstood ourselves and rarely understood others. Experience was of no ethical value. It was merely the name men gave to their mistakes. Moralists had, as a rule, regarded it as a mode of warning, had claimed for it a certain ethical efficacy in the formation of character, had praised it as something that taught us what to follow and showed us what to avoid. But there was no motive power in experience. It was as little of an active cause as conscience itself. All that it really demonstrated was that our future would be the same as our past, and that the sin we had done once, and with loathing, we would do many times, and with joy. It was clear to him that the experimental method was the only method by which one could arrive at any scientific analysis of the passions; and certainly Dorian Gray was a subject made to his hand, and seemed to promise rich and fruitful results. His sudden mad love for Sibyl Vane was a psychological phenomenon of no small interest. There was no doubt that curiosity had much to do with it, curiosity and the desire for new experiences, yet it was not a simple, but rather a very complex passion. What there was in it of the purely sensuous instinct of boyhood had been transformed by the workings of the imagination, changed into something that seemed to the lad himself to be remote from sense, and was for that very reason all the more dangerous. It was the passions about whose origin we deceived ourselves that tyrannized most strongly over us. Our weakest motives were those of whose nature we were conscious. It often happened that when we thought we were experimenting on others we were really experimenting on ourselves. While Lord Henry sat dreaming on these things, a knock came to the door, and his valet entered and reminded him it was time to dress for dinner. He got up and looked out into the street. The sunset had smitten into scarlet gold the upper windows of the houses opposite. The panes glowed like plates of heated metal. The sky above was like a faded rose. He thought of his friend's young fiery-coloured life and wondered how it was all going to end. When he arrived home, about half-past twelve o'clock, he saw a telegram lying on the hall table. He opened it and found it was from Dorian Gray. It was to tell him that he was engaged to be married to Sibyl Vane. CHAPTER 5 "Mother, Mother, I am so happy!" whispered the girl, burying her face in the lap of the faded, tired-looking woman who, with back turned to the shrill intrusive light, was sitting in the one arm-chair that their dingy sitting-room contained. "I am so happy!" she repeated, "and you must be happy, too!" Mrs. Vane winced and put her thin, bismuth-whitened hands on her daughter's head. "Happy!" she echoed, "I am only happy, Sibyl, when I see you act. You must not think of anything but your acting. Mr. Isaacs has been very good to us, and we owe him money." The girl looked up and pouted. "Money, Mother?" she cried, "what does money matter? Love is more than money." "Mr. Isaacs has advanced us fifty pounds to pay off our debts and to get a proper outfit for James. You must not forget that, Sibyl. Fifty pounds is a very large sum. Mr. Isaacs has been most considerate." "He is not a gentleman, Mother, and I hate the way he talks to me," said the girl, rising to her feet and going over to the window. "I don't know how we could manage without him," answered the elder woman querulously. Sibyl Vane tossed her head and laughed. "We don't want him any more, Mother. Prince Charming rules life for us now." Then she paused. A rose shook in her blood and shadowed her cheeks. Quick breath parted the petals of her lips. They trembled. Some southern wind of passion swept over her and stirred the dainty folds of her dress. "I love him," she said simply. "Foolish child! foolish child!" was the parrot-phrase flung in answer. The waving of crooked, false-jewelled fingers gave grotesqueness to the words. The girl laughed again. The joy of a caged bird was in her voice. Her eyes caught the melody and echoed it in radiance, then closed for a moment, as though to hide their secret. When they opened, the mist of a dream had passed across them. Thin-lipped wisdom spoke at her from the worn chair, hinted at prudence, quoted from that book of cowardice whose author apes the name of common sense. She did not listen. She was free in her prison of passion. Her prince, Prince Charming, was with her. She had called on memory to remake him. She had sent her soul to search for him, and it had brought him back. His kiss burned again upon her mouth. Her eyelids were warm with his breath. Then wisdom altered its method and spoke of espial and discovery. This young man might be rich. If so, marriage should be thought of. Against the shell of her ear broke the waves of worldly cunning. The arrows of craft shot by her. She saw the thin lips moving, and smiled. Suddenly she felt the need to speak. The wordy silence troubled her. "Mother, Mother," she cried, "why does he love me so much? I know why I love him. I love him because he is like what love himself should be. But what does he see in me? I am not worthy of him. And yet--why, I cannot tell--though I feel so much beneath him, I don't feel humble. I feel proud, terribly proud. Mother, did you love my father as I love Prince Charming?" The elder woman grew pale beneath the coarse powder that daubed her cheeks, and her dry lips twitched with a spasm of pain. Sybil rushed to her, flung her arms round her neck, and kissed her. "Forgive me, Mother. I know it pains you to talk about our father. But it only pains you because you loved him so much. Don't look so sad. I am as happy to-day as you were twenty years ago. Ah! let me be happy for ever!" "My child, you are far too young to think of falling in love. Besides, what do you know of this young man? You don't even know his name. The whole thing is most inconvenient, and really, when James is going away to Australia, and I have so much to think of, I must say that you should have shown more consideration. However, as I said before, if he is rich ..." "Ah! Mother, Mother, let me be happy!" Mrs. Vane glanced at her, and with one of those false theatrical gestures that so often become a mode of second nature to a stage-player, clasped her in her arms. At this moment, the door opened and a young lad with rough brown hair came into the room. He was thick-set of figure, and his hands and feet were large and somewhat clumsy in movement. He was not so finely bred as his sister. One would hardly have guessed the close relationship that existed between them. Mrs. Vane fixed her eyes on him and intensified her smile. She mentally elevated her son to the dignity of an audience. She felt sure that the _tableau_ was interesting. "You might keep some of your kisses for me, Sibyl, I think," said the lad with a good-natured grumble. "Ah! but you don't like being kissed, Jim," she cried. "You are a dreadful old bear." And she ran across the room and hugged him. James Vane looked into his sister's face with tenderness. "I want you to come out with me for a walk, Sibyl. I don't suppose I shall ever see this horrid London again. I am sure I don't want to." "My son, don't say such dreadful things," murmured Mrs. Vane, taking up a tawdry theatrical dress, with a sigh, and beginning to patch it. She felt a little disappointed that he had not joined the group. It would have increased the theatrical picturesqueness of the situation. "Why not, Mother? I mean it." "You pain me, my son. I trust you will return from Australia in a position of affluence. I believe there is no society of any kind in the Colonies--nothing that I would call society--so when you have made your fortune, you must come back and assert yourself in London." "Society!" muttered the lad. "I don't want to know anything about that. I should like to make some money to take you and Sibyl off the stage. I hate it." "Oh, Jim!" said Sibyl, laughing, "how unkind of you! But are you really going for a walk with me? That will be nice! I was afraid you were going to say good-bye to some of your friends--to Tom Hardy, who gave you that hideous pipe, or Ned Langton, who makes fun of you for smoking it. It is very sweet of you to let me have your last afternoon. Where shall we go? Let us go to the park." "I am too shabby," he answered, frowning. "Only swell people go to the park." "Nonsense, Jim," she whispered, stroking the sleeve of his coat. He hesitated for a moment. "Very well," he said at last, "but don't be too long dressing." She danced out of the door. One could hear her singing as she ran upstairs. Her little feet pattered overhead. He walked up and down the room two or three times. Then he turned to the still figure in the chair. "Mother, are my things ready?" he asked. "Quite ready, James," she answered, keeping her eyes on her work. For some months past she had felt ill at ease when she was alone with this rough stern son of hers. Her shallow secret nature was troubled when their eyes met. She used to wonder if he suspected anything. The silence, for he made no other observation, became intolerable to her. She began to complain. Women defend themselves by attacking, just as they attack by sudden and strange surrenders. "I hope you will be contented, James, with your sea-faring life," she said. "You must remember that it is your own choice. You might have entered a solicitor's office. Solicitors are a very respectable class, and in the country often dine with the best families." "I hate offices, and I hate clerks," he replied. "But you are quite right. I have chosen my own life. All I say is, watch over Sibyl. Don't let her come to any harm. Mother, you must watch over her." "James, you really talk very strangely. Of course I watch over Sibyl." "I hear a gentleman comes every night to the theatre and goes behind to talk to her. Is that right? What about that?" "You are speaking about things you don't understand, James. In the profession we are accustomed to receive a great deal of most gratifying attention. I myself used to receive many bouquets at one time. That was when acting was really understood. As for Sibyl, I do not know at present whether her attachment is serious or not. But there is no doubt that the young man in question is a perfect gentleman. He is always most polite to me. Besides, he has the appearance of being rich, and the flowers he sends are lovely." "You don't know his name, though," said the lad harshly. "No," answered his mother with a placid expression in her face. "He has not yet revealed his real name. I think it is quite romantic of him. He is probably a member of the aristocracy." James Vane bit his lip. "Watch over Sibyl, Mother," he cried, "watch over her." "My son, you distress me very much. Sibyl is always under my special care. Of course, if this gentleman is wealthy, there is no reason why she should not contract an alliance with him. I trust he is one of the aristocracy. He has all the appearance of it, I must say. It might be a most brilliant marriage for Sibyl. They would make a charming couple. His good looks are really quite remarkable; everybody notices them." The lad muttered something to himself and drummed on the window-pane with his coarse fingers. He had just turned round to say something when the door opened and Sibyl ran in. "How serious you both are!" she cried. "What is the matter?" "Nothing," he answered. "I suppose one must be serious sometimes. Good-bye, Mother; I will have my dinner at five o'clock. Everything is packed, except my shirts, so you need not trouble." "Good-bye, my son," she answered with a bow of strained stateliness. She was extremely annoyed at the tone he had adopted with her, and there was something in his look that had made her feel afraid. "Kiss me, Mother," said the girl. Her flowerlike lips touched the withered cheek and warmed its frost. "My child! my child!" cried Mrs. Vane, looking up to the ceiling in search of an imaginary gallery. "Come, Sibyl," said her brother impatiently. He hated his mother's affectations. They went out into the flickering, wind-blown sunlight and strolled down the dreary Euston Road. The passersby glanced in wonder at the sullen heavy youth who, in coarse, ill-fitting clothes, was in the company of such a graceful, refined-looking girl. He was like a common gardener walking with a rose. Jim frowned from time to time when he caught the inquisitive glance of some stranger. He had that dislike of being stared at, which comes on geniuses late in life and never leaves the commonplace. Sibyl, however, was quite unconscious of the effect she was producing. Her love was trembling in laughter on her lips. She was thinking of Prince Charming, and, that she might think of him all the more, she did not talk of him, but prattled on about the ship in which Jim was going to sail, about the gold he was certain to find, about the wonderful heiress whose life he was to save from the wicked, red-shirted bushrangers. For he was not to remain a sailor, or a supercargo, or whatever he was going to be. Oh, no! A sailor's existence was dreadful. Fancy being cooped up in a horrid ship, with the hoarse, hump-backed waves trying to get in, and a black wind blowing the masts down and tearing the sails into long screaming ribands! He was to leave the vessel at Melbourne, bid a polite good-bye to the captain, and go off at once to the gold-fields. Before a week was over he was to come across a large nugget of pure gold, the largest nugget that had ever been discovered, and bring it down to the coast in a waggon guarded by six mounted policemen. The bushrangers were to attack them three times, and be defeated with immense slaughter. Or, no. He was not to go to the gold-fields at all. They were horrid places, where men got intoxicated, and shot each other in bar-rooms, and used bad language. He was to be a nice sheep-farmer, and one evening, as he was riding home, he was to see the beautiful heiress being carried off by a robber on a black horse, and give chase, and rescue her. Of course, she would fall in love with him, and he with her, and they would get married, and come home, and live in an immense house in London. Yes, there were delightful things in store for him. But he must be very good, and not lose his temper, or spend his money foolishly. She was only a year older than he was, but she knew so much more of life. He must be sure, also, to write to her by every mail, and to say his prayers each night before he went to sleep. God was very good, and would watch over him. She would pray for him, too, and in a few years he would come back quite rich and happy. The lad listened sulkily to her and made no answer. He was heart-sick at leaving home. Yet it was not this alone that made him gloomy and morose. Inexperienced though he was, he had still a strong sense of the danger of Sibyl's position. This young dandy who was making love to her could mean her no good. He was a gentleman, and he hated him for that, hated him through some curious race-instinct for which he could not account, and which for that reason was all the more dominant within him. He was conscious also of the shallowness and vanity of his mother's nature, and in that saw infinite peril for Sibyl and Sibyl's happiness. Children begin by loving their parents; as they grow older they judge them; sometimes they forgive them. His mother! He had something on his mind to ask of her, something that he had brooded on for many months of silence. A chance phrase that he had heard at the theatre, a whispered sneer that had reached his ears one night as he waited at the stage-door, had set loose a train of horrible thoughts. He remembered it as if it had been the lash of a hunting-crop across his face. His brows knit together into a wedge-like furrow, and with a twitch of pain he bit his underlip. "You are not listening to a word I am saying, Jim," cried Sibyl, "and I am making the most delightful plans for your future. Do say something." "What do you want me to say?" "Oh! that you will be a good boy and not forget us," she answered, smiling at him. He shrugged his shoulders. "You are more likely to forget me than I am to forget you, Sibyl." She flushed. "What do you mean, Jim?" she asked. "You have a new friend, I hear. Who is he? Why have you not told me about him? He means you no good." "Stop, Jim!" she exclaimed. "You must not say anything against him. I love him." "Why, you don't even know his name," answered the lad. "Who is he? I have a right to know." "He is called Prince Charming. Don't you like the name. Oh! you silly boy! you should never forget it. If you only saw him, you would think him the most wonderful person in the world. Some day you will meet him--when you come back from Australia. You will like him so much. Everybody likes him, and I ... love him. I wish you could come to the theatre to-night. He is going to be there, and I am to play Juliet. Oh! how I shall play it! Fancy, Jim, to be in love and play Juliet! To have him sitting there! To play for his delight! I am afraid I may frighten the company, frighten or enthrall them. To be in love is to surpass one's self. Poor dreadful Mr. Isaacs will be shouting 'genius' to his loafers at the bar. He has preached me as a dogma; to-night he will announce me as a revelation. I feel it. And it is all his, his only, Prince Charming, my wonderful lover, my god of graces. But I am poor beside him. Poor? What does that matter? When poverty creeps in at the door, love flies in through the window. Our proverbs want rewriting. They were made in winter, and it is summer now; spring-time for me, I think, a very dance of blossoms in blue skies." "He is a gentleman," said the lad sullenly. "A prince!" she cried musically. "What more do you want?" "He wants to enslave you." "I shudder at the thought of being free." "I want you to beware of him." "To see him is to worship him; to know him is to trust him." "Sibyl, you are mad about him." She laughed and took his arm. "You dear old Jim, you talk as if you were a hundred. Some day you will be in love yourself. Then you will know what it is. Don't look so sulky. Surely you should be glad to think that, though you are going away, you leave me happier than I have ever been before. Life has been hard for us both, terribly hard and difficult. But it will be different now. You are going to a new world, and I have found one. Here are two chairs; let us sit down and see the smart people go by." They took their seats amidst a crowd of watchers. The tulip-beds across the road flamed like throbbing rings of fire. A white dust--tremulous cloud of orris-root it seemed--hung in the panting air. The brightly coloured parasols danced and dipped like monstrous butterflies. She made her brother talk of himself, his hopes, his prospects. He spoke slowly and with effort. They passed words to each other as players at a game pass counters. Sibyl felt oppressed. She could not communicate her joy. A faint smile curving that sullen mouth was all the echo she could win. After some time she became silent. Suddenly she caught a glimpse of golden hair and laughing lips, and in an open carriage with two ladies Dorian Gray drove past. She started to her feet. "There he is!" she cried. "Who?" said Jim Vane. "Prince Charming," she answered, looking after the victoria. He jumped up and seized her roughly by the arm. "Show him to me. Which is he? Point him out. I must see him!" he exclaimed; but at that moment the Duke of Berwick's four-in-hand came between, and when it had left the space clear, the carriage had swept out of the park. "He is gone," murmured Sibyl sadly. "I wish you had seen him." "I wish I had, for as sure as there is a God in heaven, if he ever does you any wrong, I shall kill him." She looked at him in horror. He repeated his words. They cut the air like a dagger. The people round began to gape. A lady standing close to her tittered. "Come away, Jim; come away," she whispered. He followed her doggedly as she passed through the crowd. He felt glad at what he had said. When they reached the Achilles Statue, she turned round. There was pity in her eyes that became laughter on her lips. She shook her head at him. "You are foolish, Jim, utterly foolish; a bad-tempered boy, that is all. How can you say such horrible things? You don't know what you are talking about. You are simply jealous and unkind. Ah! I wish you would fall in love. Love makes people good, and what you said was wicked." "I am sixteen," he answered, "and I know what I am about. Mother is no help to you. She doesn't understand how to look after you. I wish now that I was not going to Australia at all. I have a great mind to chuck the whole thing up. I would, if my articles hadn't been signed." "Oh, don't be so serious, Jim. You are like one of the heroes of those silly melodramas Mother used to be so fond of acting in. I am not going to quarrel with you. I have seen him, and oh! to see him is perfect happiness. We won't quarrel. I know you would never harm any one I love, would you?" "Not as long as you love him, I suppose," was the sullen answer. "I shall love him for ever!" she cried. "And he?" "For ever, too!" "He had better." She shrank from him. Then she laughed and put her hand on his arm. He was merely a boy. At the Marble Arch they hailed an omnibus, which left them close to their shabby home in the Euston Road. It was after five o'clock, and Sibyl had to lie down for a couple of hours before acting. Jim insisted that she should do so. He said that he would sooner part with her when their mother was not present. She would be sure to make a scene, and he detested scenes of every kind. In Sybil's own room they parted. There was jealousy in the lad's heart, and a fierce murderous hatred of the stranger who, as it seemed to him, had come between them. Yet, when her arms were flung round his neck, and her fingers strayed through his hair, he softened and kissed her with real affection. There were tears in his eyes as he went downstairs. His mother was waiting for him below. She grumbled at his unpunctuality, as he entered. He made no answer, but sat down to his meagre meal. The flies buzzed round the table and crawled over the stained cloth. Through the rumble of omnibuses, and the clatter of street-cabs, he could hear the droning voice devouring each minute that was left to him. After some time, he thrust away his plate and put his head in his hands. He felt that he had a right to know. It should have been told to him before, if it was as he suspected. Leaden with fear, his mother watched him. Words dropped mechanically from her lips. A tattered lace handkerchief twitched in her fingers. When the clock struck six, he got up and went to the door. Then he turned back and looked at her. Their eyes met. In hers he saw a wild appeal for mercy. It enraged him. "Mother, I have something to ask you," he said. Her eyes wandered vaguely about the room. She made no answer. "Tell me the truth. I have a right to know. Were you married to my father?" She heaved a deep sigh. It was a sigh of relief. The terrible moment, the moment that night and day, for weeks and months, she had dreaded, had come at last, and yet she felt no terror. Indeed, in some measure it was a disappointment to her. The vulgar directness of the question called for a direct answer. The situation had not been gradually led up to. It was crude. It reminded her of a bad rehearsal. "No," she answered, wondering at the harsh simplicity of life. "My father was a scoundrel then!" cried the lad, clenching his fists. She shook her head. "I knew he was not free. We loved each other very much. If he had lived, he would have made provision for us. Don't speak against him, my son. He was your father, and a gentleman. Indeed, he was highly connected." An oath broke from his lips. "I don't care for myself," he exclaimed, "but don't let Sibyl.... It is a gentleman, isn't it, who is in love with her, or says he is? Highly connected, too, I suppose." For a moment a hideous sense of humiliation came over the woman. Her head drooped. She wiped her eyes with shaking hands. "Sibyl has a mother," she murmured; "I had none." The lad was touched. He went towards her, and stooping down, he kissed her. "I am sorry if I have pained you by asking about my father," he said, "but I could not help it. I must go now. Good-bye. Don't forget that you will have only one child now to look after, and believe me that if this man wrongs my sister, I will find out who he is, track him down, and kill him like a dog. I swear it." The exaggerated folly of the threat, the passionate gesture that accompanied it, the mad melodramatic words, made life seem more vivid to her. She was familiar with the atmosphere. She breathed more freely, and for the first time for many months she really admired her son. She would have liked to have continued the scene on the same emotional scale, but he cut her short. Trunks had to be carried down and mufflers looked for. The lodging-house drudge bustled in and out. There was the bargaining with the cabman. The moment was lost in vulgar details. It was with a renewed feeling of disappointment that she waved the tattered lace handkerchief from the window, as her son drove away. She was conscious that a great opportunity had been wasted. She consoled herself by telling Sibyl how desolate she felt her life would be, now that she had only one child to look after. She remembered the phrase. It had pleased her. Of the threat she said nothing. It was vividly and dramatically expressed. She felt that they would all laugh at it some day. CHAPTER 6 "I suppose you have heard the news, Basil?" said Lord Henry that evening as Hallward was shown into a little private room at the Bristol where dinner had been laid for three. "No, Harry," answered the artist, giving his hat and coat to the bowing waiter. "What is it? Nothing about politics, I hope! They don't interest me. There is hardly a single person in the House of Commons worth painting, though many of them would be the better for a little whitewashing." "Dorian Gray is engaged to be married," said Lord Henry, watching him as he spoke. Hallward started and then frowned. "Dorian engaged to be married!" he cried. "Impossible!" "It is perfectly true." "To whom?" "To some little actress or other." "I can't believe it. Dorian is far too sensible." "Dorian is far too wise not to do foolish things now and then, my dear Basil." "Marriage is hardly a thing that one can do now and then, Harry." "Except in America," rejoined Lord Henry languidly. "But I didn't say he was married. I said he was engaged to be married. There is a great difference. I have a distinct remembrance of being married, but I have no recollection at all of being engaged. I am inclined to think that I never was engaged." "But think of Dorian's birth, and position, and wealth. It would be absurd for him to marry so much beneath him." "If you want to make him marry this girl, tell him that, Basil. He is sure to do it, then. Whenever a man does a thoroughly stupid thing, it is always from the noblest motives." "I hope the girl is good, Harry. I don't want to see Dorian tied to some vile creature, who might degrade his nature and ruin his intellect." "Oh, she is better than good--she is beautiful," murmured Lord Henry, sipping a glass of vermouth and orange-bitters. "Dorian says she is beautiful, and he is not often wrong about things of that kind. Your portrait of him has quickened his appreciation of the personal appearance of other people. It has had that excellent effect, amongst others. We are to see her to-night, if that boy doesn't forget his appointment." "Are you serious?" "Quite serious, Basil. I should be miserable if I thought I should ever be more serious than I am at the present moment." "But do you approve of it, Harry?" asked the painter, walking up and down the room and biting his lip. "You can't approve of it, possibly. It is some silly infatuation." "I never approve, or disapprove, of anything now. It is an absurd attitude to take towards life. We are not sent into the world to air our moral prejudices. I never take any notice of what common people say, and I never interfere with what charming people do. If a personality fascinates me, whatever mode of expression that personality selects is absolutely delightful to me. Dorian Gray falls in love with a beautiful girl who acts Juliet, and proposes to marry her. Why not? If he wedded Messalina, he would be none the less interesting. You know I am not a champion of marriage. The real drawback to marriage is that it makes one unselfish. And unselfish people are colourless. They lack individuality. Still, there are certain temperaments that marriage makes more complex. They retain their egotism, and add to it many other egos. They are forced to have more than one life. They become more highly organized, and to be highly organized is, I should fancy, the object of man's existence. Besides, every experience is of value, and whatever one may say against marriage, it is certainly an experience. I hope that Dorian Gray will make this girl his wife, passionately adore her for six months, and then suddenly become fascinated by some one else. He would be a wonderful study." "You don't mean a single word of all that, Harry; you know you don't. If Dorian Gray's life were spoiled, no one would be sorrier than yourself. You are much better than you pretend to be." Lord Henry laughed. "The reason we all like to think so well of others is that we are all afraid for ourselves. The basis of optimism is sheer terror. We think that we are generous because we credit our neighbour with the possession of those virtues that are likely to be a benefit to us. We praise the banker that we may overdraw our account, and find good qualities in the highwayman in the hope that he may spare our pockets. I mean everything that I have said. I have the greatest contempt for optimism. As for a spoiled life, no life is spoiled but one whose growth is arrested. If you want to mar a nature, you have merely to reform it. As for marriage, of course that would be silly, but there are other and more interesting bonds between men and women. I will certainly encourage them. They have the charm of being fashionable. But here is Dorian himself. He will tell you more than I can." "My dear Harry, my dear Basil, you must both congratulate me!" said the lad, throwing off his evening cape with its satin-lined wings and shaking each of his friends by the hand in turn. "I have never been so happy. Of course, it is sudden--all really delightful things are. And yet it seems to me to be the one thing I have been looking for all my life." He was flushed with excitement and pleasure, and looked extraordinarily handsome. "I hope you will always be very happy, Dorian," said Hallward, "but I don't quite forgive you for not having let me know of your engagement. You let Harry know." "And I don't forgive you for being late for dinner," broke in Lord Henry, putting his hand on the lad's shoulder and smiling as he spoke. "Come, let us sit down and try what the new _chef_ here is like, and then you will tell us how it all came about." "There is really not much to tell," cried Dorian as they took their seats at the small round table. "What happened was simply this. After I left you yesterday evening, Harry, I dressed, had some dinner at that little Italian restaurant in Rupert Street you introduced me to, and went down at eight o'clock to the theatre. Sibyl was playing Rosalind. Of course, the scenery was dreadful and the Orlando absurd. But Sibyl! You should have seen her! When she came on in her boy's clothes, she was perfectly wonderful. She wore a moss-coloured velvet jerkin with cinnamon sleeves, slim, brown, cross-gartered hose, a dainty little green cap with a hawk's feather caught in a jewel, and a hooded cloak lined with dull red. She had never seemed to me more exquisite. She had all the delicate grace of that Tanagra figurine that you have in your studio, Basil. Her hair clustered round her face like dark leaves round a pale rose. As for her acting--well, you shall see her to-night. She is simply a born artist. I sat in the dingy box absolutely enthralled. I forgot that I was in London and in the nineteenth century. I was away with my love in a forest that no man had ever seen. After the performance was over, I went behind and spoke to her. As we were sitting together, suddenly there came into her eyes a look that I had never seen there before. My lips moved towards hers. We kissed each other. I can't describe to you what I felt at that moment. It seemed to me that all my life had been narrowed to one perfect point of rose-coloured joy. She trembled all over and shook like a white narcissus. Then she flung herself on her knees and kissed my hands. I feel that I should not tell you all this, but I can't help it. Of course, our engagement is a dead secret. She has not even told her own mother. I don't know what my guardians will say. Lord Radley is sure to be furious. I don't care. I shall be of age in less than a year, and then I can do what I like. I have been right, Basil, haven't I, to take my love out of poetry and to find my wife in Shakespeare's plays? Lips that Shakespeare taught to speak have whispered their secret in my ear. I have had the arms of Rosalind around me, and kissed Juliet on the mouth." "Yes, Dorian, I suppose you were right," said Hallward slowly. "Have you seen her to-day?" asked Lord Henry. Dorian Gray shook his head. "I left her in the forest of Arden; I shall find her in an orchard in Verona." Lord Henry sipped his champagne in a meditative manner. "At what particular point did you mention the word marriage, Dorian? And what did she say in answer? Perhaps you forgot all about it." "My dear Harry, I did not treat it as a business transaction, and I did not make any formal proposal. I told her that I loved her, and she said she was not worthy to be my wife. Not worthy! Why, the whole world is nothing to me compared with her." "Women are wonderfully practical," murmured Lord Henry, "much more practical than we are. In situations of that kind we often forget to say anything about marriage, and they always remind us." Hallward laid his hand upon his arm. "Don't, Harry. You have annoyed Dorian. He is not like other men. He would never bring misery upon any one. His nature is too fine for that." Lord Henry looked across the table. "Dorian is never annoyed with me," he answered. "I asked the question for the best reason possible, for the only reason, indeed, that excuses one for asking any question--simple curiosity. I have a theory that it is always the women who propose to us, and not we who propose to the women. Except, of course, in middle-class life. But then the middle classes are not modern." Dorian Gray laughed, and tossed his head. "You are quite incorrigible, Harry; but I don't mind. It is impossible to be angry with you. When you see Sibyl Vane, you will feel that the man who could wrong her would be a beast, a beast without a heart. I cannot understand how any one can wish to shame the thing he loves. I love Sibyl Vane. I want to place her on a pedestal of gold and to see the world worship the woman who is mine. What is marriage? An irrevocable vow. You mock at it for that. Ah! don't mock. It is an irrevocable vow that I want to take. Her trust makes me faithful, her belief makes me good. When I am with her, I regret all that you have taught me. I become different from what you have known me to be. I am changed, and the mere touch of Sibyl Vane's hand makes me forget you and all your wrong, fascinating, poisonous, delightful theories." "And those are ...?" asked Lord Henry, helping himself to some salad. "Oh, your theories about life, your theories about love, your theories about pleasure. All your theories, in fact, Harry." "Pleasure is the only thing worth having a theory about," he answered in his slow melodious voice. "But I am afraid I cannot claim my theory as my own. It belongs to Nature, not to me. Pleasure is Nature's test, her sign of approval. When we are happy, we are always good, but when we are good, we are not always happy." "Ah! but what do you mean by good?" cried Basil Hallward. "Yes," echoed Dorian, leaning back in his chair and looking at Lord Henry over the heavy clusters of purple-lipped irises that stood in the centre of the table, "what do you mean by good, Harry?" "To be good is to be in harmony with one's self," he replied, touching the thin stem of his glass with his pale, fine-pointed fingers. "Discord is to be forced to be in harmony with others. One's own life--that is the important thing. As for the lives of one's neighbours, if one wishes to be a prig or a Puritan, one can flaunt one's moral views about them, but they are not one's concern. Besides, individualism has really the higher aim. Modern morality consists in accepting the standard of one's age. I consider that for any man of culture to accept the standard of his age is a form of the grossest immorality." "But, surely, if one lives merely for one's self, Harry, one pays a terrible price for doing so?" suggested the painter. "Yes, we are overcharged for everything nowadays. I should fancy that the real tragedy of the poor is that they can afford nothing but self-denial. Beautiful sins, like beautiful things, are the privilege of the rich." "One has to pay in other ways but money." "What sort of ways, Basil?" "Oh! I should fancy in remorse, in suffering, in ... well, in the consciousness of degradation." Lord Henry shrugged his shoulders. "My dear fellow, mediaeval art is charming, but mediaeval emotions are out of date. One can use them in fiction, of course. But then the only things that one can use in fiction are the things that one has ceased to use in fact. Believe me, no civilized man ever regrets a pleasure, and no uncivilized man ever knows what a pleasure is." "I know what pleasure is," cried Dorian Gray. "It is to adore some one." "That is certainly better than being adored," he answered, toying with some fruits. "Being adored is a nuisance. Women treat us just as humanity treats its gods. They worship us, and are always bothering us to do something for them." "I should have said that whatever they ask for they had first given to us," murmured the lad gravely. "They create love in our natures. They have a right to demand it back." "That is quite true, Dorian," cried Hallward. "Nothing is ever quite true," said Lord Henry. "This is," interrupted Dorian. "You must admit, Harry, that women give to men the very gold of their lives." "Possibly," he sighed, "but they invariably want it back in such very small change. That is the worry. Women, as some witty Frenchman once put it, inspire us with the desire to do masterpieces and always prevent us from carrying them out." "Harry, you are dreadful! I don't know why I like you so much." "You will always like me, Dorian," he replied. "Will you have some coffee, you fellows? Waiter, bring coffee, and _fine-champagne_, and some cigarettes. No, don't mind the cigarettes--I have some. Basil, I can't allow you to smoke cigars. You must have a cigarette. A cigarette is the perfect type of a perfect pleasure. It is exquisite, and it leaves one unsatisfied. What more can one want? Yes, Dorian, you will always be fond of me. I represent to you all the sins you have never had the courage to commit." "What nonsense you talk, Harry!" cried the lad, taking a light from a fire-breathing silver dragon that the waiter had placed on the table. "Let us go down to the theatre. When Sibyl comes on the stage you will have a new ideal of life. She will represent something to you that you have never known." "I have known everything," said Lord Henry, with a tired look in his eyes, "but I am always ready for a new emotion. I am afraid, however, that, for me at any rate, there is no such thing. Still, your wonderful girl may thrill me. I love acting. It is so much more real than life. Let us go. Dorian, you will come with me. I am so sorry, Basil, but there is only room for two in the brougham. You must follow us in a hansom." They got up and put on their coats, sipping their coffee standing. The painter was silent and preoccupied. There was a gloom over him. He could not bear this marriage, and yet it seemed to him to be better than many other things that might have happened. After a few minutes, they all passed downstairs. He drove off by himself, as had been arranged, and watched the flashing lights of the little brougham in front of him. A strange sense of loss came over him. He felt that Dorian Gray would never again be to him all that he had been in the past. Life had come between them.... His eyes darkened, and the crowded flaring streets became blurred to his eyes. When the cab drew up at the theatre, it seemed to him that he had grown years older. CHAPTER 7 For some reason or other, the house was crowded that night, and the fat Jew manager who met them at the door was beaming from ear to ear with an oily tremulous smile. He escorted them to their box with a sort of pompous humility, waving his fat jewelled hands and talking at the top of his voice. Dorian Gray loathed him more than ever. He felt as if he had come to look for Miranda and had been met by Caliban. Lord Henry, upon the other hand, rather liked him. At least he declared he did, and insisted on shaking him by the hand and assuring him that he was proud to meet a man who had discovered a real genius and gone bankrupt over a poet. Hallward amused himself with watching the faces in the pit. The heat was terribly oppressive, and the huge sunlight flamed like a monstrous dahlia with petals of yellow fire. The youths in the gallery had taken off their coats and waistcoats and hung them over the side. They talked to each other across the theatre and shared their oranges with the tawdry girls who sat beside them. Some women were laughing in the pit. Their voices were horribly shrill and discordant. The sound of the popping of corks came from the bar. "What a place to find one's divinity in!" said Lord Henry. "Yes!" answered Dorian Gray. "It was here I found her, and she is divine beyond all living things. When she acts, you will forget everything. These common rough people, with their coarse faces and brutal gestures, become quite different when she is on the stage. They sit silently and watch her. They weep and laugh as she wills them to do. She makes them as responsive as a violin. She spiritualizes them, and one feels that they are of the same flesh and blood as one's self." "The same flesh and blood as one's self! Oh, I hope not!" exclaimed Lord Henry, who was scanning the occupants of the gallery through his opera-glass. "Don't pay any attention to him, Dorian," said the painter. "I understand what you mean, and I believe in this girl. Any one you love must be marvellous, and any girl who has the effect you describe must be fine and noble. To spiritualize one's age--that is something worth doing. If this girl can give a soul to those who have lived without one, if she can create the sense of beauty in people whose lives have been sordid and ugly, if she can strip them of their selfishness and lend them tears for sorrows that are not their own, she is worthy of all your adoration, worthy of the adoration of the world. This marriage is quite right. I did not think so at first, but I admit it now. The gods made Sibyl Vane for you. Without her you would have been incomplete." "Thanks, Basil," answered Dorian Gray, pressing his hand. "I knew that you would understand me. Harry is so cynical, he terrifies me. But here is the orchestra. It is quite dreadful, but it only lasts for about five minutes. Then the curtain rises, and you will see the girl to whom I am going to give all my life, to whom I have given everything that is good in me." A quarter of an hour afterwards, amidst an extraordinary turmoil of applause, Sibyl Vane stepped on to the stage. Yes, she was certainly lovely to look at--one of the loveliest creatures, Lord Henry thought, that he had ever seen. There was something of the fawn in her shy grace and startled eyes. A faint blush, like the shadow of a rose in a mirror of silver, came to her cheeks as she glanced at the crowded enthusiastic house. She stepped back a few paces and her lips seemed to tremble. Basil Hallward leaped to his feet and began to applaud. Motionless, and as one in a dream, sat Dorian Gray, gazing at her. Lord Henry peered through his glasses, murmuring, "Charming! charming!" The scene was the hall of Capulet's house, and Romeo in his pilgrim's dress had entered with Mercutio and his other friends. The band, such as it was, struck up a few bars of music, and the dance began. Through the crowd of ungainly, shabbily dressed actors, Sibyl Vane moved like a creature from a finer world. Her body swayed, while she danced, as a plant sways in the water. The curves of her throat were the curves of a white lily. Her hands seemed to be made of cool ivory. Yet she was curiously listless. She showed no sign of joy when her eyes rested on Romeo. The few words she had to speak-- Good pilgrim, you do wrong your hand too much, Which mannerly devotion shows in this; For saints have hands that pilgrims' hands do touch, And palm to palm is holy palmers' kiss-- with the brief dialogue that follows, were spoken in a thoroughly artificial manner. The voice was exquisite, but from the point of view of tone it was absolutely false. It was wrong in colour. It took away all the life from the verse. It made the passion unreal. Dorian Gray grew pale as he watched her. He was puzzled and anxious. Neither of his friends dared to say anything to him. She seemed to them to be absolutely incompetent. They were horribly disappointed. Yet they felt that the true test of any Juliet is the balcony scene of the second act. They waited for that. If she failed there, there was nothing in her. She looked charming as she came out in the moonlight. That could not be denied. But the staginess of her acting was unbearable, and grew worse as she went on. Her gestures became absurdly artificial. She overemphasized everything that she had to say. The beautiful passage-- Thou knowest the mask of night is on my face, Else would a maiden blush bepaint my cheek For that which thou hast heard me speak to-night-- was declaimed with the painful precision of a schoolgirl who has been taught to recite by some second-rate professor of elocution. When she leaned over the balcony and came to those wonderful lines-- Although I joy in thee, I have no joy of this contract to-night: It is too rash, too unadvised, too sudden; Too like the lightning, which doth cease to be Ere one can say, "It lightens." Sweet, good-night! This bud of love by summer's ripening breath May prove a beauteous flower when next we meet-- she spoke the words as though they conveyed no meaning to her. It was not nervousness. Indeed, so far from being nervous, she was absolutely self-contained. It was simply bad art. She was a complete failure. Even the common uneducated audience of the pit and gallery lost their interest in the play. They got restless, and began to talk loudly and to whistle. The Jew manager, who was standing at the back of the dress-circle, stamped and swore with rage. The only person unmoved was the girl herself. When the second act was over, there came a storm of hisses, and Lord Henry got up from his chair and put on his coat. "She is quite beautiful, Dorian," he said, "but she can't act. Let us go." "I am going to see the play through," answered the lad, in a hard bitter voice. "I am awfully sorry that I have made you waste an evening, Harry. I apologize to you both." "My dear Dorian, I should think Miss Vane was ill," interrupted Hallward. "We will come some other night." "I wish she were ill," he rejoined. "But she seems to me to be simply callous and cold. She has entirely altered. Last night she was a great artist. This evening she is merely a commonplace mediocre actress." "Don't talk like that about any one you love, Dorian. Love is a more wonderful thing than art." "They are both simply forms of imitation," remarked Lord Henry. "But do let us go. Dorian, you must not stay here any longer. It is not good for one's morals to see bad acting. Besides, I don't suppose you will want your wife to act, so what does it matter if she plays Juliet like a wooden doll? She is very lovely, and if she knows as little about life as she does about acting, she will be a delightful experience. There are only two kinds of people who are really fascinating--people who know absolutely everything, and people who know absolutely nothing. Good heavens, my dear boy, don't look so tragic! The secret of remaining young is never to have an emotion that is unbecoming. Come to the club with Basil and myself. We will smoke cigarettes and drink to the beauty of Sibyl Vane. She is beautiful. What more can you want?" "Go away, Harry," cried the lad. "I want to be alone. Basil, you must go. Ah! can't you see that my heart is breaking?" The hot tears came to his eyes. His lips trembled, and rushing to the back of the box, he leaned up against the wall, hiding his face in his hands. "Let us go, Basil," said Lord Henry with a strange tenderness in his voice, and the two young men passed out together. A few moments afterwards the footlights flared up and the curtain rose on the third act. Dorian Gray went back to his seat. He looked pale, and proud, and indifferent. The play dragged on, and seemed interminable. Half of the audience went out, tramping in heavy boots and laughing. The whole thing was a _fiasco_. The last act was played to almost empty benches. The curtain went down on a titter and some groans. As soon as it was over, Dorian Gray rushed behind the scenes into the greenroom. The girl was standing there alone, with a look of triumph on her face. Her eyes were lit with an exquisite fire. There was a radiance about her. Her parted lips were smiling over some secret of their own. When he entered, she looked at him, and an expression of infinite joy came over her. "How badly I acted to-night, Dorian!" she cried. "Horribly!" he answered, gazing at her in amazement. "Horribly! It was dreadful. Are you ill? You have no idea what it was. You have no idea what I suffered." The girl smiled. "Dorian," she answered, lingering over his name with long-drawn music in her voice, as though it were sweeter than honey to the red petals of her mouth. "Dorian, you should have understood. But you understand now, don't you?" "Understand what?" he asked, angrily. "Why I was so bad to-night. Why I shall always be bad. Why I shall never act well again." He shrugged his shoulders. "You are ill, I suppose. When you are ill you shouldn't act. You make yourself ridiculous. My friends were bored. I was bored." She seemed not to listen to him. She was transfigured with joy. An ecstasy of happiness dominated her. "Dorian, Dorian," she cried, "before I knew you, acting was the one reality of my life. It was only in the theatre that I lived. I thought that it was all true. I was Rosalind one night and Portia the other. The joy of Beatrice was my joy, and the sorrows of Cordelia were mine also. I believed in everything. The common people who acted with me seemed to me to be godlike. The painted scenes were my world. I knew nothing but shadows, and I thought them real. You came--oh, my beautiful love!--and you freed my soul from prison. You taught me what reality really is. To-night, for the first time in my life, I saw through the hollowness, the sham, the silliness of the empty pageant in which I had always played. To-night, for the first time, I became conscious that the Romeo was hideous, and old, and painted, that the moonlight in the orchard was false, that the scenery was vulgar, and that the words I had to speak were unreal, were not my words, were not what I wanted to say. You had brought me something higher, something of which all art is but a reflection. You had made me understand what love really is. My love! My love! Prince Charming! Prince of life! I have grown sick of shadows. You are more to me than all art can ever be. What have I to do with the puppets of a play? When I came on to-night, I could not understand how it was that everything had gone from me. I thought that I was going to be wonderful. I found that I could do nothing. Suddenly it dawned on my soul what it all meant. The knowledge was exquisite to me. I heard them hissing, and I smiled. What could they know of love such as ours? Take me away, Dorian--take me away with you, where we can be quite alone. I hate the stage. I might mimic a passion that I do not feel, but I cannot mimic one that burns me like fire. Oh, Dorian, Dorian, you understand now what it signifies? Even if I could do it, it would be profanation for me to play at being in love. You have made me see that." He flung himself down on the sofa and turned away his face. "You have killed my love," he muttered. She looked at him in wonder and laughed. He made no answer. She came across to him, and with her little fingers stroked his hair. She knelt down and pressed his hands to her lips. He drew them away, and a shudder ran through him. Then he leaped up and went to the door. "Yes," he cried, "you have killed my love. You used to stir my imagination. Now you don't even stir my curiosity. You simply produce no effect. I loved you because you were marvellous, because you had genius and intellect, because you realized the dreams of great poets and gave shape and substance to the shadows of art. You have thrown it all away. You are shallow and stupid. My God! how mad I was to love you! What a fool I have been! You are nothing to me now. I will never see you again. I will never think of you. I will never mention your name. You don't know what you were to me, once. Why, once ... Oh, I can't bear to think of it! I wish I had never laid eyes upon you! You have spoiled the romance of my life. How little you can know of love, if you say it mars your art! Without your art, you are nothing. I would have made you famous, splendid, magnificent. The world would have worshipped you, and you would have borne my name. What are you now? A third-rate actress with a pretty face." The girl grew white, and trembled. She clenched her hands together, and her voice seemed to catch in her throat. "You are not serious, Dorian?" she murmured. "You are acting." "Acting! I leave that to you. You do it so well," he answered bitterly. She rose from her knees and, with a piteous expression of pain in her face, came across the room to him. She put her hand upon his arm and looked into his eyes. He thrust her back. "Don't touch me!" he cried. A low moan broke from her, and she flung herself at his feet and lay there like a trampled flower. "Dorian, Dorian, don't leave me!" she whispered. "I am so sorry I didn't act well. I was thinking of you all the time. But I will try--indeed, I will try. It came so suddenly across me, my love for you. I think I should never have known it if you had not kissed me--if we had not kissed each other. Kiss me again, my love. Don't go away from me. I couldn't bear it. Oh! don't go away from me. My brother ... No; never mind. He didn't mean it. He was in jest.... But you, oh! can't you forgive me for to-night? I will work so hard and try to improve. Don't be cruel to me, because I love you better than anything in the world. After all, it is only once that I have not pleased you. But you are quite right, Dorian. I should have shown myself more of an artist. It was foolish of me, and yet I couldn't help it. Oh, don't leave me, don't leave me." A fit of passionate sobbing choked her. She crouched on the floor like a wounded thing, and Dorian Gray, with his beautiful eyes, looked down at her, and his chiselled lips curled in exquisite disdain. There is always something ridiculous about the emotions of people whom one has ceased to love. Sibyl Vane seemed to him to be absurdly melodramatic. Her tears and sobs annoyed him. "I am going," he said at last in his calm clear voice. "I don't wish to be unkind, but I can't see you again. You have disappointed me." She wept silently, and made no answer, but crept nearer. Her little hands stretched blindly out, and appeared to be seeking for him. He turned on his heel and left the room. In a few moments he was out of the theatre. Where he went to he hardly knew. He remembered wandering through dimly lit streets, past gaunt, black-shadowed archways and evil-looking houses. Women with hoarse voices and harsh laughter had called after him. Drunkards had reeled by, cursing and chattering to themselves like monstrous apes. He had seen grotesque children huddled upon door-steps, and heard shrieks and oaths from gloomy courts. As the dawn was just breaking, he found himself close to Covent Garden. The darkness lifted, and, flushed with faint fires, the sky hollowed itself into a perfect pearl. Huge carts filled with nodding lilies rumbled slowly down the polished empty street. The air was heavy with the perfume of the flowers, and their beauty seemed to bring him an anodyne for his pain. He followed into the market and watched the men unloading their waggons. A white-smocked carter offered him some cherries. He thanked him, wondered why he refused to accept any money for them, and began to eat them listlessly. They had been plucked at midnight, and the coldness of the moon had entered into them. A long line of boys carrying crates of striped tulips, and of yellow and red roses, defiled in front of him, threading their way through the huge, jade-green piles of vegetables. Under the portico, with its grey, sun-bleached pillars, loitered a troop of draggled bareheaded girls, waiting for the auction to be over. Others crowded round the swinging doors of the coffee-house in the piazza. The heavy cart-horses slipped and stamped upon the rough stones, shaking their bells and trappings. Some of the drivers were lying asleep on a pile of sacks. Iris-necked and pink-footed, the pigeons ran about picking up seeds. After a little while, he hailed a hansom and drove home. For a few moments he loitered upon the doorstep, looking round at the silent square, with its blank, close-shuttered windows and its staring blinds. The sky was pure opal now, and the roofs of the houses glistened like silver against it. From some chimney opposite a thin wreath of smoke was rising. It curled, a violet riband, through the nacre-coloured air. In the huge gilt Venetian lantern, spoil of some Doge's barge, that hung from the ceiling of the great, oak-panelled hall of entrance, lights were still burning from three flickering jets: thin blue petals of flame they seemed, rimmed with white fire. He turned them out and, having thrown his hat and cape on the table, passed through the library towards the door of his bedroom, a large octagonal chamber on the ground floor that, in his new-born feeling for luxury, he had just had decorated for himself and hung with some curious Renaissance tapestries that had been discovered stored in a disused attic at Selby Royal. As he was turning the handle of the door, his eye fell upon the portrait Basil Hallward had painted of him. He started back as if in surprise. Then he went on into his own room, looking somewhat puzzled. After he had taken the button-hole out of his coat, he seemed to hesitate. Finally, he came back, went over to the picture, and examined it. In the dim arrested light that struggled through the cream-coloured silk blinds, the face appeared to him to be a little changed. The expression looked different. One would have said that there was a touch of cruelty in the mouth. It was certainly strange. He turned round and, walking to the window, drew up the blind. The bright dawn flooded the room and swept the fantastic shadows into dusky corners, where they lay shuddering. But the strange expression that he had noticed in the face of the portrait seemed to linger there, to be more intensified even. The quivering ardent sunlight showed him the lines of cruelty round the mouth as clearly as if he had been looking into a mirror after he had done some dreadful thing. He winced and, taking up from the table an oval glass framed in ivory Cupids, one of Lord Henry's many presents to him, glanced hurriedly into its polished depths. No line like that warped his red lips. What did it mean? He rubbed his eyes, and came close to the picture, and examined it again. There were no signs of any change when he looked into the actual painting, and yet there was no doubt that the whole expression had altered. It was not a mere fancy of his own. The thing was horribly apparent. He threw himself into a chair and began to think. Suddenly there flashed across his mind what he had said in Basil Hallward's studio the day the picture had been finished. Yes, he remembered it perfectly. He had uttered a mad wish that he himself might remain young, and the portrait grow old; that his own beauty might be untarnished, and the face on the canvas bear the burden of his passions and his sins; that the painted image might be seared with the lines of suffering and thought, and that he might keep all the delicate bloom and loveliness of his then just conscious boyhood. Surely his wish had not been fulfilled? Such things were impossible. It seemed monstrous even to think of them. And, yet, there was the picture before him, with the touch of cruelty in the mouth. Cruelty! Had he been cruel? It was the girl's fault, not his. He had dreamed of her as a great artist, had given his love to her because he had thought her great. Then she had disappointed him. She had been shallow and unworthy. And, yet, a feeling of infinite regret came over him, as he thought of her lying at his feet sobbing like a little child. He remembered with what callousness he had watched her. Why had he been made like that? Why had such a soul been given to him? But he had suffered also. During the three terrible hours that the play had lasted, he had lived centuries of pain, aeon upon aeon of torture. His life was well worth hers. She had marred him for a moment, if he had wounded her for an age. Besides, women were better suited to bear sorrow than men. They lived on their emotions. They only thought of their emotions. When they took lovers, it was merely to have some one with whom they could have scenes. Lord Henry had told him that, and Lord Henry knew what women were. Why should he trouble about Sibyl Vane? She was nothing to him now. But the picture? What was he to say of that? It held the secret of his life, and told his story. It had taught him to love his own beauty. Would it teach him to loathe his own soul? Would he ever look at it again? No; it was merely an illusion wrought on the troubled senses. The horrible night that he had passed had left phantoms behind it. Suddenly there had fallen upon his brain that tiny scarlet speck that makes men mad. The picture had not changed. It was folly to think so. Yet it was watching him, with its beautiful marred face and its cruel smile. Its bright hair gleamed in the early sunlight. Its blue eyes met his own. A sense of infinite pity, not for himself, but for the painted image of himself, came over him. It had altered already, and would alter more. Its gold would wither into grey. Its red and white roses would die. For every sin that he committed, a stain would fleck and wreck its fairness. But he would not sin. The picture, changed or unchanged, would be to him the visible emblem of conscience. He would resist temptation. He would not see Lord Henry any more--would not, at any rate, listen to those subtle poisonous theories that in Basil Hallward's garden had first stirred within him the passion for impossible things. He would go back to Sibyl Vane, make her amends, marry her, try to love her again. Yes, it was his duty to do so. She must have suffered more than he had. Poor child! He had been selfish and cruel to her. The fascination that she had exercised over him would return. They would be happy together. His life with her would be beautiful and pure. He got up from his chair and drew a large screen right in front of the portrait, shuddering as he glanced at it. "How horrible!" he murmured to himself, and he walked across to the window and opened it. When he stepped out on to the grass, he drew a deep breath. The fresh morning air seemed to drive away all his sombre passions. He thought only of Sibyl. A faint echo of his love came back to him. He repeated her name over and over again. The birds that were singing in the dew-drenched garden seemed to be telling the flowers about her. CHAPTER 8 It was long past noon when he awoke. His valet had crept several times on tiptoe into the room to see if he was stirring, and had wondered what made his young master sleep so late. Finally his bell sounded, and Victor came in softly with a cup of tea, and a pile of letters, on a small tray of old Sevres china, and drew back the olive-satin curtains, with their shimmering blue lining, that hung in front of the three tall windows. "Monsieur has well slept this morning," he said, smiling. "What o'clock is it, Victor?" asked Dorian Gray drowsily. "One hour and a quarter, Monsieur." How late it was! He sat up, and having sipped some tea, turned over his letters. One of them was from Lord Henry, and had been brought by hand that morning. He hesitated for a moment, and then put it aside. The others he opened listlessly. They contained the usual collection of cards, invitations to dinner, tickets for private views, programmes of charity concerts, and the like that are showered on fashionable young men every morning during the season. There was a rather heavy bill for a chased silver Louis-Quinze toilet-set that he had not yet had the courage to send on to his guardians, who were extremely old-fashioned people and did not realize that we live in an age when unnecessary things are our only necessities; and there were several very courteously worded communications from Jermyn Street money-lenders offering to advance any sum of money at a moment's notice and at the most reasonable rates of interest. After about ten minutes he got up, and throwing on an elaborate dressing-gown of silk-embroidered cashmere wool, passed into the onyx-paved bathroom. The cool water refreshed him after his long sleep. He seemed to have forgotten all that he had gone through. A dim sense of having taken part in some strange tragedy came to him once or twice, but there was the unreality of a dream about it. As soon as he was dressed, he went into the library and sat down to a light French breakfast that had been laid out for him on a small round table close to the open window. It was an exquisite day. The warm air seemed laden with spices. A bee flew in and buzzed round the blue-dragon bowl that, filled with sulphur-yellow roses, stood before him. He felt perfectly happy. Suddenly his eye fell on the screen that he had placed in front of the portrait, and he started. "Too cold for Monsieur?" asked his valet, putting an omelette on the table. "I shut the window?" Dorian shook his head. "I am not cold," he murmured. Was it all true? Had the portrait really changed? Or had it been simply his own imagination that had made him see a look of evil where there had been a look of joy? Surely a painted canvas could not alter? The thing was absurd. It would serve as a tale to tell Basil some day. It would make him smile. And, yet, how vivid was his recollection of the whole thing! First in the dim twilight, and then in the bright dawn, he had seen the touch of cruelty round the warped lips. He almost dreaded his valet leaving the room. He knew that when he was alone he would have to examine the portrait. He was afraid of certainty. When the coffee and cigarettes had been brought and the man turned to go, he felt a wild desire to tell him to remain. As the door was closing behind him, he called him back. The man stood waiting for his orders. Dorian looked at him for a moment. "I am not at home to any one, Victor," he said with a sigh. The man bowed and retired. Then he rose from the table, lit a cigarette, and flung himself down on a luxuriously cushioned couch that stood facing the screen. The screen was an old one, of gilt Spanish leather, stamped and wrought with a rather florid Louis-Quatorze pattern. He scanned it curiously, wondering if ever before it had concealed the secret of a man's life. Should he move it aside, after all? Why not let it stay there? What was the use of knowing? If the thing was true, it was terrible. If it was not true, why trouble about it? But what if, by some fate or deadlier chance, eyes other than his spied behind and saw the horrible change? What should he do if Basil Hallward came and asked to look at his own picture? Basil would be sure to do that. No; the thing had to be examined, and at once. Anything would be better than this dreadful state of doubt. He got up and locked both doors. At least he would be alone when he looked upon the mask of his shame. Then he drew the screen aside and saw himself face to face. It was perfectly true. The portrait had altered. As he often remembered afterwards, and always with no small wonder, he found himself at first gazing at the portrait with a feeling of almost scientific interest. That such a change should have taken place was incredible to him. And yet it was a fact. Was there some subtle affinity between the chemical atoms that shaped themselves into form and colour on the canvas and the soul that was within him? Could it be that what that soul thought, they realized?--that what it dreamed, they made true? Or was there some other, more terrible reason? He shuddered, and felt afraid, and, going back to the couch, lay there, gazing at the picture in sickened horror. One thing, however, he felt that it had done for him. It had made him conscious how unjust, how cruel, he had been to Sibyl Vane. It was not too late to make reparation for that. She could still be his wife. His unreal and selfish love would yield to some higher influence, would be transformed into some nobler passion, and the portrait that Basil Hallward had painted of him would be a guide to him through life, would be to him what holiness is to some, and conscience to others, and the fear of God to us all. There were opiates for remorse, drugs that could lull the moral sense to sleep. But here was a visible symbol of the degradation of sin. Here was an ever-present sign of the ruin men brought upon their souls. Three o'clock struck, and four, and the half-hour rang its double chime, but Dorian Gray did not stir. He was trying to gather up the scarlet threads of life and to weave them into a pattern; to find his way through the sanguine labyrinth of passion through which he was wandering. He did not know what to do, or what to think. Finally, he went over to the table and wrote a passionate letter to the girl he had loved, imploring her forgiveness and accusing himself of madness. He covered page after page with wild words of sorrow and wilder words of pain. There is a luxury in self-reproach. When we blame ourselves, we feel that no one else has a right to blame us. It is the confession, not the priest, that gives us absolution. When Dorian had finished the letter, he felt that he had been forgiven. Suddenly there came a knock to the door, and he heard Lord Henry's voice outside. "My dear boy, I must see you. Let me in at once. I can't bear your shutting yourself up like this." He made no answer at first, but remained quite still. The knocking still continued and grew louder. Yes, it was better to let Lord Henry in, and to explain to him the new life he was going to lead, to quarrel with him if it became necessary to quarrel, to part if parting was inevitable. He jumped up, drew the screen hastily across the picture, and unlocked the door. "I am so sorry for it all, Dorian," said Lord Henry as he entered. "But you must not think too much about it." "Do you mean about Sibyl Vane?" asked the lad. "Yes, of course," answered Lord Henry, sinking into a chair and slowly pulling off his yellow gloves. "It is dreadful, from one point of view, but it was not your fault. Tell me, did you go behind and see her, after the play was over?" "Yes." "I felt sure you had. Did you make a scene with her?" "I was brutal, Harry--perfectly brutal. But it is all right now. I am not sorry for anything that has happened. It has taught me to know myself better." "Ah, Dorian, I am so glad you take it in that way! I was afraid I would find you plunged in remorse and tearing that nice curly hair of yours." "I have got through all that," said Dorian, shaking his head and smiling. "I am perfectly happy now. I know what conscience is, to begin with. It is not what you told me it was. It is the divinest thing in us. Don't sneer at it, Harry, any more--at least not before me. I want to be good. I can't bear the idea of my soul being hideous." "A very charming artistic basis for ethics, Dorian! I congratulate you on it. But how are you going to begin?" "By marrying Sibyl Vane." "Marrying Sibyl Vane!" cried Lord Henry, standing up and looking at him in perplexed amazement. "But, my dear Dorian--" "Yes, Harry, I know what you are going to say. Something dreadful about marriage. Don't say it. Don't ever say things of that kind to me again. Two days ago I asked Sibyl to marry me. I am not going to break my word to her. She is to be my wife." "Your wife! Dorian! ... Didn't you get my letter? I wrote to you this morning, and sent the note down by my own man." "Your letter? Oh, yes, I remember. I have not read it yet, Harry. I was afraid there might be something in it that I wouldn't like. You cut life to pieces with your epigrams." "You know nothing then?" "What do you mean?" Lord Henry walked across the room, and sitting down by Dorian Gray, took both his hands in his own and held them tightly. "Dorian," he said, "my letter--don't be frightened--was to tell you that Sibyl Vane is dead." A cry of pain broke from the lad's lips, and he leaped to his feet, tearing his hands away from Lord Henry's grasp. "Dead! Sibyl dead! It is not true! It is a horrible lie! How dare you say it?" "It is quite true, Dorian," said Lord Henry, gravely. "It is in all the morning papers. I wrote down to you to ask you not to see any one till I came. There will have to be an inquest, of course, and you must not be mixed up in it. Things like that make a man fashionable in Paris. But in London people are so prejudiced. Here, one should never make one's _debut_ with a scandal. One should reserve that to give an interest to one's old age. I suppose they don't know your name at the theatre? If they don't, it is all right. Did any one see you going round to her room? That is an important point." Dorian did not answer for a few moments. He was dazed with horror. Finally he stammered, in a stifled voice, "Harry, did you say an inquest? What did you mean by that? Did Sibyl--? Oh, Harry, I can't bear it! But be quick. Tell me everything at once." "I have no doubt it was not an accident, Dorian, though it must be put in that way to the public. It seems that as she was leaving the theatre with her mother, about half-past twelve or so, she said she had forgotten something upstairs. They waited some time for her, but she did not come down again. They ultimately found her lying dead on the floor of her dressing-room. She had swallowed something by mistake, some dreadful thing they use at theatres. I don't know what it was, but it had either prussic acid or white lead in it. I should fancy it was prussic acid, as she seems to have died instantaneously." "Harry, Harry, it is terrible!" cried the lad. "Yes; it is very tragic, of course, but you must not get yourself mixed up in it. I see by _The Standard_ that she was seventeen. I should have thought she was almost younger than that. She looked such a child, and seemed to know so little about acting. Dorian, you mustn't let this thing get on your nerves. You must come and dine with me, and afterwards we will look in at the opera. It is a Patti night, and everybody will be there. You can come to my sister's box. She has got some smart women with her." "So I have murdered Sibyl Vane," said Dorian Gray, half to himself, "murdered her as surely as if I had cut her little throat with a knife. Yet the roses are not less lovely for all that. The birds sing just as happily in my garden. And to-night I am to dine with you, and then go on to the opera, and sup somewhere, I suppose, afterwards. How extraordinarily dramatic life is! If I had read all this in a book, Harry, I think I would have wept over it. Somehow, now that it has happened actually, and to me, it seems far too wonderful for tears. Here is the first passionate love-letter I have ever written in my life. Strange, that my first passionate love-letter should have been addressed to a dead girl. Can they feel, I wonder, those white silent people we call the dead? Sibyl! Can she feel, or know, or listen? Oh, Harry, how I loved her once! It seems years ago to me now. She was everything to me. Then came that dreadful night--was it really only last night?--when she played so badly, and my heart almost broke. She explained it all to me. It was terribly pathetic. But I was not moved a bit. I thought her shallow. Suddenly something happened that made me afraid. I can't tell you what it was, but it was terrible. I said I would go back to her. I felt I had done wrong. And now she is dead. My God! My God! Harry, what shall I do? You don't know the danger I am in, and there is nothing to keep me straight. She would have done that for me. She had no right to kill herself. It was selfish of her." "My dear Dorian," answered Lord Henry, taking a cigarette from his case and producing a gold-latten matchbox, "the only way a woman can ever reform a man is by boring him so completely that he loses all possible interest in life. If you had married this girl, you would have been wretched. Of course, you would have treated her kindly. One can always be kind to people about whom one cares nothing. But she would have soon found out that you were absolutely indifferent to her. And when a woman finds that out about her husband, she either becomes dreadfully dowdy, or wears very smart bonnets that some other woman's husband has to pay for. I say nothing about the social mistake, which would have been abject--which, of course, I would not have allowed--but I assure you that in any case the whole thing would have been an absolute failure." "I suppose it would," muttered the lad, walking up and down the room and looking horribly pale. "But I thought it was my duty. It is not my fault that this terrible tragedy has prevented my doing what was right. I remember your saying once that there is a fatality about good resolutions--that they are always made too late. Mine certainly were." "Good resolutions are useless attempts to interfere with scientific laws. Their origin is pure vanity. Their result is absolutely _nil_. They give us, now and then, some of those luxurious sterile emotions that have a certain charm for the weak. That is all that can be said for them. They are simply cheques that men draw on a bank where they have no account." "Harry," cried Dorian Gray, coming over and sitting down beside him, "why is it that I cannot feel this tragedy as much as I want to? I don't think I am heartless. Do you?" "You have done too many foolish things during the last fortnight to be entitled to give yourself that name, Dorian," answered Lord Henry with his sweet melancholy smile. The lad frowned. "I don't like that explanation, Harry," he rejoined, "but I am glad you don't think I am heartless. I am nothing of the kind. I know I am not. And yet I must admit that this thing that has happened does not affect me as it should. It seems to me to be simply like a wonderful ending to a wonderful play. It has all the terrible beauty of a Greek tragedy, a tragedy in which I took a great part, but by which I have not been wounded." "It is an interesting question," said Lord Henry, who found an exquisite pleasure in playing on the lad's unconscious egotism, "an extremely interesting question. I fancy that the true explanation is this: It often happens that the real tragedies of life occur in such an inartistic manner that they hurt us by their crude violence, their absolute incoherence, their absurd want of meaning, their entire lack of style. They affect us just as vulgarity affects us. They give us an impression of sheer brute force, and we revolt against that. Sometimes, however, a tragedy that possesses artistic elements of beauty crosses our lives. If these elements of beauty are real, the whole thing simply appeals to our sense of dramatic effect. Suddenly we find that we are no longer the actors, but the spectators of the play. Or rather we are both. We watch ourselves, and the mere wonder of the spectacle enthralls us. In the present case, what is it that has really happened? Some one has killed herself for love of you. I wish that I had ever had such an experience. It would have made me in love with love for the rest of my life. The people who have adored me--there have not been very many, but there have been some--have always insisted on living on, long after I had ceased to care for them, or they to care for me. They have become stout and tedious, and when I meet them, they go in at once for reminiscences. That awful memory of woman! What a fearful thing it is! And what an utter intellectual stagnation it reveals! One should absorb the colour of life, but one should never remember its details. Details are always vulgar." "I must sow poppies in my garden," sighed Dorian. "There is no necessity," rejoined his companion. "Life has always poppies in her hands. Of course, now and then things linger. I once wore nothing but violets all through one season, as a form of artistic mourning for a romance that would not die. Ultimately, however, it did die. I forget what killed it. I think it was her proposing to sacrifice the whole world for me. That is always a dreadful moment. It fills one with the terror of eternity. Well--would you believe it?--a week ago, at Lady Hampshire's, I found myself seated at dinner next the lady in question, and she insisted on going over the whole thing again, and digging up the past, and raking up the future. I had buried my romance in a bed of asphodel. She dragged it out again and assured me that I had spoiled her life. I am bound to state that she ate an enormous dinner, so I did not feel any anxiety. But what a lack of taste she showed! The one charm of the past is that it is the past. But women never know when the curtain has fallen. They always want a sixth act, and as soon as the interest of the play is entirely over, they propose to continue it. If they were allowed their own way, every comedy would have a tragic ending, and every tragedy would culminate in a farce. They are charmingly artificial, but they have no sense of art. You are more fortunate than I am. I assure you, Dorian, that not one of the women I have known would have done for me what Sibyl Vane did for you. Ordinary women always console themselves. Some of them do it by going in for sentimental colours. Never trust a woman who wears mauve, whatever her age may be, or a woman over thirty-five who is fond of pink ribbons. It always means that they have a history. Others find a great consolation in suddenly discovering the good qualities of their husbands. They flaunt their conjugal felicity in one's face, as if it were the most fascinating of sins. Religion consoles some. Its mysteries have all the charm of a flirtation, a woman once told me, and I can quite understand it. Besides, nothing makes one so vain as being told that one is a sinner. Conscience makes egotists of us all. Yes; there is really no end to the consolations that women find in modern life. Indeed, I have not mentioned the most important one." "What is that, Harry?" said the lad listlessly. "Oh, the obvious consolation. Taking some one else's admirer when one loses one's own. In good society that always whitewashes a woman. But really, Dorian, how different Sibyl Vane must have been from all the women one meets! There is something to me quite beautiful about her death. I am glad I am living in a century when such wonders happen. They make one believe in the reality of the things we all play with, such as romance, passion, and love." "I was terribly cruel to her. You forget that." "I am afraid that women appreciate cruelty, downright cruelty, more than anything else. They have wonderfully primitive instincts. We have emancipated them, but they remain slaves looking for their masters, all the same. They love being dominated. I am sure you were splendid. I have never seen you really and absolutely angry, but I can fancy how delightful you looked. And, after all, you said something to me the day before yesterday that seemed to me at the time to be merely fanciful, but that I see now was absolutely true, and it holds the key to everything." "What was that, Harry?" "You said to me that Sibyl Vane represented to you all the heroines of romance--that she was Desdemona one night, and Ophelia the other; that if she died as Juliet, she came to life as Imogen." "She will never come to life again now," muttered the lad, burying his face in his hands. "No, she will never come to life. She has played her last part. But you must think of that lonely death in the tawdry dressing-room simply as a strange lurid fragment from some Jacobean tragedy, as a wonderful scene from Webster, or Ford, or Cyril Tourneur. The girl never really lived, and so she has never really died. To you at least she was always a dream, a phantom that flitted through Shakespeare's plays and left them lovelier for its presence, a reed through which Shakespeare's music sounded richer and more full of joy. The moment she touched actual life, she marred it, and it marred her, and so she passed away. Mourn for Ophelia, if you like. Put ashes on your head because Cordelia was strangled. Cry out against Heaven because the daughter of Brabantio died. But don't waste your tears over Sibyl Vane. She was less real than they are." There was a silence. The evening darkened in the room. Noiselessly, and with silver feet, the shadows crept in from the garden. The colours faded wearily out of things. After some time Dorian Gray looked up. "You have explained me to myself, Harry," he murmured with something of a sigh of relief. "I felt all that you have said, but somehow I was afraid of it, and I could not express it to myself. How well you know me! But we will not talk again of what has happened. It has been a marvellous experience. That is all. I wonder if life has still in store for me anything as marvellous." "Life has everything in store for you, Dorian. There is nothing that you, with your extraordinary good looks, will not be able to do." "But suppose, Harry, I became haggard, and old, and wrinkled? What then?" "Ah, then," said Lord Henry, rising to go, "then, my dear Dorian, you would have to fight for your victories. As it is, they are brought to you. No, you must keep your good looks. We live in an age that reads too much to be wise, and that thinks too much to be beautiful. We cannot spare you. And now you had better dress and drive down to the club. We are rather late, as it is." "I think I shall join you at the opera, Harry. I feel too tired to eat anything. What is the number of your sister's box?" "Twenty-seven, I believe. It is on the grand tier. You will see her name on the door. But I am sorry you won't come and dine." "I don't feel up to it," said Dorian listlessly. "But I am awfully obliged to you for all that you have said to me. You are certainly my best friend. No one has ever understood me as you have." "We are only at the beginning of our friendship, Dorian," answered Lord Henry, shaking him by the hand. "Good-bye. I shall see you before nine-thirty, I hope. Remember, Patti is singing." As he closed the door behind him, Dorian Gray touched the bell, and in a few minutes Victor appeared with the lamps and drew the blinds down. He waited impatiently for him to go. The man seemed to take an interminable time over everything. As soon as he had left, he rushed to the screen and drew it back. No; there was no further change in the picture. It had received the news of Sibyl Vane's death before he had known of it himself. It was conscious of the events of life as they occurred. The vicious cruelty that marred the fine lines of the mouth had, no doubt, appeared at the very moment that the girl had drunk the poison, whatever it was. Or was it indifferent to results? Did it merely take cognizance of what passed within the soul? He wondered, and hoped that some day he would see the change taking place before his very eyes, shuddering as he hoped it. Poor Sibyl! What a romance it had all been! She had often mimicked death on the stage. Then Death himself had touched her and taken her with him. How had she played that dreadful last scene? Had she cursed him, as she died? No; she had died for love of him, and love would always be a sacrament to him now. She had atoned for everything by the sacrifice she had made of her life. He would not think any more of what she had made him go through, on that horrible night at the theatre. When he thought of her, it would be as a wonderful tragic figure sent on to the world's stage to show the supreme reality of love. A wonderful tragic figure? Tears came to his eyes as he remembered her childlike look, and winsome fanciful ways, and shy tremulous grace. He brushed them away hastily and looked again at the picture. He felt that the time had really come for making his choice. Or had his choice already been made? Yes, life had decided that for him--life, and his own infinite curiosity about life. Eternal youth, infinite passion, pleasures subtle and secret, wild joys and wilder sins--he was to have all these things. The portrait was to bear the burden of his shame: that was all. A feeling of pain crept over him as he thought of the desecration that was in store for the fair face on the canvas. Once, in boyish mockery of Narcissus, he had kissed, or feigned to kiss, those painted lips that now smiled so cruelly at him. Morning after morning he had sat before the portrait wondering at its beauty, almost enamoured of it, as it seemed to him at times. Was it to alter now with every mood to which he yielded? Was it to become a monstrous and loathsome thing, to be hidden away in a locked room, to be shut out from the sunlight that had so often touched to brighter gold the waving wonder of its hair? The pity of it! the pity of it! For a moment, he thought of praying that the horrible sympathy that existed between him and the picture might cease. It had changed in answer to a prayer; perhaps in answer to a prayer it might remain unchanged. And yet, who, that knew anything about life, would surrender the chance of remaining always young, however fantastic that chance might be, or with what fateful consequences it might be fraught? Besides, was it really under his control? Had it indeed been prayer that had produced the substitution? Might there not be some curious scientific reason for it all? If thought could exercise its influence upon a living organism, might not thought exercise an influence upon dead and inorganic things? Nay, without thought or conscious desire, might not things external to ourselves vibrate in unison with our moods and passions, atom calling to atom in secret love or strange affinity? But the reason was of no importance. He would never again tempt by a prayer any terrible power. If the picture was to alter, it was to alter. That was all. Why inquire too closely into it? For there would be a real pleasure in watching it. He would be able to follow his mind into its secret places. This portrait would be to him the most magical of mirrors. As it had revealed to him his own body, so it would reveal to him his own soul. And when winter came upon it, he would still be standing where spring trembles on the verge of summer. When the blood crept from its face, and left behind a pallid mask of chalk with leaden eyes, he would keep the glamour of boyhood. Not one blossom of his loveliness would ever fade. Not one pulse of his life would ever weaken. Like the gods of the Greeks, he would be strong, and fleet, and joyous. What did it matter what happened to the coloured image on the canvas? He would be safe. That was everything. He drew the screen back into its former place in front of the picture, smiling as he did so, and passed into his bedroom, where his valet was already waiting for him. An hour later he was at the opera, and Lord Henry was leaning over his chair. CHAPTER 9 As he was sitting at breakfast next morning, Basil Hallward was shown into the room. "I am so glad I have found you, Dorian," he said gravely. "I called last night, and they told me you were at the opera. Of course, I knew that was impossible. But I wish you had left word where you had really gone to. I passed a dreadful evening, half afraid that one tragedy might be followed by another. I think you might have telegraphed for me when you heard of it first. I read of it quite by chance in a late edition of _The Globe_ that I picked up at the club. I came here at once and was miserable at not finding you. I can't tell you how heart-broken I am about the whole thing. I know what you must suffer. But where were you? Did you go down and see the girl's mother? For a moment I thought of following you there. They gave the address in the paper. Somewhere in the Euston Road, isn't it? But I was afraid of intruding upon a sorrow that I could not lighten. Poor woman! What a state she must be in! And her only child, too! What did she say about it all?" "My dear Basil, how do I know?" murmured Dorian Gray, sipping some pale-yellow wine from a delicate, gold-beaded bubble of Venetian glass and looking dreadfully bored. "I was at the opera. You should have come on there. I met Lady Gwendolen, Harry's sister, for the first time. We were in her box. She is perfectly charming; and Patti sang divinely. Don't talk about horrid subjects. If one doesn't talk about a thing, it has never happened. It is simply expression, as Harry says, that gives reality to things. I may mention that she was not the woman's only child. There is a son, a charming fellow, I believe. But he is not on the stage. He is a sailor, or something. And now, tell me about yourself and what you are painting." "You went to the opera?" said Hallward, speaking very slowly and with a strained touch of pain in his voice. "You went to the opera while Sibyl Vane was lying dead in some sordid lodging? You can talk to me of other women being charming, and of Patti singing divinely, before the girl you loved has even the quiet of a grave to sleep in? Why, man, there are horrors in store for that little white body of hers!" "Stop, Basil! I won't hear it!" cried Dorian, leaping to his feet. "You must not tell me about things. What is done is done. What is past is past." "You call yesterday the past?" "What has the actual lapse of time got to do with it? It is only shallow people who require years to get rid of an emotion. A man who is master of himself can end a sorrow as easily as he can invent a pleasure. I don't want to be at the mercy of my emotions. I want to use them, to enjoy them, and to dominate them." "Dorian, this is horrible! Something has changed you completely. You look exactly the same wonderful boy who, day after day, used to come down to my studio to sit for his picture. But you were simple, natural, and affectionate then. You were the most unspoiled creature in the whole world. Now, I don't know what has come over you. You talk as if you had no heart, no pity in you. It is all Harry's influence. I see that." The lad flushed up and, going to the window, looked out for a few moments on the green, flickering, sun-lashed garden. "I owe a great deal to Harry, Basil," he said at last, "more than I owe to you. You only taught me to be vain." "Well, I am punished for that, Dorian--or shall be some day." "I don't know what you mean, Basil," he exclaimed, turning round. "I don't know what you want. What do you want?" "I want the Dorian Gray I used to paint," said the artist sadly. "Basil," said the lad, going over to him and putting his hand on his shoulder, "you have come too late. Yesterday, when I heard that Sibyl Vane had killed herself--" "Killed herself! Good heavens! is there no doubt about that?" cried Hallward, looking up at him with an expression of horror. "My dear Basil! Surely you don't think it was a vulgar accident? Of course she killed herself." The elder man buried his face in his hands. "How fearful," he muttered, and a shudder ran through him. "No," said Dorian Gray, "there is nothing fearful about it. It is one of the great romantic tragedies of the age. As a rule, people who act lead the most commonplace lives. They are good husbands, or faithful wives, or something tedious. You know what I mean--middle-class virtue and all that kind of thing. How different Sibyl was! She lived her finest tragedy. She was always a heroine. The last night she played--the night you saw her--she acted badly because she had known the reality of love. When she knew its unreality, she died, as Juliet might have died. She passed again into the sphere of art. There is something of the martyr about her. Her death has all the pathetic uselessness of martyrdom, all its wasted beauty. But, as I was saying, you must not think I have not suffered. If you had come in yesterday at a particular moment--about half-past five, perhaps, or a quarter to six--you would have found me in tears. Even Harry, who was here, who brought me the news, in fact, had no idea what I was going through. I suffered immensely. Then it passed away. I cannot repeat an emotion. No one can, except sentimentalists. And you are awfully unjust, Basil. You come down here to console me. That is charming of you. You find me consoled, and you are furious. How like a sympathetic person! You remind me of a story Harry told me about a certain philanthropist who spent twenty years of his life in trying to get some grievance redressed, or some unjust law altered--I forget exactly what it was. Finally he succeeded, and nothing could exceed his disappointment. He had absolutely nothing to do, almost died of _ennui_, and became a confirmed misanthrope. And besides, my dear old Basil, if you really want to console me, teach me rather to forget what has happened, or to see it from a proper artistic point of view. Was it not Gautier who used to write about _la consolation des arts_? I remember picking up a little vellum-covered book in your studio one day and chancing on that delightful phrase. Well, I am not like that young man you told me of when we were down at Marlow together, the young man who used to say that yellow satin could console one for all the miseries of life. I love beautiful things that one can touch and handle. Old brocades, green bronzes, lacquer-work, carved ivories, exquisite surroundings, luxury, pomp--there is much to be got from all these. But the artistic temperament that they create, or at any rate reveal, is still more to me. To become the spectator of one's own life, as Harry says, is to escape the suffering of life. I know you are surprised at my talking to you like this. You have not realized how I have developed. I was a schoolboy when you knew me. I am a man now. I have new passions, new thoughts, new ideas. I am different, but you must not like me less. I am changed, but you must always be my friend. Of course, I am very fond of Harry. But I know that you are better than he is. You are not stronger--you are too much afraid of life--but you are better. And how happy we used to be together! Don't leave me, Basil, and don't quarrel with me. I am what I am. There is nothing more to be said." The painter felt strangely moved. The lad was infinitely dear to him, and his personality had been the great turning point in his art. He could not bear the idea of reproaching him any more. After all, his indifference was probably merely a mood that would pass away. There was so much in him that was good, so much in him that was noble. "Well, Dorian," he said at length, with a sad smile, "I won't speak to you again about this horrible thing, after to-day. I only trust your name won't be mentioned in connection with it. The inquest is to take place this afternoon. Have they summoned you?" Dorian shook his head, and a look of annoyance passed over his face at the mention of the word "inquest." There was something so crude and vulgar about everything of the kind. "They don't know my name," he answered. "But surely she did?" "Only my Christian name, and that I am quite sure she never mentioned to any one. She told me once that they were all rather curious to learn who I was, and that she invariably told them my name was Prince Charming. It was pretty of her. You must do me a drawing of Sibyl, Basil. I should like to have something more of her than the memory of a few kisses and some broken pathetic words." "I will try and do something, Dorian, if it would please you. But you must come and sit to me yourself again. I can't get on without you." "I can never sit to you again, Basil. It is impossible!" he exclaimed, starting back. The painter stared at him. "My dear boy, what nonsense!" he cried. "Do you mean to say you don't like what I did of you? Where is it? Why have you pulled the screen in front of it? Let me look at it. It is the best thing I have ever done. Do take the screen away, Dorian. It is simply disgraceful of your servant hiding my work like that. I felt the room looked different as I came in." "My servant has nothing to do with it, Basil. You don't imagine I let him arrange my room for me? He settles my flowers for me sometimes--that is all. No; I did it myself. The light was too strong on the portrait." "Too strong! Surely not, my dear fellow? It is an admirable place for it. Let me see it." And Hallward walked towards the corner of the room. A cry of terror broke from Dorian Gray's lips, and he rushed between the painter and the screen. "Basil," he said, looking very pale, "you must not look at it. I don't wish you to." "Not look at my own work! You are not serious. Why shouldn't I look at it?" exclaimed Hallward, laughing. "If you try to look at it, Basil, on my word of honour I will never speak to you again as long as I live. I am quite serious. I don't offer any explanation, and you are not to ask for any. But, remember, if you touch this screen, everything is over between us." Hallward was thunderstruck. He looked at Dorian Gray in absolute amazement. He had never seen him like this before. The lad was actually pallid with rage. His hands were clenched, and the pupils of his eyes were like disks of blue fire. He was trembling all over. "Dorian!" "Don't speak!" "But what is the matter? Of course I won't look at it if you don't want me to," he said, rather coldly, turning on his heel and going over towards the window. "But, really, it seems rather absurd that I shouldn't see my own work, especially as I am going to exhibit it in Paris in the autumn. I shall probably have to give it another coat of varnish before that, so I must see it some day, and why not to-day?" "To exhibit it! You want to exhibit it?" exclaimed Dorian Gray, a strange sense of terror creeping over him. Was the world going to be shown his secret? Were people to gape at the mystery of his life? That was impossible. Something--he did not know what--had to be done at once. "Yes; I don't suppose you will object to that. Georges Petit is going to collect all my best pictures for a special exhibition in the Rue de Seze, which will open the first week in October. The portrait will only be away a month. I should think you could easily spare it for that time. In fact, you are sure to be out of town. And if you keep it always behind a screen, you can't care much about it." Dorian Gray passed his hand over his forehead. There were beads of perspiration there. He felt that he was on the brink of a horrible danger. "You told me a month ago that you would never exhibit it," he cried. "Why have you changed your mind? You people who go in for being consistent have just as many moods as others have. The only difference is that your moods are rather meaningless. You can't have forgotten that you assured me most solemnly that nothing in the world would induce you to send it to any exhibition. You told Harry exactly the same thing." He stopped suddenly, and a gleam of light came into his eyes. He remembered that Lord Henry had said to him once, half seriously and half in jest, "If you want to have a strange quarter of an hour, get Basil to tell you why he won't exhibit your picture. He told me why he wouldn't, and it was a revelation to me." Yes, perhaps Basil, too, had his secret. He would ask him and try. "Basil," he said, coming over quite close and looking him straight in the face, "we have each of us a secret. Let me know yours, and I shall tell you mine. What was your reason for refusing to exhibit my picture?" The painter shuddered in spite of himself. "Dorian, if I told you, you might like me less than you do, and you would certainly laugh at me. I could not bear your doing either of those two things. If you wish me never to look at your picture again, I am content. I have always you to look at. If you wish the best work I have ever done to be hidden from the world, I am satisfied. Your friendship is dearer to me than any fame or reputation." "No, Basil, you must tell me," insisted Dorian Gray. "I think I have a right to know." His feeling of terror had passed away, and curiosity had taken its place. He was determined to find out Basil Hallward's mystery. "Let us sit down, Dorian," said the painter, looking troubled. "Let us sit down. And just answer me one question. Have you noticed in the picture something curious?--something that probably at first did not strike you, but that revealed itself to you suddenly?" "Basil!" cried the lad, clutching the arms of his chair with trembling hands and gazing at him with wild startled eyes. "I see you did. Don't speak. Wait till you hear what I have to say. Dorian, from the moment I met you, your personality had the most extraordinary influence over me. I was dominated, soul, brain, and power, by you. You became to me the visible incarnation of that unseen ideal whose memory haunts us artists like an exquisite dream. I worshipped you. I grew jealous of every one to whom you spoke. I wanted to have you all to myself. I was only happy when I was with you. When you were away from me, you were still present in my art.... Of course, I never let you know anything about this. It would have been impossible. You would not have understood it. I hardly understood it myself. I only knew that I had seen perfection face to face, and that the world had become wonderful to my eyes--too wonderful, perhaps, for in such mad worships there is peril, the peril of losing them, no less than the peril of keeping them.... Weeks and weeks went on, and I grew more and more absorbed in you. Then came a new development. I had drawn you as Paris in dainty armour, and as Adonis with huntsman's cloak and polished boar-spear. Crowned with heavy lotus-blossoms you had sat on the prow of Adrian's barge, gazing across the green turbid Nile. You had leaned over the still pool of some Greek woodland and seen in the water's silent silver the marvel of your own face. And it had all been what art should be--unconscious, ideal, and remote. One day, a fatal day I sometimes think, I determined to paint a wonderful portrait of you as you actually are, not in the costume of dead ages, but in your own dress and in your own time. Whether it was the realism of the method, or the mere wonder of your own personality, thus directly presented to me without mist or veil, I cannot tell. But I know that as I worked at it, every flake and film of colour seemed to me to reveal my secret. I grew afraid that others would know of my idolatry. I felt, Dorian, that I had told too much, that I had put too much of myself into it. Then it was that I resolved never to allow the picture to be exhibited. You were a little annoyed; but then you did not realize all that it meant to me. Harry, to whom I talked about it, laughed at me. But I did not mind that. When the picture was finished, and I sat alone with it, I felt that I was right.... Well, after a few days the thing left my studio, and as soon as I had got rid of the intolerable fascination of its presence, it seemed to me that I had been foolish in imagining that I had seen anything in it, more than that you were extremely good-looking and that I could paint. Even now I cannot help feeling that it is a mistake to think that the passion one feels in creation is ever really shown in the work one creates. Art is always more abstract than we fancy. Form and colour tell us of form and colour--that is all. It often seems to me that art conceals the artist far more completely than it ever reveals him. And so when I got this offer from Paris, I determined to make your portrait the principal thing in my exhibition. It never occurred to me that you would refuse. I see now that you were right. The picture cannot be shown. You must not be angry with me, Dorian, for what I have told you. As I said to Harry, once, you are made to be worshipped." Dorian Gray drew a long breath. The colour came back to his cheeks, and a smile played about his lips. The peril was over. He was safe for the time. Yet he could not help feeling infinite pity for the painter who had just made this strange confession to him, and wondered if he himself would ever be so dominated by the personality of a friend. Lord Henry had the charm of being very dangerous. But that was all. He was too clever and too cynical to be really fond of. Would there ever be some one who would fill him with a strange idolatry? Was that one of the things that life had in store? "It is extraordinary to me, Dorian," said Hallward, "that you should have seen this in the portrait. Did you really see it?" "I saw something in it," he answered, "something that seemed to me very curious." "Well, you don't mind my looking at the thing now?" Dorian shook his head. "You must not ask me that, Basil. I could not possibly let you stand in front of that picture." "You will some day, surely?" "Never." "Well, perhaps you are right. And now good-bye, Dorian. You have been the one person in my life who has really influenced my art. Whatever I have done that is good, I owe to you. Ah! you don't know what it cost me to tell you all that I have told you." "My dear Basil," said Dorian, "what have you told me? Simply that you felt that you admired me too much. That is not even a compliment." "It was not intended as a compliment. It was a confession. Now that I have made it, something seems to have gone out of me. Perhaps one should never put one's worship into words." "It was a very disappointing confession." "Why, what did you expect, Dorian? You didn't see anything else in the picture, did you? There was nothing else to see?" "No; there was nothing else to see. Why do you ask? But you mustn't talk about worship. It is foolish. You and I are friends, Basil, and we must always remain so." "You have got Harry," said the painter sadly. "Oh, Harry!" cried the lad, with a ripple of laughter. "Harry spends his days in saying what is incredible and his evenings in doing what is improbable. Just the sort of life I would like to lead. But still I don't think I would go to Harry if I were in trouble. I would sooner go to you, Basil." "You will sit to me again?" "Impossible!" "You spoil my life as an artist by refusing, Dorian. No man comes across two ideal things. Few come across one." "I can't explain it to you, Basil, but I must never sit to you again. There is something fatal about a portrait. It has a life of its own. I will come and have tea with you. That will be just as pleasant." "Pleasanter for you, I am afraid," murmured Hallward regretfully. "And now good-bye. I am sorry you won't let me look at the picture once again. But that can't be helped. I quite understand what you feel about it." As he left the room, Dorian Gray smiled to himself. Poor Basil! How little he knew of the true reason! And how strange it was that, instead of having been forced to reveal his own secret, he had succeeded, almost by chance, in wresting a secret from his friend! How much that strange confession explained to him! The painter's absurd fits of jealousy, his wild devotion, his extravagant panegyrics, his curious reticences--he understood them all now, and he felt sorry. There seemed to him to be something tragic in a friendship so coloured by romance. He sighed and touched the bell. The portrait must be hidden away at all costs. He could not run such a risk of discovery again. It had been mad of him to have allowed the thing to remain, even for an hour, in a room to which any of his friends had access. CHAPTER 10 When his servant entered, he looked at him steadfastly and wondered if he had thought of peering behind the screen. The man was quite impassive and waited for his orders. Dorian lit a cigarette and walked over to the glass and glanced into it. He could see the reflection of Victor's face perfectly. It was like a placid mask of servility. There was nothing to be afraid of, there. Yet he thought it best to be on his guard. Speaking very slowly, he told him to tell the house-keeper that he wanted to see her, and then to go to the frame-maker and ask him to send two of his men round at once. It seemed to him that as the man left the room his eyes wandered in the direction of the screen. Or was that merely his own fancy? After a few moments, in her black silk dress, with old-fashioned thread mittens on her wrinkled hands, Mrs. Leaf bustled into the library. He asked her for the key of the schoolroom. "The old schoolroom, Mr. Dorian?" she exclaimed. "Why, it is full of dust. I must get it arranged and put straight before you go into it. It is not fit for you to see, sir. It is not, indeed." "I don't want it put straight, Leaf. I only want the key." "Well, sir, you'll be covered with cobwebs if you go into it. Why, it hasn't been opened for nearly five years--not since his lordship died." He winced at the mention of his grandfather. He had hateful memories of him. "That does not matter," he answered. "I simply want to see the place--that is all. Give me the key." "And here is the key, sir," said the old lady, going over the contents of her bunch with tremulously uncertain hands. "Here is the key. I'll have it off the bunch in a moment. But you don't think of living up there, sir, and you so comfortable here?" "No, no," he cried petulantly. "Thank you, Leaf. That will do." She lingered for a few moments, and was garrulous over some detail of the household. He sighed and told her to manage things as she thought best. She left the room, wreathed in smiles. As the door closed, Dorian put the key in his pocket and looked round the room. His eye fell on a large, purple satin coverlet heavily embroidered with gold, a splendid piece of late seventeenth-century Venetian work that his grandfather had found in a convent near Bologna. Yes, that would serve to wrap the dreadful thing in. It had perhaps served often as a pall for the dead. Now it was to hide something that had a corruption of its own, worse than the corruption of death itself--something that would breed horrors and yet would never die. What the worm was to the corpse, his sins would be to the painted image on the canvas. They would mar its beauty and eat away its grace. They would defile it and make it shameful. And yet the thing would still live on. It would be always alive. He shuddered, and for a moment he regretted that he had not told Basil the true reason why he had wished to hide the picture away. Basil would have helped him to resist Lord Henry's influence, and the still more poisonous influences that came from his own temperament. The love that he bore him--for it was really love--had nothing in it that was not noble and intellectual. It was not that mere physical admiration of beauty that is born of the senses and that dies when the senses tire. It was such love as Michelangelo had known, and Montaigne, and Winckelmann, and Shakespeare himself. Yes, Basil could have saved him. But it was too late now. The past could always be annihilated. Regret, denial, or forgetfulness could do that. But the future was inevitable. There were passions in him that would find their terrible outlet, dreams that would make the shadow of their evil real. He took up from the couch the great purple-and-gold texture that covered it, and, holding it in his hands, passed behind the screen. Was the face on the canvas viler than before? It seemed to him that it was unchanged, and yet his loathing of it was intensified. Gold hair, blue eyes, and rose-red lips--they all were there. It was simply the expression that had altered. That was horrible in its cruelty. Compared to what he saw in it of censure or rebuke, how shallow Basil's reproaches about Sibyl Vane had been!--how shallow, and of what little account! His own soul was looking out at him from the canvas and calling him to judgement. A look of pain came across him, and he flung the rich pall over the picture. As he did so, a knock came to the door. He passed out as his servant entered. "The persons are here, Monsieur." He felt that the man must be got rid of at once. He must not be allowed to know where the picture was being taken to. There was something sly about him, and he had thoughtful, treacherous eyes. Sitting down at the writing-table he scribbled a note to Lord Henry, asking him to send him round something to read and reminding him that they were to meet at eight-fifteen that evening. "Wait for an answer," he said, handing it to him, "and show the men in here." In two or three minutes there was another knock, and Mr. Hubbard himself, the celebrated frame-maker of South Audley Street, came in with a somewhat rough-looking young assistant. Mr. Hubbard was a florid, red-whiskered little man, whose admiration for art was considerably tempered by the inveterate impecuniosity of most of the artists who dealt with him. As a rule, he never left his shop. He waited for people to come to him. But he always made an exception in favour of Dorian Gray. There was something about Dorian that charmed everybody. It was a pleasure even to see him. "What can I do for you, Mr. Gray?" he said, rubbing his fat freckled hands. "I thought I would do myself the honour of coming round in person. I have just got a beauty of a frame, sir. Picked it up at a sale. Old Florentine. Came from Fonthill, I believe. Admirably suited for a religious subject, Mr. Gray." "I am so sorry you have given yourself the trouble of coming round, Mr. Hubbard. I shall certainly drop in and look at the frame--though I don't go in much at present for religious art--but to-day I only want a picture carried to the top of the house for me. It is rather heavy, so I thought I would ask you to lend me a couple of your men." "No trouble at all, Mr. Gray. I am delighted to be of any service to you. Which is the work of art, sir?" "This," replied Dorian, moving the screen back. "Can you move it, covering and all, just as it is? I don't want it to get scratched going upstairs." "There will be no difficulty, sir," said the genial frame-maker, beginning, with the aid of his assistant, to unhook the picture from the long brass chains by which it was suspended. "And, now, where shall we carry it to, Mr. Gray?" "I will show you the way, Mr. Hubbard, if you will kindly follow me. Or perhaps you had better go in front. I am afraid it is right at the top of the house. We will go up by the front staircase, as it is wider." He held the door open for them, and they passed out into the hall and began the ascent. The elaborate character of the frame had made the picture extremely bulky, and now and then, in spite of the obsequious protests of Mr. Hubbard, who had the true tradesman's spirited dislike of seeing a gentleman doing anything useful, Dorian put his hand to it so as to help them. "Something of a load to carry, sir," gasped the little man when they reached the top landing. And he wiped his shiny forehead. "I am afraid it is rather heavy," murmured Dorian as he unlocked the door that opened into the room that was to keep for him the curious secret of his life and hide his soul from the eyes of men. He had not entered the place for more than four years--not, indeed, since he had used it first as a play-room when he was a child, and then as a study when he grew somewhat older. It was a large, well-proportioned room, which had been specially built by the last Lord Kelso for the use of the little grandson whom, for his strange likeness to his mother, and also for other reasons, he had always hated and desired to keep at a distance. It appeared to Dorian to have but little changed. There was the huge Italian _cassone_, with its fantastically painted panels and its tarnished gilt mouldings, in which he had so often hidden himself as a boy. There the satinwood book-case filled with his dog-eared schoolbooks. On the wall behind it was hanging the same ragged Flemish tapestry where a faded king and queen were playing chess in a garden, while a company of hawkers rode by, carrying hooded birds on their gauntleted wrists. How well he remembered it all! Every moment of his lonely childhood came back to him as he looked round. He recalled the stainless purity of his boyish life, and it seemed horrible to him that it was here the fatal portrait was to be hidden away. How little he had thought, in those dead days, of all that was in store for him! But there was no other place in the house so secure from prying eyes as this. He had the key, and no one else could enter it. Beneath its purple pall, the face painted on the canvas could grow bestial, sodden, and unclean. What did it matter? No one could see it. He himself would not see it. Why should he watch the hideous corruption of his soul? He kept his youth--that was enough. And, besides, might not his nature grow finer, after all? There was no reason that the future should be so full of shame. Some love might come across his life, and purify him, and shield him from those sins that seemed to be already stirring in spirit and in flesh--those curious unpictured sins whose very mystery lent them their subtlety and their charm. Perhaps, some day, the cruel look would have passed away from the scarlet sensitive mouth, and he might show to the world Basil Hallward's masterpiece. No; that was impossible. Hour by hour, and week by week, the thing upon the canvas was growing old. It might escape the hideousness of sin, but the hideousness of age was in store for it. The cheeks would become hollow or flaccid. Yellow crow's feet would creep round the fading eyes and make them horrible. The hair would lose its brightness, the mouth would gape or droop, would be foolish or gross, as the mouths of old men are. There would be the wrinkled throat, the cold, blue-veined hands, the twisted body, that he remembered in the grandfather who had been so stern to him in his boyhood. The picture had to be concealed. There was no help for it. "Bring it in, Mr. Hubbard, please," he said, wearily, turning round. "I am sorry I kept you so long. I was thinking of something else." "Always glad to have a rest, Mr. Gray," answered the frame-maker, who was still gasping for breath. "Where shall we put it, sir?" "Oh, anywhere. Here: this will do. I don't want to have it hung up. Just lean it against the wall. Thanks." "Might one look at the work of art, sir?" Dorian started. "It would not interest you, Mr. Hubbard," he said, keeping his eye on the man. He felt ready to leap upon him and fling him to the ground if he dared to lift the gorgeous hanging that concealed the secret of his life. "I shan't trouble you any more now. I am much obliged for your kindness in coming round." "Not at all, not at all, Mr. Gray. Ever ready to do anything for you, sir." And Mr. Hubbard tramped downstairs, followed by the assistant, who glanced back at Dorian with a look of shy wonder in his rough uncomely face. He had never seen any one so marvellous. When the sound of their footsteps had died away, Dorian locked the door and put the key in his pocket. He felt safe now. No one would ever look upon the horrible thing. No eye but his would ever see his shame. On reaching the library, he found that it was just after five o'clock and that the tea had been already brought up. On a little table of dark perfumed wood thickly incrusted with nacre, a present from Lady Radley, his guardian's wife, a pretty professional invalid who had spent the preceding winter in Cairo, was lying a note from Lord Henry, and beside it was a book bound in yellow paper, the cover slightly torn and the edges soiled. A copy of the third edition of _The St. James's Gazette_ had been placed on the tea-tray. It was evident that Victor had returned. He wondered if he had met the men in the hall as they were leaving the house and had wormed out of them what they had been doing. He would be sure to miss the picture--had no doubt missed it already, while he had been laying the tea-things. The screen had not been set back, and a blank space was visible on the wall. Perhaps some night he might find him creeping upstairs and trying to force the door of the room. It was a horrible thing to have a spy in one's house. He had heard of rich men who had been blackmailed all their lives by some servant who had read a letter, or overheard a conversation, or picked up a card with an address, or found beneath a pillow a withered flower or a shred of crumpled lace. He sighed, and having poured himself out some tea, opened Lord Henry's note. It was simply to say that he sent him round the evening paper, and a book that might interest him, and that he would be at the club at eight-fifteen. He opened _The St. James's_ languidly, and looked through it. A red pencil-mark on the fifth page caught his eye. It drew attention to the following paragraph: INQUEST ON AN ACTRESS.--An inquest was held this morning at the Bell Tavern, Hoxton Road, by Mr. Danby, the District Coroner, on the body of Sibyl Vane, a young actress recently engaged at the Royal Theatre, Holborn. A verdict of death by misadventure was returned. Considerable sympathy was expressed for the mother of the deceased, who was greatly affected during the giving of her own evidence, and that of Dr. Birrell, who had made the post-mortem examination of the deceased. He frowned, and tearing the paper in two, went across the room and flung the pieces away. How ugly it all was! And how horribly real ugliness made things! He felt a little annoyed with Lord Henry for having sent him the report. And it was certainly stupid of him to have marked it with red pencil. Victor might have read it. The man knew more than enough English for that. Perhaps he had read it and had begun to suspect something. And, yet, what did it matter? What had Dorian Gray to do with Sibyl Vane's death? There was nothing to fear. Dorian Gray had not killed her. His eye fell on the yellow book that Lord Henry had sent him. What was it, he wondered. He went towards the little, pearl-coloured octagonal stand that had always looked to him like the work of some strange Egyptian bees that wrought in silver, and taking up the volume, flung himself into an arm-chair and began to turn over the leaves. After a few minutes he became absorbed. It was the strangest book that he had ever read. It seemed to him that in exquisite raiment, and to the delicate sound of flutes, the sins of the world were passing in dumb show before him. Things that he had dimly dreamed of were suddenly made real to him. Things of which he had never dreamed were gradually revealed. It was a novel without a plot and with only one character, being, indeed, simply a psychological study of a certain young Parisian who spent his life trying to realize in the nineteenth century all the passions and modes of thought that belonged to every century except his own, and to sum up, as it were, in himself the various moods through which the world-spirit had ever passed, loving for their mere artificiality those renunciations that men have unwisely called virtue, as much as those natural rebellions that wise men still call sin. The style in which it was written was that curious jewelled style, vivid and obscure at once, full of _argot_ and of archaisms, of technical expressions and of elaborate paraphrases, that characterizes the work of some of the finest artists of the French school of _Symbolistes_. There were in it metaphors as monstrous as orchids and as subtle in colour. The life of the senses was described in the terms of mystical philosophy. One hardly knew at times whether one was reading the spiritual ecstasies of some mediaeval saint or the morbid confessions of a modern sinner. It was a poisonous book. The heavy odour of incense seemed to cling about its pages and to trouble the brain. The mere cadence of the sentences, the subtle monotony of their music, so full as it was of complex refrains and movements elaborately repeated, produced in the mind of the lad, as he passed from chapter to chapter, a form of reverie, a malady of dreaming, that made him unconscious of the falling day and creeping shadows. Cloudless, and pierced by one solitary star, a copper-green sky gleamed through the windows. He read on by its wan light till he could read no more. Then, after his valet had reminded him several times of the lateness of the hour, he got up, and going into the next room, placed the book on the little Florentine table that always stood at his bedside and began to dress for dinner. It was almost nine o'clock before he reached the club, where he found Lord Henry sitting alone, in the morning-room, looking very much bored. "I am so sorry, Harry," he cried, "but really it is entirely your fault. That book you sent me so fascinated me that I forgot how the time was going." "Yes, I thought you would like it," replied his host, rising from his chair. "I didn't say I liked it, Harry. I said it fascinated me. There is a great difference." "Ah, you have discovered that?" murmured Lord Henry. And they passed into the dining-room. CHAPTER 11 For years, Dorian Gray could not free himself from the influence of this book. Or perhaps it would be more accurate to say that he never sought to free himself from it. He procured from Paris no less than nine large-paper copies of the first edition, and had them bound in different colours, so that they might suit his various moods and the changing fancies of a nature over which he seemed, at times, to have almost entirely lost control. The hero, the wonderful young Parisian in whom the romantic and the scientific temperaments were so strangely blended, became to him a kind of prefiguring type of himself. And, indeed, the whole book seemed to him to contain the story of his own life, written before he had lived it. In one point he was more fortunate than the novel's fantastic hero. He never knew--never, indeed, had any cause to know--that somewhat grotesque dread of mirrors, and polished metal surfaces, and still water which came upon the young Parisian so early in his life, and was occasioned by the sudden decay of a beau that had once, apparently, been so remarkable. It was with an almost cruel joy--and perhaps in nearly every joy, as certainly in every pleasure, cruelty has its place--that he used to read the latter part of the book, with its really tragic, if somewhat overemphasized, account of the sorrow and despair of one who had himself lost what in others, and the world, he had most dearly valued. For the wonderful beauty that had so fascinated Basil Hallward, and many others besides him, seemed never to leave him. Even those who had heard the most evil things against him--and from time to time strange rumours about his mode of life crept through London and became the chatter of the clubs--could not believe anything to his dishonour when they saw him. He had always the look of one who had kept himself unspotted from the world. Men who talked grossly became silent when Dorian Gray entered the room. There was something in the purity of his face that rebuked them. His mere presence seemed to recall to them the memory of the innocence that they had tarnished. They wondered how one so charming and graceful as he was could have escaped the stain of an age that was at once sordid and sensual. Often, on returning home from one of those mysterious and prolonged absences that gave rise to such strange conjecture among those who were his friends, or thought that they were so, he himself would creep upstairs to the locked room, open the door with the key that never left him now, and stand, with a mirror, in front of the portrait that Basil Hallward had painted of him, looking now at the evil and aging face on the canvas, and now at the fair young face that laughed back at him from the polished glass. The very sharpness of the contrast used to quicken his sense of pleasure. He grew more and more enamoured of his own beauty, more and more interested in the corruption of his own soul. He would examine with minute care, and sometimes with a monstrous and terrible delight, the hideous lines that seared the wrinkling forehead or crawled around the heavy sensual mouth, wondering sometimes which were the more horrible, the signs of sin or the signs of age. He would place his white hands beside the coarse bloated hands of the picture, and smile. He mocked the misshapen body and the failing limbs. There were moments, indeed, at night, when, lying sleepless in his own delicately scented chamber, or in the sordid room of the little ill-famed tavern near the docks which, under an assumed name and in disguise, it was his habit to frequent, he would think of the ruin he had brought upon his soul with a pity that was all the more poignant because it was purely selfish. But moments such as these were rare. That curiosity about life which Lord Henry had first stirred in him, as they sat together in the garden of their friend, seemed to increase with gratification. The more he knew, the more he desired to know. He had mad hungers that grew more ravenous as he fed them. Yet he was not really reckless, at any rate in his relations to society. Once or twice every month during the winter, and on each Wednesday evening while the season lasted, he would throw open to the world his beautiful house and have the most celebrated musicians of the day to charm his guests with the wonders of their art. His little dinners, in the settling of which Lord Henry always assisted him, were noted as much for the careful selection and placing of those invited, as for the exquisite taste shown in the decoration of the table, with its subtle symphonic arrangements of exotic flowers, and embroidered cloths, and antique plate of gold and silver. Indeed, there were many, especially among the very young men, who saw, or fancied that they saw, in Dorian Gray the true realization of a type of which they had often dreamed in Eton or Oxford days, a type that was to combine something of the real culture of the scholar with all the grace and distinction and perfect manner of a citizen of the world. To them he seemed to be of the company of those whom Dante describes as having sought to "make themselves perfect by the worship of beauty." Like Gautier, he was one for whom "the visible world existed." And, certainly, to him life itself was the first, the greatest, of the arts, and for it all the other arts seemed to be but a preparation. Fashion, by which what is really fantastic becomes for a moment universal, and dandyism, which, in its own way, is an attempt to assert the absolute modernity of beauty, had, of course, their fascination for him. His mode of dressing, and the particular styles that from time to time he affected, had their marked influence on the young exquisites of the Mayfair balls and Pall Mall club windows, who copied him in everything that he did, and tried to reproduce the accidental charm of his graceful, though to him only half-serious, fopperies. For, while he was but too ready to accept the position that was almost immediately offered to him on his coming of age, and found, indeed, a subtle pleasure in the thought that he might really become to the London of his own day what to imperial Neronian Rome the author of the Satyricon once had been, yet in his inmost heart he desired to be something more than a mere _arbiter elegantiarum_, to be consulted on the wearing of a jewel, or the knotting of a necktie, or the conduct of a cane. He sought to elaborate some new scheme of life that would have its reasoned philosophy and its ordered principles, and find in the spiritualizing of the senses its highest realization. The worship of the senses has often, and with much justice, been decried, men feeling a natural instinct of terror about passions and sensations that seem stronger than themselves, and that they are conscious of sharing with the less highly organized forms of existence. But it appeared to Dorian Gray that the true nature of the senses had never been understood, and that they had remained savage and animal merely because the world had sought to starve them into submission or to kill them by pain, instead of aiming at making them elements of a new spirituality, of which a fine instinct for beauty was to be the dominant characteristic. As he looked back upon man moving through history, he was haunted by a feeling of loss. So much had been surrendered! and to such little purpose! There had been mad wilful rejections, monstrous forms of self-torture and self-denial, whose origin was fear and whose result was a degradation infinitely more terrible than that fancied degradation from which, in their ignorance, they had sought to escape; Nature, in her wonderful irony, driving out the anchorite to feed with the wild animals of the desert and giving to the hermit the beasts of the field as his companions. Yes: there was to be, as Lord Henry had prophesied, a new Hedonism that was to recreate life and to save it from that harsh uncomely puritanism that is having, in our own day, its curious revival. It was to have its service of the intellect, certainly, yet it was never to accept any theory or system that would involve the sacrifice of any mode of passionate experience. Its aim, indeed, was to be experience itself, and not the fruits of experience, sweet or bitter as they might be. Of the asceticism that deadens the senses, as of the vulgar profligacy that dulls them, it was to know nothing. But it was to teach man to concentrate himself upon the moments of a life that is itself but a moment. There are few of us who have not sometimes wakened before dawn, either after one of those dreamless nights that make us almost enamoured of death, or one of those nights of horror and misshapen joy, when through the chambers of the brain sweep phantoms more terrible than reality itself, and instinct with that vivid life that lurks in all grotesques, and that lends to Gothic art its enduring vitality, this art being, one might fancy, especially the art of those whose minds have been troubled with the malady of reverie. Gradually white fingers creep through the curtains, and they appear to tremble. In black fantastic shapes, dumb shadows crawl into the corners of the room and crouch there. Outside, there is the stirring of birds among the leaves, or the sound of men going forth to their work, or the sigh and sob of the wind coming down from the hills and wandering round the silent house, as though it feared to wake the sleepers and yet must needs call forth sleep from her purple cave. Veil after veil of thin dusky gauze is lifted, and by degrees the forms and colours of things are restored to them, and we watch the dawn remaking the world in its antique pattern. The wan mirrors get back their mimic life. The flameless tapers stand where we had left them, and beside them lies the half-cut book that we had been studying, or the wired flower that we had worn at the ball, or the letter that we had been afraid to read, or that we had read too often. Nothing seems to us changed. Out of the unreal shadows of the night comes back the real life that we had known. We have to resume it where we had left off, and there steals over us a terrible sense of the necessity for the continuance of energy in the same wearisome round of stereotyped habits, or a wild longing, it may be, that our eyelids might open some morning upon a world that had been refashioned anew in the darkness for our pleasure, a world in which things would have fresh shapes and colours, and be changed, or have other secrets, a world in which the past would have little or no place, or survive, at any rate, in no conscious form of obligation or regret, the remembrance even of joy having its bitterness and the memories of pleasure their pain. It was the creation of such worlds as these that seemed to Dorian Gray to be the true object, or amongst the true objects, of life; and in his search for sensations that would be at once new and delightful, and possess that element of strangeness that is so essential to romance, he would often adopt certain modes of thought that he knew to be really alien to his nature, abandon himself to their subtle influences, and then, having, as it were, caught their colour and satisfied his intellectual curiosity, leave them with that curious indifference that is not incompatible with a real ardour of temperament, and that, indeed, according to certain modern psychologists, is often a condition of it. It was rumoured of him once that he was about to join the Roman Catholic communion, and certainly the Roman ritual had always a great attraction for him. The daily sacrifice, more awful really than all the sacrifices of the antique world, stirred him as much by its superb rejection of the evidence of the senses as by the primitive simplicity of its elements and the eternal pathos of the human tragedy that it sought to symbolize. He loved to kneel down on the cold marble pavement and watch the priest, in his stiff flowered dalmatic, slowly and with white hands moving aside the veil of the tabernacle, or raising aloft the jewelled, lantern-shaped monstrance with that pallid wafer that at times, one would fain think, is indeed the "_panis caelestis_," the bread of angels, or, robed in the garments of the Passion of Christ, breaking the Host into the chalice and smiting his breast for his sins. The fuming censers that the grave boys, in their lace and scarlet, tossed into the air like great gilt flowers had their subtle fascination for him. As he passed out, he used to look with wonder at the black confessionals and long to sit in the dim shadow of one of them and listen to men and women whispering through the worn grating the true story of their lives. But he never fell into the error of arresting his intellectual development by any formal acceptance of creed or system, or of mistaking, for a house in which to live, an inn that is but suitable for the sojourn of a night, or for a few hours of a night in which there are no stars and the moon is in travail. Mysticism, with its marvellous power of making common things strange to us, and the subtle antinomianism that always seems to accompany it, moved him for a season; and for a season he inclined to the materialistic doctrines of the _Darwinismus_ movement in Germany, and found a curious pleasure in tracing the thoughts and passions of men to some pearly cell in the brain, or some white nerve in the body, delighting in the conception of the absolute dependence of the spirit on certain physical conditions, morbid or healthy, normal or diseased. Yet, as has been said of him before, no theory of life seemed to him to be of any importance compared with life itself. He felt keenly conscious of how barren all intellectual speculation is when separated from action and experiment. He knew that the senses, no less than the soul, have their spiritual mysteries to reveal. And so he would now study perfumes and the secrets of their manufacture, distilling heavily scented oils and burning odorous gums from the East. He saw that there was no mood of the mind that had not its counterpart in the sensuous life, and set himself to discover their true relations, wondering what there was in frankincense that made one mystical, and in ambergris that stirred one's passions, and in violets that woke the memory of dead romances, and in musk that troubled the brain, and in champak that stained the imagination; and seeking often to elaborate a real psychology of perfumes, and to estimate the several influences of sweet-smelling roots and scented, pollen-laden flowers; of aromatic balms and of dark and fragrant woods; of spikenard, that sickens; of hovenia, that makes men mad; and of aloes, that are said to be able to expel melancholy from the soul. At another time he devoted himself entirely to music, and in a long latticed room, with a vermilion-and-gold ceiling and walls of olive-green lacquer, he used to give curious concerts in which mad gipsies tore wild music from little zithers, or grave, yellow-shawled Tunisians plucked at the strained strings of monstrous lutes, while grinning Negroes beat monotonously upon copper drums and, crouching upon scarlet mats, slim turbaned Indians blew through long pipes of reed or brass and charmed--or feigned to charm--great hooded snakes and horrible horned adders. The harsh intervals and shrill discords of barbaric music stirred him at times when Schubert's grace, and Chopin's beautiful sorrows, and the mighty harmonies of Beethoven himself, fell unheeded on his ear. He collected together from all parts of the world the strangest instruments that could be found, either in the tombs of dead nations or among the few savage tribes that have survived contact with Western civilizations, and loved to touch and try them. He had the mysterious _juruparis_ of the Rio Negro Indians, that women are not allowed to look at and that even youths may not see till they have been subjected to fasting and scourging, and the earthen jars of the Peruvians that have the shrill cries of birds, and flutes of human bones such as Alfonso de Ovalle heard in Chile, and the sonorous green jaspers that are found near Cuzco and give forth a note of singular sweetness. He had painted gourds filled with pebbles that rattled when they were shaken; the long _clarin_ of the Mexicans, into which the performer does not blow, but through which he inhales the air; the harsh _ture_ of the Amazon tribes, that is sounded by the sentinels who sit all day long in high trees, and can be heard, it is said, at a distance of three leagues; the _teponaztli_, that has two vibrating tongues of wood and is beaten with sticks that are smeared with an elastic gum obtained from the milky juice of plants; the _yotl_-bells of the Aztecs, that are hung in clusters like grapes; and a huge cylindrical drum, covered with the skins of great serpents, like the one that Bernal Diaz saw when he went with Cortes into the Mexican temple, and of whose doleful sound he has left us so vivid a description. The fantastic character of these instruments fascinated him, and he felt a curious delight in the thought that art, like Nature, has her monsters, things of bestial shape and with hideous voices. Yet, after some time, he wearied of them, and would sit in his box at the opera, either alone or with Lord Henry, listening in rapt pleasure to "Tannhauser" and seeing in the prelude to that great work of art a presentation of the tragedy of his own soul. On one occasion he took up the study of jewels, and appeared at a costume ball as Anne de Joyeuse, Admiral of France, in a dress covered with five hundred and sixty pearls. This taste enthralled him for years, and, indeed, may be said never to have left him. He would often spend a whole day settling and resettling in their cases the various stones that he had collected, such as the olive-green chrysoberyl that turns red by lamplight, the cymophane with its wirelike line of silver, the pistachio-coloured peridot, rose-pink and wine-yellow topazes, carbuncles of fiery scarlet with tremulous, four-rayed stars, flame-red cinnamon-stones, orange and violet spinels, and amethysts with their alternate layers of ruby and sapphire. He loved the red gold of the sunstone, and the moonstone's pearly whiteness, and the broken rainbow of the milky opal. He procured from Amsterdam three emeralds of extraordinary size and richness of colour, and had a turquoise _de la vieille roche_ that was the envy of all the connoisseurs. He discovered wonderful stories, also, about jewels. In Alphonso's Clericalis Disciplina a serpent was mentioned with eyes of real jacinth, and in the romantic history of Alexander, the Conqueror of Emathia was said to have found in the vale of Jordan snakes "with collars of real emeralds growing on their backs." There was a gem in the brain of the dragon, Philostratus told us, and "by the exhibition of golden letters and a scarlet robe" the monster could be thrown into a magical sleep and slain. According to the great alchemist, Pierre de Boniface, the diamond rendered a man invisible, and the agate of India made him eloquent. The cornelian appeased anger, and the hyacinth provoked sleep, and the amethyst drove away the fumes of wine. The garnet cast out demons, and the hydropicus deprived the moon of her colour. The selenite waxed and waned with the moon, and the meloceus, that discovers thieves, could be affected only by the blood of kids. Leonardus Camillus had seen a white stone taken from the brain of a newly killed toad, that was a certain antidote against poison. The bezoar, that was found in the heart of the Arabian deer, was a charm that could cure the plague. In the nests of Arabian birds was the aspilates, that, according to Democritus, kept the wearer from any danger by fire. The King of Ceilan rode through his city with a large ruby in his hand, as the ceremony of his coronation. The gates of the palace of John the Priest were "made of sardius, with the horn of the horned snake inwrought, so that no man might bring poison within." Over the gable were "two golden apples, in which were two carbuncles," so that the gold might shine by day and the carbuncles by night. In Lodge's strange romance 'A Margarite of America', it was stated that in the chamber of the queen one could behold "all the chaste ladies of the world, inchased out of silver, looking through fair mirrours of chrysolites, carbuncles, sapphires, and greene emeraults." Marco Polo had seen the inhabitants of Zipangu place rose-coloured pearls in the mouths of the dead. A sea-monster had been enamoured of the pearl that the diver brought to King Perozes, and had slain the thief, and mourned for seven moons over its loss. When the Huns lured the king into the great pit, he flung it away--Procopius tells the story--nor was it ever found again, though the Emperor Anastasius offered five hundred-weight of gold pieces for it. The King of Malabar had shown to a certain Venetian a rosary of three hundred and four pearls, one for every god that he worshipped. When the Duke de Valentinois, son of Alexander VI, visited Louis XII of France, his horse was loaded with gold leaves, according to Brantome, and his cap had double rows of rubies that threw out a great light. Charles of England had ridden in stirrups hung with four hundred and twenty-one diamonds. Richard II had a coat, valued at thirty thousand marks, which was covered with balas rubies. Hall described Henry VIII, on his way to the Tower previous to his coronation, as wearing "a jacket of raised gold, the placard embroidered with diamonds and other rich stones, and a great bauderike about his neck of large balasses." The favourites of James I wore ear-rings of emeralds set in gold filigrane. Edward II gave to Piers Gaveston a suit of red-gold armour studded with jacinths, a collar of gold roses set with turquoise-stones, and a skull-cap _parseme_ with pearls. Henry II wore jewelled gloves reaching to the elbow, and had a hawk-glove sewn with twelve rubies and fifty-two great orients. The ducal hat of Charles the Rash, the last Duke of Burgundy of his race, was hung with pear-shaped pearls and studded with sapphires. How exquisite life had once been! How gorgeous in its pomp and decoration! Even to read of the luxury of the dead was wonderful. Then he turned his attention to embroideries and to the tapestries that performed the office of frescoes in the chill rooms of the northern nations of Europe. As he investigated the subject--and he always had an extraordinary faculty of becoming absolutely absorbed for the moment in whatever he took up--he was almost saddened by the reflection of the ruin that time brought on beautiful and wonderful things. He, at any rate, had escaped that. Summer followed summer, and the yellow jonquils bloomed and died many times, and nights of horror repeated the story of their shame, but he was unchanged. No winter marred his face or stained his flowerlike bloom. How different it was with material things! Where had they passed to? Where was the great crocus-coloured robe, on which the gods fought against the giants, that had been worked by brown girls for the pleasure of Athena? Where the huge velarium that Nero had stretched across the Colosseum at Rome, that Titan sail of purple on which was represented the starry sky, and Apollo driving a chariot drawn by white, gilt-reined steeds? He longed to see the curious table-napkins wrought for the Priest of the Sun, on which were displayed all the dainties and viands that could be wanted for a feast; the mortuary cloth of King Chilperic, with its three hundred golden bees; the fantastic robes that excited the indignation of the Bishop of Pontus and were figured with "lions, panthers, bears, dogs, forests, rocks, hunters--all, in fact, that a painter can copy from nature"; and the coat that Charles of Orleans once wore, on the sleeves of which were embroidered the verses of a song beginning "_Madame, je suis tout joyeux_," the musical accompaniment of the words being wrought in gold thread, and each note, of square shape in those days, formed with four pearls. He read of the room that was prepared at the palace at Rheims for the use of Queen Joan of Burgundy and was decorated with "thirteen hundred and twenty-one parrots, made in broidery, and blazoned with the king's arms, and five hundred and sixty-one butterflies, whose wings were similarly ornamented with the arms of the queen, the whole worked in gold." Catherine de Medicis had a mourning-bed made for her of black velvet powdered with crescents and suns. Its curtains were of damask, with leafy wreaths and garlands, figured upon a gold and silver ground, and fringed along the edges with broideries of pearls, and it stood in a room hung with rows of the queen's devices in cut black velvet upon cloth of silver. Louis XIV had gold embroidered caryatides fifteen feet high in his apartment. The state bed of Sobieski, King of Poland, was made of Smyrna gold brocade embroidered in turquoises with verses from the Koran. Its supports were of silver gilt, beautifully chased, and profusely set with enamelled and jewelled medallions. It had been taken from the Turkish camp before Vienna, and the standard of Mohammed had stood beneath the tremulous gilt of its canopy. And so, for a whole year, he sought to accumulate the most exquisite specimens that he could find of textile and embroidered work, getting the dainty Delhi muslins, finely wrought with gold-thread palmates and stitched over with iridescent beetles' wings; the Dacca gauzes, that from their transparency are known in the East as "woven air," and "running water," and "evening dew"; strange figured cloths from Java; elaborate yellow Chinese hangings; books bound in tawny satins or fair blue silks and wrought with _fleurs-de-lis_, birds and images; veils of _lacis_ worked in Hungary point; Sicilian brocades and stiff Spanish velvets; Georgian work, with its gilt coins, and Japanese _Foukousas_, with their green-toned golds and their marvellously plumaged birds. He had a special passion, also, for ecclesiastical vestments, as indeed he had for everything connected with the service of the Church. In the long cedar chests that lined the west gallery of his house, he had stored away many rare and beautiful specimens of what is really the raiment of the Bride of Christ, who must wear purple and jewels and fine linen that she may hide the pallid macerated body that is worn by the suffering that she seeks for and wounded by self-inflicted pain. He possessed a gorgeous cope of crimson silk and gold-thread damask, figured with a repeating pattern of golden pomegranates set in six-petalled formal blossoms, beyond which on either side was the pine-apple device wrought in seed-pearls. The orphreys were divided into panels representing scenes from the life of the Virgin, and the coronation of the Virgin was figured in coloured silks upon the hood. This was Italian work of the fifteenth century. Another cope was of green velvet, embroidered with heart-shaped groups of acanthus-leaves, from which spread long-stemmed white blossoms, the details of which were picked out with silver thread and coloured crystals. The morse bore a seraph's head in gold-thread raised work. The orphreys were woven in a diaper of red and gold silk, and were starred with medallions of many saints and martyrs, among whom was St. Sebastian. He had chasubles, also, of amber-coloured silk, and blue silk and gold brocade, and yellow silk damask and cloth of gold, figured with representations of the Passion and Crucifixion of Christ, and embroidered with lions and peacocks and other emblems; dalmatics of white satin and pink silk damask, decorated with tulips and dolphins and _fleurs-de-lis_; altar frontals of crimson velvet and blue linen; and many corporals, chalice-veils, and sudaria. In the mystic offices to which such things were put, there was something that quickened his imagination. For these treasures, and everything that he collected in his lovely house, were to be to him means of forgetfulness, modes by which he could escape, for a season, from the fear that seemed to him at times to be almost too great to be borne. Upon the walls of the lonely locked room where he had spent so much of his boyhood, he had hung with his own hands the terrible portrait whose changing features showed him the real degradation of his life, and in front of it had draped the purple-and-gold pall as a curtain. For weeks he would not go there, would forget the hideous painted thing, and get back his light heart, his wonderful joyousness, his passionate absorption in mere existence. Then, suddenly, some night he would creep out of the house, go down to dreadful places near Blue Gate Fields, and stay there, day after day, until he was driven away. On his return he would sit in front of the picture, sometimes loathing it and himself, but filled, at other times, with that pride of individualism that is half the fascination of sin, and smiling with secret pleasure at the misshapen shadow that had to bear the burden that should have been his own. After a few years he could not endure to be long out of England, and gave up the villa that he had shared at Trouville with Lord Henry, as well as the little white walled-in house at Algiers where they had more than once spent the winter. He hated to be separated from the picture that was such a part of his life, and was also afraid that during his absence some one might gain access to the room, in spite of the elaborate bars that he had caused to be placed upon the door. He was quite conscious that this would tell them nothing. It was true that the portrait still preserved, under all the foulness and ugliness of the face, its marked likeness to himself; but what could they learn from that? He would laugh at any one who tried to taunt him. He had not painted it. What was it to him how vile and full of shame it looked? Even if he told them, would they believe it? Yet he was afraid. Sometimes when he was down at his great house in Nottinghamshire, entertaining the fashionable young men of his own rank who were his chief companions, and astounding the county by the wanton luxury and gorgeous splendour of his mode of life, he would suddenly leave his guests and rush back to town to see that the door had not been tampered with and that the picture was still there. What if it should be stolen? The mere thought made him cold with horror. Surely the world would know his secret then. Perhaps the world already suspected it. For, while he fascinated many, there were not a few who distrusted him. He was very nearly blackballed at a West End club of which his birth and social position fully entitled him to become a member, and it was said that on one occasion, when he was brought by a friend into the smoking-room of the Churchill, the Duke of Berwick and another gentleman got up in a marked manner and went out. Curious stories became current about him after he had passed his twenty-fifth year. It was rumoured that he had been seen brawling with foreign sailors in a low den in the distant parts of Whitechapel, and that he consorted with thieves and coiners and knew the mysteries of their trade. His extraordinary absences became notorious, and, when he used to reappear again in society, men would whisper to each other in corners, or pass him with a sneer, or look at him with cold searching eyes, as though they were determined to discover his secret. Of such insolences and attempted slights he, of course, took no notice, and in the opinion of most people his frank debonair manner, his charming boyish smile, and the infinite grace of that wonderful youth that seemed never to leave him, were in themselves a sufficient answer to the calumnies, for so they termed them, that were circulated about him. It was remarked, however, that some of those who had been most intimate with him appeared, after a time, to shun him. Women who had wildly adored him, and for his sake had braved all social censure and set convention at defiance, were seen to grow pallid with shame or horror if Dorian Gray entered the room. Yet these whispered scandals only increased in the eyes of many his strange and dangerous charm. His great wealth was a certain element of security. Society--civilized society, at least--is never very ready to believe anything to the detriment of those who are both rich and fascinating. It feels instinctively that manners are of more importance than morals, and, in its opinion, the highest respectability is of much less value than the possession of a good _chef_. And, after all, it is a very poor consolation to be told that the man who has given one a bad dinner, or poor wine, is irreproachable in his private life. Even the cardinal virtues cannot atone for half-cold _entrees_, as Lord Henry remarked once, in a discussion on the subject, and there is possibly a good deal to be said for his view. For the canons of good society are, or should be, the same as the canons of art. Form is absolutely essential to it. It should have the dignity of a ceremony, as well as its unreality, and should combine the insincere character of a romantic play with the wit and beauty that make such plays delightful to us. Is insincerity such a terrible thing? I think not. It is merely a method by which we can multiply our personalities. Such, at any rate, was Dorian Gray's opinion. He used to wonder at the shallow psychology of those who conceive the ego in man as a thing simple, permanent, reliable, and of one essence. To him, man was a being with myriad lives and myriad sensations, a complex multiform creature that bore within itself strange legacies of thought and passion, and whose very flesh was tainted with the monstrous maladies of the dead. He loved to stroll through the gaunt cold picture-gallery of his country house and look at the various portraits of those whose blood flowed in his veins. Here was Philip Herbert, described by Francis Osborne, in his Memoires on the Reigns of Queen Elizabeth and King James, as one who was "caressed by the Court for his handsome face, which kept him not long company." Was it young Herbert's life that he sometimes led? Had some strange poisonous germ crept from body to body till it had reached his own? Was it some dim sense of that ruined grace that had made him so suddenly, and almost without cause, give utterance, in Basil Hallward's studio, to the mad prayer that had so changed his life? Here, in gold-embroidered red doublet, jewelled surcoat, and gilt-edged ruff and wristbands, stood Sir Anthony Sherard, with his silver-and-black armour piled at his feet. What had this man's legacy been? Had the lover of Giovanna of Naples bequeathed him some inheritance of sin and shame? Were his own actions merely the dreams that the dead man had not dared to realize? Here, from the fading canvas, smiled Lady Elizabeth Devereux, in her gauze hood, pearl stomacher, and pink slashed sleeves. A flower was in her right hand, and her left clasped an enamelled collar of white and damask roses. On a table by her side lay a mandolin and an apple. There were large green rosettes upon her little pointed shoes. He knew her life, and the strange stories that were told about her lovers. Had he something of her temperament in him? These oval, heavy-lidded eyes seemed to look curiously at him. What of George Willoughby, with his powdered hair and fantastic patches? How evil he looked! The face was saturnine and swarthy, and the sensual lips seemed to be twisted with disdain. Delicate lace ruffles fell over the lean yellow hands that were so overladen with rings. He had been a macaroni of the eighteenth century, and the friend, in his youth, of Lord Ferrars. What of the second Lord Beckenham, the companion of the Prince Regent in his wildest days, and one of the witnesses at the secret marriage with Mrs. Fitzherbert? How proud and handsome he was, with his chestnut curls and insolent pose! What passions had he bequeathed? The world had looked upon him as infamous. He had led the orgies at Carlton House. The star of the Garter glittered upon his breast. Beside him hung the portrait of his wife, a pallid, thin-lipped woman in black. Her blood, also, stirred within him. How curious it all seemed! And his mother with her Lady Hamilton face and her moist, wine-dashed lips--he knew what he had got from her. He had got from her his beauty, and his passion for the beauty of others. She laughed at him in her loose Bacchante dress. There were vine leaves in her hair. The purple spilled from the cup she was holding. The carnations of the painting had withered, but the eyes were still wonderful in their depth and brilliancy of colour. They seemed to follow him wherever he went. Yet one had ancestors in literature as well as in one's own race, nearer perhaps in type and temperament, many of them, and certainly with an influence of which one was more absolutely conscious. There were times when it appeared to Dorian Gray that the whole of history was merely the record of his own life, not as he had lived it in act and circumstance, but as his imagination had created it for him, as it had been in his brain and in his passions. He felt that he had known them all, those strange terrible figures that had passed across the stage of the world and made sin so marvellous and evil so full of subtlety. It seemed to him that in some mysterious way their lives had been his own. The hero of the wonderful novel that had so influenced his life had himself known this curious fancy. In the seventh chapter he tells how, crowned with laurel, lest lightning might strike him, he had sat, as Tiberius, in a garden at Capri, reading the shameful books of Elephantis, while dwarfs and peacocks strutted round him and the flute-player mocked the swinger of the censer; and, as Caligula, had caroused with the green-shirted jockeys in their stables and supped in an ivory manger with a jewel-frontleted horse; and, as Domitian, had wandered through a corridor lined with marble mirrors, looking round with haggard eyes for the reflection of the dagger that was to end his days, and sick with that ennui, that terrible _taedium vitae_, that comes on those to whom life denies nothing; and had peered through a clear emerald at the red shambles of the circus and then, in a litter of pearl and purple drawn by silver-shod mules, been carried through the Street of Pomegranates to a House of Gold and heard men cry on Nero Caesar as he passed by; and, as Elagabalus, had painted his face with colours, and plied the distaff among the women, and brought the Moon from Carthage and given her in mystic marriage to the Sun. Over and over again Dorian used to read this fantastic chapter, and the two chapters immediately following, in which, as in some curious tapestries or cunningly wrought enamels, were pictured the awful and beautiful forms of those whom vice and blood and weariness had made monstrous or mad: Filippo, Duke of Milan, who slew his wife and painted her lips with a scarlet poison that her lover might suck death from the dead thing he fondled; Pietro Barbi, the Venetian, known as Paul the Second, who sought in his vanity to assume the title of Formosus, and whose tiara, valued at two hundred thousand florins, was bought at the price of a terrible sin; Gian Maria Visconti, who used hounds to chase living men and whose murdered body was covered with roses by a harlot who had loved him; the Borgia on his white horse, with Fratricide riding beside him and his mantle stained with the blood of Perotto; Pietro Riario, the young Cardinal Archbishop of Florence, child and minion of Sixtus IV, whose beauty was equalled only by his debauchery, and who received Leonora of Aragon in a pavilion of white and crimson silk, filled with nymphs and centaurs, and gilded a boy that he might serve at the feast as Ganymede or Hylas; Ezzelin, whose melancholy could be cured only by the spectacle of death, and who had a passion for red blood, as other men have for red wine--the son of the Fiend, as was reported, and one who had cheated his father at dice when gambling with him for his own soul; Giambattista Cibo, who in mockery took the name of Innocent and into whose torpid veins the blood of three lads was infused by a Jewish doctor; Sigismondo Malatesta, the lover of Isotta and the lord of Rimini, whose effigy was burned at Rome as the enemy of God and man, who strangled Polyssena with a napkin, and gave poison to Ginevra d'Este in a cup of emerald, and in honour of a shameful passion built a pagan church for Christian worship; Charles VI, who had so wildly adored his brother's wife that a leper had warned him of the insanity that was coming on him, and who, when his brain had sickened and grown strange, could only be soothed by Saracen cards painted with the images of love and death and madness; and, in his trimmed jerkin and jewelled cap and acanthuslike curls, Grifonetto Baglioni, who slew Astorre with his bride, and Simonetto with his page, and whose comeliness was such that, as he lay dying in the yellow piazza of Perugia, those who had hated him could not choose but weep, and Atalanta, who had cursed him, blessed him. There was a horrible fascination in them all. He saw them at night, and they troubled his imagination in the day. The Renaissance knew of strange manners of poisoning--poisoning by a helmet and a lighted torch, by an embroidered glove and a jewelled fan, by a gilded pomander and by an amber chain. Dorian Gray had been poisoned by a book. There were moments when he looked on evil simply as a mode through which he could realize his conception of the beautiful. CHAPTER 12 It was on the ninth of November, the eve of his own thirty-eighth birthday, as he often remembered afterwards. He was walking home about eleven o'clock from Lord Henry's, where he had been dining, and was wrapped in heavy furs, as the night was cold and foggy. At the corner of Grosvenor Square and South Audley Street, a man passed him in the mist, walking very fast and with the collar of his grey ulster turned up. He had a bag in his hand. Dorian recognized him. It was Basil Hallward. A strange sense of fear, for which he could not account, came over him. He made no sign of recognition and went on quickly in the direction of his own house. But Hallward had seen him. Dorian heard him first stopping on the pavement and then hurrying after him. In a few moments, his hand was on his arm. "Dorian! What an extraordinary piece of luck! I have been waiting for you in your library ever since nine o'clock. Finally I took pity on your tired servant and told him to go to bed, as he let me out. I am off to Paris by the midnight train, and I particularly wanted to see you before I left. I thought it was you, or rather your fur coat, as you passed me. But I wasn't quite sure. Didn't you recognize me?" "In this fog, my dear Basil? Why, I can't even recognize Grosvenor Square. I believe my house is somewhere about here, but I don't feel at all certain about it. I am sorry you are going away, as I have not seen you for ages. But I suppose you will be back soon?" "No: I am going to be out of England for six months. I intend to take a studio in Paris and shut myself up till I have finished a great picture I have in my head. However, it wasn't about myself I wanted to talk. Here we are at your door. Let me come in for a moment. I have something to say to you." "I shall be charmed. But won't you miss your train?" said Dorian Gray languidly as he passed up the steps and opened the door with his latch-key. The lamplight struggled out through the fog, and Hallward looked at his watch. "I have heaps of time," he answered. "The train doesn't go till twelve-fifteen, and it is only just eleven. In fact, I was on my way to the club to look for you, when I met you. You see, I shan't have any delay about luggage, as I have sent on my heavy things. All I have with me is in this bag, and I can easily get to Victoria in twenty minutes." Dorian looked at him and smiled. "What a way for a fashionable painter to travel! A Gladstone bag and an ulster! Come in, or the fog will get into the house. And mind you don't talk about anything serious. Nothing is serious nowadays. At least nothing should be." Hallward shook his head, as he entered, and followed Dorian into the library. There was a bright wood fire blazing in the large open hearth. The lamps were lit, and an open Dutch silver spirit-case stood, with some siphons of soda-water and large cut-glass tumblers, on a little marqueterie table. "You see your servant made me quite at home, Dorian. He gave me everything I wanted, including your best gold-tipped cigarettes. He is a most hospitable creature. I like him much better than the Frenchman you used to have. What has become of the Frenchman, by the bye?" Dorian shrugged his shoulders. "I believe he married Lady Radley's maid, and has established her in Paris as an English dressmaker. Anglomania is very fashionable over there now, I hear. It seems silly of the French, doesn't it? But--do you know?--he was not at all a bad servant. I never liked him, but I had nothing to complain about. One often imagines things that are quite absurd. He was really very devoted to me and seemed quite sorry when he went away. Have another brandy-and-soda? Or would you like hock-and-seltzer? I always take hock-and-seltzer myself. There is sure to be some in the next room." "Thanks, I won't have anything more," said the painter, taking his cap and coat off and throwing them on the bag that he had placed in the corner. "And now, my dear fellow, I want to speak to you seriously. Don't frown like that. You make it so much more difficult for me." "What is it all about?" cried Dorian in his petulant way, flinging himself down on the sofa. "I hope it is not about myself. I am tired of myself to-night. I should like to be somebody else." "It is about yourself," answered Hallward in his grave deep voice, "and I must say it to you. I shall only keep you half an hour." Dorian sighed and lit a cigarette. "Half an hour!" he murmured. "It is not much to ask of you, Dorian, and it is entirely for your own sake that I am speaking. I think it right that you should know that the most dreadful things are being said against you in London." "I don't wish to know anything about them. I love scandals about other people, but scandals about myself don't interest me. They have not got the charm of novelty." "They must interest you, Dorian. Every gentleman is interested in his good name. You don't want people to talk of you as something vile and degraded. Of course, you have your position, and your wealth, and all that kind of thing. But position and wealth are not everything. Mind you, I don't believe these rumours at all. At least, I can't believe them when I see you. Sin is a thing that writes itself across a man's face. It cannot be concealed. People talk sometimes of secret vices. There are no such things. If a wretched man has a vice, it shows itself in the lines of his mouth, the droop of his eyelids, the moulding of his hands even. Somebody--I won't mention his name, but you know him--came to me last year to have his portrait done. I had never seen him before, and had never heard anything about him at the time, though I have heard a good deal since. He offered an extravagant price. I refused him. There was something in the shape of his fingers that I hated. I know now that I was quite right in what I fancied about him. His life is dreadful. But you, Dorian, with your pure, bright, innocent face, and your marvellous untroubled youth--I can't believe anything against you. And yet I see you very seldom, and you never come down to the studio now, and when I am away from you, and I hear all these hideous things that people are whispering about you, I don't know what to say. Why is it, Dorian, that a man like the Duke of Berwick leaves the room of a club when you enter it? Why is it that so many gentlemen in London will neither go to your house or invite you to theirs? You used to be a friend of Lord Staveley. I met him at dinner last week. Your name happened to come up in conversation, in connection with the miniatures you have lent to the exhibition at the Dudley. Staveley curled his lip and said that you might have the most artistic tastes, but that you were a man whom no pure-minded girl should be allowed to know, and whom no chaste woman should sit in the same room with. I reminded him that I was a friend of yours, and asked him what he meant. He told me. He told me right out before everybody. It was horrible! Why is your friendship so fatal to young men? There was that wretched boy in the Guards who committed suicide. You were his great friend. There was Sir Henry Ashton, who had to leave England with a tarnished name. You and he were inseparable. What about Adrian Singleton and his dreadful end? What about Lord Kent's only son and his career? I met his father yesterday in St. James's Street. He seemed broken with shame and sorrow. What about the young Duke of Perth? What sort of life has he got now? What gentleman would associate with him?" "Stop, Basil. You are talking about things of which you know nothing," said Dorian Gray, biting his lip, and with a note of infinite contempt in his voice. "You ask me why Berwick leaves a room when I enter it. It is because I know everything about his life, not because he knows anything about mine. With such blood as he has in his veins, how could his record be clean? You ask me about Henry Ashton and young Perth. Did I teach the one his vices, and the other his debauchery? If Kent's silly son takes his wife from the streets, what is that to me? If Adrian Singleton writes his friend's name across a bill, am I his keeper? I know how people chatter in England. The middle classes air their moral prejudices over their gross dinner-tables, and whisper about what they call the profligacies of their betters in order to try and pretend that they are in smart society and on intimate terms with the people they slander. In this country, it is enough for a man to have distinction and brains for every common tongue to wag against him. And what sort of lives do these people, who pose as being moral, lead themselves? My dear fellow, you forget that we are in the native land of the hypocrite." "Dorian," cried Hallward, "that is not the question. England is bad enough I know, and English society is all wrong. That is the reason why I want you to be fine. You have not been fine. One has a right to judge of a man by the effect he has over his friends. Yours seem to lose all sense of honour, of goodness, of purity. You have filled them with a madness for pleasure. They have gone down into the depths. You led them there. Yes: you led them there, and yet you can smile, as you are smiling now. And there is worse behind. I know you and Harry are inseparable. Surely for that reason, if for none other, you should not have made his sister's name a by-word." "Take care, Basil. You go too far." "I must speak, and you must listen. You shall listen. When you met Lady Gwendolen, not a breath of scandal had ever touched her. Is there a single decent woman in London now who would drive with her in the park? Why, even her children are not allowed to live with her. Then there are other stories--stories that you have been seen creeping at dawn out of dreadful houses and slinking in disguise into the foulest dens in London. Are they true? Can they be true? When I first heard them, I laughed. I hear them now, and they make me shudder. What about your country-house and the life that is led there? Dorian, you don't know what is said about you. I won't tell you that I don't want to preach to you. I remember Harry saying once that every man who turned himself into an amateur curate for the moment always began by saying that, and then proceeded to break his word. I do want to preach to you. I want you to lead such a life as will make the world respect you. I want you to have a clean name and a fair record. I want you to get rid of the dreadful people you associate with. Don't shrug your shoulders like that. Don't be so indifferent. You have a wonderful influence. Let it be for good, not for evil. They say that you corrupt every one with whom you become intimate, and that it is quite sufficient for you to enter a house for shame of some kind to follow after. I don't know whether it is so or not. How should I know? But it is said of you. I am told things that it seems impossible to doubt. Lord Gloucester was one of my greatest friends at Oxford. He showed me a letter that his wife had written to him when she was dying alone in her villa at Mentone. Your name was implicated in the most terrible confession I ever read. I told him that it was absurd--that I knew you thoroughly and that you were incapable of anything of the kind. Know you? I wonder do I know you? Before I could answer that, I should have to see your soul." "To see my soul!" muttered Dorian Gray, starting up from the sofa and turning almost white from fear. "Yes," answered Hallward gravely, and with deep-toned sorrow in his voice, "to see your soul. But only God can do that." A bitter laugh of mockery broke from the lips of the younger man. "You shall see it yourself, to-night!" he cried, seizing a lamp from the table. "Come: it is your own handiwork. Why shouldn't you look at it? You can tell the world all about it afterwards, if you choose. Nobody would believe you. If they did believe you, they would like me all the better for it. I know the age better than you do, though you will prate about it so tediously. Come, I tell you. You have chattered enough about corruption. Now you shall look on it face to face." There was the madness of pride in every word he uttered. He stamped his foot upon the ground in his boyish insolent manner. He felt a terrible joy at the thought that some one else was to share his secret, and that the man who had painted the portrait that was the origin of all his shame was to be burdened for the rest of his life with the hideous memory of what he had done. "Yes," he continued, coming closer to him and looking steadfastly into his stern eyes, "I shall show you my soul. You shall see the thing that you fancy only God can see." Hallward started back. "This is blasphemy, Dorian!" he cried. "You must not say things like that. They are horrible, and they don't mean anything." "You think so?" He laughed again. "I know so. As for what I said to you to-night, I said it for your good. You know I have been always a stanch friend to you." "Don't touch me. Finish what you have to say." A twisted flash of pain shot across the painter's face. He paused for a moment, and a wild feeling of pity came over him. After all, what right had he to pry into the life of Dorian Gray? If he had done a tithe of what was rumoured about him, how much he must have suffered! Then he straightened himself up, and walked over to the fire-place, and stood there, looking at the burning logs with their frostlike ashes and their throbbing cores of flame. "I am waiting, Basil," said the young man in a hard clear voice. He turned round. "What I have to say is this," he cried. "You must give me some answer to these horrible charges that are made against you. If you tell me that they are absolutely untrue from beginning to end, I shall believe you. Deny them, Dorian, deny them! Can't you see what I am going through? My God! don't tell me that you are bad, and corrupt, and shameful." Dorian Gray smiled. There was a curl of contempt in his lips. "Come upstairs, Basil," he said quietly. "I keep a diary of my life from day to day, and it never leaves the room in which it is written. I shall show it to you if you come with me." "I shall come with you, Dorian, if you wish it. I see I have missed my train. That makes no matter. I can go to-morrow. But don't ask me to read anything to-night. All I want is a plain answer to my question." "That shall be given to you upstairs. I could not give it here. You will not have to read long." CHAPTER 13 He passed out of the room and began the ascent, Basil Hallward following close behind. They walked softly, as men do instinctively at night. The lamp cast fantastic shadows on the wall and staircase. A rising wind made some of the windows rattle. When they reached the top landing, Dorian set the lamp down on the floor, and taking out the key, turned it in the lock. "You insist on knowing, Basil?" he asked in a low voice. "Yes." "I am delighted," he answered, smiling. Then he added, somewhat harshly, "You are the one man in the world who is entitled to know everything about me. You have had more to do with my life than you think"; and, taking up the lamp, he opened the door and went in. A cold current of air passed them, and the light shot up for a moment in a flame of murky orange. He shuddered. "Shut the door behind you," he whispered, as he placed the lamp on the table. Hallward glanced round him with a puzzled expression. The room looked as if it had not been lived in for years. A faded Flemish tapestry, a curtained picture, an old Italian _cassone_, and an almost empty book-case--that was all that it seemed to contain, besides a chair and a table. As Dorian Gray was lighting a half-burned candle that was standing on the mantelshelf, he saw that the whole place was covered with dust and that the carpet was in holes. A mouse ran scuffling behind the wainscoting. There was a damp odour of mildew. "So you think that it is only God who sees the soul, Basil? Draw that curtain back, and you will see mine." The voice that spoke was cold and cruel. "You are mad, Dorian, or playing a part," muttered Hallward, frowning. "You won't? Then I must do it myself," said the young man, and he tore the curtain from its rod and flung it on the ground. An exclamation of horror broke from the painter's lips as he saw in the dim light the hideous face on the canvas grinning at him. There was something in its expression that filled him with disgust and loathing. Good heavens! it was Dorian Gray's own face that he was looking at! The horror, whatever it was, had not yet entirely spoiled that marvellous beauty. There was still some gold in the thinning hair and some scarlet on the sensual mouth. The sodden eyes had kept something of the loveliness of their blue, the noble curves had not yet completely passed away from chiselled nostrils and from plastic throat. Yes, it was Dorian himself. But who had done it? He seemed to recognize his own brushwork, and the frame was his own design. The idea was monstrous, yet he felt afraid. He seized the lighted candle, and held it to the picture. In the left-hand corner was his own name, traced in long letters of bright vermilion. It was some foul parody, some infamous ignoble satire. He had never done that. Still, it was his own picture. He knew it, and he felt as if his blood had changed in a moment from fire to sluggish ice. His own picture! What did it mean? Why had it altered? He turned and looked at Dorian Gray with the eyes of a sick man. His mouth twitched, and his parched tongue seemed unable to articulate. He passed his hand across his forehead. It was dank with clammy sweat. The young man was leaning against the mantelshelf, watching him with that strange expression that one sees on the faces of those who are absorbed in a play when some great artist is acting. There was neither real sorrow in it nor real joy. There was simply the passion of the spectator, with perhaps a flicker of triumph in his eyes. He had taken the flower out of his coat, and was smelling it, or pretending to do so. "What does this mean?" cried Hallward, at last. His own voice sounded shrill and curious in his ears. "Years ago, when I was a boy," said Dorian Gray, crushing the flower in his hand, "you met me, flattered me, and taught me to be vain of my good looks. One day you introduced me to a friend of yours, who explained to me the wonder of youth, and you finished a portrait of me that revealed to me the wonder of beauty. In a mad moment that, even now, I don't know whether I regret or not, I made a wish, perhaps you would call it a prayer...." "I remember it! Oh, how well I remember it! No! the thing is impossible. The room is damp. Mildew has got into the canvas. The paints I used had some wretched mineral poison in them. I tell you the thing is impossible." "Ah, what is impossible?" murmured the young man, going over to the window and leaning his forehead against the cold, mist-stained glass. "You told me you had destroyed it." "I was wrong. It has destroyed me." "I don't believe it is my picture." "Can't you see your ideal in it?" said Dorian bitterly. "My ideal, as you call it..." "As you called it." "There was nothing evil in it, nothing shameful. You were to me such an ideal as I shall never meet again. This is the face of a satyr." "It is the face of my soul." "Christ! what a thing I must have worshipped! It has the eyes of a devil." "Each of us has heaven and hell in him, Basil," cried Dorian with a wild gesture of despair. Hallward turned again to the portrait and gazed at it. "My God! If it is true," he exclaimed, "and this is what you have done with your life, why, you must be worse even than those who talk against you fancy you to be!" He held the light up again to the canvas and examined it. The surface seemed to be quite undisturbed and as he had left it. It was from within, apparently, that the foulness and horror had come. Through some strange quickening of inner life the leprosies of sin were slowly eating the thing away. The rotting of a corpse in a watery grave was not so fearful. His hand shook, and the candle fell from its socket on the floor and lay there sputtering. He placed his foot on it and put it out. Then he flung himself into the rickety chair that was standing by the table and buried his face in his hands. "Good God, Dorian, what a lesson! What an awful lesson!" There was no answer, but he could hear the young man sobbing at the window. "Pray, Dorian, pray," he murmured. "What is it that one was taught to say in one's boyhood? 'Lead us not into temptation. Forgive us our sins. Wash away our iniquities.' Let us say that together. The prayer of your pride has been answered. The prayer of your repentance will be answered also. I worshipped you too much. I am punished for it. You worshipped yourself too much. We are both punished." Dorian Gray turned slowly around and looked at him with tear-dimmed eyes. "It is too late, Basil," he faltered. "It is never too late, Dorian. Let us kneel down and try if we cannot remember a prayer. Isn't there a verse somewhere, 'Though your sins be as scarlet, yet I will make them as white as snow'?" "Those words mean nothing to me now." "Hush! Don't say that. You have done enough evil in your life. My God! Don't you see that accursed thing leering at us?" Dorian Gray glanced at the picture, and suddenly an uncontrollable feeling of hatred for Basil Hallward came over him, as though it had been suggested to him by the image on the canvas, whispered into his ear by those grinning lips. The mad passions of a hunted animal stirred within him, and he loathed the man who was seated at the table, more than in his whole life he had ever loathed anything. He glanced wildly around. Something glimmered on the top of the painted chest that faced him. His eye fell on it. He knew what it was. It was a knife that he had brought up, some days before, to cut a piece of cord, and had forgotten to take away with him. He moved slowly towards it, passing Hallward as he did so. As soon as he got behind him, he seized it and turned round. Hallward stirred in his chair as if he was going to rise. He rushed at him and dug the knife into the great vein that is behind the ear, crushing the man's head down on the table and stabbing again and again. There was a stifled groan and the horrible sound of some one choking with blood. Three times the outstretched arms shot up convulsively, waving grotesque, stiff-fingered hands in the air. He stabbed him twice more, but the man did not move. Something began to trickle on the floor. He waited for a moment, still pressing the head down. Then he threw the knife on the table, and listened. He could hear nothing, but the drip, drip on the threadbare carpet. He opened the door and went out on the landing. The house was absolutely quiet. No one was about. For a few seconds he stood bending over the balustrade and peering down into the black seething well of darkness. Then he took out the key and returned to the room, locking himself in as he did so. The thing was still seated in the chair, straining over the table with bowed head, and humped back, and long fantastic arms. Had it not been for the red jagged tear in the neck and the clotted black pool that was slowly widening on the table, one would have said that the man was simply asleep. How quickly it had all been done! He felt strangely calm, and walking over to the window, opened it and stepped out on the balcony. The wind had blown the fog away, and the sky was like a monstrous peacock's tail, starred with myriads of golden eyes. He looked down and saw the policeman going his rounds and flashing the long beam of his lantern on the doors of the silent houses. The crimson spot of a prowling hansom gleamed at the corner and then vanished. A woman in a fluttering shawl was creeping slowly by the railings, staggering as she went. Now and then she stopped and peered back. Once, she began to sing in a hoarse voice. The policeman strolled over and said something to her. She stumbled away, laughing. A bitter blast swept across the square. The gas-lamps flickered and became blue, and the leafless trees shook their black iron branches to and fro. He shivered and went back, closing the window behind him. Having reached the door, he turned the key and opened it. He did not even glance at the murdered man. He felt that the secret of the whole thing was not to realize the situation. The friend who had painted the fatal portrait to which all his misery had been due had gone out of his life. That was enough. Then he remembered the lamp. It was a rather curious one of Moorish workmanship, made of dull silver inlaid with arabesques of burnished steel, and studded with coarse turquoises. Perhaps it might be missed by his servant, and questions would be asked. He hesitated for a moment, then he turned back and took it from the table. He could not help seeing the dead thing. How still it was! How horribly white the long hands looked! It was like a dreadful wax image. Having locked the door behind him, he crept quietly downstairs. The woodwork creaked and seemed to cry out as if in pain. He stopped several times and waited. No: everything was still. It was merely the sound of his own footsteps. When he reached the library, he saw the bag and coat in the corner. They must be hidden away somewhere. He unlocked a secret press that was in the wainscoting, a press in which he kept his own curious disguises, and put them into it. He could easily burn them afterwards. Then he pulled out his watch. It was twenty minutes to two. He sat down and began to think. Every year--every month, almost--men were strangled in England for what he had done. There had been a madness of murder in the air. Some red star had come too close to the earth.... And yet, what evidence was there against him? Basil Hallward had left the house at eleven. No one had seen him come in again. Most of the servants were at Selby Royal. His valet had gone to bed.... Paris! Yes. It was to Paris that Basil had gone, and by the midnight train, as he had intended. With his curious reserved habits, it would be months before any suspicions would be roused. Months! Everything could be destroyed long before then. A sudden thought struck him. He put on his fur coat and hat and went out into the hall. There he paused, hearing the slow heavy tread of the policeman on the pavement outside and seeing the flash of the bull's-eye reflected in the window. He waited and held his breath. After a few moments he drew back the latch and slipped out, shutting the door very gently behind him. Then he began ringing the bell. In about five minutes his valet appeared, half-dressed and looking very drowsy. "I am sorry to have had to wake you up, Francis," he said, stepping in; "but I had forgotten my latch-key. What time is it?" "Ten minutes past two, sir," answered the man, looking at the clock and blinking. "Ten minutes past two? How horribly late! You must wake me at nine to-morrow. I have some work to do." "All right, sir." "Did any one call this evening?" "Mr. Hallward, sir. He stayed here till eleven, and then he went away to catch his train." "Oh! I am sorry I didn't see him. Did he leave any message?" "No, sir, except that he would write to you from Paris, if he did not find you at the club." "That will do, Francis. Don't forget to call me at nine to-morrow." "No, sir." The man shambled down the passage in his slippers. Dorian Gray threw his hat and coat upon the table and passed into the library. For a quarter of an hour he walked up and down the room, biting his lip and thinking. Then he took down the Blue Book from one of the shelves and began to turn over the leaves. "Alan Campbell, 152, Hertford Street, Mayfair." Yes; that was the man he wanted. CHAPTER 14 At nine o'clock the next morning his servant came in with a cup of chocolate on a tray and opened the shutters. Dorian was sleeping quite peacefully, lying on his right side, with one hand underneath his cheek. He looked like a boy who had been tired out with play, or study. The man had to touch him twice on the shoulder before he woke, and as he opened his eyes a faint smile passed across his lips, as though he had been lost in some delightful dream. Yet he had not dreamed at all. His night had been untroubled by any images of pleasure or of pain. But youth smiles without any reason. It is one of its chiefest charms. He turned round, and leaning upon his elbow, began to sip his chocolate. The mellow November sun came streaming into the room. The sky was bright, and there was a genial warmth in the air. It was almost like a morning in May. Gradually the events of the preceding night crept with silent, blood-stained feet into his brain and reconstructed themselves there with terrible distinctness. He winced at the memory of all that he had suffered, and for a moment the same curious feeling of loathing for Basil Hallward that had made him kill him as he sat in the chair came back to him, and he grew cold with passion. The dead man was still sitting there, too, and in the sunlight now. How horrible that was! Such hideous things were for the darkness, not for the day. He felt that if he brooded on what he had gone through he would sicken or grow mad. There were sins whose fascination was more in the memory than in the doing of them, strange triumphs that gratified the pride more than the passions, and gave to the intellect a quickened sense of joy, greater than any joy they brought, or could ever bring, to the senses. But this was not one of them. It was a thing to be driven out of the mind, to be drugged with poppies, to be strangled lest it might strangle one itself. When the half-hour struck, he passed his hand across his forehead, and then got up hastily and dressed himself with even more than his usual care, giving a good deal of attention to the choice of his necktie and scarf-pin and changing his rings more than once. He spent a long time also over breakfast, tasting the various dishes, talking to his valet about some new liveries that he was thinking of getting made for the servants at Selby, and going through his correspondence. At some of the letters, he smiled. Three of them bored him. One he read several times over and then tore up with a slight look of annoyance in his face. "That awful thing, a woman's memory!" as Lord Henry had once said. After he had drunk his cup of black coffee, he wiped his lips slowly with a napkin, motioned to his servant to wait, and going over to the table, sat down and wrote two letters. One he put in his pocket, the other he handed to the valet. "Take this round to 152, Hertford Street, Francis, and if Mr. Campbell is out of town, get his address." As soon as he was alone, he lit a cigarette and began sketching upon a piece of paper, drawing first flowers and bits of architecture, and then human faces. Suddenly he remarked that every face that he drew seemed to have a fantastic likeness to Basil Hallward. He frowned, and getting up, went over to the book-case and took out a volume at hazard. He was determined that he would not think about what had happened until it became absolutely necessary that he should do so. When he had stretched himself on the sofa, he looked at the title-page of the book. It was Gautier's Emaux et Camees, Charpentier's Japanese-paper edition, with the Jacquemart etching. The binding was of citron-green leather, with a design of gilt trellis-work and dotted pomegranates. It had been given to him by Adrian Singleton. As he turned over the pages, his eye fell on the poem about the hand of Lacenaire, the cold yellow hand "_du supplice encore mal lavee_," with its downy red hairs and its "_doigts de faune_." He glanced at his own white taper fingers, shuddering slightly in spite of himself, and passed on, till he came to those lovely stanzas upon Venice: Sur une gamme chromatique, Le sein de perles ruisselant, La Venus de l'Adriatique Sort de l'eau son corps rose et blanc. Les domes, sur l'azur des ondes Suivant la phrase au pur contour, S'enflent comme des gorges rondes Que souleve un soupir d'amour. L'esquif aborde et me depose, Jetant son amarre au pilier, Devant une facade rose, Sur le marbre d'un escalier. How exquisite they were! As one read them, one seemed to be floating down the green water-ways of the pink and pearl city, seated in a black gondola with silver prow and trailing curtains. The mere lines looked to him like those straight lines of turquoise-blue that follow one as one pushes out to the Lido. The sudden flashes of colour reminded him of the gleam of the opal-and-iris-throated birds that flutter round the tall honeycombed Campanile, or stalk, with such stately grace, through the dim, dust-stained arcades. Leaning back with half-closed eyes, he kept saying over and over to himself: "Devant une facade rose, Sur le marbre d'un escalier." The whole of Venice was in those two lines. He remembered the autumn that he had passed there, and a wonderful love that had stirred him to mad delightful follies. There was romance in every place. But Venice, like Oxford, had kept the background for romance, and, to the true romantic, background was everything, or almost everything. Basil had been with him part of the time, and had gone wild over Tintoret. Poor Basil! What a horrible way for a man to die! He sighed, and took up the volume again, and tried to forget. He read of the swallows that fly in and out of the little _cafe_ at Smyrna where the Hadjis sit counting their amber beads and the turbaned merchants smoke their long tasselled pipes and talk gravely to each other; he read of the Obelisk in the Place de la Concorde that weeps tears of granite in its lonely sunless exile and longs to be back by the hot, lotus-covered Nile, where there are Sphinxes, and rose-red ibises, and white vultures with gilded claws, and crocodiles with small beryl eyes that crawl over the green steaming mud; he began to brood over those verses which, drawing music from kiss-stained marble, tell of that curious statue that Gautier compares to a contralto voice, the "_monstre charmant_" that couches in the porphyry-room of the Louvre. But after a time the book fell from his hand. He grew nervous, and a horrible fit of terror came over him. What if Alan Campbell should be out of England? Days would elapse before he could come back. Perhaps he might refuse to come. What could he do then? Every moment was of vital importance. They had been great friends once, five years before--almost inseparable, indeed. Then the intimacy had come suddenly to an end. When they met in society now, it was only Dorian Gray who smiled: Alan Campbell never did. He was an extremely clever young man, though he had no real appreciation of the visible arts, and whatever little sense of the beauty of poetry he possessed he had gained entirely from Dorian. His dominant intellectual passion was for science. At Cambridge he had spent a great deal of his time working in the laboratory, and had taken a good class in the Natural Science Tripos of his year. Indeed, he was still devoted to the study of chemistry, and had a laboratory of his own in which he used to shut himself up all day long, greatly to the annoyance of his mother, who had set her heart on his standing for Parliament and had a vague idea that a chemist was a person who made up prescriptions. He was an excellent musician, however, as well, and played both the violin and the piano better than most amateurs. In fact, it was music that had first brought him and Dorian Gray together--music and that indefinable attraction that Dorian seemed to be able to exercise whenever he wished--and, indeed, exercised often without being conscious of it. They had met at Lady Berkshire's the night that Rubinstein played there, and after that used to be always seen together at the opera and wherever good music was going on. For eighteen months their intimacy lasted. Campbell was always either at Selby Royal or in Grosvenor Square. To him, as to many others, Dorian Gray was the type of everything that is wonderful and fascinating in life. Whether or not a quarrel had taken place between them no one ever knew. But suddenly people remarked that they scarcely spoke when they met and that Campbell seemed always to go away early from any party at which Dorian Gray was present. He had changed, too--was strangely melancholy at times, appeared almost to dislike hearing music, and would never himself play, giving as his excuse, when he was called upon, that he was so absorbed in science that he had no time left in which to practise. And this was certainly true. Every day he seemed to become more interested in biology, and his name appeared once or twice in some of the scientific reviews in connection with certain curious experiments. This was the man Dorian Gray was waiting for. Every second he kept glancing at the clock. As the minutes went by he became horribly agitated. At last he got up and began to pace up and down the room, looking like a beautiful caged thing. He took long stealthy strides. His hands were curiously cold. The suspense became unbearable. Time seemed to him to be crawling with feet of lead, while he by monstrous winds was being swept towards the jagged edge of some black cleft of precipice. He knew what was waiting for him there; saw it, indeed, and, shuddering, crushed with dank hands his burning lids as though he would have robbed the very brain of sight and driven the eyeballs back into their cave. It was useless. The brain had its own food on which it battened, and the imagination, made grotesque by terror, twisted and distorted as a living thing by pain, danced like some foul puppet on a stand and grinned through moving masks. Then, suddenly, time stopped for him. Yes: that blind, slow-breathing thing crawled no more, and horrible thoughts, time being dead, raced nimbly on in front, and dragged a hideous future from its grave, and showed it to him. He stared at it. Its very horror made him stone. At last the door opened and his servant entered. He turned glazed eyes upon him. "Mr. Campbell, sir," said the man. A sigh of relief broke from his parched lips, and the colour came back to his cheeks. "Ask him to come in at once, Francis." He felt that he was himself again. His mood of cowardice had passed away. The man bowed and retired. In a few moments, Alan Campbell walked in, looking very stern and rather pale, his pallor being intensified by his coal-black hair and dark eyebrows. "Alan! This is kind of you. I thank you for coming." "I had intended never to enter your house again, Gray. But you said it was a matter of life and death." His voice was hard and cold. He spoke with slow deliberation. There was a look of contempt in the steady searching gaze that he turned on Dorian. He kept his hands in the pockets of his Astrakhan coat, and seemed not to have noticed the gesture with which he had been greeted. "Yes: it is a matter of life and death, Alan, and to more than one person. Sit down." Campbell took a chair by the table, and Dorian sat opposite to him. The two men's eyes met. In Dorian's there was infinite pity. He knew that what he was going to do was dreadful. After a strained moment of silence, he leaned across and said, very quietly, but watching the effect of each word upon the face of him he had sent for, "Alan, in a locked room at the top of this house, a room to which nobody but myself has access, a dead man is seated at a table. He has been dead ten hours now. Don't stir, and don't look at me like that. Who the man is, why he died, how he died, are matters that do not concern you. What you have to do is this--" "Stop, Gray. I don't want to know anything further. Whether what you have told me is true or not true doesn't concern me. I entirely decline to be mixed up in your life. Keep your horrible secrets to yourself. They don't interest me any more." "Alan, they will have to interest you. This one will have to interest you. I am awfully sorry for you, Alan. But I can't help myself. You are the one man who is able to save me. I am forced to bring you into the matter. I have no option. Alan, you are scientific. You know about chemistry and things of that kind. You have made experiments. What you have got to do is to destroy the thing that is upstairs--to destroy it so that not a vestige of it will be left. Nobody saw this person come into the house. Indeed, at the present moment he is supposed to be in Paris. He will not be missed for months. When he is missed, there must be no trace of him found here. You, Alan, you must change him, and everything that belongs to him, into a handful of ashes that I may scatter in the air." "You are mad, Dorian." "Ah! I was waiting for you to call me Dorian." "You are mad, I tell you--mad to imagine that I would raise a finger to help you, mad to make this monstrous confession. I will have nothing to do with this matter, whatever it is. Do you think I am going to peril my reputation for you? What is it to me what devil's work you are up to?" "It was suicide, Alan." "I am glad of that. But who drove him to it? You, I should fancy." "Do you still refuse to do this for me?" "Of course I refuse. I will have absolutely nothing to do with it. I don't care what shame comes on you. You deserve it all. I should not be sorry to see you disgraced, publicly disgraced. How dare you ask me, of all men in the world, to mix myself up in this horror? I should have thought you knew more about people's characters. Your friend Lord Henry Wotton can't have taught you much about psychology, whatever else he has taught you. Nothing will induce me to stir a step to help you. You have come to the wrong man. Go to some of your friends. Don't come to me." "Alan, it was murder. I killed him. You don't know what he had made me suffer. Whatever my life is, he had more to do with the making or the marring of it than poor Harry has had. He may not have intended it, the result was the same." "Murder! Good God, Dorian, is that what you have come to? I shall not inform upon you. It is not my business. Besides, without my stirring in the matter, you are certain to be arrested. Nobody ever commits a crime without doing something stupid. But I will have nothing to do with it." "You must have something to do with it. Wait, wait a moment; listen to me. Only listen, Alan. All I ask of you is to perform a certain scientific experiment. You go to hospitals and dead-houses, and the horrors that you do there don't affect you. If in some hideous dissecting-room or fetid laboratory you found this man lying on a leaden table with red gutters scooped out in it for the blood to flow through, you would simply look upon him as an admirable subject. You would not turn a hair. You would not believe that you were doing anything wrong. On the contrary, you would probably feel that you were benefiting the human race, or increasing the sum of knowledge in the world, or gratifying intellectual curiosity, or something of that kind. What I want you to do is merely what you have often done before. Indeed, to destroy a body must be far less horrible than what you are accustomed to work at. And, remember, it is the only piece of evidence against me. If it is discovered, I am lost; and it is sure to be discovered unless you help me." "I have no desire to help you. You forget that. I am simply indifferent to the whole thing. It has nothing to do with me." "Alan, I entreat you. Think of the position I am in. Just before you came I almost fainted with terror. You may know terror yourself some day. No! don't think of that. Look at the matter purely from the scientific point of view. You don't inquire where the dead things on which you experiment come from. Don't inquire now. I have told you too much as it is. But I beg of you to do this. We were friends once, Alan." "Don't speak about those days, Dorian--they are dead." "The dead linger sometimes. The man upstairs will not go away. He is sitting at the table with bowed head and outstretched arms. Alan! Alan! If you don't come to my assistance, I am ruined. Why, they will hang me, Alan! Don't you understand? They will hang me for what I have done." "There is no good in prolonging this scene. I absolutely refuse to do anything in the matter. It is insane of you to ask me." "You refuse?" "Yes." "I entreat you, Alan." "It is useless." The same look of pity came into Dorian Gray's eyes. Then he stretched out his hand, took a piece of paper, and wrote something on it. He read it over twice, folded it carefully, and pushed it across the table. Having done this, he got up and went over to the window. Campbell looked at him in surprise, and then took up the paper, and opened it. As he read it, his face became ghastly pale and he fell back in his chair. A horrible sense of sickness came over him. He felt as if his heart was beating itself to death in some empty hollow. After two or three minutes of terrible silence, Dorian turned round and came and stood behind him, putting his hand upon his shoulder. "I am so sorry for you, Alan," he murmured, "but you leave me no alternative. I have a letter written already. Here it is. You see the address. If you don't help me, I must send it. If you don't help me, I will send it. You know what the result will be. But you are going to help me. It is impossible for you to refuse now. I tried to spare you. You will do me the justice to admit that. You were stern, harsh, offensive. You treated me as no man has ever dared to treat me--no living man, at any rate. I bore it all. Now it is for me to dictate terms." Campbell buried his face in his hands, and a shudder passed through him. "Yes, it is my turn to dictate terms, Alan. You know what they are. The thing is quite simple. Come, don't work yourself into this fever. The thing has to be done. Face it, and do it." A groan broke from Campbell's lips and he shivered all over. The ticking of the clock on the mantelpiece seemed to him to be dividing time into separate atoms of agony, each of which was too terrible to be borne. He felt as if an iron ring was being slowly tightened round his forehead, as if the disgrace with which he was threatened had already come upon him. The hand upon his shoulder weighed like a hand of lead. It was intolerable. It seemed to crush him. "Come, Alan, you must decide at once." "I cannot do it," he said, mechanically, as though words could alter things. "You must. You have no choice. Don't delay." He hesitated a moment. "Is there a fire in the room upstairs?" "Yes, there is a gas-fire with asbestos." "I shall have to go home and get some things from the laboratory." "No, Alan, you must not leave the house. Write out on a sheet of notepaper what you want and my servant will take a cab and bring the things back to you." Campbell scrawled a few lines, blotted them, and addressed an envelope to his assistant. Dorian took the note up and read it carefully. Then he rang the bell and gave it to his valet, with orders to return as soon as possible and to bring the things with him. As the hall door shut, Campbell started nervously, and having got up from the chair, went over to the chimney-piece. He was shivering with a kind of ague. For nearly twenty minutes, neither of the men spoke. A fly buzzed noisily about the room, and the ticking of the clock was like the beat of a hammer. As the chime struck one, Campbell turned round, and looking at Dorian Gray, saw that his eyes were filled with tears. There was something in the purity and refinement of that sad face that seemed to enrage him. "You are infamous, absolutely infamous!" he muttered. "Hush, Alan. You have saved my life," said Dorian. "Your life? Good heavens! what a life that is! You have gone from corruption to corruption, and now you have culminated in crime. In doing what I am going to do--what you force me to do--it is not of your life that I am thinking." "Ah, Alan," murmured Dorian with a sigh, "I wish you had a thousandth part of the pity for me that I have for you." He turned away as he spoke and stood looking out at the garden. Campbell made no answer. After about ten minutes a knock came to the door, and the servant entered, carrying a large mahogany chest of chemicals, with a long coil of steel and platinum wire and two rather curiously shaped iron clamps. "Shall I leave the things here, sir?" he asked Campbell. "Yes," said Dorian. "And I am afraid, Francis, that I have another errand for you. What is the name of the man at Richmond who supplies Selby with orchids?" "Harden, sir." "Yes--Harden. You must go down to Richmond at once, see Harden personally, and tell him to send twice as many orchids as I ordered, and to have as few white ones as possible. In fact, I don't want any white ones. It is a lovely day, Francis, and Richmond is a very pretty place--otherwise I wouldn't bother you about it." "No trouble, sir. At what time shall I be back?" Dorian looked at Campbell. "How long will your experiment take, Alan?" he said in a calm indifferent voice. The presence of a third person in the room seemed to give him extraordinary courage. Campbell frowned and bit his lip. "It will take about five hours," he answered. "It will be time enough, then, if you are back at half-past seven, Francis. Or stay: just leave my things out for dressing. You can have the evening to yourself. I am not dining at home, so I shall not want you." "Thank you, sir," said the man, leaving the room. "Now, Alan, there is not a moment to be lost. How heavy this chest is! I'll take it for you. You bring the other things." He spoke rapidly and in an authoritative manner. Campbell felt dominated by him. They left the room together. When they reached the top landing, Dorian took out the key and turned it in the lock. Then he stopped, and a troubled look came into his eyes. He shuddered. "I don't think I can go in, Alan," he murmured. "It is nothing to me. I don't require you," said Campbell coldly. Dorian half opened the door. As he did so, he saw the face of his portrait leering in the sunlight. On the floor in front of it the torn curtain was lying. He remembered that the night before he had forgotten, for the first time in his life, to hide the fatal canvas, and was about to rush forward, when he drew back with a shudder. What was that loathsome red dew that gleamed, wet and glistening, on one of the hands, as though the canvas had sweated blood? How horrible it was!--more horrible, it seemed to him for the moment, than the silent thing that he knew was stretched across the table, the thing whose grotesque misshapen shadow on the spotted carpet showed him that it had not stirred, but was still there, as he had left it. He heaved a deep breath, opened the door a little wider, and with half-closed eyes and averted head, walked quickly in, determined that he would not look even once upon the dead man. Then, stooping down and taking up the gold-and-purple hanging, he flung it right over the picture. There he stopped, feeling afraid to turn round, and his eyes fixed themselves on the intricacies of the pattern before him. He heard Campbell bringing in the heavy chest, and the irons, and the other things that he had required for his dreadful work. He began to wonder if he and Basil Hallward had ever met, and, if so, what they had thought of each other. "Leave me now," said a stern voice behind him. He turned and hurried out, just conscious that the dead man had been thrust back into the chair and that Campbell was gazing into a glistening yellow face. As he was going downstairs, he heard the key being turned in the lock. It was long after seven when Campbell came back into the library. He was pale, but absolutely calm. "I have done what you asked me to do," he muttered. "And now, good-bye. Let us never see each other again." "You have saved me from ruin, Alan. I cannot forget that," said Dorian simply. As soon as Campbell had left, he went upstairs. There was a horrible smell of nitric acid in the room. But the thing that had been sitting at the table was gone. CHAPTER 15 That evening, at eight-thirty, exquisitely dressed and wearing a large button-hole of Parma violets, Dorian Gray was ushered into Lady Narborough's drawing-room by bowing servants. His forehead was throbbing with maddened nerves, and he felt wildly excited, but his manner as he bent over his hostess's hand was as easy and graceful as ever. Perhaps one never seems so much at one's ease as when one has to play a part. Certainly no one looking at Dorian Gray that night could have believed that he had passed through a tragedy as horrible as any tragedy of our age. Those finely shaped fingers could never have clutched a knife for sin, nor those smiling lips have cried out on God and goodness. He himself could not help wondering at the calm of his demeanour, and for a moment felt keenly the terrible pleasure of a double life. It was a small party, got up rather in a hurry by Lady Narborough, who was a very clever woman with what Lord Henry used to describe as the remains of really remarkable ugliness. She had proved an excellent wife to one of our most tedious ambassadors, and having buried her husband properly in a marble mausoleum, which she had herself designed, and married off her daughters to some rich, rather elderly men, she devoted herself now to the pleasures of French fiction, French cookery, and French _esprit_ when she could get it. Dorian was one of her especial favourites, and she always told him that she was extremely glad she had not met him in early life. "I know, my dear, I should have fallen madly in love with you," she used to say, "and thrown my bonnet right over the mills for your sake. It is most fortunate that you were not thought of at the time. As it was, our bonnets were so unbecoming, and the mills were so occupied in trying to raise the wind, that I never had even a flirtation with anybody. However, that was all Narborough's fault. He was dreadfully short-sighted, and there is no pleasure in taking in a husband who never sees anything." Her guests this evening were rather tedious. The fact was, as she explained to Dorian, behind a very shabby fan, one of her married daughters had come up quite suddenly to stay with her, and, to make matters worse, had actually brought her husband with her. "I think it is most unkind of her, my dear," she whispered. "Of course I go and stay with them every summer after I come from Homburg, but then an old woman like me must have fresh air sometimes, and besides, I really wake them up. You don't know what an existence they lead down there. It is pure unadulterated country life. They get up early, because they have so much to do, and go to bed early, because they have so little to think about. There has not been a scandal in the neighbourhood since the time of Queen Elizabeth, and consequently they all fall asleep after dinner. You shan't sit next either of them. You shall sit by me and amuse me." Dorian murmured a graceful compliment and looked round the room. Yes: it was certainly a tedious party. Two of the people he had never seen before, and the others consisted of Ernest Harrowden, one of those middle-aged mediocrities so common in London clubs who have no enemies, but are thoroughly disliked by their friends; Lady Ruxton, an overdressed woman of forty-seven, with a hooked nose, who was always trying to get herself compromised, but was so peculiarly plain that to her great disappointment no one would ever believe anything against her; Mrs. Erlynne, a pushing nobody, with a delightful lisp and Venetian-red hair; Lady Alice Chapman, his hostess's daughter, a dowdy dull girl, with one of those characteristic British faces that, once seen, are never remembered; and her husband, a red-cheeked, white-whiskered creature who, like so many of his class, was under the impression that inordinate joviality can atone for an entire lack of ideas. He was rather sorry he had come, till Lady Narborough, looking at the great ormolu gilt clock that sprawled in gaudy curves on the mauve-draped mantelshelf, exclaimed: "How horrid of Henry Wotton to be so late! I sent round to him this morning on chance and he promised faithfully not to disappoint me." It was some consolation that Harry was to be there, and when the door opened and he heard his slow musical voice lending charm to some insincere apology, he ceased to feel bored. But at dinner he could not eat anything. Plate after plate went away untasted. Lady Narborough kept scolding him for what she called "an insult to poor Adolphe, who invented the _menu_ specially for you," and now and then Lord Henry looked across at him, wondering at his silence and abstracted manner. From time to time the butler filled his glass with champagne. He drank eagerly, and his thirst seemed to increase. "Dorian," said Lord Henry at last, as the _chaud-froid_ was being handed round, "what is the matter with you to-night? You are quite out of sorts." "I believe he is in love," cried Lady Narborough, "and that he is afraid to tell me for fear I should be jealous. He is quite right. I certainly should." "Dear Lady Narborough," murmured Dorian, smiling, "I have not been in love for a whole week--not, in fact, since Madame de Ferrol left town." "How you men can fall in love with that woman!" exclaimed the old lady. "I really cannot understand it." "It is simply because she remembers you when you were a little girl, Lady Narborough," said Lord Henry. "She is the one link between us and your short frocks." "She does not remember my short frocks at all, Lord Henry. But I remember her very well at Vienna thirty years ago, and how _decolletee_ she was then." "She is still _decolletee_," he answered, taking an olive in his long fingers; "and when she is in a very smart gown she looks like an _edition de luxe_ of a bad French novel. She is really wonderful, and full of surprises. Her capacity for family affection is extraordinary. When her third husband died, her hair turned quite gold from grief." "How can you, Harry!" cried Dorian. "It is a most romantic explanation," laughed the hostess. "But her third husband, Lord Henry! You don't mean to say Ferrol is the fourth?" "Certainly, Lady Narborough." "I don't believe a word of it." "Well, ask Mr. Gray. He is one of her most intimate friends." "Is it true, Mr. Gray?" "She assures me so, Lady Narborough," said Dorian. "I asked her whether, like Marguerite de Navarre, she had their hearts embalmed and hung at her girdle. She told me she didn't, because none of them had had any hearts at all." "Four husbands! Upon my word that is _trop de zele_." "_Trop d'audace_, I tell her," said Dorian. "Oh! she is audacious enough for anything, my dear. And what is Ferrol like? I don't know him." "The husbands of very beautiful women belong to the criminal classes," said Lord Henry, sipping his wine. Lady Narborough hit him with her fan. "Lord Henry, I am not at all surprised that the world says that you are extremely wicked." "But what world says that?" asked Lord Henry, elevating his eyebrows. "It can only be the next world. This world and I are on excellent terms." "Everybody I know says you are very wicked," cried the old lady, shaking her head. Lord Henry looked serious for some moments. "It is perfectly monstrous," he said, at last, "the way people go about nowadays saying things against one behind one's back that are absolutely and entirely true." "Isn't he incorrigible?" cried Dorian, leaning forward in his chair. "I hope so," said his hostess, laughing. "But really, if you all worship Madame de Ferrol in this ridiculous way, I shall have to marry again so as to be in the fashion." "You will never marry again, Lady Narborough," broke in Lord Henry. "You were far too happy. When a woman marries again, it is because she detested her first husband. When a man marries again, it is because he adored his first wife. Women try their luck; men risk theirs." "Narborough wasn't perfect," cried the old lady. "If he had been, you would not have loved him, my dear lady," was the rejoinder. "Women love us for our defects. If we have enough of them, they will forgive us everything, even our intellects. You will never ask me to dinner again after saying this, I am afraid, Lady Narborough, but it is quite true." "Of course it is true, Lord Henry. If we women did not love you for your defects, where would you all be? Not one of you would ever be married. You would be a set of unfortunate bachelors. Not, however, that that would alter you much. Nowadays all the married men live like bachelors, and all the bachelors like married men." "_Fin de siecle_," murmured Lord Henry. "_Fin du globe_," answered his hostess. "I wish it were _fin du globe_," said Dorian with a sigh. "Life is a great disappointment." "Ah, my dear," cried Lady Narborough, putting on her gloves, "don't tell me that you have exhausted life. When a man says that one knows that life has exhausted him. Lord Henry is very wicked, and I sometimes wish that I had been; but you are made to be good--you look so good. I must find you a nice wife. Lord Henry, don't you think that Mr. Gray should get married?" "I am always telling him so, Lady Narborough," said Lord Henry with a bow. "Well, we must look out for a suitable match for him. I shall go through Debrett carefully to-night and draw out a list of all the eligible young ladies." "With their ages, Lady Narborough?" asked Dorian. "Of course, with their ages, slightly edited. But nothing must be done in a hurry. I want it to be what _The Morning Post_ calls a suitable alliance, and I want you both to be happy." "What nonsense people talk about happy marriages!" exclaimed Lord Henry. "A man can be happy with any woman, as long as he does not love her." "Ah! what a cynic you are!" cried the old lady, pushing back her chair and nodding to Lady Ruxton. "You must come and dine with me soon again. You are really an admirable tonic, much better than what Sir Andrew prescribes for me. You must tell me what people you would like to meet, though. I want it to be a delightful gathering." "I like men who have a future and women who have a past," he answered. "Or do you think that would make it a petticoat party?" "I fear so," she said, laughing, as she stood up. "A thousand pardons, my dear Lady Ruxton," she added, "I didn't see you hadn't finished your cigarette." "Never mind, Lady Narborough. I smoke a great deal too much. I am going to limit myself, for the future." "Pray don't, Lady Ruxton," said Lord Henry. "Moderation is a fatal thing. Enough is as bad as a meal. More than enough is as good as a feast." Lady Ruxton glanced at him curiously. "You must come and explain that to me some afternoon, Lord Henry. It sounds a fascinating theory," she murmured, as she swept out of the room. "Now, mind you don't stay too long over your politics and scandal," cried Lady Narborough from the door. "If you do, we are sure to squabble upstairs." The men laughed, and Mr. Chapman got up solemnly from the foot of the table and came up to the top. Dorian Gray changed his seat and went and sat by Lord Henry. Mr. Chapman began to talk in a loud voice about the situation in the House of Commons. He guffawed at his adversaries. The word _doctrinaire_--word full of terror to the British mind--reappeared from time to time between his explosions. An alliterative prefix served as an ornament of oratory. He hoisted the Union Jack on the pinnacles of thought. The inherited stupidity of the race--sound English common sense he jovially termed it--was shown to be the proper bulwark for society. A smile curved Lord Henry's lips, and he turned round and looked at Dorian. "Are you better, my dear fellow?" he asked. "You seemed rather out of sorts at dinner." "I am quite well, Harry. I am tired. That is all." "You were charming last night. The little duchess is quite devoted to you. She tells me she is going down to Selby." "She has promised to come on the twentieth." "Is Monmouth to be there, too?" "Oh, yes, Harry." "He bores me dreadfully, almost as much as he bores her. She is very clever, too clever for a woman. She lacks the indefinable charm of weakness. It is the feet of clay that make the gold of the image precious. Her feet are very pretty, but they are not feet of clay. White porcelain feet, if you like. They have been through the fire, and what fire does not destroy, it hardens. She has had experiences." "How long has she been married?" asked Dorian. "An eternity, she tells me. I believe, according to the peerage, it is ten years, but ten years with Monmouth must have been like eternity, with time thrown in. Who else is coming?" "Oh, the Willoughbys, Lord Rugby and his wife, our hostess, Geoffrey Clouston, the usual set. I have asked Lord Grotrian." "I like him," said Lord Henry. "A great many people don't, but I find him charming. He atones for being occasionally somewhat overdressed by being always absolutely over-educated. He is a very modern type." "I don't know if he will be able to come, Harry. He may have to go to Monte Carlo with his father." "Ah! what a nuisance people's people are! Try and make him come. By the way, Dorian, you ran off very early last night. You left before eleven. What did you do afterwards? Did you go straight home?" Dorian glanced at him hurriedly and frowned. "No, Harry," he said at last, "I did not get home till nearly three." "Did you go to the club?" "Yes," he answered. Then he bit his lip. "No, I don't mean that. I didn't go to the club. I walked about. I forget what I did.... How inquisitive you are, Harry! You always want to know what one has been doing. I always want to forget what I have been doing. I came in at half-past two, if you wish to know the exact time. I had left my latch-key at home, and my servant had to let me in. If you want any corroborative evidence on the subject, you can ask him." Lord Henry shrugged his shoulders. "My dear fellow, as if I cared! Let us go up to the drawing-room. No sherry, thank you, Mr. Chapman. Something has happened to you, Dorian. Tell me what it is. You are not yourself to-night." "Don't mind me, Harry. I am irritable, and out of temper. I shall come round and see you to-morrow, or next day. Make my excuses to Lady Narborough. I shan't go upstairs. I shall go home. I must go home." "All right, Dorian. I dare say I shall see you to-morrow at tea-time. The duchess is coming." "I will try to be there, Harry," he said, leaving the room. As he drove back to his own house, he was conscious that the sense of terror he thought he had strangled had come back to him. Lord Henry's casual questioning had made him lose his nerve for the moment, and he wanted his nerve still. Things that were dangerous had to be destroyed. He winced. He hated the idea of even touching them. Yet it had to be done. He realized that, and when he had locked the door of his library, he opened the secret press into which he had thrust Basil Hallward's coat and bag. A huge fire was blazing. He piled another log on it. The smell of the singeing clothes and burning leather was horrible. It took him three-quarters of an hour to consume everything. At the end he felt faint and sick, and having lit some Algerian pastilles in a pierced copper brazier, he bathed his hands and forehead with a cool musk-scented vinegar. Suddenly he started. His eyes grew strangely bright, and he gnawed nervously at his underlip. Between two of the windows stood a large Florentine cabinet, made out of ebony and inlaid with ivory and blue lapis. He watched it as though it were a thing that could fascinate and make afraid, as though it held something that he longed for and yet almost loathed. His breath quickened. A mad craving came over him. He lit a cigarette and then threw it away. His eyelids drooped till the long fringed lashes almost touched his cheek. But he still watched the cabinet. At last he got up from the sofa on which he had been lying, went over to it, and having unlocked it, touched some hidden spring. A triangular drawer passed slowly out. His fingers moved instinctively towards it, dipped in, and closed on something. It was a small Chinese box of black and gold-dust lacquer, elaborately wrought, the sides patterned with curved waves, and the silken cords hung with round crystals and tasselled in plaited metal threads. He opened it. Inside was a green paste, waxy in lustre, the odour curiously heavy and persistent. He hesitated for some moments, with a strangely immobile smile upon his face. Then shivering, though the atmosphere of the room was terribly hot, he drew himself up and glanced at the clock. It was twenty minutes to twelve. He put the box back, shutting the cabinet doors as he did so, and went into his bedroom. As midnight was striking bronze blows upon the dusky air, Dorian Gray, dressed commonly, and with a muffler wrapped round his throat, crept quietly out of his house. In Bond Street he found a hansom with a good horse. He hailed it and in a low voice gave the driver an address. The man shook his head. "It is too far for me," he muttered. "Here is a sovereign for you," said Dorian. "You shall have another if you drive fast." "All right, sir," answered the man, "you will be there in an hour," and after his fare had got in he turned his horse round and drove rapidly towards the river. CHAPTER 16 A cold rain began to fall, and the blurred street-lamps looked ghastly in the dripping mist. The public-houses were just closing, and dim men and women were clustering in broken groups round their doors. From some of the bars came the sound of horrible laughter. In others, drunkards brawled and screamed. Lying back in the hansom, with his hat pulled over his forehead, Dorian Gray watched with listless eyes the sordid shame of the great city, and now and then he repeated to himself the words that Lord Henry had said to him on the first day they had met, "To cure the soul by means of the senses, and the senses by means of the soul." Yes, that was the secret. He had often tried it, and would try it again now. There were opium dens where one could buy oblivion, dens of horror where the memory of old sins could be destroyed by the madness of sins that were new. The moon hung low in the sky like a yellow skull. From time to time a huge misshapen cloud stretched a long arm across and hid it. The gas-lamps grew fewer, and the streets more narrow and gloomy. Once the man lost his way and had to drive back half a mile. A steam rose from the horse as it splashed up the puddles. The sidewindows of the hansom were clogged with a grey-flannel mist. "To cure the soul by means of the senses, and the senses by means of the soul!" How the words rang in his ears! His soul, certainly, was sick to death. Was it true that the senses could cure it? Innocent blood had been spilled. What could atone for that? Ah! for that there was no atonement; but though forgiveness was impossible, forgetfulness was possible still, and he was determined to forget, to stamp the thing out, to crush it as one would crush the adder that had stung one. Indeed, what right had Basil to have spoken to him as he had done? Who had made him a judge over others? He had said things that were dreadful, horrible, not to be endured. On and on plodded the hansom, going slower, it seemed to him, at each step. He thrust up the trap and called to the man to drive faster. The hideous hunger for opium began to gnaw at him. His throat burned and his delicate hands twitched nervously together. He struck at the horse madly with his stick. The driver laughed and whipped up. He laughed in answer, and the man was silent. The way seemed interminable, and the streets like the black web of some sprawling spider. The monotony became unbearable, and as the mist thickened, he felt afraid. Then they passed by lonely brickfields. The fog was lighter here, and he could see the strange, bottle-shaped kilns with their orange, fanlike tongues of fire. A dog barked as they went by, and far away in the darkness some wandering sea-gull screamed. The horse stumbled in a rut, then swerved aside and broke into a gallop. After some time they left the clay road and rattled again over rough-paven streets. Most of the windows were dark, but now and then fantastic shadows were silhouetted against some lamplit blind. He watched them curiously. They moved like monstrous marionettes and made gestures like live things. He hated them. A dull rage was in his heart. As they turned a corner, a woman yelled something at them from an open door, and two men ran after the hansom for about a hundred yards. The driver beat at them with his whip. It is said that passion makes one think in a circle. Certainly with hideous iteration the bitten lips of Dorian Gray shaped and reshaped those subtle words that dealt with soul and sense, till he had found in them the full expression, as it were, of his mood, and justified, by intellectual approval, passions that without such justification would still have dominated his temper. From cell to cell of his brain crept the one thought; and the wild desire to live, most terrible of all man's appetites, quickened into force each trembling nerve and fibre. Ugliness that had once been hateful to him because it made things real, became dear to him now for that very reason. Ugliness was the one reality. The coarse brawl, the loathsome den, the crude violence of disordered life, the very vileness of thief and outcast, were more vivid, in their intense actuality of impression, than all the gracious shapes of art, the dreamy shadows of song. They were what he needed for forgetfulness. In three days he would be free. Suddenly the man drew up with a jerk at the top of a dark lane. Over the low roofs and jagged chimney-stacks of the houses rose the black masts of ships. Wreaths of white mist clung like ghostly sails to the yards. "Somewhere about here, sir, ain't it?" he asked huskily through the trap. Dorian started and peered round. "This will do," he answered, and having got out hastily and given the driver the extra fare he had promised him, he walked quickly in the direction of the quay. Here and there a lantern gleamed at the stern of some huge merchantman. The light shook and splintered in the puddles. A red glare came from an outward-bound steamer that was coaling. The slimy pavement looked like a wet mackintosh. He hurried on towards the left, glancing back now and then to see if he was being followed. In about seven or eight minutes he reached a small shabby house that was wedged in between two gaunt factories. In one of the top-windows stood a lamp. He stopped and gave a peculiar knock. After a little time he heard steps in the passage and the chain being unhooked. The door opened quietly, and he went in without saying a word to the squat misshapen figure that flattened itself into the shadow as he passed. At the end of the hall hung a tattered green curtain that swayed and shook in the gusty wind which had followed him in from the street. He dragged it aside and entered a long low room which looked as if it had once been a third-rate dancing-saloon. Shrill flaring gas-jets, dulled and distorted in the fly-blown mirrors that faced them, were ranged round the walls. Greasy reflectors of ribbed tin backed them, making quivering disks of light. The floor was covered with ochre-coloured sawdust, trampled here and there into mud, and stained with dark rings of spilled liquor. Some Malays were crouching by a little charcoal stove, playing with bone counters and showing their white teeth as they chattered. In one corner, with his head buried in his arms, a sailor sprawled over a table, and by the tawdrily painted bar that ran across one complete side stood two haggard women, mocking an old man who was brushing the sleeves of his coat with an expression of disgust. "He thinks he's got red ants on him," laughed one of them, as Dorian passed by. The man looked at her in terror and began to whimper. At the end of the room there was a little staircase, leading to a darkened chamber. As Dorian hurried up its three rickety steps, the heavy odour of opium met him. He heaved a deep breath, and his nostrils quivered with pleasure. When he entered, a young man with smooth yellow hair, who was bending over a lamp lighting a long thin pipe, looked up at him and nodded in a hesitating manner. "You here, Adrian?" muttered Dorian. "Where else should I be?" he answered, listlessly. "None of the chaps will speak to me now." "I thought you had left England." "Darlington is not going to do anything. My brother paid the bill at last. George doesn't speak to me either.... I don't care," he added with a sigh. "As long as one has this stuff, one doesn't want friends. I think I have had too many friends." Dorian winced and looked round at the grotesque things that lay in such fantastic postures on the ragged mattresses. The twisted limbs, the gaping mouths, the staring lustreless eyes, fascinated him. He knew in what strange heavens they were suffering, and what dull hells were teaching them the secret of some new joy. They were better off than he was. He was prisoned in thought. Memory, like a horrible malady, was eating his soul away. From time to time he seemed to see the eyes of Basil Hallward looking at him. Yet he felt he could not stay. The presence of Adrian Singleton troubled him. He wanted to be where no one would know who he was. He wanted to escape from himself. "I am going on to the other place," he said after a pause. "On the wharf?" "Yes." "That mad-cat is sure to be there. They won't have her in this place now." Dorian shrugged his shoulders. "I am sick of women who love one. Women who hate one are much more interesting. Besides, the stuff is better." "Much the same." "I like it better. Come and have something to drink. I must have something." "I don't want anything," murmured the young man. "Never mind." Adrian Singleton rose up wearily and followed Dorian to the bar. A half-caste, in a ragged turban and a shabby ulster, grinned a hideous greeting as he thrust a bottle of brandy and two tumblers in front of them. The women sidled up and began to chatter. Dorian turned his back on them and said something in a low voice to Adrian Singleton. A crooked smile, like a Malay crease, writhed across the face of one of the women. "We are very proud to-night," she sneered. "For God's sake don't talk to me," cried Dorian, stamping his foot on the ground. "What do you want? Money? Here it is. Don't ever talk to me again." Two red sparks flashed for a moment in the woman's sodden eyes, then flickered out and left them dull and glazed. She tossed her head and raked the coins off the counter with greedy fingers. Her companion watched her enviously. "It's no use," sighed Adrian Singleton. "I don't care to go back. What does it matter? I am quite happy here." "You will write to me if you want anything, won't you?" said Dorian, after a pause. "Perhaps." "Good night, then." "Good night," answered the young man, passing up the steps and wiping his parched mouth with a handkerchief. Dorian walked to the door with a look of pain in his face. As he drew the curtain aside, a hideous laugh broke from the painted lips of the woman who had taken his money. "There goes the devil's bargain!" she hiccoughed, in a hoarse voice. "Curse you!" he answered, "don't call me that." She snapped her fingers. "Prince Charming is what you like to be called, ain't it?" she yelled after him. The drowsy sailor leaped to his feet as she spoke, and looked wildly round. The sound of the shutting of the hall door fell on his ear. He rushed out as if in pursuit. Dorian Gray hurried along the quay through the drizzling rain. His meeting with Adrian Singleton had strangely moved him, and he wondered if the ruin of that young life was really to be laid at his door, as Basil Hallward had said to him with such infamy of insult. He bit his lip, and for a few seconds his eyes grew sad. Yet, after all, what did it matter to him? One's days were too brief to take the burden of another's errors on one's shoulders. Each man lived his own life and paid his own price for living it. The only pity was one had to pay so often for a single fault. One had to pay over and over again, indeed. In her dealings with man, destiny never closed her accounts. There are moments, psychologists tell us, when the passion for sin, or for what the world calls sin, so dominates a nature that every fibre of the body, as every cell of the brain, seems to be instinct with fearful impulses. Men and women at such moments lose the freedom of their will. They move to their terrible end as automatons move. Choice is taken from them, and conscience is either killed, or, if it lives at all, lives but to give rebellion its fascination and disobedience its charm. For all sins, as theologians weary not of reminding us, are sins of disobedience. When that high spirit, that morning star of evil, fell from heaven, it was as a rebel that he fell. Callous, concentrated on evil, with stained mind, and soul hungry for rebellion, Dorian Gray hastened on, quickening his step as he went, but as he darted aside into a dim archway, that had served him often as a short cut to the ill-famed place where he was going, he felt himself suddenly seized from behind, and before he had time to defend himself, he was thrust back against the wall, with a brutal hand round his throat. He struggled madly for life, and by a terrible effort wrenched the tightening fingers away. In a second he heard the click of a revolver, and saw the gleam of a polished barrel, pointing straight at his head, and the dusky form of a short, thick-set man facing him. "What do you want?" he gasped. "Keep quiet," said the man. "If you stir, I shoot you." "You are mad. What have I done to you?" "You wrecked the life of Sibyl Vane," was the answer, "and Sibyl Vane was my sister. She killed herself. I know it. Her death is at your door. I swore I would kill you in return. For years I have sought you. I had no clue, no trace. The two people who could have described you were dead. I knew nothing of you but the pet name she used to call you. I heard it to-night by chance. Make your peace with God, for to-night you are going to die." Dorian Gray grew sick with fear. "I never knew her," he stammered. "I never heard of her. You are mad." "You had better confess your sin, for as sure as I am James Vane, you are going to die." There was a horrible moment. Dorian did not know what to say or do. "Down on your knees!" growled the man. "I give you one minute to make your peace--no more. I go on board to-night for India, and I must do my job first. One minute. That's all." Dorian's arms fell to his side. Paralysed with terror, he did not know what to do. Suddenly a wild hope flashed across his brain. "Stop," he cried. "How long ago is it since your sister died? Quick, tell me!" "Eighteen years," said the man. "Why do you ask me? What do years matter?" "Eighteen years," laughed Dorian Gray, with a touch of triumph in his voice. "Eighteen years! Set me under the lamp and look at my face!" James Vane hesitated for a moment, not understanding what was meant. Then he seized Dorian Gray and dragged him from the archway. Dim and wavering as was the wind-blown light, yet it served to show him the hideous error, as it seemed, into which he had fallen, for the face of the man he had sought to kill had all the bloom of boyhood, all the unstained purity of youth. He seemed little more than a lad of twenty summers, hardly older, if older indeed at all, than his sister had been when they had parted so many years ago. It was obvious that this was not the man who had destroyed her life. He loosened his hold and reeled back. "My God! my God!" he cried, "and I would have murdered you!" Dorian Gray drew a long breath. "You have been on the brink of committing a terrible crime, my man," he said, looking at him sternly. "Let this be a warning to you not to take vengeance into your own hands." "Forgive me, sir," muttered James Vane. "I was deceived. A chance word I heard in that damned den set me on the wrong track." "You had better go home and put that pistol away, or you may get into trouble," said Dorian, turning on his heel and going slowly down the street. James Vane stood on the pavement in horror. He was trembling from head to foot. After a little while, a black shadow that had been creeping along the dripping wall moved out into the light and came close to him with stealthy footsteps. He felt a hand laid on his arm and looked round with a start. It was one of the women who had been drinking at the bar. "Why didn't you kill him?" she hissed out, putting haggard face quite close to his. "I knew you were following him when you rushed out from Daly's. You fool! You should have killed him. He has lots of money, and he's as bad as bad." "He is not the man I am looking for," he answered, "and I want no man's money. I want a man's life. The man whose life I want must be nearly forty now. This one is little more than a boy. Thank God, I have not got his blood upon my hands." The woman gave a bitter laugh. "Little more than a boy!" she sneered. "Why, man, it's nigh on eighteen years since Prince Charming made me what I am." "You lie!" cried James Vane. She raised her hand up to heaven. "Before God I am telling the truth," she cried. "Before God?" "Strike me dumb if it ain't so. He is the worst one that comes here. They say he has sold himself to the devil for a pretty face. It's nigh on eighteen years since I met him. He hasn't changed much since then. I have, though," she added, with a sickly leer. "You swear this?" "I swear it," came in hoarse echo from her flat mouth. "But don't give me away to him," she whined; "I am afraid of him. Let me have some money for my night's lodging." He broke from her with an oath and rushed to the corner of the street, but Dorian Gray had disappeared. When he looked back, the woman had vanished also. CHAPTER 17 A week later Dorian Gray was sitting in the conservatory at Selby Royal, talking to the pretty Duchess of Monmouth, who with her husband, a jaded-looking man of sixty, was amongst his guests. It was tea-time, and the mellow light of the huge, lace-covered lamp that stood on the table lit up the delicate china and hammered silver of the service at which the duchess was presiding. Her white hands were moving daintily among the cups, and her full red lips were smiling at something that Dorian had whispered to her. Lord Henry was lying back in a silk-draped wicker chair, looking at them. On a peach-coloured divan sat Lady Narborough, pretending to listen to the duke's description of the last Brazilian beetle that he had added to his collection. Three young men in elaborate smoking-suits were handing tea-cakes to some of the women. The house-party consisted of twelve people, and there were more expected to arrive on the next day. "What are you two talking about?" said Lord Henry, strolling over to the table and putting his cup down. "I hope Dorian has told you about my plan for rechristening everything, Gladys. It is a delightful idea." "But I don't want to be rechristened, Harry," rejoined the duchess, looking up at him with her wonderful eyes. "I am quite satisfied with my own name, and I am sure Mr. Gray should be satisfied with his." "My dear Gladys, I would not alter either name for the world. They are both perfect. I was thinking chiefly of flowers. Yesterday I cut an orchid, for my button-hole. It was a marvellous spotted thing, as effective as the seven deadly sins. In a thoughtless moment I asked one of the gardeners what it was called. He told me it was a fine specimen of _Robinsoniana_, or something dreadful of that kind. It is a sad truth, but we have lost the faculty of giving lovely names to things. Names are everything. I never quarrel with actions. My one quarrel is with words. That is the reason I hate vulgar realism in literature. The man who could call a spade a spade should be compelled to use one. It is the only thing he is fit for." "Then what should we call you, Harry?" she asked. "His name is Prince Paradox," said Dorian. "I recognize him in a flash," exclaimed the duchess. "I won't hear of it," laughed Lord Henry, sinking into a chair. "From a label there is no escape! I refuse the title." "Royalties may not abdicate," fell as a warning from pretty lips. "You wish me to defend my throne, then?" "Yes." "I give the truths of to-morrow." "I prefer the mistakes of to-day," she answered. "You disarm me, Gladys," he cried, catching the wilfulness of her mood. "Of your shield, Harry, not of your spear." "I never tilt against beauty," he said, with a wave of his hand. "That is your error, Harry, believe me. You value beauty far too much." "How can you say that? I admit that I think that it is better to be beautiful than to be good. But on the other hand, no one is more ready than I am to acknowledge that it is better to be good than to be ugly." "Ugliness is one of the seven deadly sins, then?" cried the duchess. "What becomes of your simile about the orchid?" "Ugliness is one of the seven deadly virtues, Gladys. You, as a good Tory, must not underrate them. Beer, the Bible, and the seven deadly virtues have made our England what she is." "You don't like your country, then?" she asked. "I live in it." "That you may censure it the better." "Would you have me take the verdict of Europe on it?" he inquired. "What do they say of us?" "That Tartuffe has emigrated to England and opened a shop." "Is that yours, Harry?" "I give it to you." "I could not use it. It is too true." "You need not be afraid. Our countrymen never recognize a description." "They are practical." "They are more cunning than practical. When they make up their ledger, they balance stupidity by wealth, and vice by hypocrisy." "Still, we have done great things." "Great things have been thrust on us, Gladys." "We have carried their burden." "Only as far as the Stock Exchange." She shook her head. "I believe in the race," she cried. "It represents the survival of the pushing." "It has development." "Decay fascinates me more." "What of art?" she asked. "It is a malady." "Love?" "An illusion." "Religion?" "The fashionable substitute for belief." "You are a sceptic." "Never! Scepticism is the beginning of faith." "What are you?" "To define is to limit." "Give me a clue." "Threads snap. You would lose your way in the labyrinth." "You bewilder me. Let us talk of some one else." "Our host is a delightful topic. Years ago he was christened Prince Charming." "Ah! don't remind me of that," cried Dorian Gray. "Our host is rather horrid this evening," answered the duchess, colouring. "I believe he thinks that Monmouth married me on purely scientific principles as the best specimen he could find of a modern butterfly." "Well, I hope he won't stick pins into you, Duchess," laughed Dorian. "Oh! my maid does that already, Mr. Gray, when she is annoyed with me." "And what does she get annoyed with you about, Duchess?" "For the most trivial things, Mr. Gray, I assure you. Usually because I come in at ten minutes to nine and tell her that I must be dressed by half-past eight." "How unreasonable of her! You should give her warning." "I daren't, Mr. Gray. Why, she invents hats for me. You remember the one I wore at Lady Hilstone's garden-party? You don't, but it is nice of you to pretend that you do. Well, she made it out of nothing. All good hats are made out of nothing." "Like all good reputations, Gladys," interrupted Lord Henry. "Every effect that one produces gives one an enemy. To be popular one must be a mediocrity." "Not with women," said the duchess, shaking her head; "and women rule the world. I assure you we can't bear mediocrities. We women, as some one says, love with our ears, just as you men love with your eyes, if you ever love at all." "It seems to me that we never do anything else," murmured Dorian. "Ah! then, you never really love, Mr. Gray," answered the duchess with mock sadness. "My dear Gladys!" cried Lord Henry. "How can you say that? Romance lives by repetition, and repetition converts an appetite into an art. Besides, each time that one loves is the only time one has ever loved. Difference of object does not alter singleness of passion. It merely intensifies it. We can have in life but one great experience at best, and the secret of life is to reproduce that experience as often as possible." "Even when one has been wounded by it, Harry?" asked the duchess after a pause. "Especially when one has been wounded by it," answered Lord Henry. The duchess turned and looked at Dorian Gray with a curious expression in her eyes. "What do you say to that, Mr. Gray?" she inquired. Dorian hesitated for a moment. Then he threw his head back and laughed. "I always agree with Harry, Duchess." "Even when he is wrong?" "Harry is never wrong, Duchess." "And does his philosophy make you happy?" "I have never searched for happiness. Who wants happiness? I have searched for pleasure." "And found it, Mr. Gray?" "Often. Too often." The duchess sighed. "I am searching for peace," she said, "and if I don't go and dress, I shall have none this evening." "Let me get you some orchids, Duchess," cried Dorian, starting to his feet and walking down the conservatory. "You are flirting disgracefully with him," said Lord Henry to his cousin. "You had better take care. He is very fascinating." "If he were not, there would be no battle." "Greek meets Greek, then?" "I am on the side of the Trojans. They fought for a woman." "They were defeated." "There are worse things than capture," she answered. "You gallop with a loose rein." "Pace gives life," was the _riposte_. "I shall write it in my diary to-night." "What?" "That a burnt child loves the fire." "I am not even singed. My wings are untouched." "You use them for everything, except flight." "Courage has passed from men to women. It is a new experience for us." "You have a rival." "Who?" He laughed. "Lady Narborough," he whispered. "She perfectly adores him." "You fill me with apprehension. The appeal to antiquity is fatal to us who are romanticists." "Romanticists! You have all the methods of science." "Men have educated us." "But not explained you." "Describe us as a sex," was her challenge. "Sphinxes without secrets." She looked at him, smiling. "How long Mr. Gray is!" she said. "Let us go and help him. I have not yet told him the colour of my frock." "Ah! you must suit your frock to his flowers, Gladys." "That would be a premature surrender." "Romantic art begins with its climax." "I must keep an opportunity for retreat." "In the Parthian manner?" "They found safety in the desert. I could not do that." "Women are not always allowed a choice," he answered, but hardly had he finished the sentence before from the far end of the conservatory came a stifled groan, followed by the dull sound of a heavy fall. Everybody started up. The duchess stood motionless in horror. And with fear in his eyes, Lord Henry rushed through the flapping palms to find Dorian Gray lying face downwards on the tiled floor in a deathlike swoon. He was carried at once into the blue drawing-room and laid upon one of the sofas. After a short time, he came to himself and looked round with a dazed expression. "What has happened?" he asked. "Oh! I remember. Am I safe here, Harry?" He began to tremble. "My dear Dorian," answered Lord Henry, "you merely fainted. That was all. You must have overtired yourself. You had better not come down to dinner. I will take your place." "No, I will come down," he said, struggling to his feet. "I would rather come down. I must not be alone." He went to his room and dressed. There was a wild recklessness of gaiety in his manner as he sat at table, but now and then a thrill of terror ran through him when he remembered that, pressed against the window of the conservatory, like a white handkerchief, he had seen the face of James Vane watching him. CHAPTER 18 The next day he did not leave the house, and, indeed, spent most of the time in his own room, sick with a wild terror of dying, and yet indifferent to life itself. The consciousness of being hunted, snared, tracked down, had begun to dominate him. If the tapestry did but tremble in the wind, he shook. The dead leaves that were blown against the leaded panes seemed to him like his own wasted resolutions and wild regrets. When he closed his eyes, he saw again the sailor's face peering through the mist-stained glass, and horror seemed once more to lay its hand upon his heart. But perhaps it had been only his fancy that had called vengeance out of the night and set the hideous shapes of punishment before him. Actual life was chaos, but there was something terribly logical in the imagination. It was the imagination that set remorse to dog the feet of sin. It was the imagination that made each crime bear its misshapen brood. In the common world of fact the wicked were not punished, nor the good rewarded. Success was given to the strong, failure thrust upon the weak. That was all. Besides, had any stranger been prowling round the house, he would have been seen by the servants or the keepers. Had any foot-marks been found on the flower-beds, the gardeners would have reported it. Yes, it had been merely fancy. Sibyl Vane's brother had not come back to kill him. He had sailed away in his ship to founder in some winter sea. From him, at any rate, he was safe. Why, the man did not know who he was, could not know who he was. The mask of youth had saved him. And yet if it had been merely an illusion, how terrible it was to think that conscience could raise such fearful phantoms, and give them visible form, and make them move before one! What sort of life would his be if, day and night, shadows of his crime were to peer at him from silent corners, to mock him from secret places, to whisper in his ear as he sat at the feast, to wake him with icy fingers as he lay asleep! As the thought crept through his brain, he grew pale with terror, and the air seemed to him to have become suddenly colder. Oh! in what a wild hour of madness he had killed his friend! How ghastly the mere memory of the scene! He saw it all again. Each hideous detail came back to him with added horror. Out of the black cave of time, terrible and swathed in scarlet, rose the image of his sin. When Lord Henry came in at six o'clock, he found him crying as one whose heart will break. It was not till the third day that he ventured to go out. There was something in the clear, pine-scented air of that winter morning that seemed to bring him back his joyousness and his ardour for life. But it was not merely the physical conditions of environment that had caused the change. His own nature had revolted against the excess of anguish that had sought to maim and mar the perfection of its calm. With subtle and finely wrought temperaments it is always so. Their strong passions must either bruise or bend. They either slay the man, or themselves die. Shallow sorrows and shallow loves live on. The loves and sorrows that are great are destroyed by their own plenitude. Besides, he had convinced himself that he had been the victim of a terror-stricken imagination, and looked back now on his fears with something of pity and not a little of contempt. After breakfast, he walked with the duchess for an hour in the garden and then drove across the park to join the shooting-party. The crisp frost lay like salt upon the grass. The sky was an inverted cup of blue metal. A thin film of ice bordered the flat, reed-grown lake. At the corner of the pine-wood he caught sight of Sir Geoffrey Clouston, the duchess's brother, jerking two spent cartridges out of his gun. He jumped from the cart, and having told the groom to take the mare home, made his way towards his guest through the withered bracken and rough undergrowth. "Have you had good sport, Geoffrey?" he asked. "Not very good, Dorian. I think most of the birds have gone to the open. I dare say it will be better after lunch, when we get to new ground." Dorian strolled along by his side. The keen aromatic air, the brown and red lights that glimmered in the wood, the hoarse cries of the beaters ringing out from time to time, and the sharp snaps of the guns that followed, fascinated him and filled him with a sense of delightful freedom. He was dominated by the carelessness of happiness, by the high indifference of joy. Suddenly from a lumpy tussock of old grass some twenty yards in front of them, with black-tipped ears erect and long hinder limbs throwing it forward, started a hare. It bolted for a thicket of alders. Sir Geoffrey put his gun to his shoulder, but there was something in the animal's grace of movement that strangely charmed Dorian Gray, and he cried out at once, "Don't shoot it, Geoffrey. Let it live." "What nonsense, Dorian!" laughed his companion, and as the hare bounded into the thicket, he fired. There were two cries heard, the cry of a hare in pain, which is dreadful, the cry of a man in agony, which is worse. "Good heavens! I have hit a beater!" exclaimed Sir Geoffrey. "What an ass the man was to get in front of the guns! Stop shooting there!" he called out at the top of his voice. "A man is hurt." The head-keeper came running up with a stick in his hand. "Where, sir? Where is he?" he shouted. At the same time, the firing ceased along the line. "Here," answered Sir Geoffrey angrily, hurrying towards the thicket. "Why on earth don't you keep your men back? Spoiled my shooting for the day." Dorian watched them as they plunged into the alder-clump, brushing the lithe swinging branches aside. In a few moments they emerged, dragging a body after them into the sunlight. He turned away in horror. It seemed to him that misfortune followed wherever he went. He heard Sir Geoffrey ask if the man was really dead, and the affirmative answer of the keeper. The wood seemed to him to have become suddenly alive with faces. There was the trampling of myriad feet and the low buzz of voices. A great copper-breasted pheasant came beating through the boughs overhead. After a few moments--that were to him, in his perturbed state, like endless hours of pain--he felt a hand laid on his shoulder. He started and looked round. "Dorian," said Lord Henry, "I had better tell them that the shooting is stopped for to-day. It would not look well to go on." "I wish it were stopped for ever, Harry," he answered bitterly. "The whole thing is hideous and cruel. Is the man ...?" He could not finish the sentence. "I am afraid so," rejoined Lord Henry. "He got the whole charge of shot in his chest. He must have died almost instantaneously. Come; let us go home." They walked side by side in the direction of the avenue for nearly fifty yards without speaking. Then Dorian looked at Lord Henry and said, with a heavy sigh, "It is a bad omen, Harry, a very bad omen." "What is?" asked Lord Henry. "Oh! this accident, I suppose. My dear fellow, it can't be helped. It was the man's own fault. Why did he get in front of the guns? Besides, it is nothing to us. It is rather awkward for Geoffrey, of course. It does not do to pepper beaters. It makes people think that one is a wild shot. And Geoffrey is not; he shoots very straight. But there is no use talking about the matter." Dorian shook his head. "It is a bad omen, Harry. I feel as if something horrible were going to happen to some of us. To myself, perhaps," he added, passing his hand over his eyes, with a gesture of pain. The elder man laughed. "The only horrible thing in the world is _ennui_, Dorian. That is the one sin for which there is no forgiveness. But we are not likely to suffer from it unless these fellows keep chattering about this thing at dinner. I must tell them that the subject is to be tabooed. As for omens, there is no such thing as an omen. Destiny does not send us heralds. She is too wise or too cruel for that. Besides, what on earth could happen to you, Dorian? You have everything in the world that a man can want. There is no one who would not be delighted to change places with you." "There is no one with whom I would not change places, Harry. Don't laugh like that. I am telling you the truth. The wretched peasant who has just died is better off than I am. I have no terror of death. It is the coming of death that terrifies me. Its monstrous wings seem to wheel in the leaden air around me. Good heavens! don't you see a man moving behind the trees there, watching me, waiting for me?" Lord Henry looked in the direction in which the trembling gloved hand was pointing. "Yes," he said, smiling, "I see the gardener waiting for you. I suppose he wants to ask you what flowers you wish to have on the table to-night. How absurdly nervous you are, my dear fellow! You must come and see my doctor, when we get back to town." Dorian heaved a sigh of relief as he saw the gardener approaching. The man touched his hat, glanced for a moment at Lord Henry in a hesitating manner, and then produced a letter, which he handed to his master. "Her Grace told me to wait for an answer," he murmured. Dorian put the letter into his pocket. "Tell her Grace that I am coming in," he said, coldly. The man turned round and went rapidly in the direction of the house. "How fond women are of doing dangerous things!" laughed Lord Henry. "It is one of the qualities in them that I admire most. A woman will flirt with anybody in the world as long as other people are looking on." "How fond you are of saying dangerous things, Harry! In the present instance, you are quite astray. I like the duchess very much, but I don't love her." "And the duchess loves you very much, but she likes you less, so you are excellently matched." "You are talking scandal, Harry, and there is never any basis for scandal." "The basis of every scandal is an immoral certainty," said Lord Henry, lighting a cigarette. "You would sacrifice anybody, Harry, for the sake of an epigram." "The world goes to the altar of its own accord," was the answer. "I wish I could love," cried Dorian Gray with a deep note of pathos in his voice. "But I seem to have lost the passion and forgotten the desire. I am too much concentrated on myself. My own personality has become a burden to me. I want to escape, to go away, to forget. It was silly of me to come down here at all. I think I shall send a wire to Harvey to have the yacht got ready. On a yacht one is safe." "Safe from what, Dorian? You are in some trouble. Why not tell me what it is? You know I would help you." "I can't tell you, Harry," he answered sadly. "And I dare say it is only a fancy of mine. This unfortunate accident has upset me. I have a horrible presentiment that something of the kind may happen to me." "What nonsense!" "I hope it is, but I can't help feeling it. Ah! here is the duchess, looking like Artemis in a tailor-made gown. You see we have come back, Duchess." "I have heard all about it, Mr. Gray," she answered. "Poor Geoffrey is terribly upset. And it seems that you asked him not to shoot the hare. How curious!" "Yes, it was very curious. I don't know what made me say it. Some whim, I suppose. It looked the loveliest of little live things. But I am sorry they told you about the man. It is a hideous subject." "It is an annoying subject," broke in Lord Henry. "It has no psychological value at all. Now if Geoffrey had done the thing on purpose, how interesting he would be! I should like to know some one who had committed a real murder." "How horrid of you, Harry!" cried the duchess. "Isn't it, Mr. Gray? Harry, Mr. Gray is ill again. He is going to faint." Dorian drew himself up with an effort and smiled. "It is nothing, Duchess," he murmured; "my nerves are dreadfully out of order. That is all. I am afraid I walked too far this morning. I didn't hear what Harry said. Was it very bad? You must tell me some other time. I think I must go and lie down. You will excuse me, won't you?" They had reached the great flight of steps that led from the conservatory on to the terrace. As the glass door closed behind Dorian, Lord Henry turned and looked at the duchess with his slumberous eyes. "Are you very much in love with him?" he asked. She did not answer for some time, but stood gazing at the landscape. "I wish I knew," she said at last. He shook his head. "Knowledge would be fatal. It is the uncertainty that charms one. A mist makes things wonderful." "One may lose one's way." "All ways end at the same point, my dear Gladys." "What is that?" "Disillusion." "It was my _debut_ in life," she sighed. "It came to you crowned." "I am tired of strawberry leaves." "They become you." "Only in public." "You would miss them," said Lord Henry. "I will not part with a petal." "Monmouth has ears." "Old age is dull of hearing." "Has he never been jealous?" "I wish he had been." He glanced about as if in search of something. "What are you looking for?" she inquired. "The button from your foil," he answered. "You have dropped it." She laughed. "I have still the mask." "It makes your eyes lovelier," was his reply. She laughed again. Her teeth showed like white seeds in a scarlet fruit. Upstairs, in his own room, Dorian Gray was lying on a sofa, with terror in every tingling fibre of his body. Life had suddenly become too hideous a burden for him to bear. The dreadful death of the unlucky beater, shot in the thicket like a wild animal, had seemed to him to pre-figure death for himself also. He had nearly swooned at what Lord Henry had said in a chance mood of cynical jesting. At five o'clock he rang his bell for his servant and gave him orders to pack his things for the night-express to town, and to have the brougham at the door by eight-thirty. He was determined not to sleep another night at Selby Royal. It was an ill-omened place. Death walked there in the sunlight. The grass of the forest had been spotted with blood. Then he wrote a note to Lord Henry, telling him that he was going up to town to consult his doctor and asking him to entertain his guests in his absence. As he was putting it into the envelope, a knock came to the door, and his valet informed him that the head-keeper wished to see him. He frowned and bit his lip. "Send him in," he muttered, after some moments' hesitation. As soon as the man entered, Dorian pulled his chequebook out of a drawer and spread it out before him. "I suppose you have come about the unfortunate accident of this morning, Thornton?" he said, taking up a pen. "Yes, sir," answered the gamekeeper. "Was the poor fellow married? Had he any people dependent on him?" asked Dorian, looking bored. "If so, I should not like them to be left in want, and will send them any sum of money you may think necessary." "We don't know who he is, sir. That is what I took the liberty of coming to you about." "Don't know who he is?" said Dorian, listlessly. "What do you mean? Wasn't he one of your men?" "No, sir. Never saw him before. Seems like a sailor, sir." The pen dropped from Dorian Gray's hand, and he felt as if his heart had suddenly stopped beating. "A sailor?" he cried out. "Did you say a sailor?" "Yes, sir. He looks as if he had been a sort of sailor; tattooed on both arms, and that kind of thing." "Was there anything found on him?" said Dorian, leaning forward and looking at the man with startled eyes. "Anything that would tell his name?" "Some money, sir--not much, and a six-shooter. There was no name of any kind. A decent-looking man, sir, but rough-like. A sort of sailor we think." Dorian started to his feet. A terrible hope fluttered past him. He clutched at it madly. "Where is the body?" he exclaimed. "Quick! I must see it at once." "It is in an empty stable in the Home Farm, sir. The folk don't like to have that sort of thing in their houses. They say a corpse brings bad luck." "The Home Farm! Go there at once and meet me. Tell one of the grooms to bring my horse round. No. Never mind. I'll go to the stables myself. It will save time." In less than a quarter of an hour, Dorian Gray was galloping down the long avenue as hard as he could go. The trees seemed to sweep past him in spectral procession, and wild shadows to fling themselves across his path. Once the mare swerved at a white gate-post and nearly threw him. He lashed her across the neck with his crop. She cleft the dusky air like an arrow. The stones flew from her hoofs. At last he reached the Home Farm. Two men were loitering in the yard. He leaped from the saddle and threw the reins to one of them. In the farthest stable a light was glimmering. Something seemed to tell him that the body was there, and he hurried to the door and put his hand upon the latch. There he paused for a moment, feeling that he was on the brink of a discovery that would either make or mar his life. Then he thrust the door open and entered. On a heap of sacking in the far corner was lying the dead body of a man dressed in a coarse shirt and a pair of blue trousers. A spotted handkerchief had been placed over the face. A coarse candle, stuck in a bottle, sputtered beside it. Dorian Gray shuddered. He felt that his could not be the hand to take the handkerchief away, and called out to one of the farm-servants to come to him. "Take that thing off the face. I wish to see it," he said, clutching at the door-post for support. When the farm-servant had done so, he stepped forward. A cry of joy broke from his lips. The man who had been shot in the thicket was James Vane. He stood there for some minutes looking at the dead body. As he rode home, his eyes were full of tears, for he knew he was safe. CHAPTER 19 "There is no use your telling me that you are going to be good," cried Lord Henry, dipping his white fingers into a red copper bowl filled with rose-water. "You are quite perfect. Pray, don't change." Dorian Gray shook his head. "No, Harry, I have done too many dreadful things in my life. I am not going to do any more. I began my good actions yesterday." "Where were you yesterday?" "In the country, Harry. I was staying at a little inn by myself." "My dear boy," said Lord Henry, smiling, "anybody can be good in the country. There are no temptations there. That is the reason why people who live out of town are so absolutely uncivilized. Civilization is not by any means an easy thing to attain to. There are only two ways by which man can reach it. One is by being cultured, the other by being corrupt. Country people have no opportunity of being either, so they stagnate." "Culture and corruption," echoed Dorian. "I have known something of both. It seems terrible to me now that they should ever be found together. For I have a new ideal, Harry. I am going to alter. I think I have altered." "You have not yet told me what your good action was. Or did you say you had done more than one?" asked his companion as he spilled into his plate a little crimson pyramid of seeded strawberries and, through a perforated, shell-shaped spoon, snowed white sugar upon them. "I can tell you, Harry. It is not a story I could tell to any one else. I spared somebody. It sounds vain, but you understand what I mean. She was quite beautiful and wonderfully like Sibyl Vane. I think it was that which first attracted me to her. You remember Sibyl, don't you? How long ago that seems! Well, Hetty was not one of our own class, of course. She was simply a girl in a village. But I really loved her. I am quite sure that I loved her. All during this wonderful May that we have been having, I used to run down and see her two or three times a week. Yesterday she met me in a little orchard. The apple-blossoms kept tumbling down on her hair, and she was laughing. We were to have gone away together this morning at dawn. Suddenly I determined to leave her as flowerlike as I had found her." "I should think the novelty of the emotion must have given you a thrill of real pleasure, Dorian," interrupted Lord Henry. "But I can finish your idyll for you. You gave her good advice and broke her heart. That was the beginning of your reformation." "Harry, you are horrible! You mustn't say these dreadful things. Hetty's heart is not broken. Of course, she cried and all that. But there is no disgrace upon her. She can live, like Perdita, in her garden of mint and marigold." "And weep over a faithless Florizel," said Lord Henry, laughing, as he leaned back in his chair. "My dear Dorian, you have the most curiously boyish moods. Do you think this girl will ever be really content now with any one of her own rank? I suppose she will be married some day to a rough carter or a grinning ploughman. Well, the fact of having met you, and loved you, will teach her to despise her husband, and she will be wretched. From a moral point of view, I cannot say that I think much of your great renunciation. Even as a beginning, it is poor. Besides, how do you know that Hetty isn't floating at the present moment in some starlit mill-pond, with lovely water-lilies round her, like Ophelia?" "I can't bear this, Harry! You mock at everything, and then suggest the most serious tragedies. I am sorry I told you now. I don't care what you say to me. I know I was right in acting as I did. Poor Hetty! As I rode past the farm this morning, I saw her white face at the window, like a spray of jasmine. Don't let us talk about it any more, and don't try to persuade me that the first good action I have done for years, the first little bit of self-sacrifice I have ever known, is really a sort of sin. I want to be better. I am going to be better. Tell me something about yourself. What is going on in town? I have not been to the club for days." "The people are still discussing poor Basil's disappearance." "I should have thought they had got tired of that by this time," said Dorian, pouring himself out some wine and frowning slightly. "My dear boy, they have only been talking about it for six weeks, and the British public are really not equal to the mental strain of having more than one topic every three months. They have been very fortunate lately, however. They have had my own divorce-case and Alan Campbell's suicide. Now they have got the mysterious disappearance of an artist. Scotland Yard still insists that the man in the grey ulster who left for Paris by the midnight train on the ninth of November was poor Basil, and the French police declare that Basil never arrived in Paris at all. I suppose in about a fortnight we shall be told that he has been seen in San Francisco. It is an odd thing, but every one who disappears is said to be seen at San Francisco. It must be a delightful city, and possess all the attractions of the next world." "What do you think has happened to Basil?" asked Dorian, holding up his Burgundy against the light and wondering how it was that he could discuss the matter so calmly. "I have not the slightest idea. If Basil chooses to hide himself, it is no business of mine. If he is dead, I don't want to think about him. Death is the only thing that ever terrifies me. I hate it." "Why?" said the younger man wearily. "Because," said Lord Henry, passing beneath his nostrils the gilt trellis of an open vinaigrette box, "one can survive everything nowadays except that. Death and vulgarity are the only two facts in the nineteenth century that one cannot explain away. Let us have our coffee in the music-room, Dorian. You must play Chopin to me. The man with whom my wife ran away played Chopin exquisitely. Poor Victoria! I was very fond of her. The house is rather lonely without her. Of course, married life is merely a habit, a bad habit. But then one regrets the loss even of one's worst habits. Perhaps one regrets them the most. They are such an essential part of one's personality." Dorian said nothing, but rose from the table, and passing into the next room, sat down to the piano and let his fingers stray across the white and black ivory of the keys. After the coffee had been brought in, he stopped, and looking over at Lord Henry, said, "Harry, did it ever occur to you that Basil was murdered?" Lord Henry yawned. "Basil was very popular, and always wore a Waterbury watch. Why should he have been murdered? He was not clever enough to have enemies. Of course, he had a wonderful genius for painting. But a man can paint like Velasquez and yet be as dull as possible. Basil was really rather dull. He only interested me once, and that was when he told me, years ago, that he had a wild adoration for you and that you were the dominant motive of his art." "I was very fond of Basil," said Dorian with a note of sadness in his voice. "But don't people say that he was murdered?" "Oh, some of the papers do. It does not seem to me to be at all probable. I know there are dreadful places in Paris, but Basil was not the sort of man to have gone to them. He had no curiosity. It was his chief defect." "What would you say, Harry, if I told you that I had murdered Basil?" said the younger man. He watched him intently after he had spoken. "I would say, my dear fellow, that you were posing for a character that doesn't suit you. All crime is vulgar, just as all vulgarity is crime. It is not in you, Dorian, to commit a murder. I am sorry if I hurt your vanity by saying so, but I assure you it is true. Crime belongs exclusively to the lower orders. I don't blame them in the smallest degree. I should fancy that crime was to them what art is to us, simply a method of procuring extraordinary sensations." "A method of procuring sensations? Do you think, then, that a man who has once committed a murder could possibly do the same crime again? Don't tell me that." "Oh! anything becomes a pleasure if one does it too often," cried Lord Henry, laughing. "That is one of the most important secrets of life. I should fancy, however, that murder is always a mistake. One should never do anything that one cannot talk about after dinner. But let us pass from poor Basil. I wish I could believe that he had come to such a really romantic end as you suggest, but I can't. I dare say he fell into the Seine off an omnibus and that the conductor hushed up the scandal. Yes: I should fancy that was his end. I see him lying now on his back under those dull-green waters, with the heavy barges floating over him and long weeds catching in his hair. Do you know, I don't think he would have done much more good work. During the last ten years his painting had gone off very much." Dorian heaved a sigh, and Lord Henry strolled across the room and began to stroke the head of a curious Java parrot, a large, grey-plumaged bird with pink crest and tail, that was balancing itself upon a bamboo perch. As his pointed fingers touched it, it dropped the white scurf of crinkled lids over black, glasslike eyes and began to sway backwards and forwards. "Yes," he continued, turning round and taking his handkerchief out of his pocket; "his painting had quite gone off. It seemed to me to have lost something. It had lost an ideal. When you and he ceased to be great friends, he ceased to be a great artist. What was it separated you? I suppose he bored you. If so, he never forgave you. It's a habit bores have. By the way, what has become of that wonderful portrait he did of you? I don't think I have ever seen it since he finished it. Oh! I remember your telling me years ago that you had sent it down to Selby, and that it had got mislaid or stolen on the way. You never got it back? What a pity! it was really a masterpiece. I remember I wanted to buy it. I wish I had now. It belonged to Basil's best period. Since then, his work was that curious mixture of bad painting and good intentions that always entitles a man to be called a representative British artist. Did you advertise for it? You should." "I forget," said Dorian. "I suppose I did. But I never really liked it. I am sorry I sat for it. The memory of the thing is hateful to me. Why do you talk of it? It used to remind me of those curious lines in some play--Hamlet, I think--how do they run?-- "Like the painting of a sorrow, A face without a heart." Yes: that is what it was like." Lord Henry laughed. "If a man treats life artistically, his brain is his heart," he answered, sinking into an arm-chair. Dorian Gray shook his head and struck some soft chords on the piano. "'Like the painting of a sorrow,'" he repeated, "'a face without a heart.'" The elder man lay back and looked at him with half-closed eyes. "By the way, Dorian," he said after a pause, "'what does it profit a man if he gain the whole world and lose--how does the quotation run?--his own soul'?" The music jarred, and Dorian Gray started and stared at his friend. "Why do you ask me that, Harry?" "My dear fellow," said Lord Henry, elevating his eyebrows in surprise, "I asked you because I thought you might be able to give me an answer. That is all. I was going through the park last Sunday, and close by the Marble Arch there stood a little crowd of shabby-looking people listening to some vulgar street-preacher. As I passed by, I heard the man yelling out that question to his audience. It struck me as being rather dramatic. London is very rich in curious effects of that kind. A wet Sunday, an uncouth Christian in a mackintosh, a ring of sickly white faces under a broken roof of dripping umbrellas, and a wonderful phrase flung into the air by shrill hysterical lips--it was really very good in its way, quite a suggestion. I thought of telling the prophet that art had a soul, but that man had not. I am afraid, however, he would not have understood me." "Don't, Harry. The soul is a terrible reality. It can be bought, and sold, and bartered away. It can be poisoned, or made perfect. There is a soul in each one of us. I know it." "Do you feel quite sure of that, Dorian?" "Quite sure." "Ah! then it must be an illusion. The things one feels absolutely certain about are never true. That is the fatality of faith, and the lesson of romance. How grave you are! Don't be so serious. What have you or I to do with the superstitions of our age? No: we have given up our belief in the soul. Play me something. Play me a nocturne, Dorian, and, as you play, tell me, in a low voice, how you have kept your youth. You must have some secret. I am only ten years older than you are, and I am wrinkled, and worn, and yellow. You are really wonderful, Dorian. You have never looked more charming than you do to-night. You remind me of the day I saw you first. You were rather cheeky, very shy, and absolutely extraordinary. You have changed, of course, but not in appearance. I wish you would tell me your secret. To get back my youth I would do anything in the world, except take exercise, get up early, or be respectable. Youth! There is nothing like it. It's absurd to talk of the ignorance of youth. The only people to whose opinions I listen now with any respect are people much younger than myself. They seem in front of me. Life has revealed to them her latest wonder. As for the aged, I always contradict the aged. I do it on principle. If you ask them their opinion on something that happened yesterday, they solemnly give you the opinions current in 1820, when people wore high stocks, believed in everything, and knew absolutely nothing. How lovely that thing you are playing is! I wonder, did Chopin write it at Majorca, with the sea weeping round the villa and the salt spray dashing against the panes? It is marvellously romantic. What a blessing it is that there is one art left to us that is not imitative! Don't stop. I want music to-night. It seems to me that you are the young Apollo and that I am Marsyas listening to you. I have sorrows, Dorian, of my own, that even you know nothing of. The tragedy of old age is not that one is old, but that one is young. I am amazed sometimes at my own sincerity. Ah, Dorian, how happy you are! What an exquisite life you have had! You have drunk deeply of everything. You have crushed the grapes against your palate. Nothing has been hidden from you. And it has all been to you no more than the sound of music. It has not marred you. You are still the same." "I am not the same, Harry." "Yes, you are the same. I wonder what the rest of your life will be. Don't spoil it by renunciations. At present you are a perfect type. Don't make yourself incomplete. You are quite flawless now. You need not shake your head: you know you are. Besides, Dorian, don't deceive yourself. Life is not governed by will or intention. Life is a question of nerves, and fibres, and slowly built-up cells in which thought hides itself and passion has its dreams. You may fancy yourself safe and think yourself strong. But a chance tone of colour in a room or a morning sky, a particular perfume that you had once loved and that brings subtle memories with it, a line from a forgotten poem that you had come across again, a cadence from a piece of music that you had ceased to play--I tell you, Dorian, that it is on things like these that our lives depend. Browning writes about that somewhere; but our own senses will imagine them for us. There are moments when the odour of _lilas blanc_ passes suddenly across me, and I have to live the strangest month of my life over again. I wish I could change places with you, Dorian. The world has cried out against us both, but it has always worshipped you. It always will worship you. You are the type of what the age is searching for, and what it is afraid it has found. I am so glad that you have never done anything, never carved a statue, or painted a picture, or produced anything outside of yourself! Life has been your art. You have set yourself to music. Your days are your sonnets." Dorian rose up from the piano and passed his hand through his hair. "Yes, life has been exquisite," he murmured, "but I am not going to have the same life, Harry. And you must not say these extravagant things to me. You don't know everything about me. I think that if you did, even you would turn from me. You laugh. Don't laugh." "Why have you stopped playing, Dorian? Go back and give me the nocturne over again. Look at that great, honey-coloured moon that hangs in the dusky air. She is waiting for you to charm her, and if you play she will come closer to the earth. You won't? Let us go to the club, then. It has been a charming evening, and we must end it charmingly. There is some one at White's who wants immensely to know you--young Lord Poole, Bournemouth's eldest son. He has already copied your neckties, and has begged me to introduce him to you. He is quite delightful and rather reminds me of you." "I hope not," said Dorian with a sad look in his eyes. "But I am tired to-night, Harry. I shan't go to the club. It is nearly eleven, and I want to go to bed early." "Do stay. You have never played so well as to-night. There was something in your touch that was wonderful. It had more expression than I had ever heard from it before." "It is because I am going to be good," he answered, smiling. "I am a little changed already." "You cannot change to me, Dorian," said Lord Henry. "You and I will always be friends." "Yet you poisoned me with a book once. I should not forgive that. Harry, promise me that you will never lend that book to any one. It does harm." "My dear boy, you are really beginning to moralize. You will soon be going about like the converted, and the revivalist, warning people against all the sins of which you have grown tired. You are much too delightful to do that. Besides, it is no use. You and I are what we are, and will be what we will be. As for being poisoned by a book, there is no such thing as that. Art has no influence upon action. It annihilates the desire to act. It is superbly sterile. The books that the world calls immoral are books that show the world its own shame. That is all. But we won't discuss literature. Come round to-morrow. I am going to ride at eleven. We might go together, and I will take you to lunch afterwards with Lady Branksome. She is a charming woman, and wants to consult you about some tapestries she is thinking of buying. Mind you come. Or shall we lunch with our little duchess? She says she never sees you now. Perhaps you are tired of Gladys? I thought you would be. Her clever tongue gets on one's nerves. Well, in any case, be here at eleven." "Must I really come, Harry?" "Certainly. The park is quite lovely now. I don't think there have been such lilacs since the year I met you." "Very well. I shall be here at eleven," said Dorian. "Good night, Harry." As he reached the door, he hesitated for a moment, as if he had something more to say. Then he sighed and went out. CHAPTER 20 It was a lovely night, so warm that he threw his coat over his arm and did not even put his silk scarf round his throat. As he strolled home, smoking his cigarette, two young men in evening dress passed him. He heard one of them whisper to the other, "That is Dorian Gray." He remembered how pleased he used to be when he was pointed out, or stared at, or talked about. He was tired of hearing his own name now. Half the charm of the little village where he had been so often lately was that no one knew who he was. He had often told the girl whom he had lured to love him that he was poor, and she had believed him. He had told her once that he was wicked, and she had laughed at him and answered that wicked people were always very old and very ugly. What a laugh she had!--just like a thrush singing. And how pretty she had been in her cotton dresses and her large hats! She knew nothing, but she had everything that he had lost. When he reached home, he found his servant waiting up for him. He sent him to bed, and threw himself down on the sofa in the library, and began to think over some of the things that Lord Henry had said to him. Was it really true that one could never change? He felt a wild longing for the unstained purity of his boyhood--his rose-white boyhood, as Lord Henry had once called it. He knew that he had tarnished himself, filled his mind with corruption and given horror to his fancy; that he had been an evil influence to others, and had experienced a terrible joy in being so; and that of the lives that had crossed his own, it had been the fairest and the most full of promise that he had brought to shame. But was it all irretrievable? Was there no hope for him? Ah! in what a monstrous moment of pride and passion he had prayed that the portrait should bear the burden of his days, and he keep the unsullied splendour of eternal youth! All his failure had been due to that. Better for him that each sin of his life had brought its sure swift penalty along with it. There was purification in punishment. Not "Forgive us our sins" but "Smite us for our iniquities" should be the prayer of man to a most just God. The curiously carved mirror that Lord Henry had given to him, so many years ago now, was standing on the table, and the white-limbed Cupids laughed round it as of old. He took it up, as he had done on that night of horror when he had first noted the change in the fatal picture, and with wild, tear-dimmed eyes looked into its polished shield. Once, some one who had terribly loved him had written to him a mad letter, ending with these idolatrous words: "The world is changed because you are made of ivory and gold. The curves of your lips rewrite history." The phrases came back to his memory, and he repeated them over and over to himself. Then he loathed his own beauty, and flinging the mirror on the floor, crushed it into silver splinters beneath his heel. It was his beauty that had ruined him, his beauty and the youth that he had prayed for. But for those two things, his life might have been free from stain. His beauty had been to him but a mask, his youth but a mockery. What was youth at best? A green, an unripe time, a time of shallow moods, and sickly thoughts. Why had he worn its livery? Youth had spoiled him. It was better not to think of the past. Nothing could alter that. It was of himself, and of his own future, that he had to think. James Vane was hidden in a nameless grave in Selby churchyard. Alan Campbell had shot himself one night in his laboratory, but had not revealed the secret that he had been forced to know. The excitement, such as it was, over Basil Hallward's disappearance would soon pass away. It was already waning. He was perfectly safe there. Nor, indeed, was it the death of Basil Hallward that weighed most upon his mind. It was the living death of his own soul that troubled him. Basil had painted the portrait that had marred his life. He could not forgive him that. It was the portrait that had done everything. Basil had said things to him that were unbearable, and that he had yet borne with patience. The murder had been simply the madness of a moment. As for Alan Campbell, his suicide had been his own act. He had chosen to do it. It was nothing to him. A new life! That was what he wanted. That was what he was waiting for. Surely he had begun it already. He had spared one innocent thing, at any rate. He would never again tempt innocence. He would be good. As he thought of Hetty Merton, he began to wonder if the portrait in the locked room had changed. Surely it was not still so horrible as it had been? Perhaps if his life became pure, he would be able to expel every sign of evil passion from the face. Perhaps the signs of evil had already gone away. He would go and look. He took the lamp from the table and crept upstairs. As he unbarred the door, a smile of joy flitted across his strangely young-looking face and lingered for a moment about his lips. Yes, he would be good, and the hideous thing that he had hidden away would no longer be a terror to him. He felt as if the load had been lifted from him already. He went in quietly, locking the door behind him, as was his custom, and dragged the purple hanging from the portrait. A cry of pain and indignation broke from him. He could see no change, save that in the eyes there was a look of cunning and in the mouth the curved wrinkle of the hypocrite. The thing was still loathsome--more loathsome, if possible, than before--and the scarlet dew that spotted the hand seemed brighter, and more like blood newly spilled. Then he trembled. Had it been merely vanity that had made him do his one good deed? Or the desire for a new sensation, as Lord Henry had hinted, with his mocking laugh? Or that passion to act a part that sometimes makes us do things finer than we are ourselves? Or, perhaps, all these? And why was the red stain larger than it had been? It seemed to have crept like a horrible disease over the wrinkled fingers. There was blood on the painted feet, as though the thing had dripped--blood even on the hand that had not held the knife. Confess? Did it mean that he was to confess? To give himself up and be put to death? He laughed. He felt that the idea was monstrous. Besides, even if he did confess, who would believe him? There was no trace of the murdered man anywhere. Everything belonging to him had been destroyed. He himself had burned what had been below-stairs. The world would simply say that he was mad. They would shut him up if he persisted in his story.... Yet it was his duty to confess, to suffer public shame, and to make public atonement. There was a God who called upon men to tell their sins to earth as well as to heaven. Nothing that he could do would cleanse him till he had told his own sin. His sin? He shrugged his shoulders. The death of Basil Hallward seemed very little to him. He was thinking of Hetty Merton. For it was an unjust mirror, this mirror of his soul that he was looking at. Vanity? Curiosity? Hypocrisy? Had there been nothing more in his renunciation than that? There had been something more. At least he thought so. But who could tell? ... No. There had been nothing more. Through vanity he had spared her. In hypocrisy he had worn the mask of goodness. For curiosity's sake he had tried the denial of self. He recognized that now. But this murder--was it to dog him all his life? Was he always to be burdened by his past? Was he really to confess? Never. There was only one bit of evidence left against him. The picture itself--that was evidence. He would destroy it. Why had he kept it so long? Once it had given him pleasure to watch it changing and growing old. Of late he had felt no such pleasure. It had kept him awake at night. When he had been away, he had been filled with terror lest other eyes should look upon it. It had brought melancholy across his passions. Its mere memory had marred many moments of joy. It had been like conscience to him. Yes, it had been conscience. He would destroy it. He looked round and saw the knife that had stabbed Basil Hallward. He had cleaned it many times, till there was no stain left upon it. It was bright, and glistened. As it had killed the painter, so it would kill the painter's work, and all that that meant. It would kill the past, and when that was dead, he would be free. It would kill this monstrous soul-life, and without its hideous warnings, he would be at peace. He seized the thing, and stabbed the picture with it. There was a cry heard, and a crash. The cry was so horrible in its agony that the frightened servants woke and crept out of their rooms. Two gentlemen, who were passing in the square below, stopped and looked up at the great house. They walked on till they met a policeman and brought him back. The man rang the bell several times, but there was no answer. Except for a light in one of the top windows, the house was all dark. After a time, he went away and stood in an adjoining portico and watched. "Whose house is that, Constable?" asked the elder of the two gentlemen. "Mr. Dorian Gray's, sir," answered the policeman. They looked at each other, as they walked away, and sneered. One of them was Sir Henry Ashton's uncle. Inside, in the servants' part of the house, the half-clad domestics were talking in low whispers to each other. Old Mrs. Leaf was crying and wringing her hands. Francis was as pale as death. After about a quarter of an hour, he got the coachman and one of the footmen and crept upstairs. They knocked, but there was no reply. They called out. Everything was still. Finally, after vainly trying to force the door, they got on the roof and dropped down on to the balcony. The windows yielded easily--their bolts were old. When they entered, they found hanging upon the wall a splendid portrait of their master as they had last seen him, in all the wonder of his exquisite youth and beauty. Lying on the floor was a dead man, in evening dress, with a knife in his heart. He was withered, wrinkled, and loathsome of visage. It was not till they had examined the rings that they recognized who it was. End of Project Gutenberg's The Picture of Dorian Gray, by Oscar Wilde *** END OF THIS PROJECT GUTENBERG EBOOK THE PICTURE OF DORIAN GRAY *** ***** This file should be named 174.txt or 174.zip ***** This and all associated files of various formats will be found in: http://www.gutenberg.org/1/7/174/ Produced by Judith Boss. HTML version by Al Haines. Updated editions will replace the previous one--the old editions will be renamed. Creating the works from public domain print editions means that no one owns a United States copyright in these works, so the Foundation (and you!) can copy and distribute it in the United States without permission and without paying copyright royalties. Special rules, set forth in the General Terms of Use part of this license, apply to copying and distributing Project Gutenberg-tm electronic works to protect the PROJECT GUTENBERG-tm concept and trademark. Project Gutenberg is a registered trademark, and may not be used if you charge for the eBooks, unless you receive specific permission. If you do not charge anything for copies of this eBook, complying with the rules is very easy. You may use this eBook for nearly any purpose such as creation of derivative works, reports, performances and research. They may be modified and printed and given away--you may do practically ANYTHING with public domain eBooks. Redistribution is subject to the trademark license, especially commercial redistribution. *** START: FULL LICENSE *** THE FULL PROJECT GUTENBERG LICENSE PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK To protect the Project Gutenberg-tm mission of promoting the free distribution of electronic works, by using or distributing this work (or any other work associated in any way with the phrase "Project Gutenberg"), you agree to comply with all the terms of the Full Project Gutenberg-tm License (available with this file or online at http://gutenberg.net/license). Section 1. General Terms of Use and Redistributing Project Gutenberg-tm electronic works 1.A. By reading or using any part of this Project Gutenberg-tm electronic work, you indicate that you have read, understand, agree to and accept all the terms of this license and intellectual property (trademark/copyright) agreement. If you do not agree to abide by all the terms of this agreement, you must cease using and return or destroy all copies of Project Gutenberg-tm electronic works in your possession. If you paid a fee for obtaining a copy of or access to a Project Gutenberg-tm electronic work and you do not agree to be bound by the terms of this agreement, you may obtain a refund from the person or entity to whom you paid the fee as set forth in paragraph 1.E.8. 1.B. "Project Gutenberg" is a registered trademark. It may only be used on or associated in any way with an electronic work by people who agree to be bound by the terms of this agreement. There are a few things that you can do with most Project Gutenberg-tm electronic works even without complying with the full terms of this agreement. See paragraph 1.C below. There are a lot of things you can do with Project Gutenberg-tm electronic works if you follow the terms of this agreement and help preserve free future access to Project Gutenberg-tm electronic works. See paragraph 1.E below. 1.C. The Project Gutenberg Literary Archive Foundation ("the Foundation" or PGLAF), owns a compilation copyright in the collection of Project Gutenberg-tm electronic works. Nearly all the individual works in the collection are in the public domain in the United States. If an individual work is in the public domain in the United States and you are located in the United States, we do not claim a right to prevent you from copying, distributing, performing, displaying or creating derivative works based on the work as long as all references to Project Gutenberg are removed. Of course, we hope that you will support the Project Gutenberg-tm mission of promoting free access to electronic works by freely sharing Project Gutenberg-tm works in compliance with the terms of this agreement for keeping the Project Gutenberg-tm name associated with the work. You can easily comply with the terms of this agreement by keeping this work in the same format with its attached full Project Gutenberg-tm License when you share it without charge with others. 1.D. The copyright laws of the place where you are located also govern what you can do with this work. Copyright laws in most countries are in a constant state of change. If you are outside the United States, check the laws of your country in addition to the terms of this agreement before downloading, copying, displaying, performing, distributing or creating derivative works based on this work or any other Project Gutenberg-tm work. The Foundation makes no representations concerning the copyright status of any work in any country outside the United States. 1.E. Unless you have removed all references to Project Gutenberg: 1.E.1. The following sentence, with active links to, or other immediate access to, the full Project Gutenberg-tm License must appear prominently whenever any copy of a Project Gutenberg-tm work (any work on which the phrase "Project Gutenberg" appears, or with which the phrase "Project Gutenberg" is associated) is accessed, displayed, performed, viewed, copied or distributed: This eBook is for the use of anyone anywhere at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included with this eBook or online at www.gutenberg.net 1.E.2. If an individual Project Gutenberg-tm electronic work is derived from the public domain (does not contain a notice indicating that it is posted with permission of the copyright holder), the work can be copied and distributed to anyone in the United States without paying any fees or charges. If you are redistributing or providing access to a work with the phrase "Project Gutenberg" associated with or appearing on the work, you must comply either with the requirements of paragraphs 1.E.1 through 1.E.7 or obtain permission for the use of the work and the Project Gutenberg-tm trademark as set forth in paragraphs 1.E.8 or 1.E.9. 1.E.3. If an individual Project Gutenberg-tm electronic work is posted with the permission of the copyright holder, your use and distribution must comply with both paragraphs 1.E.1 through 1.E.7 and any additional terms imposed by the copyright holder. Additional terms will be linked to the Project Gutenberg-tm License for all works posted with the permission of the copyright holder found at the beginning of this work. 1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm License terms from this work, or any files containing a part of this work or any other work associated with Project Gutenberg-tm. 1.E.5. Do not copy, display, perform, distribute or redistribute this electronic work, or any part of this electronic work, without prominently displaying the sentence set forth in paragraph 1.E.1 with active links or immediate access to the full terms of the Project Gutenberg-tm License. 1.E.6. You may convert to and distribute this work in any binary, compressed, marked up, nonproprietary or proprietary form, including any word processing or hypertext form. However, if you provide access to or distribute copies of a Project Gutenberg-tm work in a format other than "Plain Vanilla ASCII" or other format used in the official version posted on the official Project Gutenberg-tm web site (www.gutenberg.net), you must, at no additional cost, fee or expense to the user, provide a copy, a means of exporting a copy, or a means of obtaining a copy upon request, of the work in its original "Plain Vanilla ASCII" or other form. Any alternate format must include the full Project Gutenberg-tm License as specified in paragraph 1.E.1. 1.E.7. Do not charge a fee for access to, viewing, displaying, performing, copying or distributing any Project Gutenberg-tm works unless you comply with paragraph 1.E.8 or 1.E.9. 1.E.8. You may charge a reasonable fee for copies of or providing access to or distributing Project Gutenberg-tm electronic works provided that - You pay a royalty fee of 20% of the gross profits you derive from the use of Project Gutenberg-tm works calculated using the method you already use to calculate your applicable taxes. The fee is owed to the owner of the Project Gutenberg-tm trademark, but he has agreed to donate royalties under this paragraph to the Project Gutenberg Literary Archive Foundation. Royalty payments must be paid within 60 days following each date on which you prepare (or are legally required to prepare) your periodic tax returns. Royalty payments should be clearly marked as such and sent to the Project Gutenberg Literary Archive Foundation at the address specified in Section 4, "Information about donations to the Project Gutenberg Literary Archive Foundation." - You provide a full refund of any money paid by a user who notifies you in writing (or by e-mail) within 30 days of receipt that s/he does not agree to the terms of the full Project Gutenberg-tm License. You must require such a user to return or destroy all copies of the works possessed in a physical medium and discontinue all use of and all access to other copies of Project Gutenberg-tm works. - You provide, in accordance with paragraph 1.F.3, a full refund of any money paid for a work or a replacement copy, if a defect in the electronic work is discovered and reported to you within 90 days of receipt of the work. - You comply with all other terms of this agreement for free distribution of Project Gutenberg-tm works. 1.E.9. If you wish to charge a fee or distribute a Project Gutenberg-tm electronic work or group of works on different terms than are set forth in this agreement, you must obtain permission in writing from both the Project Gutenberg Literary Archive Foundation and Michael Hart, the owner of the Project Gutenberg-tm trademark. Contact the Foundation as set forth in Section 3 below. 1.F. 1.F.1. Project Gutenberg volunteers and employees expend considerable effort to identify, do copyright research on, transcribe and proofread public domain works in creating the Project Gutenberg-tm collection. Despite these efforts, Project Gutenberg-tm electronic works, and the medium on which they may be stored, may contain "Defects," such as, but not limited to, incomplete, inaccurate or corrupt data, transcription errors, a copyright or other intellectual property infringement, a defective or damaged disk or other medium, a computer virus, or computer codes that damage or cannot be read by your equipment. 1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right of Replacement or Refund" described in paragraph 1.F.3, the Project Gutenberg Literary Archive Foundation, the owner of the Project Gutenberg-tm trademark, and any other party distributing a Project Gutenberg-tm electronic work under this agreement, disclaim all liability to you for damages, costs and expenses, including legal fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE PROVIDED IN PARAGRAPH F3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH DAMAGE. 1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a defect in this electronic work within 90 days of receiving it, you can receive a refund of the money (if any) you paid for it by sending a written explanation to the person you received the work from. If you received the work on a physical medium, you must return the medium with your written explanation. The person or entity that provided you with the defective work may elect to provide a replacement copy in lieu of a refund. If you received the work electronically, the person or entity providing it to you may choose to give you a second opportunity to receive the work electronically in lieu of a refund. If the second copy is also defective, you may demand a refund in writing without further opportunities to fix the problem. 1.F.4. Except for the limited right of replacement or refund set forth in paragraph 1.F.3, this work is provided to you 'AS-IS' WITH NO OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PURPOSE. 1.F.5. Some states do not allow disclaimers of certain implied warranties or the exclusion or limitation of certain types of damages. If any disclaimer or limitation set forth in this agreement violates the law of the state applicable to this agreement, the agreement shall be interpreted to make the maximum disclaimer or limitation permitted by the applicable state law. The invalidity or unenforceability of any provision of this agreement shall not void the remaining provisions. 1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the trademark owner, any agent or employee of the Foundation, anyone providing copies of Project Gutenberg-tm electronic works in accordance with this agreement, and any volunteers associated with the production, promotion and distribution of Project Gutenberg-tm electronic works, harmless from all liability, costs and expenses, including legal fees, that arise directly or indirectly from any of the following which you do or cause to occur: (a) distribution of this or any Project Gutenberg-tm work, (b) alteration, modification, or additions or deletions to any Project Gutenberg-tm work, and (c) any Defect you cause. Section 2. Information about the Mission of Project Gutenberg-tm Project Gutenberg-tm is synonymous with the free distribution of electronic works in formats readable by the widest variety of computers including obsolete, old, middle-aged and new computers. It exists because of the efforts of hundreds of volunteers and donations from people in all walks of life. Volunteers and financial support to provide volunteers with the assistance they need, is critical to reaching Project Gutenberg-tm's goals and ensuring that the Project Gutenberg-tm collection will remain freely available for generations to come. In 2001, the Project Gutenberg Literary Archive Foundation was created to provide a secure and permanent future for Project Gutenberg-tm and future generations. To learn more about the Project Gutenberg Literary Archive Foundation and how your efforts and donations can help, see Sections 3 and 4 and the Foundation web page at http://www.pglaf.org. Section 3. Information about the Project Gutenberg Literary Archive Foundation The Project Gutenberg Literary Archive Foundation is a non profit 501(c)(3) educational corporation organized under the laws of the state of Mississippi and granted tax exempt status by the Internal Revenue Service. The Foundation's EIN or federal tax identification number is 64-6221541. Its 501(c)(3) letter is posted at http://pglaf.org/fundraising. Contributions to the Project Gutenberg Literary Archive Foundation are tax deductible to the full extent permitted by U.S. federal laws and your state's laws. The Foundation's principal office is located at 4557 Melan Dr. S. Fairbanks, AK, 99712., but its volunteers and employees are scattered throughout numerous locations. Its business office is located at 809 North 1500 West, Salt Lake City, UT 84116, (801) 596-1887, email business@pglaf.org. Email contact links and up to date contact information can be found at the Foundation's web site and official page at http://pglaf.org For additional contact information: Dr. Gregory B. Newby Chief Executive and Director gbnewby@pglaf.org Section 4. Information about Donations to the Project Gutenberg Literary Archive Foundation Project Gutenberg-tm depends upon and cannot survive without wide spread public support and donations to carry out its mission of increasing the number of public domain and licensed works that can be freely distributed in machine readable form accessible by the widest array of equipment including outdated equipment. Many small donations ($1 to $5,000) are particularly important to maintaining tax exempt status with the IRS. The Foundation is committed to complying with the laws regulating charities and charitable donations in all 50 states of the United States. Compliance requirements are not uniform and it takes a considerable effort, much paperwork and many fees to meet and keep up with these requirements. We do not solicit donations in locations where we have not received written confirmation of compliance. To SEND DONATIONS or determine the status of compliance for any particular state visit http://pglaf.org While we cannot and do not solicit contributions from states where we have not met the solicitation requirements, we know of no prohibition against accepting unsolicited donations from donors in such states who approach us with offers to donate. International donations are gratefully accepted, but we cannot make any statements concerning tax treatment of donations received from outside the United States. U.S. laws alone swamp our small staff. Please check the Project Gutenberg Web pages for current donation methods and addresses. Donations are accepted in a number of other ways including including checks, online payments and credit card donations. To donate, please visit: http://pglaf.org/donate Section 5. General Information About Project Gutenberg-tm electronic works. Professor Michael S. Hart is the originator of the Project Gutenberg-tm concept of a library of electronic works that could be freely shared with anyone. For thirty years, he produced and distributed Project Gutenberg-tm eBooks with only a loose network of volunteer support. Project Gutenberg-tm eBooks are often created from several printed editions, all of which are confirmed as Public Domain in the U.S. unless a copyright notice is included. Thus, we do not necessarily keep eBooks in compliance with any particular paper edition. Most people start at our Web site which has the main PG search facility: http://www.gutenberg.net This Web site includes information about Project Gutenberg-tm, including how to make donations to the Project Gutenberg Literary Archive Foundation, how to help produce our new eBooks, and how to subscribe to our email newsletter to hear about new eBooks. libwebsockets-3.2.1/minimal-examples/api-tests/api-test-gencrypto/000077500000000000000000000000001357643561300253035ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/api-tests/api-test-gencrypto/CMakeLists.txt000066400000000000000000000040171357643561300300450ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-api-test-gencrypto) set(SRCS main.c lws-genaes.c lws-genec.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_WITH_GENCRYPTO 1 requirements) require_lws_config(LWS_WITH_JOSE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/api-tests/api-test-gencrypto/README.md000066400000000000000000000012441357643561300265630ustar00rootroot00000000000000# lws api test gencrypto Demonstrates how to use and performs selftests for Generic Crypto, which works the same whether the tls backend is OpenSSL or mbedTLS ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ ./lws-api-test-gencrypto [2018/12/05 08:30:27:1342] USER: LWS gencrypto apis tests [2018/12/05 08:30:27:1343] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off [2018/12/05 08:30:27:1343] NOTICE: created client ssl context for default [2018/12/05 08:30:27:1344] NOTICE: test_genaes: selftest OK [2018/12/05 08:30:27:1344] USER: Completed: PASS ``` libwebsockets-3.2.1/minimal-examples/api-tests/api-test-gencrypto/lws-genaes.c000066400000000000000000000467551357643561300275350ustar00rootroot00000000000000/* * lws-api-test-gencrypto - lws-genaes * * Written in 2010-2018 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include static const uint8_t /* * produced with (plaintext.txt contains "test plaintext\0\0") * * openssl enc -aes256 \ * -K "0123456789abcdeffedcba98765432100123456789abcdeffedcba9876543210" \ * -iv "0123456789abcdeffedcba9876543210" * -in plaintext.txt -out out.enc * */ *cbc256 = (uint8_t *)"test plaintext\0\0", cbc256_enc[] = { 0x2b, 0x5d, 0xb2, 0xa8, 0x5a, 0x5a, 0xf4, 0x2e, 0xf7, 0xf9, 0xc5, 0x3c, 0x73, 0xef, 0x40, 0x88, }, cbc256_iv[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }, cbc256_key[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, } ; static int test_genaes_cbc(void) { struct lws_genaes_ctx ctx; struct lws_gencrypto_keyelem e; uint8_t res[32], res1[32]; /* * As part of a jwk, these are allocated. But here we just use one as * a wrapper on a static binary key. */ e.buf = (uint8_t *)cbc256_key; e.len = sizeof(cbc256_key); if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_CBC, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } if (lws_genaes_crypt(&ctx, cbc256, 16, res, (uint8_t *)cbc256_iv, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy enc failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(cbc256_enc, res, 16)) { lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_CBC, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create dec failed\n", __func__); return -1; } if (lws_genaes_crypt(&ctx, res, 16, res1, (uint8_t *)cbc256_iv, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy dec failed\n", __func__); lwsl_hexdump_notice(res1, 16); return -1; } if (lws_timingsafe_bcmp(cbc256, res1, 16)) { lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } return 0; bail: lws_genaes_destroy(&ctx, NULL, 0); return -1; } static const uint8_t /* * produced with (plaintext.txt contains "test plaintext\0\0") * * openssl enc -aes-128-cfb \ * -K "0123456789abcdeffedcba9876543210" \ * -iv "0123456789abcdeffedcba9876543210" * -in plaintext.txt -out out.enc * */ *cfb128 = (uint8_t *)"test plaintext\0\0", cfb128_enc[] = { 0xd2, 0x11, 0x86, 0xd7, 0xa9, 0x55, 0x59, 0x04, 0x4f, 0x63, 0x7c, 0xb9, 0xc6, 0xa1, 0xc9, 0x71 }, cfb128_iv[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }, cfb128_key[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }; static int test_genaes_cfb128(void) { struct lws_genaes_ctx ctx; struct lws_gencrypto_keyelem e; uint8_t res[32], res1[32]; size_t iv_off = 0; e.buf = (uint8_t *)cfb128_key; e.len = sizeof(cfb128_key); if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_CFB128, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } if (lws_genaes_crypt(&ctx, cfb128, 16, res, (uint8_t *)cfb128_iv, NULL, &iv_off, 0)) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(cfb128_enc, res, 16)) { lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } iv_off = 0; if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_CFB128, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create dec failed\n", __func__); return -1; } if (lws_genaes_crypt(&ctx, res, 16, res1, (uint8_t *)cfb128_iv, NULL, &iv_off, 0)) { lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(cfb128, res1, 16)) { lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res1, 16); return -1; } return 0; bail: lws_genaes_destroy(&ctx, NULL, 0); return -1; } static const uint8_t /* * produced with (plaintext.txt contains "test plaintext\0\0") * * openssl enc -aes-128-cfb8 \ * -K "0123456789abcdeffedcba9876543210" \ * -iv "0123456789abcdeffedcba9876543210" * -in plaintext.txt -out out.enc * */ *cfb8 = (uint8_t *)"test plaintext\0\0", cfb8_enc[] = { 0xd2, 0x91, 0x06, 0x2d, 0x1b, 0x1e, 0x9b, 0x39, 0xa6, 0x65, 0x8e, 0xbe, 0x68, 0x32, 0x3d, 0xab }, cfb8_iv[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }, cfb8_key[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }; static int test_genaes_cfb8(void) { struct lws_genaes_ctx ctx; struct lws_gencrypto_keyelem e; uint8_t res[32], res1[32]; e.buf = (uint8_t *)cfb8_key; e.len = sizeof(cfb8_key); if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_CFB8, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } if (lws_genaes_crypt(&ctx, cfb8, 16, res, (uint8_t *)cfb8_iv, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(cfb8_enc, res, 16)) { lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_CFB8, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create dec failed\n", __func__); return -1; } if (lws_genaes_crypt(&ctx, res, 16, res1, (uint8_t *)cfb8_iv, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(cfb8, res1, 16)) { lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res1, 16); return -1; } return 0; bail: lws_genaes_destroy(&ctx, NULL, 0); return -1; } static const uint8_t /* * produced with (plaintext.txt contains "test plaintext\0\0") * * openssl enc -aes-128-ctr \ * -K "0123456789abcdeffedcba9876543210" \ * -iv "0123456789abcdeffedcba9876543210" * -in plaintext.txt -out out.enc * */ *ctr = (uint8_t *)"test plaintext\0\0", ctr_enc[] = { 0xd2, 0x11, 0x86, 0xd7, 0xa9, 0x55, 0x59, 0x04, 0x4f, 0x63, 0x7c, 0xb9, 0xc6, 0xa1, 0xc9, 0x71 }, ctr_iv[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }, ctr_key[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }; static int test_genaes_ctr(void) { uint8_t nonce_counter[16], sb[16]; struct lws_genaes_ctx ctx; struct lws_gencrypto_keyelem e; uint8_t res[32], res1[32]; size_t nc_off = 0; e.buf = (uint8_t *)ctr_key; e.len = sizeof(ctr_key); memset(sb, 0, sizeof(nonce_counter)); memcpy(nonce_counter, ctr_iv, sizeof(ctr_iv)); if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_CTR, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } if (lws_genaes_crypt(&ctx, ctr, 16, res, nonce_counter, sb, &nc_off, 0)) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(ctr_enc, res, 16)) { lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } nc_off = 0; memset(sb , 0, sizeof(nonce_counter)); memcpy(nonce_counter, ctr_iv, sizeof(ctr_iv)); if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_CTR, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create dec failed\n", __func__); return -1; } if (lws_genaes_crypt(&ctx, res, 16, res1, nonce_counter, sb, &nc_off, 0)) { lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(ctr, res1, 16)) { lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res1, 16); return -1; } lws_explicit_bzero(sb, sizeof(sb)); return 0; bail: lws_genaes_destroy(&ctx, NULL, 0); return -1; } static const uint8_t /* * produced with (plaintext.txt contains "test plaintext\0\0") * * openssl enc -aes-128-ecb \ * -K "0123456789abcdeffedcba9876543210" \ * -in plaintext.txt -out out.enc * */ *ecb = (uint8_t *)"test plaintext\0\0", ecb_enc[] = { 0xf3, 0xe5, 0x6c, 0x80, 0x3a, 0xf1, 0xc4, 0xa0, 0x7e, 0xdf, 0x86, 0x0f, 0x6d, 0xca, 0x5d, 0x36, 0x17, 0x22, 0x37, 0x42, 0x47, 0x41, 0x67, 0x7d, 0x99, 0x25, 0x02, 0x6b, 0x6b, 0x8f, 0x9c, 0x7f }, ecb_key[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }; static int test_genaes_ecb(void) { struct lws_genaes_ctx ctx; struct lws_gencrypto_keyelem e; uint8_t res[32], res1[32]; /* * As part of a jwk, these are allocated. But here we just use one as * a wrapper on a static binary key. */ e.buf = (uint8_t *)ecb_key; e.len = sizeof(ecb_key); if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_ECB, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } if (lws_genaes_crypt(&ctx, ecb, 16, res, NULL, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(ecb_enc, res, 16)) { lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_ECB, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create dec failed\n", __func__); return -1; } if (lws_genaes_crypt(&ctx, res, 16, res1, NULL, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(ecb, res1, 16)) { lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } return 0; bail: lws_genaes_destroy(&ctx, NULL, 0); return -1; } #if defined(MBEDTLS_CONFIG_H) && !defined(MBEDTLS_CIPHER_MODE_OFB) #else static const uint8_t /* * produced with (plaintext.txt contains "test plaintext\0\0") * * openssl enc -aes-128-ofb \ * -K "0123456789abcdeffedcba98765432100123456789abcdeffedcba9876543210" \ * -iv "0123456789abcdeffedcba9876543210" * -in plaintext.txt -out out.enc * */ *ofb = (uint8_t *)"test plaintext\0\0", ofb_enc[] = { /* !!! ugh... openssl app produces this... */ // 0xd2, 0x11, 0x86, 0xd7, 0xa9, 0x55, 0x59, 0x04, // 0x4f, 0x63, 0x7c, 0xb9, 0xc6, 0xa1, 0xc9, 0x71, /* but both OpenSSL and mbedTLS produce this */ 0x11, 0x33, 0x6D, 0xFC, 0x88, 0x4C, 0x28, 0xBA, 0xD0, 0xF2, 0x6C, 0xBC, 0xDE, 0x4A, 0x56, 0x20 }, ofb_iv[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }, ofb_key[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, } ; static int test_genaes_ofb(void) { struct lws_genaes_ctx ctx; struct lws_gencrypto_keyelem e; uint8_t res[32], res1[32]; size_t iv_off = 0; e.buf = (uint8_t *)ofb_key; e.len = sizeof(ofb_key); if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_OFB, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } if (lws_genaes_crypt(&ctx, ofb, 16, res, (uint8_t *)ofb_iv, NULL, &iv_off, 0)) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(ofb_enc, res, 16)) { lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } iv_off = 0; if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_OFB, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create dec failed\n", __func__); return -1; } if (lws_genaes_crypt(&ctx, res, 16, res1, (uint8_t *)ofb_iv, NULL, &iv_off, 0)) { lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(ofb, res1, 16)) { lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } return 0; bail: lws_genaes_destroy(&ctx, NULL, 0); return -1; } #endif #if defined(MBEDTLS_CONFIG_H) && !defined(MBEDTLS_CIPHER_MODE_XTS) #else static const uint8_t /* * Fedora openssl tool doesn't support xts... this data produced * by testing on mbedtls + OpenSSL and getting the same result * * NOTICE that xts requires a double-length key... OpenSSL now checks * the key for duplication so we use a random key */ *xts = (uint8_t *)"test plaintext\0\0", xts_enc[] = { 0x87, 0x83, 0x20, 0x8B, 0x15, 0x89, 0xA1, 0x13, 0xDC, 0xEA, 0x82, 0xB6, 0xFF, 0x8D, 0x76, 0x3A }, xts_key[] = { 0xa4, 0xd6, 0xa2, 0x1a, 0x3b, 0x34, 0x34, 0x43, 0x9a, 0xe2, 0x6a, 0x01, 0x1c, 0x73, 0x80, 0x3b, 0xdd, 0xf6, 0xd4, 0x37, 0x5e, 0x0e, 0x1c, 0x72, 0x8e, 0xe5, 0x18, 0x69, 0xfd, 0x08, 0x40, 0x2b, 0x98, 0xf9, 0x75, 0xa8, 0x36, 0xd5, 0x0f, 0xa2, 0x20, 0x04, 0x43, 0xa7, 0x3a, 0xa6, 0x4a, 0xdc, 0xe9, 0x54, 0x50, 0xfa, 0x38, 0xad, 0x6d, 0x96, 0x5f, 0x31, 0x9e, 0xcd, 0x33, 0x08, 0xa0, 0x44 } ; static int test_genaes_xts(void) { struct lws_genaes_ctx ctx; struct lws_gencrypto_keyelem e; uint8_t res[32], res1[32], data_unit[16]; memset(data_unit, 0, sizeof(data_unit)); e.buf = (uint8_t *)xts_key; e.len = sizeof(xts_key); if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_XTS, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } if (lws_genaes_crypt(&ctx, xts, 16, res, data_unit, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(xts_enc, res, 16)) { lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_XTS, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create dec failed\n", __func__); return -1; } if (lws_genaes_crypt(&ctx, res, 16, res1, data_unit, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(xts, res1, 16)) { lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } return 0; bail: lws_genaes_destroy(&ctx, NULL, 0); return -1; } #endif static const uint8_t /* * https://csrc.nist.gov/CSRC/media/Projects/ * Cryptographic-Algorithm-Validation-Program/ * documents/mac/gcmtestvectors.zip */ gcm_ct[] = { 0xf7, 0x26, 0x44, 0x13, 0xa8, 0x4c, 0x0e, 0x7c, 0xd5, 0x36, 0x86, 0x7e, 0xb9, 0xf2, 0x17, 0x36 }, gcm_iv[] = { 0x99, 0xaa, 0x3e, 0x68, 0xed, 0x81, 0x73, 0xa0, 0xee, 0xd0, 0x66, 0x84 }, gcm_key[] = { 0xee, 0xbc, 0x1f, 0x57, 0x48, 0x7f, 0x51, 0x92, 0x1c, 0x04, 0x65, 0x66, 0x5f, 0x8a, 0xe6, 0xd1, 0x65, 0x8b, 0xb2, 0x6d, 0xe6, 0xf8, 0xa0, 0x69, 0xa3, 0x52, 0x02, 0x93, 0xa5, 0x72, 0x07, 0x8f }, gcm_pt[] = { 0xf5, 0x6e, 0x87, 0x05, 0x5b, 0xc3, 0x2d, 0x0e, 0xeb, 0x31, 0xb2, 0xea, 0xcc, 0x2b, 0xf2, 0xa5 }, gcm_aad[] = { 0x4d, 0x23, 0xc3, 0xce, 0xc3, 0x34, 0xb4, 0x9b, 0xdb, 0x37, 0x0c, 0x43, 0x7f, 0xec, 0x78, 0xde }, gcm_tag[] = { 0x67, 0xba, 0x05, 0x10, 0x26, 0x2a, 0xe4, 0x87, 0xd7, 0x37, 0xee, 0x62, 0x98, 0xf7, 0x7e, 0x0c }; static int test_genaes_gcm(void) { uint8_t res[sizeof(gcm_ct)], tag[sizeof(gcm_tag)]; struct lws_genaes_ctx ctx; struct lws_gencrypto_keyelem e; size_t iv_off = 0; e.buf = (uint8_t *)gcm_key; e.len = sizeof(gcm_key); /* Encrypt */ if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_GCM, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } /* first we set the iv and aad */ iv_off = sizeof(gcm_iv); if (lws_genaes_crypt(&ctx, gcm_aad, sizeof(gcm_aad), NULL, (uint8_t *)gcm_iv, (uint8_t *)gcm_tag, &iv_off, sizeof(gcm_tag))) { lwsl_err("%s: lws_genaes_crypt 1 failed\n", __func__); goto bail; } if (lws_genaes_crypt(&ctx, gcm_pt, sizeof(gcm_pt), res, NULL, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt 2 failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, tag, sizeof(tag))) { lwsl_err("%s: lws_genaes_destroy enc failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(gcm_ct, res, sizeof(gcm_ct))) { lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, sizeof(gcm_ct)); return -1; } /* Decrypt */ if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_GCM, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } iv_off = sizeof(gcm_iv); /* initial call sets iv + aad + tag */ if (lws_genaes_crypt(&ctx, gcm_aad, sizeof(gcm_aad), NULL, (uint8_t *)gcm_iv, (uint8_t *)gcm_tag, &iv_off, sizeof(gcm_tag))) { lwsl_err("%s: lws_genaes_crypt 1 failed\n", __func__); goto bail; } if (lws_genaes_crypt(&ctx, gcm_ct, sizeof(gcm_ct), res, NULL, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt 2 failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, tag, sizeof(tag))) { lwsl_err("%s: lws_genaes_destroy dec failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(gcm_pt, res, sizeof(gcm_pt))) { lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res, sizeof(gcm_ct)); return -1; } return 0; bail: lws_genaes_destroy(&ctx, NULL, 0); return -1; } int test_genaes(struct lws_context *context) { if (test_genaes_cbc()) goto bail; if (test_genaes_cfb128()) goto bail; if (test_genaes_cfb8()) goto bail; if (test_genaes_ctr()) goto bail; if (test_genaes_ecb()) goto bail; #if defined(MBEDTLS_CONFIG_H) && !defined(MBEDTLS_CIPHER_MODE_OFB) #else if (test_genaes_ofb()) goto bail; #endif #if defined(MBEDTLS_CONFIG_H) && !defined(MBEDTLS_CIPHER_MODE_XTS) #else if (test_genaes_xts()) goto bail; #endif if (test_genaes_gcm()) goto bail; /* end */ lwsl_notice("%s: selftest OK\n", __func__); return 0; bail: lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__); return 1; } libwebsockets-3.2.1/minimal-examples/api-tests/api-test-gencrypto/lws-genec.c000066400000000000000000000054611357643561300273410ustar00rootroot00000000000000/* * lws-api-test-gencrypto - lws-genec * * Written in 2010-2018 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include static const uint8_t *jwk_ec1 = (uint8_t *) "{\"kty\":\"EC\"," "\"crv\":\"P-256\"," "\"x\":\"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4\"," "\"y\":\"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM\"," "\"d\":\"870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE\"," "\"use\":\"enc\"," "\"kid\":\"rfc7517-A.2-example private key\"}" ; static int test_genec1(struct lws_context *context) { struct lws_genec_ctx ctx; struct lws_jwk jwk; struct lws_gencrypto_keyelem el[LWS_GENCRYPTO_EC_KEYEL_COUNT]; //uint8_t res[32], res1[32]; int n; memset(el, 0, sizeof(el)); if (lws_genecdh_create(&ctx, context, NULL)) return 1; /* let's create a new key */ if (lws_genecdh_new_keypair(&ctx, LDHS_OURS, "P-256", el)) { lwsl_err("%s: lws_genec_new_keypair failed\n", __func__); return 1; } lws_genec_dump(el); lws_genec_destroy_elements(el); lws_genec_destroy(&ctx); if (lws_jwk_import(&jwk, NULL, NULL, (char *)jwk_ec1, strlen((char *)jwk_ec1)) < 0) { lwsl_notice("Failed to decode JWK test key\n"); return 1; } lws_jwk_dump(&jwk); if (jwk.kty != LWS_GENCRYPTO_KTY_EC) { lws_jwk_destroy(&jwk); lwsl_err("%s: jwk is not an EC key\n", __func__); return 1; } if (lws_genecdh_create(&ctx, context, NULL)) return 1; n = lws_genecdh_set_key(&ctx, jwk.e, LDHS_OURS); if (n) { lws_jwk_destroy(&jwk); lwsl_err("%s: lws_genec_create failed: %d\n", __func__, n); return 1; } #if 0 if (lws_genec_crypt(&ctx, cbc256, 16, res, (uint8_t *)cbc256_iv, NULL, NULL)) { lwsl_err("%s: lws_genec_crypt failed\n", __func__); goto bail; } if (lws_timingsafe_bcmp(cbc256_enc, res, 16)) { lwsl_err("%s: lws_genec_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); goto bail; } lws_genec_destroy(&ctx); if (lws_genec_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_CBC, &e, NULL)) { lwsl_err("%s: lws_genec_create dec failed\n", __func__); return -1; } if (lws_genec_crypt(&ctx, res, 16, res1, (uint8_t *)cbc256_iv, NULL, NULL)) { lwsl_err("%s: lws_genec_crypt dec failed\n", __func__); goto bail; } if (lws_timingsafe_bcmp(cbc256, res1, 16)) { lwsl_err("%s: lws_genec_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); goto bail; } #endif lws_genec_destroy(&ctx); lws_jwk_destroy(&jwk); return 0; //bail: // lws_genec_destroy(&ctx); // return -1; } int test_genec(struct lws_context *context) { if (test_genec1(context)) goto bail; /* end */ lwsl_notice("%s: selftest OK\n", __func__); return 0; bail: lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__); return 1; } libwebsockets-3.2.1/minimal-examples/api-tests/api-test-gencrypto/main.c000066400000000000000000000021141357643561300263710ustar00rootroot00000000000000/* * lws-api-test-gencrypto * * Written in 2010-2018 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include int test_genaes(struct lws_context *context); int test_genec(struct lws_context *context); int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int result = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS gencrypto apis tests\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } result |= test_genaes(context); result |= test_genec(context); lwsl_user("Completed: %s\n", result ? "FAIL" : "PASS"); lws_context_destroy(context); return result; } libwebsockets-3.2.1/minimal-examples/api-tests/api-test-gencrypto/selftest.sh000077500000000000000000000010311357643561300274660ustar00rootroot00000000000000#!/bin/bash # # $1: path to minimal example binaries... # if lws is built with -DLWS_WITH_MINIMAL_EXAMPLES=1 # that will be ./bin from your build dir # # $2: path for logs and results. The results will go # in a subdir named after the directory this script # is in # # $3: offset for test index count # # $4: total test count # # $5: path to ./minimal-examples dir in lws # # Test return code 0: OK, 254: timed out, other: error indication . $5/selftests-library.sh COUNT_TESTS=1 dotest $1 $2 apiselftest exit $FAILS libwebsockets-3.2.1/minimal-examples/api-tests/api-test-jose/000077500000000000000000000000001357643561300242315ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/api-tests/api-test-jose/CMakeLists.txt000066400000000000000000000037131357643561300267750ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-api-test-jose) set(SRCS main.c jwk.c jws.c jwe.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_WITH_JOSE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/api-tests/api-test-jose/README.md000066400000000000000000000005421357643561300255110ustar00rootroot00000000000000# lws api test lwsac Demonstrates how to use and performs selftests for lwsac ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ ./lws-api-test-lwsac [2018/10/09 09:14:17:4834] USER: LWS API selftest: lwsac [2018/10/09 09:14:17:4835] USER: Completed: PASS ``` libwebsockets-3.2.1/minimal-examples/api-tests/api-test-jose/jwe.c000066400000000000000000002303141357643561300251650ustar00rootroot00000000000000/* * lws-api-test-jose - RFC7516 jwe tests * * Written in 2010-2018 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include /* * These are the inputs and outputs from the worked example in RFC7516 * Appendix A.1 {"alg":"RSA-OAEP","enc":"A256GCM"} */ static char *ex_a1_ptext = "The true sign of intelligence is not knowledge but imagination.", *ex_a1_compact = "eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ." "OKOawDo13gRp2ojaHV7LFpZcgV7T6DVZKTyKOMTYUmKoTCVJRgckCL9kiMT03JGe" "ipsEdY3mx_etLbbWSrFr05kLzcSr4qKAq7YN7e9jwQRb23nfa6c9d-StnImGyFDb" "Sv04uVuxIp5Zms1gNxKKK2Da14B8S4rzVRltdYwam_lDp5XnZAYpQdb76FdIKLaV" "mqgfwX7XWRxv2322i-vDxRfqNzo_tETKzpVLzfiwQyeyPGLBIO56YJ7eObdv0je8" "1860ppamavo35UgoRdbYaBcoh9QcfylQr66oc6vFWXRcZ_ZT2LawVCWTIy3brGPi" "6UklfCpIMfIjf7iGdXKHzg." "48V1_ALb6US04U3b." "5eym8TW_c8SuK0ltJ3rpYIzOeDQz7TALvtu6UG9oMo4vpzs9tX_EFShS8iB7j6ji" "SdiwkIr3ajwQzaBtQD_A." "XFBoMYUZodetZdvTiFvSkQ", *ex_a1_jwk_json = "{\"kty\":\"RSA\"," "\"n\":\"oahUIoWw0K0usKNuOR6H4wkf4oBUXHTxRvgb48E-BVvxkeDNjbC4he8rUW" "cJoZmds2h7M70imEVhRU5djINXtqllXI4DFqcI1DgjT9LewND8MW2Krf3S" "psk_ZkoFnilakGygTwpZ3uesH-PFABNIUYpOiN15dsQRkgr0vEhxN92i2a" "sbOenSZeyaxziK72UwxrrKoExv6kc5twXTq4h-QChLOln0_mtUZwfsRaMS" "tPs6mS6XrgxnxbWhojf663tuEQueGC-FCMfra36C9knDFGzKsNa7LZK2dj" "YgyD3JR_MB_4NUJW_TqOQtwHYbxevoJArm-L5StowjzGy-_bq6Gw\"," "\"e\":\"AQAB\"," "\"d\":\"kLdtIj6GbDks_ApCSTYQtelcNttlKiOyPzMrXHeI-yk1F7-kpDxY4-WY5N" "WV5KntaEeXS1j82E375xxhWMHXyvjYecPT9fpwR_M9gV8n9Hrh2anTpTD9" "3Dt62ypW3yDsJzBnTnrYu1iwWRgBKrEYY46qAZIrA2xAwnm2X7uGR1hghk" "qDp0Vqj3kbSCz1XyfCs6_LehBwtxHIyh8Ripy40p24moOAbgxVw3rxT_vl" "t3UVe4WO3JkJOzlpUf-KTVI2Ptgm-dARxTEtE-id-4OJr0h-K-VFs3VSnd" "VTIznSxfyrj8ILL6MG_Uv8YAu7VILSB3lOW085-4qE3DzgrTjgyQ\"," "\"p\":\"1r52Xk46c-LsfB5P442p7atdPUrxQSy4mti_tZI3Mgf2EuFVbUoDBvaRQ-" "SWxkbkmoEzL7JXroSBjSrK3YIQgYdMgyAEPTPjXv_hI2_1eTSPVZfzL0lf" "fNn03IXqWF5MDFuoUYE0hzb2vhrlN_rKrbfDIwUbTrjjgieRbwC6Cl0\"," "\"q\":\"wLb35x7hmQWZsWJmB_vle87ihgZ19S8lBEROLIsZG4ayZVe9Hi9gDVCOBm" "UDdaDYVTSNx_8Fyw1YYa9XGrGnDew00J28cRUoeBB_jKI1oma0Orv1T9aX" "IWxKwd4gvxFImOWr3QRL9KEBRzk2RatUBnmDZJTIAfwTs0g68UZHvtc\"," "\"dp\":\"ZK-YwE7diUh0qR1tR7w8WHtolDx3MZ_OTowiFvgfeQ3SiresXjm9gZ5KL" "hMXvo-uz-KUJWDxS5pFQ_M0evdo1dKiRTjVw_x4NyqyXPM5nULPkcpU827" "rnpZzAJKpdhWAgqrXGKAECQH0Xt4taznjnd_zVpAmZZq60WPMBMfKcuE\"," "\"dq\":\"Dq0gfgJ1DdFGXiLvQEZnuKEN0UUmsJBxkjydc3j4ZYdBiMRAy86x0vHCj" "ywcMlYYg4yoC4YZa9hNVcsjqA3FeiL19rk8g6Qn29Tt0cj8qqyFpz9vNDB" "UfCAiJVeESOjJDZPYHdHY8v1b-o-Z2X5tvLx-TCekf7oxyeKDUqKWjis\"," "\"qi\":\"VIMpMYbPf47dT1w_zDUXfPimsSegnMOA1zTaX7aGk_8urY6R8-ZW1FxU7" "AlWAyLWybqq6t16VFd7hQd0y6flUK4SlOydB61gwanOsXGOAOv82cHq0E3" "eL4HrtZkUuKvnPrMnsUUFlfUdybVzxyjz9JF_XyaY14ardLSjf4L_FNY\"" "}" ; static int test_jwe_a1(struct lws_context *context) { struct lws_jwe jwe; char temp[2048], compact[2048]; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, ex_a1_jwk_json, strlen(ex_a1_jwk_json)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* converts a compact serialization to jws b64 + decoded maps */ if (lws_jws_compact_decode(ex_a1_compact, strlen(ex_a1_compact), &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < strlen(ex_a1_ptext) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], ex_a1_ptext, strlen(ex_a1_ptext))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(ex_a1_ptext, strlen(ex_a1_ptext)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } /* * Canned decrypt worked properly... let's also try encoding the * plaintext ourselves and decoding that... */ lws_jwe_destroy(&jwe); temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, ex_a1_jwk_json, strlen(ex_a1_jwk_json)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } if (lws_gencrypto_jwe_alg_to_definition("RSA-OAEP", &jwe.jose.alg)) { lwsl_err("Unknown cipher alg \"RSA-OAEP\"\n"); goto bail; } if (lws_gencrypto_jwe_enc_to_definition("A256GCM", &jwe.jose.enc_alg)) { lwsl_err("Unknown payload enc alg \"A256GCM\"\n"); goto bail; } /* we require a JOSE-formatted header to do the encryption */ jwe.jws.map.buf[LJWS_JOSE] = temp; jwe.jws.map.len[LJWS_JOSE] = lws_snprintf(temp, temp_len, "{\"alg\":\"%s\",\"enc\":\"%s\"}", "RSA-OAEP", "A256GCM"); temp_len -= jwe.jws.map.len[LJWS_JOSE]; /* * dup the plaintext into the ciphertext element, it will be * encrypted in-place to a ciphertext of the same length */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_CTXT, lws_concat_temp(temp, temp_len), &temp_len, ex_a1_ptext, strlen(ex_a1_ptext), 0)) { lwsl_notice("%s: Not enough temp space for ptext\n", __func__); goto bail; } /* CEK size is determined by hash / hmac size */ n = lws_gencrypto_bits_to_bytes(jwe.jose.enc_alg->keybits_fixed); if (lws_jws_randomize_element(context, &jwe.jws.map, LJWE_EKEY, lws_concat_temp(temp, temp_len), &temp_len, n, LWS_JWE_LIMIT_KEY_ELEMENT_BYTES)) { lwsl_err("Problem getting random\n"); goto bail; } n = lws_jwe_encrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt failed\n", __func__); goto bail; } n = lws_jwe_render_compact(&jwe, compact, sizeof(compact)); if (n < 0) { lwsl_err("%s: lws_jwe_render_compact failed: %d\n", __func__, n); goto bail; } // puts(compact); /* * Okay... what happens when we try to decode what we created? */ lws_jwe_destroy(&jwe); lws_jwe_init(&jwe, context); temp_len = sizeof(temp); /* converts a compact serialization to jws b64 + decoded maps */ if (lws_jws_compact_decode(compact, strlen(compact), &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail; } if (lws_jwk_import(&jwe.jwk, NULL, NULL, ex_a1_jwk_json, strlen(ex_a1_jwk_json)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: generated lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* A.2. Example JWE using RSAES-PKCS1-v1_5 and AES_128_CBC_HMAC_SHA_256 * * This example encrypts the plaintext "Live long and prosper." to the * recipient using RSAES-PKCS1-v1_5 for key encryption and * AES_128_CBC_HMAC_SHA_256 for content encryption. */ /* "Live long and prosper." */ static uint8_t ex_a2_ptext[] = { 76, 105, 118, 101, 32, 108, 111, 110, 103, 32, 97, 110, 100, 32, 112, 114, 111, 115, 112, 101, 114, 46 }, *lws_jwe_ex_a2_jwk_json = (uint8_t *) "{" "\"kty\":\"RSA\"," "\"n\":\"sXchDaQebHnPiGvyDOAT4saGEUetSyo9MKLOoWFsueri23bOdgWp4Dy1Wl" "UzewbgBHod5pcM9H95GQRV3JDXboIRROSBigeC5yjU1hGzHHyXss8UDpre" "cbAYxknTcQkhslANGRUZmdTOQ5qTRsLAt6BTYuyvVRdhS8exSZEy_c4gs_" "7svlJJQ4H9_NxsiIoLwAEk7-Q3UXERGYw_75IDrGA84-lA_-Ct4eTlXHBI" "Y2EaV7t7LjJaynVJCpkv4LKjTTAumiGUIuQhrNhZLuF_RJLqHpM2kgWFLU" "7-VTdL1VbC2tejvcI2BlMkEpk1BzBZI0KQB0GaDWFLN-aEAw3vRw\"," "\"e\":\"AQAB\"," "\"d\":\"VFCWOqXr8nvZNyaaJLXdnNPXZKRaWCjkU5Q2egQQpTBMwhprMzWzpR8Sxq" "1OPThh_J6MUD8Z35wky9b8eEO0pwNS8xlh1lOFRRBoNqDIKVOku0aZb-ry" "nq8cxjDTLZQ6Fz7jSjR1Klop-YKaUHc9GsEofQqYruPhzSA-QgajZGPbE_" "0ZaVDJHfyd7UUBUKunFMScbflYAAOYJqVIVwaYR5zWEEceUjNnTNo_CVSj" "-VvXLO5VZfCUAVLgW4dpf1SrtZjSt34YLsRarSb127reG_DUwg9Ch-Kyvj" "T1SkHgUWRVGcyly7uvVGRSDwsXypdrNinPA4jlhoNdizK2zF2CWQ\"," "\"p\":\"9gY2w6I6S6L0juEKsbeDAwpd9WMfgqFoeA9vEyEUuk4kLwBKcoe1x4HG68" "ik918hdDSE9vDQSccA3xXHOAFOPJ8R9EeIAbTi1VwBYnbTp87X-xcPWlEP" "krdoUKW60tgs1aNd_Nnc9LEVVPMS390zbFxt8TN_biaBgelNgbC95sM\"," "\"q\":\"uKlCKvKv_ZJMVcdIs5vVSU_6cPtYI1ljWytExV_skstvRSNi9r66jdd9-y" "BhVfuG4shsp2j7rGnIio901RBeHo6TPKWVVykPu1iYhQXw1jIABfw-MVsN" "-3bQ76WLdt2SDxsHs7q7zPyUyHXmps7ycZ5c72wGkUwNOjYelmkiNS0\"," "\"dp\":\"w0kZbV63cVRvVX6yk3C8cMxo2qCM4Y8nsq1lmMSYhG4EcL6FWbX5h9yuv" "ngs4iLEFk6eALoUS4vIWEwcL4txw9LsWH_zKI-hwoReoP77cOdSL4AVcra" "Hawlkpyd2TWjE5evgbhWtOxnZee3cXJBkAi64Ik6jZxbvk-RR3pEhnCs\"," "\"dq\":\"o_8V14SezckO6CNLKs_btPdFiO9_kC1DsuUTd2LAfIIVeMZ7jn1Gus_Ff" "7B7IVx3p5KuBGOVF8L-qifLb6nQnLysgHDh132NDioZkhH7mI7hPG-PYE_" "odApKdnqECHWw0J-F0JWnUd6D2B_1TvF9mXA2Qx-iGYn8OVV1Bsmp6qU\"," "\"qi\":\"eNho5yRBEBxhGBtQRww9QirZsB66TrfFReG_CcteI1aCneT0ELGhYlRlC" "tUkTRclIfuEPmNsNDPbLoLqqCVznFbvdB7x-Tl-m0l_eFTj2KiqwGqE9PZ" "B9nNTwMVvH3VRRSLWACvPnSiwP8N5Usy-WRXS-V7TbpxIhvepTfE0NNo\"" "}", *ex_a2_compact = (uint8_t *) "eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0" "." "UGhIOguC7IuEvf_NPVaXsGMoLOmwvc1GyqlIKOK1nN94nHPoltGRhWhw7Zx0-kFm" "1NJn8LE9XShH59_i8J0PH5ZZyNfGy2xGdULU7sHNF6Gp2vPLgNZ__deLKxGHZ7Pc" "HALUzoOegEI-8E66jX2E4zyJKx-YxzZIItRzC5hlRirb6Y5Cl_p-ko3YvkkysZIF" "NPccxRU7qve1WYPxqbb2Yw8kZqa2rMWI5ng8OtvzlV7elprCbuPhcCdZ6XDP0_F8" "rkXds2vE4X-ncOIM8hAYHHi29NX0mcKiRaD0-D-ljQTP-cFPgwCp6X-nZZd9OHBv" "-B3oWh2TbqmScqXMR4gp_A" "." "AxY8DCtDaGlsbGljb3RoZQ" "." "KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY" "." "9hH0vgRfYgPnAHOd8stkvw" ; static int test_jwe_a2(struct lws_context *context) { struct lws_jwe jwe; char temp[2048]; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, (char *)lws_jwe_ex_a2_jwk_json, strlen((char *)lws_jwe_ex_a2_jwk_json)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* converts a compact serialization to jws b64 + decoded maps */ if (lws_jws_compact_decode((const char *)ex_a2_compact, strlen((char *)ex_a2_compact), &jwe.jws.map, &jwe.jws.map_b64, (char *)temp, &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(ex_a2_ptext) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], ex_a2_ptext, sizeof(ex_a2_ptext))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(ex_a2_ptext, sizeof(ex_a2_ptext)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* JWE creation using RSAES-PKCS1-v1_5 and AES_128_CBC_HMAC_SHA_256 * * This example encrypts a different, larger plaintext using the jwk key from * the test above, and AES_128_CBC_HMAC_SHA_256 for content encryption. */ static const char *rsa256a128_jose = "{ \"alg\":\"RSA1_5\",\"enc\":\"A128CBC-HS256\"}"; static uint8_t /* plaintext is 1024 bytes from /dev/urandom */ ra_ptext_1024[] = { 0xfe, 0xc6, 0x4f, 0x3e, 0x4a, 0x19, 0xe9, 0xd7, 0xc2, 0x13, 0xe7, 0xc5, 0x78, 0x6e, 0x71, 0xf6, 0x6e, 0xdd, 0x04, 0xaf, 0xaa, 0x4e, 0xa8, 0xad, 0xd8, 0xe0, 0xb3, 0x32, 0x97, 0x43, 0x7c, 0xd8, 0xd1, 0x5f, 0x56, 0xac, 0x70, 0xaf, 0x7d, 0x0b, 0x40, 0xa1, 0x96, 0x71, 0x7c, 0xc4, 0x4a, 0x37, 0x0b, 0xa6, 0x06, 0xb3, 0x8c, 0x87, 0xee, 0xb6, 0x15, 0xfe, 0xaa, 0x60, 0x7e, 0x7f, 0xdc, 0xb0, 0xff, 0x96, 0x4b, 0x30, 0x60, 0xcf, 0xc6, 0x5d, 0x09, 0x6a, 0x6f, 0x66, 0x0c, 0x5f, 0xb0, 0x6f, 0x61, 0xa6, 0x26, 0x02, 0xbd, 0x46, 0xda, 0xa3, 0x73, 0x19, 0x17, 0xff, 0xe0, 0x5f, 0x30, 0x72, 0x7d, 0x17, 0xd8, 0xb2, 0xbe, 0x84, 0x3e, 0x4d, 0x76, 0xbd, 0x62, 0x5d, 0x63, 0xfe, 0x11, 0x32, 0x11, 0x41, 0xdc, 0xed, 0x96, 0xfd, 0x31, 0x38, 0x6a, 0x84, 0x55, 0x7a, 0x33, 0x3f, 0x37, 0xc3, 0x37, 0x7b, 0xc1, 0xb7, 0x89, 0x00, 0x39, 0xa6, 0x94, 0x91, 0xb7, 0x19, 0x6b, 0x1d, 0x99, 0xeb, 0xf6, 0x10, 0xb9, 0xd2, 0xcd, 0x15, 0x0d, 0xbc, 0x24, 0x34, 0x9a, 0x52, 0x64, 0x21, 0x72, 0x1e, 0x9a, 0x00, 0xf2, 0xcf, 0xf1, 0x7d, 0x1a, 0x12, 0x8d, 0x39, 0xbc, 0xf9, 0x09, 0xfd, 0xd9, 0x22, 0x27, 0x28, 0xe1, 0x3a, 0x0b, 0x82, 0xba, 0x9a, 0xe5, 0x9d, 0xa8, 0x12, 0x6e, 0xf5, 0x4b, 0xc7, 0x2b, 0x9c, 0xdc, 0xfe, 0xf3, 0xe8, 0x74, 0x65, 0x3d, 0xe0, 0xaa, 0x64, 0xf3, 0x43, 0xa4, 0x88, 0xa8, 0xbe, 0x60, 0xdb, 0xfd, 0x2d, 0x3b, 0x84, 0x82, 0x8f, 0x4d, 0xbb, 0xe4, 0xa9, 0x59, 0xe3, 0x6c, 0x52, 0x45, 0xe4, 0x34, 0xdb, 0x28, 0x0e, 0x4a, 0x44, 0xb6, 0x9a, 0x25, 0x9b, 0x3b, 0xae, 0xe1, 0x12, 0x1d, 0x1c, 0x66, 0x7d, 0xb9, 0x5b, 0x5f, 0xc2, 0x4a, 0xaa, 0xd2, 0xe9, 0x65, 0xe2, 0x85, 0x6f, 0xf6, 0x67, 0x66, 0x8e, 0x0b, 0xd2, 0x60, 0xf8, 0x43, 0x60, 0x04, 0x9b, 0xa9, 0x3a, 0x6a, 0x3c, 0x02, 0x3c, 0x08, 0x9d, 0x60, 0x1c, 0xc4, 0x27, 0x3e, 0xff, 0xd0, 0x70, 0x94, 0x43, 0x3e, 0x9e, 0x69, 0x19, 0x22, 0xf0, 0xec, 0x26, 0x2d, 0xa5, 0x71, 0xf3, 0x92, 0x61, 0x95, 0xce, 0xc3, 0xc0, 0xa0, 0xc3, 0x98, 0x22, 0xdd, 0x32, 0x3c, 0x48, 0xcb, 0xd1, 0x61, 0xa0, 0xaa, 0x9a, 0x7e, 0x5a, 0xfa, 0x26, 0x46, 0x49, 0xfc, 0x9c, 0xaa, 0x21, 0x06, 0x45, 0xf1, 0xa0, 0xc9, 0xef, 0x6b, 0x89, 0xf2, 0x01, 0x20, 0x54, 0xfa, 0x0a, 0x23, 0xff, 0xbd, 0x64, 0x35, 0x94, 0xfd, 0x35, 0x70, 0x52, 0x94, 0x66, 0xc5, 0xd0, 0x27, 0xc1, 0x8f, 0x6d, 0xc4, 0xa3, 0x34, 0xc2, 0xea, 0xf0, 0xb3, 0x0d, 0x6c, 0x13, 0xb5, 0xc9, 0x6e, 0x5c, 0xeb, 0x8b, 0x7b, 0xf5, 0x21, 0x4c, 0xe3, 0xb7, 0x73, 0x6d, 0x07, 0xaa, 0x44, 0xc4, 0xba, 0xc5, 0xa5, 0x0e, 0x75, 0x28, 0xb7, 0x50, 0x22, 0x54, 0xa7, 0xe1, 0x2e, 0xfd, 0x20, 0xcd, 0xa4, 0x31, 0xa3, 0xb2, 0x73, 0x98, 0x7c, 0x3c, 0x8f, 0xa3, 0x40, 0x8a, 0xaf, 0x31, 0xfa, 0xf9, 0x70, 0x4d, 0x83, 0x10, 0xc4, 0xa0, 0x9c, 0xd6, 0xa3, 0xd5, 0x07, 0xaf, 0xaf, 0x35, 0x15, 0xd0, 0x84, 0x09, 0x20, 0x36, 0x88, 0xac, 0x6f, 0x16, 0x5e, 0x03, 0xa9, 0xfc, 0xb3, 0x2d, 0x01, 0x57, 0xb3, 0xed, 0x4b, 0x55, 0x2b, 0xbc, 0x92, 0x87, 0x3e, 0x27, 0xc4, 0x2c, 0x44, 0xac, 0x05, 0x5f, 0x26, 0xe7, 0xe9, 0xb0, 0x2d, 0x6b, 0x3c, 0x8c, 0xd2, 0xb4, 0x3c, 0xb4, 0x86, 0xfe, 0x68, 0x99, 0x2a, 0x42, 0xac, 0xa4, 0xb3, 0x89, 0x61, 0xb3, 0xd1, 0xdf, 0x9b, 0x58, 0xc7, 0x81, 0x62, 0x87, 0x26, 0x52, 0x51, 0xe7, 0x7d, 0x7c, 0x37, 0x14, 0xe5, 0x19, 0x28, 0x34, 0x3e, 0x95, 0x17, 0x36, 0x12, 0xf9, 0x5e, 0xc1, 0x3c, 0x9c, 0x28, 0x70, 0x06, 0xdf, 0xc4, 0x6d, 0x25, 0x04, 0x46, 0xe0, 0x95, 0xf0, 0xc8, 0x57, 0x48, 0x27, 0x26, 0xf3, 0xf7, 0x19, 0xbe, 0xea, 0xb4, 0xd4, 0x64, 0xaf, 0x67, 0x7c, 0xf5, 0xa9, 0xfb, 0x85, 0x4a, 0x43, 0x9c, 0x62, 0x06, 0x5e, 0x28, 0x2a, 0x7b, 0x1e, 0xb3, 0x07, 0xe7, 0x19, 0x32, 0xa4, 0x4e, 0xb4, 0xce, 0xe0, 0x92, 0x56, 0xf5, 0x10, 0xcb, 0x56, 0x34, 0x4b, 0x0d, 0xe1, 0xd3, 0x6d, 0xfe, 0xf0, 0x44, 0xf7, 0x22, 0x1d, 0x5e, 0x6b, 0xa7, 0xa5, 0x83, 0x2e, 0xeb, 0x14, 0xf2, 0xd7, 0x27, 0x5a, 0x2a, 0xd2, 0x55, 0x35, 0xe6, 0x7e, 0xd9, 0x3b, 0xac, 0x4e, 0x5a, 0x22, 0x46, 0xd5, 0x7b, 0x57, 0x9c, 0x58, 0xfe, 0xd0, 0xda, 0xbf, 0x7d, 0xe9, 0x8c, 0xb7, 0xba, 0x88, 0xf1, 0xc3, 0x82, 0x53, 0xc3, 0x66, 0x20, 0x51, 0x12, 0xd3, 0xf9, 0xaf, 0xe9, 0xcb, 0xc1, 0x7a, 0xe6, 0x22, 0x44, 0xa5, 0xdf, 0x18, 0xb3, 0x6e, 0x6c, 0xba, 0xf3, 0xc6, 0x24, 0x5a, 0x1c, 0x67, 0xa6, 0xa5, 0xb4, 0xb1, 0x35, 0xdf, 0x5a, 0x60, 0x5c, 0x0b, 0x66, 0xd3, 0x1f, 0x4e, 0x7c, 0xcb, 0x93, 0x7e, 0x2f, 0x6d, 0xbd, 0xce, 0x26, 0x52, 0x44, 0xee, 0xbb, 0xd8, 0x8f, 0xf2, 0x67, 0x38, 0x0d, 0x3b, 0xaa, 0x21, 0x73, 0xf8, 0x3b, 0x54, 0x9d, 0x4e, 0x5e, 0xf1, 0xa2, 0x18, 0x5a, 0xf1, 0x6c, 0x32, 0xbf, 0x0a, 0x73, 0x14, 0x48, 0x4f, 0x56, 0xc0, 0x87, 0x6d, 0x3b, 0x16, 0xcc, 0x3f, 0x44, 0x19, 0x85, 0x22, 0x43, 0x5f, 0x8c, 0x29, 0xbd, 0xa0, 0xce, 0x84, 0xd9, 0x4a, 0xcf, 0x00, 0x6b, 0x37, 0x35, 0xe0, 0xb3, 0xc9, 0xd1, 0x58, 0xd1, 0x1b, 0xc3, 0x6f, 0xe3, 0x50, 0xdb, 0xa6, 0x5e, 0x03, 0x18, 0xe5, 0xe2, 0xc1, 0x97, 0xd5, 0xf8, 0x42, 0x6f, 0xe6, 0x61, 0x80, 0xc9, 0x7c, 0xc6, 0x83, 0xf0, 0xad, 0x70, 0x13, 0x0e, 0x26, 0x75, 0xc0, 0x12, 0x23, 0x14, 0xef, 0x1f, 0xdf, 0xfd, 0x47, 0x99, 0x9f, 0x22, 0xf3, 0x57, 0x21, 0xdc, 0x38, 0xe4, 0x79, 0x87, 0x5b, 0x67, 0x66, 0xdd, 0x0b, 0xe0, 0xae, 0xb5, 0x97, 0xd8, 0xa6, 0x5d, 0x02, 0xcf, 0x6b, 0x84, 0x19, 0xc1, 0xbb, 0x25, 0xd2, 0x10, 0xb9, 0x63, 0xeb, 0x4b, 0x27, 0x8d, 0x05, 0x31, 0xce, 0x3b, 0x0c, 0x5f, 0xd4, 0x83, 0x47, 0xa4, 0x8b, 0xc4, 0x76, 0x33, 0x74, 0x1a, 0x07, 0xf8, 0x18, 0x82, 0x1c, 0x8e, 0x01, 0x75, 0x78, 0xea, 0xd9, 0x72, 0x61, 0x71, 0xa9, 0x09, 0x44, 0x7b, 0x0f, 0x12, 0xcf, 0x4c, 0x76, 0x7b, 0x69, 0xc8, 0x64, 0x98, 0x60, 0x45, 0xb6, 0xc7, 0x6b, 0xd8, 0x43, 0x99, 0x08, 0xc9, 0xd3, 0x6f, 0x01, 0x4f, 0x57, 0x6f, 0x49, 0x4f, 0x4f, 0x72, 0xa4, 0xa2, 0x45, 0xe1, 0x0e, 0xf2, 0x08, 0x3e, 0x67, 0xc3, 0x83, 0x5b, 0xb1, 0x24, 0xc0, 0xe0, 0x3a, 0xf5, 0x1f, 0xf2, 0x06, 0x4b, 0xa7, 0x6f, 0xd2, 0xb2, 0x81, 0x96, 0x91, 0x42, 0xb1, 0x53, 0x65, 0x3a, 0x12, 0xcd, 0x33, 0xb3, 0x7e, 0x79, 0xc0, 0x46, 0xf6, 0xd8, 0x4a, 0x22, 0x35, 0xb8, 0x3f, 0xe4, 0x08, 0x88, 0x49, 0x3c, 0x73, 0x9a, 0x44, 0xe3, 0x3b, 0xcc, 0xc4, 0xae, 0x7c, 0xbe, 0xfd, 0xa6, 0x4a, 0xd4, 0x26, 0x52, 0x58, 0x81, 0x30, 0x66, 0x44, 0x54, 0xc8, 0xe4, 0x7c, 0x5b, 0x63, 0x06, 0x60, 0x94, 0x62, 0xe5, 0x47, 0x45, 0xfb, 0x58, 0xf5, 0x6a, 0x7c, 0xb2, 0x35, 0x08, 0x03, 0x15, 0x68, 0xb3, 0x13, 0xa5, 0xbd, 0xf2, 0x1e, 0x2e, 0x1c, 0x8f, 0xc6, 0xc7, 0xd1, 0xa9, 0x64, 0x37, 0x2b, 0x23, 0xfa, 0x7e, 0x56, 0x22, 0xf0, 0x8a, 0xbd, 0xeb, 0x04 }, r256a128_cek[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f } ; static int test_jwe_ra_ptext_1024(struct lws_context *context, char *jwk_txt, int jwk_len) { char temp[4096], compact[4096]; struct lws_jwe jwe; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); /* reuse the rsa private key from the JWE Appendix 2 test above */ if (lws_jwk_import(&jwe.jwk, NULL, NULL, jwk_txt, jwk_len) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* dup the plaintext, it will be replaced in-situ by the ciphertext */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_CTXT, lws_concat_temp(temp, temp_len), &temp_len, ra_ptext_1024, sizeof(ra_ptext_1024), 0)) { lwsl_notice("%s: Not enough temp space for ptext\n", __func__); goto bail; } /* dup the cek, since it will be replaced by the encrypted key */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_EKEY, lws_concat_temp(temp, temp_len), &temp_len, r256a128_cek, sizeof(r256a128_cek), LWS_JWE_LIMIT_KEY_ELEMENT_BYTES)) { lwsl_notice("%s: Not enough temp space for EKEY\n", __func__); goto bail; } jwe.jws.map.buf[LJWE_JOSE] = rsa256a128_jose; jwe.jws.map.len[LJWE_JOSE] = strlen(rsa256a128_jose); n = lws_jwe_parse_jose(&jwe.jose, jwe.jws.map.buf[LJWE_JOSE], jwe.jws.map.len[LJWE_JOSE], lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } n = lws_jwe_encrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt failed\n", __func__); goto bail; } n = lws_jwe_render_compact(&jwe, compact, sizeof(compact)); if (n < 0) { lwsl_err("%s: lws_jwe_render_compact failed: %d\n", __func__, n); goto bail; } // puts(compact); lws_jwe_destroy(&jwe); lws_jwe_init(&jwe, context); temp_len = sizeof(temp); /* now we created the encrypted version, see if we can decrypt it */ if (lws_jwk_import(&jwe.jwk, NULL, NULL, jwk_txt, jwk_len) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } if (lws_jws_compact_decode(compact, n, &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: failed to parse generated compact\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(ra_ptext_1024) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], ra_ptext_1024, sizeof(ra_ptext_1024))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(ra_ptext_1024, sizeof(ra_ptext_1024)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } static const char *rsa256a192_jose = "{ \"alg\":\"RSA1_5\",\"enc\":\"A192CBC-HS384\"}"; static const uint8_t r256a192_cek[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f } ; static int test_jwe_r256a192_ptext(struct lws_context *context, char *jwk_txt, int jwk_len) { struct lws_jwe jwe; char temp[4096], compact[4096]; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); /* reuse the rsa private key from the JWE Appendix 2 test above */ if (lws_jwk_import(&jwe.jwk, NULL, NULL, jwk_txt, jwk_len) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* * dup the plaintext into the ciphertext element, it will be * encrypted in-place to a ciphertext of the same length */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_CTXT, lws_concat_temp(temp, temp_len), &temp_len, ra_ptext_1024, sizeof(ra_ptext_1024), 0)) { lwsl_notice("%s: Not enough temp space for ptext\n", __func__); goto bail; } /* copy the cek, since it will be replaced by the encrypted key */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_EKEY, lws_concat_temp(temp, temp_len), &temp_len, r256a192_cek, sizeof(r256a192_cek), LWS_JWE_LIMIT_KEY_ELEMENT_BYTES)) { lwsl_err("Problem getting random\n"); goto bail; } jwe.jws.map.buf[LJWE_JOSE] = rsa256a192_jose; jwe.jws.map.len[LJWE_JOSE] = strlen(rsa256a192_jose); n = lws_jwe_parse_jose(&jwe.jose, jwe.jws.map.buf[LJWE_JOSE], jwe.jws.map.len[LJWE_JOSE], lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } n = lws_jwe_encrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt failed\n", __func__); goto bail; } n = lws_jwe_render_compact(&jwe, compact, sizeof(compact)); if (n < 0) { lwsl_err("%s: lws_jwe_render_compact failed: %d\n", __func__, n); goto bail; } // puts(compact); /* now we created the encrypted version, see if we can decrypt it */ lws_jwe_destroy(&jwe); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, jwk_txt, jwk_len) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } if (lws_jws_compact_decode(compact, n, &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: failed to parse generated compact\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(ra_ptext_1024) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], ra_ptext_1024, sizeof(ra_ptext_1024))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(ra_ptext_1024, sizeof(ra_ptext_1024)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } static const char *rsa256a256_jose = "{ \"alg\":\"RSA1_5\",\"enc\":\"A256CBC-HS512\"}"; static const uint8_t r256a256_cek[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f } ; static int test_jwe_r256a256_ptext(struct lws_context *context, char *jwk_txt, int jwk_len) { struct lws_jwe jwe; char temp[4096], compact[4096]; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); /* reuse the rsa private key from the JWE Appendix 2 test above */ if (lws_jwk_import(&jwe.jwk, NULL, NULL, jwk_txt, jwk_len) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* * dup the plaintext into the ciphertext element, it will be * encrypted in-place to a ciphertext of the same length */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_CTXT, lws_concat_temp(temp, temp_len), &temp_len, ra_ptext_1024, sizeof(ra_ptext_1024), 0)) { lwsl_notice("%s: Not enough temp space for ptext\n", __func__); goto bail; } /* copy the cek, since it will be replaced by the encrypted key */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_EKEY, lws_concat_temp(temp, temp_len), &temp_len, r256a256_cek, sizeof(r256a256_cek), LWS_JWE_LIMIT_KEY_ELEMENT_BYTES)) { lwsl_err("Problem getting random\n"); goto bail; } jwe.jws.map.buf[LJWE_JOSE] = rsa256a256_jose; jwe.jws.map.len[LJWE_JOSE] = strlen(rsa256a256_jose); n = lws_jwe_parse_jose(&jwe.jose, rsa256a256_jose, strlen(rsa256a256_jose), lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } n = lws_jwe_encrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt failed\n", __func__); goto bail; } n = lws_jwe_render_compact(&jwe, compact, sizeof(compact)); if (n < 0) { lwsl_err("%s: lws_jwe_render_compact failed: %d\n", __func__, n); goto bail; } // puts(compact); /* now we created the encrypted version, see if we can decrypt it */ lws_jwe_destroy(&jwe); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, jwk_txt, jwk_len) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } if (lws_jws_compact_decode(compact, n, &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: failed to parse generated compact\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(ra_ptext_1024) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], ra_ptext_1024, sizeof(ra_ptext_1024))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(ra_ptext_1024, sizeof(ra_ptext_1024)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* produced by running the minimal example `lws-crypto-jwk -t RSA -b 2048 -c` */ static const char *rsa_key_2048 = "{" "\"e\":\"AQAB\"," "\"kty\":\"RSA\"," "\"n\":\"lBJdvUq-9_8hlcduIWuBjRb0tGzzAvS4foqoNCO7g-rOXMdeAcmq" "aSzWTbkaGIc3L1I4-Q3TOZtxn2UhuDlShZRIhM6JCQuUVNVAF3TD7oXxHtZ" "LJ7y_BqCUlrAmW31lu-nVmhY2G3xW26yXWUsDbCxz0hfLbVnXRSvVKLzYWm" "_yyrFyEWfxB8peDocvKGh879z_aPCKE3PDOEl2AsgzYfpnWCLytkgnrTeL6" "qY8HXxvvV-Jw-XMaRiwH0VldpIjs4DaoN35Kj1Ex7QOZznTkbYtMIqse8bR" "LoR8Irkxbc5ncUAuX1KSV6lpPtelsA3RtEjJ4NHV-5eEABiYh8_CFQ\"," "\"d\":\"DDpguQ9RVQFMoJC5z2hlkvq91kvsXPv2Y9Dcki256xYlg55H7Pre" "p__hahrABR2Jg6QVJhArt5ABjUnDQ_JL69HH6VvLD6RVVBTQ-FRBZ_3HYKY" "Oynx5BA7tJm1BRatF5FkBCvq27i8nAc4vfjAb22o9CFvEW3FLaKAgOCncQ3" "Tnbz9CddH89n7DXw4kBFI8q5ugF_aRIg5-i42W_hQinLaBhZ_zhAuE-nvlt" "ZnhDal8cX3T60lNoUrDOlirqEOXKO3gXCHpm3csZ6nabHYD1UCyHOmi2RsR" "pzjaiqjXdPbwPzQoh2DcYpavNrf1mtHiqTwLZDTJIRHWHufJzHf-sw\"," "\"p\":\"ySeC3FtvzduDEL-FX4JqbRN06PdBhUmosCkymmbBjriuLNpkGkG-" "1ex7r-M8neUBZbctmDdih6cpLZ8hjZv3eEDZ4b5Z2LqZnja4QvVoWLUs4Fb" "NN_PxJCR5H28uUfT6ThxqT0Nb2enb8Dyp0Qxvd7eJUeYz6jOt7pEK-ErTB4" "M\"," "\"q\":\"vHG2Pd6QUH7vFZjJtXwmlVnrz5tdJvUPQvz7ggeM69cqhf4vLajz" "sqP9GhJr7bEkp6vKVdZGmfEdiFRD8cssIZq651oAO5Wr7zZd2mR_hG9jZx7" "8Davfuxr4SZNN-bmoxO6dbDi-X2c7fvMI2YeJwL4groNKyiosdUYILTrYRI" "c\"," "\"dp\":\"h5Gqf2rcokgEQGBjuigCJDtNuskRjoxDNV6-rRL99nt_X9lcR9n" "xjOnRvowOyXeTBoN7JjCFpllBxm6ORYtNMO28KomIsimo6NmGPBJ7XfXVJe" "k6bDBrX-l4_HeJJ1FM9SHvgDYsjGQxh-rKpIqWAYBf-yOD758e5T85vndnX" "JM\"," "\"dq\":\"K9LiB-dfdmjenw4mMp-JtYfw8Bn4gtvQzcpZjzbETgB-8iRXwm2" "dJvk-HjcUhHWCyb-I0YeAacKKFK9MEconHDWIq87haPn4vyvMjcJ7aUgiPN" "QW1_MVl8TA4xNvudi0Z__5-jYEB9nRG0fX0gbUQU-19_-uf-9o4WkE88fQj" "bc\"," "\"qi\":\"LEkTRqmomn9UiASeRfAKw-Z5q7cye9CSL4luSexFvA3Du7Oin-s" "L9a7F3nJN4CuYzhtNMxQ0hM7k6ExzhDhXDlNRHxnNEDt81-CFRV98v7GVWV" "SH1KnaKf9wgegxSSm-x536ki2SI8EN4k4qkqRF0iLVHZK7CgnWMbtt6tnpp" "3k\"" "}"; /* produced by running the minimal example `lws-crypto-jwk -t RSA -b 4096 -c` */ static const char *rsa_key_4096 = "{" "\"e\":\"AQAB\"," "\"kty\":\"RSA\"," "\"n\":\"uiLBz1SUgd4eQ0okg6tlPdk9QUhTsqXmiJXygWVFgzT45E5_Rfkq" "vZ2fwAqQ8DvxkDTUWiKpeXMpPRNWG5GxuBuq9n7xdA1vn1eQi8LoekB28dg" "3MwMfozVSKCzyxG1f81xPE5x3EMVhCcx6hshhlMEHkzNNhE07d-oRO87ZC0" "z_5L3Vh03uJBXaDKVlsgHAazoHLhn6G4odqv-ro54T6Nx1eEtyTnMmFY5ND" "V4rN0SjQvSefbZZtsrtby8Z0JmeyvynmDwOINj7FpmPmpFLoWGXntc2yxPP" "8SHnqfT9ESh94fxCMxRhDNohgpegRHyiYwj3M5ZYY6reCZYfOQONSWmc8yp" "NBMJqj4LuJ2bTMGAFS17ZP4ZZWm5RP9ax100Dgk0yxP1UrybG5dCfJRQvHC" "ncxG_aL6cSQu2o4fXqlJsNHxk3FjHtV_CMZ3tqvGTvwrs4yxvKwKv6r3fRh" "KL01bGOePzp9THkHW2-lzVj6kUwnxBdHGZE6fcAnczOdp8ZIEdV1w6ThimC" "m3Bw_TIyl3tkuxRWXpc_d6Q4iiSVKGKCvUvfAlESpTA4tIhQkij-T9FEoj2" "WE2H1D35AKmjcfLCh6yszu8cmDNedn862pwnawE2RvRFAyuI113fLQeCbCz" "tQ1JHuD8cnQt0hpGzReTa5UJ8OEOGIlyXNdWZyTpk\"," "\"d\":\"G2ZW582AT-6xvz-IiP5fuJ9EMloygeuEeEo0aMJO3X3cfoUknJkN" "ZtyvYa5cgBSe3la8hKkyD9_5K9WvGP9VLTAbdk4g_m-k5QyXiU9PeAGJ0Nd" "-Zqq4y0Zj2eil8u7Tz0fhFxay-zvG6VGZnsIcBTD2C7_jUwyoaqJA17A_CH" "gU-ifMqS56VgMGdlKZmf7Cg7ZGzM1DoS6vZ9bbfgoczaw4OZVHlg9Cxa0NI" "CDi1S-sJcTLGN_RLISKN5H0J54ZfzF6fUEn5kNykLTZrAvj2XV7g4UUOogn" "1cvjJYRcBVzTzQKcfxbqo2DvymDGFZbQM6pj80rYJ5HFPh2EapjggPN8hXp" "NlTNDEvC84QFv0lo2E-0nVWQqcyHtXd431O1JH2h5X822zKjXxkaztQSCj9" "YP7AdAeoxIaWOa3aO1vcwURH2WWaNV-_KXVkPJNzfo9-bGYwblMw_RIqIkN" "BDayTb8rBuQHTCE_tSEHgoSnkityGpr8j_vgA-Fa-SqmdqUlbklVpwA_Mq_" "UH7RCaqe91dWxRhS_7c85tFMRFCKOcaRXkwxEpP2LD1AYe8yvVQlr0Se8_d" "RefuQcC-BECwMW-TCgR3VxAuL7ExNTYe4bhBD8WYXsHP7wDXWX2Q4v7IRzj" "cfVIdpTNYuWEd69PvXBCuy75hmDniSmS3Xps3ItGU\"," "\"p\":\"961BtLSIZkHO7Vu1KfaA3urcwGpISKJiTSB5Nh6npxJr9mSjzv_f" "e8VoxCX6CWGY0SEeQNUQ6ceTnAAxkSHtZJQGed598jBtxIexAWEE7oc9s9d" "b0cWu4QWIVZYXrcOTEWmK1kWN4PXmnnQknrWQF49adn81BaOXqoL-tahe7f" "faXzXe0RXuohK543ZKbuuHQ2TxqFG7CZpXiH_qn1Syao32u0V3iDFpmmCUV" "h9O2JCzfo8sAosTrnQwC0pXz3Nvr_9Cnk6bMluJoMrwB1Ywg_DPQ1WvpYHO" "URezEOqVC8Y3zrko199TMX2COKGNFgutVpnzxs2_h0PyINUmwrY4zQ\"," "\"q\":\"wGQRaxy_gBafbrVJy4f32O0a2FQHzmS--WgHhoteDoF6ZAajLcV0" "GEvb-AVmFER1Wii62BFaFJOYQIegELvnBFFzD6oHJRX7bM4m36G8J_TC1o9" "T1IFnxOpaoFDf4JWf2k7DCXClGg_zueyOD8fj8F6j2nqpOfytuLmikHcWMc" "dGTHTCRtQmvOk3pm0uk2qR0cQb5L3Ocv45tCKr55tMc6Zx3DKkMt1kmUwd2" "HFfk_0WM6R7q4LNGIjwl8dwiERppLKA8xao9i3jOOdFEfAD-Zqv8H-32cyH" "Mg6Guo4tPNAYSzcsz8nbEYPtKVVm-PDuM2cx0iaKnS8BIK2XTbzc_Q\"," "\"dp\":\"ZXLWIwp_hEMYWyjhP9r0VlqlKTtfeEDrOuQ-Qei0iz6EclwurK8" "p_yyRCSb1D7qmOaLzHWMollllINUDeIsJDdWEAY8cz4L-sy1RV1tCBeHnaC" "6iMX5jb1Aw072y3T3qk4tDjxjWUHroh6bTCR8dckkJqNfaBAFKMlGNuyLIH" "3kSPUV3ivUM1d4NvhnJyz02HmjOgz9W-Uv65rJei_zJR9P2aCbAG00CEHXW" "zJ_uT86VdxV11WTaHu8Abt94sER8Tv6jbuyLrUjJSs9VGew32xNcEhya4ZQ" "VyimG8zri6fu7CDXXgPS8wtzB5ihl_c2ypnJQ4_GKrgEqwEAOrFqvUQ\"," "\"dq\":\"uzlmngcm8R6S3qi7fL7_2fG7uyPjSN5P3uR21l8QFCu6kFbJO8S" "4muBP20hds4F_dlLGqXgRYo7TjpCtmztQsKoWv_ql41hGCfeAawa41WViqm" "xmlxmrgzzRHsw1YhgZrNgTAz_E290EQT3Mbd0HnCZtbDMMNisIYAj_A3lwd" "tbHOaYyXb0dSZ_nkSUVO05tQ2aGAo8Xtl5ih0NqaQR_XNhwW2pI0lsTB__D" "15tU-O5FSdJaq2ip8KNrBzmF8IYrDKTNykKWAKRdSEX_uFoLdD8t0mxn3SM" "luffa8vdjXJfh3GiASmHUt3HcPOooQEAufoWBPVJWeGqCvWtRH8yYfQ\"," "\"qi\":\"h-e9es5J49OUF48gSXUI8cynZ8ydv5cThXc1deV3mil_7_7Hg8E" "jV3gAErO4l-irHJplFmHFZvU1ud4zs1gtBt5TA-EeeepYOHMSssWDvDK3WI" "zsM6C3vcNTSkT-ihaSFmPWHCVwJ1R3auWfeI2In3at0jd4t-OK-cCcGZXb7" "90-EnyyDcdFTU9WfwVSOJffRGjoUYX8DexavClv7CBzPhpdUzGoeyarNaG4" "z9MI8Q8txHyHgc_D70lZUum1cj0bZwgEj6yDzOPzSgUmICFJiLDDj93oPaI" "v-5CQ_Ckju7icexc_kuuYTKBOLTj_vfaURnV3KCHul2UljUYOxkfeNQ\"" "}"; static const char *rsa_key_4096_no_optional = "{" "\"e\":\"AQAB\"," "\"kty\":\"RSA\"," "\"n\":\"uiLBz1SUgd4eQ0okg6tlPdk9QUhTsqXmiJXygWVFgzT45E5_Rfkq" "vZ2fwAqQ8DvxkDTUWiKpeXMpPRNWG5GxuBuq9n7xdA1vn1eQi8LoekB28dg" "3MwMfozVSKCzyxG1f81xPE5x3EMVhCcx6hshhlMEHkzNNhE07d-oRO87ZC0" "z_5L3Vh03uJBXaDKVlsgHAazoHLhn6G4odqv-ro54T6Nx1eEtyTnMmFY5ND" "V4rN0SjQvSefbZZtsrtby8Z0JmeyvynmDwOINj7FpmPmpFLoWGXntc2yxPP" "8SHnqfT9ESh94fxCMxRhDNohgpegRHyiYwj3M5ZYY6reCZYfOQONSWmc8yp" "NBMJqj4LuJ2bTMGAFS17ZP4ZZWm5RP9ax100Dgk0yxP1UrybG5dCfJRQvHC" "ncxG_aL6cSQu2o4fXqlJsNHxk3FjHtV_CMZ3tqvGTvwrs4yxvKwKv6r3fRh" "KL01bGOePzp9THkHW2-lzVj6kUwnxBdHGZE6fcAnczOdp8ZIEdV1w6ThimC" "m3Bw_TIyl3tkuxRWXpc_d6Q4iiSVKGKCvUvfAlESpTA4tIhQkij-T9FEoj2" "WE2H1D35AKmjcfLCh6yszu8cmDNedn862pwnawE2RvRFAyuI113fLQeCbCz" "tQ1JHuD8cnQt0hpGzReTa5UJ8OEOGIlyXNdWZyTpk\"," "\"d\":\"G2ZW582AT-6xvz-IiP5fuJ9EMloygeuEeEo0aMJO3X3cfoUknJkN" "ZtyvYa5cgBSe3la8hKkyD9_5K9WvGP9VLTAbdk4g_m-k5QyXiU9PeAGJ0Nd" "-Zqq4y0Zj2eil8u7Tz0fhFxay-zvG6VGZnsIcBTD2C7_jUwyoaqJA17A_CH" "gU-ifMqS56VgMGdlKZmf7Cg7ZGzM1DoS6vZ9bbfgoczaw4OZVHlg9Cxa0NI" "CDi1S-sJcTLGN_RLISKN5H0J54ZfzF6fUEn5kNykLTZrAvj2XV7g4UUOogn" "1cvjJYRcBVzTzQKcfxbqo2DvymDGFZbQM6pj80rYJ5HFPh2EapjggPN8hXp" "NlTNDEvC84QFv0lo2E-0nVWQqcyHtXd431O1JH2h5X822zKjXxkaztQSCj9" "YP7AdAeoxIaWOa3aO1vcwURH2WWaNV-_KXVkPJNzfo9-bGYwblMw_RIqIkN" "BDayTb8rBuQHTCE_tSEHgoSnkityGpr8j_vgA-Fa-SqmdqUlbklVpwA_Mq_" "UH7RCaqe91dWxRhS_7c85tFMRFCKOcaRXkwxEpP2LD1AYe8yvVQlr0Se8_d" "RefuQcC-BECwMW-TCgR3VxAuL7ExNTYe4bhBD8WYXsHP7wDXWX2Q4v7IRzj" "cfVIdpTNYuWEd69PvXBCuy75hmDniSmS3Xps3ItGU\"," "\"p\":\"961BtLSIZkHO7Vu1KfaA3urcwGpISKJiTSB5Nh6npxJr9mSjzv_f" "e8VoxCX6CWGY0SEeQNUQ6ceTnAAxkSHtZJQGed598jBtxIexAWEE7oc9s9d" "b0cWu4QWIVZYXrcOTEWmK1kWN4PXmnnQknrWQF49adn81BaOXqoL-tahe7f" "faXzXe0RXuohK543ZKbuuHQ2TxqFG7CZpXiH_qn1Syao32u0V3iDFpmmCUV" "h9O2JCzfo8sAosTrnQwC0pXz3Nvr_9Cnk6bMluJoMrwB1Ywg_DPQ1WvpYHO" "URezEOqVC8Y3zrko199TMX2COKGNFgutVpnzxs2_h0PyINUmwrY4zQ\"," "\"q\":\"wGQRaxy_gBafbrVJy4f32O0a2FQHzmS--WgHhoteDoF6ZAajLcV0" "GEvb-AVmFER1Wii62BFaFJOYQIegELvnBFFzD6oHJRX7bM4m36G8J_TC1o9" "T1IFnxOpaoFDf4JWf2k7DCXClGg_zueyOD8fj8F6j2nqpOfytuLmikHcWMc" "dGTHTCRtQmvOk3pm0uk2qR0cQb5L3Ocv45tCKr55tMc6Zx3DKkMt1kmUwd2" "HFfk_0WM6R7q4LNGIjwl8dwiERppLKA8xao9i3jOOdFEfAD-Zqv8H-32cyH" "Mg6Guo4tPNAYSzcsz8nbEYPtKVVm-PDuM2cx0iaKnS8BIK2XTbzc_Q\"" "}"; /* This is a compact JWE containing the plaintext ra_ptext_1024 for the key * lws_jwe_ex_a2_jwk_json... produced by test test above running on OpenSSL. */ static char *jwe_compact_rsa_cbc_openssl = "eyAiYWxnIjoiUlNBMV81IiwiZW5jIjoiQTEyOENCQy1IUzI1NiJ9" "." "mWXwMv4hxwgKbUAyMFAuHxiKjg62Z5owkFYLgxho5FNT3Hm5ZGiF8plS5W3NwUTmv8t6C" "I0kV5cOOJXE_PXPaOptsie2aoQR-_Bs6gAFixa7aZNsnsMF4lMAiIy7VkrvP2qh0s04y2" "2poOLfmS93tB9AyWdlnQ6Z-U1wzrM9kncqO9GpPol9M4WnAss1ZtTE-9Tbc7dMHURHbZb" "vHn2h625pBD8oD_s0osRav8YEw7jNeQjW_ch4pI6HRox-hf0dyLtk9yFCtBjxbCvysadW" "SlZPJBj0HYv0BVqCK0fETi7URx4MCJ3zgCJnpAuQo2yq1yQzXwOYcFoLIvY0jIm44A" "." "WINMABhU_GQKJarmmTP_-g" "." "V9kHAh9ajE558EPj_zX6p_C903MevMPJLcMU4MWhfhwe1cFW_0io-LvZfcF_Xj7aNoIZd" "vPXJ0On_jHPFsnwe4dus6kuh8RrSKFFV0sGIv-FFXrKB99FFRY_8BTPsYFrcqt_8EV2Af" "p7toaVOO15WXOEH6Ym81a3aOWCVGdj_akMN46Qx_JrQaql-Xs_fL2HdpaEWHHTV2ac9aY" "ah7o0Ojl9UnzkHyXieRgrjXymvCcT0te3D4OQJhrv7TzH_hfKu621O-Frmkr-NvQGSNcl" "fVgRkte2ks34j5HPqEbJQWWKG3IDfkPRvWmDZzEXW_JTrK_1r1FM-aYtY79tLnir8Zw7I" "WCczD-XmtlOJNYA2Ss5dbjoJDtevbqaZWVl-sDSwO1xdf-DUfiemep7S7IFoFAdl0vXLT" "YtuNBxuFw-cP2Kwi8RyF__uENo4vD003cI4htqSYIYXeyAVqWIkmsP1BFpT7MGixfvhAu" "VCj_ToJmowGY3bOHiMuzyT9M7wtCCiCySEBARVU-EdQBXj8X-quSj-0OnBtxXChUS4QXw" "q2pNn3UKSMsxqvHR25HQq_6U2AbvNHxKhup3luzn0T27uy0l3XeWSz_48SwJZKRnbYPtC" "n5Jd5mRdr5GxihpNwupaO4BWnHZo_fHUTI9-Z18lpj_4QB-c3dzDL15xFN4HEZ5lv2iO5" "zMiRI_NlVVDdA9lqGpn4IyO44osHQieBraUjWF8X5cSXDoqktXDVymAdrxe0fYZQca6Bq" "CsBqFTYae4CG01SpG46ysfwAXmsTEKPzj7uiOguFCRB4hClTd-Q8R2axj9JNT1jU_Vb7U" "GKFBGeDJt5PDXJyvW5rHyiQDewykf0Lpvdp39yITT8qARmJl2SwCrDCPADZ4TwwobT42B" "J_Cq5IKgEOeuS3S7NOdOfXxmAcNfN0yujKbmfiOxnXhwnepQ-TnpgTV0nv8snBRITN7mS" "EgflqQlKAZus_0mDbHmBmw1nY-0q4qMWI03IEwMC57-p4JLshnWgIAupnFCGp9nyi4E_s" "GVyQlGCxzC5VSH1Hba3rvbulQGxx_kGk0j56NGhGsQEzqvSuI4xgIsGMPo1Ii7xUh68dd" "BzJRzaov9oDTgnWM5-hoEQQoazW7hDKAFPYccC6zqX0fnI7vBIIBZsjUsol6-5bdujpb4" "l3LRGCjULXlSPbnNGzyk5R-mIwQC8aM9wcIiZZdcdHdr4meMNr3HmpG_B5xtBmENAJAvU" "K3DO6pro2xhypuNKYtOAdH0Xyl8QBPIJ0EFVH6_1V-H_gHs2MLMIqGfUmFCuRev60APcw" "Pbf-GZxLeXLutPq2DOl1HD0XLNtYL1dB1aw2j4L8OJREOC_N-KpIH3g" "." "n4QRlTzW2urRnNiJlwQkZw" ; static int test_jwe_r256a128_jwe_openssl(struct lws_context *context) { struct lws_jwe jwe; char temp[2048]; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, (char *)lws_jwe_ex_a2_jwk_json, strlen((char *)lws_jwe_ex_a2_jwk_json)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* converts a compact serialization to jws b64 + decoded maps */ if (lws_jws_compact_decode((const char *)jwe_compact_rsa_cbc_openssl, strlen((char *)jwe_compact_rsa_cbc_openssl), &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(ra_ptext_1024) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], ra_ptext_1024, sizeof(ra_ptext_1024))) { lwsl_err("%s: plaintext RSA/AES decrypt wrong\n", __func__); lwsl_hexdump_notice(ra_ptext_1024, sizeof(ra_ptext_1024)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* This is a compact JWE containing the plaintext ra_ptext_1024 for the key * lws_jwe_ex_a2_jwk_json... produced by test test above running on mbedTLS. */ static char *jwe_compact_rsa_cbc_mbedtls = "eyAiYWxnIjoiUlNBMV81IiwiZW5jIjoiQTEyOENCQy1IUzI1NiJ9.oBqKJ06UJs2oryPLWZKyI8743GC0geUt_xaKLMaPtApp__swG2w0IhNtmkIBKA9LeeGyiCWKpGGzOlQUR5YSxrT99PnincHXw_pkCprOvi4j3oxThJ2pFRx-CBc9ZgPJ3Kje1QifOueT3vQt_65iiyXmqyc5PDxzuV0L_KtrA_jEsm2m1JVBMOX--qzXjYyqx_dc87d43TXY_4kuTmAtqVpQe7ixKJlUViPVSzuASyeLEUTIaNlALuEWial1wP-ICF37OQzOcZRH3OVZObrcZi1aWkDOLxF4qO4I_GtpuAgZT732a7gnobR-T2oyBpimcqCVEk88Wa7cYyBXZvAOUA.fNLEFh1mjdlyc3WKw0I2Kg.e8X-11K9yXK0KkK-8ikplEWFViruqduaKPDOA7x6lKpBk8l3RFX1aqC4s0WVc1eN0qd-fB__EoO_AIG1xsfw1ie2IDWV0p18ZaRkQRN9Th5UU-W9C9XyPFQUxcl7ShKRE-yKJU-VdZDk6L2-07FH3s-voVKx0oqLIYqkkXp9a2jvnzrZ0Psujs4PSCHOZEgcS8PNdMmdsjDHLsb0NDMifOSlXk2Mp6V2SizXRIPJtOkVJGKwuBc7FbdO02GnzzVXldiLC7GI0zoRsnSJndF8yc3pMrMQhoVRktkBClAcIujD_OxJwHG-i3OJqUg1uVfci86RoQrnULoygvB7apX_WMxF7eXXJdXbG8sPLLCf0SW4sgvuSclOHL2UXzGi6Tp_l1XjxFQTzVEfUaj7i0gD2wM74Ru79RX8yO0m-5qOOwkySU1lEXqbLTuxjJXD9WLcTQQmF0Nm5myTUyNOl7xKpeDpnNt5A0L8o6SW6iJ3DwZEzhMxk3JWQOYtQP1J2sgwAKEDM6SkGzTy9QXpCEoraKp2UEzunux9S6-roYpzgEFT2RZrq3Hg_JyequTtrcNaoiEKd5szJvE6pUc25WEjDzgg79v_n40gQm688mO62kiVBThVmc88u2JVlNpzVQFUfKt-bu2Xxiqn5lRfEMK93EEPZRd8n12vBq5aJKvvEpPN1AC4HaMepf78Ob0GNTYGR-70zSS0ErecCeIgUJ1CttE2Nn0qEOfbQcO48SjeIltecl9DRzeLT3tPN3Z4BqbzSX8kKU5LStUX5YC-obM_0Ss7swXJM19I1O-QH8VbHZl-9TADR6BLzmrsJQ9_BL_uTB6uPdLhYfqWw6VUf0eMLaqvsY92vV5-JVQqyv7s70FNLT1-8P94k79ZGiLvNdDNZgGsmRQOwA2Vk6snHI0oUYGj7NeEK4O64ZfNRZJgPfWnxtQ-LIhSYCJvxFGL7ZMoA_ijKl9_v_bRqd03_7o8YQisw2luDYqLa87Dh9u9tacOoraGAzcEBIAh-BOcnIrQEt5KoSbly5xNAkfqj7QDvL0vPHArZ5E3Gb_k3VbKjsqCzvisNMEjm887Z-Dc6tW4Y2OceYf-rfUDvJ3EXZ66CWSQ7yKhPVcP1RRtNUFEqLoIAkA4aEAAS2ZPKVHIJQwyMzbbNFAuvY_7piNYprAI5lySFcA1cz_hKl6s9xmqbAkH2XGZZduw5Nv-aY_LMXujjhmblqE2Ocej91xTdgMe74Ftr1b3y9FvPPVSqNjpTSfujCi5L57LOpjT78do8eSrDz6coG0zeRUybjWeTszoiYbif_NlyAcMScO5OMZHNkre6L8u-AVeYSKTGsdpK7em_iLN8cGSEjZABNAr_A9Lfg.6Qb_Qf-ktX0DRHWUHAJxDQ" ; static int test_jwe_r256a128_jwe_mbedtls(struct lws_context *context) { struct lws_jwe jwe; char temp[2048]; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, (char *)lws_jwe_ex_a2_jwk_json, strlen((char *)lws_jwe_ex_a2_jwk_json)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* converts a compact serialization to jws b64 + decoded maps */ if (lws_jws_compact_decode((const char *)jwe_compact_rsa_cbc_mbedtls, strlen((char *)jwe_compact_rsa_cbc_mbedtls), &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(ra_ptext_1024) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], ra_ptext_1024, sizeof(ra_ptext_1024))) { lwsl_err("%s: plaintext RSA/AES decrypt wrong\n", __func__); lwsl_hexdump_notice(ra_ptext_1024, sizeof(ra_ptext_1024)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* A.3. Example JWE Using AES Key Wrap and AES_128_CBC_HMAC_SHA_256 * * This example encrypts the plaintext "Live long and prosper." to the * recipient using AES Key Wrap for key encryption and * AES_128_CBC_HMAC_SHA_256 for content encryption. */ /* "Live long and prosper." */ static uint8_t ex_a3_ptext[] = { 76, 105, 118, 101, 32, 108, 111, 110, 103, 32, 97, 110, 100, 32, 112, 114, 111, 115, 112, 101, 114, 46 }, *ex_a3_compact = (uint8_t *) "eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0" "." "6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ" "." "AxY8DCtDaGlsbGljb3RoZQ" "." "KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY" "." "U0m_YmjN04DJvceFICbCVQ", *ex_a3_key = (uint8_t *) "{\"kty\":\"oct\"," "\"k\":\"GawgguFyGrWKav7AX4VKUg\"" "}" ; static int test_jwe_a3(struct lws_context *context) { struct lws_jwe jwe; char temp[2048]; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, (char *)ex_a3_key, strlen((char *)ex_a3_key)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* converts a compact serialization to jws b64 + decoded maps */ if (lws_jws_compact_decode((const char *)ex_a3_compact, strlen((char *)ex_a3_compact), &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(ex_a3_ptext) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], ex_a3_ptext, sizeof(ex_a3_ptext))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(ex_a3_ptext, sizeof(ex_a3_ptext)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* JWA B.2. Test Cases for AES_192_CBC_HMAC_SHA_384 * * Unfortunately JWA just gives this test case as hex literals, not * inside a JWE. So we have to prepare the inputs "by hand". */ static uint8_t jwa_b2_ptext[] = { 0x41, 0x20, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x65, 0x6d, 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x69, 0x65, 0x6e, 0x63, 0x65 }, jwa_b2_rawkey[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, }, jwa_b2_iv[] = { 0x1a, 0xf3, 0x8c, 0x2d, 0xc2, 0xb9, 0x6f, 0xfd, 0xd8, 0x66, 0x94, 0x09, 0x23, 0x41, 0xbc, 0x04 }, jwa_b2_e[] = { 0xea, 0x65, 0xda, 0x6b, 0x59, 0xe6, 0x1e, 0xdb, 0x41, 0x9b, 0xe6, 0x2d, 0x19, 0x71, 0x2a, 0xe5, 0xd3, 0x03, 0xee, 0xb5, 0x00, 0x52, 0xd0, 0xdf, 0xd6, 0x69, 0x7f, 0x77, 0x22, 0x4c, 0x8e, 0xdb, 0x00, 0x0d, 0x27, 0x9b, 0xdc, 0x14, 0xc1, 0x07, 0x26, 0x54, 0xbd, 0x30, 0x94, 0x42, 0x30, 0xc6, 0x57, 0xbe, 0xd4, 0xca, 0x0c, 0x9f, 0x4a, 0x84, 0x66, 0xf2, 0x2b, 0x22, 0x6d, 0x17, 0x46, 0x21, 0x4b, 0xf8, 0xcf, 0xc2, 0x40, 0x0a, 0xdd, 0x9f, 0x51, 0x26, 0xe4, 0x79, 0x66, 0x3f, 0xc9, 0x0b, 0x3b, 0xed, 0x78, 0x7a, 0x2f, 0x0f, 0xfc, 0xbf, 0x39, 0x04, 0xbe, 0x2a, 0x64, 0x1d, 0x5c, 0x21, 0x05, 0xbf, 0xe5, 0x91, 0xba, 0xe2, 0x3b, 0x1d, 0x74, 0x49, 0xe5, 0x32, 0xee, 0xf6, 0x0a, 0x9a, 0xc8, 0xbb, 0x6c, 0x6b, 0x01, 0xd3, 0x5d, 0x49, 0x78, 0x7b, 0xcd, 0x57, 0xef, 0x48, 0x49, 0x27, 0xf2, 0x80, 0xad, 0xc9, 0x1a, 0xc0, 0xc4, 0xe7, 0x9c, 0x7b, 0x11, 0xef, 0xc6, 0x00, 0x54, 0xe3 }, jwa_b2_a[] = { /* "The second principle of Auguste Kerckhoffs" */ 0x54, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x41, 0x75, 0x67, 0x75, 0x73, 0x74, 0x65, 0x20, 0x4b, 0x65, 0x72, 0x63, 0x6b, 0x68, 0x6f, 0x66, 0x66, 0x73 }, jwa_b2_tag[] = { 0x84, 0x90, 0xac, 0x0e, 0x58, 0x94, 0x9b, 0xfe, 0x51, 0x87, 0x5d, 0x73, 0x3f, 0x93, 0xac, 0x20, 0x75, 0x16, 0x80, 0x39, 0xcc, 0xc7, 0x33, 0xd7 } ; static int test_jwa_b2(struct lws_context *context) { struct lws_jwe jwe; int n, ret = -1; char buf[2048]; lws_jwe_init(&jwe, context); /* * normally all this is interpreted from the JWE blob. But we don't * have JWE test vectors for AES_256_CBC_HMAC_SHA_512, just a standalone * one. So we have to create it all by hand. * * See test_jwe_a3 above for a more normal usage pattern. */ lws_jwk_dup_oct(&jwe.jwk, jwa_b2_rawkey, sizeof(jwa_b2_rawkey)); memcpy(buf, jwa_b2_e, sizeof(jwa_b2_e)); jwe.jws.map.buf[LJWE_IV] = (char *)jwa_b2_iv; jwe.jws.map.len[LJWE_IV] = sizeof(jwa_b2_iv); jwe.jws.map.buf[LJWE_CTXT] = buf; jwe.jws.map.len[LJWE_CTXT] = sizeof(jwa_b2_e); jwe.jws.map.buf[LJWE_ATAG] = (char *)jwa_b2_tag; jwe.jws.map.len[LJWE_ATAG] = sizeof(jwa_b2_tag); /* * Normally this comes from the JOSE header. But this test vector * doesn't have one... so... */ if (lws_gencrypto_jwe_alg_to_definition("A128KW", &jwe.jose.alg)) goto bail; if (lws_gencrypto_jwe_enc_to_definition("A192CBC-HS384", &jwe.jose.enc_alg)) goto bail; n = lws_jwe_auth_and_decrypt_cbc_hs(&jwe, jwa_b2_rawkey, jwa_b2_a, sizeof(jwa_b2_a)); if (n < 0) { lwsl_err("%s: lws_jwe_a_cbc_hs_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(jwa_b2_ptext) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT],jwa_b2_ptext, sizeof(jwa_b2_ptext))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(jwa_b2_ptext, sizeof(jwa_b2_ptext)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* JWA B.3. Test Cases for AES_256_CBC_HMAC_SHA_512 * * Unfortunately JWA just gives this test case as hex literals, not * inside a JWE. So we have to prepare the inputs "by hand". */ static uint8_t jwa_b3_ptext[] = { 0x41, 0x20, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x65, 0x6d, 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x69, 0x65, 0x6e, 0x63, 0x65 }, jwa_b3_rawkey[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f }, jwa_b3_iv[] = { 0x1a, 0xf3, 0x8c, 0x2d, 0xc2, 0xb9, 0x6f, 0xfd, 0xd8, 0x66, 0x94, 0x09, 0x23, 0x41, 0xbc, 0x04 }, jwa_b3_e[] = { 0x4a, 0xff, 0xaa, 0xad, 0xb7, 0x8c, 0x31, 0xc5, 0xda, 0x4b, 0x1b, 0x59, 0x0d, 0x10, 0xff, 0xbd, 0x3d, 0xd8, 0xd5, 0xd3, 0x02, 0x42, 0x35, 0x26, 0x91, 0x2d, 0xa0, 0x37, 0xec, 0xbc, 0xc7, 0xbd, 0x82, 0x2c, 0x30, 0x1d, 0xd6, 0x7c, 0x37, 0x3b, 0xcc, 0xb5, 0x84, 0xad, 0x3e, 0x92, 0x79, 0xc2, 0xe6, 0xd1, 0x2a, 0x13, 0x74, 0xb7, 0x7f, 0x07, 0x75, 0x53, 0xdf, 0x82, 0x94, 0x10, 0x44, 0x6b, 0x36, 0xeb, 0xd9, 0x70, 0x66, 0x29, 0x6a, 0xe6, 0x42, 0x7e, 0xa7, 0x5c, 0x2e, 0x08, 0x46, 0xa1, 0x1a, 0x09, 0xcc, 0xf5, 0x37, 0x0d, 0xc8, 0x0b, 0xfe, 0xcb, 0xad, 0x28, 0xc7, 0x3f, 0x09, 0xb3, 0xa3, 0xb7, 0x5e, 0x66, 0x2a, 0x25, 0x94, 0x41, 0x0a, 0xe4, 0x96, 0xb2, 0xe2, 0xe6, 0x60, 0x9e, 0x31, 0xe6, 0xe0, 0x2c, 0xc8, 0x37, 0xf0, 0x53, 0xd2, 0x1f, 0x37, 0xff, 0x4f, 0x51, 0x95, 0x0b, 0xbe, 0x26, 0x38, 0xd0, 0x9d, 0xd7, 0xa4, 0x93, 0x09, 0x30, 0x80, 0x6d, 0x07, 0x03, 0xb1, 0xf6, }, jwa_b3_a[] = { /* "The second principle of Auguste Kerckhoffs" */ 0x54, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x41, 0x75, 0x67, 0x75, 0x73, 0x74, 0x65, 0x20, 0x4b, 0x65, 0x72, 0x63, 0x6b, 0x68, 0x6f, 0x66, 0x66, 0x73 }, jws_b3_tag[] = { 0x4d, 0xd3, 0xb4, 0xc0, 0x88, 0xa7, 0xf4, 0x5c, 0x21, 0x68, 0x39, 0x64, 0x5b, 0x20, 0x12, 0xbf, 0x2e, 0x62, 0x69, 0xa8, 0xc5, 0x6a, 0x81, 0x6d, 0xbc, 0x1b, 0x26, 0x77, 0x61, 0x95, 0x5b, 0xc5 } ; static int test_jwa_b3(struct lws_context *context) { struct lws_jwe jwe; char buf[2048]; int n, ret = -1; lws_jwe_init(&jwe, context); /* * normally all this is interpreted from the JWE blob. But we don't * have JWE test vectors for AES_256_CBC_HMAC_SHA_512, just a standalone * one. So we have to create it all by hand. * * See test_jwe_a3 above for a more normal usage pattern. */ lws_jwk_dup_oct(&jwe.jwk, jwa_b3_rawkey, sizeof(jwa_b3_rawkey)); memcpy(buf, jwa_b3_e, sizeof(jwa_b3_e)); jwe.jws.map.buf[LJWE_IV] = (char *)jwa_b3_iv; jwe.jws.map.len[LJWE_IV] = sizeof(jwa_b3_iv); jwe.jws.map.buf[LJWE_CTXT] = buf; jwe.jws.map.len[LJWE_CTXT] = sizeof(jwa_b3_e); jwe.jws.map.buf[LJWE_ATAG] = (char *)jws_b3_tag; jwe.jws.map.len[LJWE_ATAG] = sizeof(jws_b3_tag); /* * Normally this comes from the JOSE header. But this test vector * doesn't feature one... */ if (lws_gencrypto_jwe_alg_to_definition("A128KW", &jwe.jose.alg)) goto bail; if (lws_gencrypto_jwe_enc_to_definition("A256CBC-HS512", &jwe.jose.enc_alg)) goto bail; n = lws_jwe_auth_and_decrypt_cbc_hs(&jwe, jwa_b3_rawkey, jwa_b3_a, sizeof(jwa_b3_a)); if (n < 0) { lwsl_err("%s: lws_jwe_a_cbc_hs_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(jwa_b3_ptext) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT],jwa_b3_ptext, sizeof(jwa_b3_ptext))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(jwa_b3_ptext, sizeof(jwa_b3_ptext)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* JWA C. Example ECDH-ES Key Agreement Computation * * This example uses ECDH-ES Key Agreement and the Concat KDF to derive * the CEK in the manner described in Section 4.6. In this example, the * ECDH-ES Direct Key Agreement mode ("alg" value "ECDH-ES") is used to * produce an agreed-upon key for AES GCM with a 128-bit key ("enc" * value "A128GCM"). * * In this example, a producer Alice is encrypting content to a consumer * Bob. The producer (Alice) generates an ephemeral key for the key * agreement computation. * * JWA Appendix C where this comes from ONLY goes as far as to confirm the * direct derived key, it doesn't do any AES128-GCM. */ static const char *ex_jwa_c_jose = "{\"alg\":\"ECDH-ES\"," "\"enc\":\"A128GCM\"," "\"apu\":\"QWxpY2U\"," /* b64u("Alice") */ "\"apv\":\"Qm9i\"," /* b64u("Bob") */ "\"epk\":" /* public part of A's ephemeral key */ "{\"kty\":\"EC\"," "\"crv\":\"P-256\"," "\"x\":\"gI0GAILBdu7T53akrFmMyGcsF3n5dO7MmwNBHKW5SV0\"," "\"y\":\"SLW_xSffzlPWrHEVI30DHM_4egVwt3NQqeUD7nMFpps\"" "}" "}" ; static uint8_t ex_jwa_c_z[] = { 158, 86, 217, 29, 129, 113, 53, 211, 114, 131, 66, 131, 191, 132, 38, 156, 251, 49, 110, 163, 218, 128, 106, 72, 246, 218, 167, 121, 140, 254, 144, 196 }, ex_jwa_c_derived_key[] = { 86, 170, 141, 234, 248, 35, 109, 32, 92, 34, 40, 205, 113, 167, 16, 26 }; static int test_jwa_c(struct lws_context *context) { struct lws_jwe jwe; char temp[2048], *p; int ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); /* * again the JWA Appendix C test vectors are not in the form of a * complete JWE, but just the JWE JOSE header, so we must fake up the * pieces and perform just the (normally internal) key agreement step * for this test. * * See test_jwe_a3 above for a more normal usage pattern. */ if (lws_jwe_parse_jose(&jwe.jose, ex_jwa_c_jose, strlen(ex_jwa_c_jose), temp, &temp_len) < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } /* * The ephemeral key has been parsed into a jwk "jwe.jose.jwk_ephemeral" * * In this example, the ECDH-ES Direct Key Agreement mode ("alg" value * "ECDH-ES") is used to produce an agreed-upon key for AES GCM with a * 128-bit key ("enc" value "A128GCM"). */ p = lws_concat_temp(temp, temp_len); if (lws_jwa_concat_kdf(&jwe, 1, (uint8_t *)p, ex_jwa_c_z, sizeof(ex_jwa_c_z))) { lwsl_err("%s: lws_jwa_concat_kdf failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (lws_timingsafe_bcmp(p, ex_jwa_c_derived_key, sizeof(ex_jwa_c_derived_key))) { lwsl_err("%s: ECDH-ES direct derived key wrong\n", __func__); lwsl_hexdump_notice(ex_jwa_c_derived_key, sizeof(ex_jwa_c_derived_key)); lwsl_hexdump_notice(p, sizeof(ex_jwa_c_derived_key)); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* * ECDH-ES Homebrew Encryption test */ static const char /* peer key */ *ecdhes_t1_peer_p256_public_key = /* as below but with d removed */ "{" "\"crv\":\"P-256\"," "\"kty\":\"EC\"," "\"x\":\"ySlIGttmXG80WPjDO01QaXg7oAzW3NE-a-GF0NDGk_E\"," "\"y\":\"i08k5z4ppqgtnLK8lh5qw4qp2FhxPdGjovgilajluuw\"" "}", *ecdhes_t1_peer_p256_private_key = /* created by ./lws-crypto-jwk -t EC */ "{" "\"crv\":\"P-256\"," "\"d\":\"ldszv0_cGFMkjxaPspGCP6X0NAaVCVeK48oH4RzT2T0\"," "\"kty\":\"EC\"," "\"x\":\"ySlIGttmXG80WPjDO01QaXg7oAzW3NE-a-GF0NDGk_E\"," "\"y\":\"i08k5z4ppqgtnLK8lh5qw4qp2FhxPdGjovgilajluuw\"" "}", *ecdhes_t1_peer_p384_public_key = /* as below but with d removed */ "{\"crv\":\"P-384\"," "\"kty\":\"EC\"," "\"x\":\"injKcygDoG1AuP044ct88r_2DNinHr1CGqy4q2Sy5yo034Y" "7yQ5_NT-lEUXrzlIW\"," "\"y\":\"y52QaJLhVm-ts8xa1jL8GkmwGm_dX6xV1PSq4s3pbwx2Hu9" "X29z5WYcTPFOCPtwJ\"}", *ecdhes_t1_peer_p384_private_key = /* created by ./lws-crypto-jwk -t EC -v "P-384" */ "{\"crv\":\"P-384\"," "\"d\":\"jYGze6ZwZxrflVx_I2lYWNf9GkfbeQNRwQCdtZhBlb85lk-" "SAvaZuNiRUs_eWmPQ\"," "\"kty\":\"EC\"," "\"x\":\"injKcygDoG1AuP044ct88r_2DNinHr1CGqy4q2Sy5yo034Y" "7yQ5_NT-lEUXrzlIW\"," "\"y\":\"y52QaJLhVm-ts8xa1jL8GkmwGm_dX6xV1PSq4s3pbwx2Hu9" "X29z5WYcTPFOCPtwJ\"}", *ecdhes_t1_peer_p521_public_key = /* as below but with d removed */ "{\"crv\":\"P-521\"," "\"kty\":\"EC\"," "\"x\":\"AYe0gAkPzzjeQW5Ek9tVrWdfi0u6k7LVUru-b2x7V9EM3d" "L4SbQiS1p2j2gmZ2a6aDoKDRU_2E4u9EQrlswlty-g\"," "\"y\":\"AEAIIRkVL0WhtDlDSM7dciBtL1dOo5UPiW7ixIOv5K75Mo" "uFNWO7cFmcxaCOn9459ex0giVyptmX_956C_DWabG6\"}", *ecdhes_t1_peer_p521_private_key = /* created by ./lws-crypto-jwk -t EC -v "P-521" */ "{\"crv\":\"P-521\"," "\"d\":\"AUer7_-qJtQtDWN6CMeGB20rzTa648kpsfidTOu3lnn6__" "yOXkMj1yTYUBjVOnUjGHiTU1rCGsw4CyF-1nDRe7SM\"," "\"kty\":\"EC\"," "\"x\":\"AYe0gAkPzzjeQW5Ek9tVrWdfi0u6k7LVUru-b2x7V9EM3d" "L4SbQiS1p2j2gmZ2a6aDoKDRU_2E4u9EQrlswlty-g\"," "\"y\":\"AEAIIRkVL0WhtDlDSM7dciBtL1dOo5UPiW7ixIOv5K75Mo" "uFNWO7cFmcxaCOn9459ex0giVyptmX_956C_DWabG6\"}", *ecdhes_t1_jose_hdr_es_128 = "{\"alg\":\"ECDH-ES\",\"enc\":\"A128CBC-HS256\"}", *ecdhes_t1_jose_hdr_es_192 = "{\"alg\":\"ECDH-ES\",\"enc\":\"A192CBC-HS384\"}", *ecdhes_t1_jose_hdr_es_256 = "{\"alg\":\"ECDH-ES\",\"enc\":\"A256CBC-HS512\"}", *ecdhes_t1_jose_hdr_esakw128_128 = "{\"alg\":\"ECDH-ES+A128KW\",\"enc\":\"A128CBC-HS256\"}", *ecdhes_t1_jose_hdr_esakw192_192 = "{\"alg\":\"ECDH-ES+A192KW\",\"enc\":\"A192CBC-HS384\"}", *ecdhes_t1_jose_hdr_esakw256_256 = "{\"alg\":\"ECDH-ES+A256KW\",\"enc\":\"A256CBC-HS512\"}", *ecdhes_t1_plaintext = "This test plaintext is exactly 64 bytes long when unencrypted..." ; static int test_ecdhes_t1(struct lws_context *context, const char *jose_hdr, const char *peer_pubkey, const char *peer_privkey) { char temp[3072], compact[2048]; int n, ret = -1, temp_len = sizeof(temp); struct lws_jwe jwe; lws_jwe_init(&jwe, context); /* read and interpret our canned JOSE header, setting the algorithm */ if (lws_jws_dup_element(&jwe.jws.map, LJWS_JOSE, lws_concat_temp(temp, temp_len), &temp_len, jose_hdr, strlen(jose_hdr), 0)) goto bail; if (lws_jwe_parse_jose(&jwe.jose, jose_hdr, strlen(jose_hdr), temp, &temp_len) < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } /* for ecdh-es encryption, we need the peer's pubkey */ if (lws_jwk_import(&jwe.jwk, NULL, NULL, (char *)peer_pubkey, strlen((char *)peer_pubkey)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* * dup the plaintext into the ciphertext element, it will be * encrypted in-place to a ciphertext of the same length */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_CTXT, lws_concat_temp(temp, temp_len), &temp_len, ecdhes_t1_plaintext, strlen(ecdhes_t1_plaintext), 0)) { lwsl_notice("%s: Not enough temp space for ptext\n", __func__); goto bail; } /* * perform the actual encryption */ n = lws_jwe_encrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt failed\n", __func__); goto bail; } /* * format for output */ n = lws_jwe_render_flattened(&jwe, compact, sizeof(compact)); if (n < 0) { lwsl_err("%s: lws_jwe_render_compact failed: %d\n", __func__, n); goto bail; } // puts(compact); n = lws_jwe_render_compact(&jwe, compact, sizeof(compact)); if (n < 0) { lwsl_err("%s: lws_jwe_render_compact failed: %d\n", __func__, n); goto bail; } // puts(compact); /* okay, let's try to decrypt the whole thing, as the recipient * getting the compact. jws->jwk needs to be our private key. */ lws_jwe_destroy(&jwe); temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, (char *)peer_privkey, strlen((char *)peer_privkey)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* converts a compact serialization to jws b64 + decoded maps */ if (lws_jws_compact_decode(compact, strlen(compact), &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: %s selftest failed +++++++++++++++++++\n", __func__, jose_hdr); else lwsl_notice("%s: %s selftest OK\n", __func__, jose_hdr); return ret; } /* AES Key Wrap and AES_XXX_CBC_HMAC_SHA_YYY variations * * These were created by, eg * * echo -n "plaintext0123456" | \ * ./lws-crypto-jwe -e "A192KW A256CBC-HS512" -k aes192.key */ /* "Live long and prosper." */ static const char *akw_ptext = "plaintext0123456", *akw_ct_128_128 = "eyJhbGciOiJBMTI4S1ciLCAiZW5jIjoiQTEyOENCQy1IUzI1NiJ9.zbTfhhWePf1UrCRDxJD_-8eAQr2AoWAL51_nNOv0L4nV3P0e4_9ARA.qWehIhy4j4_gh_h5MF9ZEw.GD40YH6NeNOEkhhxC9ryZA.PEuU6V3rhYXeoxENrAzDgw", *akw_ct_128_192 = "eyJhbGciOiJBMTI4S1ciLCAiZW5jIjoiQTE5MkNCQy1IUzM4NCJ9.zpkr45xH_kSJ5eTBv5dGo5PN_A6YdC4JoJSOw3_VTqcOeAYyCkCAXeGWugqIVLzMzBKgtXdabO8.O28MVhkgfketu5sxQK4Ffw.j25N7luxh251kQwpAoYURQ.Pm_NOj0KZzUq2fV9ARpHxT3Iach9feLK", *akw_ct_128_256 = "eyJhbGciOiJBMTI4S1ciLCAiZW5jIjoiQTI1NkNCQy1IUzUxMiJ9.VvFmi121jliyh_UKzsBv7HR3TVY7-yALpcdlasHqdzmfISd8LFU5oc2fEhfn3_TKfCbgRycm5M3103NEMbVSiNULZWvJAPFe.7uLHGFO1g-PgD9YkjPbvoA.AlPwQPWSqGaB_em4qEEyjw.0LgTLld5pSffZnzGG6IRWEwXg7HhClmwP4m_p1yKnHw", *akw_ct_192_128 = "eyJhbGciOiJBMTkyS1ciLCAiZW5jIjoiQTEyOENCQy1IUzI1NiJ9.kxlmi-xn0JN-ZlnSfkVDP-fXvricJ-L63WP2bWddWEiVK4m-os2trw.iarAWaeV873kh5s7HjoZ4Q.nFHEpnnIxvbCiYfFfsLj7Q.karz-h-R93dJgwN_YZyPmw", *akw_ct_192_192 = "eyJhbGciOiJBMTkyS1ciLCAiZW5jIjoiQTE5MkNCQy1IUzM4NCJ9.D869MEk-JERZU_4MgFuL_6Pg24LUEbXlTvGj-t_JUnNFsJ0p8fk5L-iOATqPmx2g7AyVWgcUqU0.RrxzDsy6Bne1pzx99PBGsA.C-ZWmMwd1uswYkvhKX2_jg.bIFY0TmGuohI2APxDZyFUYpa6s1Mx2j1", *akw_ct_192_256 = "eyJhbGciOiJBMTkyS1ciLCAiZW5jIjoiQTI1NkNCQy1IUzUxMiJ9.XNOBw0Dy1paAX2_XGkZYm2Zm455i8InAVMqM3aOrVDpXYBAADuZ_Ke_dlo3Fc8J5b9m_KNCUtVUU8f3KV0sY-yESsqyZTSXk.n3wEIV1-tL50JAp4H19Y1w.ODPd-oxmpCai9CzqaO0P3Q.b9z08hJTySSVSOw-4qp5lrTEcUur46L-RRB-SEcqPpk", *akw_ct_256_128 = "eyJhbGciOiJBMjU2S1ciLCAiZW5jIjoiQTEyOENCQy1IUzI1NiJ9.THaIbHUOHkr7McMeiQqIO_gBcm61F0BKx79JXkzQVVSF7m0u7Z6uhA.RAU8Yx_a9rbWeqr_0YyLZA.zzfdv55bM-qblTxaR5pNzQ.cySMIOTOcEoFkcVn0D6RKQ", *akw_ct_256_192 = "eyJhbGciOiJBMjU2S1ciLCAiZW5jIjoiQTE5MkNCQy1IUzM4NCJ9.gFcfX6fVrpmDJWN5jPqSWEvpOOoNuV4Yn2KO47p1wGsdw5qIw3r5AO5U8zOEtoGNVX68IC8vkpo.9w3tBsve4e-77lI-S9cFog.Vj3L009JDipPJlHY0tS4Iw.WYGgCedW4SmxleDF3P6Hx26BUXxnizxl", *akw_ct_256_256 = "eyJhbGciOiJBMjU2S1ciLCAiZW5jIjoiQTI1NkNCQy1IUzUxMiJ9.ldhqlMf2LJrZ7EDl-oZvaqi0b_KPGy4cMRx2QDpKtTg92tTSWF7ALVHPPCyT4qccIybP4rygajKfdC_Q_UE16KFyUvXhBgaj.S9OCmKpY0zDkArLF5XsrJw.zvJ1X-zuHsrwLXGJJbglPA.WaRKb7Le2ZQ30pGQAV3sfp-YY1563KXxPURHQ8ntdPc", *akw_key_128 = "{\"k\":\"JjVJVh8JsXvKf9qgHHWWBA\",\"kty\":\"oct\"}", *akw_key_192 = "{\"k\":\"BYF6urCMDRMKFXXRxXrDSVtW71AUZghj\",\"kty\":\"oct\"}", *akw_key_256 = "{\"k\":\"cSHyZXGEfnlgKud21cM6tAxRyXnK6xbWRTsyLUegTMk\",\"kty\":\"oct\"}" ; static int test_akw_decrypt(struct lws_context *context, const char *test_name, const char *ciphertext, const char *key) { struct lws_jwe jwe; char temp[2048]; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, key, strlen(key)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* converts a compact serialization to jws b64 + decoded maps */ if (lws_jws_compact_decode(ciphertext, strlen(ciphertext), &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < strlen(akw_ptext) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], akw_ptext, strlen(akw_ptext))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(akw_ptext, strlen(akw_ptext)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest %s failed +++++++++++++++++++\n", __func__, test_name); else lwsl_notice("%s: selftest %s OK\n", __func__, test_name); return ret; } static int test_akw_encrypt(struct lws_context *context, const char *test_name, const char *alg, const char *enc, const char *ciphertext, const char *key, char *compact, int compact_len) { struct lws_jwe jwe; char temp[4096]; int ret = -1, n, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, key, strlen(key)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } if (lws_gencrypto_jwe_alg_to_definition(alg, &jwe.jose.alg)) { lwsl_err("Unknown cipher alg %s\n", alg); goto bail; } if (lws_gencrypto_jwe_enc_to_definition(enc, &jwe.jose.enc_alg)) { lwsl_err("Unknown payload enc alg %s\n", enc); goto bail; } /* we require a JOSE-formatted header to do the encryption */ jwe.jws.map.buf[LJWS_JOSE] = temp; jwe.jws.map.len[LJWS_JOSE] = lws_snprintf(temp, temp_len, "{\"alg\":\"%s\", \"enc\":\"%s\"}", alg, enc); temp_len -= jwe.jws.map.len[LJWS_JOSE]; /* * dup the plaintext into the ciphertext element, it will be * encrypted in-place to a ciphertext of the same length */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_CTXT, lws_concat_temp(temp, temp_len), &temp_len, akw_ptext, strlen(akw_ptext), 0)) { lwsl_notice("%s: Not enough temp space for ptext\n", __func__); goto bail; } /* CEK size is determined by hash / hmac size */ n = lws_gencrypto_bits_to_bytes(jwe.jose.enc_alg->keybits_fixed); if (lws_jws_randomize_element(context, &jwe.jws.map, LJWE_EKEY, lws_concat_temp(temp, temp_len), &temp_len, n, LWS_JWE_LIMIT_KEY_ELEMENT_BYTES)) { lwsl_err("Problem getting random\n"); goto bail; } n = lws_jwe_encrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt failed\n", __func__); goto bail; } n = lws_jwe_render_compact(&jwe, compact, compact_len); if (n < 0) { lwsl_err("%s: lws_jwe_render_compact failed: %d\n", __func__, n); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest %s failed +++++++++++++++++++\n", __func__, test_name); else lwsl_notice("%s: selftest %s OK\n", __func__, test_name); return ret; } /* * Check we can handle multi-recipient JWE */ static char *complete = "{" "\"protected\":" "\"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0\"," "\"unprotected\":" "{\"jku\":\"https://server.example.com/keys.jwks\"}," "\"recipients\":[" "{\"header\":" "{\"alg\":\"RSA1_5\",\"kid\":\"2011-04-29\"}," "\"encrypted_key\":" "\"UGhIOguC7IuEvf_NPVaXsGMoLOmwvc1GyqlIKOK1nN94nHPoltGRhWhw7Zx0-" "kFm1NJn8LE9XShH59_i8J0PH5ZZyNfGy2xGdULU7sHNF6Gp2vPLgNZ__deLKx" "GHZ7PcHALUzoOegEI-8E66jX2E4zyJKx-YxzZIItRzC5hlRirb6Y5Cl_p-ko3" "YvkkysZIFNPccxRU7qve1WYPxqbb2Yw8kZqa2rMWI5ng8OtvzlV7elprCbuPh" "cCdZ6XDP0_F8rkXds2vE4X-ncOIM8hAYHHi29NX0mcKiRaD0-D-ljQTP-cFPg" "wCp6X-nZZd9OHBv-B3oWh2TbqmScqXMR4gp_A\"}," "{\"header\":" "{\"alg\":\"A128KW\",\"kid\":\"7\"}," "\"encrypted_key\":" "\"6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ\"}]," "\"iv\":" "\"AxY8DCtDaGlsbGljb3RoZQ\"," "\"ciphertext\":" "\"KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY\"," "\"tag\":" "\"Mz-VPPyU4RlcuYv1IwIvzw\"" "}\"" ; static int test_jwe_json_complete(struct lws_context *context) { struct lws_jwe jwe; char temp[4096]; int ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwe_parse_jose(&jwe.jose, complete, strlen(complete), temp, &temp_len) < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } if (jwe.jose.recipients != 2) { lwsl_err("%s: wrong recipients count %d\n", __func__, jwe.jose.recipients); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } int test_jwe(struct lws_context *context) { char compact[4096]; int n = 0; n |= test_jwe_json_complete(context); n |= test_ecdhes_t1(context, ecdhes_t1_jose_hdr_es_128, ecdhes_t1_peer_p256_public_key, ecdhes_t1_peer_p256_private_key); n |= test_ecdhes_t1(context, ecdhes_t1_jose_hdr_es_192, ecdhes_t1_peer_p384_public_key, ecdhes_t1_peer_p384_private_key); n |= test_ecdhes_t1(context, ecdhes_t1_jose_hdr_es_256, ecdhes_t1_peer_p521_public_key, ecdhes_t1_peer_p521_private_key); n |= test_ecdhes_t1(context, ecdhes_t1_jose_hdr_esakw128_128, ecdhes_t1_peer_p256_public_key, ecdhes_t1_peer_p256_private_key); n |= test_ecdhes_t1(context, ecdhes_t1_jose_hdr_esakw192_192, ecdhes_t1_peer_p384_public_key, ecdhes_t1_peer_p384_private_key); n |= test_ecdhes_t1(context, ecdhes_t1_jose_hdr_esakw256_256, ecdhes_t1_peer_p521_public_key, ecdhes_t1_peer_p521_private_key); n |= test_jwe_a1(context); n |= test_jwe_a2(context); n |= test_jwe_ra_ptext_1024(context, (char *)lws_jwe_ex_a2_jwk_json, strlen((char *)lws_jwe_ex_a2_jwk_json)); n |= test_jwe_r256a192_ptext(context, (char *)lws_jwe_ex_a2_jwk_json, strlen((char *)lws_jwe_ex_a2_jwk_json)); n |= test_jwe_r256a256_ptext(context, (char *)lws_jwe_ex_a2_jwk_json, strlen((char *)lws_jwe_ex_a2_jwk_json)); n |= test_jwe_ra_ptext_1024(context, (char *)rsa_key_2048, strlen((char *)rsa_key_2048)); n |= test_jwe_r256a192_ptext(context, (char *)rsa_key_2048, strlen((char *)rsa_key_2048)); n |= test_jwe_r256a256_ptext(context, (char *)rsa_key_2048, strlen((char *)rsa_key_2048)); n |= test_jwe_ra_ptext_1024(context, (char *)rsa_key_4096, strlen((char *)rsa_key_4096)); n |= test_jwe_r256a192_ptext(context, (char *)rsa_key_4096, strlen((char *)rsa_key_4096)); n |= test_jwe_r256a256_ptext(context, (char *)rsa_key_4096, strlen((char *)rsa_key_4096)); n |= test_jwe_ra_ptext_1024(context, (char *)rsa_key_4096_no_optional, strlen((char *)rsa_key_4096_no_optional)); n |= test_jwe_r256a192_ptext(context, (char *)rsa_key_4096_no_optional, strlen((char *)rsa_key_4096_no_optional)); n |= test_jwe_r256a256_ptext(context, (char *)rsa_key_4096_no_optional, strlen((char *)rsa_key_4096_no_optional)); /* AESKW decrypt all variations */ n |= test_akw_decrypt(context, "d-a128kw_128", akw_ct_128_128, akw_key_128); n |= test_akw_decrypt(context, "d-a128kw_192", akw_ct_128_192, akw_key_128); n |= test_akw_decrypt(context, "d-a128kw_256", akw_ct_128_256, akw_key_128); n |= test_akw_decrypt(context, "d-a192kw_128", akw_ct_192_128, akw_key_192); n |= test_akw_decrypt(context, "d-a192kw_192", akw_ct_192_192, akw_key_192); n |= test_akw_decrypt(context, "d-a192kw_256", akw_ct_192_256, akw_key_192); n |= test_akw_decrypt(context, "d-a256kw_128", akw_ct_256_128, akw_key_256); n |= test_akw_decrypt(context, "d-a256kw_192", akw_ct_256_192, akw_key_256); n |= test_akw_decrypt(context, "d-a256kw_256", akw_ct_256_256, akw_key_256); /* AESKW encrypt then confirm decrypt */ if (!test_akw_encrypt(context, "ed-128kw_128", "A128KW", "A128CBC-HS256", akw_ptext, akw_key_128, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-128kw_128", compact, akw_key_128); else n = -1; if (!test_akw_encrypt(context, "ed-128kw_192", "A128KW", "A192CBC-HS384", akw_ptext, akw_key_128, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-128kw_192", compact, akw_key_128); else n = -1; if (!test_akw_encrypt(context, "ed-128kw_256", "A128KW", "A256CBC-HS512", akw_ptext, akw_key_128, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-128kw_256", compact, akw_key_128); else n = -1; if (!test_akw_encrypt(context, "ed-192kw_128", "A192KW", "A128CBC-HS256", akw_ptext, akw_key_192, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-192kw_128", compact, akw_key_192); else n = -1; if (!test_akw_encrypt(context, "ed-192kw_192", "A192KW", "A192CBC-HS384", akw_ptext, akw_key_192, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-192kw_192", compact, akw_key_192); else n = -1; if (!test_akw_encrypt(context, "ed-192kw_256", "A192KW", "A256CBC-HS512", akw_ptext, akw_key_192, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-192kw_256", compact, akw_key_192); else n = -1; if (!test_akw_encrypt(context, "ed-256kw_128", "A256KW", "A128CBC-HS256", akw_ptext, akw_key_256, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-256kw_128", compact, akw_key_256); else n = -1; if (!test_akw_encrypt(context, "ed-256kw_192", "A256KW", "A192CBC-HS384", akw_ptext, akw_key_256, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-256kw_192", compact, akw_key_256); else n = -1; if (!test_akw_encrypt(context, "ed-256kw_256", "A256KW", "A256CBC-HS512", akw_ptext, akw_key_256, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-256kw_256", compact, akw_key_256); else n = -1; n |= test_jwe_r256a128_jwe_openssl(context); n |= test_jwe_r256a128_jwe_mbedtls(context); n |= test_jwe_a3(context); n |= test_jwa_b2(context); n |= test_jwa_b3(context); n |= test_jwa_c(context); return n; } libwebsockets-3.2.1/minimal-examples/api-tests/api-test-jose/jwk.c000066400000000000000000000411471357643561300251770ustar00rootroot00000000000000/* * lws-api-test-jose - RFC7517 jwk tests * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include static uint8_t *lws_jwe_ex_a1_jwk_json = (uint8_t *) /* EC + RSA public keys */ "{\"keys\":" "[" "{\"kty\":\"EC\"," "\"crv\":\"P-256\"," "\"x\":\"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4\"," "\"y\":\"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM\"," "\"use\":\"enc\"," "\"kid\":\"1\"}," "{\"kty\":\"RSA\"," "\"n\": \"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx" "4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMs" "tn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2" "QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbI" "SD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqb" "w0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw\"," "\"e\":\"AQAB\"," "\"alg\":\"RS256\"," "\"kid\":\"2011-04-29\"}" "]" "}", *lws_jwe_ex_a2_jwk_json = (uint8_t *) /* EC + RSA private keys */ "{\"keys\":" "[" "{\"kty\":\"EC\"," "\"crv\":\"P-256\"," "\"x\":\"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4\"," "\"y\":\"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM\"," "\"d\":\"870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE\"," "\"use\":\"enc\"," "\"kid\":\"1\"}," "{\"kty\":\"RSA\"," "\"n\":\"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4" "cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMst" "n64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2Q" "vzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbIS" "D08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw" "0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw\"," "\"e\":\"AQAB\"," "\"d\":\"X4cTteJY_gn4FYPsXB8rdXix5vwsg1FLN5E3EaG6RJoVH-HLLKD9" "M7dx5oo7GURknchnrRweUkC7hT5fJLM0WbFAKNLWY2vv7B6NqXSzUvxT0_YSfqij" "wp3RTzlBaCxWp4doFk5N2o8Gy_nHNKroADIkJ46pRUohsXywbReAdYaMwFs9tv8d" "_cPVY3i07a3t8MN6TNwm0dSawm9v47UiCl3Sk5ZiG7xojPLu4sbg1U2jx4IBTNBz" "nbJSzFHK66jT8bgkuqsk0GjskDJk19Z4qwjwbsnn4j2WBii3RL-Us2lGVkY8fkFz" "me1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Q\"," "\"p\":\"83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWUQyLPQBQxtPV" "nwD20R-60eTDmD2ujnMt5PoqMrm8RfmNhVWDtjjMmCMjOpSXicFHj7XOuVIYQyqV" "WlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEvn7O0nVbfs\"," "\"q\":\"3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCuqnb3vobLyum" "qjVZQO1dIrdwgTnCdpYzBcOfW5r370AFXjiWft_NGEiovonizhKpo9VVS78TzFgx" "kIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4vIcb6yelxk\"," "\"dp\":\"G4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5SdX3coE0oim" "YwxIi2emTAue0UOa5dpgFGyBJ4c8tQ2VF402XRugKDTP8akYhFo5tAA77Qe_Nmtu" "YZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8YeiKkTiBj0\"," "\"dq\":\"s9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllETE1efrA6huUU" "vMfBcMpn8lqeW6vzznYY5SSQF7pMdC_agI3nG8Ibp1BUb0JUiraRNqUfLhcQb_d9" "GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18txXw494Q_cgk\"," "\"qi\":\"GyM_p6JrXySiz1toFgKbWV-JdI3jQ4ypu9rbMWx3rQJBfmt0FoYzg" "UIZEVFEcOqwemRN81zoDAaa-Bk0KWNGDjJHZDdDmFhW3AN7lI-puxk_mHZGJ11rx" "yR8O55XLSe3SPmRfKwZI6yU24ZxvQKFYItdldUKGzO6Ia6zTKhAVRU\"," "\"alg\":\"RS256\"," "\"kid\":\"2011-04-29\"}" "]" "}", *lws_jwe_ex_a3_jwk_json = (uint8_t *) /* oct symmetric keys */ "{\"keys\":" "[" "{\"kty\":\"oct\"," "\"alg\":\"A128KW\"," "\"k\":\"GawgguFyGrWKav7AX4VKUg\"}," "{\"kty\":\"oct\"," "\"k\":\"AyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQLr_T-1qS0gZH75" "aKtMN3Yj0iPS4hcgUuTwjAzZr1Z9CAow\"," "\"kid\":\"HMAC key used in JWS spec Appendix A.1 example\"}" "]" "}", *lws_jwe_ex_b_jwk_json = (uint8_t *) /* x5c example (no parent JSON) */ "{\"kty\":\"RSA\"," "\"use\":\"sig\"," "\"kid\":\"1b94c\"," "\"n\":\"vrjOfz9Ccdgx5nQudyhdoR17V-IubWMeOZCwX_jj0hgAsz2J_pqYW08" "PLbK_PdiVGKPrqzmDIsLI7sA25VEnHU1uCLNwBuUiCO11_-7dYbsr4iJmG0Q" "u2j8DsVyT1azpJC_NG84Ty5KKthuCaPod7iI7w0LK9orSMhBEwwZDCxTWq4a" "YWAchc8t-emd9qOvWtVMDC2BXksRngh6X5bUYLy6AyHKvj-nUy1wgzjYQDwH" "MTplCoLtU-o-8SNnZ1tmRoGE9uJkBLdh5gFENabWnU5m1ZqZPdwS-qo-meMv" "VfJb6jJVWRpl2SUtCnYG2C32qvbWbjZ_jBPD5eunqsIo1vQ\"," "\"e\":\"AQAB\"," "\"x5c\":" "[\"MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBBQUAMGIxCzAJB" "gNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYD" "VQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1" "wYmVsbDAeFw0xMzAyMjEyMzI5MTVaFw0xODA4MTQyMjI5MTVaMGIxCzAJBg" "NVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDV" "QQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1w" "YmVsbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL64zn8/QnH" "YMeZ0LncoXaEde1fiLm1jHjmQsF/449IYALM9if6amFtPDy2yvz3YlRij66" "s5gyLCyO7ANuVRJx1NbgizcAblIgjtdf/u3WG7K+IiZhtELto/A7Fck9Ws6" "SQvzRvOE8uSirYbgmj6He4iO8NCyvaK0jIQRMMGQwsU1quGmFgHIXPLfnpn" "fajr1rVTAwtgV5LEZ4Iel+W1GC8ugMhyr4/p1MtcIM42EA8BzE6ZQqC7VPq" "PvEjZ2dbZkaBhPbiZAS3YeYBRDWm1p1OZtWamT3cEvqqPpnjL1XyW+oyVVk" "aZdklLQp2Btgt9qr21m42f4wTw+Xrp6rCKNb0CAwEAATANBgkqhkiG9w0BA" "QUFAAOCAQEAh8zGlfSlcI0o3rYDPBB07aXNswb4ECNIKG0CETTUxmXl9KUL" "+9gGlqCz5iWLOgWsnrcKcY0vXPG9J1r9AqBNTqNgHq2G03X09266X5CpOe1" "zFo+Owb1zxtp3PehFdfQJ610CDLEaS9V9Rqp17hCyybEpOGVwe8fnk+fbEL" "2Bo3UPGrpsHzUoaGpDftmWssZkhpBJKVMJyf/RuP2SmmaIzmnw9JiSlYhzo" "4tpzd5rFXhjRbg4zW9C+2qok+2+qDM1iJ684gPHMIY8aLWrdgQTxkumGmTq" "gawR+N5MDtdPTEQ0XfIBc2cJEUyMTY5MPvACWpkA6SdS4xSvdXK3IVfOWA==\"]" "}", *lws_jwe_ex_c1_jwk_json = (uint8_t *) /* RSA enc private key (no parent JSON) */ "{" "\"kty\":\"RSA\"," "\"kid\":\"juliet@capulet.lit\"," "\"use\":\"enc\"," "\"n\":\"t6Q8PWSi1dkJj9hTP8hNYFlvadM7DflW9mWepOJhJ66w7nyoK1gPNqFMSQRy" "O125Gp-TEkodhWr0iujjHVx7BcV0llS4w5ACGgPrcAd6ZcSR0-Iqom-QFcNP" "8Sjg086MwoqQU_LYywlAGZ21WSdS_PERyGFiNnj3QQlO8Yns5jCtLCRwLHL0" "Pb1fEv45AuRIuUfVcPySBWYnDyGxvjYGDSM-AqWS9zIQ2ZilgT-GqUmipg0X" "OC0Cc20rgLe2ymLHjpHciCKVAbY5-L32-lSeZO-Os6U15_aXrk9Gw8cPUaX1" "_I8sLGuSiVdt3C_Fn2PZ3Z8i744FPFGGcG1qs2Wz-Q\"," "\"e\":\"AQAB\"," "\"d\":\"GRtbIQmhOZtyszfgKdg4u_N-R_mZGU_9k7JQ_jn1DnfTuMdSNprTeaSTyWfS" "NkuaAwnOEbIQVy1IQbWVV25NY3ybc_IhUJtfri7bAXYEReWaCl3hdlPKXy9U" "vqPYGR0kIXTQRqns-dVJ7jahlI7LyckrpTmrM8dWBo4_PMaenNnPiQgO0xnu" "ToxutRZJfJvG4Ox4ka3GORQd9CsCZ2vsUDmsXOfUENOyMqADC6p1M3h33tsu" "rY15k9qMSpG9OX_IJAXmxzAh_tWiZOwk2K4yxH9tS3Lq1yX8C1EWmeRDkK2a" "hecG85-oLKQt5VEpWHKmjOi_gJSdSgqcN96X52esAQ\"," "\"p\":\"2rnSOV4hKSN8sS4CgcQHFbs08XboFDqKum3sc4h3GRxrTmQdl1ZK9uw-PIHf" "QP0FkxXVrx-WE-ZEbrqivH_2iCLUS7wAl6XvARt1KkIaUxPPSYB9yk31s0Q8" "UK96E3_OrADAYtAJs-M3JxCLfNgqh56HDnETTQhH3rCT5T3yJws\"," "\"q\":\"1u_RiFDP7LBYh3N4GXLT9OpSKYP0uQZyiaZwBtOCBNJgQxaj10RWjsZu0c6I" "edis4S7B_coSKB0Kj9PaPaBzg-IySRvvcQuPamQu66riMhjVtG6TlV8CLCYK" "rYl52ziqK0E_ym2QnkwsUX7eYTB7LbAHRK9GqocDE5B0f808I4s\"," "\"dp\":\"KkMTWqBUefVwZ2_Dbj1pPQqyHSHjj90L5x_MOzqYAJMcLMZtbUtwKqvVDq3" "tbEo3ZIcohbDtt6SbfmWzggabpQxNxuBpoOOf_a_HgMXK_lhqigI4y_kqS1w" "Y52IwjUn5rgRrJ-yYo1h41KR-vz2pYhEAeYrhttWtxVqLCRViD6c\"," "\"dq\":\"AvfS0-gRxvn0bwJoMSnFxYcK1WnuEjQFluMGfwGitQBWtfZ1Er7t1xDkbN9" "GQTB9yqpDoYaN06H7CFtrkxhJIBQaj6nkF5KKS3TQtQ5qCzkOkmxIe3KRbBy" "mXxkb5qwUpX5ELD5xFc6FeiafWYY63TmmEAu_lRFCOJ3xDea-ots\"," "\"qi\":\"lSQi-w9CpyUReMErP1RsBLk7wNtOvs5EQpPqmuMvqW57NBUczScEoPwmUqq" "abu9V0-Py4dQ57_bapoKRu1R90bvuFnU63SHWEFglZQvJDMeAvmj4sm-Fp0o" "Yu_neotgQ0hzbI5gry7ajdYy9-2lNx_76aBZoOUu9HCJ-UsfSOI8\"" "}" /*, lws_jwe_ex_c1_plaintext[] = { 123, 34, 107, 116, 121, 34, 58, 34, 82, 83, 65, 34, 44, 34, 107, 105, 100, 34, 58, 34, 106, 117, 108, 105, 101, 116, 64, 99, 97, 112, 117, 108, 101, 116, 46, 108, 105, 116, 34, 44, 34, 117, 115, 101, 34, 58, 34, 101, 110, 99, 34, 44, 34, 110, 34, 58, 34, 116, 54, 81, 56, 80, 87, 83, 105, 49, 100, 107, 74, 106, 57, 104, 84, 80, 56, 104, 78, 89, 70, 108, 118, 97, 100, 77, 55, 68, 102, 108, 87, 57, 109, 87, 101, 112, 79, 74, 104, 74, 54, 54, 119, 55, 110, 121, 111, 75, 49, 103, 80, 78, 113, 70, 77, 83, 81, 82, 121, 79, 49, 50, 53, 71, 112, 45, 84, 69, 107, 111, 100, 104, 87, 114, 48, 105, 117, 106, 106, 72, 86, 120, 55, 66, 99, 86, 48, 108, 108, 83, 52, 119, 53, 65, 67, 71, 103, 80, 114, 99, 65, 100, 54, 90, 99, 83, 82, 48, 45, 73, 113, 111, 109, 45, 81, 70, 99, 78, 80, 56, 83, 106, 103, 48, 56, 54, 77, 119, 111, 113, 81, 85, 95, 76, 89, 121, 119, 108, 65, 71, 90, 50, 49, 87, 83, 100, 83, 95, 80, 69, 82, 121, 71, 70, 105, 78, 110, 106, 51, 81, 81, 108, 79, 56, 89, 110, 115, 53, 106, 67, 116, 76, 67, 82, 119, 76, 72, 76, 48, 80, 98, 49, 102, 69, 118, 52, 53, 65, 117, 82, 73, 117, 85, 102, 86, 99, 80, 121, 83, 66, 87, 89, 110, 68, 121, 71, 120, 118, 106, 89, 71, 68, 83, 77, 45, 65, 113, 87, 83, 57, 122, 73, 81, 50, 90, 105, 108, 103, 84, 45, 71, 113, 85, 109, 105, 112, 103, 48, 88, 79, 67, 48, 67, 99, 50, 48, 114, 103, 76, 101, 50, 121, 109, 76, 72, 106, 112, 72, 99, 105, 67, 75, 86, 65, 98, 89, 53, 45, 76, 51, 50, 45, 108, 83, 101, 90, 79, 45, 79, 115, 54, 85, 49, 53, 95, 97, 88, 114, 107, 57, 71, 119, 56, 99, 80, 85, 97, 88, 49, 95, 73, 56, 115, 76, 71, 117, 83, 105, 86, 100, 116, 51, 67, 95, 70, 110, 50, 80, 90, 51, 90, 56, 105, 55, 52, 52, 70, 80, 70, 71, 71, 99, 71, 49, 113, 115, 50, 87, 122, 45, 81, 34, 44, 34, 101, 34, 58, 34, 65, 81, 65, 66, 34, 44, 34, 100, 34, 58, 34, 71, 82, 116, 98, 73, 81, 109, 104, 79, 90, 116, 121, 115, 122, 102, 103, 75, 100, 103, 52, 117, 95, 78, 45, 82, 95, 109, 90, 71, 85, 95, 57, 107, 55, 74, 81, 95, 106, 110, 49, 68, 110, 102, 84, 117, 77, 100, 83, 78, 112, 114, 84, 101, 97, 83, 84, 121, 87, 102, 83, 78, 107, 117, 97, 65, 119, 110, 79, 69, 98, 73, 81, 86, 121, 49, 73, 81, 98, 87, 86, 86, 50, 53, 78, 89, 51, 121, 98, 99, 95, 73, 104, 85, 74, 116, 102, 114, 105, 55, 98, 65, 88, 89, 69, 82, 101, 87, 97, 67, 108, 51, 104, 100, 108, 80, 75, 88, 121, 57, 85, 118, 113, 80, 89, 71, 82, 48, 107, 73, 88, 84, 81, 82, 113, 110, 115, 45, 100, 86, 74, 55, 106, 97, 104, 108, 73, 55, 76, 121, 99, 107, 114, 112, 84, 109, 114, 77, 56, 100, 87, 66, 111, 52, 95, 80, 77, 97, 101, 110, 78, 110, 80, 105, 81, 103, 79, 48, 120, 110, 117, 84, 111, 120, 117, 116, 82, 90, 74, 102, 74, 118, 71, 52, 79, 120, 52, 107, 97, 51, 71, 79, 82, 81, 100, 57, 67, 115, 67, 90, 50, 118, 115, 85, 68, 109, 115, 88, 79, 102, 85, 69, 78, 79, 121, 77, 113, 65, 68, 67, 54, 112, 49, 77, 51, 104, 51, 51, 116, 115, 117, 114, 89, 49, 53, 107, 57, 113, 77, 83, 112, 71, 57, 79, 88, 95, 73, 74, 65, 88, 109, 120, 122, 65, 104, 95, 116, 87, 105, 90, 79, 119, 107, 50, 75, 52, 121, 120, 72, 57, 116, 83, 51, 76, 113, 49, 121, 88, 56, 67, 49, 69, 87, 109, 101, 82, 68, 107, 75, 50, 97, 104, 101, 99, 71, 56, 53, 45, 111, 76, 75, 81, 116, 53, 86, 69, 112, 87, 72, 75, 109, 106, 79, 105, 95, 103, 74, 83, 100, 83, 103, 113, 99, 78, 57, 54, 88, 53, 50, 101, 115, 65, 81, 34, 44, 34, 112, 34, 58, 34, 50, 114, 110, 83, 79, 86, 52, 104, 75, 83, 78, 56, 115, 83, 52, 67, 103, 99, 81, 72, 70, 98, 115, 48, 56, 88, 98, 111, 70, 68, 113, 75, 117, 109, 51, 115, 99, 52, 104, 51, 71, 82, 120, 114, 84, 109, 81, 100, 108, 49, 90, 75, 57, 117, 119, 45, 80, 73, 72, 102, 81, 80, 48, 70, 107, 120, 88, 86, 114, 120, 45, 87, 69, 45, 90, 69, 98, 114, 113, 105, 118, 72, 95, 50, 105, 67, 76, 85, 83, 55, 119, 65, 108, 54, 88, 118, 65, 82, 116, 49, 75, 107, 73, 97, 85, 120, 80, 80, 83, 89, 66, 57, 121, 107, 51, 49, 115, 48, 81, 56, 85, 75, 57, 54, 69, 51, 95, 79, 114, 65, 68, 65, 89, 116, 65, 74, 115, 45, 77, 51, 74, 120, 67, 76, 102, 78, 103, 113, 104, 53, 54, 72, 68, 110, 69, 84, 84, 81, 104, 72, 51, 114, 67, 84, 53, 84, 51, 121, 74, 119, 115, 34, 44, 34, 113, 34, 58, 34, 49, 117, 95, 82, 105, 70, 68, 80, 55, 76, 66, 89, 104, 51, 78, 52, 71, 88, 76, 84, 57, 79, 112, 83, 75, 89, 80, 48, 117, 81, 90, 121, 105, 97, 90, 119, 66, 116, 79, 67, 66, 78, 74, 103, 81, 120, 97, 106, 49, 48, 82, 87, 106, 115, 90, 117, 48, 99, 54, 73, 101, 100, 105, 115, 52, 83, 55, 66, 95, 99, 111, 83, 75, 66, 48, 75, 106, 57, 80, 97, 80, 97, 66, 122, 103, 45, 73, 121, 83, 82, 118, 118, 99, 81, 117, 80, 97, 109, 81, 117, 54, 54, 114, 105, 77, 104, 106, 86, 116, 71, 54, 84, 108, 86, 56, 67, 76, 67, 89, 75, 114, 89, 108, 53, 50, 122, 105, 113, 75, 48, 69, 95, 121, 109, 50, 81, 110, 107, 119, 115, 85, 88, 55, 101, 89, 84, 66, 55, 76, 98, 65, 72, 82, 75, 57, 71, 113, 111, 99, 68, 69, 53, 66, 48, 102, 56, 48, 56, 73, 52, 115, 34, 44, 34, 100, 112, 34, 58, 34, 75, 107, 77, 84, 87, 113, 66, 85, 101, 102, 86, 119, 90, 50, 95, 68, 98, 106, 49, 112, 80, 81, 113, 121, 72, 83, 72, 106, 106, 57, 48, 76, 53, 120, 95, 77, 79, 122, 113, 89, 65, 74, 77, 99, 76, 77, 90, 116, 98, 85, 116, 119, 75, 113, 118, 86, 68, 113, 51, 116, 98, 69, 111, 51, 90, 73, 99, 111, 104, 98, 68, 116, 116, 54, 83, 98, 102, 109, 87, 122, 103, 103, 97, 98, 112, 81, 120, 78, 120, 117, 66, 112, 111, 79, 79, 102, 95, 97, 95, 72, 103, 77, 88, 75, 95, 108, 104, 113, 105, 103, 73, 52, 121, 95, 107, 113, 83, 49, 119, 89, 53, 50, 73, 119, 106, 85, 110, 53, 114, 103, 82, 114, 74, 45, 121, 89, 111, 49, 104, 52, 49, 75, 82, 45, 118, 122, 50, 112, 89, 104, 69, 65, 101, 89, 114, 104, 116, 116, 87, 116, 120, 86, 113, 76, 67, 82, 86, 105, 68, 54, 99, 34, 44, 34, 100, 113, 34, 58, 34, 65, 118, 102, 83, 48, 45, 103, 82, 120, 118, 110, 48, 98, 119, 74, 111, 77, 83, 110, 70, 120, 89, 99, 75, 49, 87, 110, 117, 69, 106, 81, 70, 108, 117, 77, 71, 102, 119, 71, 105, 116, 81, 66, 87, 116, 102, 90, 49, 69, 114, 55, 116, 49, 120, 68, 107, 98, 78, 57, 71, 81, 84, 66, 57, 121, 113, 112, 68, 111, 89, 97, 78, 48, 54, 72, 55, 67, 70, 116, 114, 107, 120, 104, 74, 73, 66, 81, 97, 106, 54, 110, 107, 70, 53, 75, 75, 83, 51, 84, 81, 116, 81, 53, 113, 67, 122, 107, 79, 107, 109, 120, 73, 101, 51, 75, 82, 98, 66, 121, 109, 88, 120, 107, 98, 53, 113, 119, 85, 112, 88, 53, 69, 76, 68, 53, 120, 70, 99, 54, 70, 101, 105, 97, 102, 87, 89, 89, 54, 51, 84, 109, 109, 69, 65, 117, 95, 108, 82, 70, 67, 79, 74, 51, 120, 68, 101, 97, 45, 111, 116, 115, 34, 44, 34, 113, 105, 34, 58, 34, 108, 83, 81, 105, 45, 119, 57, 67, 112, 121, 85, 82, 101, 77, 69, 114, 80, 49, 82, 115, 66, 76, 107, 55, 119, 78, 116, 79, 118, 115, 53, 69, 81, 112, 80, 113, 109, 117, 77, 118, 113, 87, 53, 55, 78, 66, 85, 99, 122, 83, 99, 69, 111, 80, 119, 109, 85, 113, 113, 97, 98, 117, 57, 86, 48, 45, 80, 121, 52, 100, 81, 53, 55, 95, 98, 97, 112, 111, 75, 82, 117, 49, 82, 57, 48, 98, 118, 117, 70, 110, 85, 54, 51, 83, 72, 87, 69, 70, 103, 108, 90, 81, 118, 74, 68, 77, 101, 65, 118, 109, 106, 52, 115, 109, 45, 70, 112, 48, 111, 89, 117, 95, 110, 101, 111, 116, 103, 81, 48, 104, 122, 98, 73, 53, 103, 114, 121, 55, 97, 106, 100, 89, 121, 57, 45, 50, 108, 78, 120, 95, 55, 54, 97, 66, 90, 111, 79, 85, 117, 57, 72, 67, 74, 45, 85, 115, 102, 83, 79, 73, 56, 34, 125 } */ ; static int key_import_callback(struct lws_jwk *s, void *user) { lwsl_notice("%s: key type %d\n", __func__, s->kty); return 0; } int test_jwk(struct lws_context *context) { struct lws_jwk jwk; /* Test 1: A.1: Example public keys */ if (lws_jwk_import(&jwk, key_import_callback, NULL, (char *)lws_jwe_ex_a1_jwk_json, strlen((char *)lws_jwe_ex_a1_jwk_json)) < 0) { lwsl_notice("Failed to decode JWK test key\n"); goto bail1; } lws_jwk_destroy(&jwk); /* Test 1: A.2: Example private keys */ if (lws_jwk_import(&jwk, key_import_callback, NULL, (char *)lws_jwe_ex_a2_jwk_json, strlen((char *)lws_jwe_ex_a2_jwk_json)) < 0) { lwsl_notice("Failed at A.2\n"); goto bail1; } lws_jwk_destroy(&jwk); /* Test 1: A.3: Example symmetric keys */ if (lws_jwk_import(&jwk, key_import_callback, NULL, (char *)lws_jwe_ex_a3_jwk_json, strlen((char *)lws_jwe_ex_a3_jwk_json)) < 0) { lwsl_notice("Failed at A.3\n"); goto bail1; } lws_jwk_destroy(&jwk); /* Test 1: B: Example x509 cert chain (no parent JSON) */ if (lws_jwk_import(&jwk, NULL, NULL, (char *)lws_jwe_ex_b_jwk_json, strlen((char *)lws_jwe_ex_b_jwk_json)) < 0) { lwsl_notice("Failed at B\n"); goto bail1; } lws_jwk_destroy(&jwk); /* Test 1: C.1: Example private key (no parent JSON) */ if (lws_jwk_import(&jwk, NULL, NULL, (char *)lws_jwe_ex_c1_jwk_json, strlen((char *)lws_jwe_ex_c1_jwk_json)) < 0) { lwsl_notice("Failed at B\n"); goto bail1; } lws_jwk_destroy(&jwk); /* end */ lwsl_notice("%s: selftest OK\n", __func__); return 0; //bail: // lws_jwk_destroy(&jwk); bail1: lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__); return 1; } libwebsockets-3.2.1/minimal-examples/api-tests/api-test-jose/jws.c000066400000000000000000000477551357643561300252220ustar00rootroot00000000000000/* * lws-api-test-jose - RFC7515 jws tests * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include /* * JSON Web Signature is defined in RFC7515 * * https://tools.ietf.org/html/rfc7515 * * It's basically a way to wrap some JSON with a JSON "header" describing the * crypto, and a signature, all in a BASE64 wrapper with elided terminating '='. * * The signature stays with the content, it serves a different purpose than eg * a TLS tunnel to transfer it. * */ /* for none, the compact serialization format is b64u(jose hdr).b64u(payload) */ static const char *none_cser = "eyJhbGciOiJub25lIn0" "." "eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt" "cGxlLmNvbS9pc19yb290Ijp0cnVlfQ", *none_jose = "{\"alg\":\"none\"}", *none_payload = "{\"iss\":\"joe\",\r\n \"exp\":1300819380,\r\n" " \"http://example.com/is_root\":true}"; int test_jws_none(struct lws_context *context) { struct lws_jws_map map; struct lws_jose jose; char temp[2048]; int n, temp_len = sizeof(temp), ret = -1; lws_jose_init(&jose); /* A.5 Unsecured JSON "none" RFC7515 worked example */ /* decode the b64.b64[.b64] compact serialization blocks */ n = lws_jws_compact_decode(none_cser, strlen(none_cser), &map, NULL, temp, &temp_len); if (n != 2) { lwsl_err("%s: concat_map failed\n", __func__); goto bail; } /* confirm the decoded JOSE header is exactly what we expect */ if (strncmp(none_jose, map.buf[LJWS_JOSE], map.len[LJWS_JOSE])) { lwsl_err("%s: jose b64 decode wrong\n", __func__); goto bail; } /* parse the JOSE header */ if (lws_jws_parse_jose(&jose, map.buf[LJWS_JOSE], map.len[LJWS_JOSE], (char *)lws_concat_temp(temp, temp_len), &temp_len) < 0 || !jose.alg) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } /* confirm we used the "none" alg as expected from JOSE hdr */ if (strcmp(jose.alg->alg, "none")) { lwsl_err("%s: JOSE header has wrong alg\n", __func__); goto bail; } /* confirm the payload is literally what we expect */ if (strncmp(none_payload, map.buf[LJWS_PYLD], map.len[LJWS_PYLD])) { lwsl_err("%s: payload b64 decode wrong\n", __func__); goto bail; } /* end */ ret = 0; bail: lws_jose_destroy(&jose); if (ret) lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } static const char *test1 = "{\"typ\":\"JWT\",\r\n \"alg\":\"HS256\"}", *test1_enc = "eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9", *test2 = "{\"iss\":\"joe\",\r\n \"exp\":1300819380,\r\n" " \"http://example.com/is_root\":true}", *test2_enc = "eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQ" "ogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ", *key_jwk = "{\"kty\":\"oct\",\r\n" " \"k\":\"AyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQ" "Lr_T-1qS0gZH75aKtMN3Yj0iPS4hcgUuTwjAzZr1Z9CAow\"}", *hash_enc = "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk" ; int test_jws_HS256(struct lws_context *context) { char buf[2048], temp[256], *p = buf, *end = buf + sizeof(buf) - 1, *enc_ptr; uint8_t digest[LWS_GENHASH_LARGEST]; struct lws_jws_map map; int temp_len = sizeof(temp); struct lws_genhmac_ctx ctx; struct lws_jose jose; struct lws_jwk jwk; struct lws_jws jws; int n; lws_jose_init(&jose); lws_jws_init(&jws, &jwk, context); /* Test 1: SHA256 on RFC7515 worked example */ /* parse the JOSE header */ if (lws_jws_parse_jose(&jose, test1, strlen(test1), temp, &temp_len) < 0 || !jose.alg) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } /* confirm we used the "none" alg as expected from JOSE hdr */ if (strcmp(jose.alg->alg, "HS256")) { lwsl_err("%s: JOSE header has wrong alg\n", __func__); goto bail; } /* 1.1: import the JWK oct key */ if (lws_jwk_import(&jwk, NULL, NULL, key_jwk, strlen(key_jwk)) < 0) { lwsl_notice("Failed to decode JWK test key\n"); return -1; } if (jwk.kty != LWS_GENCRYPTO_KTY_OCT) { lwsl_err("%s: unexpected kty %d\n", __func__, jwk.kty); return -1; } /* 1.2: create JWS known hdr + known payload */ n = lws_jws_encode_section(test1, strlen(test1), 1, &p, end); if (n < 0) { goto bail; } if (strcmp(buf, test1_enc)) goto bail; enc_ptr = p + 1; /* + 1 skips the . */ n = lws_jws_encode_section(test2, strlen(test2), 0, &p, end); if (n < 0) { goto bail; } if (strcmp(enc_ptr, test2_enc)) goto bail; /* 1.3: use HMAC SHA-256 with known key on the hdr . payload */ if (lws_genhmac_init(&ctx, jose.alg->hmac_type, jwk.e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, jwk.e[LWS_GENCRYPTO_OCT_KEYEL_K].len)) goto bail; if (lws_genhmac_update(&ctx, (uint8_t *)buf, p - buf)) goto bail_destroy_hmac; lws_genhmac_destroy(&ctx, digest); /* 1.4: append a base64 encode of the computed HMAC digest */ enc_ptr = p + 1; /* + 1 skips the . */ n = lws_jws_encode_section((const char *)digest, 32, 0, &p, end); if (n < 0) goto bail; if (strcmp(enc_ptr, hash_enc)) { /* check against known B64URL hash */ lwsl_err("%s: b64 enc of computed HMAC mismatches '%s' '%s'\n", __func__, enc_ptr, hash_enc); goto bail; } /* 1.5: Check we can agree the signature matches the payload */ if (lws_jws_sig_confirm_compact_b64(buf, p - buf, &map, &jwk, context, lws_concat_temp(temp, temp_len), &temp_len) < 0) { lwsl_notice("%s: confirm sig failed\n", __func__); goto bail; } lws_jws_destroy(&jws); lws_jwk_destroy(&jwk); lws_jose_destroy(&jose); /* end */ lwsl_notice("%s: selftest OK\n", __func__); return 0; bail_destroy_hmac: lws_genhmac_destroy(&ctx, NULL); bail: lws_jws_destroy(&jws); lws_jwk_destroy(&jwk); lws_jose_destroy(&jose); lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__); return 1; } static const char /* the key from worked example in RFC7515 A-2, as a JWK */ *rfc7515_rsa_key = "{\"kty\":\"RSA\"," " \"n\":\"ofgWCuLjybRlzo0tZWJjNiuSfb4p4fAkd_wWJcyQoTbji9k0l8W26mPddx" "HmfHQp-Vaw-4qPCJrcS2mJPMEzP1Pt0Bm4d4QlL-yRT-SFd2lZS-pCgNMs" "D1W_YpRPEwOWvG6b32690r2jZ47soMZo9wGzjb_7OMg0LOL-bSf63kpaSH" "SXndS5z5rexMdbBYUsLA9e-KXBdQOS-UTo7WTBEMa2R2CapHg665xsmtdV" "MTBQY4uDZlxvb3qCo5ZwKh9kG4LT6_I5IhlJH7aGhyxXFvUK-DWNmoudF8" "NAco9_h9iaGNj8q2ethFkMLs91kzk2PAcDTW9gb54h4FRWyuXpoQ\"," "\"e\":\"AQAB\"," "\"d\":\"Eq5xpGnNCivDflJsRQBXHx1hdR1k6Ulwe2JZD50LpXyWPEAeP88vLNO97I" "jlA7_GQ5sLKMgvfTeXZx9SE-7YwVol2NXOoAJe46sui395IW_GO-pWJ1O0" "BkTGoVEn2bKVRUCgu-GjBVaYLU6f3l9kJfFNS3E0QbVdxzubSu3Mkqzjkn" "439X0M_V51gfpRLI9JYanrC4D4qAdGcopV_0ZHHzQlBjudU2QvXt4ehNYT" "CBr6XCLQUShb1juUO1ZdiYoFaFQT5Tw8bGUl_x_jTj3ccPDVZFD9pIuhLh" "BOneufuBiB4cS98l2SR_RQyGWSeWjnczT0QU91p1DhOVRuOopznQ\"," "\"p\":\"4BzEEOtIpmVdVEZNCqS7baC4crd0pqnRH_5IB3jw3bcxGn6QLvnEtfdUdi" "YrqBdss1l58BQ3KhooKeQTa9AB0Hw_Py5PJdTJNPY8cQn7ouZ2KKDcmnPG" "BY5t7yLc1QlQ5xHdwW1VhvKn-nXqhJTBgIPgtldC-KDV5z-y2XDwGUc\"," "\"q\":\"uQPEfgmVtjL0Uyyx88GZFF1fOunH3-7cepKmtH4pxhtCoHqpWmT8YAmZxa" "ewHgHAjLYsp1ZSe7zFYHj7C6ul7TjeLQeZD_YwD66t62wDmpe_HlB-TnBA" "-njbglfIsRLtXlnDzQkv5dTltRJ11BKBBypeeF6689rjcJIDEz9RWdc\"," "\"dp\":\"BwKfV3Akq5_MFZDFZCnW-wzl-CCo83WoZvnLQwCTeDv8uzluRSnm71I3Q" "CLdhrqE2e9YkxvuxdBfpT_PI7Yz-FOKnu1R6HsJeDCjn12Sk3vmAktV2zb" "34MCdy7cpdTh_YVr7tss2u6vneTwrA86rZtu5Mbr1C1XsmvkxHQAdYo0\"," "\"dq\":\"h_96-mK1R_7glhsum81dZxjTnYynPbZpHziZjeeHcXYsXaaMwkOlODsWa" "7I9xXDoRwbKgB719rrmI2oKr6N3Do9U0ajaHF-NKJnwgjMd2w9cjz3_-ky" "NlxAr2v4IKhGNpmM5iIgOS1VZnOZ68m6_pbLBSp3nssTdlqvd0tIiTHU\"," "\"qi\":\"IYd7DHOhrWvxkwPQsRM2tOgrjbcrfvtQJipd-DlcxyVuuM9sQLdgjVk2o" "y26F0EmpScGLq2MowX7fhd_QJQ3ydy5cY7YIBi87w93IKLEdfnbJtoOPLU" "W0ITrJReOgo1cq9SbsxYawBgfp_gh6A5603k2-ZQwVK0JKSHuLFkuQ3U\"" "}", *rfc7515_rsa_a1 = /* the signed worked example in RFC7515 A-1 */ "eyJhbGciOiJSUzI1NiJ9" ".eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt" "cGxlLmNvbS9pc19yb290Ijp0cnVlfQ" ".cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0XF9g2VtQgr9PJbu3XOiZj5RZmh7" "AAuHIm4Bh-0Qc_lF5YKt_O8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjbKBYNX4" "BAynRFdiuB--f_nZLgrnbyTyWzO75vRK5h6xBArLIARNPvkSjtQBMHlb1L07Qe7K" "0GarZRmB_eSN9383LcOLn6_dO--xi12jzDwusC-eOkHWEsqtFZESc6BfI7noOPqv" "hJ1phCnvWh6IeYI2w9QOYEUipUTI8np6LbgGY9Fs98rqVt5AXLIhWkWywlVmtVrB" "p0igcN_IoypGlUPQGe77Rw" ; int test_jws_RS256(struct lws_context *context) { struct lws_jws_map map; struct lws_jose jose; struct lws_jwk jwk; struct lws_jws jws; char temp[2048], *in; int n, l, temp_len = sizeof(temp); lws_jose_init(&jose); lws_jws_init(&jws, &jwk, context); /* Test 2: RS256 on RFC7515 worked example */ if (lws_gencrypto_jws_alg_to_definition("RS256", &jose.alg)) { lwsl_err("%s: RS256 not supported\n", __func__); goto bail; } /* 2.1: import the jwk */ if (lws_jwk_import(&jwk, NULL, NULL, rfc7515_rsa_key, strlen(rfc7515_rsa_key))) { lwsl_notice("%s: 2.2: Failed to read JWK key\n", __func__); goto bail2; } if (jwk.kty != LWS_GENCRYPTO_KTY_RSA) { lwsl_err("%s: 2.2: kty: %d instead of RSA\n", __func__, jwk.kty); goto bail; } /* 2.2: check the signature on the test packet from RFC7515 A-1 */ if (lws_jws_sig_confirm_compact_b64(rfc7515_rsa_a1, strlen(rfc7515_rsa_a1), &map, &jwk, context, temp, &temp_len) < 0) { lwsl_notice("%s: 2.2: confirm rsa sig failed\n", __func__); goto bail; } if (lws_jws_b64_compact_map(rfc7515_rsa_a1, strlen(rfc7515_rsa_a1), &jws.map_b64) != 3) { lwsl_notice("%s: lws_jws_b64_compact_map failed\n", __func__); goto bail; } /* 2.3: generate our own signature for a copy of the test packet */ in = lws_concat_temp(temp, temp_len); l = strlen(rfc7515_rsa_a1); if (temp_len < l + 1) goto bail; memcpy(in, rfc7515_rsa_a1, l + 1); temp_len -= l + 1; if (lws_jws_b64_compact_map(in, l, &jws.map_b64) != 3) { lwsl_notice("%s: lws_jws_b64_compact_map failed\n", __func__); goto bail; } /* overwrite the copy of the known b64 sig (it's all placed inside temp) */ n = lws_jws_sign_from_b64(&jose, &jws, (char *)jws.map_b64.buf[LJWS_SIG], jws.map_b64.len[LJWS_SIG] + 8); if (n < 0) { lwsl_err("%s: failed signing test packet\n", __func__); goto bail; } jws.map_b64.len[LJWS_SIG] = n; /* 2.4: confirm our signature can be verified */ in[l] = '\0'; if (lws_jws_sig_confirm_compact_b64(in, l, &map, &jwk, context, lws_concat_temp(temp, temp_len), &temp_len) < 0) { lwsl_notice("%s: 2.2: confirm rsa sig failed\n", __func__); goto bail; } lws_jwk_destroy(&jwk); /* end */ lwsl_notice("%s: selftest OK\n", __func__); return 0; bail: lws_jwk_destroy(&jwk); bail2: lws_jws_destroy(&jws); lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__); return 1; } static const char *es256_jose = "{\"alg\":\"ES256\"}", *es256_payload = "{\"iss\":\"joe\",\r\n \"exp\":1300819380,\r\n" " \"http://example.com/is_root\":true}", *es256_cser = "eyJhbGciOiJFUzI1NiJ9" "." "eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt" "cGxlLmNvbS9pc19yb290Ijp0cnVlfQ" "." "DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSA" "pmWQxfKTUJqPP3-Kg6NU1Q", *es256_jwk = "{" "\"kty\":\"EC\"," "\"crv\":\"P-256\"," "\"x\":\"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU\"," "\"y\":\"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0\"," "\"d\":\"jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI\"" "}" #if 0 , rfc7515_ec_a3_R[] = { 14, 209, 33, 83, 121, 99, 108, 72, 60, 47, 127, 21, 88, 7, 212, 2, 163, 178, 40, 3, 58, 249, 124, 126, 23, 129, 154, 195, 22, 158, 166, 101 }, rfc7515_ec_a3_S[] = { 197, 10, 7, 211, 140, 60, 112, 229, 216, 241, 45, 175, 8, 74, 84, 128, 166, 101, 144, 197, 242, 147, 80, 154, 143, 63, 127, 138, 131, 163, 84, 213 } #endif ; int test_jws_ES256(struct lws_context *context) { uint8_t digest[LWS_GENHASH_LARGEST]; struct lws_genhash_ctx hash_ctx; struct lws_jws_map map; struct lws_jose jose; struct lws_jwk jwk; struct lws_jws jws; char temp[2048], *p; int ret = -1, l, n, temp_len = sizeof(temp); /* A.3 "ES256" RFC7515 worked example - verify */ lws_jose_init(&jose); /* decode the b64.b64[.b64] compact serialization blocks */ if (lws_jws_compact_decode(es256_cser, strlen(es256_cser), &jws.map, &jws.map_b64, temp, &temp_len) != 3) { lwsl_err("%s: concat_map failed\n", __func__); goto bail; } /* confirm the decoded JOSE header is exactly what we expect */ if (jws.map.len[LJWS_JOSE] != strlen(es256_jose) || strncmp(es256_jose, jws.map.buf[LJWS_JOSE], jws.map.len[LJWS_JOSE])) { lwsl_err("%s: jose b64 decode wrong\n", __func__); goto bail; } /* confirm the decoded payload is exactly what we expect */ if (jws.map.len[LJWS_PYLD] != strlen(es256_payload) || strncmp(es256_payload, jws.map.buf[LJWS_PYLD], jws.map.len[LJWS_PYLD])) { lwsl_err("%s: payload b64 decode wrong\n", __func__); goto bail; } /* parse the JOSE header */ if (lws_jws_parse_jose(&jose, jws.map.buf[LJWS_JOSE], jws.map.len[LJWS_JOSE], (char *)lws_concat_temp(temp, temp_len), &temp_len) < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } /* confirm we used "ES256" alg we expect from the JOSE hdr */ if (strcmp(jose.alg->alg, "ES256")) { lwsl_err("%s: JOSE header has wrong alg\n", __func__); goto bail; } jws.jwk = &jwk; jws.context = context; /* import the ES256 jwk */ if (lws_jwk_import(&jwk, NULL, NULL, es256_jwk, strlen(es256_jwk))) { lwsl_notice("%s: Failed to read JWK key\n", __func__); goto bail; } /* sanity */ if (jwk.kty != LWS_GENCRYPTO_KTY_EC) { lwsl_err("%s: kty: %d instead of EC\n", __func__, jwk.kty); goto bail1; } if (lws_jws_sig_confirm(&jws.map_b64, &jws.map, &jwk, context) < 0) { lwsl_notice("%s: confirm EC sig failed\n", __func__); goto bail1; } /* A.3 "ES256" RFC7515 worked example - sign */ l = strlen(es256_cser); if (temp_len < l + 1) goto bail1; p = lws_concat_temp(temp, temp_len); memcpy(p, es256_cser, l + 1); temp_len -= l + 1; /* scan the b64 compact serialization string to map the blocks */ if (lws_jws_b64_compact_map(p, l, &jws.map_b64) != 3) goto bail1; /* create the hash of the protected b64 part */ if (lws_genhash_init(&hash_ctx, jose.alg->hash_type) || lws_genhash_update(&hash_ctx, jws.map_b64.buf[LJWS_JOSE], jws.map_b64.len[LJWS_JOSE]) || lws_genhash_update(&hash_ctx, ".", 1) || lws_genhash_update(&hash_ctx, jws.map_b64.buf[LJWS_PYLD], jws.map_b64.len[LJWS_PYLD]) || lws_genhash_destroy(&hash_ctx, digest)) { lws_genhash_destroy(&hash_ctx, NULL); goto bail1; } lwsl_hexdump(jws.map_b64.buf[LJWS_SIG], jws.map_b64.len[LJWS_SIG]); /* overwrite the copy of the known b64 sig (it's placed inside buf) */ n = lws_jws_sign_from_b64(&jose, &jws, (char *)jws.map_b64.buf[LJWS_SIG], jws.map_b64.len[LJWS_SIG] + 8); if (n < 0) { lwsl_err("%s: failed signing test packet\n", __func__); goto bail1; } jws.map_b64.len[LJWS_SIG] = n; lwsl_hexdump(jws.map_b64.buf[LJWS_SIG], jws.map_b64.len[LJWS_SIG]); /* 2.4: confirm our generated signature can be verified */ // lwsl_err("p %p, l %d\n", p, (int)l); p[l] = '\0'; if (lws_jws_sig_confirm_compact_b64(p, l, &map, &jwk, context, lws_concat_temp(temp, temp_len), &temp_len) < 0) { lwsl_notice("%s: confirm our EC sig failed\n", __func__); goto bail1; } /* end */ ret = 0; bail1: lws_jwk_destroy(&jwk); lws_jose_destroy(&jose); bail: lwsl_notice("%s: selftest %s\n", __func__, ret ? "FAIL" : "OK"); return ret; } static const char *es512_jose = "{\"alg\":\"ES512\"}", *es512_payload = "Payload", *es512_cser = "eyJhbGciOiJFUzUxMiJ9" "." "UGF5bG9hZA" "." "AdwMgeerwtHoh-l192l60hp9wAHZFVJbLfD_UxMi70cwnZOYaRI1bKPWROc-mZZq" "wqT2SI-KGDKB34XO0aw_7XdtAG8GaSwFKdCAPZgoXD2YBJZCPEX3xKpRwcdOO8Kp" "EHwJjyqOgzDO7iKvU8vcnwNrmxYbSW9ERBXukOXolLzeO_Jn", *es512_jwk = "{" "\"kty\":\"EC\"," "\"crv\":\"P-521\"," "\"x\":\"AekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_" "NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGk\"," "\"y\":\"ADSmRA43Z1DSNx_RvcLI87cdL07l6jQyyBXMoxVg_l2Th-x3S1WDhjDl" "y79ajL4Kkd0AZMaZmh9ubmf63e3kyMj2\"," "\"d\":\"AY5pb7A0UFiB3RELSD64fTLOSV_jazdF7fLYyuTw8lOfRhWg6Y6rUrPA" "xerEzgdRhajnu0ferB0d53vM9mE15j2C\"" "}" ; int test_jws_ES512(struct lws_context *context) { uint8_t digest[LWS_GENHASH_LARGEST]; struct lws_genhash_ctx hash_ctx; struct lws_jws_map map; struct lws_jose jose; struct lws_jwk jwk; struct lws_jws jws; char temp[2048], *p; int ret = -1, l, n, temp_len = sizeof(temp); /* A.4 "ES512" RFC7515 worked example - verify */ lws_jose_init(&jose); /* decode the b64.b64[.b64] compact serialization blocks */ if (lws_jws_compact_decode(es512_cser, strlen(es512_cser), &jws.map, &jws.map_b64, temp, &temp_len) != 3) { lwsl_err("%s: concat_map failed\n", __func__); goto bail; } /* confirm the decoded JOSE header is exactly what we expect */ if (jws.map.len[LJWS_JOSE] != strlen(es512_jose) || strncmp(es512_jose, jws.map.buf[LJWS_JOSE], jws.map.len[LJWS_JOSE])) { lwsl_err("%s: jose b64 decode wrong\n", __func__); goto bail; } /* confirm the decoded payload is exactly what we expect */ if (jws.map.len[LJWS_PYLD] != strlen(es512_payload) || strncmp(es512_payload, jws.map.buf[LJWS_PYLD], jws.map.len[LJWS_PYLD])) { lwsl_err("%s: payload b64 decode wrong\n", __func__); goto bail; } /* parse the JOSE header */ if (lws_jws_parse_jose(&jose, jws.map.buf[LJWS_JOSE], jws.map.len[LJWS_JOSE], lws_concat_temp(temp, temp_len), &temp_len) < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } /* confirm we used "es512" alg we expect from the JOSE hdr */ if (strcmp(jose.alg->alg, "ES512")) { lwsl_err("%s: JOSE header has wrong alg\n", __func__); goto bail; } jws.jwk = &jwk; jws.context = context; /* import the es512 jwk */ if (lws_jwk_import(&jwk, NULL, NULL, es512_jwk, strlen(es512_jwk))) { lwsl_notice("%s: Failed to read JWK key\n", __func__); goto bail; } /* sanity */ if (jwk.kty != LWS_GENCRYPTO_KTY_EC) { lwsl_err("%s: kty: %d instead of EC\n", __func__, jwk.kty); goto bail1; } if (lws_jws_sig_confirm(&jws.map_b64, &jws.map, &jwk, context) < 0) { lwsl_notice("%s: confirm EC sig failed\n", __func__); goto bail1; } /* A.3 "es512" RFC7515 worked example - sign */ l = strlen(es512_cser); if (temp_len < l) goto bail1; p = lws_concat_temp(temp, temp_len); memcpy(p, es512_cser, l + 1); temp_len -= (l + 1); /* scan the b64 compact serialization string to map the blocks */ if (lws_jws_b64_compact_map(p, l, &jws.map_b64) != 3) goto bail1; /* create the hash of the protected b64 part */ if (lws_genhash_init(&hash_ctx, jose.alg->hash_type) || lws_genhash_update(&hash_ctx, jws.map_b64.buf[LJWS_JOSE], jws.map_b64.len[LJWS_JOSE]) || lws_genhash_update(&hash_ctx, ".", 1) || lws_genhash_update(&hash_ctx, jws.map_b64.buf[LJWS_PYLD], jws.map_b64.len[LJWS_PYLD]) || lws_genhash_destroy(&hash_ctx, digest)) { lws_genhash_destroy(&hash_ctx, NULL); goto bail1; } /* overwrite the copy of the known b64 sig (it's placed inside buf) */ n = lws_jws_sign_from_b64(&jose, &jws, (char *)jws.map_b64.buf[LJWS_SIG], 1024); if (n < 0) { lwsl_err("%s: failed signing test packet\n", __func__); goto bail1; } jws.map_b64.len[LJWS_SIG] = n; /* 2.4: confirm our generated signature can be verified */ p[l] = '\0'; if (lws_jws_sig_confirm_compact_b64(p, l, &map, &jwk, context, lws_concat_temp(temp, temp_len), &temp_len) < 0) { lwsl_notice("%s: confirm our ECDSA sig failed\n", __func__); goto bail1; } /* end */ ret = 0; bail1: lws_jwk_destroy(&jwk); lws_jose_destroy(&jose); bail: lwsl_notice("%s: selftest %s\n", __func__, ret ? "FAIL" : "OK"); return ret; } int test_jws(struct lws_context *context) { int n = 0; n |= test_jws_none(context); n |= test_jws_HS256(context); n |= test_jws_RS256(context); n |= test_jws_ES256(context); n |= test_jws_ES512(context); return n; } libwebsockets-3.2.1/minimal-examples/api-tests/api-test-jose/main.c000066400000000000000000000022671357643561300253300ustar00rootroot00000000000000/* * lws-api-test-jose * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include int test_jwk(struct lws_context *context); int test_jws(struct lws_context *context); int test_jwe(struct lws_context *context); int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int result = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS JOSE api tests\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.options = 0; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } result |= test_jwk(context); lwsl_notice("%d\n", result); result |= test_jws(context); lwsl_notice("%d\n", result); result |= test_jwe(context); lwsl_notice("%d\n", result); lwsl_user("Completed: %s\n", result ? "FAIL" : "PASS"); lws_context_destroy(context); return result; } libwebsockets-3.2.1/minimal-examples/api-tests/api-test-jose/selftest.sh000077500000000000000000000010311357643561300264140ustar00rootroot00000000000000#!/bin/bash # # $1: path to minimal example binaries... # if lws is built with -DLWS_WITH_MINIMAL_EXAMPLES=1 # that will be ./bin from your build dir # # $2: path for logs and results. The results will go # in a subdir named after the directory this script # is in # # $3: offset for test index count # # $4: total test count # # $5: path to ./minimal-examples dir in lws # # Test return code 0: OK, 254: timed out, other: error indication . $5/selftests-library.sh COUNT_TESTS=1 dotest $1 $2 apiselftest exit $FAILS libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_dsh/000077500000000000000000000000001357643561300247345ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_dsh/CMakeLists.txt000066400000000000000000000037631357643561300275050ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-api-test-lws_dsh) set(SRCS main.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_WITH_NETWORK 1 requirements) require_lws_config(LWS_WITH_LWS_DSH 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_dsh/README.md000066400000000000000000000005521357643561300262150ustar00rootroot00000000000000# lws api test lws_dsh Demonstrates how to use and performs selftests for lws_dsh ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ ./lws-api-test-lws_dsh [2018/10/09 09:14:17:4834] USER: LWS API selftest: lws_dsh [2018/10/09 09:14:17:4835] USER: Completed: PASS ``` libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_dsh/main.c000066400000000000000000000145151357643561300260320ustar00rootroot00000000000000/* * lws-api-test-lws_dsh * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include int test1(void) { lws_dsh_t *dsh; size_t size; void *a1; /* * test 1: single dsh, alloc 2 kinds and free everything back to a * single free obj */ dsh = lws_dsh_create(NULL, 16384, 2); if (!dsh) { lwsl_err("%s: Failed to create dsh\n", __func__); return 1; } if (lws_dsh_alloc_tail(dsh, 0, "hello", 5, NULL, 0)) { lwsl_err("%s: Failed to alloc 1\n", __func__); goto bail; } if (lws_dsh_alloc_tail(dsh, 1, "some other string", 17, NULL, 0)) { lwsl_err("%s: Failed to alloc 2\n", __func__); goto bail; } if (lws_dsh_alloc_tail(dsh, 0, "hello again", 11, NULL, 0)) { lwsl_err("%s: Failed to alloc 3\n", __func__); goto bail; } if (lws_dsh_get_head(dsh, 1, &a1, &size)) { lwsl_err("%s: no head 1\n", __func__); goto bail; } if (size != 17 || memcmp(a1, "some other string", 17)) { lwsl_err("%s: test 1 mismatch\n", __func__); goto bail; } lws_dsh_free(&a1); if (lws_dsh_get_head(dsh, 0, &a1, &size)) { lwsl_err("%s: no head 2\n", __func__); goto bail; } if (size != 5 || memcmp(a1, "hello", 5)) { lwsl_err("%s: test 2 mismatch\n", __func__); goto bail; } lws_dsh_free(&a1); if (lws_dsh_get_head(dsh, 0, &a1, &size)) { lwsl_err("%s: no head 3\n", __func__); goto bail; } if (size != 11 || memcmp(a1, "hello again", 11)) { lwsl_err("%s: test 3 mismatch\n", __func__); goto bail; } lws_dsh_free(&a1); lws_dsh_destroy(&dsh); return 0; bail: lws_dsh_destroy(&dsh); return 1; } int test2(void) { lws_dsh_t *dsh, *dsh2; lws_dll2_owner_t owner; uint8_t blob[4096]; memset(blob, 0, sizeof(blob)); /* * test 2: multiple dsh, overflow allocation and dynamic destroy */ lws_dll2_owner_clear(&owner); dsh = lws_dsh_create(&owner, 4096, 2); if (!dsh) { lwsl_err("%s: Failed to create dsh1\n", __func__); return 1; } dsh2 = lws_dsh_create(&owner, 4096, 2); if (!dsh) { lwsl_err("%s: Failed to create dsh2\n", __func__); goto bail; } if (lws_dsh_alloc_tail(dsh, 0, blob, 4000, NULL, 0)) { lwsl_err("%s: Failed to alloc 1\n", __func__); goto bail2; } if (lws_dsh_alloc_tail(dsh2, 0, "hello", 5, NULL, 0)) { lwsl_err("%s: Failed to alloc 2\n", __func__); goto bail2; } /* * We create this logically on dsh. But there's no room for the body. * It should figure out it can use space on dsh2. */ if (lws_dsh_alloc_tail(dsh, 0, blob, 2000, NULL, 0)) { lwsl_err("%s: Failed to alloc 3\n", __func__); goto bail2; } if (lws_dsh_alloc_tail(dsh2, 0, "hello again", 11, NULL, 0)) { lwsl_err("%s: Failed to alloc 4\n", __func__); goto bail2; } /* * When we destroy dsh2 it will try to migrate out the 2000 allocation * from there but find there is no space in dsh1. It should handle it * by logicalling dropping the object. */ lws_dsh_destroy(&dsh2); lws_dsh_destroy(&dsh); return 0; bail2: lws_dsh_destroy(&dsh2); bail: lws_dsh_destroy(&dsh); return 1; } int test3(void) { lws_dsh_t *dsh, *dsh2; lws_dll2_owner_t owner; uint8_t blob[4096]; memset(blob, 0, sizeof(blob)); /* * test 3: multiple dsh, umeetable allocation request */ lws_dll2_owner_clear(&owner); dsh = lws_dsh_create(&owner, 4096, 2); if (!dsh) { lwsl_err("%s: Failed to create dsh1\n", __func__); return 1; } dsh2 = lws_dsh_create(&owner, 4096, 2); if (!dsh) { lwsl_err("%s: Failed to create dsh2\n", __func__); goto bail; } if (lws_dsh_alloc_tail(dsh, 0, blob, 4000, NULL, 0)) { lwsl_err("%s: Failed to alloc 1\n", __func__); goto bail2; } if (lws_dsh_alloc_tail(dsh2, 0, "hello", 5, NULL, 0)) { lwsl_err("%s: Failed to alloc 2\n", __func__); goto bail2; } /* * There's just no room for this, we expect it to fail */ if (!lws_dsh_alloc_tail(dsh, 0, blob, 5000, NULL, 0)) { lwsl_err("%s: Didn't fail to alloc as expected\n", __func__); goto bail2; } if (lws_dsh_alloc_tail(dsh2, 0, "hello again", 11, NULL, 0)) { lwsl_err("%s: Failed to alloc 4\n", __func__); goto bail2; } lws_dsh_destroy(&dsh2); lws_dsh_destroy(&dsh); return 0; bail2: lws_dsh_destroy(&dsh2); bail: lws_dsh_destroy(&dsh); return 1; } int test4(void) { uint8_t blob[4096]; lws_dsh_t *dsh; size_t size; void *a1; memset(blob, 0, sizeof(blob)); /* * test 1: use up whole free list, then recover and alloc something * else */ dsh = lws_dsh_create(NULL, 4096, 2); if (!dsh) { lwsl_err("%s: Failed to create dsh\n", __func__); return 1; } if (lws_dsh_alloc_tail(dsh, 0, blob, 4000, NULL, 0)) { lwsl_err("%s: Failed to alloc 1\n", __func__); goto bail; } if (lws_dsh_get_head(dsh, 0, &a1, &size)) { lwsl_err("%s: no head 1\n", __func__); goto bail; } if (size != 4000) { lwsl_err("%s: test 1 mismatch\n", __func__); goto bail; } lws_dsh_free(&a1); if (lws_dsh_alloc_tail(dsh, 0, "some other string", 17, NULL, 0)) { lwsl_err("%s: Failed to alloc 2\n", __func__); goto bail; } if (lws_dsh_alloc_tail(dsh, 0, "hello again", 11, NULL, 0)) { lwsl_err("%s: Failed to alloc 3\n", __func__); goto bail; } if (lws_dsh_get_head(dsh, 0, &a1, &size)) { lwsl_err("%s: no head 1\n", __func__); goto bail; } if (size != 17 || memcmp(a1, "some other string", 17)) { lwsl_err("%s: test 1 mismatch\n", __func__); goto bail; } lws_dsh_free(&a1); if (lws_dsh_get_head(dsh, 0, &a1, &size)) { lwsl_err("%s: no head 2\n", __func__); goto bail; } if (size != 11 || memcmp(a1, "hello again", 11)) { lwsl_err("%s: test 2 mismatch (%zu)\n", __func__, size); goto bail; } lws_dsh_free(&a1); lws_dsh_destroy(&dsh); return 0; bail: lws_dsh_destroy(&dsh); return 1; } int main(int argc, const char **argv) { int logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; int ret = 0, n; const char *p; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: lws_dsh\n"); n = test1(); lwsl_user("%s: test1: %d\n", __func__, n); ret |= n; n = test2(); lwsl_user("%s: test2: %d\n", __func__, n); ret |= n; n = test3(); lwsl_user("%s: test3: %d\n", __func__, n); ret |= n; n = test4(); lwsl_user("%s: test4: %d\n", __func__, n); ret |= n; lwsl_user("Completed: %s\n", ret ? "FAIL" : "PASS"); return ret; } libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_dsh/selftest.sh000077500000000000000000000010311357643561300271170ustar00rootroot00000000000000#!/bin/bash # # $1: path to minimal example binaries... # if lws is built with -DLWS_WITH_MINIMAL_EXAMPLES=1 # that will be ./bin from your build dir # # $2: path for logs and results. The results will go # in a subdir named after the directory this script # is in # # $3: offset for test index count # # $4: total test count # # $5: path to ./minimal-examples dir in lws # # Test return code 0: OK, 254: timed out, other: error indication . $5/selftests-library.sh COUNT_TESTS=1 dotest $1 $2 apiselftest exit $FAILS libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_sequencer/000077500000000000000000000000001357643561300261505ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_sequencer/CMakeLists.txt000066400000000000000000000040531357643561300307120ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-api-test-lws_sequencer) set(SRCS main.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SEQUENCER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_sequencer/libwebsockets.org.cer000066400000000000000000000067521357643561300323030ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFWjCCBEKgAwIBAgISA9x0/oj5PLdW46hsmR82/7ytMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTA5MDcwNzA5NDBaFw0x OTEyMDYwNzA5NDBaMBwxGjAYBgNVBAMTEWxpYndlYnNvY2tldHMub3JnMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxPinIkleLmvEcA/YuBss6ASXVi7g yr6Sss7cB3vTy7Fp8OB2c1N25prHZxVpORAUo0UreiaY2Ws4NFvDaYp08ZffevuC UhThsEJlbkD0uvt7dPapJt9PNJtlxjNFWyvHEy6PijzIaMYDROiStcCJQn7kAew/ Za2+5kNVgKqT+7OXukJEFdSdVZI6QC/npeQlkIrFSq1WVthCGBNJehxxES0hSWzk 0gNVKlkD3/SbkupsfUpe73XiawMtrtsSE7cdnul7VZmiP8I/3sJr1+4/3xZ+DEYg mVB82B0vd08VJYzU7Nf0pz0PWusAmzRoRn81IXkOfBg9ohlSSEoZhHYS7QIDAQAB o4ICZjCCAmIwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr BgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRmKKyGjufWgp7pR2x0tWxG D9G+WTAfBgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcB AQRjMGEwLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlw dC5vcmcwLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlw dC5vcmcvMBwGA1UdEQQVMBOCEWxpYndlYnNvY2tldHMub3JnMEwGA1UdIARFMEMw CAYGZ4EMAQIBMDcGCysGAQQBgt8TAQEBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly9j cHMubGV0c2VuY3J5cHQub3JnMIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHcAdH7a gzGtMxCRIZzOJU9CcMK//V5CIAjGNzV55hB7zFYAAAFtCsWIfgAABAMASDBGAiEA 0H55VqSKV3otHK7uHNbcR0QwoUYtCmeObhsqxzCnmDwCIQD3mtuSKrxTD3oA+Yde nmTgWfFyS4TNgLNEPCJYo2s75gB1ACk8UZZUyDlluqpQ/FgH1Ldvv1h6KXLcpMMM 9OVFR/R4AAABbQrFil4AAAQDAEYwRAIgNSpvz/1JA2aP6fh6ujGNuYfrAvWjlxXo CJtVGe4XaDYCIGmK1/9tl1uQbVD46P5NswnULq06KQmuOrlI3HO4r86HMA0GCSqG SIb3DQEBCwUAA4IBAQBiAlV7wkCsWE99VmZHBmcbZChWyWUHG3LM1hnaQRQjTSYk CIlauCpWzlUd6weuvra85KqBbCYo+1hxbwITI796uAdgtHmBE8nj0VltHwKeSq2s KKiGXBRT7Z7t0VHYSLOlGOVn1auuQFaWBArc0cQ/m1ZsoHvOiHTlKQvVsA4HnIxA CjGY9OOQoh0c36ecbJZ44XKnU9J/OXtDx00aW6QodaZmgMp/OOCghFQUvufkgTUL LZid873/8dJVWjAaj1VdadO1nSbdAfBbeWXy93+vg1aAoig80RoscrzYCaNlwmR7 EO5zWxL3l+xUZogQSJuICgUgNzVB3wjn8HeHGsqt -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj /PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_sequencer/main.c000066400000000000000000000222571357643561300272500ustar00rootroot00000000000000/* * lws-api-test-lws_sequencer * * Written in 2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This api test uses the lws_sequencer api to make five http client requests * to libwebsockets.org in sequence, from inside the event loop. The fourth * fourth http client request is directed to port 22 where it stalls * triggering the lws_sequencer timeout flow. The fifth is given a nonexistant * dns name and is expected to fail. */ #include #include static int interrupted, test_good = 0; enum { SEQ1, SEQ2, SEQ3_404, SEQ4_TIMEOUT, /* we expect to timeout */ SEQ5_BAD_ADDRESS /* we expect the connection to fail */ }; /* * This is the user defined struct whose space is allocated along with the * sequencer when that is created. * * You'd put everything your sequencer needs to do its job in here. */ struct myseq { struct lws_vhost *vhost; struct lws *cwsi; /* client wsi for current step if any */ int state; /* which test we're on */ int http_resp; }; /* sequencer messages specific to this sequencer */ enum { SEQ_MSG_CLIENT_FAILED = LWSSEQ_USER_BASE, SEQ_MSG_CLIENT_DONE, }; /* this is the sequence of GETs we will do */ static const char *url_paths[] = { "https://libwebsockets.org/index.html", "https://libwebsockets.org/lws.css", "https://libwebsockets.org/404.html", "https://libwebsockets.org:22", /* this causes us to time out */ "https://doesntexist.invalid/" /* fail early in connect */ }; static void sigint_handler(int sig) { interrupted = 1; } /* * This is the sequencer-aware http protocol handler. It monitors the client * http action and queues messages for the sequencer when something definitive * happens. */ static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct myseq *s = (struct myseq *)user; int seq_msg = SEQ_MSG_CLIENT_FAILED; switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_notice("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); goto notify; case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: if (!s) return 1; s->http_resp = lws_http_client_http_response(wsi); lwsl_info("Connected with server response: %d\n", s->http_resp); break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_info("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); #if 0 /* enable to dump the html */ { const char *p = in; while (len--) if (*p < 0x7f) putchar(*p++); else putchar('.'); } #endif return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_notice("LWS_CALLBACK_COMPLETED_CLIENT_HTTP: wsi %p\n", wsi); if (!s) return 1; /* * We got a definitive transaction completion */ seq_msg = SEQ_MSG_CLIENT_DONE; goto notify; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: lwsl_info("LWS_CALLBACK_CLOSED_CLIENT_HTTP\n"); if (!s) return 1; lwsl_user("%s: wsi %p: seq failed at CLOSED_CLIENT_HTTP\n", __func__, wsi); goto notify; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); notify: /* * We only inform the sequencer of a definitive outcome for our step. * * So once we have informed it, we detach ourselves from the sequencer * and the sequencer from ourselves. Wsi may want to live on but after * we got our result and moved on to the next test or completed, the * sequencer doesn't want to hear from it again. */ if (!s) return 1; lws_set_wsi_user(wsi, NULL); s->cwsi = NULL; lws_seq_queue_event(lws_seq_from_user(s), seq_msg, NULL, NULL); return 0; } static const struct lws_protocols protocols[] = { { "seq-test-http", callback_http, 0, 0, }, { NULL, NULL, 0, 0 } }; static int sequencer_start_client(struct myseq *s) { struct lws_client_connect_info i; const char *prot, *path1; char uri[128], path[128]; int n; lws_strncpy(uri, url_paths[s->state], sizeof(uri)); memset(&i, 0, sizeof i); i.context = lws_seq_get_context(lws_seq_from_user(s)); if (lws_parse_uri(uri, &prot, &i.address, &i.port, &path1)) { lwsl_err("%s: uri error %s\n", __func__, uri); } if (!strcmp(prot, "https")) i.ssl_connection = LCCSCF_USE_SSL; path[0] = '/'; n = 1; if (path1[0] == '/') n = 0; lws_strncpy(&path[n], path1, sizeof(path) - 1); i.path = path; i.host = i.address; i.origin = i.address; i.method = "GET"; i.vhost = s->vhost; i.userdata = s; i.protocol = protocols[0].name; i.local_protocol_name = protocols[0].name; i.pwsi = &s->cwsi; if (!lws_client_connect_via_info(&i)) { lwsl_notice("%s: connecting to %s://%s:%d%s failed\n", __func__, prot, i.address, i.port, path); /* we couldn't even get started with the client connection */ lws_seq_queue_event(lws_seq_from_user(s), SEQ_MSG_CLIENT_FAILED, NULL, NULL); return 1; } lws_seq_timeout_us(lws_seq_from_user(s), 3 * LWS_US_PER_SEC); lwsl_notice("%s: wsi %p: connecting to %s://%s:%d%s\n", __func__, s->cwsi, prot, i.address, i.port, path); return 0; } /* * The sequencer callback handles queued sequencer messages in the order they * were queued. The messages are presented from the event loop thread context * even if they were queued from a different thread. */ static lws_seq_cb_return_t sequencer_cb(struct lws_sequencer *seq, void *user, int event, void *data, void *aux) { struct myseq *s = (struct myseq *)user; switch ((int)event) { case LWSSEQ_CREATED: /* our sequencer just got started */ s->state = SEQ1; /* first thing we'll do is the first url */ goto step; case LWSSEQ_DESTROYED: /* * This sequencer is about to be destroyed. If we have any * other assets in play, detach them from us. */ if (s->cwsi) lws_set_wsi_user(s->cwsi, NULL); interrupted = 1; break; case LWSSEQ_TIMED_OUT: /* current step timed out */ if (s->state == SEQ4_TIMEOUT) { lwsl_user("%s: test %d got expected timeout\n", __func__, s->state); goto done; } lwsl_user("%s: seq timed out at step %d\n", __func__, s->state); return LWSSEQ_RET_DESTROY; case SEQ_MSG_CLIENT_FAILED: if (s->state == SEQ5_BAD_ADDRESS) { /* * in this specific case, we expect to fail */ lwsl_user("%s: test %d failed as expected\n", __func__, s->state); goto done; } lwsl_user("%s: seq failed at step %d\n", __func__, s->state); return LWSSEQ_RET_DESTROY; case SEQ_MSG_CLIENT_DONE: if (s->state >= SEQ4_TIMEOUT) { /* * In these specific cases, done would be a failure, * we expected to timeout or fail */ lwsl_user("%s: seq failed at step %d\n", __func__, s->state); return LWSSEQ_RET_DESTROY; } lwsl_user("%s: seq done step %d (resp %d)\n", __func__, s->state, s->http_resp); done: lws_seq_timeout_us(lws_seq_from_user(s), LWSSEQTO_NONE); s->state++; if (s->state == LWS_ARRAY_SIZE(url_paths)) { /* the sequence has completed */ lwsl_user("%s: sequence completed OK\n", __func__); test_good = 1; return LWSSEQ_RET_DESTROY; } step: sequencer_start_client(s); break; default: break; } return LWSSEQ_RET_CONTINUE; } int main(int argc, const char **argv) { int n = 1, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; struct lws_context *context; lws_seq_t *seq; struct lws_vhost *vh; lws_seq_info_t i; struct myseq *s; const char *p; /* the normal lws init */ signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: lws_sequencer\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_EXPLICIT_VHOSTS; info.protocols = protocols; #if defined(LWS_WITH_MBEDTLS) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./libwebsockets.org.cer"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } vh = lws_create_vhost(context, &info); if (!vh) { lwsl_err("Failed to create first vhost\n"); goto bail1; } /* * Create the sequencer... when the event loop starts, it will * receive the LWSSEQ_CREATED callback */ memset(&i, 0, sizeof(i)); i.context = context; i.user_size = sizeof(struct myseq); i.puser = (void **)&s; i.cb = sequencer_cb; i.name = "seq"; seq = lws_seq_create(&i); if (!seq) { lwsl_err("%s: unable to create sequencer\n", __func__); goto bail1; } s->vhost = vh; /* the usual lws event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); bail1: lwsl_user("Completed: %s\n", !test_good ? "FAIL" : "PASS"); lws_context_destroy(context); return !test_good; } libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_struct-json/000077500000000000000000000000001357643561300264515ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_struct-json/CMakeLists.txt000066400000000000000000000037131357643561300312150ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-api-test-lws_struct-json) set(SRCS main.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_WITH_STRUCT_JSON 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_struct-json/README.md000066400000000000000000000057671357643561300277470ustar00rootroot00000000000000# lws api test lws_struct JSON Demonstrates how to use and performs selftests for lws_struct JSON serialization and deserialization ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ ./lws-api-test-lws_struct-json [2019/03/30 22:09:09:2529] USER: LWS API selftest: lws_struct JSON [2019/03/30 22:09:09:2625] NOTICE: main: ++++++++++++++++ test 1 [2019/03/30 22:09:09:2812] NOTICE: builder.hostname = 'learn', timeout = 1800, targets (2) [2019/03/30 22:09:09:2822] NOTICE: target.name 'target1' (target 0x543a830) [2019/03/30 22:09:09:2824] NOTICE: target.name 'target2' (target 0x543a860) [2019/03/30 22:09:09:2826] NOTICE: main: .... strarting serialization of test 1 [2019/03/30 22:09:09:2899] NOTICE: ser says 1 {"schema":"com-warmcat-sai-builder","hostname":"learn","nspawn_timeout":1800,"targets":[{"name":"target1"},{"name":"target2"}]} [2019/03/30 22:09:09:2929] NOTICE: main: ++++++++++++++++ test 2 [2019/03/30 22:09:09:2932] NOTICE: builder.hostname = 'learn', timeout = 0, targets (3) [2019/03/30 22:09:09:2932] NOTICE: target.name 'target1' (target 0x543b060) [2019/03/30 22:09:09:2933] NOTICE: target.name 'target2' (target 0x543b090) [2019/03/30 22:09:09:2933] NOTICE: target.name 'target3' (target 0x543b0c0) [2019/03/30 22:09:09:2934] NOTICE: main: .... strarting serialization of test 2 [2019/03/30 22:09:09:2935] NOTICE: ser says 1 {"schema":"com-warmcat-sai-builder","hostname":"learn","nspawn_timeout":0,"targets":[{"name":"target1"},{"name":"target2"},{"name":"target3"}]} [2019/03/30 22:09:09:2940] NOTICE: main: ++++++++++++++++ test 3 [2019/03/30 22:09:09:2959] NOTICE: builder.hostname = 'learn', timeout = 1800, targets (2) [2019/03/30 22:09:09:2960] NOTICE: target.name 'target1' (target 0x543b450) [2019/03/30 22:09:09:2961] NOTICE: child 0x543b480, target.child.somename 'abc' [2019/03/30 22:09:09:2961] NOTICE: target.name 'target2' (target 0x543b490) [2019/03/30 22:09:09:2962] NOTICE: main: .... strarting serialization of test 3 [2019/03/30 22:09:09:2969] NOTICE: ser says 1 {"schema":"com-warmcat-sai-builder","hostname":"learn","nspawn_timeout":1800,"targets":[{"name":"target1","child":{"somename":"abc"}},{"name":"target2"}]} [2019/03/30 22:09:09:2970] NOTICE: main: ++++++++++++++++ test 4 [2019/03/30 22:09:09:2971] NOTICE: builder.hostname = 'learn', timeout = 1800, targets (0) [2019/03/30 22:09:09:2971] NOTICE: main: .... strarting serialization of test 4 [2019/03/30 22:09:09:2973] NOTICE: ser says 1 {"schema":"com-warmcat-sai-builder","hostname":"learn","nspawn_timeout":1800} [2019/03/30 22:09:09:2974] NOTICE: main: ++++++++++++++++ test 5 [2019/03/30 22:09:09:2978] NOTICE: builder.hostname = '', timeout = 0, targets (0) [2019/03/30 22:09:09:2979] NOTICE: main: .... strarting serialization of test 5 [2019/03/30 22:09:09:2980] NOTICE: ser says 1 {"schema":"com-warmcat-sai-builder","hostname":"","nspawn_timeout":0} [2019/03/30 22:09:09:2982] USER: Completed: PASS ``` libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_struct-json/main.c000066400000000000000000000262131357643561300275450ustar00rootroot00000000000000/* * lws-api-test-lws_struct-json * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * lws_struct apis are used to serialize and deserialize your C structs and * linked-lists in a standardized way that's very modest on memory but * convenient and easy to maintain. * * The API test shows how to serialize and deserialize a struct with a linked- * list of child structs in JSON using lws_struct APIs. */ #include /* * in this example, the JSON is for one "builder" object, which may specify * a child list "targets" of zero or more "target" objects. */ static const char * const json_tests[] = { "{" /* test 1 */ "\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"learn\"," "\"nspawn_timeout\":1800," "\"targets\":[" "{" "\"name\":\"target1\"," "\"someflag\":true" "}," "{" "\"name\":\"target2\"," "\"someflag\":false" "}" "]" "}", "{" /* test 2 */ "\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"learn\"," "\"targets\":[" "{" "\"name\":\"target1\"" "}," "{" "\"name\":\"target2\"" "}," "{" "\"name\":\"target3\"" "}" "]" "}", "{" /* test 3 */ "\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"learn\"," "\"nspawn_timeout\":1800," "\"targets\":[" "{" "\"name\":\"target1\"," "\"unrecognized\":\"xyz\"," "\"child\": {" "\"somename\": \"abc\"," "\"junk\": { \"x\": \"y\" }" "}" "}," "{" "\"name\":\"target2\"" "}" "]" "}", "{" /* test 4 */ "\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"learn\"," "\"nspawn_timeout\":1800" "}", "{" /* test 5 */ "\"schema\":\"com-warmcat-sai-builder\"" "}", "{" /* test 6 ... check huge strings into smaller fixed char array */ "\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"" "PYvtan6kqppjnS0KpYTCaiOLsJkc7XecAr1kcE0aCIciewYB+JcLG82mO1Vb1mJtjDwUjBxy2I6A" "zefzoWUWmqZbsv4MXR55j9bKlyz1liiSX63iO0x6JAwACMtE2MkgcLwR86TSWAD9D1QKIWqg5RJ/" "CRuVsW0DKAUMD52ql4JmPFuJpJgTq28z6PhYNzN3yI3bmQt6bzhA+A/xAsFzSBnb3MHYWzGMprr5" "3FAP1ISo5Ec9i+2ehV40sG6Q470sH3PGQZ0YRPO7Sh/SyrSQ/scONmxRc3AcXl7X/CSs417ii+CV" "8sq3ZgcxKNB7tNfN7idNx3upZ00G2BZy9jSy03cLKKLNaNUt0TQsxXbH55uDHzSEeZWvxJgT6zB1" "NoMhdC02w+oXim94M6z6COCnqT3rgkGk8PHMry9Bkh4yVpRmzIRfMmln/lEhdZgxky2+g5hhlSIG" "JYDCrdynD9kCfvfy6KGOpNIi1X+mhbbWn4lnL9ZKihL/RrfOV+oV4R26IDq+KqUiJBENeo8/GXkG" "LUH/87iPyzXKEMavr6fkrK0vTGto8yEYxmOyaVz8phG5rwf4jJgmYNoMbGo8gWvhqO7UAGy2g7MW" "v+B/t1eZZ+1euLsNrWAsFJiFbQKgdFfQT3RjB14iU8knlQ8usoy+pXssY2ddGJGVcGC21oZvstK9" "eu1eRZftda/wP+N5unT1Hw7kCoVzqxHieiYt47EGIOaaQ7XjZDK6qPN6O/grHnvJZm2vBkxuXgsY" "VkRQ7AuTWIecphqFsq7Wbc1YNbMW47SVU5zMD0WaCqbaaI0t4uIzRvPlD8cpiiTzFTrEHlIBTf8/" "uZjjEGGLhJR1jPqA9D1Ej3ChV+ye6F9JTUMlozRMsGuF8U4btDzH5xdnmvRS4Ar6LKEtAXGkj2yu" "yJln+v4RIWj2xOGPJovOqiXwi0FyM61f8U8gj0OiNA2/QlvrqQVDF7sMXgjvaE7iQt5vMETteZlx" "+z3f+jTFM/aon511W4+ZkRD+6AHwucvM9BEC\"" "}", "{" /* test 7 ... check huge strings into char * */ "\"schema\":\"com-warmcat-sai-builder\"," "\"targets\":[" "{" "\"name\":\"" "PYvtan6kqppjnS0KpYTCaiOLsJkc7XecAr1kcE0aCIciewYB+JcLG82mO1Vb1mJtjDwUjBxy2I6A" "zefzoWUWmqZbsv4MXR55j9bKlyz1liiSX63iO0x6JAwACMtE2MkgcLwR86TSWAD9D1QKIWqg5RJ/" "CRuVsW0DKAUMD52ql4JmPFuJpJgTq28z6PhYNzN3yI3bmQt6bzhA+A/xAsFzSBnb3MHYWzGMprr5" "3FAP1ISo5Ec9i+2ehV40sG6Q470sH3PGQZ0YRPO7Sh/SyrSQ/scONmxRc3AcXl7X/CSs417ii+CV" "8sq3ZgcxKNB7tNfN7idNx3upZ00G2BZy9jSy03cLKKLNaNUt0TQsxXbH55uDHzSEeZWvxJgT6zB1" "NoMhdC02w+oXim94M6z6COCnqT3rgkGk8PHMry9Bkh4yVpRmzIRfMmln/lEhdZgxky2+g5hhlSIG" "JYDCrdynD9kCfvfy6KGOpNIi1X+mhbbWn4lnL9ZKihL/RrfOV+oV4R26IDq+KqUiJBENeo8/GXkG" "LUH/87iPyzXKEMavr6fkrK0vTGto8yEYxmOyaVz8phG5rwf4jJgmYNoMbGo8gWvhqO7UAGy2g7MW" "v+B/t1eZZ+1euLsNrWAsFJiFbQKgdFfQT3RjB14iU8knlQ8usoy+pXssY2ddGJGVcGC21oZvstK9" "eu1eRZftda/wP+N5unT1Hw7kCoVzqxHieiYt47EGIOaaQ7XjZDK6qPN6O/grHnvJZm2vBkxuXgsY" "VkRQ7AuTWIecphqFsq7Wbc1YNbMW47SVU5zMD0WaCqbaaI0t4uIzRvPlD8cpiiTzFTrEHlIBTf8/" "uZjjEGGLhJR1jPqA9D1Ej3ChV+ye6F9JTUMlozRMsGuF8U4btDzH5xdnmvRS4Ar6LKEtAXGkj2yu" "yJln+v4RIWj2xOGPJovOqiXwi0FyM61f8U8gj0OiNA2/QlvrqQVDF7sMXgjvaE7iQt5vMETteZlx" "+z3f+jTFM/aon511W4+ZkRD+6AHwucvM9BEC\"}]}" "}", }; /* * These are the expected outputs for each test, without pretty formatting. * * There are some differences to do with missing elements being rendered with * default values. */ static const char * const json_expected[] = { "{\"schema\":\"com-warmcat-sai-builder\",\"hostname\":\"learn\"," "\"nspawn_timeout\":1800,\"targets\":[{\"name\":\"target1\",\"someflag\":true}," "{\"name\":\"target2\",\"someflag\":false}]}", "{\"schema\":\"com-warmcat-sai-builder\",\"hostname\":\"learn\"," "\"nspawn_timeout\":0,\"targets\":[{\"name\":\"target1\",\"someflag\":false}," "{\"name\":\"target2\",\"someflag\":false},{\"name\":\"target3\",\"someflag\":false}]}", "{\"schema\":\"com-warmcat-sai-builder\",\"hostname\":\"learn\"," "\"nspawn_timeout\":1800,\"targets\":[{\"name\":\"target1\",\"someflag\":false," "\"child\":{\"somename\":\"abc\"}},{\"name\":\"target2\",\"someflag\":false}]}", "{\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"learn\",\"nspawn_timeout\":1800}", "{\"schema\":\"com-warmcat-sai-builder\",\"hostname\":\"\"," "\"nspawn_timeout\":0}", "{\"schema\":\"com-warmcat-sai-builder\",\"hostname\":" "\"PYvtan6kqppjnS0KpYTCaiOLsJkc7Xe\"," "\"nspawn_timeout\":0}", "{\"schema\":\"com-warmcat-sai-builder\",\"hostname\":\"\"," "\"nspawn_timeout\":0,\"targets\":[{\"name\":\"PYvtan6kqppjnS0KpYTC" "aiOLsJkc7XecAr1kcE0aCIciewYB+JcLG82mO1Vb1mJtjDwUjBxy2I6Azefz" "oWUWmqZbsv4MXR55j9bKlyz1liiSX63iO0x6JAwACMtE2MkgcLwR86TSWAD9" "D1QKIWqg5RJ/CRuVsW0DKAUMD52ql4JmPFuJpJgTq28z6PhYNzN3yI3bmQt6" "bzhA+A/xAsFzSBnb3MHYWzGMprr53FAP1ISo5Ec9i+2ehV40sG6Q470sH3PG" "QZ0YRPO7Sh/SyrSQ/scONmxRc3AcXl7X/CSs417ii+CV8sq3ZgcxKNB7tNfN" "7idNx3upZ00G2BZy9jSy03cLKKLNaNUt0TQsxXbH55uDHzSEeZWvxJgT6zB1" "NoMhdC02w+oXim94M6z6COCnqT3rgkGk8PHMry9Bkh4yVpRmzIRfMmln/lEh" "dZgxky2+g5hhlSIGJYDCrdynD9kCfvfy6KGOpNIi1X+mhbbWn4lnL9ZKihL/" "RrfOV+oV4R26IDq+KqUiJBENeo8/GXkGLUH/87iPyzXKEMavr6fkrK0vTGto" "8yEYxmOyaVz8phG5rwf4jJgmYNoMbGo8gWvhqO7UAGy2g7MWv+B/t1eZZ+1e" "uLsNrWAsFJiFbQKgdFfQT3RjB14iU8knlQ8usoy+pXssY2ddGJGVcGC21oZv" "stK9eu1eRZftda/wP+N5unT1Hw7kCoVzqxHieiYt47EGIOaaQ7XjZDK6qPN6" "O/grHnvJZm2vBkxuXgsYVkRQ7AuTWIecphqFsq7Wbc1YNbMW47SVU5zMD0Wa" "CqbaaI0t4uIzRvPlD8cpiiTzFTrEHlIBTf8/uZjjEGGLhJR1jPqA9D1Ej3Ch" "V+ye6F9JTUMlozRMsGuF8U4btDzH5xdnmvRS4Ar6LKEtAXGkj2yuyJln+v4R" "IWj2xOGPJovOqiXwi0FyM61f8U8gj0OiNA2/QlvrqQVDF7sMXgjvaE7iQt5v" "METteZlx+z3f+jTFM/aon511W4+ZkRD+6AHwucvM9BEC\"" ",\"someflag\":false}]}" }; /* * These annotate the members in the struct that will be serialized and * deserialized with type and size information, as well as the name to use * in the serialization format. * * Struct members that aren't annotated like this won't be serialized and * when the struct is created during deserialiation, the will be set to 0 * or NULL. */ /* child object */ typedef struct sai_child { const char * somename; } sai_child_t; lws_struct_map_t lsm_child[] = { /* describes serializable members */ LSM_STRING_PTR (sai_child_t, somename, "somename"), }; /* target object */ typedef struct sai_target { struct lws_dll2 target_list; sai_child_t * child; const char * name; char someflag; } sai_target_t; static const lws_struct_map_t lsm_target[] = { LSM_STRING_PTR (sai_target_t, name, "name"), LSM_BOOLEAN (sai_target_t, someflag, "someflag"), LSM_CHILD_PTR (sai_target_t, child, sai_child_t, NULL, lsm_child, "child"), }; /* builder object */ typedef struct sai_builder { struct lws_dll2_owner targets; char hostname[32]; unsigned int nspawn_timeout; } sai_builder_t; static const lws_struct_map_t lsm_builder[] = { LSM_CARRAY (sai_builder_t, hostname, "hostname"), LSM_UNSIGNED (sai_builder_t, nspawn_timeout, "nspawn_timeout"), LSM_LIST (sai_builder_t, targets, sai_target_t, target_list, NULL, lsm_target, "targets"), }; /* Schema table * * Before we can understand the serialization top level format, we must read * the schema, use the table below to create the right toplevel object for the * schema name, and select the correct map tables to interpret the rest of the * serialization. * * Therefore the schema tables below are the starting point for the * JSON deserialization. */ static const lws_struct_map_t lsm_schema_map[] = { LSM_SCHEMA (sai_builder_t, NULL, lsm_builder, "com-warmcat-sai-builder"), }; static int show_target(struct lws_dll2 *d, void *user) { sai_target_t *t = lws_container_of(d, sai_target_t, target_list); lwsl_notice(" target.name '%s' (target %p)\n", t->name, t); if (t->child) lwsl_notice(" child %p, target.child.somename '%s'\n", t->child, t->child->somename); return 0; } int main(int argc, const char **argv) { int n, m, e = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; #if 1 lws_struct_serialize_t *ser; uint8_t buf[4096]; size_t written; #endif struct lejp_ctx ctx; lws_struct_args_t a; sai_builder_t *b; const char *p; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: lws_struct JSON\n"); for (m = 0; m < (int)LWS_ARRAY_SIZE(json_tests); m++) { /* 1. deserialize the canned JSON into structs */ lwsl_notice("%s: ++++++++++++++++ test %d\n", __func__, m + 1); memset(&a, 0, sizeof(a)); a.map_st[0] = lsm_schema_map; a.map_entries_st[0] = LWS_ARRAY_SIZE(lsm_schema_map); a.ac_block_size = 512; lws_struct_json_init_parse(&ctx, NULL, &a); n = (int)(signed char)lejp_parse(&ctx, (uint8_t *)json_tests[m], strlen(json_tests[m])); if (n < 0) { lwsl_err("%s: notification JSON decode failed '%s'\n", __func__, lejp_error_to_string(n)); e++; goto done; } lwsac_info(a.ac); b = a.dest; if (!b) { lwsl_err("%s: didn't produce any output\n", __func__); e++; goto done; } lwsl_notice("builder.hostname = '%s', timeout = %d, targets (%d)\n", b->hostname, b->nspawn_timeout, b->targets.count); lws_dll2_foreach_safe(&b->targets, NULL, show_target); /* 2. serialize the structs into JSON and confirm */ lwsl_notice("%s: .... strarting serialization of test %d\n", __func__, m + 1); ser = lws_struct_json_serialize_create(lsm_schema_map, LWS_ARRAY_SIZE(lsm_schema_map), 0//LSSERJ_FLAG_PRETTY , b); if (!ser) { lwsl_err("%s: unable to init serialization\n", __func__); goto bail; } do { n = lws_struct_json_serialize(ser, buf, sizeof(buf), &written); lwsl_notice("ser says %d\n", n); switch (n) { case LSJS_RESULT_CONTINUE: case LSJS_RESULT_FINISH: puts((const char *)buf); break; case LSJS_RESULT_ERROR: goto bail; } } while(n == LSJS_RESULT_CONTINUE); if (strcmp(json_expected[m], (char *)buf)) { lwsl_err("%s: test %d: expected %s\n", __func__, m + 1, json_expected[m]); e++; } lws_struct_json_serialize_destroy(&ser); done: lwsac_free(&a.ac); } if (e) goto bail; lwsl_user("Completed: PASS\n"); return 0; bail: lwsl_user("Completed: FAIL\n"); return 1; } libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_struct-json/selftest.sh000077500000000000000000000010311357643561300306340ustar00rootroot00000000000000#!/bin/bash # # $1: path to minimal example binaries... # if lws is built with -DLWS_WITH_MINIMAL_EXAMPLES=1 # that will be ./bin from your build dir # # $2: path for logs and results. The results will go # in a subdir named after the directory this script # is in # # $3: offset for test index count # # $4: total test count # # $5: path to ./minimal-examples dir in lws # # Test return code 0: OK, 254: timed out, other: error indication . $5/selftests-library.sh COUNT_TESTS=1 dotest $1 $2 apiselftest exit $FAILS libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_tokenize/000077500000000000000000000000001357643561300260065ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_tokenize/CMakeLists.txt000066400000000000000000000035421357643561300305520ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-api-test-lws_tokenize) set(SRCS main.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_tokenize/README.md000066400000000000000000000015651357643561300272740ustar00rootroot00000000000000# lws api test lws_tokenize Performs selftests for lws_tokenize ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -s "input string"|String to tokenize -f 15|LWS_TOKENIZE_F_ flag values to apply to processing of -s ``` $ ./lws-api-test-lws_tokenize [2018/10/09 09:14:17:4834] USER: LWS API selftest: lws_tokenize [2018/10/09 09:14:17:4835] USER: Completed: PASS: 6, FAIL: 0 ``` If the `-s string` option is given, the string is tokenized on stdout in the format used to produce the tests in the sources ``` $ ./lws-api-test-lws_tokenize -s "hello: 1234,256" [2018/10/09 09:14:17:4834] USER: LWS API selftest: lws_tokenize { LWS_TOKZE_TOKEN_NAME_COLON, "hello", 5 } { LWS_TOKZE_INTEGER, "1234", 4 } { LWS_TOKZE_DELIMITER, ",", 1 } { LWS_TOKZE_INTEGER, "256", 3 } { LWS_TOKZE_ENDED, "", 0 } ``` libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_tokenize/main.c000066400000000000000000000247341357643561300271100ustar00rootroot00000000000000/* * lws-api-test-lws_tokenize * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include struct expected { lws_tokenize_elem e; const char *value; int len; }; struct tests { const char *string; struct expected *exp; int count; int flags; }; struct expected expected1[] = { { LWS_TOKZE_TOKEN, "protocol-1", 10 }, { LWS_TOKZE_DELIMITER, ",", 1}, { LWS_TOKZE_TOKEN, "protocol_2", 10 }, { LWS_TOKZE_DELIMITER, ",", 1}, { LWS_TOKZE_TOKEN, "protocol3", 9 }, { LWS_TOKZE_ENDED, NULL, 0 }, }, expected2[] = { { LWS_TOKZE_TOKEN_NAME_COLON, "Accept-Language", 15 }, { LWS_TOKZE_TOKEN, "fr-CH", 5 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "fr", 2 }, { LWS_TOKZE_DELIMITER, ";", 1}, { LWS_TOKZE_TOKEN_NAME_EQUALS, "q", 1 }, { LWS_TOKZE_FLOAT, "0.9", 3 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "en", 2 }, { LWS_TOKZE_DELIMITER, ";", 1}, { LWS_TOKZE_TOKEN_NAME_EQUALS, "q", 1 }, { LWS_TOKZE_FLOAT, "0.8", 3 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "de", 2 }, { LWS_TOKZE_DELIMITER, ";", 1}, { LWS_TOKZE_TOKEN_NAME_EQUALS, "q", 1 }, { LWS_TOKZE_FLOAT, "0.7", 3 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_DELIMITER, "*", 1 }, { LWS_TOKZE_DELIMITER, ";", 1 }, { LWS_TOKZE_TOKEN_NAME_EQUALS, "q", 1 }, { LWS_TOKZE_FLOAT, "0.5", 3 }, { LWS_TOKZE_ENDED, NULL, 0 }, }, expected3[] = { { LWS_TOKZE_TOKEN_NAME_EQUALS, "quoted", 6 }, { LWS_TOKZE_QUOTED_STRING, "things:", 7 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_INTEGER, "1234", 4 }, { LWS_TOKZE_ENDED, NULL, 0 }, }, expected4[] = { { LWS_TOKZE_ERR_COMMA_LIST, ",", 1 }, }, expected5[] = { { LWS_TOKZE_TOKEN, "brokenlist2", 11 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_ERR_COMMA_LIST, ",", 1 }, }, expected6[] = { { LWS_TOKZE_TOKEN, "brokenlist3", 11 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_ERR_COMMA_LIST, ",", 1 }, }, expected7[] = { { LWS_TOKZE_TOKEN, "fr", 2 }, { LWS_TOKZE_DELIMITER, "-", 1 }, { LWS_TOKZE_TOKEN, "CH", 2 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "fr", 2 }, { LWS_TOKZE_DELIMITER, ";", 1 }, { LWS_TOKZE_TOKEN_NAME_EQUALS, "q", 1 }, { LWS_TOKZE_FLOAT, "0.9", 3 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "en", 2 }, { LWS_TOKZE_DELIMITER, ";", 1 }, { LWS_TOKZE_TOKEN_NAME_EQUALS, "q", 1 }, { LWS_TOKZE_FLOAT, "0.8", 3 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "de", 2 }, { LWS_TOKZE_DELIMITER, ";", 1 }, { LWS_TOKZE_TOKEN_NAME_EQUALS, "q", 1 }, { LWS_TOKZE_FLOAT, "0.7", 3 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "*", 1 }, { LWS_TOKZE_DELIMITER, ";", 1 }, { LWS_TOKZE_TOKEN_NAME_EQUALS, "q", 1 }, { LWS_TOKZE_FLOAT, "0.5", 3 }, { LWS_TOKZE_ENDED, "", 0 }, }, expected8[] = { { LWS_TOKZE_TOKEN, "ĪŸį½Ļ‡į½¶", 10 }, { LWS_TOKZE_TOKEN, "ταὐτὰ", 12 }, { LWS_TOKZE_TOKEN, "Ļ€Ī±Ļį½·ĻƒĻ„Ī±Ļ„Ī±į½·", 22 }, { LWS_TOKZE_TOKEN, "μοι", 6 }, { LWS_TOKZE_TOKEN, "γιγνώσκειν", 21 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "ὦ", 3 }, { LWS_TOKZE_TOKEN, "ἄνΓρες", 13 }, { LWS_TOKZE_TOKEN, "᾿Αθηναῖοι", 20 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "greek", 5 }, { LWS_TOKZE_ENDED, "", 0 }, }, expected9[] = { /* * because the tokenizer scans ahead for = aggregation, * it finds the broken utf8 before reporting the token */ { LWS_TOKZE_ERR_BROKEN_UTF8, "", 0 }, }, expected10[] = { { LWS_TOKZE_TOKEN, "badutf8-2", 9 }, { LWS_TOKZE_TOKEN, "퟿", 3 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_ERR_BROKEN_UTF8, "", 0 }, }, expected11[] = { { LWS_TOKZE_TOKEN, "1.myserver", 10 }, { LWS_TOKZE_DELIMITER, ".", 1 }, { LWS_TOKZE_TOKEN, "com", 3 }, { LWS_TOKZE_ENDED, "", 0 }, }, expected12[] = { { LWS_TOKZE_TOKEN, "1.myserver.com", 14 }, { LWS_TOKZE_ENDED, "", 0 }, }, expected13[] = { { LWS_TOKZE_TOKEN, "1.myserver.com", 14 }, { LWS_TOKZE_ENDED, "", 0 }, }, expected14[] = { { LWS_TOKZE_INTEGER, "1", 1 }, { LWS_TOKZE_DELIMITER, ".", 1 }, { LWS_TOKZE_TOKEN, "myserver", 8 }, { LWS_TOKZE_DELIMITER, ".", 1 }, { LWS_TOKZE_TOKEN, "com", 3 }, { LWS_TOKZE_ENDED, "", 0 }, }, expected15[] = { { LWS_TOKZE_TOKEN, "close", 5 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "Upgrade", 7 }, { LWS_TOKZE_ENDED, "", 0 }, }, expected16[] = { { LWS_TOKZE_TOKEN_NAME_EQUALS, "a", 1 }, { LWS_TOKZE_TOKEN, "5", 1 }, { LWS_TOKZE_ENDED, "", 0 }, } ; struct tests tests[] = { { " protocol-1, protocol_2\t,\tprotocol3\n", expected1, LWS_ARRAY_SIZE(expected1), LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_AGG_COLON }, { "Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5", expected2, LWS_ARRAY_SIZE(expected2), LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_AGG_COLON }, { "quoted = \"things:\", 1234", expected3, LWS_ARRAY_SIZE(expected3), LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_AGG_COLON }, { ", brokenlist1", expected4, LWS_ARRAY_SIZE(expected4), LWS_TOKENIZE_F_COMMA_SEP_LIST }, { "brokenlist2,,", expected5, LWS_ARRAY_SIZE(expected5), LWS_TOKENIZE_F_COMMA_SEP_LIST }, { "brokenlist3,", expected6, LWS_ARRAY_SIZE(expected6), LWS_TOKENIZE_F_COMMA_SEP_LIST }, { "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5", expected7, LWS_ARRAY_SIZE(expected7), LWS_TOKENIZE_F_RFC7230_DELIMS }, { " ĪŸį½Ļ‡į½¶ ταὐτὰ Ļ€Ī±Ļį½·ĻƒĻ„Ī±Ļ„Ī±į½· μοι γιγνώσκειν, ὦ ἄνΓρες ᾿Αθηναῖοι, greek", expected8, LWS_ARRAY_SIZE(expected8), LWS_TOKENIZE_F_RFC7230_DELIMS }, { "badutf8-1 \x80...", expected9, LWS_ARRAY_SIZE(expected9), LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_RFC7230_DELIMS }, { "badutf8-2 \xed\x9f\xbf,\x80...", expected10, LWS_ARRAY_SIZE(expected10), LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_RFC7230_DELIMS }, { "1.myserver.com", expected11, LWS_ARRAY_SIZE(expected11), 0 }, { "1.myserver.com", expected12, LWS_ARRAY_SIZE(expected12), LWS_TOKENIZE_F_DOT_NONTERM }, { "1.myserver.com", expected13, LWS_ARRAY_SIZE(expected13), LWS_TOKENIZE_F_DOT_NONTERM | LWS_TOKENIZE_F_NO_FLOATS }, { "1.myserver.com", expected14, LWS_ARRAY_SIZE(expected14), LWS_TOKENIZE_F_NO_FLOATS }, { "close, Upgrade", expected15, LWS_ARRAY_SIZE(expected15), LWS_TOKENIZE_F_COMMA_SEP_LIST }, { "a=5", expected16, LWS_ARRAY_SIZE(expected16), LWS_TOKENIZE_F_NO_INTEGERS }, }; /* * add LWS_TOKZE_ERRS to the element index (which may be negative by that * amount) to index this array */ static const char *element_names[] = { "LWS_TOKZE_ERR_BROKEN_UTF8", "LWS_TOKZE_ERR_UNTERM_STRING", "LWS_TOKZE_ERR_MALFORMED_FLOAT", "LWS_TOKZE_ERR_NUM_ON_LHS", "LWS_TOKZE_ERR_COMMA_LIST", "LWS_TOKZE_ENDED", "LWS_TOKZE_DELIMITER", "LWS_TOKZE_TOKEN", "LWS_TOKZE_INTEGER", "LWS_TOKZE_FLOAT", "LWS_TOKZE_TOKEN_NAME_EQUALS", "LWS_TOKZE_TOKEN_NAME_COLON", "LWS_TOKZE_QUOTED_STRING", }; int main(int argc, const char **argv) { struct lws_tokenize ts; lws_tokenize_elem e; const char *p; int n, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; int fail = 0, ok = 0, flags = 0; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: lws_tokenize\n"); if ((p = lws_cmdline_option(argc, argv, "-f"))) flags = atoi(p); p = lws_cmdline_option(argc, argv, "-s"); for (n = 0; n < (int)LWS_ARRAY_SIZE(tests); n++) { int m = 0, in_fail = fail; struct expected *exp = tests[n].exp; ts.start = tests[n].string; ts.len = strlen(ts.start); ts.flags = tests[n].flags; do { e = lws_tokenize(&ts); lwsl_info("{ %s, \"%.*s\", %d }\n", element_names[e + LWS_TOKZE_ERRS], (int)ts.token_len, ts.token, (int)ts.token_len); if (m == (int)tests[n].count) { lwsl_notice("fail: expected end earlier\n"); fail++; break; } if (e != exp->e) { lwsl_notice("fail... tok %s vs expected %s\n", element_names[e + LWS_TOKZE_ERRS], element_names[exp->e + LWS_TOKZE_ERRS]); fail++; break; } if (e > 0 && (ts.token_len != exp->len || memcmp(exp->value, ts.token, exp->len))) { lwsl_notice("fail token mismatch %d %d %.*s\n", ts.token_len, exp->len, ts.token_len, ts.token); fail++; break; } m++; exp++; } while (e > 0); if (fail == in_fail) ok++; } if (p) { ts.start = p; ts.len = strlen(p); ts.flags = flags; printf("\t{\n\t\t\"%s\",\n" "\t\texpected%d, LWS_ARRAY_SIZE(expected%d),\n\t\t", p, (int)LWS_ARRAY_SIZE(tests) + 1, (int)LWS_ARRAY_SIZE(tests) + 1); if (!flags) printf("0\n\t},\n"); else { if (flags & LWS_TOKENIZE_F_MINUS_NONTERM) printf("LWS_TOKENIZE_F_MINUS_NONTERM"); if (flags & LWS_TOKENIZE_F_AGG_COLON) { if (flags & 1) printf(" | "); printf("LWS_TOKENIZE_F_AGG_COLON"); } if (flags & LWS_TOKENIZE_F_COMMA_SEP_LIST) { if (flags & 3) printf(" | "); printf("LWS_TOKENIZE_F_COMMA_SEP_LIST"); } if (flags & LWS_TOKENIZE_F_RFC7230_DELIMS) { if (flags & 7) printf(" | "); printf("LWS_TOKENIZE_F_RFC7230_DELIMS"); } if (flags & LWS_TOKENIZE_F_DOT_NONTERM) { if (flags & 15) printf(" | "); printf("LWS_TOKENIZE_F_DOT_NONTERM"); } if (flags & LWS_TOKENIZE_F_NO_FLOATS) { if (flags & 31) printf(" | "); printf("LWS_TOKENIZE_F_NO_FLOATS"); } printf("\n\t},\n"); } printf("\texpected%d[] = {\n", (int)LWS_ARRAY_SIZE(tests) + 1); do { e = lws_tokenize(&ts); printf("\t\t{ %s, \"%.*s\", %d },\n", element_names[e + LWS_TOKZE_ERRS], (int)ts.token_len, ts.token, (int)ts.token_len); } while (e > 0); printf("\t}\n"); } lwsl_user("Completed: PASS: %d, FAIL: %d\n", ok, fail); return !(ok && !fail); } libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lws_tokenize/selftest.sh000077500000000000000000000010311357643561300301710ustar00rootroot00000000000000#!/bin/bash # # $1: path to minimal example binaries... # if lws is built with -DLWS_WITH_MINIMAL_EXAMPLES=1 # that will be ./bin from your build dir # # $2: path for logs and results. The results will go # in a subdir named after the directory this script # is in # # $3: offset for test index count # # $4: total test count # # $5: path to ./minimal-examples dir in lws # # Test return code 0: OK, 254: timed out, other: error indication . $5/selftests-library.sh COUNT_TESTS=1 dotest $1 $2 apiselftest exit $FAILS libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lwsac/000077500000000000000000000000001357643561300244025ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lwsac/CMakeLists.txt000066400000000000000000000035331357643561300271460ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-api-test-lwsac) set(SRCS main.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lwsac/README.md000066400000000000000000000005421357643561300256620ustar00rootroot00000000000000# lws api test lwsac Demonstrates how to use and performs selftests for lwsac ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ ./lws-api-test-lwsac [2018/10/09 09:14:17:4834] USER: LWS API selftest: lwsac [2018/10/09 09:14:17:4835] USER: Completed: PASS ``` libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lwsac/main.c000066400000000000000000000033571357643561300255020ustar00rootroot00000000000000/* * lws-api-test-lwsac * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include struct mytest { int payload; /* notice doesn't have to be at start of struct */ lws_list_ptr list_next; /* a struct can appear on multiple lists too... */ }; /* converts a ptr to struct mytest .list_next to a ptr to struct mytest */ #define list_to_mytest(p) lws_list_ptr_container(p, struct mytest, list_next) int main(int argc, const char **argv) { int n, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE, acc; lws_list_ptr list_head = NULL, iter; struct lwsac *lwsac = NULL; struct mytest *m; const char *p; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: lwsac\n"); /* * 1) allocate and create 1000 struct mytest in a linked-list */ for (n = 0; n < 1000; n++) { m = lwsac_use(&lwsac, sizeof(*m), 0); if (!m) return -1; m->payload = n; lws_list_ptr_insert(&list_head, &m->list_next, NULL); } /* * 2) report some debug info about the lwsac state... those 1000 * allocations actually only required 4 mallocs */ lwsac_info(lwsac); /* 3) iterate the list, accumulating the payloads */ acc = 0; iter = list_head; while (iter) { m = list_to_mytest(iter); acc += m->payload; lws_list_ptr_advance(iter); } if (acc != 499500) { lwsl_err("%s: FAIL acc %d\n", __func__, acc); return 1; } /* * 4) deallocate everything (lwsac is also set to NULL). It just * deallocates the 4 mallocs, everything in there is gone accordingly */ lwsac_free(&lwsac); lwsl_user("Completed: PASS\n"); return 0; } libwebsockets-3.2.1/minimal-examples/api-tests/api-test-lwsac/selftest.sh000077500000000000000000000010311357643561300265650ustar00rootroot00000000000000#!/bin/bash # # $1: path to minimal example binaries... # if lws is built with -DLWS_WITH_MINIMAL_EXAMPLES=1 # that will be ./bin from your build dir # # $2: path for logs and results. The results will go # in a subdir named after the directory this script # is in # # $3: offset for test index count # # $4: total test count # # $5: path to ./minimal-examples dir in lws # # Test return code 0: OK, 254: timed out, other: error indication . $5/selftests-library.sh COUNT_TESTS=1 dotest $1 $2 apiselftest exit $FAILS libwebsockets-3.2.1/minimal-examples/api-tests/api-test-smtp_client/000077500000000000000000000000001357643561300256125ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/api-tests/api-test-smtp_client/CMakeLists.txt000066400000000000000000000037011357643561300303530ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-unit-tests-smtp-client) set(SRCS main.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_WITH_SMTP 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/api-tests/api-test-smtp_client/README.md000066400000000000000000000026761357643561300271040ustar00rootroot00000000000000# lws api test smtp client Performs unit tests on the lws SMTP client abstract protocol implementation. The first test "sends mail to a server" (actually is prompted by test vectors that look like a server) and the second test confirm it can handle rejection by the "server" cleanly. ## build Requires lws was built with `-DLWS_WITH_SMTP=1` at cmake. ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -r |Send the test email to this email address ``` $ ./lws-api-test-smtp_client [2019/06/28 21:56:41:0711] USER: LWS API selftest: SMTP client unit tests [2019/06/28 21:56:41:1114] NOTICE: test_sequencer_cb: test-seq: created [2019/06/28 21:56:41:1259] NOTICE: unit_test_sequencer_cb: unit-test-seq: created [2019/06/28 21:56:41:1272] NOTICE: lws_atcut_client_conn: smtp: test 'sending': start [2019/06/28 21:56:41:1441] NOTICE: unit_test_sequencer_cb: unit-test-seq: created [2019/06/28 21:56:41:1442] NOTICE: lws_atcut_client_conn: smtp: test 'rejected': start [2019/06/28 21:56:41:1453] NOTICE: lws_smtp_client_abs_rx: bad response from server: 500 (state 4) 500 Service Unavailable [2019/06/28 21:56:41:1467] USER: test_sequencer_cb: sequence completed OK [2019/06/28 21:56:41:1474] USER: main: 2 tests 0 fail [2019/06/28 21:56:41:1476] USER: test 0: PASS [2019/06/28 21:56:41:1478] USER: test 1: PASS [2019/06/28 21:56:41:1480] USER: Completed: PASS ``` libwebsockets-3.2.1/minimal-examples/api-tests/api-test-smtp_client/main.c000066400000000000000000000140101357643561300266760ustar00rootroot00000000000000/* * lws-unit-tests-smtp-client * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This performs unit tests for the SMTP client abstract protocol */ #include #include static int interrupted, results[10], count_tests, count_passes; static int email_sent_or_failed(struct lws_smtp_email *email, void *buf, size_t len) { free(email); return 0; } /* * The test helper calls this on the instance it created to prepare it for * the test. In our case, we need to queue up a test email to send on the * smtp client abstract protocol. */ static int smtp_test_instance_init(lws_abs_t *instance) { lws_smtp_email_t *email = (lws_smtp_email_t *) malloc(sizeof(*email) + 2048); if (!email) return 1; /* attach an email to it */ memset(email, 0, sizeof(*email)); email->data = NULL /* email specific user data */; email->email_from = "noreply@warmcat.com"; email->email_to = "andy@warmcat.com"; email->payload = (void *)&email[1]; lws_snprintf((char *)email->payload, 2048, "From: noreply@example.com\n" "To: %s\n" "Subject: Test email for lws smtp-client\n" "\n" "Hello this was an api test for lws smtp-client\n" "\r\n.\r\n", "andy@warmcat.com"); email->done = email_sent_or_failed; if (lws_smtp_client_add_email(instance, email)) { lwsl_err("%s: failed to add email\n", __func__); return 1; } return 0; } /* * from https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol * * test vector sent to protocol * test vector received from protocol */ static lws_unit_test_packet_t test_send1[] = { { "220 smtp.example.com ESMTP Postfix", smtp_test_instance_init, 34, LWS_AUT_EXPECT_RX }, { "HELO lws-test-client\x0a", NULL, 21, LWS_AUT_EXPECT_TX }, { "250 smtp.example.com, I am glad to meet you", NULL, 43, LWS_AUT_EXPECT_RX }, { "MAIL FROM: \x0a", NULL, 33, LWS_AUT_EXPECT_TX }, { "250 Ok", NULL, 6, LWS_AUT_EXPECT_RX }, { "RCPT TO: \x0a", NULL, 28, LWS_AUT_EXPECT_TX }, { "250 Ok", NULL, 6, LWS_AUT_EXPECT_RX }, { "DATA\x0a", NULL, 5, LWS_AUT_EXPECT_TX }, { "354 End data with .\x0a", NULL, 35, LWS_AUT_EXPECT_RX }, { "From: noreply@example.com\n" "To: andy@warmcat.com\n" "Subject: Test email for lws smtp-client\n" "\n" "Hello this was an api test for lws smtp-client\n" "\r\n.\r\n", NULL, 27 + 21 + 39 + 1 + 47 + 5, LWS_AUT_EXPECT_TX }, { "250 Ok: queued as 12345\x0a", NULL, 23, LWS_AUT_EXPECT_RX }, { "quit\x0a", NULL, 5, LWS_AUT_EXPECT_TX }, { "221 Bye\x0a", NULL, 7, LWS_AUT_EXPECT_RX | LWS_AUT_EXPECT_LOCAL_CLOSE | LWS_AUT_EXPECT_DO_REMOTE_CLOSE | LWS_AUT_EXPECT_TEST_END }, { /* sentinel */ } }; static lws_unit_test_packet_t test_send2[] = { { "220 smtp.example.com ESMTP Postfix", smtp_test_instance_init, 34, LWS_AUT_EXPECT_RX }, { "HELO lws-test-client\x0a", NULL, 21, LWS_AUT_EXPECT_TX }, { "250 smtp.example.com, I am glad to meet you", NULL, 43, LWS_AUT_EXPECT_RX }, { "MAIL FROM: \x0a", NULL, 33, LWS_AUT_EXPECT_TX }, { "500 Service Unavailable", NULL, 23, LWS_AUT_EXPECT_RX | LWS_AUT_EXPECT_DO_REMOTE_CLOSE | LWS_AUT_EXPECT_TEST_END }, { /* sentinel */ } }; static lws_unit_test_t tests[] = { { "sending", test_send1, 3 }, { "rejected", test_send2, 3 }, { } /* sentinel */ }; static void sigint_handler(int sig) { interrupted = 1; } /* * set the HELO our SMTP client will use */ static const lws_token_map_t smtp_protocol_tokens[] = { { .u = { .value = "lws-test-client" }, .name_index = LTMI_PSMTP_V_HELO, }, { /* sentinel */ } }; void tests_completion_cb(const void *cb_user) { interrupted = 1; } int main(int argc, const char **argv) { int n = 1, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; lws_test_sequencer_args_t args; struct lws_context *context; struct lws_vhost *vh; lws_abs_t abs, *instance; const char *p; /* the normal lws init */ signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: SMTP client unit tests\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } vh = lws_create_vhost(context, &info); if (!vh) { lwsl_err("Failed to create first vhost\n"); goto bail1; } /* create the smtp client */ memset(&abs, 0, sizeof(abs)); abs.vh = vh; /* select the protocol and bind its tokens */ abs.ap = lws_abs_protocol_get_by_name("smtp"); if (!abs.ap) goto bail1; abs.ap_tokens = smtp_protocol_tokens; /* select the transport and bind its tokens */ abs.at = lws_abs_transport_get_by_name("unit_test"); if (!abs.at) goto bail1; instance = lws_abs_bind_and_create_instance(&abs); if (!instance) goto bail1; /* configure the test sequencer */ args.abs = &abs; args.tests = tests; args.results = results; args.results_max = LWS_ARRAY_SIZE(results); args.count_tests = &count_tests; args.count_passes = &count_passes; args.cb = tests_completion_cb; args.cb_user = NULL; if (lws_abs_unit_test_sequencer(&args)) { lwsl_err("%s: failed to create test sequencer\n", __func__); goto bail1; } /* the usual lws event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); /* describe the overall test results */ lwsl_user("%s: %d tests %d fail\n", __func__, count_tests, count_tests - count_passes); for (n = 0; n < count_tests; n++) lwsl_user(" test %d: %s\n", n, lws_unit_test_result_name(results[n])); bail1: lwsl_user("Completed: %s\n", !count_tests || count_passes != count_tests ? "FAIL" : "PASS"); lws_context_destroy(context); return !count_tests || count_passes != count_tests; } libwebsockets-3.2.1/minimal-examples/client-server/000077500000000000000000000000001357643561300224165ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/client-server/README.md000066400000000000000000000004441357643561300236770ustar00rootroot00000000000000|name|demonstrates| ---|--- minimal-ws-proxy|Serves an index.html over http that connects back to the ws server, and maintains a ws client connection of its own at the same time to https://libwebsockets.org dumb-increment-protocol to feed a ringbuffer that is sent to all connected browsers. libwebsockets-3.2.1/minimal-examples/client-server/minimal-ws-proxy/000077500000000000000000000000001357643561300256525ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/client-server/minimal-ws-proxy/CMakeLists.txt000066400000000000000000000040621357643561300304140ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-proxy) set(SRCS minimal-ws-proxy.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif()libwebsockets-3.2.1/minimal-examples/client-server/minimal-ws-proxy/README.md000066400000000000000000000025171357643561300271360ustar00rootroot00000000000000# lws minimal ws proxy ## Build ``` $ cmake . && make ``` ## Description This is the same as minimal-ws-server-ring, but with the inclusion of a ws client connection to https://libwebsockets.org using the dumb-increment protocol feeding the ringbuffer. Each client that connect to this server receives the content that had arrived on the client connection feeding the ringbuffer proxied to their browser window over a ws connection. ## Usage ``` $ ./lws-minimal-ws-proxy [2018/03/14 17:50:10:6938] USER: LWS minimal ws proxy | visit http://localhost:7681 [2018/03/14 17:50:10:6955] NOTICE: Creating Vhost 'default' port 7681, 2 protocols, IPv6 off [2018/03/14 17:50:10:6955] NOTICE: Using non-SSL mode [2018/03/14 17:50:10:7035] NOTICE: created client ssl context for default [2018/03/14 17:50:11:7047] NOTICE: binding to lws-minimal-proxy [2018/03/14 17:50:11:7047] NOTICE: lws_client_connect_2: 0x872e60: address libwebsockets.org [2018/03/14 17:50:12:3282] NOTICE: lws_client_connect_2: 0x872e60: address libwebsockets.org [2018/03/14 17:50:13:8195] USER: callback_minimal: established ``` Visit http://localhost:7681 on multiple browser windows Data received on the remote wss connection is copied to all open browser windows. A ringbuffer holds up to 8 lines of text in the server, and the browser shows the last 20 lines of received text. libwebsockets-3.2.1/minimal-examples/client-server/minimal-ws-proxy/minimal-ws-proxy.c000066400000000000000000000054001357643561300312510ustar00rootroot00000000000000/* * lws-minimal-ws-proxy * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws, * with an added websocket proxy distributing what is received on a * dumb-increment wss connection to https://libwebsockets.org to all * browsers connected to this server. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws proxy | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; info.port = 7681; info.mounts = &mount; info.protocols = protocols; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/client-server/minimal-ws-proxy/mount-origin/000077500000000000000000000000001357643561300303015ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/client-server/minimal-ws-proxy/mount-origin/example.js000066400000000000000000000026521357643561300322770ustar00rootroot00000000000000var head = 0, tail = 0, ring = new Array(); function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { if (typeof MozWebSocket != "undefined") return new MozWebSocket(urlpath, protocol); return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { ws = new_ws(get_appropriate_ws_url(""), "lws-minimal-proxy"); try { ws.onopen = function() { document.getElementById("r").disabled = 0; }; ws.onmessage =function got_packet(msg) { var n, s = ""; ring[head] = msg.data + "\n"; head = (head + 1) % 20; if (tail === head) tail = (tail + 1) % 20; n = tail; do { s = s + ring[n]; n = (n + 1) % 20; } while (n !== head); document.getElementById("r").value = s; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ document.getElementById("r").disabled = 1; }; } catch(exception) { alert("

Error " + exception); } }, false); libwebsockets-3.2.1/minimal-examples/client-server/minimal-ws-proxy/mount-origin/favicon.ico000066400000000000000000000025761357643561300324340ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/client-server/minimal-ws-proxy/mount-origin/index.html000066400000000000000000000010561357643561300323000ustar00rootroot00000000000000
Minimal ws server proxy example.
The server makes a dumb-increment-protocol wss connection
to libwebsockets.org. It proxies what it was sent to
all browsers open on this page.
The textarea show the last 20 lines received.


libwebsockets.org-logo.svg000066400000000000000000001403321357643561300353320ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/client-server/minimal-ws-proxy/mount-origin libwebsockets-3.2.1/minimal-examples/client-server/minimal-ws-proxy/mount-origin/strict-csp.svg000066400000000000000000000302361357643561300331210ustar00rootroot00000000000000 libwebsockets-3.2.1/minimal-examples/client-server/minimal-ws-proxy/protocol_lws_minimal.c000066400000000000000000000154011357643561300322530ustar00rootroot00000000000000/* * ws protocol handler plugin for "lws-minimal" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This version uses an lws_ring ringbuffer to cache up to 8 messages at a time, * so it's not so easy to lose messages. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include #include /* one of these created for each message */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* one of these is created for each client connecting to us */ struct per_session_data__minimal { struct per_session_data__minimal *pss_list; struct lws *wsi; uint32_t tail; }; /* one of these is created for each vhost our protocol is used with */ struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__minimal *pss_list; /* linked-list of live pss*/ struct lws_ring *ring; /* ringbuffer holding unsent messages */ struct lws_client_connect_info i; struct lws *client_wsi; }; /* destroys the message when everyone has had a copy of it */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } static int connect_client(struct per_vhost_data__minimal *vhd) { vhd->i.context = vhd->context; vhd->i.port = 443; vhd->i.address = "libwebsockets.org"; vhd->i.path = "/"; vhd->i.host = vhd->i.address; vhd->i.origin = vhd->i.address; vhd->i.ssl_connection = 1; vhd->i.protocol = "dumb-increment-protocol"; vhd->i.local_protocol_name = "lws-minimal-proxy"; vhd->i.pwsi = &vhd->client_wsi; return !lws_client_connect_via_info(&vhd->i); } static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct msg *pmsg; struct msg amsg; int m; switch (reason) { /* --- protocol lifecycle callbacks --- */ case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); vhd->ring = lws_ring_create(sizeof(struct msg), 8, __minimal_destroy_message); if (!vhd->ring) return 1; if (connect_client(vhd)) lws_timed_callback_vh_protocol(vhd->vhost, vhd->protocol, LWS_CALLBACK_USER, 1); break; case LWS_CALLBACK_PROTOCOL_DESTROY: lws_ring_destroy(vhd->ring); break; /* --- serving callbacks --- */ case LWS_CALLBACK_ESTABLISHED: /* add ourselves to the list of live pss held in the vhd */ lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); pss->tail = lws_ring_get_oldest_tail(vhd->ring); pss->wsi = wsi; break; case LWS_CALLBACK_CLOSED: /* remove our closing pss from the list of live pss */ lws_ll_fwd_remove(struct per_session_data__minimal, pss_list, pss, vhd->pss_list); break; case LWS_CALLBACK_SERVER_WRITEABLE: pmsg = lws_ring_get_element(vhd->ring, &pss->tail); if (!pmsg) break; /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE, pmsg->len, LWS_WRITE_TEXT); if (m < (int)pmsg->len) { lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lws_ring_consume_and_update_oldest_tail( vhd->ring, /* lws_ring object */ struct per_session_data__minimal, /* type of objects with tails */ &pss->tail, /* tail of guy doing the consuming */ 1, /* number of payload objects being consumed */ vhd->pss_list, /* head of list of objects with tails */ tail, /* member name of tail in objects with tails */ pss_list /* member name of next object in objects with tails */ ); /* more to do? */ if (lws_ring_get_element(vhd->ring, &pss->tail)) /* come back as soon as we can write more */ lws_callback_on_writable(pss->wsi); break; /* --- client callbacks --- */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); vhd->client_wsi = NULL; lws_timed_callback_vh_protocol(vhd->vhost, vhd->protocol, LWS_CALLBACK_USER, 1); break; case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_user("%s: established\n", __func__); break; case LWS_CALLBACK_CLIENT_RECEIVE: /* if no clients, just drop incoming */ if (!vhd->pss_list) break; if (!lws_ring_get_count_free_elements(vhd->ring)) { lwsl_user("dropping!\n"); break; } amsg.len = len; /* notice we over-allocate by LWS_PRE */ amsg.payload = malloc(LWS_PRE + len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); break; } memcpy((char *)amsg.payload + LWS_PRE, in, len); if (!lws_ring_insert(vhd->ring, &amsg, 1)) { __minimal_destroy_message(&amsg); lwsl_user("dropping!\n"); break; } /* * let everybody know we want to write something on them * as soon as they are ready */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); break; case LWS_CALLBACK_CLIENT_CLOSED: vhd->client_wsi = NULL; lws_timed_callback_vh_protocol(vhd->vhost, vhd->protocol, LWS_CALLBACK_USER, 1); break; /* rate-limited client connect retries */ case LWS_CALLBACK_USER: lwsl_notice("%s: LWS_CALLBACK_USER\n", __func__); if (connect_client(vhd)) lws_timed_callback_vh_protocol(vhd->vhost, vhd->protocol, LWS_CALLBACK_USER, 1); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal-proxy", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 128, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) /* boilerplate needed if we are built as a dynamic plugin */ static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL }; LWS_EXTERN LWS_VISIBLE int init_protocol_minimal(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_minimal(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/minimal-examples/crypto/000077500000000000000000000000001357643561300211545ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/crypto/README.md000066400000000000000000000003451357643561300224350ustar00rootroot00000000000000|name|tests| ---|--- minimal-crypto-jwe|Examples for lws RFC7516 JWE apis minimal-crypto-jwk|Examples for lws RFC7517 JWK apis minimal-crypto-jws|Examples for lws RFC7515 JWS apis minimal-crypto-x509|Examples for lws X.509 apis libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-jwe/000077500000000000000000000000001357643561300247035ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-jwe/CMakeLists.txt000066400000000000000000000036661357643561300274560ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-crypto-jwe) set(SRCS main.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_WITH_JOSE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-jwe/README.md000066400000000000000000000057061357643561300261720ustar00rootroot00000000000000# lws minimal example for JWE Demonstrates how to encrypt and decrypt using JWE and JWK, providing a commandline tool for creating encrypted JWE and decoding them. ## build ``` $ cmake . && make ``` ## usage Stdin is either the plaintext (if encrypting) or JWE (if decrypting). Stdout is either the JWE (if encrypting) or plaintext (if decrypting). You must pass a private or public key JWK file in the -k option if encrypting, and must pass a private key JWK file in the -k option if decrypting. To be clear, for asymmetric keys the public part of the key is required to encrypt, and the private part required to decrypt. For convenience, a pair of public and private keys are provided, `key-rsa-4096.private` and `key-rsa-4096.pub`, these were produced with just ``` $ lws-crypto-jwk -t RSA -b 4096 --public key-rsa-4096.pub >key-rsa-4096.private ``` Similar keys for EC modes may be produced with ``` $ lws-crypto-jwk -t EC -v P-256 --public key-ecdh-p-256.pub >key-ecdh-p-256.private ``` and for AES ("octet") symmetric keys ``` $ lws-crypto-jwk -t OCT -b 128 >key-aes-128.private ``` JWEs produced with openssl and mbedtls backends are completely interchangeable. Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -e " "|Encrypt (default is decrypt), eg, -e "RSA1_5 A128CBC-HS256". For decrypt, the cipher information comes from the input JWE. -k |JWK file to encrypt or decrypt with -c|Format the JWE as a linebroken C string -f|Output flattened representation (instead of compact by default) ``` $ echo -n "plaintext0123456" | ./lws-crypto-jwe -k key-rsa-4096.private -e "RSA1_5 A128CBC-HS256" [2018/12/19 16:20:25:6519] USER: LWS JWE example tool [2018/12/19 16:20:25:6749] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off eyJhbGciOiJSU0ExXzUiLCAiZW5jIjoiQTEyOENCQy1IUzI1NiJ9.ivFr7qzx-pQ4V_edbjpdvR9OwWL9KmojPE2rXQM52oLtW0BtnxZu2_ezqhsAelyIcaworgfobs3u4bslXHMFbeJJjPb5xD0fBDe64OYXZH1NpUGTMJh9Ka4CrJ2B3xhxe7EByGAuGqmluqE0Yezj7rhSw7vlr5JAwuOJ8FaGa8aZ8ldki5G5h_S2Furlbjdcw3Rrxk7mCoMHcLoqzfZtggMPwGAMFogCqcwUo7oSLbBeGaa6hpMbfSysugseWdr8TzObQKPM52k6iVAlGwRaOg_qdLMgZiYRhHA6nFKTQd7XBbNY6qAS8sPuj7Zz344tF3RSfJ0zX_telG71sOtVv5fMpeDU-eCdpOWlCBfu6J6FQfAFu6SJryM4ajGOif09CwFI5qUQ33SOfQfS_M3nqSyd6Vu5M4lsDrb5wK7_XX5gqUwvI9wicf_8WWR-CQomRF-JvEASnA2SIf8QqYfa8R2rP9q6Md4vwO4EZrtxIsMDPsH-4ZEFu7vDjyy09QfIWWsnEb8-UgpVXensgt2m_2bZ76r1VB8-0nZLMwMyEhaH2wra9vX2FWao5UkmNJ7ht300f4_V6QzMFoePpwCvsufWBW6jcQLB-frCWe6uitWaZHEB4LxmNPKzQSz4QwwTKhpF1jNn8Xh1-w1m-2h0gj-oe-S8QBwPveqhPI1p2fI.snuhUTXHNu5mJ6dEPQqg6g.yl36qC4o0GE4nrquQ2YyCg.Vf0MoT7_kUrZdCNWXhq1DQ ``` Notice the logging is on stderr, and the output alone on stdout. You can also pipe the output of the encrypt action directly into the decrypt action, eg ``` $ echo -n "plaintext0123456" | \ ./lws-crypto-jwe -k key-rsa-4096.pub -e "RSA1_5 A128CBC-HS256" | \ ./lws-crypto-jwe -k key-rsa-4096.private ``` prints the plaintext on stdout. libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-jwe/key-rsa-4096.private000066400000000000000000000061541357643561300302600ustar00rootroot00000000000000{"d":"XcSl3ulvs4OGomu9thRPVQGOstim0PY7CibP_bnCmzjvmGmzb8J4q5AUmJCnZT5TesOzXuXhyG95CxQWsakd9GWHSAinV1QQSLsahaezPULRG1qmo37JqKb9noKkvXguh5XU5np8HjeoeeEkF_XqtCdEo0wHijEjTL9RZar98jmyAmlizoHIY9NnECavs4DZB27onU61B61vGpw-y4xhC9jlZSIwRqIMDzeTcSv8fRKcVYR80ozm2_KwWMpue27rS2EfTQUtsMXuYmnvMAf_DHqA0tNWyD1gpUWYHvlyBh5xnYrWPuXxQBRNesImQdRQl5VMMsuvdtY-uZfIVUdN5CcsB0acronx4UsmVg-Qz-jd1NVW4koZQM9uA4oWiMZg4FEUTQ-UWelHCldg-PYLAazsItmaHPF9LcAPkLkI8jaVS33v-DhSeXHW3Pg3sibtnPhouiSvD84zMtzu1gjFT7vtapMynBeZouqeWYT-BFeu2wzppJcW1YxTQ_Ai80VJSFY__Huw-9r1MOHmDRcEW7x9W97UezWDjrh5Shhh4C6SMYbaf7ouACzFu1i_r8Q06JqKA7aY8i5izKlKA0We9tQKlTF8Fgsneu9gpxFglvZsd1ersiA-MkuP9qTBQpyAf3kJ6HS9GrQUju6r3DExdWDjdvM5Grt8QD7Zkv-qXeE","dp":"M-LFs3T2GI1JxD5LJt2GgV4cMDKbiPKBddLukfG0duUxNp0-6x2LZ0ptxrlHrhxBMMmvCg4GEaujrZdaYWCar6xCnlnkVlOELz4yZ3JBSpS86thJw03xuE7lyeR7usFY4CpSqUQGI_YveITuFeoh4YjwdKDuqPhOpDI-34ptgU93dlBRS9nnQFTiVoUdP4bhGTKOpULTiLgPXHQxQR5rfiGVD9AIwqHvMdBQ0hxQBKEt37PbRWK_eTzMslHZGWNfbg8ipwJxisvHyUn0c1X3Uelw8BRyvNVCNovNDeCj-R7kFkMvriMd_sqGVy1Go46WZ2wMkUJHkvmYk0gDlhnTGQ","dq":"qO89nQEJfdkaDtGGyD-sQE2Mm8p_PIPSpCmgMfpl8zgSOb4P9iqXBgpHyS7w10uY_UHt8KW6pY7ozy0y4Gu_f4Wk_rcXiYYdbuIhlFl0_nLI2mfFPGxr1xC64zfjjEaBr4zIJr_YzhvTpjZFtIdSAH5VG5Tv-2yUtCC2DnKnU2kzEkgUeSI6LHOEVhXqup7C0Kjiv9FJsLR0hiqwH4oLziqH7EVqVDvJI3yL1lhqoLKjAu1ogTDgH7hzSrqVhttnpwL8rDcgbtY6Q8C2csdN3Jt1ucgtGy-Yzgqf_QIULP3CRlqzDTvHrMe2A9cNAQ4dNsCbNAjW_MxxGKKWuWXAMQ","e":"AQAB","kid":"my kid","kty":"RSA","n":"2_YjG_D1sOWJxs6cohikupHf5WJfWSFfSCrnNZ7WR7AyTLnKZAF4VKyimMeJTLYYwCAXMDD5XmkF8VluI4O-hASUIJ7F9eDg3vO7nPwtkWa9lkqt-QyQZ_PjiOGpwetBLzrsaXsC9PvdVzrKXnjeNPsmmbC_Fx2cUn4H_9H_WfXi01VR75XFTBtxTrDY7hmpZHuFCFUOMCW9siTZRk9339Y6ORBznBs4jFbkGI1Pmc3op0o5f8S1gus9L81W5uyUrxfd-CkmJ6eWE8I36cfzI6irN2bhVhR_NXERUtS0QOEeJYlRJXqfYkxTMVlsXPl6zbYt__ZYLC6ZiUTCc6K2KmfGh7fihWbao4dyQW3Mq4kClhpIT0O01Y0r7sR1j4jTnFNqbmtPSl9lEMrfiUHfOLqRJo3qizQ-b6HLCDty1otFz8Q8gg0rD3copQ_zFrcTGwJGAv2Absraj7kp9EJXBqneCJ3dlRO8rzx7KB9Dsj-ygh3kZaubkPCeT1v4l_VUY2iGnK4vzIGKM7j56DQ97ZAi1Bb0y6GYSbrWB2_z0DKJu0fiU-NscbKplR68vgppUM6_iogrk48JEZg_kkTymniqbT3g7J_WeoZSx1Uu8ZHI3ysIFfUtFscOa2SJGlj1ds-lfk6Oqac_I8ahRqQeyVAEisZPmYIGSJajbJopJ4s","p":"_V4CwEjRd8Hv9-ncqGdB_vtReTIuHSWQzSx4al15J3VxvPFI2kxicNeQKyq3OAVT2kmCmUP3ETgCdwuKIgw_QbEc8qNxtS_KpM_KsuTe9a5jrQKpt8ctYhzELZfr_sy9UzUGJzr8glLjJ1IDX4x6_JAqYB_NhttP6bzgu5Dt-DKtRPNO1qZtfhrLIgmltpC2M6-AlAv-dyHSHck2VJIL84Hwk4FulozEYxop0dKuZdfM5Z1dZM8-ICo62O0zUKzoWxKmQcB9_gDZsxYaO6xZ9BLmaW6-WcPSEI6YDnPk8ptnk_Kbyc4kPW4Z3ASczxjaewBmfl2_lwkqkndFVptAeQ","q":"3j9DR6ZpKC3WrshSrxXFYAuT19Rlf6qQ_9uD_Fq7dIpTjCZdl01695Qx7UmujKoetutL3RMCpeRdZR-gCLVh8aMxpMuIc5fHC6HbhsdF-I7GoqO0DEJ6coS3n5Ey4EXL5uoLh4C3l67wBKfLmPW28bxxG2QAP59jncWXkrBQm_qbS5Qon8r7wj0tejG_tGdsPjhsFc9KdnkkBucT6MiEVpzpdwDlsn7bHpMsyPlNyc0fj5qYmRB-DN7rv5varaisBaVT0mLQdwKjBDVqNVnU2m5azPhY-2txvihHaI5_cLIsLLaqKMbB17UxGumuT_o8S03_h8-1syO3Ay87y9pPIw","qi":"JY2uUek6wPrp4fPcInX_5WdNlhyghcGVEvlqxs9iOEUeCtUc6d42n9tgiImMu605dQaigvNaH5y1pwDpLlmxUk0nOUVxqo9mv0Uw8WNXB88FyDb0fPbewLpn4Fskb8Umv6_OymJ1W814DRG-jq3sI5DsB7AjtqJQ22nP2Vs1bIrx5fUxuScwrMsWSrrjAx4Kr8-5eeSDqE-_c7DPZ_zSPYDoHaMeR2pZfNAq3mEbxp8jMukzh77rYZ3ffQEA6AyxFSCSCrxVozhP4ypQ0jAkXVWOlj4nuV6briIqlL3ZboydwsIolRwaPSgH6-bw03XS6Hb9DA0KHJKLun94N9n5kw","use":"enc"} libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-jwe/key-rsa-4096.pub000066400000000000000000000013321357643561300273650ustar00rootroot00000000000000{"e":"AQAB","kid":"my kid","kty":"RSA","n":"2_YjG_D1sOWJxs6cohikupHf5WJfWSFfSCrnNZ7WR7AyTLnKZAF4VKyimMeJTLYYwCAXMDD5XmkF8VluI4O-hASUIJ7F9eDg3vO7nPwtkWa9lkqt-QyQZ_PjiOGpwetBLzrsaXsC9PvdVzrKXnjeNPsmmbC_Fx2cUn4H_9H_WfXi01VR75XFTBtxTrDY7hmpZHuFCFUOMCW9siTZRk9339Y6ORBznBs4jFbkGI1Pmc3op0o5f8S1gus9L81W5uyUrxfd-CkmJ6eWE8I36cfzI6irN2bhVhR_NXERUtS0QOEeJYlRJXqfYkxTMVlsXPl6zbYt__ZYLC6ZiUTCc6K2KmfGh7fihWbao4dyQW3Mq4kClhpIT0O01Y0r7sR1j4jTnFNqbmtPSl9lEMrfiUHfOLqRJo3qizQ-b6HLCDty1otFz8Q8gg0rD3copQ_zFrcTGwJGAv2Absraj7kp9EJXBqneCJ3dlRO8rzx7KB9Dsj-ygh3kZaubkPCeT1v4l_VUY2iGnK4vzIGKM7j56DQ97ZAi1Bb0y6GYSbrWB2_z0DKJu0fiU-NscbKplR68vgppUM6_iogrk48JEZg_kkTymniqbT3g7J_WeoZSx1Uu8ZHI3ysIFfUtFscOa2SJGlj1ds-lfk6Oqac_I8ahRqQeyVAEisZPmYIGSJajbJopJ4s"} libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-jwe/main.c000066400000000000000000000135151357643561300260000ustar00rootroot00000000000000/* * lws-crypto-jwe * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include /* * handles escapes and line wrapping suitable for use * defining a C char array ( -c option ) */ static void format_c(const char *key) { const char *k = key; int seq = 0; while (*k) { if (*k == '{') { putchar('\"'); putchar('{'); putchar('\"'); putchar('\n'); putchar('\t'); putchar('\"'); k++; seq = 0; continue; } if (*k == '}') { putchar('\"'); putchar('\n'); putchar('\"'); putchar('}'); putchar('\"'); putchar('\n'); k++; seq = 0; continue; } if (*k == '\"') { putchar('\\'); putchar('\"'); seq += 2; k++; continue; } if (*k == ',') { putchar(','); putchar('\"'); putchar('\n'); putchar('\t'); putchar('\"'); k++; seq = 0; continue; } putchar(*k); seq++; if (seq >= 60) { putchar('\"'); putchar('\n'); putchar('\t'); putchar(' '); putchar('\"'); seq = 1; } k++; } } #define MAX_SIZE (4 * 1024 * 1024) char temp[MAX_SIZE], compact[MAX_SIZE]; int main(int argc, const char **argv) { int n, enc = 0, result = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; char *in; struct lws_context_creation_info info; int temp_len = sizeof(temp); struct lws_context *context; struct lws_jwe jwe; const char *p; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS JWE example tool\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.options = 0; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } lws_jwe_init(&jwe, context); /* if encrypting, set the ciphers */ if ((p = lws_cmdline_option(argc, argv, "-e"))) { char *sp = strchr(p, ' '); if (!sp) { lwsl_err("format: -e \" " "\", eg, " "-e \"RSA1_5 A128CBC-HS256\"\n"); return 1; } *sp = '\0'; if (lws_gencrypto_jwe_alg_to_definition(p, &jwe.jose.alg)) { lwsl_err("Unknown cipher alg %s\n", p); return 1; } if (lws_gencrypto_jwe_enc_to_definition(sp + 1, &jwe.jose.enc_alg)) { lwsl_err("Unknown payload enc alg %s\n", sp + 1); return 1; } /* create JOSE header, also needed for output */ if (lws_jws_alloc_element(&jwe.jws.map, LJWS_JOSE, lws_concat_temp(temp, temp_len), &temp_len, strlen(p) + strlen(sp + 1) + 32, 0)) { lwsl_err("%s: temp space too small\n", __func__); return 1; } jwe.jws.map.len[LJWS_JOSE] = lws_snprintf( (char *)jwe.jws.map.buf[LJWS_JOSE], temp_len, "{\"alg\":\"%s\",\"enc\":\"%s\"}", p, sp + 1); enc = 1; } in = lws_concat_temp(temp, temp_len); n = read(0, in, temp_len); if (n < 0) { lwsl_err("Problem reading from stdin\n"); return 1; } temp_len -= n; /* grab the key */ if ((p = lws_cmdline_option(argc, argv, "-k"))) { if (lws_jwk_load(&jwe.jwk, p, NULL, NULL)) { lwsl_err("%s: problem loading JWK %s\n", __func__, p); return 1; } } else { lwsl_err("-k is required\n"); return 1; } if (enc) { /* point CTXT to the plaintext we read from stdin */ jwe.jws.map.buf[LJWE_CTXT] = in; jwe.jws.map.len[LJWE_CTXT] = n; /* * Create a random CEK and set EKEY to it * CEK size is determined by hash / hmac size */ n = lws_gencrypto_bits_to_bytes(jwe.jose.enc_alg->keybits_fixed); if (lws_jws_randomize_element(context, &jwe.jws.map, LJWE_EKEY, lws_concat_temp(temp, temp_len), &temp_len, n, LWS_JWE_LIMIT_KEY_ELEMENT_BYTES)) { lwsl_err("Problem getting random\n"); goto bail1; } /* perform the encryption of the CEK and the plaintext */ n = lws_jwe_encrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt failed\n", __func__); goto bail1; } if (lws_cmdline_option(argc, argv, "-f")) /* output the JWE in flattened form */ n = lws_jwe_render_flattened(&jwe, compact, sizeof(compact)); else /* output the JWE in compact form */ n = lws_jwe_render_compact(&jwe, compact, sizeof(compact)); if (n < 0) { lwsl_err("%s: lws_jwe_render failed: %d\n", __func__, n); goto bail1; } if (lws_cmdline_option(argc, argv, "-c")) format_c(compact); else if (write(1, compact, strlen(compact)) < 0) { lwsl_err("Write stdout failed\n"); goto bail1; } } else { if (lws_cmdline_option(argc, argv, "-f")) { if (lws_jwe_json_parse(&jwe, (uint8_t *)in, n, lws_concat_temp(temp, temp_len), &temp_len)) { lwsl_err("%s: lws_jwe_json_parse failed\n", __func__); goto bail1; } } else /* * converts a compact serialization to b64 + decoded maps * held in jws */ if (lws_jws_compact_decode(in, n, &jwe.jws.map, &jwe.jws.map_b64, lws_concat_temp(temp, temp_len), &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail1; } /* * Do the crypto according to what we parsed into the jose * (information on the ciphers) and the jws (plaintext and * signature info) */ n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail1; } /* if it's valid, dump the plaintext and return 0 */ if (write(1, jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]) < 0) { lwsl_err("Write stdout failed\n"); goto bail1; } } result = 0; bail1: lws_jwe_destroy(&jwe); lws_context_destroy(context); return result; } libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-jwk/000077500000000000000000000000001357643561300247115ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-jwk/CMakeLists.txt000066400000000000000000000036661357643561300274640ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-crypto-jwk) set(SRCS main.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_WITH_JOSE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-jwk/README.md000066400000000000000000000042001357643561300261640ustar00rootroot00000000000000# lws minimal example for JWK Demonstrates how to generate and format any kind of supported new random JWK keys. The full private key is output to stdout, a version of the key with the private part removed and some metadata adapted can be saved to a file at the same time using `--public `. In the public form, `key_ops` and `use` elements are adjusted to remove activities that require a private key. Key elements are output in strict RFC7638 lexicographic order as required by some applications. Keys produced with openssl and mbedtls backends are completely interchangeable. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -t |RSA, OCT or EC -b |For RSA and OCT, key size in bits -v |For EC keys, the curve, eg, "P-384"... this implies the key bits --kid "ID string"|Key identity string --use "use[ use]"|Key use restriction (mutually exclusive with --key-ops): sig, enc --alg |Specify the algorithm the key is designed for, eg "RSA1_5" --key-ops "op[ op]"|Key valid operations (mutually exclusive with --use): sign, verify, encrypt, decrypt, wrapKey, unwrapKey, deriveKey, deriveBits -c|Format the jwk as a linebroken C string --public |Only output the full, private key, not the public version first For legibility the example uses -c, however this ``` $ ./lws-crypto-jwk -t EC -v P-256 --key-ops "sign verify" --public mykey.pub [2018/12/18 20:19:29:6972] USER: LWS JWK example [2018/12/18 20:19:29:7200] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off [2018/12/18 20:19:29:7251] NOTICE: lws_jwk_generate: generating ECDSA key on curve P-256 {"crv":"P-256","d":"eMKM_S4BTL2aiebZLqvxglufV2YX4b3_32DesgEUOaM","key_ops":["sign","verify"],"kty":"EC","x":"OWauiGGtJ60ZegtqlwETQlmO1exTZdWbT2VbUs4a1hg","y":"g_eNOlqPecbguVQArL6Fd4T5xZthBgipNCBypXubPos"} ``` The output in `mykey.pub` is: ``` {"crv":"P-256","key_ops":["verify"],"kty":"EC","x":"OWauiGGtJ60ZegtqlwETQlmO1exTZdWbT2VbUs4a1hg","y":"g_eNOlqPecbguVQArL6Fd4T5xZthBgipNCBypXubPos"} ``` Notice the logging goes out on stderr, the key data goes on stdout. libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-jwk/main.c000066400000000000000000000073221357643561300260050ustar00rootroot00000000000000/* * lws-crypto-jwk * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include /* * handles escapes and line wrapping suitable for use * defining a C char array ( -c option ) */ static int format_c(int fd, const char *key) { const char *k = key; int seq = 0; while (*k) { if (*k == '{') { if (write(fd, "\"{\"\n\t\"", 6) < 6) return -1; k++; seq = 0; continue; } if (*k == '}') { if (write(fd, "\"\n\"}\"\n", 6) < 6) return -1; k++; seq = 0; continue; } if (*k == '\"') { if (write(fd, "\\\"", 2) < 2) return -1; seq += 2; k++; continue; } if (*k == ',') { if (write(fd, ",\"\n\t\"", 5) < 5) return -1; k++; seq = 0; continue; } if (write(fd, k, 1) < 1) return -1; seq++; if (seq >= 60) { if (write(fd, "\"\n\t \"", 5) < 5) return -1; seq = 1; } k++; } return 0; } int main(int argc, const char **argv) { int result = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; enum lws_gencrypto_kty kty = LWS_GENCRYPTO_KTY_RSA; struct lws_context_creation_info info; const char *curve = "P-256", *p; struct lws_context *context; struct lws_jwk jwk; int bits = 4096; char key[32768]; int vl = sizeof(key); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS JWK example\n"); if ((p = lws_cmdline_option(argc, argv, "-b"))) bits = atoi(p); if ((p = lws_cmdline_option(argc, argv, "-t"))) { if (!strcmp(p, "RSA")) kty = LWS_GENCRYPTO_KTY_RSA; else if (!strcmp(p, "OCT")) kty = LWS_GENCRYPTO_KTY_OCT; else if (!strcmp(p, "EC")) kty = LWS_GENCRYPTO_KTY_EC; else { lwsl_err("Unknown key type (must be " "OCT, RSA or EC)\n"); return 1; } } memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.options = 0; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } if ((p = lws_cmdline_option(argc, argv, "-v"))) curve = p; if (lws_jwk_generate(context, &jwk, kty, bits, curve)) { lwsl_err("lws_jwk_generate failed\n"); return 1; } if ((p = lws_cmdline_option(argc, argv, "--kid"))) lws_jwk_strdup_meta(&jwk, JWK_META_KID, p, strlen(p)); if ((p = lws_cmdline_option(argc, argv, "--use"))) lws_jwk_strdup_meta(&jwk, JWK_META_USE, p, strlen(p)); if ((p = lws_cmdline_option(argc, argv, "--alg"))) lws_jwk_strdup_meta(&jwk, JWK_META_ALG, p, strlen(p)); if ((p = lws_cmdline_option(argc, argv, "--key-ops"))) lws_jwk_strdup_meta(&jwk, JWK_META_KEY_OPS, p, strlen(p)); if ((p = lws_cmdline_option(argc, argv, "--public")) && kty != LWS_GENCRYPTO_KTY_OCT) { int fd; /* public version */ if (lws_jwk_export(&jwk, 0, key, &vl) < 0) { lwsl_err("lws_jwk_export failed\n"); return 1; } fd = open(p, LWS_O_CREAT | LWS_O_TRUNC | LWS_O_WRONLY, 0600); if (fd < 0) { lwsl_err("Can't open public key file %s\n", p); return 1; } if (lws_cmdline_option(argc, argv, "-c")) format_c(fd, key); else { if (write(fd, key, strlen(key)) < 0) { lwsl_err("Write public failed\n"); return 1; } } close(fd); } /* private version */ if (lws_jwk_export(&jwk, 1, key, &vl) < 0) { lwsl_err("lws_jwk_export failed\n"); return 1; } if (lws_cmdline_option(argc, argv, "-c")) { if (format_c(1, key) < 0) return 1; } else if (write(1, key, strlen(key)) < 0) { lwsl_err("Write stdout failed\n"); return 1; } lws_jwk_destroy(&jwk); lws_context_destroy(context); return result; } libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-jws/000077500000000000000000000000001357643561300247215ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-jws/CMakeLists.txt000066400000000000000000000036661357643561300274740ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-crypto-jws) set(SRCS main.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_WITH_JOSE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-jws/README.md000066400000000000000000000055021357643561300262020ustar00rootroot00000000000000# lws minimal example for JWS Demonstrates how to sign and verify using compact JWS and JWK, providing a commandline tool for signing and verifying stdin. ## build ``` $ cmake . && make ``` ## usage Stdin is either the plaintext (if signing) or compact JWS (if verifying). Stdout is either the JWE (if encrypting) or plaintext (if decrypting). You must pass a private or public key JWK file in the -k option if encrypting, and must pass a private key JWK file in the -k option if decrypting. To be clear, for asymmetric keys the public part of the key is required to encrypt, and the private part required to decrypt. For convenience, a pair of public and private keys are provided, `key-rsa-4096.private` and `key-rsa-4096.pub`, these were produced with just ``` $ lws-crypto-jwk -t RSA -b 4096 --public key-rsa-4096.pub >key-rsa-4096.private ``` Similar keys for EC modes may be produced with ``` $ lws-crypto-jwk -t EC -v P-256 --public key-ecdh-p-256.pub >key-ecdh-p-256.private ``` JWSs produced with openssl and mbedtls backends are completely interchangeable. Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -s ""|Sign (default is verify), eg, -e "ES256". For verify, the cipher information comes from the input JWS. -k |JWK file to sign or verify with... sign requires the key has its private part -c|Format the JWE as a linebroken C string -f|Output flattened representation (instead of compact by default) ``` $ echo -n "plaintext0123456" | ./lws-crypto-jws -s "ES256" -k ec-p256.private [2018/12/19 16:20:25:6519] USER: LWS JWE example tool [2018/12/19 16:20:25:6749] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off eyJhbGciOiJSU0ExXzUiLCAiZW5jIjoiQTEyOENCQy1IUzI1NiJ9.ivFr7qzx-pQ4V_edbjpdvR9OwWL9KmojPE2rXQM52oLtW0BtnxZu2_ezqhsAelyIcaworgfobs3u4bslXHMFbeJJjPb5xD0fBDe64OYXZH1NpUGTMJh9Ka4CrJ2B3xhxe7EByGAuGqmluqE0Yezj7rhSw7vlr5JAwuOJ8FaGa8aZ8ldki5G5h_S2Furlbjdcw3Rrxk7mCoMHcLoqzfZtggMPwGAMFogCqcwUo7oSLbBeGaa6hpMbfSysugseWdr8TzObQKPM52k6iVAlGwRaOg_qdLMgZiYRhHA6nFKTQd7XBbNY6qAS8sPuj7Zz344tF3RSfJ0zX_telG71sOtVv5fMpeDU-eCdpOWlCBfu6J6FQfAFu6SJryM4ajGOif09CwFI5qUQ33SOfQfS_M3nqSyd6Vu5M4lsDrb5wK7_XX5gqUwvI9wicf_8WWR-CQomRF-JvEASnA2SIf8QqYfa8R2rP9q6Md4vwO4EZrtxIsMDPsH-4ZEFu7vDjyy09QfIWWsnEb8-UgpVXensgt2m_2bZ76r1VB8-0nZLMwMyEhaH2wra9vX2FWao5UkmNJ7ht300f4_V6QzMFoePpwCvsufWBW6jcQLB-frCWe6uitWaZHEB4LxmNPKzQSz4QwwTKhpF1jNn8Xh1-w1m-2h0gj-oe-S8QBwPveqhPI1p2fI.snuhUTXHNu5mJ6dEPQqg6g.yl36qC4o0GE4nrquQ2YyCg.Vf0MoT7_kUrZdCNWXhq1DQ ``` Notice the logging is on stderr, and the output alone on stdout. When signing, the compact representation of the JWS is output on stdout. When verifying, if the signature is valid the plaintext is output on stdout and the tool exits with a 0 exit code. Otherwise nothing is output on stdout and it exits with a nonzero exit code. libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-jws/main.c000066400000000000000000000123011357643561300260060ustar00rootroot00000000000000/* * lws-crypto-jws * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include #define MAX_SIZE (4 * 1024 * 1024) char temp[MAX_SIZE], compact[MAX_SIZE]; int main(int argc, const char **argv) { int n, sign = 0, result = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; char *in; struct lws_context_creation_info info; struct lws_jws_map map; int temp_len = sizeof(temp); struct lws_context *context; struct lws_jose jose; struct lws_jwk jwk; struct lws_jws jws; const char *p; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS JWS example tool\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.options = 0; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } lws_jose_init(&jose); lws_jws_init(&jws, &jwk, context); /* if signing, set the ciphers */ if ((p = lws_cmdline_option(argc, argv, "-s"))) { if (lws_gencrypto_jws_alg_to_definition(p, &jose.alg)) { lwsl_err("format: -s \"\", eg, " "-e \"RS256\"\n"); return 1; } /* create JOSE header, also needed for output */ if (lws_jws_alloc_element(&jws.map, LJWS_JOSE, lws_concat_temp(temp, temp_len), &temp_len, strlen(p) + 10, 0)) { lwsl_err("%s: temp space too small\n", __func__); return 1; } jws.map.len[LJWS_JOSE] = lws_snprintf((char *)jws.map.buf[LJWS_JOSE], temp_len, "{\"alg\":\"%s\"}", p); sign = 1; } in = lws_concat_temp(temp, temp_len); n = read(0, in, temp_len); if (n < 0) { lwsl_err("Problem reading from stdin\n"); return 1; } temp_len -= n; /* grab the key */ if ((p = lws_cmdline_option(argc, argv, "-k"))) { if (lws_jwk_load(&jwk, p, NULL, NULL)) { lwsl_err("%s: problem loading JWK %s\n", __func__, p); return 1; } } else { lwsl_err("-k is required\n"); return 1; } if (sign) { /* add the plaintext from stdin to the map and a b64 version */ jws.map.buf[LJWS_PYLD] = in; jws.map.len[LJWS_PYLD] = n; if (lws_jws_encode_b64_element(&jws.map_b64, LJWS_PYLD, lws_concat_temp(temp, temp_len), &temp_len, jws.map.buf[LJWS_PYLD], jws.map.len[LJWS_PYLD])) goto bail1; /* add the b64 JOSE header to the b64 map */ if (lws_jws_encode_b64_element(&jws.map_b64, LJWS_JOSE, lws_concat_temp(temp, temp_len), &temp_len, jws.map.buf[LJWS_JOSE], jws.map.len[LJWS_JOSE])) goto bail1; /* prepare the space for the b64 signature in the map */ if (lws_jws_alloc_element(&jws.map_b64, LJWS_SIG, lws_concat_temp(temp, temp_len), &temp_len, lws_base64_size( LWS_JWE_LIMIT_KEY_ELEMENT_BYTES), 0)) { lwsl_err("%s: temp space too small\n", __func__); goto bail1; } /* sign the plaintext */ n = lws_jws_sign_from_b64(&jose, &jws, (char *)jws.map_b64.buf[LJWS_SIG], jws.map_b64.len[LJWS_SIG]); if (n < 0) { lwsl_err("%s: failed signing test packet\n", __func__); goto bail1; } /* set the actual b64 signature size */ jws.map_b64.len[LJWS_SIG] = n; if (lws_cmdline_option(argc, argv, "-f")) /* create the flattened representation */ n = lws_jws_write_flattened_json(&jws, compact, sizeof(compact)); else /* create the compact JWS representation */ n = lws_jws_write_compact(&jws, compact, sizeof(compact)); if (n < 0) { lwsl_notice("%s: write_compact failed\n", __func__); goto bail1; } /* dump the compact JWS representation on stdout */ if (write(1, compact, strlen(compact)) < 0) { lwsl_err("Write stdout failed\n"); goto bail1; } } else { /* perform the verify directly on the compact representation */ if (lws_cmdline_option(argc, argv, "-f")) { if (lws_jws_sig_confirm_json(in, n, &jws, &jwk, context, lws_concat_temp(temp, temp_len), &temp_len) < 0) { lwsl_notice("%s: confirm rsa sig failed\n", __func__); lwsl_hexdump_notice(jws.map.buf[LJWS_JOSE], jws.map.len[LJWS_JOSE]); lwsl_hexdump_notice(jws.map.buf[LJWS_PYLD], jws.map.len[LJWS_PYLD]); lwsl_hexdump_notice(jws.map.buf[LJWS_SIG], jws.map.len[LJWS_SIG]); lwsl_hexdump_notice(jws.map_b64.buf[LJWS_JOSE], jws.map_b64.len[LJWS_JOSE]); lwsl_hexdump_notice(jws.map_b64.buf[LJWS_PYLD], jws.map_b64.len[LJWS_PYLD]); lwsl_hexdump_notice(jws.map_b64.buf[LJWS_SIG], jws.map_b64.len[LJWS_SIG]); goto bail1; } } else { if (lws_jws_sig_confirm_compact_b64(in, lws_concat_used(temp, temp_len), &map, &jwk, context, lws_concat_temp(temp, temp_len), &temp_len) < 0) { lwsl_notice("%s: confirm rsa sig failed\n", __func__); goto bail1; } } lwsl_notice("VALID\n"); /* dump the verifed plaintext and return 0 */ if (write(1, jws.map.buf[LJWS_PYLD], jws.map.len[LJWS_PYLD]) < 0) { lwsl_err("Write stdout failed\n"); goto bail1; } } result = 0; bail1: lws_jws_destroy(&jws); lws_jwk_destroy(&jwk); lws_context_destroy(context); return result; } libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-x509/000077500000000000000000000000001357643561300246235ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-x509/CMakeLists.txt000066400000000000000000000036671357643561300273770ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-crypto-x509) set(SRCS main.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_WITH_JOSE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-x509/README.md000066400000000000000000000052461357643561300261110ustar00rootroot00000000000000# lws minimal example for X509 The example shows how to: - confirm one PEM cert or chain (-c) was signed by a trusted PEM cert (-t) - convert a certificate public key to JWK - convert a certificate public key and its private key PEM to a private JWK The examples work for EC and RSA certs and on mbedtls and OpenSSL the same. Notice the logging is on stderr, and only the JWK is output on stdout. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -c |Required PEM Certificate(s) to operate on... may be multiple concatednated PEM -t |Single PEM trusted certificate -p |Optional private key matching certificate given in -c. If given, only the private JWK is printed to stdout Example for confirming trust relationship. Notice the PEM in -c must contain not only the final certificate but also the certificates for any intermediate CAs. ``` $ ./lws-crypto-x509 -c ec-cert.pem -t ca-cert.pem [2019/01/02 20:31:13:2031] USER: LWS X509 api example [2019/01/02 20:31:13:2032] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off [2019/01/02 20:31:13:2043] NOTICE: main: certs loaded OK [2019/01/02 20:31:13:2043] NOTICE: main: verified OK <<<<====== [2019/01/02 20:31:13:2045] NOTICE: Cert Public JWK {"crv":"P-521","kty":"EC","x":"_uRNBbIbm0zhk8v6ujvQX9924264ZkqJhit0qamAoCegzuJbLf434kN7_aFEt6u-QWUu6-N1R8t6OlvrLo2jrNY","y":"AU-29XpNyB7e5e3s5t0ylzGEnF601A8A7Tx8m8xxngARZX_bn22itGJ3Y57BTcclPMoG80KjWAMnRVtrKqrD_aGD"} [2019/01/02 20:31:13:2045] NOTICE: main: OK ``` Example creating JWKs for public and public + private cert + PEM keys: ``` $ ./lws-crypto-x509 -c ec-cert.pem -p ec-key.pem [2019/01/02 20:14:43:4966] USER: LWS X509 api example [2019/01/02 20:14:43:5225] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off [2019/01/02 20:14:43:5707] NOTICE: lws_x509_public_to_jwk: EC key [2019/01/02 20:24:59:9514] USER: LWS X509 api example [2019/01/02 20:24:59:9741] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off [2019/01/02 20:25:00:1261] NOTICE: lws_x509_public_to_jwk: key type 408 "id-ecPublicKey" [2019/01/02 20:25:00:1269] NOTICE: lws_x509_public_to_jwk: EC key [2019/01/02 20:25:00:2097] NOTICE: Cert + Key Private JWK {"crv":"P-521","d":"AU3iQSKfPskMTW4ZncrYLhipUYzLYty2XhemTQ_nSuUB1vB76jHmOYUTRXFBLkVCW8cQYyMa5dMa3Bvv-cdvH0IB","kty":"EC","x":"_uRNBbIbm0zhk8v6ujvQX9924264ZkqJhit0qamAoCegzuJbLf434kN7_aFEt6u-QWUu6-N1R8t6OlvrLo2jrNY","y":"AU-29XpNyB7e5e3s5t0ylzGEnF601A8A7Tx8m8xxngARZX_bn22itGJ3Y57BTcclPMoG80KjWAMnRVtrKqrD_aGD"} [2019/01/02 20:25:00:2207] NOTICE: main: OK ``` libwebsockets-3.2.1/minimal-examples/crypto/minimal-crypto-x509/main.c000066400000000000000000000106321357643561300257150ustar00rootroot00000000000000/* * lws-crypto-x509 * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include #include static int read_pem(const char *filename, char *pembuf, int pembuf_len) { int n, fd = open(filename, LWS_O_RDONLY); if (fd == -1) return -1; n = read(fd, pembuf, pembuf_len - 1); close(fd); pembuf[n++] = '\0'; return n; } static int read_pem_c509_cert(struct lws_x509_cert **x509, const char *filename, char *pembuf, int pembuf_len) { int n; n = read_pem(filename, pembuf, pembuf_len); if (n < 0) return -1; if (lws_x509_create(x509)) { lwsl_err("%s: failed to create x509\n", __func__); return -1; } if (lws_x509_parse_from_pem(*x509, pembuf, n) < 0) { lwsl_err("%s: unable to parse PEM %s\n", __func__, filename); lws_x509_destroy(x509); return -1; } return 0; } int main(int argc, const char **argv) { int n, result = 1, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_x509_cert *x509 = NULL, *x509_trusted = NULL; struct lws_context_creation_info info; struct lws_context *context; struct lws_jwk jwk; char pembuf[6144]; const char *p; memset(&jwk, 0, sizeof(jwk)); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS X509 api example\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.options = 0; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } p = lws_cmdline_option(argc, argv, "-c"); if (!p) { lwsl_err("%s: missing -c \n", __func__); goto bail; } if (read_pem_c509_cert(&x509, p, pembuf, sizeof(pembuf))) { lwsl_err("%s: unable to read \"%s\": errno %d\n", __func__, p, errno); goto bail; } p = lws_cmdline_option(argc, argv, "-t"); if (p) { if (read_pem_c509_cert(&x509_trusted, p, pembuf, sizeof(pembuf))) { lwsl_err("%s: unable to read \"%s\": errno %d\n", __func__, p, errno); goto bail1; } lwsl_notice("%s: certs loaded OK\n", __func__); if (lws_x509_verify(x509, x509_trusted, NULL)) { lwsl_err("%s: verify failed\n", __func__); goto bail2; } lwsl_notice("%s: verified OK\n", __func__); } if (x509_trusted) { /* show the trusted cert public key as a JWK */ if (lws_x509_public_to_jwk(&jwk, x509_trusted, "P-256,P-384,P-521", 4096)) { lwsl_err("%s: unable to get trusted cert pubkey as JWK\n", __func__); goto bail2; } if ((p = lws_cmdline_option(argc, argv, "--alg"))) lws_jwk_strdup_meta(&jwk, JWK_META_ALG, p, strlen(p)); lwsl_info("JWK version of trusted cert:\n"); lws_jwk_dump(&jwk); lws_jwk_destroy(&jwk); } /* get the cert public key as a JWK */ if (lws_x509_public_to_jwk(&jwk, x509, "P-256,P-384,P-521", 4096)) { lwsl_err("%s: unable to get cert pubkey as JWK\n", __func__); goto bail3; } lwsl_info("JWK version of cert:\n"); if ((p = lws_cmdline_option(argc, argv, "--alg"))) lws_jwk_strdup_meta(&jwk, JWK_META_ALG, p, strlen(p)); lws_jwk_dump(&jwk); /* only print public if he doesn't provide private */ if (!lws_cmdline_option(argc, argv, "-p")) { lwsl_notice("Issuing Cert Public JWK on stdout\n"); n = sizeof(pembuf); if (lws_jwk_export(&jwk, 0, pembuf, &n)) puts(pembuf); } /* if we know where the cert private key is, add that to the cert JWK */ p = lws_cmdline_option(argc, argv, "-p"); if (p) { n = read_pem(p, pembuf, sizeof(pembuf)); if (n < 0) { lwsl_err("%s: unable read privkey %s\n", __func__, p); goto bail3; } if (lws_x509_jwk_privkey_pem(&jwk, pembuf, n, NULL)) { lwsl_err("%s: unable to parse privkey %s\n", __func__, p); goto bail3; } if ((p = lws_cmdline_option(argc, argv, "--alg"))) lws_jwk_strdup_meta(&jwk, JWK_META_ALG, p, strlen(p)); lwsl_info("JWK version of cert + privkey:\n"); lws_jwk_dump(&jwk); lwsl_notice("Issuing Cert + Private JWK on stdout\n"); n = sizeof(pembuf); if (lws_jwk_export(&jwk, 1, pembuf, &n)) puts(pembuf); } result = 0; bail3: lws_jwk_destroy(&jwk); bail2: lws_x509_destroy(&x509_trusted); bail1: lws_x509_destroy(&x509); bail: lws_context_destroy(context); if (result) lwsl_err("%s: failed\n", __func__); else lwsl_notice("%s: OK\n", __func__); return result; } libwebsockets-3.2.1/minimal-examples/dbus-client/000077500000000000000000000000001357643561300220455ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/dbus-client/README.md000066400000000000000000000003171357643561300233250ustar00rootroot00000000000000|Example|Demonstrates| ---|--- minimal-dbus-client|Shows how to connect to a DBusServer dbus server like minimal-dbus-server minimal-dbus-ws-proxy-testclient|A test client for use with minimal-dbus-ws-proxy libwebsockets-3.2.1/minimal-examples/dbus-client/minimal-dbus-client/000077500000000000000000000000001357643561300257025ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/dbus-client/minimal-dbus-client/CMakeLists.txt000066400000000000000000000066151357643561300304520ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) include(CheckLibraryExists) set(SAMP lws-minimal-dbus-client) set(SRCS minimal-dbus-client.c) if (NOT LWS_WITH_MINIMAL_EXAMPLES) CHECK_LIBRARY_EXISTS(dbus-1 dbus_connection_set_watch_functions "" LWS_HAVE_LIBDBUS) if (NOT LWS_HAVE_LIBDBUS) message(FATAL_ERROR "Install dbus-devel, or libdbus-1-dev etc") endif() if (NOT LWS_DBUS_LIB) set(LWS_DBUS_LIB "dbus-1") endif() if (NOT LWS_DBUS_INCLUDE1) # look in fedora and debian / ubuntu place if (EXISTS "/usr/include/dbus-1.0") set(LWS_DBUS_INCLUDE1 "/usr/include/dbus-1.0") else() message(FATAL_ERROR "Set LWS_DBUS_INCLUDE1 to /usr/include/dbus-1.0 or wherever the main dbus includes are") endif() endif() if (NOT LWS_DBUS_INCLUDE2) # look in fedora... debian / ubuntu has the ARCH in the path... if (EXISTS "/usr/lib64/dbus-1.0/include") set(LWS_DBUS_INCLUDE2 "/usr/lib64/dbus-1.0/include") else() message(FATAL_ERROR "Set LWS_DBUS_INCLUDE2 to /usr/lib/ARCH-linux-gnu/dbus-1.0/include or wherever dbus-arch-deps.h is on your system") endif() endif() set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES};${LWS_DBUS_INCLUDE1};${LWS_DBUS_INCLUDE2}) if (NOT LWS_DBUS_INCLUDE1 OR NOT LWS_DBUS_INCLUDE2) message(FATAL_ERROR "To build with libdbus, LWS_DBUS_INCLUDE1/2 must be given. See lib/roles/dbus/README.md") endif() endif() # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_DBUS 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) include_directories("${LWS_DBUS_INCLUDE1}") include_directories("${LWS_DBUS_INCLUDE2}") list(APPEND LIB_LIST dbus-1) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared ${LWS_DBUS_LIB}) else() target_link_libraries(${SAMP} websockets ${LWS_DBUS_LIB}) endif() endif() libwebsockets-3.2.1/minimal-examples/dbus-client/minimal-dbus-client/README.md000066400000000000000000000025441357643561300271660ustar00rootroot00000000000000# lws minimal dbus client This demonstrates nonblocking, asynchronous dbus method calls as the client. ## build Using libdbus requires additional non-default include paths setting, same as is necessary for lws build described in ./lib/roles/dbus/README.md CMake can guess one path and the library name usually, see the README above for details of how to override for custom libdbus and cross build. Fedora example: ``` $ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib64/dbus-1.0/include" $ make ``` Ubuntu example: ``` $ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib/x86_64-linux-gnu/dbus-1.0/include" $ make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 The minimal client connects to the minimal dbus server example, which is expected to be listening on its default abstract unix domain socket path. It call the server Echo method with "Hello!" and returns to the event loop. When the reply comes, it prints the returned message. Afterwards it just sits there receiving unsolicited messages from the server example, until closed by the user. ``` $ ./lws-minimal-dbus-client ctx [2018/10/05 06:08:31:4901] NOTICE: pending_call_notify [2018/10/05 06:08:31:4929] USER: pending_call_notify: received 'Hello!' ^C[2018/10/05 06:09:22:4409] NOTICE: destroy_dbus_client_conn [2018/10/05 06:09:22:4691] NOTICE: Exiting cleanly ... ``` libwebsockets-3.2.1/minimal-examples/dbus-client/minimal-dbus-client/minimal-dbus-client.c000066400000000000000000000137721357643561300317150ustar00rootroot00000000000000/* * lws-minimal-dbus-client * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal session dbus server that uses the lws event loop, * making it possible to integrate it with other lws features. */ #include #include #include #include #include #include #include #include static struct lws_dbus_ctx *dbus_ctx; static struct lws_context *context; static int interrupted; #define THIS_INTERFACE "org.libwebsockets.test" #define THIS_OBJECT "/org/libwebsockets/test" #define THIS_BUSNAME "org.libwebsockets.test" #define THIS_LISTEN_PATH "unix:abstract=org.libwebsockets.test" static DBusHandlerResult client_message_handler(DBusConnection *conn, DBusMessage *message, void *data) { const char *str; lwsl_info("%s: Got D-Bus request: %s.%s on %s\n", __func__, dbus_message_get_interface(message), dbus_message_get_member(message), dbus_message_get_path(message)); if (!dbus_message_get_args(message, NULL, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID)) return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; lwsl_notice("%s: '%s'\n", __func__, str); return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } static void destroy_dbus_client_conn(struct lws_dbus_ctx *ctx) { if (!ctx || !ctx->conn) return; lwsl_notice("%s\n", __func__); dbus_connection_remove_filter(ctx->conn, client_message_handler, ctx); dbus_connection_close(ctx->conn); dbus_connection_unref(ctx->conn); free(ctx); } /* * This callback is coming when lws has noticed the fd took a POLLHUP. The * ctx has effectively gone out of scope before this, and the connection can * be cleaned up and the ctx freed. */ static void cb_closing(struct lws_dbus_ctx *ctx) { lwsl_err("%s: closing\n", __func__); if (ctx == dbus_ctx) dbus_ctx = NULL; destroy_dbus_client_conn(ctx); } static struct lws_dbus_ctx * create_dbus_client_conn(struct lws_vhost *vh, int tsi, const char *ads) { struct lws_dbus_ctx *ctx; DBusError err; ctx = malloc(sizeof(*ctx)); if (!ctx) return NULL; memset(ctx, 0, sizeof(*ctx)); ctx->vh = vh; ctx->tsi = tsi; dbus_error_init(&err); /* connect to the daemon bus */ ctx->conn = dbus_connection_open_private(ads, &err); if (!ctx->conn) { lwsl_err("%s: Failed to connect: %s\n", __func__, err.message); goto fail; } dbus_connection_set_exit_on_disconnect(ctx->conn, 0); if (!dbus_connection_add_filter(ctx->conn, client_message_handler, ctx, NULL)) { lwsl_err("%s: Failed to add filter\n", __func__); goto fail; } /* * This is the part that binds the connection to lws watcher and * timeout handling provided by lws */ if (lws_dbus_connection_setup(ctx, ctx->conn, cb_closing)) { lwsl_err("%s: connection bind to lws failed\n", __func__); goto fail; } lwsl_notice("%s: created OK\n", __func__); return ctx; fail: dbus_error_free(&err); free(ctx); return NULL; } void sigint_handler(int sig) { interrupted = 1; } /* * This gets called if we timed out waiting for the server reply, or the * reply arrived. */ static void pending_call_notify(DBusPendingCall *pending, void *data) { // struct lws_dbus_ctx *ctx = (struct lws_dbus_ctx *)data; const char *payload; DBusMessage *msg; if (!dbus_pending_call_get_completed(pending)) { lwsl_err("%s: timed out waiting for reply\n", __func__); goto bail; } msg = dbus_pending_call_steal_reply(pending); if (!msg) goto bail; if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &payload, DBUS_TYPE_INVALID)) { goto bail1; } lwsl_user("%s: received '%s'\n", __func__, payload); bail1: dbus_message_unref(msg); bail: dbus_pending_call_unref(pending); } static int remote_method_call(struct lws_dbus_ctx *ctx) { DBusMessage *msg; const char *payload = "Hello!"; int ret = 1; msg = dbus_message_new_method_call( /* dest */ THIS_BUSNAME, /* object-path */ THIS_OBJECT, /* interface */ THIS_INTERFACE, /* method */ "Echo"); if (!msg) return 1; if (!dbus_message_append_args(msg, DBUS_TYPE_STRING, &payload, DBUS_TYPE_INVALID)) goto bail; if (!dbus_connection_send_with_reply(ctx->conn, msg, &ctx->pc, DBUS_TIMEOUT_USE_DEFAULT)) { lwsl_err("%s: unable to send\n", __func__); goto bail; } dbus_pending_call_set_notify(ctx->pc, pending_call_notify, ctx, NULL); ret = 0; bail: dbus_message_unref(msg); return ret; } int main(int argc, const char **argv) { struct lws_vhost *vh; struct lws_context_creation_info info; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */ /* | LLL_THREAD */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal DBUS client\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } vh = lws_create_vhost(context, &info); if (!vh) goto bail; dbus_ctx = create_dbus_client_conn(vh, 0, THIS_LISTEN_PATH); if (!dbus_ctx) goto bail1; if (remote_method_call(dbus_ctx)) goto bail2; /* lws event loop (default poll one) */ while (n >= 0 && !interrupted) n = lws_service(context, 0); bail2: destroy_dbus_client_conn(dbus_ctx); bail1: /* this is required for valgrind-cleanliness */ dbus_shutdown(); lws_context_destroy(context); lwsl_notice("Exiting cleanly\n"); return 0; bail: lwsl_err("%s: failed to start\n", __func__); lws_context_destroy(context); return 1; } libwebsockets-3.2.1/minimal-examples/dbus-client/minimal-dbus-ws-proxy-testclient/000077500000000000000000000000001357643561300304105ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/dbus-client/minimal-dbus-ws-proxy-testclient/CMakeLists.txt000066400000000000000000000066471357643561300331650ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) include(CheckLibraryExists) set(SAMP lws-minimal-dbus-ws-proxy-testclient) set(SRCS minimal-dbus-ws-proxy-testclient.c) if (NOT LWS_WITH_MINIMAL_EXAMPLES) CHECK_LIBRARY_EXISTS(dbus-1 dbus_connection_set_watch_functions "" LWS_HAVE_LIBDBUS) if (NOT LWS_HAVE_LIBDBUS) message(FATAL_ERROR "Install dbus-devel, or libdbus-1-dev etc") endif() if (NOT LWS_DBUS_LIB) set(LWS_DBUS_LIB "dbus-1") endif() if (NOT LWS_DBUS_INCLUDE1) # look in fedora and debian / ubuntu place if (EXISTS "/usr/include/dbus-1.0") set(LWS_DBUS_INCLUDE1 "/usr/include/dbus-1.0") else() message(FATAL_ERROR "Set LWS_DBUS_INCLUDE1 to /usr/include/dbus-1.0 or wherever the main dbus includes are") endif() endif() if (NOT LWS_DBUS_INCLUDE2) # look in fedora... debian / ubuntu has the ARCH in the path... if (EXISTS "/usr/lib64/dbus-1.0/include") set(LWS_DBUS_INCLUDE2 "/usr/lib64/dbus-1.0/include") else() message(FATAL_ERROR "Set LWS_DBUS_INCLUDE2 to /usr/lib/ARCH-linux-gnu/dbus-1.0/include or wherever dbus-arch-deps.h is on your system") endif() endif() set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES};${LWS_DBUS_INCLUDE1};${LWS_DBUS_INCLUDE2}) if (NOT LWS_DBUS_INCLUDE1 OR NOT LWS_DBUS_INCLUDE2) message(FATAL_ERROR "To build with libdbus, LWS_DBUS_INCLUDE1/2 must be given. See lib/roles/dbus/README.md") endif() endif() # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_DBUS 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) include_directories("${LWS_DBUS_INCLUDE1}") include_directories("${LWS_DBUS_INCLUDE2}") list(APPEND LIB_LIST dbus-1) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared ${LWS_DBUS_LIB}) else() target_link_libraries(${SAMP} websockets ${LWS_DBUS_LIB}) endif() endif() libwebsockets-3.2.1/minimal-examples/dbus-client/minimal-dbus-ws-proxy-testclient/README.md000066400000000000000000000037571357643561300317030ustar00rootroot00000000000000# lws minimal dbus ws proxy testclient This is a test client used to test `./minimal-examples/dbus-server/minimal-dbus-ws-proxy` It asks the minimal dbus ws proxy application to connect to libwebsockets.org over the mirror protocol. And it proxies back the ASCII packets used to communicate the mirror sample drawing vectors over dbus to this test client if you draw on the [mirror example app](https://libwebsockets.org/testserver/) in a browser. ## build Using libdbus requires additional non-default include paths setting, same as is necessary for lws build described in ./lib/roles/dbus/README.md CMake can guess one path and the library name usually, see the README above for details of how to override for custom libdbus and cross build. Fedora example: ``` $ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib64/dbus-1.0/include" $ make ``` Ubuntu example: ``` $ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib/x86_64-linux-gnu/dbus-1.0/include" $ make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 This connects to the minimal-dbus-ws-proxy example running in another terminal. ``` $ ./lws-minimal-dbus-ws-proxy-testclient [2018/10/05 14:17:16:6286] USER: LWS minimal DBUS ws proxy testclient [2018/10/05 14:17:16:6538] NOTICE: Creating Vhost 'default' port 0, 1 protocols, IPv6 off [2018/10/05 14:17:16:6617] USER: create_dbus_client_conn: connecting to 'unix:abstract=org.libwebsockets.wsclientproxy' [2018/10/05 14:17:16:7189] NOTICE: create_dbus_client_conn: created OK [2018/10/05 14:17:16:7429] USER: remote_method_call: requesting proxy connection wss://libwebsockets.org/ lws-mirror-protocol [2018/10/05 14:17:17:0387] USER: pending_call_notify: received 'Connecting' [2018/10/05 14:17:18:7475] NOTICE: client_message_handler: (type 7) 'ws client connection established' [2018/10/05 14:17:21:2028] NOTICE: client_message_handler: (type 6) 'd #000000 323 63 323 67;' [2018/10/05 14:17:21:2197] NOTICE: client_message_handler: (type 6) 'd #000000 323 67 327 73;' ... ``` minimal-dbus-ws-proxy-testclient.c000066400000000000000000000254301357643561300370440ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/dbus-client/minimal-dbus-ws-proxy-testclient/* * lws-minimal-dbus-ws-proxy-testclient * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This acts as a test client over DBUS, opening a session with * minimal-dbus-ws-proxy and sending and receiving data on the libwebsockets * mirror demo page. */ #include #include #include #include #include #include #include #include /* * These are the various states our connection can be in, both with regards * to the direct connection to the proxy, and the state of the onward ws * connection the proxy opens at our request. */ enum lws_dbus_client_state { LDCS_NOTHING, /* no connection yet */ LDCS_CONN, /* conn to proxy */ LDCS_CONN_WAITING_ONWARD, /* conn to proxy, awaiting proxied conn */ LDCS_CONN_ONWARD, /* conn to proxy and onward conn OK */ LDCS_CONN_CLOSED, /* conn to proxy but onward conn closed */ LDCS_CLOSED, /* connection to proxy is closed */ }; /* * our expanded dbus context */ struct lws_dbus_ctx_wsproxy_client { struct lws_dbus_ctx ctx; enum lws_dbus_client_state state; }; static struct lws_dbus_ctx_wsproxy_client *dbus_ctx; static struct lws_context *context; static int interrupted, autoexit_budget = -1, count_rx, count_tx; #define THIS_INTERFACE "org.libwebsockets.wsclientproxy" #define THIS_OBJECT "/org/libwebsockets/wsclientproxy" #define THIS_BUSNAME "org.libwebsockets.wsclientproxy" #define THIS_LISTEN_PATH "unix:abstract=org.libwebsockets.wsclientproxy" static void state_transition(struct lws_dbus_ctx_wsproxy_client *dcwc, enum lws_dbus_client_state state) { lwsl_notice("%s: %p: from state %d -> %d\n", __func__, dcwc,dcwc->state, state); dcwc->state = state; } static DBusHandlerResult filter(DBusConnection *conn, DBusMessage *message, void *data) { struct lws_dbus_ctx_wsproxy_client *dcwc = (struct lws_dbus_ctx_wsproxy_client *)data; const char *str; if (!dbus_message_get_args(message, NULL, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID)) return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; /* received ws data */ if (dbus_message_is_signal(message, THIS_INTERFACE, "Receive")) { lwsl_user("%s: Received '%s'\n", __func__, str); count_rx++; } /* proxy ws connection failed */ if (dbus_message_is_signal(message, THIS_INTERFACE, "Status") && !strcmp(str, "ws client connection error")) state_transition(dcwc, LDCS_CONN_CLOSED); /* proxy ws connection succeeded */ if (dbus_message_is_signal(message, THIS_INTERFACE, "Status") && !strcmp(str, "ws client connection established")) state_transition(dcwc, LDCS_CONN_ONWARD); /* proxy ws connection has closed */ if (dbus_message_is_signal(message, THIS_INTERFACE, "Status") && !strcmp(str, "ws client connection closed")) state_transition(dcwc, LDCS_CONN_CLOSED); return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } static void destroy_dbus_client_conn(struct lws_dbus_ctx_wsproxy_client **pdcwc) { struct lws_dbus_ctx_wsproxy_client *dcwc = *pdcwc; if (!dcwc || !dcwc->ctx.conn) return; lwsl_notice("%s\n", __func__); dbus_connection_remove_filter(dcwc->ctx.conn, filter, &dcwc->ctx); dbus_connection_close(dcwc->ctx.conn); dbus_connection_unref(dcwc->ctx.conn); free(dcwc); *pdcwc = NULL; } /* * This callback is coming when lws has noticed the fd took a POLLHUP. The * ctx has effectively gone out of scope before this, and the connection can * be cleaned up and the ctx freed. */ static void cb_closing(struct lws_dbus_ctx *ctx) { struct lws_dbus_ctx_wsproxy_client *dcwc = (struct lws_dbus_ctx_wsproxy_client *)ctx; lwsl_err("%s: closing\n", __func__); if (dcwc == dbus_ctx) dbus_ctx = NULL; destroy_dbus_client_conn(&dcwc); interrupted = 1; } static struct lws_dbus_ctx_wsproxy_client * create_dbus_client_conn(struct lws_vhost *vh, int tsi, const char *ads) { struct lws_dbus_ctx_wsproxy_client *dcwc; DBusError e; dcwc = malloc(sizeof(*dcwc)); if (!dcwc) return NULL; memset(dcwc, 0, sizeof(*dcwc)); dcwc->state = LDCS_NOTHING; dcwc->ctx.vh = vh; dcwc->ctx.tsi = tsi; dbus_error_init(&e); lwsl_user("%s: connecting to '%s'\n", __func__, ads); #if 1 /* connect to our daemon bus */ dcwc->ctx.conn = dbus_connection_open_private(ads, &e); if (!dcwc->ctx.conn) { lwsl_err("%s: Failed to connect: %s\n", __func__, e.message); goto fail; } #else /* connect to the SYSTEM bus */ dcwc->ctx.conn = dbus_bus_get(DBUS_BUS_SYSTEM, &e); if (!dcwc->ctx.conn) { lwsl_err("%s: Failed to get a session DBus connection: %s\n", __func__, e.message); goto fail; } #endif dbus_connection_set_exit_on_disconnect(dcwc->ctx.conn, 0); if (!dbus_connection_add_filter(dcwc->ctx.conn, filter, &dcwc->ctx, NULL)) { lwsl_err("%s: Failed to add filter\n", __func__); goto fail; } /* * This is the part that binds the connection to lws watcher and * timeout handling provided by lws */ if (lws_dbus_connection_setup(&dcwc->ctx, dcwc->ctx.conn, cb_closing)) { lwsl_err("%s: connection bind to lws failed\n", __func__); goto fail; } state_transition(dcwc, LDCS_CONN); lwsl_notice("%s: created OK\n", __func__); return dcwc; fail: dbus_error_free(&e); free(dcwc); return NULL; } void sigint_handler(int sig) { interrupted = 1; } /* * This gets called if we timed out waiting for the dbus server reply, or the * reply arrived. */ static void pending_call_notify(DBusPendingCall *pending, void *data) { const char *payload; DBusMessage *msg; if (!dbus_pending_call_get_completed(pending)) { lwsl_err("%s: timed out waiting for reply\n", __func__); goto bail; } msg = dbus_pending_call_steal_reply(pending); if (!msg) goto bail; if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &payload, DBUS_TYPE_INVALID)) { goto bail1; } lwsl_user("%s: received '%s'\n", __func__, payload); bail1: dbus_message_unref(msg); bail: dbus_pending_call_unref(pending); } static int remote_method_call(struct lws_dbus_ctx_wsproxy_client *dcwc) { char _uri[96]; const char *subprotocol = "lws-mirror-protocol", *uri = _uri; DBusMessage *msg; int ret = 1; /* * make our own private mirror session... because others may run this * at the same time against libwebsockets.org... as happened 2019-03-14 * and broke travis tests :-) */ lws_snprintf(_uri, sizeof(_uri), "wss://libwebsockets.org/?mirror=dbt-%d", (int)getpid()); msg = dbus_message_new_method_call( /* dest */ THIS_BUSNAME, /* object-path */ THIS_OBJECT, /* interface */ THIS_INTERFACE, /* method */ "Connect"); if (!msg) return 1; if (!dbus_message_append_args(msg, DBUS_TYPE_STRING, &uri, DBUS_TYPE_STRING, &subprotocol, DBUS_TYPE_INVALID)) goto bail; lwsl_user("%s: requesting proxy connection %s %s\n", __func__, uri, subprotocol); if (!dbus_connection_send_with_reply(dcwc->ctx.conn, msg, &dcwc->ctx.pc, DBUS_TIMEOUT_USE_DEFAULT)) { lwsl_err("%s: unable to send\n", __func__); goto bail; } dbus_pending_call_set_notify(dcwc->ctx.pc, pending_call_notify, &dcwc->ctx, NULL); state_transition(dcwc, LDCS_CONN_WAITING_ONWARD); ret = 0; bail: dbus_message_unref(msg); return ret; } /* * Stub lws protocol, just so we can get synchronous timers conveniently. * * Set up a 1Hz timer and if our connection state is suitable, use that * to write mirror protocol drawing packets to the proxied ws connection */ static int callback_just_timer(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { char payload[64]; const char *ws_pkt = payload; DBusMessage *msg; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: case LWS_CALLBACK_USER: lwsl_info("%s: LWS_CALLBACK_USER\n", __func__); if (!dbus_ctx || dbus_ctx->state != LDCS_CONN_ONWARD) goto again; if (autoexit_budget > 0) { if (!--autoexit_budget) { lwsl_notice("reached autoexit budget\n"); interrupted = 1; break; } } msg = dbus_message_new_method_call(THIS_BUSNAME, THIS_OBJECT, THIS_INTERFACE, "Send"); if (!msg) break; lws_snprintf(payload, sizeof(payload), "d #%06X %d %d %d %d;", rand() & 0xffffff, rand() % 480, rand() % 300, rand() % 480, rand() % 300); if (!dbus_message_append_args(msg, DBUS_TYPE_STRING, &ws_pkt, DBUS_TYPE_INVALID)) { dbus_message_unref(msg); break; } if (!dbus_connection_send_with_reply(dbus_ctx->ctx.conn, msg, &dbus_ctx->ctx.pc, DBUS_TIMEOUT_USE_DEFAULT)) { lwsl_err("%s: unable to send\n", __func__); dbus_message_unref(msg); break; } dbus_message_unref(msg); dbus_pending_call_set_notify(dbus_ctx->ctx.pc, pending_call_notify, &dbus_ctx->ctx, NULL); count_tx++; again: lws_timed_callback_vh_protocol(lws_get_vhost(wsi), lws_get_protocol(wsi), LWS_CALLBACK_USER, 2); break; default: break; } return 0; } static struct lws_protocols protocols[] = { { "_just_timer", callback_just_timer, 0, 10, 0, NULL, 0 }, { } }; int main(int argc, const char **argv) { struct lws_vhost *vh; struct lws_context_creation_info info; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */ /* | LLL_THREAD */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); if ((p = lws_cmdline_option(argc, argv, "-x"))) autoexit_budget = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal DBUS ws proxy testclient\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; info.protocols = protocols; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } info.options |= LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; vh = lws_create_vhost(context, &info); if (!vh) goto bail; dbus_ctx = create_dbus_client_conn(vh, 0, THIS_LISTEN_PATH); if (!dbus_ctx) goto bail1; if (remote_method_call(dbus_ctx)) goto bail2; /* lws event loop (default poll one) */ while (n >= 0 && !interrupted) n = lws_service(context, 0); bail2: destroy_dbus_client_conn(&dbus_ctx); bail1: /* this is required for valgrind-cleanliness */ dbus_shutdown(); lws_context_destroy(context); lwsl_notice("Exiting cleanly, rx: %d, tx: %d\n", count_rx, count_tx); return 0; bail: lwsl_err("%s: failed to start\n", __func__); lws_context_destroy(context); return 1; } libwebsockets-3.2.1/minimal-examples/dbus-server/000077500000000000000000000000001357643561300220755ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/dbus-server/README.md000066400000000000000000000002541357643561300233550ustar00rootroot00000000000000|Example|Demonstrates| ---|--- minimal-dbus-server|Shows how to run a DBUS session server using lws event loop minimal-dbus-ws-proxy|Control ws client connections via DBUS libwebsockets-3.2.1/minimal-examples/dbus-server/minimal-dbus-server/000077500000000000000000000000001357643561300257625ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/dbus-server/minimal-dbus-server/CMakeLists.txt000066400000000000000000000065761357643561300305400ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) include(CheckLibraryExists) set(SAMP lws-minimal-dbus-server) set(SRCS main.c) if (NOT LWS_WITH_MINIMAL_EXAMPLES) CHECK_LIBRARY_EXISTS(dbus-1 dbus_connection_set_watch_functions "" LWS_HAVE_LIBDBUS) if (NOT LWS_HAVE_LIBDBUS) message(FATAL_ERROR "Install dbus-devel, or libdbus-1-dev etc") endif() if (NOT LWS_DBUS_LIB) set(LWS_DBUS_LIB "dbus-1") endif() if (NOT LWS_DBUS_INCLUDE1) # look in fedora and debian / ubuntu place if (EXISTS "/usr/include/dbus-1.0") set(LWS_DBUS_INCLUDE1 "/usr/include/dbus-1.0") else() message(FATAL_ERROR "Set LWS_DBUS_INCLUDE1 to /usr/include/dbus-1.0 or wherever the main dbus includes are") endif() endif() if (NOT LWS_DBUS_INCLUDE2) # look in fedora... debian / ubuntu has the ARCH in the path... if (EXISTS "/usr/lib64/dbus-1.0/include") set(LWS_DBUS_INCLUDE2 "/usr/lib64/dbus-1.0/include") else() message(FATAL_ERROR "Set LWS_DBUS_INCLUDE2 to /usr/lib/ARCH-linux-gnu/dbus-1.0/include or wherever dbus-arch-deps.h is on your system") endif() endif() set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES};${LWS_DBUS_INCLUDE1};${LWS_DBUS_INCLUDE2}) if (NOT LWS_DBUS_INCLUDE1 OR NOT LWS_DBUS_INCLUDE2) message(FATAL_ERROR "To build with libdbus, LWS_DBUS_INCLUDE1/2 must be given. See lib/roles/dbus/README.md") endif() endif() # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_DBUS 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) include_directories("${LWS_DBUS_INCLUDE1}") include_directories("${LWS_DBUS_INCLUDE2}") list(APPEND LIB_LIST dbus-1) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared ${LWS_DBUS_LIB}) else() target_link_libraries(${SAMP} websockets ${LWS_DBUS_LIB}) endif() endif() libwebsockets-3.2.1/minimal-examples/dbus-server/minimal-dbus-server/README.md000066400000000000000000000051651357643561300272500ustar00rootroot00000000000000# lws minimal dbus server ## build Using libdbus requires additional non-default include paths setting, same as is necessary for lws build described in ./lib/roles/dbus/README.md CMake can guess one path and the library name usually, see the README above for details of how to override for custom libdbus and cross build. Fedora example: ``` $ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib64/dbus-1.0/include" $ make ``` Ubuntu example: ``` $ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib/x86_64-linux-gnu/dbus-1.0/include" $ make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 --session | Bind to session bus instead of creating private abstract unix socket By default the minimal server listens using its own abstract unix socket at `unix:abstract=org.libwebsockets.test`. You can also run it instead as a participant on the session bus, without its own unix socket, by giving `--session`. ### Examples using the default private abstract unix socket ``` $ ./lws-minimal-dbus-server [2018/10/03 07:08:02:6448] USER: LWS minimal dbus server [2018/10/03 07:08:02:6693] NOTICE: Creating Vhost 'default' port 0, 1 protocols, IPv6 off ... ``` You can communicate with the dbus server over its private abstract socket using, eg ``` $ gdbus introspect --address unix:abstract=org.libwebsockets.test --dest org.libwebsockets.test --object-path /org/libwebsockets/test node /org/example/TestObject { interface org.freedesktop.DBus.Introspectable { methods: Introspect(out s data); signals: properties: }; interface org.freedesktop.DBus.Properties { methods: Get(in s interface, ... ``` ``` $ gdbus call --address unix:abstract=org.libwebsockets.test --dest org.libwebsockets.test --object-path /org/libwebsockets/test --method org.libwebsockets.test.Echo HELLO ('HELLO',) ``` ### Examples using the DBUS session bus ``` $ ./lws-minimal-dbus-server --session [2018/10/03 07:08:02:6448] USER: LWS minimal dbus server [2018/10/03 07:08:02:6693] NOTICE: Creating Vhost 'default' port 0, 1 protocols, IPv6 off ... ``` You can communicate with the dbus server over the session bus using, eg ``` $ gdbus introspect --session --dest org.libwebsockets.test --object-path /org/libwebsockets/test node /org/example/TestObject { interface org.freedesktop.DBus.Introspectable { methods: Introspect(out s data); signals: properties: }; interface org.freedesktop.DBus.Properties { methods: Get(in s interface, ... ``` ``` $ gdbus call --session --dest org.libwebsockets.test --object-path /org/libwebsockets/test --method org.libwebsockets.test.Echo HELLO ('HELLO',) ``` libwebsockets-3.2.1/minimal-examples/dbus-server/minimal-dbus-server/main.c000066400000000000000000000322001357643561300270470ustar00rootroot00000000000000/* * lws-minimal-dbus-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal session dbus server that uses the lws event loop, * making it possible to integrate it with other lws features. * * The dbus server parts are based on "Sample code illustrating basic use of * D-BUS" (presumed Public Domain) here: * * https://github.com/fbuihuu/samples-dbus/blob/master/dbus-server.c */ #include #include #include #include #include #include #include #include static struct lws_context *context; static const char *version = "0.1"; static int interrupted; static struct lws_dbus_ctx dbus_ctx, ctx_listener; static char session; #define THIS_INTERFACE "org.libwebsockets.test" #define THIS_OBJECT "/org/libwebsockets/test" #define THIS_BUSNAME "org.libwebsockets.test" #define THIS_LISTEN_PATH "unix:abstract=org.libwebsockets.test" static const char * server_introspection_xml = DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE "\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " " " \n" "\n"; static DBusHandlerResult dmh_introspect(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { dbus_message_append_args(*reply, DBUS_TYPE_STRING, &server_introspection_xml, DBUS_TYPE_INVALID); return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_get(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { const char *interface, *property; DBusError err; dbus_error_init(&err); if (!dbus_message_get_args(m, &err, DBUS_TYPE_STRING, &interface, DBUS_TYPE_STRING, &property, DBUS_TYPE_INVALID)) { dbus_message_unref(*reply); *reply = dbus_message_new_error(m, err.name, err.message); dbus_error_free(&err); return DBUS_HANDLER_RESULT_HANDLED; } if (strcmp(property, "Version")) /* Unknown property */ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; dbus_message_append_args(*reply, DBUS_TYPE_STRING, &version, DBUS_TYPE_INVALID); return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_getall(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { DBusMessageIter arr, di, iter, va; const char *property = "Version"; dbus_message_iter_init_append(*reply, &iter); dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "{sv}", &arr); /* Append all properties name/value pairs */ dbus_message_iter_open_container(&arr, DBUS_TYPE_DICT_ENTRY, NULL, &di); dbus_message_iter_append_basic(&di, DBUS_TYPE_STRING, &property); dbus_message_iter_open_container(&di, DBUS_TYPE_VARIANT, "s", &va); dbus_message_iter_append_basic(&va, DBUS_TYPE_STRING, &version); dbus_message_iter_close_container(&di, &va); dbus_message_iter_close_container(&arr, &di); dbus_message_iter_close_container(&iter, &arr); return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_ping(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { const char *pong = "Pong"; dbus_message_append_args(*reply, DBUS_TYPE_STRING, &pong, DBUS_TYPE_INVALID); return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_echo(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { const char *msg; DBusError err; dbus_error_init(&err); if (!dbus_message_get_args(m, &err, DBUS_TYPE_STRING, &msg, DBUS_TYPE_INVALID)) { dbus_message_unref(*reply); *reply = dbus_message_new_error(m, err.name, err.message); dbus_error_free(&err); return DBUS_HANDLER_RESULT_HANDLED; } dbus_message_append_args(*reply, DBUS_TYPE_STRING, &msg, DBUS_TYPE_INVALID); return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_emit_signal(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { DBusMessage *r = dbus_message_new_signal(THIS_OBJECT, THIS_INTERFACE, "OnEmitSignal"); if (!r) return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; if (!dbus_connection_send(c, r, NULL)) return DBUS_HANDLER_RESULT_NEED_MEMORY; /* and send the original empty reply after */ return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_emit_quit(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { interrupted = 1; return DBUS_HANDLER_RESULT_HANDLED; } struct lws_dbus_methods { const char *inter; const char *call; lws_dbus_message_handler handler; } meths[] = { { DBUS_INTERFACE_INTROSPECTABLE, "Introspect", dmh_introspect }, { DBUS_INTERFACE_PROPERTIES, "Get", dmh_get }, { DBUS_INTERFACE_PROPERTIES, "GetAll", dmh_getall }, { THIS_INTERFACE, "Ping", dmh_ping }, { THIS_INTERFACE, "Echo", dmh_echo }, { THIS_INTERFACE, "EmitSignal", dmh_emit_signal }, { THIS_INTERFACE, "Quit", dmh_emit_quit }, }; static DBusHandlerResult server_message_handler(DBusConnection *conn, DBusMessage *message, void *data) { struct lws_dbus_methods *mp = meths; DBusHandlerResult result; DBusMessage *reply = NULL; size_t n; lwsl_info("%s: Got D-Bus request: %s.%s on %s\n", __func__, dbus_message_get_interface(message), dbus_message_get_member(message), dbus_message_get_path(message)); for (n = 0; n < LWS_ARRAY_SIZE(meths); n++) { if (dbus_message_is_method_call(message, mp->inter, mp->call)) { reply = dbus_message_new_method_return(message); if (!reply) return DBUS_HANDLER_RESULT_NEED_MEMORY; result = mp->handler(conn, message, &reply, data); if (result == DBUS_HANDLER_RESULT_HANDLED && !dbus_connection_send(conn, reply, NULL)) result = DBUS_HANDLER_RESULT_NEED_MEMORY; dbus_message_unref(reply); return result; } mp++; } return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } static const DBusObjectPathVTable server_vtable = { .message_function = server_message_handler }; static void destroy_dbus_server_conn(struct lws_dbus_ctx *ctx) { if (!ctx->conn) return; lwsl_notice("%s\n", __func__); dbus_connection_unregister_object_path(ctx->conn, THIS_OBJECT); lws_dll2_remove(&ctx->next); dbus_connection_unref(ctx->conn); } static void cb_closing(struct lws_dbus_ctx *ctx) { lwsl_err("%s: closing\n", __func__); destroy_dbus_server_conn(ctx); free(ctx); } static void new_conn(DBusServer *server, DBusConnection *conn, void *data) { struct lws_dbus_ctx *conn_ctx, *ctx = (struct lws_dbus_ctx *)data; lwsl_notice("%s: vh %s\n", __func__, lws_get_vhost_name(ctx->vh)); conn_ctx = malloc(sizeof(*conn_ctx)); if (!conn_ctx) return; memset(conn_ctx, 0, sizeof(*conn_ctx)); conn_ctx->tsi = ctx->tsi; conn_ctx->vh = ctx->vh; conn_ctx->conn = conn; if (lws_dbus_connection_setup(conn_ctx, conn, cb_closing)) { lwsl_err("%s: connection bind to lws failed\n", __func__); goto bail; } if (!dbus_connection_register_object_path(conn, THIS_OBJECT, &server_vtable, conn_ctx)) { lwsl_err("%s: Failed to register object path\n", __func__); goto bail; } lws_dll2_add_head(&conn_ctx->next, &ctx->owner); /* we take on responsibility for explicit close / unref with this... */ dbus_connection_ref(conn); return; bail: free(conn_ctx); } static int create_dbus_listener(const char *ads) { DBusError e; dbus_error_init(&e); if (!lws_dbus_server_listen(&ctx_listener, ads, &e, new_conn)) { lwsl_err("%s: failed\n", __func__); dbus_error_free(&e); return 1; } return 0; } static int create_dbus_server_conn(struct lws_dbus_ctx *ctx, DBusBusType type) { DBusError err; int rv; dbus_error_init(&err); /* connect to the daemon bus */ ctx->conn = dbus_bus_get(type, &err); if (!ctx->conn) { lwsl_err("%s: Failed to get a session DBus connection: %s\n", __func__, err.message); goto fail; } /* * by default dbus will call exit() when this connection closes... * we have to shut down other things cleanly, so disable that */ dbus_connection_set_exit_on_disconnect(ctx->conn, 0); rv = dbus_bus_request_name(ctx->conn, THIS_BUSNAME, DBUS_NAME_FLAG_REPLACE_EXISTING, &err); if (rv != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { lwsl_err("%s: Failed to request name on bus: %s\n", __func__, err.message); goto fail; } if (!dbus_connection_register_object_path(ctx->conn, THIS_OBJECT, &server_vtable, NULL)) { lwsl_err("%s: Failed to register object path for TestObject\n", __func__); dbus_bus_release_name(ctx->conn, THIS_BUSNAME, &err); goto fail; } /* * This is the part that binds the connection to lws watcher and * timeout handling provided by lws */ if (lws_dbus_connection_setup(ctx, ctx->conn, cb_closing)) { lwsl_err("%s: connection bind to lws failed\n", __func__); goto fail; } lwsl_notice("%s: created OK\n", __func__); return 0; fail: dbus_error_free(&err); return 1; } /* * Cleanly release the connection */ static void destroy_dbus_server_listener(struct lws_dbus_ctx *ctx) { dbus_server_disconnect(ctx->dbs); lws_start_foreach_dll_safe(struct lws_dll2 *, rdt, nx, ctx->owner.head) { struct lws_dbus_ctx *r = lws_container_of(rdt, struct lws_dbus_ctx, next); dbus_connection_close(r->conn); dbus_connection_unref(r->conn); free(r); } lws_end_foreach_dll_safe(rdt, nx); dbus_server_unref(ctx->dbs); } /* * DBUS can send messages outside the usual client-initiated RPC concept. * * You can receive them using a message filter. */ static void spam_connected_clients(struct lws_dbus_ctx *ctx) { /* send connected clients an unsolicited message */ lws_start_foreach_dll_safe(struct lws_dll2 *, rdt, nx, ctx->owner.head) { struct lws_dbus_ctx *r = lws_container_of(rdt, struct lws_dbus_ctx, next); DBusMessage *msg; const char *payload = "Unsolicited message"; msg = dbus_message_new(DBUS_NUM_MESSAGE_TYPES + 1); if (!msg) { lwsl_err("%s: new message failed\n", __func__); } dbus_message_append_args(msg, DBUS_TYPE_STRING, &payload, DBUS_TYPE_INVALID); if (!dbus_connection_send(r->conn, msg, NULL)) { lwsl_err("%s: unable to send\n", __func__); } lwsl_notice("%s\n", __func__); dbus_message_unref(msg); } lws_end_foreach_dll_safe(rdt, nx); } void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */ /* | LLL_THREAD */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal DBUS server\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } info.options |= LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; dbus_ctx.tsi = 0; ctx_listener.tsi = 0; ctx_listener.vh = dbus_ctx.vh = lws_create_vhost(context, &info); if (!dbus_ctx.vh) goto bail; session = !!lws_cmdline_option(argc, argv, "--session"); if (session) { /* create the dbus connection, loosely bound to our lws vhost */ if (create_dbus_server_conn(&dbus_ctx, DBUS_BUS_SESSION)) goto bail; } else { if (create_dbus_listener(THIS_LISTEN_PATH)) { lwsl_err("%s: create_dbus_listener failed\n", __func__); goto bail; } } /* lws event loop (default poll one) */ while (n >= 0 && !interrupted) { if (!session) spam_connected_clients(&ctx_listener); n = lws_service(context, 0); } if (session) destroy_dbus_server_conn(&dbus_ctx); else destroy_dbus_server_listener(&ctx_listener); /* this is required for valgrind-cleanliness */ dbus_shutdown(); lws_context_destroy(context); lwsl_notice("Exiting cleanly\n"); return 0; bail: lwsl_err("%s: failed to start\n", __func__); lws_context_destroy(context); return 1; } libwebsockets-3.2.1/minimal-examples/dbus-server/minimal-dbus-ws-proxy/000077500000000000000000000000001357643561300262645ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/dbus-server/minimal-dbus-ws-proxy/CMakeLists.txt000066400000000000000000000067441357643561300310370ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) include(CheckLibraryExists) set(SAMP lws-minimal-dbus-ws-proxy) set(SRCS main.c) if (NOT LWS_WITH_MINIMAL_EXAMPLES) CHECK_LIBRARY_EXISTS(dbus-1 dbus_connection_set_watch_functions "" LWS_HAVE_LIBDBUS) if (NOT LWS_HAVE_LIBDBUS) message(FATAL_ERROR "Install dbus-devel, or libdbus-1-dev etc") endif() if (NOT LWS_DBUS_LIB) set(LWS_DBUS_LIB "dbus-1") endif() if (NOT LWS_DBUS_INCLUDE1) # look in fedora and debian / ubuntu place if (EXISTS "/usr/include/dbus-1.0") set(LWS_DBUS_INCLUDE1 "/usr/include/dbus-1.0") else() message(FATAL_ERROR "Set LWS_DBUS_INCLUDE1 to /usr/include/dbus-1.0 or wherever the main dbus includes are") endif() endif() if (NOT LWS_DBUS_INCLUDE2) # look in fedora... debian / ubuntu has the ARCH in the path... if (EXISTS "/usr/lib64/dbus-1.0/include") set(LWS_DBUS_INCLUDE2 "/usr/lib64/dbus-1.0/include") else() message(FATAL_ERROR "Set LWS_DBUS_INCLUDE2 to /usr/lib/ARCH-linux-gnu/dbus-1.0/include or wherever dbus-arch-deps.h is on your system") endif() endif() set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES};${LWS_DBUS_INCLUDE1};${LWS_DBUS_INCLUDE2}) if (NOT LWS_DBUS_INCLUDE1 OR NOT LWS_DBUS_INCLUDE2) message(FATAL_ERROR "To build with libdbus, LWS_DBUS_INCLUDE1/2 must be given. See lib/roles/dbus/README.md") endif() endif() # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_DBUS 1 requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) include_directories("${LWS_DBUS_INCLUDE1}") include_directories("${LWS_DBUS_INCLUDE2}") list(APPEND LIB_LIST dbus-1) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared ${LWS_DBUS_LIB}) else() target_link_libraries(${SAMP} websockets ${LWS_DBUS_LIB}) endif() endif() libwebsockets-3.2.1/minimal-examples/dbus-server/minimal-dbus-ws-proxy/README.md000066400000000000000000000101751357643561300275470ustar00rootroot00000000000000# lws minimal dbus ws proxy This is an application which presents a DBUS server on one side, and a websocket client proxy on the other. You connect to it over DBUS, send a Connect method on its interface giving a URI and a ws subprotocol name. It replies with a string "Connecting" if all is well. Connection progress (including close) is then provided using type 7 messages sent back to the dbus client. Payload from the ws connection is provided using type 6 messages sent back to the dbus client. ## build Using libdbus requires additional non-default include paths setting, same as is necessary for lws build described in ./lib/roles/dbus/README.md CMake can guess one path and the library name usually, see the README above for details of how to override for custom libdbus and cross build. Fedora example: ``` $ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib64/dbus-1.0/include" $ make ``` Ubuntu example: ``` $ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib/x86_64-linux-gnu/dbus-1.0/include" $ make ``` ## Configuration The dbus-ws-proxy server tries to register its actual bus name with the SYSTEM bus in DBUS. If it fails, eg because of insufficient permissions on the user, then it continues without that and starts its own daemon normally. The main dbus daemon must be told how to accept these registrations if that's what you want. A config file is provided that tells dbus to allow the well-known busname for this daemon to be registered, but only by root. ``` $ sudo cp org.libwebsockets.wsclientproxy.conf /etc/dbus-1/system.d $ sudo systemctl restart dbus ``` ## usage Run the dbus-ws-proxy server, then start lws-minimal-dbus-ws-proxy-testclient in another terminal. This test app sends a random line drawing message to the mirror example on https://libwebsockets.org/testserver every couple of seconds, and displays any received messages (such as its own sends mirrored back, or anything drawn in the canvas in a browser). ``` $ sudo ./lws-minimal-dbus-ws-proxy-testclient [2018/10/07 10:05:29:2084] USER: LWS minimal DBUS ws proxy testclient [2018/10/07 10:05:29:2345] NOTICE: Creating Vhost 'default' port 0, 1 protocols, IPv6 off [2018/10/07 10:05:29:2424] USER: create_dbus_client_conn: connecting to 'unix:abstract=org.libwebsockets.wsclientproxy' [2018/10/07 10:05:29:2997] NOTICE: state_transition: 0x5679720: from state 0 -> 1 [2018/10/07 10:05:29:2999] NOTICE: create_dbus_client_conn: created OK [2018/10/07 10:05:29:3232] USER: remote_method_call: requesting proxy connection wss://libwebsockets.org/ lws-mirror-protocol [2018/10/07 10:05:29:3450] NOTICE: state_transition: 0x5679720: from state 1 -> 2 [2018/10/07 10:05:29:5972] USER: pending_call_notify: received 'Connecting' [2018/10/07 10:05:31:3387] NOTICE: state_transition: 0x5679720: from state 2 -> 3 [2018/10/07 10:05:33:6672] USER: filter: Received 'd #B0DC51 115 177 166 283;' [2018/10/07 10:05:35:9723] USER: filter: Received 'd #E87CCD 9 192 106 235;' [2018/10/07 10:05:38:2784] USER: filter: Received 'd #E2A9E3 379 290 427 62;' [2018/10/07 10:05:39:5833] USER: filter: Received 'd #B127F8 52 126 60 226;' [2018/10/07 10:05:41:8908] USER: filter: Received 'd #0E0F76 429 267 8 11;' ... ``` ## ws proxy DBUS details ### Fixed details Item|Value ---|--- Address|unix:abstract=org.libwebsockets.wsclientproxy Interface|org.libwebsockets.wsclientproxy Bus Name|org.libwebsockets.wsclientproxy Object path|/org/libwebsockets/wsclientproxy ### Interface Methods Method|Arguments|Returns ---|---|--- Connect|s: ws URI, s: ws subprotocol name|"Bad Uri", "Connecting" or "Failed" Send|s: payload|Empty message if no problem, or error message When Connecting, the actual connection happens asynchronously if the initial connection attempt doesn't fail immediately. If it's continuing in the background, the reply will have been "Connecting". ### Signals Signal Name|Argument|Meaning ---|---|--- Receive|s: payload|Received data from the ws link Status|s: status|See table below Status String|Meaning ---|--- "ws client connection error"|The ws connection attempt ended with a fatal error "ws client connection established"|The ws connection attempt succeeded "ws client connection closed"|The ws connection has closed libwebsockets-3.2.1/minimal-examples/dbus-server/minimal-dbus-ws-proxy/main.c000066400000000000000000000052331357643561300273570ustar00rootroot00000000000000/* * lws-minimal-dbus-ws-proxy * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal session dbus server that uses the lws event loop, * and allows proxying ws client connections via DBUS. */ #include #include #include #include #include #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal_dbus_ws_proxy.c" static int interrupted; static struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL_DBUS_WSPROXY, { NULL, NULL, 0, 0 } /* terminator */ }; /* * we pass the dbus address to connect to proxy with from outside the * protocol plugin... eg if built as a plugin for lwsws, you would instead * set this pvo in the lwsws JSON config. */ static const struct lws_protocol_vhost_options pvo_ads = { NULL, NULL, "ads", /* pvo name */ (void *)"unix:abstract=org.libwebsockets.wsclientproxy" /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_ads, /* "child" pvo linked-list */ "lws-minimal-dbus-wsproxy", /* protocol name we belong to on this vhost */ "" /* ignored */ }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { static struct lws_context *context; struct lws_context_creation_info info; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */ /* | LLL_THREAD */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS DBUS ws client proxy\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; info.port = CONTEXT_PORT_NO_LISTEN; info.ws_ping_pong_interval = 30; info.protocols = protocols; info.pvo = &pvo; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* lws event loop (default poll one) */ while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_notice("Exiting cleanly\n"); return 0; } org.libwebsockets.wsclientproxy.conf000066400000000000000000000007631357643561300354410ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/dbus-server/minimal-dbus-ws-proxy protocol_lws_minimal_dbus_ws_proxy.c000066400000000000000000000526131357643561300356030ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/dbus-server/minimal-dbus-ws-proxy/* * ws protocol handler plugin for dbus ws proxy * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This proxies outgoing ws client connections on DBUS. So a DBUS client can * reach out and get remote WS payloads in both directions. * * DEVELOPER NOTE * * Two worlds, dbus and ws, collide in this file. * * There main thing keeping it sane is both worlds are running in the same * thread and on the same event loop. Although things may happen completely * asynchronously in both worlds, the logical reaction to those events are * serialized in a single event loop doing one thing at a time. * * So while you are servicing an event in the ws world, you can be certain the * logical state of any related dbus thing cannot change underneath you, until * you return back to the event loop, and vice versa. So other-world objects * can't be freed, other-world handles can't close etc while you are servicing * in your world. * * Since all bets are off what happens next, and in which world, after you * return back to the event loop though, an additional rule is needed: worlds * must not allocate in objects owned by the other world. They must generate * their own objects in their world and use those for allocations and state. * * For example in the dbus-world there is a struct lws_dbus_ctx_wsproxy with * various state, but he is subject to deletion by events in dbus-world. If * the ws-world stored things there, they are subject to going out of scope * at the whim of the dbus connection without the ws world hearing about it and * cleanly deallocaing them. So the ws world must keep his own pss that remains * in scope until the ws link closes for allocations from ws-world. * * In this application there's a point of contact between the worlds, a ring * buffer allocated in ws world when the ws connection is established, and * deallocated when the ws connection is closed. The DBUS world needs to put * things in this ringbuffer. But the way lws_ring works, when the message * allocated in DBUS world is queued on the ringbuffer, the ringbuffer itself * takes responsibility for deallocation. So there is no problem. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #include #endif #include #include #include /* * dbus accepted connections create these larger context structs that start * with the lws dbus context */ struct vhd_dbus_proxy; struct msg { void *payload; /* is malloc'd */ size_t len; char binary; char first; char final; }; struct pss_dbus_proxy { struct lws_ring *ring_out; uint32_t ring_out_tail; }; struct lws_dbus_ctx_wsproxy { struct lws_dbus_ctx ctx; struct lws *cwsi; struct vhd_dbus_proxy *vhd; struct pss_dbus_proxy *pss; }; struct vhd_dbus_proxy { struct lws_context *context; struct lws_vhost *vhost; /* * Because the listener ctx is composed in the vhd, we can always get a * pointer to the outer vhd from a pointer to ctx_listener inside. */ struct lws_dbus_ctx ctx_listener; struct lws_dbus_ctx_wsproxy dctx; const char *dbus_listen_ads; }; #define THIS_INTERFACE "org.libwebsockets.wsclientproxy" #define THIS_OBJECT "/org/libwebsockets/wsclientproxy" #define THIS_BUSNAME "org.libwebsockets.wsclientproxy" static const char *version = "0.1"; static const char *server_introspection_xml = DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE "\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " " " \n" " " " \n" "\n"; static void destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } /* * DBUS WORLD */ static DBusHandlerResult dmh_introspect(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { dbus_message_append_args(*reply, DBUS_TYPE_STRING, &server_introspection_xml, DBUS_TYPE_INVALID); return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_get(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { const char *interface, *property; DBusError err; dbus_error_init(&err); if (!dbus_message_get_args(m, &err, DBUS_TYPE_STRING, &interface, DBUS_TYPE_STRING, &property, DBUS_TYPE_INVALID)) { dbus_message_unref(*reply); *reply = dbus_message_new_error(m, err.name, err.message); dbus_error_free(&err); return DBUS_HANDLER_RESULT_HANDLED; } if (strcmp(property, "Version")) /* Unknown property */ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; dbus_message_append_args(*reply, DBUS_TYPE_STRING, &version, DBUS_TYPE_INVALID); return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_getall(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { DBusMessageIter arr, di, iter, va; const char *property = "Version"; dbus_message_iter_init_append(*reply, &iter); dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "{sv}", &arr); /* Append all properties name/value pairs */ dbus_message_iter_open_container(&arr, DBUS_TYPE_DICT_ENTRY, NULL, &di); dbus_message_iter_append_basic(&di, DBUS_TYPE_STRING, &property); dbus_message_iter_open_container(&di, DBUS_TYPE_VARIANT, "s", &va); dbus_message_iter_append_basic(&va, DBUS_TYPE_STRING, &version); dbus_message_iter_close_container(&di, &va); dbus_message_iter_close_container(&arr, &di); dbus_message_iter_close_container(&iter, &arr); return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_connect(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { struct lws_dbus_ctx_wsproxy *wspctx = (struct lws_dbus_ctx_wsproxy *)d; const char *prot = "", *ads = "", *path = "", *baduri = "Bad Uri", *connecting = "Connecting", *failed = "Failed", **pp; struct lws_client_connect_info i; char host[128], uri_copy[512]; const char *uri, *subprotocol; DBusError err; int port = 0; dbus_error_init(&err); if (!dbus_message_get_args(m, &err, DBUS_TYPE_STRING, &uri, DBUS_TYPE_STRING, &subprotocol, DBUS_TYPE_INVALID)) { dbus_message_unref(*reply); *reply = dbus_message_new_error(m, err.name, err.message); dbus_error_free(&err); return DBUS_HANDLER_RESULT_HANDLED; } strncpy(uri_copy, uri, sizeof(uri_copy) - 1); uri_copy[sizeof(uri_copy) - 1] = '\0'; if (lws_parse_uri(uri_copy, &prot, &ads, &port, &path)) { pp = &baduri; goto send_reply; } lws_snprintf(host, sizeof(host), "%s:%u", ads, port); memset(&i, 0, sizeof(i)); assert(wspctx); assert(wspctx->vhd); i.context = wspctx->vhd->context; i.port = port; i.address = ads; i.path = path; i.host = host; i.origin = host; i.ssl_connection = !strcmp(prot, "https") || !strcmp(prot, "wss"); i.vhost = wspctx->ctx.vh; i.protocol = subprotocol; i.local_protocol_name = "lws-minimal-dbus-wsproxy"; i.pwsi = &wspctx->cwsi; lwsl_user("%s: connecting to %s://%s:%d%s\n", __func__, prot, i.address, i.port, i.path); if (!lws_client_connect_via_info(&i)) { lwsl_notice("%s: client connect failed\n", __func__); pp = &failed; goto send_reply; } lws_set_opaque_parent_data(wspctx->cwsi, wspctx); lwsl_notice("%s: client connecting...\n", __func__); pp = &connecting; send_reply: dbus_message_append_args(*reply, DBUS_TYPE_STRING, pp, DBUS_TYPE_INVALID); return DBUS_HANDLER_RESULT_HANDLED; } static int issue_dbus_signal(struct lws *wsi, const char *signame, const char *string) { struct lws_dbus_ctx_wsproxy *wspctx = lws_get_opaque_parent_data(wsi); DBusMessage *m; if (!wspctx) return 1; m = dbus_message_new_signal(THIS_OBJECT, THIS_INTERFACE, signame); if (!m) { lwsl_err("%s: new signal failed\n", __func__); return 1; } dbus_message_append_args(m, DBUS_TYPE_STRING, &string, DBUS_TYPE_INVALID); if (!dbus_connection_send(wspctx->ctx.conn, m, NULL)) lwsl_err("%s: unable to send\n", __func__); dbus_message_unref(m); return 0; } static DBusHandlerResult dmh_send(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { struct lws_dbus_ctx_wsproxy *wspctx = (struct lws_dbus_ctx_wsproxy *)d; const char *payload; struct msg amsg; DBusError err; dbus_error_init(&err); if (!wspctx->cwsi || !wspctx->pss) { dbus_message_unref(*reply); *reply = dbus_message_new_error(m, "Send Fail", "No ws conn"); return DBUS_HANDLER_RESULT_HANDLED; } if (!dbus_message_get_args(m, &err, DBUS_TYPE_STRING, &payload, DBUS_TYPE_INVALID)) { dbus_message_unref(*reply); *reply = dbus_message_new_error(m, err.name, err.message); dbus_error_free(&err); return DBUS_HANDLER_RESULT_HANDLED; } /* * we allocate on the ringbuffer in ws world, but responsibility for * freeing it is understood by lws_ring. */ amsg.len = strlen(payload); /* notice we over-allocate by LWS_PRE */ amsg.payload = malloc(LWS_PRE + amsg.len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); dbus_message_unref(*reply); *reply = dbus_message_new_error(m, "Send Fail", "OOM"); return DBUS_HANDLER_RESULT_HANDLED; } amsg.binary = 0; amsg.first = 1; amsg.final = 1; memcpy((char *)amsg.payload + LWS_PRE, payload, amsg.len); if (!lws_ring_insert(wspctx->pss->ring_out, &amsg, 1)) { destroy_message(&amsg); lwsl_user("Ring Full!\n"); dbus_message_unref(*reply); *reply = dbus_message_new_error(m, "Send Fail", "Ring full"); return DBUS_HANDLER_RESULT_HANDLED; } if (wspctx->cwsi) lws_callback_on_writable(wspctx->cwsi); return DBUS_HANDLER_RESULT_HANDLED; } struct lws_dbus_methods { const char *inter; const char *call; lws_dbus_message_handler handler; } meths[] = { { DBUS_INTERFACE_INTROSPECTABLE, "Introspect", dmh_introspect }, { DBUS_INTERFACE_PROPERTIES, "Get", dmh_get }, { DBUS_INTERFACE_PROPERTIES, "GetAll", dmh_getall }, { THIS_INTERFACE, "Connect", dmh_connect }, { THIS_INTERFACE, "Send", dmh_send }, }; static DBusHandlerResult server_message_handler(DBusConnection *conn, DBusMessage *message, void *data) { struct lws_dbus_methods *mp = meths; DBusMessage *reply = NULL; DBusHandlerResult result; size_t n; assert(data); lwsl_info("%s: Got D-Bus request: %s.%s on %s\n", __func__, dbus_message_get_interface(message), dbus_message_get_member(message), dbus_message_get_path(message)); for (n = 0; n < LWS_ARRAY_SIZE(meths); n++) { if (dbus_message_is_method_call(message, mp->inter, mp->call)) { reply = dbus_message_new_method_return(message); if (!reply) return DBUS_HANDLER_RESULT_NEED_MEMORY; result = mp->handler(conn, message, &reply, data); if (result == DBUS_HANDLER_RESULT_HANDLED && !dbus_connection_send(conn, reply, NULL)) result = DBUS_HANDLER_RESULT_NEED_MEMORY; dbus_message_unref(reply); return result; } mp++; } return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } static const DBusObjectPathVTable vtable = { .message_function = server_message_handler }; static void destroy_dbus_server_conn(struct lws_dbus_ctx_wsproxy *wsctx) { if (!wsctx->ctx.conn) return; lwsl_notice("%s\n", __func__); dbus_connection_unregister_object_path(wsctx->ctx.conn, THIS_OBJECT); lws_dll2_remove(&wsctx->ctx.next); dbus_connection_unref(wsctx->ctx.conn); } /* * This is the client dbus side going away. We need to stop the associated * client ws part and make sure it can't dereference us now we are gone. */ static void cb_closing(struct lws_dbus_ctx *ctx) { struct lws_dbus_ctx_wsproxy *wspctx = (struct lws_dbus_ctx_wsproxy *)ctx; lwsl_err("%s: closing\n", __func__); /* * We have to take care that the associated proxy wsi knows our * dbus ctx is going out of scope after we return from here. * * We do it by setting its pointer to our dbus ctx to NULL. */ if (wspctx->cwsi) { lws_set_opaque_parent_data(wspctx->cwsi, NULL); lws_set_timeout(wspctx->cwsi, PENDING_TIMEOUT_KILLED_BY_PROXY_CLIENT_CLOSE, LWS_TO_KILL_ASYNC); } destroy_dbus_server_conn(wspctx); free(wspctx); } static void new_conn(DBusServer *server, DBusConnection *conn, void *d) { struct lws_dbus_ctx_wsproxy *conn_wspctx, /* the new conn context */ /* the listener context */ *wspctx = (struct lws_dbus_ctx_wsproxy *)d; struct vhd_dbus_proxy *vhd = lws_container_of(d, struct vhd_dbus_proxy, ctx_listener); assert(vhd->vhost == wspctx->ctx.vh); lwsl_notice("%s\n", __func__); conn_wspctx = malloc(sizeof(*conn_wspctx)); if (!conn_wspctx) return; memset(conn_wspctx, 0, sizeof(*conn_wspctx)); conn_wspctx->ctx.tsi = wspctx->ctx.tsi; conn_wspctx->ctx.vh = wspctx->ctx.vh; conn_wspctx->ctx.conn = conn; conn_wspctx->vhd = vhd; /* let accepted connections also know the vhd */ assert(conn_wspctx->vhd); if (lws_dbus_connection_setup(&conn_wspctx->ctx, conn, cb_closing)) { lwsl_err("%s: connection bind to lws failed\n", __func__); goto bail; } if (!dbus_connection_register_object_path(conn, THIS_OBJECT, &vtable, conn_wspctx)) { lwsl_err("%s: Failed to register object path\n", __func__); goto bail; } lws_dll2_add_head(&conn_wspctx->ctx.next, &wspctx->ctx.owner); /* we take on responsibility for explicit close / unref with this... */ dbus_connection_ref(conn); return; bail: free(conn_wspctx); } static int create_dbus_listener(struct vhd_dbus_proxy *vhd, int tsi) { DBusError e; dbus_error_init(&e); #if 0 vhd->dctx.ctx.tsi = tsi; vhd->dctx.ctx.vh = vhd->vhost; vhd->dctx.ctx.next.prev = NULL; vhd->dctx.ctx.next.next = NULL; vhd->dctx.vhd = vhd; vhd->dctx.cwsi = NULL; /* connect to the SYSTEM bus */ vhd->dctx.ctx.conn = dbus_bus_get(DBUS_BUS_SYSTEM, &e); if (!vhd->dctx.ctx.conn) { lwsl_notice("%s: Failed to get a session DBus connection: '%s'" ", continuing with daemon listener only\n", __func__, e.message); dbus_error_free(&e); dbus_error_init(&e); goto daemon; } /* * by default dbus will call exit() when this connection closes... * we have to shut down other things cleanly, so disable that */ dbus_connection_set_exit_on_disconnect(vhd->dctx.ctx.conn, 0); if (dbus_bus_request_name(vhd->dctx.ctx.conn, THIS_BUSNAME, DBUS_NAME_FLAG_REPLACE_EXISTING, &e) != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { lwsl_notice("%s: Failed to request name on bus: '%s'," " continuing with daemon listener only\n", __func__, e.message); dbus_connection_unref(vhd->dctx.ctx.conn); vhd->dctx.ctx.conn = NULL; dbus_error_free(&e); dbus_error_init(&e); goto daemon; } if (!dbus_connection_register_object_path(vhd->dctx.ctx.conn, THIS_OBJECT, &vtable, &vhd->dctx)) { lwsl_err("%s: Failed to register object path\n", __func__); goto fail; } /* * This is the part that binds the connection to lws watcher and * timeout handling provided by lws */ if (lws_dbus_connection_setup(&vhd->dctx.ctx, vhd->dctx.ctx.conn, cb_closing)) { lwsl_err("%s: connection bind to lws failed\n", __func__); goto fail; } daemon: #endif vhd->ctx_listener.vh = vhd->vhost; vhd->ctx_listener.tsi = tsi; if (!lws_dbus_server_listen(&vhd->ctx_listener, vhd->dbus_listen_ads, &e, new_conn)) { lwsl_err("%s: failed\n", __func__); dbus_error_free(&e); return 1; } lwsl_notice("%s: created DBUS listener on %s\n", __func__, vhd->dbus_listen_ads); return 0; #if 0 fail: dbus_error_free(&e); return 1; #endif } static void destroy_dbus_server_listener(struct vhd_dbus_proxy *vhd) { dbus_server_disconnect(vhd->ctx_listener.dbs); lws_start_foreach_dll_safe(struct lws_dll2 *, rdt, nx, vhd->ctx_listener.owner.head) { struct lws_dbus_ctx *r = lws_container_of(rdt, struct lws_dbus_ctx, next); dbus_connection_close(r->conn); dbus_connection_unref(r->conn); free(r); } lws_end_foreach_dll_safe(rdt, nx); if (vhd->dctx.ctx.conn) dbus_connection_unref(vhd->dctx.ctx.conn); dbus_server_unref(vhd->ctx_listener.dbs); } /* * WS WORLD */ static int callback_minimal_dbus_wsproxy(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss_dbus_proxy *pss = (struct pss_dbus_proxy *)user; struct vhd_dbus_proxy *vhd = (struct vhd_dbus_proxy *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); struct lws_dbus_ctx_wsproxy *wspctx; const struct msg *pmsg; int flags, m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(*vhd)); if (!vhd) return -1; vhd->context = lws_get_context(wsi); vhd->vhost = lws_get_vhost(wsi); if (lws_pvo_get_str(in, "ads", &vhd->dbus_listen_ads)) { lwsl_err("%s: pvo 'ads' must be set\n", __func__); return -1; } if (create_dbus_listener(vhd, 0)) { lwsl_err("%s: create_dbus_listener failed\n", __func__); return -1; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: destroy_dbus_server_listener(vhd); /* this is required for valgrind-cleanliness */ dbus_shutdown(); break; case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_user("LWS_CALLBACK_CLIENT_ESTABLISHED\n"); /* * create the send ringbuffer now the ws connection is * established. */ wspctx = lws_get_opaque_parent_data(wsi); if (!wspctx) break; wspctx->pss = pss; pss->ring_out_tail = 0; pss->ring_out = lws_ring_create(sizeof(struct msg), 8, destroy_message); if (!pss->ring_out) { lwsl_err("OOM\n"); return -1; } issue_dbus_signal(wsi, "Status", "ws client connection established"); break; case LWS_CALLBACK_CLIENT_WRITEABLE: lwsl_user("LWS_CALLBACK_CLIENT_WRITEABLE:\n"); pmsg = lws_ring_get_element(pss->ring_out, &pss->ring_out_tail); if (!pmsg) { lwsl_user(" (nothing in ring)\n"); break; } flags = lws_write_ws_flags( pmsg->binary ? LWS_WRITE_BINARY : LWS_WRITE_TEXT, pmsg->first, pmsg->final); /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE, pmsg->len, flags); if (m < (int)pmsg->len) { lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lwsl_user(" wrote %d: flags: 0x%x first: %d final %d\n", m, flags, pmsg->first, pmsg->final); lws_ring_consume_single_tail(pss->ring_out, &pss->ring_out_tail, 1); /* more to do for us? */ if (lws_ring_get_element(pss->ring_out, &pss->ring_out_tail)) /* come back as soon as we can write more */ lws_callback_on_writable(wsi); break; case LWS_CALLBACK_CLIENT_RECEIVE: lwsl_user("LWS_CALLBACK_CLIENT_RECEIVE: %4d " "(rpp %5d, first %d, last %d, bin %d)\n", (int)len, (int)lws_remaining_packet_payload(wsi), lws_is_first_fragment(wsi), lws_is_final_fragment(wsi), lws_frame_is_binary(wsi)); { char strbuf[256]; int l = len; if (l > (int)sizeof(strbuf) - 1) l = sizeof(strbuf) - 1; memcpy(strbuf, in, l); strbuf[l] = '\0'; issue_dbus_signal(wsi, "Receive", strbuf); } break; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); issue_dbus_signal(wsi, "Status", "ws client connection error"); break; case LWS_CALLBACK_CLIENT_CLOSED: lwsl_err("LWS_CALLBACK_CLIENT_CLOSED ()\n"); issue_dbus_signal(wsi, "Status", "ws client connection closed"); /* destroy any ringbuffer and pending messages */ lws_ring_destroy(pss->ring_out); wspctx = lws_get_opaque_parent_data(wsi); if (!wspctx) break; /* * the wspctx cannot refer to its child wsi any longer, it is * about to go out of scope. */ wspctx->cwsi = NULL; wspctx->pss = NULL; break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL_DBUS_WSPROXY \ { \ "lws-minimal-dbus-wsproxy", \ callback_minimal_dbus_wsproxy, \ sizeof(struct pss_dbus_proxy), \ 1024, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) /* boilerplate needed if we are built as a dynamic plugin */ static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL_DBUS_WSPROXY }; LWS_EXTERN LWS_VISIBLE int init_protocol_minimal_dbus_wsproxy(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_minimal_dbus_wsproxy(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/minimal-examples/http-client/000077500000000000000000000000001357643561300220675ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-client/README.md000066400000000000000000000010321357643561300233420ustar00rootroot00000000000000|name|demonstrates| ---|--- minimal-http-client-certinfo|Shows how to gain detailed information on the peer certificate minimal-http-client-custom-headers|Shows how to send and receive custom headers (h1 only) minimal-http-client-hugeurl|Sends a > 2.5KB URL to warmcat.com minimal-http-client-multi|Connects to and reads https://warmcat.com, 8 times concurrently minimal-http-client-post|POSTs a form containing an uploaded file and a form variable, and captures the response minimal-http-client|Connects to and reads https://warmcat.com libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-certinfo/000077500000000000000000000000001357643561300275555ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-certinfo/CMakeLists.txt000066400000000000000000000041151357643561300323160ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-client-certinfo) set(SRCS minimal-http-client-certinfo.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_OPENSSL_SUPPORT 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-certinfo/README.md000066400000000000000000000106441357643561300310410ustar00rootroot00000000000000# lws minimal http client certinfo This demonstrates how to dump information from the peer certificate largely independent of the tls backend. The application goes to https://warmcat.com and receives the page data. Before receiving the page it dumps information on the server's cert. This works independently of the tls backend being OpenSSL or mbedTLS. However the public keys cannot be compared between the two tls backends, since they produce different representations. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -l| Connect to https://localhost:7681 and accept selfsigned cert --h1|Specify http/1.1 only using ALPN, rejects h2 even if server supports it ``` $ ./lws-minimal-http-client-certinfo [2018/04/05 21:39:26:5882] USER: LWS minimal http client [2018/04/05 21:39:26:5897] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 on [2018/04/05 21:39:26:5955] NOTICE: created client ssl context for default [2018/04/05 21:39:28:0824] NOTICE: lws_http_client_http_response 200 [2018/04/05 21:39:28:0824] NOTICE: Peer Cert CN : warmcat.com [2018/04/05 21:39:28:0824] NOTICE: Peer Cert issuer : /C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited [2018/04/05 21:39:28:0825] NOTICE: Peer Cert Valid from: Mon Nov 3 00:00:00 2014 [2018/04/05 21:39:28:0825] NOTICE: Peer Cert Valid to : Sat Nov 2 23:59:59 2019 [2018/04/05 21:39:28:0825] NOTICE: Peer Cert usage bits: 0xa0 [2018/04/05 21:39:28:0825] NOTICE: Peer Cert public key: [2018/04/05 21:39:28:0825] NOTICE: [2018/04/05 21:39:28:0825] NOTICE: 0000: 30 82 01 22 30 0D 06 09 2A 86 48 86 F7 0D 01 01 0.."0...*.H..... [2018/04/05 21:39:28:0825] NOTICE: 0010: 01 05 00 03 82 01 0F 00 30 82 01 0A 02 82 01 01 ........0....... [2018/04/05 21:39:28:0825] NOTICE: 0020: 00 EC 39 C1 98 25 A8 99 AC 01 9B D2 16 C0 CA A3 ..9..%.......... [2018/04/05 21:39:28:0825] NOTICE: 0030: 0E 19 57 E5 3D 23 F3 79 7E 63 BF CD B8 88 D1 16 ..W.=#.y~c...... [2018/04/05 21:39:28:0825] NOTICE: 0040: C6 F0 A6 ED 66 CB F3 C3 D6 7E A7 A3 AB 00 0A 3E ....f....~.....> [2018/04/05 21:39:28:0825] NOTICE: 0050: AD EF 20 44 85 5A 61 F0 71 20 BD E3 D1 4B B6 53 .. D.Za.q ...K.S [2018/04/05 21:39:28:0825] NOTICE: 0060: 57 AA 81 E6 ED 74 36 40 E7 FC 62 24 AD E8 82 1D W....t6@..b$.... [2018/04/05 21:39:28:0826] NOTICE: 0070: 89 C4 3D 64 6C A8 34 4B DB FB DD 7D D2 2D FB 86 ..=dl.4K...}.-.. [2018/04/05 21:39:28:0826] NOTICE: 0080: 97 EA 6B E2 C9 39 D6 19 DE A8 90 E7 86 8F CF 0A ..k..9.......... [2018/04/05 21:39:28:0826] NOTICE: 0090: CD 09 3C AF FB 0A FF 85 E8 93 D1 4B A0 C5 21 AD ..<........K..!. [2018/04/05 21:39:28:0826] NOTICE: 00A0: 58 52 30 0E 4B FE 4F C8 01 B9 BD 0F D4 E4 64 7B XR0.K.O.......d{ [2018/04/05 21:39:28:0826] NOTICE: 00B0: 04 B4 D2 68 69 8F F1 D5 FD B0 1A CE 55 43 08 B7 ...hi.......UC.. [2018/04/05 21:39:28:0826] NOTICE: 00C0: 9F 57 0D 4E E1 CA E8 5C B4 2A 6B AB 05 B5 57 67 .W.N...\.*k...Wg [2018/04/05 21:39:28:0826] NOTICE: 00D0: B8 FD 20 F4 4F 6B 0E 47 7C AD EB B4 99 2C 9B 53 .. .Ok.G|....,.S [2018/04/05 21:39:28:0826] NOTICE: 00E0: DF EA 67 8D 8A 9D A7 17 01 F9 4E BD 56 43 50 53 ..g.......N.VCPS [2018/04/05 21:39:28:0826] NOTICE: 00F0: 08 4E FE 6A 85 4A 4D 45 03 DA 01 00 96 7A C0 A9 .N.j.JME.....z.. [2018/04/05 21:39:28:0826] NOTICE: 0100: C2 32 5E 1A 9F 6F 7B E2 02 5E 70 12 D3 8E 76 6A .2^..o{..^p...vj [2018/04/05 21:39:28:0826] NOTICE: 0110: 0B 59 A4 D7 31 9D C6 86 08 53 2E 02 8A 1E B1 FB .Y..1....S...... [2018/04/05 21:39:28:0826] NOTICE: 0120: 7B 02 03 01 00 01 {..... [2018/04/05 21:39:28:0826] NOTICE: [2018/04/05 21:39:28:0829] USER: RECEIVE_CLIENT_HTTP_READ: read 503 [2018/04/05 21:39:28:0829] USER: RECEIVE_CLIENT_HTTP_READ: read 512 [2018/04/05 21:39:28:0829] USER: RECEIVE_CLIENT_HTTP_READ: read 512 [2018/04/05 21:39:28:0829] USER: RECEIVE_CLIENT_HTTP_READ: read 512 ... [2018/04/05 21:39:28:3777] USER: RECEIVE_CLIENT_HTTP_READ: read 512 [2018/04/05 21:39:28:3777] USER: RECEIVE_CLIENT_HTTP_READ: read 512 [2018/04/05 21:39:28:3778] USER: RECEIVE_CLIENT_HTTP_READ: read 503 [2018/04/05 21:39:28:3778] USER: RECEIVE_CLIENT_HTTP_READ: read 512 [2018/04/05 21:39:28:3778] USER: RECEIVE_CLIENT_HTTP_READ: read 512 [2018/04/05 21:39:28:3778] USER: RECEIVE_CLIENT_HTTP_READ: read 471 [2018/04/05 21:39:28:3778] USER: LWS_CALLBACK_COMPLETED_CLIENT_HTTP [2018/04/05 21:39:28:3787] USER: Completed ``` minimal-http-client-certinfo.c000066400000000000000000000132121357643561300353270ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-certinfo/* * lws-minimal-http-client * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the a minimal http client using lws. * * It visits https://warmcat.com/ and receives the html page there. You * can dump the page data by changing the #if 0 below. */ #include #include #include static int interrupted, bad = 1, status; static struct lws *client_wsi; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { uint8_t buf[1280]; union lws_tls_cert_info_results *ci = (union lws_tls_cert_info_results *)buf; switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); client_wsi = NULL; break; case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: status = lws_http_client_http_response(wsi); lwsl_notice("lws_http_client_http_response %d\n", status); if (!lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_COMMON_NAME, ci, sizeof(buf) - sizeof(*ci))) lwsl_notice(" Peer Cert CN : %s\n", ci->ns.name); if (!lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_ISSUER_NAME, ci, sizeof(ci->ns.name))) lwsl_notice(" Peer Cert issuer : %s\n", ci->ns.name); if (!lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_VALIDITY_FROM, ci, 0)) lwsl_notice(" Peer Cert Valid from: %s", ctime(&ci->time)); if (!lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_VALIDITY_TO, ci, 0)) lwsl_notice(" Peer Cert Valid to : %s", ctime(&ci->time)); if (!lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_USAGE, ci, 0)) lwsl_notice(" Peer Cert usage bits: 0x%x\n", ci->usage); if (!lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_OPAQUE_PUBLIC_KEY, ci, sizeof(buf) - sizeof(*ci))) { lwsl_notice(" Peer Cert public key:\n"); lwsl_hexdump_notice(ci->ns.name, ci->ns.len); } break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); #if 0 /* enable to dump the html */ { const char *p = in; while (len--) if (*p < 0x7f) putchar(*p++); else putchar('.'); } #endif return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP\n"); client_wsi = NULL; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: client_wsi = NULL; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "http", callback_http, 0, 0, }, { NULL, NULL, 0, 0 } }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_client_connect_info i; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* * For LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE * * | LLL_INFO | LLL_PARSER | LLL_HEADER | LLL_EXT | * LLL_CLIENT | LLL_LATENCY | LLL_DEBUG */ ; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http client [<-d ] [-l] [--h1]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; #if defined(LWS_WITH_MBEDTLS) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./warmcat.com.cer"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; i.ssl_connection = LCCSCF_USE_SSL; if (lws_cmdline_option(argc, argv, "-l")) { i.port = 7681; i.address = "localhost"; i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; } else { i.port = 443; i.address = "warmcat.com"; } i.path = "/"; i.host = i.address; i.origin = i.address; /* force h1 even if h2 available */ if (lws_cmdline_option(argc, argv, "--h1")) i.alpn = "http/1.1"; i.method = "GET"; i.protocol = protocols[0].name; i.pwsi = &client_wsi; lws_client_connect_via_info(&i); while (n >= 0 && client_wsi && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-certinfo/warmcat.com.cer000066400000000000000000000067361357643561300324770ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFUDCCBDigAwIBAgISA4mJfIm3iCGbU9+o8YQa+4nUMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTA5MDcwNzA5MjNaFw0x OTEyMDYwNzA5MjNaMBYxFDASBgNVBAMTC3dhcm1jYXQuY29tMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwnEoH9JW3GvpadpxHGZPb5wv1Q6KfAIMWtdq YCOfotFxaYULuzHVxmrTTgmEqJr+eBqUBkXKmGuRR/9UipOmTu5j02qFyWHotFdF ZGyp//8z+Rle9Qt1nL68oNIZLDtWkybh5x00b1uo4eyEszXUaa0aLqKP3lH7Q4jI aSVARZ8snrJR640Gp3ByudvNTYkGz469bpWzRC/8wSNtzzY02DvHs1GxQx9tMXw+ BbtUxeP7lpYFKEFBjgZaIKLv+4g8ItJIuO7gMSzG2JfpQHxdhrlhxpx7dsaMUcyM nnYXysNL5JG3KEMhkxbtdpCaEQ8jLSPbl/rnF/+mgce+lSjMuQIDAQABo4ICYjCC Al4wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD AjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSI9ai12zLFeNTEDHKI9Ghkqcpa2TAf BgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcBAQRjMGEw LgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlwdC5vcmcw LwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlwdC5vcmcv MBYGA1UdEQQPMA2CC3dhcm1jYXQuY29tMEwGA1UdIARFMEMwCAYGZ4EMAQIBMDcG CysGAQQBgt8TAQEBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5 cHQub3JnMIIBBgYKKwYBBAHWeQIEAgSB9wSB9ADyAHcAY/Lbzeg7zCzPC3KEJ1dr M6SNYXePvXWmOLHHaFRL2I0AAAFtCsVHHAAABAMASDBGAiEAy0q1cR4VwPL3iviL cBWN67kjJRXk+DwhodmeoM3kb3gCIQC2soAHFs0Umo+0RNdFrL41+hMuidh2cXbb Ovc6nh5tOQB3AOJpS64m6OlACeiGG7Y7g9Q+5/50iPukjyiTAZ3d8dv+AAABbQrF R48AAAQDAEgwRgIhANqKQm4t9by263CJ7/DLOaZCjtcK29KgJjPwhv08UMn1AiEA h35nGTASR8/E7xz+56ZUleqD7U1ABFgWZRZskIzsFO8wDQYJKoZIhvcNAQELBQAD ggEBADDJBVbKe2LPHmi8k2vxErB3Y0Ty+3gwgPEXKYtEvQ7tos89eE+QmOXAzH5J GwRarFf7kzmKeJv04tMebiEtshpap47oJfxCxfrtpja8hP8Cdu/v/Ae6eEzu3yet 0N08GJdxQKfgCFaoGUptbaF2RCIZS12SVcX4TPpdP+xaiZdmIx4dGM6tReQ8+y8B 10b4Hi2+d/zW0W1z6+FAemU6yleWriJDUik5oas9XZF5LAAMDb/WgF5eIB6P9CUG LuAO8lWlk9nBgXvMLTxZ74SJb17H4kFEIrIjvABNshz5gBW8xw9nfr5YIfANtwEj BDsq06Df3UORYVs/j3T97gPAEZ4= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj /PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-custom-headers/000077500000000000000000000000001357643561300306675ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-custom-headers/CMakeLists.txt000066400000000000000000000040421357643561300334270ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-client-custom-headers) set(SRCS minimal-http-client-custom-headers.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-custom-headers/README.md000066400000000000000000000033401357643561300321460ustar00rootroot00000000000000# lws minimal http client custom headers This http client application shows how to send and receive custom headers. This currently only works on http 1, so the app forces that even if h2 enables. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -l| Connect to https://localhost:7681 and accept selfsigned cert -n|no TLS The app looks for a custom header "test-custom-header" sent by warmcat.com. ``` $ ./lws-minimal-http-client-custom-headers [2019/03/11 05:46:45:7582] USER: LWS minimal http client Custom Headers [-d] [-l] [--h1] [2019/03/11 05:46:45:7671] NOTICE: created client ssl context for default [2019/03/11 05:46:46:7812] USER: Connected with server response: 200 [2019/03/11 05:46:46:7812] NOTICE: callback_http: custom header: 'hello' [2019/03/11 05:46:46:7814] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 ... ``` You can use the -n and -l to make this test app connect to localhost:7681 over http, and confirm the "dnt:1" header was sent either by tcpdump or by running the test server on :7681 with -d1151 ``` [2019/03/11 05:48:53:6806] PARSER: WSI_TOKEN_NAME_PART 'd' 0x64 (role=0x20000000) wsi->lextable_pos=0 [2019/03/11 05:48:53:6807] PARSER: WSI_TOKEN_NAME_PART 'n' 0x6E (role=0x20000000) wsi->lextable_pos=567 [2019/03/11 05:48:53:6807] PARSER: WSI_TOKEN_NAME_PART 't' 0x74 (role=0x20000000) wsi->lextable_pos=-1 [2019/03/11 05:48:53:6807] PARSER: WSI_TOKEN_NAME_PART ' ' 0x20 (role=0x20000000) wsi->lextable_pos=-1 [2019/03/11 05:48:53:6807] PARSER: WSI_TOKEN_NAME_PART '1' 0x31 (role=0x20000000) wsi->lextable_pos=-1 ' 0x0D (role=0x20000000) wsi->lextable_pos=-1NAME_PART ' [2019/03/11 05:48:53:6807] PARSER: WSI_TOKEN_NAME_PART ' ``` minimal-http-client-custom-headers.c000066400000000000000000000130461357643561300375600ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-custom-headers/* * lws-minimal-http-client * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the a minimal http client using lws. * * It visits https://warmcat.com/ and receives the html page there. You * can dump the page data by changing the #if 0 below. */ #include #include #include static int interrupted, bad = 1, status; static struct lws *client_wsi; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { char val[32]; int n; switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); client_wsi = NULL; break; case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: { unsigned char **p = (unsigned char **)in, *end = (*p) + len; /* * How to send a custom header in the request to the server */ if (lws_add_http_header_by_name(wsi, (const unsigned char *)"dnt", (const unsigned char *)"1", 1, p, end)) return -1; break; } case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: status = lws_http_client_http_response(wsi); lwsl_user("Connected with server response: %d\n", status); /* * How to query custom headers (http 1.x only at the momemnt) * * warmcat.com sends a custom header "test-custom-header" for * testing, it has the fixed value "hello". */ n = lws_hdr_custom_length(wsi, "test-custom-header:", 19); if (n < 0) lwsl_notice("%s: Can't find test-custom-header\n", __func__); else { if (lws_hdr_custom_copy(wsi, val, sizeof(val), "test-custom-header:", 19) < 0) lwsl_notice("%s: custom header too long\n", __func__); else lwsl_notice("%s: custom header: '%s'\n", __func__, val); } break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); #if 0 /* enable to dump the html */ { const char *p = in; while (len--) if (*p < 0x7f) putchar(*p++); else putchar('.'); } #endif return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP\n"); client_wsi = NULL; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: client_wsi = NULL; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "http", callback_http, 0, 0, }, { NULL, NULL, 0, 0 } }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_client_connect_info i; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* * For LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE * * | LLL_INFO | LLL_PARSER | LLL_HEADER | LLL_EXT | * LLL_CLIENT | LLL_LATENCY | LLL_DEBUG */ ; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http client Custom Headers [-d] [-l] [--h1]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; #if defined(LWS_WITH_MBEDTLS) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./warmcat.com.cer"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; if (!lws_cmdline_option(argc, argv, "-n")) i.ssl_connection = LCCSCF_USE_SSL; if (lws_cmdline_option(argc, argv, "-l")) { i.port = 7681; i.address = "localhost"; i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; } else { i.port = 443; i.address = "warmcat.com"; } /* currently custom headers receive only works with h1 */ i.alpn = "http/1.1"; i.path = "/"; i.host = i.address; i.origin = i.address; i.method = "GET"; i.protocol = protocols[0].name; i.pwsi = &client_wsi; lws_client_connect_via_info(&i); while (n >= 0 && client_wsi && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-custom-headers/warmcat.com.cer000066400000000000000000000067361357643561300336110ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFUDCCBDigAwIBAgISA4mJfIm3iCGbU9+o8YQa+4nUMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTA5MDcwNzA5MjNaFw0x OTEyMDYwNzA5MjNaMBYxFDASBgNVBAMTC3dhcm1jYXQuY29tMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwnEoH9JW3GvpadpxHGZPb5wv1Q6KfAIMWtdq YCOfotFxaYULuzHVxmrTTgmEqJr+eBqUBkXKmGuRR/9UipOmTu5j02qFyWHotFdF ZGyp//8z+Rle9Qt1nL68oNIZLDtWkybh5x00b1uo4eyEszXUaa0aLqKP3lH7Q4jI aSVARZ8snrJR640Gp3ByudvNTYkGz469bpWzRC/8wSNtzzY02DvHs1GxQx9tMXw+ BbtUxeP7lpYFKEFBjgZaIKLv+4g8ItJIuO7gMSzG2JfpQHxdhrlhxpx7dsaMUcyM nnYXysNL5JG3KEMhkxbtdpCaEQ8jLSPbl/rnF/+mgce+lSjMuQIDAQABo4ICYjCC Al4wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD AjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSI9ai12zLFeNTEDHKI9Ghkqcpa2TAf BgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcBAQRjMGEw LgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlwdC5vcmcw LwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlwdC5vcmcv MBYGA1UdEQQPMA2CC3dhcm1jYXQuY29tMEwGA1UdIARFMEMwCAYGZ4EMAQIBMDcG CysGAQQBgt8TAQEBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5 cHQub3JnMIIBBgYKKwYBBAHWeQIEAgSB9wSB9ADyAHcAY/Lbzeg7zCzPC3KEJ1dr M6SNYXePvXWmOLHHaFRL2I0AAAFtCsVHHAAABAMASDBGAiEAy0q1cR4VwPL3iviL cBWN67kjJRXk+DwhodmeoM3kb3gCIQC2soAHFs0Umo+0RNdFrL41+hMuidh2cXbb Ovc6nh5tOQB3AOJpS64m6OlACeiGG7Y7g9Q+5/50iPukjyiTAZ3d8dv+AAABbQrF R48AAAQDAEgwRgIhANqKQm4t9by263CJ7/DLOaZCjtcK29KgJjPwhv08UMn1AiEA h35nGTASR8/E7xz+56ZUleqD7U1ABFgWZRZskIzsFO8wDQYJKoZIhvcNAQELBQAD ggEBADDJBVbKe2LPHmi8k2vxErB3Y0Ty+3gwgPEXKYtEvQ7tos89eE+QmOXAzH5J GwRarFf7kzmKeJv04tMebiEtshpap47oJfxCxfrtpja8hP8Cdu/v/Ae6eEzu3yet 0N08GJdxQKfgCFaoGUptbaF2RCIZS12SVcX4TPpdP+xaiZdmIx4dGM6tReQ8+y8B 10b4Hi2+d/zW0W1z6+FAemU6yleWriJDUik5oas9XZF5LAAMDb/WgF5eIB6P9CUG LuAO8lWlk9nBgXvMLTxZ74SJb17H4kFEIrIjvABNshz5gBW8xw9nfr5YIfANtwEj BDsq06Df3UORYVs/j3T97gPAEZ4= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj /PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-hugeurl/000077500000000000000000000000001357643561300274175ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-hugeurl/CMakeLists.txt000066400000000000000000000040221357643561300321550ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-client-hugeurl) set(SRCS minimal-http-client-hugeurl.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-hugeurl/README.md000066400000000000000000000052631357643561300307040ustar00rootroot00000000000000# lws minimal http client hugeurl ## build ``` $ cmake . && make ``` ## usage The application goes to https://warmcat.com/?fakeparam=<2KB> and receives the page data. ``` $ ./lws-minimal-http-client [2018/03/04 14:43:20:8562] USER: LWS minimal http client hugeurl [2018/03/04 14:43:20:8571] NOTICE: Creating Vhost 'default' port -1, 1 protocols, IPv6 on [2018/03/04 14:43:20:8616] NOTICE: created client ssl context for default [2018/03/04 14:43:20:8617] NOTICE: lws_client_connect_2: 0x1814dc0: address warmcat.com [2018/03/04 14:43:21:1496] NOTICE: lws_client_connect_2: 0x1814dc0: address warmcat.com [2018/03/04 14:43:22:0154] NOTICE: lws_client_interpret_server_handshake: incoming content length 26520 [2018/03/04 14:43:22:0154] NOTICE: lws_client_interpret_server_handshake: client connection up [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3022] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3022] USER: RECEIVE_CLIENT_HTTP_READ: read 974 [2018/03/04 14:43:22:3022] NOTICE: lws_http_client_read: transaction completed says -1 [2018/03/04 14:43:23:3042] USER: Completed ``` minimal-http-client-hugeurl.c000066400000000000000000000153351357643561300350430ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-hugeurl/* * lws-minimal-http-client hugeurl * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the a minimal http client using lws. * * It visits https://warmcat.com/?fakeparam=<2KB> and receives the html * page there. You can dump the page data by changing the #if 0 below. */ #include #include #include static int interrupted, bad = 1, status; static struct lws *client_wsi; static const char * const uri = "/?fakeparam=" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" /* 500 */ "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" /* 1000 */ "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" /* 1500 */ "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" /* 2000 */ ; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); client_wsi = NULL; break; case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: status = lws_http_client_http_response(wsi); lwsl_user("Connected with server response: %d\n", status); break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); #if 0 /* enable to dump the html */ { const char *p = in; while (len--) if (*p < 0x7f) putchar(*p++); else putchar('.'); } #endif return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: client_wsi = NULL; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: client_wsi = NULL; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "http", callback_http, 0, 0, }, { NULL, NULL, 0, 0 } }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_client_connect_info i; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); signal(SIGINT, sigint_handler); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http client hugeurl [-d ] [-l] [--h1]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; #if defined(LWS_WITH_MBEDTLS) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./warmcat.com.cer"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; i.ssl_connection = LCCSCF_USE_SSL; if (lws_cmdline_option(argc, argv, "-l")) { i.port = 7681; i.address = "localhost"; i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; } else { i.port = 443; i.address = "warmcat.com"; } if (lws_cmdline_option(argc, argv, "--h1")) i.alpn = "http/1.1"; i.path = uri; i.host = i.address; i.origin = i.address; i.method = "GET"; i.protocol = protocols[0].name; i.pwsi = &client_wsi; lws_client_connect_via_info(&i); while (n >= 0 && client_wsi && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad? "failed": "OK"); return bad; } libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-hugeurl/selftest.sh000077500000000000000000000022601357643561300316070ustar00rootroot00000000000000#!/bin/bash # # $1: path to minimal example binaries... # if lws is built with -DLWS_WITH_MINIMAL_EXAMPLES=1 # that will be ./bin from your build dir # # $2: path for logs and results. The results will go # in a subdir named after the directory this script # is in # # $3: offset for test index count # # $4: total test count # # $5: path to ./minimal-examples dir in lws # # Test return code 0: OK, 254: timed out, other: error indication . $5/selftests-library.sh COUNT_TESTS=6 dotest $1 $2 warmcat dotest $1 $2 warmcat-h1 --h1 spawn "" $5/http-server/minimal-http-server-tls $1/lws-minimal-http-server-tls dotest $1 $2 localhost -l spawn $SPID $5/http-server/minimal-http-server-tls $1/lws-minimal-http-server-tls dotest $1 $2 localhost-h1 -l --h1 kill $SPID 2>/dev/null wait $SPID 2>/dev/null if [ -z "$TRAVIS_OS_NAME" ] ; then SPID="" spawn "" $5/http-server/minimal-http-server-eventlib $1/lws-minimal-http-server-eventlib --uv -s dotest $1 $2 localhost-suv -l spawn $SPID $5/http-server/minimal-http-server-eventlib $1/lws-minimal-http-server-eventlib --uv -s dotest $1 $2 localhost-suv-h1 -l --h1 kill $SPID 2>/dev/null wait $SPID 2>/dev/null fi exit $FAILS libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-hugeurl/warmcat.com.cer000066400000000000000000000067361357643561300323410ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFUDCCBDigAwIBAgISA4mJfIm3iCGbU9+o8YQa+4nUMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTA5MDcwNzA5MjNaFw0x OTEyMDYwNzA5MjNaMBYxFDASBgNVBAMTC3dhcm1jYXQuY29tMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwnEoH9JW3GvpadpxHGZPb5wv1Q6KfAIMWtdq YCOfotFxaYULuzHVxmrTTgmEqJr+eBqUBkXKmGuRR/9UipOmTu5j02qFyWHotFdF ZGyp//8z+Rle9Qt1nL68oNIZLDtWkybh5x00b1uo4eyEszXUaa0aLqKP3lH7Q4jI aSVARZ8snrJR640Gp3ByudvNTYkGz469bpWzRC/8wSNtzzY02DvHs1GxQx9tMXw+ BbtUxeP7lpYFKEFBjgZaIKLv+4g8ItJIuO7gMSzG2JfpQHxdhrlhxpx7dsaMUcyM nnYXysNL5JG3KEMhkxbtdpCaEQ8jLSPbl/rnF/+mgce+lSjMuQIDAQABo4ICYjCC Al4wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD AjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSI9ai12zLFeNTEDHKI9Ghkqcpa2TAf BgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcBAQRjMGEw LgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlwdC5vcmcw LwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlwdC5vcmcv MBYGA1UdEQQPMA2CC3dhcm1jYXQuY29tMEwGA1UdIARFMEMwCAYGZ4EMAQIBMDcG CysGAQQBgt8TAQEBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5 cHQub3JnMIIBBgYKKwYBBAHWeQIEAgSB9wSB9ADyAHcAY/Lbzeg7zCzPC3KEJ1dr M6SNYXePvXWmOLHHaFRL2I0AAAFtCsVHHAAABAMASDBGAiEAy0q1cR4VwPL3iviL cBWN67kjJRXk+DwhodmeoM3kb3gCIQC2soAHFs0Umo+0RNdFrL41+hMuidh2cXbb Ovc6nh5tOQB3AOJpS64m6OlACeiGG7Y7g9Q+5/50iPukjyiTAZ3d8dv+AAABbQrF R48AAAQDAEgwRgIhANqKQm4t9by263CJ7/DLOaZCjtcK29KgJjPwhv08UMn1AiEA h35nGTASR8/E7xz+56ZUleqD7U1ABFgWZRZskIzsFO8wDQYJKoZIhvcNAQELBQAD ggEBADDJBVbKe2LPHmi8k2vxErB3Y0Ty+3gwgPEXKYtEvQ7tos89eE+QmOXAzH5J GwRarFf7kzmKeJv04tMebiEtshpap47oJfxCxfrtpja8hP8Cdu/v/Ae6eEzu3yet 0N08GJdxQKfgCFaoGUptbaF2RCIZS12SVcX4TPpdP+xaiZdmIx4dGM6tReQ8+y8B 10b4Hi2+d/zW0W1z6+FAemU6yleWriJDUik5oas9XZF5LAAMDb/WgF5eIB6P9CUG LuAO8lWlk9nBgXvMLTxZ74SJb17H4kFEIrIjvABNshz5gBW8xw9nfr5YIfANtwEj BDsq06Df3UORYVs/j3T97gPAEZ4= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj /PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-multi/000077500000000000000000000000001357643561300270765ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-multi/CMakeLists.txt000066400000000000000000000040201357643561300316320ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-client-multi) set(SRCS minimal-http-client-multi.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-multi/README.md000066400000000000000000000010741357643561300303570ustar00rootroot00000000000000# lws minimal http client multi ## build ``` $ cmake . && make ``` ## usage The application goes to https://warmcat.com and receives the page data same as minimal http client. However it does it for 8 client connections concurrently. ## Commandline Options Option|Meaning ---|--- -s|Stagger the connections by 100ms, the last by 1s -p|Use http/1.1 pipelining or h2 simultaneous streams --h1|Force http/1 only -l|Connect to server on https://localhost:7681 instead of https://warmcat.com:443 -n|Read numbered files like /1.png, /2.png etc. Default is just read / minimal-http-client-multi.c000066400000000000000000000222111357643561300341700ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-multi/* * lws-minimal-http-client-multi * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the a minimal http client using lws, which makes * 8 downloads simultaneously from warmcat.com. * * Currently that takes the form of 8 individual simultaneous tcp and * tls connections, which happen concurrently. Notice that the ordering * of the returned payload may be intermingled for the various connections. * * By default the connections happen all together at the beginning and operate * concurrently, which is fast. However this is resource-intenstive, there are * 8 tcp connections, 8 tls tunnels on both the client and server. You can * instead opt to have the connections happen one after the other inside a * single tcp connection and tls tunnel, using HTTP/1.1 pipelining. To be * eligible to be pipelined on another existing connection to the same server, * the client connection must have the LCCSCF_PIPELINE flag on its * info.ssl_connection member (this is independent of whether the connection * is in ssl mode or not). * * HTTP/1.0: Pipelining only possible if Keep-Alive: yes sent by server * HTTP/1.1: always possible... serializes requests * HTTP/2: always possible... all requests sent as individual streams in parallel */ #include #include #include #include #include #define COUNT 8 struct user { int index; }; static int interrupted, completed, failed, numbered, stagger_idx; static struct lws *client_wsi[COUNT]; static struct user user[COUNT]; static lws_sorted_usec_list_t sul_stagger; static struct lws_client_connect_info i; struct lws_context *context; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct user *u = (struct user *)user; switch (reason) { case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: resp %u\n", lws_http_client_http_response(wsi)); break; /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); client_wsi[u->index] = NULL; failed++; if (++completed == COUNT) { lwsl_err("Done: failed: %d\n", failed); interrupted = 1; } break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: conn %d: read %d\n", u->index, (int)len); #if 0 /* enable to dump the html */ { const char *p = in; while (len--) if (*p < 0x7f) putchar(*p++); else putchar('.'); } #endif return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP %p: idx %d\n", wsi, u->index); client_wsi[u->index] = NULL; if (++completed == COUNT) { if (!failed) lwsl_user("Done: all OK\n"); else lwsl_err("Done: failed: %d\n", failed); interrupted = 1; /* so we exit immediately */ lws_cancel_service(lws_get_context(wsi)); } break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: if (u && client_wsi[u->index]) { /* * If it completed normally, it will have been set to * NULL then already. So we are dealing with an * abnormal, failing, close */ client_wsi[u->index] = NULL; failed++; if (++completed == COUNT) { lwsl_err("Done: failed: %d\n", failed); interrupted = 1; } } break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "http", callback_http, 0, 0, }, { NULL, NULL, 0, 0 } }; static void sigint_handler(int sig) { interrupted = 1; } #if defined(WIN32) int gettimeofday(struct timeval * tp, struct timezone * tzp) { // Note: some broken versions only have 8 trailing zero's, the correct epoch has 9 trailing zero's // This magic number is the number of 100 nanosecond intervals since January 1, 1601 (UTC) // until 00:00:00 January 1, 1970 static const uint64_t EPOCH = ((uint64_t) 116444736000000000ULL); SYSTEMTIME system_time; FILETIME file_time; uint64_t time; GetSystemTime( &system_time ); SystemTimeToFileTime( &system_time, &file_time ); time = ((uint64_t)file_time.dwLowDateTime ) ; time += ((uint64_t)file_time.dwHighDateTime) << 32; tp->tv_sec = (long) ((time - EPOCH) / 10000000L); tp->tv_usec = (long) (system_time.wMilliseconds * 1000); return 0; } #endif unsigned long long us(void) { struct timeval t; gettimeofday(&t, NULL); return (t.tv_sec * 1000000ull) + t.tv_usec; } static void lws_try_client_connection(struct lws_client_connect_info *i, int m) { char path[128]; if (numbered) { lws_snprintf(path, sizeof(path), "/%d.png", m + 1); i->path = path; } else i->path = "/"; i->pwsi = &client_wsi[m]; user[m].index = m; i->userdata = &user[m]; if (!lws_client_connect_via_info(i)) { failed++; if (++completed == COUNT) { lwsl_user("Done: failed: %d\n", failed); interrupted = 1; } } else lwsl_user("started connection %p: idx %d (%s)\n", client_wsi[m], m, i->path); } static void stagger_cb(lws_sorted_usec_list_t *sul) { lws_usec_t next; /* * open the connections at 100ms intervals, with the * last one being after 1s, testing both queuing, and * direct H2 stream addition stability */ lws_try_client_connection(&i, stagger_idx++); if (stagger_idx == (int)LWS_ARRAY_SIZE(client_wsi)) return; next = 300 * LWS_US_PER_MS; if (stagger_idx == (int)LWS_ARRAY_SIZE(client_wsi) - 1) next += 700 * LWS_US_PER_MS; lws_sul_schedule(context, 0, &sul_stagger, stagger_cb, next); } int main(int argc, const char **argv) { struct lws_context_creation_info info; unsigned long long start; const char *p; int n = 0, m, staggered = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ staggered = !!lws_cmdline_option(argc, argv, "-s"); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http client [-s (staggered)] [-p (pipeline)]\n"); lwsl_user(" [--h1 (http/1 only)] [-l (localhost)] [-d ]\n"); lwsl_user(" [-n (numbered)]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; /* * since we know this lws context is only ever going to be used with * COUNT client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and COUNT + 1 (allowing for h2 * network wsi) that we will use. */ info.fd_limit_per_thread = 1 + COUNT + 1; #if defined(LWS_WITH_MBEDTLS) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./warmcat.com.cer"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } i.context = context; i.ssl_connection = LCCSCF_USE_SSL; /* enables h1 or h2 connection sharing */ if (lws_cmdline_option(argc, argv, "-p")) i.ssl_connection |= LCCSCF_PIPELINE; /* force h1 even if h2 available */ if (lws_cmdline_option(argc, argv, "--h1")) i.alpn = "http/1.1"; if (lws_cmdline_option(argc, argv, "-l")) { i.port = 7681; i.address = "localhost"; i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; } else { i.port = 443; i.address = "warmcat.com"; } if (lws_cmdline_option(argc, argv, "-n")) numbered = 1; if ((p = lws_cmdline_option(argc, argv, "--port"))) i.port = atoi(p); i.host = i.address; i.origin = i.address; i.method = "GET"; i.protocol = protocols[0].name; if (!staggered) /* * just pile on all the connections at once, testing the * pipeline queuing before the first is connected */ for (m = 0; m < (int)LWS_ARRAY_SIZE(client_wsi); m++) lws_try_client_connection(&i, m); else /* * delay the connections slightly */ lws_sul_schedule(context, 0, &sul_stagger, stagger_cb, 100 * LWS_US_PER_MS); start = us(); m = 0; while (n >= 0 && !interrupted) n = lws_service(context, 0); lwsl_user("Duration: %lldms\n", (us() - start) / 1000); lws_context_destroy(context); lwsl_user("Exiting with %d\n", failed || completed != COUNT); return failed || completed != COUNT; } libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-multi/selftest.sh000077500000000000000000000033671357643561300312770ustar00rootroot00000000000000#!/bin/bash # # $1: path to minimal example binaries... # if lws is built with -DLWS_WITH_MINIMAL_EXAMPLES=1 # that will be ./bin from your build dir # # $2: path for logs and results. The results will go # in a subdir named after the directory this script # is in # # $3: offset for test index count # # $4: total test count # # $5: path to ./minimal-examples dir in lws # # Test return code 0: OK, 254: timed out, other: error indication . $5/selftests-library.sh COUNT_TESTS=16 dotest $1 $2 warmcat dotest $1 $2 warmcat-pipe -p dotest $1 $2 warmcat-h1 --h1 dotest $1 $2 warmcat-h1-pipe --h1 -p dotest $1 $2 warmcat-stag -s dotest $1 $2 warmcat-pipe-stag -p -s dotest $1 $2 warmcat-h1-stag --h1 -s dotest $1 $2 warmcat-h1-pipe-stag --h1 -p -s spawn "" $5/http-server/minimal-http-server-tls $1/lws-minimal-http-server-tls dotest $1 $2 localhost -l spawn $SPID $5/http-server/minimal-http-server-tls $1/lws-minimal-http-server-tls dotest $1 $2 localhost-pipe -l -p spawn $SPID $5/http-server/minimal-http-server-tls $1/lws-minimal-http-server-tls dotest $1 $2 localhost-h1 -l --h1 spawn $SPID $5/http-server/minimal-http-server-tls $1/lws-minimal-http-server-tls dotest $1 $2 localhost-h1-pipe -l --h1 -p spawn $SPID $5/http-server/minimal-http-server-tls $1/lws-minimal-http-server-tls dotest $1 $2 localhost-stag -l -s spawn $SPID $5/http-server/minimal-http-server-tls $1/lws-minimal-http-server-tls dotest $1 $2 localhost-pipe-stag -l -p -s spawn $SPID $5/http-server/minimal-http-server-tls $1/lws-minimal-http-server-tls dotest $1 $2 localhost-h1-stag -l --h1 -s spawn $SPID $5/http-server/minimal-http-server-tls $1/lws-minimal-http-server-tls dotest $1 $2 localhost-h1-pipe-stag -l --h1 -p -s kill $SPID 2>/dev/null wait $SPID 2>/dev/null exit $FAILS libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-multi/warmcat.com.cer000066400000000000000000000067361357643561300320200ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFUDCCBDigAwIBAgISA4mJfIm3iCGbU9+o8YQa+4nUMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTA5MDcwNzA5MjNaFw0x OTEyMDYwNzA5MjNaMBYxFDASBgNVBAMTC3dhcm1jYXQuY29tMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwnEoH9JW3GvpadpxHGZPb5wv1Q6KfAIMWtdq YCOfotFxaYULuzHVxmrTTgmEqJr+eBqUBkXKmGuRR/9UipOmTu5j02qFyWHotFdF ZGyp//8z+Rle9Qt1nL68oNIZLDtWkybh5x00b1uo4eyEszXUaa0aLqKP3lH7Q4jI aSVARZ8snrJR640Gp3ByudvNTYkGz469bpWzRC/8wSNtzzY02DvHs1GxQx9tMXw+ BbtUxeP7lpYFKEFBjgZaIKLv+4g8ItJIuO7gMSzG2JfpQHxdhrlhxpx7dsaMUcyM nnYXysNL5JG3KEMhkxbtdpCaEQ8jLSPbl/rnF/+mgce+lSjMuQIDAQABo4ICYjCC Al4wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD AjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSI9ai12zLFeNTEDHKI9Ghkqcpa2TAf BgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcBAQRjMGEw LgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlwdC5vcmcw LwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlwdC5vcmcv MBYGA1UdEQQPMA2CC3dhcm1jYXQuY29tMEwGA1UdIARFMEMwCAYGZ4EMAQIBMDcG CysGAQQBgt8TAQEBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5 cHQub3JnMIIBBgYKKwYBBAHWeQIEAgSB9wSB9ADyAHcAY/Lbzeg7zCzPC3KEJ1dr M6SNYXePvXWmOLHHaFRL2I0AAAFtCsVHHAAABAMASDBGAiEAy0q1cR4VwPL3iviL cBWN67kjJRXk+DwhodmeoM3kb3gCIQC2soAHFs0Umo+0RNdFrL41+hMuidh2cXbb Ovc6nh5tOQB3AOJpS64m6OlACeiGG7Y7g9Q+5/50iPukjyiTAZ3d8dv+AAABbQrF R48AAAQDAEgwRgIhANqKQm4t9by263CJ7/DLOaZCjtcK29KgJjPwhv08UMn1AiEA h35nGTASR8/E7xz+56ZUleqD7U1ABFgWZRZskIzsFO8wDQYJKoZIhvcNAQELBQAD ggEBADDJBVbKe2LPHmi8k2vxErB3Y0Ty+3gwgPEXKYtEvQ7tos89eE+QmOXAzH5J GwRarFf7kzmKeJv04tMebiEtshpap47oJfxCxfrtpja8hP8Cdu/v/Ae6eEzu3yet 0N08GJdxQKfgCFaoGUptbaF2RCIZS12SVcX4TPpdP+xaiZdmIx4dGM6tReQ8+y8B 10b4Hi2+d/zW0W1z6+FAemU6yleWriJDUik5oas9XZF5LAAMDb/WgF5eIB6P9CUG LuAO8lWlk9nBgXvMLTxZ74SJb17H4kFEIrIjvABNshz5gBW8xw9nfr5YIfANtwEj BDsq06Df3UORYVs/j3T97gPAEZ4= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj /PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-post/000077500000000000000000000000001357643561300267315ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-post/CMakeLists.txt000066400000000000000000000040141357643561300314700ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-client-post) set(SRCS minimal-http-client-post.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-post/README.md000066400000000000000000000103631357643561300302130ustar00rootroot00000000000000# lws minimal http client POST This example demonstrates a multipart POST to https://libwebsockets.org/testserver/formtest setting both a form variable and uploading a short file. The result of the POST form processing is captured and displayed in a hexdump. This is programmatically POSTing to the same form you can access at https://libwebsockets.org/testserver in the "POST" tab with file upload. By default the client action occurs using http/2 if your lws was built with `-DLWS_WITH_HTTP2=1`. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-client-post [2018/04/03 13:13:10:7891] USER: LWS minimal http client - POST [2018/04/03 13:13:10:7905] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 on [2018/04/03 13:13:10:7984] NOTICE: created client ssl context for default [2018/04/03 13:13:12:8444] USER: LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER [2018/04/03 13:13:12:8444] USER: LWS_CALLBACK_CLIENT_HTTP_WRITEABLE [2018/04/03 13:13:12:8445] USER: LWS_CALLBACK_CLIENT_HTTP_WRITEABLE [2018/04/03 13:13:12:8445] USER: LWS_CALLBACK_CLIENT_HTTP_WRITEABLE [2018/04/03 13:13:13:1437] USER: LWS_CALLBACK_CLIENT_HTTP_WRITEABLE [2018/04/03 13:13:13:1440] USER: LWS_CALLBACK_CLIENT_HTTP_WRITEABLE [2018/04/03 13:13:13:1440] USER: RECEIVE_CLIENT_HTTP_READ: read 402 [2018/04/03 13:13:13:1441] NOTICE: [2018/04/03 13:13:13:1441] NOTICE: 0000: 3C 68 74 6D 6C 3E 3C 62 6F 64 79 3E 3C 68 31 3E

[2018/04/03 13:13:13:1441] NOTICE: 0010: 46 6F 72 6D 20 72 65 73 75 6C 74 73 20 28 61 66 Form results (af [2018/04/03 13:13:13:1441] NOTICE: 0020: 74 65 72 20 75 72 6C 64 65 63 6F 64 69 6E 67 29 ter urldecoding) [2018/04/03 13:13:13:1441] NOTICE: 0030: 3C 2F 68 31 3E 3C 74 61 62 6C 65 3E 3C 74 72 3E

[2018/04/03 13:13:13:1441] NOTICE: 0040: 3C 74 64 3E 4E 61 6D 65 3C 2F 74 64 3E 3C 74 64 < [2018/04/03 13:13:13:1441] NOTICE: 0070: 74 72 3E 3C 74 64 3E 3C 62 3E 74 65 78 74 3C 2F tr>< [2018/04/03 13:13:13:1442] NOTICE: 00D0: 74 64 3E 4E 55 4C 4C 3C 2F 74 64 3E 3C 2F 74 72 td>NULL [2018/04/03 13:13:13:1442] NOTICE: 0110: 3C 2F 74 72 3E 3C 74 72 3E 3C 74 64 3E 3C 62 3E < [2018/04/03 13:13:13:1442] NOTICE: 0130: 74 64 3E 30 3C 2F 74 64 3E 3C 74 64 3E 4E 55 4C td>0
filena [2018/04/03 13:13:13:1442] NOTICE: 0160: 6D 65 3A 3C 2F 62 3E 20 6D 79 66 69 6C 65 2E 74 me: myfile.t [2018/04/03 13:13:13:1442] NOTICE: 0170: 78 74 2C 20 3C 62 3E 6C 65 6E 67 74 68 3C 2F 62 xt, length 44 [2018/04/03 13:13:13:1442] NOTICE: [2018/04/03 13:13:13:1442] USER: LWS_CALLBACK_COMPLETED_CLIENT_HTTP [2018/04/03 13:13:13:1455] USER: Completed ``` libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-post/libwebsockets.org.cer000066400000000000000000000067521357643561300330640ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFWjCCBEKgAwIBAgISA9x0/oj5PLdW46hsmR82/7ytMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTA5MDcwNzA5NDBaFw0x OTEyMDYwNzA5NDBaMBwxGjAYBgNVBAMTEWxpYndlYnNvY2tldHMub3JnMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxPinIkleLmvEcA/YuBss6ASXVi7g yr6Sss7cB3vTy7Fp8OB2c1N25prHZxVpORAUo0UreiaY2Ws4NFvDaYp08ZffevuC UhThsEJlbkD0uvt7dPapJt9PNJtlxjNFWyvHEy6PijzIaMYDROiStcCJQn7kAew/ Za2+5kNVgKqT+7OXukJEFdSdVZI6QC/npeQlkIrFSq1WVthCGBNJehxxES0hSWzk 0gNVKlkD3/SbkupsfUpe73XiawMtrtsSE7cdnul7VZmiP8I/3sJr1+4/3xZ+DEYg mVB82B0vd08VJYzU7Nf0pz0PWusAmzRoRn81IXkOfBg9ohlSSEoZhHYS7QIDAQAB o4ICZjCCAmIwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr BgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRmKKyGjufWgp7pR2x0tWxG D9G+WTAfBgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcB AQRjMGEwLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlw dC5vcmcwLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlw dC5vcmcvMBwGA1UdEQQVMBOCEWxpYndlYnNvY2tldHMub3JnMEwGA1UdIARFMEMw CAYGZ4EMAQIBMDcGCysGAQQBgt8TAQEBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly9j cHMubGV0c2VuY3J5cHQub3JnMIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHcAdH7a gzGtMxCRIZzOJU9CcMK//V5CIAjGNzV55hB7zFYAAAFtCsWIfgAABAMASDBGAiEA 0H55VqSKV3otHK7uHNbcR0QwoUYtCmeObhsqxzCnmDwCIQD3mtuSKrxTD3oA+Yde nmTgWfFyS4TNgLNEPCJYo2s75gB1ACk8UZZUyDlluqpQ/FgH1Ldvv1h6KXLcpMMM 9OVFR/R4AAABbQrFil4AAAQDAEYwRAIgNSpvz/1JA2aP6fh6ujGNuYfrAvWjlxXo CJtVGe4XaDYCIGmK1/9tl1uQbVD46P5NswnULq06KQmuOrlI3HO4r86HMA0GCSqG SIb3DQEBCwUAA4IBAQBiAlV7wkCsWE99VmZHBmcbZChWyWUHG3LM1hnaQRQjTSYk CIlauCpWzlUd6weuvra85KqBbCYo+1hxbwITI796uAdgtHmBE8nj0VltHwKeSq2s KKiGXBRT7Z7t0VHYSLOlGOVn1auuQFaWBArc0cQ/m1ZsoHvOiHTlKQvVsA4HnIxA CjGY9OOQoh0c36ecbJZ44XKnU9J/OXtDx00aW6QodaZmgMp/OOCghFQUvufkgTUL LZid873/8dJVWjAaj1VdadO1nSbdAfBbeWXy93+vg1aAoig80RoscrzYCaNlwmR7 EO5zWxL3l+xUZogQSJuICgUgNzVB3wjn8HeHGsqt -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj /PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-post/minimal-http-client-post.c000066400000000000000000000176651357643561300337560ustar00rootroot00000000000000/* * lws-minimal-http-client-post * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the a minimal http client using lws and POST. * * It POSTs both form data and a file to the form at * https://libwebsockets.org/testserver/formtest and dumps * the html page received generated by the POST handler. */ #include #include #include static int interrupted, bad = 0, status, count_clients = 1, completed; static struct lws *client_wsi[4]; struct pss { char boundary[32]; char body_part; }; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; char buf[LWS_PRE + 1024], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; uint8_t **up, *uend; uint32_t r; int n; switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); bad = 1; if (++completed == count_clients) lws_cancel_service(lws_get_context(wsi)); break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: for (n = 0; n < count_clients; n++) if (client_wsi[n] == wsi) { client_wsi[n] = NULL; bad |= status != 200; if (++completed == count_clients) /* abort poll wait */ lws_cancel_service(lws_get_context(wsi)); } break; /* ...callbacks related to receiving the result... */ case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: status = lws_http_client_http_response(wsi); lwsl_user("Connected with server response: %d\n", status); break; case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); lwsl_hexdump_notice(in, len); return 0; /* don't passthru */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: n = sizeof(buf) - LWS_PRE; if (lws_http_client_read(wsi, &p, &n) < 0) return -1; return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP\n"); bad |= status != 200; /* * Do this to mark us as having processed the completion * so close doesn't duplicate (with pipelining, completion != * connection close */ for (n = 0; n < count_clients; n++) if (client_wsi[n] == wsi) client_wsi[n] = NULL; if (++completed == count_clients) /* abort poll wait */ lws_cancel_service(lws_get_context(wsi)); break; /* ...callbacks related to generating the POST... */ case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: lwsl_user("LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER\n"); up = (uint8_t **)in; uend = *up + len - 1; /* generate a random boundary string */ lws_get_random(lws_get_context(wsi), &r, sizeof(r)); lws_snprintf(pss->boundary, sizeof(pss->boundary) - 1, "---boundary-%08x", r); n = lws_snprintf(buf, sizeof(buf) - 1, "multipart/form-data; boundary=%s", pss->boundary); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (uint8_t *)buf, n, up, uend)) return 1; /* * Notice because we are sending multipart/form-data we can * usually rely on the server to understand where the form * payload ends without having to give it an overall * content-length (which can be troublesome to compute ahead * of generating the data to send). * * Tell lws we are going to send the body next... */ lws_client_http_body_pending(wsi, 1); lws_callback_on_writable(wsi); break; case LWS_CALLBACK_CLIENT_HTTP_WRITEABLE: lwsl_user("LWS_CALLBACK_CLIENT_HTTP_WRITEABLE\n"); n = LWS_WRITE_HTTP; /* * For a small body like this, we could prepare it in memory and * send it all at once. But to show how to handle, eg, * arbitrary-sized file payloads, or huge form-data fields, the * sending is done in multiple passes through the event loop. */ switch (pss->body_part++) { case 0: /* notice every usage of the boundary starts with -- */ p += lws_snprintf(p, end - p, "--%s\xd\xa" "content-disposition: " "form-data; name=\"text\"\xd\xa" "\xd\xa" "my text field" "\xd\xa", pss->boundary); break; case 1: p += lws_snprintf(p, end - p, "--%s\xd\xa" "content-disposition: form-data; name=\"file\";" "filename=\"myfile.txt\"\xd\xa" "content-type: text/plain\xd\xa" "\xd\xa" "This is the contents of the " "uploaded file.\xd\xa" "\xd\xa", pss->boundary); break; case 2: p += lws_snprintf(p, end - p, "--%s--\xd\xa", pss->boundary); lws_client_http_body_pending(wsi, 0); /* necessary to support H2, it means we will write no * more on this stream */ n = LWS_WRITE_HTTP_FINAL; break; default: /* * We can get extra callbacks here, if nothing to do, * then do nothing. */ return 0; } if (lws_write(wsi, (uint8_t *)start, lws_ptr_diff(p, start), n) != lws_ptr_diff(p, start)) return 1; if (n != LWS_WRITE_HTTP_FINAL) lws_callback_on_writable(wsi); return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "http", callback_http, sizeof(struct pss), 0, }, { NULL, NULL, 0, 0 } }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_client_connect_info i; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* * For LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE * * | LLL_INFO | LLL_PARSER | LLL_HEADER | LLL_EXT | * LLL_CLIENT | LLL_LATENCY | LLL_DEBUG */ ; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http client - POST [-d] [-l] [--h1]\n"); if (lws_cmdline_option(argc, argv, "-m")) count_clients = LWS_ARRAY_SIZE(client_wsi); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + count_clients + 1; #if defined(LWS_WITH_MBEDTLS) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ if (!lws_cmdline_option(argc, argv, "-l")) info.client_ssl_ca_filepath = "./libwebsockets.org.cer"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; i.ssl_connection = LCCSCF_USE_SSL; if (lws_cmdline_option(argc, argv, "-l")) { i.port = 7681; i.address = "localhost"; i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; i.path = "/formtest"; } else { i.port = 443; i.address = "libwebsockets.org"; i.path = "/testserver/formtest"; } i.host = i.address; i.origin = i.address; i.method = "POST"; /* force h1 even if h2 available */ if (lws_cmdline_option(argc, argv, "--h1")) i.alpn = "http/1.1"; i.protocol = protocols[0].name; for (n = 0; n < count_clients; n++) { i.pwsi = &client_wsi[n]; if (!lws_client_connect_via_info(&i)) completed++; } while (n >= 0 && completed != count_clients && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client-post/selftest.sh000077500000000000000000000017311357643561300311230ustar00rootroot00000000000000#!/bin/bash # # $1: path to minimal example binaries... # if lws is built with -DLWS_WITH_MINIMAL_EXAMPLES=1 # that will be ./bin from your build dir # # $2: path for logs and results. The results will go # in a subdir named after the directory this script # is in # # $3: offset for test index count # # $4: total test count # # $5: path to ./minimal-examples dir in lws # # Test return code 0: OK, 254: timed out, other: error indication . $5/selftests-library.sh COUNT_TESTS=8 dotest $1 $2 warmcat dotest $1 $2 warmcat-h1 --h1 dotest $1 $2 warmcat-m -m dotest $1 $2 warmcat-m-h1 -m --h1 spawn "" $5 $1/libwebsockets-test-server -s dotest $1 $2 localhost -l spawn $SPID $5 $1/libwebsockets-test-server -s dotest $1 $2 localhost-h1 -l --h1 spawn $SPID $5 $1/libwebsockets-test-server -s dotest $1 $2 localhost-m -l -m spawn $SPID $5 $1/libwebsockets-test-server -s dotest $1 $2 localhost-m-h1 -l -m --h1 kill $SPID 2>/dev/null wait $SPID 2>/dev/null exit $FAILS libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client/000077500000000000000000000000001357643561300257465ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client/CMakeLists.txt000066400000000000000000000040031357643561300305030ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-client) set(SRCS minimal-http-client.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif()libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client/README.md000066400000000000000000000062231357643561300272300ustar00rootroot00000000000000# lws minimal http client The application goes to either https://warmcat.com or https://localhost:7681 (with `-l` option) and receives the page data. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -l| Connect to https://localhost:7681 and accept selfsigned cert --h1|Specify http/1.1 only using ALPN, rejects h2 even if server supports it --server |set server name to connect to -k|Apply tls option LCCSCF_ALLOW_INSECURE -j|Apply tls option LCCSCF_ALLOW_SELFSIGNED -m|Apply tls option LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK -e|Apply tls option LCCSCF_ALLOW_EXPIRED ``` $ ./lws-minimal-http-client [2018/03/04 14:43:20:8562] USER: LWS minimal http client [2018/03/04 14:43:20:8571] NOTICE: Creating Vhost 'default' port -1, 1 protocols, IPv6 on [2018/03/04 14:43:20:8616] NOTICE: created client ssl context for default [2018/03/04 14:43:20:8617] NOTICE: lws_client_connect_2: 0x1814dc0: address warmcat.com [2018/03/04 14:43:21:1496] NOTICE: lws_client_connect_2: 0x1814dc0: address warmcat.com [2018/03/04 14:43:22:0154] NOTICE: lws_client_interpret_server_handshake: incoming content length 26520 [2018/03/04 14:43:22:0154] NOTICE: lws_client_interpret_server_handshake: client connection up [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3022] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3022] USER: RECEIVE_CLIENT_HTTP_READ: read 974 [2018/03/04 14:43:22:3022] NOTICE: lws_http_client_read: transaction completed says -1 [2018/03/04 14:43:23:3042] USER: Completed ``` libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client/minimal-http-client.c000066400000000000000000000121301357643561300317660ustar00rootroot00000000000000/* * lws-minimal-http-client * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the a minimal http client using lws. * * It visits https://warmcat.com/ and receives the html page there. You * can dump the page data by changing the #if 0 below. */ #include #include #include static int interrupted, bad = 1, status; static struct lws *client_wsi; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); client_wsi = NULL; break; case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: status = lws_http_client_http_response(wsi); lwsl_user("Connected with server response: %d\n", status); break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); #if 0 /* enable to dump the html */ { const char *p = in; while (len--) if (*p < 0x7f) putchar(*p++); else putchar('.'); } #endif return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP\n"); client_wsi = NULL; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: client_wsi = NULL; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "http", callback_http, 0, 0, }, { NULL, NULL, 0, 0 } }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_client_connect_info i; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* * For LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE * * | LLL_INFO | LLL_PARSER | LLL_HEADER | LLL_EXT | * LLL_CLIENT | LLL_LATENCY | LLL_DEBUG */ ; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http client [-d] [-l] [--h1]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; #if defined(LWS_WITH_MBEDTLS) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./warmcat.com.cer"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; if (!lws_cmdline_option(argc, argv, "-n")) i.ssl_connection = LCCSCF_USE_SSL; if (lws_cmdline_option(argc, argv, "-l")) { i.port = 7681; i.address = "localhost"; i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; } else { i.port = 443; i.address = "warmcat.com"; } if (lws_cmdline_option(argc, argv, "--h1")) i.alpn = "http/1.1"; if ((p = lws_cmdline_option(argc, argv, "-p"))) i.port = atoi(p); if (lws_cmdline_option(argc, argv, "-j")) i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; if (lws_cmdline_option(argc, argv, "-k")) i.ssl_connection |= LCCSCF_ALLOW_INSECURE; if (lws_cmdline_option(argc, argv, "-m")) i.ssl_connection |= LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK; if (lws_cmdline_option(argc, argv, "-e")) i.ssl_connection |= LCCSCF_ALLOW_EXPIRED; if ((p = lws_cmdline_option(argc, argv, "--server"))) i.address = p; i.path = "/"; i.host = i.address; i.origin = i.address; i.method = "GET"; i.protocol = protocols[0].name; i.pwsi = &client_wsi; lws_client_connect_via_info(&i); while (n >= 0 && client_wsi && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client/selftest.sh000077500000000000000000000014771357643561300301470ustar00rootroot00000000000000#!/bin/bash # # $1: path to minimal example binaries... # if lws is built with -DLWS_WITH_MINIMAL_EXAMPLES=1 # that will be ./bin from your build dir # # $2: path for logs and results. The results will go # in a subdir named after the directory this script # is in # # $3: offset for test index count # # $4: total test count # # $5: path to ./minimal-examples dir in lws # # Test return code 0: OK, 254: timed out, other: error indication . $5/selftests-library.sh COUNT_TESTS=4 dotest $1 $2 warmcat dotest $1 $2 warmcat-h1 --h1 spawn "" $5/http-server/minimal-http-server-tls $1/lws-minimal-http-server-tls dotest $1 $2 localhost -l spawn $SPID $5/http-server/minimal-http-server-tls $1/lws-minimal-http-server-tls dotest $1 $2 localhost-h1 -l --h1 kill $SPID 2>/dev/null wait $SPID 2>/dev/null exit $FAILS libwebsockets-3.2.1/minimal-examples/http-client/minimal-http-client/warmcat.com.cer000066400000000000000000000067361357643561300306700ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFUDCCBDigAwIBAgISA4mJfIm3iCGbU9+o8YQa+4nUMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTA5MDcwNzA5MjNaFw0x OTEyMDYwNzA5MjNaMBYxFDASBgNVBAMTC3dhcm1jYXQuY29tMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwnEoH9JW3GvpadpxHGZPb5wv1Q6KfAIMWtdq YCOfotFxaYULuzHVxmrTTgmEqJr+eBqUBkXKmGuRR/9UipOmTu5j02qFyWHotFdF ZGyp//8z+Rle9Qt1nL68oNIZLDtWkybh5x00b1uo4eyEszXUaa0aLqKP3lH7Q4jI aSVARZ8snrJR640Gp3ByudvNTYkGz469bpWzRC/8wSNtzzY02DvHs1GxQx9tMXw+ BbtUxeP7lpYFKEFBjgZaIKLv+4g8ItJIuO7gMSzG2JfpQHxdhrlhxpx7dsaMUcyM nnYXysNL5JG3KEMhkxbtdpCaEQ8jLSPbl/rnF/+mgce+lSjMuQIDAQABo4ICYjCC Al4wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD AjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSI9ai12zLFeNTEDHKI9Ghkqcpa2TAf BgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcBAQRjMGEw LgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlwdC5vcmcw LwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlwdC5vcmcv MBYGA1UdEQQPMA2CC3dhcm1jYXQuY29tMEwGA1UdIARFMEMwCAYGZ4EMAQIBMDcG CysGAQQBgt8TAQEBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5 cHQub3JnMIIBBgYKKwYBBAHWeQIEAgSB9wSB9ADyAHcAY/Lbzeg7zCzPC3KEJ1dr M6SNYXePvXWmOLHHaFRL2I0AAAFtCsVHHAAABAMASDBGAiEAy0q1cR4VwPL3iviL cBWN67kjJRXk+DwhodmeoM3kb3gCIQC2soAHFs0Umo+0RNdFrL41+hMuidh2cXbb Ovc6nh5tOQB3AOJpS64m6OlACeiGG7Y7g9Q+5/50iPukjyiTAZ3d8dv+AAABbQrF R48AAAQDAEgwRgIhANqKQm4t9by263CJ7/DLOaZCjtcK29KgJjPwhv08UMn1AiEA h35nGTASR8/E7xz+56ZUleqD7U1ABFgWZRZskIzsFO8wDQYJKoZIhvcNAQELBQAD ggEBADDJBVbKe2LPHmi8k2vxErB3Y0Ty+3gwgPEXKYtEvQ7tos89eE+QmOXAzH5J GwRarFf7kzmKeJv04tMebiEtshpap47oJfxCxfrtpja8hP8Cdu/v/Ae6eEzu3yet 0N08GJdxQKfgCFaoGUptbaF2RCIZS12SVcX4TPpdP+xaiZdmIx4dGM6tReQ8+y8B 10b4Hi2+d/zW0W1z6+FAemU6yleWriJDUik5oas9XZF5LAAMDb/WgF5eIB6P9CUG LuAO8lWlk9nBgXvMLTxZ74SJb17H4kFEIrIjvABNshz5gBW8xw9nfr5YIfANtwEj BDsq06Df3UORYVs/j3T97gPAEZ4= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj /PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/http-server/000077500000000000000000000000001357643561300221175ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/README.md000066400000000000000000000033711357643561300234020ustar00rootroot00000000000000|Example|Demonstrates| ---|--- minimal-http-server-basicauth|Shows how to protect a mount using a password file and basic auth minimal-http-server-custom-headers|Shows how to query custom headers that lws doesn't already know minimal-http-server-deaddrop|Shows how to use the deaddrop drag and drop file upload + sharing plugin minimal-http-server-dynamic|Serves both static and dynamically generated http content minimal-http-server-eventlib-foreign|Demonstrates integrating lws with a foreign event library minimal-http-server-eventlib-demos|Using the demo plugins with event libraries minimal-http-server-eventlib|Same as minimal-http-server but works with a supported event library minimal-http-server-form-get|Process a GET form minimal-http-server-form-post-file|Process a multipart POST form with file transfer minimal-http-server-form-post|Process a POST form (no file transfer) minimal-http-server-fulltext-search|Demonstrates using lws Fulltext Search minimal-http-server-mimetypes|Shows how to add support for additional mimetypes at runtime minimal-http-server-multivhost|Same as minimal-http-server but three different vhosts minimal-http-server-proxy|Reverse Proxy minimal-http-server-smp|Multiple service threads minimal-http-server-sse-ring|Server Side Events with ringbuffer and threaded event sources minimal-http-server-sse|Simple Server Side Events minimal-http-server-tls-80|Serves a directory over http/1 or http/2 with TLS (SSL), custom 404 handler, redirect to https on port 80 minimal-http-server-tls-mem|Serves using TLS with the cert and key provided as memory buffers instead of files minimal-http-server-tls|Serves a directory over http/1 or http/2 with TLS (SSL), custom 404 handler minimal-http-server|Serves a directory over http/1, custom 404 handler libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-basicauth/000077500000000000000000000000001357643561300277675ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-basicauth/CMakeLists.txt000066400000000000000000000040251357643561300325300ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-basicauth) set(SRCS minimal-http-server-basicauth.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-basicauth/README.md000066400000000000000000000015441357643561300312520ustar00rootroot00000000000000# lws minimal http server basic auth This demonstrates how to protect a mount using a password file outside of the mount itself. The demo has two mounts, a normal one at / and one protected by basic auth at /secret. The file at ./ba-passwords contains valid user:password combinations. ## Discovering the authenticated user After a successful authentication, the `WSI_TOKEN_HTTP_AUTHORIZATION` token contains the authenticated username. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-basic-auth [2018/04/19 08:40:05:1333] USER: LWS minimal http server basic auth | visit http://localhost:7681 [2018/04/19 08:40:05:1333] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off ``` Visit http://localhost:7681, and follow the link there to the secret area. Give your browser "user" and "password" as the credentials. libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-basicauth/ba-passwords000066400000000000000000000000161357643561300323140ustar00rootroot00000000000000user:password minimal-http-server-basicauth.c000066400000000000000000000062471357643561300357350ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-basicauth/* * lws-minimal-http-server-basicauth * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server with a second mount that * is protected using a password file and basic auth. * * To keep it simple, it serves the static stuff from the subdirectory * "./mount-origin" of the directory it was started in. * * You can change that by changing mount.origin below. */ #include #include #include #include static int interrupted; /* override the default mount for /secret in the URL space */ static const struct lws_http_mount mount_secret = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/secret", /* mountpoint URL */ /* .origin */ "./mount-secret-origin", /* .def */ "index.html", /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* dynamic */ /* .mountpoint_len */ 7, /* char count */ /* .basic_auth_login_file */ "./ba-passwords", }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ &mount_secret, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server basic auth | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-basicauth/mount-origin/000077500000000000000000000000001357643561300324165ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-basicauth/mount-origin/404.html000066400000000000000000000002271357643561300336140ustar00rootroot00000000000000

404

Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761357643561300344720ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-basicauth/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000015241357643561300343360ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-basicauth/mount-origin
Hello from the minimal http server basic auth example.

This is a static page served from ./mount-origin/index.html.

Stuff down /secret in the URL space is protected by Basic Auth.
Your browser will ask for a username / password combination, and
lws will check it against ./ba-passwords, which contains a list of
"username:password" one per line.

The example content for ba-passwords is literally "user:password".
Click on the link into the protected area of the URL space below
and give your browser the credentials "user" and "password".

/secret libwebsockets.org-logo.svg000066400000000000000000001403321357643561300374470ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-basicauth/mount-origin strict-csp.svg000066400000000000000000000302361357643561300351570ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-basicauth/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-basicauth/mount-secret-origin/000077500000000000000000000000001357643561300337015ustar00rootroot00000000000000index.html000066400000000000000000000003341357643561300356170ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-basicauth/mount-secret-origin
This is the big secret protected by basic auth. libwebsockets.org-logo.svg000066400000000000000000001403321357643561300407320ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-basicauth/mount-secret-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-custom-headers/000077500000000000000000000000001357643561300307475ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-custom-headers/CMakeLists.txt000066400000000000000000000041321357643561300335070ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-custom-headers) set(SRCS minimal-http-server-custom-headers.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CUSTOM_HEADERS 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-custom-headers/README.md000066400000000000000000000007331357643561300322310ustar00rootroot00000000000000# lws minimal http server dynamic content ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-dynamic [2018/03/20 10:24:24:7099] USER: LWS minimal http server dynamic | visit http://localhost:7681 [2018/03/20 10:24:24:7099] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off ``` Visit http://localhost:7681, which is all static content. Click on the link to /dyn/anything, this opens a new tab with dynamicly-produced content. localhost-100y.cert000066400000000000000000000040721357643561300342310ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-custom-headers-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- localhost-100y.key000066400000000000000000000063101357643561300340610ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-custom-headers-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-custom-headers.c000066400000000000000000000130741357643561300376710ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-custom-headers/* * lws-minimal-http-server-custom-headers * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server that can produce dynamic http * content as well as static content. * * To keep it simple, it serves the static stuff from the subdirectory * "./mount-origin" of the directory it was started in. * * You can change that by changing mount.origin below. */ #include #include #include #include static int interrupted; struct pss { char result[128 + LWS_PRE]; int len; }; /* * This just lets us override LWS_CALLBACK_HTTP handling before passing it * and everything else to the default handler. */ static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { uint8_t buf[LWS_PRE + 2048], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - LWS_PRE - 1]; struct pss *pss = (struct pss *)user; char value[32], *pr = &pss->result[LWS_PRE]; int n, e = sizeof(pss->result) - LWS_PRE; switch (reason) { case LWS_CALLBACK_HTTP: /* * LWS doesn't have the "DNT" header built-in. But we can * query it using the "custom" versions of the header apis. * * You can set your modern browser to issue DNT, look in the * privacy settings of your browser. */ pss->len = 0; n = lws_hdr_custom_length(wsi, "dnt:", 4); if (n < 0) pss->len = lws_snprintf(pr, e, "%s: DNT header not found\n", __func__); else { pss->len = lws_snprintf(pr, e, "%s: DNT length %d
", __func__, n); n = lws_hdr_custom_copy(wsi, value, sizeof(value), "dnt:", 4); if (n < 0) pss->len += lws_snprintf(pr + pss->len, e - pss->len, "%s: unable to get DNT value\n", __func__); else pss->len += lws_snprintf(pr + pss->len , e - pss->len, "%s: DNT value '%s'\n", __func__, value); } lwsl_user("%s\n", pr); if (lws_add_http_common_headers(wsi, HTTP_STATUS_OK, "text/html", pss->len, &p, end)) return 1; if (lws_finalize_write_http_header(wsi, start, &p, end)) return 1; /* write the body separately */ lws_callback_on_writable(wsi); return 0; case LWS_CALLBACK_HTTP_WRITEABLE: strcpy((char *)start, "hello"); if (lws_write(wsi, (uint8_t *)pr, pss->len, LWS_WRITE_HTTP_FINAL) != pss->len) return 1; if (lws_http_transaction_completed(wsi)) return -1; return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "http", callback_http, sizeof(struct pss), 0 }, { NULL, NULL, 0, 0 } /* terminator */ }; static const struct lws_http_mount mount_dyn = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/dyn", /* mountpoint URL */ /* .origin */ NULL, /* protocol */ /* .def */ NULL, /* .protocol */ "http", /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_CALLBACK, /* dynamic */ /* .mountpoint_len */ 4, /* char count */ /* .basic_auth_login_file */ NULL, }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ &mount_dyn, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server custom headers | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; /* for testing ah queue, not useful in real world */ if (lws_cmdline_option(argc, argv, "--ah1")) info.max_http_header_pool = 1; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* http on 7681 */ info.port = 7681; info.protocols = protocols; info.mounts = &mount; info.vhost_name = "http"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create tls vhost\n"); goto bail; } /* https on 7682 */ info.port = 7682; info.error_document_404 = "/404.html"; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; info.vhost_name = "https"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create tls vhost\n"); goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-custom-headers/mount-origin/000077500000000000000000000000001357643561300333765ustar00rootroot00000000000000404.html000066400000000000000000000002261357643561300345140ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-custom-headers/mount-origin

404

Sorry, that file doesn't exist. error.css000066400000000000000000000000001357643561300351500ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-custom-headers/mount-originfavicon.ico000066400000000000000000000025761357643561300354520ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-custom-headers/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000011571357643561300353200ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-custom-headers/mount-origin
Hello from the minimal http server custom headers example.

The idea is it will tell you what your browser sent for DNT, a header lws doesn't already know.

At the moment the custom header api only works on h1.

Show DNT header using h1 over http
Show DNT header using h1 (h2 if enabled) over https
libwebsockets.org-logo.svg000066400000000000000000001403321357643561300404270ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-custom-headers/mount-origin strict-csp.svg000066400000000000000000000302361357643561300361370ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-custom-headers/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/000077500000000000000000000000001357643561300276065ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/CMakeLists.txt000066400000000000000000000045221357643561300323510ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-deaddrop) set(SRCS minimal-http-server-deaddrop.c) # NOTE... if you are building this standalone, you must point LWS_PLUGINS_DIR # to the lws plugins dir so it can pick up the plugin source. Eg, # cmake . -DLWS_PLUGINS_DIR=~/libwebsockets/plugins # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (LWS_PLUGINS_DIR) include_directories(${LWS_PLUGINS_DIR}) endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/README.md000066400000000000000000000040711357643561300310670ustar00rootroot00000000000000# lws minimal http server deaddrop This demonstrates how you can leverage the lws deaddrop plugin to make a secure, modern html5 file upload and sharing application. The demo is protected by basic auth credentials defined in the file at ./ba-passwords - by default the credentials are user: user1, password: password; and user: user2, password: password again. You can upload files and have them appear on a shared, downloadable list that is dynamically updated to all clients open on the page. Only the authenticated uploader is able to delete the files he uploaded. Multiple simultaneous ongoing file uploads are supported. ## build To build this standalone, you must tell cmake where the lws source tree ./plugins directory can be found, since it relies on including the source of the raw-proxy plugin. ``` $ cmake . -DLWS_PLUGINS_DIR=~/libwebsockets/plugins && make ``` ## usage ``` $ ./lws-minimal-http-server-deaddrop [2018/12/01 10:31:09:7108] USER: LWS minimal http server deaddrop | visit https://localhost:7681 [2018/12/01 10:31:09:8511] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/12/01 10:31:09:8522] NOTICE: Using SSL mode [2018/12/01 10:31:10:0755] NOTICE: SSL ECDH curve 'prime256v1' [2018/12/01 10:31:10:2562] NOTICE: lws_tls_client_create_vhost_context: doing cert filepath localhost-100y.cert [2018/12/01 10:31:10:2581] NOTICE: Loaded client cert localhost-100y.cert [2018/12/01 10:31:10:2583] NOTICE: lws_tls_client_create_vhost_context: doing private key filepath [2018/12/01 10:31:10:2593] NOTICE: Loaded client cert private key localhost-100y.key [2018/12/01 10:31:10:2596] NOTICE: created client ssl context for default [2018/12/01 10:31:10:5290] NOTICE: deaddrop: vh default, upload dir ./uploads, max size 10000000 [2018/12/01 10:31:10:5376] NOTICE: vhost default: cert expiry: 730203d ... ``` Visit https://localhost:7681, and follow the link there to the secret area. Give your browser "user1" and "password" as the credentials. For testing to confirm what a different user sees, you can also log in as "user2" and "password". libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/ba-passwords000066400000000000000000000000361357643561300321350ustar00rootroot00000000000000user1:password user2:password libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/localhost-100y.cert000066400000000000000000000040721357643561300331470ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/localhost-100y.key000066400000000000000000000063101357643561300327770ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-deaddrop.c000066400000000000000000000116101357643561300353610ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/* * lws-minimal-http-server-deaddrop * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates how you can leverage the lws deaddrop plugin to make a * secure, modern html5 file upload and sharing application. * * Because the guts are in a plugin, you can avoid all this setup by using the * plugin from lwsws and do the config in JSON. */ #include #include #include #include #define LWS_PLUGIN_STATIC #include "../plugins/deaddrop/protocol_lws_deaddrop.c" static struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_DEADDROP, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted; /* * teach the /get mount how to present various filetypes to the client... * lws won't serve files it doesn't know the mimetype for as a security * measure. */ static struct lws_protocol_vhost_options em3 = { NULL, NULL, ".zip", "application/zip" }, em2 = { &em3, NULL, ".pdf", "application/pdf" }, extra_mimetypes = { &em2, NULL, ".tar.gz", "application/x-gzip" }; /* wire up /upload URLs to the plugin (protected by basic auth) */ static const struct lws_http_mount mount_upload = { /* .mount_next */ NULL, /* .mountpoint */ "/upload", /* mountpoint URL */ /* .origin */ "lws-deaddrop", /* .def */ "", /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_CALLBACK, /* .mountpoint_len */ 7, /* char count */ /* .basic_auth_login_file */ "./ba-passwords", }; /* wire up /get URLs to the upload directory (protected by basic auth) */ static const struct lws_http_mount mount_get = { /* .mount_next */ &mount_upload, /* linked-list "next" */ /* .mountpoint */ "/get", /* mountpoint URL */ /* .origin */ "./uploads", /* .def */ "", /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ &extra_mimetypes, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* dynamic */ /* .mountpoint_len */ 4, /* char count */ /* .basic_auth_login_file */ "./ba-passwords", }; /* wire up / to serve from ./mount-origin (protected by basic auth) */ static const struct lws_http_mount mount = { /* .mount_next */ &mount_get, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ "./ba-passwords", }; /* pass config options to the deaddrop plugin using pvos */ static struct lws_protocol_vhost_options pvo3 = { /* make the wss also require to pass basic auth */ NULL, NULL, "basic-auth", "./ba-passwords" }, pvo2 = { &pvo3, NULL, "max-size", "10000000" }, pvo1 = { &pvo2, NULL, "upload-dir", "./uploads" /* would be an absolute path */ }, pvo = { NULL, /* "next" pvo linked-list */ &pvo1, /* "child" pvo linked-list */ "lws-deaddrop", /* protocol name we belong to on this vhost */ "" /* ignored */ }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server deaddrop | visit https://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.pvo = &pvo; info.protocols = protocols; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/mount-origin/000077500000000000000000000000001357643561300322355ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/mount-origin/404.html000066400000000000000000000002271357643561300334330ustar00rootroot00000000000000

404

Sorry, that file doesn't exist. deaddrop.css000066400000000000000000000127351357643561300344620ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/mount-origin.td { padding: 8px } .h1 { } .dd-fileinfo { font-size: 8pt; } table td { display: table-cell; vertical-align: top; background-color: rgba(247, 247, 232, 0.6); text-align: center } table { border: 2px solid #ccc; padding: 4px; border-radius: 12px; transition: background-color 0.5s ease; } table.nb { border: 0px; border-radius: 0px; transition: opacity 0.5s; } table.noconn { background-color: #ddd; } div { transition: opacity 0.5s; } div.da { padding-left: 20px; padding-right:20px; } div.trot { animation: scale 0.5s linear infinite; } div.uplbox { padding-bottom: 8px; } div.disa { opacity: 0.2; } td.ogn { text-align:left; font-size: 8pt; padding-left: 4px; padding-right: 4px;} td.dow { text-align:left; font-size: 9pt; padding-left: 4px; padding-right: 4px;} td.r { text-align: right; } td.err { color: red; font-weight: bold; } td.vm { display: table-cell; vertical-align: middle; padding-top: 12px; padding-bottom: 12px; } h3 { font-size: 12pt; margin-bottom: 6px; } span { font-size: 9pt; } a { font-size: 9pt; } input.ubtn { font-size: 16pt; margin-top: 4px; text-align: center } img.working { display: inline-block; float:left; background: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKICAgICB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzMHB4IiB2aWV3Qm94PSIwIDAgMjQgMzAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUwIDUwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICA8cmVjdCB4PSIwIiB5PSIxMCIgd2lkdGg9IjQiIGhlaWdodD0iMTAiIGZpbGw9IiMzMzMiIG9wYWNpdHk9IjAuMiI+CiAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIwLjI7IDE7IC4yIiBiZWdpbj0iMHMiIGR1cj0iMC42cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+CiAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImhlaWdodCIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyAyMDsgMTAiIGJlZ2luPSIwcyIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ieSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyA1OyAxMCIgYmVnaW49IjBzIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogICAgPC9yZWN0PgogICAgPHJlY3QgeD0iOCIgeT0iMTAiIHdpZHRoPSI0IiBoZWlnaHQ9IjEwIiBmaWxsPSIjMzMzIiAgb3BhY2l0eT0iMC4yIj4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjAuMjsgMTsgLjIiIGJlZ2luPSIwLjE1cyIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iaGVpZ2h0IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIHZhbHVlcz0iMTA7IDIwOyAxMCIgYmVnaW49IjAuMTVzIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJ5IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIHZhbHVlcz0iMTA7IDU7IDEwIiBiZWdpbj0iMC4xNXMiIGR1cj0iMC42cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+CiAgICA8L3JlY3Q+CiAgICA8cmVjdCB4PSIxNiIgeT0iMTAiIHdpZHRoPSI0IiBoZWlnaHQ9IjEwIiBmaWxsPSIjMzMzIiAgb3BhY2l0eT0iMC4yIj4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjAuMjsgMTsgLjIiIGJlZ2luPSIwLjNzIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJoZWlnaHQiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIxMDsgMjA7IDEwIiBiZWdpbj0iMC4zcyIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ieSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyA1OyAxMCIgYmVnaW49IjAuM3MiIGR1cj0iMC42cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+CiAgICA8L3JlY3Q+Cjwvc3ZnPg=="); width:0px; height:0px; cursor:pointer; padding:0.6em 1em; background-repeat: no-repeat; vertical-align:middle; color: rgba(0, 0, 0, 0); } img.delbtn { display: inline-block; float:left; background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNC4yMTcxMzMgMzQuMTQ0MjQ5IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KCTxkZWZzPgoJCTxyYWRpYWxHcmFkaWVudCBpZD0iYSIgY3g9IjEzNTguNSIgY3k9Ijk3Ny43MiIgcj0iNC4xMTYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS41MDM1IDAgMCAyLjQ5NDQgLTI1NzcuNCAtMTgyMy44KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KCQkJPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KCQk8L3JhZGlhbEdyYWRpZW50PgoJCTxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjEzNjYuMyIgeDI9IjEzNDQuOCIgeTE9Ijk3OC4xOSIgeTI9Ijk1OC43MyIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtMjE3NCAtMTA3Ni4xKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSIjOWM5NzlkIiBvZmZzZXQ9IjAiLz4KCQkJPHN0b3Agc3RvcC1jb2xvcj0iI2Y0ZmVmMyIgc3RvcC1vcGFjaXR5PSIuNzQwMTYiIG9mZnNldD0iMSIvPgoJCTwvbGluZWFyR3JhZGllbnQ+Cgk8L2RlZnM+Cgk8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4MzQuMjkgMTIzLjc1KSI+CgkJPGcgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KCQkJPGNpcmNsZSBjeD0iLTgxNy4yMiIgY3k9Ii0xMDYuNjgiIHI9IjE2LjA5IiBmaWxsPSJ1cmwoI2IpIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS45NjUiLz4KCQkJPHBhdGggZD0ibS04MjUuNjctMTE0LjcxYzE3LjMzIDE3LjMzIDE3IDE2Ljk5OSAxNyAxNi45OTkiIGZpbGw9IiNmNTUiIHN0cm9rZT0iI2EwMCIgc3Ryb2tlLXdpZHRoPSIxLjY2NSIvPgoJCQk8cGF0aCBkPSJtLTgwOC45Ni0xMTQuNjFjLTE3LjMzIDE3LjMzLTE3IDE2Ljk5OS0xNyAxNi45OTkiIGZpbGw9IiNmNTUiIHN0cm9rZT0iI2EwMCIgc3Ryb2tlLXdpZHRoPSIxLjY2NSIvPgoJCTwvZz4KCQk8ZWxsaXBzZSB0cmFuc2Zvcm09InJvdGF0ZSg1NS44ODUpIiBjeD0iLTUzNC45NiIgY3k9IjYxNS4wNyIgcng9IjYuMTg4MyIgcnk9IjEwLjI2NyIgZmlsbD0idXJsKCNhKSIvPgoJPC9nPgo8L3N2Zz4="); width:0px; height:0px; cursor:pointer; padding:0.45em; background-repeat: no-repeat; vertical-align:middle; color: rgba(0, 0, 0, 0); } @keyframes scale { 50% { opacity: 0.5; transform:scale(1.1) rotate(2deg); } } deaddrop.js000066400000000000000000000146451357643561300343100ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/mount-origin(function() { var server_max_size = 0, ws; function san(s) { if (!s) return ""; return s.replace(/&/g, "&"). replace(/\/g, ">"). replace(/\"/g, """). replace(/%/g, "%"); } function lws_urlencode(s) { return encodeURI(s).replace(/@/g, "%40"); } function trim(num) { var s = num.toString(); if (!s.indexOf(".")) return s; while (s.length && s[s.length - 1] === "0") s = s.substring(0, s.length - 1); if (s[s.length - 1] === ".") s = s.substring(0, s.length - 1); return s; } function humanize(n) { if (n < 1024) return n + "B"; if (n < 1024 * 1024) return trim((n / 1024).toFixed(2)) + "KiB"; if (n < 1024 * 1024 * 1024) return trim((n / (1024 * 1024)).toFixed(2)) + "MiB"; return trim((n / (1024 * 1024 * 1024)).toFixed(2)) + "GiB"; } function da_enter(e) { var da = document.getElementById("da"); e.preventDefault(); da.classList.add("trot"); } function da_leave(e) { var da = document.getElementById("da"); e.preventDefault(); da.classList.remove("trot"); } function da_over(e) { var da = document.getElementById("da"); e.preventDefault(); da.classList.add("trot"); } function clear_errors() { var t = document.getElementById("ongoing"); for (n = 0; n < t.rows.length; n++) if (t.rows[n].cells[0].classList.contains("err")) t.deleteRow(n); } function do_upload(file) { var formData = new FormData(); var t = document.getElementById("ongoing"); formData.append("file", file); var row = t.insertRow(0), c1 = row.insertCell(0), c2 = row.insertCell(1), c3 = row.insertCell(2); c1.classList.add("ogn"); c1.classList.add("r"); if (file.size > server_max_size) { c1.innerHTML = "Too Large"; c1.classList.add("err"); } else c1.innerHTML = ""; c2.classList.add("ogn"); c2.classList.add("r"); c2.innerHTML = humanize(file.size); c3.classList.add("ogn"); c3.innerHTML = file.name; if (file.size > server_max_size) return; fetch("upload/" + lws_urlencode(file.name), { method: "POST", body: formData }) .then((e) => { /* this just means we got a response code */ var us = e.url.split("/"), ul = us[us.length - 1], n; for (n = 0; n < t.rows.length; n++) if (ul === lws_urlencode( t.rows[n].cells[2].textContent)) { if (e.ok === true) { t.deleteRow(n); } else { t.rows[n].cells[0].textContent = "Failed " + san(e.status.toString()); t.rows[n].cells[0]. classList.add("err"); } break; } }) .catch((e) => { var us = e.url.split("/"), ul = us[us.length - 1], n; for (n = 0; n < t.rows.length; n++) if (ul === lws_urlencode( t.rows[n].cells[2].textContent)) { t.rows[n].cells[0] = "FAIL"; break; } }); } function da_drop(e) { var da = document.getElementById("da"); e.preventDefault(); da.classList.remove("trot"); clear_errors(); ([...e.dataTransfer.files]).forEach(do_upload); } function upl_button(e) { var fi = document.getElementById("file"), da = document.getElementById("da"); clear_errors(); e.preventDefault(); ([...fi.files]).forEach(do_upload); } function body_drop(e) { e.preventDefault(); } function inp() { var fi = document.getElementById("file"), upl = document.getElementById("upl"); console.log("inp"); upl.disabled = !fi.files.length; } function delfile(e) { e.stopPropagation(); e.preventDefault(); ws.send("{\"del\":\"" + decodeURI(e.target.getAttribute("file")) + "\"}"); } function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { if (typeof MozWebSocket != "undefined") return new MozWebSocket(urlpath, protocol); return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var da = document.getElementById("da"), fi = document.getElementById("file"), upl = document.getElementById("upl"); da.addEventListener("dragenter", da_enter, false); da.addEventListener("dragleave", da_leave, false); da.addEventListener("dragover", da_over, false); da.addEventListener("drop", da_drop, false); upl.addEventListener("click", upl_button, false); fi.addEventListener("change", inp, false); window.addEventListener("dragover", body_drop, false); window.addEventListener("drop", body_drop, false); ws = new_ws(get_appropriate_ws_url(""), "lws-deaddrop"); try { ws.onopen = function() { var dd = document.getElementById("ddrop"), da = document.getElementById("da"); dd.classList.remove("noconn"); da.classList.remove("disa"); }; ws.onmessage = function got_packet(msg) { var j = JSON.parse(msg.data), s = "", n, t = document.getElementById("dd-list"); server_max_size = j.max_size; document.getElementById("size").innerHTML = "Server maximum file size " + humanize(j.max_size); s += "
NameLength [2018/04/03 13:13:13:1441] NOTICE: 0060: 56 61 6C 75 65 3C 2F 74 64 3E 3C 2F 74 72 3E 3C Value
text13my text fi [2018/04/03 13:13:13:1441] NOTICE: 00A0: 65 6C 64 3C 2F 74 64 3E 3C 2F 74 72 3E 3C 74 72 eld
send [2018/04/03 13:13:13:1441] NOTICE: 00C0: 3C 2F 74 64 3E 3C 74 64 3E 30 3C 2F 74 64 3E 3C 0
file [2018/04/03 13:13:13:1442] NOTICE: 00F0: 3C 2F 62 3E 3C 2F 74 64 3E 3C 74 64 3E 30 3C 2F 0NULL
[2018/04/03 13:13:13:1442] NOTICE: 0120: 75 70 6C 6F 61 64 3C 2F 62 3E 3C 2F 74 64 3E 3C uploadNUL [2018/04/03 13:13:13:1442] NOTICE: 0140: 4C 3C 2F 74 64 3E 3C 2F 74 72 3E 3C 2F 74 61 62 L
"; for (n = 0; n < j.files.length; n++) { var date = new Date(j.files[n].mtime * 1000); s += ""; } s += "
" + humanize(j.files[n].size) + "" + date.toDateString() + " " + date.toLocaleTimeString() + ""; if (j.files[n].yours === 1) s += ""; else s += " "; s += "" + san(j.files[n].name) + "
"; t.innerHTML = s; for (n = 0; n < j.files.length; n++) { var d = document.getElementById("d" + n); if (d) d.addEventListener("click", delfile, false); } }; ws.onclose = function() { var dd = document.getElementById("ddrop"), da = document.getElementById("da"); dd.classList.add("noconn"); da.classList.add("disa"); }; } catch(exception) { alert("

Error " + exception); } }); }()); libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/mount-origin/drop.svg000066400000000000000000000463171357643561300337350ustar00rootroot00000000000000 favicon.ico000066400000000000000000000025761357643561300343110ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000020261357643561300341530ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/mount-origin  

...or select files to upload:



libwebsockets.org-logo.svg000066400000000000000000001403321357643561300372660ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/mount-origin strict-csp.svg000066400000000000000000000302361357643561300347760ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/uploads/000077500000000000000000000000001357643561300312555ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/uploads/user1/000077500000000000000000000000001357643561300323145ustar00rootroot00000000000000placeholder.txt000066400000000000000000000000421357643561300352540ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-deaddrop/uploads/user1git doesn't support empty dirs... libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-dynamic/000077500000000000000000000000001357643561300274505ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-dynamic/CMakeLists.txt000066400000000000000000000040231357643561300322070ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-dynamic) set(SRCS minimal-http-server-dynamic.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-dynamic/README.md000066400000000000000000000007331357643561300307320ustar00rootroot00000000000000# lws minimal http server dynamic content ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-dynamic [2018/03/20 10:24:24:7099] USER: LWS minimal http server dynamic | visit http://localhost:7681 [2018/03/20 10:24:24:7099] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off ``` Visit http://localhost:7681, which is all static content. Click on the link to /dyn/anything, this opens a new tab with dynamicly-produced content. libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-dynamic/localhost-100y.cert000066400000000000000000000040721357643561300330110ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-dynamic/localhost-100y.key000066400000000000000000000063101357643561300326410ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-dynamic.c000066400000000000000000000205441357643561300350730ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-dynamic/* * lws-minimal-http-server-dynamic * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server that can produce dynamic http * content as well as static content. * * To keep it simple, it serves the static stuff from the subdirectory * "./mount-origin" of the directory it was started in. * * You can change that by changing mount.origin below. */ #include #include #include #include /* * Unlike ws, http is a stateless protocol. This pss only exists for the * duration of a single http transaction. With http/1.1 keep-alive and http/2, * that is unrelated to (shorter than) the lifetime of the network connection. */ struct pss { char path[128]; int times; int budget; int content_lines; }; static int interrupted; static int callback_dynamic_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; uint8_t buf[LWS_PRE + 2048], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - LWS_PRE - 1]; time_t t; int n; switch (reason) { case LWS_CALLBACK_HTTP: /* in contains the url part after our mountpoint /dyn, if any */ lws_snprintf(pss->path, sizeof(pss->path), "%s", (const char *)in); /* * prepare and write http headers... with regards to content- * length, there are three approaches: * * - http/1.0 or connection:close: no need, but no pipelining * - http/1.1 or connected:keep-alive * (keep-alive is default for 1.1): content-length required * - http/2: no need, LWS_WRITE_HTTP_FINAL closes the stream * * giving the api below LWS_ILLEGAL_HTTP_CONTENT_LEN instead of * a content length forces the connection response headers to * send back "connection: close", disabling keep-alive. * * If you know the final content-length, it's always OK to give * it and keep-alive can work then if otherwise possible. But * often you don't know it and avoiding having to compute it * at header-time makes life easier at the server. */ if (lws_add_http_common_headers(wsi, HTTP_STATUS_OK, "text/html", LWS_ILLEGAL_HTTP_CONTENT_LEN, /* no content len */ &p, end)) return 1; if (lws_finalize_write_http_header(wsi, start, &p, end)) return 1; pss->times = 0; pss->budget = atoi((char *)in + 1); pss->content_lines = 0; if (!pss->budget) pss->budget = 10; /* write the body separately */ lws_callback_on_writable(wsi); return 0; case LWS_CALLBACK_HTTP_WRITEABLE: if (!pss || pss->times > pss->budget) break; /* * We send a large reply in pieces of around 2KB each. * * For http/1, it's possible to send a large buffer at once, * but lws will malloc() up a temp buffer to hold any data * that the kernel didn't accept in one go. This is expensive * in memory and cpu, so it's better to stage the creation of * the data to be sent each time. * * For http/2, large data frames would block the whole * connection, not just the stream and are not allowed. Lws * will call back on writable when the stream both has transmit * credit and the round-robin fair access for sibling streams * allows it. * * For http/2, we must send the last part with * LWS_WRITE_HTTP_FINAL to close the stream representing * this transaction. */ n = LWS_WRITE_HTTP; if (pss->times == pss->budget) n = LWS_WRITE_HTTP_FINAL; if (!pss->times) { /* * the first time, we print some html title */ t = time(NULL); /* * to work with http/2, we must take care about LWS_PRE * valid behind the buffer we will send. */ p += lws_snprintf((char *)p, end - p, "" "" "" "
Dynamic content for '%s' from mountpoint." "
Time: %s

" "", pss->path, ctime(&t)); } else { /* * after the first time, we create bulk content. * * Again we take care about LWS_PRE valid behind the * buffer we will send. */ while (lws_ptr_diff(end, p) > 80) p += lws_snprintf((char *)p, end - p, "%d.%d: this is some content... ", pss->times, pss->content_lines++); p += lws_snprintf((char *)p, end - p, "

"); } pss->times++; if (lws_write(wsi, (uint8_t *)start, lws_ptr_diff(p, start), n) != lws_ptr_diff(p, start)) return 1; /* * HTTP/1.0 no keepalive: close network connection * HTTP/1.1 or HTTP1.0 + KA: wait / process next transaction * HTTP/2: stream ended, parent connection remains up */ if (n == LWS_WRITE_HTTP_FINAL) { if (lws_http_transaction_completed(wsi)) return -1; } else lws_callback_on_writable(wsi); return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocol = { "http", callback_dynamic_http, sizeof(struct pss), 0 }; static const struct lws_protocols *pprotocols[] = { &protocol, NULL }; /* override the default mount for /dyn in the URL space */ static const struct lws_http_mount mount_dyn = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/dyn", /* mountpoint URL */ /* .origin */ NULL, /* protocol */ /* .def */ NULL, /* .protocol */ "http", /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_CALLBACK, /* dynamic */ /* .mountpoint_len */ 4, /* char count */ /* .basic_auth_login_file */ NULL, }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ &mount_dyn, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server dynamic | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; /* for testing ah queue, not useful in real world */ if (lws_cmdline_option(argc, argv, "--ah1")) info.max_http_header_pool = 1; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* http on 7681 */ info.port = 7681; info.pprotocols = pprotocols; info.mounts = &mount; info.vhost_name = "http"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create tls vhost\n"); goto bail; } /* https on 7682 */ info.port = 7682; info.error_document_404 = "/404.html"; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; info.vhost_name = "localhost"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create tls vhost\n"); goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-dynamic/mount-origin/000077500000000000000000000000001357643561300320775ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-dynamic/mount-origin/404.html000066400000000000000000000002271357643561300332750ustar00rootroot00000000000000

404

Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761357643561300341530ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-dynamic/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-dynamic/mount-origin/index.html000066400000000000000000000010161357643561300340720ustar00rootroot00000000000000
Hello from the minimal http server dynamic content example.

This is a static page served from ./mount-origin/index.html.

Stuff down /dyn in the URL space is generated dynamically
by the callback. For example, click on /dyn/anything to see dynamic content. libwebsockets.org-logo.svg000066400000000000000000001403321357643561300371300ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-dynamic/mount-origin strict-csp.svg000066400000000000000000000302361357643561300346400ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-dynamic/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/000077500000000000000000000000001357643561300307415ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/CMakeLists.txt000066400000000000000000000041201357643561300334760ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-eventlib-demos) set(SRCS minimal-http-server-eventlib-demos.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/README.md000066400000000000000000000016211357643561300322200ustar00rootroot00000000000000# lws minimal http server eventlib demos This demonstrates a slightly more complex demo that can use any of the event loops (it defaults to poll) It uses statically included plugins to provide the lws test server functions Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 --uv|Use the libuv event library (lws must have been configured with `-DLWS_WITH_LIBUV=1`) --event|Use the libevent library (lws must have been configured with `-DLWS_WITH_LIBEVENT=1`) --ev|Use the libev event library (lws must have been configured with `-DLWS_WITH_LIBEV=1`) ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-eventlib-demos [2018/03/04 09:30:02:7986] USER: LWS minimal http server-eventlib-demos | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 localhost-100y.cert000066400000000000000000000040721357643561300342230ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- localhost-100y.key000066400000000000000000000063101357643561300340530ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-eventlib-demos.c000066400000000000000000000114341357643561300376530ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/* * lws-minimal-http-server-eventlib * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http[s] server that can work with any of the * supported event loop backends, or the default poll() one. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include #define LWS_PLUGIN_STATIC #include "../../../plugins/protocol_lws_mirror.c" #include "../../../plugins/protocol_lws_status.c" #include "../../../plugins/protocol_dumb_increment.c" #include "../../../plugins/protocol_post_demo.c" static struct lws_context *context; static struct lws_protocols protocols[] = { /* first protocol must always be HTTP handler */ { "http-only", lws_callback_http_dummy, 0, 0, }, LWS_PLUGIN_PROTOCOL_DUMB_INCREMENT, LWS_PLUGIN_PROTOCOL_MIRROR, LWS_PLUGIN_PROTOCOL_LWS_STATUS, LWS_PLUGIN_PROTOCOL_POST_DEMO, { NULL, NULL, 0, 0 } /* terminator */ }; /* * mount handlers for sections of the URL space */ static const struct lws_http_mount mount_ziptest = { NULL, /* linked-list pointer to next*/ "/ziptest", /* mountpoint in URL namespace on this vhost */ "candide.zip", /* handler */ NULL, /* default filename if none given */ NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, LWSMPRO_FILE, /* origin points to a callback */ 8, /* strlen("/ziptest"), ie length of the mountpoint */ NULL, { NULL, NULL } // sentinel }; static const struct lws_http_mount mount_post = { (struct lws_http_mount *)&mount_ziptest, /* linked-list pointer to next*/ "/formtest", /* mountpoint in URL namespace on this vhost */ "protocol-post-demo", /* handler */ NULL, /* default filename if none given */ NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, LWSMPRO_CALLBACK, /* origin points to a callback */ 9, /* strlen("/formtest"), ie length of the mountpoint */ NULL, { NULL, NULL } // sentinel }; static const struct lws_http_mount mount = { /* .mount_next */ &mount_post, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "test.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void signal_cb(void *handle, int signum) { lwsl_err("%s: signal %d\n", __func__, signum); switch (signum) { case SIGTERM: case SIGINT: break; default: break; } lws_context_destroy(context); } void sigint_handler(int sig) { signal_cb(NULL, sig); } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server eventlib | visit http://localhost:7681\n"); lwsl_user(" [-s (ssl)] [--uv (libuv)] [--ev (libev)] [--event (libevent)]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.pcontext = &context; info.protocols = protocols; info.signal_cb = signal_cb; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } if (lws_cmdline_option(argc, argv, "--uv")) info.options |= LWS_SERVER_OPTION_LIBUV; else if (lws_cmdline_option(argc, argv, "--event")) info.options |= LWS_SERVER_OPTION_LIBEVENT; else if (lws_cmdline_option(argc, argv, "--ev")) info.options |= LWS_SERVER_OPTION_LIBEV; else signal(SIGINT, sigint_handler); context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (!lws_service(context, 0)) ; lwsl_info("calling external context destroy\n"); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin/000077500000000000000000000000001357643561300333705ustar00rootroot00000000000000404.html000066400000000000000000000002271357643561300345070ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin

404

Sorry, that file doesn't exist. candide.zip000066400000000000000000006354641357643561300354460ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-originPKéøeAI’™s‰ candide.htmlUT &֗P)¬»Xux č褿{“ŪV’-Žž}”ļéÄŻ{‚*[Ė–ĖcEI–­ź¶#•[Żæ'N€ä& °ń(Š=ńūī7×ŹĢ ’åęōōhŗ«X$ģGī|¬\ė‡{?½uõ·ƳU·.³æ½üõņUv’įW_}~ņꫯ~ŗś)ū뛫·æfĪ¾Ī>uM1ė¾śźõ»ūwļdņŸū«®Ū|’ÕWŪķölūä¬n–_]}üź .õŸµ¶üąŁ¼›ß’ńī»w~ą—}Y—UūļG®ńčłóēśQ¼=Ė~X…|ž£~åėŠå>ó0ü½/nžżž«ŗźBÕ=¼ŚmĀżl¦æżūż.|é¾Ā5Īg«¼iC÷ļE[?üī»ož?|t?ūŹ/×]ģ—,»Z…ģCS’f]öK/š†f™…—u}Õ‹ģU^Ķ‹y˜dÓ]ö—ŗģņ¢ gv”ÆŅ+żŠv»2dÜ’ŻÉ¬mń0_żÆīżļW?]\]üļ,ū«Œė“¬g×uße’ė+—{ź6Ł®ófYT»zó}vöķ7a}žįJó²XVßgæ÷mW,v白oZw]½ö·žæf\hõh²z•a’ĻĆĖ»Ųš©yöŸ7”éŠY^śĄČCÄæOėłn|ĶG_’ĻŪļŒŸ-ÖĖģ?§u3 ę” Ł×›/白ŒK¦Æ'¶wččū,æ2żCüā³M¾ UæĪdždvūjVÆ×2«Y'k¼’%•E²EŻdEuS“FŸÉäC²ģ[®Č,ł\%㋲čvßg«b>ÕyvšF.ąŗ-ŗ¢–‘̧m]Ź^:?|“ęóĒ’óČß²‘¶Å?Ā÷Y»–µ)«ōšMéRęP¼ē’Åm<– 7ßßūŗĻī7’s½Œ¦ōl:µ‹’ēh~äF벘guģöŽŖßp䍯޹‹Ž¼ÆŁ{ŸŻį‘wNė/é;Ó÷Ȉ̱ŃåÉŌX؊į‹ņ ūi“mż3ĆžFD;ėˆqńĖóN³ż7铳{Śõ,ßš=œ’›¼)ņŖ³%šPžÖ¦ßšo°ÄüĶŪ C1­Ėyņ®E±nO§ÕĀń›õĻÕuWÕ]h³ńˆŸĶóv%¦ńQ2Ųžęøīķő%•.ņÆĻž'SÆwVęÓPbJ7Tf—śīé’~ļćƒW.śNvķ÷£az„‡xŽįVroäū».”%žü1ˆW$·ņSŽÉµŽÕ7g^öųŪIöų믟e’[ēįˆ‡żōń’Į'~Ķ«e/Ēć÷ŁėjYķŠß"s>ƒÉæYÖ¬ÖĆāņÓ{ó ń®’õæžWöéźāćUöžēģźĶå§ģĆĒ÷zżź*ūå·«×ļ^¾žų‹Ģūū÷Ī^]¼ūéņ§×™|B’'9ļgbGe%¼Zõ³ėģ—&‹Iö³œ[EÅĮžŌ‰ėĪ9Ęoļ9†wļüT`~§2†sLG½hŌmĶ®B¾Ę'!Åf9ߜU”¾—«õ+_®öū¼ø2o%Į¹ Wż‡Õ“ƚ¼jgņ]”yŠŹxŹØŹź‚æn~|?½)ź¾…—_/›|³‚IĶBÓŌrĻ«\Ö4„JÖZÓȂ‘{-Ŗ»wø*° Ļä9›,—?Æ7eK/ƒ/ r£Ų†ż qN’~’\½»’#@cY‰vy=ė±Ī~ų*’QžIž_$>×ā¤sŪžū}óŸ‰k£ĮŸīĶėģķūŸ^|—żzłņćÅĒæłĆ­žžČ9}}~’ńן|Ź^¾žt•a2?É{ž&_ńäGŸŻ—Ėžņž×«‹ĖÆķ:{ėŽÖżeōh'ś)–¼²m!įĒ4dĖ2—É®e—åxlø±IŚ»wly¼­e‹V²¦MŽģξń­26M)n¹W°Ēu÷޽#kLˆ~PW–¼ĘŶ7mH±ŽŌœ/ĆI.5Ųõ:Ūč=c¹u+¬µ¼Õy^ēsu§×b§²D'ķYöZģĪV%‡1‘ļ˜Źž³§]X×|¢Œ>y˜·X½yVÖŪl#,pÉ䕼ŚaCāAäÖgūssōwīļMžćoįśqiūŹ*Ö²õŪÆ¾žśŃŁļ›„Ģ Ā•¶™„łæŻŠ”QĀźöŽ×[’÷ūXOXŲUćÕ÷ȗ†,‡Gų?žńc~³ō÷ī’ųr'Œ¼ücŗ‚ŪGžžxłīźćūŸ~{uułž–ه7—æ^~E{uõś×_ć‚üaõĶ/ßæ»Ģä[åyżńņ—7W“ģņŻ«³¦ –=ŸŽ¼žų){÷śsö·÷’,’F?¾ń»²ńūń•ō\&Ł£ē¾Ć”%×Ńżsģ)źŖČž-_oĪeIŹÄė'/«Ł™=ųCSTjøę~« ü&Ęަ,’‹µ|x–æåt~”é«ņµ żyå’ŽÅż¬˜'æżųæ?,%R+žšżjY1§Ł…Ē£įŽó@“‡åœµrŠ…ģŃ·ß<ŸČé*+ß×D¶mą²Ž·3ģ>žÆ)ęŬ/ćž§V¶ģWŽé {Ūt‹# !¾®Ę£Ūŗ)ēķDßČ_†ż&óĢwr?āĶtēé6“m·wGršsرŖó|'ÄĘ_Š.șß_2Ś ^®ŁīEŻóŲ‘Ū,ŗ6+ó^fS¾m^ĖÉSdĖFv©„g>“2>Ć£ć6ń.™“łYö79FWņöy±XˆcQ8lČŲm彫į1ü¹ž¹¬Ļič¶X{Uމjgy³æ÷2G2 OVŹėĀG–Ē™·źõJ'”¬ķųB 9¦pӣƻ{ß÷÷^+­@Œ3 2E‹¼‘õÓ’å9į]‹1!OŌ„\ tf:rŁ[—b‡äQŠß–½ŖĖ+fZ`R’ł[Č)Jœ=ńw™¹­r{Ų%ö:\”Y1ĻÄ’1NVśOāNi,e«N0›¦¾Ńi _äĘl„ÜĻ<Č¢ŖÜŅõģb+ī+Ūšdū¶gą 72q\)² °²0ē<¹:›f'Į“8ał¬ ¶ūŪsĶqž”®÷V¬AgBG ›¹“ėąQs1ß:Z¾OÅ;ü{_ˆ;mśv„®†xg²CŖ`~‚¬ÄœV_®¾ˆ‰ ņm\(ö £Ė‹²ÜÖ5œ}:?r ą#鄪,{łāzÓ²œÖ»NŪõsD7~y[(w²ˆB(3ŗˆzu'÷äS$  {$żž +ŗR;#×Če‹µXnk‰Ügrēo ų*2j×2—]åø*B3ŃĻ.JY°ßh¾²‘Į³G»_%£ę÷<ƒŁļ7u%!ß$ ˜‘B^Śéƒ›ężą–°Ŗwļ”bq¬ō<5øCė’+qō;łUöÅgā¼o=Øā˜ß½3Å;{™ųĮtW‘`åÓļ䬄ͦĖ>ĖŽ)$Ęų ū&FN\£dO$‹aŌmkü“©±`š38÷łRN;›8D@²Õa¹$\‰V[*€oPVJfĖrWć²f._ØõGģœ‹wZWgwļ¼ ÉŚŻ”½]ŽÄ&ŌāVĖž”Į’!ź«E¾ó˜Ó*8Ņń“Ø2ܽsĀ·ö}¬ļƏ;Żk2Zņ—:—rgmĻsAlˆÜvřJIL†Ä½|‹©ÅUK‹äņV÷œķ-žl–›w ēw…õ÷+ެ\uøGöLNyX×rbßä¼č« ł ³e]!÷€G™ģF"‚ū,b³’•ĖŁn)ž5ņušnį™.µt­¬’ŖŪ=Dģ`[SŁ]ā?ĪõˆæČÓK@³ źõĖń{÷Ž/hœÅaYŪ\C‹9Ā¢Ö‡[‚\Ł]ŃjˆŸBnL6뢗°?‡s Ć"¾ę ²kØč(Ģ:ž ”|EÄsÉ6Eos">ӚI‚­qń%±Åņ -qńåĄ·«ąžŻÜ]'ŽÖ¦Ž„‰ķĜ~ŁJN{ž‘£’od|óŁJM#‡¦¬Z3Lš›õXy+÷˜?|%—Ć‹>će—Ć\Ąß“Ó«®$ęēc«“€™’ń“ ŸėÄÓw^óo¾`;®+1?‹‡6[ŃÄĄ'Äš† EtĖ䶙 Ęg`W'8å^®ŌÅč›k<Ą&oÄzȑ"VVVf ē®ÖnĶ7.zyņGŽ ×õZ–ļB ­;Ÿ˜k®ųz+ńf/”•?“U‹×Wp+ņkVĮru2±ĢOdžšĮOį3µŗ£eEČęźile`d-”źV|”B`[Wy3[q5Ā­Øp«ā¢† 'A²ć£Āšå0ŃŹ©Eɛµ?œNk[ĆŌĖ‚ģ4‚Ē™UĄyN’‚ļv -”§Ļ gfÉŅBWĆÜČāö ‰‚VĀT ßåNBeOQndēekY>mūFFøĘFĢ(ŗž+B\ō>‹®’£ū®7.Äq-—¬l“ŗ C³D&  ˾Ģåæ³` ¤jŽ33ŚŠ>vµ^©Ģ·ŗdśń:|.īĮń#ćb-å Ēź~(±ĻąnŠõ™×HØĮ§©QŲ1]Š÷ČĶcx±2*ī‰ÄŲ»4ź+ŦŹA#ĮłœUą•Ś¢ ‘ŃŁŪÄf¾Ån‘- Āro;ĖŹ Š¦•””ĪęYR®”4-CRš»zŻĮboY£‘•A—(Ķ7˜§\…­X2jņ\LXī½iņQ‡hāŠiĀĒÄõD2ø8”Ņš'– 9j±9‚łfŧ„««ų+·—9Ģfėłš/t‹Ōˆ™W/oÅSĘGæA×LÜrOĄÉŸÅ—”ćĮō }ƱQ«ß2NÄ%`xŸ‚.ꎆ ™ŲUq™ėa9µ!Ę 2‰|‹]F¢‘ŌÅÅ.F3ÄM)w{&öžijłTCK&cنę&Øw¹®yr[¼Q rÅČS±SŸR+{Ė]ńHkdh:s÷­ø7ø‚rö\J€ŗ šƒQē˜Ų-·7Źōhj®£|Q‹³­¦;2 žĮ9sT\¶9Šr«b”źyJFé-ąuā[µėóģOyÅļŽłĻŠ_“÷ŖŹW>üTOģ8Ķ—˜hX+5ÅĮös‰/4ĆØO€ļ­'C$³ÓēqWGn…Ɉŗœ[DÄsP#ļ* Ćį;sg„Q—"X‡²ź»o$°é81‡Ž·Xš4ūw÷Žķł ęōBÜśŗÄĶcUŅŌH9×g”›ÉšŽJ¶ ĮÜP e;Nčż£Ę1T"ÖćN²ÜcÓm÷æ\^{õžŻÕėwWŸXZ“Õzā]ģŻĘp·ßČP~ %ĶøÉ*˜ķßļ}_&“, ,ōļ÷Ÿźļr±—æ·żz7»æÅO¢ž”(kBščščÄW¤ėßpüųźĶŇ«×ųŖ›§…ß/϶÷Ŗ}ęĆÅ/ÆõO_É5o»ņåŁń‹¾©·CŌcŖ½ķp(!q!Ž÷²’-„÷µC\"Ÿ[éG$Ō t›$ž…[nsĄep.Ż’ń‘NĄ?½óŪnż3¶$b ­—łSh±nœ08ķž¾¹’ć7§ŽÓ)ćIŸ‚x&Mb19:¾1?›rKFosT›†‡’#ģ“{~’Ēē'Žū_Nøu­ć2i&–ķ­¦“‡ŹU¼iuü5 ˆщ“’Df’Éi·{ŪŻ^‰Ļ¤ū“*6[9ÉÆ'Łk W\‡ä‡Įü©žuuśV‡7’IŽ„q¤˜Ō)@²mwāć|'ó݉óG ‡ĒRŻtż²‡#Ąõ“Kܛ÷]!±JvŃÓåxøšĢ¼Õ™TgŒ“č’ĆH“ßĒżšīsžŁ3–Š ™ĀłiOśX&īń©÷‡{„Č4YZŸkq*qĘ^#ØO7ņČĪ8®@>4%Y< ~N½ļgrßĻN¾ļŪn1‘IJˆ?½ź«ĄŚČi7ńäėū?>łśÄMś×žßB²˜;MJĄ…©žŽmŃ!ä™Ā?…퉷+깉ŚĆ“ŽŚ›ŃI{ćķĶųœ=|šYcSnćɃę¶q‰»į“$q8’!АȸšP*Aćt›’8ē{ŌÕgīõzš7×t¶O41ON4½u Klt·§ŻĀÓĒ÷|śųŌ[ų£„~1æ”Óڃ[aéøØśS7ąS—§'ĖI§+¬˜ÄjĄĀ‡ĢÓUK¹2sqÖ'żDgą©xOO½ćSĪT…×ČĪÖZžįētg[³ķ-Ėāč’ļUF÷›SG÷”[½.Ü”ƒCČŒ£s䎞‹†ļ™ å³S‡ņÖņp5^mėģ ŁWō9yN/žR4„üŽßÖÕupģĮŃł k>HfĖ#¾o‚b4ż@>Ćb}*¾€W ÷4 '½e'Ž=\ÅG'ūŠpžŁĶ>ćK1ĒŲArØ¢¤Ø€›;õŽJŸģ(žÓć*=ŽC*Ą ^čf¼å^į!>:ŁE¼ż ;Ģ»üóŖ`½Sļš9īšäÓźÆgŁķ{G¦sVöķɑУgHń=;Lņ}ÅLjŅųrj2÷f”˽ńTīĶ‘Lī&“Ožŗ½ļ¾šŲ7žŅKōōėÆoķ%z|k/Ńć½^"ėõł·’ńäłł'ļüĆĘ¢’Ā#ļ?sņŠć§fSΐ7?ń+%—¤—~tlś'MP±“M6I‡Ó“ß¼’»$?_|Ź^~|’Ū/o®²ß>d—ﲋģķÅ/ļ.¾|õśŻ•¼ļÓÕÆÆ'ģrĀēŽš#wļ¼žė‡×æžśś'ōķ½{õś,6įń™.‘Ÿ1ļcv€¼ŻD“ĀŹ4«›7¬É”-—m°»P=¼’g׫‰įÉr”Ą€ī{½–‘aE(§PĶė­{¤,Õ³.£ˆļ–_±G%i¢‚CEWe˲^×ōĄ€Åś*‰¶īK{ˆ‰Ÿō4õæ÷ó%A'Š$,ˆ˜7L€Vś'vm#l€~ą$»ĢP­ «_þh0OyųäŽQ|Ģ+FµZ6lpŪ³€µu,ī±&ĶrńPĖēøŹŃŅ¢A¢QüQ.Ž|-·°BĮŠG ęѦPy›Ö͊ļāX³‚§”2ŸļŹ®ĄŠ5»Ą¦D¦ąÄN )óŻ;#3 ¤Ö’…”AT^ÖK–Ž;ŲRˆb‰ īV¬øčŲÕļ=zF“ks½Wžõ%†YŁo¾ÜČāi#.ŁDģP²VµŽŒĘ„Œ§Sp/įzĖ.źČŪĖŠÖŁ’]Ÿr‰r‚ś³Læ|ó)»üq²Ėė.<ÕÉžXzĆwŽ4>ąóe©ČēZATšĖiÖw,ŠXå?Ļ6ÄcČߣlET-€Čē:āM]Æ­•æĖ7uķ„+~”ĀåėāąŻu xœ^€˜År-#Üpļ|mc”Ž»£÷8¹?ŌT5†#ĘÉ»½¾Ÿ«dėāĆśÄē؊ ŲĘƵ ŸŠ±jÄÓŹsS’j›Dēi&ž–ģ<X·ŽCR± ėŖī›aŹčµ"t( €öײ“ęhÕ"ƒ—č䎅Mi€±4@ļą¬`]źŽĄźÖ;ą±–²øņéÕĆY]ŹM š W¹› W”_o&ū/ا†§lCX&ŹāV8„Ż€ÆM·Ś ‹ćtf¼Tˆ¤ģ—źĻļ”įć’>ņciō OŃĮ©łŁøEōŻ~ŅIˆ¬q=ĘÜbfuƒÖØŲ@­FOÓzpÜå[É8Ķ­Y§mėˆ°Ż;§pNŽēŠé™¤KĶS«<pȈŲfµk‹YżP®\Ó.Õ2'ķZ~~XK¼“Ó3ƒęNÖā|Ķ)±„œU…ą× c²o“&…Éй’OŗT‡©6óäƒčЬ”¦%¾Ēv‡ Ŗ»„m†MM0łhGŽWĄ:^$LįŖ“- ä„LČ$»ļ¶¤õ’Ć·FÕE[@·EkmR¶%wĄ-ÓČęģĒēyŲD.‘ ΁„‘Į#ŗ4op  šīŽ|@ēįū);“8älĻ@df¹€Öńžm ’ónÕ·GŪō~ K…f)sÕĪś õ.iøuxŠ’Ųų'j㟤6Žī…¦ĖoÅÆ&Į+ędÜq8Å^ؚéTĘ©égĻy|>·‚ėĻ;…ˆféBŃOœć«V @=ž”–æÄ2×ī˜^{!pq-•õœČЄޫįõmø^upK[žAÖ_s÷0LaÖĄ˜Ÿ1,ļį°ģlõ tGIÓé”Ū2Łœ(8,Ė\ž„&ڜĖrbž•ŗ1Éūōӎ/ќŻOV¾Ū’ż¦<»:E¶Ā@—A(‹pƄXUĻx£:Ž ua·ŽlŹ·jlŃō‡/Z¢JųPV­žŲ›•„čÕÜN`94I Ą‡D|­(ōŚų`l(¬C/$ŲMšAp‹±}FŃ=ļģØćMw2 DÖū'-Ήx9…ŽJ?)ƒŻŲĶĄ=Į›Ļ ˜°nDļM·2°[³rvą'hŲ}AFø—VYˆ\Õ„a¬Nż†Y²rFo4“éjŠÄäYÄ”§e-Ł9óø3Ćōģc'ÓG[ ę’ĄõjйšocO7—X¶»ÉØĆ6S4<.ŹSČX …š‚T<„Ę>hTņĒg—0aM3‹ć`•£Éīįš€¶”}uژ¹EæŁ$ć4ŁéņÕi©güˆ‹6Ū[©ģM7s€j±3„Å ÓΊ żć-Ė_€žć0čj™ēmŌď•ōε+ά™éœ/‘€Q.%ŸŠāßi „OkūT­ķÓq÷`ŠbØ/ ÅŗŸpéŠE×Jfµ łŠAaī\‰E+7ēļµЃŠÖ:WŪ‚Œupū酭ėģÜ*‹H%€“l2āN5u­£€ÕģŠÄxæ÷ŠĮX«J^IlWµvó±žÄŗyŃօAQšż”½üą8wˆXJōLĆŖ`’U+Έ„@l굢ȸČĶöU~- rU„E’ Ÿ@b €u30-ƁĶģGƒÆ™Žiü×69?²ė‚½h]ģҁÓ(ė*7*2Ų–Mmb˜nŠ›|ʦĀĖM©3uŒ%<›É±®šŒ²Ų i¼#>/„]@óˆX©2čŻČ‹×¶ˆ¾×ÓäU|q Tz¾ĆĻ#ähꆝÆrļŃdźhŚQ äÆ./ö©#¦bļæyĒbĮڐL‘#ŻŃŃ«)ŗ–Ńfc-ŖlAs£)[XĶh‡óh_¦õ“½čērŁ„øß;”›ŚÖ5”ģ“Aéź>^Cc¬…­v²ą°ŅfAu“Ų°µļ‰³mˆż&8Rā:ņšĶk;©Õć›ÄĄ}£ī›™‰gœ%üüęā*{łśÕÅŪ׹\ó„įÅŪ÷ļ~![×Ėß~żåāćåÅ»O{Łæhrę@ U6}”QŖ<œ]€É‚ćUV‘H śa«;’īaė6T…°”×äé!ˆŻi÷¬ų LµĄ›ŻBkz‡É®V|hĢśģ*֛¦CjūnÓ[f ż˜žø‘¬€ļUę;ķBA{@‰ŽśŲŃĒŹŌd 2˜Ļ៰5}Q„r>ųŪ ĆI$·½į‹Ął†„4%p‰gŁ;³{ §qŪ΁¤³s–œ—KµĄģ|NŸß2|½Łąm…¶ĻYšĆņ9/ēą \Ջ…lōfzżp^\Ļėf±ˆĶĀÉ"Õ#ęeN(?ƒlmRP:‰®XöĶ»æ*)®*žĶc;ļŸ×ck§÷ '²]d<ęօ+/'L\y¦1R½–µƒP*÷=ÜĪyV>œöEé9L ):𠯆¤eVl99üWZ¬źŽ+mÓYšȂķČhœ$dõŻä/šg•õy}e1Ų¶ÉĄƒĀ@v™37޾āĘū¾Ü6xÖ‹YFJóŽ—č Ģę&Įµ2mĢa^»ŹAŸvŠ)y–˜’gjJž3%x ÷čŗ-šdŌŻĀlé†,Ör÷Ęž!”ēh[Ė <ͽæ ²ĪĀÜy^ķ­}ϰCĄ^GRŅ…`?‰‹æ ­r˜¼Hgīžß膬ż©ėCŒ^tR¤!ŁnŁL†ŒÅšķœFƒ7­·ū‹+Ų…Ś ip3ż1 ¬m-wĶG¤Ś Ģ $lå=śpp×ų?3Ī9“!|>¶æWnŖsmōi,qn|'ācµ-ūnHOJo’lüÜr!|Ŗ±'åäŲB;GrFŠčJ]Ŗ›]Ź©(óŬ$ŽĄ·ĶśRÄś% "7„œ£žŠśgĮ2÷Ī4Š )Ÿ-:ģƒķ Ūl†`D (ż#lKŁŖ’ˆ&c*MłŠŁ³N}¤0ā3Ģķ·VŠÄ‡ƒ}aJ4ž_QŠšÅ4C]īĘėęż*“ćd¼DdÜ.ķĶ„NļFć xWŁĖøū³ū[4”]ó& ®}ēI¾AĶV«ŗ×ųšbļė:K”I8¹_L‹[]u¼FėńĶ¢ŌϘAŅ< uŠZ Š]ĖrW×Z ūŅŁŽ°ŻS‹ˆ….FĘv™˜<‹<äXŖ®Gā­sŚ­(ļäljnCī6»%¤SĢ×·‰łśVĶ×·£āIŽhŠjŹe7äx®sƒŃĀąÄNģ]M}8üg õm°ī;Y4,¹ĒVŲż²bK@I1Ō"e?©K…v”Ff“ÖÕJ[É\EĪØ‘†č\«‘6aÉ@9r–˜ėi51ž”ōŖˆ}D !5)ČWHƒĄ 4Ö\š|½ę£®ē8y՚łó‚mķ¤KmA°`DdÆĆ&_`䘖 °ƒmÖĻ—”Ü Ł¬ĀBī‹„PČ ‰ ¶ĖOó¹§žW)čˆcپĘZ®d®q“{ēģ.‹wE#Ś…*^ C'C*N‘¢ˆ„Ø#Į¶tm…ŸĖŻŁaP½-tJ‡E”5§½Bs¬n,a9­Kóˆ Ī«b-ī”õgkŗc[š“uŸC¬Ās„’bŠh~ƒÓ}N‡VžˆŽēŅ,ä¢Ę‰?-“ī86õ.”HĪy%Q˜ZSÕś`‹°ķsƳ®”G Ü^“[—;†ä n圹͚xš}ģqµå‹r;T˜=훐³Ü1\’°Ą5į[œ=²nĖ’# z1RNa§M’…É=Žč9Js­ÜLœķ÷mQńK)«w’£E÷ŽœU,“UpśōšU?ĄŸŽ ż>u9>] ō§…¹8 Zdŗ‘§ķCä½\ Ś’_źł)÷»Äą~§÷»1ŒF%­įŹbČz„–yć”#źĮŠóa¦ŹŖ‡³iKĄ«d ,ä^ƒŲp®µŁmĶÄyĖ…k/Źź{¬±]—\|#Ų®į,ZڶĤLqRXYĒŠ@œ !2=Q”=ŃŖ§•ų}šģ£Fƒ4¦żzƄjłė”WEĮ3ćĖ-cĪ% ļ1ī Kŗ•^0Äę^q‹/ņ}®ŲmĶE? <.5߇ųtUם®oUuy”.ėæøˆ¹TSłņ|i«‘f½ŪńnØu“×E¾@‘éjš|+«pܲ&x0Os^Č|“äwļ\`Ź# ;DfōŹmˆ¾ūq`š,ÜóÄĀ=W ÷ü_O®ŻŽĮ{{!’Iƒ×Ÿ^]|xżüńżŪ½ ›š˜’»ųłźõĒĻśt÷ΐž{słv/ GO‘Ó£A€ĒŌ £ó9ågPP¢V&?ʚåhÕ9k­yZļQcĆĶ Ę6—“+ä . 8²(°Ž«¼ļ¦5z‡ęņ']¤óŖjć­›ZĢ,ne‰){2UXiŃšµ,śQ° 5ȦZŗ”¦zQ"ü”Ū Ÿ!=Ū%· šėÅ5MŅVĀPŁl±żm„¶P€EVĮ#Ć˵l×mPm!“žų%E%ĻŪĮ× ÷Rß,r?§¦94DĢ+ŪśŸŌj¬ ”X` ”ųükĶĒÕ¢„րņ5)N•8Šg<ŅÄņ·gÉéA„»eńÕ ŹÓŚéŅZ1U˜[żĪ)Ą56ŃObo“܆MšZ’cįą[ °žÖ[„Ä §ĮņšŻ`6²RŸå ĮÅÓ. /,{e|køŁa“-¶8·u#š+źh†žī1(ėŠFēJ—§œ„„¼ÓĄ °=ŁX}LŸ~RcfĮŅ‘œÕsåš.ć[6o“¼(Ūó’µs®®^ÄJP”"† *"u\‹Ā•»³$鬀xL֚y-78’Pß(ÖÓVŁąšžTlIćw©õbčęFU¾±§Øy>ČōŽŃ’U£!ńe’Ķ›m:EŪ¦;»%{/‚NµÉ…yįŠR.ķֈ˜xSć|›Ÿ+ɓ® Ņ $…¼“̰źSyĄĄĪ̉qtØa_^­Ą@„$–Į`ī®ī§Ę'ö×HS+!^œĪĢzØJ³ē2ś·kū€ĻŚÜ7Ōūiœ|ī ¬„mƒe¹“¦j±Ių²‘CĮ¤0€ŅH×䛠!3Ą»­‚uōųY¢Gų!ˆčČ.ĢL¾'ōBcŠ“X;Ńi ‡w&˜”±@®aŗjˆOäL|X,ĻØ[²¬SʈØ\5ļĆčm–;ōl(cCąĢIEÓG£v ļ§8ŅPAČĢ[aĶ½0µ5č\e|d{““ZöVR`ŁĪxŽwb\4—Ćc|ÅŌ‡ķĻ^É9šŠr’¾ģµB5<šPŲ4 p¶¦¾ßĻęĘjɼ6øUx‘]Ųkīg0äņ'“Õ_4ž°ŪŖ÷­6EŌ›-/1ܽs拎Źb5 ’h›ž5lě«dŗ%y«}V±žVy½žj• Ę⚩4Āī±EIHв żT„Ś"T]Iļ]ęķrXvKT’p2ĶdżR#M„­lĄDxnqh‘ `Åkķ ;Næ…Zåzß3B>ēCm^s `Č·o-/}!7ņPMÓxF“ź æbTž C,T­ NS\ö Cm. č i•Š#p¶·|øīŚĪŹŹž§lž£‡ÓtÕż—˜ł¢¦^örSżUŽ&ČQ{īu‘¹tķŒū{…&®H8/䂛¾ėlø"Ķq£xķÓ°čfcĝėÜ%‚hȱ¹m,āHoɇy‚ƒ&ŗ“ČLŹīīĖņLž“”8Ŗp„öž&ēqä|ĮrRAŸF&rI-€°–²‰†ĘĻPcšóÄʘZ‰ŗy'É֋ćźi©ā5ĀŁj»Ā;)ŌSɽ£ć‘xZ¦ jŻ®Qߏƒ­$y/Ļ„¬öČ¢ļĮ_‰Öfp6¤ŽŌa#öHSTzź\JĄˆxµ€ųW¹3Ék‹ŸZåŚ’_ŖNx'‹½UāÅsÕÖó¦IćŲBfnĖ“rVēŻØÓą`×z)hb.ēŲ++$ęōĆsķ…,ķ,Ÿb #ńJŲ¬ę1/‹ä91笨M4«K¬Żœ„A²@ģB]½2`‚¼9żsC‘ƒĖY8hÖaąĄČÅeÆK"ēYĀŌEՊĶ™ÖƒS oķ4Ä ļNsTŅnGÖ.ščÉæœƒśĖ­)ØŸß’†ĻĖOŁū_ŹŽ^|ŗzż1ūpńī—_ßJ“Oo.>|xżmŸļ‘”ŚĻ9ÅUJٚż0+äā` ×cė BS üībMg“ä“g˃Ͽglļf±ø£KƒŃŠöFœŒnÕ“ ­MT@Sż ­Ūz ßÉ+E-Į²KÓ#h‚ąņAž÷?K²3%“—e#ĖkŁ·ŻØā}!ó}/čiē!ĻĘįĄ'Œ!`£J!ܤsö®øMxqPŠĒ¹yÉćžjÕų+$ZӚÜS聙`ņTŠģŖ÷2\ Ę­WøasR6łō y×.Įåų=:Čķš^dŸĖ™ ¶ėJØd.l©œDōĶX€ŽeSȼļ;½ƒĀ»Ų sŻźķhžCqxļ1ÜŌ…öµE›N†åŲ”>:G•·š°ˆžć¼ acæeóēæžŒęósņ "ŠóĻ‘-ŗŽ*§e«Aź†ĀcE³?+·| ĀecŻ.– Ó“_žĢ%öFNŌ…ķ3p·—˜ģD„Kz÷³zmߞ²»³’M3©ÖēČ£Ź4Ė×Āo*ĄŠŁšh3cx€ŪŸ¤õƒų¶[+&i Ė@qīį\ć—ÖŖü¦śRvDŻz˜¦Ē§%⁄;ēė”"c€cm„‚Ń6Š"X£C†ęfč(4$¹.% qø¾¶XĄfāåĆé7DĘÆ= wū(Åš?2’££(žż‡NƒKuTf„Ž]°-}fhbZ[]g‚`člŠgĮZfĶč\ÕF†KĮūuŖn˜³E+Ņ`ݽs“ūā,5–ެ²ęL¼ŗb6*ʎݳ`ɦ–*ƒ²T1é#+W†²ū2‡aęmÅ”Y·ßgÄ%»Ć3ų¢ņ.<‡%¦[6BÖǦ8†ŁŪœ`n4Fö@[`н'äœŃ„ŃäūÄ¹čą‰Ģ­|WŖ -PåC±«Ļ3YōHD^¢7”Ń8­Äšķøa@n×øź 3 C㠪޳tDͲ Z‹Ķ „­yTw ė3Õ³qU‚Č/½fv#XÓ%ĖwŹ;6‰YȁkAA¶%krO†)Āßń’Eg8žmµJµBĮ»Füŗ¢sµĆY~“—ĄŃ‹C••¾—d.śM¹į ėĒa!Qāp‰ Ižą;”t¢Ś¬ČŽ«oŠYš»f[ڼ@ŖYœÆŹšų.ƖJ5ŻÄ!Õ ¶¾ŖĖ~=ķAžx§÷č•Ū  |÷!TA#½ģg$@wģōĢ"‘Ń:N*”E’q?YŹÜĒē”]b:˜iHl‡Ņس§ ¢N¾²»—]Ŗ¬4O·ŸĀMQZz²XRōƒéŖ¦ńøäĮyŒÜ(k`mīG€¢žŒ}•ßŌÅÜ\ź4,•-ĄÓƓ #ÆMŪ¬‹EœHŌbŠö*NŒ˜Ų9 «v€"uą›å ō]R?Ĭ¾¬vJfÅk÷~b8'ł“»ā‘µWÄl9•fz7–šŠ~ZŃ)mģxd¾ūW‹NćšÓÕė·^ŗšdŸŽ\~ųüńõ«?O²×ÆŽüĒo~šdóOļ_]½OŠQ‚iŃJßż'yŪ'¢„/Ž]¼¼ųpułéjÆ*õ8æ!&¦<ą(,jr ˆÖ£o [S«@*ccĢ‚6„õä·ĮB$tŠĒRJ‚eå˜"r`ūœĢÓFņ©h \§•2\,fc̬T­v²©^ØĖM2-(„2Qk"€7%ÉŖĢ7ųčgh1ą…ł„ ” Ä#½©ņ3zXŠćŸ£«eŖĢ‰+"ź,ˆž6}GńB,Lø(`Ó"=›Œ‹(mzņ\[Œ©eSūF˧^iżXŪå"yAÆČeĻBJ½Ø1ŸGūxšåšę…ūF&֌˜¢³¬'H“Ē&m¬¦>%šė-¼{§7ŠÅøSµxĖśtī’PxÖÄM¦¹Q )ŁĖWöĖ!Ž•&,˜¢¶ü*xŚÕ =GŹĪņµ‚Õå€ź?‚© šńµŸx’ŹłŹŁn ”--'?iĆ1Ö@¹×m¬^Q>]Lұ±ŒłłŲ¹ō{æŽÄ¢›ūĪGćFėćVHiŗ—Zīī$[”¶`<²ŒGĻĒJ¶‘Œ°|Œhē_ę»Įž 8=Īž¼°éDRC=!ŁžEŸ:w•[xcˆ¼‰˜ųŠ’-'ZņGJŻHoŪf„ _čyŽ<©^8ߤĄRŁóćŅj|l“¼ŒūĢs]v[ƒæ<ÜøīgB‰ ĪźŚc:2Ē)в‰ÜfŃQKI‘hrąå°nAS„» <ć.Łik¾#5ŗ¤߯+õ£”õEyIülb`§ŅõtDĮ„`MĖIrT=Ÿz£sŻęF`߃ŠöX °ŃļDxzaU“ŃCž,ū4Ė›ĘĘXövśĻŁS:%€Ā«Īé°¼QĆrćM§>z»KsĘså¶Ó ķY³O"Ö2C/Ö¢M°ļ‹šš-ĖvI6%åŻæ)ŖŚJj‰łG1pnŠķšBä¢mJu9ąfBKVCUPĻeÉDŹ“qĀTī0Õ,Ś1®j‰{^Æ^8«£†QVc#“ĮdöąĮėtEE!gf„›ŽTŽūÕ*Ÿƒ÷½ÓM \ųāąf×)ęįy÷±éGr°O’mōŹm9X¾ū0«%r„h¾e—Ń?ą½m•®p QSLÕŻĪAšK šĒ³̆n’°XęqŽŅ Ę»®ö{Ō šĮ5ERą§|·ŸūݧZ6ƒsqP5ą’‚ ­¶öI@"+’•ągB„¬/ӒōŖĶ›¾ŗžœD¶¶<¶Ö–Ēć֍ķµfYĀtŗ›ŠÖĢ0‰=7ī0Ķf°„5ö·koĢåC īęCįgķ 3[Ģ|īĮs3įö¹m“’¼Nmōø•É×’œŸ!qMśH‰mē#£nĘkālŌŗ:£p/‰ų'…x&nŃv¾€¢ī¶Šc3&‹Ē”DČK*ĖĀ8"ūō@ÓS4D}ƒe1ƱĢJZEłŖa쉰Åŗy'“”Ÿe?ūY]üŤõ¦ ‰ģhČMĮp²=ū†b(-+ęs·ö7Ī|6zå¶­Ķwnm­±ž“Œkiuü]¢Z®ƒ7œO8™@ČØl¼89ŲB•ģ,ēƒUeēŠ€Z™ŻkĄjśéT‚[‹ŪÜSiB™Ģu’“Ų•ꙟ¢dO­Qœ¬ū ¾ą½·}¹Y!pÖ£`I¦`uÕqgC~kŸ£GóN–ا)‰õļøZņž(3Bsqź‹ŅųŠŖ½ōō`ĢżŅ/ĘiŒÄ>ĆZ¬‘{ū‘ĘģåćŃæøq†@ÉRW÷(;qJvØ6*ŗw ]ˆ'Yā“Aę±5Č<~t„Ÿ¦Q…Ö[÷ŗ%įövä½øb–ĆųYHt¢¾ľÉb0>oF«ĄÆ”ėėŠ”Ķ ³Ką±ü"Į+ņŲfhEÆņĀ\ĄĀüÓßkžÄ¼”vb 7Iͧf7žą°~2rq ŠļHz0SÉp×µGN\żK÷Mį+2ŚŽjāG4Į 7ŻŠó¢ĶqĪ rV4³~­1)vBÓ×ÉŲä@X’ž4äŒöóF‹Õx;Mµ9©ÄĘkŌ $+£šoƒģkmŚ•ą"yQ¤Q‘ŗ'Ł“«%]ž?×Ķčä€EķkXv¹¶y.¦ægØę!b1[Ń%Lņ±×—BøŽ:ņf¦·vģ3"Xŗé|’ƒOĒą…[W ŪG„„ˆ’ mč³™uÕ`kXClŅQt…ńń¦.zOēHl‡HZæ×Ķu±Łä k½œõŹXčĀ0ļ‚-ŒyĄ½¬ž]²ß #½ņˆŸ”°g£Ę4U„ę”·ŠtSūķDČÅģœĮ¬É^KųZ"}³{ą”ĒĪ‰)bĄāž§#aDeø·Ÿµ”pŽJŠ6’aČÓī1źB%ł‰ńv(;Ē,ϰēĻ D…śe:o·¢aŖtLµfWpüŠZ– ¦uŲGižŸdjG¢/®ś2ī°¹o7“éńM(dՙL>•Ū£šĻįb¼Ź%Š÷ƒ£(¶i÷䂸ĘEŻ(š]ŒeCäÅń|ĘŌo’s’ešę ĻĖAK ÓʤZ¤‰»fJžD{4·oĄģXYDe4WöśmDē@ģ½Faō= Üź“ņŚÓfŠĒÖLńų_n¦ųĖ!Ÿ’ŠŽ¼śķ—ß^2Z‹ģåė‹ß®.žķ×Lž÷żĆŸ.žüoÆ]‡žź}öįćėæ@iėāŻß²Ÿū(łx÷ΐ’tµ·RĶ®æ½üõņÕÆĖ>æ¹üšįõO{)ļ‹(¢¤½ęb CV˜‡Ź½ß92÷ƖĮEo†®čŌW÷."’ÉŠ—R·­7žQĶf=ā} ŃĶי³:ZO1Ū|!(į‹üX?œē.y‰šå0x挄£Wn ųīĆą™…¶cd„` L|ó!‹ł›ęų¾Ŗ‹õ“ɓ’õŌh‡•Ś7lÅĢŁ³AæLĖ6-2ŪJ¢—;{·i¤µ.ZåĀeˆA–6̚Ši^ÓSę²s/`jŁųœŅ ¢3R†z!Ņs-Ż^‘g/ ńiv$N‡Ÿ^ZH2_²×±>Ģܔ݌5”¶›±Ļ›a”›€ffsd4óYl¬(•q¤d I·™iĄÖøĆYžÖ‰GÆÜ6Ė|÷į,ėŽˆ(¾#w!qΚcRā¤[0Øå“& ŚNk’¦³ Šä  æpNwõ=Č=¦ĆÕCŌvĖ  ‡śp/Ą{0õ,ĶvÕÕ¼ŸYb» –Bą)Ė“ ”U³šż~yJ5¦X^”»ÖhŪŽė¹ķO+>NŪF[ŪČćQŪHöšĒ98’t«f· ™­¼z8 UŃÕķń=ż³Ź^¹m¶łīĆŁÖR„»Ä…vƒĖ¢ŹÓÖ½MNęēuŃ5ŽƟłĮŃĶ2’6Ņ-„É7sŁy »×qŽT"ĆVŸ@Łfōī~—HeKĒkĘ Œzś |Šśń¾CŸŒŸr·ß¾‹·ÓoŌ•µ|:!“:¤›ó<¢$§…wćkƒxn² hV銬O³Ę™ ±›®R6ĢVČ“)•ÓŠžOĄIA“ϵ¶ł€lY‚ˆµ@–häĻCčJØd/é~é+Ą`ŅØL¬J—óq¬»eŪŚ(¢œŽŁ4b­#*ÖkKĄĆ XXjÖµ•?禒ȚćŠé锣ģ ,Ģ+3h¾Ī’ABv@śŖ’©”9śs¹¢ dó‡˜Õ…—–Žcė=sė*b4Ź}‘5'AĮ‚ģĄV Sk›³K;į7=YϕޤS»~™fwĢ/Āö„†µĄ:AāGģ1ēbPšŻK”Dvž^Ž`«ä.†£īó¹/ Bū»%—q ’O›įłµ>`k-šēŚįeßõ %OLšÓßŖkęÕrSXFæå°iQ.µ×µxļÖo±b(²ņLzøīŌ2ņ8myl-#ok¹ā^7Ā`ŅoMPˆź3Kjw$œ6£½R)SÜN”©Ro龜–4铈 ©ŌVE–gč±üvK¬ā÷{‰mŹ”ĆērVšé!KĢśÄ–™Ē)šś±”©e«?Ķ•?īĖ£śóū·ļÄM’gqæ?¦J#M\ķŸę‡^žéõ«+yķī_ß’åĄ1|C6¦C”Uōhj¹ućŲ*×m˜b,9Ž­ˆÖ$`ŚŌfÖy§kyŔ¢ŹŪ6ŖŃ„Æ`nĀ~Ćź}˜¾Ń’ÖŽŽY ;¢vUń!ĪqµčōBHĘ.·`¤„‡^cuńå‰źexąÜj¶…%TķūF5 ŪļźŁ*Ÿ: Ļ¤qōŹmß}č0(ž€ćMŪt÷Χī |«ZQŅņyŸ§“:ķxI ęryŸõ”PiTšŻł9SĻ9¦Ś8%CöP…’Žåuż(‰‚©Į’P°|ȱ č£Š”øœ& 绺\Ļč~Ėś ¹’œ+–Ńŗų•Y=N46U.EWRnՖė$..ćƒ!w„ĻŃj£%:X-Ŗŗ.ųU6Ż@>äKˆIvדQ%CēoE¾ōz‘ćšHiZ>āQµŃf#Sr§Žšņœš7æ—Sä$£–b‘łń‹Ģö kŒU™µxۊ½ÕŲĘŚd»¬¢kŽ2ml2e×mMœę(}zė8qcžA­×høŗĒTs’3˜Į”ąÅA9E=9ä‰ •t%)•‡L^ĪW¤ČŃée,FHOL¾":y὚5óź:‡Äō wĢüćłų±ķ$GR"jsŲčAŲĒGc_żCoQs{Z!Ÿ›‰’ćĶ»KĘB/€'5޼qi ¾DČ“ā®óĢ Ÿš>Xˆū‡.[ͽœ{ö:šQ4‰Š= ZčiR)[Hp_µF›>įA_\‡L|ØŁu¼šŚ~hņ°]E»é'ŗ‘rx†yÄĪĀInf9K&<£Ś5³¹¢’^ģgH‘“$Qü“ ž­V8a`ПEŽć©O‚8r„«ÄpĮ™ŖfÄh+TóŠØ9±©`•“»Ŗʆe?»FvŁÉ¾µ½+%ž‹}“˜‹:ÅiŠšbo›Œp±}`Å0ąq=źnŖį ™ ±š  ą?ś²Ój'pC¼_½‚.‘üwōšĢPøfÆWdīÕKü¶Įi3F•ęüī›P”cØöV½0h,ž|Ō°'qļžó©“=@¤1ąCjי­£T”'™Į~üŲąĒĒĢņę™tÅ%&ņ-½_ŻÓ(€Ń꼞FB²+ ēī)³ü­ž ŗ}”Ė™jT²żŖ |«ųüŹ gvžŁ(½ÄH.ŹVQ«ąµ*Ė{ę¬ńع£ •i˜"ö+U©ƒj@ÄD`ÄĶźS…RDӵ렄iŻQ°×Ŗ‰kgŌŽĄ;%ŽĄpµ?‰EĆl5pŅOĆŅŁx , ”&—ųāß{¬µŗ2R]5Æl»ö!¢2*]ówkPĆ.‡_#”Ļ™±CNŪż†Å„˜ĮSvHŚ|JˆĻ D×¶n>šœŒ—‡>W1§ZtGN%+!AūBŽ"šŲ4 Ė"šŚĢĖś½…Z#I“ßФŁxóīŁKTGJ7°±PȮJŒ¦ķK¦L½GT¬ü’é–²åqż`AkפēžĶŲ,ŠRŗaŅWU ./Ē%²—$øh d\%tÄ՗¹¦béŁ·æµ®µ@’ ±1Ž^L’ŽbŠ9XrųŠńµßīüuķF…ŁÕ{Ųka{ģĄF$_5ĢÓZUbBšGvo"°34…ņc*ØrgÖš ół ›9Cü4[Y %©Rī~ßkŽy¶ĻEÄź ŌøŖ¬¾×Õ¢¬)Š6!:Ķé͉šQ DØŁŹ ī mć“LiŠž~lčéĒĻĒ\Ń«G5ĄĶ2š\Ē-§*›®©¢| Śj„ҰƒµS„æzʦÕŽsuk%P.Tā0†z¢˜Š„z©75[Ž@łĀŌThć”8ˆe›knÜ0qg„wōKÅ+JÓyņq4`-¼ ’&Ąµ$ŽqQ„i źž³Ö©.A[zžŃ]¢[,:¢Ż(ż³§WI'u®ŪĆ(ÅLūŚŃ„ ֘¾īˆŌĢZfcĮŁņļƒ’2%u•/§¤&Óp†'‚[«’­"Į‰'¢oĀŖtŠĢ}Šå|bXĪ'_’724ć 2-o.?]½’ų7¦d~{÷ś—÷ļ~z½—m¹éÅé©#«É"n2°Łr4˜Šį],³ŲŖršĖe©æL‰ü½D›®ņ¤;QlpR͆„WLķ끮)C`!ZZ×ĢŖśģty7 ę³ŗŃ%ļ[”ž7M>c—¢ß«Ÿ&Š0X5g„źÜ‘hY¼šUNŸ&©F¬óęšX5.ܧė=ČßÅźfd±žž…K¹o­O’ˆMŁF~$¢‡Ć“'cS±öų›UŅ”°čŁ~XĆį¶_ŪɃśæ¶ÄaéńlCņ)£hQ dPµ ćh¬š!V”OPē•“cZi‰ĆŒG®Ŗ hĪÅ=ōŹ ģ‹ %2ļN25)Xń‰Ÿ<Ś?åHT1œLp’e…ŪÅśĪ¢?n[‹Mį-Ōó¶nCä§Ń=”¢ ±IČrāD’FX-‹ĘŪ:£°Ņ›ØĢ@e '¤‘hŃį…BF®ŲN.—7S"šsEŚ[¼¶ōŒ²ŁnBāįĘųtĪÖīm‡/ŹTE€-D6&aY‹±HēD$J’œ;Ū=>cyƒŽzjEfƒXŲŁEyDė2>Pµė äĘX5l(“>²=—Łļ!j¤żķ™RlxņŚŅ#ßG•bV.čõ-23ŚPoŠ@“*V¬šn’˜Öɤ|÷ĪO2€—¶X95éģiąŒõWkęF„Ö©aŅ|a“mރ‘3É÷Xu’8]g H5Ydé K ,n=¢AÖ š¢_oVŹ7ł…Å&2Ģŗ Ų,Ÿ9ģńPŽ Μ­Ć–?ƒccŠŚMl¢!MA±ø$š„I–Ł)Pk¾ ‘™nć1ēÉĆ`’•Ö'IY&޳eø¬Ŗ­,Ņ®¶#­XC9XRĘ]“P©ü"1(ڱśvLžOėsSMVd±:kt~JŌ»×>²_Ģ Ć:kŠsük“k”z›+Ā1Ē‚¢Œ9Ž©`Ib&x"9ŸØÅō;”#ģEōntöHµfŠ*`@T\ Y^ż¹’UF”ŲcŗĘ¦ŅˆAW9šaÖÅHQs ČĘRS”J.AĆ¢³ BH·ždŒS8ćƒ3>y¼'Oć,‡Z›’mÕä Pø=Pä®Ū¼śR]ä4݁>Ž„.b!`ń/+[U`£]b6Ž“ŗ’-§Śt$*šsždcĢ®)OĮĒ+ÕÜKX„ōÜ–…¤1®–YŻ e#O!ä>ibŠŠ©, ś ڕ½ā¤¦y/lbŖ·§«ćĆų|§ŻOģōQÖ*$BÜO„8‹?–––ÖM‘Wx+‹ -Ÿršsļų„6©ųŃäÉӋuź^ Tū!\;H1,ÜW³Ö ”Ģód 5¦V1ÕgŁȉل²ŻK¶Ą”¤Ÿł8{hōF)sæ?’óĒĄŠ|źń¤ņ:̳•āÖØņ/¶g)łŚÄU•Ū,@9õ™Ą·ž+ŒŗķūKČČ-Ŗ ī€Ć§¾PŽb:—ø-ÄÕ#OlÖ†‚ŖśYXĘ*ė: <½ł²NVöÜRÜņ<æ"ŠK¦’Ḿ¶#”aŖX³?XȔ}…c²6ieJÓėwߥWˆéČq<3£nEg i”4ø*‚`@!%‡5d钵TĪ·-¬ļ°6Ɨ wgõU‡%7ąz7ĢcĀ9žB7cśģīŁ,6’NŖž{+ElŅQ„¤õWlt„ ŹóĘŐL~DæĒ“tŒō%]ė‚<‡ 4ny©Yźß¬,¹ņ$`d©S8ōƒC?Į”Ó܂D7±ā)7MEPˆŸŒ8ŌqpÉ¢»ӎ= Ŗ= ^—›Ź²u]_&-ć1ŲTĻEÆA>ĢNQ2zŅ^Ė“\+6„2fAWĮłOP³6vy’ …¦2V=ćhÖ“;~1Üó‹Z)F3VŅuˆZeQĮCLVŅ…¤®:|R£a©t#Ę:ްÉVފAS·ĄU<żŖį ^Ø"ŠQO¾r«"UȂ‰öĮtE?[Ě~™d ­I_ˆÓcd…ßÉ= ¶Ļåd¼Łö2X=‡ķeJ3 K"'^£X2>¶éå!CäwīI=µĖŠ>Ł·ģŌ¼µTõŲŚŗā„ł śIī[œ V0$s‡Ź2z!˜õŒĒ“ó¹Å]Df󢟨~=öyā mR ‘ü)ŸNss}‡€u­H‹™«~Æw*ˆNžŠč„= Šģ$Üé'ķ£ūÄp°OŽā`OŅĒłėØĘ°ĒCk “Š2Ä/½|÷æ]~ŗ¼z’Qq”ų˟^>Šd–§Œ䣨ĒDóšb–½Ē›]ųÖ'0H~q›œĢI)ź B7čN’‘|™Owå"*į÷ĘlŲĪÄgčæü’—Tµ&‘X±E¹˜AVŚģP /²·}kM“‹S\j©¶]åM„MJ¢—•a‚­fj,V¹&M6uU !Ź~X¹ŚEX*%Ÿ’Ž™™””X‡xrNņ†F]KX&Rµ[¾{ć]$ń#’č{…¬£ČŖ^žgłÆĶ*/)­š2‹+ ūŽ[ÖŹ”ph ”Éł@ù6Š’b®÷‚”Ū¤}…#А‰aEµōdĪEóį™¶ ©ƒFĈöķJŻH!”`“1AŲĒæŒ^$…Qō­F,‰ŗBOß¾ČT‡Nkš¤±üÉ1^÷¬‹("ń•påw£‹œi—¼R*Ā_¹7ęJ0Ŗīč<™Ž&Įž€ ŗGpüŲCŲ·@"ƒ<6:Év¤ņ'†!2fäė ĒX5³–Z«YūV7AJęš³xͬ\!ęJ6moLPqąqUĖß÷sēeĆ”fLÖ2IT©ŅœŗńŸĖŪ‰D3Ši‚į3ü^“×XŹXāzpƋy„!hĶ9Ņr²"<ÖD‰…(ū)K±ķY ­’X³ö$rÓŃ«5'&΄²bD®‹«lXŠ‹’`ÄDx¹"(7ŗļqÓ-µj+aO—\‹œ¬×k€0pQ t¤Dījz8Ŗ:FŹĒ†üō6„ųLĖeŽ³ĀĪZÓ!5`CJ-Ø-ÕHhš«õČ”ƒ)•Aę;]ŃaS!‡9ē¾0™g1Ż_ø–šō@Äf€o/˜’@¹ĄśehübÜ"vDvk² ŲŠ28±u£c„ųEČ•ĪYˆ„Y^É?8éē‘›Õ»{l:żŖū™G īXü`‚OĶž`n³@yÜ“» Ŝ«R5±ņ;¼_-—“ĪŽ.>Ķø:,ĮwļHuVEW†Q{²*ւÉ}kdēį 6s_3Ś“µ_Ķ3''£ūH7Ř Šī…yż&nPbm糁-X†X©²jx¶$÷/“;W‚q“Ū{šŖˆ!Sš&qH÷ Ż©S&£“˜»ž¤Šõ']2†®ß§ÅĀ”E¢’ŽźŻ;æCk¢o½¾HaųˆPĆĜ@y w=†²p°Ń*?,DaiIŗJŲ~QP¼›Wö”ł\Õ Q#¹1‡Ió2²ĶAy ³]Ė`€ 2ę/–śźZ£ļs¤ø©¬Dś–&¬+n\O O,Éuāk»%mA0ąīÄ4ŹfĘ«LJqŽe“ 63F£Wł¼ųĒÄ ­4†…IäŽBф DŻŌź×֗31½šßÕFjV×e$N«hU.åX›9ÉP|t \B°Į×oßL±ZʚųMš T&†¾Ķ\×ĢGNąŁ ĶÉæƒ>'ģ G2zE/5“±BÜYGbĶå<=÷FI“Ķ@ĄŖNEm•Gm7ży5IŪŹ 6ē²åNˣ̈́ÉP“=٦–‘w“U~“RŻHhXåG¹ėÖĘ× ó>‰mņģ­,ĘŹ tčb œ`ĖųŌF)^Äi\Šö~bhļ'’2Łō8€»|§\Ņ?]~ŗśųśÓ§!nKb9ֆf拏/’ņś§L>łźā§Ė’Gv&Ž$! ¼ļņcöśķĖ‹¾øŗ|’nnöy„XU󰇄ք¹ēĪ”ÓĆØ›žÅį‘BŽDÓvÖ9›RĢ`EŪ`evÉÄ×ę5^Į69]›h}ĒŃ*'tįźAVŸĆV4ՆÕå2`Ėšķg²ĢŒI.×Ī÷P‘Ū (<­Ź„^Œ¬5«=wģK1æ×@ˆ#åŠlø[žōæ÷s¦£$ę\!=o@C&LÆ©Įɵ•šĆfų.3Q¹Õ¶æ†Ÿ¦ÅܰÓS[u5Ӕ׋ޤ!c&b«÷k|ˆH„4žšäĶIń€-+{„TIŠŖQÓy/‚X‡F™śó®™'ąW›¹õ]vŌGØ"_Ek¹lŸŌģœLĀßdą-ŗGérä}Ż& ؍•ø(–^dÕuål³,/ŗD|-Q'݆T†¾ĻCNT-ż÷<—°øĒ“0z’'ŌmÅ.;;ö䏓Øļž¤˜é'†™~2ĘLk—9Ä»Į ¦ŁÖ»wŽ5†ĒczEp‘–ģķøĪ’ÓŚ ,ŖōRšq=®Ļö)£ĶÓEŹŁ<{‰˜Æ’JP.jnĄ©Mŗż€\āęUČ7xß,$’å’쐔g®ńRō§³_ūψW8»r;¹ ā*}ĮÉ1“­i)›) >pH‹ĄV‹a:M쇢Ļdw!{zC¦vĆ~@|3t£¹2ń7‰Ė»•å$>äM¾ģ g˜µKįĪt3¶Šō:Ø"sÜÓĮ 4~Cõ$Ė“~ŹgM®½nį¦.#@/ógļšV ŅG±8#f-ö[dį€dŻ„Ņ0Ś,¢g·īHu…/v  #µMæN½ĒvP%ŻWl¬„yŌ5?h²e¾Es ²ī­įŠ&J؁¤Ä>ćĻd÷ąŪ”ц‚ntų „¢%šµ¦źc«Ø #«- ąčū4ķ xj½OĒ<Ļ8s¬ZŠŽĢÖcakPĀOƐīS’ŗ5öó„Ż©źŲŚzØPjDöĒńŽč\-¹“”øbÓ±~Bw‚‘¤ ŻXbUş ŪēHĖ+¼» ąćõz0Ę“„›‚;IIŲ7µ8äØäēŲĶņrmõ ӜQˆ‚ &D÷š50ėāļäė>óė¢č /oLņRœÅ‡{ž\6lž.A¾ļše 3ŒF¾Š7ZÆ>YL”Z()]łhū³}‚ĘĢ—émģ9åŽF½|č9P Ö±ŽŃ”{ä¾I.RļG³įY–•T„š1¢»ßgY äxe„Eõ‹Ŗ^.ĪF¾ŗÆōFˆĀj¼¤‘kš¤¤Ö;P³Š|_¢xŌøH`!ģćŠė2Ń·Å’ž:g»Œ"ŽUµ×'‘ĻF¦m[[SLKOøä7 ļ0A2=Œg}*b`ē֎:HŠ-¢ń–h”X‹‚ĶĄ.E’ˆ[‘iĢ׌€`J? oÕN>#Įd54eʼnG27’ū҈üⱦ&¬„b4īā įsŽ ÷ żŽsIŠž^ Nł3ö<Ōj ̤'YŌ“⩵@<·@°‘9įBœļóʃ‘½&,Tļ0g„›ŻFĀß./Æ3'ŖÖŌ³é¾( į`š¶N„i²v Sp‚D*e%ü€~¦ßš© Ż_°ļ<śZžķńļčk·1šŲ'9x}=°öY÷1¬m·āŅXågŁoP'ä;ņ„zė$1 DOræZ‹A汜”į壄CėÜZ™¹{ē—Š ŻŃnķ€U¼‰U˜%ƐVU>?Qmź©éŹ ‰2ų  n߻ΗUJ©Į£†r3»ņ/‘fŻB}J~,Ö @×dö8ŠCWD½ų?cožÄLnLņyāF^¦ÖĢlҵŖĮĒ.wažĘe$lQ}ū³ģķŽ‰Ƶj4b•>ö×{АÄQčä'l*ĀuŠk;Żm¢’"›‘“š”kaʉłYņ÷āXšś›ŲbpćE™ģ­¼Ź/7Ä9̱)¬U/Ūō›Č¾Ų‘ų3ĢŹbcJ!2É@KKąŚ%Ā@šF‹ŽŚāź`l\ŪŖ†b0yĪŅ9†ƒ=y‚…j¦vXa å2!D&ņW™(°Ž¼›…µE"Ģäf ¢œÜwŁM¶š^Ōō$#—ā~Ÿī÷éī—"ČHhœóŌ\–¹ĆH-“”m³f™ŽĻ8U1Ćrš©ÅśŽŚ™ė{{½ńóä-¹ø#&½vgūŸėD1łüßYö‰ėŒtņ÷{™r=j®Pk…[µŪŗ‡*MĶ%źd- [ į©ĖXŽAž¾¹.#“K¼ĘZID¦ÆR=ˆ!ˆbß¾ø?Å:ŲbQŽÄ9T¶›ƒÅ+nĮóbdTż¦bĪ(DĮźo²HĢÆ³7^ė™L¶Č¶Öp'±®Į+ˆ'$TλЪ$† ŚJe;”„ŽŃœ Ė5Ų(‘Z,‚jưv(ėķRłŻ /-”_„Kœ=<¬‡ž| õ“ŪZ{0UDź]²qƒBÉæ`²™Ūr¹ķ×kÅČLĖBåįjA˜źx9ę^›ѹEķl[?ŗ`˜„\õķ”emmD˜»Ņiē t%JZ™ĪݼP;[jœk uåBcŻĶDքiXkh­ •Ló%Ŗ\„MwĒ‹Ź1ē¶ęüxĮ—BRoQ* 3æßs"ę ƒ0e[™ÓŽ-L"Z«å&Ņ!HV0 #'cēY\ƒJ3s[½'·ä<ĢC—S>¬§1%ė3…‘Ł+ĀĪMžs„ė«ÉŸržü(b^vŖš½x°Lüd ü"ū„ĖRˆ·;r»­kžÄ@²³Vé^ž}ߐ)vuėn€<Ęļ…ó Å sÜZw¾Ź—%šu*ßz]…&°–"0ń70Ŗ¬©©¼\&T ~æ8ē•“G‰ģ6ų Ŗu_“|„ąö<Ķ#MĀO (üōé-DŸ÷/SQī†*glœ€ķš"¤…ēė°kĻźÅ$¬%–lY%ŌNžIŚcĘ«i_ū-@Ļ)€«P*ׂÓ;ę3Ó³\,vų¼–3F“Ms² pēmóvč ¢DJé*ĄYÓü0f¤Z£”ČéK’äØŃ¹óh62EŹ£Z-ČLėJc–}SlL˜Šµa>1Ų č 0Śø½ŒI†Ó@’Y”¶ ’™Jœ”‚×…“ĶĆp+b¶ŽŻ6§āR!\ŠNlŃWßTŻ ˜­.J¦Q]…m0(®Ē\A)īŽyk0Ā`‘>!Š»Õ&UU?…m)Öky@½'Ęż;+nŠ’ó¤Ķ5­U¼Ų›–Y:«ڱbśŚŚ=8VßY€ü™åAua' (DĄ_Uv¦¶Ī…Dq‘Ųr<ŚUß\•ģöŖc`aR¾Äeš±ŻoļœĻ™ąīõ«Aæ <Ó؁ó`Q1ŠO²Ė%€`‹ż%µs  žS’³ˆŽ²¼Ŗ€›E7^ŸlœD{QXhĖÜ9¼+}[7µ8ś*’†¦mąžŒ5JgVfŹ„öuķ6wGĮŽ>ՍLŽ'Å#h'¢‘«cu>Ų‡lϵ&©ĪęYöj” >~§'+1³ Ś=ėA^Ö±„ ¶a¤×3”'*µ!‘ĀOqæøO6ŃNęVė" ł¼z®¶Ó”ėŖ¹iį7Z A‹,ź—Ø>.U˜§…9!lϚ~.Y«#&ę5 DHo{ń~^¶ė<”Gr#äß~n„ÆŻšŃOɍh&O»rµNp4ęp’+Ź+ØI …rYk¼gZfD Ž£k¼ŽŠ«Ģ_Ņ{ō§.߂ÜÕ¼żÅbö’ŗīōīź0|8¾B– ¹łĖÓ0D Z„å2.§’p­Ų“H}W³ˆ'Ɲ dFī©'£=a($jCU¢¼…"+ōL2¶cœA³źzcH¦ž*į‹ Qŗõ,{¾p1)X‡¼Tō™E]1j•„Ū+™ŗ.DõµżŲ?ز8Œ$Ó\5ó$1ÆĒ5y˜Ą–vf„÷Īu**,ģŠT~rQ­%X×÷zīhæaeO˜żSPRN·µÄīL$¶rŁn‚¤£äKśk˜ą^żž¬u‰ĮĪŗŠŌ°fŃnBį2Z‹’¬)źŅ1‡”!¶¾å¾²ŅzŻz ö—‘š[Ā /ŗ2/F:ƒz6<Ąß*ÆolĮ€Œ©ļßR„»ćiv?mxj­OĒ­ åB³ vĻID¤8Ż”p-åLčIōõ`}ėOøĄĢō[É94ŃXS³†KųBœŠw”Ź –źGŲ'ȁ¶).wČY™`ED”é×÷3©–“4•‰õgO{pqŽ#F»gYrķ”;Z·„töǼcł$Hӝj¼’üęm܍V¦ÉKOg±wŻ>š tj.½`;+Ö@>°ŠÄ‘g[ļÜŗiµż—Y؍ę1xŠĖPź  ho¹ß4øóbmĻ6ic&Ł*kTėa€¼5 Æ;³ģ47ŃČyŃnŲ„H¤ŗ"¶°Õ±› äC¶&¹ <ÉAV~h2„®ÓŪEüiœ‰V\Ģ-Æ1š $#Ž‹©*uf““Ē]&õŒä>U½˜8TBƒd؄1“nķ,hYŌrj‘ŲŹ-eį@{t"9"ń¼Ś€xZQIl(ćž6:9 e; Iv¤ĻbJŻĢõNe¼ßę+ō61{ Źp’Z™š\ŪQ5_?ß ±?e[Z݃5QŒNW›oKK»@Ą %ģ äė˜PÉčń“&q9‹ńŗ«GEŌe]š0W¶³A,Ĝ/!ō鼞)² ”G+69AP3œ¤$}Xj›zʤšį`M]]HR5šé«#Ūāup_±R2 B‰4k„ČŁȽ£Cn”˜4‰  ÕĘßO²“i#ĮSk$x:n$ %¦³eܽ#ŚłÄś Nw©Ė•Lį*sŸŗ]Z‡MźPt¦U0®3cå9YP§9‡­U“о‡Tš³ –HŸ[Zź‚$>|/aė ²žYĖp«d8©ž§e‰s©ø‡ņĮż#īäcł·ļNņµ[ŻIżÄwŅ*š§ĢG Ļ~jšģ§’:<ū‹ēÅOP?üķćėO•ŃģÕūwW—ļ~;Q¹öGMN(Y9 ü)*” ß_qŁS\E»F-Ļ:䗜e҈0+#ÉøŌ\ c¾ĀÓķ¦X@ā'š¬ˆq~ÄfV„°OkHp7•ēe” Ÿyttū;懄C5ļcS]dł„j] —ØX„ćńDsŲ%S @cĢŚāp7ČĆODÄPtq³„É  Œ_%ŁÉųŪ¹ “aŽ>“`‹ĢāėyÜÖIĻŖi Ģy_Ղā L†Įś,³v°™©šolRōF—½Ė‡ž<š 8ŠHĪž%āM;±Päh yœ‰ć%‡WeåVŹ—kĀ]‰4Ō#¢Ā—ö*)Ä“l©zČŖB鑔¼{¼Rźˆüö7ĮŃ@µ³ž¦©,šß³#6ā‰üŪ·|ķV”Ÿ8b#“ ØÉĮųhš›ˆT®TĒā×~\ZĆо„źÄJĮØÉ•ųŒ¦ńŖ<±{¬[łr<ÕTęŻ{ˊmĒaƒČ?{Ąų“l^Šjš§c8ĄÜʱć"ņ;śćMLDč÷@ äCŪ ¬ų8?$€_U·ŠOjØMv›v¼wĄe?#Ķh^NL÷āÜł|ÖŽĢz%š ĶŪ1{¼Ru^xµ,c»›>1Ž•±h‰ōńō$ÖĢŠ•‘;Żå3CäN˜ Ż„±õķYć<ؼŪĮ3/jöĀŖwļ¼Z‰)ļ°¼čų0ąr=ÕŠČ»Č”¼Ŗ ‹‘P*Ńb["}ŹąŃĪe5pŌ5Č-;‹$ÆŃz—’E;.sģ3ŚQVqB†;žv«"©ŁxI#)«¤&˜Ś¹ŲP·]Öh̦½ŠWb0Ļ31vČ·ÕVØSę‘WzŪÉčMEļc„÷ ™ė·ł¹&ˆĢRßdoīWąPLy'IeŽz9YĢpœĒ–_£ī“{ĢČA“ź¼JåNõxŗ(—ōØū¼ń³bdBOг‰©Å¹ä{’䐼āT'™Y%”䣄ōæšģ˜dm‘Ģ]³“ݙعµÄŠKKĀŌģ&5ĮĄāRœ|ŗÉL8©ŠÄTšÜS=@æÕ½ž¼ćØ“Āø$±pž­£ĄWĆ*ˆCāĘŖFT³“gy“)ZɊܧŲĖoR8÷7ēžęė=že6k&4…¼—qŠ B¹¦pĄ·yiu ™óØFØšÕ’T(ŗ~„ŻI`l°8™ĢU!;J¾#]©%™tźÉ^Ż?aÖ¾JÄŚmĄe]hĶnƒŻk= ź›Ż$Éž;•®eHŌ¦VG¦!ęUĢP$LōjiĪ B•ņ¢ms ±š-v_¤‹>]ž±·1ę–+ĖŽ YÆ4%CŪÄOĪ›lwĻ$XjčŹaøwōņp TŻi„Q(œ"R&IĘ1B28Å"3J6‰›—‡Ńžœ…ßڃֲ(ēnŠe›[ų—³_f²óFzÅ4ĶW½˜óóÄßO(Ÿ­æbų0ć:{ƒ ĆĄ`łūdė\5ÅF,ż¹fģ7»%~f,|‘»h`]ž1¼BJŅõ®ńžZå+å Tkص¦_TZ OņW5ŁöČł†¹j“ž-Ļt±Ģ}¬ž”Ėć¶yShĻKmwVa3…bfQ ¤Š£źā&^‘!$äx!€+é€4Y¾xų'łĢAŻi4mŚhķžRrM4[Še=_āaā Cå—hēÉŽ:ź»īŠ9Pb½Ęu®Įći8A.mĖCJlēéPĖØ£fģ3,¤X=ZģŻTŽż¹'VÅG|É^ ³ąEĆö³ŠŹā`xÅv¼+‰ö؏¦iī ńš'ŁŪģż½æ9ą»W~•IÄ·į Kp?¹8;‡ šy¦ˆ7<ØŻ‰}$”ĮČ–!TMd.šĄˆ¤Q>9)uDm˜“Õ§’•[ųšŻ ņä±bß(mø~ZńąEgfÖl^ššyԼĶOåLvγĢH‰A Īę_[.AįGŠsĪ]Ø2ģyU,¦NÕŅg÷D„NóN›»TW ÆčģŻ8ŚAiŻ÷ŗøŲÕ¦p¶‹U/ū!ąp«&ęž»śn•  M$"+S‰ćZ“Œ,ø"ˆY:²¼ŻČ÷˜IäÉ”š–{«©rĻVė­²īŽĀć\ĮüŲ…ptКWn½b1°Ž©÷YXóćē%ÖšäH!ĆĶ MdM2“+Å4Ŗ0Ž~:d†Ē2ĪŖe𫐉™ŪZxŃ;%$,ĘŹõÜBY«³ĻÜøõūÜQcē(-2ī1ķĖäxąA°ń›Ś]ģŽ j*+"ēźżK®$gµ!†bA˜€Õģ׳¢žńV”•†~#ŽŪœSŅÜ=ĖTU$€&mĶcµÆõč ± ė ƒ“ģ†Ķé™čyu¹”žT6š Š•p÷Žń. ķ,ßø–G¼Ę&§£į|Ą^ƒU’^Q`čręV\'ałYĘ…šZ×ZT•ōf(«A‹ÓÜÓ“©ćkźųęńϱ™ ?øøUg%}sX}k1õ äNŁw{ė@mDE‰€Ø!źĮ`ėą4Q—;a·ŌD¶å° Fą>|gÄo`FōĒ“˜ū®Ÿ†!C½ Œ~-žīŒ„eĻkŻQM ^dēx²·I:ĪĖõ{“¤G×<\ŽÜęę*ZÖjÕÓIb³ĶTkY4ņŅ÷ŃĪ ¬U_3J(H3ü²Ž)E`3 ¤Ė£Īiä¢õt¦@Źų«å#…”hg„ÜEX“ßļĘÉkä¤`Tš€łTӂ×0B˜% å˜āOg7é ¶"W>\”(‘vŖ90!Ćj½(:÷„r†<„å‡AgÓ09-ć ŪźÜ3jʗH<^ŽX”zˆr.Q“ÖĪC4mO,Z&āk[c%ń—B\*ŒX—żŠĶ?ŠåD[ņćæ‰­Ÿ”*Å·ģęLOŖĻó&g• ׳XĆż™ēk-}ļ ]» “42’@@­H`äį”lŒ…³•Q@”^ĄŌ&%ß6ųœƒ»ŠƒR¼5Ž)TC™ß™!½…ÅPxKµl8-Kq½äS±tõ†sƄ‘SpD¬LÉ$דĒ*wšŠJ£>Fd"Dł…ś#sC_ gŽ!a<†œhE^Aƒš.9m%0@³–šCé! ćĆdąL›¢Ä£ÉWŽ &ēҊ ×hśf»÷)„=.zS— h¢²Ä†ą:©j*M×]wn "ż^ ‰Ŗ„õ†¹““õ»Į"ÉdCĮI¹ć?ÖÓp}¬ĀšTžķWųŚ­żÄ‘ ƒ¢Ųå©·?uŗB·afž)r(¾ä Ēė@IįR*hc- &AkgĶć =U\ī4ŅÅ©gJ÷č|Ņžżå'ź}Ī*.M%$“Q|¬¦7T×Õ4–3B —ŅTžD“ź¦O՛…é¬T™ęA wl&Īw½†/ę*CČK3nŖ€dŠV E!'MÄSjÜæŅʑÆ7ŁgŁP²pėārQŲ×ʀč^YÉė.Q)‰%œēReŖ†;ĄueŹn€ķ¦„fDB2 āī %#K#/œ"`FżGPг ‚Ag}ćšĀčļä&¦¾‘æuѰ €ę µ0¢(å v‘Arʇ Rŗ-LJ”ZŌłå§a”×tčę“uæ&äg÷O²ÆiČ7ÖņĶŃ&‹š{Éļ?;3ZöłāSöóūÆ@öłāoŁĻßæ…ŠföóÅåǁ6ķ5ķ€čśØL±Ÿ’0ź{ jč9ŗĀķFCŠFńJ ŲfĄtĄ¼·Ź¶*£²)‹ U I•ÕٙƼų¼@“ˆH2h®ÕjĆÆ8Čæ*®æVY'5Z£’k­2¬7—J @\/x{Ф2źö•ž½QĢĶ蚤Č÷H„žĘŁ}ėX0žElXÉā5[äx"=Ł67E˹Āo³j8ž ‘‚rĖjēgŠLƒbż¼ÅĒš®#–Žāj׳IKø‰øärŲP’%µ¾²#<ż­2ķŲ¤ÅĢ[Æņ$6ƒ0ƒ S3ż=0#0&$QĪĒ=»‚` §žŌ`^Ģ]†©dx” ;ÕŻź˜ub(ź6»Ų5€œ&vņ•a‹SŚ`Ÿf㬜d†Æ0ĻTė{įū"5Õ\¬åƒĖ©8’2 »ģg€Ājōģ$H×zx^ģ²_óõFģé¼ęoŸźž¹uō$ńJ/¢Ļ–yc4 ,‡M¤$a a0’'Ł„“āk‡ųf܁·+ćydf 8Ō(¦x“2łˆęLĶ5%ph·Ę¢£rĮ!]h`–ū ŁśĀŌz䆩p ž*”‹-Ż– ż– ±šÓ\)_`’ĖŠ0µ“iŒU"w5uEv•}”׳®: ĀØzŚŅ ŹŅJø±>A0‰šƒ„5&éSrbƒGsÅ8,”ŖÅ ¬™ĆjŌy{›½Z+]Ӆ åŒXį-^JŪõ°i¶żöŚ’Gr ¶LŃäeŽŠŒōDųŚwĮ¶4ńüŪ˜Ļ—Ėõ§ ԊCHoē½\ĘUĮ‹ŠRÆAĖ&¹JåŚŚ²óŅŚĘ3—@8{‘ PAMå 兜ZķY£-G“@ŃŻcM»hŃ ü0rÄéxwŗøN¤ĒĮ‚!JÉ[ė„'CS‰u5 RgūŒ/‰­HÅ Nć¼>ŌQ[345I&ͦā↙9¢ž&ž©¬O€"œ[y8-†²iKvHR»xŠ­Éž©©A+ø©§õ›L9ÖåTAg7ŽÕ®UFŖž”ŲļŅ“®”ūŹ‘ß~8jːR€ŁĄänI70婞ü`YŻ~z{OrœŪGčā“É;ˆYǩ˜"ė>bfåļ÷#OG?ź ¢d;„ł näæ@§`‰oµQžŻļy›gĪB hz‰y8Éī¦ķßX;Ā7{ķÜι—‘µ*HÕĘĄ1`ųįėEēx™C„‚ØŅBä=2?TcļVöm³õčqE Óīūżķ0š_nįSrŌfJź gyP^ZCæz{'a‰&?äŚNY›åݲpe]\ĄKœY©r…}ĢdĆą²& Y#2ś"c± c³Œ b" ØKĪķ¢$µŪ½0!c@Ą4‘Ā‚×8øW#Zi~”Ś9aīŃ*ó&gXŚ9’e±e£gA£FĘł^Ū’Śq&ćef9w4åŹ5„T5ō¢z¤1°;¹œØĮ7›ĮyąłŸü^(š0ņ‚Ž8dŻ‘å ś“œ !Œ™£vąŠŽÉõ4Ķ;‰„azm)_÷ĘjÅGd—v±!Ī©“IQ8¦\öāӖ1nš‚[×įń¼łHZ¢Ż{–8Ɏ,‡Ø ī õ„‡×x‘kø?©TĖ>C“šwć)ŒŁÕŸ4¾l(EŗŲ–öu^¬•†į2iM¤i+ø"ō{KČJąž›f„¼¶j½}‰¼ZMæ{GæÓXŻü|Wu=c˜d(¦Ć…AŠ>³Ļ²üŠ©•rĶAMŲ<ŁĄŚ]2ę!•.żų_³§iÓĮ7ÖtšĶ·ūķ]É c. ‰ŌÖvęķ0Fićō¶Öf­īB‘ōnŪX@§ q .¶ ŠßUTqe0C®“š‡eo”U m±+)Gmé_„3Q@s`l=øń”xbJ¢ūĀéO͕ބ‹Ų$-ZœĪ¢$Ŗ.#ąĒr`č’TL~ÓW*62šDĪ“‰2ž¦TŽŚńQSL!SļƒIėļ7 ‡=̹É“cĒ.„śQQŌfį‰jC½ņ ņ‡‡Ä˜†Q ¬ēR?Ģ 4ØŪ$ ‹å×śē2}tyښ>» łÄ›šš„̾F}o ”® J žL-|¬¢ŽČŹ3ˆ>Jéu›ČSnoY³VøV”ƒūā¤M–v’|c$ßü7:Ižrk ¹©WÆ.޾|Ÿ}~żńuöńõ«×dōł7ÓeūōŪåūM>\|¼ų巋æķ„ÆZęyq[ĆɅ#ZÉL5rÆ ”€±”k­µv ä¼ķöØ mO›?RQ9¶*,f¶¦iwā>”¬šŌƞ†Zug+qqØ4tÕĻzRœ®Rü“Ŗ7>œÖ¢Y‘jDŽF8! ˆ„ē%6LTå$+Ÿ]“óĪŠˆ“`ÆņY¾žÖŪķģXӍ£·įµŒŠ]dP¢øÉHä_óhg¼¢¦˜ŸQ(ÕćAVYhą=\ „Ė Ź=ć* !é«Ül=ŻˆB%„NP“!½Ÿ÷«{‡Ō÷÷sialW:KAGņHøŃIMō(Žsʰ©ōÅiå–J”ÜTvLŹ #t1åĒšž9ņÄõŁ,¬šdäœA±6ų¢~¢¤ŃQ•†Cƚ õ Ķ©“æÅ)’ö~v­OJšÓō›»¹®gAōÄI6&ķÜųĘ:7¾Łćī!ļ”v†nT¬ƒD¹ąvŁ—;’Wż‰tƒš7H˜† i¾7dŽ»‘ČŌ~±Ķ‘Qe.¹m\¦ §Z؄½ ćyZoijpņ”›TNąņ©‚Ŗ×Į>“œ×kŠ+ĆΠҲX"Šŗ±±\I^°–ęz0b»Ī7OČ;¾[3±h€‰ČI‹Ū?ŅdCB&fĘü+kR•kom²ÖĘv`ėŁÓҦzÅŌ™z§”-žZhū•Ņ+ J8‘’h®/ä=ųĀ?N®}­fiÖü•X¢°ų .”Ü xµ|}Š ĆX5¶‚øėÅ,¢ėĄųśždE3QNnpŚhģE§ÓĘ ¬žėB3›ĆÕ5”ķkoģ7Ź&u[»6Yė$LŸ ó[|®ÉSĒĄpć£Ź© qs~ūh×csXYμÖĖ£˜ˆ‡ö¹ŁvŅC㮌†žq‘źJ*m=`#°—J°ą`Ėr#aņķč&“0N¬Xyč"rm: wļ 5Lü¬Ö¶„&b~ņ|øö5Yćż“nć‡ßęó¦0“¢GR w44ŗõ±¶Lų©!=Õ·T]Å iIžŚ Ŏ”%ĻŌŹł†‰£(Š9gr律ÕgiƒĒ3kšx6nššńõž[…øE® ,—±ŒZ’(‚g¦k=bĖ·ģFśVšŸ²l©Hݙڔ†æĖńO’Ń»w ?ø³!.†¤U¬äĒ ē•źV$ł‘ Ć2e Ė ćR¼¾MvŚ”m -U €įܙö"³žku 0|=³tÅz£G„jhĢ.ņ£ZnŌAPޢ͒^=ŽzXhŲ ‰QT(]ÓzŹØsz!opĒE…ń'‹«s-Ö䊷7®ĪŸ=ZOę`>uڜ‡3qji]gh9D¶’*Įł\SīK0*/Væaę‡ ¢Ó•¼Ž–#”$V©®ŽX¾‘ū¾v+€E?qĄ¢•.&Éx§ņŻŠĶ ³khx½©É±©j!³ö Ż6TLq«˜Ž±£<”><čSøĄ1³ Š)Ż„`?ØLRĪLn|&0‹īŗČm%Oz®›£› e4ēāt*ˆ9 ~£pG,ŁĘÖLÆNMyd(Gu;CĶłfśė›˜ēņ#d|Ē Ō)ön5īōÅŲż:ŪC‚)&P¶„lõÉ’Ź0m“'Ō.é‘OĆåḏ¹F”Aéķń4“„GtūŲ5yc XcR¶Ó<7 Vü÷eŠ­ «ŖÓ2g"Aū°N²ėi#É3k$y6n$Ń8—¼#ixąčI{x¢Ėo0>‘u>ėTnźzA½^å.mVn™t‡å4ĪʏWŠŌ•N(ž^®Ä}§lßĪDŗQĢs¶Ą™ŒÖā“i0*ćyŖt×Tjrļ«ĘśŹTKmЁ÷ńbÜM$*҉ņ £ ŗėĀŃ(Ņ "óaCĖ+A-C¤Č”yh” b)1\‚ÉūIĄ“°Ó“Aer(1U‘­ U¬©ƒĒ”ļXÜŤāšČčKং^M“’½§rŅ „ĢČō_åĪ\öāUåe9·–"ƒR§8ŲxŚh’–ø“QOĆCŗDšåŌž*ܬsæ{‘`8:Ż\śī”“ŠČqr'Ōs4ÜĪQ[iö^mŅ¢å¼õā+ĒŠc }ŪkĒ Ź[cĖ’,/é"ī[Ÿßdz=c3¦Ī4¾O…~čĢQPh‘+ ÕÜÆ½„¾ż’€NhßÄ\™3éóåż„ØĄģye¢šdøŹ Ū ^ŽĄū̦XD@īltņ¢r÷“±I,ÕĮLüź†5*ÄØ–ģ–Ń€$ {ŹšYsC¼Ā°Ę­ésmīb2MĀųµN‘w­wtŃZOU$Ȧ ¢ŹįOīØž:V“t=„½_łĄs󳓋ä™u‘<;* ’ģsõMÆB+Üԁc÷ ż`°NKč-qeœFķ|źūAmn]„)Ķ.½H¬™ißČÄCz'ĆŁøn'ū'ź8Ų=Š/Ģ—­\ÉźžéćµĮhlų7CQŗŠ„ńĖĘ&zč å’*Tį¦ÉÖ¦ĢćŗV Š]lš`Œ'īĄ?0ņ^Ŗ‘)õ³ŹŁ•żY‡ĆŚ£õĶ-£«u±4¦ėtŸsKtŪDæW”Į‡ÆVLØ<ģBõšJĘmv½ūH"¾a8ŲŽĆq#Óē7rߏi²‘ØfJą,įž¬ ÷üĒRZĻ–Y@kS‚ưÜrõĖĪ]æ§{·ēLh ę`M‡–±­‡õ”„1ū•™T£GÓÄĆAVO4±‘€ śž"eu]A{SUmöĶģwRW½ēo“ŅSK;keźš÷†ė½„ jźźŽŻ;|Łķ_š=ŗw؛§dŚyä’ÖĢ–ŗå&ŻĖž·÷«IÄhŽK~Šz]JL‘ŻA‘]LciEõ޾ļ”Y¬0ęCč±lź”Tzļ„hÉĖ‹iA±)O²iČ3ėy6ī)‹æ÷µzśKąžtŚ›zvżpÖģ€Ėcųä”"šŌ˜„G¦õr :/@ł2ēeb ½å ‰{Ū kŻBžIēCŌ‹&VP(E"{SYxKŒ¬§J•Ļ)Ć&ćĘ×'5}ą±`,n¤²Õ)†6V!“<>įŽ~ć1ØōBdp&kA"Q>ø7ŗ;*r2ɽ°u°[ķ§ŲþČó„į?F‚I<«{EęsCēŅŹ³Ł‘’W.<śž×t†©'½Ū½‘ˆ„ ¶“AQC"]åń`”3‡›øÅ5ż‘”!dw€ĄŪ/Å:¹ZS­dĻץ@¹¤j/É)7Dņ.–óõi'ń\6l'ÕJöÕuQ6śsgś¾=F™Y!É^u€¬fQIr_źæ&cö,ķxfżĻžõ~Ū+­¾üõ×׌šņć{łŸØ©¢]ą§×I»Ą”ę–^Żt¼s§³Š‰"j³ęl5%«±JņVv .ttfĪSjSšbrWEč²¢aOaóźÜ Öö±ĮńpŹś=n-ė5āN«ķ-ŗ y(Ęą”•Üš"3`Ü Óz§¼)ÉÖ7IZTo)diAšS!%ŪŲ4łĖMt±@yŸśĪd_S·~čäõj“Ž£u¾zŖßZA¹@ŒJŽzĮ…~-ø³økśÖaÜhq©A 2Äs\D]ĻVlҹćōē Tœ ;Ō._Ö֌b“lą3ŗcVłėõ-%JZ™«†ųFBmęgų¤yøČō©ā”x…<”L~ē8O0ćvy@@µd‰sqFž Sµ įŗ%Q.yƒfāļŽAR;Q=w{9t‘k€®‹F…Ż”Ģ׋ؓ|ĢbüTĢŅ;¦»÷Lžķg1łŚ­YLżÄ‘,¦āF³O=ĮņęAɼѼƒ«gš½źČс:Ć8Pź%͹yM׬j]ŊĶĆ_T©å$»—ö#<³~„g{ż!ąHAµ°ČX >”«©h{òąœķbYäĆYU#°ģ “[ Ūķ“xŻäs“Ā‚(bc9WCåŗ#ģUõž`¦SöݳĮČ ¹&Ÿ•T(Ŗ’.2…Ūź¹{g|§eĪ>ŌĢݽsµkäGėš5Óv–żfŪĖU.mǶīCģéCŁ€chr>R–ϼ3“}G–Ć „µ”¦žŒńąYĮފ%»5µi7)ÆÄŸłŠ•;qŪU,žĢPäaØfŲ]Ģxļģš‚ŁÜWÅ,ļŒT–¹Ī)»‘Ļōšž+šõ;£ķZ‡V B:wš 0bq*Ę Z5ćälIsćŌI’Æłd/Ž%ŃÓXæ ą#¹3z”„Zģ/nś0Ŗ akāōY"哐/Xķć¼%£¬ķńgņši×Č,'Ž·Ćš€…kÖK!'ó^&ķž…ÄĀÖg?ź”p„€Œś2Äćwl|‰6sEÉ0T«æ÷ąŽŒŠ—4ć‰{0ōŒ<å+§õx¾d±š°ļnAłt½*@V}§BUŠhnZ§G[ā ņģVݽ±.0ĒĻĪhGü©Xo ': 5‹Äg2lūmŲzÆÄcx#o–ŁD1ņģ…§rWöX -­W%s˜¤ °©­`yQNC“ģ Ēwg²«{ŖÕ³Ļ%ä ww»×¢%IB•žgā t¾ķČĻbĒK»Įk,°ŽeōŃGƒųG°5(ēYŅĆüQ 4<@ÕL#®¶©±Ģ‘¶5&½kŠ] ēŠ T5ŽÅm’ńąøp.}÷€€«$O[eéóV’¹„éÆć!ĢVć…/ T¶sc sAsų7Có“|ÆLޘnĢ7ĻTĮ)<r–w\ŅĒĢ–eĄUc~wäėżT«’“ ǚƒW;ÄWTŻNżé‰;tusń«Ėh'Ūļ²¢„VėŻ¹ÆšĒʇ×Ėą=Ņū¤¤ąJMŠ]ųčIF1Ük€ūoDz ˜R•N&ł#lœWJ©7CXóĄx?g®ÆF¾ńsü`€Ņ·ń7lķĖܓ3ąĀ€„ 9VM“·K\Ę ²B!©ķĀźš}ÅĪÓćčµ±“¤2ĘōW…5iA.U@[L¢p[Ń»bŪLY×( #Ÿ$ė¢" öHJDõ6 Ŗ‘&įg¦Q®%%F‚äFŠRƒxZJ«¤g7Į[2<ĄŸŲŽpök C»(ˤ2`ghżķF„=jr±\ß̓䳕³k° za¦ōj&±xc48qxb©ańŲ7Ƭńs¢‘aG¤a5xąnŠ8`‰ą˜dĖøø®&ļ“ŽčBXÕ“˜šXÜqœ „=Ś$ø<čøi›6`ˆ˜-UQ“v%jpĶīƒnåšK~·Éó¹~¼üĖÅÆ(4§Doh6—__eWŁė_³ŸŽ¼ųé½Ö–?æ‘׮޼ž[öéā3~ųxЉš7M•ģy{I#ė$źźœt2! ayNQ~R%ĮŖ‡WtįÅdlœÅ@[§HÅÜXĄ4ź“Cmm]3 I‰”¾Ą-Įp˜ š?·{¼ƒ,‰Śē^@#¹BäĆC–¢ņ“ZŃ e š&bxw1Ķ)„Ż0CKČCy@¹„č¼°LĢ„Ćy³Š%=(~7-”uŸĪ#1l4üF]"R’ŠF›‰Ų°B”gćŹ*æ—®Šˆ;ų{OWĖ›B£«ĻĢ’1m}Ēł°Ö+0ēąb%[Ņ«|Ĉ%pŠgŠgÅ©NTHŪŃ„T™9UX?p¼-õŠš3āŠĻŁ ·%ƐĖO)˜„€äėĮyz9p^ŠY ąrIł'ægū’ŗŽ ļƒį“K39–Fį5µĘĄ ¬-Ļ&gģ®§S=©ņ›œ"rõ”æx¶ĢR„õm‡ZŠé@:īeĆmĖ< ÖL !õ¾Qdא–d2õ$»”v|k]ߎ»Øó¬†SĘxn±éńʄ–¹„l£>VĶBsxą\+»¹%æfu®y®‰W‘A+] }ór³ĪfLv8‚œ‘_@ɽ.W7Īs•0w+P3²cy—ČCŽįTŖjŗŖš{<|ŪŖ\R}Ėՙmn‚ćk‡żV›¾Ÿ£š°%īŪi ž0ŒHÕwlØk@ą=ųŚtÄ<ZփÆ9£6,{ˆt”Ķy.åčć­]%C SBŽnæŖgM*¬¼2…vŲ”,^aRu«ŽF&÷Ł=Iļ,:Ģw8Ń!×AÉībøl”:ó.ŗ³ œ=SDµf¬I$[šęÕµR[0Gęnō>‚ö|7amÖr–¬;WēĆ[©Ł®kł;/`ļkśå2!{ ł:ÓśÖ7č tCY¹(Ł$ÅsŅ$®wī‚zl –n£ )$AõĶĢ ŠĻźśé†d5įqAš¶ŸĖ=—Ŗ™ĒœĪ =xQ"pŖ¦ģRṗ&CEBŠIĪ7…Ä ;ā£4žž3Y°ĻϤō>ŠŽČ)e[ż°Q&1w įh²ŃQ!Į]›„Lb"~&ŚQ×Įąx`dĜlLFļՀŗŽŖäœš\šd˚¦:‰QPśŚ°µą³Žõ׊ 2IZ U¼'īJڜ-‘÷eWÜ䧆•iĆĄ·Ö0šķ¾\³;Ś”sM_T7…¹xÆr°Y³It(Kvk2„‹ek¤Īēń,įHŠŖ±ĘŃ9hǼÓffbŚ–gKXw՞dj@hSoŒG¦ÖŒuGłQq‹`”WVnJvź¼É·äŠŗCChfŌχĘ* Ōą ”SÉMdT”U!ŃÖÜĶœdWkŗbĆŪšwšōü昄ßwņoķÅ×nE{é'Ž ½Hš %Y³•2!x-éĄVZ…ŗMį»w’}x†Ä:ŚłŽw£’^tȆlD6%•Ī]ßFö¦–ęy|¤»Üń\²•r¬.Ō>4ņü{_£«ĻŖøņåķu!&õģī÷€:f,v‚× ŻĢ|ŻÜŲķŲtɆMMĻü.#[ō;Ō>L²Nł-i~ģ|Ē“;3]9CÄe/ĻdIˆEæ§¶vøAńŚ®ććŖyŠ'€ßxn˜ģ(ćd2“Ć×h(œk7|7š~*A¤õ2/ͳtPUÄ% ė·™.‡[łų¾­åؤé5üēŚŌėFiŪg—h~cĒÄ`+ ³5ܟ+>ĒT¾ŒZä{KĖF'ģ,>ŃÜcYi™~šl†r¬P3ņģm:*šz——z:ș9ŌÆéŁZžņ¤!ī‰ «“ģtŚ‘š­u$|;īHXęŹLŖ|Kø=89«d“< “Äįp›W+ūKa±~#’µŽh®„³VCJrVFldX¶Uæę±Å“Ī„Z\Š.U9ö”źz½j^46Č ß‚µÕņ6£%䍝‚ljø„Js˜ė”, •<"thXoÕźAÉc¢ee— ©žˆŠ‡‚wcl‚ü9–Ł“¶N÷©~Üļ~ƒę°ćSL„¢#ÖuŲŁEPi%ŻÉQ"Äæ—as°Ńv`&r Œ8+Ūpq3īļø9qP[—­±˜ƒÖ3¦¹ż×åĪoŽR'¼³8 DkbL:1ĒėØ0±v”äŪį~/öü%t”y<#k€Ē IųkjFASż(Øōč,c8w†`ˆźęp;åś@_ÖŪy"¼±ƒG§²³Ŗˆ&i‚‹Ģ±WƎĶ^pj=ż­P)•cŒŖR2°ÅĢŪ^0KŪØžŽ„© X=GÅyd]ƒŸKlhšco—–§L±sg(*Ččaõ~MS@vĄyh57J–(ĆQ¤B•)'ÆL™ĮDw÷p”«ä­Y§23€/„u÷ȼ¼‡å%ö.€tA>›Z`-™^Cš ī;B:1ZįP6ĘqŖ%å¦$œ¼čČÖ]Ķ@Åä$œ6ė|kĶ:ߎšuR—eVÖ,WŲöMS€Ž²¢ I“ŅÓ)ó‘ŠØJmØøÕŁˆg.iĀ„@LÉŽK.7£…¢’“2-Ņ:ÕŲ“dx[ęM„źVĪ|āĢ  –¬;ź\)„ƒ¬—usÄ;}.’ö½S¾v«wŖŸ8ājK@tŠÅø[­ČÉĶ7°Ę€:āNfńŗšw"ƒå¢¤ģ–ėjūF<™„WÄ^Xēk[|‰ļ$šŁ@n._”P3±½ł¾å9Źæ¶QŃ«F|§£(€Šę”ß()»OD›;§Ó5¦ŌŗZ…Ń¢TøņF˰?hOų¹‚Y†(Öv°½—©}(ńėČ{[·1£j*}d­ņM …ņåҊYZė€ų„xy-¾KP®čÉÕ¹-P’Ōu(Ū„ ߝĘYш‰ ¬“źćĢ2B¾ÕĄ¦@ė5"Õ9Ų#2ōäž¼ (&ߛ”JÜJłó”7"nJŽiĒ6JøĒ‚€ĘˆųvŚG“­¬f™9pR<~0j•īń§\YˆūĶsļ7:Ÿ¾59Ęü½¾(; ±%OĪąę;ŠŃ3xNXf·ńŠß’!&5 šXiљGˆ„Č>`M@¼Ž¦bĻ鳓d`’`ŠdbxcaXOĄ…wó1“ęˆ;V@€<{s™ĆtZzg¬ü8 śŃӝļ\QAĮqJ“bĪ`¢wß’¢:lqy+Jā$+ž¶'}kķIßŽŪ“¦½Awh« “eÖīķjēJpŚŌ’Øx÷£Ģø@A`EåĀĄeœÅˆ«öRDUĶÓ“Ā3 mkżĖ/ D ²… F:øa–bÄÄ} „;Ōg`=Ōn;²µ±‰5=¼ÅiV®»x4'$L|]–&ĢŪQW.|įZ .ĪGkČōņ! µØ\L<B‹ŽÖŽ`aVšCĒ[ŁV®o6ų8aĶG˜5ŪZ H1Ÿ”åŅB9“-ĀYd#ƒŪųū`ā²yŠŹÖ«×„v\š2÷MżXVÖZyŹ[Ų4Äeß¾0“Ц©§9ˆ·’„kWĆW&#rī+„…Šz†rĆf<”bscÉŲ/#A`¢".ļŽ‰Kµ~„ä\š–WNņ$ß^ł:"ó×^²ē„Żõ]Ś‘ņu¤|÷õ§Ź<.3kʗļŲÕüźżoļ®>ž µēXb>čMŽ‹Ō\4†;}SŌH]ŗ?=˜Ļ?jŒag…ŽÓ²Ŗ2‘Oū.§-[@k#õ5)³Ģ å>v7#R!D)JCQENk•1C'‡¢ĮŪxz޽ćw¤PR§Jb"YċAEe^Ń”Fu¾²>¹¤Źī5+ŹÅžn–ŃQWŠh‰X!’ūžĄƒĆļp½pöƒ›·źR N“ĪSJ¹Ō5Ė£ž}ųx³Ey†@,ćTŚŹEeļR‡{ †­E®,¶ˆ}må½°? >rS„Į…i `4;KūA|D 0_T¼!1ŁMßĘfk Ī•Ź<&āxE‡„ōŠW¤ö®iT~ÓŗņŲ§ĆP“NČÜė <ĻnwLŚW—Ė@—(„Ō•‰b/rOI’Ō­ƒX„7sŽ|åĄ«t«č(xŁ”—q¦Ä®x!½”õVsSM“Øfµ|²ēŠ¢9ɐ¤MßYÓÅw{āCņø+ŚÅъŪ:ņ](?'“b”Y·‡»YWó9Š;Jx™”Ļ#9kŌm˜]Š×v¤.2ø»oh "4Må€]›­łįĘō𵦁x}2čį®­@åéQfR)»¶3,JE…YV‘°VØxŹŲ-]V³ÜśJ< Yøį_›<(„p.’™ĖĖCœFšĖˆ™qŗ†šČī¼Dµ„±ęzĶīŸ– ąW·®JE”`ŠuÓ «ŽtT7®ˆB¹śnOŠ-Ä+—ļMØŚ€XHD¼č؈§—k¬brY«ƒI$kmĶ-µL–T‡œ”Wį „ģÓ«‡©šś”H£oräŌKįˆI>£pt> …FČŅRŚLfTLc>:䯐”ŠåN¾#EYŪ»Z²_Ä}Ŗ™7U„§ÆĮüÕ©h‰g<(Œ•1ą(zOh“ĀRg«",ŹŻĄœĢ"'ĢÄ LģO˜<)•õ]ڽńuo|÷xŸ$Ī5Qś‹Įˆyv£öŒÆO³Ń@2¤ ŪčÖ»„āBtėĢøučņĶj׳ÖābŖ”½NiL1įW-¶ĀŽ4~ėŁ8'n"²Ņ°’0ퟲƒ9M‰rUŻ Ł?ŠźV¶!.†¾Z‚čeїp7H²OśhĢ4؀X.E.ž9 -3Ęž&nÓ՝ĆG.a¬¼ŖXE*)2‰įWn_Ä';˜č Į€„O&£ūąŹŽņ°óßSHĪ20…ķ¦­Šźt6Œ×ĒŻÖµµdč'``Så“/ö+ƒJ\F¼>=Kźp'é`ŅŖ˜§‘0W>P*‡n|¤|b;Hš±Q‹ø?OrČč Ļ§Ńœ”žˆģ)ه÷TŅ«6ĒčcϤ—’e±Ā0޽ƒ#{?‡˜óXƒĶĘðˆ°£Ė(>m8²ļeĮ*’8|œčpšōūā¢ä>¢`š·m­įDLwśä£įłÉ›¶¤ŗŅ­ ć•o¬™ßÉ śIV?ąõFįȕ%ėn L³ŪO$ ™qo;й”²9ĖŽ 6NŠx.Ą¤ķAD““!ÖÖaØRkFŠŌā;\Č?Pȉ˜aŸXJņrå½qxŹĪ`uĪ¦ÖĄĒiˆ…‚ŒŽŹM$ƒQxĀ9õˆ“’Cœ ā4rŽ›–-ŲÜ{SŠÖ&;ȚPU˜¹•ęyf\Fūśõ—2Ŗė0Ś×£@T;ērP2¼Ž‡ƒŅn+`Ķv#ė ģ‹»ŸW‹ß¹ō:įĘ=’ó£Œ!x|›ŗńUm>JĢŻ‚Øš$;˜¶…|gm!ß=ŪA¢śź-UĖcښgw CšQ,×j9E‹˜L”Į¹Ėāś6ē‰cµÓ¹ņhsč|ūl“ą1 ų–ÅĖ+-ƒ&ŲĻT’öĻ ~P€q+ MLZcņĄ-Ļ—•ź6ļÕuŸŌ*mqJyŲc%¦N@»éoŪ²ˆ gH•øŅČÕ­ébvR“{Pk€ ü (:Õ¶%¢Į7˜¦Ī”į$~„{L;ÉļÖ4ōŁn"į}š“j­µ$KøŌ! #3 ¼''N7 ólļŽ}“½Ļ?ĆžÖSTģź›ą½óZćƒ1H“^–žŅĒ׊Ö+€‰ŚĄZzž¢øß†/T±Ł»}XŁķH–hˆv›&ƞ»“T6‰h¢_P“f‚|ŃļÉū¹–,E™FMŚćėk D‚č+Byj|¢, ė(ĆU“¹²–ó…·9(—vēŠŁ ŁĒŲ(Ą0„ć© o/N_ ‡#¾«!‡:śˆĻļ!ⱩϘ^Ė|"$^VڇKĮ tMµēٱ‹I°Ŗd»óž%+kP}Ó¾n-ןŪĪҤ2H«Ż‹}r*5y©‹a,į:¬¬O2»i×ĖwÖõņŻøėÅŁ’¼”sꘘķ:®’§żH­)āœŃD)0™į(E€tōMHXbr7ŗ§š~™k)Öł²ØņØ_Ŗ°6+ČbSųč üÕö•tŅe™¢ƒm͐œ oSŽ|nžÆI" 0‹ėm63°ł v7×”óŽŒA§5Ŗ` —uŁÆMKŠÕ1āėYwŲ4š©gm#Ź„45yµ?¾:ĘiØł p`YNfŠuaYi?äœx^ižcW’ņÜä7ń®L²g“'n»Ų_ŒŸĄŹäNņ%śqw †sŌ° – Ī͊ŖBĘ>ÖzĈі$A֌U(łœuŽėp‰©Ÿtķ;ķ€7ÖźRqU¼Ć|(:ʏ• 0Iå[xyĢ’ŃÕW¤‰õ`üN»,‚KŖZ› ißD”Rd·š°SjGŌJllpK`ĄŒ–¶uŅŽ•R ęiø‹Š-‹+‰.Ą@*°PŅNśHšž™3Łį›’Yrä±×ØČĮ+åVŅ„ŲŁ‡ÜČfV’ĒOœ1Ž$cUķ‘Q’P±mXīĪ G­§I2£žs=i«Ć1ńĪĢČ,”ĆØ„fe’ŠA§¢³Šj1l“ņfļ˜Y—ń?Ɉ¦+ßYēŹwRä"µ†QźRG§ņƄ$†’‘™ ʵR8ÕxÕŖ¹ŗ!I!¦¼æĆcF”&@"z???NėźįŗīZdąĒ]Ģōā;ŒaŠnŖ•ź…enNĻĪÓeŽtאgļśgŁū!‡§ŽøEaƶpRÖSą%l¶h†¶"œ­!s» ĶWsé Fˆ»M[HKc^£½œŒ÷Hpi%qv p Du¦\)­g¢L™y :°–Ķ¢¬ų-]īQ’”u|xŖ+ÓIp&‘@Ū4ø =õĀÅŽĻ8j’önj–‹§Į)¦uŻŽŽÖÄÄö sŚnm)2 U€‹ŅÖQVÜx9q2¬ÕXH6Q؆‹ŗ[zˆż©'|gØv[‡»Æ”k—Zń犪#–ō3¬_¶5n„D©A ¢‰IcŃ N—ŗŸ&JN Ųą6)¦žZ[ļbi˜ ˆŹĄN[fÖmÉ©<"DPA\/ßR0 H2W4ģIšß„*ßY‡Źwćå( ‘GU· ­ō™“ēø jŠŲZŠ1Ęu7!rv‰=ŪÉk@¶Ņ,»N:łŠ“Ę“¾–ļ¶­lUƅx ‰¾{ē—:‹Ę-ĀÖj¼M‰c‚Y¹}–~+ÅŚyj™8ŹŪYp?‡­ŖÖ2•ghM Źt7čB;¶Œ^\ӓ|Õě\¾,̽ūōj•t€­‰źŠ'“Æ|CD’¦®É Ę#Wy„„YÖtĮ™'@ꔐfFf­‹ņA‘3Ć;듈0> A³ü†J¼ "ŖlR Ō ³ ×ĮŖQā—š{ˆ,`k<ņ™Į~G}Ÿ$L Üv§P9ł]Z¬is9Ķw†øõŚĘąŃź ƘW "œ”žÓzŖƒ¾]<”r{”õ÷0ėŚ”v;»A¦™žG²’ č®āD0ŖP †¤ĆŠĮ„xĀTé0°IĄŃ,īDӄRPīj†ņs–¹³³k×ä>Gb¾-Ú4ÄÄœžÅDš><į  Īō'aÄ{5”KKyF‘Ėq-…O2·i?Źw֏ņŻøe\ˆdŪs/Žk"&0 „ķį=!™ĢÖ"”Q{‰TĆ Š…øVhŁ••c%'b›!źrO®ņ$éDõŠ•L5½Œ8|#ÖĮņViQ_ƒJž]£¼aLnXĄ†•ļ÷>-öč“ķÜm>Ÿ—–ø6F§>®«nŚƐ¶U%*6ŃLü”6łģśį/–nŁ ²Æö–“c’ŌkšÅĄö=rZ”pרŹJpN¾®ĶĻÅK% ƒØ†Ś@gĒßóųÅłQć īŠĮ³”K†Šßdõ‰k“X<ö2ؽPŖW,r¤%l©B*Į¼Z‚`ĪEŠį44ęŽRt -гЅ2¶höØgA¾éšjå=›4T“ēĆ”„Vq2¼CÆĢ +m®5hmÉ«{Nmj¼ŽÕŪ£„_sk­åVźjÄøz*B 8 œv“fœeFzō;”d˜rńłß©x7×Ń;WĶUŒ™¾?r‘'hĀ"Ų Ė¹Ż7³•'§§“Ķā;k³ųīłæ æüė! üĶŇÆßAąü=`ąoA1ö鷏—ļ.Ž*÷X"…žĖū«ģāÕüvqłīJ>Ż«»wŽ^|¼ŗ|·‡ß# АWKœh5”,]@RÜ6q‘#ŁĘŖ…ońķŹmŌŅ Ļ«r]B.” ‰g¹Rī”C"s™ė©ž ē²ÉĪ Õ噘ö”8¾Ś:S6oƒkóIb›SÜ­YgTĘv¹m™ē˜ōŁŪąS`ݜ 4ē&‘‚±óG™ 1§*&Wß¹"l‘ŅtõQžW=kŅĢÓ³ļÄČȔ‡źÅmL/0!Ć,Tź_F(šĒž6±%ZQ|/l(¬¬ETĒĮA¦g٧„ Iæ?Ž÷ˆōžd“ęqåSP„yōŠN1 ļĖŌ£°Ī93ą$Ŗœ–Lī V¢¦2f`ģųAܜąw(Žb¾;äh`Th.°ę˜ā€  €a“Ķ :²¢=*Ķ\ģY ]\ŌdaŒ„*£žÆž—ź–iż ąŠ|ŗ"i¹ą)6ēyŚ|ņܚOžåP,”łSßĶVLm؄ĘHR>7Ė®”R3Źė{¦An§²Gąŗ#ߊ<†Q«:ŸÕҬLĖ_– …CL^l†`b&D»€›Ø‹ŠķĀĄöāąI‰B«’d({OT$PÉec¶ŚÅÉŽ/ā'ØÖäĢåeX`“(ühåōźŖ¬łGņ©‰Ž+Ó=rÄ÷„×vćPµ½axüœÖ“50Eä|}±·Zóu¬ Y å$owHų³æŠ‰ū3ļMb!ī¼’€£ ZŠI×)žĪ!CßrŠĢ½ä!Y:ó?,šzXōżįß0'ķ@łæ6vdv±”h'2©© ®xz+£łćócAjv …œI[2ƒn=DÆŌwģĪPvJ¢²5¹ā+Š.“Ę-·PYŸ„–· TŃĒ‚)Š7`ۦ7~ čxÖ›ĪŁWsJbīĖź\+åĄfµ&}« 0źnÆéā)ą©SߌC–„å0Ų€‹y¾6Ҧi™³Cbhpׁ>ˬy ™Ń—õ²h­±0ęÜBz ŸW1¢ōėĶ%Ÿ³%„¢@öN_āOÅ^¾“GŖā *xM(s— R’‘‚ÆņŌ&Öć?²™ļåf„xo°†f—ĖzŽj‡%’‘tNł“–É5õ£"aä‡H‚=‘‚6&‰ƒ˜Õ™ā¢]Ā^½m8¾e³>:BL>kŸ/*އ¬>wÖą?uźCé ŚéūéŁK»f|,M½“ūu`%JŽ‚x°>±ŗ­ųlōÕ8Ś1c~Õ~‹„F6QžnēÜė®Ć“ĶŪģH†ÄA2eTģ]©^·“ž1å5 ™K‹¤į­a铚`śEVļcFV}ż ×flC.ēŲ¦#i#vZdUÆuyĘģ̎¼U§£×ž?Ål6uQu~ųė\d„7„”ėuJ“MźcČ($«kį$»šöŪ<·~›ē5Qż!Šfp¼Ķż$GČ\3,ųåŁ!Žg>7UšĘ0¹Ś•¶™®•j"ö–ŃčFr”FwyoHyźbœ8öo©X‚Śš·ūI+c,:įĢ,ĪbFmbģ©ƐÄB=.gņżČŻ>ÅrS©¦\;˧kkWjTą]ļ ČŽĢ@į l1`uńBīaAR×_§˜g™Ž Ļbgė%z:l:S=W¶Rš4脭Į3`yÅŽų(£S\ļ7 ‰- m‰ŪćyĶŠ…åé»w“LĆóĆRń­ƒ)Śß®i[n{yA“¤k¬zȝöY{šTžrÆrNÄhkKx·ē¶ąÆh×V¬›‰»H·—BŃ~sē8²V! t`—*ö†NŲ&łŒģŽsĻŻĒsŽÄMFā§.śĘkz»ķŪ @Q•?γĖ(,….6ŗ¢k)RӞę€ßbŗ9h]ö—P‰³ŖJ†°VPH<¢ī‹cŹŽ.¦EJ9§kŸOū$ūS€Tš|QRb?ŹøS™÷óČøkѽ ¼ .@„Ē%2¹Œ§ICR\yŖ=°rŪ1;r0ž9”Q„‹3j!•&W!źkl~āk@H;ĶōŖšņ"ŹŪœĄÓFkEš“,jŚæóÜśwžūw¢xÅ ü=Š3³źĄąÕ]ėä!/w‚įŽ¹¬rkަŅ\‰Ņ‹6qŲ™ęXĶ6ˆKNGģ3¤ųR„|%ėŚ³\1鑆½¾ķģc¹Hm¦J¬)ż˜Ņӗ]Žō¤ĀĘVĮĪMyy„łĄ–ܝ§ÄļMbänź y ĀļŽGįvŸQ*SŖz Ö8¬ą‹ÅˆL€¹ŗżfLēøiY*ēīĖØ1¾ØTÅLe­`BøQ*Ż£ęEÆÕÖ:™ęĖ%ŸĒ†Ņdö8„ż—ķ5¶C%ŽŹź›"ēA2`Ÿ¼ž%פJųŁŲć½—Õ«{IŽĄŚīG;TJĒ@ж{µ}扬Æģ[eĖ%^¼‡J„zÄAY”ÄiZԚ×U5œ }Č2ئ!C3ī :‘ūCĪyģĘŗčW©f ŠĪ‚V[AJ„ͱ,˜Ō 怎‹×Ąn1{9 ’ąĮķåjĘžł.gŸĆĆ”EjŒ®d 4·Ż””p­„Ģ^œœÓŠÕ˜R×įŽUŚqH5.ü«aĄ†ŽŹ‹.āżc%ńČ<Éz¦]?Ļ­ėēłQ1˜čĘŒśčū'śĮ’d½kō쳑Ążöę%ż(ĪŪX¬Ž‹rd Ī]N÷²šB_ūCQyAŅńVķĀŽ’­Ģ½įÜ d ¼Åό’4?<ńķ ·$ož;bż¶YQNŁ”°Ö†}-;čœĆ«5Ōw»Õ@ۜPø°1wØ®›öZw`«°v0Bā¢Ą6Ņ5 ¹˜“ōBƒ}"ū?óV ='šœ½Ū́l2b;I©b17ņžÆæ×ΈcD-~€öĶŖPvƒm(ža‡A½Ł0©CŲ?Ž_Y-„į1y½ ¦ē–mĢĆ|yw+b D5öS¹tż&€!9Tõ™’nn[©]oōÖČ~ÜNHB«ŽmWˆĶ{{V÷#0”K$Ža¹ö"W[C×(XŁŁźµŽa¹ŠŹ:&žF¹4TH¬+gø†¹+n6ä^[Al™c7¤ƒYWl%“a­ņ¦ż¼ÜyŖlLŚÉ›ŲRźäÅąq’”)C'¤kŪÅgķ«čQ`]¬Ą]čknø5TX“év”ī ĶąŃcNÉ#ōIqŪhŲ-€ ͼ‘#‰EBj¤­ "_ņµRöi—Š’ Ēˆ-Ž#"¤“ŒlŚćóÜz|ž{|Œžš‡Mņˆ‰”ó~KˆćUķŠT(y|¶µĪ™¹“XiĄ¹-«”šR”Eė©ŌQ7Œ¦?Ievn¹ķŗōDV7ž2ƒŌ&ĆK¤Į5ˆęČ"čŌkØehöW¹øÕ±ę­9©3^ ’ėu¦‹Jl-āĮQTšpJ;5–e]#g ™hMlģõÜĪ3ŽņdŲ‹¢„R¦+õ%OŽ”fŁ*ĀOCnõµ”XµA …G>[Xt>-*_²}Ūē„ÖPh˜÷†ˆ&) Ķw¹óŹ;Ą*ųfŒöėÜLtś[āźÄtUhļŃø.)•gĻćó˜ØaŠ•?OŁšŽķ7ģ×ć4Š{Åʒ¶‹F,¾³Æt“‹ĖV+fD`ķé~"ų/‹Ōß3n4ķQŁ»ŗN6%?Xw_›–ų4j'40”ZŽ2*×į,2¹DŒPždÕ¾ ³‹‹éY×V%™²€MkJ’«ˆŒÆ*ŚĮ!•hŹ[±/kķŠsn³B‰Ę]UļQ‰0¤ļÖ”)“ž+/“_@— ś½Ś¦~×įé, `W„+ské˧)ʜ^“Ė0ļćeaĄÄ`ÅpԈ+-—:Ųfk„6ż^®v>ĄøÓ…󍞳ņ$`śó“Qč¹5 =7 © w—“č?¹ļ­é69z/ž²čā8l™A Dᶤ×f%D"’±RēŒP=zr9³ (d5#œ¦gÕĢĄn)Č&ś}1“Aóā•G5®~!ŪūW7ć į^:ļĄńg‰ wHŪ»KØfßI~š­ė`™l›Š¼LŽ]huZėĶG† ƈ jéj>Į^jY¦Ē?8FŚy‚xÓ’ć뜣£×+ĪėN†xM¦E™[f¢ōhFxåņÖģĒŃī¶Ęؔs=wAmŅźÜ½c¬ÖČŽ}ņŲ}qūī̼@¹q;ī]ɛ^”ŪÖ4ŽŌcĶ„³×QµĆ¼vt…†/aʇfŅĆ[O<'1VŲUĖI²%¢³÷‚ĄĖ Q¤ˆqåSņÜŌuiéŗŠZ§Ā ńļæ»ŗ,Œ^©$t¾““ĄØnµ¤9Ŗ t šG©l2ƲGh^lŌHĆUsĶé9J²e͟ƒHĶ|ˆSRƒĻA³4h¦vÖ<ܛų½Ž‰7Ļył‚S ų£ÆÓĘüF.?¤6œ|W¶F(ł¼(±&Z£“KYĘsvŻØŁ'­nvŠ1EE&§^®ƒZ$Ęō :NĶ™k[9ŗƒ#>نgŁ'Y ᄼiŃFč¬ˆ>”z£Xšå„,µŽ¬,—N•å0\:‰ ž©w“~³F¹°ūj›Y>R„Méh’µ»RŹ[°kŒ ņ¹6³\z½:ū1–†³LNŠhĻTx”ÕCuÓfh{ˆ4ÅzŸ³GÄpd÷É¹ŌŹbœējK¬!×jaÅFuÉf%–äB9•×p¢µ‘Å-L(¬ KE-Ō_ÆSNø»wĘŁhåxw“¹šw‚ąń."––<µ7ŁBždæ±ĖŠ»Ō”=zŃ-ĪŃ­ĆńÄ–@sŠ9˜'̮ʫėHÜWwl…Hq–ę*[ cDh’A ¹čjžĶ•ŁŻŁu,BŲ‰ £ ”‘+¬KčåTQčĘBžŽD†Į½Lh³ĢĄČIóD%& ŻUģĄPņŖmn…Š~ć‡tņCÜĀhy&ÅDøxŽ¢öfĻļP@±lŌۜū렔że$9/§Ē \£Ė* ›xͬ¢MœŲŠŽ~Čp'–YiIŽ2Ēķ¶ y¢/^›OÆ£žd8 ē#7œćŽn™X’])fź”—šc÷jŃł‚™†ļ½CŻHc×ī½QdEŪׄߑs‹^ĘXćüŸ…^Ä@U°iö †ōfų,³˜^¢óö½XKc±XäIéyöŁ¶™TÅŹµRįEN¤·āŲ³®nŲ™­Ó ¬†yÄśŽé×"]Ž¢‘ܦhF••ˆ{ÓčzÆØEZq³§@éÜi4u­tgnk ØOLœµI ;ėH€?ÓŃ]†ńŽ čÓ3ŽiŽ,Œ½Ā–ķ‘o+»{=lV<7½Ŗ‘č˜üĶ«\žć`^fĢtÓr2»\$m/nųŪ€iPŪU¤©%ø dxSÖܑ#ĻKXŌғѹ|]]æć!>ęįß5‰i0‡„Š}x›­6|4Āīy@”0RT}“Js=ź„'ĢŽ¤õTŚ‚0q‹“ø›ķG∶W9“Ļh;n®\Øŗc<‰®‡dĀ5”Ē“fF[JČ”eĪiķŠ 4^‚lP\¦+¼Bj`īæEå,Ä ¢'Öwx[Ķsžhė.mÅ& =jŠqYŽ% Hnc®“«®”’•X°“tqIW®7±¼hbTVšČ±³1hda,ģc·°’õ\ęXķ0i9É>¾¾ųōžŻå»_&ŁO/>gļ^_|4”¶‹OWiūłćÅ»WÆ÷Ņ›ūJĻ”ÕN :o¬ū¹É÷*¹rŗ ƒ4± śž4Kóā\ȃÉ‰ądMĢi ½¬>±†eUxøŹĖEd‹6†{§ģ¢ØÆgš»”ŃgÖ³ų\ÅÉÖĮ¼ÕķĪÆÖ\Ā—px‰ÅłR-†Źī7Æ",£Jł¤b…ņ٬ßÄź®ōG††Æ$ąt°€°ĶUAŹ$¤+ź%ķ'+ø™’<Ų Ąčą8ųŽ“ĘźČĘ¢@KcĀŽ{£ ‘ā › n Į;h!ō(»¢ėēNH™¤ä®ŪĮæå@z .œd ~kŃMčź*“N{ÓZóš¬dĘŁ$VZ" øżß³’4oń&/ŃÖ⬞–ž»T_aG‰XmĢhŻ[Xh»oöIlÓ/ķCĢ…ā#;bYˆƒČÆCeu"^ø±f¶ą‘ꊹ}J”`¶sŃ)G;ėMn*‡YnĄSTGu2ć‡ä|,I#Į<Ā~Óņ t„oź²4ė &C¹åÓLѓ‘)zā¦h ڧŪ9÷0S„;mņ)y†uēĄY&/É`ź3³×|żŒÄ ,᧊ƒd*F1›ŪՓśåšeLŘB@ £õü³¶„;9™7—H“˜9Ś3A±÷Ȳ“*QńJ.ŽAŠ>ŲGęšlUĪMłĖ ąĄ;Z*߉d½ėNļ z8“ōZćėī0“ŗ7u€~µččj h.d«zZ”œø©÷k ”Āģņ3ÖdÅ# śrėMĒœÕĄ.ĢŠ’F­+V[bB&Ūü tLŁZŻ«}Bčķõ>˜#Łä—}Lė»Ó-“+ēScXÓ@1›uŽœķq–‹5ę3˜²V;}akŌlĄ@Ŗ“FģS0˜(ÆĖ)ašž‰©’ČĪĀĻÖV&\SƋ­?žnNW¦›č½T©=Š*õÓxÖ“IņZÆT_˜’ŃIUƒ ³Ķ”qyXūc€—æé¢$qäĻ•Ļnļ0a1¼ ‰˜€µ–ؾ{½8Ķf>ŁĢ§n3ŸŪß7A–üpŽ(ŽrluøńKėRĻKĒ)jßäxöß՝•':la(%xn[ĪuōTZ”Ū½€£Œaʵ0f„³LŸ% •}Ńźś†ióį>Ŗ0öĒŪ‰ŻŲŖ=‡Ų3Ÿ5ęČ[%&r¼ĶaĪ•ĢbD#`ēB+ 6Y#›Ił;4”Gnµą ū*4'ræ˜u§Ōor› A‹ą¼aķvYö]f8ą”śź:'“0Źø\ØnĖĖŽ^OÆĆÓRģÓī”"æŠTĪś"ē÷#>œę=Ԑu×Q~ZķÄńh”™|ų„/N̽BP¾½nGĆ”(M± ņ ¦?ŒYtēÖGüĄ1«ņlZķłém¾xWč=ø'Oo²Y/*ćębœMyō°Å*Aä„‹O‹5ÖŻ¦÷«ĆN’˜|Ė©ŁĻWnB$‚żø É"ófķF€° G×5ŪǘAJrÆøqšłfd@¾qņĶ#ž;¢ČŃ,—ļ,¶; в×)g•?]R•åB”ŚØQÓDäņŅZ8éÅbv„ūŚÖ>:aõ©“}•[yū͐…QöUŚ„¹ōø‚ Djž^>µF ӊ¾ _Ę=øÄT_FB&Ü ž#ĒÅLb5ėfŸ-…˜+{¢htlņ޼@”Ūł M’ō°ŗųĶZ­ģ) t~~?‚üœćē€RŁBęzć†LÄ[ß”Ę乤%ƞ äŪģ%! ņĆ+Łć’Ÿ¤20nÕj¼³^Ї¦Įk߆¼b“ād`¹Ŗ¬vśśBšĪĀ›¢ŖZŌ3'.n-ņ PvByLuŞŻ×~_¬Bl,ėn¹g,LqƒŸ–Ų~¢”uź–Ū1‰¤˜ IˆŖ‹ŠK95įlø#0łĻ’M(¹µóNmŹ r·uĪ{5O}Ükä½9¼óXč§}3õPó-Bį¼? œņčėg#ņĢ Č³=‰04bAmzhgܪާ¦!‹„ÄN3ĮKNé e7Āå{ ŽĮ‰5”ĮüE4ŗ§ā&bƞASåh`’XˆŹō¤cĢäK1_8.{ĆR+!h”=”ońĮ(?“·vĪ;VÜ7Ö®­Ą. ×”Ėl ^l?ą*w‹šÖ_2Eü“°Ķ[»e­ €ć)²€ļŪKį^Ę#Mš3ŒN ½­YGīėÜ5Ŗš‘õke;­Ęķµ—€”ŖŻß÷6\ZĶ@'Ž{‹8™]h3!̳޽£P»si°p[©śÖ2"UdAÆ@;‰7JtŌgźSi,nE™=0ņ‡«š79jŚĮR†0gUkPŒµ•Š5ŚĄr @ b™Ū:š4Cm4+e,Y[ūЁŁCø®,qBéSMŠL5ųkŅŚ ć“M¾sāW–<‘_JņNJnĶ“GīzJ­ŗ…8²YūĘČ ŠA@Y“…xĘū0⽋Ūш¢ĢpĒ·ŪLo­ˆ@”(­™óš ‚=)ĆČRoĄG’ŚnS”Ž]”•ģPŽŁE ųMÉūWžōx§;ø¦2$•¦7"'c½¶Ŗ„’Ä—ĘÄ l‰c'~OÄY» ½ś8°>˜ŃžFŶ)Ø„Ļ‰VGjŠįL®g³¼UԔ騵Ą0®,Ū‡P,:Ń!ūvdOæu{śķ-Ķ×¾FnW¬UŅAī}ÆZoÉKī++9öXLw :£õŖÄėmÆöŽ#°\„«²RM8 ŗŌ ¦MĖ,˜įįęŠ£S׫Æ'_p rĶĮJ­•µŌįµĘ'"ŒØ&U£ŒĄ.ÖS•,”¾Ž”Į.¦S?%ICņA6ó’ŠnQūםö-ņĀ ö©3ēb“» +Ū ȚpoY&]äŪ*j®Nš]ēŚß–“ś Ō:1Ļär!ČMjē̬P‹£blŖˆ€ō&W ¶ŽåYå |ś™!§Ż¹Š° )D/,ł‘®bÜ ŁÆyöŖ^ūˆÉx$$5q ä4%ņTķĪD¾’6ŗ¼j«$˜„žhÄÄõŌØø TkT)Žn9 Ī)ŗ^X *tÄž[XXäU«O÷>*¢(&,5²ü*ŖA5ō9E­E®Ņ®ż~Æ0Üų÷5¤RNy„ńŃ(.r“ʧ‘?÷K1U²kcC >D`³¶ŹF”„z@k`fž1sŽ\HFÕ‡&,ļe6bt‚n"–†dŪE“O‹ŁD¹fB“ńčīž1?gźyʕ…¢k¬Š—il”“ˆ+d…3RņŖĄIcŅ“šc®­;=ņŪÆ7«Œ­LB#2É®‚{Ėæ}p/_»Ü«Ÿ8ī}|ī%M Y„` †TRüÅ!Ƙ‘ōó‰ģS‹­ßlūwnŪ6ŽD®A¹FŸėŽA > lų8ń³ĮõFńcĀĄŻ³śe‡Ļ£®[©Ł8Ķ”W¾+hĶhüGÆŅŅÅ?ņiPe°\·ŠĢ©Ś8fUެ“'ņošµ[׉~āČ:ŃrRč -9 ŚcŒńū1µ¤Mg@Ļž*®˜åłJ•†÷γ” NßRƒ5ÖX“bŁą'—xū{§Zd9,*ń}ęż,ģń\8PNuÖ+Ō°L½>œDæ÷h$“Īwuņv‘Ņųļ˜F•]-K£ˆ8Rq×͐qj 0I•ź ¤Čé^Ėīī2ÓZŌ‘$®KttÅJ±¬ĶCĻō† ½oČ7ęŖĶaźĆ„‰ķ²w{Ó"a7?j½žŹæżUÉ×n]•ś‰#«ņéõśģѝķŪ€ƒ“)a•GҳcgČ©DĻ,óAŌW]‰·ā­ o4Ÿørj›SA£pŌ¶ļcœöYöÉ|†Ō*Ē£AńĢó1??&N\6}‰¦^¤3,łé§.üR¤Ż±ö$0Rd~©i(yp#؞ń5ʲ~‰v‰`;ŁxēJ½¬O@gP¢K¤~ŪG)¢^±£éźj&ö{, Š6ōͲ^FuÕӎ‚磣ą¹ć¶ݹ$ŠeXƛRL5KĀ1ōMU=Ż/Ž]łŽ¦”é«YńOZCxDžLž—/ö!iźd% £\FŒ|©9s”ŽØ£…ęąĀv»ŗ£Ī ,ūCŪ,̊ēmÓõ馹¼Ž)¢%Ł"µį¶pÜ×ö!åfŪųŅl¦ŗ0¼ pu†vŪ”§eŽŌ $īeFKŒ`“IĄj„ŠPÅĶr"fhoļ™ˆB$A^E9‡‰ēv±ė•k=”ŪKņ ‹BUJko6Q6ŖeĢu*9F@Ó^®Ŗs+ÆÆ–A?XģQĖüׇe²ĀJośĶ›b©iåM}MÅBÉ©9ŌE 9ū,ŁjēĢĄž¢n­vc“Æ;Äf]Ę~ĢsW§ł|(Ö¤%ŁĆįՋCƒMmӍųµ“SйŃ~õhõÖóAہ ņÖŽ1(”’a Ä0§‚•˜}%÷ŽņI”Ź.‘sóµõ64St‡:¼^[o²J»=øčS¤®˜U€’ćĮ/)Ī“˜NĄ@– žN ŗå©f¶x’­“vyxß¾zóčꇩDÜÕĻæ„©÷ń}#’öK¾vėa©Ÿ8rX~³X^!o—¬{i%ĪÓI¶łŃØ]ē‘·ė<+…‚5DŖl“¢»ųU»¼›­t¹±%¶bŁ€¤-Ŗ6Ć4µ–aZŁŌĻ`…“ŹŻ1B-E4īģŽ0K_TŽĘŅž›ęÕuZwܱ”Óź%F¾Źē÷ĻhĘɅĖ]õåaŲ!"4ŸŅ{·rW•‚ßŅh“Ū2”_́b¤ĖŗÄņAūP¢ZÓ浫Aœb͌ņ@ ęK|éRåp+ěƩØR©„%CVl)ŖPü¢š]bš°p ź–uo:±Ō’ žM*U’Q9J4āŌ~mxåv ¢ˆ4²¹q'ŌlŒįXl"­Š<žré›N_¤ŖJęnĪŅE1t© ÄæŖ·N³Ķ£Ž GŽōhÜDč Ż_F Ź1§•)ŗN‘ć`¢Ø}G49ŗŗ"š5tĄn‰½'GÓØV^=wż×¦nM3=ByŁ;mX|±o#6­ĻÕyV^MŪ5hh±mœ peķÓég/eŖœ…ļJÉ鏏yx%/Ļ®WC[“®«?Ž$cĖ/ėzći‡½åāDåĀ]2 PLéü/ŗS5ŹuįŗĘ±Ņd+¤2‰`E™Ļ¹ō­”ž3Ål%–‘=Ź(Į–a²]Ø8ę@ ø@ÖB³ņ¬‚ę„ć¢S©JR˜y”$/J;.āynżS±t‘hjüˆ\×7%ZĄĪŻ$Ń4g įx3÷/ sŖeoEq’Ģ÷ęyP䣑˜ %vj8Gu£iÓ@?ctJ]F<±śõzcfÉY±žFVŌɲI0!TFĢPšd¶$вē€)rĖĢCyŗĘö ~˜÷Ą ayB“—[Ȕ±°ih1B.딄Æq©G.sådFąm®i]¢eŻä=‡…FIŚĘŗÉ·Ś‰ū ŹX+2z‘}*ܔ_€ÄC뤖²vS€ŻöÅ1ś™üŪw łŚ­“~āˆżģƒkŒŖ’˜TY°ĶēŠb ,ņ{ÕT¬­Ģ xMyĀÉO3ė£6¤Gކōh,‚õ_Ą‘Byę]OH„ČQżK‡žŗ+Ŗ0©b-붃fšĪĄƒ8ö?ű’ÉĘžģŗÜ-œÖ®Č»č p4kŽœ3#l]*ŗ€Y$EI§ĪĆ%v:šKżL-(ŽI#ūc6Žā.Ģ­‘ī­Æ(؃ŠóĆņĻl%ęKŒevÕĄ_é&GĻ·ņońšµ[~āČāŃJt–2Ī€»VIę÷dÉėŽžjDõ=ö6²Įٰ­³ŸŖŅsˆG™—÷  /1„zÓDĶąŚÖ‰DԃóŠ!1šé[~”(›‚Ÿ¶»e9¢0;›ÉžĶڲåßąZ!qZŠ\{Ž»wŽ ę ?łß‰q5õ¦)˜HPx}WķÖņŪA:„(5Ó@ŚUńĶÄÅ?§Ź ÷Š„EPœloŠŌŲÉ@ņAøiŁ 9äĢA!‡õó Ķ°?÷µn¢ž”Ń©TŖJ"Žļƒ8ˆy= ŗHöŹā8eÖ(‘ĘēYō)Œ]ŻSÆMX#•ikĒwĘżÕ„“1·ŒtŽGNb”łÓėŒ^°Ķ°ČīŽ±U·Õ$ b)øCåq؛õLMÉČ2 ōp$ŖęŽ&jG“ǜi_vߐģ{l,ml-滲t ŖõŻ’P@å:yA†Ģ!Ööj.ŗ,£蛄ģ•CÆ-‰¤o½)%öސņ<ŹGØ\䳌D“¼§(SØų‰UŽś5R©Ü4`œy˜cčՉmhżn=^ZÖ4bŲ·†®1·… ĶøĄtM1%W¹ŲÆś¼ėüK±Ž^o½žę ¾dwz]ÆŅŽ;’’(ļ5ĄņŒBĢ<‘ćxhŻ'3˜āj}K“Łø?O½X><=ʼėL[š3ޚ’6OIdØ¢]+JW(Ş ®ūI“O…Bü-„…’³ÕĶ®©Wę¼ā$ÄĆ^"¬“#Ōg9"Ū•$xqģXķ n$(“H‹•:3Š]Šc‡ˆ˜Ö’¬›ŠxŽ>Z "‘ptX€O1Ę”ō'N»ŹģŒć!=™„֑ļ¹vė!?£oppØ\ä4cQä22śeÄxŃ9Ūk§$éŽ^iĖ—*’śNø2uqwr*±z)ö(^^b ēŪĘh×&Cē9'śĀ™!¬·V("™‰ŲpX§/GžöIäį“]ŅÄb­z^ŸĒša{#ž5ßd™ļ"‡g”ĆKŹÓ½$˜#‚7==›rgwĘÓbY $čcĢ×9ZĄŹAVPPµV±ioåčØ(Š+‘GYä¤nņ?āŚÆXSž(™ wʵߣÆÜ,I‡Õ]Ėš&EÅVˆäZ ŖÉ尅r׀œėŪ©6 Ŗpnņ7ŹźK©ĻŸßPaQęūQIÆ„F¤¾ōóĮša²Żc n¾y÷¤)Yåōc\*ܓü6W®¹Ł1Aœ­Ćh7IĄ„öm²ĄäĒsóPp@8”½•«³V_‘ŸĪ0;ąG@­t4pMėĒĆ!°Vušõō¦^%_+  qyMĖŗkOņ=uĶ=ņ®¹GG»ęĢŗ)–kƒµ/ųµ‡%¼’iļŗÜʕl ’W„Ž”¤o¦eM@“x•ev“†’(‰n‰Ōˆ“}z&&: @‘Ø&€BWHĮo¤Ł.żČ“nŽƒOf[†1FŅk•ѝŖżjVg=‰ f–@öŹ4©*–lÉ®¢U&Õń² @Ūׂh@ća›āāÄE•3ĖKD9N·s]–uį]„¦i*æĀīöÄę¦G­©ļĶ2o¦3ō¹ŃŌ8Ęsy‘Ÿ‰žSŒ& YĪ/åj€Ėz~»šH ŒŲŠnܟ×Ȇ«*ä(@kŸ4ĀYOG8›*å”ģXC’Ió®®ŌÖ)“źŃ”¾Ć¤łŚkŖę£‹æĖ¦ÉBKS1DÕš\īY~’·lÖĄ4“é ‡¼m!ēKŗ16ė÷²æĄmļÜīJØ˜Ļ—)č 7$‘O“£Y»ŌIqŌŪt}V‰Ö ļŚ_gx³ŚNBB`Ém-b¹­:vؐ½åŹ]9…  Ā&ķčA6)C&ść¢I÷Ś{ō#ėąDŽeĻÓ®ŒØQ¢“²MĀu"ĮI€B)Xk=œėsiż“IpDizl¾R“›8ŃCĮ&Ņü98°±±£ƒ’¼iÉZŖ9ÆĻo®H€ŸØž*ב?•‚X{о:¢P=2ŅR;¾ż ¦{yāķšlo”›××ŃŽE”_Gt©!¼k«>[ČAÉ’5ŠĀį ©ōΚ›DW¤RF§Üi¹čŠ0ÄMņM°aČ\š•0Ņņ©¼JĶAd EWō'~(LŠÕz}ŠĢw¬}8]Ä\!ęP›½–°Œŗ‹ŹrˆÄˆFWĀ€Aė­q%綆`Å©ĀdZHõ¬ŪxųÉĘØ@( c—µ/ėpNNm³1·Ÿ(ļ†ķ|w­Œ*ŃÜĀKŹžØˆ¬rOüxZ*NÅZB`p•0 CµrĻ™ā‘cĘDO”•$œńoņQ>VbœƒźÜ “Ų5 ²¤TTtĄ‡!Ūt²Ķćģ"ļ©°ĢqėŪo\„Ē”į¶žÉŅkł­“ÆčĮ”eŠdKĶ+Ą‚k#¼“{Sū¼Õ³Ż™];„d‰Ē¬m+ÖłUv¢ĄfĶ1vZØl‹ž&%؞ .f¦ų™ōQńˆ}/”O }öÅt9[(Ŗ5Šp†įŅØŠySK!0"Y{6&%" L™×K°Qö^ٜ†łĻ~®ŌpɃ’ę¹ģtĆF퇐#£¼mC–Il@,Į„,-ŠŒD$WOz„iÉę²T „Ü‘īć7ė"6œ" h‚ ƒX²z?qéķķNƒŁ¶7˜mwĢāŁ7xl^ø.W’Ÿ0©ė­¢Öuz?UŁY&ĢkÓ*įl÷™"咊)µ””l/TĒt®ou„“Eąj¢’)6 Wm”»3L•Hģ¼2’ž6Ō¤±üÆ*W••'YeĖovv]P€Z¢ņ‚Ł•N±ĘB'ĒɏUĮhj"!‘}éMŻ3++Ūss »Ö1WĄsB–uWæ0? ¼Sśó€ņøTŹ®L„VT÷3Āž"–(²$ é 0vL‹f-¹Ü”u×`&źå H>Äģ”ŲöÓC ]ĶfØ ½ųŌĖqäS„ Iņü­W±Üé2xµx8¬GŖLćČ·ŗ(²µēy”±vŠŠd0©Ü9–åÅO’ ¢ęīvRżc¶ mĀ O‘O¦ąژƘ’jDś4ŚJ˜ä6Š^Ŗ:šTķ2žm ÕÉXe,ÅoĖb±`@pŹīŖńźQvņDŪR%hm½ņŪNĮ M>÷²­;±oŪé6ˆŁ]¢°tEM ܋Š·[®ˆŽƒśŚxĶo z;Y­Ē˜žÖé QLŹ¢Ēį-~ß2<­•Łœ6`˘šō°¶\b{O““چ–¤!¶ī@źņ§HåkwRõ©źÄ{Š‹4$L5-NlK‰fą,§9 ŪXl!SlÄѤWcé;ļ5Ś>Ų~óV³nŸäDŁšl/åO’ŁųŚĻ¦ßŲšlz\k„Kū/÷:·D³D¢$h[æ­Żēņ§w[śŚ]·eßXæ­]]éßł}¹ qĄ9š.)Ц¹¤«Šwߐ’O_ąņ¢4IN)^×0˜ĻZŅ ˜o¬Žˆķ ņēé Gv»fœm8!ŠŻtä mMū÷²]£»ĒŁÓŹPlp58£g&œ ß¶D"’UGhm^‘1ĪIöģ &ŗł×ņo³bN°xH °½O\'•EP€Fź‡Q½ćą Ŗļ«ń5Ózģ§rzi>4¦TÕW ćæ‘pT-ĢŽ-–‡ø”Ć9įp¤ė`¼Óćrƒ—u’ÄL‰æŹŌu]ĶIBm ¦.‘£fZŠē2G¤ģė“£Ws]˜0v3źKJt—Š%§mK8ŗōÜ1p°RµĀivv³ń_qƧÓö¶ćmo;ŪwTä.j›ĮEĖM hR.üŽ&y^RM»čhkŠĘC˜›²n½:BĮ9xR!ŗW«Q•ŗ@—ž(ņ‰^\$Źć–$Š\ޘPhB¬°æóŽ2€2ģĪD޵„˜4GZīĶLꄍŖĘI³&8Ÿv*›"ÆŪTŻ™4¬ĄdX|R_ŗE'$›ĪÉĀ<ŗ6„ᔦ¹F=ł×2·”UZΜ’ļ_xļY’Żé4ČģxƒĢΟŃé9ł=„žģāģē7Žßf?>;ķ ōŸ¾’(šÓ¤x–·’‘ż*å‡ć/}ķšÖŪKž†×u’< ’Åk³µœ†uG4&³˜[_G©L’}ư¢0ėqŻw;΃žB“Ķk`<¬fź]#ŖDU› <[yƲ#g˃ŲTpBL}*p%mpĘbģTja¹„Õ|)ü¢Gzš’#bžPę\¹’neä4W¼5ķ•a_•ېAŹĒł&a[žō}¾v§ ßŲą#l!Ü-8ģdWÉ ˜ĮPpÄ=ÓŽ2zŸ™ź8“±R Y—“+¾–§Mh‡«žŹ—„Žs#ؖ­|®  üFæēb³„vä`-MHQ%"§S9†Cņ—¹³ŌxIØDšƒkiē„‘¹» zŸ!õ€°–x4®Ä¼mߔ̳Ēźq‰ß£1t¤š˜=-(‹-y ×€7db—ļ쨹,æ*©²Us OÆēE”)VĻĀŻĻjuŚ=v¼Żc§+郟f#’8沊nݤ Ń0–X#ż“ė2ōžO“FÜLoƒ¾yǶĖSš8Ū„žÉ—„ęmpŖA7Ś)#įiŽpļXÓQ>1“žFĻ‘ĢQň¬˜ џč΃Ķ';ŠMŲ ~s©t΁5;vØP@m¶CG‰­s§ųZŌ£²Įč±Įw¶(ė"Ō…lUwŒĶ‡Āk°ŖĢG`×ļ¼ ¤§÷~­iU…šT†7ļ ·²2vXρ œF‘$9D¦[LĢŽü雾v§‰Ńol01ėœ!kå…Ć`w²Éęz<«`mĄ ˜L|’¾bcÆ'µBŌSŌĀ"Ń%Ąmµ 6w…DūÉĄćŽ¢•ŠŁhSXr­W²®“N=²eö“Ō"}cGZ¢÷›:žŖt²źÖžšĻʉe¢GŸ™„yŖŗ‹IėVD¦ö2ÅRÅŲk% hŪ"1”,)æ1Šg#§Ō·fd7r§ØDL„D«–ebkÕ­®č“2Ś:AVŽó­š”B«¶"ōZ˜jŪ0ÆóFtϘŒēw4Š“BٵĄQ ™=Pnyć4Ėł˜JŅSĶ+0“ĮƜE-“bšŗŸż"‰’¢J-(M‡²ä+S†¾ŸÕķōuģx_ĒĪ^æ('ˆŗ$Öąóˆöą ĖRųX6ĆjŽĆ±ęVŒŚ e ”ń9Uo‹„¼h‡w>I؆¶©|µo*Gē­Qlp‘6S =Óaįø5”-Ōćxģ …Ygö^+gPćņš8Ū£ Ņ?“`±ic)»1€o ĮŗÓH[$ÆhFc”ÜM`¾»'Ą|§0ßq€łĪŸ‘eł„ćķ‹’łčż||q”’»/'G_²÷'_ĪŽ}ü˱fHśNüĻV (k×4Œ3éPnC¦xZŗ”a[c“£ ‚ö˜]^Å3ē:‚ē­9;w§łŲČ ¼|n«$ĆG§%Ņ÷ŠˆĆļźÕĒŗĶŹłæ—8«yøž ÖŖ”_ĪvŽ­‡^/]žO-2I%“ęĮū^;°…]‡Ö,ģŽ0{ØRjŠŻNąŽ#‚iįJ?Ō\\YÄH6•ˆJ^“ģ‚Ł\ĖqćĆĮõØń”Z%ELšÖņŹČčϹŻÅd«l%}—Ī®X’įÜņ©š Ółqšé°kŅZżÄ9ŻÕ-}”„" ö6Bt‘!ŗ’'ŲŽŪ .œß•”ŽJ _ gˆ}“*ټøES½„™µ˜€Dž£€•S\AĒPe›`ŽyhkIĀ(ģµ…~¦IEoĪAs©¤'Q{Qc &˜į#Œ®•—LŃp¤;^ÖÕ¢x”żĆ°:ŽF »ć_]\?Z 3TŒąYL§Ė¦O`)į² :ˆɘ¢9įKĒĒ“5īg‰:XšĒ‚ļtõ]n{Õ¹ ­ÖHFEÕĖxäƒåD~†«öś›¼žĆœŹOƂ)Žā|ovb\|ÜÖBŻŠēVb-6÷Q­‘ Rˆ‘źåvĀźŲŪaV’$$  Š:Į‘|Ą0nŹųŅTČu ƕjsĒHøÜ4‡”#w­`#ä kGÅ*ßśD ’Z\‹œ'ŌĄ`ėŸ7Ņ*}&ݾcė” fXŸ±źEO”^o»qnģ½'V‰õr ĀE«·ĒQč"¼ŗ·½9åŪ}P½lŠ%ā+ ] Z;L2¬©ˆø‚­o¼3'ŲuĀLnō?žĀ¬©RP*7wŌ>x \Ö¬| I°Ōö¼¢r°bå°"ѱ„ŗFŸøńW2?¶Au\•Ģ ¢5WåöZ¾×I.Fx¹¢:™'L’^ā|ŗ.”Ž Ś8›jÓµŒįē2’ķ·| Ze¦bVÖÓĢdŠņZ5=Ā5Œ~ģR¦\S’u  cŻ]70År@ņ 1Q [澎Ą+ŠØ™śĢĄ˜®Ŗkł—F²ØAŖ ļ§ź:ź½E*łZ¬°;sĄ“šIdH›ń.Š:˜+R՞Į„Ūķ$aH&SMŲ%å™pąO ūÜ-ų8Ņ)P?ęIģÕX;ē|?łF¤„,-ąMiYŪŹOŗ™‹ĖRēĻr®-“`Œ āĀ÷3ÅXųŽĆĀw^ōAŒ~¦Oņa©”-WÓjX 6Õz4ĢĖ›(ŽĄĖĻČ_¤·Ł6!“uå@ćÖ»9y:½2¾cŻ7+}#£ś+°ÕĢ>MÉ GcdäņŽnÉ0ƒ e-%ذ!«źtn®W3ōŗ‰ä| ļlÄ”Ģ%ƒĶ *ē7%¹/üžLvŒQnnĶ03±‘u5/-iöD õ˜žŗē£m‹Q~#ūŲ‘5ņ¬5:ćx‰ObļĄŠ™/±EóѤ^Ķž’ÓR6Ē›I .51«E½4BsŁ'€ŌĻ‹d‡ ÅSp¶µ°õ呋…#‹ųDJ$©UŻv.LT Pu?ŒhŖy‹ŖŚėń &ĖjZDāģ,Ō!%M ßVvZ±bĀŽ:¬‡x&6 9FŁt¬šI­ĢŠė÷c·„ūˆŖó~g]ՔϹ ˆrSīĮ‘÷7eqk0ÓÜ\:¬jć¬hŌ(ĀtK­DĄY¤ģ“»‰¶``Ó©˜~ϼчGQ»Gœ7RDąLµŅʕ`Š| מ¤ ¬bĘjęUs=Ÿ=vōĆx9cdŖ_mhæ4Ö¢ŠA]–ņĘ’ę#Kżß üė4š5XŽ›N·ŗ@öeŽ;¼¤ū‹;”ƒ3g>³Ę¤K&žł”|$Rr+…É9ė%׌żŒi¾ćˆš5D8›Rŗ™ęÖh‚äń p?£b`S}ė’S¢łT"w'¦¢a5³Š—”°=šLGŁūZŒå;ī‘E˜…żł„\ äMŽ„³ł6±3śGNBc‡4bŗRļ•dwˆŚķŒǦk M(“889åD üŌYŻø_¢“(‘e}]Ž®o/‚œ† ‰ Ź,‘*gY+ö•QĀ€£X;q«y¦Įbāā“‡ąœ”p[öŖMŖW}Ņæü ÜyVŖ…ŅrŁ.q?8Ż–— )óĢ"Ēģ_嵗På¾$…°œĻ`—Õ8]z; "‚Ėe­ÉļštŹ_ŹĖ«iiģ„hӋ—ČåfÄŃ”oB¢L~D! 걒.zØņÉZĒ›©jŗ„©Ń ²õš—¬•“Mc*ŽU,Q¬£u*“œ#ĻHÆUXGFfŹy³ćĶ’8‘2äōČ wßP :Ŗc”Ā ©Š):Ńå(¼DÉl‰ģ„#YĆĻŲĖ8ќząƒh \={Ę„õŹN،ĖÉv>ƒ3ŹĶ’”čf9e(©ÓŪyŅ81²hhGN»ėt‡”uįrŖń¶·%5ĢbŽĪ@?| £ųÖaĒŽ¼ŠYPN~ĆØĶ4¾Ź5s€ ł3øÆ tpƒłņL­. –»¢5}š*5 wͳĖĢ71Q Ax©uęU&ä®V˜*r§cz€Ŗl—®ļ“˜«tsÅā7ļc6q^lÉ̹Z=.åVŚū¶ŗŸī Ōw”¾ÓEØ/Ż ¶Š¹¹Z®|ø²ĪU͉„ƒEį(U(i–¦®`<靄ģroA“K­)k€G÷ÓÓ·F’W:Œ(·¼Ö¢ ‹y· Oęlx‚ńg„ØäŠHS"ŗŌ–ž%Vų©[Ž@F’#ŽmLBQSˆĄč?“õ8=L€Ńąš.ǁŗ"ŸuŠĢ“ĶĖ9#™ ķOķ ¦7PóīīŹŸ~I“ÆŻYŅŌol(iīöKšĮeeŃæ¢Źb¦™4`œŪĀ!ĻKz‡fĢcWÕbp1ÄĘäu×ųB‚—Oµe[ė–łŌrWˆ;>4}–ģ}){mźĖ9UooiŲĮ*š ­[ästz_a0"õ%Nlī¾’ŗG“{I’י÷ģ“LŚŪ}y ³ DbVĪs×_ģD̉¦ŗŚ–„Œ_ņųÓ/O!Nv„ •IP5~/Ū©fNvF*.+£'AŖĆ)ąŚ4ŽKČ_ÖM,éFjƒ·ĶdBĻŽ÷A{XFqø €‚×8¤yŒÜĖJļv°ī»ŽußķbŻĶDh”–^ ,Jh:ŌŖAõL›l  Se9‘»b²œQxÓĪ•Bwyæ*V‡yčn08å|ä]}rv{‰=É9–¦«i²g¬Z6$0¾UžCW$$1¢;ljm†Äom•÷UM”|łŪjµ“Ö.P8„‡”ŠQ„B_õå›X6,b­ō3"PŽ”@Ujg‡ąMI _XLāŁqĶ1[Īüf„r©[fņiKxÜ\ó¹įXn×ūKįŖS†OŖ“7ÖsŖ‡)mB’ĪcB«(ü‚æ°¬„הK}ÖCÉč`ń|ØL[—l2ŗ;äÓJ{;­5‘19eŽ‘]µ1¦a÷v«¶•C-ˆ7åŻŲ•Ųcz»»ŅÖ0›ß¢¾sĒ507?ÓĪ`ĪęŁÅ²¾¦“¹ČkŹCÉXiX—y›•Ń’;× 6ʲ )儅œ9æV?5…® ßyŚčs[Ŗ ĀČĘt‰";'[ŁO!:"7h=¶z> yķ¶š>ōš„2D‘ ŹFKÖAĪhGs?äé 5#2›/ĒŌ„*gÖĒoŁ{łTAῨˀ>Cj+W6Ćy\ωѲĒH{øÉ«¢•~¬ÄFS0jģę†Ć¬¬@­Ė§Ķ™}X ŌKprž=£lwčūn !S"¤¬ź•5~*ĻRĘ<ēƆNKą÷Eģvą»Žß½ ī5. Ü>uņvģ9o„ŖŠżā½œģtŚiJålCś<ĮæŃ!xµÉd3(Ly"²E™3nļžŠ KęIĻb°¹Ūś$R€ĮĪ”mē†K®ųžŅ€“ŁŲ˜µ¶*YPDv‘ņnęśPM1®4šāŃ j@&Ń’žk­„­‹{óō2o³{‹Ö³^£qoC××pŁŚh)×(JjŌ¤e’ŖšsąÖĆņĄŲ8˜T¬.yIF*×}eĘp{ąfÖ«$O˜. ÅĶšhĢŽ Ī`œO½sµģĆ"ŠŅ(zZ½¼³K–zMĶTµ”4C1s±ÆX†840‚ K”ļ”ŅæĘ —V0TæŠó~łķnd%½#éĒ·āźJcøCÄ·©‚įĄqC&°e8¬¹„”WÆÖnŪ©•ÜgkĆä“ƉdQ‹²®œ·F˟½­®4’ćęPž­FKń–ƒĢZ‰¼}p ¬³Ön‡…XŽŹź<Ł0.Ә—T­µ+ˆXW²køŸ@߂ķ=õ”v;}»Ž'±Ūńh}伄 hŠĖĖ©‚«C¼OpęFˆāk>+×ätւx“ÖēŲüˆóbž3;_@ėgÖtŠ8;„sø»Čəmfö5܃ÜkŅ“"z MŚ÷éĪ®2liŪ/Éõ¬ē‘‡–š­Čn²¹åó"aä™y ōöe±vżj,CķĢźœō÷æ« Žaŗ0‰Õü²/JF(#¾^]ŠVÕ²­†ÆÅŌ æ’(ē~ż4»dś®#Óww’8Ą®‹ÆC·Ģ/'ē'ŁÅYöńģĖŪģóŁ›³7?9:½8dGŁéŁėņ‘ćÓ拓£ÓŅnCw!6tŒtåżEA?#¶č °åc¢ČV﹬’īņ³B”Xæ¬.SL›7ŗÉb4öVŒ«:ōb¼ĘEį¢/ ĖĀŚÆŽęI{LŁpYN5ų’ÆĮ»ņÓv „20uØÖ€¶¹ßOQׁv‹[R œbB‰vT1/&åF!ƒ™“”ĮҘ‹i¹R4@.Ę@†V±@”“ x€teææä@Irbģ#CŹGŻ:ų1B)ŲFśØ —£D…™åP‹œļ—ōĻĒ,ŽcM:Ś¾Ēˆ;“ZœĀlœR˜Ž½¬u6dT”½ępĖ1ļ§ĻC²²ö”jģøōK{1Ķ–±čē”Ę@FÖ>1KZ”ŠŠŽ4‡£e’…­€ˆóä¬JT>p_RwŠšśyŃ*7Żé;¾$“ 駘…]ė|W¢ŠqēŖęŗ¤Š{öM%¶“½gņ¤ƒÄŽu$ön‰%]˜Į8­t£(õ =Ū¢śŃ”‰ŪųÄn+]jhŹWHj”«>q(e*Æ/s,՘SŃĪ"ƒ :zAČZuD½˜Æ*ŹŻZ²1s«d2;K£oūü¶HˆlČĀŗyĮÉ×¾ä‹I^LļZeCć™Ē:cµĖÅ^j‚m+ßäs*°°vhķęW•÷«ŌEȁõ¶`ŹcHFFšDĪš•«äDKO12×jöcß©V©š³ ¼¾Ų•ƘCvņ›ŲY‚ˆž3† ¹“\XMļóP ųøĪšĖ+ēŽA޼īL®\¬a·6»!ǃØU yč̘'Š% Ą?\™t(ōߏ™ć>dÜ“2ŗŲŲÆ¬õG›d"kę }3Ī}ż–ųLŠ4ĢćOš”=1‰²mµ’Ć„˜üUXENį+ś›Ł“Ģ×YĶ}¬ŻzzøćBx[x®Ź&r'Q”R#FebRFhÕ()OŁ[§t jY_žg £Q“™€:¢ĆŠDˆˆ•s,v@G\0-żŖ–#{M±å„£7.Fecœ¾ņ½ÅXNß½WokWŽ©Xž ˆ5ƒyÜĻāvŚCv½=d·Ū’ ķZz㢮č éž‡XqUÄveL&Xģ0‘²sW f93—¢J(s' h»óԐ ŖĮb—‰Ž#½Ęüfę8ķu…śĢ…ēL ż+Uo“Ŗc$oŌFˆóUß/™ō¤ D] 2^4ĻØtµ)‰BlgW2 ʬ"Kŗ²gEūkķØõžšv…:ö8Ÿŗ…TWĢ= ł¶ čN—y_k8ÖŅ۱٘Ń*"iÕõS8ĀeöKY_•ÓoQ&ž ޜ·›]¦0XāT0=—ąč›X@ł• wÕµRĄöČaō—£cœ<ó¢ó4ŹĘˆĘpą€v'Æ_Pe<|'o¹ Q>ųo¦•Üœ<Ģ DdG.ģ5KÉ™—žAU"ž;}•(ś`%ø**“žĻr$fNéźģ#x Ė<  Ø£ 6$äǽ_„Ė© œ§‰‡-ŗĘȜf²3+ęƒÄƒŁœėmŹ©.Ŗ¦łH ®ź²jŚžĘš'å$§)< ¹–“šӘ­_…tČÉōyÖ£½d>Ā-ę‡ ł‡WŗŠÉŻAuĆŠy®B’wXtŠ«ćŹ¶Ę£¶k,{3`ŹvcCńÕ.ū]mŒėķÉ‚¬CģK9"oƒk3BCŻ–³…¦p¢G3ƒīÅJ ›tŃhŻ;”ūĮų¾®å7ribīŒśyrń<ļg};!»Ž²ū¢—ķ†w`Nšvį ĒÅR%ą§Š—墜–ĖĘHAT¶–UŹ•³ƒ@L—؁R ©w}Ć:‹~=(¦1.=s({ øŹė ÖŽÉ©Ķ˜ˆ§:Ænc€pR¢6š±ŠÖp ßM 'Šhz\YpŠŲ’²¼\Q n1ž%ŪéŸĢČ©0Ų*‡ė”jø>JČ3{©{R•“”ÓU-» :±n)Šķ¤µaÖø¹[ZŃZ „“wāƒ@ż`tć:CéΉ\Š ēµÅ{Xj`n8hs•¬ZēRŒˆļN?qŸ‚Q_ˆä¬ >[‹K›¦7ųøØ–  óN]P᫦C‚ß(šš“ 1GÄ_U +q’[‘"m’šī ĘKŸbT”M6ł“ĘĶ»ĮųŁäQęŌo€2Zć†l¤¾Lg8™A !—cMaŸ<õ!=+iĘŖ_łpé‡\»b"+~ā1 -d+²Ąėā<„¤ˆiy™²±žP_ņaYcĒ”M~ŗD”°$æbś8g`u†•`=8Å®?yŻ(ŠFMŪ™)ŌĮĒŽõ—Cv0!#Vį€zŠ‘t½śŒ I›$Oąg˜čĄÉœ. µD+c½}’±üŪüi’iY?ĀD6y5]Īb.ųh$ԌaÓ9ņf#f Łüć°FnOA“¾"šČķ•O—LŁG.ķ½aēō½Ģl§Wd×{Evų†ÜĪ “™ņeŁ=·ŹKŻ£!=FĻ ŠŗŠ"©—Ć!pJŚ…0Št”HČŲ†–čūŲł0DɊKˆӬļĪ,įCĻ—t•2J²ā(Ó4Y[üGˆØĪų˧ĖīÄU€6ȳY&UöÄąįƒs'ōł£Ź[Ó«ĘsnÓ•:оVŗ“ÄńŒy\żVø03i,ö>čß?N Īšø” MQI×fʧp„®1>ūp- ™%7ZŒrßdŸ^^!tī¬ęjZ]­T_(ą"ŅvsoĶ'¼†÷¬dŸiyn“°”½\Ģ6“b {™š7 śÓ›ą 9°ŒŖq<“g_ä8āžk•bhUV°@c/łT)c¾ÉĒĽ-S-l%Žf@ŪdņĘÕlӂøĆóó½•ćč(fևCē(y%żÕ@N§›rZč„QN^‚'MŸĆ©‘p‡y"@bōbÜ ·†”“rÄ‹Ӗs‚īŌ5ˆ$Čųg’$k«d¦XX”ü=ŅĢecŁQ%_! <Ź7UH“æÆŃ䮿?’VĖO\ŒŲ­|ĄP“rŒVXŠbwµėY?~l2Ā ¦«=¬QūE“⤀`®¢OĄēć5·D?¹VףńēbPZ@aved„×zųyę嬑^Vńå~¼~%Ać-Ćd·UbgG^…*D“U ÓĒ(łICźÖé&·“5=Š„Śdå1/ٹf‰#fėb·U>N«5«dļ-Ź«™źÄŪX R@„”•ÅVø’5K1Ū°Ó‚3…'j–›©S“³ žJ•39•KqķM€”õ4H¦× ŖŹÆĶ‚Ī\s°—p"^e§k‘i؉);g:MŠŖULˆ<źĢo$bƒć ŁmčG'Ł4䍷2d“(^ŌĢ9.Ž ¾äĮ+ćpNʇŗHóāÕbF[͌åŃNĻÄ’źĮš,’Ē#onĪq·h£q]Čźzf<”–ńęq «ķ ˜“gćņźŖØ’ÆrĖĆōŒHPu‹ąn–”„;Ą&U–M,jČ"”€}sĖŪ9wź ś$Ķq?•-»EŹ~E“S)õ"šżB­žŻ- ÉQFÖŖ‹Ī@«†å^öxÆÓ²ēm {Ļ{ķŅ ļĢķŌ“$—wWŽ"Ć©„ŌÜ&w¼¦Ä˜{Wwō~4Ø 'øś‹¢€>»JśŅaF»©öŒįE-thŽ€‰AåßŃćįķö†n5ČN8¾ņY–e³† «¦Pn…8˜–(41€yį#«9“éh7q0ĘĪŅ”J{ā\°¬Cž-Ś „ĀÖüŪ,@e-Ÿ÷ūH†ņ>J>Ž­ęajQųńoMÖÉ ÷(;µ@6ŲR}žŹ#ļ/!Ņ]ßĮņv¬P½ĒVcsbϬŖ«ņ.w‹uŻĄżĶ§†;)ś,é€`ØB:„©XĀĶmĒwWPR–Ē?’3ĮśOH‡Ä½n}ä•€AŸ«z6csefšÓž©÷.\uiį$Ź>ÆM¶'śœ`éטe4Prm”·¬²¶žX^Š%Yęā²Ē;ĻA34mĀĘŠĪ^T+’“Ė8–åĻz `\9kņĶĮļ’įčÕÅĪ]-›8#ĀPķśÆ²ĻSńUĢG#ƒĘW{7ņ«ŹŸgˆņ€œqŌQcŠųŗPī$ō Q‘‹¤ŁÕxż!ŹØĄŠ&5¼~°z?;ŲiæŲóö‹½ķ®4+ +éDAŽ“ I†­(“ āg9z P`†Øš¹£A_W}?iž{_rƝ×؊bR¤s\k¶O©7Éź‚U^Ė Ņė†&J0ż†§āy„żŽ”ʶ”˜N`Ė;aI@¬1¾oŖšZ!”3[_ß h—‘ŗ`źņ±€ź|Ķp’¶t+™ÅŠfVŽ”ĒH›*&F±Ä˜T³ *¶..§l~žh];é*ÜÜ'ėß¶ž$Åkęł~ ę½ų}ĻĮļ{B$ą—“>kčQvžóēĻĒ_²_?œ¼łmT 8ū{öėÉŇģüäæ²ó‹/G§ļæœ»VĄž‘żJ•€õfź½:l²÷ŚĶŌś ĶŌŽ³L”Õgs„ņ P’Xė7{q ]@ŁŲ±©5p÷ńS©²ÓŻUĪē6ßZŅ ,„_K¤ŗÆy8ĶGō|yŖr“‹I9O6/ŃQŒ\P¼žA›Ev@§‹ū½ńõQ-tÆ”óPM®RiB@š\¤ūķgŠÉ””Żc„+9Ūķ_fh…;“½żCL†}ŅƒŽ"Į‹œĄÕ\8é"+Ą™Pm#šT#źŁ+āĢ.œ˜ČąR­TT…zĒQéT+<G”ĆŖ‚ÄŃC³Ć% ™^eiMźŲX„‘¼Ŗ ¬ÕJć¦ZCÜ>2„ó‹d é$J9zÖŌDM”ģ °LØķĻŃKŅ½ŲŁd`Zóhż³XTtĀ„öżLIžź’2U  h—’H\ö­~ę<É*y£˜#]üń˜¹ŸQźtZģy§Å^WĄ™v3“B”N»čӒų”ž! ”?4[9Ą˜’C 1A©*sXMģ”Eģuh‚¦źhś‚ŗ‰v,ĢɂÉͲ¹8†ŗd­jŒ^5eŪ5zzq ’uœ·Ž“bj)h#c˜Z-a:»@Į¹¾»Ć3¦\ī„jÄɧe**JzQ3²!-ܬ/…‹Ęˆķµ¹žœņ¶±#asG|—<ā6ÖÄī(ų‘3Łr®ĄŚ¹«øŖ•,ælAR¢(ēå$-dVßĪY`7Óū!‰¶ąwČč9!??uøÖļž„ē64vIĀÆĮ\ÓUŹÖjŃI™×;{^†+ó)’—x§+föQģģ^0©#bGe³a„!…æ²\[Z€gĢ$;Ńńę44„Œ3ŖōŅ«±[°ƒ=A•ĒõÆÉQĒ‹³znļ2' `¬®Ų²­pßd“üN2ūqxBaė²q»ö9/ó˜ŻVź»®ĀEģŗņ²Ä8f…TI9jlt‡„VKĆ ųžÓ iŒŖ£&Ÿfgßģkbnź±Ń܎˜»[.”Kßń6°©Ś0 œõ—†f²XEøIŅ^§ƒdĻ;Höŗ$`X±ZŖ b¼Čā;ŠÜŲ¶$š[wŌ÷Ź.+&2WDŖ›¼ę(¹ĖŖŗ® kš[pyńzĮ>Ņgzę¤Qb†pÆøō|}@Nß҄ЧØén·q±Ų°ß:OwīūŖŒŠ č ćā]L Y˜ŲˆŽ1ė,ś9Ļ&¼žĻ×ųm0:f ;TęĄ\żT\Lj\[5CĮš”øsǽSĘ ]qmči ?ŖŽj»KW4$u‰°å­¶T;ņ°R9IõZf¦Ø+ĒOŪŁ•JM}݇,/Ņ1tFu&š īŅrm›Ūf6śLSN˜›”ģƒ»d÷ ż›0²ēdś¢£źJƔ˜(ęWÉׇ5¦„ģv!½Ē 2ėÖ?5»bœ&L’‹ßVLƒX¬¬ōfx …aj›W teÖ“ĢkŪhĪĘ8žČuæģnēŽ“`…ÕQaĻcŌŽÉb”żĒnbLü„¤‡ń_ĘE÷i„āŽ@)Ž&`<:99qz¹÷5†÷|9mQķe+šJłZO@52©)|åŒŚ@Ė3t7.&rŠ&遲vSžĘžqeVųd>v’€wŲg13ųl”| Ö-†Źė\ŒČÕ“¬pć@šą§ī™°é“„ģyKČŽžϧž¤öԟņɬZŽZt„gɝĖaOÅŌX‘Ž4€ąģ©’&»Ć½éX_#÷v &µ_¹uuŠfMZUp2zަ3ßɼžÜä0 ūch˜i„Šyo¾,Q±kB»+8}žLMT¬7P§ ;  ŁĒTö=R(>|cL=)ڙÒ`²[8Žj9§ø¶ĆŹķ6f`8ņA½WKxt‡÷ē@•ß·;v’÷ƒf^ńĶ$Æ—=ßRTčļLŌ]ŗČß”q½²”L„¤y åx”w=- ·A¦)e ‰"՗źąä,.œ`£‰Az6+šM“­j”PScłxRčšG¢ L£ÜįøĪoͱؓR;ž“Ųrä[ķO—ÅRĮ=ųR™rӂ4ß7eS6 Į€D}šČ£—K"v£6Ÿ÷ŅX’žÕ³žČįĮ¬.ļƒe\@†b}*żŽ1†Ÿ+=žŪ‘ Šr˜F9h ¾Ä†ŽøÖäģDŻbL¤EĢUœ}FQŖ|į©žd|ŅĪŹGOØų)«ĆG\7uu£Ä_‘24`šĢł–Wx†ķ\liC>U„'¦xXķ•ųš~v²Óȱē{ŻFßv(+ιÕ}&ŽžŅę ם!ŅĀv‰¶nå’q©)ī-$0Ä ½9sĶŻ:Č.N¬ÄĀģ³®¼¹myf Į^ŲĮCVėié»å‹ÜØ?“ė&ĻÆTń ¾—ÓüžPwāįcŽ’Š4].xöŅe ³aHOœœą6ń8ĮYU&OšĢóĒ ÷~ü}'x `Eä17Ŗ¤u“™€ (A³i9uĖÄØ;ĮČ[R„·¢ś(S‰,ß[bÄRńM#“Ū÷Ėæ—„ŠtsĮų:bžrÅtŲhŠ[0‰č™ĪõÄt‡ŽŌšg\øD¹(Ł”Ŗm!¤ d˜zžī=k+V‹=oµŲ{qųWķ¾uœ °²ŲĄSvŖŃɰ¢83rä>¶ö=灕sj’„Ó7Xć!Œķ Ā“ģB¢47F4e6K›Mįå3=tįĖ¬fÄ7qā Kåū „v²Žū)84Č?ßVÜ_V±čž¾–gćŚ½—OĄ8; rf d4®(ö\9#ƼøÅÕź¦§Ó &Ż{q‹ŁbZ­(8Ā™\.ÓM­s4LŃĪр¦@;Ö+﷐:`ņ=“ļm“ß·H·QÉūÉyöĖŁ?ŽŽƒ‚čĶŁéłÅŃéÅÉéŁē}a?žŠž öD+q4F’+{ź&'œ.“<“QS­ärŠrVä/łĮŽCƒ7ū#Ūbś“,róÄ“M Õ»•ĄƒŁ‰j*ŌbmĀśV¼Ū¼/Õ°(›ÜH¾,9n„c¾Œ7±µŻĻp²C+<¾-“³ÜištéøłŒ6“¾„\y/ ķįhBę,±•ŻvķŠĆ¦֓Y5IŒC0H uŗźpD¢ąŽ”¬éĮHÆļ°{ź^NW&¬kźBČ 0„šZņ6¼u[LÄøló× izŠ'£c%ec]ņ;äĪ ×L£Ŗ»i²āe¦Zt›(0%į ųė"įŁé+3`ģ„Srm;{1m½‰µ®5›’Ų"@扚=}ļģPg/!p‘P8Ÿ­Ē•¦°yФĻ>j­ÓęĮ,~/%Ÿ„9Qü0/Ćūńčķuš×{ŽæŽė௓ońk˜i’ćŲø-¢æ÷j©"@ŽÜL“ˆß•lr…]„­øLPŻéŒiW=(pŖŲÆJˆ'Ž) Ż“øu‹PQāŠ™Śœbl UY– ČŚÉ³"Ō—gß&H½ÕŸiˆś6z•˜ŹO«"ÓV—WŹS”Ģ\Ʋ·h²VŃ3ÖōÊ~5é y–K»S`Fi‘TŅ/w¶µq=代ź]Éö‹eéX½–}l\ņ?^”ļÄ?Ł,Ą~ŠzbńGĘžØv+ (r„^·²Œō¢$ök&*µĀÅĄØ_,Źž f›«ę³…ŒÉøāæĪ«%µßcĪ5µśz)o²£Uķ”wšB&ŽļS™ dŖ§4SržWč Vü~°Šż {ߣū]@¶"F²°Š…1“¢Ģ—U”¾Äų”ŽH‡4¦Kž¾Y ]·|QȈ“łĀD‚?•ÓŠ9•ų¾±†tzџ‹¶Öń3oÅ$ēsš44ó«f•½>Z" • —|i„U¬HQ­6sĮó8”ó2ÓÓA—© B‚XMˆWŻāA®nio§†:Ø'$JQĻS±>¢YóiŅeÜåä MķÜm€Ź..[Ļ[£Ōfdȶ&žzĶå{[Ł?ČĀ=‡“vĶŚ(Q$Q׌nGYUE€4Æ«WfTj ^…ę÷Ųzčs˜"ŌĻ;6œ×š'Æ5ŗnfrcV½ė'Ż]‹ÓĢ:Õ¹żhŻ÷#„¤y uHUnód`MŒ=|˜w†ą-^&>Ŗ2čÖŖ^„Ą“õ«®|M“R;[iø>ęR‘dƒ7EK‚·Hé+ņ¼l,üm”ģl~]:¦ŽzŲĮÉ“.ō•TAō¼”ś¼ē„ŏ“h»ēF9øį#kƒGõ[; ³č¦f–‚!ZśJ‡37Ī“ž4ÆÆó;«¦ßöwĀæA¹MŽCذ4Ø SĄ¼®š…Ėę~UĮżŒ{ßaÜūŪkŁīŲ;q•SÕd”8‚ÜY&˜YŻ“©Ō½įw#‹Ū±œéz³Ž#w9= ńqĒ5WśĶ])2jŹN3Żä³¢š‚÷˜oaKŪŅ^ЈhsŗåŲq„ƒ}ÉkžÄČ( ZIx'')-ŖVåj–š8Ć|ģkź5t‰EÄ.Šžž"ūXÜŠD`Aao{¹8<‰m@FF'JÅīóløœNŸ€Īē·ßą9…m­ĀSJB™£z±œkå²Į©^»w®m *x$j@e£æ2h÷E@ӗ†’]°}ųB¹b],Źų½9:ō`B™Ż(*xĒŅh<=A”9‚*1Q~ü¹ ÕO²ÓK T~ ±˜°Ü’š%^Œ×S¹£Ć­ķi3f«Ć5«ŒØĖ>tPcĢΪڤnĒ+€zƽwĮ:ZxŒ©?)x!<œÕ.5ÓÓłøUS‰k_—ęŖŲӆVgķ+M’‡†ĮTjH—ŻöńG:ɰ!pQ‘KKÖtčČ¬ĖųĢÖβe•üŃÕr,[„’õĄ×"&³$g€„.”~k ъ@ BÖtżĖJČ©«>ŹĢ²»†HÓT#7Bš•»;”?k«Å#“Ī,\2Ŗļ«F‡n±ŹĘĀ£x¢pŪ€œŗ—ķ4ģ{ĆĮžĘ†w°YØo÷äĒt įä@oŻó‹aĖv¾šü?ršå³W½A8ĢēH¹‰Ó}-Ń4Ś9g$¼ķY^Äė†f‹kÄŅu×å2¢ēś«Ū>Öä·š±Ņ_mHŻžH·EźaÆe…¶¼VI˜_ŻŻż0[k›Ų¼ņÖĻ/® ŗ†@pįł)‡b‰f6hE°āżL ³ ŒŃõdN›¶Æ1Nag³EéŅ֔¶Wģn3mQ­ ųb²jJØ^'ŒŻ!|[]iZĮT°Łī˜įśI˜}iō“~ Œ«+MÓųUüx#µ>  éMF‹ 0Ā@ %܁qy5g¬IüB1šŻ†¬åq Ī“4¾Ņŗ]£~ –„Ö?ōk®Ć1#=ĪĮš<ßŌßU:K=Pśivf āĻ{Ź¦–ū,35j§Fc6Æ-ō›łŌŚÉ’ttljńO/ą4r"3'/f1rL„}Yk³„+­®‘•]U˜0MIėXFR?ŪÆ΁źÖcŗä/īY÷ś¦ēT‰™P>8Ō"āųū¢óCĄĒeÓ"°ŹqˆA-Šr˜Ī‡źb„õR°ŖmÕZ…ÆL Ÿd{ŃÕ50fL>Ū%TPƖ¹3¤Vd%?ѝ; {FõQ”zą§āvņŽ8-Ä[4$ėõķµ*x²–‡Rd7‘²¬¹ÕųéJ6›ÉOŖŅfG™iÅš “c¤?™¢Č6Įts|”’Č–KņŖäF‹嵃>Xµ0`LÜΊ"ŻvźAŽÓq°q‚m`ĖyŃžlÖ®#µ&¶ÕPQŻūK‚Ź_T­¼šrŃ3¤.Ž šiå"ą—brĻäJĖ—͆²„ ÷“”%µ§sƀå³O&0"kfAW¹JŚ®O’¢¼”ŽOF“ šźˆ,ÖJ6Ć'­[鹤gÄm”\…®gśj WF¬|ŠŽf£q§’˜ncgŸhJSm„ī•B,s'ėƼ‹Ÿ ”q83—G‰įĆ=»ö;} ūŽ—°ßķKŗ2 ØĘ!“PjŁ4Ė)ĮGrSć2(œĢŅl®&\z”šĘ“NSšŲ„n:ķśØ:Ģß{©ŅА>t;ę&åī„ČėrqWx¦éYč;m„K&­µļnÓŖČJ“¾C`“6r /Rč+&7Ó: ˆjhשą iV8ė“"ŠĻFKpįØ9Ć­qĶ"Di”n gŠ·”ė“\0rÅÉĪ!ŹXƘ®ĻPą;$“qR^Lsæģˆf‡—r²łŅZr†ćPa(o\>– Š„Cń {ŻÖŒ¹ܛˆcĆü…a ȈŹ*“į`·…į+’$vųrØ9‘ycÖgT”°0|©Ü~P{Ū¹d…Cuł~¶ŗÓ±ļ½ūk"¤Ÿj_$™ %Ō&aCŅQń(¹€ā:EŸ—8rŽ×}«Š9ŁYsĄń€—Ic>¢żž„č%Ōy(óCH=3Ó•ĢŠPā.›!B@Ž“…AķrĘÜ3` Z$ų5˜7Óšõ%™*8'ģ„3ÜžžEI#ϰ_ś1{bČ#ĖMp†“c©ź5¦er€‚ČüPD";s;wµƒ„Ļ]•y€~Vu+;3jó-mõ…xŌlŪba\”Š£BG|ģI"Ęœ=®'³\Ó!†į4QujeåV2“īƒšg„ōmˆųĄŌZa 8­XŲLēc¶ę¤ńµč¬%”¾moŚĘ fųŻØé(ŃųŖxĪ-å0hÕØfG¶Ų\¹žrJå“U>’‡œč9_Öž|~rÖ÷­ ļ+æ•(Ć #JŒź†ŹG^’Ö)LąÓƗęI˜n30ę¼±„ĮÉ ŠXęøž•®¶ł¢œž®NN·Lag¹œ(¾ŃT¦Lėņ““RqUYŌ<Ń~Į1Óx¶$:qDź.Ņļµ÷oE©mMö#:M5Å)iZęSĖU‘≓xĆC+`$ šÄÓ¤qWŠÜ¾Ózl =o=›ę·MŲ¼ 66SĮ° ›Š-©Čŗ"Liøõ|»ĪJŠ™hŠü0ҽK¼3NĆw/RźYÉąŌń'˜ŒŠU¬•‡ž0÷`÷Ruˆģh_9%K« sg¢5{•śwZŌ¶ė±bķĒ¢žp„KPŻP'C@wؘYĢ[ēßņš~Šõ+“…įF³mę75yéāXKŽ­ó¦µB Ųpq­~™K‘‡vĀ»Ó劉źKN±ČLĪ%ŌŌžļܚ,%±X?įs&NłŲҲ&¤2TlཌM’~ąōƒ» é֖oĶ#29>ć½®”~lØĢ²&“3LŁŁcØUŒ8ż4|ļĮ“w|§r,j1ó¶×‚ŽukƒD«ō<ļbw‰njk9 õ„ž*÷NŸĢGąžc—ĻJwž€E­µ7ˆ TFL`ċ gC0X'—ęäŻÜ®°- u¢‹ŌPG–•.ēlYԚiAjÄs½A6ŽČr&蛐ֻ»ŅĶĒ(km„`“Ø)¹K9‚UÜR>–ų0ŚLÆW¤1×ߕi“Æ©ŗFŪ×UĮßÕŌO“O7Ā­5Ų¢“Ų¼=­ŃĖÕĶmiiE”Œā!Į_ėph0Ķb<Ģ}Ō‰Ö†čJƒŽÖ6ˆEēģGˆÆ)›4ŒÅ”ģ®Ķ2&oR“'ė×KĀĄ7AnņV›#mż™Ū=Ō¬4É$ņp¤“½X.Č:肧#é£é›ž[³}|}³…VjA#’H”€6›Æ+~\…ƒżWץ)ŻD‰źcqčåʤQÄÅi<"äKœźØóĄ#bH×Ģ’¶‹Ł¼B>ćS g¼^2“Ēõo ·šm)mvō֚ĘģŚéĻłM°×Ļ%– Ć­[Ųżox¦G»włņ8Ō-å XÖs+ą·'T–ćL†ek2mĄŽs-‚ØVœ7ē`(ĮāA­PV’9ö3Õ²ņŃTy£“ŒZĪQ¼o,°k;,źūįˆżĄAģ]»Ļł0²·J±Čäl(8ŽiÓĘ#Ln‚X¤©(†€6j˜!O€1fm°••ēŗĀccrvš ²€U2ÕLci8¹A~cģż½ęŁ!q%Š‹^Ö§jæ»õŁŠßŻVrü¶\*ŅŅķĶwmŠdz½œ^QV²ńßµ<¶ö‘*Z§Õ¹Ņ|ŁVĻĘł³KW–A²tąČŖ$N`Šm4tŒ›¬Ż;@BXćĀš(P4P%’K -.ĪšĀ½©äĶŹ-’’ŗÉ8VÕ&씋Fž{ ƒXõū•ŗUœ"̹Pčfm‹@ۘüV”n(ócž›iĘTźŚ±rsķ” kėčd欤 A”Z*ü÷²,Ął™)„LŸŲś«räŠX‘;ݳ &˜ˆ—ź^ €ū¢UĪ/a°‹±Wr,0w—ž±®ˆäU+M“ DkåŌėVś„sÄFóK$Õ ­tć8¬a?Wˆ;I’|G|dņ”]€€§7ŅūqVūW½×©2%).VLµĶ†f65 laJ¶\8E„¼ ÅØÄ¤mé8Ąµ‡Hfq!Y°Šn–vƒvMĄ uóŪģZLŹDjM– ōčK_K‰+}ĄB”5’^ęó±'%Ź:ėźTg‹2§6Ē€©#f`‰ŅCīTž˜ąŠ÷Ö ĦV E*„4óū™ŽÖżĄ±ī{=¬¶u^Mµ)¹h$–±² Ą›F„k-@MŒuł÷­8žVv“B āj±Ģ®–Ä¹A`*±—˜ƒĆ!³Õ%^H’¢ ¦2œsĘø āę®@bģę¾”EŪ;ź"RĆme’`Ö¤šź± k8<āa0ÖbōŌZ©źR W9>oGŪ<°ź*év“9ņG=)ß?+ϟ OōŌž§eXš,ĖŽlØócė Ōp•˜)¦9ˆ*ØšÆQÕ(\`¹ /†÷Ŗ”CˆJł($‘€ŒMĄ©6Eń*3Õ ¶¶ÕG}© żI_b­#e[SXzˆ‘Ø”×Ū÷=jˆµ$½ś¬“ąPs)£!ńøŸf€ęŖ"\ŒĮ4<+•Xūs’@÷Ö¼DĻĒ–äT¬])x{IēONø•P†–uX\y *HŌØ"¹@B¤Né³ū‘…ŻŌ«Ÿ—$÷Ą±VŒĒÓĀҐiĖÄ!™_qYÉÖlPŖķ ‚|/ė7”¬a¦[—β#ØČ"Ž0×ĆĘ0%——ģ—mė÷§ÕżVõ· 2õé…e£hšźįĀ™Ų3bG&ZšūYĢ’Ą‘ų]$>+/ģŃ?¾Z-d4Ę`jĆ©5ÓaiÅ1 žß¬Ų-Xk9 ģx „*K+=ŲƄ逹ÅęŸÕ3õ”R%ÆłÕ²čwéŲHöKcBJŖ¹ ±ÓZ=64)Lœ>AƒXN«æqkQx`Q^ŲVb ƒO~ČēórˆRłOĖ+år½ŗ”Ų¼ińž›æä…=l+®f ’§2jƒģLb2¹Ō/%B=żŁ <£p5¾”#–Œ Ģõ§Ęøˆ—å§ÅĀ‹o!}ų ~ļ|‚nŃy»$LÉÉń†–u1­ü2ļ]“š¹MՆōŚ'æl= #höÅž³‰*`šM‘!ŁŌāF§qĄėlGˆ•(Ų°%q ³@ąįÆ1M‰, Dś^v KxęA.–ĪŽł×ņoČĄĖÓętv³BQǃ`)U_¼ć’ Ń8–d+{µÓļ‚ ń–;†÷å›?Ŗä2k€}>Ń CķšŚCēÓ™Ų™rĖJ†t£ÉćÓVSĖ[õ%[ÄNƒĻŽT£²óČūŸ Q¢ k9¦=S°hбk^Q ś•āœ•SR[9ļ”żĄbZŃ3o bsr>ČM*Ś«E“āosŅ„«†b°"MÄ$TƒSLŠģ]8:Vׇ1ķh[$“o•%WÆśEagƒ¼TdĒä~Ÿ żcčŗzźŃX=ĪX}¦®-yc07ęž<÷±f4ōųdmÕī É©ī¤ü’ÓŻŲųčŲŁ9 2€dlØĄŗšØķĶ»'¶åoņnæĮŠw'ē‘ėÅō?B¹µ§£·c¢ˆkö{9\/ļųZ#™Ś©śźdGұĖcłćĘkŖ8©łdI'vśiåg»Ķ§×ŽŌj>ēŚ%‘T¦Ō&ė—Q eŻŖUE#"-.Ėynq<ƒ^ēćźGm€Q>`½y-Žļļnģ¹ʩƯc8v"`(ŽŖAB˜åę{ŹäŽ;ĘhI³¾÷Ś VŠo„8ųĆ­ļĪĪ.NĻ.ŽĻ x>yc\ŽĘ}#āü7yāHčļōüŪ’4haē•>™æSżė{Ƀ>Ļŗ˜ŹS‰h7Ÿ’-ū¼•ķ(ŹžŁƒ°‰X§Ņ֝o JŽĖ9z­Ń |U,gĀĖyĢ)”™_-eÄtöžś½<ŽßžĆēÜłēNļ9ńŹ]Ļ©ļmzĪžsž Ļyž^ćĦǐqŚ…œM Õ {ķ`…» ßęóåŠd¦l˜ĖJ¤Č%E™A®Čfū¦Ģ·žšģžs·7xå®!Š÷6 Įn¶÷·Ųż =-¾LĖ2«ēŗĖĀ.kÓŚą"ųP6$pžęAōä¼b‰ĘT\®ŌĄ«X«EÆoŖér6\6¦™Dæ•#ō؜Ŗ«4ž¢Óøjhxp+Hq$c»œ!'¢½„J\¤ņB@Jh‚ŹŅaIo„=źŸ‘½īõfÆÜ5#śŽ¦Ł[›‘—F™Ēä%YŹ’½DÉNĘįcŁ ®zWgMJĢ;p*ƒlūÅžžŗżī÷žÆÜõtśŽ¦§Ū_3-Ļ qć)ʜȭĀ’ ā E»ucū0A¼IźZ->^‚ģ#Ÿ3a6NQˆ%ˆ™V! UŽžĮ[ĄjzŌ5ś1‰d<ÆÆ»œØ”?«AfĮX9Ź68½ś35‚e ((fµŲʾ–[ž\A[-ū˜Ė”³°z~[^¶OŲõ÷ ū"ņ/(T”]~xžyŠ›A¼r× ź{›fš`mw-į~ŲbÅŚ{KN†%ēÅC¼Dē—Žµ×71?ļzē9—ļĮų’|Ń{x¼r×Ćė{›žÅę‡G+Ėæ4'¤ģYā/²BRj–[Eē ø5•g Ń>¬šŅäQųõ™ā*æfśćĆņĆ?č ^¹kXō½MĆņĆŚ°ģé°Č-ŸēógĆBöLŵ =eTy@|T‘å]–ł3q½fŌ(›RÖLALŽVų«„²d-± –ŽŠČZē`›-Ś2·>‡«Ģ…³;Ņźc0ł8T·CYDAł*Me5lX÷dßHo›éoĶ „©„Ø(¾zOC],P­”LÆuJ£ö‰^@Œmt$B*^Ģø+Ņ‘¤£Vf(°ł ɾīéż"ŗĘ¼ޘ÷¢Ū˜§ł M]±MU@6ź-rü\Ih†>K}Šó–ŠŗøE×ģŖÓ8hø6‘'ść+÷å?_öV.^¹kåź{›Vī˵•{°•i®ö“jėāŁ[“‡:§Äœ‡Ä^‘Č—žbŃd†¶$° =5bĢd]Čz€;rŲšF õZåćĮWaļ,Įe.TČŗÖ¾ ޽z”mœū±Üö§jĮą*ۈóštĀ~Ŗ©I‡”-2±ė—²¾Bψē[Ł“£ q1}|ƤZ4oŒĘMĒœØšE²QPž3G±%CóUQĖӑ9MžGµrl.Ū9sD„jzaq$ Ÿ¹uä…ƝJ$ ß;!ĆbāēÉcKĒżRMAk%·*SńÉ·ę”?g6·ŸĖŸ~¤Å×īŒµģŻŃÖóžܳxKd†ĆdO–Äėą×°Ęüńž4šąVoR4oŸ¶²×…ųUÜ č¶›Å²N©kÄoĶR]ėķv^fÅMéöuN v©čŒ‰„“Ē9“„įē|ü Ų€® •F÷³ųa™JŃż\åé’k됲ƒ² õNÆ“ūu˜ƒĖcģHløÅ—·>e~żBOŁGś"Ś‘Fłh„Gė¼AĒŚ줒ńĄ>Š_v“üœ–.ē.±Q8ŲŪūkBĀéµč›ÆŻ¹&ģŻkb-ߓøģÓ¬Æ'Ķ,/¦|OM³hRĖĮ¤żp؀ģ0_¹żbē…—»2;C{XéõFõl€+ŌŪ’Äsļȟžsóµ;ŸŪŽŻųÜk!łŽ ±Ēg¤Ü#ˆ®+ƒ2Ԍčr.+żŃO(lļŹŸžCšµ;ĀŽŻųkAõŽ&˜VŁk9G“rą¼GļX™OŸHĀ“–6ą¾āĄō¹<·Ę»\„/žļ‚’śÅל,ԟˆq@°wE>¹žł‚Š4yWP`UVĆ/'ŗ ĆŚńĆ{'UB±0ĆDĶBnŗ `–ŗRå¼óf5+GZ9ąIłI¬ĻŃrh4-ē#dPžÄŪ“?żŁįkwĪŽ½»qvÖģ}ńį’`1ūR ’.fē·ÅøˆšNMċ6±éĄ)›‹ķ•øÄRü¼|©1Üiµ„œ²įų©žR.gÓƦPńÉĄn­A–ˆ §ƒłPR$ĆėļæŲy·s4Ț>ž˜ŒC'ų$7Õt)īf½Rww“(ŌÅę%w’DZ`{_žō§†ÆŻ95öīĘ©YĖ<™oę‘*°‰zš0ɧ—Ļ%"Åü~Īn§óś…w^æčʜĶPŅÉkBžs“ó9ِŻ`åȲVåü2g^›xpīyw ś_Ī“÷PŁē¬k×*ł„‰łŗø*±nžÄČȟžČóµ;GŽŽŻ8ņkQżDp™„sGlCM[¶K‡÷¤`2ķÕ}ųą Ą­‘@)įm9–į÷2³wŌ”!«'åmÉc}Žß‘c?@’½ä> -ĄcI+¦—m@fēZŌūyåķņ§?¦|ķĪ1µw7ŽéZ²ą@ށ×+柪e=×Ūæ_»Z~壆įĆF ̇˜Ļ–”A(ÕWcż«ķąŠjŠöaf:ķZIs ĢŁT H©#<«JŌ VmPn«³æäWČ4fÓ'JŠ"—¬ƒŠ§_%~dĖæ÷õŁQŻŖ-ĒÖĆÅW%S’ćÅóm¹¶œŹ_Ä+rTKÅśīWo·zĖąŸÅ#öp5bsü śÉ×īœH{wćD®„7^ĶtE°.Æ®ŠČ}#`\€xWd (šGŽńRĀžČŲ2•x>ēŁ#ū$ Ą²z9ƙĶ1S•±öĖ#O'4…AąU„)7y*ČO@š,’A½X;mdXXź ]?S;g@ݘœøœE ōԟ˜—ņ§?|ķĪł°w7ĪĒZŠžĀ 7zŗ¢śł¼™ę-Ś;–īõ"Ś’#ū»Dւ »j‰ŽĖs >(‘č]Œ ’Į¢šh!Äæ—%tŅēše č3~øhøœ|H»˜:lŁ’,ģNĖ›ŚPSLb1Ī ³fŪ?¼$AŽģóŒņFå\½er³œ ®ś²HtbÕØ9ģŁkT¬Kؔ–Ŗ7 7#æ” ņŹ«-щ ĘcżyŒ”RĮ«õɇ Y’3[vē¹üéWõųŚu={wceo-¦~‰:ƒ SŠqPņ?qĆŪņ§Ć|ķζw7ŽšZĄ÷ņåÓ§rŖ›+ę°[7£qG²Č€ss`¦”|į]¾ڊ§ā\žūŻö,—»ŠVO]°m\̇9®F-b‘@>r!’b„ƒļ¦ ”E£m`0 %v;ćNĒB‰\v$ā ĖrĪoģӄ[7ēī”ÓKÜč™fĘØcęčėQ: ŗKÜ0aH¬Æģ–ūÄƶ&žĆ‰Ć§¶ōÜĖ™Ś<Ÿr ƒ(Ÿ2|FmziaŠņ 7ŖŒfŽ£LmƒČ0lG§ss¢Įa+ĆB]&1 g‰Yad;3ƒ7#3œK“ĀŚ;Ō[¼‹æŻĻ īp‚¼pNkœ ’ÉnŲ‘?żŻĄ×īÜ öīĘŻ°–Ų~žBŽ\ķū/=„EŠT—5ż·¤HĒ#q1Ųš®‹ÖPœ#Ņa_ŁĪöžĄ¦ ®„b•ÓĢŪŁć'ē%“Ÿ”KÖ@yPdœ‡CwØłź¦(Œ½łźP¦_Ż3ŗ~&J RWWK2y°ćĘł? É­šńАC˜j^{Bqš‰Ķ„ÄK ‚ Ŗf"““L™4ŒeėIöD‘Ś ŖŪ©&±UĻŹÓsĢ’n€Ņä„ Žē\aó®­#ÅBż„ĒĪ{¹l̹ž”‹ZĐøłXŒŖ„8lāÕ}GmÓ)–.G0ާj^&N•Y§rä$éłYٱ)gLµōä;\EJNŹw°¬¶8#ŠåOLī¾üéO._»srķŻ“»–Ł~.^É_Ž-—UĻŽ0zW»!¬C¦Ę\[ `>ųnūÅöĖgŪ/^ÉłĢĆéźĒŒż&ŠNŖ‹GŽŅk,ęl€jāɎ0’Š~rA=tĶß_‰kuiQ¬q’¶†ŌõNO” ķ‡Iv/ŹI@ŹäV“Eˆµ”zŁ*(ÓGHS:ŽŖpԊŠĖØŚ„¬ŚÕl‘[hÅw½¬_A5K~¦Fó®R[ag£4ß! –Óa©·āӎHƒGβ|Rē@閚ֶdµūĪūŁėź¶±Dā+$­aųŒ6@}h »VM@ ˜§'Æ®¦ņĶŪ'ņ|7¤æ M1 Ŗ€ŖX®č2†]e’ńtĮīžüéÆK¾vēŗ“w7®Ėõzü ]‘Š‹y_4xĻÄ'’½ŗ£•Š( ‡DŃll‰ź•ģŌŃŹčƒĶ¾34Ü¢…Ł>x±KlÜŲžżb÷åSŒ Ų< ä@:¹‘{’„w…{Ļ»W8ŲQĻ7½üŽ=‰&Üi¶~]ļÅeFM¹ąÅw®¾Ó»ś? ²>Z‚C°ŲšĀØĖ‘ł'¬ī¾üéÆn¾vēź¶w7®īõ ĀŽĖ-žœŠq9=„·ł±ØčMż’_Ums½B$õāą°)k~gč”{b=t{ū’żš {čŗ:V_¾Lvćs^œź³ÉyK«E%'šb¢š·„÷ņ9·s Ŗ Be‰¼1¾»ZYnl(äx†>÷Æ ź:b&I™iŽÄÅōa‡©ßUŲ)Z¦©g 2R¾i’éōĮ>Ur®ĢeÕ kąą†Óe=÷m&Į!ʦrōˆĒ¦żŪÄ£4• ¤[ńR‰.’Wų:Sś N#Pžņ?9=ŗ#·'néb±•ķķrą00żOˆ ŻŪĒ»O“dŽõ1śåŸÉå7^æüj3S~å%dd›“/kŅRC'ó–|JÜVn[¤ļ• ©}ŪC6jQ0› 0Ó¾Ņśś\ 'Bƒ<m°tĖł’S‚ƒļŌŻ³°Œ„¦ w“öd7eYڳįÆ|:!Ekö®k—<åŠū?kŪ x š$\ē’ņ^[^éŚæ {æöĶż]~qŸÓ÷ŸnŲzńdG,«ģ€’ŃŃÕżß_Ōu^>VĢ£zK²„Ł{‰$粄®²ćט/ ·ꆫą‘ćŪ’ćüģųōmvö.»ųprž}žröÓń›‹ģżĻĒ§Ææ¼—Kœż=čöÉēķkņE†č—ä3īĆ”#ś·_¾ÜŪy6ٚ“3aüŸæ•‹Œ_…?UĘG–°øž“søČÕžu+7Į„Rlm9’ńįƒĢžoҶ‹æ’žöövėŹ}«ŖÆ¾ßžž„üoļ{žž÷øńĻN¹!ćšf²”eņ^ĀüĖAö®śź}Īfn·QgsDm¼K\9$ČQ®R]Öv_@·(Äx‹«ńbk^“:C?/Ę|4ÆL룠e&ŽŁsƇ•ĶżģYk„žy‰\ģŁeax·pÕ7µ1"˜Łw½WćÆW!(0žņL[_'$;Ōŗė¾9a€…ƒČ ŽĪb„*5:&żŚ»։Y0‘Óļr•-}ō¬iü.GoFLåžü"žŽy©„Ļ@A\©“³{Æ UoŽ·SW+q¢É«’+AyV/§”S#.Z&ž[®s!ēšśšēÖkÆFœdėU” ©³óxamw=“Å]€ń ®õČę—X œ4ҘvmCį[` A&‹k ģĻh%–'²Ÿxų ī`²Œܘ"·ÜDÓó•uŚ(ŅXI8ä)@¬£Šv@fo9g™‘æéßPŠÜ"Yœ¹“»Ž±=Śå$˜Pj\WŖtvpį'zr®ŅĘj9ėģQ0ś ±€+łĒ-,)šåP½BĀC—ŲFÜ“ć ĮĢeƍGd™ ˜ČW§l*HqĆĮC˜) xŠå§/”š¶Y5„®:XžÅßĖ–ßę«gϜ“yĢÉĖāˆpœ£ÓˆÕ<}ÆĻŚŻy:äņk_ŠøŒ ±„”†–µÜ“ s×c¢2‹ņwQ愉&׌ņ3ĘųüāčĖÅŁ»Ÿ?~Ģ>ž¼9>=Öŗ_|}ŻŗŪ'Å0~<>’o|9>z«'Įėćwg_޳œżœ½=9æųrņZ¾”}É~–ńæž}ł;/ß:Yń›ö‰on0¾‰•Ŗ‚å3Ŗōćq„Ą¢ÓŪV<·–āå»Ū²õĘ51Dl‡^™Ļ‡×Ņ“驹²C%ŹC5h,Æo¼ĒOŗÜ„ta›üsĢĖĶ‚ėżr*ėĀÓŌi;cé!F R?@Q åACņN;Jŗ‡™­§6ėēÖV¾-Kl£”£+Tü® {ų ?Ųøśö֑\÷5P)oÖ6žÜ•© ½×Eu0Ž'Œ#ąžŒ@¾@ ‘`oųµH'ŚØkˆ’ŌZ®z4ᖁ=\AVóRŪ•¬‹°Į¾'ÉSż š¹snŪ0ēł<–²ōBr¶ūŪįśxŹŚFb«±ŃsŁ`–ūĮƒDėyæs„œÕ4…Zé‡ģ¶)ݘ#KóY įyZ0c„A5GQ™ńó;–iļG3;×׆ŅoōĀR FĒo PcCµO3ĒxB øÄ&#ŪŽRc†¤”įĮh% ¢Ń;'¼,œŁĒ[?lé²}-³łxmHß}ŽböģĢŠķ[*tiK]tšYyŖ¦T¶ōž”į]ėlłĆŠ-q*G’c#•ščę.ćm¬/ §™Vō2Yŗgmg®ķŲčϲ„i}Ófk{ÖWC'@Ų<į6Ø“M)¤†Ś½E*Ųh(Ołė¾ “!VRdŗ ¶M^y/×ĘYÜzµ¬ŗ‚ŽåF~Ž!»9˚ų¾‡ŃłŃƲm Ēģ‰!•±ś2#Ž› LaPšN©œ”o9ī<˜•Aō6īpß3ō‡Į@GFrØ:Rx‘ąUGŠŃP5æŪIąäCXĶ#ݽx$Żų-uųōw›ƒĄ–üoD}ōƒmzŹņ±Qq±5‰æŚ’$'oYÜRŚ–.żø cĪĮEĢo”MHŹ ó”«y8łęęČä©0„ ÜÓ\€ø¶ŃĢĆ64…žbF… ¶+vhwyĖĘ ¤žįGĖ6mNcŲMŽĪei €HFŗżŃ'JC×l-ėKpĒ…Ō ¹ļšŠ‰•äŗ[ńE†čų¼¶ŲxČ©‡‚²ń!Ž'ĢJr¶Ā7ń¤šŹ?ÄsVxXhü66ķś$5ŒšJ'ō[ OOlbYKlÓŠ#ԃ¤éŚāŗčYlõ!óōŹ’øÖļ²nł.Āo¬4g„¢Lń±łŌˆß|FÕsqp^,$ - Ļńš[wmø`z¶Ö¦,*Usø© ·µ;Ų8·¾-ć óč‰y4G01łŖĒr ?f\@Õ6x•M1=Ai«µLŠ3^÷Ø&Į¹&^źšp‹WF2ņÉS÷‹ōę-Ż‘1Ę)ž@ē·BųqÖc/ė·d–Ŗŗ§u't‡·ęŹSÆY‚½E§):ā(õq(ń«8ŻĒ=ŻQ—^¼“ ©gĻ?`± LM5(e~½’Į‘Ä$¶D\#³}éÅ{ѽæŻNaī]ųļöÖ¦Ié. ē03ł×Į3/9,ø2——•ʍC†­JQh†%Ź(q 612™†Č°ą'J“T±¤’"÷6ƈX‘ƒX4‹R•.ÅPčĶ5ƒ{Ö4#ŲŚų'Ój@AÓOC¤•Ǿ^¼-TŸś±ÓØėū;-gŖęZ1P2ø4žžoĖš|cu½”Ż*“™Ē‘Zpµ§b`>»lL;'H«„r€Zi*[ŪnkŲ#;-Ÿå著wƤ=ŠĄb¶Xō|SÖKĶ ‡—F yŽčuųn>7p…«Qa¢Ū€óbĮŹø/;¤7?ž|:¹8~›żzōåĖŃéÅ?N½łxtņéų ¶o>½?>ĻžeĒ”; ™ÆĒ_“—GöʗĦʻ_h‘ćčį [ h¾7‡Óߌ³wļŠ^<ރʤŅ «^DqOXIāR&† ēÖtµ™–Ŗ ·ņóą2L0ŖPNŚNÖX²IĆuŗ}b ŗĶ°½’r ŠŚŃ’łįč—ćģō,ūrüéųķ‰ĢČ»³/Łéńū'ļOß2ĄŻŽ\HŠvrōśäć ¦ņõ—ć£70>½ĄĀÅWߜ^|9zs‘’כćĻņcg„Õ}9ūåä­,Š“Óģóѹ‘£Ļ²w»ė7FŽŁĻ§o.NĪNų÷Ćrɷǟ޾ü=;ūõōųĖ ;:} Ōa„äwśV!y¼Ž§ćӋģדå/²×ĒśåwĪų£xZ¹ÓŸ>b…~9~s1ŪóæÉƒœ’Ɵå'ųĄēŸOO.N~ņļįƒ“Ó7ņ0§GĆb>žåų4;yĒ æ?įø^œ¼9V@łqöłģüüDĒ/’üęĆĆśŻ°wv“½óå俇 |ņĖńēGoōYä~ææ“Ē”­ćH-ó°­S‡c=ēÕó$‚A„źŅNHŖ*;"6O!Nŗ@ߕt‹žF`’ö×R¹Źd“s„9A«Æ,Ģin²€ę¦Ö)ߣōkžĄ īvżÕŸ29ŽĶYM ½&čhÆ6ܔ”•9ü Šc豉™ˆE°¶¼#l«żÕ°©4"”m'ćZŽĒÓāĆ3k:ŽßS6yā”fÄ”¶,ÜÅ?s[»»}Lzj&ĆPŲŲ]ØQēSjūĒž—ī×/A¤ĪŗW€]F&ł©Xß›’õą2ŽžF’8ł™@4 ęMSōDžõŖ"7;¶Š¼Q&ü@ć½qZ¤.Šöš`˜[0Hgl/SpÅ®°`ŃŚĶu–ķ<¾żG¢Fö`3{į¹t÷łÄZÖFéŒ3#Ÿ3æ¦0lÜĖʧįŠėg’{ŻbGģ2ÖE²ž£¼””ĆåÜטŻRw¹Ķł@”šäR“ķņc{ĘQŻ…¢ ʶć~Ļē4æD)“·¹wļÜŪæ’4i&Lqd’in®Tq§¹¶>Ų¾-V黯§Y!§Eź³µ,{ómź«|^ž†źU‰%ĄUŠ*v”ĘIž,„¶ĢĮ{ĀŅČæŹvż˜ƒ ƒš¢SwX{‰§žūąņI“KȌm1fo.jé83Љ‚<äĮ޳ƒķ}šÉˆ5i²ųœb†¬ŃŻjŻI‡U˜“ļį×yِ‡ŁH7‘ĶuTuæ‘­Y»“SƒĒrp٬DQ|mUÕ2q±²Ÿ·Ī·ĀsŠ _«·õ¤į«[¾:f¼ā¤ė»$ö­‰ˆā6ŪŪß‘}*$ĢŽÖ[ٹ\ä]^B YĀ£æ²—/_lļli’EŠ;³¦L;H  …VB“°®eF h¹čs;ė| Q …+±éŽ>ųįłĖģ”.ńöžó甆dēr4gᬾ”Ē!Ć{ŪŪrn’š|ūi¶’ņąŁö?¼d°‚²ŖüGžg܌&£ƒę—©B6 źŅ±–hoā‹Հ~˜Rg¼‚“ †œ@—LĒ6„[Įœ½K\Š<ŽTņ³ŽÖŽ)z_W•,®×[Łiq;ō’Ģ(nIō'6—Į8~ž-©PŖŗĪń…’Łłńh“ö6ڤ·Iåš,ų;}‘1¤MåŲVJg„ĢšV•ļ†É‹‚įZˆuY0×j¹s?»V›õņZŌŹ Ü$:!€x‚=­tÓńø¢õ޽w›z‚œöŠ%‘b;¬ē‰^D·ƒh»rĶMB×G­ŹŸ!eœųČr÷Ę ņÉ”VY3ƒßųįƒļžŪ6žśæķž?ž”0r!S1Ć0åZtvłA°ÅjøSošäĖłKB/¦š™Q Æn1š&Y@,µŖ—&-8ĮüĒ'Nš9cūĻ=67Ƈ|‡ń -'€©Š:ÅLGɔ–²$¦÷cĒŽ{ń5C uĪĮĖńöģ”łąs<Ⱈ!! żIŽ*BÆŲ«g«Ćāt„Ī›ŅÆĘĶŚ¾Ō½ÖyĪQēžY)¹ +TįžŠ|¹Ė-ā+¾Bż“‰ .}óHĢĒ«c­]”Œ…³ze7CÖ%Ŗ0TȤĄI\éOė:-!Ü}ŌŻs‰Žų aAhÄrgĻ Z@ąØ70²¼¹Ķg‹ŒNķ„üöå%ēó”ŻĒģҹĆĒüÕÜWķC Ļś<.䇨dÜ, ?įM¼ķŒˆB¢5ŌÜ-2ķŃŠń~PpÓ>ØQå °“Ąž'³«1€ĪÓ [čSq’ø¶„æ×uOøż¤+>=éŽxŅŻ³ŌN“KHĄh‰[§ Enćųt$a[}³ÖMėÄt-sÉS#Ś@u`§#’f½:ד“<į;¦)KTāVŚģņ@h»¬5›Ŗsä©°-¢:*¾>/Z-<$ѶŸĒćlG½ É.ié,bT³€lŌ©{ų źµ°qi |ŻL¤¬>ėéż¶ŪHŗ…Ģ Ši!Ł»?|²éņb²ģōĪ ŪrTM­uŠļ}CߣC«Ķ¦Ŗ8ƒŻ»Ę'tčXę’Å-u-d—žźŽ¢>ŚÄ“Āų Ÿßg†%øĢG̬±c蛼F”„(\Ų²I=Ióź6ĶŃ MÕ Bö¤šųw]Ąm>|°©¬l³žl.D>NBća9*0ŽTģzÓé­ĖĒ‹Ūx5q}šxōæ~ļ„Xż~XWdzŸ“³©üå’PK ÕreJimages/UT ±®»Xµ®»Xux ččPKrcJņ ȓčĒéimages/001_th.jpgUT R ¹X®»Xux ččlü˜$A³? ÷ģŲ¶mŪ¶mŪ6wǶķ™Ū3;¶ķŪĘĪÜ}Ļ9÷Ü’wæ[ŻżTfä/¢+3"##źÉŖļµļ?$ i @źßš½÷²¶äå4 ‚’Wł÷Įżß²ōæŹ?€pkŲ’Š’}HżOżæĻ  äæ 3SĮ’]ffb*ło)ßß’Ķö½÷ĆÉŹĶ͉‡‘ŃĮ•ĮŲĢŃĜĮŌўŃĖŲ‰‘™‰Ą'čådljkīFdbniķĄOyÓÕGIdmĘO©É.Ļ$ļ$jne-åćb®ź£ fźckŹmF)(ĆēÅćeļdoīfLäeoēąŹćÅOł_Āyž•’Cf¤ür1³ąQ“ųČæ?å’\‹§§'ƒ'+ƒ£‹%#3777# # ż?½«·ƒ›±½ƒ+é? 0D’%CĢÜÕŌÅŚÉĶŚŃįd™’Ō’ö’Ó±’“üWĻž±ńż§Ź£„bīźhēž~N>Ę’?ā’"µ’æŚ’_Č’‡¦ī`ķ& ķ`jõ?š’WĖ’rüĒ4Ģ]\’#ę?e¢’©±00’ė’ ł_> ;cW+%kÆ’»į’®’/’掞’’śæ2Dķ]T’)Ś\@ŻĮŌŲĪŚÄÅŲĶÜģŲžÖ#Īų’ņjųoŚ?UžS*ć’Ŗž_åĒÜįŸÅøüĒ4¾7¢H(h(h(h8X8DdDDB ,TrbJ 2b2Rj^j:.:R2V 6.~AQ*f)y)!y^aĮļ,ԐdĄ÷÷ŸIƒƒ€ž ņČ÷źæ@:īÖOņŽ’Ž!ŸdčÖĖųIQÅĒ®ßŪ.’+ž3ł t¾į½UKOuS?9Y@ĖmŪ¢¬š*,Iv{ļū—-Ą“Üo~EUßy"te0QYēĀęxoś*öś)ß7zŒ~µ–®°­;‘ūT" ü°ß(”k –ķ—8ķ5ƒęśs60ŽrżŽ‹½Ä;żK¢ĮæˆlĄUbVw³œĮļ`¹J½‡r*ęh4—a2ŅŚ‚£übxe½§²ś@=¬Ö52Ė“'4ąG€ ĄūL»ĘŚBy‚®J+SņB—/Ģéo*ū#;ݽv·œÆ¹ysĪ>ežę\™?¦™!Ģģ¬xāóɼó W-<Æ­ĮŗÓ;§öF1ę!½ékPbėģ‹/­÷ ^ŠlJa’»~ѹdnßčI(Ä7Cq™²©”½””{椆}f%E=^–®ō£“$S±'²KõŖb”϶čŻ*$%Zļł@æÕĀŹ7 `F#āyW2mŽåJsfŪPŽ„–׬*eÓ¶ē°ķlē‡LćŻßó¢vOjöAL½Jä9;m‚¶9p“ŖŠĢ`·ŅėŲ*÷i{3ž(ƒi‰féšBBB¶zā‘Ą%øšøu½’ó*¼Gu`gzG6ÆdŖŠˆĻź‘ Ē6¹bzÖÜjķÓ[/Ń(Žč.?ś×4i‹Ž; Š5$Ē茻Ečé?7Ī‚*gBvysāĀ L®Æ<«Ö:×64 Ź x–ĪrszĮŒĘRSĀ{X~9T©Zsa²2M“āB ­ØćiÜžɏ¼tJÉ#`hi°ÕcØÄ }>N™ŚÖ¼ŗ0—#¾āąņū?ęiƒˆįĮæ (éj“¶Š·­©ž*'7óWHü™8‡ēęåó%Ī4ŪÅs“w£¾©¶.ØČŠ­ _˜ĶŸŌ!Zu~łł+&©L“öžKĖĢŚ1·}ü+øÕŗ0škšPC“ii­ēčX’?w“Ų”6FåŌ‡śu—ĀRĻdŚÅ&}4[zv•¢pS»BŠ0žģ!~]ge V½ż*īŒ.|ƒįČė±< żĘ’ ˆüīóS„V”Še”ģ2Kü“)ŁņĮ“ ©ŚõõĖŽń8Yę ­¢3,=ŁĪÓčĶ‰5E-'ą[Ÿ'©¶ v{Gīéė2Õ+±‹R>Ŗ«­0½1ę²Ō„…“Ēu¶5* Q«ŸśĒŃ˹ī,g‘»ųL{žźj5#.Kiž#ę,Ź® Õ*ś.€To^%ę»+£ĖfĻå+­ <5”ĪŽšĘåżīž„GSڶa:ŗÜž<‡\Ó6{EÆ5GČĀē¼£Z„˜ՒÖĢŖQ’‘+8AH@°ź<\Žńs›O’ŻK¾-›¾öŽ;A¢:#ŚSŗł8„6ėøN©MķŲ®Åt*Ķäš#›Vż&3ex :Ė’ŅĻ73m ­RTŻUE„†>—“Ź3‡Ŗ¤Ū'֞/ń›5qTūš?ŽĪź+’’čŸc³4’½Fh+Ä&ļ\‡Ō²¦j)änī΁`«&4k$INœ{®§Ą\ā{„G×É©٩נNemŪ°™»Ł:Zk»œĻ䌹*×ZC-ékP“™ŗaéŹÉZµóŅ»¦·uŲtӎčPf¢Ļ¬Š…¤Rčk™ŖĢń‹ņ¤·¶óŃ>A ūõ’ķmėG—°ŌS ¼ĄJ§ĪŽ;pĀŅĀžFŌ^ĖńŸogš$"ņs…ÅĒūZf#ēlŃF#&Ą»C`/^ŃN„X‘°f¢ay.„L “wņ(E])Ԙ•5_Ļõ—³smZęŒLhT&ńpvšĢŽ`ūŸ× Ē3¤©Ą®»Kt˜•tŅoVļ¦Ī·I/nˆtX]Qæ\’¢ŲÓgŹ7.!«EB„ŠŪ·žRV£m±½Ÿi>¢Įy“wĮ·ž ? ėŠ¦ĪE›<"øsP¦»Ė÷Μė!yM{¢ņ^Ŗ:k½Fą’čˆņ„ ¼\£Žyl)ZQhS#sӛįOmūæ~ĘE5AęM‡šŽĢńŲ«°@Öq;m[*O“[Ӗ`뇗Ėj‰ōH݉9`ŌIŠhT­Ā˜ÆtŽÜ)V„Ņ–Så~gš X8DĎŠŪ“ü -:qc¹”­FyåÄāøL|(cS„‘ŌTŗƒ:OG–„‘Ž6²Š‰°ģ3óE9—Ŗ|>ŒūcMä=Yأ—'Ø6Äšŗ¹’NJeS(%Ģ’Qōõviæ~;6µŠéH®"Ÿ¬6©Ō,ähć+ŠÆż»ÄŠūݐ4ÉJÓkRTS–M±eöC]•ś®&óIYQėtwl¹.•„£Ų€Y¹_ ×ųļg ō\>É*™ p“—°gŒxōˆX ņŹ-öÕ°šŽ{³ćŒ`M¾O)Wč÷Šā/, +%EՈūDķŗ-łśx>y’#šÄ”;tE&ʵ(źlhγݷņ§.+éŠuD¤ļžŌ‡žO§ożŚbBź«ģØCį…Č»‹āÖéńm¤écū'ņBśĘDīŁųšeO˜¼ō9pcéösŻVå ½2—Ķ^¬GŸŗ’œėĖXXæa'%#5żÉČówńŚåÓ.ńžPTawL-ó!CŹ8pEä̹©s‡Į¼Iłiļ\Ń›¶;dBćVrŖīpBõšŽæ,[’Ćn™æūI%%sQf÷Iž¤¼¶ %ē»$Ź]ÜÉÕ?•_Ģ5m öŖąl©Ļu˜Ō%Ļęŗ.µF™{“ØW»ŗFG?Yµ_ē'®Ų–źG‡ŪWvŽWJ‰8ķ}>^ėĻV>ʬÄX`D~~©t–&5xK©ØgnV•„_ų¦F€59¼öõ>V«¶;e±t g­WG ®å—k«Lź›¶ģ zqģŒO“Ä ų€s4Ł·ųŒ T×UČ[A8Zē#MŌyĄ ®{]L„’ó1*vÜmYzHOö »ü`,½Ż͈¬¶čŠÜ‰ŖÅŁOVM’VX„? ‰ ž(³7Œøé¤HŁS +évčC¾&ņ÷dŒ3/Ž“¼Tį`ˆ:{?Ź>*H{?x†Ķ kŪĮo€†øBŚKk-?÷y§ņ(Ž}°gõjĻ{P£HC 1ZZ„Eš.ȑj•øƒĄØ^f2PŚi°$ņ5ށ)éV®¹‡ŅYRm%akŁ.›oŠ¢@1.įINŠ–31”ęõ~X±wl<ß[ éןŚ7 °.‘§Hgrźzp–·ĪYĖŌ{¼×™YćÓ-(—{ÜĀ«N!łm?ņJŌó »“ŪĮkj«čß66tĻZOמž(£yŸšĀ{ŌļĆNMZ€Ł«§%ęhļST>Ė<õÆēó;C\s ĆT…»Ģ'¬†œ­fédōxghŪ\Ųė ¶ĪąÓEsŹø³«&ZŅęE¤‡T„³Ėźi²ŗg}Ř?` ķµø%‡–•ły^†zä$gżoņUĪč»m!j#ęų/ā½_fÕä չѹDkS.uwŌłv|ņ‘Æ5žyūĒg{?ĘĒgż½ož“Č–ēåż‹D‚žHņ_ĄŒłžü?iĄR\P`ąd$T4tb"R2f6vr&!aV%£’I @ĄLU~µD½«˜„ §ÆO38—‘‡4‹7dtlYX:gęōŒxb{mbg®N8нŁäNxJgyJ{„©²]7>tŹĪ\0ņ–t_»²vL­vÉ®vĖĢÜŃb¬čœøeę.XxJg“²2ӑ½pgnY˜Ģ¤u,ĖĢ”©œØS³Ö„e¤”ĢóĘtĖbū¼Hgn—ž ąJ€fżŁi+Zü•[ŅUōnCͱ¹}ˆ&čā u£lJCÖc2ĒŃqfŅąĆįģED;˜!aŃI”‘{±*&ÅŌģųŹč.śĘæäŽĆÉPwõJVgUj 6ž\g¹Ė5C­žĘ–nQķ¼X”Ü}½|mC›kt,ąāϰ܃Ł™N¬‚=ā0}݃.xč%7o@=1óKÜ.G¦‡œ/t\‰Mē5*™ 'š© &г8”NʹßlĒ/ŪĄ\śµ¹ä؆/eĄuąµJŸšRāōHŠ×¬a ©Ó½ņ¾jbąė=ügi»£¤”įé…\²%W 0r6yXÖ=c3b¢0ė"Ihœųõ©±X{”=e¤ņO½ļhž Ż«qģ²xŅĢĘó”q†}gL FÆdępB­üœĮįXŅ%,ųpIÓÓŹGI±^L”Å™‡CŅÅĶp(žR`ēŚMŪ6‰*a–»-.‘‹Żś#ņ^6;¾™°ŁąźŁ¤нhl u$ǼD.V'6£Ō³ĻCxƒĘAc’PŠ|T"ZŪN9 {ą.”@3uĒ%Wś:a÷ą¬WŸxåļ7–f[쮢ąZŽXRCLc]2Ķ@ģŠ«ńœB$K Ų&<÷܈˜P„ŹĒ\Ź|Y*ń źźI6ŠŪō ŁIŌ*|xßķ7ņ Ūś“Y Č5Žœ‡]u@GQؑc¦ÄĢXū¬÷Cē¦wĻöŗŃbæę7ĒPjeFÓ”§5Rœ‚"Omž©šWET’õ¼zŖKDż^)˹N™†ųYqĄŪšÕ’3»Ķ–1"śU±ż!r!ź!ö×r4Y¢!†(Yų¼9CĪŁ'=2oįDņ%SŁĻDe.ū@#ōŌÄ8vło?±"¶ßŅrIc50“ł ŒŠqųX’fmtÓOg'†÷ĄV+Q“éO;-ĒĘQ¾ėsü]©&‹€Qłžv–x J@É“šAE!,.æBš'!”¹ˆ ”µÅ•† A»oÖå&g+Ļ §uƒxzš•xsdNV ķ‡ļLxt¢ ā¦īyÉl‚äh 9šWŽä«p`޽!Ī@/S§Ä(˚½)*4ĆŌ¢b„ čĒŁ‡\N›oĢŖßXŚ©f)iO¦ß·˜KL:ā”Fo±ĒG!} 5 ØśeŅg(Ą®5NҚ%1ąŌū!³üva˜T…TR„”:`Upų\L‘ā׽ɢԁŠe‰ dgŠ^›ˆK® &‘Oē(Uƒ=Ō”MėØŽ!{€Õƞ ©Ij7~³Vµ,VøŻhź£ż›’ Ū…’ųožŠ ’JTŌÆ!Xƒ“0eh›Łn•ųŻ|Ød¢i(ł”‰5Źu¶@p śŻm~"£¾»š hČŁīļ[·Ņ¹€×h¾ÉésŖÄjĆ<ܜ{z|v~ŗ›ų½ĄŅóĘB³Ń§˜ĄˆÖqbļ<žTR’ŒN~*¢<„—³i!Ęź†l{yŠvØ­”)Étæźj±™“£†rĒļ,`ŅQ8¾9ż˜$_fœŌC—(Ž[4†%n“}ü£rĪ ĪxŅ3ļ›H]j}RĻ{Č;Õ<»-^ņzUX=Ń/žSœ-fīFjėÉųQ Æü~ŽŁšØĘĶĶ"‡IjäīŹ÷®ų3²2Aż»ó1įŽJްTœ‡RScݟHČ·”XM•1•ÄO%؊:4Mzµ4!Ļ3օ·$WxĪiĘŹHó&£k/š½ ¹[S£“ŚŽ“£mź³łāńčÕ0[Ą½³dvõ1&iāS ¾v}Ś*¶ /ķ/‰ą/VĖ8Œåœ†Ņ½‰ż“ĪžxÜKćѱR2 “4†WJėh]֐LӘ&z­±ļ--õ¢ŁģhŠšńV ˆÜÆÓ5¢īŚe¢Ø\ˆ—ßzMŒpÜš±Xŗ_’uńxęMt7öĖ ¦]”,ĢX nŅHaźb ­H³0Oų‹ģ®ßyqɆ“H.–vż·Ÿ}NM†KĘŅg“#ŲØp<* änck"®ūbØ„č•­$.GGh³~8£ķ ,æł¬ź‘Ą3¶‹ę’Č*:‡VĆZ‘JGןK]J˜ZsZ¹É¤¬ž U†yŠMI{E§1`uÖKTź¹Ŗ¦|u–jÉōtNŗ]䔜isk›ćV`7V¬‹«Ž%‚ ѬZ1Lż$'—h§=$W¶cįŌ6]£óU¾|‘HYŽÕęŒsaK80{oLkōŹ&l‡»i³j“ųą?eŸÄš Į–ōōpÄĆę‚IüŖYIJŹ&µ’FēȃŸōƒ¬<&IpŪ}²Z•I"™LÆ"ŗV}źL.h\ņj$Ē9Ź“š‘’Óį)Wiņ‚€ś9ū‹¢L:O›f¹¶&uYbRāŖž„7‰R4ˆ{E!)!hKõŪ’ ²Zʤä4–O„hµHƒŠķ '£ĄT}Ģ[źuĘ®•V{ä‡cĖdŁŁĖØ7IŹ(”ƒ(-h®ŸÅž=YOó•‚7–4ģ7 ”Å@jŽīŸĖKĘųĶ™^üŚ/1 ūę⠈Æxģ ŻéŽ„æ6>é”Ó,Œ’ˆJĻæB“ƒ…ÄO† µē¦2Śālf:ÖßŖ^±±gļGāīĮM<1öh[-׿Q‚ń/·ØĪ3åōw~š'hEB›r‘nʎŽz:¶-j³)>–H䑱/s3LN„bēóķ|˜­“&ß摕³øó8֒s+•ĪŹā‹ćkŠ‘¾…–͹k«#VšIµ'Ēh`ś­ń‚ėy;\%zž#u—@q[©kĻü÷Ī+ūõ.N—ĶTĪsér%˜é|ģU|üæ©ĆÉ|:ś`”„–NŃéS.c§¤žÓlŖŻ@ÆÖ–›•ž€-Ņ!›r½¹ƒcY/ĘtB³¼«Ī•ę·FKglś™4 ļ.„@»ā‘®Ń( ±{± $ä~ĆĒm³Ø¾Ž¼“õšy¹/õĒI°‚7ņtŅį”}Ž ÆĮ¦x”bʾBz ›Sē—C“ķ‰c‘t«#»6Ou7éÖvd·ˆßvNņ1IÅĶŹĶCG.é9^ˆ±˜ƒN0‰•ūĶöäāĪŌ®"²"l …#£RĘęVW5HUæK}#*£Ōdś öĢĒtėڬw4/Ó>|Ā× „+(ž€µÆ2 b{lŹČXG=jG"ÄSŒĘć¦O<Ń– „©.tSķĻ’‘X„Öa‘#µ4ŃNĢD÷Ø­Y’–įŖ\‘‘ķIā0Ń!ręš;œ/ĪMŚ,e‹M5¾cæ֘..‘Į‡„odJ~é0ķ±,–ÆĄ{-‰¤Ä"sŚ…^"7”rJéo(2Z`“/V:lI46…C{—~źOŌ?Ruxvcq XQü—ItŠ(DūńK7{šäf’Q+|wX͌®{§Šą&|¢hMÄPŲz \ē'ō’aš’F Ŗø)ĖÆ ūŁYƛ“YÅ÷zd^ébł“óx-æ ŁĘ0ĄŽA>ļŹbēD„žŪTšiÖßo­tB4ŖÅi}4~Ēžłóv§mTn¦Œ>ūēq9•.¹ [ÓW‹#słÄ­=¤#į MM%ŽĻ3ѧyŒ•„Šl¶2^É-[܃l½e>%T$VŚCĶNż]Ķ«~ž-]üy oÉŠD4“†é¬0ĢĻ•Ķ”Ąė$„Ģē³bŲמr-6‚mN ½$†Ž;•wšÉ}ŁĮŒgEåĄžüźŚå‰¬…tœ »Œ{Æ\\ę Tå›·79$õQœ©&aķ-Ö„EœƒhpG-»QĀs(U˜&‡Ų8÷ź™J_ÅmīK³ żˆĒ$ę“„gB…é+Ūó7 ĘĮȳ)zcµ$ĻÓ©!źM *ķƒC45vVā@Dƒi-A†¢S„DĘķź(ŪĖ Tņ«|Ņ[œŠ9ó2ļVĘ£šK7¦½-ņˆ÷$#»ÉYDUw§-Šų™Ė8¶š“x@m7_Ōę 5Jŗāp×s_µ£ ž˜ŻĶœ'oćgāĻ„š Ń ē&®¼Āw-G“&Ń[‰¼ĶŸq§²]s¬Kƒ”·äņœAųŒZźä”(k!ÓyÓp²sēŸÄn:«Šs–2DGżeõ؜y­ż‚ŹÖØ|_»­’xu!Äiž<š R •zį! r¤bˆq.;‰°17õ(TF2Gz•’1æīū¢Ą„Š\ĘU‡{L$¬*Ė6Įo~ō3qį§= ōż45Až×©‘ątx`³»ÆvģŚŲ2ń®ųŒ‡Īroö՛½ˆ,õ—ēøŽ °³ē@õ¹q¼·x$#h¹k +·“…×?O¶ØńkN&ŗ(ķŽ¾FĖø“$9}4Vk «ė¹ruĘō ¹š-*ęLŚü#lŚZ÷ŗ,fŪ¼Œ¹½·ž/ąćķJ‡¶®Ž£ęž9‡ÓZ£ĶX2õŚJ¶ć`čÜ'! ¼ER ū#ĮˆnŖ¾“œdYj¤Žkˆ¬±i 5ŻĖmWŒūæ˜Ogs‚D¼Q+>ä'®䱎)ŗM€J UwĪiqct°axŗ}Ļõ‡īóūįrČ®<½Æ §ÕźŒLFXP…­¾;-Ч~ ve„²¢ā?-NN»J&Ļęę‡õzœ¤…µ%{p­64ό̬[kÆw,LF¢”Ėõx¾s×mžŅ„¹™ØRˆNē„š1'&ĶL¬…BĄ±CÓņB2Ŗ5IŠ}'5£b* ®?W ŃYhKr“^ń{€ū!Ös!–Ä.ēŗ±å76õzėF÷qM{pCR«ī,ŦwõzšÕ†“ ³vIR4é“ Æ}At (‚±øēØīĆļģŃ1-q”4›·Ē-Ø3ލ#ĮUĀ7F¾(ئęĢŽ_UDk©WD| gö˜&)jƒˆ÷@Ö øDĘ-ńwm å-Ę+Uó°øUŒI«ä°½ Zćķ$b'‰®3T+ā©Ä±ŁŌ.ķ–ńŠ©Ķ)÷2k¦hž•žPś±æąT„ā”ĘĆĘņ¼#ī„›ų6‚%üŖŒM¶&!#ßćŗ C'IˆŃÆĀCH$ŃėĀY“õ€™ŠZĘ'Xa‚‘rUvW”’y4Ģęė„Œ4ąjމŗa K%]ßXĀ‹©Qć¤ÄĢ˜iéƒ>ƒj ÜāīBBƬ‰±RĘ=偎nXU«FBOņeē„Õ¤k³Ņ:ˆž›-“ÄH|ąjó° Ó7Łd$åõtĢ…¼•$ 7“‡-'sUŽwEč<Ŗ4ųĢUy:SÕXŅāńV3ģ@€EfV@„•³¶ęHŠ…éU‘HjpB2q ńś žĒ,Y-Ķkź­-°»ĖmN„Ó–;µ­Ö•øn­ƒ ŽŁē8—e C‹Ń[aŚOĪSŻOŸ?“B(ęS«%ĀNŌģ5"5ÓĻŁKœQŌ;©š'$/C§Ō©l)Č<HHbœĘ'żŚ\ iä¬f8ØåVHą•QmS;_ÕÕ7®¾肱,~ßXE6Į‡®c P;˜¶:’Äń…Ū¦Fœg.›Šķ‚Œ„j¾ō ¦­» ©mtO¹¼Īé"ÅŸē‰š3É4õ ‹ņJjµ¬9œ¢ d~‘t.Łt9E։Ǹ©īĪæ®ŗ'ŚQ®I IķvNʶ\>tŖŹ–—ńr:ǜrŻqŻŠ7Ł#ŌüPžVˆ&šCT8äĖØKŅQø`s3=RP~ćשYt w·Ō9ܧ^“)bäbpåŲ4uĘÕi> ©¤O$Ś]Š'ĮG³«“öAĮ7¤ŃżĀ;é-©B-™Č”&_2ŪōÄī”ß0訾ÖöEĮń|ĘÉ#ÉCš‘r¼ĮN/2d±mŽ×ø‡ĢÜ$’ķöų³Õk]X­ćH“žŒØNdj÷¤ŅPćztģ G»ļ­4f#’…!ŹG,—݇bmh^ ĪI°Åd€G30K“÷‹ ŠcĘĘhęć_ *õ€ĢE$ēĒ„=£”¼ķ*‰LĮĘ:-Ģź‹oņījž³•øaµhĮŻq`öƒn7n³ūqŖhN…8"!¤°L…ŲŹKw«¼“īöTóÕQģ¶8CdF „)HiĒ\+ŖcĀŅ[`! yĆUČzóÅÓ$üŻņ5[Y4 [®‰Ś*Y³{ŽĒ#åWÆŲ›?FŗĖ=ū?.åņŌ;Ķ*‹NՒ°F# }-ÖXGłÄHź›žŃW~Ōō)ˆāE@Ķ„ź K&Į~÷ŃZVłTʕѩņĆJve'3J·‡ŗšd-ć-ń¹»gĒ$ń„–š‰±”ķV”÷F^yŻ`°†VH§ć;R¤`-—!©ZŅ÷’|īižÉ&ŠMŒÉ÷īĆ(āmT…ēŒĶ²£ŸżD¹ć!1'[°õ~ęøņh\ćæDj6Lō½o ė¼00Öä ī§nxŚzŗxēŁu½į=½xŠōz˜WÅĒ9XąŲŌŽžĄĶć·‘ĢæČ˹O&ś6čēžMęžFFŗ¼Xz»ls³ö0Dŗęž¶§SĪÜŚĖ©ŃĘōź2£»”O‡Ćźó†hA¤°•']ʈZZPxØ=›Zš“š6ī«¼ź„ź]ĘόméØĶĢ“Ÿ›ėéhZZpŌVŅ&7є[¾x$ŅxTŠt¬gŸ„£äĢøØŚ;ZzĖ-ņņŲ¤LmL8Sš”FķĢ–q¤f4,6±»6¶°6RćXš#x8™ØB#Ó¢Ī=ŹäjĪ‚U‹“n›WŪ•)Ē}uļćh ¹Ē**-±d2 ƒé$·a1Ę,ÜŅŪG]ĒįßyäŠg¶˜Ėń%ųę© n…`ƒ±čō|[ł—OzL]œHćx|Źa½kffJq½kdv÷f‰}!=YŖčHš¶šŲŽÅbN\ŚÜ%Hžµõ•‘™=T3óį0…V÷†¦š˜Ŗ“Zå°įt|Öŗč:}L޹kfÖĪ”™ TŽj¹ėDfŗ}ś1ƒTŒ OŖĢm1ué;MBKäšdē•»łŗ¹\īE\Å¢™=Z×#{‹UKśw«Ž#®Ąüs“·ūö—}ج Ł *Ų(PŪÅ|$p.ń݇“§ᦲ`Łi¢Ł‰8#ŲšP]zn­…G‡OYóĢ:+ X·Ī›WjҲÆŪ”Ī™÷œĢp89s‚¹ J«ĪA””‰Kt©ió'›Ü<«­«­«ŲæÜb„ÖĪ‚j­cœ b¤Ģ*³„£üś=@€€žƒłĻÓ ČÄ(ĢĀ`HØ$Ź,¬ĘĪD¤"*.? ŃL’˜~õσ“± ‰īŻ©&ߊ)™6.üĻĪĮŚß€J.|õ]Įó:ÖÆŖīĄeŲOõŅĄsż‡tæ€č^Ś^šnK†ĻŚĻŚ—ĖXJ÷Հ£]ó?]³7“= »ėž}ꛄā;žéŽĻś'ėʏ£ó¾„ā› ‡’@W’C¾{'¾˜ų‡’/IļŠĄ³÷Śē§œ®—‚_k.«"¼•½66}/rĪÖn"čųجoin’Āf[DŸv“*®{ފ­“ÕR­²|¬1y|?”Xøk© šl"čč(žō:ŒöxrŃɬ­ļ4#0:½¦Ć-m \ŁĘMnG·]M<§u‘ŽźŌžå@ķ’l9Ą*RoŸóØø2Su}‘§l:~岑åÆÄØZĢw„ŗ&’_×Nߚē{żŠųq§Ž‰~ą4Ģäaī—f,rŻ«)UGß ä¼ė%[Ń7@ņEżgh®0•ūŽß|¤ļņ®žśĶ‘µ€°!&»1S€.ћ9–b—»„ßĢ»ŌF%qÖ­ō³†PŽ¦ŻBæDēW…YĢ\ĆN=É*ĢÆśŻ0Åu‹hžG1ÉuR$!TEōČŚ˜ą·TC|‰Z›“pĢFuŅĮŲ4ÓŲ4‰T;ȱŚĆæšī$߀jŖ6Źy½Õią„±ŽÜ_˜O·iöc¢Ų8‰‘żŅ“§žJĦņĄ‚½(°³i„ƒßH’’š#Ŗ6‹Ä„³T¹ĪIhģ~Ÿ§Z~ƒ»Óxü¾Öģ\Y·Łž”Č ń$mģ”‡Č\öN†ż]”Ʀ0{ŽŅ:±g+]ży÷VēŹæHBT…xa1üžŠXüŗ½Ć’-vC·Ūߔ ß tå³Ć ŖŚ‘易€7Lž’YŅ^Ƙjzoµ±ƒ½5?ļ‚Fʕ¾%Ń÷TATČ ńn”w›å0ŽtB0‚µk>‘O†ķ¦IҰEŠ8˜æH5 ńEv&{EŁ% K{'ź¤SķZĀSE«lŁ/G}*āŁš·|c2·™æ8·Éż«(?qƒµõˆÕ·G&jO£[Č!ĖoļĒĮ%m.س7+©Y$²†QƒĆo³ļ*¾[ߤ^&†FP–·’®ōÄ/5Y.›śÅt”B\̆L"±ųåŖĖyu”Šlµ¶‚<(ą5ęG‹8ž1ąSk+[ifīΉ”ĆįĒU­vŸŹ©s–`Ģćʶ38&wŠ„1U¶.1ö|1*2īõ†aė6%6ѤDvgü»d¤uō¶ķīĀ;ƒšŅźT±|T‹™*ȃ>0@| ®\ÅóģȽFÄ[Ó×9|]Fæ*TūUõÅi%ž]’JzŪÜE‹ ^‚Iu*N$”Ńā“üu[ĒćR[ž†Gém!Ē:f&6Lƈõš%x4óæā0„Y”żĘęņņ³Mqž÷Ķ‘›|å_Å﯌ųOq”|ąĀM¬Ā”®"oÕlČ£×-ŗźl q–L›żõź›Ń……ƒĄ½+tŗ»é Œ¬ą³į»²E„ŻcĮ RUē*šÓ¬…Ėaž°”“ē<*žŻ³yO°PÕ¼xƅ ?#Š4Ģ”}Sįx mõ¤8.å ƒš”,0%7i—ŪŒ<‹«€) ļ²=œÜ5箄C)?T1¹ ¤Op…G•{N—9ĢE%:qӓ'ķōg )#AĪ Īģ©CóšĢV©y<ĢdéAxė%é1Õ @s¶«„ÓE˜ĖLī¼öĄwŖ§ Bf§žņ!æį‚Æ ^°G1³aw+±*øį©•Ēm:Óć“,Ōež €ŅIœ ŪtŽ“KW\ŸøŽė*NŲ'D3ꓹ•W$å0<źåzĶDtĒŚägö‹zņ5+DfėV‹ŪZĻOĀłYŚŽą„Eß=CčN8‘ż+S4łģ,>†ŖmŚŠŪUhµ«ŅY¼f½Ųń] ūQĻĘŤTõ€M)wŠ©a¬zxQč¬Säz…åēR’Ā»Gžuh”gŚą°‹Ł«½hDˆ@¢¦ń(v™fĖb‘oĪÉ-H““'¬¦B2˜q||nĘFĻ֝"­ĘAżor}ÄaLāČ BՊ±ŃƒŽ=’®łł‘«ßuöĄHe½«ĒXå!²›˜ĄŲ’Źųy =!åĄSµ]F’÷`?SV+ŗ`tž„8Ük¼’BGƉ,Ńň¶²Ä/…C³/« “Cćõ+M3qäš]"”}„3€„łīą.Ä̾3q]¢E„E»päÜZyŻ‹Zt:Ɣ%†ńćĘėä,l\×\ŒīgT,Y°š²äEĒRĻEŁeŠčf?…žZ“£õ¼Ķ|~K£/Ł’,T"E“\!l4-»Ō(5‰ķ\ˆ?PśŌ=TīĻØł9…5Ž„ēwŸ7nŠžĒkŠĘīŠż%jæ³¹ŒøŻĖi8€|ФæDRˆiw=ų&ņh““¬œīQĖŪ=Ūņ7u”·6pó¶Ę„=”ÜW°eB":²‰£X£Våtxl*-Ę\˜'ÅÜę|c‘SĪFH WĮŸĻ¼8Ö#µ³ņ†ŠēŸN7 Fķ i±4š °S£“WmĪ"P^võ Óz‡:jšČxäĒĄī1å9ļŃ­›{æž^ęŃfĄ \ojHLĀEŃ',O—]Q9åeoc—„ÕeYD1„ŖGx ZWš‡¼#ó§xģ’Wƒ7hcżµ€gŚ"Z—Ą«śS\Y/)6¶ögģ Cxv õ®Ųٰߩµ@V²¹½ ¬r[±/U 2žD!Ż:[”U‹C9rēž¬ćš;…Ōrźé`®£ozyœĮ džĘ“ŌßśÜe[«©I§*āgķÄŗBņ…ŽE^D‰ŹõœČ¤µŅĄĻP}čąÆ`pM‡3ug)v—6sʉI,¼ÕeŪüĮÜ{¶Å,±ņ›8(ė•hm—™HĻ¢ŽŲq\.‰"Ö9ßĢ—æpc½ļrėĘ–ā­¼SW–»”ÉĻ"§&č…#ÄM<oZČ÷PÄöQõ Ųćš­Ž›½“€äMÉÓæ|]"•Ó=& jÕ:mRŒ#>¬QGgGē-³zIń¼āØ2Ķˉ·Ą©Ä²÷E#o ^&öüY^\ <3}K3hŲĮ¦s¼\Ķ?“E@žš’¦"Ø}ā”amJø…¾2*)mѓšU,‡˜’¹ģŚÉˆźŌ‡ŲD —óU„`—8K£|Yvz)Ģ¢čå°0óč·c+š¶ĻoÅnƒōgrGŅzƒĄ44c(ē ;*2³£!H„—÷CŽ CGčĘkJwāj³/“WQń>Ҙ÷\µ,aAŖ©]Č  —*øŽ’#Ēģ+ Üų6~}Ō;ņ ^uRÅżĻķ–©ä†;vŒE9ŽŖ–„ •Õ8z²ZV"ÓQ+Ec¬Ų°˜Œó—€ęÖČ_+å\~ī#YIŚ=‹ÆĆ¦›½Łņ×M,_īåGd‰f§”Hč[S’Ej禌¾Ż,†›śÓÅ ę&žÖ#;Ņ-KźųœYłä”=ńÖcģ°Ō|tE÷µž"Q=žÓĒĮlÄt9\} UØYóņ2 Ń “ŖÄ²Årī ĆS£”‘åhǽ˜¼ŠŸUŃš\łßéył1{õöz’ūR—*„mrĄ‡… ¶½č:C@ōįQlŃØPĪĆ7 4Ā,—€QK’Ü.š0CŽ5 £läÕ q"—NĶćW“ž wĆ½Ó?ēpü gj?Ŗ>X*ō¬Ē¢G$˜!ĶČÖ×zę]A{āžjķņ¬ų(eu÷ėZĮŖø E‰7ž-°ĮńÆl-#ņŠ7ą,V9Ėj{Żź`E±8šØĀōljSM_ÖČĆ·c ĒŲ(ZQˆómV$xŌ³I/’{šD³×`²SŻÉ<ī|˜ Ė{zŁīķ˜-zL ŻyęÕCóé‡G[.Cm;†Ł$.YA\—±¶=ŃÉƆ“oŲ%9e)Ēé_=Śõ(ŁĪ¾š8jĢ—qøx©&ZõąĆ3gšJ–Žˆ!\VQgĮ‹6A6ČU(>Ÿō$Ih  öF„’¾?ÆĢĀ`uŁ7l}˜?**o³§Hm›*ÉÖ¼{ŗČ!fˆ¢N³”WŠ4$KDHs²Nć@DaŽ|2āØC t½čY–ŹųŅ/kż Ī:;֙ś•ā>ŽŪ óg®šą&©ŒŽņAōčÓ§§æxK—¹Ųį’Ŗé“ƒ’ū}\q3‚Ņ—]­ā–śf)·?9ē±T9߬€h ü•¾,~€f ŗ!v«WFĀwŠõĪV†ŹOžŸ õeūÅŠ0ģė ¬õ+ NķDßńշō$ō!]kS7žMtK„^IJSĻ&n-š5v¦ńƒ/–x‘’Å Ģō­».Վ’„ÄdĢY_|ź¹’rŃ#•®“æšÕį)dń¤§(ņ-¼{ZƒhT½{ž•ŸžĶ_f²­ öĢőGĆRż2|J)Æ×†—ąŚcūø‰óš@?²]ęN__jzŹ3veåžUGüåÓ?…»Ü” ¾rŽ4’€ryåCW¼­Į_®žåk4¹<å "«9QµÜ&8?ŻަebÅF ²ĄøfŠ}ąQMįLņ„ŁTcČŠī™„9ƒÕć?E„įäŸEž\>š†ØĒIČ(=ՕGŻD£īø ĄöĖź¹ ­ pėj£zøĢzŹ#XwÅ~¶©pēģb-üŁ;y |é^’‰ƒøRM˜™ŽŃšzÖŻ—Ŗ‡C•œZ "LÅ,’SĖ9Ķ£8TYrŁf÷īs^ęóŅ.cg;£gżh¤n”Ó£ CEų<HuɊ—ōžMŠUĻ*ÓpŠo€Ģ ¾&Šd+×CMų^™›G_„63BćŃI²ųŠfŽŠG:$š)‰½×ܳįÆfÆą‘Zi·rŪ8žI,dóĮ¼Čė5ģåÕ5’ŖXwēÓ¼•¬f˜B†Uˆ¼I x“4ćĢ0į«n÷¶JdzŽz„)cSŽ~}«œæ¾,ŃėÜa„¼+£s’9›„»¦ÜZ‹å\7LLö\ϧõ÷k^ˆSš°ČśB矫¶1do”ģ Åėd7õcšhįŌŹw°čł7ŗXkį–·cVłæ£KėD\6¹ }~&Dōį!LNś‚„Ÿ"9L9wl<źŁ×gP²ōĆ?ųŌĄv3Tx˜¦Ū¶[ĪDcqķssŃHŠžE-Š\ ¾²WõšīØqĒ5OĘC8;Žž%e5gŻš·} –ˆ”­\[\SAļ¼Ųž,9ž č©ķs‘Ö "Sģ·$ŖBV—y×¼hÕ>_Ī‹ø…;ņdjĒ•šjC(bń*%?Ź=“ż[˜§Kü¹wĪŁQ@¼—R/(@'N»,3aŹymÖo°īY hƒČķ‡Ż%įŗwˆY°GP-m8%) ęķłHÅ ³ōƉaéęC›xæq€tėž‡\³”™Ć>A^>źöäw­ŠĆüåL}°“ żTŠė…ä˳Ą¤čĮü¼“wXŲå,ŹXńžfŽ–q£*ķ7ž™8Dóbu®—Ć-Q2g³ż<ær`”‰ļÄ:#ĀfĻŚĪ‡¦;7F·z9»ž"hŃļ72ÄSL ·ÓZċšUƒżyšßꓐøüĪxĮ“·ŹU§?ż(%Iwś«ĪÖcĄØ8Ü9§ec ¹Bgń6PvVŅŲ×lu‚ǟéź^ō⃹Æz‹Ł-ų™;9%Ń=%ĪI¹jōø…ų0ūõ.xge×`ģ'W]u抏-H=qŹn»ŚœOŪ»ą–ŅŚåöģG™‰}¶V“NMZŸK³^”ųpŽŲ#Æy²>Ō#iįQēPĘQ\QDŪ©)FÄyŌ “Ūb6ŠŻ>ą®Y_WėĄŲV¦£óńX§ķ ‡Ź+§ķņĮ"ŗg³qŽ)ŖķұųƒŸŌź?“ßz¾ˆT;Š“Ŗ{Ś·zœIźVž’`Āx Ā{Ų`Ƥ™’%Ų!į­Æ23ɓšč6[£Š}b°Š”)IUõw?o… réAn½oČÄÕ陀ULŗ…Gųrc­a±›—«o^įęX]pļĮŪD?ŪāĻ0š“?ŗ±ŃN«žØĻ&ŌŪSsĒfo¾Īz~ƒA 4Ģ^ÓTq•óÕŖ\©Š`hī=“Ż”z–>®ü5·mł÷æĖ>KCÄĢŖį˜:“°kqh‘ėhø©ø7Ś*(QįhÄ3ä{…nņzļ'¶ÄQMń–Žh ŠJuJĶéÄm; Įķ:«(gļ ā0›¹¼ Œ×ÖÉÜęŪ ØUVĪĒžĢļ+#ć9~PŚw革SĢAVŁ:w\[[±='‡µ·±t6FXC¦£ÄƳ‘6J^Ö80¤n«"½iEQÜ®Šéėõ­~«ž˜=¦ā²c#6Ś€äŌ8/æŒßĖz+ń+¦X²Ž¦P%[Ū¼GuX…ŒYŗ2SĖ'ū·ÜŚuYœ¶¬:ÄĆ÷O/”…*wj½“†³å7’–8ՓåˆTł]£ęʃF‚Kjåå"7U)œaŽYń„˜­?{·†ón:ˆ±š ¾čé·zŁDģŌØ{TąbŪu8•¢B5^{ŠUō" kńh£q„÷¶ņ"Ó4‘¦,ģ±M_`žp^Ńtńųz•⛲æ}k/f:?Š—Jäū "ö¦ž#µŚÉå3ū¦ƚl®7YŹ7˜įH¾,™!&ģć2ჽ6¾G( Z^z'\tŗJō–ņ2E{ Ó$·ņń·Ć3ĖĒÆó#¦;ņNĻņŖf½±P_p*LźS^[ćB—#«;ī-ŖĮ‰„•ęAĀ]¹±žĀõbSųŅćÓX¾ĶG•jv~TĀõ?Ś(–õ°beŹ:-÷ks¾šÜ‘c1ŠŁyMĻ ØŸÕme±‹•½HaŃŖŅišļ?ͱ ŖĻŁŌŲ5ZՌ÷„ē(MŻ(ÅĆøŚG5«‘ćpć›d|Pö&Z$~°¶ŒŽłŌŠ®:ĝ—Õ)ŸBBWbv‰Ļzž.yDn‡•'ö­kY•¤nh90ŁBź©ę“ĶųåņPÖCØń„$üL½vķVvT6 öÆQėū¦-φˆMlńt—Ą`Mœč%ōKדvĶķqU³ ¤z:ōg4ßŅĀĒ)Ū@ …2):šÆ'~k³_±~bŲĶeįÄøl¬¦T—wĶ{ŧŃķż µ°o†:†D ņL³©…ī“1¾Lš×@„Č…š€ŹŗkīŗūĢU59gÆŠ”M ×-Ÿóā4į_« VŻ0vM1®¼Ū?\«<-ēµ—O‹sžs²,5šü8/S1ęśĆ׿Ż^ó7mmv‘Õ±ž$^Vwø©}öwĆ$ĀŃʞ=bD›<1ŅS¹¶Ö7Ģ~é’ . /»¤(„ö"ĶÜäQÖŖŃńpŠ7DGž’¦Éd’*všSן?(˜9c“¹VGļXž,l®W­Br•žtĶ^"E.EPG7hUšG¢õ[!UŠ=īŃ¢?-įvŗņ‡F E%b^DĘŻĀqŹŅŖ”X8ļØ-Ó­›ŪŪo°{ąatx$|ŲWžę‘t>jį“žžčQeŚŽ]öōāI×fµ0ż$ø.U"9£ņį¬Tt[  F üQ?¬ĀŸU`Uß¹­«Ģ…Iaško݁‚0OŚę„ebTWv^FUŻØńK¶Ķ…šõŪEI½D?) XŒĪ&Q=^?bh#YõehżDį(äį4sį÷4‚Ɓ°ÉØļRżS/ĪÉ«N™įs³ļE²`ēFŲO! 2Ļ£-y¤|,=ń ˜‡ęųV{ž3ć“æ|-v_æĶś[X6Ņ|«§•±qł«oZnL»DNkC»‰iłę<$”õŠ%œĮ{QMĒgöĮ¢ĮJ«ģē:rĢÄ{ØmLjo`¦zŸŲi¶øBå#1²ĢźóæéYÕ“Š4 Ć8HZVkDL±r U°rj\gW-ĻYGÆĮh­y,^ŪaƼŹ>Ūālž“ķ؟“{įŠÖĘØ5hļ=W†z«&syT°ĄiŲĄG¶{Eīi›e-K߆ī–c¶»š` žlāņĻDD”śĶbV AĻXYļ€ūN"„EŻgńóqÓ䠦枂ö f¤G:”‚œ+DÆ›Ž€<۪ކŸŽŁr‡žˆZĻmSµĻ}ä‘÷¼ģóxLł|žbÕb$ž¼Ø\Įµ•3{¬ė”†ā9<*ŻO§ŃƒN;łæ] ¬Ŗŗ<ęn¼ÖˆI‹ā8²ȃč-tBŗ‘DĮĮ \W`€G®fLŪĘÉŹ’0@ĀC/y»X»\[³@ųFcvł4LīåoĄ‘ŗ­?-°®ÕÖžžÓŖ—wjŃc•©]…„Ē}2ĖG٧b놗”Š ¶¶ģQÕ¹±¹T“…sĻ_9`øŁ™/Q-µvøĘU!õÅ.°Ó6ԈS%Ov9OõŅŖĀ›p®\äįē Nõ*kŠ[­uę“aĚžyžwʞbž-Ć4CÄz«Č RŪ^9¦LĘ"Rēš0žHĻĄ¶z哂‘½0՗Nō˜§NK‹’ø½ų\/Š<Ü":d§*ŁŹT±i°Leš+µÉi"ūøę-}ßĆŃl.ØośrėėAŁĻ9‰ŻõŠÅ¾(SßiĖęÜUU|rφĄ6ˆęØP>ćK‡‚gkŗ]žü"µYeu^MŠ6żė<³ģųĀb•ųšÕņäźŌs~(hߗm5.CĀ™ ׫ó…ų„홆ųPi¼x˜6.ńVaµ}7޾«ą:Ÿ’  ļ× Ü“’±=Ó±:Ÿŗ€H'M¢¹±PƒŻ£] ŽŌW” ļi hēzeóĻß*Oēķ^3ĶFć&ļ”ź&ĪĻóo’IY§J3vFīųt³ŅØXĢb–šXT$äsŽČōaŠI1ĝ…ćÉĘüÓĢNr²=Jö•Gģ#ęR˜T„*3h‡ Éøī`Īy(†‰M{–„Mū)[D6āQ*^·÷‘ģäbóÉ1[98Ü”æ°øēš•’.›zńvģ³Ļ7¢Ą§:.«Z°lM»Œ¬Ģ¹+Ņ“4ꛑ"Œ«LķQӒ©a҆ńJīyž× ‚Ą§Eøi“å““GN×L9£“„Ļ\6 mńž„+ɟ4氏ƒč³āYhÅ>.·hQūŃļŖ“é>©M½*®96ņ¦ÆĮŁņ…V“×¾Ä6×0‰+`Z~ė<jöžŪWŁĮb‹¦S4d£h U39CLøaƃ“eŠ“,8s2’°öĪ…b/łRŻ`gŚmŁ2÷2öjŁąÆr į‰Ō=»Ę;MÖgugZxÓÜM²ĢÅ~¼ ²¦•°ĶŗřiĻ—°ģ1'ó~iŹOHīķ¬%Æj÷•æ?*ŗf[: Ś".»UóŽ“\µƒÕÖ6hŲļE°t˜Ow¢{¹„zŒ‡™Š“G—«²×¹ōH e£&x¢W| qŁå §ŚbW߬ńƒwаD'ż°:JcOć"‹”ĮWŁ·©–x–‹"sbmaš@1ŅV‡£šĀ߀¦XÄ_|+óÖ'ŅõZ ūŽeŖÄó*mBéJ×YųŸŪéŹöšFŸчlŠÅ–ńa„BģŠ@żi×ZP³6Ö¹K@KUŪŁŖzŠ‹ü!zÜÅŗĢ]#Ē“öę ēǤAŽø O³›÷°>凳ķĻ” MĀū.«Gņ³ü­ķ’K]…{p»V˜4k+ē¹4į—Ļ9É9Ć*&!,Jˆą$¦ęÅé­šm;WÉ“†ĀµRiÕ@yhL@vØ ڦ‘ĖšåN.ģÆęØåB’ĶĪš“•łi%^©K¦¹Ī4āß«“ub.:å9ŗWI„€ų³Ł8‡÷€–¢f?%r) pC]6‡R-ōf#-Ź%gĆJy·Čtō°‹÷^“Żig»ā‹üó×ęšxM„Ž;āÖ*äXŗd~rļüXßąĪQ­‡Hͤˆč¤€lÖ& ĻYLE®M×똳ŠĘwØ,J9^9É y+Ėķ•V–æ£ŖÜ>t(KŽšbӕó7ŗ²Ū¶Dw;n‘ĄźķžØŖ„Ą”wUĻŲ.ŸJ†&ą® +…ķR[–ZŸä-ßi›sƒ‘ÄŁŽÉ>B1®”6ļ¶(±ī‚ęšļA ÌÖxŌR䭵ʸ°‡IüĀP‹ĮS‡Ņvłm ¼źz®+!@L!ųn•GH›™łJ²QyćYIŖƒęęį0iØĶ«“ؑ² ęŗY-iśõį$,­“m{V‰¶µM8›2ī ĘŁ,™ehī²ųšĶ$&ęĪę šģLļæėH߀;8EZ˜źÜŚ33㔺O¶±jć%ŗņ+ŠvSŒŠé :Ē‚(KJ¾sĶ*øsļZ%NVwjaœ|Ń­FŚĘ#-OYаĄ”ĘY½||½ÉxŖžń¶Ņß ¢^‹žł‚īņÕNęxĖČÆ6`€N›ĖcŅ\)ķhĖüy·E¾xV{6“°- Q;“Q+½4åŒl'’Ö©ūMµo@äæčõP¼ļ lœ…łöØE<žP64ĮS|Z”;’=¬\Āś›Ķ^™EĀ«õtü ŸƒpĢaé5ĖWVŅטTLVź-ęW½‘ŽŁq.ń7€t™}©ÉĮ‡”"īEAÜåÆĒŒōP½Čē(h’A»%öøVJ©žĖ`›FdhmK‡E- bl7äGƒ˜sĆß¼B£|E±†żź©:cća‚ŁFå8ŒŃƒ\5㢜¶GbÆg÷Óś‹\ btŻ…MXŗQ±m;ĻŽ^čå—6•’ÜSP@½§ž»œZyĪŗ5äyāåž(c09ļ8aćęJŹV¼®õæATį@j÷ ³é’qG5ūQ$±_T·r±įåøĪ>CžŲFSĶÜ Ņ™ÄčG>­™ń“­–t\3\ØÕ’]>K⸌34酮 «<Śtō–NGO` ķŖƒŸaā‘VŠ~™õŠ„ƒÆ¾8ī2 ([ūĒo Hjä˜Õ śÄ`„«Čn…ūąƒdų@ūŸ-†g߀þŬ·"1śņ¬ėƒżEźeĢœܐ „ ¤Étbõ —q–ę‹^õ”˜f˜…S_źć:R¤§Ų;˜YcĶTą"GžLޱbØŅ¬ch`EĒl:ūn|ŃĶģ™H²æN‡eéÕD׎»ŗ ²cØgu¼ujĀOĻĮG`ęē›Ņ0ķ4_ŗ×7 ±9¶W°ŌEFĄ$:÷ŅźV Õ2W§rÄźŽ¦ūä± é<\”µ7:O3/‹džšŹ żU£·H˜ †*UĒż—6Ķ1é(’‹ę!”ŽtÕAˆžzŽ~ų^§N혔ug‚Ž!Ż2«Xö–ČÆ’ É$ŖĒŃ”–IJ‹®ģ¤ĒŽÆ®k}Ü~’XĢS„ 5€ŠQ0śc”°Č÷ŠƼ/†˜„Ü‘”ē¢#ŖGÉ¢Žjė7÷pļō€ŅuDßfēæqĄ£ˆøŻ«8—yŗ ¬˜Wgk)HĒ׬1Z‰āĘŚ2‘KՆ‚•VK#,E~ĄGŠŒAh‘×d#Ƀ™C\ź($T[8Օ}’Ģi¬ąætßŠ‚Z#’,ҦCĖųœę7ĖŠŒč­Ūč|āĮ¶“-›åźĻ޳aCe›Ų€ĖMŖš®ŽźśRÅÉŚ¤¢”N@6„;\:9H&žjµ“õmö8®ž+Ķ"7g»łW—bčšŌm\±ēlīĆ9ļņ+Ō6ōŪ L>’ą ė"+ž2—TĀP™uÄF™u‰ @ń¦į&äiĀé\[3ŠzńŌ¦ŸŠ%»8!cė ų6čś •1ŃęČ,óģĮQ>ޤ2”\ZLž3/»EN§70r¢<fÄÜa“p·ĒW‹ŠšŹT§åįџʯJbÜÅ[D\ą’¦Äœ9ž5<ÆJ“ ;ł¤Q„ ņ{a4’Uj÷É”ńėx3÷ŌĄ„)öóp2a…KˆJNė{*¬nq_Ń/©8llsŅą©.‘ŲXZ§6ĪæKŖæ§Ģ;B­ĄÜoĀ,Mąg_Q ęm‚ ńÆĖ…J^ū‚ńöäQį$H…żQ‰,Ķ„ˆĒ GY,2”mél¦Ÿc,’6ī„RįŖ¼ŅŽĖ R„»ÓņöS¾Ä˜¢“‚»¦_śÄ>Ü”›„Åć‡åuGćĶV3Ä®Ō$_”‘«śŠ~67ž{zønęķ÷óßJ½'~n@Ąƒ·Hš®dŲ8Ē€ĪĢ’2-§ī뇓?yüyh³~¢»§fĄvRv¤ cīīu¬*("\#łd³¾Ž‘bŌSRŒH‚x<ŗõ‘č_MŃ,[Üdq š½@5żhܙ® vł3łū·ņHCŃHĻ+ż[żu®iż"æ_W‰÷’+ÓX­²øjŽ53æ,–=«’ŹöZ.{Nėßjdę««² Tż§:õtĪź:Že*²ļ²ž×± s,jßŖza{a[¢’ūŪżĮšpłŸ]łæž³/¶9 *GĘ/µĢ¦„WŲ7P\‰ @źOČf„¼#ĒY®øēŲ%Å5-i—ś:M;¾"yR?\ŖSB£r~ŃuN€”ęWŠæģ7@¦™% u«ļ±vļ īEų®LĮ¹ŗ§öūü†ƒÓÓå°P±fųØ?łŻī9ÆIs+s­×Õ×yżuŃU—Øæŗmü}«ö<Ÿ=<¤+łIćēDę_L:†·8C÷iŠ^™Ģ€Š@"|ĻĆFż„FXśup'L3ō ØnŽÕqķB³FĀ/śļ!-ąĒŠ’<īņß/z 3 +;#żL,lø%źŸß»cś^ł(Hü+m’ƃjå7`ŗŸæxu’TīGä0ĄŁ¶¹ē$³kf’„·Ē–Zކ•Z Yń€ņÕņ‡[2ņĖśSńAqßY×§.čÄO”‚³Čzrmjjš@;-ō SsS9%×a}ÓĻ\«–×hĶ× {(¶‘–ŅńŪY$ČŁæé«“ß?iķŸ“P>ł'™…Īk„|ōšÜž%¶”Ž@yj}ZFśeP·ŖB ?€RqŽ .s ې5;Ęi®”K‹yŸŖqŖ¢ŽU-eöTXóVdė…„7:‚™õ•_ū§ō¼Ks ה¢Š2ͱq¹NE)©ܙUJ­ 6v5”émŲP7·J„e•÷ Æ‹wŌƐ)‡FU?ō{‰\&“‡+ļpAU ś(BqØāhs³·ŗjasÆßm«@hčB޼HØ'Źä‹ õ2A?iæ@¹’ƒ *aCČ2# 6±ÖC ƒö¢õ%ä~KČæČ?1;`>ųRÖźžž$_Œ5Œē*}s^“›9ŽåؙxtDGĆ’Ų.'“®R¹©™†ŚŽ÷ńC’æy/}ęĖ“ī”XŖÄŗcŸ…ŒēG‰ ģ-¾ŠļŅšSŃ™łé{¤µIč†;T5ķ1bźö"bŅUM²‹Ÿłé(Ćzņ–?gtį£xēĻqģ~źA†Yf׀čhīV”}LŠ,Wy~)r5Ģ/²2•1]ė‘TKHk•“FW3čP°õBv3ŹÓšŽNY<`@¹­^Baö‚d¬ue%ß|dĘżÄØdg€,0Ÿ~gģYéžXcęY©²/p?# ģż•^"Č ~@Š{iśū®&“žļ?ĮœĖéPČ“¶`µOdó8¹Hu2ā‡4x*ę:ŠhŒÓ{r^\ČėiF=+œHu«S'Z«ōēĪiFōģœJ6ĘMcyŁe/øö‚ĮĮZLhxgwˆ±˜Ą™X®)ūw˜ž,‹?ó7ėļĮ/Į-ū©~Qļ!b9Mjjó(æĪEÄxN¼ƒXOOé!\®+œ³Ļ(?žh¹=Čńmu UzA*Ŗ“B®©“Ķ§ŅŠe,€ œ±—Qå.R¾(„ŒE&ĪČéšŪ•w'Ćįż H+¦ßžŽÕśR4 į&Ö¬†£—%K:{€­*oOĪ~7"µkbQ³Ōvä1ĢšEńź[BfhšŃöˆ\S#ÕW÷Mõm›—GŠša~B!'J ®q bkž\'Ŗƒ!ųņ£”!84Xó‡¢Ā!łé¼`Ō'JwÕŃ2ŠG‰Šš\~Ÿ&TŌ(ƒčmźfÄ{²Ōź|°ö^o¬Ģ? ņ‹ALķ>H)>ž ®ž­ió‹ńÖĶ|ꊠā7­bw#NšŽ;®¦+.„+<ĻGÕg(¦¦ˆšl4d’rōfåIs-Bfa—Ŗ†„VnŠ—|ū²'†{Šŗžś~ė;€y/ŅŲjw5ĀŅ‚Ėnķļ ŚęuG0™G‡õ×ó¬%^Įż”hs­"“sf§šr‚²ˆŅ"n9ęr„öŚuŽņXI+µw,Ü-ākw!„ś†ZP÷_šüį”ɲ'Č}LŌÄõ”/q9£ÖG-›:~®čk Țųó ä‚"Æ*Äī%#ųčrn„V4.YYśą:/£æ¶ ²ž‰Ń|Ē~ĶČÓ/‰0õ"‘¾’Š@¬Ņ6ķÓĆŌŚ 0IW Kõ1 ©UŸfµWHįéė¢PŖ ¶¦’ÉļdäŒā«÷©Š'lüÄŚĆMGWš K`ŽČńļ.*RMCKi„˜e?‡h„p½Ÿs×üäé^†§ ©z°Ķē“ŅR©Ą+!_ø¹ u‹y‘ģu*² ˆåšŸ™zƒĮ«#W ˜žĘō_‹Õ…éa-*x׫ܵæÓ»ž’-G©XŪוŹ=j«X!ģ”6ūŲĶG~ ć’CɤŽ22Æ|ĻE™éŠėØłK¼įm‡u©“vĪł>vȆ³K? oĢĶĀzz=±*ĀāJĻDĒĶPźĄY”X=Ņ6ĒÉtO®‰xĄ®˜¤^8ŗŽ\_Wb÷”ēÖāeEŌ<é«Ķ—®céę-”üł1P;æØä%b˜g:‡‰NcI;ž‚ z5Y÷óļI¢UŚ”ķ:»r9ƹŲG_†ĮVvā~PBJTņ‘%GŽ’]ŽŁŃžŁ ēO„§f½AČŃRóŅ f²~^|½ĄCā⣐Ą”{ör=É ŸŠ‹"Ŗ ź.¶ePńÆsbż‚x°ņϲ?Ä ś!“EķUk‰¦$9 gxWĒO×Ā÷“ _&X|“7ž-É× ͆I9?wc"Žæ6": Kƒżœ3JNsaa[e‹SHėū?‡ŗ™ a{OŹ-ł™!Ó²VÆFŠ¢®XĪąķ®u“Ė.čē·Læ9›WW ĶFöŽ‚†ŗBRģ#$lüŚŗ ?‚NŲō:Ųėæāh·“ŽÜˆOļD*æ‘T”0I<6Ģķ%Ģ€_o.Į“24Š6Ćā·'|ełé" „e0Æ+[N½ĻĆ]×\s¾•“<ߝ{½ńSźŖW±Ūʞ­3ܱM{ńq?5 ’ ƒq„¬™ż9Mūw%žāś8ļY:e†ąźčB”=ašN×3AHMÓĄćK&….a/§ģ/Œ£RÅS%Čŗ‰˜Ų©īnĀ\ĮŪ‚ˆ4ęnY%6ü# śė%£]Źnx7( +wąPT&½Šk"žęi9n7T2‡T ‚āép”†Ŗļ靼ŠåP·†CS‘ö¢ķ•w(ī5+<³ģx¹Č± ‰ģš)4æ±z#…¬ÅńQÜį\FŸ`¶—»{ē)d[ŹoZü†²ÓėL,¤@« Ēśī“$²‚!}J—|Į:C¬c¦Zox8č^[@å×ͳŹNN«‡ml >½Rćõ¼_S+<Z«ūaÆØVśtµ÷@÷­ ŖšÓµ÷¾~™Ā|Üš"ŽńŃ\+ÆDę˜ÄpdŹ•Ō끕žø…p'ÆéjŪ–¶g bRŽ¢¼ØŪI«¬8­7ceörŅæv£5‘cÅÕ`ĀvŲ‘éj²y’z“Ż)‰׉ŹA4y“/i¬݌Võ$1k¤?g‡&,Vėj26÷"T—Żp…‰7 łŚE>H“ŪŌg T£IOX¹h£u~Ņ¢uā¤ŹĀzä*‚Ä2­-Ū˘ķĮÉ£qŗXL&ΖȳEŸ~ń[¬‰B»ųMÕ1šfČZ@zw:ŃŽź/ÓĖ [Ę5&ʤŌu·I Mn֖ŁmO0fD7¼š†>šVē¦u<ŒĶNūüE½åMv‰[X§Żs¦Ś J($ŠtÕ„įXĮoūČšYįØ5ÆRJP)4|r~ā@Įæł,Ŗuå6‹Ü@V}‚ä7ʦ¬|ĆT¶Ņ#|§ž&˜v ń^c¤˜M5Ž6OŠõ«}y¦ģŗ crå6Ó9S£H°hy=ž n0°ĒWFMžIā|ŌĘTŌ:ē_Ļx3›f濝½F‚zæūĪGŠKåꔩ*ŲŅĪ^0CÄĖ)®6śFsANäĀņ@ n‚§ģoņ @Ā ““0‚±ń2ŅbĄMūÕ[{Éŗ@Ŗų, éŲ ou*d|9L:[čǶå>¾µkhXņ7rU·“=«}żJ¹.bcń.ÄĪėóZiĆ@D‡öāZ;Śm[Äé¼Cą;Rl3Ł/O™”ée»õ«ŻŌš ā+Ś·’ö”ØĄ¾ņ2wéB¬Ż)¦Ł\·Uå‰ī”‘3®T‡ bŗńtn‡~fn¶”Ń©f±ŽK†7Õū_ŠK!˜Ó.Y9^`К#j>+<Ø>?…Č$ø¬®ŖÓ“s?—‘żœšęÖ]¢ c•RP‹'¹2āŽ|÷ā4’»æk•TŚćŪøńkkvoŸg›Žółøõ†.įOµ¬āE®0*«ÖĻ1›·×Œ°­É ¹€}ž@ģ,¶.~āłg $ū8,ŸEY`x "ŪćĖp¶qłŸL-÷øńša#\Š"r¹¼æcoķvžĘdʚ?/*qKرłßqmLy”PR2Vć ģżÕE|ā”;1ćš7 ņ™bµo„xŚĶoŒN ‹€ØMÓ·+ū€%?]|†‚›+žåO¬£üŠ-«Ż¤>wwGņ'FaĪ÷ˆ^eą+w WĖ+ōÓ~- ķoJ™¬Ó®%ɑŚzU+‰Ü%Tó–#Ē>Wp®æćńO›;X;ėzįTŒŠwō§AGŸĶ×(oŽ°ū¬ˆ˜*PŪŃ©®Ž{bWöÉjķźsļG o¶?£†Zj‡;žĮ3Å cšīiVS52MŪ›5 j­—!1Ōhš,ĵ‰vI³ózw¬;XˆLža¢©^+ńS‘ś Ux3{1Š o#=šX:„ į©z—ndD“å™B’##>ąĄlģņž”}£é1g‘4扗€5”ZfCFR›=‚n ėńōä$¤8$5>6ŅüšæōĶ=t&¾y¶ck 'ĀC…š”Ęü•¤Ty,;‡aÅ8“vcÖ[¾¼šR¦Ż6Ü<œŌEŌæĢ~ÉĄ§7k”‰ž!ūi&½mĘüĶ©»2" *"E¾!S'Š:į LaČpŠX婀“H•Ńšņ›—»Ģ"G2nG«ń»x¶(šˆN3LƒæcFƙ±›å\}Œ“‚  Ÿd0ūQĆ&OŪp…v•®-;U­yśJė“ZÜlņŻVȐ%;Ö®ŠČ ©½–pądĪž¼‘ÖŒĄ £.ė«gīÅF(zĮl‡iVųĢ{Lī Ž”b‹”»ĒD {5ˆ“§_T³{äD’YwE«vśø42ŸĻ|£ĖŠr°j‰EhĀ©×cŅé|”>[2:;‹t|ä<Ń9\¢'”£ÖŲ}Y<‰ŃśXķ*Ŗ[?Q:ˆ×ķ,PŅĮĆ\¦įø<ĪŠĻŻq—T0pšļØnąį—K±ĀC? mˆķ@ ²D¹ž#} Ģē żøä.Ńž>Ģ"‡ž\Ö Ä/SgGws¬<ķt6ō²ā~.΃LƐĐżÅF.ū»ć9Ņś»ØŒŅ0Nł—±ūŹā4N­ķņXY²cZ:;(cSl±āLĮČ[S8TÆc܉œż Źrҽ˜—7ż­G «ń;Dėś(=^07w`s¹Ūū' “(( MŃ(Ŗׇ†ĄUj /ŒVéóį¬?¦xżqy¼üĮæīņ—:'&ž)Gōm¾\fāń÷.;J{˜01™¼~ķLĀ-™˜ż«=šĮ®\¶÷ųiĀ:@7Ž.'ŗœśw˜Ŗ’/}\y5-ōÉ;zsdź›¶A8 ܽ˼µõ‹ā'Ļ˜ ”ŠģlŸƒ0čöņ­«w€TnE’Õo$źŻˆhq_į™I=ōŠ‚!†ŅT‘©ŌĒĢÜ%>%ɨ`™;¦ .<ęMŲņyĄ¦üjÓr¤AŸ“§ųšÕ_vŁŻīumÆæüe 'eĖ)Ÿ‚FØ× ą7€\æü—Ń^և Ōå@*$čVM©„…ĒÆźlüM:R:XŁś 5˜/"jźqę}]ųŒV^Hėō:!?9|0w:O¶m°;j^(Ÿś¶ĆĄkņ”‘ķ潟„r-īŲ‘čū4zE{Ē0īÄAŠr©Mjš>™€®jņ²åī“ Ś ž­~ń€Č ŹØb)łziڊ"ؙesmŌ ½®cž6]:ģµ VÕ]Ąn•QeĢ[ØÓēŚķa…ˆļ”īŒÓ±ÆŒh }Ÿ …œ2RėŅö׌>²+˜¹håšģ™(’0MW‡>«ČEvq-Ļ0œ£HĘ@PĶß9 Š9ķ‰6Ič)žb"‡¦ęzā}ÖvŌé0\ Š³ėīń! U#£wnwÉČ{¬8Pƒ ]ĮZ•—˜čdÄš™uwypw“ŠÉ#Ŗcč„P¬?b~ØJRؙ–.»£|K¤½Ģ„Āä*ńåéÓēš®ƒ9µ“ÅŪŌĮÓD/ēS–™Ą įl鳝Ą¢tšŲßæ v§¤ģ £^Ś‚ō_)6|ŠQ­ø•©=3’-"ž-K ‘ē1„,k«'|ĆŗōŽ"HĢź`|ģ®ēė§¢n‘= –A ,ź=Ī«–œņCąÜŲŖå”ŠG¢fGY@=ÄNĢōϚ ™ß&µ z£ązĮ7? °`¾ė‚ró ī6AUœ!œ©Ąmēi«°!ÕZŖ’–ėŁöC|0Žó Š~¤'ü ĶŃ/NūüĶ×¢÷œ¼ 6ńĻ÷RØĄ˜Tˆg übvŖhˆJˆī‚hŻz Jņ«Q/“ķܝ2Š>­ ę5…›r™Ō=šč·œ;ZMäž~ŗńĀŒ n;©ZØ5·x‚yŪø7 īQ\ō)k  ^ŲĢš¤šĘż;nŸWPJrš›ˆįŗCz„’üįŚŹž÷5™>tb)•É„¾E:Ū"ø Õ†%ĶӟV9×ŗŲ~‹Šļƒz”֏å[éÓUž=V4eƒSģ·:<²­8_·ĀŲŽ÷gg@Į,v4>w®N©—„ŌŽU   xaäģSļ÷ h³° 7¤¢ā¢ˆō€Ģx±¦'m@æf@ŗ ęp&,d’: ¦“ž÷Ø ¢Üm.ć€ĘÖ*iUzxe[w—^±øcµøĻJĆ L1\gēŠXüäįLŪ \ć °]§Œ}ģņŸ˜Œ(3uڦņ„ŽÅ/ł"žć¹mŌ,ļ÷ˆ¬|±Ć“³ž\$ėķĮŲ;lJ;9ĆĪ®DŖԐ<»Ņ_™ĀJ]ųĒ± ļ¶VgäĪ­ $1Œ>”ąĒūŽŃÕ³ŚžŹ”Q÷Üģ/ņų j7œæćŻĪ„:æ)<8$ĄPJĻü¦5 _ŚĀm¦%Š~÷ZŽOŅĬø†¼˜\±§l² ƒĶ•, ’ł“²ų¦ņ[‡±FŖó8R‚×Cß+=œŠķ©Øšä:ē¹ś Ś£ör÷Óa`ÕäQüę ėN씕Ȧōźī¼€fNīśœ‚ŌÕx÷1ź’ƒ©-ļÄ ˆ‹i0d_—A!ŹįÉɈ8ķžx»ŠmČŲ”?½Fą‚sZb‘ūÉż+#Ģ ĄqsŁ ļźg‹Ńåc’†ś;¢R Ŗ&·¾WÄ[K„¹,ŸŻē1 YFeM‹(į2·?éäfė§*uÆGćžhgŖŻėP!÷ż?ŒŠJ陮KépD †Åé}źJķPrø`<Gµż¦:Ü®y@™JG‹+·vĄ·~d÷{žSžt:üĄ¶ßŖ¦Oė,ĢGy†—$)6w“ża»Æ~pbj§T£»ÄŃ`Œ0ŽTmØwT½=¹Q]żéÜ!Ō0¾ĖC\T¬žó˜%ŒŸBBæmÉ_TŃócJՐžC¬†Ē0m6ķ^k/:ƒæ.9" cąCU„¹K\°Ż¶ZH‚ˆ‰·ų!£z§Ā£#õĄ°„?ߘB7ŲÉŲ\Å5že– `D;ąMw€_įU@¶ó'·HßĖ:6’Å8Ū>ģēž‰dQ{kėųīs W™ģ•Ąčž»©%­ą*Chīƒyj¾įŲµŹÅĶ „ćē ž«5W»J¤y¶‰Aō]QóD FJwsw”hvŪ=õzć ‹ĪĆ`^{Sź¼Rż”įž­:EVŖÓrżœĻŸŹ&ؽπĪ3ćHå“ԃ‚é+ēnŗUw®äbz= ”ˆJ@ŠiRIśÉĄā_0Ѷ1ūW0°ńjé ³Ö¢°r¾4ŌŲė)øĘ\¼¾q’C‰@PÖ5ļg`ĵ·Ć³ŽÜįōšF¬‰Öēb c*ēÜv5%³’‹`N-Źż„“:ō9ͧ\¹ŽGĘNkčPņĪÜ÷K'9 ‰,Õ§ĘŻnH¬C­Ī]3Žą(ÄģµzŸź–õ0u‰x-żŚ;sūĻŅó!ńRhŌ£ŒWXć įҰŃbHÖŖ\6ķ™ŽB=Ü=Ą*“«ĒŹįĘׂ’ «#€A ĢِLnHćƒGÖ¶‘"RĘ4‚xŻ/Qķ„3ų6ŅoUKLkżrˆ*PµÄ÷”ą­‹#„`öN©E{śŠFŹŌ]g]„Ömń{;ŻōŖŻqsȼdééiÖ³qlζ¢}ŚŽrqidųž17³ö“«Ż™Śf¦£B³ÓČP(Ć ?‚)õZzØ«Œm8i‚}*(O[k%7RDy_)DŻ+ltÜ“‚³šĀ*•¢÷А0åū’Ęó‚įÄø”%Ā}ąvńsöæ×®iš‚K@ŹöB{2eWS.m¦"N{ 9Ņž¤Å‰½OzēüNw­x0T-b³™€ēˆĖgŽķĮur)„ók¶Z“”M/ x(;¦Į½x yĶrؼŻåĖ \ ō7yÄiĄB¶? [3^6o%b|Łéc"įG×s-Ą0P[6Ī=KķT×‹ŸØ$­„+]E&뙫āg\tވ–Ņüz”vuæjPš~/®W\Cjw_VŒĪ”—ĢOa é)s9Š”z—To`Õs‘Ó5z!ŽŁęŹų?[3E•0™:?‚¦ÜÆłč^ā6»ž%Š‚?¦½Æ!½“¦z¬ iž°§[.Iß°Å ĢŽ…Ij”+_^hÆTVŸ¬LŁšĄI·—±€/¤ŲŽŠ”‹| k‘ßĆųyeYzvb€(É z£oLw×ō60ńüč+‹X1‰W96@ßGl>GIŌāõĪ#Õü  4c0+:Rg0ź„L°Kqƒ†ļšé,!^ž!Ąvś|L_ĘHO­hŃ· Ā+TŠCÖt¤•®l³:4óUŒšė/ēł.ƒ¢ŽļŠn`;Z~LF“ź–ƒŚó‘Š»åŌ!įu\ZÜU‰CzÉ ”ōVˆŗÕlčŗZU ŚĢÖv…ƤŒ‡ušēO6lĢB•U5L%J@”ZÖ.åœg8XgQņN­0FÆN¹ē¾<ü”Ł,»Igh{-‡Ÿķś‘ęį:[-³p*l…PŲģ ×yČD‚YiµąÆ‘Ɲ$•„VAŚÖ ƒI¹%: 3y††Õõ† 4[ģoO„驚ŚĶMÕäJf š[ž#§pw|vē0 UKL›Fż’˜Ū2e`{d“®`Nõ46ØUOøN*’ ”`;DÖłSPśc[ƒ½š5Ć^=Ą¤ŠNm õ\Ž4ĢY@łQ8 ćyANŌ3½Īŗ‘²’-’uś"°Sēų’•ĖčH­ŪĮŠ{ųQEbŠ›®ŌYĮĪęxĪF{” ˆ‰Z]xb²å¶Go¤V„y+ēdP!%6×ō¬Qh°5ŗžu-@RPP¶A2ćŃż¬åIXĄ<@éÊŃEJ3kū$¢Z鯔ņą†·ošcj«V×ZGĄwŖŠ[¹L/ ö5‚% ¤Ö®m”ܳ%`–$OYYM«œB…a›ŌC£‹{mø®ZŚ@š [P¼’ē^ūoĖBŽ**ųŭ딁®ü’ üeXF„lwjc‡KĘČÄŽß³‚īłS“Ąīp— O£<£åX /v0@č8XēX‰e·›sš‹Ļ^ā¦*F,Qhä;hŸ=©„°—vJ G©¼ ĮėFŃ®ŲŌ ­w9ܥ攦ߧl›¦9Ū­c1S 9ÖQ@¶$a÷mܬē7 Ē. ØJÄØžœŁ]i؝ ®uE•¾~Ć)ól¢Eļäi¼øŽĖĢ™Ś^³Å.!ŗk‰ß›ŖĻ\¶bō7"ZŒd|¹Żøäws-mq{š‘›ŃŲ¼ī(A Okļ¼0įkHƒ(ē€,¤ćsHjv9YVčør¶¦[gĘ=M/$÷Śķ.«©iž1ä-©éJ •fJQ!^8W$W ć¾Ræy—[LVŅ„9•@~/–Ž:"öšŠ„C 1CŚĄĶ8Ä_DÄWŻųdzµžrxĶ˜õnYµ™ĮƒÕšæŲƒ-*ČŻŌmIó°X|Ń<¼jģ'ƒé¼^–7 ž%FŠÉ!BZ¼¦Š½b=HŻŪøĄŁ‰%›wڃš6”ā½Ų¦@Œ9Æ.“ų»'ŸkD;Ę!–äž?Hį¼yа“,y§™Tm»µxG<K}™?ÖäŃy ÕwféžŗŠŅ—ĮłųĶSW7Ģ>½$ø5qūčGeēØi°b ŌP«±=:QĒėcĻā©÷4N0’t&RŌĀ?ēĄIØB^r|ŅĆlBOIó#œ:GŽØ™”¢ ŽjøĪ¤ž«ÖŻ€pkhpżæz6ĖØØ»°Ż’†zčačnzčīī%”’īŗCé))é.iEiQŗė<ļ{Ī:ūĆżyļ{_ū^×µÖž”½ßʖĶĖ™ŽkŸ-Ūې^$s;ŅĻ„Č_įZ¶JĄcź‡ œ(S.nĀIüē¹Bē¼sū“ęgÅāūˆ Éū?€čWźßßo”x&Ū‘ū!eśTN6”yūlŅJ’2g‚½÷®oœöŗ‚‹ŌµĀiU¦žU®’ęN7py7²†–ŽsÅöC?=:$¾gwk’÷Ÿķfö¼³,4%zˀ϶ą8Õ5.C›WŹ+ÖĶN3©°¢•Ć®*ŖT(Ąż_²źõķ2īł=aØ4„e6_>]xČ?wą­`L[qX^PĆ2÷jDc€‰Ÿ¾0.T§Y\kŗŲĻę?žĖY—ź9^ˆ¤RX3SŸ9ĀaUóEū|ĆĢ9{±>ŲP¶’Rįs`žŽņ—,¬ĪĻ4曵fšĻW¢üŒƒ 9/ļačĶÆ‘/ÕgČEćkŗģ¾9V‹5!ėģųģ»&R%m-ä<įdEDģ¢wM~x,ksˆHtŒØĘwæ/‹¾ÖĢ 9N2­×±K™ģ¢æ‡H)ę{Jł%öÅ#-2źĆšĶˆä¬×=­¶„C8)ŗÅ‘½„$ĒgˆŖ–7G”Ēļ4ē?ķ+E¬*5ć†BųĘGĻ"t'˜ÆŃT=ĜÆqŽõe[„ξT7{ģõ6õ Ģ’ÄUž>ģL(²BoC„p¼ĖŽĒ~S9¹ż©ź‹ö«XYū¾ø×ådbš“ÓķŠ{"×%ö4‡…Ą€4ŒeŅś‘Õń[cńCM[Ī?ǚ;Yמƒęüėy'K½Ļ6®zZņX)šäö³„Ē|%”£lż¦·“Ļž’7>Č+I±Łi ōėy½5ŸœŚītō7Õķ”óē˜8)=ąrĻŁ^^flX·¼–×ū`oyB>~ö>~nÉ<9­żLėyÅ]In(ų”"PcŃWėŗ±¬ąVŽš="µkC_G‘Åe‡ņāĪüģ˜£„ŪDžB"0C³łŗ.¹ē’ųõDj’£į‘Wē!e±I!©{sųÉ wķEérŃēƶ·„JŚgļed}Š F‘gf_žÆ|÷æ9LxøWężØĖ’ Ż ‰kIˆš]! š~Ē@)sOÖ{“żć H¶)H’wøfæ¢ø*NÖaØģŪ–Lī¦×笚E’’ŸjžJ{\‡ y5›ēŠŲÆL÷[רÄįmM"ń¤R>-qjJ(“_+&Ų| ɔ ōå“}æ_5ĒLNą’ķÉrś›‰V[oõnŽģn>5ćłuŲÖ0(,6”Ųß“ ¶\ū¬–+ÕĄõ_`Ń ߌ%ēūõļy¬ówlqĮ™¦=…®®ƒĮiį3ÄóÅü¶įTīj\\EĒrć/ŲŽ“(«É²ŽŁHźŖæNA#ģ• Ś«•]•čsņÓh."¶e»y¶Ižw»‡’Šč9……cŅCyŌ\ÆsiL†””ü†¹ƒå¼Ü.{T^x’õ£Žż$ŁžŁCč<²[©ųż°CęoļŖ×³…ßo4¬UVT³59WŽw!+1Ńą¼8eNES!”ŽO÷ę>×Nūh½ųÄĪņwøü F”|K/ ć@Ż—kLZz;³ų2Ģ”–ū/ßöśĀ»ŲN ĶU„«2ņPsŅEm¢·L×bĖ MęėäcÉ²ŻĆ! AD}„AWFš²rœēŲvŪŽLģüVü—fżķz|t‹÷Įgūzd«ļVE=Yū(ū{„Įw½„Ź­vCR•m9ĶŚ&“Ā•ķ"yųź_łØ#˜xØb5wOą%Ax)νRµESļm‡2–)žV/Z+S[®'½6¤Źā÷§åč ¹ÕF£ jŒOż÷ę‹[6`uųõˆŖC-öƒ³ĮK¶ŻyņÅÄ _B0}ś$6ēšW|‹–…CŽž¼ļ_Īœ%ęc/:*#č”%v>iˆgŗŸ^4Ź“³Yó ?,¼JčŃJˆhh|Uo`36Ä•l™ųQ.ś² ĖĢō¶ }ł³ń/ūĶ›×Ż³9Č&­Hw¤˜nӝF*µŲT‚óč~—!Ž*ĘÖҹkók{21*3ķsž£Æ~éĶ ®¢"Æ?\ågyæ-­Ćżp˜wfņvīi2łŚ:™Ÿ›½ ‡!“Ź©|/Ē’Žóųē\”£*Ł×LŸ×ķY[N]ņ8q‚N‹ćs® ’Æō źł>ÉoŽzž}ø.R§6/xįk{ӝW٘x1U …Ą–Sū·÷Ṅ‹mcŸ<Ō…Zæ¹äžqXćT7ē°Ä\±~’ǧäī°Ą'«/=ŽĀ4¬¬Ēäi”ėt͉D«(Ü£ū¦Ly0ČbJūwī0r…å}ÖÉöN™JnķxC~öv”÷ńó|:įZķ’śAÄiZ_ŽŹB”‘ŲĪÕN•<=Ųļ LžąW0{³öREņĖøjĪõ=æĒČoeŅńZĻ$Ø»ń”ŽgwūzML²ĻlŲW‚ÜI’v<ĘE5™ÄģI®’ČDš >Ī“«āķÉŲæS•ø/ yfM‘žž¼¶źÕ’ćmßō‹”’üŽ'@Šäb ßøł/Ä}U#uŲ'6Ŗ8æ5*2/¢.VĪźŪ¼ī?/b+¢tÕā!ühä6±1ē:\kžf‡Xõ&•ļg+F>¬„YCŖPßg8ń!$‰ń kÄ¢Ż^ @†4ŲXzq¦”$v²ŃšгĶBš“X—Ŗ®ēJ¶Z”ś5'YŠßEȗ\ݳ–Pæ ~¶äŲ)Tžö*.ĪÖ;ņĖÕķ×Īß6ƒ†" tT‹#ɱļŌ\åÆCaņ‡ķÆ„w:žėĢŃE“H]Tyü€:9ŁĆ ÷wƒ„µāīēlJJ®ęų”X{ƒ_źY>›äżˆĀlV!Ł\3Z³żN’”ÆķīSźēš·£'Ć£xåæ—sš’Ó?‚NĒ^æVg“Ń{†žó:ęÓ*ƒĒ9c“¼ŗŌö^­N²#ńĪU9‘“kµ?–äa͵©Ļż‚7nļ‡ēQ_±}©å­ŽģJ“ÓõźÄŃįd×+=5e³Õ—ķÉ…Ė¢Ę0~ˆ­|2š‘Ž!Ś(åĄĄķł`„¼š7IĆ©ŹaSŸŹū½ˆV0ł‡ Zł½.*Ŗ³iŻ·Uśc‹WwśŻ« įsūäQĪēPėĄ‘w:ÆAńķ¾ņ\k·,żį{AōZÄĆ`0‡Ģ°ēƒēœI€jżEbā~IÖuwć°ń!ü 8ü·ü#?ń (`Źė ?‰ūœs"på©Ēkj<æ_ž~{żĄć×e“ŽuŗŽh’ųÄeŪHj^Äst~»ˆ±qю/6źłŲšā`·½ńźF@Ė 5cĒÆĘ0tžÄ”/%"Ķīé÷i™ÆęŖÖ*YēzŸæ;±õÖ]”Ą—g÷=|•ŗĖ1³JŻö§ĢCI”YøĶ{Ќ M<ž(źǧ7ģÅPī«§M?„¤šÖ™hIņˆ¾±^½4ņėŽ`¹žSÉĻ­ŸłFĄ<‡é.v÷žŃŸ„r¶eA¾Ć4Ķƒ0Ž©qƒ&ń»źAG>oņ~Hßd[ læ¤-ļžMl,¬ū>(Ž@Šõ8£ ¬«©°\=fźÕvĢ\'ćī.ßŹÕ¦Æäå_Fv7śW”óёHjź —«é(ø2#/ƒūgā0­ Ü6sģśˆ–žŽóV;Ń(Õü+Ļ? ß_kˆÄ>Żi÷vX žéõ§Į·M¶ž‹Xł\tÖD›šžīYR}ʆž Zéą0Ӛ¼›ņŪ”}–›5{…mo2”“nķ3 Ł·ž<ÓX캟w!NÄåœ hć/«|ų¾ųÖ“QŚWĀz܄GN<Œ‚ŠÖńź*5ęVć:²Ź_Ņü:ā, £oŗ°v™ģ/8Ż8}”ö= q2Qj’–ų©& §$+5Ł€¤PĢ” :¹l•øāÄĮ½7¬ģ KI±;žzi…0üjłi&X%gŖl'üWßJw?mGÖ3ŁļJTPŸ›Hģ°…9Ó+ż—-^¹ ö¹K25ĘŖ&Z5 g~;VÓæ~PRt,’üXĀuųĶł†ż”¤—(ībiļ1@Ÿ*U™8fŽiõś­VDŪü×=O‹°ćC V?©›@xósßÄö?Hš1/%ÉÆŠœŃžQźź8›ŁŹU˜¾J2T½+m³d£$[„‡8a.ō >šø”#xłiŽ­Ł“ Ł7õV~jŽ >‚}ų“˜§M[< UAūuݫݨ©¾ŠØĆŹÄ_$§1łi߇’ŖŻ ½ Ńžkż`Č`¼E^|©… 1Ź——žG$Ö ŠO žÕųĪųóŅéZƲ³8¹(oåŹ^”|m_ŃR ćrĪsOÕ§Ę Ģ˜n‘Ÿ`¤Oäcå+*· ·7•ÕŪ/+šéš·r}¬Ŗ²{9÷ņrN쳇Y­|ŗ¦«åžx8¾–®Ģ¢Ÿq\  Ī^_Ö„‘nŖČ ™oĆ|ģøŖ q*{vpõH_õ'ś^Īõļ‘i§É·ņĆē‡ŚŠv*Oü›īŠ}9_…&E“ņ¤1=’ UCŗ‹‰kŽ-’\łŽ]I2͌»ÉŸMA>fvŽ-Zč,1fĘq&Pų7„ś(Ā×fė+Sb‡OLOœQw*yż&·Kōʰ2—hsF4”Yó®BF÷ō'^/üŁóHŸ«"̟/éŪ°Ū¶¦LF'Ŗß,Ēlœ=„ŗD&z÷ÄźÄ B]<ÆŪŽ77›ļ:½3IŠõ ?˜tŃī>.Ьwg8,™Ē¾.V¦dYt[!FeW¾ŁR"w=į>°p0ļ€~÷FĒ­Ī 4qjr„×yōūż¬S Ū9£ņu²—”6’”ņK[%1ŖYĢ,Fņ…Ų'`ņĖ¢Bč~†s!åǽ_Q-öÆŪ%ĢŽ˜\&¦ĄkĢS;Į3 ¢_²•ČŒõʞ•m«Wī‹ÜbÆą²äOé£#N©¢Å_2R1÷8)±=å$#óėõąÉ¢*ö°šOn_šVZz}ŚŅĖ Ō̦†œ\‚YŽ•ŪyrGCŅ[z–Ÿ ZŠčD@&¤Xj9WŚ+įfB‚7›"‰ŹBą[sŹõė(ÕzBĘ÷4.kœssĶF÷“Ī“ tbk–…÷٬Ņõ¹_\DfģÉćLk~|/«ėügCi“‹Ÿ”uÖ;Ųzg#ļ®Ū07Ź-‰bk YĖ—¢µZwé ūr;㪟9ųꚒś ˆ’x MŹ5ł’Twę5ńa*}2—bČ,FįPu@Å)ןå<„Ģ%*Lz=ųlOŒæ$Ü9#cc°·rŠŃ¬ńZĖnæ§HDo1ąR?ć4œ;v^ĆgDéÉu7Łw³ˆ@iÖr!“»ūß}–¹dµ3NŌŠl}h+÷Ł©xŲ${ųūA"z #]šĖøūšó`+†XΆĮn÷oDąæ¶5äé¤wėĮ͘Ł"¤UÅpES£¼ ć#ćWU!Ÿeś·ŸŖżÆWėko«øIR+6=“O€Ķ<’Ń՗ÉZŃ7Ųź_XŹ×³åĒŲ°ęHŁöxŸmÆ@żöā’ -½ÖēĒe…½“Å=įܟ9£·u"„ωµž‰dāZģFĖüø0<’ļüzRā+4g6{\¼­‰ę@ł|š2õ™Ŗ!ÉIŅ›į׿­Ž˜Ÿ\C˜O8¼=AÆ3ū ,ų 3©J„”fCx’RēŁÅ•Ż4ÆćLl^k.y½0Q:eY›Q—¢BvRO»”8 {&—Ģėįżz›ęžfģß÷Ķ$o7+8š•\ÖŲ'Ֆše®µ&w÷µQ’Cšŗ†Ņa¶•E¢ż=\^÷EFĀŅ÷öbēńµÉ> ė¢ŪN¢„ĮšßĪYØÆ«ŸpĢ$m¦ō_ž7‘µžų-¬šĆĀCł±Z^ožb”¼¢¼ś HśŌ @“’Y †4±·ė S}ī>ēƒįčŌŗÖԈJęoЬčD/ˆc!hA×j™øX˜ÓD’±é’x¹®}OÜ1O”9™|į€ÓŻ Ą_`U€čŅq”™ €~z‰`*É+ÆGQĻ1žøl–åĻļ!2Lšg÷a(ƒNłß4f;Łq¶ŒmĒJ…œC–ØxÖ¼āŁ8B eٲźųĀNķe½8ŗ{h“IsIXĎ×ĖĀeųõoL”ų3b` 0ŗ¢éA­|rø/µ@Ēya[`>Lšµ.Ve×€_ڱ§Ś}TŲZ“³ÕZä‡x…`Ž®"€}ž Õ azŪļ±-›.1…w/Į©Ÿ™dtā¦|6ÆOŖœÆ§qC6ƒE’®¹‹gxؐä_[Ų|,<Ćł¦® Ķ€žLØ|’¬ęČ'­<Üx’„Ō«ŸK²#bAsįR“Ä͊į0tÅ7Įp$šĄēŌ×Q˜]A—‡Ū!5 ƒc€UøĢē_“½HāH“•,Éæ²ξ›JąUūZÄ[¦K=»0©ā' ü/’čiąü_x  ō_Įųæš1#š?šÄūą„¾cŲ,’Ę R÷’³Ka"ŻšźzBõ³ŒŚwžO€Č€k3ĶtėE¾F_“EĮ!śƒmóųŲ£I FG×Ha€Ś†”‘)•_ęćPõJ\÷šÅģ?( —|WxdÄńA¾_†on¾'½k„®“¾‰Q+1X”Ąō\äēg‘€c ƒw?š™F.Pź$¾ŸąŚŲįÆĆtÕ·łÜ<č Læ.ļm•Œw 3ąXo­;CF2ŸÓ¦ģ›'  Ī/nŁSD‰­x©¹½ŪńKū³2\Ų1Āe?C ĆƆł'¢a”ś b±»?$Ė»R¶ß#B1ų*ń29j€gvÓŖjƒ£i–tyņåśÅYEY°†ßcśm N ŪŌ¦Öpy»ÜŁ"„ļÄŗń>kæ%>S1ł“d,k£Sė.÷xų½>Šr7Œh{ōM{žĀKųmt±Ä Q§N½ħĄrļ}ųčę+ĒQž>@ŌwÕqŠO÷ŌvéłĪRޜ‘(ŻńksŖS½&Fj¼.ūę 4Z[O°s}+”Qfu“ŲšÕe{`“²šn[ˆ cŅū,ŽØQīŲ‘J{ū!ÆÄp:³ÉāßĶ„»ó"M– *ń;āļ¦5’̹bŚĶp\ O‡÷7ß¶>܋q]UIā[7;ÕöHŚ«Ė1KŁĄM.œŻØ”ą“ØøČ÷ŠGŲJjŦ/,½ NbUqн·ĻP1BÕĖe1r!`G%Ö2Æ  Ē:­?ŠĶ*Ķ÷”1-œ[ µ 1pģUĪżĢzĶ._é¹s/ņ7ÖŁ•SŖóæ GwĘéė”×2šÄėĆq°“ÆįN`÷ęl–gš<*ś™‚£’ČfD“×(ŹOÓLZ9ņ&ļb-ü?œ¤1Ī„ŁłÓóK:Ėā܍i¾ė¶€’­‹|jŻ)DvŸ Sé\ĒćŖKlŃg¶øŃŌü'W¬‚qvo¢Æž“­*{K‰Lē·” ØæŃ¾£ żwˆ…mŒŠŽ²Š. LčÅuāk\ĀJęc&fڈYo`Ś}źÜeŻ*«ūŅdŚKx5g¶G`b†{4hŸēšŸ&N'_5õ:jhuģ"„Ö{t·™ÅØ潎ĢTķ¼vܝŽ NŃøŻf˜ÖOūī(\°ēćÄ9M¢ÅįĪ]œė߅~ĻÄaņų“ļ˜ŅÅ ÉRŚ‚ó”' ž›×ÆV'ž$)w¤8Q3öfB9åLŽX>zÅæć2'œ­×ņ±+²§‡mśŠtĀ3×ĆMĒ© ƒ±‚eĶ2«Yj7’+‰|łÜī°ĆL„ŃL•q)19²ĢżHNĶ(róĒ«DP=Ō…œ£Aļfˆ·Öē'•”šŃżƒō‚ī€āŠ‹k_Ó29œÓéĢÆ• |ø¬ ‚5öšĄ„lƒčģAYģ’ć‹§IVõT×þÆķÄÜOČ„3”„Ż]†aėčļy‘æ^·2•nķįŗ•~¼"4ł«Ć[Ÿš¶g]ōLUy® øĖį²ē9~±ŠØ×c!&ķłVXć8(¢ü6aS8AæŲp§žÓg Üß(vø²ي*ųĻYå»+}w°™€ĆOe”ĻĢ“’'Ł5ż#s¹o>¦¬°$fõ‹_€ķ©6ŹsøU-ĪßdSjĶvņuQłŠ˜īŃFŗņŪŚ‘bE·3¦Öikz ZR/7߁D„ÉU“m“;šŌ³KĢ TŽ›Ö/gxU3x}Œ• Ģnł#ĆĢę}4Jɾżg°]Ø®ŹŃ'ØŲŗ•dćjJG“Į‚Żo W–Z…ÕG-r†rMĻąČh޳fئ¹}ا6üW©üå˜3Üā2?ėIq՗¦UĶV/Q™'`¾†®0hÕD‚?¤S³ż#FI4dóÅ`-ySŃN¾ŹéØ6Ŗ§Čƒß1n+p$± ׎ļÓM÷=‰vTįO”­ÜFq|»|¶”KRźCšŹfŹXׄųŻøDĪr›#ĶŖyb›OcÄÅÉ$ā°Ö ٘ł•öŚæåANŚĻņ+EĄŖ(£to„ø’•x<®I¦“ ga3ē}q×’–‘_1•Eœ‡8¦Ē…P ¹Čš”J |ūƚ®NS1Gűz‰2’“(‚¾Ó:äJĘ÷eåAP¶Īv2łĖÅoVÜ/>%ڌ²ā69ćz™ćlE£ĒTŌüqĻ/ĀłYyfƒč8,Ž_ęrhépųjķ£Ģ+ķ›h 5Å9„·’=¶˜ 1É1ŹųGß@ē ēqM·ŚŅå?Ĉ!gW^tT7IT‹° § šSl84ĮE Ę[r)į-¾tŌ³>`÷r+O›s³Öfb² /Sæ“ŁĪŖ¶Ŗ$Ü@yŸ‰5¤ˆD}ŽĀ³jųuŒ› V½·ļŅ|iĻŌrI%tėĢšĆŁz~ņLhčN¢¦_‹¾¤(np¶uLē*ń0ĪÉ“A”[oü7ź#č3Zś_ēĀ^ęQŌ‡ Ó¦t‚†·ļp4æĘO˜ @ؘe¼šŗ’b‰1q½ó‡%ęś2įgŒŠńĘēŅē²ŚjJ éϧsī˜Ż®+z„÷”°€ā8ABļ&"¶£ņ‡śõ(6śā•*ˆd÷ŲE24u(h˜(ĒšH§Šõø3€k•“š¹Am (ƁäUoÄ3Āõ˱&ÖĮf«ī¼¹R ¬¹+{eMTĀ+ų—Čęß"¦œˆr‹>ń¦YžŻźraM‚Vt%;4›Ļ®Żb3޲ÜŪ.Ę}š”‘-g•¹Æ°¶m‰‚ėóćÆ[H¦ ¬ļWźź'ŗ’‹Ģhg ægj?ł§^D‚O±QŗåĆJ |TķūėļF£‰ę$fta­ā˜ɤ(HJks¾ ĘQdi’"`*ģų!ĒA³ļ.殜hæbóĖ”ä- –^«œœĻŽ0;ėrtærSĄ[źnƒ«Ćųį{!SĀ­yćuö#ÖF°ś$®5 ķž &Øe†‰žü|ÓHՃ‘č_³&Ś?Y{;ĪüīĢėEńŌČÉgX”޵-Š޳ŗŽ-…ه¢ž±—Ŗ¬}•słoH­‰—Ņžū†±ż0”“‚’ho „ędģ²w‘^Q3ī`‘Ž×)'’ɉU(Ƶņæ=µ-ł®€sĖ0,XŠ®AĪzæ-y&Æ7#nߢ™m—æ¶™ Å· 鄃^ Ō¼±Kc7 Ņ$īŅ£āŠży,o©ųA<™—J™:šåDķpŒėŃÖ¢_}4Sąo¶Ņ— «’ ī"LŅ?QmWC²Ļ”·r'QĻ0Ó²k­Ż²t甁¶1‘ękK*ę'Ž@W"±“]“6]f‡ŖlkrcT[±J!˜u£]bl“ģÕß2N(ß ’’kŁ!ŽšÅAõÉ¢ÓŁ0˜Č%ųĢ^ėónšéŻöķŪ²3”|ć²6rÆPh{$k”L ᣠIK†"iåÉoĀf[¢ź„6±&÷ ¾¤āæ;ŽīrO@Ą®½¢ĪĘY:db¦k9¶wŃĢčļ$”5āȖ.}l¢ÖśÖš÷]Ņ¢Dē÷Ął|WÆqЊĘ6 ŚfŠŁ‘w«Ķ:IČ7 Źōr‡02“ŗĀ*ÉŹ¦•“,”Åā_xųoszā˜ĒūĶZu=.‡#‘µ,¾ė"õ_śųÉ®š3Sł10Źöæ@Ē~F2“Ī_¤äüuV— d*NœŲ}õõśS°p’Œģr¤f -IĘ響‹> m] ^}4©(]ĘO~é„L½ć [ވfhĘÄ+¶:ģåéB[U4‚L13wŽrLŃśŃ|¢¬‘%&®gćŒßĀ `mŻ:„ˆ¦8µ’ķ9¢AQ_ÅZÜŗ\9 Ō£"óėžÉ¬’‰Īæ$—m}’ØźęžF…XS #Ouw u /ŗ .;¢Ö€«Cmų Ł¶3hKCަ‚QcŖA½mė¬ŅmA²‡Sv“o54„‡åę·ī9 ÖYöş$<Ė}ĮTÖ“Ź*Ų;æ)#zo»nNŠń*˜gVÅįGjņO]pPÉž&4•~ČKNõy•¦ĪŹ$D€hż±¬ÖT+ļwbĘ1äņžSd ūRlõg,śO$ć#‘ƒčbś\­ōGĆ“k“šŪŌżĪŠėČs‡÷ĶTcŅ‚ŃĀę_Ļõ;7ęKo«1iyGEĮŖćGEv;Æokšhģ¼”ū±”üĻ,Xøøŗę8s/›ņÓ&ĖX®ėńO0š§ż®6O }Sƒ½rę—N³Ķžģi§óo½_—„GŪ ž_ßŪlC·Ó_¼DwƄ„œč»Ķ%}Ģэ§v؂Ec7Åń‹¾X“±ACD“@Ć Ō`}L¶–|m½`÷ŲµµĀ™³<˜`p»#ā$\ŠģżŒ®[°)&>¼){öĶARpÉaܙzįé¶QĄ!¶ß¢8ź>l2 ų^®Č+Iæ3);V &UY~$żŸ¹į ­¾]­ō?ā/ ›|/‘×÷ėł@¤źLQZ_ÜSV5łĢČNˆrÓz ?3–S˚zjź¢˜ōŠū #KhūÓŅ1Ōˇ»n’HåóŽŲII6" T(˜Ų­d‰S ¹=ĀW~·Å‰®J,Xx”źiõ…ŠWq¼&Ł>ŖĒ_ įEķ”=} ėg%9k“rČ~®EŞśĢ2#Ź,Ś=p įōš›=q åĢaÆ?¦½"€ģĄ?4¶ ō ę¶¤@—•,ō÷džDĖ«­é?źŻĮŚČÅé™8zVN|zš0‹‹nģyՌR~’ŁĄ¢OŚ"š†©gŗÅL6E³“‡å 6"eЉ£½śbāāŌ\ĢÄėŪ?F±“¾æŖČ{ü‰ƒĶ>Ź+Ū3{›½äUci­Ū+*8÷‚(ˆ a)§, œü\Ŗ| – b} jėenģEŽśā’HX-q /kzn×GäĶ5,¹P,Ń&ŻĢv£K@Æēv×7˜I—„½Ę‰0÷ĆA}p±|×čBT¶‘¦Üró­›n&kŒĻļaRšÕ —ąĶ`‰Ŗ|›Œ†Ø“­Ū½“åČ4ŽęL.ęÖlKC¾ļs[CAŁ÷Ÿ¬Ń"Ž)tĢp×’ś ó«f² ÷,r˜š‘]›œ¤¤µĄŸ„ōs+£ –¼ĢĄ%GØgȖR¬n‹PÆ^ø.PßōŸJŖÉü dR`s/.PÓ×é=„ēęś­j2znš|‚,¢[>¬Ų0‹QEK›°_öļµ×ö”Ņ@ś2D„Īl'‹ĮxćłKŲŪ–z7ݦķ$‰Č:H÷ xź# >¼•Üpö•Ń|ń üēZe SĶUK’ž×ē#Œkēq„Ŗé&ŚķYüØ”]¶fĄPąĖį«•œ]d®;B„u”šŠ¦gė×Ŗ”Žź3ó4WćYŠ8ł½‚±v¤§BŒ˜É_Bt&>ø³c”É.Q*(•pņsĄb_‡µŃŒįp”Ø3Ÿ¼ešŗwŒØ1]ߎ\_¤Jmé.H’fr'ĘåżŻūƒ¾3¢KŪ ĻL:cœB®lCä8ʐ7öł¾: v—bBØQ)**ަ¹!ŁŪņģĖõ ަ\ĢoöU[ŅĪ2֑p˜?µ²<īŚ±”2XSUūĒÆ'€å«ä_q+§×d³)Ł"¤ü}Ūƒ¾lEgßT8®TÉßcßv Ųö S ū[RY‰¤WĪenŖ>Ļ‹f¹·ƒė÷LK9čć&4|¦āA×}Ī÷±M9\“XŽ>UYĀżPü% ¾ż«“Ä-;™„°ķ;­6›0b+Čö1MlŲnŒĖe9«āŻūŻ„JsW”Š•ēøØnÕ{VdL5‹[X£UćĮĘn.(=M2tŽ)üÖąž'@Oµ@ńÄŌK£v Ž1Tš…ŲĪÕ*•o»?Ž rÕ²ül»#™¤Ś¦ņęho|”S= mŠé`“—o‚w+Mɜ©Īā¤&ÄaX„Ü]­ć«š³ø)Œ“øBģ¼ŽG>ć¦Å}Ż™¶Ų ź`Ā|nSQmŖ Š@|©QIŁ·b~>öÄŅ2FS™üéĻk”cyŖy¹L»ąąkN€ćė}ddŠF¤ēz(l%Ē„fż|ļeĶÉ`+-}Fayœö) ”ĖĪՅ|lė÷Mµs½­OaS Ø Šņķ8'Lw/…Ą $­¢ņ¬}ē#sóH=¼7)EftŗSÉSzĆĘŖś ščć›VĖN‘@Ģšr‹t[Y÷>ś5Øv„U]i곥ŅĢ@­¤'?ňgsœr‡Ś@pƒ¶‹ŸSŻČkB„VMœ¾Lģe¶óŌü°G&šūõm$ĖŚÅż&œ[ś™GgæI7§_»©ĻŸ-Õøé7ćPü2ą‡ĢœJ•yĘwOņ Ÿ1éO +Wnuö@ó”6n’HUÖ:±«ÄĶ…ļ—ųģ†;•GBqBßEi«Yi Ńń³ūæGųz¶˜SśīŪFÉ+°żOó·5® ;ƒŒ$é²}/‰]Ń>cū@šÜWO¢ÄõéĢU¹N Œić©w‘b}7Ÿ]{=2›·/¹ 0–B:šĪ|=凤2'ś°|c6'“…8<:‹ō"%®F“žCRBłRŽŖėį‘6 Z2„&ET.óśUY€ ćyŽw;~"’§ÖŖhś]¦JIYV8xߌÆŅv½Š±…ØJ5ōyū>Ÿ%”G*ru%xūŚ®ųĒ1ĄX_7åwŃNcįÆųéüŒ§_­«Jč”Ūq5¶„G+¢^1AŁi –Ę8å#`‡ šįb^6Ā®•ź•XćØL ŒįęŻõöøCĄ ¶EsĻ·śģr­ĢŲÕėēÅāHüf˜ī~}W-˜…·3÷Ļ“5V`įåH!©øx„±¦ņ38÷C‘®=žwEķūė¾!ŪYœ•bØõ+I¼SĆĘVėCĘD3äŁßŒ”Ø“é±<Æcx¬‹«'õ @Ćf-³n×"‰ār<š·ö!”µMąšØöęVó Č6Ē…•Źähv¦e澚‹ĢŠ*½oAŒ©Ä½4/3Õßv|Ö+‚zu8o?M}•8@øAŒé;ZS‹œY>ƒ¾'I]!p¬ė¢²ō…zčyNwØiV;ēɘżĮõ³ž®s|R}mVD|<ļ…Yž‹żb§^{ Xęå«e‰w÷vŃbĘ=/Ȋ8ŖÆRxa/ *ŚHaløłś¦Ž üÓI³Ę½Ōezeodļ“DĢ5LŽĀĪÆFÉ!ś õrŌANī„ÓȒ<åļ’˻ȭ>$d¬Ld‹!Äō1hKNīʰ“°œÆžńY B|PYŲ¬čŠ•Ńa…]…„cc[ĀČæÕrĒē|¹RžįlŁ»'‚ŽD#\¤Š8ėggéįØć„]Ī敎•IÓH,–3'AÅļŠÕę2åIśÆr—Ķwæ@›1`:ŃE”ȢØÜ##n%Fy˜M£­õþ²>¤ź°SØz[±¬o±‹›‚Ž¢®ŅUē¦pņ…pŽNŸĢĆĒRÓuł^A‘į< GxķīɇłQ$ų†**{&Ōõ;h‹L,Ķ1°M֌'1†.„ō'c·™5•įQ CvTÄN<pńÓ“Ś ‚Ō»Ł~ {sqÉżK°d|¶œžćuŅ摉FJLō¬ˆµ`ž‚•hš»_0ÜÖĢpį–6:,µ„zŻJ1Iņ!ÄD~ļöÄ4']šü„Škb±ŹfF9E®_ŠCŗĘB…ĮŠ E‘ÅńØ©‹Äŗ‚Įē_æ•\0fi4é0A ¼æÜæ] vÜC¹_t>wqŠM²_š6·hć5’Ģdł5aÕҾż ū»”Üó!M—D£j.wįŲÉ.rļŹ(%œ™¼µbO Œ«oD°Ēį(ü>śŹFÉī÷īŁŸāōŠŻĘĪR`ÜŠfWa†żrHĆu+»ē3ż¦±£Ć]¶*±BYĶnóE¾1iĒøŸjĄäśŃöĻNx\ŽnøĀĶ8=˜4=¾¤÷7EŽ,ŚŽ(FāLšäĆć…8(£"ÉRe= ć|‘­9Kü<“ﳤ¢lL?¤wdš!h6ŲĀR%6R0ÉPEĘjó]ö†3beö(ęįc Ōņį…ŗé=]!3¶-9iĒGŠ­Į~$„ÕÄčŖÉ{“”ł{ē+“ŁĻĒu>/ž %«pėAeųEWō`³j:Q0Ī~!°’Žįt‡ F*mSgōV”Ģ­å/””¢–ÕÆøÆÕ3†ź@D>3%‚óqD÷ÅQy˜NćĒ0Ļ¢ §okTw“ ˜øļ~ZCA_zŻ‚×ŸŽ¼SJœŖÆv–žĪӓa'ŅŠü©Yž4&žž¶ØCA. 5ž‰Yü‡ŽĀīABŚążÖ#)„ÓźŪÄ mÉ;Ķ€%Š W‘°ĒĒtÓų:V®ėŽśt—^Ē*{ģŖ“øw’§}ŸŃ<—š¤~n\įŽ ÄĖÄmŃįz't,!3“5‹Œ­ą•vtMDĮʊUę;\^M}~‘Ś•żełßs™¤|3Š9åS‹rŒ‘č4ńÖ'Žv ©ÆF§āŗ4¢¢®BŽŻŽģšĆ"ł›‹~¾Ņ÷ąūƍĆ9 _WĀńń ”k*ęŚųÓ‹äKFM3š.¾"kŖ(ļ%yŠ}}ą±Zß÷čj1…[ŃÉŖ³ÄĄB¼.Čī8ćšĢ˹É%ĶfCåėķ8žC’š‰m‘8%€ō"žb“‰õ1®Ģu=KA¾›ĄÆŒµfĢ2Œ¢Bžģˆ`ŖÕO'į*ü"ĮšŌž˜‚eNlQćåļŻ’XĶŽŖ^įĖą‹nˈČż7ąxDvNoÉ#Ņ„Rä²ŅśU£ō?ż³‚ĮÓµ3›6»§… •Ķ(ޚĀqքķŻf“ĒóMśxMķtšX7¶ųŗėžēĮŽŁÕrŅMó ®č-Ŗ$t/‡•£AmtFm!†x˜˜’œčžtm0ĄÕŗ{'zĢX£ßšüÕ<+~+™ūŚ;QŒ…“’ĻGÜ.uSjė·üøÖ,Ų=Y—½łEqŖ QüŠrL;Ģ ŁÓ8ķč= Å©:SŁ‘„™z€Ūä`¹ļXԐDV°8XgNj’"敾Wæ¢J‚Q³¾Īo„Øś†Z„„PŲĢŖ^E—yFJxt•€÷½ ėkćõ8)¦ā—°„«U?nX$CFœör„,Ū5‘%¾ėWlœŅ®'@‘µYü¢ 9FĮ1éCē­½äVˆ;šNÉ}Ūq“%^A^ AIžĖ¹ Ū"1ųżŲ†ķ·w%üHü±÷ƒ4żŚ‡PĮ®lN{…TP7±\÷ė©h725¼Z½“©ēYEŻFÖ'ÆfąĄ¦eĮÄa§¤%=’ i¤·ĮUO± Øų·SžæĒę/Ļpt˜(ńuåāDz®ķZ!9N•O1¢æĖ‰ŻōFŹn ¼’%Å%yOXaŌäėB[õ|‚‰IĆž6Sö²ÓwŽ]ŽÓ ģ_—ט½ļ*TUÓH·Z|Óö󮆣Éꊮ¬ć’™~[’å@ʄuEģŲ:ˆš¢ķyYŠŒŒ+šĮNĀvč,cŸV’ąöiŒJŅźrā°FœÅÄA&g'_+ÆvoćÆźśļų喖µ©ĻļmUß9ųŒŻŃO(¼”ī9‹y`)_^a‚¦PŪ•f::;ć„ČÅ~NĘ(ą3a&4 cĶń ”ęĪ" o0Ķ›JÅUT'ØČ]š+ѱ—wņčŠQ)¶zhļOI)÷·§^E—0Ęacæģ„0Å6ĀPgŪ#L3 ęf{ĆÉą”hgO‡ę½ĘįHųn­v„ V ”oŽC…—IųY"’{–&³Š©"H¬4CŖŠOÖL2įjÄ® ‘TC,Hß· 'ąŁ?Ŗr!öł\F9ŽÜY¬čƒ‚š%żį±‹ß‡§>>Šqł>:Kųb±k‘kDbZZōśE Ļp1)ʬѦļ›4A†­UåÉ)¤"ÆÓ˜.R8ķ¼Ał¢t*ĒÖ¹®5‘ÜŃ_¼čš’ĮzÄDSŽ–Ä,s–2`śµ”ę“JŒQš/wė(ĀŁź’' äN”<\”·Lü Ž yĖņ‘Ķ¢kIUśa9ųń$4n2†{˜Ō7:Ę(§ĆŃM!hü3Ć^k”˜č_Ū–õeżgYkāsĆ13žš9€…H:‰ß¬ e©ClO;ŠķĶŚdŠņ—Ķ$‰²|h“£R½¶æb.ͱ.ńt½źUwDuŚd;ü$k’ €rÖƒ1åj^½Œ3©~U±²Ø&ō¤'‹fą¦^ˆĆGM9NAӛą7ŖNūŖik ŸĀ°0¾“ś{^PuåōҰ(.ČkH^Ę g’æ«E—‹ ©•dģ³ā'PĻŽÆ U±ÜTŒ²iś¦Œ ’6>\˜Æp;mdFŹ›3v>kÆį3M=»Ō³Jɛ_ŸĘžˆ©ć™Ō/«T_Hä|%õBOŸ,FT{#›`c„Ćbü²3xūóGńL¬bŒiģ|Nx]źxbLƒAÜ]Ųą"Åb€,#öGLVŪ:j|6ķ./' ģWß°R1Ł ōłĆ]Łó k¾ė&&P/”%‘6ž–}Yš÷<7įŲd ä_;‘nŸhĢEĀøO½™Šä’æŸ3>.y¬|#xXwŃR·6Y v$Ą'T­¹īĀÅŅVŻY`>ЧзœŲ²°ÄøE_仆[5ŸPZär»Ś~8u”öČ–Īž·.H]e ަ¹ž“±ļ‹e)åźģųlń2øD]=‘F ŸKUr45I§£MjŅéĻŃčä˜iäMŠL‰ßļ•®tŹķmĆĖ+§|·š•p¾Ų8»ŹÕŋ€¹?‰# Քæ"Üś’Č'( ‘"Œ¬2š¤AĒŠÄ‘ķ?„ĶļŠ0õ×īs­½śņh§Œżv“ü9C5ļŹmŠÕ[źU„Ó ßo³Œ>ēĀ’GŲ»åķõŗ1+„ž‰L±ü]Ņ”ūÕ·uOɰ1.Q“CŌ‹2ŪØ¾ ś×ōŻT—˜•ž?;žZ šš„£Ī¦^U> »ć‹5cŒ ‡>KBŽŻläµŖ"‡ębā:īĒ ±h{C’¶Ļ_¶cØ 1¼Į¶eü² YĻ@.9źüźź[×SF†rGˆ‘߉9éēī,¦‚‹Ģ¹¶GĘpWI×R U\†2… Cg!ē1d6Ģ[M‰nńż™8Ļ’>šįøRmE¶ß0Ę-ŠZĀ#ö*^lē¶]0ƒ°.ˆÖŃźŃ §kP}«xŸóķß@‘¹¹ļtYČņ"¬düN˜åŹšš˜$YFC@¹­yC“ē/ŅŗÉēEæŽöłÜh‰_Kj;*«Ę/a85dž£°b×GAfæ¦Ųnj“fZN.É×ÄS<³žŠ‘Ķ„Sܔ©ƒ3Ģ<9Ļջ؎p›üņUWßM’‰‘ęhæ˜^P®ĪÆRą‡© ÷9Ī —±eįȊ €I/üāó½Ö,ż[€é‹ÆHe§S‘t+…õåļ-¦‹ffoĒĢvD Ą„ŃdŅ¢Ā? ŒL tõÅā¶ĶĮ UĖE9•ĆFę>}æīćéć×Ŗū\Eń”ÅĆx›A~ƒņ'ā8ĄŅ-d$åķC©Å?‰ŃŹ 7Kw”žM}šÉ·ź»bÖØõŒZ6£+IjŽĀhü9sb[…ŖOn;'Ķ’Ÿ—„’Łw?‡„ž„ŁtO•@\XAc÷Ē3F)Īo+M¼=JčSåūp‘iå°4]* [Č7Sņø—XŽE^`āÆÓ£Yė§h;zµŲuYx¼ Z}Ke†Ÿ÷9°ą0éüćwļÅą‚‘؉M¾ O§ ū:8ĀłR÷W’ę±ĒŌU<¹r8&×` ŠÉKU޲–2-;ÉÅt§[ Œ\āzæd~ØO‹œ3×¹ŒO\ƀä&}ųH£’ö‘yĢ£ZˆK¹ųżn²1zń:Ü’ā;+ī;Į©‘Óa[tkMĻk”mtɼ9Õ.Š?Ą‹Ļį •Ü°%;IP’xYµDĢ5^mVŽÕK‡ ü‹ŽwVīOŒķ&*śrˆfa‘ø>eŗ`Žj˹qqėÉŪZ‰Ē[|Ūčō# f9p¤ń”É $ž{Ół EžÓsGŲ¦#3F“N’°5Č4%„é}\Š“Oä8~ŅCÖnX}ęžkHöńĮØ˜źœŠ1mo#Ŗl÷9ĀßųŌįŲ/aˆe9ėP™ĖłĶv2ŅŲł‚)ßņxĄ@,¶3릃Yhi9Ö ¾=‡ ń‡jŗ©†yŖÄēŽ<ŚJŽ` £·jEeöŲ¹®ŅÅ]ŠC·Øźy×z˜ Ö@|©ŗļĀ,t—Š”ƒĘóč³;ŹDR:yZ[*Żŗ+6Lv]jS$$¹MAųæš…®µ„¦IędIŃ:ÉZąĶ„ļ¦;.H`ŁklY¶Į)ØżR0¬J+J<„ū£hdZĮ¹J¶sØn܍“į5CŪHDĪŁvǁ -1hąš-óŁ#­Ū5’ĮŁ2ŽŻāŪ=éžd‹˜Ģ2÷JTžėķ Z&Œ÷ņœŒiėÕzéŖ[‘pįˆNW£ YÓ’®¼L’š©@8iŽŠ}@`_³bz[[*EhšEŒĀw‹M”ŲaŠZ~p9Ķ[„f$ ÓGy–¦w(‰·j)ąōŁcóPU9=°Y&ošAōUæ¤ā*{µöżśū|ÆčŽŻ&Œč£?F¼ˆAŲŠ9øó˜—Źäm9õÜą’4÷ÜŗÆ#+ųŁ‹C”“ļ\…rWR§Uä4Ӄ9{P©©ØŹ4dŻPtB/B1œĒŗ<’z„E±6ÉVUwįQštIs”ƒ„©K󱍿w„Į“DW*(ŸØĄe–* hY »š}¼Ę§r`cė$ŪR“Š*h D¼h²Mqa]£Ä"Fk.ÉX;Ī–ČŠ¾/ęß5½3šĢd•Ķ”–.˰ū}ķu­&č÷ĪÆĮģ|¼ĮŹĢ¼Ļśåg ‚“čQ†µLA(aWM5€„Ē1ė¤LÜmäl½=31sĀūŽf)Ēc{F4‘ēwe݊é€č\;•+q"šÄp5G’«l[CĆäā"(ŻI"¦A»ėY„3…Š^­Aü8"ĘšhCz¬wųZŹ+šį\Z杆ł]±nyĀ…tźx<į»tм꺪5Ŗż/}5§Ńæćņ„gž ¾ķ\?-Æ5[•ÕDŸ³2CŃ7h[Ł> ÄσÓavϘ¢]­”Ž×ž¼ŪqK“ŹėPN›™Eóäģ|ń¤ņ®į¤u9°¬J޵ „ņ»K’VDŖ=ø<„aYr-ż7{ė5D.Ō>sĶDi6÷W5ćeõ¦`" ņƒBu°ż™s„f3’†"õ“UÓŃŗō‰ĄŸ€™ó“pƒēæ…¶P2ǚ“|#Ī“Ļ #ćŪīĶ}åśD"ł½MĪXö]ŗy£ĮŃa=»ķˆ&³)^ĒčQwéRƒ„*%¤HyĮ=ĄĪ S3x%ҐP©«Nó{4īn’PT¬–†§)Ćō—¶ĢN€iŅŁ[FJęųė¦4šī†DŅ`SœōՍeĆŅõF½#Ń*£ Z݆%m©Ó£[īmØX$1KßåēŒAė  Jtvt“7:¼žįĢuž5ĆŚr‰ÖrųŠ=mk Ā5Ž× т„ļ)źęØ!ōūš¼EģB4ŽÖIh½“ķčn§UTnī\&DČ6_Į¦°Ż ļÜĒ–{4‰‚ Æ•J7‡å™““SėnŅ”Į‘Ӎœßīm{]Qŗ8Šį“ŸųEž¦™HÜF“ģ²ēĮm;ēŚāB-J¬°·čH4_įåž!@ĻYˆżų‡¼=¼×HEäŅ 'ŏ”R¦±…?»ßn}śŹĘåŚ /±AńŖ’fC}€_»‰²2ŻŒzÖ~ņĶō X0uØč"͈yŽ<³¦ŪJ›yV“K³2 ś›™@Ja˜.`ōQożķD N‚ÉC>g™‰ā®ļ /R2öāē®Y#Ā!ÉxVŗzX'`ź:=™Ü&N2ūN}–‰U_/'ŁŻČ 36i›īö–ģąP2k0C^Äq ®…»~6Rљz€®)^-‹utß¶čĒ­˜G5ŚH_=4»«Ŗn\ł[ ¬iDųk“÷ŸZі'Å_öBU¹˜Ę4ČOŅtå+*™ŸéԌ½%–“+>ų¢Z4®:ĖZÜ)SÖńgW™øˆ¬™ĖäŽZŻ GĒ|Uā°GŁ«9Ņ>Ģb0/ė=ń×ōģVšĶp…öäęŸĘ`ŽJ6žüų¾Ā§#Œtć5Čsõ×ĆF«M„)[ƒŻĆßO@ 5”ÅøY¬ƒnßtūÕ Ä±±nųŽEõ=³lv/ØŹ5ŗł#g“žJgkÕxŻzø; —Ćüüš•U!Ö¤!ŽŃmņ>‹UīÕmš±ia5!+ŚĀ£ģAāŠ)hH߆žp‘ų–1N0m±,®Ėjx§u¾śh2ż*Ųž{p÷‡ÖŲT ćT÷Œ[R/l¶U€tŗ{Y6Ź’ęŽfĖG„§å榯³DÉ©ÓWTpæ&\–‰‰wŪg›oD­ęDƒ{y?Ģé¹L~3ś31{Čśh˜‡FYr’;š&’rˆĢ6ā7ÜTžą«QxįcŪC½˜²:•ī͟„z. [,™p<vøcÅ«DČŻõŃā!9²¤ˆ­½2ņ`Q<~’+™‡.’B¶ąa;m ö1 øļ×5Źūˆ<Š3ĶūśUyƒP¤>¢tcf?7…•ŸÕ ļĘv•ö5ä8‰šÖÕ'B«Ū^ėźoŹ×]œ®‘Pou¬!ĮPhØ.‡P•āb9Ćé׏øę»ģgt ¶uĢõauÓdhd+>̃"£GµŸ€ó~ ÅD[Sęµ¼[,ö¤Õ®ˆ^ƒĒxKxüB8²T0E·\™>IļŹ(m/øĖS\A‡Š]\nā}gę(]Ikź,Jf*IH¼ ż sb®ü¢ž¶h‘ĻŽ–ʁÉSšÉ¦ Ø/SgkŪļ“zeĢ/oO‚I-Y•Ē™ 鮺æCUūŠrš! såÕ|l5¦ĶŃĀH’ģ½ ć’Ō‡mNMZKłƒ-:»ę cmęä䶆ҹ¤éČ+Z—׏9ø|]Ōł«ņ9ßĒ'Ą?壨±*2,–8kņ«ŻX*w@ŸćEč€UódĘø)½N}ą¦|뾦w\圍R¹ÜĖ€ļĘĆ8Wźw}™ą™ š\ļUš”t˜ḧĮ¶źżœĢµéQ“béō/^8¹ąĆ|4k”Ē"×ĆĘFČłæBšń\ĻńčŽ^O²ŒźeeœxIŠÓ¹,{T|ĶDn‘N¢~øŽČĒKg’€Ģ«Ž#Ķf¤`Ļ«T6(Åćķ<ĄiUü`½žUPFßāJøS²ß÷š#ˆÓešń e:ä4Ęó»–spjS±MÓ«u©iqfÖė¹92 ō{d°GEp½J’Źżć`7|–YēϽåIÅ;K/`āS¬ķUźø›eŒķkŌZcĪUÓʀwżMJ!%@*.Žd½%ž±śŖŹ/MѬ€›Ó^^OŚ.īęYO¦X•ÕL÷ź[Šą{„¼I¤ž1EŒŅ³ŽjčƒgĖēx÷AC`rKˆ›Ą|ĪŗFå[cĒ œ²”ģėā?‚Fµ§įfČŅõs©‘p¦5ŠøŪįxp)ž€ŅŸŗ¾"tgÆyžEįµ\źŖ³‡÷ŪĪ-‰”?ļ¼>ĖŹż²P:}lĀ!Ć]/’ē|žĘö¶8MgĒ'ķj÷$ˆ¾œ4Õ:”B,I#;ÖÉ3X4—£ćēÄtĄ0£Å,ĄŖÄÆQŻõy–O ÷¾č ÅŅŹī%^ 6Ö’—#) ×±ž;ŗvü# ½ŲßG¬"-A]µ1źm_ūXxÓO‘—Œ^Uć·LŪ¬ÄMŠgҒɱ\§ā’ŽzŽc$Ćé„ö:yUł«ÕŠ„D¹ŗˆ)žĪ1¹“éĆĖ%ĪȱpōqĶŅ ŽWš” 5&–ĆŹėįŪH’ŗžiL°.č/ēž"V  ż¦q3K fĻ‰ŃŸ9XŌbøØhü=O»ßײY‚¦uń—*)NĪÖøÆF‡Ņ"æqķ\øķćÓ÷Ś`a¢eĖ[h–="ūņTīĢwö³;]-Ł£6b88±Ūūƒ!ZƒaõĶJeć2S Åż’#™`žģćčŃC›śÜ1² äüÅ£R«½©+™:uH‚æWv¶ŗEĮ> š %^ćkĘL–”sv ø ™aā>ÆµŽŸruӊĻõm蓟'ŖĘ€C—¹˜U U2‡•5ĶU˜n æŪóéo’z“va!-ü·(Œcq‰0ŗĀݾæĶuŁā­īwł~ą{–hŻ®++p,m—¦˜‘»WēłB52»å­ś˜|}}­“¹r<ķ³]Õ'G÷ĄĘv\̐E©u<°<ؙė€® CÄöŃ˜IŖ©T?Wč§p§‰|pwi@9+1—dküĢ\QSPÄŁZÜ֕KĆnjt“c„õmŗ9äS²IĢŠ¦®‹‹"¢åŽ»ÆŠ1ŗ[é~J &ÄrZR*ŚvaöĒĪ1(ĒMO|¢ÕŁg¶'äo$ScģŲĖža¢UW`q˜Ķ^Ų³©¹:®-jĶ~Ia~*«—Ø’Žī›ĄŲš2HŁkÕl„poA­B5aĘTŠę&FōŒĒ+B˜„/” %ū7¬ĢŲDģŠÜŪ¢U‡¤č¾rDłu½Żpéuī©“2Å€¶·VTƽ™Ķ~r:®āÆlŹM j. LJŌ»&)ę–`¦å+ØÄĶ–pĄ·”ŪüN0ąĆ‹ŽÅłvUlƒüµ’–čÅg°Énõģ…żSū¬“2Ø8žææÅ\R±c$Į©Ź`.ÅSøfĢéŌr(pŲņĄjéGÅ_ĖŹ=#åQāfŅ_]4¶°N—ĖEŁ’¤®aµĢ ĆÆ Ü/Āᆉź}?Ŗŗ ēs¤)#Žl•MŽ®ĘL³ĪEĒÆ?’Pj½xBEҤ˜ÄcduŻ9D­ü:ķыŸz°$ŗMĪC×r›t5>& BĪDŅä ŻQķÄńG-÷5ŻŻ3 R˜5, ““Mʙ1²7yå{XPv½æą6™wŒÖdj\)Īwų“ńģœd¹Ģfü<„ļĘ\Z“RF6šż”©įd ķÅß.’}Ķ\ųŲāŲĘŁUXÖØej† 9iĀ_HzGÓŹįEę}ŚÄE7VĪQ|y•”_3ĆÉ“&°Åa±jQu…z;(0łžÅz2ÜbŪ”įõˆ/’Ś£WXö%ČŁÉ]«iwxI“!źQVVÆ0±Ę˜†kŠxįaĶéŸÅ§SäĢ„‹Rįöų×Ä›†É%lG bŸŲCHפ\—ŹīŪ”ķaĪĀO¼=ųöw=`…ķjC¤ µp}„cП±ŒH$ü;^~ÅM?…¾°ņD¼Ąü“½„Ē@jĄ’Ÿ~Všö{5OŸyäŅ H$ģa8d-łG˜ų“Š$£ńu…—Ca)8^ugž×:L·‘H o-łań­ö¶©żåŽ9°¾ø”†wüļ<¹„Ž›E§~\¾¤šöĒ‚6”Ey-īß=Bbæ"ķ Pyבˆ­Š±ÖÄ mѕ+ŸųEHæź«±ŽßĖĻŁlŪv–Ś8pę!4[‚xҐåc(N›JEæ«õĀ!\‘rĮ^”žń”Ū>†ćQnWÆ51ā“$ؙ89JĻ«ŖÅl-Ä8kše“×˜ŚŁ%šł­ ²’Ó8wé[ėļŽāšžuÅF¾jóō¦K žŅHNhśö±ÓF-ĒÕQ”KYŠIÄļw'õ¼:åQė½m¶U}iZbk 9ön’żęY!.ČšĻ5|F¬-Ä c»„ļ£Öi]vĀįčAÉaV¤õ³b”t2ö@ā…ց¾į’żsBFFĀĄkšåG•4Ö7`F­Ļ-a/ł™ĒøPĘ»¼&so:ĖĘę²} Ģd [~Po=ŸŃ ƒĀŽ9É"Ÿ04•pŅÄwzõÄ·üyŌcś›ų'?Æ’"®‘Ķē#4Ž¢ģüļggR˜Q›Ģ8zb|čśł#TŲNč6[Ć7[\?åó± N]¼į_Ń8{k&ų5ü‡įĶŌĘė1¤,’µb”"I8Ļa»ŅY)M1ByŚe“'¼[mÅ Ve«Mw–l– š’‘QbfOĄhž³@ĢÅTŽxüh8ēŲėF•»ī2ŠÓ¬Äjö`$ŁŗH™-“=ühʆ9biAnkō i=ė’÷`žIāĒh2½ź³N÷Ŗcļiqę;‡¦oū¾2å}”*²ūž›ÜaĪėz˜‰ŽśQ6}MwTQå|Cä˜ģ8ƒŽo¼r=hS_׳’<€¢‡Ū1/[qĻ~»Æƒ7Q4X¶6™Łė  ģmQ'~ØåĮ ü’š“ÆŌļś¹é˜Āc¬ø(ŻfFFB.ĻLģk¼Lą<=Łf›µŲ'"u$_ŽUüķv³2E3„"4Õł#čĶ0^źó6ÆP#vUƅŌ¼8»%†Xk͠ߣ?E-±H”ż0ą}”Įˆ,öœ żN/@ ¦•Ņbę ĻHŪ`=PyńVø6ī‘÷wź˜3ü¼ēÕŠ©„ĆFz„ŪHt=*QPĒzó•.*‚B`SWœ•”m °ź·÷\ Ė®²™ Ė*傶ެ‘œuŸŠœQ)åўō£%Ī8Īw‚JX{éėŹmʼnŠ%IČ vĢ:®0Ÿģ½ö čDÕ&äT}é<‰1K‡#ŸS#Ųķ’üĶĀ7”m?KʦÅNČ`ŻĆAcĀ,PoU.¼{½ {„’ó„ż“¾+øƒ-".ŌšcIRšß —ļȚeW‹4AG#npų¼‰›/ĻPā³zóøJŻßƒÕ{»Ā¬ÆŪk“ˆ²\`øŗĀøĀīXį"„ķĢēĶb‰`4—2{Ēć¾xe®²ułˆŠ …ަL~īĢjH˜ä7½']æ;œC[¤ĻT˜ē­Ņx½ŖĪ¦ŗ„/f57yš#ē½Hę Yöᚿ‹ŽÖĻ qйmÕŒ9 ×ę篔ž‰P:}Ų€Q0“⠐]Ÿz~Ś~š+Ņņg=Q˜ćYō›ėæ=ץu„㢸ÅõJØńŽÆćGO ź¤ ²l—!–=ńDNŽå 8™ĢøļĖšmī“\ńJY'K‰“m©yą;H³¬jH!¾ÆŌLjKįåĪ#{EŅŚ3‹ °>Ÿõ~…yœķ~lļĄ>„ ĀLagxaŻĖ͊p{kzRŽų‘B×&fQ`“š6̌dN=ŃV–4y꟒ŲuQl8^ńaźIҳB†W]:gią:=÷I¼Ó,ś¬Œ…’¼ÉĪś0²šN˜”ī(7£š ÕŠāićyÓåe0k›ÆxRÆŃ«&³))š&“Ķ!”ģ„-zĄHW›mÅ|Kó’TéÄÆTB ł&{NJ½“_Q7żjXč8‰\‡†%ōWYƒõ¼Aši-q*)R¶M»ÄßÖ§ŃĘ0Ÿ€7ņōBŪŽŃqc8©fŠŠLŠrq£cTfą„žõ†F&'ä©Ī·VNØ]“—ØlsænEkDt@X„¬#iSƁpŲ²=8dó’ĆŅŽ„^žEIčó}0Z°’ŽÆš&ƒ©*höI_äf\ž!$÷!ąÆ,õņžx5ŠRķpŠ *Hūż(¶«“…*«wō>HO7ĄŠ{3eźųZFĀ‹T°&I_£ŠQĢ„Ø€żhĄƒc¾‰elę Ź'¼>!tk²Å>UwyÖŻĻ†jĮyMŒ~·ņčĶģh§ oN`s¼Bė6M’ģÆ„\=É|-¢xC“†ē»“ń1¤Vā1‡üĻ¢žÕ©ļhw Ź)zō1ģ!ˆ@žŒńGk‰A”ŲļĘf©mU¶p.LBŒOØ’­"Źž¾˜5ĪD:!A ē÷\dpž¾*šBC’tÄĮÕO¢(ō/“ )±[‘yŽgvčbKX(ę «”äUtŸĘ7IĆM'²ĒØÉÜśų±ėó›ń%Q0„śgč÷ßFiŠƒßHé Ę‚’”6©čüÖ\õžµ¢Š ¶Ÿ! [É1V`y™™gęēķy ń±āŒöU±ĄŽ±E/n.ż‘R¼s_'mŒQĮ;|ĄCĘśG8kķķhuŒ½čŲēƒSĦ»m„.ūīoń“T`8³œ”éļž.C!µ«œr‚”tĀKŌŪ3LfŖ°”Ž5ŖuSÖö›¦(Ž c‹å&žģ…:ż ,j·Y…Ó×pmé6& ¤š“AšŪ’ō|ĆRź.[K…‘{6*ÅĖŠrŠxhÜü7žV4¬c~x¼4&^Ųp9äü­&W/:Nūع‹ žBfä>‡„DQd÷§ˆ:zŽQXÕ5ł,«Ą4:hŗē£VäŠį¬‹?}—f+)č žżö…•ĀߖdĢŁp³ŌBĒ—Ūa(α)"ĪOR̳hA”¦¼˜ĖĻó)ĻɾŅżLڽāĮŽą'Ҋ$“4‹yUĄ…ĪZGEpf%ƒ“ē¶äõüÕÉphĮ[Ōąu §¾#¾²¦Ū܂ śĒA;Fø|“ņ‹UśėX]č {ÆFZūQóPb.ņ hš…ęį|f&Ū`.± Õ4n½¤Jpł”S¤‚qč €«lWünŒX® WS£­?ņ.vkgdżŻd©i3dįžō·9˜Yæéŗö Ć8ՃģA&Ŗo ÆĮ¬ÆŽ±9¾™”9Ķ b±Ćś^b—5ķÜqŸqjykŠšk6Å=µć#QΧōõ(bĖ’ü=Š„ zų­hĒE_õöf𤾼,h~-Ŗ”šZō]ĶŠčueē.Ęņ„>G?R­mÅDv F*!²ŽC^²Ņaµ³ń®#K^VI'·ĶJX;ARGÄŁ9£å„š—ż\sŖ®78éB*™fMVFšˆd)Ī1ĢÅ¢råóĻN>īÓģz¼ŒlgÉu(ā&uE3¢“@Vō ūHšśHčvp(>Y|¢x^Ž—Ģ'“ž\SE-5ž6|żTĶ„É"eM‘ē”ć{½į˜Ży~>gfł™S5µT¾·E¦wV”¾žyĄs=ēEVfĆY›Š$ ®ĒÜą~^×ć¶7)š¬2[PõŽU*ī%¾ Üqž"Ń©¢$Ö“{ˆõ‘­'õ‘į]aø-Ÿ8r>ܲ%ŌLŚ&žqh °g^å§·ĒĮ~’ Dj ŽBõŒŹŁ)Ä(³XŚI–öŌ4åLčFć>Šx­•ä—K-Ū-ż2ķĖ?3^0Ś«ˆęL³gršĒ'`>KÖBž8ĶML妑g±ŪHD“~ī¦4„…ÕTķˆČjRlJ¾fŹІҽķķcĀŪ¹äĪKr˜˜A/±Œ YÆ»ŃzÕ‚Žį-huu|Ė—Ė½ŃŽėōŅäåŌ)cāžÜü§‹«)ęĻK¼ĆE¤3šąWåTĘ%ޱRŚĀøozYњŖ¦ä¶@ĪS„’=Š÷'HĻšvnÅ}Ū`oLĘ9ßĮK]ČiĒģöøĖēEcՃšŚPé3ƙžžažēĶ*²¦żIĒš?ł”§š˜ŖšŽ~¤Ŗź‘E_x­b$¢ßo CÄ<…ŗŸx9ž¶Ūtz;ævēz̹$Ūpź$JŠōšßłuqųžo†¼ź‹³ĶąuNŗõ” ņ'  ÄBĖPÄź/_ó‚0xÄ¶ĪżžzŲŠ4‚wŲhŽL\‹’Q, =&žX$‘¼żūłæ—t;^њ™= õtŠš õ‡"T_é•m!σŅŲ>õ&"!%}š"ę×?CćņP¼0żżż*¶Mź¶~‚- ŠėŅéO½×‚‰°XĘP™5d„ģ×öušŃŪž²}ū›RY•©Ż–K–żYqhŌīŅAp[‰TöäĆąķØ a ~äPš&ś-æ(Rf™ŠįxäŽĖ÷ 8xž–’PKhl5p—ӈÜTŽimages/002_th.jpgUT PŖVE®»Xux č脽gTQ.š4éE@Ŗ$B‚ ¢Té=”‡Š«"`hŅ;R¤„@zK ōŽ‹ t”ŽC“"‚4Aąśsī9wŻū­u÷Z3ócfĶžŁ{æOygfĻĶÜĶ*€¦Uż+BDBĄĶ7«ŖćK@[€’Qne ))) ŁæŁ-ņŪä’ 55åm:FF:&VĪ;LĢ, l|l\\<<ģWU‡Ģõič²xWķry¾Éµæ(YŽ9d=/"%FČ˜–ŖžŲņć—^æ‰üŠÕ”µŃ導¼¾njlīS’HNāwÆÄ$ט« ~ų«Ī†&–Ū`QdŪóY k–ü&Æūę7įh’^ÆøÜ÷Ļfoŗ%ķ›_Õ°3ß$+S_TTĶ q†ņ\ż8›ü¼Ü“Æ“3l ÉIjš¼ĪŗŲ{ŚB'†ųš^iŃćoČŖ{Ć£bf8ŗ¼ ¢! å„żå7@”Z³óŁ»g'āĆă)ÕbIvpĀē÷.0La™ęF'ŗ ÕÕuÕg²|Ś®óōˆžŠ'¹ 7Š F]‡¢»Æŗe}9.ŌĖ–6½ķ^LbTŻŗ (‹ķäłsäu~(·$02ŽMØ/Įپ¼ÅØ'Żx€q ædGŚļ_t.ÆS²zÉ8C?ńµóoõäsféń TF©K’Ų¶ķ ³–!ī5šy0Ļ󁣅YĄÖ^ ƒVO²ĶÆ«ŽŗŲ9ÜWgķQQ‡QĒ‘䊱 st„¤ør&W×Ļ+eKsqźīeܰ$ŗ’“GūĘ’žˆVņ–ä0Ō-Ś¢l D õžzō Młoē‹ƒƞÓn]ąk\sĮ›0é>ѹׂÜgö ε7€Ļ©W/žŠ›‰r;q¾›Jypi#‰9‚ÓŽ"ā&ęÉ®xæŠæÆš©„VęGŁ»ņéŽkųcÜ϶»>?juteļrO™®U/<š„ń€sYYĪĒ‘^c#Šō2[l$Vȋϋ³ĆƟ8/ą}õsŽdĢl‘„ŽĮRå?܍zōäh°į!P~Õ’œŠ©ĀŁėģ®›w#3AȜÕ\9ŲģŹ& ­Č÷˜É·×ē“įĶEŠ“ JöŪ›žzvło ¹\1ģzlkRˆ˜zŠ5C©(Ń?śÖoCÆŽĢ,-ą‡ĶÄŲå'XķZį)ōīI3>£+Ē“:æ§GACłVƒC:i“įF™”,CÜmÆ?Ņ&'ž-žŻYØĒ?žąēō639R1•@u^˜”ūŹ«€.Ņ”J60xEō8žŪ`ŌĢčļŒyj£y`’ZćJrDq÷#ļõg«ƒ‹ŃVŪ÷ ކŸ÷3ˆMó…åé² ’ŗFnit³ šśŹīŹP$Š=ó×v!-ęt]DķsšĮ<ˆ©t‚/æ­[ƒOJ|*•Ö›šŽ‹¹”šK1;Õ¾¤WQ”W“ٶ3_Ī‘ML×_o;½·ægf`&Ö=ä¾fȉžä’dŖW8WpOŽĢ1ća/‹#ś)O’`učøūžń$ŒU™gÖV“a%wŅÕ줄ø©[©7‚×x²øĪŽ]“VĪō˜÷O„–¢²~żõ7ķł{¾;źgØp‚“+„ŸfUƊp­„bRšĖĮŚł’Ž*%>×Y,`Y,—`Ņ®œē-ŁŌé.„}¾aµņ œ9ÕCīFw0?}2H·Ü+»Žā‹ø°³ń·g]Źx%¶üõ–ŲMe×?Ÿ>ŽćdžQ<ą¢;ē?HÜ»<Ÿm•u×®ˆÜŪX‡łāc0]¾¢½SĄ 9æ@eūöw !%ó÷*ž"kīHäOHå4ī½³:Mzaōō+Šńē»1lįE³?$IżyĮ_dÕ+5(=£/]A}×C––‚ņG4ŗĖŠ-¶éź…æÖĖėi¶x—ų­·ōaõOÆ(āę;ŒYt;#”är:^O,WŽĻDūqJ-ßĘīĶdąD—4*WĪĮŽ:ĢDšv<ĄėgŅĻ&żO-=„…žŹ‹:mļI›ę%’ķåS$o¬s&ĻŚš’#_±v8-6Y¦=2OŹ#śt¼•€­ Šņ@AŅ"(ČĒōä±ī¦©ż—½åÉĪū†éOl…ķÅ  Z˜8&Ē®ųƒÉ†Ā@ą—ßō ųÉqt†£ØcjŗĘū}u;ĀŠwżn0÷lŽET®Ōlt{—n,—K޼/o‰P¾0­€¼ķ»Vł¹‡mbŚ4{Ŗ†āĀ Š%ÓVęŽ#IœaIø0%eį,žäž,6k ĻÖsŗt$#'‰Óõ`&¾®Zš>;Œˆ‹EP0.ŽN@Ė<™–4sāõ…0Ń­ÖŲ”x6Ä@[žC½•¶Hžmō$ī$Ū1ƒ$(īGć†Ę4eó6äķ ×_ØQ5ŁkĄäŠUgYæpg×ųóMå×E=† śwĻė£ŠĶC0Ę;ĆKÜĢ•*ōŗ+’»ÜĮÆ^Ŗ™ØYĆō÷;g©H RHPꁤ¶ü}܎ŽC Bś.žīÅw•0Ēä/S_’*Ń)XP@Ķ…Ž ³q{;ņµŠA.&*Ęāī*Ńņł“Į£äśĖÆo%’C¢Uh?^÷Ńąͱńؘ×PĶŪĆńƒ &‚L‹ ‘tŗńl[ą!ē^E¹Š­ūŗ5sVŸė&™åÖ„”’ā$–g;LØ+s}ķķ²×öCiŪ飣łŌ óń=%$ ŽĢ=GĪuƒæFKėE»H-»ė÷÷åBŠh§łėßzµ[/ĀßQww12†yų”‘ńžź& MdŠžNdū!§×–¾>œWł^ŲĮ“ąäB!CŸ—‡åŽ^«dņŹŲŽļĖ·PmŐ³F»Hö4’½jŹ8]T‚ō^'&‘¢ßü!aņ1–›É\šÜų½P\#9¢NtÓ<ŚĆ c€+ł4FŲ ‘~ć§{*}=Ę-v·Š‘Ė‘4’ˆ£eå”ÜD*6R|"9rµ˜”»ŗqŪÅžĖx”¼q/\¶T&l¦`Ø_Ø’T[rŲå'O’;…µ#IŚHš%tO±rʘ 6*65[Ō\!åÆŁĆ0ßIŹQT± Ū2»3‘0‚|÷Ż4„·b…’\bś63ŸJ iąĢcn.ØēJ-»IīīķjψµoŠN$Io“Lł49­?`>Ö,ÕX{³ė/y”“Œ§ Ę·ļā½N×›- Š„ÜĻēÅ Ü||–$3Jo&Ѭ½+^p„”‘ć÷ ¤Õ¤VżŻµIķMb =Ž“++X-“xbŻ‚²āļ¹ŁOū“)c ³RęœQ7ėZĶó×geeūTš+}µPõ}xĒ·…ρ:`T‚G”xdjėBć²½˜lĖ~Wfē5TRå6¾üZTæ¾£œõ)-ŽÅįČMgƒ¦u/ɉwæöĶt[fś”‹Ÿ*~€‚äÖG$ŻäŗˆqĮEX‰Ŗ£"ē•ZĘüźg¢ī«·’‚i*xß(6Ö¹ÕÕ tµŪīŗķ3k†ŒÉDcu|ß;<žäaz hŸo)«‚·ß–„®ėŽs>rčY¼{®d:ßÓmX9 xćü¤¦ Ż’„_‚PŸUŊR˜R|c鵗įĻ&ßäó7ŪæåG¦»¢Žõq/=±ĒsI@OŁOGPņwO£ŽWŗˆ~J½[ĄGłĆö“% 4ūXröé„y\mīĪ&š‡[>ó|óŗy÷pœ¬~’6m‹9’0~׎č2’eė:Ć\~\óS!ŗÉĖ7mb\‰µ1īk‡ĀAĄ?gZ€Xų’&X?‡JÉrr†Ē%|)›TĶolbŽĪöA¤1žÄ«S…'ŽŗėžZŠŅ’Š„$ĄeÆšā‰Åüמ÷ !aŲTelø_ń˜ČƒApµ8ĆJćt,!9++)īT¬ĘūŁäžHdĶÄO’S Y擯¼¹˜š ąBzˆƒ£>bŽćA]&'$ą—~Ļm‰ėTš¼©hśź”v Ę}įa×ÉxčżĶE#˜?~ !³‘F:…},óŌLXĆ–Ģd9{+)s5²V9IōrÆ)Ä¢i5ÖPźOĘŠĘ_ĄŸĻ]ē<č‘)fĘ|Ī-š)q÷‹†=NØY/wÆTZÖKQč,­įÓpc3ēšj–ķ¹tƒõĮWó­½Słx)—ęć±ļ&ā@G±4=fÓrš¦ō;īČ rČ0’Cš÷~ŚBĒ{/S9hŠhčāš’y…+7€Ź į’’5²~(Nų*\¬—v× fy;’dƒįŒć»1¾‘!ūŪĶ\Čå™ēēöķqĒ/Ķ- ÅF1DŸö Ū[nžņ !šmbÉ­»$Ų+¹¼7Ķ—r“ ¹śąĄ”UÄ WӌkTó'óW¹¹yEUrķ­ Č IŽź;”LŻ—¤Ņt©ŽaFtB÷Č(ŻŠł‰dm„›:ܖöŽøżųGÆ"rÄLPäwĘF[„ł ģD])L¹ÕülŅylÆäaĀSE͟Ż}ĄXœõ°µ#ĘĪC&ÖŌ“ūŖHlė®w6c®Ŗƒ*f˜źł#6Ÿ‘¹Ąøéą_Č Z Ń9ŻŅJ0\»GĮ ”,µ&i½N¼»W&Øųņņp«Ķ¾Ž“ģ­ F~öP8Ŗ›å«ÄŅ£šŚłØź#}.ofī󊱙ņ’ђ‡ŁŒ~$|ĪdOœ Ռ— ©ĄSC^ #«į“˜,rØfG<~šŠĻ»ė{ęÕĄC3u±ė’Äē\ ź·×”OPFu“Õėœ‹˜ øģénę'%f™Ńå'ÄOŸŠDe§h†K½hŸE«Ä¢3iųˆ,±”arŸŠĢX4a¤Ņ‰ååŲ²p] ŪĢF+čå½õG›śĘj86iŅ= ?ę'ż9Ī”šé ­/E±ˆ„Ń•¶WEō4n)¤(uˆśŪźR³š§ä7¼}Ģ ą×Ožkb1‰ńJč¾ę“[ė– lŪīĀ}•T¾Ü S—‘\×A<«;'KŅ'9±Ó^Ū»•`%»ž*ĶJ%xŠž)ņXśŠx’øņ²VVf^G¦¶ŹIņA`±Įy€ą¢ņ„’–Öl™Ż?rbŠ22:(o~ü.čÆ`›öGzx& æ·éą$˜„l w)-€PżłHćdāĶ2*’é@٧Ƽsf?ģ=‹[ņŠå,ŃŠ{ńś„l4S<a¬zļ@J“,ź÷:ŌĶŚKČżšĮå̘1’6&,M;œ×w#=–DŃś$!pF/ō TQ_Ōī ¬K„)CݬłŒĆ{BŚĮœ†ŚöõnŖģ7Ę»7Eöž C®8 Y)kZ7/ŠCöĮśš’Ļ·|7å³»ÓԃoL&Rõ¢,6»E 3ąv6! ‰¤ÅæKy¦ÄT3öĻ-Ó@Ń«-¦0ōµ“ĻA ‹P™ŽNÆ+ł¤ŹŲ½§ą6s'ƒ%™ę©Wńą®>ūX×½¹x]oNćóėµēś ,-ū ±,į®ā©Gŗ‹Äį‰ū ĄXśHŖœÅųX:ć÷ˆŪ‘°ŻSLDXd#yÅ»E"½]\Ō,Xü“+‰«A2Æō ½c÷pĢÅõ¼~’†­ėKā›P_|‘ī8,ųF "FšĮαe;@;»“µ`öIµ+«6Ź·fH&a³H¹#æ'‹Ńc‰ iäōŲ ĪfüsH7,Ļų& rJ½WjR²š”n®9/ß|wÕ ­°Ģ’“łż3Äó«^ĀVPż=øę°2~c ł¤4šėßEšĖį]÷‡ž€K#JīŽS½šNzJļńĀ­ ±:šlŠRĘżLĄĄü_¬ķ—üśy9‚ē ŅOhüRé67Ün ›ØĘ†h˜ÅpĆóÉĶĢm;L&\b#Ģ ÜVU‹tƒÄfźP))PĮ>~ {ōż§›å²½ ŽßżŽ3?YŅ00()”Y GĮ˜~™Čљņws1(y+5~Ć ÖUrd;ōŽK‚?nĪÕcŁvŲ€łŖZå•@ī“ņ”ŚÅœ“„Xż¦¢Ü ¢Š  …ACϽ'$„Ń„ń Œ¼6OʑfpgÅ;"ķ¹J£š…"ØzPéɒŠF½†šće˜]äRﱆ›g‚7ī®ž ©„_ć~”g怿Ä(½*™›“½Ü |é'š"5ƒ³J9Vr]y*VŖ¼£.’i0“–:§(%Šnćō«)PüõWJšł¤badKvŗSWÅ&’Ó¶īō/Ɠēt¤ķSéLWŽCšcyBt7Oń>%Gģņ%MC“fm…‰Ž}ń°w8ĆLÜõ §aā_…ķ•W¤Äiš{";„_Ņ0YųÕ ,=Ńk0’æŁĻo¦ęfŽG’Vģõ"•Ai½dß[0|Ž\Ą‰ ɍņģĪ8”ffˆOL”ū›EŽZIęą}æąSĖFg¦ ūY¢RD?ņ2XąøC‡Ó¹Pڧ¢#Ėó]sB`™ŌZų–:„}°ōN *²é„ĮJiR'9å6½²ćæĪ…ŲržyäŅlYUżöč +ŪÅ[)™°õĪļ¬:E-Ćāˆß$‹G6•ŠÆ9šZō¶Jš­°KyĄĢ*](x}†ŠÖ=<'ļ§4¦"¹źJŠż%ų¼f4éō ó øė¦qÉØä%öŸ Čw45į¬t—‚r­r×m&UUü悬ū㋪ņõ,Žƒķ»Ł‹w fśG«Ė!¹Ķ%@^¾z-Ę~¢čd’ZÆż1 _Ńö@2“ˆQ|ķÄå‘ń2 ……Eó "V'×ŪwŹÓ^éEa£ÉD­ęįš‰J‰m=tѬƒłĘ­ö"ÄŻŲ%Dϰgm*˃ö&Ę sŠk³[ŌąõĒ0 ø?€Ńų±Qч÷¹’ŚöēŸž–Śj B5÷Aešˆ[ž;|‡kDĻ„1yõ‹z E…× ƒ]ˆµ ™ &Åų:(§Ų-9›ōĄ"ī5;j½E¤Ōń­}“ ói^sKz7U?ĪJ<ąZ4gßa¬i<1y”čaŸ/@‘…BŖ¤XpUL÷Ąfždxoƕ«ķ#R¶«ą~•“‘ķŪ§½JPJŽiņÕ `’_OxØü ·Įż™ÜJ“špė¼y.EY,†3y}^°åäĻĒs= x¹פünfŖ+ łŹ B½yļ»åwy­†;•Õ p! –vō€ķ3É֚ī]I]”déH ¶ 1vœUė(?rŽ÷°įöŠ÷#ĄAļŽē±X†3SŖµ48˜4„eœ+.ŗŽö?a lbadž¢÷I·šYóėĆŅH‚ž8¦æł‘†.ōĄ?!»m¹œ0¦U*Å+G²ŅõÖ¦†"kå 5xlgͶæĒs|?“y×Ō侑^N¦R*³Ž”å;]„Iņ§YˆV”Žą…‡¼\Ą¶½y£)*KŁ‹Eɱ] ‹)Ću‰Ņ³÷^›%ģ ƒ|”B<ƇI!bć9ļ6Ÿ9¾¾š¢ņ£bā„§Ō¤ / ā–[å‚Õ;É6{šmv;ŌjrqŲ+ Ɣ‰żdi`#Č(‰ń¾XŚqeWø|]ļ˜ęjh—xŃ”ō°܊ĆJļ~iÅDÜ.&eFo'U„zė9–![ŌÅ*˜ތˆ§VĘ s|Žą?ÓLŪéķb—#…ęå.˜’™ަū9Ńū½ –¢0ŖĄjŽ„ÆX©Ø|Šś3vQˆqøč~›’ęŻ|ܛ½>Ļyė˜>?åĄn­B_ É×@™ņ“żĄż–ŒJįvR81æ²½N™&Dź4‹Ń„qųż”Ėō”K{ ~ŁxmXåc<䛦żĒˆü0Õ.)£Il+šĻōh[½ß¦ÕhŅ5O›ė—¹ Ģ`ō§ˆ»R'5łšŸ¬Ķń³ĒćĘӟūCß»„«āĒ*Ł\šŃĆ4ßaFaÕT­ēI Ѽį¹}ā’‡coū;¦›ĻMĀwā?;fŹČ,pJŃ6s'Gą pœt#j0µ2įoćoöŸīNŹę— >”¼Ż¹ćrOĻlmݦģOTȑ[ņššRrŃ9óżļ]ifO[\5ń=Žfų9Mī£÷šNŠƒŀ."0?U÷ģ^?Ł…=•0(=K™ØĤB‡ßĖķ*B5ŲiÓh)9©Ļ: Ķ՜Żoü*mł±‰EüŖYž=§8Ż<ėS žŁ”‰ J¾–—”ĖqZ9/‘³4•‘` ē ‘žM”|ŲJE(S­Œ+6¦ä$ēT+:V~5œ5A“.uZ×÷Ä{Dįóī0 ØqÆąéX./31ö*¶Aōų·q>æ?ķVŽÄ|cŁ£¬¢ÆqķĀŃ%ob•Bį½Ą±C”¢©¬Ļō°ŸŸeŪ¤>cäĖ"ut¢Öōā¬PS¶&‹iN!­óā=ւzŹ*”g;:ń0-ŚUęøTDźēß?JM¹I)õø66Ī„u\³ķš8ž`v4Æ;’•J™šĄ›³" †G`ńgēŅśÆē­ņ$ņūÖ­h-„õ7[z’ŖrČč€TJąŲ“; h˜{rųŗō¼?Ōf\|¦?Źi,¼ōy\Ål¶”ł~ŁIs0{čGźR-ł;ă‘.ūké„Ö-ÜE/M¬( ŻfŻĮą!‹A8įµ)ąĪµ&(›·ųz\˜]+2♻⠛ Įõįe!Md•€,ĀŲāq•}6^h±¼B~ļÓæjx¬é÷ęd®æ/¹°()Ģk“ÓŒ‘¬ų89ž=’Ė%_£XOäÕėę¢SvĮ¬G/¤öŸ"Ų•<ņ4£­łBƒū4ض‹ńfõﲕ2ŻéMačü04½(Å%—ŌńrםļY׿Č:‰wĢS¾ŗ‹'Ą­ļˌ5į×ŽĢź¹ŪrrLAūÉjó Y Ņ=é'ļ2‹į$ŗæ F‡ųЦ¢É~³ŻDrK§^ōJ¹Ź8#ƒé¢1ŅÕĮkŅA:’É'ż’ G¢NåŻĢ™„^ćŅ|ź41½śfĆAh@-:ŗžnŗ‡(|uŗ_+©‘6M5VŽĢ³Ó°‚Óm¤@Ŗœllņó,ī*.œ€āŠ wd“ <``XC•ĄĒ‘77€­iźėÆżzÆß7¼›ż*X"Z93$˜ģ) ƒuĆĒŽäõgŖžģl|śWŲqŒFg0[\f5^ʎņ4%®žĶų<’A[móa2;¶ß'„Aą5‘‚Å@76Y”u„orQļQÜG.x"Ö±ž‘šuž=œ¬Øņ6ǁLNģŠł~ ¦5Ä#k)gsO«+„nv¦N•¤”ā„U¤„·"Gw¼÷ a™vO}ļØÄL†æžŹf¶b€Ą Š<Õ„ÄŚÉŸ%i ŹåĻ5Ģ”Šłē¼;1Ė7­ūCķtČŅó6—ęUZ¾‡r Õś~ć-ņyąźYņ0Ēē&2āÕPótW#$å½=oėFØņļÖ4:‚,AU„DUįP 08Ŗ+¾”1ŲŁTøč ön»füŁļƒ[,9#:o’sF<Æd²~©’aŗ¾šķ‰JOųŒJæKG‚\$Hq”$@“€®³NdĶÕr/Š:ŹÅ›ėC-kźPŃlZÆvmN3–鐒ü"d=!ĆX\Ü1PÖæźćʲĒ_Č q==I!7[6Łułź)ÆķĪė\Ās‰a÷ƒ2Ň8 ex†Ru %Ż¢Y¶ˆŌ÷Š_ŠIoĶŻö9˜ė‡BsfšŅ+vĆB Ņ+’W«ÕŠU. L2,•µ†Hh%‡«Ąę8ø¹Rģ`×·=œĻ”šÜ–įræ…׉œ”"åēC–¬ö½“zļŅXė%ė[>/nŌBeĮRä\¶{•Y’B…Ä—ąŻėąŻÄÕ£‹0/šT§P°”Õ“b]„2#¢€QµRžy؍J.÷šł±Hex‰1ćĒ¹e(C…;'ķūŒŠ²ˆ^)ŻõgßPąć’TėÕ1ēŲȎLEÓ)•ŌC]—ć…†³%Ō ĻbźYJI^×o‹ƒ †ś·?¢ä]”ŃOĪM§n‹V-I²8?2š~čjīŽ^Õø©×t’Eg;oS6ø ƒ²ĶTĢÜ_‚ؼEØ-IÜ«“Æ2ūŠÄHƒæzäOéKÕÕĻ7PĀū‡§y¤QøĀmÜ%ö¶ÓqAĻ…'†¬ž6Š÷$üŒ4°ūgą :Pa½æßtŗüŁ÷Iɱ]sk 4Œó9ś‡†Łģ¹’ßļ…‘Gīņ~ƅ¦m¦pƒÆ*E“Ž"OTĮēłŒ ”śyņŲ4ÓõČĆWHÕ. ?äZ–=šēå3yNž˜QŸīQÓīŽžęÉŗ {­¹īƒBŁ= :±ßäč’uČŌŃĮ$æćU…Æ÷­3Ż_L•H¬58l/¤˜0|ųÄsĘic“„‰ū ‹¹¤mŲjņG¶{/­hąĪ…ł¢²Ÿ<׈ŎŃkŒUc4›(’”Ū[^Åž· &æ*čvZŽqeŠ("$ąhMF/愮l!ģL”军†Eźš ųR»oģąA×E"GĖ!“ņC@®@ę8žG·t1[“z2XUǰŃCm`Æ"zŽ\#Ö~ƒ‘džōŸb×³V³Ś†„8ń!ü"2lŸ#ÆÉ®"ŹL.a°L+Jn xDēafŌåŅXv{¶ÄŲ—śU±%Ś8cԘ·ĮņMłO,›|z[ŲēM7½R„„e9Un'fLz¼ø‰$Č"Zwt,!g» <ń7½ ¤ūOīEYÜj¢aĀ‹NQ8卫!PŗŽī@μ«Ų ?DjēLåK­%ĖO3˜Õ/čÖ’y>eW‚ŚQƽŃōFyAs#tń y®Å†·fK*@Lƒ¾c}©—Xo°“h¢å ]ŠKŠw·{÷?‰…æś”Px4ą6:h”æ³Ø)Hķ›įǟ¹.öŅ?‚l"Aß•“ķTž.$!JRUņSņXF—„ŒzŽ…ĄŽ$ćNēī²Ö++ü3_ż¦ž%ƒÓ4vØÅńĢQˆ ¶?«šÓIg²©Q܇¯ōīh‘Ö%_L…5`ÄĆX†Sƒ€6}•e—¾Žkéāܧ ć"i¬\ööńq#5„xMÓC—“ šä›Y¢I»”ęĒ}ķ&vøxXD'ģŠ2Œ&𛾒 žä&žM TaänėĮņƒÉböė£BĪt§:Q’h”‘ģdhVŚć–»ékėĪŠÕźoŠl"„4Ėčaä»Xė!ÜŒ–› 朐9–ö’§}ī1åģ{¼9ˆµ({§üpĄĄŚ`p6ķ—āw=zš»ėš‹Ž—eSNĢóŠżā2"ę+k’ģ”>ēė9³nF„ĮBŗi9O5øž(”ėÉņ”z¼ UKOSGšāńwŗN·qĻ„{ų/²ŻUaņ']ä]3U œ&9£‡ā÷*T|½sΌSw5¼4Éźƒw¼č̱™6ŒÉ™ į3­ŽērØ“ņziź_÷ĪmųQ½­Ļtu["¬ī¼½‘\?ARöXSŒy«čg®gaj”v&ƒv2>Yõżėtļ (0‹ļžlķń#ZD½@ĪG•ŐŅ°€Vąü¢„HcOėū‘ś°€o +iī7Y·w¾iP.€ÜĀ’vĶ37€W‰ģå”{Qī÷Ā>kµ|#SRž•p8(Oą7]KRõ(»„UdźK™°‹¬@£o™y9x  x"ƒ>›9‹Ģ(wrzļµ •BÕĶ_<RX+k˜MÆ7Ną²n’įŒ2›!Ä4Ļč,Į“E·+z‹ó TÓ X’ōßźwčĻ坲6{jś–ó;ŠŌšįjyyEKœz‡ ü}ŻĄżńp—sāNH»žŲßä¢g‚¤ø8ƒ¬?ļhE“Ö{¬i(õŪ2`6ģ|§”}Å!9Jō_«ĄõBõņžÉ]e’’Ó-\ ĻˆŲā¬9ŸV:lyČ£Ng„g‡ļ³–€ĪŒ Ā®jV\Cżd—Ī}’eÜbDǹ~ƗäĢ Ćø@„‹_ŁĖ¬ß‘”«k˜]Ö”?ā•älÄbhlT®ńo¬pm7nUWd<ˆĀqdė&äčt^|‚Ė“œ t‘Ō•æé$ģY/Aļu-`¤?°S•ńn÷æC!!T™j¢rŖRH*,äҼi¹ēąģeĘĖŖjn`›ua…ļ˜H\ł @8mœ—(ä f+ߙY(ēå3",řčIż…Ōé)ŗo®“‹e”ts ±}{²énŌ"łƎÖ@E=6ØI>G?X—9py’”+Q®/’ARAö© ž½QÆ 4“żq­8Ć@Čtģh<ÉU©‰ŹŠ4p'›ø³ĻŹūĶ&‰/뷈6RW”ؼ³f(«4G Ÿ)õd Sd„»Ł0&£‰¬\Ā‚I?x ­¼—¬4?±•ŚŽ£ŗ×eA²pā=^»)œ|‘DÓ‘ū=u&råjœ~3õu‹åĆÄē‚*ŻŪ:0åC ÷¢DżrG> f­ŻC¤ćE^õV žėÅ]ƝÖjL-Œ¤Ģ\…'v¢)׍óa!ŠŹ<†YĆ»1ļX*æ{bļče‘JĒ€*œŃŻŲvłÆ©YćŁÅŒ‚¦ĪlVĘ»Įó ć|”ocn»£~'H††¤†ČA¹l6œ¢=Š&g2 ˜Ä\‚Af<•Y`^×«r8ÓEM#ŌHW†‡4Ü?¾/ݬdĪ\ Ö«~|UŻ‘2Ł 3pŌž²A -£…I²³}å÷‘·ĘD±½ÄŻ/ÖŃ,Įö*ļ‡Éeƒ•`zļ¦ʁ$‰Qķz¤6<›aéń&ū®Wxßc*ļ®c^J·¾\Šóéé­«ķ‹7Čgśj-?0^“»Ēę·j ø :¼æ“×+ žä˜Y”Ė/Ī9Ė_­ØudvK±WƒĪą™L’%3­*kł1ŲŃ*„ź<u×x»¶„3 ­±±Šx.“:ūeźŗ>P]„ˆŅO°dŲ„HŹ£éö*‘÷–£S†“ѹ/y¦U‚rīcæĘülź©PhÄä­©ÄŖ3¬ß3nȬ 69µ=ņė¼1ŖyŪ`żi^ؐˆ4łe”xμ.»aĖ4Ó”éļ"¤(VęM"šŸņœS×n/Ą¾›Z˜*§×ÓUŲ„čˆ’/Ē;%˜Dtµ_ČŹe§²@¾Į ޶‹z"+ō¾ hų­[€Ķ0ĄÄ©ż{oœv“ž}Šżc{šūˆźµģō£žæJTpŖÅ¼>WõeÓF«÷ū ¹ŲDŠćÆŁH¹'CŻZžBD³)9Ķ8Ó=åšņ@’ķ—Z§Ó˜õ¤Ÿ„wØ~•ź~ƒJūĒ(萸W›„ŹŲtŽ Twļ¢ŒŁUBļNĒč\–F}_Æ7¼Č2Ćx䨓>`"6²vnuŪiĮE?óĒ6 oļ͚8L.~TiÄšO‹ņĢž.%\'˜ ŽS5±ÜsŚ™g1’°™ —o|g‚"&ÕØ°·&—r„ˆ7)ˁĖ97§čeõ¢łu¹ŁC1Örvū¹$9Ž“’€±‚Œü«A‚’Ž3Eœļ-¦fƀų½g¬5ŗq»`Ē®Żīõ}rDA’śÆõÜm £×Ō‡XųYö=Ś?+b“OœĻ??²I‘γzhš«hō63‹ŠónąäĄѻā^~W4õÓ*q·“ßW24dˆP·teƖ°oķE>ZöĮ) ¹ Dz: ³Jpz¼™Ņpšē–č°Ņ#t²v žŪ3Ģ'kÜĮėŃqščFä‡Ķļ&vxa}~“Qž:yæJŖ?hµdYʑ‚(ģŒBčmŲFµtŪ³«›ŒJńæE{‹“Ņ^:MŽģiLŅ ŖiĻō„ńÉ ®±;P»ŠE‚‡AI™ś¹™Õņ¼  ¦õ;f‘\]č]]k–ÆÄŃ ¬ŗŽä›żlPϫҜĮĒž7€xC~W6óilÆ}sUL3ś Q4üŽRĆŒŹ›5$yĪkŹŽf  &øq3 eWųR"ŸĖ@ĢżĪŻČc|ų‚²‹ø4Hņēķ ¤3ģ™ÜJå|“źĖłüĮ`9bCBģO|HćĖ”“a*¦”± ƒfŃFVüpšяÉ.ÆŚ^“Ž}Ÿ/³ ƒaŹÆD “g}yܞĪļŽq2xi%*A•L…móØÆ4“SyC,S°j,zKNą¤XÖ?Ä”ąVž‹Ÿe9Oóöi²±vĮ_ū+ ÷jónj3X‡õšÖ×{!śÜgŚ\³żR4“mdÓe¾öS¾–£ nķ*<„RPƒ¶xJGņźø“cēż«ķš»AĀV^ĖT§*Æhq"Ģ×yĢ«0æĖ³3Ž$dϹ’ǦśŻŒ“j¾ĻTØāęC¬kpølĮč l Ł”Ž^ŽēŲŖ*ń H;ó¾$i9ŻÕwŅßśČ>øgŻĀU]·¶¬ŅńĮÖī‹uӘ˜ŪÖ%é&īóÆb{Ų…?Ó=ż,ųΐ7ŅAx£„]ŽŹ7‹1+޹žDdŹģqź9Ŗ³dæ~~›×ć óļ’7š>rR8Į »UčYāVƽ.d¼ßüŪ÷†0+ꂠÓóbåK5L>/Št6v„ąˆ¢uXĀPž?ÆNTŗ/Ž-"éjĄ®Ÿ¹©Żųē]Vķģ’ąuc\×^š…ŗõg†®€·ŌÓĝ6€8šs@”SÓīd€‘’—NZ·Ó’®›R›“±pŚ„jl‘ĢN@ō`Į,µž·qNąØ=—ä%ÆeSćęį›%ZsÖ©ÖĻbF÷é?'ˆ71Ī+¼~BŠ들ŗū vI+#Oļ“³ćś¬O€¬5Š-1ŸK%AB°!8t\aƒNz¼-»ifę›9Śń™lšŃŗ2ę9ÉrŽXJ¼ÜŽ!÷gŠÅwÕu'㊻}Śå¶¦›™&)ėÕiqŪũ澔ņöōačĒ9Š®™öy:}̼џŗ¦é’“R„ĆVt•żŽLGfEńŚĻ“ #Eóh’ań‚żČ€óėƒXŖ _jó5āR>GƒH>­ĄœŒ:‰”ßćSr/}¹åf·MĘRC; ”lµ(`hB*ÆfÜH£¤uUžžÜ”ńØīü¬;Hßa(īw2ßĬĮ-!A0„§Ļ”’z\€B÷”ü”u Ō8Ō0©1QŠ6^øźłąßĄb{nf^F*zž.x]BTśŽ&¾Įŗßtā§|¬nųüžt[Ż®<%Y” K|Č«"e(Ž *u²WĘM½vVŗķ«ó‰Ń¹tʶŽT—Q„G µ_µ§/Åų,Ža’Ŗ3Ōž\0d£ōöć÷–·)¢ ` Qā.łG®·* ҌˆŹNź“j‰bm1 ĖĀccļBՒƉŠYY ü†{WĶ WĒĖŅ\Ō”ŚyććĀ.4Š ‡AWe^oiś‡é'Ą(¹”S£Sm#³Č“Ć]†J‚žį|•EŖś”ÄĻ0læ#†vǬÆ=9ŸV•Ćœ4“ÉJ[R ,IŃĢ;SŸrˆļnŠ Dµf¹÷I ®×$¤’Æ põÉ8nvüpČ¢ć/[ü¢bf ~×vIła~&yžó¶ ƒtŠ_q ĖŅA…⻓’#CĄcóæÓģ7!ūŪ™0)—AźĪä]s§¶°£… ¶ ÜŲ "ų_l@ĢĻÜAiļńŅßAUf'éNŻāńŅbšĶŅ)³Pķˆ z'%åŠM¬—Āų&tĘo’ėeYēń³—ö~Ų‘™%9’ læŒJ_ QRYõ”'— 8CĶŚX?kknœz6} é{^žÄ85÷[“6–3…’oÜ¢"ŪŚĆ]śz¹d!·Ņöį‚‘¢é'žQŽČrń18' 6Ź‚ŠŠŪ-÷ōņp–Ś*9O=žL8?~čżģIF¼Q6ßXȜ›@cš#B=L>šÕW•&Õ޼§ß ^Õķą÷ JwĘęœccĄkАQ† Ś‘ŗ‘Qבßūö}'Œ1źµL÷łå ‹ąŽ#Ĺ4ķˆ9ååū‡<“Śł½ū§0ŠYv8…ż%2»õæ÷R’ś+<Yć’&H“”ęŚæ}$!%R¬•ų¢ŪRźżT@ņ ¤^2e“ZN©Ż+ī08źØ8mŲ*jŁŅXæųÅ’čųžEÜф|ĆįōɹūĢ„ź€RJ°äœ” ȳūŲ(įrWĀźrÆ55ņD«^讣ŖŹP¼yTĢČ<Ī ²†ĄŻ:B”ƒT¢ü²owW¾ĆrżźģD±z-Ēv}ų!ź,hÉՀą7+:ūąédy¦[ĮŠÖŻTö®‹' Y Āy© RsīædŽį“#ė+–:uHįŹÆTZö%vb˜HŃ£Tz*JIžŠŸ‚ «[Vŗū½óŽ– 0ń sę…Eię^bxž§äÆ}˜t¦æ{ś“q»ŽŠp’Øu×Ūš³ÓPć¾ßŻWv^riéf†‰hÖĒČūƞMŖµ¬ļŖÖžHIņ„®œv‹¤±’hĘĀ?‡1RĀoé*ĖŃz™ź[„]Uégŗ×Aض¾Ę¾+­™0ŚÉ\;²RgĢcMqgē’„"/K¶w;xæÆmiėe4™ęŖ˜^ö¹½[‚Įž’ƒ>~„ž™ ;!±Ÿā÷3xÉ>»©Õȧąå«8„J”9ō©³»zķšÉh¼=…qO©PW“O0qLÉć5 G!‹­…³?łģ¤‡üĖzp(åŖ›¾ķ’‘BŒxŗųŠĄłqŹ|Ē«vGƒŹ+ĶóK?FŠwKÖĘ©o¾ć¬MüS®z”ÉĢ^‹&eP²šµG –ew®Ŗ¦<!"79W#, 4ž­+?o9Ā;"ū}МŠÄ ž¼›BιĶRP5ŵŖ‹f艙ĮQŃ“ŠÄķž¼ņĪ”Z~ąĆn c #ĪM+ćälūŚbo2T?»i–ŹŌ)ö0nŠź3ģLO½9 ‘VčKźP=9ŪQä™8żŻe”¾ydōĢ„‘;,¶f©.r©÷Iķ’i‹¤kā“C`;÷[ˆģ£‚•ŠIø[dķĢW9䞃ČųzÓõŲe…PyYĻ·yi7W–¹€ųDŚ\¦‹>Gм˜ē!§ÖTn÷„…šīuÉŠ¹“†C›ū…?ÕāY5‡ īm9»Ę‰< ³…SsAX,<·Ų‹|æEČÖk4š·¼ƒÓlśŃž-[½”Ī×·ś‰\€ā†BUē%õWÅÖńs|ąjną¬fG(Ņd}€…0éŪKŽS.āóņOĆĀ(HSB#Ÿēt³-–Ń%³4Ć­ÉĖĀ*®yµœ4[;)D*`«“v6ī|–v:pēp‘+ƒ¹LRnø÷Axš«i&KŽäį ` –÷ĢbČJ¬!µs¦X¾¬—v,éĪ—õuöŹUnZķŚ»ØöI ’£ĢüiY ‘ÜĄėĀ­Ļ'Ņųm倢v®Ī…÷¶vČĀ‘įOÄå6ÆŻŖƒ%łx”ÅÅR«Y™ėhE8wóWŲ·™&¹ō¢&*ō,?D:«“ %†łlŲ]{N¶×~ˆ¬OóŒ¢p|jjƒæŖ¹”p„ū©œ4‰ŁńŽ×dŁÖŅX4HåE‰Ņs;ĶCP^µ;­xķŸĻ}©T&RLC„ĶI‘ęņK²÷gрZœé‘»~…–%Ķ摺qéT$@>JˆłāŖó#—Ó)­ģķ¬Åż>­įŗ7mO±“ŌJ¹] %_㠊ņ§??Ūōšvź…Ń·×_i;ųLs/9–¾w‚¬/>ĒŽNģ9ž¹×­…’e4ƒnōP~Ɠt.Ōøł›ł~YĶjxWŠzōßl§ŠĮĄŽ—Ē ąüžń €Ģl°3Z6R÷v伟ßPā„Š˜"(Y°Ę8ģø­ĄĆF¾[!Rdzbyp"|× LoHŪ ŽZÓõō™‡ÖtRģJźāB•ū¼jĒ®Œu“č ÷ė~Š)9 éČ\~ä%¼PźųŻóö‚ŠV'ą6mĀė˦)ūpöR xĖ­&¼!æ’VDūŹT&čs’¾š›ØjkŹ-źʧsIk0¼ŌŌ‹&ÄŅ“—WŲś;/ˆ’’Fõē3ņæ’K:^Ļwp_­Ą†°r34<WO¬DśMJ~ÅtwāzoįŅR±lÆq­ó„ŖB«¼d“Zż&€ŽUäŻh· Ėā>ń7Ÿ*“ū±t’­ŅTÕ¤CóWį­qŹWž2ˆĘ¬×%PY0Šf‹O¹ļYē«YюOw®4–ß+œƒę¾9 Hnłf¼A×t֍y·*3”k6嚏·~ӌؤ¢Ņ,xé銜 ÆģYvŽī¤ aŖQ{ńōŖ°ŽMaįÄQv­‡•ƒźĘɔž~ęÕwSH¼O—XŖpšp3³|D”•‚/˜³ęTPO’TrĘ÷D¢FŲ4 $ńF|Ÿ•ß‹&L¬«Äq«č­!¢>[O­ä@¹х)$źÉšŗ(q§:Œ ;}½ĻėŲ¤bKlxØ”o†i¬©÷¬ą0ÕńŗĢonE‰Žfƒ5URpŽ)~¹ŌeØj5:oĮ~‚čĀĆ=ęż/ē©„—Ėī«@0žÄĢW|f9Ē˜Åeˆ14O­Ųi5žu6hŚA3IĶŁk>™¾–[¬©bĆ-xFėĀ»ŽL71Ų‹j9zhrl+lˆćØfØNCµ$Ždk)ֈȣMåÖü~W$6˜7Ł»Ų&³7 śžkĄ6ďķyóQrÖŲs9ŹIłŅaé2’Ÿ)/“”„š¢śb©]ƒ>õ¾Ģt‹qėg]3ą†ąž|u×CŚĖlfŃ.Å-§ )Ó6ōīķ?ūś} ©{Ā 5ÆPĢŲsœÉ’ČOķ@mߏ©ćÆĮĖI‘¢niĮšĻ+&S7†0±eī…żNÖ|A˜ÖˆĘ(Fuz„Xx³]g™Ō¬Ž·iŻŐœs<{#"ƒ½ųĒńeŸā}·^Į#“ŗĮ@ŗ‹’™’s®!*p;øī6n®eųŖčĖgS–Ź,-ē廓sņØańqEEi H[öķzjbåÆŚŖØģ쌓¤,XķŁ @æ½ ‡ŗąZž½ĪLˆ2 a>äO“ [7¬ĀBęK“mā/k.– ‚S‚”ÆˆŻ’‰ŹŒt~ņ `&qq×ܙ׏ ƑķkE6äa÷Eü^æW= iÆy-‹tĒˆźøgцhī:ūf,]•õ›õq¹^ćž?Ÿ§ņg;‘ĒɎęoϊ`Ł-ęE ŪCx)n³»’«ėČZʝg2œŹÕōp9§Ó挦iu›&ńüz’pA*źD’±ˆĄBģD$ōļÓΰCķ7€5é¹ąc!xA;į§LHć"Rj¦1Ą›Čog­_ yR×tKwšøq;Ś®Q8ØeYŃę©×ŸĖuŽń¶ü½ķ{ēõSĀ\zKzrĖFŌAvĮ„JQŪC mŽwh<:Ō‹Ņ©ƒĀA /KĢ\p_wXā/C–ĻĄd…,Žū¢¤4õ™Śx šO›;ĄOžÅļIk•Ō±qļLdÉrMżĆ"/I“OɳAO„‹KŒT“SOŽ;Ā“­ÓÄkæ#Lr8ņ鄏u¾Č‘SƒÖ>·Ÿ‘g²ĪY)„Éū ŲŌŻĒx­©­Čķv ż_·5)į&N$HUČŽv_M*¼ŸtgśøŲĘEFŚĀ¼2F4Q8­ēŲ mq¦ĖŠŠjA×£·uŠ£»aYRÜ^.1ņ«—@„ņi}o&™9Üd¦¦“ĻÖ1–(±EN^rpŚ«zöÖ”EZGæ~'޹€@„΁€ŽĪoŹ4q‹»Ķ #’J‰ū«± ×L“;ķühT'7–‘ܰ©±·×1žÅūęÓ@Üw²Mdp7 ©yĻžč?¢Vl mX$OSœ•Ł’iū»ć |<čŁQķ÷ņĄcż{[AH•×Ķk©•-,B’Éā1ĖÄ[!šéK<ļx½PŽ[0{žĶųn,)ŗJ„“žk֜ė6ŗå&“żf×nǾbēE¾õ"UįĶ\Ś£Į—šĪ^ÕGč@4\—>Ń ó7w~Ü|'žv÷DiÆö%ćuY,ĒŚąō£Ö1é53œbŌ‡¤r¤ÕöŸĆ2ß¹§Yīŗ÷}ź4ūåGPߒŗ&¬c$!ųµóņhšŅ©>wŃäį7؋Ćó6>ū[®]"Ž \!,ė$h ^”5Æ©ާN\Į&/µŽ,߂¤oøčK2ŽEā°[ĄĶŚr”›[Šg-£Ī‰Ž×ˆ‚•E”š4Ņ“‰ ¾3–Ž×kåM(fL'Ćś-#ļJsJxfŠcæÆKe ķ/źU½ŸĖ}Öd3xÅI§zйĶękąĒļ¬Ma ¬QC™.vnču*~"Ē Šßs}xhgj¾vGp_²„ČĻ o°‰Ō€»HR©UMN’˧«ÆÜÆ"Ķ˜PjŁv÷M)ƒ»%uй ėūڤ”*œ@ĶJƒ”tåĻ*ķ7å„„Ž"۳މ¾ŌYQkõæįš5ģ±LņŹjīH¹öĮ‘ÉīybķµĆ%|^ō“ł|¶‰—с@WvwÖyvńĖcÆÕÆŅęQĶĘw1>²÷²vŲNķ肿60¬:žl|9½4d”1]ū\ùŃs>ØŪŽy;Ųž–¼E¾/=aY>vz4_6¶m|2ųøõåÕ}ó3ĒŅOæÖūé=Ś×ū{œh,Žæ"*fy—X,g*“Z¾Ér œHŻ”ÆYl^/™`Ŗ(—ŗē¼ŠIżå†qWŠŁ=Hh•véhŚ+0NrŃ «ttōĀ»ņ1¬o„jÖ2Ö3ō''£d²ŒĪŹśØ– ‡_V ½šČ—§­yĄ§ČŁBŸ‡ƈ`Ė2L9eĒ/Ń:ĖŲ«yŽH¢sŻĮ33 dĮĒUÆEL³ ŗ«Č•ÓWOŽCŽźy/ģaį% CėO© °}ĻS}æzó_E%ÄF›ßC¹1K’]>õŽ4Ÿ.óĖ”«‚€šąs¦Ų©"ńÅ" 8³"™2©×7e=„Ž0:›xń%11}įŲ {Īxṥ½ė¦÷Æ «¹‹ė$—»lĘ’T7ńÄļńc۟`ŒS·:ÓuÜ|üA½Ņ Qœ€ ķSĄTĪĄ‰®E””ĶćVśÕā7`³MxAsŠDŸāL)†ŠŠĀ¬SvÕĪ”Æ t¾g[ō9¦€§© ńNBÆÉY °qåÅ9šbĀžqčļ°īęŚķ‘y¬c‡]„ÕD9R•?ŠIG čƒõ× ÆŚÆŒ&ž<]{RNģR¹Dś-Ō¼ dŖzO}:…}փʠįzJĮ_“W³ķœ×^SaC=ZwsNŌjĄŽ¦¹ĢŪf]z¼%ą3Žn>ČŠt\Čćõ× qĪā)ŻģØ-ŽEłµ7D0ś“,Ÿa¾juEŠĮµœÄÜ©¤ŹāÄļī—\4ĪēŅžM •īēd\ƒ„¦'Ŗ›…(r&ķ r[Fdѵ½³¬3/3–īPJmeĒéELKѳ?x€#źNa!#åCq…Šķū½żÆs®UŗīĖ®˜ŌĖ*/³\p©8įDל”>!ś×RÓČčŃ~£ >ć>ļL‘ ܓqyņb‹Ÿb‹ä”æVU – Jį<)½šZ÷P®. TµõŠyą¾bVHļ„M4ąKČ$õd²6³āHףö n;i;ō߃¤ü|ō󯡛 Ž nBÜfD¤·Ķ_ūˆr&äĢ‘¦Ń*bžé»Ļē÷ȉĄ³4 šÅ[ ą @ģŸcdŅ^—Óå½õ¦Œ¦rē‰JµŚ²ę+U—'Š-*sZÜ+;>(Ž)9LR­Sg5e~“æĀ=ć§ā÷”źÄWSSYQFRaŽ“C(źQJ±ƒ¹Ž¤ 3 uIÅußA÷‹ ĆŽÄ˱‰=`žB’'Śł±a€5¦x„U•ųē½÷h †¢ ŅySf:ĶU¤©WS)5ō WĪģZ˘ņ”éY÷OĶ%.m.}?J§)lþK‡…—@A2ĆļŻyźf¶§o]%hœ“=_ŚdµßMʆ™”BhÕXeÖĻČ~®ęu“) K8Æ©Č)Ā®“ÅZTp~į|EeōX?Jļģ¹Ł“{īKÄKlæ»Hķ1ĮLG ­¦ČSĆQ"Qfóókwų= æ×fö]Ę÷œWyōt$eūIó• ĆčVLø×Y¦ƒ™sĢ· īn' e–x‰T£wŖCµvIöɄ#–×3/ö™„p#–u zz»NĀ2Q’Ķ;o¾DįłWPž@Ż®…Eš…⬅›eē™ßcb’Ų—²“ćēüe³Œ.*’6zæ³ÅÕ¬g‡FŚŠ4÷o1G8kŠ–5ļīKŽĄe\÷!ūhĪö $”§Y™2TƒLÖ ącČD6ˆ¢ø„`~“­ŌŹ'ŒŠSŅuī6/õҚ`³ĒTóæ–}zü~ą&sØoü+ŠVŠā„ąŲ ŠēŲ¬ÜwīÄ éØłž(Ÿr‰2{©ägF™Ō:( Ķķ+š­HŃ#d’Ø+ģ0¹7ČÖ ŗ[$Jæ3nęä́bV™Ÿ]Ņxü×¹ -ŖĖĶ.wż].ČČØ’Å !qՃś×µM†”7€čøŠÜ–žxvĒ aĖõĮV † Ł&㾓™Ä\Œ*Å֐„¤¹Ż’[Pl÷ļÖ_ŗ|—g­‡Ā3i6.±‚%Ž:\Į>É©7#łĒżÅSÖ|T“ļš?bĘ'lŽ"‰,ŗ†ŗ4ōˆ”iéĄµÆŸÅFQ»HĖź`{›u zzž=ž‘ėč[†éŠĄÜÄ1h–še÷ž®bŠĀb_vø7ųģƒcŠšĒ›Īy7QMäųŒŽ<Œ¾Ü Hy%ōsćOöōz½õó*¦šō'·[±‘tH2lJ>ł Fš4²ī’4b9-ś:k‰Š× ’™EĶÅ„ ¬H(Œy‰5„ _.§Ō¶ōĪhó‘ž _ÕBļĒh”/‘!)¤:ę^X2*2ŽæhJR,=:ælxĀŠ…Y¶:ob«ķéLS©‹†(@=ÜæˆŌģ:wēµ­N¹J.›5|Xę’2Ńż§rØ^ĒaFz~=HŌ#LN€(Ļłõ¬»OŒµömŠ A^[\ŲģČŪi)Hš·ś³#,ם_øH |N©¤xP3väŽWŪņė"ę°ĢFŠ8xÄƜ™…÷•“#Š]‡±p8é×­g»ڼڤÓÄ¶Ż {³K*-bӈk÷AĮōĻ8}ĖNłT|»Ē'ŅøcæļūԾ٠äMXė”›S²€åŹT§NéŖ`OC[„Y~‹Ź~„å©ēŲ¼ūxęm'¶Ūž«Ī \’ž]Ē—Vp­2eœ^럦LUT=’¼Ń”¬¾äq:jޕµ¾—čVĀĻoåG{qX8–ƒ˜g­ćŅīU4ń溁”?…}ŽōGćŽFÜęī<Æ¾Ż”¹Ō&Ƹ訷R„č>k†¤õ×ÅmāhJV¶‡|#rś9ĆZĆ’I}ÅꄇšŻ:ķ?YĪ:pāŸtD·×†'õJ²_fk9™GŗÆų6=©4`hłµņžEF킿ң>Œ#{pEŁćz»¢Y’ß&ūŽkū1JÄĒH„ėØ$Š)§0’VĆļų”lˆŠBu”`ž²¶#i~E„¾ņŻq–²Ą©Ń:ē˜A-ś"uf–e¤»'’+é|ś «ŸuhfČqóųŠų±®¤ę+»Ą“0ÖGXtąälšJG ž“^”nÖäÓb£]*ä`ŠówW3ĶøWü’ß„łOOŅæĢdēOdĀ‚J‹ƒģŠEĆ騨Jöµrš†ķĮÕń»Öó=т„‚ķė5lvķõ·R™‹Ę0åD@ŚQŸ·²«»;Ų••De—ʧ„؈«ēJō˜–žöb SŅą>0Ź(H o0-XtĻō2f|!œXūGiŃ9,DŻŚ¦NHÜp‚š–,ŽźeI÷J'‹©/_› µÄw«RŅRõtØäSCś«Ģ2ÄOŽ.;Aiš)‚Ųŗ¤FüŁy˜ŠŅ_ėž7ü4_ä|øąøÆ;)Z7¦ ™C>`Oz žä_=\žÉžwU›—ū\ol(gXCōN’бC¬™’–įoPbÜ'Ōµ'²i÷Ź'²r”Ł’ŗė>ĀĢ,l‘b…¦S'EÕlżcžĒÄÕ~Śjˆ4påƒŹ7Z3Ž'Źī—Ā:~mæ&‰‹('Vņ€žQéÅ…·Y(R“µGĄć-fĶ=,n¼ƒs”ēt—”’ģ’6¤ĮDWóbüm~]µ>›žZ¼ó­+Mu1JuQūXj 4Ms×5\tYś§„'¦ęģˆWõaMj†‡G¹¤/u åžś]yL' W DÖµ±ĖlkÉpŸ!ź²XH‘`°L`ƉV¦Źģņ£Ż?»Ų†u|:_1=*ķSˆŗÕ";œą9š‚×³Ā)öŗ’ēņ†~Ń0į qŗ‡Įø»{ŗ„ĀWDŠßU“Ą-¬^ŠžŸ‹ÓĪ«Ō;j›ÜĶ^¦łäåj&ŗ£Ŗü ¼vXaCś®Ž/1‘.£")öœÜĢxņPÜfķX¤QÖšų¢ĆžtŲ~”¤7loś‰a™²k(F ²&9£ś!žAø4gqowÆżņ Å {oŠ$kT¬ž™Ķķ!ź=Y‡ÄĄŹØķ…£fdʕ_n¬kĪĪąāž’$ÓŸ3IŠx/Hę÷śŽü”ėĘZ<5’ul=~r§,Y/‘›6–FoÜMß.ĻŸŠ“aŃ īŽ_čģ-1ĘĪX}Āk°‰ōš½gÅL“°dÉ„”Ņ.±yW”³›jĀØ%3åä"ŻLš“ĀĆg„Ś¢ĻŚü=ĀKŠ‹ķēŌß`|ālÖfÜ0«­źłžžŸŹĢJéėJNæz`µ“6،DhąŪ‹'ē:›ōėźż…‘/šeÖj§bĆO[ >Ł',}(f½ū¦jŠY×&?3>)ķrRƒ(&+­œĆ›„Ēå3J§ÖćI9W=ÖņÕ~®īžēżóäĖĮćÉ&¹Ćlö?dÆ*`šqEŖb t@ļwB]–/·×żā}£ŸĖĻ<Ź,ņ'ļMseóHŽFų+®Ŗ~$s‚§•-„Ē MĶÆ ŽöÄŖ&«Õęuš{Ō­¤wūČ}6łÄ,?„ĆóÜŅŹŒ'–—X\ųžvH@Ym^”¢EcĀå§®F*(ŻēŅŲējӑ§\Påųf¶B`€÷X-æķńs‰&Ö÷3»O¾ĢÜ>Ū-H5¦V…dŽˆ;YļKņ +Eš#/~0«™·äŖ²ę&åPłó¹0œ+?ļe:ķšql~õ«CĀ/«n>±Īš—˜”ÜŻ«‡M1!ŹOék£¼†/¹Łś óļĒ‹ž³ū­‡,„D¤ Źé>š²]ØĆgqŚ+)j•Š3–šń§] €tæb]lņ,/Ńex…ć›™’·¬£3ež¦_FŠæ@½¢Œąõ©†7ė#ŚB«¤ĄeVłčMš_Ɲ©’c|+Ō}Å Ń^_p)eS˜Ņė~ąõüHVŽūÓ!{8|ńį3ŠĄŃ X1d6go"4Č·L®HŁöw+!Œ6‰Yęu¢KŖ»±rYÉQ …·@Ļu'ᬫ É»"FĀ ø@cAHƒģłø@ėäR{pn  ‰ŽQ˜ä(×ńƒ%'…Õģ,ł†LcæDSmSŠąŖX>…Ė֘!]'żQÓcŖÆAځjLزčƒĮżē½·–šź;ƒPA>w@ŹM¶"Vź)9"ģÉQ» æońGö9čKŲŹ-ÖŌaoõBˆ‘Į~YłŖćŽpõR‹_Oaæ’Š “–ę>ČųšÆ3Ņķ}Bģ€/$µ~F9 (•™fĶśŅ£ü.Jˆ¶ņ™ī£“Ē™ö/”»qĻ)@Įßn[-F„•ŁĄLĻĢė4Ź’z˜6Wā»UbmLŹr»Dq Ör;9’Ó½kjĀø“£/›Čć¼bŽŹ[47œa9u'‚5=ŖŁūkŒ*xä³~0)»Żž™Ž Ń×ÉĮ"@źHÜ§ā†ŸāJWŸźqvęJŸƒ§²YŠ~cV¹Žj¹ö™µ?ģcf朊֦DZ]{jiŻ{H±eĄYNßŖ+}WR­Ā.ļ °…"QŁKö:_œå„۟N­ą‘ Ņ˜Ž t|x Ć‹ī&­øĻ{–Ō~J„4nŽĖ»Ż\u=Ļ{®Įü#f•Gl?S8¹Ķ—ŽÖōŒpń'Säßhų;}H’IÜœM™ŌÄéķ°"|µ=O³•“ ŽÆ£ŲįFY—Īģ]¦€\">µœ¼QC­…ņVló“N¼āē‰0Ų½”uA黹-]x7/m[s“Q ÉŪS±ģ>ŠņYĮ>Ķ pŲNMźtŊiŠGi`„nĒą¾Ó¶°Ó3+‚l(6ƑŅŌöJ±!f<‡Ļ¹.ĀS.>„ÆšPš†nY>ż7ņÓcĆ“ŽŽū®õ2C_5ą#c0ųüUą¢M.É†Ø 7x*'0čoóŁņ8Ž…Ÿ1½ü¾ē­±tzC’{jpŅāņ”·‰W ;“ńż÷xėX3 ›ų•·tÓi~ói—]2}aś³žg&ņųŹėS»xģrIÆ;÷壌÷by4D"¼įsŻ\¼W'²Sƚˆ²?Ļ ØµŠdX:i 7Q‡¾ĀpšÓń†Č Č“9Ɠ]|]ń? <./æ—{}+ōė Ej>ķ½cŠĄF*Šŗ»(ė-fī×Lؘ)ŻkŻ7ĻŁ/4ä׋joöÜ1ū`L&̧¹(pēļļ—½sv<ė×ōz‰¶6Ķh杣ö†ČÉ+7ņƒ²¾7¬omö|iĻ÷€,-ž«.M„CšˆSß㳑r®Āķ÷y82öˆ5uQnƗꊓšƒü}ĢõüOޤr(ńśĒ+1ĆJšĪ–ķ}Ê”r‡L;’XMĶļ‘@™”ŲœÓæ«»Ö~žÆĘ„z{Š4”q* Q/äšwnP=žŹ6Éi·­²RbŲ’Ī²Õżūß„ÕA6ĒjnĻH}åčÖ9źOÕ=Ÿļ§0Zźpu˜Å •üłz锫ł!żA2ń&Ņ’Óé ”“^2Ļėö¾–¾|]ä=‡‡éžģ¢Dß3 $†Øä l  ÷T}":ēĶõ³Öa[ōÄ@¹7•æRó½/0.W˜HfĮH‡»\t—¤IBģą)E<]y/­¢²½2?å/[_šƒ· €@€³³éršxi4œ#_+Ł,“ń8F4fķ®L„„¬‰J÷É”vāOY7ė|ĢYAéÜIŗÉģæ„ų#ÅWŖõ”#ŪŻaŗėņ\ˆ‹ožś;‡†m\8ąAÉ9‚²šŹŹ Wģƒ pŌU g¬:²px=’€*„i”Üüś¼of QbŽ!³ū¦ Õ犤—OKģ¬H„&š‰l"g9ž llõā(ĪÄ cIÅ«ōÜåļ%ĄT!ŠLpØi õĀ]¾'{G&½¤>öfžƒRsO”‚LÖQ~“Œ`óŪąŌē–³·M(2Ņ]z‡t|Ž8¹=ŗ„ȶ9ƒŠ)(’*–=ü^4,i‰*ł"yxєEŖĘ†8}‚Ź©ŃŹõčž>›Üćy-!ž­e­9ź[žŲmmh)!,é żx „Ÿ40ę0Ė©ķÄk‡åä(Ī•/1'܌™)ŗu„{Z¾W“#ƒyō&„.¹¼²åĒx!'ŚņJō‡įĄƒ‘b­×—“q‘$7€ęDŽ„īÓåģ:’š–m1®ĀĒ'Ļ?0?¤h5L*q[Š„3dČW FÖėZ8ˆd>čßąŅ@fw–"+'†œ=v"O:8T‘¾JFk“_WsĪćPēŁ&¹»žU9YJ0ųŠ/žśŽņÆĖ'»ÜЃ)™|v„¹1%tĪ]KeĪģE ™#øYīgæ×ó.j›ŌŌålĄQžaZYµįqŠ7Ŗė!±,3,˜‰æģõ3($Ą Ćvƒ"™ķÆē¹h“Ļn®gžnĪ””*å cČfт‘°ÅŌ™ā¬ĄĪѶC=0ÕØrĮćÜĪņųź÷Ķ ?öć{sU3 4‡n·Ą”£_Õ+Ć Q¼§ä‰ū^›ķč" YaxmŻÅÆSD¼M^0śēŽų’Ę󒁖˜ū[ėÖļTČĒ0„¾=ĢEŗ·yÜ«ż…7UĮjnOBmVƒn…Īü/7™)ņÉĄŁƒV¤·āMä_õŌpżdŃ£Z Īē•õ²€H2bˆxÉŹ6|.wœ™O4½.’wŹ&³×&ņ•Ÿoe"ūĀLŻĖ“É<žÄmIĻ_m£WŪ®ü‹U°t.ŗn­{ļ–Ża|Ž’¼‡Æiϳ8ćM^ķ'\éAV B†1¢ł2kŪ)v‡^¢÷lĮC˜<čõĮŸĄÕxD'N"éķŅ„‚”Įż=<¬OÓÕ&F c“™JZoÆžš(vŸ†l!¦ŹpŽNäĆ=氍=—Yąź‚Rŗ7ČyˆŅŠy#o%éS–M©_ær«v{؞e1żõ¶•Ć Ü%„/'NĄśź<‰ćŅē”žœł”ĒŖxj}ń!Y¾ē«L®GųP8@…Ł“‚Ō¶¦“ąņ„Ē{3›Ć,ŌSłzŪ! Ūč"ōw Ä WŠÖ#2•®LBNA”’õŹĶ{S$,b`6Ķü=ŹD.ų|ĒēÕs”FŊŽPżĒ»jxšūr7å8ŠqØjOÕ˜Ųˆ^«&Č僅4(Ķ̐@4K֟?\r„÷`UĪG±¤}Ūß=g_Ōüķä„ž'†Rn¬až­ĒłH÷œÜrvĪp)’•,­~'å¤jSQņ§B}ø.Ņה[“ŻfŪŌ™•·¢ż~bćmÜ|„VŗŸógu†o¼¤$qēw"ÕžīGžJ—Ź,zöhćįb²ęĀ»j“¹̘Mˆ›®©LLŸĘÕ Qż[Hwb‹§ä­„VC©§C_ˆ īš}ZˆÕXæ]«ß)<ģ—ĻŁ‘Ÿ„ö"»Š6ī·°ŌöƒW•4~&& ģÉłżē-|ėtØ«o™ū>Ūž3ķAŠB˜­»ęž“T=NżŸ®}@t& 9’~ßį[wéPÉgūOų“;wĶX/…ˆe+*–Üąn¹wņ{ļi¬ōĪTÓ²0L "fKż·?I9µ½Ū£N *ŁČ!pœ§Aé^>śė“ó€žĪeŸ?Ļ£ę`>[±Ń@@žlw˜?õ%ēĖĆyŹK_ą¬Ė¶±ü8åWńb»ž³į'»Rųz/Eļ®]›„$/{•ļč›K˜~ų ļ*™” § ŖĄõ+² p¦«+÷y“ŃģõŽ6%[µ,7ķ<ķ]›óSŽĆš­ M­üŒƒm³m2Ō! 5oR7éćņš5 )=ŁŻõŽŽ’ż‚<Ł«2Ģ$,“9ČĻ ö Ż1ÖčēéDŽpLxoq†¬ NƒVŸĖZåחµŻ‹āõN°‘sæf >ļō²j'²MõąŒy“fČIō— Ki®7W¼Ę¾“RO›•A¢¶RsݧŻŻXėE4‘%Č“åńü]qåŻŅeœ”rÕōĖhV,)̽£žJC)Œ$OJ_€)ė8¾\l(aM:ŗ±Ą-Ų㊚ī?¹>6–lnœ˜xÉ+YĻÕÓJēiPŽt.@’<'v_ßÅø¤Ž…M³pałx@ĶXLIKM9ēöWђ§±ré·,Ó)f5÷/ÓJ±XķŚ !µ±%ŹTĀBK`ųDAŹsAŽųϾ%ž­ģ_cO¢Öu~S«|DR|IY]Qg.ĘałäĖ8j.n\¤»tž“GwrĘp}° ×O¬Čsļó©ŠŠ ]eū\†¾øh! ÷’5•;lrž{™¾Ó~j‘ĀŠ5üå2„Oę½'éŗ<ߊŁp=…–ž=µKœVöˆ¾Ÿ…Ś·ŠAšś ųÜ@ŖÅt-dŚGōäī{‰æÆ©o„¹ź`U]DQ—æ‡>8b…a®IJč,|Óü·Ō›7įٲ†ė,ä|J&ŚÓ|łųµP„š^ Å®9Œ”Ž–µ©ł3ī›œ—Ęņ“ĆĮŠq: ÅaÉŃNž›MŚ$žói z‡±.2ĶėaEaJ¹Ū—üSĘäiüLĆ€Ģ–V‰¢Įmh—²ćE”™)䈙Zīö8’>ąķd‡ŲĄÕÄŪŌ%ŚęVłųaˆš$NyÅؚÓöJŒ;ŠCešČEå¾IŅĶ,dŃ­XŌ_č’øük²Ųņæ<čŌļ˜„7JĄ ‚ŌڬϔęV;ЧĘqy$ĮßśƒÄFóėßVtX~€FJ‹Į“赯*&&^JY˜éÅŁ+v„$ų?Jn=]F”2gl®pķŚ©‰T•&6 Ń@ ŗµ Ń0Wņ‹š…ŲūåĆB¤K¼÷t}2ØÕ¬£ęĻ93¼§iÆj„@I)„Š5H)ū·gžøžD{¬ņkcŲs0ī“¶"FngĄóo*+1Öp%Lźm–W³ģӟ™wõ_j&Ž7Ķ4/M2€„ķ«P鏁•Iśż¹¾·ŽH+“­®ū©»Pe^®»g…לś}ʋTąŌmD+čr®SFœ ōŸB¼÷žh-ūóŠpP†C»#Ł4!T…ŻŹKf±µ80—WuŖ}¶ŻŽĆŅų¶ xRßx¹’½…VŠĢ$#sdń)#=å’æĄ7Qu·~”©xvCI°h> ßfäo\gŹ&kÄ,©ŃRźĆŻ{aŗ¾F„fB•{j‹õ‚,Ū„PńC•Ė|©Ļ”²Š»d ~ŚŪ¦„ömC„“·¦oŸy>{Gڊ|Ł:©ō“5°hqƧ9l¬÷’?ZF%ś¦6ķ.2„ÕTXĄpĀ4õikwĒO‘øŌŲ0sjĪŌv²A;ü·Œœæ„Ё7&Qė“ė•÷‹$/cuY¼q)̶:T ””»Śµ/‡SĮGB^ó.ø§÷>ū`¤‡iBvVŻ!ī>“äɆÓT] ‰KvēĮx›ˆš(Ó¢zÓ_%‰;Ķ”aØ¢Łk]ž³© ŗrźXeæe=ž+IŒ=šYĻļ×K€ŖI÷A»‰3ts;ä­VłoE?²±ŗ°c¢‡•,U$õ?SŸb’#„ĖżWČÉØŁfaފu-2™?2ŬÓ5oąZ/¬|˜ ьå%ĪCŃŻ£Š–ė°ådöWŹÖj,_ŠžĘöOJ.hĘóõt®”©_U«oj[¢X Ģjvū½Ā"ž”%ŖÆ›¤¾}m2õ-Z¤ę Ą@©?)Ž>YéÉöŗ£ļńÖĒfķO3¤¢Sy:=śķ«9Ķå%æOæB0ź‰ī¼¦‚ •ŹÆ ‡„Ÿń‚4ōyYÄ9$€¶ęšŃҽ‘Ķ[øA3īĀGś‹ø¹Ł›,A^bł­b®’\»f ómó}3XaÖćT’7zß&¼2šēō2ҳiŖµŖ4’6:W0w£¦Ņ,O[ųŅ7$؜D0  Ņ­‚V…ÄcśŲ™Š ŌQPĘ*gś£»®”ŠšX0-cŅĄķ ,ΊVÜ>kü½_žx³Ņ’§éüĪv‘Ź×zh„4%¹~ł$‰ą3åŠ|+zLp–+TnÄW4ÅK>6L“Ī)Īź­%`Ėł•ŸS’1Ģ]6~éWū<2ÅÕĀ7į¼§śŗvņ5™šy©ā†åqRX\nÓ6€ö˜°SzŚś–;eŌĖƆ-9‹½‹Ēų…锩ó”Ģ­ČOüĆ9š”fF‘›5<§õ ĀŻ Žs+1ĮX?¾ ¹Żž ’²¢Šcļ¾ä FnZ>ĖtY ¼ad6‹kUōmF/Ų”<2u«ża¾ŠŹ!‘=ČFŅņ/ klõp†•%CśˆA÷MA7Ø3Qyņ8éõ~ߣ/©>-ÅO|ŁŖ(Į±žĒ¾<ų#²äRŅ“Ö\‡IÓĖū4ŁK¤¼ō‡dKĻ÷ųņ½»‹ųńŰՉR5›˜Æ‚\3Rr2“>Œå6L­{m…ÅĘnąįCķg8d,OłFļĢĮĮ=ó:5NSƒõ”–¤öśŪ_”4©“ÆtÄOīå¾Ń0yśŸæžģ«Yw0>e2£&hų3ŖóÖż łiļŠćž–ūqMŪkšåõ‡żŒiˆŠ°¼G̚Žüq*AÉŁysԟ®K Źbē"]HóUēGDD_ =}Ēō³³ń&˜Nē2½ōŸŽāˆ rqĖł ‹rŌć!Ŗ¾…Ąˆ³yImėPD²vŪž•Ā×čĄē„ä=>÷/[™©õŅ NŁO•ŻJ̌rŪ]Ö÷ ·ożŠāČJgŽ”"Ą§P“(£°r°EŖAĻ1•[AJf'ļ„©\šŸ=©qoxCHS„ˆŃ‚4“»Jžģ³¢ā8;ĖžA,ŽVI‹‚i¦^=b—莩[3!“¼@{«TƒFĻHx½œÕāßÜ \›ųś»Łž ŪÅ;¶( q*„¢—„^)P“łżmĖTžŃŽäų8_9œ˜FźeF%²¢‹æ:l'ƒ¢o¾ń{Õ~V™NŠfEŁ‚ Š.üе*~ ņü• ÉW“b+ž„ĘHa1͜ĘdJ—wšæ)æMI#¶~Gäžqü~¾GķDi“f¾Šb¹Œ+«©_Ńf /M2cį÷ō]˜ēiˆ“æØ‹į׉ĄĄS§ēųxƒ7ާ)ViJ%ĖCIĒĶ{Oc HdŸeų„ gŠ…©ĖŠ·}æ‘G²B+X śõ©•9ƒ=ØT] ²äįl½č’™²qķ§¤U÷»Ä©łā*šī¢pO±`*°Ÿ½‡üģHē­k$yצõÓ)1>vEĄDr$iZZJNž]Žhź4Ü k¼]Ą§H¦°¹`Įtjž’hłęŁųq÷1¤ŸMÉ¢”'^µ§žóC‰j:K@`ß-xƋūnSć-~Ž+‘­°ĪŽö,`YŸ‡4¹5Jā­ó–ą=įKWÉ,®Rˆ·ēÆ;›ZłæńŒfŸĢüq€ņž@~÷½„”édĮ_’¬‡ķ ĢX8Üøt\=Vc’¶nš8愇żu Æ9Ķ|éēŽģ2»]ß<}ŗND•KÓCō”h(śęLџ“U«=£6¹ä²Ŗæ ŽĻŃ3ąĢ—ś:PŽ5ŲŃß”čõh³Ž<©b2ł ~;Ś²åĄ„2—½‚“bóÆ/`©Å/«‡¾Ä0Ö. —ĶÕč¤Ę6/¢5~l8vnUćŪŽ“Ī Ļž÷Ķ?=Gƒś–ĀpƒöO?yŸ—ä!#ĢIß I“gC_ņ,sö nåī_–wHĆLÓ%„ČjįJ̲#?ŻU[Ķ&åég^»Ņ^5*YXCn¹ŻäeZŠ=0®¹–>"+‡ąCf[Ł pœł©šh'²ŌʝäÖĘ«QZ”7Ǽ¾–:t!Œć%Z98›¹rÅģ|…‰Æ oo[Ā‚Ž%d}B÷Ae¶ß!ÄÖ6'¹øÜõ*śćƒģģl‹;BbQ/:ė44{›f,RūG¤%¦ś—‘ų·Łm óćoŁ ¶õ·YZ3ŠLįKŽy œļMV#ń‡ß™%/‘oC W’®†¤_͈¬-2AQļę¢@Ż{­Ÿ¦8W 8‡?1z ”nt Žė<ķąc$$Ó”å‹å©i²vį“=Hń9» x”‘nņē):…E·j»v+ͤqš£*`énq[åHšNć—·J;h-&H2ŽM)NRĢ,*ʼ—ØėĶØ‡½/½ĪŪČX5E¬ŃE~PŽūˆ‰M,~šÜ’éĆŚŪ”ēŽÜ+m˜ņ«Ÿž FN€=æ2™)¼M8ė(£RŁy-ńÖD¦Ē¦č±‘@ ž!)Ū~T³±·ü Är*ņš+ÄóÅW4O½«ū$ Œć'M< ŗh‘€ō- ä !‹&ų>Ui39©HB‘ßQQ0ųŖ§@UFt·l¤Šļ2ŖžP#œéT¬½·æU– ²g„s›Į‰Œč×u’—fTģP˜b/zķµ'|T_|ĪŁˆÖUŹrŌŠ½ÄåWŚźæ„/µo{±[÷̤Y>Ōq!ļųf6z«”Xņö?šlĪŗ«£P¬—± óĢp޾+rS@Ź*ŗ‚‚Ā=U8’°Ź:tŗŚ÷ż²·ŁŒ£B^­Ī¬˜‡Ž7€‚ŌˆČ;JŒ)łdņŒ’ō~ƌåhĖćߟHhv©hpžśK„Ūø“­Žio—ąĖŌ”zDPJ\K[éf ē7§·¶jKŒ¹œņ¦»š¢“÷ÓY‰£s¢’ŗŌąXŗÄįTråż[µÆw®j“c é R3޻ֱC© †ĆÜŹŅD «€]Į×eőó;bo7wa¹Śø¾4p3¢NDž‹S%ź Čüü¼S™%ŃN.NqŖæ{ŸeŻźM?ļTe ļŗĶęÅIl¢!ό“é2H7ģB¤xžI“™[7>‹ńž*c6L%øÆs@`cŒ‡z"a(µ>ŪąHż‰w°[E»įWu hĢ)O؁ūƒ EK7g~©«Z1Ŗ„ģK‚W‹ų|ŽdpϘ\Ź:¦¬É”¬ƒįMž%u:ćö$„ņ »ßUžĶÄėφ%“‹©—•„ öƒĀ-Ǜг±8 šŁ÷ł°œīŠłCĻ&W¤ó„€uQ‹·Z²Ń5õĮ-[œż÷M„9¬K·'ʇó$QÖV/žcQS Ÿg„ÉqĘTń[šā/óŪIĮŽšMØq3Uؽžy=sņŖ-æ¶Ēw‡BSä½ćł åÜo¬“ÜØŅpgeW XPO –ĖȌKˆQe£©ŲGrüȃ…Ň4mż}Ä|Źļ”ĄŸƍą³r,’zЦ—#Q‹~½ŠKezįŲ×Ö[ł%‚ēakŃĀ9čĄ^” ”|°4śŠµ©Ä“,‚æ^å2‰nÖÄki6³SK­‡_)Cøƒų Æ/]…ē[āX!ūTOŁ5Eōl„ėł^‘Y¼"K Š?Mø=æV3Z½ (J’°3»xŸ¹Éņs™śÓˆĀ=TČ#i® …ņć;ÉÓŁū~É)jÆ•T.½tŽ@£ä*ll¶†ĘĒFćr'‹] tæ㟠Čß3Gl9ŃšŽJłŠ“ŒH 4¢%ž9‘ķ^‰ł1^hŹ3žĀü¤ć֟‚VÕ«1[©[³%µ .ī6=<āą™38Ó<j)Š©øŌĖ1MKš$Ź¢Š×#ŸGć ŗÕy^)ó×ĢēZi©$×="d4q‰„.Y’&¦ ć°hHĀ›¹|ł\zī‹zƇ“$8=$ó•O§Öō¹‡BĻfüOÖ:.jÓž”[€ŌĆÕ>­k3”ņöY6AĪĪb’Ŗ†‰ė’[R&Cj'Ņ՗išĮ“ü×~MāĤ/ęQ/EwE9 ÕhÅ·ePUÆi|OĖ uāŲĢĢ©¢½¾o ń…ŒRØ×¦ė»ŌS{Iz)u])1]†-žO«;mæƒsvüŗS4ƒ:wzwsC Ō/ĀŌZ’]ŗ¾ˆOj€hƎ²’ö°¼ėŗ¬Ķ¦åž"™³ķ‰qSÜå·ćA÷WęķV\¶'[|*\’øēč*œ:Œ¶läp] f :µ€±t“–ŻAPčh‚BŅŁLÄ׹Ā=ż·®Ūچ¶ł™m”TP;>°Ć²Ī“ņGhŠO Ϥė+oŚžoƒĮ’W]ļΆæĒŖU£)ŠŚ’«5k±)Šj¬Śj¢­AķÄŽ»V‹ U%fP5ŖvķÖ|¾æ’’Õs]æēÕysĪ›ĻuīĻ}ßg\w«ĢŒĶŸĘFź|čßž­wņĄś˜ŹnµŌSYĪ 1ÅyS” ®ėµ/§LdRt‚¦ł{xHĖLsŚsn3ŽČ$„«~Ś"‰ źMĮĶmē¦Ę•­»Ėīe1™“V¹+)gŖō޽ÉV«aawtšqÖ¦tæ„QąÓ~»ł8h(¶”t޽XŽć¾īö”éR‰yDéĒŅĻĶĒJļx%ĮŠ\č… 2Ć<§S¶WŪ-ž“ŗ¶Ķļyŗd¼Žo¬—ūµ‰Ō蚼€w§‰ō"“T¹“š×–Ė]õÆDw(|v|—˜­žģÆ«š¹$£ņż'ˆĀvÖD HĘy^/I—ēĪ%¶E¼t˜õ©ž^’Ł‘ADzV‰t`0o˜šPE5 „”§¤kˆĄł†Ö­£¦'C<šÕ‰u¤žĒĖT¬bYKņ¬&P{¾<hu^ļF }¾ŽJœDõāé¹t˜ " ŸŻņ[˜—¦_žD¶WV>ÜĶ_IŻśG’ 1ŪŪ¦Nf–O޾šŃ“Ō”#Œ~Źõń”üŌ“÷?Ūģ^=”ģ°ĆOœŻŅՙ¼SžąmįŽž„ƒć4„õwČR’"šÕ/4‰µU×č„ųé¦*«z(Ī3,! hT!½€Óī(„`b§IŲ…Ņvܗ–„‘Ō4Žf.øéīCĄ!Æė/ OˆŃEŠTŁÓš}i–%×7m2Ģ5—h¦PƘš;÷€VpĢŪŹJ?‚d¬Ó…ŅBnī2,URFƒäYk†\łŌŖĪō6ėI‡r±.¬}ęatžüډ>Gȵū‰’fUdœŅEs¦ņ°±‰Ot½r敏Źv\š“»ŻŁ×U/Oń4æjҾAŁüĪ9śķtLÓ~§&ó÷÷ņ¼ßKĄŖŹW¦+ói ¾ļ,kµ!včÆƒWk$ÓŽ9W͘R‹ą7be¾ęUŪ‡aBEÄ=Ńtˆ¤ĶwR­ÕµĢ$HīóG½ūs`„ēęŅčÆV¦ ™Q䎥TÉ @“}ꭊ>»P’ÖGV–L „ҽ»¹ń¼dĪ”z¦zU:»i¦ś¤,Ėą¾½?^`ü0––€VŁ ;É·°Ż6pńdI2Ć}Ź>As¹bžyPkˆėņSąé(Ŗ‘9ö&%ł§ā[§ZęS4*+„āMسYLEń_ybž'»Üņ#ŸķiŃ»xżöAŹ(m+kՓҰI=&å“(®*®Ó„øŻ!™Üvįē ķ܀>béM 3s„‹ŚW}}Čį`Ƀuµ &gJł®rH į".YO¶?ԟ)Ž kʅŚ„’~X唺OžŸĢD0„łÉäŚ[ՏS&Ša±. jی>æźŽtæŠxÅšo°Ńģ³¹˜žŽļĶßö€žæļ¹ŚVљČ,½¤* ]įe(Ąņ4b|k¶£µ„“3 |ącsv|ÅšŪž†ńéš)#–JĘÆ.mļ>õ Ps¾Ó5ӁEd•5=gcīÜōń‚hęäĮäÓ’’K2i«ó"š@ēÕJIżžŸ²“tTVīėz{6Æń¼|Īż|ךó4šVµŖš’Ś(żY†„‘1‰Š‹”×x ‡Ó±÷F½X½qĪÅįÄNæ-ź(©ŠĮ++j“œ”ēö©¶¶ŽŹ4;n¾ēęIĆcIAL;ń4¤Iż£µžšŌ$F~E‡IwˆhĄ•źé!ÖlŽ®`2Ö-zĒ+b·ļ H+æLā_‹©9šV%T -|<É0 øŹ®ĻśŖ@ÜD³«ƒŖ{Ü;˜ š½ix‘H֝ü@.øß¾CpčĒÅg:öp£ĮµV­eCoŲÕóŸąx?ćÜ~Ø­§Ž\zD‡Eƒm½[÷‚s³ųĖäDŻŪ@Āh|D¢‹×•ęÉo{Š_ņt©H“s Ū|¬BŒ®5š’ÖĆ Õ‹”GRYM«Œ ™I9č½pyßč6ķ±Ųi=±lŖÖīć8˜93ŗ…DzL9–ö«GĆ£Ęy„[]ÄQķ”ūoOš€1Ö̵iJŽY°ZkØ@ōģ M˜Ę$0¼‰(‰RØŻł œ™ŗŽÜÓ ū»ó»F(UKŪźYĪNlyÓ¬n]Fz›+éĆ^uņ›– ¤“ŻŒžP f4CT”B42؁ī$ü±Uņb/"\-/‚¶.É,±ß+Oc×ɕŌĀ5:VużõLætųH£k•ZXEīŁĢ]眭ü4[B0ė;Ć\67}Ė2Ć%«|„@9Œo‚Ąœb¶˜ŲLīx]ę ˜Ó"Ó4‚ īīßźƒåĄUł)TĻęzŁ=Ź7“ŹŪ™a `ń™øŃ|–^÷lŹ—„ĶŲ„ ĪĄeWBŃDćżēD]iĮé²^śéÓ4ķä ģ HY ūŖ5'Łį‰Ü˜JbHXO€śo:ßm¹É-C˜¬˜Ę(²ģ>yt¦ł ܀^uz© yX”œ[ĆRųų뱛㯻Źē¤IP2(婀ĶVšŠ^b‚Hź{…õŗ†¬”c×ņ’A½›«“Ži+ēwŒ9:MŸŽK>+o›ų62MjücāžLŽśzhxZx§õ4õK?#ł@æŖrÓń|§DŪzólDR S’«’āP»cėę-žb“X„ö¶ßł— ֜ ×TŽžøĻm“?®ć²FJ¢å›…ī\™Ģlź/» ¢/¬J -Bfł’AéŚęV”¼°i\v/›U::ŪĪ^ó}ķŁlśkzßŖdJ[3`× 5ŃäĮźŃ*z±cŽklļDeg<\wĪŅ•¾6?ĄĒ2?1xoō€W’«…!īŹ›D£ZH†7E±OUŁĖ[łĆZé’qMŁŃĪŹĢŹelĀ·R˜p$Š˜0-X‹<żodĪŻYž„Ÿ{‹óĀÜ^§E©Ü/"4»7ė#•}£ŠZ1@Ø›‡=DŽm,\37|ĻéėIū>žēģ‘u¬~&[ÄĄjo€š·~tt‘ń°0 -ŽĪń3(īlīQxm;’č`³ža›LgīøCN--†O łÓ,NżHź½§UOķ¬TūMęyģ³Ńo›,«ŌN‰ŃqL ›Pرh (eF:önJ%}eĆcę„7/•ŽŪ éoķŹ3ųōÜŠ[Ńpy~ŗ–”hTŅåĻ— OĻ/<‰„ćtrĀa“ļŹgģŒ4&ć#õāa°õ źĮWWīę>~ˆLŽņDe…¾2J1 W IdÆ0 AĒØąmhj¶?žßéŲŻ;ļ[·T[–¢°Õ^Oašt‘‘`“j&š9–ĀüĮbB[Ÿė{‰ų¤1PŌ'õQ„…żłgōčüŁ„OˬhŪĀ‘ .‹Yčdóƒ"™˜ĀuJņ»;šõ’ųLųč°£‚ī¼BBŌżŖ½ ·s!’Ū7FĄ §BōĶĒü·CݛźīÅä—,ѱ•µżˆāė¬_ÕŅžŗ„¬~D–Ÿ9³”M ³Ēmq†ž ‡»ŅRżęN2“0l©ŗ¶Ióć½Yŗk†ü³¾ē:]čłbEõ\X4”W±­œ>é–.łŖY#!.š!±ŠXXrĢ)%X•&ˆ+/JAM`ņ42 ØA‡p*rÖÜ3‡…¹v‚…x%!ā¬żŽŁ\ÜŻ –‰’{ŒÅذĻØpŽ×QÓ±7€ś«Ź?źv·8xdM+h N“¬ž1r_~-ølmsiŠź'ķ"ĻŲb ą«"ii÷0$VLŗ×(4f—'ēś<ó[3+¶mŠ4MBTz® šŽžÄ«6šłöļn)ģsŒX+·«ŗYŗQ5Yf°°2žl;ą€K)zœ_aiĀĶų`± Ü rf¦Č`Öz%qĻDWĻģŅLĖ—[Õ&»…ĆŽo¼ĮX¦7@e°®¦F–<ź“2õ4žh;SwFWx}ÆV’OM§ķ™¾ś5ėĶsw€'-9žŻ0(ŚĄwŖģåīȈå†åŅŗ¾ÄkW«ęN³rā{$Ē­Œ;‚šµ–£˜Z6pÆä•š"¼ō‹,śš¦ö¢’G p;V„ Q.ÄęĄqÕ\óqÆ\†¦”s ōŻŠ-óP^5$ü–¾`Axmš2!gģg HĖ<n>Š|xŠ–ó>Šõ»ÅaĪN㊈')„pJßa-WÆ³|„82ż†v؈d]ęhH  Ģ½;õ`7࢔ֵĄq,V“müé3W6;n80Fä†1 įL8Ij~¶X±Ø³X ä”ų„? ĶŠČŻ»­`Öšwz…Ķ`ՎōŒqs˜Ń¾Rnż™Ļy*éYGÕvÜr„ÜĆłų)-¤C:?ųó%Ė„ŗ. ,g¤.%eõHåøø3`*םšĀ|•ūgEB¦ŻźnėOAå_¼žtĖ‹šņhCŽ=į¼ķ„óĖ;2G-µæEmo×Õā9]}’F®0ĘÜ΃šs®āæķb®³«Ų ÖĢ̵;W=Ń$ø$Č_–.”ˆ<±ė Ā=Ųö05u©T¹ęŌ ß"s*śĆyā®jÅÄÆ–ūŒØMKŠ?9õH#ž3īŠ„żžÖ0ķõ¶rÆ_ ž4hkc’ ąJL('ÅšŹ}uQ4œl3µ’īõ¤Ķ՟¦©č B+Ż «mx8‘ōޑʮ’­ŠcÓÅÖĶ«?ÕĪā=¤‘JƒOӏÜ8åߢ9ł¾Ō*Րæ9Ø"ļ “žÓ uTāÆr]Ę?ųօ_h~gdõī×ü uŹ}ĘīŚqn\uųĶpų3UchłŻ2Ó²`؂`NŚ}"sŃ׎}¹`a@o”"ĀcōKM³ł‡łé¦ Ö#űĄĖr|č-8”Bp-6y ę•OŽņ'ģž ³ĆĀ< ź#Lj$Ŗ¤š„ķķ’ ”Ÿ¦^Ž|?nŽ–n’Źl~Ę_ųÓ*ƒéT_'ĒÄrŽŽ†żgŲ`čeīsĢėOĒ‘Aö©ß›Ē„ļę¶ŹČŒ {JK”oŁŌĢ Z*KæŅļ[uؓpęÅæ±p“?ņk­15Ęā"Œ>¼Ó¤Ė°ņĄÜcŁČÄéRqó°č~ĖWāsv 46{%SśŃJ“sʄ=ō"—N]=ERŌ~3Jƛć,3• Ÿ<‹‚Äæ¹'-šŹ%ėK! k»ŠTł¢i&gG omO5Ü{2½_š}ŽŖ™Ōa¼śS/Æš¢I‡>.¬Y$öś²qŽPŗ}"0Ÿ„—Å™©žŪČr[[iȚJF”ā9 āŸĆÓHÕöõ§_¶Ī‡µśŚJV4mpśžWäYK7jŚv={ĄŲ¼óŠ.ł³=&́„¾¶Ė6,2u‘Ó-ך¬™@ŽÉ¦Éša°!t€‚•:xXS›ĪčüH•['|:M}*8‚Źó)bZ¶˜ĀXŪcįk¾ÉčRÓčG…e£eŠ+«D ×ZŲG1u\łmķ•ŽXŗPŲų+K¶õ3²²ÕÕ£ķeĮ³Õ{ ķ`EŠG™'›ß^`Ŗõ|_ĒÓčźņų!čI()õ/Z¾ķS,š–}źp}ÄĻź”—-JajYęČäµök3źō•[Æō)ü]Dł'cµÆg½ś0eēJ_ŽĀ¢W³A甯 |ŪO4Fl*¤Ö±Oćā›h<žŃņĪ}Cqž’½0ƒ@‚Œ5.Qī„uūßŖu(Œ†z–˜1?­ŌD~9ÅjĮ²ÕÓKGō>Ūš‡«ŗHņ¦<¾Ö6KĒJš÷œ‘HMŪĖ% Ä©]Ć”dõ_ÅäX{Q°“OÖ<{“Ų8‘(#_ü©ī»±Gō'W?µ5ě[źń‹ ŠPlPŪĖ÷ķąŠ'Ė AęW½ü›¦$5Ÿ'.?'¶¾j&”¾bJņhגĄŗ¼š °ĄÜ×;“{™ßłaČtä™@×o#ZļŠ”Ļö@*×1²źłéū‹2yī5éü#žücĘXlėĀ•Ø`CS„}ȌH¹Ō=Ö;|£īĶfz"Ї+UEĀ£Ø¦–"~EģBųm æ€Łk™Ų®Ź›Æśó–ŠĻwĞYx·DSCG‚nÅ)ęĮ.s¶+¬žšh–‡£%›¼Zr¦HW~ENĮtńvLrŚ»Źx38ŁóŪ"{ā'ļ •æĮƑ»†Ō^R§Ö…_Ö-wHƒY÷ŁßŲśešµ»<~>ĻŹ-× Źõ”¬e¾et­n4o#hø.üū$ī}÷f¶I5 ʹAL=×DyBV¢Š|™Ÿ›)ķ6SÜ6v.«õüČ»xv€dŠĆ5 éq3“Z#…œ ŖVk\·9…-Ķ>7īé%…`ęéné?+]hĮš†fńņŗ*N&Žłi9ōPnóKV5|½¬æÆā³›x“śžö™¬…A=Ēė _~;?/3é Īʰć}3¬£Mź×†Ć‡(`Ī·kķ§ķ«‘6“d®_č«ü5ĖqŸc TÆā“Ÿ]=ŗÄ%$lDĆSF-pQR˜&V™TÖŻ>“–)X½ŻC/"šå"Łķ(“Ń[p ĄŸa±ÉÆé®‚ŻZ’$ž]ékÅōœF‡Żń6¶[č`sµ|‹oĪ`ž‘ś%Ögŗx†±”ńYł< a½^åd‘Ņ÷NÜŚvēŅį¢Vnt=ęmüŻ#lŪ’ŒēVŻNĪø%Ū+¾@F`•ŗe<—ZMq}šV'Ž‚)¢$%-N· 1E’ĄØÖĒĮZšk[ĖSÜ[!öHb#3Ģ=×Ŗˆ —äuügX|™dļr!ÜåČ%żz/·»vöŽŲ Ō'Ö»¤źŅš/HͶiĶ€…Q‘įėŖASĶĻø”…„yķ!ŚŽ$XŸŌŖ!d²"d9Œ†aŽ87æ­±QTņj9„ć°YEüjšUžŅ†Rø—_ü s³%æ©9 š¹ÅYŽszYĖ$©lį?°Ā·²ÉĖ8™W¤$ėQ8† U½³ ‡ĮŗxŸ Ö<”!ĀŁąŁ©į6¤ goQ#‘Ę Żō‘“¤Ģ°ø¾rƘa0}µß…ÜžŽ'ęmÅńńęÆZ·£ūŲ³/Šq•«õ_GĢæ¬ĶŒ\é¹g!¢®'ÕĄ5ĶĻēäæIźŁ®­½Žło‚‹qÄ©ĖjAś8® h„}æĒu7!śSļŁ_…™oWk§†7€Ęņž ÉĄeÖ¹!iDvÅZ’ģ63#‰ (š˜•ū‡z˜īN K»Ē”šłōß(ųłćÜmŽ„<ńCüvb{ų¤™5„¼)ƒƒ…ļƒéŖt+r%›č’ųšSžųkn_Q‹„6HŽRÉq§ŽįävxČŠkœSČō·m׆ƓZ¶ŅS䏅·³O1Erä‡c’IFŁC™ļóėģ€”XŁŅzCõ’œJ93S“<~,„;ׅ^āńõSÖćĖwŌĖĀć„éšZĘ»mšIšz•Ē/¬’ßičō»š·Mhü2U‘Ś÷ĮȱFc{SU9d¼ļ„yą>BĆgo-ĆĪԐ¾Ņ]·źŠ‡oęЃ©6uަ}Gå‰RČų?»nż@‡…cš0KŒ ų6Ä ¦^$ŻŻd’ģ“f”éNp“j½Ę”<²ÕŲÉćaŗ®ĒąŌ¼š«<įŅIæĄ©¦IĒ“[;i/?'}äŠ* ÓK† WźĢØ dŃņr\ŽI'/Ÿ~—q¾_Å(l5šų`ŠŽĻeMæśƒ}HŌ+¬³öːųi÷}”@«Ÿį(qĪÄéY`–FŚĢĢQ^ ŠĘ éUȞ2)ĄFŠm›ć™wk²šE=ŸåźĘæ£I…ś“øžżCĮ“Ō­fןØOcšmгžI¤·ņ„$Jü?„’8šń Ķ!•]W©T²w5Øīxļnŗ‚_ģ †–ŹóqX-7 -õß]P :DŁŠč·ŒóÓµZs›zä mzžƏūŅ$j°åBHž<bhØ.·GH]¶øÕäÖIœ3Žöy1;ųNŻŽs‰+˜š&ˆ#¦ūĻe'åŹ5P}X”ŪSś»šv? b`¬åv¼AƒåKyŗ$Ņ'0ķiŠIŻ©Ÿ˜~Ā”įR?ĶJ?ݱšŸq|lZ*ČWĢł§éFŹŒĒsr8 .kCĶRUcišŁ[¤ŅL&äŌÅ É÷V¶+Õh kؘˆA{ū‡]āŸõDJÕ±Ś&›§beŗ³­"! ä“ķĄWœōūē6•Ž›2ĶĶ|µāž,‡÷įšaŌš15+]UĀź ·’›61ü½kRƆ¹ĮO­vhčĄÖ®tLEŹÅ˜2Ź=yįZ×xŚ‚>v;ż'= ÷ ņyņfß¾šw¹o±ņŹ ÄiŽ©õŽł‹įo™z,ö5xœ'°mį0§¤–q6Bj€ä÷ö”]«ń^Į¬ņIĘBIFbŗĄĀÕmž6äéQ&<„掗HŠY%.čōąńCäX›PŚ×õŽwify[şPƽĀüå¢"” Łė4×öO'»9•—Ż÷čń„|’QAM˜žƒV—VCæB¾N P0‰äWŽ Żó—§© ū)Ÿ©W6bį©h®—éUUE^M¶’& ƒüóV&{*Ym;Rś¤„ĘŌhĖČ5MĪ5Šį¤˜Ń…ŪĄŠhŲŠ°³ !ÜęĶłüc»ņ‹ “žėY8¶dć3ųzŅĄB0ų=””T4<ŸM)0ńž¦Ū³Ķ =Ū>Ó¤‰½ąl¤õ[¾ Ūy Jų©÷m”;łq^āó}»ŒĮūŽģć.?īŠ™3%ysX¾(„Q2aye·‹jeóeVĀī9U{“É |ōĆW,ĪK3-Ö&+ ņ-Tų0ło·ū“ä?ś¹¶-)m4œ¶nĻ䄉• ś>Ė&)Ų‰-łöń‡€\(Łś&eę‚ć‰ļ'ēß^©™ķZ†źŒ›z`tÆcóćć|”‡jŁĶ;žČ̼4ūœkCx ½źė{(üVvXŽŚ0hŠš•|ogĪŽ¼Yn8ĪIĮ®–otV2éŖßĀ’łeü;ø Ֆø„ÄÖH;ė93œųćśq™Łf5ø#žń³’ ą‘\Ōf&į“ōŹv=ßŅ37ŅĀQļŁ¬ķšDņŅ’„ žÆ’kü Ö;|ÕKvŹ>õ?¦™aā§·N½į¹ńt¼k¾ŠļÖd†~Z®Ī ęśŅæ‘“yČüž £ūÄ2Ź€aŗ„…ońÜž‹_£Žæ±é³XōōžOwc·÷FÉ{ņŪoÅ Ź’<šdØä8Ėzf9żęS`„Ę+o1Y~ŗwś¾5³aZnN‘Ņ1J¶ā‹-_˚Ķ:~™®Ę–¶­³„yM,0ĶS’–TRpońÜ= [¼Æ«Ž8ѰÓ2tnå?Šd™äćKo Ń‹ļæ…`”™åĄųxGU†Éīž¼~¾›£7ņN?k|æö£iø ī5o‘šJóQ7Ä3śųV}j퓳[Ü~éu¼U9ü¶i} Ÿø6Ō…‘ €‚čĄpJŪ;IqĶ÷Š/¾Zæ©g“®1O"*lź~ŻŪ7•EY(CÕSs6@wϦītQ=ž±Eś£Ó]ū:+‘T&0ĮX»Ž”8š†Pöń”ż)šž± 8Ł6‰Ü'±ŚŖ„#i¢ā®b=H=°bv ?H¼œ`øyØŗĒ ļõ™-ššč¼ecÕž6V¬ōÄŌ0ä²A‚ĶPChMUQw›ēźŃ{óĢ/äƒ]ŃdõVDÓ}Ÿb#'ģĘQ¼+Č ‰ą?‚°õö×W‹¶†§¶tĻ„Z&]}{œ!f~»dugB~(œÉōō{‡õĒ—k½)āø«¹Ę–Hi¾^¦•n„ėŖ{a9R?ū= bZs,ĖĶĪwµičŚjšńQ1,ä|QĪ%šĪč—:œįīyR3ēÉĒĘĘŚģ`„u©£©-a!|õķ „O—ŅuIč[2<(h°īüūĖN †ų Éqi`Jō¦ā°3ę¹€~ Q{šē‡6žNd‡į|÷ž’w;Ų4ŸYxįż1š:M0¼P’D¾|w7™Lß «‘ojOx¦ŸŹĘ=V^Ńæ“2ö)•#˜¶œ7Ģ_å }€ŚQź~ņź;{¦±'"J®$¤2@Āą‘sśČ#¼ł£”¼N#čJŹ”õn³A®¼fĆŖ»ZJŚČŪ&ž·vR‘i “É8/H˜•¼ąŻ“`œœ +FŗÖĀmīQP=ż•s2®cŠØł›°br)žé©ÕųX¢C§~›21o‹^1[Éā…Ā'Z§gī$øpĄsŠł-ÓŚ{tsHƒA{ÜP…„'Ÿ¤Ėv„f#kfŸä*z<÷žÅbŽ#/öV®x,8óī³–Č- z–:`HĖēsōŽ“ū§Ģ8¶Vėj˧ˊG¤7ń?Č}É+RǜäÉ¢iøčJ­rž#Ģ·×øå ¤ĮlįP‰§¾E­éŠ5óčx;£āŖŽ‹T0±¹#’ü˂湻/Ļęµ:,Ć  19«õ«•C/^†œ±hŅ~ßD–}ĘLÜ!µÕ¶AŒŚŖ—.»DŅ¢õ“ķĆN“µłkĀæŪ:zń럄LŲ“ø£m¬¾‹"ų­fģÄ@å–ū×C­ĮCD•6aBõßė_-ń¶ŸOLŻæ’"Ü2f+ĄņĻĆš×OįwA·żS–žĶ,ʧlINyĄ²µŚqL Q|ĢfŚ2Š©ŲH4RßļpOäD†niY»ŁāŚāŒ_}·W·ēŸuU’ «œ÷ µ4óĮ>Īa>šÖ%<Ż>žŌI(ŸŗY‰²KSÓ³ŽÅå§Ę¶F6+E§^–“yĻńwåjxZ„,>ߝ<][_ \„5U‹ ZӈTwU šrłEx/ē>½ģ,ZĢø.śµVą­FŅŅ€Vœł{¾KĶž‰ę×%M܎č>³gz’‹īµ[!HŠ^B1÷võø£ZšJ}ĆEŻrµĒČæ¦9 Z3†…Ū’.]W+SZ:;5ŖŻ1m5„†:÷†­?żņ»GŚ; Ģ±?¾u+w+Ʀ5@ó‰D…KśźŽN••à śŗ¢«tūŚ’ѕy®ń¾­Ig©¶’×¾'¾4õ8b¦5Ģ/-¤’ķ稊x>7£7>Q’\&ęøCń]k³)Õ#BքńŠ‚’śmŌD}dģiP„ĒōäĢni_ßŪi¾īµĢ—a7¦ąœ¾#Ąƒ§<ī-ė_LR£Y`±‚ėVźfśJɓw@)”°PŅA °WĒD–±7–W×@y£»ė¹tSxźC!jęąŲ€q“' i#L…¼sć.˚Øc‚PāQŽī'}÷“Ō:k8š•n)~Rš1#Ę«ę몘U•ÉŽEņxĀV¢Ÿœeåćś¼‚EĶßb2ß mnWž«†č^ė½õ"å€MØ«æU:®:‹£‹éØ®®:‘V^tEČļvŹŲc›”{Ś€^óčāeŠXżwjņWģæ Ź÷:óŸ~÷ ņ‰ŌxiŗG ·vå§xčœĘƒåųAō‡×ÄŻ§‹;‰­2+F“™ģĀɈŹFŸVBŌ”%÷:wƒ¶”åš”ł½é“šŻ? ˆ&³-P8neźÜuŚ…jx>~X墹t·cQhµH«Śųy³ y‰/rś›fXeŚļ׳<ƗŹ*ģ ¦˜tŖm‰Ļ•Ź'©Ö…Ķ˜+5õv7.mØåKY0O¤.Ą©¢ZėÄ 5Õ“éh€¹hišŒÉūppŲĄÉ1 GQ*ö70„Ėl’ŌJ3z÷x¶BŪ]¶/¬0:œŸźw†›?«īE²æóį_§w£Ų±˜yī3GQ5žxDIłĮjŚOA«W‡ß¾Pøō&CŚ#łŚKDBšU!H±²*ŽhČvõ”0ó¢āžæO'ŅŚ 7SųhMÖż@/”©ĶJGy!P­ŖšC€.žß½7ĻŁYÆąņ ÖŪl”|/q€ł Ƨ ü0>ߏ VōhöĖ!õ’÷{”Ÿøūns ½Š ā„#Ļ_1%uzȖ”UÜ]ß7ż]Bæŗ°Ŗ6ɍ˜vö)xciŲ0ƒ?PŽģŪ„Ø:JHDŅVæ7Ÿ\PŠ/RĢź^µI¼õµ'…–Å örßźoP!T¹(zIøŸķӘ¤®LĶŹ:¶lžōüm1óyPk7žöĖžĘ9!}³E«2ķŹw~™†ŸP«žŚĀ$z§‹jHĄæ„ĪłÖYŻG™§'Ā[K­{°Ū#¢ōRĆłrĶ)9ĢöWY!-ß?_M:ņ›Ō"¦¾Ä~}@Ģ·|’äE©…’7T ›ų՟žŌÓ5Õė\gæa ī,›™Œ;Żŗ-ĀÓrß°ÅųsŹyC¬ åJ1‡Żvm8½ģjpŖ ³Č˜C–źŁéÜz¹fŻJ“^§ūÄžūzbj©v7¬Ž=‘ī,¦PĆ«JŹd͆,\‹-ķüÆ“ļ>ę {ŻlōSH_üĒó'’ōļ…m|œmIŖ­*–5łGNęc=¦ūņµį”®ßąFĆdo ‰¢ÉpWš‚˱¤yu ūFµOj>Zž ۚ§­g_˜Ņ䘓«#ŚEÉ’“åšDG°œE³TCßō0~Ł•»ō¼=ŪĮ„ēūχ‰š tI²?Ń6½“ ŚŪ$BUēl;U I4@ń Ć0f%Ńź:‹:…)©8aśfŽøŸå'ßŃŖĄKRPj\Śå/Ķ­9Ÿ,¼÷ŽĪ#«VmGŠ#J”WźāiŽ{†‹ņŚ¹ēœ¬Ņ 6æń/¼9XÓ.£‰Ļņ 5\ÆPĄŽ‹‰”Q…Óp@UÕKś­™•1Źö†ŽŌó½Īq<>Ę0”ßRvs-¤®>üøhˆ2¬łT••+ųf| >ŖRųxjv|(-)«MC=–Ņšį©R‘ ÆcÕŽ,Į?~ęŠF1U“ÅĒél4ĪN—Žž¹Ÿ,žIhY±ńĢ:“ÕUį)ä‡ģ_VŠ&óücīū^^s -)ƒž‡¢•®£éW¬«?OÖøČ‹kO¶·ńüĻ,gbˆž, r’œŽšMŁžWXŲ!<šĮŽ…K²2¾r³å[Ł×–y&Øź"ŗ¹,X›ś ?AYs¹yž»9ćøÕ`BŸßĆčŌ]ҰŠVÉvpD°#$żśf{ślĒjŹć·ø}XČŻ%“-5ś©Ń™Śź.@ )«»C’Ļ“éLŖ¤6'ÓižÓµ)…kźTˆņI&Ś÷¤Šų ’āćL†Šs͈ķę-WbŠeÕŠŪšßL’$]iVŖ<ė'8 V €ć°ątŖv3•`[éčįĢ5ß^>CvēYŪ¶[e‘lĄciYĝ™0Š_@^÷yŽēY„0żR’Ė­8¬×čØ1ćš)Vü¢?×KLQgaµŹ!¢÷0č„~|„tpÕ|353eiÖżm# š 7 BĮ+^1ˆS£¢é_¶šVŪŁņž€×ÆjVcÖ%䟵­¾p˜Å!YÅ”}4ŖdļŲÖsœPžµĮĮaÅĖ·‘£B­š•œš"©ĄÉ=>2XŸ*µ1žĀšŽ w.2—½"ĢfØrōų @§Ø_$$O›ˆĆN5ŹÅIĪØÉo„õæ6ģvm ž–ft2`‰ļō…+†ÄĒA5ÆŲ6¬°Ą?§rƚų4<7ĄĶģ\X™Žßü¼¦«ŲеÄŅ?K óćmżŽwoõ‘įJ¬Ÿ„U)Ńį„ 1š¹e†³Ļwœč€ō;Śóßö67Q\āUBŹ’†šPu Šõü÷ÄfF¶ÜrŚuY½Œ%Ūō¶üĪZtlÕZhŠ­o"ŒÅė°¾Ą  ™ČÖŁŒƒ”«ÖŪjźĢĆį»&w²9"WV‚Pµļ F½ūļ8Ļ*ćėY(¢ ŽÖ­V;ExH£<ŗŒ©<ØŚN[Äņ/V‰dŁ)_ųį+Ķgl‹ūb!œ•Ź»m{‰*ŽĆą<ŠÓĶä˜QˆāŌ9’)N„ŌĢ$Ć_Ēw`®MZīkējø2 lõ+EMvIÕÆŪ7µsžiSŒ4ڬM&=æ¼?/“Ļ8ņ¼‚}Ė[¦ģdąŻoߌ„®˜:ņVįH"ćś¾æ‹iÉÓN†Ł= %‰w ¢żÕ,µśŽŅw( 2³Œ,xOŖßį,qą×ŗ3ĄŃī˜N_Séāy–ē›>żēūž¼Ųz)9؇ “ {!=c„2ŗB­ĢD×V¼8ŽznÕZŗ1#ü8VæŃK÷QįRź®…P2(ćÕsØ~—ņå;ĀĢ_^)x ¢=F=%^RSSĮŒŌcČ˹‰Č­rEšüe•Ež{aM7™”¦®ŽŅ21s•×n/Ń4K E=É]Fõ’xAdµą‰Ķېˆwŗbh§ĀRk°Ē0”bM™ž)2^DŠ…WP ČkNóY} ”žß× ČÜĆFĆø ±7jœŗP~üHA~Ū“L;ŁsžøƒÜd8ŽO»ØŠĘĻĖ+7D”żv¾łĶNģH“\¦ūJ§Ŗāžčs]č‡×ĒÉÄ‘r¢^^Sk–E:›¾:ŠbDq®±EkÖT²Špl}?ęfV#|-zĮ'›Ø[€D’{õį|ž“æ„ųĪķƒuīŚéŽføŽ§Ń ÖŪU<Ū2†£É3äj«Æ1UĒt‚†/>Ć ;D7Ø{6śrŽdæ%źų.›`žĖVĢW ? <_Ī—ß.·>« ŚWx€čJEŽó=åB†1xŲ B’ ±OQJš£-BŒU ÓĻņ t­X£Ä§nO¼0XĶĄI-W„a>ŪąŌ‚,³Ps”—‰ą{¤4fų¶¦É‡Ÿ{¢Ķä§Ćģų&·ī|…‰Ä†“W“/2l[”ag©¬%ŹD ²’2®(Ź£żä§Aū•˜uąU¤Ļ^–K'Ÿ/Ԑ_ ¼Ī,7“QōO9v%jü>Åī„]T"k:¾Œ(øŽĘŲżŪ<{‚$#Æ$ŖõĻ÷Ā¢SgÉ7Jr ŻæĻ õ~č ü‘I·.:'hķ¢Ča¬Ž¼ÉYWI}Ÿ|•9V@{(wś)–ó£²DrP›¹ē/‚·Ćbź®`@ΰ¦2j½lؚĄ*ž#p•=ݵćDĄ³Õ×=q†JœŁĒŖō#Ÿü˜aKĖä7ˆń(&%ÆėZ:įōnĄĖWāčbGĆfsūõ’a4įžA©Faƒ„!3IŽ=Ɇ±õ§ˆ@³„”ź#ć„4žwĻóśyaŪXœ"BŽw(łwx_f°øµzJ@®Ć»Ņ_°_ē±]™WO~%M¾™4ęŅT²śĘ^ ³čŗ#LHĮ”h¹Õ}MÅ&©/™Õ¤Ä-d¦j½.ßļcōN޵ōšœ0ģ9m|ecź"J„Kš3æ,_ ż“Ę[0/>ƎĮ I@—:.«nĮl ĮÓ¦§I+I1ƒÕ㨠ŸD‰~“E£ĘsØ,¾¶6y¦Õ?¬v±™č‡ßĒÅ->1Ł’ćÕ=;‚ī: «AŖŹŗNj;±fGĶVe¾¤­®Ū”ācīAj[Xi$Ż3JŽ·€•ē L’,Ǥyē¢oĒ×ö¶Ķo›©®“¼³˜2mK\Ęǜ'ÓTč5f“$pŚäU­‚³”ʶīyø •ŒE¼–xŠ0LćAT&¾ē0ÜdSĆĖŃč^Š9˧>śŖšqõŻn®(AŅėkü¹†ų÷®•“aћWb>+ā’µ)· µpź;…ĆZy£Õ²k-č:¢Ŗä€­÷ŸżY*&Ɠż2'š×—®cM ü‹*zxĘĻ#LNM «kžGɜÆd™‡Ž ś%Uü¼k“]łžyz¢)D"Ė›†Š0ó”ÜżāŅ“]*÷”XŁąˆ}ŽĆö”ĢĒėK/ķ’*ĻūTE”6*_ćŹlZÖ. =MĄ)Ņ$eŪL–§ó!/™%¹ @t•’é˜vcųōl+Ż’¼Ī 6½ż÷N¦œ_ P¤y’cd§ųö Ōń›ÓļśSó‹S}¬a‹ ųÕ[Fvŗz9‘«é"Åņt„B{rĀŖå#ŅSKütōY«ž¾ąĪĘVF9•æ„ĀäŁä–†Ęoo›ŒŲ]W#¾”š0ź ī÷¬÷‚†ćˆk ö©Ÿ£3 ØžØöAåsJßĆūĪ;]›3k, æxHĖŪ“ČU( “‡$b?ÅŌņ A\²·Ģ·4\«Y<¾qÆū^)Oōį)¬Ńęo<¬óW‡QS€–98č6]~Łž‹ŒnfąĢ1,@kWkҟŖ×į!Hx¤ƒW5\ņŒG:ønö^ ‰ē’LĆć»^„Ļok@$r€PÓ+±2i0U²|éƞCżChˆ/ļÆ;fyVn <8>ÓSŠp’ÅÆĪĂUК3ČÕö–ī¶=>Vk„u’ڱ.%®OōJU1ČŽX½ČGž(˜ąś]-łāėƒéž‚aēæb2u >^,L9iÉX`' „“f·ó3kęŖÜę‹ņ?N*ߛ×śŌ?’Źį ä¹Ėžvß®žąXKøČśŲ¾»šĮ]öŌ;Æ1їÖĆctž(S‚а"'·A®ik$¶Ó­s“‹$s°RvŪ…YԟŗĖÓĮšßgź³×v¶PB/WŠ“DŪSf¶HxÆmü|"ן–(_SY^7ß&Śń¬Ų’Ķ‚BÓ„’MhĻ`cOÉ7ąĮq®L–_YDoD–?ŁÕK"̐/OMÅóß«#\`)g%voĄ`ÆE,čDČć©ÄŖ¾^l·Ž‡•^”…bņ#9ņ.G+šķć|ҜK«šI[S=xÅh¢ÆŲˆÕ²7ÄLg4ŻĖ;O’óūłėEܝ LeÅieijBˆ]r”³p<–EČaą;»ž—'›,©Ł}6¶øœ’qVP²’Z.³ń¦Ö«ŸāąśĪ db€žĶ}čų]ŗ£|Ņ:-ˆoÖõ7z/n½2éDOņå2][”?ņŅ“-źłkI¹ĻTŻUBąj{ ±óŖŖ}'DĻč¾Œ4ˆ›­øjU9Éu± ²ˆjqóy±k÷šFŖA¶ŖŗéŅŚŸuh“S„ƒƒaĢgO1 ‹_˜E½Ž•Ź€›1,'lXśĪ,ø½‚Ū?‰ķ#¶ńÜs”±yh’mįķśŹS(¬žČG±<€zJe+|H[:ŚXfevĀĒ9*^/ß4%Ś„5Ī]kYAē5Ń!lŗ:Žƒwše.ĻæņįqBśĻ‹& G¼(Š€0`s”˜ģ¬ņĻ>ÕŽ5”Wy“Į5Öä'—‚ÄĢ~ˆ½ƒ©ēŒ‘0O8€­=¬¦ōāÜ<ŪŁ³ļĢ–¬»Ā€UīŌD{ÄyźĶńiśÉSPV%ÄDü9ˆ·žŗL"ć~æńŃā–$JŸ•ؐģÕbą~?:•F掫!÷żyńœfĆD:­³0‰ģ£.{Į“©·ÕÉc7‚-zŻÜ”š­qŃ«ćņ­Ēųźß>Æčšąś%wD7ŗŒ°ĪŪ¤x§‘E×Õ¦,'ƒ{Øō™1¼–¼‘Įgņ:*jī“tŖAjwg†MĶ×XƖjv=mœÉ{Š˜–ž– ›HŽō.Ł Ź>a#²Į"ėį6½ėNę6ĀLyĖśm*?W„_ØżÉō²­(é[~ņSi éxżē¢ź[īĒŗĢŌV1„é‘i €Ā9¼™ņŠA„µ÷ć¼ĄbČóLē®·ž8j£”½AlŠųLXżpSŒ ?z¦Dž³ģē¹{š™Ŗo÷wČ÷wµPįWśI¤g%ıźČŸ¬Ę’ŸJnPm½gž®åč×g8·ĘI‡ęwõlUH|X}_cJB¹ˆ0™ģŠätū$ž¤õ7u‡č:»;{Ģäõēuoüõ– Ԉ¢«kŌ××k©ŻPU |#&Ņ*`xjć0, k÷…0ˆT˜ń\oū†Wדž†‚x=ewüp²&I‘ØWL@ƒ[Ąa@ųŻØŚ‘)¬Ö©u„Z Ż&]į/ąŹ#–9ŹžĖŽG(/ķŖ—OĘęĻ¢ĮĻ÷qķOŠ&˜:JLeQˆķļ×2…o'öįE(ńŁ©7m攞‘Ļ|iVlŒ3z&'Š˜ŽāÖ.E“čā“ōĖ1•`¢’ŪäæÖ?½jŁžł]NĮč7śś¹Łwš’ŒČĆXAÕ5Z”ś©Ģ[ŲąĆ#wĮ„‚¼Nü“ŻĪ^óļ)Ši±­,“f’[œwČ»÷ÉsĀģŚ²ošą0'@U %ć™&JQ›?.Õ’Ųö²“¾Szš©Ü#'Ē„ćRœć“:Lxŗ:’>ø¾“ITó]Ółŗ(ø¹B¢W³å/&FžJ ˜T§+{q›1,‰ø8‚ŹLŪr;Ų ’ƒhckK²i«-J»}6+p6åøe5Ł$3:ń„(”ž_ČåžcčČ)CčeU’Ę ‚žą©×x³uÖÆ ÷ü†ŗ!‰fČ›Į’P£’½ųWF^§J“Ś·ģ£I—Š­lÉåłĢļlĪ3ų'flåū„ •ƒŽ ˜$[F¹#ģRuuóĒ-nŚņŖ†ĻVµb œ:Ķ¢eó¼ŽčXR/…ŸyG8ę€DŖęIWewéŃĮ21=5ŗr™‰I©•Ś0įī^¤äŗmŲɇֈW{œ³>;™|Jm_ŗŻM~bUövS£Mr|}“BŒž²ē“ ²žßŠc+°š("ˆĶ1ҹ]šv±ĮéV,m\˜õ+æÖ|šXC_pŗ5]‚²é' é]G+2R)Ż­q·ø'żżł7ėϦOč³¾-;JāDžWU Ö«Ø«¬āa ”WŲ·®ü%{ĀĘæ2Ž,}Eb7LąaŹ»ʹżw&5dę£/_[ł½“OŅśeėąøCÖŽĀšč`@ĪŻe’Į‰Ÿˆœ>Z£,›ø¢ŽnČł~ƒ(Xhł;­a8õļåäīīźÆ_»!Łg©÷Üń'cōĀ[é‘[%Ģö,*DŁ«šó”deśŠŅ ÷dēd—Ā7ǧ=“  }`łPrż”ŽK^K™jš²*fö²TožüĄaәĮ9öqLR1„ŪØæF揷Ž7ńX qŗT£ÜGQqõnį§Ļū‹uƒcFÜ’™<±ߌåĶ’ÕfÖųzXŒth &fl³ļW< ~OėQß®÷ĪC ˆiiŗœ÷–”>r·ó:ĘpüžĢcCÓVüš'™#8e=W—TLcdDušÕņķ«¦OmŁŲ§ŻOhŅL™N+ ?Ą·n‹ļāó’T±w„tÕĆ5Žķ$HW0#*š-qGł\źś2&>,Ÿö˜™c19QŸĘŌµ½ œ„*©„©ÓŲ¦`X虱š{øęŃõŃ~ačaCZyŒØńd$É_Į«ĘņŻ×&ļ5q®ECø0:h¦nL矘$^~yHb’:'&įŖ¹!PcŹ#ĶsÜŹÅsUGŠ”0j–±JźĒĄüB~a“ćæ5ų įõū²¢m™jŠł+Q§ŗķ„Dņ¦7„@ž@æo$ aģ±ze‰šq;ū£æPŖgẎ¦x<×yGŸ±ü?ą…Ęsr“uéö—Io6n v­ą® į9Ė­(`,ć£eˆ)āī•„Ńц1!øyAĻ_xדO‰W>qa į­Įėea“½©üc«Å¼ņ2;Özpŗ-k'¦8 kPž®"_ųšą÷±·”Ԛq‡†(UŒCŸ=%kÄGĆļĪ«*qlģārÆčīŪžŽ_*3±r5; ŹØx‰{(?‚.‹üSĀ#­č Ć/$=GōļIW –pŪŻiCv*,»Ė֎öX$qvVü€%‘ ģ »µ÷'#^“·Ŗ¤h”ć˜F8€äļŽP­ ę£ŃLU?ķ|g\ĢnźMzŌńŁČśŅŠVžŁ0 ˆP¦ä$€)£Jž¹zSÕGUĮšˆž(QPÕM;Ł@ƒŠ.Xé§]XØ;öGc¶›Ć“ĪJϊž0ÓOIó›næ‡ 7”~F“B4v"•õyļ¦z¬q>ž_'¦Ģ|ŸŃI Ģ–©j|Pææ~ždč”/¤äd’j*üč§į«xl!ųŠŃńZB Dītز>-įæ­*:ōįē‡7Æ=?ūC`ü؁Z4}‹!“ƒ“ü:Q$į3ųRLĆŪĘ”¹»›¢ĢR[AMŽŠń _ :(K 1ćlÄܳ7IaOąB<6¹›µvD”ē86p Mr8„$ā×? =awō©Øn¼æäßĀ.ø‡®Ż„¾‚Jsé4ž“)ŖK#EŠÓCēҬŒŗĮmJž@¼ņuåŒI²Ū’o[J¬ƒ*„˜{,HˆY!ϵPÆ&±”Ģ}ćņH²Œ!ōµ-Y„ł¤ĮĘ|¶wĢɶčFŁh¤upŁ†–9äŌ£™ĆW¤ÄOo°„XĪZj"Q«ĀÄ ŃvÓü}TØ«jż°nي-AÅÆ'm~¹ų7ŪŅ “eJdj[ړ탱r”’{äZ+‡·-Bx±- ó“}4…Ų‰WL—};Į‰Ōe»HÅs·Īŗv/†mˆw~wœ—²Ōóx«ėÉDс¹ܳ±Z='čˆ5 ’Ä+ÕUŠ_ Ų™*v¶é=“bŻJ}Ä‡Ž¶Ńµšś‹§äŽ<ā®æoĒļ’Ė&„øŠ](EŻē‰³DI”Œ‚·DnTIŠw˜õ` éQdžX¬½9;ĀŌiŌ5ÅXÓŠÆKķŲvįŗ\ü„Z›2p‘ųāŪi¾”ŲĀćIž Å“³TjJŽF“ņ UU÷vsn“Ķųt^•Ö(EždøUæż ¹čN³³˜'lHĖr¬Ÿ'«ž$Üv4IVĖųØmLŲĀŲ<‘ŌPSߌų6tå»Ō”PlŹ]enŽģß}D4‰7”Ū¼ę‚źŠ,»Ų¬­+œSĀæ×ą©ō’MĄą}§†±×r r—Ż\7āč”ē-Īד@£mćlbÆMeˆn(Źļ“•O~¼51„p ūˆŽ¶ŠŠs—ČČ\¹Ļ’+OyL„ĄõHš±üüC«9Gi~=ĖŻ‡L9¢ŪP>Žteü¬IG%śē‰¼’,=ÖaBŃ+„4I®„r„Œ[ŖŪōQ=b>¼Ņ Rڐ•šhüx&±PŪ_¼»;j!Éå5ōŒÉ?¤Jv%-Œ]§Į÷ ė»X掊¾jś!•8Al÷„=u\jßcV„z&<\?ƒĀB“ė§¢{Lī߇ėLNo@€?Å$FoĮ™&ĢbÉrüŠsÅ –"`P5t…Ē-“$ˆ–šL»0ˆŌ'HJ1Æó"P· LĻSō}› Bæ„ŃŁ8õΦއ\āĘˆ':¬BīĆsCźļ\X¬Óö`.³jņ¼ü ųćńN‹µG׏aKYŗ”Ų ?!¬c „Ó}ė¹Č7Hę;w9ßł«`ŅæQ’A-t¹ĢWü{$’a’1 7K‡W”¹u޶£äŅō§%Ø<6QÉłjŪXō1{éGµ1Ēe®­g÷é]:ŸīŠ ÕeLµżŻ$-8M»³@MÓęĒ€‹lń®fA™ļå“H®uŃ Nõ R‚)MX1õ‹ÓņOŪN³oB…6Œ 9>ĶMŠĮ,ė®éÕ¹?q|jJņĄ[‚ę­F~œfIOĒbūŠźMJ õ É`hĀe2£¤°u]š¹”$VvQ@bDž“'/Ją‚,éĻķĖ™4”Æ÷Ńń“†Dś¶¶;ė1żrt Å-L³b,` uåžŖ/“i4QwČj"I:ÆĶh:ĢĶt-ė=R*ž×§Ģh“n§’Ęl[“Ŗ U ĮT•uĒDą˜ƒēŹē›]cųž¼ó;żä³ųö<ҽcŽ'ł­±!—š­cõ~S€VĶś÷IQæ)žIs㐹ēNż%āhRÉXFĄöH\“S­¶łNĀgÖ —}Ęt4ņ«$’M꘬z›ćj,‚9öŠś"ĢŪęžŅ‚óHÉųš āa~ŗōƒžgµÓŃ oAXą­”coT°ģ‚\vDŪ8Äæc’Ń .öÕƒrlz¾č²Ļš’WŻ®ėZvōöv'Ń ozčęļ7»½¼S‚Č2yńTˆ`NŅ|e˜ZŹuk«t_ł0„µL ȗžżŻ2ķ1šńhj Ž‘“ś1Źj@śvMM–Wõųu§„Tæ…ģ£Ą @0?’Gķ›pÉė,kĶc\WÓ;d®vŪ æó,ōk`ÕŖ!y@Ŗ¤„Qņ€’lBŸ0÷qæYfkÓ¹Įk­pÅT¬ī½!Å PŒµńÉąWWĶĮlæš³“żšĮ1\lĮ ?¬¬üųq“’s9-śnŅ›°Ć™īĻŅĶuŪž4LĮūu+öui%ŲtTŹWyøĀ²‰2,©q£"lń]§B"Ė™µVų8ė[tdFģ­X›Ś“”*wƒÉrj™Ž‘·Œ¼ņb›Ēé¼Ü„ŚÄˆ)¢‚¼ŗ?¦ZŲ/X+“br°š.Ķwp‘V‚?Žo4”Ø[°‡ū擽āæFlTŸėś9GŻLEĻ_{“³3ćĒĄH|’„¶÷LĀFƒÕŗŸÕ. Ÿā?ĻōļŲ5W¦Ąh]‘Äż\ÕYļt©éVDˆĻQMƒ“ZŸ½Įæ,Žb$łßi$uxŁ@į‘0(\‡Ćh4³\`óEŖ•‚„fŅZĄ×FBĖ’V€› Ū{qR[\ŌźŸmqÓB’h©Øļ©Źõ qĻŽšŪŪ—üö |ÉŗĀČz.;¼»œĀć-©¶¦ą,+„Ėj鯳 -šéµ°Ą/9d·ÄģI‚­V§®„ęę Æķ²`ÅōQXī…€(D"kŗdeæ} ĆæÆA@æppW{ii& ‡ā#ÓdQØāå€G ƒ £ŠóؼB¹”p\ņZeę?dĆӃJūVķļDš¦¬/‹=7€; ꁚž7˜rö2Y,OSašp:Š^"4Ūų‡éńˆ ›ŁŽøµŌ7XLƒć0*AĶū0€ļ\õŹB¦„6ņŸiķÜŪŽ}ōÄD]…ÜS¢į0 łķ'3§aGŽ#ES2`±Ņ}ą—-ßź‚†} ķ ˆµĻ¹pB~7:ŖæĶŚČGź}g‘*ÄųÖh 4{ńŒ…}Ž.€łĢ ņ9ujÄ{‰ 6ĪO’ūü’'ļ›/ü7:’‡CēŪÄ„“Z’£,,æŠŹ õīSźnN½#Ģ„øLŚ>rłld-±Š&–óŲ3Ŗ F„ŗœMĘĪŁ“ź«ÖLåe[! ĢČ[H¢f,Æ·TRKØ*uMLÅy]żēÖÅDųóŪX˜ńå%•”BxØ*7(µˆeŠĆģ8āfČnŠ61½•ŠnyŃŌI&Ė²×žŸŃiüeŁŻQŅĶbIʦ±*ß?“`Į- š×£ $ü­ĀŅnf5ńW­Rż™L-1Õ™2`³€P?=œ)ķöjIŽ {ÓĻąŅ%Ŗ¼s]FcüĆZGÕž6ÉéŃuGdcیäż\noĪ<×ęA½­Tˆ·ļfz²tåÖ#Ą ÕĢī¦łĒ3R½ ­>ĆrĀ ]dfõgø•G6r„Ōdˆ#Ą„ `·Æ†W4é¤čÕN<‡ēė؃4E»j ¬x3jøųߑ·ßA•†iœŠqΊM*Ƴ'D ȟƒvģS¦a:$wN~ÉįP0³-8óŠKÉ Ėż¹ŌJk6ńBf‹«e•«/ƒh“|'ü28ĪŗF%$ĄćŸ­`ŸĀ§Īę#QóofšĀŅĆŻ4FrCA0ߍ&†^łĖ'sŽ›c“Ö”q\pN õ1jj%nez/b׿ÆY;ĶReź¤ć?Z°%ˆš.—?·>nJ!⛂›E³ø[R§°ē…O }1£BśvøÉĢb M9ŹnŹ\A5U½ŗÕŹݱ°.“dĪžb“nt‹6PLĮ̶٢3/åÖsĶ$ńyä£6­³®®"ĆBŲ”ŚļUÓho¦­ '@‰?HŽ­5ښ”ݼ`0RX…’T’ŠJŽĖ~‚C먖>µ•¶é÷¾Į‚¼µ’­L’īs˜ķ”«Įæ·+ąO 9i‘Žv[q…ęŠčKÓŪ~ōBĮPu8¢ Ņw®?ȇ‡ōUl„÷xų¢ŒA¢ŻĄt•DÓ¤bŠSÖŖ˜_ķ,ß]¾[ŌV4śdš£\j›ŹŪEˆ„VŁHMüķ²cßü€]¼”ķĢŁbŲŃ,kżOFųJäxu—KD’©GŒŖRWQœ«ˆ°ķ@›Ö°¾µ6a†/åzĀk ?Æ­LQÖŗ×{P~Č*×:š*Óy—Nū§1n±•Ck Q! ’¤K»sYŹH½ężC2š‰dH•&ÕŚ÷*{:5„ܼĖ+Dźˆ/ų¦ŠķÉ~ó-HHõ`ęīÅźÓßĖ DҁlÉmšÜōÅ!,ś}I–H8ŗ:·&yu¼KóNūõī3łK!˜Ņ¼c•YĮ«2•<žģ‚I‚½ć…ŪŁ~.ūAHljOÆŽĀūt¼„w@†ęˆ¢ÄS’ńļGż%p­Ļ%Vµ},FŌ—o™€µšė¾M–”J-pC§¼¶ŲĶ÷ĪŽ§ėEĪUµY|¾ŪšäpCåĖĄ8ŅįxµĮimöQÄ雥æćĀdĆģG_°ĆŚ?ą°i&*»¶¦Š(Jj!Wpļön¢¢\“ĀÓ·¦čŗŽ&įh¼[– I“„Ör0‘”’­Ö‰ö’čŖ‡tߝŖī•3üLō3¼R©»¤£æĶ^ęŽń~J¬ō­eł¤'ü{[LĆ„µģžöw’˜¢4*‘——k¼‡a˜ · $r‰"™†Q2’)ĻÕĮon±LVƒ_]õ±Ź Ęō={Æ’B­ö“™zŽĘ”.ƒa€°(žżŚĢ€RG‡v?y§J¦ßzõŒ,EP3ŖC((_iĻĖ«Ø®Źą_",Ź^wŸ9ų M¤›ņ)m.É ŽØĮģ„÷”l—Vfl—M™”ŗW7WēžÅö·K ǫǓÆ«÷ŻŽŠs²āpä.;(Ά6O‚å„Ģ–ˆō]?G¦+-’«f3Į s3ū¹0³3!ÆÉ:”¹ŌLwĘß8>Øń‚—ēą°ńńUūf Óō—€@?̰>ķ¢ĢōKåKŠY~w̹ĶÜ#K•Ÿą|¤CŲXÄFt°ł·śW·ŗœ‚Mē[9÷üłwUr°’z¹¶kŻNl¬‹yó±3.Ū&(ˆY AåŅćqĻļ3—d /ó)&6 ņ¢üv•Sž€ ?gŌ8% 0ż!XzŽū˃°qŅAŖóAƒ[jŪ"kƎ6®]ŒKÆēW ll÷ĶŠÜėTÕo$‡ŠæÉ^Yؔ ŁuĢ=ÖqaćČīŚ.wY’#ŅdŗęŲ¾x²ŗ÷vŒl6ĪvŪv±ń]ŠåĮ6UESo āń¬GĖ9öĖoh†J8s³YEŸX–;s$0’ŃˆŅąÆ >*7é~[=€ų÷8Äō~$»źĻc¼I…Æ@ŠŠ`š‘ų†üQU0o”‚m‰)Õw¹V>vN n‘ŸjPīõ!;Ē %ŁĒæÓGč£;;ŗJ?¢ŃJ-ŃĒģc]XW?”_­Sņ³*ēk™Ńs|Š}ĢK%Ź8‘=5‚Šm·—×”ÜÉKŽIz-õZÄ·Ą’üŻ’œ¼ö„†qć²7€L"¢­ļz~¼å+}†ĒųŖń‹ļ&,LNŽ“į:L Y0oX)µLō šśn7s’PKéøeAI’™s‰ “candide.htmlUT&֗Pux ččPK ÕreJżAßsimages/UT±®»Xux ččPKrcJņ ȓčĒ铁 timages/001_th.jpgUTR ¹Xux ččPKhl5p—ӈÜTŽ“ž\images/002_th.jpgUTPŖVEux ččPKMŃ9favicon.ico000066400000000000000000000025761357643561300354440ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’http2.png000066400000000000000000000037761357643561300350750ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin‰PNG  IHDR@@ŖiqŽsBIT|dˆ pHYs é éżuĪÓtEXtSoftwarewww.inkscape.org›ī<{IDATxœķ›mŒ\UĒ÷eęīģ“3,Ģ̲ ŻŚˆ®ÕR°²”±AHM0†`¬"“VKBĄhüŌ †„D0šhĄØM}I#FK-/n+uéö…Ņ.»ķ¶Żmw:3{_üpęĪÜ;sļ¹³Kg†öŸœĢ™óÜóœēüļsžēĢ{$˲,.`Č­6 ÕøH@« h5Ō ”eYŲ!¢“C…$IžŸąC€=qÓ41 Ć0\dt$IB–eEAQdY.“ąKĄf6³]ŁŽ%[XjgNÜƲłel;¹X,F,#¢( ’$Õ`ßłSÖ)NDN€ä„²³ Ó8xš ©TŠT*E"‘({…'†a`XDZaīā#ŸĻ³gĻ–/_Ž¢(hš†ŖŖČ²ģģu’~A>Ÿgtt”ńńq²Ł,Åb±Ļj°—€išēŻŠ÷ ŗ®311Įōō4¹\]×ĖA=0 ālęˆ°¤č–e»Ą” KMßė!^„‚ z­‰jĀŅ‚ūHNĒ žYø:+ģ©‚išär9 …‚kņPgˆ›ļƒ‘Ėį»ąń•v]†¾„QOžVž€µ÷Õ×÷·gaÓg`’eĮ×}ižŁ—=g4·ģŅsšŻ—įŪ;]Ķåøę‘Ī›Ū ę"šfFŌ×¼ė–ķK ¹-Ū}e}}²ƒ30viżkƟcŲ“WMˆĶ‹śél¹ ž¾®¦›ŸG7ēo\QqÕ5ćn™=aM‡‡ĢÜrD“M. _õ’nÆL"3»ŸŖčłś°«n;[_Ŗ“ą4üöâބCöˆ°snß(–ŪÓ«įž×šJs¼Ś'>ųą)oٵ“°¬(ææ¦rŻ]ū =ēī{½Ć›õˆĻOv·C…äU„1n: ėĮƇ`biĆSin ģī«,W¹–MĄĒ«Œvöœ®¼o_SqQÆ^bN=Õ²éR° Ņ]…ę<Ą¾o„`ż=nŁHÆ·qĪ~^2'le«öīēUŲ[ĆIņĻWĮKƒ¢~ėį`ż„'`¦«¬Ž]*ŠŖcT&ę%sĀ&źš“b™91r9Qn%¼°ž› ÷,lqg „'ąµ>°J?¾õŠD6vĄĖW‹<ż”“ī~‡{ąd·Ø×ó?wŹ@Lމk'į—æy—€m@f{Į-»÷NAĄuµ±Įµnķ„) ’ĮŪSœŽqėa±źŸ…Õ“0üNķøuž€— øĮĆø]żž2Ūš”©Ś£o„`¶”ćoōŠc’¹’ĮÖæ6fsĀgr «2īŒVŁÅ…‰Ü~×E ųŲq·,ŪU#ȋB “KąXBŌ«'ņjŸp_Ø%Ē”ÄęÉKV gŽ×t·ģµ+*cx„Ł&Žē¶¶fsRŗs©,›qĖFnķµ<¼ō„Ńō\•mĢę:Ŗ’1 ƒ\.ĒŻÖŻģHģšė×QPŖ¬Ū“Žįįa†‡‡"•JF/>æH@« h5š r¾q8Ģ©Ré^øŚp¼Ü ų¬Gū=Ą?}ś,üö3o?žģœįZVwßzģ @8ņĄ”łŸö‰€~ŠGŪ9ąAą ĄļŁ¬ü§TC’ÕŪ|Š~K Ü ¼¢Oų0 |'Üpķ@øÉ;ń=ą•p]Ś‹€YąG čo[Ćui/^D¬/(ĄząSutü%@‡Ś‹€½²"ś3°%ąŗ<šNćC¶~YDīw|_WGOˆŠ¾øYąūĄćķc öų2š÷Rł0$K× Š”ż ŽĒbšv©4 ±¹Y…ŲÜXĄ>ąŖė~ c=‚„Ń~ū'$ą#„bćWĄæś<nˆöŠõ0lß |"œŹĪ!ąp;b·ē…›'Ć«]Ü%¢ķgłčŻ lĄ?½mžx ”‹ėO§=J½“„灛šž¼<l§éŸĘķ»²Ą&ąó€×=?—bA³hæ,`?&=ä*š`5š; Ģą~VšE`ecƵŸ&ų× ü¤ŽŽ54L@ū-Ńó;\ūpžq‘€VŠj„ ‚7 ņŗā>ķŪšßU߂=ų?m~vx *ŠĪ–„ø6Ł„žą‚Y’$•‹’$¹IŌ=2#Ė2g6286ȁ8zōhł5óNz‹\’$E!a&H&“Äćqń—xŠ‘ū$ÅZc-½Ó½Œa’Ų~¦¦¦ČēóuŽ@–eTU%‘H0pÕétšxdŠéx…:\ų?–²‹\~<ŚIEND®B`‚leaf.jpg000066400000000000000000113467161357643561300347450ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin’Ų’į@ČExifII* Ą  ž ¦ŠŲ(1 °2¼i‡ą(SAMSUNGGT-N7100N7100ZSALK32013:01:08 08:48:43HHš‚*‚2"ˆ'ˆP0220:N‘’ b’j’ r’ z’‚’ ’ ’Š|’N¼†’’ 0100  Ą     ¤¤¤ ¤!š( 2013:01:08 08:48:432013:01:08 08:48:43Rd“ d% ASCIIų;KR“(xV4xV4xV4xV4`TE6č ’’yĪ„żżCALGKFI03Cur.GKFI03CML018001001509002801090502010D010D012408BCļė&TUNAŠR, ,™3(€”­Y’’K’Ų’’JåÜ’’, Ó\’’–FLFLSVN# ¼®ŠR" ,," r S ė’@Ą:l- 6fi’’  8JKJKĘĘvķ†Ā B…R,Ę3]€™3(€”­Y’’K’Ų’’JåÜ’’, Ó\’’–JKJK""""""""‘‘‘‘‘‘‘‘"""""""""‘‘‘‘‘‘""""""""""‘‘‘‘‘‘""""""‘‘‘‘‘‘""""‘‘€™ ™ €™ ‘‘‘‘‘""""‘™ ™ ™ ™ ™ ‘‘‘‘‘‘‘"€™ ™ ™ ™ ™ ™ ‘‘‘‘‘"‘‘‘™ ™ ™ ‚™ ™ €™ ‘‘‘‘‘‘‘‘‘€™ €™ ™ ™ ™ €™ ‘‘‘‘‘‘‘‘‘‘€™ ™ ™ ™ ™ ‘‘‘‘‘‘‘‘‘‘‘€™ ™ ™ ™ €™ ‘‘‘‘‘‘‘‘‘‘‘‘€™ ™ €™ ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ ‘‘‘‘‘‘‘‘‘ ‘‘‘‘‘‘‘‘‘‘‘‘‘‘JKJKą.Ü’]„¤Fū’p“4  €ą3 o€ą3 o€ą3 o€(AFAFAFAFQGKiAFAFްō€  X ¤xR¼)Ž)Žss\&ŗĘ³6nΊFߛWšŽ¼šĘŸ%4:„ @ķ½ńÖGKFI030100 @P R980100  xš¢(Ŗ-HH’Ų’Ä¢  }!1AQa"q2‘”#B±ĮRŃš$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤„¦§Ø©Ŗ²³“µ¶·ø¹ŗĀĆÄÅĘĒČÉŹŅÓŌÕÖ×ŲŁŚįāćäåęēčéźńņóōõö÷ųłśw!1AQaq"2B‘”±Į #3RšbrŃ $4į%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤„¦§Ø©Ŗ²³“µ¶·ø¹ŗĀĆÄÅĘĒČÉŹŅÓŌÕÖ×ŲŁŚāćäåęēčéźņóōõö÷ųłś’Ū„’Ąx "’Ś ?ę4ĶFŪYŅ-|Sl¼¹eѾ2,nOEmuR2æŚV!%-üW6÷¬y*[£‰røbūO’6ł£t ŽÕ‹s®čZ·†ōŻgCž ēćÄ{’„š”ś1{™ŹŌ®„Œeī“}R8į•Ų„¼2Ä„VLV”GÄVņ¾Ÿā.}/Ęz|¦ÓÅZ<Ć—Õй™ĻŖz c™Ū6š±¹8E‰#>‰'ŽxÅ;qkmŪ£ĘŪasń$`däž3ͦ ån x9v•€^äO'£ž‡R¤rœ˜¢˜”¦˜’FŃü-œ9é}EšŠ¬ÖčĄ9a!Ą’Ö3ÓēŪ“‚0yŻ×ši”׏ä”%r9ł‡ØėŒćڤņć d–?.^ ’nK€§ƒŽ£Ūž:N„™æŃē“Lą*HŖq×ļö?€ćš[¹™M#ˆ±-o†\l.Ą*Øž#Ę:e~¹¦HC©ŽŠÜĒɞįŲū£¼ž]‡KĶĘĮc™®T’¬šŻNŽÜ`cp#xąžÕX†Rd,¼m^¹ōĆg©ō)„ ģßC.äM āh佑ŽÜ2_”c$ ą.zÅyī­mŖ%ĆE­ż¹®}5ćAę8Āąrx@)ķÅz†Õ$'Ł]Ņ3”˜ĘĆaĒn29ļYz”6SÄc½ĢÉ' zё ōd’ŹJœc±Ļ“m$Õģ­įCs§[Y4¤cU‰­Ō’1ž·AŒū‚89®NO:AņZ=™Œ"\ø1ķ9.Ė–;ńÉ[ LnnģäRö÷–L²ź|¹N %F={¹³Eo‘ŠĘéĄM9bŗxhŃ „TqĘåĆm’ć—éYN¶)*ɲm>b Ē%Žā mū‰‰2vNAĒrNéRécł ™-Ÿżt1¹ņŽA‚Ø@Ī §ć¦3T ÜpaŽŲ‘•H™Ū ópzīFAī¶‘ٶqoci0ĪĀPļVž/•›©\ÜqŒē’b+l}ŗłųÉåÕz72³|ŖĒg$ć„*Œ\ s6?uy"Ģ‘7]›”äHĪäÅ€ M—SIwl£tm ź ÉĘT6ī1!O;GcI6$™XćrRUš’ ƒtdœsõ÷Å9K)ŻvŽ#PE³y‡hSŌ xn{r{ՙ5ēœIr[löF܏,ņ˜Ēv#ĢĻa“Teo3÷–Nvµ¬ˆHŻ“³ ž#¾1ģ]l=vģ}p|9ØĶeŖ|+Ö.”×ųėLu‹nY”TD„“Į‚1Œ`Œć#š±˜ń²åē-œ[Lć!Oš„÷ˆĪ:ś1Ź\Hź‡>\0Ve Žv 'pü8©»4P}ˆ\(Ä„mL‹¹#pĖŠ:v¶„VŪŃ”’mŁ"Ś‹ŗ œƒŪÆĢ8«Ģ#aˆ£nFHÜŲČą;ÕyŲ(H€‰×żt†ą×$(#ߞ“'!ū:ŽWZ°[ˆÄ–QAqŖGÄ ²…óū§r£$łĮĻJó=VŹ[ˆŠd “Ū4Š|ū±Ä‰ņ@?);sČĻ5ķ2 sø£ nśĖFp{Č=NÓĮ®[Ó#Gó“ū¤K9&µR Ē/ŌåˆĒ`§ž%Ø(Éo„¾…C“7ßhŽī'āĮ€¶Żēų+Č B°ˆĻļķāXUæŠā°R0Ѧ~qŽŠ,IćƒŪźścLāņÖ9-Ń@[Ļ&ŠØ1ƒ…włp@` Ēąz×,vŠA$•Ä-¹†rxAā‰Ūœš0M-v™žń+åǦXćęv“‰•IĮ?•HĘA䍤ާЬ«}q§Ģ®ŽcŪ,G(Ą‘°2c'å<…Ø’źŲŪ4ó­ä£UÄBE†|—†|‘*ĪõÉ$‘]+k^‹UšUÅž•ūD|0“ķ¾½Ó2Ÿ łĮ®”Œ`–žĒՈČšcņF6čķ~×»Vdś&³¬ų^ ^ö{»Šž ¤übÓZܙÆ| ķ·FŌŻF¤Ó®Č°‘±ÄR؃¤žā2F$¶ž;ČęŪõM Œz : ßHӃƦqĒćqoĘG4÷å02 āŻ÷ął|ÉēwBsĄč1ŁJ,„a†Ųtq×wĖ€ zw§5ØĶvdH4™£“¹bN„y hįžź© +ɧœ§N)Ź]W.˳|Ē &Ÿ=j­(ÆÕöIjßD7ū,g÷²z}Ŗ\œõ@<ŲĪ1ƒÅQ’źß~åÓ®ļ,׋EP!Į!'só`捧8™hšKøkŽÜŗ(6°.H’mĆtRŁE($—\ē5ŪŚxv×UŃo5ūÆ/o-"3­¾™<)š8„žHœƒ"˜ņdD!ÖI…( ŽGŠ­%ūøč»Ÿ§a<;Épź 7ĢeSNZQŅ÷JŹsZ½WŲZčcińEzŅ«_&‰ ( ^O$Œź‘Fćŗą“Üc9Ķe_o N÷¶·¦71i«¢łL%eĄ?/˜Y7ӌ6OĢpĘ“õgš“ŠyV‡Oń†Öō©!¶{VÓdó0øGvr˜ĮFs…8 ēon&VÓ-mĖm¹ø†8TĮ+&ā%"@§iŪĘi*r~l„ˆÅ_Y[Šśl/ųYB _Rēµģė7&ŚŚėš1kM”UŅę­tÆ#>±{ö°õ;„ÕŹGm©.–Æ&J#Va–/ņ嶊vo­ŻéjŽ!µ³Ó`»]'M±ĆG’Vó¼®s1P Ē8ĶG©]i× Ī‘mi˜^ g[ūZ¬RDUDsŻˆ£v99ÜŹ ÓZ0ŪĘśe͜śc'śõ“äl8WŒqõ­°³FäŻķd€ćŒæ%Ė 6„i)©TŸ,TnōKįIi®Ś+»$¬—šßYź1Jń^[*Ä£lBBHŁź2yVrq»Œæµyž”ew ūbÓ·éSō&ŽŠ+FGßRŁŚHSÓøĪ9ļzå•ÅÄ 4/öųņfbō@鞃¶kĶ/ķm®aM#1ņķ晰­•— Üõē=Aķ]šŸœ¾TĻ)tRĶo ĢBU’xH¼NĀązü§NHåRL!$į"a!ĮpRfÕnć+ ’’€”»’\VmÅ-XŅoe±ķv³ŚĒl$½K½=‰cxéŖ2…Ē!ĄøbåšH`3īBėčŗĪ·įĻÅ©½µ‰tW;|Qį•Ś” Z–™# Ł$wśq¹‡åó!‹8®^ŁŲŖĒ;ŲĒb0¶Œ‘änq†~rB¹aø‚sŅ·µ¶·– ²… ū8L‹ņŻ(ĘFI¶²€ C“žėÜĶ_”ÜYčZ ¾©š«SÖe¼ų1ćt[ż‰¼u«Ģ¦8õR¬Ž—Ķč†ņÜĶ„]ńšˆ=ĀÆ…/(Ž05Xn¢A“Ykz{4„6ķ>}ʐij’®„®U霥;±uawwMłøµC£å8%[AčF1RŖ¾2“C܂Ǯz’Č#טöžŅõ%‹įżų¼ųā(—Zżœ§œ‡hōÉK ō¹_$« •ŗ“”g;ķ™Ļߦ”Å`*1$g;N2HĻœ’… ¦½ Œm-GK¢3ö Ö×Ķ²@T1äŽ`ĶŲģĪŌcсwewą«č|q"mš³[i’©s°,ŠŹĻœ%c·9y: V®“i%Ž™ „ŹŚ™`VźŅWRD¤fEb$1=1߁[Z•džõ;ø…Ņt±™š­øĢ¶ØĻäyI\m]Äš)“@”ų,QĘG?xŁĘkŃĀ'¾×±ųˆxŖ5ń”`›N4œš}9¤ōü ū‰ōø²5K»-6Ō’«šśņ4$÷_‡8`ś{לk§Ā0ĖæDń?†®ģ_ęž}Z07t äV%Žy9_lW-āYoī5i’“£¹ø³IbV/‘|BNŖtČ8Į&¹€ÖÖ䛄SåŅ"y8ūņ0#öćå5Öåe±ł›ŠOqŗō¶wA“ŌAqµ“räąą¢”ą’9ĮĘ8Å`‹mrķüÖśži)†Ż/Ń€0 <Ōōé^š¼Alu­r’Kųwš’÷āWfk;‘OĢc™” HlabČĪe,¹ėōłtؙ¬?`Ÿ‡ĆÄW“‰’l‹ZYO¶`•“‹gS—9, ! 7#/̹9T““WĻ¢jō_‹<čų;ĄŚšj_µ‡ˆäš“ŹEųa¤m:ÅŁž–į³0Ā–—ÜAU#5fEųĮā8ĖĀŚŸ³OĄnJšę–²6³©ÅŒ/šĆēbč;į~ołhz¦‰šŠ} źŽ&Ōo¾%üB†Õ¾0|W$üć’4» bŪ¶CÓ+R½ĻHšīšžtP-Ö¶’ńńā ĖÆ2į×¼ŒH\ņ0£ŽA&”:QŪŽ—~Ž…koå]ŗŸń×Ā÷źæ³ŗ“l'mFĀCįĖ~2Ém]ĮŒ=Œ ;ŽŖĀīŅśŁn,Ś7ŠPų˜)8žbI1Ē”Ķp¶„āĆŗwÅ_‡:³é?“?ƒ&·Ņ’h-CM}× qĀž'”}ćöˆZLļóŚē¤›kø¼¾šÕÅկ즕šsĒJ×Vś.Ž-Åiā-ś øÅÄ(Ų&Žī nłš”ó'~sXŁ«u_‘”<·«o'ŲĒŚÆ–6ņ­’-ŪžS•eaŽFTĒ tĶO§^ł»q¦Śh×#:E“wĄĒ/h\Iø¢7U|Ą‚s q%“c}ś„¼@e‹ŗ½CHŪŽyöėė™oq“q¦Cmiį‚R_ Oet‘"ĶǘŃF€łļRņsē$§ĶĢ©c'Ī““¢Ókk’Ć]Ć5sj՞œ›u=čǚÉI.ĻKµóv·c§ÕĄk,q ‰üGupUÆßKūńĘ9¹Āż£Éżōø zpvŽnņ Ė3$šī°öD“z†”jUˆøUqm7’ēĢt8Ųź”|æ0ą€nYčž6ŌĆ.‰„iZÄo°ŪźW—I«8Ȱ}”YYr|£ŚKg[Är\ xķóā2ćɲŗ† Ód*”vRXg`åŠa[µĆNžŒyTlå»ó?pÉrź8 <²Ä{JöN§½wµ·V[]õDś$z°Ō„š¼ś$n©skākf[sf ³yq9 †ūÄ„Č3ė^#‹ąŻåœ°ųGĆ’4Ķf5jZ÷ĀķrH IÖ-+i©/Łē]„Ęž\Hń;Č€JW–ZX^¶£ ŸˆŅo ÉpʧQ¼BŠX…pą6Ųö‰p~cŒćfm3SŅõ—OŌ÷^ßčWšiE*üģ Ŗ¦2€īBåt'moI„r_[Z_ń5ĢÖŪF²Ęŗq§g)(»;ŻŚJjīāśėm Į¦Ļv·šF˜¾±UÄ>³‘üøŻ‚‰S{±%w+2œ«&Ӝf­\"Ā„ļnRŚÜחrÜ–bĆ €½‡J³ac©qo„Xj:¦»3@ZycŻBŖ£* Ŗ¶z“]ÅφžųVŻ/’moƃVčą’ŁÓĮöi}āaۈ¢[,-ćwĀåš26±C^­ØAG©üūÄY—öžiWsRo–žHéÆt®üŁņu‡„¾6xÓYx¾ü:ń?‹./%i­nl4ā–ŠÄĢqräG @ē,Ä“ńšō[o~Ģž¹]"ėƒöūż°xoųR߇įż&u nÖu »JĒ/ŽSĄĘŁ]®}ņļLż¢¼Mf–>)Ó/?ąŸ_²µĘO†’gļ…°—ńē‰m€ ­Ŗ\ž… Æ eڶ×Wd«Ś†¼į»±ü.š%Ćæ.PšĻ„ē2jEs‹­cSPgørwecm«Œ+%hz»·ŖčæWś:÷żćĻąOųšåo’lŲü@ø³*|/ū1|*˜ŁxKBE»†öD!euŹ®Õ,ÄtiPķƒi¾¶€[Åe”Ę-×f‰¢čZbŪé–CØXm(r1æøUĶu­˜ˆFcE%”³ˆŖD§€€`’v䒵Ӛ˸G„vöč<©œg+ĒĢ@'kGįӚ–ęō‹mLw[§żååŅź#īL%OŽnēqöGÄĖsŃ–‚’[y-³hĒČr3ĘńŪįūŠ­ī,ōɃTÜīˆ7Ģ®¹ČóG˜Į±Žš¶Ą¬™Ž\Ż|<š#חFHæbϊvŅ[üQš}½¦bÓW ā 6 €Ø¹Ńµ-—0ņE°é!Οƒü!­[ź’Ā_‰æ|¢h²µO٧\ńGŠćµ¾'‰į»Ķßä–-VĪS”f9ĘZ·Ɩ÷šÖ™sąbāŹćÅLˬžĖz•Ō)p‰"Cö{EøtÕ¬#’Ō łd»“·bmÆ»­xóāæ…„ń'Šē†?Ū'įģžg‹®<;¢Ga5÷„š@m®a‚ŻP$ŗ=é6ÕRM ;™X‰il’®Ę‘i;ÆėČ«cżÆ4ė§ų»Qń&µćs#¦ÆįC$vŚbĘYeš¶Óqp$VQ0ć÷›¹Zļķģ­BĢ÷Ņķz‘ŪpU€PP³$½Ņ5å±ų™„ZŁ[·ˆŃ’i[x‚§Ų¼i+Ix#P"ÕķD7£ŒyĖv8 éc(ωžeuå Ź<sĒč}McE¦§ļ?3¾–72Ć8<<ݤ„ ©s.·ZéÓ¢čÆr 'ńn™37…5m)Ć-ö#2NH0np|­ĄÉ8kYķfžŻšåƳāU;ĮśüV“ ł›äyåa“nPĄīŲ1Ź¦¶T’Ż!į‘e!F: NSŪŅčŚ/üEp,¼į›­^ńqöęO—o>żÄĄŽ02w9±ž {ĒŻK„±ĖųėŠ0ōžŲ“ķUÆŽkg‚öŃ%Š`VXÆ{'ŲLö^2Š”œ;­Ņ9I2É Ą`ŽQĮäš|Śv·ąkßü]Ō4’|gš Ė©|¼ń¦ –ŅIh\'ˆ|/™H"aq²źW%¤ū@Ąļī?|m¬ų»L{»K懾$č¶ŠĒūG~Ó:ĶœŚ–»-Ŗ«Em{¢éø1„İGe×OóyåO;”Vrē¼½§FiY._š’#„žĮų{ yMūCx“_“Å—ø>ż›žX‹ßjĪÕØ·Pßd…°ß¼“å8ĮÅwqčŽ=ŌķŅĆćÜ׳Ą÷Mö%ż›53ÄZ¬gŚŠlĘ<Rć;ˆ%Yi<'aą«…ēĮ‹CĮÓė æZųłńS]CĘŹ‘’ļrä‹8™BŸ*,`v©É®źŽÓF“ ŗSJš„æ6­©I34ó>OĶ4ē#ē9-ÉĒ=©s|ĆŻˆ–öńZiƒIšw†¼?šOį \Łü#ų_ƲŒcv­|£Ķ½˜ PÜįŽÜEYˆ[@¢8-lģ4ńcg§S·Č3ɧ¦ąäʳŖœiŹ…ČĒ õcĘ8ć3¦2#ķāV šG tćŅ–¢ę{lC*[§0 Š€NRS³8ž<›ŸåTßę!Hƒį„šU!HžčƒĘ}¹«^gɘ6If£ēu įéłóéǵ@ĖŪŗlgČ+±Ą##€qłō£RnĪĒ>µń‰-°†×móqį-AX’'šŻpÄœįˆÆŃ5Æé—Ė«Z#Ēć ż›ā†Š{» āį6ž²FySžĪ~a_ṲH ƒ[ۜęåŽĻżbs¶5l`Ü÷ī<Ÿ>"h ¢źKāo ŲHŗ=Ł ā»Hį!CąwQŠ6BŽ0ėS%mQPičĻW}KĮ:„²]č÷zv±£O™£ŻZ€%Ą qĆoÄdž<ŻĢŅ0[]iīį‚ÜęĀxgÄdgnz7 śׄyw‚„’OžĘŌ5Ö“šž£™¾]\ÜmŽ;Œęm8ó€Ū²UGūC õ+Ÿ¶˜¾Ļ؋µ+©ØÜ@ćs©8•ˆĪW…śšvVvčc:ļ_2D0I,ļ9å{ 6x8¬ÉŃYp÷,‘Fw[ˆ"zœƒÜ3õ­‰ģ¦øktĻ™mqfXŒueĮĘßŗs×$óŒ‘6ŌPšĀ÷eĪǵ¶`̧9B˟”g<śf–‹ +æ™ńÜ^QˆCv’ &[k؏ĄŪÉ$ ÷'9&ŸµÉm¶IuwpœŪJŠÜ`fn²XcĻjG’Įō%­]?żk’×?ż™+¬ÉjS[mV` ¤pÉÅģŃŪ(PI¼löĘpzź}‹XUź—„dRńÜÉXŹr\ĘŪ²@°ĮŸilŌĻžā’!]ēü‚ķ’ė„Ÿś VgV¼weӌ$õčkųgįæÅo·Ūe²ųY”,ž;ń„, ‘żj›L‡F’’?œĘ½Ņ†? ćѧ²š’6£ńXÕķ~/k’ÆŚmڼ%H[yĖō‡“a–­ļČ”i’^ć’d®ŸM’U'żr_żVQsŃ·viåk$|„ć%ŌōķWMų©įi²ų–+„¶ųõįRŁd†ڐf{˜¶ń„ł¤ć™’čŒ|¹’āļĆ_üwm⯇örj²wą7 įŲ#$ŠnĶoEp‡oŚ,'óP*‘±ą‹8äVŽ?äžjŸö57ž‹»®WĒ?ņNü’^zž—½t$š³ŁčgŖÕn¬ĻØ|-§ؚ|DÕ`Ó4…ūWĆ­_Kµ†Xõ’ ĪQģ&H6ØU£PĄ¾Ü‚¦½e$Ś’Ž]B©…“ĢŒ '¢ĻNŁ uöä>’‘J’±^Ć’eÆW¹ūĒźµŒvK±s½ļÜŅóŒ£÷%6 ڤŁćcžHķõ¤W$Ń%ɼ TV†@Īz“Uķ~ļü üjx¾źż?ĘŖĘkT2V·D-$a­‡ yÜßģ•NxćÖ±4ūķRVhµ=m.ł ̲_-—?#F™$)š3“āµ®>ą’{śÖ-æü~·żs_ż ꢣgä&Ś/8 /eŽå—pÖä…9‘Ų)ļŪķXZžŸ§źöņXk°6„¢2JŠ–'?:Æ%SzrMĖõR}?„Vƒī7łī)0WßŖ>;ŗ±Ö4j_kś”ÓČ&šˆ%ĪVeoōIÕżI„} Ļ®é:Ī›«Ųd¦‰«Ūkń*ŽĢ¼‚ •P|öQ“²QµūäלüI’‘ęūg’£MnxWž<µĻśł‹’E%fÆ{v’€l’kSŖ ޲•šRHņł3c†Ē>§„eł…Kµ¢“¶2•0*1Ž pp äœt§’,’ąŒæńģÜž”ļó–ŻĻ’Ł’Ū„   ’Ą  Ą!’Ä¢ }!1AQa"q2‘”#B±ĮRŃš$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤„¦§Ø©Ŗ²³“µ¶·ø¹ŗĀĆÄÅĘĒČÉŹŅÓŌÕÖ×ŲŁŚįāćäåęēčéźńņóōõö÷ųłś w!1AQaq"2B‘”±Į #3RšbrŃ $4į%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤„¦§Ø©Ŗ²³“µ¶·ø¹ŗĀĆÄÅĘĒČÉŹŅÓŌÕÖ×ŲŁŚāćäåęēčéźņóōõö÷ųłś’Ś ?żAż”¾!Éā?é×wrH× $Iˆ4«ŽOę+õkA‚ sƖZĢ*›%]Ɠ’@Éüsšå§Q­ŚŌ“<»ā—„“xgP°×4ųdŠõ+y4«āė‘ó +ģH?…’·Oģį}šćŒōŁtģŻ:@ŠuCå²6v‘ģr+Ó„U„cĢ$ާŐÅ%›yĮĮ\Ųrk3Ų_h°N֍mp%hŻ Ē 9>õĒ™×~Ļ}Īü¶‚Œ“ģ}{§iŚ—‘Ē170Ą'=NkÉuŸéSź7)-¼HˆJ¹Œń/ūĒ<Šłźx¶“=WU¤Ņ9ˆ…¶“©ĘրαUĻ#°Æ©|7­­ż…ŗĢļۜm5ōx:’”g‡=īĶY9Ÿ$1Ųrk¦ÓlRXæv$ŲrkŅ[™Ž’ī=9ī,¢™Vv\:ćé\ÕĶĶŌ™Wø| 0õ­ģrLڱ½­cµr'F8äÖ„¦Œ“!»ód÷§qEjYŗŁo§’Ü<ætÓ9ėF™h¶Ė5ü¬¦FÜ}źĀR¹Š„bĪ««“Čö±Fa€żÜõϽaX~ķ̊ͻv~QŒ›ĪjjĖ$ŗ\ÆsšX#•ÅĒ£\͉T|Ąn]ÜsėZÓ9źlZ]ĆAq¼`ē©­±Cö9"Ƙ? ¦½:ul6¤u9/JHļīįSŗg·8Wq%œŪ+łM²>›¹<µU*Ż œlqZ¤ĮåA 4|ąēžk¢Ńo.!Å“×O pģĒōÆ>¢»;éŹĒW ^Cky>^F^ĖÓ ×¼eØłÄiHŃ)%ē¦r+.Ce3?Ć©Ø\y÷lŹ—!€ē#JŠŌ¹¶i¤Bź½¹«ŒQœ™§hvWD½Ō‹““ŹŽkbņśŅĘᣂ‘w§k¶œ¬g)XŅš­“³KļufÜxéļ^½x–¶bNė°Ž˜ō«Gb“³¹åz¾¼·~e¬F7·ĪķŲę¼öH Bī…—''#æµsĪbUGl/ŲĒJŠø$ƒÕfī8āxćQ! śÖōŖ³¬ē'•ķīŹe·!}M[‡ÄņĒmy¦$0¤Ē^£é]QŸc•ĘęfŸ$Ģģ³nĪįĶ{ǁZ;‰-ģ ™"]ŁĆµUÜkM ?ˆ¶Ļsvc6J‘Dƒ­÷Ļ9⼯KÕāŠuHZŃČvJĮĻQ\2c ”ūÆvuHf’L’&8ā¼ŖēLm>qpó«d’Ƶiō&1³¹Ÿ¤ ī%xÜcšµo©l‘"e`y 0ė\®:›{CHx~āņŚćT‚mć;Ÿŗkx$ÕžŹ‘Ęįćx”T‘³ies`6ØCž³ŽƒÖµŠbŃ­M¼fÕßvį•åkEvsJV#’„¶ÜĄŅĒp±4œœqϽrM}=õŪ®pPå3ėķN01öŒän^{[ƟoĢI<Ž>µé¶ž7{‹4‘D¬2dĒ'Ž•Ńec'«=kĮŗn›in÷B4yd]„°ź«ś¼vŗL3øpŠr:šÕM‰Į_SĆ×ÄqŻŽÉ¬†¹Ęy¬‰õåöØOɁĘk Žū• Yčtŗ0’kæ*ą»$ć5蚽šiŚA žkI t޹„It;)Öčx•ę-ŁWkü*×ēO „lč tV¦)ŌŅĒ x‰5Š‘—÷9'ržMIis\@ez|Ü×D]“07/ķ•0nō⤁ šŒĪĒ ī=+XNČmō,Śé°I{oĒ>•ézF‰Nٔȸl‘ĀŠēŲĶĢśA¼·‹G{;‘ęNĖ«Ż½+Ću‹·¶»-Ü!G*É\sW6„ĪV9äķw’,¤„sŲކø/ėŃŚ]ÜįfFl‘Ói=ér£N{EųgT·6¦+xćŲŁbOSž’­pͦ™öŪ‹w•Ko$>é5ÓŒ›<Ÿ2jĪ"Œ„I‚qójō„¶’Q ØU#>“½­“CQ¹vĖᭊß=åō¾qbAžsVo¤šģL£K@ź6ŗ‚rÄw9õ¬%Vģģ§Qŗ¤z—†^xž äf*ØæyHļ^u¢ųKZ¢¹ ŗ.9<ėŠqÜŚU”¼3¦Dfē!]R¤uü+Š5Ż7G³ÓīEģQM Œ¶×čĆÓŻ –9%.§…ų­t½FĀŽKHQZ&ÜįTī#Ņ„š¤ö©o ¦ŽĆ.ᓁī _·2“ŠOźšWšåč~jå“Ų­Ö •ʶę;BõZ‰Tŗ3āžx™‹(ĀńĄæē§ŲŸiŲm߇.ļoł¶„ŹČHĮ„E³S qģtąZģ§;#Ž„=nŽ &xÖQ ē-°d0÷Ķ{Ə Ć¢Żż¹ ,ē•*{ŌŌ›h˜Å-O`Õ“łī䵓»tŠÖ\±vlm÷ƑŠ¼D|QØĄ<岉ĢQ¶};ę¹¹N‹Õ¤ņŚ õ«Ļ“H ŖpMĢ7ZœW¤ƒwr>¢»)FĘ3Øyš ŁĻ4‘Aņ`¶Š:ę¹8%–ĆP+$RD”·>éĶk&ĢTĻ”|ā[A¤_iC#nŽO’¬Ó“‹ĖĻķG¶dŁ‚\u>õęŌ¦uÓŖz”§ßXŗKö™”EĆ߯=’*Ł}BŽŽŚ a¹‘->é‘Ī>9‡)Ц6ńEü27•i4ŒogQĄ>•äŽbż¢YQ¾lóž+H®äŹ]…:˜¼ŗ·µ‘ŠĆŸ˜Žs[Śg‡$Ō5#pęt‰~D ŃǼ!s'#ŠõĶ6hō4ĖX?ā`q±³ĻÓłWĖ’Ē~ŗ³YŻ,*9F.2z×”NBŒeA°³¶’]FŽą˜ŌØVå}ˆ«qéw×+ ĘY­d;rŽ>ŸŹŸ%‹r44ۘtK‹‹;ș2æ¼ćš’Ö’Ā——ķ– €-+žqbuK>,±²¶Ž4ų`KW]˰śöś×˜Ūé°ŗ“–Ī4øv‚ Ą ķźzV ›ź ‘ģV’ ®¾Ģš«… W˜śsXM؛F=9ķ„iÉ-ķZʑ”ń#|W}¦éŗ-Õö‹6ś£FC>ūsŒ×ƒé‰{­N·—jaÜŪ™j©S9ż©Öé>%Ö4¹Ÿc3%¢±b2Fļzݚöā-/É+ņz×4©4ėt2.mTŚM4W ›±°Z™¤“m(2bŽŻ>µŸ-½©Źj·—÷ŒÉoTŻŲćō®‹J’ę<–9”ōÅæCZīīā=>tk|HÉ'§½UV7ö+*EQÉĻSW`l˱¶%äG“q<zé,-†™ŗĘWē;°÷ŖrŌE{ėdzø† Č-[žÖµ48 ś›¬R¢ĘķĢxQTä)#VK«å¼µω¶°Œż=kĪ®ŽkK©·åž‡UŁ”t4ōÉāY”»Üˆc5wP×5=.ghŸ÷@€+ >ĘŹZ-ž”Øß^6£Ø>$ēµ¹kyŪnHr2ā­=4%ĻSŃ|-¤hQHś‘µŅ0y MQńƈŸI³dӖ˜”]Ą`ĻJ“Ł2‘껂ā՚鼷2¶@źEkÜ$v1Éy¶P’Ŗ |Ćß2BS±s­ÅöSö4S’Td·å]mĘū;UY’)>ń÷5›z—̈́͸“yÆ· ɓƒƒĪj¾¹„%¾• Ź£ĘźpWŸóÅ"%+„ŸiÓŃ"¼#нŠī“},ZĒo ½i71ĪßJĪKØA˜K©É«ßĘ'gĢ×²Š÷ ųGJŽfó`3G0ąē–ķWmQ§=ˆ¼Cį=7ÉæOå½@D`·FōƝ!³Öåšž3o*ü„;O|WO3*5 ytD¼q=ĖŹÜųn }1Vbņæ$Ķs²łō9_­ü×·2ĢAøÜ@ŻŌżk#Lšę”qtŗŒKFwššFg xzėPžÓ™īnA‹Ļ~껯~Ķ®-P›/źT抦ĄEjg™Ćm‰¾P;šÜ»Ń­otėĖRŪ_nžĘ©”Üęü¤ßh°½ŻĮ¼—Ģb[f22zŠ“Å&u”EˆÉ ·ŌÖ|¤óōžKÄFŠv⣃Ć÷Iv`X Œd`VŠvfæB»Å*ŻŹqSC¦iv·©źQ•ŸŖg¢ŠŅS3åfœz…¤“‰ ņ¶§Ģ¹<Æø®SVÓćŌ·7–”·Ä’Øscä2ķÖ-:F–ģ…T"s‚jޤś•ćĮB8@ĄīZŽm,NĢuŻ„¶®²¤%МńT³¶crČD¤c=ńŲT"ݶ³t’,p«ķ'©\ā„Ö£Ōµ{8RŚQa·#9õ¬åĆ<ćUÓ/`¤Ćvåėō®¶ĆJHV¤ŽŹ7>é÷­nTebmNĮgYš?7ĻDēaäc½zƒtūżwĀ:użō|ŁTv\£¦GėZĘ­‰“(kśA¶žĻh'KI7Čvę/õ·†ÓS°`cUÅś0śVüŚw=—¾kĶ6ižŽŹŁŅ1"擌’C]„,6°hz7ŚE»Ū ZTO•\õéœēŠå©#cŅō µ0‚H¢tLįŽ7{׎|KÓb•mg›Ģ$?wŠĶNƞÕF}6ŻĢ”Œ©čœRGAmį{[‚÷Ė,ƒ~ÖäóŠč­4}Y„Ēl>Å:–É$ō®ˆķc–]Ēh°Įw7:Tr]XĆs"4®I Ł<ߜׅOąßéļs©\[)ÓRgx[o'?„e'ÜŚ–÷Fn­āk˜ŸN²‚Åå†6É!ś“Ōš£āߤR½Ė* }б§üĶ`ĪČ« °Ö/,tʂĪq¹ŽtõéIā,ؓn–ŻdˆFīN aŽ(Ŗ[A4»iƬ©µ® g’ć\^ÆipČļ²&PųŒžU¼_cŠ£¾§źž¾Õļ„HŽ(ÕۈöņO±Ļć°ĆŖxjžēJÕdžybŠ; ¾œzV5dmE‹ŖźZŽ ’ijéVŽ23\”śn”,S­¬ ę<3˜ė\§o5‘“s>±d$ Æ$C‚|Ä×M£éŗŒV³Ék ŪČPČźƒīޤŠe)ŸEüW¹ÓZÓūKķ×7rd+– 1€?Zénü5¤Ś^O5½…¾ąĢÄī{šŽ=ŽncČ)ńfÖҽŖ²«ØĀ³Fsśę°±¾Ū³Š¬ž io¤Ū\]C>Ÿ)™ęØāQ»”ĻÖ»}WI‹Eš½ī o#†ī(³k˜łķģ9ؔ¬CGĖqųæ_Õõ ..„ˆĪϱü„Ę=I®÷ĆÓ%Ķį²ŗ’(d7®įš‰Jä¶z4śdqĻŗŃüÅ\“š ŗŽmKKøMĶĢ’lUQŹŽr•h™*eŻĆžŠf·ÓŘŹŁ ćżYļłę»/¦›’C¤2*–Čä㚵&‹%}ϵqzĻĆż^Ž$Ē™ ”ŁĄ\ŠhĪTĻhšd:ž…įhōM]Y®VtĻG#łW.Ž#¹µÕ ¬V,źXņAĄś~Tه±čŚĢš“qmä(éõ¬YWĪÕŃāøy!c°ĒžĶHF62<_¤Nm¤‚&€ß:2żįéķ^gošÖĢŪ¼å–;ƒ(•q8Ļ_ĆŚ˜÷:(3»3Ékj0ūB䂹 OĘģó>ŸjĘ÷n—5jš@¢{_‚mßDø7ś¼ÖźĶ‘\sŽ3Ū”® Yų“¬/ˆ&¼ąāO•Xē<šj¬]jųkyŖxžšMŒŃ^wäēqļÅ{V³ā+’‡ÓĒ™ļ‘Ą‹Ź„ģžƒõü©Ųå”Nž ź“PĶiw:`qŹ?_›õÆm/ĻÖ%{%ŠHŽ~”{3“ń…mtŻ:®%‰Ū8'ßæyŚĀ“ß%ĖGt@'hŖśā‚•3QŌn¼!góŲ’iZ¬įYŹćę8ėL¾×5 yķÆ£ģ“ųÉ܉œsŪ‚ÆcƒŌ–ĒS¼ø{ –źˆŹ²Æ%†;śs]O‚ąŅSĆבŪNa¹ˆm‰y>bœƒA²•ĻńƇ 7P_ĀZ9Cø¼N@­c®‘}g“{d7”ā'üš¹. {¾‡§ŻZép™„±\ł@zU’²&hęk§óA?łUĘ69§#’ńōĶ^ {xķöpIöī+Õ͌ZŻŖIŗ=»A8<~UMŲĪž÷.j‹k”éŽń‹Y cę;ś\WĢ^,ń¤šģ“YŲŪüŖsņŒ†ćجdõ;by±^}³?•“SY‰,ŗrĆ'v©k äµ¹æeØŻŁa`i!$g*qšī|;ćWK²m7ącœśżk'IäŪ{WÖ¬.5 $ŽĮžn¬{V~³rŚ}ŖÜGq§”xj?5””øSČģ}«ŃŠC Ė œlSņŠøĻø½­“2µČ“ÖF[Y£Y¶˜č?Ļ궅„Ī•µ„¼ŠźšØ#gE“Lq–ģµ=ī”öE†Y`@lz¢Ócq$pŽ€ŖĒ’ē’ÕZF@¤žå»ėqkwię2}†qšęļ.¬.aŗ‰ļžTWĀČ'<ƒéZ£“Õ¬^;x-ķĢĒ28 €ƒµoųpj–³ĘÖāHćOCĆdtÅ žįm †±öxÆģFŲå¹łżqśV»äŲi÷2ż y«ņʍĪī ~„Ļ”›Š«}®Ž]%¦+mn÷q¦1œu«Z†ē©Ȳ mP@ė“R)os¦±ŅmVćĪ•¢’h¹ö¬ĶsJó|é”~ aGūRŹĒ—ĻsØĮušįcŪ+oó­+Zę;µ…‘āGc>”™Õ­—Śķ÷ĻūŪęVģjœižZR2#ŌfÉ–¢Ż»$2]–p½yś%­żō÷"4–^ƒ#(1äźE©ˆ·%ŖĒ\…éĪkO@šĪŸ¦ß@uću‡9 “’× $Ś>܂×ĆZm¼sB²²īvŚ8Īy¦²š5ÄóO=¤wW £ŸįĶ"µG—Ķā«='T[cFXG"ąśW±ųzüClÖšJÆ)Ą.ׄŠ\ŗ³›ńŽ–Q4ÖŃł’3„<ēn;לź&X‰Š¾yéœŚ‹TäŽWY“†(ŻÕoĖĘk‚¼,Bō¾£5ƒävzŲī–M@I圞ŗÆ«ĖöĶEŒp˜`rääõ ę=ÚsKv`aū7Ö®_Cqh.ŲFž)ÅŲĄJŚĘk¶L·Ķ!äšöļ‡ÖwZ¦—'Ū,^HĮš3»ėśÕ·ŲG°\[ŚZiękäF ˆ ˜•ćö¾%óEꋱVvXŒ§;‡<ā±p×SHĪČä|Gv†Īahé“®ĘwWŒéBsØĘŃz“Z—‡µ7JKH>ÄĪĀq"S#‚+£ń‡‡ģnō© q©*rduä~;³)®ē‰ =l-ę³£æ,Ą}į\•ŚŁ9sx£ĖO˜³cŚ‹œ“‡c*mrÖ)™mV(a×ųq[Pkz–»jb·;÷0Ć=3Eś*ʆįĖČ$S4ź%Ż—ćÆŅµå$?•<„Ę8ō&‘Ń 1š¾y©{x&ņ p½@=źĪ›Ø5“ÖŠÄHfBGLŽ’­ót6bgHVx䍳ø!ĮS]O†ü;i"L­4°BbBsę1?žŗ™lKØax–±DCqøäŒ’æZē“żBKxŒ¾qh' ßė\5Q”™żnĮ=~:Žų£Ā>•ØŽ]RŽU‰įĻFœb感„~8²Ō4Ū ]­cŗ@ČČėėQ*vŲ÷źjzLj“ż*ö4°•Ņ(¦Ū±?*æL×ćoü—öTŅž#ü¹ń?†ÄÉ®ŪD-ļīYxŹą”Ļ\1ŸjŽ8eĒN³eq¤ź·eńŠą">$H@ä^©šēÅ:ÅŖ 6ĀIbVœ9$(H=Ŗ1±S…¤o‡ŗg×¾Ö..6G5IJ®ę¤ńN¬,vA‘eø8Ā©?Ė„|ļ"R¹×Sc€Šģ.Qw¹ā>pĘGAė_A@ö6–•œKa°9Œ÷0uģŌO:Ŗ:ķ0FÉņÉ×ó5č:ˆ±¶  B0G©Ævœ®q¶r×*“]Éy$³só޵„H `>SŪ½tIźMik%ÉwÄ$ n·¢ŻŽĆrm”.sŒēØśP+.Æ}D€Ęžil“ššĄÆŁåš*GīŲrßJĶĄÓŚž«"y¢07€J›LUIc“*™vz꧕ƒ™Ż^č‘Ig w/”}#šĒ“MH÷ĒĶ;Ą#’)'c9·(-’$ åä¾¹=j•“ūiJ ’GŽ®•= ½™«ŒPź)|Œķą‘ZŚņ}–oœ£FÜgŠ|ģæf‘ĖZX’hSÉą ­{¦Ęβŗo Ą&·‹¹ƒgS”ź‘Śyh\ØŪÆ®xƒūVŚh#ڲŖįS<0Å1&y¦™op«2=øB§9öōØ/­$^æsøŖ$ÖĆ2aŗhI·±«ń“÷Ķ3ĒA-‚qō­c¹9+>x§™ĶĢ’†9łŗÆµ>āt,­LxņkŖ”‘Æ:¾‰¦Ȉ4˜]ĒŌrq]/Ā\Ļ«=ņ\³Ū£+€ óž[ń„wZŗ¬¶óˆŻĪIś×’Éį?9Č7„'„ƒ›įł¤¹’īįH‰F:Ž`±­«hś„ö™<6R²’‡y>ÕĮh×w¾ GÆł$“yĮ뻁R±ķ7)ŗÕå“{yex†Ó—=?śÕsĘ^-x“K}>ŽŁw!.X™Ö²”li³ŌāŌeÜ`“ĪĻ ćŠŅӅ¬ŗ”ßk‚)āLēęCžqYJ&џs¼ŗyŪL¹ŠĶdH…éųןZ޾‘} ^£D Ę@źi{2%3 ¹Ō-5[ˆÅČ…)ż xž„"½óSx89*¢¬¬sĶ`²‰ y į €õ÷Å\ҬB»Ż>ÕFpS{RÓ­f@ŖŠčĖ0k“ŽÄå pÕs³EŁü+­ż›Ė†öą­øpg”®·Ę³Ų¶Œ^;ÅvrG§ŖŒ»‘R,łóMšrb–?*Sž!ž¢»XtŪXUnB{­)±F67ō»k£ č0vv>#w]!>Ή#œ|øĪfRV<^ņ(‰fQžį»W14"剃“‚8ļō®/‡ShóInÓĪ҇%VÜ_'=hęFžĢėō!ż˜²$÷Üķ#°Ä]Īóź7BI@ŁÉ?z­L‡žš÷WŪ×pēW.‘s§hēXvw†3‚Ä`)=?‘§Ė}EĢr暐ź76÷IU@śŠąd gū3L¶āK’}*M#S¹ŃéZ†£ Åg'qé_LųoMŽęĶHVQ-ĻŽ>Ō­Š×›©·o>“—Ö@=Ę܀Oqė\‹ųĆYÖ m2ž;i#ą9e>€ć„;±3§šÆ…ÖķÆąxø$(Čõ®ÅV—śœ‰¦]رˆŃśę¶„®ęSģyŝ°žõĖ‚$i73•Ņɦż‚øGÜGņAŖ.—öEEŪ¹„)y隷®D·—(Ä!c„sŌw*7ü9¢_\¬‹pń¢° »‡Ś¢×t ĪI£H™œõīūÖ¶6U¼–¹Ńćņ3$ū2ėźk‹±ä2Å䢷=))0nśźėÅ#E žQ …?Ž>õŽų#Åo€·šnŹFįC‘<ŒŃń§uĖŁ-ģ­ŹŪ²c>`8 ķļ^{ ®ełS|›²ųõ­b+X±Æ[M%²Ķl‘(č;Ń„ź77ö›ZH°ĮHučęŗR±„™Šj knØc‡süF¼£Ä‘¤ū.!G'šKdvō2d¼4_ĶAu·aa“Õģ¶ŃAjķ4…€?s=ėšfŠf¦³}(Ó^ņå÷Dp„“’1ҼKXń—H–å¤ū.żĮKwõØQ5Œ»›z5•Åõˆež7Įž#Čõ[WŃ¢_Ø'å5¬iŽS9Ķ F½ū{-ńł7å[ĄÆi‹S±šĢvņK"Ȁg-ü-[Āž¦™#ųŠ R§I¹<‚C^uųH5(ī “ły_ŹŗRȵ­ŽI Vöķ# †ā&’ÖäÅ&ņŠzYI£'#oWŃ£³²³·F–į•~rĒ;›ÖøŻ;ZŗŅ¼Wel–žm°\ŒB‘×p®fĘ z¾+Žh¶¢×HK©]Õ7Ā '“ÅrśĶݾ·ömᶆO/CČõĻåWt2©q^'Ss§y+3§˜ĮU‡šśÖ[4V¾T!ąļZÜĘŻ±Łw“$?tżģri5{7‰UĀ(8žµŒ÷7¤É­­.gŁ ”ąq†÷®lbŃįŽ’Pd" L8õöØ±Š‹š…t›ķ:ēÅŗv”o+¶…AČĄéĶr„$Ų³9=«9#Xli]j¦ÖĘņ9bG’L(g5’.n#Ž0`‹ƒ…čk2Č žXÆnFØx9ÅoéRĻöĆ-ė‡L@µ /n Bp„¶r>µŃų^X`q» ö·Hų­žŚĘ ³§ĘQnŽ#„rś¾•,‹©Čœ`TÉŲV2ļ-"Ū„EóPõ«ž@×CĻłÕNĻŽīķc+WŠŽyó,”ė[ZF›Š»Ź7 ¹ąćmoNŖŹģEZZ‚ĶŒó® Ä {r<›ūr®I‡­0*iU¬VSI,é(.2>ĆŽø˜.ī®n.RLOAėIÄ ś5”ŻŖw†F}ėŃﬔģ×%ŚŹxł«>BŪŅĒq¢_ĒnšMŪN½Uńˆlo.^Ś8÷>`ƒ“Sbj]B 8š;DŻŽ²ęK‹”ŽIƒ Jćv1šV„š¾› Ņfy¶4cö¾•ėÖž(‡Ć¢ŽźŃ~Ö#u![’zÓNĄpŗæŒEĶ܀•ŻÅ)–Ł­VUĀ€H'ƒ[F60”Ģ6_<’(Ž4cĒ|ՙ/]eŽ«½Cp“ČR.Ū:Ū½äęM†D ä×5"Ķs›‚‚ņ\ŠQ”gص™Śń¦÷8׋(mX»„ø+• ņ(ęč8imƒOænüó»Ķpž"ŠMNč¢\KsĘ3ž¬ ŁZĘŚÖ  €Ü Y€Ć’Zč$¶‚e—*ūŸ½EČse ­&ĆX6Ét=ŗÆ½pš ›B¹ŸO³Y#iNՐ •÷Ķ6z~”-e°¶‚figņĄbOńUÅŅ`T‘¼dcŽ9ĄŖVĒIˆÜ^dw•<·Śī££k§½¬2D$uĘ?Ó½KH“?Åzv§ØĮDī#eēiĘ+#CšÓZÅ—"I‘K;ćŽ¢Ę±Zg¼ ”gšÓ²Ķ#ŽX•÷5į} ÓĆśUż®cwĘ!ge°śÕFVCq4l~iŚ kńgeNżĄpxŠīÓEÖÓĆŚ-“’[’ŹĆ ·<ž5.±Q§Šōæ xŽĀÓE¼±¾³šʐ2J§åŚŹŗ_ ŚAG4.—VģļŸ0䜜ćõ®iT¹Æ³āVóF¼¶‡Oŗ€ŪłD”NJƒŲŸĪ¼›Xń<7’4ńIēJ‡c®{Ō¦6“°’ćRŌo-Hā•€`:cžõGPšµö›ć2—š‡ī¢oõ)ü'®x©›č(¾‡©M|/.#{x'6źŖ>ļŽć’­\®„ā{ę[7ŌmA®ÜüĒ„fXķ`0ŻŻŚ~ś7R¤õĮÆ7Ö¼­ėWŪnõkū}82øXÓĮõōö­cg ZųÆKk“£D’¾· ž=Ī{Öī“s§ŚųĶōķC[“¶ÓīmŹČŒ™ ÜĒ8§)[cScǟ“ Śčæ4M6#§[™„…v”ä’}3Ņ£»ń=Š¼u§„Ō†ŁĘB)ū śƹå&iõ< |)SB‘ÜŽ%Įóozó_G ģį``†/“%zŸZJ]£”ū\įW{9r:b©łÆ5¾œŃŹčdp| ēŸŹ¬ŹP>€‚×Ho ]éqŻEeØł_$Łm叧jąN•{lŠÄ.fĀņ’qÖ«šĘ™ĘźzjŁÜ™Õ‡#${׉x‚å//Œ¦1Äg²ĘløDį¼K§Ek:™nÄ.ŪOĢ1»#ČéüQń/Ā6ŗÖ”u§Ķs'Ł3ģb'óéUõ›‹ĻŒÖ?ŚW~}¤Ž›WrĮGAÅW3:#zü6¶]jĪŃ4ĒH$§wĪ8ÆJ³ųI£æ‰mµķĀOµDŠ…™ųĪ:ć„&īkcŲõk^ĖĆ×:ĢÖBāk8ž]Œ2eŪĪļŸJüęų‰ń_ÄŽ=×'Õ®ķģ“Ė$…b·¶€ 1ƒøõ65EŻGņyrĻó.āx>™=«×õo ĒgØĄśBĒtŹĖ“(ąÖ³”{:}ŽĢŽéŽe±ŗž»™ĘxĮ?Zå¼YńeüšlQŁ ‰f™cP 3OSDcŌÅR9ų‡ÅZÖÆö•q ®€ĪĪyuĘ;×s£GqsmēßNĶoø Źb}h3Ī|QÆ.©]iš#Ū¤{Ÿ”ō­æ _Ė›.]Ųēvx4ļo™­»o źš–Ÿw}ok#%“FVp8P=Oց‚4ūŪ’ ˬ<1ZÜąG"ēęēŽ+•»°Õ¬µk(į>lsė@)ž"jŠ%µ¶Ń..c·Œ«Ė³ƒ# ŠöŸ‡š©ŃžŁ ŗĀĮd’)rü)=‰ņ;]vžßUK† •$ć>õ‰š’Āöŗ ā «›Ū‡É‘ä;¶“Ō ×<äJ=āOÄh<¦ZZf‘£ HSēfÉ8®[Ćõ‹{HõCb/&e+·ī‘Ē~•Ė)joWŠņx–ākmFī !ö™Iڃ '°Æ:žūQ»šƒųv)ĶH”Ÿ”ńž•Qe{}”įLš÷ĆĶ?M†Yļ‚(vžRrŅ0Īܞ»y«·_Ų0[[Ś/”×O†2zzWD&a*cnī?³tĖ›>ŅŽk†€Å1ū¹ėżkęŻNĒÅ‘i­4c Ē€NHĒZ苹—³aćojś>›8¹šč˜U~ć)ž|W™Õ'Óä6ńO挪oR>ā˜{6kxJĖ^ÖļÖ;ˆnmö©^OĖĮź>µŚx»Ą±^XH%“ˆ<Īy*h5WZžMgšėY{'½1Ä-cD†ü zž›vžŃć·xķŌB ±2ķœqAŗ(ų?Ęš³|kc¤ŽG³M“ȅŚ\+3głó]‹¼!„i7®$ŽĶ’łI*Ķģh7Q±ņ·Ä’†šŃ¼:ōW®Aņćøļ]wō|9”Y¼¬“ŻKļøÉV’"ƒ:¶źzŽ…{c{¶Į£h `ūxÉ5Ļų‹ĀŚfæāųoš¦Ó­Ž$ņ²8nĒ'ŠÅļ”Å-„©Oƒkoii®Ģ0“<}³žsZ:Š×P¶7Uw2°.>SĒć@¢™„xĢnĪņLŅń×$Šf·įqgh.n“|fNS©O”²Lš-KL·ŌęG#ī* ÷Æ2ńŸucqoaglʇ"\’ ö­©Ę]4š_˜š ŻžOz»k'˜Š4ń¦õļŽMEŲģõoĢt 4«sęe³# łŠć€;ś×™ZčO,W9Ņ/¼Ää&}IšnkøµG:|·0A‡+9LwśWŅ`Ÿ]»UŽuØĢ@ŒóI³ ›¾!ÓļĪuGdŠ”‘Įł~aķ_;ųn=Dė7·ĖĢß3|łĄō،»“cڵ‡YŠV7–5 ™%_“łVv”ŁŲZĒ9Õm¤“ĖV³•;Ī{ג鶏¤MvöbGWsŒ• 0qųf‘q‘¢Åœ7 x¢RJ“$c÷®bŪĆ÷×b}–䔩ž÷Ņ‚™.£ŽµĢ‹k5·•āĪ1zb»ė3ČÓŌŹÖ{ŠüĮ['÷¤Ģ%tliŚR^\.ŠŠBøÜČ2v÷Ą­-CF¶kI&‰hƒóvśÖRfN]ĖčŠŖ]/)SČŠōå‰ŚÉĪ<ĘĮ›ūŌ›¤Ušéŗo(„lnPN3Šā5ūYuõ–ĢÜŹd?æVbUTÓŠēX’+-OTĢįY-— ““[~'i'0ĄKŪΤ3!8b¹žU¬V†±7mÆüø­Ž!¶HŌ8ĻéP.®‘KäĖo¾i÷OŽļTK›9ó­™&vŚŲ>ÕĻĀ3eoÓłÆ Ć9+^÷5Ŗ‘²™Į^}¦ŪSd:•(ÉĆėłVö”÷īöó0) ±$vj™>ÅÜō­&{Qö‰<šži,ÜéF”¬iKåÅ97*rø_Ņ ŹR0t=ņjŠNŸYG–.Ēżgū"¶5ė˜ ŖGq,`ķÜ3–ü(2ŗOC†mM“¤øpQŚE!³ĪōŖŗEłÕ&”@ņņ00zPR:żB;Mi">mŅŽ~¦«h±ź²@ė<’0.Ģ ¹ģ(-FęV·į© Ż,ŠßQĪkJŠoaū©w ß"=ĖĆ śŠĶbmŠõ -NĪćI¶ `»r7c±¬[ĀŖŪå™B˜ĘNG5åXå/Æ!žÖk q†$œqścg|ēĶ‘ĖpI|ķ§\G_’֟%ėK<фW# qķZŠhŪbę-:5–õ@PpqÜÕs°›J½Ńg··¹øYę{pȲ«’×® SMwK{­FŹtødÄr&qō¦ŅäkĶRūQusɶRS«śf½ūĮ‹öKīäš[Tr6ÄĆØ=M#ƒU×n/KhĮņšĄ}źådø‘å+pŲ=( m£“ŌR[«…L$H€®ą9j«’µÄ“BŃ*»¹“ŒZM¹]Åē†ÓK·ŠŻš)ä(ņ6Jƒ\ćiҵāНł)źŌœL¤ŽŹŅį“Ūhmg(²oįIē55ÕōÓe½ū͐Ųč}+7Gdeiȏr^ź6XwĒqڽĆĆśšųjŃ,“ÖÄķ½—Õ󜑮©G¹­ś/_Pń¶Ó_NŒøR]¤vēTŗ†›icĪVŠ ęŖ#¹ć~ ³ņģ®FŻYƒćzW‘ÄRŅź;‹ē1FdĮ"ØMŗ¤77É`Ņ}™>l0Éa[6ѓ*yØŹ‡×µgP˜÷MĆKŅģķĶƒüĪĢ£­Kāč6P[+Eŗ»DŽķłv8ĻN*4LŽÖÓķ9¤“öDyØė[œ°%‹Z]ÜŪŽĶ"1Ųy<õ$U©ƒg‚ėZT½Ķ¢©yWꯣģ~œW€_ż£ķ×1NŽdHݾļšŸr7'“Ó“Dņż‘ū§½+A±‚ĀŁB(ŽŲ\c•£Ś(Ųµ©kIkq ²A;Üm%œżŠsÓėX÷w"ę3y" ņŪ''œż)©#DަÓÄ\iVŚY.ĄĆ1ܽż+’Ōồ)!‰ 2r¹źGØŖ.§”hšm»Įk+”EņĒs»ėWīļ'ŠT’67TŻČZ,.C]i5;–¹–įŪÓš­Oģ(oōūą·±ĘÅ>U ’ßNՄéõ5Tn~³~ĘßåųGń[@žńeŽĆP•ģÉ2nŠ>ėø÷ęæ°?^>“Ö“_]éw2HŅF’#ēžZń+š¬Yj~‰ŚEöķ&Ęāå#ĶĒbĆ÷r ~]«Ÿń–›aāķēĮŗŻ…Ž“u –—k Č.Ć äöĮĒėQ3)Džæą¢_³†§šā÷‰ķmt›}3Lžį`¶nW,IÜøģkāŸßĖ„ė6q2!8lœZ×IÓ±­=-cīŻ [2ŠMŃ<žZŪŲŽ»—ņmŅiÄKlØÉƘ•ļc¤ĘSŅ%k†UUĒįøśŠŲ‚x €ū¦ĄÅwį.š<üJoCŅōd·[bąÕ~ėĮö® ó^6ѱ™Æ¦„3ĻcļŻceW ģĆb – –ƒdLīHąu׊ŹqźliV3ڰ‘Š•”=ė°Šä‚)öżš'b7Č RG©™WPŅbūle‚np.:ĢHŅi¦A!6B‘×éWĖ„ČrÖÄ72‘#eGŽĘpk69$ŠīŽįƍ¬3“Ö„Ğvzjkx±Ŗmˆp ŸĘ·¬m";ŻejüÄõśT8š&s—–‰/œb ļõ—m§¬®-äeWĻō¦ö°\»qg4pɉh¼ē5ĶGw=Ū¼B¤Śqõ¦;›N“é9ņĖnaó`v«Ū“ē‚I‡’ąē'ēµęFׇoä·hm<Ćš Ŗ˜ĻAŚÆŽ47·ķ?ļ!n;ķ ­KMå$." ą{R=»^<^[1Ž…"™©żšmąFŒ…,¹ą`Šāu-i¬[ģSÓ*8éZS"L§i<ƒs¬ 8#‚8Į­DÖMµŠ”4Y'¹­ĢŽž3esh÷.ńFŲūøė\‰5{h 6é mā#©ü:V6e«EpHcßńÉ®ĘĪXķģDp+NĄnĄģ} tSFuM®_P½qåˆć¾µ‹©_^鶄mlBAĻAō­ĪU.ēE<ƒUŅįĖ JåĀ‘Č&“|‘yķn±,(2[±ėS6\=’ė^Ó¬ēÓģgUi¦,# ’­YZ‹Ųé–×:¤“Ŗ)`ަ²ÜÓ[ó›]Y Ö’żāAżkĀŽKłŚÖŁX %W?ʶJĘrŲµwe>‘5Ū|üķ sł×‘Eęi—/żįœJŁI/Ų~ѽ‘"WN8ļ]6,1@7ØpqŅ­Ē»½ßuB§cŸ_JĀŌe¶†v€dŹ[rūB‹øĻ6Mˆ Ŗ¾yĄėZ¶vo4–ļ"‡U%¹)¬§¹qÜµÆź^T–ķ’&^ƽr:­ä÷ŹļpY˜ÜóŸz‚”Ž9–DQ€ĄŻÓ#„¼/2 •O!‡JĶÜÖ,Ū]²H‰M§'ŽōŲµ8-ī “ķc½(•)n„ØyW—31"óČĄ<ö®÷Ā:Ō×Qˆdy7ÆDķZźŒL%3ŠÆ,WPŒoU9÷Ė/¼rqņœm\t«"55żJ=9†žŹŅlŒ ƶÖ~Š›”d‚¬±“]Ī—FÕmŽqo!@€nŻžµ—«-†°÷q^å Ā¾~šōØr.(˳ń‹¢]"ee@0Ŗiž6ńM–«iµ”ŽŻįžX1ĒVøéYJ”jŸs;Ćl—Ņū>.vīß·åÆDÓ¼m%†Æys4p]Ę«†cē„Jž£tō1“Łō‹¢/™ī-Ջ0p=«‹ńę»eyl–ØĻ*}ā£å9«F2V9½*ćģ³ČTLć'pūŲ¬N&’ńäåesϵ%vgW£ŗ|Ą ¢8®–Łl¬²)3ŽHć#G;sØ.Ÿ‰ab„ĻqėPi63źåeµp‘c;±ž(6Ī² źhĻ(ŚŪŽ7w§x’öKŁōż&U…`‹÷›‡ž:śÕ(„Ģ8ōf¾Ō vD Q’ēÓŚ½žĘĘŠh֚K¬k<„ƒ#3qZr·ö ųViī\*„'9^Ų«2ųĀÖā1B pwi{2\9ÖgKęl¹B§ ī=ė—>XVŠ7EÜzzSQ±‘ķ?¼'ö=åō—6Ė2)eV#/ō®‘ō8®!V1¦ņ:g€}j…cż_hś.¤"•ƒ£~SÅmD–ͤĆ|žRɐ@=q@×cķüųe1˰ģzT^i-å–9¦eĮ;@¬Z6]ĖRÉØ’hŪĒąĘI2=ŗŪ}J4‘—żjü«ž‡ Š›©‘hÖŃZ3ßÉ™˜zf¬kzŻżÅŃŗEˆ…UUķĄćņ¬łjHó{½Fśāynf£ä/ķśš‡J…Žźiܹ„gSZE;)-@šŁF¾‘-ćņĪŻÄ°ÆDÖ5T’„f÷CŁo$2…2nŸtÅt1–ĒŚ8Ķ$)±°§rš+|#,Q4öŹ.!É}Ż6óœS¶”Ęu”q¶®bXćAŲ:żkŌb»Ō¬Ö%…CĒ^C‰¤ec¬³Ōü›Y|čįžį°Fń? äģb‚=FK§·O3;²k&iĢwoā5ŠO³ĪńJTŒ”Į#3^)r÷Mż¢¾f%W<õ«ŒŒäŸR]'@ū.œ÷sJ“JĪ0ƒ°%¢Åw=äwąƒSœó]Iésš[™Śg†¾És{«4ķsmTÆŹqŠµ{[›Qū‡†lŽ"±“*–|+ ·ü$¶7“ŚE5“gs+”C^½Ø¤·†K(<Ų7ŖJĖ›Sh÷/Ē«>ųĖp.0—‚+ϼ[skuŖ.čćEDŠ®t•Ģø5Ø7éöš ¶a׃]½¤¶Ś^<įc{Ļ%ńä‘RēŠGšé&kH,õ ė8ī.dMĶ1°śuķWmõ_ķ{Įqlƒnš¬øåMf \źēń}µ›ińĆ7øV—OOZ菈“ķkN1N<ņ(یdw5”»›EXć`Ö­ōé.QDÅp žŻ*¶ŗæŚ B¹ķÖ Ņ.Ä3ųF;gŒnܱoJµ>•{¦hZµż•œ¦xæÕķĘO^”RčŒū‰¦¼XŽåó2Ø'½[Ń£ņ/ĪB³ēļWAŒ™Śėq—²x"0ưé\Ž“aA"iĻėZ)÷2ā E,¢h.”ŒJpc|ąŒV^Ÿ [źŚ}Åō”¤‰A|ē„.my“w‰y)†ÉäŠ$|^7`öü«¾ÓõłļĆ~Jģ )÷±VÜ£āVYa[[v—Élēęźk—µÓīä"KˆŹw=ÅĻą©<5§hņŚß\‡ÕRĢ£Œ!Ÿ…u,Ś–”魋ÜĒīŽĀ·Š3•ś”ÕĶŭ墅K•o’Eźµ±§h'QÓf„n]ĄōåHļ[@ÉÜāu› æ ¼sDeņf$¢ž«T“ūŌ§7W0żöĄ’õՄ śž›hŗ xÅ`Ŗj[%|ÖꇬŚŲļ„,Ć`ĀR(Ļ×®Ååōr¬¹…I*óÆ[ÓõM/JšM®§%ŲżŚŸ?S\±©Ż^ļHāWŒČ1·Ŗœõ Ņä±^jzuŖ®ł~vĒ­'JšßĪø»?|½é%Ō,i¾’³OPBĮāŗKHH“ėu‘Ų¼£„L¢#Ė5›©ķµ4¶Ń…×” }Öļ“õĶtöė%ÅŗĆzĖę8Éņhå[ å-ym!±…ČfŗŽUĮĆŪś×n)„h™’7lķsUaN™«Ka«ŁŠń‘‘^©‘O(2¤LGš >Ā•ū„;ÜͪdzŪŵˆl®AՍ®KuiØ cq&.sĄ¢ås5¾ŗ.ķaŠņ(žXöĄąž2¼j,mä˜[@qߞ•2ˆsœ„ķė*>Ņ褎§ŸĪŗy¼Xm^ I×tašŪFMO+g§Ś\A, 4EŽS#"±õ;y'óļ%U mõ­#±œ»šÓnuu¹XĢAē'ļcҽm-X³Ęsdņ~”ŹŒ»Ģ—ŚUŚ\Ū†[‹“ŲF?JóØõy“Ūēćx‘›%}ØfµĻ‰t»›9"™žL£>µĀÜŅņķa0A°¶āz6}©²9“±zöÕS"7cŹæŹ¶ń–¦‰I‡BWõ„ÓR3Ō“ķDA'šVVsó8ZąŪĆ w½vFsӖ5“*'ć_ Śźł ŅIz„lÉą+Ē h¬mna1ʤn\š9ķHŁ3jņž‘6L’Ā š½o᫽]įibułvƾ”ĆµĻ Ae„Hu1węĄD‘ƒŌtČõÆ?š™ØMŖ\Ģ-. 2®ā$Oõd’ēµm„zl›RÕ$øžŻgøŚ\…^µō×ĆK-¬Ōjv¾B“µ8Ųz Stž:ÕtOk©”ÜÜ@ļ,•€ˆ!GĒė^‘į½;-µ-1"•ć;™å‡Zȋ³×-¼o¢’Ā7­kw¾Ži,tł>ĻiåóŻW«ƒ×&æu__kšęµ}&–š}ĶĶÓ\¦¾šĻ†¶ŚŲ­ęÆo<ē;ņvm9÷ö¤Źē8找K›Wxo"žÕ@¦"n÷ĮöÆ0Ó|«xŗIu›čeūp~lŠśYŌķ¼šś[ŻCQss2’©ˆ}įž×挦K”“ģ|Ū„|Y™ę“K-Ab“y:“dZöy5ēÕ'†[0ZQó1Ļ^:Ö,,w~‘y©iį”·’i• Ų£'5ęž5y£µŽĘ8¦2ÄĮŪoQžqJ3"QGœĶ-Ō‘<ńnnmßĆSųÅZ[ė*³½Ó–NĒ­mķ ņ55«¶–iŗJ‰ČV#·½q·––Y'™rI9½8ȋ˜¾]>āyŠJ–¾[–~9cé]gü$Rą‘8!X(õ`*˜Ķ«ļæoi;ݰyʁé[ŽńV·k©ÜŹ'h€!pųHėüė bŽ/Ɐų·Äŗt÷Ņ,övźW'’ĖŲڽC_·é/—ö@AłuķÅbįŲéŽÅY4‰'ŁĆø§ĢYŗ]‡‡ül÷‘¼$;œą~f”Ęƚ‹õŪæO“· ¼!ņŌåY½żUKĆŚŁŌŽø»UŪ‘“œgŅŖ1›čw:Œtūy¬(²ķģĪ+Rā[Ņģ7NŖeĢīBAõÆP—AņvXn~]Ńņ C˜äĻ`ųu¦æ†4Ó}5¢ļLnzoĒ8żEt‰ŖėvśÅ½ü3$6ū(1ĻéYór«źkų“[¼Õ~Ł„iÓEg%Āł{™øŒwlŸ„|Ū x‚īÉ„†ō;„w‹{õ”€E"l{‹¬³`³l„ņžÕčV÷w7°„Ŗ˜üœd€Gւē_/u_h¶²@<¶vQ÷‰õļ^Oą?¶‰§I”;K“łjNÕśw Õ;č}K ų®ŪÄv1M4»äŒØ€p€wśq\/Š"š÷µSg§ŽĄ×©Ųl~T]™GY„OmįĖIl!Ų±ī''#ø5ņ÷Å­~é¾ ßk6:`‡QūoČŌF™x µÜxäĘrx5ėw“O¤Į r¹6G'Ž•nŒ-#Xußo.d˜q[ė~b¹7PŪ++)’AøŒŒdכ łyf’×Sy<•ta•ćj8Ģ×7ž\Ŗ¾[ā$±lōĻ„Zfš‰t<–÷ŒÅ\) 2k³¶Šģ`C©źqĖ#*3ˆĄåčqAW¤B—ŗrŻŖ²7FEr~ »ÓtčRigå1łD€ńš>cõĶ3>~ǚj–rݹ»BĪ›€ŽpµnĮ$v¶RFQŽP0”G idj0ŽEÜĶ)2¢ÖÓßHÖåLJålri$MMF}Gū.84øŚźTĄq„ʁɩņ'QĀņIü*•ŗ˜ŲĮ“š®™$śõŽ­xÖāK`bž xüMaųgFžėRM:ĘD<¢5ÉĒ|R5¦{Sč ¶Iaq+ĻtŒQ²sÓŌÖv„m%šĒSĄ$ƒŠ bģ\“ŗŅå€Erˆ£HvźŁ„×4x%±q…|²"NœējgŲӜ‹ĮŃK¢+¬EZįN@u »?Ž’Y’āŅżÆ³½śäśŌ8‘ⲑt‰k ,]Fāk+kČܰV;OAÜUFÜĻ™åµĢl±±vi0"ših¾'žĘŌ<«QŗWŹoSŠž*ˌśy2X\<·²«±=Ū?…:k‹KłE„» ·pTŸŅnyĢŖ™ķ-c‰aݽŒĆ=}ėud½Ō4äŽGĆćk <.­!ĶģmnE·žėƒž1UW̚T!ĖšOćA&„­Š/ļŁ™š bŻ ō6—}-ÕÕĢR,Rg 'ī©ļĪ“’Ų³±‚…‘‚)£ėę[>•"ŚY‹‰.”Jj…ź“É3t­5»7Ģļhł*_æ=©ŌuMRā ‚Ź>rFIÆ Ō-'ÜĪ~`x$ŅΟĮšÜÄņ=ĀęĖp;qßė^©oå[$ÓDˆwŽnvŠžsGn§3ŖÄ-”žŠš(āøpÄ ę4é®ļāwXķŚÉć ģhSÖĮĢz4M¶³µhį1DØē%sō®"{™5‹óåa¢ ˆĮĪMiXQÜōUÕ%Ó4å‹Ė #®ŽFvžēŪ„y޵«ÉtåįŁÉł»ŒUŖ…žysqöi„°¾éQ²ø5Üx_ÄØx$‘B0$’‡å©¤Ń÷Ļ…õ#g-»ŚĶ·¹Œī>¼ōÆéOž Õńäx‹Į¾Šofó5]7+1IwĆn¼~µŒé„ >MOčWįī¼¾+’Śøs ± žĪ#óÆW‡ĀóŪ]ŻŻ]£ÜY]ƒ¤l;’*ååKAŌņ?&?ąŖ’²¬ŸžŪx»CÓąŗÖō؍½õ±„Pgd”ŗēžµücxŸĆĶį_T°Š0/¬/ ŲVĻ^£“U{¦ŒāśPxűź–6²nI$(ŽŠ¼^§āļčŗŽo¤^īåŻ!'+īōƵ+I ”ĖŁŽŪµŹ4Īā…Ąč zV‘©éĀ9~ŠņFr;b®…K;3ž«=šĪq5œ„Ŗ&Ǝ_Rk~ŚņŠ™żņ÷&½ü<ī>Q-VBķ3!`r§?„G“Y.<Ütė]šzKcŗšÕå•Ü‹ö¤@ƒ(ŽOCZ÷6Ö°–6²¤c#hūĘŗQĪ~āiīnąYFłNy§įY÷Śd…ŅH]šą6x8Å\ec)¢Œé=¾B“»ƒĶM4a‘I_™½zM»ié)˜É"¢s’ź®ŻVŻ­ŹÅ!MߝMÓ1/$ūī–ųž"2K ÷üėŽŌ57’į[ĢEeī¼~‘-h[[Ć-š3Ģf`s]މ„[Įg=ģņ•ŚÆ!ł{ö1„Ė©Øjm©Z…,™ T X–Je”Fw7>h1:*Co-ĮuĆA>µGU¾Ÿę[4ĖŽN4ĢłĢWŌõĎ)›o$wbŗm#[KlO<6ž“ҹ”ŌéśĶ–³9°ā[Æą°Eyoˆ|5wg¬O+O-ĖI&ń杧Š{V‘ŒŖ\†gX|ø Y7mżį'æµ5 Ÿ‡‹2 ēžµDø÷:K.%·$‚€Ā­K¦i5²Ź7ĒødĪ(.2člÉįi.ā2YŪŹ‰$÷Ü¢²m¬ķ¬-.EĆ>ć—É<žÓ±/s–x„šH yG Ļz}®©jóĘ%¶x·‘Ū×5N”1¦™ģś_Ćß“ZÜ*BŠĘ3±{z×;gį¶Óu70&Ī× ö÷¬ŻCUM- ?Ś^5ķ›,čd‰IUĻŻ½&½ŖxkH›Éių?z2 éžj£øŽŠČ< ›i³ *+1?3Zķ—Ik;ŞÖ'»ä`}ŚŁõC—ń•̐y‘mʧ$’xī›Sl•„‘@bźœēń¦bz^v—RAk2ŗ[1Įd9#š®”Ų’g²Ģ y³µJMŠi6q]# oē8Ī3^m-”—^dŒohŪc8Å'&Tcrιbš^ ‹! œ#g®†]BŽĒL™”‹Ź(ŲO;³ėX¹³[XänĢsF&ļn£ŠĒŸMµŠ¦ 3äõéõ„ĢĢŪ]FķœRFįŠgØ­++ø„@Š7ēå#?tśSL¬u:M³Ū·™%±ņó…=Mq”Ū\ß ÷W²ƒŌӋH©K±WÄvuĶ¢ˆāH>cŽÆķ\ī‹5¶ŸØFeŗ\øĀ§s޵¼jhdįwcŁķ®~ŚQ””F{Œp+·³–Õ *óu)µnDĘ6<æR²žļVigŖX ¤dµÉŽio¤Ż wiŁ›åöĶb×Ch3ONv·¹Qµ]Ž€9ŽŗĖ ¦Ø'‚5S )2e€ õ>•ĪtĄńļiJ¾ū8™$*Bį2sō®ßĄŗz‡–ڲ# zVrŠŠśZ×Āŗ&‡ē=µÓ4ŽPŲ :d޼b¼ėU»¬²É$bŲ°Ż“ŒQՅĢjÖ1h‘GT»•JżŃĀ¼VĻM“ķ"g,ŪŽ<ąÖé>‡<äŗŹŪZ-ŗ_\A“I“{×'uf— eŲqƒČŖp3ē Dݱ™¶ØćķW“åUSk ĘV Ōž>• eŠÓæŅ–x­ćxŹķĪHźksAk{)"KhŹĒzbƒzrčz”«»ˆ*+`.åā¹S£XÜĻӗžtbFzcҵ¦‘ 鍅žœc¹ņŅ5AŅŗkϲI”é*Ŗø 9$śży­›F.G—ų¹īķ§…¤Źt –<•Æ&if7¢hĮÜOÖ³$ц»ŽM ™~éēŖvš7Łī‘&åɥ抎֌ęóH»‚ß{ĮlYGzö-":eI‹ pzVre&yæÄM7ĻĞXšź ÄcæµqŚa[$[<Ą@%éķD_A¶oŲčvä³*ī>\z×FžK;wžt@ąn^ł”-A½M)õ}}M„s<Ā2oEĮ銿„5›[§–ö ¼¼nłĻJ„LWdŽSøkpÅ;ŲćåÕoÅŃ“ø '•÷š0­#Euvz¬ŗŠnŒĄéō­Ót³¦˜"Ž(ēūŪ€ż+d­°łŁ‹k}›+b0ÓōŻŅÆE©Ē~¬ 1¶ÓŒŒę¦R±%ė»Ū«[m:DņĖēo|W£i%Ƈķ,ÉW*U¾A•ükžS4‚2,!“ŠęŽžD•21“sZ·uŅ"“L3ózQĢ‹)k7šŲÜZÄÅCJ ©==j¶«©Å„h×rBŃż©ÓhČĪ=k&ilj&½|&•į™Ļ'nēÅ\¶ńōk3:y§ĆŅ)³f-röęŽ8݌*Ų8_ZچK•ڱ»Qy=ó[£žeĮs~K ‰(Ē=kŽĪGŸģ/šžæJRŲQ7tŪ½1.Ö8žlg<õ®–ĒÄfŪ ó% ŽkDIāIØ›Č6.’kĻ Ō®µ×‹jJ.-åĒĻĄĘ{{UF7b-A]¶ŅžŽ@eÉ,«•Lzšč.¬å°IžéĖ©õĪŠj¹pz•Æö|ńĘź|²7.G¶4ĶV0Źc }ъ̸ŹĆõ.×Y¶‘#I»9nyõ«~Ņ®“¤’ŻŠö€„õ¬åcDÅ×ō7øuŗD@K8Óxjiö1+^F³`™6‚pj\Žž;ŅÓ$Ų¶ž«óųĖFÓü5Ø@ņA=ńlOQƒĒēŠ@|ė’ Dļy½ēs°cæ—PÕu+ūŲē‚ęHå\Ōžō5¼Iq=`_Mo¦[Ms>éŚ H­.›?›4w…-ĒūÓ­ĘSC\™ ø Œ+Ļē]æÄK-3ĆIįĖKeY¤R’L¼’cšØē5ög3„hŠĒ˜g¦o_­k%øų@ć#½Yœ‘ĘŻĻŖŪß[C#±|«ņć=õÆN’ŚęD‚āā"XŪŲV‘S>nˆąĒ…õD’öņyę6o!ĮĪ'§zž“pš…ŒšR\*a6¶Æ/B[īliŽįšĘ7ĄńZ6š¼ćY(BŒĒ%ŗ~®#€ų™}&Æż–¶²ÅmlŁ 9sž?„EįˆŅŽĘįī%e—"㨩u£Ų‹X6,$˼GJŠK=&„ā’iłĘ?'S{óā²l®C‘or¢58Q ļ]f“iq>–t‰1¼¤äPMŽź¶Ņl XGqÓqVZīŽß|–—@=źćŲFfŸg¦\jKusŸ(SśŌ·v–ö× $dģč­hŒå~¦MĪ›cswk<ˆ²*ąŒę±<¦Ä,ķšĘa2ļpæĄA<~•¦†LņkH®D‚_Ÿ }kŠ"”Öä”}»_µg/!—m§Š `ŠL”ū£Ž•Óė÷š-ķmSΌ ;˜s‘ŌV7ŽĘV Ļj[Ė$0äÕČjv¾]ų,¬ŒLuؔnoR·ÓgxŽb»vµiEl¶ūг6:㠬йn8Iķ™B…ž GŽÆDŽ;T‚āf) žYĄČ„¹Éi³D/|ÕH¦ą-—ƒWęšĪ„säŹÖźä¦OQMĻ”J&d~t*‚AŖ“Ó޹żsDņo!µ²błä²ńĶgĪc ²]Xf ]ŻŲm>ƒŠ„³2Irź=ė4Å'm ūxåžč&ĢØ1ō®šŚĀHɹ^øĶtFV0”nsŗ³7™q…瀢—M½ócX/ ½Tö­T®ecqōŲ®RC)Lg“śT¶śL–ńIt4\ĮŖEj‘m&².X†o%Źö"¬Yłhķ3Bdߒµ¢‰¤$÷=M›D¶Ó$æŗ[wŸx(„d}Mt¢ćJ×ķSE 'ū±€£ņØjĘÜżĘIkn§*AČ­ø-ŸUÓåŠÕWrƒóc"¤ŹLņ»m!l/u©ÄĢē…ĆmĆzćÓŚ –HÄéyl ł~£#Š ±‡«ĖÉ!‘ö\ ‚:×):ģł¶‘¶¢[ ˆļ'‚.³ĻB+Ö¬u)ķīP@²EĻC@Déu­A®¢³yäź yü Ø\ßnSc0GC@ÅøšżóO¾…x0C =Mhi:|ZZ6HkęåW4›ŌJ(ä5k›Ė‹™ŅķŁ#–QČZ—Ć‚FŠįŽB#•'æµEõŗõVø»0Bč8źj­”÷¶SĒmf¬Ź~B½ģ̤µ-Ūj±ę^[łŒŁeVŻk:ļSóīK\<~[7ą+K9jH×Ė"D<ŠĪōÆ.ńQūDĢ"'ač(g8¶įD $Œ®xŹśÕčVÅ„ffHŸ{'” ¤®z…sqqu ¢ŖT‘ĘvŠļ'“‚ņĆģR±S!ŚŲ8? Q;_izV“’H’gŒ±ÜMs:åÅÄ^#™ą»/d±ķĄĻsš£c#G[(īęg‘’WmĆ'š­ām1eÕcŗ¶· käƒ!'£qśh ž]|!¶»”m$ąĒZŚŅ¬Pŗ#Ź;‘ZĘ*ĘnG”éŚ#̳ˆabń‚r;c½yŽ|w©\cķnŃF<‘ŽŁ<ž¢«•mčq^ŅK®$diNXõÓ’mŁjZ•“OņSƒ“ĘhæBmŌ³s£½äņZŚŠŃĻ!N+¬ń‡Ä:u¼ŅL@@søJ‰Ųښ=į÷‡%ÖōŪČoćk_.?5ƒ0łqżEKāĖ(ōė ,§”A@{‘\ŅŽč>‡šų3ĀóÄd… Ol¤,dńs]œ“Ś,æeP¼čŽ\Š£;j ¹ęŗģQ鶉-)*ŁÜW:˜kä‘f>I8ĶTˆ‹ŌļķĖIh"ŗ(įp*Ž£¤čFŚ„¤3ØČcōĶC•‹<™|5{w¶ś]³yŠģ ¦=8Æ+ųŸjĻ™c;F°É1ˆ8n@Ęyö’w¹œ¢yGƒ|/mg®ź’g¹bł ēųA–»ļ,ŗ¦­¤d…mB2Œüeæ_Ī‚±I“+)$2ŽŽėI·µeČ9=ŗńZrs£jēDx”–;ų`ņYŽŅ@o×µpR]iÓõ[ė»3°e_)rŏCO–ŹČJgmšŚ{mjŽĻV¹µxU¢Ńø85Łx³ÄŠi¦ N¶ +•Ė˜Ō¹õćõ¬Yg„ėj:ßÄ #]ń ߙkl‘–‰‡ßĒBOå_üų‰ą+k«7@Ó óQõ ®rn# Ļ ĘRģZĪŻ/¼;s=Ę­½Ž©§ø˜²l9ü? üŻńĻĀ­"ė]›Q°²µŅķåy#Lķ9Č…1Ø h·Sj­%“ -ŻĄfģFyÕŽ\ė27’’3=Īī£ŌV—)"ėZøŠyßˉ3½Gzõæ [éŗzI A¶ņ)ąœa»`żi™K±‰oā;½×_‡]³’ą24 R{łW’xzęļP“ŌoĢ¦;阅.I+éĻÓ„ #ĮW–:.”=«µ—žvHW©QÓ#ņ®LŠm4˜cCvęńśÄ½8EXō hš~£eguq$‚ŗF•:8ä`Ā¾‚“Ā:Gˆīl%’Ń”hćT8'÷„w¬ĶCŻģuŅ£±µŸÉ‘ Œm Jē<×;z°źš^ƶ‚KGW°@[§\õā©JŚ{Cć;Ż:Õn“ģ—r\[#nó„ƒß5‹‡5ĻA’ EÄr\Dā@Ć'Ÿ7sĒÖ¼“ÄVš}αo”7:s¾br‰Įž”s™õŌņsᦕ”ė’i3¹gČĮĘsĒ«KĮZ«¶¢¶wŅ-ŒĄ˜²Ķ”aķYɕsźĶµŲ„Ņß}£ĶO0ƒ!y{ęõ{5hĶĀHb~KuśŌrõ3‘ó‹µKÆ ÅŖč¶ryŃŽ©ŠI±ž‡?/§Jęüe=¾­cØ*Ŗ*s¾EĻ4ĢO`†ÓUŌŁ££ŲņnĘĪv÷Ī“ZµŅīqomaöFū…·óėUȓča®ƒ¦¬ŒˆcŽåšÄ dSYsųäź‰ØŚIĶū°Ü€ßJŲpgGįļ„M¶žžWž¹-“0ŁĻZõ-JÅĘiī-aÓ¦Œyp*’ĖUŲśŠmĢ–Ē„hš”wž(m"X$“›ˆ!qõ?Jś·ĆśFš–`"p®ų°; ĪhŃJĢė-ōĻ čŗ=Ę£x±ż­ŽŠŒ0¤{÷Æ Ö<}q5¬·ś\pʰ'‚œqéÅgcU3Žˆ‹/ōČu«H¢æ˜Āʘ-Žēš¬›7P¶Õõ ż>Y-“årńÄąĄéȧb$rŗ&ŖļńÓWń ݰ$”Ü2zē=ų†kė/V·ÕōØn-J‡L§$oĪ‹xæÄ  M./#†CuÕO]‡ŲvÆšüś…¶©‰<ęRÅÕsß¹ėJą}{¢xV“’eQ»;s‚tMā„é— cl©{æ,›pAōĶ'~‚h”āżBāÅd–o7Pw‚p ®cŞ7æšĶ¦‹†#u9 ß>ÖT'æJJäņ‹üG ųMÓķę|Éksæ²YČGå\ģž±»‰VŁsó/Ż=ø«å&Ö<’U‘|7ŚZi¦āY[ČĄmųķT“nVxÖū„fŲrIĶžļi£‹½:łÄ²`ģ„Ą’×\Ļ•¤Zj¶¢ę6 ł¦(!DąēĀś§ŠtłåŻm8R6u^O?•xœ>"’+ŲŻd’”“Ēå[EÜ胊½e.ØjhF‡ŸŸĢć9ÆT°šF›āX|›hA‚6•ć>ŌĶ}”™Ŗiē@GŅćDŽ$6ć¼ĆRŗ†[”FļĀ„É}nz¶6§ĮøŸzwķYZń·ć(ŒHf5`™ę2ZNś‚LŒéšÄōÜkŁōf1ƒ^Ę'EšR]M-s¢‹Ę’4¶’ŪBDAĄøćźA®›Vń^•+Ų[Ē”æiĢ’²Ÿ•cĒŻĒAĪj9Iit<«Å^ ž×ÕnƒO\„PÄ ó”Ŗī¹MĒ÷JsĮ¢Ż ĪŅoFšrĒŸµž¤žv⽯Į0°¶“†ßQ(. (Y3Įü*¬eŹĶ/¼+µšK;“×~ö?ŁČĶyž§ąÕ[) /"ĖŽNŽiw5„OŅ5_Ł›Ķ:Ź{‹g.ńn\Ž3ļ^µą?ų‘®VŪūQžŚq ‘NāXó×”«6vGŠæšÜ›)-¤‘¦:ČƐk›Į¶ŗµŅ<¶é8Fž$Ļ=)s#/iŠą¼GšęÖ+»ŻQķĢ11T Įǵy>“ā)掶h%.į üĒ=)’ę}‹įŻ2[ļ&“’vx2£`.yĶax‹^ūE“ö:‚Jc`PF~l/§§’®Lń«ūiÆV‚HTc'ҼŖ-.ņ-FQ¼ŻŌRD†8”ŗł5iōļŠ£ˆ€Īü~”Ųąõ? ^Žj^m“2Ķ1ĮĘŅIōÅwZ/ĆżR )5Bśå.WŹ'$Tņ#^[źy~±/ü#Œ¬óy²Jß"ēŒūWyįĻ[Üiļ-ōÖÉ<¬# żG=©ø™Ū”ŚÜɧŠŗĄ¢F?ģņ S²Ń„½ŗO,‚Č ³īÖ%-BµŃ“[;yµ]^x×Ė`|µ_Ļ·Ļ_ź«y$¦'ņaa†ćJŅŁ0ÖüIkoįö“‡V°“ŌŻ®‚׎•ńĘ„­ÜŽkw—©%Ē–$ĒĪOĶŽ3ĻҬØÓ¶ĒŅžÓo®¼7 ōN“Ė(  Ž¶­ōÆģćŗ+9Īwcō MhdxŹÖĘżL6ˆ’f$ž:W-£h’i’yPØ ¶N“ņZšKŚźNāąf3ŽˆŽÕŠx—VÓt=: 2’is—'QŪ­ŁoŲ/uį$åę@Ä*¢Žø­æ iqčŅ^]–[Õ)žē4ÆŠ³Õü2Éecs%ܶŃĶ;•Éö ž«Ęfź ƘažČʆ7FÉ'S-@ņ‰“ĖĶKR†IT,bE|ż:W»ŪdzHą#–6‘É>“£c̼A­]x\†Č]3įÉČ\÷¤Ódūm„ĀīŽ¤øP9ä>¢†‡(ésćĀqX9VIQī9 Öņ œ¬$ćUĘ –Ž+\ŌeI-ģ­eņd'’GJŽŠō¹-’}m+O7›ū¦šv—‰/ƤµĀ}„ڽńÜWįŸķĖ{–YNå$—’“č=)¶lzF‘££],mmķ’1×ė]ę„”Åf l¹ģ;ŌJV™āž%“1jLth‡8ļPĮŗÖŁo%ˆ:)Ę=MbŁ]HtĻ>©?‘ “6°‚A£b»=2lJ’bƒķmņ‡^ R•“=ĻƁō6šKæ.š‚T(ĪįŲ{󁧟1źe ģ~÷MR“Ų—+čuŲĶs Ék£Eł9łqœf¼ęńÆ^FūAJœnģG„>vZó¹x^ŅEw<`®xö­OO¦O¹„‘ocŒ‰0WߣęZ&Ä—“G,„¦bŪĮ'5WńJ^ɧ¬Ó'Ī͹0­l_qšEµÖ™§G©In·,ą„ńƒÅgėS°BŃ6ٰxźN6tž—Sŗ¼‚)Św'»$ąÖLjßS’Cnńʑ™ŒżüqQŹLXxĪEÖŻ4ųÓ"«±Q÷F{žU™ćß$źś•ćĢńOŗYc€ø#Ņ“Œ{šŪBĒ„ü\Y$µ’ķ“ø ČĄ>æZĄ×/¬ļ.ķĒ*äz¾=k9FĘmµ¾·UŒ“RY³üCҹ?iź»EO² UF9>•%$Pø½²ŃUa åNYŗ}½i[x¾„üŒK .<…(3‰Öµ‹«ā¶Ņ‡ū8$('©5«¤¼vŃŪX¤*ƒią j#åŠļŔ·pxgC*Ø'ę(õÅe’f]h²„é‚Y¶W稦żßź³_ÉpmmžĢNĒ=>†ø„°v¼oĪīįAjF\ś Ķ8egąēбkŚ“V§{„ޓӱqGßÖÓ½•ŅŖ|ä·b8öƲ’d_÷?¾0x{R—S‡n¦ŠŚä0ĀHÅ»žc“ėZJG±cū&ųć m\Ś\čZ„PZŻä· ł¹•żE~…Å­KyefT¼ńʹīČ+’kP—c Äŗd:ī­čZķ‘“EŌ­šĀģÉE# ’Pkų…’‚’~ĶW_ž5xJŽĪ+[uœa3·|däKƒĪćLå¹łĆ£k—šeūÅ…!Ļ– }qšök;člü„ŗ‘å•c rǵpc!Ź®ŠRźz–ńÅå!Xs–=®ĻD½·óģdG}øēØÆ'›[ŻOjŠ|O8“ø_2G\olįOÆé]$$<²4,ņ”į6š3^Ī_Vś³Š5‘ī[ŗ(ĄaŌVķ£*Fė$EĆ}ßZ÷)³–QčhiŹ"X\„ÉłHé]%­ŌHbtø ąę·R±Œ F…ąÕ£ÉUżÓ]ÄvS41AsĢą ēŽ“‹1šŌå5»hķL’iåČįO®uīØä*÷{в’¶ķaa#o•qƒ“r :Ż6d2ɰ(QŽ=éÉc ·Öł‚”„*†>āØĖ§Ā^u‘°Ķó“ļLö©5!ÓōRīųZZFÅsŒwvÆCÖmÖ]:;+•FUA2ƒ÷q@¤“8K‹x ˆĘ"#å ž‚”·ŗū¬ŅKü i&™oss żó8 k5¢xžAn‚`ŁfĻ>Õ¬‘“FrDŃ»o/±<ōßOiŗÖd¬2¬ć–śSJÅólōä‚hõe–E“ÄxäĘŗÕįŗ“…÷ČHä:dĶ”ļ D&į`03»Ž¢Šåw,J3鮋Łæ¢ÜŲN“&IĄU#å5`ĢŠ\IjįG9ĒSéRüɹčŽæ–(Ή<)’ČNBkÄoµ“ā-GW“·„ĆäLcĘ8ēÓüöŖ2r3tė)eÕO-ēįNxąW¶hk,ŪŪN ‘( 2xQķA¬dz{źöÖ:¦@€ĒAšńń]²]æ•#ł#±±ŅŒ/\Eš5›©”Hējć=@ä~UWA×'Ō4K;Pßq,±9ćĖ'­įęeR] =~Ż<I”Gܤ`b½[ĆŗœņL!ø;Šļéœu­ĪVĪ^š µŽģ™Ć2Meź^ ½†hfµ‡l »9J&jFŠé’ŁdČŠe€\īõŖóė²źW0FHTĀśÅZ€¹‡_UÓKAe;†`押,ćŌtż&ļ^Ō->ҪʤĆ{óۊR¦kœv„¬Vs!·h-¾VĻP;Ь×Ü»ˆŪ™ku V„b¹™»żœnm!‡÷†Ŗj½³‰Rå$n^r+6…ŹrŅiJ®Ń•.Ŗs“ŽøÜßXßĢ(‘·ĢH=é+:Ū-nżeŠv½ÆŻŪÜūę½"Ö[R„”– ‡@ĢóœPiŹgŽYGp²_\9T?­r oe>¢.„)l£#ŸCZ@‰=OFŃ%±ņī-:Ž9ąŠéō£cä<ńŹŖĮ¾ļNkKGŖČ·H—MƒŒqųšēn¾Ė C:«Ģœ‚}ź% LĪŃōIoīī.Õpū†ž‹ģ+ń.„«XėŸŁÖwRĀĀ68 ĮéĶL£czs,é:}ž«1Ōu9{•@„³×ūµÖXŁŽĮq°»ÄŖūŽQXĶó;+ļÜ:¤hĶęmĆdžµĒ]ź¶mö{;© ®ģ°<ņ ĘĶ ›­XÓŅ)±Šp63ō’=ė.ÓO·`ÄŚ8Ń #Ž¢,@‘]+Z&Å Ūpk?ū(ŖIn]cRJÆĖŅ“'”¦< `€ė9lŒćÅehZņźsJUĢ(Äx5-nZ‚čz•Ż“ŅZØÓtŪ›«„vĘ„‰½yņZjš~¢Š<-“ū©õ¤©·©[ŗÅåį‚Ś;e׌ćļWA¦5µŠŻO«0¾9ĻŅ‘.g9cć‹]nö]:źņžļkm÷ z½ģø•“i~@ƀ*\ŒČõųÆu›«Y-“1EĻNsÅ-¾Œš]YI=‘xŸ”ō#Ņ—Qņ±Ś®œÖ÷ĄŪGŪ’šūVÆ2Ū©aū@'ŸīŃ~„œŪŽOpŒ²+ÉĻuÜųkQø°·S`Y‡œRj•Ž÷RŌlŚĶ.Vn„d*ń7RkŹō8®|é/f›ęɍ¹Ś¾‡$u±JÓM ņŽĀ¶õ-z1j`DU‘HäŽ~”Ó°\å|/|mµØ„˜ˆ•É HĘFkßõć¢É„Ś]-Ō>sņ9ĪźŃTV|ĖŖŻO¦ź"&UņĪYXq‘š K[‹k˜īTyņ•½hŖ «/…ą³Ó¬œ— ¾.zŽGŅ Öu(¬“ĪŚļ ) ŸŠQķ:ę$_“1m¤3 eµ×öLFß`—œ'¢r4‚:-:g’Hä…ŲNø į­ėūMBęĀęéĒ™åG“ā5‘¼bŽGF–āīGƒk@£†õ&ŗ±mwcyÄd0Ę{Ņ¢KyØŁWŗTuĒŹsÜWų‹WžÓ¹š;8ÄVłĪ(š»OåČē©ü(Ö­>ÉØ>Ī·‰Ō0‘ÓūS‘ÕųkƗĻi%īšØąØ=ŻŽZ¤7.°0‘ŗä Ż4rŅĮØ> crŖ3ø’JŲš­Ž³sÆ^^ŽiĻo¦Är?sĪN;VrL#ę¹+G¹ėĄć„sĖhóĘ®ĪōȬĒcذ]+Č0_Ģža 9ĒŻµęŠK6©jööļöųžGņÜöÓŚ¶ŠŠ–ĪÆĀѽŠk«ˆ^śżG5×Iw żŹŚ8j€ ÷j%.€™ƒć­R4·“Ó&³Ž˜‰wBĖŚ¼’Lµžäļˆ 惎¹g.…Et=oĀŽ7WPFźÅAĮ¦»i7QGg§i°Ä$yQZ\į£^äViܹ;‡Å·šĘ—/…kk½E”åVÉQŽ?xvƒi©źW–¶Ŗļ $üä7AZ¤g¶köCBšƒĻ§]Ć5ß ¦Ó•ļ_4ź——ŠŪw ‘ļĶ>D[v:_iöž Ķ©4ʃ'®ćÖ¦kĶ*=JibŽńĘÅUXäuÅRFR‘ÖYĢŚĀ(iY~E xŌÅ¢Éwk-œWŸc/Ÿ(ć;haĆą ŲóÜ ™~ćČĆżėĻõæź:eÜr$Eݐä`ķT©źz-½ō—Ö)–YO%äÖ罜Į.a=ˆėV”cžU†ŽŚÖõ’ņDaAžLUyüO=žč [¤·…Šķa€ŽćŚ›•‚ ’Łj’źa¬¤ds_­zo„¼+e§ģÕ§Tf“åėĘ*CBĒÄxc¶³ÓV “µß (TįœČ—ó®!•&µšI„MŹł&”Źś…/ÖOu 8•ŹœOÆåZ)«4Å'ĶÓ-Ś‘pF}ÄĻ<1(~[;ÕÉ`xš(¼™@'Ņ‚œ¬RŠēĖ•“ru5Łų"éµmjāȧ˜ńF$Gš’h3rāøžŠń $ŪåcĮčy’ĪҚKÉ2ĢūrXƒŠśØ u:k?i–åķvHīŚĆŽ}+īśžö5xC¹ÜWżŚØŹĀq:mŅę© )ކøˆĀŽ8£HŽH”rs†ĄükdĢYēZE`ń›߹ė[igå]"ß"šXžE&+t7~ΌIbJdޘ­Kkż1 øIgMĄ| ó“X³xC”©£k–Ś;ŗł`Äća#°¬żfĮ%s{‹,lw!©„c‘d™ęH‹1RĆ?…z>Ÿ”ēLø“ģ…ŽFH<†mYčiw&夊Tsž·AXšńž{kfŻŽ·`Y5`¹jĆF}6Į5‰„óŁFJ…$€+øÓ|q§^}‰aV‚į£ĪĘ\wć·ZŹQ:£.‡Ÿjŗń:ó@$€8ō­+µ†ż@ŠIßŌVf©œWˆšK{“XäŽhö 9 Š”¦ČŅ\ŅŖłqõŖŠ"Hé5ķ-4kČīÖf¹ÜdUĪ#ć'𬘦‘ŻŠ‘ņš§?xVŃ] ٧:Ei$–Īsü5‘5“sJ¾HŒ»œœ U®Ä_S¢K²”ŅæS#PÖef,«Œ.;U ˜·¤#mS“ī~“ 3.ßp#`ÆĪ+^óĆ?Ł™’F Ž¢N9 Ł3®Ń-#·X$I¶»Ž9Åv,Ļo³Č§@’ėŌ¶Ą·¹żm;ļA ß5Č]x•µ]A¢«!ĮėĮö©\ĄeI©¼3¬‰€į½+{MńÜĆkpŖ$*nž!r?*µę68 ŌŻw!ŗQK’3ō®·Ā·šÜŚŻÉ`ØņØ8Čė['”.§wį«©mōė»N/*g8‘“fµ/µ=&ćAhā†ŽFä?Ļ”Ør5Hłvęv¹š“·wš4Yļ]PØn0yĮõ©¶žĻŗ³¶øÉÜA=öżk±šĘ›wŖŪł7JÓĆ óÓßó Ø»Ɲ&’×;B#Œ/ ÷«Ķ|_ÆŻj÷via4Y†M³Ø}qÓė’+7”HßÓŸģš•ˆ~šÆ*?­cEąŻVņę[ø®Éf¾ę\ä€?śŌ£G¾ę‹t+»ÉŅ"čž@Īš8zćSMŸNhåFm÷(&‰!Į`Ö×2Z–`[øSĒćO:C\OØI{<3Ų®!éĻšē™©…ā½pŲhrG¦ŪAäHń‰v;žµąž)“Pmćø”8bOE¢ģ)w¤hvW×a£‹k“·Ę;ū×XŚ=Īźw¶ņ$ ā5Ü8b}*ć# 擩ŁIm4Šeö„ēłqT<'s¤ėkŅņ4L{@ŚFӃ×éV#ˆÕ4›ÆŻŪZOpt¶ ĄmåG<ēšÆc’ßFKm#KŌ‰–xŖīOą<ėNMYĻĻį?QkČ,Ō,*Ņ3³…ē„y_ˆ“xķ­ƒZ•ūI ģkHŻ"ž5ņXĻŻ<śÖTß`¶³—ÄQޢ݇&Ee!ĄóYJV*ÄqxŅydH&y.¾|ĘōōŖ÷lļ|Q¢ųv[yÕD`ļ,¹•›aĪmŁ ÆĪŅ–Žy—pA éZ:ޟ¢<:uŪŪ¤ņ«äe±×…«1õǐg nĒ ¬¢±YŅļQ‰'H˜“a‰v8'ó €mzāvłDk !#aÓ™­é7:Ÿ+¹UĆ0'ŒP c¦•ŗ²µøB°ļ%rś×Æėa³Ń·jc$`äØé€E2Yą·Z=¦›«Ū]K*ļĄ ņ߅tÓėÖVGgoz šąneoøŖēeŠę®oRńÖ)€1±ąć"¹/ˆ> šļ…4d“M,j×R€+ŽząSre&Mą/izu²ź(‘²ßs&Ššo:5!y#±¦K›=rÖĒJšā+‡Kó±ķćó®:+e¾øšę(“ķ ¤n#(Dœ6—įĖė}cVæŗ–FˆŠJą9ą’ž•čŗ&ŸŖ_]ÜKh”¢¶ˆĖµ†G“Z9c²šź×VŒš¹hdyŚHć¢ēVøė^‹a”Ī óŹÉob0É!ܹź=je+š)õ<»ĒØ»YōČ^V·RrÄć#«Ä'¶’ŲŪ½“ų±l«Ø7Ö¤ŲĻšž‰ØÜų¾ēPŽ1.— «Éøć(ĆҽėĆĖgŖ£8u“n7QT„Š%.¤šå†›5ķ•’Åm ܬ0„vVŽ’„gKaRCŸŸwĪOÆćHÉMœMä—^^4Ģ 9łp1Šóylš BkėTlFßęć'Æ­"”Ļ”¾xš GIū>«Č',v0y¶3ڵü{m¦ÅupśEČ:s’-1ČĻz ēg™čZ Ge{=Åį’o0Ėædōx4/x£XmcSŗY C~äxĒåW‹fށįY⾓žöH–"sźwtĶ{TŚ\-o`﹩Ł"œ›Ćjń&¤ś„ٰÓķ՚'=Ž9ķT¼-įȵ]j„Ū “ä*sŸsSÉŲ#Lļ>!|DŅü®Eįm$¾µµ·S.[ęžæŹ¼^ßĘ2ųćU¼Łl±30v p9„ŹkģOf“ŠSеG:„µĀ~łOŻ'ūƼj_…éwmöŲ§h† ˆ>Vś ØÉ":ī£įi#3$`*¹z½ĮڵDž•Dhbi0¬qĮ4łŃ‹45k/ķ‘s©Moä^ŹĢNNI?Ļś×“Kįi.’ödČ! Ü`E®.mJVŸmKĖxX²łOĪ:ļZšĘ…u©M=āF³Ś0)ąµ^ĢÖ2ī'öL°ĄŸ&͊0®~;©ŽžE@€r1Å.] :Ė›Ÿ6źŌAtÓüuyŖ^Ļcµ|’JDĄu^Ų«²iÓÉ;L£Ó8('fzo„t;khn5k«u˜•(„uĘ8­eįļ.,ŠŠ …¶§@3AQØZŗŃ¬ē‚k‰&Dņ”²ƒĪóéŠį?±,.ī¢ß2ÄķQANhœŚĮkŗ»×ėZKMBĮ9,3C!ĢĀ·Õmōäž4%nĆ`8üxpzēˆõ®-ķ­Ž@åfcĀŌE»“ķ#UŃīµfK˳µā$ ĪrMK¢x6ėWžÜ-ƅFÜFŽõö«a)ß§h`‘ĀÆē¬X]Ää“õ5čVV^±°¹Ō廆ŹįyLž·żŃYăˠc–ķ’ÄžéP˜}Üw«‹ń¾¹Ø¶$l"’”Ē;‰Æ%ÓļÆ@óšāV·PWŗü޵¢‡q›ZšŚūOp®ē‡^2 ĻJōi }<Ļ “±ĪÅ=ž•›G4݌Iī1 »¤ÉüH§Į¬Ūi²Ē|oŒ.᜷§Ö‘1™é5ųHõū»³xļs̘XżAś×]ćÆŪ\ÜŽŚŚĻluU ǁėÓéY;·cE©āz“Ū¹žźłāX›@aœ÷ć­qž0ų…c©CgįÄŲé‘92Ź’zWĘ84ćd\Š4øŅ(žĖ¾i9,HČ_„o‰µ?Ļŗgkt_ĒÜāw^ńĘ©ʙ“ˆ£!Ė•äŽpsé]m†Ł%ó÷\]4ĢҰcŠdōö¢Pģ'jv–:7•nKF’IĻ#Ö¼›Ę–ź{M1ģ­Ūk;€vļ8< ĪÄsžU`—0Z™%’›’G®kœ–xdŗ™ī¼ƒ8+ĮZE©mµĒ“Ū%$pĪ~ļŅ·ī5YļaA½nŹ2؋v0SéZFLNV:“O J. $ĘväńXĶ"H‘Ŗ„•Õ÷dõW2‘æ&µo¤ĄŅؙeņŪ3ž¢©čZµĢP‡.c|’äėDWqĘ'Gsćė_B¶š[ŲÜ_]BŹźĄš§Ōö=+Ąµ ‰Æ®n.T‘#œāØŁ++zy[5‰cHŲcq+ŌCW`yÆŻā{i÷› p@õĶL¢e&v‘hpǦ^y›T Ć®3ڰŽ6„!Ą;‡aéX‰nq‘xn9n'{›¦øóp ŌV’öN`”X…ŚOƒqš>„uż`[G IS!‘ˆ ˜śÕOĒ…īdµ¶¹Š{ć€a‘r=Ŗ—˜y:ėW:uĖ^Cs žM±ĢA'+žŠ:M}keö Ϭś…½Ģ—‹Ŗo8P1ÉćłQbj.ǜ˧ļYHYNK!Nõ®é%³œ²¶?põ5&IŲŠmVjc†¹o0wĻgžešŽ ^»Pt Ž-ī}± !J®ģ•bKy&ŗŪ2fH­#1I.T”š¬AśäS=x»ŸŅļükö‘¶ń/ƒ4Ÿj²7Š4é|©ćŸ)Šu>»€æ£oƒŽ4“מÄŅ2}šåv®ŃņĒ/©’=ź&k%Ōś dYYķäMŪžGÆŹų+Ļģ¤ümų ?ď iØ’“%Љˆęƒ=[»×­g,÷?†/G©iöµ§ź:|–W‹w"³ˆńŪō'ó®’ĮŽ(‹OÓÄŃĻ ŚŠ±e2ŽYē¦kM>h„ĻYŃõy`Ņļ'ø„^o$r[÷Óü5†Ņg¼ŗ¾y£™Č„ą(ĻqšłŚŃå‘×g©G*Å5ģ8Üœ€ķ]ŸĀļĻ*]iņIö»D'k4cvIģq]Ųļ;œÕ©Xõøüā³y;ypŲ=Z“a–āH„*WRØśWŅS{t÷ĢŠŗĒŒ·ož½hHžPFBzäćµtó%üi•”ƒŸāĻ5Ÿōé'ę)=(ĘG½i9FäŃKss4ĘI¼Ž”Łķ‹ĢŠ"cÉ#½mc'ü#мHå¾aéüUŹĻö·A#Mįr8õ§2$čōūFŠķZ@Į@$óĄ5±=ܲ£Ķ jä6ӓYŹÅ)2œ7—Īd ¢±žŠS§t’įĘyB2ü÷ĶHÜŁ,śqŗFg}ó($ö挱^į,¤XÜ·˜HPaT£­Œ„+ż”sK¦›x®%;¾cÅdČ·¤ųėÓ5„ŗ«G=“¹#xl=Md=esę.Ł@;wv¤¢R‹ÖWPAå! tā¶mlVŁ!3,e€ĻŠŌŽÅņ›rĀ/-¾ĻnĆ{0'ŠāzńÜpŪjį­ ¶žåPōö®NęęXmć6ųóĖ€r8<’Z$£xROu<Ÿ \³cåZfÆāHÆ•Š“{ žqŌūVR‰JV8?1ŒŒš"HątÅK.•ĢU ¹XĻZÄÖ29‰ “ķV÷…­'—S1¤‹ •.ü}ć@Ī“Ä7ifjĶ&ż™\å“%Ō |·R~^FsWe4wV:NŲÉ+ < «Vķ<č„%AĪ=kVA.³%Ó#,% ·VŚäŽ£ėM“Š’éRč^;9ŲNA€Ņčtś%ŹG3iźĖ ’6`ć&¬jZ “—ņ]ˆ£ŗŗ ‚ägTŃē÷¶×ö·6°Zį K—Āõ•éÖvčā5xŹdEg&M-o@²±ŃŽhm·ĪźFćÕM|źŗl³_ÉēmyQ¾ņŒVw ³č7rlG•8 śWgo„Ka§4·e¼Švķö­ā»õ#dqߌK¦$ņ*‡˜ØėĶt÷3¹‚ŁŠŒ2¤œ{֋G©Bī—v&cÓē#Ś„²°žĘŠe2ęyYóŒmōü:VŖV*-ŪCė?ƒ?ü¤éóéŗ’ZZkń e˜Ę¬e\żÜĒzę>9Įą]aķ5 ŻŪ’hO—™cGą;Sē%ÜłT¾KHYĀķ=9®‚Ė\P±Ž8ŃR 29jĘm’sWžÓ­õK/‹yt|¹ŚĄö Wv4« JŅ70—*’p’ø÷ØlŃE+I¢hŗ\rN°É’w8)ŠĪøÕ"ŌRŌ[[ĶŲ;™GAJć’{ˆeņ¢WƒX­Ó޸ۈb¹–ü|Łh!"¤ÖŸe”>©9õ螆Āō¤ˆEČän8ĻęŖ61¼Eb¶ÓĒ<UĄ9ē j½ąĶf;w»Q‚†HŠ0Ūó}G§jŽaIŲǾŗX.®ä±”¤[ø¹År7z¾ū”𛱁ޕƉ®uX>Ń ©UĪŠ;ŠŪ—RŌ„Ś.šO³©V{J 9ŽS]»—(Ū„zŠW<÷¦)&p0Q[£:‘¹­įūmFāömE[ä`,3øēҽ-“‹‰Ģ„eŁ‚sŪ>Õ|ŗ˜– Ó|Éei`&@»W`śÖׅƮ$ŗK¬6p§īZ›wg£č^DŅŅįZ(™ NI«WvÆ„ŲŹŗU# Ž“4SG5¤ĆR4»R"[8#­nĖyd׊¼0­Ėm*`óÓØ×bŪ\× ÕbežSäšeż¼¶Éŗ\Čv»ĻD·Pé)w,sO"÷y^¼óéS)2TQÖųcHņ­'²*³»vśÖ\Z4°ź†²Ŗ[£×ڱ”‹K°żNĘŪN”ŻŪ[Ē ž XƒĘl-–ĢÄc|räńYó3Um9Õ|MØj÷ĮgxŪ1äghēņ¦_ų’K¦TĒī”=>lUr»Ģ·+Å)9’@##ŚØ]Ż)‰LP7Š·z5(—B—ĶŌ!óŪjīŸC^å-ŒvĶļ• ź?2‚ 4y-ܶ-ØĻ ŠēSxGİxkā{6›Ģ·hT¤ƒƒŸĘ§˜žC2ļS}^wIĘy+g½ZŗÕ_K²kkRŠēļ69ĒÖ§™Ü£ O–Io£¹œ6Óü&½§Ć±ĄfHņʉ†­ rHź|Ay°SgÅ&ƇĘw~į^<Õ¢Õ¬,tY­mņ§{ČÜüō5IŲē“7|iŪ &ˆ[Ę£¶ņj“Įswyu #/…Tž;šW&å/Ķ-…­¼qŖł’£2ķ<õĒ5ęź®ĘD-:ŗ‘“žM#E#Z+éį¬W ó]݄⾒²åĮ#īj ę-4åLyP•U ¶0éō=RņybµERF ’p=ŗŌs“b¾³t²Isk9g˜6|Ö5¦•qss‹+®ŻÜ6Hę¦LØ®Ē”ź:®—¤ŲĆk*ł_»*ūFsļ\…¤ś=åōbՒ[£„W‘žÕ詨ŲŲéŽ!ŽāźYQ•ŠŹƒš’K«Kéą%¦WÜœTø•ĶcϵUšk™d ™éŒb¢ŠÕÄB\ŖÜŽęšVnęÜ7©@¶WŒĪ«ĀgØ·¦čŲ•yN¹IŖD½ĘxŗXķ–Rüą°W¤ż½µ[kˆŻWœc+‘Ó4\‰Dčõ ‰ķ/#YÖS$¹mŪxÆEŃķŁf7GžGJŃOø(Ųč[ĆPéy×–Éä|ćęĒØė^k­ų‚9„G•Ęćh KŚb”ö¬#@åOSŠžĪ‘°éĪę ŪNŽ=3MLN'”6 Ó¬-üš ˆ•uĒQéšåćµÓl›U¹•±*sN?”ł‘Œ«ińéčį[ķo!Ÿ–³ŸÅóŽCmd°ˆĄOū_Zq¦s×s±taóYø®’F’6‚;\G®B’{ž4ĢŅdŽ«ug<š|p¬8ŽłĻZé"³Ól“)Æ.gFć żJ·\b‚£¹ēśv§qs%Ü ŲD»¾šö­(Y'|yü…L‘ŗ4RāŅtxbŒ9'h5Ųč1¦Ÿ³ƒ±Ōpøō©P³†‚x†óR›FV$s÷…k-īqŸÄ³ŁŚG —mėóHe÷­sč)7ś7Ž/쮬ą·GDˆ|¦Až żjĖQžŻ ÓWżT‡ į€ĒPE³„µń·Ł”Ł€×^Sy1ÉČąƒėXŗåņÜH.¬p+¹wL-S%Ó.-YŌ­ÖįTnĪģV£Ø,ρ¢‚J Ł N®’Fæ+uć‘ō®²Ņ;­FŚEfghŌē=€ čŒze«ĪššĶs6cŠlÆ[×üa¦Mg:ĄŃ@Ī*ä’ņ3„]s|ŠD‚ćc5Oš5ŽćlHņ±Āœr“(Ų‚ųK (ü»V–’±ŻN—H˜ ¹‚‚4|AŽŪ°µ“ķĪ é¦Ęī/ü@w§qEks““UœŚLŒv"© ‘ŸŅ¼ĪŚśK .-ąŃÉcš›ō/”…y!¦uO›9 ½]ē…t­‘%̧k°$9Ē(Ųܹ·Šö& o“1ąūV¶x4ūu„ł~pł?*NCŒnT×/ É$±8IAśw® xĶŌ³®Ķ¼¶qÉ5”¦jt~iõ;“H~÷V=EzżĢ ‹XC 1Ū±ö¤¤%ØéķµgŒż„W1œąWŠjšMš“$tGZ ūÜV’—A§c>Śø!YĢm _ŗĒ§Ö½Ƌgu£Ž»LóČĢ6ÜqÖ°š7Lę|G gudČ Ģ„ķ>½øÆ˜uõy/Ņ_"“/óŸŹ±,›Ł¬µ>;s‹Ģ‹äcüjOk×XÜh2H|ō—ĶņGHĪ ¦™„9ՕēzF³}¦ŽkɖĪl76zÕ) Ežƒ‹ŠÅlaƒm×;Ÿ<²ćóŽØŪxƒS¹ÖPĢ<Äį0Ł$š“HĘÄŚ½ķöŸ86ź†).ąė\ķΦ'Ōtč¤-nJ*ūū~µ2W(ėüQŽ™ Ü_Ū[\}–(Ą| äóߚƹń­ĶŠŁĶļłĖ¼=„Ź;hyķ÷‰Æ„¾xōø"FŚæ^ėą Yų§QÓß]†BŲ”G̬?żuqˆDńüąŪŻ:ĆģņM§Ėq(Śxąžæ•pz„ˆ½±’uqįĘCEŒłŒ]>s¦ŻIjōuĒOÖ±¼W-āĄc°Xį“©/’Ö¬g„)÷ƒµ;½Ģé ĮÜ Ē\õĒ×4ß_]kS‹‹ä“[,ˆ×$śŌs>×QäX£Ä²ōRƽ="B xv3¹?¼įA•±įx‹ŁĀ‹ul²•ĻJ‹V³6q«¢•¶œŒdS%Ģē”ÖcšK½1„Ęā1Ć°=GZō«MɏOžāHdó”lƒĒ½ “¾ĒŒxŃ“XnšśņųĒ$yŽ(öć'<‘ųW„ĻāėCW’(¦‘—†ž/„TŁŅié%Ģ~d3&åa„īkć'ƒµ]O@šĶĀGō“’9y`¾ƒ§ÖƒxĒ£<¹g¶°²X„“Åu,†$\ēłV—­ź~~ž$’;hßpEn£¾(.6GŁŚ ¦šžÓtķEaY4œ†\m#3łō3P³»±–Ńā·[>õ­L®Yąo"ü6×µ’j·×מ–į|¤É-ŖųŠē4ƍ'Ş,›I³šō·zuĖ2E»;¢ūŲśąT8šr¦“=^šģč×pŚĒZ°Q.čĮ`ÜńœgÖ¼NO ßÜź0[ZG;ł+ēyq‚XxžF”I•=Åß”-ø/.šNIǦEl—cžP5o“xlŽ 2Ļ@²+²ņIQéõÆ»Ī£ćmĆÖ.±°[™ ¼Ė·”cӞ¢Åj{Ļ‹<9į B;u}Y SpŻT惎¼³įWƒ5X,uØn7^Ŗ\å_9Źć®;Pj‘Ģ|@Šu”ńńXY(Ńög,~l÷Ķyļˆķō·¶¶–7>`T'ų[8Ī}©J7ė]^žėI“·…TĪ«€TϟZń?ųÖźĻV6^R¹"æÜoL{Ō{1r£žš•āEŖqģŠ^sĆ#ńøßŻĖ¬ß4š¬–ģZC…DŚ:śU„b\RFµ¾į¼1”qĶÆ‡łĪćĄ=+æŅa¶Ņ4¤ŽÖß –y¶|ŽōɖĒ7‰VėS…ž4‘Ė…Y0Cqļ]žjöwr_­ˆ·‡>båxӚĪqź.W¹ŌŚųåšęęŽ9”y× jŁ—ÄŁbVóY4‡,¤c“Ķgb%Lć¼Gć;TÕ£†ÖyģŸ•¬ķCV³ŽŹkKy"óŻw(īnh3p54›4žĮQu1’šFTä1­gxvH%ŗ6jĪJ+’ģĄšJDŽ”.Ÿk¦=¬“Č—O‰ äloOƼå|RšD‚9YrÄØĘisSѬ °™ćQdR ŲŽ”¬;=Ž'Eń;hŃ·¶“ŽÖŅÖ“Hv¶0qĒZām§æk±¤C®Ó~Awćm\ÕUnķļ­ŹĢ®IÉĪ2}ų®U<#ż™®jI§.mę8–5 G|ŃĢ‹¹§©i—ŗUŗ^Y\6ĒŒž¼f=WQmDį"fmÅŗā²f,[BK»čm’åļÉ tµÓZ^YYźĮ©@ę7ĄFė“Hē¹ŁjńAkn.FWsč6ŽÕĘč:rĪחA•X^qÓÖ“Œ»˜;™oį «s}ꦒ3*ƒ‘\>ÆāK{=M-y‡=ėCHČӓU‡S·ō×-†2ĒØļUZ k{Rėå°dĒZIĀ] ½+E‚įģ/‚Œ0;zn>õŃxæĘZ65†—cfŅ]HĢGŻ_óŅ™²ŲųrĖĆŗµ¦”ē»Ü3Üp¾ßĪ»ŸųĄZ¼vņ˦'ö‚2Č. eäö=±šiŲkRšžœnšā8ÖÖŽ 6¢®7«Ēµ{ķ:ĘöēĶ ņ&GĖÉZ%#)JĒ¢ü5Ńu/ėvrĄš&61ꍤ\šśĘV–>ÓÖ RÕ=˜…3ęLIČÓėLĖŚ>…O|8Ņ“ęĘž'ŽĻTń<ń–²‚RĻ隳ĆöŒ}z}>/ ŁMk§ĖĀF„·Ž›WŠÕ)›EžešĒĮĪlĢŗ€kpN|™:ØĀ1_^|?Ņ4[NŚŽx  Ä‹ę¶JūŽōœūĻ„µ; hme0'ؐ7ÉO›`źyƝu½RoQ¹E·†ŚÕX¬a(8ćæJq•ŁÖÅ8<4—™Ybø@ūJr£Ōń^ńŸĮ2O©ł.óĆ¢® ų«(łßĮŅO¦ėZŤE DLī>ąż+Žltū½OQ’āą*,‡Ģrsō Ę{ ¬ś}½ņi÷D4*w`q jĖ©Z¢]7“NAĻoėK›[÷Öę|s%ͱ’tŪ“”_jμ±Ę²ĆĶĮaŽ(4r8+GĖøŽWĪĶ–z{ Ś™oŅŪĢŽ3Rō$c­ ‡CŅŚĆĪÅŚ 6¹”Œ“\ˆ%YõÄD|¶%=±ėNäB'c:l7;‚ā‘Ēłęµ4)"Šu‚'X nķYs„‘Õf;÷·ž<»ō+Ę’zä|m"]Āl£FŽējĘ:ŒzÕ©;CšCivȰĄKHÅ†įƒ“Z÷k«x^k$Ū¬„<½ŲhaƒųóV™ÕŲńĖķ ÖŚŹķŚk§į\ĪNx®tų{TŃt„Ö%xmIŖ¢·ļc†Ē„#_fzĒĆĖ-r Ų/oõĖ„` g‘“ķųWÓrŻ Ė“ėĄ"q–?xŌÉ-ŁĻV6v8f—NŠ a—Y²„­yõš{-NŚņkså(šŹē//CŖ±“2ŽGuw+5³œˆTą™k ųū‡åaėé@cūDP1ŗĻŁöćk“śU1w ńg9 ®f[Žęo.I”ó#‚yč*¦“§ź¶SÜÉŠ"·‡QZAči3ĻuƒqØĘĢLgžUéŽšĶµå¢O}ˆīäS±O<ŅØŁĆ©„®“ęA[ę#Ē5«fžuø½gŽÓ`œ śŌĖc)Dļōv‡R¶[h¢‘ŁT–`8o­sž"[k+‰,cž“€>LcŒu®yJÄĘ'œ=Ź­ĄG ¹ŽAĒ#éZo —VńŪŪIJēsrµŸ1ŖE‹›ńįk0 •y®XrHƹ¶Ō¼I»PµóšŁ>cųqZF@{Ā Į®ŽKwyo,7d–óĘ#ĄźĒ<_@ź_bž,!»²Ō.ī)łTz8­9ŗĪē6ś<÷›,ķ /"6v>nŸtšņÆieØ„»Ā<ę$m?xV2—DfsOc#Ü„GDŻĒjõO‡šU…Õä†āęØCĒ8č~¹®yO°9YÜė, šHöė³æZž– ‡wœŁõé^ƒSÓ§Tū'ö[ųĘ~|QšĘ·>„™¤ÜH ¾Žp’30T'ߜWö_ū5ųÖ×]“ŠįƒQ·‰ī@uĆń<®~µ›G\esōæGo­ŠL³²\U…TÖΟ{ ėŗf­gö‘q²æĘsšH÷kf“1Ø ßšUŁ^ėąĘæx‡K±X<-<„­y,²F~`Ž€ć½~GŚÜBŃŁœ‰Š¶ĢvĘy§9éaCĢśž×ÅvĻ”é=Ž‘k3Ü÷ēŠö®«E’+ ¦[$–Ļ?ä×Īā#fwSØ{'‡Śķ'ŗĶ»D«–Įéž9®×ĆŃŲ麊Ė*Bˆxj–dĶ]ŁžĻ%£Ś•Ģ%7ŹŽĒ‘IlĘ Xʤ¶xć­}- ŻMD=ä3Ģ¢5(ÜóėSO;·± »ŲĪæć]Ńz“Ü· “ø†į›f\wn٤k¬gņ®¤_,Ā­JĒĖū‰bC–HĖĪEhʱ¹l0 ‚~_JøĖ ­„šl[ÄXmĘ=MSÕb”̆4M€™±ŸzŠŹ{™ļ-ÉBĢ›O sų×Aį_Myo5Ä«°!É$‘Ÿ ¤Ē}ĪŻ¼$[$häņ\nÕĻKą‹č®.®,omd• ŗÄr )©ē4ö%+¦k]é,gĶ €;×5*Å-Śy„A'=:U§Ōę3¤¶ŌY0‘«*3Œ WUVŗ¬̚Ž)’6*Y€ üėE35sšM„ĶØ]Ā/”ĮꆽV;Ķ.ėĀŽ]ŹÅo~ģ~źćµ>PFBJĄ#µyŠé cŖ[4–ļŽpI­yõ²Ņē«ź!‹KŠķ“6Ņv’[ zםGØAÓĒ:BGS÷dĘ©ž‹«AsēĮnˆ#­z'† +™ļŻ"˜„?$™ĆqŪĖ)XŁSīGoćłe¼ŽÖ+y­e#ęI]oÄ/·ų“Į’[Ēl†ńG›F˜lśéX<‡œĒŖłVv—Ć‘!RØ£*}Ī?E ų“Løøŗ‡Wˆ*©Ä_7Ź®‰;h`ųµZĀG!ČśW—ėsI+ —cżÖūĀŗ©ģsĪFž'ł§sņ0ļ^Ļą Hjņ į „Ę­:ČS“žßųļė]2”»Åńū5Ä6®P 'œsŠŹ×ē…V `9XņX։vLØüO4v2Ée s1Œķ#¾{t®;Ä…õܶM±¾Ļœ0åuØę4å.Ųx;Q™SR6³=®Ņź@Č?mX[‹ĖøŻŌåäzRdŗLōŻ!4dšVk’›ēŽĒLWāĻŲéof–pĻsq+Ī Łą}=źD©œōŚ„ššĆö†Ą9ÅI.Ÿj¾]²ga’O„Čmœļ‰l”Ó …Ö1—;Kz āÖ$UĶXœll[Ä÷6.pC®@­Ć Ļ%±/yŠ7dö 9™—mµnD>e` ÷ÆY°ÕÜF,nBģl1ēœt „>ē1gįņ÷¦źDOæ»%¾÷=®«XŠÅÕŃŌ"“‚emxéA”ē¢I§ŽŪŗA óīĄū¾ę«ėš{ĢŅÉ _Ż ÄxPL„ŠÉ¶vPŽ˜cŸŹ½ ĀŚŪC1…‰7¼cڃ«}RMNF“8F€cżk’Ć:]ĖÅ©\Ÿß¢° {ū~ÉV¹NÓS6Öw6ɲ1łK˜Ŗ?ŚĀ'`A9ł±ėH|¢Ļhš©²ržC! \ާįåŠźfęcŸ”7ҁrœÆŲd  'ŒŽµÜiśeŽ§ĒLĢ’ĘD“øŒ\•ä^2’8Æo–¢Ō¶#ÜrY}Md¼Ąäˆ“ ”*OŸļķ]Īįūx-„ņ"™~\Žm 9 4½B|å1ģY#…\’…wĖį»ļ±›č ŗ€$Ź’ 29EOŸöļ¶ÜÅ Ü.\½~¾“·ß\éJÅ£)"–PĢv ‹=²jö·öńŽBöčĆ®0 zŹŪGoaĢS±@ÄśJčsh±éOq.⫼ŗ”>½…zn‡r—Vė3Ǽm ޤqA7Ōä¼A¬Ē£Ę%…üö› 5ĆϩͯÅs–k«Ÿ,•bxJ`s¾šÖ§ü73ć}®vżÆbŗń>¤Xˆ.¤"iNĢ’½ ®]-ńƒį­>Ęm_B»·²3ĀSøö$Ö›b÷¶~t¹GeÜV‚jDęļśQEęĢ=N8®’ĖN·µŒĶy,‹0ę@2 ž”¾{B;‡–uŠ„U#ę5·,6śp™¢mčy9āƒZr93£i—O ŽŻ·åš*®§įÓ#\\ŪČ%ƒh]»z})•ĪĢ“OøX¼™qŠ ×o„NL’4Gcŗć‘ށH޵K˜^kÕĻ8b½«WMøńNĒä“ ļPŁ &l> ’— Ł/š€~÷Öŗ)ü]ɬĄó; TJLµLČŌ¼Opé1ˆ&§µq}tĘCęīø+ō©+•†lõµi&ŽMŹŽ™zTsÜĆ“rF8ā«•“3jĻUˆÅ¾UļyB@é\‹,÷—رHé"Hz}jI‰±ā˜-Ņ;›;C#D”ޤćŸ×5å¾"ń–ū哊 {)ĮDü9¤Ń©Ųx~ä鑣^BńNÜ3/N{×­Ić%µiÖ£8Ų“¹G ØˆĻ0ń?Åų[ģz^™¦żŖč¾%•ä;c½[—^‚=6āYŌ›‚¹ œÕwäŗö½pö'd "¶#¹®›ąž6§“7Y­ ¬źdl䓒ēQ)t4Ųx‚ŹŅćY¾ÕīŪŹk‚œœ?ńæiń%ĘčTJ®„·ķĒ5™”ć:…ķ­¼Įc’$–6ÜŒę¹›)äÖoī„’[…ømђĆ%Č¦‘.&ǁ㰚Dø ³wńœī ŌķąūU¼1Ć¢žī5#½iŪqG†|2·,Ķp˜ śā“\Õģ¼=-¢éZL÷×/&Ę!Cķ“śŌÉ®…#/ھs5µµÓäXĄ;ÉĢļԟϵei±Å%õµÄ‘pƒ}=ź "ŗŁāX†æį&Ņ"»ŲŒ™T >ö03łšł£YųCu¦ßBŗ„«ot±ƒ2Ę0‘ŌŌ©t+—K‘ųN=>‚(|ęWßēOҽ·įÅĀŪj6LģˆŻ7•Ścy­bģ`γǗöśĆˆ.ü™->īęž!^Cā[ż=-ZJ"”)gĒõ©lĒ•žOg­ŗÜ åu ¼eQ]Š4ŪŪÅ2ībsŸjŹlV3µ}6 KӘÖ 6äpÜu®Jņī+ČŽąŠYJ‘ņPiaZ.££ÜŲÜ6•%é2nĒ(ļ_@i݌†ū‡˜[6®ź—“Ā-ņr$żŲ,{W-ā+É/¼K¤|:¼¶– o3Ģø”67!ē§  zUĘūK{N\}–LŚŪ-³I ŖÄ ’qs×¾+ē_ x_ĆŗN½}ā]yŅŃ-ęy<ą71īG¶j¢ŠēśļÆ¼Y棭<#r×:[+m“;†sÜWŚ~ mĮ’ō÷½Ō,¢Õ%Gn;šé{Tiem8֚ĻÄĶ4 ?•p#§Zņ­oୄͧŚ!¹žŁ(Į®0…D O®½G¦ųBųÆEø”M „AC"œ#ŖŽæ_–¾dńž•bæüVl¦wӞąH ŒdOaŠäv:o†’[’9=+7Qš\Wȑۙī9n"‚T{žkįM<čž šMIY-Zp²pŹ;žUõ=嗇E“K§\FöS®ąüŹ= QG=Œ#Äv2ŪéQ‹([3>xcŪč>=ńƒj1Cm¦[ZéÅP @>ū,&õ±Ķhµ°µ»ŗŌ„{mNO™ˆ9;ę¼/ǚń„‹ŻĢŅ‘¤hÉĀsč? ĶƱ6mĪ™įķcMšżŽ„¬A5Ź©…CaĄ8Ćb¢×#‹A¹“ŸS¹ņ®$ŒmŒ78$võéRća83×t}J3¢aXŻŁä{W?„Į4`Có»Štę²qģbéšZʇs«;X«\nÜ 8'šąµo >§ŖŲAā$×ĶÜIŽä{TĒrcŌ“Ż:(`EŽ8 †0Rßw׌äĒ$o†QŲmĻӚń˟ Üź7× nn"‹vü“’Ē>¦Æ™3“Ó4©"£³y1{ŒÕµ¼‚ęį­Z4ō4¹™„9Τ–pE%\žõ‚Ś x¦ņ7R$uēqē„RŸs²3=žŪG—Ć>³Š8Ģ”ÉĻĻZĆŗ§Ł.I8 ¹mĖļŸz®d ¦§āk Éļa·ÜŪ䢺pÆé_8xļĆr^Ēw}¦Åq竉SĮ=9ؔŒ%¹ßųÅęŹĖū>Ń¢•Č Ė‘”#łWŃ’ gŅüCwg·öŗ‡‰‘ät¶WĒ’®{ā³q3ėdtŽ#I¬ŽāY„xm¢Ozš {ŖQ]E„‰Öżų%dpBæSzhĮ×u Ćļölöŗ„øŹ•IķĻZÉš‰nlüM„ØfīŁ„Śˆ‡k„÷4ĪØŅ>²ŸāUœš4––öSoĖĘv0ÆÆ’^¼+A:„ć߯]-¼j²¶ēīē¹=é™Ī‰Æ=ޱ„Å&¬ÉŃŌķwŻĆøüŖŽ –ž$Ń$Ō Q%¶łOėZó#žZ>ž Ńģ’ārc•Qd ĖŲū ŽŲĮ4±Db† $ą(ū¾ÕMt3½ĪćÅ6ŚŻĢkWWEŁ›œÆÆµSń6­½ ±wVb|ŃŌ°#µ+!ƒāYä–$ŗóÄ @FĻš®ó̅µ¤ŻA<“[¤Jņ6Ülr? e{6Ļ øńŸŚ.ķīhšĘväŸzõmsĘWÓč1¼į&eQ·åŪŽ;Qb½ŸcęĶWėĘg’Ņåā—– tojõŅmK@ѵ/*ę{ł™Œˆ«Ź¦ó \ŗŲēµĻÜŁj6–hwŁ”;Š·'éOO<Ös˧[¼·ĮĒ–¤ą ŽAņž§”ÜOs„ ­^āYļ„doc‚ÆŅ«éV7O©™¦bΧ š\­lAėśMčŪ¬ŠŌ»€#?ēµkų‡Ā³&Ön”‰ķŚB¬@ä9ķŽŌ{Cjlņł#Ó,ęDø‚˜÷d’p@ōJÓĄšGŠfOµI-ŹÅ—ū>pēŒūRö†ÓHŌtŌŠm­0mķf‹åŠ,Tw¬ «·ŗž9®FÖČļśŠŽkœŅÅ·†Ņ×Ģ·°%‰wŻ»<ąU )µpĢs UČV{V2o©ƒīI¦ÜĮ¦8ŠRāe8Ǝ¾˜®Ń ²Õ  u4K#Œe‡ µi ’ūžć-ßJ»[xäyÖ6& ½%JČŠōČu{é$»2(Ź)\žÕŌbĻLÓ“w¶žŚ@‘*+‚w®s]F©®[Z‰ē‘P $•AŠ{ ĶĄŅķŽ”uk¬ł0ŪÅ*[ķŚ»ŗ×†"Ó/5;°Ņ]]LĒø}Ü }(Pčiwc¼Ńõ£Ų‡¹†Xœ¹lgėŠĄÕ~#Ėqw=”6óZŪnڧ<¾;ńųÕ„mˆĘŪ–“«ż[Y³X ŒłrČU•Ū õžuÖ®¦X8U™.¢ą³(ĪN9ėLRŲę.V{–¼’ņE@Øź{ó ]õ{Č5ŲäħļĶ*ųsĆZ¬öp_¹aŹHw śSZĪāĪi•.nüš‰£7¹µeŖGb²FĒ!†:g5nāīÖ’NžĻĪD·“åd݆'Eg`S±_Į^»W½ŗŗm¬­…W@ć?vš…le÷„ŗ ½åZŚ)#Ėo<]™J<6ł wŒ+SkiROnĶmrÆVČ>õŖ‘V4¤šīŹKi,”³*Œ`}źś{Fńݧ‡£–öxlå1mr\Žø•K}ĒÉ©ĀųŸÄVń[Åy%ädHAŒ‘\V™­é×֗SF`ŗŽJōæ^+G²³1šĪļÄŻ\¤+k7!qĘåõÆ,ÖtČōk‡[… rŒ7ó„ŹČögSį#4"šų#ÜżUé0ŲGs}m¢„¬•v•É=y¬Śd|b–·6q¬vȑ[” ģt'ŌגxkĀŚ×‰ZćW’Żģ“µį! }źT_S¢š¾§ h:ö+Oż Ķ4®ÄĒč‹ļłT>,ÄöWéדłKĀ1^>µ¢ŠŁ+GŖ±$ū#*æ1=Ķzdž.ōčÖ[„2ÄN †Ēå[EŻ)hxߍõ8äń. Č³b9pŠGŻśõŸÆ{4±Å"ČŖXrGŻ÷4I˜Jż¤¾ėšZéóĮ{,09l™9užķrž2žÓSÕļ52Ф„B)Ŗ;W<”}LŌŗ#Įµ}aēŌLvć*¤ąƒĄ®ŸH¹–JpĒ‚OjĖ•šĘW4u!āiķÖbŪŠ|ˆOŹ=Mz'…ģtkK8ķ®gˆØHQŠÓŒEvY›EŗÕQģō›‡HwBI³xōĶ?Į·ƒ@¹»µŌ.ÄS1*YŽsƒÓŠŲ[hĪņūÄšZYĢ-k½ĮÖQ‘·ŠłćRŌu 5$»ŽčÜܖ`Ęā5“ƒ÷7ZķŽ8a•ĪćóHĢ1šÜ³ń6“ Cg ‹Œ·|š•@Ī[R= Ši ,ńć=ÅSņ„.@qN~§Ņ»Īśp:½"Õī£+%ߣN@ČpĄƒĻŅæ¤ßų&§ķ/‹ōĘŅu[ų$Ö“§†ÖI<͹hW¹g3ŗœzŸÓĀÆ<śĀĢ÷6ņ馌XøĻX¤Č;½¹ü«ŁõĻģÕ“¼‰ü§„ēæcü«žQģ*‘ģ~T’ĮDfM?ćĻĄ½Gķzbßų‹Eßēk‹ „‚Ońm8O­ >3ŠęŠ|K¬hļ§\Z­…ĒŁŁ¤xÉąūYņ6až”š¢;)ļ’²oīį¶™Įņ„vł{šķ®Ö9g»‹ĪøTˆP8GĻ'½x˜­Īŗ*ē£ųRn7\ę2˜ū(•čsųŠÖĒd6ļ, ē<ē‚+ŠÖĒG)ļ¾ÕąŌtŁEóŹó)@…›œb¶Õćŗ¹)øTėÖ¾“QņźyuՆHÆvWÉ<œŽ? €&Łįp >;vÆ^<éškuµK’JŽø<²FЬŒ|Ōp zV¤"xÕEع_ŌUåĖåćiÜ:ÕEŲl°%X®cšÜƒĖ™¦»˜“B,+ņLÖ·źg%©­=¬a!Ś“oĻŽÕnŹśūN‰Ö3D0P†ī[•Ž»Dń„Ѽ:~§:Ī%P±ÄCҵļ/3—„)|mT؃ØyŽ„y#M7ŚW9ćMsīÖÓÉąmuōM^Ś;²Ę”j÷l üp¤©śV"5ģl‘JŅĻŹ§°÷„)ö.1źvZ&±”ńµźˆó/Ž?…z£ÆYź›DXŸ~X·…—BĶØ¢±ŗŽ!ŽPøgĘ½JŅ|?i‰j!’CČPqŒśÖ†|݌Ūj@m .ymŁį}«Ģ®5!ü‡eLœœŠĢ݇ʖГ ŒĢ °#Ø?Zę.tM3ME–čEåoÜÉÓé¦C’éčg"¬c#¦pG†¹¬i÷WikhL+æ;›ŲUÅō%Į™nīīeŌ.”ŠŚ~¤(éšĖ°¾KĖļ&ęt…ƒ¼šEha-PŅ#·ÓdKŚŻĪppsW'Õ®.¤µ;©óŌJŅ11r(ųÅę«>«-³+p Ē|}k+ĘŽ6ø¼Œéw c*0NÜn_ėTąŒĪcĆ”.VC 6āp3КœI{>²l0‘9bqČķTm»ź7ĒhÖ‰&.Xu’õUm?CŠõä»|4Ø0ē<Ai‰ØĘÖ6Ę@¢PI óā¬l’ åžDtfmß1äV7./Sµŗ¶ÓŚĀāXĢŽøĆF3ÅTÓH$©±˜šG@=«H—ĪeÜNņĖ'•'ļ#lmÆÖ¢·ž6»’äE¶v 9Ū‚qVf_ÖoŠiĪ 1'’1X–SłlŽ\l7 –Ī0*dĄ†.čĢKÆ_­[»‰eøŽćŹ ;Xv°*&ޟ§ŁNĢŲ(?ĆļLmA;‰ņ²OūŌrßCzÖĀP…"„HÄg8Ī+‚Õ,nąiē’7 >¼{UE؟g­Æ j·±˜cF;1Œ?jō‹­2jĘŽ×U˜Įõ`Äp9ēŪ"µ^D6Ļ*ńÓŁŻÜX$©8<ÖŃZ Ė”Ói·pé·$)i"o—ŽƒS^ń%Ķ̹‹x·³OҬē’ŌŸĆóŻÜČg#Œē°÷ÆJ°øµ°Żl²+Ć»$ÆĢ§Ž£¹‘­Ė ŽLōžäp˜ƒX…ó¶ž#†TŒóA×ehś<3ŹÆ0…W–©_ZŻ-ūŪĘæf‡#īŲŠYė i±,ą»; źī%Åā8B°KkpźFWŚNęŖĻā3sk¤Ś‡ŚŅ%ŁÉéõŖ€ęŽ~ÅāÕu„FĘ0JōÆzšæ…!Lø¹F±łX‘œœWL Ļ2æŽX껆IŻd`2{WÖwO­•Ū[É»%Ųn=yŚ1r%ÖÕōż4Hå8BŪ¹&¼ž{ĶFaŚĖ"dŒ$Ńa©łą«]b×G…u7ónž6ćzŸÄŗ2}š‰#DŪĪ;ÕĪy)”^ŽĢ-Hu/84ßųEoVź'™#hßęÜ?ƒėQ"£±×ųrŚŅĖĘNƒØˆ”·• ŒO¦@’Ł«øŌ픵i"°™d·L…ĄÅrÉsÖŃŲÄė~öąÜ–ł›×čÄŅ4CŖĆ¶Xö‘€xž””N”óÖ§ā¤Ōī纊ķd|Qģ1U4­6ó\ø0éåw،…ę®02–§¤kŗ¹‚7f12Ƈ\Õįž.Ņ.-.Œ2(fŪ‘ļšéж‡<ąjéözt^‹˜įŗG °mķŽæ„\Ńī&Ó^ŚźČˆ_;K掭=,'OLŌļTŽļĢIeoāõ§iorŽ]Órhr-#bēū7O±Ō4č¬ķ#óp‘SzכŲG Õ½Ä2€Äd?tš“d‹öŽ&ńz8ŃEEˆŗ†zĒ’p{Ö’„Æ­/“ō({ŁĘŃõ¤S©H–2Ī#¢/–;{×#ēEufVkˆŪĆ„4C°±[@¦Bį±Īќ×E§n¹xne“3[Ęw|¤ŠC–‡x†ęźūXšĪ6’HpB>餎Ö+8VK˜ĪÜķł‡ŁŌXĖ`ĻopÄg­_Ōåŗ$6Ń«3)§Ņyqc5¬ 4Ša“;°=k_Āśī'hļą€ĻQ‘@ ¶¤‘Ü‘»÷Yąć޽?L‘üģ8PXg½ę9-NņmRy¢¶‰b‹ėÖt÷µ‚/ā—8|w ™K¹“icå6ŃÉéIF+§•$Ų£‘ócš gU¢`M%ć3µĆšIĪ+Ŗ’C~#·‚2Ņø ]NCÄųŅ#[0Ģ“¶ { Īš–‰y­Ü\“)˜åø HźuXF‘j÷rÆÉĖ»ÅnŚirj>›[…Uć@1ČÉ ŃÄę“K·’tŠJ ĄōĒÖ²`Öāä‚ąüźqO„åŅęō¶ßiX.r;u«z~™:K",„ Ōs_R<Ž7\Õ„Ņõ ķ€#¾Ų˜ŽÖ¦»ynl­§+ąō?z›JځŹyņJĢ€cžŸŅ“¬X[Ź (c°äV%(ßSÕ¼9ą©uż7ÄZ¼÷¶Ö gĖR6ć$—ßšņ-NŲ ¶L„SĘę$%ĢPŲł’— ÜCZĀ=ń©ŒČ©r4ŒMXlŽĘÕfdņŽā²“kļ·ė×~\@1ügqī*“5HõCJ€lŠŹeŚ $sœW1qgqjWq’-¬>`xQWŠ .“-FÖ;ū ’ąŖ‘ųk”šĒ‡ķeŗY.­!’Ļ ”O®1[%c 3^šŅxzä$jƬ9ĘGĶŚ°­4‰tM.$lķõō§~„-É|Qę¼N¶ģcVBOą“kKØÜ“l·ē½D™G²é7)sk"#+Nƒ £œ\®©miwØÄ²G,€/L÷¬E#Ø]Ņ ńBŽCc=‰­ as*@bÄėéķZÅ'¼Ń øŃ/ ū9į¹ĮnõŖzŗjPųjĪ-27†3ū¶g9č=¾¢¬ŽsĖ‹¬^YÉuJby«zĪ“Ķ2Žöų¢@£2łœNĘrŽ£WµŅ|A¤[Él‚¶ł‘ŗō ö®J}>}.Õ™ö€Xä ż£źr7W2^_Ć økp”qž}«×¼- Õ¬%%Ūņõā‘køłōM\“/ lü‘‘œWiįŻXžŽŅZĆilČ$óNęŠ&üW6V’ż”ÕĄ@:ā¼{Äś}µž„qw"ČŠ0ePƌR4¹›¤iSHæg‡›u\rz] ¶‘4EcV?* „3”¹Ót{¦·œĆw1§—¼/Žē½y߉ō¹’Q%¬ū”¶6śZw9Ū¹¤i7–³µä…£¶N¬xŗynÖX,Ž€šF¦ībĆ2y€®ąē<Ēć]›©Åocsowf“ī±=k'3„+hcßiÉz‡b*e³Óµ9tĒŲ¤(CœSē #p¢Eb©,ž\ ~ī‹Ö±'{_3ĖE`ĄÓ­K3Œµ/[ŁŲ¼‘L°,®x$ŽV±5}Ź LŽFV”?ʤŽ*śƇ5Q>Ēū9|€= «W> ‚Ņī;Œ“®ĄēŒzb®1DŃ-a‘#XŅ0§9ļN¹ķQ—~`ąŒ+Fa"ŻĪŸmg¹¶ty6Œ€yéYžÕ­,õ·p”›q7k8G¹Óź:U‹ĘĻną‡ńŒó_.ųĻD–OµÜéļĪūµc€O¦i »;4©õ;[XęrįpćĮ„Õ|Sqkc”“ üŒy ³ĒtKŌ·Önn®­E’š ۃ(=}ŗšöoķō•ĆJČńœĻjM ‡Ä3ŪĻ=X&܁ׄpŸ`šž…¦“Īa·œā$ƒœąńų~•‹5¦gÅcIJŁĻw§°‰1r{7å^—®xŠĪŪE.H%¾ņˆzƒėQČts#įʹ׊µ?µÄ×Sn˜»æ•Ņ1ž1Ųž5ģZfŸż”Æn#p‹¹yéźkofc{—$ÕōM^h^ŪP·Ÿ+Ī”ē¾'·Ō"ńNšŚr}¶Č”/å‚H<`ėJö#•Üķ5­J]"ŅąIbøuŁ•ć½cxjü]Ü7šČĄ’ É“—cK3Å.Ņ\æœDW÷FrµĘ_kÓY[<–°™ž>€.KRRčT^§Ņ6×ÖæšŠiÓB¶ŗ¤ń2&*F+Ä> x¶’ĆÓĀ÷ZuŻćĪąĒ“dø×ÉBE ‹”óė—ź iœł*x=Ē·ē^Y­ė ĘT¶Ųs†bzf²r¹“!±¶iŠ9Rźvx…4©ReĒŚBłc+÷G°”yŽ*å­7U_x‡KMAŽ[0Ā9GŪå©a“ōĘk¼ų£įOxCāuÅæ€ļbŌ¼1åG$E[xŹ ÷ł²*¹­¢4PG­ź)w4;]~@ cč+µ7I£Xa’Y,[#T66“°ķ Vŗ¹ń-šČŒ°ŚøėĻ?Ҿ²š’‰„ŅÅĒ’#uu)‚3³4ó²Å¤ßOs¹Q›$7å^¬ųI&×no“čRŚo™c<­l¼Ésčs>!‘“ķ6ę…ęe(Ļ9Ļjä“_ŲųĆLÖūJæĘw,€&”„aūCĮž²šF #²Š4€LY7ØŹ+zżMsž!דūŻcQšŃž-OO˜C$Gä-žA÷ć„dŁ|Ļ”³¦xwL»ŅÓūH,DĄsÉ#ø®vļBµŽuņ”*¾SpÉtę‘ 2ōzÖ¢Éy¦j&8ķ ,ķvņóā¾ońˆÆ|I©Ggos$&2]Ldå=Ļj—$z?ĆłŚ ÉuøĆ“'Żcž×å[cÄZqńŖŁÜŚ[_Į ‡Ļ‹¦ķ×ō¬Ül#ßtkĶ X‰“ųn-|ŌŹ1ĮU9#š?•|›ń“K“Hń!ŗ³xu(®b  o,œõ«HĘĆLŽųwį»čc·Ö¤UˆŹæéųW½]x~Į·Ļi=̘"feöŖ/œŠĻCžŪPk©ŻgUR…ČoÄģ|/šĘÓ\»øšņKøb’"¾B eõ$zūŠ%PņxKMų}ØĢŗN¤ģ ’"=q^]ć=WO‡AÓon#¼t·”™IPŁąć҃jr:‡¾#±¹’Heū#źǵ71}ńŸ­{Ž‘”Ķ·:twkw4£Ģ  6GŻéϧįPā&sž>ńü+½7I³³‚ķ‹™Œaį•1ŒŸnµņī³nŗ–æ=ŌšJ—nfįsڬˆ³Ōü1ā ]iÖśu”u]āe+ņɁŌg½v—ŗE–„§[Zi±˜.Ż3,™ē9 Śčå5/„ÖÖśFÆso$w:‰Śź$$€ŽĆ½eiŗT‘č‘Ųj;łH q÷ˆō „c>žĘ{Ktšą¤qõō®GS–¦µ»VG\ś‚Eg) FēāŸŽ]ß>™§DĘŻÓl®ŻGūøśWYšćĀv·:Äzµ—Ūģ󵊌rśų©s6JdzųŚŅ)4ėK+ˆeI­ßllīÆ÷ ~µņ’Ä KGZŅ£“RYłŻ‘‚? QĢÉØ{®Ÿ¦ÜŁéTŁf1Xäoē­oZX}‘ ŽåU8PĢ:@}jNY£Ņ,4«[«uÜvŻ1 xē„|ĻńR’Qš6¹:ĮhŅĶo*äĘĆl¹?Ā{ŌrźJĖś§»ŠÄł2’ÉÄCšķ®5"Ēķ›dIw*„ŁėV6µ/ĻØčŅiÄĶ Ēt†čA÷®LÕ|˹lĮsø…GŁ­”°ć+Wć+^Ļ]’c-,Ŗ ųŸ_Ą×gą}Iō ——C AŸøŲ8ǵSBęŅĒ_g¬Ś\ĒywŖ]'Ū&8ßļׄ@²Z\_ŒŒčŠ`déJöŁ£§ź°ŲŻIØŽŲ„Ó +…,W$sIāO^Å+ŖŚJm}}1L™3•Ҿ2iK6Ÿ”Żi7PÜłģŠēl}‰»āŸ‰ž…m4Ū•ŽÉŽJÓ°ŒKUŃüG41¤Œv9ĮģZ.“§[Z™gR÷+÷c+‘‚:ę“ĪoY†Š]L [ޘ÷*Æ;‘Y»‹I°1ė‘Į}åĶēHK`0Ļ"³sģW3gžų§[šń*Ē “ö’[Ÿłeķ]ĂĒÄzLšllÆf±bl¶7sŸĪ¦ģµ~¦…ā_ųAģuXl죖å£h”Œ_­zƂ`Ś=+£Ń<}mi§\ū‹7€¹Ī8źMH¤1ń”šj—w7ZdŚUߟĆy µGkēxNļBŌ-/|‰‹?”n-փ„ÓįE½KżFŽ3•Ś«Ō ŸÅ1¢ł3ĘŅ2°å@ƒ'2¦™„Z\ †oēÆ>üW™ü\šMĢV:lš mrYšŹźFkHĆøć}Ļ0š_†LŌcŗŌ5™įó%Üū²OŻÆfšo…~ĻisŖĢ³IŖäōU=Ø ļs¾}No/‘·j×cįŲµ7U*ĄÄy –‡­ųmō»"ś…å²^łQ»Ŗ‘Üx’Äoų®ÖčE+IŽwdR™i8É?…dāŠHó-_\w’1ꆳŗ©ūµĒ[ų›[Ņ/nīōŪÉ<÷B‡ē$2śb§Łč)"}CĒZļ‰.lb–āk»hYC*’AéŸjõ½bęžÅnāK½€m@~B(·S)S3tź6q¹IīÉ;<џ˜ō­{Ÿ‡ķī„Ó­!ŗBTŻ(A’ā›ŠHŁžĶK™ģ%ó‘Ē ƬLŗ|O5½”³ČqµTóU‚1W1ģōóÆX“—|°æ'÷‹†Ó-ü#g¤<½Q߆Č=+C{ib­Öæ§lŠ9b¹˜d°S¼÷®kY¾³‰ć&āa¹Aٳ8õ ‡-M+IŚK‹ˆźq x2’hW#¬ų’M%õōÉ>¬ä|¹ź{ńI1ÅźfŻxŁī“³Ÿ7šœĆĢĪ#Įź­Gį]&śńŽļTņ— ”P_sLŪ]‘ŽŻ²hVļ3|÷‡R =+7Hńūź‹ß­tŗ‰­on¼×sЃŪ>µKA¦¤z¶£łRaŠŖœc޾bŅģõ†×#±ĖĶ¶ÜœœÆ¹«6Œŗ£ŻĀę+Øį;WĖĀ‘×ņ¦ų†ęńŒ‹ĢXĀ>t ̟žŖĻV®\fp’ˆ/¼EØAkż‘QB؀K/V?^µŲEį‰"Ņ’[I#{–Rv¶FßLńV•‹ęŌō‡¶—QY$šĶ“;×;Bœ¢€{ńĶyoÅ=9¼I®ÉŖivŠż«ˆ^4P£¦śS.¦’¼yhYÜŻÄ2ŹĒ+8Ąü©uŻNęŚdY#fqĘÜ~•.ŸdčÆ4F!¢ŽŻĒ<ģ˜vž ę½"ŅĘĻEФŽ9̱¢üż·P+&ŗ£mń. ž^ė2L˜čG&°­•o“÷jÉ/ŻÜ ėH$Ī ÄÖ©¦‚ūÜ)ĮÜĆļjć4Mr÷ķs›yLåT7E¢Ŗ/SdmjškŸ.ņęB÷lrXƳįūXī®fKŪhŠ•YŽ8­„Ś=ūGEÓꏟ.KH#l·JóC©Å¦YG5ĀÅ3 2ØGlŌI…•īy÷‡ķžóQhš™wļ#ƒķ^݇öéēģĢ—ķb”pP×<ßAØŲɼGÓÄ»GśBŒ`ŌŻ.ž[…2ņÄC2cš“z΃­]J³Bškp~MĖ‚Äõ9ü)ļø½#2±Įd?wėVdĪīóADµ6ö»o&`AłO~ y ŃSN¼hļ iē@v° GāIÖ™ĀȈs§¦kĻ Šy¦,Ny+ߌµ‹FŹ*ĒémŹ»UY”gµfC ·3„vDn}ĄĒz³uPÕf1¼k¼¬¤uą“ė_]~Ź?īžü\š’‰!kĖHYįµ—4 Ū¾S"ōćžiHļ£3ū>żŸ¾$éž+Š »‘[^]Ē(‰¾U—ńģs_ žū{CŽkŁYUDs02+F£Ų^C=¦„ Ļc$RZÜ#.|Č]pAį_Ć÷üļö<Ö>|iń?ˆ,Ū,B°8'šå<}&”ŁÖI¹dSĮ>˜ w<‡ģӒn䕌%¶ū ŚÓc|4dg½A*=ĶM>źK°ÄlI$7Q^Įą–¹·øšUbŪÜņk)6Q«¬jp‰ˆ„€õč+͵½hĄ“Gƒ+›ÜŌę߄, ń5ŖKrd¶€1+žGµfj¶×¶÷×:qR‘§;‡FėÅ4ŸßĮØŻ°†8ȵē8ļéM“···w;Lxµ¹E’µ¾\O ȁ¾źõĒć[ci¬ZÅ( ’7žŁ±‚ŚźŽÓ/†§ÖnoM¼‰0NG#ń„Ź\Q«©xsĖ{dzžŅĒvån§Ņø¹4żlBft’5ߌ2œē5<†—:mI™$Ę ž½t¶vPĶ“&ć6īA<RŠ)3¤¼Ō“HÓ§±3/*=kĖWÓō0\\»“ĪūUvš)¤UÕ|ZnŅ#iĄć±Æ<Óī j“©*ķž!ķACÕ-,ü7y„ĶŚ£ćęd Œ7¦kĆuA‡ˆg1;}‘¤fU^BÆ„_;1iž‡„j–-d'.ĒØ'”„Ԛī(¼č䐅#ōö©rī5 ųüDļG‘ĄdćĀŽų—Q“•2»ī°ļJęŃgA üś¬Ÿy ŽżuV3 <+äć½0Ōź¾ĖmyåŻÄŠ#p‘ŌÖv”4š”–щٻŽI µ¹GJŠtČ.žūģöęG<š+ńī”fļˆįEˆ`œRščWŠ|‰ Œ°D~»‡qT¼Rė`ź-Žł1ĘŠ`fčĮļeTŸ;ś{}k½¶ųYkā[ČL·k·–U”½éŽ6źuÖ>—B…Œ§lP„—BŽõ©Ń^Ō,Ł&·ļ/ńTI›™3²\]ł­EaÄ÷¬}nyl,ēeVéø{Ö&”Ļ)ÖīMä× ę8ÉĪGክjdhP˜ĆzŅqčh­cŠIłS÷‡{Wgg”ÅxŃį±oēhėDcй›ÖöX“²ĘN²9«¶ßžŃš’Å“’ąä©ĒCZ(³3˜Ōõ¶ži];‚§­-&•Zcšæ+9§{ȵ©éæh°’ ÖMĆ%qĘk–Ҭķ4ēI%żźÆnćžÕ\čJ-ž±¤ųĀĪāąŒ\l Ē‘ļ]_ˆōė[Ż×ÉæS{(,QFvļG2/ٟ;é¶¼ŌN­lŅY‚ĪUGĢO<ōük°Ö¼Iiī˜Ö·"y‘£6^ž•FŖ' '‰–ņųj"ŻRą&Ģ敶W”hšõ£Ū–¾ łB'ļ6:Öa(h.da™/¤‡Éf?0#*=«Ēõé..µY“ėå– 7-ņrz}kX“·2”Ķż'į¾”«»Ae×wS“œWŃß³æĀ ½>’ÅWŽ#¾ņ"øUX-Œ0+÷ŗš3·ÆŅœŖ$­l/ÅtßŅĀę \óg`ƓµŌUbJ«h†("f/‚s@ģjZC©JŒ&UxqŌõ®K_Ó5+Fš8Ł`, (x8 .Ģ7V½hDAmĒ‘]‡IŅ$ž1ĢŽß2qa@ł™mƧ¼»‘ŚL %vćµ$¶¾ó>ff‘ČÅlé“m" @ocA1n»ŽxÆD“Ć×wŗ£%šG ¢o^8b?†˜­}Ÿō&–[¹§Õl"µÕAđžGą{ö®āöŅÖīĄ£…USž'Ś‘\¬óM(Dŗ¶ę2a…Åz-ŻŻ¼ Æ(ė€8õ “žÕµHn­¾ĻlŠźø qŽkN°ū}ųyCĮ<¤PRCdym5X¬ĄÜłĖīŠōk_Ģt“ÜQĀ€[b“—BZ&ŗh…ć†ņī;\õÉŁŽYjZ\Ėy(žŃˆ€Hž?ZfRFBŚÜ3˜U[Éėœ`Ö}儳G± Ą=½é¤ ēq}o£Į!Pņp:Š­¦}ŗŚį®įgRĻ>”E;žwā3.ÆŖCtf‘ ”øaӑ]f‹ēéV’}ŠGxĆsĮ•œ“4ŒK—×ßZµœ²3ĄüŸB}ė¦ÓõG³ŅįÓć“zmĄ8Ÿ1¢‰—©ų¾ŽŪK¼Ņą‚).å1'żP5궉=įvu*Įŗć­ ”ćŠōŪ%ŗd#ŽŁ\téZw[ōūe•Ć6jø»nbćfUÖ"Óµ;f»²ƒ|`‘&9­];BŅ’²ćŗ–āŹHJecēÆÓń„)GC“ÕćŃō˜'ŗ†8‹s°uǽpK=Åä°ĻnOšH ­fŁŖ±ėz7ˆ5(­®-^ŹIöG»żóčįśÖ§‰ō7žūm^;x’“&“ œ¼#“ž{VLz1qlķåC•$£éšīōkT·U·˜Ā70ęŖ7¼A©iÖ/ma¶9bbwbkwJÓ4 gŌŁb‰r›=+A\ŻYbŌ.”64#c޲ž%46÷‘ŚiŽFö|ĮłsČ«œ„Šå4LÉvs0)  ’Ū[ZßĒä%šmł½p jAĒkž%rŅ£,“4-°ńœĢÓf“Y=ŹéŠ7j‰HeMnŽž]by1‹?³*åĻ<’*Čšż«’i\Dģ©ż d#³#ŅÆ¤E ƒÉĒrE$ņ[˼ćl™į©)tGc¤¬"ŹŚ¹zķoZŚ{dp0ŠHķV¤<ĆĞ$æK¦ŅlģŪ``®G@=k˜Õ€ƒų׏ė–{–Uc†8Ęh“6t=®4鄺˜łR`yXē>µĖxƒĀź²C4¾~€ēŠø¢OÖtŃu«]]éa.bF {ŽÕ«„ĶĢ0»‰! ¤`zӔ{ I—ōĖKė[[ć{rī›¶£cV”Ó|at²Ūo$)’<&UŲóƒõ¬ģtĮ³Ē5ėŻcCńdžK9-¦€+  <ŹŗøÆÆD»»¾D""L’ū‚„$%ärö4ļ]¦ųį—ä*YłT 1–­Ųld¹Ńļm wœÜ±*ägœńM²T8‡Ć×ŗ4šŲÄchšS|µO_ƾŪųq£h–ém5¼K<)嗗ĖRT÷5›WŌŃMń{Ązā™¬£xdk€˼sŌż3^¦^5“Šł_ RU‰ćufĶbŹ:ŚMxļ2+#1ĘOCZ~Õü?įnÓPń%ŖŽi‘‚^/ļńĒ_²k[ŹtQ|@Ši/ß¹®ūāńŒ«*0³`p=ĶMō9YtKhŌÓ{™åŻ#³äšąużÖĶęæÓķVV€@ĻųŠEŹžŅģŽ{M®Vp>Q܎•fļš„ćO>’Ø·,sęcÕņ•e±GĀŽńfŸØÜź7÷ļē)÷öī_~޵ŪkŚŽ—§čÓÜßŪ›ˆÓ—la~”œLe!t­At”³») Ū0“ž6ŸJ×»ųĮ§Aw5•ž‰kxĖÉ9V=2sō¬å~†w¾ēA ėz„š9ž`³°ivv÷Å{'†µmBy-×L¹ņUŠ‚Km#"¢,øDóO‰7ś*ŪIkq³T›ä\~o\Ō?<'į‹*Õu7Ä·ACĶk‚¦6 Ąaī9āµ:"ō3uæ…VéŖÉ®ŚĄtōK±:“+½>QķŽ+¾›ĒžšU¦£©j· oŖ“gģŃH¹3œzŸNhWGČ>=ń`ń¦§§ėQ\Ė<¬ßŗŚ1»®F>•­¤O,¬žT2‡`S%rG’ZĖ©č^šČšęio ÅĻ–ólŁÓĪO¾?ZŽųxڶ¹­źsźvKc™å[Ą2vb 'Ž„½ÅĻÜśPŠāµ†ętnCģŲzśz×ĶzŒ>½ØÅfså>ńĘ0ēłjEĘWcwl–Öš”ņ}הnŁžøÆ »ńķŻŚŻŹŸé(~LOJĪQa(ÜöżĘÆāM7OiC%äi°FųÜøõ®ŪMK­JV¶IĪšvō’3•3ŅZż#økF„ƒÆįé^ń—MŌ|Yyhmg²Šē|*e[Ž˜õęŗ¾†n-hs>ѵ+MGH½ÕeŒIją¬qĒ€ųéœ×«j°OuęKGĖƒ¦ÓTćc9ny©ām7@Õ­ōĶfąEq6dprqĻę+”–ī ėq‹dµ½šPrŹ2 Ŗ€’9{½3WŌ¼LśŪµĒ$`2ą¶ĻCV\Ėc;łÖr*īķz¬µr^0[«k:’Ț[™–59ia“n8ʧņ­d¾“NŪ< –`GĢ8?J|äJW3.u‹¹oįyn"·³¶üźžŸā­G_ń*;ĀöÖ’»T€ć¦OåUrNšóĮŗ“©Ė{iåI#yJS ·ėšč|;„ XY ¦3–ā™Gidļw;Y2B ī†–Ļæzćü\4tū=”vńĮØ#.īøĻ֏#O#—†ÖmwQ’öāA4Ø0ˆ~źŽśVķÉK’[2»ŃJ/2ń×>“šL«žÆ[Ķ{ŖO\L÷ óm#ę"»Æxjh Ąe7 e‘‡…Œå+„„š”j¶Ā'tc™åjķåŹDķ;īž3Åe&g{ž?ć]WģqcgNd!yžż+;D’J n„‚8Éź¢ō GC¼Ó¼8ķØĀńøm§'ŗM{CN„ČfČÜĆī^:Ń*Ē„ųūkK’{ėR8%óĄö®Ł®/n[Ū·–rw/ ö¢Ę×=CEÕą“¶²ÓYŠł²yGŪ5ō §Āń®iŠĄ`I#a¾`]Ėź)l.cęų^ ßO4rA“UBĮ™ˆ=ŽkÖlµ°š-­€ŽÕŽį·ČƖŲGż9¦ £Č&»·µæhŌŗM£v~oa^Ėąū«‰>Ļ–Ń"¶I“Ž=Ø l}wef4F’Śh’įāĮ“^bŗ=Ŗ½ˆXŠ: ģzĘŻE žmĒξ[ń•¬ĖØĶq’››ŒŽp{Ō¹Ž5 OžĮīž8 ŒīEwś®¤ėfgw‹ģäm*1ŲW;ŸcG3Ä'ńT7 r,É.rŸ>FŽÕĻG­źēX²Ńa„½¼¬71'=~””¹wĒZmõšCm$3Ü#–FŚ~åpVq¾˜$‹÷ŻW#šé¦ŒlĻTš·™„Å“oµƒmsü½«®Õį²H¹„ŖÅvX€qšŠ®SÓ¼I.•°üÄFÄš2F:`žUŲO¦?‹!¶»žI‘ݼĢ2õĻ­ nå>źVw“\ŚŁĢč9Ü~•ŌéZL,SĶ.ĶŖNŠŲ†x?•e8£™ń„÷w«åEq.>v%±Ś¹ f‚QrSoBŹĖ×Ų×+G »y¶“^$B(%š®wĆŽ#øZžÖÜ*X¶Ę8c×­i[žķe-ķÖ9"ˆq‡'…ÅųŽŚęāāęéŻd“'/»–’aŠókϰ_Ż› ¹’A#­S}-µ¤D]ÅW’ߍG3:"}ÄĀP‰c䓮ŖI“:„,ģA'ÜsĀAóM{“Šģ4­BKr…%h¹;†3ž)8Üõ(Hž†æą—擬^,š±š§öŲüIar-¼Ė†Į=62’yq_ÓWĀæKm‹ō&Ÿv¾EŪŽ‰(ļś ŹKS­¾§ŗŹå•8+ņ‘ź+ó·ž 9ū1i’“Gģó®h°é×SųĖDŠK›‡–žrĖāĒæAQ'c&õ?‚߉~Õ~ü@ÖōnŃ“ōˆ–»`ăŗ;’+پjZv³„ R½–+tęŚGL’sјóŠó³zwŠ‘Ń Ļ„tK¬|øīw×޽f$’ 8JńĖ…ł׏Ć5ņmėsx®‡uØ&–ĶÄņÆ8ź@ÆDѼRŗ½­Ā[ˆ ņxåō®Ü5gĢŗR…Ö§”¤ŃŻĮ¹ŁŪ7LƒQÅoē,Ÿœvę¾Ö”ÆÄ«;šĪąM..@»@éV¢†Ż~ĪĄą•9īkxŲĮ‘]4i8.®©ĖqŅ©ŪjWr R2vūŸJŌŹĘõÜ”F !'=HŖZģrŚC1gH3øœ Ø™Ķ‘é—˜Ó{“žzŌĻ5…“f“h’W“„É­bdĢ‹ŽÕ¼¹ ¹o˜’¢ØčyžŃ2ņä"±tšs:Ia{©"Ž0r€ŽĘØŻŁłAŁclŽŽ§Ž„»·D“ķ*¶ķó_ån>éÆFŌüs„ųUuKxžęš±+0XąšŅ)u1‘‡cØ4±Ēgs$Ź2Q ?ēĆkÖĢ.į2•fĪĮŖoA&Ȗęõ^„ĘČŪś`7įZ:|W:ī¬>ŃpbN>^ōÅdu)3ŃęŠ'Ņa"XĄĢ|ląņ:םiZ ī•uuŖ](’ĮJ łƒćw¼U…O ”śVŠ–ŽŻĀLįŲ|Ć=1AŒM.īÖ9ń AžÉé^įįŲ"x•įūb>;ŌJ] éÓ; 8ćń†µØÆ`y†Ė?xo†%»Šµ‹«Ü&’  Ķfn¢z<—ŚHs“FåpJ©ÉÉ®ĪėFÓÆ-ŻŪ -^As€£:Ņ1ź3Ē/¼-ZĻä0ޘä{Wmfv¶oŗO§5\Ø.u: …°e·ŗ‡s²’ŗšōø4…‚Åpń¢ē¢õō‰”ŽkS²±¶Ć\4æ1Āæ<18”< maköņł²¾ņ<¼qԚdótg!ā)!µšXĄŻ É犭”ųĀī=2K1ĄSĒOoēY̾Tsrų›X¼ŌC_jģČŖ€£žõ£&¦·1ÉžnŲVf‘·RžŸ-Õ»Ķq˜n£ščķž!MG5ŠžDPSę8ę­!ž±ŖĒ­j³]Łō•|É[G ķ+Ø ©žj‘2„ÅŌN”Õ:ą©ž•¬ŅŻ2“jņ¢€”¢ĖIĆ@ónbŲčj¶› ņĶPř™½i=†zW†īś1óĶ3cø’j׆¼ *ĒypÓ)µrĆÓń5¤%b4Ī•<Ų PQP½š}«Źuo¾—ė{Ø3Ü+ž8ŻØ­¹“±šF:ŒŠN‹ūŲÓĘsšėō¼ĖpHdhČć'•É-źŗ‹i)[”T'ź+;Rń•ö‚öĀIžą?ŻŒz։¾¦r±Ķé¶øßĮ+Ŗ“Ó]`‘ę™wķŹŌūU£&Ź Ņ²cu^?ZŽ‚wXŁU æj Œ®zO‚_Ū:ź6ßf]Ūb$ēqü+ø†ęėM–Xc6Łó‘ŁM&ģtF'…ų¦Ņį®Ę”+¢L>Ń÷5Žd`„ę ‘ƒĪjžrģR‹ģQĪn,Թߕ^3ųÕÆĮ/–±°Ėm“÷hR3öe+i%U™Õ¢“ŸZÓø¼Óģ䌁:gŽÕĢØĘÅx“Ø^dĘD’ ”Ī{WS¤hØĻq,Ó!±äž™¤K‡cŹÆµ}@_]č£uĀŹćĖd\°Éé]„nģ{¹ģŽŽP õĒ^kNkéÜŠŽī%–8&*WwNõ VЬļ.ā}9«R³i5I żå8śS!hķ’fƒw)īh̵ H[SycQ ¹äĘk”ž'NP¹`Üdvؙ¢™Ī›ū‰&†0NÕĄĄ&”yu§ä*Ę3Ļku4¾–2d‡ķźE ™W†[µŪiŗ\‘Fóɏi\ö=)ˆļty’$+Œ`cÜTŚŸŚBmbTž"™.')āˆ/-ōē6цŠ5%‰ō®sG×"ūVr΃qąŠŽd][ķu{;沁q±7§­pŗ^ ś6”3Ū, `”ĒI•ž“§xŗÖd½‚0ć=?•&›ā›kČü©äI D7CŽõ24ŒEÕ?³“łœŲŁ„üŪC€§”"ø½6ćP»šuøČumŪ»Q©ENī…®db©÷O½už•ļ4µšā5Ž#’Ģy~8žU©œŹ“x«QŅ`‘¬Y„Œ0pż*[5­nŗÕ²'SĪ3Č­ ŒŪ:<§Ū ĮĮūƽmvŚŹĘŹ0«ę¹ ’:SŲ¹ężģ6Ś€`ķ'>»ŅŖZĖ,,Ó"Ŗ«ąūŌ6 [łz„½Ü ÷ćøĒjézL“›HÓķ3¹ĒĶųԌåu ūøĄ’(^C2½?čl¢{ˆ<ē;UWsJ‡Ā,ųwWŠņį ŽFo(ćēü«rI.…Ó·ŚŽŖ: Ņ1)Hæg„[L†YßĢ•Ÿi$tÉų’įÕÖ£}g­iStŹdeĪįĒ_¦+e€ēÜī<¢iś9Vž9v©“œd×?ń#Q·ŗÕ Ō…øH–@žšhåD\ŠžXŠ]Ŗ£·RՑ­Ć5­¬†Č±b1€8•ķ”…ŗU6†Ķwư“¹ņ½yÆjÓ”ߨŌ,wz1ŗÓ5HꘆEį”ŽøķNńÆÄF»½NOŲ‹ņæwt5&щä–‘MJāh£x·‡Š’œ×g>›-Ŗ4“Ēæ~>Ż«HD†¹u+M6ĘÖŽYeo™ĒB¾Ę°¦ņµ’E +œā¬ĄäfŅ’Õ>ĻicBå‰UÉ<Õ«½6K[ ŠÆČ,1Į5”™pWÜ£«Ä#њK1„ßbÆõĒć_@xOĄ:Lž³™u+8-Œņī mŚ3õÅIÓN=O…¼Mį½KW×õźĖä\]_4pąrP?©ük§‡ĄPˢϧĒpg™‰29 śU(šiĮ§¾žźęY1įq'FĮéŠō !“ĖQ3‡o‰BĀeK­Ž&ūž%øs1ó„zƒeÕ¼'įųW\ž( ’ą²4€.ćžzć Vr¶Ä¦ĻX›L“ĘVŅMpˆ"ŽwgŖž0ć_|Oš ߅u:%yl]Ų‘€„ćƲ±QmkēHȉå†Ulō¬½sF³½²72ŻĘ“0hü¾źr? V)Ė”ĪųH·Ņµ5×­ä’NµĢH@ągŪš7u;ż'X>,ŽŅŌZ&‰œ®ąŽćš™FåhAgŖĖØŲ­Öģ;ØĪӌqYÖrĢĶ$NPĆŠqɬš&ĒAomy¦Śy€¼‘·“ž+T»i$‰¬Ģ°ÉĮ#ÆŅ‘&é҉# ī$œbŗ»4½ą Ķn£ Öč6M6ęīįn,¢‘Ż2ŪA' x®ĻĄśøMR}Ć/ˆÕ׀£œÖƒe±Łų·Nóā ņ+»e\\n‘¦ŚčŃܲĒg_•Aē9ėA6:-%īµKČ,-§†É 'N„|ÕuuØx¦ēWŻ:ä’2Ŗß#ÄgłńM÷ß x“A¶‚Įõ=B-€va“מ;Ņ]j ā?ź6zCÅsįŲ$7ćĶĻØ?…jƹœ£Ōõ=. 2[4ČŠĶęJz‘éų`׆xŽibÕo4D ¶‰dg©'#ōœ™™Ädŗ[Ķ{"LR$.ŲŻ^5>–ž"ż½™µ™Ü•łrJž›ZÜÖ=Σº~–Ėžś¤7±)™£i0̾€Rx“Ä6v€ZHW'g÷Ÿź})ĞVyž³āż9¤’R³ ūs“ėŠ®/­®“ż÷Ć WC‰”ž:v¦‡Ė&‰®Zh÷ -Ō,I  óŽ±^©ųź×FÓęŠ¾Ļ"Ū~:PMŽĮZ爼Iw©Ķr;i&Xāó»Ü’žÕæćĻZOf,®ŁŃFжćµ3)-O>ÖōŻOÄiCKžWH"Ų#<a×½e/®ōė6ń.¤.cˆ8vįĻÓ½K.0;Æ ųĘĀiΜ‘Ż£Ā”„cŃśćh®×PńUō$ŗP6Xį›ćéYģŹŲóżFåõ)ÖęgūK'F#;Mz‡ĆW±“ŗk⸘ķÜGü“ō®2ę{ÖÆ¬‹‹S ؎P Øć#½~||U½æÄėɧ?g #sņ ÉäŹØčŠ=Ć·K!©O³ łU”’"¬k:<–z¤ŗ‡œŽ¦ŠNIR Ž­¼ØōæŻkžÓµ©Ÿģęā!fŽqĘNNōĪ+_Ā7‡I·½K”ę\™\ĘĮ¾ļ9ē֔ŽyD诼I}{k Ŗłķ¼¶#ä±Ēzą§ņ¢œC,2A6vĶøä’Mb8«j¶/sām^;[x–'Š˜ūł÷„žņ -Z bŠ%ĢӐpj¹ =óĮz;”į™t;Xōł¢ ožŠ£28Ū÷wzx÷5ĮjS]^^\“Ę -=wcp’=Ŗć~…M:Ģų“_k}:x›MX\ć,R ɱš·JźxķąŽĖ»’»‡lÓqF±—C2 j1ĢW|1°;p{s_YxSÄŗUž—i~–PĻrĢ į÷/®>æZ䨬mÜõi·Ž:°µX&“Bø‘<é$@I`2pn˜®-ĻL·–MF&ŗKqƒ.6ż3łSŒŗčŸ>ųƒYń®¾§yie/‡Ł[ĖÉ ńĄ®ĘĻU’ėNšśW†'@Ę–#ŌV¼Ę¦š¼_ źž3ń6œś=¤—s ¶NĪp”s÷~½+ė+}/Ā^ÓtHüC©[ĀPū`xŠō¶}ØRbHö-OÓZK/F‚ŅńīĖn¹ĻÆ?ńoĆū Uōū–Ģ*ČKBä#ئ¦ĖR± ’†<=gØi°Ź¶×±Ś\,…HŹ0’sĮļ\lVÖWóź”īą‚ÖIžA‘€Ŗ:(¤es7$yżēˆ/4»¶]*›Éd3ó­¹&ŗń ·Ö/ckVu9Ōۊb•ŗœ…Õ嗊oåŅōŪĎXׂb:ÓĆ]iśV}jCģņ°!$<ēéłTJ}„üõņ'µćSKy€Š6<øĒ\zt®ŪSń¾•k£éņå^]¾YTNwĮ'Ö-¾‚äg;”ųŽŁn‹Ž¹{er@=3]†“ć<ó¢Ę„Ē$ē §ʌlDžÕ!µŌFSēd ćŒõÆń†õū½j3,bT„|ؒŗ +j^»ćøfQ`”ć&±uK[ē»ÓeŒ-ĀFwm'<Óv=ēᦿcćµ?ß@tū›C»Ė$±`G_ĒśRź:~Цi›ģ÷ŃFå3ŒąuȤŁ~Šń!$±j· cg%ŗK6ÕXÉ;Ļ$×øŁĮws¦"O6łÕ>l€T5}ˆ”ūž}wįkŪ›™ŚŁżŲČ\šåüUąė½2Ī5\]¬HĄĒćń£Ł™J&_…,µ¹ļ^Ч•`†łæ*śsEÓŅŹĀ8%wyS žI§Ėb=3CŃ.āyįM>G\©”}į\å}Śń f–ķvööŖecä{»-Bžł§øšvgmŪXš§Ņ°o,gµbŁćWnž¾ōž“௠CŠj7VŅ„¼d§ ā½N÷WÕ„øE“A ćøéXµaskqŗŻ•õ¬Vkv‹{4Ģ"Pģ·^}Ŗļ‹§ś~Ÿmmn–̐“ųwc­+ƒ“<£Ć“_źw÷0ŻĀąŌ/%³Z¾%uµ…ŚšF{w¤IĆ®¤÷VŮĩ`‚Ć śĮz2iš ź—Šń\rŒŲūœę)ß ŹZö¹ †ž÷,Z"ńŸį5„üK„]X^jW×Ā+@>šq‚})ó2£²[Ÿ·ŁĖżŸ8u *y"¾ų‘Š'ø¹×ÓSK$#IäI“|ŲŌāµ¹ŖgŸxŇOÕ§gŗg7$!$’WŪŚ½ļVדż:ĮŚźxÄĪ7uł«Q™žד-N95„‚ ¢uł¤õśzÖ„¾”»Ap‹Ī=2Eõ×$ŽbĮŠK÷w)č*ćCĶµŻŚ¶ŌŽmĢq’bŃ'Ķ—_Ś:¾¤ČVf|7ŻÆYÓō‹h‘ķvŚBō5&’‘Ņ\;čɉ.„uÉćj/ųHŪLøK­·[¹äqŸjŅ71ęÖĒ•x©dÖō±glƹ”I°œgJĒ‹ĀŸdŃÓP•¢į€Į<ę©>ƒHdz‚öśż<°$Śß7ū8÷®Øk?wŠü?{|ŗĶ‚V<šyéųUXŻ$yžÆąZn“Tš]`¤¤y`Ų=I÷ÆSŠ!ÕRĢŁÜ#A\uäJ¾Q£I48śŽžźĶę<Œń]f³ ŠĪś1x”ćhuĘ}jZ"Lč,u«„H F™KlbB‘Qß_Ōķ’Y/8-‘ĢĶ“į­"÷Ė Ś“¤g‘ŃæOŅŗ]ŗdV"Õ¤·“X× Ūp3žų£™FM­N+UŃbMsņ¤'8‘—ļjńgŒ‹šĒ“ĄīyėYIźRgOwm#iÉ®kʬü;­ßjZĢ’ĒmŽ02N8Ī*J”½óTžŻM-˜¬0©vfb3Œ~Ü]x¦M‘„„¤dy’ĪG¦;ńAĶ=Ķ*+v»[Łn>žaū¾µ©¬ŽŁźRĮ§*Ö7RŋeWŻh ą¬"ŗ’łŒ—2FĄ‚±ž+¦“Aø™­ē•› ŽAĘ3śÕĘ=A²ōŚ~©qiöˆPʙ*øäuÓi6š„ʍr5Kø”+ay<äqĒįÖµ4ƒŌń-fś j·mgp·WŒśB¦ ēųGŅ©|6Žm[Ęzdš†³{EĖ͹Č-ķÅŹGčͧŒ“ x'V‚ÓKŠmN{w‚9÷‚JžŲģkć{“µ’ņeóÄś‰$[,ՅŁ% sc?ö’‚rDjŸ\‘^~÷§Leµ·|¦6ć³O™éÓcŌįžēQ,IR9ž"k‰Ō“™PŁć=EZ˜›±Óéŗ5­“pn1Ļ+¬¬ƒęļv®ÄZn“uæū ĘĘe#ø ņ1Rź¹4} +7WæóaēpĻZö{=SIÓķE½½Ź,˜ ‘’=’Jē”ÉGÆ|LŗÓē‘į¶T~@<®zö ½ž‡ī§,qnŒ1Ąči)(ö<٬V×Zé¶ÜŲ£“Ž~•·Y†”2Ŗ&0Eit'œžĪę[x‹7“•9pqĒ„lYßLl¦l«¢Xēxnp©ōČl}k›’„Y5ZÄpbvß&ˆs]1v'fuš_†:Ž"ˆ¼Ź æ6џjŌÖ|?vÖ÷3B9öHĘ=sśÖĄäyŠxYV[‹†ó ØŻåuÜ}«ØÓ.ļt»›YDR¾`’øö µ®Ē§¾«åķ0 ŗĪJću½RŽ\‹&5+ĪÓŠśÖSZ…Ž~Ö}6IŌDR“÷2žÕVī4G _+Øā¹ł72u N!¶Ü™’Y2£‚k—yĶĆJ&p=\U†z_‡¼mö;0—Yn¼Į•¦ÕœŃ×sõBņ.“ųęVS"/–ü`äzÖUżĢ$Ā(Öęt]qž²3ĮšĶe.Ą_šYŲĻJųm㫿Š~Šļ§ŃoÉ»’DBźÉ’pAƒœ×įƒõ9ōŻNŅkK‰īQī¤Ų ĻåYā#ĶZr?@¼;⬤z„±Gn£å Ż\ b½:ļ^m/LieŒĻ]ŪsœąWÄU…›Gu67¼»žŌ‚+“u•Rq‘ZĖ­ŻčĻknnc†ŁŠ>Õ=[¶ZéĆob„.Ē·ųcVó-āhęYC.B÷®•®„0a¶cĄŪھà ;£ĆÄļrģ1±µ$³5Īyn™ÅM%Ü6¶Ī”bGīq÷­vÅjp6ֆ|ńyńA0|/OlRŁŪrĪ޼VÄåøFPē©õ…āÕ…Ö TiÆŽPprŌÅÓ"¶YDo3Ļzź'ČmNŅF>c֚v€įÜóO›p6|鏻ļ\·Ū™ę 6ﻸū¦µŽŗ‘b©¶Ō$‚MEįŻ_‡é“Vfµ¹xąžmń¦w”r—ōĖå°æW  AĮķ_EKā Ły’‰ķB•ņŌņ‡é@¹;d4ę[¹„Š?¼x$dY7ś|*ŅĖ,Ž\ōįEŹŽNųA9 „Ł{Į®Ć:märĆy½š‡®1ƒY¹zżī©¢Ūh,/®b]UNę†vūWź~#’ö Ż>ŹFKrĮ²łČéDWRœŗ“ČÆl.£»Ć¤®…gœÓõ5čÖ͜vOc,eeaœē ­ hē/¼§x’døe#Ź;·‘Ņŗż"ĒH²³’Āx!2•ĪŽML¦/eŌēęŃ-l.Ķʼn‡ģģw9ϱ®ĒśŸpˆ!"xČö¤¦/fo|7ŠīÆ/­ ‘+ƒ‚E}Øé°¤Š#^ €s޶§ø„1ć-0Ū]"±c|Ć/×ĀÜϬq ŒĘ2<Ą~õjsJ] ķ*ŽŁēē3wls^—„hńµ•Ų†ńŖ‚ǦŃTßc3Z¶žĶ‚¤q_hČķY’ų¶[+7ŅÓŹš7ĮbT~Yؔ¬TNau?“LŅDp޼„tז»Ņ[’ǹ©ē-@õ-m¶Cl« ŗå†:×%āĒwp“ŖČKŚMXœYSYÕ`Ótė‰ā¶a*rxśUgF›Åv÷ x–P¢ąT¢Eŗ––ėlLhk€§ˆ×TöbKkrģāLē§"‡]ʂÜ包Hϵuö6é‰vѝйlŸ½HŅ2<ćRø¶Ō%m>4O1 <™©-¬E²Ā…ZB€gåKŌ·#Ņķ­4Ė;4ø‰įó:łYäUoy:¾‡ ±‚ī‘Éó2w:œU©Üłę;›ūy#ó™×±Ś÷®ĆF–ēRBŠG(—8äpEiĢ8²õö•ØĆ9d·  38§Ś,īķ!Lt5“-Ęįt!¶B®%S“ļPźń^j]ēr ©ę.4ʶžšU·–āŻä·ßó~ķzEē…t=J 6xˆ“šŻT’‡>cžGåłRz›F66-ZźŹŅāXĆĢ«óg8'ڹ}wTŗÕōėxob- ärTzRP(ä­<<р™É'“ҤFɲ4As‚G­R2›:)t릲’ Q19ē?…pŽ“qe!•˜ČAœt4Ģ\µ±oMŌ`GžŹ÷ ’ źtÆF“ ²łĒ­.Q¦ögo hÖRė³kĶl­<Ŗ Œ;ŅŗĖc-‘†Ņ/²ČźFPōüčl£Ė|=r–ŗÅ¶‘4LĢ›¼Ę(ēĻ­z¶³¦ŁßL°Āذ¢`cų­0<{RÓ®¬įÖŪ0©Ļė™ŌŲ9|²ņ޵¬ ¦nŲųRK«‹;ŻŅyHŲŚ9>õÓźŗk}•–-¶ņ sĖSm •žKā 9 M3¼•~AÓn=j-?Hó,D2hŪ§~µ—A4vpéųjŁĄOœ Ē@­;=*ĆÄČ^MŃaåO©­9PŒ½OĀ–:CEó.s÷³ČÆ>’v¶¾02»““Ķfģ4u–YĮÆ5»K˜8æ­z†«ŁÜAgµÓ®sĘ>“‡ĢĪĘćQ’ÉC-¾lƒĄÅyˆ¬-®ēMVY$brĄŽ¹ęƒDŁgGū5ɎD!¤Fē5Ö\ÅcqDó[ ™±å“ŹūŌ¹!ø¾‡žų©ßI_³µČ/£cńęW×7D³™RNj9ȊhK8gXae|©ėÖžÓ•Wh¤Ü4g"¦Lé¦{—ž!Aeo=µÄ’ExŲĮŻÅkj–!ŅmFtŲŅ©u+üB‘£zuÉÆOÕd²] ¹/-a…>S0ÜßANQ± GĢ9S,±ßisµõƒq(QĮϧҸ¾ø’S˜1ÓØ¬Ś:=”~ .ātk¹NÓĄĻ÷«G{6 €§>ʋ“5ķåDD½ĶAO4±Ąć$žōŹę4õM"ļNµ·øh1ņŽ;śŠęmT¤Ó»»H\ē ĪßaP¢3R=Ļ4e×~$ oŻŪ½‘‰åYXPGQY“•¬wS²ŗ¢‹rsŽ»hio$y-“rŖŹÄ¹Xõ _Ā0ŽX—‘” 'R+ń²t+kKh#[X¾\m¬fĖLåßÄ×l³ŻĒfžBŗŖ,i’ŁÆsŠm¤¾šv±²d²¼`¬¤®Oäž™§1ĻŪj©„A<·w‰;„ĄČŚ Æŗkķ[U{‡Ō"ŠÜĖņ®rźMtĘ= ™ßj’^kk«IŌÜ&ŅĆśVŸ„.oµ¶sņšv‘ZØ£.Fqž šÅŲÓģ᳚ŚAę1 Ą–Ēnkˆ†ĖiŽŽx†ä 8­1r3µŠęņĶĢsņ°‚:VNÆŖÜEx‘ZcĖS†ĪFEs‹5u;Č`ŃÖōN‘± zŸ„;BŌķ’ĶŚķϜN½¾” 06“ÄW°Go ƒłX—qÉjõXćŌgŠ–éy͆žˆ}č:bs«unn ū|q¼@`…8-ļ\ę±ak8ž™¢Vå6Ö X£†¶³ņ¼ČL:Ó­C}©’\0m»B–>“f'Ū H"?9ĮĪ+“žśłī•·’€稭9U‰Rģv~ń>­¤XMēßHń“…¢’§Ó5»»Œ‹¹bĒ_LÖe VžÓ']fC(½P5^7¶{œ×[7Ä{ CNøžēNk„m˜gÜe>½OZ’źpwĻ­>~VłĄōĶ2Ņ[Ēž6*ļ“€=éĒrZ;ģʂ8ft!ß‘W"їRÜŽ`†E{Öē9ÅC”M%ĮŠūtøœŒ€x«ś¹Žhm ƒ1wüŲĒįHĪ7¹ĻCmS±ą¹Īzf­¤ßߥŽJaĒBƂk®t’½ŽÄŗ*9äé]>”xŚ\FĄ¾ünĒJ åč'﯒Įģ"x¤TłĘ~ńÉžŸŹ½Ū@µÓ“ū¦ø{‡”wä”É␊W~%Ik”:m½×īŹęRī+ę]%“QžķYbBŲECĀÖčnw^Äŗ-ī‹ągkzöążGQ†ĖūI“Ž%Éē^SøĶ ŚB9åŽ%ņÜqģ>£Š= (’kĮ­j olŹŅ ód\ą(®’;/ķ~Čd1q֎rylpڦ“}gؤ{ѬŠŸäõ‹«ßf¼k䗅ĻĢGjœ…åݰq$ ļnø¢Ų<źĻ…O;©iīēXŌ!Uģµµ¤C%č+ nE\wÜZDJŠē 1×Ö“mü3Mŗ5łą8ĪŃZ‘.Ě̈́·‡ÅeåĘOĻ’Z¹É‹šĀšx{Q×ī$†%…ņx,HāŖ%Äė`³j“±(ƒĪŃĘ+h«It<ÆPÕżŁld–ŒóÅciZµĮA žō&~i\ĘŚŲ÷=#LQ—…dQ““×ŲUMi-u‘"Ł ¹Ī}ė6ĶcN£„Ēz-Ž9– u1ÅnĒÆż–Ā>9‡Łå³ø{ԚFV35¶ŌDq4jV3•ć”§č–,®”ø ‚ óU¹Éļ”·Ńōū‡•­ŃNFÖnI>Õį^#×&d³µµtŒy›ŲķĪļlÕMĪĘj^,×t«½].2ŗYœŻ:Złūā’ÅxÓQÓ,­¬“‹ Bm{ݾ™®yG©¤es证>?Ōu@5ŻD]k^iƒj¶ÕČéųŹ»ļ‰S¤V0iWs¤×nDŽyŒc”5™gŹZ“&—Ø“‘īš5`B•Čü½+µ©|P¾9ÓęV†ćM¹o1„|×=ĒA×üńEŹQgŃ:V•mØööĶfė+x*x®—WšF•āķćE“ŌŹķŠ“³6Ü!‡šžt5Ć/ü3kįšŅóP· ĒÆĖÅ[Ó4wŗYšŹ”`ąp¤ö©r¾…8.#»²Yl.Żß{Œ&IĒ~µĘÅö»[č¼ūeū8bY‹`Žzb£”ÅÅīˆüU­µŽ©)“ģ¼+0żF™¢jŗ¢]I 2lYSĖąrsלR,kĖ ó„½Ė}® -°c-ŽGäj®•q«Ą’][ŚN÷dīeA÷Fzš„Ī“O×µ;żPĆ}$K8\“źk³†DšęŚŽć©ō§ŹĮ±`½°ÓuM^ŚR‹wLŠC‚2Ać\°¶ņL-ŗ“¬ |c<ž¦“‚h³™“*<¢QŪĘ}ĮÆ^ƒĀ_šiaҬ€ū‰āOpjĢ„#kĆŠXĮbóĶØ#^4ĢBÆ@¦¹æhVwČ|Ū£•ŌłØĄ+9¢.sŗŖŪi[[ O9·„y¾·įVø²³šŅŪ[]I»Ķķܘ< ĢŅ óM3įō:W‹ĘÆzÓBöØŠčžńĪ+ɼEoØų_Åh:ĆMqqŪĆŖ‹ƒĮ4XgŠvzō– ,°ŪĪŪ¬@ŚGz.<#ˆR8n˜|?ĖĄ?ZV1qeæh—~Šļmģ;MA#ŻGV#‚k2-Ä:§‡-"ø¹mS[ »’…6’?śōĢł «}1“Ė‹}˶H¾RsłÕßźGSŅd†śęI$+` /įYø¶5¤Xė_[6ž‡8ŽvŖū×.Æ¢hV7K¬j*Ÿ»p؇tŒŲōśŃČZ…Ļš—‰oµkō‚Ö)¬t·Ī÷”c#=}'šžSŖj6ś”qÜpq»Üš|¶ŌRm›MæÓXmdŗ °Ī{uƙ¼]ąĖńō·÷Äj–QŖ¾ĒČ÷'Ō®W“f“-ī >ˁ3bCÓæJģ,õKXa¾{ˆāóRÜį¶g'ŠÕsÉļž ŁźOo§Km%³”YFx`r1^ ėś]Ķ…ä–pOqq³‡ ē”’>“¤}™ψn“K+½BŲ\ż®$iD>`č+Ź< ńõŪżFć]¹‡`“ĢEpC®{>{ŌĒMįc^]/ĆęźėU¶x£…¤/Č®SYŌ¼>Š eŪ{ķTm“ėVKDśA]<‰¬TZĄŁ °cp#„s¾;Ó×Ä:\‘Ł™bhĪēUn zÓ#©ēz&¬žH÷\nQ¹äŽ•ö›ą7\ųy·KÕķŽā8¾Ņ`9ʱ?©TÉŲ¤|Õ}į=fŚöH®cgN<’+^Ūœx.ÕÕBI*Z&QƒĪßCÅqĢ냱ź,ż©^ęÉ4ßčvšH,T­Ü;Œń§°ś×Š^¼:ē€ģ?µlÉŗ¼·Ό.qŽ_օåIč|·ć­OƶzéŃ/o#T†c"#żÓž_T–ŹīÖÕ“{čM¶õFņłŽ}=«”A˜KP¶×ÓA6PŪ ’+†Éč3\6£woāĶf;ęyī/w²¬g'§lPćc9+šėĘ~8š÷ˆŹņӒā³€Ē.ÉŌ{p}–ż²źŽ9 lŹŅ ąąT8Ÿ.xŪÄŗŽ“qmgqšY§,Ɛøģ ėSE‡§-’÷śƒ–whŽŅORŸå^!«x+āW|Mv“ŁŪŚŪZ«ˆåip7 cß²F‘}K>ńÆöʗgq “DK@K(Ež÷½wš­ļ5†āyĢBÜØĶ·<`ēֆŠs5ąųm$Ŗ×BkXtōl/ŠÕx§MµÖ5 *r²Ķ Ę1°ōćŒŌø˜Ź¹ō ¾$ҔӀEņnYpĄ“n¹®/W¹¶»Ecl*įĮϽ35^śާŸöī֏ķ@‚¹ī1Ҽ:[Ém¦•eąoŗ¬Ē‚h: w~šķܦĚŚHńOĢŚįbWBy»Ö“XÓRų4— ®ē˜÷«4vŻ–<%šĀ[‹ē¹Vŗ œ1 õĶu—z-¾Ŗ>”}©ŲßĆŻę1ł÷ÉļŅ¢U ŻčgÅā˜oÅŻÄZœr$`änˆzŠņ½{W]zTcpn¦U1 ĖļłTó°äg%gb«koŗ5łņC äõéZǁt½BŚcO½éĻčiūCCjßJÓmōØ4č-ßķ( †-÷zsõā›gb’;$”QĀć©Jžf̤µ/Ūč·:æ‘kxœݵaųŖČj÷w–.ŽmäLVB«¼v­9P¬yŌņ1o]«c‰ 9?O†YVę ”žgĪ@ œżj¬>Sšńg½ŗA2Ķö6ėÕˆķŸŹ½«[ńF߇O†­ōÆ"ī/.%Ą¢g‘śŅ±q‰Ąų‹K][@šĆķpĀ„¬­ –#µ|Ėq§j‘éIµ¦ń¶Ü'ŽśRv5Š>Ēš© i–VF[y$‘āɁ“’wŻė^'³ŗŠfŠķ-m’RH*‚O8ō„±3ę‹O‡Z}Ę£q«iÖ²[䯕ɚćž"iŗėßMy%Ź< UM˜$ėō­bµ&ڜ¾‹asŖ$éA-āĮŚ S]ž›d4»#•³(ĪĢ÷¢JĘrģv©§“0‹ŁRł˜ē½y_޼cq.>™’8~e-`ķõ©$ćüiā]RC>g%Ņ®0Ņ‚æjś3JžżmļfA.;7¬ł&ĪGYŽāßU’Æe–śHĆ,[£ø×5–öŅźv—iķXIĪžćU{nb N{ļ2"ĒbžN}]„|ÓõOµŽ¹¬Ć¢K0ŬS&<ęĘUƒz{Ō©#¢:jxʗąĖ? 4ö­#6ß÷ĪqĮ­ū>Ś’Sµ‘@Į LŸŻĪ9•k#:’|×,K¦“‰=½„(ĪFŠēõŖ1é’\éóGq-Ņ6IžótééZ9+{F“5ÓƐIkmö„žI00ą6{W=®źvņ%¦!eE%‚žF;ÖF‘Ÿql—J·Ńmd“ø”‰rŒø8'ÆėVVÖÖ;[‹’ŻÉ: ,nGOQśVR—CXļ©OFŌī¾Šø>]¶Óęœņ¾Āŗ)"Žåڃ.ߘćw°Ø6*źPjŒ6‘ĀäFó)ōÅpw¶ŲĢ&ø…Žpz`SEŹ=‰-uķ4qNL÷$q¼‚øģ*ōw6²½Š²€ŪoP¤Ž˜ö?…j¢cŒ›Jµ·ÖĖ[¤j2‚ę—üęŗ<5żo;Ie LŁwĀZ9Q”¢fßZ}žŹ7†l$‡$Žā¹+B}RžkØę™Ż7BšśTrt9œOšę‘™jĮį7…#ƒ‚z֒5Ť„×K ,ƒb«=½ųėZ"bõ83PŌMĶå­ĶźŽHČOJó«k’jžÓR¾Ś±ŹDdvńLŽ2±‹ØHś—–ŃOŒķŃNXŸq^Ńš³ĀŠ[Ė5ö¤fŚ#fWŻ†{PĖs:tk·š}ʙheHä˜%žePzƒż=ė×ĮÖZ&s<÷o¬<»Ć|ØGAł ĖAs— 6Ļe)¼•žÓ‘°7V>™kqrČön°æóĘ¤#-OKŲčŗ:ŚE WEƅē„|›¬x«R½ńUŽŪf6(„)<Žq(uZžŃ!‚?Ā2~ŌłV pS­y Ww6’\=¼+$‹ņ‚ēįJĮÉÜŽ×nŪū Ę1„Č…=«Gŗ‰šK»„S1P„æ‹•Ÿbb‹¶Įq«E}{o-Ō(ĆäĻl×®ųƒUøń”¦Ūč Ś>‰ pƖĄļŽŁĶ†ˆčm¬ōµhd7ęFõįJMf nŽx.¶yH<øŁĻÖ“‚ŌR‰ĀĒ„Ż*ŻĘ×Ip3ÉJ‰|Ėe•L²'b ĘkUO³)ź¶ŁBŽ9ŠMÄcž¢¼×LšŒŖµåŪ,p‚Hnwg½6ŗ„Üõčģķ擎$™@ä` ó/ĶkfV Ē­Īż+žK Ž“įo‰,Oˆ¬­5ÕDqy‡åOwčkčx—Fšõ£ĻŖ¼ij²Tsƒ!éYŖm™¹=|Mćw×|Ku{¢Ś&™j>H—vą©öÆ¢tM)ķ“[KVīÖ{ˈ–MØłņ½3ZŖd¶ĪkÅŚ½¦‹·?ei~č|Ķķ^w’ ÕĶĀ-…“Ä„å„Q˜õ4ģ+u;Ļ ų„ć“h#‘„˜ƒŠ·~µ½hu½Y®Yķŵ“r„§ł¤÷ŪéUa$ÓŌ»nmģašKŌŽęwČq·šć&ŌĮæ dlü§+Zst6‹:?ķĻ’ŽDXg»‰1Č1ē“ł×ā 3Rl· äFĆs.:ē„)ŁęWßj¶ŌQVG0ąņ{jļ4«IwFHķÓ „Ę}«#;D–V"dlrlź@Č5ęž&¼„\G A¤sžƒŒRbNÅ}>ĪūĪ·”Eū’B•Ē#é_Aé:%¼v0Hź7‘œcük)6RwŠĄń £Ļ¶·vńMóę>{ ąVā MTé—Q„‘˜čŅWA“tŠż’Łš2ģ>Xäē—ü+ sę™Ö8–&':šźIˆÅkymܽʓŠŹ«üóT<Å3¢ć<ŠVƓ٫m$J-”C9s$j7s_ŠĒü·öˆóų_]׎ęi`E²†\nĪ~VSųõ©’ŠģާõšÓā"ŻYYŽOs й0_+”s÷[>łż+Ž®lDs$Ń9t 7xe#×ӚÄr‰šļķ›ū?i_ž ųēįĪ„myy7—.”„yCę”KD;ó×¹ÆąGā÷€u_…ž6暌ö³Z\Åq/”²!Ōą)#ø4ÆŠ"ģĻų3ÆĮŖxvßƗwv²ŽĄŽk‚@Ī@ć9ėĒJśZāM.āŠBŠßgņĀŗ¹Ī[¾+ä³<µŽŖföcsh©iŠą ŽU@ėż+“Ō¼=%ń„IpF‹æxc§µpÓ©mS=/Ā>DĮh׉i*§ń’+Ś4ĊdI]·8ćēzśÜ²nPŌóq.ĒØ}˜ĻmäʬÜŌ„g\$2Ē4ĪK&3^Ō7<ĘCņÜ[„ØFd(öÅműŪpę(ĘvOÆ­l‘©ż¦–©…ŚņzZćoõ[«›ä[ˆ•w““©łWŲÕZŪ•M{,‚Ļ‘Ę~ļ\Ō3Gr°<*Ov§(°3P]Ī÷M׏hęŌŪ¢\ą«‘Ōä`Œ÷®]ć“–g„ ² d°Ęi§c7n]“»·°ŠM>å!š&ć s·Ž·.ļ,īm7v`)@ō­c"[FŠÆõ ›–{I (F£ŽHükÓ “M@“°D$‘Åč,v:Eʏ,~mĢAńņ¹ĄÆń&ŗ×ŁX!ap1ŗŸ23qg gquż”nT·,܌WŖ>§%„©1" 6@ć4¹ćÉüQxŗÅąšåb™·ģ ©yG.ćøG=ō©ē6PgWˆ”i£‘ · Ļ‘]Lھ›©ź¶0F‘YŪNDg$įž³Vµ€kežq5¼‰ū1ŒĢO•oz³is:°Y%qÉϵL¢hdꚭōaV-ü0PėųTZĪ‰Øźŗ`ø¶·2F^lu_åSĖ­?Āj_ŲŲ%寙<9ÉvÜÄ€ż+ÖīüOŅ“”“ĢūÅG­éīr×NĒ’j–·l÷RŚB69ĪyÅq~+¶h Źxö2TcÓ±ēÉ3˜Š¤š[” Ķ*żß|z×wā;­"ŻTO ‰;+ =h.+ScRžOčMŃĘ¢-äžv˜ś×‰ÜŹĖ$‘o5o?ÅXĖr¹fÉ÷l° ׎µ"j·$±²•‡9%ĒmOaŠõˆćÓįŚgóĮßŃ«(ī5UT"Dķ&ćō­#£±}£Äz -©ŽŽ$øWQ¹sČ=땳‹Q·»ŠÅ­ŲX0;Łp_O­iqø <%{ Ō—Ķ—›’ĒŸ_Ź·u;É­ ¶|Ē#§ČY=3AŒ”c2{ØęV+“;ŒńŠÕĶ"öh[Ülø-„# <śPfu^ Ѭ-Ś B·•A*ƒ©Ē5ČGØZ‰‚łCęļž” •µ{·±Q"ČBéMšęÆö”"š6Wēiļ@‹—ŗ%“Ćg”7$9ō©t!Óąødd—Įü©ŒÓpŻ»%Éõ=k’Ōēū5Ģ«#ä"ŌĪGķĖy|Ģģū£B3]m²+¼ ZŚ#—ą­g(ö6ŒĻm³¹Ń5m&S£Ķi!޹/żjńņiwSB²•I8ż)ņō6ŪÄצž;)œq·,xs[ZŒ‹-©’1N£ęĒ„Y2v9ļ¦ĢkJ0>šąµVƒXYēŽ;ĄĮ±’<ö:ˆõß³¢KF~`G<Šåļu–Ōd›ē2<±õ v8K•NĮ+xw­#ūjy‘ō8,ŻsA¢Ž§Šzn·żŸ¦n·[*Ōń\Ž­s¬^½¤°C%Īé1‚pg“ō¢Āņ:©<;nŅZj²eŚ 8Į?‘­‰5 {xŲ<ĮČĮĘhH›ō9 _ZłĖ+!zg$œVt[Ķ>ójƓ‘Ś©i°¶fĢz“śuŌie"ŁFģśšć|Yāk‰<‡ņŅ8B§«R°iŌä`Ó§Ö$†i¦,GkŠō]7Č“†ŹsL‡åpøü)Åŗ:æ† ÕmĻ;Ÿn6ž„<7ᔤió¤E¢€’†‰0TŃ[T–Śā@p†^˜&øķ_D‚ģKyøD;B÷©BtģĒųZ?ŚK„]ŁŻ;(†ÜØĻÆjō릓±wŪ*DŖrąŠ4ŽKUÖ`ŗŃ ;‚>nJ„ydžtŻvāģŲ[–Ü’v•Ęzž(5‰æ»Óµ)·¬°b»IėNXūUóOW˜dc9"±“ ²kČ$Öb v¬«<諺8@uیēҤ•¹.”sœ,ˆ6ÜĒ?JĮE ŖvüĢp} R±#؈#“ę ORzóé^›į߯E£I”Ż*F€#K‚}šO5“PIœ“öwŗ½ńŠ?pĄžŻQė[š6„–sĒpā€0+”4eĢĪŖH PdŒaŲUˆµŲ¤“žĻ‰]%'Čć4ŪD–¬ÖQ!·‘–IŹĪ§ ~UcXÓSOB~Ņ—[—pść„g”,óļ ėvņųæM}Eʙf“ˆ“•nGĢ~õÕ|RŅīęń”šŖ—ŗiBwŒŖ«q·<÷„&(ĮœŚ?†,žßy³Å±īĄ3ĒĖśšłÖ+G„É÷Ąäg5“™Æ#;‚Y•–b“Į×m¬-#€?Ś7ĒŌv⣘|Œę"u ĢĻ“©f­#±™fPĖó}ćZEčŒv”āŁ­›Oó ńDÄØĒLśVM¬kæĢr~nO ¤äkŹ^-4³²vĒAZƒPb+©+.ÅłA<žµfŁ\¬ėōĶY_H{U·ī=+_ĆZ„Ք³Ū]ŖČ’0 “÷~”ˆ‘ģV¬KŖéšTpi!̲1į?­QųÕįIJŠķ.­ķgy^`Æ$hHP=©ņ“Ļ©ę~Ńõł¦ž)ȞĢĒžS^±{%֙d …dbķ“ć Ķ.B£PņÆH$¹±²ŗ ³qČõ¬½ K²ŗ¾ņœ,­ ×kShižż-÷Ł4Ćń˜œŒĒZņC[Ōō÷™]üūw®ī€Õ&öģy…ēµ+-FÕ5Õm÷›rIśń]?‡õüCws6¢‹ęc1žąēÖ“Fn¢;{mHõ åņćK&‡OóÅekžk§‘,ŒNv’K0ĄĻ‘¦CĻ{Ē»Õ&²µøB<¦giŠŲYn,öĆ#>āsŅ€LŽÓ5u©[ÄAFŁĻć_GZߌéö«oq2Ģ®Ś*[ģ\ds>(…`X糈”9č+̦ÖZ6€˜¾ą^ ūÖr¾ā•M ;»Ø’ŌŽ€«#.88 טO}ö‰÷ČąĘNvō©'šāPŚÜĒ¢G<Œēė[6śuµōw·Ā$n;Zw4§±Źż’łsŖ2ć™ā·t˜!‚Hć—vöīi×Łé?l¹¶‡Pq«0 ķŠ.jæŒ#±µ‘-ō7DĪᓸu4‡c'L“Pøš/ÕÜĖ=1^££i”ÆŁ¤ņĀ1ÜØæĀ)Ēs2’‰µøōŲv [‡©8Ś+JÕ÷ŗf‚WÅZsœģčt{»k«˜Ųˆ’Vąļ łÖµåC3©ĢRe—'łT¹Ct_ĖpZU›’2zŠßŌlM¢FŃvPnyöÆ,óĪ|¹‰#œV-żŲ·0ż¤—ŻĒ\‘@Ļ@Ń®4“‘W q]N”©Am­ĄÄŹBż*\ŗG›ė𙽺›k+±–ē nézĄżĖäTJ] ¢aųÆés$:ō“yb&Um¹*‡³¼OköżFk«p­l *=;šW溚„»ŖF |ćó¬é-'H™_4ōµU4&ģw:šĶ‹ŖØ®sžkGLšŽ§¢%½ŻŹx„v[ŌOŅ­Ä9‘ÓėŚuŒv¶ jīˆĢ™ģ+Ī5-āżäPū”€Ø•?g(Ųō;}ŪSŠ-ÖŚ0ÅB䞕ŽhZøŽī;™¶Ę vÜŁłaD_r”QrÓPŃ,ą¹±h Ī>vąńھmų†’7ŒX[żķ0©åņW§|ūU)!’X[ŚĒlDŅ+‘‚sŌWq„e¦iGø!X±Ž¬Ę[˜öwwzµ±±}ßfBYTŒ œdž‚ŖĒįgœInēd[‰VĻAéT‘*v=CƖ6)¤`£ćĶ'·¦?­j·ƒti® ¼µ·ĪAĖŗ‚sķNQ±j­ŹZÕŹé’¢ DlŽ=k&i®‹ŹĮŹ·¦ vlä¾Ųń^¶ ²—īƒč3[’xļ]Ū™ŁHĘ{b„JćŒ;›±ųŠņ{ ‹gXÕ<ĪīÄßų>i.†½o<āūšŸŗ}źŠåčeĒ :tÆ.åŗ_jŚŅüKö[ 2Ļ\œŠe%fw’źz=ę“ČÉö†$ņy®+WM½Óä„!’vązPM"“KT¼“Īr›z€jY.`¶FP¤…éŽō›°1Ü»ŻowņŠš„z·ƒć“»»‚)&hä< ¤äŖjš4Z~•y­ŹŌ—ćšė^}¢kpź³1‚ex‰ėŒmö5Bz~5°“Sš¶¾.šüŠ«œ^Ssm4Ģ$E;° ø®ęv¹ÖųBŃuOiÖ~.Õn“} ‹’0K–ĘT {ŒW¦Ė¢&•g?ŲUš<œ1xvĶU’+“CĻuu¼{Հłk÷ĘsZŗ}ŹźwĪ$HķÜNćĒ„Ca(v4ē°€<×EŪÆŹ0?*åµ µXĒĢ"”*É©‰[Lšō×öÓ]żĆ Ąń‘]Ÿ†¼16Or/š­·Ė#µ¤Ž‚ĻOņä–[ˆG<ź)u°l“é®­"óÜq@ ×µ8u ŅI”’@0-ƒĄtżkŸŅīmn/£Ó”ł× Fp2SÜŠ¼č:—eŚ–å˜ē9čqDŽÓüōiW÷^ýŃ};O»½[T†4ŲüŻźÓŪZi”bŽŚzœVœÖŲ«œ—Œ²¹H,BĪČ0ŁĘ:םx³RÕIÓģą}ʱł$g†ä’ZjF2Gš42Į$gŒ0ĻZ½„B–wķ"(p3ėėQĢIģžæūUŅK$.Ń#‚źŻ²õĒ‚÷Y>[2E•Śƒ“R'ć ßȰӯ˜łņ£ŸJęō«I’ĪY®f—hc…=ǵ4€’+ėÖøTKy8į‰ėķ].‘=üzŅ\"ĘØŹ„l¢ć{ķJ÷U™®ć‰ Żņ`ž Ä}2ĘīŚ5h#FCø<ę”ÉK¹‘©G¶Ęā9öģŒr9öĶ|ĮāhRy59![)å˜ą)'Œ×4åŠč§§ųSsu¦kö×¶÷qX¶‚¹<ēµō °^j€ŽŽN×W [ēBzW<ßC©eÆh³Åu7o2arōaķ^Øk钯‹»)RŪcŚyeük;03“Ž“Ą†¹·GżaĘßjī|-®ŽŚOu¦Įt_ĪCĢ»Õr0¹©qšė_¹¹K©$ŽK‡L³Õ ąc5µb£ĀͤĢĀ0į»V‘§ŠŽsÖōĶ#JÕl,uHRŅY‘‰ņą×ćO4—V÷Pbwł•1TʊŠóķKĀŠĮ3Ē }ź:ĶcXiVśsKuß#¾+ n‰„®Æ} ­ŗŽ īD˜T†ć[PhŚģZ½¼±Å,:{ĘZfĒŹzųŅD+£µ] K¼‰õ;HāƒŖAĪćßĢIÅ(–ݰĄp~÷Ö©IŽļ©É]i·÷šž°R1£ 8Ę:ƒųāŖ.ØŻĖl××/i Ž@x’…R˜s;Væ£_Łė6WV{¤Ż*Ÿ5[ī}>™ÆTų­ė֕¦Yé7²–HŌłj=‘õČĶY ¾ŸTµÓŚäŗfŽdħęõ?JÆń.ėV»²Óī­’Y.$TVŪøōóųž”ɱßxoXÓ5銯ˆćŌ7ķ’GčœÕĀkŽ%:7ˆ„Ö2Iq]Šz}~¼ž•؞'ń3ĘwŒśC[ZÅce5ʉ®UĪdĮÖ²5ox«O±·C±†ź_9eVc‚½9ż(5HŽšŌ7:’ MšŅīwŽåŽy'œšņ/Šŗn—māØį¹gŸTøB"łæ×*÷ ƒBŠo.tØōŲŅ[M’}õė·#ƒž{×¶é֖¶–q±%§VžĄbƒ>s•ÕęŗÕõ‡{“˜”*!ĻÕŠ$M³Klw¶Ü?  ³œ}^Ķc‘gž7tČ8<ęøļ\¬6pܬŹ7ä–œP&ŗׇ#ŪųRļJæŽĶ®&$ŗOZGŠ2|T»æŽŪSµ&976įžņÆÖüGåž”qlŸ¾fCĪZ³ŒuŠ*xfźkY%Žą¢_ ŠżkŠuĶgGšĪ—>³«ČńiäˆĖĻ9j„.„¹[DfxŠćĀ·šEž„ “wŽm§˜S\śŠń½ĘWeōĘId1Ŗ…‘q€MJmči—=[Hń]ž¤—Įy„[ŁGSĒZēõ?‡Wž(±Õn4 -­/dd‘ā(²mģŖQ6Œ+šņų”eŗšĘ ²i÷~–aftäś× ­ŽłZ¤šN¤.ģ௠g/ŗ—C¹½ÕmŚÖŚ.¼ąŸjē–ÅFĪþ(Óµ«“{+Ä^,˜ā™~ųŽõŌ hb(ĄsĘŅ„pZƍĢöQ^[ŚM=Ō½˜ć­i õ"Q±µ£]\j0¼ FōÉUčk|h𓳢Įmw#äŹĆ q’9­ %L[k;V["=ŌG¦ī„{×[7Łćū4°"+¹>æ^ŌŪ%Q±ęš­ž!¹ū83Ūęć=9®zśŁ/¬£YÕ×¶9?I×z?…õ h-m- dć ”ļė^‰§ ¹ē†žD‰­–,Ż€ō¬ÜĖ6–f`N=OĒx›Äŗ&®īt¦†h‘‚y±ēęĒSSĢĒs%ļͳīĻž@śUĖéX¹Ōn-ī¶ī Üsõ¬åTFŽ>ś Ė[Į=„ČHU‚ķ"½ ĆßÜ\…&gĀŖćo­\d'=.z垔f¶Ka<0%Ńl³Žé^=ńŅÖ[x‘ Œäp+XŹåFlņżC<0¬Ļ¾gł·cÆ=1]ióOx÷ىW…Ś6ūTIkzöג?ŁOŽŪĘ+Ķ`ŠZūXø*ŃÜX«šÄg'°4Čz«[Oį‹X“ŃŠ)f|(ńĄĻ\sPiś†—sŖŠģ”`bHŪX¹õ='T“ÓcņuŲtūm;QUŲ ©,ėŽĻjāb±øÕ#’W„ü³ĄĻųŅlˆÄĀÓoįšž«(¼ŒŪŚ”łŠŸ™‡| Ÿā_ĘķWÄ6:~§nŽĀĶŪ»JUĘ9ĒJDc”Äx+_Ō¼Qk|5]^k]OsMŚ%łAaOįRCć}lźW–ņĄŃŽDBĒļiaN 4ŻO”ŚŲ„‚Žb0ĢÜ ÷ļ]réi”éku©Ję ”Ć]½h¹Ķ(õ(ßjضImˬĄäs÷OØÆ=]®f¤ŽæĘĢ2H©ē3hä#ŌÆÄŃ鑉n4åBØå>UĮéķÖµ¼A#­šŽęßĶ$ Œ̾åk"㹆ÆīdS©!P¤]õ«%ʱø}™Њˆ\³ż°ŗžn/ćT¹9mŲŖ>•ĘkZķ®±åŚĢmÕ·;‚AķA±ēZ~ƒ“Ņ4r;ĘĔÜ2{W”[¦ĆdK(.SJל|ŚÜŠšļ„īa½“]ÕcÆ— „ī®sŠīļ#†ęÕŚo%£čA<ūPęa'©ĮėŚ=µżøYnÖŹ³°Ž€ö®3ڄvwOŲߝ„˜qõĢ·=!¼”ķ_|­é^}āGW–gC3l\d-Ä”iawpbŚąå‹/\גxŸĀ÷²\Ļ$3ę”ä€?՚ŻĘ:^š§ˆ~Óss*­ u`G;½ėźĶR“ėt·ĢNWĖfč}=i2dŽ£T+£ŚY5ĖžśDŽ€/#Æ_Źø»­EÆ”y.“dc’ ņEd÷ e›X\Hmš1œäÆćY>!¾–ĒˊÕ#R[9<ŒZ’į¹CVńŅię>[f2ųäv5ÅųĆlz¤WWr5ē?˜~lmöęƒH«©ā(mm,]dŽ6b”Óœ-|›s{uÆĖcl’¢™Ō+`ž­=žļOµ}:K¢2šNX¶:Wš%ÄLL±²œ{c½MŪc«šœByå–į ńœšŲÆ@–š(A`>S‚ģFwj‰K”7:}>ę0\M+BŹßwŠzÓ/uA5äi+ĖJI2ŗŻ±N23ŲՂćG‚ū"–^3—ĄÆ?Ō/¬f¾™Ū–źk¢,^ŌĖCo;ķÓ4s Ÿ-Gaī=iŚ–«c¦ä”-p ķāØq™™>Ŗ%]C šp¼“Åģjȏ-āć~GAģ*y“u4>ĮŖk:å¹ÓÖ@"ĞhLˆČ<ƒųWIń£[Ōµ VŹČÜĖuj‘i”“>ŸRV4TĻ9Ńt‹É§‚X¤BŁÄgpō]¶æ:iŃĘŅDõõ ĪÖŠņĖķA¼MvnĆ“Œćän¹÷ĶX¶Šµ[S y$Ć 99äõÅbÓøĪńoōæ ŁĀ|…’PūŠódZ³gń;Mócŗŗˆ¦Ņ7ĘŲPWӏēJĢĶĄµ.µÆxgµ1E®äæĘ¼÷V×#µŗyNķ‹ž}=V£JĘö”«cRYŚTŒ¦sĆŅ™­ź:ć„²”ŠČĢ\ŒUĮ‹Ÿ”›¦évŗĶż—œåTš§’ńłWUØévš{ۘf•ķĄÜT®0ŌŌ•ÖÅXaĢrµ¹2IŪž}É®.ęĀóU×-#“ƒ+¼,œć ėłŠ|ØqW=CY’ĆĀśjŻF†åā8č2ĒėŽŃž%__^’¦,BČæī€8Ų1éõ©öhŽ>¦’Š|YP,„̬+c; ņ‹/3]×ķĢ±Īžcmmæ{µeģKp²?RžŠ°Žīåž` š¼t¬é•Zu6ėŽ0Ć9Üku+˜9ö žP‘‘Ÿå\äÖrÄä“.ɞ0:Ó5¦Z“X¢rÜ/˒ׯvųńoPųGć= Å=ĢQĶožæZē”zKcƆĘÜŖMöo:[|²UĒ#ņÆäž mū"IąæŪ|lšF…{©ųc\˜“¢6Ūöy³Č?ˆż*/³1Góķą’_ųsÅbGH#¶Š?2HćåŁ‡rzvÅ}Ó„k±_ŲXź“8V¶ŅHäś×‡œSM©P‘×Å4÷’Ę‚1ĶČEé[ŗTPfćķNÜ€pŌ’žkē“Š“*ŻY†Õ`æ…V0±ą÷Ļ’®½ÆĆW sb¤³O”ńĮÆ£ÉźŚ\ÆcĻ­ŒŻitö’D›ĖŠUMūš~aéõ¬i„Ž –ŹŃDžnœzśØ3Ļ”NLšŻģv’Ś"³g’{~UĖkŅĻ}y œf€¾eŽ2xéŅ·‰„¢FŽtPYŌš5bqL@,j×c#¦TKhO’ŽssČō¬Č"–MEYLĶęavFy“‹4¹ Ö³jśHĒ;7$ŽŸS[šĒ…¤µ…®•™ųūŁū¦—(Iō9Óf»·K“}čIVRøĘ kéP r^\ü¾‹A‘ŻO)“ŽßÉ Ęģs:ŻŻżÉ–IįćåaŠö¤iĶŲĮæŌµM<i ³I"øS“BkŸŽ-`¤—’ŪÉm,œjł2z“Éa}§ŪĒyq HĒŠōśÖu޽zńMk$r2.Ņ^4œX‘‡ŗI.3³jFjä­¼*ģDk“×µEĶ“.XY޼3IoIŽb+WM°–y­ćdĖoŹy©; öKß HŚF9#óH>X'-Ÿz£‡L:wښE’AĮØ5Æ:ŒIV;f2OTa›±¬Åքvķm*ø}ēī(OP“±†Óŗ1{bš®y ×mi}VŽäģć¼jŽz’9kĮ)ŠyUĪņĄŖƒŹŃm7pI„<7Q»±÷­¢ś’g3ce ź¾Xøņ<²OĖĪ}ė*ūK&ļ.óO6HP:UŸ£Ł”Šž uK&!$€øē°ükĢ.É¢IXÜiI9vv˜żč»ĘsėZPiš@ńĪ”)8¤cŌču ø#±‚8cpwg󭱏Żqø)%Ŗ“)· K'ię•1Šž3\PńEĢņ²*[|ĻĮcŠgµCrīuģ󵏚­ærœ{ךG©\Ćqqks¼ÄyéZ™JW6mLC`õŅhYOØĘnŠyHĮ>¾¢‚»Ä±’hŪĘö³¼p”' ˜ ó ĢlåB†ŪŠŠ"ü¾nŲ'cēq€ĒµZÓ,ŅĶZéćąa_ę¦#Ŗ\FMĆo#9¬› ¹u;Ļ"åäˆg·ńUčĶgŽš—Ė“£ć ©nt;i\E1oތ®N(G™ų’Ķt[ØO˜Ł cYjwrŚ•fqłŽö Ś1±»įKmfąO=¤& >,™8$śŠŁńRŖiń\!‡ĪŻŽ¹?R;RŲŽ+¹ĶiŹ{i&˜$+÷œŒļZZÖ¢„É„ʐx3†JŗōÓŽ)GIĀŌsSé‰ Ō³ŻN$‘š@cšg4¢ĖŃō @Ky ķNŪjž“lé/ HOr:P%"Üŗ|Z{$$ŹĒ噬ūkšå#e!NG„#h>Ē¢-ŲŅ4iÜH7…įO%…CįĒ|±}Ŗ/$HG“4öMźwמ"±•¢)4QCŻW’xßU2źV-ey/’¤’‹ĄlśÖŖF3¦Óŗ64;Tįž äćo½mĶ O¦ÉˆĘsޟ1Š<†ėWŌ ¼’|ĮĻ͚MfĘā÷A²žĀf¹e ~6Ž:~­B5|3*ĆnÓ0w(6ķ<ŠõmxµĖkk‘Ģ „ņiŻlZęµŃßßY=¤7‘ Vćęé\Åģęņ±‚µ<ķQŅŁ®¢‘d1¦p1ßė[¶ö”UgVŚ98ėIGKŌ: ŪKIä $Ą†ČĶy‡Šn®”Õē‹~š[ ź3PZfœzG—n'HB«|Å{“Wķ¤†Öu$,NG¬ ³ĶõĖIuMbC™7™Ųžµ¹¢x^ŪN[‰ļŅ8¤Ą'=Z±’ŪūŲ,£8]×8ėKß=󒤯Ź=…3fĪŽ÷Ē×0Ż£kyĮĮ8*łrĻė×0ŻLm(r§Ó„!ņw8MĆ_k?ŚA·‰œ™@õ½ā˱ŗV‚kUPQ³’ōŲĆÓ&?k[˜”ņ1…®kŠć’IvLņ4eÜõ –õ6’į#-tČD¶óœ{לO„śäq³¢JģJĘźĪ Ņ¹g\Š }<³³ ŽõåRŒ™ŒĶŌb³5±%Ły# ÜŲkŅ<-ØĆ.–RC[@0“Įt:HtŲ/'‚%TÜēäĄūõfćH“]E,QWķJŪŽ6Q)(źui4«ę¶³‚[O“Å]Šy8īkŽŸL•¤Ü؞Xč ÅLu&Rčtš~ˆ¶IcWf`ō4Ė›–ÓnZŚ2RPyŻ®ˆnrĪ]Ÿ Žóķ0HHŻHÜÜģ>µBŌXĒf-ŚAö˜Ę8ž*ӔĶ3ņķ«B’0'֌SŻ_Zģ‘K2pŠ98¬œK‰µ„jŚīZĘå,Œ¤/Ó5³.ŖÓ»“ą4dŒt>µ&ǟIsok;yŁ_›æSRÉ¢ztŌ ŽGH£?(éŸ\~X;Ė›+K—vU‘Gī†9µqŗµĒˆn€ŗšāćkY€čj•!óŲm„åćŹ^mŅ[ѬR£o{»žĶD”cE#5ķ¦ŠEHŽŠĒ«OÖęŃć»· —6ķw®yĒæÖ±(āķ/ ÕōęV׀8^kbxU—åĖ…ĄĄäšŚ2;h÷Ö“H󟱾 +~ʽÄZ”éie·o’¤Ž{śÕpsGrņ³A$’ĘƒœóÅałÖīŽŒ£4€eĘ+j4ĪėRmFå!“ǟ `‚WŒŸnõn×W›JmÆć`†=°(Œ S<ĖāöÓĄ«orŽYn!ˆ'=²+Š“±™ šį–I¶¦2ĢI“Q±„Ķ Ž[ö˜4-’·ÜU‹Ūi‹Äź į@ēØĘ[mm4³m›ƒ÷~¢ŗ»M[uŖLNü±ā®2²9Św=ĮņŲźÉtšN­*üŒt?Jæ¬Muį« »×tø›a(«Üö —x^”Øźz“×77”|ęąēҹ9-M¾‚āą4ˆA)åsRāl¤vś|ö7–`Ŗ²ī#ø5$°4W"8QĀ0 t«ŒĢձҮ€MpŹ›»Œõµč©k¦Ā/cK‡]›÷½‡Ņ›„¤Ī+ÅŽo[É ± lŠāļtw‚̲F#bŻG„CcHšŚŁ^iĄŚ{Ö'Ū¤iȆg‹'Œw¬Ō„g\e§s+Œ·ļųÖ ƒ.ŃäIē'4Ņø‹¢™Õ‚ÅlhĖx·źö2KĢ[]NÓ“ŅŸ Éāj6žŌ“Y”G%ŠY@Ęō®#ĄŠĆ…ø†có?½4ˆßCvśÉēÓ$–+wIIłøŌf¹›„µ’ŹĀŚ×LŽĶįÜf“q&V'æ„Rv,“¶æj†ŽöŁOš¤Ž€Šė,®õmQ'Ó!hå»į™Tdć č¼+”¤·Ø5+c€ŁhÉĘą+€ń>^-øŽŽ!knŅ‚±ÆšŒ’ś©‘§uF\ä gœz×c¢ų~ĒL¾G mnåFXÓQEluSĮö'¹‘w«ķR}y­xš-.ĘćĆQ?Ś­'ƒŹuS÷sĻ>ł«ä¤xųÕ®4‹ma"ćłly¬/ųI&¶²¹š~bŒ‚6ņpzēõ¤āMŪŠč¤Ōōß±Ś\Yź6÷Člq“śW9¬ėók`&óĆß·<õéDcrŌN®×C‡]ƒL‰f•5%`«€ĒŠŌŚ ƒÅŖÉ ČBŃĶ·“ÓŖFgs{ šĮpöźŸjTnP 7į^9$—Zķ¹°æ‚āÜ+JRˆXžÓĄś¦šš)ø&ŁÉ8Ś>µę^"Žxµ?%.@¾9*{Vn&‰#–·ųmuā‹Įq©\5¶‹j’hŚAąŽr?Ā»xõ kŗö£åĄęŪGOiŗ­üv7 m—ĘÜcĪ:Bē14ĶjļPŌž{W† 'a9Üw3głT’ˆµżŠ?:5!Ÿi$°ō½’9Ż7āw5Ü3¬ŃŻ©UX€Į }kزń¾Ė¦šģīš,¬Æ(Ūéßõ4m,s0;ź3]¤Ä[y„ˆk‹ń¶µyi 5¼Ę[büøÉö \Ę6ŸmogcˆI>Üģ ē`ķÅzŽ—&—®Ė÷w©ö“;ˆf!œt \ę‹tƒ&±O{1°g(™xļŽ¶/ü)£ZCq~­ŗŽ4RŖßŒפå`sģSÓµ˜Æ!ŸO·T·XäÉĄŁõ¬KvŠŽ;ˆY·Źd,¬Ē’9ąV72lužÆk§™a›ĢoMŁ®·Ę±\xƒĆ{,ś{ęFEåU€źqųVČ,|Ń„x—ZÓQķ`½›É`Fķ„ŖÆ’Ŗ½FūĮś…ž“¶³Eus4k6IłX7=:f±…·=+į„VŹĪī’Qŗ·{ž© ˜©=® }!?‰õ%ščÓ¼§—ģźLhśµ#®(--xóĆ:Ę«āŻ?UÓŽŽbŻ+p\„{õ­-KFѵ™ģÕķķ’ł2\—#’ÆA|ģīü7ąwžiõ!mīmŽéŃ=æ:ÕÕüĆGŌõÄĘ%żÜ@¬céA\äśĮŸŽųvĒŚ…•¢j3Ū° ¼)V¦;šņ‰’īóEÓnŚį"¶O57 øtĒŠŠčń¹>Ļ6±¦=¼ksmĄyK±(ōõÆ¢5+%Ńl”’ÖĪ(d(5Čm¼qš ö‡šŻ¶»y„ź+,~d·ŹT}ļ”=:×MįXo4’.E·œ‚ŪĻŻ‚M˜|GØŚß_FnQ!øYEąć9#ß„`źó·³O \-f#!3“õĮ Od±Ņ#’G”2^•@Łn8ōŖž?šd©¢M5„¼6·—Qó£L4LržF‚yžĒ‘xkG½ŃR×G&÷Qß0]ÅrAcŌūW x³Āŗ}ž“>—|@UĢVźŲģ?*N)īh„cĒ4=?ĀVböņI‚-ŗ9AžŒ°ķ¾*x^ŅĘyŠ<ćqY$'łT{$ZŲŅžÓ‚óĆ?ŚzT_iŠGłœO°®oQŃ.už+Ą-b ĮŪŌ’œSP"$^ųwi«ų¾ >éÜin]22$ēzżkß'šjx&Ż­44F‘Øvņł,Ę­v,ņŻsĄkœšŽ­ęOlÄIŒrHõ5³į½;MVÖŁl $·98ą­3‘~ĆÅzl>!L±f™‚ob>]€Wt«ż±ÅÄH—‘Čēµgiš»Ä&½’ ]ĶĮ{Y>u@AM½ĮµoUeÕ„—KŁ$,ē:‘éśPQĮjšZj1U óĄ÷Oҹ;ė”»†ņ售ŲĪz5g7ŠÖ24¼'e-ĢÖŁ•ēøČ,€cwµ}I¤x»ĄörųjźęÖ-y—"ƒ…=¹9ķY+”cųĻJ‚ēĆz„ŃŒ7—³aGµq>š“'…n<åq|Ø\+žy9ć·zŚžĄyxĘž2Ōtč­ę•ƒ^ %,0¶šwązWŠö¾o Bæi¹Iā'j²Ź?Æfœäš½ŗC¶é,lÕäPƒją„[>µĒßėśg‡ ¹øŌļ–6]”xÜ98üØ+üŅĆ:]]@lä‚hˆ]č9Õ涚%ÅĪ Āęi$ڽ‚Ÿ­”u1ƒkĶoÆ|Gw¦Ć{w4Zgf9'Kƒ!Ņ-5Żz1¢ZŽja2/%¾SŌ ōÆ­ü9ysįĶ0)"ܬX›Ž?•C§ŲĀ”ŠIń{BŃ5 ŌLuK¹ĻĄŹ.*ĒņÆ/ų“ń»ÄŽ1Õ/4żÖŅĶ^HįŒÆ§OėK‘™¤zW…¼'¬éši©„æŚå· Ż}qéÓ„y½ö‘­Gw<ÖÆä&āćżg Ø †„āi嶟Jæ_“9!sz†µKeŅžŽ(R=łQŸį憺 ŠĀ=PųÄFöūŌN_#åų3_P6‡jśqĀ$wbI9į³ŲRQ+ÕģōŻļķęŒ©~l;e•†: ±į ūe»K īBÜķ,Ŗ&š] å;KMø‡ž& ®Ø’w+×é^m¬éšƒ£–b’7 [ØŲ¤®s‘č+¼¾Ņ”²“•­Š–)÷z.”įŁt4–źīŽUX°ŽÄ|”½’ZeŖfMę‘ow%ƈDgFćÆ8ÄŲųr Å-Ś\—g“~ n'Ü~TX‹ĘÖ„=ŗÜŒĻrīØ]Ż\vż+‚Ņ5MRÖé…Ņļl– «Ž;Tņ"yčW¾.ÕukhŚźį¼µUUū”F1ZŗŠīŚĀāpś\rļlŗųõśT8z> ±:¤·Q‚¹Éłŗ‘Šņ{6 ÉÖŚdņķ@8#éZE™>©įßģ›X§ÓĪC)9aČJÅšŠ¤÷÷ÓŽHĻ>pŁœz~tĶ/tz¬ŗĶ­„µXŽK¦a°†Ą_j±ØxŪS½ŗŅ¬ÆGhĖōäsż(‡5ā?ˆZŽ•ØŖÅm?Żņ‚ņžĆ޽›Ćž"“TŅZE¶›K¼žRĢ”˜ŌB*y„IRx}t¦Rn“k|Ł'²y&²o¼5oĘ”ā8DņCes‘…gYÉX\¶0<ā[-a®āŠ9 “nx8’ō{mA“›m­ ·y§ © ó Ļ$V<Ś•4)ė÷šÅ`­p7ĢŖFĆß­y$ }s*†S±‰”ūÕ¢G–Åķb³yIٲC!wzAŅ¢ŃmšĘąČŖą ņ÷ł­cątž!ńÄI¤>—¦:É#3]‡×ڼtxžżd‚ļfHcc“»%½3Uȉä(xÄśµč0Ū‡{d;ž7oZƒĆ‹ØßÅöb~民ƒĪj%ģĪĻK×udŗūÕ1‚UŽ>zé.lž× øf(ŖF橏­.V'œ×Ü! “ąœv2zŠ,€]D¬tė+øhĄŻ·®{fµ$šżÕĢv×W±?—3L ļ>Ā…¦<§Ę±Ųi—–Ö—i‘÷Ś łG?tę¶ü £ė>,štµ ¼±#ƒrēPtĀ4üR×z÷Ģå LķøŠā±ķ“ "śį7ŗŹŖ1»ń %Ė<+"„Sņmź½JVÖźā1,q†Ūµp8sJē4—RśéöĢDDS+’ĄšĘµ-b[Y–Āöō#i8܃¢Ņ#’öę8’7–lĆF©šz ׄ›Ø"æ†ŅWHä9<õ¤āf·<_ƚāKŖ\Ahß)'8éųWmhn·yo#MÓ,zS&z~Œ¶öā.žg €6ÓüŖ–½cnÓ$ÖņĢäœ>” ēG¦]ZŪ遄`“3an˜ėÅT¾Öf $ßŗ?y³×ҳµ˜X·„k0éŅXZć'*QøS]F„ŖĶ©ĆbŹkX÷d*üŪ®hē'SnĆĆŃiŅ\ÜBŠ3żÕa“·¹®—þ·ŠŁętµūb–*ŻŪŠP¤ocɼ}9°ÓŽźłŅy§ø1˜wŻŽĒęZœs\ĘĒxRĄ?†Æ™)?†…Ź[®żįĘyĄŖ“ųuō„¶¹“‘Ždnv¶Ņ1ŽŽd)Jē苯Ę-³”eĀc>µ‘4‘Ŗ3F‡vāž (ĘĒó&¶¹ŠLFαķē“Wf‹äĀ3<Ģp Ž•Fōäs—POhL’Ć9‰ø$§Ņ­hŗ¢ĘHuGB~_—‘ėM#Ѥś¼’šJæŚRK˜O€üKscńLšC¹vÉcX}+śŖų-āė‹Ūi­īß|öįRlœ™Pō#ük£¦ĒÓŃČŃąØćØćØÆ‰ælOŁÓLųżš“Ē_5}=Æ¢øˆź:NĒ*Ėtœģ_Ojē”{ā?“/ĀMkąļŽ5Ļk–±ZŽG$Œ†1ņ"u»ę»’‚?ō½gA·Š/ҵÆ/iŠSĖp6žßJó±ųg(s.†±ZžĒ~f†īё'·Ė ø'«¢Š{IœÜŻ™—QĄXŹō#=ėäŖi+¢Ż‹ŃŽ=ėÉmo—Icėļ]ĒĆżbFŌFŠŹd‘²A叮?^Ž\³V9*£Ų.¬Ś»ćóŻĘ+ʉ¤y<ƒ”#­}­9\ņ¦µŠÖŸZ¹ŠŌĀ…ˆ?¬{˜®$bč…’ZėĻ)M,-ŗÜ§9R=j-Œėµ˜FøĻ¹­ŌŒŅ:e³{Ėfܧ8Ī0+­Šä°ŒŪĆwlæ)8ģ;՚Åhhėś~g«Įcå S½pø2/lž•kVŌ’“4KČóDģ„‚’]•Œū#„ŽŹ÷A4KĀ®O§Ņø’ <O4²]n‰æ‰Ēæj™DŽSŃ"ŸK™XÅr³(įOf5ĢÜÅkj³E,„»¶G=*9¤N‡D„KJįe‰IĘF:ל[Ź·­œ1œ(ę›m ¤qäQŻ¢C ¹ÜęP{W{£\ŒkĢar|ӓŠÉ™~›?ŚŚĢ›z|Ć„t÷Ś$mnÖńĒŗeąĶõ¬¬ßŅ“Æ"ÕBŗĻ(3šƒS‰,®Uķ,¤a‰ž’fšW-KC šö¹uöiįŗ†k†Eڧ?tśÖµĖ°s2“Q3gŸZÕ@™T2¼H­6Ųmį‹nÜNI5Ģ\hR½§œŒEĀņ:ÕņŲϜƱ³»¾2[„>p'·Zė­tK†ŒØįIĘiŻČ$Ń.]‘|ż§/“Āā¹V FB+–cŌSF2¦K¦h“¤~{°Ž}tvZ}¢·pŒyæÖ¶øDó’jMįŠŽIā„ ōćŽØŪ[¤ó”sęCźCŸBγE¶Žy+ •Ī>čōŖŚĘ—Øi’¼Ta$‡5O3ęVŽŃļ” jē s³¢±­,b[ø]œ²Œ}ŃŅ®ĀjūŻdŚd– uG+†ć‘ļ^qā? c^‡ģĻ>ž@a”Į9ģh³f”„ŻĒvr‰Į :Öń’®_‘.>é8Ę( §ŖųžB‹mXš0px¬Ķ*ģŹ„œcóŒ Š6®¬­~Ńį‚#>Įóc&’ļUi¬ä\@ĶLbm5ųóbrX\v­­9bĻ ,äćÜUŃkšÕĀŚŹīql ĒłV½ÆˆaÕ,ķ—Ėas{KÜŸĖ­Įjq"źĆē†1€O§„T–M:ŌĆl#ŁÆBh±ŃcŅtÉVÖĄOnØłv׊ć5k¹Żä‘#pHҚ‰\ćü;¢µÄ2ÄIßÓµ'ƒc‚óę22£(å#˜óĶI>Ķ9…7}}*[%°ł]Œ‡±4…cŅlb76šZ:+;ė«’„wK²š;«h^l+ĪOƵ4ģ&•¬szŽ• ÕóoŚfĢ–ö™„ ‘!±ć˜į£±©hņŚÆ–˵×+·šä¢±{y [=M`ĪȽ ŪŪ»˜„y<Ķ«æZ«†īrłó‚Øł³Ąö š‡sįĶIÖX-ÉHI9ĻQVüSØĻ¬‹øēą~µ“v8Üu8†±3lžeg­Ķ9RHī! cLv¦(«#·Ót­=ō·UDiöv2}Ås¶7÷:.Ų£Yē~ӞŲ4~‡°ŲkĶØXtŪ‰=ĶfjZ݌«%ŖN‹*`qÜśS¹<÷T¹¾’7hŁYC (=*ՎŖŃİݰYöš*y„©’6®č øł‰Ś„zšāu¹…ĐÜN ¼@Ŗ08#ėėLÖ'Aįß5å͵•Ō±¤Cä.W“ÅexĘ ¼ČoVIQĀŖ±tę Ń. Ē āåWæZźbÖ“«‰L½ø‰&Č$ŽI¬žą‘•ā K6F³3ĀæsŌפéžuąXÖGU=»R\cŌéĻ„õ;Ė„d]ˆl Æ7‡īd”A²=ŁŪÅ>S[ńi×ŗuéyüÖT;Jg‚*½äéqrU“ĖP>L+CLšąĘJ=qÖŗ(“8lōłå‘(9QŽ™ŖēdJ7)B#·Ł>?LžÕčš¶®L!}¼”Ŗ•C7 Ø2;˜£>XcƒŅ·¬“Øäµx7DÓʆMĢŽƒ= “É8ļ߯ėž/]0Ū\Al®TåN?¦kčÆZk^±š£čÆe=Ė’¤W?»ž¹ śŌMląāŌ..īÜfo˜““Š¢%³Ń•#‚ō”w›Ė%v÷l÷ü3\x‚ņ9®n® 0«ž„ÕĘ}ÅģŹ  €]Wvy÷5źū-¤–—Ÿf]črs›óŖr%Ež«āÆx^óĆÖvZtsGv“‚EĪ;Ī:ׄ]ŻC“ēŻN՗™©ÄC=®”Ŗ'šĶ°· W§iŅ1± 6pėšqZˆÆ6š¦&ø˜oBŪŲ¶0+’^Ņ䵹ҭBŹFlgr‘—#14ß³ĘY]BõˆėVQĶ`¤! õ<Ār7‚+Msµ ·Ćłūš©ÆL›!ŁXa¶ŗ}ėb?O£Ū%Źź0…fB¢’8ĻćU“«öƒ\µ$'ŲņKē×·“_C)EīzēöŻŖĘé”*{w®/VžŠ–łgÉ;Ęz ™K r3§ŅDé„āńBĢäēž‚¹™õ—¾¶ƒĖł" ČĶ8K”-·įW’öńåžŻ8•źk£ń†‘b¶-x‚ ؾ£Ÿ„h„xTé÷HĖtńÄO;X~¢™wqŸj|Øįžß£ķ,*å§b¶‰t—m HÄ1«tĻ&¶u’Œ‚QF¹mģó5Ń.®µćI6Xē½{„÷ĀbßQßiu¶ ?”æĄq’sż=Ø-S8ˆģīü'¬@š_™eĢēxō>æ*—Å>'ß®į7“Š–W/C2* BĮ~•mcŅu;˜­<Ų£“=XōśÓJÄTE«] -Äk…kMŻ}=źļŚm ¾M>wh<¦÷­īrÉ]ćAm šYžŽ[ā¹EÆČƶŌļŖŅ\Ź€…Īsœœż*%.ÅĀē²é÷~v—ę÷<×=Ø\]ʲۻG ßĘ8ŪY?"Ī"źŹęöźHńµĪӞkWŠļ“É! $.į¶į};Ö] ®d9v;Ē+?ÉiGĶN2°M"сĆ!Ę0y㨮ÓD)¤±’HČõ­H±ė7:¦„¤:źŁ.¶Œ) d~žõ‰įÆČ'k±qå@å™?/Ō Ēg¬Ł[ĮadŹŁĪ{šņ½JŽŚO“Śy›‚Ēā(ų„-¢ŽN®¬w6ÓŽ—^Ń“Ż?H¹½š5‹aČ'ø3Āŗ•ü)`mŲ\}ń&HĀö½šĒ¤XŁ“n Ąs@XĄń&”s«é֖öÓ41•'œ×Ÿx[EÕ4æ¶°ŚĆKn™"_ā=Įōö mƒS²c3Ķ$EöžŽ+“ƒĖ3M)TEÉ_cWՒåŲę|IØ^Éē„žļ|WĄŸōf×īī/ķĢqL[É“)`:vꔌł™į];UŠH4’:&·Ų<’Čö5õ憒}& W¼2FČ£;Ē\Ԉغń=­ÅŌNŅīqÅsž'iÆŻ iby'ŌĖIÜ”„ŲŽN ŲõŖ–‘=½Ū›° ”źhfz‡ŖŚ§ž¬…ÜŒ/ ™¬ćø“¬Ź›s½NöŠ×śīŸm¦›AsČ­ƒĶVó­ēФ6ń¶“˜öq•’8©V£|%k™ x$Yb]ē!½•uzÕŚ%•͹+åŹ„pp3ļM+›/k:5Ś‚¶ÕīüAgo„ĻrļoķO›īŠÄÖ4„šü­“S]Ģ ĘŻ³ĻӜ֬} #ŗų~ÓC`·šįŽĪE`Gń{UmWYŃīo58{…fC¹’õR²} {%ŗžr‚AŽŻI­½RūE±Ö—A›U·KØ Iv7WČķśŌ\j›LčōūĶ:+OYbŽi ĢŲ ļ_5ų³ÄXx»U¶“y5"³£ō$wĻLtŖÅ£[Ě ŗ†¦j–J‰s'ĖÓ"ń:茒(rc.ĢÉ'§Jņ_hZ؛i}®ū‰œƒ“P&ŽKĆz¶”u{­i6ŒcH™b§9’õŠõĻx:ė˘jWŽ{/ČďŗhۘśG‚t£ā™Åø·7Ž’¼ >ó•äŸtč(Óļ’ĢĮ§]9_>6ʃ×Plµ.xOUÕ.u (ŌCrAēyž•ėž'ˆė¶‹kŖ-v&>” ¤yż·‡RŽÜ*Īdœ‚ø#čEQŌ<=.‹wwl©q·xŚr@#± Nü?ā˟ų“DšĘ¦ęīÉÓČ…Ū¢d÷#ł×³ų£FŠIÕtČķŠ%”Mø¬Ł°8ϿҦK 8£ę+9Ž ‹‰‹ÄćhSĒŗøtĶSP¶Ž]2${°2»†vśœTCrTlr~.šżÕŸŪ„»ņgW Ćų³ōÆSųcgy®ų>X/&ø³“’Mē{ƒ’ź­JVG‘k>µš’Œ5mOŽS¤)<܃ž{X»täłQÄp¢ķQŲ t ¶Ģkhų•įū¹ćx4ŌV_,ņ£N=Ę¾Ø‘Ö}6öī QqĖ-ó?ųš7Ņ™µ™äø„kŽŅ5›¹µ_5#V¶$ŁéĒņ¤åbyĻwóuÉąÓm’ż ƒ‡wFĪP’ uŗ–±`¶’ifwyøŚ3Ōb§œ«œķ½±žĻdo&bĢ‹—=EqŚ…Ž£Ŗß'3Ļ3Ž]ÉłqĄ4ć!}–=<»I4QĖÜwæJ­owo«»īŲH¤(LrG·µĘ'i£čz?ŲV6»żńłˆS…`“ZŗōZvœķkd"Q&øśāš’{s£‹8õ¹uY­”扣hc·“ī£Ćß”ü+Ņ4Ɔ×Zœ¶ź×v‚ŚYŽ0ŃÆqŸJ9‘J]ĶmRēMŠüJŗL2GåFB,Ųą}3Võ_Ķwv÷÷ŪtørŖ…F}HėEČ=7Į>𮃄ŽxÕ¬¤Õ5=øl0 ƒ„uśWĖ_õoųIõŪ§Šä6Ó1`Ń›¾i•Ģxα¢]hvE•qp’†ó‚®qß5[OšN‹Øč–ę-9#G`ē'–śŠKZÜõ+o ŲŚx}®..>ĒZ5 0O¦k˜¾ń>€bšÅķ7;€«ķJB:Ÿ†:mÉń-§ˆ£dķ„ «gĢs‘é^ŻćķTiCfZšõ—åRć9ē?żT$Z“<»Äq›kī·ģŪ+¹Cé_/jŗ–§¬ź'IŁ¬bKå¦AlwcõžTʌN«LÓᓘ]mĶÉ8bNH•ķ•Y6|‹·Ö†' Ż¶³u©Ķi>š‘i1€Žtm¹99ōā¼_QńU„šµßŁāŁn£Ć®8¬“ģJĆxłļ¼ĖQ—qcŠé^Mus+6æŹx椸ĘĒ”ųvy4ČVåš/“²a2܏~;Óm|!©`x®źł•FldƒŌāŖ1(öcć‹é¬ģ“ČćG¹ÆŚP>@SŽæLWAćkص[,mŽ>ä${CccšÅZ‰‰ź~ —J“šėD֍m|š`æüöóųWüEń՝­Öį.Ņūķ~eģ»r#9ź{b—6¤ėŌŽń/޼7.•¦čösErŃķ”¶X1·„x¶æeįļNV[‘s¼h損øõ¤§Ü|żĶrÉt=K¶ŃķšlC&ā µĢh—·śdń“‘1]ÅŹ‘ŠśUs£XT:{Ė…Ö-˜Ė‰ä¦1^yÆhŠ\[µ«.å_¹ŌÕ\·3kąĘ‘5ī»öxŲF䎤 ā½sā~ŃNŃ" HĮĒƒ #åÆģŸģ‰A–ņ!lc¶y8ÆBš^› ī£ėé“`aѤ\~"‡ŸGźZ•ī›§[£óēu ±Óīēśs\%ęÆme ŠÖķ‚Ü`ķU8ĆV2E“|ļćKŪ{Ūį%„£””ž£č?Zč¼=¢%¾›ļ‘)$WłŌŲĪQÓC×tM2+H-ī˜&éSīū£µvS^GgjÆ$ģ%ŖäńHČń_ZĖŖ*1pĶ–bĄä×są„ķĶö® ²$vįHė×īŸĪ7”Śų—ÄĘ@7+ٜ+rœō?•sĀÖK‹;—žqaq’*棦očŸįՕÅ֛ˆRŌ™VżÆ½ų§āojŗ•®£¶eqr×2Eąz!ϦkD»›BFž”„ŻjP[AnÄ[ä#ذ¬o|@}ż,nü;±E”’c)!ĒSļļLӝē†.eÖmKj3‘åćVĄ žŁ­Fu³t†TŠPK™Éė,·‘^[éĶ%¬¬ G‘ĄnÕéŽ šeÜzM•Ģ.ķ8 įĒ ĒłŠA£¦ųsUIõøÆÜ.–Ŗv^#޹+oéŅĪ’AsE›Įې}ņhÕŻéĖØĄ­²Ć¹W,8> W ŖiŃh©<¢1}ļzĻb—„R-^čMx1~é<ūćҽi<%”Ēwo,‰,źæ6_†ĆŅ„ĶŪ[BüŽŃ.®|õDi·@Ų,‚ŗ©ōK/éj.72+,pZ\åū[ģx%NJ®<]¦MŚiŃ„iJ‚²1p¢Ŗx›DŃtt·Õg¹æ•JMmÉõØqeÉ_cLJˆ­l§Xō™€€ŹŽ1é_Bų.ößR”Ię¤÷*–]܌ā³å!Üģ5’ ^kY”c"ļ`Ä ×–YŪĻm}=“°˜Ö"?Ž5EĘöŌģ4ĖŻBėX¶Ņ,ģį½iGĶ•É@{Ž=Ŗ’ŠtéÖ(ć‚X£¼``1żĢŽkh= ßOöfkY"ēnĮ×ėXš‹ßŽ=Ēś?ŚvBøČ5“Lż A¹“½ņ„Š4Wž~mŁōō«zŽ¶yn!9ŗ`pĄÕžY'ƒnnīićϧ=ė_LÓtķ>;ˆ¤¶•®?6F¦iʉ,”†k$[¼•Ź“ŒsW®­\»@`y4‰q1.4k‰bE‰w?'čk›Ō4›ė7!Ō™‡'Žg)“Æ1n‘Ł•Sū­Õ{ž©ÅŽŃµķ­_Ėv²•rŁZ0H‘¶žzō52—C3zĆRĢ[%ę@qÉź+ELh²”Ųńķō„‹ „Žžič= 29–فM¬IÉj°4Ż“P-»ŲńÓ§½e;,”„õŹ‘×q¦TLõ)£½ w‘r~OįŚ ĆU·YcĮz ©”‹LHćY—?Ž«÷ŚŽŸ~–ö‰ Dą,9­ćt3ScōÉb“øcéŸjķŒqźZd’efć8õŸsĘ[Ćģ×’^?™)|”ŪĒĻOŠ_:(^x¬d‹ę;Śń®!ZTBŁÜO½ZFžKY>UUU »éQbe#޳¼e¾/–0łŲ{zÖ~»nf‚f¶v™å@ą{Ó",įŚēUŠx|œ4`޼cµŸuxŽńĘŁzę²å:Ōō9gMó,œ»,n>ö:ž5Ė…–Čf4b˜é޾õJr: ĀךŠ\’.r½z·‰t™žĘ.’8üœ łĒұ‰å±\Ą®b•š3“Ч„ił¶óÄ$¶Õ=šØ,{„ĘtךkĄ¹`øSÓŽ³&Óą»ĢB’‡;³EÅb[kČ<÷ƒē… ڹą~„xM›X»{”ŗšf#™ ŚŲćo?ē5œ¤kČp6nš_j3O3Ļ?Ȅ«Ēó®ĘęŅ+8jH›#ŪĘ$ć½(«™³ĀÓj(¾Id_7jēśS>"č)¤=µŲ¹‡dŹB‡;0O_sZ“Ģyf‘=ÜZŒm¹Ü§9„vŠÖsóō8”Ʊ“Ø`ż—}‰óCŖć##šŸJ¹“NWfÄPqŽŌ½™Ÿ?@]3ß“R)Eνk„¾Ōu {9cÓ¤Q,ƒišG֋ŁXwąłµ-+ÅŚC•ˆŪL;ąü¤c“ķÖ½ć/Œz“ „yµ6”Ē×ĮŚŲ9Šuük3DŃēņ^ŁĒ³0øŚg&’ŅKŅc²H\EÉlu™Mę„a¤v“(ÜŚäōjņŸ[]7Š'ڲŒØéT®5+š:.‹uwa#łI Ŗ…Ė1Ęqé\-Ō·WwÕdeXĻVć4å{Ü.u:U’\A#¹&4ē­“čUŌäćÖ NG£čśTi’H”Y†f±5-5ē–*cŽj”Hr+hzWŁ IyŪųŽrkŻ<-¤heyÆÕ .YųĘī:V­’1ńƈu½?R±–ҐĄØ+ĒæÓƒ^]Øx›PŗÕ ’ķűRHź~“8ÜÖ:SźbGH\̇9ߞ•ŲékČŖ óqœzZĪQ°ŌƱŚéVö¬]•vćšåĮ45Žā# l1±’YРаŻYxü”’ŲčW5£©Én·ŃÜ@ BÆ‚}h(Ćŗø°@f†Aæ©ŪÅEż­Ģ.»’tÜa»ūUE »„寛ęKg <ˆNvö¹įŪ/;D(Ąg‘ÖµQFN¦§} ˜¤ŗ¹†5`1’×­?ių±bLr:©%@ĘkS¹ęėlģ—7zŠÖóPŪ¼‘ŗ 'ІW“VŠŚY$Ttė—Ö~Ó:G%¼ ¶ŽĆÖ¶™Õųc° kE¢,`'ØĶz%„:d–n. g¹źĘ?0±Ÿ‹äĘRčŽ3ódōÅgŪü×">M¶ķŖŲ¬d ‹š·‡ Ū嵗÷ˆ§œc"³lōń{fŠ!oµ“Œ}įX–s×Zdör²Ź˜ĮéP¼ åĖ_)<ⓃBk””"\(ƒŹs;IÆUK$†ŚŹķü¢Žø'ŌŽ“Lh[˜¼Ų&K6 /_˜dW&čś}Õ¤¬©1Č-“ĒҦ.ÄN'e?Š`]ÄV*±3 ¤ējå­õOQ·6’M4¶ńž¶rqWf^¹Ń¾Õ„XźWVom0܆O>Շ©Aq%‘ŽĀ%ēć õ­ć”šž„Öļ4žyÜąmu5ŠIH¤²¹ŒÄ¶ā>ķSŽ–@aYC½čåĪOŅ»óć-OO±ø“‚S+· žÜtĻćX›F]>]>ćU–Ig“Ģlåš9äō®§Nš%»Ę³Ä©h2ŪOJ,YjėĀpAhÆ!VÜĒcŸį•ē÷šBi,ŒŖ…Y’„sւ$‹×zæŲ…ø·cåžX7jęļõ˜žÖ“FFó’wŸJ FOsu;‰|Ę2Ćg ö¬cń](2lĮŻ×ė@4^!—Ncó ©ĒlÕĖYÖžE!ų±Š4ŪŅ×A'͌éTüBŅܤrŖ3•'{śÖrÓ@8˜•Ē˜$pA$šXbD”;Ł?•fW+6„·KĘ ĢF0E]µŅµk)Œ{”ĒE9÷«‹Ō„vŽƒW—V’’T·tČĻƒ÷‡« VķŽæ“ŲĀĶ£`mļ[#6­”«sx5X"²EÜ~ópr+‡Ō-ök¶…$A÷r{cŠńMBĪłå™#ŹLYŌĘEz\rĒŖŲŪßý÷[śPØ- —ķ« ägŸ­h.‡gux&·ŒĘŒdē¤UŽ‹ā?ö7…“"ėJøY®åsąņ{ąu­^oéVvWÕ6;ää’:Ł{Ą³i±ßÜhĪĘ=R$ēxĘGlĆźzś4–YG?*y håZŽ›ā k{Iw°¶1īlüĘ­i’Łf[jK4™›Š>KeŌ’Ó`šE·D ᱓‘ĻéTĢ’·‘n×)HŪK7E÷4 ǜx—Sk.-ā˜O2dü'Æ5ņēŠcŌ.¦»Ø=鮙œ’9JņŚ›»9ć{”øx‚`”[Ƥtłļ54Væy ēøéHJHܗKø€É$į7ķܧÅXŅc»¼¶3J7”Ä1‘A¢4ķ Š6›!ÓÆN™Æ<×īīŸStµ}Ø/Ģ8aŽ‹ōō:«0Åg(`2ÜćČuōFņD g¶zŅr±>Ģž¾eŗ–L$śWć×nm…“vńōĒjŽqņ”śō6Jš‘×ų_hīk>$[õøŠłe V=›ŅŸ:*Ē7ei5åõ“W’FĒ›×YØyńCxŗ}»ĪŃGøv­%2z™7—VsŲA2HŽa]²öŚEx ö„q=öÆmš±n¹v·qYJ] Œ{Q®jšµ¤a ½Š…ŗsŌÖķę«ŪXB’_[ĒpYdĮĮ¬7ŲźŒ¬yŸÄū‹]Ć6WŗÄ/­“‡É‡’Tc’>µįļć}fM éń̳G ¤( nzŅöf·=į§„g‚ŅŚūX»ó¾Öå6޹ė_DZxcOšīŹn#·yĻ—¹Ā⇯Goį_ū.w·IםČA ¼rü+©²Ó,uė[Kä™Y )ŚF ÕŲĘS}“ĘVŚeʗ½¤CwpTœ;Ō×›čŽ ūĄbEšįwĢŲūŌĀ2;Ó„h:d6ļ0V9 źy8µ|Ķā]6MSĘzŽŗ„–š|ʤH =Ŗc3dv–~ń/ˆL"6ŽŚ-… Ćc±ļYZWĀėØ5Ėx5‹ÉmmO4Ļ&>uwqõ¦Ų¬E·—K‹Y’d¶—LGĀEź3×5SU‹H¾ÖF›&”nYłdCĪ8’ŹC;=F±“ŠäŠ”Ž2øø8)śū×E”jš­ķ–“āĶNŽ[ł3w Ų5 |—ćˆZõļŒõ‰!՞źHī<Ø­Ńs¼q’ׯi“‚ēTŠ$7V~MĪՓ.įžsNįcę=fK۟øÖ­Æ¤Ņ"˜4lÅFONÕč^)ńͤŗ5½…¤{ĘŅ’ņĢ£ūøŖO”eaاм5ekØ@¬xV}:Rj^“MµYa Xvž øö3g³xYš®¢jvŚ•ŚÆGŁ_’!Ē_é_'|tY¼Qsēi¶†Y 2åŌ†Ž<`ķż)J&°>,mźÖźBļNj »i”Üp3^šŚĻXŠĘmWY{Y®"˜Iåć ō÷Vl'±Ń’Ā'iu6£ikoo¬Ņ-02N{TĆL¾ņīĘBN@ĄĒ½##™O ŁÆŒm84ūh]Ž@Ķ»ų6¤šv„:6§ż¼mĖ+pZźµ+(5=<Éfßmxć2>ŃĄ^ō›±”ē_tYµĖ»ķ¦i®ÅR\N3żM{’Š>ƒšŹ÷R°¼×3ä"Źv¹e=ĘMe'©q]Ļ•į¼ŅÆ”‘˜¶UńĆśšéQ¼±ŒKg#ĒŪ"Ŗ1"HäKP?kŻ0cæq=õÆ”žj6k¦Ā÷·ö±+0Ē·ž”‹¹‰ńCIŅ|W„ÜxrfŽuR'Ų:ū‚;×5uw¦ų[Kū>¦³Ms$~LI‘¾Fģhsøš‚l¦ŃąŌe¹ŗ¤ŒāVLO”8śW°hę²[Ł“™Ś6dōaQ'”79?Ķ­‡†£¶żÄBܤŃ(ÜMßxśqŠó i–Ś•›Ėh"ićl28Ęk !‹]Õ ’hnģļꕉź€õ5ÕiŚÅ« ¾S—Ų9ēi¢ƒ ģ-/Śõ£ū:ņmQYšĻŚąÕ– ‹YY\Ē#ō¦•ōGĪ>>ńÕŧ‰[Ɩöćķ‚¶A,~•½‡®E­hŗĢ­$ ÄxŹ‘×łVœ‚•3覟w:|÷¶[ʐäV-Äæčöęšł>lžZ8,Ž€TøœÓÓC‰ÖMŽ•uÉ{h²£óü• ÷Æ”“’ˆčž°†(līµ ž1³ęTčsžĘ¦ĮÜšj7÷WĘā$ 7ĢrG@Mtž+sd‘]¬ŽPĢXä7¶j”!Ųõo߯j~ŗŅ“]ŗa*‡’Ä`W šĮöš‹­ßų†ś9näxć ³6OA銨ČŃGCTń¾‹ö«›kØ)¼° äØ8÷¬ų€æūMŻŗŪG Ā…Ącģ*Ęyou ģ»¹~Šc·‰YŻwpŲķŽõóåę«kAؼīØy#¾qéųPD–§Šæ¼i©j\i–öšMk!@Œ~ü\d··„}c¢hZ ó5-\™ēUčł,Ē`*$ģ'£źK{Hpz’sƒšß×õKż^ö}FWI.ē}Ó6#„Kˆ]ākMDnhfŗiūŠåt»MFŚHD2ŗL[—Ļ*3ڲ·C+ŸOéRĆoį«g[™ŚdOÜq“+_A^„šāq-«E‡?.rqõ¢Öbz•Žæ„ÜYژb2/;»qŅ£³žĪ[…iUš =ĆpŚéw÷Wz|khfpķĪGBJ»Æk³jWÖ¹ß&Ņ”ŠąėZ©#)HšYōłdŗaxL€9Ü@ĄÜxwYƒAF–öie·‰H3’Üō•Böšž—¤x‹KÖŚY®„!Ņ&qīxśW‹ßźšˆ|_¦éYÖņ± ē.xĪ2H錦O”¬er߉ü.śkŸ²Xȶ^g–—;rŒĆŠ’žµŲxvĘ9,ÅÖ£tL;w—Ąō§¹LĒ“_7K%„3ČQ mć5Ģx»TŌ—KĆŹ ž>µ2јÉYžQį=r÷PŌwq£ķ|3śœōÆ©ō‰å³²ņā-ļł‚?ʧ±žu)jeQčyī·®ZµäŅ9\+T·Ģäõ•/ÅŻcĶ–ŃōKhØ#!Č÷'š¢‰Œ/¹‡£OāˆzĀiÉ41Z‚HĢ|Eäī?®«Wųuu”x®±cylˆ’G'E,GģeߒžkNV‹Häõx{Uy-–i ēĢž•Ó7ƒ!‡O³ŗ–åTÜEęhš ćóŃv“/ó[ż)¬KKo – Ēk÷«“šåĶĘ”öMļ/˜æņĻV5i™ ć«[æĮaįōF_&A$%…nłÅs×~ ²²–ÖŚ@W oŽ1†i•vv·ĶdšDvziŚź>bW§nõGHŅ-¦ūD—¢I% ņÅļķAœö4¼?įõ‘īēsO1Byźžł¤oŁź.&fŚpH8Į ^‡Aą’ čś}äņµČ»żį|ĘÉ_p=*ö»,JŅĘ]¢y.8ŚD„бŚd¶”‰pyŽĢEUžöK÷‚YVĪ=Ł*N{ŠČĻTtŽ M_I{›ēuˉƒü5Öų‡U¼Ö“KĖmK1éŲl»O­\b\d|Į5„Ś2Ī\¢*Ÿ½ŠŚ±"d{o2( ¹ r1W(Ü$SŌ%Ót‘kyv ŖÄģĒńœ铍{M»‡~4sÜĒ–1ŽC>CŽÓbńEÖæiq4p¤K1%\gåśś×Ń’i‘ō™£±1¬Č ŽŹ>qĒ<śRq5<?x‡T›SŅ"²’ĀŪo¼Į³Ė{W[œĖ}łŽXÕ ĆåœPćŲfn£®iėęĄG™"‘»`ēņ®3ZÖ^7ŚÖG 7Có/֑žļ@·ø„Z¼óó¶d ūĆė^y=Żō÷rŪŗK)$ģ 1隮ĀÖēU¢ź±é»m]Ö Iį@ź}+Õcń5ŌVVÓŽ‘Ŗ!g-Š ™D®^¬mÅżöéŹ0܇°®CTÖloģE•ŒŖ—*Ä<€ä‚}=+"ģ.‰ž‹äBģӞäŒćė×ō°µŠĪ‹åÜ3|Ū€¦+Nm ęaėWp}¢H ‰™°ŅĘ?ān®ķl÷=ęęU ¶@{J«™+ŪSń‹ķt½9ąÓķÅÕŌ„ gqIēõÅ­ååŌĢĀ1œćń¦hÓFę—ØĆo˜®JmĻĶźµ澫$0ۮѓ–<’(&ķ–%ŌŗlaŒ‡™?…]›B·—Oq2±ŗį“?ÅĶ`>vp§KmJ{Ėib'{æ`T¾–öŽśCq2<<АÜĪŗóÄQGjiČįē`~÷·µbŪK©_\Lfø}ŽŪ}Ŗ¹%”JēL–#/ŹKųU$·m”Fݜńš–5%crŚS ś‚ŖI%Hż)ž!ÕŁ-lĘČvņŪ‹ŸŸš¬¦LūWūB‰…Ė•ŚpGfØ­µ'b³ž2: ōe Heö¢Ī1ˆ‰~čĄĮ?JŠņF•œ¤2ć8Ą'õ¬‹Œ»­'IQ–Ū×'¹ūéĶÅĆIjąĘ0H=O®(;i#VĪāŻQŅI6©ĒQ»°Å~ķĮ.?h+}&öėįõĄٲąŒn¾C÷yéõؙčCcśĢų5ńūsI²µ˜·ö„ŗ€¼ēĢ·Ąžō5žŸ-¢É)™§Gs,{½8śVVŠ'Į?h‚>ųŃšćĘæµŪh^-j6¼cÉ» BąöĪq_ēæūRüÖ>ü^ń„µŻ"ņĀ:Y­Õg}Ū ¾2§äSŒūŲ§ąXĶ”5„°˜&˜3·,1€·čÕąÓ“»”6Ķ ēĶ,0zą_3ŒĀūķšĒČŌ‚ö’_±k« Y¢½·]ȓ n'ø#„rŚw÷:Äv7€G %†öĻN§õ¬iŅåv&„śŃšŚęžŚś{‰®D••@S€tēņƬ-œ_Z’…d~z×»„—CĖÆ¹y³€ĆØČĮ刭ō³Ż§¼įHdĆ'īÓg g+—uv²–(ŖOc5ŅZŗļ×ĶG8źjĄź’xÄQ"ʒ"¶Kcš©4IåĀJ[…ĒZ O@‚ yåT+¹€9ć•5Mlä{†ĀīP:śS( £Į%Fćøf¹ĖˆŽļTeb²īłW O|zUFB”My4NJXī6ŗ0G•{ 0É%o:y¹ėZ¢$µ-éÓA%æ™,”óø×K£Ąö”įE ø“Į뚓®IŪŚŪ\éųó†ļ~5SÄ##S“ŠŹĶø0rßJ†‚ē/ÆŪĖ}p—. ‡€ AŒżkgEŃP*܉˜FX^ō”R«Ō#“Žx‚'m¹ēźk™BŽ`†¹ŲąėBB‘Ōr[yÖŚ²©¼‰ö°#jÄX/m.Ģš¾ČØķT‘Ļ;£¤¶§ÜūrŲōėXśÆŪlįs${ŽT8ćµŗ„vXŠymŅ ÅI`^eźĄ^2G"»·Qģk—™GĶ6Ę}›ĶŪ­–ĒģŹĒ”ĮīhH‰!ÖZ·FYSl„dAéTµimµyŅŅ ?~@<Ż+»”h:}ž› ¤‘ĄX€sœ÷ę¹oų^ŹĶćŗ“™NN]j³‡I]ePŠ~µµk{ĒĖ+Ø+…ĪsšŹR2©ƃX‚ŪOø‡Ģ¶0{W.øė¹åŽ’yåŖNf¬ljŠYGåD`71$օŽ«lÖļ8™±…lō5Q•‰0®„Šk°ĪCĘ>‚ŗ›XÄĘßä·Ę=«R¢ģhżŽK»9\„é’kĻõm2yg'>hy1€3Ą Mœ×‰t‹‹9P$‘ūŽT{ŌZUŒĢ¤»y¼ąg°”¢M[ĻIh‰tķäĀĒĄäÓc½¶·R²2é–ėE‡s|2Mk»D@ Ž¢³u[H£x–)ߏ›{š§a_”ŠhĻbŖ>Ó"Å a󞘭Ń­døFt%ى?­V…#/YŅZ9Zxį>OxźkRĆĖŽĶʤ›~ļo­ßRäō8n4Ō.mŅŌą”É õ©--#³ŽęźbĆ09Īō­›ģmé’LĢeŽr2zWCm«\X+¬-·p ē҆Į3ćYH‘Ä‘˜ćęž„2Ž4‘ Ā5TaœćļVR•ĘXÕµÉōķ-Lvę ”|­Ö«i_īļ4»;ė{eŗV?2õ4’™ń5żäZŒ/fžQdŽß6I5ÓéZ”·ŗtpāO8päõj- ‰ķ¬ä¹Mאyķē©ņO&˜‚žg4Ķ¢Īyōū—Ū%ĪrIź~“߲ڈĢsķó:ńŠ•&Yźž ŃtŪ[)ÆUm¤iČ#”¢ń )$ŅĀéåćęć’+P¹óŻ“wĮ„×nVV$ś×Mmą›MGF]FÜ3ÄąĘLœśĪ€Go•ņčė ,‘D O5Ė5ιhķoÆŪ~lææżU2ģ3¤¾Ł§ZÅ=ÖĆpÉę >_ƼrĀöź÷VÄÓ¤A‹•ĒŹŁ>¾“F źXōY“Ł..¬ Å!·ÜœąW”źB‹“p!Ę0;Õņčdź šN—-¦™:ŽN—qęEM£ć#ņ¬[ rź!G…AåCW¶•¤Łé_jk‘»Ģµv¶m²Aö˜%Õ³·½L™Ŗ’H4›}^ćTƒĪ*±IēÓ<~5³sąH Żī®Ång\3œa€žx©Pņ½GVˆź®Š)C=q[ŃjŠ£Āį~pŁc޵.: Ś3ØŌ|U%Õ§Łą%^EڇүxVęK­,Z_>n¹Fņ[ź4[ŽgU¢^hŚ“ŚŹ-ŌOņ`6 śVˆ­l¼QcØŪZ«ż˜Āų Õ*īhy÷ƋY-īĪņAåĀ#Y9'9śUŻ~žÅu “Ā’«ŲTKģpIęj‰n‹2Åø—½zö˜›į’ ¾³ØĻŹ«ió $V‰ ^Dž'šD©ŚĒa7Ł­‚į‡'„l=•Ž‘¢ŻźH<ŪxĀ@ĻłéCAœŽ‹āžęU7›œóŠ ģ#ū-åĢRΊįĮ=W׌•‹1īÆ,­ļ˜Äzó–»'‹īu+Ä@¶„ €ŲśR#™=§ŠžŹĘöĘ07¾7©§Ö¹É®n%ž£ęSģ½Z‹&Ė”?бaį”u?ČņP“ƒŌ䕥é–p0–[Vßåõ$gŠŅ(†VԵԟ1ió˜Ę>b½¾•F;»«‡ gwŚHē5qˆ6śŽŌ.n ±œ§ÕėŅfÓ¼©‘C|øēŒ–€~„ö£ö†–E~p ļ\é×ļDŃŚ§˜ų!x=½sČønz%„3ÜŪÆ™Ėæ¾q\¼6Ņ›»…Ś”UŹŽœŠ˜łš\ĢÖuilķŲ,ya†ÅsĆQ’źx~Šåķ¦˜ī\F³ˆ£F„ Œ._Ā­„āÜ[¾Ę8^¾¢‹ĢŽNŗ7lŸŌU4Fߌsō§ț: 6ż•×Ė@„ü„³÷«¹ƒf7˜Žqļ[œļā;=—ļ‘”®Ü•÷śÖ’‰ōhģ­ZD|×ō5ƒÜŽ›čyÄQĒuo&$eO•[kÖ7[_uģ+Ÿ'øw,~nĆSŹ#t\‡žUŲčZ4«°P˜nsŠ}kZfR‰·ā oH‰#Ńęc¹’2«ž®+&·•¼G¶O޼edMo ȰjšGö?kwåTQ]÷‰ōص5iY!ŠlgäPöĄŖēDž] ©Žiįv(l+b©ßȶeŽŠķÉŪżģVMŒŸĀś‚Ė8YK_7 u##ßҽÖGÓb»ó.3vģ“ĢĪn]NŚüÜ$:œ{cĻōĒjå5[ū ‹ķøB8ÅļHFU×ŲīRCc zā°u]:ɜy*#ĄĒށ4ū93'–¼M`źM:Ż&V'hc²–Ići€dČ'­-j=­lŖąĀ„.ø¤öF8O‡ķ’†#Üp§™¬jm-¹kdEFūĒ'jż+ćŒŽY7ŖČĆ v­d]ÆĖēœõéA©ėž±°ūM;,ŗ€rķ»Tģz<6v3Ćq8 Åߎ0O„Rc¹ęö^/w½Õtø¬” Åqrµ¼>#Ōo®÷¹}½…üšÕ2%ŖÓu‹i® 6Sfl`ņ@®Ś+8Æē¶³£yƒ’8÷¦dŃĘų·ĆE„œvńĘ?“üĀą«dļļ\Ż’’gh÷&ą¬!ci1Ž“ŻųV-3Tµ€ī ¹Gr¤śŠÕÕÅæ‡ķP Ęģ œŠ=*¼““ńEō?hIŒ0’ėŽ¤ā©jśyŅQXDƷցž–ĆQæ’PŹ÷Ŗ7Œ+»ųm®ŽųR94{3-Ĥ²°å@G_óŽ“`‘Ći,Æõm+Y2ŚĮ±biazv­hö^čöWfK ¶HųܾŌ&9#" =bßC·ŠČįP„OÜĻSųVJ規öūLŽj‘¹Uq”ŖH“ϼWcqkuqu, l9Ż&īA÷Æ4Ō4$ŌaÕw~n†“QŠĪH£įodŻ–kuŸsgĖģ <×£i\±kS¼ń4p‡Ź©ū z —aI.‡_«Agym%ŗ7ΤŹzzTdq+y)ņäē$ōØ.µ93· „6N;מź‚Y^GRWvN:zŹJĘŌ÷9­Vņą™4łŻ¬Š“Óšę™öM;OŠI…ͤGtg3X~3ÕnWRµø‘åKk5>Oe$’Ÿ­D—A“G}§źĖ«uwę]Č4ĮœóųW«č«CŹ?ŗŪŪ±ō¬\˜M ö·ØZG%Į³³ČVõn}{ ōĖė _ čŅj·ŠĀ„KHü„.m,$yеē{µ;)BTc†Zó 뉬‹“«Ćżå;9ÆåZGcH½ÆHńğѵ°J>WĆ“Yæ¼kyāV…“ʚ֦+e·TŻ“æ¾GNō8Ž3īq6ZqѼ:5h.īēÖK6vŽæCį9,o|KcŖėw0B[÷…‰RGSųÖF±G³ų§Äzm·Ÿ%œķC )ē}ė†šTšĻāyõėõP¾CåĘ\Tø¾ō†ąuž‚÷SŌ5Ԛ5»ÜY!0ą¶:tÖx>]oUÓnī¼CdšDĪQ»åść‘Œt¬Z±›3µMO¶Ó¢Ņ$½Š{ĀÅ؁īkē;"×ƞ#Ōa½–c,ęEbū€· Ŗ%Ü÷æßXFs­TķŻŽ+°×sבłN”J6>JńŸ…`Õu ńŁįdżį (Ējņķn7Šld]?s«§ļ5Ü@ĻJ†É”»xCÅs›ķe…RĻĢŪäĮP3Ę»;m_L¶øŌtY/¬~Łx€|ĒvŽ’/§JFrO”å:Ģ© Ļ<Q°›fõõÅd‹ŌŌą·lM·’­Ś„HfĖk֚}­¾”‘[“Y²2d’{Ö¼ņxŅ[ųī˜—…wn³fš`6ęÓN–Yw6wS…Q]'ƒ¼0­ķ¢=ŹĒ/ĢA–Ļ’Ŗ”ö5‹,kɇ µŅ-£prт\öǶ+Ģ<]ćŲ^>ƒq4ō„‡å}¾µ‰¬]ˆü:.ļŻć» w4€,,Ü'üžµ·qᇾ@öE¹DU;›éZSŠĖį«-MŌ/5·˜³Ŗ€ńŲJą5 Aä“žĪ±·1£ƒČ­Ź_ųG.±įßڹ³¼Õ4q6Ł ‘° žæ1ś×»üXŅģõ‹K;»]ĀŽśŽ`©ĖĪy>¾ō Hó$ńv«§A—kx¶ŃoĮLuÆFŗńUŽ›įhỹdÕ¤;b Ą÷‡ćS(˜øjlńVƒoŠĻuyœ¹9ČķĒįV>xjęĆAÕīµ!kż óy†'ĻȀcūąVV%GKœī·qē^„¼š|ŃBøóZŽš*Zµä±‡¹ūL€,Ddē'üśŅ5‹G„čzM–™vśž£<Y[+;ą”ļųTš'ÄOx¶ņkhn-•ą%÷Čreē€éœQuGBŠą|uąm3\ń5Ɗ Ó-ą’6żŽŌŪ¹Oń›\ųo©źVö—ŃźŁķ¼D9ō­”®g*š•įÆxcĆZ’Lf¼¼óšes­ƒ…Óą?uļGg” °Žńm$•ŻāNc$qŌÕ£ Āē€ųĆŗ’ŽüQ3ŚŽÉl!˜K3ɟި9ŪĻCÅ}kk¦‹č®o/ŽĪЬRŹ\ĖÜzqQ4L ŃÄxÆĒŽ}FßIŠõtŌÆ_>t‰ŹFsŸzÕšv‰ā-GWŠ–;†“F4’¹čW>£ņ¬Xć”čųßDŅüM}¤Ū^‡\˜¦mą²§~;Vī•©é7ZuņŪ:\\HJ*ē‘ĻZ 7×ō™īZ?²äqņø\ćėZ>‚ o¤ŠųŽD!Ÿ™ ϵo”œŽwć‚ Ņ<'¬j–ó#ÅlŲW ņ0é@{×˟¼#“łtų"q< Ķ‘…ÆZc­üįżKxcѬāF‹I&ÜaךõÉēҧŽĖɾū=Čϟęzc½’gĻ^2ńևqo}„\ ē˜–B1ęö}«Ąu­ė“GåŹŚ}±l3°8ō’Nꊚ x‡N¶±Ņ¤IY'Uvžń澫ųyuįŸč1ųzŹnijĢG,ŹGŻqėžōĮ®ˆńüL×4ĶGT•mŒĀRŁc³žŲÆXš óEįmJļ\OØ“K(ÜøTU?ŠŠĢ¹Š¾šü®­wqØ,WĶ’" ņČ3€¾+Ē~!h>%ÄZT6:{]h$„”&s¼žøō¬ęśĀGWqąfŪHi죰DAąéSx+BÖīo–ĮcŽyIP¼`’2Oµ@å=ŽķķD· z°} -‹œķ’Õ_4źŚģ†±}§ŲĮåÅ*¬kh™s6ZҶ[Ź]"‰n7¾+KH±æ»¹|ąĘd=ų֘ŌÜ×ŗŅ-61bąšAČZµš4·³É3]¬0‚O§åRį©JŸs¬’„cS:wŲ§•>ĪFn:šļi6ŚĻęM ]䂀cŽ“|¶BŌfkig'*ƒ'iū¾•«§ųŗ'•XŸNaƒÅgc9&ĪŚūĒ-¤éĻØįY±ņ ņĒÓWµ Fr÷zm3Š ł”“ŌÓQ‹3pg¢x“Ɔ×Ć:ŽÆæŚBķ‚>óś^«&½>™Ō>bĒu@ č+R#OR¶©ŻAr²'óœakÖ4¹ļ¬.ķ[…ĘYĻjOC¢1Šõ«’M­ŚZ¬BNåDPŖ¹ėÅqŚĒˆtķ6Ż,ž{D™PŖĒžGŠ~5—7DS1“ ‹e±»¼’x^iņ“G­p>+¼{ƚŚ6£ØcĘhnę/¹ęŚ$ŁÜ,¤C!? ÷Ʀ“ŪD¾Šąž[‰!ø „tõTÅŹ®P“šBŻL·Ņ¢KqæōGÄŗ®š.C+(?8\n­ ’±ēžń֛ā_³YYĖL­¬r¾·“Ń­dÓ¦ÖÆ/v\¤"Č接zę“v-ŲņŪ’ųŽņ³¼yģ-C‘gå>üW•ėŽ*³ÓwYͶ;‚Ē ½I„Ή8 Ū+»ł”Ō@–dNĒ„t:–dU·… ‘ žwąąY¹\™+ž—a8Óķn.§F‘²0€šŲö®ĻGÕ­nmL°6.6ī\㯔¬ÜLš±ĢŚßk¶­x÷ZÄŃm"0Fõ®»Pљf“šGūC¢äqĶU‡s—:6©«»Łé³:eNā£%}ė€ńWĆŁ-“å %ŻõÖ›3ÉśVŠ(čŒQēŚ-Œś+2Kå)ĘqĄ×[o®Ma<~ė cE?f9DßmRŚźĀąŪ­ĖŻÉć5ćPź×6:€r$|Ęło\ŃJg©\ųšŻ“ŪņęP_$`ę¼~ŪK½ÖÆõ9ŵÕĪ×óYĀäʬŅ2Šõæ†ŗĘ“ī„g¬Ś\ZZ„ņā~+’Qž5éĮ ³¹µ’ĪŽI›k:”ūµc)5¹w±ķž·»±µIŁwĀä°22EqŚæ†RŚatmŃd‘‹±SžiE™9jl&—¤Ikb×#ÉøĮ-捾‡ņƗ?h ōA¤˜.m”Ü1>Tgq+Ž ō’ėVę©Ųń_éWŚĘ§V‘»Mę*åĒ?Zū"H Ōķ’Ęņā8nb‰P~ö1A\ŻĻ%ń‡.„šÅjnŒ9cīŸS^‰ ų^ĻH·Óį\Ü^Ė÷¾\4HīōĶū:žāź”f |ĢØŹöžµŹx§Ā­©Ē=ņ$‰oždī¤÷ %w­xut=#O'{‡2|źÜ@éł×M¦Ų­½‚ÜŹp^2ŪYNFzPg$Œų$ŸMžėķRGo'„M.ŁŹ›TØŻš‰KKŹĖB¶”¤\‰­Ķp ’nęµļīģ/.šLr«®{P:ͳKšZVœ©,ÖźS÷Żē5§s„ż‘ÜČń}‰Č*Ŗ˜bŻĪ})Fœ©h‚<”pŅkš•›i2Ū†ó&wŁĆü c½k‰ązÕ“—&B…‚}Ń·‚+Ó“ė]Ac ėĘŻą¹«-G¹ķ:—€-tß Y¼ņ„Ö¬é™S¬CńÆ3šģ¾Ō4`āMŁ'”¢ĀmXķ'×tųn¬ą³–#+¹C„'x>•ė:MͶi++[‹•;pŲ$ –ģe)v<Ī=:×Kæi.Ź-Üņ~µ§©ŽŲ²F`‘×zŽ2ß­.byµ¹Å]X«ŹfÉ%‰Ę=>•©ż“ea§ZšĀȹVŻŽF:~µõ¹¢hĶšż®xķzŠ(óT¦\ćĖØY'#ē×z ֟{46PG?Ļ‚Pżļ|ŌnŹęčwš]ZCזŽšŻūWg¦Oű(Ę&Ézō —Œä5Éo fņāó[ūŁąņk“©Ž]Ü%ŌĆbžČŚ>”ć.ƒK”Ÿ.©ŻOµćÜ‘ĻJõ=7ĄzŒė SŖÄr>ėqҵ¹§³E?|=—L“¶¼ ‚v³śW›ŚŁŁĒ«ø‘d•A^9ŻķI„©#Üü?<Ö˾5"åwäjƉµ1±–Ī,ĒPœmĻģĪśģŪi# nF@&øEŌ¦žéa€¤kĪy늸ŹÄZŚ”eŌŚŅēŹ&B[,ÅGA]ę—ÄvÆ …Ü3ĻSõ¢Rģ>m,Ž’śŅī`—{. ¼`päu¬³Ø[ZyĶ<ę•جe.ÄŲĄ»ń2Ńnmµ …b(—XČä9õ×ė…5_ķk`Ł]žly?Ćé\ӏSF΁R;¤Œ ‰ˆĪ×+łŗ’‚ė~Å/ć/铇…ķ¤Ē*ŪjÖŃGĘģą¶LćÆ`}ź"ģīd!÷-Ŗh—÷:Įl‰;F3Ÿ—±®æĆŚ­üśž˜&½Ü‚u)ąœžuŽ"ĢŽš¾‡č6‘c„“QYĒo”®9 Ū±Ē×+ā/†ŁŻøŚK†B9Č9ĻBkē§ZĻSf™™e­ [«ZéAŻ0Z(ŲcÆbq_H|?Õ’µm ¼M‘œH„ō>ÕۃÆļjp×Ā­O@¾Ņ^B—01Mƒgńæį˘ķ®]CŌj0ČO q_MJZ\ńźS±‡¬čšA|÷vcØŽ„øSģ+6ŚgY6D„öœ7=+­3…–叔+“ž?Š£Ō °d>SҁéÓż™ņļ(Kzļ °>bbI 9“ 3.B‘ ’B®Å‰Zf±kq„Y&ØŽĀ’8÷¦[™µ¦xƒūRĶ"»“|1©„śóÖ¹‹½;Ė×0  ķĮn¢·H‡ęoYhvQ¬Ŗ…?(­M2ņ8'pBØĘr8WŠüE¦GnWOøžte\ķN‡ą{ńłÆ.cs3Iµ¾ažN{PŻ…Ė­ĻUÓō³]žJ.qžAĒzš-F<«TmŒ[ž9jQ)Ųā仿¼Õd…„ ņ¾Yż)śÅ¦§`ŖŚdˆnc>aĆōĮę™<Ę.”.ÆāDŁ–[·;ä;ŽAõ>µčZ[>mkzŠoŠašÜSŲNĒ}į-9g³@›J qЊč¼kį]ēG±¾¾’(gĆ,hĒsńŌJ/ŠĻ©āĮ.#W“·1Ū£ó §«Śļ·¶šĖĶ{‘ž°Š{RĢ^\O%Ķ“LĄvœŒqėZĪ’»™Ye^€[Eź2ī( Ģo$’s0@Ą÷Ķ7EøÓņ3< ć„PCcØńˆē²ƒ0„P‹Œ\tŽ%ūd¬Žcw^2~õL¤t¢­¶ÄsÓsŒŌq-½ŌW*<£‚ÓĮ÷¬E!÷ķssjR'L‘éXqŚoFHń2F:PrŌ:;æÜéQr~č<ėU4UžD™Ļ$šė[F&#d6ņÄ™œŒęŗ›mLCm G#ęĮŖß@a—LFYXląW9{rF »NķAM§ˆ5[–Óē‘BČ>é9Īq\ļ…„æ#.¬»ˆm§µTcs³³ńĘ“’iWQ剉GŒ`¶@ąśōżkŹ4Ūyµ{„…X¤{ŗfµQ3=‡N“†ŅŠĒxå ’­[¾Ó­–Ų\%`¤ōéD¢4nXéś\¶VŪC,¬£;Ž9¬īŗE¼óKgŅ&J“œŽ+nŽßđߔ²t- ‡$śzbŖź¬–[!Ł‘ĒŗŅ<ŽļSšæz%É Ęq].›r׈²9gL`żkh³¶ō,As$WfÖ'ˆ€rG„H·· tŗuöŖ4Œl]Õ­šC*„ĻėW“YR(„råĀŽxčknPėéĘŖ a g˜tÆ,‰ÓY6‰ ø(ą õ¢;ˆōų4[yŠĶ(rä)ÅléŗMÜW "† Ēū¢µh›V²ŽÕ ™\ĘŪsøž rkc=ŹęVžĻv2"°qč\YsWŗ“²“Š0V$8\ž7zāļ4mKQÓī#8 ž=(Q)ĖC½Ń%šĒH† ›l̃+ŌüA«YŻ%šĆu5”ć́ž¹­U3;ėsPø ,`>1ģĘŗ? @š-—Ż‹9Ēš©©”GĢĶj;É Ś€Ė÷ļNŅ¢ū1š™™Ē„M…Ģy׋ŽūVŗšŚŹŲĒó*Äį‡zé¼5įH8|Ⱳ౲“Ī–žśŹŁdo,Ån‹Ę:}MPҵ}āģĀ×1“²F‘ŠĶķaņŌÆŸ>Ųī`aČÅR“öĶf.0 m& V9»ĘK=ŌlB śą{V]¶»ŗP-ęr ąŽŌ Döż=[S°°’Ź# Ņ)bĖĪ=ĶVÖīo¬“j–QƒåĮ „‹’…m0&Ø5 É+Iå•$Ä“ųd×<‹iÆa„ļé÷‡ų€źh/Ł¢_Ļ.‘5ŽŸd‘ĖpTT”c4šgˆœ–ł2Žćw\šAŹŽK\ׯ/­ć“™˜H­»9äc^™įmJęANņĖC¼Ōņ±”“č®-ļ"»•fčb®sÜÕ½cM¶½‘Ļœ7rŸ-…}NpXÉ„Iisk(mŒ ©ī= X»ń]ÕÄÓ[<1Ū.røéPą\R8[›ÉćœĻ'ĪŪæ„WOiāėˆŌ tŁ0ĮćŽ¢ZĘ b֒·:ójņ½­°9ĒlW \_éWzMói’Į3Ū®[ĻjčiČĻ=°ÓgŌ/d™˜“jŻq€ {'†ķ­-ķ.Ku‘ß §<©õQW!čQŌ<#ŖÜj¢Ī)ŒyPÄČ3åƒėYZŒqų{x2£Læ*‘ÜÖĘRf,ÕØä’E[–'äī5c®M%ón>R/šćČ=O±·¾TŖŹ¬3ó ‹ÅzE£x^īԈŽV`ˆ`ƾ}*®-G|šĻ‡­uõO-µėZįü†ū²cÓ5ÖxßÅPOa~šE„¼(ģĮvŒ„ąb³“čTocĆģ.o܀Š}ćķ^„4kk(Ÿ=ÅŪ )ŪÖ”jĒĢö9{.ŽŪ¦Rďālóõ­’ Gk`u=ÖK¦PiéĻSųf¶Œng)XÉųƒāäX`ƒG_2åQC—½q6z½üŗd_/ĪÄØ=ŁJ6Øs†Ö[{…d*„°ČOŠ×”YZ¼6®ņ ;†A=Ŗ,ĢIģ^ö9 T{ō­½ ŹŽŚÕd6ć*§' 2 ŗŒZ}œé?˜K¾? ĒŌ5’. !±A&[ƒŠƒWÕõż„Ģ``:¼~f£š»•³ŗŠdåĪ9ō«‹±2E=WD²š’Ņ)c»VĀ•<G…“ūˆo“ķQå3ÉĒj¾dQōTzm„B×QµH¾įŻ~ļįY"Ō"‚ÓNŁøżęĒO°”¬W+<śėTŚÖy sóŽÕŒ¶±ŹĢćs1ᱜV=SGŌ-#H¦HŁd ƒ“Į>Ž•HŲ[Cæ““Ķørͳ'å9ļ@ćsˆń>‹Øź6³^Ū[Ü\K¤c$ę‹=ģŚtR]¢ÄW†‚j’)ĮœÄžC\¹|„}£'„n[ŚEnģģX«™ąŃ$TS[™7±Å ŌvšĀÓ9ȓ­sŃXŸ5ŁŌć‘ŠŌ“&=a–ĘtxŻĀägŅ»Ż:Qré¹÷JÚŽ;J'”iŚRŪ½ä2ąēø#ė]‹5Ė{}&K›”!X…ČÅe%©“$Ó|ko+“To Œė4ÆŲų‡OÕ.Yā…¢Šž§éRj‘ęŽ!‹EX’ {Ֆś< ` ‚ž‡5‰mÄF¼6 ,z ’e‡G‚8p8>¬Õ‹g©C£Ś«Ż3Ė#6śP;z¹mypėoęģ ½>¦¦½Ō$€­¼ūŽIĒz`Élµœ3ć=ż*“ŗ[&„y©ł-ĢįAČ8ĻON¦›Q•ŽCÄ7Z„“āŅxā| q֙¶öŹ‘UNpUńÅe(§są‹“uÜļ'^i¶×/i±ŲÉĶO īZ…’_4Ķ!HŽ®ūDšę™¹n O?j†åUʐ®twŸcÜTĊ3Ó<× ©£4į­ä!ĮēoCQ&)Ū;¦¢«,fE#9ķ]’‹ÓB“–į^D ~lŠpĪļu®Š]Ż$rw.įĄśzVž¬Į(ŽYssŠV¤J(ģ­fā(²}ęŪԚī·ö|Ēi’b vö ČņĘŌÆ'æmė"B@Čō5¹q„Ėz‹pŖĪ«Œ{VnM2”nGØX_46óC “ycb`ćoµnĄd—DžÓTĢyły#Q•ĮĮŸ;Ü’jŪĶzQ̱naĘGā¹Č//§“ģė!VŒrj‰;Ż ļoļ`ŠHäż×#«oV³z”•`¤RƂ(ÖÖč®ZYB č=kAc² ‰QŁŽ3ךĒ9®J`ՓNhŃ¢VŚŲėœö#µw–:l2Ū†’$c0Ī(Gāż>žw@<ónˆ@AРᄒŵhČģ7EbćcH¶XÓōė“t»a•÷w^k½Óü-!…ÅÓ7œŁ(‚•H`»Ó4(.dŌ%Kye;3u#µz7†omõ >O*Våv¶UæJEņčfÜCkc«Č¶ŃC4ŁńÓē4Ķ[EÓ„77†$qå–ŚxÕst$ņū ć²¼y8^Tćmzž‡ za½lC.>PO$ҹHćõTE$—2)Ͻr×ÓI©&Ų.³Œżßzq•ŒAš¶Ÿ5¬‘4‹-ÖĄD…° }+CW¶æ¶µFŌHŅØł‡*khˆ§”Ų"H²Eœ°Z¹āŻkZ‰’Žł Ž¤ˆ261üĘ“P|ąÉ“kÉ䗬ēųsĘ:¼Ņō{Āśt5[˜Ā,Ž>]¹ļķœ~U(Üłžś=1 ‹O¼Š~Tē9śW}”źrŲɍs'–Sn}© D•¾!\u_µXŚ[JØŃƱĻ×>"-§‹õ+‘e Ųȅ æzį@ä  \ČśC‚ŅŽņņĀ~Ņ$É·mu_R+§±ŸOŠōiµØm€Ž<§,9č}sXɶ|”ńkYšėÄöš_†¶@D`± qÓ=ūõė>d’™¼’-TŁ©I> x®ĆEš^±„FńÉ­\«%øī§ßn•šž©ÆźzmÜi Ł CoFŪ¹‡«Xù¼U÷:=Ē_<{«ézWwÖšŪFŅeeĘPS_IųwÅ>% ®›s©„¾¢U3–Ī3łPŅEū%cÓü®ėVzŗĶ­Gż¬’œ“c…Čé×ėSė: óė·=.£$±UĖŲōŖL™FÅmVʇöwm£éšY¾š,JȔЖõō?į_$kśF±6Ÿā=䶊č’ū\ąŸQųS łęAouöV…ŪŽŃƒŸZś“Wų“to x;Cš‘šĘ[LĖ{u€Y›ū§ŪčqīLccēƺ†‘ā+ķJ{}R+ƙ—ębĒzWѾ µÕ•GN𿇭„Ś‚ŁÄ—]•‰ś{ęŗ£±¤V‡¾°³ŌäŌŚ1®<„Üs“^§į&ŅH§xā‰ˆłGOZ±W,k¾‚ 2iŁ”H¢`K€Ą’ś«7Ā~’„›Ģ}6ā×ģ°1nWš¬łĄõ{&ĒBšgˆo~Ļö[hJĄmgļ×§ł«ćėmPŌVóZ³ŽŚóĮ{ żÜžU¤]ĆsŸ“ø“K„FDq·„Cos¶MśćĀǤXéÖ¾ ¶1BŅQó1ooƾµšGĀ«ū-&Ś=FĢŚŻybBĻŚ3ÉģqR„ÜvŠńĻ.ƒĀļg¢Ś“חÆĖģ?"Šģ>h:GŠ<9¬j7v?oqIó;··4܅cĶüY£é:č¶bc,r*£ J„µqB²óŲąÕFW®»Ō­"ņßQ-āa1[ƹ5ęć&0YJa€’ćؖ? źsÜkš…7+ >÷'ė_JxĒRµŃ¬ąŁwcŖNš™c“&#īœwć@”O8šæŠ58µkfŽ$”m|ąü¾‚·»āøõ śd;aRvžH8¬ŻCÅ÷ś…‹iā5’{ūÓåer’YėŪQ-„Y?SĘk ĘƒŲ]@T¾00yäūÕ{0q$šżŽ½u*%“Ņ'ÉĘ=E{ާØ_[Ēng’9Õ üqNQŅĆäv9kķOū-ą|¶ģćē&ÆhݽķĢįVn§ÜVv “z‰¤ņn“، Čv®CžĘ¹kŃųe“Mš ŹI¹”c$z¾CX«²Ģž Ņ5,BńŪ¹U܄ēw½a]hŠ4“ÜŪ¤“B¼³ć„ n'WįM6Ö+«iµ‚Õ˜|݂צÜų“Dˆ^Ziöö×,YR2_O<ŸŹˆÅõ*3čĻų®_j6réŚls۲ʻgŹWøüyÆ>Ó{õhč~Ł ¬mˆ‹®ü¶:ć„s6”Zy#]d36: õ!±Äätŗ4’ż³Č`²“÷pp I«Ķö«÷™B›qZ(±s *C$.ρŽpEsW¶ķl†iÖL'žqH.WŽß6ÓFķ·pĪ{Šėõ‹µæµ6³€-”ŖCķZSŲg'”é„Ė‹YՉ'×=«„óŽŚ·„'œĒågtżkKggõœv±E, “˜ q÷Mcj:ŻŪæŲåDł‡AŌ{ŠBm³="xÅĖ\!ó×äL1!‡®+›¶Ņęß9œ¬r³īČZ‰H®SÕ|3¬Amö½ąĄ²KdbŲ;‡Ö Õl%†9ē³C5Ź®NĆÉö§9&q’Ćp‘µś°3‡<ƒ]mŽ›}5ŸŚī”Łæ““Ö™<¤WjxzęŽHdićÉĆp? ‡ū^(4čMn4ĻPе“MT¶A·–Ę0I¬ŻSP`ęK¹˜«īƒŚ³p+•ĢŃhĘAēšč¼=`u»e ¦E #ē/x‹Ć¶†"ŽXŒä@ą^[«iī±Ć±ŠÖLœ±9}+Ry®tqévW:]²ķČƒ¶ļzāŽ…ż‡#Ģ$łŒJ®8QB@­b޶ŗÅå‘ŠŽŁ&‘¤³_jäntżBkęÄČ?yH"†»›-‹‹sr ¶<½¼VåµÕ…źJ..››‡ s’묄IžÄ±Ś^\Ģ#°ŠI!Č€ąU›ķ+ģhRuxĶ%sĶq*\gwōØąMQΚŻmH~6œī_zŁ#;µø—É™Y˜“ŠU± »ļ9B݇­0±5Ó^%™f8čM`iš…Åģ·K‡9ĘqŚ€:EŅ ’Ā[uPÅĮź:{V&‰¤Ė¢“S*IłE\D*w:MCĆÖ^!€£’źä ņ“ė/Ūi\]XDZę8÷1fä挵SEŖjĒ75Ój¤[ȑį[k(éÖ½GDŠÖāĖĶ»‘āux¢R%E„Ņ.-.RYdŌ³#ż*[Ėę– ­\/’źcaŻ« ó["×EĀĄ‚Ś >Lv=Šż”Ńē\ÆæzQßQ“YÕ4Ų.¦‰Ö"‰{TtŪ8ąi”b,õķšŁ3)hiMi¦Y»ŹŃ§˜9nÄ×;fĀśķ’1ŗ" Ör‘Q•˲ČŃ·*qŠ}jķ¤²G7ĖŽ1PYĢ6ØŠĶ.’ŻsÓ=jfóõøŽÜG&>S×v)–£”»¢ė7—7óA5¬ˆˆFIŸ„{D•²Ł¤J‘Ērķ…ćœU) Ąē|Maq5ŠG#ŻĆ §nz×Aį}KJÓ4Į¦j°˜2±89ǽ+źTbbų³GÓnō’µŁĪÆ2¾ļ-GAXŚTbKXķœĪIZøČrGI-¬PĄÜ|¹•Ÿqg ÕØq gNˆ:։ŲÄǶšō•Ģ3ț䋠'€k„:x¶É ©ģJ‰JĄT7ÖńOū逌ާ±Ŗņx“M±‘äe~ Ž{Ö#±}§Šę¹E“žÖāN `p3éĶrśÆŒ¬t‹™¬°±7;†r1õ­c+ˆ±©<z$w|Čnó®{CƒM²WJČŪHˆŠŃ(±¦XÖ4«‰m”¾PfFł@÷ ĘI¦°hmē łĒجŚ4оēaioˆ›øÕāqšĮ}BŅEŻüwRæVdĮ?‘¤m‘Ēi^(ń]ō±ÅßałrāÉčGҽĄoyć+ŲšŌ“Ø…£”ąaŌS±k{åk «Mæ^@Į=+G[ųWį»éįÕą³ŁØĀ§c3œzŌÉŲµ lx<ž š÷Ä2Ž^iīÖ°ü»ŲąūłVV§į"ÜŽß:ķ—sč;P¤'±ēĖ”Åw;ķ ,{×{kØŪéz]„“\#ü¬P{„3)-.Ź÷QÅ7Ś5K…ņŃ$ žĻ>ݭ݃¼¦@ĻZ®S•¾§2÷Ó+“sE»ƒČ¬iģ纐˜ž÷Uu¤Ń­9k©«€æi¶ŽåÅæń7‘ZĒĆZV›s6§låČŚÅŗōéYN'm1—zž—ØYżŒ¢Cr ( Œ„qnnm„{H£†FÉĄźk3SÖ“[č-ģ»ĘŸ3øŽr+lx†Ņ;˜-¢’d ¾N ĻzØ»Ō‰©¦|PŅ4Ɲ2ļͼ—_™YAĘ3łW’xßT±Ō¼m®›[’l^mń!`ćé[ī6m£ŹŠ¬ÖńļPÜ÷Ķtŗ/‡Śswy$,ß)?2š)Ų‡”©e®[Ų[ŗł-ę©#®2*ęó¬iK}ÄY#tdü†B‘^5²WįoŚéł9Ė{ ĶšōßmÓÆōŁ6=ćņ˜xńlVŃj1ÜČŃŪJT²|ĄUļéŃj:bkdø·\ …' Ļj„ŲŌš¬§Šģóņ÷@­ėˆn”N‹ņē R=©ŁÓ“ųŚŃ˜F‡qļ\ÕŪ -*¤óéHĪhȹø”#J‘<½°£©ö®ÆĀwvŠŽ$SBb8ūµ“LŪ=ĪŅqi½“Œō®KĖW—Nģ-ø¦Ź†ē‘ZhSXO:Äќøv=jõĻ ]&™—M9ĆqÉĒ­dĶ2ńŏ‡ļ|e=ŽvžeÖßÜēh$rp¾Łü…mi¾Ÿtcyīc· „bŚīMāķ ,-ķīÖåXĒŃćkČĢ×Z­Ā†¶}Šł^ "g®ųoG’ŹŹ{éš2Œ¤'±Årļgt.'yŻĻ;³ź=ŖćB_ķ y#xāĢgęėZ2kR„‚Ic‘"s·īći÷­ £øŁ“¦Ö$x§}£.ŠUĪOųW}£h©©BśOŲŪlj>cÉÅšÓr=cĮd„‹ ®Ų!€ÅyŹx.ķc[¹_ĢMųeßČü*QÆ20ntŁäŗ– hIN=ė°±ÖM…ŖŪĻGAü&³hÄĻmAf¾ L¤Hq€ ­Ū_Ż™K"ƒqž+>Aؗ§Ó-ģ“ł®$vóå‰«Ī!xõKÖ˜£ę$ŽÕI‹«e6åŠß÷JÜ.3šīō ŁEw‘1™Ū÷j¬ £kMš±ūL÷ņČūœąŠ}t÷¾kkX%iĒ…vžTŌH<óSķ®mȌ•°qŅÆæŠōż Xtż^T“D`¬XšI>µ.=Į3²Ō¢‚( ø“‘%”‡ŽøŻ[^‚9ŅŁē‹ĢdĮ”¹{]©EŚęXŹ3nžÖ£Ń<>«Ŗ]LTĄ!ömĮqLÆfv+§.byK÷½sYŗĆźWy!E Ļ  ™FĘ8‰÷¶Ęgf÷«QZܰŽ$ęBz3Af£›ų>Ų¬ę(ÉĻJöŻ>8o ˆFEŗ·ØÅ;½+CŅnķę·)ÓĖn9ۊņü0–W›TŠŚ!¬įCO_žµņ0<9as„źšérB÷22²FļCW5ĖKNŌą)„°ÅGAéE…sŠ×ōGRÕģąh—ģĢD°¶AŻ×pžh$įj£˜ÜäüKg~!„¹ņœškIÓī-ĢX¦2»c go֎F“čö‘¤šEꗱc5Ńų‚»“ÅÖ5 qœ ø+g1į¹#·¶¹·žoßĘAPG,k±Fŗ¤Æū“Ķn¶1CĆž#½Ōé,ōŁķć'bł‰ó7ҹ˘fńFæ}ŠD²¦Ų77p5%_”ē¾9ųc6ƒŖYŻG{g©ČČ <`ńĻŻ©b³h -¼®UOAŠćŠ“en‡•OmŖkŗÅŻŖ[\„Š@GĪkŃl|%g”Z\ßż‘’åŠ(m¹'šĪo”i[Rž­wm:H®ÅĄČÉlń^yā6óN»A‰<‚GŻĪCéPL¢Gš„„§†ļ^śU Ņ(!œüŁĒzŪŌ šm’HšŒwm›¹L*W ’ ×øÅį[wd·³U–@2''µ\­ójsšõ參4ą·mœ°PĖyÅz€ģ¬uxÆo47QnŲɑ»”=:śŌæ3hüCc§\^ŽźwšÄˆ™ŲW‚x·Ęˆŗlk¦¶āŒQ™O%{Z.kn‡šļĒŚ—©=Ɖoē¶Ógß'Ś,śdūń^éį«-7^Ņdń“pjģź”Ķž™1rœv·5­‚L÷¶ö;USž3ųUm. TĆ Ū-/\€­č RdIXÖŅ>ųÅwŚƒurŠ\C9øvmYżÕ?ˆ®›āŒ:=üCKÓ£µ³Ų „;€ c9ŖMž®ŚE6¤†ųVĮĮązÕ)tŪ9u&“°‘ą²”sĮē&±ŸsĢ®Õ<9©I§ĪŅL„AIo„tvžŸÄ:Ü!Łā“˜åX}qYJ%§ŲõķEµĶIÓģt{č+ HöH§¾@ö­.—§x^Śņķ®īµWT|Ŗü£#§×‘PW1į~Ņ'ńG‹ģl-ž)QՎ7ą·®M{­¹²šĪžmā-Ś#€Tćo>ŌŅ!ŹĒ'oršÕŌš®]ŸåIé\¤vQ-ÕŌbrĢĄćŚ“ŁXø“x~õåø3ģp9ļSčÖ_ŁŪķ¦žk‚ˆX–o›³°Ļ0ń¶³­Ēw b=ūHļvēō©äŠu.ęīVķ‘*lĘ=r*µ3åóu-!įšŹbs³ĮōĶyV«ŅA+Āä%XĮ¬Ģ¦ŒĖt“½X`–V²~ŻŽAü1Y:Ä1G}3#ł νF8¤ö šĪ+;[{€†9ņ3ņŽGҲ人Óū>Ymī0NʦTUĪkMń„gØC$ÖNÖźĒĢv<ńķ]=·ˆĘSjŁÜcs7Br£æؤjŁ_Ėcj֒F·‘ØĘü+J“‹NK§ŠŽ-³>÷łr3@IŲōO[3j“ĖwcZy'd›wnFŽßżzńƈ¾k Ų*;Ś“ŒWĖO»ß„-’Į‡°6ƒ6µ¬Z1žXš/ߨżŲź[ŪłÕIlą·»ŗ†,UŽŅ¼äJ}lQŌüJÓ Ō¾Ź7P%iSx—w`+«Ö¾!¾Ÿw!°¹[o1Yw©Ć‚}=*#I“Ōņm'Đ­Å֟©kS_]6 +ጹ=3łÓµżJŽ[kĖX ˜Ū2›rsZ™³Ćµæ­µńøi‰šŃ„:Ōš×€Ū\’÷ŹG6”xäšł§::>‚Ҿųi¼?nņųvŻÓORĶ:šŁėĻå\>¹Æ[ėFI§–}-#Ū–ą ģ=˜{CœŅõ]Äś&«`¶Ń–ˆ-gvG0ćJńū߯Ć;ŻiĒɜäm&łŃßü/Öõķ^Š=nÖWÓü¦ĻšŒ}ā?ҽĒŗ’Ł–7Ś–—nč̤ĒĮĪ(4y µ­ß‰`¶»ÖܼH»ä†Vłr9Ē\Vνgu©čöēJņķZ P*67ZIly™į?ų£^·š¶‰5֟‡Ä÷%ŲķĻLwĻ5ö[韹€éPhśÄx9mŁlsÄ>'Zźž+³‚Ņ '‹O²w¹M˜Ä®?•|²Šß_Ėo٤±ÄłÉ;‚ÜPK…ö>Īų«x^Mō÷”is"Iw5ÜÉ·|„ąF?*ļüYroŽIa¼‹Tø ‘§5œ×R}“<TŃf‹Q‡X–ÕĢį¼×už, s[ųņŪTŅžÕn%łpĮĪўGć\ņަЦq×Ó\Ém”ĶjX®7óµ;ŠŚŌuÉt?^[Cq\ČĆē?ĀzžÕtćܧ #Žš‡oīõ×ļ®Ę£g,€†É+ĻjśQk[ż¼ŲՈł„{×IŸ_ėÖpkö1»2I*Ę Æńß”ÆiьsŖ¼{ŪĘź‰˜óźqüS§ŪxNg»‚;o0ˆ“Źc@ī¾*ģłā ¼9&øm¤»™]ĶŗL`~×2…„ätś–­y©Åå歒Bvė\>± iŽ$Šö'²Žh¦Ä~a‘ßn:W\UbĻ%ų½ą]ĆHŅ?°ć’Īdl£<‚¼7CŃnuKøķQ8$’p;Ó:"}]š›įĆ\ėt–÷3¤k eALū×uūO|\Õü!kmšžĀž{ĖØÖgšŁ‰|`Ó"£—Q$ƒģģõmy¦hZ}I¢MåärĢÜśšś+į„^(šī©ŪD~Ém49€·i'ę'õ§ČQbßM½ŗ¾ū=ĀyūŪ©9?SVõ{k]7Qū*óšͤ ‘‚Čß2ąµiČks„šž‘Øi-s}3“6`’vÆ¾kÆóädšä”ó&¹ĒŽĒ­ŸaµbφµčōJ Ö¶K„L¬»—ž9‡ńB輖Vw7ϟ¹Ę1ņś ‹'cŃu+KkW†]ņMĘŽzz“[ˆPøæ“¶ŽIL ęČ@ą ‘Įü*”t¹œž§E÷Ū#2Ē,ŖxV©“¶¼Ię*#r@ér‘Ķ­Ūō= ĄČį9ÉĶQ¾‚ė}¼‹4ŹFĆÉ1sŠ–T]XŃ™ÆąIYŅ5żā„YšŪUµ¾³•!†M1Ž]I;øō¬/ŠÜēµ/ˆ÷VzĞ{q€øƒśV¶›ń=_6ķ{¾o®~N}{ÖŠz ÄŪńø¶ÖMž^ą…= ‘’źÆ ƒR—Äŗ®”k$rx€Rģ§ūéR3Œltö05©[+evفøwÆhųy"iśŠ\_%Õ¼l$ÄØaßœŅ”»•Wų“®Cāa׳²ˆŪō¶īµĖźmmqk «æš  ¹źMbämxŸŠnādKPÉ&Ģ©ĮūŽŲ®sĆ6Fāö ­ābUŹØ#éYŹ"”ŗI1³“¶ƒ ī‚ź6“ŚøŸėÉf~`f~‹šqV0™ēßiµšv¾YWĶū¼šėü9ā(“¹!™¤˜Ļæ—źzŠåbŅŅēG­ų§ķ`„ł‘½ČąW™ī5 RIlJ%§™¹ņĄ£°?…fä õxßĆ3^]ŲŚIq*D·šy'øćƒŽ¹?¼M}=Ų”fåBä…ĻJ®Arža¬k„…”±KpŃüĒåcŒ×; ޵wri#“Ėm8Éśš]ĀRHś‡ĆŚĶö„¤×ļÅāʬb'ī‚=kÄ|KńFKļÜ xvĮżÜLKqÉ­£Läs='IŌäm-/‘)rɌX:¦¤÷(^5p¬qĶSœżÅŲžtōómČ8:°ļ]…Žøė¢Įa •W‰G¦j ägĶŚ³Ļ¦ßŽ<w’LŁ~_;rz ͱ²Ōo$…¤y_œüÄÖéZŸGč6|ö¶V³ŻĮö—łYdćaŖŚ‡‡ķ4żx©[K«@ŁV€ÜPmbō>Ó¢½µŗŪÜn]Ź%yžuKÅŽƒZņ`ĻĢqņ ^h+DO„Će„B–RYF­ņ)ūŃć?Īŗ©tÉ$š$Y`ņüÖd9ĀūśPC‘ēśäśMŠŗ‚Ž@$‰I}Ć©>†øŸ źšXj…£ÓĶŌŹÄ ąąƒx¢ĀZ•¼Cā’\ź+n¦äYĒž«nNƞ•ÄĶ&©{4·ŗ£ÜĶp ūł'+#±š…®©wvŒ¾Ī±ßĮQĘ+Ū¬ķJĮ1qę)Pæ{”śP™–”bœiÆŹ~c…ü+£d“¶†Iu0Õ±Ę‹œźZŽ^XųÆČÓ4[7UB » 6Nj1šėūQį·}Cģä0fw?*ĻZ‡5±qhóÆÅ›©O¦#$؏‚C‘ė[>ÓŻī•²J2ąļDR4ŠFī§ą½3UÄā)yNļzIžŲXé“j²¬xˆ€ÓĶS‰t9oųMģķÖ xUa•S…^7sĻ?•Q—X[†–Y®B†čÆČÜ}ė ”Č–Ö9C}ö'¹FŸĢ™˜ąö#Ś©¦¢nnٚ<¶ŽHéėYŖaĪD–*0!½ P¤k“ –”.1ƒŒƒÖ–Ś9÷kmˆyköć*–9f mŲ1œõ®ā!¹tEjÄżØ4°ōŚ2{U9#V¶TĄ$V‘© ‡.ygh]ĄžƒėQ"Ė1—Hˆ¾‡Lw v5£[“’eŲņ tÆĢžQµ’+€?x„yēŠęƒhDōĻx‡Pš^± xŠĘbŚÅ…ģwvīņbHšĄ‡ÓŽ•ż—~Ą’“†•ńĆ:/‰4«‹ƒpš‰Æ wWHŸ”?DŃŁécöKĮ:«k"DŠex¤[r};Šōų­7 „sӍsø qčĆų.ģY'Ēæ…ßück’ ~“˜µd'`żv'ē_Ćę­lö‘µ­ŪIg~IM’®Ę%N ?LÕŲ•#Ņ~x¶]ōĻńnŒ™ó+ćŒēŒf½gĄ’o”¾½kÖŁ¹Žķ¼«üŻÓćāš·m4å©ōŃןū/Hæ3ł$’†;cØ«ć[Ō[O˜YĖ*åI]Ŗ Ī;f¼uWcv ü ā½\š„†žö×QkP>÷ŽĄįHī:ē[¢¬·jĄ±×Ńą¦xøŹ=†I"]¤f[u'cīŸZÖÓl¦iŠ4&Ӄ÷Æfœ&TģĪsX[”t-ģL‘².āqĮē¦jłŌŻm!RŃyü É>õŗ‘*6ЧcØ^¾¦-UX®Ü‰3Ą>•ŌčšśŽ©^Ż·Ł€"Lާ’­T÷*;^"šßöU«yPæŁŲį\Ž άÖī¤K“ :Ņ‹eJŻ 4I”[‘€Ģr bµo~Ɏ釚¹ĄŚÜ­mb%ŒXÜ1¶„[¦Ļ™€n†µ×SŠŚ ®mć ]²xüŠsV+C¬&£Ģ‘¤IŲ‘żkń$Ó%ÓÅhčĢx9갔G~‡?§Ė|ś„„Üš’ŃgŒ„{·†š;Äŗ¹øq$%‚š9¹ŖŠ¶„M”Æ|:’ß,J“Iœ’Zlś½Õ¶Æ#øäļųÕ©5[ķ¾Ue?V"¼‰„ڬ2­ĖÅo@QП󮝬‘Õ¦±,!3ž¼>:Ws}©ZŽčÖŅŗ@Ž£—©÷5|Ģēš<…ękh̹‘V20z~UŲAāϳyB4u;†JžzšµnAŁA®&§jń“+Ķ”ē+\6«i42:ŹĘC“Št­cąŒū ĶQę&&<…Ų=+Ŗ¼xä‰#“jJyć֛ÓcXlcišĢ ;Į¶Œr2OŅ“õ[kMbTtÉP1Œ÷¬Łw<Ļ]Ņ’ĢÜCg#ęNy¬ū-_²īmå‰ŻōX™INÆ>™9‡Ė Ē­mkwj«€Kc-Ę9ö ÄćķŃŪQ·ŪI'ØÆA»ūÖĶŖ`ÆyĒŌŠŲł™ĖÉc”eGeóƒŠV:5ŭݬ“«}œdū‘@ÓčĻ|Ń,“ų,!ŗŌŒOe(gµqz–Ÿ XŽMż-¤hī@Uź¹ē&‘kR­…Į‚F†PńŸZæ«Eö€F$|Žh"Ö9»}i“ÉPF;I`z“Ņŗ}\æ»Kød†"…9$rGzœöƤ¾č›L×õ]%­d•3łoĄvīqŽ„ĖMˆ»3©Ōm.mošX’…NHĻ9«–ŗ’‘,‰~›mŲ}åķX¶W1äž3Õåµµ¾ø·gŲ„Å|ć®k:„ż°µ†ĄæļyōŅ39ķ;W—GhRb'kdz×W§Dŗü’¶ģ3|Ŗŗ”zœ³—C±ÖtBŗE¼Nį£l«ƒŽ¼āņ7ÓķY”y׀¤öõ§&Īg-ion®Żƒ:#HÕØ§øł™%;ś ž•™¬V„Ūū¶–dŌäłŌ¤sō© ń-Äą’/5łŗ٤ĪŲhs’YµG1Bė»8NMzužsØA ßgrøČćš”Æ”·0ē‚{MѼR ‘W<;įŪ=zėP73 ¼C!#Żžu¬ e)«šś·“­.ņĻXŽ7`d°<‘޼V“3ź‘ʏēä°$rEoÉ”Œ„sŲ~Śj’iĆOŌ!@SęW Ė=kÕī`³ŠtéęsēĀÜŽ³nĢĶķ”󆄯Ś\ź P„„9c‘ÉŌéŚ¢ĒnD]¤ł@=æ ĀS!Ąź:ś[ź—‘Ęz8aŅŗßźPŪŽ„Ń1“Ż0yŚMgvZFĻ‹4_U)ieęGźAaėėüź×†4K»";-AŻ0¦L`šŅ1°Jå y®tč%›OEžEø\ć”5ęšŻĪ¦ŒČ‚ū¬‹Ó=ńT`üĪ“Ćśl6š#ų¹ }kŅōŸ²C‚¬<¼åŽzPkÓu=KMŸFK$Yå˜cFG„|٬Ķ,WwŚ ĪxĘ+9-Mv8›ēŪ…žDm­Ē®k$ĄģøPDyąÕņ£žQ§£ŚąNåłĒ'ØĶv" ĀRŖGša±•ŖDm®,ä‡rųrz0ÆAÓd„ĮK‰¢|d„Qr£¹ĶėÆm Ä6ö0 ÜCX0DĶ;®ęr>čžé Ž›0B`Id*|ĘǵhXÜdˆU‹9ē¤Šs,„ņÜÜÅnģąńž*¾©o@ĢłŪ²qYJ$Ö·ņķ(_cć{VV¢ę$IYQŠ6žjM ަ/ j>%šÕ‰ –īŹĮˆ*Pć'ēVtfÕģ„:C\\Ī® ł¤|¤ʃkK*äģ*fsUlüX±k:<¶qÜIĻ™ī‡:ԹޫQŌ ³“k‹„0DpF1\ “CsšŽzõĶ4IÆ ¬ŽH–4ą ōėTtČ›Q•|·s•ĒaV„c)£Ž<1­Z¦‰wwuh’KŹ©fūæA^a«x“T7­ö°•@1ē”ĒéI²ć–oFQ“Ź“Ķ-Žŗ­R‹W²–Ņ5’цFXc‘éADž•„’åøG ŗž5Ō/‰ķlŽ=9iŒœ®[n3Ļ5C^×uy ņŒV1ĒÄO’Ŗ§µžŅ)öłq†E‰õ¦„dēö½ŻÄŚĘģŹÄ;ēŽ“äšģ—1ŪÜ»°ļ3ģj¹‘œ‹ihŖ²ĆDėŠĘŗŅī’§hW  ö¦åc4_Š@`±»U’}«„ūx³¹’DœÅ“ĻZ—PŻ"ų‚Éqw§Ig ģģ{Gr9Ŗ:²Hš“P\ØR<Ģ)ä{‹ŽĒ;o¦\yMx Å“a‡­qŚ“rK|å8})éķ„¶µµŽeĀ:'ašėü7­ŽµkHšN£§Ż.lŹLŻ{>•¬R°łYŅ]ų[J³C±&[‚3õ?JŽŠ^ 6Ķ"¼?0$ńŠ% Jå-¤„Ē:ml«isöų<“ 2t^z‹ź#Ąük’ •|¦h^H搀ź~ąõ5ĀĻ©}»Ģiŗ˜Ō6KećŻJßO¶Óg§ŠDA†v/„fźšĖė/öØ!HØ^:ōb‘ŃxOC›Qctb;wmŻŽ¤wč:§ˆ!Ņ,nm-mąó²I±óÆІģ2›Ä~Ī d(ūäU;H_,ŅōnvƒŌVjL‰-¶ÓJQ/—źøĶQŗ¹¾Š®N„o؋, .F1čj½”*Īu[Ļ]Åww“!}ŪHæ„zcXź·*[ÜNŽį±¹ ’!IĶ–’C<=­źp\¼Fęįv¹_˜šśÕī’[¶šlį½Jv¾@łIĒ4¹˜›G–j\išÄl$yD€)#ź}*AķūČü†rO Ŗęv2¤ŪĒ.§i$Š‘Å„äŒąV犵ū•¼…tøģōųx°›ŽæZoØÜß_\H%”Ķ»I=ėūĆdxn"‰Śč’N Tb ž…į[+©mKŻ8ޭ޽jjV¶ŹĘyłÄqŸēZEhgĶŲēm'k‹©¢½1µŖ°œ·s{kdń³"Ÿ…ŪŽ)‹–“’érj‚Ża`±Ø%½?ė®uX¼ŠįWÉŚC`óŠfrØxÜzߌµ涐n Ė’1ŽkŌ“-=-“ćę”=ķÓąœž?.Ā®öEz}śiéxY"H›åCžAõŖĀÕ-oĢ€> ć©śŌ¹÷5‚(’jAØ:GulUū5Č|I×ķ|9öhķLrŽŹ ˆƒß„cĪtĀ#¼7­é&ŹćQ»-% ¹‹Iō®·ÄšŸ†‡‚Vž;€ś¤­ņF0øėPõ/šČš=ņxÆfu'‚3]żÄŃŻ y!Ż:¾X‘ɬba)jy§Œ.n—T¾K[Ć.œøņ™“k9Ļ8®?O`īU#¤6Š÷śÕX’ŻĻŪ-Ą»BĻ zUæčOØj6Ö°M(ˆpUN:śšēŠSč6Ö¶‘ʧk…Ć)ē8¬dhb·wT— c± Ņ2Ōå.īn$€9ĒZ“Hņšy ¾…pčFęoŗi7cD±¦čė-±[ˆ¢%~{ źŁĶOĖܞ£ŚØŹKS"]&÷P²’cļ;†r+ȼSšśŹö “o5f1ķ,ƒõŖ™-“ą—Ņ~Ń ²É5³«Œŗ1É®vĻHš›ŻOØ„­øž!Žß»Ųąž¦†rSéOƒRx/ZŃueÓ“Ńq«Ē8Gøe6c¢śš÷ūiąkk$T »vßĻœ­ŠĢųėö‡š_‹¤ń“i§h—3i\?˜%=+Į<1āŸ|3×īeÓ­ĒŚ2K,ŊļĒ\W<ĪšiģvśŸÅŸxŠėĖøŅāÄČ^GīīļĘ+žA}soŁā’ž /š°ō¬yN”;Å? ¬ÖÉn¤6J®U@ Ąsƒķ^É źvvŗL–¶qŲXÅĘ1ø÷&©ĒBYę:čžóUKŲga¦Øā"3’;ę³dÕµ‹˜$‚;1ł˜R;óĮśP×C)v;›Eņ4é56»_„ēę5WžūĖhbŗʇļ7„Qń [Yd»Õ-!·r±/īŠõ*;~UĶh·ŗÖ¶öŅX[G Ü®ÜqŸ­;\ĆRųis=ķŽ©©¼rŽ Ż#FąÆ#œ×=¬Śė‘\iŗ^‰ipņÜ 4c%[±éD©³Jrčy«iž'šč»]N[öøó˜;K!ł[ŠzVŻ·ˆõ-rŹ=R¼¹½¶Qܜ(ö¬ÜMAšŁšösŅ–7DŒbø*ŻHżjÜ^<ÓµsT“6K&2,P¹ ē–öč?3B±†¤/įĖVM2ż4ķzõR1łN:ž"¼gCÕ#²ø7 1•–BX±ČvĻ'žÕ<Ćå:­7Ę ©_\ňŒ¬Fą\ž»­ÜYßĀ,®¢ŽPƒ(*łĒSż)sdųjÖęęńāŌa† y†El+½ūõÆ{m?Ć>,Ņ®ō¶»0ķ…Wd_}©`xĻ4å.ĄyWˆ<sj×z¬Śv•k(É Uvč=OŅø “?ZYź÷ņ_[µ°Vełf=ńŽ RGŠO«é“ŸUń5µŽ„„[5Šk„“sńیółŠbŃ^ßPcįDz²Šff?1# ōÅy¤¾Ö"Ļø°¶" `P\cŌńmBśįÆę7ZDąĀ yƒæ=Į“twÕ>Ī×Į#£`¤Kׯ­&Ķl}šwTæš•Ķ¶©k.ˉF欎œWæ|Wųµ¤xƒĆ¶š40Ē«†œ0śŸĘ²näø£óR‹Z±ūMŻę.gy‰Ą§o-Ē…ZŌ“MY,Zā‰7'##=zUø2Hµ=QU–’f_—$|ŠÕĀźz?Šnµ_“ҁ“s„÷W*6H©} źööćMžīā{ø‰wVbĢ™>õGUš¶„ 6rEłŖU¤ņŹEU‡c Ń¼5jmī.®?rŹ˃¹d@Ÿeŗæ›T¾H,#Aå!y½ĻjD§Ń×‡d¶ø²]jÖN 9Ķk~%µ¹æŻsp¦ćīrĆ#ށÜ×Óķ¼;m‘¬F~Ņ ūҳd+ėPkŸ¼=m+Ūč{õ)Č>cH˜ŲAē“śžu?‰5ßø†Ģ<Ņvį2±Æ|×ø|=ž’Nµk+ädulŖsĄļųš å±čšē‰|«;› <i XīūĒžq^GᶊēRHäh'¶PrŒæ+OēA•ŁÜ&„Ś;Cii„ø"M¢¹Ė»Q¦ÜÜHĒ|÷˜<ķ™ 6>ĻYšę™ŖŚ›č‘ŌĢŃ"«6rzRßXŽė×ņ •“NcƒŒž”HĪsG¬é°Iįż W²Óę@¼Œnć5ø.ģ¬,eĀGó ńŅ·„ŗüģĪҼ1.»w ķ­±ŗhä-°Æ9ĘAż+»…Æ4łVęš/š2Ļ|zÕ5}‘ę8šž„āT‚»1€ęWVMĮø­’ŲéžŃo«r •¬m;ķ9±ļPā‰f)ų™įMV {[Ki­®®„Ūc÷WĒjéü5ā }nÓĀ -“z‹¶ŲŠ6YĻ|U9 ōm>;;ˆ$Y&½F%8č½Įµó’!…īf‰¼·VŚ<µčŚCŗš÷ğųFI¢Yā72ptüĘMnų³LŃ|:¶ÓuµŽņs‰ls˜{׬Ļyf†ÖŽqDĻƒ)Tg”_Ż]GtM»4R’SƒŽœW}g©éčļ+Ü0•Ī É Ķg)ĶsŌü²ÜZ‹+Ėöƒ€Æ`šĪƒ ¦µnožąŲg'Č`7{sPfąUo jztŚŽ³6¢.#RĀ86aöēčp+˵˜®%ŌŅyPĘ™Żœ}ßjEĘ6Ųv£öQ¤ŽŻI ¬Ŗ0¼Zć’[Ūk#$LFčĮ?ZhØ£Īu›Ė«€ŠI#ŹŁĖ“Ō‘^‹ąOĖ} ldh\ˆ•ŹXŸOŅ·FŖ'«Eą=!/)¬Fg`ĮXąōĻsTo4cūJw–ÖQˆ!,~VĒ’XŃbÕ4ĪĘĘęŅ&Sr«, ćjøę¼æā?‰ģ-Æl4Ėyey żŚ«ģĒÖ³”L„Ķõ‰Eż“J‰³%rsOšī¾š„ā]”–\žģä †³fG-uŖ¾Æ©Ć~ˆ S8õė]ōÖĘU$}ƂĪx¤ę`[ƒHHdT{»y‚ß(ążjY¬ µµ’RŖźĶĄĘqŠw,ȹšµći_i¶“t¶-’Įx$óÖøé׊Z®óģķŚOĢ2&Ž_ĆZTq5ÅÅ» G*Q’‹ßśÖŌŅiŚó²8ó® ‘ƒ¾žÜÖö!ĘĒ_¤}šę`²4Ø½ŹŽ¦»k=&E–Ž+u͹ÉwaĶr€ėūu¶¹a!v;Hn3ļ^yā=zśd Æ*—»õ¬¤‡m >ńäš]ŪŪj1É!Lc†j÷ŻsÅ("‚ólŖ©—°”°ŸÓ?E#+&ų›T¾»ÖÆd3ī¶/”N„xē5ÅńxžĶ3+)ćiĮœRŲ脏TŅ5­FHŽåĆ»œ/'9ÆIŅ,m_N™’óc“†@N;ÕIt™bĘż,īć·² Ęķǚčģ–$ōĶvZä¦[i-ćó`•޼ē×4FGŠ 6ꌜēɎK©‹n%Žļē^Ūį«'FYŽĪ/“H<Ōfa‘@œ‘Ø_ß[@d»p²s–Œp£ÓžµĻ]jvWöŠ|žc׊bPŌ­ģāµI”VO“ić©õ®7Kšt½‚’q8rGQėIǹqz~"ÖÖ=>āŽŅÉ.J•ó"øķņQüŅ5ļŻź–Ś’Ieį»HŒ÷7 ¬„uė×­5 ”nrś—‰tė=[P“ĆL×6‘Jń£“Ķ‚}sš’Į—-šö•¬ĄÄŹēĖhRĄg­ölńĻŽ »µ›NŻmp%IY¶…Śƒ×ڰtBŗV†ÓOP\D„ŲŽŌÖē=HŲå`Ōµ=Nė2]ĢÄ1`°Ŗ=*M?GӛWWo.§ߜZÜę”m”é~ ŠāźŅ>ĀāHķŌ Ģ™]ź=MbX­Ų‘mī„Qč3ކiō:”§ŚƒnQ#óuĻ5©•¾ßµF·HĄ°ĮZē:iÓ]NE|§]]^ŻŽ»Įc{séZ‡Āšf‡oę«F.6”9ą½Z)›čŽtiļ-ĢAīŽ=æä^MV¾æ¾žöŽH̐FĒs“’]7>ÄK±ŌŪźIg§żŖīp.B±ėL¶Ö”Ō]ņ̳`=O9…Bµä³Kt°Ä„&1¾½%mƆ®%¶ø3ĢŠ˜ÕW‚‡ßڟ9‘į÷Ś4ŖĄ•„{Ÿ¼j]<»­TyĪ£ °õ£–Ʋ:Øō]/Ou‹P‰^āFłCf±ü§ivhš^™ŗūj v8aƒŽj%QšYÜĢŠ„š)Œ-l"ä‚ ®ā]B+3y2yķ÷‚” Ā„Jś=ģX»ŅF÷w3}x|cEy|`Ś•ŹŁ[å¤Ś§åSŒ9ķŚ­=, †lōઃĪūŁ ĻŅŗ -sUņ§[Łcެ[åSŠŌ–£c˼Uj¦ņmHÅŚrTa›µ—„j·ŃBūg‘rķ[EhtAu;}+ÄŁŅ›©nbŚĆęW5m\x¶{ł%ŠćH¶` ʚ±J'ƒjVVi©Ź€å\ŸR¹Ø¤¶æ›tƒzŪ«1Œ‘RĪVŠĶ7˜ī„ķuć‘Ķ=BŵĘņĆ#ÆZĄF’Ķ˜[iĀłT›¦Ģ`ą®y"„Ä»dŠs9s!`.?­CådĘc\ć5ŌTV¤žhX<–ģ[nsĀūŅlm”Īćß$6 ³1 '#ÆzT1Ź#ÄlŖH\PiLҶø.žaĻ'néZ¶Ö{eū\‹r6ӓņ(7„nΚŪMŌõģż+ĆAÆ|A{:ŪX[¬EšęRp~5żU~Ą’°ǿٷąØųćæŻ&·Ø’¦ŹĒŁ^@ž˜‰4£sӍ+Ÿ·ž#Ūźŗ“od˜ā2G# >ł”ĄžµöV›vš½¶”jźšČ»øžé\2‘ĻR&o‹“='ÅŽń…5£é­¤–WlĆ;7)‡”篽ŸGüĒöMÖfƏ>!šüŗt7šr`p‡äŪ*ĮĻNJø>‡Šüх’Öf!L+рÜéD\t•Ų“—VĆgŅ¢q¾ĒE7cė}7F»Ņ4KpĻo*ēt­’Ź{ĢW“h„_Ē*DMaŽ÷ƙ«/{C³Ś„ńiz›Ż½ŗÄ¬»L‹Ōė^›ä—n· §aū§Ö½,¶¢Łžf"Mšö¾|…æpʹĘOzķōˆ€Į•™G œuÆ ƒŠņŖZ—‡mnY&Ź@ĒoƼ×SÓ#·ŗ’ÜI$¬ŒpĒĆŌWT|ŽIJętq}’dc3£g>ųÆfŠüĮešÆļ··’µWī8¶/‹ Õµ f“ø"$} óŪØöÆ;³Ńļ].Ē„³ŌÕĮ–m“ˆ-٦ĄūGF8äVī“ FO6C¾ßv=³ļV ŌÖ|#*ŪĻ%ƒĒ0ĪTšóķ"k%īRõb•Ļ#Óa*Ąó[öŃ=˜2²ŽN8« ō/ 5ŗŪO«‹€GN˜ŖšE¶±Øk·V70ص(ĄżįZóIāfOĶV©™¼sX?Ś¢5i‰Y²0ū† \×5$³Ń£æ¾K»|ÄÅvžxQō¬§_iš„Įŗ‘^Ūq1•V€uŚ Ś~¦čn°ź*}A“6ķm.%²żóäAX\ø«ž;ę­ī”zŃQæ#=q]ÜKiņ‡`NŃÉÅ#‡u©}švˆæwqڶtŻI-ćvŚģAĪŚ kK¶¼•ŠBPÓ®Eoź–«§XHŗAĮ?įM r×2šīŚßLó »`ćZ»öė ŁČ“A 2*°Īyž5„Ձ®†Ā[N“QPĘ@ä×EāVµŅ4+‚Hę$6v‘Ōڲ‘äWژ¼–Ń­R3Ļļ Ÿ¼=«¹Ņed łIŠD‘߯ZßĒ*!‡m»'ŹW×W‰,ś¬–·N°rW sœPgŹśõ-éuK„·†HUŽYŽ6.:Ņŗ=+Q·ž&Ņā‘į_!³×éPāĶ"ƒĘ:;ŬrM,¦5‘†zŚø}#JĢ‡ĻcĶßéJ1¢hx‹WžĘŽh»ī„%~š>_½sÖÉØIp×…ŚÉ“ėšŃ+£c:H$–ģyķ„ĪsÓ§m§¶¤Æ(’§={U؁,öeśœ½j(°Š²·ī—9Ę)8ŽåŻ/R$‚b~P[ųyė]\‰Æ„1ä £?Åō„`¹éńŒvīE“PN6äØĶuW0Z\#Ź€–Ęzē4€ā.~FŻp†&óŪé^oāeÆģ]ZF ­…RyⱓŌ.t~ ³éĖØ°evänĻ?ˆ¤ūtö³4k‡čEl™Mōfł½ūMÅ«ŪĄüÅr>óąšQ’×®ÄĶP½ģ;'߂ƒ‘צj”¬dŻŽ¬ZA弯¶ yø¬?ōx”1—Ę»łrŻ­|?§Åot·’;(ݳ#Ÿs\ģŅ4ūœ–·gg =õܑE+ޤćv;:ī~čßkŌīę¹ÓåšŲ€!%šė@łz£ė[X-#HŻćO1NX‘ĄĒjņ=^ŅėJŌu £ØŪ9ŸrÄ@PōÕHÉłžUⓨŽĪM‰Ói=Mrńéo¦l¢-ź{Z£¤:Ę®č‰ ŒžK63‘Ž» łŅéįe—s’}y čŒ­”§5垟p·P>Ż€ē=ėWøKä’bĮ]¹Č¢ĘŽG ޽+#²‰į?75TŪMjŠXHŲ?7҃Éß=Äū`€ńÅiĒpÉ»<į°i7Ф÷÷o ŽBɞ€cƒ]ŽKUµ€±Č¶jSW±qC«±šĆj“:Ć(n:āŗ{Xé°5Ąš=ėĖ‚rMUõ±Ŗ‚<æYæ·»†!bÅd;Ų¹ éQ4M©NĶĢŲėLʦ…xµbu;•Óv£aČóUoŻ&i"¹³ß®*dŒ¹Ģż7EŸP$‰·Z䌏ā­9“;¦ŗPš§Ł“€1ĖVn é§+e’Š5}/Āś-¢K˜$[Ŗ—üśTś ŹK¦Cqr LĢpäf³wčl­Ō»imb²yQŪÅ#4›‹ØäčG†¬,¦žÕū¹¼iQøÕEtnĒćĮ{wŒl6ؤ²÷äÖ&•¢&²æg„dcéŒVœ„3®øšķō øFBŻŻk+PÓ.£Ó’RŖŒ„n֗!œ·7-õ(›OKXąHßqžńŖ“éóK¦]N–ė,üģŒu#ŌRQč$ŸCŹąŃ§šhåh„_,üčFH5č@–)Éū sļZؚ'Üļ­-’žĀ#;l—ØĄ¬}CĆŃĆØyÖźŖ‚Xõõ”·,Üū6›¦iwW(m¦šH·Üą’xŽ‘<ךŠž8DN z’äĻN³Óķlt·i‚Ā£žˆÕ;­lŪđ¤ĢčpF;S±“WЧmātrÜJ]AåG„fĒā¤3\Eä²[>pŽ•lp‚õ4(>ĢĘ5nžµEn®…ĀI>õUo”śÖMÜŽ1±f(Ö]IÆ]īsŅŗ˜c†ĶÜą²pŅŖ™ÉœģŚą“ķrV=ģØW/cØ D\É]DŁS‘œēŠŌĘR:(­¬®Ź<¹b>t=»»ÉķōķOĒmo•^ _SłŠRæR¦™Ø[Śė–ĀķžŹdĖ—nT{q^×­’g,ęūOvtģ[©ļAжĪKŪŻa®ļ¤’KR‹ń†¢ÄKcN(/¬ä’6i€ŽµŪÜŽßZéqłÖß3)ĄqO”‰ éŃB÷RĖjčĢ2ŽOŻ&»[ME-m¦Żīt©:"sńź³˜ćŽšŹ‰Žwz·b¾›R“XRēbī8éS$Θīi]XĻ ńvUµy/‰ō[OQūUĀy·GĪG8‘Ŗ‘ÓG£ŲŁxvļcw»3o~~]œ`~u‘ā;‹[Ųōų“ėwuU ä/­¹Ši¶>@·ŗŒš¼z×9ćKˈü_¦iś]–¦¶ļ*ł§aĄw8ĒZÖ$øō9o‰:lś&æ}„,ĘhU՘sČé^P¶ļ±‘F;sÉŖ¶6­-–鏒ŒóڽGĮkai4ŠU$rvš>ķGyā;åҭ潕-ü¼ē«ĒŽśóP¾Q%,1’Ł=h^;9crÄēuIw§½Ü%ķXyŖ7AŃŌ”į]6Kū«™¤™€Cåžr?*ś GÓ ¼ŽŻw †1Œć†5²™Ü¦©i„@Å&5R¤ōŪ[ž…µH÷—T‰›Ųü¤T"e#†ń>š·š»M ąŠ=‡ć½y'‰ī4ø0Öp'–0€g9=*ć#3‘Œć-³'e#„`ės®0Kh|éFAaœ“ĄŹŌ<7k‡īŃ£·mD[—ó2Wœr1ų×ɚoƒ.!žāo!mDīC#œ‚¹=??֝ÄŃō‡Ć;O{xPAl\Ś1Īzšū'@ń/…¢³™ÓP“Ž„® sōÅe)tD(3É>+ųĆJxˆ†HĶźFB7_”zcė_šŚÜ2j­ķŃiä”cüŠĢé„lt¾ó,t-bv*Ał}kڼ5ikk`÷šł"÷”*WpĻ=˜„‹ØĶ ­ģ ;–,§nqT¼Ajö:c5«+«ĘYŗGc@®r±Õ˜«ö:eĢW÷fīŻQU¶ĘČ"ƒ6›&ÖÆ4‹uK{É å²0Qœiw?hŠŚIv¬%Ó·˜qJāq±įwOꋯ„&÷aÓ”ҽcįōKm*ŗż¤ĒäĮ?…iXĪHōļ Nŗ…åģ:šŁ„J ~YLH„wėߝ+ČuOų‡OńĶÆ…,“¤]=̆įpAźqœęœ§ŃN ^7øŃu½.ēƗ•ŸŚ¤c!’" «öæ ń]SĮ÷žµŃn!Õ¬¦K‰ Gsķ#©ō¬Ī”ze愓Hš†£ā †ś'™#ø™$ŽØųū všÖ ?™”A#˜]ĒŽaŽŌP)=š'üSŗĶ–•§JöŗĄ$r˜9ĪOO»_FE ‚OØjвBČ Ā„ņh1<ļS¹ø»¼h“ō™¤‘Hąž}æZ¹¤h“Ły(Øé9#“I™ŻģtŅCx”{Š«„ŚŪŽiŅj1Ü"y.3‚Æ[ų_„Ž®»kā9›ck Ÿ.æ68čŽõ”ŠQ=Ö퓯YųƒWÄqŚĄZ%G9'waėŠųĖP¶‚×RŌ‘¶Ē%LßŅ Ö+C[KŻN{(-^Rsƒ×ė^é¢čÓųoOµķł1Œ‚ļAšč@ćsŽń/õؒ84hć¶ŌIÉ,2Gҽ[įÅ’ö†‡ØÜėZ‰½½wČ\ļ}*f“0–‡šZxŠīOKˆ¢“Ir€~=yÆBŗÖå×f‚Īźx-揫9ėĄ¬A2“vZ¤{i¦³„ØSūÄź=Åv¾X°X¬„Ō¤yr|Ź }+)2ļ„GÕõēŽk0–K‡łšLü”Go­y‰–XžęļPdK@HVģ~µ ‘srł,įŃ,n$š³Ī &wcڹm],ķ“6½i#‘X@„õǵZ“*śXłīŽ ūŪł.ēcƒvO Zé¼Aćéōm*=?J¹ˆ^©Ż¹8ˆ½+¢•É©KĮz¶µā½N1u«Ėö(°ūœ1īåP|FŌ5+o}’ņņ_²*#þxūĒō­MčŽĀ×ÅÉ£ųSN¹ū@ŗ¼pĮH`Y1Ą,+ʵżŖ_0—yIĘsŠŌIh>S§šœowö‰¦–I#EŽrՁ6±qź–oq¾N— °¬%±„£cWĄ Byģon$ŽŻ#gS”žŖģuGI…„0L`UNVCÄw¬łX(°Ņ5$øžßĢ s˜`=ėŚęŅģ&²Y­…L—Jø+ Čäõ/ŁŲé·°¬č°Ŗ·Čßt6:żkē9µkBćĢV„|”GCÖ¶Q4č·6o ČNėZ7>MRŅ;¦ˆ¦A †­R¶†ńŠHŲšī—eelŃOi~ęd^G½vŻųoGD’śie¶å¤ ŲŌĢ#iäĆAģ+HĒ]Hr±čš=ó-ضžŻgC­×“äÓķn]!³Œ+ó¼Šv°į3¤±šž‰„@ļ<2Ļzķµ@č€zÖˆ.ķõ/ x‡Bе§]«4jē^ąŸZNķPØ|į§xRöīłtė”qó°g=q_rĀe¦ü,šU…¤ó[µÄ~prwvńøu®·BŃ£øK}BńšIGĖ…=*]3yi©£©é+”³O5•€ćŅYéļ č©Æ_‹)nIh–&äōūŲ4•6cn§šź~'MzŅņŹHß÷ ®ŅC;}=«‹]"šCEĘC% 0HōĶE Č1 ”ō«wŠO¦Į%ōIŗDÉ Ć?˜¬īTķwcÉ5[·ŗøV¹š9n„=øō³ąŅīÕÜŽ 8 mMō%m ÷Ó'Ō®„W€ĒģtĄ5é7gL±ŠĖLŠŅ'`ętÜY}QVhhYx?M{^{˜óņ«Œ³Ą~•sśÅŒ[ĪmTy;·,}j%+ha4™ęŸgżüŽ gĪõ¢īČ„¹™¦@TĘ:sX¹$G" ±†(āJT>ż+J+fmūC1IJśŹ6?@u–Łå­Ą}ŲÉėYj吩łŪ§+¦2ø Ā1椊2u ? …d%Ó ±—ķLÜlfA-|„v9m½H««Ī$U$qœ`š `\…UŻŌ# €/ÜĄāŗAŌ¼Cyeįż3LÕubź@Z[!iå;ŗŖ÷ō)]ŸøšMļŲā&ńėĄž/ųfóĆzV©ÄzMō’"øÄ‡=:ƒųWõõ¦+ų£T½ŠvIlMŖ¢żÅ@ ēė\µēŠōl—®<3wšgāŽ„įu»·ŗŃ&c=Œ±·Ź 9x—žśĻē_r|5Ö-Eke‘¦†pd‹'ī>yι^§ ]Ī2M+lm>Ŗkń’ž =ūŁ|żžOt+µ‹Å~ŒGØīŒš šIź{}yō­į¹É#ųJÖü9Øé!Ō4{ņĀhd0Ģ„6“l;Ų#‘M¶ž]:öĪKQ ,šOcN¤¬“4‰öUœ‹|;gxóĒżŸĒ…fĮFć€ĻjöĻųq-mšé„CŁŪ_'‰•›‰ÓOS²Ō"kx¼¹6pUõgšŅųoā)uHč—ŖmeiYmŽF]GJ×WŽJZ;žło§ŻŪłJ˜}Ü dęŖOؼ8†'łĮĪģtÆØĆJčńjEÆ5½ZņśŅéēšVQµ‰9ȁüŖø†īv’hę<œq^„CŽPFEõ·śI‘÷@qßZō_ ė0¤+cę‘pŖH^§¢BµŽ¢W”2±&>w6įS­„­Ź¢OnĆq+Ń}«xĒ ¤ģrśœ†Żn$µ‚)\„õĶyī‰ćMNĆR{6*¶ŽłHĮčGRkEO¹Œ§Šō‹æ»6“c7%Ēį\­²ÜŻ%‹h “!č L£b:˜"šŻÕµŹN“o‹håFAöØt…ž6&H¶•n¹ļC·BāŽ÷JŻN" KN;WE ³ĀZW 2óš9$Œ‘u5åäŽsn#„V›P¼“Y …DŠ«‘øœjM™Ųāį{ū–‘nć ½É;Iw~Jš×™(6§­é°Ū_JdW”’GϦ·i­xhż…m¦w̜äūŌ)\ž[×Ų.䱘 Xīöü ž }kŃ<ŅĒ‹RņŽ]¹ CLmŲä¼Uukeāōū VŠ9£2;’0O ©ą¶X ŽźP6gy ‡#~Ū[°KB’Ø,”`Šęn|ežH1*QńŌzRq5ŽŚ•į7z™†ĮA§i2Ļ­r–šaŅ'xn›,²žqļÅJ€7cŖÕµyÆa¶Y”ŽBˆĮA÷»ES} žĖę<§r®į‘ŌP×Ryµ8I,^yZxdŪ—ļUDZh”ļSĘOµD­Šqey©,B"ÅØ®c’õ­mābFj9Qwč69¤[³oPį±Ö¶īu'“·2€²8a†F=h°<øk¦“-8XƒŹ1Ė Ó,TA JŪ½óŚ€ė“ ¢ņ]Ą%•ƒ]öUަāBŅ*BįHcŠ}(«iėó4™Ž9R}EwZˆ„F;½®6ķb“E)4q>»mD\!ŹV!NzśžuµtņéĄA¤²ɑŗ 9F›¹ią·Õ­ ¶¹bĢ+YšjiĘāO*ņ ŖĢS8œ¢im,Ģ‚m廘%ŗEĮĘ8«ÖšdsF±*‘ƒž'BÖŖė¦Ū_hlŽ¤W;3yj·vųOpzŌĪ+]OHÓ5_“č֮Dz¤‘Œ‘^oā&ŽM`$ ¼8 N:zęƒbEŅ,uMÆ!9&Æ’dĻfCz)ļÅO"˜¹Ņ5ŁŁ×a#J§<)§]G uĪ‹Ļ5ItČn<9Øźł¹µFyNGN«Yx#ÄpĒ kg$‘#૶ьż)’é‘wį¹g†Ų¼+ ȁX(ėŠŅ³ŅžÅ#bæ(ėĒJĀJÄJ6:A X_‹oćŽd P?Mýjjŗ›ö+‡’DłīŃ0pF:ŅH†ūž]anńNTpœŠācŌõęÖRßgäJŚ*Ś7©Ņi“]É}mŖ¼aw“}…wŚ„ƒÜ@YزޕAÜ®×Ö¬w3ŖHåO„?M×.uHŽĢ"¦Ē…6wäPZs’ń-å¶£-ģ± w5lÉå ]ŠßĀ84̹mØ„ģé½vščG„wm"źAHĮ@W?Ž÷4ŅfWˆ¤²ÓōI&–śy•”"²œō‰c­XŻĒ·øŚUŠŽC}hå7‚Š’ėGÖ5[Xą[†ŽÜIę£ļ±¦éž Ņ.Š:7Ł08Č9£•æS½»‚łlķĻ1ūXćÅų‚VÓīģ”ņ·™8’8ØheCÄLś‘Ņ/,ŚŁö(ę2ķ×׊±¢č’Aģ×lˆŽäEĒ#>•œ•†\Ō/ ÓģlōųHźŪ˜ƒ“ųžUbŪÅVwĪ‚łUīāPŖF8QÓ4¹™²<×ŗvZĪ”%Ā?3įIn¼WgœŸŚ x&‰O—Ć6{ÕĘWŠ$ģTŅ`ū|eŠbbp»[w޳{oµK2¬Ų==ėhÄēnĒassq©ĀŚyó'ƒī„# ×7 x‹JŌ΁¢Gqo1V“f7ŸL÷Å9+śŖŁ[»¤»ŁĘ:÷ö­ķ#ĀĮ“½FW–ą#/įyę³7†ĒxsIšŚņįłVŠä:¹÷ÆZÓ¶ÅĮĄnõéAFŒž¼¹Ņ®ŃĻlĢc9­ ;[ŸBµƒH†8#ÓćB2¼śYĢ I¼e¢ŁŽŖß\ĄĒ ēłŠäõK[ļ:[V·xYƒ §Ś³&M:`_0mŪ’yązW;ćBņĢöźÖźćnFkhfˆnmob¼—Ģņć-°&_Ҽ¢+Qx±›¶ŸN”IŅAoå@cBØŖŚ\½įu* ŽzœV&ń3õĖyīąp{0ĆõäŃxbx„ŗ’ż¢ūĒĖ8äzi ³&”öžI°V,Ä źįŃu}&Ī{¹cøkuČ ¤N§šxgÅzŽāk·Ū}¶'ސ³& ē“ź}ėÓļ¶”“DåĪpG©rCĢęń¼Ž æ6öęņśćrBøĪoēX>#ń†öńF$āF˜e6™ćęŖ°ŌK…æ‰^;•Ež ¹Ęģ“YS[]Gz¶‡(…v`ŽI¤ā=GÅZTZ.É]±S!UöĶ_šŽ“ĶTj®«i8ņ„¤d!?ʈ²=™ėšŻ­®¬ņÅ$;€Ü†Zņõ5ū™uKØ-¼Ļ%āRŠcµ2”l|ĒØxWUšö„srĖęŁHķ&äåSÓ?ʱüK©Å{mil&[˜™2Pž2ŌøL|#¼ų~žF”oo\^¤ücųWšwÅæxRŅ ÜxgkެL.ņēå9’õSQ±<ē™xrźĀĪÓ[“S¹l/źŽOēYVzõąöńϾpé“€Fr?„1©#[I×®oKŪĒę²>\`qW5K{{ķFŚ+‰†ŁŪ˜8Ž;wĪ £Ö“OiVz=¦Ÿ§išĄšĘŹ:·®i’ųr ed°^ädī’OZ ¹ń[ŲŪ^E=ü‘łŖ6dŸQ×ü-k©@’Ų®ėœšF¤üˉękąfŠ%0]li¤“ųGŽ=±Vūhm4ł`²žYƒJĶņ’¹éž1ҳo±FöBi3ĻP¬ńĘZ$ē;»nÖxVŃō‹)tXaŒ¬¬e!‡Ģ ō=@ę—3&R±³§LöŽŠ¤-¼ąœņø<āø›8RĒQU·>mŃ%a»”ŒÆÜch³<Œ.ĮŚG;G­N–žšÖ›ØZ4vח’˜†ˆõēó¤j×cĻõżJį-ģņ›ó?ŹÜš ž*ōČŌ¼2žŌķRźŁń&3÷X’]L¤e±Įų³į•·ˆt9­ōku“Z¶dQ°įĄĮٟÄs>ń咃|6ś6½Z}čI"ŽP‚:śTī+Üń›=FŅ}Z×R%µ“ ƒ·nOS^ńci¢„“W«YĻq,Ŗēę\Ž?ZnžĢź.ü!¢i¦ Lļ¬\¬yv_¼¤ö k€‹J¹±»žćO¶™¦”ąķ\0ņO°¬Ł\„é5‹ś=4Ł.?Ö<ŻOšžu³”ų—[¶"“—GÓŽÖe m#Åxėģi¤O³C<;¬ĖąĖmoRÕc¹Ö.Leć‹yeLtWžųoöˆń`Ō^ēNÓ¢ŗžG!mŌ Ū3ՇlVŠ=Ķ”;š:÷ĘĖØ­5-3VŠ® æøłĄxēĘ©Į¦ŪŽZÜ\Ćhד©1Ę2T)£«£|4¾Ōnlõ•ž8. ˆÆnqĀĻnõōF•įč4]XßĖų#Ė`S’Ö ĪI3„ń¦ÆkŌ2ĘźüMĪzs^#ć?YųSÄŗD (“K»ˆČā.±Ø’…L£rįHłoā'ÄYüI}mmȞ¶‘ŸĖqóēŌ·å^ŪšŪĒś­Œsź®,5H£·Xģćg`=O½sĪ ė3®ńĘkßhw^ŗŅ¬mĢÄE'Ė‚¾øoƼ»YųGŖ4z~©4–°[> ä¬OjĻį&¢°·zčö2-Äh c żUČźķż‘£t.0Oǵ_:9„±]5‡Wvbé·¹…tVv××ĘÕ”–5]įœČ26皓Ɂī2]ZAjŃۘfO,.å\tī*ī‰āX$–ÖŽå$¼„IĖø^iÓZŁjŗŒómµ,B; `žŽõćŚt‹-åĆČžz«Æ· ŃO¹“GqāŻAõŸ‡ŗĘ“įūØą¹‘b„ƒ9=ń^æ 4żHéŗLöz d¤¬=Ę1Å7$TbcųėĆV™ć/Ą¾·’āŽĶcŽēÉl‰Y¾ńo^üWÆkók6‡Hšż”6÷i"«ć#xąr=ED™v= Ńl4æAż·©Å¤˜F™ĖÓėĶ|w!Õu ۈJObw*ö÷¹X…“Ė‘źF†Ó‘’øĶzmö›o«čņK Kqj‰—Ų ü*®Ö†r—C"Ć@Ņķ’ię³Y%xYbv\‘Åp œöWĪlšF‚REĮ/éŠb†ŽĒ4µgI}j_Ś kt|n©’" Šē{éÄsÖŽžYŒpää·¾:ć„fxGötń7ڤ½ń%Ģ3Ūł˜Df†y<jČŃT±ÖÜxHš5ÅäV±°Ul ó|WĪ’ƵjÖw‹hU”ĖŽ’ŖŸ25‹ģy‘ø¾ie‡lČmėŅ­Ųiz¤ĘJ… ’ĘØÕ½bÓ“‡š×‡u)ŚIģ!]›€Äš?*ņ H/µ æœ4Ķ».@ą\ˆĘĒw6—&›jņŚ VR¤dMrVzEęØ#¹2ÜmVĪņŁĻµØi3Ó¬mäÓ¬˜$¬€ņ®V?ėzݤļö”e*«ĻŹ?:9Q^ĢĮ’ś’ąQ¤s¹²Ą÷®÷Āsi·ž]ā9ąą·µ Ų–¬zL›.ļFŒ¤*rN8Q^›„ °†Ę7ŽHĮ ¼O››&R±‘¬ŚÜGlŚ…Ŗ$¢3ūęŻ÷ļŠņĖĖ›mMˆørŽ_Ģ;dÓö…s1!Ög‚ >Č pķ*ÜņćҼŚŪķ:ʰ‘ŖČ!n8ļRäµ[Gugä"’šķ]ēœąŁ- Üew>÷įRć¾”c24iorų-@Ą?Óéļ\/<;}£]°k$hālåĄ!ĒŅ„2łlbń'Š ŽÖŽŻ”“»².Æ4$mT'Øń®#Ä7–ŃXIc£ŁŚéČūŻʟoZ|½ ÖŚœ×4[Ić‚Kµ¶b1 ””<#¦j·ęś&“{ņē'§Ņ˜-5=ĻĀqéž“y-fH$•LoĒĢÜp+‡ń?Ä %'™ZĪŲ!‘ĮūŲÅ’>eŌZ%swomö%7—ļ[ƒTń“ŲŽO(“bB6}+XÅŹ:XōĒšLś]“ĮjZāiŲū×uą[‹b.n.O÷Lj_Æ5v3qÖĘę…fŅŗi[Æīó¹ŽrĒÓ5Ūhš W|ˆäu*$ŒģZŌoĪ6”…uĘHĒCŠą£Ó#YMō)’S™pAÜŃLøy—ōŲķÅŻÜVv³Ź-“ŒAķ\ŽįWĘŗĶūk 4:JMˆc˜ķSŽćž•gG:[»{šŹckm=•Õ† čø+• 蟉ų{g£‰n/-ćxW‚2zb¦Hӕ=KVŗ•„Čm`–WØgP ŚŻž•ēš“ö–—·¶Vrł÷a¹Pł#=źmŲĪTģrśŽŸtš‰Q<Ł~ņ‚qĶ7A¾ŗiꉒTQ€[ųIō¤„„Œ×cčæėɧi·cČY)+ƒƒŅ±—āÖœlu+K[[Ö ęŗd’=åT£Ü£ē-__µ›YøM&8ŠŽ™ĪkسŠ{˜’CžćŽW/Q&ŸqsĒmD\g9ėō¬żkRbžŅFżó6Cē+­”ŻfćVMIį¶ņĮ q’zćŒÖż¤6Śl‘āŽRG°jDK±ÕišEö»ØBöÖÅmcb^g`«ŸLšķ5[‹++Y^ŃöE )Üęé€*£~†\Ē}ā‹+˜ÖŚ2“ÉĪX’į^A⤇P[› YĮ)ŽīkTßSHĶęy-ųˆ]²ĀpxUśb½BĶ,¬"g•üøUC9aŒT¹ō5O”½e©čš[ÜL’f6ę2Žc¶{ęøķVļO׬Z[-\b HUl¬ĄńņÓęę6ž¹”ŽŽĘņĖ䩑¾`3’×­{@ń,³ÄcøŻžGµL¤&ģt–:Źh0 !aIʜvÅbk:õö”䘎³‚ą¦Ü‘õ®y+ Ģā¬ājšĄŃīr|ĀŲąąŽ‡µz’ŲSȚT“µŠÜösZD£žm=²°«B­†$tĶy捵]BŹęŅR‡kydč=’Ęŗ ēč[šŁøŗ@÷.Vb¹*\Ē|U ķ\ĆrŃJĘH‰#“ŒĪds„¼¦;Ø'P›pźWīŸPkķ®§›äbńdÅr43],¢D÷Šq#挶tŪ[„¹ŁjŖŹ0z㱨r¶†sgčWÄ­[šē‹5ĶTÓ¼J+“ •b<Ž¢¼ē"$ņĪ­œć·­zŅ āL"ÖÄP\Kc)1młB gėQ¬FEbŹŃeČZ Ų"Ū@D’c;I=ŌÖ„¬w *ĄŒäpiSŽĒg¢ųÄ~'ńąļi×:§‰ļ0‘[Ē}Ģzté_ÖēüGž ©”~Ī^šßĘߋVÖ~4ųßul<:TtØĪN99ųŽ:ńÓ4U|°æV{ō)ņĀģż“Ņ| kāÆKƍ-,.%EĢiŅ1śWµhz:čwKdŠ <īŠó%Ø„Pä~8ü:³ńgƒ.5+KuOéĪ/,eDÉÜ¹ŹŸØžµäæ|\šÅ šf²gbŖ™å%S†SųƒV‘ĆRGښsĘ|™Ė-ń’;”ā-+D×-u; bĪ;Ż"öŻģoauÜ­q’=ŽēZ@䔏ąož ©ū(]žĶŸ|IŖZiGLÓ.Æ&ø‡Šõī•ōąŽ=«ņ£QqkgpņKv‹©2“ėNi=ʉö×Ƌ=FļįŌæŪ"hB'”Š  rÄ}wžń×Ū‘ō{Ų®"•ä&)a]AĒż+åq”ļ94wӍŽžē]Ž9nlo€ó€Ų¼ą©÷Ø-m%†ėI×-\H#Vįūžf°”ī“Ė”n}g§k w„Å#HāõIį}æd]ZOFņÌ{šśœ$“<:ń±»eåyQĖ'—m)z¹fŹö-A>Ļ"Ŗ±9#ųEz±•ŽN[čki¶šÜ±“•TćqcŒ×s£iVöó„Ģ”¶)ä׌“ŒŹå¾§°Źž»Ó­ygR%ó óŪJēõ WD[¦Ł²¬Čū[Ē„tĀFCǼY<¶1±’)€NAś×œYڄ֓·1YǰsĻzÖ29jhz „œóJL`²/Ķæ­v±Łéļ\ŻČ–„W#†Å£+čs2ė\YĻhaO(>D‚ŖAifhŠ:*‚ÜńYšDٲ¾0™įgW<.qW5-E^ŠŹ…„Ē–=ŅŹ]mąģ¦XńĒžOR}k6KmóždēŽ ¦=ķ`Ž[xķ·ģbn§ŽÆß@štO,Ŗßg“ŠŪÜȎś×RV]9–ā%åŪŠ×=ØjfŽO(‚äsĮč+H>†RLč4ķU-"WŒHÄćŒW'sgv5YžŚŅ`e̊ß„heĖ} ;m)¼°fC»“Ūń¬k”{m©Z„¼sĪ„€L‡Ž”“.+³é ŪÜĮcnŗČW8^9Åy÷¼2ķtś…Œ;īē8Oŗ=+šSŌė§JŚ#^…E†Ut˜xc5§mo%Ż«ÉcG6:(źkZrC”Yæ¤jśešZŽ<ŽTēčkoSŌÜ ä€¹9ڵ!»·…ļ-„]F'øģr2ٰj=WRÓ¤’ę.ōFįˆūŌģsŹGHn¢²Ń`’ĀO=„„ł”Ō>Ÿ„yżµ„²ĆrŅJ±2ŃįIÜi\DwūŚđFOA\żņ‰mUäi6ƒ»ƒ)•b[ŹŒ3 øĒ#Ø®£JÓį…®Æ Źć‚‡ŻśSŒ¬7†‰ž}Zź’ ]0¹Tä1^—į}½§œf.Ę1ō¤T]Œj y©É0#QĮĒV>¦¹†»–F C“…'­&†äYµŠäM \(^ģųć>•™sÅņ܈Ā0’fƒ1lī¤o0’HÓųk®µńÅĶ”6Øń²H÷üéÆ1įæŽeFŲb~eĀjåö°žR$lŹøÓę`ŃϾ§-Ŗ<ʊϓõGJ‹}ø¼¾ˆ£6X·ųT‹”£Æ^[ŁŻŲ[Ć$,®‚BŹĮ¶ū}y¢-^Ł”Y$R0Iõ ÕS{ņk‘Žhą„»C&įŌõĒų’Z«ƒ×R…Gąc=­8ō3$[§-ø26y8ģk MĢåļĮįjw/mm„”ŗtŠ(+Ęv0’õUęÖ§æ·[RĻęÄŪdķž)Ųcōńö<É ł‰Ī ėYZŒ‹)i(ŅnŻĒjEr÷‚o¬VĀs{ Cr¬J•\ńM›[ŅcŗūAV$tē!“6”aØĮtQ\nĪ=ż+Ļį±ŗ†āšČąÄFÕ\v¦ŒÜM7ó]YjŪIŗĒb°[€® īĻTÖ0Ķ4L¬¼©éƒ['Ųi›£²iöŠ%ĢŹņš­ĒOzķīlēŌ4skjĒjž7 Rņ6VG-=«[%ŒöńÉ0<äV5Ž›ŖŒ£0ĄzV,ÖčnhzŒvsĒy‰?,śīŠ­Ī•ŖIwå¬Ź‡Ėńŗ„¦j|±©ų³V“U»D<ņŖwœ“ōÆKšž©tMœś›“„ĮēJ¢%4:ŻCY¶žÖāąVlä?Zęü9w§\ł÷wV°Č«¹J0Ą dfŒŃÄŧŨÜÜĶgXšFXņz ÕŻ7ĮÉźŻÉ"ķÉ%1ŠÖ‘¦S™źcÓÓĪv‡Ģī:Ńa¦ĻØŪĶS`õ Nęg9§„ö™-ž›~Vį@ē_ÆB;0÷LcP‘éXIu'šēg§jZf„ń}Ŗ41ädnĘå¼]ā„ńWˆ`·Ó,ŚŚņ"«g?āi¦e(Ų®¶±B^WāDJēóāøF/.ś%@|’sLƒÆŗŅ,&³²ŗ…£E$ ʑޭŻjŗlpŪā2ɃӖükĶi#µ«YīšY‡Ļ 9ÅrąŠ÷TVņÕSŌŠGTY×hk\ā'jći¶oõ[hÖ{xī ø'“éWÜ%#7Į÷·ö·R˜§d„Źšz÷ÆnƒSŽd]ūœżźŌÉŌčj^xĪ-”Ó®Ļś2œŽ>ķp:‘ŅõKye„2Éę~ėwaė@łŒ-C˵HÅÕĢfEłž~õ‹®ŪiҤ2ŲJīƒŸ~ų §±ÄŻ™¦pUŠ(śŅhźśœ7q<²(8ŪŽ:ŠfĻ[—QŌā×tū™„‘Y²·ÉŒ)žµ«©-¶½9™!Už4?Żk9®£zņIŠ‹›|ė…-ž+Å>~— ¾ž$tWMÄ1Ą8¬ÅĶcóŗ(Č4Ņņ\E»Šóčj µ%Ģ]>Łełżį ĶXĆ—ĖmT~aøżīkbŽ›E†;}=EĖŖ2œas\޵y%ŻĀiķ$q)ڧŸĀ‰nÄ֒j-¶[łšSŒ~t‚žY"ćjõ {Ņ"/RüšR<-—kķćµĻ„ŗC;#Iąę°{›Gsŗ·ÓĖ©M“¹ĘkŻXͤΨȒ•ldµNėBžÓyÆ%€‚Š[®Å5.ęUć©®½`iŠ«+DŲ!ž z”·2Km5£H€‰lg®§1p[Ģax©¤&øĶ ‡“Jąķ8Æ-æ¹yu»vEV<1žĄ£æM/N¼‚ĪöéāŗŗīÉźæżzéõ++y,­ˆÄ ‹É=g1„Šń÷mCķR²VĜ18ܾø®?TŠźĪk‹„p»ŽÜÜTXwčp6óĖ I+fM®[§SV“«9īä–īågŽ9FQIĄĮö­a$ģgÉgy¤¼²Ä¤"ņ2zŠķ“OKpöŹ‘«D@č8>õŃŲĀRŌõ ć·T™W3gv@éé^ć-ō­Gķkˆ'‘̇oj™HŅÜšö«­ź+j4šĶ( HĪֽƒ[¹Ņ“™­£H®&š=™nŠÕ“G\v(AŅŲŪJL^qłX ļŠŅÓĶ:ņ[ŁRÖxĘq“/8ü8ę“„Lęõ/IŖź6z ÜZe“÷ņd4qĘ궞•ÅĻwćń<ö×öI–-•׌ķŪ?NßJÓŁ£.gsUščÕ.$“Qc…łTqļXśmķž8¶īcˆ“ŸLT{$ļc¤š“Żė’lן쐹;Š&ķƒ<}jž·oœóXŚĪóŁ¤øW)°H=qCŠo©ŹkC/œÖØdP½ĒZålķUŚFE žÄb°™¬ £Üķ󳀤ć5Fvū4Ž\Įb˜ńĮģk#TČäd…£V!“©Ąē‰«[A«9FT/ ¤c4höš ķ—öŒ”ÕpīŖqÅ]ų“āżv “M16Ģ6°WžĢsS&j|›ˆ„–śÕu[Õ34«øźN}+Ų-õ˜W°YĖ¢üŽä})F lųSG:žµ%åŻ¤Omļ8ķĒ$f°ž&ŪŪx‘Ķ¢Ü\}•3öqæ%Tūՙójpž Ōl|9uxķÄ×04xc±uą~tXĪLźµ±Ōģēµ¾QĮ+Ą|EąҵKh­īZėN $€ŹēšqģÉåŅēŖųsĆ5åļ‡ę†Ž_·AóīSü‡į^§ā}Kx øø¾xY`-*2pĶž‚µåDže©i Ēś œM¢Bvąō¬­+N·µ®ć‘~Qל@ä<;ź72²…¶…\¤d6wŽ½£Nš*M¬ŲźWr,²ĀūŃHū¹źA¬¬;ž÷ØA„[iŃOj”eĪ×Ćg5ēšž½”é&IZhü¦Älp\‘ƒłfŌYņ”«GZ[½-’3pVŒ£dõśœ“_Bh~¹’ŹŲ0e Ūzp¢³œŗXÕń7‡tļģč^e‰®T€…śŒzWœėśEūč7YYyórU—ålć¦k0<×HŠõ6ŹŻu‹b…äīv(®Ēkā+ė{+(ę{›k+’P9ę_§nÕóF§įo7ŒģļŒ×,×Wij˜ŲśwRsf‰i©īž7ŗŠį4­>4}F Ø÷Ÿ‘ųčpŚеėŗ„V–·ö±ŅE)ąćµ`äĒ*}NZųŃā+K›Ū«+8ō­PÜ4±²€ŹžĆ§į^g„Zkµ‰-µ}F6¾•Žé6• “śVōüČTŃč&ų8~xZ{x€ßMs8†Ń7 œŽHļ“Uhph:l:ŻõŌ÷—“DdŽƒ#pēŒc±JVŲö­ ÄŻY3 G9Qęzc­sšĪ„y,Ø4¹?|ŒŖ ē5 +ÜŠęŅć0C,ŠĒöęlÕŻ\[ mm¦ŽÖ$o(/īś1~ts U—MŃŽ;¹¬ķåœĒzīQģErų{EŠ.µˆ±ųnĀā %s,q»³ŌVkŸ&­‰#ņīdX²BÄ‚OҰn|%c«ßZj6Ńmø'÷½~aL£½ÓlÓK[MNŠF & lŸ„m½ß‰nå %›®œŽ•@ópy"‘QG­hŸMĪ•»<ę }ūp?‰±ėųWyŖk‰ąM«=" ŒĮŅk€„™ä(?JĖŠń߀ßōæųĆÄž ń±m§ŲĶ" 8²{‚{$šūRūPˆŚÜj—‹o%ĆƒoĻ\Š.[ |GÓ5yu»ö†ņ8|<ķūø€Ė)õŻ_(ųÕ®d’Ņf›ŹÜ‹¼ä…ĻJ !.‡ŸŪxnMUŽ7wŸõÄz{WŅ~‚×FŅą™QJŽøÅL–†ÜĢņOųš+¹n"“]Ę’łfy\×­xCEń7‹ü!§i—ž"–;˜C4dK†E€O_Ję” ęy’е{Ū­R śöy„XBŖvį³ĮĶB©ž ¤Ī]ĢO#.&…ĻŁÖĘfµh^e!†ć÷‡„ZŅ<@ĶnŠ !Ō|įNwéDbī`{G†4ĖżJfHŠY¢†‘‰ĘÜ×e”ŚŁŪ­ą‚ÜõŪµ¹-ō­F™óßĘok—W–’+«m/Ė;ŁX­ž:zūŌžÕķ“ķ8Gxæj»v£ŗs×u;¤lEāż7I2,ļ@|¤żļj᮵ōæ¾»Ōķą’Ę#)UˆdöŠÕ‹EļXµ†»wāˆ’AØ6ĢnyĘ1ƒķ]Źßk:­¾¹Ŗ[é·­×Ģf ĒÖŖ1¹Æ&‡ŠŻxĪź’HŌīÆķgI£ržCā«~šÖ”Øi—:źŲܤ/†!—åQ鞕©3Šķ5 ¤Ņķä(±&Ü`fŗßxźĻZhü?¦Ųż‚I‡•.ģ'=E$„©éŗfƒą½WĘ3xQ|Mc%ävāIœ”ŁØČąž+ā/„|5ą«¢"Ō!½²(?z°” Oaš !cĄücćķĢižŃōå¼.©å„ĄĆ¹÷?Ņŗ;o#éŅj0Ł)wŻČFāR=³üé4T¢¬Z²ŠĶd„‰ €øĪH®EÕö^ŁČ° -bqĆ†Æ“gń_ŗ]Vi$fŲøįTöÅ|ś×sQ'åŽß•4Nē¾i^ ³žĖ‚ųÄmć`œįĻłÅAasVw𕢇½šGó7Å°{zt­o} ‰ŁųsUŌę“k˦+Ń…S×ß5Žj^?½…«Y[[Z\ŕ÷ę×čj%š¾§–kz«Ż fhc ާśW›ß:I’Ee[•ÅBGE’<āūM·’VXÉĄę»Oxvxl5須BK~N]ø'¹ą‹iīīUž?5;ŖšŌ“+č:Ÿ¢JĘXUÜä¶GŅ·#ŠÉÆ”,ā(‹`rG¾*g±—SŠ—O°[žŽF—8Emß°cšDg†ĪO>ę1ó‘ü5ƒ‰œ¶*ų‹P¾‚Co+Ē.•z}MyäQĶ-öU¶'BjbR±ŌÜXÅösRm›oq\e®Ż%Čŗs29]£„‘w>™š–aÆčāČ_$:˜Ć¶ņaķéSŪhV7Z¢‰..·Y¾ųü£ķÓ ķĪ*Éɔt÷¶—2Å$ōœć.3Įõ®zŪV²šö«ŻŗO& €Ē ʔea·©—«jV¶+y3i0µĖ’6uĮģFkL±“¹‚ź;ūˆQ¤‰“ĒAłV¹į^&ŠŃõŃŖĶ*ą˜ń^õąæ ¾c$“Ļ<’øĀÆüóĒcš¦ŠüGŗŠ&ĶļpŁ9#Ā¼¶Ķ©M8‹t—ЦF^¤ū’?ʐå#Ėõs%•Ō6wČĢ7tą×Q”“‘‹B·ke HwæÖ„ģe*­“¦MKN3¼‘7dxqXSųzZģ-Åɳ±É .ĢązWĪsókcĢõč­t›³Ÿ#!Ū»$üޙǽrŸš–Xč@°øøžąņF@'ښ’{ŽĪö.Ēā;_Y½•³“rĮ;kBÓN:dŅFćķ•2gi>ā„» FŚ×Ė=‰P¦ČQ¹ėX7~7y“żCĆv3%­ĢŹH` ²{J±„Üą¼!ćųS_]*ŽöeÓˉeŽĒs7ņķ_nx’óM³š•ŸˆŌĖ~ŅØy]øRǜ/ø¢ĒG=$³ń~—ØAsåūsI“pq\Å徝gy%åį‚Fl¦õąøjyA¶r÷7Öś›Coa!/Čt$ §=å]օ¢„µš–‚'_¾ŹyÜj#”‹ŗfä¶éeg%ĶĀI©9fķJóĖ»ya–ī+ėwW'åRrŸZŌ¾mJ+ =nBę‘_ę|v=Č®žmnķ$²Y"xӍńŸ½JRvś›ž»Óo-Vść*»–ŹAśį|Yc Ģ’HŽyä·pcżźÕžÉWkóŽAō®nmnqU™Ņxv8.gŽŚ[u¹Žv2÷ćÖæ8¾/ųNŪągĒ ß éZµÖ“؃«ZŖæĻg1o™vĻ'’×[/#–GŲ¾ń ×,‡žv¤Ŗ1ŠH"»¹fņyd øŚć…\§å×üöO_Ś?ötÕõ} BÓuųp™D2E–ŗ“=pqœœzcŽæ‚oų}tw[šÕ݌öŗ„ņC::üČ.}ŗRql֚źw ¾+]xnbÉ*ÅūÄx’ė$`ą1Œā¾ŁšĻ…_ā—gćM.±6Œ7ģP”FŽ^å^6/ Ņr=*OC”ńw‡u˜u„–H®. ä7™ž¼õ?­vśe„åŒ JĪ~éÆ22źģw¾ Õu€ēMÕ&WQ!(Ż>NŁÆy±–Ķ=" eI#5ōų'xŻxźe¼³—) Śė9Ŗ±ĪĶ;$Ļæ/źGcé±ŃiŃ@Ÿ>ąN{×E$Æq€HŹTqZĀ=Hs×Rõ¦³=µŗC#y„O × Śn¤uKBķlģ[żĆ]0FRz™Śƒ\]#’«µN8ėPhńŚŁOöÉLļŠV‡<ć®§¢Ś^+¤—vįāĮS·ų³\¤·3\<JÅv0łsŚŒ#£5R+HÖ’ #?ķT²Ēk;żšŃCŒ0cŲŲŁ1Ų$vź²L€†Ću'ڳSģ­™„A-ūĒėHÕĄŽūķ–J’„bgn1X2ŪM4érļ‡oŗŖ‰›Ž§OŽHŹ1<ńœś×mg„Oā;ķYLŅ—Ųźhåź8ŹĢń]nĪ½Õ“PƵČ!xÉĻ9®~×uŪ•‘JŹFAķKØō¹ŁŚŪŻLÉĘ.Lu®ĆH°3ī“šŻ‘ŗǾkr¹m±Óė^“Ć‘Gm©*–u9 ZĖŃōĶ÷±2ĘY†PW§Ö°©#X­t=:[˜¬‚āµ"<ē̃[#i’h>P$ü½Pҵ[‹Ø¤²ČYTY1»éė@ĶE·u*d‘"|ņ1]ŽŸ/›hĘCi›{š y]īihŚEˆ¼7*ä¶Žö®Ęśś;é ·‘€U 6<ēQ‚qŖH]K”Į֋( ŗŌcŠb©88 œn –»ž‹žŸgø’ķĀdq^7¬4±ÜU.ŖŪXć †‰ā“’kV ø>^85^ĒBŗ•_t–bpt«ä1RfŠé’ŚĻ¼­:#6ÜžĒŽ¹ķ^;Ųu6µK„øT—”’¤ –S:#5²“i >i®1šæ¬ŻŪ6$qĒ*Č…ĄõķHw<4yć\FŹēļ ē­m;1‘y>£š ēg”[M"Ś¢‚»ńÓ5vKĀtŃfiŽ’ÆAYįøķWĶ“7†ö«zę›o«Zžī@.6•ü©ĢųM^8å“häkx[å$asč+Õ“ŻŹG Ød ’3[^čkCŠń6£g¤Ż5°}ó1Ā…=>µÅkø‘¦š7sŪҳqŠ©Hō­žkc2’]ĪG#ä·ŗ¤Æ«ĶI3¢ČĆķJQ°&އ}į›Ż/xŽāE €>cœUoRÓķēd¶tłpŁ?ÅI³{œxöłµ…DÓą‚ĢƒކN˜#Ÿ­v0^Łż–eß#Ø+žÉⶈœlYŃtÕnRI ¶GĶŅŗR]SDÖmmŁŠi”væ×±žtKa«\šF‚ńK+.óéV’įžźĢĖ,o“Œ)sX”·8 B! Ķ"HÄ1?uæĀ¹(.õBkˆ 2K»;UGQBF—!ƒĮ“OqÄ"»7Ļ»’æZļÓDžŅŁäu_&!ĖV””v²<’Uń ݽㄐ€Ū2®×ž’ŅŗO ińÜ®„’ŗÉ6>Px'Ž«”ĢŚÓ“gŃ$1ø/~Ćīż+¬—Fy-ę6ŠĻ;±ŒU#=Nb(¼“öyČv²p{×W¦jĪ®Øų\ķ œ*$Ējy‡‰’į¼UyØEÖ$+J ĆØĻéÜÕµĒMŠ…D‘O8ėŠČøœž«®Ky-¼r˜É ‚z×m ésĆ$©“2” ņÕHn98é÷jds̬®ī“ų”fd†å›-ĘFļjMZśŪSš;«×2\®WóėPąĢžĒ,ӄw·ˆģCĒHØ]®måu,ęąńųŃ©’‰Ńxz`o”FŃķ×Ö½6Žīßķ jšÆ•ŽżźŌµ±¹™«Ēe§ĘÆŹ‰;sČÆ0žŅcØ3,? l†'!ŖŒäŃŪ\ķ+‘QbšE`cšÆ¦x2źÖ7¾šo:B½§åNĘhėü=„Z]<ŠŻ&Ģ”Ų‘°ś×!āMT{<3²æßFʰśÖRSxĒCBŚÖI`0’NĄ朾BI,«¹Oę³6½Ž‡R}BŪKŲ<+øįĆq\>”—7RIvѕßņ…殀ēFTö‰l—‘7™$ŅÜūĒ僊p(±¶‰®Abcs…-Wõ2œ‹šhļĢŽgĘ “]4V3ź6ƒOŚŻ£”Ā&µ„éß,%V%8ąpʒvS)TmĮŗJ“² BœZn£cØ@Y­Łƒdt·õ(eøē恌ńšEāøh!&TĪ:b¹ŸOyā”H®žŹ•TŽĒa@Ļ5žČuHbFņąRė^Æyxķemgq ųw4šÖųØ·Š8摐œż*ˆą¾¼ń"ü_Z¤ĢZŌŸĀŽæ—ĘÆ%äĘĀŽ/ōr£,IūÄż1^ł" ĄAhžpŻH„sHĘĒ7ŖųĪk8$Ó0ž{äĒל_čK•Ęšn'=OŅ“5‰Ąß­Śkme m±ØĻ œ’…v–>&Ć׌u¦§9ņäaĶāvśµüĄĘ©2Ÿ¹‘×éF¹ØßG£ÜŚĆåBĀóAœ yg‚ü3u»%Ī«m@@‹¾óźÕÖėŚ\šl“]™į6ąŒž˜ü*ŽÄĘœ<Ī×Q™ą“ tŪüF«¾Ÿq|ĄĻŹź¹źEEŽØģssǬM,—7{”!:WIkv—°¬w ¼L>`{ŠĪqźiĢkĶcap‰)*–¤`ż(‚ź1*ŚŚE!x逵O+9ē¹ŚEįłV»“øUv\–†³ōÆߛ™/gøŽąŹ€`®+DŲ’]MķwYi%’Öéä Ŗ’A8ć­ŚMiÖҼĮنāF}7q ©i7¶ž%Ō'–å®-å}Ń c`Ą®’Ę) %Ÿ`‡½MdŃI\šĒÄwÖ÷WŪ īv0HŅ_ėŽm’dzeĒ’#[“w{w§=œ÷Į ˆŲ÷õ®oʚŪķ”ī÷BØĘ >€y“z~­rÓŹŃŹgŒįĻcī+wJh•EĮVwOV·f|ŗ“^%‡O²kˆķĶŌė (É_Ā«Žkšžæ`Ś’,’@§°“Ć ŪC Ų!fČb8ĶTYŲĢ×Օ/Œ/®a[{M‚O5~ld…Čā›3:xµ‹¦Ō좻›ć™÷®›P“’7a‘J{x¬¦ĶŃé­qdÆtˆ¬Täg!H®j=.źźXįšeµ-“ÆPÜ÷¬ÄĻNÕõ(t+8’S ”E”gŒW¢ŁĆ ѽŗh䘹(ēų=8īsKc»ŌDs“8d\—½rR_ŁXŽ\Kdˆ&©äÖę6%7Ęėk:®HłøĘ+'[×,¼>‰qŃm×?Ž>µØi÷Öļ±VCŪų«H4D·-éh¤Ācł#_›ėYŚķÜ`Gēˆ÷ēń¦ę$®y.„īÆęŪ‰å…÷.ĆĖCVõó߈濷7rZ#4¤”ĒŻÅLŸB%ŲÅo M~‚ņņv–i€l>y®•¬u/č‹„ ŗ(ŚE?‹ŽÕ“#ęĻ_xZÓŁµv6óƗ‰søĒÜ{WAį‹zęŗ–Öŗ„ :ĀŪ{@3µGOQĶcQu:c‡ØDÖ×q‹“Œć,ŒA÷®/WE²•ቕŅAŸ¦k8²š¶‡Žx§ķ:Is§HÖźŲ±÷ėŅ>ų—Ć>–ŅÉŗ›9wVp=s]P‘‹‰”ńJ·ų“⯠½¦§ž“m G9•ˆņÉ8ō­msĆ£@·—LDK»hāŚ£~OAé[s-ŒfŒMK]ŗÓ¼5=īńŪ½¹ Ä7*½9ü«Ģ¼/ńBÓKŌķ5K”P«į׌Ÿ_jĶÄ3č x«KÕ“Ūł&ӒxLŽb:šŹ9ąJm§Š“kŪ`ņ4Ó?ɇ&¦ĆöZ\ōĘö6Ńüm i·Ł_¤`ĘĖ÷UGe9ĪĀŗÆ‚^o쫽+ÅCŖA{›†Ą č õėŌVŃó)hq>Ń|Mā=BĖNŅ¢·±[†H¢ØŻžyĒÖ«ųÆĮŚ·† ƒÉitė+Yć2ށ“©_§ŹęgŸxć^ųw©éP]I{_¬¢hƒn`O\’Ÿå\:ų+JæźņźńXĄ‰¹a,Ap(%Ļ6Ԇң‹†X”ć ƒ^ińÖKŸųLŽėR–ĪŹ×lbŻ8LÆ+IFĘŖ6<ŅūįŻÖ«éw}äWVą #ņĘ ĄŒŽŻ?ZśÆĄ^>Õnēcā– x•±ĄPĪ;žA'c#Ē(њÖ䋩’tÉŪ·Ž+āOųĄ]]Ę4ŪHįˆä?',Ž“ņ‘£įiļ#{å ,¦]ÄŒƒŚ½ĖR­tūy!’d•—i]½ éŠ¤Ļ šß„µĻüD³ŠVÅÅėĢ ¾aĄ1ēļ_f§…SE¹Ō%·–;¢VŒ‘–TņrŻW¤|6—Vń©­kaģ·‡FĘ ŽŲOÅŚD:c3B„røóÖ¢VŲR]Ę4%ō†4³ę2r* _Aj©qQ^E!+ør2}>•VŌ÷]W½¹Cœp¤0 ó€'åļøžufēÄ1yĖg©‡lyČćŠS#ĆW6śļŪ­yŚM«#Œ•Pz×ń ņ×Ć×Ļa`¢ķ¦_“Ė^GNŻ«kšE_c™šwõ[uo__GnŠæ˜Pœl/µmų–ł!·Iā¶2ŹĪ\ÉŠQ3NC±ų­¾§X]GĀĮ³“eIć×¼ßjz„„šŹņźĶ•ć *+cš8©S)č|wń‹ÄUķ֕įϧūEɒāå#$øīć¶+Ņ| āĶ{MšT~TF&fy‰'pĒōėTĢeŖ9kĶÅ>*ńčŠŚÄŗCm脙_ž>œ×“ųŽöo j÷:DŅ[ÜŪ3Cq"dŲśVœ¦.‰‡įŸė>ŗ¹¾±æš{‹‚ŚG%°_­} æqćŻāÉ«\E¢`“\zƒÅEcHė|#šZ×Ćsx~ļŶVzó[KO³@ķ|ŒK†åaÓ¾[Ōõb »ĶFšx8Ŗs»ŪŅØ£~É}§(°Õdš59Žžµé~6½ƒAÓ5)¬Õg¾t{æˆóÓėÅq<;Į^%Öõ{üȦշ‚ØĆ9?žŗļ¤Žt^āßĪ žØ1Ś4S½Į…Ū  ŒdpkÅuļ kv÷m7ĢÖģĆŹE;|±õļAjēW§ÜN-’$,…pXśV꘏²æ”ŁÉ%”cqõ5”£bĻx§Ä2é¶fi?~Ŗ’"‚ 5ĶxbIu)īnƜ,Æ&åŚxU'”÷ØŃnōÉgŽÖA:¼÷‡ł5Čjŗ{ŁĢ~Ļ]ü£”õ„)X„+#½šE³éšKz²2Żcc19žŗō’ŖZ»†Ž)īä‘„f݁ėßüńX¦p><ųĶi¢x²ÓDÓ.žÓn³(šxGŹX¹ųź.#‡_žßUœ‰åE*œaIģYę~/Ōõ;½Zį PźAQ·§n>•Ģźśµō°¬q¶#z‘׊„;™ =Åž³ ʤģ;6“Ļė_]ŲϦYčé1ø”1lméėõ§ķ 8Ÿ_Łź“‹ˆā‚€ģ;WŽŽk–š~£{q“XZ„IM¬ßĀCØ@ ȵDjĒ ÅrŚ–„uįÉŽĪõ½\ę(8?Ÿ„hŒ=OcųSćmf3=¼š‡•`釸±ÆV×üY!’Ž8n?ŃԜķČ"š‰q…™āž$ÕåŽż~Ęęvvß9ŲVe¦‘c«O³ó·ĆÆŅ©C¹gŖx>ŅŅĖW{¤“@Xyhr޽F[=ą,‘„UÉhŖ¶1’Ō㯭īī/af"Œ¾×UĘ6ś×?ŖųĀ‘É6©h˜¾sœR8ŖLp<ųxZ{+ÕÕĢM Œ€8^kŪüEw6­ąÄŃ Ć¤+"@xSĪZ™Š©žEąŻ&ŪNyąæ.±„-,€üĆ–ę¹_xĀŚö9ō½:FžŚm‡hÉ?ē‡ģĪ_@žņyŅįRL£ €½=s_GųwWÓõm ’-곤ŠčU±ŪĪ±’ŌēšźvZ½®”ąŪ›…~ŠpĆqĄSłW†x‹C›Āś4gyO03”ĻŽäÕF] ŠīxĢsŻ<óĀóķ¾bTņk§“O³Ł¢³JdX󚩣d¬vZz]_¤qĒ m£$ķųV…ę—)²ø„A bøV‰¬le-ō<škmOO•ln®2‹Ę½ćĀ|PŲÜMØ+-įQ±ė޹¦kb½×Ĺ“6Ņ6GPŁÜą’ v2ŚÅć-…’n$·,­"ōoö½źąŠQ<]¼5ØčsĶ,™`”å›ÕgR—P–{xöI*/@Ż÷5 ŚW;O‡æe¶Õ.ęģŪ1Nś3Ł®ö[Ėuwkc)k槚‰“ŸLś×³hŽ$Ńň°C2€‡$ŸNiĀŹ76ę>ξ\@s\ö°Óy®°<`łēčkXĘŒlq°ŁæŚŽŽźīK…s–łF0GJ›SÓU±˜‚ķcm6Ē'”‡żžm¤F ūG×5©%üņG¾XĀįp  `P+Ģ µƒ8ž4Ü®72Žŗ‹ŒgʆA.3ČķėYø HYm&D™dŸ—9zWŠ^\yڜÉtĢ0är=(Œ;”źß?ķsš^/ü;ńu$óĄ³q˜ĄuīNIź+łińŽ€|7āwĆ2żŖ“¹xa 3GŪ#­tĮ%ŽćHö"«”<ź½QāwņÜm#Ŗ‰^e°¾\R\Å+yß(’ Ī?­~ń~Ę_²ŪųwĀ6?—L:ƍ{yD¤ Vą`:“ÓšĪQŻž®DŁżDüń7ü'>²¹øæK™,¢Ü9Ķ“Óó¾žkSä!ӁAŪÉė\S‹±Ń'”éZ²}šnNÜ1ĻZę¼wć½;ĮšmĪ«|Ń:¤lź„ą“ŠˆSlą«3ó/ā/ü3Eų5į^Ūiöŗ×Œ% šT§(üšĒŸ•~1x+öĶų‰ćߋéā/ˆ"ŗ»»Ō.˜³äy99P„ņ@įq]“é[Sśżž<µc„CéŸxŽ~ģžŸŽ}Õ }©cæ*æ½āAčĆŚ‘WfŒÖpM§ß‹4¹W…ą–6čń°#ŸŠ×š—’xż‘õŁŪć æˆ4ß ÜŚiŚĢóĶĀ)ņ®÷å¾b8ČČā„I,ülÓ^īĪpZݬŹrH9ū×ß?|uxtmJŁīPű›l@„,ź~µēf–•ņ;ØĖSÖaæ°Õ¼5&·v'k„“ljیœēņØ”Õōė½1µ{{FCåķ–ĒzłŽ¶G\£k•&¾}:ėL½†H'YAIļĻ„{oĆĶzy ½yķ‚;0ŒĘ՜¶WÆ%¼²—×#µ5ļī`W‡ ’7Ž€W\v9%-KZmڼī—+ę92N9õ®±ī-“ūg·—d(yÉēq>†¶ŠģŸs‹ŗ‘!Šq" óśš’)t뫳.žņĢī€ńĒźES”4W2[-ŚŹū‰R:­K‘F­ü׳éĀÉ>B‰B»Ž;×·ņÜŖ“n6å01š¹2‰ŃéOw²8¦iO3’M{ž›C¤FгEq°™2qĪ{U_”‰ā^)Ń'¹ŌM“PĻ#ŗoO Łä ē“.č_½”‚A4d`NźÖč6kėŗž©„źYŽ¢Ų(dćn³ė^Ÿ¦Ū–Š E]]ĘTō'ŠÕ“¹Kā/čKT¹Ņ-?³`7)”V3·v\žüŠķ4„’ęĘ‹xZ* ‘ĻēXNÜ”©^Nžj2fQՉÅx>·©¶£­„£Ī?pÄ)÷ćükŅh.” źD‹ē˜9É?ʹ >Ī—¬#ĀČĆ€yÅ\#b%.‡Mcęjµ[²ķüė¦š®™ØčZ¢}¦ŚG²+¹dć$ćŁs4ĪŚ’L¼MY585KLåĒēšŃek»ØSb€0Tž„ÕYßS˵Q佚&‡ĢEÜ£=2+Œ°žžĀźt.ą0?(ģ=hQbLÕŅ“; NK‹™J±$ē&“ģ¬mÕŹ@WzžøéD£cX>… M­ žKKØå7gŪ““XRH[ķ.ʣߜÖ2ÓcR -fćLÕ|ĆȑŠĘG×ōÆMÓµ]4Å5ĶĆƼēʧ™Fę=ʱįęŗD©#‚wŅ­j–:LImØŚĻØ\ōęŸ;3•3+SכÉŲÜę@/·§µ`FÖņ"5ÉG‘€ĪGSWÜÉ£n";S ä€zWGįW³»»[bcĪĒqZ)4abhϦßi"öägÖ¼īQ“Æ=Ō&(SęgqŠEÄÄŌęÓļ.”šĪį g ÕĖ‹°–Ė Ŗ?õ¤YēņƌäąĘ»³J[HāI†×óe „ŅÅ­»C7)‚} bÜįgIw ‡Mˆ Äq#Fēvģb½M³ŒiĀ{†(Ėó}MfNc1ڹŪ, t5»Æ‰ko=Ü”<ęņĄœż)Œņż}­ļµ¹'€ŗ”ĒŽäŠ„s‘DlČćėEśŪčk+ZH“&Ē^žHśVŚ5„zī„2ڽ7rj¤Ķé#“žęĘ+čRŲłjF”­BŃ.lÖā ‰ ČÜć’}AŅeEßé#œćšļō›Č¼” Ń łQĶ\ec–jēQąĶnęĪżī#µI#ŒūÅ[š©¼OØ\ßß 6ŒńøĪįŃ)JęiķU@ŒF2į—ķ’į3·°€[ŗ„mƒžķėR>lńµŽÆ©\µįYŻ 6N1šŚųgāKmī妉žC”ŒĒī–ć4Ѥo±é·-kln&!‹t®WTÕ굉“²ž1VŸrļŠāķµ;Én>ŁŽGQ]§Ś ¶Óā¾ÓdVa¤g9Åij¢’yå6éu‹äݜżźÖ»ń}–…įū‰¢{āĆbxĮĻ•'.†]u8_O7‰g[ėv ˜C…Ž}ćZ××8»•UcĪqųԈ©s~¦ŚxĢk"•lr÷Æ.½¹דyQy`:榑¬6#žČMAįŠD]Žll¬# •{׉®$šž‘§ĖfŠŁīŒ`§Œzõā¦R±Ńm)õķ=ā‘¢Ui1ąƒßŠē†±o5Üń1%š>sÜŌó™Ź&Śź[t牋„o˜Zäµ8ƒŗ K`|ĒØ£˜“ž6óĖ“G gR0OLWu¦Ē%ä[Bū@;@*yz;ښ›vh•™$ĻīkÆŠįy¬O™sp1œV‘]Å)}œL› @F2:fŗØn4Ż: /Ś[•<(U‰3‡·×.õ;‹Øåx¼™ķČē\Wˆ¶›«}+gĶ!õéō¤h¬q>&[ożžÜ+ĘÓ¹sÅUÓo®me`R L•ĪIčhŃŚ"ßV·Œ\AĪp QÖ¼F–:’N©Ȋ<Ä<€hi‹™\‡BńÖ³Øjö‘D‚ę"œ‡éLųóų†ĻUš@““ˆ†ćµ=€ {ģwŠxcY¼ŃRylɜ`ŖĖ}3NQē†Uó|āH„ąIÉ C¹Āų›Ć–:ó\C g”‚ė¼œ}jÅŗ“c_ŻTŹ]‡ČnčŽU¢ŪL±žXõėSĖzé<ŒŽķ+}*#¹œ•“*jW³Ī謇Ą§ŸMŅ`’Ņ>WlĀPĆīÉÜ ŲĀ[6“§L¶SO%²¤óųVļ†ueŗ»m.ń ĶžH qS°ŗ[xćo!X²“Šuä^ »yoČP£‚3ɬ¦vX-ug·Š¢_0±ä÷ZeĢ^iljAČļP)Fājśõ÷”ŚtŁG*0q‚+•¶¼»³u¦(=x­`‘ÓŚ]C{8’B’66sZ?Ų×vŅ‚ eORjĢY·£iPµŪ™&gG9ć+¶—J‘Ąčc œ6§zRŲø Ōak£›iQ ē ĮKp-\Ø]īaĘ°:ŃŲŁµō‘ĆöØųo^ŽÕŹųšęź-oM²…’=9‰3³g+č3õ  [ūY"Š2ČvīČéŒW±ź®“|ņpGZ„wbtø1#'½ihńŖ–I Ž~ķcaVKį€<¬ēv:Vž«–ŠCLd‹P;WžųOµUŒ“ŌŃŃõ›Ø¤-¢7ĮÜłź;×”h>*øX®ķå¹HćxŁKw1ŗ¼×ÄR. jĢwSLĶÅƟ¤½¼F=˵ŽGµZø±– ÓAƃŒÉ ˜ĖøŪ}9īwµŌ"ń“žjž„ £Ū§öy_7© ĢØŚ}͵²G;ŖGQÅv:Téõ„įŸXjGÉŚĆĶÉę˜ŌQźz÷ƒt».k `’$ć'=«‘“žUsnģŁ_—'½&‹'ńN”sc„XCgŻ$ø‘•łzš”£j.na³µIeR3“ɤ c9Fµ©%֛s Ä{ŁSjåyȬĻéĻ©Ł4×"Øm„ įOŌÓQ±Īät֓ČnģķH1Ŗķó²+Éģ“żFßY[8¢gV%¤™‰#>ßįLJ,õÉ“»”…nå·TfĘ⟄yw‰Ņ4vy|ą1Éęƒt¬KįĶJņŚĀ[S'–¬;xϱ«\}ĢŅĢŃ+#`ԊmŒĖ¹Ņf›QŪ# A÷ÆHš„Ŗ\E!šsÖ 3š"Q¹·©Ś˜¼ø‚Ęˆ=9a^©h2ڽىŲ$’±^s‚{PdŃĘŽi’#WewŚ„Ó[\¢"§#iz֑ÜV= ļPX¬c Ē p*­Ÿˆå‚įe¾ĢIłąāŸ(ŪjÆyØŽø 6·ŽģĄśRźZķ¬²5Ŗü‘+!©ä±¤§gaØiö°„²XŠņAöėYڱ9 DZłc.ĒE4bźwo‹9”,§ę\ŒóWaÓäL7')»$Æ)ķQČhp:ѹ(ÜŪFxźĶåż„©jķ ō,{V‰Xę¼¹Ōbƒe²õcŅ©C©ź¶,1ČeQ!!_Œ ōŃ<Øī¢ÖÄ© “TdzÄŌÆ†”µāM©žĆ„6-X_}šÕā³WóāBå½y·•ut×wĶrn ¾ā šæJRv* RKo>ĶZT7 `ō5蚊/<=§¤FŠBƒ9#öØē6±ėQųŽmn×s˜%ćnįÅkĆā{8L©˜ŽN€ƒB˜„˜ŗŽģ¬.ļ­mg·ŗŸSĄ'޹=_Y„Śė§ó*`ž49“ž#}ć+»«łŪĆ«’‹²`¬IVō®—Ąš‚Ź%ķéó|ĀĢdŠMirĪŹ_A5ņ[Ehę¤ocŒŸ„sŽ Ó×_”XD^Gl“ئć`!‹ĀŚŽ‡,wS¶Šæ*ńjäu ?Pū}ćÜ`Ź\s÷…@ “ø‰Œ›]W#5ŃéęśXį’īe9wō†[Öµ¹“HYŒNQpZØjRčž!š½åŹßEō‰„QÉ-A\Œó&ž éŚÜ$·6’g2žŖ23ļ^G©ĮäĪ<éZŚ\ cu;üĪ6mu-®īu^ųĆc9Č<€;cš­Ÿų®ĆWäµVYŠ‚»æOB(±g»Obś®”U“WĪüAś×Ģß¼1‡gŌķ® MV)¶€¬pĆŌ‘łR‡'LѼ?q¬m”¹y‰6”’rėŽkÖåŸĆöV×on56`ŒćŽ“vßü]š†oŖźRŪ‰uČ-¶‹ĖȐŽŁü+«Š|O§üDūŒ5}&ŅŪXxFõuRќcćå9ˆ^ »ŅŅ=[L“–++¤ŹĮņ¬ĄśSžz|ļćBźilōw¹}”ļ¼„ēŠ†ĮœĖIrĶ mņć^꼑ļ^ēį=)u .35²™ē{ėM[ؓ<ā—‚µmkÅZ–ްZ“†UV”£rĻŌ“cŖŻ™mądV?6:ėÅz†ü:,oÖUø”F"ŁåŸŗO\żj=˜9t$ńŸ‡“MoP³ŌMøQŠ!t?ė1ŠZ£Œto鉦jpÅöt—vą@)œf”«ĻńēŽ±¬Z˧˜I†/+h|’GOėł×9į ZĆ[ń å¾”göPBdhüķžc0>œĪQź~'³Ó5{ĖYm%ū«}öa±Ē =kŸńoĀ—ÖŅÄéF<[ĒĒ+ĻwśŌĘ#GŸj:~³i}=Ć ]„`øRI=‡zĢš ¦‡ éµ[„Gv2Œ8Øk”¢™ōŸ‡t jś5ÓLXĪēĻß`>č÷?Ö¹ų0h޾Õ-ZāāuIŌĮŒaµg(Ųµ$|ļ„KØų›NmŌÖ3]¢ļŒ ?Ļå^å žĶFŚĒIŌ|P·—2N„ŹcTėŒ/õ«I"¬QÕt?įöœżž,£yIƒ s)üśWųŸĘzę­Ø[!Óā‹Etf2ó©=ļZAje*g?}£jwśD–öÉ/ö|¤DĪ 籬øžĻŖŲ¶—ŲēóBł‹QĒjŌm¹ļ~šm߀ō tŪŲįžWŽåŌäØšW™ŻÜGāG–óHQåDLBM½é8„»įż=ü)gÆtöĪ„Nå O«\vńWăűĮiw}Ć$\ž@oėéX‚IŸh6±į½O±Õ¦¾ŠÉˆU$‘óIÜš}jˆ&Ū]š~ægīØź·VŠm›ĢßĪ:qŠū„2¬~w7Įmz×QŃõ)l¤ņ¦bY•ņUĒ_½3YŠõā±·Š RA’{óŠ~5¢wdbxOį£ć_Ol–ĘÖŌLJ–B&§Ö~Įą+¹f]B[µ·vX}ńŽ“Ȕś<1w(¼»KµX“ ĆÖ¶.5+;;ųõcd2-ß  tęƒtiŽx$±T&5²BĻ æCéXoāxµ=&ęśĪAz”xtlć­K]ˆ»0“ĻŲܼ0Ė”ĪŹ„/%N;פźgKžÖĻ͚ć˜yHNJ•.ćIĒį7Ó¬ÅæŁŸ%l‡śį'Ņu'¶»™ 3D’…,žŸČžUiÜé§±·į{ į”[ŪB<ł›œqzęüUįkŃws<šūIbv·$52Ī“Įń+µ˜ŌÕn.£q‘Ņ“fŌc»ŗ»ŽĢc!]£œPL•Ļń®‹¬^Ü4¶ś„ūCįćA÷«ēķoMæ[õ“[yŽįˆQŒsփ>F}_ąßŲĒ-”­{ŌØØH^»±’?•ėšŽÆ [ imķķUģŖä‘ųŸjSgšh^:šÕι PZy,ļ“܅*pFĻJōŸx—M-r֎g³å¾ķĒ×5Œ¤Ėåfm¦© öp…•­įs°³g¼ļ^°“Qž;1{$Ź&ģjCgvsš¬5gŌJK¬M.ŸØ©•<óõ­-WƃKHma"8U¾\.ŽkUĢåfbj~5Ō<;c©čšz[,×cɞRåśVGƒ4y w¾ūE³c ½/fG'Cčm#J¶šō‰&­tÖvGœŗ§©ĻxäxRæŗ»Ņ§c æg* ™čO¹äŌŹ6*1čŽV}oWŃtō¼¾·ŚŹŗņązzōÆ*ŌüFŽ"?ŅVĘщ؄`ō¬¦śĘ'{§k:W…ōŁXŌźÄEæĶ…fĶq—ĖØx²RņHä`„sĮ=ŌöØ‹Ō™FǦxGĄq覅”PXIrØ‡Ļ’O¼Łxēė]ÄŠŚ7‚4‹M ßY”‡•¼±/8äż+®čAé^Ō“ÆiZn„¦»ĖŽ#Ņ”ńēĀ}Ś^æw„iļ°bŪ»sē©"“ø+Ÿ xoĄž/Ō¼Cw z$Ķkgp!šU9Pƶ1_`éZv£,é˜ŠÕcĢBU }ī?M—ĢĢļxŹm3X¶‚źåÆ,ćŒĒē©į0x’ž+wĀ:Ļü'Nņ<3£%Q› 0}1X“D™å~,šē‰õ FöćM³’.C¶>ńõ>ŻkĖ.Uģc×8oCK–ĘRFf§s}}åŚZH@Člžų¤Ó4Ł£½)3—™Žļ˰¤c)3®…nšöŽ2’G6Xć ÆX¼ńÖž—LŠł’É —¶ŒćĒÆČWgŽˆ)„ßZYÜł‘9É/’z©ąŻR¦S4ČC»Ž¢ĘéŚęiq$²[“Ø3ø7jó’ķį=Ōė¤D|’Äē= #ź“ŻAqq#yhØTźkŻ|,ļilcd± š½żź ŠŒnw:®™}­y%”‹oĶ‘×Šįōo„v–zŵ¬.°ź:„Ū÷Źy'¦H­N˜Å/ö$žÖ.­5 ,Tl÷9Æ*ų‘ć?ų™½¼ ŅĒ„ø“އążZźēU¶#Ÿķr¹"œ!ÉēŠöA«iÅ.ćž6˜äćļAš‚.x]:[Ė ’Ā›ŗ®9©}yk©Ķ on§aŹ`qARV<Ņźś%Ö³tŁ!ĘbäąńĶI}$š]¤‘Ūł“\`qÖ°lÅīy¦nļ¼–¹˜HŠØqŚŗ =M“DYeć†āXōż k«8uÉ ņÜēŚ„ŽĘ{›g™ĘP0‡©’õV FåÕ’öF…$0Ū¼ņ$ćŖūž•KĀ—ŗĘ„§Įo2ˆ®eŖŹĒE\#ʼSįTе–¤¤;:ī&½ūĆ©kwį‹Y"½Ž×Q-åķžń’×­yz—ĢĶOĄķu,’ĀÓŖ«FŹćÕåņDóT`ķ?αqÖÅ{C™†ö ?c«m|kjßYŌåµ:Z[dåF+éļV Z;M+ÄO¦Žj1ZĖØ˜•³ќ`ńLWĒ~)×µK›ō‹SŽāŹe'j¼ō«TūŹĖö\³AŽa@¼õĆcÖµõO[ßč0j‘jp­Ź1$dŲz,"? -ŹŹčØžH\dw?Jźļ®dGg“|xōjq•„ZŅ'µŌ+B°FymĖ–Č­ĖG‚ Æ%W~[:Uó¢e+׹­+ėåŒĘ‚=„„lņ w®‹ÄI„Hģš_³Ä<°ĢrIõ¬Ū¹Ķ*šœČ“¹I!V€xę°Æ “ŠĖP™ćŽåp¶óÉŖƒ4„1“ń4‹ö›+ø@ģ^Ćń®ŪO qož›9‚&ł‡ś±WĢŽČĖ”ŹėśnėIÖĘōg=ż«Œšē­/ēŻ$žKŁ$xłŽ{ŠŹUFę‘īVžšß‚ķ£Ę·R™0²żē8źOłéXڜ¶Śm¤2ÄŠ$Ž PqĻqY¹³Ķ xœÜZK ŁY#S½Wh뚳ā;(5°-#żõ”"g˜ŲŽqZÅj.Tx®Æą››[ --$’bĶåŹĆŸOĀ©7‡®­mķ ՙķęą8ĶlU“¹éśśe¤Ū4œ²±œÕ½NVwKFyąĪ±Ž=Åg8™É؁V(”'ŒF c„6-Jä{{ēo“Ó>ø©åbƒyį£24²× dŒ±®ÓE1[Yˆ£fóx] `Cšø"āĶ)¬c"G!Qóg-`Ü ‰ZŲ5䤅üńVLŁĮ\Å!IKłÖŅ“Œc’­W4»ėm2)¤øŽ#`Äćęaߚ™D‚ž«6—¬Ć,š@ÆfIłXnČ®b-^ŽŹ9RŽ¢r07/§ėXš¦SŸÄ ‚©1pŪ±ĄÅ_Ōü_mÖ?ŠżĮŒkĢg”źz”²yo—n@ź+6ĒZŗ–ļ0$zŠŅ1¶¢nĒÓŌ.ÖĆķ³‹y$u(QĘ÷ŖŗĢ÷Ö¢xē ąUĪ=źĀä>Ó$ŗ¾+ ŽŒ3¾yļž‚®x­lutʞ"„Će+KwZZj˧Ė7œČŃ(ėžµµ¤Ėg©«Rėž1Ó4Œš:ČōIäxćHžaó ~~µcP±ŗÓq4r‰ēw@rœåÕŻÅø€®§=ėšŅ“ Mręk™ }ŹKģ½…5ęk¤OÅļ„$žĒĶPł•ūĖļ_ͧüąv·į ~Ūų^;ųÆ®Įø¹µAĶ©@ģ+s©ī~\Ml¶ˆˆ‰į‰ĻQč*²ésź&m`³¶}č3å{5M!ōėIP³3yduĘ·ė_¾’šNŸŪ#KOƒ:’Ā"G«iÖ"ĪÖą*‘:óŒü@ž¾ŌœNŚR²hżŸż“uĶv‚MA­ÓHå<¼«L;3vč+õ»Ć—–w–‘Enė*`c¾+šq6”ō=/Ćśs_O”KÕæx{"÷cģ~?ž×ß“×Ā}ā^¹šĻž1¶Ņ¬­ŅH¢¹Ž_‘Źē‚GCš)Įœ'®‡ņæń;ĘŚĘ»ńÄ•†°fŠ äjˆłI olśW§ųƒWŠXo¤|ߌĶēDć®AČŗ’Š!#÷÷öż£Äś6gu5ž½XīˆGϳÓ5ūūšćĘ]O1ž"lG!ˆ¤õükĒ”Ńč{dØlŹ«ČdĄŚĀæ7æą„’²ó~Ōß³7Œü?eb.|k”Ąu "P¹‘—?2žśÕĻ(Ų— OąŞŌ|#Æk~ÕVń/-.ZfF¹Åcż‚ŹŚĘŅÖĪŠ}•I;”}āÉÆ”œ¬Īßi„ ĶchV)GÜ5KĆ^1ø³Ö-4FSūĀA,pSÆć^®ƼqWwVgÕŗJ.”jŖ”ŚRp~µ…‡7!‹ļ ń“ĢQrHą×I«_ŲŽABLŗŖ¶Vš} d¬r C$ŽĢŹ2F:-v^¾†9vJ©ƒœ“Ś“nĪžśĀß\ŗ¶µKĀϑӂŗļ xjźĢGÉ$Š©fŪ"šÕ.gDiŗž“ØÅuÄQ ōĪ=Ŗ–žńZ^Ė4~R*¹īßē5E5cĻU]֞ƿøŒB_· ēō®CķvńM4ė*»ĒÉ pżŖI¹±a­¤HĄešQĀž4iś{Ės$±ZÉäØĪåŽ{øĒ©™sĖ’eŽ£ äVäŗ­õņ5½¼ū%qĄ`/ҶŒn(ŌčĪŖ'‰­­ąŌ€ū@wƒK–ś£:Ŗ£)ļĮϽ+1™…āŪuÕuIÆī LŲć"­hŗ¬rÅoj4_”rM\œŽŠĻIÓg¼žkŲ y ępA=ÅuvF”D°ˆņYģ=j¹‘Ē)3É\q+6ąįO ÆÕ·Jļ¬@*ūKǜłž[ģevlé^"kć½āEē1ڽ·×u?…­’ćo–¬>^9õ\ˆŽ/©ŹŪA:°·³Ź\Ę„˜Œ’~µ×IŖźŅŪ7™ ˆP`ą7ŠU Å—ü$śÓµ-9‰‘Ļė^“¦jOØY(•ńsĆu“–Ē,ŒWOŽ9<Åx„GäcųOųכj²M Į9I,Ēž=)FV1L½¦Ž„¬lɄcƝk]UŻVęø¹KŪy &܎k /éwļ¢Y!‰#”’„gŻjwLÉ 2¦ķ¬H fž“2]ŪŹĘ}²1#`bØĆ¦Ć4¦ŹŁåŌ$Ų ēŠ Œ¬UÓķŽŻ£iAyēić½7ā ÷ö—€ĢG#Ę^"]W-ö>ĻŅ‹{Nˆń+ØcV¾sŒņЉć/„ųdĮÉŌ¹lfęö/ėŗØ0Ƨ—xöŒ–Į«6W†óKŸy%£?6—(Ō™cĆŅZ^:iÓŹWq?7÷Ol×§ųvĪ œ]s“‘Ōöص‘zœ7‰ģ]®mŁ\Žy«ŽÕŽÖķÅŌĮ7ĘĄ}qŅŖ”‹GuvÉaf·ĀrĢŖd$Õēsų³ūKcŪI3EŸāx?ZŠ‘·§ŻŪéŪg–r š}ø¬«éģõMf Z‘% •šŸJ,l˜xź[-}ķ’öŽŹV„T°ĻÖ¶4ŁŽŲ[y&+—+øå9ō­¹BĪēM©ĘŽŃ.ķ-!€Nė‚Ģ ķJš84™u«—&2Ūßi%x„)«XøS=³Į> Ó“‹»[émąžxÓœdVŽ»'„.ļ­u)­­§––-©‡ņ˜3ü«–RģuƚGæC»“¶øA¬cĖĀFN+‰Õe¶³™®'_-TóŸā¬®ZXłƒĒž'Óõ}nķl,¼»5”ØJž5ŹŪĶnŠbfłČ\v¦dt0Ģ« (‘Ŗ¦zŌöš<Ņ\³åŁ Č#Ö­@MjREqQŠ)żč=j…ķ±Yh*Œ`V‰[C)-Mæ ¼÷²9~ź3“ƒ]TŚm…¦¹›Ān8ėJb7¤2ĪX¢;™\“ÓŠšĖ˜¦·œ%ÄĢīīvī9'“Åe%©jfķŒ(%Ó…+Ž}•„ŽźŹ8ĘxÅÜ£ÆėjBh”ŠT]»”`µrww>e»A÷r{ޓӱ.ōK—[輕’L)ܾøļ^ĶĆźöŖ#Õ@ažI÷­Ģyz‰šßĀq\nM]ÖÖXĄkpXa‡?Ī·µwŃ­dŽŹāļĖb„üøbxģ3C™Q§ŠńMYngÓol–āDVłF õŖ¶¤iģ²Nķ'•‘²VŠõ}2ęĪ]8ČX7¹ź+× Žöéš6ł$}źtśvęÄ ‘AB0µVø°Ó"‰ģ–5_,{P3ƒN2Fó€ # õŖkl÷ašp€”Pqšv'öõ½¬W9Ź!—9&‘ōŪÉĖ4jPF»ŽGZ®W±…ŒÆ¶]ZyQ²Ē†?7Ņ“ķµ·ķbX°`„IgAoØ,öūšc–8Å#,ó)„|čG=ĮöؔKŒŗ76v.«qt±É2 ŖĪ9_\ē–ĒĖ»ˆ² i8ĘiIčmčo xæMŃÆ$Ó$Q²X ˆ*ƒ°ćœ{×?ćŸ^xO·÷_źW~Ė6—RxĻązÖf¶G)ØxŚOX‰d†;I¶€BÅyަ§jĪ$_/Ē8ŖŒYŒŒ›=^8.b†&ĢeKy’>™­='Ē6V×:”k dcoŌV†v1õ+»›kvRŌŲĢś)mASlŖqĖŌśÓ2±±a?ŪĻx€”äńZZc„ŗKi²±l\Ó0jŚźĶs¤ZÉ ¹V•łį»āźł’ŅĻZ¶‚Iļg(2O֑²=¶ž4Õ hl”ŠHĘ_jŽ‚¼Ä>Y”^]ĆD%!pÉ©r6ˆt³Fއrø„B6…>[ƒ×֎`qźt‘iÖŅŲØ–ā8¤Įb3Ė{}kWĆĀ+0óy~lXÜGJ£žläšĢĘņ-Bü\ŚŪ©;a µøČēŲńCCŒŸCŽ5/Łx{AŌoµI£µ„+l\ņĒsھvҟV1ۊøĘĢŽfv> ŚųrįÄq]ŗÄĘKfnUöœ{ņĖ‹ž/¶½Ńć—ĮŃé×{ЇxŲ,‡œ˜'в£®ę’…|Q©jz„ü:ņ̌ĪĶ!篠Ķwņ.¦ésj–ö’VłcU`Č”„ŒÆė.śhˆčNs‘ķ]w†ÖēĆZVŒ’źŃźZżŅoø OīOCłśSQø)–üGć8“Ė»E•"1Ą¼w=ĻćY:÷ŒīüQe¦¾›§Łé–°F@\ĶžrA÷­b„qw¾7ÖtĖ[-ČNĢ IåńĘ9lžŌO4WrŻź’\łkīŠr {昚<ņŁćR•ZöŪ÷±Tü}b¦Ę’Ā µ•ŒpĶ!ĀļĒ@}y —Ld:=³hÖZcĒÖė ĶüĶå²d’ąu5Öźvsź+¦«Įr…vł|€‡§Jųtz6Ÿ%Śé°ZF͈”(ĻL r+ėŪérÉ–ōcžł§ Ͷ5ähĻq¢’Ś]Ä8mĻÖ±!’×Q֓[„鎯”DÜ'N¤wč+RŸB½Ž½§Ūj1Ų›)å»u/¾#ņØūÕēz§öÖ•ÆŽ›[™­cv…;Iōa@˜¶×WZ—u)’_˜ī,sžj™ÓtŻNkėß,$ĮÉLõŌw#Óo/,/­’8Ą•Ī[n=Åz”šD÷6³O|‹˜ÓĢ žX{Pčóm;Āž ńÅÄözaÓķ¹eø”aqŲ×EįßjgHŌ"{¤k„c,€œ9ž’*—‘™q©¼…¬miUküø Ā¢z„[CØ$¾ß3ŠvĶD£c)Hõ’ [_¦•ypóĶvå.œ}ė#ÅvŖtéÆ%‰Qqø±=(ƒ0¹ņUÜiØźŅ_¤ĘāÕ9ߟ»ļ^Óą6ŪwˆåķˆĀ·<ŸZŌøĖ¹īŚ¶“>±jŠŻ¹„Ēóyn㔢 ĖŲ ņHī8­c”œjÓ'Ó4k”Ÿ5»ŲƊŖÉaz~•čŚV¾mØYʑʊcįĒ.Tą‘Z©˜ßSĆ/µ±moŖ›KAi4®ĮČM»†y?×͚’ÄmUnīaÓī$“¼L|£ų‡©«±¼csˆŸÄzĪ©åŲĒl×ד8 £»3_bü$š¶£ą-Ę=IĆj’ ØLö>õ”‘RŽ«ÅrĮik<-µ„QKėiaŚŁĻR¹¦c(ō=.ēPņ™8Ü7^¼ÕOG¬éfŽ>“ĖŖćę(ĘĢņE—ÓŻŠ0ÉĆJKeæM8ź6Óle;H ĻCŠŌė„NƒF·¾×ɆvPłŲžc§Ö½KĆ’šŃ ‘eœņ3«A^ĢčuŸ ^Ś;]E{u^ÜEhxjW·PŚÉg;ÜĢųйĪ8 ‡NÆŁ|9`ĒÄĶ˜Š70”Ąś ś×Ļ~(ńEö»ć×¼h¢ĪÄdS»iüj„%+jcjZĪ­©Śź¾½q’|ķĆė\-߅ōķb4ŌVCutķzÓē&R;χž½Ńuču ģ”·‚3ņ°9foį;q]ÄķW[іĖP²³KcĖb!å“ŚŸ6¶*'˜ųa5$‚ėQ¼š72>A—¹ā½JŅĮ.4ąóÅäĘÜ«°=iŲćŗęŠ–ZŪOĆĒó‚Inō®Ā;A4+pV3 ‚–ķļ\ęR}Ļ-ńV™dÅ’k„rė·ų}’S\ä֋¤§»›ĻŽ9$Žk9^ö4Lō›éŗå±KWRŒü7B§µQ‹Q¼‚ā;x’6}¤3}ßsY…IVіhbĶpĢ—8 Ųä`ÕéŪJ¶,®#fÉ;TTsÖ“ƒmtˌ\_›k‰’ČO$õŹų’ś¾Åoūö8Ž$éZÜRއwįOjVžšO!y™y#¢Jåµ9tŪ‹‹‹ÄUšęL$œōõ¤s»ō*Cmc‰n$H‹0)V֗­„2Ķ{Å)Ęx"³Rīou?š’¤0Ēwm4RøŒ³!ąųWĪž!Š­|IŖ¬÷–ˆĢ[x'{VŖV6שå~3“½Óu ‹;a%½²œ.ŽwL֗ƿW¼ÓµŁ#Žźż„^dQ‘•^{šŅĶ”“Łčz†Æ“ż9ļ5ķķæˆAY³¢jIŗä«äwؔlfÕ“4a·K7½¤£¾Aė]O‡4k½AT†ĘV²É;äRļYJf2‹=kCž=2Śīe‘c–D "ŸLē§Ųź¶Z„ėki$s®ppŁĖTó³Å›:İi•¢’r›¶œsŒ}kĒ<{ÆyZd1Z‡;Ō–  >§ņ«Œ®ģT.šÄŠXNŅ]£˜·‡a!Īź¼EćˆuK±„ŖB¦5Sƒ÷°1ŸŅ­#©2½’Å’ĘÓyˆ’3e³·ó®;S¼f³„ß+†%%ąŽŻ(ä*ĒYm;jš†”©“Q ;w’TgŒ×ć Bk‹÷µÓn¼÷ €ųą\QŹĀĒMįū«ū$X”H·o¦F+ØŅļ®ÅĆŪłę NīnqN:2¬t²]³ÄŃČß½wxČõ“Æi°ŻŪG 2Ķ:ąōĄQėUĪeĢö'ŠfŒĮå2æš$g„^ÕÆģm­ę*]°0[ ųRē"i¶r+8ž2ˆäÄÜdė¼=įM3O–=ZėT€±r‚)Wī pĄžuP––4‹9æų¢ĘćPæŃōøĢ×·Ė1CµĒØ5‰e©Nó“2’ŠĄ9>¢¬Õ3¼¶²ŗ6Ļ‹™$BÄܜTÖwg ä|„É${$=ČV$“Į4Ę]žŸ_|(ŗ”m2ĀóS˜±ÆĢOŚcąģž<ųsā}āծ綶pbēšü ś‚EnŻä¬*)šσuł¼#z—ė0–EHī°dE =iŪŚĆd¶čP,ƶ1Ī)‹œĢ×tųļ”p‘†ldŽŁ£ą¾¼ž ų£=ĶõՖ˜Ņ“—S#DoP(5ŒśÓĀߌćKŅ<¤ŁŻaõ $"Śe`¢h‡=1Ī}köOö>ųĮcńoĆöŗ–•ŖŁ“”VUW|NĻØ?Ö³ö`źt8Ū’ž į?Ł÷A×>ü(ń’Ä;«|\݇’@x1‚:1䒞?‘æˆæuėõī„}s©ŻĖ9g–y —Ļ$€zu5µ*z;œŃ•åsÅWXA·2Ęt款ÆåŻ I‘ķńĮŪך­¬uŅŌś_öeų¶ß¾*iŗĖˇp‹op» Fr~Y  š9Æėoą£×<>fĖ Ž,rCŃĄłHśƒXUS²0ŗ¹śį=[ū{F†{ƒŪāżŌ譜Šž"·o<Õ“-lŲ‘8t#‰£?yO±Čā‰pģš\ŲĪ’į?Ē;OŒµ’uäūSĪĄłvÓ÷Lz{׹¾—u-tK‹{»I<õČ$ ž¦“JĪ,Ś0?@åńBx®[c4’Ė Œ}£<}kfKó¢ “æI’ćxTąq_ ^•›ŌףŲģtÆĮ=šŚÜ¹ĢŽ`^ wĶMyį6ßQMjŹ!<ŹB£Č0Ź ŅÆ U§taVUųjM3RŅ!½±DŠįqę.r[Ķgx yņĒ0å'vNG^:××`ė^'Yt7LĀČ$^sޣޯ]jléå0ÄŁćµz°‘É>Ä_k·š)<õG‹9Øcc o%C!gæŅŗ"ģa43G½y cޒȽ¤³}Ąt t­dō"®łZ„,³Lõē½}Im©Y-¤¬‰æoĢ3܊ŹĒTC›ÕŻ%żģ*pqŽõåŚĶÅ»£Č”P· ·„®gR]Žg\ó/ķŁą³d1’Į€Ī3^dÅŃŽ!['ŠÖ1±Ė)“E ü[˜d1@Ē?ļW¹ųZ[ęŽa^7o?{č+hDÉ»™:„Ō—ŠÅnĄ3 `ō$Q#¤H²ŃlĻOā­Qq·9vśčł°›… —>”ųu­Lķ’ķ€ƒŒņh:#ŁŌµ­FkV–ΊpA8&ÆxE.åK»‹ˆä¶m””nšĪe%­ķÖ³e:Évcdv^ø#ŅøŪ_hš”³3}¬”ÉG8Ųx¬Œå$®r:ćO,­}#¶öĄŚĒ€>•_LÓ?µCĒ/Όy ӊŚ&;?Ɩ²Į<Ŗ²],p÷×0ŻĆm4pļÉĮ(®wTÓĖG,ńBļ RAżØ"HęąŅ噼9ädōÆ@ƒL·¶Óaµ„Fąó,Ļµ£›Ö4&ӝåӜʒ|mļō­}WÄ· c¤BŠĖ0Œ+ä[ŸéŠ,_9n8Ƶ o>e·‘É9ĒO„féŚlZ}Ō Ÿh”—„d8«īt†{‹Ų§¶ © uķ\Źé†-ü+uŽŌ&W)i®`µ±šĪdKĖ€I?)®MŻžuGu?upj¢†jézeõ܂c#3;ä×uā j¶ÓH$XP®ˆwŽ·°Fń"6¹”Ü¢ŖŚ“ŸĘ©Č5—įĻ „“_æ·f#ų˜ ŸSYĢŅ •t‹ķNÖóY‚CZ²7’øäWq§éŚn£$vMåļ”O ĻV'­sJ6:£>ēŌžų‡”Yh3Ųßʏz£0¶~éłW|G×/µ›’bŽŽLI•ļŅ %cŒ‹Ćś,ś2°}ø±ÜæĀG×®kŽ»š®ß-­ŌļÉsŌUCs2½ŹĖeb”įBĖø=ė_Āž.³‚6‚ü¤ «ĘļjŚĘNgA*Ūs0ŲÅĪģžõƒ Ķ«źQ[_O(ķŽ½W×õŖQ¹Œ¤ixv"ø¼ŠŁ›ĖÜ\óŌ×g5¶ūQv¤h¾žGŻ©%O¹‘kwrūJ…RIŪĻēZŹ’aÜżæl“FķęĆ;FyĒųRhµ+ž¢Ś&±cö1™LčqŽ¢«xwįö„ż®5}Eį€1hĆ 3÷G½O³Fń)x›įüw¶©mØÄ$XĖŽæ”®7Sšžž²G*’·|޼ŃģŃF߆4ƳD·bŠ–e#§JģķmOŠ[ø‘Ķܕ'Ž•2c$ķ”ŌhZæŚ£ør!”øŒ{W;®]Fڬw‘Ø™‘<¬śņg#Sš›ķ—^l{p É+éWģ`M6ć˜ˆå†CQ6‰,<@²0±äw† W”iŽdwĶD²ärkK’Ł©6±ˆkĄķN[°"±TA{bu 1ē,¼åzŠ%!žÓ7•†į(·cęķõÆi§F‘d¶D ņņš𨲉Ól|S¤'ˆ57ŠĪÅ"ÜŪ€@NŲß­$ŠęÖčłÓ\ń†Ä©o„Ü­’’Ä™į[$b½=bąXÜÉoj³ŹcʌńTCV<ĆAń.£§kĶ«j0ŗ;nO³æĢ¤ž+„ŌŗÅ÷›ŠI”…>Ÿ…>^£R0toÅ ŠkĀ$†‡£]Ļ'ŪtŁ]Yc%”# Œuü«ĶüAöx’HC¬­ø¹AŲę±±¢•:»Õ®åhķ#ĖŻ…¹]yuM>h%i$1ĄW#s¢Ž[粓ŗ¹A:gäćßŅÆŚk²¬Oj¤½7„V‘ŲŹH̼°WŃČĶ+żāGC]6™įū‰ąū=ėF¶äŒg­kbu1é0Å$ŻFZŚr88ķ\·Ężń?…­5MK³–īŚrģ ķ śsNqźoę»]NéR܃=ŗ® ĘĖ‚=ˆÆRšø¹ŗ»“2ØHW/œsYŻēÄö‹©ÜEūÓ$øĘTHõā¹]oQ‚W‹O å*ǵ™9ŠŃj«™5µ”7x=jŒ6÷·6ćĢżćž˜ćŌ”ŅVĘŚ[ė˜Ū|`uā»+L[½9.ćÜ©'ŻČėI±ØœÆˆ|5yn†G4Lüxšļō?Ł,Ģsn* ķ`4ŹŃž0“QcwkéŸ2²œŒU=?Ęwŗ^„é0ŁbXŹŒ“Ž‚ÓAŌt»­3T½µŽiÄźēĢRsµ³Ś©é=¬ā{ĀžS¾Ę‘;A8ü:ÕHöĶb ,ü/wåLÓŪŗmfC’…xõ®§ %œpĒż©?É‘Īģt­ć±™ŁxYüIzś~›ŖÅn·Šæ”»½ĪzW¦K£Aok%åō‘y>a]¤żģu¦c-ō*ėz_ˆ4Č­a·µDŒ† ”c”õåχÆ-īōYdX¶ao¼~”GĢą®loÆu=#BŗrRy6“Æ÷V¾ˆŃ¼)’ž…kÖ–Ų¹Häo¼@ĒųŅh£¦Ó,>ÓsŸ1¼ū²Ž3‚}ń_Įā]V nćk«q,M|¤Xn7{ąTŚÄČõ]zż/o-—Oģ„ī1†ć’ÆY:Ž›%ļ†īb–)c_9XNŻ#µLmŌ|½'UšęŽśr걘ąŪˆÉwɕp=+" ZÅbÓŚ83±Ć LŒzꆑœ‘Ź_\A”żŗX§–K™H ­÷TcĖõ5ękĄ»KĖķ„“‰·²wƒĒCéPČ*x›ā,Zäi’gžĘi#ŁpCåeaÉcļĶjü6·Ņ®5ė6m© QSp|„V™q‘ßź¶z~„yGm’W‘’9é^5“ÖĆ-“ķ³9ĘDfm¤t—žŃ>$IöHįÓ4ż@ÄDŅH?֐8kĪ<šWÄQkŽuÖvµ¶˜cˆüŒ£ų«¢,Ö3G¤ųöM;Āv–ó_jQĮ»#Ż–° T~Ö,2¶­ąŸųFµ$x„½f'ę¬rŸ„\Bžrž;µÖ?³įSr—9%Ćt wÆių}ye®Ļ}§Į"ÜN‘† vÆLśv­ OT“š\W‡”ŪFŹ~Mķ€E`ųĒTŠuy,ōķ! µ·Ž#ˆ%œg9üs@Ū2|7įØbÜUH…I?©¬/>ŗÖģü “$pi–¾d“|³Ī{°ģ+ō.0»9Ļx#ڂˤśc.ģ$ĮćŠåõ7_iڶO=\ŠŻF{Ņęč‹ö…·‚5YÅõźøČ.:S|Ywe›H©öø[p1“øŸqż+#9S±ÖųJīā{[IgV„MĮ$tś×Cęéšf£u{n’k[i”ĘzĪ=Ŗć”ā’é¾ »S»¶’0Ņ ±łG`k˵?Žj—§IŠ¢ū4ŗIŪÓ­hZhé<1ż¹¤ N=a Ó¾2mĀ“—P u1h¢•Šóę.v’õčņ$Ļ…kŁ"šURI* ć„uš6ƒ¦īßŪKH€Ē6EŹŗ‡’źPöņA n¤ŒuĒׄ{Ī•g„j\—aTPįų,ŲäéœŌó£7&Eā/ŚŁŲOaemäļ*¬¹ČåZʱ%²ŚéšzļYp׫äųö„Ī5>ęt1[DŃłq}¬É(Sķīk[е:T÷~Ļ’0Ŗp:uĶL¤RW2¼­.‰š?ŚOŲrXGøĒŌäՍOÅöÕĶŜŹßŁņü¬mł¹ūŌ¢}›8_ ų?J›W¼‚āhœ…¼“+Œ{öGµŅ-ä°µÓ ·µ1¢«¼pqųV±•ŹŽš3_ÄĻsŖŲZišv ŗ}“7wš‹†c”ć8ąq^Qį­kÅöZ½õ„åĢ€’Ŗ*6īĮī?* ”‘×ų›J_Ćmq­Ü0ʇų‰®{Eš¬3jJ°"%“DI½˜Ų?Χ•#;ž¹%–›oou©x†ŅĀdŠLŲī§śq_'ų«ĆzEÖµ=Ŕk»Č]0s€}ż«6ś#E!4mĆŚ$ŸkÖr­œŖÉŹūóÅkIØĒ¦Śˆt–hŅRJq»éŠ‘J]CšģšziooN—%ymłĆēŅ’]KQŅm^9e’]Ŕ18f<ŠfmųKKÕ5Ō¼“Q†i$Ž3¹1޽Ēē^ ńĀ?šŽź7lm'e Ūø(;VŠFŌĪ+Ą§ųŖĪžKyZÖ#’ē£0Įö•޹öŲS’ģĢŲów甩gJó<—Å—WŚ½ŌŚČ3$%Ź•\ØļĶyœWŠO$Š^3@ŁÄ{Ž©2–ę>±ØGd‘C/˜Ć?(9«‘YżŒ_‹s-׎öuÅL„c .„­/PŠņc$ŠŖŠ@(k²¹ń&‡§éÓAwd‰4’ ŽƒéŒw§‹4“_|5‚FĻS±¶œ˜Į&hC?™čµęsCįŻSW½¾ŠįķķX±ˆ¶« ōĒAZ)›&ŃÕh:%’5ݬF¤ČpxÅw^°÷“ŽĆƒh#åŠN©j}ĻIŃc¶Öl€¼ø‚2ųŽŅ6)ŚUŻ•¶¹nśŃŵĄ)# ,ØÅ fS–‡‘üvńµā£¤ ޵3ČX¹cAžsÓņÆNųuįKė?iŚ-›ŲKq9s Œģ1Ą9?ZwV±Ÿ6–<ūÄŗ|¶’Śé®Š0̜ŽÄÕ_†ņY^ķ téŽĘ'Źł‹·'®©{‰ČõŪķnĆPxļķģÖĘ8—‘’;׎|G×®õ ęÕęWŠY0Ŗp)­ĒĪ7įŽ…w«Fóėo“ rqøg޽ĆW{:Ęx䊼ŃT@ąjՏœł;ĘZŽ„āOŪŪč–W?e€2»²§c=Ķ3U¼Öģą³€Œ9fF3CBŠ]ŁĖĒk?ˆ/¼ ņy«yāŖj>Ō­!ø‹}ČpUzf5<†ė‘čz^‘¢Ģ]l v’WœEixņ‰’i0[ ĘsŠĀq5Šźu6óČČŖF÷AŁ©4ėĖØ§žķŲyYō¬A®ĆoÆm¤™dI¤3®AĮć²ōøē—P’ęif qnŠ}kX>†^G„Fҵ¦ęhˆ'oŸaX–Ń[BęīYä!”ņN„Y#;x4ŪF T^K¹$ b'ż…Cćķ6ņĻģQ[‚2€²1åi8£X£ēuńeÄ/pf†=ę5Vēx®=+_J×dŌļģķąåčŠ(­`Žƒ×u‡õÅÅĀĢBöu8ėśÖī‰įĖĒ™as“іvĪISŲž•NV%ŹÅé'T§lQ©$öÄżš.E mŁ’1XŹfL»Ø^³lZv²ē(A9ĻzӗYÕ “ƒL†ņa`„‘ū™¬¤IuÉnķ ØGĻx«ķ’³uYHn^@±”XĒҳh‡©Ö“ø®—ļq,ĶĪܝ¤ŽõÄ_MµŖÜé7@$o˜¢żģų«‹³"1¹¬xM4Ōå}ŠÜņ1ļ\\¦ÖÉ„`ˆē•F#„tĮ›Ó™ĘźšåĆbŽŽ`ŠøĖüėšŽī;Æ=Ož$#Īęµ6=ylāŠ^āžń’H@ —'śU/ \[K~.Ä #/÷Ž: g#Ų%–ŚęĻ"=“ dŠĻŚ£euIxŽŁ¬dīĪvīvÕģ–ģ±Č ÕėWī¶“ńŃ9t=\Õ"5a‚ ļ“ŪĘėœmū¦¼æÄ~æÖ.Õć¹0$s“&1-–źŅāöpÉ9Žzż=kmWXŌ<•C*FrF3ÓŽµ€Žļä٘d•Ņ–• »5źéšt­m¬½r0 X܈/{VKXŃ-Į?w·ØĶr¬É Cz®ŃŪȜ~SIåŽ ń ¼·2[¦ņ€aHl‚{Öw†6OŖCqw˜”ē 2ö›Ń•č>cn±ŗĀØUyb€Ŗżs^Eć­*{©ļZ;:C•SŽ„g?­I¤&µG–izZI;n8ųĆt>õ¹=œ<žS²“™*9ŻEĀę՞§„›G“™•&8gląģ1RKwg+Mä’m6»7ųSębm£‘-Ī`EƐ~č÷­KkxŚōE+y°«d°Ļ͊ÆhK™ŲĢÉc ÜG… Ęs“{ÖUō¶—ØU÷+‚q±GJČ+h:'ŚoĢ÷w³- 8^‚½ ŽŅ ®ģĒū”G&¦*ģqE­M—Ć0®“ĆŹųYmĒŻzד7ˆoõ ł§Ō¦2¼„†UĄ5ŖŠ4tŃŲH±Ķb (ĒŻ·ćY±L“ vPr¹ķG*3”l¬Ļ4øŅ缷܌ŹĖ"§aė_Ÿt”KÉK6äĪY‡V ²ZĻ—ķĶū=^h¾"¶ńļ†=NŃ„k›÷Hö©Bäžr1_žw:/Ÿ:ĢÅ>ĘːgŸZÕO¹Ÿ³fŅbµ¾•å&śĻūŒvĆדųßDšĪGkr¶ŠIóɑ·<ūՕŲś/į'ÄkĻiz‡mīAæ²/@Ļ“$*ĪIķÖ¾ąšķŻā/ŁĒĮ—æ ¼–”{yĶx×, ˆ$’z’Õ|«bO޵|ÄņXΟRrūć=:.9>õjFārcŽ{ˆX0'ļ/\`Ō¹›Rv:ķ;^¹µ]Iŗą|ŃŲ½ėś%’‚n~Ńšx—G—Gńģ¦ī×e›l”dČøĆéÅK–‡§JJÖ?£/†z¾ž°G~ s‘Äyē€0HükŚŪ˜U£'ž:ŠāØ93ćoŪ£öq°ż¦¾ų»į€³³›Ä1Du¦Q“Ź€±=³Ļęküņ>)ųYš_‹üOįĶvŚYŠi# ó‚sč¬ć»ESģ{wĮ ŪH 7‘EŖX°A¹~i[ŪjśśÕug¹’īIMŪeņ?5|v:›„œY¼mk3Dµ±“’ŅÖōÜK$,pÄd“źkŲ­µ ;SY--%āP­8>µÅFZź)E3Ҿk‘é^#ƒNŌȲdāBæ+7<ÓóÆK¼°±Ō'uk‘%6.wś|ŗ¦–<Œ]µGšėSYĪŪCīŻ·qk'ĶYqÄĪ0}+čiČņ§*ŽÕcīqŅ’F|¼9łš÷ś×\Y‰©hŹūI³Ž‹«u³) 晹ĘOÆ=k¦&|Öf†—į”g†Wläõ>õŠ^IØĘĶM,–ż2JeÄč<1® Ūj2ķłöØcÉZŠńŸŲćѦ–$TćķĪh"R<Ź×Q”iŁór¬»Xgļ Ē;F‰ę’‘€9õōøÜŌŅć³¹“Y³D:Ė^¦Ś‰¬>R½žµJV55c;ž=>;©\@ļ2}Ę?Ā;ā°õkˆ˜mA‘œcŌU)÷4åFG–—1ē|¼/QY×1Ÿ÷Jr=øZŠf$·²„x©TbKʵō“2ĆŌc÷vjMt3sÖÅŲµ(ģŚįa!‰mŲS\ʱÜÉ7–oŗN1šĶÄĢ®.ššH.“•/÷ŖĪ7öwļa%ŽF9¤cŠĪQ:Hoń ˆ>ÕĮØ.n)¤bŒ£'=kKé`„M;¤qĘöń¹;NO©®ĖĆž7’@?oafćvsøT–©£Šń.«%ōĒdޤgÓ,§øLņä“ĢVćųiJ™RXåœDŃe×p]ÄćŠļ4m%. nJõĪzµRd(«·†“¦¾1#ŗ¦ÜČ&„‹FKXļVxĢjæw#“C‘FL1ŽY#8QÜ÷ŹĶ¶[Ó%«".īŻjIlŁæ_+KķvģīLJųS4»hlü¬²<ĻĆ@&tŠyW2łsĢŖĒ„ĻzŃ’ĀŹD"Œķ#rI÷ Ņ2±…«Ė=œOl‰@Ą‚ VŅoLŅ#’ųŖĶ“ČĮz3{SH$īkhŽ-¶¼‚Tó$¶…‚2óō®tźs„ÄĀy^Tߥ?ĆWģĢ„.ĒQukgs£Hū£ø ÷Ēs^%ŖŁÄ—ń1ē””GWr”Zl!UVPyĻjŻg-‘@M«Ó­Mś ×dšŗ$Y‚īsȬY¤xœM*>øØ»¹MW: ’DŠE<ōćµu¹ž[”»ŗĀŌֆR‘č’ŁÜXĮĪBäq“ɬ›O¼W©o śćśÕĘ7DwZ>±؟.O)_?+g>ōķ?Ćŗ•Ó¤RščAb„äjćOøt bŃNmĖī9Ą ¤½Mk%”,ņƒĒµ)A“p0M6™vń“ē$ąW]©KŅ•Qć‘0]”Ö³e¦ymī¦×6³Į  ”»łŌ66“^²ŪŁ÷1üķŽ»i®zŸƒõt›Ø”2%c½‰9µļvāMi£–ĘU cŒ=Ø+QŅŗĖ/jvVBĪĀvK‚įÉ#8J £§_£YM©ĖqŖ5ĶĶĘ ģ^x\V­ēе iBeXye{œRh»#9&O?Ɍ*Täd+̚mbņ{»mҵ¼MĀzP¢L„Õ:,6ŸśŁ:É"1±ÉśÖbßßk¶ö:k¹2|ŹŻ×<Ö±§sģuŅBń[ŲéSEåÜ( œrIõ¬?|3Ōmī!½Ž|Į.$Ļ9AųSp9$Q‹ĮW0]BĻ1•sŲĄ©52{7ĄE‘ 8ē5‘½Ń¼É žŹĒ~9$õ5ŹZė×B=Ā<ÆĖc9āšW0ctJn&{ˆDrĄē®‡G¹›[µ¼žāŌĂBw!—Ö«‘™·Ų°óé]$&ęĄĪßjՇģ7V³Č—«ü+¼jlC8łä+"YD›˜åėvV;T‚W'Ø$R›Ž}Ø _13ę»;»/\EF?ӑ}Ä`·µSk”Qņ2/#‰-– wWp3…9»t³*žzŒ`ŽNjKбŖ¶pŲž »°ĒZ”§Z]jw¶āՕ"Rݾ`I¤£a9ö9żKC–X®LNū#«Ī­üõ¾ņ%‘v‡ ó+H»} ¶£Klņ¼/3‘“Œ`W¬j×vMb±ŻIŚ”ø#“U)©ēŅk Ū=¶āÖĆ;BŸā5ēš†³™m§¤ī8ćłVm›Eؚ JęĀ2ņ\—N ئ‰ßP3ź¶ÖąÄŖ»r¼ō„chģXƒOŗ{›;Ó1`æx#pkŌotų5M&(ā1‰6橚ŹJĆ<ĮcŗŃ1os*²¦} _[Ų„ĶFSœõńJ.Ģ05+8nle;„/ü9<\¾‡ŻY;&`Ąæ„lsIž‡ā {”H-%‰FšĮ±Šā·÷p°‘…Ģ_.ģu’ÕZ¦¶1gW"’`$Ųåeb:֞‰ż±¬łĘŹ)ēļE^õ¬ģ"½õćiK³/8#sŸC^uż”%ė…»bŪGŻ<÷¤\ŁhĪ…5½‘µAløNƒÖ½WÄ^5ŠĪį„6‘ŪĮ: bPryķAŃÅõ—[×­µ Äeda$\œ©ÆJfmAmą‡8ē#æ½ČŅ–[kXmĢq¤Š6š:Õ[øęŸB’HäŠÕ¤Vżv‘IŹÄسĒü7§ė‚öēķÆ+®öŚŁĪyąž5Ų_ «vdhŻŪ®yHÕE„-“Y¶¾‘Q‰…‚ĖĮü‘Tuø®-/E¹(x\óXŽHµöh!šŽńģÖ•x,¼ā—QÖ'(žKHłåBšÜĶĒŖ"“^økÓ^=ŠĢYųź} jx/PµÓõ“× ›ŽōB8^Ų1:čµKYl–5lń“‚kĢü{⛉|›(Z2Ŗå÷twØ»6Œ;žciØÆ8ĀœÄÆŌś×E¦RĪ=“¤š”Ē$ć?JŃ"­duv7·qŻDŚX³ŒŌ×`ś›‰ŽG°  jœLO^ń »HžM“yk7®x®5K«MJdūE“؇‚£—K‚:mW]ÖuŌÕŅÓHHŹlW;n*I˜x†óģ–󬓧ĢŃ÷ķŠ††uŚ.°tm–ŹXm<€:WYy«łÖšM Ė|¤īBzV< Ļ*ŸÄ es4—C~öTuć4¾$×­ļ®ōū}-!ŽŽq‚ĶÜžy­ “×訐ĪÉš¤mwGķ"C+¹=×’jÆus3Mnė2Čzć”ü)št)§E*m pÄļ8ūŌöĻėZćiK­k,Ÿ½åź­u£]Kķ*9 Ÿ/RsO˜ ˆ/””"¹Š\äg†>“’>ĪV]„×<~gėno­’Q*0Mah’kö„Ä,ļd¤¬« äśĻZvŪ_ÄWPiŅI fb¤ž=«Č'·ŗÖ®WP»¶‘ >åņŸQ@ö‡©½ō_Ų×ŲKxć.§¶yā»ĆśdšÜż¦h­¶żÕĮ;æĻ†yž³£ż†ķRYIČĘ_=*Ī½­Ē`4ˆn'KbÜ¢Ÿ—Ó„1aįS*Ż}‘"`1¶5>õÜXųŠóĆz]ü0XC}pĒĖS!jžø÷ v[š „¾¶‡P¹‚]r6‘É#Ņ©ks_Ų“miO˜ ¬ƒ’ńļNż(Ųā¼gāI!‹ŹŅ„Ҿ0HČ….³;[%åÖŅŃć$tĒ®)z=¼Ślr›uh¤Œ­ŸŸ5āZž‰oįĶA7dÜKŖū¾Ćōā¦Lé„z“cZšž¢Ś’Üj3)h‰;¶g·ęké/Mxš&$¢iaŗ‡%~¾•‘·*<\źĶ§_G2N*µö²o.˜„&鑓ō§cšq3īu™ģŻD@#g/ZßÓļ/eŽRą“:Óēf67&øy%ŽŒ¼Ē‘‘Į­Oé %ē%¤Q¹9s·„qžÅö›Ż*Ī ß0C£'ƒ^?©L­,Ь§y89ē$ÕE…Ž^+ F'ŸP”ŖYĘĄƒÜŸj·ØA¹öx$å˜ õĻéZ×ø“ņ"(Wå(čq—0›Q"£1lä“E„݉¬ļbEGhNš Ē g­{Ü>CŪZ!ņeEQŽ½j’3”ŗ"–Y`Ž(n–8÷ŻŒžĖĢ×ÖńA‘ ݦäĶ"rĖįĶāų7Ų¢ń¼±Īćė]T^µÓŻļ"*‘.PzŠÅĢčBŻŁLbiķQįr¬{W›kZlŚ©į!K’Į‰QŒā©;“$O§xfxģnonę6”©5{EIćf†u`›ŽÓŒ€)™¾Äz¦¹4š]čé-¾ęĘ܎­Ī9ük¾š¾‡ØčZ›my"ŻĶ.d,v©=?ϵe(”¤vś›ZK6‰ Åų®[ė¶WŗŚ`7ń:4j[ż\x=Głé\7ķ! ź~½Ņē{›)!Ō•ćH˜Žväī÷Š†ē›xgāĪ·¢iO¦oW‰AXe}„˜cW;„üAń=ĶĀė:…Ä—^s¼Ń“Å#b’†¢’kזžęKēqvä䶚ś7@Ņ4ģųc%$yNü…ĪG֚Fs—CWU†Ö=ģÖ5!£e(Gė_:ÆĀ©ąø]R÷Sg¹IüųyķĻŻ­’±‹’=5“˽FēķŹa‚ć Ī0 gń<×ń&’Rŗ{o ىķ“92%”>XæR)“±­a¢Ė iv~}Ō²y±*³µGū×U§Žhē@ņnN,žõ戍D„ŲŠņ?[jr&ūDµ¶m’ƒ—ļ×õ®ŅļĒŗÄ‘XéW¤Ö0¦†Āy"’Ÿp8x§YžĻ7–·³Ų,ēxĒ,ø×‡N3’?ʧŁjD¢u>Ō4g_ׯõ©&’J ėœægŽėrj’Łņ’›˜ķ ž‚©S1”O”|‰¤ FŅīcóļÄ$sŹ–ģXōļ\ēÄļæ‹¦·m[T÷Y’8’<0|“šµŹyD_ ¤V¹ø”iń>Ģ…'ėæųuā-Āw÷¶Ļw ÓYČ 0ļ€~¢Ø¤t·Ÿmg¼µkr’gt*›yP}IõÆń%Ķ–‡u5īŸ ƒ÷;»rÄåŅ³’Ļ«4­¬žŻų–YnƳ[łiņĶĘHÆJóĘŌĀĢ8ą’*V±3‰—e*j2XŁ©–D<ūQ\¹ØjS|DÓ<į;$øŌЇø”ŒŌžµ§[؝·Žm5mFūT‡Q½•YIÉ.8ē>µóE戼j/åžĢŠ ƒö|ĮAäžōĶ”:‡Œ•…āč.|lń·jm„6Ńß$SåQćörź:„Wz†™ ÄöėÉ)Ń@źÕ§ÕęcŌļU®0BÉÓ5nr’ézJjÆ5ģŠFūs)­MØM<“‹K[w…XšTš£×ō©h–?O£iRi…ŒŒß0gÅz‡†¼A§Ėį¹"šŚįnŲü¬Ć•„–£Q:[ ®5+Scj±Ēq'8õ®Āš"in×­y4­ ©Šč1ō¤KG—x‰§o[Å9/iu(˜ä‚O|×­xƒUo‡)üŠn’=Ńƌß—Æ„k ‰ä>pÕž$_x’ī oI„u'’Nkėo…ŚVŸ­xjk•‚5¶Ž2Ac“z»XNŽ{P…-£¼ ›ŗ`םjז²]y׏‰§Ē½†yśSl‡cüI³µ2,½Ģ.Å#hš›O®=+bĖĘŗ¦»{caÖ`1÷O|Ÿ ©rk`å:=o_µšÜ+,:\W¶ż]ƁŅøŸkzV½}>)£‹`ä†ļŠ#0TŲxkĆ6­ÜZČ>Ō¬0c?S[Ėā]?“¾¢É%Öęh䯫_hl®-Õ5TŌdsęL‘gr©8ÅgAzŃ̌ŽU— .xę°žÅ©Y,äŌ¼ósęJ–¹ĒAƒ]E‹Ē2L„C㯨¬Ję3­#+Ŗ>čäH—ęVĘCWK©F‘*JŽOEc5Qvd³GyŖexZ&ąž­(4ŁŃT©mßÅßqõ­ˆ{׃£ŒŻnę04$ĀŸjæā ošé£¼3$C’QÓ4ó4œ5[kq;ī‰ä9ĒN†Ÿ ŚµŃ’ÜI÷öcUĶ„¹™ō.›{4ŗ3ŪÜ35Č #† (õŗ-O¼²Óīõ~ķo¤1Ē‚T‡Ö‘'Ÿk^4’ķ'66Ļlʆ2 `w>õ喗ŗ¦©sŻĢQn™¶®Ž«īirŽĒ§ųgĮžCßź÷·vīā1JxŚ}}é±jsA7ö-Ą‚ ?Īó7ˆ÷ĻSžæ†h”zG–xÆÅÉa¦Ē‹IQ1M¾`ķŠŁÓ¼G$M”™e˜r ¬œl+¦‰Øź÷Vņ]_” §ēŠ[M#OÓÆÆF‘®č¢K9™f,U‹tR;րymōIo?2Ęē<‘Óń«V¶‚žā5PÆ®xJŅŲ {m_ɶ“ »~\篧,F„¤\ hDņīYG­ ’Š÷-"ŹÖw‚ŹŽxÄų ęCĀ?|ūV&¤-`ń†aūD÷ä(ėŒXK½)¾×ā[eĄū¹ Ż«o,e»\ėoöɐ !˜c?ZĮŒģäŅ,­ķ ÕŻŻ­ŗFFČÜą±9é_;üBŌõa¾k;ˆ-GĀģćjēÅ\"L„c‘žÓ-mMßņŃÉūʵ-fóķ²c+Ūŗ¢ˆR=GœI¦¤‚Ł7…ućź)Äk ĄŒÜ–ķ(T–&™”ŁE}¤ßŲõĄÜx‚īŹģ¾fcÉśV°eb½Ö­sؤ’\ʲ£sČąÆ „Ą1͵rĶĒz²½”čŚW›¶4” ¹É*ļˆfx€“T·Ž’–¹ä ‰K¢gŠ’\-_I/'“»Ė·oƾFų„ąųEµģrAę8&6UÜ=kžr•ĖOÄŽÖü3*łi »=ŗ‘ž°sėĶ:^:‚ ųƒWŠĶ¼–_bø1ā@~`O{VŖ73•N‡‘k÷čŪLwĀŽąeŃHĘž+ĶõKÉnķ%“üšA䜑ō5±‹‘ä&źćDŌSRŅļ®,u‰£WŹåOPq]^+’KéodÄ’"¦÷lļĄōŖõ šqė‰!Ū½$-ČOėZ–zþäeŽ˜ŠvS•ģ#öių„ź‘éśĖźisg4h†U“p™NJ8ė_Øŗn¦/“ųnIČ 6{Æc\ņFl¦RŌīŽv†kXK›wób чu8ä‚85ü„’ĮuæcøüćŲh i’ŲųCÄ.ī ³ģGĻĒŻÉÉć¾k)Y= ;ŸĻ_|KwįĶsūOIpäJÆóØĄ#5õŌµµōÄ%įSē €¬äśzs^&iIJ\Čź§.Œ÷æ \Ū_Xæ†Żnn`S¹„’æ”xbĆOÕ5Ń<,Ąd±8F|ė§fl’,ŽjSÅ*A‘«,Š7ē$óŚ¾ŠšÖؚ–•&K˜‰ ū¹Æå^®V‘lj‹kCS{‡üÕfbNF~ķr70¼N$XŁ”2kėé[txuV;‰#U,1ŪŽÕ»„A šŪÉ>ä Kģk²;²ÜŻÓtóŚÉ #ew ģ§m"āĘźI@*@^FGÆō­yŗ#N~ĻSšXē¶µa!ŒwķV”½æ³Öļ&" '…«O¹”[AŠÉęvß,„·“Ÿŗ’Ŗ¬ųæY/6øIČŖ3”zœ'Śœ¤r'®ŽĀ«Å,ņ5Äd»yćŒPd‘«aŖYŲY4M ;± ōü+¾µńE”vöVūĪ$;Bć”F°¹ŁźZ½œ+$Ņ( «žkŠŹĘęŃ”µ]ó0#ę?tSS5åct­2o>öå<ŅvŒ7ź+˜Ō¤dŌŽ˜=®NIėœÖŠ} ’05ķ=¬­ć’'†]ÄĒpErȉFX§ĶÉīkFbćcgE‹ĻvGuLää÷«7Aę‹xc`W©ĻzÉČJĆNŗbKi;yź) ¼’¦ūÕ¤X¤Ž«JŒ[DŠŖJję§ Žæ˜ e@éLH”l,t™bŌ&gtĪ#oŗßQY¶Óż©äy7ł[ŽÕčĶŠĢiī®ī ; ŖżŅYkƱ†ŠO4–ąc„JGW„Ŗ\Į…F8ĒÖŗ Żj]:4¢K/·āƒ2=w•å¼q²C‚yėķVüI«ÉØG٤Ĕ†ķ½*e 9«ŻRģŚ" Nxļ\V˜5ŌžgHŒ#“ŽąQ\āśķZŌÉ+  ćō®#L¼¹:™”øD'ž€J ;čī,"hęyћ#iØ§Ō¤ŠyH‘Ś#ŠØ§asmž;Ū†šw’`§$w"¹ÕŽćWy”µÄ„P>xPx5¼bC‘×éžÖnmÖ!ócBN:ūW=sŤĶ£“:·Ģq֔„ćŲŅæÕŁaXm‘ŒqĻš×1›-˳<ĄäÖ±.,»?†g…å’D©Pxj«{c$a†ž“Š)½ ²_{ŗ©ĘM\“„źVŅČń±P0j,T„stK‰XȰ»Ŗ7„z÷…484•ūu»|Ä åZÕC¹&/Œ5™ķnŠ\įuČéō®*ÓSS*É8SčI«ŲqÜśB†t“’}FÖ0ä 19#ƒZ>$Ńtū™¬ēx擆ˆ(½MBØokčdÜĻmvÓJÄ4ŒO+Ę p7·ßdrįĆu„Ė”Œ•™ČŽŽż¢Iå”)aéĘ(³»f~sä°łƒzTˆõ=ģÅõæ”KēGÖ½gį'‡ķāøÓ…Ä ål“ƒ®3ڃ¢™Äß ŪŚj÷ŚŽ‹¶ÖĖ4lŻqŽœżkŸųwć˘n®a»ŌüŲ€c`>QéśRGM@Õµ+}vdˆmÜÜ õÆ,ńe¼I“…•Wå_ئ‘œ’<ÉEАģV-žs]‡mv5ÜŖŁ *‘žjćä]ģ{ˆ×YŃ|=iŪŚß“Ź²nåNż?ąt›;ė­n;ˆ”Ŗ’H=żźłlG?Cæ¹ŌąÓ‹}ü¹yc#”üū c„ɤŚK„‰®ÆŚ-JŃŅDB>ö+_귚Œ(ź$žBŖ0;Ņø‰©\-ćŪI Ē]Łļ]O?v»]O_ū hFź}k91œµÅżÅģљˆĪīz×xŚVVnņ\Yʹ v8ĪqP'±ƒŖi¶–āĶ'10BwĶr§®n²‡!›*¹ē8«Œŗ³} Ń}qsē[³7Ģ1Ēqķ[ŗ•äS‹Ķū¾˜zµ36uMV;ÄŻ$Ań×#"ŗ?VŃ-ōˆ¦·Ō×TóD~S¼1ŌéNż ”Låbw¬›Ė[™]<݁"öŅ£Ś2ÜŲčté e¶·xüɆI|v®ĒNhā²’÷aEV<·@ć5\ęrg?sx×s;”ósӎ•‘ŖŽŻŁYF$‚Yc$& ĻsY¶4IįĶJ;³qlaž!¹²yö§6§­3ŻC¾½ÅsČéŠ:Ļ Ļ¤®4ö’ˆÄŸ; ņ1Ü׈ų§PKoĆŖż²7³(±Ź7œø8üM‘æāļ]o†PÉÄœ`—ėžæį» /4ųļ[j"ø'Ÿ­mŒZ7olķŻ%y"LŒŽ5Č I„¹;ŗr*š5ü& 'OĖĘ}½k‡}*kꔖwź3ķHw&Ѽ,–óAÉł œĪ»KU:•Ö›i9‡Ź¶ˆB6÷ē9?™«Žs„±Šc’śŅTøBøfld ×3ā-n)®īg. o žŌÜÄq÷w÷ „Ęņ¼{Õiku~¦įŽ»Š\ŻĄ÷ż~ūE²šéŚU MaYU ļĪy<}+ē[»=CIæ‹Q”\?.s‚qŚ„–ž¦ÄWW’:Ž31 ~nk§Žźcku0*©gÆoņiyÄ+Øź³IpÉ,Jp¬Zźü?į]oS»šU#·Ž2Ņn8 ōŅŗ”EęuŃhm±Ø+óō~:Œ՗©ékk«†icį¶˜Ŗ’°Ōni^ź÷šö‰ˆ`@Č©eń47÷2]˹/ījJögAyįŪ­I†X ‘•V8jᬓ‹»v]*šIWćØČĶW/r,[»³1Hā¹FESŃō‰ŽFGH÷3åJQ±>§Y¦éįfžIĢNŌéśE“ŒźäyC“Ķ!•u¹Ņ+d·µe‹ĢįA=H©ķ!ņ<±$fXĄ†h*ėQŽ[™®,­b†0ūNßŗø®Œj ²h‘y¤ ęļ&»ŗŽöIR'}ĖÉŸ\ÕĖ=(dM$ˆ>™éWu°åø—Oø’Ö-’ēåČļļT.lļфŃpä?­W*{Eœééh— –ĒŅųŌĘń «`ŽRØĪÓĄĻ­dŠĻ×n&W¶Äjńo'µv~”#ZĻU€Ūžę“U»)cmoEėž˜Æ=Ōü9Œ®`Ōv%ĒŁ¤ļķŗŌ¹£ÆmKFššµ‚ėN„L@ĖÆQķRų›Åvz®––ö“¬óƒ }Įčk;÷gjw»Æ^0#‚=*i'g Š^1ĪGÆ„H…®7HĮєśt®ÓJ¼Šā hU%ó¹_˜c„nE¦št72=“Ż*»Ē££xVau#-¼ną{P'ö«ā[ÆGog`Ą[G’I=GµyΟvóŻę#•”g¶ 4W)¦Ķ>æ{ ¤R3Ä VŲŲžµzŅųrĖO¶ÓšŅA-Ė 2‘ŹŸOåZF}Éq±Ī^¼ ¹Ć7 ćųk‘ø“ŽóM峫zōĄ«F3F}“VĖ$ń°RŻ&–oß[<Ό H¹ ½ų­ śyķĻÄ[ÉnžÕ”‰z`˜­ŃćżOTµÓt¹z)vŽ'8ć?…C:`‘vK«ÄŒL’bb8ĒjŠź 闳3«Ŗ@ĮĪΈ¤niŗķĮµŃāøy o”e°I÷&ce$:Ć4×ћæŻÕpDKČģ5-.ēlo m“ūĆüX¤¶Óž āÖH†ćœūÕ=Gįöƒ=Š“¶A§+““銎tkČz/…¾č¾ŌgÖ4‹Ą—2F«)$‚ä’]cüWÓįų•kįY4Ł,ŽėOŌžG%ŠFx`¾‡­'$G++xėį‡|5ąėC§¤GT™Ė¤ķ÷Jąuƛ ±ĆŪŚO"£HŪ7ķć5Qi’{߁“m.1j/ĢXŲū@9ā½bŽÓMŃ|8Ó[[LónŪ݁ÆZ¢e±Ėk÷7×v²]Y[I8‰2U;śž5ēņk“@"PŒ„¢œ?Ā­' LÖQC„=„ŠøóqŚ8_c^=ćzMRe4ų‘,Žųe!™Īr®?­'rąµ<’IŌuķCWŽ7WLĮŅ3’¼vkÕõ]Nx£xžŹ!w!€D|óÅdÓ6EŪÉ,Œ0„°>QAœž cœWŖ¤±Äņ[įv œŒŅøŽ2nµŻ2a5»@Ė.3Xv Vž‡k¦čVWs —QĮXäA– ’=95\ŻŻ‹Ć·÷6²_Ė« Œ"ŽMs:Tzī”„\=Ą‡x;dL Ą÷¦ąDīt÷z›2:ŅŁ<–żó2ņSÓµiYčVÖź‘O h3ŒwǵKFm”#š$Śž§od*Źįząų×Įn$·ń”„Ś6£ž‹tŃ;*²²ö xꕊŒM_ č¶ŗŌ,Q!•‘wd}Óļ^Ż”ų>ŽĒȶ†X¼ā (fĮ*:œšA{hnźkkŗÆ¢ÜŁ“š¼a"’?›Ėäe«å“Šl“-RļLMCĻøV&BĶžp1œt øĖ”{UÕeŠ“įwgø”a™ėĻjķ…ˆń‡5žØØct]ū¹fϦ(5‹±ĪZiöv—vś*‡ņŠ…‹;½æ*źgѬ“»Ņ¦Ś26eAŻz r±ģ>2ŌcӖĪ[ČmQb…PßLššźz·‰õLŅļ&n}Ėņ…K·įśŅæBS»Ōõ‰ąŃnV{y ӒžH.ŃÉĘ`?ĻZóĶoąŽ™wrŪķīnēŽAp§åe•ĒÆALŠßš'Ą;»“AiÅa(y’ęSÄg#łW®ü%mZtøŠ69g#Ž~” łŻŸĆ?¶>‡ØĶpėöiÖAm·qN*ßÄĶģW¶VŗHW/>.!ņ»{~(1v<źóķöÖ:\«ĀĻø€ŽéÖøŪæ†z}Ī“k4¦­ĆQAÜ>æ\Ś†ĻO6ś7œ-”Rź““Œć&¼źóI—Äų³¹¶})Õv–S’Ą}ī3ķAQ•Ļ”ī¾(xBš×„¼#£%ÖØ‹£)åŽ0}Ęj爵ˆ¼#ržYāū\$ņŠīĄ=:}k†OćMBĆGšÉ.‘uĒŽ=«ĆµxĪ_±é܋ū7ŗÜ\®Ó~‡ŌńŠøł•ŹsŸ|oĒ…ōĻ›0°żØ\ĢĒęmƧ‡äŚoŒo,,ķ4ŪVgDsĘīOĀ­Dq¦wÖzgˆ¤Īö×tyŠøÅz’…>яsoØĒÄģÄ« ŽŌģT`y‹<'ŖbņąŽČadĀ"? øķŠO żŗ×}­Ä“½¼xņ÷Ēń4“=2×Ä3ŲG ­¢ƒ>\gš¹ØųvęT}b( <ܒ9éYŌ0“±…iHä–öyGÜĀ’AÕrńƚ{¢‰€` Ōņ—Ģ·ŌļģķÕ&ÜīčO_ʓ^ÖÆ¼C¦Į ĆlŚn óārVć©ėRn.¢Ć­Z\yŅ3Ć ø·-Ś»mL‡F³{V3ņäōŖ‹9źXī“‹m1-/åÄK2ĄB³ž²d`Ć5åæ/utė I£ūKa¤GqÅl`–§ŠiĻ‹ÅĀ­ŌŃÉlŃłdd’ćR^±ŠŚāWŠęi†v¦:ŠvB=JžŌ|I¤]Xx¢;VŠ(e|ąWŅ?õMĘš›mMŸSŌ.„sŗ5Ų$ŸåA2G¢ć@š£i’nÖō»Gœ“J©(2nĒŻ#ŽØéŗŗ1½¾ŽŚ+]E‰‰e1äó»ßśŌø™·c„ńWÄ=CóŪ0+,jųߌqź+ĪģžÉć)õ=Mf2BĪ{sNĮĢyˆ ‘n§·^˜ŌtÆ[°¹Óü?„Ą/c¶–įB-†*Ī?ZĶE‘)t9yu+jGPÄďņ*Ž;}+×t *ĆR–¹h-m²ę蓯īEµ±č7މ.įŽ+»;T`0ąåHķĶq×Ä_ųöśÖ@śŌ±8‰0Bļ>£ø§kšS…ĪQųÆ®_¾ū’ŹJ ÷Ķ|Éā-F{­Bå„R×Īå[åėχ¦1±ŽQŠÉĘeX =3^ēū7ŻŽMń@·ŠI_˜Ķlä“Ū‘Ó½e(ō3q?E>(i÷~¾o¶ĘóŒgV`y8'½~wiŽ#Óļ®īīÆęĪĒƒžę²ådoģׯl®ĢvŹB”ro|×yįæŲųĘÓW»ńŪ›-åU„A>ŸĪŗc+nkPŅō x_K:v„Zå]•C‚Øōƙõ’Żj:ĀŲlŁI'–D<Į=MSš4±ļ÷„<+£[h40Ž\y#ι',ģG+‚;ā£š„1»²…un†Ļج%1ržu}¢Änuhƒ+‰Szžģü Šå|5=ćøÓ‹2 b7³`(ĻzŹN┬z_…µ3ŗŠKs:jńøžwś}ōÜÖö>ÕucTx”9}üc§O^”F71lłJ²ń¼S¦KOē-ĘŲ£)øģ}»WŗųŸĆ—.¶ÖŚ–ž÷—Kū¬ˆ‹zHé]PH\ųk¢&•¢™tė¶ūĻg<`WŠ~Ó×ĮŸL’8$Æ g¹4¹YQV:Oč×QĄŃ¼āx•8cv+Āõ›;ėiD‘Ė*’ÜżŃRéµØĶ Ę†ū“GöwaĆęćҜņŪ;4Ū|²GS“éL¦2ņŠ}žHmĖ­Ąä’*„6WMåŹĢėž1ŽMDĀ'HŽlQŖO¢€:žµŃčr£$å3ÉĘąćҹÜYj+s«¶·“٬\n+Ó5ĶĶ‘—ģČ(ąœŸ­kōNé-¬v¼V„%ŽNģV¾•mēB‘æ– ;OLšŲŹHĖž8c–[wĮČķŠĪ»cĀ–ė˜¤É}ǟƁr‰sį©5KQ%½¹g óqĘjæ‡tĖK}WūdWŗh‹d©Ä~ł¦QŻ-Œ°!€Åx±”Æę°‰”ó>SžBRŽ_žĪņ Ė5¼o¤÷«ŒšU…ī©āŽQ²Ö%;[ ’×ā®.ĘэQš Ų®J&’( ŖŽõ«·X[F³1ó !óp9SéüŖ[‰ó—Š“‰£ÕY¢‘Ž9ŗ`tö®MWŽšy‘M€ų'½k)8žķkl'ŽÓKŽó*Å[̉ŗēž•Żėz5£i°é0y”Ą Ķ×qĻQķŅ®$7cŸ’„)5Øāµ’ˆ¤Ę„®>µĒOįŌŃloōKVS*ē| u>Ę®āSč|ߨÅ=ž”,Sņ¶ņOĪsŠWҾše¦™¢Ż›Ū%ŻŌKå31Ģē#܁śÖ‘±¤Q«ƒe§Æ˜ŅyłAĻr7—öŽeÜZ|‘Ėz ŗ¾0}j†ą[Ń­N†Ļ^›‹™@’VfÉ»’ xBĘ’V·Õn¤Ž :ČrsĻBi8™ru>•ŌüKįsįQį;G¼‘L×d€‹Ę22zו¶Ÿb×iqÜ?#÷@äsžOJĻŁ“ČxĻÄ$V© .”ĮĖ÷#ŒWĪóźÆØJßkfڹ*Xõ­#(i©Öi¢Ś[XK2 ƒŠŌqóŪyq• 8Ąō¢R±Øõ iÓ\!{°óD„@ …Ō~ŻkL‚ ¶ū‰%SĄƒ‚?f¦R9”£^\±ˆO4 !ŪĮ¬ķNĪāęœ¼ń!+“ņi93fy6½įĒÖg*ČAŲ#øÆCš¶«oįėĖ]÷ø# •‡ųÖr&Ē”ü9×-uK»‹­lÄ÷dnHŒ'N¢®kŸŁ:¦„}i ¤K™<ŸCžzÖ|¬“y£é[oŚŲ³nĮaÓÆJģ.¼9ˆ$@‡+ʁī*ØödT<“ÅzAjŠ»ģG tśV‘¼ę/1ŽdłrF7ŠČč-ćņw^^H®0pĄSé\üŅ#Ü-ŅŖ'Ō ĮūrO©†ˆ¢)#‘Ōā½ĒGšćź:mµŅFČ»“ŌžØ •|Icsi§kA2ØN¼n+7¹Žūöŗ±'­%} [ ymäLoąH#9®–šCæĖ*%Ą`@ŒU©ƒ‰tß›.r:sҶ%Š÷^“LŁ× źŽäVr‘'ūŽD—1m‘ö ć„y“8%·k–We ¬„zćŪŽˆģz ›æt]SDŌćÕģ죸0HRQėß>¼üż¹ž¬÷ß“ż>dH<Éfˆ.ųÉQļž•¤”¢~E^ßdC,šČbeČO̼gĘźSŚĪ“Gcˆēr ±č=AėS+3ˆæ±šč“véČ& Ąė×5=£eŠČŒØJ9‡½4ŹNåViÄźū‚Ē_­jZė‰s£¼¼U‡zt:“F$gFl±ļ[6׏w+1€Ič) ֚­ŗ$ÉęH ŸCóWCg¬ŻˆGŲž=įKn'īūzÓH避 Į0hصm%|ācĻŌōŲ2Ęü•#åQž„xü«śxų+ć[ßX„¬ņn’ (ł Š‘6>‡†Ńć¹ łNAžšÆl’ƒśķ šC^ų9āHüĖĖY§Ņfn WJ QžĆ9ż}kŽKP½óŖųŻšs[ųń'Sš–æö—u ÓÅ$ü ĢƃĻ|Žk’е”K‰b¹)åķORMpā)ū§L$Æ”ō7ü_¬Ė¬Yé÷3oŅX/”Ąšq_M6³z õāf`Š„š\žĆ޾f½;;™Ļi6”ó‡†Ūż`'?‡ģ_õKĖN×Lui¬eį܎‡¶jØNĢ›ŁŲö’č–Ö®ŗ„7K%¼ŖŚ~és^{s¢leóc#¹ā¾»Qø¤x„īaO"e8Ī@ĻLU› ÓoŗcgļĪkŲ†Ē7lfi§hƒ–`7~訮tMYžŃ3Ū°žÕcåcü/¦j&žet}ƒœØūßZŽÕÆŸNø ‘·•ėųÕ&öDø“PŅ"·²ŽI·`ō'8ŻY^#øĘXÅnrĘbT0žēņ¬ūoĖ$ęH›Ü®sŸqUn¢eNŹXåv"Hā^:cŸZėtDŠkXŚQ•hf«Œz˜½†kNā19>Õē:»Ln z”žd͐¬3ėU&øxvāīßNŽÖtH·į?v°¾&čpZhæŚ!`%€eĮ˜ēÆCY=Ķ#xN™r.ZK+°å,­ž˜ķV,näyö¢ČĄ0÷¤h•I[£$h—JIUĀc ś×%ā ų]QZŸ¦åN .ļWÓ‘+˜TO½mx3J;/-o ,h~O›ļg½4ćh“Ęm]‘‹g ÷X ¹”]Ü^źė§ŻC ڼČ’Õ[]l)ńCE,ā`ėČ9=kΣӣ҆‘xß¼…› £¾;*W¾ƒGŠ:^¤šµ® ö®ŪĒeV|‘ŪWwįŁ®u -N@] “!ƒO±õ•Ī–xwŻ#[°‚ŒØč¦­j¹æ²–Xø\rŲ§Źe=YįZ¬is-¹‘¼Ō?0"ÆiÆm,"=ąŹ[nj“;U·–Æ•~QĪO­H|C„‘)“ʆ!ņć®*¢#.†F³ā›æ¬v®dŠÜ™s÷‰ļXƒĄ—Z^–un”ó䓬ĒĖėŸNkNCk›övƤMiy4ūŁW Ī>£šÆC‚ŽĀX ŸWtF°~”4‘期45¼šīŹÕ.†Uūüu®>Ļ@ø³ÖBßFȑɹBŽ„K˜¹Gń…¶›u„XÉ )˜(w ƒ–”ż+Ķ-Ր“éµxÅCe¢äöV—ŽKDł¹ Ž½CĆö6śŒö‹|Ī…²›—”ĮćEĮ#;ö„kżßĀ‘i÷¶²=Ņ%Œ‹ƒĒA_:éwqH’}­˜x 6żi©ŲN=ŽÅ픜-Ōž[Ē®ūLÕ­mb*ĆĢ`ø^z}hēf6,XŁĆ-ÕÜŠ¢™G'”8ķ\戓Ė[;!rpŁ4ć+‡xQ‹K…ÄŅH=[č+ŃmµĖmBĒĢŽecx3‡•®-5 mGĆwI É ÜväyĒxĒV¼¼Õ$žH’ŻJüįF=Ī)s1Mhp2ź×ó1ĪŌčkwūNöś8"‚Gł°Kņäv5&-®™¦­Ź3ß®>ƒ‚j ›K {ÄK‘åžH9ĘE G2ļ ¦„-ÄŃī'žöŅ)Łäøź gĆwwŹĶ”Häšō>Į$Z8NĮü#­oCŌ–Ł•¢$óéYöĄŪ©Ś˜_¦s@āģbÉ©Ÿ2ąH[y_—$ŒūW¦Z]ÄŗTm+#®ŠU\üĖĒj‰³¢,ąļŒr4“DÉ“¶½cĖm¦Ć$V&EĘw¬Š“E›ō–č“Eŗāµģ„¾,nŪŌŽ†Ŗ+QØ«ž• ųƒNæŅ/”ÖeŚą,(ĄćśW›ų–ŚÖWy<…gnƒŚœ¢Ź*čŠ}’Ö{€”Aą¢õ„B¢i ¦s·9Å@ĶŻ& )ļV[åe&0qĻÖŗo³"G*@¹9=h–ĆCūdŃČäG.Üs‘é\߈Z;9®mn"ÅŻ‡J؜“‰ĆGmöĒK«v%U€GZößųfį Y&fįøžG­lLQ•ā¼0ß\[YMq"ņŖ+3Oųj×ńéŚ½ć‹i”—«nõ"™Ó2ī©įŻ@jV9æ‰-øRøĘs޶¢šµ½œŅ*ŗoŹs“YŹ=M£+#+^Ō¦·H óFŠF@Õ;kqØZÜĻ2†€ '޵“At;(&½Ž1“‹ųƒšüZü:ƒ^±··š“a Ū‘ÜŸČW1½”A$zd3ĘŅ‘Ų"c?:½ˆ‘›y|±†–•Ič;W1§ź7śŻź ymķāčI¼Ļ ©2;[yͽ…Å«Ūļy°7°åō®b1m ×"2Č9¤%ØMö±LąŪ„jč6³Ip‘Ü®żŹy4źɧ؈ĢĖ…ėĻ WžźZDŗæŸ&–#,¹-“€h4öa§x&xć–m[P¶µ'‘G$1!Aõ5Ę vM.Žŗ™œl±Ēցū3VļĘĻŖH]mžĻŒeGŻJžæµVf•J,*$Ė}h¬C­ßYĆ„‘gó”` ńŸzåm5›Š«°„Üõ ‹žŸįϱDŽZ¤Ē!lŹo§ė^"!µiaĄ@>nqLGX›Ōe¾€Ęź®SčAؼdÆ4V÷–«+¬g/ü_€ Ö˜żCOžŪŠląø“ 4hH\7Š×*ML·Ō$2HŅO±£d ¦HĒóż* ‹>ššŽmqio6 g¶]“ļ*½®x2ŪWÓ漊A±œ'«VćŠĶ³ē0×Ö3ÜA«4Q˜ę(Ÿ¾½‰’ õX“ų&‚ĪK4ī“ ī5“Ff}ä/hʳ©‰śĒC\Ž%Õ,µßŽGž‹UG ¾¦Ń,²Ūė³Z”@q u9SžÕļŖ–ļo傲µŪ­CPŌ–ŹŅäAlü+E.±æsū¤µ…ÜLč›U‰Ķdkŗ…åž’KÉ'‘,‚-˜ĪqŽ£Óš¢bjŽÕ%²³æūk‘ļ 3’Ö5?†īm¬ Ć˜ŌōÅg3HĀĒØ=„śµ“3L C*ćkž³‚ĆĆ·BŽöõ-­^M„€ąsY‘Äü@Š.ŚžB×TŠ}=Žxž!ż+3B{gG†&Ĉq!ī3Ó4ø”Ļį™.nFnXó€9­Ė_ŚéžH2bwEäDŗ¬:sF#‚3m+˜ÆqYö6LØŪ—åćµHŁ›Ė6ģČa’s”ŗV[YÜĶoLĖ˜łŃŲq+i²ÜŚŽ}Ž8„1īĮ$õĶnŻŲŁŁB’r6Jü^¦Ų¹į¹…“Īé;°qĒ5[QÖ¼@±„ø¹T‘%,6 qž”Qn®®ä™Õ¼Ī¼rkmmÄŃ…É|mŚZøng3/SŠīa·iT:J¼Ž¹)–Có”żė``t¼LSÖǬé–ĢžMŖÄeœ9«:UŠ[§i ¤– ø¶ŃŸŹ¦‡WŠÆ„ž[YÓĶĻĢU““±J&ŻÖ½oŠZ}„ī!\żńĀż+GFŌ&¼°ŠG1Ȋ0»})ó2%LĒŌl¤ŗæiE¹Š ø,Gä„2+[؁SĒ§Ö•Ģœz7zյЅA‹Ī·7/¹ė^oāŃ.Ø øWlCņØÆ4„?±7©ØG Ä g9lņ½{I‹Rµ¼rˆ×Ī1׌ƒs»ŗÕf„$w ±*ĆžµĆč:›ų¶öūJ†)$Ō“t‚5?yœÆÆ®2±2Ļ>×®bWŠŅ"ņ]š1ÉēžkŲt×¾} ZIŚ‘Ą;yĘ;Ö×2åga¢ŻŲŪZ;ZÖM»0R섆:dŠēu4Ó¬®ä“±¹Šöܹ;ćČ =pi65RK8'¹kÆłl£ ørµs^"¹VŽ˜$ė&ē_ökl‘ĒĖĀČ5/øńÅdźj·¶ĒTFyU· ÉaėH ÖS-ÕŹŚŪ¤k m¶@½…z›=œo“g%j`xΧ¬ŻjKmq „b µ&žŗ]œ8^gnjīĪh.,Żš·ˆ]q]ąT@÷× øÕčśö™kØĻm«ģ‰.™ƒäIQŲžt‹s35 gĢg‡1ķ„`s“ź)Öz­ļös-½Ü‚Yx 8Śh¹OcŖƒI¹‚RWóīA-Ÿ½\N³=Ī™sļ4\=¢ĆZGŠķĀÉ Į,;ūV'ćµ—Gu&X®œ/ŒūŠDV§ĆŗŹ_i:Ģ‚źrīœ™Ŗš•˜‹J:£’Fs+¹ž‰®§D6*ųVü߯ ø%V·hĻ͌ī5ŚZéz|Wq_Üž=ĆĢóĒCY{BœĪś†©;¼Ņ5ØR±ÅÓŌśö­ S™ ĶŃŪŪDØX™å$ ć§zęxGмq­xŠĘn-öى¶ SĀ‚q=ų¬‹K;ķžsL–v¶—¶mēFUm‘äŲ ³Ŗ|eŅõķ…„\Ųm€ĘŲźO¹&¶Š&čō ųŽѤ·– Xź5•ł—ééTõ//ˆtū»{XŃ£‘$f­E™iqŚĆ’"é±AØFmķ£-6åĮ`ɬ]_į¼Ś­Æ–Ą×,Ä#©ē>¾ŌÜ{õ3ü h¾ׯG‰µ"·‘\*Ūł$EĪćž¹ō­ĻYé7·S>”žfł—#ęaļYĖbĻ5¼¶œ[Ohbt\(5ÅėwW6Ų³y–'*HĻP;ĄbĮi 6Āu™Tœ­Y²Ōaѝ®gUøeĖmcĮ¦„vŚĈµŻ-æ“l×Oq8mœaF’ ·©i±xŖuø³ŒĖ&×ņ’ˆŌ‘T¦L‘ÄĻć-.ūʐhŻ-­ąņ¤)Ė4ĆĻæZī ž”or—RE;GĀØŚr čjž¦V3õŲüF· uaq »W IäØīr9é_8üLš³­jś5ōwń&•¦{„ņæ×œtėHŅ= ų_I:½ä‹df‰p‘“ƒŒūwņ§ĘxÄž0·½“¼ÕmtkXDQŚÉ“ɞI8äž5™¬cv})į/‹Ņų;įv“£j>™‹J¶‚åµi£ūc X7“ž¦¹?ųL,¼;%Ė^G [‡Ā’ īē™ļJķ„wįOi·> ¶/Ÿ¹™7˜ÉXÓæ#ӊī~!x§T¹Š–ņÖyu{(ˆ[_³§<ü*ģĶĻjų9{¦xH—Ä·s?ˆœ3$kŹĘKg ×ōÆ żØü}=¤ל„Œ7fł&ŠŃV(Œø?•>mle'Šō/xūCšæ„ōZi·Z–™)…ĖĘē-Ż=2*ņ’ˆZ¼7ZÓ_ŁMžt‚o+vL'Ņ£˜8³Ģf’tŽŽiŽĄ\į³ÉÕŚxĪĆN±6h.²ĄĘ:€{“Š9ĮG¹ā¾1ńĪ“—¶ś|ŃEię•@ź½…cÉć­2™dWk·^žE.fW!Öü1ų{¢|@‡RńUŚ\Z >ń#Sž±ś†JÕńmóŪŻ“ÖŠ-ɊM²<ŒP٧/S‘æńeާö[2ĒȈČ„‡ļØėŠŪÓ“-[ÄÓ\ŲiįWzƒ$*ēę"’6Q9‰>Ņu>ļQÓEä—ö“<2øLł§†3Ö¼GĀæ>"x’u“OÓ®£‰žäņ)^~˜ćVŃŲ.}ż¤hM¤xcOšÕŅż¶ö(ǟpĆę/·G ®^ēMÓō GYd‚ä&ęå˜óżi˜¹3ĢuŸ: ”*‰„Ž _—åÄō–Ś|1JˆĻłcžzö FĪ›„Ł[µĢ†0dq“žćŽ£·—T‰ī`O³†rOœ™ƒ}NÆL±ø’ŽŪQø„¢3c ½OÓņ­ R+k’¦µŒm  z}§‡"·ea¹i0æ1ĄAėEö‰s óéÖÖoxK|Š }³LŚ.Ē¢Ēįų“Ą)£Ću“­”M!Œ“ zĪšž­ų;H¶Ń¼/xnõhįe7J0ä÷+ųP_7sęxoÅHš‹é®&Õ<ę2EłÓ'…ć¦+ݼ{}‹g©n„{œ’@źhøI#Ēž%Ė}®ŽAdĄ±čŠq»ėRųOń©øÓšūźĄņĒŠŠsŹ'_ÆųjZ>©'Ś-I°ØPżĘļ^#{kā-ĘēLæ™ęŒüą”äĒ5J ¢Zš™¬^ßX¼Oök“””wx»ŒWŅ£ø·ŸĆv¾¶1Ć5±“däsøō¬Uµ:˜®o›Nµ³¹īPxłˆ’ėׇųóGūd3_©ŁūŠiĘZ”‘„¤ŁX_Ēgor‘ŚĀØš>XūŸzŠ“įʍ4©qq-øÜ”ČūgÖ”ŌHøÕču*ųsį«ßYéš\v£Xy˜Ē;G¦>µč_³OĆÆ|8ÕnMż½»›ø{€™sĒā°•~†±wEoŽ>:ž÷NÕ¬mķ ™äjœœōł«óųŲĻēMnEœaœ)%Ģˆv£uofšK<ägęćņ­SÕ. ›KŅMȝ¶ŲÉąžõ|®Ą£f};šŽŚļOš‡Wy Ńu‘Ü–ocŸóÅOž‡ „üp‰<ÖŹ_S\ķŪBć#U¹šĀFÕoJł »±Œć„’ 4Z$:¬3ŪMp Ć„ ܙ;&Ÿ§źš„÷pAo<ņHwy˜ĒµI'„u XßI’†<īw gėÖ®0¹‹f ·†®bŌvˆ]ā¼Įy#ž*ŲšŽumG_×tÆĖk.Šą“pōÜF@ēśUµe &zvÆxkƗIöq價¼³ŃG¾+Żžürš>½ā»ļN:fŽQV݉Y ®z“žĆŌ)0”ŃņĻķ7w{’ uM{ėo [d†/”4ŗ;÷Æ ĖqćżĆŚž§©-®—Q,;y~^“deĪ|ēńŽłµĻöM"="ĘÖŁ!`¼,żķ½ŗT:¦–4ۈg™>ŠÉž#?Ņ©K]KNåK="Öāx",Łł£yĒ©®·Yńõ†‹s%‚æŚķłi$cå#±5Jc5Ļ‹ō}gGé•ī£@‘a Ļ9?Jņ-bāĘēSŽā;KpŪ|­å·R“Š\Ē­ųh[Ī·ŚĶ•b¤Š4ā×į®Ź€‡+“Y3Šl®ō»ĖǶ¼hmä\»IŒöącš®nó[±ŽęćĖh[Ź'¢ąVR`ܽ=uPĶå2ī— ­ļé§É“Ō$‘Hy2ŠOQź}«;šEŪFz Ękˆ!žE_0avŽæJI|l÷†{)ięp•Ö“‹±£eĶsMžÅšÕÄö0Mqz²ÆlØC×õ‘ Ew2¼³…„Uq‚Õ­ĢeähųƒĆ’Łé ‰=Śł™i’ĻJÖšē‡ćÖę‚;8ēŌ.ĀĘz’…rv:_Ü®¦Ś“Å؄¬±€8÷ĶI‹2Č<Æ“\‚ŗzē’×LŽvIŖŪa‡$ŚMs,{Vė#©q oŖ\i„e`ˆ¹.ć9늸#jRw<_ƾÖńż„i111ŸīüXļ]OƋ¢ņŅpxܧ–z47>™>I“Ō55haš'KVRy˜ć=ń_2ɬ7ŪDšę6ŗĮ)įńÖ³c:h¼y„ņ,wJw6HĪ2x‘oį?Wø•ŲZ݌&Š0Ö”Ģ$ѱoįŻBD)cŽH8ł±’ź§ŪkŠA<é{$a]ڜes EĖcŃ“½_BžĆŌµ‹­Fc·ĄXUĄ’bs€õs_'ß|Fš†„g=•Üd>QbFz‘TTiX~›¤hśśj— ŗ5mÄuõś×Ō–v‡‡­uH$qk11§É…GsųÕFV/Dy§l`½²·²³¹š@W–óž5ęh6z Bn ›²Uds×>¾õŖw#œ«Æ%孒ÜX†øÉżę;-iųā,°źzV‡4e,$€ ÷ķCd©t=ĻSń,1I² ¢hԜ÷ݧ܈®fq 9Vūģ}@®„|Dŗu­Å¬¢cs ·ü*yu¹«ĮjśĆźhLČń žč+‹™…µĀ.Nr8Ī)Ųēp{xŽZ«7ĻŽļ\ņČņ#4“łmӑĮ ‹F$F,%?ĀGzõ'ÅfIŌČeŒØ ©ŲĪIō+ŻųŒ_\›y.U”“ƒĒO­e¼:]¬÷AńĖ”l}kUTns‰Ø«ŻI²•Eą1UõBĖ Jņ?śÕœ–§B0“ŁŪĢW23/_zōˆµė’!VŻZ)p0qYJ!Źö·“ķ‰,ÅEck–²Ś'Mń8Įć½Lec²(łā‡”·µf“Œ\ĀI"DČ*kņ×öš.“ā x“Āwv’&Ÿ"“šŗ®pÄcwąV¦rZĖ?ƟĶšūāˆ<>-5(cĀÉoē'PGQõĄā¼Īv•¤x’&SŽ9üktĪY®¦u܎”Œ[Hąõē­S»‚®«¦AČīi„cž’$bė“$g‚£½R})­€wp!cø+/UŖå+œŽ9eUpį|­Ū”Ś­A©ŹÓCå ćā§÷.,ė-utRn\¹Č»g©•› “‘ŽÕ„ŗE½¢’g’ŒZĒĮæŠ>ų…§­„֙ ¾EÜ%¹`ģqģ@Æķ“öBųń„ų˶>!Ņd‚ź –%˜Fć&3ü^ųõ®yģvEŸ«n„öŠM†Mˆž%5OÄ:|ž+Ńīm"™a½Ē™g.pbqčkŽkRåĖž ū]Zéžųėįæ Iv—”›Q{`I7įqĻ(lĘæ•˜Æ~Õ[„–³¬Œ…HĮʜZÉĀę=ēį‘Ö5{ėM6Äīƒ Š£8õ5õæˆ-”эØÖ.<’r¼«cśWĶ橌Glmk—“ŸŲų–žĪUߑ;t=+ø›Ä6޹“±æ¾ƒķ2±—œŒuĻā+Žœl¤zżį»»­O@3ƒ=²įJ‘œg½U¼G‡`e܃#łWŲ`$šŠńq0w³9‹Ć"Lv©d=zKk[…Ÿ0]†6ēõÆbš<¹™b¶ÆsupĢ“6@c޶5?\Z[Ēhˆ\’é‘ZøŽ2:{čRÅi›Ō7!BŹĶŠ·sŸJo‹,¬’²ķ/"nƚO•󝾧õż)Ę"“<ĘM?U¼·V‚@¾Ž„dfÆ_x?VŅ|:ŗ½żķ›£LÉå«|č1Hō÷­™ē"c+¬Bu11čMjÉ$vńˆĀ¶īŲōõ¦g 6ct˜,ŪĮčNs] „¼°]&ć"ćØķBEĒc¶Ó’ē֓ަ3¾Ę>­¢-Ō¾uʱ ‡GCéłÖ_†ü9ś‰’r@b= Æ2šęs~‰É/#ę#ō©”Fö¹ļZ&Š—ŗT ,f9 å·zŠÅń RąĢ€į”g SjAƒī\6)ąsœŠŗŠ„œR0PćØėV&Ģ”ÓdŌ·ĢĒ;SžMvZ”@ÜD!ø ·9ķŚ®Rč%-lXÖm[i#•Y×9 VM„ŒčŠ[ZĀ®Œß1Ż¢¤Ļ”ķ®Łķō¦ŽY6(Tõ•¢Éik`ŽK™c’v J¹Ŗźw0iŅYÄȐł€ącę#’Ök)0<Äśa™ēŗ‘Fö$±×1§ŁżŽēĢ“ˆzŒžµXi${—›._~@Ļ®Ky%Ā“l˜€t¦‹Š.Ś[\jQ,BŹFõ®śĒH¹-¢Y`¶A8ę·5=?ŁŚį£W’4cµ¹ ’ÖÆ ×VóÄi<ČĶjŠC„ ‘εL£q4z§ĆĻŻų{ĀI„ėOÅÅŗ“ę°Ė0ōÉę¹{ÅŅkW öU0H¼īSŌzVVčccNĘ ĆhJM–uĖkšxęæ·šŻķf©oSBCæCJ%’„nŽŽņęmžZł›˜rŲ­ü]²¾¹»“PŃåXeFh$ >÷8$uü)3¦&/Œuųu0æk+$ŖIB9#é^CuØœ®ąNy¬¹Ź’ŠK{¹eC‡wQņńZPė'O¬óHźē<Ÿŗk[J(ķķ|PóO īŁQ€½+‘Öµ‰ēŌ.3ægNH§ōFLčlt=JźŃ.ŁO–Fw{ ī¼9¢^_Y­¬P9\¶īþkNAÅŲv³įĖ Ś$ŗs)¹WݵOśWØŁOŖ€&"7-ó“Ī+3vyż·‡õ}JźīŽ;7–(\†* zžµė¾Š`³¬ēT k™GÆčh@éõ;g¼É'ÖøŻfĻSńW‹ōż"ÖŅŽŪKXBż¢F óŠ’<Óå3qšć]Óõ9į»[{®ńÉ̊æ\š†ÓMŃt‹Ū»kėµ{²£;Ž 4¬.C µšĄÓ”±B…÷*žėžæ”­m'[ŽĻ̊Ņ`ņ(­"ež«’õ„pČq‘Ą¬ µ/²MęVķ9čh$©®Ė6¦,mģtč!T½‘OĢä÷žU(KŲ`…¾]ø&“‰¢‘Ų%[WŻ'’ƒ– ż+s»c“,O5”£cC[J²·Y² ½{×N,f‰#ņ×ō tśÓ‹±¼Uˆ£ŅĪwt’&‘Ę[ŠĀńĆŪŪ¹pøEÜ~+Q™Śwڵ; ĘÓfUÄ{›'µT³¹`U‡š8,SXɬś~¹%å݁ŽĄW„x"9äŃöźŲ‹×łX9ū¤{TŲgu¢é×6“=Ü­¹`1Ąå.Æ”TX™ī l)äėłUr³)GS™ŃÕģ„q@ŖŖ»š¹ā’ų‚=Zµæ6öļŖE€PÆ_ĆŚ›ŗWSÕ¾kwz܁ń3 ,>š}xÆCÕ/4/JŒ[Éŗ) ·©ćSķ-¹v<’PŸNžÉu&Grq‚y‡<ū„»k§„nĄHČ?•iķ’}O iuŻSPøl—XåumąŽ7qśb»¹›OÓaoš$«‚~õC0`×ōÕÕ!ŽH”7™ōĶtņG’ (³u3ėĶf¦‘į9,nod¾x,Ü™dlڲ„žÖĒ•ŹÉĪ>SéE€źe½Š¾Ļh±źŻ×sŽ…NzrźŗöūäIn…,½G„#XÄźō»84iķę ×C†*[/iŗuūjŚlqĮutĘI@8½j¹ģ]ŽÄO )®яUź÷Æ(ń‹„ R[˜c¶I\ Å@½Ŗy€äFŸu Ļć$=‚œųÖ,āĀāHB.żŻśŠ`Ķ;mzŚWp÷ Ą$(>ø®M E%Ė™w³9'œžTģ"¬Šė1-ózģt…{}³©ÉƒéHe/x‡}Ć@²ĻČ@āŗ‡“ŪÉØĶmęļp˜uc»n}i\Łlz^§¤}²±š,ĀäüŲū¢¾zńŸ‚Æ4Icņck»‘Ō—žž“ĘCį} īęxŚŃŽbĆjö®łģ-"†xVx¢¼9VLņ@ ‰#†‡Ć7ŃH.EȞŁä9Rsé[óxf7D•˜o8' ÷iŲȗģ&Ņtū;žč zÖ…ÖÆw¤i“ltžYTØĄĒj@pzmĖéńK#B[ 8$šō-TÕ-į}ĮrŪJ“ŠŠTec¬6kayo{qx<˜£ /_¦3ōĒė\ωµķ"v±µ­ÖM’tcwÆč)§bµf®µńĒIµÓ퐰 *y]qßҽGńM†§¢G䢤ø{“WĪ.SęĻŪM©ßźq^UMČ©¹÷ÆYųoØCsimĮXIUČūĄtØlƒ„ńM‹]ŻČšlžY>i õgÓ5ąÓY“¶„ N&¹cĀ‘÷W’×H {o¬³ŁŽYÜāEł™1Ž•č:]õć_Éöß/ģĖĆóō¤Źå/jO$ŪäIhyk…Õ£ūLOl’Żŗ•ź+"ŕȶ“Ÿjēu»øoUZfaśā'cN»’ eWŠź1My$—tk> īĮ­`‹“Hm Yn÷4ŠpqWdŽŪTˆŪÜ*Ė«_C£Ö- ŌķōK]Q-dŃ2Ÿ—ÆNs\dž’ĀįęóQ”/ń{Ör—b“=+ĀŚŻ­­ŸömÜqMę8’XyčsÅx¦½Ŗ>”ŖjqÜČ&³“}‘0:ž9¬Ź:(5(µė ¤qCnF_¼äśŸŹŖ]é’š[]K¶-ĮrĮ½ŖĶÉt=an&BD%˜nŚNK}ØnAڊŹrUNjyŲŻŹžUU$wŖS@—vN°ĀK¶ķ<֑1}‹ķ¦Ķ¤Cmqz$ņ™qƒŪŽ“ŗnæcx! ØčĒ.üśUŌ–k+\ ĘlŒ`ą ću-F[«»L©]‡“Ó֐õ…ƒÉj ².s‘ެkŃ=‡“ŚŒØlœÓa%ĢsDŅÄ»vö«Zc\„iŌ°%Ė-l‘ÜŁ]\ÜŁ—˜ ĮŚw ēéXz¾œZHāŠĖ?^Ų¦B™ēž'ÓHŲa@²8æPkAß{p!ƒ‚Üä}Śe€ö’Į-Ä%¢ŚHcڹõ±ū`7–ŗĘ8u¬fm ˆō]bÓR½—MÖmīŪŹq€ÆÓŸĘ±ēXtyŪOÓQ°Ęüäę čOBÓ4—>]³ž£ę±^±ąõ‚Łą ­” Ėž)ŲĪR:m~9īcŌ#µŲ‘ŗłGjłūč„yQ¼³Ę €vń‘ė[(œ×Öäš’g>ŸeuorÆ,ہ\üĆŽ®5ŒšYFĻÉ'¶k9;™ŚZ¤·‰qbn.OĖ8Įžõjß]ė–~J-œbŁ»qÉöā„#ty–§āsT¾š_2㑳Ė+ņØķ]w‚¼=Æ}¹uÉ.–ĢBAM™ÜF;Ö±ˆŪ=7Ć>Óµ^źāź5“iߒ;ūW}­[Cŗ0ŠT޼wŖ%³Ā5›»ćØĶgr…d^Bq·$*µ¦Eq*ŖČOŲŌTOaskcŌ­ķbM=5 Fo*ŖĒģǚ:^GÆiVŗž·PĖ\1Ū»§éY ›ÄvsųmlķDpLĢ yŠį¶žĆŠäaš%Hõ;ÅŪ*1fĻzjiYŻ]»4T’N€w®āĻHšTœĖ2¤€ƒG½6‚ĒšxÆJžŚśiJĘą0’V~ż\ÓüØĖz·S#¤)V=ø;BOåHŅ1<ńu[Ķ^k›Čc u1ŽC~5[Pų«[Ķ1Ė *6†\‚G°ė@łMķ ]@öø˜†©=Mzn‘%¼R¤0–Ī)›ė3 Fy&®–±|Ÿž·ė^q«ų¦ĆRgM¢GGž!׋cLān/žńē}Ā9]É ōĢ^4ŅĖ$,\2œęœ]˜„Ōö‡š–g£­¦²&s¼ŗJ§‘ķƒųW;ćVāéå»Ws üØĄ¶DŸ;j޼Ō&ymįO2GÜå³ó~5Ž[x>öļF[IlŹM»{”§Ė„Ķ##Rų}'†“č¦TģĄäŒz×Ļ-ך$-d¤ >Įؔ ¹³ā½BŅ8–óFca§ūXīk*=SPŌtöµžÉVŻ£ÉČČvśÖV›¦ųZtćy<$ę@vłTW*Ė'ößŚ!T·Ž\BQøcÓ·zŅ=€v”pJNĻLńųÖm—†ģc¶øø[kXaƒH Y½k[˜4Ģ­NŽx-Ńę†%pĄ”#§jö/ xŽÖĪĪ;Č­ē½TR¦#•.zwÅF‘‰ÕŽxž/jve¤Z}¼ȌA?+ć×¹ļ^g©­GÖ·ZƒÜō_,‚©žŸ„O"ģõ/ xs]ń²%ēŪZ :9¤˜¹W<~£[ų]®ÉŖ]Ż6²·Z8œGe@Ļ«ޜcb£z7¬t-Mō-"ś;ŻBįĆ¢Fwof…?ҽĮ¦NAąŲd‘ę€ƒ&VqĻėL£²Ö“ŸAĢzDrMq›27_ź~Õ~%üNOń)¹—PU p‡P~öźIŹ­EµŠ¼„ésÜ#XŚ‰9*?ņėIu+†–ŲŸ"&ßóūTøIŲĶŌ-åžĢ“ ²t8@Ć#ņØģmvA%ŁkS"ĘŪĆ äć°ØŒnf¤öGĢ÷‘jWz„Ü 3JņŹJćÓÓižÕ%Šéµ iVWR°1^3õō­9¼Wsź„~Ņü'įitŁ5 ė«™®®ŽG™‚_nhŌķ“Ė–øŠHāV?6Ö$R‡Q¹v<æUÓ-Õ4½§Ė8+ÓhÆNųāż+ĀYÉŖ«]Ö@€eAuØFs™ŁiŃō½*b‘n£¹‘ī°ä3F³Ļē]Ņęžöę{øÓiĮ}ńŅ­O¹Ÿ;0¢ń.‹>£ufgtÅpŅå_×½kÉ~ K®Ķ4š§ļ1“dV5.į%œ2źz‹£ŁƘŃĘIō>•ęŚœWś‚O –+dvņöó‘źjyŃJGk>š–lŒŒÅHēpäšć5mf} T¹!8e$0ąœŌČ|§£ézšx‡LXܬĢÜ_ąsč+œ··›MŻIpdŗķmüķķłÕÅX«[CQš¼~-VŌuiď`xĆ.Bć?ćVō[mRĪŽŚmo³ÄX(]ŹĄv¦kæÅ.«ąż|ÅŗÖ,ÄY°wžõótžŌ4·Š£ŗŌv_„“LۛРäµ>‚Ó¼cwØ[&—ŖŽ,†5ČP*1ŽŸ…&²Ž¶p$q¬V쁗«ņG?­-ģRŅuȑ “œøm¹eōō§ßüFAŌÖ}>ŚŌŅ1·Ļr†ĒTÉči=+Ńž!¶ŸyāNęa=Ė“©“šĢ}¾“žųé¬ųcĘw>"¼·†ėKŽŁŃm[ųœē õ„ļ±ŖW3®µÓ‚dŚØšeKyōnō5įž*SØŻÜĐł© ¼Aö”æCŹ"ÖuŻöģ›y •>FfŒŁžļ¾+éI/.tŽņāŁīÆ~Ī»|ńÓ#­)_”Vźr×~1Öļ4„%Q€#öÉė\¤śõę–āxm“j’ć9ÜŽ¢¢W!Ó9(§æµŠmB9„P*į³Ž›§ė7ڕپ7 (U~l¾Õ”ćŠlĻ@Ó~"/S‚ģšuŚ„5ėz_Ä­r]2īņćY·¾ŌMß2 éƒłVČ“ĪĆŽÕ5ȵ­s^½‹ū%åyVI$Ć9ō“©čŽøC¤ŁŚB·,v™—’ĆÓ?oMٚFG/mū=Ļ­Ķw}yqµ„Qf%WżćN•Š KĀ_ ®Eʝcm«źL:†µöš÷†OJc؎+j÷ ąõĶyˆe¼ó’(Xī<ąž)sks¼šjG>5„ÄŪ/ʾœöĻZæ&™{§Ī“ŗ‡Żżć@‹>!»Ń>ĮmØ\—hŪc2yĒS\ĘŸį°ž¤ŒÖsLŚ ”ןæ†ŅŽźÕ§’gL…QøŸ­yąš¦”.¦–wp·”֏āż+3uJēŌ’Į£I£ŲéÖŚ\VÆ ŽP|ĄøĒ_zņčmü?$ņÄn%…›Ė‰ };Rµ=DÓt’ h©ÆkRG=¶7¢†9Ų:Œ×žŪ|ekŸķ)“-9ŃŹ(vż}1BæPå:Öńlz¬q !®vśÕxõŪK+’–ļ¾ć=±ļBó‚©xĪŻU`¼™F_yĒ,M&“ńöŽ;•Ѯ䲹œØ­ā…ģū”4 &-WX×n¤’ļĖl2Ņæ±żkWn×}­ģ¬›•Ń€#Z©­šŪDŸĘńF·Ø™ŁäĘę'ƒÓ>żkÕµķ Ą-ķ‹.žSĖc·ļ~?\dLw8AZDdQ„§ŚŹRyrGV_ʼ’M]GE²ø{XāŽéTˆĖĒĆz$oljµŪ¦0Éy4ŽoŽłPz^q”ˆ4’I-óF÷;ČÜƞNIÉ¬ģ ś2óā‡Ņ-OÓļī"(Ļ4 ƒóvĻn=+•×µ+0—vņ}ČNįŌšĖ“ ™ą‹õ6Ōæ}q=Ģ §÷ZēŠon‰;™dÉō­”ĢžĒA¢ß뚜–Z]”.ņrN0æZn³ąĶF;łš[sö€NķĆ?ˆ«qEضrzlڊNšĮoso åO$WŌ~’ėSš½ˆŗŌķb@#-…SĄÜcÖ”£9ŕ|9}e ɤ^¤SŽŪØI\ ņG Šä>"énq,)eĒQ€ļB9„{žw{u©Å£‹HC¼Ąm•ź?ĪkŸÓ“ˆę“˜1¶ž2źĪi ,ō‰ēK{O:Y™d(¤Ń5ØSÉićó p˜nõ2—BĪŁõ›y-W‰aĀ– ·'ŽŁÆ4׌ƹu­¦»z‹4¦¹`Ē?)ļŗxŃ[6h£čģł.ßÓ½ZFv.Ÿe,ąHń“˜$`ēŸJŲA„”fā6ū'Ż$ŒĶh¤–¶*źžŃüv‘Į¦ėI+ڌžąĶ‘Šõ놓šu†äaęnø= \Ø=źdū›“Ž3Ě«¬¦grˆĒp5Œšœ0Ū4Ž[QÉ©Q1q±«„xÖ;9-•'øhw €O­{M¦¾%Ke†Iüéü gŪ|¦‘ÓC}łg»–é JÄ·Ģ1üė>šZZ)PÅa™ čøéS$]I»hpzĢßi–i”¢Ÿ—äū£×5ÅV)oą#nĒN-7©Zž+©·N±øŖ1ŠÄ¾“eXuw¤4ō/ŲĄ×pąžßĆ^¢hīf@Sœąc½TebGßųm䔬Ūü§ ĶyÕÅ½Å½ĀŁ””n¾§Ž©Ļ±¬c”܍§;łƒi^ ÅD“M?w#ØĶAEż&ÄÜNQ7F¼œbŗYõ++-9ć2bķŸg½"[?ŲcgŲ®ÅŚƒå1Į«zöŽ+˜—ea‘\“åÜėNĒ’ųēĆ£T“k‹†Ʉ“Ō­| ń_Ć+>µagl²XĒūėyY~ųłsų~µ×3łģ’‚ƒ|ķ˜ń¶‘q$ 4˜ø!ÄyĻCśWįŪ'Ūg)öK†¼Lccwśę·±„£¹‡*ķ\t\• 9ÉŖ¾To9擏փ–Ł%óFInž…j µž_*ßĶiˆĀ ż*øĖ¹"\+#4/^;•Öš";!q!9ĮFV.2#‰žŁäd‘ÖFĒ˜€=@­ė’³ÜĘn#’x¹'iĮ­Q¬YŪiZŹEóBcĘŅW89Æčž ?ūKéqĻ'Ć?ŽM„olD^CŸs«ƒßæœćŌé§3ś„ų3ć-Z {}+]»Žym”äžY­Ū•$÷8aĶ}_½±·Ž]:Möģ<Äaü@×4āt%s˾<ü3šēĘ’„&ųSāCåAŖĆ"Y\€7ŁÜģ;Ysܜ~ėüå?joŚļĄ?‰>,šĪ½§IbÖŗ¬ÖģeˆÄX+£ų·x¬y{Xš}Äś§…5›}[E¹æMF1³lm“0$WŅ:õ’Én/ǜ jæ3`¶+ĒÅҾ汫ŠōiŹßI6Ėx"Fß'łƒÓėļ^¹ØhöŗŽ©ktļhÓĖTüŁĘQ^?-™ŅµÕž³ąÆÜis®†öļ2<€«÷W¾ć^ß©ŲĆ!‚ke ó‘ü5ķåõdzœN¬Įe`ŖĆkrHķUm%1ÜC)PĄÆ¢„#Į«¹æ{ĪB±½Ņ¹Ķn#+iį=žÕŁt1L›Fµø¶F¾q'öbØśäšģ^źyį[B$‡ļ"“÷}’*vG!® ¤čŖŠIR$ŌŽ)īl’h0J,YäÜÖjVĖM£[›{uóFs…éPE§¤ÅščĘ5|čÉĮµŒXN» :žqé[~ź ­ĆgųReÅ4MĖ|Ŗd; ö5ŠŁĒ Ü -e8fqT·(ĶÕ¬÷[-¶vž÷ҽĀךé¾WXqØŹK0qĄ\cõ­I’.» Ė@…T.w r¼:x–Bē®ļ’U3.Sεb{¹žĪ‚b{œžG„lh«‘\DRß;~lįk7…Øš:„•ŹDpl…SĮĒL ę¦Ņ„HfhĘӎ÷4)÷©…Œ÷Bń/p§!X÷ōĶt—V÷«kĻGqČµ2åDpźR‹q ‰Öéz°ļ\Ī«¦kQŽ^:UĆ&įÉõĒÆ…ä}e{®ųn=JĘ6RQeŻÓåĻ8Æ66Ļ1Xnæć㢖9 S'”’ćĄ>F›ż„-ŌŽŖ76၊ē“ĖXłSČóÕyW4åG¤Üų„RŅ)ņ…#ę­GKeźQĘ'lķž„RV } \[Üß[ĬQךü«PkX”DĮÄĒŽ™IjI¦[Ēo,[‚’H'Ó³,‰w­1† @…*½1@- w܋l‹1;O=k Ņ4hm£”ιv^øļCĻ.ń%åͬWsŻ*ıÉņÜlĻS\ākO·Ģ`„L¤Ńp—CƃÄ^iĘ9ŠĢøĘIćčpž#Ū,^Uŗ¤õ„fāĖ1l|Ē+·śĄvœŽė^™se8šŁub“¢Ž7b®1"Q<÷EūD÷‰ŽĻ&6Ÿs^‡k¢E¤gIŒ u­!(—acoci>Äx£Ė;qœWŒų›Z³×5`¶‘¤Bm9ĶZ\«c°m-­ÄöŹXØ'#Æz~›­i°ÉåĶVŪFŅ‹ĘEZVžÕÆa¹Ō•Q’pXąIĪųDžŠ„OhHhĮ8j×@äFÆĆ;[e²Ū:C Œ’¼Ėd©Ļ5ļ:V›lé$I˜;b„Č“Ž7Z½†+ˆ£ŠhÄ\īĒ5ēz¶æx÷"Ņ’uF'pn0kžLŃE½½Ķ«Z:‡™IbŽ¾ÕŹ\ģ’īø€“#šÜ=*IŠģģm“—‘Zx5ŁŠœsŽ+™Ō£’ d’Ę+”dUXqfĪöČķŅf÷1Ę1“^Ća«Al‘[“‹eõö„ģ¢ įPĀL0mĮ=_’„K³Ó~Ų#H7üįģЧœ ńT gęG)Én¤Y]żé9XŚ1°Ų¾O4’H.|ŲŻL\p «v«Ŗh÷°%ø’+uūų^£Ś£Ÿ±V<’ÄRyž ¾vŗ;$8Mü0sś× ü?¹ÓtÓ_^yVd1\’{’×V¤s“ŃŻŪjņŻK*ŲtfÉ÷¬N4ķZkŁ"XndL9+ĪßAłšb9©uØ4ū֙Tö0'5Z=jõŠ=øGf=Hč+9Hč:K«éH¶&dóX… ō¬gŽĪ锝’Ysėü«1X†iv“Š£l‡ęē°­Ż7ĀÓŻ[­ÉŽ2ø$iÆ29JQčuÕĄŽ%ÜøÜoZ2XʱˆŃĄź+d'a\Z“Ņ\4‘Œ·Lu’©4ļ²[x×$n““5Q,išøwW—åUĻoZŠē_K„†ŻHČ8=*Ga‘ŹĘąD”䯞‚²uĻ <)3K,S±ß…_¼3ҁõ1ķ<ū˜|ØNуīMhė׳/‘t…”ŸNæZĪP6G8³‹k…XwG‘€=+£ŠįyŽIåߐvņx5oSÓęŌ~Ļ `Ks÷~•>‘ucav°]•ąt­¢¬sĪ÷ŠōM~āÓ\Ńa[x sœś×‡Æ‡õÆ^2Ū,×-žų­\Lį¹Āj7÷ZjĢ|ȈV‘ĮڼdVd1O& vWpIą{Ō5ŠŠõ˜üSo¦iÖö³A–q“Œ~µƒā=PxŠé,ķŃ­æwÉNIĒ֋ ˜±Ųn…Õīb“X†ģČqæ…kų_RKÉ'ŅD–§ēßbéźkXĘʰx–źĶ5 >śĪ8ÕnĮ&’¾øśW +R‚Żķ!XŚ4ŚĒ9.}jĄšO‰ŅĶmyf«{)Źįa¾µ›XOµZ¬Q†łTŗ}K¤év‡‡uK™eUqŪx¶ä»žœö–„žwšėC7šÕśė–÷1Č"¹ æß’>•›©üJ’„{Ęz†ēŠ­aouök‚ćŻ0ČzžµQV*3īij>ŅÆ&ŸSŅģR×ĻĮ*[īŸJ·”éZµ”ž+ˆSģä•9?\AĢ×Óo­ō›¹!HĆæ^½+jĘīļUž{ƒkåD…Üx2NoÅsYŚĢ‘L#yČēó® m]4É"¹ĮȎ§+Dø“i^+Ö|Y¦Ļr‘ƒ«”_›9ö­V»šŻč°žŻø“ģėꅜ0$õŖ,l£rę™cg®Ė]މeÆ=ÅGć]N…Į±™YJJuĖ`gśŠ/#ĀzD÷'{žC†éÅz"I>Ÿ1y4Lr¾Œ;ŠģQ‡F²tŸQ¾>sy ¤nz£•oŽźŅΊŅc(Ćyk÷F)¦|ėŖxJXuyšū}Ŕ›˜>īI'Š§c”Ś[Īä¤A@ČČę˜9ՄFxJģ cÓéZšdc›ķ2§sĻaS-‰6Æu 7TŠe„ł<|ø9Æ»‰ÕīærEŗ¹]Ä`šĖ—[˜[^Y­ĢlØŹwjŌ»o&éVgU‘øĪ8j¾D9—­µGŠÜDńqYÄśō TŪ#!ĒŽóÖ“2rčwšōšÄśe”Š„I_©8}kß¼I hžšŠź‘˜fvøŪeĮe„c,Hü*E=ųūY±Õ4»½Ėɚּ0»ˆ€8ÉSĪ+ŹįŃtt·†Åf†Xžć¾7ĄÉ4›.)žYāyļ“Ż=ōK¶fžįdĄc“Ļ>ƒ5ŪųrM3BūD>#¾ķ­ČŒL¤lśTrõ4:^;;½?R“Nž%Ōł °Čō8ƛu廂ęɝń švž§Ž‹°4¬ōØ.öHĄĖuR{ÖĻü$Z§ģ]‡—ožP-œ†N3ļVŲ›*ZŪŲŽ[M-ÓÅö€ąŖcœ{W7ā;Į£}ž;#Ś\p„±‘ž“&=gᄬßD×u[›šä’¤NXäØĒE…y½ę«¦#_]č²=ō±e= Ę=ŗt¬ä3Øš„Ž‘Ø]ŁÜކēŁœd×¹j0XjóĮj›­ĀmdžžÕ>jńg†,¼3ØŚ]: Eį<½qĪsōĮ£ą]hj±^A-“Å$L1ĢSLŃÄé—Wšž•©5åå̶Ž,{^=㯓ö·6©mö”;€ÆŠĀ¹ė֋™ŲóūŲ›Č*<ł T ä{W³Z[ßA ¤1O J:DK±Éėŗ®­ėebcH d,y}~µēڧˆģŽĘ;ļ¦žFŻöˆHłU’Æi÷*1<0ėm+ĆåĊĒå p£Ś½ĒUšoö÷„5x-õxģīęµa ^„xąß„)1Ÿ;ĮšBų,#+XŁŁ¼ī±äī”sü’:ł’Ę>3’āā;[;•ƒl¢1ņn$”ĮĻłļR»xĆ:eܐj(As$GĶ–@ģõ'Œl®įÕMĀ­ŖiIܟ›xīHģqQ)Yćæu­3ZÓt*8OqĪõr¬[vzūV׎¾!ZiŸ¬tĖŪ™#xn2d'±=łžuc2< C Ou§,±ó2zs]Rü/²ų ß_+yZ½¹>J÷cIöéA§9ķžųƒKŃf]fąM§\DرāK€Ä~•{ğõ B «M&;” ˜.Ųģ:|ß„&ģYĪ|?ųdŚ”)¬Mw ņČe±©/ $żÜž1ŸŅ½#῀4ŲxÆÅѽž§3lŽY`Ł$Ćµ.tLŸB?ų¢ĖÅW¤¾'1é0£“JҾĒp@é^«ųĆ:µM_HCoki!Š7“Ć»}½.s&lkYk¾Õµį}kmeO0‡ĪōcüJš}[R‹O³µ:-Ļ `W’ҟ7C&Ģ»]Q5:Idóķ„c°+A®rŽĀ÷O·ņż¤Ż#Ģܕ9ćõF‰%±æ¤ųĪŚźŽe¾†č²‡.[;Iē…znžŚ%½äŃx—Wµµ°…ÄīŲžļć@I”ŗeÆŚn&“KøS+Ļ\{žĄė¾ žņ&¾ø¶–Ö\“>V>c“•č=qŸĘ—‘ē—[ßźŅź—),o…®ģśõģžŠ<=Ŗ"Į«›— }¼·Žžµ<– …„’eى­w}›Q gŠä>&k6^Óć‹Ć m&”2§ŚŽ™$ß­LV¤(ž9”xŠöŹę+ĶņŽ„#xa’kŃűź\Y 6(ī]ƒyœ…=ŖłJä15įėµ›}˃<>{›%æÖµ21y@'>•øņĒØ#\CīŲsĒÜļR¤).¢xfKkĆOŻu2]ˆĪsé[®·{¶†| ążß­i Ģd®yēŒn[ZŅg–{eŗ™ī;¼¶Øē­y¦‰¦ėv.”q¢(†ņź‡<ćÕŖŽ£Åžq¦©"¼·Œ‹“’H\Ž‚¼†ĆNŌ5;öÓ¬ŸPē §ž+^Rćŗéž"šƒ õ4–)ĀķņĢ™\z‘ėWŅ_xœÉ,+;[Ä»¤ÄGk/±«±«‰ézĆGÓōU×µÉā)+łqĘ[ē`kCLšķ¶›ÜV–öŹó‘¼ķĖŒ““Z˜Ī#ē…ģā¹·xßqä®9é\>” ¶§”ź—61ÅĢ#*d8-ŪVLē±Ąxhß-ōńŻ‘ Œ øėÖT¼Õ#/Šżš<°NōćHĮ³Ļõćö‡hbw?tå[žšV­­j‹,ńyZZČØ! &sScxBĒč&›”Ū.в<)ö‚ŽUž,ƒł×Ķėhtßjj$»U¶cpõĶe3x³ŅnbŅo4™Z½i %²Ī?—¼ļĆö®÷|¤“‹2<¤üØ£”5J'9uā;­VŅƒ=ģæ4iĮŚ~Eqš†O J’²…OāŚ2­Ž 4fkĆÆi0ź0éö‰$óy`Ȅcī(¶‚)/彐6’¹æÓ§"ŲÉĢ·uąŪ=\\ßĒ<¢żS+œ O hŽöė­E-¶b l¾Łļ[Ø Sīu0,Zµ‹¬6iuÆ“éšā.|¬/Ś$ŽĮ-¬•Õ‹č¤óUʆę{·Ć½SN±µ±Ńā{æ)¶0vńŠžµėž,ńV—¤éPĒ=ŹŽģt#×ŠĖ”Čłž?Ļā—½ŗ·ŗ†dČA*¾£ŠWAØź±-¬›>v+·.£94łŗ#xģyÄ6ŅEs4ÅY‹­sśē†īü —ęݹzTŒ‡^ŚĪG[‹‰юāNHéX¾'ń„śĢpĮ!µ$¤a~źżiX™lr1@&Ž’įsڳ.ķ­ÅŅ VrFÓüTĢāģĻ\ųu§§Ÿ-óĄ£`­Įłø®ßÄq<ŗŒŅ“’“. žæZ|ŚX鄬Ģ[kKoµ@-BnĻĢqs_Fč: Vś\z}½“S.|Ę`2@ļĻ„g)XÕµc‹Ö|&,µHÆahb·gżū÷—‚*ńæ޼ZÅƟf iŹB³pĻģk>frTEm6 y ”Kv?tö©¦ŠČ‘$ŒØłĘ:P¤rIjUÕt«kČ$“vū<„O#¦kŹu+Ķ&ź&vd\``śµqÕÜq•“4l..õ ÖĶ泑Č?Å[Ā^e£Ć䅅\g5¢W+›Q—Z7öE¢®ž’éL§h#{U’ ®¢O7r1äū“[(Ų‡ä{^‡¤2Ž#ß]Ą"!B7enä×y?‡t_é÷V±źvę-øŪæ }Hǽ;W¹«ąo†ö~“¹ 97d±É ļŽø?i¶ÉwöK‡–U/śT9#n‡Źŗ„Ź’kˆwLÓ?Ķ+ģ8_jŽųŁ00ļ2Éü$/T)[a3WBšņEšd-l‚zšöÆ OöR×+‡D8!°yĄüźœÅĢO}%ģ:Ė&Ņē Kr+Œ‡ĆRŪ=ä³j2\Ė/ ®pz ‹”’g=ŖiI¼[Ŗ¼į°"©Ė¤ŁZ"CöKhäÉĮ„.kĖŲÅ\©d 䎕Ķj«¾éĢ苀øMD§ŲR‰ÖųĆŽtM$ŠU~Ö8ÜŽ‚½CL±[{XVHci ĖŲRē2(źé+”A³©ĻJņ-Z'iŽTŒ§Ģ{š >tk Že„F’c#;qČ<óQŚM›ˆŠ•ŁŗŸ6¶(ōĖŠKP¶Ÿx’ +ƒ‘ż+ŸC’ūT’9ŁUH8!zžĀ©3 >§ū!鑦§fņT)e„£I”¶¹ 䞿MqSÜōœ ½n̲L<¼ĘĄ£dqƒ_)üHš¼qŲÜĮošT`~Øk²;cņ«öų?k­č^#ŃƜo^ģnĒ’tzg„*>jß üSŖŁ^Ł®•½’%‚L䁞WøükxH–¹Xc„‚ŪĆ|ŲĻ kžŠŹÖńēØ9ĒéTsŹ= QR" øGćv 2x”µ‘ĆČĆ÷Dŗ}č1jĘĄtÜ1‡nć¦*ø²Df*§'œ™ A%Ŗ¾e  d.ZĪ?ø•†é[$aZĘF“ĖŠHūŃb=ó†ī3^łš›āæ |yį_iv3\^[jHķ ”_ įˆöéUävŃWg÷7ū!ügŠ|}į’ x›L˜Ļ„½“m"É6^[sŒÆįČϦ ~ŖųńKj]£½ĪęXKޱįś’õ«š¢:㼽ѠŌ"0L9¬8(ĆøÆęÆž Ūū é¾+ŃtļŚOĮV°ćAi«²–̐įz žæ‡­bĢĻć¾{y-®®Ėݽ‚sÉ• ŪÆ{ųQy„x§PÓōkķJĪÖė2^N<ĶæĀ=ūW2—øŚ.1>ڶX“)b²†%ž0`Ų$ÅA”Åykp„¼Ļ˜’Ć8ƕœģĪŲDæ”ź·pėw1\yČ0$ĒäńŸóÖ¾¼šGˆ”¾Ńć³Ō „MŪqČÉėė]øJJÅT¤„˜x³@ŽGŠņŻY"ŚCsŽøk łŹ}ć_[‡©t|zm2²J'ø)nĒĖÉwūWSeÄ"9Ł™‘HW|YĻcBŠY˜.ķ Š£Ė\żóXÖ‘æŚ§H £Æ"·'TWž[ØD“©"8lēY2_¬Ź»Üæć9ĶC€F] šn„åTŖČĮŹē5‘u$…d­É9yرfU¼¬'iœ¤‡@Ę1[S-ÄŚlĀ܌yekH 5#VOŒĀH±ąńÉ÷¬]2I^äČa¹ Ž„n®˜”s“ØFö¶QJńžƒ¶)“ŽD–šm8ی)ū€Õ29Ž—HœIm*¢nfzžUēŽ1i Tœ¶mćl6:ŸĀ”Č“Šśvŗ„2&č¢só‚Ćž;Rų–94ėTbBĀFN85 V3•“¹šžhÄ-&C€k±XŁ ŠV\śę“Q±œ¦N¶qE:œ#ÉÅuRŁ—“‡b’„ķäw«0“9Ū[dŽł”r…³ÉcKā»;;õŃ¢ŽŚ ¶ĢĢ[hĖ1Ļ9üEi{#;hkčRŽ%“ÜI<ÖA6"ƒ÷}«:ā[h&hĢlėU FgOs«‰ōa`ƒĶŹķėҼ¾Ņ;ėJį$B#aņóRįŲŁO¹źŽÓtN.乍.£? aĆ~4ĶwEKĶF•‘Ė/ĢūN=*-Ü%ätšݜv¬BŒō"¼Ļ[¶ē•’Ftf'žÕ&n&tāūdBH퐃½ĆŗEĢ©#Ȭ$ņGµcmāƒ\GtŅAw­øüabčoY”•ŚG\w¦J‰Įų«TžÓ‚hn£…Žz½p±Ą·Q,PĶČ鞔ÄßšŽ‹¾Y§v•Tą.ī1ō®źļM¶ž|Ēo!ć§q©³hööB@–į„'ųGzå5ūŪ«kg…ī]P”I­"»—ĶŠóč§¹†ŌĪ”ŃųĮžńÆBš5ĶėJ.C€ŁÉ9ĶiØ\ō^žQi4L†ćxĮŚyÅqš™cż£ ˆLqć<ąöåøāĪ×RÕvA<~vŁTqė^Et6ĪnĖ»Iµ,v:­7Nøxķn]0Īžbē©Óņ®¢ŚM’ŁĖyiēēŚFXūTJ]ć@§ļƲ4ŒÆ£8Ļé—ŗšĢW˜c™~P’:÷Éqнsiį ųwB–īā6ÖļrČŖąä€SƒEŹ>…}1›KŠV†Ż`$øĪy¬OųIu‹Ė«›H^$Œ‚¹ĒĢ:ēō§pQ±·į;Iōg{Ļ*[×ydv?u6m#Zši&øM)$L„ģ­Žƒōtč|ņśZB®RO;œdw¬»o2Öä»§Ķ»åā™…CÕ&—Ģ“·TØ9Ä}ė*źĘÖķ Čē9ėõŖēfBhšuŖÜ“2”1Ž“/4Ū6æ>D{“ ŻG֤؜ī™öf„zó ’"Ÿy[”=’•uś|÷—1˜“ö@żCc”¤kѾŁu¤čš¦ ÷q”,ĖĄ8ė_8ßIuqt×WKœ®ķĄqYŹ÷/˜ģ<+6Ń5ĘĄ¬Ēæź†£s&† „Œ!OŅ¢åI_SÄķ|Q}Ø_ź×Ó²Čä!P»@#®GÖ°µ½NćTŌ™J¬Pą¤šiݲZ;_[][ųsX† ‘$_õ€ąĘŽ£ė\5”wq£ÄĪŽfāNį[$a'ŠśCįÓYé¾½ū@ķ“å¢ŚĄ•Ęs‘Ū9Æ#ń£jŅĻkˆÆøœüŠA”qenD ““ ½…kéņ­ü%„dŒžõqC:9b0isĆū%#³Ó>• W:†ļ/]~ß4ˆć óIĮ’ RæSdŒ ÜŽAwP”•—=y®>7Š}³“†ĆJ’ō4m uŗi¹T9nqøWc¢ŻxŠÅģ€_°¹ł4£ŲŽÓü5qįYģ. [TĘ$ŒW˜_XÜŁÄ‘‘6ćµ½Ø'—±”eā™ü;4)$.É)ņ›„cŸj±|“+­åŠķ¾bqĀŽm.IŃ鶒˜–k–ņĘ3æf¹zźo_¹ži$ŚĮŌść½L‘¼XYĆ":3ĢĪ›‚ćŠWtאZ¹*ʬ~éQŒŌŽęiŌäY̶r6žC‚:ÕŌo5 ė+9–C$‘Šc|šč–mž„§ŽYOrё‚‘ĻåšąWHŗ·y"# §×¢Ćrf<ڜšÜtm ąqŅŗżY ³]R0£=)ZÓõéķoēø]ÉjŲ*3śŠÕ¶ÓøŌ3Œē œĪ“ŒŗŽÅś3źšžŸ4@Ą„]6€ß>¢‹ 610RÄ|źz ¾be »v6ņ”•ŌīV-Ķbé’Ė©ź;$V!nwøī)™ņŲō+m~Šj6šĄƒqsœu5Æāļ[jXÓ­€m&C÷iJ&ØĒŃeø·a¢Ė½v“޽1µō}¢ø‚+™dVUV?w#ڱq±¢™ąqéK-ÄÅ!Ir~P0?T/ģÅҽ(­Ėϵ!9täk“@”įõĘ+æÓ¬ŅÅ@Œ"19`¦·ŽÄšzżóß[%½ćyčØQsé\¶˜ˆ±Ķ,b,¶Ž™.V: GJŠĖĖ%„‘Ē tĶqóŲ͉$bÉĮ"±åw#œŠK3%“+…'ząVFpš̲^-¤äsōؔMéČėõOˆĒSÓE­Š¬.ČĮÉcļ^qÕŻÜŕ–EųQŹYšk%µ›iZ£˜ŅOAõĻÆnõм§YÅö‹+ oŻó"uŸzŚ1FR}ZĀ ąć åI•ŌAź( §4AĆėŚlÖ7hŠKōĆ`÷Ķ;N½žćY³²¾™\½GJÄUÕ<$žD7p8ic;öެ=ėŹ¼KÆkr¾Žš\Eh»]Y>œ})—a[M®iŅ ĖN‰!ĀĄ5ŚŲŪIŖZĶ<€ÄążMD¢l{6‰mV)ö†‰ŽĪ½k2žKId–;tF'åbW ö¬@ńoiZIÕÕ$¹*ŅeTÉ8ķSŪčöĆL0ÉŸn­‚Ī3“žETLęhéRĒ`@<”źž¤³^¼ņJ÷0żkTdR³ÓŅkŌ«2“»kÕŅė-§i‹ąĒ *>ń©q5ŒŽ&{ŪŁ‘Åø Įó3ÅU¶Ś@Ż×¼d౑f¼Rr»–Duą×w¦ų¢ņÉF“„w1Ü|¾aćĖÅ1oźŚō\F„żņ*I-®[dŖUį<‚zw{ēKgh²Ä²L‡nG'Ö¢ń0O˜qn¹@™©v<5“‹ū{«;Eä†%|³ŪÜT"[xSkÉ»j‡>Ęŗ—šśāÖ%» ó'?AZ—ÅÖ­§ŲI9#,Ać­3Ÿ¼ÕRÖēĖįŸ9ĻZӋW¶ņÉø$SƒóTr—Ķdf®š· ׉0—ćičkŗŃžÉl¦+„GzV‘ š—×^LVŃĆh¾R ƒ–ÉļZO”é—0Ē{ŌÓ8ĻOcMyˆŹ{öÓm'ótxüńPč¾nøÓ‰Ž=Œ8=6JŲ,tph&—÷VöėpŅ)Ē8źMs—6‘ ³iŅEuŸ—œI“3‡ÖŽ&¼]9„B| 6ē‘ĻZķ4ģ­7JÕõŻ@¹dņUBżĪū‡äi9"Yåśł–åˆ%øˆ’8>µcšĖØŪĶ<ė –Ł·–MRf”jž¶Ō-ę·ŗC°žŖpAĮ®A•tč ,I®Ō g6\"Õ¼'æjļsĖ2œ‚Wą_ [h“_CäG.üüĪ9N„öéśŃs[A’„ńš ‹±õ&ąĶĆzE¦™d×YŻ#ĮŌä×=ć?jwZ<«gžÄ›Tņö¤Ń²g„E,V7-—kV\ļ#·= tv-m©"p· æ&±c4ćŃīō¹ÖKII¶lƒbi”q: ™T¤,N=ż) Ć/Æc¹“»‹˜›fQū¦¹ķ6žł¤iī O xśP; sš¢JČĆĶĒҹé|%}$1\,Ģ œ>ń ,tśeŽ” {õ1PĆÜV†£©é°Ł]ݲ’6Ŗ ūŌ » ”Ś^™j³Gr>lķB~ķ5ļ“»äWÜ£$«(9£ŁõP»sį«Įš|2Ąį@f'ļõ‘yįĖ› ä–y•ķʱZ«—ø¹Žr{ėsū÷,3…g5Śiri×"Hådóö|‰ÜŌ‚F}ÕĘ­,QŚi“.Ÿ4r Ɏvē+oYÖÆfӅƒÜ—Āmϵ©Xęt[Čf»„„l-·£qü«ć’‰š­ōZ“š[Ė5•ݼĮXØäŒōōŖŒJr=‹į¬Vz·‡m/n,æ“ L‰9 Ę{Wń |<&—e ¼--į–uÜI+ĘüGZ%‘ęĶyu£_ė{»™`ģŚ\•P÷j ĻX^dzUepĀv‰éPŃFŖź¶Vz[A歜EĮ 1ŪÆćUµ/#M°…āp$lž£,zőŹög-.·&]ܰŸ”’~µĆjŗÅ׈µ›( ŠYUUt}°ŌO£tn÷Įö:l·Æl–€š8)ē^gć=VՇ=i _5Ė[Ł k“²ŗłDqÜ&20įÅ|æ> t›Ėˆōł$„NJ#ĻĻīqہłR¾¶7B-Ū«H²²°*=x®fśąĖrc™šÄeF:Š`hézŽ—¢$÷Oh×·æ(GŻ€œśwÆdš7Ä ?Ęzn”i¬/h™•NöōĪwŸń‹iisłp1»`6¶GŹ=ū×Ė’Y'ŪęElJä7’_ō¦āäVÓi‰"<é;nŚüöÆųU<īŅKØŖIj’ qéRŠGÄš…޵ā„ӖĪĪĘY]d6TŒų×ć_‰µ8õ]rēYŃō›kk›—™ĒŹI?„/3鋯&mĀPj!óZŠOˆ+ĒóÆ-ҼIØßh–6·‹æRøVÜq„ģöPIēvžŸQńLhšG‚iaD޹Æ@ų›ą[HōæĖi—Vö“–»™_œmŠtüØ3rčb\ųŖ;m:Ž+[MŖ"™c8 £€qė]†{šēµm;¹ĪāD#1Ž€{Ö©ˆč|3cö$I P+‡+Ā_jó?ˆĢÅm,†Ž{V˜©Wė‘ÓŠ,fąījųćį#qn4ļķ Æ²¶Ų@ߏ¹­Xų‡ÄZM’‰u³—É4ˆ0|„Ī@Ļ~)Ų=™SOŌ¼+ā›ķ-;W²¹’I1Ŗ7 øg'ÓŪŚh‡Ų^žÉO‘¼#H8ĄĶŖmncė+ØĻ!µ·Ž8Š!Ģ”¹cš‡JšĘ³0Īq:¶ŽI<Š;ρ,|;ĒYÉnē$‡Ļ\W–]+éSÜŽ”0HTrz?stF¹ā;XGR1ČÄ)ēŲ×Oąż @]VÅŽąGŽ$a•ÜwĶL„aÅX§ń.’KšF¢÷†ļĶis"ūøöō«:%ójZpŗ¼у–Ļ­dŁe4ż=äI]O˜¤¶Tc&Ÿc}q£źŚNū?·@nT¼lŲ:Єѯńsģ~.“JœiƒOø·rьįqžœ~5ĆÜEwŖZŪéܽ¤lĮA^6ā­@žRʵį{ė;'ŚŻÉ÷Ķröz^©¤_Ć©(ŪŅ ‘÷Héżj¹z›Fnj¼y«\h-d޲Üܶ'bœ}1ҹĶ^æŗŌō뻉®sÄ ˜ąrj¬Ķ#Ų¦°}'DxZį łŠgJšĖĶgSO<‚ērąŖØīŌ›°B*ā[ų+T×.nu DĆ ³’«ĘK1ÆEšēĀż2ćS²D‚9ī÷&ræwčr[Gń^ R/ˆz‚ėĘk:Ū j=śdb½—į4|Q"]ŻŁ-¬ķĘó».·½;’å”Ó7†t-7S•Ķ•¤ņ7(1ĄśŃ©č+¦i×z—–Įŗ¢šXśV|Ödóž^ž,xexå·xälä}Óé\–¹ā=FłJG;ģŻ…AĄ8=ėB¹ˆĘ›ā/ &Õ„‚OŻcŻAķ^¹g”hŗ.“ŸeĖ',z0&pž ūĢŠ•Ūē$€×]¦Cō+ ­ĢmFd ƵMÖÆąŻFK„™_uŗ›?Jv„„A§éÉ+¾łĄ$Æ|zš™4>TfxWŌt½Wž#e©tHä##’ZĘÖ|_{Ø]Ģ¢¹v<ŽœÖLŅ)•Ī¢—Se$® ćłV–Ÿ}k%Ā[ČĶ cŒ/@)$ŗWž “•ć†Xäū4„' ŽG£i¶–6Ś}„&ćgI7d·łÅ6bĪ?\Ń-ōųżøUŗŻóm8'ėU“ŸjrD–BŽārß»ŹņG¹¬ēX3м#”Ängya•唏¼}O9Æz“š÷„æ±u+[÷¼³™Óaxˆµ’V5ŗ¶Ę$zW„<=įgZӞx›ĖŻ#éŌž xÕÅŪėq½ņ0pĘąę“ę3”ntžŃō»£yŻźG1•J«¦F;ŠōŻ{FŅ„lōoęy IåsęąrqŪéķG9Ÿ+99ōŻ8Ć›«_Įl”H•ŌeˆōŖŚ…tĖkå’;+5Ō1˜ņ>cž’N•j« »_‰4ė’›oĀ4Ūd˜|Č  8ŚJśž]ĒIŠ="Å!Ē‚ĄYO÷±Ó­j¦_7CĢüc„¤ŗ«=Ś6m’Łßaß’Æļ^G7Š.æµ$æµ1Ēs±|¤f¦R¹œž§KØė¢(&•žćP‘rĪ>č\tśÖ4 “¹óķķķŹ8p‰½~•&n9§čgæŗÕ%š&Ų±榿+}rų]€-w•ĘŽp+Dģ)®…]CQŽĪH¼Ā³4½ŽGµ}š‹]Ņ„Ńę†réwŹT(ąē®JĀS±±ōT7“Ū0uØ÷Æų½+D–łL­{4ž\RīčO^k•ŹļAœ5·Ä}:×Āh—–“Nsęžõē‡āMę·gØĖsÓ!nŽ6Ą`:tėDcŌ¾W±KĮž2Ó­|óö9Vū'ː‘ĒØÅzʑ¤ŸZ™ć’3#£²Šč„HhŠo†z~‡{Åsö¹$Ž›U9śvÆ7ÖZŽļ²Ć"m ó2÷­–‡4™Żiė•œw҆;r8$W}mąŸķ»fóK­ØUv3ÓłSę]ĪĆFš~™l¬ŅD¶:z·–9† ć>Õēž)Ö>ĢŅ[¤dkå…9ś øŹā8­1|Eż®—VöŪ 8"Oŗ°³z·0]Ü]\$×M!¦r隙¹jUÓµ=69nDš1œ>Wüę“åŌģ.ć `,Ō1'gĶ»dŌӑ›¼h|³ŒĒŽÕgU»Š.Ź$Žźr1Ų1’õ f§%Øų&ćšõµ(£—Ėi$P8AõīkĄ®]švŠČ$©’Å€ūŌ'вŅ:‚ƝųüA«éĒugxŅŚŪ׎“X•{Æ„ļæ²¬nĀĮnń\ŰyŖ CŸ¼¾†Æźså#‘\•ūĀ‘i¾§+¢é¶³]zĀMÆó<‘šś·Ć‘cg ø,å}z-g4R: S@Vµ»‰X6䳉ēJšŸų#ΰ7V–Ź MŗN~÷½O‘}‚óÉŻlPĀUČF iŻźésJbšćĘ7ØÅ³Üę|G«-ävGKX­eRP 9ų½³Yš“ ”gdöŃŻLäą–œlA©mįyōØMåьbŖēŽ§ŌHQ£Žl€21­Z˜ÉüuįūGĆŠŚxvń­ļOļK™ †’g?r> Óuß “Fņä;wļ'?RzÓēEĒc×'ńv§}1F½3“p€CČG¢śŸjń’xŹāŃo-­]īnČ;·TāŽ[ģiäy.›y.Æu#GĖr2®žZ­Ūh·Ņj¦āXʐOŹæK‰3‹7£"čĒg‰ćWū#޽ŸN“µNŽč2‰\ąĘzäwØ2-^\[żƒb’Qʌ}Óõ®-VIē{Y\“źŻ[€  ±>–·——Ó4©lِ’I製rž ÓP™-¢w÷9ĄØ›čnŽDŪO;Ü,ŠģOåSY¤ *FA%zäf²`uėw©†4„3Ėę>õė¶zn4x®D,w`’z(ļYs³;£ĖüE5Ɵ/“p%•~FŪÓøk…k²¶m»keø=+TĖG©Ųłnń eŒžõŸ§ÄwYhG„XĒ=½°žF/§-ü\„ĉ»cnäp(9å‡śģ]üQšGĄļźæ>&Ž®•”Z#41Źą5Ԙ8E^§8ƐæcŸŪ'Hż¢üWć;KŽĀßP‚gøŠ„'ż9 ÉlvP¦{Kd~_B—6L䐬2+ÅüY§As?—ūčɁ÷–µŠ±”™šʏ }–³§¹ ‹ˆ‰Č1{fæŸoŪßąLjt‹ĻhöBMK <2Fa åĮņēėWÉGįɎK‘-Մ(Ģ2ĀĆīøą†Ē½fÉmņHŹź9Ś[člDš3D2µĀŹIé»==ź³T īŅa‰$Šiģ@dÖhe2³ąR™RæZ†O0–*ƒgžÖ-®C·Īz`ŅāŽę?20΁¶’zäõčŠ /o‚į›#!ˆĮ’õUė»õŖ\dzøó u?0ĮäÕ|½NøNĒīĻüö—Ā,“ųEćVÕ4énŹŁy’e…ś€ĒŅæ³?ƒŽ9°øšœZV’ńźR4‰(ćĶ·$`§õ¬ä“;”ō>™kŸ2Ö9Ō2(aķ\/žx3ć_€|išĆÅń[]čśĶ”–Å\ $Ų;O×śā¹¤ģe6Wķūū2]~Ģ“‹üŖŪOnF“rĘU d„(;š:ŠųOtĖ«yb2%ÄD“DŽTžüzÖnća*ŒśNų®^XŲš¼ŖČƒę<„Ē^ }?šßāƈŚM6ąæŪ¾Dd|żø’=«ĮÅį”u;)U{ÆāoĶo;@Ó§SŒdÜ×GįmBkĖ:ī;æō(Ū-ā•ĆN\®ēDŖ;PßűįvņØ#yĘN?żUąv¶²h×Ma2!,z’ 'Ō×Ö`'txŗm0HGĢŠÉ»žzŌĖ FņF“²ēœūׯ Ž "֟o]„— už•čr.ĶZvHÕd ‚sŠźF28-Nxæ³o’O(øĘ@$}+Ģ!xüÕ` ¶pEfŖ^HŽĶåˆ ÕX%’d™„ØpNW<šM8’mŹ qōéś „«ŪÜŖodE ć”>ōĒ&oXiqK ÉIH-ĮöéXQC2ŹSĖ+:ņ+ Č±{ys5šĒp²£ iŽ“G›÷؞Jöė9¾…Dōūž²M5FG½x§ˆåk»™‚Fv3a·žU™¹E,ī-£Y,›c)ĪćÕOŅ®źrź:l0Ž yȐsųÖŃŲL]Ź >ī'ž}±œņ£‘ųTśäa.-Zm”²G©Ŗ0’6ty–Oć“#Æzź—7mƒ‘.r9ā™Œ£c˜×$–ĀP’ŪmdĆ+Üśēēšęä³ŪNFyÉ”˜Ks°Ņ56XÖµNĄ1Č«Œ6WR©FcĻ\t4ćøF% •lD^Q2É× WQ•[ZźW°•Į)•ąÖÉö51õ/ō·h'UfÉd„awu*€Ļ Œö¢Ć“~‹Ā‹3©}»zžüu®F(õł¦a“ķ’ĪŸģƒ×ņ¬Ü;va,WÄØńƐsļ^§ųŸLŠ  ]$»‘1åuĻŌVcP¹ę·w0É%Ģ¢LÜ3…y¬%_³ĪŅ(f$äŠ'ā5¼š¤ÓNŻņv”ä殗BŅķEĄIQ¶+Ē~(3™× ¤ź‰SŚł=š+Ó­/ķoĀ­³¤Œ±8ėÅ2TY‹ż®÷—’cHŹcänŪµgųŸĆ6šŸŁ"bc•O$Ś6-Ž[QŃ-ģÖkH%Žo,`x&©GØ]i–š„ø‘CŹ8ījīC:+­FgŅ£bpĢqņŽk6ÓT“M™„Hwįr§ž¾µ ±JūQI]ŚyŻmąt#>ÕĻ£;Bń–#©iŚĘ‘‘é>æžtŠčļ!U#Čūø©^:1åņx§W ,–ęę8² ?sž•„„Ō|§ŠVę„w”Ć…e‰T0(ōĪ3ż+ĮµmN=[Ä-0DE·Ź)RFsYskq Õµėö¶6vl†90’ysŠTÖžŌmşˆµ8š|nD’ōēŽõ±¤eŠģ›ÄŸŚÉ$InŃĮDĘ3ž5ŹéfuK†Ÿœ1Ę6Ó ėcŲ!ŽŪMÓVi&HĮłŽ9Æ*ńKŚ^8†+č&†G͜HŃ.‚龂ŪK‰'ŗY\¶NN}~•ö™”éå¼S.ŠÜs@œLĶAŸÉIU€ē ģ+>IžÅĆ9Ų~ļ֋ō!SīP³¼ž=R;įsåķąėļ[6Ś“wW>X¼ŅŪ­eĶ®…rŲčģ4?¶]ŗ/ń ąulUäW³št“B²(Ėc°ŖéWŠ£øš^„¤ßŲÅ8™G/‚Pņ?­xüZxœĪf¬qpN2=?•Cģ;tF3ßEj²rP±ĀćīŅi3¹·wµs…|Ŗ8ÅLb_.šŽ‘įD×-dŽCiŪ#`ļKŖü>ūGu|| łl9=+EŒ¤ģQŠnćŃVõfŪyæßÕ$½Ėś*Ė©čpc1"1T0Ēüā±ęÕļ4ł ƒsƒŒPUĶĖ{“ørŹ”‘‡CĶtŚœ匀!ĮŖO[åŸ.ŅÓX]ą–Ö_3åa2:š“A¢…äŲ!¹ėÅS–‚±ŪxHÓl¦»i„ł~iÉ%ŗõ>ę¢ń”vöŚdėŗV,Ä©Čß)FVŠv'±½‚Įą‘ĀČĒóQų›PŠńģa¶»{g¹Č½(”€»Ų°øUg#ČūÕĶ^irkQ)X÷żģSC·{©D²“[†Óžkȕ—+6¹­„^éŠė%Į‰Ā Ča×ėKu¢$6j3ņxڵŽĘrG7g£Ż\Ü2L»'“We²Šß̵‘Õåµ2 +KÄ·“:z.>}ż:ŌÉ%”įnNņǹĄė@ζ-\lQ*£¢‚Ÿ¢jŃ Bhäž4Œ³yĄ4£āĻéhŠéöŹg—ęó„tśķPųgQ-æ ŃÆ@«Č^§„ŻÅm.‡4÷ŽĘŲĄļcŒž5羿Óķu$Ób“i¤øGlĀ·¹üjF]×4{a؉āD½  rõŖo §?–Æ$@œŠ üw{ą’3 źF M„K<²“1£$™Ļ„i t2q;kgI‚ą¹ūDZ­% i3&ų÷uō­ =bK[];O†‚Ć<Ų“¹ņČą×׉ku=ÓkV$/=)%m f›kŗ1ӝīʘ#‚0 xf¹ye£yז,jĻøØ}M Ų³7ڌ'gŠ8 „Iƒ•Ęyę½óAѬįõŖ>>¹Ńµ‹—ū+itįq^ϦBŚ|k’mU\*šÖ2čdāq>7{›k)ļōż>]A” Ž•ńõńŸž˜µA­ō’ $‹<€śš±ņih7gYӛY†HŻr ĮĮĒJī|9āķŅC}ywepnßüäTKcTˆüAgļˆõ[5ölņ³”ĪGįķ[žšÅŻ”ņd1ĀĻ•'€ÄzTr°=¶Ė0¤QģCœ·qX·:lSOsqĄ†$F9”ÄW8kėč® _ģę_.7(ķŒī#­qW÷É5”M6[åo,ąÆųQŹĘwśm¾£ŲĀö¢(–,4Ųēææ5Öė·šx_Ā÷Z„Ētł ž5^ĢŌ<]u=ÄRłĶä®Üö®ž÷šS—ł· mĻOzV±›¾ĒŸßh:„hņ×wnp*ö‘”Éi:Ü\HDXaģ}jł‘ ,ō›OŲŲµ¼[ēn gųĒ[‚Ußm“ÄFķ€}ßj‰K”^ĢšēœĶ!b¬­ž+wGŗHīüĻ5‹Ž<ŌØĢ·?cŽ(ĪćžMdjBę'ęNƒŅ€2Īzžõp} G£xuĄž:)“ģxa€0Ė’—ó®OųQ‰æ¶¼Ks¬-­ąĪŌ•ńŗ1ĪÅæųŅ”·<āf·¤ų[TŅth-…®šŠ2nq挓éÉ5ĘjVÖ×Ń[5„q]9!’LåsėR;]n¼Už‚÷qĆd»DžkaW‘Ļį\׋¬ļ,õ·Š¬%—PŠÜmß’X:gƵK‚+ųOÄ,-ŽźŁ„ÉĻlWYįæ§…,Y¹_Yšbč™É…Gé҄ñ\„oźi}ŠĶk4—‹ĖÉŲr psĒ7‰ļ,¢hŻ®ÕĮ)Āméҳ$ś/DÓnŸO¶[ČĪĄŻüBØx?D¼»šM „öĄŒI,Ēӎ(<Ļ솿ā-.ݚŠ|­'qŠÖ“¼Oዽ`6š\\¤  hбSךv7Œü3»ń Ɵ«jé=­³ČQ”ƒ¹pq’+KāŸĆ)ü<© Kqņy€øĒŹyJ„ÜńĶCĮšŖiĀā4o>` €GŠW”|+ų{ā3JńF§v…” ½”#²©ĪHž•j&,ɖÉo,d½7¢ńeĖFqĮSÓŹÅąÓ©\}°Bw Ś6÷>”¤Š‡jŒ%½¦¢­ ?‚ŽÕģŽÕ|5¤[[h·b¶3|‹žzō¬Ę|ŃńWZ—Åś¦­įŪQŅō9.Ļ Œq2Ē5ŸšI·ó¢×%ÓīÕ`Eż„~ēé@¹kw”Īķ¢™-m­¼„EĪ8Å|™ŖĒo„ėײ²3"@ĘžģdœP#Ź|yØ$ŗ9ŠcŗÓC8iB¶N~{{WWm{ØŁhW?k»»kˆĮc!ėž ¤3Ģ­į¾·š[‹„¹p%čż8ōĒjź­“;[PTŌŚ5B<• Ź…D¢Z’G„ł°iškK„»4¤)õć’×XļŖ‹»7ŠąÄ± nvóYX~՞u§Üėzv»o¬YÜR"UŚDpģ¼×ŗŚųŽēĘŽžV¶–äH6aH=Å\WR\ŁąĪźęÖĘÓ¼)Ÿ™€Īā~“X¬Ė’šžųēĒZ<^ š¬é¢yi’E@}£©'é^™ą_Åį­hõ™›P×.$MpŅļŚGaķ@6v7:b5¬’3“ ü+‘ŠóYiz£wŖĀ/c>H [iĒÅHłņÉķ῀éšG}|ŲŚ6—īE}±ąæō?%Åõ˜ŽŚž_,§h`ŒÜŠm¶ēĶ’~\超¶„ąĖ»4²K‰%7Ā&zŽõźVŽ>—Kšö‹§B-Æ^P±Ż)pJŸ›)v1Sk¹ŽEVŻŌõé>øŌ48"¾ŠM³ć"B Ź„Ė”Ķ)2ö·ā]_ÅSoÕ&[ĆŚJ Q° ņ|÷ń_OjÆi„ź»Vo¶ 8É÷¦¤\ē1ü1žÓ¶7v‰s{qneĪxėØšÜzžœÅīD”ŽÓŪµL‹±n[Ļ ų‹ÅśO†u‹yﯗ“ėķ^ĒńMšļ‡“ų?³ē‘^\,1"݃ޔ-Hr±ęĻ%“¶„-n‘ī6}åŚŽ‡5n[$’fé÷N?µ\å>^޹­†Z¹Š&f’y%Ī6ƒŠa]v”iŚcĘŚĶ¼ęØ(TćhĻ^” ę¤×4½CĶʍ„­ŌšŪ6w2ńŽĆ>µä<ÖīōŻfĘ„C ÅžYA•®tū«&n ;¤;·ōŹūVĒĆż īµ' '½·ć‹·¶h&R>ØŅü5göKéäO:yįņäR™ņž/­xV§šę k˜$³Ä¤īqóźh± }ŽžĻN[gĢ„[i#Ž+“µńę¹£ųŽÓĆśeœŻĻ XöŒ¶Žę¢H|×ў“ći~'³-āØY@LlйĻ9¦xᯁtKÖŅt‰"½×£‰YUNXØā’—C Tčr?oo4]Z84›h§¹šåmÖ9>ną{×v#į½HYĒsż°–ųhŽ0ŃoĻ9=…Kw'sē Ķ%īīZ;’‘±ūŪ:ķ]~šāŚ’dŅÜĒm°n_1~VĒbkc¢1FD ¦”2H5IJ؏ üźW:¶§ØŻ±š'ÓÕT Uõ nŽcÄM ZĻg 7Oø2CŹŗ’†śjé5=4G#€Tgõė9E™ņõ= „ŗ¼q –ėó'§±®{ľ±O©0X-ó€¤dséłTXGĖæŚéz«BĘGV$A],zm¦§µbL;|§<Ņv+ź~¼µŒÅ|真įś×44”„ȍy÷ ƒĆqš ē=[J½ŸT·é¶²”Oj։Ƣœ,vĶ$Hv‹ĻįAIÜoÄ->=M¾ÄŃÉ1Ć£ æēŅ«|3Ņgs%÷–Ÿf ±ĘH=Å))žł xZ)ä7‚E€ŪęJvŖš®7Yń•¶¬ś]³ż©£/zż×>ŻśVj&©žwń čź±Yi…E­ &V HŽžź+Īd7:uū+“eėhÄÖ6°š‰.ķ&ÜM$ »,Ič}q]¼ž$ÖYnoōBWŚø‰‡I+GO±2k”Œ¾$ńØŚĪø% v&3åŒółń^Ļ”źmž²ŚÄ<÷ę[¹ ĻR:‘XM[C)3;Ę7³Żj¶pźo$ĄJ…wpsŪŹ½Nkčæ³ą[y$ČP°Ę„(ČČłĆādZõĢS²!ƒŒœŒ„s‘Y--oƄP3 ya²TՔ£s­šf‡/ŠmįŽO#fć½N µ{šņMš:ņ99ŚŁŹŽzf©"¹+Ä×S‹hĢ˜ČŚ§šäīl5+Ė2+vŠv$ÆĖŅ›™“av÷o£ ‘“ŠwÆtųe¦ZApWKI'˜ŹĒœ×<©ō*-ÜūOģ8”ūl’GolŖR>XæÆ#õƑ~8xĻM”éž²Iµ ŘĪĢŒf²öfŠżO—ogš{ƒi;Må'''®k„šī™„]ŪĻh—É0$ć9eōĻzÖ1]KRhģ|=šŲ+k]¬‰dƏ8œ>ę½#Mų“įŻ@¼†L¾”)SŸ” jŠėńIÕ¼<ž#×V×Xw&%8ł”ŸŗOҼ®ŅŪuĄ»²QtĖ–ÉčŁäShĀQ=óĆÖ«®čõ %·{r’2ÜA÷ēé¾ńžƒØ^Ig}pl5D GžĄn¾Õž¤•5ŸhÖ×ׂuMŽXr»½5äZō‘jwļpGŅÕE…Ž·GtM"(䍚ģ Ī@’õ«£iÖö\ŽĘ²^²ƒ²qÜS!@ń‹˜H·SŪ˜Ć“ĆƒF£ŖX,pŪŪ‡F ļć5DamĪ'Qńān°ŠßŹ™€sČ”'Śŗ½:³’Ź-FõķŸnKq#AM¤t·vŠŻĪ!•ö'Ü`œäõÅ[ųG¹ÖP¼’'Ģ *}ćž*āÅĢŽ†ÓEšī‹ØŁŽź–ń>ž“eĘFXg„X¼Ōü;­ŽŽImqŪ!ŁĘT©6ɔ»qćAØĒ>ŽšQA4kÜń‘Ū’­^É£x|Zx{K¹Ō.”Ō|ų²Į[śUEtfnēŠź¾ńŽ›r/l®ąyXģ”’{;WŃW×õ{ėRkķQ¹?&UW#©Ž<ó–y>TĪ0iʊö rłbw“Ę7k©µ²¹ŒC4…£øWū tõ¬#ŌĪQ±čŗeßŪQ¢ŗbƒĒsJó_J·µ¹’gܶ@a÷AŖ$±„[ŪO2‡¼0`°Öŗ !0½ĀÆĢF į…zތV}‰pŖ±t#Ūō«>"Ómn#“KeKUéę…?ZQv<ęžęÖčĘn%V*¤ nh¾ƒÄ—źŃŗ®ēr9p9ŪüźŌ픓fuŃųwO“1Ł[¤0—2dłśw5ČkSŚĀd±/†qó…ĮbÆZNWe£¶±¶Š¹nNzæō±F"–IødԘĖrµÉšQm»ŸJӏJKĖqvģrŽ QŒę‚I—R±ŃEĀÉ4¹*7å\¶§{ĢóĖˆĮČČؚ*ĢĪQM ód=>RzŠ©s¤±B`#ĶĪšČq¹]lÆt[»I„‘f‘@flēµ®Ź;˜-.®y\«H[•Jł¢x²ÅBƒ"÷ō­Œ¤™ŸåJĄB¾ąõA# •c]¤0~ŌņZ•6Č»øeBGµMå©Ī쁌ąs“A'>TFkøŒNĪtĄÉĒųT»b·ižY· Tcq•YY]f•¼Żć÷ ČY×¶v’ ltÓg„ų ƚĒĆļų{Ęž²š}SN¹a“œģ ēœśWöéū~Ó?¼ąi7ČoīaŽkˆöm$’ĖDe1Žžõ‹gdCöĻBń¦¬‹Œ€Ūŗ -Ųõ鏞*I4€ŅŻ€ĻĻ‚Y……rµŠrĻßų-7ģ©ańcą,ß­“yÆ|SįųŽł!‹÷ŪFvJĢ9ĒÆ×ŚæˆY-®­ ŃK Å¢|œó)ö”­,Šźlxvk§iX”bWżŠ?żu>$ŅĆP‚ŅT”<ŪW–OLöÆ0§u”Óėzŗ_iŠÉ-ä-'’Uź qĻ×Čx3^x®µ8“ŃĀŪ8lŒškēµźk'”ōƅu·øÓ£źˆł@cÉ«bŽ&žA!-"œzšś,¶·CĢÄł ø³p…{)õ¬IęhK89äóšśJ2<š‹©§ck=ƖfŚOqƒU/`Õ¬n^IŲģÄµv³ ā9µ?2’hłn}ET“‚%ńūÓĒJCŠPŻœøĻ•ĻCøż¢ffG<҃kś|Œß¹ņLį˜ėšéō”Øx{Ph®Vg…Ųy±gūS#ō‰Öā-ȘÜą铯BĘ[Ÿ.`»öąnM_9 XĮń•Ŗ]ā V •n+3Nŗu #`‰ŸN¾õ-ÜGUi¦ÉØFņ‰²£”fź}+’»Ńž+ēyv"Æ!s“š,l˜–Ö0L—!p’ÉČėXz¢½³@@犾d;˜Ķr§lä² ŒS[QW£YĽóš|čŝ‡īĆMnc”ē ­zNÉ”–+„†?+ų‡z¢¹FxV–q娉y9äYŠ-•ĖXĒ »øģr.ŸRųm”-(©ēž$I@Ų.;uޘ¬r÷š„ė|‘do,†9Ī“$ń÷Ķäo”Ŗłc8O„5+‹+#D'Éć#šµįżRxnJǰĮėĪEk\“§¶k™ndĀ”sņąćoÖ¢¼“‚ĶZš“QŹēo^H„ ³Ł=¤fxCŒü¤¦°[Ć/ŖµÅ±Ž>‚¹äāsš¦ŸØi÷čh”‘ø’JĶ’kĘi&1†E’<ӎĮQ: Ü×éq¶­ĘH­Ä±‡N±ø»3łņX/LUrœŅ‰ÄĻ _]I.cŠä‘ź*Ī‹s5¤ņĮn=źœF¼ĪŹŚīŅÖ&Ō.6¬ˆpsŃI®6ēĘ73KrĶ$gi%^¢¤e$mEäł°Fj&fEŪ2ޤ†®”.ÓÄVŹH^į‘ŲėųU[;‹¶²Żu)GjŠĖ•¾–Śņw—ģPŪ±.ŽÅiXh‘H±\Ā7”]ŁĻj ŒuŌļ<;Ÿ%Ō vĮ-Ć ¶3z›Ę:żž³ z|Öėf™ŽB>aģG„Ö(/ś|‹o*„‡ĆąeCØŁŪ[Ąš)rGŹ Je٤sŚO†Æo>Óq*/• NpO=WæÓ¾Q”Ū?ĆT…(¦•k” t½d™%;|Ąz7„aų¶Ūʈygt%łš1 ³Żg«lwgićQj’ŽŚÅöóĖI…dę¢eÓܹg⻆Ž;;Ó½!HčkŒ¾–ŌL|¼łY#Zå•Ī‹Ü֚ʭŖŚM,1Éq“}ŠųR13ˆ¦Ęz±Ęj߉“PÓY"\Ē ³ć xo„HčÖ÷LŠģ”¶Žeø?9>Õē> )}qsŸ- ?„PL^„–Öķ"q¹vŒrkcM›R1 č’«nR‡œ{ę­G”e{ĖYuŻxź·Īg»ņ„lĻŽ@éüŖ‚­Å•ó.U­6‘~ßÖ„d݃oo<‘ŗ6r+JŚK]GyIѤN cŌR'UYķŸO– ^'bö@’Ŗ«źhÖŽņÖE•Ę~RpM4€»„źZŒöafR%A„Rٵm®ī<ųĢglœdzŠ3[Äŗ|ś…¼ŃLcø†@ĮąIĒCSx{[µŠn †Ŗ“ƒ(ć~¦œe`7|Bŗ]ԁ¬b(õĪźo†ü;ʤVŹäīw` {’j¹ś £Ģ4Ū»Ż?ÅzģF·³(IYņwÅv>rjZ“…t¢ł²„zŠĢÉ£Ņ4ųeXÅUy‚žkĘ>²Ņ¼E=Ä71]•įöŽīZ•‚19]NK[;vŽĶTŹéŽ=kšö—}śŻ:ķ˱?xJ¾tkŹz|ķ°IīŁ BzšČµų†ę[(’¶ Je°ĒRhÜ6·Ņ¤š[©l£Žkø˜©Įą°©leńDĄBĄķ‚ć–ēҔŁķŗ3_[hWŗ–˜ŹŗŸ”ŃÄŗÄwÆÓ§Õ`ŌŲjŅ\IØ#$;HRO§Ø©°ÆŠśGšō‡˜Æ'ŚŃ¶W’Uv2ø¹oUõ5,Ø»§Ņ-#¹kˆ£9P¤ćØ“{bé,7bYäbQ‚Œķ‹FɘŲÜ\K"K™9ÜĒŸØN‚ ­ćE”`®„D£qœ犿°īR2ø@WĶp¤×Wā=WFÖ`ūU‹Iņķ ~zriF6+”Ļšę¦ęI®RĖ ŽĆ ®+RdÖ Ōlo 0·šU[<€ üjÉ5|=mžĮ2F>•±y©›YcĘ1žōÓ°šcāK(žāņB«s’ėž+޽øœždˆØKgކ 66tżķü‰åvNčĘ=kÓf¾‚ĆČRāg‘ކƒ6µ"»Ō¬āŻgsżź•ÉčyŹčšJG%„+䍣ē^”ļŠÓ•[ŻKg‘£HŃÆPO RÅi£’DV‘…HŹńh“XDĀŽ0WvąŠZ_=¼w3#221椌GUy®n&ŸbFģJwŲ×UįŪ­:ėI»–K‡†ś"8ö¬÷'·’^®,,™­źšĖujé$’\• )Ż÷TgōŖŗ¦½a¬Ń’ūb_”ēėZŒóė}Y®}±āÜ>ą3É«÷PßkČ!HR(Td±éI®€&‘kż›ŗŽ °ē)ĄÆeŅ|ttŪt›_{hķD ŽļŃ1Y؍F­ā ģÉ„Ä7¶ņ(łŠżß„y•’‡“ £ õā-ėHę6Š*µÜī®#M!…œ¤#ø#­yķ֗‹‹‹ÕĆy‘D¢_2.Łéī0ļ–ø8é]޹yįū-ao,w—~Zä&CdõśVV3”µŅ,YĄ&PwĖH?SL»Šti[œ68ļE™S¢ų~oµ@oÕŅ7pćśÖŻĘg¤Ž‹;ģn€œ`}(jĆK”,^>Ņ4]n;%ūcLbYs·åäć­}§ėĮŽĻūAZŠJŖĄøžŠŠ_!.±«b¹““™¦µvĮē†xˆ“OŸÄiqøTĖSĘ’ øĖ¹=?B¼OģĞŽm°‘€ `āøńLj·ŖŒąÉ“č+>ĆĮöŗ-¤P6l'©éޟ*.2,Ir‰i$HTģė÷©ŚU£Źņß¼0“ʹ'@¬¤tDīmõĖb{I£ˆ](Ź:ČÅų†ĆQŗÕV¶ÉČ>lżßZ’Ģoéo€‹ł³·ÆB+–Óu;]3VŽ;H#eŪ—ryÜ;cZēģZ_ŽmŅÉģ„X’u%£$rsŚøż:mZMWR»¹øŒ[ɂ‹Üzń@¬uśG‡mķĘ©+,ąļ–I_ōĻŅŗoüPų}¤źžšõĪĒT-4ń.żć9Ļå@ūüU·¹×.l|aęč±8Tøø^ouP:U?x³^ŌµXgń\›Öf§G@sߌĄŁ»ńFČ- µŅ—U¹y#·…dOõ*?‹Ų Wŗė"Ņļ4{ņŅÕõ²11׿zb‹ņTžøóąūŲ‚ŚŽ@‰¾½1ųW?§ųóĆžń-÷„īåG¾gßøž{… ±č7±Š5 ų_\j¬įÄ<Ę'ó’8ēĖtŪd½ŌfÕ¤b%fŲ>Q„ē°(*ż ωŚgŲõ†T>|Óđ.9qč9®.ų÷M—G¹»ŌRi£'t¹ū£0)ˆśnĘY| į»iõĖxŚŽö?.4|bFĒ}kę-KÚmĶö«#ŚÅ ×jwoŗ{zP“óWŒ4µųŸO?m˜‹UņŃņ¬;żjĘ©|u·ū ¹[KhÖ9.Ć9éH ż?P¶ŌuŃRŚoµ“fLģ_Ö¬ų”Żčš‹8!‘.d\«ćī“ģje+…«kqéšĖup³Ģ…U£-ƒß£5¼Šiö3DĢ›‚÷ėßõ¬€åüS{¬Śhɧé ®Qåb™*uĻākرų:iĖ¢i°Ćc +öŸ4ŌśVŃVw2|E„Įć+lÅ^FeLć;yė_F|>ŅÓMӂFłšŽ #fn˜¦Ż†X×cŅ Öķõ}NIcó€Y$CœsÜvęø4šo„õ­X_ź6ā{3s*¾ß3Ó&£œńĒ€µ ā%Ō~…mlfŒ(ņ‘ä€3×­tņirA«3¾£“ĘqķļNć8_üNŌļ,G““H”1c!°Ū¹ę¹’ xóTžź}KI5 ³Ķ"ī sßŽØ¶ķ”źŸ ¼5¢MÆikŚ}¬7Œ’Vppyķ¶Z¤ŗ‡n4V¶†ęŒŅCßilōĪ}Ø2•MOštĻÜÆ„Ī‘{'—ŗāiJ[%zć%šÖ”ol—öš»iҾĒ?į8Ļ4 }Ź–×~!ÓÖģ¤7 ˜#VėæÜWwįæėēķ–Ņ.谟*BćŒūÖrb”MYüR–š=ķ¾žÓ‹©Q„æŗ}+Į¼ą={ÅŽ6†8K®é'iØP{Ō­ £wi>‡Įŗu¶•.RfƒĖvn|Ģ÷÷ķX7^[ė“1An˜`ø9f«…+ZĒ;§|/“Į:޹ć&ņ.u{ cŠ`3äĘĄ«ŲUæėPĆą=VāķV]mLpƅ•0r@üŖ¹Q“GĢž—W’ć팲$ :J ś‘^Įį­oEŌ&[y¬‘.ķåęāÓõéL|§gćVÖźācc†FcņĒš€ükN×gy­“{––kÄRlrŹqĪE$“ŌϚŚ^.¾Õ|9”ŽŽéž ©É,qłˆÕö%æĻjłcÄÓė޹g=āĻu3 °|©Žō= #3čŲ"žēCÓ£Ō.CĆ{S¹sėėYŗ Ä.Æ6!qnĄ1qżģō5Š“DT‘ļŗn»|ūa‰XZČ£q¾µā/XhIsØź bG UĢgŌåt­{NŌPj‚ńĜ†< zV¶™Øųb/Śj6ö¶'W¹%b•WęGlž5£E¤īYńēŠŽŽŃ#ŃķīžŹY ™€Ź_¦@Ɯ|)ńZš_‰uż_G·hoXyBiFšĆoaķšQŽ–4…-5_›Åž=žŚćV ¬2‹ˆfD(L¤rAÆMOj:.Žŗ\v׉“d³y˜Žōģ[‚Hó½C[¼µšŅK {yH•w$‡‡¦kŚķõG¶ŠĶéxƒŗmUĻ ĒØÅ2T™ņŽumfbԤ҄øo1„cś×yąz]^ChĘ#–ĘäPW“>Åš‚ŒŗN„«ĶÕ‹†ˆ× É^üW’ųūVÓ“ö±‚Ž4Iķ;ŽŅŽąQä)HĻŃu.ķ̤4nX®=k‘ų«āmkN±Ó,m F±e>tƒ9ĪxSK”“åŻNšh K“N?„ž½ĮڜwŪ“é ņī9”ezŽ1ōØp3™ź°i‘éV–ö×5ūciÜij u&¼óXŅc·¼I-ćx­ĒĢÜÖRņ3GI£GlńĒtĢęŻH< wÆ{š£h±Eowöi̲8ņˁ·PG=Ŗ Ł“mŠÕń‡āń\ķą‚āŖ¦Ązš)’x^Ū‰ggn–…< ¾ZōAéķWĢVs>§iĆ•,  mĒ#>õęž$>ŸqeZ”s0“nū}?ʘį3ŠńKyŗ¼Ö)"Łvó‚sųW%p­$[P”#“ŌcŅ®2±¬eг„£ÖvK+<nć€@5Õ­®™§Ė-¤d4)÷00=³V¤‹9nóUŅ‘'Ć__ZēŒ/MČŚ]Įdņk)oq8ž£įŪŪŻbĘ’YŌÆ ŗ¾· ć^N2+Ń|9©’mĄ-®®#‚ćƒÓžõϱ<Øf§sm Ķ”ŪŚŁŽČp†G\ķēØĶkXųKO–×횜AŲe6čqĮż+E>ą¦]‡RO /Ś4ū)%›ī**rŁ«!.žŽ NźÜ¦X6ÖNr{V±•Ļ±Ęk3FRśźā8"‘ŹóŌW¦jv²YÜŗ[ŒæČYˆłyēŠÖNĘmšŚĘĒd×+éåbqÅz/€ml%¼‚ęvDƒi$‚Žł®i2©īw%Ó\XŻŁéšŒniTmŪrśż+āļÉy¦ė:ŸŪ§¹½øb M&9ś ĪĻcG#Žm^Ę+—žöŚG“Ó‘^ćąß馕›j:sŪĀķ’Ūŗ··Ö‹2=”Žj3±šŻļ†,ī‚Ū́+cżYõĶ|µgįMnmKQę[{8NČœbe隣#™·šķÕŽÆ&•q>õYOĪ­¼õÆ}šŅɦ"iö¬$•†Ņ\ńÅW1”Łė·gL±’ŻČ{ƒ"6gcę¾мMww%õŠŗ…Xäō!—Ø…I-[XÕ­µˆ-¢Ó$šŁo;<é‚)šĘ³6ž$)Ąī.N?3T +,~1’„{Ć­2¤3j*øMż bø¹>8Žėóé¶÷6Ier‰ `‰ųöŖöeDź5/ZC„‹ÖņøĄDlīĻØķ^muā›L?™Ūņ@ʓ…¶)Ų\}že™×sō'¹éic'ŁļŲČiæęķPbĢ]KÄ×7 ma[Uč3ž]²ŸU¹€ <;Ż1łyėō­ ĢK½&óUŚß\æP@‚Ö·t? bµā\™å@'īœś~u\čŁ.‡¤ųSĆ’ŚŻ%Ģ1Ć L­ĄQīĻZź-ōŪy’->Žä=øłT…į~•2Ÿc&·)ė:h,kµ–0FqÓÖ¼—ÄWϦYšėʱø$g8¬„~„žŻąMwCÖ|*ŗ„0Ō+ÓžjÉńf«xm'»%aŚ»2Š_ Øö`|Uā‹Łļe"eøƒ,Kgē„]šĶ€¼HüŲYås‘Žr=ź£ß^¶¦yj uPŖ1÷ž¤Ó®¾ÖYÆU‹0;H掬ĘNģŽßY‡Oŗ2C°•nFx5‹®Köøšć·,F2x"“ ętŪmBIdŗø]±ƒµ6ŒcŽ»=)­ēŗiŻī"n:ę±{”wšv°˜YD[8`Xd„sž;ÖõE¶2锝r1Ļ +T­ Xó_ “ė|o5²—@ŽZŽĒ­} ”x‡Ćŗu„“÷ȟqW«zg°¦ژśŽ·mØĻ<öڜ[Ņ2R é^CwlóĶ;½é–P äą/µL“čiśšZ,ŽcņĘdO©ĶjO ŒQ‚ƒDQ23ŒÅ"Ml®ļZ¶Ś¬ń¹šeóŃóņ©Ē5eF(ēõ‰5 ė].Õā7²øDÉēŠWrßfӌ’joĘ«ū½§2±½8¤tFš+_ZĆįū¹—ģ··.DČ;G½rž¼ŗ×u9$Õ'†ŻĖīŪ{F?ŗ1ÅO"4$zÖ”į-:}9mģćV“ ČłfS޼:ūKøŃod„JĀxŲŽŻ4ł pŒŁ#»v/4ģ—nµĢjR<ń˜RB®§%½«9FĒ4–„{ćŠįR9 GŒźjB×6ó,–ŃłØ®2ŲąŠƒ˹jIf¼¼d’Vs ޳²{UYnä䒠`ćŅ®1+ŚŁh~Ē\x®ļPšIodIdĻ2ØĘā}kØš’‰ćŽšFĮoa`8¼?ć^Åj‰ÉŪcŗ™żv’Į’jū_‰>Ö?gė6ļā=5 ֓r`€'ü+ö³[¶‰Y‘@Ū÷[Ų× G©Uć> ŅŅę5”§Ÿ4² pĆҾ ų·įØ®µ ²-ß,d‰ݟAY£šÓž šwĮóų“F‰~Ö»˜ü]g‘Ēb;ū×ó«>œ–Lš4ÓyłĮާ ūžµŗœŅ8UVrń ćŪéXŅŹ_÷ŠU½{ŠrUzčEQ˜²¶ģ‘ÅG w²H‡—Į ¼’=?Ļ­ CšHĮeŻ“žFOįM{e³†ćĪĢtźA§'- „8Gč»2wc„Co\ŹIi‰Ę}MW;6¦Ķ­6źź#!ŒIV+»Öæe’ą’Ÿ“®«š’ā4 g{KKmFG»Óeø˜ŽI=Ū'§5'£Mō?²/‚cń YépJ~Ń™į9受ŠūRŽę  ¶ćpĻNõŒ£cFŒčŽ|-Æx#ÄZuµĪ¬Ū½…čeĆ)POoā?™Æó®’‚’~Éz—ģ§ūGx×Ćvŗ-Ī•įǽ"ÕĖW…a&OAȬś™)3ąH.>Čę¶Å“œę½ĆZōVqwjGŚ–SĪ’®¹ėŅoCES©ėžųµØ‹IwŚL†_”¬ƒ-ü«Š|+ćqwØoø!h¹N›±Ī>¼W‰S ©«›hōoüY·Ö5¶³øqkv“UPqŒœgߌצž“žÜx¤¶Ešļa`sŌwõāŗp“¹^¦5é›lDÉ"̉ ˆœ“Į®Nb‘Ż ®$ŻÆ¢ xõ£bŌ·Ö”į’Ü)]¢µµ+ė[ˆ¼ Ō€9ī+¾·3ķ-m @Ąld!{`ū×'ØY„“,Ē“ČŪĪŚeA˜2?šäH<ĀyÉėTęV1øTēš±””¤kO˜T–9ĀątĒ„tŽ®—O,Bģ`œõ`{šŸhm ]‹ČŚ=ė¹F8ī+:śóģwRDķ™w`t§\‰Œ»¼–īݘH3ŽAö®cOŌäŽäĀē<ATc'cŠ4żBvGj m<ķSI @3;É!ĻĢ:ScoO¶å)•ŚHźk+Åöv±C=„¹ŠkŸ0_ᤠG£é öŽ}źČ" 8qüė*ćAtfŒ2)'§CL£¢šūŪisÉqzH€ (õ>Õėśeå¶£EȌ1j«3DŅ8æŪA”¦”mŌö÷¬Iņ‰ČŪžq^?eØ]X\«aēø`H%³Ž}ėT‰”—CŃķ¢¼¼Ģó[3†Lœō©¦h—Ó]!„¢Yą–õ'Ūõ­ ŽyXŪ¹šĢ2™#pė>É=½rw:pÓ5°øxĶĮz}é“ -Š> ŽK@!„—ŁŽąšĒŃÆ§K–`»Xqģ*#-%©ŚXėsy“ĘÖß.Ž ž*Ī»y/n%…Æ#|²v¹ą`g~Õ2w$‡u;{KVµøI$ņÉ {~5ŪiS“$RŚ2É3’¢!Ö±”žĮs™× h·VŠ]ŽŚÅ!²—$}7{ƼŅßJ[5$hŌ€$äÖ2fЉ¶…Qxxź+¤Ó“d¬ «uĒ­EģmģՍ FŃfŌ’óWo6(Cņ?ķōŃ5††mÕĪŁ‘Ļzµ&C¦‘‡ć/ čž øäĶŌm7–Ūå@O_„tZV™c%¶Ų¼‡³`OŹqõ­‹g7¤:KĢØ Ū³€[„yÕģr\_ČėmĪ9gÖ§™t–-n‰×÷½ Ējģb‚ĘYRiž)ŁqĻ\J›ź]ō5˜ˆsåŖÅnܐr·éGQ·øŗÆ-ŃĆĪ2i"“f7ˆž÷Q¹I4Ųü‹e2sµsÓņ®¶ é~$ŅŽŅüÜÅ>7†G+’+dN ; …€Ć%bŲzWžxĖF[(”–'(²²õŹ¢rčTby¼W>g– ]ŁåxéW‰Š óĄļį±Ž°“ŠŃA‡¤F¼”I±FGŠģ5˜ģļl…­½ĄTŻ’1ʚĪ.Ɗ™_x A9¼Ś%²Į‹J½m dŌ¬C«¾˜ą­n>^‡²ųcÄE¢]Ś™Ę üg ą×ˆ]k)©]]Éjƒav'qļšb궆ćųÆP¹ŃWJŠDƒŹa#q’Hōüė‹ÖŪQפk›«‡’E\|Üę™ŸbmKK°H 2ä¹…µßhśE’ω@n~ųćŠD…ut"ŅžÖ62¤œä¬#Ņ µ˜Ļm7Ū‹¤żÜsœž”’ƵK(ļō©¬1±AøžµęZn‡&©Ŗ[ĄŪcł³óœb¶¦Č™GÄq˱{h·)"Ä˵T}Śčō¤¶øŽ›ŻŌd㊳Ó,K°YRŽę(Iä€9Ļ|×Cįļh¶vRBš@īņ˜U›¹Éł¬e¹ŃLćž'Śx–ŅĘŅ(mžūO’]č!'t śĀ¼ž}/X²Óģõ Ø%··ąņAéRkŹĪćL‘n<=fŠī“!Żŗ½Y¼±×§Ņę½ŅcóŅŪē_oĒģŁĪi2j7˰‰F`ĢpE^d¹‘¦vy› –>”Éc3RŠlnuy<ćę^ĄV.ŗ‰¦µ²ŪČņ±ēӊM 3SĀWŚž¤ę^ź“čŗžä•Z;M…ŸęU\=)s"ļgūe½µ…–`÷‡t×¢5„«XFÆŪ‘ÉōFR—SĢ®¬nŸPxĆeHž!WIæk{©¾ąU'ä‘K”ĻŸ±ąI£Cp—Ļ$»ÉĒ•=Ą­={^±ŗ’ÓQ‘·ŖūՈäf‡ĶŠē®õ»ėĖYČr°ī/“¦±ģõyf·ŽŽåDsgבG‘¢5ą“’ęę·*$ČÉĻZꢹ1DöŹįeu qE]BóPµ±X­f(²›½W<%z‰u4:’Ÿ-ćm¤ß1śā‚ćXÕn vąMo²M£Œ‰µs°Ż¬ĢŖą¹ž5ĪY†××VW±]Ś[Å##‡ŚFFsVōĖŪ««Én&U‰œ“ŽŁ4=w@Ž2®nŠ;ŗģ8\’:ŠūĆZ[}®h't”|ĮqŌw f(ß ˆ•U}¹=ėŅīÖ{5¹š%–h@ĪqAg›jqOqus {<Ɣ ½{ÓmōÉę1‘ īĻZYy?t~4ėF‘usgy¤js®ŲKIČ!SŌžB¼łš K‰"W¢’ Ž†šʗŖ­¶”\ĘŽK)ŪĒšķ£“€Ne‰qž Ņ( Ø!ūK*d Ļė\÷Ä ’jéŃŻGy)ŗˆńŽ P?•>]ČŠ?“d³µH„— qҽ7WŌ-lģFžHPc š D·ƞĪęėZņ„Å’OįĻ\W£Ė Üé¶oØÄ?Ņvm'ØØ/Ł’č^5ŽĘ]B䣫r˜ź}ćUu?† ļČH,ry9©“)C¹‰ŗ“×r\tĶzÅŹ¾”M H‡Ź Œ{SO „ ć ¶”¦Lm®†ÄŒ¾Ż¹Årš^·”ŚsO¤³³łŌäõ«Xš šŻ×‡¦Ō¬§xo¦i\“‡rsĮŖ2źķåž®—ś*i±Fʐɘ½3ßėėZ—„Ń,-dŠin% ŀ'§9Ēė]]æ‡moī®&{h”e“®Gó¬„#H­lqāóžķDŁĄf\‘‘ĮÕi:£Žiä,ć·aY²łRZ›:ÕÜŅYÅ—ŻóścÖ“ü97‘ē‹ˆ”Ÿ+’v±ZčyoŒėė§^ŚÉźü:)ä}EņĒ&š³C2„qšćõ6¼–×6«±l>:ÓH‰FĒ/£\Žéś±Žļ# œ;g„v7#ķ \Ė”B2^Ä3wŅ'Ź;ŒŌ;©36ĄO=°*:›V:„÷‘Ł}„xĀ”'‰ÆS·fŠ;yn 3/ńéA¶fˆÆb %.7’ĻzēRåķą™£Ž9^^@¤k.öyD{2?B ė]W†Ł•aņFĮū¦›Ž"šŪG²šTf–fS°5å~ šRĶ6«Ø¬r,‡ĢŸ'ÉēéM2‘ÆāoA¼šk;+x§Ś‚4'ų<ćŸj©£O (ģŠ€)ßŅ›o©|Čn®öyūK$Øē'­gIsŽmīPć•ōØŌ™4^·ŃāÕŹ–UŚsõȬ»-* Y’Ńl’KWū¹$Ü“ŸŅ™ŒŒ­NūBc0BĪsøcJmތļo „X©8ĒØõ«Œģdkéš2}€RSéŅ ¾šėM,o żŅœ¶{Š%!ŲŅŽŁ BČvń­IS^+Ī"Ł.8ĻzØÄEżZ-m|$m“›xdŌR@dvąķć’ÆYŚ~—«^i)éw(ēœüÕ|ŗÕA”$zYk†C(<ēŒćbŌ!ē³OĮ8+Ī>•…Ej2Źw½ŠBƒĢ JÜGz¢ŗĻömɅw0códö£”¾Q?µ£Ō'gŒ‚6Ā}«wOŃąÕY‘åÜzŠ“YŌ?…ō‹Kq1»Žµ -ԟJɟR†ŪR±Ń£¶1¬Ń“žŲĻ󠚎ŅāO$$€šp?Jåž(hwņYhqŚÅnöÓDĶ*·LdŒų •ō8»Ÿ_XĆc'ŁāµkˆÄ‘ąć# ā¹’xs_ŠLR^[8\€$ĻŹ3Į |”¦]jšÄoØHĘ2O źåš7dXŌó€=($–īf·0¢"ž*ē§µŅļīYITģrOQYµ ķ„ŚCņĀĀX€Ū•¢ÓO[w„•&Ć$Œē š=RÖ¬ķ4Béø(AGl zå_?ų‹_¼Õ.„04qHŒGҦ]ŠE+–ŗÕ ÖP†½*"Ėzś×֚MĘƧé³’¤K Q’]ea6Z’ŚÖÖ+’¶N°Ēläüäv|Ґ]k—­ö¦Kkq+ąī#7ҵåŠĖ›SŃ'žļKŅ=:ųŻ.asü«Ē/-/®.¼ūāé!ł‚1ɬ“:ķĮ˜)p8Ēa_GųkÅPéZÖ© RĀˉž¾ųõ‹”{>­­Ą×Im¹dƒ×½s:cx’łvjæŁķ;²ķłe }އšŅ20p2¢–×ĆWöQĪęöāb@\q<žUæpא‡¶ˆ¬łąÖ“N2{ū«XD“G—Ļ#ŗÅMbĘŁ.t'^¬»tłcĒ\Ōøš6jĮć}BW»½uk–rĶ»1õüźµõć”…āŒ3»ųžw¶¦­ž“"]‹į ĪF+Ķ®ZšKo1¾Š ÆŖ ¹±„źrź×VZEąl”Ā^}ł®ā™ļQ˜Ēż–œĒęVśP–‘¶¼–Q’TcŠó{/A4‹0ó;±‘ó bHļōKG†;ˆ ˆĒ$¶2GćSjś ŃōÆ]KĒ(c l~i<ą ¾‡”ß6Æ«Gi%¤- × ’w<ńōÆZ³Ō¬tŌ·†pÆ7’3į8ļLgžĖ1QŌ§ŠīEk‚<Ó#’ vƟņž5Āx7Ä~Okž'ÖtŪīĶ™Ū#&Z&9łÅ{‹µłn|=¦j¶3 Ł%·?u}Oį\o€lō½cMŌo­õ6–čĖ»f “ŪÓ”ōšÜחvQ˰”;C0åOµz\ž¼D²µŗhn#Œ|›Žv «…Æ”ĖxēIwņō«ā·2ĘÓų±ŽF>œWĖŗŸ†üSāyõU¦“ģJ"é“€8Įœu¤ ™åžšōc^ÕąŌ¾ÓnFf;c9Ęē\-Żęƒ¦_.œś„V s+aX}ęäōüéČĪĻĀÖzTWÉqŃĪĄ"ą•#œwę°>.ė^Ń TK¦ŗŌŠ$Œ»pct©Åc+ܛ2鶍Ž£|÷W.cˆ°ĄoJļnļ-;{Q~¢f?»Py Rå&DÓŲ_*G~/-Žž YcČ$ńTmB[“VȊćęuć,{šµ+hf?kp[k7Zm­¢}…QŲĢĒ#„}'ąécĆŚžŸ¬Ėio;Ü #•2`dmś–īmÜįuxµ-JęāÕr3]¼m^ߍW>Õ4kRśšō™<‘ŸnōćøŲ½k{o6”Ś›„ĀF££$ēų×Ėž7ŸÄŗö£i=ȳ¶iüđq¼Ē“Q°ćęyõüw±lyķ¦u#å˜cįūĒÓÜĮ˜G, į>”ĀMłį6ńg°Ō.&™A\ī'‡øÆKŌo5DG’Ń­+Ź/ON’փ)[©ēŚƒįß]6Æ2^y% ¹īOå^Ż”xI×<;©ŚŚBm`bv“rgŹ> ~4\hć'ųik£Auö©ē’W”v—ē^\֗–ŅŻĆT¶‘¶Ė¹ģĘ fęoꧤčšv˜nį½·¼¹xÉtWĮˆūēńÆ Ņücā]ćQ¹Š/ÖyQ£.r§µfj {/†>&k–‘ŖųźŅīGWŚ“ø,ś`pzĻü,-;Q {„›fŹŽ»[’ÕLĘpźK„|G»ńU¾«¦ŪŲ&Ÿ"Źb78l“Į>•ēöW-qurž0dŽŖśŸzŚ$Zۜ?‰į“Óķõ©ü;q$–Ž„[ČSpbOŚøļ ųÅŚžŸm®O Ż¼3“qĒ{Sg­“ņŚŚ½ģ®wD3¹‡§§åW¼1cc$²x–y&ŗ¹»Ū31?{#ōؖˆę#ńF»NmŲSüėÄē—Nµæ.Ą+1ééōØrčTNŅ×U²ŸLŽ!"I3’9ǽkĒ&•ŖéęDdįŽéwķÖ¤n,ō?_&©my§X^Äa¤l‚zĘńv„ąż:Ņņ-YdÕnœņŪqŌÓDØ»žS7‰¼'ā¤:6{£Ē Š Ī7m=׳įkXn5« •(Šņ¹#5¤eÜŃ]n{ŚĮ4Ÿģ›+qØ_:™7*ät\גxįī©yv5-R;kWS’ĢźK}{ÓRī_“±éZ½“·ś Č,ōø lG|öĄėĶy½ž£bö3ŲȎeg28 ޟ7B]C›¹ŅķÖĶDxyKg‘Ņ™¦ßjĢmfŽD†"īfM”uĖ;;˧P«±žčėšŚųiąķ?Ćz…߉ꎎKŒģ…$ĪqÜ2*\š“;Ⱦ)jĪZĒIqelŹp0=qŠóÆ_Ų¦©g©źŗuÖ­"± ·¹ü½esTĶ xŖÓRtIōł4į!Į¹ąV·Žf“Õō;é`xīµ-äŚĀ ćØŖć.„¹4ģgų#ą­¼š¦­āØ£{©Ō:†ęP:ńłÓÆü'„ŚŻ“ŚrD-ćlFøĆzÕó"$ČīD’H³° q–ÉąOŅøżNĘfyé$wĪņĻJĔŠĻ­Ē¦YI!{sĄõ®ÆĆšž½®Kk ½Ķ¬j‡s§ŲQö)hz“š‡‰¼kq©ŲŪ’m\Ę»‚øąßšž•å:ÄÄń‰!Óu«—“™›{1'“܏­S¦icwā?ÅtæhžŃ^;ŪHv‰ī#ū¬OLŸĒō®Žm;Gšżv[ˆ.īc¶ķžSŪ'ÜŌņXJ,łŗ«+uG¼Ō§»ĖM×|ā]jź5Ń­ęŽŪy<ņ~ƒóÆ)ń…|SįŪ=£“óodxĄłĮć“é]&ŖHĻš­Ę§­ßĆm«µĢö–ń„”±ļżŃšśŹĮ &‚[*į{{V3Ž”Ģķ$LV±Čł8d ‘Ļ„|»ń9ļģž k:|šL¶6ŪA‰ä<8öėI!•<7į!¬F·WQø$y‹ĆW}mįoĆŚ|ļ¤_%Ŗ¤›‘ Ļ$äńWŹ­Ø\ó­/VńŸ}} ŻćMęHĢŹŽ±śVåŌņK’4uBvķõ©q×C]:z^›§iÖ×2ŽĄģ‹ņärI„¹×ģ!‚Ś•RTČvQŽżĶ¬‡äT¶Ö/-i$×AĪTc?€ÆS“Ęz‡“Ų@‚4»ņ•¤EłˆśT™É3Ć{üIŖM=Ā•ŒĮYĻߊÜń`śŖŚ}‰m–EĖF ų֔ūė©—āļ‡ŸŪz;é–QEk~TyOÕAĒS_-·ƒ7Y§Œ€ųź¾Ę¤«t#±Õf·Śņ”8a•ģ+Õ$ńLjmGšÅʰ€tNµŒ–¦mXoöEŲ€\ĖÕĘŠĆ«Væ‡-žĶع½–§`ī·oéJěóß:»°tVć‘ļMōIfŹÜ—'Ƶś™mā#Ӕ2®õĻŽśÖ]·Œ4­-ĒśCĮ(~‡qź*dŠŠ¾†ķę¬oā3Ų“ ¹‡zĄ} Ó\cq«¾ŪHļĒzT.åņv1,~!č:DcM±Iby_Ė×…#=W¬8³mŚ]VU¹…Ą'ÉóŽā·„Hq<¼awŖ\®ž”‰Ś›y99ĶA&…‚ϼānŲcŚ­Łåa‰„C«å™§,O\Œ3^…o)ø³·y\ll©¹śVÉÜsZzŒH—Sy“Ŗąu¬Łźh%iPļ HķZĄÄāb½¼K LŽr=”ÆAŃ„ŠRŃŽHĄŽOÉĻҜ£Ųl֒dµvŽŃ<é1œ(굆‰®’aÜ]Ģė&łJłIĮE#ŒqĻJŽVRƒ3,l/eē©WQ„sĒł°é÷Ŗ^F,‘±Ą 8©4Q±oF‹K}a¦ņ­¤Ō`ŚŪĮåÖ½·Nź÷)foD0±RóHrzśš„īˊgć_ķY5“*ŁF­&GŽ qœJĮŠāŅō«Hd…]ę ±g±«76mµxŚś6iw2ƒĪÖĶy7ˆä0] £!› æ½Uś#)K”ƒn×7p¹¹+‡¦:RŪxBēQtŒ“Ķ4§hĀąYKĢĢæŸZ“pł+!ĖnLīė]6³ą+Æ X1{Ō–ń@š@±ŠG¶EF‚qG™iZ”§XžćRšåBĒ·mzT:eÕØ2Ŗõč_ÜUĘ]jšh}ķcāĖY`ŽšdŸƒ·9ĒÖ»]/Xę11#ü>õÖzю§Śß²ĒķāOŁßćg‚>'i‹éŠŲ]Bo¤RBŻŪÄą{wÆō šÄ |]ųį_‰>–)ō}^Ķ'ł9 )©=:ēõ¬¤_+±_S‰",čøląń_3üNšŖ]Eu7”ƒ?¼GŪŌ’vˆna-ĶO‹Ž‹\±Õ4›ż2ŚöŽā7UINIŽĘæ“_Śį³šāÆo©CršmäņMÄDÄä†>ž•²F Ÿ"ĪčĄ :uÆz«"*•FBéøō5~ĢęØĒ¤"8™cĶ›¶@?żu˜Ū£0Ķ˜Wˆ=éņå伎bń‰>Rp¤AØs"†Ā·§ĢyśŠN,ڔǔJ²ąƒŚ« f2V11'‘Ś„£ZEøbkb³:Ėķüā}cĀ~%Ń|E”ÜĮig0hä˜|±(É'ō ō©HžĻąæ“&“ńGį߃üs¦ŽŁ½ģ°Ē-ĆE8ĩƦ:ņq_½žÕķ5±K»¬ī̌ō»ŠŠ‘:,u,7Ėn@ū$„«Źkńsž 5ū ÉūL| Ō¼oį}9gų—įHKp/,Ļ'~>šIü­`a#ų=ÕmSLÕ.<=vѼöģŃÉ,*Ė8Ā“ĻONŗŠÕÜĒ…fĒ=ń’ź§P˘fflÜĶvnL…f~’ø®÷AŌ­Łžha8%‡Oé^mH›Āzhuž3¦ØóYŪĶo$¬Nø;ˆÆ­¾üM¹Ń5«;Ä7׫nJ¦$  ąuļĪx¢”u.¤¤īåķWW:}ė]¤ |ģNŅ =+>ķŅ|Ī_ōҽjO”ęÖՌ„ż¦TV*”éĒ5ŠMgVģdø+*ōćŒW”Oc‚q0`–FVQ3äҰ5Ł„»2€zZ³ō£Oo,N.<ǐ·ž~•ŅMįŌ¾°7QH‰óŚĒę"†‹LäfÓžÄä‘'VēźÅ©ŸQ2Hš¶õ;AĒ\W9±ŁčöĶl@ddœōVō“³“Ø ·9Ē5Q܉#0MpŽ6Ęc‡¾}i‘OœĒ!Ł)!zzšŲŹĒ²čš]«<`M“`rā³õxRŽūʆäoRN:‚}(%ķ”0y!ū?š²|ĶĘĮŒV˜°&į䔑Ē.ܒ)¤d^³‚Āq6Ÿ232zpEr?l‚[éģä !ĀóŅ“Œl>fekZlpł^\ž|;²xĘ*{MCģh‰…s×½XłŠ÷ķ=żÄ—7ˆīģ2X¶r+-5MźŹīˆ£ •Ēk‘]ˬ“1#Cd²žNJ’lĪ–;kkū‹5&ŹGS¹Š|ƎŽōžū}”±¬3É<° fł›ĻåXIX„ęcų·SkķJk™ć_“1Ėø¬˜®Ń¬ZßtŪ†Ł3ŹŽxō5%$mh:Ųą˜\LdšOēµĖöšģ“tKČĒ ×B _Ó5k­BÖ-$[–u'iącéłV-æˆõKd-ѐDŒ©>ž•QvģŅx’zŅŚŲAĖqĶqž?±žŚ /³Ŗłnīyµ!©]ģ®–ždØÄcqī+µYäŅm̌æhČŚFÜņ;⑬&TÓ/®ī–gŽ<£Č,0Twā½CĆ3éžĘ£Øxó–ĒUŌŁĆėž5ƒ]žQs $róą÷ļV4żŽŻtėƒvÜ+c ;™øuq=Ūŗ·"?¼Ą½S)·cēĢ1ģԌŒ9u8„óAUÜ:Q¦]JÉ+ķa°Ī;šŽæń%ב͹C€ß/oOåVt•²æQpĢž¤ōü)§aÜģlNˆ¶³dŸ“ļWow9®£Jm:ļtŖŠCäÆĻČ“Zs¢”™»yØéŠŁ­“70“L gÓńÆÖ%]VõJČ (Ē#JšØŹQ3“ÉīZīaä;6ƒŒ ×yå>ČRu–Ü ßĒ!æĪiŲĘögd"ó¼Č±Ś°õˆ­įµøtž/3 *’½7ć+’ųOĀ×ŗ­”×_kX-UNŽr\Ö-–žÖ:¢H«ę“lTē½ £ ǚ~Ķa5Gŗ5Q€GҳtK»;k±Är¼²tǰ£™™ŗeķ^wŗµņģIŽq(Īr8Čļ]—ƒōKĶGG:‰[•‚_;ižēõ5›š5Š>ŽŸ_ŃÕŅ š†ŁČ Ū*=Exߋ-tĶ^9ģ-§G]‚qÓ=ņØs7ƒ¦*ż¤²KŖż“ĢÅŹ1£Īr+e~¦sfū<\\³$‘žyé^q­Ź·w‘µ©y£Ę7ŽƒV1ęŌōƅŗ|pæŚX¦i ŽX{×_ćÆ6ć°¤*ŠĘBr½1Hˆ¼5ŖÅŖ]żŠŹ7Ró2B ü½øü .Æāė›ŲųjŽ%œń3pŚÉ #Ƶ¹\źļ­’²Ź_H‚iŚ=s]–—»ÓooŪĘŃĮ#üŲĀž)‚Ļ’®u)umE,…¼FGBī FjĢV·óÜŁ¤¶ŅĆŒīaĘ)Xč.tÉŚ4†Ī58ūĞŸ.‡o,±u\“ļéA\¬ÆgØ÷ŃO§FZ5ć õ«>!¾µ·Ō£‚Ū)Œ;•änć žt «–ŅīźēLo1±^ĶvPißd–Öäy8¬å̬sž#†%ĮF]½qļ\%”vēĻ•ĘT õ¬Ķyżā ®_Ģ· $g”Ó]čPŪ¢ÜŚĮ$’nķé@Ķ“Ō`ŅģVwܬ̧­U¶Öæ“õ6±fõįÉąŠĒčg÷&-Ū—8­æjkŪøęqåɜäš08ćš¢ąz–‘£Ėiq})„*§g>ø®z[Ż.ŹģMdŪŁFĄł©s!”µa„ÜŁ,ҁo4·ćwø® SŸO°½ŠÓόøläŃĢ‚Å;*ög™ć*U~3Ī*„ƒÜ[Ck1UU'õŠhŽøŗp!(ĻaZ)vw:e“7ņƔūŠBÕŻBĻĢŽD2+U©÷ČŚčßds*’ąą ĶĒą+7^cCwq"Ć,p2qżj°¶–]ONÕtåŽ{„nq†ĮĮČ…u/ā{¤æ‡Ok$¹…˜ł›ŗ-&k'[k½j#mi ¼{@"?ŗ8¢×B’žāŠ$ź#ˌœÖ7īY&«,VĪ£Utć8ĮćŚ¹Łµ-XÜĮ«ŪLG’ĆpŪ’~Ÿ•k§iŗäļC<ĶĖņČ}GqŠóĻ$W>!ÓltūBtčĆH.1‚\vżM4ȔOQšÄŗ¢Ī$I7Bž[RĒ”ļ]Åׇō­6į ėõŖę2&M i-ĖŖÄä󞇹®ŹKōņ‚BŖv(U uÅ&4y߈,må‚źķą¦ĄsPųaŲKĒĖ`ų¬¤j͘,ļ?“bƒŚ`ĄŽ3Ūś×ć߯i×ÖZ^‡g?ŁdoßČ ä~u˜ŌN?X¹ūi¶Ž¦1·†#ÉŚźq¶Ølät2ņh5ō‰cišÜI$$„1ž~µŻ“+öø†XW ž:żh-»«×„tVw0ŲZĘ$··īmÜcøÅ ;½Åģ·y}µ[\Ł8ø„a¤#;O$Š[$źÖØ÷Č%`Aé÷H¬‹«ųlķ\ٶŌä{0§`<ŽŪĖiäø 2äŸ÷j÷öÜ2Oo ĖpČ]› ō­œz—:ƒŽZŪYĶG2’ a÷č [}3ģŠ[Į °üzu¬Ü \ÆųH-ō"HćOµG=øėXzˆ¼‰%žöHī„gfÜĆīŒš?Š€Œn]ń6”e© >+hķž\ī'ėU±²¼‹¹ć=k9K±Æ³¶äšµ ¼Ÿ½>j9ĘĀx5ŌČa>ĄN~\’iĘWŠv­Ś[Yhbź/!n˜óǽfųϹu¼M¼o‡÷ś Ž ŹHźī5-: „·¹œõ­}:ŽĖNÓ®DL¤ļ-·<ä’śź¹Šr3Ė|Gā+‹[ۈbY|“…Ęį×ČĄ¶bž ’¾ŚS±×’ÕQĪh£c¢–Ł“Ør¬æē’Ū–šˆ[„$ĒĄķķIČfņŪiÓŪéķ¤™i>iŽ>U$öü+©HNE¼Ī󢏘 C*]ÉyØė&įVH„œ±ē>µ«ā}%tŪčoą½·kä‹×Ó4&#*?Å ŅéKėuĆ3ŗEG'Œ-õ)n,®Śt;zƒųÕ)³XĒØ¦žšäy$”ĘPĒ!@ķ\櫨ɪ}Bc ߝ„°č+K’™RI!I)n«w_zM*ā{Ÿ³¾WÉĻĢHå±éY]ŽŻ»Y¶óōµ’Ä,·F@…s‚«Ē?Ļņ¬ _ Ķ ¹šk…rO8#Üҁ¹„i„Ų gƒ9ĮėWo”xbhƒąGlŠÖś­kw 6Kx\C;·:†ĘĄŌš‚²źhŅ[¢ĖĄV|b²¹¤bŽŪJš¬1ź³Ė$Œƒ;‡ššźōŲé:µĶ¤ȳ"bPĄœ}>“†ąqڿī=rźēIÓĻ›‘)Į÷ŹŪI=òƤoœ•ą{U+˜ŗkcwJ½Ž[©mQĖČ9n:ņ*γ¦[]2Ė]ź˜cŽō˜ĒhŚe€žŽ-JCMŒ‘ÕjҬŚbO5nŖ6ģ†Šęč6)”¼³k„`²ƒ“ßéShŠš\0¹`GšÜÕØ’K«ųV{Ėėm\Ü¢(ČUP23źk¤Ņü=e>˜XݧŪOŗW–õéZ‰FĘFÆį›-Č÷VмDd 5…«x+E¼Ņéę5U>w±ĻoҘ¤xžÆ ¦©j­å·qĪIõŖŗ~­|÷6¶ń ŖøŒī\ęƒ#Ū"’žX)`H®Ł»ŪĒZįSĄśœ²]ÉwqoøJHĆvŽõŒ‘¬6;MĀö6SCbĀ[ž|Ī9ÓA¦Ēu:ŪÉ9EcėŠ‚Ź^*M?Cs¢ŚĶm %dt==AÆ>-“ó!€”Įäsé@ö/³s=儺«µ¤ŚŅōŠ£šHķ|Ųå īQ؃ÜPLWs"ŚĢ„“MʬW{d}Š+Œ—ÅŚ(ŌP]L…Ÿä}h)#Īž#[ŽÉŖC{sż•:„ą|”RxśŠÓŌ¦Õļ,lĢČ%{XDQ²¦2£„h”ÜGŸxv-wķ“]Ü ×/#ž7qśb½bćH¼ø•.īn-ŽŌĒ·ÉŪ““ÜžŸ…h;1ńƒĄözf‚ś½ĘłµbŻioß7„|õ{¢j:F‹¦jq¦Vł•ś ĻõØnčŻ#·šķÉŌģ`vh|²Ćnī¼×is§E*½ŸņåøĻ­f6bx’įźx?Äv6‘jÖ×Ó½¢=÷–A)!ä.G 5‡„JgiāpBŽyżjX‹ŗĢ¶ėĂk‰‘¾Mƒšģ~>­s!›ODŠŚ €‘Ÿų׌YKp>¶±Õā¹°[yīŅ “į@Æń}Ī“}5ÜW‘ß*ĖäīŒšĄMHģ`ŪhɦohŗÉ‡bFNqR6Ÿ§^]Å6”\Ŗ»\ghõėt_ xvóUžłÖ(̌ē(1‘Ēį\ߋ4{-^÷K±µ–Źó !Ś8åŗf€<+Ē—æŪfEµ½hįf\¢Ž+ŒŅōy4čŽiTø”łe±Ī8 N²ń=ž‡£Ad,’µe{VŻ’,\„ųYuį]}GOó"·ø‘ųRŲŲŁ¾‚ŲūĆv:#Ē šž˜°c*XÕÆ^^Ūi—Ųš„ά°Ÿ&< Ē“eE÷<‹I²ÖYt†ń|MfC‰[ <×M­čz>3ŪQϽ qĒėSĢkt|·¬|<:l÷·BC<×ly<PxJų7⿃o<9ćyµ+Ūļ>̌Ɣ’w3ƒė×õ¦¤sš»VµÕ<ūū į•ķ#¶zŲ귊¾[ųŸ_¾ńV„«O6”,Ÿ(‘¾H—üµ×Qs#Ęįψ¦Ōµ),lŅūI·ŚÄ“€FkT³ui§žgˆ‘CĘI'žøéH¾w±õĆ(ŪāG‚t™õ+±é%ŽŽå…ŽGFaźkČž,źö~æƒLÓnS(…gૃЊk²0”ŗ|9Ŗ=…œ¤ńDņ‘$€õĻē]Ūj¶:“‚ŁZ4ø•v·`cšŁÉčPŸ@Sö*Īõ#ÓŅd' ‘"ē•ē¦}kŪ¼ršĻ…#°šĘ•oe†āFH÷ļLŹ÷>r_ŽĖmeø/”X±ŒcÓÖ»+ųn$ƒ@‚3-ņ.WĖĮühhj“8}fūB$v›gRL›†0*Ž› ZėS¼™lmĒŹdĒ_„.TZ‹>)šĀG¦$ZsO#e_{c#Ōb¼’FŃīģķN0xa™‹2–,©ŸÆćG*5RG„xb+/ ĮuµŪ-Ģ£ P}ütĻé^QÆų[Ş&Ö®n,g½¼‡ę’UĻ *N&—F-¬’fĪ›$€Ä§.£Œµ{÷ĆŻWG¾ø·d±o>$)"–źĆų«"%#Ū¬Ś{›į3Y,‡#Ź ~ńƟ|kćżOBń…ō°é§MŃ!łvŹNL™ēŌ%sŸuŸÅ ÆjLšÖm'^>7g¦F+„½š×ö„‘ø…’vN|ČśĘh¢KM;Ćo{A·Ķ1ʼnްÆōi¾×˜ī ąńZ»’y§Šu™ü=²śZĆhEe?9cžErzό忶:pha óri6k|7Ŗ>•"Ą4뉕›ę,ĂO½z®©kq‘-ēŗ*H~ąĒjÉ+ƒZžuŖėZ Ž{ (BÄä;’Q‘Įüiž¼ų…¦jKŖčĆķ‘$l<¹"¬=I«öeŲūJń,Ž&š%¶µvO¼ŠJ”ē8;TŽk=;˵3…“†,½óK9N+ā.ƒ9Ńī šśĖ=Ć¦ŅątlWĖz‡†<_cq O¦\Čæ>Ć“ž’Ź—³60ŠņŹŹüØ Ćļsļōƈ>)xwOŅ"Ńļ4ł!†06ģÉŚĖõ„(82ž“6NžsĘ@Üåx,n•Żų~įn$6źe\.Ē{Ō4M«ėi"Œ Xw¹ž5Tv3;”–rČ c”¬u~,ńtóxuå‹Sø’é×k *¦k–ųmŖė1^˜ķüÕWĮ•—”µ¤V‚qFµå÷ˆ”ÕĢ©ØÜ‹q_( ƒŌ×yį­~öźXć¼bŒ¹ßVg%by|q¬?ˆuKhōå]8HO%IļVÆ4’“„9ßøęD<ņ})ܓ˵x“ß Ou<°­£3}м¹®ĆAÕ ŌķÖMźIłvŒpiJ]Yp=&Õæ²# ›ČvĮW' Zą.ü/oń2óP“SŠasnūD²oĮtžµ*””ŠMš“Äz<Ó^ŹńĻ¢©g°[ā«ĻW^…ę¹€ˆ'Žh™ ļUr“fÜcš¬eøö=ÆĆś…†‹cs ń”ŠHö6ŽĒ9®3Pńnœ.žŃd‰Ģ€‚„ńXÅ;Xn] o ZĻŖEV±Ļ,”Pz{Šėõ 5k “²¶{£Łć#Śŗ!.†nF¦‚ךIØ_C6«ŒĢOŻ?Ż>żxƔ¾(ųĖQ×õ¹ ³»óōų[ŹES° Éć©„%© •įOj7zMŖŪA ųÉį%‚ÖcīY#bõ _ƒ·'Į;očÓ¾™=ÅŚĀī¢3µ·Ø8ü+XČęlžu%·ea ÖņZß Ū,nFQ‡ }+2]Ė)LøĪ}kU+ča/"›±•¤H¾iGNp(x€…Yß, äć#éGC›”mæŁį5ÆJ&ó'vpBąćŽõvī2¼“Éj£ęcøķ9Sį–YUœ’ ąē­¦ōŚ$[‘&×/ŗ#śڊd„©š čŲĒj—¶œģ~ Į7h›†?ĒĆ»ĖĖĀŚĮAbĪŪ ½Ą ģōÉĮÆķĻö{ń$÷ś ½¬įŹQsm¹łFxcÜQQ|čśęŚHµ}$\/ß ƒź¬+54½?S’[ Rk.ņ°æIP2¼.0r=ŗžŹĢä–ēšI’~żuŁGö„ń|Zo…ībų{ØÜ}§C–5żŌ‚C¹—wŖōǵ~B\¬ĖĮ¢ūųSÖ„źŒģkųbÖ÷^b…d‘.+čļ |+ŌŪLI ģvŽ\kņ3'·µyø¬Da¾ę”ā}[ą_iVZ j3"‹Üģ`FBZę>"éŠčWWķUµ€¤Ė.ĶŁGŪł×›KzÉt4tŪ=»Į¾*‡[Ņķ£ó”ED·B3ź+µ±„Ē,ĮgB_!‡A_Y 2i—q8xŹŖnīz×M%Ź\ĬÅcO»ĻńWm3‘œ£lēb„-ĘG UnädYČł€ČīÖ§<—CŽ%ŠF0³Ļē]M¦©)’E.įWī©>ŌÜĻgøø™Š’§#µ:ÖgÓŌĢ U\ę¢Q:#±ŠŲjis!}ŠÄ‚ź+ØžŹ°[E–Ł™š ŌņŽĘCŚ@Æ%¬„,™Ę ę¹ö“' Ö;bܐj•ˆ’źtÖś­Ż²²qääm cuuZmŖ\Ź·Nć_œ¾s¶ƒ.S[\Õmu)ķa‹ČEL.`š:ž”Ė×HÖ†dĮ\ćpŹżi¦_³ŠĆKŲĶ첇g¹įXÆĶźv× x·Ė÷ äśÖŃŲĘ¢±”,>}’6>h\‘žõƒ/ 4ÆĘīS0Öö7låŽKvó\(^=«ÄekHģ£y%[ÜÓV„6–73DH’%É?tóƒL3\E¾ÖādhĮćŽō'a›V“2©<%qóŅØ_Ż=“-j¬›O_z®n€r:d/ö¶‘ćI]Ž9 ķeѦp‰ĄŠ%Ž(”€›ĀzLøĄ'ų«•m>K]eģHĮž*Ī(ø²;˜.&‚!ŒI½²­VŅō-E.n“bo³ē ēō"¶4³6¢°‰K}˜ynaҟo£ŪŻĻūõĢSĶNĘRÜÕ¹Ó!²™V0ź‡ž:TW¶-©Ś,Kq/ŽÆ”õ¦¢Iæ¤h‡*dä ņ¶{ć½KrńZŽĮ C#Ÿ˜‚Ö“ä);ö}ÖøŃŪ§—nŒ‘ŽG„zn«Œ+L¦Kp¹;OSŽ•<…óž?Ł5“¼†Ö6ķœ#ŸĪ·ģ484Ė;Yo›¹Ļ$V–3¹­6«sŲŃ"ŽMœŽMeO24J„Č`z{V2ßA=ĢžLóoŒÄ }ģVޜš­äÖ1YĮµ24Ščo›ŲmTE. Čē‘Y¬R+™žčVž.ā¹Y¹ĀźóƟ:¤„ĘzOCVm/%kvˆH2SæqSŌ ™qƒ­tZ—1“7*Ģ®§īśÖ‘ÅsÆsu¬¼‹2įū×qįéīn<›wņūįx&ŖĻa”tĶ%ā¼"ä|Čvõ®‹^ŽŹ²ZĀĶEĘ3É5Ŗ&[§„ü4ö–°É-…ŁK–|Œ–cĪsV"š¢é’xĻnļ•R8Qč1[#‹ŗ­½ŌZm·īņ™É$ƒŽ rś®ŸqÉ4“a‡ ĘwRnŪ‹—R×Ćß.+¤œżœFX"`}«£Õmķ5­šÅbX¢qЉ i«Ē.©ØĒaūŃ$gŠÉ½Š§±ž­ĪZ&'pķłÖmŒžwøŁ e'G‰©ėšļ‡ļ¤··ŸČ»UĘ{ö„Č^ˆō{=sPń6i’œ¼ÆūšŁšęw÷Ż\c÷I<)ō4ÜPsv§įĶ:ĪÜ]Ģa’V9\8ÉÆ3ńE­Œš|–—č<—Sµ:nØqH£–Ó²l­ŌCh¢p zW}į›Kf½–žį-ą2W=3Z ÅézLŸ.ȝ9ĪÓÖ¼ĆPÓķl®•øDÉn˜ĄśSæC£Š#¹…'dģŽPʟļ{W5®-ļ‰/ąi ~l`‚Žø Ę~GYšźņĻE՞ņX·Ü''±ltÅVÖ"·Ō¼xŽ1»·\n"5VłTdöõę³”‡õ5®|_eo©‹{£ö€ą¤õĻC[N­5å­šY"†&FP=ˆ5*fŖ:5rćEt;až)%äRI<~$×u„Īc²µžŃBdäĒB{ÖØ ]vöŚŪOItĖĖØēós°ē'Ōö구®ÖāŚśeÜŲ5D“čj›;ÄF‡Ģ "(Ł’ŖAlš9õÆ0ńFƒus©%ͽ³²rīńžƒÓćęLŃÖx^7œĀŹĒjĆWØép%åĄŽįŠzš£Ÿ[œ7‹¼"ŃAw©Z²ī gzńŲęĮ°¤7ŽÕ”’5ncŠč0b„š8ā½vÅ¢]:+©I F4(²œŠ·Öés¦ŻA‰ rŽT­\}§‡Æbŗ†w>ą /œl53Ń/4'1Ē…Ś„-ßń®[MšµÕą»Å°BžĀ³”njKŌ•ōĶ> ¦M–ģ¹$µå«­[½Ś`(¾ĻŽ©p*2¶åļ¾!Óķl!u_"Q!*Ų+Óøę¼¶}:ę껞GPaž˜ļIAŽRģnVźŚŅāąJϽBŖ‘÷G­SŅ,nõ ¼½įUrKV£Šƒ„»ŅŽ•§.”0ŽāRݽ¾¾•…g¬¦äg`ŪOjvAcÕ#×!×“ØąUó<¼ī }Ņ;Łš3čR§·ø…]œ!¹LVrcQ9’‰š›ÜźPŲŚ$HAĻOJĶŠY‘<‰ƒO\cīŌG¢hv7:hŌ5$r‘Ióx„q𯉯 IŒ®@'Ņ“Œ„ĒXźp¤×7jv1gœ±8¬_j¶źpų26Ń:ž”ė<)}§_ŁGnQ-ąAµp0EjjZ^•ij6"Ų\•!÷’}jūB&¦—mslneP®>bąÖ†‰{gs;Ų["ļ2 rÄVf–<Ļ\Õn|Gā=M#†KX`“Źł“nģæżz‚)ć DŹģ:āŖ7f¼­½™¶žu/?6N®£EYĮéļśŃĖÜdšK¬\ßZYyū GĄO¼löÆk¾²°ø‚Å q§–ƒ%‰½źXZ½œ Ń£¤@üfµtO싽*ę µg½Ž DÜē?„#>sOLT[kŁ„Tb§w å„ūŪ­œq ^Hų½ėH Čn§į‹hōi>É—ȤycåŚ}jųc¶vš@.mć2*óøóÓ¦k[ ϱę^ Ń/eńtw?ösHNNßJŻ×¼-Ŗ^þŁü·O—v3¶Ÿ)*79Ÿx}-tH/ćŌ•ļU@‘:€±O“žD½ÓŽ•ą¢Žxo#Ė4IŽ“ŃGyäĪź@#Ę1X’éWWW««®[-ƒČÅ^Ęr:5±€Śˆ&eG…6œŒ•§¼GM–ca `6ę”sŖšī³i4­i+öÜ©­+ŻzĘѵ RŠ:H”#qÓ9ź)™‹į½ ŁÅ=ij5ĢR1dįsŲT׎mY®™ÆŽĪ8¢2žö«wµˆRG›+É6§mhĘ9įŠ\©sÓ>•éßaŽ=@YŹéd.@ėō©;]+N²šćHäŽĶ:¹Ćs÷ŗžY®?ƚ“ii§]ĄX]Č[Īöōp‰\ĢÆį-Ņx’X,įår_sė]©gŖOŚC·nÅzŸ\քŸ=X]ÜŪų²öŌC? ä| ×EŖ^\[½»¤ƒęä€zö注 ęnu›ØīT] ŚE\.A žµģ^ ŽĻÄ>±Šōč„ūI™f2«üĒćō©Q3ē9Ę]:·‘g;Nv·<օō— $ˆ„M»8ö¦ā8Ė”Æ¢O}ŖDži1Ā;æšõī‹ėŪ4ÄQŒ‚{f”oгŸ“Ę²j¶«k|!‚õT’cčŽÕLjł¶klČ»— iÜRĪfłĪ§ę[;łQŒ) u©|7į`gY”üŠŁÜē’j›1±ī ”Z\NŗÕäQŗÄ_©nĄ×+©^ZŪ ¢ˆ+™I`Ąō¬dõ.dš=Ü6]_k*żÜćq®'Äóź™lÖb ;Ō›-Ļ'›[¾ņ&ćżūä1'}k¦š„š2Ļ&³$Ŋa}  ĀüEæO³$fĆ#v ZēŽhī&˜6@#„D„bąŽ ^[_Vsę$hIĒ!@ī}«ĖMŽØĪ°›č.`„‘…9 Ļ@+#R„ʇflĖ$ęŪ„q\āŽA<Ÿfu8Gäćސ¶’÷ŗ” “®XÅšµ“ēūpčń[Ķ*ŗ™<ĢįG¶{Vrµ”xwKYS…ó ćķZś×@šĮ°›OŅ ¶Žß‡°ŚļĒ ā³9‰SxĮ^KŽMeŖŻÄ>Ą±¾©ėžÕņösč/bWī9ŻųPS™kRńÕ„ŠĘš…ģ6rĻ–™›‚¹ ÅZĶü—¦śßȏĢ+$éżī:Pfä‘Õ·ŒƒiwomtŠŅĘ|ܹėšĒŅ[żfBĒøćŸŹ¼’Ć?eń}¤×²!A ŠnßĀz⃠u0u»;Ö>Żó TvČ@}śUMKGѵ©ŠŪ'ĀL.pģOµĘåĻ ųĒFž;I¢»B²c}?:ō}oA°Óō»ŪĒž_"=Ķ–ą0žļA¢v<ĖĆ~/m~ÖŃt°Īģ%Śł z`cÖ¹ż įõżÆÄu˽6Ńtę;¦ITåÜp? ŹkQŻwÄc«é~Ō­ō %°ŌX©EUłYIēō®nļXÓōŸi–ŗŌņŽź³’+·Ö³‰vlé5ļéžšö‡¤h7¶o‘£$hd=K`Wʾ*Ņ/gšė\ń žn„<žhfóž•o (÷ 6źŅ{R²§ļW…Įįk¶šĢéu?ŸH“”(2:ūÕ5ŠöÆčSźölļ#ˆzč¼oŚ3Óš«Ž?ų—{ÆØ¤;ķģa86ü¬;H •Ÿķu¹|b/5ײŠŅUČLb=Ē ż8¬ß ŻZ§‰m4żMŚÖż’x7& \ńŠeģw_µ$šŽ£lQ³æ’õ>eŒåŌŽÆŁÅa/‡ģ°]œƒ±łć&‘ņ'ÜĮ•IG•(Ē<‘[^Ō›Ćsx–ŻZźPH`?‡üŌ1ĒŌšj MO^ÕR8ćµƒĖŠ5ī=ź\™ž¬łoHšf±Ŗx¶ūNŠuŃ„K‡‘¤nUī#šū[Ā^&t ü;;GvfE‡z© 9źśT"·¼ ÆM ŚZhWéĘYFYPä¦y>µĘ|Lųl5Ļ i:LĖöŪpvʤī-ß?żzMŲŚ0<;Mųy…ļ¼Iy+Ģ͈Bś­z…¼Ž{N›tó1\J¬ĆUpŽ6K—Ņ-ƞÖßr†ūŲõ…ąŁŽį—ĪMåcP{Zq•„}‹ąļE}„K®jvpD¤–ŒņƧ½yž­į-YÕEžŸqoq ŽfĒš|öĖ5½/ ź×zTā6Śäp8uØŖŚ<ŠNT“Ž_0ƒ“ڲ•CJēgy-µ„lSN"¹›Ŗ•ū‡=æ“ć ļSŅķ›ĆĖöŪżźBĒĄn@ėłŅŒ ;(ü m„hÖ?Ū„vP—Ļ8õ«‚ŪH2Gjé 2dtocW¶wūMNłc†ÓLv†Q€I®NóL‹į߈ BļūAŠ eˆæŻ'ųx§`:ļ ź^'‰å°†&uŻĻ•ķ[^( į­µt‘$”Ē$SUČW)ņO‹µSÅz¦ŖjE`“ŠP©‘Õ8ķ^§„„ųrĘŅD‘Zcü#Ó©pøł»§|Gµ¼ó •D³ ļį?Jét/*&_ša󣎾µĢĪQe’ų¾÷RÓä³[ūØÖT’¬ĮP2+ę‹Ļ>Įå·°I.å‘łÉć¤Õ$+Ūs6ēHšźb.TķŁŗMz…“ė}&Ż#x! żę^A¦D„Ųī5_‰:O†­Ņ¶Ks{,-&3°ž1ƒķ^ę£o•]U‹ąUŹÉIž©­ Żh6QZ2Ččæ½—®®{H¾Ō`Ō//K3[„)1µ³Ž§ČŚ7źmi–:.µ4£U¶_0‘µT}ćœę½n= <›5·… L6Ęē<ō©Œ»s+™^.Ņm!Ńļ­¤»hµšĘ5€kÅ<)¤kVšŚĢo±8##«gÆåZ)‘sčJīå`†K‘!dB¹+ŲWŸj¾!“@ą˜āRŹ­ĮēŪš¢R5GKö¹®g„"€§ųGįPŚiI 9„7šŅqž¬¹Š™bFµ†'ˆī,NĒZؑA$1ī1l?3œjiö2{—äŗM:y#O._Ż”אqŌ{ÖG†ī QÉ&„$³Ļ‡ĮĘ<㊾fs¬ŽY,Āīö' ~XĄĮ®³Ć¾"’K4‰Z“>™#ŲRŒ_ˆšĶ՞ƒ-”3M×GnQ±·Nk̼'f²ČĀ[¹™v€ŠĒqĻ֑D{†ęxnĮG‹ ¬k¶¼ø3J©+*ą‰ā®“©Žbń„šśm7M“X@¹Y¼GP ł*ĒĆWĻŖ²ź`Ålżgw9ō­ltF­hś”ZD‰gk„ r„ńšģ/¼eu ±ĒŖī.ŽžõŒ cR<×ā-ķŻÜv0]Δ̑·čq^A é|DŪ÷dŒœÖ2ކG hwF!ܤ¢4žčąÖÅ߈ŽKY"¶„:–;: YšF,č<0ļr‘Kv®īīA U_ŻŲ@óAo>č…cē‘ī}éšF™Īhž9ŸIµ6®^h„aį–Īkkž€ ˜1óx1Ś“Æ³9mGU‹PžIÕ±'¢õ­m7PŗÓ줊k)`\Œ õOc6sÅZ¤Ę˹ą\ņžį]Ž‰ā».HÆ.Œ›Ÿ;˜r£Šb˜•Ök1Ķ¤é±ŻŪŁJöåJŅĄČźe) Thå4kBč‰ÖŲĻ2Lgīšė,¼?pŗ‹^µš«œIóōĒ„Mˆ”µ+ėw ™,TĒł{Ųž}+ÄbŚ2$®ü,kԟ„0<—Ä–Ļs.čLŹĮˆv­ ¶¶·YQ2,x#>µ“"\cÜļu­j{+Y(ęóLdŽ žµóÕķ½ū¼·sFčKHå½+”FÅ„c¤Ń¤†ŅÄ“ Ō±ļN“{D$ÄælW ™œ„Ųū„­ŽņŁ·óŠuŗGę–'š˜#rŹęž Y¢˜ÄŁ †PC/|Šś’ö`ż üKš ā߄¾#h6š[› ø$wŒdEa¹}²)¦uӑžŽ’>+x{ć·Įßübšmå½ī‡¬ŲÅ,›w•6ߘ|‚> ×A¬ZŹźd –}Åc5©U­‘óĻÄßż®ŻŒ1ī’E,ž½+ņŸćgƒ^ük\Ć.Ć[ŒØ>KŸāžŸgŅ…åćöĀų-ušĒĒz°Ó­ģ-ŁŽ+§+ĄmÜtõ=ėā©Õ€|Ŗ¤ryĶtÅõ3”t2Ģr”!üß­WeT"3prp1W{lqÉjB.ćy eĒ ėR³#•XĖ+7€éUIļy¬^%ō”‘e×nrøō«*1+%ŗ"”(]IĮ­żĒ°A9"ƒ®š:m+Q“H»‹X·”Dö®·0Ė †F†Æķž ļūM^ü\ųY kÖz”’ŪšElš–Ģžj˜°ģ„WÆzĪg\šŸ½¾ń=¾§¤ŲÉcŗ{{˜n9Š`0ĆóĶuN­mw˜p­ĆOzå’ŌŻ«ŸœŸšUæŁR/ڇöLńéVj|6ÆykŸõ³[`ä/Šd{mµž{Z߆īt[ĖżęßQ’KY?ß&ŻĮN>_`F+8GŽhP§s肾³‹EMN{ ™Ļīש#¦JśGL³X§x"b<ÕņµDėI.‡ThXģllŚŻ'?liķĖ€#/Œ sĒ\UOč­Ø[1$AI8<Œ+†ŒżäßB„&y·o¦Óuė†ÜBß,‘öf•}{ąĖ“É,kPF}~µ÷ŲIóA4x˜ˆ“Ī”tõC UÉĮ8ööØ-ž%Łoy«%AõÆF óęģf^Ern–34, Ą>”—zĞTˆģ“gę”­Ó¹ĖRLʃdWS@Ń4’)ĮēM]Žn̬U; S[5ę h”Ō¹õ·¦ŁŁjóZ¼tԟcķNĒT©£x6DµYd·D§Æū^•µ=ŖZmgQŹŽõ؜&“h󉮬zēŚ¼²ūO¼]WÉ·ŽFW9»TDÆŠčĶ¢[[Ę$bą‚1Ü”³mŽŹŚåĘć÷AĘļj ·qźˆāT…†!Éąź=j¢ŽĪ$ó..ĄčŅ“TŠż§C³Ó|¶‡ķ·g\VœbŚöŹéFP’?Ś¢F5ĪUµø,ķ.ā;#R¼gćŚ¹Ė{Įt’¼b‘uUEŲē: ;{™ņ"F‘€zķmü-[¶˜"»ŗ˜ōśU=Zš»I ĀNܽj#4¬ģS³Ömķ$[¦aū¾H&ŗ[?馝¼ęź&q*Ź8zÕ#[®§'6·åĻ+ķ*„ńĒAļ[šyĀ$fÜ3Zņčc&_’ś Ł <ä.*ż„Km"䖌·Ü'„ȓk\ÕģōĶ2iaņŲŽB©9Æ"m^}MaøhŚ6īÉ"šc-éfėķæø;@’Ćŗik+{{w¶ |Š\ÜŌõ1¼Iām'Q³]-tķ²H~f'°®&źĆģėlQ|ø1ņØąA ŲŹ·šųŗŗ|Č­įŚ[wn•›•1·U°H'ҁ)d‘ŪĮe5ø&wÜ;–ĒE҆™=żÅŲeE9Q÷””™āsj—I#Ū %•~x©ą½Ō5 HĖķ{…RpĪ×CDĪjšŻmPøŻ‚@ĶZ²¹1Ø*šxči„Š%#¤•­šĘ{¢Fčš@–õ¦hrO+1‡äķŚ¶JĽQ²h£µ’w*Œą k7‹tėH-“Ōņ§ø•÷ WŠl5<³[±ŗÓļŚāīš¤25Ū“Ø>¦ÆųzŚNó}ÄjåG\óM2OS“¹ņ [ž„›oŹ:Uojö¾X-ĀÉ8šO.)6 ’ ®p1ł'Oķ §Œ(łB)Ėzį|K}éYmIUAÓ=i9‘§Ü¶gU,ē‘“[vZž³)HķCŽ (ägŅ®Y½å­ŻĀXł³#)mäc­r~7¼¼mZĘHBŪ•fÆÆĻņŖäD¹X½nÖh· ±Fu6#ĖsŠēśW¤x[Tń%Ž”qØZ“p@üĘ8'Ÿ„W)FŽ™Ø[hÉżŸnŒ9›æēSI©[j¼2ÜGS®*Ź{šĄ±s­”’$ó¢Œ)'­sĪ” b.Ƚž•‡+-²>ÖyfX*žGZģ"–āä”󏔃 øÄ˟BŸ,:ž›4*7HŹNy¹ė^‡āo ϬI„jŻv‹ĖrW8ĒŻol»¹ {5•£Ŗ÷8#”8ļ\&…”źw³5Ō¬!Frx^µMܱØĀś5Ōa|»³Óåüjäŗ­½Å©KØ 3³n%Si_aXXø1ڇ…,%H/ oelp t­=ō‹]bėSŒJ6Š e÷?­T"ks•Ņ<9„tŚ„Ć5„й‘Œœp”ę­|Dwū-“x~kyPœHä`‘Ļ#ß„h#ÉLó\Rs(;sļ]õµõݶžŽĪ苓Š R±ÖXč0ĻggpĀTø,®A<LW”\ŻżWsåĄĄź(¤`ŲźŃ[o–Żƒ« Ž0kذÖ|ԌŚķ œøļS)X›>"Ö': õ­¬¢5”rGQé^¤h÷QĖqs|«,-#ĻCėYó(nćä˜ĀŠŠ0:b»]īĪ’DK˜ī–IććÉsÜõ­®)DZŁīµ¹ŽŽŽä.ēcšĢ– @Āš±T”1Ę;Zm™*EØ]iÖč÷R7’¤/TĮĄF#O|}:SQ¹G{„Ļuqy#’ØxČõāÆ6=ō`’ø=j½™ڌ›H{+iłIPz űÕ#†pöE{qj\zZŸHńGˆtė°U, f1ÄrNć]ż—ĆŲ>Įm`šÅöÓ“łŻÉō„ch“i/†gšģŪŗ®Ér©®ZĻģš$ā„6Ÿz@Bu<ŸēXŹ%£–“’K¹o®®å‡,äĘIäŒ×[¤]CoĘw@ź:×Ī–?Ł\و żŪķ۟zņ½Jźyī®a’,Dæ.OsUÜĀJÄŚeĒŲ®ōū›ņNG«5Žj­įwO½ø’h­n#Pšēē?tVÖ¢—l`˜]Čņ‡HĮ8„m;Šn#wAYø3H²ž› „Īž-ķīÓ{±C~`~•Čj>Öü)y=ĪÉŃP9#éG³(ēF©i4_ßGåą`ƒĮ$śšąu Ė«8™D/1ozšøĘÄM ō󦦛¢$…öę½+Ā0 ­Å„„„ ‡ »oBzāØČŌÖ¼O­k( 3}’5ĄĢJ>ačkcĄśūjodŃ9$ē zŅe(ž©¬xĖJšö‡yy"«$lŒćŽõąŗ'Äčõ‹éž)aµL‹g°¬\‹Œ;v¹ń>ŹvÓ4 Œ²7Üé€;žµŁÉoa³{wgGE-‘ѱT®)E#—ńµŒś¶ ½œ–¦5•YŠ¾¹ęøK»U>É$%vš:żjŁ%” ›RŠäÕŻęĖZs PG\aMG‘¬bz>‰ é&ņ5c¶Żó¾3_4¼Qč~"ÕMšŽ).Ų‘(ĻQWŹ;—„k†ā>V5=3Ęj’Š>Ļyqm;g‰#Īs÷I¦e#„‚Ž5•Ōœņr¤Öµ“ķiG)füøķ@‘bĘś}Cķ„‘įwt“4Oéė|ßj"IWÅēkŖZiåŚĒ qĄĒR+™ń(“Ņt˜ī ¢ü®UFH÷ _“ÅkymĢē’ó®¢0šŪ+ŽIķžOҰ”×µ[øģŠ:¼qOϽs¾Õ®lnĆNßiC“Ļ=©3Š[S–ä\EŲ®2Aī9¤üÄąsŗõƒi" ÷”9!‡u?Jö惋c«čļpčŅ„Į…0z~TœŠHõ‰Rų3¾½Õõ×¶[™Ya¶‰"/ęńĪqõƟō/ZėnšĢ†Ō³īŖž†Øjėeo¼³/–§åbj]*M2 ǻå\’{Vn,{CEÕõ ®”·yōųe!X•ńĘ=ėŅ¢QŗZżć‰†rOXéé,ÆØ Ķõ®®ŪĆvs?˜Éŗ`0p8Å)$ŠŠŌęüGąM ­ē–bŽįƒ<„wzšńĶ -ōeŠŹāghņ£s•™±ŁŁ}ŸY·Y›“»?ĆRÅį‹;‹Ėy.¼Č-£`åĘyü;ŅRx­4k»kIJįNÖģćҼ>Ś6øŠK‡‘ŲäOcL Ķ3…w¼™Ē„zŽƒdš}˜iPłĢs–äÕy³¹ā„ūŻDca•<ÆŅ³W]Ödšü[AlG)÷ ž ?ēµ!®ŸŸØG¦Om'˜GĪŒqėėXŗ‡…’O2Öęf1€T©8+šX÷ ųoN_h¶65ĮM²3ž,}»×žų›Ā¾)Õ°.b{‰Š BwŅ„wI-¦’ £i}ßZŪ” :H®ąµ”„Ć&Yŗ+Y+!Ū‘ƒÜŠ>¼Ņ¼ęv`cĒqĮ«"0łŠqD­Ō E ²l]żµhÜÜŻiš\0Ü$MĖŽėśVRÜVēP{J+©#€ćüš„®ė·.Ėö‰1éHŁt*iŗõÅŌĒĻ>VĪī95Ó_͵“ē9¦L·<~žeÓ.¤øc,ŹģNÜä ÷Ļ]ųźMĪŲĘWj#gåÉėRJzmÅꗭi±›¬23ŸfĒҼŸĮ^ˆų¶K¢Ń½Ē*ŠqƒĮ>üP[aŲxŠ+(¢Õe0Śš9'ÜW™Üų‹ūSQ„ٶŹĒd™ą­4HŪX-­®o/DāyųĻšńÓō­­-®noL×J>Īß)R8ZŻÓĒ?“©®—o Ų"2 F>ßZš’_\AŖ\Ūŗ=Ä”In¼ŌŹ%ĘV>_½Ō|I©ß_ŲYjĒOpe‰N z†ĻŅŗ›j6©ž¶ņUąīļYøŲ¾dwöööźĄČK̐y¶„ilu†µai2Fzš‰"nކ„ńM ŪHTGøqĪk±š~§m¦\­ÄĻē~`ĒØī3X³C®“Ä$×±C„\ķ'„¼©»Īį]>³«kvŽ…t "}QžQŌ”¾(±J=“jśćŠU©\³Óu'·-ą±h£¹Ų€p[=°+ē]F{ķ>dŠŚ7’Wb8ē>ōĢ„"œPjšŻŸ26…W{€M{§Ć}f(5 DÕ‘Æą†^˜ōę‚|ńõÜ~/ŠÆ“4¶ °łv­Ž#õƜ¼9£ųæįó^$ę)ī™ƒ§˜8ćOj Œ{œļöwŽ|EāŌe™Š%²ß.3é^ćgdśš/eXåšBUUO*ÜPT¢‹Sx‚źk]0Ćj’hó†öfĮŒg“šg ²ń‹ ¼Ō5kŁ”½æšFųóó9ļĘĪj\¬&ÕĢÆųRėĄŚ†“”YiĻymqs™~\”A“Įż+ėŲZx»ÄsƧYĮch‹†Ż&āXuĻįYJF†Ä [m#Z“³‹D}F"ž\²•OFžUńķ§ŽŲßų.ĆL·šęŽčH_jņc׊pÜƞ Ö[už³cu÷ś¼’ vŖ?<;ć %“k½>į“•hāIć9Ų1Ą#¶kc9>†M‡ēÓķ‡ŹūĪw z^£¢i©v‰•ٰr½ 2o”ŲĻćńįŲoļ xKL#;¾Š}9ŖŚį]RŹ ruxķgĄv~ŒŻóļ@\K ŖžžÖµ³Ś‚†÷Ŗś†‘cØxŪOÕŽÖiR$XU¤_@ĄąžŹ­4QĮxĖC¶“Ō”Ōä™äĢĘ8·‚HÉcņ­»{]^Y¢²ņq bŹæ{Ūšā‡ļ-4K;źīy¦ūJ0h“¦įWį.ø‡ĆƒE™š 7‘Zq»ļœ`P4y«kB,­Ģv*äīŠóéZ½¹0ĻöˆŪ•t÷2z)t%ŽŚÖŚH$‰ī3’XW£xĒ7ŚTŚīVہea”Ļć\Ņv"˩躟Ä-[X“LŅÕa‚Å&ÉÄŖ`ć8ü+7ǚŖŪŪ[YA}4?7ļ¶žc„aŹxķ½¹Ģv,ū²zœžj¢‹ˆ^I³åĶæQļV§i¦ėsElč‘Ēø”\žĒÖø«—ń„Ņ^Ā¢å[†'€Äb„n/fzž‡«k {e śpžT!uųźkŗÖž]kgÆéŚ«iék,m-¾sē( 涌;“ģlaėž¶Ō5 ½Z2ŽsĘØų=pśę¼ÓÄ> Ž}5īdÖ@r;JŃ+#˜Ó¬¬tūxdŽĪK.T×øųe,%–Ś×Qø‚ŚŻ†ņIĄŪļéғاĪ[ľ±ńĶķ­“A#ĘŻFJŖē¤ń^³ŖŽßéļ.œń˜‚goÆzŘŹ,ęōĻŻģ–āīįd›$ēc=Ē­{…u“šę›©Ėeegs~b%^@2„1šBƒč|9«Üų‚ĻX¹šé™n%‘„”©Č%Žp¾ÕėŸ5+}GŐŚj÷R#…¹Śs×=*%>ˆŌżŅž7ēīמx«^±ń®§©č¾]¾1€ Žœę¢÷*7>$ń§Šnµå’ŅZ#”¤•ļ^K¦jZ„Į6öR^eˆŁ»śWD#ŠŲõ{”‡]q”c›Uh—8éŽõčš¶‘įėHʕjĄ–óI$ּرüw§i÷vÆt–vN„:;…,=kĪķ5ĖKĄŅųaÜ0Źń}Š¹ėš‰C°ićėŸźz¬²«\(Ę[n[n1žWĮלGˆßTœłńy^_”ĆåūÕȉDģõ»»+«[››½ŅĢŁĒ 'ƒ5“Ń4¹-wN–ń±0—lķbry<ŃĖc#ŃgŌĻŽ,LVɲ;Q¾FŒ·©?ҼOLńœś~½7ö¼k‘k‚=7v¤č}oćJm>k›ė8¬ŃXy&>yļÓŠWųå“ż6Ń5YõYo..ä!ĪX’õŗŠ>S¹ų} Ś>” Qļ¼`^GŻ‚€׊‹Ę¾9¶óŽvd”2ŖÆ·­;&rpév—ķČ_*Œ1ϵs~'Óę·e·HŹŹģPgŖńMHŲócŌ“}IüĄė‡Āsļ^įįĻĒöQ4Ó*ŹĆļšŃ>ĄĖĢ“_¤såĀTŽāŸ¢i«qņ܈Į ĪXzŠÉœēA›a{w6Š2˜Ōł™ć8ž!X:¶§„YźQX,‘K(Ąv 58«“ģībųßĮ‹‡?‰„p^ź›Uć¶w8Sž§·­rśĆ/jÖqź7+%¾•8ņщۓž?^µ­ĶŌ]š§ĀĖ’Ńļ/ĆDß»ÄGqVķ;Rjaކ-¢#3oŪ†Āƒ×?LÖa(ö14‹ķ/B–ū‹Čī„xT# }5ŲŁüQ“»°k&{ģSŒB1ŌzVĪĒįā÷[Ö5 ķRk鯋™’”3Ó•½­Ī4;ō¶"¹…“4} m~cm¼J—°ĒołØČ2:ż~•Ė_Ųł“ĮydŪ-JŗćļļS7ŠŅ2.ŲĖcZś5xśŪœā¹›ķAZf†v¦ ūµ½”ēZ©Ō%œĮSĪĪpIķ]÷‡<)s,5ė9t]ģT1«zp!›?؟lšo¶²·P ˳<ŽÕ嚾µcaā)ō‹9…Ē–įKŽēü+Ućę­éÓ£5Ąw8lҟįėw¶-3ÜK<éIĖĪsʗ÷·R¢JŅ•Fćļ­į;;›NßnÄ;¾^’Z‚ZŠöÖ»›Nŗ±…!I"f%™ W}£jM«É$ilīŖ2xžC­4ģ(ĘĒ{y«»h‹§'ŁŚ,ķO\ū׆ėÖpEˆā˜üŪ²0Nkdū} ÖÕī\[A»å?xVåĪ ™5Ü0Ü&ƒÕ€ėD‘5Uō3 Ńļ¼P²"80Ø,8Å,Ÿ?²į{‰ļ<™x\pŁō5‹HĀČlße³³US‡ęÜ8Å23 „ČĪGjĘH؝_‡.ī®mfŽfPų žiŗ’†#ky™ÕcfżįSŲć­AgŽD®&xŹØv‚9ĶOu‘Y@u|sĻJiŲ.tž¶†ķ:K{K!ŸĄ×Uā­V-@=ż”TÉłbĄĀ­>n‚<^ł„–O3z$Ģ~QźińĻvˆŖØĮ­bōh„i„VaœēėŗEüQŪŪEoĘźø-ŻŅ”›×WG˕ʆ8ŚruŚTƒWźē͉„¢¦w¤iu«\=¾ÄÜųo ¾ Ö®ÆŖčśE› Dw/“*1·ŸēZ؝ćÜłWĒŽ9·ƒlz\ sxŅNpdwüųÆ=¶Õī^xī%˜‡xēŅ”¢kȍS6BéĘGk³Óu8 dW˜‚i%c ‘±Ō]Ė£KV†X^śD$ÅŻG©¬ųY/“Č`·XVpÜ:VńFwčĪOĆÆļÆc,— i`Ē#Æ&½’Ā–L7,evą9ėŸj£h$} Ć>i“äRrĶß>µ ¬ŠäØ%ŌéAPZ’‰&ŽāC“ŻÜiחBĢ,ækFĢ•~ÕQĪŗq?¬Ÿų7»öŗŗ“½×?doj1Ūi5ö‰ö‰ŗĪN]G< üĄ}kś˜Ō,ŁgY—lØJ0ė‚+:ĖSj±źxī§$ɾÓöŗ“] «ó«ćĒĆ­.ݚ{MFUk¦g*īI‡nŻĶsØŲā©e£?’mŸƒšďkĖ©ŪC Ģɕņži¤VĪę#Ÿr}«ł½ń…Øi:γ Ż&²į ©SČĘzāŗc±‹1V̌Ź:cļAU.#yĄfCžõ¦pŌjåH"Ā[ćØ=i²• #ˆČ×t>•„3(ČcG;:ČÅ£å¼iy_}\ēŅ®[ŹA2 ć;{Ō±2gi‚Hå+Īļ⬵;!¹~ĘåĢö·?(a+ōמ ·ūJŽ|ų±§é»ßĮįżNržz?19 8#š±ÕŠžą¾ųė̲ÓQgŒčzŒ ,2:ଘČǦsś×ÖsŹn"K„ł”aŲÖ F¾‹gkst²jĖ꣌ćź6G_Āæ‡ų-‡ģRæ³ķ|SąĶ>WšOˆekĖA+ĘĒsŖ7N Ī3ЊāF¤š:(ö>ųm«i÷ž±M5PŻ[9Y~\ ę½KLžāöęDx”H£Ę× Ģ™ė_#˜’WźŁÜ¶±cYš;KėW…ˆĄłcŒÕä×äß ?9\•(ć½qSWv1œnŒ=GHX “SŠ3+]GŹ3ė^‹š«Ä[ ›[żJ;‹’H FO„}~MYņø³ŹÆsé+Bnā*½ŸāśVn©E*+†Żōé_CMō<А+Ē&ä(X>ŅsĶ\µø{«ˆü½±į!ŗWU=Ž9.£u[o6é§Ų„‰;¶€™-¢,8›lˆ»¹ķō«³=@Ķ$6ūCL\(-ÜׯčvęĀC; °P #ļj˜—õ \ŪģH$2Cø˜®aµ›_2ēĪ%ې©j‰”¼ŹŚn­ks~,”gŒGƒ Ę:×yww”>œ”m£¶ŌUˆówœ°ķ‘Ҧ7č[±ę-5Ö©+ʋˆ•±ņżk”šÖ›äÜ<ļĢ„„ó8ҵ0”ŗė·Č³ĻSö…lĒ k•†ĖĶaq:ł¤Gn}«U$a)v;=>Ł5)¼Õ?ģ’³<ķę0‹$ąv«3“8}sF–įydä柄@¹Ÿ@ŸéA'}a8ÓćÉVWĻˁV¢Õu/QUƉfs"ŪĪŪg”F@šÉ‡E¶»§†+w8 w0õ+‹kvŠ&>y¹CĪ•ęš5>IĀS@§ƒd2ŲŹŽK³V8Ę»;ø“ģó,Įb‹M± Ü_gmw˱øĪ3Y°9Š7Iw(f.z`R/—M ‰.g¼²kūpö5"!ŽĻJō˜ī4Ķ_Fµ·–R×»pr?Õµ1ŹēØxT°/ugAĄ u5ŹŪłŗ”³“čĮĄĮĮįM\`fs7¶wĮ LÅq’:W¬ų ĀZ*h××zÄaē$Ęüy~ųļ’ė­c®ģåõ ~ß?ŁŌ%¾ļ—éZö¶’e¶Aģ3މ!b‚$pBżiŠ­ÓkŁEKY”ä”ķĒē\ā)ų‹OŗŽi,ēL@S ÷cß#ņ®GMÓ.šś41ŗD¹AĘi”JżAKhģķā89;psŠē×T¼»øŽkh]p“wе1)jlėzŻē‰u)5]nOµjm“<¤_ńģ+wN“’’Lø[)@”Ž˜©”®oM_CŸŅ­^ąČ·AÕÖB§pĒ#’Õ]m¾ŖŠĘa` 'Ź=1Rkm.pž y/$ ¶Šzž÷­ -Rś(ķīŽ$ŠĘž»©¤L¤lš”‰p$·b§µlėˆģ!Š'naŹŃc œ¤­Å„«$lŪW»/&¬x;MÕu›«F ‡w‚¹śśV‘¦†„©É„Ż=¼q­Ą$£°lącµ`Z]ŻĢóĄņ’”9ĄAĘ)Ź:j?TÓmˆ{xć;TƐyŪī340\Iõ„rKs¢%ū{›«ēĆFZ%![hĒē]-¶r…TĻ#ޜ 6ķt嶂8n?3±ät­Ķj–PK ’©õ֫̉Hä5 hö…Ī0Ėž¢°ģķīƒ[;CqŪ‰'ŠLq‘ŽųŠįn“«cs!’gąņÜVo†nn``Æ!CŒzb±m›EhX²ń„ˆÆ<ė‰üµĮH‰`;Žõ×xƒVž×¶“3 żŲ$ĪÓWģdXFmķnfvóŒ=³T!²y÷Ģé"ĘĒŽ•fZĶ·ƒ­"µGŃKq*īT<ѧŻiśt"Ń$›‰b{֊FrF\¾0EÕ4ķ5!YVYv±VĮQėŽõ£ć kK¤»“—ĢŒēĖ=DZ÷ŖēFl󃬯Ķymn–Š„V'8Ć1’9ÆXšŽ¬š;<–‹(?/–ć!¾µ`sw~Ń ÖćY¹ø°‡k>ŲĘķēØP3ŠšŻNu¬—¤‰Cü¼ćŽÕDm޵t½mby䶖HTįyĮļMkxē ®YXóŸzĪÅ3¬µ³-‹Å"¶åĪlU-]:%ÅĢ—v+t³ÄFÉĀQŽōDÅĖ£2õxe2-ān^y޽ĆZī­ucoĆJUŸĖ¹öĶ[dGŒ¼'|öIżq ½x²§'hoz†’óLŅ­-õ(GŪs!Ē ŻńYDĆ֝õ $ĘŻį÷.;U{;¹¹Ky#ŽO-ō¬ć#E :½”޳g|¤ ‚ž4¾tŌ'+p|̓œŠ“Q…ćĻhń9Ó4hgk…$;:ķŽĆ·zóŻ®/£3^ĪØ¤ąFOOzeÄĖŌ¬ŚwšJ’kŃü;”kZ”-.-Ū»©ŽąP¬öĖOŅ#‡%J„°sھ~ń>§4·Ź†źiķD„U” —jGl–Æ ŹoņØäŌ[HŌu)˜š{Ÿoα“¹¤#Ōæq¬ŻÉcµŅ*·\Ÿā÷Å_·…~Čev@J’F ©4*’c¶§¦mmĖ•'x¼ĀĒLŗµÖ]­ÄŠ@ŪĪ@<÷“#c ‰ō=wƑĻqs4Ņ– &ā:ā½/S±Q„“š¢īT'?Ž>†›]Ģ£~§œx{XńŌ­ØZAä*Øp\ŒgėĶp:†‡.‡ŖČņń]Ÿ=AėX0Ųėl~Ćuop·Ml±»ŽĒõ¬Ż#ĄÖ·6§ Š–LK( ÄuŖNÅöŗu½žōXUœīÅVDw²Ķ¶UU†ķ‘оp±$Ś|šœ ¬o“Œ1Åy\ ͦ«˜Ø”ŲŌ;™Z’ċķuäōėKKxS÷{8 }ėŹÆ5‹ßZ[ßĶk«Ŗ•*§9ē®kŁ”ĶßIucoł€~Wšģ4»‰LŽIг°ŚžŌ€ŌÓķąg”Däw8Ø5Kʒ8cņFXpĒŪņ¦„ÕČōū“¹Ń®-®K©?xrøō®UŌ. šA‹lG#= m\ĶŞ¹šū~—c|g“>ńŠ …jźŽ*’ŻÖs$R©Įē#¬`J<ßĀ[’į.}^ęK¦·Vó8SźJśÄ>"Ņu}"g{˜īoī#dŚĆę\Tø™ž>–cŪ”«0ŒƒZš×†ķÆtÉćņǜ‹‘ŲńRW7s…Š£“Ōm×H¹¶R ¶N3žŲ?•zźxcH¶Ó­a†Ku r…ķči–¢¹£Óģlć·Ž‘`+Œø±¼³Ō†­i#Ąz §5"‘BÓŪYŠ5›]`¼zƒ‰_ē9 £'Œū_8µ”ńj1ŁŲÉ3 )vźFģV ŸNi¾X.må¼Fß+©ĪrHĪk·»Š+[i#P Ē&™•C/H±–ęC¹¶õĄjĻńŒg‚ŅK8AœH<×’cüęƒ3м]?R³™wY±…ŪėļķÖÆčŚXC••XćwÜG„DšÓc©»ŗ¹6“é÷ ĄŚĆ9#"¾yæó&w{‰7L„©ćź®U™Zõ;ǐ³˜Š| z×­éEßŲ¢Žą²>2Kšbåg-‰©^j—÷HcK(0Ŗ£¬„÷©ę³{hå,X7LReĘJš®¢žŅ!՘ ²IäØ'vGüEGaćh.Z(Axe'nā0sL³Ó-īąt†I'I%$w®Ä·—śĪ«pEf>n$ūb“] “±{L°*Ä•›Öŗˆ¬Õ€É=„fągĢĪ[Ä~u³[±e;‡AŌV~™ “× Ę7“ŏDI«ØBš]ÜVØc™™rÅNvūV³¦ÜŽĘ†ŚāKy Æ)Õ@#5Š;™nmŁWbl R Éé‚k€“ݦźsßL%hs€A'Ž“ Äėl¼Y„ź‘^¤‹42üŹ ¦~nÕĢxKY»“P»Ńo%haÜO˜ļņÆ=‡Ņ“ö„ū3 Ōn!ÓÆ.•fŽņ ķĒńQXĶcD÷.ˆH ÷Øęfœ¶*Xźwś–Knƒ>˜®ŸX»±“ģņČš©Q…āÕŗœ÷ü#š‰œÉu:3³ņ$Qļ]ķµŽ™ xwCšĘ˜–)-“ņĻņ(ļļž§æÓ4f~¹hž.†Ņ×T–v[y ‹‚p¹éųטZų{WÓuū˜-`WŅö€Ņ䌜cÖ·H‡ŁwśķéV$›u;°OV~™>‘”_F¬ģ­•(Żž”ÅÜõ{k–Ž ¶Vv°Å°“µGākļ^½K6DXĆįī)\¢_čä—W×S¤V΁Nw¹®åļSư½ģĐÄ'^õ”ŹŠ8ŻcÄW7ŃO²©fŻÓ¼ŅļHXąƒn|ŽK08Ük)›“«KÆ=7ķŽ1ŌĪ+oPńvu{ k4£Ė@F2@ö„õ˜ń–…}a§ŚĢĘE‰Į#ŽĻjó½9ĢöQ¢ßēÉūÚŠMŪsŌcŃ,/.,ŻR4Uq’¼n®ā=ȋnœ±āV\eÜϰ{«bŖYŽį„–Æ<Ėē±EČ Žę…¦ę—"’Ś+r¬Ļµćµ[i\Ę#@@ĒŌµkČ5āó”(GžēEq;G9ß 2s@X÷{sW—˼Ōm#²“2„FĻųvķQų—ÄVšĶµž›n¦ī(٤e1C‘ŌPZģfXxÆĆśdyuM5īŁ¶“Ył'Š“SÖašę Ņ~Tg÷śŌLS5ēO²[Aw"yÖĢ„Ž'•‹šĪīko\ų‚dšU’ŲʒH7”Œžu„™śĆĀś‡†l¾ÕÆ\k‡H^@9u“éł×†ü1Ōüii{ā{˜ę$qĒzė-„6Ö·,qÄdŒĒ»ėĮż)Ü„$sZ|śuĖŽZ‰UŽ'ķSžq’×ęž&Šī/u¹€i­tøö²ąņĪ?żT†äeĶ"ÅdmcPØüŻŲū×u4ŗYD‚drŽJõØØŠę§ŃuŠ LPą3Ģ +×uĶN·ŅtFšČkɅ²›ē¤qśVŽÅčcV½Žņūģ2¤QĘBį~ėt95GTе;æ²]Ž,²@ɼeŗÕF=ŹqßĒalb:{ĢĪė6čłź9Ø®t›Õ”āu‹v⼆yśūb¹›æŽŚ› ‹iŠ-ģsÅA&A»łÕ›(Üך¬ŸŪG©!g³™DŖ»+žy®×Y³µŌ“Ūč"6Äeł€Qņ޼w„~‚”l|Į{ØŁéžeĄ·ŽHU·ąÆŽö°Ä3ų˜\^BWJ‚@UQĘ; S’<ÆXŅ®ōY&ŗ—ĻY›åAšś#Ὲõ»:ŪG½Ó0›FĘ\ž¬k9®¦L÷x¬ZŻ6¼r1ʚŠņŅy“ŪŪkgŠŁž6iLō?•fa±ņ}ƇFų»įŪĶ_ĘZ†£éS ±Gƒ¶.y©x)¤Ń%’c 늲Ōūž»Ŗjš\ūD1H7(äsõŠąuK3n–·vvņ<“M·zÜśPK“)kšeŻ•…Ä÷ūģv€ŲaĮ_Zą-™ļlo,Ģ—`xĒØ„-Œfś߅m5K8®ÄÜÉ1 ļ]’‚<9į’ķ¾Ōm¤qó1ŻĮϦM`%&;ćgŒ“3ĀwŅćå•ć˜Ü n ?‡©ę¾Aj×nķĖ3Ī qó”{PtĀ]bÓ%’„_H†;I…›M÷ö·/Ļ9®gW»’YäøłęrJ£÷Eg6hnč>"¾¶ ×  +g•ÆJŅoģo§õ&‡ķJwGžŒ}čƒčtpÄā=Ģ„÷®*ÓKfµ8;j™2FÕ­ę¢ņYڹ j8é^££Įo ³®ZO˜·\‘ō¤bl¤Ū«-¬g{)åG$Õć¾$ųq«O©Łźļ{ Ćę‰Jēē@;qļZFV5‚;Ń©ŚčZēSŻŻŹBAóć…]²ńf½‡įK»si¦‡+õ#¶ +–ĆĄ¾ ]*óZÕ~Śßnw%nGLdzW|Qńwˆµēy¬m_+ēG÷„<攢S<ź>öūN·¹VžŪ”$‘¾»ŸÉe„ƒk$o%Ć>YĘŃߊː˜Ė”Ū_jo¤Į+Ł™ŲķŚ‡…I©źwįÓyö.X÷9>ÜP–ÄÉ܏įķŪ„ŪM«y®6īTŪŌśW²jóčmo9øņtū}žc9ž{(īzS”M"“™Ÿć6±_»CQ)XĮīy=ģw1Lė{ĘĆŽØY¼ė4‰å;Ūr t5“5Š;>v·*Ń6ĒmģEm_źž§ Ā5Ž6 æy@džyģŗh¶“tuéaŌcՍ:+k2ćP†I1Ÿ•Ś}9  ˜ELr;GŁĘ3RI̬¤ĢČ?»ė@›i"øSŌ÷Æ$ńF¢ž"Óę³G‘Q\” ąžEo[Bև–éž µ¹AØÜ\¦Žy=ė+Ä:2é6Š‹ró>p>^I튾rż”Ķ9½H“ķ "Č<Ž•cOÖgY|µffĪ6ž¢£äg&tVŚŚ‹į ‹s“$ræS^Ńį©nµ”A‘ņĪ:©­QĪŁŪ]Ü MKhZW>ö{7|{לx‚źźśa,ņ9@”y=@éAp}„'f’ŃĪVQiöæaÜø(±“ĘFŒl•b”€¹ĻĖ×ń­m6}Ģ<”]ŠHv/“ƒŲŽ©JĒU9ŪCč_€æ¼[šƒāæ‚>&x*wŅ5ķ&ž9Žą?3F¤¤’¼WśCžĪæ“oŚką_Ćļ‹Z5Ķ•ĆßXEśĄŁņ®BņuĒ<š**;£yJēcŖé+2B€Ģ§ŅīÓSµ–Ķ|Іqøć‚Jž]æm?ƒš‡„üowØĒo.›ŃhåB·Æź+X3žGēēö÷P®é q±łI«K|²I&ä”ņsVyõb@'Ęåūœ£Ś™Aå īQr>lqN>G:Ł*ØŪŠf†TdeL«c€ēõ­ĪŹ{•Y)Cē—y=i‡;ș`ZMic®:ņØŹ›xįø=Euš]ĢÖŚ†•iØÜé·¶² mž3Ā?«R; ėž }ūNßülųy ųgS××ūfĪxąa3•c"š¬ č­Ēż xnīźļN¶”’ZDÜīŹ8ēņĻć\õ£Gej×6Öę9ˆ/œ6;Šųkž ū-i_µwģĶćˤǨxŪE‚]KAr>i2§r ž§ß‘é^}uŌŗnĢž¼%iŖü5ų‹«ų'Ä6L“G7Ųe‰³Œ£’;Šśae’Ęę;eU‡u¢Ņ|S¾¶@ĀŌa†Ż÷‡Ņ¬Żź—w;ę¼’{×ÖQ‘ąÖBBūdGBBddÕ÷–S"ĪĘn;z×|>k”ŻiŅi—ö²ĮūĻ“.2} sZœEbžŠ18^kQFēŸ+jvńH7‘ųWŠśv‰q©éĪęe\y„ČéŒlcižžĶÓµŖÜĶ5ŹdÄsø“ÜלXi—×Z‹@¤±ĒJ-sCÕōļ Ū¬pHķsćęb8°õż č,Ėłł8`qš»Iō0“M2k\Ż(ČĄßĆ[š†” mūŽvœę‘ ę„»]RI._āĮČļ[šŽś™˜“‘DŖ.ąqA2…Œ›m]ģ零¹1Į—ld·Žā½:Ļƒj0G{n” Ś\ŸļÖ¶NĘ\§ ā=šŅĘKÜ Åv c{޹5ÆVŽPŽX9 Z9Ь{N¦X^Ƣ呶žć?Ņøk˜--Æ®'“™Ż[…ųqO˜žTsZŌ·7Ń‘ĻA<µOąk›˜…äwŠš*±qź=hc±‹ā+iuĄ –­^ŠōŸ“»¼Åd‹p*ōˉéZ~‹¦Ś3l‘ŁK śUč4č.ķŻe¹EUŒÆzLŠē4ß+MūLlńē ‘Į®/]–(®ęEr¶ī=x¬å!Ųe’­¼O‡Üz1]>‰„Gs8ŗ3„‰ Xē„8ĖR$ś×“śdź¦)2Œ‘œ1ł×‹xvĘÓD¼Ōģoy–P|¶pC»9ü²+hŹĘfž‘˜Ś­ĀBŠģb3•>µńPŅü;ØŪŚió« ņTG’ż+E 2ō©åæ č 0Ę3޶õ›Ÿō4Šį"ŽO\rD„ŠCü'§>«3aUI'9ÓŪĒ„5ŪĖŁ¢ŽO=|µVN¤‚?J€9Ļ EmzLM3UŗsÜ~ÅOtaū,ŃĶ·.3·ŸĀ€±­­Kq£%¤·lQg@ŹĻŹGō­=)mJG‚Ž11ä¶zžĒŹcŻŁ˜¤ ,IäzWOįin¬-.6īMĢC t ø»n6źž3uŖy’¹$ąV‹Y‹+ˆ#ŗO½‚Ąs֑\čŃÕ“Ė[›WÓĻ“ąķaž­rāF­œŸ³$.8SķNęr•γLÓl`E dhqÜr*†ŖDQGĶśRę$äõ7ņž8Ō¹Ę:Š÷ĻO¢ ¬‘JÖŅN„% £ŽGJ„&>VpķįČļµ™lmbóWwßõ5…ā_I”]-¤ńIł#Ø4å"ćŠZī·ņä;P)É=ėŹuO ”¹'K ēzŽÕ„Ī˜ĀĘ}ĖéwFŽā)s€ĘMz¬’˜ŠÅ aŒœzT(=ę«hė pÄ.3Ÿ0c#Śø¤—ĢW󐳖īrŖSī`āsņi¶»ļī˜8#©<{ Į’W¶™LED§‘žąU9„S;g‹W··o8¬ƒ€ ­Ųlį±–6šEņ󜃐ƔµsU"Ž„m`āŪQ·MÖŅ2:ćüŠĒŻ5ÄĄ€TƒĻJŅ#ęeĖ›ģųe&@Ć )ą}j•ę­ØŹöö¶NŠiķ‚č¼åńÖØĪR5>Ł:Eo óH’F„A^ Ķs–ßjZFŪøÆĶׯzfnE¶ŠÖŚ[k¼ƒvĒØĶ;Tø¹–hĀ»<*ܑȧ2LĖøežź9!CyršōŻ/VH-ZO³³J˜īÕ°x–6žŌźŃF­¹»8'Ö¼§ĀŚƈ5Ū+»Łā{!?ļ2¹ sŪéS'cXĖ”ö8ÓōʖāA5±…bPOš€<}+Ā<ąė½xZÖ4ū4Ŗdē’ėČŽ ¹„įķ2H¬bŗņVlāŖ÷6‘™>Ļ”yÅ"\-©ĆƋ›ē“¹C±{śõ_i’ĶpŽaĢą€Ķ6̬Žāf¬tˆōX4ČoēwĆČ AägÓ„.—«ŲėØÆĪŠ ©ćmD”Šm|”ėc],‰2!€®JćĀk ]Zv·{£ÉpøĒÖ°rHÖȱ­x‹CŗšÕļ‡õ 6 ‰œ³Ī*GP}AćŽ×…5é%»Ī¶å°ČlńßėVŖ-Ī“Åzv¬Ķn‘dx=r+Ļīü&öĮ5¼ØŁź2p“ż§cHÓī+hąÉi’płgڽ»AÕį¶ŽŚÓrł / 4¹˜„>?Õ_KžU¤1²īĻQƒŚ¼‚Ī÷M‘ÅąjæOļ Ņ)õ0œŗµ-;PÖÆt×Ņēx“ĶW甆ŗ?_ŲY¦“gygh—ń®ēhś±Ē~?Zį.‡O©]ßźhārc}…z¦‘eÆź $1Zl֑œŪ¬Ō÷Ÿ éæaÓŚhYÓćæzē.|ē^²¤+1åż+R%…¦Ó­4+rĮŅfŽōšÜZž³į]JOˆ`™J€ ĻØØ”–ĀTõ9Y|5«Yé¶×W6ÓŻŒ³¤uČķҼöņēūyŅFtm©å#ƒœcč+#^Bõ½œbĪõ¦e)Ė€GN“¶> °š¼Iia$Ó[ŒœHö£˜\¦Å–¼Ś«ĒqlŒ"?wŒsZ§Ä¶ŚdGķ!¼Ü‘…ꕜ‰’ œV΢ͣkœīŒĘøyµbīžQrR=ģGŹæ{=)$śšs"¬PŻ2Ž–e ʱąVe²†źå„9F¾Õ3(ķ ˆ=ķå>ĪNāJŒžu‹Ŗ[Ū[Ąę ö¼j,9-„÷q¬²(ņĮĒŅ®ŪXĪVHįž5‡ ~õŃ&—u¦[Esrā5u.n£„Gi­Aup±I ÄŲ#†uo¬ź·:l.VC țpwRqśVI[]6ŚöĀxʜŻ ūÕÓŲ϶ŌįH^(Ūk““/r+*]&éĖÉ/1bæÖŗ ĢJ-#9;XŽx®Vę}]üI:ZĆ$ÖJ”Րńžr1łU_ Ņ6õtøń©p܅#EkųGÄēPæ[;‹I<³_SļXŲח¹ŌĒ”ŲÉvŅYˆ³ķ掙āUŅg}.K‹pźpÄ£ŲŠQ—£OŖj7 ­Ų¤chē9Į­M]o`6Ė(‰"v黐śĻˆ4ĶGø–[†Žėw–ˆļdc­x]ŖĪŗŠ\@ćßęg>ł ”l¼i4¶R¼Ģ”UB…GµliZ“2M š/2'ÉlžŸZ ’]N„_Āžy>įÉ?Ż“āčć¹šŽÆqąó’čS–-ž‚³”ŗ’¹āž….õ+v™ 9\•'•5źw¶V÷ /n†Xŗēųj V<Pkķ \ÕœóM줠o”qŽŸ…:Ķmõ{äµø1Į>7a»‘[¤G9é6ŽVI"… ÄüŲ­+9P\­¬’x`zŠR‘¹se¦ų~ķõCż…—tŁĒ'ęløžąB°@]†Ņ:Ø'®QĖų¦O?@—HŽÖ$2‰QÉåqžGåXŅÖóÄ Ö­%¬h]·ŒGæįL™JĒ®ksivĶi±_“1ٱV“Ņ-į½’é5Ęö”6mÜŁāL@@8ć­OŚK\:¹Īy8Å+‚G?ā_%oüøć„ōę¹ė%øb¶”`2÷÷5”™¢¦aųję]OPqtŹĆĢ,w1ž•ŁEs7×pż<¢Ēk‚„š(ö9½vŚužĻæ°»„y’²į‘Ę ć^Ī:YŹßŹß>O#éķLњQ[½Ōi8i2¹ Xpk)śŽI…Ć„¹Įćš ŹBĆ盄ĆÄē ×i'†.o`>lŽTĖŹ/Z)[iś¢‘§ZžRųzžTĖĢW/y$L/PŲ±Ī5H—N²ĻW ęD<Æ$w—¬x•½µ“K»±)óvõ>”}…ę[ؕ˜eŽ>ļµy ®Ė™®UT;6āzäÓö%”Üi>$†@mļehbįw“Ü×~XŁi6֊¢wÜ\I÷‰§>Ō¤£.†„Ÿˆ#‚ؔߵ*18ē5ÉėšķÓb²Z3*[ ¬Ł¬w W±—Ź‚ŁYxrOSķZ:äP.›Ä1‰„ øm~µ“4궇9£ßŽĻlR[÷NŲ$!Ā Óšļ„a¶ŌÅåҬ“n$Ē=ŖįŲ£Ņ5]8k›kˆž×måł![ī öÆń]ž‰įŲćŅ“ņZņ'o1‡T98ڬbĶÆ•ķŒź\’xć>ÕčžńäQ‰īI‰ŃŠ©ĪĒpkX˜ÉjaZź±Ār×7ZœÆm) $%Ōń]$‚}C]™Uķī” 2”ć½D·$ōĻ éV«|́ nō5ÜZųcĆ:†¶.5SnņEŪŒīö•ĆGšüRń'†¼;§?GÓü›Ė–ū<{­Ÿ½_24ZŽŪĒ}8šbŽko'®zĘ“eXō /”u=r£­ų~ž)µmnÆ0Łūēō§ĢČ+ųÆVŸ@µ]fßDsĘ»H’Y¹€Ēė^…¹Åż¶žš”šE sہڜXkš ź°ķŅ[“†ē}k™ū‡m,ÖĒEuk“mÓ2ąŒƒČ¢Võ±Ęė÷×Fxį“»C1Ļ@k£²ń§o£>Ī@×2ķ<6=jn6 CĆ/-»Ļx©Ŗ†fĪ9¦Ų¦™ œ+g‹œ’½ėHȉDóżbä_j&%†H¼· ¹OLµčš¾¶°xu’ W»»Ųcå?J²cęqVW2}¢"÷,6€GJŠūO‘(Ģ čŲčņ- Ī“mH^§=ńAPBEń6ļ^žŠ1č¦ĪŻ%!$-Ė õÅZÓüR‘C"Oœ­œžų¬ęj•޳ĆŚź6—Ÿg!¾ąŹüŲÆO֓KÓŌ$¬¹l€Ģx¬Āę&‘yh·RjW÷b8ŠüˆŻ3ŲWć_ŁkóĖęµ°˜0l*ś{Uó±Ųńż#CÓµ>«$ rŃGä©VĘŽyČÆ²¼ žUŒ0;+Qqе.ā±Å|Zš®ā… å—ŗ€6ĒĘvdŠųŅŪĆ„؜Z„ÄE!¤ėG0ć3L±Õ5}}ķ>Ź/dµ‘%Hć?A_lhŠGy#ßiV¶Ś|%U~Χ;xĒåQ&>V]ńMœŹ¶óڈYā9p ćž+ē ˆz¾Æā$Ņļ­~ϧ,S}”“dƒŽx÷ĻćP>NēA„[@֗?nžćg–ä<ļķŸją5[ė­2¾Č­p1ųéīj\F‘ĪxRÖyuG\»>a—£ĒzćÖ½Ņ4;›[bx-.×+#“Éō”AØy—üC§éŗY‡(/$ˆÉ8ó8äW’é^¼ń&—&„cc<Ļ&K¢żčŌpXUļ’ Žö’GŅ­_Ä25šF ŪŽNßCĒ’:Īń„ž¶°’Ńlö#¬r'&1ՅqčwZŽ¬i6֖·/§įé/|;¦Éka9ņ$:ć§Æ­JĶlzo„dÖ¼óߛ; 5„Wšńžƒ¦Oņö®„ī GĒ’üI6®ź5ö—&’RBØųĀŹ3Ō ŚšTš_‰om-,įŁt¬G'*O­3Dzę·į«ģ[2é™'Ūŗ7R>VćšČšoĆĶÚÅõÕÓ_k²Ü°—{‚Ā";÷Ēj±2¶9xsįžŸ®ÜŽŚi±Įvį H$ ¬@ē·=źŠčŃjÉģĒnŹyČļłVr—C7+š/gš-"½Ō`KYKĆ[ó­æ Žųz-jóKūu„ņ*žé–@×ßҰ”YJęƒjń.¹ch!šxك'ÜŌžuæÆZ1ŠęūNV²   €–Ļõ¬ÄŁčōÉę²Ņķuˆ¤ū@\ÉĶ’ĆŌżkČ~&]Żh3·Ń"²Y4i!Y Ź®B9#åćė[ˆė"Óē°‚Ü[Ü­ĶŠÆšTq‘Ó&ŗO I®ų†6]:É`ŽŻŁ”VŲ3ēōü«X¶Åcē/ųE/üwya.¹g °œKqšI+/ÄRjSŖA ‚;TĄxö5b”-Ō3@™I['¦qWtŪM’WŽ}EŚ;˜AhÕ{éA.:ž³ˆ,lķ’I&{'5½¢ų²³¤Œv•Ā®Üņ•L–€©Éš–ŗœ±ŲŽŪÉ»Hr8žš+„ÖuĖ%¹ž14;ē$G¶jžr\ZŠä-%I¹šy—$®:Iķ]..5kƒg™ł5”6<ėÄSŲé„ģuKvµ™Xųå}Ķq ofė-Œr]”`äÖ³˜Ņ)jzœ‹§^Yéņ=øvCŪ# YѼEqgk X A³+H71_E'„fl£Š÷Ÿx²Öm{{m=…ŒŹCĘOÆéX#×,`ūöĀ=W\œbŖ&œŗjsvŃ“öBś+IYņ LUKu4%ü™ĢŖHg9ŖłÆ”7ŅĘ·«[hś2IŖĖuky!ĮĒ»yļҽ/Eų¤¶>ū>“ä隓Ų“WL+7ūy”C¹q‰ä’Ū:–³¬\ė^+Ö.õ Ją(}Ķņ®0ƒŅ»m#Ā>¼¶mćøĀČdrPg?×ėV×rγPń„žÓ Ńlį-ņXÓļ˜oJā.5}{TšŻ¾Ż%½™,’/÷”Ö7×C)K”gS°Ń¬,-üö@€mH$ćŚ¹ż#HƒRæµ±…ć··gÜ ˜žMTe܂_ˆZBižŌu‘fgµ‰O˜ųČLwĶvß²ēˆtß>pm–ź+Mčņci dć?EI3)O±ī>.ń]$±ŁK m»j¹~8Æ5Ōõg+tw0+Ž›²9¬\™’•ŹŽŽ N{Øē‚ʐŹwHŲ÷ׂüOųŸqāˆ‚ŅÓXŗ²šŻ”‚bsęœrAļU\ŚźlųsÄņ4%­Ü’[£ßēõÕx^‚ėBøš[³+Œ Ļ4¹Y“QįŠj©ˆLž{ē9=ėžÖ_Q¼ŌaŽVہ^*ŌlT£Ųōß E¢i$•TŒ~µļ:Mį¶³†Į»Œb™™Źźś„śµė Z,mEĘ9•Šš%“^n§4ƒb 굃č·®ŪŪ4#D…f„Č«‚sŸj÷ŸiZ¾ž÷×Y;H»±ļśU…Kń/Ć/i¾¹×õJk­VyŒ1ŚČĒŠs_ė¶vŗ-šT“khZUUE‰ćPę&{•§‡nåU†YV!&åp8ź+ĪüK«ź¶ŗßiķywFŖøäĻó¬Ū2IŸ4_YźzƒL×ŅM,ė÷Ū$ąWSąŻ._=fGHāR»T·csŅõ] «Ė”³CĢF>š=k—¹µˆ,б*üē§a\ņ•¢R ŻG»2®ß˜¦·L³Ś˜ĪŅĢzzŠ"Ź#Ōõ»ø †®[vnŒķ5¹į½wH =¶©$k ˜†0:õ5Ńg)†±q ĀÓĀøŚAĮ„š·‰!ÓlÓķSłņ†20oBsŠoČĢöXю#üóOÖ5)%Iå]‚ćabzPWµ9Ķ/PøJ÷‘IYĪ ČҽWįö©kup©ij’ønC„B–š”źž³įło®-¤ó$W/&ŽüoĮ©hicu iŒ./–=ŒŪĪAé‘[Ā] O”äžšŗ·<š²£K)2;œ“žŃ=¹®āæģmļŪK²ū,ʟt¶qøV…ßSĖ4=VžŽķX·ģĖoJö‰Æķę¶Hautźt5œČ‘VöóģpüŲŽĘ°ģoÕfš{ÉÉ.åŽ+3$“7’ö)ŒŹ‘§’qŽ:Uø5h¬ēŠh“Ķe<~TČŌ McR€Ė3n ¹B ~•ø¶6±Ā©*¼ņēi\sA¤eќN·įū;›Yīyį¼ˆŠ”źkĪōŲMŗyęaū¶ĻjRģUĪśÖńesp?w±žz֝æˆlķ‹„ŗI!åx‚kŒ–ęe哺½ŅĒ ^ ńÜg ®Ėū:2ÓČŗ…v—RTdńĒ4™“|7±ÕcŸQĀå¾nF9ė^Ń«źŪGgK.ܶĶõ¬äõ4ög–x–Īö=_s;"ØŚŁWŸ\\™®$†ęį– p23UCV ĶņÅŹń©<7 Ó¶“Į/šDrŚ9Īļz”1$rÖĪ3ėŠå®¤³&Õė•ĘqéUÅäOgw=Ä©oLæˆžŸJķŪĆ·pXH+øV$dć×ė”Fć0¦KŻRń-ŒjS 0ĮĄļ]ē…¼1­¼ā+yM²6HķŠ}*½˜Ņ;ɾŃø³{³rTœ6H }McÜNšE±øšår­éOفĀEā€×QÉohdW} 1]gˆm€ÓÅūŪC4ŹFߗ…cśzÕrįŗĶÖ£w<Ļ w8Į\t5—`ĘO7ĖŁ9ŻŽµ/Mšf†p·N]/ ĪN1_Sü<…4­ö3›DG‹¶ œņFž„y¢Ž5ÜV1–Š8+‚¾={W•źz}ģׄ"iŸqĘŻ£ś=3_ŌOüļūhAąÆų“ö[ńöø—:^µ—Ńfø~RąJĆ ‚=Ö†ĪŹjśÖmĶ“¶ņĶą<ŖÅƒōöÆ;ŌtA4×ÖŽQPŖdō®sž¢>!ųŁąw<šŌD¶ņ“mNCŽ„×āŸķÅš6óǾŌīJMØ\D¬$‘ŌcåŚŅ®S‘³ł~דKEŌo4=vŽK;ŪGŁ *98éĒJēŗ:9A—±+ÜVńÜå«.…6Éū½Ūļw¢9ß’UĢYϵlss‚āø–YB¬ø :-Ic—vf.Aµ)ltÓ}m(ļ$”¶ē#J‘£i’i)ĮŽOj‹čt§r²š,;Į†A•Æɒ#©ē>”ś4Łö×ģ=ūEß|ųƤߟSÉuįĶZāyĒ›µ­q÷\˜µżŚžĻß4ļiÕ£ÕÜŲjVÉę¾żŽ\Ų~¹ó¬§ ū¶Ń”8”m'=iń]5Ž/’Ž;©ąä?Ē0ü‰ĮZ#?Œ?ų.Wģ]uš›ć ~Š> Óų†ą_†‰6}•ˆĢ”±Ęwa½²kņ×į7Œcń‡–Ä4Wśż³fMœ°ž[Óµx8ŚQqó;a±źjg§Ģ³1ózGŪę'€iž›Åiūėź!RĄĄ«Ōē_1R6wF­Ć]™F3w;dā£Õķ!’Īܤ °¦w‚ķźOå^ŽÆ-¬eR÷1ü7¬±+ ŽG<śW·ģil-ÉżÜtÆøĀŹčłźōĖ‘ĘU#܄dō"“—O`ė1øeĄĘŽĀ½(½2]ާJ¶ū*NžhE`Čźk”»:„·ādEg¦8«ę%Hė­4ū?¶A5ŲīTķSéōÆ^³ž'Køø—CżŃÓ'AĘ_kŚn¢fŠA2ĮēŒūVF†ö¶w\”Ū€ĘšmO¶“[—åBF~•‹µÓ&rōēŅ·0ęÖē?­Ś[ća*‘†ĪyŻŌ;”r]UNr~š øĖ”…§Jž‘īFµvĶguk§\ĶŽfDägØ«‚+™6¹m¦µŚeԚ-A2R=™Ē¾kŪ~źæń)±®Rę »9'ŽōKC;üŗVœļ=Ó"4{KcéŌ׀ Ük7ŃŚ°”?:ō<ōĻ­a)j\V–gGģ¶~~ĘwvBøĻø©i:\^8›9EmĖŒÖ”äDā‰į‘ÆīćŠ;˜œō¬¦Ö.!Õ&³–-‘޺Ļ%f_ŗŽ6Ł,Ä¢Žõē?­Üł,ņD¹Œ×`žX„{‡fC–žU*#ęDž{ĖŁ ŗĀĀX®9Q]Ā\µ’l(Ys†öŖŒ™ź^Ö-žĖ[ģƒęükńä0k¶io Ńi÷PÅŠ|Ädd~‡ó«Žā8ū$ŃōĖńf·Ź×lø˜įˆōŖ&Ńoe‘nUĘ%OOjŲ¤®M„_ĻįŪTe·YŻFį¼uśÕ“ØĮÆM,ÓyQåł ķYL|§µ|9Ó,pÓ@ŅMŸ—®*·lžŃ©É+HT€›5›•…$|Ļāk¹×Qø“ >͜FGP~µ„¤C,˜† ‚8éG2v=ŽŲjöī®WĢŚ 3UįƟmä„MŠHĪ1ƒLøĖ¹BŅķ>Ń'Ś#ˆÄ[ “Ö“D“Gk9ˆ8„ē‘Č ©DÉŅ®ĶÜr8‘¤Vź#é]޳ 7āģ1nO9Å&ģgmltÖķnžŃÜ3;|”qņąÕmuōõ•mŹl[8õ„ø’¾…85Co–ī¬cŚyPIü+At[ckmsö‡Ėäć®3SČj£ÜäßƐŽė8IĖJ\Yš8ō«Š§Ó’³Ö=n6B dÆOz“‹4mnk^_=ŹåUxĄćżšć…ŚĒ9S/œƒŽµ“4Lé4JźŹk›är’”gØČØ/µéX²”I Ÿ›Ž”ćøŚ*[Į+\$ų-·#šģķµ8Ö) 8Ćv­ŒZ,ŁŚ+I}{s|‘ĀŲ1ĘƁŠWUį=9~Üu!ķ Œ°ā‚ąsž%K-W[{H-c¶Dl’ƒĮ®ŽĒDŃ4’>kwxŹ“žIć”§sB•¦ ›¼åRvvćõ©5]LŽšUŚr1Ž“vž™Ø›)&ņÕrŁéė\W‰žņó^Ó餂L“hpŒ‘Y9šĘ(½ŖZY^^Ŗó­OEnōgézv˜#·ˆG2¶'øķOŚ QC“ŪłT”ÜÄz×IoŃp£jŠŃIō8i®uūoēŠŹ@Cd¼cJö­"É䱚 ‰HdpGAžE';œÕ—„,tÉ'Ō4”$ža8Ė“ō f²ģf»7÷bS"ÓčåC¹ŃEįųn sL>lrHé^y¬ųFīĻĒ-©Cz²é芼c ĒØžT¹‘J ¾§,–všĄYˆ%Ow4hz\æiE½¼…œłč3Rę5Ŗń8ÓnģZŹīHĢ|.£b¾Ōmå‹Rž  cgŻØ,շѧhg¼wi6Ö—N¹±Šń"ŠDK–Č۟˜Ö‘‘œĪÖ=. ®Ä(…ś·r w«6WV֚ļŒn›±†=EY8ļj÷öŗ¶”46‚Kl“?$c=æųW¦č67·Öö×»“cõĒ5”ŠŠ9Ļ[%„ģ,RцĖ•ēwškȐ½“Ø9㨬äģl?±¾Ÿb×KnĢ$ø’"®Åo<¶K’įŸžGZÉŹę©YhE§ųfįŚHȉ_#5ŻĄ«mkó18<Šjädj^ ³Ó5øt‹¤?h]żśóŲ׌xžDń'‹aÕü—Ø “1 ·#ųG…jŒŁź¢M9“›[HŲøŻĘ$`Šć5)üč9!TąŒšŽęšWŠ‘4Ķįoć•I[p Ę;פéiLMpm8ē«UØŚxv+MXÄö‰<ĮwF­Ó=y…Ö„ ŗž£/•dmß.Ø+˜āµ]]v޾›+Ėj­„ pæZĄūs˜ŅYĄfb: A-Ķ•ÖDĮķcbצ8ŖšMÅÅÓEom-¾[å ‰.†Ķ߆—ū>IįˆyjT:÷oĆš¬‰¼g4>X$·†7ČfōÅ1%­Ž’V¹Ó®4 sf±¬e. Ž `‚ öā©ėzž—āj¶š{Fš¢"4-³8 tĻä -"?h:†­īµ.}j\Čå‰Ź{ĻÓĀa¹…^b¶Ø­€¬knm‹M$SÉao$C,Ą Vµ¬ļ©5܏!qÜ;G=‡LҌ¬3jÓŗŗ&«eolmŒ¬Å±'<Ššo}®÷ÄZ¾­:—’ās#c§į["%+hZ[‘%œBæpüŁ5ÆØG/Ų# Š»†ģŽĀ“Œ¬ŒŽ O³ pBQIÆ[š£Ak=¼r™ <ƒvќ –Ävš®»?‡|żBĶā­å©¹¾½*=7Åßk¹øæ¼ø¶°½1±żēR4ŗā1}Ŗė–RĖhć]ŪՆ2qڰ¼G„ł—óN‘nĻĖĒ$Š;$: =“,Øw…,ŁōŖ6š÷[×xÕp;Ÿz{…¦hš¤6_ŚEtÆ FG\«ńü«©ų•ąÆ čś¾›ā Éģb–Ż&ģ8ąćژo&³<1ÜEļö7qżkĻō&Ó<1y{sgoŹūĆīŻ»=3@Ür馕ó>åbpŻę½3E‹FF–±(db]Ąźi Šń“śŽśSI,W2ź©Ćńż+\¼ÓŁō»ˆK̊ Ē>“”±*¼ł½v3zzÖŻ³%¶ž²Ż»HYž_j‰öƒŪĖ…„ųecÕ~••=ŻŚĻö{ ī,˚„+ņ¤77hŗŠŸ'iÜ©÷kÅ>9м-5¤2Ś6”'˜<ŲŌćbö$ē=«E!Ŗg–Ū|@—Pń5̶šˆ-då3ņLÖ'‰ÖņļT„RwćŹ@U>æJ¢¬r÷wÖwi ™’,Ėž h¦¦#3ĀŪšhhNV:"’K©ČīASž™u­Ź:˜ĆĀß*:Ö2Z3}źńŚåęSœūµ%¼ŗŖJGąŒV·Ņ…n„.ē«ė:ž£įo¢.Ÿ¼ĢTĢųł”ōśk‹ƒU×uł-.$L4Dņzb‘Ŗw=RŃ®Æ,Ÿg 97Fjókm:RžMä+Ā‚Yœ{ B’ŠēēiÖįŠFé; +©Š’’xXo™ūõÅ%ł Ģńœ±O$÷„ø°†ūtė•SÜšE09oxbß[±¹ø¶…XÆ1©ĒŽ>Ÿ­|Æāķ¬%uø·I.0DŪ§Ž‚¢ģĻ"ÓonžŚmMŖAjķĀćÆ&ŗ=/AŌu?¶-¤ī`@Nęś“œzó#Ųžhņ¦£jn™‘U²Ńœ×#ó«^&e‡ĘN-§k9X¤`üŸŅ²ölw)Ė£O‹u.”5¢ĀÓŒå>lé^Cž!Ō.¾Ópßgv-ę’ųtØ.2°ĖW‹Jøøš#°Ź@-“‚{Wį_ėŚl¦)uę7tG*¾”/#ŃīüM<KwFo1pCw5©įĖ;;›yn5+XR°° ĪM2uü?i> ¶–0™B•ŒąŽēå¾,‡Vōńum3r’į@„žÆ­iždž(šfÅmźŽĒÜW›xÆķĆWÓģ£Ņ$tpH–5įG\ō'؁tĖ‹››Ė{„‚5ŠFĮqźx޵£ŚĀ\IqÜFG ĻN(1eĻ xŖĒKŸM±Õ šD”ˆœ”žŽ+Ł"šōÜhń™-m·³Źūūõ¦+œļÄč—ĘĻL]Bkņ$s&ݤ>9’õ× x+ĆZ}Ž€Œ;[•~S÷†:jFŠzŃZ_Ź·[ǵ6Ķ·f¼ļĒZdĮ'ˆ.Ģ1iŖ§fO_§å@łĪ7Ą¾*µ‡XšI,cŖ•VcĄ'”JÖÖüį]{P[Ū„‰%ĄįūC½Lb…Ķ­Ī'ÄŽš’Š-†tYlµXZI mHśžF¾KńæĄ­CĆZ”·7ŗé½šPZŻ€ …OFŖĀęgKį=SVšüK§ŲŪ=ć%‰DUėcœGS_%Z.°³ÉŖĻqäßyžr3dł-Ō®§4 ĒŠŽńŸˆ¼P·‰4źRŌ6p_šÆcŠüK§źńĒc>§möˆĮY6|“ī=éIiaņ2 éķšźX·³Č «c‚Żæ„akž)»ųp–m}ͼŽĀ(Ź|„Ļ~:˜«hĒČĻųĆ}sń£ÅŚmę˜é§i6–q[…\r9l·×½uß~ź¾ ń:¦©ž¹;€2~ōH ¾*ĖPŅĒ[ń7R^½Ż½ŁU`Di·Ū>ā¾nŃoüGÕ܋©ÜHĻ”łÜ¢€åčŽøY?µ.õ»…'Ģ!‰!~•ŲųkSÕõ—Ó£6un2 ¤Šr#ĶŠ”¶ŸÅŠi¶}#Źä»€ج\u"P;»ŸˆZV©a¤]¶3Z3ŪkŚö™ ųwNd¶ū8ūC9łCƒŒ`÷®ƒĆµ ė:“ŗDv×ńC&ɀĪŲŲ`ąö5ŗV-E#Ėm“M;Ę*Ō¼p²LšŌ¦āėk…‰Ē€Wgy-µŽūy£G~QKž½1Łaā«‘£Z=Ō1ĘģäŖøä)öż+˜šś^\“ĢŪäb[r*e+bhj¾$“Ņ]‡˜­,€®ē>õ£ųŠś[Ä3;¤[>źq¹³ŌšĶɕcÕmµ'}"īīkØįüĒ{c#Š ó››mcYŽX̓ʙ1Ø8Įö¦“ÜĘkSnmn[Xµ ˆ^ßĻŽ*d9Ą}ėĢžxļ^\·‹U×V{yä%®zt«“²3²ŲõMcS³¼Ö¼CŖėNŅłĢ²ÉÉ>ütļÅršf£įūmJ Y|ÉU܎9ŁŽ³Zī\`wŅxi|it4ķ6ŽĪĪ'l#ģłH©¬ŸųUńGŖŽĘ0Łl0Åk”µ}4éŚ\i¦Z¼ :tą ~5Ļjśžœ¼„›;œš>”Ä×Aמ5mOÚI°WŠHĻŹ"P8õ5č¾ÓÓWš|Śö«v‹q32‹dN[ NĘRV3bšÄZ„ķŠN±: wF'\#ėžyÆńŪÜ’ĀK©érZŁEo-Ąś*HåģZsØŪ[¤o+=?:ś3A†ļFµŗk…XųŪ–ž;PѲ<ÆRńXmRā)ģę®s•ąÜėm¼EįIō{é-K,¾YņјŅéÖ²ä9ŁāŽ—Rń_‰ļ-<™' Ų­œ)®¾x&Ó5‰&%×(<ßŌ §øėķ_Qoźz ާō÷NTŪ²`,}³łW©ü4šn•į[ {Ȭb‹QøB¬čp«žßZ†ŗ“K­KtšK.˜é"#6rp2+Ę®XŲ rŌ+Ł÷*i×*.˜M„@cŁŖŚ÷Ųōż8$ˆ“K.ā8Į^zW$·*Ē=£É§Ø†PŖn@ē'G„o]<¬7ĀąėÓéU­Ąą5ģ^\ˆ-I} >µ¹¦xVf)q™€ŗzŽ2±›[\¼šŅŽhr.Óé\ʖ—÷·٬„Pū‡>•²Ō‹õ x:Ö].k[ėÖ. Ž=ϵz&cg ¬v„K*ēq^Iü+Ugξ9ŠÖUmuw÷²¶b9č±$w r†+žZŽD#Štµļ@Š2šbš¬IĘł5ŠŽx* ³ĮŃ\\?-0'-õĻ„ˆ ¾šÅœO2źEV$&+֖-tW°†ōŚ\†(3ĮŸZ—ĘnķŁ$üDš¾£ ĶŗX‡š ŌňÜ;ž•ę~Ņ ‹Vøŗ× éd7mÄXgŸåG!;­:ž(5ūwŚg8‡„n\5Åõś›x Fē€O­CVŠ ‹ķ'PkE¶Ž3‘’·½géźž»GŒ¼OžĒ<×8s±ń‹ėp-“*©&Ą‡ 5}ŅĖĀ·w­Ā¶“,r ®Iµ¼]†rz—Ä-#mѶ…ž6@c`żµ|į©\č7zĄ»™6¼’|Ürr{֞Ši³éxGįżĪ†ņ+Ak~™m²ØłÜśU kEŅ“G[ßž6橿*%2ŌՅķ¼ėf#i"ܣ䚬‰bI<ʌ§pŚz~4“)³ÆŃą’GĘIŗyerO½-ę‘ØĢˆ' a÷€ŪÅŹGyéØ|¹Ņ3•sĮ5‘k®jÄnK-ÄĮņH<ā“aŹgk^!˜DYŖIŻĘßž½p7Vw—ļyČ$zŹśŠögq„Xyś`†9¤7JÅGŻkkIŅ&³Ā»4ŁA’GĢióic#§†į,ā<“cžWęüė;QÖą»¶{qåķ,väņ=Ŗ éhųuysöźs­­Ŗ‚–čŖržųÆAń?‡q¹«hgė?ęø½¹¾ŽŅrĪX O”ü«‚Õ.äÓ{XNė€<„L®cQu8›½ZFHķ¢†ę{ÜīR­ņk­Ńdæ0E%ämĘČĒ%sŲÖrFMt>›_’&ØiČĮÉéS–‚Ž u…ĘyĻ zWI1w(Ü2»IēŒš~éėVģŲKn'F] ķĘ üč:éČŪÓnāY‘Ž3꩹‘ČśWµü3ų“«ü0ń߇~%ųc[—LדĒYmÕOĪ$Vżh;©Jēś=~Å“‡ūX~͟~/č÷¶7ś“ŁĒi¬œ0K”NGnsōW¹jćl|²!$ūŠĘJĢuamńւš••×’˜Šd;€ą:ü©ųÕą¤Ō4ėČ Ė,ĀfŠāŲąt&‘ēŹ=ę[öäų«ųcÅÖś¦š4ūID’\j/šīĻ9ė_š÷vøóģX©įϵm–q3–ß|Äš t%·ŽžĘ«¤±«²īRAĘ3É­”“0pбo'ī§ł~~p¬)m·¬%ˆ Ä3œŌŹEĒp‰pR5f•@īIżi&ŽQ*˜¦qŹćŠ“¦°³Ķ+ϵ†×'(ĄŁÕ¬„D†6–F#qb¶Š7ŒĶU»m\š6¬ąe•sĪÜwÆź›ž ūUiž+ųcą][X'Ä6ˆškC1;į*ĄĒ'> sõ4¦“:#Tž„žų x‹Ć¶7r·h„ßƁ€Ä{śŪ{Ė¤žöeņŌžqĆ'’Ŗ¼źń4Œ®|ŻūažĪzgķAū;xŪįĢ­k>¹ œŗŽ€ĻoŽ…bc> žŽäöÆóć×|®| ųåwį½VMc•ā‘¶īõ˜Ę xxŠz“e”ōF§w›[[Ø6Ü,Č$ŒÆoÆā méz‘ŗŽÜ™ķ ĆÖ¾[“;.u7“ʓʱ¢®ąuśÓ^[“’ mšč0<0Ō°õjÓ*ŁŪ$R”²XŃKcެy5ļ~dŌ-≋Ļ3ü„ß„}žU‰ē‰įbĶżwJ—LqopY½×ŲÕo¶¦ČÄ Lƒ®zWŃSg“5©µ§¹øW-”#±ײŃ^õ.„”Ą<ńĻzčP"4Éō/ŻÅ¬[Ż_L¾HŖ>æ–kėmĀvwž×,MœSG=£"–ą†ĘG?QRŅ:U6“>&Ņt ÕÖn¬u7’Ę&tmŁ*Ć<`ćž+GSŌōhµ(4ØʱœƒÜŒõŖPG·­Ö™¢čö·Šū„ŠB “Ēš÷¬Ū=Mļ.®aŗ”įIē<ō«Œ¬MƓŽkīģłĒ8’>äb¾¬±æŅ5=%Ō,vݦV cjØ=Å9L֚8]r-2ņåZKKkXŸ)‘ Ē\μ‚×ĮW¶ź:¤w[”IµLq¹ąć±¬%PÓŁ»V•ćmcĀךB[Ąš“Ė'”ß/ÜČ9'õ­Ļ]^ßZ,ŃŖĆ6īqéYī)@šŻQŸķ™UšŁsų×Uiyc-šÄ‘ u,'ŚŖ˜ÉXŃ“Ōä³ĢźÆżŠ1€j5õ¹”ĘQWēéÖ¶Ū›i|’ą$[I~W­A?‰„ƒKŽĆ-.Ìą1¦Šłŗ¦©gÄe¦^I²µĶ~Žūɵ‰!óīąŌIΉsulÓØ;W†ĶtZ‹Æė2źwžMĶŻ¬C;ĮČ÷Ÿ‘¢%“ŌįŠä¦Ōääv£Cń4‘ė «lVŪ'bg©śõ­lRBųŽĒP’„CŌü>ū5Ó|ņdb6Ēņė[:‡‰-ķ tžkāqϵ&"¬g5¤W³éšŻ„Óéņ£†m¼ —ŠŠõżcÄz%׆lZ6€ź(Ķö‚_“ÓośÖi÷ón§wkqØĶ#łR8#i+³>%ŗ—FšĖMh ŗ”bƒœwÅD9”ģ¼7"źā—#MÜīĻ­?ā4 Øčŗ<60Äf³—īƒ‚ėžsZŲĶČį$ŃŁŅŻ„˵€.¬ŲǵrłXĢŅ(óQN2¼ćėA‹‰=µń½²kI"XÜeU—ø¬ÕßfŹ£;‡V#­Lö.1±×h¶2_n r7ŽqžO¶+Ž4 ķtčŅõ<˜ŗsĘļzÉ;ĘGei¦[$@ź£Ž:šó\XŻ^„…ÄkęDܜr kĢR.ˬ¦Ÿ“$”r¼`×O¦ü@›Rž×N‘G“³hÜ~é”H™$Pń‡†¢Ō=MzĘUš§lV8‚Ł,‰RK޼ō5DŹŻ /iV°jŗ†ŖÖĘVi<†¹’‰Ń@H›L{˜›™¼·ÉQĻź8”ŹyżģPĢ Q—ĄmŁż+¼ˆÉuk ±GVćMÉXé“Č·#J²+Ź9Ļ5Ļź¾'žĶü«§2.pŖ9Å9n•Ž{PÖ좟HøX§ł HTöO>·ā;Ƀ Į<…ōéŲ×fuiVYR“÷nFŃėXŹDdq-ć/']²yķŌ+V<ŽśÕŽ|EŌ­|I ŒšmĶĢ–pmÄNüėXÉXŚ1¹ę:®‰y¶+¦œXĆø¬8ōØŚā3É 0MI„ŗ©fšĄ‰¬±M“õć5>£«łP.ÅSƒŒžµjfR ·‰õ9­®-˜«Śš2G zW-®-ķ¤žš”ˆ`|܃TŖŹnCāBkŲCdˆ2½3Ž•įzĻڵŗŽŽ0į×°kUPitGµi"oÜC¢[2¢!^ĢśU^¾£äi9kqf<øĪÜ ;’Z“N^Ę“å½ŪMq@«ß9Ż^ļį6KŌsøpB•‘Ÿj ŁŽ-®4Č M)ܜ‚@÷āøķ3TÕUāQsŽĒiīec›ÖuˆŽ(ÕE¦Ŗ‘ZB?v«Żt–?*ź4æ Ā3¢O#[Āf‘’Յ §}ĆėN4śš\ņ¹īn[UžŽH¤GݹK1^•¤5¼ŠNpČĮ0j½˜Ī+Q¾3cFmł\¶y#Šćo¬n§d{ ·2€z%“ł0ŹÜœv5ŁZjPFŃŚ¼ Ļ€”ń÷j@ęü@f[Ńqd|ĄŠģü2ŖļnŖŹŅķą•Į –nlī^ł”ŸÜ†ü«FuŠ[{{"6(ĆĒ<Š!׎ZFdHā·n3ėUļaŃm x#D1°ČĄĘé@Ī.h”f9ĄžõrŠ*µ×+Ļ·jN Ž’ĪŻķę%,®[„qéÉØČš«:y„dąŽ¹¤£bœD·ÓeK^e”p׎¹M9īµ-FęŅxĢ2GƒøļłV‘‰Z`ÄŅą¼›F3ķ^‡£¦ˆņŪ…‚ći9¤ø-O6’ōÅ;I*üŻKśW¤ZYÄtQr„Ėę.HŌPjyö‹q=Œ²ErĻ4m1wU«·Ö4×!” 3S$%nŅ[\47Ź“=æ ō+GƒI’i inf!LŸŻśÖnÅs3‡ŸĆŹ×FņŽäLŖ3Ś¹~K4Q[€ņ¢ä.>÷Ö­D‰;d6ó46÷ U&` UćjņźūČ c I8lēz³sérņÜG$’œ0Č=@Æ\°S)' ^™ąŠŲ¢Ė^”oŌÖwiȧäRqǽq¾#i Õ#3BžqėYIšCrMOÄV‘iélŽnģg$×'”ß4󖻐Ćw<ā Ōģ“»ŪP—ai­+ž k7¤:喭”u*„m „9õĄƒĘv¾Lp „‚Œ3œšņ{;kƒ©ąZ;ĀNKśbeģæf³1(#pĮö¬?x~Ī-@ź×¤V*®G øŖŠŌVčkhś-ķžµØ_ŚkSĀ®¤¤bASééŌÖOˆt-R=SO pę fpß(žŗŃģ2†„ØX,wQĘļ4±0ņøł±ŪóŚųGĘSčö6ŗMĢeķ‘‹ĘG\_ČV&ŠŸs;ĘZäŗ­öčbU Žy…Ś,tyduß Aōؘ{3*/Ik½Ōf}ĄķFčµŌųjåÆÜĶ2”‡ŲżÓS7¢±Ųé÷sŖMb¶÷BĘ"7H‰·į^o'‰µ ķcW¶Æi r“p£sŒw­LŹö®®ÆgÕÕ^ķ‡ß=[üóQŪhOy8‘X'ĶĮnōÖC`²“ÖāHVhŸµBöYŅņŽ$·Y—v“÷G­1ö‘ˆ¤‰ćŪŠę¤Ņ.®£–nŠ»gcœÓę`i<~"æÖn®R)”°…@]ƞ;’1Åy’Œ®ĘhIrĄ†$t5#±—¤ėš*x&ļKµ°ūJęAę;šF:b“LоÕåÅ#ĖŲÉ,y&³r5P(xĖAo ŽA#$‘,€©ä3żiŗ5Ž©o§‹»ie޹ē”ć!8v6”ń 2F³,®ÕF+“ń q]]4Å]ŖÉäe]SÅS^ŚC„Ml‰ iåq“ø{Öæ„śÅ.n$‹t}Uv󷎘ć×~%¼–{V1µŖ«’Ŗxó{ūåŗĆAņøpØ.1;µht± ć‰.CŖ£(ēµ”ø“ÕīķEķŽŲdŽŸ)ģh4±čWśŁvµŠ ”’…@Ī+Ÿ¹šŻŻĻöZDD1.DØWśPg(ž©įĶßKÓ$¼¹h£†'1럄yÅoßźŚ¼VÖr*i1GņąsæÖ‚,y4ŚóŚ}”L‡BF+—›P¹Ó\ČģdlwčŌĻ‚YžÖ…UĀŹrLķbÖ¦Ņ-.bˆŖHĄ|Ǒց•,¼c©6·iy,®ŪX!%»zÖ§Æ-$ń ŌöˆŸd’5hˆbqČ4X·#‰k‹ĘHĢk'”­ŹīźkÓ“¤K-AøQ…ōśŅJÄ6YæÓÖ"½xъ mé\Z^ZÜĻs…ū żźb;oܦŸxśƒķB±±8$zŽā¼ÄŚVƬų«ZÖ%ŅKÉwČ3Ą²Žƒ½i£“ųOį„Õ|KöYˆHžįČĪÜsšö ½Iˆ]ƒn˜PIsÉ5 ¼M,qĪŠ‘ [ƒéĻ5Ÿ¦Įuk“»ńŠ҆ĢŽ‡J½óŁzcŒsŪZĄ#·ŚLŹß­c"bké¾!ÓmÆīōM$ąŸrc'ž?Jé#›AŌo<ū!n€}ćČĶI¬]‹ś­ģré÷:|ˆ³™1’Ć‘Š<-gāGi;gĪȳ€³@łĶŻ[Uū=¾éwŖŪe˜(ī:š+Ģn|A„ŽæŚc,ĢAĮ#͹\ä/_…UŒ"–ÉÉō®–ŹXlķD)IŹN3Ķ4“Ģ^Ż“,Oš{É×ō5bīܬ’fœ;ş”ځZĒŚ"~ŹĘŻSœØä׍x›ĮŅk6ójÆĪĒ'pąŸZeØ3ęx“;ˆüQ{i-…Ųš HŹv°źvöÆSŅn5_[Üźś5ŗ¾ŗ¹ū: ‘“ƒ‘ųӑ\‡/ąj®µŠž ˆ Vi‚ĪĄä~µróÄ6ń^Ū¤iö©³½ß²ŸCRĘ£csRŌ“ŻcƉŖŻ6i£`ńnĪ=3šó{ 7R°ņ–Qö‹ucf6ZĪQEź¶Ä@ә#€€Xū{Rųņ+½Fźāią†ĄE•~ńqõ¬ĘpÖ5½ŚĄģ`·8ÜcA€1čMrV?ō›ĶAōUµ™Ębb0™śŠm3ŸæńŁ.žI H3Œc9«š²m$Ń$Ó“ż>ŽGĶĻ ;”c ‘åVz•ö³ćż: jõķą‚T6ˆX‘&G,{q“^żāI›ģśći%īī”G[FĻR= Õr˜Ÿ9ųcĆ·ŽdŠóÄ ¶&é3p¤ņ=1ėŽ•Ų\ZiZv“«ŪŽ“¾yŒ‚ «{ÕK°ŽÚ~”«&©uh“$eņ÷’ĖōÆ¢,4«ų<1¢Œø2mE^8ėY‰“yNJāZ½ĒÉ ŽĆ°“œzdW3į’j¶śs„ŻĢ«2ĘUNÜ ßjq:5ī­x÷6W÷w·—ŅŹ%‘·nÜqŲqҽŹļĀž&Kk3Ø# äå>¤JN&ŃHāļSŅüe£\JĖä¤fß7˹G`|Ž+Äōkķī/Zöxį³wc©Ė{éIK”m©j¶–ś:Z•P ˜·øM[żų:&i„bĪ~QMHUŅōĻķ $‚[A=ħcœšé#Šģ| ØHu=@X„ø>PĮąėéOM„ŃęĆā¾”ŗĮ– ‰®4į>Ą^2 Ø<’+Ü~ ų6h–ך›yģü”4@/(¤p~¼ŃŹ€ń«»æ|<š-īgb÷šSøO>HžU$ōö¬æ M®Ė¦}b"7īĪM;ģhčZ-Ž™.±~–€jl@Ls’;’JÜŅōhmt=Nīż§·Ō®¦ł# :–õķAœö8Ż/P—J{øĢŒ‘«ą}üW5ć«›Ķf8RÄ\ZÄĄcę÷4 šÅ­š}ŪNgÉn2;g#…cŚI}e"y2 (Ē=sYĖR£#śŃę”ÜĖO~»¤©‘Wż‚ Ø^c2üOwØ^ƒd­"BGĢ ōĒ­dŚź0éÖSEo!KŠ›AĶn)#©š™µ×-.4ū‹ˆŚ÷a-åœwā³.<;ƒ§ƒR]:{¤RR/—ī“Ņ“#é5]RŹćL·ŌõځbyūĒsė\6“§ź’]O­[aʟ0īoŗ£¾ bmNŗŽµX'6¢{˜®·mFŒįB’3_[čŗn¹h‰§†ĖD.ٱ†żsNśƒ] Ö|āÕo™$ ,Ūó‚ zēaš6·ŖIkk8G°~¤©lkNtIķV_”kX-ō•Ž6T Ā·Ö½=4k-+D±Óm×ģ·hŲ“sūöŖ$ū33ƚrXŻi–ŅĪ.‚Ąȃå\óŒ÷"¼ ĶzLŅŽ9Ņāå.øĘ} ©¹‘Įß_Į£>$Ė5ćŸa/=Į®×[ŌµG±µÕ­Zę+0щ ü{óZB]ŽwÅŽ0šāé·°i‹i©źL]ņ²œc¶+LŃŲŪX¹¶1+’©Ą&¬G”j¾:4v÷z[Kę„6ąÄr{ę²ģü/­ÜĆs«˜äAR2Ųķšbp¹É3WøÖć’KI¢TqŪĆb½a“ŻZēJG’ęņ(?xģ‡nćéJÄN6ÕĶ–Æi½¢ß…˜±6qŸZņŻi„ó^h‰8*>čĶ$‚:=Lk›Č&.ČŁ^GjĄń¶ö_h„¢(nĻjfŃÜē哞Śh‡i_TµŪéŚ/Ł# x§ĪnųĘ DŹ™ŗśbŪ­³H B§ęl}śī-“Ū‹hę†4sœgv[ńö¬ˆJś՞·…§ kHƒŽ3™øŚk–ńN®šŻ„na;…ž8 A“v8-+Į"yĘÆt CcĪ7“]†4ėŖ4č..#c’¤śP6ģ{'…4Xķ^?“!µHÜē­t¾,דԼk1qc60NxļøPdęq>"Ń4­OmN+ß>śUŻ…ū{ÖOƒüSw7Ś ŗŹ,ŌķŻŽ¾µ* '©sĘ©Õž'Mš9>l(b<÷¬»?$ņ³]5¼“.n OaUĶ”^Ń"K½?EšģöPĶšÄl®ę3(śóڼćÅś“K!ŗ’B÷džłĪ{šL^ŪM }ę}źÅČĮšźõ+kčĖ5ћg ģMb×B\ĪvŪJŽŌL.ĢgSėY··p‡Ń YŪČč})œŅŃģōū9’V™¤“v½&Õ”h BČ®GAW—ĪŽÄlķt#•‹Į€®“ƶŠ[*ESĄnlL¤`Ó4ėbņJŒ{w€X jŹń©„hvsYn1\²–•šyõ­£+’»/ {™Æµ.Mņ3 $gÖ²ęÓoŁä°M$jē÷kŸ˜gÄŃīžńŌZ™qé‚X”!?ÄHĘ~µÕh·±ź 5½Ččq°µ'¦¢:K›)÷»\EhŹ„Æ™Įvģ½sÖņe¤2nÜFH”Œ”¬gkē³šŻ$‰ż@ŹcŠõä÷žÜļ*؃‘ėNR°F'+©Ém¦ŗ„…䙘 €NGµz…-£Žś4ŗ\6ŠÅņ­sČt#ńF­ż‘­%„øsk#įŒ“ž™Ėx”ļōČU”­ŌĢ˜CĀCļJ1ШùĪųWTÕ§»–XEÄ,rJ’xĒˆ?į4»ˆI*ŻM „y˜Ü3Ōs] &Š ėXļ"-ŃFŻ­ŪéZńx&F1Iq7”N_ęlŌĪ#p¶§«iŗ šŲ@Ń\L®HŚ1Ō× Ś–·eŖ]DnĶŅ‚Ũīū Īė« ­‹¦N€‘QJšEĀ}˜Ēąætp1ļA:]E‚(–ę+­‡8*{qU”2¬–ŃŖŪˆ¾UŹńČzÖ1Z ēĢ:ę…}%ŻåĆŖĶ(oŻ•9,1ßń®Y¬š å¢˜ć†®˜Åīe2ķžžÓ\ ®»ŁHŪŽ§ŚŗČķæsIĖ">Ā s“ÅjrĻrŻŻŒń@Œˆč„Ą/5%߆§¼Ó§kÉ¾ĪŽ¤.N7„4‡w9ŸųY5{=ŹGm Ų,’Ŗ¾†Ö2œĻ÷–1¼R¹ÜūČ;GµW#äŌÕucŅÜÜ ÉYœ÷ÆbmBŠŚ¼ė<@ćił›ÜŌÕŲśn{rįe¼¼GB*›ØypŒbŗĪ•‡Im£DŽf2ō„ ądŒńA¼QiK²ēm=Guš,’c&&ˆcwĖž½¹¦‘ŪN'ō‡’ ż·ōŸƒ_5?ŁÓĒ:ūŁų[Å ‹ajčÆ c1žŪz_Ųn³gäKr%aę!ūߎSČ?B?MXõ6–ŗ³Īoķ – »7!}kāĻ^†x<õ…`nb—hĮfģOéX“‰ųõūQüҾ x ÄŠÜGk6±³«;ćĶš@õ~•üÆųĖĀ·Žń&»¢źŗyµ»Šį̘?+į*=Ą5“C DäÕ£’ ‚Žƒ‚y©ĻaMĮHšs‰1Ļ5G;Zc$””pņ`ŸØ£Ķ–U+q9ó¦eä,hū£‹t‘"‘Ōņjf¹{‹“+½@@č=ź£ć~„„d¶‘–xZW鐯*µĆĶ+®dŲ™ĖG„jŽŠe»DŽ'VŒäń_TžÉŸŸą·Ę_ x¦+ǃD¹¹Œep¹cć>œsJGM8ŸŻæģÉń’ĖÄ:†µk ęMģkŃfݹø+ śēō5śs$wZZyń¤Œ¤)Ļ?)ļ\ubow!ÓVāŻ#ū<Ę)”}š?‡ŗŸnŲōÆåž ßūiډ[ć’„4ŌM _Q,¦ʘ®SļGBNr}s^>"6W:);‰ 5{ŻwĆZu†§y«ŖlPłĄ>ƒ½zm‡™£\ȑĀe•ÖAśWĢf“ŁŁ~‡w sÉ2„f)W# 8?żj¹¢Įö6ø¶)Ć2°Üč\ōÆ.›ŌĀŖ*ÅŲO4vĢ c½v¾ ń)Óuū{k© Ūļ ąc(=E}fM+ŹĢņ+DōöÕ.õ«ė™Ä0.~ųÉo|Õ`æcv/ĆņkėiK”ē8Ųģ“ł섲ø‰×ŒÖ“tKčtūÉįWM²å°Ē’}æJéO DéµIƛM7¶SÉÓVŗß„’¼XRR’+«‘·ģæ„"¹Ēxö]/ķÓ­“« łłG'ė_:jŚ{¹&P›¾9\–ĖWr]ČöŃĻqåģRŁ®Ö $† e02>ŃŚ·D“Yh“ķJ9¤O:Y} cßj¦(”·‰‘­S$©^OłÅ3œę Ö-×PEČ[* tü+§Öń¦X5ŻÄ øĄ>“`ś“ĻŪ2%ś[oø•AČļ]¦‡«Į¤<Ņ]Ś[]0R»dtcĒ­#h³Ęõ«˜eæžā)w+ɏ ®ÓĆeµÅ°øb²(;±×4!IMÅĀXC$vͶF&ќó)¤½[§ó̆BNąGėZÅŲåŖak2ˆ|³œ‚ĻOZä¤Ū…aÉ㚓īsž‡æö%¬—7 öŒ` `°õ©<; ¦y¾Ó&ō#Œ`Ó |‘Īc*€(€}MswF«ml÷Q¦Ūœ^֝†•ČtM^ņ]Fī!+«/Ģ0=3ĶG­ų~v»O”©!sĮ¤>VkŚxFłUo­…8cžG\WKgrdĢw`ł±ŸŗŠ”U“ˆ£Óķµ)/ Flä23\OЬ,ōÓ0“q2÷öą–śS7‡ełÜ1ŹĄ;ŠÕÓ“ČKSūĀ6špqgh—Žœ*ƒÅpž/Ņ®“ūI/ɒP@^¤ś -Źē¢Ė%Ž”¦˜ī%“¼ $Ž2ų$¹Øę¾œ¼ń”ØĖff’O1q»ićņ¬„3Ņ,µu‚Ņ9 tó•NŠył½Å|łāmBę)äT\^“„÷R‘QÓR½Ż¦§©¬R•-3=śV妍.v†÷kL¤7ŽČSŠŅ1īL¦mßxĀc Ahīx<ö®ZĘźöēQ‘lµČ#ÆÆvYćk™¢`·v0ÉŚzÖžŸ{{bŅ“2Āć4Ėr1“M[[Źy{9;†@Æa¼†×GŽ VrngB@Ū€@Ē5Ŗ‚9äĖŗ¬ ¦(X™’}+˜Ōü%w}}q;"y+–ŒƒŲ óS8õ9-GĀZåž—iØéę‘eżź?;S׃V/¢TŸM7ņsœ•“‰Š“.Ä|Ł£W8;†EK©Įc``g$» Ÿ@}O-€Š±ū-Ōr6Ń UÉųkšøKłäžÖ ”\ą`õ«”§xz eYīio2Ļ@EwVŗ%†¹‡PdpX§¦A¢ę‘Š=JŪOµŅ4Ča·³‚T½ ’SųW ©ÜYXߍ„SN¹;‡ńVr‘„ŽZšmŽ’5(®ŅMB<³B$ēµačkŠŚ(®b‘#,ƒY“4ģtZž©£64%äęEH’ŗ£¾}śWū"eš½Ē§$VnTū™š†”5Å՛ŗM¹[± ā»}ZUŗ{hlіEĪī»±ĻėšĢ£¢Š-!– ŪPĢƽsśĻ€^óɱ†sqõ;I9źć8–®¦© Q±īŚn½ģZ~£)Y®0X(é]¾³} iPÉ+ĘxĒ'Ó±'œ^iÖsŽ …˜ĄŒŠÅf[(¢PNÜöŖłĄåē{U„hį|‘°žM>ÖĻķčT&ąŻ3łU~ƒOßtˆˆ¬I#梱·Ļø ńÉ2v’£Ö±ÆŽĢŪ drątō®¾ĖNū Gz®L ·EW)ŻĄų«ÅߣśˆK%ŽŃ²™™s]ž™­i„01œäwœlRæS˜ńżäjz$:t’mĘRAĘĆĻŹ}k‘½»ŗkČšū±×<ę¤gI^$ÕGĪ+OšL^å9»š ^e;źśźņŽ b8ŪßėVģü†Ÿ(»yN¦÷¾ą “žśP\aÜõ;ė :/ %Œ&yÉøtÆŠ“ä·ŌīŽžv920ē„*Ę“¶iä\ÜÜIäķäԚ†ĻUŠēKŗµxžó›<€=©‰é©Źjī?„g6 ØjAīü‡mņ«Č֜w­ŚŁX·f𠒵ІKæ.ŽBAcšč%Ó4į<ˆa‚įŌ č\PžÅ;MONÓĢĶq žAĀ'J[-\^C4±Ś‹l1QódµjccÉu Kū'ÄOÄM <›°r+Õ-µ5’ŃE¤’‰N øÅDŃ)X”\ɧ3¼ź&’ˆÆ5Ėj·jÕ!š2DŒ›}1Y•©VįR'ŒÜFqֹǹxļĀ0rsŠFē©čzƒ)ŽH³³H‘SÆÄČī æ°Ó'¶ycb‡qĮB 4ĀÄV>2²ŗµ¼Óļ•؁½†p}Ŗ•Ķ•¼“eß#19nsÅb‡öuę¦īѶč'’­XZLjD{k!‘›~[Šzq śõõž·;¤m¹BNĘ8^zWZ×wS›xeß2–Æ•$ÖÖKæŻZ$ńĖ*\¶āÅæ^“ŗ‡f•ĀŹYsÉļPé—ĢĖś¦ƒ$RĮ/Ģ£89­Ėö[1§ī?9 ķY4W“98ķ£ŌLń»ˆŁ§½uI¬L£jø9'­g éŚÜ\W³ź-åE°”8ć>\/€ģģ|IāĶbŚ+˜¼”ūĶąåOćėŋž2‚Ö uķ,cE·GĪ œž¢±T/ü>ZÆLPiĖŌtz“6 #ĘŃ“’rēøśŌ2źńĒcs«„ʲ!Ęsü’*q±›¦k:Ę¢c½óUķƒįóŲ{~•ŃYÜ$ ŌG˜ņП—N”K©„ńīĆ_Ž+ÄKECę*Ē•©ž•Ķų›U‹R…'E2”RvØāØ˜ŚO†5ÜĒšÉ"ļ|Ń×÷Æi¾Ń¬ü=”$óŽŪČå7ŃŌj—D%Iķõ=FŪPŌRkø”`&üqéśWM¦j–«ewj֐˜Łńīg%`2/mw@n!…•²vœu«:U¼—pˆī!F”©Āć„lŒł­”>¬óLčҲ· Žœ×g§]é֖dÉ"„ĻšÆlP‘v’Ćö×ĻÓ¬qG³rœ}ļ§ėXœV6шŠC0CŸĘ™„Ī~ĒL‡Sŗ¢ wmĮAĒ5ÕŲĖ©xg^² måŗ”&PAŚxĄ÷Ļō¤g)tF„¾Óµ›CRµsōė¾YXü ŌžUóķ¤·7ŅŚŗd¦5e<ӚØŲÉ£Ńü9āM×si¬ÅÕ[aō5Śj7śƒ@,žĘQ#ČŻŻ³Ś•†aŁhŚüS\Ē%²©|H6–śZĻŖĻgįēŗt†ÕÕ žōd”÷ę„£hĘÅm6Ā gC†+—“sH…^¼× ė:&i¤µ»El±ØL'>n:ēŽ™FÄ^ “¼ŅŠŪĄfŗČŚAĘß¹ėßĖXg»ø¶’'ÜBģ}ØÕüa,i<;ĆķżépZŸāψ`“‚ FĆO‚vJ°'łˆó^³ćæ]H–‚é"s\ž¹Ļ§µsó^ŖkĶÓ¹O”†h °ūHšbŹĒžÕxéé}jgU]3É”+Ėr«@~iŃU oZĢ»’IQ˜cZ %Ņ4Ļ·:“ncēę|gmOā½7S[ū'fy"‰BoϽæ•VsŽLłāŗx'—H-£ąšqŽ€±Ó6Ŗ×6&ŽxRXJüŁ⹋Ķ7I}FŹ}:Ēģöų Ž[8ēœ `wĻgnm’ĘŲC#ØW%ŗžę©jšJĪXć‹q1Z§ +hN|!v5+06IgčyĪkŠž=6ża;Į,æ?=I­P!­ų É­^ Z)-ų* tǽPŌ|#mįė{iģåw’_šH‰9ÓśPL¶,č_:NY[xČöĶr)šž§„!˜Ļ†ó7ī9ļŚ—)’Ü䢺ŸS–åēc-ĆYóœž5ÜųEQīD2t_īœĪ*eXŹēi»Ć¬ŲĖ4*–#“ĀÆø¬_k7Ś'‰“ϰ¹ū L1å”9IōėQ(Ų£¤³¾}R˜€e ³gų…q7Śuü ”„“nK„=įR2Ķ£įE¼eĻ~qXó]_[q ļldzŠ#§š'ˆ5;Ÿj’Z‡VµĻ›“py~Ué·Ń*D×E@z¶8™‘¦iśÜl×ŠŪ•.Ļ!łTU=GµøžŅ’ŁōųŪ,_€üŠ ńJxb÷V¼›ĆŠŪĶ ‰ū¢ŠNÜõƲÕnģ¼@š˜R8";W#ę&€1_SšķÜž †ßP·‹Q…Įx\a›=ĒŅ©h6eüņÅtŃŖ MDÆøŚę—q&„h>É Z#|²’ WGa.£{w%„6ĢĖ>gšN§=ųؓǼU-éūe¼°¼‘«•äcur¾Õ?Ó®lŒ7 рŁ*@'Š‘õåĖŻIHŅŖćO „‰=ÅĖLŖeĮ޽>\P_9³.˜naˆƒŽĪß0ćŸzĀžĒEæFÜ#8Üżh6…ĶDmKāoté—ĖŃåŗ"ępqäØ^ ö澦¾Ņt­6śżį]•vżÖķU©™Åė—>uŒ:>o)¼³ģ_™‰õÆńŒZužnVõMō…ă9ņČ=1E˜0šžÆtדŁ]˜$YdL£3éėÅ} $ŪŚ[C%ä± !'}EI‹8Ō®Ģś“ {0žĪ„€Œī=ˆż:į|Gt“['٧Ł$XEĒ'·Öƒc©šFh¶÷÷ÖÖrArĀ!!aø€»Ö½ūÅ£ž½-µ{ŒEFµ¾R§9śdŠ>™ŖŪų­ Šźā1fulēÖ_Žtūl&ŅüŁgąŃ÷¤Ī3Ěõµ–„ßiGGŠ1G=q_*Ėaywā› ^śŽ w‘o“ø<ä^(;:ÅŃ“ßx†m[ū=«ć‹9ģž!tnŃĀą~Œ? h:„:%“źš¼ė³ēž,qÅkMąĖ+µÉpöņ¬›¼¼}ńA¬{Ż·Ći"°žo&t»U•vpsłUé—}ļŚ§ö‚™ņÓ%zĆŠ™H»›ŅX.§ymē\'–ĢxlzƒSŚĶq{qp–Ö­IūTą/Oʲ`|ūńrĪāŽŽ -)&}ŅX†ē±üó\Ćė[KXøÓn ½¹~HÕ£o˜śU¤­ØCMg„ézsŪM¤#JTóGp*­–³įy/&µŽ ½Š£8ēŒā \ÓōŻ 4ŻRļķ0XĶě¦N#`xÆĶßųÆT×õ-U§Ōæ“fe¬~p§åUØļ”_J·ŗŌ޵YƒČĮFќWŽ>ń#Ų|>Ņōæķ©źŖĘÉL,kŌ Ö¦R•“#Ō¤±XJPķ<ē½[_ź— iq+BmeœH¦hģzo„0ų÷Āvöŗeµ‹K.£t0Š +äœ×ˆŪŽĆ M#36Üwā‚}™N? Ļwrׯ-ø·n¢»B ‹› M+O·3«ŒŖ{śÖ”ĢåļSšƒÅš]Õ“ŗu’ķ’]× Ü6sœa_CųOŹm2ĘŌ1˜ĘŅy8­ ¹¬ĪˆéPjw öē“ģh?v1Ć ō5ėŽŅtō­RŚāźŃ‰Ānū§}Ķ2ć+Ÿ=ųŪUŃģ|C‡¢“ĢÕ m!ŒķēoC[6:W‰n|4š:īR…‹)„"łOœüUąųv&Öfsu¤Ė‘”Ś{ī"ØiéØhŃĒ(ŠIƒ Zįm+}&dš(Ń<ȜsąÆVš·ĆżF¹Ōµ_ B\(äĪ@š+.vKm‡§ų7Ć:ķü|-”:ŖĘfČNU@č{vÆ#ń“"mfKHtĢ$vb‡j‘ŸŌšk9T"R{?Ї—agof̌sēo_õGŌé¼sambšŠIńÖ„6ĒÜĪń̚—Ф½¼šnšRŅ6 ø8$V/†“-FĪŚHuß"ū’W'„RFŖg_& ńZI‰«e}i¶ž ½Ńītķ9¤— “·ėÉŖ°JW=fĆĘ>Ō<==õµŪŽų•“3Ʀמ¹ī{~5Äjž/J“‚ę-6ŽKŅI ć9ąbŸ+!Äņ’ųK5żz’O±½u‚ĆĢß)gŻō^³ą-#ĆH޽µLŹŽŪ±ó>“r殇éwś}Lja[&·½¾$„ldŸ§zßµÕ|Ss«ĶjĮćDS"H‰ņ‘ž‡ßŠnS:ļFæŗÕĪ­ėvä³±Y½sZŻ–éĪ[Œņ:I+Ó“”¹IEWķŪ5 ’Æć…Üģg 8ć5Ÿ-Ģ‹Z®›veK”G6€Cž•CWŃÆµ¼Ck.ŠVOācźZŁS:N?Y²}"[xAœH˜2ß{5Öhšœ3–;ˆŅą±W”¹m ™Łų“_†ęŻ[u[r£8Ą®[ŗņ,ģŽŽńįœĻ·6;R#œŠ°ńmŌ­o ŹžnŽsМō­OK}Vhļ§…ē˜€9$…Ŗ%sŗ†tČ ĪŠĘ’ŹćĶu{µč·U¬±@m¬ķ]±å#ŌśÖÅ9—ü!v¢ł®ÆeŗżŲĄĄ&µ“ķ[BŠoīŪV“–=1Fęt gzĪrč¹Čx·ZѵūĖ;Ż*Ę[kHˆĆœ—'ų‰Ē\WeØÉŪ–}Ģ3‚rVe{;lt–óĻØøŠK§ĶI«é7V*»]7py_­T|Č0|-©x]nķW[Ó&Å!Rr eX¾šBŅ5kÕl!‹ģOĀȱåž›[ź„ ŽĒ#⇑jÖ÷¶iŪć@‘ČyĮ®ų;L­Ē›$Ą9}k0·C—MÓl®õ [q £‘ćœõėž·ń8×ĶÆķZÖÕ>A9>§ń§v6ļéŗźvŚ–˜†ŚŚ8ös’[<·é[Ž z–§4„ꀮط ī467.‡¤æŲlŃ¢Žā7“‚Š:†¼_ÄņC”r·ņıŌR"ę+YZĒj÷K;42ģ„Wؒźj°H…®åõ P±ŽžĪX”M=Ģ Nx¼£Ę ØZkS§Šē¬“ =? ŖŌ>÷\ ĮŽNyæąķKPń–+iŽŃ”„łI®˜ĘčŹZ–‘šź\ZÜ^[×$#£ ŁM{³2"Hu-_*0ĖČ ¹Ģ–Ņ ŻNÜōŪŽ+œæ¶k˜d$rB¤v5“_S‰Ń&–ŅqfĒĢ|ģwnõ×K=Ć-ŁY$ą3;t¢įqž šw„unŚeā^3ÄUŁ[Lž‡Ž¼žO ė:}óCis;Ą¹ S5a-ē;m³tłŽžČ½Ė7SĖYš•ŌV؎Źķr_<šż*JŒnv¾ń7Ų’ęęńįK!€Ż2Gć[7ō:O±Æ™n3“#“éZ±¢z~ƒ©Ųźś,zŒJåĆcęōż+“ŌuK»ey-į&eɍC|ĶĻjŻ;¤‘BÓÄo}yæX¼óć\G›œ ćz_ˆÖ¶mjm0GÉ,Cän; |čM#äÉ`½µ™Õ†Ėœ’ Œ3]‰%Ō—płźńÅĪŅĖņ±÷ØzģCZč}ųƒz-“ž¼aHģžTžX’HpHź\ēĘV܎yfHå1ŗ†é÷sU w–ÕÜ ÜČfĮśUP} 2E|±ĄX,›ĻpéZ–<©łųō­`ŽŗR=wĮ¾9Õ|¬ųkÅ~ŌMÖ“‹Č/RM™fŲį°^ÕžŽ°ßķ+į’ŪöMšÅK9¢Į ŁźšŃ×å;Ąčsƒōj™źļ”ō%݌Bķ+Ēümį;P‚GŗOÜH 0īœpߝrœÓŲüČų£įh#ø¹&øKw0\+¦|ČČī>†æ˜æų)Ą½oĮž0ÕźČŽØģŻė^śŚ;Țćz£tóšūZlņj«;!öW(¶¢ŪźG$Ō’.É¢.¼«q]p9ŁÜéWR½‹ŪĢŪā`U±Ś¶|(¶Žҧ³²WŚĪÄĖÄ“†<÷ŖžŽāi§¼9Sœ‚zW/s(wV §n?b!µa%üfhßåč@ā½*ÖÓεiī§ åņ«Üе+ha*‡%w²Žćķ6ņ,jI qŌ{×}ØnšFŽfn#b“1ēfމ.œŗ¤’FY27ńƒ×žkŌ<¦>§¢[Ciåł'lœ?,¹ą1J ©šZn„£éz"}®ź!,0’KąątõÅy5¾³qŖźŖ.Ā…brĘFxż(å: ?i6Ö³ÜŁåšÅ{éśU ųŠźŻć³ćVP<¼qWÉ”,õm2+{‹•žėänĄŠć~!Łź:^”§¼QĶņeٳÉ\qŠ9t1“8©¬Ķā9-·Œ×&•}'˜–čc`Ē“Us \Ļ0±…ŁÕįćŌóž5ŚŚj"*Ī&2Į}jĮ#WNń ߯‹H Ūl˜ °ź+ҤŌ-@Dp˜~6šfź605żŹņ8o,V§ˆcäć"³tė{›”^²ļ*īŠ&hč6—öwwqÜ\;ŚHĄØcĀA]®©ą§†ĖĂęŽÓOg*TK;Ž¢‘–—2%ŠÉ ¬[Œē“^+āĖ —1Į%»: p1A'7„$(b Ä{ҽ Āŗ•Ķ–žö×D¼26桏8žtĶŠČ¼“WażŃr@Ę+NļHƒO‹ķwˆņœqBV4Rv1“ūx”ż±ss3Ē™IĮ$ē>Żéžńd——×W4mlß:»øŠÉ³HM’Žģµ›vŅ撦{;iCȊ8-õü«Ė|Qā.&»ø6ŠĮ0‘§E=ŖI”{mÓĪŁÜįsĻjøóι‘IvķéUryŚ: U3«L ĶĘ8®ļĢ•œ”P¤1ė[ŲĶÕ9mb DJ„0·Ž’f½wįŪźŚ”ŅŁŻ7›pŽ’Œxž“4 W8ļźcĆmg  \ź7ĆrNižoģ7³’[(F*€qÓ®hęŗ%åėk»d>ŅøĮRs^·®i×WóéW—’dBæ{ž£ō­#.äJ»1=Œ±…b“żÜzÖ„ę¶°é÷Bu…īUHÅ)Hͣɼ)āŻzĖ[’Žqös)ŽH‡@§µv^'š“6V–7śA”ĢŅ;\Fć!;üæ@Ō¬pš“ÉtŖčĄķät4ŻFåīAF¶Ł#½ó™Ö·s‰ĀĮ1lÕŁéjeŚŅy=A„aÜÜžŻE˜Āš,· æ!žø©mć»]FÉd&NXņļŠÅ«©X÷Ż0G%­¼Ł’S• ź+€Öķ!mn6.~“‹Œ®æ†5}0ŪjšUńq·,ØŻxžuäŚö„Ŗi.’ŽĆ12µKIÅ\W;hü;„^9Æ­„Š0ŻĘŗwŅ4eæw““KX3Źg=«NQ6;RšĘŒš“övы†E³Ī yN“,ļ;5źŗ21€`Ö24Œ»Eē‰dÓģŃā'bp9¬»/ŻYźļ~ŽdMĪüā²ē5;«^Åe†Hīį›Ķ]ĄÆ8>†²õ]^Xįž&E’VO›āŖ2ī;§ųhO½ė~īįž+Ų<#¤[i–ņV6Ą«÷qTUćBĘ? ŻŁ$1ĢīF+ó!ļŠłrWµ’ąÄŸ4¹źyÅL™<Äz®„²$RFĪUFp8É®U-ӈ%lČ8ł»š"ßQI­Išž„,‚ÉĻȃ"¶™§ÜZŗŻŽŪåĮķ@˚—“.£eµD S^ėcueˆ²}˜ĀĶĘā8ā“DĖm2ö;[é>HÕōaԚšÓOe‘lŅ@Ó§¹¬ŒīĶ;ĖÓĶY/šóŠÉŌõk[kh2HæxÜż)„bÓvŌóĶK_ūt.»$nG©­’ \ÜłM „¾<ŒS!£ZóJMjų_][™pŠĢ{OŹ»­;M²‰m¤‘BJ×īŠISÅwv~aÆUćv+Ī,n-ĶĖ4ģ{ō©’*;𤖷?fĘĻ”żį޹żJÕūO·MÖķ Ėddō5‘±ÜźZ§į3NŽY§¹ *c”ž§õÆ7Õ¼5qeŖ[ÜBč’MóĢ0AŸžµ4oMgmk33|rMTIēK„µ¶ŽI9=sO‘’zg‡m®¢µ’Ž@'čk…ń>™;HŁ·]ąœ1ļõ­R°šĶ¾×Fąœ §Šóü«Ņ4ėK{Kųd’uĻ ķLEń$šM¬zaŽę)šTóeŁĒ·ÖøbÕŚā"ŃXp»1Č9ģk71ŲŌÖµ>G@²yۈs\V±£Yf“(ć3ŲÖ`ršœ6šS“Jڃɵ‚’ śÕo 6£ØNmŃžPącښ3”ŗĮ«éÖ×ŗqŅ%K.×#®*„‰šæ¼7%Ä6Š—pdodŸ_ń§aĘG6Æe÷'-Ōit¶z­Æœ‹Š"äcqĘsY‹Oz×¶ė¶|äź yeŽ‚°ŻE±Åę)ä·šóżBŅÜĖq ,Ęßā ‡.å[™^Öžxvr©¬» ®.&24Ń“lŪ@'7vZń<3é’Ł0¬.",Kž88ž•f-&;‹5–4—ĶźÜS$ŽŃ”ŽhU#1Ė›#ÆÖ©ų£K×.-ķš,–ˆBæ<äž?@j”š:C¾^ l ғÆņQ#¬ž‹ž• jKįé4ūI”…É·ęŽq\mķž«,Ń/Łž”†wzeœ7²[Ȳ\°zŽ·Å`I­ĆD’(m¹Ž”ń«żF}D½¤Ń’Ŗc½Hō’"½ Ę-:+Ki­Æ$ž&„I'ŹA¹łyü*ā}rD—$€8Éč+šūPÕ®ÖO8aF3ž0*ā ź¢ŗ[kVó$ .w0Ä+3RS§\-%EĖvŖ1~G’Ćg5›41ĄRĒ;G÷ŪųfŽśŃēt łį½j$ģizBŽCöxĊV@2I=+žÕģąÖ!a`wzTß]J,čpŦŹcņŖĖG·I­ “‚5bX0NsųTĪė"x`Œ,¬į‚9ėY¦_³5/ujĖR°Œź– µåŽUØėҹ › 'ZŌnītĶ:ŪIBĈņ™”²yN?j¼ņZŁÜ¤`f‘±€¹ē­}ĆšlW&KŲļ^ÕśØĘåĻަż ŒtŌåuIą¼øV¶y’»Os\Ż…¾§"K-śtĪv’–kžQœUšoŁ”{IīYFŁ9ČĄėĶz§™ ³L‹‘É@ģµ³„˜#‚BŗE„•Ū<ÕR\Æ=ėœÕLń»żbM/QŌ-§VłlČŚ;טčßµūŻFóQ]?ģz’æ&<Ģ8’=h)JēÆéfžśœŽ ń-¤w:s(’|rä÷ś…gŪć×.nō»U“Ż)tŲ m°Ē„jµŠĒVÄ>½½ŃtXuMd¶Č÷¶6Žü~5ēĆ/xĘļĆPŪéWV××#ĖØ ļ<ķĒ^¦Ÿ(s#ķ=öbÓ“Ķ |QÖ¤·Ńnbheū<„Ī…Ą8Ī0HÆČOxRėįN·ÆųBóDøH-ļä·µæ‘I[˜÷˜n™Ę)„a¦AįÆM¢éw։i ]HpÆŻF{V·ü,½_OŃn4ū)a·‘Ų; æy½OįL™Fē©ų ĘWV:yøŃōČõ+Ł&@ÄØ%9ä×e%Ī”>»{Ø_ŪD°²D«¬sĪ?ųµÜgV“Iøß²Ė¹bĪ8ņGćXŽ"µæÕä·{„k»6ŃŌ7­j„qN—n–6 >ŲįEĖn| w®j÷QK_:éņЌ’qĒ4Ąē’µģo"XŹ0łqÜ׏ų³\ƒOՅ”Y¹p½µI“:Ó]{;&g³Iäf2H šé4«Ė½FT†éV8H'޹©äEF}˶ž ½ń‰-!°+ ¢%ŌŪ2T*õ;ļ K§ƒmc {_,rĆžüSQ±«ŸFr·_Ū/‘os;”ī. ö® ćJŗ“ÓļÆIW„ŗÉ7`nć|5įcY&ylĖ@dtc½t¶¾ƒKńV©ŻKEĄ˜ä’W/Ø"¦é+ 3éø4=;Y–ī÷OÓ­ćå8Ōlżk‘š„į˜5-Mo²ŗe“Ėē…\eģ3ļYĢĖÖzļŽlō­ ĆWZm‰‰–I„`ć# ~"øĶRņūI‚śņĘ%y嘾óž[ėō nLŪšĻ‰ļZŻdš\“[dńQZVڽÅŪĒÓ}ÄaĪīõi« ˜šéwž¼óÅ$×S™<  }Ī9ā Ņ4MV×Vź$9Ī3÷Oz‚łĻ@Ieóš¢0¤÷õ®ĖĆ/imqs$®žfwö„u&R¹ék%¾£hŃ$eīF‘Ü{šłóŞ7¹Ńuō««ŽXˆĄĄ$Üžu¬ 9u±īßu«xV¹ōą.0¢³cžI“Z?¾!xƒąßù“F°³¹ń-ō‚;yČϐ­Üuģ ]ś(ŲųæĄ>Ōu-nćčōØJĘy‹ä»³‘ŸAé_A SWµ– *$·l£÷d¦Z•Bš×†µŲĶ¤Æ-Ņ# åϽr¾ųg¤ė—^"ZÜ; &0XRrH9ŁŃx?Ą~¼ń ńwؗ)Ė2öŁÅz'ŠcN¼Ótż.Ž?³ŗ˜©ŪÓ­sŌ©®†3—CŠ×“Ż+Fón4­B?ķffln6_μsTńEÕ¶›†Ÿ·‘_2ĆÜÓ5‹c¾ŗžj}Jfø½·Ÿ31Āŗōśā»] GŃ­U<ųvlR<¼ą6kXlh‘C\ų×iąłÓJÓü!b²¼b#‚wżüö5J+½WĘ·¶Ė§YDz3ČQpÄõ’ʶ¦‡Źz›ąĖ=2%Öf„¼æ:Ü»׎ÕĪų·^‚Ä-Ž…,±|ŪY£É'Ó V€“Ųå&ųcā¶ŸćŒYi×±nņ³‚ŽÅk†Ōé­#ŒŃ×üØ-½¼!ꁛ£ØōķĶ`éz3[ČF’ęhßdsOŁ—ČeųƒTń}†”;’g­…‚ ‘M’Y›¹5äės=ń’)Ģ“īl¹ ŒœŅq!ĘĘĖų˜Ś[µ„°pÜ÷ÓųCĀĒY˜]ˆĖ€ėĘ6ŒóPFڟRĒąĖmHūMŌĀI™€W:ńOhjŠ]źÓ—Cb”Ą¶*œŠ¹óNØ%P‘cćŚO=‰«¶z«ĀčTņFØ¢žŚŌuK–ŌŻ£}‘…ÅTzųVģs\Ė’MÅšH”ž‚’¹ Å<ÓFYŪĶ^„j5‘·C8#“ž•Ļ'”‹9Ė©-ļ1’Χž8®ĆĆz¬JÅXåĆngĻŽŸĪšVШşHé>#Ó/ōŲ§ŠŽŽÅķĄL1ĪyĻsY÷zö—{0mī2C°5q¹Ŗ*[ßųw[ ¦ĒūūØ\0¶‘ŸQ]LrŪŚ¬–ßdf”` Ē!Os[ʿȓŠÜO>TqĮ‡Ć.>÷¦+Ę~"ėÆlńGķF}æ Ę1ėG1<·ŲĀÓułī“rķ (8;½kƚü֖6™v²ģUżóÜżjF•“1ōŪŖn$UŻÓ UiŁÆ$YžqĻ"“‚ņIÄ6ģ#¶w ģ8 żk~öĪE04rc޳ØTb3j¶ęŠLõéҲ£Ń&Ö®'–eök;£d¬7ūEä;ć‘öķAÉ•ŃYü>µ{6ßnŃŹĪTĀČĒ­kˆŃJĒŖiž}2ŽĢ8–2„EĒNkÄWö–†AåŖ4_u€źkY;™NG“ŹÓ^ŗĖŁBs·:ųfŚĀ9µ ū˜nv/AŁ~@~× ,üoį[‹‹id•!kmįrŅDsĻįŸåNē‘ü²|Išåρü[®ųRž ‘¬¤*$u ²)ū„~}kĪŽūY w_AŠčŒL&ś qz[xVfsĀŖÆz“S-Š.Ó¾NŪ²9µ2d-m²å¶p„īmÕ5ŻÄ15£#nć·“Š—.†}J’¶ÕŒĀ”£<‚h•U¢ ƝŒ³*£h²Ō3Ę«»“¶8Į©ć›jĪŲ ņōĒŽ é‹±ō/ģūń¢ūąĒÄ’ųćI¶XćūRC*ńŗŌżķŻ:uÆī»öBų«¤x‹Āžń†‘«.ƤŽAs2ŒŖ‡®O<ūūVS:āĻŌĶ+P‚Ki,˜š>?Ž_Z±q«}›÷k " wןU1š_?Ų¾×SÓ,æhæųuü›°«tÖĒg½'ę. t uīyÆęßį‰ō×ŌęŃ/µ „%crĒäFśäW‘‹wƒ¼Y蚼kg=õ“SyĻĮwséMŠÓ[šÖŽžŲ‘.D@’•ócfkwŠō-JÕ “óµ)ļ^å†X3ōśUßh°\Će{o RJyø>ä]8i$īeV:žÕF‚ 1I*@Ģ8wČü=«Ü“Ūųµ)-ä·Ż6 ‚x'½}®JQM=zvv5Æ-|˜e,Ūī¬Ųī'hŒ›”Ŗ‘€Zō`qJ6:½S¼øŌF!‰ŸZµoā9%)ŠŅ.ķ€/=ėBMFöxćqPŒsŒgÕĒ’hĢŖŽb» ć±  k˜Q¼8ĒėVõ^łté"…>u] gš 3³»¹{8ćø¤~„ōÜj•ķ“pŗJƎ¾œWA³d֖Ÿ¾K­ūłÜ>ķz ÷—v†e% … ŽŖ,Ö:Ķχnˆ’K©ž5w`ņ„U6Jn ž¾‡Ąę“V¹¾¶;‹H¾Ņ«ō{¤ŠŽ ;=YäVW·å!y½L„ŠĪDߌl—¬1åŪŽ ÷ĻҲõżB2Y¬­–p¹,*.c4gĮiń-½ņcŒ9jļ‘e8Ö":޵q‘ ''t–‰$© Ų”»ę³ÅŲEdpĢĄć„>s¢7ōū7¼T[;—‚|g~:f½ŖÓĀņßYAöÉ”KˆĘŒįqĒZ^ŠŚĘN&›÷PĻz—A×’žj'ņŚSÜf;2;Vˆę©¦†NÆØj4Mi9ŻņžzŽÆx›Ē70išL>by̤6Ɛ} Ø19ā›ėø6E„ņTdā¹Ż^{©…17]ĒŸĀ€3;YŃ·ŗī\ĻJčņāęĪ·…¶«ČØõ ¢<#¢č÷:$rź6ńyźĮĢŽiž,šž—­éo%¬ńĖm Įć9ćššpŠćü5m ųN ~Ū VĻ3€öݚ±©¼vÖ·7n¢r)ĒėSĢT¢ml >õBż5™UÜžz‘I-ÖaB!żėvėz×AŌ%Ū¾&‰;±øųŸz©udÓJå¦>õ霦ź7vFxĖzćµhIØ4ÓF$WfrqҘŪ5µ-et ŪØČH£!FzēōÆø’fEūDĪY~\·SHG¦ųFÖy<;!ŗ{X%0N(ĪaY)eĶ ˜1™ön%SSÖŚœÕŸ‡–źęį¦p‚Ąžzt®³LšzI¢^j?hIx=łķD®R8yęš ŲĪKĮĒ8¶2“¤71[±·^øźĀ±˜#Ō$“†ņŹ ķQąf@̌yĻKfŅ›ŖøtĒĶ(Ē«.öŠ«¦é&øMŸé0¤žXžšmÜś„ĆĶ|n§@ģæ„j)ž‘„Zˆäk{‚ąóŽ1隧ŖŚĮnD,Qb'=zP G=®i–m2yWK:tĀž* =1U^Ų›¹\u5•‹LŚ‚9l—ģĄ+ŗqœtĶpZLj®N¢śšr(ÉaqžOÓüö©öƒ3-®™1’HEėr6³ kÓ<9Ø\kš-ķŠļSn¬zt'?JWø ŃģäÉøįŠ€3޹ĶkT»Óµ†y®WqŸ„[ˆ’]mjöīŹ[©&&~`[„C¤iņkvø™eU-ĮĒõV4Œnuw^Ó¬“GœČ­tƒ«Ž™ ½’»ćiģqŚ‚dŗĆ]ĀĀŹÄa^®5[T¹HcW…ČVž˜ļPēŲÅĮžkw©y³ˆ.6O$×9}*EpY6…'ź\Ē‚č¬ˆ]hĻyĶ^ŠÓP×uuhİ*F6ƒķŚ®14=²ĻĆ7·)§6£4‘y œdóÅrž>ÓmāœÉ‡”ڤ ćµˆYšžÆÆčzu¶™:Å*įvļŚXgŌs]5¦ˆš{[Fźńn$œę›dJżCŃ#²ŗ—~×W­yNJµ”Ī’} Ž KŸa(¾§= é‰ˆÕ,­ƒ>ę8““šĀń?ˆÆķļķ.ļ ø•p‘…Ę0='vĶ čµ‰5;;I²ŽbŒk¢Ņ¢Kˆ;/ĢŲĪzT3H苶®‡s¦E© N©‡O-Qj÷­)“g·kmĆ$ėHƒˆÕ.ģ®m/RŽ9 É`Ēwž•cĆŹö‰ŗ%ƃ»#æ½3 3F}bī-VkĒøä|„FØ3®é-ä Ø²– ž¾ųü(YÉÉDĪfÉ墷ü-§ŪßĮt‘žīįŲŖ©o˜Ņ6/évš„rx_W‰_LY’x¹würÖl-µ[Ż?F¹–;q1Œn0õüØ5Œ®uRjv6ŠÜé·ŗlņ³&žYĄ>ĒēZƒ 3CŠē((]#JmbK¤óÄm‡Į'šõ’xF}·’ŽHšZ±*Œ«–#Oć@§š¶±\‹{Ńylœr0Ų÷®vēĆ?ŪÅsĒč^Ā]Õ¢™een½j;-!ę¾Y`‘åG0ū¾Ā¦R°„ęzõ„¬öņåĢW)ņŽā¼ĻSiŚAjä³ÆĢ ķM3­Ńü›ķ’į_!ń’£ŠV/Ł [āÆ*ļ~O4ĄõM+ĀRhKq!o—»x&¼Õ¼6ķwy vŖ–ĮaĄ wčyż?JÜ`›%ĄrzšK¹žžhŁ$@éė@Ž® u$ŠÄØĻĢO«Z½„„—Ų’Ņeø‹h. ”śUFŻNƒ¢Ņ#²•./"†Õn@Ć,ŠeéŒó{ 7PøæÓ †ŠŅ8UszÖÄJEm3Y›Ur’©f#®¶ĀŠŽC°Ūžóv}°*dŒŽŽ-V;BÖĘßl¼r ŠéV=:ēoŚķ¢»×? g½fŲ“ųŠŹ×ĻÓ"r‘ķ+ŒąX_o݁T›Œąćøõ©7ŽĒœų§PÖ4ĶJĘKW"ݾö ĻQ^ĻįYo.ķEä“18p4 äž#kvš8ŒyĢ/.#+—8ł½æ ń; rå'F’>Fzēփ)īk]Å5üxć“®­»Oė÷šE£čńnžL€r{äō昢®oIi=ÜMax»eˆ€Į†>aõ®»MÓÄ[؎6•ęļH¦•¬cϤĶyxŖD7@üĖŽ:ž•ĶŹ'ĀĆ'¬ Ī"÷Ä^3Ó-®m4k³¶ąįĀäĄ¹ÆFš·‹mµ61Xnā;qĒ»Q(č½V{›‰ķćIÄĄ³ķē5•©ŻłvžS0xnēµd˜Éā]nŽłd±dŻĘ®»JńFÆyµÓ˜&==č#¹ŽęāõfˆD$ŲŅKu}gnmāMČģ Ļa@ˆ,ßķ‘^[ˆ]®1ĘG³³&µ•XŪÉ ±įHļU‰ģSY%In"ūŪ°ø#‘[÷ŠŪ[ibåexWO¶1<ėQ¼dģ±FfÜOšzźō{Æ*)ž4gwÉ`{ÖsfD77sLLE§ߌÆXĻ<7ER€üŪŗąTņō=CƒJŌ·ŻÜ«y’p€ŖŚßö&ÄV/ i8QĪOµč.S†“a«źPĒ$‰½Ų(É®ĒM·Ń¬MŹŪ…ū[9R?Ži³~(mŪ˶‚“$īe-īMgŚčP\뉖sņ¤‡/=3A¢ó8ųŗĘĻÄ–oFöĄ+·foję£[/Żmø“8įsŌf€;ķrŽĒHše„–™a3(V!‚ćŽMx.­baó¦š<Źą0ļŽ(™Sچ§āū+«ĖÉa† ĢDgBŻZōļ[Łźo±­ÖF@Œ½9¤āuu”鎵ie’ä²l$w5åž"{S2ŁG,Ģ1`ģń¬Y²w5-.!³’Ī)Ē6ÜeGJæy®Å– q*H’*°<ŠMē|KāK ‹ˆmu[ˆ”ØFG 3Ÿjļ<9⻩UmŚ"åšFē#·ó„ŹD„г­Mjd·3<ŁŽęŗ»=8Ig)h o÷AĒėNĘLʟHžŸÉ-·®?©­kO¤`†wuņĮ;Fęķ@”NOE–ś4¼YīäøóŹīʄōJæ-•»Ż3o‰‰ŲĢ:š¾`q=Ā7?g²3ŗCz•ņóžqé]žŸÅļi4±CmqĆÉldØ=>•¢f|ŗ|Yų?Øxb (õ7·ū]Ģ"uP܅÷÷ƓuņŪSK–²•āU N·¹Q¤OAšĶ˜½ŪĀ©k²2Jōć¾+•ńv©eą««!¦éś†”Ø„³ĮjAĒŁ™€å@5›ŠHŠŃ'×ßį}M®āń#īx%‘@c×ļ^•ŃxsÅ:އįūˆ5™­'2/€7;„zu?­I|‹cĢüAā‹’αI%Ŗ7Œ…šF+¼šŲߌ\Żø™£Œe@–éšZö›öĖWĢČ$eŪÓ<{×ĢמŌt™5ž³Åęm‡ "ś’?Ź‚,p7×IāŠfŽg…—ĢÜ"%Aē‚ßҽBĀļEVhĶŚØ =sŚ“Z—RkwŚÕŽž·¶åķ¦åŽVOĒ<×Ŗų jšŻž»w“ŪHĖņŽ[?Oʱ#pČeõ« Eīgk’­ü>§£oŅ́lā'Ģż«·ųIūOųĖÅślŽ&±†ßQņ¢’³¾;Ž€1?C™—%Ļ„­5}_[ń„®ų£ÄŚ{»JT >NA du+äŸjŚwĘ=Uųgwgc¢éĶöˆo¦‡÷ĘT'7P:SS4å¶§ĒzwĄŻvÓÄÆ£}öĶqēęópzJÉų‰š›NŠnd¶Ń|Yc¬]ŗ‰Ślłyēo±ķķTirĻĮ«ūżś{„Œ:DžSFäķoq^שk××7WššY”ÜK”ц,5Å«ß+­“L8ąäÖ¶āć¤h e«éö÷721nĮ@ZQ¤Ė:gŒtćis+B„hŲ:dą ~ä>8ńu¶³d¶Z­ĶØŽ|ŁHŪ½qĘ­ƒŁBŚž©'īaAÉϳ²gŗ»‚ęy6n¾{ŠfćmTv—=¤~pł€[¶Gz”‰U"Eėņ·z yzÆį]+ÄZ-ŖĻģQ[Ü6'Ld²q׎Õč67Įäy¦0”wµ2O”vLā|Tś}Ī™ķ°‹«Ś{z×(,mļÄ- ­±yäž•fÓ¹F֚×Z|Rµ2¹(:¹]J]kSžŽĀź# ÉrČĪŽx"ŽV½|:}CL³¼‚öņkĒlłlNøõ8ė’ׯ™>&ké~,Ö Óu7’'U,ˆpƒ“Ūև1|'āIęæÓŅuˆĢ?vŒR}k®ńƹyeŖĆ¤yĮT·•ƒ×ŽjA…Œķ%¼–Ķ!·.æ3ź+¦Ńµµ±†k÷O$Œ©;˜~ŌV”āŪEŌ-Øqóó;P¾!ĤQ*\oĪüņG„Lė-ä7Vé"3ļ=ńÖµmŚtœŗ°ā„ŠæCÕ|1ŖĖ¤Ž†’»vĘŲ‰įæŁĒ½xG޼qā_x‡ÄRݬÓV܏–< ÆÆ5qDÄŽšw‹ōļ…ž°ƒQqę¼’³±ķ¶»[æŚoįWŠõOģ-kFŗūl ;ĘI,O÷±SfmWǶ)mužŅ›M°–-јņNÓÓwæ5ĖųcOń®Æ-ē­Ō%B,{9SźM4ö°ĒywuŚ­™±`„k¶?‹>õē~ŗ ų‹Uk{©$µßŗDgēq럨ÅDž‚•>‡­|.ń?‡oµķZ+Ķ5”Q‡kœ`žœsŅÆĻŖŚxŗēVøšģ}oo,ˆĢ‘‘“×éļҲ2”%½šżķ®£w.ēgo˜«Ę{}*9“H5#˜”]3»+Ą¤ %VŅ VwÓ[™ą(Ä óĢW–x£RŸL‘dČŽ#2Ķ\ecX-Ņ­Æ|Mzu į3ķ|źōÆŖ>iz•½ÅÄvj±Ł[+Œ{šŅ3‰ÜN†[ėėūµŗ¾Œn‡+€õö­{mM½±K¹āH)4¬1z¾vg'©å¾;ń‰šĘXķ=¼@¢ŲWĢÖÓÉ©^|–Ē98ļW`§Üæ¬ų6īČĮ=ŁH¦` ó“óT-ōõ¶ŽX°œE]нևeį›Ż;L{·»€™6¬‡/Óš®’Š×^·žÉŃZY”uļbH#ŠÖ AÜ"ń¾µ} ĻrŠ˜ĢGņ«w>4¾ŃŅ8Äß4„ŖČ[8”+—ģµ=OĆZķµĪ•»³ 1rķ?ńté]fć8t‹ÖšÉ¤7VSžł­9t Eć»ėķFēRšņi!`NĀzZį¼®ŲkzŒŠ[Ÿ6häŚT¼EdJ—sŌ|e¢}š&ŌO’“EꁞUOjłāMAm¦š+wo'wŠ•~„»²’ęŚqĪN9ö¬'Xø³¹ 9bĒ‘“õi×ź:n«ć[X¬c¹ņ®7cpQós޽ļįgĄ+ėoŖėš­½óĒŅ# ½x÷Ŗ”“hõķNź [ÄÓą†C¾@‘‚«ĻZŚŽóOÓa2c1=×#5åBé¾)‚ņŪQ‹Q i}!$) ķō5ą^,Šįń&§o=éŰÜ$%ö”ē®Opܳ€ńO`MēJŽx!_)t•ó“6ŗ•üžm“<»˜•SZX;ŻEŌ‰iZ픕0ĆÓ5ÜŪ]\5“,ģ\+€œĒJŹQ°…¶Šļ™£Ōö'Æē ¾“šē†ēŗÓ-õfŌ­gXš§?…H §Ūe¼ŁŻŻ[k# ä$øŠ¶’Õ¶ąµčŽń4dāĪ5U‰!p3‘Y6e(ō>73jŗ:nH `p= q7Ö*RKG†ˆ”rs÷© ”ņ _ĄŸlK»Įī·•M„yÜžsq¬«ö]¼ōäS„š¶•a§=׌ī$yŁJĘq€}iIoeVg“žžÕŒ÷k m¢`±ī2H5ˆZåōņČŚēę ą®:ÖR[˜žџWž0¬ĶüĖ…ź=ėŲ’įŽĀÖ ¤ĶĢīO-²ū$uĶ'"Ō{”“ū ‘ĶfrŒ’“v5ŅĆ£&k‡‘÷(.޾¹­iĢn=ŽN¶H ×_©č±_̟dc)Ą%‡sڬĘQeŪ]1¬ē‚Śf‰!Ē/ßņŖ ó ±“Œ”I8 5”Ė§½]ưŲŲĒē»™I\‰Qė^”ią‡[t½“UE› ›øé׊ĶÄéŗ•"š›Ć~5øz¶ŠQ²;×FtŪ[‹˜īīV)fVަ@÷”FĀ”•ŒCY·Ō$¾“ÓÖ3,?/–®p§Ó½s×¾†{xīn#jœ¶öą×DYĶRg7©éé§+M„¼€€£Šē$Õ”tŠł.‡ »Ę8Ŗ9Ū:Ūźvרž`"”°Č<ÕŒµ[+)aņmžV|™·ĒRxĶ7+œÓR; ŌMUܧ”8ĻÖ«l,‘ƒƒĒµFw~ņ‚:õāŸąŗ2g'ÜUŹ}bĆģĖ‘©*sÅZUځĄŚłĘq֒‘×Ė–R¤©$`ns§O„B’šGŚ’ēLÓ_™īz’Iµōw„µ½”r¤ß Ż’>ńƘĘSå“GdZ±CĚėYĄ^Š9c#ź+†Ņ¤¹¼Ō –īesżŽ€×)˜ŌģuZܐK|¢Ž$š zρupÉŠĒ’mąŽ3_[”W÷y^ē•]”!{˜Ż$p@ē ‚Ågzaˆū§ Æ¦„#‚”@źrŪĒuPć5„įē¼Gøx|–W¼õ­ķ„̚;]fäAh–/½`Kcę\gņ×7‰—q…ŒGSI…Œ˜ŒÖ×7'vćŚŗXÖ9’?0HUŗŠj×ōśdQÅöX)%\0|äż+*ļFœķ•~qß&­4“"Q.YŪ¢ĀCĀPI u«:Ŗ‘£ŽZĀ®ø; ąÕ&G+#’žćX†y]"CūĀsėU“dYfp=0y♯CBĪU“ĪžV;‚yÆE±Ō-eŅĢQA—2÷Å;Ijy®ø^ Łš9”œīSśTž Ó%ÖüGo ÄńZŪ©Üd=֑&ĒÄĖ{{h`6ŖĖĻž½y“zōæŲļ¹āūŪCg½9{›¹īū;ƒ&sģkgH0;\ĄÅܰ4ģi ʝÖJQUxĮ»¹uWŌģRŚ ó8ėHŌĆ°ŠŽŪ|°$…²ēwŽ÷«šÕŌvņZC>^~^ŸR“Bq15IÜi¤r37ŹJ’…rZž‡ygå\\øł†«ųU*†^ÄŹ±vó‰ŠS?>}=)ŗ„Ā]Ź©ŁœZ„$g*g1}mzĢ“,¤0ČĒZö «Į P]MēĆ’(3C’iźw–&Ńõ; 1VŽF†hūd½ŖųMš’„.¬ō–hT«ˆ;¹Į㯹¬Üޤ¬y$z½×ˆ¼»ŪČ$·hŲ²Ä[…ķŚŗéµ6Ą4ä›u]¤ŽÜt¤MM ŌX\ŻÜy1īSŠw«–-œ|»Ėu‘¶ ēćŪŅ“‹8ŽāĮØN²e_,>xē5ŻjZCėŁēŽŻ÷)`ļ ŠqĻGšī’š|)²ÄŸŗ~ńĒz©ö™/cĶ$§#57čkŲó†Ņ]5™Üy8ĘäĘ©ÉįåŗJ”– r1ƒK‘ n”cecgoW±Ķp (ūµŁx&;”œ §-[wĮ÷„ģĶc3”ńåĪ‡ØŁŁ…üĻ”°8É?żj±c„Aq$*Ņš9Ļ^MfŃ”«¬źŗ^“8°>eĒ–O—Š‘Œ+Ę/įi.QŪv9¦¢E$eįŽCjŽ`ķŠé¼9”O«j0ŪŻM­®v³7_ØżiF,R4~Ėcc­‹hs"6n掻t{”ˆwcŽ•ŃLē’Ōą¼uļ„N,ģƒJ­’ĄG”®MŃu<ĄdIœąbµFRņ=BńxP·“ŗ’H‘ņ¬Ģp} ¦x›K–Ż-^O4æŹ§śŌ“f6ń݌M$Iå™;©åMSŽŹÖßK€Hę?(9å(­ Œ­£8æi÷QĒŁ%¼W ąŸ0žŸA]-…’^„ŗ˜¢yćMQfÄQ<ŒśR«„~¤ž?ņ½sĆé”tƒČņ‡÷wC'š“mūm¬jŲ·ƒ^Ķe*éŗ|/°>Üņ܊ņļ)½[‰ą$ŲéUtßZi ÜoŒķłxéõ ”ķ¹č4iwiäs+Ę’6IķY×>0¾øŌēÓ““A%T¹ńļŠ S5D×M:I4[Ö³üoy|Ś,1i» øYcÉQĖ Üž™ ®}JŻnćó üĄÆHÓōI&ŒČÆäH¼”cƒųÕÅJW[ó‚F1ĶgŁéöc™: ĘĻJz•/>ĶcHO•0źG„X†źW±ū:ĢV)G qĻ­#”’„T™ļ7[–\†Iź1QX¼1>ĘÜpzV2-@Ń»×%JÅ˜ŪŒö­/ _Ė%ō0˜ĢŅŗäp}ØR±n$Sė -Üū¢£įŗqROū2ę;»DϐÅcė[\É£vĆV³Ōw"f)±Ā°ås¾+µ¹M:öéä1N¬8å“3%Ź„ĮC†®Ž{i™ą™_t°š0qĮ¬dTw6%Ō­˜Æ˜‹¼€3ļ\¾µio6£o~ŠŲ.ÓĒZHŌ§ˆ²#ŽČ±€ĒhÉź+¢°ZÄšĀQ¾ö$UÅŪR\zZ,h¢D,WęĪXõØ/4ū{ĶEŃĘGń‘Ó5i•m?ń-Ä:Ļ ¢'‰ŽH^2µź:=öŠÖq±ŚÄ”Œm=éŒä|K­4Q³Ģ¬‡)Œt®_J»‘Ė Jń1磮iIhIż„ę!!±*{c…wy4ƒpDyĻ'­`‰ōi„\ØIUŗóŠSā·Ņt=ä8ņ”tSźiBŚfššķX÷v 0+Æšœž^ ńW•ŽżšÕČg©ßxėGÓįO½øQؕ8å±é\MĻŽ¢ŌĮó좘FHLžź‹TūœŖ]O<ź!f†0ĆiĶkj¾ Ī”lĶjóm9qÓ½@ż™Š[xN]” ·€«œäי]ik:«ČÉŻł{3Š4Ķ>ėF¶»Inbk(˜äÆFķ‘\ŠdŃõˆ#‘BƖp²ŸzøŹÅ8ō4SE‚ßLÓe“ó%‚UĘķ¼@ż+ZݬmmU%qĮŗ•-”ŽÓµČuiZŲ'–ąpj“\°Šę%t*ŃÜūR2’±ęZuŌ÷w±pE…'9’8­]M?³tĒkE&UŒžM4Čh£$6ī—§…UKżāGSœœbŗ:ĀM>Y‘šį¹^xé@ұĖė7ŁNt÷·zĄ8tŸ¢é÷š;]Ʋ#˜ķwދƄsµåĶüģīĒkqĶļ]ƒ4 CR²æxT881ĮĻzF±=oā>•†—¢5¤Ąī),`~ń'ęéӑłņ=GFŽśĘEÅĘ„Ć摊 Į³éŅ$p¹k[€Ž[³Œo½wŚÆŒ'Š­fƒF?j±n ągwæē@ ²ÖŻ<;q=Š x䜨ćēä0ź·mؔ’wøMŪ‹cūP}”kFč7 AĮm:O±L¢Dr88¬d‰–Å+?\<΁|Ų¹'½li‘Ė®źÅid^į$ćuż*©˜µ”Ģź~'š_3B°½}>U™Kȱ€ßJ±ł÷V—>t~jH>fœV‚Œl{u÷Ä-. Å=±™v.ž3\V”«ŚÆ˜RąHĢ:(8ϱ Ó‘ž¬"kŗœĮ.Rbń®7c­txa“ŪˆÕ ‘‘Ąž¹ MXėl"•±āBĄÜԚ†ž"˜%˜uźh15Žœeɒ!:Ÿ„a\éz‹ź(ļśY#ĖŲr@Ē9­¢IJßBƒI¹’H¤Ż»Ÿ„l5ēŁģ®£YŅŽē¢±*„yō÷7WŪ“ó“匾8 ļ]ÅÆŒtė{mD—“b&"ēīŸzĘKQži >­Ømžo6yœ°PHŻéŅ¾žš§ĆmF+K;¦šŚW–7”+žP šsėŠ’ąĻ$³Ó’¶5ēÕ”_.'”*Ÿ”`ƒśWyą½OLš7°·Ų÷BŖł@iŲjö<'ÄśŠųÆÅqMžŚņā>ė)ź*“ś[G+­ŗ9x )²õ½ī±k֏ exnkÕōbėLŃijHm”Vǘ8ŪÅägEż‰£ėGØy®Óæ$ž™ėrĘÉtZÕeKk§·Pc 3‘ėž}h)ĒCÄ|—ÖÆn5I­m¬%øēŒæf¼I{Ėha’FEÜeĪwÉ­iŃĶŻėŗ4z\–ŃÉuż”+üßÜ)éõØ|3ykm:¼Ė*[¹ĮĒŖ“°$z”®iś=©žFKĒóŠįõ_E©‡·†ÅąŒŒ–'„bZ‡sŁć+‰P¦qīk¢±[j*²¾īż)(Ųģb¼‚Ņ9f*>ŠŅ8ĻzøÉ#)&y½“y·†LR; óKŖ³Ź`š1łōäPēŲjĪLšĆÉ,’^F\mČĄė]¤v»"(Df>šØ7ŠŌ›P“O¶‰¤tMƓ¹ŗgÖ¹‹%š$‰ŒüĢŲMßų¾ĘĘŅēJ[h§¾WĶ,AUōǽq×ńMØźw&Ā7•fs#I$ćż(…kĶcOÕ.š9¦†(Č ;©ļż+Ó|+©H—‚k”7 둁ހ:ė³i°„ՉŚųčOS\dŸ3lŸjV*œę€#acāč3LC;°ĮŻļ]‡ü%cgwēCv×dżĀ0WŲPķõ®ØŗŲ3—OEŚÉ×cŸē\ÆÄ9ōėŻā÷L{YßĖŁū”ü@`ž Š3ēIt»Qįh¼R'ÜµČƒdk““ĻŅ “Õtłāī ČĄVX<ļÄZoö¼ŒŽcWŽģ ē¬ü%p³,³.Ŗ‘PąR‘“}h‚R­ļU¾R{UżĆšß» Į€–v­%ä¶IwąŪ]C_›Guķ’¦’“€@'°õü+ؓĮ6śu»X³•ƒ?(Éō„ ‹ŗöö¶†ņ1lū†AŸz‡^ÕeµūE½‘ o‰ūŲī*@Ē±ÕŽęūK±ĪFĪ•ē—1j2j·|l0T8ĘįHØ¢=J{&šĀĆŹEŚŪū{ŅŖÅ♤ōÅÅĢ{ĻĢüh·Ōļ<-·E³Õõ9 C d³)ł„įź+ń MŅō5KY¢Y˜ 8ĖvąÓLĻ”į5ßkŽ;ÕōŪżNęk×H6.ćĀÆ~”é'¼k„k ‘ī\†>µ²døcl&[Ū‹„yb‘šøčҲ¼C”ź mg}=Ś[Eö„bģŽ3÷GéD¶)\éīµxļ-ķ·Mœæ.Ńģ:ŌShė«i—%Yc¹Jē?ұ±Hā,t˜,ļe²w‘ąå™ĄĻ•ķ’t6ī įҦŠÖ)‰|ģ8•½æX|ĢĮ»×ŒšŸŠ“m7N[ė»E å~U÷tķ_=xĻÅ7š¬Ø÷šzi« ĀČHfd~”¢O×2ücøńméÓ¼#Į Č"{ˆ V¹$ćē•˜ńᯠŪŪxwF¶ūDi}墺“'@®§Sx{G»’ņeŒŚ0Ń·1» :øĖ”ģx…ŸģßćoŻi—‘źšOoYfžr=«ēßų>ūEÕ/“SH¤Š;Œ)É*ōoŅÆ•¤„“ω*Ó<=mö›ū‹ éQ\±Ć1ĻÖ¼ć[ńĢŗ}äćIøóJŪŠœ·”¬ÜlQŚü&ųƒÆŽ^ŲkWog ńŖ¤l\ŸŅ¼ģüń,¾7Õ/-|CnŚl³¼‘’¹™¹ źjÕiø6z~±ą;OŗŚiĶ…@f—¦öļĒÖ¹½_\Óō›)%ŗļŠ$+c„x¢Ök–×eMŒ…-£Ī$9ÉÉ”’\Fm¢³Œ;¹'5‹] ¢ō0Öóģ–b!>aŻÓ“XzÜÖóÅiå…ŠÆ#֑—r%r—…/ µžCšŻ”d‘ĻjēD¹Õ.L1C2ŲņFG„YŒ¢zŸ†,č7ŚG‰a±†’źź?8b£¹Ēj ¢CšļL}7S†ūY·‘b’–#w%°kŁĆÖž!Ō®5ŁÜ4Ä`Źć°=*y”Š>!Ó­tÉ,cÓę .#ļ\cŽ·4 j:¤h0¹i=1Ņ£”ϐå'š^­l÷:…õ¼vźIČ9łOsé\ŒńŚ[‘3n‚<Ž„«%c±šŽØ÷­¶›-œė§“E–Tgōė^Ķyyįm*ĀĀóLÓZéˈĖD2ßV>jTŗ‡x£Å¶Z¾—b|?¤‹}i[÷¬2X÷Æ)šŪjšźókŗ£<Ņ»2,sš¤ā浌ūŽ&Š|'­xēUņ£,ūœ;Ó4p}k¶ųaū6ŻKā;=[[ŌUōhäR°4YĪ;±źh”‘¼gcŻ~ j}§Œī<7e`gE#‘UłėķÓ§½h[iZTZĀĆźŃØvüė'"½§C]tż?PžKhļ­ķœgh'ļó^Sć®c})o8yƜo÷ü«)HĪr9O‡Śåˆń¬7rƲ~ģ—\®;‘ė_Kxó_ƒAšM¼>†Ę-~xäI/æ|r3I¹xcVńn‡ŖĢ5i¤¹šnH•ĖŖŽūs^ń¤ČfµšéķŲ»ꇽiģˌ®Ļ.ńŽæ}§­“š\hҼ›„‹ęöØ®|/kā»{+ķBó˶–ÜłĀ%ĆĀē8_åĶgbŃ„Åiõˆ|™īc‚H'•Arżr8¬­KT¹¾ŅĶÕIJÂA8ö­ ŁĮŻh‚iq“¬6?Ż~ž Réšfg¤IpŠ*\!0yŻī=:Õ_KĖŠē®oäkŗPVŗœį=°­«AzRg ÅóŽzUsXqV3uM,w,ŖØĶƒĪj-7Āw>ZŪÄאHXĻ ~•#'Q—ū.Bń²¬ˆq“€F}ė§Óķ’¶ģ’YŚå!휜`SŽåūC·érŁ.”¶²Ŗ¬jĖņŽ:·½ké‚Ö³°BŅ]¹źy,>•±:žań;ĘšéZŒžŅžAo€³I wŹśŒ^Aį½_Qҵ«]COI]@ĪzwĶfįŲ^ŹĒ²ų³āUē<±=¤v¶Ä!,A9Æ-Ō'¶Œ9D•˜¬iéńŚ\Ųā)ž¢MĒ9÷„›E°·‚Ūȑå¹Ü768¤ØxRŅ;&f øŻ: ś#Eńž©mm5źFĪūX»pOlZĻVdāĻEńEž‹cc¦ŽĮ:,¼Ē½Ž|ēėśW—ߏś‹: JD1÷}hŽć‹čP½Ņ¢ž9­ŒŒ``>erkĮ>0®³me™„jSıĻy£ÓŚŗa¦©ž=i¢ßĶj…¶·,óšö_iŗVbZ÷M3Ÿq~• ¤Ł¹k„ uŗŌ®#Ūh•Ė€~˜®£Mń'‚^Nf}Goļb”'ŗŒśPb›nĒ ńßÄwVöVŽżį§¹üMqpčf±²K#szØį™ Ć ˆ'O¹Q¤b} c.­ż—y,’bįĄ,XnŻ+ŅłĢS4†(Ž3Ėā5Ā”O'ų”¬ź nf“•īnŁ7g9Ę;oģł­Ī"Ōd¾¤”šVYW0ģ§Ššø„e”«āĻźž)ńāŻ¾ĢƗ`(ćÆē\ž±ą½Fņą“,¾h>V N;Õ#U+±ąæĒg „¦„#\_c DŸ*ƦßZó_‰Ś­”}ža Æh3’ƒpĮīqI¢Ōŗomāa‹bŖĶ3pLjÓ“€C$w%6Ę_sę¹§mÓ|hgšćézRļ1»4Œ ĄŸlU_ k³“†ßYp!có1#ŸéXÜgKāXü„YŻkCP{uŲE¼fN»–+ĮtļķŽK4+ ź¹³Œ{Us³+’±„ņēDY>ՌƦk9£ŗhU/ä[wˆäŒżīÕ,’”WÉj“ĘīĄć½z_‡„‚]>āĪóO·ø3(ŲĶÉZŹM…ģvś/†#ŃŃ%ÖWnv÷G„v:UĢ–‰rˆs‚z`ūRZ²”Ļń+]Ł\]ĆomŲĮ‡µp> ŅÆ/-įŌ.<ˆ !UŻ·ҜDģwmā/čśZée¹VŪƒ÷‹č*ÆaŖ\ĖŽVŅ(w„Ÿœń[˜É\»§]%ń¹–apŪ~ńŒ§l ÷ęø6ē]ńgˆīƍŗÉo“}Ģöō©äDØŁŸD¶™§Łé‘ĶØC3üĄ¦yGQŸŹ³ćų³¦¬ńč±Z4P€qpņgī⧐³n_é/lÅŗt.eaµ}ĶC.£‘¹£ŪĘŅQķIĄŹNē›ĀCg”ko#@g†MÅß*µzäVšk^Ÿ{Ō7KɍJćÖ­G©Œ¢sŚœ m2‰ŁÓv0«œW~°Yķo,ˆ$3(¶Œ]Ģ$ŗ —Wŗ½‚8­6įäu®kÄgö­ŗ‹¹3>\Ał iǹōČ/ ĮŒ^\£Č5M§ņ¤äTh·n$öśÖŒĪ5ČDīĪUāĪģćµL<Ą¬{\‚FzR7Œ‰ /b…°ć&ƒØ%°$hWī3I “iC¾UĘB.;÷Öi7p ņE "…Œ{ Ÿz˜ŹĒķücöŗ¶ż›æi_ ų#Z¼Ōģ¾ųµÅ•å«Ėŗ(®OŻvēFq_Ż]żœ6®Iķ¤A,CĘ܃ż? ™ģ‘Äk:tK §ćņƄ~7hĘĪ(„ŠÓĢ1Éå¾ÕūŹĒ?OéX˜Čü¢ż”žiž š§‹ō¹4øu)ę‡÷Q:=ńź3_ʧŇóxĘś‡†¾Ķu«+K¾Fzž¤Æ“]Ä儏0øņÓlmP’ œÖ<„«$JO•Ęē뚣–¤ˆ£\9#s™ėšc}Ī…»ńšøĄ‘pć e°xżjÄĒ2.ł1ĄÉĪ*YŃK̃Ģeܼ6M_P@Ū1ŹķČö$uEŲu»$®Ŗ”`Œ·iūÕė’~'ųąĒÅ’üLšńśk«\©?ń÷ļ×#ŽkGu”ŃšŻßģ”ńÓĆæ|+ᒈŗ-ŗŲh¦eš8e ÕNG8ÆÕRµ¹E‚Žź)P"¼l§ļ)žµĖT|ꖧmojö“ ČŻÕ‡½:š^ŲĖžGĀ'ö‘šŽ‹sqŖXŹ!ÖÖÜ9FQ+dąEyUÓ±TßCł(ųqāˆl.ž;ÉÕuT F?2sŒŲ×Ōŗsź6°]Ǧcެ>µącé»ó3±3fKGŌabض”Æūv³§ÜÜG;ī˜ČcŒƒņ‘’źžUåSŽ Ł×Śźhh!y¾$žÖ»ß]jZ&¶Ė{wö«+±×£Šcė_G–ŹŅG5xŸečā mģŽ"a·{µx‹ē”ˆ0”śž1ōƦ§Ųógh+|ŃŹąZģōø­4iķ–H¤ņ_ •éŸZ錶3žQ¹Ņėö¶7ŃŪ^Ū•ōŚ£ŸĘ²ģę‚Ī'B98ĻLֆ'­$ . l™Ęåaź)šd²łJ“øgŪĀém^K41lą |ĻX—ˆōõŚ–„Õ±‡Ü8'ښW+hŚ ¹óŖ£øéS^ßXŪÅ$łi!<°¬L¤Ź6óD“ŽÅ $€84é“›«­=uKG‰[yB…¾aļŠŚW*ŲÅ2‡Ćæ–ĶžõŅ$“ÅhŅŪ³…Žj„aMŻÅō’%ź¬mæЊō;ū-XŠĘŽnӜµ“µ5üA{e®i,Š"óĖ¼’{WˆÜųZčø¶‰×ŹÜ ÜqϽ {3ŸŠHōkõ†å¶¾kŠ|5ķqs<‹5¬øRJäGžЧØ^!ŽźŅ2!…óŌg”¬] KÆ·D‹*4ģ`OZ‚Ļ]“M“I1µĢ†ŽįĻŽćüB–Śƒ4ńČ»‡”Å)l6›ØĶ£Ü+[²,Ų!w Ög‰5,ŖKrß}¶ž•Ęqķp0Ū#æ½dÜĢĢäT§ÖŖ2w&K¹ŠųvQr$7 Ę`“Ö»Čķ æ¹m³ UQŖx&µOā},YiV×(–óČÜķ?xŒr{óXw·PG‰›Ļé*7LśŠ]±Š±mV9Č©®^ēÄ7ŪÉ„\AZ“„””åĻæėWÜēØĪZ!=“²L O~õ™q=ååÉ ”óŲdV–0±Øšf±§Mk{uyeŻørō»™žŃl¦Ń J@ۃÓń©•Īšp4“KĖŲYģ_įæjļ¦Ž3”^jŅÆ—i ÄĪ Ēō5‘µ"–’͘“. eHēul5ÅėiņXŪ…>v7 £#ž•pfRGŸéšMĚ»­Į#ęäwÅ{¤ś=”:1™&k£MĢķZ_Kxž§7öŽ£oöģŹ”ĘĒÉČĒzķWZM"X{• ~Ž•‹e)WgQÖoüB·É;ŖĘwž ÓóØŽ8Hū™?ZFœčĶøš;-×R²¬8ĆJŲ¶¾o!Ž'd“)õ÷ ĘDŒ× s)ł›q­­{YŌt-:ŻPm‰ŽF[ļiŲ|¦&‘ćÖoķ2õLķ<`c)϶t»›{˜ę„£¬Šw|Ƶo ˜Ō‰&µįū ›;k‰ĀJīxū¼ś×@-$°Ńį¼µ“̐”{­k=Žc”»ÕXų–+[é„–GPīzķś×_k§Fub󳪐ž‚²;ĒĻå©·p_¾ē©µ§ĪUbøµœ3x=(-Č[ķFx®~г9—ī§ÓōūÕ.%8gĘ3ރH5ԃ[øŃōhō¦D¹aūĢK{žUŹÜx²śDĆ34A†y¬ł™Ńʉm~Õ}pŅ“ŲĮ®‚)•Ā恐e- ©ĮŲßÖ5]2[ –ŅHē¹d(F~ę+å]ynĢėo–Ė1Īk>tiģĻMš>Ÿö{(`øĖ"üę¾šę¹ce„Ż."Ī#  Ī=½*e.ÅØŲąüae5ŅĒtöģĘO™žöÆ&{HΉշwć½@Ū±Ķ\Köx兝£ŚŁą`š<;­Ū]ź"ŅōłcųIž“¹·hĪŽ-|[°\sÅspY˜%<†X³ŪŒŠCfwˆ- óŚx£’+4ä’ėѼ °¶{ˆ\B®›Ėz(=oWū{µ¶ē0ulō­į}"ÖiŁŲŖ2¹ä1 Ņ0ć_ iڌ·W6zćiw_gXĢJNr;ØĮƲIåŗ 2\LŹÅ`APmzÄW ¦@ŽĻ Ą#$ž+Y Mj%ą6ģ2L‘ļA±‹wᣦb0iAķśśVŸ‡ ÖÆöDo;vGSķYH¤Œ‹x#ø[=IbXݶI¼sÖ»OųßO¼ÓąŅ]é’Øß*øėŠ|å8čmµ¬šmµ¤¬ęXc6ć< ņļŽYĮzóÅ Š6Ėp9ühę1ŗFÆ·iWaē8äcß\5¬™™r ~OOJ„#-"GÕļM„Ć»$‹ƒĒcVų{„Y[COH!•Õ«{Õ¤Ž6F–x(Ł”éKc¦Mn’M!2+r¹ģh%LĻlŖŽwF9Ę+7IŽśmröņńM½ˆ CĆ’“@Xėć½63īœ~uõŖ¾!ńĮÓē-”FZŃNcßĘ~¦Ę™ĶkTńMĢŽĘb@3“+ŃÓÄLZ1µ“‰ņįDŗLP_!ĘOgt%Y M;;gi­ˆü?­G\o„aµ č“0ödŚ×Œlō :h4»Ė{ŪŽa— Ÿ(‘ƒzńĶ{™L÷+“+;/9ē½bćm t±ķZ6‡±’ćVd3)M°ķ’Yš„©Ü6ģZdG~ń‘ żYŖŒ;“'ŲńČ¢¾W˜Ž3yļ0ƒĘG„t–-r”VY §l×B‰Ė&Ļ@šÖn÷†öXĻ’˜?Ÿņ­_=žµ¤\[:ļį”ō#Ņ”¢Ī* #k„¼ˆuZŽÖķ§Ž3Ī2j\nl‹ö6²Ixb+»Œ“ļVÕ ‚e/#Ÿ»Š×S źŚuŲ¼,±²¶1Į=hę¾$žź]BęPVw.Ū®Õ=…mY^E•m¶ĶƝČūĒŚƒHĖ”ÖAäšRKøüø×ŖŻß@–É0łß©Ķ…{;mNXÖFłcßŌ÷5é6Ļg§Oqv»$ÜO|zŠdėž"KmļO•É9Ž:ę¼jśK£i’?īóón9&ˆęFę‹ā+Ūc†I™¢N@ĪqZ"īēUŽšÉ*19Ķ R:ß Ņ%–ņńmČ Ä¾~µµāj¦3m3²mśqLS/YG2hžk@õ†éHnµĶ]Ž ¢:s†9&‡ädméšmœFĮģJ.1ę–9-ž«„ŌåĻšÖÖhä•S'oUŪüō¤3Ć--õOł'†źāź?—{FvĻ=ėé3f°Ųؒ%‚R¹8ž*”InǚIšžļZŃ® ¾¾{kęø/ĘpBn$ }0+Õōm&Yi÷‘¼RĪŲFHē§%bć#›ų§ā8¢ŗŅv[“2ƒ°ēćæė^y¢źś¦”%ė_Bز)MĄpĖPlqÖŃĻgŖĢģ”bTwŽŗHLw24 «·Ž`{ŠzŸŠ kiōÉ-¢¶ŽĮń\Ü:a%圉$NsŠd9šņęĆt$ž~7.ѐEvÖ ņxz+¢&f™r6äėŠĪQŠQ—C*M:ך©“!¤ ä¶:Õ8¼Yum¢Ü^čļqmu*ä ¤/§Æ­8ÅXńuŌä±’iwbÄ·RMtZ|śĆĒZµÄŹŅ`œżŹ ±ŃŚi·3ź“} …uļā®ćEŌ£GøÓ¾Į-ה@.Ź@^:@¤ĢóuiaŖ‹¶Nü|ÜפjÓĒ.$ÖqĮ#1Ģ?yOµL[źg-Ļ6²×›Hø-"É+)aŒļ“g¹ÖęUŚ%vĒj¢ |U·Fеkü„xc-“ž ś×‹čž2æ¶Ūöō‹¬©œ śf­JĆ75)oo.m%0ÄƅükņßT¼š$V1`¬3ާ­71x°Ų[ź–ś6› 3ˆÄ{ŌäHą|ĒóĻåTl¼5xcø[ˆP„É_āśŠĢøÄō/ƒŚ—ü$V^%օ…×Ųē*¶®s½}O½/Ē$ŠõķGC°šÅĖZH¤-ź!ځŻ§J lxßˆCx²*Ā’dqԃXÖ暯ÜfĶ|ĀNGPzÕ\E»žĮemelā7.§åS§ÖøM2žĪóP¹hłĆsėŠ’dµ:t­4k0  mtWć}{Tņ×IŅo–ŽÕ%HɓڂŽŸįUē‰/Vž+‹÷},7ȎG½{ī śŽ—Øų~1,2Ķ ŒČ½‡łęšW‡õ AĪ .¶€b@õŽyšTś~Ø'³‰ŌŪ°TčļZPY_LŚ$v 1$ći¤HŪ?u]2yv*1iĀŽŽõŽŲ^h~(†K»0·6lL{±éĒzågto­;[I C…ćīŽzŌ1E>§Ŗ^[“F°Hr¼8Ą<ʙgy©\XŪ[bĘܤ{’ŻIĒ&¼Ņ;ø§¼¹U¶ §ļc¦i„.”6;@·Ś®2*{mG –P$jŹO?Ņ‚āĪa<0ė$Ē!%nAƒ\d×zĪ•Ŗßh¶0ϰ‡`å #Ū­4U›ĻĀ^#³¹iuS!iČ|?LśƒZ֑ŻX_2fĘAąPY&Ŗdx%·™²q\…ž’ÖŅ*]#I0?0#½&m­ĄÓ¤1 Ź…?t{×+.„Øé÷/8¼*Iśž+(½Fzē‡|GsØh×h–O“F73(=¬h|+-Ī,q[I”‘‡kK”ž‡CÓ$Óīe&ÄŹčÕē:–‘»Ķ HœćÖŖär³ēŪ½e×Tx¢˜¢Æ·šīluŌŅžuyHĄP܌{R“×¼Wįż/1Ž[É4źŪ0¤žÕŁųYįÕ,!»µ“Ē ČWź½Dž…EXė,īl4żQ­`ž+K§M®Č‡ß,ģ±Ėr°‘=²¾¢ćo<k5܆1zq^ ā ZN–²+ķ02MKŠŒ¬|’®kśęŖÖZM֌,¼²Ų•@;ĒūF“H“µµV¾øeūTL# ęCž™¤T™ģ~µę‹q,Öļ –Ld)5ē:ŌŖ ;5ˆ]ŖHʼ‚:H̹¦Iy·œ‘•q ÉĒ ėżkŪtlõ½H£˜ £ ¬²qœg8÷āžĄp:†‰œŒŹčŃĘ:ē$ząu­&ÓÅ7–1K<ŃEĢŖ²V>ć½kp0uĖuŃļ FK•»{WMįĖū„ÓÆ­geŲ‡*=(Š·Ć–:*ČŅ]FZDm_Jõ ģt÷’x%‚ čJ ĒŹ(k@<æÄk5Œ>"ÕlÆ,“°³“¾ąįÆ OŻx»Ć¦śå ·ø‰̬zdōüŌHg—kŽÓķtYć¹HĢÅWjäƒ^[¢ų>ÕYŸ&ÖxEQ÷A®Čö+KŻ2Źpqa¢‘É"¾y×|‹58ąšQ„Ü“¾[\2ń·?Ź‚e-O#ŗš­Ö™­ßišā$…9Y0qÖ¶¼%įŸ^±f¼ŽŅ(ÜĪ3SȅĪ{¢xƒRšē‹Zٵ(.`·\”Œnś„l’ĀQy¬E%½Ö٬głŠ7ń0Ļ_օ+÷=[ĀßcŅōĖk+kˆ¢`_œJNk䒌¾-ŽēQ±fŒĻó$Q H<ž<”J6g ^čöž4š-“šG4ŚlžRĆĪ xlśW!{įųGķ –+X5)dXĖs·§>ōćęZ8[o jÖ‹ŽĶq{e0hŃ8Ū~õķžų”›-č‚tøŗƒåĮ\œŒōķ 8Üäõ_ų·Ä:ō°6—`‡lPēשcžü£{³Åu턦•$kϘü±æŅ–«BTlqšv{įŁ¦¶“¶•ŽyŪ$““‘é]}Ļ…uȵ'[ōk{( rÄŠćrłŗ5%$ŃŻc{kTµˆ•ڹ/ķ^ o©4²*\H p1ӚŽ[1Ó_xśóC±“IVū\Ó.cUžöxā»ß Ķö XŻjŃĮ>ødf;FŠō&œec)LčoĒĶž%m#Dųqc;ߣĘĘ~HĮ=»vķ_Qx[Å>ŌŠō6“kʍ–ī3FO~Õ ½&ĆŶ‰e¢kmĶ• Ż ÄX:†Ž0 tƑo< xŗLKr—¹;JšcĒ­I\Ē«x FœŻi:]ÓX.œÄ,²4crc^‰āø|1§ĪŚ6™`–Öū³–¤œzžÜŠ5+Ÿ7xĻ^¹šćiŚ=œl.¦fĒ8æ—^×.5Ł4™ŚÉlŚ%*vb9'ß­L›čRG¬ü7Qŗe¾£m,ŗõŅZĀź0Iž•õ‰¼a£ü<»Ōü50¶¶«Ķ4Q‚ń¶;ćž9ā³mõ5ŒÖ„ŃüM«ė¾=šĀŽĆ-ą4’!1’;uÆŅ5Fšļ‹5KBśī駈ˆÕä%Sćg„[XZÅ9}BŻ!łJ§>½:Wć! ź)}g )Āz°­c±”™œ¶ķui".:{Ń’„nx”µ¾)½™!ź(·PY˜Ž+”QeL tūūÖ½ōŗFž#°¼÷Sū̐Tżj­Ō mĆšźV××¶£;0;Xņ~‚»æ.ĻMÓ„’ĻČŚ€!Rų'éW°Ņ¹†“ūķSV¶ö&āBK)Ļ ó®·Äöž³ŸX’å­ļUHA-ż1žłśØŁ!ŻŪ_kWW =ŅÉ©HęF•ĘI'¹Æ@Ó4MGH„6Ünõ㚤ŠjŻ$)4 •ŠĪ:W?q$zāĮÕn21YŹŽg+2;°Ś|(Ä®ē#å=ė­šNŸ©Č¶…$ūFß1÷‘…õ˜¹hÓō•AŽ0}±Ksą»%¾‚Jr茲lW8Č9ēčt{Ō×4dŠ[»}–ä4A›œōł ó»ĖūM÷R»yHP2I'&‹Żō1"ń ÷ö…“{ö==rĶ‘’ĒśV?Šl­µ»©5 ÆV1™¤čŲõ­ ŹMßRŒ¶0›8ÆÕQķˆŲ:‘QhwVW:“JĖöMųŽB„h]Ė!ž×ĆpŽZI“-Įˆüsś×“xOJ}CT·Ż……_qU<·įI»ÅŲū7Hš–Ķ9®o¤ū2±+i»&:Õk(m¤¼ŗ¶ŅÉó ų%ŸL¶šč²Õ †įJ³nfĘ6äžÜų‡Tš­­ōz°[n "<…Éō®ßÅŗ™‡,—JŌemKxyö€Wo 5Œ»]EҬ5;+C,+2Ūy|‘Ń«;O׹K×¶šß»pī}+Ÿ•–gxŖŽ=Nx”Žļ“*ČŻ]'‡ōi“ų’ߏ’ pÉIt"{—¤Z<÷0Gū¶u škĘ|e§Ėq©;‰8,Īā*L>%ŹÉ¼ß»SĮĻŽ®ēLŌocC œ $ع^;Š™FäK]ašŠ_ŲŪI«Ü»Ūƒ #ö»{ļ¬V+¬Ū6gńŖ±QGĶ>=]kQŌ­ļ`˜½™;|¼u'޶¾ųL6³o{Ŗ“Vvā"ėĮ%ˆ$ąžUJFš‡sÕK]>Ī(¦`J¶3·µ|«Śž”8{÷_5Ū%€Ą'ŚŖF®6Gs„i)ė‰%–v+Šž×U„ŽjöjDh ĆÆŅ¢ÄEēŽĄ·Æ1Öē[i]ŅE21ČŠ+šN…”{}Øė’¢ZŖ’Šzōč?T“ŪpžT>RnĀjŁJä9‹Ø‹{‘Į#®Fvg-Ū„tžMDÕĢ׉½ōČ@_ŲS2ęŌ÷oiįtXŻRTóbĒU*zšłOÄ>šŁ£”øc‘“qA“e”oĀ^ŌŽŅu“Yn®73łg®}ė^’UŌt].Y5mÕĀē”ō«ä3œ“<¾óĘŗš³Óƒ6ŹKI!äĻš×Ųßå‚ 8žŠD‹qŚPż;Ņ”lsJl«5ĒŲć’yPK30^z‘^}«ĒżŗK"H³ø€ō«RźK0baŠXC!2”‡ük™¼Ö٦µ=d)c÷~”Ō‹ŽēŁ:ż„ö÷·eŅ2¬ū£ĄŪ±qŠžµĖy‘O3@ΰ̨FūÕG8źXżį…c[m„r3ßń£Ģ,!VPøź1҃²,$‹ ¬Ųe?s©Ŗė:+—vīp”­ÉÜuµĪ%Xä ŽÜ©'ƒ]¤†ßiü ćƒŽ“Įæ‡|K>‘u³£Ž\ézż„æj·¼ ‘ ®1ųqŚæŠĻž uū\iæµßģÆį›»ūūgų‹į«h¬µDW$Ģ”ßĻ<ćw>‡Ö“Zī½õ+`Ń2Œ¶AÆų‰į(u½&wu 8#ÆÖ°3‘ł§ń#Į¦ĆPŌŅp$hH!TšÉģkłõ’‚‰žĶĢńdž“Ö²(¦åe— ŅD9+ņūӌŒų½fÆ{äNDf6?źČčjÕ߆>Óļ )”»œq[F]IœTĻe3Ap«øjaYÕ÷²žüńZG±„KD„Ų;„ś÷Ŗ§Ė·ß&ŠČr‡Ž“š5Œ¬,qķĘįÉķŠt—%åEF1·ų؎ęńØXŠ(#UxIWε_X¼ļ2ŚgJ–S‚+b•ĻßOų#Ÿķw¤Ė}šKVšéŲ4ö­pŁWŒ”9č3_×ļ½fÖ}ürjūd‰‡o§§½aR&ÉAČ[h˹Ęō¬żsĮš?Ä_x“į׉-–ēĆŚå«ŚĻć !R†{“Ēåé^uhhtGsüę?næŁ§Ä_²ķ#ćŸėZ+i‘ż¶k”øQ·Ļ€¹) ü¬ß‡-’÷J²¶ž÷ķ0‚»ŁN¢¼|t/KŠķ¦JÓ[»™­"q)¹“ō'­Z‹ĆŚ­“֗ÖóĪįX«īł÷zēóÆ–Œčå<ÓĆ øń=ȇWKĪ6‡=¦E{č·K[5uI#ĻÓ’Õ^ ¼¶f5)čŃļ~ńDZ’iÖBtpæ7ŖŸc^§ā«H§hu EŠ)_ŖG’éé_aE;\ńkčĢ#S(ģ’Ÿ*§Ö§“Q–]ækp¼ī{W\aÜäs+[źwŅ]łKpŃŪō 3õ­TÕc“ŗ/#gµrUŸÓŠÖÄ6WæXfh_`u_»ž¢Ŗ¶H™ÜH]Ŗ?Zj$ß”ŚĖbŅ)gß ™w ąī­mm®är¾d{¹'ųŖ¶£sAÖ×NÓāŅ8ßīąņ}ėŒī„Q1$ÄdֈɣÕaÕ4čt;Ia’ŽIöÉӟZ£¤«jŲR‘¾N@”K°X›G¹Óē2ČüÅČ!OV jö"óū)„˜Ęx~t„. ‘„i„wČ1ÉĮ 5qöĻ­ėZģ÷ۿ٢ÜĄĄčGµO5Ķ#nnųjņYg»I¶Ī†LŖōŁŪüjżŽ„w7ķ nļc²½µ,Ķgs"īSķŠV¶#™ßSÜīü9¶²ķ›ĻBc&<ēÅyՎƒ§Yk:}¶§Ų8¦HĒzĪhŅ Ūń¼7śž¤’iÆ=ęöī?Ä:é^W£[ėī’I½†H^)˜(|ņ?Ķ®… ŗSJ°­Ā hņCŽ=Ķsž-j66Ėc·‹ Wˆī}Me(Ų=ky-ć gĖī@Ŗˆó Ź?w­8.¤Mō&° óGdCžkŠ|>/mʹÀĄĆ9ŖFŠÖ׬uI`ŌÖėŹ¶…Xy#¼÷ü0:įģÖm^dŒ,›rAóZØ“:«{?ģŲ–!»Ö’d[„i׌“ŒdÕĢV’Ö Fł”„ü˜<ž6Öʛo™;68łæŠ€ę5u9S±61ĀŌpī=k'GžK[`“‘!čŲć‹N„ŻīCx!¹·X-÷šäšAļüėÖ­õ; «K½)¢xK4!ŹÉļXø›Ęz\óWG°Ó¤xlš<ēxĒaN‰“›m8ź…ōVŖ PIäžÜRNÄ“ŁÅĒ«éŗmÕäĪ—O-Հ 3ÜcšōŪiāæšąˆ\|Ҍ0'?„7&C‰Éėŗ šĆcsgzÓ\!&EQž˜5ĻźšO3ŁGpYbą:- ždlÉiy k'M…rrkĪ&Õļ㻚ŌŪŒ0_0ŃS™ÖYiŗ–”ŗ&¾Ģƒt·#°°[¢4‘ƒ™{pmļ"ø°$·'īŸAO“±›VŠĆ½Ž;[„F`ī1€5ڜöX’9JķōėRą#œ‡D¼Ō.šź%‘ā•‹±É;ćQb\iWwxń7ę0Ī1ü_Žk>C¢ēS h׌µ»]µ¼‰ięlOó«zʇv²Č¾XžŌp3Ī i=‹śu®—*Ó0,˜ČĪ6Š‹Äķiyug§Ą™@½—®}kXģB‡r7įū<’_Hą…_åć®jxōy’0’0~{ —#hĮE³Eį˜-/ĖĢ—!‹¼Āµ®5m+Z°'t–©(pvšŁäqß­e'ŠŚ*ČņK¦Šī™|Ég±Üs–$õīO5gY]/Ä7īŃĒ Jx ć„'Éā!=*8§]Ą0”ōŅ» źž'·½]Bģå¹Ć u튮Q3Óu āƒLŠs$02y5åćGsn’`aĘõäzgšĶna7ÕŻÕ“·2¦å\`ńŠ–-/O±¼†ź{dbų\Øž/zjĘĢōŸ ŁZŻ\ϦŽyP$ŠÜ‘Œ3łń^g.ŒėeÄ’F²6KžŁ$ŽĻÄ(ŃXĶ"Oēaöœƒ]Āx®ÖŚm>ī žo,*±9Z r"Ōµ×»·Ž¤ŪN•ę׌Ž•<†Öź}²óŠgu>VeĢö9čļķ•ZŻddLšµ¹esi‹‰q½zPēŲ„3PŅÄmrQŠAČ=*¶³āµ²²¶†ʜ6GŻś~T“čĶ9zœ}’Œ/f"‚¦}„I#$Jė-SG³šŗÖ ūb܂ŁNJ‘ŪčEj†yeę¹/Ÿ²Ö@‘qĘ8©ģ'Ō!¾ RŹĢ3øö R•£m.­.£ŽieAœt鎍KZņ¬ĢQZgųw/QļAēj>I/X:ŪŹŁ+źżĶwžŅt+U.-Ō©mĶ“g&ƒDz©iņ4¶‘”9+ŽÕäś®™ ¼¹¾38€¶Fęū¾ß„“*[iIy'ā„mx­üĄpŖÅpzÕ)ģļŽÉ|µ]²:óVąI$Vw+ĆėD˜—ĆńµµĆ0(ņœ:–ćėŠā'’-"žKA±:šH˶ś² ЇXŻųQÓuCy=ōņ2*Ū$ō ÕE"¬QČ×J̈‹ņ¶_zÖ¾×&²“šŠ'š¦2HČŪž@ mt h7óJ.öėó66Šīī–;9C[“r乙Ī>“ ”æØyzn‰&«qCĀĪĒ€Ö¼CRńÕöČ-gKhĖ‚W$®sśŠ4v6P]^ƈ!<ć>§ŽÆ^Ę#ø†Ņ0dŹå€äƒļS-†r·Z%ĶåŹtŠ6!÷Æc’„r+KQza’HX¾^9éXŽĒ^Įqw­y×i$vč@^¼śÖÖŖ–:L"U…&»`Y°óųP#ƾŻ=ÄļpĪc¹bx=ڵ¤žahʧ|Ü 1ė@>›§[Ü,&įBK“Œö®•t»_²G Āg_ļv‚ć¦ÅµÅ”G{8BĆå@9⼿\Ō-fwš'kp(55ōūķöšĮ卄‚qÜ×”Ŗ›øŃ$‘ŽÅĮSŠSHĻė^–śĘU²½Īõ*¬8ėĶsڟœģY\Ū²g'׊ח£08”šÜ°<ż¤øĒ Œą×i¦Ł4v‘łQƽļYµcX£Ō »ÓćŃ-,.¬”Ś…¤/݉ĒųVmÕ“W¶Ó]Ūŗ ÄćīŠE3ėÄz]¦—0ŠužV]ˆ_­sž¶ŸR¹ź7HŪī¹i83¦Ō ²Š'rī7Iõ¬ŪĒk–’hĄwłwŽ­Ž™żis ”ī,.ģōėg™TyÄäČzTåń5»O"É&õPNįż*“±ĪGRńž©.›|šE¢‰˜ģ‰ßŪŅ»’ ^<^€jW!õUaø±å²?ĻēC`‘Åx£N¾Ōn¾Ł{p‚ŻlÉ>µŃiÖzkY*[OķłvŽŌŠLäõKU¶øiCHx¢¬iZd*¦üʶŖłmåqø’Z ˆ®ü"šäW,ŠÉ<-ÕćķųŌ«ic”[$ņQFЧłS‰I'¶›r›$’FČR{VšÖęÓ¬mD²Ā¶’wnyQķI‘ĖĆ[·¼•­n“–Er ὈōŖś­¾™{ysq ¬1wDƒ3éB5V3×mm ¼ĄČxhŲņµÅė:ÅÖųäÓB'͆Ļ9&‘€[[EqyivĶøÜp šõ”¶{;bžŻe’(ÓlŽ=«.vZŽOįżžœ—ZŠŻˆg9–Ż\`9,?.¦½GZm2{#©¬~Rņ¶AZ¦3ä›’¦³©j70Y>ĆĪo%Iä.x«–;¦t‘X}ąrzP©MicŸŽķ6 ½ĒJć4+h“ū™ęHĪé$ž”›°ŗŲę Ż<­Ł|u#ڹ SF³½Õ$ŗ1ʶŹ1ĮaŽōĄÆą9$žÓ¼]ņAŖ„õµōf•46éöł"_2Lƒ“@-O招Ķv÷QÓļf’Ņi•»€‹Ół×owŖO®yVŽŅMzaĖr>c‚OįNā±ā÷÷—Irö÷cʐ¼x5ßx^K{›9Bܳ0œā«s.nĆc½UįNƒõ÷®’Ś/6Žęmč6q“õ4å„VL³‰pŅ*‚sŁj¼Z¬÷’-ŗ¹’luéō¬Ätv66ŃŹ«zpzÖõĶķ¶“¢ź×·PČ] mŠøĪļ’ViI3Ęģo¢¼¹‚i#+$ą7ĶļŲ×”Ü5ͤM“< Ąłz—téwŚ fi. mćµupĒ­FƒM“³ŠŁf?½–U„ėĮ?JdŽ—HK -V`Ī –ĮūŲōÆ?æŃ„šöĮ””HĢå‰÷6½ˆiVW× ö±ī^F~¤~5ä–zŻįYŒeåaøqڃ)2ģÖda§—Ą8É5Ķ’fź:.­uaØ!2”å·P8ČģlüĄ²¼N Ŗn98Č®s[°ŸPŒ²Z,Ŗ’!Ų1ėĒzĪQ4=3C“‚-&ŻV%ćŒ½É÷«cÄŃŚ2YŻ ¼Ą?ZĢbśī Ū‰¬o-³ ”»”ģkēŸ;[}¾8ä2¾Lgœ`v­`€ł+ZÓg·¹v‰e2ƒ»hcɬż:ūQŃ5]7ķĖ<"ā@WƒŹżŅ­ÅŲ ¼s?‰dÓ“kKMš®Ģ}ūĒŒ×Ń’|ā<+>©Ø“Vko)ŽŅ"äēÜ’bć`/ųr-Ä,a“Ō­ä1lå›5ķŚ‡Ć[K_½¼÷Ńłs[°ŽŪŌP­Ōv>3ÕtM_ĆwWV:…ķīž "Ę['ņ{×'©Å”ūmŌa0ĒŠŁ;ˆĶeԐŁė q4dæ:Iü²c¶G·w⫤Ä .TDZĻhćŽh’öğb‘”¼²Åęž ÆåŸĘ¹[«!k~鞇;O<ŠŠĘ«}M¤Œ“0ūø£Ā²ėŚF±¢Žs4@ĪĪ9c×b—(©ć ONŠõ;_Å•ŃhŚ?. …°ĮĒ=+‘³ų¦l­Ælōˆ<­Yшr2HĒžōrĆŻrĻÄuցÆĢćÄ ę0v|†œż)ŗvo«øŗžlŃJ¤Œ7 ńĒåX“W)³ā-Nŗ¶¬Wę8śĘŸ3>=įY%­’%šµ¶T9åN;ҾŌo,m/¦Õ^ „ge_dĻV„Ž¢Ó»ģ¹’6“ĪŃA%oˆęµ³Óģ®žŁ4ń™%!p#ķƒ\Œw÷>–Hv«ĒūĪrX{žTĘy^·=­Ż¹"ćt{²c\l­ <‘¹f'åķĻJE9­ŚZLDU[…õ¬½JÄź-ģ+ NGN„PAę×Z5Ģ>d`°“ž»½©ŗm µ’¼H£;ŗūŌÕK§Ū’āā!gø+¢Ńģ­ī’G@B*nś{Š]Ō÷“7įķƁy8õÆ?ų¹¤i4‹ĖSØmŁ$C8Sź ö øĖ”Ļ|>ŌüA§Į6’uKˆōÉfޱ'i­æ]x‰/Ņgt üŻüā”K£.2ÖĒrŚŻĘ”§iöšŌjöŠ+1q¼ŽzŠąt7ĀVZėÅ|"Õ.03óśZ¤Ķ9™Ń¦šÆ—h$„dØÜ:ą’ZdŻiW@ZŚ(‰ŗ³Ź¢O±œ¤Oj7mtÖht±“¤·@9¬_ēĶ—u&Ė€ @ČēÄwĘĶSļ!±ę„—įī—’ģÕÄė>§-ČxāŒp#äŸĒ„†Ī7_²Ž ūmB-=-Œ(2 Ī}kFĖW½Ōōyu¹¼‰¬ ™mp¬2½Hćš4¬‰±±­ZI}cms2y2‡`é\.•Ū_;lŽņ¾Č÷ä–”+w;/Šóų£ĆѼ:š|°Ū\Ż"\\ÅĮ^8Ųיéž×f±’ņŪN³3ˆ×ŽųėLÕ#ģæ…£ģž×!¹²¶ŽŽ U,Y€}ż>Uśšņ¶»ŗ»ŗ9ŗi¾Üā“G<Õ÷:ÖėO2ÜéŽcG8r¼g޹K›cT‚]pĪā>[pŒ}>µĀK ‹–æó AģHŽ?Ś®ĆĆēN°±žégc)u<z֑‡p3̉k$“Ä ŗ‚“Šā²<ć™|1©^Ļākė›»d1\d”čµZŠKCčOųĻān„‹üpŗ|³[G¹ę\«. z×s¤OšæGøŌšāiīTv˜½œœd@*N(9“±ČiÖ¾5ń3IØźšā!œ•Ūцs“’kŲōĶ>{›+u*’8ńQ(ŪbH.u-?Ć gē 1mģ3ƒųV÷ÄĶ?Qæ"KS* ‘Š:#JhٲŠü5ć;Ż#W‚’Oø·ToŻ ž‡=ųżkˆų‡ć_ ų[·Ń „®®ŽH’O)ųIš;Š%¢)—Ć?Šš­ \½„„¶§o •mƒäīĮÆgÕ­-µoėŚĢN&‚#ĻŒüÜäóõĒįYIhhˆ“Xķ“]R;T“ķ Aqž{žUó®·ąŲ–ęI!N¶Md‘¬ųsĘÖŚf›uį«{‰ā¶±œzWsšŪY›WÕm“­{Oø¶ŌĆą«ĖlwŖŽšŽÅļx3J‹Ä7ŻÕ‘“RoŽB9Fł×Ī:富>!x½<7i4—·¬ų “ü±ƒŒē¾8”EŹ+”Óė?u OZ‰½Ÿą łl:óŠĖŠ|š^ÜÜ_Ę%d`K9ä ōęØĶ¢]Wįf‹Ŗų°ź6蚌”.ȧża¢½ūĀ~›H°ū= ¶…²²ŗ}Ķ\dŽz’±‹ā›żAā€VUłäÖE®£ā!{˜_…,ف’Ö«r0nēS"ŲĮioĀ–±Gņ–'–9¬æ>e,žRÉ,L;ŸqüŖ%" śĶψ-üaįŻBö;lÆR^Aķļ_<Ż[Ü[źLwĘß0cĪ+žLŚĒ³ü8ńN¢ŻMqØ[Aq4±\H;zŠģ.ü{ ĆØ ę˜ Ā5ģsééDƒŁ3ń‰6µymØß± ¾ł<°"²5Ū=2ĖI[=2Ķ””“ó¹ĪOµtFVŹŁh3Ļ ęLØFAQ޲ļ©g+Z“LÖģĪÜ朤;ž×ąoĮ„Ū(ˆ}•Ņ6ł€É>‡µaxśžćÄĀŅŅŽ:RZAßń5v/œä< ąSņŻj/.L‡–0;b½ęļAµø in±—Č<§Sé[¦L¦y挓­ŠC`‹kĘMއéé^*4Ø-/cX‡ļ˜§ÖƒžR¹GÄ{D‘Źģł'·ā¬i:Ū”?æk| Ga‘¹GoŠV’ÜG¤|HŌle‚ÖŌÅ,j¾Rį@$ę½ 4÷‘I7Ģ—Ž…•³ŌTnaćĶwIŌlķ5;[lJČß3sŌWWyhŚ”’k6÷čČņ(³d…śUĢs~"Óļc½[«K§}8 ó¦psŲÅ?TėŗM½¦™pa™×.]†O­4ģ'"Ž£©Ż’g[éL6$G(GĻ_å]‹ea¦Ų5Ō L™¦>•Ŗ}E~‡®é·ž&ŗ€“·Y!ČE$.k¹š¶‘i£H“‹oµ\ Ś¤žŸēŠ™HŁlAńāŽõm!4E¶“N²,lAij 4·Y•ܽsī+ˆ·šü\„“énzHG9õõØäf.Nå’ųV7·7PŗÜ³Ęøq€Ę» ^éÓ-śIvänēx©”÷8I¦ŗ³„Źg;w•śÖkā9¦¶I揃ņ‚ 7„gģÅĶŠ˜xrŽP”Žg#V‰Šķ<'=åģSø2Ī5ķš=™“#sNĖRK±a5ŗĆql‹ø9Ė{~„.œŗ…Ō—EŻ-ĀązÖvšŌ˼[%½#tŌśÓnnRņé`³0ŚLrstĒ­9ŗgāę½łEŪ$‹ėžż±\m¹ygI_`—ŖØ ʂ½”éÖ(ĘQż³Ķvm&n%¶`ŠHé֙E½SU“’ 6ō wFø/׌¼#Q‚źKLj•ys·zŽ£•ŠųVĪłfÜI+ŝ£pćš®ŪlrΉ“,«ņœśęµ„lg7ŠźtŸĮ©:¬÷Ś€~l”ĮēµyÅk&Óµč[Io“4n$qÉEB:Ž“ń/XÓ4»#Ŗ¹ŪˆļO½ųWšŽO6©­ÜkVŅ\B¬ūR’"ß›“5ä=7Ą·Ÿ`ŗžō^g}¬ >ėʾ6_j:¬±ĮakåŪeäŸhłæJØĢēšŌóŁBŗµ¹Õ Ūb£˜ŻB+ģķ/^y,I%Ņą¶ł1ųļ }üśūÖŃ×ryz3ēOųž÷YøžĒž=ģs±„R¼śTŗVÆ3/Łćß)£=j“*QŠėMä_eLģŲ0ėX?c†YϚŃĖ&ąTĘk&Ģł¬~ ütš5ļƒ<{ā f’->Īe€ł +‰Hf=ą·vvŠĖŲ^˜Éė]r‡cEL§%ŚK”łJŒcUmąS ĘĒŹDō98śÖcP+NB¤i åČĻcPn1̬Oӊ/”q !ˆĀt>õ=£NŲ2ī^v“Å\7-3ZŚMŲ€™WĶ%*ä*㜚ż”’‚7žŲw_²wķ-mcxś‚ü8ń%ģZ~«’e"Y=²GOSBŽĒm ģĻļ»S³“ö÷Zc:ā¹¶“vw£_nGį\”ińOą„R§#5Ź×C9G”šļƼßk¹ «5ŗ• :ȧł×å’LJ&𮹣]yėvѳZH‘ļ甁©Q±ĢŃüØücšµšć⧊tKø„Zxe–+“’šÆ>“»-šÜHłÜ[,~čō­ćžtŁĘj;$ždf?ĒZĮŒ£Ź±Ÿ1ćS·¦1[FHē±i}ĢeŪ»$>”ėxŻ•į•@yĒ9Ī{ҟ`#9‰Œ,ćäWćq…9Ņ”w4‰fÅediHaفq„ä6ŠYFĻŽ­Ž˜>‡„ü6ń¦µš÷ĘZÄ}ļR³¾ÓēGøH%*dˆWóŽæøæŲ_ö—šļÄļųWĘŽŌ>Õ¦µœ3L³™ H§čsųV3:£k+³V×vś¢ZĶa2MfŹ%ą©ķųt­»øŠA`ĮćyČŲ8s\5qŠüJ’‚īžÅö_“ģš>=x[@—Rųįūf“æ6˜Y¦‹Œ1=0ĶųŸJž&¼;Æźŗf¦¶· !—$m×+€ÜZóŖAY¦uәōŸ†µ{ē™eŽTTĄ*Ėü?Zõō’KØWķ,“L{Ž8"¾n¼RŠėEÆ ųGK·ŅõK˛նÕC de\dóŸ„pųŖėGƒZµø‚Ņé¤r±¶Ņ6Š)IŻ$M^ĘWĀ_ŲŲź–öWw§¾āŹ]Ğ ƽluøo-¢O4¹#Ōq_s„•髟?‰O[‚Ī5»y%U 8ł{Ó³ sk¶1Ęē8ÅząhĘ*a½hك”%w•rēyx]ź9ėZ§ŠĮ_]]Fš“Øé‘R¬Ņ³Fč¬O̽…94\S6ŸR¼’Š,®ūBƒŠÖTś­,’¢łŃīɋw,=ؔKбčŽ!𣁣ŽĶZȘU –8õüėÄnÖņŽņx$ˆĮ 6Ą1÷ų©ä*Ž2'Ehö0§5ټ±AmöY¢čŸ(ĻėP+xzX"£xöłŻ+¤ŗ°G&£ŗ*ŖšOzøė ¹L®J0K HĒ•ėšųŌy&Y"ÄĄ2œ`ćŒūf“ŒFp:g„­cā8Äģ³.v>ķ'+ŠĘž‡-…—–ŗ“M$ņCs^cā ķ~/³“IU†ŚĘ}Ąäž*FMy­” d}Ķß=~•ŠšÉā,éöÖåÖėļO–ąe][EdĆMœ ‘²ō¬‹ "†ćĪ"XA?8ž!ķMA™Mjr÷EtøÕЉŪqÉŻXxĻKxćū%Œ©Ŗ®?ˆ9'õ­#J'¢érŪßĘ,Į@…O,qЧgį‹&żŽŅa±›p;¹JŅĘGā f%¾1D pJœ÷ÅrwŅ;OŠNq‚¾‚Ž³ĀQż²[ÆÜo;zŽ2qI476ņHgŃrN ē­>Vq5÷˜’V6č}*C7”U™Ø<’“hQī2ōŗø¾·!€£q×ÖŗĻ x~źĢ ‹·dgÉąu÷©±¬UŠĮ<ž.}6T‘¬Y2“ąąsŠū×+ć[{čćaAČÜ_Ņ—*5s9æģ‰dhšE. ‚rzŠõ=.Łe³U‰„*Ī*łLٚš%Ķ‘io.eū$’‚‡9ŽÕ›®j—+d”H‡=©XĢčlŠ’g'œ6ėÖ°.t«ęHī$QükÖŖ,iց,šŽ¬iŗ"ČØĆÉy pz?•jZx>mĮ"½¶e|bzėC™~̹„Kem؈Ä$E€ĶĻZā¾/jŸkø±¶Ó%Ódü6ļA|Ö.]ŠQ9_xV’÷š¤~pV\ģ äÖæéZŌŖŃ”$ƒ•ž }j’ī'”¢ś}¶ŖmŻ'tĘ3øū×”iŗ…Ö›0öĘł±Ą¦Leb¶«ŖŽ]yl‹/qĻJĄÓ-åøŽ¢#…ŲölŠjz4vžN“Ł.3;˜u5•”+ĻöųoTÜŪI–WQž•q•‰q¹—/†-Œ³ź77 żŠO?AVtĶĪż‘ Īwl(<“UĪ.NÅĻ_ŪhŚ}¼zrĒ čr„qŽEq°ŲŽkщ'B¬p/#?Z‰Lj6=OG±OX˜b ą “śŠÆūµ¼tfI™³Œw¤¤y‰“öŠņkˆ-Īł•N8Ļ_Ć$ÖĪ»³Śi÷VŲ»bb8Üjŗ HčōĖū½Óɝ_c)V zdVu¼Ķ-ܐ ČeśT›Ąµt’ÄĘõŒļ÷v“ڹ»©šH£‰"0Ŗēk(ä}k 3C*ņ_²Ś¼SFógĒµgĮc9Ó ź¬$ąŽÕJdJFu—•0 ē÷Į¹R+Ńü/"Xʲ¼žJ¹äv5RŪB9‹>2Ö®¢Ó –é꧛±9Ę}Jį½ą˜²Ń-ĀI+'89SЉ;1‰įw~Õ,õ›ø® tTmŃc#pķZśf™Ŗ_O4!%ŽQüDgJ’ұķśDšXYŚG©œ¾Ż€cŸ­tSŁG{rĄ”<Ÿ˜ŗž£Ž³{ى«l°M<įŁƒDGß— ö¬Ÿ).fQ@lAŽ=ZdĻcfĆUŽŃ–+×1»tāŗ;MUg+mxĢIķ¢¼¶Ü’\OJf•fŗz<ŅČęó3ŅtżVÖ[[y#hž>¤×曉£vә#† qŠBló;Ť˜Ņšˆ8±ąs^¢ķŻ«¢²˜ß ®;Óš})N„mh@ŅtcÓėVfŠX„ó©…[œ7õ ‡~†Ž«¬[,0“/Ā’Żlćė^_ā ­=5E•1"ł¶Ÿŗ}č(Ä]TIŖŲ³@>Ļ=½ėדm.-h”G)üTDž–+©-&Bćq€§źz"D ¢ G č(56ģõä³I"„]»‡ŗW;Ēö…ÓLŽC©*“īš5Ɖ¼w¢j~Tv’”ŽVźŻNµó ¾:džLMęCŪĒE?•uŚV¢ś^Uƒ“¤c„>ĒÄ0Ąé¬Ą#yNoJŹL ¾ Ö.žø‚2¾irÅGŹ3ҽĀī4k®KŖg€ ėP\ly.§i ĄvņćfƒĘsX~"Ģ¶·+ld˜Ÿ'åtŒš1ŌšŁ¼3y§ų…t¶IgI.Ją{×Cu„½“ÄĢ\Ž“ĀJĘž=“²ŚŌĘkŌ,¤±óQT¶HĘ8ō¤.cŒń–ŸsØx£Ņģ’>Qņ|ü§ē\$~ŠŽIŚęu Č'#"ƒU#SJe, śWojśq׎“Ȟåū»»Ż6ĘćY·„±„n€r{pkĒ›Äś„Ɔžč³Häŗńņ’³ZĘW3­źśsiÖ¶–±Ī𙐉6ćė[žžņK8!P’"üĄŽĆ½dŹR±Ó\źör±€ˆŻ”ōSšv·ŖŚĒ¢\o]„Šē<ŽĪ¼Db8lć;Č#ķ_Liz·: ^Į±®Q”d§ ĢćdŸOƒXe×¼ŁķÕHŻē„Z“ƒHDWƒt˜²sÓ4XC¼G„_ŪxRļY•…ēpĮĻł÷Æ“ƒPøš!\[æĢĒ'‚ŃßG§˜ ·Œ `¼tź}k7̛h¶ŃĒ4ĪŅ‘å 8Ļ4.§m©›[Ļ h‰±<éó¹‰ēõ’>•/†tK{eš»› ū÷¢ą sŽ?‰4MGDŽÅå½Iў~ī[= ü+RŌõ ąIę¼b؁"‹ųPTs–kč~#æ·ÓRU¹,qĒƒŖÉøöāīI#c x¹Ęā*Åbž­©Śh^M“’™†H_į¬V™5āFøÜŽsא(±ŽćÄw>O…š4’HgĄPSļ=+޲ÖļBGSlFūźĆ%…‹CÕžų•tĶjŅöż°°Ģ$ ž l|^ńõž”®&¤4Ó{§Ü|· ©…x†zäxŻÅš’ÖŃ¢3†ō­X­-ļ“É$œķ`:Ž“XĶČó£qö;é/īĮĒį]¾—©NÖ9+,Ypō’Esö[]vvÜe‡!#õÆIŅõ»K¦[[yT J¤Ij ĒӚš±²ĮQXŁŪ0»×ęXä€b2ģ y­[ģ–ėś 'U‡Q³r|ÖĆ ćPYVU‹zŲµBūÄ6ŗ–ūgeNH ž[ė@ŃĮÕĢj°#ˆX1ķĻ\WI„_jW‹Øy¶¬›XĆw“¤'‡Jž ĄrƒŅ»ˆuÉõKx$ $ʧĖČĘJ—Cͼeā›}>ļū3N›ż61ū’›2zJēumgZ’ÓM£ŻBÖō÷“FŹ66t™…ćFƤŽq÷MnŽh/ū›¤ŽA“Éš•&QĻX|/±Ö廓[ƒR„žžÕä¾)šÕę‹«¾•|р„¶¶wz0#ėZ…ĪĆGÕ“Ų4}FYnĪ6īq’ßS]n¦ŲJ÷[”ä|½Ø3š;-ŚŽÖń’1D™' õÆ8ńļ‰,ań½ļ‡¬ŽyŽc(ä>8Č?\ŠDV¦×‡m#™&Žā3Ó Įäšé…šY*–ETüéIhlr’š“Źŗ•ÕŠĀ‰%wzš©«iS^\­Å…Ƭ;A“Ų¬Jčf}–{–i‹ģ-Ė6pMyOŠ ŽąI{ *ķ»øąŠŽ+¹'ž/‚Ró.Ō¦žv ^H®<ÆųÆXŌa¼q„ŚZŸ.)žńŚ@1ĒłśÖ×Dņõ:htMKŗ³Ņ¢ŒÜźeB“ģ0Xƒ[šæˆõ[k¬wNšł^K8ežķe=v4K¹ąP1°ń–¦ā„]¾\d…eō zWŅzgÄēšūŚj!€FķŻ»V<ŗ\ے盿Гۑ:mó5 ¤€z0MRimÆwL»USv1€¶®tŽ‘īQyćj ēŽ6x®ø×VŚč3i—§Ķ˜[“Ļ?JėģķÓH¹XMŲ‘yY³·Ö™*].µcs©Śˆ`e‘˜n‡wLśÕ7Į—¶Éu:“9]„Š §ēSrŹgĆh4MzūÄiŖ]^3£Ę§8O ÆcŅ|!„O ­Óø’7? 7nśVRz”„c’½KO ڵ¹óģž¦¼·ÄśŠ¹ŌĶż”Ž^—å/ī¶ą‡īśÕ"lƶńT’÷{m­Ó%·uŚ=wZ–Ž·Ś6ā/4Ķ{#ˆāŒ’¢D8$ŸĪŒœ™‰¾ÆkxĆT•%vūø=iė¾»ÕōyŅĮ¶_Øß×(ēΜ‘”åv>¹½žå§Œ­¼$nĒ>ŁŖ>*Ń®ī"“]¶yg3ƒŸĘ¤it<ūÄi61¢_܋—;:ńåžćš®÷ĀrK©ųbh”‘F›9]”=Z`ßxīņčÅap>ģy9ö®ĻMų¢ł…uŪq2Eŗ7guØčxĒØõķAü?m|é,ūcŒ’zģ4ŁŻxkE h¶wFÄ$£KɃÉ÷éA„Ž2ĒOŌģZå”!bbIœy¬Ėvń*ß@nĘ6$w‘õ ,…–Ī×Cµ7ņ…(ø»]ūUŅ¢ŌŻ]elœ6ļLTŹ#<Æ\ńt÷ˆŠŪĄčą•,Cަŗß4Ÿj'XńŒwŹń\ļ¶’dĒ!5±2v>›ń^‡f/.Ņ$‚Ā!½Ćœ±éŠ×łn­uqm¦™[t_9Yp2}z“‘Ķø±ŽÅN÷XÕČN8-ķ\>§ąČ›UM@(xš2§,y=øüėX- ‹¾I’óG kw1(K‡į oöMm莻Ó-!“’ķµ­ÜżjĶüXÓ¦±šŌZ}¾ŗźāįIĄ?»L¾ßć_=XčŚü,Vu“Óä”M(#‡Ēz !±ō„§ˆōŻ#J±ņ ·øfM¤ŗ±ŲVO‡ōŲu­nĻT’ĄŪĶ…ѐpyō £Żž!x‹OÕō«&óFµņ÷ f܀åĄįķ^Øx¢mŃĀŪ·g c®N3@XåWÅś¤ś½¤6r„¶oŸ ĖÆ÷kŅeÕōyļ ·[X`smłē=’˜©–ĘS]@–? Jŗ.¦ėöśŽ”j&’ßi ~µņĘ”}¬i׌†…%µķ¦ƒmv^Üķ~0sėŅ£‘œī%›–šƒ+ČŲą…#Ļ6…i§\[ĶóF…^܍h£gÉŖĒsāŠāILĢwl#ēU÷ō¬‹ ź1ė q£\m·™æ&–?K<ợą‘mÅŌń`¦@ņĄžšó½ff¹ń,ö¦i„ZĀHū„9 ޾¹©ę"K”Ė\Éel ¶Ó­\Ž0ņż?ā~šŗ„ę‹£kŸ“›fžDŲ©ž¬ ćōE]j§Üņßj×Zę¤t–æ^C˜Õ”gw=yuå¶©eqš­4M(*Ǝ˜õŖ:c¾™ą]¶Œ¶³L¶Ń|ī±’®GēMńĀRm^-KūNŚF…–7ćhĒr ĪeXź>čvž×.5¶Æ8„$}ĄoQłž•ōdž'Ōī.” äxö7$=’Zä”Å~‡Æ\jwŗUÜ~F„¦+ÜŪTH›€#œēkĶ4+WĒzż¾§hå“Ų¤’Jœći ÆJϜ¬u><Ņ'Óµ=B d‚ÖĻl ?»/s~µsĄ~ “J–ŪÅóÜé××';egc$ggƒõō«ŒÅķā…õķżÖĖB±Ė;ī1ązā³t Ɓ­müQÆśs’LņH9bOAÖ©T*3Yń\W[BdŠ{ÉKK3`¼öϧƼ'SÕē¶×m­%c›=³øöę²ē*[W‡4ŻXų‚ĪżßĶ“ņŲ<{ņŌ}3^£©ų¢;{'ÓüČ#)΁žø'ó­»µ!};“ń5ŻÓĮu •‹mV#<× •‚ŪN+{h†ĖŸQ[§”Ļ(A­js=ā&ßī1ǦŠtčuˇžŃ’8ķ‰wžT=TKYĶŖŁ}š4żŚĒĘģw5įž Ń“•Ō/n-—÷Ūwć«b:ŽNˆ³Éõ«”mp^ņܐ ē„\š†•3j7šą’Ü2ǹ7õb 4msŗŃƵ oV¼¾¾ŗœ[Ą„ķj‘ī+ ŅuÄ3Mi3ʤ«¶ÜˆĪ{֗µ'† I.e°“E…bŹ*Ž{ÕĖķ2ŅŽÕ¢¹ŚŅ1Ą gĢłLOx:ēS¹øš8ęūdņ½RW G±ēž'žÕ¹×Žd<œ …T*Ø­ŻDŌ^GŸPš?#fЊyjחKČĶėĶN×F“kpč—(„ŒÆĢē ßš}ž›wlŅ\1#‚ž•”£cUhvŃC§_4O.uVź@Ą®ōkÓŁ C$ė³bŪĘܳćĻ×µH3ęüG®.ŽŒ…'‰Ž=®0A±žµēZˆµ_}–ź9ŚV vÉcõ«ŒS"QG¦ZxbiŹĘ'Ā…aŻN+Ÿh`Ņ$X S5ĮrIcœ“" ÖIÖ)|Ó%sĮ­M&ņ>Ņ®ZĻŗYF\t¤«Ł^E>—=õµō>|gĖļłńź+™¶Šhī¼ąčX‚I#ÆÖš•ŠŽēćĻ?YŅåŅ嶆[‚Ą#7 ‹“ڱ|!¤I§¤’K+FŹ„ü¦¶Nę«c[ĄśØoõ+›‹ŌņLĘE…Ÿļ.rHĻjõ¦³ŠńYRŲEqŸ‘ˆļžɔNö(ē‚ĆO[‡‰īÖ0_Ėū£šõāø‰W·ZW†Ptk»`J³)åWŌQb9Yó%Šßų–Ć\Ō廾‡F‡le6ą6G­wßō{E®Ķ¼Ö«’ŠĪ1¼Ž˜©q)vf?õĶjŹķ±b·•·?žż+ššm‡Š¼cā'‡Å%¾…䜬ƒ!ĻP2?*\ ć=w“Ól|-¤O„¤fNH\ä+3ó_źqæŪ[ķÜŪy楬„Jfn³g,n&Cäņ°źOł"¹­:[†¾‘c„ČPnĆ8¬TLłĢż”"v,Xå†+ČZ+«·y……»ę›‰G³xRŅå ¶%<¹u-žß5يįQ׌§Ū­K`W¾›Nfh­ŃƳÆSō¬+=dIu •ū9ó>QŸ½īi¦ÄĶMWÄÖ:$–E2Ńd®'¾kĪōÆD×jn£Ž€`œę¶3å¹ź:^ÆnąłĘ_,2§ åĒ‘x³DK¤7ž\Nń$V\†āæ7>(ų>Ģźś¾Ÿ*„§Y` ņćŪҳ1iĪæķ’š/īu?hvז·–ng¶glż¤ķ9CŽÜ×āRĶ8oćxnŪ*ŽĢ:ZĮō2ؕ¬Œ©Ö=œe愤opˆd·BltĻ’ØÕœUį&ݧøõ§Č c+—p灊dE ¹yädeŁ!ē5nl#§–Æ“Øg©õŖŠŌŃ!²6 08?Ż&¤7p£ r >õ©­4oŪź ĻeašqŠż¦’‚C~Ōšü<ń^£š3ÄwÖWZ=ÉZ\ƕņ oŽ&ļB?Z‰ģvGcū8ų)āϵŲŪis\āÕ"[­8ķ’_ c€?n }'Øl¹ˆFŒ °ž\u‘DšXų£MÖ<%Æ"ŻųXµ“O¾‰ĘT†Rżqō&æĻ‡ž }ūk_²ķEā_ŪŁŚ.•3I%„»6#ĄNäĒ_›žkΜlĶ©1|*ń^¶šOˆUćŠBI!9*8ļ_L›ūP˜h²Möd £wS_=˜a„6Žč&Öl쬈īņ¹(§×ƵyščÖśŸŠ¬”Õuh쬜ęU)“ƒéĶyŌäāŹ”K¾"š6į²ŗķ€ņķš]ᇠ(5ō?ƝZ-CN‚heY6ņƒé_g”byįfyxši«žŪhb“3eĻŹ9&«ßEīʇ§'©Æn3īy2§a‡IMB ćBbŗmlw÷©”·Ke†Ż™LĄåĪ95„Čä>œ5”Pā5VīŃģćg‘d›#€}čLMXč%Ó®uxc,‘; S²ĄćæģŽ ÓąŽ+y¦ ØĘ]rįUĢĶ#ē³ŽXčל:Cum²©1Œ–ć§„|‡ń×DŌ5ˆ,t&P16ĄaÜ~•.”|†×…¼cyfb¼tI6–`~fØuļZż— {„;Qƽ8źg+lbh:TrN#ņöķ<±ō­rŻā†H#lĀFކ¶HĢó›·k¤†ÜąŖ°+ł×µųKSU›\_ެ6›v•= |Ö‹zŸŠ“˜rŸiQæˆŽĻæõ®dxĀŚŻ‘!³ēę’ėVrØ\iž©jRŽ]Ī!w!ĪćĘvÖ£w©AÅK†#8ÅgsNS?AÓõ®Żpܓšō}:ÖKĪę :󌵊0{dŒo“™ĘēŽƒŒŠętß Ūé°ÜMönĪV2ó·×Ž“ĪF=@Įx­Ø=ø=ųGµ{ƒl-£ŗ{ķ)$h]AcķZĘ=ÄŻŠæ|įiƬõė-@É© ŪqąN3ĶyużāÅ$pFÓ”U«u9ē# U“¶š 6®?ŻŖV:5½·–Ņ1˜G–qłÕ6ŗÜīōY§ꌌŹIÓfå|õöõ«/uØŪÉqw(DpcP¼čjX>æŽŻny¤Ģ®äŸlžÕJD½3Ų §LÉ¤¢xrĀ8”įÜf?1^ćėV|qwö{{1¦łåm™_ėZĘZVŽĪYōŲLńˆ&Aü'ėY–.Ā8Ō0f=…L¤mN'W£ųyFģB„m܎õÜ·ˆ4»I-­Śā9fŁ–BÜćÖ±sģtFŸr–„s§ZȊ_ŸīūWœkEnõVÓŽŽkøqņ:•~{P¦fāoxcCÓ5 =Z®<‹ŪWP±KžGėL’Āxn°›’ćėVE–ĘWŠM¼ś3Łż¢[k,l ž@?Ņø£÷RF\y r;ęJ(ī-¤—RŠ8 Pc ŻÓōĖI§¶¢7TlnĘJśāµŒEĢ–‡­ii±Č,§Y,w @ćŌU?ź’k*#ó»ęĄœ•ƒŚSmŖ½Ī¤ÖĖ$ œ©nøÄų§I¹[Ć71\+|«“œēø¹oų­¾‡ ]ZHż¶X Xِą×Ķzµģڦ»}—’WóLj§ ćŠŅ2¼Ž×OÓRÖÜOš8ŚJŠU”ČQˆóƒĻj²#…µšX$O +åČVčF;ūWźĢ­r׍›yF>ąĻ—c¢07lõ±²'ba/ó`ćƒ]£ź¶±XĒ˜Ą`ml qJ2č68k›ūŁ$* ¶ÖĖ(ī+\jsé©mufūNī š§{sƒń>„}wØÉØ]Ndi擮ŗ ųµ4čšŅX£ŸĶ¬Œ8SžÕ‰jŻOAÕo~Łcg,ĢI ć·ėRhŪgŗ28Ś…A½5&e.Ēā{»»mbxŚ dD*÷ćµvŽÕ,õ˜ģ“Éć…61l°ä“ėZ)’‘Õx›OƒO‰Ō²r ņs^8uµ²–kskvzšżu½©Łź–ŚU¾¤³Ä_~ƱĻėQb¢ĖŗM†£ÆĆn±2É$ŒUP·9sĆZMčÖ!‚[i"Śär>VŠ–ĒÆź¶cĈQĆ(µĶĖ©ŪĘĢĘdp9­ŗņ‹č\ÕüGjšW™4jG$wÆ}Jżļ,ī!Ģč· (_ļr+ßB”gźŻž©į?ķ.$׌2ŽT1ķ€ćھrÓZoéÓŪųž8M܌C#üĄrxžUJ6:N“ĀŗE÷„ŸSyļ!šŻĄŲØ8Uģ1šÕmVŻī-/Öć-Ģ¾‚³q.2±oÅZ®“Æ^-ż¤n˜«z qķ\é֐ūD˜$)ć5Œ™|Ż _\ūj<l‹ čŲū¦½Į·Ö°ųc]†[Ėi.ē“xÕ§?*÷8÷ć NGxWāEŽ…”G£Ķe,»n6yŖrsŒök¶Öµ©®,ZhĪć·w‘[DĪĒ™éÖw²%Ō’I4åŲøf=3ŲVŁK Ģņ˃†Ļ|V±&NĘę‡77,$Ś®•$ā“uÆĻsfר«#ʤąuoaJJĄŸB»ŻÜZiŃ4Źßtm”Šłµ$’…m˜Ę8¬*FV.Ērؤ”ņ‘ø«2jVÖš,+ OÉł±Ķfks™ža3±VĘ?Zé“»Ūh“™”‘ Żēå#üż(_OūŁDīøÉŚKT֜žµ==«Ł2łŽhgXŽ+]@ŁZG† ÷Ō~µŃiŗ½¦§Ż®L²•Ėnė@ā}rėX¾ūI cjØ9ĄéšŅŠībņn"DÓģŚł­4ģD¢ŗœ¦§ŃĢe ?żU½į;PøKO%ŗÆ žGłÅm\Äģ,¦‡OܳNÉ8l*‘÷¤æ7W.%Šäˆ3ŹćƒŽŌĄ·¤yš3/˜ę3ÕOo„vĖŽ4l”ŚCnļ@Ļ5ń śĢD@Ÿ`eŚŲ^§üę““Xe¶ņķå'ģŠŻĻaA¤r/k/o«Göģå@F<ķõŽøżBw½²u’G G;Ø"Hå“ö½7†Ż¦aĄ®MwčP^ĘČĢP¼’:Ņ0$³„h-§ĄĻ*Įtņ/-·;Ā»Ļ k+az$…-šDm”Yˆ5 ŠŽmU]ī.eņ<Ԑ±U®wÄZ̃Įä[¬pŽɤ6Łå¾!Ō$Žö8’9`B¹WkįKėōū™%Œ}§`ŚXōē“@”¬z6‹āRš|čĆČ÷ČĮµĒkZŖ4‹4$L†`zŌɚ¦7K²ƒ\C4®»ĄÉ±ļōÓĻcmĻ2qĮŚI¬†'†uĶŪV³°ø™cŽrŚ­zļ‹|E”6‹v¶W~r·QŹcµ <^×ĘŠ "Ž7ہaŒ`Wq¢K„ ݀į,¤żŚÖ1¶¬—'ĶSm"Į¶ŒŸa޼×Q¹–ę!ĀU²WėNNĄ œLŠ‘Ęa”9s“œūW«ŁŁ@-å2ǽödcųMdĄĘf“Š“N2”qƒé\åēƒ5«X<‰¦—ĶČl²ņĄó@ĪwRŌ¢ŅbøÓŤ’Śq’įs]·ƒŹ\X„ŻĶĀK3ØŹm9Zåäb6ÓLLØFK•暦ĢŠ"²«d¶;Õ&# :}¶Žå¢‚Ė޽µt¹‰’+hķ‘Ę1ĮÅ 8ķ^ŚM*īÖkD’f”…b?„{Ō:ϟ-“D²I¼óŽÕ•‹Q¹æįų-ļtņ!óDB¹Ļ^¦°ml¤‡M¹±y%–J±cŌÖĶč“ėui"čJ€G„z&…g3]Ē#0Š,fOR=+Z{zĢVęīg…@`qųWÆ_Zł6–²0iöØšĮ¢ĪWS€G“i»8ž£{ā ęŃ”ŃńēD¹*„~utĄå–Ęé|¹mІ,®8®śÄļAę1÷h)6ˆ^䌹ō®Œ$ČČdåƒĘsŠ™lD ¶ńNG’K„H¢°ĶųU‹­6ŅVŠéųŠīÜ Öq• Ļ­œv‘M§+²Ŗ är[¾+#K»ZĶ <ÄĄ`©>µ±CĪ5+G²ŗ’T JŪ\ŦØŃĻŗY[÷|¦“ƒ"ĒÆŪųÖ{»[H’É£Œ.O9ē­r•ū‰„i1ĘyķTåa8™ŗ-ąŚó#w?÷Č­˜-ŒVŒ!$²ČA¼ÖL‚Ī;««I-¶ąrOJŚÓ|÷¾ZČ0éHgU«xvHį‚Ę(ĆMÆ“sŠņėÆÜiŚä7[–źŻ4JzØĒ9 ź×KU+y*RÜØ\f· [Fšłq„F/½RńM’ÜZ-åµŗ$‘E£Ęą)>Ė\\Ģb·Ė1ĻšŠiŠž:ųm£ė:žŸā85-žōbhć ļĆuo® Oā}5R§@bbˆŒŌȳššž™y°–O6P$qĶ\Õ/µŠĒRJz6OzŽ]@¹‹®“ :tūŽ'>SHS%\ē·Jęļ­¬u‡·¾h#–Uąūµœ×4K•(-“ŹøaņgŠķ¼įķfĀŅuæoµļc°*r†€7®4Ū·ūMŌQH®¹ @ä^Iu¦ŚÜj©snģ5²2ĆęēŽ€±éwĆG…üę'rķŽõBĒÅślłKöęwŪnĄšF3Ķ).€V¼‹Fµio¬ĢRÉÉ8ēęõ5 ÕŲrÖīõ+źjcl½sØŽh³éņ”vßę #īšóKķ(DŒwūKķĒ„h‘›Ÿc;Ćńj1}§PŒ#[łe?„óŸŅ·ŅīÕ4Æ:ŅĶ#žL¬«“dÕJ63åkķ?Å÷‹"7vOaOˆd‡ŻŒz÷oxFĆÖrk.–ļ5暄œ—Ø6‹ŌłēH·Ņõ‹¹Ķ¢!øGŲU—Šģõ *Ķt»ĄåіW‚žŸĪ²‘±į:.›y§ķkÉ ĆyČķšļĄPŻž„Éœƒg`³\ČMĖ(ÜĖ÷‰ķšź“]īK«§[e Œņ*£.ę'_ŖĀńXÜÆ—ęr£#ęõ®‡O°±“¼ŒĘj[9õÅXXĆń¦‡¢lę°‰ÆÆZbē#o–½Ī}qKįŻM{©!ˆ„Br†ŚGÆćZ7”);˜Ś’j:·‰,å·“²ŠĪ%ŚÅ#ŚŽŻ‡JŪÕo“ķ–Ś=Ä*· ¤rx"HÆ!chр\ ķN”ͬlėŚ…²^Įa䳉O•~’¹5Ćų†Ķ ²Å±į¹M˜{Y$ø‹d»‰ł¹Ī@õĪ*- Œz?Å-kSÓmŚņmF`²£LžW<žēÜW9ić©ü?ąØn ŌßTócŚb.KńÜöXædgYüP>3žĄMVČCqę,1‚.H<}?Z¹ń?Y½µ¼ŽH/n>Źa\G!Ā‚;łŌ8šF 3a⫉® ”Ÿ-øłņÆO,­koØČcže '$QmFō jš¶«©ĶuU'µ&›ā;ķ&īŃ#Eޟ8$dō¬å#4o,óź/Ü3P:ļųÖ½…Œ'@öńbg© ?Pl¤|ė®i ­wou*¤Źåx9Åzēƒ4Ż*ßKH¦ø7[ĄŪ·åUĒ­ïs;8ķĀ[Ž XaŠ,¬§°ĻOå\>›§Żi׳K¦©‚ŻĮfŲ¼7=ź“;ipP–ļSqk™N÷ēŅÆ\^5ĶóC}«ƒĮ“ŹS%ń?еæénž ¶Ä1ĘäŚ=Erś'ÅÆx_X³ńv»wk}'ܖ×å, ē鎩.¦ŠEm+āDńéóųwOŌ.%E†ićÜF:Ozo‹īuķ{NVC¾8Acń‘ž5¦¦¶<Ę+»øĢeą|柔üµ©½w4«h¶ŅŗØÜ8;A„+™É²]¬›Ī{®:ŠŪ[jęag¹ā||ąqĒ&³Ōę’$–ēOҦ 4Š€æ{ ‘ŸĀ² Õō»‰døŌKĻn_»>ž”[øF ėtSCń Q;̵”åDrą‘łWIwąw†Ńļ.gCĮŁüØŲĄX„ÓČQh§ha܊č4żrķ¼¤$:7˜ ĒKyqfź.ęŒ|€–ķL“WŃ­ō¹&ŽYVļUQĄükX½xä×>,՞ŅGüĢ3ÓŽ½¢ŪBøÓ4ČC„uo”ņ†#½)¾‚”„°’@G ‡92»8śW}Ŗź‹āē[ōd0\c ®võ.>f.”,—ĪC…w|ņxZĪÕ/L¾]… Ū”ć#֔gÜSC»°ń„ß`ŒŲĢ`™T£2 {Ö/ö‰¹½I®RbI==}MhsšĶu ¶ŁžGJēeŅnZ ŌOpĒ$n= c¬Š®æ³—ģ®Ā[’>eĀ~•Ō’lGmŸhłzHĘ(*+SŽńżŗåšā  篵;IštņU¼Ēf#Įü©šśĘĘ;Øvź" ÷ØīùźZ.“‰pÖņ¬®6å[§5JLr]ņĘāßQšŗ’[ub²®AQķųWAk©i—)'‡õ[;;=I™KF ōŲĒ®?ĘÆ™sœÆŠ|/į2ČÄ"²¶‚f3HÆ”ķė^6­c¦æŁc‰įE$ #åÕB»34ķ[Fžż”ŗHổŗČ¹Cļ]żŗ,]]Ķ=¶Ÿ®ŠēŚ€ŒeŌ­‹< ¶¢=KQÄ`ą2üł¬m3ÄQ^ŻÜ w±ēfÖ³”GČX¹Õ×Ä^D!Łm£$*’ä×œźšššåÅͰ‘鳏¹ļĻå\®6)SčprźRjrīÅĪ1ĻZĢÖl'ŅŠĖ$ £~Bž­"Ō;Ļ„õ[„±t!į\(m§<÷­=~óĖŁ܅”®8?0•7ÖĮc¤šœŚ|ńʒ>łŌa‡-ļĶz©Ņ-å}”ÉSÉŪĄ…Tw iāß łŪŅŅćē-Ōō#Ņø ü1n # ö°K9R@JŁ‹–ʤ·I§CP–%P\ƒŅ§Ó$ūt÷P¢œ+“±ŅŪĖww,6É4pXʄ²Ä‡·ć]F‹„h7śŒjėi-²|ł™7=©Å>ƒē=–=#įķ“ļuā/ZčŗhˆJĶ ~aŪׇņ—Šo-üAā=NćAŠūž„˜­“Ģøy£ģĘ·ŒY2‘ĄxWš+xōĖ$JI2ŒüĖŪ"„šÅōZ\Ļquo2]L@·ńUrģt IļŅMI”’Ķb8v'#ÆūÖī§ØĒqk±H“żŠEK@yĖé‘Ē<×QʁŽY‚ńDvāś)ŃĖbŠM+(Ÿéē’)żœtŠŚ‰b¼Ņ%Ō-µ UI6‚+€ŅOįÆį·ćĆ’xcÄ>%šö³…Ö›y-»D%WīŸQŠģö‚T›ć³œ8h‘Y™¶šj9c2±ʭ…žy_Z|ęj•ŒéąP¦4u±Į©-¼Ęr­Ō ޵I’×b9#v}Ķ(Ns޵uA+råC‚Ū—ҳ”…Éa‚Hsę9 Łe`?t=ĆǰĢQö7Ź{ā¤ļ§ŲżC’‚VžŲ~Ē’µÆ‚õ{ĶJņÓįžµ"Xj0n-iˆģGP+ż„¼“ÕōūMcH•.4kųVņŅXĪU‘¹Ą>ßįėQ5”¼Ž6śŁ÷џ*Aµ²+äŽ^/gw¬éŠ©Ōm “_',¹äōƒfR?/¾9|8Ó¼MĶÄ~e¬š#o/w”ä ŲųÅ%Ÿžź üwā:X<­2{é$“‘‡#<²ż+Hnd|čZfv6õ8éšYļäMĆy…Ķjs“.’-<Óø  ` kÉó3Fd*AćŅ©E“bĀ·Éų#ŒØ <·=źØžYd!H‰ąē©5¤X„ä,ę]Ŗ”L‡=‡ozsZ3äģĪGµPé·ŌµaK‰ H³Ļ+ŗš‰uO x“Eń.ƒ©ź6”§\,ž| ÷”s‚?ˆ˜©šŠķƒčr_šO’ŚE>?üšo‹ō=Y¦Ōm–;8ā”l;”~õuĪr:ż¬ŃļśŅŽ×|NģŠŹĖÓ8äW-Dks”B,ŁRF+øąūü˜’‚ĪžČöæ“ļģŚž>ŃķŃüyįCēŻO>[0CŌńś†®–J걞§šj«s”źÆc­-ʛ¬ŚĪхį„wśńŠū#į<ś]ͬóÜÜÆŚĒĢTŒī?į^ndżŪ£¶›;ķwVŃ5 ;{ >āõ=ĔP>NxĪ9­­CĀZ5ī…«uqäjqF®”S©c5óU4z›rō<{Zø‡Ä‡/#m‹„v=qĘ+Ü<%ż—”6Ÿ”å&Ž=†>p9ā½\Ŗ»O&yõé³č=ęK•"®8Įjś<ܱܜūT¹äM—ʧoe‡łYŹć#ŒV<“‚ßośė]1”»:~„k<–;F聁˚’[;™LN‘43m.N°4zŸ‚c¾ŠÜJ]<¶~Töü«GSų—įķ:ž{kDSlķ·h\²ŠęTnSŸÄÖŗ¬ķ£J-?€7ė\KiöZn¬·O6WÉb:ŠĢ³Ó#hŚŅD·Sꅮ ūדkŗ“¶2pqČ$Ÿā­é£ž£±•įżnłīl„'ĪJä•9ćłW£jp<ŃhĢqy«¦Ē?1åŚ†˜öś——®ĄCDŽԯęžĘ[P®ädƒŒóIÅ£ĻﮯmķnžBźAQ’+^Ā+«“p£`ąģ+9FƊ}ĻHÓ,ģl#s4*d.ŸŠę/¦µ¼ŌŁʰnĄbqšs;M"ĖO“ŗBŠŹ€ ō¬oM*ŽO‡šf”¦¾/Rb¬ Ņ7”ōūꃣ٫N‡ā),¤1ŻE¹ŗjė&¼“æxäÉĪW#„3 Ó±oUŌą†Īį­\6ÅŻ€¾µĘXėRoW\–C‘ŗ‘1•-cÄ®ŃGļYIŗ×%ŪHė&ĒóĀķ ü@zgņØä5ö¦“Z¦Ń“Ļå ŒäרéÓŁ »ŒĒ"m[#ęŖJĘr“;—¶ŅļtłÆ“„…5  Č8˜†ø©u$Iʉ8å½AļL›³Ėö{VR¦÷=N°˜i×71ÉHQ‡ĢqĘ+Ä.­%¹½køP²ĖÉ’™¤V‡b‚ęĘŚŽęDŽ$Ī3ӊ­©j–°Ū‰Š,ņõ(5”qEY|]©źńé‘Ā,āąīŲ QéŸĘ®[x;ͱqKīÉbN&‹©#ćCš1HC²d’;ÕŻö°…™FYZ•9mÆ¢Ī“ Y3ĘQT|I;[[#˜$(˟f©£+³‹µǗѧ q“ö®Ņ÷G³±ŠßĶF¶ž.½k ¤@51a«hÖi<7ÖR|ŅąœÄOcšō wÄöZ\ņ-ŒFrNŃÕG֐rž7‰īå–šŻ;36ŁyĮ=? ½£ėO„Ż}ŖŽp®:ś HļµŻf’S·Ó®„,¶’) ƒĆcŠóŪ™|ĖՊ9˜~č©W5ŃÆ†õ+«[©4©ĄóIEzE»Kk,q|Üü¼f­36x‡ˆu]BóXhѤ“Š6a°$÷5.Óm[B·ŽÕRÕ¤8éPTV§ąż+X¹²]rȔ·¶¬ƒŒ·§é^–‰Ø=‰ŌRIužĀƒ^Tq1ųŪRmH[=³\obŒ ’޵Ėų’īū˜,]UüĻ™ŠēhśU“(ö%ÕuH䊄ŠV‹ķ%B…?ÅX:±p†[7mŖ ū¼t®O_ÓåŠÖāTr1Ņ€<ö3ˆ`„y³č_z“I7ŗå•ŌpžéÖ£ŲÓ£rgQµ>z°}ų é¼Ļ$r+2ć0qłÖÉ5•mę£C9uKŸŗGoóéZŚ]ÄSĘØŠ€8ÉģMU…}lmŪż’+‰ü™T•R~n™ō®b]n{Ķf=*ßj“»¹ęĶļĪŚHī#ˆŹ$䌆lć¶æ²m®­£™Xå+’ć8éYŹ]#kjqśŌ£OƒeŌB@…+Ö¼ƒPÕd¼økHķ^5<p~µqdDvVzm½«”$"fݜšŹ²ńŒ³,nŁ­”.‚=7OŌāÕ ÜV€$6Ź2[Ē§æ"«Ću=«„·Œ®Q†sQ-ʝŽF{ŻE/f•,Rq·'ŸÆé^‘„i³]Ł@÷ ¼Žvö%» ā;!`·Š4Yf,Hčk‘kVŽ,Ą¤vu @ÕīuaivŖŽW‚Ą?C§Ū]˜$K˜‹Dyüi4ic±Ņµ(4p†e°©¼wĘŽ/øÕ|A&”¦;XÄ#1²ÄHžņ?!œę–Ó<‘Χs®FćŌWqÅÄČb<²ķ9č*/øÕ½źęBĶr[$ä õßjÖ‚yšÄwģ*|€ķo'ūKĒ“Ø9Ķ`kž{µj¾T‡$c4 åN“Jž@÷+•źs€kŅü#Ŗé2Ł^ ¹€—c9ąóšBhā¼C=Õ¾Æcy¤_I([͈(+!©ā=ÄZÄŗÄ"åDeS=Ū—ćŗ–æØk—÷ZC;HĢ £=żėÓ< ØYFaY$)Č%Ļ @ĶC{§=҆B«!E`xozę.4Ė£=ś¢£Yt\rO­8«ķ,Į2ŻpĂ6©ūµsF–źL¼‡1 Ś ŠÖŗ¶.FõSŅ®X[Ćv’cMćīóŅ“‰¤njG¤%„ŠĶi"-ĆI†E\qė[Z7 s*“Č<Ō(ź90Õ|1u{ ĶķŚ™÷œ’zā¼ņūA½’ųG!“h!›„hLY„ą»Ń jz“ܽ»1\ńųWŅ·šeģ*K+łh ĮĄsI«šžeā?±_;Ē¢5ćW—Ėmvö¶åeF~†±°¬-ü’Y±yĒ„{'…o˜2wwķ[%`7nuK{}L“ Ę†2@Ī:zWœųƒJ¶ń öÓÄfµ‘XŸ˜ēpēō¦V‘£ŪŪK{Üāķ8 Z–wRhŠÜ@ІMå³É ™#TžöęHŽŚBbo¼=³]Ī„ڈa7N'—hćƵqv$±Š§Ńīļ/-ĮV•ĖęO˜gĒ?J»uā4Mkł‡Ś®Ł„jd©'ÅŽhćōM#W²ŌdÕļ¦ä¾ĆÅ‹‚qĒÆ§į^„åŚKjD°/žąöō ĪR¹åZ•“_ĶsŪ„BxJĮ×o¬o4׉%e—Ģx#½œ˜]†ä~ĮzZŚ¶£¦ŻĮęYń”=Nhe‚Y–WÉēéRXEw:›Xī8Éł€8ÜEzG† ~ <ŪŲēŅ»;½&Qe,Ą³æ§z‘ĢųRūLŅõ¦—W)!]IĪō÷®ŽóRź2^Y‚ö…ˆUļŽŁ¤Ł¬Čź3\j…ĪÕū37Dīū×+¦B²BóęGAĆŠśÖ%„Gm%“ŪeĪ2sXOm4’øüĒ…\ ±¼³•Y•č}+v —täDeo—œdzV‚}k‹ ˆtÅĒ,nˌ§jƒģ5 ;˜P·›Ź qœ–SS=…nų§II{BL^MĀ™6‡óÜ ĪŠRѦ8Šv¬ŃF¦•­h0ßI¦ź±A,RG œµ¶šF=ń\fŸscs5Ź)V(J€:škT+ —K‹TæKvUŻ}ÅGć„1Ar5_!Eh—r1ŹīĒ?®jāĘy|Śv©£¼‘ŻFQĮĄ R5…ćĀ[É$żę>“ęL’!°‰į™P)[®:×£h±¤Œ`‘—žF}j NśŪĆ7PŪĆy‘¾NTƒ·ė]ƒęG=Į’5WT$gø eÖń 3Ż+«ŗ†DŪü$ńŸĀ¼wRæÖÖś[åhå“VŪĻU?Z ŠEHük9ņc{O4|‹ė]D—ö…Ō,#°ŒgpźÓó ¾DGŖė‘Nļ ¾ńŠ®kw@Ó »µ #~ķ› Ÿģš"1ejś7‡ÆV;8.®c‰€‰zēšŖ—ZĶÕżü3 x ·t9ĄčĪk7ŲŅĘ}ÅēŲ„‘\¤C¼šÕ𦄣źņY›Čr„”$Ƶh3cY“MŠÖęĄB§‘ųb¼~ł¶ŠŌyLs“ē„&Ąµ”®„q¼uŸŹ9>ēŪŚ¾„Ń® ±µu™c„.[8ŚqEĘpś×Ž¢Óą0Y*ż¦PŹN2pAä×Īšė—²ė\²oÅH#–ō4Ät¶~ :ĆĻ¦Æ—(fF>é’&±†F£ Ī]Ö Ź”[…ĶO¦ŚjzcŻ9AslģXqĪMz†äą¢/ŹL®‡Gq¦˜ŲČrŠ=;×­é·¬įŁe'hēµ8­ģmü?¦]XFq4푸}̜œ~unĪ-*++©/ąøü°ģ]ł{Ū jš=WSIõæ³ZĒ*ŗ0BśžśW5ńÅž±›gw;*[åUOł÷Øsģi©ęŽŌ?².®fū47“‡-ČķļWcń–«urö÷¶šŪŪgåU9Čü©]&ö{ūßō‹e6øązš“ĒG@µ¶ jŸlŽįćśvśÓ“č`Łę–7p4÷¼i†ĪėZ.©c›åŻZƒ}![īp*DsŚŽ­¤Å«Ś> Šķ\ģnÓģk“Ņ|QąÉf“²” .LeØį x‘éZÅ ³jĪQ”K<ĒčĒ|lŃēäöś×}jחf}œ°n9Ŗ*g‡|hń…Ö˜¶¾Š5.Äźo į’¹»®9®CĮŽ-ŃåæÓį%¼ŗ[(%;’xF;Q(ō7‹čz§„ž §Šmoō}OM…<=ęKulI2g’8Æ$×¼£h÷6×RÜ“öń¹–(äēČģ5Œ£bœ 1é3źV’4qȐœąć¶+ĆĀߣ—?ڼJĄ¼`ž5M4Z“RĆ9–Ńƒ·Ż/ÕOr>µŌxrśĶU–x^ī"¤ķĪ;P$¬yf³§źįĪ ēeƒNź›GĻLśŠ[+‡g1g zcµl\ź@B©pńó9üéŗøIm­ä¶‰…Ą]£=hēżOHŌīuGŽöŅąŚHv¬¹$ļśU_č–MŅ4 {!^a•'~}hėZ­Ž³ā’ iśl·Ģm¬Uw0VŚ:\WĻž:ųmį;mwEÖ¢ū¶²#øRpŅcüMg} ėĢŠOkØĢ%µ ū¾WڳuĻé–eDr„° 3Ęq“ķP殆±‹;]#Å=ƚ>ĻØ­­ŌYuĄå€äžRźśķæü5a©GZȧżs&@ńgéśŌ$йl|’ć}gŸeHæI$ŌL¦Ń0:ž•ĒxcĀ6rĀu8$/āɹ²Iü~µ±qGq¢x‚ /U{]Bkh%‰ĒīY¾f^™"»;)ü#cā[ßi1ŚŽĒ^PÜo^:VrZ”y’ÄŪsā©®u <‹8\cŒcv;gśS`šę±„YiÉį»#=õʌÅåķųłėW‰hźt½WÄöw>+Š­ōūų߅’W޼—VÕP^¼ńĒ ŠŸ„3žPmįdń$Ė$ åī.ó÷}Ķxö>©wÆĶįm+P¾Ż K4lF9ēžŌč}Ó§i7pXĮ j‰ØŪŚ[Fębs恞OVę¹=kÅöžŌlü;c§}³ĻåÜ &0zéA2•.ń}“÷š³ŻŽnqŸÆ«wy|ŗ}åõ’Č’hP"B8¶*9ģa'ŠÕ!ŠŹ[„]B%Śń A’9®G^K‹«™/–=åcÜĢĢ3œöŌ=O;»×eÓā˜Ļ A<ēµqöž*¹™'³óm ļŁœ­TSŲźEu&”<‰  gƒ]…¾‘.©ręĪ=·;IOzŠøŹĒSgšīśD‚Żå |Ž$Ģ|9čs^”­¦éÖŅi*µĖ(HšŲ}ų¢Å© ƈt–Óģ&[x­”ĢREūķÓā¾u¹Šo“ūx/õ9cY˜B§()>‡¤xVĆZøÓlõ(,nā·ŽPĄ¬-KFń„©„[;•fŚNH\{ŠR&g­xgĆŠé–öŚ[7ŁŲgŒ}?śĻįŽ§‰«Ūj7Šæd1łJ8ĀŻś×3™Ķ'Šś§ā嗁“߂Śē‰µ=cCžŃŽŲM Feł“ŗ¶=kš·Z{˜®no|9¦^]ZJūŃ O`jŃ(śCö^ųŸćĶ%µ?źŠx’[i£A %aŻļŲ+Ųh[hƼ!o ¹Ł®yŖT¶XˆĪ3Ēnō?#sć]kJŌakh“­4øŹ‡_Ā“m.ćŠ/­ŸR­ļŌ†UŁ‚¢³»7Ž›żā_ųÄæ'Š{±«k#ЇŽę¾_Ó/¤Ņį‘maZ”)±Ę@Å+ĢĪĻį–Ÿ6µ¬Ėkk‰V2Ź„c ķRųūJÕī.¾Ė}Ö±tpąüĀ‹9ęÖvfŚu‚·c`±^×pÜYYAö„Ų (9¼Ļµ.^¦r‘KĒŽÖ|7§Z]Z%”NN?„sŚn·é’b˜£Ü³ 1„j sĪCŪƑjĪ’*6å`ÄWo£»Ńl0NT2§O—Ö“±…Ž{QÕęF†#ĪĢrHķ]׃tHqŗ‡ee†–ĘīŹßNÓJ§y$ŒćŠó{Ė#§]ø†ÕZŻĘ9ϵ53?i®§œ]x‚wŌfH I%v‘ų]/ƒt gÅVšķƚP‹`~r ŒśgæZ±œÖ¹š«ĒK4\ųØbŹĒźk–ń.…}įxm…ņ“aČkeI>ō4_1Šų;M½ižŁ ‘‚ōś×Yuć-gMK­=oUw!Ž2vśTņ"LMÕģŃ]ĖutØ8VążEu²j3Ų6ÜćoJ9Xm¦”ØźˆÖ—pø‰–ŹN>Sļ[óYÅ3}žŲØT@„Ī1CHŽŸį…ŸPXŅ Œü  mcÉ4šīµIīžŁzÆjœFĘ>•‹#“SSńŹĻ¾ŻætÜg¹¬uŌ¦øwRē8ĘkX¦Csc1‰&[…–č>UP+ Ņ| ŖėSŪ½ĶÜN‰óH¬#ūµpA=Ä×ÖėLæµŃ­ģĢQ,…du,+Ö“_ ż£KŽžź9Dzy‡ÆēZJ6Ō4’ ”»ž;¢ā2€ć^›§iš^›§ła7““Ä”{Ó§Šā/¬ōŸķ(nī!b`¬„9 zā¼R¹x–A,ģń3¹śPh“w9ģK˹LņKröå¾čÆæ>£«ųAmäŃü©/v†ĶØēœƒųŅ7Q,ŚźOØŻĒ©NSĪ ‚Ų\WC­xŽĀ+…hĢhU@mžŽÕ‹lŹHÕšĻÄ+[F 4<(ÜÄ·Qé^•Š“›X„–I‘nK¤Ÿ½Śš™—³ģejͶÆ'—%ģp0Č Ä¢¼ķÅf‘äŽ+µÉ$<ūŠŚ5f=ń™’éZ?• ”8ŪģkØæ-įŪ)õ9"‘ZRMģ?śõ²•ĖS¹å–v—:”q[[€ŽŪ°9½Må¹K;w@Ų@ Jcr:­1†‘‚Vuł¾ö6‘^+ā虯oļ ln·dŒŸJĀH+x;Ny&k‰į,ć^™-żµĆÉąŗŖķ!†r+žPgEŹŃ^@‰raŠ » 1“Ž„W w¦jwmwtģX¶@Px j¹x3L³˜Įu;‚Ī>įÆN{¤Ōf[Yaˆ*”™WśõiŲ•kš¾Ÿö;Č$¾”»&@ž޼šēQKe{VO<ä’Oióib$y^”{©Ķ;C`ńfäć9®ņInō= ;†‰ųŒ8c€Gz’mŠõ CįéōkVyõ„;ćŒcdxõõ¬żGM±‚āā[+‰¢²`|¶'Ą?„oqźyŃÓoāóÆ.®‘\’®Üs]¼µŒžø°³ÓݵEbŒSóąöķ[ÅÜ,ro†W]j6ńµŪØ •ē‰ü3.ž–7¢DŠ)xB9 œJ <ņēQžKæ³C,1’*©Ā±ō"»«Ég·Å„æ¹ ·qLĒŠTÉ®¤ŹV2õ[›{ iĢ2Jå²»O8®Ćś­ČÕ”y¦G·-–ŒšśÖBŒöYų±ąh|ą­_EDWšH̱äćsp?ž-’ą§æ³–‡p> Xč±ZŲ#µŽ· <’JĶ„”wŸįWĪ«€šõ‡ö –ŚBš!z”\ü£ņÅ`½Ć“›  Wƽhc&Cuy€fĪÜt „?&$qĒjfJÄb«Ć*3cæjOœĘ# V{ DįXŁYDģčOŻĻJÖ·ŲU€č=ź–ĒU7©Ńi£6¬–©9¾,±ŗ¾]NAV=ÆļžmūaŻ~Ņß³$’ üe©‹ŸˆŽ ooÄĄÜKl8ŒäŒ)\śDĶś±¼i.ŲQ~r¼`tÆ ń†%Ģ ˆ|ĘBC©ž!\¦sŲų⯇_L¼žŚ8Ų Ņ %AĮ\qĶ<’·÷ģąśöā‹{dy£vŗK…LˆŽ~e<~ŸJØnd~ÜŚøøøUO!Ć<šqҲn”ņY\8eÉö­Ņ3’#k—[rØ"óGMʚ0Ķ |ĄĄ­¢ˆ°¬…g`OŹ{zÓß źC2•ä€:Ї>Įbg_<%Č;¦żiźL[Ød÷ļU\ØĒ© i$;•C/×µ,®g·™5O/ >īĆŚŖĘČżk’‚KžÓšĻĮo‹|9Ō^X“büÜŲ™fŹ¬ąŒŖŽŁ¾µż»|0ńܚ„¶śr£Ē Š­Ż›‘Ėde—>Ż? 穇O+>”ŲŚ„1ĢI*ćæšš}ž™|ŗ†“āXnō+ūy4ūŲå•£qŒ‘ÓƒĆ5Ē( E£ų’‚·~ǚ÷ģ½ūMų’×HžņļĮ÷r‹ķ9L *@äŖßŎG•š‚|J"š9EݏŗW×ė\UhsSgm#é]č-~²Įo—’õ`˜,}ėŻą]:xÄR\ava‡)ÆÄŻ3³šĖB”¾±Óa}\GćļoNIÅ|ū¬xļMŅ|S/‰o£k(±äĒ…#jż=ėLFę’8ėŸSx'ÄfūI·øßū‰tažĻéŃŻ¹€]¹1œgØÆŗ„Ģž§…V:˜·–i,Bx„m®I żÓY stæčĪģYˆč1^„ŹtVÖI.ńę q“Ī}køšĪ”k‘i÷nņF‡ų‡Ž5£ģyÆjö–zmÓZN‘ĢŃą>ķ|×£DśÖ³vĘFxÕĪHéļS(—Šö‹} X<Ų»l >ńäsVu ÄŖĘąÆŹæxsYšxYµ+ĶAāŽ`šˆņW&›ń;OŅįђ"|ŪéW.«ŲtĒÖµ¦cQ\Ćų; ƒjĮvcd]ŲW8é^æØ\ZźśĢ֐3½ŗp |µæ“3TĢ}oJ²±³[‡“Ē|ZšėjŚ;“ĘāFcیTóš8÷9ĶNź2K. €qĀŠŚ†ż“ų øļU8ūßJ{¢N€kŅźw$ŒG 9$uō®gYÓ­å‰gՋš„Ÿ Ž]K~°JģŲĘ}jųœßŁŪ¤U{bx zÕ&OįSu›y”afȌtÆ>Ōmži݉påĖ'†ē„Tw2=[Ɩąxj7W uXģ#žæČWM§j:~‰HŒQĀųłwŒļéWä!¶¦­Åʗ«ū%æŚ¦ełĪ+ε_ fėšaŽÄGm+ą|¹ qž};ŃŹŹęHźo„MoUtū”$e¤MŪ ī= y„åķō–†Śé¶FHĖłsT“źg=Im|²«nĮ£ĻŹ*[ė‹;–‚GP„²ŌS2Ń½ēl(ŲņAĒjęõ}Zx“s§Ū™Bīߌp +›Įō9]+DÖ.¢]U i-•æxÉĮ_Jõ½&źÅl¦·¹²ó&8(ē‚“&ETs÷ßežķąµ`Œ²w¬ĻģŲķ„’HȑŲtĒCLę2Æ­žkWą}”Ną+›†åÜŖ6šŁē=Ø.0.Ł}šóQhdxrHķ^łk !™#ĪW*yµŌŃ£„žŠ:Q·hfi”Ļ5ę~)ן¦HeVIQҚ•ĀÉv8»ŗP¤ĢĄćŽ»²±Tœ©'ƽRW#Ż›Ā:­žž––łfqĒūGŲUoųGN§Ź·ģ!Ōņ¦9ļ’Ö­Ņč'#r’Lµ?ŪfeIVÜČ”œ|ÜćMšŻ¶Ÿ¬ųOLŌu1mę.#|oSŽ“›H›w‡u s䈖Ąˆć ūUcLŅ”×~U„ĖÅ ! ł˜ū~U‹wJū”֖įVHģ"#* ķā¤Ķm©ŻŁY³I¹mĢ#4R:ķfŽ_²i6č\Gձ܊©©ččm”¬ pĶ“žø «¦•į K­žād‚UMäēµyž©­Å¤Ė-­›łČœ)c‘š ’3 Ö¬j猯zč4Ėą¹YTĆPg%®ƒµkŠō\W»dc"½3Įś…|]„}•nāŸYe"Ž%=N{žf»¦A ź ÓĻīŲ†p¼­s~4ńJźÖz~™@ bAŁósŪ?…däS‰ēšlö–r꬧†ojn·©ŽjWĢŅŹĪ@ĮāˆīEŠĖ.ų‘dT=…@‘IöŒ),™Ąć­7@ōm:-šFåü¼ õU“EkÕ*Š6Xž ś —]Ž‚ö×QjŅ6ö 0[°®ęź[Ł9•A‘+Ę*@ńŁ“ļ·ėaoRHv ĒZÜŗ“*ŃR/%ąņō·į;ė}Q#ø„J#rzŠ×}®…¹Óo¤ŗ¢…š©’õP4Ćį¢ÅĘīZŸfW1ĢĒ{sź¢3¬Źpb+Ó|)5²Os-ģk!— Ä·9éĒåDb.g±»¹4%Ó¬ µ3ٳīr=žµéō^ŗ‚ń?}‘.A8a×Ū°›>wńŻŽ«6£lń†r_}Ņ}kß<xH±k›ˆ®&Uł” žgŠwīv«ćv‰ĪŠCmó; Ųę¹GĆ×z„zʧh‚HąŪœ×ó­ڈó¹s§^Ÿ:åX6āøŚp)'ū0…XH»qL o“«gӁfÉeö¬$’ßL“ū4e¾TSҔñ¬nćĀWz•ŖÄI‰Ÿ §¦Eų6=&ꌟśmńm'`=OOéY“QÄjÖņ¶¢‰bĢQÜAĘŠ+Ņ<1ąŻA§«ž×ī±f9Żžµ Õxnī]öķē$…·.Ņ3ĮgŸ­y¾‘Æ\Śßk—’“«$Ī‘Gž#PHāuŚwÄf{1§O{p啇 ō«ĒĒÅ£Ŗ ”¶axätō4¢Ģ’ ǧAØG:Ćoę³céF«¦Ååܛ’ĢAN ņ&ŗO Ļ%”‘¤-±ŲVńŲē{ž—©č7w‰ķąY"uŠ:šć%Ōʏa ڌ­l¾g–ʁ³ŠÕO@åźwz$pÜĻI0F•xfž#Wešå…ŃŌŅDūJ0ŒÖ`–Ÿ>¹}eäqtpßżįÓŃZM29o=k>Fœx¦å/§Tr8cŒtęøŁ4„—|±…{VŽžßJ‰4©#ŗ“tŖ£i#ļW,ŗZ<2ŗ«ł­ĒJ`z†Ÿ¦Į„“Co°*ŒąņMgŻM‡Š(āpī=:Š3©ŁÜŖH gēē„z7…/&“¶’9Ų…UĄ u wPÓŽźö ’ķ‡%Ē÷’"¶ģōß6īŅ Źˆ9‡„07“KŅ­­_{E-ĄrX3u•Ī_OÕu;Ų,m [ķĻ 575ŹšŻ¬©Ŗ]F‚ČJØźkÉ5}>Ž}Rö[T•mĪŻĄŠ™HŠŻŃü<ÖvpłO ć$ŠÅƒP6Ś…ÄRŪ¼–ė P6Ÿ›éYšņ£·¹ÓÄÆknžČ"± ŽX®%°¤dz$ĒĮ…o9GŻĻZ³{صĖ,c— Š ¹ĒkV^zĮ/™ę7B3޲®męµ·‡cŒ‚N9 dÖI%ÕØ’I€*3דŠāu¹^śEkx$}¤‚Ś‚ŌN‹Mš§ØZ„ä1”bŹFq[šÆƒīÖĘ 5"Ęu\—N >õn6cs×LšŽ'µ’gƒŒåN ę¶tÉ®,ā;ƒ¹sņÉ#źC•œ– ļ,ÄŖ6I#üź +L՞I&Ėäķ-ŒRVkĄØ4ѕ^ø=\ymaG0øt8ļQ6h—F]ѵ“Ł5¤Ź ū²z𑿓/ Ģ–ŠŪāĆ·R¤&֏āZźiRįKO/o<ŽĘ“ćńMƈck8ōĻģ©‘<²=¦PŽük[•{ØéšEØÉ4ybó6+jMJś+HRÄł'ʈ§šs7Z„óŪL’Ē-µöčÉåOÖøŲTŻŻ¢²2²žć½töŠ“ =kƶ2i‘™•ƒĪ’{Ś»)üGka§\–%ŚJ¹j Š>sžŁ:Ī©s½#ˆ«eqՇ©ükЬļ<=`ˆźN=E&‹‰Éź~#Ōm5¾ŽTPSiŹäžßʹ›yīõ+™§‰ŁŁ°6·Żœ£a%ę˜ŃZE,³"1ćiõ®SYÓuD0D g±—åi±Ā0Ē­T=·…ą† a*¤ŽpÜÖ»]Āv²Ķ9Š!\Ŗ1źÕbå6Mms •ż±…† †ī+kÅ Ńōķ'OÓģōÖøńĶ••Ą~sYJE$y‹ōONÕķ%¾†m²Ą² ēåPp@ĮõĻéUQžE0E"õGLvØ»™WQbXn™¶Ź§ŒŠ·§Émhķ#(bÄīć½md#kOÖ4ŲļÖIšA;A½>ļVŃF‹vd¾ÅĀ”ņāĒß«^f<ĢłŚĶ®uŻIŽņ3? cҽ]Aōųģ“ÓęHÄ6ĆÓ5„{§Ü¢ÆA†laŠōį. •ćU^>¢±„°œI!^6ēič e[hźó8evōė]>‡¤g„ĀJDūŲ“ŠzP\ßŪivå"¹¶ !bK㯄dĆ®KapĄß'BIéA©æ.šš“–ÓJȰsŽ3YśÖ½¤Łß’bĘŠÉqĢūGݵšÜg›xŠökū¤6š£ŚØĮ`Nk•ҵŠ5ū;÷Żęֈķ?Ā}*NCQ=^×]ƒV6K€²g}G©¬ż~Ź[;OķQkbĀ5ugҤ¾CCńJX]¢Ģ#ū9XƒĪk{\ńLڦ±.›aÉW+&ÖߟŗG_Ɯ]‰q±¼6Ņł¢vmĄc9¬uŠ@–KĖu /#“[V³Ń,ōł¦¹Ż0•ł<ńœÖŻŌĪ‹9掓fO0"‘”NsĶ;C×VŽg2ĆA¼õō ‚mgRy-3™lTōĻ5ĖĖueä’Ü<”5Ó tB£‚$Ö ÓG—YŽ^é“^\)Ą‘|·Rx+P\ų-ŽźąÄ€`Ü3Ī‚Ū±čŅxÆģ¶#P±…¶†@½›m¬·ˆ”œĶnl®äd'8­#Ł%‰ŽI.–ŻÉ}ĆØ®’Āh[ڹpĪjŅĶxÆJ]Y”óꐑ°Œ{Šæ„xFóI:|֑üˆŁ“{‘޹ļUb%ݼ;«5ŠĢ°‡ņg# õ«—ŚšE Ōm؉· ‹ßéZ9“Üų—Åš{źŚĘ­­X /nnf%ÕĪšpqé^™įæ†śVlo%·¹wD’]¼˜‰ēéŠĪR7‰vóĀ2‹XfŠ®VŅÉ&bńذŒś ’*ēåŃ5›Øö]q)ģŒßBżK¾¶ø·†kiŅ]Ä‚øķzĪćUńÓ-ɳÓĄXŃG'ü+2‰ü9q–šƒ¢y-®G ®lńF/4©§iŁ ygå\óųŠŁV’Q¹eßń¬äžģgwgk X’bĒŖŚ;¬³¬#'‰aÓŚ¾‹O i·—Vw3¼=¦Ø070ćŒ¼’Z@y?Ę ZhV°k'XG„>éŚDĮ1ćZųėÅSék©C›r·VÅ~ņž¤óœv­!.„ŪSŃ~K)?Śv®\+s»Š Ō¶šž£kSų‚Ą¤o6D£ Ü}jĢŻĻL¾›M{6w¾tD#‘Œ9x®§ÆéŽI}ö8ī]«]T&{wć§˜ē›8={ÄZNæēYAŗń\VaĮ\ś«Ėo·$se É-ŠüĘ0~]“ĢŅŌļ’“š’L°‚be‚ܮՓ¢ćŪ󯤼-®\kž†ĘY™&$Čā²qfŠ>~øŠuČüsy{ØJŪžķ‹užµŻŚŁķ»““Õ5?õœŖ/ńg śÓŠF„Ÿü9·¹hęҜ­Ŗ°2.ܱć”āņxv9oŁC#ģl»õ­FĀīų{}Åä—wĻ(X°8_Øė^”į]v×G³f•mĢąŽć ĻJŻOTg{™­.¬ŁK6 ļdtćŽ:¾Õm|Ggc „ŻŌNK0 >@;ž“ĀŚŁLš»µŽh#e—nę^¹ö5ā ÓSæŠu;¤[X ‡ĖdģĒŽsu5¢Ō5%v°ŅĢ)„C†łzuģ*ÕiÉ ŻĻūė“»Ķž•D¶Ī‚§ép&øŅG(t+³#×ÉIńLZ5ī“Ÿ4Īė棕įqļųÖ>Äq‰ó’Ä?\x‚ŅēG¾ižÕš ~söéY’ułü7umR}ƒ¹R}):Eū=°¼ńŠĻĮ/Ø4Z=¦£=ŌN„Č1†ž÷½hė÷ڧÄMF×V×-ģ­gXD(°’Æ©ĻJ|”ģÉ„’ĒIŌ.įCłŠĆ—>ßJłS\ŽėTŌī&Ō#h®÷³=éšž±“Ń]@»*Ī*~+OQšÕ½µ“āÕm_•»ėS!łw…õY¼9¬ĶØYĪéuĘYŽć]7ÄŻ\ŁŲŽ„ĻŚ$n6Ī:˜ ’hvV:æ†uI¼ų ŌcÕ[uĮČJóŸ}¦?é§Py?³ ŗß&s†POōŖ‹0{ŸY~Ņ>:мmį-;Ošø¹°žĻ…6¢€|Ķ£¹źs_)ü1Yuę½–ł[do卣ž)™µ¹īö¦ÓJ·šęHä7L2OlSųÆÄžńb–wü^w$ jŠÕ!Ā&!šŻ¬:¢!žķĮĮ ę1õ÷Ŗ^ šī·”՝,4uÉóń»ŸNę‹anufŃüG<‘{`®vßv@=koŠĶ¤n“Ótė?5„3;'{mŻéSb% š^¼>$Ōę¼Ž©;Œk9­Æ]YčM4š@›W%y1DŽyEÜOjÖ^!³½¹™Č䌶}»w­oˆzUŽ¤“īÉžZŗ)8.¦³ēĘĒϐDÖIĶÄŹń6v’Ł9÷­ųŽ=a­|ėHRŃ|źøŻŽę’“6‚źox‚T»…­ć'ģ mW¦JłßR¶0ÜĪŽd”‚x#§ŅŸ;4 7Łå|æ¾ĪW?ʽ[D³ŸTŌmšłÕ`(R;zšŅ2øĻ[¶ƒNŅKC"–Č$Ÿ”ńü«Ķ|_©›+«ˆƒFČxłĀ™īaų7IŠśņIē‰v¹ŹœēqÆ”"ńkéėi¢č––ÖŗKØE\³×ėMĪĄ“źx¶³¬ų»FÕu»ŗó4÷>h røĪGš­ųüs”ųÉt}'Äv6WhŒ6(&ćŪ4*”vΉm¢£,(°Y:‰B!ćąWźŚ|§¶·*?‹ÆhĮ˜öPÉn £€Ē<óŠėķn,Ž8®”DN7Ć~9³”iw0E 2Ļ"V#īŸQZ¾ŠēÓl…ķĖ­Üņ’ĢĒĒnNõ ō+xŗņŅ $ŗØyq™s–aų×9āOéfź+¢d)!Ԍ.?ʱēź5#…»›Č¶–ĪŻĄ;Ć«Ė\³&¢åeœIiv©čZ°sf©ö;ÆZyViy)%zG$jé!‘ugXåŽHŲØ …ąėP™q•ģÓ„[“QČé’I¦kkHÕ®‘VĪ42Ɲčīi’儎āād‘-ģ@ä“h^N ½qž%š¬¶ŃLM›Į"œ6W>õ"LņA£Ghķ(I''šŃBHᙄŖæß9ü1Žŗ¦ue6ØšMŲķ“~°īõųtūį°µ^qĄ½8ō&]ˆõohöĀDÓoMƍ¬ÄŽ õā©ųsÅWkw25ŒQŪ3–ÜfN:Öń‰›Üõ u9.­ Ņ„eQ»8ĆcҼ£_ń'ŪÜéwÜ·]£Ņ”Äq2xj;;Ė;ŻJPŠ’!éksgtU( ē?ZČĪe VŽ;‹'Ž0Žä}«”Ņ|O ‰¤C;¾bÕ¤aÜĢ’f_ k–ŗĘƒe-¼Ė,Ź»]O\ƒé_™’·Ą x’ fBŪד٠¹ņ¢É·œŽ~Œ3ō4և„(Ųž¾?|,×~xēÄ^ÖR+©ģīe_0|„ķĮÄrsׁƒļ_6‹}ČY@XĮĪTżź³žk[™—…üöŒ&~µGq‡K©č3ŒšR)$•\(˜ŒOJ•'ĘÜüĶ‚1éļ@Ņ$™;]‡õ­kC”ó_’;v:a¹ÆÕÅ£Ć43D_,„rĀæAąœæµęæū$~Õ^ ų™ܑųBžā=7U·„žŻČ wRwgچtDZž‹n»¢ų«@мgįۈõ UµKĖYŃ·!Ü ÄÄV”§ĀöņO! øm ŠĀJ̉ǔóÄo wEÕl”NŁęŽGyG%?.:ü¤ųļą«­Āŗ¶›ll.qØĮp9óšHĄžQ?i߆R|9ų©Ogeö}P9vąĮ ĪA>żkå­BĶ• gŲķŒ•k”+XĪhŌ!UĘOoZž=°†,Hł}:JŚś]˜²-—(® Fxewą«/ŽcX±ĘV.“°ŹŽĖßh¾•CŹRžh‘ž>QŒb®‹RF’HŠ‘ )8=źXs:¼|ļä ńZEf‹ÆźžŌ“隌Ś~©¦]Ēy Ä»ŽAäc½mšN_ŚĖKųßš‹ĆŗĢ×w6Ž!µeT÷@qŪq¬¤ŽøĖ”ū³į½rŪUÓ­$¶aå¼`ƒž×qłęŗ7F<²'*Ēҹ%9\ü¹’‚°~ĘėūM~Ė·!°·KųHĖr³ żō¶”IŚSŠ³_Ąœö:Ÿ…µ‹Æź’¤ZœȬ”³ę ’ ō5Ī„fѵ3Ó¼yv³ŗ5Ū‰Ź(<Š÷‹K_ŻZĶŖ[Ż,•ĀJ3¹ztƟĒSN\Ēln{†e»½Š­ģīäø–M§–ą“^ńĆčÖ·Ń„ærłņüÅĪ pPŠŒÓ2«q~xóÄw0ųgTˆ%¢’žnŅžūwöÆ·4hšāřIdä_uFjQŗķtEÜŻ‰RP S‰žŌŽ–×RC‚cAŁ{֖ŌGS}4WŗlŅļ@Ģ6ķ=k–š½µō— cœcµ6TQōŗ4k§¬†UóJxŽÆkصä‘ī hÜ.Üü¤zšĄŌč|7}w¢ętA. d?$T—¶wZźjR]ĢM„–B9SN+ Xē¼;”<š…½¦œĮÆŲŒ‘×ׯ½¤śĖ‚ń“¬ ćøĒ­mat±å> ńT×·Oł®wqšó[²d•„Ą.¼•Ļji3K@µ·Ö.g9éǵvšž›ek§[‡už`0ˆ½¶Š±™ĮF~Ź“'—Ӂғ­µcŽ’Ī~“Ą±gumÉ× !']ö•¬Ńd…r(»"oFD»¶¾Óī3B@8ÜqŸäk&KTdJ”±Ļ>“ђ‹eŪ[›ˆ÷[ŗ”AĒ=¬fŠČŌŻą˜I„9‰­Źä=?C‘4€<”_=ČļŠō«ė»{ėX$žŽnāć­Rv%ĘĘööRŁHeEsœż+Č5뻣{Ž`€zŌs"K2éSŻĻ¤^ŁI ¶Ø N¹;€)×ÖvSŹ×n7m1ć5}„niDl’ŪĖ3@ÄgÖ¹½NĆūG%Ō±“F]§pé“ĒóØs>mFD¾ŽĀŪ`…ϱµŲcŠÉ (WX½WLäs6·0Ś]Ė,a“Ććj¶”؛K‹hR0Žs§kC4‹vŚKÜÜAøł`›pķ\¶æ§¢]0†6@¹'ę“5»6<-cq$ģ‹gåaŠ×owÅĒk×ńj2ڤQł·7 “štŽšŻŽ«ko!µ•TņĒ…-ĻC×,tO hZ%”Ź×WlģŽa\sך'ń®WÖ§»0Égf8ǵK.šŌĻÓüCx.Mµ¼x˜ęÉ_­vš=ÅŻåŻŌč» ¼uõĶ š5”ē3+ŲėZ“,p pWø÷©5Mbõķ/ģŠÉ“–˜€}Ž)‘{õĪ©!šĖHʶ·mVPsƒķ^q35ĢŅČUŽģņiµŠjEżp·©!}ŃgqzvÆgÓõ[ ķf‘Tć?vnjµYnī,E»7@XuČø§ųBśjÓYY?³’8m¹Ī?³”ŗž“­ėZ~Æqąēläćś×”ÜųsĶæ Xśb³59ļhGJˆ’ń­Ņ6ɬmLøÖon!†ŻäUMĪư¦e8‰w Żé÷Ž“!@ ##Øõ«š ¬wÓČ”„lséTŁ'³żš=7B3\Ę-"‰K®9©®h\[O*\[Č^'ĮŽ?­ u:œ¶óXŖĄģ±Œg f kģčVGŻŽŸ³'˜—D6Zž”ö«ØešŪ;XŽ>•%’‡ī­åå”wU ’€ Xw8;I’KFø‰ķą}ŠyĻ„zZ‹Ÿi¶ŗ]ūRę‘Ļ$uéHØ£OĆ^YźvĖm µŖH”Į{žę½_Ę>'ƒĆZ»}§łw3IGĪv䟈©p6>sŌµ)ōū)¤žå¤Ld)<{ o†5ø/4ŁāYĶĆ>G„ˆ4t¼–ŅHQ“·ą ÷5Õ½ĢZL’$ńČĘA”*¹ń”Äf‹oīnōx,ōłUJRŖ2Ė鞵ĄA§¢o3yö'$š”VÓ=½ŖĮĆĒÓīć÷iäµ·šĘQާ  äņoŹ·ļäēuÖ-{°}†)<|Ā€: McOŗ†ļR··Ć’6J÷M}-u/ =ÄŃŪ*Ż”†W£aƒ?žµAŲńm7MC#ÅwpˆĮyfčä Ż‹PžÉ²Ĥ“Šp+1؜­Ī³{4§ĖĮ› õĘ+Ņˆõ6ų{u¦i˽.Į4£”PyR=ėhˆóĮo-ĶŁ7gšOĪOzŲ=„ä–VkS’cĖu5B0$Ō®·\Z x•XĘĄõ VKE%üńłAÖxÉéŅ‚¢õ=£DæŗŌl¢†ę?ōˆ”F¤@kĚ­ę‰kw ?“āł–ąrƞµ”yÖ-$ә¦t’8ĄÜz×°xÅ!|+g Ɨ l"mŲffēŸn M‰•Ļ7]GP›]ŽŪ Ł|ÅņpIČ’ėÖf§cåj€A…¹}j¹J™Ķ\Ēq§Ż0±yźjĶ“)0gÉ?7ęjZ6RŠŚµ[Ė|=¼øu;†O÷®ÆWÖķŪK·“r­ĪJŗ®r}é³Ē'ŠIn¤’@fĮݜVÕ­üÉI(Ŗ¼05q—C9@ś#įƹ,Öq„ÜÖ֓)7s֓VŠ4«»čžÜ]£¶ć•łIõĮ­nR‡c3RƒĆÖKc/Śc[˜*ŖĒå8#„rś¹’ /ŠJņ¦[fb ¤`dcŸÖ€qčvž#3čq\muP·¾•Āx†ćX³Ņ­ī`BYÜoć•ĢǶØóķfˆ2ć°¬ėĶE”‡Ī!‚†(ēÆJ–ģMq©Éy¦+[†Č…ėš§c}4P·ŸžhĘčƧéSĶw ĖŗWŠõ ‹Łb½“x¢ūŖ `dūWØZ’5 6Ģ#ך‹²¬P°Ń`·ęb%W=[½iŽŲ]Ł•­HĀ‘ĄQĢĖäFcŪÉiwR•lO­fė>%Ko°C¦¬‹+)ßøēŸon”ŠF®‡is©N²Ü»n?{'Š’+‘”k‚AŁ8>¼Ņ)-NŠMgƞ#¶+nQķؐ?.xޱi%®”%Ø!7Ź;…³OC«šÕŅÅ}S˜ŁĘµQń”ö1j‘Ćml‘„Œ@ź}h&gĒā ĀmęŚIĮĻaQGi£—~õ#9A ƒJŽõ¢¾‡äg”|ƒ#žČ­Ķ^)Žéˆe^8ēč'—[œ¢4ķ; åVČ>•ŅHĆVH>ŅūćŒmļAE ē‡O+XŪd~•„,m­ī!œ/ĪĒwŅ‚“čzWü%6šu•¼vÆŸ³ ģk›Ó/5+Ē–{ÄwÜIlŒgµĄŌf¶e+*Æ Čę±5TŠÕ’ŠNœŹMž"†,£ Įó]E†¦˜6R›N8`Šę|M$V ģŸ6{Ž˜«:O„õ cĮƒĘvŅ[Éa昲­É QI ±ĢéšÜh[ĄźŅŲłGOƽÆMÓßģW‘@B‚6·rir 'Ó`M.儖Ńķ*s‘×>•Čjŗ¤_kTŠ5„) ¶1ßÖ¢Q†īÉ¢œ½¼WĖ·Õ_J³°‘Ć­Ā¾>b~LŃŠ z•¤k)02ŻüŲf„T³Óą‚ēķ>Zy:qZbóJ½øW»…Q"BO¢ŁLђźĶ6~÷µc/S·Š8rNū¦n8®z{«Čv…”ŻŠwö ™>†Ž‘¤.œuØŪ0ø+…±ƒ[ņĮ-š‚Ī"ŽĢĄzbƒ&iǢ܄ÄģėåtĻ”õ®‡Ä–£V±Z˜mm¢Ēœ@ūōÅcœ»Öl®’ŽÜ’ón$ē£{V·ąŻ.śõõĎ8'| TÜ£Æ?żt\øDŌ‹AŠįŅgŗŗµ"8 »i'Ÿjó)® ²ŗŽ÷M„4;Žü •Ōlzg†¼DŅZøŪ4*ÜźFEršÆˆmŽ–%øT‚ ĘJĒ }q5ÜR¦,~µ©„čQ\L— %EܼżćA'Øéš‹N7r2²äįGlzÖ„¦łŅYIdŅA0˜>c0Aö4ŃŪjwVnˆY3Ą9ōŖšÆ$r›~ģüž”š*,ā“Ķ*z×qŪ²±Ą$q] “ŗ¹¼–q'’‹Ÿ˜÷¢;£ÅŗrŪĆmå3<Ŗ¹™=©¾ Ōķ­ć¼²x ūK°e“?wš™ŒģŅöņ'ĢbēēŒqĒ„h]éדXĒeØ(‚>fÖ8õż+ ’źÖĢŁ–’I„8\ā·¼EØAØŽ­ļ†ģåŃģ‘B„i7’@äēŽƒHďVńŽÅ¦Ė8“ūI@Yņ8įqųW/¼ƒĘŚ(¾Š{›Į$„”›’]3MMų™ŖŚÜŪĪ÷“Å5ŠØĖ"ąĘƒōÆŃ泞9Źį.BTƒœž5¤bs™Vz£sę=ųO(HTńžÖ¬ßXĮ¢Į%ÄĢ&Dėø`֖3™å6w茐š8ÕWylc©Ķw:Uåµę¬Ž{±Śā†BEé’KŗK»[Oµaų*@8ÆI±·Ō%“‰Ö·w©\4Ļ!oŽØ„PĪēCš×†­¬’ā{xĶf}DZ9ĒC_?xƒĀö:όµfÓÖ+{XZFKq“sA\äžšDz¾µ6£m)!]Ų?\S¼}ŖI§kZ‡…ŅĪį-#‰s»ęCPāƒ™™ŗ'„īfÓ]’ —ū¾Cė]MŸ‡'Ólš)Œō1ŒŌ4 1'³ū™žvmłå^¦šÄЬŸ3ē‘Wԃśę[»Ø-øH@å”u>¦®éśfĶJŹ"Č-įŻŻę¬V8ßź¾UķՎŖ-唐Œ…ĒŽjēōĶX$č'ß?Rs@Ķłµ[Ł|ØķīŪō'[^mGJūEÄń0c‡\ņh> AįŻ,Ėn|ƒ( t#śt®"ŅüE3ŪDąĘIfQÜŠ¹ć–t>Rp~lśW’xĆŅĆzׂń0ł—²ŸZĪo”QzžY­i r”ā”)Ćdc<×'®xcST†źÖæ·@ETśńJ&®'U„Z\\i* 'å]›ūæZ܃óĢĒz\Dš€čéĘļcåZz™ŗŸ„uŹ4Ė„µ¼$6éŲ}ŁķZ:>•ƒ·L¹¹Šžę"VYTa]³ü#ҘŽ–{_ ĄSZžīH§OŻłN~LzŽkZĒW±Õü”µŽ„m%{ūÓ)ŠĮk¤“Q„ĘÓ“ö«1IaµŚ}‘Z'%‹1=‡j‰JĆHó;=+EÓ§ŌoEؼȏ‘üwļ^?«\jŃßIż™4–ÖŅ®ŁĘlv¬U·/ų.mZÖźMWQ¾ŗ{%Ģ^Y ©äįiž-ų“sį½rĻ~ ¶’ƒ‰¤Č Ć ĒzEŲg…~#źŽ#ŗŌ`ø“–Ö<•ŽIżv»[Rč›÷,"7&ƒ)FĘV·āėė[KĶrńE!>Rś‘ÜœV|öĶdˆ®Š®O_Z±ē^-Óī$‚}Og™kn7•Ļ žÕqŚV¢$Ö4»RŽöłß6ųEc³ž-B÷P¬ģ“róī<‘ŁGłķ]>­ØØ{h.SjoEQŠ{~t "ĒH“µøŠeŠźN6°č˜źĀ †ĻOŸIŒŪK$×m‘q½Š3Ž? cȾ Xér[ź–¢ ’ü„³‚T|y¬iŚ„š„žJÓŠŸ›ūžŸÖ‚Ō™ģ:°¹Š4émä¹ŽĢŖŖČŒ@'<^‹ćm2Mt±„¢†$ƒĆ9ĶLå>Ę’— i†ßR\źÓ©ņö„ōēź+‰Ó“Ų4Ė«p«÷÷ ‡hĪKc×ĒJQ½„›±Ļx÷Bń:½¼Š[ÉŗncÅu:5„ž ųi¬&½¦ÉmŖ-Į…'`v:AżpisYž£ąm ?ĆzŽÖ°!‚-”ń†aō®ĻU𷆵(e’ūJk«ńXdWåH=H"£›R]ī`kŃ M:mEīŅŒŽņR`‘ĒqҼ“Qż©¬ō˽" ?Lµń$Ń\yDܒŖQxĪ;Š>qų©ńsÅõ„6–Ćw˜–źrĆ?t²ō/^]Il6‰ddŻó6ĄĻ$ž5§!³I#Št»ł¼/¾n!ČRīē?ćŠōżCL¼Ö¬·lœĒæ§ŽŽCžhä‘4wŗ[“€žbLt·­¢±½šå`‘"@6•QČöŖå!ØčRiZSOēżŖąĖµbUĮdžUīāytˆ-nX“4ŚŠé‡ĀżRļÅm«ų›S·žĪ‚ݼ˜Y?Õ1ī½djVöŗuÄ׋l—7‚Š‚¹äw¬ģÆb”Ęü:ńOö‡‚uųĶNE¹’4E/Œžüšå Ó4{g¹×>ĢÖ-s1lJqęc¾įUf>c…ń3éŌ֑XYĀ/RB^\r~‚“ąŠņ¢&WVI–ć\¤;»jz…ā8-c„Gqå° ø}ßjō/Į§x“ĆWŗ½­µ„®±l£sØ9 N:tō¢å$Ļ-Óu »;Ņg&{#“lN)ž8’źŽÖŻ¢²ŸŹvžĪŃ×4ĶyzYįÆÉuāÉōk‰å‡0«"²į@Ļ_óé]·ˆ|?­Ž>É{”`ꯐOńPO#9{«mye†ŽäȁWd†­Cŗ%gæ%ŽæĮAQŽĘ?†³ā‹HE›JšHÕ½sČ?JōųGt?č:†– ž£v³ŽQ78oö[ėÅK—CNką?„öŗœž ŌćŠY×FÆ'ńvP¾µģ¾#½Ņ¬ķt;PŃ’±ul« ”K'f>½MDŸcK¢<æÄæ4ķ)×KY-d»•~Eq“õÆÕn’“n®U"āQŒŽų¬Ū±&Ɔl нÅĆgq'‘Ą^Ā“¼A«NÜŲŪˆ‹°…ż3Y9\ݜ†ō»ÕVĪK·Č œ•ś×Æ|Gų!Ŗ[xćĖ©ÄŠĄ%«rĒÓ¹­iŪbyŃņf…¬jjŠĆȼ†āA†‹ēØ®ć[–żŠÖK+›yer™©śž5ŗ‚3–ś‘Ż\G£Ķ4P™'uŚr:g¾+µųYŌz‰ļ ‘‚äDįvõ½¶ėžœ‘'+ųU{٦ŽāÖ(ĄŹ1ķÓ&¹ė ]E|Śŗƒ•$rW‘ėZ¹ØZĖ 3©½P¹Ć ļW|k%ŌŚrÜ۔ڮĖżTst#œ4…“ŃÉ Ņ+(RŁĪk‚Ōō:+¦žĪV—>£M#CŠžéŗ£ź ö{…ŠÅ֗@?ī¼{ąĶGRÓou UžīąœŁŚ¤Rŗ…Łåæ’„RÖöīK)ī/™„©ąoŽ{q]oŒuOkz?öī£ew< æ*{g§r ä>{[ėA$°EW)·²kŗŅõ[-6ĄŪ™ārĒ?1ūµ˜­ŠÖmbÄZ–ø¹0ĀŖĒxĻ W“µÉ•äø‘‹I\Œqš‹ŠxF›Tw“¾ye9ķ^­k¦-”ė˜§hŸŅ‘qi.õÕņŅĘŻ–k–%Bõ?ZÆmį‰+yoŻ®“ßŹ©JĀlŃ]> ŒYiģčń±\)äJŽĒĆŗå¼ņŽJ’yĪsėZFW;ģxī­cóœ<”ł†p+->i³ŻZŻā9$Ü•Xöäb“QŽx’OŌ®|5ożœ\¦"ņŃFģ×&¼>ÖßUKĖG€“·jN-ĖŌ}Īž‹h×pĶnų`Ī2 öėXńÄ&VVP\xéō¬kAŌµō&ū\mŌ vCąnēŒ ŲŃ|VŸmm<Ėŗ9"dtĪh‹±Ģ×SÕ4Ļ_[éóČ„P‚yڧœēŸ„QŅZMA{Ge) Čzsė]ć+ļŒ.-īd}&ĶŻFU¤'ępk”µ»ŃžépYĮm<÷ŽĮ‰g’X=…jŚ:"ś}ĻÅ­/U¾Ņü:|7=¬/·Ęį™ƒ×ۊī“Ė9f†[‰¦$}Ēhć¬ŗ-vw¾œ¹\Ē#Œ×Yį=jO Īw¹{2Id9¬f‚ ś~-ų™{Øj~K¬:Ÿ¬¤qó,Į#ųuī 8ZՊh÷²éŃK¼¤k2ØR7#ƒŠŚ;ņG?,@Ė–<ž™<ŌbYeV*˳;@=A¦rOK™ķg"ŻJ ąަ{Y¾QMĢp0zÕĘ:\[Im*ÄŠ3&ŅD®rON¹«†"xRĘGzoc¢/©„c7šÄ2Ø śšķ4Ū›Ā-ā²»:l¼‘0•9č=;ŃŌź¦lš@ŪŒŸ5Łsƚ“ŗ‡|0Yōłd“s4ü«“ĪFqōojżŅŌķ&d‡ĖéČčk:±.¤u<ļ_Šüė)¤¾ŅˆĆā^āæ4~/ų*{ V’åĘFYķ0?ˆg žŸ™¬ ŽWOÄ_ų(_ģéeāæx‹_Šm­ ¹›ż,˜ć!­gS€znÕüėj6ic+Ć#¼—LrBøaĮąó[Ēsģs2ʰø’R}G*77‡.™ĪŃŚ¶±É=Ęe9]Ē…Ķ$HĖęDźīĮrÜp*¶&ä7gżč €=«^)bŲŹqŽŌs£Zw!—ā9„W— \‚®G0T ¼1Ęzž5hé†Ę…œ¬ŅǜÉẚżG’‚]~ŌZ·ĮoŽŌ5›5šęµ1‹}ɵn¹_sҦGTsūųć{Ytølļš{]J1-†!dĻ(OLš1_\½É[xĪÓęµńü&¹jÅv.`šŽk{čRņĘdkkĖwY”a‚ż žąµß±<’³æĒ»xsJ•ü¬;^[5”YčO߯ӎz×GgsZlüšĀŻl鶇Śļ¢XäĪ Ą“¶HčGzūGĮŗÕåͼјĆŪänśŠłüĘJöGd%¦§L÷ŗ‹O²Ø½gųŸX}>XexŁ^„s^4fłŒźlyĘ·<µ!³ƒ^ģYåŌG8—²%ų‘X8?§µuöe%5ĄŽyäVĘeé'H xå„o9ŚE`čÓŻE©Āę5oõÕF—CŚõ ıū U=8ŸŹ±ō­NĀ[ÕµŌ&"/ónüVEó#œŌ#x®&10xw9č3L]uķāX#sĻ4ģ;ž©ążH-V’Šż„žu`:Ūõ­‹Aµ ¤IįL`©üėq\ńƈŗdƒVŚX(¢ „Špü}kĢ¢…ŽåüÅŻ&ߏ‚dՏKš]š,¬²ˆ×p –tūW{6‰„Ż\Ū'˜čü†¶‹čebŸ‰ü;§iöWf׉r.K5xv—b׏q#L’#M;/ö{DIrÄėŽÆZXyŽ$ńƒĪ7P†t6·7Öždn¶yDœÓ®¢{ø¤xdXJ€Ų#ļœō¦a&Ų_ĢN0GZ}˜²¤Š;pGJÖ$ŹV57Iy©Ęó>ȔŒ…WQć JėJ‡MµC łĄ8pßĆŪ#šŖ‘“eoų‚k™&ŽéUŗvąÖŽ®RźęŁa¶ŒDĖb=sļX}Žn=FņĪ5UeŲ~ī+©ŃgkĢ^ 12¶žĒüŠ:ūøPXCsĖ.špƒ&¹K›åÕ®¦Óī“ŁMØ ĀG ŽŌŲO‹H›RvÅēgnŅzkŖ×u]L³šŁįĪ€;ŸJw)Fē’ĻØĮmūęĖFčø¬Øī“®­dVpā@±ątꛑ¤"{éVÖ?nŗó!ß÷Ktjē-ō;½@Ė1Œ‚r:ž•p4äf—†/!P„9;³ĀóW5Ķ"h“ųŃnßy9b„ĄU˜J6<šéŅā)X<ØĶ„lkf=#ʊgŽycv@Ī(ģĻ9šĀö$w‘Ww˜G'ØÆ|ųz£RŃ †įgI|0š 45“ ŪĖö›€¬„…ē?•x>«Ū«™ę„ł[°§Öšv±šķå元mŽ)"•p ˆń§izżĀj/˜…»‚Ae<Råcku:żV×S²žĪšM4Ŗ¹‚LżĆß#éKį½-$ņ–söˆ²TqĀ³”®tr£¤:eŽ•ö™Ž›¦@GŗžÄc½Q“»–kS-šI½2UE OCÅoēø¹æš`e‡÷Œ¬qøƒŠīō›ČģlQKb>`Õg4•ŻHŸ]¹M\Ģp™8¼wXŠu"śā ’„ĄG*3A¬bki±XCc*LŖ“פֱh‰y„j1µÖņÆėßÜTÜÖ1±ŠųSOmkC…ĆyW£v n_ĒéY6ŚTq]¢\\ÄCŹ8'yźk&‡n‡u“6ŖJ“$Ø{r1Xš­č† .$lp1ŌŅŽ>Ų[źép—sČƒåķę°mdÖ|5v²@³ŪE"•ÜG-ɵzęüŪĖ,,Ņ…ņ×jö­ßAkm®XĆ!…®vĘ^[žŗw3ågŅu=/OҼ+V¶ÖV e·Ī* ™²s»ņÆš¼R]j ¦i¶5¶ ÜTš)óīnźŃ]B²ŲYÄKä‘Ås±i“ŻIR²d©ŖłĢå¦ö–-tŁ6ĶHłu<{ŸJ‰;•“;ū%ʙ9„Ŗ0[rœŒz×s.½5„•ĖŚįā)ø»ÅI¤]ˆ¼©k–Šņį&²•U óś×¢kŚ-õևج8KˆOĪFN=@ü+UTdyÆ”\Żh¦YnüµŒ)Ųąī“׊O #Mµuū3‰ GCļŠĶ–]ŗÕŒh‹AŌ×Y¦ŽC©i1Ē*lŪ‡"¦żįu“-¼mŖäķ c"²,§Ūjģ™:ޘK ‡ÉóSĖIW@;øĮĘņ Ö1±­>¢ź”§Mn§t_»—ø?ž¬×’Śč?ŲZ}ŽÄęwą«‚>µWm£;G©^ŪĶ)}›Š·Æ ¬k[›†ŪŠ_“€7qĘkd7¶Ļ}}²+·ļ[V:\‘Ź­*£GŒŒµˆ"Ņ9C®Õ^ŁéŠóū6VՌĶ(…²ž BAÜédŠa_" JØ'­k7„āŽÜylcŽ3µjLUŅē°žĪź‘`9ŗV¤Ś’Łmn&{„Wo”)źsO•"łŁäśµä×vķ'Ś&“ QIüń_H|;šĪ™i¦M«³r® 3uĮĻ„Ld)jCń~ĖX×/“GŠ e›gßpćź*šżSĽ­˜³¼…ŠØĮb~é¹ĢŻ.„X6yČń•ÉČ>µ”wjnluReČ (Ź‘IɉSīlxĀņ“wd÷Le•‹ƒ/ŻåSźśĢwÉoUH€Č¤‡Č][H’ąL#C·ÜVŽ„ā™uīō»HR[ųą.¹ŁĒņ Ö18)uthöYŽ6¹P8Rz×c.«Ø/„\Ķl<äłĘĪ­žß„!É$s yy2Å å™Ī+"ś!6£Ū"){Ó3:Ż2{ˆ 3C:c;U3É5kVÓd¼x_Ļy€Čć4‹Œ¬mųnÓƶgXŃÆÆ ‡T³mØTåd9ĮĮśVŒōĖ‹KTÕafš7ž‡éA¢]O=ÓīÆZżfĪv°8«ŗäó^IęĶī\‘Q)[@q3,¼¶ĮoŸ¢ń[’ĶhĒęŻŪ”H‡ę\ŽÉvÜ)T™XŽkfööęļdŒw\ął…†r}jŪŠI+‘YAĒi£ąŒēŒÕnͪƶźZ]ĒpǧØh:ļL½×Ł•œ‚ŪŽ6‘Uu.ݤgdČq»=j‰1¦ÓoøŲīŠv»Ą5éŽŌįŠą†åŃOČƃļ@Ó0üUÆé‡ģƧŗ¤„³J `+dš?JĖÄvwšyKŲԌäōäbƒK½;·Ō!ŠY~ĪĒf󌟻ķ[ö÷‰n‘Ļ!'wQÜŠQ™ćN„¼‹kļ9ēŚÆhZ޵/ƒ<7įĶ2Ņ+;õĄ9żé=Iķž”ŻéZDŹ£+œÖ”zĢ:EśŲ˜ā–ą1PŻ[Ÿé@”®cĶāuk¤·‡˜œzÖŒ,n­­ąŽYSt­– y_­Ī[Ļu¤Ūd"†ķ’Ā;āŗĶYõ-e²AÉS—8ąŠžDģu ^śk2˹˜2’{ÓłWeØXOatm@p݇@tVÉõ§Ų§TŠYŽ fėz|°šćĪ— 1ւ1ŗ»‘¦7l0‡SŚ“āqm j3”ąp ņh3ŗå½ü± c ē•½gy§[jP¤ƒ#9ʁo$wv0[Å ¶ŅIqŌēµy‹QŒ5”ŠŹ‘¶v1_ė@Ņ1<3oäĮ#_²½Ā>cļņ×^‘“×V·qÜĮå.NÖƵ±V3oŹj*Öņ6Ȳ@®_Ćžõ+ˆB—A'Ģ:‚((ķ%u„ÆɆ(ß÷c#@=ėŹõ--a¾–ʰ)Ģ w#9'õżi™Ķ·zr6±ĘNqY¹Ŗa¢“u3GD·'ƒż+¢Ō᳂kC›®Žō£+cĢu»Ÿ??;1#O'>µēćķ·™ ž9Ęź®d¢[x³UŽÖ;xē#bm ½‡­gÉ­_Ž—Ė6į“–8ŪōŖ²`vśE½¤7‚ńę¼P±8<Ō ā CQ‡HŅ⁠Fæ4ÜŹĆ(O©MyŖĮ`Ö¢ÖX†ŁGūC®}ėŽü#§ZĮ`nü»wšO”±°üé'bå°ĶR}ü_i×°-ŌXŚPć#5āZģ:ŪĒ Į:Ż’A…ƒé[ÄĢź|3u{äĮōjS!ŻTōjå>"_CØi·0Ų®%&@£$ü'Ź®K±œ£vx ՞§göI\yo0-ł’ėWI¢,Öw"ęVŻ‘—Ü~÷Ņ„”Ę6Üõż/\†hŌ\ځr«“]æ-MœšN™Q\f‘q§­+е!m%ōŃŽŽ;Œæ§iŗŽØt SI#8Œķ=½LU€M>÷TŌõ%’ą,–ABĒżåĮ­ĻĶe>™%œiÆĄ ŸéTg4yåÜĀŚ=7—µp9ū¢ŗÆ ŁGŽloód÷4'Ä_jw×VYAę[efĻ8Æ5Óõ]_AŌ­,-Ū–rŽHäÆ~ō3xģzĒöŽ8žc;/?1§ŲĆ§Ø‹āŒź‡ ƒÓڰnćgU6”¹’īʝ£b©ź•Ó­ż“> Ōõk»˜¦ČH‹9rÜu˜Ķ>f ž%¤ÜjšœŅ#ܘCałGҹ­VŹź OPK9eŽå¹]ŁĆqŚž u Æ5MßöšD’” ē®ÖĻjé5=[żF{ėˆ×8V?ÅRUū ¼7ZvžŹŗ3 Ŗjó¹nu+Yąk¹œM÷±“ƒH§-ņ;ėMmm¬Ń ,ØL †ē·å\/‹%ƒI¾U%w哞”īAÆį˃|žc[“łś×=ā+éķü蔯 ܎ i÷Éx7CUÖ`·‘ <˜T?^qł×ØxćĀ\Ś£Gį:[{Kx€8!ŒŽOõ`|ķöĖø.¦HĢžj9qЊõk3}µW˜IhĶ÷ĮŽŌĘzeåֈĖ:ß“B ¢¦yÅy?‡|+§kÜŻĶ ÓŪ’Ž[1åA9ÅL‘¢é–‰¤[YF,ķыƒœ}䶚ńMN™dXŅ2Ų$’GéX–ymö„”n¬eĀdq^#ŖųÖ8/®-töfE“c”žžµ5Ąė4Éö@o7ČF 0Ę}ė½šĘ”öęžŲ*‰OŹ 8ł”·8_ˆ6wZ½½Žį}ZŌŽšE2Dųr€Ž7v侕›c£jŗ3żRssr™YrT’\UDZõ=×\“† .Ģ3 9=y­‹‹ģ9ćŽ_+ĶLFÌc'@sš¶±­6»§k^żƒMŒfį}äļžÕŚŪüJ²×ę¹ŠmP¢Ęʃę¾GҲ”®; ~Ēlm¦,‘dŸrMpSŲÉs$‘@[g©Ø“:ŸhšfƬ\hšĆÉ5°ŒLaū”±œsīEWųļą]SUŃü2,l¢ß†D^”¶zŠ̳ą_ čś}…„śŹ£ž”rčj¢yæˆüu„ͬXŽ;É˜ČŹĖJó)cš’…“ł_Lx®®ŁM¼‘ø,aČźzóHv6~x[Xń…†”<Ģ–NU‹Œ,}ö“ōĶtSčÖ-y0•EÅģ` fn{R2”lf_h‚åēÓÆˆš#ņįO+ųŠč“ż"[|Hˆc#)ׄm­čšeŽ«ż©gyveā·s—ģXż+ä_łśE¬š@¢ŁFå黟(_ßßjZƒ„$ĶmRžķZ?»ČĪ~øÆ|Š“{‹{ł­oŹ™÷ĄĻLf‚ćē”|Sųqāki{į[Ēū8‡÷Š™ĄPR=’Z¼÷ąæŽÆ|/ć[ļ x¾8Rс‚ ¦å™½¹ē’ÆAq>¬Ō”K†žķŻ@ŖaĪ*zb¹ø>(i¶¶š…®Źł£mŠ©?źŪ<‘޵”×ašŗÅoM¬CeŖ °…i[q×=3^­„k~›XHaŌX7ĢŽć Ōż:×3‹|oń;ćRIć]_C¶æ±Õ¼0·o ²‡;¼±Ęqõ«— |#¬ŚéZ‡†Žą[Ēœ%vz õ®šwĒĆį›m#Tk‹/õ›J±Ą ćæÖŗ]3Móü»–I#‰ĮĆ0+ĻćZˆÕžÄ³»KøērūzW/āõńchę 2õአ0ą`śķ #Ą¾+¼Ņ<=¬'Šo§øÖnī¾Ļo ćpćvL»M~Ńīm§Ž4~6ŖōzŠg4k2ŪŤOqu’]®ķŽ„iéž±³’Śł$ŹB pŽÕ›“3*ŽŚZŹ%žŃ›ģšÄĘFwp¢»?†£K›Ć× §Żyŗ‹ČńĘŒæź²x?^i¹øv:=&YŪDŌķīµiõ9­A#œ–lō'¶*='SÓ'…N¤Z,pÅF@j‹ė”<¬­¬h-<ŚG‡Œŗ›ĘCą.Õ|×+ńįÅé±ŅüLnnēbĮ|„%ĄĪG°=}«[÷.k>ń=¾¤«e/‡Š“12J§ĢÄaQ)Ž2¹ÄĒØ=čX·.Ę#bē©§Ś]Ėsw¶ N Ɂ\ņ•͹č <=§č×·zī±ŽåŽ9q·ßņÆ®|1āQāߎ;;ĻÓ;AĒ_éSvZ¤Ü[ģx§Ā­üq«ųRĆOW ț¹õąu’ évÓoõoŻ’l^‹h!iKyQ®/ Å{īė«->F—ģå8‹9š­āƖēˆx‡įü3\Łiŗ;™õ»©›č„}ę>‡šć,ü?Ū^×RXdE%KgäČōŖµČ•2/£Ū$+ &|„„Övį/kšŽ]ŪŲĻżŸoƒ#ķź):WÜɣѼ+s ‹Ée°’U#»Š½q=÷öŒńˆ6sŒpMfč³.sĆžÖÅBź;袔0fxĘJ‚~ļ^õō]Ō:=½’ ē(c_›xĘÖ¬åM”¤pš•Ü0 =‚ĖpüłÄŒg×霵ꑆąŽĆt×F¦āW0‘‡ŻQčzVīUŸa× WÉäĢɼ¾Įé^”§ųęĄya£)±@W¾µ¬CQś—Šcŗ/&ąŠ¹!Tci÷Æ.Õµ-FžŅāßL{rĪ~bĆ#EyW„ŚŻÄ÷(ā>Ģǽ.”bŚŽ±¦›¶¶i†uyĘ3Ö¢Q¹,ćõ \E­HŚ…ä›I †®*ĖG{„¼–ńś½R¢cnˆū3Įʏā Ē6“§‡ŗeY²I(ćkÅ|s¬Zųd™ķāQu#”W—|։[B£‹Ō¬īŖ}Ŗ’„õkķ5ŚĪKk†X“\gó«k”Ó =3Uųƒ$E‰ŪfDSĖ·½xN­{6­Ø‹Ū¤ÄĶŪ5Œ£ŠŃÓ±Ł[Ķö{Tu aœ{Xr4m,sĖqå—ū›æˆć§ó¬¤Ś2k”ž«{%ś”-§CÉÅzĆj@XEŽmį ķW”<ˆ’UI-£ŪΜuć‘Č5õĆßĀS¢8“ī؈äēņž”ĻBQ?;æo?wŠ“]nź]& Ķ/X¶}>ā20¬8>Üąžuü0~Ń’üEšćā‹<ā=6ūJŗŅ%x£žP»f?)\uP+Jg,ϐµ;t%™@•TxĶTŽhVßĖŲ›÷–ęlև,—A%ŒEņē`Įäö¬É`3¢Ä,<äø8#éZ)hIr@4Œ9{Ņyæg0FŖLL9ćæ„K5ƒčiƱ|Ā©µY·`žEY·¼ņ•“pG'šqLģ§#ī?؃öŖ×?dŸŚį×Å«=[ūĆQÜE«Eā»l`H’dēšÆōwŠük¤üQ𯇼᫸/“=jŅ+»i£ «@HćėŸĘŠ‹MM§.„;ĖGˆ7˜C/ ׏’¼-ö×Ć™÷ˆĄsJå9ä~i|Nšf¬ézž™ØlÆ#uRW"9Ę@$õē5ü—žŁæßį'ÄéŅļ®4-[Ī“ĪxČT—<…nĄółVїc .‡ÉŹbi#\0rNqڳ<æ)Œ|ŁĄdĮÉ?4„±ÓMō?²ų%’ķ+ĒƒPYų‰müI§[‡¶Ś 1ÜĒŲī7Óæżü;ń½—ˆōķ#Qžošī-— ć9Ē ŸĒŸĘ¹fl¤ĪööŠŪŻ‹€TĀF×_Zų?ž ;ū.iµ—ģŪā/ Z-ÕÆtkI.l%É»ƒų¢>¼`cÆLwÆ:“t4Œõ?Ļs\Ń|CšćÅś·„¼Sk-„ķ•ĆĄ‰³E8?A_C|+ń4“B§ˆćrƒĄÆ1§x*ˆė§>‡Šk4¶rIl³gxēōÆ6ń”’Ėd—R#„r~b1ŒW‡M{ƳZvŗō>!±‹F‰VKŌ” enHéž5Ō|ń„¦Øź$1ĶøņåNC÷Éīkź2ķ6źyµ—cķ=*ü\¤8ļWŌ"ĘŠƒøsšśoCÉØš14Ū4“ŗw‘eŁøI®ÖĪīv-“2<75¼eŠÄš[‹9!a01øLv®rHē¶rĄ<`ö«֝©ŽÖ0§œÖŌ~QūB>H>”X Zg™­8µr wŗ_…’9m„¦7™ˆŠ,Æj:f©göXģ§Ų‘G‰#eė:W? ZU“š‡^t^T¼h…׮ε£Ė-«ęķć #ć±5ē:‡-°i®ĖM³²s“ŸSW’älOx±Ovø†ą6īœ6*-sVHuM7_[™ö#‚ƒ"<’ŗ8­°)ö§ćH5ĶU†žtŚēƒķ^f4ąI.<ÅßĖčOzZs’ŚqĪ‚ “óZ>‰õI8ßjyTąć5D9źtkiq=ė騛äÉä=EUø hęϱóĶē3 ę@ !lg=ėøM.I4Ó-“¤Ģ§”ąƒ[E”_¹E4…Q#Ü^y\üĒ“Y?g]YĶv&ŌķmŲ–]ų,9ąqN[r¾ńuī<ś}ö’²4³2Ē8$˜—vu±ė[ž%æŽŁbŽ@›Ąw5ŠćžG(Ģū§ó­m3Wk3"HŽe¼„>1ަRčfz<[?•†ŽEū¤d µ<0Gm}¬M*„”÷¤ ģ?äŽqÅY}§A:ŻĒ2®āJs‚iŃŽK¬<i`ŌÖ¦Ä~#ÓVh! 3ÆB§Ø®kDÓõkK‹i-£ÜŪĆ`Œšzӕ '²=›ĘŚĘ”.‰gö¤óq&ķŲ{‚¹ĶĘ÷q\A¦ŹvĀę}ī}j×c]NėRń¾˜a’Ķ!GødŪéž;V_‡ōł'°€ź(ČźY±¼ō'¾}©˜4_•¢¼ū=”Š/³ĄH] 3ÜׯģäŠĘF8Ļ-ėAˆĻ h_Śz|’jÅ]˜łGF­ß-¶mw§iĀ;= †Ś1š™ŖM4“i<ŻĒ =élt+kŅĖ~ó p !čO½V3|Y{k¢¬Ś}„ŌˆŁ~dū¹ō¬[]B ÅBSqØėš‡cVŁg¹W[xÉe£¤kßŲҬ3"oJžQó³Šķ|Ai¬’»ˆ~‰ŖŚ®ÆkoƒOXÕĪU€=ėD­”,ó«ˆöh÷:¤«œ€>÷Ö“ü?”ÅØÜN—Sˆ#_lŸ„Q)£S^³ƒO×ō³·YmŃI’RŲ(śõĻųź%Ōu›_²Č¦y2N9;Ī(6Œˆ—ńŽ4$”u9VĒҁŲēļ­§Šįm$PĪ@#Ž“³ZyVķčųnķA‰>¦źĶałqœ;Šööń=–™£™ī¤‹Č эiwb9u<’PæÓļ“é„Ė›Ģ\€Ż®J·ÅŪŚ:§0 ÉüІkŃŃEgf.”\BŪ-ŌVåŻšĮhņDŖ+ėSb&ÕdŌ„ Ś¢.ĄÄ!Bpj͜¶ģDSót攦&q:åėÜź‡ä‘Ą¤`~Æ„ŪŪ¤šĖ0ē*»ō Vg„Eqc$Jįǘœ6k”‹_†2{!vRĀłŃƒĆ9ŠQĢEØGso ۟;sņ+7Äz”—VkaædøW YFāIŖźŒ¶+ØĶœ°­)¼H¶q3m2rĪ=čæŪqD’\ØRpN+™šēRMe„$&FÅć9öü(°“·+s”ČŻWÖ¤½SmiŠōĒæ„e442=ĒU±xÆēŻøo@„#‘ŸÄVtņڼˆT2·Ź@ėPl—C½ŃdžĪu{Œ"1ž¦»KbāÖb¦w„’ŖJtš\éėéĖ:„ļ*U»zs^©$Vņ;M"å·¤Š)¬Š×»8‚`õ¬‹ ėžo“CķŃw ÖJ] ©„¶–ųCjĖęnłG­vw6“[E „a€ČŃ68»•īu(,“ē™Ś'—pP§Žøžk鏦vÆ¹v“Ņ”2š;»«v)ö§AŽFMtśN³„¼ķćȰÆŪĪ=…_9Ÿ#ŲÅÖużŃĖ14VĶĄČę¼Śõ­ļüˆfåć}ąwĻ­ Żv¬””DŒÜ²a3€3¦Mā+8®"yćo›q_į_žµ(£^s®¼ÕŽōżEīŽŁ$1=Č©¼i7‡<[gw/‡ģlŃHI1žųēš&”¢®y ÜĒåŚDøéQ4÷޼TŌŃ …Ō4[‡ŽŅ‘“}Ų©nĘ(n$pƒh8īh‡×āęĀ[;[¹¢ó±ä~5sOŅ.“ŻķmīÜjÜī*h4ƒčy&£öؐ‰Y™·g'Ö¤åøa ł§š [I-’@T£ē{RYß e†)•SŠėeŽ µŽŽHĪĄ;½]–“1ˆģĖJü¢€=%µm=¢y‹‚¤õśW«ŲŚŽOi=Ä#Έœ2œc#sv<ņöŹÖ}|ŁYØFĄ-°w霾ŌxO[„²4‰å V-üMA¤LE³Ŗ[mR¹śšÜO ż©%µ‚CG,øż*vC=Įś=·‡ÜD?zä`Čz±ÆY>ÓļēŽKę”FŹ2TE.r¹O?įÖ¢śŽ§uyØ[ŪépJ$µ!žvū¤}s^uāyw~—DiģŽ7Ü·LöŸéV™ \Č}1.-!’BĢHß°@Ÿ.žķ‘@6mĮµRZŲ¦Ś/gŗĪM’1ģyĒ­qב_[kvĘęGfOJ;Ÿ`x;X“ŲZ÷fäs¹R+?ā6”¤j“˜ķ÷P1cĻAčM.ĢńW–ÕnŅp’·(;‘ė[–ŗeŅŁÜN\¹ß»‚‚Ģ‹vĪas2;Ws hQčәŒ‹!š3ĮśŠ?ń‡J·¶¶šĀN>Ėž”di ¶;~Ÿ­Cg Ł ½AĶ¢)‘€ņĘ7}p*yŠXĒæžćL±}:(ó$}Üžq\ꑦ>£½Ģ›rNÕ#©öc>;{m:īu3¾†¶§ W‹ę`śf e{&%K6:ø''–śVžžoµ‹õÓ­ŠÉtßtćń=)‹/‡ž ©Rģ.ąÄ’;V£¦E,Ęł›?! fx¤³ŸģåĀJējē½@Ęk9c·Ģ§֐ˆ¦EäiÆxą˜˜d)ļžsXÖzĒöEŲŌ­ŽxµpŃ:Ÿŗ}Ŗ¬ų2)|Iā;«¦”K$.Z`Ł Iä“^³jp^+ڱū‚„ŚĻ֔ca—ĆžD·zŒŅŖ]Mƒ)ĻPø}ā×Ä:Ö”qLmb,¾i.ńü?„Xˆg6š‚Y˜[¶rųT·:tBu{}5åņdm ‚}ūÕs0±ē/±µ·ū†²|Y­M„źörd˽ŠņXzzļÄ5¶ŸŌW!CĘ@¹ śVŅW'­y?$ŅćՐZĆ n«ę§$¾9’>՗36Hįžöuڼ˜žœšö߇– -¤ėtč’¹ ‚j@ķµķīvZ²8+Œ”āø[˜/­d›ĢM’6Ҥtü(‰“¤Ķk¢ÜjxķĻ‚xĒ? ö]#EÓo­ęÕeµ†E1`+Ž #·½\_qœśxhBÓϧۋt9fR1ĄļY1]Ēsr“…€9ć§„^'ŗÓŪMRń‡e!UW½|÷⋉õŪĶ2ĪŅŃģaŒååSąvžU‹°Ńu­+Ɠ[iŅGö«™Sē‘ŸjŌļ¼ŽŹ%·y#ä?vŸ®ųFmI.n,-|٘å<“Hhąü žW‹K¾†[y”źGU>ÕŁk𾫢ųŽōŚ4#LE+ƒ!Éé“ųUĘAcÉ>ͤź:»\j“}š' ]ŌcęĮĘU}ƧŠuŌ³Ņ\D×a €@÷ś ŌFާkŖi÷R-ņKomę’zā» śŁį€ÄŹŠ·9ÅX»õ5ē7f‘ ¤īgˆēåīÖ\p[I}o%Ä< Ąøa÷…$Ļ±óOÄ_ ’jꚾ©d°ŪķåD‹“}+äęŠē¹Ō¾Č!Ł0•MĘ ē&·Bē=¾Ž.'6čŪdŒĘē$qÖ³l%žĮ¹ŗ½•Ų؆C©źųć?J*-že»§ėšæ‡ļō‹84ƒnŽ.YI&āBy'ž;tōÆKÓć¹½ŗiYŚāG895Œž„:e/Ś’`ĶWŽÉē8Aņœ©ō«°üŅAē[ļćžśükX™†«£Ū\i×0Ķō•ećiė\ƅ“Ķ/ĆīŸs#ģGL$;¾ņÖ¢h‰|Oć-:[»†žķ6«…oösė]]µŒzƅåÕtV‹P@c dóÓ?ZĢ„±Ä隦³į r’TŌmę‚ę/-†įó(ŒƒŪšóÆ|Jń»ā=CÄvZ„”ŚQ5²9żßū„}(5åGŖ|ń%Ÿ4ĶVPĀŚŌW*ŽŠ~M¤Ü}qś×ŅÖÖqFEøŒ P.DyoĘ4Õ¢±°ažĶ2…Jäś~8¬/Cc¤iKöÖj€Ŗ‘ĒćAIX›Ä÷öšå“Ū‘b$ctcš:×ĘwZ>§©ź÷ŗqI-ć‚`½H-ĻSųPŪ’txSĮ±éžø•c»żżŠ‘·p8'&¾wų½,·É.#ip0 į›J 3<ā??PHŽX”T}®e’ׯL]N;e’āŃ£‘wCŲž ÅØlõ¹ž4€|ĢqœW•ėž šķĶĆj?ŁŠĖrWh—ØŚ9éAJV<·QÓR;É ŪŠ¢…š®gÅ;}.ÕÆ®n.o/”tdrŽ“¦t_ µ˜µŻźźy䊯ó$ĮŪv9÷č+—>š¶­ā(o"†Õ®įŹ„°$ā€ŒŒo~2‡@µ³Št ”u©¾Ļ -ä`|ĄöżzłÆĆ—zœZ¤±‘󓽟$±=Ķ ³Ł¶l–(ŅŹ=ҹĖ6s“ėW£ńæ•ėŚģhäŒĀ®[%MB€Ä īo“-jčŃG„©n~ń„́Mŗß‡“[=ŻČ–/|ģ wa=ŲŅ¾d»Óü[§ź’©Įx9;9VO@3L9a‚ČYŧźZ’¬‘2‰9?+’²ieæ:…ÓżVŻU§EéŠM7©“ćČc-†•{wqēclłu`;kĖü1ńūĄŗ“é}öXÄųE%•Žy ėQČh­kŸfųÌ4{‹żFŽ0·p=Ć¢š_<ä)äׯųrŽžŹõ­õ(ģ¦č"īGµJDI®‡†Å?ˆ| ć;!bś¬“t ¤ŸķۚśÄ%æńƒŚjó,žU’EžƒŅµq .§ń7SŅt-WO^^½¢Ēf4Ū‚?……yŽŸs.«”Iµ“Ķ2oa“Žłö¤‘'Ÿk±iš[åüęģ;Ó~kš„ü@×zōčģ˜1*– 8ł÷’€ē°Ōtéõ©gŽöŪj˜UG=’Ļ­aüVńN™e£GØ­āŪĀ ¼üńzķČ©ėbw1¾@5ż=5™LwØ±Ķƒ!ĮrŖHSÅ|ƦźWŸüe>‘ā­R} Ń„–(āPI”œZ£U$z‡¼’ę­q,:µÅåÖ͌ī1½{dWowāM03h7—-mŖó1¬æćCEódž·Öõ¤hyÕXƒČæŅØßų yŽ‹‡žFMønH¬š&R=OĮ÷0ųvĘŻcŽh#U #ßĀö 7āq’ĪĻQiŹŽlŪ3‚Ćą+)ÄÉŁ»?üaÆx÷Å?Ś u=‹¬Aaø‹Ctū½ėšųįĻų“BŠ­¢”ŽGnžg›'ü¶`N¼×<Ѥ"Ž?_š=Ē‚“{ķūøņę6ŲXåsü'ŠŃąæķ5Ó¼ä†ĘXö±=ĻjÅģZŠś,-®ķć¶žŌ© vļ]n—ØųkAŅŽ„Ł› 4õķÉCžNćłÖq•‰ēvå<śŽMGūcTž ZiķœžåG÷GņĶz·†-ŃÆt“KČ ‘ eżćGķÜž•ßTgÜ·įkzzĆ»y¹ x9V߉oæį*Ū÷G*ōĮĮމ+œč¼'¢Ü[$Żx™‚oqŸ­Tńœ:\wSCfŻŽøėYJż īyŽ¦hVĘ<ł½} ~‘|0Ņu+‡Vö×VbŚ`ŽjĮ$k€O~œÓ4„ ń·Ān}oPŌ5[xģ‘ž0žRlC:õ«/Ä? {Ųn#ƒwÆ \N…¤ź6ļ%³HĢŪ¶ģĘwZ¾S¤uŅųRśž$ŠI~Ī U÷¬éä¼Ņt”e#EäÅ/™ę•łŪŒc>”œNg+£ĢµOPŌļ~H噘ņä{ś×°čzU½ī™eVƒĶ ¶Mų œõر/±Ō-®”g¦’eA8µÓŁ÷9‹åeĒ”×mŽ§Æ„¦°fŗ·‰ƒĘIÉ'šĶ̱éҼEb±I±W;ņTŁ®+ĘzU—‡Æ¢ÓŌ›÷9zś’õؔŗp} ’„zö™×:ˆƒĪĢ’8Q·9éĒå]7ˆ|[jóŽ[yU±ĻjĶ1‰įšĒ†­Æõ9Æ"’Dørw¹>µé:>ˆ4ż-"YƒēÆsQ÷”c“Ō4ļ1ĢĖ&Ćø‚k*Y–Ķ«•’ÜłÖ;™“k1#iBXļ•°CŹPkĶ>ŌŃĻRÜĖ5²¶±ī{Ö鉳Ū<;{ŽšZ܇Źį« ±>’;ŁĄX/Č\<5UՈ™ęZ¾„äjVķžS+ģĆį]\ś¤ƒMhć1OżåŪĻēT¢Œ¤—SĶnĢ’LRr©»…µméšmœ‰$‚@[ õŖJŪ=‡s¤Gk$Vš¬I H^„c8Ķmiś]ŗ•™!Ž9¹ÉĻ@*e.†œż Øly­&¶/ĖFē¹ö©/5¢’nMVCq<'ną6…o”ö¬šŖŠĒ±Õü;y÷2jQż®<$pmź}sS¬V—vpK=}Īk)D‡K¹•,S\Ē,«É*ņ÷«ķ%DnĘ'Ķf8ùÕč~&‡BŠ…ŠŪK5Ģóü»Ō²°ĒB{W†ųē@½»ń 7wš„”UoīdōŖHč‚+éMk¢Č‰k7ļNUŌ7ŽŠéÉq%Ō“:DńēåČŖI•ČŽÆSń–›m$€å•”QŠćҹ}ā§kzŅC •n“ī)E•#ПĘS\*+ 9e$óōŖ6æŚSkŽŪM2mQ¶4Ļ^¹Ļ­iȌg>‡4ŗ.»sāūēŌR;DBĮóXŸZö-'F»IœŽ&å\óŒUĘF½9ˆĪ–ѲF¤sž¤öü+Åoo'k  Œd Žō\ꦒHīōĶy,ķ IÕJ«d·sT5gķ×7pJ䔀u§sxŌ±ę:ŗßÅ+ŖÜ±W>µ“mĖrf,cÆzM“:†ģWķq8€0ECƒ‘É‚»čō.mą6G ø dēŒ¤bd\h~\ˆųhH<`:²w¦Īvō>Ōć.‚?ԟökų³„ütż—žüZÓn¬īo/,@DßźīAbC£œŽ}}1š“ÄćEń<6Sī÷yG“?*‘Ó#üōÆB­+l{5(žēńGĀšxæĀŚž‰4fd•IĀųįķ޿ޒų+÷ģļx5;āw†lnŚūCŒZė•ęUc‚ģsĪ8®TģyµccłĒń›,ČĖsœČz Ŗz äD“#9RĢ’ÕZŞ|åbF¹YU÷Ų½ļMŽїLģ徕Dó™ņ™ÉļRy§Ē2·%dA¤dYˆ0F]ķĖ ŻM>ÖuŹ£Ū$€6HoįŖęgD5;+IVõVaóļˆ²ä+ö<×ög’ż“ßāGĀMköeńÖ®5heō‰7óaĘvO8%śzūR·C®;Xžƒļ¼ÉK±W@Ä«ƒ^[ā½2ym|蔯snwgW<×;F3> ųŁįĶo®#ŅŠŪŚŹ¢EWķ!\°üó_…_·÷Įč¼šņ{‹kW¶ØķÖd9ćŲńśÓR±•Ļē_S²Ū1ŽHÖūfēˆć9½ė‘•dˆ;I CÓłÖĘU"¹ ēżÜ…Gå»3į›téÅ4¤V·ƒŹ…<Ö0brzŽjŌFE ುÅk@ÜJ Ź6üśSVY\ąć$ć8f°4T‰ņóߌµmgHe$3c§¶*e±ŻLż’‚t~Ów³ļķ¦Ś Qt’ j–ėčéµ —~ĒnOjžå¾x‡NŌļ4[čuJÕąŠxX $3u?@I†+žjēJö„Ϙmć,÷_Ų×?sww­Ģ±Ā%ŗˆ…Ęx’2 ūk‚Ŗ!üb’ĮoæcVųAń9>/xz _ k3ėv˜•Jü“y g§½~9ü2×VÖF™4†O–EŒē8÷ü+ŹÅ{ԜC¦œ±ü1ā=\†{ ,ī–eŪ“‘Ē#éĶlMįĖ]^ķģoķŚ]6>Fęö<×ŹŌ©Źō=Óŗ8ūæ‚ö^ŌgÕYžĖÄ^!^=3zł«UšåƄ|X—–“Ė–į¦Į<;Ķ{~2ÓHʶZēŁŸ ü^ŗĶœ*ŚUõģ†äÄ•IÉ5öT¤|åufŃ4ĢÓ*łjŖ§œc“Q¬r]ź0:üŻEvEXć,¤’JӘEūŠNMlŚ?ōŅū ”˜mQŻoĒ~¢ŗx,&ÕXĘ’¤Œ8ÅHŪ¶6Ś ō)+”ŹīĻAZ3ė/7Šlę³¹x-ĮFałŠ>^§±Gā·’F“œ,‰ dpøõ­}cL³Ōtk»Øēbņ‹ē8ŪZdµŠšŸ[Į÷Vń#M!ÜĖžEQ½ŃodIßĻ0s¹‚ńšµ#'O¶2NĶ"’ć#>‚²5+gæ¾–Ųŗ½øa€:Sē>=ķ5QŖAyrbP?tļņdz »ā]KŲŦņ‘ÕG ØZš…»8dņ˜œõļ^¤YÜYŁ‹[3Ļv ĻsžMlf⑁Ī©§j—+xĆq}¹<k^K»{mJ)n£‘ķ[ ĢŸĀ‚@ÜZ§™$oū®«Ÿė^“ą÷¶žĻ¼’BİĢdtfō4=#RVžīī;€Ė»¹Č>ՍmØĻa"Ś»1V8bFi„¢vÓŚčķ„G<)ģ_;¹9ó? ąµN[fŗAøŲt ĀI¦s¶ŃΚ’Ld)6š3ƒė]\2;Ļ‘póŌ÷¦Œłŗu+Č®mć‘d•®OŽpµŹZź)šæ’3+¦T«wc3Ь¾(jś›Į–J|¶ČżŠ¬8üqŖXų‰!˜Iqe;ņ¹ž¤ūTMP>€Š%šÖ•%Ę£©%¶Łv3>yeöĒp |Æń/ģz5BĆl¶sOµ)ł“'õ¬$ßCF{?ŚéöI £Źo¤¶WŲ«ZŅE䇿ź`H½É÷¢7źKe’^,±°ņóŸN™¬įż>īźŽÖ).$V8u`Eᯈš¶‹}ęė첬Ā]˜Üƒ«éĒV¶—ŚÅüÖRĖm!ĻuŌ€ó’ź¢ā3~ä‘æŹ¼į4ēI×ņŒƒę*yüi$L„m –Z„Ś `ržKśēK«źVLĪ‚0ė’Ģ?ЦM”™Ę[kÓÜ4fŲI“Ÿ¦Ńļ^™ ėSF›T5‡9źEøĶ?ėÆ&”’f† «±ŲpXÖ„¬Y ŒÉĘ~nW5fr‹¹ĢéŗœĘšCmpr§’zŠŽ»ši,RÉ@\枆ś‘Ö”“xŚ:“sŸ-dY#RaUÖż­‘õ)™U‡Č21֐ķÆ£™į¼Žq’8nį] ž#† 9 Ź<`w9 .M@kHė 9Ļó%½¤ŃCnĢ…Ų[PAc'™$HgŒ „h&4vʬjpsځÜұŅ"GdÄ@(Wų įq?ŸqrĶEƒūōBčx–"w@J©\ŽkÖĆ»œ³ńʚaĆÄL· Ē<ÓöyŹģcl ŠP„°"ۘå`Fļ”c­Ai„Åóęd\ī\ Ž`6,.ķąŌ,a’@ ?\}Ń^Ķ©éšlšŗĘˆ÷LÅĢ„ō\ `~u™qZœŽ’š#£ą®I£Ž¬XNmµK)ÖŅ)ą\‡ŽsJF¦ÕĘ£`·Hų›±ŒS¬5 NŅžóTi×ČĪ"TąŠR1/¼B—~É KŌ 8Ļ*HĶy¦©®ŻÉ !fq<œœŠČұŠ[»užąČ¤€Ąć…jčŗ=½ž¬–qŹĘYŹ»»ÖńZøž‰£ųWNÓ!š‰V—yf9+ųŅų¬„Œˆ%Ž["ƒę„)[©V<® iõĖ_“ZĀņŪ—1“ŒdƒŽ?*”RéÓI ŖČėĒĶŌV X†]ņ.ddēŸq]*Zķž 7C“p{{Š Ś™-ę…ā*€’YjóęµņÆDˆĄ8<Ö$ėsvŪN‘%,Ć#œŽÕŅŪ_ŁČóiĢākĶ™!;g¹żjĘax‹L×5!¬tٌkę.õwŹ ž„š/†5ŗ0M'‘nÜz(©”z”^Ō,®tėē¾KfŌ#†`²ČöŖž5¼³ńm®—<‘Oiwi”Œn^pĒlšČ<±“W3;"`JÖŠå—Lšyšc.ģØҚv%›qkmɶ$nnžÕ©-āiģäX)žuRz õƇ÷Ÿš”Ü5ƒĒ‰Sēļ u?ÄY_Į$6„ę=ÅfĢ6:µę9vF]փŖfŽ3 ÄŸį÷ O[Ō¬Śå,īŒ‹&0ɰć§5•«ĀóŁMc2ģ€šĪ:ēė@ć‡$žųk£“³XŻź2,ŽhäfŚ ĪēÖø»-KJÖü^uŻ:I-āŸy;~ćw ž?ʃt §ÖŚć»ÓČŌ `ē,;šĪ·æ“»Ó®VčN/IŹc…_\Ös@y­¢™n„G„~Tšķ¼%ą5dš[åEX×§]ʔWr‘CÅ:YŅ ¼o·l|…~ķršKMr®ī¤#6"µŲ’†© Ėz±[©?7n’Zō½:==!¶“Õ]bޘm§;I’"ƒ7-t<¢ęēR†K›+Ąéé!Ųy—•”ö§¬¶”t²¶į@<Ó$°“½SŪĒO„MŠŠÓĀis'“ŹóżźčćŌ‘¦Ķl‘*]«}ņy#ڐ4ŽĀ~#¹Ky š˜žVVoĀ¢ńĘ£Ø]-ģ”bPBŒ/Rz <žóEKĶR;¦ƒ0 ĽKū^]J“‚Ź4½”¶?Öp¼ iŻėįŪ‹Éķå†įā`c^qۊó Į&•ᄸÕOµ…ć+’Ü÷¦;ė·:Ļ–‘n[ubqƒÅG{j‹x$T”p:Ņ+—KŠ|}­ų’ßYŗ'±·MÅ#\}ŪśW§=żÄņi3Ļ\[ØQ@¬T³[+”CmcŸ˜u«VwҤƒ ÜśŠ#;m& vļZš8ŸP-¾IĪćč*åµ½RÄ%ĖŻÅēSņަž_ÆųRMVmGL·‘!`Ucėķ^£ą(čßfdŽ7LaŒb¶Šŗ"R±sć6†oĀK$Ö©™'„±üĒēś–§„iŸf‚Ä£¾>čĻ\TŹ!\ŠßÄ2ɀ@VĪĒŻz]U RQƒŹż±Ą@¢–‘yį;éõ5“24q³EęF쯻ų£Ė~ž!µ’[kŪž28t=3Zq¾*ƒN·ńMŻŽ˜®‘mS“€~£ó®rėMWßy¦-¹O,ēę­g3d¬q7~µ²—r¢DŸ{1ń·ßė^²·Z…<7eƬwww$lņUyÉčŁüJHĘøÖl¼WŒŗ •Š?,¾ę¶¬£@¬."I€ŖGjÕhŒ0õ]JÖŽwŠBv7Aķé^mØėö³jJlķL&…vS•® ¦ āĶ&s®jĘ/ō[؃¹ļ8ģēłUßźž.ÓnīĪr4øĄ21'‚Ą`qķŠÉ”¢¶Æż³«^M{®ų‚[Éä ²Ė'Ø=.+Šāųqį=[ĆwW˪ޔڌŸ.Ćž×ėŽ¤Ł4Ķ*_…ŗĶՎ™źÓDšĄāFž÷}šĖUŌu=ū{ZÕ-õ ¤+ĘV‡ Ę(Żėš†—ā;xᆠįŽ/Ōó½ŗńķ^āķ:ēÄS=µ¤7É.čĘ c’ÕśŌsmö}3G:ä¶”h|ī>ƒ+;Z×4M]XŪDD¤ƒs8?•.q8œ„ŸÄ!ī“=ĘKųįšä(0”³Ń`q]×ķ”ųwSŃ,u)-oÆomü蚣FÄćŸĀ©K[ ’ĒČ2^>xā<ōą×¦xWS˜XŪOv6ŁnŚIÉÉ’&Ø9z‘ØĒ`°Ēy§ÜOp. ķŲsŚ©ię+ė-›‘”‘I2h"Q±Įų‹Į „\_FŹFņƒŽ=«ęéŗ~­=ö“i3¼ņ©ˆ2ŒłOļA¤Qė^ų7©ŲxJ%y(ĶĢ…ĘOĽGJņ>ÓPšž­ŖésŪ—ł™–~Ķ“Ūé@r£Ļ¼]”źZv· ö—qłĻ8ē,zʹȓ]JŅ)š=Œpāž§¤ų~8“ø<Åf¹*6¼ęŖ–”\ÜY=“š2°ćaĆńÕ}h¢³‚óDß6’$…¦kńĆÕX'¹¾ŌZĪņYqlŠe&Žź×Jž+¦µgū&ӜŒŸĄōÅp”ŌHŅ'·[tŅ-™Q¶' žēėĶdårWąöÆ­¦ÆĮ¦A§<åd;‡īńŠć½}“ć)žÓĮöM9KU’į˜€6–źGćPÄŽ7»–ąIaÄA#ķ•Īs×§į\~É4ļ±E ijŹt”ԐßCšŅ2č7äu·śö”{kl’EžŽ Ŗ:޲|Öļā›Ė½KZ‹N²Ų¼āH=1N,—~‡Ų>ųį-ŹāĻIŗ·»™‘™0#§<õÆ ŌtxÄ6šö»§ŚŪ“łŃ¶0C ӏ˜FżM][Åz¦ø·0éZ“še½ŗķ†F¾‚¹Ļéž'¹ŗŸS¾ÕŅśĘы!P3'={sOcUzMƉōmE®µ3O†o4[9ęg<gßł×G+x9ŚŽŃ®"󙂲 Ż#¶=:w¦'ȟõ [ ¬pČūžEm1©.EqžÕ5¬WHƒU’Ś)IÜ÷¢äÆ3č}įĆ½:Ęą‰&ńKĖf4Ž@G#±öÆ)±ųu¢čśŒff–“ī<…Ąƒ52äśŧų„éX±“GHBn!GȀv¦ųś/ ų«Ćv‘%äwjD²&HŚ®*9ˆ:ÜxþšÖ•„Ü]$ūG˜xv=Ē>•„¦ų3AžŽ›ZÓlćžÕuĢEÉcéŠŅ2¹œe©©ńL¹ų}ąms]Cž]iœEµÓāLb¾Xš¼~"ŌlµMgP7w²€L„ć·ó¦h{bčöŗ© Öč„å #ä€k+ÅŽ(Óü$‰¬„¬H‘Fct(Ÿ9ÉĮśŌLR‹Ųµmü$ž‡Äš]±:jĘiq'”÷é^W©IÆŻż› meļū¤aųW4„ŃXśCĆ0ųq¼4ouG0Ü‹‚FxsX:^±{­]?‡…ÜÉįķž|w’» u‡~+&®h™Ģ|CœĖk$vֲߘ”ˆĮ-ŠłēC½=ķ.,ēWk”9ķYū&Мq‹Ę²ÉØ[é×SIo7”|Äp{×ukā;D·š Eš;`|øČ.ŻŖ}‘Ÿ3HדƵ\Ė4žL1ü›ˆē>•CÅҽģ鿏ÆĶgl$fUūĆÓ·§LŠį¼Yā sVŽ3 !–QL“ņŪ±ķļT.å{ķ<5ņšŹ V\v®øĆØŚ ŗZ]±‡fęR§ Õßų~ßK“µÕVe;¤ Ŗ„}ļqRĄÉžÓÖõ§¶ŅƒIeąĮ÷p0GóÆJšÆĆIüM|Ėvņy*H\–bEhš±qZæü/įXē×[}ܐ̒“ˆ€Ļ :ōÆ«“?ZßxzÄA¦}š÷Ǝi»·µ³Yį<[umā‹1.5Ż•¼²˜ddĻ9ēŒėUümńóJń•/„“ 'ķIh‘5ĖH é†^ģ*欞ēm9v=‹öiÖ|!Ə‰¾Ōü0śßˆux‚܈VQjƂ܌ÆQČöÆ0ųąŻGį'‡ōłtmBŅūQ¼c/—tIš4Ļš±W ©ļj9uhå|Qsń#ğtjž8Ōn<9ö‘©Åd˜ā”ē†ń“łū׏ĮšŪXHļ–ĻZkWa–f\Ž=«zO¢8ł¬]½šćŧˆŁœ€źk^öĘŻDŅž3ø#æ(’īK Ō3ńߌµ ķFķŹZÄß) 9sYŽ{Ń$×2^§Ź2ŪĻ/ŽĀ¦O°3Ņ“ļ\ßAsW«f+ęžB°µ_x‡_·Ł\Ms ŗžöEĮ9Iē­B“3k[’ ōŪĘ×fšŃSD„M»ŒoS^Õāłõ=3LÓę%„ŽG$’±ŒņHś µ$j6ŪŚ :"Ł\Mjډ“t{GĻ&xŪUgŠu‰–Śņ%¬ŁöøĪYsķT$ĆÅLś†#¾8¶q˜ŽBå‡į_?é> ӗS¹»I£–|ą“Ń[µN ¹{āi„¾µžĶWøVlNPü«õ5ŗŠC} ĀIhPpÄ|Łō­{s7Ž˜Z‹ø²cVČĒéTō=„厛 ³š?õ'ūžõœ™J—CŠ<=>§Ø”ŗŁ$rc ¤°_ZŌ³Št=*y/nŽ33ĒARŁJŠ8żsU‚ÖčM“GŹćŸz’JĻP xUw*»śžE9I–­«ß[_+ŪĢąlēaąÕ 4}LÜjÕäÉ*Ķ·kd’9É pŠÜ™t’'[ˆå‚7ʳ ¤„s·>#¹±+<1O<8# ¹ĮśT{2j= VēȹøæxT—żŲLƒqė\<ŗµģ·hwŪ’I­bÆ”Ē7©µimŖjpJPˆ!O½¼t¬fĢźź»Ōżģu­R±'O§źWtP»$dć góÆe𯅓Y¤7šõ³§x2ĀŅhåø€Å'¼PųŹóŲcجe%±ŹkV^l×_cg`=W^[ysqk;ŲČvŹx}‡8×b–÷?¶ų"gķK§ų;ā7ˆæeæ\¾›ążf6}&YŪ0›¢p<ōc× Wōy«ŲŻųSVho6Bń0>bžpAō#šöėžäŖ\ś{Ą>%“ÄšĢĢŅ; Ÿ„|)ūm| Š>"čŚįæÓ`–Ņž²^€¼GŽĒą p=ĮYĀ'ķ?š?]ųEń+Ęß µŃ-•ī™zĻoĄUd¶9(7‘ƒĒ5ńŻÓŸ+h1œŽę“8*SŌȉdT Č擑ėVāŠč¤ÆūŌ‰Nyž 9,Ź« §µŽīŁ8ę_/`ČÉĘpx4—DXRžkn( ŒõśUæõŖ%WÓ uśŠtSF• ŸĢ„Į$1"¶X°ė_^~ĒæµOŁ›öšĘmFŠŚŹ|_,lBČ„€ ąõ µ\7±×Mkf„G€¼]įĻ‹’<ńsĀ—pßų{\°†ķH8‘;žæ\Õ-^̶ā#ąü¬=EsĶY™MtGÉß¼ o<Åø ąI ŸŻ>•ł{ńSĄ–:¶®é„h-Æ“~3²P?3ĒćYót9fĻåƒöĶų1Øü!ųˆo䳆×O½%[ “£ēŒēŒųīą9yćq×šŚ ĘF …—Ģ”ło“Ž {ÓŅ Ź€ 'š³d\$Ō¼A%³l[’r:t3ųA ²[iŠ ¦O½ļO‘71¼„ZK©Žiq'åasŲ]ž”į«ķ>śHXL‘“’JNĒ-ÆZ]Ü"}ؐpJāÆ!HXĒžzõ¬€MÓēiVžŁY^3œc†ÆZ†Ī-i!M©¹F㻢Šޜ:±7Oņ äØĪGŅ«jWĖ%Õ±…#ĻĖ•ĻŠƒ@“A9Ž8ϑÆOzϹŌŚX­¶HąńĀä~tŁé¢€ćœdt&·'Ō¶ŲøņČQĻ=D—RŸb®‘ÆGgwl÷D¢īÉļ‘^­«-ŽÆeęF?w2õUHŖŽÄœ•ÅäzrEjdhŌ6sŅ·t‡–śņø’0;ÓÕ嵍™żčm”CŒžÕåzķÜs Ž518l>“bŵeg@ĮI<1ö¬Ū ŸŻ<čŒÄö9—/-¦–kxB!†šń®b}NY.Æ-Õ_Ź…¶oćØöę°°Ń ø¹ŽäæČś×`ž)¾™Ā30‰P0ž śP‘Æ2GEm­o‚Ž#uŚ:W]eMc%Ą qÓŅ‹ēØj:{]½Š7ĻŌą÷«ś~¹D²g `2OjC9ßę]Ny-Ų2Čųó1ŽõjßOŽ(ÓxqĖĘ*į¢nĘöā^O%µ«"2AĒq]‚>Ļ.„s7 Cäõü?*Ōh{už‘X‹˜o"Üź<ÅÉŹżkÄR%Ķ„Ņ$ŖknZfž,Ć ¤S bzqĻzóÆZÜÉqw~Ö̊ĶéŠT”rö6‚įŌ°¶īpxŗMVį“żlĄHÉ“&r8õ EHõ¹’7bcWņńzw†ģ®u)I2HHäć€hŃ4żģ÷2ZÜ6ņHÕSRÓ,“MP½Æ”ģĄĮēčMTea•-¼Ui ÓYĪ ģ=µzšā™Vhx8éļJąq¶”5ŸŚ•|ņÜÜWœŻŹ÷.Ķø‡šŽŃJÓ.Ą¹'”ķhĶž›`+ųTyѐ9ĶpŃ0Õ'Ō„y5sū²N0=Ø0hŸS¹ƒ^°™!˜œ0=µač:­½ä tĻ$Iœ’8 Bjń“ķ8‰Yåģ3Ņ©Ł.” f(A,1Ļ4ÕiwĄÜAo*6ę>1]gˆ|' jöV׍,ŖÆóDzqßłÕ8ŲÓŚOń ĆŚ¹²Ćr\”Ś7sµ…Eążr+8Æ,<šēż^sхI”éš-Ŭŗdļu4/(l+ µŃ¼ū«HĮ%¦ŚT)äó@ ų±oØéŚnŸa¤@’ܤ„gł¹Ē|~UĀųb}NĘÕ”¾3I¬ū“ ³SÅ1ĶšDŚsĀźAóųå8ž•™-Õ¾Ÿln/PM–xÅg1EÜdzź×—7zd‡ģ„C°SĄ8ę©&Ÿ ą3oĀ©äƒÉ¬Ź;‡Śę•§x³H³Õšx4™_l³F2Č3€?kź/j–¾†ź3W²»µŗ„08 ”ēŸCӊcĄķ—PŌµ k’“»Ūœ”UĘŅOzÓńƒā>īŅgGPé•mß.?+Ćy-āÉ4q‘·–Ē N‘ž“Ļ6a`NŃŚ€1åŗµkŎLy]2=*¬­„²K¬iä”ĒSéT„m[[k{‹¤ø1©ł‚×E-“±Wh•mäńŠj`yĘ©g‰<VrZ¤g1Ÿ½ZŃkėfĖՑvõµ\Č7Wŗø¾‘‚)vcųÕ?µ˜œĒ*ŹīŠąV@w1µ)ŗ+å6 mØ«ś¦§mŖĪ HŃ[ĆņŲ`P2]E†Ę9äŽG’9ĖßóėU¤°““Äb0‹œŒ fŖ.Ā9)t¦ŸTkļœ|»Hćō®ÆMŒc‘ŁXt8”Źązʑåi±ˆÄŅK÷¹AŖQO¬ČČDź>PCR“Į~šž«%µŚuTtõ7ˆ4cF±\·=zPmtq17‘[‹dg,w7¦}*"8Aęyķɦ„TL%Õåūö©<2E]ÓcšętgÖĀ9«©õ‹«˜#\*G!ąqŸ­vi©[“qݵ”Ų䁓Ę€64ĻiacŠA,ģŒNāzŸ„hižM6śvŒ¢ŹģsŚ€9ķ?UÓ"×õ³u DŹJn#ļœpGÓ5jöŹMM~ŃĀö|v  öń[i¶šŒi.ąy„ó^u5¶³Ŗ1Önm䆯NÕ?Żž”=E€-“>GĢTŽÕƒć{ū&ėO³£ū\š3neŹĒƒŽy÷æįoiĀĘ?ķ&Su“·¦}Ev†)£K›`LXéźhć1EeUSĻŅ­ßEöą˜r¤õ$šs:}Ÿ›öŲć·Ģ„„Dć“ßŠāµł[NFŠüL„Ņ€8fŪ18|±ūÕŃÅ4qD„fnK{PjP‰­Ö$y$ݜ½ūP†e¶¤6ī  Ԛ{+…. ¾*¾µ¦ÉzšMjH™~^==ė=E†+ĆQµķ·śo›ž¹G}*5Œj·Ÿs¶ŻĻ­yĒ4ėżO’ęĀH¼éIĆłf3Ԋį-¬õ“Ę[·½—z˹ [®ž”ēŃR‘ą““ŌĢ`“*^uŖj.·m§³·™ćʵÄPŽ4R'ĖŌM³Ü¬æeĪ:Š6ō±ōßĀ’x7þÕ4+»Xć¹ž HWqf#åēØē5ó­üńŽjš…ģvmkµŒQÉ»%×׎ŁĻŲŪ?żžģŪHHĄ-ާ½ŌÆ­ĢMu4E˜ĀžŌ×¶ø¶MSœĘ†2”Ģ„ąöį\v‰§k0$®~ĀĢ6•ē_Ņ€;ŪĶi$ŚÅ*Ėf„—aœ{V]öÆ‹`מ^ėu8ÜńVńF2zžyā]I|OŗA=ĒlĒŽ#Jćģt+­B ‹œG˜ŹņON)“iQ’ą[īłÆœZī¬lžÕ§ŸnvŠ:šIX£•‹M– A™ÕŗƒŲU”¦.¦ŻµĆ—¼—sd1ĀJcNĒ‹jZč¾K©!w±l™d÷Ö¶½G®1RĒcKŚųX®›4Ń]DuĮ zUƒZĶå׊,ļ-­ķtų0ae'÷Š{ń¬®7z“7ž@¹’8öĘ \É®^ļŰ[Ē<¢$±’=͓ɒį Óu}nå5 ƒÜ"ƒū“ū§ŠśW˜xßĆW’¾”®Ć'Ś¢˜Œ«LJ0=Ŗć &Ś’XΆ)‘ąu°¾»ćK”ØĪ·ŪCĀ7goŻĻóŖQŸŁ±^JńĒtc wō®ĪŽĘżą]1p%ČN>ž¦˜›.č2ŽĄķozdūÅJ±Ļāŗ kĖÓ¢’$ŗū5Ī3°‘ļA/rTµMWH†ą—ł†$ČłÆ|Om ųrIÆ"šƒN]YŽN˜ 9­”ēš/ĘĻhŗ•Ęƒ?•s£^ćάsƒVļ5Ąš3‹giÄd­6¬'3Y.5Ø-!»Ļo3¼ęøKżV 'U1_m*æ0ĻLR“=[Įž)Ń/tłē•%–XšŃ”Nō­½[_µæ[»;hTĀ»w…Éąņ ræC˼Cńe4h..-lŒ÷hO–€Ž¾¤Wm éśŸŠ”ˆwƒķ ³…æŅ²˜ÉōiZN Śv»ēRĖ÷ĒĶŽœÖę±ām.ūĆś–€ÖńŻX\.ĀB.sŸŅ Óń^·…|iŸ£^G-¼·hņń—\c§·µ}1ńĘ>3··˜ż†Ķ£m† §$c½ä<k]&öś(.$ˆ]tDĶS½šü%¦0„Ü ć'UEŲ“8Æb£Śšdcn>õp—¼S©6„y¦XŽNŒēj†ĘźkDѬmŠŚšåÅ•üVJdø…ķ¹ėčk©×¢]Uķl%¾Xģ€rx&›’hї±]éŅhśn©ēź$Īą€3ž;ń]o‚4k›Kq;]*ßpx¬œŒķCĀ:u¤Mw™óZ5RŁČ'ß5•¢jv°kÖwjö×2Å"¹LČ?żj›ō4ęŗ±Æć é_üS6­Æ¤yŗ‘šY1÷čҾAҼ;?†õXśgŠŚ,Øģoų[ĒZ–”ķ£!&t>P¾•čš7ˆōu ›kł’mє%OŻr8j%ŠK©gUšŅO›LÖ[Y‰Y_aVśW)‡ŠĮchģöģ6É;‡Ö£ŹR=ēĮ¾½ŗ}Ž­qČĖdž¦½CĀŽÖ4[›kė9'K°É"ĘŻŽx¢öŠĪ(»ā]nMkʑŁx²yožŲ§ĶŹnEĮ'gü+Ģåų[į’ ŻM=ŽŸndÉŗž6ē°ķB•"qž"I¬ļōųtŁŅāłłœēÜf§Õ|”ų“Ćھ”ć«ųō÷ŽŻ—L·SóM'«`tśÓ’4S>sŅÆµŚŪX¾}8¾’,˜õō'ö–‰¤|5ø×Ž„sāŚR£a\óžł©•"[)]|Gвō…ÕōŁ”¢żģH8‘;ńė]3xĆĮŸƒL~TŅēˆ•?(ŸJē”lI”šnĘĆÄņjgÄ·ĮęŠķcGTČć'Žę±¾óG?…× .†]ʧ µ’Ķoxšަ¹ µ+æ_ŪA§¬–HFäqœŽłŖ‹°Xō8śĒ~Ÿh-—Ė.ƒļ­SńŸ†.Æon!¶ŗdjėĢ™ōÕŖ‘-sš’GŸU¾¼ŗŗ½·µµFP²;{{Wwā­#IžĖK½A¾ŽŠÉę@‹Š°¦TžŅģüG-¼Ę9c¶ŪĢdąēšÆqŃõŻ ĄšĶµö³Ø›x|‡X¢^UÓ<z ”ŗZ­üKw«ŻiqĒy¦$9ó čēƒĒ·“qńF÷ĆZ%üSۈ ±UHń½×·>’֋™žoØ|CŠāŅ{KI”b@,­õź+‹šÄ…ļ/`¾„,LŖ!<ž7VSlč„3„ųUńOVš5ö±y”ÜjZN¼ó˜ÄŠ›£”tŚWæ5ŠžŠŗļÅßč>ń}õģz¤öĢp‘Ļ×®k•м®Ķܑåż”5ė ōK]cF·¾Ńሬ÷#Ųķ=kÜü-āĖ-vń”©o4‚­\)r½ &ŒÆźųŪkµ-Żż_Ų׎ėrj±OgŽ)"“9|ōÓ t1Z›Ć֗ŽŽ–ńI.C0Ē/ŽÕ.½¤D·POkc¬ÓPĘ0OŅ“±¤d;Ä ü”x,ųžĖJ‚XœUi;ųėXžkɕ󦯭ÜYČH²žq“t浌®g*HšvæYÜO­D …¢ļ¼ŽĒŠuÆń–«m©x˜j:m“0“‹·jō„(¤Ž«Ć,Öō++ém[ÉŌ æ»ųš”{ćxu »ķZźįę@Q—xł©{2‹ņK.°öÖ֐·“ø3ä}įZŚ“ŪŁ }2ā‚DgĒA“cæćPÕ“•¤š“y:dķ£ąĪ=«;[ŠļP"<2ŪHw”4fįoQK†‹el{œ×¦Śx–Šę=ņn ŻN-uęqZއ¤Č÷W°„¬‘‚Ń™ÜÕ拔̗H¶‘łŠ†ätšNZŲ䔕ĻS‡Ā÷SiĢĀŁćŒ!$Ž^E‚5VŌwyŪ‰('¶JÖ%XśūĮ_,.40uĖŲmKrģ‘ ¾ģtö®6ćGÖ|7¬Āšuź #*ɜć¶sTou25Ks©b‚(B•”†É/ķķÖø»½z->ī4’ČQ“É÷2‰Ŗ²;ßx“DŌ§ŌTHāģ.@Až}’ ×AyBĄŪnėź­gŹĢź$ō9æųJ‘ŅęŁm »ŗ“˜°jŒZ”ņJA^§iéU–QFõÖ¬ŅŹįŅ8OÉõö®oĆś>įżY'd–źu` gh éŠŃ2Œ«ć]"=HCsnv+Pę¹-"Į­÷Ż,‡€äŒ)Ü%#øŽžŽV[[i#y³Œ©łjœŚ}ņßG5Ā;¦@ĀćĻZ‰JĄ„Šö-.Ę{m6Ić½Ž p ŗnēŒvüküEc«kŚŹ4Žnšŗ ć‘BØZ*ieµŸŚĆJ_<‘Óņ©īåCŸ³¢#“ŽćB‡K„ŪAdnd…LEOQ޹hõĖ7ž=<N 2ūÕ żŻ4dz¶ĘŌ’vUeqÓÖ³ÖŁVV.‡žŌ7s~×\ŠŽt‡Ģ\Œć½dx‡^ÆŒābŽ>lŒŅ{ •—ōmF;”K‰š%;°•tšÜi:īŸrtūi^`Åpćwū'ø¬ Šhń­WĮĶ„üŅ,$ĀŹ `ƒĆ“Óé[zv‡,R[_*Ć;.ryö£ŚXŚ/SŅt*Ž bÖ„äL`0։ݿ×šģŁ v>“*—Šr‘RśkdŒHäKa“o$zŌė9€Ŗ<‰Ž0GįA›,Xź‰>&óŪŹGĆ®y`=A®7ŗvgUb‘¤m$‡·Ż^٬d3÷«Å÷šļĮ_ˆžńƄo¤K½6å59bO–qĒŹ>˜?•e³÷ĘM#ö¹żšü;ńNŹņĪćY[xķu¢c• §w|ä×·RW‰ėsh}šÄCĆŗšč÷^b¬¤F?(Å} ćo Aā RÓ¦Ž6Łž2Ų8ęøŁĻTžO’૟³öƄ5o‰¶©-§ō)Ś+ų¤–āߐĒ ü«łs×-Ń³x’˜ćWdĘ0NÕ¹Å9›8!¦‡ł±€zšmĆ\ņ·³tg8…;c›M‘‘J&'?/¦;VjYŹ ż”v‚Łh*$ŅĀ ¬£ó¦@ģe0īŪĮ'š āģĖö“[‘¤`„“’s].˜’šMģĒr–8 ŲąÕ¤tÓÜžČ’ąŽŸŪrūǾń'ģƒćżbŹMOG‰nō9\ƒ~hšz{Ä×ō…ØĄ7¼Ž„J²ś••H„āx’‹4™5 #dWxX¼y=E~{|uųg ¢jöE<«½ĢcĮ2õϦx®IhĪIG”ų·ūrü ¶ų«šÅõ6Š4éu h s¬ćęŽQŹ·Æ’Ø×ó9©é3é—z†ŸxIø·”Å2ˆŹ`x­£ęgģĢIa–ݐ«üøŻŅŖłÓŁ…‘Lõ5¹„ćŌk0ŒyŒÜē…„UūL‹‚Š­žµ\‘ åĆ"4m&Å?3ÆAS‰‚GS#Éü-ŒsZ•ØåTŁ$@ŗgĻj0ĖĮ g©G]6]µ”®^P¼ūף°ķØüųļ„K{wo¤ųU¼Š;Š·s6±ģI=©JLesūŁų'ńFń+iŗö‘ØÅq ź¶éĀÅ8qŪ=jūvĪO“Ł«*Ÿ8žµÅUAه‘öh ‘ŌM,E±øżō# §ź š]Ųž |N“ųūšĖĆwW^ńĻŪg0“‡—tąœćšķ^]GĖļtĻĘĻ…~2{-]4ŁŽH®O—y¼\uā¾Ų›Å^e” ĀV”fÉą×Ģ擹dŸs¬ēüA¬Ü\X“ 3E‘µ™Ļ5Ėj^ŸW±‚[hÖń† ą}ćļÅy“k8ĖAJ ‚ņ{2Õ“żZŁ#B«“³Ó"½kĄ~=Ņ×/d•‚©,ć ĒQU“ėyn/”ó%ʧjCļA)ė–ŃĪöR ®ö\` qė[ŚN˜‹¢“dHc}®ĘŅ{Ÿn“É<Ē^’āč_}ŽåB8ćw8Ą®Źk„”!ŁĻFyåŻĻٵ›µtP›Č;¹éW ŽM,>d‹žSŌN,éōŪk©­#“øiT©ćž£ß4ŗÖžī°G&ź:TøŲFu¾—$P4°I“¢Ö”‚żõ Z ĶŃĪ£…Ö¤,`źZ…½¶mį Ļ“ž3ƒRx:Į5ū·Kę>JA\géėWSއi¢č׎bČ#2Ä Ē“A§iŅ+K’'EwŽÄā¶$J×īµ ,åÆš ņø­±y±L¤mˆéYŌ.ē|C<÷ĶYF޽A¬KD’ .mEc2„;GSéYt4ü3®XŪY$a%$½ l^ÜčįĀĮ4o#ņ©Ü}iÅ+—m®4Č­œ+\©ŚU5µc¤éśŒsĖ+$JŖd»±õ«ŒQ“nē˜Ž=¼„Ķʞ£ķN<¼©ū ĒźkŖÓōżIķašō0‰!ńRµ™S¤Kk§„ć,+xLdOŻoZę$ńcYßyw†(·Nģ;Ń)t5„N»Ä2hž.“µH,Ą²e( ēię¹xtK‹pø™$HųĮx}*Ø£ė¶qI%å­¤q™[{½żėŠ|9§Ųżä™RFCóŌ uż*%.ĆćÅšyRéśp[™—ƒŅ±±āmPƒœĖ˜+žN2z~˜8\įtłćŗŌ`fB&ĪG\y­ĻųŚ}öI²+V‰6® {ŸztÉtģybxĖTŒwJ£(CoĒ^k^Ū[×üEāmž÷Ήŗ¤iƒėĪ+¦™Ź6>“Š4{%Xb½¤ø ąw®ʒÉmÆ=„ŠĘ–Ģ܎«ļD×B tžžĀŲ40¬¹ČPGcÄ:mĢ Eęwī]ŻÅc)XŃ#ĖŽ„o¢\KudŠ· &šoZŃ»ńżģ×QÉxėēöīĘ ķQĢŹŠÅ›^R2V7l`(==ė[YÜĒ+HĄŒdw¤IvŽkwņlōŲŹ.1!'ļV態Ē{p¶Ź~`ŪLR3Z–+DœmøĀÆTńŁ%ā.2xĘ~ļ½rŗĢMg›32·$+głVĒ…“Ķ8, ©0¾“i%IĘM3åd‡S’ŹŲēiĮŻ®ŽŅ qnVE;N:÷śŠ#Äz|\ZĆonĮJ…ļ^ „ķŸ…”Ó#ŒÅqlMć·½O1\­ž5Ø&­”] »čē0nĄrׯXе”žĀ0‹wĒaUpqØj]Čd‘Ö8r{× Ø[”ŗhĘ $ē4^}=.m,Ō(Š(æˆ/&¤±ž-2łįžHŻ…pūŁōØē)#¹ŗ¶Ńēµehq3œs^q7‡m­¬ī'·VG~¦’īŹ“čyģ»Ź÷Į®‹L²µ¾³¼Žb£jš3ŒŠ†AsB‚('h°0¤ó]n§ÆMīĪŲƳ1dīõķ@īy­–—$³gt²?,]ŽO5 ŗ\Ā`ĄŽiŲæhu?Ł×ډāVRėW®-.ŸNy *ʃ¦yojӛ £źgŲų"k«'Ō­ķZ ‹ūĄsõŖŽ±}'Xø½’m¹p»XąbØ|†¾»ćŪ›ø ·‚[{}ÅžA¦¹ū›Ė‘ŗnQńŃEc"ģvŚ>µ-žœ-٘/ŹŹ9üjH$ŌÆ4łŲ“w!cńŒŸ„Hn™c{m=źŽF± ēĖų—ߎ“RŽlå¾»Õ!RÜu  «­:=FÕd“•£,€€ĆœÖŸ…n‡‡œ]jJZŁF ŒŠh j^üA¶ūTņéńLŲ-Ę2@Ŗ—W‹Ū[jÓĒ:Å; ”Ī1ėA\½ ŗ:Už§ĶŚžķ_v:į…zÓjZ}²VŪĪGµrZžā ­/EŻūOōR¼W’Å=̳~éFF}zS°ƒŚisŻ]FOžkJ¾ƒČÜcX[ūÄf‹Ķ­ŠW=ü¾Xt6ē ēæį]f™į‰.ąSÉQ°Č‡ ¤R=7ĆÖŪmļ-@Bƒ‚AÆ7ńž“yv—Ę J°ĻšŠm:…ä2¤«³Äx–5Üyś¶”‘i$~V) '#ÓŚ—˜Ļ@žK-7LŠźv‰¤‘Nvš>Üא\ĘdøŽ[^Ķ'©ę—0Įqröŗ Ģ“£ š xükŹķ|A%·ĢŖčџ—œš (ß“ŗŅĢĪĢÓ9Ž[Šīž؃4ń¾¢˜Ęį½ŗ‘ŲTøķÖ¾)ŅTCŻĢ"F$ žø­ [ͼ²…m[d2‘ūg=iŲ.“>•kŚÓĪid9¼;Ęŗu֝«ĶØi0OåHŖ_sćēłu¦}*óP­ÕįqdĆšµuM§,LRīćō>õœŪ%yy-Ī›söX|¢²|Ąg8ÖĻ‘r9ÓiOć£!ņ£­Ņ<,ז3jM,NѓŌÖj¬Ņ\Xķ…ē°ŽŖkQr"=="’öMØĖ·9b?•hkk4ŗtÖŃ\™—qzbä<ŖĆOž9&·hå™A’XI5Æƒį¶ČÓv4™Hƒ'©¤VĘÆ†āµÓ'{FC$#ēÉīŁļ]Fµāt[ūIlģņ§ŻŁĄS@Ė>±Ö©t!„dmP =/sÅüK«ż›P¶·ŽĶŁ Ū7=j׉ķdæÓEhT"€0ć®k)2ć`xcDŌ—Oŗo²4vć-”9ކŖXĘšJLjeŽF~ļįPj¢jµ¤?j†źHĆEŹńĶdx¦źļűé0ČnbާˆŪłPjŃéV÷÷Z&Ÿ§ŲĒr[Ą2¬:Ž:ųTŃųņėÄ §Ś^”µHŌŖ€ł sŌŠO&…ėéģƒ ¼µy±• ēŸJ[{ n-^5c¹A'Ž“%cĪæ³.!Õ'»»–ź@ß*©8Qō.«bėjķnHĘĻ4t^ ½O#PÓn¾ŅŠ–wĄĻōÆ.ÕõķjW»ŽņkoøŖא}źŌ™ĒŪj’źV‰u$“"¶†½WO²kŅĀ0Ҳ©'„ęT’5µŃŲĒ€q‘Ņ£–ę%•ČŹNjZŠé@%’3…ĪkŠ[N±ū¬ FŪ;I`ɤI£ZBŠB$1cćēčĀøÆÉjŽź‰Īģ ”ļŠĮ²”²…sĒĢzńYچ ĘEū8ŖįN8äP8ł¶™ńóOŃćӟNKŻÓgĪo¾‹ŽzT6ŗøŌ/&–H÷† Gj 6-mü<¶ś•ń6¶ŗ†T…ĒĶ ļłWŸxƒÄVÓAp¶adTKČ4•Ųą-5“\Gū„‚!÷Ž:×E&™eö…žŅįg$}ążiÅŲ“°šŌVš.¶öņ «eAĮ=žµ$–ö¢2-Õ| x 1­h¦-ä±Yi•7nÉ#·Ö¹‡½3ßŪ-œ¤&%ŪĘ9JĄvÖśÓiņ!H$œoģk;ÄŽ(KTy×ĢóXīĄRH>Ų¢2ø#Øj’ßMwuä•ĘĢńœżkčæ X]ė~‰fŽh ,pßxužµ@qZf‹ØĒ©\ĖzeTf n8€ńÖŖųĖV»ŠÕt«8c±~ńÓ©?_Ī€7¾„¬ižęł‚”ÜQĪFGałW+ć8­¼Q­&”e”C ”ī8ÉĒą(ķį;‹kOµ$ŹŹ1•DŽ"½Ņl!“‰×ŗŃhXÆÆ¤Q*£l<žy®ŗOPHąKkau.@ ž”ÆāØ. šv£"ټzį@Ńy„nzśöƛŽLĶ$Ÿx±sϽbä†E8ą_Ņ®!IvüŹsœŃĢĄ|p„Ō#!vķć”ŅĖ{m£Üź½hR`t77‚kF–Š,Q"äd:ålõĖö–K†˜Gn¼ž¦®1A¬x—VÕ 6ó\%ŗ€HCކ¶>ÅŖkVŠ,7—VgpłĆ+ĶW*)XÖ¾Q²Łjī”ĖBx?ZāāÕn?µ$†ĶQķžQĪFsĻåYŹ6Īž¹¼x<ēŁ/Ż?v±^ŹćĻžęhÓ!¶ī Ö j]’X½Ģ…ŠÅ»…$W=«-ķ‘6å|³ĘØõ «]­}dØ]åź^¢¤“UŽ)lm fI[ić¾?śŌ“GØGmo;F¶ē;šÆĻl×öAv*sĄĪ(_S’ź] 4Ö`*““Į|śÖG‚µYtłžĆ Wm4€ö gÅ2hž½x­#½ŗšTA<§Ÿ§5ó“z–·r׈D[2F¹ĆœńŠÜŽ^Ēq§x~ęēOšķ#–ÖXß]~V¹¬–ßkµß²ldc„ж†@šŌp*]IrdßÉŪŃO½tö7ö:s—uy£īŌÉźQFīāßQ½!ƒ•ō©®f}Bå!š¬ˆ!p÷÷„6+:„–q°xlō®wÄ,¦·K«)^ŚłŌ$®­ž§ęk;›A?ü"žš—€lu‹żbŁcdQøÆ”®æÄ·Ž±±µµK“ ŒŖ¾ēīµ9±ż­ķ‹j>Mœ‘$, Ŗ™98źsXZχōļjb)›c·ŲÖcŒHtOk:6Æqe-ĆŦځØś÷é_BéöŚ$ŚCĒms3Ā]gŚCD߯ÉļÅHšū/…žÖnukĶZļO‚ņ$•žf껫8m,,õS„źöØĀ* •b=8„!XłĒĒ7(¶¢Føūdä*ŖżÓ]ĆE‚ļAæ2 —žFE»šØ?…fāmrś„sų{R¹Ötó)ø·ÜŃJ£'šü« šuē‰īÓR¾×®_<+Ę1‚¤ö" ¦O}įŻŽ’oi1Īd³żó8¦¼Ę’āŠī//%{Ky$Ī6£m$÷ČzÕXĘKSŗšĘ”}«ź6–·’K½7“½Bž85ō.”įqt+©¼3"Ē©°©t$#“ÅW³.¶<›@Ņ5ŻkVŚ÷–uøˆžL:äq\†³rŚč’ yP®cÉĒņéO“ Ül3I’ęŚIÖTvo—“œę½ūĮŗ$壺/"Ąd]Łž#ļYø‘c”ń·‹<'įėĖMR{K¶BŪŃ™8Ęz_6x¦ĒūQ²½šå½Č†Yp­’±&’‰Vg{šėŶk–śfµĻ”„<­“ą-7ĘŗV™yuq«Å ²Ņ"b^2A^ż«hčl‘ēPI¢Ļwi%„S)`‡'÷æ‡jĮŅü©jeŒšKféČ'•öż*…(Gé>Ņ~Ē%å؁’eTē,qĒZņ_xĻH𾤚¬fņX@ēfߘ’  ē”z3éχ~"½³Šn¤ŽÉ-Śž§zr«ģkŲ<āČ,u1¤kŚUÅĶ×Ų÷G1Pc éõēõ¬„¹QCĢ~)ųžĒĄVÆ­Ķh·čŅ…ņU€eÉż9Æ“ųā=kW7·LrčŅDv@­ƒķ’M «F™Šų»Ęžš—‡×WÓō™ä× „™#*>i[8*}«ē >x’ĪyuKéīžįƒĄ„6NøĶU˜8wĆŻn}n›Q—ģCåSœƒĻās_VEi·‡.“ę6Ā1jc (äēå÷ėT̤|¹gyqw¦8ūQ\ł,£_CļÅPĆ:®‰öO9Ļ’ĢZE`™ż+š¢*6>‰ų|ö𾢁# ‡HüæõĒ–Æxń„āų±ēŲk^LpcI °œq“ Į®¦‡Č·~ > צÓīnEŲ«·qßń®¢]Yb³Hī$im³»i<7jģG'cĻ®5Y¦‘©įW‚Vo†¢Õ’į-†CŁ›HĮČ;„R]2‹¹ķŗˆµŅ„Š{°öŹW~ Įaķ^yuŖæÄ­Eō Ņź}©¹ µrq‚}khĆ©6+^ųGÄž ±ŗŅļ,o†$”‘ŗ\Cų®{}<ŲkvŖØŚ¬ķÉlv§ŹĒnĒ{š·]µÕDBįĮ8Ą'é_“tž𮁢h–ņA«ė“°gh¤ĖFH zSK 4ö›Ć¾{OĒp3<Ø éžøx×[½‘åÕ..Ū ŠŹGĖZ(wSĻ5zżE‚y3dżkÜžéCFŌ5/ų‰F£¤(RĄ#$ćęé҇M ŠŃńĒ4ż7ÅKįčÄV–÷!łū­žs]n©ńĘ_<6<=«Måé–ņyјTWМgćSģIžEż”ŗ}”Į·ęVĒOj”§ėZ­¼±y(£“vĮś™A-Čéõ-CTÕÉŌ.īn$ņÉ1 bńśÕ×õI峊[K™įC÷~µ“‡c.f{…ęAo€Īxiėw–śdæa›ū=l‘?Ķó=Ļåš.ÖćSāˆM$ŽÓuhu=6! v8öƝ|uØX-Ķ­¾‹ĘžR^I"*{Ł|ŝ1ŻģŅKąc!Nö'S^„įC†ÓU¼y-# BĖ’vŌ¹1¦w5ńEžÆ§YL–ˆ$/…”( ų8Æ ¾Öd»ŗ­“šF¹]ÄõĮļXMšGbŻ„£Ģ™_Ķź¤ʍCÄ6śj/Ł•dädąXF.ś–s>"ńWŚģ&švpåx xü+Ė-ķ"Ä‹¾Ebzœõ®ŗF/sŌü=£LśUš$¢mĄæÓņ®SIš}Ō:¼·š“,@ā$nC õ®‘Ēs¦Õōż8é×*!hīˆģxZó  ÉuØXßB!ˆ]鍎ōŲł›=oO¶ŠÕƒy 8ž+ńtó<ćl-2ƜūĄzVSCŒ»'ĆŻwKŅ­n ö’\’AMÆ“ę·/ļfŌnöūqCŠ?U¹¬ģhŖŁįkk[x<ēoŸ®ąŠļĢÖVZ\š¬×¶V0)™Ż=r)[ReTń{ø¼āÖHo¤žŌ}é˜ßr9¬¹¼p¶&ßĆę8eŸ2R\g<ēėĶ5bå©é–:s[éV¶÷ó$„ńņ¦>lwüŖ;oZĒ2źŃLb“#!@ę‚nz.‹ĢńøIa$#+/ĶĮē•yƌfµ:ܖmµ“rLe›Ø­”±­3ęļx–ĒĆ·’a°O |HßĀæCPčvųĪau=“lWpĘk”E6{G€¾G§=ŚBüÄī^łõ5oāöuŠMlŖ )Wõ>¢¢[˜ĪGĶś& ’jšĢo?9<S޽6Ł K˜byi 7©®~k= §'s„»ÓŽO(ĀNŽ™*‚éŗ|²æŪ$el}åŅ23*ßźŗJN4čķ²0Ņ3}ъņoė²é÷SXŲå’@>wūÕ©±¾Ógø¾Yäļb2šøÆQÕę¹V+n»ŁO\ąļYĶō+—R=R÷PSc< ĄÉ­gxćP¼Ó--fŅć?ac™ŽēPl{ā².Ē1cq}x‚a(<ļo—wąk˜ŌQ³œne*ĒļŅ“„C•›6Zō·štöilYÓä,ŁĮ'ұ-|72Ü$ā >ķłć”)XöĶ1&œęwFÜɬ­FŚG’8ŃxpH ĻDĪrÖŅĪ;Ė‹V3=Ō¤„Q×#޹«Ż6KKČϟƒ“ńĶ'±ŖgÆx_FµŅmĀÜG”Ełžzʇo§]¤~RD°Æ¢ †¬ģŪJŅŚ)#ŠŲČĶ÷\žUæ*ł·āe…ī•ēÉ īæ$€Ąä zⓉzž;£ų—[:Œā鞃$=‡½{,ڤŗ¾› °ŃÓä;F*ćM'©ĪÉÖ ŅO½æ‡wJēå–ń·m%œįčGµ_³Źjz­Žœā2γHHéV“¹-„Ķåå̟lū„Y3‘ڲ”zs#śYŃ“‹OŒa%ü^7ŅąO²DFż§ęĖ?~7ū÷žĶūQOšWāüæ³ļŒļ—ž]~qqJü}ćģMwóō=Jq{Ņv³§ŽčŚō–ŖĻ ‚mČąg ņśŒWÖžńkś=•›35äi¶\õb+*žŁ_|#āĖ+{­GIšK›wµÕUW"dlólēšÆąÓöµų yšƒć¼weö/ō™%Óå`vÉ|Ź<żÜwķ]å’ŌųŽx~ĻåÅm xpWåģ}j¦%^P’³äÉű±h#Vʆ9)ĻÓ"FY$7å†h!JēهˆF€ŻÉäÖ$št°ŹUŃvē’“FW2}”]^M߯'ƒųVյč2#Č~V ć§5qGM9NžĢ“>±ū1|vųsńW@Ō®“{ŪMR9ēŚĒuĘųÜŽĒž¾µž”? ~,ųgćĒĆ|Xš”ńŻhŚīŠt )Qøwž ŌĶ{¦ņk–åŻVY+Üvƚ>&ųN{Ż2žÖ(÷‰1" «z ä”NišŸü6÷–ZÅ­õ°µ“ž£`b’ĮĒ×ü„žŚŸ„ųońP׬¬¦‚Āžķ–ń±Ņć°f“‡c3ā}¶åēŪ‚ūÕ9&VB…cķ[THĶ’9ē·RØÉƒÉ#§4ėˆ ę…Ž,,¤īē¾)£šĀ“čī0ź¤ć­6źEQü¦.Ą(ļŽµÆ.–œæh7 Ģ1„Ą8ąŌ°4ė#ĘĻæ±ōV:a+"ņĆ(furéĄĒ„i¢įIąˆÜ_&^•qČ zꃦŸÖ'ü ö©’…‹šāĖĮ^4Ö<]¦&vl#"?Ļ­Ož ×&¹Ó4=Gtr#§—r¹Ļ#æåÖ¹*DÜōxćiÜ;‚Oā¼/öÆżž¼7ūOžĻ~3ųE­ŁY]jf’ļFyW>\ź Ūü’}y•éŻ4tAŸęńńcį¶¹š;ā׈ü3ØZK§%®¤Ćd«ƒī+”ĻPHÆ£| ®[\đy†h²Ņį^>kGž’—c¶Æ$ÜL]cLc‘Žk¶Ńe±Ń–ÅœĀ‘Øä (Ļ„|“hI³”=Œ?hÆ_ėŽ(m'ĆV¬öļ!S4+6}1ÓŖŽńN«ąĖūµFB£ē=ÉÆ¶ČįģhØ·«9±ŅĒčƒµū+ū )ą¹’[yō®č4 :Č«‡lsė_@„sĮ®śźWÓyˆ1»hĘ:{~cEóoÄÖ·vé ?6Bć¤em>[½Ō4ß%Z(‘­féņ\YĪbŗVź@Ļqź)©•Č_±ŽŚāśģ!Fp«“‚+½²·„Ų\ †)ŁŠ¢‚zZŚ&HņY|=ØAw,³@ąäē;k ¶Óm„ŗĘ.€łI5Ф@Ķ66kĆ<łX×'ļLÕ¼C„Ģmk$QÜd0$g”¤¤iz„éēŻøåC9ńėMw«OqČC„ĮĪź@sQjpĻ}.NAJõ}@¶†/¼ČŻžphGG«“V–Åį@Ž©ŲškĖģüQØ,·(Wm¤ŠŻŲ?é@(¢„Ō—6ŅłĮ @üóĪ ©ķ[Ļ…Vb›Fyō ,QūE՝Čt‘Ā䍠Wk#}ŗĪX®üX~t&–‡,×6±źe¼ķźŸ/¦=jĶĶĢWqƒ!E;\¹¤K\Ēø ĘÆTmF8mö)@¤ cŽh±Q…Ģ fūÄvzsO ’¢6Xķ%vŽ¼öĖÅ3ÅpFVōō;¾lūUEšrō2ļ•ī/žį-Õ›$ĒҽĆQ-¤I*Ŗ)ÜŠ: ­r#sÅżŖŌDĖņ"ø+Å„Ķ ŌŹ«ßh™FĘŌV¢śXŽĄŖ1ß½z7‡ōĒ€§š0¬ŻX*kC;eķŗZ ę7ŽģEn¾—”ßß ».ź ŹĖĒ4Š<«_š×‘­Ż½’J¶Ģʼn Ī*ļ†õ+[+·Ó”¤»bc®kH;ĢÜÓ4GÓļu'y®<­Ķ)„ösūFĪźŅķR(dĄŚŪæ„ūV‰™“PÓ5 lķ]„8Ü; —[ŗL±¶Y y›?(ļ隬[š@ņś)m#’PŪ÷ńžčŚW‘{§,3äKĆ)ļPYĢx“ĮšiūA'­œW¦ÅwVęV.čxĻR=č;H­¢Yā5 Ģrk}“łÆ4ļ“Gp±CäąóLj78Ė ŚĪāęļxxŁņI?xś×yØ\„֗iiiĆGø¶Ž ¢äŗ]N&Ų賲ϙXs“wĒj†ißĒZź_[C„N£÷jø Ē„!%cŌķō›ĶJ 2‚px®fĆVølĖ}ŠąämĪF})4m t3„ŌīāŽįf õ8ĻŻÕē_Ū:ö©ä%··ĮįIśÖm2Ļhųc¢[Ł„Ā^BŒŒŁ˜r¾™Ń|!c«iڕ̗6ö« 26OŽ?!#•Ce§Šüķ±ńOŲõŪčh'†ęT`ĆĪåŠŲ·Öm5½qžīŹ;øŽpÖ®ŠÄŅųrĘYŁ#d€·(éķ]—įū˹ö¶Ķū’;zś÷;«¢2±„¢Ļlš×‹4łä[|¤² aóŒ× ńJd¾Ō¬Æ#rŅķ(Ą/Lvże:…Ę-•Ŗj>®Śe{ujōc\“Äš4v‘Få€ņČ$ķ®y>Ęяs˧š®²÷Ŗ¬ćĖO¼ ēubjńĘ©0ŪLʬ~Ģ{ФŽ“MšżĘ›4—rŖ“¬»JķéPź=‹ø*« ]Ćń ĢÉŃ]å½&0æzč­ōĶGOÕŌm·‘I,h„]"kØ]ćpœœŒb–ĆH1A,ŽŒ¤ēš4Ļ5Ž—{©C¦Ü41ĻĪ<Įœu®nėK¾µńT²Ł[JšŗŖFŹæ*NG?QAj,tŗ_ˆm5x„¼Ņ¦ q&<ćĄÆ5čEimsŠÜwĒpHä L~ĢėZĢÉm ²ZŖ:®Šņ=ėŒń7‰5M;TŽÖw™­ ]°»‹ŒtšØå)+ųžīxX>ŅęQ’_»ónśĒN”‘é·–:=³*œ‘Œ‘WŹClćou@Κd0nŖ1Ć7¹ķZ—–:…“Möå6²·Ģ ö„-„‘Ōųf$’ąw3īĒß=Mj_[iŅŻŽ?—ćų…dj—Bœ ŗ‘W8SĪNx¦krK>”÷{B²+ŪUϧēM2e½‚Asę¶%É' ō©ōɒÖć}Ądb@9銮S;t;V²»ūLm ī‡°+Ÿŗ³–Y§ –ÆČnÕ;l_&„–Ņ\Z‚±£H+¹Ó6ŽE'īö“_7ļLj¦““PÓ®— …ŪĮƒ¦ė#N˜XźHč„OĪzM²¢z§‡Æ ŒčÉ|%Ņå\²Į’<×+ā=*ÓWqZ‰ą ł §oź(lfIоĒdDĢÓ:c—źk•¼Ō1ģA‘“óR2͆æy¤#\iģ±\m*Ó"ŖxK_‘u»HµižI$Äń!Į=GėLwÕtż"Öņę¤Icˆ¬Äe†+”Óķ×VŠõ-ą[ˆ‘†óŒMDlÓ½šĶ“ÖhŁ[[ĮĪ`āø­SĆW8$ęŻĪxā“åfV±š½¼J҈QŌ¤u«^.Žqį»K{XrоżĆž8ČĒįśÖrŠS<ś Z];ŹYĘ<ōéõ®öŅéõ+d*ņG^(QøœĢøü/«Ė”+`iģƐs“ļIaim§Ā±*#Č\åæ»ZF6 ­©ĪĖm$dt=ė\׌s±Yv)` ™Ijt6V™A$KóžpOJō/]½¼Ø²Ŗœ„u©cƒ:‹kŸģŁĶŚĒ¼3od=ڼÖ]jŽ/Õ-M“KhĢϛ¦?•IÓL®¾²¹×>Ū8’8ĮĆ6ŃČĶv1½Š“ĶÖ{cŗä¶ÅAƒņńÉØ•ކ‡Ļy&¢…2DÜmö©Ęš©ČysĄn%,šŅÜéÓŁĪc ‹iēõÆąNŗi9-„ü"ńżż„Ż®…žŠiˉCŒ3gŅØŻĖ,w6ėĀE“éYŹB½‹Ś‚Ś„„ä“C#N¹Rœz{T¶Ļ?‘"†Ū>oö…AHéōÆǧinó³}€q\sjÖ÷zŻżµ“>}Ėņ(ĮlzÕĒČŠ[,ÖžeĄSźjåÄmyfX$ˆ‡©µ1ęgIįß¼ŗ¼gū<‹˜dp~ιトn †ČØTO›œ“ ņķ+©ff|—ÉČĻZHīä•ö»aśęƒ[—ą{½Zņ;äÓWż!)Ą=ż+§°—Pø–KMb)-ļQ™Xd‘Ö”¶Sžż?U’Ž9%Žü«“€O`kśēMņn4…–/¶Dųu “ł~€Čō5e·’ĶY–/› _ją'±Š®<„(|ĀÄ㩢Ƒ‘>›*_3Z’É‚}:WžźzŗiśärŁ„\?Z =rĘóNÖō‡Ęé9;U·pGz愚żģOęƌ1ŚŽŌ³”č³ÜKö‹†Ą>„VōZäśF±l†xų;@#  dŽ{ÄśšŽTˆņå®%µK‰g#Ģ•ā-„ō4vV²¦›o.¤Įć—f_zāu»}^IełBńĒqV„Š gFw·›U²“–HmńęŗŽė]G„õ«]<ŽÜjw &‚8Ŗę†ÓU®¼āW9VĻj#³ĘT‘€Pu"³{§`Æ%äpĘĶąsŚŗ=wG»œYŚ2ŹÖ“HUŁN`użēM0:łī£³¶†Ź ÅT)8ūÕęś®õæf–C–=(vč­2dX%Hc}źy8ėš”éØŖdņĢaŽ©|ĶM>ĀĪŠ\8efzs]-ö‰k£}8Å<¬ ä ē=Ø6Š]*×.ÆekĖŃŎ6Ŗą­r–;A0rYىü(~[KV‰#¶I^åø®—Ć–šLĻ'Ūo¼¹WķS’÷±Žƒ9"&nE›ŻĒ,Ģå@gŒŠč/®åҵÓēk6iČ zff‰ģõ Ķ«i€ćļžŸsQĮ¢ųrĶļu+Ö7 ĖlÖ­ #BūÄÖŗ‹[ǤZˆ¢ '©>µ±mįūė‹v»¹“•”|ŁoJ†Į¢łšĪ‹ākY-Æg¶°hćvI\ccĄś×œh>*×ō+y¼<.ŚņŁTØv%½j£!u}[æžĻ÷҃ ńOē^ƒį„Óµ}ā R5žsó#c‚=jĄĀŸF¼Š¬åhŽ¾ą«–ŪŸ­Ea>oškˆD-·°ļ@zž»œZJ·3ģSü$ÖO‡“Ū’ż’K›eŠYĖ_LöĮ —Ę~„ą=!ī.¬L—É(‰R5ß»$Óź*æ…/5Ė›§7Z\Ńķ쥥>ŲØ”»źvś¼ŗ§˜É ÖŖłVI–õ¼·ÅžµYē‚!øeĻŹ1ƒéY ó¤Š^(J†ß.vņ96§¤5”RĄ±ČĖÕ³ŠÕF7BĘŽöy(Nģō®¢ćIŸQø‚Å<Ļ–5ŪĘZŸ-€•īēŠšŻĶ§•ä1 Ū0ĻÓ9nõĶ^i1BPĀå-@ī3“T¤_įŻ6ĪM=¤kywa±óĮēč²XĒŃĄĻĮńӏOάYµŃŃ'³ó†U€å~µĘź2¶‡{%ŻŗDz IĘąhZx‰É‚ņńŸ”š=źÕ–§=ō޲»;38Ęk¬4ģmƦß*Ķrī¬lחų‚ūP¼1ģ;Cc/č)sšzåŌń@fVy?‡Œ€)ś|–¤!‘6LõĻ­m_Ēuy939—qĄ®§FŌ"³EÓeqn’0VČäā޹uēkrŁŪܤśtg“ń’ ‚HEµõ“–+¶ąI=éŲėŅ#čC1A1Ć_Zņg<—ȱŗ²ĘĮ†O½n…×oüi­>›“#Z}‰@ąD”ƒøs^c}syu"­¤aĖ6Oī MŒė žĘāĒģ—9Ü008É®Ve²G··rĢI#wjŹśkĄŚtŚÕÖµ§]M¼‘[›vŻĢĢ: ō<“·÷:m¬‹qnYՎsÉ"“’¶—/r$hyēō’^\ˆDq šéŸkxQėYŞSń05ģ:|:¼ģšdRń:·±õ®/XńMž‘eēé–÷1• GĶ»ü(äž?Ņań]ä>!†w‹Z>Z°TĘÅäūÖ¤ZĪ«¶riī-n¢Pž`$p3Ēz@t‘iwz½‘ŗ‡"źBSk]‡ ÷®VMXŠō{)gopēBż:w¦;Õ¹Ņį;pų#”õ®“˜ä¾ŸU_- Jć÷¤kį;ū5ŗ†ѱ$zėZ·†ņ;¹¦†8evFG{Ņh č,ī ö’ŻĖŪ—vqéłWąi­ļ|;©G=Ä/öEņāQœ=ø¤™GM©jš]åŅG=Å­š$-0FnŖ¼=ėĘāųÆ„ßųžŽÖÖ9%žiL*Ū0‹Ę}øėT =N¬ų:Åu{{·¾‚å¤"W1¶WŸį'Śŗ_é– ßdŃē’;>¤ī[¹^:PY³†µ”Óž÷H³:‹Ę”¶#Ēšė\7Šuķwū.Ķ­ķ¢“–?»Xś‘žx„Øv£āŻBĆL6šl7×Ģß2¾OL׋x’}G\ńākuŗ‰ŹÄńēˆŠw„c±ŁŁk×õx® ‹2F#g#2zē׏֜ÖöńŚ'•’09cėAĻĖć[įįKū{½Š>GU&Mł Ēø­„𵯉ü-§ ķeŠ;…ū—Žsōāƒ>SĻ/¼=¢x–¼¶’?0/–HV ädäuƙüOšõļ5»»ż~÷ą¶€”8Ü=hc®§œjś5’‡uSö!#Ü$aAĪÄĘx­oų£Q7³µžČPVI0AąńėCF‰Xõ‰¼m„Ļ›Ąéw†&E<7ųV®…زYj:“LJüĒ®1ŠĖT_*<;PŃ®4żWY¹ŌSU[™^ę//ļF‡ų? 螎æˆmÜY¬š\!fņHäśēłÖ‹b%¶…ųU£]CRŗ…-ģ°¶YžŌŚŚ6ĘBLŽ6‘YĻs&Ī‚MA“ū;kįYŒ’Ņ‰’ ļ-„2Én‰d¦,=9ÅaĪīĢå،iœ/lóLøõ ¼š§ˆ›€UQ•ŁļRųWĀ÷×^‹HÕć–{é0²;œœūŃcSēmWĄ%š×‹Ų’d;hÓ9EO•>£ė^Ķ£8šé¶{¹#{s÷”?YIš«3ššĪ§Æk¾"ŌįÓ|©-ć?>Õ;—øÅ3QšdŚÕõÅö«ŗßS‹t€æĢ&#$}źn)A įŸŚĚ‰«ųsQŃ,'GVŠwĻ’Tüø>õī’|eyāßj^&¼Akwm0ƒĖ';”’>œPgk¾<žĻńʛw%֤Ȋ0Ųżę ‚æĪøÆé“i–—i‘›q/°?…0ę±Åų¶_ųH傾#kķ޵b¶:Ÿis§“r’ÆM Pßb%3Ņ< 0×^āźÓN*š™ ÉūßNkOÄŗ^«åZ]Mn"ĖĻZ®mLŽ7MŠ>Ćyqså™åqŌ y~ā[D¾šę8d¶šwoŸĢĘ ‰A°6“ 9“ ÉoJ}žR€{OÖ®ų÷ćŌž¶°µšÖķra-s(üĄšGēš•Eõ4ī|ƒŖųö÷Äz½Ī„­jóÉ{<Žlœą”= ŃŅõ{«™ •É™mś‚łĻćC¤hu*÷zŠXgź3ęāöÆwŠōż?I²MNKø…|¤ą“Žõ¬D¤xļˆ|k„ėŽ,·±æ³–ņ8˜°XįuķÖ·ü;¬i¾Õī®l”žÉ·™ĒŹ‹ļ[E˜Nēøź>"ÓuX$³Ō/Q·D>[ÆŽļ^iuyąMĀŚī£āƲŽ’ ¶¶Ę<“čŁķŽ l˜£įmBĖĆw6Ńéļ'VŪŒ•Sޟm”źZ’‹÷Wø2ł„ĒƒŠ)ķLŁ]3čĻ ü:µÓtłtĖ8ķķåY6²ły'9čMq’žiz>©ąż21kkŖÉcö‡„pķŌdÖ‚n|ƒ¬XI¦Ż "ę$ūcæĖ…?8'µ{oĆ]R}ņÖT˜BŅą«`Øõ ”ĻE—į΃ū›én7/4dü€v5Ņ薮’Āc‡U%pŸÄ;Ör“4ŒneŪ]ųnŹ`śā[Mgmū9ž!Ū>•ēß,“MCV·ŸĮŚdBĪV "ƒęĒ“ųŌ69EųOF½æ¹øšü²_ŻØ…eźćŠō=RćĆ6¶¶F5#É·=;ēņ¤dĪXæÕ¼!yeŖ%Œ°[Č7 :|¹ą×¤Kā=.äµõĶ£ĖbĄ}ā‚%.§GpŽKĖČcW¹,Ģ›łłsVü-kö«{»żA›ķ,w!ż+)FÄ6v1ŲZČČ·Ś‘ Ę=* ODpĘO³Bšp†ć Ø•/ 5Éķ¬¦š8ž&$~óŒ`Ö׍ō[(Z8ŽźÓ…ibī“Ų÷¬šŌÖ2)[h·Pé­)‹xĘāAĪß­x~²ś”ś”Š(ćK]ä>FKj”йNņŻÉXŌ1Ąģ;@>T’gĪFžĖ÷}ÅoŠGŃz–Ó¼6€2»įF?¶üfšnÜ2cķq[+¤{Įfol*ŅŅĻŅ.ī5ū©…1"…\`œzē½uś¾”ekm;Üżž)•AD €qéśV‹Ģ.exJ+ßÉs$-¬p(’Waµ}O…Arš4ŗ“–śŽ`¬72ąć>ÕÅEt:›ß XŁŲ…X-%eƇN9<כx—SŗÓĻ‘b1š9=*¹£źžń—„LJź@6¤Ėµb'n89śę™uįĒńm “Šāhŗ‘ļ”ż}qZG¹>Ģņėo…7žÖģR Jb«1fŚ2X«ōÆN—_·ŠŅa5ÄpŁ/q±č*›ÖĀägC«cs¦5Ųgū›ŌfŖųkƚmÕĆé· ŃČŁ*qĆڱhÉÅÜōe—NÓ䒶[ˆŽŽ%Üĝ»—>•ćß<]„Ēį¶“Ć̲jÓĒåØ øĒĻßĻlVŲ#~§ĘVV·ZŃYKIs“ø·RČÆšoˆ4Æé…^Ķnu6#;€Ś£ø#½n“±²NÖeńR“Wm7M¶ģĘLĻ(ą@(ń_е-~H¬ŃŹZ€dīśÖn"”7ē¶C O-ÉäĪ}*%žŠ¶aw?ŽĖæ•gģї!čxŹņļL0#³¢Xߎ¹yu£ŗviÜI€ĪW*E$Šö÷Āi€xĒž~µ‘4IÜÓÜ@ņ3>a÷1éQ6Ė“] zV§qi˜ŁK“»øŚ>£ęŪ¼XF°:“ļY— w*Łčz®¦Ām2Īe¶S†||¤½ś×­i> ³66­ŖŽ[^4„§'ÖŖ.Ēd)u<Ÿā6›Œ<»+¹$…%*Lnü+‹Āš§ˆ“øµM2ŚźKPHbļŌŚ·Q&TXü5qcoQĘ``rr*厧­½¬3ĀŃ4yŒæ÷É5^͜U)µ±jĒYūYKhŒk©ćU½^ķmlYŽI¶Ž‡ŸĀ¦Ż9;Z.‡ż”0žāw·m\īüMz•ą5½š„G) Ąnp® ®].(ĢŹ¾µŗÓ„†$Wxw͜Öʛāōo±Iž‘/] e{f±qFœĘ„ĒŒÆ¢“Hį¹A3ư$·æ„qz½ģÓŚ¦\#²żį"š2j. ō<ŗīĪČźbd€[\7īųą|Ww¦ÄmmcŠ)w”ėź­#.‚lŸQ“k«1if’»äī=:Ö.‹įł¬ŻŚņ`Hrs•śÕ_čP]$…Q¤F{Ÿją®tK™Æd’ “õÅKŠGōš#āWü"~5Ń-„(-ÆĀĒøg,@9 Ū5Ó|oš–½š“ādž¼sąV .hg‹V‚y3µÉpJžŻ‘Ø…[³ßTžŒžĢ’fWķ#šĮ“żBĪļ^ŽĪ;m^(Xź>żsųWæ|<×ßDń\2J϶@ce>µ±ĶZ6gŅ^-Šl3ųĒą+YlO‰`X’Ācå\[ó”—ǟņ+šÆöģżōßü=Ō/ÖĢ\ź–Ņ8–=‡ä²ėŚŖ Ģžcµ›+ĶėQŠļ,šŹ[YYōŚe{ēi €Ź7cŃ;Ģ[Ÿ3;‡=Ҽڐ拋:!3ė»]zx4³pĪæ$~k¶z/łÅx7ž1ŽÜŹŗ^€ė$lā)œ“•śZņa‡ÖĘ®e ųRŠåÓµŪĖ·Ō/„_9üÖ$½AĮćšōCĆŚ'‹āøŗĀ=N%$s€Ē>µŁJ«ON‡=Ws·ų'®b6Ÿį]fņŲJ¹UrIŚ™ćņ⾬—Q?eŁø™Ą;8Éķ^ęÆ2¹äצÓŌv™=Ö„)k€±L1šŚ–k½2ō*ܕG µw«C£¼¼u…f|;v÷®÷RšęéP¬“ĻŠćŠ Ø”ÉšŁź–vo•ŠA€ŁN„ōĶK¢jלƒĻfŽH²vƒÉĒSŠčŠŌŹĢß“ń HŅEt‘°ĪŠOń}jIoĶg‰0€óĒJÖ(E{­U½¶¼¼±pFŽ8\ś×7oąŪµø…ÆŠO9ē€ 1Ųō ōF³šżÜ‘ĀņH’vǧ•|ó×Q9“½‰c—$|£€hb°[Z‚ej¶9ē’Õ^½£M ęc ž†°¦·©Ģ~SnÜ@9¹č¶_Nʈ~Ć~€č®m%‹LŪpcY2:Ž•ŹyżBkœœžæJŽ Čį2¤ė<ćÆPOZźbńE“÷~Eŗ UOp8ėT‘‹¦Ęɤ.”=Äśr}åļŽ ¶šö±l KY„“.kO#?fÖ¦fžĀA’PČĒ+ŸīšŪ¹ŗs A¼…NY³Ņ¢[šFV;ū/-ļ†fŃõ4‚ā8Ԍ„€ēæSÖ¼wC²³²ŗ¹s}¤,¾Ō‘§::‹­OF(‰n"…‰Įv=Mu%­ŚÜĆŗöwO¼Ē€=kEó5ø®s²ą¼=BƒĮ®"ģ$26ĖsšØ«)t6ō‡Žk‹Ip8ņO<µz“Wk%°|åqü©™—aÖō™¬$k‹ˆÖuūØĄäŠćī5qpdHKŗ7Ź»OJĪR/ŚŃ“’µDŃ Ųē'±”Ū>›5ÜBnNwr*”Œę“ØlŽ+»”†Yö)8EĪß|WĶ^Õōė?A:IöWøŽwżćžqTccŽ|S«Yźž!dŅ _a` 1Ūø®&īÖ+xo„•„!׌w9ŖHrģghZ¶™uȗфWŚUų<Waā=?MŌRĶ­'†1rT7Ż"- å³€ˆ 1ÉĻc]z„ņX˜lŲĒ9_•‡8?JGL,ĢY/¼C2˜uq"†Āäq[ŗ6’·v>v¹ū«ŲūŠjuzœ&ŹpÖš²ōž3Sx5­Å¢2Įną+Øz“v3ē1"–Ņdd·*Ń!Ē-†­yöét gXWę\ōĻֈ•©Į·ƒļ­uƵ(Ūd¬@ x®ēO“NÓ刢ķ^Ÿ(ęÉögS.±¬ė—°½¦œŅŲ!ņå|aTĒŌńZ1Xڽä+yÆ6ÖßRŠķõ'#” īŪæ•a$UĻŌ·ŗ¤3¼ńZ~Ö_bŪ.ŪsœäƒķYM'©é0%쁙ŲĶWü\lt ė;nLĪŲsĮ:óųTŁŲש“¬Nözz^ˆŲ$„€År+ m5ÕÆWi`$v­"“&K©—­&ƒ§Ļcw„·Ā ÷żń­z-šł¶‘Ķ:`‡ŹØĶ—›ģVn«ęl‰śīõ£PŌōūbHę†yXš„yēó3ĄüQ{v<@—$m;8 }Šzp+ß|;owœ×֑«æĻņ2{ž”FLō/]é1xVĪ×b5Ģ[öw“ßōÆ›Õ źź;«{*[4Mž’ž,ё”3L°tLžCJĆńF‹gŖ^IÆĮ3¤;]HGæėSp›ĮÓO±Cp%±—‘Œ1«z¦§öŲąŠ+K“Z¦BfDGDŽ{66h·*Nņē—9ķé]·4ß Łč ⨮ŅÜł[ŚI0ć“ōČōؙ¤Yåo«höv¹²šuŌ& n"-•‹ć€«Ö×-tĻŽp§½fQ“‘“·ž”N0I®[ÅR.Ÿq¦éÖw0Ī.”±~éžļÖ©-lz/‘yj³¶ÕnyW„ÜųK×bŽIP[ü€nĶėZ„m݉gŅ®­UY¾ś £pĘTq\żŹé–ŠIu5ŗ¬Ž@,OqS1œæŚmÆ/E¼o’xÉÅvV–Éeoā³]‚¼A©hP_iŒqŅ«I‘€Hļśš«”ÉēˆįgiPŸ,’Ā`ńÜv$óA@®zvˆĶs ʐļ.‡'ĄźŻ•‹éMń,čXØśž” Hč®l®šf£ou:‘4Xᇿé]$†YDÅŁ£Ū€=ź'rŽšŅv‚Ł¢,Ę>»IąW)Øų»AŅnŃoƒ=ĖˆĪO_jČ8æˆz„ >™{ G»!#kgw^µåóėRMpåo–ƒ'hé¶÷:ōa±ƒ‚O ż+Ō“‹1,Ÿg@²Ćqš Šw!Ō“iā–’Š2Bč†7ćüšāt‹?±j †Ż‘·w<~pÜ©-,zŌQZ¼QĆ6Ō,ćTµ ąŠå[fed “ö­LŌź¾ń~—'‡Ģ [¤„£1÷}’śÕņ³ćmGSŌnķ,Ū|-#¬h3 Šh£c«šŽŒn4/u '‚édĘÉ8lóōā¹ķI`MGģ–ūØĆ`äŠ3„Ņõ«ĻŪ“ŚuȎąŒg©ük¾šŠŽxgŸ]1,ņó#ȼ“ž¢³œŗ‰ü]=›\ŻųzLÅŻŗ?šM/Sŗ}mõKŁ?×8GńœÖcågŅśdš5Ɯ]¤kiUr ¼sŠó^wāč­īnͶb |¼ƒĒZåt7QńN³±{×:¾Ō5{½uŽŲD7LrüŸėĢģō8–ĪÖĘŲ[Éf±ŒF~ē„z–K»eHćŽ{azPƒm}`ž žšžā8ŚeÜxéŒõÅx¶©©j:…ó^Ę ©'jŽśŠ £Ļ)C1a7SžĘµ?²„ ēyŒ#=HķWÜĄčü‹CJ’Ž%yāĒŽ^ŲµĀGgsfģnd»¶ā›]Ó. м#©Y^Ł4÷@m|š9Ļ"¼|žżŁ#„•$‘Åf/$±CdĄE“Ē8"ŗ-+³+¼¬dL§Ø g_dŽ 0S«IkÖå‘ÓŒNė: ,0yĪ( c.£ö™ŠÜĒäŗ1Ė5e“ųÆ#yŒ‘¬«‚€÷Ķ5mš;H’óėZžUÅę›5‘·»‹+ć@éšē“.ßżåå{qŒń]¶«£Ż,–ę&*Å{ž‚ƒHK”ę¾ “š8.ć“UóˆÉ.2 sZ}¬ČS÷ (ąžĘƒAŅÄ#™¢`īŽ•Æįż#ÚL·z눿µ‘?;’‡Zi žyqŖE­ÜŻ+H·Ė.Æ~šĻŒ/µ»8’¶`·•įŒF8Įcėīk^R¶P–kČŽķ$c௾kŒ—CŅõkk&W™­€ņ÷‚wźOZr•‚=‘gHŠ“ż/V»Ó¬®N”1łŠĢ~fqųW0ž4×®µ™-^yŃw. 9^zV-—c~Me®-‚Ze˜6ÖśūÕ1į·Gid,óŸJDJ$dH3¹Y©•sNøeœ:œ <Õs26ī5?YCć9ö5hźVAŒƒŠ9™~ĢęZī8Ęõćzøøņ$xĮLœyē֚v3šįŪ“,ėźÆšėķ"žÖy&–BPĖĒJ§32;ĶZ ®ZFY˜óž3P‰­o„{e(!B2cP4‰õ½jĘÕ Óō²gŗ ;aTśWcį¹5ü)=ūC.¤ŖL²•EiÜ,y-ÅĆ[j.Īė5Ųćp^‚©jČņĆiöēS¼–aßÖ“ļģĖIb?Ł…ćƒh$œ}ć]G‡į‡M¹“’P.T ælŸJŹ{ÕÜ^b “Ź2„‡8ĮöÆ'»/'˜ņ.Y[½@leGEŽ=ŖKĚ ½0Gån ĆEXŸ1“r"ņŠüź?ŗ*„”­%š™Dr2óµØfĒI†Fyf‰W$;Õż3Č»ˆ¾ASŠ+’jž}ꇫ[ErÉ^j7÷@ė^3¢Ouń.F|`)Ļ|ŚY:æµµÄϼ¶ŠŻ;Šæ,ØLgQŚłŃ)EivCĆĶĪ85Éj¶÷ŽKd:c°Ŗ†TŅ5Ė­S¶æˆĘņ£C*õŏ[@ó§”ņvĻå+”E„Ķ uŽøą¢]žģVS’oƲf±SńģcZÓ ÓÜ~ķ>å\Üsś ńoXčś& ·[°ä’õé;LšŌ÷‘ß+Cø°łö¬[¶Ś,WywqovŅģEĘ@'Ҙš;? ,Ž‘§hW·iꡎŹøw8ļŽżuŽĆąŪŅ`¶Wži—%‹åæ:i‘ÖĢā¼k”„Ī—żŸoaŗx|­ģøŪϼrO ÉkŲ®7ŗBԚ'†µ=&ūP»žŻķĮżŚnä2v?­wV׋o A, ,g—÷ zŪVy%¹·Š&@U‚’:Wš–·įbåķH¬fA‹€w¶i%`ā=NŹę¶j!¹X(ä-†R}?*ņ-䊶SsÄ,Œ§ī§?J`}ĒążŽėJ¶µdžŽēo˜»‡ŽĻ_ėQßééĪD³™U$,W9ĘhÖž-o Z^ė2Ēs=Ü*ZŽ8›®=GzņĖß§ˆü˹DG# Ćīę€ ŗ±°dŒĒwČ[fĘ>µŃi—ģņ ·ŽTLŗyi’3źh“¬čv_f_¶,Bå×>X8÷¬‹²ŽeóŠW·÷iŠē¦źVń6‘V}žœÖā=Ą§7 ŌšŻ—Sµ¼Ńģtć¦Ū+[Ɩ›}I÷ ždqz÷†4+ė(^ņŚŚ{¾„x ō<{WĖ’>ڶ›{ØO«›$Ųfƒg%qœ=ĒzEEŸĶ©g}rśÜĻvć ¤’OÖ©1O-ŻYį^˜Qš TkI¾–ęõ-U^y–'”W[y©Ž-ÜvHńŹceł,ÜzQc2_ ųgS× ƒūLķ ÷óÖ^;ē„v>²ŅWžv(R“ķ}ŪH’Er—CcYŃ_Åwįs#³lY#ö9ąÅkĻ/<žÖĀė͚īQ˔ܫėŪ­D¢ˆčC»ŗ†V/0‰Ės׏äkÓ¬57Ń”¼ž5‰˜Ū˜d(#Øō5Ļ(vąś©Ō5$²ŽīŽåaķYvžµCędŽyŻŽžÕb:mSŌ“¤[…Żō,ZōčüI¬ų†ŽŁ.töŅÆ^}„ø2{ ­# v·Ķ—„Ń“ķJo¤^B+€y£šāøā+yŚį]Õ.XnHO ģ*Ұš ŠĶśĖÜł‹‘Ÿ›‘œšēõ=^='ģI ģ¹ŻŗQ·?.{S'˜–[(µ=F=Rͧ¹•WåĖ`.x<Óžė—Ԛ×?m]åēwĻ­}[gįĶ+į§…—L½{‹-[ĖĀOŹG¹¤%vxgˆ„ÅėcƒŌ5)¦h®oÖ8BĒ™ ālņŪųŖXnį‚ęŠ81+Œ‚;‚*Ķn6o&Æ«Ļ8²‰„i<ä óŅ­x“Ćŗå·‰ķ,—Mµµ‡ÉRYAaŌėM‰³zĢŧ1-µ„Ļfŗ+?N¶’'“ś?ÕIŠżkšQčJó<ėUŃl“©c¼‡cŻĪLŽŠs°“Ņ“NÓµõke‘“É$+©õŖŠ)3/ĘŚ÷†ēÕōčc[ż\RćŒõĖü>Mā–ŌuōmfĪ(Ā,w?pśńų ¹K±·2>–ŌIÕfF“Ņ“ū&³¦ćµc7‡Ä³[<0Mpˆź|øĘKœÖN©—céqģ>xsMńWtém4ÉT“IžGZšHķlž2źĖń,[ݤ~PŽÜĪpŃÄNqųPŖ˜É2}@š£8¶Ō“›Ō!ĮIŲ«Ų;ūšÄÓ|Ec5‹ &x£µfŚUF7•jlČ­«iSjV“,s»Nī{WŽh>(¼š~±6•5£ÜĄĶņĶŽH ŒŌłĶa6p~4ŌÆŁ™Æ${tš\īa“•ĻJś7ą‡ōėµ{qż#RµÓ.D°Ąė½äqžēåõ9-F’P·6‚\dŒnZ¹d¢ey­bh!#ō2%sVÕóu2M»ę €ÜŠŃńÅō0LĶ;@Įō¬d†ŸC#ĀZzŪų›MæÕ.Ķžžųlå”÷ü+Ž/µ]:qsNd³™ ߁Ēœ£sh#Ćo¼g>ž9]-RO“kzføė‰“R•§…wI;{ŃŲŁDu¤ Zx‰l¦u.›mlģŠŽĢ76HÉcŽoŌ—”•Æų£_Ņ!µN“øšV%w.C(Ē­y‚|aiā2ó^]J}>āFJļ¼*ē8ĒlWW-NĖįø¤“Yt‹ė!3fEu9$vÜ ńōŖ³éšj֗²ƒØ(ł˜¦Aē fҾ¤Å”ž&kz¦ƒį}/Ćz]¼Ė#2̐’¬0=+Ė|ą'Ó'TŌZC+ džqĻēPĶ }¦źæk³iš•ņšWӁż+Ļļ“©õDĀŻŹwŗU…£Ciz™38Hv –nøż f’aKöõ‹w#vsÅdi –;½?Ęŗ§„”›NÓ »Ų‡3»?ZĀæń'sfŃČ øyaxļČü©EXŻU±ޓѮEiq2ĢvćČRF7:ķt}nĆĆŚ%¾‹ y<nƒ{{ Žč«rķž£kmg¦Éf;·UĻē^I©‹}^ęk„·>^p6’k”Ió—B垃¢iV*\“ŅąČQ“Šó›BŽmQ–AåÆl¶GåS)#–q¹ėvWŠiśzO;G! ļc°Ø“ˆ>"ŗUҌ‹nhČĮ=æ„Ń jt²A)’C$2ĒŻü+ĶõĮu{†DPsŽ6ŌŹ6.+¹Ķé—r곫;ˆ6ä)?ÄkÓm<5~š=üɱX<ĒČuõQYŹ+r„½4ń-„Ł»FØĄēq‡„UƒÄŁ,vļpļŒäu51ܞS­°ń”Ū*ąc8ēi­Æ@C]Ąå±Ö“&Ē3uā›o-ćĀłØpqŅ»Ķ3O:µ­ŻėZ¼ŠŃä`ZІń]Ō‹]įļ­/v֓ p>źõö±ŸHųķš"āPšj®Žm ’–É*OēśW‹ÄŹo^‡Ń)&®ŖąŒß“ģŸž2Ż~Īž8½ü ā ±b’¾ZŽēщč½RZ¦€ŚN·y4eŚ$bbń½{ʽēܼōĆ ūoEužlĶ ķŽ£ŸšņÆķeš‹Jń‡u;ĖĖA>•zi&L±·^?ĻJØ;UHjæ·ģą’¾5x»ĮPŖĮ¢ŚŻżŗĒs&ÖPvżį_^ZO”%Tvē­jrŹ=JvŅ xV-˜rÄć<-]YćźÜ3ē®zPf_‚µOo*ǹ³’x&¦ŠįKOĀĪ3@¼ąyH¹Ćm<Ö>Sƒd2ś÷«“66-Zź§* Øę½’ą7ĘMözųµšŪćƒīīōÆišœr“°±ēē‰×” 2)Ż\줕ģĻōŸų ńƒ@ż¦~ xāē‡īmn-µ>!z"`M½Š_™_Qų{Šģõ{)R%ERŪN õĶ5©‰į_t'ŸFÕ4˜ćŠhīcÜū¬9ćłWåÆÅ I¬Ųjuõœ’¤°µ½ŹÆŗß˜šĘŽk3łcż»¾ßü7ų‰e­M‘cy¬¤łąž9Ɓ®ģŅ)AVč8ĶuGbd“3Æķƒ;،d:ÕK-?䛬 ®ā_JŚ2Šäšč[ū$Ø£#©8ėÅE"Eo ʅ"ÉŻ÷y&“Øs•Ģ»‚ˆ²ĆZ·u”ó˜,ź@ dSö†°džSDQƒ6@éėļV–ā6dR7g*®wÓf¬\¼Oä–dĘæ_jž”?ą’“õ—‹¼'mą{\’ŠƒE·h$1Ws䓞§8¢Hė‰żW|*ńƒx›ĆśmÅŌĶż³+ī’āģ¬;ōĄÆZ•^~÷õĆR cĢ>;|#Ń?hƃ~4ų=ā KižŻe+érČ2mīĀ’„N9ēš#½›ķQš{ųoĒoų#V“Ō{{³¦Ü,$9߃ÓÆć\Ŗ–„ž9¬xźöM>ęŅ+łā™•T…ļ_ĄQšßHžŃÕMŻÄeó”s’­ģ*«ö7ˆ Õ/ü1vš~¢`Ō$Ž6 eT_=iž$Ō|āó-”½V#dĪ'Jā…й3#UńåóėkF(50ß.ŠWx%!_¢’|aŒ¼5c©i‘’¢Ā9É8p9üs^Ö—,lqWÕÜö S ŠĻ¶9 ü§#Œ{×a}."A$p`™bĆ7µu¤ś2Cw{Ū'HĶĪÕī*ļ„ü+ØÅØ[ź÷¶Ņ%¾AGĮĮĒ\¤¬ģ=[[×ō;GŌm µ „taĻQ_;§Ś]īµ(€]ĢxQŒŠŅ-‘(–ģ¤I0˜· żć]χl'øø…ÆmŻ!#Õ¬eddŃŪj ŸåøV†Ž˜¬{ZĶģRxYē;HĒAG8XÄ»¾»¹¶`¦_³ ĒĖÓšäµ Ö;æĮi™ŽąNp*ĖFQƒ.ŠxØdŗ»[ÅA˜u¤4Ž­uM:ŁŽćgļH]Å~éĒéZ:U¶Ÿõ„ņ±p­¹”¼(+‘—|K=¤šģŠ,‰fäМķö©!µ·»Š5ņ9 AéZAćcYŃćø\D”vżßž½aéZĶ+Z”YŃų8-h#øA‡V;9Ō¢'ˁüŖi|O§‹ĖhcŽāHĘEĮĻ„±ĻK§Ćöq3džż+ķĘ)„DFXŒśŠdįŲæ§ŚĶ<Ņ™eæUēļVńŅ XѶÆĖß½\(»”ų{B‚õ®.Ģ_gåcҽ\»ž9ÓDŽq„Ü'o±­Mlxż½ćłŹ—«ƒ›µ\Ō4n-SQ7 ģ䄹ĒŅ‚fŽ='¹Ņn#Ž@Ŗ»ˆ®źĻTšęŃĢ ŪH*īh1HÉ[ ć¾ģ”E?($ōŖj7š{¦8ēM’9n1Yū1©v:…ńw٧‚XC!fw®×O×&ø•Ā?|śŠV¶Å\ļōŪ lÆõ.ÕŹi\šĄTé_*k«¢kŗÉŌō«qoh¬vqŠŽ§ž}kH°±Ņčń!ĶʚƠ5„ØYÅhń+1c@ķZFV܇ɵ/K§H¬š¹ŚŽĆŽ»æ Ś|…n$Äc•ĮéMĢž@Ō`ņīš9xĪÖļWō©ķŅU·l)f=8¬Ī˜ģz'•ioø‚+ŲõĶayo$­$9‰”’qYɲ‹z¤³M£IļŻJ“޼õęx>Ļov*E$zW‡ü; Gä²ņŁ^›m‡ƒ“;ßÅ=›ä;˜Ž„UEtõ­oÄw–'[†Ä¦–Ņ4džLgÆAķX‘jIrpÄpz$;@ü9ńÜ6^Õ<)ØĆkĶr·ČWę^ÄŸJķµ >×Fµ³ÕÜŚNޤås˜¾¹©ē^§œė>5Ņõ{H.į•~é;W›Ć>„nÓHį9GQŚ—“'‘ėŽ&Õ.4»mżÖKc卣vIłŗ×‘-9TWTÜ@Ē~h»ŽčŠM§ ’ čżšÖāā-QļnŽG€3Ē„i+–tyWŚ‚ŗ¬ØźT~čŖ×šFæXé!×¹”«`\šĀė6KÆ[EuhŁ@mĆó®ßŐXŪXǤé!;Uˆū°lŽ6±įW“µp·qØäøąW3’ä°ßĆ}bĢ–ń‚x’œŌn;"żĒе[6{k8āV‘gƒķTÆ'ÕoZ-CW¤›nĄrrŖHfͧŒÆ®tčü;©“RŪ üČ]FYxĒ&®ŻßŲÅk}h¶·I坒/O©ŖhĪRčyÜSŪÅ-¤Ļy”å ­};aā 7^šķ«Hķd†¬Č0Žēޤ”5Õfæ¹Õ-”ŠFU9ېJÕ§°}Rž7¤Ę66CB‡KyįĶ|;;1ßŖ+ŒcėłV‹“Kž-1d‘dT88ČĻÖ¢R5äFkųŠéÖå&¹.¬NÜӚe¼²vß±•N0;Öm•cĖ.›PņÜDƒ€A˵č:\ŚŽ„į­CKžo*)T»1'<ņĪµ‰?ƒģõ|= ¶„$.ˆOĢxŚ=?*ž‰ā[ äŌ-2Å$dØŽ:HČö8¦ĢŌ{˜W׋%ĢMĪČŁśž5·āķjśš”Ļt£ Čėߊō„ĖÜŁ#Ļ¢šFrŗ#ÕlĖ]»A(óT€sČĘy®ÄjæŁv0Ćo«”Ā[™>"ń$_`’XäY% ““׍_ų™ļ”…6—„6BśzŅ”KKRö™öt½V<°v•<×¢ŚŁ½ż“źQĢ<į@ļN+7œĒ‰’µ!Ņ.¬¦…§.įāpŚčk‹Ņn&Ó-ÄŹņŪJ¤įT௽j¼ų W½Š&½Õī¼ļ7īy žzÅŻÓĒŁDn² dņ4į>:Ń>Ų‹oqrĪ’c;W<ŌÓtß YŲļAb6Ž1ŌŌņ«Źo1ØA“śSīōD¼Ņ¦šiöž@÷¬ŻŗE™–ö6‹§-–ÕŒŒØĮÅ&±”„Ɔ//’h!+"ØÉłÜš“CŹmėĪżé'žrz ģü<®Ś¬ZJŒīP=Ø3ęŌķæį+Ń“ÉVŚš«†#p\}³\Tž§®ÜĶmdŻ’¼ķĻ­im rģzŒńéÅ#ø˜‡‡nя\W#{gwycr±;y Ö„.„ž]·v×^dnóGŠ®s]šĻh–°¶ņ$¼„t¦œkt¶7ŅLēl2Ɂַ¼/>ƒ ݬŚöž÷¶Qƒ¾%“in9śā‰ 9ki|ėĖäTgI$"0¼yk^“¤Å-µ›uEĘÜā¤AóHūČG$V틤ųŽ'p}¾“€Ģ×ÕģȲÉ1Aō¬“Ži"dŚŽpG=ĮF¦Ś‰ ˜ŽqŽOzܟEµž.fŚ= ‡ŖŪjHÆ[Mä£c8ė\ޟkh³Ė-Ü,ŹĒ-øcš LļtłE¢ ķąxķ˜•S·ƒķšģ“LšśÖ/³˜ŻCu*3A*&ÜŚ`‚Ńf‘YAčs\–„ÆŪŁ@`Žv󷌊PŃŲŠ‹Z±A(˜”ŽÄלų‚x`˜…‘n„ČRW¹=k9E#CŌ4Ķ}mMĶåµÉŅZB‘JßtœgĪ²ģ¢XPDfņ¬Ąģ48Æ·,£uĄĪkŌķ]ü+¤¾±:«H[‘·”ķš¢y¾æńOVŌµ+Rų}¢f>UĮĄąp? ļF–K÷tI“éT˜¬ej[¬e7+ĘĒ€Ä­cźž$±¾vŽɕxÜ{VČBŽf¶™ci_9#ę9Ą«p]jrŁ+H°ŚDĮ»®8ĒéXšĮu75u·6iŚ{¢F„+mčErÖz*įeP\Æ8ĒśŅ.ē^ĘßUÓ×Ė”Ć®HÜ ē^Ś÷ūx 4ń6ž~j o©ėš+¤QƝfTtŖÓߌŲī‰AWo¼õāKĒ»ŸOk ˜V ß¼\ē€zWCw®lŒ}”¤s‚Ę”8 v{~óI2ŽN°O" Źź…Ÿ…žĻžg;.ą6żŚv%Č„§h%ļRkµQn}ėkP›Kµ“¼³“d“±\?µZ##OĮ7^mµĶ”Š*Ćø(ŚzńZŚ·† Žėū]ķL–įG©”‡Yš{ BÖ=8@Œ¬IN9CŽæ„s—Ž]2Ō'{W@ųĄ8?•fly׉#kš5“·0™ÅnxH$–Æepź²ņŹŁéŽŌŠĻcq:­½“©n~nõŌčÖqŁ$V·ŅyhĒ—<ŒŠgknAŖųfō»×x]ķ³”æņÆ-“Ō!B+{©eaĮ<œP)KKÓjLó­ķō*šws]^ā{hcū=Įˆ£ õz…„ŲÉ{=­”Š^Jń”ƒĄĪ2{õØ#¾Ó®uįšdó£Ąaž¦3‘ń…žŸø`QaaU³Įķ\MĢvpŲ¬°•†ĻńR+™˜ićN½g}÷ē ¤œmĖCuk$Ø÷3m\ ¼óėUĒ#æ_Xų†ŪK¹^ŽįH‘°Ųó<ƒ]±ą<’fõ‘m©ŗŪź$*sŒē•§!q<­ I ²†źOZµcĻ€ęī;ŗ;UŃ„Ō"6ęäBądgų½…KįļŽßj֋©Mök(ŸpĀg‘Šę˜£é&› “@«wēÄN<Ā1ŠŹŌ5-'_)–č#ćrž)̽Rxu8L^^Å dē&øMq”[I7lܧӭ ™ž¶°k„¹»”¢øģ+¤ńNÆdˆF‰ÕTĘC’ŌŽŚÖęö¼” „²BžE_ø²{;C5³3†#xĒ&ƒHœ„ǜm„“ž†½CŌ'’É¢Iāp2}j¢ŒŁ^ėH„[ØÓ~ćÅE:Ax‘Ć4›'r—D"Hb[XjõŪŠŹŽīF$"ĒoJĢ ę·wАĮ(8kÉ5Ø¢ye$ėHv;4³Kd·ĖsśT:Ü«ŗÜv·'ūʁäŗćöģÅFqT4­R$ÕD€6Ģķ,GŽ4ģ:)7–ž`q6ƒT<§Ż_=øÓPĆ,,7eĢ½(ĪõkĖ­3L×JT°ŚĪ3ŠŅxJ [«¹cŻrl+ŠźM_’„rģ„Ō.Ö xŸ8#9lT Å#ʱ³”čqL cӑܳ);ˆćŠÕME ŒĶhŒœ)ČäP‘]ÄŚv„ “/pŲ#Æ=kŃ¢Õäø’)­L±„\`óŪ„ +ŻźJŅ$³"®[h÷­«XŅā!)ŚtśPm”Š&“oe§Ļ{,v÷2±ÉĄl^+ą/ˆśg›«Ģ—Ķps łw«ĻÅžĒšīīl­-/äRŹv§9f÷5ÜüFšģ>'°²ŸLµKhā ’ą’­p>÷±éłP+4x—YÕ¾źšZŁ9ŠšĘŅ8#ĖčAś×„|.ńĪæ©Å>„ŖBl­ŽFDŻü@’Z ä;m^žćRœ*‘ó“Tt/ Ŗźj7i$ģŹbėŽ” +üz˧Ļ­ø/•ćµŌļ,ķŚł\Hxl®2hŪGįȗpH‡$œ óßiö–W1%„äW±}āŪH*OlPOhÖśŸ‰¬#Ō­!ŗÓ×.w’ v?‡ZŸāG„4i/ą]Pˆź*CH¬”°ć  <#㋽ķv~!œ Š_3īŲ‚?Īk¦ńG,m4ż*žĀŹžöŽī?0ŗ¦BņFī;q@„®¦ŗŗÉ±Ć£ óĀ©fĢö·8LbŸzćmeŗ¶ÖllŽĘKūY&ÜĢ޹5Žx—Ä:Ŝ „i‹é²¹Ž2tĻłļ@ģM©^HĻ%ā^$J7HO'ėÅqž#Öõ¹$>‰§¤—E–A$ ģUļ’9ķ@X÷QLJlcž`Ō fR¤ā·mõ‹]:žH¹Ü¤œcރ+qsā x‰oU”¬f-¹Č<śt¬½nŌaž;ŁÖ8åKp{A¬Qš>£ąZ’\ń)¹1 ß5…‚2ß š8éXŗ6q”^=†±£››ÖŒ–Œ '?wéM#”#O ¾‡xś%¹nķZ°jÖÖV’n@$ø mćéHŹK©ƒŒµŸń‚ęhōū ¬‰²˜Ÿšbą’3ĪEKZ™IzŽŹŽīó·¦d}ÓZ)ÖęĘ?“jķҲ°Ž7RŠļm­żžiŪ;WhūÕ©©±Ń-ÅŻø/»d`u$ćÕ(±ņ³Šōæ éO¤>« ¬71©*$ū̽ńśW7„ųž?źPé¾Ó|»e#Nķ… ÓjŌø®ē™ų×MÕGÄėļYĻ ÕĢ#lóÄÅ£-Ų[ŅŁæ‡/ōųÆln/u‡W qėAœ¢uZ}Ģ·6×+,FĘlŖæFÓĆz¦”q-Õܒ%°į„ĘU(2öf¾‡ŗgmu.§4ŒB¼‡‚}G ÆOÓ-Æ¢ø·’PßjīJ–‘_Å^&Ó“ĻiŽŌgKkĖ”®2§\tė^c“6“-ާ¬H¤d0ʧaČ`p ¢1ŠøČņ?Ś›ąO‹5_č~+šÅĢW7֖ŠÉ&KHĮ'޲|-ą­"ÖŅmU·¹’?(‰ ¦VFōśUĻsŻ<5įųwC·Št‹;x4įūֈØcךęØų·RŠķ–h"øŠ×pT¶?j™ģ -Ÿ!ŲxŗxĀūQ³®˜HYA<)Ę8¬ßxĒ_ńN“÷ŗÅĢ_el• Žõ¬M”Mœ¤—m<ö®NŽÄTś]·öŤāęe·ćåcךk̇­éž†-2ĒŁä¶@Čōæaąd¼²7¶w»­×…PÖéXĪR8©å’ŹųŚĢʌŒTŌ~Š‹ ٤7€»InƒŚƒļ¢=#į¾¶¾ Dø¹?jņƒ÷d>µĒYųŪÄ~,ń^”Ø_Ļ¼›ĀĄ"0=Eg'©Q‡SU³™õeÖ¶mć8]ƅś ĀŅ./.•į,ų”¤ųwR—1ܝI£$6 Ų §Øš~„cŖŻ¤śmĄ&\aŗ”®šxnņÖ\Ʋ¶灟„G#/C[Gš—ņ\\Ķ4w­Ģ|»F+6_ŚčŚŃKĀVévĢ»īƒŪŠŅ1°¹NwĒŗÄ^#’īŒåBš>•äś'Ū>ß,®«H9 Ų沩”C±Ļn%‡Ló#˜ ĪžćÕkč?…w“Ųhé&®„xĢ$%6‘ŽŲW)qæS¼ų«ć„ń·sį©žÄšK‚ Ė&ŃŪ=? ó*šé¶ŗV‡ ¼Ū2¤f y‘‡@1ō­#ć9ßZMsŖĻēšŹ[óükĘu›)āƒL•`¶$€t=ė@hīü+ā?Kū :Ū»³øS½r”{׎ų»Yø>/uŅ’tøīŻ¢—• TmŌ#LŁŗšTŸtB¾r¦”Ø0'+’I’>µī×6Sx_ĆpipO${”EĪBŒvühę[ RŅNJŁų?Ä^(ŌN›imrŸ½½Ä¼ ½ŲÖ¾ —į-ž‚ŗLö֓łqcĢS»ĶoST¬/dO£ü!¼šÖ— ÜŃiŅ̤HŽāŒ‚}8¬OéZųŸbˆóV`ƒ4I-ÉtĻ+Ōō.-I0øw¹~\öéŠćõMQtK‡Ņ!IšPLn1Ļ”5„ßC)G”×Xč?bKNöhbi—ĶʾJśƒ].Ƭiŗ†‰­ŗÅ<Š»eŌ`ž˜ĶBÉüWŖĮāH%øŒ}ž9Ē÷‘¹ 9L–óōłßÄZ³[ß]39·ŒüĢ?Åé’Ö©µÆˆśt:̳ŲŪłé—NŒ}Õ<—(ńŻ#ćž±cm{f…§Ó&bĖ VŒŌZ'Å][MRĪ¢ēĪfo¼FĮŪńÅW%Šęfŗx²-nå.–8’iĢ3š÷oų«GÓ-­ģŚm„ą¶ÓĮ’hÖS}źōÖö7jghཌ‘[9 œs\Ä·šl³4rIų Ÿŗk2[-ÜE¤M“ž[¦Cµw}ęĒ­y·Ćo_šļļN«ioqaęGxšŗsüčcsڵųZęßQ»žņķ< qĪäƦ+Ē4ˆś®æ«¶‡Ŗi°ĆcĖ•XnP¹ćZ}Ė3Óļ¾Émfę$`Żxā¼žĀīhīn%K†m„Ą óG;4±ŅkÖ"ĻKÓ"ł ”³Åbų~śĖ\"Pƒģɂūv)8ĶO1œ¢¬tŗŸ†mĀ-֛q9¶É`Ī |¾•ä:Ü×M|¶¶önaIžõq‘™Ļ/U}BķåU“ĮŽ”yϹ®«OŃī䕢2Ę!vW“ļC™Q•“;+M““˲É*6Ō.8"± ńÖ°š†Æ žØ…Žo<īF8 ½jšp1P¹ō\–GuńsHæų/ń?Gųµą;ŁMK“¹†P2  qӏå_Ł?ģĖūDų{öžż˜< ńJŌ£øÖ­ ŽĻS€øgĄĮ އ8üėŻ§+Å# ›h{ĒĆĶnćDń.³¹µ˜š/įRsĻןҾŖ×<=¤ųHŸOŌ—Ķ“š6ł‡%NüqTyõ|å›ž Ėū*ų‹Ēz5÷Š|?”GŖk^³’Y“™f“ROÕ¶äqé_ÉæŠm ā–æĶĪŚ3ņž„sӐEkŠāš8É#Ś Jļ'ļ«ō§G䥮W2~šĮoz³¶·ˆådv:qŅ“#Ԉi8A»óŻŪR®„«„¬Œ ³€c95Ļ­Źłķ·*łČŖŠ5§=†§ņÄ[ĘÜg-Ž kYO āŖe&`ÅyToļR¹Ż ŸŌ’ü»ūoßčŽ6ńĻģ‰ń Stķe[PŠe•6G dPO|+ t×õ±ŖŲÉĶ ŠXŲ¤€ž5•NåĶŻŻžCā+ķKLH2R¾#ų”įĖ{9Žé`Š®A‚~9ßŪśW5ģĪi.‡ć_ķÕš^ÓāoĆżBŽīŅS«ŚBa†XŠˆ9SÓ®kłUÕōżOI×u½#STi,ī^ß ķ“õe=+¢“ŅĀņ0ݶŒą™9'æ•ZŚ}±¹3́łŚŗ‰ÉP-vąJäš#“ß8w‘rĒvōö”Eœ­ ‘<“ ‘g€ĆµB‡ĖNęe†ćŸ­ ,pC!Žy_Ī38HĒF<ÕČ'ŹČ!-×ĶikōhäVņ;ö"¾’ż’¾7ßžĻ’ü7ć>{EŃī®ŅĒWŽēs£ĀĒ®;c={U4vĮŸß_ģéń 5+-XūD.ķ`IvĢ$2:÷Ę1ųŠżÓnÅ͹·øy°äö‡µrU4RčIbĶ č(NQÖHÉģAĶ6ßšpOģ;'ˆ¼ßµĆ[,„ū+Å«Ā(ӒöqžF~•É)kq#ųŠś}ĮŁuŖJAłwc>•ķæ ļ,“øžĪ„™ņArwk ņvŠÕ^hv¶ŚŽŸqöXāįA叟å_x©'® Ó«@Ė!Œļ\0Įżk’”½ā„.‡šź±c˚"ß.IĒļß³‡ÄŪĶ#W¹ŅoīŃÜłqŪž¼1ļ^ķ7„ŽI¤z-åĄŪ(d’Łˆ9Ēé]MĘ¦ŅĄ"ŚŁP?kX晙a©Ü n *5`U€ēé^•£k—wVļn_lkņ©ō¢ś™¦6ā[ ™ī!ԂϽHĻ©*­–Ÿiדrą<ü§œŃ2ķ”Ž— Zź2Oä¼×č¹=ŖĘ½ŖÜ]]ŚĶd†ŃK+žŸžŗ¢HŪ½ĶŻ­ sūϻךÉÕ浊“čeDiĖH§sC2fw…uoķ}FāÖęĶ>ĘÄ,{O$÷ȬĻhśŽ”·wPø“Lß·åÉ‚lpqĶp†õ®ęĆDū]•üŠ@Vč1APÜ£¬xjÕį2y§+‚PŽāŖŚ¼hŪ_ŌŅ5rF՝„ĀŪŪ-ä.),ŒßĘ?Īk»Ó-’Ö&‚VÜ?xzā¶Hűš¦Ž†ąEhūć* ćՈ4iōČJĖ{˜ƒ¹G$S#w–Æā JÖŹ ŽÅöaČÆ>ńWŲ|9āiōˆ$˜±ŗU_•²q‘łP4īz5¤2ZŪĢ„¤· $rkÖ4ėµ7{F–•³“õ¦ŚŒŠŃ„W7ĖjźægĪŅzWY«iŽŚ|°ĄC)ī8 SŒ€ę#±ó6Zg/čMztiō›ÓoīŽ÷%ž2ć:Š»Ęų«Ć—‰%Åé­ååGOjó„Ō.mģ›Ł”qĄ²ÅycŽĮ² ®ÆĆńż‚i# %Ś `ō9ö­Ln •„\G,Ž\,»k‚:¤wŠÜZ<[?ČÜtĶ'"/­‚8ągHݲĄ†ŲÆPŃod—̀¬Y@SŽ”®™G hntĖ4ūē„Hہf{ óĶCĮĮ~Š-¤P„’Š£U„Фūœ„„Ģŗ-¬†ī1±˜p¹ķ'SÕo®īŽČ ķ·2īm>„S°—™Ō5¦”q FE«ūĄG­eXĶ47S[((LŠ nƼ—v÷¢y ĢłėšŁšŻœ÷÷‡"I[†ŪŁE!sßm¦Iö•Ł5ąŽøÉļöŹ 1ZLøĖ±—yuz•tXsČaŌzUIōÜė$~ŖsĄ¬¹FäM«so`śl·2̲–Ī6ż+µÕõW“ųNšq‚āw’L/ļ.ćõ÷¤lĪĮ^)ŸO±Õ4¹-¢ŗŠ^©'88#?Qš‹PÕ<‹O±[|ŒÄŗ§ĢG\Aqv9¹uŃopeŒś~¹©üGÖuøŅīńU‰x8Ī„ĘęŽG7§éś­ōņ5„9^IĒ&ŗ=6āžĻRX5:#0P®:ż(P2“=g_Ót›:  ³Ż>ŃĘ9Ę+ÅLŽ+÷øuh¢ČP t9¦G”ŁŽé“µ‹}Žā9.¹ ‘Į®tĮt» ÜE9 xā®.ĘN,§5½Œ:¤(ó.…ä×^¶0č–> (™[oXń­$ō.į¬õżBԃm{"[ī'h8½×ÄRźcynäP˜Ą-Ą¬:£±ƒā­Bę[Ų9³ޟmŚjØ4WEQ:ē"³‡a”“ųōū›»IīŠ*#fŗ?Įk{ao5ŗ*$}qĄ9­¢D„Ѥi1Mxdü§>  ź®dKxībBŸ0Ćdsj©Eʞ'ømcwó^—ą» ‹7øŅär‹0k ćœÖe&vxjé/ī P.#GłYz`WKe„ZŲN.%EcŸ§4”t°ÜĢAnÖSæ˜-āQ–ĒFÆ’ Ķa˜änź=ź\KēE »‰b,k;ī)éļ]%ž„oœĘā-å£ćU©G±FV«É©\MŪ’ØĶĆ wÆV±²ŠóE•­įŪČ$`äœb“‘ńM¤śFœ­łŖŲS· Ļzņ[6ŗ³‘¶Ć7'44LKĖåŪ…Ź„žéĮ5ėŽ¾µńŸmjÉŗFŲw‘üč)5dŃnŒ³w9Ćc­u^ šm$[(ųłNܕ4 ż ֟­eoĘ师ļ`7VDO— v°©huķS)XŹ[œ¦±ØGі1DqŌŌR^>£ˆĖ•ĘļN.ä”īt‹‰ZuVŹŪ–9ź?ƹ¦Ņ('ŒĀĄēäĻj”ݘQ]ŻéēcŻ†Įz懼I6.²Å'–‘Ž„cŸ­D„m a±źśRé:¼fęü4ö›KmQČć„x®§4ź^]éėioę˜Ń`0ćé9”v0ŁZ­­«­Ō.såē+©ÓüN—>d‘× ¬ Z\ąnk‘iŅI$¦0ŖŲĘO+ķ\~„©@-|øT„^ģisĀ}­Ų¼ŽŪ²x t«zf½yš[„ó¬åwsPT]Š2Ō.-WN½Ņ§p²ó# ÷H÷ü+š‹XŌ5[·øfh|ĄĶĒR(-ϱ~ÄŠ³wRCž¬^¶ž+y¼Ėe1MĪNzӊ29ĶKOŸRÕź)ˆ‰G)ZŚMœöIr”² “Ž3[Ų —śżÓX[Į$%‹?ąęŗ]æ–Ų[4~TMņć~µ›ŃźTWC_þ²¾¹žęņb™$.O¦Ōü+§Z°ł‹l«‘ĒćJźÖ4“NjśŅ+ųdµ™VC»†ĻŻśWžźžŌ­ž6“‘n[x €ćåĻ'?JQ·R%n‡Q…¬{nEÉ$gšĀ×u+ė—³žū «øŁ€Ą fž‰™Kc¢ÓŹĀ:Č c­[—QŽŽyĖwäc­KģVµšßˆ¼A<·p~žwæ×­j®…ŖiņʓZLŠŹ@8ČŌKEŪxgӘ%Īy­2ļĻ,Ī†#Æ,zVfsšxŖÖóSæÓīh&Œ•ń†÷'ˆ“S§čķw}ŪļQ4/Ą¾ŌķŌ|ŏ|Axō GĆ7š=ż³±–ŽF\4gĪļéShšõÕ­śFĄF®:R±jG»Éu§jZmŗŹßaŻŽ•ę:§‡4‰7É<ńZʤx¤;«œÅƇāK««ĖW7 ·r:ʉqom<Ķe6p[jŒ“RāQėZ7€»šå,ou‹˜'{g™]ÉÄOƒÓПZłĆJÓĢNÖ2IēÜ+÷ē%ˆ8Ķb3Śü?±…cŲžf1Źō5æām6ūľ¹Ņ•žĻ6å‘J(LØčχĮšž’PbżĘźÓłTm­jķ<®××-.Ż”0҆.U}Fy]¢˜2·N}jÄZE­­Ė\\‰ ‘ĪqN;‘$ŽŸL׬l ·Šf\n8öĶu:‡4Ū}\jPŽA-ÄįfpŸ/ż’;ŲĢÖń>”ĀM °Å“€@ƞ¼A+Ųj!-¤| Ə¼(h ā9.Ķz<Åpun¢²«“Ē  ø¬ćņ/Ėc¢Ķ:øÜĆ,ėY:%ŻĶģóŁŪ”TĮē·Ņ£„iV±[°ŚĶ8ąØķļMÕ4„ŠÜ]T Œ“Ž€vyĀŅĢH„?&ø’ź6šŽµäé¬Ń«&•ŗ›)–§įf±·¶©ņ3J£ßæŌšč¼9¤GgøŗgyW,7’h±2ŸcJćWV½[o)†Oz»zß"¢t\sīkH£3Ÿó·b"Æ$Ž•Į¾— Ö¢Ķę3Ć›¹=żč“Õ|2–†vŠżāØ$tÆBæŽ{‹E·Ųģ¬8ĒjČÖ>d:G†­lŚŽņį¦Ż…Ļ„sž-šĒ‰nüOste¶>•Cn‹ĢOžēø ³ŠŌ4ŶÓī“©8å”ŽŸJó cżØ•øŸk 稠^±·–©wŒfŪ€=s]$<ŸŲö²jNĢßx©ēZ ęĆfč²]¶ŽHŚ3Ķx‡a¶žŠyÄA¦ēq<3A¬Ž\čńé¤ÜæŻ(}ģpķ’MKkXNƳ9sA¤`nX6±rB‹›ŲQF‡+Ē ®‚ļQ“L1O%ŁpŁ$–Ē­r—®µ›-SEø†ģłRŒ*ŒąŸq\W³Iū‰ I·”ķ@4Aöõ5’EUs‘Ā¤Ņl“Fcq{+ŚĀœw!ģz„u›†Õ!q‚B’ ē’×Z6æ u-}õ[yo®JČd’O6O‘Wž8ķŲVå¤x–µš’Yš®æoi:Jܲ®0x•z$Ÿ µĶZŹ;ķ?Uˆ[DĮåPA.;÷Ķ gCm¦ĶšÅ}m„ēœWweod’%‰Bģå›%~µƒ]€ē’I—td<½\ņÜĶŖDŖLvŽ`,@ėģ)čZ;*LbDh׃ČĘkÅ1Ī—+u${ÕO ķ@­Ü±cuĶ³D2›pŹF0høÓ )*ĀĘHõ4 #м“x„(Ų‘zü½ė¤ŠtŌ¹ŽiÕ+«żģŠeg”¼hņK<±7Fz×Jž":}“Ły $™Īó÷‡Ņ€‡ž{Ya[Wv2ēęź r‘Ąŗ]ņęq½ĆļĖ7 ʐ™ŽÜ6›§XM;܇ty0jšżSYžŌÕß0ŪŁ±pzPDc©³’éhžeĀL§Y[#[ŖÜIó“–Ę@=h4-Į,6owfÕr 1č+BK§6É”]ēpER¹ü#RĪĀń£2Ū·9ō®›MšōöÖs\/—8ŚØĆZdĻ%µü67I~zõö«M t‚õäW`ŁĮ?„ 4 ū“YžA=Ü»¶Ž0ƒ·ćÖ¹Xō»[v»–źIČąGņõoz«}¦A=Äv’ĘóīSŽ0=ė^M2ĀĶ-£epœ Rģ;ō>‘*ĘmäŽdLĀ¹MN6øt³@7>0źhjČGjšĻm+@ćrsļW“ Hb&„qūŠß(µHµ£_ĮfČÄAČ$ójŅ“Äöŗ…ĶĢ4‹ū¬zäzŠ3Īõ{›{Ó0.¤©#꾕™£Į,Q³•łI4—© 'Ōo1i#ÉÉŪøäėZöŹ-ŻC°`?‹śŠ>Ną÷ÖšŻø8źĒ¦E> 外{HŲ3oõņö<·ĒZ4Ė«Bśl/4Nxē;VÆč­¢zLs³+ŽqAJ(½®hĀXć˜#Aa‚¶tKO¶f$+€ž@ŌlS×ÓVŗv±‘™”ˆķ[Óµy¦„ąń0Ģń"Ø'9ūĊ3Ąõ˜!š6¶u-Iõ •CˆÉŌgšėŽńV”©iRŚÜŪł [ĢäØÅ¤yg|;iāR é/™Õ{q“źµtÖ֟cšŌ}«2—ˆ‡N€nĶćcbĢŻE`»å@Øpwv÷¬¾/„–“«éöP‹łacBņē ›Ÿā­oSóbńĀć/sƒé]Ž•Ø}™äG¹†Uŗ@:§Œ¤»YÕaŽ5.NG„r2ŌÜO‚ŹKķĘq@šˆn­õė˜[D¹šØm„J‘×ń­«½ę8¦Ō “cr±īĮ7ćT¢ĶZ–ŖźŚ¬ćS™C–ŚIöµīžj²Ń"…cŠŚ#K!Ī'ÆÓ©ĒAkrū"Āņč-̹ͫbūǧōÆH²¹Ņ›Cŗ»ÖÆ ³˜Ž„}}ė0’čyÆÄMA¹½»·Ó¬õipDQæ[³jó-ūcS¾Ō/µ[Åk›‰FHųŽ,ōUØŽEcugd‘ŪČ"G2@ø;ńĒ5Ŗ€G>ĆĖ.Īnōäeė×:ŗxvāĖM™Ņą‚©(­Ca©_jF™k4’ Ȁ7ÉĶę9Ķ{QøÓ_Ī‚Ėķr·;±ŠŠŃnuŁĖu-œÖŃ*§Ų’­£+PŃ ¶ŗ·½ˆīÓīæ^~•ć_ü?ØŻ[ŚŽi’Źš€pĄŒ`óČ>Ų w0uK©,%æļ6įĖ®qė\iööķ£f0ϘųĖv D^ÕfM3Q’ī¼ę¼øGņ2kWÓgŽńu¢¶)G(›NŅ{‘Ö€+č·“Iqq GD‰€2uŻžÕnM6ėÄŹu‹§šÉth€ƒC@Xķüaw¤ßŪ«Äf²ÉČcĘßC]”ś5œZœš…¬#lƒ,Ą_ „mL¹­±5Ń·³¶ŽY 䓹ąZāeŌō›½J;pŃĖ ulĄ4Ä„cŠ­cŅ„W)nom4m| zē<1‚µļ“ŻJšÉ TF§/+œŠ>r‡ˆü ŗµž·¤3éW źnPrf#¹­ĶF4žÕZaž”OŹŻóA2—CĢ59.le23“““ĻR+”šĻü;ØJt[Ūׁ|£ę:~łfŹeöš·:‡•p³G"-­÷O®+¼“ńCYiūĒ$É 1§«Š~µc7cĒ|?ć k^+OųžĖc ™qŠzWŃžńŸ…üe{…”ņĮætd!nO@*9» TĻHŌźÖ“ŲrؐÉ-“Ū«{˜Žˆģ+ƒ¦}ėÄn Ō4ūŲžĢā%įå”gō4F]ĪiŹēÓ֗ŸlŠtż=¼µ8UR ÉĒ_ʽ«įφ¬ä·{}IŒ„!#-“qŌēé[)6|ƒćÆģżcć šŠPm6cłrcbOzōŸģ«·¶ŒŖl•OF["£u–ž½ńU·öœāHģ¬Ą–EŻ·üöÆ$ńĪæ„Ļ$Ŗ2Į,{t«GŻų7[mSŌķ,Æaˆ#l37Nvž¹ń4Śe•ō¤]œ.÷8'ÜÓ±£‘čŚ#ėqßIęj2żŸwšÆa×5Üė~‹T×öq–Ām•Į˰ä FNWgĻZ«.§Ŗ^G¦-ĢVńHcˤuęø=}nģ‰p-ĻŹĢxÉéQ4e3¼ūtVi%›˜įÜ»œŒ…Ærš·ˆüR¾“ŽÜH‘CŹ;€’?­`Յ}.c]YŽŽ»\˩̒«psĖŪé]gƒR’KÕāæ]T0…ƒĘ’.B‘ÜT)s„ńF©©j:°æŽĘ3hČCI>¤{תþÜĢџ3AŻió–§Üāµ RņŁ—#\"’23^eaytĶ$·ˆŲņž5.LŚNšŽō­'Äŗuœ³Ke§Ķ˜ßqc’]}-©æ‡u 2ĪKͬ‰™×ęfōć5œ›čj„s7Ÿ“­ßSӍæŚā’6‰ŃcĖ$żåĻ ×{¢x“ūcHÖӟģÆ1£wĻŻ#®jį&·éZ?Ž““ƒĆö1ŻKs夺g%e$ńś Āń#čÓukB[»‹łbxŅŻS![6ģÖŃbåGēV”ć}KGµ”ß¼·]Ā9ł²Xš>•ÅƌēÕn~×+Éö•Ą—ž)Ź=Éj'£ųkVŌ5§žÖāfo|Ģp1W.µ/ģ Ńo$шߒAż)%cfk:½Œ± āx©õ®Z+՗2$„ Ļpi‚e¬ƒ««ÜFļnøõÆ_†x¼Igrö_h‘m“ƒŽ³‘|¬ĒŃÅō·FĪHåŸfO™Ž?÷m.Ļģ:U“ó½ŗ¼ƒīÆlzŠtĒ(Ł5ū üMq ­ģe*RP Œpx®z/†ŗčķ£kŗ…Ö§HĮܶČ"ŗcK’<–_[ųbāH­ä–KBÜdć?į^µ„Śhš<Ų9LāA׏J‰¢ŗ"-OGIu®fø‘!˜vå@Ļa_9xÖBŗ•Åœn%……ēļT§b1ø“–7.į‚x®‡Ā:Tśķō°ŹBFė×ń¢ģ,{m‡‡ō?ŽCf Mع 0<ķłW¢iö61-䓿śV1W?…Šz1r\āu;Cv“馝å¼jXāū¬=ėĪ5}CŚ}üwzøY¾G ŒŸR)Ź’5TĻÓļZ‡@Õq:\ĀĆ$p[ ŒĪŗ?_ŖŪ®Ėu“b€1ņÓß5„£Ųø«;źŗ“ö™buóŸ,ć÷¬koĮe©&¤īMĀ]NI°¢05ŒŗečšÄ^(Ņćd€ĒŁ×wœ>f8žµ]<¦^Ėöœ×pYFŪČ·į›ŲūR’³$_ų·w=·€¬ōĻ éPĢ1c‡.Ń‚K~uóÆ†…Ę*ˆ…ĮŠg cs…śzŌ¤sŹWG“Ćā(¤Ņ$†Dó ī €¾Õå6Ž*ŃuQ,^xRbO@N쵫kŠ#„„’;·Bc٨Χ»dvwFÅ@|`g֓¦ C·ŠÆ, iDŽÄą7Pk®k‹ X¤šīHŲ‘ĘyĒ"¦1¶Ćr"Ō,’å"’Ņhī$Į-Ͷ21ĘNkĘüJ/$fƒJÖU)ö­ć±Ļ-Ļ1¾šÅŻįQ¹Y(ņ÷ÓŪō®ÓBŠįO łŠ.7rŲķļŠcO”é~ŽžŅådf–MƟŽ7oj÷ŸP…„˜NŪF8\ō Ś2¶ĒšėśGp÷e–fĖ#ŽŒ¹ĒōÅyņė6ÖĻ$7Œžr’3ÉęƒXŹāßxŹV[+q±ÉŚČQė^isåj!…J– ńŽ€nŋk­;HÄL¬œlÜ暎žĆQŚ&v’åĮįõ ČܳÕļ4čÖÖ6’荩ÅysY¶śü—Ž×°†¶åĻsš‰#>SƱ’ā+˜G'•œ‚y ³{āćc¶O,“øä灊#ćPG'w®AÆĻøG ‘Ė.yśW—x›Āū¼D³éMUŚéŽž¼}khÓ*1čjź2ŽĒkh—ŃEĢüĆŽ²”Մ±ˆ¢Cę«})FĄuvrE›Ķ:H&#”ļ]„¼D.¦m.źŁ|„$ šæćSp?~¾!xgDÓ¼«.˜¶śuäńoƒ ¹W<ätƒo¬lm¼=kw§j){vŅ‚én™s“ć'Ó5įE;ŸI÷>ÜšMŽ‹ńĒąŌ72_[ų³Jg·–Žaņp2 ūā¾°’‚C~Ņ׿æikσ~2sĆļķ¶\¶Ō†u)ąrxĶzøkģc*{£ś£×4KÆ ßN¦V’‰ ‘z:C ś7įŒ—ÄšcŚLŲ»‡åĮźĆÖŗlyõ"xĒķ3ą u­:ęžĀ8Ż&²{;“(ōpTä}0kų2ż¾’f kö`ųŁØü>Õ“‹„Ó.š[ż>łā;ŻŲœöcŒvÅiÅžwŚwŲŁį2yģ Ć0äūšē”Čņ,qFęQœ2jĪiG©žņ}œH‘‚²ēœŌŅǾA¶EŚ0~Q׊ '±ZSēø¤$ŖńėTÕA<ž¾”ÉŠ6AIUBĖŪµÆbŽ.#Šd؁łN7}iŌ`ų]ń+Äæž*|1ųŸį Aģ5ŻR‚āG øVf}ēÖæŅĖö`ų’„~Óß³ļĆļzDŸŚ1¦£pĶmp£iŽł~Ö¦{R’gw~'w2”a“ćšÆ ųį85;{’!$¹+\²Üęžēę÷Äß ŲĖfņź±QüéIŲv ,p8p­9MAp»C·½*:i—>ŻsIbv /ū5pؚĘāÜ( żŌą©õÖŖK±ŁŠž æą’¶¶›ć/čŸ |kpś‰¼9éč÷ L·ö¤įā(OQŲ×õ_ą­~ļQŠlļ¼Ć-Ɵˆ®HčŃ7Żcł’*Ā¢5‹±źw2M K43VŌŽćҳ¼aąß|kųić?…ž.….<=­ŲKoó eŪĆCĘ~ WŠ3üę’oŲėÅæ²ßĘ/GŖŽxļ剮"É Į$ūā¾TšTw­t'¶³&ĘšĒ•…fćĢc±ė·ŗ×ˆ¼3wśzŹš¾|ČÖO¼ńŽõÅųŸPQ±¶Ō#-öÉ[÷±Č0Ńž=ė(Ó%k©ĀÉl$ŠH÷0ƒœU_ßA,€E)Ž­ŽÕčӑĻ(Ÿ§µ‡hķ Ž[uėDģ#Ś4kKŗŃĶž«%·™n»-Į°'‘ŸÄŌŠ2}Ŗ6Ut¶QŒƒ÷…hŒēsNWKm÷,@Pxē„W¼ÕfŌmP[Ź6Ō 9ó4ŗV­gp¬^!Į]O®:Ģų‡ą8īm[ÄVwöØda¶’7>“Ķ#ĆIŖéša†āöK”FĪšƒŚ· ¶KõøĒ²včÄuŖqģ7$\Ó­”³… Ļ÷€=}k±Yæq4qō5 ŗ‚ųv“™ä—U†²+¹œą×/ØxöŚĘ6×?Ž^Pg#4ÄĒÕ-mfšŁŁŁIä_#&ńČ’ź|=c<–šż¾ąÉ(8%ĻS]1‰š—C™ńEØUkyWżI%XdŌ:SiZUƒyqĒmÜ ĒéS3H“mé׌mĶÄ³#Oƒ„'k.+ĢÆg+ؖQ·ž3ǹ¬e!µq·V~«hķ$’¦¦’>ī9ĪJѲY4ŲcęlcƒÉ©ēbŒ 9üIz!K&¢x‚z×q«ļ»VF Į†yėSsGmŽäÉgu§5»47ąŁä{R›_2¶ó°øĒ&“‚ŠĘ”V/ Lķ3‹ˆ·`Æ`+ žÅ»¼’Ž4žŚ.pO®ÅĀE]GĀŠč3,¦ŪČ3žõ0īGėN’ŹÖ÷MIvØ+‘“üė9-N„yĢŚw—ĀܱHŸå;G5Üų7įä3ź 4‘#ģ|.ńžŻØŗ@}7„4{W†(£¹N$#>Õć^?“DžŻöʐFul•5ž”cH×$‰ćK¹–uCµ3żŚŻŌ“=*āõHÖ0›¾~ć5š–¶.—Šž" Cö¬ĶvKxdū$”DdĖĮŖ‰'—ė·^F£e–Ę[„ĮłzƒIÆA­Ž[ĆmŖM G#€O½QQ‰.‰į„ø‘V?g'hÜ)ŗ­Æö%äÖĀ=ų|) Ņ4JČĪŗŸĶ—Ģ!Š‘€=éŸkø·‹ģįØäątü(°„>Ē@#x-ŅpY”ūt­i'#NņęfśšŚ1īdŹÖ7i„ļHćßæŽy­ˆg²œ–5Žł=MbźMc”,¢qe>āLņ v¾Ņ/­zk…_½ÓœV#4ōŸßi÷éZtLĢĻ;G#4šīøāłWiū9±Žōƒ­ź°Kj#V+}…y¦¶ŽU™–H^0_”dT=Ąä?“@ŃF„Ų‘óā­Ųź ÜE ⇇8Ąā”Eģlž†Ūi.·°\é3DŠČ71\‚¤ö5ŚĒ}5µ±±œ|Š0@뺚L9‘‰ØŽ}²ÖāÖéŸ`‡®k‹“·kęKh–ČõŖQīĖc±įį¼²’Y'1L£ī0ĪMtŗƒ‘ q²2ąīfĻ,jģQµā8§æ“€ĮäBˆFģņY{÷ėX3ėŠiLÉcš0pyÜq@XĻšĪ³­j_jš­«YŲ¶wž¾+n=nĖQ'ODX_Վ8õ¬¤ŗ‹•o¬»„żż“Kˆ²~ķ±Ś²ģīē‰ö³rō„c7£Yvę!¼“šÆ&«Üꑨ!޶µ‹«£Ś< Ė#r°ö®‡CšĆ†Ą;Šąō2EF]QšĆZéĖ&ž-cqżžÄŅėŽžÓI+tKh‡™ĒjŹę‡ź–ėm#ZE!v| ē”Õæ¢Iq„N/ ‘@‰Aē©  ÷śźĻswrL1+ēhźö©54åÓ ‚ĪGŗČ XŒ`Š"–ŁPŹ äŒb˜ÖlfšMČĆ!}!•ž).3ńŽŻ@ŖņĮ@@Qqœ ĻøyA‚'/ UڜŸ”g§ėP\K“±¶ČźÄy5¤1>ŃęHåPņąu½p¦ÖÕWclcĒūU Ó,lõ+@×Qī‘eįHūøØo¤ž7?b“›Ź *¼S$K¢ÉwdcœīZŽń/ōæ,Lm„Ł“0Żī+8]>(4ę‚Ķę±äąēŽ“ć„NÓIę":ńƒĶ0gā{Øl,„q6W$‡•ę¹ĶSTŌ­,té¤2Ån Ä»@#<œŠĀĒ]”ŁĪlķ¼ó–Ąė[2ŚŪMu” Ąqž¤Š'½šÖ„u¦Ė “ņz²žā»ėŸčĶ&m} ļ;Š˜W¹Ķųū2k$ø„PŲĮėŠć,n¬TL&E jYˆ­RŁĻź¶Ś~Ƨ_ź6ŅĘĖ[ÖEžzƒųÖnƒ©ė'Ņ!“Õ¤ūJ[ĒåF3œ&xćńؾ–„ķ'HŽŚł„e¶cąūWCmm \(p‘äōØg¤XA-²"ĀŹčFõ5ęŗž‘Øk+’F‘_K‰pńĘß)'¶?*/ŠŅ ©Śiöɦ[ŹŖDxچ®L7Å•Y!'wzMš„k:réR™šŽ (×Ė™w€v‘Œžkē}_Įh>*Ž6CŸęµŠŠ|ˆÄ°ń=ōJ³nĆ ˜ņj֒dšé/.§/ ä'½9F汣Ūų¦J{“(€Įéś¾—o·Ō,nm®U€8…³³ŲūÖN&r‰ŹŚ8]¼’<_l1ę£Öµ1,[~2H¤‰jĒ=¦Ž‡jB‘ƒŌu"ÆŪZĆx’c ŽŁ BĖ„”Kz³@Vå1Кķō\źZ~ī$ +7*i£ŗmBŻšHüµĄĪ@ŖVzü·öŅ“E–!žŒ˜ŗ•¾›{4 $q„ŹåT“×=s^ć+Kvń ģŹ“BŽ#R£®?ʁśf”u„X-»4Giʶ:{VśųåÆ%‚;õ,q±łĪļzĖŠŸÅ.Ą ō4eWC·¹±·T+ Ą|ķžµ¢éĻ,Ņ|2#mwÖŃĻŪµ(µ2[>0Ą>F_Üʳ5+ŪY,d}Ą®xĪ)‰Äė<Ø[[ŲŚN,ˆrŪ·:ņŅŗ’ųź÷@šĪ¦|9oējˆ ó¶Üƒ»ß„;÷.1>h×~ xŖėMÓ“‹ĶQ.#‰634`<žšē­ix+Äž'ŃRöźwg“š3Ņü⯔·m·ŽļēY,IFC܎EcéöŃĮ=õóÜH^S’¹ąVfdRł—Ń)*[nG­Č“.øxbu@°zSåbņ&ŠĪŸzš•ÕŁ{wæv1÷Ąļ\gˆµĖMM&K“Ė¶8Ķ>F#.ĒL×åūķØhSp,6ä0ļō®øéz£j‘‡qäžĶM†CÆx~źÓĢ’Ńē@Ģ:ā§Ń,n4ˆ„·JĮš>éĪM =Ü\ıB€ŗ€3Ó‹u§”†Y\;Joå@¼zP·™eydi3æžÕwS·1[ż„“ģū€ÅgźWĻeޟa*Ü@[j¹G­yųŃ.ī6²KøēpüiŲi¶“ĢU’t ¼mĻ,k~&µ°{bŪÕŪžGCž„ij¶R[¤¶‘¤†ę9č=E>×e͜pDv1łsœ~tÉ2¤,µŃīžĪņY‚FvmPNOµzÅåü3Yۘdu Łōc”–Ę7ø{żŠ³D2<Ÿ„p~"»’Kgū+Ƙ†­9TŌ-õ½:Yǟ§“Š’/O(wožµ}+ńƖ~^‘7†[ūDy¾VRzą{PTw9„Ņ.b+å.įεeźv©,f(ä_µr¼ÓĢš?­X›\ŗ‰#‰@IŚ«>Óõk½R)÷2 §åoā÷ v:MCD†Īxä™Ė)?2ēŒÕhÆ”¶‘‹Ēū‘ŠP5Ųī¢ŃĢÖÉ©,{m˜įO§µyŸ/īō»“g§:2ģĪāzt¦kc“Õ§eeĢ¹b}}kŁt½:GH1;½¾  ¶üįH§×ŠAc”[ æ“C·Čų‡5›¬i[nį1īł\ėšiź–“›.ęFąž“Ė8ļ-Ō‘łq¦ļŽŌóŠŻ»Ž $Y`ž33ø½bÅ ßJŚ…¬7QO}o!@pré@%Šł:‡÷+ż§u|ļö©g’S½·cę< ڳ‡ū& ’,.T+>;Pn£m;Öģõ5ž >ÜA'ö«6ž,Ņ-ąŠ+ĖęKÆ0ĘPŽł ™#¾±k]Y.-ŚébEŒ¶ģœm÷Ƽ¶šž}ö{`³$“ķ?y»‘śŅFg]§G„. š–,w¹Ž8>µS]ń'‡|#{ooo$~#Ė–ž4$\9ļŪ’ÆL,yZĻyā Ė˘,~Ļmē‘x_Zé­tŻ`Mn H!'ļ‰3ŹÓ°4{/‡4¹-!Üc™žķk~źÉīķy#ŒzP™ŽxT__ŻßI· +¢³¤»Ńō-7Sūq† B‡%x Ÿ’]8E±šœ_eÕ¬] Ź£³’kā,·/£ŲŪŲĮ6”q4Ž[Ɗp£š@qv~Ō#¶rŚ‘Łp„ˆŻƒ]/ŲmōĶY-I™0ŠNG»ćń M›ÓK„ꑬw(ö!76ä’XO§¦+’Õüy}„ŚYCaec0™öüģ(2å:Hµk[‡6ĀåĻœgŽ»ęŅlVŚŻō{‘&čń6xŚŲägŅ€ågŸjvQJÅ&™cuoĪ’×Äŗ–‡e%œ­=¾ ˜÷į[4›”ĖŻźMs™$b9›8M٬mÄśv™ éö·±Ū%ćČXF[ęŪŽp}:Š\Ož|WńMgՎ‰įUAĢÜüł(ēZƒE–×S²Ō^ż–±ȤnļÅMāoE§½ŒŚ,iäŗI8ĄõŅŗŸ ėrxēĆś¾‹-³Śj*<Ć6NB€~U=čµĶ†§5®•”éŗTĶrĻŗā`$É8éĘkŌ“įµ,ĢĖ '“ļŽ“&z5²Ų°RFéŪ5Æ{ue£Ś¼šÄÉgj#2&S%Ēū#½dļsĖ>%kŚ,šo¦j ›‚9 øaӂ=ėęöń-ÄŚžŸ¦XYĖ~Ō±G×׊Ńy“ĖÜś/_ń„čŠK§ZHn0Æ·Ģ[Ńkžƒ\ƒHŪØ;­„Ł!Hž%ĻNcåč[ÓüEŖµü·HLQ’Ä|ĀŗŸK¶Žś[|Ą6œTM…%Õõ»[»(ć·ß-ĖŠą<1įŁgÖ ŽfY9ä’yŹLöūZĆcq5“} &łJŸ¼s{¢× NÉm“īŪødv"‘jekOƒvźĆQ“æø¼ÓŠ;üĮĻ 'šō’ė1ųoÄ:EŖ§™s,øĄ8Ę„}„“ų ĄMāų²ŅĪėW¼Q°‡+ļŒęæ>ž#|\ńOÄ_źZž‹ś5›ŹĖJņ ągŪF=JB}^č¬WŗāŪĆ“ü­ĆžłÆbŠ.t»}>ßKÓĄŌ®fg$čs÷ZF§%ćæÜiZ}å­¤’Y\2Ūx+Ž˜Æœm$RO"K)rĶžĒ=<šö]{\Ņ“o_Ļt¶é?”6\0™źMo\»wą‹1ų‡LŌ“«™ŅQŠ[¹ąMĻ_Ēž¾•Ąü@𧇭bƒÄ¶÷i«ėaÖ3o»ŗ źjĄģōŸƧ i¤··ŽW$Ę=FyüėµūCZaԜ ķAƒgćĖŲe±†āmEęæ‘ųˆ ’ļłU‚šéo‹c’öŹŠ[Ż%Ü£†é»Ś'ŲėüCą ×ߣ—— l×FY ¶CEōW®ī·šĒŁ-”T61øŽ¹¦ĆāŌµ_²Ä ’Ģ”C 'uzž›öŪ:ŪĶ-ä.¹ć‰Œu>nńĒtŻ xģ¼/_ź/¾K— *FsŠ{×IąOk~?𓺦Øl ÓcŻ#€UĄļß҃Od7ž«&µšĀāź-ß,ĆĘp*¦©®ųkĆÖŚ‡ƒ„«„/µ_Ó§jŹHR¤rc^·»Ļo!¶Ēœ ŁŅ5hn¼»deŠį›¹å…sŹ63ä;ł$ø·²%܍¹ĒEŗł!Ļ@Ia«‚¼½Öo!Yģ¾Š±¦ž#ļZņšÅ“ZēŒīf†ŅšiB³9;—žkÓĻĆ(īV?³=ķ܄7˜§q,})ņ¢„dyŒt9<9¬¾•w°*¶Ķ²Aė±iś>į i,¬ć“^šDPŻ>\u’>•‰ʝ†n·–÷w#˜&ķĒ§RÖüFš$¦Ö7ßęŒČY3Ęzڳ.2č͟ ėŚsÄ걏cĘ@*Ųā¼ēā-Ģ7óŪĒkSFƒę|ņM2łĻųbµ6ó¶ē¤õǵz¶Ŗ`¹Ń®®īÓ %Ā’p"\Ļ“u‰ŃćuŒ‰UŽćŅ®xCĮėā;ų¢šT“„:™XņYs’Ö 9Ńö&‹ewm‹fÄ*6p8`*ŻÖ±o„ĘÆØČØĶŹ[8ÅD¢D„©ÄŽxÆÆ ¶ó¬±µT»ėQĮi ÷Bö/pmū1æ…D^¤Ü³ā똢Ņg“KxZńcfņĀćnOzųŽrQāµ;³ūܜFƒh_¶ˆł\ҵ_ķ»¢ĖČߍ„OCō®’ć@¼“’+–ƒĖŒÆŽ?Ä=©j=FŚq:0–¹Ī~e5-ÅõᲘ³n\»=*l fƒxn-®#EšfYŽs·øx®ŪM·³ˆZČ×É““É”+ģūœ•†µw¬™<ó¼ ÜXż+×ōeŅWM†e ׌Nö®:qŪ½UŒ3jÓÅZ.›unŽš^M!+“ōĻ”­Ėæ‰ö¶0ŗÄ$Śė„)ē©«Œ;ŽŁĄŪų»ÄŗÄŸiHÓOUÄ$·$dšā5•d¾ž-$3:šr‰ŗ,BöóoŚcņā møłioāÓĮ“žĪ¹¶uÜcm¤ī'ŌÖC”J—ś}³ļyøo”ćõ®¶ŻnfҐHĀW$|µŸ“09Yõ+ėŲµ‘’¼|Ø9ü:VœZ½“ŅDŅ8˜‚yę„ČV-ź×²é1Óż![äĀž§5™k£]ź×2ż¶Ża¶D»$ķ­k†Ģ«­kÓm¦ĘJ³`6:Œõ­šóé×-q4ÅŲ6ĀCdķ[Åč+ŽÕ,lå†į¦¹¶ņöƒó}ī+…’;]óZ:3˜«&2k)Čh‚šįšK»°bwĀ©ągŠ ō[mYĮmŖ0ū4¼°3†cJĖFļ×Äķ}CĆw1ŲĻ$7iÆ$qé_ ŁEy„kšé÷ĀX,DW*0Y™ńĒę+–i]ŸFŖ$ÆüØŻ~Īt­+]Ó’¶|«˜äxŒŸ0,8sś~U”ńūĮŗÆ‡¼NŸ¼p°jsŻCØčŹ ‘¶ņ¹1Šß 4¬ŃZ–gö;ū žŠšķqūxāC‹{i¶Ég«ŪɊUXzć8#Ł{ßÜųg^I€‰¢fPyĄ®©«3ަ¬śļRŽÓÅ=ĆA ŗ·tĮ8ūµųÓ’‹żŒSö‚ż‘ĻÄh±_|Mš8ye!{=ŽõćØēūRÆŠį©ųVńŽŽl.žŃM"æ–r6•8Ī?•ę×Vļ•PYe\“Öē$÷*żŽyU˜$jĄz’*¬.™]‰lńĪ1AĶ)wņŅĖ>¢œŃüÅ€Ų¤t@”!ĀE¶dd ʤ}k]/Žį.݇øØ;)³V&µ¾Ż ń@ä)WÜWōć’ņžŚń|=ų£āŁ'Åŗ®³ą=|‰ōiÆ÷v·~hÕ‰ļu5Šź‹gö+¬h‰o$ÖęDvN2¼†å^;®iĶ́eŽÜ”®yG”‰ńOƟ‡¬4ė½XB%‡p†e\`Ēłó_ŸµgĮk/‰ß 5ķM>ŚīīgņŲrPr'Š’ž(Ž„ŹĒ‰“MWĆ^(ń/‡µ;i£¾µ¹e‡X»`÷f¹xr»ć±+Ŗ2±”Ń+I»ÓŗšØG˜ģMƤYåF9­ŒKD3R‘ “œš‹ĶB<³óćŠu‰šĮ.˜=©°”Q,‰÷sϽB‰ŃM–ZH„möͽqŒµ$ ·9T^ū»VĒL]lųńƒQų#ńSĀ>1ÓŚįą{Ÿ³Ż*µb8ē=ϵ Wģyń:xš„ÕĶĀCsižķ d¼¶uO|c€¬ź#¢'čĢ2ˆiĮRVOšVČtõÓ“kęĖe;”·”ž^tÖ¦®7?’ࢱfńŪąēō'Oø·Ó+XĖ”,…c[‹°ØŹmÉēŽjÖ«ZOo¼ˆIŅ¬Ļ—S°’(®¶äŽqČ'šō? 4PjeīŌ8čžļցĮō:]XŽ[[G·ūD@äšńćlbßpŒ]•·œSh“:UKØĖyÉ÷śVMÄMąøĖ»“ķHĢåµV‰®ŚU̇9­-2 kĄyĪy  Ö~Y­Æ„-;Ćæ{Ÿ”“ėۚźäń*%µ¬Ēņ)Jä’}M_7@ž#Ūk=“ėŠü}jčw¶Ń ˆ’ČķZŅ.ęsS_U×¼?‚5’‘×<äŠĀ½¾k˜c“ŠKčQ[ؐŃĶI=Ā) æ+¾=°+SĆŗÜćSŽ&“P°ź ķUc'±Ū^^Euu-Ź@ MßwTUńµ‘ŚąG,Ž½ė8ù_g„?‰4ėŪ†;š©ÜŸjņū†~JK!Žą2É»¦\Õr#¦!}ågŽ9­ħ–õ®ŸHÕ%³žÓģąšģ1P ē*FÖ²q±æ1Ą’aź‡ÅĻ X‚UĒ”äņoÜKėMe<†Y£ ŗqBDJG™ŽJÖķ-žš@sł×Mc`éh’oŻ1Jq‰Ļ)3NŠ×!¹tó 6}kÕōūKX51<Š£Ż4cfOŻ„l‘ Œń­-µŠæˆ‡tl7}ßZćdńō÷K4„ŃwnR¤€? ¾a\ÜŌo$Õģ%ĢūŌ9¬øQ®BĆp j§ƒėRŁ“v'±³ ß91ī=OAS_hļsnf³Q$Ŗ6žp+īo”ĪG„j0Ź›ćmį¾īzŠķu+7ŃtŸķ+ˆ%yOÜP3ÅAF°Kā=)nć¶.b`‹‚ĆŌבܣÉńŽ•ęf<1ąJŅ1ībÓ=kĆŽ¹ŠŚ®›Čqņø<ń]•ÄšF“%½Ö’“Č„‘…5dJ čné³ŚŻ(€}ž Ēä;Bū“XžńV ŅxƒGŗŽŚöT“ū1„ĪG>½hæB¢ŽÓÅqGŖiĢwĘš&Õ xĮĪkÄ-&Ō£µ›PkgOšŠī‚A’ėS4S-[²OÄ-ø±ŹóҽEø‚ĪĘvfXn£]ä÷ˆō¬ä…ĪsŽ#ųœĀÓżµŌøFx)ß½yV¼°jŒzä3I=Ū@Ō śŒtėXŹ75Lęa¼¹·,ņLä>p{J÷“ŻGWšIĆ÷*—²ņ¼ddvØPfWC¶ń ­ÜkSKo†o ŽõsĚŪ®-'±žFÜĆĶR:óŠŅ1°„¹.ƒąÉ­ļõȆå·v<ā·üen„¼…d*w ŽGE(ŲņWQ{;TšĪģă#ĄÕKKū]&R›Ł°U”÷„rŒtāĆ<s]ŒžzĮ˜Ē›Ÿóš „cŅ`°ól£Y”łIÜ+Y6$µ“D„1†ę­HƒŸxŠ@J+_āō¬;‹č׿=‘ŚźżŚćļdb‡Ø„„jŚv›£ÜźL%k†Į`£!|ū×QąĒÆ%Ł‚Ó(Ī"Ż‚@<ąŌ”¢rŚˆLzŪĻ ‰}Ļ­s·^#ŸX“@QpŁČ‘õ¤§Eo¦ŪI¤Dd“÷ž™ļSyö/£Ķ¦Žłm¹vÆćA¤ccƒ}"ĘĪÅc²·M±ńóŸĘøĖūyc‘ F@fć” «Æ™§YG»ę—Ž€«e®“mx×øuĆ#0 żiŲĮ£ž+ˆī.dK4¼t(æŅ½;K²³“ŪŖ»ŹßŅ­S&żDŅ|F’»Å&š±[•ĘęéĶkź §¬V’GäīuķŌŌ4R9’Koc„‰ē9^|vƞ.µ)Žōß0‚sž¦„³XÅą£i¬[+„Į¦«źž ŗŠ®&”9ó00>źž‚³r(ąotŪ‰¤ø’ģā@~N1€*žn„ݧ+“p3Ž„(š×²XĮ”…U¾O›ļW-hŪncš5)xŻŚ·1=ŚEcū·C0ł³œā¶ģõ+Ø”b•Īxą t:L·ōo¶Ü¶ÓĻR:ā»kWZv™ŚäĖū²Mdąi<ßjf+¹e ęĖŽ„Ó„ń„­¼ńµ¾VŻØ,MÖb•Æbž&vuĀ88ļ’ė®’ŪW·µÓå–RĀ9=(YŻŚĆ{hRD`N@Čł¬Ī«~LĻ†ĻŻķNĄeĶgy”Ūŗß9Ć(''€ō ø«wcii§}ŖųJ'X‹^˜Æ5“ńMŠE5½č– ±øĶ9[Ån÷QŲžSµŹ%ŚKvwF¾sņI±%ŒÆ¢†ryĘ;W=&…vøšČ Wō&€f®sŖx^Ęy5$I啈UNž•ÕAś¤1ÜČ<¶ūĄŠŽšg %«ŁÉ„Ļė?JšüśyiŹņ“ķļAgUęÜÅbU_އYseq¼N;b€0o5·»°Ėæ$`Šķüq„[i³Ū޹I—.{œwüqA+rCY7—Į!YŽIÆ4Ņ“‹?^£Ću'”ŒC*ž3čh-3ÕmµųSH½•Ų½Õ‘|Ø,ŌČĒ£±‡„x’Šoļoīą>kZŹĮ¶ƒéAM™¤Y\Å4’Ų«¶Ü«į5æc§Ē6›"JĀNĒåŠŅĪSīq·Ö6Š_I§!-(Q Ļq’ė«ėqʃvģŽyļI[©Š×šŻØŽ{©ć’&R»p‡ūĀÆYĖ ś‹éJL»øaŠsUĶfEĶÖŃašńićeLĮĘF+ǼC*@ė5½šņJ®>ōłŃ¢Ÿs²šżćÉcl÷GŽ85ŠĻ2<āMŒŖĆŒ’JČ„"½„ō0N±Ź<×Ī@ėšŪŌµø5++H„¾`VP0tż) é/43Jš¶£2\…ælHH$LĆņÆ>æÖ”e™`%”cn9r=Øž#Óü›Ÿ vń`vŒy¤zŲ{P Ģæŗ½_2ņI£ĻńuĒC$7Ó_[„~™ GāImīn%/‹€Ū·zö­Ÿˆµ =@…Tū0rybN?ʀ%Öu+M: ÄŌai×8lŽõĆh-÷Æ“y‘‚wäõö øĘēYmąųu–ø‚üĒęé[«za’7/Źpy4r£Snēß,Œ…G˚ąu ·{±§ÄK¹p88Ųō¹u+ķ;FtŒ; PJ“ŅøV{/ĄĘd“ąēŠ ¾†Ž“į[ˆfŽįķK(9SŲW¢ĒsĻ!‘]¤wņ°<8ŗ×‰lā¹ķå‰ZM»ryn)¤;Xģ&Š ōW:rFŃ]£m.Ć+S\¼ž{ Ł–śKgˆ »ŠpET s=Āŗ „“r$kŹĖ†8tW]qį[¹®¬ÖŌ,Q¬É¼ŽNÜņ)6MĪ»Rš­ā½ĖXø1Ū1ó2GŹZå”·‹P™­ā¹Š6Č%Ž@Ē\ŸlT…Ī2ĒĒžÖucDŽīyÆ —ɍ•0’ć‚r~•ĻxßĀ6ŗ¼–ѐ¬¤6t>ō?³šµ½¾Ž#՚9mĆżŪchČķ[Ń>™oo$#nį¢,÷ż(%”÷w—[½¬±(ł®6Øė\eĀĒ«L²—…š<®įŪüóAŸ++k:UĻöh»eøb!>U,qß®j/[]Nƒa(OĻĒ Pkc?UšŠ®”%īœļµ[˜‘•śtÆHš¼Zž—gsīŽS!‘wŽhsŚö£Ä"Ä[Å%É`ĮńĻҹŶ”ه-Ōg8¦ŒeŲWšō֖OÆA{FŠKÅ!ł²1ÓŚ¼\Šo¼]§V%’IcmČ2;@5Æ2Ž{Ą¾ø·øŸ[½±•ąiKać択UÓų² *$¹K8L6’ 1Ė'ēŠÉš»ō<ÅŚhדĶ#LŃķYž›ĮāL±ž†®ų3U’„NėJ¶K{y<ŽMÕ¹Œ«$= gÓü)ŪgŗÆ‰ģō=Bź=2ź(%• š@eBzdó\Āź±¾¤mĮŽ‡Ø –™Łx3ģļ­jŃ^\²„·Y BFY·ž‚¹ž%Ń#_ ŗ\±¹cT1Ŗ€ō9'5.:ÜÖĒ `½ˆĪ`Ŗƒ™=k¬š6‹eØj0AŁmŪ﷚i ć­éš!žĘF³³µ[t #“‘3düĒ?Zånü;£Ļ©ęXmŽģ9 “ŒõĒs'HÕü!”x–öė;Ė¶Ē“åŲē’…XńDś^µe0µiķÓhņAēŽ“‰Vźyķ–‹¦ŲŲܵ³ÄĀ2 ofĘϽńĆńÉ”ā;›'Š/3k:c–9┣ ¤ģx]¤ś­­ÜqZ¤‹lĆvā½BÓÅsŁ [»¹"P®}ļƲ3ēgRŗÜŚŻÕ±ņ#·“Ż”(Ē9>µŃųĀmCQŠdŅ ·Šv*£i\ł‡Ņ® PR{憾ė–Ÿ2Ą#°–/"§;ź?Zåo¼ØčåŒŅ¬ĮČ-–cyö­BRč{w…›^ՃK©Y¬ABÄŹyr+Õæį°]Y\M©ķ-ŠlUÆ®hfN]œ¤Ōt­OYmźe•ŅP²8ŚsڽšĖĀG‡“Ö–Śż.䯕””ē¶O=č+WĒZ:‹:Yp›GĖøC޼ėÄ÷Š^ŚŻŸęłU'Ś‚‰<7į8„6“!kx”¾ß*ąw§üAų™©č~šu”3,Ršgq깠ڜO”ąæŸVŗó]„žkøxž•ļ’ ¼1ā[­WķSŻ[X˜ 1ä…ś~T3£‘zUÕÖÆ­É¢ItˆĶę”8Qœšā|Kį:ēY¾×*Ļ÷#;qéųÖr¶ĘrZœ¶ŗóéę 8”[ČT ͜Vē‚®­luÕ5d•&5Lą =Įõ¬¤®a%©ŃźŸSY¼³Š¬,­į±ļ6ēź{Ö¤VqL—),‰Ŗ9 qšĖ—””ćsžŗŗ²ŒžāB‡8fŌž!Ö~ÉᲐ7rÜm#†„Õr³gįŻgT“R“²#I'<®0ńƱž|ń.¹§ĻŖĶd’ •¼ė€@Ž5ź>nų„F6<ÄѼ>0Ō4Ķ=R[H_Ėū@#l˜ō­]S½ŗŽ)ć‚{N^ķRmĻÜīõų†āЦŸe)ˆ!Œ\gŠłĘw§öšÓ&ŽoÜąƃõ5~Ģ®tgÜi——Ļ“·>tl;¾œ×Ó>Ōķt/ :f“žŃb˜˜ŒvüE.V†™våßR‰žīuŚrķ€Tv®BöėB]Qµ(­#:r0VłĄĒ&Ŗ3(ąuų~[ę—C’)ą,pvć?žŖ³blęø†å “¹ńŽj„1£¤iö·ŚŽ™;Ė:K”Č/ĆöĮ}©ųIT|AØY±+I »øźG@)*ĻSÉõ›m'OŽ;HDÅI+?‘Ķ|ń«ĖŖźSĆM&ĶĶAķ[)‘ķčŸą·“ƒZ½¾¾{ićE1&2ÓqjīōˈoāāWx¶»ƒŲēČ©–ęz§‹t;{ĀnŁ‹;6B“޲ō£“żÉ„lG ĒzjlžgŠ_ŲKjmfØ­óp¼ŠŃųćkķ9¦™„ņA¹?y·Œž8­"ī;\ąüWš÷Ä3ŗø×5­FŚ ß=RŪĒlzWŖiw‡t’%¼ś­µę“%É‘võ#µ2¹HµŻ"Š Į†I Ęs^­ł©k‡_(7ßķŸzŹQģG3¹¦»Ü]+4‹Ęć­u÷WMtב•bĒqqJʉža$Z”wń‹Gh~ÕnßZśvÜŪßx"ś;Ė‘5ĢQ…o›™sč=©_ Ļ–>ĢZéįGżŅ±ÕźŽÓ^Ęwži®ߔc’sėųŅōn›ā[xķE»Ÿ/?¼mƒ&¹Bń.ØmgŅ®å“SømQ†ā™œ Ļ+ńæ'…‘¬,“ąŪ JżĪ}kŽ-Ōļ‰Ž)9<óž*£H•Ö·:äóĖīép2ĖŖ—ßme‘eūYŠsó`ŽI=…?fk_[yü(‘ÉĶ$čŽAÆGšē‹­|HnmÆŠ­Ä0/•°`n'ųæ Öeu½jĘÖ°ŚBžc 4¬Ąąū q^myguyjĀ!3BHV#ÄTņėr”¹ŅųOūQ/ŅWš†lōĒ9ĘZ;ŽH°Ī™ y‹…āØŻvgœEgœHwøÉ ńr=‚­Ģ’$7hå2qĪHõęæŖYtŸģ­Fąe\ŒW£©VüvϹ5"}{ū>x¦ßQŃ5O½˜–é¤W<īR;ż?Ę“øÆŹ’‰>“ҵŻJŃģeŗ“ŽcorØyxČ䌟CYs-Œ,4æšPoŁéü)ćČųSįwu¹ÓĘ~œXIęŗ³vą÷{ēXNWLčQ?©…ŗÄš§‡nb³¹ŽīļG`ŹDĢö®FÖ d~~Õé­p²$Ƴ¾`ĒoZąŖŁ¼|σæoO >|ŌõżsU½ÓTü§×5»O©ŗA=¤:\WVĀ9®^"$( }n;×-›Ļ ø²„?÷€ķYĘveĘ71µŸjŗ}·ˆ BRe#'`f8Ļzżų)ćØ|WįäT2<ÖŲŽPNŽŻ³õ®ŹuŠĪQč{֍䭡$‚åøō­k©bó[xRłėžµ±Ė8ŒŠįcó Ø“Ø-Ó5‡ØĪ‘B“C0‘²ACœŠŅ*ęm šģĪ×lóFł9ė]¾«©ĄšĆˆĄ”•ž5„Œ§¹ēƬīŲ)n£­t–w§äHż:ō­cѝŹZŌWÉs ĄVHАI8Åbi÷„%ķ¢įńĻZRZŒŻšģ0ʗ“Né •ßŌÕ _PdŚAŹcƒ½ĶGRe°¦Ž ‚ˆ pFsŽ•bĢ›GŲ:c޵ihgĢĶų%E2NG!Oū×)$ir"ˆĢKBˆłŁ…ws*JšÜ³ ó•2jWQ!ņÜČæ\qW”£g;,·mt„Ęń19S‚N}+Ų|&÷wv«”FäNp3Ō×I„ŸSo\“““±{ˆē‚ć»AäW-įIīõK…†&ņv‚Ē3žķqg¦[hŃōšķ‡PxB=Gå^7Ø_=–²`ŗ[ķ _§åY©G¹|5ń›ØizÕµÄ‹©[Ć)…aߓ]!Ō#‡G–kćߟ•öżŅ}½)ūCodö8‹ę{›MÄ(yćҹ]?Fūšø¹¾Ä c§J[čTž×Ó®µŅ7ł•ŹĒŽ­Öšģ^|R(‚VĆoXŅäcē‰ę:Ē" ˜L…ņÆ=x­Č§‹KŅ.nK+ĘØ[%sĘ(åh‡$ō<ÓMŌ¼ĖĻ2r© Æ 4øcŌŃeŒBņģ½±MHČŹ¼ŠZ.ķågIó“øš qóŲ$6„w™.UĪOEÅh,fSt±øą=jmGĻ“¹t(ū¾ö;J^Fčœį¬LĪÅØPÜꙤjÓÄ|Œ‚ĢyĶeČĶ¢ō=ĖMŽy–žHņBį€=Miźzµ½½—‘}ų•HU#9£”³—šv«i&”yg øņZ2 `ćrõśö®ÄŽ’ŪQ–ę&–ß¼ŻzUr±¶7“Żmµy”ĒĶž§ćXĪ„Œa%vV\21RéĶR‰4’[…Ó-įøŽHH]Ž§Ü՟ė–:,ā9‘ål‘¼Ÿ½Z:‰A›¾*ńŒZ“ZŲĢ¦łK»£÷Ķ]Óõ++ŻćC`Ų˼(Q׌©±ņœÕŽ˜4ͮѕŚÅ†ī9­Ō2.µČ$ūńX\qSĒŅ;Ū‹ėˆ¦PŃēwŹzs]ꇦ¤ó Y70łpy‘iŸ~ńź*šČĢ \}ā($¼EóäSņ <šLqŗzŒ25¶ˆu‰#Ć éŽœwÆ ń7‰ęÕļ&øˆœ0ĄŸ…G+=ĒĄ>YŠõ[WO6C!>^›ē^9~°[]46.؅š€‚*Ņ3”»•¤¹žČŃżŽ¼fµ“t® ,«ą[µ1_”ōTSéŃZĆ$ĢŃT/?Ö¼GĘZ­®ŸŖākvRÄŅ‚¬kh7¶š¦Œņ\LKŒˆńŌśV%åˆLŪ?wśŠ8Ęꖑ *Mi5Ā[$Ć X’bŁźZ—ƒīf»Ņ Ü]Få—o½Ø6JĒ¢x‚äj~“~āŚFź/2tPܞžĘ¼žX›OxF<¾ź}k9KP--ĶŌ7¶źI7°łA'Łj7SĪҳ¤01U>µ*L%®Yu;Č9{»œńÅz6¶§ŻµŖK Ÿ)Ļ8ć­i\lĶÖ ‚įe}¢(Ԍœc«ŻhiįÖ2I¾šäF‹üĻųUĖVyžpš&„”mį¹=@<Šō»­zMb{4Ņ‘"”"ÆīĒCŽx=kE>„X÷‹­`+I~ ŻųoK’ 8!ø—ŖFx.~µ›€ŌµŲ¼_įŪ‹ŪŪF±ńŗĻó`ē'ņÆ+Ō䖦xŻ÷š§8xTÖŸ.’N“ŽŠ,Ÿ/ Œv,ś§mt¬bĘ}³H ś¾»zŗÜņ¬‘Hä°,I‹Ś¬Ū½Ö„2C&zōÅ ®‚˜Vhą~H'µfŪĄQź’Ļ„,s…\åWåsActÆͦ^źY²ČŖ|Ę-ĘƒņŖ:–§G*ź$BįÜ#”¢Ąsž#²øI#VįÉ?0‡­fj¶©c‘¹I”åšxµč~Ō5KµÄ©Ā–^XS°łYéZę£m&™us5ä0ĢØ?vz°<`WĢŗš$óČa#ļd{P ³¶Ÿd³šĢ gŸå[z —Ś]ē9ćw֐c²[ŠōH±@Z2€Qڰ4æ /’°‹‰ērŪ±øżhŽń¦™™„’B‘1Ažķmų3R]_GžćŻDÅyP}h3’$Ō§‹L¾·…ķŁžHŁ–Oįcõēō5=¦­$štÓŹČY~RóųPhŽ)oln&Y¤›ģ— ĢO9<jµų#!n—ĢRvŸz “5T«£„ŖuŽžÕ$Iķ&¬3¾°6³G"[Ο.xĻ5€|Dčó[4(؍ņyb(¹ŒŃ«¶ŪTø·½··x'1*JIČ'ŌzUKĖm÷£°·śūPACQŌ?įÓ'˜Ć=Ó#R[Æ„t>Ķđ걀å8Ę !›ž>Ö&¶Ń¬¤×Ķyq0#ų8’ėכXµŽÆ¤źVó4ńIó”įŲvżOåUm. '*/äTx‘äŽ59Č⻫Mb[‹(c•ņUvīn£#āYĢ&(d‘I÷­%»‡Ld¹‹³>ęõ4‹:J[[ū9dūn& z×0ö6·ž Ń5 ‰˵`WoøĒ4ŲųŽg X £åĻj󣮹³µœMni¦*zqõĶoč3ķO>įLh ‘Ķz,×:5õŸ›Ą3¦.ß½ėNĄrWvš^¢ŪZÉ"™ G;ž•—ÆkRi¢ÖÖÕV%ģ} cÅ æB-.Ź&ÜŖ‘Ää$°‘ākū >ѧŒLĢHTŠDzœfØ\\ĪĄ«tČćµnjrŲé–FK‹™8LPYĮCāø'”"f,2i³ėSĻ"ÉPT`ć½J&®™­Ė,kky i†X/'źkŪ4E"¾Ķ鳥^“ąp®·{5ō–2DĖb &³Vs19łP…_z 3õÅŅ“å”`’:Ö›®Ļį˙̈́qČĪ„X8Čü4ŠŠ]Hęml]®¢^IZØČ?žŗŠŠt[ąßg·ĀĶ+wéM R±čŗRjz,/¬‘¬„Źå8ķśU»{ķ:ņų5!€õ„aūCSøŠ}nꊮ‚“”ᇭfźzn”ÓiņĘėĄlĖ‚2pz*{š·€Ü #c‹vzŌV‡¦ŁĮ!‚Ū}Ó>ģ’żzŹŃÖŪĮ<‰CŌpGOj½sb­29@†2{ŸjFeK5#yørN3^7ā+ūč§xQBēwÆ4ŸaāŁm·G2,ŽøźOÖ¦ŸZ:„&›wnx'ځjs-œr*ĶžsÜż+ŸƒFžE2ÜĘf$īn¦“‚Öš½³JĮTČåqœō5ę~/šģš*Į<Ō•s·5M#H”’\iC ūÖÆ„p·ńx³\Õͦ£q$–ĢFŠ_ī8\#0G³xĆ–Æ”[C~ńĻ%¦Z6hĄŻ“Ļ?Z½<°L58”8_™€åź%!Źż-Ōž+é–ZĶ®‘e§æļ÷­ÄģzxĄĒcÅzö“sa$Zs}Ŗź#¹šF ĒOåPeŹĢχ¾9cż µņ®×k1 {~•źŚg[NŗšāDIŁ£b”Ī@lqĒ׳gĪ$ųĖā››­:ÕžĮq%Ė4ņī$<`œļž5ĀXų«Xū#Z®­|¶Ļ!Źg;˜“É µē}ą}*ŚŚaØĒÉ£ÉĻĶž5ģ~ Õō»¼ń_E6·2įc+ƒŌšV<{ĮsźŚˆõ o˜&(ƒL•#<œĆō­[™,¤¼fņäktbެ(&^G”źž5Õf{ķ";Ya¶Yb‘ŌŽõ[Ćęépf‘÷äcŃa3Ū|=xN–Š£­Ņ;“|ó³üžU“Øx~K[Ē0ķY$ĮÓ?JQŅ®c—X“AWķ‹Œī>æ•w2Ņ5(4ė9ēp“,>Z„@ Ō]ĻŌķ V¾xEI6’Īy9Ŗ>³¼‚łčĻjT–=?J ä;GĆɮ۾‹ ŽLWŗ2?!sÅX×| ¢|9šž¢«=ÕōŅł„šUSœōõ £ńeī‘„xvņ+ŅŅY# Fw19'5ó÷ö¤–ś”p4r^O$[ar:õč–šž‡©hÉöčž3÷ŸjœdŸS[5 ĀzV§£Z"ų‹[Érɓ°żŠ¶håķYÕć–ā}YVźčd«yōę½+Ć0ūØu=)ę/åĻŻĒJĒ«ųM&½»:ŒŠ#C!PT’xĶi|Jš5·ˆ4ĒKÕE‰ĖĘąu# üh3”zžCį źRi:ĢVz‘žFBŹ$+z ō x2āÖßNŗŌ"”ź*ŪžL€:łŠfvWŽ ŗų„k'†cÕÓM™@›{1‚•ēśW€üEƒÅxŽ;‰!¾øµøĮV‰•sėŽ*”KŒŗ_†“]M%Ó/Ķ ÜGĶ99Æh¶’źö&‘«Ny|ŽXūԚ'ŲņxćVXfšµ½ø‚)]|ÉTŒ;ōZhKk[ļDa‹«ćo ·ÓI/ō¹PIöŒaAĒB§ń¹ÉlĢoŲÉ 3Y~ęEĄ“ĄĻcXzē‡4kHᓸR0×’jDyʑ«ź–ž ‡ģPĶšĪˆĖTu85ļėćm ėzMž‡c2Ü34²€BĪ=:ӎć=JÖņÉSͼ“Č’y<éŚ5#éłž•ĘŽx#HŌõ«o¬÷±Į o( €÷Ēį[ šÖIo”\ł[üČC»‡Pi÷ž5ū-»Įoc Éa$Š’y(1Š»<äiŽÉāR¶ė«M P»šŪq×msšĻˆµI.[LÓŁĶ¼Ŗ6`}Ćܟ҃k1xv+ėYåŌē†-@d¤ƒØś{×_„i±ÅemnYg˜®K“’{s@›:†›L[8tČ]ąŌ–`Žø¬ü'i­ “ÕÄM·ēõ5ƒf‘ƒ¤ü Ń“żzJ(^āŽŁĢŖ”ņ‘öątÆpŌ4Éģ“‚Ā6‚yȌHO2)1ųŠ.ŁÓĪy~­ąI4½6KŪDš€\ü²ą·õÆ/Ó|ā ?kŗļ‰ ČęE‹1Ÿżj®S7"†™į_xĒS³µÓ­ ņ$ óēś W ć[KŻQmŃH’˜d t#Æ>”„ā®déū¢ŌmąR7ōČģk¶ÖģµIŅkŁæu™<øÉ©^Ē=„éZóé×÷׈éomƒóœ<™ć!*¹qyy>—5»ŚĶr8?J å¾ŗ‹HÖģźJØ8Ü:ƒõưćʱcšóVšæ‡5x"ŗ5A“źKc#ŠĄØ#ē’éwCS’E–fv;›s—.śĢOį³ń.»h±čŃĢ̼+āŖ ygŒ’iKĶcÄ ŗ: /ʄĢnųÅx=÷‰į×uŪ½^D€£8gŪŃEt(29rš¬š5ž”-m He“+%Į9ł}…sŗļ‡ŸEŠ=aÕ卉HŁŗąwØk”P(®„öĖ£–åO 9ĶdÜ}¢+k¦Œ¬ź8#śÖ.&·čy-Öū7[“ H‹žƒōüė­šž·moøĢĄe@Oz’$zƅõwøS,Q§™$Ø9®{Åz¦£ćSOp×¶‰nĒk©`ģGJØ”rŸGčŽK*;„ŗK #]ńŒä wā³ī|;”é0F¶éig)bæ1įsź+tģ š<~śé4ūė»wev8>ąŅxZīņĻP½’Īģgš†ēŹØ»&r¾!ŗńūǤŪ=Ō°Ŗ±Ś«ÜęØėz]üPŚÅä4Đ'“@8'š 2'»°œzTŸš’”“‹ÅĮ=ż«nO³:oé±ųŽX’}ūäĢ€3Š÷+æ[éV‚ Ņ ’ ĢĻŠ‚;Τ„ŗĄÆys;é³—ĄŻĘ9ė]”ŚśČÆ&‰˜`·–Ł_”J)‡į4Ó.4äŌmįaģ»7B}ėÆū|V—Q W‚&čYzE4̤ųŽšn”iؕO>UmÉ26Šź?:łŽĒQ:Vł•ćާęÉĪ=y­T„{懞ĻWÆļęŠ×…a*Æc°­`ĶuēėĄ–g·Eʹž#žŌ„ ±©|æŪ{m ·XQ˜!fǾkCĆZ^•į¶Jź$•” 9ÜūūV•;•5=2"ø¼†LōķœļXšˆ.“ŸµZ4Χ)óó·=Ē”¬Ü‹±Õéź'};Ėū°[å8,}*Ķvę7–źx<čü±å+žS›%ŹĒŸE{ØŹ·ŅÜ ˆŹKķ=³V“{‰; ŠJ‡ć+¹.Š]FŻÆnv†Qę³v÷#ަÖui,Æf—Mcse˜/ ĻÉŚ¶EAż§‰“ĶgAŠÖ#=’Iø±vĻn¤ѵ[ĶśŪÉ»A§€wÄペM.ÅÓāØ,ī­ąEKµ’^Kd®:ŸĀ°¼cskØBĶdH8é€MJŽ„sicÄęT„¼2n™Īcäø­Ō%øŽŻ쨻ŚSŪŌcüõØę |¶pi󻙣cĮ.Qé]¶‘¦Śź0Cu‘]L £ ÷¢/Q§c»Šņ]8Ć’“Vē@>ń®Ēž4] A+;nœ˜ųącÓó­yŃę«ā-6źxŠ^ĒįČo”Õ=CRŚ6ÖśĘm®7 ä0ō€Ü¹Øx7P½H5CcHļūĒXzWk‡āM- R!`~PWÆJĘr5T{œįšņYĻŅ\Üł€ē‚@'é]­“*É4ąµ¹?w¦ļƹå#9PW? ; `i„ŠeņĘŅ:W7㯧‹4ėČ„’E—kI—!wÅwĪWÜØÕ?:um%¼=­źVsĢÅ%ŸÉæņɰsżkė’„æ¦ųu©xi!Kcy"C"ØŻåŲ…J·C¶v=ö‹šÜ>ńv™ń#Į–†#2Ž[ʱķŪ äŗ“ī?•ZŸ°OķķEū)x[ĘÓź:m÷ŒōØŅĒWX˜3ƒh-ß<ƒĻæ„lµF’Ł\ū·įŸŠęš–½o Ċ’$›‡E?ž³_ox“OƒÄz-¾«j”ĆG»Ö¦Q±ĖR'āÆüö3’†¤ż“Ƽ]į*Ņóā—‚•īc2.āČ ¼yģÆéļ_ĮŒ"—Oe“ūéöčå|ė€ć ~¼UDZĪ×CĪ –1mǃLuXrW™IĻ=Ŗ8ē›)Žd\8Ļ>ō†łš&z󦃞Pģg4‘#ł «±$8ćßń«Ć K‰6±9#=G­TUĒ›RłEŽ)#ŌUŪ5u¢aĶĪƎTśŠŅ[Šgōk’÷žŚĒąĻĘiægˆ:™ÓüāéŒŻČXŠ81öŗsßż§ėš{}ŖDYeCŒÆF^ĒņÅsÕ6¹ęš¶ē‰ģ§#•%Fkįæ>ŠŚxuHbOœyw Ž[Ø?ˆ®9nD¢~QžÕ_ōƉ ń%…å»>¬mZ4Ż÷Šń·aõÆå3Ē> Ō|ākļ ź0, i¾9Tœ–łX¦kX7¹Œ£sƒ’ĮcŽk€Ź¤`O-\½ÜedŁ9RŁēŽŗNJ‘°Ö·tŸ`ßę0GJ–=Ø”e G8# 5„3£(H³5Ź4N‘ącocWn¶”EU%Ē·z³hKR§ęUFR’äŒw_j±ż—#,ģN8éD–‡Ld_ˆŹB+>ƒµz—Ā/Šß~#xkā—osęĆ*Ez į^ Ų9÷Įć>•“޶;)3ūXżœ’i]gDųb>2ų›ÄśtZrŽGiæqø€Œ:q÷¶ņ+ļ‚?µå‡ÅƄZ–½„ųvUpŅL—[HņXš6'°Į®,D\bŪ:”Ÿˆ“§Ę ļŪsö‚Šķu Ž]xSóˆn’4a *¶2OB\ה’ĮQ’b7ĮŸ|QųIem¤ŪŲ¶Ė»h—s0+‘źē>¢¹Ü¹b†éXžg °3Éax¬/£:šNq’;t©ō† u,r6ų÷`ūÖÓzœó‰ź ©KlN“¾p”Ę>ZŪš—ˆ¦Ž-rŹāhgY °9 +•īfjų‡]¹“óų~īX¬‘³ä#¦½m|ų„Öl 튱„¶(h÷ĖØGot¬A$²ƒÉ_jŁ“LóÆʇŹä ŠŅ0”¬K˜l·ł ääcJuęÄHŚ1¼œuļZ˜¶WŌ ˆŲ&Ó¶ąƒłz×g½°u’Ž`»H÷5Ńa'Š$Õōß³ŽFŒųኔ iīš4«HF7q·ß4œ@æāM6=*6o2\s“qjóč,ou¼‹f2ĬZ5īMDc©2;]_N—F°“‘Ģ‚čĘā#MqŠźK"o‘ćĮĪ­¹LNźŹpŠ–‰¼Ę#ꥮŹ)“ų4ؾŁ_h#Ū†¤Ņ:³ĶµĖ[‚²D$ó‹uėõ¬kkHcø‚&ŽiķŲą‘ü?ZhŠīõaek’Łł‘³ķr#Ó5Ńk+„[A¶ø*æ)<ņ5§:3¶‡žj°ĪeXŠŗŗ”Ę»ÜĶmpB#&åĮ¢o”Œ£ŌčuWŌ!q"4‘Ę}«’×5!xŖ²*† ÷š2k!Ę6ÜŃšŽ©a„ŪNÉpŠĢĄĒ”„Ō¼au~ö‚ŃŽRD™?,žžŻØ:.mŚk3ǙвƒņśS‡ˆlĆ·ŚĶ †™…CĖ…ÉmGRŲŅŖ#īVŪ€3é]~…m6°—M2(‘>ęīõ¹ĪOsįĖ‹č$w·d@Ü?†µJ‚}&{-ŒÅ†7{ż*¹k©x6ūģĖmj Ü+g.qł× xKÖ4łę[§YmŌ‚ņGćIĘŤtšœó^jŽP±e?0#ļJęüC½–Ÿ™.>Ļ3’6c­$óÉnD0 „-¹7Xjéo5Ö”ŽēvĘ Ųę‹ I”¶–žxx’fm¼ł®—MšÅĖÆŚUPFXńÅ#¦ėźo”Ħ@%]įTc9śŠāü]Æßjr“F1oēä\u„cQß<=,÷²kN•@»s’ׯNńM’K§ł›RfLJzdMžAm'•8VżÓōÅw‘ŪZĪ% ģąqA™Ķj͜:ölź²1'ž~µ­Ų”…eµU†Wåčhsš-‹½ÄńĪ€D:±=kŌ¼-eŸ¬h±`ą7÷E) 5¢©bńGŽcÕięVM<÷ė$AžŻ˜’Žę½†ÓS{[wÓgµWF‡)ō­`“2“Ōą[˜wü«kU–źĆRµ×,äŁ£!ņē€°ĖƒüC=Ę v¾>šž—yc¦jŚn.įžĢrH±ź§Üb¼ ĮśUī—«½š‰¢˜ļł[š‘ßx¦įZ{xā…| ™ŻŗÜqüėɵøÆ‡É(‡ž 1™–š•ģ°5­Ėy>Ašf”.¹ ąR²œ¦ļļ{Qp±ŅxŗMG@ŌŅ3e!µv z}}+kH‚y.tõSĪ=koQøMI$½ĢĖ“6r“¹˜āŗW‰u _µkK ķaŌ6»nI÷'Šń«ŽÜŻÜ4R§É•Ü:ģic¤±šĀxȑī#‘œnąē= gjqŲ[Ź[Ź #?4$e>Ā[źibąL,ĄSukĮ*—ņĢØ¤0ļB; —Ś]ō‰i*Iģ‰čMz~§čW–Ʀ¤ęģedۃŸ„;šrž ā-Nb÷zsĆ*F'8ó,@5”e, bQÆ#¶qJżeC¤|Čß7#GZŲ¹Óg0•@séH vr’c!ŗ–(»1÷¬CY[“b• ~ī>ķM„‰īNÅl:fŗ› GóaI$sŅ€6ÆŚk‚‹!8Qڱ5 Æ.īnį–]€Ē9ĒæĘ`kw—–ž-/IČ9aķ\ē„5ŌŌÖŌĶ-Ź:žōjwŪ¤µŽĪ×ķ×V+»ĖźMy›½Žµs4ĘÜÅlæ2’0Gµ!+sdĮŖ“2\°ÜxONēµyī·7nØķådžNsHV:? Įiaum5ź‹iŽu“ć³’ŲĆ£īEĒ`OOր2¬|+uw° ?ß`1łÖu®™i¦]Ič,y$ąēšz·‡4RŽgŗ•aUMŃ÷,Ż…u“Ēö8-±E—·bq@›8ėĶ.vR ~I8ėĶq³Im“],`ņńփĶĶ$ŪźöĻh—¼C¼ķ<…ś~‰ąkė‹‹‹ˆ„hcU8Mœ1÷5pÜq‰e¦Ė¦HႾ~l īn®t“µF“¹o0ÆĢ6ą«R“øŽrŽö{ˆ'øyŁXąĪ*¢ŹÖq;`É9£˜¹“ ’[ƒ2±ĆØōÆIšĒ„-nōS]¼•^XÜE-É'Ūš4‹ŒHuØ “‰e3,jƒ/“Ę+OE’ÖŚ/äx牓ĶSžķŠF½ń”V÷7?d–EUÜBŒńWoYČ`yĮ?ŅŗX“ėk[»²ŠćĢaøē®AV; 7IŅ4ĖuæµxU„ęeėXZÅęDÓŁźŠßS@ ØÅ3ŅG†gąb¶¼1gö‰1«–IŲõX]Œ"@ÓqĘoNJå(Õ¼ū¹®|³åó$dmē\eļÅŻBņe¼Ņ¶—8ć·Ķ/hO³'šž³āˆ³Æ97ˆr|øųŲ¹®µ®fŠåuX&-;Č G'åĮķB•ōŠæką=Å·×ާb²ŹŹq†Į^ł«Ś“¦ųz;Ż#M»ó¬VFuY-{ ¤ś ē8ÆŪź:ŵä:\žQŠ_žIqķßµC£M9“h5y¢—d` >“ĢŪ:ŪK4ŠŚŽ“Ń( I<·Ō×E¦é+ćmyt]*Ś‘Pg{rüŗU9„#óĄÓXź7³¼r„ŹIåĀ žy¬» ]±Óõ -FĖŁ·Fp~ļj“h&y’|@4wÄo}jÓĄĮ‘%b|Ł=j׆4[™lV’ÄŅ 6ģ[²*"ī`č3JƬúšåÄ׽Ưmp°+HK|¬£Ü~8¬ +Xœ°™ GƒĄĻZĪFR—C·Ó&gŠś8™ŲHĻzõ; h~(’ĪūÄ q Š‚ńJ¤üŪō©Š‚Ö”öv××ö¶Ö»n=ža\nėĄ?ē­r>#Õæ³åFÕ"šKm2ćvĮō¢Ć±¶ßl“D}:)>Õć9æ•k’m^A¤“Ę³ß(!Iź 3R®¬jZ…Š>„Ų™\Æ$œ×¾x^Å>ĒopC¬Ž›ŽįĪ}(lĘNā’f¬RĻövīAldŸ©ķWVķūš¬/،ę³ä.‡Šeń&•¢ŽXh7Ūź ż«? ģµIļ­®ük«Üź±BŹcTęŒ*qކ×īvŽ"žĀ·jp(Ÿå1)? ¤×ų§Ę–qiiŗ^ž.„•Hī#?ķzō¤Ģ¤pž ńc²y‘ ģy£ł7銱¼zEŖ@ņ$Ļq1ą7V9攲c&Kąļ éwڌ3jż–0 ņµī¶^%Ó“-6ūN¶6ŃČĖ“ü€’¹õü(±¬dģ|æć_Vé-ÉņįG.ĻŚĢOcŽŌ¶ZĆjš}¦•¶F1‚©ø˜ŸZŹW½Ąµs¤Y. %Sr €chśÖׇ|=ĶÄāŒ”;÷Ōc§Ö¦żKŒŽÓF˜č—šE§£5Āɓå 9ÆgŌü¬x×Ć·cP¹›ģ17ŁĮ#w|ć„kĪ‹ęG†ŲųĀk+%皩±*汞į]ōmq^=/H·‡?{Źżiū[‘)tæZhšCig·Em„˜š£ÖøŸˆEodŠ=÷±¾@¬H<Ņęø)Xš{;‡KŲyŃ‘šŌŌ¼H’Ģöń¢ÅęĘj9u-3 >}Rå!’ćʳĪFvžõ×[x Īo-I¼Ś¤yäćøŖQAcÖ¼3 Śi°Cu‚ĮpėūāG̣ބń©¦éRÄėK€(½O©Ŗ&Ģõæ‡śłŌtų®aø²¶72‡'ßÖ¹x/ƾ9ń6’4‰ģāŠŃüū¶±Ųē =(6šœ×Ž~4š¤©mØ%„“ 1™¹i1Č÷Æ—ū[O¹–(ciŹ)GĄ>ōŽĒgh·ŚÅ¬ ė$W ‚G\b¶Æ¬eš Dž1wŻŽ¤P:ż:śėA²†(So|'i#ŌęÖµF†Qu€ nÉĄüjć+äO“Nqe vņū¦¼7ĒÖZ”/ęķ–{§c± ?9Į­JŒŗ¢…“żm`Æćx”n'Œ÷®ęßJѧ̗Ŗ^1•pXQYĶō:>|ńē‡$]Zy”Ō0„æ āeU#·–2f-µG|’œÖ-Œõ†ś¹¦Ę+GDlˆä·ØÆań–Ÿ­iž¼×¦¹2Ź„łpŹy u 5B×a»)6›rŅņøŪĄZõ†^Öµ/ˆ~šž“§K­Ż\.-Č8Śx'šØ{Ó¦}āļƒž"šļŠõß jWvsEiž d®?żUįm/ŅIŅH­ŃˆåpJƒļō®9īoĖb—Šuhõ)į–Ę(Ćl!•W®kĶP¹†g•R)?7’^³±ĻR”ż鄤[’dēw­}>o“ŻyDļ°†ŻŚ½ ‘8)Ļ”ņÆĒ?†Æc¬ź#ѼƒÅŽłƒ©;~SóČWƒ]żŗŹkX.ĆbF8ǹķYóµh~‰|×,ž9žĻś·„ļ.ķ¦ńŽ’’,HĒ;!ĻŹē<ž’„{‡ü»öÆ»ż˜’iĆšĻÄĆšēÄ'ģ3ČFĻ/#§S×­tÓWŠčēč[ĖbK"gҦQ%»ē;Šō"¾ćų'ćTÕ4Čü;y2É"'īłķéU%”„µ=WšÕ‹E©ŁŻĄ·5üiw -† ǵž·üĆö&ŸöGż uo 蚎Gį VćūS@iAeø‰gˆ9ą$ń銘³™ŹĒć–³öŪVXŅ vŹ;W,cČ2¾ķ ķĶhrŹ]r6DEč;ÕO4ä±%qA‘éåg(ä1Ū…ĘŃž5)hąqelŒŸZ„+,ƒ3£­Šµ_‚Yb™ęI¤\ćåžķl™ÓÜōxĒ[š7ˆ¼#ć j'IńV‹|—š\“óøćņÆō•ż‚’jßžŲ’³7ĆļŠz#Ēs«%ŖŁk~źtG^攌£ttØč})®Ł–”ƎGҼ7Ēž7ńMnm-f·ž3<ƒ>[dr+•ĉh~l|Pš»XA5¶¦v¶'¢ó"fæ›/ų(oĄķ/CńLŽ=ŠģŚĪ'™ ķ\™¢?Ž÷ž•P1gå-ōæ"&/ł¹č°ļ#ÄÆ1G%F:bŗ0’1¦šIwoVF“ŒƒõاRč¶É½d5{hsŹ(dŠéq2ŹŲcÓńŖŒfY›Ó”ęÆČ’F‘¢Į\†)ü2ŸćēĄ²Ēw’3Jmļf‰žDÉ*ŽąW"’œ’莇3ł?ż½e~Ču_ ėŗd—:=ĆK õ„Ÿ:ٹ\··CōƉZ)”ņOäļćøśÖK«9*3ŃōKOķG Ī"—nT·ńŚŗM;LŗµI„¤IĢ3޳±ĢSÕ5¶K»£3Üc5Ę\é·Öśż›Ż–t‘'¶ĒŽzū×e ¦rjēźĮOĒÆi6śYt}I#ćߟ/ܟνrńn ņDĄ”ŽEvĶ†,c!^VŠ[ŒAŠō£“Xfˆ8ūBņ£ZAō9&õ9kꑌ›xĻlSō›Æ IRU\…2kTfكāx/9Ż„cęķ^x‘=īĀČÉĻ ö÷­ČŒµ6m ó® 1f$Ąõ­²—v®A‘ŲĘh4'¼vŗ€orρ÷a]6‹ŠŁ¬–Ķ›Äå•īZ.ց¦Cā[¦[üŪ`”Üźzöė^{ć- |?qweĆu2>7GČĒØ"Ÿ1< ½k«9˜ÜĘD*¹ŠŠń.« ÜQ“2HD¹2‘·č{ŅVz™’n29 ½0kFőf†ŠĒęć!G© |ākS«Ķ ¹hdm8Į®ĻĀŠ Em^3Ė`CrEk…ģŽ[[ym|_vš˜ŸMe]æ/~¦+Ѽ¬®1 ljDÄėüW Ė©Ų¹Ņ—³9 ÉŚZłÉōė£qyoęyU‹ü+6†‘—¦ÜĖ!å”¶JƒW_²M”ä9Čć4$T»χ®ķõ'Žź—jŲĮė.H Rˆ ŗī$p+UsJEŪ«;h£Ž*[änÜz× h‘éövpĶn<Ę#'ŽØ‡ävØE—t‘AĒ8²>ī9ČÆ3Óu¦[É#Łū•ldŠøŹĀ‰­«ėŚT.‘InÓÜH§§}ė‘Ņ|[>“®}šFa G½6Œō=ūzR¾ŗ–‘•©xŗīß^W1¹‰²ū±Ōę¤ńSCā‹[MN2ĖØ¤„ł*NÜc®:w5i_q“Wšö€²!KņÜ®zżÓ]ij‚ąXÄѳł~lłŃ̃—”ÉĒ~4ĖĖ“ņÕm•ˆĪ{żkŲōČ]Īę;ˆäYb‹É_­båcr¶Ÿ¤’iĻ'™lŅłoŸ›µXńχ%–Én­-”’ä Ü c€1ż*T‹“¶_';”°ōī)¢]JøŠĘć[—t1рˆ8«š-ķ¹ŽxÖD²™ *¾£æćLČįtA׳YsĆ ō4ČgO ™†?³ąž3U.õ#Eæ94ÄįŲäļ4Otgkpx­i-‡œ1=é®6mBtƒm™0ĪHöB}:mIÄ·$–\õ4 ŅŅąµÓ#.Ä1č=I®ÓPńæ‡f²Ę–DØdĄĖžzžf€8č.ā Ģ„¹£„:ĢŠĪgHāø#ó4 ‘^˜–öQŪ4¶±yČøO½tpxÕn “Ó^Ā.Q›F ÷ \Œåµ‹]÷WwĘ0 zW {āĖ•½ŅᓱóąIBŹÄą…õ„ög«ż½fQX“ņ®sÄZQ[ °†C»•=żė9K°ćē—Ķ£]4ė3£ˆńßµTæ†üµ·„ sĘj¢ŸRģvśŚŁŲĆēϲrsČż+Ŗ:ŅŪĘ $H Dö]SÅߣŚ4’Ē SpC‚2@õõį÷ś‚ŻÉģR†ļqƽb=§Ć—:{hé܁īäRĮ}x㟭r:>–š^߯j£ģńäģŸĒ>üPÜfVŌœ|øź+æŅõ«‘o5»•,T«åAPj·Öžqk,m<ē±j[yl¦uh$I]ĒĢėČ5\£,’dˆ‰C·ę9UŲéöÖl‹";ŗÉ?w؊Ņ1°Ž4čƒ1W¹ÕźZ—l¶žIa2ŽĒ@7ūn+K£ Ā9BdõŖ—׳·bŽÄ®OÖ°4ƒ4¬,ōūČ#y iÆt źkŖ[A¤ŲĒ_1·Ė÷ˆ¤hq ³žžT•ē™»ĮÅi‹+E±·WLän9šókb=cÄ&ź1&Jƒč+N÷[’ŁZ،EĘüŠeį‡ŽA§«²xĘ2{ŸJń­n RŪXŌL-$¶ė&beūr’U³ŽŪbÄ©ņ¶ ł¾µƒ„›.ęā;«H·ČFŅOÜē­‘ė7ы«KE¼š5Ā€ƒØĒł5Ēźŗ „¶ĆHoj MŚŲĉoŖDŹļ’XrAĒ„:śĪĘ ŹŚĪV Fh.™FĆRŽID”Ā0\{W®éĘb&ĆīŠhC/©yÖŪű\†Ēé>ņī¹d”śŒŠ=AÓ“Ėé.&¼1š„(⮃Q‚ŚßNš]6Ż¼j€2 g‘Żj6O ć[tčp1łŠĀ²Õü»²4™-äCØ'ęę˜ö:|×–³sڹ[]Aeę4Ž6Œ}ź Œś߇4ĖVIhJm8ݚģ¢ŅŅÅW©8ėĶ!Ź]oRŅLĖ3@ėĒZå¬ģ¾Ó8¶vteļA‘ŪčńjšmŅÅcp)Ėļ ?„ZÖRćWu‰ŅiPšÄ}Ń@e$ö~±µžFū /–„±Ą5“ FŚxŠČŹĄē9ā€9’jog{%°łłŹń¤ŸĆ—z֐³ZȰɓśSJągŪųBq(ŽåÖČÉ5¹ošæI:Ėź²k—ņÅ[¢(Ć0ź ō­c B=MŸ¤7ŖŹåóäd‘[ž‚ĀK9d$yĒĖ=2ˆä‘kD³Ņl¼N҆‡ķ,‘P€Ģ¹ļX:ęæ”k¾<ńw†ęŅ%Œ,[_?)õ¬Éއ‹x³@“Ć/‹v?a’ P£r¾½;×Iįķz]NÓ¢’\Ś>$mü’Ņ-lhcŻų‘nõķBHīĖX–Ąq·š§½Ż¬ÉæĪÉäąõĶKÜĘQŌĒžt›ĖYTSOØ­Ū j;÷\B‘l\ƒ5"±Ź^É3Ž3Ę”° sǽz—‡>H'›LšxŲ 3)Įé×ēzL3ź—bIgß¹Žy&ŗKua±”N0hÄ׬Ńö”ī'±®%·{p„1{=(˜×­/LĄDŖpE7Ķé°“¬­sVžéćó _Ńō+(āµ–%ņĮĄā¬KØCc5Ćķó!RWvĀhÕę€ÅŽ ¶H¬tŲ£fd^[Ŗ—…lmō™×_–ksĈrA#Ōćń­b“5ŠŠv£­_I­7•qęEŒ/<]¶›vĢŪJ±‰É#2+6Có9Kæµ’hāPå>čć€q^#2%ź•vĀįž“‰;=žĘļNŽ…G“īĒļ ėd²²’×+ 24Kņœg4ćŚ¾«t5 ˆ"“j”h?w=±YŽŠ;ĶM­.Ö²Ų³»2ø#”QgŠń2|ĆÓéRkʉķ^=슈YJŽ¢ŗČ¼]e§Z®’-Ń'ūå†yĻoJiF79ĻųŖÓģ’B¬ŅÉĘÓŪŽøŻū_ZžŚĘČĻē€|ø"GlU81ø$W—uهPV §ī°ąŌŽ.¾’źE·|Y1ę1Šj’čFuV¼œ! 0ą é|1¦¼w²O#“°^8Ķ JĒmq©łņ$aøz÷Ø­µ)c¹tˆ¦ €{PĀ',Θ‹9k.ĒĆś:żµŚ¦9}Ģv   -+ĄQ™å-ŚŚŃIåF+6M,ŚĖs±·F{ädž)Æ2£n§“x«ÄVŚ>¦t˜^ōÄX•9=+ē_é²]$“ %ŗu4ֆ±·C@ū)†XKĘńæŹĄ@¬={Į iwÅ¢ˆ¢–“ęÜ\cēWĶŠdz-Œ×\Ćm ß»‹2¼g„-އ}¬^ŻŽĆ Ķ`¦@ dž*9H•ö+ݱ“–W““ ĖĄ#­iųr 4{F"“OšķŽ”«ā;'QēŖ¶^2:ŒW±ųB³×“ē¼Ń£–į/6cŒłb‚Ļ7Ō›EѼK<÷QĻ‘ĄAŸĖ䯧ę+ƒ›ĒWĶÜŁ[Čŗd,q6p]³é@õ=BīęK) ¶Iī7bBXäƒßš®ž9ē‹E€™a‘ŽJ‘@QŖOyØŪ÷“ōbG“Ÿ_Jś{Ą~8šĘ¤ĆįŪ—“ŽżŪ|NŒ½ĒŻ>“”ć)쁖Ł/m§¹#iČę¼FīG[+µYD“('p_¼E2ó<Śīī}FÕ%»ŠKy—€¬1­yž½jČ$”1ł½;ŠIāŚ–²ÖĄ‹ŠįŽk×5ƒo4pĄ˜ß’§?wÜŠkOc/LƒĻ™¦aÉ>¾õ×NŃā„eˆ…źh,ܶ˜Ēk–܃¼mc’S5撾ߨx{C±Ņ&n–|Ļ™HōՍ˜Ńęŗ¾©āSįm3ĆzÆŚnl¢ęą śžUĶų}.$ÕķČČTmē§ćH½,}=įČv®ē•v£ļ©ķ^™«ųėQ°ŠęÓß|’īc’ś4»™Iw*k3ź>æ·Ó *‰åņ'gó®>+‹=ċČf¾øO1‘#Żæ:"blßźLm®• ‡d€†%rMy~›ŖC4÷kt˼m±TŠÖ,GØųjīON¹šÉZāŽ <˜Ę hŚ\Żé2É?‡#Q‘‚“«Ęßri—”gT×¢¶Ö4ōÕu 'æ<Ų“žēõ®ƒÅĶ”śšō.·Jņ]«D?ŽļŚ‚ćöīMBkh ¼†8äœ~īFĄ<ąązÕæˆ‡Ćö03\%äR.W… XÉX|‡ƒ_Y[j\ZGŽWśWžčš;M©Ķø b ƒœ~…If›F¾ƒLkR’Ū™ ˜äĘ0’ė×£Śj’@––ö©m° Y ēéļRŽŗ]æ½±¶‹ķ˜­.WKt$šŹÕ#ѵK»+}r{G3ęc@fQĻ“ŽåEŲń{KÖåń”m¢éO!"Ż”d©÷®f_Ūj &0ʹ,Cß”­b}¤[¾»§XÉwy$p 1Ø=NqųÖ_ŠŁ¢“FŽa3ÜBŗ¾“˜„±ēö:BZŻ[·čĄÆĒÖ¾‰“ń;[Bw7†Įč;ՉĶ4qvž"š+‹‡fXö¹=æÆāi÷qŅ’8'ó\4»Š>ć^Ć­Tbf‘ę—ŗž«Mk Vó!ū[Œ×`Ž ¶¶±IŠO2nŒ ÜćŸJŌ|ŻƒĆæL¶°5źłv.Ų•Ō{ā¶t«‹$枎ßPK˜-ŸŹeæ½Dˆę=3L¶Ń† ©Ŗ°k`yU?|‘Ēō¬ł-ļ4ˆõK”±…ōēłć$s‘CÅEˌ¬`YŻßx‘#Ōu :m:Ż[ŹEäØīq]V‘q繓±fڧqšøÉ\„ćÆ<śMõÕĆGtčB§ęlóŌtƏµ=Gū “?)ą=‰“üźe+šĀāü|@Ń­µi¢“I•ɘ²±(µõ§Äé÷k–Ē5†O—p1–’v’–·>ŸĄ>,ŠłÖx^ŅB^%C†?ļW+®ÉŖxv+tÖeŽ;é²”Uŗ€{֊WE؞}­2ŠmžSƒ‘ҦŃc‘ŠłlŖ@Éē„sĶh7 ׆{Iy_ĶGL›„"üDזŃt[Y–=9dŻ€2wtūŻk‘·ą½OR‡ÅÖzŒ³MujßŗdˆĮźÕön«ńFĆĀ-.k©@męˆĮ¾3•™Hī֝‰9{?®­5½Åœ0˜ß• g“޽CDš’Ł„€«£óc”¤¢Ąāüaj<=rńÉ,&9ŗœēŃ’JÅš'ˆQ/b’Y£ Ī7ää.}E;u£tOJ‡mJŲJrUy;±W.m“Ķz+«Ū«@–Ń`nČIéüŖœĪˆ®‡˜_YŁŪE"$؃qۃĖŅøÉt½BÓuڬ‘ļžŻzR•ĶĪGZԌHeRīƒhs×>µēžÓ`¾Ön$ŗq<ˆä€‘ǰžą{œÆöwŁŅ Äæxu'=kwM×,5ū„Óo/b’ć$,.x“•Ąē¼_šł&Ō“ ØćŒŚ\įĮĀŗĀzF”į锵·KUē`PLÆÜę·B8 očŚ~‰%¼Ö %ōņĢOÜć¦+œ¼Ń#ø³MĒŁā?)éłR”Ģˆ¤ƒObŖƒxQ¼¼³‘Ć\0ݐ8õĶbägPeę§2Ķ‚Ž\/"NĢ=+Ø“¼ŪlUeQ¹f¤ę“č3ž½2óU·°ŠEVgś¬_Z›SÓ­¾Ń+­ĄĄČź~˜§Ź(³„ŗÕ”±uęY¢C÷ņĒŚŸ4éq'ڤ!€!OojFĒU£Ōåž ō Į£ĻƦsxöš«y њņÖāÆ"Ó”€q÷WéLŚ4Ļ*ų§į9t»øZŹQulA +šē©č /ō}2Ü%õܷ͛3ciĒ’Ŗ‹vzī½ń Ā^ҚėGš=[[h—c$cZłĒJųĆā{ŸYĖyuw=øF†KuįJēųsŅ©E•”ÜŽkÖŗ…Ō7ŅhöV®¬Ņ3æŻ³Ž½7įŽ®4[ė?ų~Qmāh·yrĒß‘ŽPk7±ŁLӇUhn/ÆÆ^īśYšw˜—oRMx׌üc£ź·÷0ŪGoŠJį ~•Ė(Ü©žv·bhÕĄ<ćץkž%’ÉĢvÉęĢw)č+ZtŽG¹ż|<ńt.𶙬iN×B[Młsž„·µæ*õxąuŽžxśś×”Z+T`£bļÄÆ '‰¼¬C #l‹c.ēĮPTvZüÜ»k™fś„‘¼Œq(Ę60ćżjóZčuRg±|ń:|'ń曪ۯ—kس¼T ©V?)aéɈÆaż¦<‹āĖhĶż—£Ow lŲĮŻł®ŖRjĒIżK’Į1i;?ŚoöLŠć¼Ō÷Ē>#O揎˜‡ øžæ(š5śAįOįŻJŅīVe$VĢOCōYõÆ YźP²æš€±«ņCž ßū)éßµ쯭ų‚ÓKø¾ųąE“TӅŗ%ÄA>d÷ʃĒ\Øõ¬oc’H’>/i•¶§x/’6Œ§+“ÄĄżĘ^ÄW•ź^*įX&8o›ˆ­Žj”ŁJeŲ¢ Ė)Ą#ž•š^h™dYƃ†ąbƒšNʔчV”B ˆćń8äÕY#Žę4i ¦ŠżćļNĮїa’L)ŃŹõ#žjż¼Š³·Ÿ(‚ĆÓ5PÜģ¦Ķå-mw[£I"”ųĄ=ėś’ƒ’m4ųūDÉū?x»VTšŠ­£Š(ß劎ó›Ićę\Sņ:ŌŗŪ^³j!™Š1”‚Ž:H‡Ćź0k‰Ōģ|ŲnaxĮ,¤®GCŠäkR$ūŸ |`šÕÅöŻV8If•ćŌą‘ųÖæ*’hļ…šo¾ų—A“E±»¾¶ŠIVB?xŹ{\z{ūP™ü¢x’Āśēƒ<]ājjL–ņ³o+…pN@AģÆ(ŗæ%\ō=ńé]Ī¢3vgƒsoćåSĪGµI$؝†-ž?†“R¹Ē!~ŽŪŃ! #`‚N8¬¶‰vI ē¦3“VJeõXdŚņŽ/Ż$t5L[ ž1ĒQA“ 6’¹yźÆō­5Ÿ˜Ų:öćŠø³§šgŒu懾0Ńxs=Õ L©čŸCų’Ÿž­įżSĆŗę±į}ZŅ}*ņĘ_(G!Ėm€pyčruf2‘„įLé×Öń]ÜÉ 'Ģ)ƒéķ_Cų*ōź±TKŁB;l)øø’GÓ­dAĆxŽĘķ5ŸJŪ$[F[¦ÖĒ#pW6ņK:Ž •wū›Ŗcø­©T’> żõ;}k­GPŌ#{÷q×oL6~µ÷|W2Ļ 80¼NĮŠć'Ę»”#’gK{HEÄytZŪŅēŗøg”’‚6ÖØęū˜.ļķŸ*æuH‘U"ŠźÖhķć‘£Tਭ̒4ļ/ž—vÆydÜGéžÕ…į­ ŪYē@cw$N6‘’ź­c"mf> =;TŠŻŹ¬dģĄōŽ_iŚ[YłˆŖbLž[*ĖLņ}rh§»ŽŽĮ˜ĢJ€©Ō.y$W„ų{D°ŠŚżā„EWœ®3łóQ&h¢Gwā«a|dÓÕJ+pøėģqY¶PiźRÜŽ‘*ĢĄĒŻ©‹°Ül=[BH¦a‡r($ęø½]tŃABėÉ'ŽkS&Ž'[[qĒĻüĆė{HŗkĖŪkXÕ¤¹rŠ ćē{ÆxfnŚ@Ń`(!ŽH8łæ\×EįõMN¹¬xu#s’ 4ģiŠóöM÷3›– %…kh‚ÅtÖ¶ė¾ øw9õ¦ä̬u×_ٳ^Ķxķ ŖWó·×Šó“»ĶFśRĶē4lc$ć<HŽwN½žßZ3#ż˜ 9ņ [ń.›>”!›O]ĢO#ĶiĶ7‡4ư$0Éå¤Ćļ ēŽ®x†hMŌK"P0½Ļ­[9š8ūŁ”ŠÕšrw“Ą'­n茤±i‘Ś™‘ĮbźN7o„.t+.õūˆāXY_ śąV“Õ¶ņ.g™„8dŖ@rww¢]jhK”d ĻŻÕG¦i÷L.Ģkŗ4!N9 ¤WŌ“m:Ki绉g©Ž@¤ŠŪNÓÖB=ŅgqĄę®=„Ķ(#~ęB¤Œ7µE©Ž\\j ~`‰&n~A…Ą•,qv9+Čća;IbK)ē»Ļė‹8t˜īއB9Ē­a%©¼O`Ņķ¼s#4‡#rØf®Yj ,”œ  #dg”3W#Ķļ“[/ ź³Ž›‰§†WicR¾§ ­KŻnĪm4<Ķ giąšŅ23o±ē:ŌÖóF.­\.ÕätŻV<9­ź–öo*¼!`sĶQœdTŽhu?馅ä«zŠŹĪs…ōżz—Å[-B :łbŠ7™WĖm”G d £.Œó_Ż5—ˆN0‘nŚ2Ą’³Ļzö{›™m-ĢJY¶g=j$Ķń—Œ5ļŲÉg½tKpÜ6w>ģć@3]w5-°/ģn$ME¬Ńį#ŒØę³Ź|KŌ'ńOƒ­ā[¶Žī7Jē ń®oĀjś†”¢‘ĪĢŁć+ƒŠżqS(ÜØŹĒ·xŠCsblå öå÷EßiÆ,“Å-£ź?fžŽ)ÕpæŅ…óž³i¦ėŚ@0B4ō` ‡oõÆ%ń&›öp둸!²¼n¦C8ż>õ}J“Ąę$l•žšō4𿆔µŌT(œ£“Į½؂Ę5…9dW]”éśuķ“?Ł×픃†ĻaķN;[^Ó"{4ņÆ \ūƒłĀžūMÓŻLŃ"©Ęā +q—‘ŪŲź­č\ąŽŌž ¹¾†ŅŃåOU=ELöŠĶšĪ§*Č^ęL(n½Ę+³ń/Š#¼_³Y[Ē,mRć½a-Wsͬā¶ÓŚąĖb I÷Ł×׃Wõ»haŠī(UݜŖąō«5Ó>ܚœn­±7Ać5ķ¾D:ÕÕŗČņBQ’0sÅ9Ł3Z¦ž|Å?*žŒ`Ö ]BäŠ9b †SģE+™ŁītšŻż®§¦½Œ(#³$«ĒÖøwŅvŚ»©b«ŌŸJŅ2čGż ¶Ę[mĄ&N}­ż6Ö(tæ"Ą4‘_i9Ą=²iĶŽ‘jµķ¶’ ¶af 0<ńY:T3ŚĻ2LoįAźkTZÖō‰£ÓRöā0CŖsī+M%IÉõ —BÕ^Ī}ź„.b9\Š{jr>¬]žIÆgrą¹''½\[ ›­PKruSBųQHھõVyÖÖ q¹–I$ 01Œ÷„ ‰Öǧź-a»eĒŁĄ<ąUŻ;XŠĘöŅÖt+&į·#©©źSi0Kfn÷E+:– žsōÆÕüKhŚ¾w§ÜÅŗ_.9|²T·§ē@‘uc”¦™ “\|N< ½Ws^sqˆIq‚ŠÜsց“č¾v£v"u £“ƒ^•«YĆd‰;Ŗ)UėŽ9Ēń-‰„¢<”·õĮjŗ‘¼šPˆ©ą}hDlI=ĄF!¹Č\Ö½õĻ”nP1÷E8‰.§’ģaĖéN³Óõ kXM:(®BüŁ#4 +“XI5µÜš}ģ9䢱㔮Ī;9šTŲ8•yō&‚¹N īį»ɏߑ] ²ŚźŒ±»Ff#ęÅ;-#MŅ“łĻ"’–›q“ėŠÅŌõ›I/‘ęlG~;ā†j™n8ĖN’…„8>µ~ę8āœ(a"‚3ō¬¹ŲĖ“›&Uņ7øčzVčoؗW ČĆęøŹą7\ŗ¼ŽęŹŚŚ5šÖ@ĀLžPö®GÄéš[DmćT¹C—ĻÕŻ3Pž8Ģ„³ą|øģkŃÜIu„Xź¬/+&6«gõ„% f¹y­œM³ä2ŹżkĢ.åµøøC#+’Ńя­(­c¶īaot鼂OÆź¼3Ä!pūNŻŁČ©’`TÕōmZž8ZĄĖrĮōSĒōü+‹³Žk9XK1‘‚cPek«l*°U £?€®š}gķ° vTH£œŅ•ÜVwIõfnéZ·:…ķ¦© ĄćģÄ|ćūŽŌm¬³½3l󜒭t>Ón­`iāaäģµ4AŪGs;,"S‚ĄšOzōgŌb tcĄlŒŠÕČ u(“o ŲĆuؔ’!·[8®ĆO“†;HJ©‰Ī}Ŗ9ʕö8ųbk×ÓµøSmœ-·§Ž>¦«éšTš£=dC#cŒņséP5žĒoąŪ½Ų‰Ö „E€~ļµy_мk§_ßŪG„“Ž‘®ÉUqĮƒHĘÄŗG‰mī5[{·Ž0ŲP[Õ×ü^†ÅOöN•{JŒ³Āw%FF~½Ø(ń/ټśóŚßˆÖŅ5%¶āōžUéŗŽguŖĖzu˜ÓĀ©NIoLž“åmFCc¤Ķ€{ńĒ„y•¾³uw唲+ī#hĒÜ’<Š#{CŃ,'¼¶MFAonĪ eėœ÷£ĘUœzżŌö&/ģõrwń@š9ėĖ뉀1ŗŖ…ŚŸ/ Z>†6]Nńn›q·?…|šŲėīōŻ?dDęGeą÷}k‡ńŸŲŅÜ[H|ŁsæåĘ(*š2­mMTøbsqėšō{f YįžŹ@Ž„0 ĪÓAfV­ā¤‚fx3ē»r® µ›«u/„fkR3·Zö ȼĖ{øF dVņx„iÖR%ČY„ÉPxa@e¬]Xß,ī°¼(ĪvęØx?F¼[Ū‰aS$(¹Œ@~!½“O‘įLŚß"ć'±÷¬ėVßÄ֐i÷FÜCri¤RW:=6=6ĻGZ² …nAźjHćY¢/#ógžōŠ³ĘĢš?Ż‘ņńÖøĶwMMÜŁķóXn8=ż)ix~Oķ[½:9nŸåeo—ó5é÷šCé‘Ék3ŌPvŃż›>”Ņ%ĢmŹy+ō=«3JµŸJÓßķ3's’é@w«Ou>¹$Ó¼¹c¹É×¢čšń“¤Mp¶ŅŽĒߔӰ fśĶŻłˆˆRb ć%‡lW}­ŪŸčÖ×*ŠŹ’ Įū­čEl™QæCˬu‡ÕRźymeó‘ŒlHĀõķZŗV·%­Üv¬›b'œt_sQ7Šw±zźŻ.“ŒNĀóLŠźŻģėk"€8ļUÆ<'-Ž%ŲĒĻņ‚:­02tH ¹Šā9ċp‡hŹ‘“ų×į[—ÓVD˜Į1}ÉĄĒŠB04­*fńåĢĄ5³Č6"žx®«YÓRßĢ6øLŲ&€8ßģĊ)ē¹c!I 8É®j×\˜Ī¶n²N#’hŠuq{c§[|ļö’ŌĻnõĪ\Ļž§fš\RˆX!$p1ցŲö›]fÅt˜4ų,ŹĖŹĢO=k]ŗqg$z|b_ā*äŠ>Fyl¤²ø†HÜus[–ŚI¤³uĆcr€:šmĪĖ_šE¶«§é÷ķ _m T\¾§k—ĆR •³d’/,ķśVœŚ'”’ŗ,TÓ]K#æl÷~”Ū]hĻ4eŠ"īć×rgM-ś o/ż?˜äõ…ā]"Ś|jvń†ó>bœJDœMђŅ8ć@U ćozī¼3©ŻOŲŁ·q×¹  «įHīļ&¹‘;”Äcq®ƒĀ~²šõ®­ē隯Ėr0’±9€ä}ß® 0Øh–¶Ė ˆ‘ķӟƲķ¼7mÄ÷ːĮs·±śR§·ÕāŅm’åÄvĆ!sĄĮśÖf½£E¬_YŽZ]ÄŽX7ĪĀ“ŠēŸÅI⑤OlŅķć;Į>½EZÖ¬Žqoo€ī˜ ząUXŃĄĆÖ$}"Īx#‡Ķ~„õÅ&£x³•½Ž"“3”u-ßŪĻwnźž5Ü8Ķbų~Ą¼¦ŹÕēä·|z@ljö7ŗŁä–Ą/_’]`É„j:iü±å)ē­DŅ1hŁ·šķ†„c3O$°Ż*€ņsV¼%¢.“ŖGvÓy8ĘķU)t*Rčmų‚Åo.O™Œ2üøķ\-߇åŠAœEŠ=k##£Ņ|«’hŲÜØO%A,®p2k×t?@žOŪä0Ää†däÆį@%s̼bĆĆ:ķĶ’ČŅ„c³=Hģk•’„²Ua…_$ŽĒŽ‚½™ß7,ļ4qöi¶¾P±šx gęüx¤ŅüM§Z¬†ą¦Š„ŲÅqg©CāøÓ­¬ĢšĮląÉĖp3ėłWˆėś€+q28h8ŪŽ‚O$“Ńīuię»—cŒÆ8Ļzķ“įż«XĻyućŠc­v(xGÅzm£FśŒgßnʼ߅{Ͷ•£Ķi-óDβ!Ąē„fåŲ9O,ńtvštVĄĀÅ÷•t5Īéqź6ŗŠ¼ĶĀ&čḞ9čZ¤ŻŠŒNRÓõ»%®ā˜ÄŁ!³…õ«įÆxßA–Æx‹P±“4ćeŅ’tŃĖ©Æ)¹«ųŽļÄž1¹ŌuG6Zt¶ėGčą}źl „ŁZ ­ÕI;[’~”ұ”•“7<=}m~— ),c}k”¶š;I¤ŠHK–;z3¹¦G6¶8ßčwś“°j¬÷ e#łœzż+7CŠīļNŽkvūĻĪ1ļ@ĪĖXµ¹]^öHn休ČH¶ņTc•Sß'ÉAā¹ÖŚā"ā!Ž`Ąl84% >³ crVĘ>n ŖzćĒui8·…vn¦‚9 ń…bŹóL°ÉnŁgƽr_šŒi夿`“eÜGä >VļPj•“(ÅąķWK2G}i<22|Č@aķŽ¹øäæ–[B–7mo) K吪źsĻ4,ŚųŠźĘw“ÕĀ*—ß#”õ•ćy`Սµå“é*†!O­JĒ·Š, '„o?(/ü5µ¤ü>ÕÄŗ$ÖóŲ]2I#ĒɄc”ĒįY«lĘ}£xNéµ8bŔnWqūÄēŽ+ߖóBŃoōń«Äŗm¤<ļ8įIīMS9³ę_Šž-“†}OYŃn“ķFē"8RAó.‡š®JćĘEī›eÆA¦Ķos4K–ņ¦œcbGš}·o§w]Hī“tb·X9…Ļzš)5 ÄgU¾šµ”šhÖ÷2%BøļŚœU†¢k5åĪ™£}ŽI’±lärw‘·fzŸ­{?‚ŪOk8&y›QƒÉbŽŽ7;…;r~øŖ5¾‡„ßų3ā‰üf5ķF[y¬|Ó1ņēš7׊ž¾AdŃź}½Ė*`s•śsֆ;™?ŲŚFÆā-6IōéQ ’5PvĘs^åā}Ā~=ŃåŠõ+ßģėˆ~[sŲ}ŻÄt²čžÖģgöĖJŪ–Ž"±Ó@ŅķāŠiX– ŁŻž˜ŅļR™cŽč©v ždō,ÄŌ­…ݲjzMż›ˆVBß0ćž=+”¶ÕõĶ6īėNcrīїGĘŽć4£āåF Ž·>±gØé³½¬¤®Ÿ+1ś×qįŸ,°3És#’ įÉb}óVC¦¬C®ų,mMķ“Éov®2Fw|Vē…&Ō‰µ6q;Gąqփ?grÕ×ķ¢ésj^Ņć»0+y.U>Vlc;±ĒZę,µ¹Ą’ńlÖ•·“>¦¢P3t“Ć~>¾:¬qD‘ŽŖ°7Ģ fŗĻ|@}NY“Ū‰c‚ÕŪ%PķŲ}«6ŠTś3ā/.tŸ„®Øpņć;8U=K}+ęė [Ō±tŽ%Ō¢ŗ‰†L3SQŽ“:įHī4oŠŽ-Õn¦ÓmĢśƒ£g<NI¦ų¶Žõü©.ĀÉwčpMa)2½Š34KßģIX^£FŹ7±#µzŻŠµMIm­RŚęK'mČAåGŅ¢2w1jĒAÆ^^éz[Ī,åšGSåöü«åY¤ŸÅ^"·‡P·¹°²ŽCI)ę<÷śWD]ĢīKØŁAms5µŚM d€ßßĒz†ŚD ū’›€ĮŪNJśŽĘ§w<‹ņpEjIŅ./ēK{X›ĶlZf#ڣєРµxg3]•žS”oJ·i”·ˆīäQ Llmū’CZX±<† éŗ\jmŚÖ=žaf?ķ„ZÕ5[/¦“¶¼I¶óĮĮ>ōXų—>±Æ[ŻĒ£ŚÉ3¬g«ŁōƾšŽl<>·w¦ÄČSŹ‘²ŲõćśVŠ=Ģł_R dxwĀw7Œ‘ BPL‘…%ŽG’®¼ūRŗƒPD‚tŸwĢ\>ę¦WźT[źlXčs›a$LĖĮäšģ<ąłŽźŲ››Ū‹’Aq>•6S>ĖšW€ćŃõd3±šĀļh!|̬ €Fą:ž•Ģüxšž‹ćmO†]#OŽ{u”¤ŃÄ?gśõqÜNlü¾øŒ[Kqk(1É… xī1^½š‹S‹Hń®›uuw6©å drMjā.V}®-žp–ép¹fŽ>”’±aØ_ĪbKčåYb݆Ē9Õ­„ź&ćcó"D,W?ēÖ³sģLd.»}e¼rˆ“#…U‚{šåZśĻP·†ŅłŅČüĮŸÄyĄćלŌnm3Źuķ.ī+äķĆ<‡ī§;W'­aßxv+Kˆ^G%+w÷ŖŒ;„‘ŲĖż’bŽÖ9‘›gć·JŁŃ“m2H&y¦1üæt.I=h¢Œ&×¼=ØÆŠģ*‰hND½0~•Żéś5ä  īŌ»ż*ģ(­kZ²eK{HRĢ6>ą®¶Óį­Ņhw%¾¾…¹ņ¢·W!ÉĒR=+9Es"i,äĶ‡t˜ü*xµ““o gØč L¬Kй“„cRFøš6,ć`aĘ3Ō×uāĶ+ģ>KŚ=•Ä’|ĒÉłUGҦ[čkw<Ęö ;ŪČķī„hƒ¶0½?^µo£ėVIf–ÓNś~Ü˜ĒŻÖ³•ĶŌ{¼µŗį’I¹„ĘĒåķ~=*[y.b1Å#¹…\3ln،Č‘ķV‰kĪ€ēž“j¶”®–hÜyxłĪ+¶+CĻ©#öKö\ų5¦±yšžļSÓa“ŗ"HćĮĄÉŪžĒ?žkīKgU– ²0$ƒŽEk5©›V:ķ7P›ķ>D³=¢IņŁšķį_ųD5˜eÓtŁģ-ļe3³©āBČ 'õ®9+;#j'Ķsyuo,ŅŪŹŁÓr‘ÓłWčĆĶr_Œ_$š}ōOām.&x£<’ ņ ź ėłUu’‚[žŅ÷ß³ķ;¤xwÄ7²i_ |C!¶ŌķfĘČ%9T,;åå_ŲWŠ#K {MŸŁóā{fCĆF܌Vī7ŌR}O ž|BžėO:,ŽĀ,üØOBzååÄv¶zĢ7 ¶ø±dI€„ķüĄ¬§ž[Ÿē½’żŸ/¾üeÕ~×o,^³<ś…+åDČ$%‘qĮ`M~EßīČ@#Ŗ×ƒéZ£³-£hDlN÷ĄÜGcL fd231#ޚv9%øŁ¢,)—ń„¶.ĢU@T†©«u!“w}žŁŽß'ļc8««Ģ‚6 Ķž§Öžš#t¬iZę-ņ>ÜchÉĪ+ ÓuŻOĮš¶‹ć/ Ī.|E„ŻĮg ‹ö©WhFbŪ{ÕĆs¢2±b ”ČyH IP»ŸJż£’‚AžŌš«¼{?Į_ųŗm>ĆPŸķzȇɎ@>hĮžĆ9ōŖ@鄺Ś×ģ’āXÆé‡R]CE¼ }„ĢŻlaćüĒēķ_^}žO2EXqžĘøj#xČt6Ś]Ā^錬1]i7pµ„ä(d’79üõÆą£ž Gūė’³?ĒmcÅŗ-¤ įKéZ{)†I[WbpŻūµĆ%©'ā„ öČx%ŽH*ź>÷5×ųgU¾µŗ„‹± `€={ŹJ̉Hö{Ė!,Ū«§½Ķ-Ū8ŻŽ’μśļCI<łćSzT)„uC­.†²eÆ•óķŒćœńōÆŠ-›Åžµ¹š<^"’ėÜßō®źoCG”ōQĄ 9Åi„¤lŚxqM•ÅųŌaKųł11ĘG·ÆZćåTF’K€Ņ•o˜śjµ3‘åŽ »‘ļH‰8rJŖå‰•‘×Q]ĘљR^‘·š«±;lzP·¹žŽŌŽfYJē5ŅX궦[-5ȵ‘žPOCŠŒcNK«ēø·*%#Ö·tˆnl“łŽżäÜTłAGėEĶ£Lį^ņ=QŽK ń„$GģĄć§ē]>™¦[Oj÷“‘ņØ?ĪŖ.ÄJ=Qƒ,Oa}‘Alć=Ev0\ĒqĻ"ł¤asÉ”²[S;dmŒ »ėZž’äźīŖ"ÜÄV5 ©®‡ŗk×Z½®&”£X‹˜¢8s“Óæ5ćQx‡RÕu(O¼{(цō^­Pn¢uŗµĢ³ZeŲGĪwgqĶs^)ŒbāņG°ÅTS”Ų£gįķ_P¦Hqi īOAō®“[Ö¼'ęŪxi—3ĮĄį²=żkRU0šƒć›QŽH[?ŹŁ~õt>>Ón 3XŚMö¤ŠEł½@<ŠRēZ®Ø–Ć,¶÷¹łĄņ>“jڟ‹:oöˆŌ'³*L3*.O^ėCsŪ> Ūź2ŁOy«$3|ęTB0Jpsް~)x^kæ3ÄÖvę(bŒ)ćzԚrž]ą>}NéĶōėöUĮŚĆļsڽiŽGˆCŚ[„½L`pGłžuDØw=×DūKϦHĪŽf6?s޲ī¾[éWšĘ”{{$—1[,č„· :`Ž}’J|Čjń”­Ż›ÉōՁķšūóŒż+±Öģc¾Ņ­EĮÜØĆ¶īMZ'–Åm3Ā¶ÖŚ<š¢\"ø„üĒß•Vöķ%ņVHć8żhhW1ncšéįKRZ$bHé]~‘e=½¢\BUN×ēži L…?öŖ³L."•x\}Ӛē,üHžÖµĶ$sb_ębsž:AßńŖęd˜—“Ćs8šē9Zė÷xjo 0»¼ü0)°ņ:äŅøV•„¶ óŚDT+19ĻŽzĒJ›Ć×d¼‰ærŪ0ć…”¬;³Ń5Ķ" ^هph”GǧCśW•Üč7j‹Ey ·Œ©=y„bŌū“ėZ#h:½É…›€Ą;øµjĖŽ4»¶ŒĒ3.æŅ±h»ö/iØ_ÅqmtŒĪ0ĖĻį[ŗ>‘*ÅpóĀŠØbaŌ D,:]…ŻŖL޶ģ>]Ś¼ĪēSŌ`¾½Ó!•&³ÜvŒ`ćÜēž”-Łē² —Švø³Č\ķĮžSN}ręĀßģŠH‰38ģ*īĮE-<żkż„.Ä`’1]V‘£Ļ¦3Įē?…7ČuX/¦Šk™ ‚Cü5‡c„\Ū£ŹÓ4…ņĄžĀ³>Õkq$’’±éé^‡”ŁŁn‹T»ž41Œå¹ēéUqr…õż½õČq$fķÉćń­(­-e‰D{.ŹqĄ„qŪ”Ōh7¦bmA]¤mŚyĶpŸūAŌōūµ’Łm¦Œ(9V’ ŅoĆ~:’XmTφPv2ŖŗßŒmćlz|Ī$Ž ©’)5=B]Nd¹U!ˆķ\«[Eq§źāpŒ±īN>ńĻOĖ5žÅEt9źo„\ßO,/qø~ģ³`/µz%¾·u®h‚]RŅ i0Whlīō­¹z\¾ŗ7¬¶7—»”bU}…CqįżoL7“Ģń½°$Ććցū3¢Ó4uū,žIBr*Dx忌οŗ †ūĀ‚,ckv®÷“ ¢|Ł\Æ8­«˜ŪĀ–ÖZ£GÜĻŲCd«ž 2ō="óVµ“W¾]ń©Ė6Ķ”sė]d×±¤imGĄćę‚ŌŽ_P»…ąu·dÉ=ž•GĀ×7ö·_hEBŽæ'Ķ3·Õu[­1Wūb4µ‘±·ļʹĻ.ĆXy!·‘¦µ³c”>”4»©\ė~„h¬otš«ćµųU™ļ5+ ”šóξ<«mś~¹Q² š¦”*x“DµŗŠźžYęģ8 3ßŅŗ _^Õ-üC«é·®šĮsäA&Üosłę˜Ī„iW¦1y!9cš”wįk}^āX›%ĘĆüGŅ“vå>#Ōnt[ļģ›XLrĀJ¼gŽ} w^¹“„øŹDFpOśVr„¦]\Ės92`±#ŒŠĆŠĶ¬«·®OjJā6m –įƒ¢ØQĪ}kNB°F»›÷¤Õõ°IØĖij‰rAoN+Ļo®/%pc$.ģŽ:óYø¹¤FJ“…•e^yļō­Ō¶”ęyW(NE 25 Š^Ć<(Ķ1čƵtÜ]Y[Ī Ćo+ņžs@ģgI¦_ź“Ę”?|½7ŽÕŌ ?XÓ4Õ¶½ˆĮ²Nƒæ½Ŗ:jgµńrØn!Hō­Ż>īéćŅ;•ēšÅżę‡„ų“Ćvzv¹o ÄjŽr²šs’ÖÅt×:u”:EŖ‘ą|ŁĮ4Éž&/¦ééÓ~É.$ ¤78éҾoń—vüæ‡nŻ/m› 0²FŅ2ę¶ĒÓžń¦­āļ­ēˆ-į³ÕW;Õ@!¹öė\Lj“M$ĀÜłb@ŚŁ””óžP4K+ėėw’\K›“ĀGzķõÕ]?F¹»å{ØĀ˜°¹ßļHŌä~K£ÜjwWÖ-ķdžMŝpŠ÷ķVüoāż7EÖ-AØZ`†rø‡ō­#åĘ=Ļ3×<]©źī¦B‘ʆ1Åtŗ.“ ŅSR‘Öł‹‘ĻؔM5ķÆ dJ2©ČĻc\޹~n%a,cčŁÅfe$_K;y,āUeg=*¢n¦št“¹*€ōžF‚NśŽ[+RRź@„ą(n9ŖšĶ¼‘PŖł@e[„6ŚÓKÓ4‹Ū‹°d9ÉĻłÅŪY¾±ØÜO¦ŽĆ ;ŒlqČéŠc^Döö—šÄņɓ€}=+“Ót+O“xsA Ć­!dÅ 8ĪsšĪo ģz§Ć­?ūRMKWŗ–ÖŽ[NdCÜ®+Ų5=.h.5!n”Ō8‚Äų¬ŹP<'ÅļÓŻ„š× ː­yF« Ésk§k6·0Ė ĮbcVĖEŽ0ƵödŗžSņ%ɳę=Åz=®‰§ŚY™Jł³³dćėU7r­Õ¬÷£lqŒ‚¹Ē u·Öš”V6z‹éBęŅ,0\ed wē­iȉqGįĶ2ėÅ×Wŗ‚Ų®•hƒü„yēåö®ÅQŽéZŌšŲĻŁ!$\‚ǾGåRąD¢užŠyN.W\Ēl՛ė¹ķgv¹†I!ÜEfA_[ÓažĪ]Oäū+“» Ÿ^+€ÓfFæÓÆ,­ć+ ČÜ>éõ§aŲ×ńžs£Ī ³?µQŃģnlę2–ssŒr)A~¤._L½—Mb¾hĻ– Ęźo„īµFX…ī.Q~žįƒNż /ŠÖ×ō«{»†k8=Ąē Vf‡įŪĖ=]dĮxC9¤+»k¬iq,C\'ŚņYry#ŅŖÉimö™^p\IļA6²ŌņļhÉ!鳨ŒÄ?½ŗ×–]ŚÜ騪š;ČŁ  $=ūPfūFqö&eø¶•Śr+ŗŃ4H®4‰ įl.į“‚ vpZĪ‹„ČϱÖONŌļ ^XéWįURč±$oč3@‘–£©¼nCŪÆ?/LśW?~o¬Rk“K6Hē%H Lę—Ä.åæ§8Ą,zSnüy –-Ķ“’C Xņ<śŠcEōšÖęLĪJ7*÷ōzāW6¦XĒømĶ!£Īu *}:āŹu/†$m$dŸZܲ}bł‡”]Ųš?Ś5¤ Īźm)#²†mB5ó˜K ywŠä±‚īŚĀĪx/-Ł²Ģ„)#)# Ńātł-dC+‘ņ’²}鎚üZ4·ś± ½ĘG#‚yAKŖŽ,ö3O·ģū3‡č[ŠģōDzĢBī\· UÅōĢ[?ßuķXOęHĶ`óŒt¼śęMCK¼¶E_.mćz· Ž˜ä źu Ģ֊ɹ g8‡öœŗČ’mĒÆ­f#Ņ<+~'¶wÕU`cļ{óWuļŪi"Iķ‘'¹ĮŲ¤|™Ēz ‚ŌłÓUŗŗÕo®u Nc=܎Y Ļ°vŗ£¬€ÜęƒRürŹ‘†!•IĘ1Ö“#™āŽFĀ3ķ8 Ó47”Šx?S“Qš];T4É !Ōp}…i_hóĒ€›~ļ„,©§C±ūPČÕėOÖõ&½µ[L…‹cµxæ‰ō;Åæ†Ņ6YDŠłŠī ģŽüž•įw>ÖmŅį5.śéŒC LśU(õ6‚_‰š’‚t_ųG”±¼Š/®Ęū¹eq»ø’&¼ÖOT¼Ķ½ŻĢ÷Ŗ£ĢYX}ģ“×”5cm-cźņ8gs€eĒn¬jĪ•Ø^ÜY<7s²1ŚŻ½« nfŃ m©f¬§Ļlʬ?žŖō=RĀYt‹w†īŻĻš×9e_§”ž•HŹ[Oxråģī® Y.PŽ@ž»2WEµÜNfķĒ`*ĒĶ”ćśžŖ// ģ…‰O$ŸÆ½^Šį™<ɒEd·8śP'¢±Ó›[ČŻ.£$±•S»ī޼žMŪĆögOSęrĄć泊MĪN’NÉ•[ČvĄGR*½Ę‘HqĀĘ[ Å¢dōŠō­sX»Ņucmf&IHqœśV_Ž<7?Ž|(÷7ŗŸŁ›ĪݱĖ8pG§µ]4b|æÆéś'‡n­cYÖĘT  H"ŗß&‹¢ų~°ĆūĀ% r‡æąEYqÜ'Ņīüm§iZfž²ŲŲ5Ź›§…ĪNŽßʽņXčŚn™i [Z˜²¦l1ČäŸ|ŅęF¾C¼Wį}#XšŽ¢K]]Ē+¾YxÜG^q¾ š£ąXX\Mpl¤rbB~QĻ8üéÜLöĶ5žŪLk˜a‰T³ Är åŃŪyŌģļ)&VąœR¹“hģ’d[Ē©Żé‘6cóL»Üž•cŠ>SƒĒ:Nńj¶Ś#N…ÄYq¹U€Į>øĶ{åßÅ«Oī°Ņ/¢»¹›'l‘ä‚;¶8¤“7„UĻ/¼ÓõM3SŽėQŌ®YŲ4Ń<‡†ųs[:F§³{$w.!ŗĪUóĆ/sX4S²šŽ™=¬3ģµyы†±ķŠQŠcæŃ&¹Ć>šqļM6Wš€ģll#“»»‘•fĖĖOS[~"ųs{}9†ĘóI,®«œ 抣Yhe)ž­ųkūoµ8Žd_šMˆw'89ÆmšĘ›nš„Ś“r™@tŚrJśšf\ÄZ®šÓ,Ķ~ʶąå8Ąō5ĮźWRE§Ż ²K GņBž±÷‡åA“ž¼…t’Ļ7‰-ņ]wpz× ]ėvšƒÜEiīwŸ-ÉžÜ}(,££nŽčGn±`TcŸzźWĆńß¼×WLŽM¹#pśŌ=L¾ŠßiSźŗ¦›¤@gŌĄ>OŸJä‡ĀéZ\ś®•aż¦±ó8Cƒ“Ū.&ń•¢|š«ū;ĀŚV³4Æ{p˜ ęŲē£{õ®ƒĘž‚ßOģāÉ!VTu`ū %€mĀ©ü>µĶų³\ŌĀņĀĒE“Švm¢r¹pGæaH Ž ƒK>ŌtżSP²UŻŗŻq‚ē«:Č×f,/RWfH w ž3ō­єϐåŌ·4ŃŚ³D¹!ąŽkæšē†#‘D;»( ÄuĶL·1ÓIįė«FžŠĘ-šĆ朏zė|/§Oo/ŚD¾@B1Ēc\īLØĖ”ź¶ž5Ō »7¬—rm*Zo˜7ē4Č5ˆnŽY®Ų`>6ŠŅ Ņ2>|ńρt=Bį/—OĪy‰.£§”5\ü5ūUŗŲmc2‘<„d·ZčęF‘ØQ°»Ōaŗ“ĆZhūMśå^@#ŒnµĄxŅßSŅäO·'śJžó§ėOBīt‘|CfŠō˜t­:ÕWdģÄ#gØ8ćµv–¢.žŚ{uµmØ 0ĪӁ’æ5‹ņ&QEmn Ėø%Œøv®-4Éb…Ä(sҚ•ŒĶ­Epč÷ńłØ$)éŒ÷®šćMÓŅģÉco rŚøĢV9]lZą«Ā®«÷r;ś×›ŲčDųŽ9ē(m·”Ē'Ū>•`}§éEÕ¹–Ō-«äā,Ž9Æ9ńF˜³žy ņ˜2)ēNsśV2zķ~Õ-õŸ Y]“É'’éŽ}JņŸŠŗōśI³M˜;ŗõc…Ų¬äČäCtĻKqį›K!¤Q‚]ˆv÷¬m/Ä·Š4°HžT2¹T(1Ē”¬įlx‹Ä7QX@-ÖŻęĒ’ÖøķV]jh-µk‹wž8°Ä*żŅ:bŖ,Ł¢[ļܕµø[y \ @õ4ß6MU[BÆo‚Ū‰łˆśV¦SgM£ųV;Č$¹–ty•7{{V]ÖŖÖ 6Ÿ, Œ yĒņĢ»‚O¶Xxc/æˆä~5™r×ÜĮ½ĆĄ į²8>“‰ęģiiŗ=¶„sö{»–LŒ©VŚr;ׯė¶ž€iÉ<÷JŗõަJå\łĘuÖm!›ķ°Øe]‚cņ«>ŅRöńī“€r¬:šĶĘÅÆ#“øÓ!²Ō#Fe?(£ųjå֑%ݼ’*³¢·łÅI¼dAį½Į51}t#žłš,pŲÆ^Õ5Ķ KĄF»°ńŽ<µ¢Ęū£‚×¼K “JśmÄr.wm Ź}MsZÜz•ͼinw|ʇLĶĀĒØŲĮp-Zźkˆ­­ņy'‡ sÆ%¤Ā9/£¹†F"<‘ǵRæB,u>Ņģ5Øn$”“`2p:՗šå¬ņL>Ī‘æD8Ą4łŲœŽ7ĘzFÆ¢čŻ\ĒvĀFŪČŚ?­|Ķ­j3kWĶ,’gYDa–øjF,¹šā9muéF›tƒf͹ {j÷MröāŅČŪĖ#,©žńōDIŲź~JŚ’¬YeÜŁ3v–ĻņĻ×ßZÅlEģ°4„[pžUŗ›Q©Ė#žń§Äyµ}#ū&h4½7jĪ" Ņ€8ÉõƎ¼Yo„Üāķ!… uĒó«„m¢;%]3˜Ņ¦¶¶|Āįcn§2šžæce ÅģpÉ,q?0Ē*?<žü¬üeš«ąų—EŌ“Ū}>¹&Ų…Ęōcœ(­©™ÜńK˜.P„–8ĄĒQ\üИ„,'½tCs'» ä sĪØŁœ(Ž<ķĻ#Öµ"ć„a"¢`Sɧ\”Diö9T­a¶ó”Ę0Ɍę„V‡Ģp’4Dž¦Zrė:@Ńˆ,;„słWU”x‚óĆŚŽ‰ā­i"Õ“©ÅݹEĻ+Ļņ¤¶¹¼V§÷7’źż«4ļ_ü©iVŃiśüiŚ"8ތ  PŒägü ~āųÄqx†ĘŹźĻoRŻjœŻNŠ5Ŗ;wÉčI÷ؒgD]ŽŸĆŗ¦÷7I{Ū…a·īŽŗQ„Žńuņ§ūØøļž¦³±¤„c»ÕgńNŁ(6ōįŖ¦—ż—>#½·yCŒ†éЉHIž‡ą;Ć©Ø­Ģcļ†Ügo=iŽ:—BńQuhĻŁ £¹8ö¢2/—CÉ-"³²·$em× ź+:ɬƒČĮci6…#¶Œµ2š±gT{X®U`2¼rzš–ĖY“ŠāåRŹß/"µ9jš·ZŒ6Ä“8Śē#ƒ\5å½Ō—&ī Č­"sž§į½2ņ}9/%hƁ^›-ä‘ųvDˆĮę#p>lš°Jēt­V;I5k‰7Āņ”ć9P=:»©xjžēĀ)ØŲ³²©-/Čr«Ē>¼ÖNF±ƒ¹ćš\µŽ±bdˆdś¦JŸ|ō®\·ŠŪT‡SÓ£–G`¦VpcßšėMϰå{XģndÓ/L2Ɗx郎j³Į¦\«,{Ńr­ėG“Ē©‘§<‹|ŹĢŒ€nėÓė]f•ØA$Ģ“ķ1(8Ļ­ Z3ɕÉų‹ĒZf †Ņ-ŅG×'©©åbg„|2ń–—āXšpWķā!„'•oqé\Ļ~!kĖāż6ž)mšTŽ@Ų˜Ę1ķŠXŽLi]åŒ:ķŲ ģX” >šĒQųÓn.L–r¹ŪéUt‰‡^}I&‰¤#gŻÕÖCįk‰­Ä’€Pä`šEhG³0µĆgą‹TQłó\s üĢyéłVE猠– ?G±Hē7 »ĻjģĪĪ=nĘŚÕ„h¤yBģńÖ¼©„³ø¾™¤E,ł‘“@{2 kG·7#+ĘĒåö¬MsO¼[…e„Gi·q;ø%ccĄ·pZkÅ,α2’9źEnų£[øÕõ‹»•I¼}[„O‡&øæ†n$›Ėł0A[7ŚE•¾ u‰<ęłAnĄzP™ųæPҵY,nQ¤’žŚBć'Œ:×šĢy4m©1š“Õi43¼Ó&ÓŅņ1mŪ¹­_ėŹŲ¹'®j<˜#Ź“Ūį{}%˜–exܲØ'¾ÄÖ[hڤך–”›uĒ›'ńœö’<ҵö6E;¹~Ńo²ŻHx;…r7ˆYŪwšyf4ć LÓŅwé퐬ųéZ?Ū7°µŻŪ QćpßJsZ’44mN]jŁįB6¶rž¢‘ÆZ8Œ¢ģC·8ē"²(äµ5½Ž³M“.ŻqŚ“,ćŪis2@ ÷ įŖ\M±—s-ŌØŖ‰–īĘ+ ²ń?Ų,Μ’ĆæŒ:„ęC:µ%‚.ģT¬į2yė[?ŚpjÅ#Õć†āŪ Ć•­a¢6ŸĆzdö&•l–¶źĆoū5Ē]ųā[Ųn!}Ų;œČ"›ˆĪ¢TŒiŅ+EN«µ~\dŠČŃtk½@HņÜC Cļž‹@¹“©éÖL­k ’¾^øz«iӲͫ«ż™07c”¢Å&Ļ]ŠÖŹ ĻŽYCpy#éPŚKm«C=”°ģ@ēé@9k‘ǦCœ¤rŞ8 ōž•ē«h\“™÷äŠHū]3½Ś;n«š¶†÷ŗeæŪ˜ķYw”(Fm[P[<7e![Y1ę 7¹¬ģĖŲÓqw~\šĢŽĻdiw®¶ĀĢhāŚV—ødd ­ćk»ĻI«rČQWh €}p*—ƒåŸN·š Ø#"RĄ0³Ē_ž±„čöXW2ļÉ$œ‘^Yā8n4ķqÖVh2UłĮ Ł3:;mzkõŌ,&t‘ °Ś;ęŗ››b’l—Ė;J²nÉźĒÜŠQŃźš†µŖGm<›UŻO$ńÅQšnÆ?ö¼Ķ«źāŻe™U ņĀåĘĒ ā¦msĘzŻį‘åŻpT0\zä~u·«Åq¦é¶6K3BŠ»ŽćŒę¤ĘX]Ėö#‘™O¾k—øŁqu}o¹ü”Ā’;Ó ŸM3DžR¶óÓµG-œņ\ł“>§8'§6ąn½“)#œŽwVx°ūl€™ėŚ”ČvÖR[ŖL±JGū*N>µŽéŗx›Nię #6Ol{T‡+9Ic—Ī1Ž­‘Åič—PÜ µ,»ƒdsŌŠHRhķ^TrW t¦\ßMwmžģ6nž¹śŠl‰“E¶‰VVŒ+/_„g^EÕ­ĄÓ™› ÆīĻ)Ū4Eæx–üO„g“¾»ŠŅ?ŻÉ"N7w=+æmfyu!§j:i²“$mžyõģC‘ĖüZÕü5¤ŲJÕSń EšhcRUbž½ĻzłāŃnnīķ¢xä8 Ę }sWČExšv«.Ÿ/*ŪźxŖž<Ō –—†ńmb`@Uꦔ•œß€4«ĶE~ÖÓ“‹œ&zšz×½§† ¼ bĀ%Éu4#dxĻÅ Ūéל„ƒD@CF‹­ÓśgńƖw•Ļ›‚™ąf·7²¦Į“éė]†ŸØ½āC¦Ėq-µŗäžp*g°u†8Õté§÷ɬXpȳ¹2ąēŌÖ$I[Ž„¶”k0‘c$lĻ ŸZė¦)yŖZj™Ę=1A‘ŅČńļ‚i`.ąrzŠ[ńEœHŃ,%PBóŠf‘‰äŚĪ³u|˜Dh # ƒĆUĻ É5­Ģ7P¤s 9e'Ø”„¢zM“i·ŗŒ.äG2¶ōōÆZ½Ń®„[k”³X]ąćßń¤fs¾3Ņ“ū»·øŽŗ¦CĎGó®ČZéŗ]½•²'ī” Ž”ægE¢źr]ˆ–āEŻQ‚œŽæ†k[L¹ŗ]ńtł…UóŒxźxļ@ķŌig0»%Æ ŻĮö®> )|Æ0°Į$ż…wž¶eCtаČ=_„cxĶÆ•-īc!!O™—o8  žŌ.®12G&Ā>m¶üE4SŲ“RÄYIŒq@höqĶ’‘„QÓ·<7”Ɔ– XĮ—rYń{~µQ·ShłUę—i¬ŚÜ>VęŹSūŌ?0…s~#ńÓE.—ą?ŁBék²yŁ€ĮÓ½Sbš;[iō>ĪkS$ś©ŒĢŹć–ś~b¼ö9īõYĢ’±¶ĆĖžö¬ÅŹb mJ „nEó FĻŽZܾœ[KĖņÆC޵Hf}õä÷ń,Sn »*=k:ĻDeŻoö¦wĮ=I’õÕE#hµ;yōü ¾ž'Ėb3隟N×µk«×šKė«™J¬h¬’*…ōō6…JÄ³Ēaz÷śpž0…ńĘ@õŖ6'ƶz ‘āg¼3™Xqƒ’Gęk!Ź&PÕģfq<āe.9Sé[ė<2ĮZJYĄ%ĮĢYJłÆ„šj4ƒrą¼Læ+zÖŽ‘ćÉŽęāŻ¬f‹'ļäcÜ(=kx™µ»Ū |9¬[†žĻŗ’?ݼckśžuņÜśŪĆÅĆ 7żļz ={Ą÷©£Ž`.#Īõ=+¶ńL?kŽF€GnžVšX`p½j¹Qó¤³Oqµ—PšVRw|ŽõæįHb¹ž .ćÜ6ŒŌówčŗžŒ.¦ŽåZ/²ķvŽV4-<X[NVSå–Ś==éKp4ü[m„·ˆt 7G¶h.ä€}¤vŸ›ŲÖ“’į‘„2EpÉ`eN3I±¶.©§ė1iā’G³†ś8„ >ņ@Ų3’1ߊ„ ^‹ŲEā+ÄĻ‘°šV9ōhb¼[ĘXL„˜uõ©nwøw…¾@ #=č0¾–<[Å÷÷1<'c™™½Oŗļ ]Og&™w¦FŃó<ֈ|¾ø=h‘«&‹l‰äĘāėĄ¤-4ˆ »tĻō G ā«Č¾Ā‘ŪÉóŗē§Nk–šÜIē<Øl“œs@$z“ÓŽŁiÅ“°$S‚WŸÜĻØ Ē’ģ°*I< øĘ꜆Uʁ4ŠIŖÅ$sDNpHü+œ±[[B/d‹ źxŽ„ tĻU“Ņą»”*Ė ,0sX:īÆraŽÓFéųŅgbdø·Ōnē¹źƒŽ¶4VĪ8Ż!Co.zęš-!śī¾SK–ŻĻq&Tē¼ĒHš¶”w3^F¢y8ļAW$臭–§¦Y‡¶µ'³(OŽČł”ÖĮ’ uŽŚB6ČB䎙Ø33u ļīl~ĻxŸgFŻ*÷†+±“ҬFžVćós“.z@V:Ō:=µõˆœG©łEaö'æóÆø]UR¼.ī€Ÿę€-Gu)…•‰28*Ģ6±™ÓĶ–$sĻ|v  «ŻFŅŅȈ$wø ÷¤Ö4š½—ĢŽ’ßµ2ŪF¶ņ@2$ž#ۊˆż’)ć‚;}ó2ķ(Ē­©hU1#o܌8¬}B;«xüųĆ:Ž:~”ŻŹ¾–K{‹‰e%egĄķ^Éc*Ž”Œ:™»äżŚ 9½rm:Ūķ īķq  óK»‹† +»Įģ{P/5#¬–k²ĒņXū×yØŻ_¬ nd•LsA¤ĆįK/ˆŚ,0x…ŅŽōL"2įcČ{W€źž¾_ÜųwCøiķ¢™mѕv‡¾O@r(4+źŌ4-n{=]-Y"»-õééśÕ?ģˆ#»@ČŪ3ŲõĶ'dģTÕōØ +*Å$Ū9ĶhŪZßÅygi.. ?ÅŪ' „ ŒZ¶Ń.ģ'{ J8dĒÜ ŒżEyĻÄ+˜”æžĀ±½Žńö†Ÿh8@{gÖØFw…ō±y:C%“nAĀ,ƒƒQk²Ūh×SŚJĻ ń¹—8PŽ” ·¦Ü£[ŽuiŹŽÕJüŚ_kw.éG īhŽƒ­Õµ¬’  Ć ~fLńNæšĘ­gā«ßMmĮ…¬ŠŁ2ӏ„r†ĖÅŚv®­yµ­†ģ ä±®Ę? $¤·vŲ7'© ™Fć4x£Kń:…•µ£hÅG˜Ņ®āŁĪqéŽ+GZ»ūOŠmµŻ2X¤“R<Äu;]1ž>†€qŠŁÖ¼H÷:A°[m=į–@ÅŚ0@”ǽxĻŠäŗH˜hļqŠĆĶhś•<wįO…ąÖ5ÓytФ1dy‘±Ż 9äūś×wńzę)4ö²ŠZ¼ ƒs”Ś\»?­¹ó\zEåģķĪæ2øž&«:¦‹Ŗjvz†¦V9‚–;ś1ö pÜłćNÖu k]&kY¤ v/@ äūW«kzę¬H58-–Ż ķ#ń ŲĄŃćŗóon5 ‹k„yq0ʘļ]–¤RŅ–%™ˆéÅ|’s5߁ÆwE3ؗ>x+»r{÷‚4- PžĻń>™ KłX„4mėXÜ÷W±²‡Q·øÕ`–[›‡¹iO®qĒ~k•ńŻęҰĆfÖVŪ²•S–,3É«ƒčgä|÷¦x&ĆÅžÖ¼aŖė‹§čŠIæ#ļ)¾Üu¬GŚ-’ü#ÖÆ§Å>…eÅŚŪ·óŁėĶX¤×CŻ`rC\äÜģī“KÓ¬-/®eI.ćbūC|©Ž>ozņß_kÉūł2Īp äLĖGÖt)Õc¾¹‚ŚĀŽsŒgøłd¶ó'¹ŠuxĆ ųPe2=cÄv¶–:fœ·u;nc…¦{gšżk—°–=Mīł»“÷l§±ėżj”¢ŽĒOÆŁxÄZv§éw±Z$/’5NfQڼē[Öµ‡÷V–ś˜µ“ĢHU¾ņƒÜö­"¬j}7ąhž.ŠęĪŽ×Pµ±7Eäȹč=śžUäZ׋<_ā«KKŌķ¦‡Ćš“C棦ļ§z`|„wšĒZÓÆ'…®ą¾F*²ŽIėłW»|=ųQcị›ūF&šq“†Źœō¢ĘŖ”ŠųóįÖ§d5Ū Ā–6 Fcbłŗ‘ś×€ė ž“:>Ÿzl|ųłĒ­f锼Ē¼i‰”ŠQł9ūƽ}bī÷Uņ[˜ģŹ©NIjƒ73¹¼ŠŠYŪ“˜°P\śš©­xĆ[³ćĆ·Ū‚›Ünlc”Ķž_=ŻåėN·i'吶˜}@ō®»LÖ4‹ {x‚}”F6€øō«Čо‡ń/]Ō?įøhÓn4 ;Č8鞽 ƞ|ā½Żķ½¹A• |Ū#“:i‰¢eŗeGyä' ē«ØšüW?d‰DPv>¾õv5=³ĀöV‘†B”ļ+øžƒŚŗŁķRÅķ%žŽi·H‘E$‚N9öę³'C[LÓRŪ[Ō!—÷^s°u\W³xkAÓ_÷3Čū²0J™W/jokį›·ƒ9*ælū׏¾.»¼×um#ŗ¼³“¹*{p3YI™·"ČšŻ¶—kĻqõPNNw{zƶf“æ{“‰ nąĄöØQdņ³Ó5O‹Æ„x2óķšuĶćÅŹy*’£9üųÆ šÄķ[T×.÷Iv‘Jr‰·w’;dö­’±J½µĪ©„$w†tHwäĶZ[[MQāļäA•rq“רŖZ ĘĘwˆ4-¤k[y†£m×%qƒXw–v6®Ń*…!—±¦ås ‡¶–ó0˜F"ŪĻN3õ«O¬\ʐAŁ“@YÕsĘyŒ¤W>½Ō¾".ÆąŪ-@[M2Ž8Ńdr Ė#É=żk•»žŁō¹cŽī «‰"rźÉƒćę?҈˔§)ņW†wŅ­5Œ”,zŒ×“ßjD ²¹Eˆ…Rńņ1ķXĶō+•ZiŚ“w1j7wS¢oÜąŽjŒškŪš `(ćų×G§éÜMo-ŌĖkµpNÜķ÷÷­T»ĶŠī# §łJŗHėųWā½NŽņõ!Š(÷Æ-ĘŲ D¹ö5tMBQjŗLM0…Ś£…Ķ[?ańuŲRžŽ!KķśZęhīĀ^š¦žö«–ŁS’‰ĻŽżń^yākŻkXą±·0Ÿ‘£]„˜ńƒS+ō5…G{öʧ$r$ [ø v·O§½iųŽa„XĮh'‘7.ÖGä¬M½”ĀÉu¾m¬ŲYb*{@›š–E…:0ö¦„c6ūžŃį/±E§+*£IĪāC T” u2G¼[™łŚ: Ö23r 6vŖ¦Qę!%¾^µĖų—]Ń­¬`“’Ī$»Iefä©ģēTJe’ [5åŻ»ŁXż„·X^+Śu_Kch"HAö ø>‡5„č–ŗķ„—3AĖ«0Ŗ]Ā6K+"~éy!O8ō„&mЧ} Ū­ŌsFžkʬD}¹ī*ĆŌtŻRĻE¼½ƒ1ą‚Ń“–n½~Ÿ­`T^¤Ź;M}Y̱6ĶķĘśžuó`/ŒZ^46›2ńg%ČļõėZAFF ¤÷.°$rI²Nē9ÕīžŅ]aŠW+m‚¹b2XJŠ©Hö mü,Öj/5µ¶uS¶3–Žq_;üMÓŅĀxn-oćH›”#øõęƒ6k|ń³Ō®“K«‚Rā!öry+ 9 žĄŠ÷ļxžx,å:}ŒF÷wV“ōœLOų‡­kzܶ÷W†8AĖA€p+Ļ4 "dyŸwÆU§b“VŌ÷hÖYml•%'ˆĒ5é įŌ½Tūu¤ó&‘—ī0ī)6fĪkľ•9–3i2@ĒZņ ĻÜ“d“ˆF[Žŗc"ŽŽĀź;™ XĖrį~µ­eu§¬QȬ¦Eܙč‰2Yśm-ō”hEH%įv/9u&¾Žżš<{fŗÆ…x„r¶ę@S<…Zź“['Ś–’6Z9JI;[Žõ«ܶĢ°Ė$!ņ·<ƒŚ¹ę®¬(³į_Ž¼Ń|köŪā·°½)\mG#?>{’j–æąoxbÖĪ sn›ws<.pAg+ś×¢•®vQ×Sī_„Ri_~źžńį]wL·+īij2’wQÖ½Ož £ūHė²ķO¤h>#ö^ ńUņ際I!ŁĻŹ°ēćó®Ź-6Ó5䶇õży®—Ø«b$µœ ķe&éĻéųWŌX$ ē“XķFŅČ\ąg·JŽ(䞅y$,T—{śŅ“±Å"ČÆ„$ŸZÖĶOøK(;L;Ėódw¦[ȾnŁŞōÜN˜ČøŒØ£%܃Ēø­(@9C޵V6ŒķĚ߆µŻÅ:ėo{§Ģ.UˆÜŹźA_č×’¬ż¬ķmoŁ3Ąž7ŸX·½ńŽ‹öf³ s"`Śy>¦¦q÷lk\ūĆXŒ‰ž »WųN+ČƳ4­oģ—Ó[ŽFÓŁ€`ž8–20ϵpĶh9£ų’‚š~ĮÖ’>1Mń[Į^Kź.mī!]±Ź²|ŅĖĄĮõēŽæ-®#𸀬ŖۃŌzÖIénÄo„.­õ0Šß•į€}9Æw»m/MŠŽęĀą ¢0żęā°hG”ė¾ ½Ō-“åFAČÆ2·)Ź2āi”ĪĄē…>āŗč¤)JĒé/ģõńĖÄ.“e†ēQ·ˆŪ\ć_־ijŌ7¬,Ćq}+°åØŁŗĖ%Ė L¹ĄĪ°ö®v{ n—.6/=+H3˜^#Óå Ļm4“¶ī;AśWџG‡u ųsI»Ó"µŌŅ9ŌČs½CƒŲVń•DÅ×¾é2ĘžLåev@wć^mØéivW`n1g#1Oœvźs¢MŪ=+§ŅģāŠžĘGuˆ+‚ÅŗSö„žŃ{¬éÖÓ²š”ʌn5åZ¦”z×ŅJFÕsņœõśÖcg1©ZyĪĖ>čϵ^š¤±+ł7ZĻŽ+YøŽ,æāėŪ{dÄpŸ%ˆĒĶqZ•Żļ—¦,fH¼Ö*¬£88=}:UF64ę/2īÅILvž*äõ'UøYæ>U@čkhĉ;–Łb¹š“ę'ž{ÕŻCHŠĶ™•ry¬åØĪ‚ĻO“ž&ø(ń×?xÕhm…żĆ[Ą (ē=…3+]čYҦÕō­bŅ9#§īƦx#Ž»ūAęėwŅE96oŒGœ…ĘzQ~†°‡C~óXŽ×M¹¶!YG,¤~_Ö¹;Šž“§ÜŪ‹KvÓęO%”Ā‚“ŌR7„58ĶhĒ}"5½ŗłåw X Ų¤O?Ķ»ØžķpvŻ<)l@Į$ßDņ÷¶5›ūf“µ’=»Yrr3Œžu‰ńŠ;™üSwq$H-ŁČ¶`°äžB¢[gcĻķä1h’dyX¤g#ŠPi×Ū–8eƀyēÆÖ²‹³4=¶) ÓŻ”܁ĮĄ«r×ʖ·Ś†­i»@JļRś[ĀüSš×Äz4–6‘½üœĢü>˜üMyŽƒ§^Ūė–RÜG(,§£®;ŠŃZ¾‡§ŻĆ0·1Fģ@®1ĶyÆƒuŃ®ßé7Vö‚(Ģ¢āIF×׏å@Įb'IāDb­éžŅöŹx¦E!—c­;}ŹŚ&ˆ-µ„6ł…pŻ?JŪų‰cig%¶Æ”Ą-”ž<ÉlŅn AēéėųŠ~76Ö)5”‘ļ“’3Ņ»żOGŌ5=2 .Ī6žē½2ćžO’^£ox먀„÷F?:Ѷ¶ūŻÅ“7‰2| ¼¢R±^Ģģ|a³Č.gW‘IĪóŅŗ;Č-üćå"K»œ‘Ęj. f7„¼öļµ{÷µfIvīå€ńŸa\®«ńKOŌģnt;[-–Žc)r6ŹH’<‹±ÅZ^C<‚T ŃdŒś{Õ]GXŻ"ÄaWķøtÅ; ®āi—1;K mv#…'īšź›ģŗ˜·°ŠŠ[ĘŖ=w7süč“R:=ĀńŲ˨̱FšE6W‚0:⹓K BŚKČ%Šxč§9÷Ø(Ņ–}6’O“·m±¼Chē"ø=bxōĒŲ‰#©'iŠC2ߐ„‘ž@Gū¹®m4›‘u ŠžlŽÄ +”sµ¬Iƅ8>¢“ἃĪUL(ä „+ČĻDÓ¢æ6ģĮ˜Ł(Ėҵ/–V6:öŸÄ»E%Øa’8ēõ5\业GOµÕ“ę¹·&3åī`ē&øwJÖašķ˜Óoį·‘'-3lūéŽf›[ Sķ«¾@’6Ö>ŽµŌŻż«OX⌠–N~ļ_Æå@ł‹:Gˆßķ—6”²čqŒjkZGŁ/`CĶĄw÷¢ąŽn}{RÕf7ŅÜŹņg'Ó5­—ˆµ=NŚtsø}ĢO\P Üō+٬“ ¦źö4Ś»ˆīäv­mU³ńƆ’īŃekU$(Ę>lć§įśP#Šk+ÆėsÉŖZ±&ѓÉ\śź„Ę“÷;£…ĄŁž o”…mYd#$ąŅk]Ƅc¶‡4Ķye’Õc Ģ™ąUėķ5»MÄI…Ę1šļģgŸOµ’‘Y‹sŪ=…y­śŽ\jSO;»[©Ź“Ó y• Y¬–?lFÖĄ£ŌV÷ˆ­&²šĘ„ŖˆsK¶>éĒüØ7<‹Į­­jŗiøŌĖĒ&xV98®kÄ*WPDY5ŠPσ×C:Ė&·ø– `døaŒąōjŁń†µ-vŚ'”§ńn<ķB§Üj=éZ(ŃtÉķäró.71õ®CS„)äĻ>õ2„7G‚i˜H½›“Ų×q'‡f¹EŪ <£¤u÷Ø.·‡ōĖ8ÉŅ:(n@Åzž›įmNĪŚ1e’£üĶž£Ó·,ų‹HŃōŒėC²‡sÆ1JA:tÆń[ŻéÖZ}«F-..±6ū©œC@ŽWRŠļ­¬’ådIŃ×x rH÷«‘šķź}µļ™Fbb6ǧųŠbĻPš|ŸŚW÷ĖØÜ•Ó˜o\ ķĒ„,ŗ|Ļ©K29ū"?īųäŠ ‘Ųż”ę²KY ‰R6ūŲł›>§š«öT–šĖ{#Ėu+‘Ž@ tżZßDŌ-µ}<\LA÷5×ė c®Ķ§^}šŽÜ¦>d<ēŌÕĮō2r×C›×¼g}ip~k ÜÄ •Ļ­qś÷‡t‹Kétų9nœóļZ‡9RÕÉć²ŲŃ¼ŌZĖÖį‚īQвC‘Ćv5”Ųāīõ7“»{­!ō¦†ė$ƒåSĄ_SŠ÷ ]Bó 1¬n †Ē8ā Šņo蚎¤×Vņ䁲rzŠł“Ä;im öÆFŪĮ­`t#µš…ģÆōķÉļ-ž/0FPœzż)ß¼%'†oō«+ĖK­2öܲyyܲŽŖ#U'ܽ,r¾KēæcņŽžUź×>“ćŌ•ƒĶŽ­ŪéY5b%ŸÕ|-e ÖײĀČpĢwī*üóińĄ±0HĖެiȄ¹ūKY‰ƒ'®zW>uI•. –N˜Å"’čŠrZĄ“-¼‡rō ž‡Ž½ Ćś^—lm^ę{hQĘ0_•üj”ܾFMy§č±źž{…UˆŸ-”~µÜŲų¶xb†9oŚ*ĘęķK“±Ÿ*8’k”–āę&2­†ĪkŽŅ'k­E'ErŽß4lx<¬Éŝ&½-ĖYĻ f6•ļ\gƒVźĻQššĢļ )aĮĒ·J‘jvŚ–„å2Ė2ČA;EiéņżšÉµ B†ŁylŽŌĀĒŗxFĖJÖąQÅŗ…Õ[k·Żžļ= v Ŗiš¬m§YĄČĮüÅ_˜œcÆįMHĄęu»_:9LŒž^ż«·ų‡Ņ¼ś_ XŽ_>ݱBņz“ЉH m. Ki8dAĮĒR*ž½ØOs„Om#P'–¾ {Tˆń 3Kī†4•œīæj.•ymkw} ‚1¹Ą8õ¦£q¤z~{%ʗM M(rJ‘łę““fyõ[µ“¶‚&#!›Ÿ—?: H Ęm>Žų[X}¶Xid« ši<5 Łł3fD}@ŏ*3ņgń¤8£›ńߏ“]JƒĀіßU]Ės _•”öōõÆšüڌ:¾®ĪŒÖf$©Ū'8ż( FƜ>.Ó-µ m5Wr«Ą)Ųć½bj.‚I,ČK}ēvˆRjū˜Ź=LkČÖõdø'räcŌV†‘Æ]éņÉo“É ¦ÓĻji&›¬;;Dcģ‹ŅŖė+Ü®c>PPĮƒ§ĄųŠČ•Y!u(F@ĪJ×+ó‚‚9 :°ļĪj€ģģõd±{o§/+7 ­;Įa«ÜŻŪʬ©Œ.F šŠøŹĘ¦ Ć£Ä–hŽe”>x÷l,¬5i­,ŅA+'˜x$šnE¹X]MZ++‰ķīS”Ŗ½æžŚH•ƒūR*ēWn†éįNBęøĖ«›*I`G’I“åėĪG­TbōĶåĢEØ"‰z‚:6kŠü'­M£j0¹EuóeyT³nt×׈`/4ˆņŹääõŖŪFä¼³ģō4 •˜Z%ŽÆ.µqŚ•·Ųy;œTŸZÆ©¾ÆmÆmݼ…ē+я­"Ō;—5‹µ{kc-ż£Č‘ūc·õ¬Ūķv‚ĘUø†W—€?wėļA™$ŽkRš3aĮĘļzcx[ķ7v—!Ć2’øc޼Pn½”O„Ż\GˆŲ«cålųŌ–q²øb&>Ō¹‘pE¬Äq»I6bɵ…Éjd·“_5ːK@&„īkbÅÕ“†ödbFpk2ņę8 ’%aå~a×Ģdr+<·7P,%U7öļ^£sĄ“S |vVŌ4ū}JY.ī7©ŹgŒšƒū+G»²{;Ä(ģ .½ØĪé°‡Q%¹ o!ŲåĪBŒš@ükg^ųO—mw«Z\I{o*•SłwļZ(›„Ųł)|Cā+9$ßå«[Ü4R æxy÷ķRkŽ)ÓltæµĮ>£1#''°ōJ†y>©źR^ŻO©És5¼„NĒ?sqT.õķF-^K‡¶…4älD²_߯JĢĶ«»—‡Æn51'ŪlÖŚ!6v‘G±­?Ė %õ½Å 6³G™~1Ēoƒ#¶ÄŚD°iÓŚH$“ĖQ4xłĒ&ø-RÖÖźźīņĢ’x÷ö ŽS•±×ÆtMJ9¬¬’“/ƒäķT/„_Ž\ZźÖóG¬»‰Ł éĻSųŠR$¼Yō%†Ņ+Cö†9ē·MpWC^‚f„ 6IP@ō fß\ė¶:ž²6\6#FĪÕ'qÓµ{݌"Ėā&’95’ AˆłŠcր8sP“R ’>OČGõĶcŚÉg®Z\Eö7L¶ĄOĮäŅø“e¢YŲųkX¾y u‚ ±Å¼fB݆}+ƟQ{UX®ŪBś `g_K~ÉĒ•ĻS\L·zĢśŠF.€“ĄW€/śĆž2}Ø2š=“±\ŲFQ‹Däąu©üQ¤>ŚöŅõÖ8ņe‰Ó>q#¦}ÆGż§ŗņ+H-¤Lņ—h$õć–„5܏NäS’pM±‰ÄŻųkQŌ]V+3³”ē„]¾°Xķg™>ŲņØ>`‹Ē-’…nt­V JI&ːĢʇŠvÆC–m1tµ–Źd»›hg ß=Ŗ'Ųv<šßįNæć’jzƒ]µ·†­Ā±,0gū߅{L6ŃųRKtSā@Ąv¬‚H³{ń6ÓÅv‘ßXi3i7°’‘[N”€Ēr~µ¤ŽŗńW‡-ZśśŚĆX¼f7®’ Ņ1źe+t<ęßĮŗ?ƒ¼7ā ĒjétļF@;¹8ÆѼ”hVó@Öၓt@’Ė3žŸJ¶ŃiuéŪXÓlīĞ»Ż ģ=ækØš’Чš]óhĆöUŽŅO3œ’~š>‚±°YZž«ŖImvÖ”ī‰Šö5Ķ|<†ē^šī«¾å­Æ¢œ„R„äåWéO—K™ČÕÕtkŪY™ū1ɬmę÷YŗGŗŁnŅåēĘÕ|¦34µ½ģ·+ N³É Œ}zuļ[zÅͽØYcUc£šqfcēŌüQż§oœ;4÷}ŽŃ9Ž£•rćį׊g¼Öu™įĘ ĀŅd—ćīŸĒśUĪx’…|p|;āÄ“…<Rh&;~XĒ ĻPyÆhæń=¦¢ņG½…Ė€ŪˆąŒcśPSzœ„q-„ŠH'„õ ō¦Éā3 ¬Ø¬čÉ#śPEÅÖ¾0\YxvM&Ń­LW1yn„_ä÷«Ē,ukŸ½³ŹÉ F¦'HÉĮēÓ֋ž‘…”²‰.Œ–6©Ņ”‰nłÓiž(ū5̐D>ó.sļŽ•€u/‰ŚQø[x/Zņķ’ē¢{ž5«xšI§Y]£”c–|»ŠFr‰ä÷~!žŅæš 5£!c;ˆå”ąŪ{ϳ1łŲHcČ^w \eaĘ6)xēᒌuĖøt£},z1€Č*•s·ž D’Dgd$“Ü}źł‘¢v<÷Ķ"īņ;ø^YvØSžÜU;mAķ-LQ)½qßZĪNås³ÆŠµ÷mE—qŪ8nąp;×ҾÖģµ,µRbŌm£©ŲćļóśTŠśžo«‹#ńµ›}NīXńøZ‰Ś{÷é^‘”xĒ^Óµ£#Łŗ «Ė8ÅŠCšÕ`Õõ{«ˆīÆ%ņąIµœńĻjÆć_ĮśDŽ"±¶žÓžÜ«Ļ$ŽüzQbģ–ē͚—Ä]gWŸ}ĖClņK‘·' ®ĒH“ń£*Eļ†ł‚‘“šØÄ–ĻTŸĀŚŲҤŅVX—R’!¾ NŅWč~+ŠŅü3iį'øŗPS+Ļ„ÉŻéVұĒāųŽ]^sņ›B Ŗ2tÅtö9Ö­ÅĄO%G¬†āz6•ŖŽjŃIwgČU-#—o8čk^ń<¬©¦Å .€Ī ?փĒ”—g©–ŽKČÖ.ŻąĖÕµt™į¶ˆy× "“·ƒŽ²š")t=ƒįÅķœcā4YŸ,źxŽ0zqÅsµ+Ø­U“gšh|ŽcŠM„×ÜŅIī‹<N³Õ.bžå-?*1$€œg’Æ\÷‰u!šL§©­ģ) ü’])ß¶<ž½‹Cæ·¹äģŒĮźk)”‹¦IØĢD·ńŚY†!L„(Ē_jō]&[Ä{HĮ \c qXrźuKŪ]Ž-J·q5徕6”ŁóTddäšÖ;—®§s¤^ŪX, är6A’ÕSĆ: ZĻ$²[±˜æ2}ßAšÜ“źo Ž]jUµ®«:Dń¦ÕP:ž=jÕ·a4v‘­ĀHĶ>įĖÆ'"„ģD™į¹ŸTæe’Y„9)·®+Ę5Żå»\ōõėMČŅ.ÅĖ-"įÜÜgŸ•T –?J÷/Į” ÅÕ­Y.ćOݳq“ž?Ī*%±¢‘Ģx÷F:•ŒfŒµ/] Jāj¾.Ņ“«©],døæŲ0Ŗ,z ūg5WĄĖÆkzÅԺͲ-“¶Ųшł*…kF.žŃöi§ųVōķćVŠ3"DqøƒŹŸŹ¾>µš“j2[NfĢxP¢EžēcšīĀ+KGž [’Źs‚E6±¢ų{Ķ·–dóFonBōéšŃ@wKoJ-Ģ.YT³`ņTv DøŸBh—:%–˜a·»ŒĖ»;Y¹±WŪS–5s-ĄŚF ĘįPŁ”Ļ#ń åĶ½ĖŽ_Ļ[Æ+øōöŖZG‰-õ¶š(Y­J(?+d8ź ‚x©žM%-ƒŻ[Ģ[<Jē4­:;Ÿ&+·XŠ™±ĖVńz–n’Ā)¦ >АŖ®yĀąšā¢-lä1Ģ0FŁÜ„qÜWJ]MēS±ż9’Į-hėŚoöU·Ńu-rwā7ƒŹXŽ3ŸŽ¼@|„³ĻOżæD¼'©Ė x‹NŌcŗ6Ž‹žEu3–£Ōū§‡ÅJ\B«$RÆ\q_‘æšR?ŁĪŚ+ą¾jŠÉć_YŠ. ‘¶Z$=yzJiDž¼Y¤Ė§Ŗ²éóŪM­m/šĒ%АAōē5ę·R?›"łhøćƒ[˜T¦PņćbųŚŌÕPÉ<Įj¢Ž½³[EmXUŠVœHøņ1ŒzŸZŽiWÉ=ؐŌ˰.Q_ćŌŠG1ūŒ@jż)ŝ4ę_“3GµĆ}žėpłśķæqæą‡Ÿ¶×ü2—ķp<āJCšæĘ0%½Ė+ķ†Öóp ģ¹Ē9##ūŌ¤ŽˆŽNØ‘Ģ‚īk9–SŃ‘sō5Ćź¶ŠÜĀöī +Ž=qUC“č|ńžĘ×RšĶ·§lŌté÷Č>ia ä7®9Å~K|sų_¦xļĀzļ„ęk¹ēž’ĀT› Ć >¬"fĻåā~xĻVšäÖŪCM+F|Ę2Ē޼RāŁ‘Č “cŗąa$d\ ż=ꑉOļdśwÕŒ£\JrļÓqōŖŁĆĘī zÓ.Ś”Ė;$£b÷źjX·³ēŠb§˜Ņ/RįbłėÓæj|m1Uœ"œńĮcéTtCs¦ŅÆeеM7^±¹ŗ]NŌ‰ąņĒĶ ŠŪƒ)ģxÆīKž «ū[’Āėų'ą}UÜ\ųŽŃR ŒÉkr£īæqør3ŌŌKcŖŗŽńų£G±Ō-a¶DéåČ:Š©}ńݱ nFÄžāøŖ!Éh|ÉūržĢz7ķoū1ųĻįę£ ņų—Jµ—QŃŽ#óJBœĘF9ćń•žoŽ7šQųgćŸx.Y®’źŽźX¼‰PRFŃųƒÅsu±•ŽSLŌ?±u®T‹~ZS‚¹č3_Dųvi¼C„‹YI#»aBæÓ„fāƔÅŌü/t÷Z¤péא4üqńPkĢSJIʲGę‚Aå¹é]åŠn™ėdń'…õū-~vžĢ–ėŹŗR1•+güškõ'CÖąŌ­¢øµUHH®øÉµ#dtĻØJńøD~\+Ÿ–ä½įAīóœŽÕkĢäŸsø“X$„Ē0@ŲćīšŠŠļ.¬&“ģżĮĆ­Šs”ņxč›¶“e]§#ÉĪkigµ½±u½>B:ŁPŪ ęy6”ö¶ZİŪj§ĶüFŗ^śŃ‘%„HČēŻļW˜JV#‚ŅK²yŒ…Ž~SŒŌ·6>QC3;ß.M&¬8Źę“šx¼†=@l·$O ĪŅ"šßS½*am=³³åÉėÖ¤³ØÕlmÆlŌŽ[Ē$q©˜qŠņ›]unkU·EŽ9H;Ē­\\čnå–š[ ‚H”.vÆ­d6œp“Ę~ny+Re+-m-"¼“Ī_—ų8éZ‡L“R“ÉpD{€Qž1AŒĶ;æ&Ÿ„¹.ʱÄÖ šēŁ£š;†UČ;°Fö5N"¹bvµ¶yęše›ĢbŲ”™į«łļīuŠŅG’†3‚ƒÕŖ-©¤B LŻBK‡(Źw’:nŸö²æœLŁéĒZÉßc¢™Ščś4z…ō"=Ū@õéYž1šŽ£¢H¾t‘Ik4~dc0äQĢĶ9SÜók ŌÓēC;›‚äśWa-å ŗu†Fø·ŸÄ)J68żK >čƅÉĘNH®ŸJŗ:TQßfW”sĶk6ŽŽūN“ńI©”T¹uĪ ĘćžMxżž•qm~,„Œ+ƒ’ä”(›pXĖlUž6Œ““Ś”A¾å#F!xÉ4‘£mvöķ%¹bU žÕZīņXĆŹ R9õć=3Ć’īȁ®¦XīD cč0*„zµÅī½Ōņ2Wøj–ŁÆ.‡«iŚĪ«u"$Χ ē•®ā•¬¾CbŃ›ŠŽ`ĮķžW‡ėW”Ÿ.¶m§^m"Ź_øĖŃøėšŃT‰Ōh\ŁŪ@ŃÅ#¶NEhkZ4v*є1÷Ę9jnB3äŃ­ķ“IÆķĢV·›7Ø?ĘsŚ ų;Ŗk>'»Ņu ‡ŸĢÆ!ĄaŒńōĮ®y±§ŠÖųįć{-3D1”YA<|:0ĻēŠł’Į¾*Õ“hn Ó§ž f*Ķ#7ĢŲķš„ĶZ3|Tmõ GĮž”āŹ9jėžxŖ]2Ńtļ³Éž_.½mŒō>”Ņ*“Ō'‹QwšoæÕsĀūWSc1[µbCĄ¤žzӌū˜Éjw¶ŗõƒ»®ķ›c–IsitB\G!ą€x©r±HĶԚŅŪO¾­ß–$ƒ„y‡ü5ØųĀi-ŽÄ,Łg•—ī’:®ZVz.›ąešŅÄÆp×8ÉĻ#é^‘csom„Ģ5Ā” O@{U/#Åå³×µ(žśīķ-ßĢ!ÖX,P7÷¤4ŽĻDLBs–hĪ>•‡ā_kAŽM"ē•\3ĘNŻĖÜfƒH-NŖ q5Ų”»X–ČŗįŠdķ=ėŹüe¦i“ZMŖĮ꫇~Ķ“÷Ļįüé£xĘęZxJėO“ÓģŠ.ž’«KŒ†AŌ~•Żųòų²_ E¤!°±“”ŗ+|ĆaČ#?m±§"/ųĻOš—…<-ow žŚ…±<ˆKGc¶¼Ś=IÆģ&½÷’w<“ō¬äīg'ؖžmŌJ ńĒ5OUŅ’rK%Ųc$ąf Ļ›Ql“;Č­.![¶šVÉ »8ćµsvн”Ā+¢UłēŌŠ5.ĘŁ³µ£šw‰7ŻzÕ=2ĘŽļX‘&o>Ł‹¾lU©”ŁŲjŚ™,HY1‚sĪ¹ĶrĶm #bėŒž5\ā99“ `;m'•ģ+Ō<%ag=²\6ĆĪ?wéKœ ½UŪOiā‚ÜNަ2]Č=ł® ĒM·¶/«AÜýjŻÓfw¢Ō,ÕŁx^sŸz]Bīźī1§Ķ ­ˆS”ĒZF2z7‡V’I¶ŅŹNŃ L²÷öŗ]fł53nŁ?hœœ“Š *\ųŽX”·Ó¤såē§aQ&£(ŌIĻčČ'ņ1† 2~µƒ¦ŪÜŲ]ĀGj¤–Żśb®šÓGµŻĖg§ų#X×§“SZ 1Ä łņųWĪ-ĒŽ<9mØB§Ha)icVɐs€ŽÕ©Ös0xµœŠ¤“.ų»U·Ó4Yc0“m ąūW3šęųrŽY nˆä9$×?AŒ£ZŪé6öĆģ+Ņź3¼×—ĀE=½½Ę‡ÄāŚ)łLOP;ū’i†RkÉ5y_I’GEq‚¹Ą>ÕÜxLXeˆ™głŃ-¬RŸsnū@²2‹½‚Y·nfĒZŒˆŁš=£…Č9ćéQ#Ndr—2†¼MÅx< w§Ė«}“s3l‡8ėRD„б¦5¾¢cøbņ{×§éh–ö’ņŒƒīäć§„2TN\ÖŽ fi$e' =sQėĮŅźBõćœÕ8šroy*"™mo˜ćØ5oD¼“¾[É*¬x''š›(X±„’gŹT8Č®»L{KkG“tD«Čśܕs§€·ö]Ż¼Åp¾Y” Čx5ę_Ł—¾×¢²¾¾µøS•6¼qßó4iĖÜö? x¾ü  j†į qĘ+Ł“H¼%wvśŻéš'в“åqžćńśŌņ"ұņ×Ä CM¼ń«ØiVģmŚbUƒg”Årŗf¢—7ĄAÓęõ„Ź'ęq>$Óŵō¬2Nõ9ݚÉ[O6o8žķfуGq¦iJĒę¼C–ĻjØÓ¦‚Fœ0²M#FÅÕ%8Œ¢Ź¬WŽõKRŌ'““irZv /=*y‘ÉĻĀyčKQĮØd»k›•ø0[–Ś8©"Ō{—äŻ$K.vŽ:W¾[ŪivZuµŠx®VX7gn 7”üØŃǶ³v‘«“2DŒxcĶź jŅČŪĻNh"NåOé:ʛ”ż“2A!® ü£Šę¬-ī& mŪ’Š "¬h[hó¼ną7˜¹häWØčipĘbņJĒqĶkŽ›ĆšcjzŧšE½’ ¬F>æēÖ»Ķ^Ž="Āk¦·±Å)D²ŗŸRžģżŗGˆĖę ߐ ƒŪŠ»‹ž;”¶ž9³mčr*ķu›É‘tėŲķ¬3.Ŗ³¤_IŽÜY­ąƒēęÅ!$rŗ†Ÿ¬]ź«|ŃOehźBA³å<žsĻóŖRhśģ±^c’C¹@~vކ{&X[ø± LŪ@ĖNj՞«|[ø”¢l`ų†×WžśQv$‰Š°TÖ»i­g£4EĪšQ»$śÖ2Vw2 ¶bQw˜qҹ¹g‚M~P”˜dśā‘ŖcoīüŪĘpOµg]“RŪ“nøz·F%[k!ņŖ©· t-)¶%žMĻ…éŒŠvzl:|°Mi³sØÜĮ;ŁG"<¤Ė1NWž½3CsÅVźś‹Éؤ…”¼+ĪåŽ{›—‘­¤ˆēžō±¤‹=§Ś-̊HŪ§Ö½;D¼·_.Öēi‰Žø4žĄyÄ;*ĘšĮ¼0;žč°ēqX¾·ÕDĘųL¢ÉÓ ¤IĶef;„®­ø–Į6Ķ–aķ\,¶7ŻD¾xCļ #ҵŠ%»~›;kpÉc ¼ßi·møqĻ?˚Ķń=æ†|-®iÖÜĒ&¦ńenü ‘Lˆ¾…½CÅ'BD¶ö+v¬`€ ¹÷śdz¼šµćjņ+,R6|~Uēµr£›ń-ī©ż°aHÖĘQ“\qųb¹ķG@±—k$(š²‚čĖŹ° «i:„O©ŁĮm§ĖņžhņÓŽ¹_,S[Ē ›Wꐭšņ’]k~!šóč6“K)`ÆŃóÕxēšėžI§iZ^‘įėõ‚ F@!ɶąrżuœßB%.ĒŠ6zEŌŸJ[iįŃ„Ü   Hqżźšf×Xšõ„äQ‡»½Š2#1c"vÉ=šk2yŁåkš¤‘YjodŚPé*19 N+ŗŌ4Ż{V}&mśkG‰ÄŽK`Æ8 øŪ”jņ=cOŽ&{‰ļ[płÜŒØļҹĻÜ^_Č2“¾r}ś{P]Ķż[MµŌ4Ė;·ƒb±lķē>õē¾2“Ńōż>×ķ<åpCö_zŅ2KC9K±æąe'±–ķŽęcGS•)ėĻ|b½kĆ:>ˆnc3jpŚÄľqō¦ßDsŹūß4‹ŲÉowi=¼ī08ĻB x‡m%ՌғsÅ4l0џ˜Ž„“±‹×ŚŗtīóÜKwly‹zżÓųV曪­õŒŽŅĆkt„yØO${RWBg­xX“žÕ·ži|ČWå8l}Elų·ö™ųoįųŸĀZŒri÷ŃZJØcRė$„éĶir”n|*uX/YųJ;}ĆJÕ#mBÖs7–7 SÓ¼×”Ųܙlu;“U²Gø“‰Œ© |¹¬ÜtS—FÓ­õ+MM'{”';?)÷®‡Åž]¼Źŗß|C²°•õĶŹĪé@żŌdüøĘ:ŌI3dŹ_ |kŽ5ė]yü›ˆ“÷(ŽxņÆ_Ölmd’䣳eŲVA€Ā£™–äx÷ˆ>xjāöVfįwņŌaHéĶq:Żķ÷†,oÆt¦F¼‡”ć8ō5©6#šēŒm|NāņęśöėIJ¾N09É®‡SŅn ³a}ȳ““ŌūS°ŽMü<²Onʇ<ēšE°HœÄĮ–ډ”¬z¹¢j^š¼z½¤+v„4Q¾J«c“ųW?»Ež+Y‹O¤|Ł# ē›,5žˆņ+‹ōx‹€īDkė\GŠ“)noį›KœIl™qØķÅg$Ł1Nś”īÆęµžŽ +Ū‰.vuŒ”ū×”Ż\ZźśTŻC,h|×ī8źj¢šŃ›Ę'¦™<.RŚĒI¶•-Ś%ó%`–ž{×͟-­®µo°[®ĶÄ|£ļł­ąśéžk—,Če[Č®GØķ]ƆXAqŖC),ŲIØåŠÉÄōOkz¾ƒ¦GmŸ+Ģ[vv Ē­y}·ŠµK›čo'šTU8IžĢG·[Ķs}„Äwˆē œ «źÄŅŪ §!ˆĻC]ŌŗeŠŚ…ŠŽf @ä։Œäē†÷Dø‹ĶŽä,ķ€ź™XæśŽõŽép^ėz‡öfךŽŸy耳:ŚėėśÄ·„qZ“!bä±Ļµ^¹µšm]Xł'ĄéÓ“©ē¶k‹›K 1łßøMbk×ņĶØ2ESY7  sō¬å.…)=µÕƟpoa—ažžµ•}įö‰w3¢ŹN6Ŗņ=ė2[ -¦‘4óźA\ō^: č_Äŗf±m%œLĀŽ2ёžEoŲWƒœWaā[ZÉ!‹QøņŲ†hŲrœgŗ¹ Ō¤žÉ¼”ŗK&į± {bŗ_ko{w%µų¶²¶`>7=i‡ ķ{T‚ÖötÓ÷ÜĒadĘ7Ö߂õ‘”+±ņę9ūŲķĘ²”»Ųõ!Ū/VėȆG|»Œ}*üĻ}bHžŃ~RPk7.ęńVC.ü9ż„lu gHÆ8É„&|ślq¹fRwłäi–|ĻńCĒ:Lj5WÓśźM>"•8\x×Ešõdµ÷QH¢·@"äĆæŗõ åīuą×“ADø½9˟ø8Ü×Ī)Ń廳‚ņž8¢ŸīeG_Qźiŗ„Ź/”ć×~ŌmŸķWvAdĒ÷R°łe ×“ü9ƒKÓ“ą±[Köā\LN¶ēXŹ”­­ŗló\"¦~ņ⹈5 óĶ)D![9+ŌūÖ*cŽö0ļc[Ļ5KźO™„AØŲ¼­c!µ•ĒŹĀ¬Šé—ķzU“~uŪÜLytÉ'”ė>Ö/lm Õ Ždl² …DZ¤›Š8?ˆ^1šö£mØY„¾R^\—wµy֍ØŪŪÜ+Ł#Ęē®QéTˆ’čzܑ›Č`»šFcüG ՘ךu­ų‚ÜI"Ģ@«e.†g 43Ļ °…c‚2—-»óŖÖHm+‰Y‰ ķ^śU©XĪgIyawev^ehŌ‘×¹śV¦š®ŸĢĄ\ü»N3Ēzī5r¹õĻģįć[ƒÆOįNHArM·˜x‘qŒqļ_m[J°•fŸŗiKbŌźl/#[Ø%øP؁æ…|›ńćĆvś‰µ/ŁŁĢ-Æ\ȅ#Ą †#ōü+ĶÆŁ­9YŸ.Ēā}Tż®Ų¬W6S?;ŸŌgóÆŅoŁ÷ʶ> x›į_Ьķ໓Q%ĪęU*ĄžG¦}źa ČźO’‚gžŃw?±Ēķ£$^#ø_Ćżu£Ńµe*33ķIX28÷ĘEf>%¶±Óõ(ļ4§3iW³Ūøl†VĘ}ŽEnö¢{ŸĀ¤±K¢]Źa•~hŸ¼=Ŗ§ĘÆ 6££¶»§B£W“Üż?ÖĘĢź3IÉj’šVOŁbĖąæĘKĻųY’/†ž1ūFĀ ?čןņŁ72O8ź3ŽÕųy¬ŁEm=ĒŁĘ÷Ś9ϽnrŌg=åH»Ō”ŠRAō"”ł[„Ÿ-|3Ō4 ėø‚Āź"ó`Ų0Æ@?CX¦¶9å‡óÉ’żŸī-£O‰:&Ķ ‰ŹMģW£.ļPs_ˆsŹ÷)0U1¶ćĖVš}y^ڤš][Œ3«ńŪµ-³“»Ęœ~SĒå]*ZĘV&Š7„Ž ćµHņķĘŪWŒć­g)\®k²¼S~WœāžĄ¬˜| t©.ż՝“ŒTįėųÕŲ¤óNQæv§zÖ ¹Ń 3V ˜I ¬˜@wuÆÓßų%ķowū=~ŠxŚ‹ų²f]åŲm/f68ĘxüiµŲé§3ūŃżŸ¼_=Ž§3ÉlŗeüK*€Ąģ”™ķ×ņ5ōķģ0\2˰.į‡÷®ZˆÓšę]×öEņÜ2 –<åHįŠŒłWń›’šż‰—įēÄI¾:|;Ó,ķü9­ŌK$s3øąc<ō÷®7+1Åt?œ«lÆ“čbxķĆ)ĒŻą0ķł×ҟ ä¾¶Ōō›øŅHg·`Čįr?/ĄV2c’>³—Äž “XÓ%ÖÆō×žt6¶įŲŽłā¾iń_€¬b×5 [JH”ņ£Œv'@aĢ÷z3Š’„¶ļĆĮtĘ]ńy¤…«žößģóćX|[įiō¹üˆļķ„3ģwŹ€~ā»)TvŌU(+j{ķҼэH{f.=ͼQz³żk¾ ó*Óč^·ŠKK™‘īķĖqĒ W]el‹orėt¾k© ĻCō­ć.‡<£cŒžČšī K{¼†dyėQ\ß].»²ćōā“Hƒ“i’{„u“ßµmÜŚN°‰aǵiĖ„Œe¹ÕčRN¾H“lØ>žzOńśKĄaŽ"'äŠĶ«Mō2'øGD;ŌcšÕšĮ½æ»ki B±ĀœåG4‹-ų¾ņ]>Į¢€IĻČH=«Ģ“ūšź Ģİlą.+H0gК>‡gu” ¹X­×löÅy¾¬DWmŠŅƒÓ¹­”Œ%.ęž§G-¼Š°1?.:jßšõõų““Ę,9=#9Hźo®āĶ|Ę>[8ķ\ģó[«æ–Œˆ½óh¹™‹,)y!x³†sž1U“ķśEŌ‰§É±Ü“ļJEĮŽ¦ŽjČYø%Hõ­ĖķĀĘ ž[•RŖ x2Z‘—R‡‡^Iƒ[ø1ŒæÖ›āĶNóÄ2ŚĮh¦{ž\j8ü++ūCĆ/ā»"gh[rœcӚm„ÕĢL›X+mĘ1Ҝ¦m“\Ü`ĪøÖö­Ć†É£óXøŚ=}«bdģzĶĆŁé60žä#9݌r=«Ģµ­GNŌ/c淄Fąm§ƒļW“w74½-r&Q9‰öēę=ŗę¹&xīWUb”‡|®Aó#RĒL…åŪ+2<óüėFėĆr¬Ws3ł‘Ŗī8?tzžµ‡ĢŒ¼>ŅAę—KŽĢvš„uł³³²°“ŖēŽ•ŠLķ<|—P“pĻę•ä©ėŠå|U%śjĶnįs˜s’>”œz"ć{ÜĆńEœvŗ•¤Ž®ĻūÄ<žq^Øź>6Öü5„Ÿ„ąKT1D@*9 Ė][YѬm®œģ)†–/ˆÓxƒZ„LF®LŠ?ŪłŃČÅd/Œ‚˜FEßjbo Y%¼„ćBĪÆ+ĄÆŅZĪćQ±øĪüŗ’ĄsųŌĖbŃō¾‹+z×ęeBW XņĀ®źwQĮö˜X,žb ŸZÄó|~Õ'“Q¹‘3”” rI’õńZ–£§ÅnÉl÷Ÿ•¶€ żsU}qeĖ "{ĖšHŻ%cĄ€+Æš†‡ŖD—rL|ų”P£ėM®ˆ¤»–ą‚k9£žKm­øīē·5³oŖ[yŪÕŸĶŻ‚1÷jv7>%]cO“MšhĀ¢€@ć8åqßÜ]_<Wł \øĄāŖ1øČõ?·†Ö;hļ"¹ø¶°ĻÜ“iayyzšµĆĀŠ4”ń×p«XĘĀ4üāV6¦Ź8’žƒóūuŚĆ°Ž2sßéRŻ€÷]%PĮĪnp§8¬ķKPDœĀDdÉÉėT™9-cU„;E»n’Aā jdictjæ1Įłi™’ęm~W†Õ¹ł½ķ\ķäWz%ՔӀØ[k&2[5Œ·7ŠŠģF‰īØkĀf†ŚT#§\ōü%µ·ö®”‡N–IUOl‚pjF`ź6.ī#{gūZŒ`›ßxĀÖw’„Ō²Y­Ź+²œ0EŁž›?ƒōėČ7‚éy ėŠ†žŅĖO{Ó“ŗXšĻżüµ<Ż 8}[ÄI-ķŹĖ:3?Żbk³ŗµŅ“Ræi|÷f!éłU)\«Ø]hž"¶¶ø”yWŖē ƒŒb“§ū1HwŽĘpMŲÖ¼Š(ōÆŽ;-ź€@ö®FČŻĻv#`Ź„³øš Œ;‘ų¬Ūé3Ē*ĪÓ\Ī1ĄŖž‚OĖ%åü ‘Ś 7QA©Ō„µŃęø@øQī+ØŠ'ŪCtI‡‘€p?:ŹRWćĢÖ> ŃÆįÕķ`ÕdCi ‚%²~™Æ›üQ®hŅÜh×6Höŗ’Ӕ9żĻ„M€ģæ­kėDģšZŹCƒĘGj© )=ŠĮ½nˆxūQY—ŠŚÄ–ńŪW©nµ t:\śSA4Ū*\*ƒøóøūWā½"÷Pkkˆ.Z#r½˜VĆ14§ŗ‘q01²’¹ļ ōė;‰–5{…  ŒÓŠĮo ņÜÄrķĪ1ҼĒ\›eŌRn9g¬¦”‚öęyLS¼‘8ĮÅwž žēFk˜§ž8āvŠ‘éZ„aÜō BŹg[ŌäØćž r÷~ µHe±h’ó9ĻSRÆqZéÖ䬹‡‰ŽYJ}ŪIw©Yi¶fÕ¾ó™0OZM÷„ŗųu<ńÜkæŅ·’SkCūę8 •‰‹ČĘ9ō¬ĖQ=Ē\šż­ŒK5ģ "q"1ēw„rŽ·„é÷é}¢¬ow(ĶĄcŽzzŅ4å3eÖ§×ͽ„˜¶ŽM»jóŻRÖ{BęŽõƒŗ¹R{„ ŽšĀY}¤\żŖTŠ02¦~•Žßj6w?gInB[ē–<Yū0<ŸÄÖrj‚}4™br rMv1隿‡ķ-®”²•Vo”0 īiXĻes,bo;d‰ÉäŌ­J,RÕöŖgļ`eß,Ī÷’mŪņć„eMøŽń×wĢ“ŸZģō_iQ>Ÿ§ŻĘŠŹĪ# £;³Ó5ļ‘źśŻŒńŪēģL‡rćųČ«ę%Üņ »¦¾½¾n<Œ|˜8Æ>šõ“žŗŌµ /˜éĒ?ŗnJņI>½źŸFzŽ›wcg¦Ķ,(±<§Ģē¾{Ö @ś…Öü«”å³Eś©č§MŃ4جdy„ŠŲ܍„ö¬éʁø<ėŪG•ĪŠAm½ėAÕ t1µ 4šńŲJŽJœ(ģk«š…ōzµµėGsgµą#¾Īq…č K±ĒkZ¦ƒ­ė3x`M’U]ī„t޹9<™#ÜE9{yF<¾‹ćAŒ„ŠÄŗ’-³Æš7TWWsźr e²Z BMA4Ųdk‡A0㮯;ŌÆb»ŗ7@d˜ćځ§b­Ī”ēµŗD¦5TŚr{ūSķog¶Ł:–° Ž ę‚õg©^ųĘ+Ż9-–Łęæl}ćŒÕV+H“cwpūV ņr;S.Ē;™ksH?xx>µ·¦ŪK§ĶŁY~ĢNJ€ŅŃ\ź÷Rø…‘TuŪÜ× ©Ś\¬„ŪĶä6ąKvÅM§ź°Yj1ŚŻĢrŖ½{<:=…ß—" sŒž3š dµ}§šŲĪŽEŗ‚8Ķyę”<†ś#nŲU',x ‘—BKÉ£vHšQŠ·µfŠp2Æ(ązP„÷2¼pĘNÅƒŚ˜™VŽ@Åßø«†ęŠZėž'¾“Ó§Ó¢D3ØRøėŠół,į¶Ņ®fGkv?;8ēéZ›F]MÕ®by-•¤a×s–©¬õ]GKÕ¢˜±!Ū•õXŠļüYt—Śu…½ÖŸ+E3+å›ƒĻ’Z“µ/Kšö“¢źPm)Lä·ūXØä#½m6.Ÿu­ėkic.ē²ńÆ ž=7QÖuŻ>,Ķ)~{Ÿ’V(I¢y$zlÖwPŽÉ ó7¶kÕt‹I®ćS³`_NõO©.,ŻÕō}J*īīP#‚k„°ÓgŠÅ{‡•ńĆ1느±BņŪ°qXr[Ēsu²?•ø}Žhß[iö1Ü *>]Ē'>µ·gj.–&i\ §¹ę¾&’Ć\œĒb„<§1Źp@b:Õ]*źŅ+–°¾ł1Ā:Ó5:FĪĄÅl±“j€ä±n€śÖLāÓLøu·šƒĖ į½é…Šwž!“·†9U·DNÜc‰õw¼Ŗ~é ńZÄĶAž·¢jPÉ„łܘŠ•?7zĢńi÷æaŌ`hŅhɉ› –ēō?*«””Ōo­%Hm¦Ż|ŗõ Šõ+ L-…ĘIUo™¹ą}ió­vŚŚŚŌˆNį»z€zgŸė\<2[“¬Œ|§#üę¢o ¤ŒRŅ6t–ŚR?6Oņ­­e·‚Žg…Ā?Żbæz²0:褆+/µ}§ēĪ cØ“ĖۈVĢ]B®GŻåh kå2Ü<¦EEݜc­&„,+a™XpcAJ7%Š“ū}VĪc$QyčŲćœVÜ~ņāżŻøņ·dįp1y4ķ2Ń%e_'pž•Łź“ipĮ½„Ń]BœBqōēŒ¦ŽWPgŒ(QŽ•oI·“ŠE–į6=94Źt·Ź5l4ņ$‰@óAę°5KŪ]"Vö§Źś £.¹Ū·]“m'žę¼óS’ā)„}ņJü‚zSéŽŅŚDkŸ³dF7°õÆBÖu«­÷J’ŅŻ#’6< ;HŸóĶ*'Ķö~Š]GO–Ė̊ą„8>¢ŗ_xWAšŅiWRJņŻ\.0Ćw\ʐån…ØīśĀĒĪY(¾ģdä “×ĄČŹØzœņ*ŗŽęļĘ×wšŠhcæŽŁHF nǦzטj+KŪIEœC1 ®TŽOlō«LŁ= ›†Š8dFŚņŗ|£Ņ³“%k»–ęFóYƒF¹ąq҃oòw]NA•†ÕÉėOŠe–T’ō„Pzv„(ÜĖŁœ®¹¬E¦źṘķ*ņm1…aÖøK»›»Ū©n–E‹*į•>Ģ»VŹŅ@Ķ'ŽéļUęei£D8;‚ŒŽõf-Ž›l–±G$<²6yĒŻ¦ŻĒotÅK+Hģh·e¤­ßŁÓH9'„{f§ŪŁÜ6—®Ķu,YXŠ}ęĒ ƒõQv6C„ńŽ…į},[}„;»©'q'Óó~«„I}6×YsĘTā“U U[£€ńʗq¤X,Vó?Ųs½€9®CĀŽķęD 3ƒøœsŠNf©čz®ÆX­ŌPŻYĮ<_wi ł×ā߆zfÆ«[Žé“] –rŃY©Źrzža9#œ[O:G²»pŪƒ^į¹[J¹Š;PÆ `õ ĀR.ųÆÄk}#5ӑ4‹åFÄą)Mx¾„ā)ZŻlÆ$óŽ% ¼ ļAƒ<³U‚óRŌaUPśYĒĖøē#ŌtÅw¶×7–æfDŒ[ŗŒ€Ķ-ŚßŁĶoØZĀĢĆfHčO9Ė^éó$öā?1“„Ī:ŠFś„`ÓĄ“¬gt¤Ž§ßŚŗ Æ Ē®Ē Öœ&œdł-µ¢ę€'ŸEŅÖ+”ŌÖÖąA+!Ėö{ח§‰,u[›ķD±ø·ø¶;~xČó2?‡Śž_3j&žQ<“¼īĮąZPKxŠŻ!G7 j濇i#ÉaÉ>µņßÅ oé"·{™}Š7œ@A1ĀŖ%ū$v~³‡ā-Ķī›ńĒĖ£›H÷Ŗ)'rŽĶƒõ®ĻĆVz%£ÜŪhŗˆŌ,÷±Y™ó¹EQ›¦uWvš>„§.•1Żj.ŪĢŹOŹ; V6™švśÕ$Ō5)Åā³LŒtöüh#‘#„Ņ“C”YM{§éĀŲå±ĶĢ?żUņϊ4mž,»ø½¶’ŹžFĶŹ‰ ƒ×éE…ds>-Ń-¼aæ£$ļ²pŖÆŃ±Žé^·ąæ‹ ¬č’Iā}>ŽĘ‰‘š?ā__ņ+HžVĻqŠų!|nÄž/æ–ź’,BŽē=y­#eSCŃ%š—†<5¾ö=Ś+ąIIć\p}Gzć¼nņ [ļ±Ėz‰µc @1’ybj£isĆ4IdięūMć2üĢN9Qķ\Ę·ˆę¶–YKģĀ©ąÖ‰<1£Ķ»Mjį‘Ė’:~“Ó±ŖžŗœĢ -b“HHµÜYFÜrzÓĮói®šÖŠ)€ø,ÄäOšÄ\õĶ^ŚĒU“‘Ž5W‹Ėpõ?Jņyž wX¶ŌEĒöe”cnÖßĒ·z›“ȏJŃž\ųFŽēSÕnnÆŅDŁI@÷qךå/Ūģ3Ø”³žJ‰FäÉXó­wāåŞ¬,cŅŅ;eŚ'•›ć®;×CÅ==ōȕéļ‹HĆäQŪėIDZm„üPÓõ-:ōjĖö‹āqavąś\Oˆ¼]ØŪi—6wwzt2gĢ16Ó"śj“ŠP9}*I‚›¢›NÜc9#Öµ­õĖxāø2Ą®@ĘsózdœÜēP¼™¤¶¼k[D`ĶōĻJč gņÖX¶ĪŻTgļĪhG¶ŁK„iśtkØÜĒڤ"0$“ĶqŚ÷‹ü4ā; ^ź6ēąghķ€?JÅ(Üń­_^Եˉķ!Cl qĮ®HšĢŗ\ĻĢé™0ģc;‡#­h™<†f· ÜßĶO¢4—'nFįŪ5›©ų3lk½¼±ØĮ݌õ¦h‘”geg¢["4Kö„q'˜ĢxéŠĒ滉$%+3nź&h¦i[x‰ŚŹH%%ć–ÅMmØŽ\Ä^ŃŁS)ėžQźC“9 _R¾›–[†`²7jŪÓŃÉØĄv2ņ£ŽßćN+BL™ī'Ó. XF†ą${VµŻÓ’b^›‹9D2!®G­ir£˜~ÕRÖŚx¬‘`œ”Æ5»qÆLvĶ©ČŅJGÆZظǹĄjśĆkSłWD‘/ qŠV4w/ŹGjŽ`ݳ+@hwwŪˤŒKĪKäp=+CĆQMQÜĘ#–TļéX5ŠžcÖ|={5ō¾UŌ©ń­zLPZAńŻĶ©Ć+ƒŒšĀKRāĢ»;Ū]"ł~Ļp#F“å|œ}*ī«”YkZĆŻż˜9Ėįö–&®:@ņ(ü1¢č7W³¶¹Y›k™ŹLóŅ­üFšĖŸ ŪĮį¹w@ģ…Ņ4äpkhĖ”„‹ß³ē‡|Ga©x£MŌĆcˆ¢ķ‘ƒ÷¶üUē¾9ųuń?jŚ­ä'E`DrW<æW.®āh­ŖĻ}ØŚéś.«4“Į £ŠWQįK8,mnŁńøą–Żģ+žQ²1k”ŌÜĖ¢Ck$0»LTķ*Ų9’ ņ;°¬Ó$.IćŒńY ĘzĀbL„,I9bzÕ(ļŚ į…šøļŽ+XČBÓķšĆ8{yāĪxē‘]L³YApĶr‘ē'i ÷«óŸˆ›=üņĄØčĢŁ«WGįm3L6ń“— kvģ< zb™ŒĻqŅtu4± UŸ*9$šņŸxf j©ÅŁ»u0Ø|ą_š«†āQ¹­/Ä«ŲžĶimck„ĮQóŒuśÕŪAŖbi¤w‹Ž‡ÆćZRæųŅŅ8/ūMä!Jņ2{Źø·™Óc9mŹI®Č&J™×xwÅ3čW¶ŹŁ¬·1Ÿ•ŗ2ÆzżNšˆāńއeāxå†ź6A:ø ø^?•jg9]Ž™$ҧ› łzd’J©ćO Ūx§C¼±ø‘„ĮÖAÕv‚@S\•ŠO©š[ųN×Pšķ‚D݈ĻL0bņÆEųo}¬ü/ń†™ÆiŚ”éWwĒ{8VL>āøÕe{3×§”’i߆_ŪxĒzI²ŗ‚įRāX£_•$CłēńÆéóž EūNé?µģ« ųCVŗųZ^/c}ķ™'Š>©źTæŠŸZ苺hÖ[„ś,ēEÕ-53ĖxŪ ’JśŚW]Š–ī2’[ÜFQ²2Fó©lāŖ~ĮN~üń‚Nšnīķ._WŃ.ĆBĄ1d°<š=ėų—ńī„t]BźōūĖ`\£#Œ²8$0?\fqT‘ä7{ŅuY²Q‡ž­+*/.sӃõ­N'»BInlŅ£¬Ÿģō§¤QĘßuXc$7j†u(ģ»T£Ž–kˆ„Æ 0ĢNÜōĒņ­`D–‡Zŗö¦ŠŚZE$ŠńŖ9>õ”©é·w`Ž•w•#yąV§4Ļ:ņ_PԚ]ų#?Zź¢[­"8„UO/$:õĻįHŹĘ¬­ž§†6wœćŚj;½2ę+H™„œpAČü()Eu%Ņōł’åTUˆąƒėLÖōoŽ ,LI"°-ī(4QGMįfæ– ‡‚ ʃfCWO5“ŗUüšĒ$ņ.ŒH1Ÿ_éKĢ花ÅišRh–&X.£ŗ~U›®x¬o¾Ēr„NfĪåČĪ LJ0“‹hõbk+Ā˜]ʁŽzu÷®£Õ²yŸzŅÆąÖ"T¹a7eŪYÖ:ŗ±¼¾E¹¹ ęg+NAI_CÕ.µ+MsD·Ō¦†s¹Wn1é\PÓtÉ#d·QŲåN)ü(Jź4ˆŽÉY­•¤et š=kšÕ!—kÜ­¹II,qš™2%­¾”;;<ŒU‰ēڶRēTšXR'g“#ę$õöÅ@“5.oÓJµ±¼²ʁڔ¹–-F}ˆ›€^œŅ4ŒŽ§Ć6« Ż ń"Ė’?Jź59æ“.žäGgłŗp”Ńgyž‘¤xAļn-¦¾ŗT“ŹŒ«æ•y nõķ7N°¼ÓMŽĘ$r÷Åj– PńF¹uhÖp[pøt5ę:oŚ »Ž#“ĢĻnꛈÆfzżī”Ś×‡>ŹĢš\,ŖćkcĢüžµ™gįŪ.xäV²üĄßZŹTŹęfß‹µ«}oJÕ#•JĮņÉ \¬ĆŽæ•bkwŚ:Œ·ŒŖ„‰lc…ĻaY{1¹³:?82*1ِ@ĘqĶ{®‰ö)ąŽ Āßhų“ZÅŪcHŻńiśe‰†)äH£μ\Ö-/Ś5ŠY'ĆI=Ør Ś}Œ€#@ĆnzcŠnµ¬Ühŗl® ¬³6ÖśTXÕHó©#Ö5fVxķ –Č8ÆešG‰eŌ<-q¢Å¶˜g.G8ČāØ|ÄWWZtŗ]õ«4’hU"2½ ćÆė\•¦a™Ź¶ī£¶ KEś‘꺇ڒ<Ŗv€Zķķ&IXĖ9ß&Ž7V|Œg?ż­m«I<ˆ»²Gö»klZ„€9ĪŽsķDP Ńõ‰Æµ{ *ĀŚK„Ā€?{šüėź/ģ ]2Ī{thِćå±Rih“ė öy&»™–8P浥”:„śŗ1‰÷ü˜|ĒzĘR±qÉ¢Į$ęŚNC޵-¬šĒq ŚŲš“¹Ń<:PROs[šžŸ-ä‹0 x­ĒO“»ƒNE4±‚§·½iĪĪV¬E}¦É«‘°ā d.3ŠƒLšÕʝ©E}sšŽ5 Æ÷æĀ„±Ų¹y©ÜŪ¬.Æ"Ś«p=+œžöKł¤•HīÅ#9+ŒÓ4=Rų=Į>^å-‚r6Šō?č‡MŃuØ%H„k‰w‡Q‚OØü«DÉTĪ“IÓķ“čdĖPŒŁéӚmՎ®Hč‹ ²Āx­'ŲÕhGā+k»M>ĖDŠÄ,2”0>§Ö±¬5|5j‘Gl°…qP\c՘:§ˆŅ’XmJŚ%µd]Œ‹Šš9«:gŠ Šä¼Vą\ķūĒ”¤>CŻt-jŪUӚXī"šķ^%ź­yˆõĖ‹ĶtYŦŅĆēūø4X‰_c™¾ÓEÓ¤±žń”ńšĢ’'^X«ē4É2ą•ČR ©ĮÅu¶Ś[j"‚PUNU½ė$ģmk—#žŠ‚ąĮ<‚éxćīŠėķ­¬³Ų#|ņkDŹ9i–‘M¤=œńŻ“Š|õĪD|Ÿžµ]šƒ‹+«*"¶‚£śÓK\°¦ŌīļcŻC!Š|£Ü× ¦ųóHhāÓ×zl£9œb²ä`küCk{Ķ>Ę%ŌbøāT ł ÄtÆ’„wR¾ß-•³Ī±ņåFvŠ|Œ×įó>ƒĻŚ#īY9!rqŠļu dĻp`‰‹Ŗćw±«åčdŪ¹‘©\^ʰ,£ }+ÆŅ|-a©hrŽŽ_ RŠX³p8ģ=źyQ¢æSGmüč!œ\\£įˆģµgT°^+yģög€qŒŠwC8=dE§źqXŚyn$ü^ā½F’ ˜”ˆŽ«Ü÷¢/@:=N':ą„łЇkÆ-mā{{"4Ļ»÷»ŗā‰æöd°^5Ų~MUšIdŁ&ŠČ8éšJc=?LŌ­³Õ.Gīߍ»»{Wœų‚ X/į‘ y„‰#ŠSęź#“ÓSuŽņŃ© `g­&™töz«Ü:‘ˆĢxģĄÖM•srė^³‡N–ÕŪØj²Ē&2 (8,zzō”“©[Ėa‰0*Bb¬-É?‘ü«Ńt-fāēLKKĒłU‹)&Ū$’¢¬‰gøµqž"šŽV[D’,łø  ń¢}˜G¼(Ēv„»[„°TŽ e‰ĻßŪÅ±É k«}V7’0؉ę#œöÅzN“āķgÄĶcsu$jøĮĒZ”YŌJk{RLė6Fõ9Ś­s×zźŪ­½¼vrīćęģ£ŽXčVk«Ö{t9Š4 Ē8“]χt‹¹b2£ ø-ך˜÷*–®ŸQn­$˜FLy‘Jł®Ńå—VÓļoīŻĄ<§åopGo„Q±ōV…yoØ$qłr¤[°I{ž¢Ŗźz}§†µKĶVŅy¼‰P|›øéė@ŗWö6³zž%°Œ=Ņ–¤=x8 ŸĄ×U«jŚ”+*+*šF&½ EÓ“ė[#~Ė4N†NG óĮüŖ¢Ķ…|—‰ØĄ<“šéT|KŖāßū&0ĢüŽōJŻōoųvąiQ,Χ|{ČSŅÆŪi®©$PBņ<}qĪHÖs.”&›j—kÉQŌ –oŻÜĪšŽŽ•Wl¤j>諌.h©÷9Éü!„Ä®÷Šv Ųs[>ńō–W:e،[š±Hjł2¦ŽęļXMNŒrŠįHéõ®ņIimžĶ#B€9WŠĶÄēq9·\›ĘO4Ø'ÆŅ“`¾ŗŠ\#nFÅ%¹q‡q¾#ń;iČ–Ņ4"ØlW>•„u©įWJÖīųŽy­—‘”×k—kp-1½ńƒź+ `˜£ © «v=©•õ1ŽĪÖĘq8U ĘI*¬Ö3Ķ}ؐĆ4o&#Čł[@üé\ŌōĄėaįū»Ż>(ćb­ˆ€2GįśÖO ‡U]k7ņķį‹{ę ī) 0Æ“VøŠe…ŒĶƒÉą×#£iɧHļq÷wtnŌč[‹ū6IhĮ<µ4Ž#·š²F—@Hģ§ä;N848ßr”GųkÅW>/“Ö,dXÕąĒ 1ņž™üÅlI”Įu½“°sŽN3PąKÉų«Ćŗ–§Ų’fOoŖŪ“›%ł¾h’ų¬m>ĻQ“¶¾ŗ6ė6ÕÜ č×ėY“fąKįūł5I~ĖyfV µzc>µō?†4vŠŚėS†(j„tĻ$Ȥ8ĘĒ—Üx d×·Ž{ ’būėŠņ_ŲĆa­ˆķŁ$‹`ĖŖ}(7P¹f%ūu»A+(ć«*–—˘ndmÅF:ž(£b]KC2F‘ Xōžļ½[}iŹd*v±ĶmA¬$"Żc b˜õ9®9­®¢ŗ Ž ›€©õ«ŁéugpL‰$Ł ąŽŚ»™õ‰mą‘aQs(VLqI°9 JīVŁœ*ąœz¼¶ūQ“–‰ĖpFkv!,õ&Ōo “Fb”³ŸA^­>¬., Óą¶•ž1÷ŗā¤‰C±†ŗœPį'$ŹÄ€=ją¼ßfąI»•'ŒPO#8ØēSö»‰¶ä㜁\ÕÖ¤£ĪX›vzq Ńhv¾Žę9Ų2ßķĶ{ģ]ŖA/Ÿ&ŒńŚ£œÅ³Ī|C„:Uİ$­y+mąą(’ąōŲ䶉 ¶Œy±<T¤#WMšmĶö¹ öŪé[Ö^I‘„¤#š`tÖŚŻ•ŒF"© ČßÅ\Ÿˆīōvå„a$M›[Ó"‚Ō0ÖõǶŁ+±SƒŸJĪÓŚėT–-ƵsžFh+õæ·jŃŽńYƤ—ŃēīóĶp±kw/ēMy.āIeĻéTĀ-ēƒõ7@Ȉ! <³ß>õź^:–Į“KY®-”žxų†ŃO§ėYĶDxÕ¾¢·’ ر’³żŚē|Ei¬,Žl¤µlŖšÉ Šéō;=NŚŃ`ó“"ģ9?{ŚµÆµKų¼:ž Ōķ,²¬n¾ÓĘõoB}¤™ÅŻĖcx’Éoˆ„GCXķu$p”ŗdfĪ0­X‰4ł°ņ,Ø +Ÿį5­gÅؐÜI¦2÷öÅbź–vė[+ ņŽAö¬«xŠÄŹT|£ÅWūGŁć „wĻn+JŅĀŽK…Nõį°ŻSÜ쌲H»V@QUāÓml-nnęó>Ń·ä»{ŠAĒA­ėśœW6V°:d'÷ˆŁ'žÕō¶•­Y_Śh ©jČo„"9ŽQ÷1ĄĒąrŚįÓ^yÉeŌ”>ŸJņ»ß·jI6ėj§ŽzŠ\71|O¤ZÉb¶ÓĪÜm‚§ų½«ĪDŽ΂²ź¬„Ņā,c ŽæÖ™ŃXóū×Õ,5(ē†Ļķ0DŪ™”nżjĘÖÆ¼KŖkX°œé±Ä›Š£ĆńŒ ž” Ķc[ähn5#Ķ/Ģ\©Ė·­u/o éšĖB5&)Śćłō Ę[ė~4×õME®n’é,ƒ ßē’­]š¹žŃ† eķdp£§ó”“4hĒŁŻ ŲҦ~šė]%īė¶h¢ß(Ćmćę¤fS¶µMVw›p“v<Œci÷®wÄŠ4Ńör3Ŗ2— rž ØK¤‡ŹxŽås܏Ą×„hž&Ó“k&H>ŚLlił³ō¤Ź±“āZ-jcz ĆD«æ³7«uÆ?ņ’³īÕ¾”÷=wǟš¢įc&ö‰…ÓƒÉĻœUYt'ń™&§k#G$ˆœfśSxgLŗµB±˜õ¦Ó÷[ėG‰Æ5ø”’ÖśéV×IŸā‡Ö€9]L†!<–pI#v¤Xśńł×²A¦ih„—ŸbøP1 ™4 ņOģ9ÆõÖŗ±¹7ēĒīģ=kŲ­|ĶĪ Ūń$VE„{˜qŸzĖŚyĘ77Ÿe‘%PĮŹåǵyOÄχŅYĪm`» XŖõ” 1±äž š†™5­ø’t™eą õ÷Ƌ¶Ń“ė«÷™`pĘCÄ‚1ŽżŖDp>ė–ZŽ”qŖėr^ł²™vŗ' ķéYæ< ☵ĶƖq½–v›žg9Iõ«H»°hĪŃ~Zx}–ŹĪq?˜ƒ2äÓ+łW¼‹Ļ|:šN§7‰m”xv’¬\eŲńž~¦”šDł£Lż¤uõĖ]/ū ŽėĀ1;Åjl‘yZš_ßųÅž=Ž;”I(#ģķžxaZF&ˆś7Įæ³V±5ļŒļu”¤1•BķbHž#ÜW)„é>Ó/ī,“]TĄˆž[däĪ YœåŠ÷ hshŚ\™āž,ļ,S;—Śŗ­Å0j>1»•„Ŧm:ī¤ PņMĶ’‹3š÷ömŒZU•½¬O/īœWчOzłĆ^ƒJŽ+Y浞Õdņćr#æ§JŽSĖ!±ŌįĘ éV£š¾™¢ŚżœĀĘJc‚¾•.(ÕHč®ļtO蚇&Ó>R®BšŃēŽ?:ģ>ü.{źC%Ķ֔¹™h°1מ;ŅöeJ]Īīž;=žF“’køå@ĢdŒaN9`3éA±Ė|Wų§h ńȳɨ2’1ĄEĄÖ¾mŠü[{ā[Ø×ŹDIī‘“€;ʁrÜŠ<ż·e]˜y˜_~†°"š„Vzh“g3\®į»ćµ¼ˆ¾ĒZh6v³ÜĻc›i$.Ļ(½sž$±Ü„ óŽŠ{V‚”¬yČO0­¾ĘFĪ3]v“e§i¬Ņ“+0ÜŖ~l{Ņ9äģHś…Šīs'ĢĒxŲč2“)#B§kšü}źĘ[¦śĪˆ"øšHd“d*A<=mų©Æo¬E­­ÄpEøołˆ„T›FV8DøŌō˜ą‚K‰.3øy¼‘ZSėz†«lŠ™¦IŪjŒö Ś2źˆ4Jk›„·½·fvyĘ;Ö¾œšķ¾‚Ė_£Ån±ćagiš{C(ź6ŗmš—N ³n,qĪcXZļˆķ.f{kėčḐ|”æå”&óœ|žµ¹”Ż˜ó€ųČØ ŅŻʈ`Ū’¹^ D»¶P_ Owt<·’GįWØÉļ\>½į-KIŌge/,Kņ°Ī0<ÖqˆŽNūl“wē„AžŠŗĢ‘«Ź8$t"Ž].ŖĮ§ZZŪ”…Q~r cžõĒų²E¹‚ę->X껈)ē”õpdōg€O ķµŠø)(ĖČ$ õŸ ˆ!ū<ś‡ø_˜VˆĻ•ž§‹.iā(n(zŒwĆų€’oźJ÷™šē9,zž5¬UTlhŪxßV„F łĆw&A­]WĮéįėeŽmˆĢž÷^=«¢;‘ū/ūBžĻŸ 4’?ˆ|1|tŻR,Ė-»/Ź_ŌÕłu-”–ÓH·¤äeō®ł$¤ŃćĀw!–'*¶²!xŲ’;WÖ’²ÆŽ4O ųŸKš§ˆVźēK˜•·ƒĢ;$—¬®vFŽŃ¼s¼B±ĆÕTAęŗm?ķ6÷‘įČq†\®GŠ×-MV¦ŠŠ>Wų©ą[ĆĪæØčŚTך]ōfY¶ąą•JłŽćSÕ§Ń.ķŅĀJø‰˜ĘĆ×ÓłW¢Æs¾œ¶’gOéßžźß5«™fń6žI%įÉĒ ’“Ö½ƒž Ūńė]ż’’lļĆ©H¶^Õ¦:~¬”ˆÜĄW*x#$WM(®k>¦éßCū?ńtQĮsåƒDŚ}Ņż¦Ų©ČŲÜćC‘^ĖšłļK%ŽPFÄF§åAĻR’¾ZųĆĮw×In­ŖY)ø·l œuS_ĀWüoös“įÅkŸXÄ-<1Æ<—®N!œ½Oa’*bÖČóźS?!õKO.i®I—ē`ƶ*„±o#Ėu tAčrJ• +Ņ īI 9£—åu(Gńy#ŪōŖ]„häŽ&^˜eéž’Ź£• ŲGŁĖ_ŸóšØī8čN·ŽdPįŖĢ«&õ·Ü7° •<ŠÕ.‡T$u ņ„¼¶·×öŗµ“ŃĻń¾$„©ĪS¶xÆō’‚-~×¶?µĒģ”į­:’V—Sų•įT:n¤“°óä‰sµ›ŌķńÖ°’¾‡R?Wµ!÷”ī܊ó?X‰,äœÄw`ĘäÄcłf¹f“óoā†¢ŅõŻOL³ŹĻ›«yĒńn$ą}?­?šPƀVž Ń5_ų{JGšÜna8Č üx>‡” ’?®m¼†Tx„+Žpr=1šēo>[„(ĢSckŖ;“‹E ĒN;ÓcIE&WH–ŪŽõКŲĪäń°q·rī9ŖĒÉiXv€G“ƙl$R,;:)\ģtb>Bp@4ĘBŪīnBZČŃ $ķģGÖ¶ “d9žIY±…9ā®×V6§#ļ’ų&ļķ'ģÓńś5 GS“š7Š;=NE˜į$_õrmŌ<ÄŌg†Ń@%»7=*[MFėČxrĪ"ƟBn+½“¬į9&ŗI5T‡~^GSź*[5+bāźhęĖž<æZׇĆóźq¤’+­²ž„W ’éóˆ#•-Õv€qT“½õsÄ$nW<Ļš5æZŪųlŪ5Ōk ކEn…—=Ŗ½Ž®÷ś÷– Š»<·$ņĪ+De*g›xv įæYī™V#Éõ»żnŃ^6ĄÉN1šdrō8č¬ķŅź?6įm©†©ėgø¼"x!xĪr¤p3éZBĄOm”6Én–šx’?JAĖŌōmƗJsm9Ż‚xę¹­^‡Qš(Üc÷G4—[—ōļ ]NŚA†6#œņ=k¤×<›=M'v‰ĮP„ć'š‹įŲJ‘Ki4ƒvqŪŽ»żnŚÖĒGg y1徕xÄp½ÜÆ,ŖŠÄ  f¬čŚ©ÓuČÖłY¢WĆ'LŠ€=STńü 4ō•ŽĢ)ĪŃT"Óå…”8W Ͼ“*fN”u3,lP½8¹Łī’’)ŪipJóŅ‘”†ęi pc•Ļ—ĒŽĶuś„×–ˆö“M„US·åJ2’·„؅-Ż 0iĒć^]£_®Ÿsw2Dcg8Ē=č&R¹{Wg˜Ęå ”c=+>oµ\¬e Ø ņŽō§…–KČĘE1Ģ ofćpöÆX±Õ¬“->x‚¬ņ„ćæ4Ņ4‚9;Čɤ?u—$rÄ×¶všŌĻ;Y*©l§z,jv0‰ķ]Ōł0pµdų‚9µČ¦· CØū§Ö3A‰|= ÜhqL’J]›pą–$ēłÖd»œ=ĮFäüü~4Ó±×čzBZŚĶē\y³oĀ)ķT|O®\Ziséū¼ˆ¤Ą“jżįšW ³É,dÅŪKå…Į÷«w")vń׀) ²¬zwŪXB$0;t&¬éšµ,·ķ4Į#_–Ż÷±ßńŖŠ)EžæąæŽ&‰ßG—Ģä@\š:T#Āw:–«uy§Će /¶<|Ą1Ļó§ČĶÓź&śĀÉ^ŠÄy|¬koĒ¢4kØĀų‘H“aĘź”ŗÜ<;qmqö­bĪ‚&l18ĪkhŻOhĖ«1WBJ®ć‘ĒoÖ¶Š58=CWkĶFiīŅ<±ēgö®bćL†KŌæĖ*ß²™e[Uøæ½Ól-„’ÖŚę>Ģ3Ųž„wvśƒ[i²G…eeŚN3š Ļ.¹»‚+ęķŗŽÕnßUYo ²·1HŒz÷‹ņčĒĮv‹ĖrU·ķ ŹOņ¬ Ż:ĻĀŠ“q1·įŗę‹«uc˜¹Öę)%»Ŗ8#µ[7×s1ŸŹŲćjāĶc±™}qž«»sÓ=+GĀŗn§ŖėŚMŗł£Oe`zoėųRqŌøĘēŃ·R]jVv7ķŚ3*œ=+ēÆy‘kzžŽ’‰. a•¹ŪķI; ƌśŗZ,pĘ[ČQ‚[½Q¾¼µøˆŖ¢äx5¤]ÄUÓ_X™’ŃćŻ ž=«ŚŽ’ļm.”ŖĶ”"ą27l޵C š ·öeŌņLąy¤½+Ōü]¤ŲjÖØ–z©‚DŪ"Ģ¬N:śR5<ŖĀśIõXō÷½ĢbO.@ąŸĘ»ŸiR4Aaw”>Q$cļ~”®gfyŸ„ķµj“źW±¢2¼EögvF?@k×¢ńŹxfÕ.<ȧŠa…FĻįRćfZ¦q«ćČuw•7¼X•«ĪÆÆ.ī¦Dyw¹>µŗšrŪBÅ»:ØD;rpw čģģ–leŗzÕŌ:{-ÖėŹøŗ»0ŖH– `ōśWQ­hv÷lóYˆįŽā‹UĘG˜6—-ÕŌbP>!ŪŌ~“.—žy¦J­ņŒżŚ©IģŽ‹ŗžŖĻ%Īȁūøį«¬×4Ķ4YÆśS[‚ `Š‹åZµõĪųģ†äU$ē9Æ*ŸIŗŗœ¬hęRpł<‚+X£Hù„i§j:[G}onĘTupź ż9ÆZ½“koŽźVķäI!ņŅLtb9­;³<ĒĆö>%½ø³‰™ä·lJ俎3żkŅõĻźÖÉ4xŅIFląuØåīĢĻ_-…³Be‹¤‘÷¾•‹¢ųK­Y¤2Ӏ, ¦I4{0öd7:Žƒā¶tŠŚąy„śž•ļ«ĒoįŪ«é¬e»øŁ˜Ź6V.™ƒ¦xU戏ˆ"“676Ģ®AVCĒ<֒Åyl‰#Y·ŁŻ‘ŌŠ—{2+¼ūė½Š {b7«cæ§ņ­&K„Šyö‡‘A)Ē_j~šÕ>ćnu *K%5&]>Yx™O<õĒæʲm¤Óå¹¹N5ŗdĮjI2Ī7ĶÖŪ’GM¬ĢpAļYŚ…ņ5²Ż¦v¶„zÖ© K”éŗ®¦OXē@‘/ŽÉé\¼ZÅģęāѶĀ܅ĻŸ+#Łe†Ÿ.Ÿb$šHćTbXƒµé֚tµ”Iq3m Ļ;«ī>C–Õō{ 0M"ˆ!v>ž•kŖŁ­¬Ēž1”ĒJĢR‰VēÄ7 ŪÄ»#S”ć>µj=.}]^źź]·w9$įėZfg8Öv7Ó[ÉpŠ ä/”©õM&ÖkTøS±Ć€«ėV}Žœęfi3ĮU[UM>eoó ūĢ9ČßNd¶[…™|šĄmõؤ‘ÄjɒķéŚ”Č Ä¶–V‡$ŽOJæ§źĒMó”»HĄĪžMO3%ÄŚƒÄŪĀnžEXńøÓ¦ńL:œ- ¢³ČütĻåV“Ż‘ČRŅģę r¶Ųk®¤±Ē5ÓėvséÖz]Ć93¹™„śUb߆õ»yåu¼11:Õ×/, œÉ¦Ā »FsĻå@'½‚{ĖÓs#9Ėg‘ĀÓāˆŻÄöW‘¹'kvj ęf5‡Ł“V¹Ž[u—r•ł‡Q\äW…|øÜr8ž/­ēe›]<Ō{‰YžQ“0ČS¼N–m‰tm>Xįϑӄsäišn¢dœŻµ¬É(ņĀ/śĆŸ»Zw“_G££ÅrÜŖ€Žp1_¹G@ÕigKØÉŸ¢įŗšõ‹M nāŽāIäfĘG?v‘!saä4’»HĄä~ŸuĢe”–Ū‚7r:PšxÓOńˆ5MCWq ¬ø@0w™Qڳ¼9įMoCK™õāˆ›ƒŖ«¶FyĪ ńŲŲń® ŗ¾—³*E`G*ØǶMqsšwN°Ŗ~sƒĻOĻ4=‡^kš“±G2:Å·ĒuÉÆTŃī£Ö4½9m-’+d\±™ īOåAŒ‘bm5,3pFĘĪ=«Ļüf‘Kb0Ļ™8ęągśŠD_C/AItdimņŸ)±Ó#³-µ9µ¦¼·žĪāŚŁĘ ć÷Ų_įėQhęa½$;×{Æx¦ŅßGgÕ¢ŽxeuF;2rOoCšóųÅō=I꓈2;6Ģ.01Ž}jŽæ®ĻŖŚ»ÜŚ:ĢI=ż y¼{fi™¼ß»Ā¼BēĆ··ŠoĢk %pĪ(2“ķ;I°Ōnō‹HWO‡h Ŗą9’"¶ĘWvł™Ųwœ€=«)Ęč:öæ{w6­c²·™Z܉>šśzשI j¬¶ŸŁ×ÕQՙĄ•Ļ TõėC °ŪGˆćhÓ+‚ĒŌ×ć="\M§źZ¼śmĻ”R9ć;Gµ4ģ›écHšĶ‘Ń.5v»Ö˜¼ęĢ“ąöÆ ų½ć8/­—OšŅ9bR®z?Šū֐6‚ŠłņĒRh.4’:ŹFVQ‚ ŪA5ōg›ąß K'oķķLń)Š5‘³>Ņ:Š²Ś=wĆÆ/¾ė:<q4ŅÉä<ÆĖĘɀŲķė_7hžÕō{٤ ś—˜¾iHxX›=³Ļz,s³ė?čjz=Ž”©kBČŲØĢ-Éøā±<]ā«sce¢ŪĆqhÜ9aµ¶Fʂos_]ńW†|g”XxrßEŽ9mĪóęXcų³õį>;šž§­Ķ µ…ȶ‰†1I²9{•¼5¢.$?u˜œ–ÅvŅiZ}ėĀ·xŒ’ałt¦AĖjś ZEęo-Äśr:üČXnķßōƄ5‹]Ńc¶µIÄønFK'÷h%ŹĒ‰x·Ä‹©ų×QµKO#F |­®2ÆčG§Jņ oĀĘā{é.o]āūČ cŌĶ©sšTęÖh–x™HE'×§éžµ»ø“°Ó‰“ŗp#a»6OLÖR!#Śmķ/m¼6¾xÕēi Kq· ˌžuć~.ų]ÆŲi7ŗĻ‡õWįC!”€2qųVv:ą|į„|P’žÓ\XoWqH\cŌ*×TūµĀ<1Ę@ł³“vŹ’Š÷’ŁŖīĻQŠėJŽ;4½2—“›<ųĄüū öżGY³mPŚ\FšeØĄi<:.rŹ:˜WqxĒ^Ų>©`š|Cļ]8\{Zł·āÖµÆišõ—„¼āTŗš‰·&v€†Gb~éśUE‚sžŅ­"¹¹…į‘ŃAątjŲŌü¦ß_F¶·"mA>Gƒųö­‰’<ņ/I{ØŻ®³}åJ€ĘÉ*>Ż* ~B”-šņ;ØQø(pҁ&z„ü'=±[m-<¦.UčX÷Æ@×<==Åø·†gY¼²Ž@čÕŠüy„ōčmēHn®”…żšĻé\æŽä_,׍#¤¬j’»EĄqY¢ly®‡r·×vņŻ -†s÷½«Ī§ŅØųŠ ˆ&xÆłŠåS1ļQ6 †gq-«<§Ķ…zŽ»żßr ƒ1;gҰrEDųbĻK“I»ŽR?“r ³7%}ś×ĻæüX|7¬C¤O䄼d±b2ģON•®Z•ėkÖqŻ„iā# éļ^ūm.‘k`fµ¶ŪĖŪ*Hrr;­H¹™įŚ–§®£wz‚¾~_AĶv¾Ō Õ`øH­$I•€Ē€ž,zS˜Śß…®µ¹/¢’īKÕ Ņ^œ óŻ)-įŗ!c†Ū`ą b¦S5ŲõźZÖØÖ–W2Ļ“)<Ž~“¾,m_HÖōǰšńÖ.%›dĪĒnÄē’zā®Œx2M\¼w°Å°†¶ätżkĒl¼¢h÷‚ݛ˸LćĖ8ĄĻ\Vœčq‘Ó8›Ė&܈•H Iå…Ceįų,ąœŽĪŅ\ĪÅĆ»| vTJW(āß„y~ƒ”Ogs“»¼ĖŒóļŌŌĻx“µŽ’N±*ŽŪY€Ī=ń^=w§½ėˆÜĶrNӎ)™(Ü„ØxvŪY–{›sp°Żå“ÓŸēµfh2^iWFŽÕeņ |Üõ­#>ćTĻ]°óļ4›Ęœ¹ ĮvĶsŗæ‡#Ō4›ƒn¾dŒJŒžAźĶ#Io„^Ł”ū[~żF Ę w>óõņ¦@'\œŽF;TŹ7śž­ƒd¹„Ū¹Ļ;Ā1ģ nI¢Cih$’@Š06·zŸfc)F É%Ģ1Ū+8ö&¹/]^ŁŚŪ¼'ß?'aŠ~u.Xµńv‹a§ZC-ĄžÓŸ*Ū×!qŠ~*•Ɖ¦¹™¤Ž8ĀDŲGźkf9FĆę’ēSž=ˆpP+qōż– ĢĮŪŅ®*ŚŹsg–ĶžįłŸ <×aga$šĒu2žč°ūÜóZĀVŠ»is«¾Ó"†Ź žHöŒ ó}bĘĘHæ{/’:V— õꓧY‘q6:ƒ€Ēé\5ģa/„FˆŪŪw“÷عŒÆr "Š\ÜNŖĘr}½zŌ–³C§A%„Ń#—9¬ęEHš”é1®„s܁ź0­ėÅŻŹ¬ęeEŽÉy$µ Ž+”ęŗž¼šµŚĒ`„“}śę°ć¹Ō øø[˜Ģ<īVõØ:#†Ž™ŖÅ£Ég5äŹļ,…“.?•zƋo!'Jü Ēå4€õ; MRāŚ{[É ŅFŚužµÉxdzż•.ģćk«ÕÜ6ÆŽaŪžœŠN§[¢Ų¤6œ“Ć4r˜Õ„Y%[ėYʦ†I ,‘–Ļʽ†k7O31ćń¢,7s\›y• Įć…sSų«HÕ՘¤³Y†$ī;wŸĘ§—KäĻń^„b5) AäŁ×5'„n’ ć$ŖŽIĒ#¶)Éh>f{\W±I “Dń¢²•%—\œ7:<ó¬m"ofĮ$ńĒ­8#TŹž%Ņmn`’kt·xˆŽŠ‡…rVĮāCĻŗ0»Z ;›–Mœ[E#*ŁäŸĘ»§š²-¼£ku¬Ź†CŒy@ō‹ŲīČ^é:r;¬jŪpU›‘ōÆų©ā{Éa·¶œŸ=˜yAFć8ķZ*ŒRZ·“‰Ö×Į7°óŻåI"¦H\`Ģ×哚]Åu$層@ä`qķ^“÷¹äщŪM²ŽØ•C¦jŗ‡/-5ū9ÉŌlÜNÆ×”ēt8ĶMŽōÖļ…ž%ƒÄž±Õc“¬(ūOv gõÆiÓõ%†VJŹĢāWī×5EdŃq] ßY'Šü}ah‚ĻPyn9č:ąžk䏈Ųz74ÆŪx~8u«v’i.ˆ¦ ėų׋^vŠė¤·<ą¾µØ|:ńʑÆrÖĶtŽ`ä2–ūĮzqšū?öØųé„|HŃÆ6C© ņŻbĄ·+‚#”&»)ÖZ3©#śL’‚F~Õß“ļģŻ7r?—ė_•’žŁėuĶø‚+č%BĮ cHõ¬c>„IŸŹgķ?ššóįGÄKŲ6Ća”]K$Š„#`8åyéĻa_-Ļ0$4LJzćļWTesš¤‡FŠŹ>`ŽH ¦X•‘˜rOU£‘¾‚“īąDຜqYū ¾ESĪ č R•‰eĘōr@Ė(ąšŒ®(¤ˆH9ł‰Ē^õØc¶Aµ‘Ū=*ģQ8ø¶¬c”=s[D苹„s™­n,¢,¬<ČŻ”r1éČÆėóž ūJ韓ĄČ|ā½F ˜ņ®E½Ś©*GŽpė_ęĖūQüńgģŻńæÄ’|M”ŽéÉöÉa‰|£ĢˆÄ1'¦;ż+‰ī>dpžńuƇ¼Kmy+ʱ±Ś ÉõōƱ~)üG·Õ|¤ųcO,5ÄģX™ČĄĒæĘ±œw>xÓm®4Æ Z]ŗ±ļåAĄĮēĘ¼ęłmf·’Vv™“Įģj©«37©{Įž(‹ĀśęŸ} 2«īö–Qżćé_©ŸŻß(źk%“9Xō‡ŗŌo//­ä°vøĖcµr‰¶ŌHvĶ"Ęē;ĮsėZ(™¹>¦Ė_Dāgn{ £’kسńęžģņA”ŚAŽQ•n1Ȧirm;QµIæŒŗ›©ķĮę±ĪÆ)6ŅƒwL}ź$”i³ÉmÜ”ĒŽĶU‚āYÜźō«ō29²Õm|ß2Ų›[ĶL“čkeŚų÷Y˜I§źBöĶ‰Šž>µÉy"K–:gµ$ŸRŹwŗn£Øź1ŁCŲ@Ü\zśV£ ßiŗ“V·i$32«ņqĮč*°=&;D³d·øuņŁG= ¬‰ē³±’F÷D[”ļ@÷×ūsoBė×5› ęRŖväqAļžž=Kø½ø)ņ.V=¼æÓŽ¢’„Ö=bCk%¬°€„Ę żhhÅx‹JI.„‘NKēQWcæŅ“k—X`ĢĢžI_°·CtS¹Ō-ÓM †[č§ ÕŠ£æ™^Åc.ē!Pō«¦ŗŪMąõƒD7„…dW(G5£įżŅõŅŁ­ĆņķĒ'޶‹°­c/≦Łč—¶$o€O#óäžÕ ”7VČnø¼qźh‘H÷Ļ|1Š|T¶Mr‘ø1…# a±ž5Ńų“Ć^Ó “Ó¬1†`[®1ÜT•Īq÷ŻŌVĘßĻ1Äqž9®ž9ž× Ć8cvsւOAÓõ¹“·L0`0zU?YĻt–×06ׇqn>šĒLŠ#ŒŅµĖŁäk(ņćŹ#­[»×/ugH/eŗüæQė@ę­7Ų$Że(x°vē­r–“\Ļuž$÷ ē?5L¶č/xcL‹N[™_6yYŗš§æóØē¹ źŗµö« ŻƒČ ,Äc3éX›E›Ž)µ¶±šu¦§–·ķ9o$'Y x—ˆ­uK”¦Ģč‘:Œ±sVŚ\¶×K%ĆC‡äž•č:—Ų. )ę²ī*¹ł=Ø&H©oo¹žHĻā«YŁĻ¢Ó4Ä(T⁄cN’ĀŚ“ åņäČÉŽ·ü-įˆt)ę¹¶e€;vvŖčkŽĖPńoöcŪÜG2Ź$Pc'g’>ƒ5wĘŗ¾u¦F³\£MTĪ8śVŒ²Ch`/2¼§”4‰–Ē%«ŁÅ:6x-o%`\÷ņ®Ę’Žk›crqłĘ[Š Œū–…vKöõ5ē,°¾¹xī”q$8ĀžV€±Åˆü“ 8ŻŪbĖMyÆą‡lĻōp23eµŸF›M‰abČqøŠ±cw™öJ”XG„1jų¢ŽÖņb$)zģžī×S±™cw‚lpĄõ«ŒŗĒyŖ\éöfĘŻć»1¹#Ö¼o[Ō&Öu+·š?-¶…^j"kań_\éVinļ*?;yĶlŚjS¼p,®į;‚r >cSŖÓōkk­ÓĪūłŠwo„qk«›ĶBk{H­SćaÓo©ŒŃ»{£Ēfß‰#’>m§š‰u’Ü-“€©2ɾĘGŗ~”©\Ü"#+ä‘éŠķ|£ ™nf²Žīą ”˜}Š{ŠCH÷ĶŻķķžźVYilJł‡Ęz½ĪÆŖKsę5Bb ž?„åfFŸ"yā9ģƒŪ©­›ė«ø„·O—ģĄcV±VњÅ[C¼±ŃģM­­ĆH&ŗaø ĄēļĀ»M2h“ēYaQēœ“tÅ?"®^ńˆ­Ńu‹–0˜ĪģZ¾j¾½v¹ø½Yˆß!bO=ė+v¤n”IƒƒÉ&“¬4‹›„šX™ xÜ3Ī3Ž•¬Uß Üé:>”c’(S*2[ļW¬ż†źI#")ć'rō85W.7<ĒUŌͽų³€2@ }»_ }®éž9&O²"Ż“śŅ4ŌŃæ»³·¼µ&ŹÖ #V`9“ß=ė¤K°–m-Žį‰Å #±Ėi:ü×wSEW°u$£½ļŠ«ć-n­mŽć˜}ŻĶĄ5ƒ4‚Ōę"šå”K¬REÜøļžqW °ū'™#©Ü@Os.źō“f[ »ŽMw¶Zl!FŁÉĶ>Sœ¦§ŖŻMā(Nš² Œmٟ•ŗsĀ½ŸL°Õ.mm®®=ņ!b«Ūæ¦Ū™ß”Ēź¶ŅM}$¢FTvūĘŖ ÜÅ1r°€ŒÅϰ¬˜7“øæ‚ö8EĻ—eԐZ½:īįīaFŠE™Ń0qß #–Šu+ōŌŹĀä܍Ž”O§ē[š%Ó§Ź K³Ą“Ę}xéļO›¢7±vēQµŌ#KcŽ,ōąg.£=¬6ÖįUć#vą{Ņš…Ž™¤‰ā·‰Qę;ٳ÷½ÉÆb¶¶ˆŁĘ®XqėJżšOĒqā/Ī6“|hīćĢ9=yē”ā½;Ɩ—6šB²«)Ą1ZĘ}ȜŗÅ[{„¶µÓcƒķķ"É.īvąõż*ę‰6”q¢ŪYĻu 1÷r=ŖĢīX°¼Óō«‰Œ©FĪą9®Ø_iz®œ÷zjĆyøč§Óš¬äé>µ©‹v*k“^Ęņ\ŁØU ō„r0_ĶåĖtŒĢĆ ŠD…ū$ «’ Ļ#¾jėŠŪÉ)`°ņśdŌÉŚ|ĖnZ$Č'Ü~ƒ‘qØHϵćې|Å#$zRŒ,ĄŲĀPßiļ“?žæ6}ćX±ZMįū…Žt'śZŠv¶āķšŁÜ0aŹ“Ķ{Z·ö§…™nŚ^8·6šĒ×ń¤e(Ÿ7\Ėsņy7o øl†C÷Å{F‰w„^Į ³q(Qæ×4>{X¢Š}ź7dŒcŒV¼é»ģę‘އʁ^%¶°½³Y-­¦E;É…pšöq†[˜'ø?)@rV™pÜ“ö)lé y¼µ6N=ĶxƋ “ūN}&2n£i:ņĮOµщ7„4ųtå"dŽņd=½æę Ńn4Ū‡K»×ø–Rvņ6ŖśO•™”§šģĖ·VÓ&·””!āœõé>¾Õd†fæÓšHŽB4¼lōÅHjZn±©\\|«?>Ō^ƒ5ę¾(¼Ō|-{ie|’Įć1’‡ęühWMŌ$šŁdf1ːHojv§ā3<‰ö³,¤øVn¤ž•“Ų_]e¹·0Å.pēŸŹ¼ĒW‰Žą[]’%WRCrGņć+ŽżŸm„jZŒ‚¢Õ ēr÷ż+Ā>+…,/ ’ ŪÅ PĶ€¤vÅPE¾»žX-Eņy”—xČĄ9ī+™µŠļµQcÓŅjŁ8 öÅrźt¾#Š?²ģ­ķ&·iA#y}žµē¶ÖÄŅĪž\hNąŠY[PÕKņē†ę)wœÉźGję|Yā4ÕīlōėxŚŅ,†Ś§pvėŌż(‰ŻųNŅĮ`¶–ņŪĶpAxÉŪģi|AØXµŌ¶P¢"`”S‚ĖõÅź,»±»’¹‹Ć>ÓĄņ¬+mĪņöŽ]F2m‘ƒ·•śP]Ļ/ųƒc¦ÜIuah. „d\nĶst7rZĄš­ļ—uĖĖĀē·+9ŠųĘī;Eõ jżŠ‚¤tuÆ£t­sEŃ씜츸 !†į!ķō®y7p8Ä÷Wž-ŌµĶBB–2Eµ-Ō€°õē8Ȭ[ļ ų³Å>6³ńV…|C‚I2ŁGaŪ©éłUFWSÅ_|_wįˆ|y-‚.±æŁ" “'ƠƓ<įūmo]‘¾)iw𔕼›6FĎ:ŻÅo„į#ĒŚƅõĮØų}$žĶiƒ%»Œ•_A^”Ÿ xŗ=?]Ō …5;PŪć³×ŪµSzHé/­ļī.’/ صR@Žü˜üėÓōÆ Ū½Ž„wsØ,/i3•ł²Ē¦}(Ė”Ė=Ef×6pއtS÷©®§Įž¼ńŽØCc-Œ),ŖänŻÜēŅØ—$š¼_៊Ś?Œ]O‘’7Å4r«»=3šė|Oń'^šę”„7Œō¬e\*ü§§,)8Üw4GÄ? ]½Éе›ļ\“•øģ tĻ Ī—:—‰µVXįy»7Įäc·ZžVŒÜ;ńÆÄUÖ'·šųY­ĖćŒÖjųĘēĆȳÜ9ÉN żßšŖ!Ó*>”§ŽyZŠ<[ēuĆGŌžł¬ļˆZ•å¾›§A„i·7·SÜy4`mEŚ™K¢3tõ:_xhĻ5œ“ϲl īåA÷®‡Å𧇼#ożµ©·ĪXwóżk1Ā,_ ~ҟ.,.lõS.ŸØÄc’ÜܶeĪ?ē5õ,v–ŗ÷„_·H͵Փ“ŪˆÜ:`})1VZŸ”ŗ÷†%Ņ|K©ŚČ±Ål÷.šķ2sƒVõźrZ>§ł [‰ĻŹEŹżNąžŸ}¢ų”kŽO) C6&xÆ ¾&źŗ®¹,—–a¹Ž"cžPI’'ó Gɚī—āæ-.Ætł¤¼˜l`Œvżjφ|+y`Ź’Å+Ücp NõJ#Vźjj’jŗ<77©µuSøśW3įķv{›‹«›«ŁĖ€·Ÿ•qĻM4ˆŽ‡ūoKŗÄ ØDff鞤z֔ś„qX™b`Ģ«Ī;Ō¶ĢłŌü.ų„ZėV°_ŽĒjēūć<ś×£xŸĒ>ŃuĻ*ćVµæœÖ­‘ČĪ9ļJĀågńO⮓ke¶Y®åSó¹Į9qŠb¼³Āšö©©³OyxāaY'ęõŖQ“.>§a¦Ly„ č7WAmww{ŹZ#æĖ†8ćŠŅH–‹ŗ‰WĮ_h›W ö’ØP\Ż7ƹw­éś²­Ūydī= bČk©Bݦ¬°“€q޽Q-mmä€fvŲqް’Ō…'±FĒāuꗭ 1h»DX3žU[°ĒÆzņŠZÅ”ÕćæŗÆ.焸'*€öž\VŠ'DaÜŃšÅķ’‡­×VäŽĶ‡¢°ö®‡YųŁ£ŪŁŗŁĒvĄĒµ°rK÷ŪłSTĶOÖž*k7¶³iH‘Ścuֻ߇ŗĻÄ÷ńM•Żšł6 óĶ;giŒżą=ź]1ž×⯈pZLtĖņīŻŽérI éŠÉҐ‹ˆå•|üŪXšąÖr¤D¤w:5M*{3m¢Śé²#·Ī?z¢ßoōŸŪizč·æ·ŗ" ¾XżČ=÷{ūTØŲ\½ēÅŗż‘Ó‘mbžāįåŲ ½x=•޳qØŽ^ŻĄńŪtqžzŠTccBk»Eøz]Fׯ€Ø{Õ=KNø–6Ė¾˜šŸóš:”Ģč`Ņō+yõ M£H¤ĖĘKz‘FŸe¦jģ5k@‰„Ø!¤'’{ńųdI2Ī„i ŠŚŲ¤‹6üłƒīķĒ瓉$`±É»;ņ9 Ø¢ķ„0E+[\H#€ĢTä€kœ›R‹O¹v‰\ǵ*@ū7†¼jum*x<‘+Eć#¹®śęūNŅ&{)Ź”ę8nⶌžĘ}ńv„«Æø³žŹxī5Łx2ĀJÅ*ŹHĮ'“Mɕ¶‡ŅŚn‰uzR5#Ī ½Ū޵%ļ…īŪ͆ź=ˆ>łķT»cƼW„9×NūJRp‚3“õÆ9Ōķc»‚?¶@7!”Ó/ĮmĒP”ˆT#¢šIéW¬|;4*€7ź€kN»KKØ%amm.åĄĒҠԯ͵«K2?ŌÆCHKMÓn5;yf–<Ī2zZéü?½ŌsŸ(1āNŸēšØs4ŗ: «X/-Zəē^ ĮZņĶR‚y"v"Ųcó^ŠÉ³›—T„’…J*žµtm.biBO#ūÕ”6Öåm:ę}>IŒ BєsŽHōż*ÕŖ_½Š¹óū?‰6źE2¬z~‰Æķó"HU"|¤ŽYōŗ]\®Æ¦Co`%QūĒ~»»ēڐևˆNO‡5R²:Ķ*I’c<0­ļx³NæŅ++fÄ|ĢHėMŖw<›Fе_T³{Į/ß"&9ü«Ōõū=WE[OµB$“d ][Y÷­c šs Ѿ)^ųod:TŽļsÉǧZśkĮ¾=h°ėŚ‘œü„q‚=½(pD¹ž#ń†™—ŪšĪÖi˜l.ĮCv é^OŖŽGöÕŗ,^0Ųlt#ڰžšĪq¤ڲAt’:ĝU”Œ×=­^XŲ K٤Tå}Mb•ȽĻŗ7w÷fźwv|ŒšģģVķŃ'W)tc„ob¬wjīökG¢GŽ÷¬ kyVźVŸŒ†‚“;$Y,tŲ^ąĒ YĻó®kUÖlT†£GĪA ÖŠ×[“½u‰Ś1»±®ŪIńL øÕāÓ×P¹XČPėž€ā­S43ō’ˆŚ¦§*’n@I3!1FWhĻMæ•Pń.«mv²Dˆ&•vyŠ7gėTé“)½;Šćń‡š ƒQI6“8ūŲõƇž(i–ŽdÓ. ŽŪSxĆÆīÉą÷=±]ń–ŗœ‘‰óĪ”i.Ą‘†pŁ8Ī=*•³,Ņ«Ŗ¦ńÓ>µ”„ϰæe’ŸÜ_x2ę®m-ü×9SŻĮö=«ī½6±ļ¹yć$ÆœTTŹŽēy£ź°§˜HląōÅy/ķįé®ō½'ĶVéi 6Ł&ąs»Ä~Uįć)v= LųnÓÄV6óHŠńœ3m\ņ9ķōĶ}õšWĒ6æ>j? u‰”—Y·‰¦‰ålLtü³Č÷¬čaŻ™Šå”æū |xŌæbOŚŪĆ!Ōn`Ó¼!Ŗ] ?SĪ*’Bļ±^E=pNą{Wö·® MV[/čĻk6ØĀ—v²@Į‘Õ€<ĒŌWÆ(ū©£)žėšOÄsÜŪMįżEāV€f"O.’Ŗ²æh‡ēÅ> Õ^Ź2ś•ŖłŠžųxÓņ¬\u¹ĶSsų‚’‚žĶŚOĆψ ā]&9“Ćŗīū„‘׋;‘ń“Ū‘Ē­~,ź’ŲŻ\FBķ;½«HhqÕ}ŽTF·o‡pcĄ50ÄDŪ¹ł@®˜³Ž{’[ʍ'™9!;ÜÓÖŁD"R źĒ8«rAØ-±GĻĢ;Õ„6¾[C³÷­ŌŅR:į±fŻĀ¾d9"“ ¤ŗ„$W·Śuō‰’ęłā#œØüTŽ˜³ūŪ’‚~ŚņžŌ_²Āü0ńĘ Ó|Mšoś ’ęOŽŽZŽCž¹UĮō*=kö/[·šO5Pšßwė\Õ£f3ȵ}p[Pņ7Ź «‚3•<łfæ>~.|2¾fhbŽ!²=Å®ÓČÉ9ß ×VdÉ‚šPļ€6¾5šv§¬Ų[Įæj‰<šē§cł×ó ©½„`K„‘¢'6ӌž•µ)w9ŖÄˆ”gd æš;T>@ €ēåéšģĒ-ȝ>Ī *•rr@ļļH’«E™Ÿbg“J C*©9Sš•B°<‰;v5qFœƒaŻæoĢŖ§Ę“į‘Ō¾J°Č<śV‘—CJpč9ŽŅ¬ŒeŚ¾Åżƒæi[’Ł_ö•šęöĻĄZ½ĢzˆćQ½E°²ąw G=©T;iŸßOĮoŠš³ØĮću{Ó5Q ®¢a?yp¦)€’h6sõƼlõ%ž6;ćĒü qĮēÕFńH’ At›ø ‘擾<÷#­6ßš]ŸŲęÓĒ“ǃ¼?pĘE1Ż,L³¾p:+׿ć5Å'Õ•Čć·O¹³ŽI-%Y$˜)·†³‚3]Ēü$_fŃYårÉģŚ½qķō­,g(ō5|-”ų‹Äś&”Ÿuqqoo™7›i*Ēw«Ÿ‚õ-×~§m5„±ā2ą€Me=5"1čĪQ"³ŸNÕōÉķęi¼‚¢Em'”'šÆÓŸ‚W:ŽÓtūYOj71ł› Ļ× «K2„OKžīŅ“ŹÉ‘Ę„M„¹¾‚ÓPŽxm:™TųWu'Šóź«Rz°śU+]9ōĶ"ŅYäY®Łw7 >•Ųyõea]Éx‚9ĮVėÓØ %2Ķ*1“œAŠ|¶2ŒĪ_U¹k;„ņäŚĶĒÖŗßZĖx@a·øcÓ¬MR4u6āщŹ3 nZČŃ$žHēžäIŁÓļ)š­JŠī­SĻ‚źd¹ O8÷„žŅmR`Įdkeåqя½kwj’j‘$wļ<(ąs[š-ŖióĆ}0ß7>”«©YjŚöÉLš¹ßvŒö«Śó[Ėź$ūD ™Ü0hŗÕą·FG$Āsó÷kčo i‘ßųCū>ĮŅÖöH•ß’ĒIŹĄxŽÆż­”_'Ūm–4\(@…±ųUØGŃ3ü-ᮓw©Ü:÷÷wƒ"÷”®ēĆQÅ<Č®€ą#Õdņ"׉fŸĀzV—¬^Ś?Ųf˜E wĒāE?\ŃWőĆr—…”Xņ"„SŒąŽõ‹4™ē—ZWŠ.žĻKņļ/“žYbŲĮĪ*\Ż“‰g-›[\ äńɍt:ų†ŽÓR1_©UĮA¶y«Ś’‡d–›†fW-ŗ&#Ž{R08e²¹ˆ»¤kŠ©ūÕĒ_ź+÷0\+˜’å›AŗÜn™:[3’c<‘ķ^šč³Ō‘ެi°L ³€—žx­ N‚ ZėkBdo/qąūVEĶģ‘^,Ž{*ó‘Ž“¤ŹŠīz†Ę—ØŪOu5˄Ґc Šē<[¢Ė}homI4NĘdžy?•bٱĻ_F¶¶©|īĒŻķķZžŌīt­BŚy6 ćµk …)XöÖdÖ µfŻŽFz 䔳Ī}k׹‚Ę"$F‰—ĒAI³Bž…®Yh÷Mkfb‹$/Öf·ā™.u8mg/µĪÕR;ūÖ\Ģ ×>žk›Ć4 ø/ó0ł@®ÕaŌek+;ˆīŁķŖrjąĄ½å=‡ßb¤ž•«·ŲēŽUóK|½jĄį%±1yĀÜy>aÉĄØOŚ-ՋaÉR0³”»ĀŽI9œŒ·—žr;WK„GöØ”Š%Hää)j‚£ÖücŖč—w×zķäwZC"łą|`óļÅ;Ä^±ń\é2]ŽX3|¬"o¼9śŠiz¬¾·ŠtM+K–Hę±µZ-Ēīš:ūׇź²Ēy<‚ŁTaˆü3H£™×“h¬Ń$–s»«(č*- ß`”oZ “ģvå"€Ę¶Īyµyģž*³³Ō%µ»WŒ§&‚bŁ×Śų†)7BP²<³č+„øÖOˆÅY$ćœęƒC•Õ Óu$³»»—mČc“AZŲѵĶ.SyØ ;ėhX^…'h>¦£Č“ _S±'Ł\¶ŠHķœW²A®&‘Ŗh¶—ÜźŻcyŒń =eüBšķķ®·5»Ģd±c¾& +é\«ĄęŌ¤³ŒžM2ĘŃ4°“ČŚ\ŁōäÕėpźZmš[łrÅ»{g;ŽzūP#›ŠÆ%³ŗO 8°Hķ^ 6Ų{§dž [½tzŒŹ=‹0h÷éĮŲßk6ŽšÄšÅŪĆöw˜DyĄĪ=9Ø#ēOˆ·6ļ‰ō›­7L’–å%m䉏˜|tö®ŖĪāŚOĒ£MmL¹,ź0X‘ŠŠU†č:f2^„ŌĘāˆ•Ąå›°Ŗ$ { –Lõ'š·bdÖÄZī‰6Ÿę]iköÉ„’rqŪŅ·.µXēµ·KÕMÅ3OŠ“rĻØÅ.¢ŖŖ|µĄCéŠč Ō->ŌŠ#Ē#c‚zÖ`u–—1£#ȈҨł\ŽV»Ļ P:¼Ž ø D& üÜużhĶīō}ūwQmĆ„³ĻęnŽ’„eųĆÖśž„cyÓĄŠ©Ue|ĒĀň!ŗ³‚+mBmģ¬J±ī;U{ļ?{&šń0ÉĮĪ~“€séŗ Ż‰x®K\šÆß»ų×Y£h–°XÄö–å±sü«XŲŅ-!?dŃ'½¹zØŪŒ×9»øæ{«a¾.2 sųÕŲŅʍ¦Ÿy,É4±ķ@xÉķ^“e%“ $®öxŌž;TµŲ\§–_źŅ³Ģź2YŽ=Ås·2Ū2*žyȬ‡bŅ“·&fu+“‚>•ŅiŗSÉ*O”lI•Lu§p7tķhŽkZ²XĆf°ķu!²=€ö«æšZż®÷P‚#žē&E>øéZIhŸź)u6a2ŹÄ`qœUM"ŅEž`ĢD„ŽĘ³åŅä{3ÓōoĘoK¢®@bÜb¢P6ZÕ½„ÄKm»cmž!R5äל;Ćm#lĒ@ŻkÄļ ūEŻÄŒZCϾh(“Ł­ī`@ęd„u)¤ß^A4†xGqڵŒ‡b;IļtÖUµdˆČcŚ»ųµxķl„— mį‰ķVR‰[^µŌ|O&‰eeo֎y ¼zƒļ’ÖŖ Ó“Ļ0½¾Ūb Ū!ĪŚMŲӕŻö­į±d,thŒ×LŲóą@+„šuÜSąe¾P„uõ.er›t˽)4ĮäN›˜)ū§ÓōÆ5°Yąu.?xGCĶ b9‹ūÉõF0L¹=:×”Ų}¢Ī(ą_¹€2;Õ\L×¾Ņ_SŽŻ8yՃG„vŠ«m§G ŌhņŖćėY9iba.†]Ž‹d¼Ļ“¼|Ąv®[ÄņiŠ¢Cp±O™Õūā”»'cDŌķõkD6O…F0:„]OAv†\4KĖqśÕE\Ā ž(¾7ÖɘķĪęgpŖ¾„ēŽÕŃ[ųvQķEŁv"ŸÖ¶å%ĘēŸOšöž×œ\ €ŚrØŪ“Ųd“ł ³¬ųūG±m­ļ.Œ¦qī×#Ęj\:“ČYƒPŽūOc>t©ó.~ńŖ³ß£X$²¤Ū°qĮ5S9»ŸĶ"¼ß$|änļWü8D6ó³F'e܇9Ē„"ģQ³Ó%]^;ˆ×÷Čó^–’+[Ię8äŚF榀>bŌdŗ‡R»1±•ƒœ8ś×A§Å{©¼r\(Ę02z榀;1ešé3¶HŲqŲ×±¶ ś~š×SŅ":°qE€ųĖWńøŚżŽ«ŗÜ»ł„±ąóŠžµō¾ā¶ų6ŪU’–ķĮŚĄ|„ā“‚BqŚK<¤noZļü7®źZd-mö†Ž"Aē‚(°5Üõ;ÆM¤čšˆQį³¶aŲĒ#Ņø}ā-Õ“·3J^vŸā5\¤r"+ķ_ZŌ晤t‰Nv‘qé\R­äX•™[’}>“rér’±ŌXx–ČAµźœ6­O{y}r'[4ż×#½O(ģs¶ZuķĪnäµ0\Œ‚ ĻNõčß |gue­ÜxgVÓ„ø²ŗ`LČsļG³#ŁŲōMKDK¼Ņr«ķ^GāĶZĆKŗxm”É(±Ž3éG)Œ£Ń‘·‹ō3“HóŅ$ƒÅ1µ}&Ū)ym<¤BÄą’źÆ)Ō4£×pHó³¶ŠĢ8F’ ŻVī9,$ÓsĒŽqŌsF‡«ŚÅ§V(Ž"DˆUä}śŌ Ē©ųwĶ:Ø+%¬īRL üQŚŗyüa„é°;#Ej$}«“ņ=³@”NwPŌõ( ŠŹ×;—r“ēƒĶqWš~±wfšåƒw%“Ž3ŲŠQ‘/‡ol”€Kt'¼Ąs“ōŖ·REFePf\‘‘Ai#üQ¬µ­µ½ø[Y‰ÉĒ$ü×K“Ż<÷K2Ģ£ 7×ւM“ŒJŒØ mėĒZbŁĒl[ĢR‡OjŽOÄŚmŽ”‚ŦœĘ’½UĘv5ņæÅ¦ŗ¶²Ž=?P{Y×1Š:†±“*+Q¾—RÕ|1¤A%곏ČH\HÄu'ė^5Åõ½½Å“fWe%Tē¾;Ön7*Q0“mZŌ,uŗ›Įpœīh³·œ`tĶ}mš§Pŗ‡ĆV^Ó4äøÄĶ+Ģ£ #ĻéœÓH‹·Ž¼cŖhŗ šv—fŅ]Č<™Œ‡żIż½+ĖōūØnt)»ż·Q"m€erpNqœS.+MŽük„Zßė-2yöŹX†o­qŖ¶ƒŻi›$ŗP£nq‘ž­R„mVš’Ś®¾ÉxÓĶ ®§V׈õ_,źwVqVć$Ä£ŠÖĘ>t“XžĻŽVø·–āIfä–ū Ÿ~ÕōĆi£šĒ‡n"¶’ŪmŌ¦M­'̃½¹¦`Óč\“ńõ•–®ĢęŽ{waŒŒ²ļŪė^[ūAųÓN½Ótļ Ecö”>]ī]³å <~<Ši³Ąü'įgQÖ-/4ėI.£ˆ€Oš®zēšÆ°4©-tXSGÕ rŃ4a”įKcØ¢ęɝ‡‚“čķ¦{TYäFvŒČÉé^Mń ŹIģįӒŽx& LެO=….ml6ŒæŻ[éSAi«Es5ØS¹‡D>Õ×M-ć1ŗÓ/&žĻ.Į·Pi™N=OIšEÖ“tł¤¹·‚Ž8¦ę#yėƒėŠĶų©į˜¼_£[[£ż‘ā˜Ė§%Kć¦;ŠhųėÅžŸE·‰fžŚå`ć®kµųSń—Ę>µ:7öœ·ž$*ą–z€}+9ÄčŒŃŁxĘIüP­­Ųˆķƒ8“ņJćį$՞ÖćE‡sįBIƒĆZĖ”R‘ź?äÖV=J-c…26ŗōĄź=kbox“P֮ܔhyq†Pß0=śŌĢ›±ÕIāÆķ-:ŽĆW¶·˜Ćó+*;ūąžēŚ/Ä}^ćIø¶ņDR“ Æ”5I˜ŹEdi:„óX£¬Ļ6J`ä°x­]3į.ƒ.rŒ$äo•Võ9­‘—CžŌ> ŻŲź0źš]¬–k‚ū„ł”Ž­gkžŗµÓ5)ŠM ¢©·'44tÅÜłćEҼQ«Ļ’«īīÖnID¾¤ū ö8> ė%5 GZŽīloXU~ė{ŅåE·`ū-¹ŗ’k©bo-É9ütś_‡­ķī£ŽŃUćœŠ.YŽ€,5æÓķ„|ļ„Š#ŗ²Óķ!K[Hą8'å“)wg™x‚ś]FÖm&pū&$žčHöŪhŠXoyJ䌷±¬„+œ²:Ļ Śä«āHbį‰Į>Õč¶Zå•ÜóŁÜ¬‡å8ąVRZ„61|_¤i›VīÕ¢ƒĢ9`ƒ’}OÖø fĀO°1šÓķ°‚§å]Ł"“^e—ut¼æŃ!Sn%ŒG…\möÆÕm­tŲ. kņq°ÆšLU¹idW;8Ė46zʘ³Į!W™w‚3…=’•}—}Æ^éśµ†‡åģQČ#—ņØlØČņŲmõķ[ķwP–9łÉča^å”i©-¹ŗøø¶ŠUF…¾ž; —#7äuķm=å²#ŪØ“ÕG­y®„ą!×-uĶn7·ŗBbqŽÕĻ)2±Ž^jŚmšÜ4-nŹī€;IļXķ}Ŗi7rų|Oā2 ‘Č”y•ķ™$‹Å:>« 'ŽU2 {š÷mØ_ŚAwr³å”9Į 1­$¬åģ{~¢ü™mĖĶz&…„év2C{2YY(/€™É©+‡‰īlb‚KK¶ģŪÄ céÖ¼eµi-u`‰w£gŅ“(Åń&«skq–īģĢ<§īZétM2ĻPU¶žä<² łŲ}ÜžēŚ„A)'¹«k¤čŽøžhfy/ĘWnģ€=Eyī¦ś–§ØM$—L€üøgĄė]DŁ\Ō·ščƒĖLė2ÅJäc×5³źVŚ”SéĖ$’–Śr ųv¦ÉqG×ńx¶†Žęę`»‰gy÷Ķs>1ųŁŖb=*kK+m?iĮČV‘śēæįX‘ėfs6:ŗx®9@‹$Æ Š×)āÅŃōSū%/£žg@Å1ŠśʃKVšdMę,mÉĮ šEz.…l¶÷/"²ø*U€ŹŒv¬Ü¬DŃiV(Š}•¶nbē'½eŻÉeM5ė/ŸŸ• }óč5#"x‚„œŠ‡bžv\Uåē‘8ó;ppAõ„(õ—‡P֎£4"兲u*yśV>­gŖźŒ7Ķw‹e; ’SYŲ MZėO²ŸÉŽå'Q€ĒéMˆCؔ‚Ō•Č 럄i6g±‚ćŽR$aĒŹpI÷Ø“ų¤’h¬•IŲSŁjĄō]'Ā×V±¤0³NI/Į=ĻJē5›ĶSK†īÖi%Xß sŒb“PźLŸCĖnõ[»ł%Xs€7éRÅnXVyćå'ÆŅ„­lQļž»Ņģģtųf²ómĮ³Čj„ń^ƒP‘tōÓŪhĪX>¦®™¤aÜņx4‹yŅäŚP¶ēQĄaéšōÆx»V.jŃCj®$!—åE >ø­,)FĒ{ć=ÓÄÖÖ"ķ^X×%B’ozɽ±Ai,źcƒ>¹¬Ŗ.¦-Ī·©MgbcˆfV#nG9Æ+»Ņ§>dŪēi[ļŌVdZĘ÷‡t˜„VhÖNH'Ł\ŁĆ/”·U ĄĘģŸj»ōKB³žęéķåI ąa¶pO„zBųr8H AČ$ąph—‘pEĖĖ->źĀxo ‹iĪ3ƒŽ˜Æ Ōō€—Mn±ÄTœ.ŃĮü(‰Ŗ§xrźK ÆWĒvÆqŠ4ķ*7¶ŗ{(n%Œfdcņ°8­##sY³µ[¦šŽŁS'³ķ^e®-”WX˜ydšŖpŌł®L‘ść®|@ń—Ļ«Éq5’‹ŒŹŁaĶv_üa¢xæĆā ]Nś+5Q$0³yO©ė]¾ĢÄų7ÄśjÉ{o4 šĀNāŽ k›¹.į„|¬ŒńČÅRVŠ +V¼Ņõ8u+ n ;÷Œ;Æć_Ŗß|O¤x‹Ćŗn”§Ń“`2«d)y¢Wč4z„ó*Ō> бā'{ß ^i®¤h`óFv1ļŸĀø+Ņŗ5[•:„šéš„ݲyb@Ķ×ĪÖĻ#ōÆTųkāš6µ§xĄ³Ģ¢DŠąoĮņIĮOo­L‘Ņ„sģOŚGĮZ?ōāO†'…"0ü̃vӌņ= ūž‘ąŒßµż¤?fKo…ŚżńŸĒ^į;ß/<#;?AĄVėX-Ō’źSéŽ&³»ˆģŚū['WŁ*jŗxdćxłģFĶfaQŲü'’‚‘žŹæ¼ ā/ Ćgifkż>āDɊd*>øĘ+ų˜ų‘įWҵ}B;”:^[ŻIm11l@źqĄ«ƒčqN]øvµsgĪq÷¹ęœæčĶ,„V\ōSź+[Ņ‘“Š]Ż›;CŲՙ5-¹Ä@śÕr•U˜Ī2Ų3'S":‡y€ ŠQ} ­¦V” Wv0j[]M ŅF0‡’HĮQZ›@ż’‚nžŲWæ±WķUąĶØkp|>»saÆĀ±—WG`LĖœ×ś8ézµ‡¼; ųŪA0ĻįżVŅ;ė)bl¤ˆźGēŸĘ±Ŗ“53ÆćD aƬ |±ń ĮgV·’»Įslļq7Œr?*įšźDŁł„ūCü3Ń5½&k[khćšęÖHŁIźüŽOl’ZžB?jo‚ßšŖž%\„’“Eć1‚Żcڱ2ēwÖµ¦‘“GŹ÷°ģełķÅR+åå[-Ēē]$×R6¶žrdgb “(ūÕZKdlh=+bTIā1ÉĻ\⤒Hć,§šŻHćĶFE ŲAM¬óRČK•Ū×ėŒŠi‘fO˜óÆ!½ZQéń]ĘŃoxn0ąG?ZŠgõa’kż®ģ|sšĀo„>3×cÕ±ü?®J‘4=SR±’m%Æ-ā!¾’+†ńĆŸ |tųGćO…>/‚3£ėv­׹ĆpGŹG¾B÷ķŽõĒ(ō-ɟēūxžĪ:‡ģĮńėÅśģ2é°6¢ÖėfÖžR”Žrć± 0As_2iMøXnGś9l1$„*”©§%fAé~Õ`šö·uq§ '€ķĪńņ±85ŪÜėśæŽfXķä2æ굹“ŠC9ó?Ākŗ/CϜIuK²[؍ć2÷µr2Ē7ĢŹdĪy#Ā­ØXęŽw;,ĄSœ5zF†²4pŖmH{õ­`kŹlkz¦šÖ6ö¦2· ąæb3éė\”³Ä·°£MŖ1yĻ®*…-²(lõ!ä0ŹWÆ­všE‘¤³,ɂ äŅ“esĖķeµø¹–BVLČOOS[w‚Ękfµ1ĀŖ ƒŸzϘ³Ī^ŅHµ2ˆP¢/Ž#œśRŽjĘT’ŃŲü§ƒŽµ|ąPµ·ūH~U¶óӁõÆpš½š‡Jūh¼l©~sģ=8¬äõE‹˜„ń:ĻgyooshČ ńė^>•a(µ²ČUUŽrsŲŌŽż2īł"ŗŽd÷«×Z»Ś[Ć&ņ%'iĘqųÖ±‡rNÕuo]hÅiqpmĖ.9‘}3T|uu®Ż>•qdJn%‹œō„†} įßG¤=ĆĻi(dĻ¼1ŽøŸŒźóģM£ĻnŠ#“ ŖŽ8Ēz†’эŸ:'ŚōżM§co™Jī%p;ę¾ Šēšę®ŠXĶwdY‘ZB§…8£AXæńDŅōMNŌĢOĮņŖR+@]:ŽŻ®žę'Ō,@=łŖ%£•Öm„6× nU™Ļ×cʋ >eL±fēųŖłĢ¹NkSæøŌ/%?/<zа’÷ĻhćŸĖ\ó†ķPŹQ-Żļ.#rB–ēŽ» l"µ“÷… ~µ*644ō…ŅŪO$‘39ć=A®Ķc:M¹¹·³óaLPq‘Ręi³±š‹ōQąµhÓQyƒø‚2IōėśW–üIń~ ńf§¬Z•2¶Nx8ĻOĢŌ·rŌL›^źūNL ¹ėƒ\ī½u.ŽČ÷QĢU˜ "–ĄõĄ§™Ė±ķšüW:$°¢#]Žüö¬5š™·ž`ÖūbPāµ±)ę” …ģ’i¼‹āĻ-yÕč Q§āY"žą©°ö„ĢģyˆtŪqf2»FįŒóŚ­éė$Ö³ČNÅĒü ·ņŖ‹F2‰åv’Ū^„ĆF¾k9$ÖÜVö·ŅC)„ÄĮvē¹­“2QŌō M"²a;,‘`‚½śV`Ó|=aįm–8!¼GVäłŠóŸéIĶSŅŚĖĮw7kmh÷låI_¼¾•‡įķa¼ćĄĶ)Į Š €õ}>ł¦xZP惏Zģ%tƒŹņ§ž‘ėYĖq\Ļ—AŅ5ŽäF¢ó»ĻZę•ÕYé¶W-s#FČĄÉĶ\U„ćqu]gNšx°øŌC¬o2ĀøżćßҰ|y¤źŗąøž+ČåŃŁGīą}}x¢āŒleü=šeÅÕū]Ż·²²ŒH„Gzm#ńķ2ŁĶ5«“JcĪqŠ‰²>ŸE’Öłg¶EK÷ĘXŸ¼jĆZ]yę[ąĘé[?_­BWЧU²—SŃ. ³ø1É,%3ņ’1\¦‰š’ļÚ ¶§axŅÜš³gļJŅ0*kV—Ņ" įSųøäÖ,qĪr¹…z“ėJhGO§Śi׌…ō÷ÄQ|“9Ī Ļo¼õ–wf‰ä°Ļ#Œūćµf?r±£K ńȲ²c$VžjÉ4L°įA¤#ŌöIµ+O°ĘžP;TpO9¬ æ­µŗ_[™—aäc­‡¢ĖćM3PųwŖk²kv‹uåˆßļJćŪóĪ™­įŻäspz ŒhŃ]ŚO®÷ĄŒ2•ĪEö‹9dµX’sœä cėA6/¶”*‡Ž#äõK!'™<±³6AŻ@šU«­š0gĄčOQV"–ļ|‹rB/%[wQ@ĪÆĆZ2ėW‹e5°’ ¾arFÆ@ń†‰e§h¤#,&Š€Ļ ¢J€ĻnÕÖx~ņ(āžiV)&Qµwqź(ŻĢŽņ„ķȖX€Ę ĪQ-ƕ¶dń@eŠŚåDr4~j&9=k•m žÕ"Īvyė@±ŅŅŅé2k”ŌāK‹Iu2F@#=ErZ}ݽ®¢‘HY0ķҽÄ”>K ø‰Nüc‚?Č ŚCĻmnķ¦]B€ĀpW"¬É Y ‘³'§jŁb`÷02Ś!IYqĮ䚻o„]i‚éX'nFH¦bM­k†‰[ŽČčj½ŅŲŽ mĮ²6Œ pFv™į›¦”\2¦ÅsŸē]­·…ŅŅņ¤Īh5+EerŅ\³1†čݽ…nxbĪ=BĆR³Óå`§ĢRŲ衜ĢR¬yĶ…ĆÅ­Ķg4†-öģQ÷?ŽÆG济HŠO³;p~ķ1æŠlļŅ7iCĻõV‘91ˆīC“˜Ļ^‚cŌ“{¤H–4w|±©÷ÆQŅõļµZĮ——ڵ2”I§žgµ½Šā8š&yźkN±±‰'ˆĘØKxķTäĶ…×…“P$6ghQЦø+]Wģ©qmuęo#g©÷¹žĄsė(Ō'’%£e9ō؞]ķŲA֕Ę>/öŻ-ßå'oŃr°L„s ŽO5ōę‹„iQY-ĀB^p@{VRˆÓ8’‹š~lōŪö˜ÄŹĖµ?¼3ŠńėĖp–ŠÜC Y9ŻP#‘k™ä¹Q#oNĒø®ŸJÕma¾¶·»˜§˜v)n™ķM+ŠJē ßIØčĶcy6·Q±Éŗ/ÆCÆiz¶¢–/ymĊv ÷Ü ł~&¾šņN×L·jä… æt{Wā}=5-I-€†BIū ŌšœÆƒ5X“{{ż:)w1Īā8ė]Œ¾"øŽ¶ żˆ§ˌz³P¾×.¤²µ°¾{;błøŚNX{VÕωoō«ŪX ‘dĮ¹<ķ[’zn£t·ŗAxg’LxńŸZš{ !½»[‚Ć½ŸƒļĶg)č„ö¶bE·•8÷Ŗ–“IĢ)‚ČŁb;€:Yµ !±ø³šDVqĆ摊åƽ5”iń4~KÄądŸ­O¢ų‰²Āai[ųNzWG©:jņM sŪ`™Ļ_óĶ <īę k»éīF-ŁÉ ƒęÆÉØĮŚéŠY\L²Hz.Lyī}©6o§h“X˜Ģe‚Äē5ė—ÖV—^†FL¹Ć±<Óņ’ü)ä_éņi؆ŚE!öķ>’•uŚE¶§—o¦»+ŪF>TĒŹ? ®n¢3“ĶQ—Äb$¶G·pwKœśŠÓ›L ź—ž^ū”ę2§ØĒj@`ė×wڼqÉt‹“ŽzTpIöTY¹Eی3H ZDQµżŪØ=GZ×Ņ–MMͬD4„Š d¬oi:SŚNRó*’x^CŖŪi·rMo}øSøgŒUFV.šÜGk“ĒlējńҹkĶ>u’Y$u9±e’śKC » ‘»µKibŃOėõö”£KSŗ¾…mŚH…É\Ÿnß­UóšK ·FČŻ·ż+n‚2#‰Õ¶|’N•Ųé°EuN¼XUFåŃ5Īm‘^[¹v9‚øõĶ`J¶–ƒź°^$®ė•aČSZ\R:ķ_]Öµ : „Åa‚õ*ų š-SS‡WœŖ¦fŻ‚G±ÅO1,¬ŚT¶“ %ŽEb8ćµ>ŹŪU¹ó¤¶‰žŻ+°?w=8ü+93Ņn-ÆąŃBĢbYsóqė^{r“JˆŠ<¹·`ŸZŹhFʙn±0Äc äńŌ×FēOµŁ{|Ė ß„TF, Hļ¼×e*Ż[5Ćų–ÓT½\­¹Hł‰SójŽĆ±Ė˜ī£Œ0“˜KœmĒė^©šĪͤń5œÄEnčU” š9Xr²§Ę ‹0ŖZŖ\gĖł*yw‡ńÖ§¤[¾«yqk ņNšŃ† Įģk#'˜7÷Å”Ōį‚xģer7”*3ž•ķæ|+ Jść\¾‘įh2ķæJ€yżĻJD8µ±¤ZŪk—ņŁŽyś~O”ĒŽ<Ö.Ŗ-n!E$gåłŽG&‚Yāž,½›ĆZ=Ä°ŪŚ4rȱ†wĮlņ{P¼»µk8ć‘b`*Nw‡4DÖõé4čģ¼ŃņĒón^sėVm„’+# \Jńś3ZĶžXÆ"‘¼±»īœ.8V×Ā÷śōāŚÕ%XbŚŁCŒóӊæyq‡?““ĖĘ?mXńŒ’G_Ö¹»(õ؁-#£¶į»¦ˆ¹Õ-ŚĻĢ•eŚq n {Wq”2ų|¹²’x_’ącn(Ļ\_ŚÅb—Ņ †„<ĘøDÕōĻy‘é¶ī· Ūä*IQƒÓō tŁ“¦ŌÖ+›„Sv8ŻžEz®¶Ž†=ŚĖSIedĀØbæ7¦;õ  sĄĢR(@Gū§'÷¬¹QÖB³¶UxĪh"3ī_ÓWD²ūbu2ęR?‹ńõā¼Ē°Õ䝢‚O–Bč;ā±z3XŹĒŒŽG‡®-씐Į?!Q9®›E¼šéd“‹N„“ógµH܎—ν”Ü>•wo2łxŽ{f½›FńŅxKĆŗd6.m¼F#>l‘Œ śSH›œ‹~1“ś(Óu%ņ5;Ą_y˜œ~5ęVŚŽ½sd¶‘Ģ–÷*[÷Č\ćņ§ŹZ‘ĢYXÉuę@¼2G°ļ^R-īµ›“–(ĆŪ3qø`ćéZ-Ó>ŃmžĀŅA«D—ńGƒƒ }’"¹ܲÉq{qIÜØøŽ”]Ł7>QÕ¼ZžåÖA,.OCĒå^Éą}V}nīš`¹Ł—ķłU‘#Š4-ĆHÕP»Óį™ ;×Åx’“¤Ö|AmtČ"…˜€#_ŗ™éśPW6§“ųOĚ7…ōKŸhŚBĻ'ö„o™Ļ£’žõRéf×n”žź%·ņ˜°`8<õč°Ó4ōõ²²…ķķ‘D›Ė–'ļgÖ¼ÓĒZ„‹”gc¤w²0Ė0ł@­23üįóÆŪ™n­¬ašUQŒØ8ČĻn•ŲŽiv‚±C°E7Ā“ėK›”•ĢŻoÄW†­¦É-ŌˆIb'a–kĖĘ×#[k&ŪķVŅ–v’WźqŠaÜįž*ųsdø‚ŚGlķž3ėYŠō”“XÆ ‰%(r¼~”¤tÆ§ģ¶ŠŽ1Ą£oŠåZī ol–žYVp¹ć9ėųVSÜÅČķ|1āl’;fņŌ¹<“ŒWK¦$Öėqwk€X±FČ'<žµœf£ysc”’ ³ÄuÆ(ź-؉<ü ¾ą2Xfƒ=Oi𦳄Ūj1\¼O"Ęb,@, śf½¦ĖVF¹…"N¬@'ŪQ•…bOkBźĘćEšö„¦Eć(å̐Ģų ēóÆ8šö£}q{<:ŠCw6ą’Nžr~•J}ĶąŚ;ĶKÄvķ`öV:|t l&% 8źxõ®zĘž9“ŪÓęC˜Ō‚AĆ1#Rēeó3Ķ­ķå“·–ļšįŽBģ„ē’õŌÖvs];¤͵zø ›²¹™­[^čöĀ ŁžĶ½w4uā¼śj7WPéöķū£ DĘśR&Hō­+ĆvśĒˆā[«ČT$ ļėŅø/}Ž>ĘŚo?xVČĄB)™³Šō[čŗGŲgh$żįp[ƒŒzK»+Åkčī¶«0÷=zÖsZĶmū›Õ§K±w2AFxcī+VmVŪ˲ŪZ0'ĢĻ$ēŽ1P¤ŃiÜźō­dZhGI¼Ņ÷¼²†.:cüõÆ/ńF™§Ė,Š Ša’§©5¤dhįŲź|+šæĆ—vöśüņ4ŗĀĒŅD (6Zģuˆ­Łc’ĆŖģ@ńėUrldIj‚Ż®Mø…`žW©G«źš³ŁźOo Ąčc„`AÉĮ¬%!BhŽ/“óbKbV ¢5ŽA9õ?•EńŹćİŁ"Ir‡|jQF28ż9Ķs¶O1HxV=KOó䑀9 ĜśTŚ£c„‰šžSŗ)wć%±Ų ŻĪxV„ć]/ڽĄUXtųå%PŽųk°Ö¾#Łjaehčb€Ŗ=}źłq¹ž¾3ŽfŻd‚8ģˆŪœ“ŽóÆK°KKę‚{ó$śsĪķܦhöl»āļé–śķŽ§\½Ō<:q¹TŁJä<»‰å&–éÅ'‹ŒZe«/Ź·­5Ł’@Hb~•ŪčŠZ[oH‹BĢ˜Y21žŌB’M»Ó’“õ)īüåÜH;q…ģ+ɖž}[Z³…gE—p8;O¾kp>‡šŅ(tønŒČgŁ–ó‘Åahž “³»’ćx‰Ńö³Øī@’Ź}ˆ”OqŅ4ųµ«Hļ N°!ĖHzįõߣųƒ\ÓĻŪē…R]īTĒJPÜĪżN®Oé”iś;O-ŖĮ¤ūϟ_Ö¼×[š,ÆŖ}¶ĶŸķn āpNŠ}=«k.¦±•ĪÆFŃ'ܖnÄĻ“nŹõؼIc­Ķ¶•=äösJ¬Ü&2=c*b’Šćµxu84Ā–w i°™ĘY”zV¤w¾ Ō,ē»Ōž#ŠI'ļ/Lb„+ßcčé¬l- ŽŚÖ8ät^d'ża=’•|×ńnmuHĢ ‘ƒdķŠm ĒM Æ Ūė·į ˆLŹ»™‡8śÕŸÜ_éČÖaŽ^C·–>ƳpŌM4y?ŁŽ”9y2g}«”Óm„¶–1 rīŽ9^1Pˆ;æ³ ‹åB“g#'!>ŚŅźÓU[»YŒ[>š*ć.‚R:ė?Éo<és$؏÷O÷`ėŗ^›«j^­äØÉ(f%[=ĄģkX» ÉŗšMŗAęDYčWłšį…ćŪ]żŠ(Wå˜}ÜqNR*(ģ¬..$²ĀE"Kžž•fīH­|?sw|č5“ĖH›—aź+H>¦˜Ś|÷ĀŲk‹WŒļ'Øö®E“U¼×’ĖI_%’PÆøc ö­y“Ųś‹Jדų-……łó."o™•†Ņ;Ī؝SEÕÆ.c“u‰Ó&9QXĻc.SWÓmv<³rƒ(=kƒŗ‘\¾Ōi#rŽÕœUȱ=“éoB"µB9$ņsź*µ“:ĖŸ)ÓnI Až¦¶å/S×4Ńtō7īļyV4ī1÷‰ŖŚžµæzF<“få=MLąĄ­do5(ŽÄC™…¦øŪ,[]ĢŅ«łŠ–Npk4ŗX4ė·@бh˜ä1#zŌųŽ(µtčä€qęć«HÄ®sVŪ\yQQ‹:Œæ„rŽœŚµŃŽ‘cszī>Ō¤¬kN-Ÿ³‹§ų[Uų]©ė]ĀŚÄCĪ6Ņ€dńŽēśT’¼'¤ėšœóxĖK{9ÓɊо2OFćłW½*g•ķ;ż¬ü3ąŻQ‚ ˬ±cķ̇ĢL”ƊZ4y ø'8ė\ŅGE96Tß-¤ĻRčX†¾«ųńl¼K…ŽYķb»8•Ą)ĻQÅŠż“WˆØ¤›s‚¼ī÷“å1Ė XŒŁ汜n>"ų’šźk«Ł'›¢ź|RĀ6“N…¹ź1^!i…šĘg2E€¬¤äsXņ#¢ Ÿ”ß²÷‰ßĘŽÖ~jw0°Hq ĄVś:ź?aƏś’ģ[ūhųcÄeÆlü{pŚ^¹jՖ7l$‡·ŹNļĀ©ochļcūr½¹Óu°ń.€šĻįķB»“š#¹0ōėŸĆķ_ |Yē—Ņī$fœ•`÷2šīMń·Ą©ć^F>×l¦H°ćėĻŠWšł’\żšōOüWĘ~ ŗžĖšÖ®‹ö»Y X”¼ēxŌć½8½N:ˆüN×lĶęFˆFĖÓ!…aĒ!—o˜]Hģ{Vń8ēHdŚX| •9ČļR¬-!Œ:U9É+W$‡©}Ų› FyÅQefv-Ā»ƒY·©ÕLi`øŚ7žU¤²Fī’īłĄījć#¢É$]N%Q5Ķ“®TÉUČü…w?šAOŪ’ėöż™ģ’ć=^ĆSų›ąų’+\IŗK«8°{…/Z$“±²Ųż·æ‚1–bĖøgžĘ¼·ÅšXæµ[ØĮY”Īp9aé\‰œ‘łŁńĀfßTŌ!I„š\5ŗ°Ę֥ܵų…’ żœ×ā7„īõŻNŽ=biŌÄ@1øÉeØÆćJ™‹Gói:½Õ¢™fƒČĄbd9VSƒÉėYłnUŠ8Ē×Z1’ū¬iļŽ¦«N­»oR:ӉŒ£Õ4jå&Ż D䅾*a.ݚ!Ź+pH­T‘7{ķ`¶Ą‚G+ čIėķL’#óķ‡LõÅQ“A‘‚2Ha ü*ürøUŠ!Ē'#·­3”CžĖŸµļŁė揀ž)Y\A‘ȃU„FvMjÄæŻėųWś žĪæ ńׄ<ćŪ}YošīĮóFūį–)d :8ö+XU:ø“M^ņņÅ,’LMnSœ‰ڦM&ąOz'øscpĖ$J8ŲĆÆ>•Ć4āücö+Ѿ7ü"øųįįū(SÄ6Ö¦×Qa&dŽN2Wž3čEŚRϧź3iŅ5®„*LÆĮ-Ó#ėŠŹč³ivP\8†2RR„³Ś½LŅ`µÓŽś.5ȔłR7qŌżk*» ÷’ƒeügį}kÄ3ą]Ś#Ÿ.IX)Įćš5į’|o}¦ŗYĒhlRR^äve÷Ņø*S“¬9G æI•öl?»f8>õś-¢ĶŹŚDūCš:żć^åx£’“MķoL¹“E™#]3ŸŗkĖ]Fŗ6ӖūL`g­u'c’P-O(¹sEä|÷„]–²Db©øŒ²·jÜĪÅH“Cq1ŗ[t;»Ø«ŚÅÅ†šLpø`?‡ŒŠŻĮéė%Ó¹–7*c’ uš%‘[‹i|Ł[@H¦ \Ļš‰tĮԐB°õ­ęń=üžPʈŹģĘOļĒv2²LĖųykg«–C$wød“€¹õŖŗ½„ޛ⠸žV’/ŗy A<­G/A¹‘ŪX\Ļ3ŽFŖį>r}½ė—Ö­äžīKØąÄ}ŖQ°FLŌ·‚žŅŹßŹ“7 3f„6\¬l¬Q—‚ƒŠ–ŠŒ™»eØjPG%“s2n8ķķ]N™ydśdŗ=ō†{„‘<Ÿ_ʤ³Ģ5ķ-ćHĶóJŠŠmdGTž:—r+h²£Ü÷ ZŪŚšŻ!eŒ**Œ Ęš¾Ÿė_ŪVļ,.é“nj.s×µE9žö³G²=ÕĪĄp0OŽÆ/ń£éÖ”^Ż•|Ü÷ėŠĘDź|ūÆ[ BåJ`“Ē5Ÿ™Ŗi‘“łĢ79p2?#øå&zõŸöŽ­kg«#_¦8éYzā6“|ZŲĢŠČŹŖ€g`Ļ­mc)H½ēĻaå5äØL§åČż>µĪϤ^3ŽLÓ¤’3d m\š1T£s.c˜Ō4ō %¾ć1ŗ}ō1µŅ[Ė–\ V5‹¹µ¢xzo‚-Akر»ž¾õ©Zźz%Õ핼±†į€ā‘¤baµåÅŻĶ˜ūLšy*8ō5ōŽ‘©ŪėV#Lµ½O!įŲū‡*Ų’ŽCKžimo«ü9ónžušńüČŅ\'jņ[jś÷Q›É»¾JēojµL‡>ǰ|;šżÉÕ¬ ā:Jąž2kčĶoD“ó-¬ļ4ėxēŒl$–>õn63U55tiīč>#`+…ÕĘxĒ]M+Høņą3O ĀēųEa)t5sēχZ“7ڶøš¢¼w¢_2sĆ.”ÆJÓ¼qż™­, Ė—!=ņ+2ɾ4ė°ėšµž£Z˜ŃPŖć vąā¼{N–dE$lß0cų֐3“/ųŹÓK…ģ”aŗnv<žµ ”ęģ<BŖüŽ™­oІųµ ķ>ūģWÖ2Ū®,ąŒävJģ,tÆx›IÕVŹā9ļX×cżÖA’ EEžO“©čŃĶoØ5ĀŁ3mŽ8«öī²ŽŁäŚ ›ośŠŁN7ŲõMHƟnÓ”G'z°ēu%ę„kg}=³Ÿ™8<ņ*Čqh‡A¼øŠįϟ$ۘ‘»{Vö®—L±¼Č3ŌejøāŽ ÄƒÄšrHf×1|«"ć¦zW=cį”ꯌ$_»¼Ÿ—ėRj{ƒ.ü8¶ė—+3C˜Ü”1Ķx×Ufŗ†Ńµ‹|¼õaQ'ce¶Š-µ6Ó$¾·Gū9śõrśŽī­'ŗ[–’83f(ėųÕ&>Ty §…dµŌ!½—͹³’f‘Iķ“œ~µéĒY{ &Š…µ18#‘Ō¦’’}Ó¹yē ­=ź·PĻēL_īŠ ®tņY“8’ŁXÄNp9üŖ…ÅÜóH"¼G rƒpūŽŌģ+žWŖxpiW³Cko"Ā\°PzĻ*éóÜĻl”Hį~cŽŌ†LŃŻčŗ„)ud$¶-÷€ĻßkRhš­¬zm•µÄq“Ÿ0 §§CŠ ŽzM;VdŠÕ®ev®óž;V^§ąłćKLNČ>~ŌAįČmõ6Ł®ˆ–0rUÖ½ę]J×¼(ŗu²YĒ6ąė+.Jąc€ Ė Ś>•c©)Ōš¢~y Łļō«Vŗę›­iŃĖ żždf“‰I Ļ&›§ ÓbiKŽv>õč6‘ÜC¢YCzaP{ss4hŁņHŸŹ³šŌÖ1±ā¶śćkŚŒŪ”Ck•ŽCĮfƒĒįV.„Ō$Ōķ Ž?22Ų‘Łń“zԘÅŌé§Ł[¬Čr ōō®£M¹»æ“Ež#Ę@ūĀŖ %ń­ėiśÜq‰l’6V|ĢŁ?΢ҵ FÜÄȁ9-ĮŖęϵĖs„ŚN-e.V8ł³Žø{[Bżī ŒH²Žæ|Tɶ4Š iqgw. Ģ£x^›sėś×ŖčŚĪŸ²$–6Iˆźj ¢­”Ś6£§ĻD³'ŚŌ| æZćų­Ķ"FÕ°eeOįĪzH‡õĪ’ĢŽæiŲŁĀqĘ«I£I¤éļs{#'pų…¤bųn5F9obū$fbŠIĪįė]gŠÕl`:DR:Äüķ'”Ē„ÉXäģį±·ŃL!c)๫C-Ŗo!.U»Ž gG”ZMmu ō°¤¶ÅHe#œśŠź5{k{Ø ˆ“,zėA<§-ĢSݤĀ ŚßŽ«ÖcģÆR2ōļŪŽ“[Y—c»³ń—iĻ:"ė’VŽ›ā}åŅ6¹ģŻ»Ņöeņ3²¶°±½YdVY”ŒnQŠ×AąĶ2ĘĮu;xÄO>>Eąī'Æ©·BlĻ Ōō„·ń%¼6°Ė"™"Q˜ž?/ŹŗæG§iś{ė"ī4·ÉżŃ9*zB9ū{ż?V°/rĄĀĆ`ēWÆAqkmq%„r˜ĮŲ ńNÅØ=”ÉŅĻ0 ĘÜ­{–™¼µ„Ų°2¹T“±ŠĒjšf›&„āJ;uFĖ*ó“č3żkŹķujZ­ü‘yOg,Ł”Ė1×­W.„¤zsEØ’Nž8˜($·jłśžņVÕīnĮޛʯ )‘’ÅzŅNƒz 'ŌĒt×";yK 98ž*EĘ&™•ōóęå_įÖ­OŖ\\ŪŹó_ VQĀ®~cż)•­Æäŗ•äłøēÖ¶ŗPĶvé2“óåBc±ėZ‰®u]2ŚŅąģUź½Ŗ®§¤ŁZ”{XWymąėUђćŲó‹ĻŠŗģ3XŪxsP†ŽŹY.©żė Œc„p÷š¾§ā;É$kp£q-…ŚiŹ…Č@md ŃŒēkeļŁE°C'….D5¤³¹…‘^]GOSQĖ©ŪÄĶ ¬ĶĮ Ž ,бbŪS8>b,‘;Õ‚9ŅćQŽÜ$‹’¹Į©z *Åk—ž"‚9„ž{‡ ¦$$®3^ē,og%õą0ȊY©£™Œó;Ó/尿³¾±•ö02 ŁÅzSß[xNF{°ŽF}OjV{ČĻńW‹5/jOä²<6’»#†x®1.÷Ü=¬Ä”<Ų}i\æfŒ½[jŗÅj3·–"¹Ė=N¾Œ1l©ć=EU4D¢zī“©\HnI{vū¹«&ßKŅ­5AØCmw+!żįnOÆćDßAr³ŃÆ.ÅŌo0ˆ4XG;O­pĶ„ßCi"yĶsQźk JÅū3 ž’ž ĒM®ą×O‘ Ś£M…ɧŲ«-Āź  ¬×æSY2Ėa,ļ!uŠńϵµįóµÓéOĢqÉ Å=}ī®<Ō±-»±Ęs\ĻöUͧ•}v²JėĪĮüGŅ€±æa4hVŁć®ļ»Ą®ŠźčĻ·åĘĆĒJ`ÅfsO"ĒĖdśV–ž–ķ¼‹r¦gk>õ›– z.£w4³C²Eūܵøāčm§¢ož½uśoˆ"E³–ÖĪ#ŗpĆŽ3 ‹QMföčź1XE€Øc޵Õis»e2°F>]œīśŠfŪG=ā­-ļ,$ŽĀ$·ÉŹ».F}µrÖ¾J-ķ-ȹŸŚ4?3š #±Ī€ęSو™rx^CZ©›Ū¼:…·•4gŒćé@ͽ7Y·»ŗ¼Ģ‘"0<õÅnZÅØģŽ²øĻō8œÆŒü)ātxåÓ¤—̆@ņØ8Č烊ó½*]hF&š9,ī䍣x›’j%XG”ęæ4+oģCWŗ1’iĀČÖ””åŗēšńĘ:•żņéŚ^ž—Wh¬ÜŒäō(w5ög¬ųóÅÉcØź:·†ķ(Ł™€“ēŽėļZß¼K¢ųŗ o†ęļI†8×ĪyKKŌƒķŚ©FÄJ68Ų|!żÆ§ė:äńĢÖɄF';³ŌWKØ,×Ņ¢Ē O)LhæŻ_Jdž'}¦x¦]Uą¹ŗ „,ƒhH÷Æ@}.ņŁm³ä)|•ę³Ÿb$ś āØ4ŁbæÕfH[]@ Ś“īü]£x«Iņ4µŠé•¶%½(Ē©Óu .­qc{£Įjė8 “Ļ„} ”j—še¢Fšq“ ą‡ėZ†§©ų®Sq<1Ę÷6š؏žŻ5ē~×SÅ÷Śż“Ö×PFĄfLN1ļŽ‚£»»ŅŲK¦h6óĆ{7Ģ÷,Ł ćŽæō¬_ų‚ Śéš^ÉŚŹ`üŲŽGSA§)ŃYOõŖŻĀąHP2µYhšĶĶÅÅī£gmI å¤2ś’õØ1,Žkš hEple-ćøē—?ģoü_$· o>ŽPF±±ōdćš©q)@ōūoųgÅŗ3ėÖ³›ĖH_ĖˆYKpGįQh>“ŃŠ h ŗs·‘ķš«„cā ž©ycŸe§Ė,‡˜§ §¹&øO…žÕ¼E­É„j6RZĖnå]åūƎ˜>ō3ŃµĻ ^®§Øip@~Ā«ó¼o™’=kĆ|Eį‹ßÜ`{"7 Y²S(ÜČäm.öųZÉ(ūĄēuzę›ā[]2Ö=>X¼ĀĄ*•ĪW›ˆr3u ÆņŚ@ł—ر5ˆĘųžĖBB,Č„a§/Ś|ǐ a†ÆVŃÆEµå“[ÜK ‰Žs÷MdęĶ¢aųĆG{Zx§O½…nv,S—ĻĢ™ēŸ^µė~³ŠĶč–2óæ>x!±Ś¦2ģl„dPÖ“]M§3Z)Hɔ0ūĖé\cHĻŽIm­•O˜¦<“[¢m©ÉŸiQ_1„äńœŖ·šģ¼ā/ųI~Ó€µ°Ō ¦8ķ܁½½»b“TĶ#cÅ>ńn·¬I-ī„- Ė? c zWA¦ü/·ū@yš< ōÜ=EK„¤žĒ”iš:}ĀÉc™(摖>ÕćŸ¼=|ŚĘ²°¬+Œäüøz“)!}<2ؒyŚŌ»¶kwįž§ūł`» Ҭ==)- åč{֋¦ąĻgØF0G¹5jŹ5Ō/<¹ćŽ^NÕcĄ÷¬JŠ; 3G¹}>īßQŠŽāģ䘁ŚƾxƒĮšä…­#¾šXć\Fˆf=ÉõØtÅģĻvš'‡nl-Ņ;–žźå0K7%kÜ4‰f„K,Š v‚Ų~p¢°œ ÜN.óÄśoˆ.n$±»…š ĀHĮū¤W ­™/“ĶQ”ĘFÓŚšVŠJ™ąšG†ī ¹ZXĪČķŒć§×5Uš­ż£<Įįµ\nfĪsŽÕ×3hǹƒ'‰žęŚ 6+xęŌbnx,;]·‰%ń-žo ¾–$–ÜaąF+^dU¤µQ¾9̌x|u&½Įķä ¹Ōf·Ž äƒ ćµa6 Ļć źZ†ųf¶A-cDćv*ŹY}¦V‘#l“Ąƒ+Ÿ’·Ė-ņÜE(ŚŸ”\v—¢Ūéo4¦Ź©*§tv«S¶†±Š:†²Ķ¾Ør£€+”Ч§ĆӘīL˜bF[oÆ?>[ œō|*š¦—rņB$‚ė9wĪŌe¦Žę¼ƒćׇlo$ŗÕ,¦ŽŃau Ąć޳š"R¹óo‡ †Kä’ųbß8$Tz×Ix"K†No1As\³Z˜Ļ±oIŽHž_·ē`c³ É>õÓ*łą¤@īĒŽĒ =* å5$šĶĢöJī„s»>•Čźö×VˆE(Œ “Šč„[4åf·%·…lęFĮĮ,;}*M&Ž=jż"X”²‰Ļ;¹ĘOZףöbījżŖ įā“2m”ć­yƌ¼Lś¶¦²E ʈF6 `ż+ENĘ©i©»įż^śDkO,Ė$€"žµzU„……½¤š‚ƒ ČÜ>öģzP;½Œ3Ķ=Äk#rI;³Ÿzō;Kė2ĘP¶Qµä˜Ä„ą‚+-HžĒ#­x‚źķM¢…ŗ ŽÕŸĀ©ęM¹ĄéźkHĘĘņ3äҧ½’k«l“€‚ \Õéu ŻÅćtfØhć„tGaœ¦™}{Øjr]µĢ°ĀČal`}+ѵ=WNŃtČ/ŒęEå,½«9¾‚rÖĒia©As§ŪŽŁ2ķ.ąŒ޹]W^ŗ’†ŽÜ,§ģĒÖ¹„¹<ē)ā nhl–Ž$‹gĶ™s’=kšū]\Ή4ŃɑĄĒ$ŃXسŃŃZ(Ś9mćx•wnsYæi˜K¾, § –Īź2Šż6šŌčš{«„˜óóļ ń‰šåƜŃ<žtĢD“õ>•ōŸs‚TI¼cšöćāmŽÆ®­ģĻ©ŁÄ'D'-p3†Éöń.©¾ŸŖ_i®ā9c—OQžy¬B1±…ukówÆ“ aéõśŌ°jé·¶½ŹYĻ ŹĘLņ«žGæŅ‚ÖO‡^2ÓÅē|ŒÖ˜łśń~¢æ[<%Ŗł:„¾„c7iƒĶe=?Ī*j+1N²“ū˜5­*Ņ<Ūgś×įæüwöSāGĆ’i÷6Śk„Ų’ļKŒÅ—ŽåĄŻŌ=š*ĀĒń!ń'ĀWž½MĶ¼v„­/QNL3!鎯?Zšńęҳ Hوb95Ń–¤HŚ7;¢…‘_vwńTÖķ"„‡8ąõÅ_!Ī‹·9VB S’½QóQA×ŌŌņ³hŌ±UnäIŃ£PQOĢz¾²Cp¬Ń­œ`ō"®ŅKījA;Å‘C1 xäW۟šOOŚ“Uż‹æiļ|aÓVāßĀ¶·oōˆ]‚å¾™Ü=1F·;i³ż"tčž?šĪ…āŸ]%ö‰ŖYĒØŚĢ‡*Źą6·?‘’YmG÷NTń\•™§*±óĻ㉯iś•¤ ż „¶s×pÅ~düUš~‘©Ųj6…¾ŁÕ¢ÜŁĢr( ņ=OĢ„cl&Ÿ¶ŸĮGį§ÅŽ&ęŹĪśg,<¼,}ó“Ē5ń Ģ/4AK°'szWE)h®sTĢćˆetČ2ąsķQ“¬äü¤¶*ÜŊ²¾<øb$Kb™ ˆLrD»eG9,9ü*ćyoؒJ^fV;ÜMDn'‰ęŒ©@§ļ{ŠÖʑ] Q:OœČ ƒ±źE]‡b²ćq8<Šn‹2Jģ$¶Ž6—ĢFV…ükś~’‚%~Łų§CŌžxÖx,õ RŽŁmļ=£p”õŲpÜt¬åtĻźŸĮŚäÖ6znuy Ę©§Hbi².`'*Ą÷ėŸĘ½¦ģĖQšÉ‚²Dź}q\U 3ŸÕ<7£xļMńƒ|@<Ļė¶i×!€") ®g'ŁÆóµ’‚žĢ^(ż•’iŸˆ×ōé.tųgS£åģIāfĢnŌ‚3ļšēQŌŒ­5W‘ć‹Īž&-“Į?}ą«¹Æ¬…ØŒLĢS.hk@eoųŸVŅ5żWB¶Y!²gĖ8ū­Ļ#×­hüG½’„ŗéšśŽ :[XĀś3 ągüö®v•ĄóĻ ų§Kš^§ Ɯ$øgt[€jŽĒ~+ōĄŽ,µ½žČæf3]$daņķķ]tdsT>ƒ»Ö­5[_)R8É9Ęs^{{b‹;Ik"”a½ż«².ē$˚A2\4*>ī•k[ž ›™¬Äū;sšč†Ęw$š~§ØŲjööwr,öl6|Ƒļ^ūāĪ’KF‰‚K±pTpŽõ¬e`<>óCm2P vmĶĒJ©©Ø³1Ī07ŒpzZ©Hiā;½LAgl²§y»‰#ęÜHéł õ›U—Ąp3$MhT°TAÉi§q8\£šÓĆ÷֗×!”ņ¶®żJŁń-ƒYėrŻŽķēõ©˜B™Åj72Ū£ĻoA p rńźW :¬‘‰!Ī8SĮ¬ŹågµhxzęÕc–įmīvä+śJć|Uekkr³Ū±iœœž8ō«RB¶.J<Š&ĒŒ×ee”Į2\Ź&]ßx}1Ņ øĆ¹ĢĒs„Üß=„ģaAłCø zŸŹ²ī¢m:õ>Ļ"Élƅtū¦Ŗ,r=fĖP·ÖRßĶŽd€qY—™ÓƔE!ē =)ŹB>§«­ŚCÜģ"Qņå°Aö®W]½†āÖŅ6;CœäćėPYĻŁģœˆÉ9ĻSS_]5„M`ÅŌ{šØ¢&ix__¼¹‚Y&ˆZ,YĀ–0Ļ_åVn¦:œ ™„-æ+Žõ±„¢u֖3hÖĘįUzČON1ÓóŖq^A±¼äóSnÖ®Ę8ˆWūCS’Ń”tŲąąkŪīthuÉb“,7Ɛ ą~tœŗ@ņI4=OĆ7ĀżoščėŸČJŽßIJźwĶŹŒœŠjhźŽMNŽkŪpm„ć%Gečö3ųFźHķ/]üߘœš3č+hÅ ŹŪėÉü+g{¶fĪļ›œūÕgš¶“ik£Ŗłäó6i³>mNE×-›QIŹDP0äWYØų”j:„ ½ŻųQéėYŌ)+ž‹&«åŗ<¦4] č8kÄüW~šĀOxDBĖņ×3ÜÕ'Šń;Ć·©Ŗ46Ķ#¹n čõ ņĪm*ų³=ʹyž"J•ÜŻDɼ7$פsĆmn* œ!÷õ®S]Ó5/QĘ^{.ŠĄpßJ¾k(ō6t;{{ąRg0H#"­kÖ‹)kle,ąIž>_Zø¾¦RŒˆ5}SÄĻg${Ńø\sÓŃč©oął ?g’ÕŽFr cę÷¦+šĻ‰dŌnRD\ć' ]χlģÆ4é“i®…ŠL§7LóĮüéIt ö5t;˜“§6Ż Ö6 9 ‚)¾)µƒ_–mCIU¶¹`|q߃]r¾4īg€xŖž>ŗÖäÓ øK‡‚߈Ćõ žsHŅ' c{¬[^ZXĀ¢ę ¤U;›§©ÆeńĆżCWšń¼Ńu {[Ȕyƒ92óü4ģmÜņ½?Ą¾&š¼ŗš¤öQ5ĮkČXHŽģ{×”\ĒmŖ¬@Ŗ€0$ō©å4¹éž»–Źģ<Å}8§*yÉéżk3WšÅŒĘęČ­²Ć&Y•±‚=źˆsģb[čȖ³D¦1p3Ļå\†“£L»X$T*cĒ=ięCƒ%ͬŒ­•*–čµå2隿†¤¹˜ß}¢9$ŻJdžĒįßi×6Ėu#Ćv±’UFw7„fų«]sš@‰ĖĆ'“TŚZ ±¹į; Æ\¤·QĒ$‹Ćnć8źē‡UƦ0˜Ć+ć {T—m愠ŌōūXg”åTēQu¤Zi‰š“hŹ>ž}©mγöI” ©,e¶± ҵ.õŌ–ÄŪKQøeĒŽ€#Ćö’`I`µ’ŽÜŒ£ļ~Ué “µ"¢Är,q·ßš  ?Œzuφ-ōĖ8öjWXhü– 䩞&ōÆÓŻœĶ¹·]«…1ć•ā‚Y·ÕŖ7–ŲÜ)޳§µšžį¢ū>!ź;“ųP4—CUļ­­£·ÓQ~}¼|Õ=^9ČBØCddēųhĖŽZo²–Ńؘ°!łČ«ž¹ø1Ā1SĢ€čćŠ –ÄTe›ŪµCgā`šĪšźŠ9į$^Aö4ł”l.½”ŻßĖöĒ!Ć*Œ“ŲV“f²Kh#_“ ō—25¦TÖüQyn‹o`­“'ĢėėX§Æ]ŽH!¼»•Ų±ŪF‡„[ųrq” ”>ņAĘOZķtoÜ_$Č#Vœäzž;T™LąēƒÄZkŻ6”hÆä¹»óōśWÆAć»kŲĒt±#Bø$ †zÕĘ×&ĒĻŽ:דĻ^C%«ˆł;•OzƳYåaöpU€Ē^æZRÓ@±ćŻ]"»Œˆ‘Œu„įՎŚēĶ’ĻtKžŻEMś:/Ļ„Üx|_XiŅ6³§2Æ”÷ę)&Ūd’HZ†­#d?JŌndž%H„±8ĄäsZ:ę«}uzmuhŽ !"4 >čķō gP"MGHӑ,”]¦Qåüć=OæZĢžĪ’Āé›a=ÅGydĶ9œŗš0iŃ,PZĖ+1ēåŅ€%Ósy’EdLžŖž”āé4­m:Ņdfć”õžt ĖÓ/nuѤ HĄl Ų“YµŒMlĮ¼ŲǧA@ģ[³×/Æą[+±dc~2WšÆMń,^"š[é6šŒW0•œ¹Ęę®’<Šh¢|é©x~eYšęQ“ʓ׵léī,žÅbXFöóŌū ~…Åt=ļJHtŲ ™œ Ą8Ļ5Ē|Lńžµ|Æ>čåveR`" =«HÄÖ1±å6tž*ūXšäŲ,kŽą¹ō,3Ē¢§ötJĮ[$ąüÄŅp&P=7Ā:¦ā¶±6ŃYÉīĪ[MnųJ†’ĢK‡i-ł`uMCFvG#q¢iz=ŗŁĘ걁“c„sRÜG{Ŗ=ĘØ¦VE 9Ē€Æ2Ś“/”¼zw¬Ųne&U,½†:PµčKöõ¶”(w-gx¢źŁRęZ=ńœŽ(ĶÖķībŒadU%²=ėŸÕīü©“ĖˆŽŪ³Ņ˜Ń‹$Ķ4”V= `ēMmEŗ K3ÅmsŪžx›M°Ń®¼;shļ$ŹvJ­Œę5[ūæ 5åüw!ˇŻŌSxv_µE=ÅõĮ»¼™ĖoįŌߌĻp·2ŪL—É]½—Ž—2 Mixl,ļLĀN ŲøĻćŠč4=WS¾·:{»BĒp šĪ6÷ƒć¼•„ŠV€«ä uÆqųq£ĮjÓĆr§a·eWĒGĒ|Ø«v2NŸ}ā½[PšŽÆ§tµĖs&:cņ®ēM“šg†¦ŽJHlŽĢq̧ÓķŲø«Eāł›Äš¬÷pEel*ŠĒśW s§»¤–€ƒƒ‘Ö³“čG5u„KmČ[jƒĒūF›”™]ł#'Š‚ĶķJāŁ„hŖL¹ŻĄ¬¹å(Įźh)Fä]h ÷śŅ¬Įe{m²K…Vö“NÅJ'°x^HKo9"Ś8ėµń„„[ié! öƒŹ¢Oւœ4Ķ5āÕ§3Cqł²I°·$ŸĪµõ½{MWøM¶ū+²}Üä)śÓ»Ļé—K#“ČĆ#ø®‚X¢0+ŖQļJąUUyQrƒŒÓÖŚOķ`ø@±’ĮėH‡[Ņ'³¾ˆŚ’–ų®=k[ģ÷réÆVé½°ĄåžµqÜi\óæx†ūĀ~&—U“šį2¦3ŃN?śęÆGć’]ų¦ßVšü—å–™ ÉéZ›Ó¦ˆ|E±ńÖ·§Z}–udR9æÓ4Ķ_ÄzĪ»sŗ”#*ØĒ҃u^Ņ^B%@įG^„šĢÕŲ5ųA‰†7 ć5ƒņ&qź[¾Ÿ|qżŽ;Va±_9Ķfh^ó®ÄŅʏĢŻéĘV9¤žēg*ŚA«& øgdĆ ‚§»X®.&šDłP ? MÜØ£4\ÜŹ Ė“jß!Ķiź¹Ó-c ń·iÉĒœ£qŹV-čwp_ł€©}ŖX f»¬TiĆQŽ(įz8ĮޤSб“•Ģ]2k›Ø5„Ä©/zä’į ‰5E»µy¾É’Å1’MktIčśfĮlÖ%d…;īéYś¦ż±k%³ĻH€”ÜĄGj‚ąyĢz;C ŠūÕ$}+5`ž72£¾å8 Ń¢å×Łf/9‘Ōó†ļ]=żĀ^%ØKmń±+ĘÜzŠccUEŒ)„_5ƒ‘üėŌõ*źKu¶Ą~C@Œ‘ē2£}ŠI$ōEš;¹–IY¾ī@⁄}Všō¶‰qe5ÅŹ$‘ēÓµlx‡ÄŃMÜrI¬Ē» qŠ }Ī|Ų ¶¼‘;y—z0ŸŖx—TkT±±­ā–>“mŌLŌ..“ģś›’ž¤[ėŠ˵^ÉzóĪh–—(IŖi͆²…ż9ÅsŽ£}-ō1Ąģ–g!õ Ģī“;å“·ŽxĢX'yėšŹŗ–ŅĘx¼ć–;O Ö°CQ<æU·š;§ŽÓK(%ˆ,Iė[ŗq¼uZdz–ļGŗ,›Ź+zńšƒʵ©¦µrę)&fl·v±¼Ga Qۢɓå†Ć šž`<„ģŚ5•ܹ=—’;"llzT)29FšuōVwĻ"ø2ŠFÖA&›®j–Ś=ģÖŪCa™Ū„śÖ‘‘\ر«ų[ĆŹ/O»%p©Ęā?ÉÆ8“ƒWÓ55ø²:8Ʊ<жĒcéķÅŽ&Ō4[m.ēVø¹…#ڦAŸ,cīA_=ųę;_ķ–A©-ÄĄFxϵ+‡)7‡|5iŖ\%•¶.ÆvŒķćšķc“Ó¬,]>ĶdmŽHäcµO2&QŠĘ[ŪI‘‘ĮČ&ŗŪMJ)4MB};ÉūrÜšXš.a'cŹ|C4ņ¶“įX·˜yļY:lńŁÜA5ŁŁ[,=E0ŒĢO^K©\»DØ-ł+ņä Æń—ŠÆt=*ūHÓm–śęģšŖ‡-Žp=*’gL&TŠžMāI“v¼²‰ŁCFļķŠėüUū4hžK-~āś*hüÕņ¦“ĖÉĒi”ĘʞŠóęĒP²Ōt»dKŁ×䎽P×#ćAō½/Nšķ­‰ÓmbB·ąļ˜zēņ©±Ļ)ÜȰ»–ĘŪČR%^ :pjݶ”ė¶šöƒā©%›i÷ Q# "R}ˆĶ2łĶ9|Kw×3Ć 6`“2DŠv•aČü/ĆČ<¬Ķ©ŲGy-’,’y~bm ÜšŁéüØ3“źQÕleµµ W¹Ėmg{Õm#NhīķćÕ”»nöeĆHŹĢę>5ė67v:O„lŁ<“f’ä|ĆŲ+Ė4Æx–-{Żz%²XȈ9.;ֆiœ&·£«¼ŗĪ§7ŚmŠb A ķXśLš†˜Æy§ŽKö‰$UXcœńļYė²6ä= tKŁ&1kmĶ­Ć|®³.'Ö“¬ōżcL’ĻDŅķÆ¶»BœØäēŚšo©.'[­čŚĪ”ņi·L–ŚČ$ƒiēÖ»ļųV xjöņE²•f+ēŗ•-!ėüĄŖę ė,„E ę›f.mļŗŲąŗ źB×Ɵ“6”sāŸčĻį>ųx} ņQåˆĘKē’’•0g«x^Óį±Ó|=}e0æK}Āē9Ćų•nkšķģ‰{§Ś,qLSäłxŻŲšPī|“ćgńķåüqk/ö¬üČč¤*氁įdC®ŚbŽU !݁Ÿ“½Ÿ{čƒm¼tš^¦–«™^¦1Ó¼UūYZęĀĪKyÄ »²9Č=’Jv:H/ Ö¶śkŖI1 ‘ór+­šż¦—gļsmcil„Ė=ĪÜ0w5.G,ź3Ķ>!üNš÷Ų…†˜–jr&TęTöēšņ™µūoYM£-GĢeTŌc§éTŲ+œœŃģoLģcøĆ85~ūĆöĶM¤Ų±ˆgkŸĒ5”¤]ŽW[Ž]#O’īŗ80ĄSļX‹ŖÅ9ŽU{·ŪßėXĻc-t4ēŅÆmc[µŒä#1“{UhRźŌ­åĖŹ±F’/$gėYCcčoéV—‰zŌ£²y‘¶Ģ†ōÉÆXŌ4m@Ҭę±xĘ«0,J’¾ō¢h™Ģ}–[€\ŗ¶O98ĪkˆńŒǧަeö«īŠTco+¢,Ö/CēĻ |.ń-ĶóĶ­[%³6L„6ā™<WQ”xB O«_ Ću§Ŗx³Åó¦©%ÄL øÉ³Ÿ<}zW¶ĖaÆŖYēPšÉ-Ūk°Ź†P:0ļĘ*%G±Ćų›ć'Ćoė1č°źOŖkɵŅ%* vģkę’x·Åšę§y;=Ͷ,žbĒ"“DcbTĮj’éIh….wcŽćé^­šÆį‡ˆu»©ÆĄ…aLyNs¹›Š ĪĀIu;ßx»H1Śż“}„ü“±',GA[_u[A`³0ywjyä“é“\ņ’4qŠõ›;É÷“PŹ·Nµč¤}»Ev¶Œ5ł;‰lżÜt©SH‰DįƟu§&Ė„d‘xbę¼»ā.™ØeK`³ŻL“ ńveéśuü+¢3ŗ5Ščq §k«ŖŁ[µ„ŹZ$™“Ģ ¤Ÿ{<:V IĀ EĄC…Ī=I¦6qZv·k?‹ļ“]‹Č Ģ–pŲP;q^ågp÷Ē“G–O-€{5Œ·0q9[­DŃķui„Ai<ļ¹ŲX÷Æ)°·ÖỼ[» WLĖys;ŸŸŗ>žõ!v]†śĖEŽąG*0ōćė^%ćŸ4Ķ,Q¹Ž9['ŪéWŹ»F7…thŒņź#0ćļWWŖźŒ¶āŲD+Źģaɵ‘ČĖŖZÜ“qĀŠ¾Ņ0øĘ=źŽ„erʲ$ß.>āńš r9ķ'Døææp !ŒœŒWŃ>³y^ŚŽYŲ®B{c»V2Z—”Šk–°Assce:Må”ōŻ\ ²_Cpɪڼń6NłTćŌT68­NŠŪ¼²œ¼Eŗ÷jŝ©‘ą“qXĄŻZdø\ķm|[i§ZŻŪD¹}ƒ'u’ėWŸkž%kß+ģÓ¼2«øHėėWģĮE‡üEq p¬·+tżpNü«Õt?iļ=ĮŌīÖÕe¹ōœ2K ·ŸüὑGåżÜųUw,|żģŠā¼Ać 3ÄŚ–«5œSÜyjķ =qųUE4(Äļ5‹ż'ÄGG¶ņ#’t!@ėĄć­léz•ŒöwS[E#®Ń®×#VŖXAą› ;Į:ŖH¢ ­e}…$ ˆĻ®+°Ö<_OsqCoK1'č(ē¹'s/VńeüÕµoŪ¶”ŖFąˆrG=HōƄ|GćėŗĄ—]šyåó[q”/± &ŗ Ąé4ö†U¬*’‚Iź}k¤²²KHē•äSp½Pœ“ō®v†©6‘į»høłH9$¶Óa]9³Ņt=“Ń{"ݦJīę_ZP…Ķ•$‹ś&³|¶°X K«uƒ9ē=æ­tž=Ņ`Õ4Ū=BŠ$—.Ø%…o@GųWDUŒ§u±óÕʁצ8£w'ßüõ®£ĆzEĪ’÷7qĄ¢xP»?w8ļõ­ąśĪĪ7Ä}żęėĄ®FņvÖ¹Ū_}¦u’dŚŖwĆfœČ£«‹«I¢’ÅL. Œ„t~ŌÆnbcŖ >8lńėYJŻ~‡U”dó“PJF@8äżjHš1*oY'?0ĪąkšOS)Hć.5Fø½•b€4aÄmœåpz×OPŖ—Śd^(R±.uč“ųZŚŁ$@³²ūvÅs³źwZ¦¢¶é ą)łzūž•Ŗ’WLšuŅIuó8LwāÆéĖl¢MźÄz޾ŌĶéEßRŹĢ𠌷īĖw­_+ūKOøÓä3•żOŹ'@}GJ箵¹·.§™x†6Ś&AūŲŽxī+ą/ž Ó¬59¦³‘ŪO¼ćø 62T~µĄć©”Åų(ĮkO‰uCb·> ±¶1“L„a×;[>ųüÄßi·š5ÅŻ® ’}½XłĮ‡ś³č+jK”ŒĪsE1wa)žšØ·DĪĄŗØĻNł®“®s±Ņ@ģŹ‡f08Ŗ#ŪN"*ĢLÜ D›‹f2ߝ5Šsö€3ŸQ@ŹšFė;« 7lČ!xėÜž5r6}įe\IŠYó3XŹåĖYn>e” |œc8ÆeżŸ>,ė?ž1ų āօuocqe|©|^ĄĢ!Ē^3Š\Ś1Ų’@ŸŁß⯅|į_|Fšķā_ĆåFf łó­$FAŚß)>ĀæFāžŁ kKüäŚ$·$CĻĶ1–dµx rĤĀć'ŗÕųŁ’¼żŽ­?iŁāĻć>“¦E’ o‡• Ö^ijZuVō;[iĘ?ˆ×$€žf’Dŗŗµ’ŠźŁŠJŒpü2Glā½?Ć^'•lmO·W°HĒĢĪZOJfr—@Ń5{Ż7Zši‚“Ļ—ĘsŚ®ėŚ„—×v”¾ŠČø÷’ėÖ2ˆLóø®cŗŽfc·+č/ƒŽ?Ö4żvŚŅņņ[‹yŒ|üDN+®”I“č}÷i¬Ļ"Ę#» /š£„zN™gå@÷#ĪĒ›Ż]‘]i- Ė™e†S,*WÆ~•ĪÉ|Yžg³“”dżMncc©Ņ5&ŽÕf˜Ÿ;¢+.3õ®ŽO_Ć­™bmBģĮ=¾µ§!QvÜSŽ«msu ˆX¬~ķpöÖŚī§[d%¶¦}*±¤Yī7޳]?OC³§ĪĒé\śų¦ęŚöćEŗŒ[Ū” @¦„bÉ“Ūėx/„¶ńėėĄaPx¦śm_R7×0[¬Eƒķ=2(nä¶Ržļm]•cuĻ)Žҳ­4­>Qp³:@ʹxśT§ŠÄ°°Ļ|öä\…Ž0G8Ȭc¾ŗÕ$Ižqåą{t?­ē;ż/Ć÷(±’‡ĮĒjé[N}.5šBB¾~RzfƒH½KS°KœIon³\6āŖWžÕ.l’č#C.3³}h¾Ö7ZNœ' ‰ÕA*k™Š+ū¹ é•Āg“Į É«ŻŻ OߣO"š?ŁØ“»A©op~Ķóg$ćm4MÉoĒFyā…šwĻcØ®~źōjec„Ÿ(ć¾s[%m€ŁĀŪéžDLŽzē9=jMWycūD{Šž)˜¹‡ā O“h‹-¼ŹŽ| öśW5dĖ$°[Ė:&öŲ3ėķLƒŁĮ6 ¶¦iĖj,”cŌuÖÆÜ}•nR0D.ÜŖf‘ŗg™ųīŚO*å„$«d.ŽÜW’x|­“ņ°K»æńPV=šĪöŚÜ@dbĢŲńķYo­5(,ņ¬7>2÷®ƒ)Jē]„óŲ\iÓHX¦YHĄŗ=WPŌlōŁmļłDmé׎ŖśėsÓ5˜,''ļ+0_›Ž§źŚt7¢XĻŁ™äį‡<`óXĢŚ™ŪųšßP¹ŃY!-k•Ąe8 ćµx=ĘøśeŒ‚āIüšIĮźäW,·:”±»į©īu=NŹņ‰āA’¤rsļ^£ŖŪĶØ¬)mm”\ƒ“r=źM/ŲńmoBøŃu«›XŠÉpeĒAŸZ—ÄśėXčš{ ”G¤€ņhīvچ“ųķķē¹1ł¬Œ÷®ų§OŠt«ķBŽ cŒNӑÓó­#.„Iõ9;kM:}RŠéVńĄįłN0kĒ:­Åö·qix±č‡ļY@ÉķŸŅµ¹‹9 >ĘÖā9f‘ćŻdg©5=Ī„Āéī-åÜ%G9ĘćÅ}-ą­:ÖŁ#ŠuŽ]ėƒžƒ<ZĮ³E†ļĆŽš•½ä±Ū ę}Ƒ“ߌø-Ytė‹[‹XJKo’BŽ”‹Ló £Zj\\[E,iø Ž•é·ŚĆéśs^,é‘Ć9zńśSĻńĘ~āÉ4 i#}0J†\–śf¢Ó/īļ,<ūtsį) źķ ‚ĘÓÄĻws3AnąĘBœzW”É©[žÖįŽĪpBõ¤#ˆóšīāāK# £žÕĻŽčWŚdŽZxXī^y"™\¦k$jó}śŠ’=0³0ł‡Lō¤>Fv¶Ś­žŸ£<Ņ+Kå®a"¼Īė[Ō5›«äŲ-ā$õ`E2l*\M£i×Iw ć5ĢĆ©*Īķvw‚{ōN‡ŹĶk葭ZęܾŠ3ņŽ M£iśŽ·Ed­-Ņ!lzUĘ6ŠÖ+”Ųév­”››AźĆŒ×¶ų{O𿈿“lüKj–ģ„W9 GĒņ§+¢Ó±óv™zŗN„«hVńKmäĢɾs°>•±­ż®ĆG—Q—c°_ZŹ@ĪGLŌ­Æm¦ŠU]ĮšĒ=뤵¹³±ŒĒh”mņX¾0[ėDUĀ+SµŠ„å£“\€Kƽå“<5?˜. ŗ|Œ”5µ¬x‡¼M„jo4$mŪæ 9JņöŽ_ėÖŚ¶§pųˆb2Ė“Ԓ*µµyå‰ü’)¶3€Õ‹"Ć#æ–Y[wz{Ö2Œ¤µ1uK)%ł’CHčk™–‹ApÄÅXcphqčkŠŅÓ¬„*āź#ęōŒq[°xzäFn‚<iXŽ BžŸVŃ\)Œ;ČĄœ‘ŠĖÕ­ÜM3™ppАͫ'6¾[¶vŒf²ļõyīf™f±ņ`犨¾ę2Zœ}ģźŃ;ncėYSiwˌ±†ķÄw¢L“wJŅŽU0“lIĄč¶žXw({š~µ rwqÉȎ¢6S·#¾)°–HįfŲ,æćLl³šż®µ¢ĒrŹū£`…·rGoå\ž£ ўEF‘åA#Ø«‚F”Ī;OŃlµ½¹6a÷°ÄTśOƈeÕh.ģń!W=ż‰śÖ†š‘Æā]V:Śk)tČī•Ų#.Ldgæ½xóß[,ĮR6ó qƒĄ¬ēŲŌļō6µ™ 0r:Ö7Žc²µÕ,­,giõUb1ŌV`Ńź/ƒtkĄ]{P{ ^÷Ētd=pG~f鎐é—ĆMó%[t,H9;3׳S2’<ŽX%‹RiŻdÉ9ļ]¼0“vÅ̌ģzūŅ Ļ‚źyomą†øR̤zķ.4“v^—ΉA€ćź(±2ÄŠōØt Ÿé,ē~]ˆŪ]õĶīxóA¦ˆ/ōøóĀ™Ÿ+<¢_ģ}'Vy ęP»c„z儎œ 2UQ—ä÷ćք5ĻüK¬O£ÄÓGš ó…Éćze¼ž+Ö¤‚+›Ė4™t¬£#œ{t«rFщé–~Õā`¼™»r=kęūIÓüDt›¤ž[%<‘°Ø)Ʊ…Ø4WöšX4žP|Gl÷®Ā öŽńŠgŒķNCcŅ‘ t9½Eu9Ėøāłøćұ!{½Jī8„'–y?Ž \ØŌŗ…ŚÖhB•ŪŌē¬dÆX-°nOzkĻŖĮzŠ$…QÕ¾R55µŽŲ$»ļVlẚ „rѼ¹»µŽŅźl[EŸ(į_ēXBåŚö8-£.Żü_J ±ß2yö¤ dŽé’õ«ˆ×Õ¼R*s 5¶†•žtaä ‡¦{×U©Xʶ†DtYBīķP>CŽ’IFʑ˜+0 vZ‘mqo=ŌnWĄ,9ę©JʉX·'‡­ƒĶ:/Ÿ0L9;€®kÓ§Ż£ Š ėŚ©;²fS»§ Ä29, h]Ļ5Ī“‘ŚB@_¢Õr™,m¦Ș+B0:šŻ–öM‹»jŖŠ@Į4łƒ4“İøš4ø¹A"‚ä0ļč+'Už/Hų'4%aÅjEw©11ģÜXŌńUŚW—f(y¦lXÓ®-é%,’Ā„§¾ ]ŠnµKæˆķžĻk–2¹R§Ę[ƒG¬·…’Īię²1Ŗ.Ä÷5ČjĄ,‹ŗt\·ĖĻF Āŗ}ć~ÆØźš~Øź ¬ėw2öx›"’ž{u®zŻ™īq_‡ø Y|ŖŃ‡, Æ{½mŽēŅ©üŗ|÷ó# Œd§uŖÕ„¾d$ĻŽēŅ½x½ęÉjmų‚(‘¾Ń3ķ•€ :ń\Ę„©cipa’(ŁNr§ę÷®”DccŅiož > žtŒ}Z½Lųeg 盩¾dDīRsWXŃ;žŠäšŽ¹­i*Ķ2ĢÆ‘€„Ņæ<æjßų×Å_5Ė?C{„éö“‰-!‚Ģvą0­ Noį„}”„ń-ĆHcY¶¼'øÉ##š®’āGŽ ų­®hŚž“>›}lk(p6ĶĪ €=…e(‘(³ŒŗŅQŠ 8ī:¶JójōmĀR x”‰w);v÷ZV9ÜlEā½!ü;[]¤JĢyĻQ^<śÄÓ·ŁY҇éNĄ¢d§Œ®.µ§ų^!2ł%ffE‰×;ˆéŸÖ¼¦ĆijI«¬ööžB ø9źh(ō««›‹eK£|dŽ!ĄüøśWk¤xźĒVŅ®onįū^¢łŠŅFQĮ”éJž3£iæoŌ.Äz¤7R<„m8ŒҽĒ:'†_įn§g Öš²ČX*Œ»|æ{ŌXgϟ ģģ¼]io¢ßĒ&„hŠÅG™±Žx gÜW]ā_č¾ ŗ°µŠ#æ†X„ŽBļ+ 9Ą?‡Z›”ÖźŗĪ£­ßM{¬Ŗ½Ómł¶€OMuž½“ŽX/(²DćĘ;ŌĖDL™Å-n Q‹U»6ńĢ©†xŠąt&¼ņMWUæŠŪI±¼tˆ¶šŪrŌžTć°E÷*hŸŪ:'ˆm5hĪž±åLÆŸn•Š]i·ž(.¬PéŃ9hTž“ĘŁ©…t»(aøT14k†ć?•x·‹•Žłž[6š”).Ѿ…vŸA×4†¢x猭¬o„{{Wd üätō¬}#ĄÖ¶­£%±…× ę>aéEˆdš×Šō»;ä·y ŽIsXk6ŗÕųCZMĄ)ƒœā”©’“=’/iž‹I¹³Ø³¤fÉX&q’zŠģ5?xkĚķ½”ā'L3@żĪ„TŖfŠ&³iŻī—e©ii.ęęA¹Ž: æ>•b·ŗ•Œ’`n•nßģ*Ҷ†Ź'™k—¶Z†£6ƦC%…»ˆņFx÷®,Ł%åÓŹäV?0n•Q•†ĻEŃ-%ŠĮķtÄŅ6ĀW2ƒÉęŗ­nĀi¦{ūP‰lyP Ļæb>{ƒįÆĆŸųŖęžSq>­ Iż¤‚žµzω¼ _£[½ę ŌQn6ń•VE?Žõ”Ō%Ÿ3üDųqż›<ž!ŃvĪ‘~lnSß„ž,ė~²“ӆі]łAĪ~µ„„ŠžC“֘¬ł†ĢŻkR°{ću%ĆīD„ Ē'®=kƒń_‰“L“QfRvf ÷yäÖ±‰”ŽCķVŗŌK‰U Žł p¾$šäŗ„Äk£ ļ@ł~Eāµ2:-B¾³Ņķķ䐻Gœ`Ł÷Øõ_źŚŖŌ½Ö>šé@¹ŗ,|7“smg5ÄģT°b¹P=Ķ_ƒAŗŗÕÄb -w`©^Aö¤Ż†T³š…±Ž…$sžµÓjzM†įS„BLåUŻ›Kw¬Ó u<ÖFy&žéÕ·“Ļ «”¬RĢÉ)ŒĖÉl?QXės^c̵}oM‚)™Ÿr@®}x™—yy8Ē­ˆ”Œß"k§wģģŻOØ­«O ]^Ēū˜„¹ł‡L Ś23“°¶:%Żäó\@jĘÖŚāI$†Ia<›’*ōČ“Ū3 B#·yŸOJõÆü=Ō59'Ō”¶›į ;WéPämĻ]š÷/"øøĘVM¹Ć7ļŠ~„”Żi°Mu$ņīS”$p¼ō¬®[GĻ^0ńķŖ©åXM ī’`¶x&ųX"Õp$’Ś}ī”÷ ¹ēō«TĪvuž5ńU֏£ŪŪi2ƳI,UĘdĻcƒ\}£ź¶H×ööčŽ^ēdA’qėÖŖK©œ„ŲŊŁ×ĻH²¼š¼ā²Ķķמš‚CŒozČøĢõŸkļorF¤RLŁfąūQć]2ßÄ‚ˤźÓŁ+ķR¹Įø’øG©Ŗ™Ņ¤š7‚’Ī×QŌÖęąFæOzÜmz Ż9ęūB¬[HBN+~].cQž8½Š5łē[“ŚĖ( „“‚{Šī®.äū6ķېp1Ś ÄĄ³ÖMåܚx;ČĄĄž] •„…ōęibeSø1'=čöžeØ3”Õ4K—óEœESß ­ ĀO=“÷!ķ€|¶ķRähqz¾ŻS’)?w$mėŌ»eā• ‘"EÜr æ…bG)éšo„`¼²ū–Ė©,įp„ż+?S’ĖM··“”ķø-宆&€PŠ’8ÖęźĻĪÜ3’ĖYöi¦Į|×‘Ø 8'Æ  ©RŠ·&«qwz·VĖ+)ą{b±nlcŌcT–VVÉ$©Į ęœM5ŅŽ™ by €Ęē śÖgö„Šøpķ1d‘Š{Pd:ēHŸPŚšŻ³Ņ³ī|!™u’ ŁĪŠI,*“5ƒčgXiö‚į^än„TškŌ4”eIh€I‚ Ü2qߌ¤³ģk8’Y,Ö=æiy(ĪNIōƵ¾iž·{Ķ.žā$»XÖfŒ\“ŒÖ½‰Č¹/"OšÖ‘v~Ę-ŲŃĄ#Ģ~uńwÅ_Ü|Oń”ēĖl53dT’1NõĪg$ÆcóĒā_5ų‚MW·ĶĀ«He#huŒʼĘd‚hBćiĘ1čkH¶R‚'šķÅ߇µŪMM”%åØ.²#·Ó’­_¬ß üaoć-M¹K”K±‹€N lrŌåtÓäŠŅ/Ü2ļ<ęøæųY|[„O*'æ€4‘ Ž~•ĆR:Üpž‡ē&£­]i—ś„3Jū –÷;rsŠJüc7ƒųƲ4­B&Ņ ƒli+Īŗ”¹”¶9;é'Šy §ųjƂ69ĆųVéņ•Ž€[»FU™äb“ŽX.”€ q ėļ[%¦Ķ­ØI¦ÄĘ"ŽQĄ>Uō NÕ”’T2Éę  v¬„¹GŅWŚäWŗ$Ę)bYPķ#w$ā¾~ŌlÆ…ą¼”¹Ÿ”ĻJ›—© ŽŽ[o}æ2󚳈¾Żlö²ķ$Ē#‘Š.OؒźXywÖ±³ƒ­Ńæ v›Ø%ōÅļ6.ę*Œcš™JÌN“Sž¢–8Õa‰æˆ÷®Ć¦©­%›ŗī JŸQM14{ŠźÉ$xB‡q,x5ēšž½ØbŚįŽKĶ1©Xn‘āim/”‰ćFd®—ľ.}?W·‚Ą[]rxéœP>vt’ÜzÉ„[¼®æ2(z óģ&Ųq殂HSK‘õ“c\[…Ž@GUX"W–ĢIP @Ž~[čÆ`Œ,8ېxėõ¬†KgI°]ćtõ¬ ęś×RÜC•Ń‹7Ķž»«KĀ—WW®Ńł*fÉ;Tvfh±;jĶ 4Ŗ£T+?\»0ł1Ǿ;…;¾_¼¦’f±q±ų§[—[“ŌÆ/nēcņ’xäåx’^ē¦j×qI~ó3Ü*än<ż)“)t/’hh—ö7 Ŗ©ó6£?y»WĶ>,¹Y5­į@–±įƒÉ9’õVŹ$W‡o±óƒqĘŅx5Ņ[ki&™}ky¦Į,’6ŽŖ=j„khOĮ„Āå C{Ō>+¼‚EHĄć<ƒ××5•“G—µŠ»£Dą¶ąA=9Ƥ¼5ŖCyM"DTÜ~łV2fŠ% ’Zj—M„īŠ(ćl‡Æ0ńģćRū)³ņö ĮUąńÜÖ|ŒŅö&š5ĢQ¼vĪŽD”ń»?tV‹cĖ·?/µuz¾ŗ‡‚`“ķr“ŽVq•ģOēRhy KFŚŹXöMŖ¤ā½zmóO‰,mķ#‚ƒĢĮöź)§`9Łą—N µķóĻ"£š W¹ŽIćßFsԊ®dęiĆĻ-µxķ^‰i¦éŅiš”&Q ORjXĪYäƒChķŚä¹b@V$‘õ®Uū;ģ™n<µ‘NG”č÷O¦ŖDģŹ©Ą­y&»„Ky:N’9˜±Ž¤cD±įķ9ćY­^B‘ÉĖ{Ö”ÖŗóG2}øĒ9Ķ=>M;ĶrŪ}¢ŁÖŅ\2»7}+ƽ[ikSĒ!TvޤöÅfą#’ eŽ·ö8¤m’ÉĖ,ƒę_cSė*F”#Ņ ŠKÜćwLÕ(Ų >ŅźÕĢZ„$däĶCā= u‰“˜å»ŁR‰TwČķTd¶ŗ_‡­m…ķ”’”Ūæ©8ź+ -^ē äŖ!A=Ŗō°[¤žp¤Ę°“ČšéMŹG½¢ĀžI=vółŌɛDŗÕ!„X”Ęiŗ–o~čT_Ę»įšŲķYIāp]]j¤×öĖm†µvŃŚĄļžŠĮ J‘4t:]¤÷?»+.1ķšĻŌü"×N÷ŒŸjV$™¦­Ōv#š†‘¦§$öŠæ˜Ł|õ8ćśV25Ÿ†oµFx­&É+ĖcO„IVv=SĮŚżØ‚5šįLŒ¤ģ}kŠų³£,wz3A{ęÜĪ “ųz’LʘŽ‘a.ƒ40߫ʠnD#ÆKӊÅj·fFš6r į Fœš¬ Šßż@ –÷Æ!·ŃµUÕ.VöqqnĢĢ­Ży8‘Æ)ÜŲčÓ!³žG²›O5ZM“ļ*6idUS’ŻMČpśž›w;Čöļ/•œ‘Œī®’Į–·ŽDóIŁP±‘Įb;Š/fv7w“iŽkO),“»ÜWj¾ Ö|CŲÅhÜÉ»3»É “ŗŗ.x¶Æ;[““»ŠĻ¼¾ ŅZ¬dIß#µ±‰ię[ Ž[‘ÖÆj¶ķy§˜É.0UE9}:É"øY%7c§C^osŪ¬”fcŹāƒUē+«F¶wR36š8%yŖW7’±·1‘F:PSŠ"µ‚K›“!’I%PN 抣·ZĢp¼A:zw fmkz—ü#Śt°¤o=ŲB£Ó>Õwį}ÕÄĻŖĖz²mČhŽyǿ㚠Jھ6ńtŚ\ś}ŗK"-ĮŲŚĒ’ŖøébÜšB©€’7=óLŚ2ŠéCggr× ~Eą_JŸĀk·>d¶é3n rŌSVźhŻń6•„\J­ŚĻŠ•8 kĢÆ$iä1«±­ŽĘ›µŒ‹vjÓćĖp„yĶo=Ś (%ŪĻz€+“ĻÉ$HŪŽ„t:ī±lŗtLrķŽIśP3Ė"og]Uānƒb­<—ҹdܹä{UDŅ2ītv×6ė„›yf360r*–„Y5é™BÉżŌĪ0hę¶…›#±•bhUX'štükÉÆ“³®Ų”©m§ ­bĄģm,¶Ų5¹;AŒ×_ąˆąÓļŚUņÖV™4ˌnz¼šBŻyn"_5H9=ėŸž ‹M`ÉŸdĆfAւ„¢±ˆōėæ.HÖ!åœ',}ėȼKo©kVrhp+„šŒƒ{ęŖ1øF=Ī“EųS{qįÖ[M¶śŹ%„¹ūŸ jŗvŽšj°AŠł$d~½³ō„d¶*Å[?‡’Éf’YĒĢüžÕŽkŸ5‹‹4č’&² Ļš‡43Ģõ¹®Æī¾Ót§Ģ  pYMCģzbĀ!RŲūÅjĘѐŗ•ä13Ćō'$zš×²¼bYnĀĒ#óĒ7ÕjzŸ¬i“s„ć ’ŌV}³Ć<0:$Ń Ęp2­>foµĖ-_P›NTH®mĀǼ. qÓ½ky©g§É-éņc^‡ūŌ`ĪmI¤Õķ¼r&ūĎG„uZ„„…ķ›=£F"L4Š2OŌR,̊Ö`½šĶ¤Å®VRA\mś×6¶ŠÜ•a#?͆ķŠfs:[i÷w ͱ[ŻĶkÜŤé"EŌ ˆDsĆō¤JG=Æe$|½×Œ]\~%žŌŽA¬jį0Bń»čŽRź7»quÉ>•™«ęŠ„øB™čM£skšæŒå×m­Žś;O€<ÕŲNü½Ē„kėž5ŃļīŽ›{ŁŃXŸ5W™1ųÖŖHč2¾›ā:+k×± 5³›ˆĘ?Ī§ųˆ€ØĖä¾pHĒEāčģ®ž¼)$֚ŠHw„ž8±’Ö?f|>¾l’Ż$ŻA'ļz ̟h1ǬZ\A$VĮ¹cĒŌśŅĮ-”öŠy1ˆJ®I>“ÄhĆ<$01FĮxŠÓ’ś[k$}’•qÜP]/LifÆēmŻHĄnEuštŒi øäĄČ¤TUĻ›¼Sw]ŻÜ*ŽlĒĪxĒ’®­Łx’Xøŗ†ŚÖĶžŻ¦#„ŽØ“iš(³įµžÕK¹äxnU[ ¬Ś}kĻüUį9tżU/ōi?1AĄSķN,j&Ž•āøā…,5‡“ĻHŪt‹Ī[~µå×¾ŗ–ą¼±`}Ŗ‡c²šdŚtĶ;_†ūFĢFĪ{ž­ŁRžņcȗ…8ąūŠO),ö³^ZO}y/ĀŠįEāi¬nBob1Š ä{MBŚöX ǵT¹±·•÷*€wõ ’¬öŃG“:Ž1ŚŖ¶³¶Ü"†óŽzPMĪ®|č”ćęė¶ŖŁjWjp:ƒ.A?Žō U}z9-VhŌ³ōsŻWŗ½°¾ÓZ;…ŠŚcĮć%Ø ŠD<Åņ2ĖŠf·į…®÷Ā«æhĪk WQÜōp8)ÖØ©RWlā¼Eń«Ćķ=Ż†t‰ķ°²[) ÷)š}/‹<y”\GtVŽy7 ’8=Exó»géŲlĀIYœń¦£ń'[Xdy4Ż1£‘同 õÉēŽõ­ū-h©­üZÖ|E;Mo¢iĮtųäŲŲv$Ćt8Åuai7-ó(G)®åÖ-|Ž‹ńgźž”%“°ÜXéŅ#Ūš…Ō}ģ ó+Ūe³fƒwž 'ž3_UM-?¬nųe!ŌµHµ t'$’t{WYć««mBźÓL³¶†ĪŻSɄ÷ˆž½ėqŲó}?ĄŒZ¶›}5Ė¢Å'˜vĻÖ½ĻY×4M3SM>óU³ƒSš’dŻūĀ1÷æy¾½ØjÖ(×z{Ų!M+¹±É®OŅĖo“OČłˆHČł—š§žĘ¦…ln–öyžĻQˆ—‡®:Wŗ|¦Ś=üq~ī'7ČśŻź£ŲNW>mŌõI47D¼–k•\üņ{ŌŽń.—zĢ$1L’|ĄdćD6™qmk#Ėm1ČR:ā“n„ŗ†k+‹4E]ąJIĘį@¹Læ‰:õ€±Óg“ŽyīS¤iøĘäG·½g|8“ÄzvØŲź··ņłņīď’«Ų •µÖ¾¼µm1'¹å™ *‹C³Ó“üOrĖ’“¶ÜłP 7‹uŻ=B;<7œøi°Ÿ/^€ž]Ō“+}NŽ&HŻ‚gż®āŲņæxvMjÕ“{=|ˆ›ķnϘƧĆ/…ōĶ: Éf—vä`…z!ŪĘxõ Ņ2Hó’h¾ Ö¼;«Mukuq„Ł3‰fĻśÄSÉüŖ+æx]XXųjāI-#łwžøķŒńA-š60Üėskp IFD?#c¾=kÕtÆ[kīßU’kd{W1 \™[NüŠIņ—Ć’Zų?Ē)£Čį-„ķm1ł“ŸNõõ6¶ŃźZŒŽ³¬īʐGĶ@­Ōāµ+ķ95eŅLš›÷¤l~f®+ĪüUć×ŃoN…˜˜.wĮüj$3”Ņuk7O-Ö¦f±Į]»:ƒļķ^Ć źZvŸż™„Mdņå„[×ųF:·µEŲĻOńĒ…cžŹŅ-4żA"šT†ŒąĒ“÷[ņżk’]bóFt Łr±1ŖāȔntQūLcHć _śWŹü#ŖYė«tš¹Ž]Ā0ĒoZ±ØŲĶҼ'«KkŅĀU łI1éF«įoä’8ü°Ķó–ėj™»ū9|?Ó¼Iā6³fb]6# .~ŅqĄöę»GL–'¹HāČ®UļĻščg)†—wamÕėy T Ąqšó {V–ņęHžc4ˆÅU†y^ÕĶ-‰9xµ$Ó.`šUQńœŽ?÷-Äčl¢¼¶h¢f;yĒ5‘Q—pÕuX„…šįį½8&¼ĆM mw}öĖ·6ņĖø’sågŅŖ —‰õŲZ^¶™¦H×ģ 4Ģ0O¶*–”©_}‘ZiŚī!p~ļŃ“$·<¶ęūN¼»EŒfņ3ó`’:Ų…|Ė–)ĒPGÉļĶjBó=ĀÖvŚĀjBhŬє–\xć5›ą_ O%i乖)Ł‰ćŽ½ G1¤eŠūĻƞz;^^éóhzB±†É£} ŸSėßüń]’ˆ4=hZl»īf0ļ‘äpĮX{ŠĶ+šó2ė~Ņ5€æ½žĪhåFŹNÖē”Åy–”ā ųJėT·¼æ“ŗeŹĻ#øļZ8čW-jŽ£'‡£¼Šćūj*łŃ”8ć­q·?“v¤š-ޘ-¬#&Ń”h2Q}Żr+9Si#ē ųūQѼE½# ©Į)±Ī8'¾=+č’ iwÄKilń.›ā›GMŌa»[[&ĢU]Į¹é“XŚę™u#Ū¹¹ó ĒŻĒ śÖ°—FgĢĻ2ׯ„·øm3M½I.ˬe”š„śžuė>ūv…am,²4÷-ņ#8äֆrv:+MAē{„`·|g'<ā¶m„rBŹ£‰v'kfLdŽāÓ巈\yI($€rǰ"µōM.É$:Ę«oouÉ·%Ā…=Aā“†ĘŠ9æųēJ]\i¶šmKsøģ€ <zW5®xŽÖśĻbµ½“qēŹ$räö&“Ņ -3Ż\(—ķ¶ģ•SĒҲµB-ńHI`q“ńŠĶĘĮ#Š–V’FVŪ–ČĒZ³ż•ÄM»Ū=1ɤdätQxvīę 0‘1€H<ƒō®ĒMōk·yQ6ēs :Ö§=ģöŅi° į'k½T5&+ēVtlr8R)Ż›Cbž“£6‚K†¬qŸ§„} ąŻYō›Kō‚f[]Koo—8ż*$ŸC„l$ńžį›k™n§†yD[ĀĆ -Žü ď]ŗń?†¤Õ!ŽtÓ£gļ8 }*” oCāæŻĀśåćA*³dķ^ ļ]׃|9=ޚړŃļĄ!ĮÕcŽRA :¢]j©@>X›§×õīžŅō{¹¾Ļu{g§#Ädg=2@zM™¹Xā|U¢Ē¢ĪęŚsqĀQń÷ĒҼ ź‘CxŲGÜ[OJŽ]nQÕÅs‘ ŽĀWĮP5§§Is>„gŸr°Ó¬Љ„ćßź7š„$Ė"Ÿ/ļ’ōõƦųZöļKk «‡€ą²”b§ŠÕIč"ōzj¼{ķīvåޱµ „®"F!ķüUĻ)v"öÜēķvn1m6rO÷€õ«śn¹hu/Ķņ6œ°`NńŽĘ±~FŖlōż;WÓom¤óšŹ ü |Ēß5Õxu­a²†{ŹŹ\Ø8ō©¼ƒŸ=üi°µČµXV{Ź؊–Fy"ø7@ń·tøš\aä=ėXĘćō›Ä:~ƒiį½Vh„D' ŸRi’Łś}Ę —z–'܊yõIXчмY”.”öšjFŃŗ¢čѰėł×ŒAiĖö•‰ŁÉČÉĻ5&“2﵉ EM‹‡ĀżźåEĢŅIęDīœ‘ƒŽƒš{š–’J™®g~0©œŠŃ²ūeĢÓK"oUł²AéAŒ¢tŚn§ Oē źz.€o4ŻCĮśUž”q*Ln„sF€‘Œū׊Ńų.āćT¼ÕtėI-m&ÜžZ.6§'‚9ćśW²āAėR%ķ×Ćk›.vŌb² Ģ›÷:ć‚OҾ<µų•} ć¼šŻ,É>į1`ŽżzqYø…ż”4=__¹³ńÜ׳ĻgsköDV9ANµņD¶l©nŸłV«‚@‘“%µĢ7±²^:ĮŃ£ĘG^õõæģÕć”Óųłį4_[źČ³Ę×e¼É|™ąĄ&¼Fā–9¢IÜBưéō…ŽŚRŗ?@ædĻCćox—ąĻ‹™Śč+Agtnõ ?AZ’³WĘ=Cö)ż¬<ń M7ŗ~Ÿ é§jJH‰ķšXPZÕoźu+ŸŻ?ö¾‡ć-Ć^?š¼Š^čZÅ¢^A4\”b8?ˆ8÷ÆjųAā8ckĶ#P’BB†LōĪz:ĪH¦jücš“ų‡Ć7w:PėÖæ¼³” ”nkų¾’‚ŖžĻ³ißī~,Yé?g‡[u·æ1GņĒtƒę$vŻ×>ō£#žLüń„–·²FĮ.Ä0\m±µƒµ`\9ąžÕ¼YĆPĻ"?-¤uYvä-Ś•÷7“€0Ü iĪFC4/ ™”wźßZ‰n^ŁŌö)öĶjiOrÜsŚŖ¬īNsč=jć<„_Źp²0Ąlgƒ® Ż“‘YdŽįٶįŃCmÉż™’Į¼_¶ż‡ÄƄ~!ż‘¼Q®Ķqāß Źn4TŗŽ=»v{…,WčG„féŽčė[Ń­źµĶ“rD¹Fķž†¼ćÄZ^, ŽgˆīädšąØ€ųć?…’Yµ ½2ČXX_ęLćˆå+ń'ö꿟—āĆūė˜ŅāėQŽ9Ä. J0śņ:˜³9£ł…Ö,’³§k)Ā[w6ŅžN ż+˜`$wY#.½CĘ»i¾§-M9 ą Ā™¬‹¹˜#g>•Šs=ĄÄ•sĮ9śS!ŽŽYŒ~_+ŻŗAQ•‘‘Č|Յ]#SĆSÖI0J7Üš–®\f-‚ĢŪŅS»¾sÖµ|·HĘĀ|ąŲäō”Ąč„ū“šŪāˆžüQšĘ/ ßKeØč·±Ép m²OnXoB{‚¹āæ¾oŁć΃ńWĄ> ń’Ūķ¬#V²ˆšāŲÆļ£oRŒ Ęz}+ ĒCx³õVĆĘ^ækoacr‰qyšČI镸Ķ>K8ģĖܐVYHīŻ3\“‰gęoüĆö.“ż±f{ĻhŗLæ¼#“Ęų -Ż©rnļĄČõSė_ēÓ{£]ųXńƒu[{˜/l„x÷0ōlTūK|1æNÖ§»‚Yb.ŹUšČÆŗ|-ā;+ų,nļ§S4QŖįøĄ*ŚsVŠĪP=[Å·Z$Ž{ĂŚÖ Šff†ŃŌ†śƒ^&—§*=ė<)ež­MsF¦äū3Ļ<#ćaįE\\-Ń1Čv«‚6Ÿjż;Ńõ6z|€[ĖRFk¶1«ÅŹł…ēgĖõ+×5§į}ŪPKĻ–U™2ćw^µÓs‰sNAmtš•†7^rIõØõ&,«¢Å“ć#ų«xȎR”r››Y•A=*¤Ēb|Å*Ó'OznRv$³Öo.ļc‰]†ēĖ„'ė^ė ž»WxīļYøw5U;œ,Ś~d»2P)#ęéÅsöz,7;åY»’éŚ¦Żˆ“"Õõh'Ņ µ‹>j9ݑԑ\”S\ĮaÓŌvÆŌd¶žĄ˜IĻJM”ąsś&•uØIqk½;²c°ś×Q/…nā¶…R?øé­!¹Ļ(ßĀ—÷V)_2éc,01œ ńłWą»»]aŚż¾Ļœ‚yĀśÖ¤r2—ˆāFÖ¤{Ysl$żŁ^ «@ģ¦īdł†sAq‹źhhQZŻę¬(ą÷=+cXžg‚~CžJž)¢m­Œ) ĆÜŚĄ“ ź7;pk°ńæ†bƒL…bµÓ.:Ē$ˆÄR~µ¹V¶ĘE¦mkavŹĮŌg„g]ź j±łŠüßwh £SĆņ]\NB”Ō8ōµÓǦézÅŌKØJš†wØĻ5”äiN™Ķ7€īWW“M³šź;`ć÷†{güó^‰{ Żxm› ’Ų2ųō"±sģkģŃę0x~; ©#··¹xW$3sß9ÆBŅ4ę¹Ón¤1 ‰dl?:žvĢóū’ źž±‡U+4qN\”s÷[=? ×#k×·ƒķ<Ű÷¾•–:ĶKLŌ,QtÅV‰&‹s±9Ą8"§Ó<"—:l“9¢0\’9>ā˜ŽėĮpXÅynę4ž$`vĮ#±®āeͼ¾'·Ób –īFņ‘qĻ²Ų ōŅdŃd"Un0yĪ)g¾[‹3RJœ}Śg9”˧Į5݌PŹ<Ę8ē'5Óčž$¶nRH6GڤŒ:S&GCXVĪ: ō« fĪO„¤vꓯ&CÜ⟐#+K‚y %Įs‚+¦·¶¶Šéc¹FAē'­#sZŽ[WK•DJĄz­w·‘i7;“d3ķ÷h5‹G›ŽI Ł,ĖēŚ Ż·$ūÖ¶†±DL —ÜG߀™ē>&Öī®n„“ģēŹfŲ8«š Zčp"o;›ž£w^ ζ=FÕUQ%Źn “÷«×žŅīķ¤ŽŽ e+€ƒW,r*} ¦QĒŻē„Z¶¶ŗ¼½l晭Q‚‚h2·CJMģĮ†UQ¹²¾Õ‚-”„å†|ć'° Ś;n”m Śčé,–±M mģį~öx®/^šœ±Ą.4Ä ąœmK] ÖØä|‹_*Gœuę·ōł®m%-œ“Œä;Ė—š¦£eaäe¾@ė] Œ” Ł ČåvcøÅ2L›}#TńKÉy$”o’4Ś>¦“µ}!®NžžtĖą€~æ7UĻ?¾“T†īhew2oĪÖęŗ­;VkP6Žr¼ū Īālč¾Ü·q,Ž „G_īÖhńĒ1V~ ri‰“« žķR00wqR%ƒZßŲ¶]ˆvņ³^īņÖÖŁlÜĒżß3ųM-žs ŻŪŻ<&ÉAļŽš+ó Cģš;Ā–¬ĪŠęµ,š…‰P]ŗŸZwEؤUŗ`d ķĄŚ@īj{XÆ4ķ²æÉĖź=ŖFh]ų‚ę ®‘‰ŌŽ­čEd[¼ NĢÆ“äūP„Z½®ā·,`(«+¬[Ē–ŅeWƒŽ•ZīR¾ēÆx[Äļyn"šå'~n»xØoī žy¤‚xēU8|7 Ó»z”īŃĪŽ8G}ņłlpǯҬhK§z–0ŗyģ 9ć sż)©t&'§[żšŽÕ.K•īż+ƼGūKŅ`“Xc3£DĆnF=ūq\ķ’‚<-zŃė·7Ÿm 刑ˆ@£æ^¼śPtEÖt\“ưIjķ VmfY”x$ §P6^hüūh­–^0½qW šĢV¶ļ ·Ųd`v ĀꅞŸ„źÖB~~oNLW émŖĄ!Šxé@ÓeYŪF[†²ž`ć”RzV pŲEsåX†~(eė×ŃK)ß6ņ+ K‰—sŖā3=é1rō05}Sģ·’GlG–1žõ±į_¾§>­¦]Ą¬°Aę”cÜēü*krŌ;šŗ •õĀĻ4³ ƙ°W¢ŽøüCwv>öß,ØqŒõöŖr[%cĒõéÖ÷RāFTĪīOCZ:dsE ­¢Ā’Ė;ŗ+9;ō7‡—NÓģ£ĄŽßĪ@ņæ÷ÆéX¾8Õm`“·Ke[’ÄƘ£·­TcĆda<¬£<ž¾“·qĖhˆ›ܞ¾‚“ķ*ī[mJ)”h£9łEwM,’”D$©ē¦“•€e„–°³ČØdK)Īź=źž«„ZŪ£4¶ĮÉļEĢdr‘41KfX¤Ļ“ėƜF‘Šüz„ĆķNЈ¤Uņó×½gIg'dq0µ0§TYaxļē#ŠŠ%™$. õü袵Õä”Gk$ ĖœÜKø±-2’#½X³ƒĪGb›!ė^ŪRƒNŽź;n&ęG4å÷Vך}мÜ~uł½ł©­Mē³Źp›{PݬŽ„ĀēĶ^TŽĘ„}JU¶ņ÷l™† =j£™J6+xzß$døN~ń$šģ£ÓĪ™ Om1‘$äƒŪžkb,UmRÖiŻ$d)ŻĮ5^źģŲ<82˜ü­»€(–Öu7¼hķ́ISŠżjšŽ© M»¹' P}«/Ų.xÅ\1æ–Τ8<żßĀ¢c$‚ŃĖwMć>>•£y¦[«Ŗ[É+ĆźÜY)\Ā»Ód‰ÕÉo'5«m=õ¤q °K'¶mŗ\uĻćW4]B+łXĻ Śäö©o©+;}GWšö™,j—znœźUšeżćĘ@'ž•ē$Ó|AāūĖ{_ƒ{r«‡ŽĶ§æ× |BGÓd\'‹ĒK÷qÓæCCMŠuļé7M©kW[u•÷ēęxvŅśļSŌ-īļ5'ŗ1UŸxSŽ6ŽÕąbq‰ŸŅ|!ĮŌ2źwŠę›Ż’—‘ó_ÅNC¬xkĀ^`ŗ„Ū°Ō¶/śĄ„9ś-pž’OxŅĒÅ×qEk>›xd.N: *įö·=¬Ę‚”Ś>Ž“ń¦­mo­iR,öwcĢWFĪŅOO¾zżØbµ¾šf¤jÖ×+©Ļ¬DŃ9bĢx÷ÖŖJǃ>éņGŽļ“ *M Āįõ»¤Ŗc•cĒ ~uöĆĶ ‡ß<5į+mĻ©)7—’‚™3ż:cšō²x7&ä~qā†b”„Žo'}ŗ/ų6>šŖI4R0ĆŹž2Ų¬ĖėI øh„±c‘šśĘĢü Q±f+I­öIåŗ#¼AZ·­õ툷ƒ{BĘEf<ē« ķ“Į=ū™Ņ,w3}ėÅ|ox¦mNSö»½ĮD£’@ō žmlmųŸÄ ©hšUŒlŖč įĢēŽ¾wŌōō³æø“æ»7@«‘(ää֊eÜõŻ/Ā0[x~ęī ‹{õ— „[xÉČÆŌü5`ķģ‹Å,L~\`OŚ“<Į4ū‹™¦Ię{h³ĪIż+Rę=nÉŅo ݶy’Ÿ¾¬1Š~u݉Nē£ź:߈µ*ŽēRøø¾š$U$ņMyÅŻÅŌ×ÖĘņŅy-‹÷\śŠLfō°Ć\-ŗ˜v7$Šån¬£øŌmĪgB1v4‰‘Ķj$Ō5„øŠrĆ µ¶·+UōŸŁi ¦„»µ¾¹‚Ē0ć»qzkč}¦[_jp SÉI$R«Ē5£įżZ4øÕ’e[‰"Øł ņÆ5…ŒĢ?ķXao§}¦ęBFWīMhxɵ};Mmnśu·Ó Mó¦0Ø=Oŗņ'Œ¾ Å«k+k§ižn“{|ÖÜO9÷®wF†łuK7²ˆÜŪ¶(č¹ u“qI¼µŽ[ę€>•ĘųĆ]צŌm“ķ&ń, bYG—æ'Ó4ßč2ź±ZŁK«i©/)8RC7ć^žŅiƧ6„ę0»pC^8ī(ĖwLŗ§™æÉ÷ƒ0NzW'ń'Įz÷ŒµgÖō(Ńļb‹>Bƒū¢:ŻŗPW µŃ§.¹y  “($e9 ļUtżāĀŅßOĢmŅF‘·ōbs’Ö g āūĆÜĻ22Ś” `׏kWŚ”vV«åĖ¾=AÅ8MWÅ’šŁ¾c%ĀZŻ —NgØ#ó¬ļ if¢EŽ—§Ū%‚ ²ć㯅t2ų_P’Ö÷Y±¾K[s¹ć$eśGŠgœśW½M£Ś>‰exė ¹^Q‡ĢŸZ ĪKĮsæƒ5?ź”Ö{[ØöłlȦGłā®IāM#\šä7±Ęt½d3<‘ČąćŲPTby‰üms$éfkg`Ņ{OĪØÅ£NöM“³¬œew¦k{1,¼—Ŗ’mwXŸ•ńģ1é^„xgK·³··ŗ‡bFUcŻžµØ\ˆóÆč7ßŪ#M¹‘-eTIŃ?ń„ҵfŠł$ŌQļ„¤ØĻn•V*ÄŚ&­™Ė_˜Ā(ĪXr쯔Ōolöij¾©Ękrg±Ęiž•µV‘Ź$‡ļŒ}ļz÷M7Ānmmēt)p\Œģje+’nē)«k馉†ŻŪ+`„^Hī Yīnd½ŠÕ”vł2H0KēҲ6}!§E$šP³½×ćøO4‘nä)Op;ÖV¶!ڶŗ\’ŪŪŖ„Āt>㊺gDY—&™„ĆŌ./,'Uƒ#’H$2=5ńžš–±ā«Ż1¦œĢ×-!•”ķgÉĪ3Z¤}-¦čŁŚEŅ„ŹŪ“13œ*1œWĪvG‰Vśęļ\[ E\øŽ…›¦}č)h?“O Üź·śŽ¤Ś¤ĮI‚= Čģ}kkAńœžŗŗÓm“Ńe¤H®ĪFś†²“…ĢßxƒÅ>(Ń5{ź]>Į “n)ž€õÆŅÓVš…ĢfŲÜGČ%›æūUū3Ūüā˜PsÉ2•“%ĘĒ£kš?€®obćK†Ņ8ĖŖ—PŪ‡nyĶrŠźž³saöŲ#v$ķQ’­c*†±Ocń6¾Ę×Læv»£ ÷ŽA[? ķõż3ūMõ2M"i fFÉŹ’³ō„rģѝć]sKŌ®•±€,-»`]ø÷Ēį^#āŻVŚŽAq¦LšĀ«ó®Ž­ÓĢ&w^k‹T’łŲ;0•<ž+¾±Õ^ā)Ģń˱?ˆśPO+ÜĢ‹ā“Źśtvź æ`el2śTŚõ•õ¬Ė" ‡BŽvŸēA,ņ/Ā2C­?Ūd„Hņyˆ¬æ19’õWԚN‰k«ikk%¤²]£ąa{ūzÕó³v?†Ž×r[Ą±SŃy_­ajÖm¢čņj—A4h»ÜäŽœŃŹŽ£Œ[<¢ļā­ÆŁZĒOŅÕü¹v"R8?§ėXžń°’iĆ­jĘó‘“;Iv'Žż+EĀ55+&¾ŗŒŁÜĀa=p[ڹmRĪX![GW9oŗŻēŅ™µģlYŹŃŌ2/W'ö˹̯!m£žÕ—A9-!ˆČĪņéĒÖŗ=>éRźÄGi$żŚČĄōM:īŽćQ™§˜@XīÜFiś„­Ķ«Ėyf$bwŸėQĪ]1tŁ­dū‰ņæĶ‘ČWCg£Å2‰§³™ ēęĒ՚Ā]?ń\Æ ėkŽø÷åx­’ »ĒµŃĶ#OŒ&’½ījÖŗĘZXß°ųUc}ā“¼æ»¹tŒ8x”o Ųąjź5ßźK¤^éÖ;ą¶(cu\ÉŽ˜­R!łŸ$\čóéŗĀĮ%„ŌöźV=ĮKž,kź2ĆOm UhąHą ž†¢WLĮÜą Óķn5†?gTł°Krį[7Özl1„ۘšį ÉśQßCˆāõvÖęՕvy±«uūÄÕć:vƒsāb²±X-!Ē «.1;?°t<™ĶÄ÷ŲĄ|«Imā(žń „0E l³g$M 6:ØõĖĖĖå²DņĄĪć]dZģ‘Ģ ö7gīē“ķY¹t1håõ N%¾›ŹbŃ0Ź”ža\^§qŖ5ĀHvy ß0čqЁXŃYÖź3²=«°ĒZȲšĮŻé@¶3ć[„½q ļåd r9ļ^ß§k—Śf‚öv¼ĶŽPūVź(hń¹5/fö}R¦’Aņ£DpŌõÆMх“BšOˆ¼!¬JņÜGjb0Ā1ÉĪ =ŗŅæ7¼{᫿jņiņ$ŠŪĆ1UgĪ9ĄēøÅiŲJ·C–IĖsšs×ė]/‡õŅ.­5y.'ķßpØś}kD…ĢŁś£š÷Ä/®xODÕīd•®ē]Ų`8QĒ_νy$©@ķžsņŌTFkCŠų£į¼cąė«,µķø2'”0A=Éź{Węī¹mu¦Ž^XĻ[Χ ŒóĻSłW?)ÕFzhw ĶšÄšėž²¼Šo3|xcŽõłūw~ĢŚoÄ_i”$KmBŽI,[€#»Q•äńÉYrœU" _¾ź¾ńGˆ“mbŽXõH.eYĮ“vÖĻéҼF!FųĻĶėéWqŌD ²U:uéU ;@M²…'†’ Üå±£ļw@łć’*²[$謄gÆ÷Ŗć{šB=DlĄŪ£CĮ>“«>ę`ŖŗZ0Ų³‘ŃØbĒ·Uś×Óß²æķāŁö…ųgńć²\­¼µž«1U’Ō·ļ7c¶ÜŠ-Šč§vģōĀų]ńĆ?¾ųWāoƒu+mKĆå¤W–ņÄĄ€ģ€°ćדŽÜŽÕ±«Ūa …;ķozį©…³ē’ˆ ÓµŪ+ż&YŽ7–'’Ų)ĘŁČüN1łWęğE{¢^˵ƒČÖ÷Vį¹ 3‚}«™#3łhż¼ž·„> ^ųæIŃ#µ¶¹‹˜aČĒ_œ•łŚöžZ”Ž9vōäżß­vS0š*OnŃÅd3ÉésT'+ć€Qø>Hź@Ąj–(¤Sµ¹Q׎‚ÉB°ev^ i<ŅK"ĘxĒ(:©JŚŚÉk,‰ÉßjĒd•öÆŻĻų"wķ•©xĒŚŸģż®›ū².—Rš£ĢŪ”‰3‰ķ’m9Ūź+9D턺ŲIÓnõ›%°šN±m§ė‰äk¾¾.ąe‡‚Ią²žŽE}u%Ģ:­„ź‘ęĖ™cä”›õĶqTF¦zŲžś?;I‘Öś2%‰†G·Õü"’Įjc æŁwö‘×ü[į«8„ųg¬ØÕ“³dG?XCāŻÄzeī¾–—ÖČgeė~ī{u¬4%-³6ś'ŠģÆ®„¼½[ydI@[œŽųÆÕƄ¾.Š2Ń­t_†Rx“Jhõ-Zq:"šLWĪśēˆ®õ{['iR=FP›•ŽJCYó¶«kogŒ“}”Ģf8ĘÖ#‘ųt¦ų[Hŗ·ž{ų¦·ĻŽ֘¹É¼I¢iž3ÓBŌn^–a$j€9ēł m÷Į“˜š¦…'Ū#¶Į‘K|ĖŽąuÅ"Ó<Ó̬‚ÖHDŠ÷œFuSü—Ņ–ˆ®ųŲŁ«‹B”Od½Ńlt6[»VŒÜ4`ŗ(ļŠņ=® ,ī^Ņ$¼·`VUQød’‘Zs å9[UĢqØFvĻ.ED¼˜ēŒ,Œć•ĒJ•2%ر¶H|9=ÓÅWLĢ( #ėÖ¹½7MS½P±ēļVf[ė <ÓÅŗ6Åē·½tńx•-"ņ§,ĆØ9ąP0“Õ±“[[٤2.÷Ī>•īš²mō³.š$ŽŪĆŅDžnöf’g)t.0īuÅ0ŚX“¹€¶› B€7c’×^SŖx’ūUÕ5(–Ķķ"VX¶Cé\ŅgTčpxjŪQššŲ́w ķČė×óÆ*ń-Վ…įū”“]ŽGź1ÓłT“%ŲłāŁ~Ń©Ti7¶ćžü×¼h°K§Ś¤D2Dć![Œ{VŃŲę’Ō³4ŃYĢĢS;—īםźz»Ļwå1Ha-€=i’miĶbįĆŚsŻĻÖ½ŪJ:uŗÉ)Ł£r–=~•ŗŲÖĀĘ29¤iĮ'µejzUž‘¢ŅÜw©”»Ąą-ŹĻ=„Å“āf­Sńͦ§a0‘ŃąßóŪ€WÖ³4±?õ+¹RI-ˆ‡ir0OŅ»9÷O:Č gZ@Ń·„j_`øŽIHgŠģµ±ŌĖpˆĶĖćŒeė>&ū²k”ŁĆ…p£–ć^oćh²E ÓlÓķ#œ³dóÓ„;˜ļ ŽAyoö«ÉcĀ†?„`ͬĆu•Gx²ŹAR:R5,Agm!GTn ė¼+įĶ <ĢĮåVmĶĪpĀ€¹««ŲAk4Ā8cŚĖĮ«Ģ/tē¼w•*­œQa’N“Xij+Ļ ØtŪ»{›ČcžM°ž2ėX4Ń~Õķ“HŸE±¤Ś<Žø{W™ųźmbį#:·Śē^\Æü±śŽżØh®VqvzV¢¦›ÅóoHĆ0Lü*ōö7Cs/ƒHŃDĢÖ žžĀ; •d@įĮœ’U^ŠōūU¼²•„nŠ@!‡$br÷:æ’Ā1<±“Ū‚6ķŻĢ­ė^)kuu„]ÜC,…!2rI¦ŁVīiĀWuŗ &2¤ąćĶoÉw.«c ¼V•±ó`‘‘é‘Hg[į_ŚŁėBł$k]…H<ćŠWIŖėŠE5ó)kŒĒŒŠ5ęxĢ©«ŻŽO4é%©—ĶŚŻ`ʽ?K]J<̶ä…<}h7DŗÖĶ:Xå{޼ūÄRŪŌŅ$xźr { •ߝaøX· sH«œŠb±·¼wEg±ČŠąŽõÓčŽŅ„6—RĖ0y~hyF8ō•8±Å˜r%«jWSŚ©ŗ¶ķ GO„nźÖ–Ƨ3‹rYPœŽĒ\ŚX|¬óÆ ź7VĶœŠńDé“!Z̽’ōėó ÆwŪ005å.¾”²©‘>{œäūŠĮŌ-䈬!O˜ŁéĶA‰Šh/;i÷6äBņ tźß…iX\…YSÉżą‘éźh&&uŽ”43Ļ$RøVb:t©aø’ęėķ Żž„~“Ä·«Åm{3ŪØHĆc­C} ŗ,žlŒīü(é@Ļ5¹%1‚p>•z%”ØH!‡¹ Lét[eøī£-'¦xč·š’Ā9­Ē ƒRUF“`ÜŸ˜ō?„4Qå-’ƒV–į¬ėKt‰d‰t9ŠÖ‘±pKcćL’äĻ 2)/N•œ-/-^(ǜū²8Z«t.Ē©xröźĘŌZO-˜ļ,WØō¬ų­ ·Ōo/-¢IęJŽŅŽøĪ)rö5Õä÷ 1’@ÅGņ q?ŚZ•µĢ’Ć3BżSҚVFųmā]M|Cq-īŖoį(­ī^½;’ś©ž9Óīµ;¤¹µ,Ö''åźĆšFRŅüE1-Į…ŻŽжn#[ø•–)ŁŽJœā±k ·6NVsŽw“YgMµ‚ź6ņĀ źGSI+hM¬Ži6Ȗkö•P„Ļ;±^Y}uoęˆįłģ?:³olÄ®t#Ԛ±{k+:‚ŒóMšADék ¶ąØ¼€kCSÖąø¶6Ūxv3ŠśŅ48 ,ē9L_+sź+Šü-¤ĻˆīqĄa÷Øżö‘m5ÄOrČsRėZ’ty®š<Ä#f;ÓNĮc*Ķ£³TtUÉ•¬źzt³@“•2d.ęķžŌ_ X™|;v'ۘžŹW~G~õMõŽa% Č~`{Š;–¶žŲŠ‘g?½Ž2įą s\v$W7°EجV. P±ŅŅ=&-6ŅE‡+‚3ŚŖ;YŪJ,QćœpĆo@iIŲÜåõ­B(/!‚ŽÆÉ#¢żje“vŌUQĶ39H»öIöC5£®šŁÉ³^•¢+‚“Ż/ŚPPzPŃĻjŽ%š×‡%„ [¦i'*Ė.{ŸĘ¤—Ęśu§—#\yK/ §ŽŌҹŖ‰Ä]ėRŻ=ĆZ[>ār޾ł®yo5K}ęPŠå²jłr—ōóqxń^.aóDmqžµėßšŠÅo0™vć ČĶf w<ę?Ai¬Mwu}4°¼›Ā±ĪŽy­ļϤYŹöś-¼(žHVĀüĒI4$4‡VšŃ"•ćĮÜW8wL׬§wŠąģø~ī€ŅhÉ­L)t¦K›ÉäVus”*8ĶIi‹rŗ“x<*R]B15d×īd²M6Wh@?x7Qž”«u=ĀϦ[ šą.ļ›ÓMŲה³įĶ ‹ƒuØĄ§iį1޵üaäF‰$ĮU!P.F?Č©s‘ēŚmŒsݵ'”©÷Ś5čV/2*D%z“éY¶b]Ō5›[¶—'īäškĻoõ;›«Iɟö¹ü)¦D£sšĪÆ;4-=ĶtmuCLFžF[½kĢ>^ęUÄ3б8ēv=EY‚=¶³ˆ6Fäe½i™øœÄQ:܏5I^k¢ŠŻXČŪüØ$Ü“ÓcķOįšém,ģŽ×ē*Ī;ßZ‘j+4”„u rĢžHźļWaؚž šŒˆöĶb’ĪŚWŠĮ“BžŃŒW1¼D ąö¤ü‹ä%°Œ[ĶŠŲ"ŗÖÓDV¢ä©ŽŅvągҰ’Ō‡f:²mE%sŌb“!¶¼›fųeUćn8õ5#Š} +ķ{Njżõ¬¶Čv¾X Œx®SÄ<šĘ‹sƒo¬AØj^JŹÖń°°“õ¬*׌UŁģåłE|L”i«œhųƒ|²½¦į;«ė³ŹI!(æC^“ąoüLńé[Ų]mŸ"ęā3”“ĄēŸlW…‰Ķz#ö~š¹Eū\f¾GĖréW7æG‚üAqvڜ7M7’Čå8ĒÆ­z²üXųšĖWÖ<9„\Kms#%¼W ×\ņ}qĮƛÄ椎‡ķ<¶ā”¤¹­¾6x9¼¤ÅāKQæŲĖ"ĘHiÆńWƞ ų…oįżB]SĆÓ‘™ń~Æjä4™źEF*ĒŽü8ń>“”Ėāļˆž$³mZčE3Ą©Ņ@lŸOč+å’x®÷dž5ūLĶ–m‡8īk®)ÄókałĻ©?eßųHt}bMśņ;Æ -»É¾åæÕ8m’?Ö­|dų±„j7÷_ŚŽ^¦šœFČ2 {ÕÓr<ļØ{Ķģ¹šs@¹¾ń‡ÄˆV1Éy2Æö24™[u#ļżźśßĆ6q\ĖqG‰ąēŽŲưĖ}Śi=Ļå=Ģ£‰ĢŖ8;Ę>źłoųßśŌīō©āŅŠI.ÖF:b¶å[ vÕļ° šåz<ĢųY˜Z}åÕó][Ėlń"?–3ŌćøĒjŃŌmEµ„’iĶ›¬ ńϽ$ŚÜ̳£XŽźÖĶgks^̌I,„y5ށÆjp_É,lCdrÄdVÉģ›Ųé~ióßźŽ]ZŖX@„¤’Q¤C\޼>ž.Ö5{°»ó7ŽŖ ōj ÕS3ü;ā;}Mø·Ōnc“k™ް|WāķöĶcŅ~ĢĶ’Y“’ĀŽAŗgœÄ©xg#lĘ0)²^ZčÓÉbŒ|År9ÅfgĖcµŃž[ĢE싆޶æ²--ī[“£8éŅ€<]Õķ£½x­§ł9PG_„aH¦é jūŲńŸZ œO-×õ ü<·QYyPjR6×.9ٜ\Wį—ŗŗńo†tčģeŌŽņł"‘pē$ŠRŃ\żzU†į•³F·‚4%™ …ō&¼”ōĖ»–9ĆŪ;oŒ…ĪķQLĖų,|)k żį¶–ā“˜5¼‹–Ąē®[Éhy”£Ćg" 'Ł#9sĒCėZšf—Ŗ-ō7rĻ)‹ŽœŌ˜žĒgmlwyńƒ*€įŪ¹®ŠÓÅ3ŚŪµ­™eČ9TśŅJśœŒ¼aØĖ{o£i·³ź-‰%›8TNēō5ę³O%ŹjN±Ŗ^]ZÜ7ĶūØ=k t:!QƒH²Ņn§²ÓĻ ®Šū3•öĶr=“Æo|³,D².ÄÉĪ8Ļ„iv ×±»Ō|;¦ÉRŻĢ¹hĮöč+§·ž×QµƒU¾·u¾q»–čOZĪlēdPDžp¶ņ|·Ÿå ”Ä cÓ„d#*ęćjÉäG¹ƒ~f¢·7ȱżœ»r;P”i©qŗ|,‡ŽÕŠėw‰k§›G–"Ž@lŽsXš/Ųć†,ovį‰õ^ё=–¼Kr!ŗø‘`ē~xĒ>Õ_Oń ×ĘÖŅŲ:žĄ9Æ”ĢĪVÕŁu#%¼‹ €8S’ÄwŖēW¹Õ®#gxPbFųż*¢¬G)Ōé Ƶi’õ”t¦Ą–M¹äõ5ē~.Ņ5 j×¶öJėjĢȠ"ö5¼ližGxu+ˆy„ß/õ®³ĄŚΧtJnhPŒØĶE‹×f{Œš$šlrŽD…nGŹ0:W1qu-‰/‘el‚:µg(õ"HČŌhEŲóSĻLĀ³¬¼CouØAkw’9屌ņJȓŠķ-ģŪN¹ńŖÆMĖ×Ųåu Gm#&`A›™—c­“ĘxåC3['ŽŲÆZš O­> ×FŅ$„‚¹ūĶō§r\ŽŪ]Ņ%ŌUf……ÕŅƒ ƒŽÕ䚦˜°ŗĮ{o(–,šĆ”§ĢƙœŌsŁZ<޶kęļČĻ9Ådk>.ŽśG¶Į[ū«Ę)3¦™ŠxfÅÖ“\bĄĄėĮõ®Žņ$ŠÜ!>T'©b¹äuĒc•Õg{x”.#ū¼Ž®RāēäRń2Mœ©č?*qZ˜KbŚäÜ©#¹9ą{T׌œ0 Ŗ¹^­ĻzŚĘŗ6 ±¬‰(bŪøēƒZ Ž]Į‡‡ļt .jiP›+”Õ"cv‹œ+’W»]?ÅӉ§2’ĩ؀p“ćM3HNĒčÅ߈õkļї14€6ÖĄSž„×č·Ć™.<3§hwŅMęM,,®”Ļš•{‰v^-{kd{MB ģ÷ʃęņ±ŲśńƊüšŚūĘ֗š®‰2YÜÄːb”ŽIŅŗ£EXóŖKtĻešOĮķgHń­®j’j°1/“G‚Ķß?ÓńÆ-ż¤>h­įėĶhĢØž[fܧńFĒŠŅ•4…LüńŌ"Ž$ Ųd ōā¹ŲļLÖ°§–āU‹¢²”;'Śæ²ļ§mCQšv”40Ä64\qœ'æƹ øYŁK ÷éÅL£`±xEņœ>Öl©ćīŠųgö‘šÕʍ­iŚ­¬ŗlČĢғįÜ8ļ\¶6¦¬x`ŠvH$ ‹“ƒĻ5śIūųĖKńƒ5o…¾-¾’åbb֛ŽZ#¢śŽŸ•D»‘c~ |Yńwģ7ūeųoǶ—² !oć‚ö(›dObļ†Ž;°­r-ā=#āG…ü7ń#Ā76—ŽÖmRęąmŹXØ'§Lē?Ÿ„L¶Lérź{§ĆO¦[Ć„ĪvDHŲV×ĘÅńĮś–—ę¬W‰\Zį9g8Ļø³0šGńI’FųŽ ńī„ćx<8¶VŚÜoį€dGv ĶŸŗ[züÖ“ģų­Ņcqē*…ŚŁŸö…krNž‡,Åą2Ųź*E¹I8²vJŃ#ŽTĮgf“tlĮ€ļVšPq€ī}+{R•w“ą)§«2…ēę^h*/RälŸ31!Ū&¶m®b—O‘'ˆĄ$d/¹¤tӕ™ży’Į»?µĢž-š_Œ?d/ų¹¢2j:–mĀhÉ%ć\ž$ ›Éķ_ŌUŻ”ŗŒHI]q÷[øüėž¼{§šųƒĆcS·’ ļÜmŗ6^øÆ‰>8xLŃ,,®ā™¦:„®²€æźdQĘ器¤µ2”Qų­ūc|ƒāG€ĘÉ5/ˆ~µø¼ŠŻ£ŽZ&\“lŸÅøĀćߊCq±žw>$šFµįOjŽ æ¶Hå·f…ūÜA ąƒ^Ö!Šę2Nō“o©Æ ńš²—V[›UX"™É½#ö§s–DŚg Fkő†øĻŅ»;ėK™4{ŪØ#’ąĄ†@‹Ėß“EĀ]Yą××`‘ĀŖ?ØäV®Œ¶³ $ˆNFWłŠÅ£¤«}£yRFĮš{õė©šż‰l#H¬p>cҶŁ­4m2ĻE¼žõ]® ~ģ'@Žłķ^!­}šż-o¢xÕ]ĢAsÉaķJC,Ą·ĖqĀ®1]­µģ’@Žå܌– Öiė> 6‘ýŪ6w+ĶtŪĖ›XJå¤‡Óµ1“ØĪ% ±d >•ä~%¾¹[oåģ·fåŌóZĮ™Ķō)-ŻĀ˜Āƒ#t<ā½;GœĖlƒ•PN†¬Ģ§ā]*żķ£æµ…n1üėĻžt­Āķ•GĶĒJ¾[‘+[Ē p]N•Ń@·VŃCŚĮ€rxÅ.a¤kųvę;=zõu µū#Ŗ˜0˜ŚŽę»OŚ”“”£y˜J“e7§čÓ6 ‘3—˜–?ōoģĖs •R ÖrW(śŚīAą;MW 8³ņG¦ģƒŌż+å›? x©µøe»™VÖ)É#»Ž.AžÆ«ź–śŌö2lū4h­Į篒Zŗ;O‰vś\KfÖpķ~|Ę9g'#ÖØųGU†ÉnDAv2…$އŽE;ėōC¼ūŠØäœžĆųšk åY4ņŅ:Ø,=\zPk702™`Ļø®·Ā:•”Ū •²ąŒóA3Ųėµ—ū,¶¼½8Æ:žŌ•„atŚĒŌVŃ1,’l_<[<Ķå78÷õ®nIœ ŽĪÅPĢÕ»¾¶øŚO0l ė|-¶£®‹Mu&¹FąvŪśVrHŅ,ōż>R ›č¤1yQ¹ņU#oæ½v ęYsB ēvqÉ5Ķ=Έ@Śųb?xCS/”© ÓĖzb¾E“ųu«XĘ4}SU”f;f+€zu5Ųēīüy¤ŪŽßQOŸBĪ+J×Å\ūLaLjŪ c5“V†5)£SÖn“|Ŗīģ+—²®C1FtßæOZ£/fzf°K ó!‡ĢŒ|€u©|U¬ė6zzʞt€‘ŖŠćźzÓøłbĘ{««gB!¹^jčžĢ²ųzśYęc*£ĒsŪłŅ5ŒĀZݾˆš•óˆbÜcH'äVuÕŌ¾&ńŁeø" _¼?(ĄõüØ4Qčliļż• å“¶[!_» Õ9µ«hbŠ[k„™ŁŠ²’tQqI"¾š[WvA‚p ŚxféõŪ+)ŅN1ŠPf£sāŸĆ»Ū‹ ŠŽ7"UĻßnxśŽ•ņn”e}„L ä+ĮœNåņ‘ų†ÕŠGkk&öĄ?69Æ\š>‹m{5ń»hB4@D² mcךJ$^&ŠÆ“łå@¾\Qcęw‡õOģÄø–UGCŸ»He/ųLķ5†Õc–v˜°/Dv5—{;Ś‰ÄŠĮIČlõ g¼{ż9-Āå>ļžkĖ‘ž×P¹µBžRÉ“zŌ(÷.:±®\Y„[g‘7|§žĆµwžń›ŚjßdšFyd#Š{Ōß”©ėÕŁž -ćłÜ…lt5VžĪ9Y8”ō9Ø ž}«Ÿ.ęHåhĆīąJ—Kµ¦ ]æ7ׄ} sMŅå¶“¼”Fó±!IĘSü+ĪuŪ 4µ‚E’]ū™‰äŠQÄßłX,~XsÅzg‚|¹tķE$!¤‘BŖøĪÜr?/ր5įŗÓ¢ÕŹėmŖŽ|éåśTzö»}GD³h/#‘@ó‚=Uæ Æ¤źYĆ6Ÿn©"ȁe'®Ļó» 8gp­›!I+Š ƒčjÉa¬K„[ßOnS{ci^yāĻŻcr©¹»/cģiš˜²k+KK ¬j#Ž ąsŽØKoŽń³®HļH™2“·‘ł0Ū4+øócšõO j:v™įi4ǁg¼3yÉ!8Ą äPgĢĪ śęhīn¤ŠYvK÷¹8’ėTz/…oukMbXõ ł…$ēēmW0ł®Īv&Hį“N°ŗ’[ŲB“Œ§%FOėŠõ=RŪbņŽHc™ĀŌTšEޱ£Žiz…ė$ū‡Ź r:×ö‹·“šÄĶŌ Öo!·¼™abHóć#Ö“.¢¾{é”ū,gĒńP; *ŹėP³E·uPć„;ķW–WgLI÷ĢRTō Ę:-šx§ $s×'„`éńż»UÓtėÖ @óįSžēńŖ†ę“ö=’ļū+IH­įšŽé£v·-4ÆkŚuÅ­śĆµČ>y$€ė޵nÅ3Ķa›O¶¼ø“Óćymā—±ÜW«\ų¢ĘD¶…dhÜĘŸ/Ż5‹bqŌāļµ ī-.n ób7ā÷ĄÜĪņ[‰\ȓą÷5-„cc7OŠo.c[«©k’§µR_ ź“_•“aµv’ösQ-ģUŽźG‚Ņ[xœł‰“gŸāōŖZ…¬·7(±ķEčG„@iž’ę䳫IčqÓŽŗ­įö½sØ<ŗ]¤—Ā ČĖŁ&³¾Ū%õ»Ŗ©PTwÆ?÷ßnž}Bņ[¤Žvļč(°y&Ó¢Ļ十ņĒÖ°gńŸģŅÄ9ĘĄQO”Ėٳ7ÄRµķ¤3FĖĻŻśW§Å"N†g‘bCÓ=iXN67ŅmFåV2†!Č'ØØ/Ü[H€Ī‡4ŌI!¶¾Ü¢JŌ¶1Võ“åJ«cŠ3ŒŸ\õ­€fŸ„ŻLīH/ĘF; ҶŅ.nī™"V~Äzbƒ'GUŠņŽm7N‘$rW’ µƒJ­føó%RC‚{śP%Uŗ×šĀr–i½äöŖĘīchח¬QXü€÷śTņ£[_rݾ{Ŗ„m:#:H ßĢjZ¾™:Ć{$Q>v˜÷©e#Ōg"ؗʦ“o Rv+äē±ū§’ŅÉnƒ )Ļ'”©rH#BmŁ#Q¼Yį{%VÕtķ:;L’7Ź£ßå^'ųÉšćD–ī^k‡-¶ŠG +9=}){T¶=ÅĀøūsJŒ’µž·sĻ<'ńGń§;kŗÕĪ„«źŽ1žÄ}=¦Ņó/3Š(ĒųVncY-“f×ĀŠ?¾3hž+ń©h^Š-ī~Ļmr¶ųiöõŚOo„sŽ-¹ż¢ō nĪĖQų„%径’ŲCTr OZå©TķĮe}¢„·>y½ńw‹ō·Õmo5—›R’OŽyŒ@Ž;Ū„}!š+K×c½?µ½{½dĄUc™D‰·±ē­x˜ÉŻXżÆņpŖ§z6³ńBßOŌ"±Ņ¤¶’ööe“ŚČ¬ĢŲŪĄČļšż<ż—µ;’x_ė÷p­ņŽ“óJ‡ ĮĪHnż8Ɵ­Łū :Z½ž’i-/įŽāĶdé—ŗ}®°ĄĶo.iķļė_š~7ńߊ5æŲ®¦ õµŠŽą„ĻQßžuékvgV6=[Ć>-TѵwoärŪ”Œ±!¢sц+Ėē]Jł3?›§ŻÜŻ[ŽŗćM5gŲóŪÆŲŁŚxĀ¶—k[ˆ¼‰‰_ŗrG”ÆjżŸægų‰§^j‘]}ŸH‚5Y'f*3č¬*1ĆT;ā'€­¾ė—v)’].8†dČ÷Ėu=«šų[šŚkńų£ÄŠæü"vņł°DĶµžĒԌ×v_EĪ¢ŠGĢqĘu æ,«Y;M«GÕķ÷oņ>¼y6K*ŚC­©8ņŠa@ģ­EÕ泄¤q£Ė×2kė©PåÜž.—™ŠjšĖKciå"y›9#µtŽÓ\ŁĒ/˜‘3ņw6?C[(Ųä™zīś āVr“¬Šs“żÖ¦éšÜ–śV”©Ž-“:¾Ųć$’ėėĀ®Ęg™jĶg¬E«Ąļo:IømsŒ{Šöo=Ģ2Ė­<Ŗ|ĀTϵ—V2ŽłšŚāŻ™#Ž„c™į=m®õåš;ŲeĖ‚üm™­Ō‹<‡āσ,nļ.ķlÆąņxćÉŠf¾Y±Ń|M-ÅĖŚYM1F1®åm§¦3·‘ŽŅõŻņ“= ÅY¦Ōõ9 †+4ćs·ŽśV Ā[ž© \½˜’“`1䏘{ŌŚžŗr%dpW¤s¹\ņ›Ķ+ˆē½ E9©&ø gĆ…—L†ęyDØPÄ»™Nzā‚ć•×<5«źW’ź—ó‡Ō.Jģėž¼żŠk­š·‡ģtfĖUy€š!€Ż6Ō¹rßD}š>&Yź:½œ‘ĄEµČ’–ƒŌš«®|bšÆü!VZn‘`öŅĪ"Y›…ečp8?žŖĪ=ŒŻ3ĘÆüW.¶¢j 7Œ•`ܰÆ-’„?OŅ/®uĢ—2Jćåģ=«b% }įŁę”II°/ņ’¶+SO·O¶(ÅŚR§¾:Šż Ž ŅķSūBYā“ĖčĢŻ3]­ŻŻ½®‹ØŁŹ±¼SÄQQ£V,sźyź]ī Üņhm^åaG„@ćfyÅiĻabȱÜ$ˆ’¹A‚±Ŗ3”Ģoų„ų[Iš²÷ŽGž9=?ƒį¦‘āE=ķģ‚8ćĆI[–ĻQĒփ73Óīcæ€eG7ś,Ī®+­Ó¼;§X:’hĮ‘ąĪį@s9ė¶÷ž/ń в:v˜ĪŻSŃžßžkĻJń‡b±iÆ-m„wnĀ1Ū<ŌžŅu-ö;·2Į°‡'$ö Ņ2±õ†‹ÆĖ¤@uQøĒ–ŲėČ?Zń/ˆž,ūV©§Ąmī®ģܔ%S"3ŽõœbSŸcŠ~ųoš¾ƒs§£­Ż‹œŸ-ŹĒūßį_:ųÖWXÕ¬4ŻīŃģÉHKFTJ½ˆö§Č'6w^“K—KÓµėFž×Uå„<£w u®Ņ&’ņY ±žŚźh£L”†cSÜŌ8²;ŲÜG<;•†Ÿį¢ø«’²&ŖŽŅK4*ŻĻl÷©1ågāuuÖ[ ;R’]>Ś^?)zét{Y¹µ:a±šęŽĘé‘‘’ė µM•ī¼c{m±‚ĘK Ć +Ą=Ó½Uš>”®\ŁjVrŽ›˜ba’F 7æēZĮō©ŲnØe[™.¦‘ß'¦céŽ)Óo-&³`$»ÜUCp3DĢ^‡E¦Iko,śd»žP®:g½XŌ•“ioiö\øč¢²³ĻŽīģnD­ž„ćšØ|G”ßÅ„ŚjŅI· RAAž¾ŌXėŒ.bx‡Ēz÷‰4m?LÕÓm¾cI|åzrkҾ xĘóĆ6Å/m7Ž—d#= 1ŗfæÄ Sľ ·‚3ö›}1K1›ŒJUžUä0]]%Ų $ŃÄ &7uŗ]ŒĻR]怜Kg²PrŽZ°ē¹umƚ0UOD4›±ŒßS…²øŅõFkv-£N[#ļjÜūtp–!cƒ÷ńŽ+&Ģ\ŒjńŽčööŃ)hN1՜§ņ©tK)M·ĄŹĢIē€=ŖB2²;m9,Y$•ŽFwU{m6!4«kę9ź«Be†ÓķcĆ)Ō` ēWĖig-ć2äõ5œ¢uF}ĻH“Ó¬ µ–+ĖUó(W×ߌ³"š„¦‘„źÅ£[ǹٙcsśž“Ew)Ƀą‚yļµu(>Åę’£ŌUõæŲxĶžĘ·¶±nU{ķ'š³¤:“<®IßߎI?Jź“ j}Eį†ę¾p].ņZ7 r…RFėœ÷¦®[ŸsčmõDVv ,;ńĖ1ĒĶīk÷Hžē^MBƒūle1×&­Fę™ć^3ÕōŪŁįøtyA ² Ķy©±Ö®dūVķ9 ēė[(R¼ƒR†īnĻ#®+Št9.§Łd‰Q9žŸ‰¢Ą}šFÆ ¼ŃŁ^Ģžß,„±ĒųÆų‡Ø%ī£sĘŚÕƒŒ}GJ āĻ+ŗ‚īį^u:p§ ŠŲ𔁪ł·- ¦ÖŒ’(čÓx¢ŽāÖåōņ.„Č#޼ÖęK·żåāwdć¦("Q"m"kŲöDĪÉÉĻ5ĘźVÓXŗ ułƒ|­ż)5s#¦ŃÆoāƒ7!ŸžTē“„fŠA:QŹqŅ“”‘ŹI§“³‹ƒ!XF~QŌ×¢h:ōŗ¬÷ $QBŻźj}™6;/Ē6:‚2y“ł„NéX­©ŁĶs0漉‰fĻ,1ķG'b”Ēź¶÷rfÅŁćŻ‚H®Z÷Ć^Fn^eiwW<YIPF–āÉmĻŲJŽ_…zŽ—«č¾!Ńļt­BīŽ7fUćē¾pEbmŠēuÆJ–ÓE¦NĶe„V+É_ZćµeXa3#K“ü»M\CQĪ<µ*½99¦\铎\‡Ź<ēV†F–‘£:"MrńˆTē=Ūé]%ɵ¼½f…Y­¶Ž¼ęrźGqvšZłq“‘GŠ85ap%¹Ų³le žzÕFV4ägķ6‘ąĖ9®ļl­ Ås%Ą¹ó$®+ķOYŚhß m5umŸe·)+ćüǯҽjRŠĪ¾‡Ā_š™KØĖŖÅØźz”ÖFZW)“œ…?§_jŹšī§wį»ūŻWLžī8ŽÓ±d;cµw)h‘Ć-ϰ<+ćē׬4ėØņČåCī9ؾ7|»ų‰įw„ų–ßG¶“‘føŽ‚3Ę1ÉĻJʬµUµ?(üeąŪļź—¶7­Ź’°Ž£ļ/j󉣆«  ōĘ+PčQ:Ÿk®™{cØÅr,]%RYTźŹŸØÆÕų’ĻÅzŸ¬Ś›{dhŃ ~ćž=kK]åŠķf’XĀŚ6õĮČ®3ā„-ükį GMø²µ–p†{i\€Š:ó•÷=1\Õ!aĘ®¶?:¦’+kél.ŚÜĐH6äōĻҶ|'ā[ ųĒCÖ,..ģĢ+Čń†PG‘Ūt}įūNč–æemĒ9÷Ŗ«å+_)żkc–LjÄžaģ™éV¼½Ųe$OZŲϜŽEū;…Ęå<})ŖwLбąz穦8Źå£ "³`##œÕ›Såeęå;:ÕF7ŠčŒużŸ¾>x»ö^ųēšĖć߃nļēGŌ¢’śŽ"Unķ²ć$z©5ž™ß¾1xsćĻĆ|`š„ü¾ńŸ ڲL3•‘±œ6AĻ¾įŚ¢µ?wŠŁMģwŗ•²1{”$:œ}kē’x`kßh­gn’iģņŹŲņäĪrjó&‰“?2>$ųZź ]OMŌŠD¬Śģ(Ąb ĆcėĶ.ßšPļŁ÷[šwÄmOÅś6/^˜@Y‰=ö RŒ¬fÓ?4愼Jņ]Aätć½cÉkˆ:EØĒį]q•ĢmÜϵ‘% Āļ“uÜøžuvęHņ¾Z¾1Ī ZFEfU`$(Äž;U˜ŁęW(0Š9 UČ)(Ł$RŻųķBH$|±&ņ3ČéC‹j0ŹTg×jxK«4±O÷†0 żiėc¾‘ū ’tż¬u恇ĮMWW¶ŽĒÄ%Ž…1]¢Öé[ęP绌Žx5żĄxWQ—Åŗ&§.”ŃĄ’Ū.”£¬§;„ĘųÓž;€=k £®Ē©é’K­’ex“[ {{؍¾­hēę†ućpķ×w×'ҽ'I¾“DiT[«m¦3ė#=EpT‹øå.ĒńA’ßż‡›ą‡Ę(~+ų6Ų<ƙ5K…6¬S¹Ż49dsøĄūWó’°Õm–’BfädsČ#®k—tœGųtü,g97©oW¹Ōõ{ę•<ĖŪØ"D‘gå?‚š“Fŗ·šHļ­cœ½9=ć]·9Łķj3[ŪYÜj0:ĀąWłD€vӊāā>“Ęš½Õœ±Ę¹Ū9żŁ=ĘsĶmtg(³ķ/„æ-.üæ OØC5ģCĢß1\ńŸŅ¾ž“f7ļścœVń31–·×öwŠŻĘģ…9ĘMvÉćY.,¦Ó„FeĪ@蜁ZؙņœĶżŚ#Atå›§aUļ5$Õ>Ķ`#+n€¶ļzŌĢė|?„NNŖ±¤“’Mq7Ö/¦j—‘\LŅ“lqž½zV±VѬmPÓa9 Įžµ ,¦™£Ŗé_ᣜƒPÖeŠto&į¤ė–EĻēŠńŻnņ]ķīao.. {Цdémƍ¤¢9ca#ŽĢ{W±xsĘW}Ł…ģ’[)¢x_#8ČĮ­7!F•;ńV—¦E<Ķ »%¹mĖžĪkŠķķfP˜tĒµdٲGS3ė6vņ‚ŲĪzģj{ģhf+XŻÓchæżU„Ż€ļōĶa­“µ“Vŗķ'ļ ójÆÆ,mĢv@,©“ĘO_Ź©®€uzS5ķš:ØŲœnšė4ęæ–¤A¾FY³ÓėY4+ć”jé8ŠTv=ÅiXų~ŚÖ=¬hī‹“ßš©.69?éõ®–ž Kćmlg“ŪžžµēĀå5 SŒqž¹ęŖ;ŠQD¶Š w3>÷Uk„Óõéā¹tLˆ¬éČ5ŗv0pŌļæµo¬’ā-N5ņ@X‚1Ö¼ŠęāŽū[øóIå³q‘Ę>”ł˜r‘$d 9®ŽŅĪ+Ļ#tK“œŽ>“ŠŒ{“¾“hń 2ž˜®ÄZ† ×Ҿ .N@¤ht:tIGż3Ī9¬ĖK„ƒQ•žVˆ·õ„́+š:’‰õ¹lE…¬ź«Ė*䑜HćŌ U›Æ½Ž»¦±[[™ŁQāŠ3ŽƵO>”bēÅŻ-äÓb¼Ņ§k[·Ś8cķ^Ks¤źcDs݈¬’c”>摩rčVĒUą=Ķ¬(£fńøÕō¤Ž5M6Āu¶HäA8䟄C6G–ŻŻæ‰VwžFK†Iīż*ŒšF›„A§ŲŁÜł³Ūū§ŠŌ)t.Čó­KÅ;ī¾ĄØ©m³pīkµšÅ¦ž-ŽYĢ{$9Ę*Č(ųŸDҵ-ŠŚ“,ŪIǧ½p:7…®4ŻBG7¼²1Ś­GøžĘ•Ū_jÓ}–(føp Ϲ2F;X’Eł°źČyśÖʧ£Æ‡Öčт]ŗ95…®5]N; źē<(źzŹS4§Ż<#š²Ļū"M3T†6ÖŽć>qą*óņćņÆ$ŸĀ7^ńEÜ’Ģ· #&ÅŽzūÖ\꼙©s¬ŽZj³Eac,”&cÜöcM×.mī­¤LR’¼u¬™G¦Åā}\NŽģǦĻī„{’*”/ÄMBK;©”†łĢʌ˜Ī lQbŽĆSŌt-[H»Ō#ŽŽx¶nxŽAéÓé_*ųVŹ=kT»Ōć¶–-<³?Ģ0¬Ņ“‰œŁŅx–×Køņķ,·,ʼąp+ŸÓ“gÓ­LĘcå€w¶;ӓV¦—‡mof™īɌĀHU#Ö½v M·–;«Æš”I.Øö¼Ö|ĢŃDņKŁ÷Iu«:E½Š°885±}āSGµŅķĶŻ±Č36ģ‡a߄ŨšV3]j61Ś,Ēģ|į ć>µŹā×TƒT`ĄƒÖŸ88Ųėõ=JĻFҚ øaøi@É#%>•ēvvŚNo„lÖ­óaN2OzŃ2č6÷Å6‘8µFŪl½Qł×_įŻ~ĪyRī6QŽ¢™Œķ¤ń]ī¦RÓĻ}ˆNߛŠē5*Śę9'¼Ž9·gŽqA”āóXZZ]E, ·ĪxōÆ@šżķį`©6ŲŲĒŅ€/ųĄŻ\éBÜ\Ģļ)Ųv9 £×5‘”ųjņ(b+s#ÆŻŲ䜏RMvן u{'UæŃZ?1ÕG c®k“VPW²—‘» ŒŠ ^bųvĀŽąH·nm­L<§Ž3Œ×ā-?GŅZYż¢ök‚Óą*#± aMʶ2õ? Ci-¼°ā!ßgšõGr–™C§#ūĀ‚¬z+źĀ֒ĄŃäŚ6Ÿ§Ét—Gģ³!a“żk¬“šüŲȉ‡bÜ9b°2”lŒmv䙭öJń!MŒ qŸZ±``·…‹ĢŖ¾™ķAm°1AEĶHeŌ”YH/=8ŗ-~M8ų’ĒSœ2Xʁv'œ ŸŠžtŠ©Æxzśx,\;gO~µĘėŽ źŪ>Gį0sZš(|;ęi†;‰HĄä©ī+CZńóéžGŲ Œ(ēFy4(d/ˆ|B5†I.„Ó`0ĄėÅyŗ;‹Én<¦gŻ»Žę“‚Üg©ų^īY¤–+¹V8ewŽ•«©éŃŪG-Žž›.Ą}ģV@g¬v‰ ‚ņxēšĪ{–i•X¤c½;cAšė3M-Üx@¤O;ŖµäVŗ&«Ü  ¬Ag‰Wœ’Jr+”å.u­VīČéz}Š„ģ’!߯FkŅ-“]cC“jS,øĘ8ļQ+ō‰Šƒi¾_$ģŻĖ óšē5ų瓃ķ1Ā“ć•Ÿj㕏SūB3]Žæ6:žsIŌćiäßū:ž7śUArŽ"Ņ Ķ{qjÅw6B·Eö®BÖ)ķ$ˆĶ#¤ ąØ=kSS°)åHŠäJ§¹¦_Ś;łėh^4q·m±‰KKšÖ§5Įy‘^ĆĒ&»W±ūg—ßŗDūøļ@r5”fČ9¬4ūÆ-–&g’ w 9u6ü)wµĆiś¼FxŁŗ³~žÕ±ā]'N°‰ŚĘ)"½‹y}œzP^‡™cMŸSšā;¦»ķW9_̚؊K3+ālÄŲ=ĶåFŠ–0•…Š:PÆƧŽ_Em,¹ńóēų©6 6ŲČHO8J°9ėX·Æ$Ęg•äüqLŁS/iGKӁ¹ŗ6 ŒzŌš•O5ܰĆ՜ ƒó5ä=£J»M.ŹI'…”b¹ˆ®&i2"Æ%ƒgµņ3Ÿ×µė™ęü4€`ÕY­žÖŽŚkƒĪø<ÕEŲŅ CVŽķ”pĻ ›ĢP@ōŖņköÓŽ:ČE³(5ģyĶT§ŲµĻS¾žŠ¶[kyÖ&?6S·½zāĮfšC%ĮĒå$žk2œlsRI®éĖs§-Ļe$žbø}*ž«¦$ZbLä$l r ¤IĻÅę[D‘#8¼õ¬hu]GNŌY‘ˆM…y< Ņ”n-Į¹óÅĀNź 'ž’JŌ³Õg‚x&ži$f`€⬬Ó—L·kk›»fš²ĮoQPüB×īuWA2i6Qe¦ŽŪ‡•čOzB<ŪAEŗŠąœC4s7ĪLæ{n;ZēõŪ«xc;īį\ši Qw9(.žÕ)Ž9–P:{ÕK&13^NJ¢äńÓń­»µįØ ¹Üū Ü r ²ļ,<ĖŁäS°†?"Ž(sˆLĘķ,Lct’ėŌ֗>éJ¬Ē¹j\ŒœYq“ŇH®ļŲØŖśŸļ£Ž-”d^¾õq•Ć•›ž»–ѦÉWīļ\‚+µŃ/4ė=Mä+¶LŒƒŒŽØVÆH$–ęž;uŽŚŻCX`'Ԛł?]ų§šĻūfćNŸĒŚ]޶d ‰,”UŪ<®sI»Ó£)lz$Ņ=ĢŸbø†įOWC•o”ÆOÓŅ--õ[‹ghc;FxĻZ‰THīĆeõ&ŌcŪ8OŚćǟž ü ńOuW“ńsÜ%ÜV+‹0.0ĢKō š0~µóę·š'į׈­4NMWǐx^9®ēMA‘g`A ®ϵsTĤ~ūĀ^fŁ(VqäMż«­;üśļ«ź:eŽŖńx6;«Mʊ8¢Ÿęu` 1'=Īkœ¹7–iŽVV<€ŲēÖĘ]Ÿ×\/ąfM•Zp§ĶSłžÆåŲäµ½«;•Ė$£ęĮé^­Y‹ÉmK¢~āMųĒQéSNµĪ_²ŠprØ×K#É>"[Yų«ā%Ķž“¦›_µéØņG»”9Žyę¹ųJĖOÓm緃cI»{·ß'=é]ŌźÉuņųF±Æ«Į,6r}•‹LˆĶ–žX: ŸY†8®.DHyw…iķ†QG-­źæ¶Š“Ųä±ø¹øKh%ułK}zףŸšĆŚš®›wćļ\Żx·QåķlvĘŖzr3YʱóŲÉ(Ź1¶²g?ā_Öæ mt„š%ʕcc"Ć.ų¶,Đ<ĀHźy9ÆsųšXń½·ƒ®m|c®[[-ŌĘ»¼³ ݰńŽž½ė†¾.ĒŚšK‰‡6œ×gĢW³¹­ųš{[ÓmŁUįƒ3ƒĖg é_„_ ōiük”’iŲi³h{¬Ŗ–^¬OÆ~~•āׯ}č—„ž§t‹-¼%”7ķ«¤k’œŌ:„ųXāqĪN ~‡iž"Ń-ü{{į»=V#m#£Jpļesłuö®k\éÆK‘²ĘƂ:Œt먭õū8 ™i”džqŚæ'u­&ÖĒāWŒ4{Ł’ÓLÓŲ6d<‘‚qīkztśŸ=ˆŖy|Ÿ“ķ Å×7³i²jކ6 nÆå»7<Ÿn}SÆéGˆ?gū’¦„i§Ļl$Қ92šÉŸøĀ·å¶ē×sćÆ|+ń׊gŲi1HŁĖŹķņÉ'¹÷ē­}UšĻÄ~2ų|ž%šW‰ī®“= bA5¼$2Až‡¦8®*š›S•ŽCģüV«ci<> °l\Ü»Ÿō—ģ™ļļ_LĒig`¶Ńi։ccˆ¢‰8 śŒš—->g¹üŻāē,N1a żŚ{śæņC&ŗ:ȬW$VΟuÜØ²®qÓ§½{'ću#cÆ[88e¢S»8­õ˜ŃŻ"ĪÅ8S0u»Āū·›ļ›<`S®õK;«u“¶o%6ƒ“ަƒ3k8įø q×Ē'=+Ču;½BĻQT#x…ĪzÖ ĘV;ķķ38r»HϤøšŌ³M j -£q"gųœWpr+錻xŠk«{››łölXĻHżĘ>•™ā Nå5ClHuöéČļ[Ź] Ė;ō¶Hļ%@ÜrČ5ŹŽ\Évķ»üłOlō ĢٱԟM‹Ģ™łFzŌ——VÓZ½ī„r‹a£$ą(–‡1¢ÓÜł±ŗ¼\ąē­^øńŅÜJ!0¢ü§r3żY&³ākŪ(tń-Ҥ”ŪŪŽ?*ė<#wā-å„–ę&ˆĒ³Źü§ŽržŪ”jb꯵Ō‰|œļ8Åu-ām'^G’[»xn0 €ĖĄćō –,ų„ś}¦ŸģwWH“t„d°>žÕÄi1Z9/c…ŅÕ āQ‚އA‰iu§ėSŽéöh©{l»&!6®­|½ć5›@ń¶±§\]§ŲcThN:“ך N£ĮRŚźž!³†ź_"ĮJ–ǧ®kčxwE¶·¶Õō‹‰¼­ųo—¹÷¬¤µ<ā'ˆ’±uk -;ķ·Mµ§u0Ž6­z悮ģ#·[ńg—ˆF'%±Ōē®}=ź tŠłū[Õ/aÖu«[’Gē]܃ ±£Čū wü«›šÕöÆ_®¹o{vķœĢ¤Ø”ƒĄ=½*”¬fŃ×ų“Ēś—‚å>"³Ólõ [I÷T{j§ąļˆśĒÄ(µ]gXšĻKˆ³ˆ€]Ŗ@ģę? Ń= q74żJFžW‚@įF µnMs‰t+!­X¤>"‰Č-8p8z’Q“Œąk6DOs2ßŪ6éŽ:ŸZ·oį]>(RĪņt}ĒŹŹÉģõ „1`ŅįŌīļ$µ+Œįv}MVµMKĆ>0G–ßķ–W» yČ9śŠŠÕĻ„õø`Óthnķ¶Č„ ®į‘œt>ü×ĶWŚ›ŲźĶŖ,0ø$k r½Æ‡aÕDsŪ E”—včūœ÷Æ[“Ž“–ßM»Id•vĢøĮŽ‘¢™Įź`ŗiā0Ė%ėįUÅgx I¤ß\é÷2cOy ÆøįƒgNMTeaJ}Bń¦„Ķl«c#,„wĪ=+Ź4;84Ǽŗ“J‰Ü¦B£ę÷«rV37tŻgK‚Ėu µN§+æ…r·wój„ė-ĆŻĮ»åüøö¬†£ŌĶy$“ą ²’9Čk,Ōžém`øSj~Y‰äPvAō"ÓōŪķfi”¶‚iŲ!‘¶ŽG9>•č:;iöš:XYÄņß.d`Ÿ3Ūē­3CÓ5]Q“­=OT‹e—” VN‘Zn†|'ā«Hīt­$IĘŻŠ‚¾=«X³šI£ŖI ’!gŽałpæĀ}+Åž*I}e§Isa§I5ŪH ²ŽƒéTsŹčšÅ¶Õ"Ō¬[?éLClbØźr}j/čwQźwķŪĖÉBøŁėƒJĀ՞c”Ck}÷§nž¼ŗ“ĄuäūW3£¾§w⛋» HąŅ#;ƑĻ^4$JG ų½u sKš(n^9Y¾|.p=j—Ć=Į:&›qąŲę¹¹Ō̌ņHą’ '#õ«ŒGŹĪ®ž 6Š‘c•$j·D gq]ÖCŲóež wHż9§iz…óMPbA¾k!t;H5éģ'VHĢĘå=Ö¼«ÅĖßų†öåå3¹|(Ļ}„5„ŗg‡ŚK”ķ¹WČƵl7‚¬WQK‰H$Ī9ķųR¹Ŗ™ŚŻh°h6Ŗöčv“ø n>õĄ^Č×[Icw¬„.Ćr$g?̐mą±÷®SP’Ųŗ †ŚŪĒ½I™«p' ¼¦r=«:IsHåčG’ZŸ31oSŖ±ŃXżŒ33§8ĮöŖ~)šŽ‘faŌD–ń€ž’o x“÷WšjH°Lė ‚8?z»Hü;¬^[M¼ĖR‘ļ}ķÕOOē[8š”ŗjŹéœķVNJe3F­&,}äS’k’h„3ˆµŽh%IT1ģzā½'ĮśdZµżĢ›%Ēķ£ø³hÖ2Šõųuh¬ k;Ūcsg!\ć$g?y׈Ā;;é°F~j˜« łxš^‘HŠįžpGojė4ż:šmBĘYe\l!EQ„–„›»t¶QämS“sœj­gpö G-ŁéšM‘£xĀś ˰‚NT ~U•¦Äš…ŗŠ€ŽŅH3œ~µŸ36„ŗŸŃ׃¼‹ub²ˆ¢ip0žÕļ:­†Žtć¦ėvńjš9C…É žēŠõižuyŸ—~;š¬ŽÕ/£ŅķeĖpņŚN6vŲ;Åei:t:ŗ9‚źdø•6õoOå]ń–‡,OMšeä^‚ŪMšåm­D™UfĄžŸ­}/¦§«‹ ›łmą½c;_…Ē󲜻JĒēOĒ/_xWŌ4;ėĖ›ūõÜė3ŒRx÷5ņ£dg1ķp8Ż‘Ø¬ 6WŽiÄlĢå%_N†¾Įż™¼w哾ÕZ2ŽVh GėźqéÖŗ ō1pw>ń·•7’5D`1ƒ÷kR,*2a^7ČĮQĮ;Ÿ~о Ҽ?¬]kó·Ń6ķĪĀ{õÅ|óŅ2É£€+ĒĪĪŖw>åż•|Dž,Ņ5„Ž)yȒ dµóqČä݉|ų„ćŲ×ö—š§Å_ Oż•ų‡R³”’nķ a#ž™¤ž§\"ܬxzVæ¤|JšÆƒž$ų^k{ŻZ²Šš1šåĶ£ õQ„¶*qµĄĻ^ŁÅŸšVŁ‡Äši_“ļ ›.žśH5I­Ū-ĄąąJö0’?=jŅ;Kė»6€¤ĪHĪ:޾õƒžäxgŹDŸ1mÄ[ĒcšQčQeHŅ`0{H®UB•Ž+h Š®!g™óūąB’,Td£2³ ōEXF$¶²#¢ŹĢ ‘q÷«A]eF‰!'$aœāƒ¦čiŲ343Ć0Ä-ŒnMU?šnķ~×ć?ŲæĒ:ÅŌ+,’j>7RˆW—^æ6@Öµ§Ž/·åÆü¦0?®K›aå<3.ɔ”qżÖó_铮iÓĄ«‹ˆÉxˆÆ" ¹Qš÷ǟ [ [/Ż[ÅW?č—\pd)?\Ä×ćļķaš†ÓĒ ń.=›i­›Fe ø2c üŌf¹|‘2IŹoŒü5qįoPš¾³¶ŗµ¤®»ø‘3•aķŒW*,@Ķ€[Wu#ž„Œ©|²«^sĮäÓü„xC±Įõö®ŗg;cņū{”Ēj‰·Ē”P żjȐĖXՒføiš`ŁQ·‚ NŸhw‘™UT DJ×BČpsŪ½K›CœqüØ:éĖ”½„xSšĘ§”ų—F½“MŌō¹ć¹µxĒĪeF}ńÓ½v?šNOŚ”’hρŚ/‰ģµX§ÕnG“Y>m7P‰Fõ‘s•2cŽüTN6:āĻŁx’ŹóKŃõ(į1隙ĖøعPōēł]Čo:{‹y#’9`}¼’õ® ‘-#åĻŪkökŃæj’هāĀ+»[|[oi6”įŪ‹ˆ÷y7 ¤ķēžAöcé_ēKā/ź? ž%źž Öō¦“Q4Õ9Żņ昅`_x{Só­įBUüĄŪ€ÉÅkMm隬ŽÕ”Ō­dlF¬Y 8,éĻoŅæS<©Zj–p_Ć:ŻZ˜£.Ącē*2?šé†ÄøÜė•mĶāDU”0<ŽŌŪ=a½øLK±ĮĮė[Ę] eói±_Į42¢Ą…{+6ÓHKyVŻ[xØkDe(Ųė4¹į·¶ŌŽd¶TC&w.Ć·5Ä馄ę¦ķ©%ļ®ī\ ԃJćTŗ“ŗt³- qĘF=+«šÆˆåˆ\}”cv »·=k!£;ĒzŪjQ‹kPYv“ųśW! Ų搆b÷Hū¦DøŃ“ŻZūNøĘŁbpøĒJź¦Vvs˜ KtaJõ’ICœūUĖnv½†VCm+”a·īć’ÕO”BxŽęé“—Ó]BĒ»$OzńŻLI/™¤$óŒ#s#Ū„„¬¶'lŒóĻ¢§>°»’Śś«(ĖezńļWb®cųćS4ØķšŪd«ņ³ž ė^K£Ų­ž£ÖņK 'qޘ™ŽMįŪ’ŃÜž^A'k¹Ņ¤‚%Hö3óPMĪ­5‹("xÕՓ£'r+ĖnĶ“÷O~蓌ö©‘GA£mŗFŠ^T ¼d֖•ąŸ:ņ>Ž8»œ1lķbxšÄŚĻń'…o4»Ę³›lw0œIĪA®Rʞʏž9ēE’D$/=čGlž0‡X·øÓ/ķŚM¬3“sĒ@kČēžņ-Rõs)“gįżßaRī'³š>£$ZŌ‘,™}»zžÖxĀ+ė Ū†’VbDyĘī*]ރHĘÓ54ū ČėäÜFČļ\unj_Uķ¢G·‘NŃĪ3J RŽy4yÖń™wĻ'5čƒNŗø±*2²ņ­ā®#˜’tĖ6ąĻ •v <<Ч}«›h’+lJDZ=+`.hž'M"xnĊ·jxČĪ tFąė“Å?—mnĪå@¹?…Ź#|G5LJ4Ų6× Öł$oņ?*óO ėŚņų»L¼Ónn’E—tĢ”*{JĀeĮXżŅ4ū뫽žK€QžŻkęoˆž3:n¹VÖšĻwę’CŪĻ\ę79ojļ~ś’źh°<¬J ĮWAœ_gނǂwhĶĘģć|EØj2fĖN¹>TØPČ®?v}Å>ßD˜ZB^ąLÅFįß4+¹čŗ“yD¹¹XžB]ŗūWUć;=+Aš4–ŗDjš›·—gėœ~b­\®SÅōĆ<žcÜ 2œf ×“łfӚXo& “?z”ÆŌNsLצҠ0Ė”e8\žžµźš~«6§gpӷʐ’ūĒ<ūL¼{‰īąG‰ ”'d’….„Ø[¼Ņ¤s/EDė4-Fhģqc¦AĒ V=ÕŻéIC‚²düŁĘź Ž*Cā+Ėy§»¾Ī PCdzė<;¦Å}`«wp¶–¤1RrqŠSK±”Ļ!Õ¬ēƒS–Øe‡BgćŌW]cq&“ \˜ĄĮÅnAŽé—o1ŽX…=}EWÕüEuż®›L»¼¹H`6ūā€"¾³†ć- ¼tėU­!¹ƒęW‘6Üt  ł/|ėhļ$Ły㔯Dš}ęŸ«éŠŻŚL’@IÜb8’RvÓ%ń%œV “¦Ō$œŒWŒGy¦j·w `©)Ü~dčj9Ēc+Ē6³ižžhÕ_yŃ!Ćm'“łf¼ÓSšģ_ٶ3µÄł;£Ē øłš„ ;ŸĮwwi1Ō F›N:äzVĶŌęŅä+ī?Äœ„iO¢²iŪik råPŠ’¦j‹xVźŅ䄟²±ĘÓŌ̵ušxy ¹Ų‹“Žœ×#āż-…Ķ•Õš6åMš õ¤h•бiéޟf%1†\‘ĄöĶwzgŁtyjeó­Ü‡ł»oĢŠ2ōZŽŸwĀćd}+ŠÓü8ŗ¬Ļqēf$žI§chÄģ4źžŌ`Õ4Ė»yRkž צi×z–±&œ'Žr›†C dzSq/—Ŗ1|A%¹·qöˆRe8ŚXŸ„pŗ_‰ęФ29 }ÖļC‹ŽwVń­ž”u˜P@įš7q“g®kÕuMBāM }6ō=ė*Ż=óH Zf‰ā;}<5ĢÉyócØŅ›¦ųŠ[ķu†Ż”0Uė‘§€8Ļķk/ż®ņåł_#ĒĪI˜Ó,®®¤š cmĶ_čÄ”’"йŗœÖī”§X„ÄwjæépÄuo­! ŗ²ŒFŽu·ē qŸjń{ųmFwHÄA¤8 ÜPiw6mōŁcEu9ĻÖ«ėšźWQYŪo,| sšøČŃ#OKš|šAŻŅą“·g„ekšĻˆ4i&°“ø6ŗc…É–Įéō­Ź‘ų•%WYć‘ę8ĆvϽ:ž¤·EnĻänÉĻ<†3G[āP–wöČnw€Ņ¢ŽPšę/,¼ƒ"ȋüC5Œ#=ąµi $‘*·'=½ z³xŽŅĻĆļaä9–UĢ=éEt<īŽBѬrwÜrGńf±Œ«q#yL® ź)Q±Ō\éPéVŚ£źß(U·ä>µŻųį­Ž” iŗĪ­«ĆkÜ„L&X”ĀŖ+¹&…ü?kouq„”k°’œJNI®ćÄŃu X£™NŲņŁ'Æ**ó›M>Äj²ZFYaL(|dW±ŪčV÷ŗZedˆ.ģ“€wĶ=’ģqvöŚ=¹¼‰›Ģ!HS»Œ×›Ļf Ō×Z c`v…Øęw™-ā]Ü#Cjš¢|Ŗ˜Ļ#׎ŗßŚ-äŻKhć.ToĘ8Č.NĆågRŗzC˜ß S÷½+Vń5œ–įä—Ū Ø'„“#³k@!˜¹ĄTWTĘ#—ļ})¤M6ŗi­ )×nµĮų³O’Xm&’VČN3Õ©ķ”P}ĆęgŌÖśņrŸuĻØÆG¹ń¬³²Ćtä“÷‹sRmÜóø5]au뉖ÖJX䞞ƒmGy¦^«Fļv •qųŅqA*g=ą[ ]BžįµŃ{=¼#s”ćæåR¬ˬj±Xż„¬RLÅæū“ÉQ±×Ūé2jHmĄmÉÉō®CTšØY&ŗó™ŒÆJ 3BŠFį!<×5³nZh×É_™x9āƒE-‚“P¶žÖ–ų6ä(Ī}ėœ“_€ļŽCåžrqŅ‚y†¾§$:Ū•‘JćÆJ4’4ėSØĻp3÷öžqAQīCęAؙ"8#ē|ńϵfKć$Ö ,„¹…N Ļ\śØ6Œna]XOā-f[ū[YlķŽBn<µĶt³ųOQD‘lę†v_™9Īh-QdzRß[N£S lznžõŁźÉ<¶¢`čbTĪGJŹE{;}róJģŒ}kCKŅį»B·°dv§Øoˆ"ŗ³Ō&°ÄÖź1Ł$פü;š6y źŚØ_1tRą śœÖ…ĘĒ”xŚÓUŌt½śĀ{>ŻHńØ3€qߑ^XšķµĖ‰!/üø'5œ„Ų|¤:€Ņ5 g¼„ķu=ĮĶp3M=ĢĶ嶜(ĶBcTĶxb’Łc[‡ŽķĻĆW<©føc1[”»ŪC“[Ø4»D€ŁČu6*Gm­»³•Ņ.ø$į&ƒ&ĶŪĖwšÖĶbXfF!rN¦kŚi“Óc†Y••*Ļ5åZ– ŠøV vž=jõ¦Ÿ”n·nä9.:Õ&TQ·§ų~Īī'ŠįĀ•ŒņµĀ>Óµ‹Łį*Ā+f,$qĄ#ŠÓ±ŖŠ4Æe›Kŗ™&ŗ!ŚzV†}Ć,— 7˵œ”Ų—lĪ–Id)+”8JšoxrńH–8åŗV|O*=i4‡9”ZOü±IDW©{mžIā_Śgį‡77ŁüC­°łem.É„Ž;–Šō/ x’Įž>ŠōŸč2JleC·ĪR®¬AéÜ~u…LZGŠdü1ŒĒUTp“Üäś%ņüĻ:ų×qāļé:/„5yķōŁ›ųĮ8•o§‘āÆ|ń?‚ōĶUų'įwÕ¢‰c7Ģpą æ98õļ^]LĶ'”ż‰Ā’Eųż^LuG›É-W„Ķo ŁZéŗl1ŲY@‚8cCĀØŃĮ¦2G!¹½»Ž»‰øŽ=½ĻéšĖ)ŹģštTdŗīž÷©^ßJ‚4ˆ}ž Ŗå“ |¹źEZ÷nĄ•~k9W?Fö &wˆc}Õ.U£·UÜHŚ3ķY:ÅŗYĆtÓ©ß÷Śō¬}±óG5©ų¢ęĪ6‘ \: ƒ×Ļ߉ģßU’Ę“ló$1]t%Ōü/Ē BŽ_Ū^oўK£jĻÄėMNh|» ’+É!ą)Ēó­ļķE³–[+ ›VĖ|Ć=ó‘ś×§”ü“U¹-J÷J/,5 ÕÕY#Ļ_¼sXŽSØjö:E݌›¦™i€<žG›‰£tzļ‡| §ń³OŅ.Kźšv•|ŅÜø_’5_½_ö€ńÕׁ~*| ›JÖö³¹Šś([!£‘öŽ’v²Ŗō>yRŒńōØõI抇ö¹°µ“ĒžōÕ{A¤™'šD ĪC‚§>ø"¾”ųc„_ƃĄųyćū fĀ'Õµ[k ZÖ0’ĄĶóL*Jūó_‹’“Ž”ŽųŸā«I5ˆµµŌ χ—RI=Ѳ>2µ-l|ż£ųVńā)°Ah É9˜`;{×¶KąĶFÓĆŗ‡<'yyq¤Ć*ÜĖo½Š‡źUGNµÅ^±œhw>ŒżļµŲ©¦ßź0xjĶ£/'Ś" $n¼‚>ø®'āvƒāŸų‚ūOÓuUŗ:ŒąI;¦ įˆĒØķļ\ōUź$β”Fx‰ķŪōJēŅ^šī‰įÆ éžŅf““ČH±¦>oVć’sZŅi‘d‘‚NOjż %¤ā\v.uėN¼ž)6ßĶÜē[JŽW$“Ć­Z·“[9ßęnąq‚+SĪŖĻG°“x¢Śr°äU+č,`IˆkĮ>“SÜć®ä1#–BČ}GZ«))0 ŽĒµ·:‹ĶtŅĻ”8ąw®ÓĆW×V÷É/ņüĶ“é@XÖ¼¾šįÜ"˜ĮlՋUIm䉿zŠ&Š7Z“;l#€ śŠä<[ Å՗ŹKø 4 —SĮ56ēP"Š)ė–8ūøŖYG¤‰ÄAМP'LŚŃõ—“†ęŻnZ%`ƀĖčE`k:e¬³Łėš|HˆČūLƒßō©¶¤InuØæp¾a±ēoæ½hxfŅņęāńnd…-Źe›<ä/ÖØG=⟠ß__ZÜGu/“ģŪć"OCųW›j -³Éż”m½ŗ6Õ|äžŗ,^M±Va×ŃĒqķ^Zoo9-“Ķ&9Ü Ą׌’* Ņīg[I6г\4’hvĆńƍGāƞ'ŅBź6PŁŻ&]$XĒĢż‹øāƒSÅ“­6;k»‹Xå…'c³ĪUĒ–3Į®ć׍üiįŸ·‡źõ¬šź8D°Å‚ù$’įS&¶7Q±å? oåŌ/-¬nc›P¹•$™9u'ė_XŽ^jŗ®Žŗ~‘§Ū[“.$“°U§üõ¬F|’Ŗxlj>&Ÿ\Õ¦µ“PϘ˜mˆōłqÅY—X•£šI̧'’Ž“OsžÕ—QkY&Õ¼£ ł³÷®Ž;} 4{Įo*y_4 ܹUóĖBæĮŻWNƒĪ³æ¶ø†9Ɇ^Ŗ¹ćJöu}:?ŚBc,¬ÅøļK™˜ė.ŖŚ”’ķ†Hw“ņ ī\÷ÆNš…“‰“ķJńī ]@L·Cd³ēŒ¦kqž=ń’ćl šÅžƒØß_źP³ł±”ŪœŽŻ?|‹kyuŗeī§`ćkF°JČŹ}p?­3HĒ©ėš|Gńāiś^™y+ŹČLÓÜ·Ü8ē'¹8õ¬ĻųŸĘZ¦‚Ś„ėy[·’¼Ō}ąķWSš“·7'‚f1p¶pŁĄ$b½™&Ņī ‡RšgW)aĀ‘Ü{Š&Š^(ń<·Kmě$>aĒAõÆ5ÖmōżOOū Ūæ›!ĪšGŹ+™»ø³Št»ßųĀŚ%ŖE©Ž9%¤ówdö5ēö„ś…żäū!†b H`ī}ŖyÄs—:sŽ@.t{Ųćø’vÜqļMŌÆģ“-ņ^Ų}®ģ É©Ļj°6›Äśn£¦-ŲÉö’|µŒŒŽäšēwh$Y!mŻxŅĶõü«Ķ®uDžYŸĖŠēOÉĄ#poJ®vsTGŠėQ„Ö©%ż¬[0į@?vØĒ©jrĢŅŽ Z =O&<½Ķoų‚[Kųē‡wš»qžķÖš\O =Ó89ōĶcŹīU‰ĪŠlōūeÜmó ²ē‘ųS,üo¤XĖ sŖ©#ļóf“„Xķō=kMæœÉe8š"HR§=Åwś¦””E„ lČo·żā2¬}½+NV€ņ½mõ)×T±‰t*±ąŒćŲ~ĘĖ„¶³c{w<Ģ÷ ä2gsޤƞ·ƒV6³]ݲĢ8%øVÜz×·ižžĘź1d‘Īø!É<’])=/ĒŚÆŖÉ¤6Ÿw4B)¦†2@aóÅtžÓõ°ū5ä2Y.GĢGŌ‘łŃŹD‹šjvr@ņŚ0L;ĘXŽXA8ŖQÅįCaykCZó<’Ź>§u!Ę]-×£Ō–ń.Vvū2Č$ OB:×£ioi3Ģ.ČXŲĘxČ4+Xój°Āómuw,Fģņj’ƒ—OՓːÖņż­\ˆĮ^Ųüi7b'¹ŚŹšéVÉŒO’I'ŒoμƒTÕ/ŸY’ Y¼Ų·üÜäc“œū;=nó[¶ŽōCåļUl€~•ŌŪźVĀh‰äu=fŻČäbG1¹Ä2¹1žµ×Ų7Ų¢S÷~ā²—`p±™ØO5ž&·(Ņ1݌ńŠģ<+āY/TCĖmŚNG­Lcqʕ÷:}KÅ÷Oh4ä‘D€įÕ?‡ę”Än/b¹HeĻĖ“‚­h£cŗRŪÄwčćR/ä$īƒõص™&±±šõ§i%*GĢđųU«qG‚ÜźÄf;™Ģ͹tWéōéž»½“¶y%žĪA#wQžµ±É$zŒŁy1^Éöi² T‘Xšķõ‰”‹öēÉJ ¹4Ō,绹9$£ø>æZ¬“&œ‡ĖĻž2Ļ"ƒN^†¾›r5(Y³å.ąO'žÕ·„ų#Oøž‰!UG|Čääć׌‹i§čz,ŹŃD’ÅČPÄo>õĶŖjś¦„s5Ā)¶Üžƒō©’Šiv;蚌^ :“ øŸå?»ķ^c'—{2L²g¬¬>‡gxŠŃȱ¼Œ P1Üb¼ņāå•”‘B üČGݤg7ŠĪ‚å,„PĶĄČĪjcpĻ#6Ėźp(2=Ūįżõ«ŲB©o¬ŲĆ3`³sŌzWoāŪ{g@ŗµæķą#9łҶ†Ę°SēķGį֟Õ¼–KˆņĻ>aśÖ„ńj±O5¤–Éolˆ2;cŠ»›8éq‹¦Ē'ļ<ņ5?„s~!²Ź*ŲŗŹĪ¼k9sxnņŚ8oeøo“ƒø==ėg@ÖĖQ€mtgłw/oƵfŠĻ”õ-3ĶŃ,ļćXb“hfÉ ÷"øCS·],Ćö(#¹‰IoÆj–‹ē<åo$ŒrFrO@}kN=FŅ4c–Q“t<±ō¦Cg/yØAr÷_ey-ŲĮžZÖk!¶@Æø0Ķ-ŚÜOhĢ”7ĒČĖ/ݬ«ķzõŒvńF‹“pą`õļK‘©ż8xJśēM–…–ķ£Ē'¦°˜žUšÕž«Øč—š]Ł­ĢRķfģ9ü³[­43±}uÉ5{‰?µeĻ$‹"9*ßē?­~ˆ|?Ō<3y‹©ŁH×+å(5‚yŒŖ7ĻJĘOCt›1>$Ž|/ń®®xÄŚMŗė–č÷6׸̐§hĻqņ‘_~0ŃVÖée”¹².~mĆ'Šńō¬Ō¬oŠņ¹ÖS3I)Ī6ŸLõ­­\ŗšĪ­mā+IvJ£©_¼¹ģzÖɚ8ö?Xü­ĀC išĖ3ń6±šóÅś?Š4ŪEēiŃ×*#īIģ1_lüqїā.gć2ŚŲŲ][yrœp¤),;ńRõ:Ó±ūĆ’ż§ķ> |(ńOģ½āBŁąŅõ«/éV·vį7y@:ļc¾ųóū„b½7įÅÆüųÆš·ćw€ļµ-?Ä>Ö¢ø+mĖMąXw ¹ ŠtBGśl~Īü5ūIüųwń›Ć·š]išęŸ“ į­ī€Čžł ŗšö}Z–1“bPJā« l3ē_‰^Ó¼MŚ¢":eź|ĀB#öb{s_š¾8štZxÕtżFO6īĪCgs RL‘„žü`×7)ƒ?™Æų(ēģż}ąĻ[ų¾ĆL­˜ø”÷X~Ÿ~Nj,·%Z`Øæ.ŃÕO½tĄĘqe]ŠQČ}j³CåEˆPyD“’z}+¢29ķfSt“a\…nę’EΐōĄ9ļZX°³+Ęv0`;ÓžŚńķ.“z~“Ä¢Sš]Ųo@xĶHł‘ĘļåM;Au/ZŵT»×Äd~5üxĮ~?b=cĮm’jOĒbž ×ćY&Q߲ݨłÕ¶÷lõŻ\-ėphžq[Q”W‚C ÌU’ľ½mB6ŽYšIU€l˜­9Œf‹vvrAäøŽ‡{aż+Ѽ3®Au{n/ƕ‰†õ' õiŲ„ŗ#¬ń»h>$½±žĆ±:\0gs«ååė×óż+ݾ xŠŲ!š„ÖŖL;„ؤć'üń]äÖć”l}{$¶ņ[ŁČ-€Å®¢ÖčEff†E8Ę;ž5“]Ģ&Ċi"¤Łø‚x#ō¤‡{Ģ®ØP°ČĒa[S9ęĪ{ÄV"\[ŪóÖ.‘¤OmqŪ"(än­”™6;«ķ:FÓ Øć;²H®-u'· ‰÷y'Ž”„k›9&Ō.$ Ž8Zd(Č"ŒĆø=EI¢‰v-j]"īŽh3Fr ó¬™õĖ‹›Ł.Gun ž)'­Šå4.ēÓŅ-ĮIŁ6Čž,ö¬ˆ(bv»ōĶ\Lš4“mFQ盀Īøóąq^ƒ£Į£ėā[·‚ĪŽLą¬c±[ƒykoc{<Öę8åĻ$½Ž•q}=ōŹ˜ącfsŠUqŖZŁQkžW< †Ó\Õ“éŚH/¦sǦh)I±MNžd¹·†ĪXL÷Æ[ÓĒ•ÓÄ®bPć°'ց3UԵ˫ˆ®Ż$‰”džÕ Z6ĖŲ³$ĮČ̃A<§9ŖųŠōłe8di601šö_č7Vž·Ön5dū톐±ļA6Ųņ?x‚ÓU†sn‚U$§‚+'Į~¦¾t‘Ø»ūž¢šC³>ƒŽīŹĖLŠ Äf2|„Ī=ėŸk,]¦·;”bHĻj¾‡yl`ŗ{Øf¢ąœ`×;n n’¼s ?w=+9²Ķ?RH®fugx”aŌļ<+Æ¢K};†Ąycžźk!›ŗÆˆōłįk† a#ēŹ|Ēé^©D%y%²&ār}Ķ)2ü7q"DAte9lWS­„ķ»Ü"žųŁ#­‘w5ü'¢Lś„Ž ēlqɹHć5ź>,¹·ÖnJŻ4^dj"BŖĒn” łóÄžÖ“ŪBŗZÉ|Ū™Ųģ=śW1į»5ÜKł`:ꁓ^ŻĻż³r–‹ę`ń‘jõ*īī-69ŁPČ#;K.GåWZ#ÖÖ'Č±LXpNIÉō¬éōūm8onl|÷³ė@ĪöĻP±µ…į¶XŚV€zŒÖMõͶōV ±63žĘƒY;Ō!³š¼ŗ|bÜĮ$¢FIńśÖ -īt-Ō=²†VR¼`Žj¢ģdyŽŖÓźG3[¼›@Įx"“:|0`Õ³[ksOI½Šf‰bÄ«’§= įļu .n§ŗø€[J Ėc” ÕŸįŲRśÖ²ÉĖį4ē–+6žŁeź¹ō¬å&š4Yt”rŅBā#‡‡8$W®xŖĘĘįlō5ū5·(ź0M.FRv _¹m:KYŪĶrĒę<å}*ļ‡u_ģ»é£ŠĶ«ėצÅ)›ŗ½Źė³ā)@§1Į?…UTŚu“{. ķæh¾h'v{7…t;H“Öóm”]9=01ĶgÜx<^kōŁy@Ūå(ĪOŅ‘¢…ŒØģÆ,5± ä‚d %V«ńėśVĶåõ¼ŃŖ¤‰"ÆēAG5«^LŚ>¤‰<–· ›’UŪQ^M£x‚]v‘žć€č>÷8ĶuWvŒ×ŗlöÖå# óóÉ8ėŅ©kA„R¶źĢA wzŠŠ\čŠ ū›Œ«/MŲéķ^æą;DÕt弌¤q¾0Ķ4ģkLļćÓ^ČĖū–”ƒ•ā¢ń†Æmü3Øk6®4»µCåHĆœōĒ­h§ÜŚ2±ņ¤ꚦ”fڌ×sj*HC‘–NīšV„\ZĶy©ČĮ„dlĒŽlp |č–īxŻķ²­äŠŠŅ*±#ł®ā×WŠĒČß!YŖŽµhGU¦jz“NÄ\³±ĻO»\Åē‡Ī­6”%ŻÄ­ )·ÉõĒ­ b…Ÿ‚ol ĄŅ–bÉwŚO>õŌé¾ó‚M~ŽJAć¾(qH,ŒĶ>ń4}F[9įan!­ŸŚ}–ŅŪT€4–M(Üš#5‹Ōān$†įęU.6n=q\ޟ§Ģ\¬Ē.2}(5:)ĻŁ­ÄŽIEEŻ“‰`3„aƒ‘ĒO­&‚4Ļ1·š¶©s{eQ‚ĄōµŻĻą‹…“Di šżŃĮĆT{3HĀĒ+ö/±\­¤ł嫲X]6µ§HLg^\ĖRåe8ž{ÓōųvĒ•ū Zēu‹½J[XŽ;ˆ`W;6ņO„TR" šÖ„&Ÿ:ź’Ć’Œ¶Ģ|§ėPŽxĘ}RI¢‰Ō²ü²Øž{SęFŠ1-/-må‘\[œbÆĻ«\Og%•¼Ó˜`m=ØęÖĘÉXĀšApg’ņįķž'ņĘóĆßüū× ÜÜi6v.fŽ=›v)+‚ĒŲÕĮŪŁi:|’“вHĢłėÉļZ6’,jUī'8Ķ&ĶČUš;Ā’ĀĒ”ƒżhL‘W- V 'ŚöC¶ÕzÆ~ęØésŻ>”Ü1ŲG$iXļõodd2&ø<ōÆńÕõž¬“ŚĪŃY T÷õ§$§}į¹ģL§Œ8īźj·ˆ®|.šĮ0I[€];žOéYņ³hD“ĆŃé>%…”RŪ\9枕ĢOl4ėūĖ$LĆ#,»yĻō©EI\Ö±–U·ø·³/ L6ī^3ģkKĆK½ŅüƲ‚ŹW?x āƒä—Ö{Ń)ĻĪĻj­Ø\?ńĶ!o\w ,y½Ō°ApÉ;;ØĒ×u¢‹e¶/(>k ŪXPi÷s„ĄHŗO-77?ķ ’’ĀZT––3Å$’üŲ¹^qĻåA¤ ®3Lš$YŗŽ;©O™ŲńÉCVīü0šJ}ŠIŚęE §xčqĶR‰·*9Ė»&³ĖG‰z‚?Š«ųgNK}CķS[Å,„ōq‘łPՋ‹³=.uÓģŽį¾Éä6.O„s6—_Łś‰]¤Ż0ą0č I±«āhÄńŚOymmįĄ7pZ®°‘@¶āqåČq°JÅ¢\ŽLŹņ;bqŪŅŗĶņįtė»(ŻZ~’Č3ĮģzŅF' ā ½6į&heņ„•ŲÕwMńüČŗt ą2HČĘkrŅhöŲu];Ćzu”Āxe@JgÄsĒl^U£čVėā‹»Kåš'ČŅ8Rk)FÅĘ6: CįłÓć½ŗ°¼–źŃ‰Śųk€‡G’9K+Ą÷©,‘m;¦IfČÅu¶¶ÆfQ#ēå$v­bśŠõ5ėł&W…2&3¼~5éZ®”įŠ7ƒIķ6—-)?+.:U/C‚Ō5 æ1ŚR" Ā++[Ög8BĪĖ€zõ44g(v9uŒÜ˜ŚAæ,:Ž•»Ø^®ž!XÄSŠŠą¬]Ņ„’öw½C!@ø t&½Āž"f–m.-6aåŒÅ0 wŌŠhdxĀd¼»`°}˜(†>ńõÅÉ'¶)¦¢0ć  G]įūØT·žVņ³Œ“ŪҶuˆŽŻx£/k»nHā”ĖAŲån$·KuóOŽ vØ#×Ió>Äę&a€½fS‹2ļõ[ų¬äŌ®[ĪŹœ°8Ś+…·×ē. ‘ĢĢć\šå¹ėٵĬvہ›|µē«9nĪcÜzŌJV²e·0FI’h‚õäכ|\Ņgń§„/¼9¤ė2i/2a„‰s?‡ńĘ¼ÜN%Dż»ĀqœA‹S©2ŽVŃł+ļ®’šĒ-ąļ ·‡<>ŗƒĮ™„G(Ł“'®r=Fkø¶ÓtĻi–śeŒAl¹p€O\ļ^#äĻō/ü6Ądtœ0Š÷žļÆŽWd-2›ĖŻĮĻ„TŌt»ų|;ā/G§KØXiŲūBB»™TōlW3?A‚š'Šæ¶“Äńs-†ņ­¹q°G>+Ö/ēkˆ#ū+²Īą3MJĘѤօ1 ėKC„Ąžµē^;&мMąū‹Iå·ÓŽé>ŌOÜ ø}ļĆ4„&iRč}āĻĮšžėQš÷Äχ±ßh ²ß jkƒoq¹3°žĢ3ŸZłGĮwzwˆ'ŌtłķLA#Ē 8?…8ĖS:”;œ—‹5„L].K;X¦YXyŁłŠg„|å©Ū,ŗ˜IfEŒą4Ē«üė×Ć-åÆsėŅĀ.Š’~Ÿ”ÉŲŔŮŁ&£sqØhĪī Øø,LV·ƒ“ĻųM5ĶOEѬžö(‡«“ĮÅzp}ēéaļ±Ä m|7xrėM—M2DBĖŽŽ8?zoƏŅ|'ØxsRš%•ē‰į“c§jQ ĖmœuÉ­.qbš2älõƂ:ž‡į³«ėĶā=S7WS9ē ü>Ątü+Č?ioA{ā= ‡õZÉąeūṺvĪ²Ŗō±šł 9WĻ”WM>ćčߌy-µ½sįv›ż-ļŠĘn!FąåG?#_BŲųsÄž±Ņ,ŻĆÓ>ę¾ĖųŪšŗĖĮ?nVĮś’:Ź‘õX„›~#‹AmĻÄś¤öZŸŪa“d\ÉnĄ|¬Go¼>øÆ š’ÅYü/éZ†”.§¦Fę[{tO•qϵtØ(£ó<ĪMĶŲņüQńU—‰įńE¦”{g«9²HB8ĪG*ćųĖRńćj¾#Ņtłõ™{ÜcqŠw¬*ĖK²¹×YéŗŽ¼DĻžĒåUč®+é/ƒ’ÓF°Ōt[ټ¹ē›Ļ{ŁĻś¬H§å^=y6ō””Śü@øųoc}}¤J`M2Ēl²¢÷ó“ĘyÉ#ņ¬…š ŪxaoüSh]ŗ;įmkxÉąØÅz™5 JŗrŁ—x·ŽXl¦T¾ÕF¢æ7ų+|ĻCƒĀvŚBÜjŃ:ĘīzćaްwĖrnåÕĪćĪ>õ}Éü—8"¢ŻY£˜˜å•cLhō&T…¹Ļ„;3CÓ'›Gµ˜<·+bĢ0$q\ÅĶΟ}ĖŠÅX÷č(TģrʟS‚¼‘eIXVĄĒZ½”ŲĒ{Ńł‚^IāĒjD{2ķ¶ Ŗ^ »3Wķą[rąØP;A6# ¬ä†3Ó=+R;a³‰#īęĪÆyi‘®ÕI”ē9ėųVa½žŠx£Pæ)?I'„aŠWŌŸr’T ļ_9ų²9ķļ®$tŁeĻči°(iMާjš„P2ŪģĪ ·g­„¶„”>œ$šRž]ĮčzĒśR!ĆRʒ³Ü_Ē ”Ę£Ż›Ś»Gw‡nQ¬¤MBį“zŖńĻ”ĶäītšfÆ©_^%賊Āć`ĢJ2ćź SĮšIksz±Ćf‹+Ž]½Ø4GĻ_ŚÖ:dņiw[“3u ž3ÄW—n”÷ˆn¾ź(9” œµØŪßčš]ŻÓ=žø F9ń5ŽŸ¬xŠŽh4Ų¾Łs{ĪN6.qŗƒŽĆIšÅż§ŁÕ‰ÄŸ-­ķ] Ū[Kēi÷jūT‘ņrk) 3ÖŁlī`#_”Vōn¦ '(ņBH‘Āš”ģ+|-᛼Fš¬QÅöŅ»^LöōÆJÖu?“bŅåaoløß1ĒłęÆŚŹ’iZ\].š„o$ģl}źę|Y¦ėŚݧ|?sökų’vČ~ćmõł¦§ŠÖē..µżfźć_kŪynĄ3y@…Ōcė\ꌮ<ńO‰…å֖t½Łó9ņ¾śōż}jÄākń…Ļƒ“]6h센ø»•FĢõmļŽ½ |«māMKž-I<Ł`±  `7’h2q/ČŚµÄÉy'ī·Æl ÕųNM>+ĖyŲUn=z’:ä÷~7Ń|+}˜ŃeæŌnĮN·b@ś×aā}*žóBÓlµY¤ņ§" üĖ#’>ՓŃ¢>~æš6©ąMoJÕō»ØĘy\|©ĪzžµŚ¾¹ā ĖimtŪ™ÖāeŲYFI’›8£”Ą^(Ńć]WWø¹ū$ƱYĻŽnµ±į­Ošęņķ-”»¼ˆ†pĒŠöŒ$oų†K-eR ķ­ŃS¢*įIśWui,čŗmÅ¾Ÿs+lWu,ØOµ ‘ƗŃt8Æ­u+QŌÄ@ķŽ>:ž;Sl-'•ķĖŠ÷…9Į¢äJ+sŃ,“ØlckÉē•ŸsgåÕROé¾’ŚćĶŗŻ6cvŽĮWÜž?­4ģgb+ÆŻ|@¼¶}vŅ ģm1©–5ܦxķXŽ,ųGį=^ĖU׹±·Óo„!Lˆ~WĒlǹ¬S>všļ‚%–īāH$g…[+†Čõæ«éĢ7 4RnŹgPŸK‹T‰ä uŻ±Żłfī*mNh’K5–"Ź€«€õ’ŹO œ¬q7w6fy-%É,§OJįå°Õ'–X"VŽ—®*®tבźŲŚŪ]Čņ#Ž3ųS“ß¶‡ew„Ž“u4jG’ąü‡žÕ›€½™¹ąBĄģ’åł3"ʧćüŠģo“K+õ¼ŌHšä)fčœtžuj62–‡5q§Ų›g[x9Õ0 žOøpĀ;įß \K­ß,ZĘŗŗüĢ}A錩.†žS¢ÜMØ×pHX’vœ}ß„ugĀŗ†Æę¹G`źß7§Ö«„…æ|>ŌtFŪP×o‘l\HÉDüņrJś5­“Ƥ>ó6õQņiIĘV&²“…µĢ.cAņąpA­?2-ĢZö§n©+"f~ ņ#=*²g_ŖųÆCÖ“ėEŽā•m„¹°ĖÜóžz×Ē^ńķĶßÄ=_LŌ.6Cķé‰Ų_JĖ]‡c[āljtKū+M EŌ–ėQ–¹T'j€z~UꖑÉmj¬īŖj)< øče3ĪīOŲgy÷Ż&X'½X¶ŌfŪp§bģFßJ³3kNƒN{W „ ]½I®ÓĮCaŗyÉHü²Š}=æ`uśüme”Ŗ„ؑI$šy¾kÖe»ÕŖE 'åĄ·^@t~ ¹ŗ±ŌV%I>a’@ąZõūOŁ”ž6$Ģ89Į¤ö+‘øńTBö i 1S“•ö©|°tŁä·ˆ$¹Ī½XĀÅ_ éęKÉ®õrIįHōÆlÓŽUŲ¬ųóĮŒäģu^"Ō¼ •„ŧhékØFŖ³NҬnü}My—ÄOKe iŚ~Ÿkg%¬ “®¤o\õ9źxķALńŃ«Z5‹<6öMÄé\tž3ŅR),tčn[Ss¾fqķƒŽ€Qg_”Ć&æj°ŽL§Œü½ž•Ńźzs —Ś (›PgīŠ ™ēŽ(ŠLaIšķ\6sŠU źmÕwŹWwlVsDJ] ]WP76±Ü;I°œ††®*ļSŽ8JŚeõĒOƳ38“¶Fœ¼ņļbųŽ•ŚŲAŁ,]ēÜPm{ ūtv®ęt“oLzķ“ĶFāžÖ¬©ŚT‚²’Ōww¤³ģ±»9éģ+#O›ģ“Éó˜†:c§½:cFŒS=½é¾bę'^@<ŠžW¾”G Ć6FzV‡B“7¼šT¹ńž ÷Ė™ę–pĄą8Ēė^—āYĮž© .]ˆ1¼oź) gĢ,šä:=Ž› ³=Ć“…|œŻ×U¦o³Įc$‚—å]Ē­c.‡;Cļn&ŅŻąu\/ŹNF=«—msĢžK{v>ÜdPŲ”KŸŁwrŁ<‰4†b3ķķ\…Ę‘«Ųʗ7±Ęł';N@FŠ›5tm:īī1-¹ņ?§=«Ó4›ĶFĒOu»³—ķ<įX`@{6[µæ¶¹™<ÕrŒ§”ļ[‘Żźš\2=•“R1ū†_ŗO҃hS¶ē¦Žx‰#ų{qm¬­­¬“Į¾4ĻͼńÓӃ_4Ū^Létө脿ÜzRq””­¢źÉ|‰* zU ~ņ8$ž(Ć#ē=k9BĒŃĮāęgf <”Ą÷®ĖK…ŚŲE#0\sß5g_¦źŠZff\žz¾ā'6i”lĢXœr UĘV:#ę]:͜3 ”Xåd®7Z×¾ße}+B"v9ŁÅ_1¤ŽCGūF”fĪŃy* R3Ó³¦i{§tņņˆČ} ĒxŠ[uHķY—œ8ļķ^ss`ęxČcnC; €Hė“+mDÜI#ߏ–XŁÉ*G Ējž+€5͊ĘĻ—#qȫ帒óķց";ü­ČļQlr~ĪmĪ<ĻėRŠ4\ƒKŠŲ4>t7yū̇!mŪK2Ŗƒ@žŸJDŽģ.óYšU䐌.Ž~¹¬ĶOĮ‡EÕg³¾–8īA,#Īr8Ļ#Žō~Śųgā…Ü0Mm£]ÄnęLØĄ3Ēœ÷«šGĄW·ń'ˆÆõ‹¾iKW—icאNz×±Ī.ŒÓ‰4o Ƅu„ŽÉ„Ļ#,9Ųåx'¶xäZ4zÖ¢Ól¶Ÿ”óŌŠn ’Ōõ kį žąé|AooøfRŹ7`mČ<{ĶųMvśUö“¦k·:Œ–*¾PŚÕgŲü-5Šõkæź߉ģī“ķŌ£,‹ž$ńŸÖ¼·ö‚żœō ŚĻā{)ĶfŁ‹glmłs€>½ėł.ĒēōSZÉyŠ”e$ ĪsĻZȂib(ĶēaŹ@­bt#ķļŁƒÅw’¾±į«„™w|Š™[#`ƒ·JūvĢļHü·rǃĒAź)J!sb+‡óHļäŽ:s_0|oŅlu R’YŌ”Ģ[6Ū’¹rG'šĆZQQßSåęšĀ]4ķ»œÜhĢeJ°^œĪ¾Ģż›5|YšļÅ~Ō¦¹·‚É3ݹZ1ÓpõķS½QÕ£ ąŸÅ~É’“Ÿ„>'h·2éö֗ط?v·–£Ąö&æ»oųĒAųµą_|\š­ķ½Ö…­ŚGp”6Ē( äqĻ?Žk¦Žźf‡µ|(ńCŪj‡A‘·vŚ®ĒīצųÖ Æc2]ĮqØĆœćü+9-L¤Ļēž ż‘,^ĖĀ_µ?48SMÕŠéśł0Ģłr9ōą©ś ž?µ½k .mBĒęFCnS‘ĻLžōé++²¦r@|‚ć2‘Ę*(” ˆ@EīHĻē]QŲätō"yJĶļĆĘĮĄ½P¹ €Ø” XEčH⬤‹n`3޽h6Œ¬^F\3g “Éf9ͽń†AČU™ {{Šm Ņēü‘ūe?‚~ x‹ö6ń…ž«uį­IūBžõņ–³ –DÉąŸ½é_ŁĆ,7ØÆ€Ó”)*’u…cZ=Æsń&”n-§„Ēę0£õņ'Ę_ C}¦Ūų®->åH…–£ ¦ v¹üēė\2z˜³ņö–ų;§|Hšf»£ßč¦÷P·ŽO,¶#ž;ķ?Īæ‘߉^“Į¼Qį{꓎x. XęlņN?.*įSS9½:–Öb\°UłŽ:TÅĮ ʹ*ŗ¢®rŹD2ł˜!Ģ{Tb4R©>R/|ÖåĘCa‹ÉxX3y*ĄČ£«/µE5į’vG‹Ė ILtÅZ!XķöåA_½·±„¶”Ė1BDcłPmt4d2[›ƒÆéš·ÜHśe͘ņõ;kso.ģå^AüĄ©’: śŪ?üĆöƟö–ų£i:®±ŌGkp$”iyO`ąc¾+÷·ĮZŌž)ŃōżMo øx‰²ÕązŅä0ƶ@Ļæ5ÉV&ń=Ym“N²Ž}ĘGNŽ¢¼ö’ųį/ڳąOŽ> x’ŅÅõ³ÜiRŗäŪŻ Ü„OnFxķ»Ö¼éGS[ŸęēūF|&ńĄ;ųs«ŲĶaiiØĖl‰†Ž@Ų#éĘkÅmą_nœ)‹Äӌt¹…Evwka`° ›v–XmeQĀ®éB`/#hį”JQ£eł‚ö9÷5«ft÷;]GŠą„ķÕĀ@™ēqĘEq:æ‰āšē‹ä¹Ó$q§Äū‰”ńŸ 5¤gØęō?B¼⨕ND؜”’Ž$„&ę1ėE,røYÕ¶ķĒՓaŹĢ«!4Sä.™ĆĀ»­T“4A¼Ķæx1H9G^Ž%ÄŽOXAśQ„ŁiņŻIm±‹m¤N;PW#8=su”­_/QÅnxw[¹ä;ÕGĢ(Ē¦éž Š8#µTĖć!½3Śŗ‹lKo! ¼‘œ‘ŠūPh¤PžīxamTÜbFr:µāWś¬:Mō„!}¬žXŪ܏ė@ł–ĒF–ŗM¤¶W…–C62¹ļ]Ģ÷os„ø“±Ć `Č£€oē@\ä-m¤’åg·ˆÄ½ t«šäpæ“"!fE*K o\Ī^Õ,%76“/–Ų8Āõ5ɽš[ܘ˜|¤š=hk”<åõŽ5fUw_bsłSVņEd·geˆt9®y-ˆH‹Sž]CĖ“Ī6õaŌżkkHŠ&Ó`“Z–7!—@; Q…R]PÓ¬öĀū»så…ČĮ5Ņiś5Ŗé“Cä²I’ĄģHŖ9{©ī ŲhĢM ®žY,<Öź·j¶9Įć=+9>†ōŁ“!Q<³ČÉ8Å^Ņ ß°}¬uŠ“ī[“ZŠ“zĒż÷?>zÖõåųŚi× iF7J$8ÉĪ©ŃoFž_,ļĒZvƒŖGpŃŪŻ¬‘Cœ9ČłG­bŃQw<»ĘVwWŗÄĶ„ŖL­'īŲ6H÷®ĒCGæ‚?Y€ł’–SÓÆ§ŹŹ:ūūM¦]F;Xį„BJ½Ē\žå××%¤ÜP˜ę¤m•ķo…ōÉ Ėå ōjé'š·ņdt‘‰ĄPh1“¶‹÷,‰\ÅV’#å¤ŪvÆJŽ(†µ¹Fm ņ+nFėĄļX·¶‘ŻO;“qȦYÓiņŲiāŌ–0œ"±uK¬Ć'–]› “SĀĢ%h®A”JBģÅXńŸ…4ų/ē½·H“żź»-ńĢ-śT¹›„@ņŪǵB)8'ęAŚĪuKvó]OĢGjͲ¹ÕčŠĒ)·óóIĮ5ÓŽ%¶—,äÜIąŠŅ.1±³eć{ŪMZŹ9ķ Śc&ז02¦“lµKĶ\»×“k©[x Š;yĒ®éAdÆ=׈ šžųˆõ X³‚~ń&ø»»v³U`iAäČ  ķ.kK˜Yu(„±œ‡\ćpōĶy®Šŗ…­ŻY[Į1K!_eĻ„zČū Žš‘D—Œ¤ČŁļŸŗ+˜ńséÖ¶·jĖ›§&€÷<ŒUó¼“0ÄĆ=cLDw·z†Ø‹)TŪČŹ Ž=Q]m„č¹{H…®ÕĒĢżõ Ž_6œd6®|Š=xj¹uy؝W·³šy>NsĒJi #ĪoÆ.tk{-gZ²™ĘĪrwҧ™øźnŪĮeog;›‚ĪX¶Ku9®gX{„‰!Ūö©ē)#Oƞ–ūĪ•”7¢īP¼ŌśĀ,›G…”ø˜`jŃ00×PĆĻ‘‘ Ļŗķ6;=FāRĄ`+)ć4ŃpZ›_o[9>ÅiśH!‹ŠU)å•ēIļ0#ĻV뚷sSϼUāxVf‚ŚĶ”ĘüšĀ¬ųBłµ9ö"88SĒØ`zV³įė„ŻEqä&ą€*ē5³Žt‘U^ķx¦‘\ÅŁō=cőCW+Ķp«ś×ˆÜųĖZ“’j"}ø1\!,¬Ł„!ؑ­Ė\ū£ęõ&ŗæ ŪŻ[kŪ•ŅŲ’¬R>šõ¬¬\cckā׌tKĘ_ é<‰\4Šˆ^}3^ū8Ü®G9ÉķZĒbŚ;½(EØ=¤Æ7™“ƒ÷±“^Š×ĢņĒŠ ݰ9Ą¦Äfx“\Ԛm;M·?ė?ڵ –š|VWüäMƎ­ķX08éRޒʚŌ0nłk°·—}ŗBÉ…¼Ņ4ŠŌŹ™„缨"<.O_„A#Ć*ĀŅŹŸ+¹<15jlr‰ŸyylŽönoPä®yqXŅGµMŻÓ*”l>•jFm.. †D–1…ö=ėšÕ5Iī¦ŹØbH&Ø,z·‚†«¦i×"źŽņ€bć ÷®óķ­*¤ńC ”~fA‚O­O6¶×%d‰K$›$皔$\ŚĆcgeN÷Ž ,hę[ČĢęŪa~¶@ģøŪø äzéoÆõ[Ķl<ÅxUÄ ŒńŠÉ³OeÜ”„ZOØG,1Ÿ.ē\ō&¼ė]Ņ5;+Ę7WŠ”ž2:ÖRØuŅĆ9h{®¦i‡Ćż+Ä s¦^i—ļ%©Ęų8Ć)é_6ü@š4’u_kšž§gąH,ć¹K­1†ė‰'ĖŻü$|£Zꩉ±śŸxU™ęµ]*4ŸŗÆv¬½/ݘ¾ŅÓĄ—Ž.mQń£§ź1¬qÅrÓr9RORÆG>„5Ņ Ō«žyÆ:¶;±ż‰ĀßF¬Ÿ u1ÉԚZ«ū·ūÆéÆBõʛ4Ł;#ŽMX}*Kk_1BłIŌwÆ&µv÷?¤²¼¶–”hQŠŒc¢HǟSµ‰DQ«‡'„$½ć=†Ę#®9K©źF‘ÕC¦[Ŗå“Ģv5”ū,üBŠ“’Ś6ćį_gƒž_ŁIlÉrŸŗŽPķžG4ĒZ\ģæhO‚ײƈõ»_MušėÄöÓ¤6”CG‡•’č:ćéė_;ü=Õ`×,ąy·Įm”\Œ’GŅ«‘ģĶ ć$§NžHaóƒBÄ=Oz¹ØiVzķ‡Ł/āć$QJ®AŹ-3Ó>+|ųAćļŲēąĻĄ?ü?ńŅ~ŠמA«Ėo‹;›t‘žuŸ<£Féņą@ ųōŻéŚ$Ķ%™…„įCŒfµTÓz=‡jj¢­+ūĶÆ$ö_#›»Ńm¼Mpmõ µ³;K Ž[יų·į­ķżĪ˜ö‚ßFóW4ŠzćõÆ[NŃ?|Pر9¼ē‰/øæńĮŗn‹ØEį½1!B[dXfņĘ\½ŸSÉę»’ i^»½†‡š%—†Ö(滞;ęp9f>üńļ]r‘óÜ1‘żs2źz³š×Āž(„ŚkśU¦Ŗź %Č'|yźV°.fHü¦čœ1‰ō{‚~Ļ#rqžAkh~ƒā arģ«ė)YĘĖŌźu›įm*kįo$։łIČöÆ$𭵯~:|:‡^°”črĪn¤óQ!•S׌ćņ¬äś3łG€p“Ž'ė’ó’3Ņ|1„k>1ųłØė>2–ēū:Ņāiā `MĪÅŲ⾉Õåu×4©ī&›ģņ‡eBü“žøŖocū†dž MZ[ūIx^[’xSǚ-¶5­Q[Ä•.™Ļ­X’†¦ŸZżŸ>!ųOXKéÆõDöžxŹ&s½²}x檘³,Gŗ|kįżUńĘ£…“TXŃ"1Évąķq޾¼gš¬Œ_įŽ”źZ*jś‹=ף®ÆälĆÓµYšŹ—vGĻZށā+¹!½·ŗŽņę5ņćFlæĻµu:m‡Œ“M)ßHø›ĻS’ˆNģzWYŠ„ĢĻjų¬O¤iņĖØAwYS‡ŠgšōųH¼gØĮq£Y_}†Źqå»óOcŚøłµ=Šx5ŌÆįż2[ķq,§˜M”ŁŖ¬ŁbD²‚1ĻCŒgńƦ!ŌŅŚkd[y&G†^v8ü8ƬÉiµ/3ł;ǜŻTĢჃ÷iG_)KW’’ņ›z»›ĖQJńwÕĘŹ’,IyLå€ė^Ś?žÅyōĆ ŒZ°–Ż’I F ß:ą’=zӌ.‘…7ĢFT[S9fdŁéŗÖ©rDLŃ.wz-]浓K¶rŖĖŪ"­œó}N A–RXńĻzī4ŪåKQ”™ĪN?•c-̜¬vZVۘg1 ū¹ :޲åš¼Ć1;ŗćÖ¤ĶČęo§›Źv“+øäcRĒ{4PBÓ)fć8ēl_iś…”wG”÷‘X#Ɨp”{i¢„dd·ēėŽÓ4„ŲšČ“KåĖ·t‡ęn} 6o.tæ]¼Ė ¾¶C€’…tž„ų³T…ę1AnƒwLCłS Eč:V —mŒ2K·ƒžGEp^/šņ (^ęÉ ·šŃ’³õ?†)óW<#¦]Ś&³m%¤Ó+ŻóDsé^w'‰-lõ+h/ŒŻX.Ā>÷µ9+øü=Æų¢åoŻ›J”‚Ń£ą Éč?ĻJģ4ÄŃ4=rčh7ž~Uc-»$/”üĶJ=Ažm8ab¹TøĘą}ļ„q°I¾źg$¢–'45ŠĢÉÕnMŌ‘Įšiä֎œ·)0²/(¶` ō’õÖ ķ:DdV*ÖŃüČ»‹zšęµXķn‰»BČßĘIūŌ$ˆ-u)īäǐmś3o?ģžĪŖź‹©Į„jQ^jS]ÄKIn$ Šcō­;óģö×Öw—śÄ¶”@>TR’‘_KhŚŌ³éż8ŪŪ±#¶÷«°W‹4ķE“ūŪ©-¤ŽWꯏA\¶¹¦žžóPÓ-Qcv.võœPDÆrĒ„VMB’¶¦·ÉSĮ]ÄŁ®⇀üS„kq„`ŗYX|°²zh)#‹šFŒšž¦u„‹QHdÉ ėéķ^ØŻjŚĶÕܚŜ–ŽSFŪ€Ź:cņ„-#+nU×ü?ż·ąŁÖvY¢œyEFYOps^ A¤Śéž%Ónaw·ø1l` ^¹°™ź.’/ék­źW6‘ž‹n§Ų{žõņm­Ż“zćXTŽR͵šśRr éŻ­ļ³ŖŪØ²p›¦ŽGģ==뜽šxå¶Ōąeū#6åf†śSĶĻāėØŪ $wg8“wA]Ÿ€ā ‹~dČą©8{t®§R×&Ó,īl ¦a‚ #ÖŖ)’ÜäōGÄZ‚ŁZF%ŌĆŖPv’{Sž xkÄ:ŒĀöękiSM‹Ėū<¤ĒMæJÕDŽTUštNlākŪ4†]ł uŻ^ÕrĘŪ†hŻćĶłāP7GĒž“ģ8ĘēːxÓľń|»¾Ły “tPćr0Ļzb¾†ĘŻöŸoE21P¼Ļ4š]My«įŻbµ‰…ö”"€øXƒe Ķ`üxѵæXh—{soŸ“,lCGž›‰śÖMjn¢o…¾°š¾”ŗ ŌÆ«L~Šģ·Q’ÓśW›žŃZjx6}Ä*Ņbo->ńn›Ī88Å+5įw¼ńÄŚ…ŠÜÜŪFā9ęEČ čMzÅģVĀĪ<(.½xē„#žr8køćWiŒ~nåĘ=+ ō‰”{yž7, 3š MKķ5b½i“\\FČ vL`÷”k©\iĘ]·&FįŪ”Ģi›ć[3įØĆ:4®pĄą½«Ļ,Mŗy’ÖŻ&i Ėį>•¢“4Œ,v:Eˆ[ؤaÓf0Gł5&‰ąg“]øŌ$I"¶Ü^8ÉŹ±÷5±g„·ĆTń"0`tĖ)Uōµäz¤ZŒRŁn’Ż€1ü§=ńš—lā/WÄK-„½”÷6ö©ƒ$Œ8jķŽ·­+ŲĒŽbČc€ED•Œ%®āk—xńŪ‹·Ūø1ĻcWī4Ō»„Įu"Č‹ŌƒĆ*Dxˆn~Ė$Ö±OäBjmī=*_[X†žvEČēq“'ø Ū•t=sFŌ,4{”‘®-–Ü1\öÆN¶°ÄęźʱĢQņØ ĪQ±ĻxĪŅĒH Ž_DUŠØp PÄp xF«*$ŹD!³·aąŒÓ±Œ¢īgÜŁųž['ž8ĆčŠx'84Ūe–āĀkxķān„¾ŽqģhtŹäŠ© hęžśā;†xœ)(6õÅv1Ēż›Žk`īĢ8éXĪ$É;™_a–śåŻćżĻzéō]2]-Ūģńŗ[Ä’z“ڹ„¹JŒ¦ŻŻ"–G’SÕsĪE2žŽ X>ÖźdķÓ§¹¢‹9÷ÕKĒ%’MÖĖódcżkžŃõ«xµ„{ć,QE(^Əjߕƒ>»š÷Ęß®—§i7 :īžōSFż¾pь#n=±Ņµ4ū[ø•“hIF@ō4¹P£ uĻJ¾¼¾3LŚpp0Ö»;Żjk;‹{ U€ ÜĄ’(QF„ »åņ$kiŽę%z`^m%ö£hŚK‹„ œ֘.•⛫kkxÅ»E±ĮčIéČ5č·ŗƒ†øŠ8Ņ,…fŽ•œŃƒlęuc-ܒ n¤`ćń¦Ųióß"W)Œc95Œ„cX.‡Ŗ7…DžNÓ®Ņõć!™ĪBæc¦+Ėõ’„zʅl·W–†õ,큓śc֔gÜߑ-®=¬Œ‘²žģG„&ēwxŽ$śU™Ź6=ĀŽŪK*$vy…›Žø÷®kP¶’-Cd2cęĪć^ĢōĻ _ŻXŪīŽbņņ£8ü«¾Õu-"ĻF»øÖ9Æ~Ļę@ØėŻŗńķE®fęĻŅ/ƒŠč«ā;hļn`“‰äóR2xĒķ_õNŪXŠī ĒiČE;ŽēŲ’ §ŃÆńw{µĶxļĮ–ž+Ņž§X^(ˆR2 ’>MsĻRÕśŸ|NųQ„,“-sĆŗŒŚ¤Wņ2=±#6[z±=NMy„üa¬ü/ń ń-ž”wnŒW±!ĀMī¬;ćśVQ±ŻN]®~7XYx—LŃ<}¦ŲĮ?‡īāP@Øč{żī’‚ žŠIć…>,ż—õe,šKąńČ ōƧ¼'©Śų¢ [iŁĒŽÉɬŪ&q޼'ūAüų‡šŶq\iś„”¢Ń6óģ8uō ąžÖæĶĻö¦ų/āO‚¼mšĖĘ+§iŽ$Ńļdˆ*C°I’ØĶźHĶ(i;w0“č|wqnĻ™ŠO8ė%ŠąĒ,o ©Č 9pkŖ”Ė2'g±ĒėJoUąõ&“»3 ¼fDŲ>Lņ1Ž©Ēl²[Ż”u\l`p3źišF74ąä†@Ž£wLw©Š­ø]“/'°Ķ2懂ž x£į'ÄüZš}ķöŸā-ś;›yķåhŚ0¬–Ū÷>µž—ß±?ķ+ąßŚæö|ų{ńĒĮŗ­½ü„”pji[[ÄPXu‚9ōų«:ŽźĘšGÓŚœ l]y•rW•ó׈ Õķoõųļ­-®|;ØZłJ dÅ'?7Ō§š5ęŌCqč~nų·OÕ4k»Ū­^Ė“gŽta…¹ƒ<ūÆäkłĪ’‚—~Ķ–śMÕ§Äļ5ŖY“†y @7Ŗ1}½æĘ¦59u0”{Ÿ‹—–ÓˆĆĪÆ–8ūĆ<ʊ ¤pÅĖw5ß u9g×(|Ó.TĪ8݌Öc,­øa—9'5ŠdHγ ]ä:ć$Ž)LHL‘Ø•N ūPRˆ³Ē2ģ ¤!ąj( ’7,AŲWžh5Q5d‘ę†=jš(Įp Č ¦h:bŗ’ąœ’“D³_ķ-¢O®ėwŗG€|BN˜$øÓē÷rć¹ Ey|Uo­¢ųĻN¼Ž]#Äö‚ŪZT'j^Ę—>Ż0}ųÅsŌZ1>ޱ¾žŠEŒXŽŁ»Š–=6ėMbö "•XKū,k‚¢-­,/’špWģNuM'ö›šG†Ž=RHć×>Åc ņžĄ ĄŻź£=yžK`iå¶U“O’ĘPJģs’0qż+8uDøčI„xžęĻP‡MŗÄ»ß •įGłźÖö[NŠĢģŒÄü¤pŌJ=ŒłGkz½ÜRX鰗X†å üGøåÖpź2Κ‚•łA`ž•„(˜øŸ]~Źž6:lz‡…5˜Ī>Ēuęq°ēŒ~YÆŗB§˜cIEcĘ?Ę»bfé›P;GHI‘ū’zŠÉ6‘„ŌŅķĖŹFģ’z £6µ:ż&ī-Æ*°‰}:Ō~'ń%©Xā·¹ówØŻµzUØŽYĖē«6āÉž•1i-»±«ŒlgPė¼3©K¦Ż™· ©*>\óźk¤ÕeFŅļdPå×÷lzfØČóģ.å`ŪžRÜ÷WQ¤é"ī˜.-‹Ź§ä~Ų  SčsٳĆ;²S]=£<¶IŁ/#=ˆ«§øœz¦­o%“Fžk†9'žÕŽųcÅŹšI³ Ū»695²dņŪcŃÕ¢ŌģŠŹŪ%9ÅxĪ©{=¦«wåQ~AŽ 0Ź6Ś‘³g0ž÷jé4ō”ø•„“Ģ2Ņ„¢ĪÄd–Ž$š`ņ¹;UG¬= HņJŲzėC@u2j÷M¢¦$0ƈͱ‚ü͟_ʼś(¤K–Ž”]8Mg¦¬„“³·µ•B€ÉĶ6}2D˜ĘļJ|†¤ļ©RŚż4‰ĖŸńNŌŹĮ›ŪŚ*å õ®‚_ģ’Tż™ˆ–üŖœLÜu0/“;wŌ'šÖŁ£·—$n<×w£]i’7“½XŸ›Ą¬ÜMbŽ"[;{[¹-¤r†eĻ õZå’Śä}’y ōČł‡½.[Ķ}ĻRš¾ĖĶ6Y F­·pąóŠą|q§Ķswiw ^YC€ąsC‹Üq—CJÓVøūk]ńٽ¹ćŽ»Ųt»mGK¾™-œÅņ`żžqļN+øī›9Ÿ xjK,G¶ąĒhrIĻŌ×^Ņ;K#]…óŗ7©ÅŲ³[¼iģR×"RHĒø >${“™ņvÜŠÄiüC¤ĻcÕćŻŗp§ĶJłćK‰Fc2qĮ¦‡ŹĪŗĖVŗÖ’+^"•zsŌT‰9_2Żäė‘ÉčkkčCEk[aŃ%×ĻĶÖ“%dwµ@éYI‚B§–ŃĢŖå¦MdĮms)ŒČ¶vē’*J±Ń+]éWv:•™G–ØĒµ”ćéõ½”ÖQź*`[å'ŽG„1ņŲān5Ń„ZĮ…’Yā3ž®± »Õ5RķķZD•šģN03Ś‹Ī{RŲ¶5¼r‚qžkCÅV–wv/N[ŪüĖĒØ¤Tes=µ +-O†8 I ķrĒļóÖŗj0_1Ž=ø_¼ū rJ :]ėGńźiw͵r6œ€ĒŽæ5ĮĮ¤x‹WńF±¦Ūi·­öÉó© ź{ƒß„ ń·¾Ś’NžŚBĆnTóšęWĮśĶĢöš¤“,ėæĢ+³¶x „ē«Ć„\bŚņÅĻżņ}+Õ|:noeMD؈˜ĻSA^Ģęž$x Sš„Ž‡ākā“LÄa¹ŗzēė?4Ż&ĒBŌ/Zł"˜L]搒I''}ŽóāÄ}7LšĪ„… Ļ«“XŽ@Ć(ĆŠc½|©įżSPŌ/īoµ©ę{©pY²æg(šr3·žÜKh–r¬~QźkRŅŻ.!iŻ@n”»Wdfs÷¼²¼QŸ5„?I³šXgÓÅ09½VŚöūQmFź52Ljѳ’ś…tŗ³³…b0ZÜń‰:“z…†ł łcøÆCø×­“ ^]4>RĒbø¤>˜ü*⺛Ƅė>0¶ńĪ€#Ōį{+«PL1°äŠ›įGˆü= é^!µ–ę M@ŗ<[”ī“Aüæ*ŌӐŪÕ/S¾7aŃ·¶\ƒƒ^‡įk='WS§IµÉi¶ó‹§;–ĻĢ:acÓ. ū=œ#H“( ļéRIr58 *ĢŅ2ņĄē4 Å“M-ģd²Ū'€OOZć5} ōūÖø@)Č’dŠREKWQŌ"Ė#•v€Ga\ŖŁŻ]Lš@£ĶsĄō¦l£cŚōō½ ģw^ōĒ<ēŠćļ.’;¦ņćčsĒ­Lˆ”K7›Ė(;8Įżźō}#RŃ-’³.Ž"ķž/īø5 Tŗä6÷M„ÜĄQĖn\Æo­mj–—Z·‡®SLš(nćiB{{Šh”ÜŅššß薖žmĆĖ.ö_¼HļWüK$¼Ęņä?VcŌńŽ®.ÅņŲóKƱĖ,QBĄīgĆjŗ$÷\Ü,4˜Ū•\•²}€õ«K(5%]NŅ8攏ߔŚ++R„ėKm—Q¢[¶āåž§ń¦åq3—Õ4+a³-ŗ•'‘ŌÕm)®4Ėė«Hȉ¹GMÜö©īN¾õĪ\ėl5ƒ •6źŁR%z™_”¤csÕōæiĆN3 ¢¶xĘŅŽŲ-ōÆ.ń—ˆÖśł Ü0e’×^SżƒqqØ-ŗÅ&ŠsĒ\ĻaٱóŚ\č÷‡am£œW}¢ų›O¼“\Šum„œŒā“w#:»ė+[ę“Ōd \z‘Dš!VIEéŸZAģŁŹH¦ŻPFēÆ@E\µš9…ÉŽĀ„ĶØJO–*ģāü_«i–b-^ś;+qĘģ×ė\vń;Ā:}ķŗLņj6Ė(b9/ōĘk7^'ėY‚™ę9)8*q}dķų$åų~‡”k8šÖ»k'Ų4W]]°#»‘žāŽŠGzĀÖuŲotčt䓆„<ŠN\ż(x³·<š;ĮSu¹UD•ß#mżĶ&žH«`"/S'šŲć#ŠęµY|«ā°Ęžb0ćÕh֖[9lŽ’VŌ“½6Å.µÆ/{|£©#ü+ŠųĒ”xÆĆß“‰¾ ø·ÕaŌµ„Ė ”/qn„7ļ6öū½ū{×<ń>Æ!ąœv>Ŗ„†¦å'Ūõ<#Xųc™Øčž4š¼smāŲ<©.į½¹2Z܎<Ä+Ų‚¾Ÿā-ŚF²i66±\°żā²eGŽA÷®J˜ÄŻšŸF<ޤiŗ’Œ[~ņÕŁw]ōé”’Ž)ÕÖ,IäČܶĮĒįUĶʧ¬ØÜG†ė»µpUĒ>‡ō‡x‘e–Z~Ś¢ė=æšæźgéŗw‘4öž|ŽP”ȹĄnä ՛>öŚś2ZYb+»/×õ® ā[?vĆį#ĖdL¬§y…pxėMøžŌ\¾Ęœö®wPėöv+Żź½Ä>\ˆWæ=+C[ń†ŸyŌ-„»øŒ²ĀŽ Ś;œ~›fŌāŁĶhškĪ×rB­ )Ļ9®¹“ų ¬kŪr„¶Iį©Ā,e…įš&ßuķ\’Œ4#cØjڼV¾)ŠÜż’tP® Œ7b­k·aŖŗ>Žż³’kƂßg_Ł3Ā^ŅĒŪ.쐣ŒšķĘTŒäœ{/Į$|÷ åųŒ. ŠÄ»ÉN£_įu$ć·÷Zżu=>Ī(¢Ņhþq»*Ä6ūQČ<‘Åp7®‡ŃÉé©ćŸüIgäx;K·„Łė6ŠĪדT,J}~a^5£ÜĮ©Mo$źw\÷®Ŗ ģüūŒ³‡„Ć6›¹ōö³Æ|š/€j7iŖxāāā?³Å6aˆŽsŪ×?…xOеū/Mcż• P£°TŒ=²Mzōևņ>c':ŽrÜńˆZ‰”Ń|?ā=nC\ÜĒū«h‚ '°Æ"µSÜĄaƒā'ýóT°šżī™žØ£z²¬Œ¼„y·ĘļĀ>:Ÿ…Æ ›T ±·“<;nõ©„{žÄ)hz?€~źžų{įR’SgQGžEgżź°o› ņG?­vMm§ŻĆis”G¤³¶ÅAźIśWŻåĻ–š‰žyńŽ;ėy¶#{©MŁ÷IŁ~ V­ń“į®Ÿs5œž9ŅDØ™ēf?ŹųńšvÖĪ<`—R“øxŅ/›Ėžšäפ™ńr…Ļ)ńķ?šø¬ĆH$¾påcķŹ+× ^7®ž×ž1“–|į;M9P’ŅܝģWŠ)$~4sX=…ō;~Õ?uølµįšę—qWŹh·,Ä÷|qųW”x“ö¢¼±““¹ń’ƒ¬ī,<°%m!¼¶YńČäsœVŠ„ō0«‡ŠčüńĮ_ā‚ļĀśœ7nó"”…š";2×Ŗ¢˜eX£`7t÷©qčyµ)4Y™u8•¢ČR:«b²æŅ„™O!~„ž‚‘‘"ż§Ļ1ī2 ē5ӈķŌ v!÷ “HGA„ź5•£C1"PpŠ{Ö~§ØI}“k²$/Ź("Ql·§ßGeC2–}¹óō¬±­il[”˜K„9cœdŠ8ĘÄ:妟ē„F¶v’®Ł%c€Ē¶kĮīŸ•Wš­ģO—<ė,V¼–LąōéHGc§üBūeėYé7^AŲCćļŖē½tiŽ·g/Ų.Śi‘ZiRG*Éę6ų²öm2gdR³‘ņÆC^-ŖD——²E 88Ąē4ē¼+bŸš]yöÓģ7Hzsü«²’Ś -Ev³‡NÖ¾(Oovśvń,Ēo v"¼ŸL×|@o>ŻņŚŚ³–0 5”£ctrÓ¼s¦x­-4©`– ćŒĆēØĀ³vėļ\²ųv{øL#į‹åW¹ėõ©0’čy–æØj°]Ok*„¶!·c>Ų£Į·qxŒņwø[fŹ)nš’=(ļ:gĀæĆaw{yؔ) › nDZē\»üD-ģü“±å€WĒ­ •Źzj|LµšĢ†ĪīźŽ(¤>If ķnœ¹g«éŚÆˆ“­6[¹®“›ƒūł|ˆ3É9śŠh§ūLxRÕģtūÆY›čmćQĄxßūŁÆ”|?į-~ĖTŅu–é#؝vž¼{VŠŲ†}‰Ŗč:fįYīķ¬ĶÅūØŲē—į~¹µäĀD6šÆócpnĖėIĖC'&i|K›KŌģÓtūi$Še• øG|_Jņ#>Æ42Ć„ä£üŽQ8GcJ1ŗ*2čĻb³ųUż’‡ EÄźÆŗ@Äqón'°®?āŽ<)¤ųÄųWBŗ›^¾°‰Vk’˜ŠCŻSŌ”ģt)Ÿ8|CŸĘ¾/Ō—ūIŗŅ-­#µ¶cI ī}y¬Ų>\čÖŗwˆ•Ü\jŽŅ$‘ļ–ŅźänIC•SėÅaRäøŲĘŅ5æ ź©$ö‡z v ‰?NkҧšļŸa4±“H 8Įü«ŠIˆł«Ä7‰”x”¦™äKÉŽ5cņńŌØķ’Ö¬ł¬üWćųÖ×GtžĻĒ’ y­©ÄŚ25ÓĮpčŚr[³Īś£dI–ł3ģ?:ĢÓü©Ķ%IJG …T9s[šsšķįu.ļnc‰:Ņ»_…Z4ÓĻØė‘\K:ņdÉ ŽÅR‘ī^ 𒆮ōčå¹H_T#¼ĒžƒõäŚw…¬-g&K‰7.2:äōżh.1č\»šŃæ¾2 ĄIłTg„CØx:ŽźÉ‘’éĪqšW:#c‡Ó<„E{;\I%Ā`¬ŽzW¼ųsMš­ü×Q»“әrŪä'ę\qŠ|äJhy‰O{Q/‡Ś!±äĄ’óéY_”Ōn®58ļµ&“ä$©ć<ōžU.f\§½“0ŹFUn‘Ņ¼ēÄ vŅ5ÅĢi(?īŸZŽfj“G)ā=N’[7‰Ø8I'Ŗćø5ą—ßl±–D¹‘<£Ā…ĻcŽis39 ä\]GFźźy9?„zO…tX-mN–óO *FÜģ śÖ‘™Ē7cŅ£Ńl­Q„%b,øŪĻēŚ•ˆ‚ī'Y»w'ö«ę¾¤Ŗ‡in¶ŗ\*÷0ŪŻJńä ŽėŽÖnŠŁ¼Å —Q€Ÿ­dęj¤cé¹»ˆ5Ō+n”z¬}8ŖWZéóĒŖŪmņŃ÷Ųä~"§™ˆ–ÖśÓÄW÷PXćS-ķ9ö®‰¤‚iķ ƒÜRøXŹmgJ¦†ź1¼Ļ5wGŗ‹ķ $N±®0Tų‡ā=oÄšŻŽ“ƵÓ]ZĶ+Ä•cļŪŚ¼6žĆĖ•ˆ;[wAŽ„+c>=ŪĆ|¬ŹŪ€aЊū“önųØ]Ų§†Æ§†mB<ŃŒņ®üŖā®;kYމ˜ØN ŠŅhŅHŲĖ8*2x®z‘Q£ęļų6{OĶ%Ö®é×*#·†Aņł˜$ćė_#ųČŲIØ\XßGoƍųā•ń?‚õŸ…׏Č“ŒĶ§łĶŹp=OQųTß~7xÓöTż <)ńwĮļ²ŚÜ”Ō-œ2łńž6œvĘktµ:éčrß>.iæ~|:ųÕ§Ł‹ µČZi¢C•GśąžUō_ƍr];Äp ˜ĖŽ„Vs,š} –ĒŽóŪÅØĮoŖéäGrø`ĆŚæ•ų8Oö:¶žOžÖšō71_2hŽ" E¼œłsĒ({p*y­c–§cųõńœö÷ś“-@`”ǰ{wÕČ=ČgV” r{WBg%YXĻøø Ņ&U##åć„C+Opæ=qÅk.q·ĀV\ŚA"tž§¹_˜ÕYžyéTkö4eHYcŽ9éQ[–I*ŽO#śÓ.2čt–ß¼Gd \=ńšž‡’ąßŸŪ`|ųĒāŁKā.¹ŸąO0›Diß š(†ąļ(ؒ:`ĻķÕŪŃH„0:żąz7ā0kĪ|S¦ł¶—6›Ī2¹ŚkĻŖŗ|5ńĒƒ®o©ŻŪĒäÅž‹s‘ÉCПĻņłńēį—ń?įē‹|s§Y]Ż%»}‘ä\;«už9üė–ś Q?’/Œ~Ō>ųßYšf±kżžÖ¤Goó3”’3“ōéŚ¼pDŹBłryÅz%īœõ)ė »7cĮN w5A¢™›Ķ‘¶)Č ;}k£™œmYŒņŠĘ»ĒŽć§ŽŲ”6å|”ąē'ŠSR‘$¤“”aLzÓā-1ŚĒpµ6ŽįęO’§j†ē;yŹé¶O2-Äš:Pn‡](¼ū:˜Uę…ÖD|ąĘĄä0>¼WõÕ’ƒż““’Ńžx‹Q¾‡ÄĖ…ūݾęˆÅ ūą”¬„tĻéÓĮž/žŃ·[‹‹t·ŌmYŽĘ `1ąœ×¦Iu-Ąc³”]čTõĆV%Å÷<ÓĒ’<=ń÷į§¾x¢4¾š¾»g$ęĮ¶¹ķe9ąäÄz’8OŪ'ąv»ū/ü{ń€¼M娷Ōd“ŽVÜXįńŻX`‚;厌4Ųł_³¹Žę;Ėx„Ь>`1Šō_ź³j°Bc4Ʉäņ=«S);Ż„Õƒ ‰(Iž. jĄ×ōŪCz¤ ˆĆū֔Ĥsŗ«©hŗ®›`‘ÜŻŚĖęGp$ķĶ~­xGÅÖ~)Šō½fŚŪČ»uD¹‰ˆ$#²ŽÕÓe&wŠˆß¬ŹŖ)u!e,øąć”­cœŅ™hŽJšłx${õĢÜGęNf; ÜĖ™ļ„4KMrՙA*ōĶ&§į…¶µøšŅp×HßtŒō W9{+kµ2‚NŲ<ÕÉnn]#:¦1ėHFö• 1ʆm¹=ƽ§Ā§Ā©¦ßż¶"Ņ"nŒÆ’J*/SČ|G®yŚ™ÖÄZĀØ5-œ€@ŅY9ī:QŸbęPÕtļXļNAŚWø¦ŲŚÅ °’,韽ŲVń•Ģ@šķÕףnēRó,—aŠķ^[s©Eā‰åæÓRIv7–ųsŽØ ›åF†K9Ė#1ŪĒ»Ķ “{=*(Ņg,q‚xė@X’ćEŽõŲ½ŠfھՃ­)ŠHiŠ”?*zēéYKr”nUÓ/-ļlžŌҬ‡8*ÜZo£Įs"Ķ•8®qRlAŖi:†ySŪ•Yzr:z՛¶“ū.EHOŚŹæeć’Õ[Eha&sZn•uŖøk•Kz[Ń%Ķ²É ”–8Ź][Ćך~Ÿ7ŁnHłd<ąöćņ®üā;m¦ķbWF>`Éłæ:,R7¬lY­Ģ;Šæ/j}åŖŁX>čü¹›8ČÉ„`¹ĻĮŖAašn…«Æ¶ń„ȃOBW€ūßZĶG[óYŽéMšŌ*¾2Ć pĮ®4Y<Ń$ŖīCOه1™‘ī —“1v9-ŽqV§RIHūՆ2OJ—s”ń ¾‘£hRĒs÷“"š#žņżk–ŠĶęrZ\!Č!»ÕS} ¤aźMƛ +ł¾qڽ F³ÄĢč«¶8$V„ :…ę™s3#H!i6ĒŽßZō-&ŻdµšņnMg2ć•ļüWØi¶eŲ]>ēv3ĻZĄ]AļžI¤)Y{zÖf¶(čš¶z'¼iZŽCµŌ?ö÷¬mV$ūtŅÄŪāķnä{Š8…Ōž[©#`cĆ5ŪčŁÜÜ£zė@X§®1ŠāhŹJ»płŲpAō®ĆA{%ŅīŅšŅ!ņ@O½R•“"QŌĮÓģBłĖpŽƒŅ»#PŠ;Č­dCrMĒīŅl¤¬uŽ(Õ¤ŽŹ€`A ½@5ĻiZĖJ躊Ć5’¶_w­"Žʐ趏£]9avƒ„!†zgæµkĻ ų“Ä–Š ¶Órų<œśPąKŲ’ŌXłŖĪ~fĄĶIā½JßĻ‚Ōm'ƒüT ĄSEó#Uh[’[µ_šMÅŌ6SCp¹·ŽB‘’s•ö’=©9"”§ C}³“ńłr0a×µqśĪ°š_\‡¶;_‘(éō¬å#S™:‡˜Ld“£·«gCÓmoÆ8XnŻž:“éPiŽōŚžÅ“é-cøF]¾[3^ń ĘŅɝŗ…l6ŽŖrŠę|2 «OnŖ'U ntÕŲ|7|¶óź32¹$¾ =;™ć\ä;;Ląg©­Ż6;‹ø#,cHńĒҐĶž‡eż—<čŅKØAõĀI#[Ž¢"“&ļš ¢ÖYV"¬0¬3ųWÜió®¢RL„›!‡JQ¹Ų?‡tč^?· |Ü Ē8ķMÓm Žįs« ۚw!·«G¬I!Ž,HqėéFwŖĒgØŚ\G=“.v1yl£Ś¹ZŲԃI7vÓn—8õ=+Ÿk[>Öķmge<±aßµŲėü «”i’H·³Nų8?6IÉ'ė^åÆüDµšĆĶ_\ƒM“QÖaZÜ¢Nzīć8„Å\ó/ųŗĻā߇toM ńD#ŸœfO›··OĀ­č“ß^hź‘Ū““$`s€()D§¤xžŁµdÓļžKYĮ8c‘čk3ÅWĶØ_éŗvŸ#@ßjW–@Ł,€‚GéĘƒDZÕ|5„ų®- \\ÜZZČ&‚%…fĘ3Ž•ę¾+™|*5 NŲŽĻóq‚ iV xoÄĖ7”ėꄯ°q†ļųu£™Œä†œ­‘žiā“ €»»×£L—šĮ Z!ÕA`3ųŅvčR]Ī6ßūNćS2^[pSĮ9ÆTÓ¼8÷0Ą7n ųõ©(ĘŗŠōė±%š ŒĮwz ć<”xsĆĀ њWd£ļĄuĄ=½Ķؚ^ń=ާež°ķ–ܐł~·|Av“'•f<•$tķQ9Yʎ¤š¬ž#ŌcŠk”†Ė#¶p@ÆZŪ¾ƒA±Ō!mÄéĶ8ŽBŸĀ7cś×›Z­ė’¼3…,Ė ŌvqņVū®ļņ;Oüų{®k¶š‚ŁĖ{¦Ŗ)g9WHõ¬Ļü5šW„ü•‡Ā:{éā<ÅB®¤ŽĒ ü«ĢfTą°‰žwšćĮž¼ń…Ę•®˜l“·„½ŗ“ƒęrA?„'‹¾źö„ģ°5Ģśc‘Łļ]QĒXüKüĆ渵Т¹fž.—’‚|V"²ń%֓«ėP‹­NŽGę#,?»Ÿē^ŸįĶ#GŅäó“ķ>ĀŹīą>Xc Ļžö:÷®zøé=Øį2¬ ½¤é)K»WémTPņ4+u/Ÿd+0ÉśSo.„¶šŁ«>ț!š?Zćx–Ż™śŽOĆxL"k MA=_*K_‘„¢6“–¤5$}ęŻÄ{OGķŸnµĻŚ”™—h ćYJ©ōQ ®Ó$øe‰žTs“޳ķµ{?6kx%2™G8¬‚PHé|:m®%¹’A‚}kSĘ‚iÖv7Ó®bgņS‚wb¤ŽtyĢW²\Ü4jæ+|Ż: ö’†Ÿu’‹IØĆ„iéŁ!{‰$ø}ŠōĒæj›.-=O>ńĮļųi..ļm¤øÓ9’h¹mĘsĻNG5óÓC ¾±oz× 4%<˜Ż¹$zÖrƒ7)ļž‚x,”išæøVõõæŁāF³—é·µDU™¼QÉXŹÖŚÅ¼ˆ?8ēœ×Qī°?.+K”ćÜņļ‰6{ešķģżć8 žšéłSü4óAvżévSī3ĒéEĀĒÆ@‹l…™÷nµNļPŠ)y‹ŽqŠØ-L*;3Ąž+^nÜH±ŲÜ@KXČG\½Æ=š—üKwqi=„Å–™,g/*ŁŽē=+ÖĆR{ŸĶ3ń )øŃ¾«SĻ>".ƒŖĻe6®6©«Z“ÉBp¤»\½Õõµ»›…ž UŹĻ€‡ėڽαĶTž¬śoKŠ×ā·Ćķ'ƞ Ń.ü5…ŚÜÅzrj}`@ĻałVƆÖÓÄmbe_*9•ž0?żUÉVZŸŠ^eJuŠ{Ļņ=⯁¼#ńŸĘž¼Ō4›Ķ/į/†ćŻmjļ’!»ŽīɜmźzŅÜŁX٤ŁdZŚd ·A„‰{\’ģŠ2Œ “•i-_čO§†.#¹ĶxļĘ} ų—Cń#Ģ‘Ś<(čsĢrdgóę‘ėc©EA¹t=§į垵ńĪĆ[Ņķš·Ś'‰Æ v‹ų•NZc‡ńG…µ K¶šŻdšŲ9 ­néš|†Å„ńbćˆž”Äcų‚xm¬QՈ˜gå#šĪŠlŪQ“ĖøfåJcŠ ł™¹ńēM‡H±¶“Š[K…>CÕņž§}¢ĆŖ…–ŹK«•‘_s/Šw4:i&ńN”©jÖ‰gÄłe˜šY}>“ūŲmķ-GĖ!Ļ;ETeŠ*¼Õ¤‡XHVņI捆T š3ķZ·W^_$©+$ ć”ģkAZŚ59mŌĒeå£Ī>pŲĒŹ}køŃ|3į}^Ś9og1ߨÉS¬;`ē­4ģ2ĶĻI½*ņŚ¢Hß(ŒŽ•GQ–5óķķHE ÷»?×ņ A!ŽęąO$īp¬ĶjQ‹3)„.wśR1“Ōį/µĖų&ŗµ“ø0ÄīƒÖ”ø7zōyļę\ģ_¼øĒō ØĖ”ąž8š$VV§Q`†"JFążņ?š’±]Gp‰,‘„¹ČćæŅ„ÄÖēe”Įmg4Kö>%;³÷rEnų³Å×3ék%¤'NBåNOÖB<{S†”hXČ%˜)Čć>µsĮ:mĪ•;ÜŚŖ5Ūćp#‚iķZ¾§­ßé7-wŖŚZUV…צļ^3ci,·(–r$šn‡įĶJ}VīŹMq¢ÜcĻ)ķŠĄMjĆP iŗ$1…U~V4¤•®fĻOÓ/¬.ōė=V¶¶XŲĮ?_ZčL±‰ ¬SĒp…²o_ĻšĢŹrčsš–ˆgÕŚżeŒD±¬;07¦ØéŃļÖ#‰”fā<¼sŠ‹Ōō!‚ ›FTüĖŽkĖüuńCÄžÕmWĀPGfā2¬Ģ2Ą×?\csn„æėžńĒ„4ūķZka®D†IŸfžŸ|Ė}§Ŗi³]Ā%ū& &ģĢR”ližĒū=jśøÖRŽ÷TfŃ "`J+ĮÅtæ4‹5Ö4?Gff¹g`ģŲĮ'9ĒéR7_„üCŽ“ &ÜDń¦2篒[šó‰ž,Šx-ōh NĪ[!z£zÓHĪŻ.šµę”ż¤WĶ=’ŹAVÉ-ų×w®ė3Å“Ü+dü¼ż*łĒ4ž5ū(ŽÜGēLŹØ9vś×ā?ÜĪ·†`g/÷sÜŠįŲ®C“Ń­µH“Hōłm“ķ#ądūֈ×DH\½TĄĄŚ3“Ō¹<½ZŃ®lÆ4Øu}ńĖlĢH<‚iڟˆ.®ķ&Ó¬ĄŽ<²BķlV‘] „%6Ž%šÄ“ź±Eå\®čÕĮåS4ļ ¹¹žwk–ĪżĶœ52¹‘ź2čjö&GL9l/'„yĮšūŁĶs8Aå–į}=ė=Hēg®Z%ÕĈmZ58`8cžćń«zx(²`„ņĢpI©&Rv5¤ÕŸO¶u/ę—Āŗ™æ{N9.2ŪBHō Įɞ©y¦Īś[\ڲ"ƒ€¹Į•›ŹffĄ8’J8źahž"ń`ń,ÖŗŒ·EĘÉ6ˆxĻzō‘l^źd,ūƒF0ŌŹŪ2īĶø,žŅ#1«žäօ…ō֗;-I\`Žæē„dĶ™ę:‹Ćx÷Y#‰¾šĒJÅŌSΚ+7ŌV iRäćhśö¤jČąń‡|2J•’kyĮCq"cfxėļZž Óü/§j·ŗ®²–źW`äķ“ŸīŌóQ’ę-ā;yćŗ¶+“$dš}9¬+›5!Ė„“–;i¦dßC̵]gO†v·uUˆ°Enæ­yļ‹ü>š•Čø²qę`nĄĒ·½Q•ŠŗFšŃ£Å2ɼ‚£ō®²ÖäY"¬!™³‚™ē4āµ8¤ĶhīŽņī9š=‡¾kwVšęŖŁŁLĄ»¢–f'!½h¬“$æac¦]ŁF¢s“nVÜ1“Ž?„q³ųxIsw"ka÷It{VFšŠęüUrŗ,$ CmĒN”Ķ$O«ŲJ.X6įGCP˜Ģ™“v“lZ4Ä;’Zk\ÜÄņ ‚„ĄŽõ@sŗ¢«L%łƒõöÅkܙķć·™”)żč­¾“ŗ m2£É(FܖRqÓÖ²ęf,G§Ü4  ć%øĄ©"Ņ^)ŠJ)ĆF*£!ņ3÷sĒv:.»ØŪ\ kt½,±Ē#Y{c?C^“ąm ßšĻ„hę–{v…¶ąŁ ’żzõyžĘǚxąÓ„Ö«mö{‡š6imä«rqŚ¼’ĄV~(žßŅu-föÖßL³œī1ēr$aŽq×5¼̧$y_ÅOjśæˆ‡¼x›Å kšŪRŌüCh‰©“y“Ļ_NxĒē_7ųkWx¢Ī[³!µenAŹ×éQ4iNūFųćįfāŪ(üI„"-źŁ‰%‚’`tļ_™ž?ÓßEÖ\"Į˲3%yõō®ng{P—C™„DNåqŽ˜¶ü-®’dėZmķ­Ä–³5ÄJÅ7(ląūu­cŽGė/‡5»MwF±×mįūõōĻÄĻŁŽCˆ­.VźĘś"«2. Lsłš£Šūū’ ż¦ķ|Cįļ~Č8¼¼}WKŻwįó1ū±rv†õÉ'čM@_>u »9ÕöŽsšU©µgÜŽĒß ¼Fš¾’¶²Y©ā¹Ÿ<-ń—įߎ~ųĀ+kķ\³xąYFL®£¦sƒ’ƒG5Hę•ūbüńOĮ/Šž6ųWÆŚ+ÅZōŠ“G“]@\ķ•[ø+‚½|Gshb¬ÉŌ’õ«JnéK¹ÅR{ŪDĖ1tf8ĘįIyHysŒg¼ecŸ—[8Ų”B39ēéQ¬žt[^’ŒŒē†ŖSīiŲ©åI—ræ„kŁĶj‘ęx~uéÜļUs¢ Ɩ\Č$]Ø ĻĖŅŗM ^Ö|=āxæAԟHńN›{ ķ„ńŽTDĮĪsėŒQ#zgśQĮ=j­öĀż™ž|lÓµ2mIģc°×--äßö[¤łNGQĻcŲÆ^µöˆ?~Œķlq\•c©”ć¾$Ń4«É•µ»!}”Ģ WIÓj‘ß†sųWåÄ=ļCÕ5·ż‚ń–<6į5¾~Sžøķųā¾¶?’ਿĘćæ č¶jEĆOs<\¬ŁĻæÜśWį̰Ŗ¬ āh˜RG#šż+¢“čaRE”;9'¹¦4‚IX>±ÅtœrEYUŽßßUéĶ2pꈾfąĒ Å4gbŌ %ŠżōƒŽ«¬l¤ÉÉ9é[F66бcb2©bzäŌFF’äłdłqŽ™¦\d[ŠX·”PH䚶«ö!ż”öYż¢ü'ć]CPž‡Ś™žĢ×Ė®Ē #yc©RAµLŽˆH’@/€ß޳¤[ėÓŻEŖŚK ½żŅ¾õ™]‚eļŹķüG^kģĻź«+źžw“]ÓÜnR¤"nU‡Øķł×Hō6Eõµ›ĆŚ„ģP\ˆ!øa-ø'dœ:ü’‚÷~Ęö’¾韵W‚|>Ś`ū&æäĒ»j ;%k–ČĪö9É"Ŗßز>ó“µøČėW©™{kkiw «&ōfŚ‚ Æyų_ń,ųsPŃō"ÓÜ%Ƅ,‘»±'ó®ˆ>‚’č~”xVkq{ ŻÉž^A8é]7ˆģt÷œÉi›“ķ[Eõ9„;՟ːīaµ”Ž‚¹ūŪgœ—(śpkhŹę&ׇ5kż&ņ @jģĻė]½åņ^å[sgęļLJy>Ń4ŅFI –$•>”o3Į|3w?ČŠķCķE ²>„V”żŚéégoA†ĒqS(ŒĮ¹ŸĖ&āąŖC žÕézŻfĘr EE8<øžµˆ6ZG™o6Ł6¦ŻŁ'½VŃō‰fµø‰d•”ÆN­ćøŠĻ±į›¤óJF٠޾æ…\ųZ֑M}äkø“Ž€ą±?ć[Źs¾3·±¹Ōõk:øŌbpSjž¾Żė/I³{}B.ŃćdRÄå@u=$µ“·7“²nć ܊Īމ®ŽC-ä{u”Fą•ļŠĪHŽ%/ˆŗV“eØé×~ņÓNużäYÉOĒšżjdž¦”tł‚’Iäg¢‘2ŲS#źWS=ģAxŪŽ€[°XD–Ž .J»»bµ9§±åw^(žĒYž#hc‰HŠį>˜®ŹŠ¦¦‚PWŹ ōĶHķ £M²…­S'ķōŸqā ©|„‘FŅ6·sAŗ:’ iöIt¦uūŲcļRė:>©øžŌˆS#>•‹‘q‰óēˆü-}„ŖÜ[܃?tšfir³Æš&]ƒ;ˆā…-niĖŠõ]*StcX\Č3·õŠźv¶0Į¶āŅ6”/\w­Œ¶>|æŗŗåĶ£F!׷ҽLŅF”„Ūjp³[Źæ3 RŲG®ź–žtÖęmņĘĄp3“Pé·Ī|·Ÿ!NELb#~? 3A½eiŅBO^W5Łi¶`[Ʀ„gqŒēėV~"µøŅLBkx×ę-“§éY—7·WsZF$ž£•Q€Ćޱ’7ŽĒcci¦I§O.©$Ńā6h€\—nĀøŪ+Ū_–Pd©W=śŌ’sS»µß p“R£(ÉA®FāAk4Šņ ČööŖäfrŸcĻõ*ÖT’'ڬwuéZ:EŁ’ü^¼Óš”;抛3īz„ókĻi<ĻęģŒF8ĄĄØµi µš—÷hy r)r¶šóŽÆŁĆ²/PW9>õvĘöž+ē’ņĶŽüĒé@ģv7“Oy$€¹Rn¬5ĮóbĻŠA”›%ā]Mo©i ßÄ6ŻJŽ›Ę~"ŸGń‚ÖŃŁZj œŖ£`ēNI ø³Č§¶Ōōē"9ł•XŻÜKu ·Ģ&ĒĖĶŃG²iö¢’B›NXxtżß8Į¬M®t[i,®”ß)ÉĘI±Ś°e•lŅźŅīęi§“ģē,³Ö­=įŌ#Hå'§z@I¦XCŚZ³+HäįIé]u¶›™÷¶ī!øQœŠ\7:ųĆM¹IYšźŚpē•īPON{’Zńæ߽Mh¬¶¾aIÉeõ ÖĒ6š÷ö]¼>dŽ„ń]^‘©6”o¼6U ž”Ź69æĮ–\”³‚;ā¤Ņ®%dX’:uėA'©I§aįł/“čŚiŒdĻsÅy¶‹¤egŌB³+üē¹ Ö ķ5;ūU²ŚŪ4Ģ;ä*ĢZ>•m„Ē⋹å‚ʆ 0 Ł ³—øńx–śö HÄÄq×$ԟa“O–ŁL±;P¾ųģwv—6š²JÆ÷<¦ƒń"ŪģéĀ #ŲO—ĘOZį-ī'„Ÿ,6ĆĮ÷¬Ėł‚ą!_™¾a@šųÄQ<”AśWcu¬]k¾¼ŃX£Ć,~Rœ`Øö Øœ>†‰mö]¼®L-²@§}GąJĻĆvš*Ōćš]ŒÉ<‰–čz“޾s¼Ōʵ{y{tćĶ|žzš™;©ī-ma¹n|ņxĮĘ3\$ŸlLb'ūŻ –¤ĶÕ²¼–/,¬å€ćŽÆųjķÜ9cÉ,A©‘ō}cq²G"¤Ģvįø®ĀķāŅ[–ž0 ?6[ޓDžkŽ"¹æ×­-ą†k…vņÉ]„·Ūt{)õn XĪøŽ„ &ńC‡Ó~&OsrĄų\ä9Ē?ŻĒ¶+»‡Äqjmo}Ÿ’„NTāǽoŹtXł“YMKVÖ/oÆ­š3²79Ź‚pŪX6Łæ’åzńŽ(“°¤ģt½em¶øj©ćļ1Vlz’ŪkhAqĪ~µ<āR=/Ć÷6Öz|÷wšÅØJc`Šć!N85å:…&·­źgH^×3o”²ē·ėłVm™6zއ$ņ !Qņ«ČĒ"©ŻųÓDš­į“^hī­‰*ėø¹śRi•īWńo„ßÄ2č7 ¤źLŖļÉĪ@Ēé^k¢Åq§Ż^F¬™‰ü£Ž¼w Ł„joģ³ĪŲŪ•±©|Oć ­ K¶–ŻEķÕÄā=„ć9÷¢ĘŗŪCBļU×tųb·„@ngEf8ČU gש^^%„ŒšßĀ»åy»}(§œY­«Oöe&KW$kZ-& kˆć“WN #šnē¬i×¶Ö†a+yʹ÷8Æ>šv½®j^#¾µÕd±‰$fģmńœ÷é@r¢×Œ5ˆģŌ¤u½ĶpK$”.™¾fä`r(hj6+Üź7 Ę;†Š~R?•KyŖČ-¢Hˆ-\Yū3h!žWŌµŚwmŸ6[å{.¢=½Å›Ā±—.Y»õ=j:£±‰w¢]g¼bē2åÆšW$Öן’i÷1ŗB2ČG ׏óėHÖ źv67CO²†Ż#™X¬’ćļdńÅ{v‡„i¾“:yxf(żš9É#5¬ ± Ł}BåÄ$ļ|ŃŽĒęF‡†Åu×_j\ŽŠ?ō{”‘)ŚG’ĒåA¤cs,xc\Kg–KɚŅŽ,a¹õ®ÖĻPµQ ‰mp¬ŖgœšfźŸ`×vcŃG㊧¦xłüA Ūj¢ŚćNŠ|”I†$=H®:Õ,~±įgG8Ē„SJp“ž›ź½ß+«żĒŅ?³ø¹ń7†¼_u)kk†¼[(Kóŗ<Oę+Žš÷€üH—Z֛j/f‰8ł }9Æ"¬īĻļģ&1÷Qō·Ę‹;߇~ų{āo ZŽŻZFŠŚ€s” ‚qŪņ®ŃdҼwął.ķR ˆ®`<b~ų×;ŁōŲ8FČł‡Pš\önf¹²xœ1U= ‘Üļü āéōųdšēˆīM4ĘDRČrUŽxcéҦTūMB„d%ń_Ž?įÕo“ļ Mś¹Ül;‚s÷³ŲZņkCoÄbÕ'øó&'ĻxĪ '­rŹ-‡ŌVö;söpų)ā†óŽx;Xń‘ń~ÕwډÉxµņȨϦ{õņ$wמń\ńNŸ} ųŗ }>ī&ITc†•>¢”Ęē?+M¦{]FcD…·LT½ÅnhŚJŪ°–ėę“©u¬š;)KBkż:+•xāaxćŠó×暯ōv:–s;2[ä}ņ:Ņ;£O¹gQ×_PµŽ-–‡Y$·„z§Ćļ†Sjóx+Nńuūé/vĆĪ–ÉxؐŪüūUĘ0©M#čŸžĢh¶śåĆ%¼@Æ*Ēy!u½ŪÓiķ‘Ķ|#sā}GÄwšhW»ģ®ģī‹bAņę^}3[Ŗ:œU$z%“Z_†£¼øŌä+uŹ ¹ ;ę¾ėż˜ō­oP±µń™HŗO0E*%„ś×L"Ž9U±Ś|cšå©–ĪĶZźŹå’"p$d~•ł»ūY|6š×l<1/Ķ®‘},ę[q˜Ą_¼ śgüŠs¦™ÕJ””šŸWŅõÆŲ] K; Ėƒxä~y­«÷U2DøŲ¤šą;hZ™ęzŁ”ßéŅZī.×)FNÖ;sųf½ÅZ ÷…µYtsuņGYbä0*õØä÷\»N7<ā ¶„ŖéŚž­¦ĖmfśW–³@īw\)#%y?ćX~ŌäŽįeø2=°ķźMcj'#ŲeÖn*D¹^ąśWā=]Ö5‹ķˆķćš®Ź»<ÜK²lņķcĒŸš‡ż\ø“kė{yDÓFøłŠu=kßōÆi>9Šģ|M \Ķ6w¹Jƒ 9 „‡Æ”” #üčń;6–'1«;ķ+}ĒĀϦŽ|ų—®Eq Gā?Ży·pµĀēb·?)źNk_ą½Ž©ńÄ”YxvKOĒ#\_Ov‡”\sĻõ¬ź(£ć²|±xŚ8kŪžQū]¤~‚ŻŚŁ}š×Oµ‚Ž="Å6EhUė~+å=^śĘ?Ż?“%… Cē'xĮ¼Ķxõj.‡÷ž*TéŖPVKD}cx—–É›ķ…Až)5 rÖ¬‘6Ģ߅róŸI†ĆFœ-bž—Š#;^cńāźÓÄz6“¤D\4’cę89Ēō„ Yž×öxI3Ēt^ćĆS>œ÷Ń++ņ2™A‚®}+Ѽį›’Cöķ^ČŲéD G(ł˜z0ķō­ł™üē‹Ä9M¶Kńūʼnįļ…š’Ć6V±Ūź‹ä]?ĖŽ¾?šĖjś•ļą#{œų£–"ÅVŠÕĒ—’“SĻ’ooŲÓKŠ4ł’hŸj× clŪU± ł ܊ü£“EŗŗĄ±N_Œ1ƒčké#Øžž*čdz»Ō­§“O¾¶Üg 8üėa­šŻ>Ń1Ų{š“¬qTw2.uō³gfq>cĶvŗ}֓-“7’‹o73ФŽY³«šæ‚µ”¢ĪW+D·ū@Ō +Ü ;ńŒ×e§ė–ńĘöŒÉ) >o„I3Nض©{qqj“DAQ°sžõÉ®£/ŚŽĖSc<ć‚ KM77QČÄ9ćšķt‰m,­µœ(¬†-Ī óź=)óts„iś€avRCŸ•±Ņ¼Ē Ó-µµGmuwwłś ē RĪś}‰±yVćŸ}[QØHų„™ĶI¬Cš¶×.­.š%yÄOĀćŒWI¢ 3}<ڜ™G_ŻcŖŸs@J] ]ŚK o-×5ēļ«Įc…¹FĮ=Pf‘Ķ&hŁŽM(2³2DÜ Œ W?ā[0ö"[U…īŚeqū¾õ<©2 ģ-5¢Ž;•OtāŗūOiÖvWw”²jł=W”ĶEĪ?SµÓu1?Ÿo Īü£†śŠ“J“ū+OMMŅģĢ®ąłŁ!£°•",kņµŖÉ»\JÄ“e‡=k“›³…”°SĒĢĶu>Ótéu9/o,ķ„eĘccx³Ö»-CBŠRĪļX{6Įcöpų*}ķ[GĢō‹–u•c–FĪĘČĪźvķi¦ÜcĖ<…~? cE=CÕ/b]WYø’ā}ÅćC€°ŽŲõ>õÆ$OŽŹ!srēbń’€e]‹ˆ–]氕W|d.=«6inRyā-ń.[p}h9Łć^ ø2Ü·}Œ¬ 9 UXu­RŁJĀņIpćdH£4©ŲEįŪ»*Xµki.Æd”•Ū³šÆń7‚ŠÜĢѧ“Ł‚óšRŲŻ#Åo5‹]/R·µpZP„įøˆ¬OjWW–ķ%Ō‚1ŒAµO`I—ow¦é(ĻēV\Ē”®Į)ÓsiØ«@Ű$SÓŅ€=+Ķv’Łk}m{o$ĢŪ0ą¶1œ×œč~wŪVCm7ŽĘšxZvŠ& ]7æ#¦¶R唎ŪÉ9sœīŅn-wR*š~ "kO¾‘2`œŒg=qM±ƒBŅ4kĶG4SŹ]dWĘĀO?ΰ¹”÷:Iā…Ö{‹™õՂ4øÆ4Õt„Ÿķ—ZDĘ9eRrFpŲ­#>ęm_€n&’;U¼žŲŽZ°ÜžóßżjŠń7…“-CV‹ÄœbżŗJ=;š°R.čzgŚFK]ļž~\ńėQėš‚K āF=yźje7č""†%ņ˜ēČŖv·ččoamä3$}ßzŅ1ŠW>PńχüC}¬æŠš}oU[»]ygjē8LUßé×6X»/š92ē­7¶Ļ«“ż+Ā·ķŗMŸŁįF±Ē'?Z”x~AŖi÷7ön ŗõĻøō¬ßfc/2ž” ›/³]łŃĻYåqė\Ö„åC,šµœŃ7˜7e—¾=i$Üćl5¶:½ŻĘ°Ėö%"Iõ?„dx»RŠÆ­a“ģŽ[żŌlu­ģtÓGźm"™"€3ĀIéSųzĮm6tæjWrUdŪō¢Ę‡¾ų;ĀŚoƒ“›ŻkzAu0ù°ō=kÄ·Šk2%£N·)ĪēœVN ]šŽÆ¦^"iVĘ-䏫’ŽŽüÖø/xZ¼×¬n“‹-9Ö±ĪēJQv!G¹źZ'¢-Ģā12 v8įk“ńV‘„I,A{°ĢŪD™iļłb“ę)£Īī¼®]źsOį+[MPB?¼ČļŠé4ĻüCÖ4ÉßY¶ŽŽūÜFr’UUÅn§Cįģx~ݤ_NģDLNĒn×ĻÆēYVæm|G{uisz±.ę,ŻJżhbęźcč~»Ńb8Ķp׎ X6Ūü±ÆV|óō©sEó3Æįń›HYY&Ą# ņ+—½ųWżŽ—ż”-ļg ­ø{qŪéQ*”ō'Ā/Q·ÓāŃŽIõU €. ķüAi©ŁN Ņ"ĄēccśŠĶ;ˆŠ9 ö¶Č‡uĀ®Ö8ūę²/'¾‚Yį,z„#ņŖB9ŻRžW“ax ł²zćŠÖTzøNŗ‘®-į·Aæ§/ŽĀ·¹J'Ÿ?ˆķ5ēŒĄ0ēżÖŽ»m¢}꧜œńYĶ•Čś6³®iŗ~ˆŽdh.ķHTįœóógņ¬Ķ;RøxWPņŚxīe:…f©½¤ųŠŪPW·ŚėŒ¬Ae¬ż_ĘWžšKMŅ„uϦå>“Ę=Ō|]-ĶÓ±œ…ĒÆē^S¬źåšwžQģ€22i„s]‘FļZi×ģ÷”ÜÆÜ8éUĶżŅĢ,„²As"’Ŗ “łĘ-ŸWų)āA²·’śG¼`K³Ļć [PÓKĆöĄmĄž!ófŸ#1ęg—°]Ūy³ę‚ €>õhé·Oĝ’ķ!w ąTJ] ŗT†)P¼‹9œō&µ.ģĢīŠ¬/r Ÿ½ī)™%Šk£ÖČčŹÜ¼óė]„×kc¹>Żŗį»ż(-YLJD—®A§xŸV‰­Q‚‡ī+Ó­|1¦éžqžē«„zž=([XÕ«#„]k‰Ŗr `Øb²k2īŲoVp«&pøģ)X\ØģōXʬbH՜)ōĻČų·Q³¶eY„hžA‚žć°ü(ū¦é·¾+ńo†ķfb¶KrPœq’zcž•õ¢čzn•¬YŽź¦FŠŽß2ē©Ļ½zٜgÜķģē±Ō%6ćQk'GÜ·I)‘Ö¾_ų›ąæģ=ZøŅīž[y3ūŲĪ2ÄõĒjź§”•Iėŗv”-ĀĒiάäČŁäW+ źóxX†Kż9.ąŽaøKĄgØāµ”Ž7}ćψZO‹|!i Ā³[ČŅ— ņƒŁOZņĻk6Ś_‰£Ņ.lå¹F‰˜Ų tžµ”¤](I¤ µõĒĀķQ¼Kį9¼ xc¼ÖĘ^ÕĒRxĒøżk3¾+B’ĄļŒž+ż•?h‡æ4y®§Óµ„jg1‰­Ļ ļĘxÆļ›Ań–ƒń[ĄŽų³įŁmn4=vĘ+Äh\:‰ ‚Ą‘ĘyüóéTö7ó=“į’ŠÆt[Ūp& É*¦3Éō׊l¼@d¶ŌwČUdFS÷yČ<~„‰š?šĻų8söKoų3ĮŸµ?ü”3H¾ßšo’ķ©§|ż¤µŁßĒś•“_üxĖ%¶÷ņāӯׄ‰OL¾zz…ÆīŠ[O6)b‘ƒŹ˜ätu#!‡ŌVx„¬š:9O8Õla•¤±”~ęP@8é_üxš.£oż¹g¦Ēv4õ1ź¤fhIĄ?Ēł5ęIjCCóCć·Ćx;]š¾£ ńܼfM8 ]Hłž˜śžG¾5|;Õ¾üBÕ¼!¹{dg’Ł6å2IQšÖŠŌå”zGņŖ“l=¦³t=TqÖŗĪ{w,MnķN‘ą£rŽæJØŽeWwJÖv&–E…‰¶ŚĢ@ÜHéY›Ž)ÄüĒV&ģKl 7W Ķ#»Ä”‚³dąķ ˆÉÜ·e ü={Š·sn/ģå¢xšX•»Ž„RZpŲž§?ą‹?¶jx«ĀZŸĮæx’yüG ÅßžwIwk"”āŲv^µżJųkÅ֍‡|UņŪų“BČփnlŪż[ąuĄĒ<š8ė\µS©.‡²xÆģ¾(³‚ęÄ LL·6²)ĘXo©r!šöƒńį’‹>ų²šˆōé4ĖÅ`ī„CsĄĘćĻćŚøäŗr£üķæą ß²¾±ū%~Ѿ1šķŠ[i±]¼Źæ)¼…‡ī˜ƒźēšų7]‚ĻPÓ­“f9•³¼¾Ä~Ŗ*čĪ“,‹>Ōę“»T™§ ?ʽžśŚĀ)ćhSĶ@Ģ \z޵§*9³*Ķ ßŻŁ‹Ļ²™!įĻj,ZŒšH÷–ņy± sà ♢‹>įų9ńOŚĆop­ouuc–R=E}S„Å-ćAq,‡Ė;Ž[®¶‹0©PˆµÓ;®Å*8™üՏ,œ}=źāģr±·«»Ė³¶;)ĒŹ?•:+ųŽmŁ÷­/ŠEx"I]Ž6Ś×ęā°äŅnńę3*°`@ē­UŹhōł-Vk7eĄėÉĪ“ lĢlA×鈟ģ0ĶhĮÓrŌz~”Ÿö‚ĮĆpž“yńžĪśŲ³&ö9<ư’=«°šµĖyaž7‡£`÷¦YØźtVM<öŃź §•Ī3^]p[k—ZÄ·‚\~é[å@ éłÕD®fokÖę(µ-ßļZñе›K±w9”“ęĒR£+Q×1¬[ىź°®GPk+g“{YeIČĆ©=ōż+9DŅ2čĖq_É~É qĢŻóŒŠźcŅ5+k ›ĖpvÉō„„ö8+wQŽī5†fņ†rć5č:.²óY8Ēė…­2c/<;¦ńȶĖ$9'Æ|S.“ųō­>ŚŌ7Łe.4ļL\¦ÉŌå¶ÓĖ^Ÿ.1ĻCQ鮗»d<$ēŌ›°ĻP±”[iw¤-<©ŌŽ*£[Üź6Āü[hŸŠÖ/q®ē7«YM-¬ŠĒĶ“gŽĘ¼ēLńō6²[ßŪ[AvĮ£ČĄ=æJFć4mVk=JfƒĢXO!s»Öŗā;É'Hī&FÜóׯJŅ2č+ŌÓF¾½Žī‚;˜‚”F[5±®ź«¦éų²¶&5ķ±­2<&ét7“}VŪķn•ĤCgæ=;V­ AåÄŪś±4m¶„6Ÿn’yĒ8ķķ]÷†5ķ6į­akw7'$·© Cź‰}vc¼F(\(Ļ>ÜV’‰¼-ökxģVÄjÜ&޼ž“²5Œ®pśŚĶ¤[¢Ć,s§Ė•ėĻ’®ø-VĢCd’2•$cėL‰6T¶³hü™W,æŻ>žµ—kq5ÉEˆ˜ˆ'vzPA–…üs[Üä#$9JŚ“Š[N²hŅ?5Ć $zVSÜø’ß]^XÄBĀv—¦ī!19ź* ‘„£;išŠ‹Xöᙆrčzäzn™¤Ė¬jEbb@RĢ-éž}h.śhPÓ~ĆØŚķ0ŸŸ­^Öü'§źA²‚I’ä8u“?ųī(!ČųĮŚź—¼s©UÉ\ńĒ|Vž”§ÅöiŒQ‰#¹³× Dįõ[C¬ZĒøć`f¹Ļ j1,wQ@² ` ±ĒćI¢Ņ±Ś@ŚŠŚ·’EĒ<’*ŚX kIÆf-£€#­bŠĢ ‹˜Ģ >äpzŅŁé"y^ā)RĶ“ĄĄ¤C£Cdņ¬ŃŗJåzĖŠä¼O.Æ w‘—ņwXõÅō<Ź+ū؈Ī“ržĘ»ķ®µK{5·‘RWĘXóžy i³½“#6—W«­q*ĒNżļO’]s:>¬éž)ń?…n’Õ^Ęq1ō*{ēš4 ³ń=Ż‹ģĶuķeĒ&µ<)hѱ/Ł€GĖĄõĖ ”>Ķ0Źėg€Ms—–QŁźÓĘY‘s±€äÆ­Ą[ÅŅlÆ­”·sufŲ;ĄįOpkŃē³Ņ|YįĒšÓYB,°Xc»zž”žyoįk]įm”Œd6Ӂé[ךxˆ0oĄĻ@Z5嶟Ļ%ŹE&B…õĶgxĪ85[mņIGžŒrž§×õ  éļ4ėKšōµ“ŖŪÜńżkÖt¶*ŅŲ‰Ÿ-»'µa%³\²‹Ę:š§=«Š|=l„ŅŻSŒXą/č4„LÆ xvé|Dńć[c#°żüž3ōÆtŌ4Ū-0؟1žŌŹ\.xU ŠåŚčjŚ“4qžķxü=«#Y²øšxļ4©>Āń8ftĄļšä5VćZ¹6ņ\Iu“ä’s»’śFŌ"_˜õō©”nZ—sīĄŹåČ+ŽõŸ ­ĘżˆŠēÆ^µŸ+čK;¹ļ`ŅōČÄšE!#oBNćĒj³įū RŅ×QæP]Ų‘ڹć5¬vŃęį®CĀ|ž@ćµi^ųŠ]&Ök&S.󃓞išF%Ė]-Ģń¦Č²w¼nx£ÄM)>ŹŹbŽ ÓFšZž&±AĄV3ę»ī=q’k°ŸÅM6zr[ˆfŚX>ö1Ö“U;ššŚ~œšÖö”AŒ Ēŗ×5ājž±Ó/o€k;ķė £€Ä`žU•Å-Ž$Ųy\9\‡ö®Āxķ G-»‘Œpx Ō™.ĒA§o,Q mŹ3ŸZ©¤ź6öŗĮ mūŁz•³Ņ®;• ĪĒÅ×ßa² –+÷@ Пją¬üŗŹKy—”įŪpĻ4›ŌŌöŃZ%°„£łr?„W­ųRßE½’8^sę öĻz–kčy5ž”u¦jļkpŖ®§\Œ{é?“ī/†aŸŃYŃ·£<œž(,ö«=:ßS¼;F× [p0+ĪOžÕĀ“šéŠ34²²™KP¹ćsĶļõYÆ"YŽ#ån*¤ŒŠĶŽq<ɞ1śÕĘżG(Üķ£Ōį’ŲYŹ*ÆĖõ¬®ćšxž6N6w"™>Ģ•ZēQ»2–żŅqOÕd:to%½¹Ęvžā·Š³0“æŻY_4ŠŠń°#oLW³čW?n³ó cŒ{TŹ%(ŲÕ·“NŅ…ÅÅŹ,Ņķ#ęńé\µę”o©Ę#“EÜzŲ~‹čr&Ōʑ ½„ “ĶaūÜōŪō§ųW\gµ·yŽrsšCP6µĻ}ŖÜ¢ė1iŠ£1†rzĆw%utX|æ¼ō¢ę¾Å˜;äMˆÄ’x<ÖüVĮvJŁ :ōØu¬h³Ģ~$üIҼ »Ė¦kz“²8‰VŹåXōÉĘ5_Ą“oI5‰ƒQѵAó5½źģ\zt®jµŅÜśĢŸ…1øÄÖ›“[Ł_wSKāV§£E”$K!žéÉ*ltĄÆ:šģók¦9žāX#„.Ų³ĮĻjó+×OCūĮī«—åѝeĖR¦­5ŖW²üžgėģMš¶-GÖ®óķ|WŖn#'7$ąÖŗ.u½&ÖŁÖ(¦l÷HōĻÆ5É{ģ~ÅN„Ŗ8žÕā’Oć?‡xrßhn2Bp¾ų5łŻšļÅ:§Ā]PŅõˆšūĆ#”9¶Ęy~­![ ?zCžÕGŽeÉø‹šįäŗļ‡ndń ‰uk‰ĢvI;IĪč8…jj^ŸDæ¹°šŻm £ļ škÄöܕŚ7tYļ4{«ĖŌ^C*Ź2¹ąōõÆŅOų('ģżšļö¦ż”¾üZšõ–¢~Õ:m³Ķ§‹8ŸXDF2[:Æ%[iażŅN1øÕBŽéŸ‘ųƒ*ŠÄąqT%nJ¶~q’ižóćšĆ_MmīÆ/#’ĻS†ckyo(ŚöŅ”ĆFĄņ9ą×Ń>Yž@b;Uŗf¹źR±śU 5u±ØĆ8W •ćœW‹jŚ}ķåźGtŽ|Q9hwTžøō®cŌQŠō/ųiīž 8ąiēa•@2IÅ]ųć)­ž>éžń5ÕĖé7±%Õ¼e ÜiPÜiŸiŅ­ä„Å#ČŁüźāś•kū­ž™ćĻÜ’kź t$ņŌķ=Ō³æĀĻ…Ž3ż¢<į߉ µń¦¹Æ,ŗFŸöˆÄŃ)1³1e~UēėSŹĪsÓĄV«gIßµ“w?)Æ>\ü ųõūI|ū3iś_‡|cØŁéöėĀĆhef‰@=±ÓŪĶCQŗ¹•ķm¶¶x'žuĮZ÷ŠśŽĢžæ—PĘ?łyĖ’ŠdšZ]’Č”ŸÉ­e2œ³»æÜsŠäžĒ×ĘāoģķJ{8Wķ®»ĪīƒßōÆ8šuāIöpŠ"3pŹOCYR6GµĖ‹N¹•l”sĄÆń葦$©PxĶwį[¹ńüG™C ‡i»$ńō²j:E핸ßr!%?xśWgū"Żėń>”t[ŌuDq“‡iÜ>¦½ČÉ£üßĪS­Zrovw?“V·£ėPųbĪŻ`Y­2¤$ƒtŽF3Ņ»/Ło^Ō“żĖOö+Xš_.D0ƒ#ĘFG8éĶsV‘ėš.U3l4b®łÓū’ ćŖÅ$ö‰jB’¤‚{×Ģ?“m#\ŸG¹“™ćŸŹņgņßdłwÆ)Ģ’@©ŅŁ”į(žĻ„Ų•lĘ# G|×nÖrźŃ\ĆnĀ)„LS#øž”FWŠŚq±?†Zć[Ӯ쓨åͲøņĘLmœdś טü`ų]ńįꩦč>+·±¹ŗÕ¬“,$¶rÉ“‘ņ¹ģFEvŃ¢÷?$ćŒā6śŗzœ’…4t‡Ņcń£ŚG.Lqžė9ĪŠ3^ćļˆś?ĆÆ¦©ØZ-Ģg1ĮlŸ~cŠ`Ł­&¬Ēk4åd|-āk#¾ø×üE|–źß$6*r§n{ž+Wį”:ö«ytņDŗu¼l)~_5ˆćēҼŹģõrĢ/4–‡Õ~±†ėĆŚ„ŖC§Įml¦GŽ’Ŗ±4] xŖź;AŌģ-¦–c<’|›čOé^\™śŽ/³²Z ńg…|Yą+ōO%Õƒ?–—6Æ˜Ļ¹äā¼›ÅҰęķČ\$k“ޘĒ_jś ¶?ńĘJ<7^?Ģāæņd’CčŸų)ßķšīĻĄŠžĶ_ õū]GQ½ŗ[ŻvńHhįMĮ„{Dz«Ēl}kņĮ—Ŗņ‹˜¢PX±äĘkčiŌ?•¢u7ig$„ˆ£ §–Ē5ē0ńDsĻŸŠ, RPc8ī}ėTīĢä¬y¶—§Åq;-ķÜJY°Nq»'_U|ų«ų£[Tń*^Śx£Q ŠVKŒvg·½tÓG=F~ hڇįėm3ĀZDZ˜‰°"™½r„vŠ[żžätC·ØĻŽ®š{mf2iᜦĮ—č?Ł®÷BŽŅÖŲ4–āIpIjŠó¤ō Ć·’"T9^ė—±)5ķÕŪ°|®Š¬{ƒŌTI˜–ś„ŠĪÖńØUļÅ6āŅīk“s"4ćsZŰ&½Ģ>LjY³Č#­$"Öt»‘cg 9céSĶŠÉÄęoµ{6X­ß{)…TÓ/­&¹™.ože;ŽśTM_1­‚²‚!^ŻĶyĒ‹›Ķ”](l9ǰ ‰Hņ}WĆćPF›Ŗ8ņ’ˆūÖ—eØÜŚź–r˜bp€²õ8pö¦%>ę,¶6Iķo¤0L#- r=}æśÕĶč×Ó^\jåĀ,™ūą€xüé ˱ŚĒwfšT֗6NÓ»ó÷9ō¬É|«Ü%µ…“’n\ «šbP1>!ľ Ņō­ÉĪ©÷ī~Šwć§½exW“ńU«Az’iש!Cš~œŌµr½™|x‡Ć¢śēAµÕŽćUµr²©O”Ÿ÷æćō{É,üC¬‰““Ō­§·h—œ³zŹQ±&ՍŒĖ2\JF5Æ$wö÷ī gŪ‘·=}©k4O6Ų.¬å†ä7?Jó_Ī‚Ō"5Ć€‚ł4֌ Æ]M6ŗ†ų1NŒ;gÖŗŸˆ~҉{«I ““__½.TZ‘Ń_|8ųiŸØéŚ”š];ŖDņĻ„ēØĻO„yŚü=šķ«“–%ÕŅļA#7QŪ”FĶsMįĶ]]4öæBw ē§Zō}#Ćŗ„–ö±½\ó}ģż)ObdģzM—„®5„ŽHl’~±ä ®zņÉ5¹,5‰ćŗ„G\ƒÓ‰››9Ū½Zi5Q Ä÷6ŁPy_jė&ūmé†émä0£ ķšžDMKĻĻ‹sc$īš ;BŻöÅyę‰ārūRHtż6V„a˜Ī;ńUģü‹ö}ĻYŅ’“.&ŽHō’ܾCaq‚;×E©j~"]m&-/J[”! #|ģÜ’JcöhŅš/ˆuØ,ę‹SK{+•]³Ļ;}9é\Ļ|Kö‹Ū ˜R #°ļ“@œ ŗV”ŹĶĢŹźųłĒéV5 Ķ M/Z›UpĖ 'äĄĖöü«H7c.Ws…¼ųµįivÖ÷Ń&£gtŖ`RJ…qķŽN+OCÓtŸY\kvVŹ–ņ’_ Œćm•ŹĪęĒKÓt.ŻmäŒÄrk֙¬Ś.1}LÅu¢ė­å݀ЂøėNūO¹Iv‡‘!‡ 3H|Øõhtž‡łÖƒGé$Ńü`ę=9āDĪU[‚Ć5ēßģ&Š“ū›ėøxGīŻē›zc½\nZm#ēM=Æå¾ŽęYŠÄHŚ “é_dč×Z]†›cØĀ`ŗ”ØŚ@x u?SWt53ĘuŪ—#q)uRĒ ē’×]7‡Vkۘ,¤š[h•qóƒY\ī-µ#Ć÷*Ā{ŁłM p:ššk^ ÕüD×m;v_, ćĖøöéHÕ6ˆōĶ:kƒ0Ź7Ž=ÅurųNX¦@D’oŹÄŹ]ĢÆ xbѵˆķõ½Ænņī!” (ģ+Ų®Ÿ…eĪ‘tõi±vš¶Ķ2  šÅużŪFyōükkĀZ÷‹5X%—ÄŁŌ‘dņ—x£QŲå^•$r6{ž|c#³ČY~ą ÷¾¼×1ńFkkæ…>)4Iy^t]|ÉZm’Z9éYŲŁ+>‰$Ś‹č¾9šÅŻÕ„•›¶«ŒÄąœLś3ćׇõ=Oį,š±µŌ„Ģe'Lec#ęR?Ƴq±|ĒåéŽM>󬆯ZŌ©U“œę¹»Ł"wxÄ,1Įćƒ[GqĶ£æųcāY¼-ā;U$ž/8o*ĮLYć5ś—įūĖ+ė8. ‘g·p •>ŻėncMŽfŁ00<{×ńWĄĖćŸ°i¤7°āETČbO^•ĒQźtŅ•Ī]oK]7Q’ŪpFF)€rWjĒ…¼GqįæéZÕ©æūB”bņ[µfułT|LÓćń­ŸŠt»{_&ķKĮ‚ •~ńśšž…ą…_µĻ>k±÷Ä9 >.ŠRKķčɵ'œ‰“ÕKĘµ w{¾Ÿh¶Õ!KĶšM  :ž kīoxŲjśZŁ_˜ē™.[øĒƒ39/ˆ’ ü%ń»Ą>:ų1ćk?¶ų[^³’Ł”ŸiĆ)ģx>ĀæĶ÷öÅżļfƍ¾?ų«Įv³hחŪoF­ŁĻ–ĮŗTēZQ·5»™ÉŸźc@ÖŹ|„Č-ž§8Ås‘Īfd-ØOqĶt“} 3‚°¬q®­=ai20™ūS2ę˜pT±V‘Ūޚ`dRĶ+ÉߚŚ*Å&DŠš€oÜąriŃĻ5›Ø’;`c³7ō¦m š†­©čzž‘āĻ\>•ā­*ź;ūIŠ|Ė"„£üöƳż³dχ_å–8¼iié> “ó43GņļaŌd€Üöq隊‰ņŁQ–‡ßŗ…™øI#!ŅĒÄÆi·:ÄaAu˜õ‘Ÿ^Aż*c"\OĮc‚ī¦ˆ…VÉ?.0{‚=k#Č[vŒ'Sļ]Øę©­"ģŅ‹÷F~÷µDÄģó]ņ9„!Zv0ąŽā«:©±o˜pi™\³Ö驇{‘“ŒT^lšĘAJć© #!-ēI\,`€GĶZŃKR(%™ēšŚl÷æŁ×ćFæšā߇~*hSʶ«u„õ³GÅÅ«6:śęæŠ#ö^ųŻiń/ῇüRm­ÆļVŅmFd`ÉwląÉ#©\ķöćұœVĒlt>õšœémåh®BžPšŲ4X 5&¢d:¤v±ÅŗDąī~é éż*įØlŃųĖ’ĶżŽÓöƒżœ-¾µ^%ø„ĘŠ# ‚=©™EµæŚŲ¬¹‰HČĶušU”V÷ZtЇu ó@£ęuz…Ōq_½ŠU…Kn  ķ]’‰5]GL/ ņ]²į~vĘL}+9DŚ ęäŌÖH[MxQļ[ ÕZa§c ¼¶ńb'9*2I÷üØLrEģՒŽuģ¼. r–×b‡ŽPhČŻZAØĮØĻØŪ<«nĒAķ]­†¬·–”®$*Ą`äd“Q4"†«yš\’@A85Ąč—…ļƒ4[įVČw¬ģTecŪ”ŽŅ[U•āDd ćõĶc|BÖāÕ“Xķ&²ƒx—@8ü)&r5IWU·†į'ģ%x$Ž=«×õ Aķ¬nę1¶QIÉ OČkĢš«jÆ©Ķ$7…‘Nsķ],^%»ŗ½‘`ø,Ū>p£ļ}k9—2»2’ē`/ł×ih†Ō<‘”+Ćg½Jv4¹“ØĻ Ŗ  ‘¾ÕZŹ_µāŚē;Y{R'™µ] ę7Ū9'ęĄ^ÕÉė7זZ]żŒķ5ĖüØ7cn}: Gc=ż„­ŠŁŪ„¶Ų•\ē?69>ßJǹūFŅ„¹ÜŒHąõĶÅįm­qu>ʉ‰éÕF*ö›±¶‚·ČcCõ$PTQčöVS¼QŽN˽~d.pA”Øjś]¶¢ž Y#}]•>Ф|²N? ög†ėÖ©«j—:¦Ń É!}‹Š{W¬ųoM€iŗ`ķ!I'“ųPKŽĮ¬…¶eDʐ tÆ<ńåŌSŚXG«, ^£ń Ŗh©§¦` bfn+Š4 Ū#•G?Z \ææ[čm$“Ž™«×Ņ_D†³dˆÆśŠ2>”ĄŪ¬ {woØŹLCęB1ĮķÅZÖu»"Żłó(ŹČ9ڵ°xMµ]kJ’ÖļJVŽO B6x8­ŁLšh—Rˆ8 l,@ć 4‘å:Ušßź76¢R§p9ĻŻĻ„w×)o¤XˆPĻ=ė°A“ry é„zn®-ō[»Oµ0µ•”?ĻŪ"³bńz…ģ÷ņĻ,°Ū›ęćnh*Q±CFŌ¦Õ5[™mn”žQü#ŚŁŚźeŻĆ½£'·½fƃ”“¼y mŽcp7ēo>«Ø‹ĆVQ–k†)—ļu4®§ā/&žÄn ƒp*sÅsńY$Z$d}sL§äČx,Ąäd×F˜­kk14,Ļę)ėģE#.VE‹tSltśQfÆĆ4-¶D ēü(¹P;2ś ęō?žÕś5jŻjńĄįā’4!Ŷ9Ļkz®}ŖI%ēŪ£i™ĒÉÄ`’ õ®®oŲxŽõ£¹ņüūp•O4ΈǔÅOįȵä›qTŽHŹäĘ»U²²Ņ4ؾŹÉ=ĀgœsA“ccsĄśĢĻp.,» «s€i5ĖŪM:9UvĶ+¹.Iä @ćsĶķ¼Uey|ÖP‡B§'ršyģkŅä¹óbņóG€QQ2=™åÓĮØ\j7v·x7-ÜżåĒ\v¬ Ē[kybžd`z½éS…™6™åŪ ‚XŒSÜłŅ$¬Š©JwϽTž†‰\Śšœ-źÜj Ćk µŚė3ŪL—±@Uķ6€Ł8¬MuGĒgĶģPĘŃż•[ Ŗ3Ÿ”Æ]ŅąŗŅ’.9]c }Ś !×ÖyŅK§9Ś„‘Šń¬fi—P‰ŸŹß¹Yʂć–Æęžöģ<”UpNI÷©"Ņe#qĄē ÖʊZ¢Ä®²|½»OŅ굎A01yŃ ŽqZrŻh;‰šėÄqųŽźēOÕnl“õEyƒ7Ė€=~‚Æ?¼6x#‘®™å¦89ÅfZ¦q~%ÓįÓŁļŠ4’ić­`^xŃbŅžĻk•¼,9Ļ w¬ÜUõ-SźyõåÕÄæ¾.ļøī,MDž"»-ŁÜÆD'šŃ*=fŅßķ–±ł€— ēÖ¼ĻĘšŽ„‘q$ĀÖDįKt&‚ćO±ó–©ń÷Å÷³[xnņk˜ōל‹seIĻæśōß|GšĀÓ®Æ/"Տ>_LØėō ėŽ›Įå½±›BšīéķU¤X‰Ć <óų ōųŗß^²[²ZŻē˜_ļ%–īVśFV1ĘŽq8ö5=„Ź¾ė¢»ŽƒžTģtW¶ėg¤‹ĘœAl+—Ÿ¦jŝ宧¤^B®³°åNrjŌĮR{œ¢éī& ²Ž„ÕĖé~…ķōv±Ź ˜ÜüĻŽ~Q×°­9‘ŃOŽēßžŌ_5łtķ*öĻ]šīĘ*÷rĘĀ9yźGõģ6ZzĄ·z=ķ¾”g,"H¦Į‘Šš}Ŗ%c©5±Ź\}¦öW{ēiOlжwGNŌ£Ņ'KK±o,ŖĪÜ)U'śt¬y»S”gc•½ųQšĒ5oEńśóā iĪe“7 — °?„}CńĻÅ’³&£šwö.?4Ķ2ĖǶžū'ŽÕÓl«l‹ŗV 5d‰$䜐A®iWŠNģż{„üγI®Z.œ/g)+[~ŽĶķm:ī|κߟ3©8=jüŽ&ŸŹkxcc=kĢ«Ž[#÷¬ƒčdž§YTĘÖsŠč—-ż]ŁČŻź$bą¤pI( z¢±ļ4Ż7H‰¼Azb·żÓq/Ė…ėŒõķ^e\L™ż ‚į,><”`’ģ‘óūxõ!ų»Å’>-x+\ŅŽ$ŸCKf‚=䣂ŖōebŌÖĪV<|ETiM_ņ>’‚‡i~ųeūd[ų£ĀÖɤųWā‰m®•ŽßʇūD²ž8ÜŹĻrX“×5Ļxz÷ķvɉ•݆PÖ¹źŌDšģe §-ā­÷h7Äw·ZvŸ5Āŗ^ u#5Ći±ĻŖĢŅČ  Ēøī}„ctwŚģś£myĶ4.®­žøÆ¤žk¹²ÓŽ"ެN9źkĪÆkÜž‚įl¶8/†œcé’ü‹īī®"?ČU˜‚$ł® Ÿc ˆ§ó.’x¢G–6Œ”g¾zӖ-|ŚF D’“xéŠĘ S*ļCÕuĶyt½ā,øŗrb+ƒ‘ھR×õ–K-AÄcä<6psĪxÆK ŗŸĪ:ēŽŽJoY]æE·ćł?ė~-’;[Ėäq¾lsķ_Pü(Ņž%|?żž$“ĆzJź"æõyüH"nøĻ¶kŌGńä§£“ī|ÓäMń/T³²³†śOLźĒĖf ĆFv޵ś;ąOŁxKĆ2C$÷ꊲÜL˜Ų‚sĻ9ę¹kģ@ųĆqƊža%„5ež)o÷-×÷‘Ż5ÅŹ¢2 U< Šš?‹?†ŸāoųŠĆQ¾±µø·Mn?ÕŹü‚@śƒ^d£©żV©¤v>ßOv \ ßZéļ58ZÄ­Œ‰%Ų#īśw­iĘǟ‹Æ-YŠ~Č’|šĆā’Ž->&[ĢöZ•žĖBŃnŽf;æP+æų—®]|JÖ³x×&(KǧC É“·ČÄkķÅztä’?˜ų–'ŒYlxŸˆ5/čŚW®Ém-Ż»ī‚Ü`É#ŽÕņ·Œµ)5gmbś0×NH† ‹t=@?™É3ĀĀį„9¤śž¦|=_&ŗ†å%”į³^”Įų¢xg±ŌõY‘~tßņœ{wÆ2±ś¾I’ņĮ;Əō-KFŠ Ō. ˆŒLńŹT…ļŗ¾ż~h’¾ėžš’‰ķmüu9Ņą¤“©ĻF¦Ÿć^t©³ļšųU\óĻ|ųÓšŗ ›OčŚ£éŠs-ĒœŅŌ†Éśę¾j!¢“WI£f7 §ŌpśbŠtŻĶqŲhŁrõ:Œ’ jŅ7ö…ÅÄ xä“$9Q“žAė_Eƒź&ż#ó)R£C/V“›“曆å«ū#Ōæ³ óIf· ,Ža•†ćæŌ“]žoh’ÄDb_›#øéž5īSGńõv’7Y¢–(鰌zטų“ĀWŅ ŗ‚=ұ_}ÜūWE=Ļ"¤±’fĻŁ*’FžĻų•ńmõ4¬ÖZ{ĀqÉĪé3Óq_£Miö‚-ēHÖŅ!ˆQ(Œ{`}+®1±ēUŖP)äøH²Ŗ§Ö¬½ņ>ꑊAō5gŸR}JöŚ…¬r–·^c]2k±>Ÿsm5³Œ Õ;£’HēTEt°Å#°ĻŪ»ģĄ|’ī€š{šČēfæ‡${ö7²HĀ^µép\Ŗ[ČÓ²Įwr:šĪQ2ēgj~!….¬ncYUĪįžµ›qyż©*ŹŃ“2š0N ¦”ÜÖå!„ĻĢžhņ3“uŠ[iCM…[‘éŲՑ)t5®ģ]-ĢŽø Bóޱ5‹+;ŪO.4†'U±ŠŸZG4ž§‚ė’jM㽩G‰9äYŃų–;™ÉĀŒķ{š ƒĒZnƒÆ_éöV"źŹ`J«³rIĆÓłU•šN™į­8ĆoØG<±…Vv92zœŠ5Ųå^ö‘KŖÉkŃ4K¦Ś]ŻŁ0‚w„ +Ęß„¹YŸ-ų–ÓWÕõĖÆ·\Ép7īf1õSŪ9ķ^…įķ?MŅ>Ė­“ŹČ˜%†I>¹ |čä.<-åj·z•æ™,¬dØÉ¬M/Y{­JhąƒČž966G_’]KW"Nē„ŚčēQš1‚[õojģćģéie`ŠĪÉ óF3ĒÆÖšŠ’’ŠR[UxQ.6£‚qœĒ?B+Ź5»!eXļ š )&Ģ…„æ„Gt†¼Ž=ļŅŚł!²”Ė3Œü«Ņ“ vóI0jZ}ĖŁČē*Ć;†N ϱ¢)š¹XōżsMÓ¼/ąD»JŽŹV˜C ńŒ>£Ś¼Ż¼}aj²\iö:ާä‘ó“·cZXžs‚āŠt­SM›Äo§,®ŪĄ†0T!ézWUsw ŪkĀśŹOµIp¢L†ģG|qžh±N§ā(o/„“·µ’9¢ĪAŚ~‡½xN½«Üßų•-..…Ŗ6FŃĘćŪ>Żh2jĒ”éšV¢čćLYį¹o3Ģ-zäć>œž•³­2ÜAöhlU9lĆæó©r |¼®«0oŻžxė[‘xūĆ:|ͦßF)(Æ#õ`OšZ\ęG‘ü@ńÓŻ\_Xéŗ4·‘pA,8>ƾŃ£ń¦—®ßjP<Ļr·¤ųaōĘ*“-FĒe¦h:ļµ”×¼^vń;{2>VßozčeŅQµ 4ėE{EŪ“ķ<©”±ņžƒ¤x^Ī ā[¦{­M1å¹ąĘ­xv# _ź-u|o­ē č¹žu“%¢ßŒµ õ CI²760¤C÷čø-œńšń ėՆč,ņ¹\°ŽGó©2’±Łų#ĀŠźOyyuwm§Ē&U9•ū(®’md[[µ“Ć` gŚ©įn“]GW½[ۘān²īČĒ\c±®öĒĆßš¤/*ż˜ 1>޵N}‡ĢĻgšżÅœV—1“aå‘~B?‡¾kWŌģ W“’lĆ $zb³)O¹.”åXŽBD?vF[ƒĶxŒ7–ŗUÄi«ŽG¹Ūa?SŪ4ŹęģhźÓ’g[›˜GŒŁ-Įy޵ķzźĪŚÓI“-+¾Z~ŹcĻJi½ƒ›[üAį[Ļéŗ<V–ö7Qu ż÷Ę2sėZŽš½ī“=Ķ®«©Ž[²īʉ0ƒ˜ŖŠøŌ‘Čkö„>£y¦čśę Ó4€gŹśW«hwš¾•mluˆęžA-# ØŖpŃˆ¼A5ūi’d€ -‡^½ŖŹĮ4qĒxÆå0®?ZÉ«hbĆC±žŁ¹7WšGpģYYŪ 1ķY#ҵldŽŠ}”<Ą¤…éō¢ā°A‰4Øbū9K”åä=~•nŚņKm)& ķœöüió3HĖøŪ­QͳD…˜”#éōÆiu™oćYķ VpĆę ąøõ«‰\ČśOMkŻWL™%_ø™Ėn÷ÆÖ|!Ö余Ś4l,3“z±7sµšo‹ōßj6zL³[ZC$ź%˜6ž+č+ˆ.õ On©ŻŠ…ĢĻāŪé® Ć°yg'æµwŗ=ę‡Ķķ¦™n–±‹!Ü}EKK©G+ńĀvڬ6:­ˆH?ŻĢÄä°ēÓņÆ“ĀĆTp7ĶĒņäpk9[”gG«iÖV—¶ ŠÅžPCu擶Wuąū iƒNŪ¤”œ*揭IŸ9zņ·ń$ 9G2Ć{ƒų×1|føķį„[nr6ĘqéS)ō3¹.§ŻiÓĀĄł Ü4 r¦½rÓYÓ£·xęX]2+e±×ž•Œ›6ŒYāž(mP¶¾µŽeūS~ģģžź+€so¤ŚĒiŻ•@sRÆŌ×’Ū›6z­Ä9mĘŅýjĻ­ź— u’K"›wē£{Õ*%šōų£Ä¦ĒPø—ĢH×å…źkѾ!|'ŃŢͤ@÷¶"%,Ī0Y»‘ųÖю…(čx£«ź:LŠZ[’”F‘ņńķ]Ƅüa~ ø§”bøÅ Ö!Į³©HńZĶܤQ†!²yōõƟ¼MŖźī'XGŚ­¢$ĘĮ”SDghµĖ9į“ŽÖ4Š!†-Ī? Åń/‰µ’ßϧźYK"ŗæ2śóҶ5±nķ|%¤iŚōZˆ…¤!ldŠą|wńGSÕ5;Ķ6õ#{eBą)>µR…‰k¹gĮ÷z]ÉWT‚yd9_zėõ-BćķVŃŁGå®ķ®3ӊŹKBcøŃõ ®žG†]›2¬G>õ7Ÿ}bæ½}·qÉķõ¬n} ­oķ"Ģ??;܏ęjÅփÜīC“œ2Ž RęF†TÖO¤fx›|m€S<ēŚ¬½é1<›mćóųÓ¹Z[)»x'ž'“kep3ƒ]^§Ŗź#{…(蔞…{RLÉ£"š<mvĢ}”µR==›C5ƞOLŽE6ÄlXhmlü¶RĖČ#„vv’Ņ沆š/Ż :Ņęē Ė«›]]^’ČĢĮ!'Ew«āHšĀ8ŃZTƒ»=)…-&ūķŃČgøĻ=Hż+Ä~2Öt›JŃncO“(Üø UF7'·”ź>1½µŽ ĶnšY;nĘĮĄōō®įaŅŚŃ­f¼ß3%Éź=1[Ę\ƒ¼KįĶ"óD „Ÿ²jœķ\exĘHėŽ¼n’SŌ¼?Ó¬$&š~rOįRŠć¼Gā;CĆ¶ė…Žķ†Įå†=kį½ÓRążž4d@ʲæSÜrqX“mčzƈ~ Y¶5µ½·Ś§BŽ1“.?»„y¾™}$NŽŹŖøłöŅf…½SL{č|Č2gęRz ā/<)pÆ/–­+jiĻsCž=ZŚĖūQ–0¾aŒØnWޤUZ^[j“ł®l īź~•¹ÆZjGķ)WƒĖŚwGұ4ū=Sŗv™nlŪwXĪ0*”éüGsŗLw³\¬i„ÜNTzs^o}Ŗ¹Ē0oœ`aŗŠĮÄģĆÅ#īėÆųĘų^i÷wpérŖƒ$DWčkéæŁĆJŌtė J]wUkė¹Ż‰åł vĻ?…}i¤xķč}q²Ö’Ǭh˜ķ8śóOų•fn|'Ŗ¾‰-¼.°‰J?Ž£'ÆZmhf~fÅs}g®> Ęg,J¼ 2 ń]Ķ÷‹ek!²3pŠūÖR‘¼cŲ儼ԵĺkV˜įCüæ(ćµaC=Żö³Ģ.Ėb3(<×oēI+šhK‚śśĒK{+(+lr½0ć5éš6»ćoų3[šŻ¼ęćO‚2c3¹˜uĒnćj^ĢĀRč|wāŻ'RŅd’ÖśŅćOxĒ™åJ„>ŽüWČ·13±˜±Ēz„+ÜĄ’F‚kž`‰±ó£cī+ōgö|ńDŗī‰ ‹I¢¤%›%Ąś}+bœØķš5*ŹĻ^{V²N‘ĮēM¶h•1©å—ø5ĖV6f‘©ŠüśųėįĖmÅwwqE6WL;IŚX“}ś¼]ŚąBˆ¤÷Ļ@+®¹õ7Ā=N/ų{ļ’ 5"k‹)#/nv˵Xų/ńKş³§Ē†’¼1yō«…šł…Uāę A錩tDžś~üCšĒƟ†ž/ųJsu¤köݳ«nÉ“eIł#ź {oƒ¼O.›Ø"Hį@>õŒ·f}8ņL~Ēwd›åpŹ>éėšžx’ąąOŲōxĆĮ>ż®üŁźzr­‡‰"[}āxyŲļŽ€A'±<ÖŌŹQ?ŠwH·²–r&ūDŸ:2Ź'…üs\UĀ8+*ī~ī5ŠsT‰ÄYZ@ŃėOMŖƒ:ąŒŠrÉv~č2Y³Ž)ŠĒ#L±ČA_„R•…ĒĻ8‰Ż2£f£ˆĘ."‘£Yā%IėZE4Ķ}5¢ū^I(Ŗū†jż—’‚~ŲvŸ³Gķq'Ć/j×? ¼{;÷ӈā†čDųé–,Ėž£5T£Ķ.W×óčvCEcūīÓŽ#;ż”ćĘÉ1ı‘•oÄ\^æ§!ū\aCC:ä}ŚóŖ"ŌnŒ¾+ü5±ŸĄž!ń·dxŸFĖÉl «fćå^äĘæ3¼yą« sĄ¾'š–© ×°2µĪ”Äy‹¹¾ņī:vā°•ä«ö‘ųI?ĀoŠ•šõ­µ+‰§X„P©nG8OšÆž%xX<`nlņ{ ķ„®ŽZ¦v8AŽ˜ĒėOŪęĒ–ÓŽWƒ¢\G @6/ß³ä9 )SėTcbxćXē-¹¤ ē >Õj_³4 Ņ—É Ę‚TJqŖĀū£M¹<‘ޤVFņŲī;PuSLՍbøŒŪM#¼,yćčkśE’‚žŁW‹š'āf« Åʖƽ¼lK\ŲŹp ƒŻx90*dŽŲ>‡õq¦ź:‡Ėjf׎oµE$qŗµqžŻF8õśWŠŗDvŗœjŗT‚ļD¼nm˜ą‘’3\5"oÖ ÄÖZ߇°ŃōĖ}F[”3Źæ"  ļ\Õed3É|ux-5:9žÓ ķĪ+Ł?gļˆ h×>¹V‰üļ2Ė"“ż3Z`Õ㔜”sīˆļškM°ķI6ńžę² :ĒīąB’1s¼rĻ„wĒcΜNßĆrŗxÆ! ŖJē»{ŠźõMF°·’XćgtSø7F¦‰ÅŻŻĻ5Ŗ]Ūۘ¢|ąŽĘ²4ė©Č1ąüĒ” ŠßŌu[A§Ė4br@9?J½¢ųvÖhÖīY±äƒV¢EÖ募é‚yf0+ĪļzēÆ,|…)ɓÓ¢DJĘ–—d‹ö„lH öü+#O»{;©ę·øgcĘÜō¦EŽąė¹“‰ūaµĀ&µökƒ)[€ū¹ĄĪ9 ØŸD蚕Ģ6©äIęoPNį׎•Åų—[‘äkwŚó#g r3Ś„TšŁśCę¬l]p͐ņ}«[¶ó_Ź‚J£9Ępkh=+išõŬ3ŚÉ(+±š¶«’ŚF¦Ėd>:œV±°XŅ‹B‡Qœ±ÉŻXv©|Eą9ģc²ŗP ‘ŗ0<Ō±¤Ž^;»Ÿ ė6Ӌ¹„‰pÅXd1’ ÷ķõ‹DŸ–NXŽp+9¾…8”¼OckvÖņ4:‹6ŗ®=kʖėVÓķ¦·óXłƒ®~õfJF¦‹w-ĶįMBLøŒg'čϊ4č0C„N—×RĘ|ȘqÉļłRf±§©•į[Ų/ķ Š<6±`–?Ćšāµ›½2óT{kvßņՇBjyƒŁµś„“øAdēž*ž™0C4ĘϜä÷dŹ&ļ‰5k9‹COŒ€8ÅxtęiŻä™@4ÓCbÖI¢ĖfR£Ņŗ}6ķ&]wŒąö"“ę&ĘõŽ„öh­ģ^]²üė²š•Ὁā7:33ōŖ“ā}BĪ)’$žA>āYp=*–Ÿć(ĘŪH 0“Ś“v=GH‚Ć[–»Xö\‘å•’čS@]ÜĄÆötŲŅ}'łT;t.:žCyw©mĶr¤ö\īéĶwĒĆZ<ŚmŻį„¬åSŠ’œŌó2łQČ4PiņoT—åełĘz×"¶ņžhČDĻ PäbՋöńĪ֏hńĀ°Ź ‚Ƨ½s¶¶±iבBĘ2›½zż)õ7ĖžEB6ÅĒć\~¹%ʱāұ»ģ„F6ōtē’ÆUŒķ4K+kfą“Ū½ėRų§Qw¶}*їtńķnyŃ$i t<>;_ųG®¤“»Ve #Ī:œ×ŖųsĆz\vZŠ3-ģ¤dĆqXČ聗«Ćqbmƅ;ŪƒĻłāŖG¬j!{H§ĶYŃBMcĶaŁźzét»Čm•]°Œ¼ä“ Ąģ“ŻrŪZk©^f© ć;½r{Wā}4ÉØĶ5œ Óó"ŠUŒ­rŹ8tėHąŗYgŪ™W!³÷k&ŅV“Œ*ÆļĪÖé@½ž”Ös¬"³ńŒšæJęe•ķe“¢vƒH2žµā;ū†ŽŚŽY–%@ō"²“Ū‰õ ŽŅPL®>bŻ…‡|žŠā¢Y9y;”t«ņĻ.“QĆ/ŹĮ[;¾¢€±ßĮ®[Ż}ŠY- ˆäy”xŁ\ߋ‰„Ē•ęYxĪ’õšé“^ė:ZĒzŹ jńÅ9 RŃ%¾WŽ`¤‘’;Õ« _\čóŽĮ¶]™łOVĄ 3¶ńę«"ÖŽqøF‹Ž£žŸĪ›¦Ė®OmzŅMqul oœš?J )¾†Ę‡f¶¶Ė«Ė1IšM„óĒLžuģ.„iq{ ÓŁĘLlÖ0 Ł;ŽōūķCWŗæA›amŒŗ{s\„,ķu8dÓēI™®¤‹ČzŪhŪŅä_ėcŽŻcŠ<|ŻķŠö»?éÉkq¼Į–Į_„; •œ<‘]%ŚŽĮtāŻIn¼ŠYoŚāŚä›—yNs@=Kķzīž+pöŖĒ,;W>µŚŹ‘Ū2ŗ21†ėOŌŅ3īrWWLćņOŻĮčiWĀņŲÜ[ßM:Ė łˆ֐±JH«ŖĖqØÜF"{uĶtÖpEm„Ļw:z‘į;Õ„ō.68"y.u˜ēwKi•æ‹ų½…{gĖg³ūV·“|`Œdv5”ѱ·ąk -CQ1?˜Ļ#SéĒ„[ńž‘u„ƲD©Čč rĆÖ³°ś¾¹®5µ™§R6»g ōĶSAÓµ ^ZźĶ³PMÆ”õŖ°Ļ;šūiįē³P&HĪÜ/B}ė{W¾ŅķÕ!ŃŗtśT…ŽvŚį/'4*Ń悚©|ČāŽPµc$ī"Å­Ä·Bt ;sYśÄW+ ołÜr5p} ‚ŌŚŌ Očŗ…–łnŽÓå å†9&øĻźV÷-w=äŃZČ䄜£¢žŃ£<Šˆķ‚°×ļW=āy§Ó-ĀE#.IBęƒS'ĆzāE§Éq#± ŻĮ¬ K_›Qv]®Ÿ1^OQYŹ]Eef°øø‰Xø‘]Ū-Į‘ćć<ÖbWŗ¾Õ&‰ķLqE¤žøśÖ'‰“4Ó<8ŗ±O¶Éē¬XA–÷Å1ŲĖÓ!šåLÆū±īöĄ¬?ųHk銔vÉÜOV4”lté­Ęė”»Y@z×LÓ„Ż“¶ |΁_” ŸĮ¾“³øņČ"lóŲW”k:µ½Œ‹ ]ÄķQé@ģsŃj {dĘ[øš_(£/sGJó«’M{«[qæKbž“‘śŠm ŪŻ"w¹“bcšĶcj—Óčń¤&GułN8aÓśC¤Ś•‘hˆJ÷¦iś%¹—”ļl«€ø<‘T„cHG©™if²_\-›K$, )XS"šž­§Ü$F­ģQÜG&”É#¦źz¬ĻskŚI”ØRHķ^oć3O»·M6O;|A›)‚­ÜV-–rūāhŚ<€zj!†ŽŹźŽIĢ9ąsZF] äGs{ÆE%‰[wņp9Å|‹ń_Äšk·£X_Ć,–ωUNNOØ¢R¶‡]*WŸ…R™R }³ ųŸKÕōx5į=šFÄĖė]ō!®l.⣅’XĪš«øxö&«˜ć–Üīž,ü&ųhßµ ³Ļ¼IØé:bh—Š4³āŗ–@Łäżßé^³šūöÕ>źßZx|ŻióÜH¤6 žķ •ĄĒń޲uŽŠXUŲš½NI“R±·³·y…Į_$c—'¶+Ź,üŖŪüI¹×|s¦Ū^Kk1Kki¾hÄg¹õ³Üõ°ł|„²7ü{šūĆöw0Oå視—v›ž4ł@Œķ#«€±Ń.¼-©[Śx§J’ŚG$ĀżöF3ž+˜¤Łø+Į,Ē6å©8ŗtŸWóŁn’-N¹µė»k—³Ō#•'Aƒ½pAōŖ×—7WyyL8=+‚¾7¢?§8#ĄLÆ(Æõ©Ž­Eµö^‹æ›/ų;į–—ØZj ½Š‹uó r(;—¾=ė¤ÕÆ“Ł®“>+8,­--Ä3Gޟ›Oå^UZ͟¶Gō[ʛ¢ŽźnŌ4ūfšÅ2ŪĄłqõ®P’ź×̚Xf3€9®W&vF’ަvšĖØNĪ£÷kƒƒYt BO„śn¢ŠŪ%õg#Hųݼ.żjįŲŹ³V0žč:&›żŸk¦i–žTHĆØ}眷"æO< šļĀ~;š<ĆÄ>ŠõI-åĢ24AZ49ą×ńõ5¬)\š±5t±é~ų)įŪhī4Æhšu€`XCŚ œ{Öf”šĖū2醞.ō·G.ė»*ķÜ×Lh¤xŖ·Šé|=ā[Ļ˜,/c™' ņLŹÕõ„õż;ǚdśĆÄ·,›$Ļ;Åt4yÜŚ]nĶŪ;Ļ„×7> Ņ<Ū†Õ_Ė‚&8QŸ_Ēł×Ē:V/†ntū RŠŁ³ØŹ²‘ž+šlż{$Å/Ŗ©=ä~üńœŚ8šÜA×2ĘŹ'øžU½ć}.Ā VŹžā‹"ģ-ļš“JŪÜņŻbH“SĶŖ[ļŹļ ģå†ĆĢ×”īŌ+ cŌŽƒ?€©ØŁęĖ{ž‹’$ż•‡ÄzifŌd²Qy$ŒK™Ž HķŻ‰Ż“[ŗĶ« G‚0T3:ٽ8žžŖQ“æHŚÉ/’¹ŁųjņžÉq>™g~ØAh§MŹēŠŠŪšŽ‰į=#\Öõ[åƒLµž9^5Ł”µ}¼mĻ fŗ)ZŚųŒ.šŸÕģ§’"ż,ž|(š×‹¾.xOĮ>.Ót[{Ķ:H„š$ ĶŌ † ·ü æą³’“oĆ/ڊŪĆ)šŗ)5m'H²šŻu{‹s™äpIŒ0 TļŽ¦»ŻEŹx{ąĘw>­™ć)øįiT©5&×¾›—"]÷MöI­ō?ž<)¤ŪY\M¼pÉxÆwžŅ€(‘±ĒŽĪ6וV]Ļō/‘—wØĀ˜œ4½:V=¾æę¹…–E9Ē̤VWG¦“FģƒCĆ&Rm„ģ+äiм?«ź¾·ūK|é;=ŽŽ•µ6®sT“>Qż«5Ėk x_ĮDó.®ĶüŖ–T žYükį–Y᱊UŪ÷Æ Į­GšÆŅ70\ö4āīįN)ł6å/É£n;D¼”Yj“(¬f~•¹,7–—ii’é!>Vq’µz”Ńüۈc$Žk|łŸ»īē¹ōōߥ†Zæ‰5H¼IāųŽĻJ“ öKI‰›?xŽŻė²œ"±ś‡¦$ó[Ē ł £U±V ‚‰ä„®§ĻZéŒzžeVgŽhwpńŁĶ“›³‡ =½gźŽ–ÄFe™K2“ż+[’<śīŻįøP§īŸĢV“W£jĄŃķ9ėš[lŁČ£É(ä/„dŻĖ5ӄPø Į¬Yƒ:/ ­ŹĶ-•µ¶ec»ŽyśWGŖ­ÜVß`½ßżĘ) ǟ’bøy"@®HĖzÕč‘…¼{ч%€ļL ČĆL<Łß_ļVõŒAnDŪC "‘”·,x—\Ž}°€7ĒŽ8Æ0‚MBŚÖį'ķ½ˆ`{v ē’1$±Kķ2¬Š~ņž†¹+m .5I¢“U÷|ŖAėA&Žą¹%Ön-µ°^ił €”ć^}ā­ŹóiĢŶ6>SÄ{Škx®«{r“:Y[Ė=Ā’ą?Ÿ“ŽxƒVĘāHbVĖ #‘@ģvl–·’[@°Ān€v-Œ ėļeūcmF…#ž4åŃ>ĒŌ ³‰2 “<ćҾti%“Äś¤gMøµšIƒ°dõ_jž‘f÷–`$“n:õ«Ö–VęÅ®­å6×[Ē™ógw½e&#SY·ūEŒw7w-s)ĖĆt ó¹4Y5ČS€Ŗ­ˆĢ xqĘCR½‚i,"pL!ˆ2} WÕZ—Žę’I?²lm,!uŖ:£¶ö­Ir<’[æÕµ8&°yŲD܍§€}@é^;}įŻFÉäóMѐYś“õ ćśĘw}«¼1ŪÜŻ:®rI*1Ų{×s ŲŽčšz¾£ėØ:‚Šć¢öž” ļt˜ĢŚ Hģ0KtĮīkÅüe”ŚĶŖ­źHp’ø* ęśōh.±i Jłź½©~Ļ;\É Ŗ›AĄē#֋–™äÓĢžB •XeMr>(޶mŖŽGoĒ…\c>˜Øä6„Źŗ‘qŖ8yČ[U\žšćr:¾‡ż—qvńA£¶ņćŲ¢ÖŲל„ՙ³Y£”ČĆgŚøŪWVÕn&Œ²©ŹäŒ¦Żµ!³nņ]BŠ£»ŻKyCųųć5ŁH–qévŽņĄŽl[š 6O±2”Žęfā_’#’+Ę^ā­$&Ęģć}ćFbNh õ}:×P–eŗŠÜEdWīØ<Ē¼Ń ·7óÉ#‰F Hzõ  Ķ­ÜĮįĖ éÖq.Øīd[É&0xÅbi)ā Ś[MOR»ŗ·™ĢŒ’¾åĻØöö¦±ųkÅVcOæ Ér›c 0ž¦ø]RuŌ5ķņŹÖ¼øvqśVŠÜŅ0*x›\»Ņļąm.ĒūNČØ9sƒÓøüé.>_ü@Ņćæŗ“§e;e ĄĻU«4±—®Ewįķ=|;%¼—Vvń…³oߎ+Ķ4ūĖH>Oą#š\ØĪhźmµ%O’E Ž…%ķœŅŪB<ēGöī(б™Ä[xOE°Ōż¹•īšMĪĜ^Æm­éré³Ć=µ±xøŽļŒ }Ö«gk¦ińß„ĆĪĢL”#Ćį>£ń®^/Į8+%Ū)fĄ1“{Ö,fn™„Žźśõø…„f[…Ųc$|¾¦¾ØŃ40O¶’\(#$ƒ€ŻŖ–Ć3×CŃ4­IgÕ-¬rZUŒķ'ń?…`ŻŁéWéØ,rĀč®r>µŖņ1įŚ¤—š> ¶²$Ī’I·¦p=«Y“ˆēG»BšN‹ø`}ź,IÖų[Wŗœ½„¹žCƒĻ„v„žŸy§Em%„K&āZAŌJRv&R±ńē‹ü1Śéšnn„Ä1R h¾n9Æŗ [_ ųsE†Ņęś;ķ¢)&±Ę?ŌŌ)]™óė©7Š|gމ•> “O“ł ±Č†¾H¾šÄńĶ{ØoQŽŠ£%TōÉ­  ŃO@ŠĶ&Õæ²•I¶9R=+¾j,Ø·²NŃ" ?tz =ĪU’Ö‚HtĒG@H®HģbųfK‹×óÆÖ[gŽKī9aĻJķo×ķ“šīkä"ųPcsÅy½—ˆōĶ*é^PE«nć֚‘}O@—\øÕ"K™`h!`@< Ēŗ¹“”.ŌĆŸāŖS5Z¬Ņļt%øŅ-ķē¾vŚČėŹÜ7ē\Ž­ą˜DQĒ}nšLŻr=«H˱\Ē'Æx‚/ ß[iv„nŲ(Üć•ZąüA”`I©XY‰PέɐAąĖ·Į’9<ÓĪĪųÆK –ć(x śÖ%c;_CfŅš¬øC+“Ę*ž©¤%Ä &ŁÜdŠó*WŌō)`ß-Ś04ųv·pīŗ¶"稬ļķ FOō{RŪU¹9ēéÖOr=“ZŅ鶛$%YŸ ±RzÖ\¶rEę„ÓÉ ädÖ·§Q: +šzvÆ ¦a,|р¢»>ņÖöME‚ØÉSž‚“WčyÓL}£ŲŻLŽ\‰$* z]4é××Vo2HŲf„¦su˜’² ŽU–<7Ģ…\7ē—Ž3Š(ēyn£VĘ·4(›GĢņæ_YŽŻÅsn¤6#©9©4¦–YÖ!2@{śVÉ”ė1ivpYČ֌‘¹<óœW•ÜŲŽKtåćóA<8ķ[EXLōßĶzš^i·Åⵌ‚¬Ē;’Æ­tzÅ  ĻŖ/\ńųÓø‹:k$‘¤ix&\d–<}*†»į KAy+’¤ē«Œ{T{ChĘNJkšd°A4pLe;†Āøķ1nZņ8‘É|ćӚ†Ź±ŃĶk4sÅ%ŠpĶŪ=k¤°““ŗ•$µR%^\TJżßūėŗ 0é’;ŠŌÓ4Ä»¹DµŸĪ;€# æS¹¹yhlęBķö†b+ŪkÉõO³ŲJ³Fā@īŽÕ“eю©vžzĘž»±’śŌĻ õ½±’Č2K·hldzŠčŒS*>§ŖÜŪŪ“²ģņņ®F¬™mõ\C0iD>QŽEc&uS‰ūŖ|5Õ|%«ųfĘü@wn.Td1n‹Ÿ^µō—ĀļXź÷R^j³Žé3YTER<óĒz{ūWŃŹ“>iJśž£.𔄻ĘW€}9­żbŻ!šž®·vŃŻ3[1MłėXO`¹ł„Æ;Yø¼Õ|žZš Žõn^hd2°³n#?xŠČŽ2=?įķ¶›§\›©ÄOi*–#©üU’µ„śź¶Q5ĘI¤UĒ—ųʶH™6vśn.µą-Zó˚ŅH×0łĆź8śõü+½żž&ƒĆš,§P½¶ūcĢc‰Ū Ńäž¹ä~5R± ū#³ż¤|#¤Ką‹-Uģ¬bÕ]ŻŽčŒ“±_Öæ*|AįĖķ[¤”Ęafʐ~š¬ofk;ø’G•#Lį½ {GĄ’ÜųwÄŽSĶ v&w@UĄqõ¦¦S‰ś‹įķCķŚtY„‹ņzŠŲ(^8܃yö¬ź6O)ę’¼#oāO ¼imŌ°æŚ#ĀĢG=•łŻ}iöi¦–XŚŚä¹WV\0<ō®s¦Š:/jWŽń>ÆŲÜ4{$у*“Ķ}ń/@ҼK ę³”"iśv …D'c3žĒš‡3ŗ1?~ąƒæµ-Ę»¤xĆöFńę²–·vR}«Ćjćnä䲅ōĻ8ō&æ”9]¬5“vO˜Ū؃ŠSņ-Ÿq|×mõ żŽvGŌ`;dÉĪåģĻ­3ā‡ƒ|3ń+ƞ-ųEć > ’ ų‚Ę[£:Ļä®+9FźĢŹgł³žÜ?³ž±ū1|pų™šÆÄa[ō„——k6bc‘AģPƒÅ|}c3;¶äXšHĻPjé;¤ŁĻQˉc“|s9ōŖ¦Ó|ŒÓĖ=ż+S’qčF‘̲åÕ~é1I‰LŽ`‘”÷éZBÄŲ«$Įœ\Ź¢Eäp;žō’9ĘXnś ŠÖ ½ ŲT䱚æv÷)og}§·‘¬ZOöŅØłŃՁHä€i5Ōéƒč¢Gü3öŠÓ’lÆŁ Į>#æŌ„ß|2«”ų’mŅHń€¾iÉÜw|­“żēōÆÓķNŌĖ¢ ƒŹŸZä­3TģxƋ<7 yu ¼*6\F8.•ł·ńOGÓ¼7®xŪĀv„÷6P:]é,Ųo(ī%F>¾œW „a3š³ž [ū?[xĖĄś‡‹ō =D’J³›ĖÜŠĪ/Ē'æąE:¦KD’#ĖŪ>эÆéŽ¢ŗhIŽĘUé"ņ‘N?®”˜`€Zė‹9$ˆ%‹*üŽO÷Ŗ c3#$ŠH ֜Ś嘔3‡uķÜTņdmEA’xcҧ˜ŅźGi 3+I“łŌ_9‹*…掭˜ĘÄī¬UQƒĒ9ōÆOų?ńgÄæ¾*xā‡U$¼ƒR·[ŽĢö„Ąu?†OįC7¦ōż‹?h? üGš%‡‹ō+«m^ĀŽ{vø’[e0Śźq÷¶ŒŽĒŲWÜŽæź×¬d‰|;pÆ©č’‘€čĒ.€ćØ=¾ƒµrU‰Ó¬zAµŠ”…D‚ĖĒVĘ3_˜ßšWOŲņÓö½ż–|I.›£\j<Ū, °kėB~xĮŸ•Oā«źkФ:­±žo¦źµ®ųOSF¶Ōģ§höæŽdÉĘ}ĒC\»k>›y3€|ķĄł~§Ņ¶Ing%©×hҽŁIŹ42.>EźµõOĆ=ōP]āibcåˆŪ'ŸJåŖ#ćdp鯆m)ǘ‘ÆŻļõÆšŸŠ%ŠnSV>|_gs(pÄīÉR+l‘õ{į“ƈ=ž®Ņ­¼2"ę5©‘Ū½zV©ugm¬/öl“I@KĮ'éł×qĻR‹}VŽ)VéœF~õb\ź–w’Hc•e\‘€~ķ?-‰?“÷ż’Ń»Cv>µql.7¼”Ö5żi«u!§c£Ņ¼?§ö !Sŗ\5ŪG§ ˜ąRa‡w×·¹•‰õ Ų­® hzœgĘÜMĢŅJT¤cęōČ FÆ«G«E ¾1@…ųyäÕ+Į­,bžŃāĖ!(ĘXuĶØ u£_}¤¬,#ŪƆ?Ź«j&ėc5¢·Ś×¦N4 ŝv‘«]iŚlKpõPŖŽĄ×ŗœ÷4ÆūĖ—søśšd“IeuR™$b‡pU'Ź­\Iq «H¤ĮČŖŒ­ ķģaša M¬Ē÷®Ś %m-ŻZ0’•ćŠÖ¼ÖŌ mā ņ(·Ī­M[ÅPź*#Œ¼Š¼©ģC™J78›ūdŌŁ%bøPH=čÖ“ŪUšĘźv‚ą3 ÆfŁ|ŗX”w¬Ūė7^zŖ•$&ĖĒJå8ngĢ“yQØ<“Å ŒLkŁā·Y6(IŸ€ĒĆڳ¬¬ī呤“n;ō ku¤i÷:]Øóäe»Æ5³§xbŹd2yq]>I cŽ€8CH”ŻL…šSœŪ•Śč> „I{4ŠłäķEĻ8¦‰hȟNŠėķ 3¤XSĖSō?Ū^Xßš z2ŸZcŒR(ÜųU`ó£TPTc9ąūW%ye>šādV@xéŠȧcŃü/ci­µ£^Ć$‘ć##ÆÓĮiu§I,b’Üœ£šÕIGŠ^Źå#cWŗ Ä·µq:~ٜD y8źj$Ɛöoź­¢ŹD°™!éŒWEāĻk:ā­&ŃŚåĒ#“0=ĻœT Dą¼;§ÜéÓĻ=ŚĖ$®ŲT'!GłĶwĒUxƒBą"·$iyēˆą\Čіš,gŽÕĒ]_On‚Ś3¶SóxćÖ¢RFŒZ„Ģ–Ń\dŪÆ÷ œ_ †Ś"S…ĻqVfāz?‡oC_@¤öĻCWõ;T°×$øsœĒwŹA§9*'J·iiĄ4y£Ų­żĢś{׌_=×ö© !%Ļ,=je+šĘ6:ė}>ĻPŒ)A<Ž6ć8­øŠ hUJ"uŖ$“7€°Įa{›‹čĘÅkŹ×-āH4kĖŪ9¢F¶Žyż bYēö°]\ZKp:ŽOJélĢņڬ»W8ĮRc¶“Ū_H#›r¼›†ī‹ķ^ƒā/ųˆY3ųz8fÕ¤p9ōļӞFiŲūmķ¾Ø£QGIŠŗz÷­ķAŸķv×RĀѬ뽨Ī?” ņŚÖŃ4uÖ8¤ĪsĖUkķ: żߏCö‘)fbpHō¤4ŚK¦FO$'wM+MŁt“8>s6F8 Ņ”ķ¶Öß`f•w’›…s> “¹ZMå·ļŪ±Āńš //¢Š,a¾¾*–ęAūĐ?­yoˆ5oųJµ¢m¬ž]§•ušņih,å ä®å²k²“[»‘"ŗ|£pŻė@š,ų•į‹NĢ1§”G$öÆ,Ó/%’S“ˆ¼žšÅ7`›}Ō`ß•zƆ/. ×"†Xdž›×#(}ųP†ųļĄæańf£4ģ®$2GY>•kū*ńtńan»„)œ'Z¾ChÄĖÓ“ŻOLµ—ķöŅĘš¬s]}„ņčślڽÕŲX«ņ݆ćŌäTµcNS¢°Ōˆm ––’¼|°ŻüBØÉØčś0—ķa’<©£9÷¤‘­Ļ=ŌõĖMMLŽYŽējńRŁŁ_o $mŒ8ēșŻCnšiģ‚A'Ė·®OÖ¹ö‡ģŹ%rĮoCHĢčt}^&Ńo!±³ūVŖÅ”¦?:āķīnwØ,‘±Čß>ōĒb߆UĶY]ä“vyķōÆX] .m!(ńI+®@•Ē­ 0Iže 3>±yXĻFĄnņČV÷sÄ©n–Eö•†F uŠŽ˜£ĒŒwbEx–G!¾FĒė[ŚŻ’‰ v²]ÜÉøŖ…wä*ŽŲ¢Ęē¬x;[b%ĘX1Q—k¦ńgŒ­ļ-¶/&ø¼bƒŽ@)ŒŻ/PÓ/<›Œ Pg£ “WÖ4…³»q4{ĄņXŠRƒ<ÆKNūd÷zf裎ē nõÅbkÉuöł.•$*TÄšMe%Ø’Ō§£j¦ Š— ±Xć'„uZ†ßšHG›GCÖ°”µF¶œ’[Fd]d`ńŚ·`ū(ķ«øē„O36Q:hęŅ$‚ņŻž)ÓfŅ£·Ņ¼o\š¬ŗ\é4Q’”9ŻĶøØž•±“‰ō\ųif¹±?æ Jīn­ Ä×0Õd]jÕlN2`«õ’?+dź’¼wéÖ±§”¬sŹÕm3OŽMÉ)Ą;Ŗ=˜›4"Öķ,<ČC±+õ­½"āŽāGYĀżæK‚.ä:毣ŚYŁģÆĖޔֵ gY٬vį§R\QnęZ’tk a)©#N쬆,ć9s\6­ą,'¼m9VŻ-³<aF‡bŠ8ū R'Q¼‚X)ąļtk„2LvܟZĪhR‰Ų鶀’ϳŖ[°‹wń ” öŗŒķ5Äń”‘Õy*EP£3“¹ŽV[ø„°Źć”${ŠīģoZH<~čžOu ²†±p–ģ£ĘĄĶĻJį5ūOķ9m-ķ/£šMƒ?ōĻ'  Ø£VĘŁōK„“šę2šHą’œÖ‚iźķ¶hĢKžŗÖ.Fń]‡ĢÓ¼u9‚ÖŚņU1‚€öź­Vk÷¾ĶĢČī+éķRt$aų‹ĘÖVŠĆ „¼h»J<Žõąś†»q{4²Ģ>~@’dU8ƒFZ‹B’A88õ®ēLU¹p…ßųXõQEAjmé:+¶„ WŲ1oRĮNr>•šŽµšYš/ÄOj® Ó ɚhįc÷UŽTžF¦lōščȻьļ!‘™āe*錃^+©xrūEŌį“Ń­äx§‘Ė99Ąā¹ē#ŻĀae-‘ģæ< „xįÆÅx­oōĶCEæ··¶@0d‰š…źz“Ē„zö§ū#ü0Ō~xkā7†>*7‡ü_%õ¤ėq x’ .7i#ūŪU¾G¦(œŌRw>ó-š’1ÄÅJ4ݶ{žž¤ŗ÷Ə ųā׉~kz†„ń#įÜ1D"Ō,œF“Œ3.FW*Ē…{ĻĆX>ųĮ¾=š×…|;ØéĖŖŚĪI¦25³“Ó vļ\µń‘‹jēķ#ō}­^jy‡¹–ŸkÓĖōg#ńæRŌ¾3xĆBń‡ŒīšćÄ~‘‘Ģ$²ĀŒYYŲr[,Ē>ęŗoųXæļžŁüŌ|s­jŸįøK„²—÷)ČS/Ž+žq^lńļ”ūĘĮ †UA4īļæv¼¶3-仼ŗ³h®$«€…›īšéüGcā _Łi^7»øåļp§v"8ļžN­gõ¹4}v€2ģ3R£BqŁØ«żę7Œ4(4Ÿ^hŚ%åʵ¦(ą˜Č%Žgņ:UĻ.“ŗĆß\/mį nœs!aĮü 5œŖ¶}},Šž/¶“ŸUKė{”tņÄÆ)ĒŻ“½T³šhYY0ģ03ޱ”ŗ³®4lµ4ģ%žļm!‹pŚyķT¾ xæĆŗoÅ+‡ųƒeĶ”/ EŁøL„¹SĮĮÅ.d[„©«.”tŚ×‰aŅYąšķÖ”$ö¶ÅÉFz-cź6RžėÉs‚ dßc9Sgc{į«ų/ā“_°J…dĒEĒē^1ńk\—]ń®™į”©ÜK ŚĆĢ6žoī–g¾£Ŗ‚ghŁ\žĢ¾Š_i3iėshT“Žbå9Ķ}…šīĒ\Ń5›¹#‘ŸA»£dNöõĻŁHł¼r²=+ᒊ$š÷ÄGĆœŒC?Ś­\Ÿæ=?üėģ«żDÖ”K³¢¬‘żńŌ×lQņŲÉøžEā%‘@ÖŽ|<ķlZó{1®|:Õbń†PM »ļšŚrY[œ’J%,=K»;ńŠąüf×gń–„ik)³),8?TüsšŚ/|?Ó|Ey£«ź{D³©¤ųHöąf±qGŻeų– ¢¶Gųrõü1¬éŚ-¾Å†įEsĘĄyž•õƊ|Uįˆz^‘§č£j1Ne°øPqņ z`Ōņ#ßuļcŠųƒį‹sį¦1CÜŪį”÷śÖĆÉōõū>›«[2G nēÆœQē׫dĻ»ļ?jüż¾7x†CĒzuÄSßZFpŠ$.PJ1’Ŗp£ŽæœļųÄæ¾&h²kz ę…įæi1ųæĆģvłE:‰$†2¼e }ŽøĮī a_UnĒęœĆńŹó¬^:SVÅÉYyFļēdߎwŚT’Žź6ÅZŒ¾}=«±¹‰)?v„Xćšó\OčŒ-K¤Ģ2š@źÓHȬB`I>€I®†ėD¾‚Į®µ‰’[!o  QČιI-Ļ>•“N¼‹ķbKuĪC2£źzVWˆ#šļP±¼"Ä Ćų²G',Śg”črGŗÄFŸ½[²_ŚĀķ¤Č˜Į dWU4qÕ¢¤s–7ŹuˆžĮml Į0U½«£ń©ĘZŚNØ^XŲpÄm9ėÅo*‡°KC叮Ÿ”j–—ē•1ĪĮry`žµė6*ś„*įŪhąõ®Z³¶’4c·km°łLčĒ–ėŠ¶-į·•ˆ ÉŌf®œnu9icšń–¹Ÿ¤¤m;Z¼»„løÉ#?ąkąļŒw°é^+šż«JVöŁŚv~ō©#ν|=-.)ųķžMfšp—»]Æ6ßč‘ķß³7‰ō»’ź^»··y®ķ<ūg‘AņŁzĒ§’^¾÷’„JńœŚv£vT·yī’TVE@2H޵ŁČĘņ| ńx…F³Ė(«3ŠŌ¼Kcįķ2u’H…És¶3ĄśśWxŠņ÷T·»Öļću²w I³ä·>µŒiœC™ŖqåLóß ųKÄ> Õ-“»{{·Šy žt‹ņʙé_RXŻųOį>–š†»½†H>S›‰=Ņ«#óŒUw)Y7ń?ć>¹ć“¶šÆ†n“ĀŚ\’¼ø[q±ˆķŹ²t­.Õ4'Ó÷Ž^ź}>ÖīK/’^¼ź³3”…m‹§ų+XµV½›PøŌ×<łĪNŽ?„v®Ę8•ōsfńüŒĮ› H÷ź+ŠR>Ó.ĄņźS†Ķ&ę@Öģ¼{Vœö°ß˜ę¼ß+”ʜći©¹õ”)ō2Æ ņ|·Šy'PI)Hnį˜™|£Ųw§ĢĪÕNć5;¤šķ¶©"£Ć%Ȏ-¤Ü;`{Śń/Š­uPÕ-XDė’Ū÷XŸtŠ’¾¦ĆßSĀækĻ€æ°żæģsąŚĄ¶1Ō’lē±:æ‚ÆÆ£ß2Źč³[%Ÿ&Ļ1ˆq‘ņēvGåm¬_cŌVķŌ¼ž^õöJiA[©žeųƙTÅq2„D“IGNŠ÷}ZŠoĪūlzĖĆ6²€0Ł+(]ĖĮĶEwāYō]:ŪIqq{|²,‚2ĢÄćļ^8Ÿ”bOqųy“įļ‹Š>2ųbūOŅ5c’ÖY„#å Ż¹"æD'³M;U’ĒO‡Ź“ŠB1ĪÕķĻ~ÕŁō†µģõ ä ——“JŠOŽŸĀr£Ó4?‰V6ö"Łmā’DŻ Ī;n5v!myt&ŒŪ8* ֛AŹaź–—u9™s!BŠētĻŪźŽTģ‘Ėóm“š Āę$“žŚr¬¦5Źķ䌵rēĀÖÖ²jZM'Ķ€„zž4&ńO‰t;ūĪhķ%1ļ#h,{ļ\ŽŸ„ÜMaØj_Ś&īĻļdcŠS6JĘփÖl.MÜB[tŽćw9ĻŽüÖ[iˆæb÷"&vsEĘhk~-µš„ž4šIÖnb} góüŗ~uŁč5Ļ}qad4}ąC™÷8Ę>•J]ĄĘ¾ÖR™lē·)µŽńĘH¬ ü+¤Z];Ų¬ŽC1p\Œœö­Lœ†Ā?§µ×˜źÓć'npqž Ōī,Lf^7\…QŲPA.ƒ¢ź76°_j@ŁdUŒ“ckIm³OełŃĮł„ ĖŌåt-~ĀŪSÓ,žĪūžQl`z ©­hv·z¬¤[µ“|³~sģkØ3«šwˆ?įYx·O×/Öm”<° ūW²ß~ŠŚrź kžÉey"¬ž\`yg±5&žĢÕÖuMVŲ[‰axå\ņGź .›aØŪʰ銳ŃN¾Nąŗö†“ƒ3pģx’Œõ]Ežę+ł¤]N v0eėĒė^{7ÄhcµšŪ2z+ŪŽ“+ü@Ō-šż-®VPØųŻĘ+±ŠÆüAx­}s$å–FłłYsĘJ™lg8u1ę¶¾’„æNÖf{Q0lĖ•ŒōÆlÕüUuu`γ[ģNÅk%äbx/ˆnnU/¦ĖI)S–Åaé6>"ū“|˜”E' ėŪ5“oŌø¦{ę„„źš‚^×F¶Ś‹AēaWųĻnGҰ®|*—Śe“·v³Y\m *9Ļ8ę™\ŗhś<—Ż@%‰AŁĒ9ģMp^#·y*XąØ£œęƒ7֛s¬[Dm,IŽč®Hlņ+VĆCÖõ­RŅk‹£@ĄĖĪżje+ؤ}¢i–ˆ.mŃÆ7+÷U= Ccu©Å<…«Ķ ć ×<¦Kģ‹ČiäŲģws\®¼ójKcćDŅ©P¹ā„OQĘD^šL¾¾‘ī'•d‘Įh‰~¢½åE …2£p;ę“,ńiŗ=ü7ķr"‰¾_(Æ*ł=+’ÓaŅnµÖśVkupß(ł¶Ö2Ü »m5RfG³±OAÖu-S\¾Ś9­Nö I#¶q\cK=¬īĖ“ĖžĀµc9ž»¦ĖØ\閏“ä·'Əj…-µ ŻFX–åęfČŲ*c½ŒœĻ`Ńõ]cĆpGgżœdŽ@iL²‘č{U’ėw²ŲFo#ŻÅ“ƒ×±ö­s x‚öźćW{£å¤C*޵Óh~"¼–?±L"†„w/«G- ę¹é:>‰±ćšŚDŽR y€ö®gW’ £qöæ5W,@=½qV™ŃFšö×m~m®cbŁøēé]č‚ļPŽĮ±W1Ļį_5‰Äņ½OÆĮaœ–»ųZźĀś3!¶uÉ真jбšŒzq’ķČVnÄv®xćöZRmŠnā±”Ļ(O-qÖø‹ŻFŪ]½¹+ˆy¼vÆc Q·sĪĘҌ`āM JØuć§JÉ{mbE¬lČIQ¶½Ŗ}™Ŗŗ"…Ž”Ŗiļ"Ēf±·“ŪڽWOՒd¶YŲCņcœ[Ŗg”Ųēu’i³ŻE”YϳIŪĖ.8ėŚøöŃļļ§xć·}ŒA>’…7L®VŽRīŚėI£tIJ’y®Ć¬·käĒĮ$;c“Pća³Ü-– ]9?{ĀČ7nƒ^wy:5ÉhXģVÉ2=©Å»N–~Óo#ŚާN kIsö)¢»†4—.yȤoÜóŪĖ­q%snz `~&¶!ŽtŅ'–MĄp $}(69]JB„Œ‹!@3Œg5ēóŪ\Ēv’@ m‹Žč6k~K^£N`9ł®ÓMŽĖL•šŻe I$d™l#KR×4č-cq¤Å±ņōlūVWŪ¾Ę Ę”ūœ€Ł=ĒóŖ2’ŌÄŌõ-VéšūP™~źēڹYä{Éßܒ: «¶³ŽęÉ Œ(ūŲŸ­lł°ÅQKmžŒ£­Ńv9Q,ÕćC°ņ@¾”ŗbĖęŚŪX£<²JØNĒō9šGĆŗgм¦ų[kr[\¼ŹģgO°ļ^ó'‡,S|¶+4ƒ/~µō3ŖĻŁ$c mT–WAĄĮä~ę_µÉ|=į(`ŸT²xn™ [rŲ}€Œż?śÕ„„r}™ńÕρuItĶKQŠ-”¦£.ŌO˜Ā¤t-ß”®u¼©Łé¬÷hŹņ0[ėR\cc¦šjBŅś EKš‹*€; qšŹ±óÓ]šŌŲĖ%¢ņdu±=žõq—AČūOƐi–’u ­<ĶØÜH$ß“~ģvR>+åĶOæ†īśŅ;{d_<ŗm'œółU>¦<ĒÖu&ń·Į+oXŽųäŽxć å„2śó×5łMż­&£q©GvŖ—VģČé8ĆFGŽ«6]3̵{Ÿs… ēŽŸ…gBņŲ³"cōćšŅö¹śū>ųšx“H}*{•–äŽp[Ąüėź(¶LĮX±ćƒœVö]NiÉģoʑ¬]7H5š?ÅÆK¦x—U¾{oÜĻ “€¾ÕĆV6ŗ7£RĒ3ą]WBŃ®Ö_iŠ\Ec°Ż¼cŒśW§ųİųĒNń'ƒ"%;¼ūcč\~搮Sҧ;—~ųēÄæ³·ĘÆ|}šģ† SEæeRäƒv~:äq_Ž€ž#ų[ć§Ćühšmäz†“­Y¤³˜ĪDS…ō=GŌ·±¬Ļsųmćį­{Mž(g•c™ąߊ~5öŒ¬R÷N·æ“Üņ‚®²'uĘA„'s)ŸĶĻüßöQOˆ_ ¼'ūXh¶,5Ķ ā†™­É;]ŠŽlžĪŚŻ¬Jļ%¼r[Äč8\śzŃKŖg<Ļ kjž%»š& MĀŚŪ¶³įk¶łŻ³’¬XväōéœzÖ5boGjRŲ>Iņe; Ęv·½\±0ŚČ/ī͌)‚ź/łė 9ż įšźmsųH’‚ą~ÄW’³OķC7ÄĻi ~ų•žŌą„Žķ¾UWi`py…~xž¼HoCē.;ˆ÷©‹÷lD×R߄u7®mȌ>q“ų~UōŸ‚üHÖŗéÖKY-„Ÿ•½’JĘ¢ź(Äōķ[JÓ|K¢źvzɏūp[oVfČf$~_ʾS¾šćCoz7"B¹\tÜNjhUÖƜŗXś#ö`ń#xyõ]Wø‰ģ%bmB\„ē¦M}ķc8½TS·Ō׬qT.°Œ!Bīäž5“ˆ.ė±P$œwõ¦ĪfĶ›(!¶fY —ĪS]„µŖ‹T3‡V'7„Ńč0g$į3ŸJŅkŲõ)”L†ĄĒ­ÆéŃĻæeŗq&N~JƳŽkÓC21ĒZ@ø4łāŌ„óŹ“c€ ō5ź~)¶Ńķmę yĆ+‚2sAQÜäµ9×UÕßYžGži±»wšWIe:|r]KōQųź)Üč‰ŅĆc„kŠ=ÕķÄvŚp\;’懭|Õ­i·ĻqĢ×ZzHJ6 ;(*Ē[£x²ŪLŃćžŌÆŚ‘EŪĆÄW?ā/ j÷ŗ†ÆvņG§\ĘŅ9Ė6qŒ~„ŸMū-ŗ!Œqœ×]„kV6ŖöóČȀ'iزł[:õ TĪētĻ÷õŖ>.šī·u§ińčŅ*$’£:ŗšĄFER¦mf„ż¢x"ÓKøˆD÷2’¬ŲrcķČ®GÅ:ŚkSBĖJqÕT('č)ū0ä$ŃōĶFA [rX}ćŒsĶ}į]+cūG›*e›œ‚M5 ¬\×”°¶y‰hAåTs_>ųķø3E’I =Ŗ‘¤‘myf±Ł[H»UOÆłÅušž™k©YCˆDŠ#„&ģmOs—–Žqk$Ņy)õȤo2ę(me`°®sŽę”esSŖŃü-:,Ķ> ńŹŪČvéĄ'ČW–Łh7ņXMqē3ŖĢźws»ę5@2Ņęź īb‚6/Ć`v5bŅņóWŁi$>Bœƒ!čj&ś„Õü&ö²…“ŗūQ 8Ļ|V®‚“ĶG$xpy÷®InØģ¬9C…2=Ķdż‡QÕ§†ŚĶd’V$|ƒ“R\`ŁKĆś&±§ß]Įz^S,ē;ŗØč?•v:ž³„i3ωļQõuäĒC]BÄ7‡?µŻšŁŁbn›GJܳŃbŅń;]W±Š„a8²ž§åiŃÉvTł².Šq÷«‘Óu/&wGłäg®iŃ4śLŚ…ū˜v¢ø/„iŁÜGhĘŁ÷qėYϰX„ØĘ·pĢw*ƒž+µÓn-ī6łLĄØŪ“Ģ֙ź~²6Ģ·OOž9ķŠ~µ%‰šU…–SŽHģi3¦ ńĮįčešõåo)y+“rNjX“łUĀČG<żįXójYæ<ŠŚc5¼‡Ķǧڼ¶ĻÄ÷¾ÖöŻ˜Ą¬Šć"AŒtśVÅØw= Ņhµ{xu6†7|ŗ’t÷­Ė™&·Ńo^Ņ-ņ¢ēŽ Jv+‘Wüśƒ“:ʬz\ģjÆö֛„ł“ys=Ź·E@ Ņ1¹č¾Öģ|U,Ö!¾Ér”BłƒļgҬ ķGĀh,üJЉ<Öņöœe2p*ŽChR8kvWŗĢ—ö72Ȅü‹œ…•EüY©ˆ&…] l|»j¬mQy§RY™åݜ“œż)ŃŁ™fH˜ąšNV4P¹ęž2ń~įģ[Ū,÷·ūˆhā\”¹®‡Ć>ŽŅ‚ŅŽ;PrŠŖ0§ŲW±2}OŅ©å±] Rßz¬Å2¹ĘqKābmĆz…ā"üØvgŒĒ5Ÿ3{³¦8T¶>)|5št_ žj*ék¤"{ūūd¤YT īAl~ńn§¤]ü9ųā?†ś…ōšœöL$†į€żķ¼ƒrgż 85Ŗ7ŒU¶4āž(¤NB’r;Uß_Ž­½ÅäóŽ"'–„Ū;TtAM$”’gĻ…ŚwÄk$O,É|¶ĀX›vÓĻvč+Ī?i憾ų?g£x—ĆśāŻ_½ŅRŲĻ–E'åēŌqVōAÅčy•¬Ūj(³<žTG©n*§ö­¼š°fG‡!TƒQ&ktwņ\Ūé֍<ˆīĄųqqXŪj:Œ÷öń„˜ sÕE œ\švjś¦š·ö¦źŪĢQ S‚GÖ½«ā惼)įxģÆ4Y%ø]ßg”üÉĒÆzø£Ž¤ś&¶ŃjŅ[É2Č6į†qī+į?‹~‹GųϦéą”ڤ 8Ē’^“Hó±=Q÷_Ąļźśvqg¢Ū»ĻöO2A“°(3žĒҾ«ųeć hõ””O?ŚĻ˜œp­ž½vSZŲłœ\^ØŻų›¦EÄ߆ņŚÜ›M]#“"ŽLg8Ļį¶¾¹ųā-ć±Ōę‹8F' ®čDł|Ā›äG±j–pŽéÓDW)“} |ÓāųR Z™Üżž5äö?ZrVb“œĖ}@ēč3^ĮįCØéŚf»”ėMoy “Eź”9ĄćłÖ2Sė²śżńg‡%šöæÅ„ŗ=¤ĪdE!@ėŸŹ°ü}aaw§ü@šnžtՈFš„1r²·÷†>Ÿē>¦…[žÓ¢xŽĆĒžøŗˆĪ/|©ŅDĆ$ž†ø5YWÄZM…ĀĒŁcÆpēśSK]EV)·sōŸć‡Š~xÓEš÷†g…¬¼;’ēŁ/Qcd©:ēpēė_ĮFžŚ^’Į-’bŽƂĖÅŽÖāŃ㸜mht¹ Р̆[{rn;f•DĄx§0Äą+åüĻāĄꤪ+}ĢüŠš€k–†ź6IPaŽÓÖ½*E‘" ‘±¹Æ5E×t┉ŽųS·š_ˆōKįū]P¶˜I “Ø3téų×Õæļ,~#čś~æ©^ŪųjeŠ=¶0Œ9Ē$d ķ‚#ƒG1Tꋉäß³‡üsńĆā>­š«įæĀ»Šę×MkN9dŽ#i6·¹œ3]÷ķgūxCą§ĆOxƒžĖßüL±·Kóį{“ŲÜrXČ`qҳöŻ’ēŽ"C.Ī©å“šr’O—­›µĻ<7Ÿ«é÷p4; ?޵³ocŽh„¶N cłW2V?eбŽ4Ų!Õ&{Hö« ėšßš¾›.»āIt}>͵ m–;‹”ü±’yż)Ųę­¦§ˆžŲ>š¬ Š’AŃ’²5 /.į&¶b‚Hš7+ēƒIšžņCN“”®a0Œy?ZĶĒRa-:Ft¶øŚ˜¶ē¬ gTM+GÕuŃÉkk™"¹äŒō­čĄŅ„u¹Ėdx‰õĒ×5EÅV­¤č‹[iܹaœ`sÕ±ųׁ|I±¹ŗųq”kÉfŪMŌ䓎`3•<&½ŠQ²±üŹļöžcW%ng¢ņI%ó²Wó;O‚? uķ^Öµ¦5Ö衍°Š”#?ÆŅ +Ęŗ·†f#DŌ¼–ū;Z4›A/\ż}zŠŠ•­±ś×ƒœ7N­9ć*-oeé×ó9Åø’wUoŗ$޵­Ŗé7z·†µ½2É¢Kʁž ż€x®IT¹ū½LŖ6²Gƒx3UŌmlÓL¹FÅJīĻ–A#½^Śh0'ŪÆĪØ…FO?žŗĢćÄQT åŲš’‰ŗY‡Å8³ÖbÖ¬5–żYa’æ8üėŠ<7Æj3ü›ąī†·7×:œw‘ź*ū¼øĆ)*A FsŽŗc+f•=“Ū}éėoᯄž ¹ń/ˆĀ ³ˆ2,æ+M‘ŠWäĻÄļŒ^(ńē‹ćÖO äk;Rå>Ī ĘJ÷ļXUzXņ!IŽģķžjV­©‹V(5 Åb@“ųAč:×Ö|ö¢Ł~ȶįĄĖķ ćüę¼Ŗ±>‡.Ć_”oūn(U¢˜¦Üö4‚śŚ&Ģš:W‰öŲ\5‘-ÄqŽŁøóå~µ„źJZžŅķīfŸģŠĄ‘—’iI!UTrIĒŌ.z‘…ޓžń…u¢ų‹AÖ<7ÆlIEż»A)G<­ŽµŠųKą6£ćūķĀļĘžøøœ«\ÜĄ$H“ÉŸØ­7YEhq?ųń‹ą?Š®µ6ń;Į²]Įy¤Æš1žŌk’:r9Æ,×õWY·ųú׈5ĶE¤ŽĻKÓ­^āāV{ŖÄƒwŹ'Ó×K īr¼dlŁņķ ąĶ;lj’ „†ƒįė{`Ń.,.mD7ÉqŚźčą:°aČ<ē5ņž»®¤y\,JŲN~õ}vŚ*'ł=˜U•J²œŻäŪm÷līSÄö:4J.¦aާĢw}+ŠfĻń·ćµ¢ ›‹­/IQØLŠ¹Ż 譒ׯFĪāl~žÕ> »ńO½CĆś.“c‰“Ļ3T³æŁūŲmØ ĪżœµķkāoĮĻųŚł Õō.å(C4ØpÄžUÕxµĻ£ōŻ#N[h¾Ņļ £–r:śĆp”¶ ¦^ĀšŻŲč2E[•2q<ÅĶsā Nśy%“k8hö7@;Ö¬ZéßaĄī]¶ƒŁā³rg<£ŲMöėę*‘łÕG²h·ĪģĢOŻ_j“ Fę=®¤ŠÜOī!G+§“O›TX Ēj|Ż…MX¤ö—–2Ge$rȲqĄąU9téŲ<ćp(?„:ķ­“Ķšę%|¼cūŽÕ“ØG„¼ņHˆģŒĘzÓ@rrxPGcxŃæ•É č’Ŗ½ĖĆĶ*ŖØĻW08iģõKmb8į…Čąļ^1Zŗę¹¬é7¶‹•-ͱūā1’× øŲķ¬t¦Ö£Ó@©2®#īžU‰ā]Ēū:|É7)ózŅ2åHłĆ]Ņę”Ķ*Ŗ}° x†« ÄzŠ¢C"ԁAHõŸź6 £^Ų\µŗ4j$ S%¦{wÆ$ńW†-4ŻV;ė{™$ŠåŒŽŽréłT«Ü¢•ę•§Žh“ĖC€ZćõXć3\YŚ„ÄŅ&7lSƒŸBj€ķ4OßE¤½ÅöšÖ‘8Ż'—Ļ’®¶<7į›ż&F„>ū}ĦzóĪ? å.…ļčšDZ\7÷ŃwĮ8ĮĶ`čš¼ZõŃŗÅĆbD@æ|“ƒAśi·i¦ųnėOÓ„”D ČrpńÆ·ńńūXŽå>ŠĪJă’[§¢ÅE.§{}¢x—Äśx›M—JŅ́ćĻŽG@N:tļ]Ÿ…ōė!ŅŁ–ĀĮPģ!xBL Óc*ćĘZ}åó[Łź&źT“ §§­jj–·śī—y“47ĶUŲ0bƒ&xļ4ūæ čz™-ŅŪÜŹ6Ģ<͇аü.”­ÜgĮ›ģå„łIĖąu?ZxF„©^FŠŚ›†ŗG˜€99$ōÆ@Ótł-ģÆRŹ(gŌ$· !b» õ sĆŚ&„m¹µ%ŠŽõåĖØ$€+Õ>ɝŖÜy‰ćy?J ¤µ.YźöŠ ł!ĪycėU%ž[;ö7k™IĄVlńīMˆµm¬É>š‘=ŖÅvłĻĶžŖ{ļ5 ΈQ“zģ/#ńÅ>tń惇„­u5°{›™˜¬c.I?Ć^CØx_·³·ģšHS‰C/QŻH |·<ņūĘŗ­Ö„o&”"4ČJ ąCŠÖńó^[ŲÜ"!œ9,äüÄc½e$'="ęxĖł·“Į\ė^…įķSK³1«B·žsa'­(”Xõ-WĘzMš˜tųaKxʲ²usų×ÄŗGÄßŪk’ݵ΄s§ĻrėäJå•WwgŠVŠ#5~!JQK½‹ų€ Ą‚Žø®WE»Õ$d··–éģˆŪåäœ{śŃČ„Ż«>ųNHōkų­¬.$¾–o5ßmƒ?żjõÉü9§ź_Łš][Į$š Ęū@dlõĶdO>§–xßįĆk×.ę{­6Ž';q³qŠõ5ę–~×¼'©]YźvóŚ#oˆĮєŒ€}éĘŻJRFʛö›ūÓØKD˜Ęöą ³sq{n—wR(q ŪÉĄÅj݌„¹”įÆiwV×L'³¹ }ęąöŖņxJÓ_žł§•–&Bœ2殗:&ēg¦i’ŲŚTI+NŖw ć$ņ+ ĚöŽŃ Scq˜^DAĘÖ>ŸC˜ī|ē©h²C|ŗ¢ ĶŽ{×] –øøA:JI䒽³ėSĪZ™oÄZ5•ĖŻL·aaö“ƒäöØ<-c„Īn.,ę[ņŽƒrTŅ-Lķī›IÓ!FŌ.P–ŽU›ļ^éąßD,ƒčöāņžd8ÜŽ“Ę|żr¾ų‹ć]kGŌ-ģn¶Źm?uśžu©¦xĄŚoˆ4/WŅ“"…ˆ “óœ·>•¤eЇ;hv9ųs¢5š]xsOƒĆ–Žo,>fœß?…qØ'±XmvÅ,…Td f„źŒ%2ž³ą[«ŲmµH.#óÉĻ”I…y£qØ[]ĻhĻ, dŚAR{š“?3Üü/ą8&šŽū[Xī­Õ¤l2²’8ĶzW‰m"²·°q¢éńĄĖ¹€!zbš“-_ ķ/RŠi-,Ž/&E‡ć×=+—ŌÕ-å¹7ovūN]˜asŽ®2“>_oiwZ­ dšhĖ *= pV:›źšņ’”=1ÅY^ĪŹĒ¾é66v’h”{Ł#Ą.*>§é^”¤ų6źźÕ%Ó­i·n}£ÆćXJć9YÜMęŚ ī ¼€`ćųqŠT~—S–mg-4€6†ڹÉåEvĪymŚbræ/Ø®cF²’āUó×tčqČź}©„Ž¢ń…±ū"/9ŽN>•¹ż·©Ē¤ÉkĄ±hԜŽū±šŚ/CH­ńģšŽ„wg%ūCuøƒņ¹Ē©m|-k¤ińź××ń¼q‘÷æŁõ2Z–y½’ˆ&Ō­š+g¶»Ūę3éÓµhé²^,0 ›–ūJ®ŻŁļPāT]Ššn³©éŻżŽ„yw¹l(ßņķĒ_Ļ5ŪĖ{§kv„ÜĪģ­ŹœągŌŌM{C‘Ć¬5Kk•fpAā¦ń€l„@ř„Ż’éĘ=«$ģg)ŽŅŅ=&'‰ä]€r‡ž*厭żŸØŪŻĀ±©qšI29ŗÖu+ŸA^r™iQS%×5ņī¹ń:īś}NŹ 1žĖ/īćw_˜’“=+Ŗœ4Ō„ęy-ϟ XęF|œōĶkA£ĖqsFÓ Ę~^1W(čkzg…õ“·–ĪāFRŗš‘ōkW”Ķ9r ē§ė\5böG])[SØŅ£³‰Ń­PĪ2§œć­v–·Qļͼq$Ŗs_™ĮĘMu”I8Ł}£ZIå½ģˆē>•‹Æx—K…^PE1ÉÆ.‚“•N»²¹į÷:­Ę½©]¬É˜ū„ßś ĖÕt­OI¼"S?ȬJć#§įšūŒ+$™šŁ^fĪžĮī'(Ņ,žXĆ»]bĶi&mķŽ.Š~]ĒŽ½xčxdM­č-in&[14 Ź«’ pÉox°Ēq3Ū挕Ü4“K&yp:sƒU5-×MˆÜI<v|˜ł˜żj¬s œŒę,˜»µˆ—·V’Ŗ*įKc'*śŌL‰•ļKµŽbpx@SU"āYķ|c=Ø»"2±×irŚ[Œ“č́„ĪÖÕ]Ū‰aTM£éN-š¦yĻŲī"žK‰d‘¢Ī9č+bĘėKµ`baēĄō>Õ©jM³?±ßŒµKĶ'Ä^’īf‚Öxå±ī€N ńųž•śEaV–z‰ˆ_Œ1Ē5ķKs”ĮŌm„ūCĖ Źˆ§nē5ó7Ē’¼ŽŅ5 cƒĖ¶øg–RFUĻóØ9j>Ē?ū8jšdw:§„-¦ŠęĪXÉß&v9 ÷ksćU¶—o=Ü6hc–$U8M”ˆŲÓ1rgƒā)VX6˜rĖ·œżkØÓ4µ™kĄņø =VĘ~ŠģgńN­¦iGKiŹYHC©+“OMr୑±BQī÷÷«µĒj{/ƒüAį–‚'QŖÆĘü߆kęό ­£ńÄZ}œöB\ĖęyėØÜ@ōØq±×M¤|Ŗč/dóG&2‚:+Ī/ģ<¹åÄäąåyā”Z5oCŃ>ųš_ ų£K¹TˆĀł…Ÿ‚=’*żFš¶ÆkŖiźEę#–# ĻNknnĘ2W:’:yųp@<’:ĄńßĆkŸxk\Ōģį’ękXDœa·Ał~•ÅVZ„#f~mx– Ķ'U‚ĀęŹ[iŲģņŲ€W9ģ>•±įxxKÄzüņÜY.“"ü¾l}Oā rž… 4>ń÷‡-uĶĻĚ-¤w^ŌäH̘1žńč+ö“žgūY£ŚųÆö>ń›ÜiGGĆóJćŹbˌwłšøö:Ҿ‡ōh k;ćm8 ń¹ƒĘGq_{|.ń”>%šāZŽl±,l `8’ ‚'žšļ4/|3ńe½’„5ėIlgŠ` åŌ€pAś~#ŅæĪ7öóż™#ųZāéu­ ż/”E1C,`éĒ\€kūÜżŽ’hćßĮļ†ž<š¦§f5m1QŅ66%`Ą ›Wō*I?AšŹkC®1?[t]Aų^^]“§kG=„F!—:ÆsŒ0DZ­]KRžŹ™/īJ’g®"øSŲ®ˆŌų‹ž 'ū.Eū]žĖ¾6ųg§½ŗų’EC¬xvwMŽp“ć8 ‘€‰»_ē_­čWŽ ń&¹ąĶj/mÆ'€V!†ČĮ²‚÷šaĖŠó]FŽ]7Qg‡z®„`^¹įAÆ Ģ%x©CB^‡¾YļøŃęŗ2†hš§iäfø/éęėE»Ią¹ĪAaĪy’‡5KRId½ #iĪ6¶y9ÆÕ‡ŠŗŅtłJÉ“Ą2Ää7½zpzÕ%Üōh<Ć*¬r&:EŹmdd]«×Ž•G)-˜ó®9jć½jėws¶&ļŹU_™qZAō“yāÉå†ŚŹbgąJć®+ÆšL%džāB5RB޹­c»ū|šŒŠ’co—$ō¤¾ŃåŅ®na…”˜‘ÕH Š2­•»ĮŒė†<ūW;Ø5ę Ńm‘õė@6gk+laŒĢ¬Ŗ1xĻ„WŅ£§YmŁBõ>“­Ŗæ“y wBųōś×7wŻ“ TśPO"½ĘšĀOøĄąWG#KonĄįŁyRzŠUŠ–wY]3þ/ņSPŁ_ź0½āG:“ܱŻÜPg2õœ—Z…¤¦HŅ9ŌaŸėN‚ę°hJ«HĒļwŌĢŹś}ų‚č€H##‘]†–`»‘U¤-–ĒJ‰„c©Ōt›+HÄ®źĮŹā¼ćÄ——čoKt' ÷ZÉy”ępÅ1ŗ;µv+yķ4õ6ĪČēŚ·'sWƋ©Ę¢Åf–ęGnß`+³“ūu™žŽņ®§9aŚ“ŒµŽ^Ł%ōYdF9©¤’]6Ö&“Bł8z“§„]%Ӝ4Øćż“ŒÖ厕o{§Ü䔺žģ(Üņc¦K.©ĒŠčˑǭ}=”ß "ڃŖ£AŠb_ųŖŚā’ÖRb$c\ޟ«9øž²ņÖ2•Į£Ÿ×/ œŹ’3Gøņ\Vę‘ic!‡ķNŒY‚;Tˆ¹6;Iqp›EśW3 Ż­¬³ĖrŽZĘz°ĄČ4åcµMdjonß PæZŒ-j1j0ŲŜyiŲžvWń燭lļķ_ĆŚŒ:¦œmÖD+ŒäŽAō9ķU4O½Ż„¦§yhń_)łAžE;’źv*5’X;xš­84T”Å%«Ēų} ŹuVžšŚō]\°’&īŽsWÆ% p$feŪŌJō+kSŲ[Ū £É'EĒ+^Yj/\Fæ{ĒŒę§˜ÕE£Ō|żBÓ·ķ~Ōč6ąr>•åž&ŌĘ„2`HS”+üFŃjżNvʳ¬*[ žõ¹#Km*Į)_˜ŽōJVŠhš|HŪÕNA''½;\Ņķm”J\uč+x~K[ų.ą`ĀŁ”ņW#ėō­ļhѼah¾T2)ŗ)ŠĖš®—yšćVÕ[Rd1ݱUlrä’‘]F„Ŗ[Bžu¬ŽAPĢĄr=h*MŲąµ=V]MŲoiżŅzā ŽOc©#(A,ūĘA ĢöKmzĀśźŽS{arøż)|xŗ|¶:h²·hµ² ļFr3Aq‹8‹k»«»cŖCuŒ6p+#T–ßM2ڼ¾|쁁VįO„‡™Ē}}sØIg1(6†Ąé×ֻ͠¹¶»·Šć{ū¹+Jc7ē“ŽāZ8|„ łq^qm¢ŪßO4“b[t}„ƒÖ‹Ōͦ^A¢Mm¤d¦Cn‡üä×8–Yž&—)(?6;Ņ²Ń­Ś īš™¾lüÚ[ų­ļ.ßaQĪ@höCĆjnmŪŽ6w/‹ēŃģu;/°Ūj+4õmżįčEB<¬x—RU—A³™ ŗœyk³ųIļJś#DšåŽ—¤ mS7,möK#ąå±Ū޵“R±NLįtųm5g‘NŲÉĒUąV­õōZģZY»4i‘oŌ ō§d#ʵ ^{[ł-ˆØp@ą Æ>ŅēgȍĒN”-²E­;H»ø‘ʰNŽ 'øÆ¦ü?ÆA—cgzÖķøä67}I¦tŽŌ“’N“ZkŲļZG!bŻóGĒjš_„¶±ökHäÜŹdƲs¹oā =.8mäø†;·žĘ½CĮŗŠ·±bfK«“ūĻŲ“ķSr%±Īź××Ļ«“Ŷ[;ÄV^¦me‚ą€XPQKþVÕ“¶¾•"Óěeć9÷®·ÄzgŲ~Ó•wm<±¹Œ* ēƒhÄņĖ+kė95 īŃą9,CSOŗw[¶8ķH%~‡Ŗ]ųC_ø†Åc»XtĒp'©ć¾p+–ŅüSjW:“msc x³Īģ}ī R“Eü-o§[ź/فyIĢ£#ńž“żrĻI“Ōī ÓR8­Ė›NBäśŌŹe.ŵÓmn-das xR»‰ļŠät†0Ż,P+1GĘOń{ÖĘ'£½œsŁI,"JÜ:ZÆį“iw7’érķģF8üéd^jÆi®ŲFK”rĪI_½ŽŁõēō­?ų;Gńnœ¾&·¼’z?ݰŌö'𪌬kUš‹Ć…Õ“„æ·<*s¼VĀŪźFķA+x#šŖö‚¾ŗyń6įģ$Š,aFxˆ# pÄēüžĒAį]@ćQB[™Üu'üš®T£sÕt»;­bs v‘“QŤŪĢÓHē’N3Ē­fO³8mdy(Ķ2¢īČ ‘ŠńK„\ŻI:›aćqZ Œl{,±]ŁéŠ“³D\€@ Ī+Œń>§6b“ĀY„‘wm$Pѵ3›šēˆnux&Kø^œķž!ėU5WšIšDdqÖ³pŌ銼nųnęņįd‚PŸc Ÿ»œXڧ‡ Õ/滲]Ģ:ŒńĒ_ėW~Œ£æŠßN0XĆ Ąčø>ę„æÓžĆågläö¦©źśN›§Żł°G%ÖHM£ē÷ä$āRĢČI''&ƒzqfĻŲ.­ļķ¦hŻ?ˆVē‰uqāÄ×LĻr ģŻÉ‘ÄiūĢL=ElZéń˾{¾ćœڳ•D£O±ƒRYÜ7›.ütāØųœMŖčŅXŚ^Żis¹ÉŌwĘ{×|O)ū/‡ęYÖ".TŻ:76­użŽļš]z_‰Ń<„é›nd}CP¹gŻ+]I»~=yžX®ƒP‡lq­¬"©łc€=«Äƍ“Ųžłį_ ²Ü®š†šæv®žó«·šlŃų3HńĪ„,_Ł“]ż–X°CĄüsõėX²Gceā3uįó<öØįā.Ÿ0ö8ā¼ź•[?I”†QVE‹ė»écøæ¹Ņī"UrĪĖÉõĄķW­¢[ĖDžŒ†ģ+Ži³¾ķ±‘ ŽEāsā›;÷7k*Ī€ząqėÉĒēPjńžäɬų~öŪAĄ“¹*płēÓõśTE>†Ń§sSOddņĮü*޽įų@pUš¤ćč ņŻ}µ®Æˆī¦Õ6*<™É`jłŁN™¦tÕŌ!·O$4ČĮƒt5nX£Õmīķ#P'øŚ6:ŸŹµG=Hgģ{ćųcYńĆ āÖ×DÕÉ,Īųxå^鞜_H~Ń žhæ jš»xƒĘ‹¬`łāBGRN:`֊: +jƒķ4°-š *6€[µPæš„÷6‹.›0³–&óSŒóҰ›čtĀ•W^¹·Óōųd“G÷²3šŌš„©4¾YY߂i)÷&„3菇­¤Ųź Øjó$vŃ+‡?½|p+?āˆ/|W©ŚĆt‰0cÉu<…ĒJŅę…õ8K=I­nŒevžżėē’ŽöƒRń§‡|`”-¦ņĶ£ąć<Š~uqg›‰¢}!ū1xŸMŃüc [ė’[¾…yo%­ĪHŻĘüOå_`jžÓüÆµŻˆ†{ 9<Ųd,Pœćņ"»iK”įbpē’čž,ŗńOÅęńmܒ‰Yž㛢 #öΐņFˆÄ§0=ėҧ=œĢpś#čĻx»K–ĢYk›ć; «ƒ×Œs_2|[ń“QėÓĒ™…OrqżjåÜłŠqgˆC”ŻĀ¶šŠÄĻł²9ĄÆQÓĘ©§Ū=œńĒ6FģŽœÖG«‚ŖÓŌŅń.‚®‹e{Y §£9厾~)ĄzõرѵIŅĪY¤PU2٠Ϧ(±ōųJ÷ŲÅÖō/žĻ?“#üńšOąļ(¾ŅõĘ&ö'±9ŠxėL“Jń5‹Œ:Ø*WœzÖu#gc­U½¤zĪ©Xė7¶šf«7ŸØs‚H#ō®æž ńI¼A’©ųc„j1Yh–śæŠķ-4kDĘćmƆ>¼#¶Gb+–]OĀ|T”:™¦Sšūx;y¦æ%łŸ†_ mŪG•b –æ'8ööÆ{šõŒļ®ī® †;[g¹żąįŹ»ų× ^¶?­)b-I#ξ|Stų«”\ų˜ŲA£Ü]m6d$Ļ­~Ąų«öq±ų“į½SŅuų­/-QīJ ~ö qõąž•ŻM\ęÄfq…¤yŸģońÄ_±‡ķ…c♬ķu?ų–+ ꄁL`|ą{2’'Œg5żžŪ’³wĮOüC«üLšķ•ę­„i—ŁŚ¢’“[‡\l.>ōd°8l€NF2s×zX’>>—4„‡ā<æ8 ģē_œ%{üŌ’ų~ųbļ§i3éaDÖ7W6G'Ɨ+(?čRk¶öXŽŃobv®y5ĮR'ś7N\šS]Q•} ÄóK+lf9ŪŽ@­Oų¦…ž8›ā}ŹO}co‚KhĘ<ŲIĮ Ļ_˜ż3X3›Jńgø’ĮKægOü*š‡ģżń-tūdšļō§0–%d¶øh–UWøćņ>Äž}|7Ńõ B†Ńäy䏍ŁūÄÖµi8JĻś¾§ÉpWŅĶrčbé;ūŅ‹õ„œ_āŽ·W:‚ŪĶw!UdĄ`ŻGҾyń÷Ž$¹Óļ<5jńÜ=ĄŲź_§ó®Ģ-$y~(ē”š5g?ŠiĀ+»’·ą®žGžx“ĘwšĻ‡|;įÉģ‘5kr~Ńp¤ŹĘÆjė¼#>•'a)•Ź>^‡ń5œQńŁĘ-F&­Ÿ„ ×­ā·NX²$ œ Æ”"¶Ņ<¤Į¬źrDšTI•š¤€śÖœöŲüĆ„hõ?:ž.xĒş|B#¼ś/„Ó+o͆•|»‡§Öø[?†¶Ś†­oar4)÷¦Ż€¤c‚:¤ÉĆaœ™é3ü)“ÓeC”ź­Ū ČHłIĒn³ōMĒÕäóŻ„å–Ž#É'ėÉ®)Ģśü Ē\·z„̼ńģP2ŁB¹©/|K~D–š#©Ē$cė\®nö>‚åFž“āŁķ “3ĘŪ™ϱ¶>|HŗŅ¾0x _l-5 ?Y‹S·&b‘ć9ŚTcƒšŽœŽ:õģ~ēźvņž×Æcń ĒPxwL½†¦,Ö¶ųHöå€ó×ß½|Óā?ŚŚĶqįūøŒ3Ćņ£2q"Ž:ōōÆJ™Żž*=#¦§Yšƒ^“Ą4š®«qb—zWBų¶äKlTåqƒķōĄ®ož Cū)ü@ż~&ųö鿊µß k·ńéž2øš¾ ŖaXÖ$b%‚æ"½L5Żö?/ń+‹qMzU)«Āqؚµõ²q~žW?“’‹?„k2Ē•Ī6Ÿz d¬WE¶‘g¼XöF£xl÷©ōķEÕ.Ś@Ņ·o÷‡­sŲ®śÕųņSp-øÄdجk—i.ƒŹāYóԌPbI ĪņˆóĪp=+³š’…īµ½FßO„I4Ņ8ƒ‚Ęƒ>sŃ!Ҭ-­īMŻÄB[|(Vē$EsĻ­Z-ĆC Rž„p)ÜNlÓ¶Ó’“ÜČŹÄ.āµ[ÄlvébiłyžtG„kphŠJ·w}°dTäæ¶+†×/ģupѹ$ē‚y"‘œ¢y© 2ŖŚ«šTy‰Gµ|ńćĖm[EŽ[Ł &;°f€Šv*ųöže½¶– „łĻ y®Ć[šŌ7é+6č‰+Ÿ„\ó{›=JÜÉfcO#ē8'ڬé>»²ŽŅ}ńŽCJĶĮĒ~(čÓź7wńÜ]msiYŹ/L p?*łūXń_‰dń–„ ņ„„*[Å<ŃÓ-ļAĢīµo_\XŁŚ5“N®’>W%x=k’±¹”]‹7 cū“ŪÓłPdu¾"³{O _;"•.Øź8b§©ÕOĆŽš‹k ļötRČĄ·‚{tõ D[źvVÖW‚&,,cåQŠW9ć=?KŗÓa½“½Ł3dłJĖŽę„ȳŠt«a5+«‡ūTäF¤‚Żøéھ“šlWZS¬š–Ė ­»jń•ōŖ]ń²ų[ÅMfŗ†‘k6”2Č7¦zW“ųßLšķŽ–-ģÄO9aóc tx¦‹įŻ!õµź-4)-…9ķ^»”ʑ+ŻÅe”½YĢ_b?ĻŅ€hņU:„–Ŗ„¼lĶÓ ē„wś…½¾©šéˆ°~ēk«r7¤PŲXóĖų?³®Ķ¬§uĀżįžkVŚõ䳔Aļ”g-ŲzPfzņy§PD²uc÷›Œ{Ww¦²JRkW¾2¬(bkŹ÷Ę3w¾8Ī0M|Įń#Hµ³ŌZ_łl£÷dņIō jV×XTžŃ/l¢möšČƒæ«{VŠF†§ĘƧğ i:w…tMFÖtēi mŚ&^ź¾vš×ƏA©%Š£Fcŗ¾Aϧꉔnwžų‡gąļM£ ‹›]J%h¦@:z©ėŗ| ®Ž“[ė-Y𪬇kzŒžk)DÅĮī{/¼)įh¼¤“sĖ©s";’2{c¦ Åx‡Ž¼+”ųGĄ–šž”©$Ž#½½u¶Fł³ńӚ‚¶<óÄis£Ćg§[LdG%Ū<1ö…yēˆdÖ®l/M꣐¦Üō­,„y§‡ÓPŠ-m<Ų:ē*A#<Šõ›/ŠĀV_&wˆ”$ZĪÅ*}ĻR¶·6ŸØX\ŪŚŲF£å‰yaŽsš£Ŗų]|G¬Ųxķ"×L0|°ģł˜ń“Ÿ|V-²łŻGĆövÓ ¢•¦“(0¬øŚ}ė a¤Ż,j–2 ŲBóoʈ”:gĪŽ#澗]ŗ0Ć>É2CmćƒŅ¶¼ ÆE ¦ŖŅ,’Śo÷°3čGŅ·ŒHåeOź~#ń¹ŗž?²ī•"½Sį^ÆāÆh“]M©[\ŲÉnŃł8ū„‚7/āk^U±ŖVŠņ­+XŸĆŗ­ö¹1’śżę26ÅĆ0' Å}æįMvÓR±±»‡M zĄI¶O˜·1ķͤN')㯈H··jÆFŒ?AÅyƒxŚÉŅKæ&gd#bF»ŒžĀ¢Q±Ė(Ųś3Į÷Ś?ˆķm/£ŠēHœ"fł;±ÉĮé\‡ÅźA ŌōČķąę]ĘUɑs×?AJIįłä¶‚ĖMŗø¶ycŒź@µ[ƾ,ŅtM.KĖĖĆ%° ÆÓŌU(³xDł^÷Ę:·ˆßPÓōėK˜l%|#£}¾Äs]ę•wØŲZZŻj7Ö³ģ ~r:ŃFʧ•Žü8¼Ń弖٤˜0.•…yį<]­Ķź"uq‘ŠŽ,¾b OCš¤šŁ <Ėöģ1˜ŗ‚¬}«h`ŠD¶†?Ż284JE©tÖ¶¢ö#Č#wÖ»ŗµ¾`XBKĆŸ˜W%IŪTuQ×C29%µWņ”‘$śfµtwN•Ł$œCvīć<śłÜ·7¼®ŹźrĘĻ”ŽŽźVöŪ…Īģ§Eė^YwlŽ)Žn]c¼+d3ڼZTesŲÆVšhēėūh ’%[±óydóŒ×Wgoq­Mг §WÖį>Łń8ŗnīēLŗöm¤¦{æ>V‚Œ0WŽÄv®5™cŗWĀe_p&½8³Č™ō5²éæh0Ö(FÖćÓØĖ26PĒQ]l–0ĒoäCŲōģ€åomļ“‹¢·Œ) W=”‹›ģóCøpŲ;ˆÉP)ÄŽ*Ē#uā'YßĪ*QŽ6Y©sēŻ#Z#B Ž1ZO’³?Ćįż¶”ć›;Hb’a)=+Šž3ųĆK×uM;X—Q¶³øSˆ|µŲsۧҽ”y’›½Ō~-źžŌµ]7mž ­l•$,ž ž³ķ>&Åā’ ?ƒ¾ ŽźBąaG—ākEe{Ÿ źw÷žÕgŽĆUžŽŚ)‘ķČ'fzwé_@ü#Õn~1źŃéČMōD€Ó¼”š™FĄ} ćoŪxcM’ŚÜ:źČč„PĘ£šW…l¼Cį–żāŃuxŃå;Ü`ØģæķuØę%Ē©åž2»Ńtø-„““žQ{“ĻZ‡I“K¹@֍ CÉŽ;UĘD8Ų][SÓ­<›Ę[\ƒ¦>¦½w᦭kń}ŅäŸMĘÖį¤+ęLĄqžę¦A–?:ž>ŚjńN­¢=ŒŠŹći$®1_;OøÜ įÕr3ѽŖ#F£h§ł, Ē<õĶ}ßū7xļQ“J>Ōīᵕ.ĖA÷N? éQč;³ģ;ŗ'Wó08õ÷­h.nć‚h"šH·› Gē\uā\|ϊ>:xWPŃ|Tž%–Ų]é’0x„ bNr9ķĶxÖ„w‰"iµ/.¾b ?Ęø&¬vŅ‘ļ?¼Oqā-Vųkvį‘Õ¬%ŚKóü ųžB“Ań÷ŠægߋšÅĻĘÖ~%šķüD$ÆåyŠ ;ŒgŠøŹŅ;¢Ļļ'ą×Ę žŠ_>|lš“±Ķ§k:trÜłcˆ§Ś2ć‘ų_K|(ń:/‰¬ĢģĘĪbR^x>‡š«”lģ9;Ÿeų“D·ŌģVhTPJ’Æē³ž Ķū'Ęo‚?ķ=ąü{į3äė« ’ņĆ”Ü{ķ$0ō }+ ĶØŻtkĒQƗ‹4{ĖMFękˆ ½“·‚=½ó^ex¢ßybĢąā»£¹ÅU¼«æõŠK©ē‘[*Ģń(v'o_A[œü„wŽū‹1uĘŽ‚©˜JģĻvģ}+k”bXrčģƒoQšrœ:™1‘ųӊ7ƒčlŁŹ‘Hw3zōÆŠĻų%ēķ‹wū~Ųžń¶¤ģ~x””ŠõÕTQd‘óżÓĆ#½kNšęI½Ó\’G{­#VѬot©}:āŻ.ģŻphŲd}¹Ļź6iunKHŲm~+†ŖŻsć‹ß Ķō-#[łŗ„’{YqĖGƒ”Ϧ?ĻJüŚų‰į-;̵”Kh·PߥZŲgi†ć‘ƒģFAø®bdĻå;öĖų#{š‹ā<÷%®Ÿ„ßĢģŪHeqĒś×ĒwŪ ®»ĪHC··½vSŲäØŁUM¶É„¢WrøyĮØÖ'‚C±všHź+®;l„„Ä‚)CJ9Į*]ŅłHQ¶sĄä `(ĪŒ:³6ӞG&„ņŃcIsœńA“{’ˆä v. ķWm­’x»Ÿäõ čŠŠ“r+˜ä“ä݆9ėžĀæ`æą_µå×ĮŸ‹gą~©©ŲOįūūōŌ4(grZ ×dj{ŗqI£²™żÅų[Å:OąŠt=>iJ’¬č—üė Į’ B„qßńÆl¶¹µŌl–éŌ\Ē)0Ī 08 žUĆQlļ,bÖ-ÖśŽž>uĒśŲ\W‘Ž@a’źÆćž ×ū ß|ųŻķą;;SąL÷‘$k“­Ó Ėć$ļł#µy˜™rŹģõłéłŲ‰JĒóÕtŸh·KĀ…ƒ.vśOØ¬Æ jmatĢ<Č·667jīÜĪR=’FÖęłć‚«.]3ÖØßj³źsĻj‚X”Ī āÅDUō2s<ŸR:óɑ B¹öÆ·?gOˆ·wtŽÖ/&0X [6#>`'N;s]”Ö†Mké뱬ČåøŚ·É ]7ńŽGJ³–“,–³I!ĢĻéVµś¢Ē".ł—ŒĘµŒlO6—E-CĆŲŁŁß“%„uŹ9'·Jī¼)}«›øēūC©äœv«%KSDk:}‰Ė K†?)=+Ņ>Ū fY%Õ¤7v„šL# «Ū®h¹„Š?쮼3-„­2ŪĶ˜¬§8_jćō]'ķ–&źąI·ÆŽéQĪn”£iņŹŲa&9Čõ©­,m”ƒ÷EDŖpyėRä|¾ī噄2«cpž™¢ūJ‚ŅѝNÕ^1ZG`0Ö{1•˜p*{›ÜZ¢ĘK3sź£Ö™a.”źB„vbqҹÓn§×ē¶vAĻ<*«ŻĶļŪÜčpŚEę’(œÖŻM LŖ„ę#¦)X#ęh[[O“ČčŲ#<Ÿ¹U“ūŻAn±b[rœ’¼ā•,ŽīĻQ›Z²øG,ŖJČXcšļ„äÖ|*!ŽGµ‡!|Õ??NĒš„Ź„ąyφ½äÖ2\ „V „® ÕØ4MNg v6@™ǵ1%c„Š4Ė›}QCŠeF:×_¬hsĻ(v`…ŌļĒjÕ@Ģņųv- LƒRŽõ¤øņŹcīŒŽsųž”Ķ!’čƒ"Ež÷šÕ±²Ö/¶=³ĘQNræĘsYƬ*(dœō͉Iš¶_N»w9ļŠ’ėÅ/ā F #OQ³¶ļĒOēS%”¹«©XŦ[Į‘¶żĮėT4ĶJ?P„ĘĆĻ$Ķe`9Ÿ.©wÆźMsX؃ /Cž¢»o‡mÅėĶ”,1ȹ gœŠØ=ż‘OģĖŠˆːJņ½wIµŌg—H(e·.69ž/󊄣ćvv'‡Ķ¦›»Ū€čć$ī"¼‹ĘžŌō­Jāā13ŪHDŠē¹ķJEĘ=‹~†īņęV/"¤D.pŽĀ½pĶ-¦b’6EóŽHłNKRxęÄØūĒ99©<9o¦Ž’h]hW ŹN~ZKĢOČõĒ×4›€÷Ļ·Ż Ɓ\vÆšŽāźÖUlńzŠöw<„j:ĶŌ–ŅĘRŪrsĪ mŪéZ3ÜJŪŌ’p+lOs¶M’JƽF>ŸJĪIQn£]Øųˆ'Ž)„gF™@äć“Č«QĪ ¬¤)ĄĶk05žQ§Ķmp7\†eõ­mLæ‰Ū|ĒżķŖøjlf„Įö‹S÷”ē5ßhņA¦«ß<ɦ0„fTw2üGv|@ŃHÓ.Șŗšįļ„“éפ‚9`ZFĶZ}„ĢQF Œ§ ō§ÆŸ6¢°Ś'īw•rOAķA‡”éŠZhWWc‰ć½z·ŽH> ³æÓcyõ0ėŗnB€G#xrŽ6ü8ŽQŽ’-{‹‰īļ%G »Ļ„hiZ­ĆÉuz¦Ó§ZÜņ-¾Ōl“ėwiĀ‚xź>恠i戵›Č®—CŠÜZ¤ˆw:©'8ļč+IŠõ/Køó^VŽāĒ©ģ_³=#ĀŠ„ęžØ’eīĢxÅ3PŅaŽYŖü§ qHNiį!.aŹåIŪÓ9®'Ä÷¬O¢Ś\gRFÜć’ėƒLQ]jćPŌch`ņL‘3„ł:Œ÷¦x‡ĆÖp[jvš<Ö²0FČ9V’&‘²F姃ā±ŃtßKyöŹccŽCyü’JÕ×4KżOmō—0[œ…ŚæZwÄė36}³Gå+(łææLµŌ ±Ži‚ė–P#Ę®ļ~ßuwpĢXńŒņ*+Y%L:Ć9~ŠŽ.ēµč{ąµ¶’HY0Ą‘ŪüęŗĖŻ/®` ¾ńU9 bŖ&Ņń-]fN»Kdäś ói.nnu`V¹IwzĶjĘrZ»ßźZÜÖ°F„ŪlŽ cŌW±ųwJŗŠ£‘^o5\üĢsŽōrŠJęÕŻā\ĀŃ©a#„P·ÓF Xn-Žō©ŪčZ3A(fD_›ŌÖ :]õŻŁ“¤rĪŅįĻØü…ńŲóæ^kzn·6›©Gq²dY"Źä0=æQ\Ż®™­Ś¬7Ń[LŸ¼)ć4ģU^“Å÷§J¹“ĖlHšGmŲė^oįĀś\­ŖIn±\8,ł'>¾½hŃYłW—vśŽé#‡–Ę0 gŽŻż®ą¢*³ēéXIÜ wņĆiim”gøn\g€jŠĪŽŅ̌śc¤Ņ2g ZŽ“vjč’;±śbµRE†ŲČņGęŽ:š –Ńddˆ2FzכKswotnc»•aę@ß)ڦR±¤S.Ē®>öNĘÕ®IBRkWHŌß^·KØŁ! ąœ#·ÖˆČIwˆģ§:„ou/Ū3ū¼så×[e{k.—]ņj‹jäZĢv6Æ4 ) @隿 Ė-ģ,¶Ņ}qACuM";ØŽČ&s’2:_ ik§™"U„–Č<‚*cJę¶«yö-B;Kõn]ŹżåõśWā—W¾…-P} €KPt(ö8MB-CCžI­Õ­£ˆeŁųWs V:ž‰†ņµł‹īᇰ¤nkč–ߣVĶģ6³r}Efė$ŃōYćXcHŽBw>r ©q*1¹‹qā;kY-|—ŠV“Ÿō5„āŻBē̵|0ĄĮčEQ¼iœEģjwnš]čyŚĒõõ«vś«Ÿ4‡·#ļ ĪUŠtś#m<ŪŽšūąŻŸ›°Ŗä·{fŅ&¶ˆ`u$ß½rÕ®‘ūē†Ž ć3Ø,]{Ó£Ó¼½<¼žāg¼ W÷7:TĖwrš°]Ŗ=pUĘtGō’}2lÕ|Ju¦¬żļ…5äæ[•ŽŁęE’pp}jT7K2}ėĢ­^ēōf ¤¢¬‘¬śADg*äż8‘§éļ.Ŗ±Ķó…Ęzbø^¬õcJĒ ZźVzƈl|5:BŠ£y‚Ü·ŷ𯨼[šMŅ|+įmL·–Srßéż_<Ö°„qJŖŽ‡;a§čš~”§ŻxE,m0Ę Ą>® ®{öÅż“Łā§…tÆ ė–µšÆĘŚI×<;$’0·`ĖÉük†WĄ`z‘ŠŃžaŸ:ŗ9nŖ¹+öj<ĖļIž)š^ūLšŸ‹õ dx*ļ]Ó.×mśĀœ9ź3čsĪkŌ|sńĒā%ꑬxgGÕ“_é„Ū=­Į¢QŌ0ĘÓŚ¹åÅ:īö<·ÅZ|3·‰t+1Ŗ·vт|ÆWQéžßżj­¦ÜZ߅ŗµpšž„VnÖ;éM²Żī›§¶d »7LūזéHśœŚ}ĮXäņšx ŒtüÅAŚ‘ķ ¬“msĒŗ?†µkßģūkاmł d÷'¼KYžŽˆxæÄŽŅī'Ń,®^+É÷`D»ā©H~Źż ü=Ū MNŽC Ņ//”`>£šģ”Šś="ö n.o0žb“Ó4ĻlšŃUčiF,IęĀįŽ_„kAł6ē±Iš:JĘG‰¼m©Ł#¬Ÿgø‹. ÷Ą®CĆS%Š˜ZMēqļŽ³RŌÅÓģ{źlŃ@~@pzŸZŅ.÷;9É涊¹¶wof!Ź 2{יk^°ń~•āI.ī"žŅ‡kŚBGŁķī+t;Lą¾Į©]ĖØZ}ŗ†“8/ ‡Ø#ęÆå_hxĆćn§K¦iS_[O,¶ØnpŲ17BkŖ™į×§} Ś\śd²¦«§\Bųʆśz×Ō^ńžŸ®„²Nb»B21Ą|p®ųŹĒƒ‹Ć¹#č­#Ć·šÄ$0Nč‘4ŽČ ņŠY°ņæķ=ā |;‡ąg‰ōKiÆō?ŲÜ ›€~a$,}§œ’•l|n-%V4ŗ·oĀē?š×ƚ?Šēŗ‡GÕmļmā‘RTŽ7!'”\׌$ųqgmeo¬ųbkū„kˆĖnóŽŃ–O23‚å‘ņ5·ÄYüKć7Ńü©lķmY ”Źyg^8öąÖ'Å--"³Ö‘ö0~ųōVƒIĢśŒ5ęXż«<}kń?ĄŸ|C§„¤ž"šŻĢBKŻæ;D@P›¾¾õŁxķd¹Ó¼1¬Ł‘”‡ĢoBS·ćS9¶īĻJ.SŠæeß Łx÷ć4—Zļ‡īüAį N7WV±9S,’©Óœˆ®;ž ¹ąė_x7ö ųMį›Yō ==¦-°¬p°,O$‚ķÉõ5É=®<ńneõŽ?Ė2ŪŽ4×5»JÓ’‹?%¼=¦ź:-¼V¬č_`iāŗ¦›S½Ņ5ø¼č­Ņ;i™ŪtõĄ™żhéµ #å?j—śe“’\Ļ{ØŁ’[¦{l~•ż=žĻ,Ń›WšA%¶¤V-gVź$`¹ ’9®Žkn=ųįĮŅĻ2ü4©ütŖĮłø·i+ōč’ķÓłų¦Śé±ė7O:\Źa“9ó“;Ōd×­E¦ŚFHP’y$W›9-ģ ÆI52'd“…#¾Q„*q»ė\ī”įŻSÄ:>£¤źL¶PĻMČrþ1Y6mR,öŚ÷öµųõūEüų%šwā:x xoĀPÉõ”r-ÕšŽo ¤©°pHč+åNmU¶yx^Nī˜|בń\/Āøl—,&üŽsž½ääŅņMčpŸ>#„ŒŲŪͬŒ¶°ź{óÓāųM}ńQ¶Ō5)īķ“|€&ÜT·?{#šõ°“Ļę?¤B®:–žŹ-æY[O¹/¼µńĮzw†éœ×T•‘ł_į„ÅBŠ[ŸUųu¬-­tō²øµŸt¹1ž *3Ÿ„v%KEą¹=Ey5Łž€šÕCNņ¤¾äX·Q °@3ļėV­gņ%ŽFWeW …ś×,Ļb­µ>aų“£[7Š5MuVEšļż`fć#Švļ\÷…üuā}B ŌRÉŏśÅĒAŸZØG©ł6yĶ)“§āš„£ŸV±EDqB™’ćʾHųƒńNļĘx»[h1,ōĀIŪžÓóÉĻłō©#åeM·©Ėč¶:–±7Ś„q@Œ>ė½wĆŗµ²M䂳³n<}ć\5O{.Ću:5¶D•„źśŌsZĒ0+$’—>¼×Cė°ō‘ØšuÆŁ–ÕsÕk•ŸĆš{^Aœń‘ұ±Ó:JÅ­Ą:}Ž©›H¢W}™÷'®kĀ5ČōØ>/ßxf+©ģ®ōūØćvHaśWE4xźvWGļ·ģUńH½šī„š¦öłfń2·ö…˜ć7+Č8Ź+Ś>1é\Ž]ƟeŗčƉ‡GMzt£”óó„¹Õ–āÕχž Ė•Ž x<ŽFvÖ?‚~$ŽüAų©ćųš]CĮsųz÷Hņqūˆ!8<©łB’‡zōØL¬ć†aĆT„=å$ū]XžA-ü9ż‘{­é=“ivŚ„Üv†ņłVŚ?,WY¦ź ę±Éó•A õ Ļó'4Ū.éW²®³=—–ļxąl\}üöõė0ė>ź:V³įMÅöśŌS«$0Ś»Åp3ʶ8äfŗTY󘨟”žÄ_Œ:α”>›¢KĖ<3.$īéÖ¾„šõōKCci"Fü>ŸJÕ+ xō7.¼]wb—¶6w¼Ŗƒƒ“uŹ©[kšŪ³ ™2>e†ŃŽˆ’Fŗœ:¦ĒßócÆ^µźZg†M½ˆŗrŅČŲĖĄö4ĢåcV³ŠĪė÷‡©Śx¦čśzźnénŃ$ź„›'°ō ęžēea¤Y_č-"j6ņE3Dń:`0ĮśåU-mm“ŲüØR6‚3ŽyļA›dŃi‘A¤č¬Ä“ĄĮę¹9ōņ· .ŅČN9?v†ģ`uznnˆĪ¤<Äēō©mo/,55³ĖDĄåN>ʃŻķĀ\ŚIrn¶DĖÉļXאĻ>ČfG€ĄŠ=RÓU6v_j>f.åLsļ\/Žu?ķÖ Dˆ0ą§Ö˜łO4{Ė»hDņ3ŗƒ Õķ`½—Ķø%Å"MilcĆŖ!ˆqŅøų5u]4J¤F€mŲ£ÆŅ€gĢķąŪ\[\4ĀŚ(„Žõ‹žÆT†ę µ¬›J‡”Ŷ–‡#muoyÖóBę]ēk稧XXĻwØŚY •mö;(č=h3lõYtvš¾›ŖY yn”« »@f_NkäJŹŹ-RäŚÄ-NķŽV9FĻ„ęg§xWA¹×'K‹Ę)µw¾}+C]š¬öho¬ģć[c{PJGŒx«ĘĻö¦ŠnRW™—ØŒįŽ:f™is,öV÷qŪa*3ęø?CL|Œ»¦·?k–Ķ•T2“·¾}qšŃÖb–ĘT¶)·1… ž’­+_š†tK6īŽ{¶o9Uœeyčz,ž# ö[[hĘq6Ą{uIō2ZŽÖT2ķón7Ż® Å>Mgˆ5š5Ž>qĪĀ „ŠóQi£é’Ķk}v³J ·!yėśō½VŅīĘ;E‹ĄėŌŠjPńր²©}6kIdWĘĢżćź„bxwF¼kÖż'Šä1Ä%€ėĻįPāėśp“KŻRŅ}÷]6?A֛į?é6p<!Iœīśj“Kˆx·L°Ō§TÓM£!S`„eĄēėļOšFæ‡Æm£’Ų“1ä @µŁžøŗ=®²c»ƒŹge-°¬ŻSąüzĄ†śc¹•2ŹGŠ8®‡Ām~Ė­Žč{cK„Y7…ĒŹAĒųךĆĆ:W‰c¼·¼7ˆš³ģøMƞOłėK••Gˆ|#£E„ŻÉ{,¶(ł ĆŽ¼źÓƶ­,bźāćPE äĖ8bOQnƱķ'‡d‘\]Ėŗ,ņE}!ą]gK‚ŪR²¼·{ØįȀlł£‘®Ł!x”Ž=±ĖŽIĻzóß_O­č¶ókvÖDx®d\S0äsō©ø(x»į‹ź¾:Ÿ\‚āĘĘ[©yAŹg8ŻĒn•ē?ž$č>=Ѷj֍£,žo1Ž z¾sNUcģ™m.<[%²ßĆ-®•l©$W¦bKN¹ćołėUüL¶:ķœ:µc%Õ“C+!č ī KhĘNLJŻxCO²Õd²Ņ."žÄ((6w¢±Æ“Óg*ÅrHĪbĆ85\Ė©•̧šRźf{°Ė`v¼¢óĮööśˆgÜīœ€œVlŚ,‡Dšįõ…‚xmŠä é_Ri³ÅŖé6öž_¶č?{Žg¦+­KčZ±³µtO.ā"6©ėųוųÓQžūZVč¶VŠłcpĮf'$žŌ§b[Ā ‚ņŅćPŗ¶†ņÅXķē\GҼŪā7…­ŅqØč¶W`ķ•sĢžõŃ Īq­į¶°¶ÓŁdó‚å˜7>ÕĒé·ZģW‹RŻÜX³ *œ[–™éųib浒k‡IX dČćļžŌnmb‚HdEhŌ${ˆĻ46DßCĘ~&J¬Ls^+^–' x5‘šņ8šöŌ\$Q6å~ šŹR¹ĻĢwŗ‰®ī~#‹=ź2ĢŽTźAŪ“’F@yƧ¼}mxŚv•M-ĢŠH?tžx-éßō­F‘gξ>Ō5o ¦Ÿ4öĘM·p¹éż+ɼe>»«xQˆ†(ōļ8āR}=zS7±«šŃćÄ¶ņå“ Ē9 ⾇‡Ā_ŚŚuÖµÄRՕ%}üäōü(ĢKŪh–9#Ź+m>łÆ,Ō— ¾äšŽ‹šõµµķ“)kfXl^„‡Ž±k””’čy ü÷“jW‡-! n<œzVNµ«Nö±­Ū²ņ’JĀŚ„7<šĆwRO#°3łWOą’Og{%‡ŁžHš’(’UBFŽ'µéš²_Ŗo‘ŽÜżó[Zµ€Żž;v W8ū޹5¬V‡4ćŲąŸUŅīŅKøŲB$ą„Īā:©c•,’ElFąH$޾ÕV2µˆļå}<ÜI q¤qŪ5Ģ^kf[)ÕóKm/Ī>”Ó8¶÷+’åwvīk¢[ŖaźŲ¬¤€ĶštÓ²%RꠐTSlļÆ5Iˆ€ "Ū€;ę Ļ•†±e”Š{3źoü<¾ÕZ6¼’ÜĘ–=8“śWĘõ};UńĶž‰qu 11µČr#ܧ“r+XŪ”|ØŻ¶Ólļ=s޹MFK½:SˆEē-żŹ‰ ŌŠu( Ā[ØÄŁĘrÕčÖ1ZO(ž5Š$gŲW,£Šč ĶK.^īŽ#‘‚Bŗó»ńÆŌ|3u Ō %y9łš~µĒR•ō=œ5k—‡mšYVÉ]·I=+²ŗŅŽ•ngV[#`c!Õõ MkL¶{ĵŹ­#ĖB0I©ŒŗGSŗXÕoš'“ó/$“ĖEō¦¾łż“¼ t-_P‰d¹Õ.$fw‘TõÜ>˜„)Źŗ‡ÅѬ\«j0%ĶŌ.Į€X©õĶxŽ›ābén4’µČ©4mór‡ó¬ ŁĮėv×1Z„…¤77ˆÄ!“9e÷bj}6ī÷Oŗ“žź mtōBŒs…•øž_Ö¶„Œ×_ķÖ,]!ŠXĄf`9üJO†2Śi#OØ=µŌĻ—%ń±zd[¹#Ó}ö„ż#:ēÄĖIn®!ŠÜNdó‰ósź?ĻZü¶q¹ä”Sœę³Lč§KB¶ †$…€ūœ½XzWCįnxJńs›S L‚D‰ŸŗEk\ߔżhš§ˆ,5­&Ęö+˜ŽGŒ 8\Ž‚»»YcņĖd:‚s‘Ö±«.8Ē[’<¾.ų{s“ÄŽÄŽg–œķ^0Gć_™~Ö­.õ++5%iü²’)zgėÜכQŪs¶ŒžĖOńĄßųgÄ÷‹x‘Ēq p&Æ9Ƥ~9Śhž6µÓ<[§Ēm®”n^xŹļżį\žĒ56ĶžĪĒģüƒöÆµŃµĶö?ų‰Ŗ¼:]Źyš-$Ęv#Į8Č_cė_Ńżõ“ś&ŖÖ-…š ¶œ®k¾»»RZĄ2’Ōūį‡d×tƒ§Ž ÓBQ‰å—ėńŽ“¤ųƒEń'ń¤ŗ]ś:”dB»¹č>b±5Ķ8)EĘ[3’GłŻžß²ž”ū0üyų©š¢ėNXtķ>sw„Ģ/ڬŲežppqĄ ×ę]źFų]Œs†9Ö¶„{jsMŽĒ Š2)ŖĢžYLnŗóZXz¬‹ Sä޽*'¹ ˜v(ē°ļõŖŒnQVįˆˆyFH œsSÄŪ”G”}­‚޵ŖVģZBĀrHĮķÜUżBĶ5}.ęnVį@’‡ާr‘ļ‘Dé³ūĄ’‚žÜ–’µGģĮ'ĀkI7Å’)›ż"īČ( !ž÷ŒŽč3÷«÷*ü…>S/t®\D¢ĒŒų³MŗšĢO¹·'r‘ĖŠ×ęÄ_ 6…ā NĀ8ä63±øµ”€»YGóüO„pŪQ5sņgž Aū;ŲüRųz¾&ÓQnµy +:Ęø{;˜¾ėē°lł×ó©XĻgu}¢ßJØŁČaøP¤ma]T_CS9É`ņ±øažµeÖPcßµvĆcޤJkĪĒ,Äņ; ’•ī¹ädŽjŒżņ1D8#®iš|Ĥ²g"ƒhlt4D¢ZLŒ õ«wvjŠ+©°?ń—CŸ*ļß0ž™+cAÖ5Ÿ ė:W‹t+čģ¤ŪĢ ‚¶×†_oóܚäŖovʖ÷„™…å–¾nż®?göŗżž¼{š]“²’žāŲßųzīh·}–ķ`Uŗƒ×‘Ī ué^uj|Ńq"k©žm’¾xƒąēÄo|7ń^›Øčš®ŖMfö·#-ŠĢv8ČÆ¾ÉŸĪåI88ķ[)hgcÆš÷ˆ’H·[p<’*źõ‹Ń©Ī³X:Ų;8y6ŒńżŃJÖ9ĢmNĆĖxę†EsĮéŽŗæ x¾ ėÖWŃHé˜YS8 GńWU9h3õįWˆ-0Ģ:5j¢G1ŹÅ„J·M,{¶Zī,ōū§Hī$†UĄØÄLÜū",-s$g+÷}ĶsŽ‚×Ę:£›uŽāv1ž ½•_Kß6½¬ZDŒĮ"b€ūĆźmgĀz&œ³Ė‘ē #o„ČTec–Óµ.¼-­Ģm–6XĀåęätz\ĆmBüG»óD‡ģ<}EfѵĻKŗ’+ApšF©nI,éT`ńEÕü¶śv•,ń,dn 8`sHoÅŚĀh·ŅCµīo£a” ~?{ŖųFĆV¼¶ sq““ąķćAœŒūū&ÓSk'‰&^ĄņWÕ/„p±S†ŪĪMmĶb9YÅ\Ū]ėZ i“ä9’£n:žB¼RµÖōØä†ņŻķO½'4Rƒf^“«8žhŽ6’-§zbIr÷‚HY¤³³nis—Ųś‡Ćž³ńoƒmį¾³AvČć§9ā¼™|;¢xTøĶ^¬„üĶ÷O§éK˜¢”Ś’öÄ·°“H v¬›[WžģĖ)(ˆA\jē]<h·.Ѱ•cŻŽ“l584ėI§l ‚6Ø<÷ ”ŁĮA&£Øk un&3—%Ž~•ÓÜj–ŗEž›op¦Y„"ągÆ4{n£"FHd…@I]Ć<Šåµ~ßl-ÖO>ßvボ„6Tec*=;ģqJöŠ$n>cĒZ­5ł›O™®¢e˜œ(ÆÖÜ®ps™`I•"vEē[µ†õ„MGŚmėéAGˆ<6iņD/Ż-!J±‡§­WŅo™>=ŗ`3Ņŗ‡Ō7ś.“"¬`‰8Čō8ü(—ń6®ś¾¤-­,’sądnæ…T±Qű?NOZ‘NMŚk™­bEi$郎«YxgģR•š00ŲŚEŌö:ŁīgÓ¤·°K7ø‡,8ŠŌńޱŖčŽ Ń„i¬³”’PĆsōłėUtF]"ƒ^¾5ßw^y5čŗ·—§Żźóۻޕ+ex^Ķõ­"»š'‡µ kķI¤’ŠČĖ'ĢŹž’•{’Ūt«÷›HŅB‹ĢÄw=ŗ’‘YČGž6›}oŖ5ŠL­n³p9Żų×Wo«éžæ³ÓšgiŸØĪIīj@ö[;8ŽBq•Éųj-żĪ™,N|¾Ō©\ņŪh®µø¼ż]Ć\E„ĒŽĪ8ąÖāÅ ÉÉ'ȬäśqZ{Błŗε¦Ā‚å”TD''޽p‹z‹"«č§Ÿ„g'ŌØ®„ėŸŲ\ķ³··ŽĄSĪ=ėN4›1$kŹH~œ‘\ęŽ'?&…ŖÜ_\M ƒÕ铜Õųµ1*į„’Žøü bՊTū –š¤«o*š稯DŃ495 *öś{ˆq·³|Ķžą{R¹J™Q¬¼ČeYD=9ķ\ę‰ibŅźöĢ‹vŠvy¤q’;R4/čŚl4³ æ.ź#£„qŗõģņj+c¤@šFī 8łUy«€ģnXǧŪĖwe©_Į:Ę$ī¹­ YķµˆĘŠŒąŽ¢µVX±°žŅvŌ¬\ŽGZÆysk”ģ[h¶’¬ÉūŽā‚”IüLšŒ}£”ĄĘ}žµÉĆŖµ­ŹÜn ļ I8Ē4ŸcwVšĶž³Õ­5¹*„Ģ…UÕĘGgŖhÉē¼Ļ䏻ƒĄ5.HŽ1čvpßéśĘŸyc©Ū%ēŚ ņČn6ó×üśÖ ^}2XŽ ¹M‚(UBzb—“6P: />Ól#Žŗ½yljü>mg„“‚l®qĻŹj\ĶclgXĮä*ż¤#ķl©„hĪāņę‰00HļYJ­·=<_WQR£)=’Wo䈼Ū+IŖńųÖ”āÉUŚÖÕ !ļžµēWÅŪD_x?ō|«ķ”™gqJ UMīŽ¶ēč—[nśŪTņ”k»¼¼’öõŖ« Y™dÜŖx5äÕ®ŁżÆG®X«$kŁ”?+2±%Šl~8|mŠ|#–~^\Ś=“[(ņÄāóYć—§æ­pM+g uu§»g÷Ż[õ¼…BdŸÄó[±J…UĄŲqƒ“Ž”£Š9t¹±grfÜ:ŒäW‡kŚĻ…|IØK„ū¹e*’r•8ĄÉĄōĶśÖ[Hc™ ‚I®ęށ˜…IĻŅŗ±6<ßƚ“s_-„eÄ|nĻÆ­t‚[x”ø’4ø CŒƒ]G-h+kś}φ¦²ńŸ…“ō“SŠ_ōŲcχŒźqü½ėčļüųń_B>/Š;¤žŠ·)y”yśeĻ@JuĘ}:×L"|Ö2\’¹ą~ųļąvƦAØĖ7ˆ<Ä }NÖ6ÄkŽ_Ćֆƒń_NÓ"·•¦’Ę`ć˟~įŌc8,Õ“Oj:͆„s ¦ķŅm‡‰cŒjż²ų#ūDų‚ż'šŽ¼–·V¢ ŠĶ);ŽF óéÖ¢5ŗ¹TlŚ8/iZ^…ÆMÆŻ[ góŒŃ0ą9=yéÓ5ķhžńĒĀŪ~[qgIe#·§?„mG³qHłgÄ~²ń—†õoč·iš“žś)ŚMŠ cp_ČWU?4Ķwį֏§\Ftū… ÓJįDrG”ĀŸsż).·.²?Oa?x:MĒ\ų}ń F²ųµ­$V·vČd…¢I8ē‘éĻę§üļā'ˆ¼eū`ü3ųuāk9'šw‡d¼{Ø1Ķ-Ę(½W1ƒĻZrKŁ·éśŸĒ|˜Ė7ńEc_ĆTKµ”NQ‹ł­}OĶ ń.”Vr|įĮ÷®Ŗ8-dß ä}¤ŠRDÆ-Ó?ŠßŖ¦|Ė/½G@ÖoG‡ć‹ū2c€¬ä”<¾µūiū ėÓė÷šoĆӳ뒫%…“GsI“g =‡jōh+h|ēeŹZ•¶åMżŚŸŠ/ĆßŲæĀ^=ųQsiń€ėkyŖ[I°Ū¹µ’Ą@*ܐćÆŹæ˜ĻŪ?ᇇ>ų·Ęæ>ų³Wńƃ-nT5ē)K£ƒø_•™OMtTVGņƅ"ā8‰±YliÆŖŠMĘK]T­¾ŽöėÉu>:ņåŠ.¬aš7µKˆĮƒxĄepkÕ4’5ķ”(§ sϼ¹EŸŁxjNå/īŻ:+.”ā­\/”»ˆ·Ö—+:jč'ų‡¤„ʁ&¦Öó8¶™[ šroĄ×Ķ:&ŠÖāŅĀ·¾`Uœm‡žõÕBžŗŸÅŻ<uēŃ=¢jŚ>§āøĘ¾’[¤’‰KʆłN°Æ³5Ÿ‰~šo‡f›FÓ{9­Å²:Ņ€°Ę޽øFŹĒłŪœŹ¦+:՝å6ŪõnēĪg„5ėPFņāÖa;MĶ!<ŻėčæxSĆéį)bt·€F¹k°9䟬¹qm”żEąg S†Y…HūÓm/šÆówß±ĄųQ­ā¹€Z©eTņ¶†Ą\tā½¢Źi%E-ĮtÆ.„Cś3†QZvŠČ+)$‚EW’ūū=žPUåN€ōĶs¶V"\©£ČąŃõæjš‹^Z¢ŪF’Č˜ …‡½q“_&‡‰{-™Ņõ Wt.Ķ÷ż=ŗJµ;žf8{Éłžń]ųć/Žźzv¹q>–ź« #h=’„qvŽńßöŒ†«6ŪöķAœļgń؝cŎZäī{M„Śi©-ĄØõ8Æ@š’ŠtˆŻÉØ(WØĮ½ qN”īa02] Ż3Ä~Ö5”ŠcŌQ/J‰˜·cĪ3ZZ¬hŽ “GŠęŹłw.h\:Č#w®yJē¹N‹D·w]TƵQ¼…"X®ŖüŲÉØ4œ4Šź­¬ŽŽåŠį•š2’ Ɖ~?ųwQŠ>-é¾#°.­ux®–ć'sMÉVśó[Ņg‰‰§t}mšÓā4ž.ńŸ…„’žõņßķńŁĆötń®“3źŗn·«ŲĖc¤qøČŁVO#Ø?vŃ×CŌĢ1ō0˜•ź»(FR~‰]ŸĻ6“ouo§ŁŲ4†wT>d„ņĪy'ó5ŅéPI—5ŹĘ¬æyńĀ½Ź’#k͟GžĶ^°ńļĘ= EŒW–zI7÷ ƒ~æ~¹¾»y9’;KP ä‰@‹żŽ8®ė&«¹·•pѤ,‘9,O÷~µŃhz"nÓ̶IģY‚–ī3W{hxõfzÅĶĀq]ZĆį­4" y‘ˆĒ$’…qöśm³iĶ óŸŗAĒjØŹēfwŁm쭚) —œ¼RĮ¬ß_ķ±“fUb5FRÜČń&­X\˜'_-‡'9«^±ū-ĆI;2©Īpy ē™ßł¶’c`G¹±“ńŸzēne†Śq=ĆH±S(œŅÜŖŽ(µšé"@ūƒŸā«3ėśr6ĘQ$EHär§<·2™Ÿc&©oļ+ņY¤óÕIą~X­½UŽöv±˜“Č;~ńō­ ŒÆ\ComØZØecŃ»-yö™©¾™4 •l0ĪG®1¹qG„j^=·ŗX,vI ŗēŽj;+›I£a#q‚A<šÆfj][ķY®ķ¾Ą /‚‡')ģ)Ö4+(p4ĪqY¾ĘRģvi60iÓ̬WÖ¹ °ĶD·[“$ų¤c4y—Šl+s,L 3m’J⢳“浜a¤ĄĆm4V†“Io#¹[½ĄB=Ū‰<īļX·fµ‚mNŹO,#ƒ°ŽqAJū#OTńī–žŸ^3Iy:”żŲL“ĒąfŽ({%©Óę¹ĮhŁ6ķČ{–†‹¤XŁ“”(1‘ā¬ė—¶žJ#IPKwø: ³G-įļ h7Śķ½Ó[Ÿ/ēUe õÆSń‡ō?ŚMiŲ—PSĖą p>”Ó5GĘ>8±ńo†®ģtx§Ō„“ŽQµHȕźOAÉÆ=ń<ŗÄÓCw¬ŖFć>@#ƒž>ŌåÜN!”i÷6z“’NŠÜ0,Ē$vJ÷D]v;©.“ųüŁ|,ČzzԜµsĀw3Ż[ÜA,g`yaÓé^yā+;­;[›ż>ā8[•]ųR}1A8ėŻ ķ9„‘_Ž`:UėÜŚł ¢–C #,œŚ“g”ŁŻĄ^źčĮœō™=ė6ņķ4‰L ©G"씓xśP(ŹēĻw’źś†£{&¤-¼™$>RFsŽ’‡ŗõīŸyw¦@Ébæ»%:¦h,öæü6K,u9ef„*—p=æ ±®ų J²¼óbŗ’;@r””dŠD¤rĖā8“‰.N–ńŽąŠYĄ|PÖōū(4mī]wQt?jÄ œcuw^·ŅōM'F²’Ī%œ¢¹÷„ušÕĻŁ5"Śm‘™!$͟•Īj xöóLŌo/“ķø]øU÷¬lоų’¢xĶ—L—N¼µ‚ĻlrBšŒć”ļŅø_Œŗókśʗmll­CZƁĄWśWāzŽ×Xž‚ąŽc'ƒŠŹQ±ZžĆąĶgU¶šĪŸŌqˆ‹#`lś×—ųākŪHÜ=²`„©^9žŖŚ+”œesę–}oÄ×Ó-•³©Ø^ƒ ōż+Ó<'„˧Ū$š¤ .S“ļ[ĒcX½ÅWmscuaq¹Ī<„sz`Öö›ā |“{nÖ±"üčŽō¬›¬hĖįū_Ę.“+“Į­æųC[OÓm4Ū[m;ĖmœśjLœLĶį׉<=ā„Öõ˜Åŗ€%¶ “£±cÜWƾ³®O­ĒŖEwäŚF–"€†>Ēņ«‹CFÓ6®éڇŪ%<®’Wļü’:ąųcyą-"āņŽīŪ֐‰K‰ē8­M#Ęj ×vr M’–˜=qRŪ¹GG“2HG‰yfĒOƼ»Äokr·VŪey94ܙŒ•Ž ĄŚ¾¶¦O9-‰9^ھ®³±ismjĖk tg}ع5Å4Q-ķļ™ 3²¾`éjó’é,–Ņ[†'÷jV*œƒh I4nO'­kų[OŽŚYīU{gq õ¢Ę§A¬yĪb[+…†Ópcµ°H˜®CÄ:'Œ®e†óK»żĖCŸŗ§ŗńWK‰Żų{FŌSEד ļAĪücwÖ¤æ±ĻshIē#޵rµŒe‡ā-bśņT½k½éĀķ# éE¾¤E£Ś™ƒ¶ņ˜‘ßõ5‘1g]¢i‰±Ļ{˜$L"Ž™=žµµ§ź³ƒgBŪYc±™G3¬Åkeip¬’i—ƒ)Č'ü+„š¶©«l8‘mc,6¶3œõöØŌõ渚×d‘³2ŒżĪ½ŗWešæI»·K«ĶņĀ«ó*H9`G@ ;ķmā­3M6ÓĶ%¬o–_›õäśļ†tŁ6źö\ÉuūŅJŽzÆåMJÄ92“~²¾Ä,ZĮ“hzšå^Ž7š„äIyv³¶å#’ÕÆ6›=¾R ŁĘ\ØĀ8¾ö@ĮĘ=*!;Īk‚ęݚ٘.ŽÉ DÓ£EŽ5ó‡Ģ͟¼µtF„†IĆ‹]OĮ«į7¶zX‰TćĖ8ĒҾ ń¼)šēİųz5’t„ŹŽ oŒžÓ&¾‚¬®ĪęrW±ĆŖßŻź×bw‰›”¤;ųÖ)ń+i—¾UkXl!ŽųO­r©XC4ŻV)nīͼ,÷”ŌE°`‚qź}ėōį–¹€/®Ś6Tµ„ČÓ²‘–`ó«oBd»~ń?‹Ž+Ļų†kmQ¼ŠwÄŖNGķҼWā“vš/ŽÆ,¬­#Ą“J©ü Ąä~•g$ŗŌ}Œ½U[h.a;'ŽuŪĒ8ÆēYŚÖŸ©›{u»X×Jv/†ĻĢķų ›™F÷(.ŗ4Ł#ŒGbr1œ>=k•ń·3źÖ†‡k$a†I?*óódõǵh¤īvRŠ>įųk«MńÖćĀŚÄOŖé÷‘¬[&s±@ÆĪļ_ķ<3ćmJż˜Ɯ‰µA¢œo{>eŌķn#•“l€`cp¬$2DTĶø)*ˆŽ”œŃ÷'ģĮćŻI/|7ØŚY$°BM¹2üĪ£ŒØĻn:×ŪvVΊŠŅ2ŽłŖ“D(»Üō‹;™#M¬žDĆp88õƊ>5ųb_ė†ęŚŅiå¹&wq’ |Wˆ„w”×AXšoų–óÄ« ŚŁ‘Æ A¼‡;q“ztÆYųaā›-vʇZ½Ä„J†[& Ÿ-Õz@sŅ¢;üēįļų‡ąWÄæ|OŠneŅõmWŽłå]ĮŹ#ī#P1_čš{ć‚’hƂžųėąŻFūMb¹PŌ˰ 0ģx*GØ÷®‡±2×sčφ¾ ¹ŠµHŽIĀ[;p{澕ń=”Ī0Có”%Xż±PsIĻēüĻöQ¼ż fKŽž°Óæįkxü­]Ū!īōüüŁ#%»0ŻßćüIkŚ\†āš“öÆ“«,qtU#×ó­)œķhyõäoÖé 3aĮģ0­F„Ē „mb:õ­ $¬$Ó¾y%OcPÄ©&꯵@ąbŖ.ÄI“Gņ°m¤œr*ŹÄ» ±ØŚ8$õ± ź=$mŹ•#z¹ŗO2a"ŻņćŒóšOc®™÷oüŸöĄ»ż‰æl…ŸaŌ/ķ<Ø^C£x’Į%¤§i‘‡”Ś’…„n•«hž ŠtŻĆwvz‡‡õ;T¾±š…g G ńŽŲ¬+·(«ōŠģ}ĪZņŌ„ūK€s•uģ{WĘ?“/ĆgŌ4‹étøūZ ^Yxڹ,æˆćóÆ6¦š~xŸ@µń~Ÿw¢H¶šŚźvę Ņü«øć>‡<~&æ•?ŪÆą^©šŸāV„=®›ŽœÓ0ŗB„“'-»§„§i$ N›Ń@ÉB»³šĖŽF#Žė?6z‘•ŽJ±.¬JGīĻäzÕ9ē`pqüėc”«ūŠ]J©P9 ±žƒóįę±uąßlū%÷™å› õäĒ¬FÓõÆī·į·¢xĆ’iÜYXj±,ÖdŸõ7É·~„äś|¹jGC¦2>˜š„ö§®č–ŅėV‰g«F 7”ʱ^7cŒÖŸŚo¬C-¤Ń‹ŲĢ·ćwŅøę¬Ē)h%ßšp÷ģC©Łų—Ƶ’ĀßŁĆ¢k[m5óm6÷€1^ĢRGuē­,ŪĒy§Č]v\FJ°n2Ć®+*j×W¹“98˜® –Ś ö5ģŽÓĪ”4p.w.N3Z7՘3_WŅ'‡Ģ\+HzóK»¹æŲ”øBBäp;UĀ]}½ū0x–o[\xVS č't’Vœœcė_xčwÓjNTæó×5Õs7>…MN'¶”4ET–ÉÉ­-&ų±cp‰øćŸJ“c)hm˜]ż¦7V‹nqŽēZˆZįF€2œp+s4Ž;TšeÕÕō×ĻNĘܐ}kŌtO„…ƒźѣ˷0ąŒ ™lo3–µÕ“ķ_UŽŽćK‚öēČćęFSŒןjæń[!{iż™“é’Xõ¬ž~÷’ˆ^@Ņ9łXžžÕ”aņDpŸ®­iĘS-…+µäP ś’*Ų·‘$)±Ę28­£.†gQ+Ū­œq$BICņW‚kxźk„i¶Ņß(E$ķ­W0ģ`Ūx¦Ęō>÷ņsj 28¬5·Ų2ĒēzØĘO½4ŠłÓŲų±ōĻŪ±Z“±"?ń ķõ}OĀ©›»¼• ;N£ •žO­£ĖtšĆ:%“ŠĖœtąb¹ę¶¶²ŗ[Ų Åp®TqƒK™=åˆŲ]ŪÜĒęB‡$ó“ŠĢš~—¬·>TĄNXUcŲQģˌś2’ˆü ŚÅµżåÓyR ó28ć=3^¢—–ŗFƒ®whŖķŲ½)#N[žkibØĶƽéwįIč2zVƌd‚'˜)'ƒō ,XžÜÓ>ŹdŗFY!kĪ'Ö_Q½’(ĪS#ž3ō h——Ś]ÜŠłFē ō­»†}V?·§ČĶņ’z³ā}SĶՒ;i% €~sŽ=«Šü ā-8ųwĖW6ŃĖ}2¢Ć#b ä‘õ ƒĆņ‡Ł Ƥ²ć Äp՛ā›ŽO5¹Üē0¢ksLŽĘX.Ņ8ŲšN:ŠąVž#yX«œuļHŽFtŚ¬ź·_nŅm„#»Æü³÷«,×_Śp‹—'ē ĞŸZv4Š±×ź0[Esq4ćŪņķÆ#×µ¹¼Iim”É dø Ēńd€­!¦ŠEé< ØÅuQF¢Päó“דAgq­¼h‹µBšČ«4)ŚxcĆ×Bö;Xm¬Ō‚Óc$÷ś×oą_ xL²æÓĮšv*J9mÄgŌÖ2c+CšśŚ=EÜź¶żÆž5Uü¤¦³.¬ĪĀ1-ø=@©ψSK–õb“ēuŚ=+‘Ö¼aØ[ŪxˆŒøåØK±q‰ęöŽ2m7ŽoŽpz¶Mu2ųĻNŗDµ²F78Üł„kČmō6ō›ƒā+i"<0RåPĮ¦£›«i3ĮĻjÉ£hĘĒ“_[M„5֟ #“¹$g”żkfóÅĻn-ķī£ņī!‹ęĄĘžOėXF's„m6…o|€¬’.J÷Åxļ›$7·r,’żņyģ*eܳZŹkĖł™„%ŹįU€ĘkŪ¼5ö…‰ s—)“Ķb3jīĻ0M4R'˜œžÕ‡ą}2ćZc„’fĒipģĢū|Ē®iŹńM¼Š^5”Ś™‡c\3ZH«¶įŹČ?Š®°]J6ŗ\ńīy§3 cÉ=+§Ó4v¤żśä¾•©„ÅŌŽĘåtėhW ó1¼VNØaŠ"nœ;3Ļj‰š(w9½6ŅÖxćP«ø±ÜÖNÆ¢5ĶŹĖĮŽŲ/Τu9¬īZFŽ“Ńčz}†äÉ,„#maŪµrš“„ŊZÜ6:g'Ž‘¤"X‡XĘŠ6Žź:×AżR•ŠtĻ5”¦tʓlšņh4ˆ!@Ė$«ĪīÕŹj^!Šģ“ ņÕErÕĤ~Ļįǃ˜üöj¤—³”üĶož××eųģŚÄhķµsŽĘŖ‰®'&DwN1^UlS–‡÷Gxc•ä“ć%4ę–²zÉ÷×ϲ²ņaŌī–Ņ1$÷'ī"Œ–>•Čų‡ūcI¼.¼3ÆĆYf™­ĪĄ|×Ŗ7©śµ;.xSÄŗ^½k °ž)™ŅAäqZwvÉöØįs‡=©Ø“ŌōhÄӞř’ÖfY°:Ž*•żŪٟ*ų¤O‘µCRzTՖ‡w”ŻŚŻ[”‡E_Īŗ_üCš‚$ńܚ®™nś¼ŗpmeˆ:yČĮĻ=9¬„-Mā™ó^-Ōļ$÷ 䛇2Č«Ń]ŽHÜ×p–÷PŁ>KÉ„ÓÉóo;séŠp—p«Nśŗæ…lüBš{ Ö…³ļ‚ā3†Sü’żUļųŁā-NÓü-āssrš\&ī(Ī^ ‹­wR«cĆÄįŌ惞ƒöœÓµĆĪ‹ äk\LÓ1żŅōēo95ł—ūzüYŒ?“­„Zmķ½’ƒ¼”Cį½5•pÆ(Ļ"ž#oŃkŖiŖ|ļfķ÷[üĻ‘„U|Ö8v悜¾r÷WąßōŅ]&“) F„Œ0aĮ­o7dP'’¹»šwü 懄|¦x+įgĮƄ~ ¶KiwØN^Y؁ńˆÕyČ óĻ\×ēŏx³Ēž/Ö<}ć­wSńWŒ.Š,×W3±AŃI;Ga\u'„‘ņ~xMƒÉ1ĻM¹TwZō¾’ä7ĮvזšĖPv’§”ÆL‰¾Ļ#¼Æø‘€=+Ė”ż†›kR&żņ·’Nš3ÅEąŠŸž |Oš?ŏ…Śö™¦ų»Aŗ’āoį2Ū\ŒĘÉ"©XŽ#Ø®ŲU±žeƒ†'<5EīĶ8æF¬ĻÆ|E’6ż²~0jó[|LųĮ§čZŌOlt/Äö–҆ź³½øć’kÅY—yQАxćńƎ¾#Ļ¢ŽxóB‡OødŗŌ­GŚcĻś¹Ęą=OłčaŃüéć>&NP£Mōw_‘•ńsį—‰>ĶjuM8L³Ą³[¼G>n}ćҽ3ĀŚ~æ©ų;GšĶŻ„œŗœ1`v« ķYŹ©óUió3Æšw…£Óc ;y— žžøÆJŠ4 j[h?tōĶ:¦”pØŁ›NŅ£‹ĖH$Lg-\ž‰¦±¹ŚEoµP`W;›=:t3gš¤ž³\¬F9źpE=tW»ŽxXŻWpŅ’»5TŅ6[Dń`žƒX¬só&ܓųę“®m-ƒÄ:O§źŠ6į-ŗnŽ~z‘ė_­’t|B“IųńW¼Öļ/$cga·n?‡¦sŸŹŗ©IģyU#mQś†ŗ…|%£iWŽ(ÖōM>Ź8Œ†5‘LŽTtŚ+łØ’‚©ütųińS^š¦įŻ#Đź]ī‰L °2󗯩žļį#{\ü«ÅœŹ®‡ń3Žķrü¤Ō_ąŁłgm{‘fEuhÜÜłö, 1“†ōīRGłĻ‰…®~ƒ~ĘöVžų]7æ³RßTŌu³–hĘķšæČžuś cHb`Čśsɮȟ1ˆnģ5ūėhQcÓ¼¹¤čįFq]·Ćķ×0„ʈ.Ā–%ųÅhyu;å—ŪEx›ˆ9Ī8" æŃȎźŠE|®7sŸ„ XÅ»Ėi[ł“^¤¬W“ō¬%Ó{Ųn4k³ ¤¢Fd`uS2“6ü_­6±u /‡™+`q»×ńėYdPYZł×Ņn•›)“Œ f?P•X4ŃüŠÆCļX3É{”@ŹxĄ=h1’Ōå!‚āŽüż”$F ‚zŲŗ±šg‰Q¹Ī8ƒ)Dķ“ż>S²O2„ IĮü*H£·‹Sņįw]÷ˆĘh1-]hŠkm%Œä“2|®WҬė?“ GFŠ"”1ÉŻļĶoxģq0iQŗ Y¢ćõ«×V‹mo0Ē eć;'ČBp ć³ēj©ŗTY!PFXą1õ©“aŽ#ń<šųQRŽkl\’²de¢#ßńÆ6š­­ÕķŹŁż­Ā¹$³™4YlL£ŲŹńƒ\ÜėŅxZ D(›?¼$ž@ō÷®kLšv½įkķJņęśGÓīv‘ ō9ö62”In®.K6ŁU9Ź^Ż_@²"n1H@”„T“؃ĆW^~朊ŪĻąŖ1ĄĪzW?ńļÅzƆõ»? č°éöŠŠļ—f3ąpqÓ½ъ8†Ž!ń6”­Am¬ėķwhØ‘Ÿ,õĘ=9­?Œ:6­4¶÷dw:rĘϘä9éÜ ._*=Ćöw:@š}Œ7ŠGq©[žf쐧œ*śš,"Ü^”ž!¼°Ü²ē„.db|ėń¢śĘŹ{™e0ŁX !E’3ČėžkĒ|ą’‡~2K-b;S,čķÓŹąķ9꣨¦Kv”ķ3Įz”+ ņAū £*’ŅŖ0¹¼ī¶^ K=Böö&^‚~•{O½ŃķÆ“L[ŲŽl /v>ß­W!\½Ģ?ßXŪja-Ēś\J#éĶyµæŽ×Txļ/#6~^Ń>ē=©8v1hŻŌ§—]ø¶kDžź7ūńW5Ÿh0Ko„ßésĶpńŖGå” c‚Ę”Į™r³Õ®Ō1··LiĢør矦+oü>Ų,¬”Ž?āŹ‚Å¾µ.åĘężµņ“QŁÄcņ‹ļįpU©5ū©%…lšīį#o•ć«b¹¤Žŗmœ”¦a‚Ū@舔˜…żkc°ŁK36¤U!Ӛ|®ĒMŁŌ[xļE°½6Ņ\µŖ±°—<ջƈV֗4Ln, ń“ņ+xÓhŹG¢ųoānŽ4k‹×ŽŹDu*Öóœ;ćé^+'ÄvÖ/g…`šĪ×$`侕G<Š’†eŌÕīķ®­ēÄaóžWüę°tIģtˆ¦·¼\“·ļ}ļOēNż ŒMKC†āņKČeo/ļa®ĒĮŚEח+G9¹OųHÆ'mEor’Ą>\ęŗiö0r='ĀW×:†ŒČᢌgfļįĒ„f]Ēsö©‰aåļŌéZ29˜¶·>\*ŲaŻŽµ¬Śź&yVue<•Ē8®q91·Ś„‘1iƒLҵƒ©ŁĮŖxKR“żVŃ£’ĀźFYHĮĘOŌdwÆóćż¹¾Ł| ų÷ćiļequ%ޕ䑭X–EĻØō„ŌĮG”łĖØŁŹŽa“HŹĘH|ąƒYROå«0Œ1Ī8ćšč‹¹ŒŃÓ šN”F„ć*} wõµ4bE’œunÕ4Lco*]ßÉėVcØų„ YT#’tõQW§ˆ¤• ķ†…ė‹k}OJŸL1,ŪŌķ 0ķō5ż°Į½_¶ī„ńÓą]÷ģĖć­FÓž5ҁøŻ=öžx”õŪ€™ģ~8øčŃŌč¦āÖ mČC¹_Ÿ„y4É/lZGyą(’§ØżMpŌ…õ*1?9>%|9±ŅuŲōłŠé¾Õ|Émgf'ģ÷+’U€GóÆÉŸŪ—ö“ų±šļSŗ¹ø–÷XBa™0F(٤ ƗK”ĢžV5ĖōMWPšÖ­µŌ¬ęx$‰€»[ēß‘<ć6Ė‘H/ŸNõéGcŽŖ#ņ䈹ÜĒ==Ŗ»Åž4«’ąƒĄė]8Ÿē%°qžO««Óļm9äš` Į6† ėéšG•‹ƒ²–ćoaA¬$@ķq éĆĒ3Rk@.Ēā@¦ DerŌösH‹wa"Ē«[©’Ńß8W#§øżø’Į*l OŚą÷†|'wq‘⓱‚ĪķU’ukØBøWROŹ$Qƒžäu¬ē ,u.ēļ/‚ü_k5¶™z†ģĮzóƒŒćߏֽV¶óįÖlä'rsĆ©ķ\5"mm.ųĶš?Ā?“‡ĮÆüń¤ŗV·g#Y»ÆĶgxģ‘PĄ€ wÆóLż„¾x—ömųįń į/lļt»ė Mķ¤K„ĘāI"EõF ō ×=½ć?#ē­FĢYČÅ1–ć޽7Āҳż’źF?»8ćŒŌĶō2”Ol¶[kˆ%…ą‰’@6Hz”õ«‡ń÷…§Š͊,ńϐ0(#ŒŅƒčG+9’‡ž3ŗš.»6Ŗˆn­Ģb9#TÜŹ2rߑÆÓŸ…Ž9Ó5ėH/le‘a‘W©čÄW£LĀp=/PIļnŃ“ 2=h¤RŪŒlwĪ ö­Nw ķ…¬r@‚lyeOAY–÷_fkج‘ōČ?vƒH­ pjmj_äēųŽs]LJõėė½?W²’+`äŽJ€µ<KÕ/ō‰ŒaDņ$…wcØÉä×W>®oŅYŻāóŸ ‚:PYtEa<‚nA{>“r ÄčŻpEk™OrÅŻšŗŒÅ²IŖ®›t–Ó w)=MQ{&ĚŻÖuu‘C®½hx‡ū6]6Ž5øWc%×sń Ņ”Gf#•lŹ™8Įé^É„é!tk{Į:I!įÓø"ƒB¦§įĖ­R{‹5t„·(ūÄšóü\>Ļu„8’)×(Æ ƒŪ?JƒLŌŅK1 ›žåOcŖs«ĪĢÖ®ĪÅ~lfsFü‘džå¾3łwg†@zWį=J};T†é¦}»†[Ū5§9³ų[“Xū2ź3³m\|øĘ¹ė ĻZ³“Ō¬¦ø‚er­œ€Ź=æ?Ņ”ČŚ'>måŅ•Ą,ˆĒש®fų]<āYŁž;TŒī`Éö„Ź;‘&—¬ĢYLN§ęĒ­iGiŽ9TUłxéHEhOk§^WŻ8ļ\Ƈ§žH§–ßtoĶ‘‚(µµēˆäŌc›O2ĖhX+~_¼9ü³_@_^[}’5el`¼Ųäžt›4hóļ1÷3ŗŗ& ŹŽ•.ŗŚ'ö5½ī«²¾[¾ćŸSļI»’Ż%ķ¬qAnĆ æ¦qŠÕqm-ĢŅĊ3€is£HǹČų—ÄĘ;fKao y€ļ+“·Ś¼ŗó]¼–é®^G\®ŠAēėM;–hŪjŗŽ” ŪĻ3ʘļŪŽŖA¦½ŒÓ4, 9ÜŲz˜[›Éc7Ż=+Ń<>¶š|†„Œ\mć½c-űč ›(¤˜†ī¾õāß®®ä¹[xģKÄ 6ņxĶ+Š.ē£I}س­ĶüK» ŒzJķ„’ęŃ£Ž/.P _ļR-nw^ń$āŲŪĖ U?/±®›G– Ēž'V2>;ŠĶĪĪć^“·ˆFķæ œöÆń‡‰Ė\=•ŒŲ‹,ƒ;©!œxÕōų&·óą.”æxsÉ­’ķ:śĪ.ĄI?­J€„o&&"åŸzUåQw•Ą#‚IéNLŚÄ/‹Ī%Ißhš$Zz-™wž;Ž×É9¬ŠŒnyƋ?“ō’„†ŚytÅ †ČŹsßšÆuŠux/¬c·™€+µQNęéŲęu“? 5äI£¾Fq6ć±ņH8ƙ#±ŌdŌu[ŪmžRČcjś~uµĖęgCi§J‰H²H¤gé[SF‰–LĖĒ>”ˆe ;0“5ĘžsŠś×G5ƒ˜–āBR.„±Ą F?‡ē°Ō®.ÖŽé$pr¹7ŠÖŌWHńH˜M3E>ē>śÆp’\Ł¢0B>cõŖW֓Äń¶²żąj[±W=_ĀŖ%œiåąiŠ“ŽŒ1ßā·—śšų‚{+¦ø·ŗŽ\#ƒĻZeCé¶_Ł!ŗh^€6 Įā°äš—„c½³H|Ԑ:"7…k”“65/oŅ)ąšŁ‚Ęę$wØÅķ©³˜b3DårĆļńڟ!“;UÓõ‹xŽm2ć,Ͻ‰śēmvZWŠgŃēÓ­$³øŽāxŽsü@w6)Ä뢿Ōõ'•š?&ņ£nÉcī+œ}sSŅõ;¹īm£M1T”lēy9äŌX\ˆņĶWÄ]jĪmŁēŒōltśÕŪNš]“‹rÆ#e¾SĪ=č,ó8ŪĶ ·Žwc­z…“É"ŗī¹+‘śÖŠ]ĶŃčzF§ˆ·vöč’Lų‘÷y®ŗ}~āžÉ¢™y Ö08”ū3ź6ŠĀ9 —ć×9ńJĒI³ń ’Z 6B…ƒ˜~uŒ÷4:- ėM¾Ńlā·¶ņ£†0‡?Ŋåu¹l£”Ć)µ˜‚éõ¬&śA|9yŸ&5ņr¤guwÖŚŻ»]ž]ØnĄš3ڳfnÉ{A`ćvN qš•ö©eyę‰|tõåŹ™—ŠsÅ=ŠPH­ö»¹<ɤd±Č-޹ĶnūĖIä9#kH»šF7;i÷,Ń%d¶t‰łŽ£ Š×/s¢k~¾”]źŸnŪr†LœU#XĘÅżCYŠÖÅ®“wŸ·÷ÅyLšö©Ø!Y«g=2)ŲŚ1V/hš­åŹÄ‹±I•p’Ćī+ ¼¾ŗFž]ˆ!N[½įėšß*Ļ„$r}˜Æ3!<}øŖŒnSŽšœ•q%Ś$Ź”2Ō ź¢BŁŌ ŁhrŹ’f‡ƒ~&üLųK¬x§SųcāÉü)w«Z}†ł£MÅ£ē•ĻŻnO"¼ZÖ?6öt¼ŁwäČNI,}rI¢„yrņ7¢3”—SYVŠ÷¤’oŗW·ęĪĀ%Hb(§Ėw ĄŠŪƮnj\n£=Ź4ĖZ\‘¤kv*œcŅŗ%Š9£,„Ī9ļRäĪčÓ9ŻwDžņŻdÓŃe»V€ĆŅøM_RŌ|;$śdör„¼6x‘^ĢÆ”Éc®J²[®ÉS!ŁFp}ė¶·ó­g6²ŗ2ƒG…8ŹĀtΊB›ÉÉö¬oģ¶Åo<Įƒ³æ…uB] *4·=oĮž·ńU¶Ÿ®„h×vFl0#¶;šī.> kMø|=ņĮƒ’8#„y£o.¬ŪJÖwösef“«Fźy #š‰RŅē”ójYxE/Ž(ó[ŹöæŽæ«†—¶ØU¼£cōćö\ż³’fÆŚ›į·Žž|@ń‡ü3/Ę«dY­†Æ4io¬¦x—!_= `ƒĪA88ž~~>i–Žų¹ńN¶¾Ó5E[ŁÄRŪŹ$ŠhĪ@taŌMsb%īó›šęgŒ‡brźōڧ©BVviŚö~MōōčxĆż[VŅÆg“ŗ@$uå0'¦_XųbņĮ'¶¹»¾¶²F‘ŻųSß?•qĘ„Óį_Ż>āųcoąŸ|$ńަ>)ųF×Ğŗ]Y¬d¾Vµ+¹²3ŠąØķ‘ƒŠą|wńƟµ ­[Ę÷Éu{#†Łcą#ŠĆŅ­ †B« Q‚00ø®iÖlķ†S¾—U¾Ń“Ęø“†9cBÆ(#Ŗø?L×{ń[CÓ­—ĀŽ!ьo¦kZr]Fˆ~į# 恞uƒ‘ėį({×<‹ĄŚ~„£ŚOn°¾×žGėž 2~•ߓکVgć±'„w>— 6¾"Ōa׌3ī;9öō®“ū-o^k»‚”œ–>€ūU4uø>— “™ ’A›‡Ś«jŗv­­[­Ö‡Ø?Ä6 ŻZŹĶƒę ,£>ä ŽVrū=Ļ×_Ś“ömƒY’‚q~ĪæµŽ—ā3PńL¶ö3ų’7UÅĀ](Œ„`r7ez×å?ĆżćĆö3ŁAreYŲÉ#'š®×E¤†š÷ŠēšŅÅŖ‘³”^­/U£ūš;’ųGķī­ĢO5ĄaČ!Ī:­wįÖ²²½Ōa½1y1s4‡8ē²>×;+ž=šė\ā?ĝ'I½¶øæ‡rev•Pm­Čś~µŹ~Ńšo€~ Kuo¢]éņĮtńŪČą†1“•oq^…7d-q&'ė™­NnĶ/‘—?‰u’¶“¦xŽńu[ eQk挘G厽®Ce…Ӑ„Š¢ŖēĄńß­Ey£ģ|(ɽ”źW’µō_©.›?˜Ģ‡sp=k¶²·Üé–z+ĢØĻŪQäü;sm«Łk¦xēk•u—iå@'üsł×5įßC¤Ļsó“¹1zŸP+’HŠõŌQīdöÆ{a„ŹŽXŒ”ŃrA=4š’ųcĄwRjzž“§s}®;{Ž@Ēeść§½DϜÅāõ>ų‡ń6ēāWŠo§·XćҼā«ó}ī{NœŌŚ5”VŃćQ»q9ė’¤ŽŌ»;Ū Yė[ŠĘVŪ½Ms3Ó¢‡Ķ Õ-žŅRŃDT†ĒZŠÓN’Ź(cĖLēæÖ‘Ś”ÜŌĢŪŽ“YškĖ,“ø3n “v!®‡SĆkŽ¼S­µd–9ķ#`I$0=ńTrŌ‰•w§Ųj±Oc}m+ŒrµÖxwÅ:‡ƒ4kO¹cwįSmūĖ|ģŲńd~Īy-Ö“ükƒGÖ>x,j~Q$r² }›wŸ~jxĻĘvś<µń­„żžS±$Ÿ*ŗšŲ>kJuęU£u©ÓZŻkĶ{v—Zī§«yĖ!’IøfUłN¾&ųįāų|Wū5xĆŗ¦–.*“ńī6vĀ{u&O›€ƒ¹č})ČRÓeÕć··Uƒ>Ń÷‡½q0üIńWÄ=hŁčš^h\:L’®×±SҳCQlĖń{_ßė·Ś‹ē¼k„EŪp!˜Ž¤tōüÅyŻĻī~Y› ĘRUbŽtƵdóėłV©X™.‡·Yė‘ųßĆŚV„:¬ŽŹ$Xöš™ W“jŚ…½Ī£sfmķŽ“”ćĢoYń>ŽėtÉˆČ1¬c•ÓŽµž¶k¦\I¤ZM§ż¬n*ĒJyWŽīnąń±·…žŃ.z:dō޵<'„ų£L†ģłŸfÕ$o%ć–0ŽdmœńŲćĪš;;m.k­:žHć—:0°÷¬-:-/UšęŹĢ*$0%Ļ”ż(3i%¾•jÖßgKxĶŠn%^žŲ­ßģ÷ÓU.P‡m„c=( ĖѤ»ń%­Ą¶¶fŽ6xß# qgøšĶŽŸ=¼ņŻĄ«åÉnƒżW¹’>“ hŹ^iõK›0Ļę8ļ–:œ²A® įĢxPĪ£>˜Ļ„”µ(ź‚Ģß0V€Ą3‚HJń/‹Ž~™įŲlō{ku½i˜`…'·Æ-‚—såÆé2>—sŖļH§‰6Ŗž²éX>»™ c0Uø‰\¬YŖ:bī]BŚšĪ„åaĘ}żkSƖv:†mĶ北ŗ„ģ‘˜Ā3č;…cĢĶłzuƅfÖā·³‰ŹrÜÜz§cšŽkA­ģŁõ+ŪRģģŽaź=«tc#Š4Ż3Oxa·Ō§’Öķ2Œ@ĪŃķšóĖØ[ĖĖw³Ā3 õqųÖ±ŲŹł£Wųs­Ķ®Ī—ś©Ō­ŅO46ĄĻoJģfÓīDŁ£3Ā«ŒžqN愺_VõĀĻ?—ļĒśWāūkĻ Įs,æeHTf'·j—0¹ĀXŹÓŲÅypG& ŒŸjć¼A„[ŪAqØY\C“0†+ė錔=n\eb¾•­ÜߢŁßJ¦Ń0ņŽ}+ŁŚę(t› >dU.?ČN#sčršĘæ5óąŗ˜U{q€1Y–—QŅ)‘Hä®>õAĻ7Šč4ŪŪ魝AN2Ē¢¼Óļī-›Čf#–`8‹˜W–2˜`ŠVx<e89÷­†Ń LJīum¾'¼'æ¦)øcąę«®ź~!Ō•īöÖљV ŪŽēŠ÷Ū)%—XžžKŸ±DĄÆ–£y9¤£qšŗĒ†Ū[²¹’ŁÖybRåˆćn:׃Žxie’HVą’‡.ƒĻµ.2īf]ćĀwQϧy3ŻŖÅ‰å}+Ž<¬jźVÆ-ݵø‘€ÉĘÕ?ұ”lSž‡[©é7¾)ńļ퓃ū8<›3‘9é€ĆSŠī,|:÷¶éŪ­¬#l,²–Ūģ;ÕĄē’<æćĘ‘ąĻ ¬Z~µ#źRĢc Ę8Ęų°ų’T“PšI=ūŖZCót®ˆĒK2”‡{į Üjŗ}–³qs·“˜U'ŹcŸ½ė^›ā kuŃ-$²T[ø@1‡$žED£b­aŗmÜWšp¶ŗHcm»Ią‚=ė›’…{§®³ õ„¼bā9D¤«d3zŒQ[pę=a®#··[k‡’ ĒóÅx Ī£iś“ŁĘ¤«!H?ĘŖK© ŲēĮV—ˆ×—«ķo•ŽM_YŸL€[ŲCŽxćõ“ŹåėpĄayc?ifĘ00+©¹Ömdgœ‘\lŽIćņ¬wD¹ŽhIŽy~ƒqźiu8„’Łä»ø “0¶i'”ó¦„s,·/l‰-ŒvϱÆSš×‚­nģg½[Ą6 yˆź}3ōŖ™‘£įżÖ;–—zķÜyq»ņ®ĒN]RĪöK»9ö~Ż»}[žŽ•QHØnü1q4ĖŖŽŪ •žm¹É`z\lj> ’Ā1§-«Ł4Ø_Ėcäcø=»ÖØé„ŗ2މāė[Mo$B†?»žT‘޲#šœVśŲ׎[‡lĻDē­!ŹEOG&­y ķĄ†ęGP†E ¶=ė’> ·’rwvXóĻ„&Ģ@šÖ˜tó72'ŻŻ'o­nź^Ņõf·ŗ“j\F ›‘€Üj.›xÜB _²*¤ˆ¼Ŗ gė^] éwM<Ź”ŽL™[«9[ ģvšO čљīÉą×_%šH¢ą±uå†9¬gxĖŖ8«Ė‹÷óV)ę7–} ƒŽ«Ż,Zm’Årė>rŹy&©#e3Rš—NmJ˜ęņq %ņFkĻ wń#[łŒŃ>Vč+”;“9 –I4÷¶ LĶÕvƒéŽ» 6łäFA— ЦqźsM›¶Åݤ„„ey{äUGMŠņG¹hƒ»¹rHĘÓķY]Ó­æ“Šé‚ øƒ'÷Aćšét}-7H"äĆ>7 r„·Ä[mRm2Öīų;—rć=3Yüž»»"k{µRńĒ~zS°›; F·—L/¶$ܜeˆŁ\µĢVśuōČgI[hž‚‘1•Ėk¢Zßżšįd,ģO˜¹ĒЊ–óC±ÓJ4s6'„ŠsKM¶c&'Sœ75`ŁZj²ĒhÅ‘ĀžŲ?ZĶƱ²ƒ:]kÄoƝ*ū•J)ģö­+M{{T¶j®ģ §> Ģ Ė®Kp“_Ašß$7L’!™w|Żæ*҉·oa7•ŸSYX,djŗ€¶ FĪː:VƅāŪ÷ņ†13øĒ5—-‘QÜöųļn [ł—fą„yĪĮéųT³xjĒÄPO$’ĖĀ‚žc.~ZĪŗ0¾ēō ¢¶”’Ī›ć ŪėYb7?— &6Ī>`°uķB×Ę~×|9’ö×»–ćÜŠwÆqFǟ8#ójóD]?ćIÕ NŠĶ—Fv8•]¼»Ń“ĶB]2īŽ‹’Ŗ#%—ŌUÅXrŽKqq3JFŽO5õoĆØuÆ ė©k©[Gg¤KtaĄąÖÅŹ'Ł>%‚MCĄĻf(¼goSĪGÓ„~~Ųźxr÷]’ĘÄ­ķŲi *Ģs‚O厚G;ÓCoį°“ŗ½‡ūbK‚Ę`ÄØū«žAķ^”ćhmdÕ®›OqX“eN^ĄśqKŠ|ŚŲš-?HŸW×nadŠU<Ź[õ5ō7|9g§É=ŝņŽĒ!Ū½~č#҃W3Ö`Ņ‘„Ei8ž?:å|u­é>Ū„źā“\> ®;~œ‘Ÿ7có«āwĆĶBŪs¦ņdfĘėó<ę¾IÕķ5.惏L•`{ŠQÜØĢĄū0EY>v¤r1_”³ß[RščŃn “ÜFį€+ƒ‚žUŃ Ÿ\„ȇݠĆ`ē?i[Ž;Ć3FŽ[żÜēœĀ­2£{Ÿ~Š^½ÓļŽļOfū Ź©“.RÕóŒŠģ³Hī%@ĪGØ®?gdvӑļ³Ēˆ-ī­5߆څÉ³ĖŽ^S×ܑM‹ÅŽ%ųUń?Ć<)vŚwŒt;Č®m¤a‡R’Ę=@<Ńos~n‡÷éū/|~ŠkoŁĖĄ_taö”ö©oŖĘ§&PäF#čE}1ąkč“ E'J@Xš}ź$¬ģg=Ϥ5{M?ÄśL–“¬sé÷1˜¤ČŚG_Øė_Źwü»ö?Ō5 ėŽ$Ń,¬`ńg†‹MTżę”j͜)ļŒēčEdēbOå^Ņ“–ט‘RpĮЌpyżAę÷Ä·/ˆd ¤ī$õ5½7Šēœz$‘:°Xöó‚qÉŖ›z˜Ż—µtĄål|ˆųe\qīi–ļä~ī@ŽŁķŠU“A'‰²čÉø63ܚO5¤,Blćžōqfµ¬®žZ‚ØÄĒQ_QžĘ“īæū~ӟž?x|§ö=µŹŁėV‚B¦īŅW ķŸöA,=ÅNĢź†§ś_ų;Ē~ńׅ¼5ć_ _[j~Ö“ųu įpѾå…nćęčE.ŖVį Į#ĶSµ†;WHīj•™ž ü2‡ĒvŗŸ…ŒĀŚyĮžĀć8ņ&<7lć•~hų£Ā_e:†‘ā”E?™erW¬gÆ®ē\Į%”ü¼’ĮB~MšĖÅö~6Nh4ł¦1^ĖpOŹļėŌsōÆĪ[µxO%™HģQ]t^šœ“E#8‘†żėŒ7­$jWti”µoXį’HØńķÄk•9Ąā¦eQ± •ķĮėZ©\ĶFćL@»b<ąqQ.Ļ0 ”åxČļLÖ1°éö)2¼½@=…Mł ±\c®„°E«E˜J²Ś­}ū’ėż„&żž?h’kQMšGˆ§w· ZN?ÕI·§†vSģxüGi­Ż[x¶ņöÓū/Ä6ėgآɘm®@%Qü;ĘÖ÷ēŽ¾³Šu¹&ŗ}ģomwc!‰ÕŽ|ÅģĄ÷®*ˆŽĘ­”–Ęźv¶ø‘£”‰­ņÕ°ģ+ł¢’ƒˆ?bń—…<;ūkųm.­Ö=3ĘÅõŲ#±’øl.OPV¼śŃŁö’†#DĻćņī¹YDS„ȏ Ģ|UĻ jpŲ_[Ų\L°ĘĶ…¹„%© śrĆģ·P[G Ū§ĄĒgÄś–«čÓ d 5¹*wqIn#ēólŚ^¦&FČl™b¾©ųā=DŌo!ŗ»š;ÉåĖĢX898õ>ÕßNFnŽŗmȼEš-Ųąō®Ŗ-ž,¹'ŽõŠŽyÄŪ’ćdEĄzÕmŗ™Ņdl1;¶óA–Śž$¶K5qj”[±cŒ×˜$81;”<ŽßJ -:ŽŚGīēn?pU9ļ¾ĪŽ%fŽĆ%4Ū‹…+Ŗķ_Q^Eqö†ĀKĶ)~£©¦QÓiś,šīŽŹØ¤j§vŠutķdĘ1Ž W#1“čt6µć5œƒąüާéZRųvĪÓO@ŒóĘr@ļG.‚¹~ .óZ°ŽHŅBŽŸ+÷Gć]Ķå’čZœ÷>cmłzpr}ŖlocŸoģ}^Ķ¢(—.’Čū¤sZŠiZN°šĀ¶©Ąģn0½"ąµ9ķkĮöŗUÜr,ņŪGęīĢcåocM¾ńSé’I”ŻĘ.“I!n°7‘€qłƒNTK¤ČSG…·ČŃ1‘\Ī”å[Ż ”G'v 9MßXÉØ½Ä<ØF1ķ\wŠl ŃoMžŠ_q AœŒ]jćO•fŠF‡§Qō®§Ć:Üļ¬Ć-”ŪøčyšvĻj»Ōō½KQ‚ĻXŃcŗŌ—$Ź•c|QšåŸˆ|7mošX_[”tČĘįžƒó4īö1įś'†õ]/R°œHbәNI?xūW°<‘éö‘•ŃÜn·l÷ÖŠĮ+“9Ī1Åa[ió¶"a½F=¾µq•‡(›3ZÜéö†HPĢßĀ õ­m*3y $©$S¦© jfļŠ³-cvÆn˜Ķ7Z{ėKė[ėPwȔξ+n=ĮZ„ĶåĶÄW²Go(ČQŌ0ķ[~0šüŚ ‹öǶ¼, n©œ{TŒóm/į«+.”q|%įćČ ŻI¬ķmo,ÆU.ŸrÆÉÓ½±Š6ōd•ŚgŸd|qé]<ŗõ…¤ńŲ…(O;ńĮ Ń#[„OĄBĮc€Ć½qZ…å­½„Ģ@“/†€hą&¹i¶¬‡,x÷5Óh6sĒLŪW?=Ö)Lʻ泰{V#É{ØHb0ŹUÉĻ”¬ę4oĒrŗ%ŗ¬ ”=:×A ų…>Óo3\<É\ō¬ĶבŌxžXīm\ĶŌ`Ö¼÷Oń Į‹Øxu¬'²d» “¾x`„+‡³9³²µdū$K ‚£Óõ-bµ xRŪnöÖ§Qņƒn"“±·ŠŒū°Å€ź1\ˆZ{TZEbŠ’»¹S†ZQrćÄ:-ÖÆnņłI40 '9ćÆįD÷ŚF”cwØŚ„€7/'®I®ØØŲęlµĶrŚŅ}6ĘņtY_;ĻĶŽøü³]Ž›öš šę„p“Ž«yAžZuł‡éłÕ Ō¶Õlu'Ģ•š€^6āÆųsO³»¶}V<×I|½łąĄŠ\ÄxĆÄwéy>Ÿa4płxł€ž*öė:‹ĘßW’Ö;ūXĀs€qĪ?™JĘ„ŻGV‚*ٲ©ŽvĮP¬(ø©4›±j6ŲĘ[5[–ucłWi6‘ŚøøŚ‘ŗüū»Šē«TģĀį§R¢§M7&ģ’Ż¾Éw<¢śėK·w‡JDdV#+ұ~Ń$ŅĪwJń±8އśeą—…ŃČrÕSõŖšĖū«¤>]m»ļdi:Ņ揭sŸi:…ŽŠņ."?:‘‚9é^UJ‡īQ¤kź62D¶ś’ £1SƒÉ«öͤ,Ä:`¶:v®IČź§LŠŠ¼¢ųÆĄ:׎ōZŅÖk<3BķūÉģm ł×©I?†õ?±ā¼01Œ¾x;O‹‘5£Ł=š#āž·š×ĘŌõ­6ļZšÜ†k JĮ’ IĻ’ZæH<'ńŗ×į—Ž­µ½ īßźxc‡gcßæ<ż3]TŖžUJ/˜żYš‰ąڳą’Å’ź.£į‹½įoš)ū.WĻ@ß1 ŸJžZ~Žjn•mis;ŗY\Mm÷¶$Œ«ŸųčŹI¤Ģ°UoVTzÅ'÷ßü±õ§Drä¹;½ĶlŚ\¹Føœń^}hŲśü*Šć<üŽ`‰+¤Ū™[ŗžøü«ÅtĖ) •w°WÜw6q\SgÆž­mum,AcĢry­¦’$Hļ&¶Id‘£ąH=ńŖœŗ•ģČ,’;xDĄķZ–×eŁÓw§8¶3“Ļ\ÖGm(f€¬¦h~ęīAō­A}Q@ŸzŅ1źt„Šf„Ŗ&™oewóūT …äķŽ»æLÖ§Ē{M/Pńi-ltŁą”ŪĄeņĒóžu6±­µ>yšEīƒ­ŽFLcOšF`¹$óĻóĻé^Ū=—ö‚£Ę”%UūĄT˜ŲƛV“I ”½UT•lpǰžUā²k:‰|@°5Ü„'QQW…’‘®ˆ\󱔟 g[ ;ĘRėŚĖĘĒ}¼LwĮÓÖŗ=GÅZ扨\ŪA'›¶FP’/®ŚtĻ„>gd^Ó~!xŠ [É®,įŹ+0ü«/UńE׈P5öŸhXr/Ļųœd×TcŠÅa]īz?ģ»ą‹śļķ/š›[ų&Özg“˶½ķ3˜cæ·ėmœ÷GL‚éM’‚čžĻæš§?j…擇t O xkā5ˆ‡Y¶A·ČÕą»8`,ÆąüĢū”=Óš.7āœ>_ĘłV¶§V3Œ¼Ō¾ņšoę|+įK„:k<±‡•ˆ;aŠƒ_ņ2I¼2“ŒcæŅ°’Šž‡§MKR-Ä^:‹ĀśŸgńµīī ĢŚWˆ$|ē•ōČ¢ŖjĖlš1ܐćsņƒķSĪt,$I ]ÖųŚOZĪū:±uuĆv”Õ±Ė_ qŽ!Š“ķAQµ'NԊ}Ć4*åp{8ƟėŚŸĀoųcāG‡-ųE Cö)W1ŗ·9$ōļ^ĒūX|ZoŚ4[˜<+e¢ß[[„ŠĄ³ Ž€ē]¾ŃĪ?ź­Yāį‹Óōļsš}¦>™¤%Ķ”Iz°ģ˜(’–ƒ9 ׄ[h°¶čɖ(vžµĻRgķ™5Ó¦”Nrį?³nÕ Ś² 5čŗuŌor‡ŻOZąœ£m؜nQ{Hāņ¦T<śĘø hŽ*×Å֟¤Mnté£i.Ņ;ķ'±0Ä[sčk’h6W^%ĀÖöŗ®£kóIi“»ŚøõƛüUū)žŽ|:’įN‡įæ…óeōł5MMmäHG™åŽBą3ŒŽ{ƒQ*O”š¹Ž}‡”%ķgk»/Vqz7ģ+ūFioe#j’ ”Ģq ĶØßĒHūÄ×Gā/ŁĒöŸųonnõļƒ×Ž$±@I›BnųƔ’ҹå†lš\O…Œłe3Źā™¤_.™ād»šŽ­ŠŁźÖļk"ž®ćĆŽ!°ń “ćOžŹ—g[Ż=ėA£ķ0XČM)EŻš5ĆĖ)µ‘ĀČĒnOzź`M¬`e ‚=M%ڌ®s>%Ńo­V^  ŠŽ\–ūšNyĪ>€Öžš‰,Č\T`fØm\(³s#DS'ž:ŌrYC3 ‹2Žr‚\Jz+­Ķ¹Ž]BąĮ’w( xö®Wľ)²ÖōĶ)VźŅUņ›-‚TśŠ„†¤OLųWńĒæ“ł¼į›=-"vgŸĢž2ĆŖ'žę¼›\šØÓ®SÄŚYHnZY$øCŅRĒ$ž“ć¹É:EŻA›Nø¼“Bΐ³Ŗgļ½3\ÄŁ;į×ĆæŁćEż¬“öÄšgōĶJÜI}ąR‹Ķ:źLJ9s";…*Ź\‘ҽܽ]¶:}%©ņäTæėģō‰Ÿ•~'ń'ü%ŗ}ķ¾…c¢ŲyAL1ēq`z¶{Ö’†¼GįĶg@ŌŅį–ÖŚņf ÕcŽ3Ī¾¦ƒŠžĘ3öĆRÖ-ļ®ķåŠ)R@:£(#ł×WeØŚ³B’°ĆŽk¹l|Ž!ŲŲ»B12Żzt®ŖßP°Ó4ˆī/ļT»78Ļkr«nēnÜõśŠ)JŚA¬ĆscĶlJpy|’ā»×Ž&’53޹ėšęfp³BÆĪ~jŅŅŽā4˜"Ék);U±Ū×ń Ņ';—ŖNIÆÆ“ģ$)^I÷ÆOѧómXŲĆF|0Aöö¢Å|@Šo|Iįį§[^=“Ž6;ƒœ~ę¾šÕĒ€a’+ūÉ®®xpö©Q±IŲē&“WŌ5y'—P*\Ÿœ`éļ[÷š™ØZ$ń-Óš~aŸŹØ‰3­¶imķ-“½* „#ŲEqĒĮŪ#ŌÆv²Ž^N¹8ļUs+ž©i·WW7‘4ķ,Ģ̹WœwÆHšßŒBÓ Ņ$ŅĢҐ«ē+ąĘ|R°äz¤¶šL6öw÷ņŚO,€J0Ć;Oo­yŽÆā{;¼–Ļ}˰+ž£éަ‘Ž×,ļ-µ}Xܙ'O>”üŪO§ė]O„cµ;¤ˆf›—o—Š™ģ·čcvcTIŠąÆ;‡µv3x*ŚŹĘD—ĶūB‚ĒqūŻé) žuazślŚŗFˆĢ»SZ¼sāNöŅKĖ3± 'ː£<Ջ—±«šĻMMBŪĖÓīc{Ū:m=9Æn‡ĮóĮ§_ϬŽYXÜŚĄdŚļƒ#’t/^h&Q>z¹Óm|Y«Y^&””­¶¦cø’3µ_¾éųb“D؟;üQŠī†Œzd%„I„ŽsÉg•xļ…ę›ē‘ķ®!Ūņń=:‘Yr3dJ¶¾ŠĒo!K†ČČž•é>ž+Æõ/,¾Ÿl„„Ę •Ē`j\MRgˆk_“n­ā{S±šē„ģ,­ŃŁī¤'*G+Z’õ?Xłś¦³y\Nŏ” ķū¹ī("Q±ė²ź6×7Ń/™œóżŚłó_‹Q·ń'›u}r–Ŗƒ„…lśūÓNĚ“¬²S¾gą8®sSÖŹģFČV؟™—¦Gj‘Ć^üj“LÖŃtIaÓŚO%gG9}⹯CŽĻFń†Ÿ6Ÿ«\ŋ‘ūµ˜cyė€Ņ‘‰Ėx‹Ą:v™kŚØ{‘<\vÆ-¾Š­.ģļ!½$.3Ļ9­`Ń<Ģän¼<--£«cīlnJģ|0×M§“ZœėoJpqŽ‚”™iÜ-tˆÆī$•Å#hUėZ6Ž2Ż‹k—Ųņ| ¢coįYĀēF¶Ś‡…7ĘlbÕćT"'q…ü}’ ģü#5ƈ­nm죄4_<¬Aš÷¦d鳉ų‰į©Æoō­6Ök½Ø,¤QU¼MįvĻN°Ó,RQ,ąt8_®+^Pägišėį‹žézž©ā(ķn5%.\•ŒóėV­ā¹“¼’śmE§“݃^TŽł”FÄņž¤|wįū_ \Ū§ŁßS‘|żŲś’O­x;O Z”ģ³<‹+pĪz{TIX9^Ģć5ŲžÜĶäĶ”ƒź)| y‡õ›ub÷®|ä‘Ųš{}k³EŚķ|qxuF·Ņa[X2s¼ŻkŅWø6Ņ0Ÿ•Č#·įD_D>TxʛŪßxvĖK6Āå­e󒉹ż+ę턳…5+čŽÅ›g·“šŚ2¶…Xū;Ąė„Xų>ĪKU¶.ą<؃ĪĆõŖwŚ4~ //n„ćšGŠT±X“PšÅ®—jŗtŠŃ‚HĻ#«śn¤šcA$ ¼±€#,”†Gµ _BecxŸĘb–ń¶Ķ#ČŖX&ļ˜ž¤zW—ė73źwÆt®Q7evńZ%dec©Ń¬µIģ¤IĮH9`\`ģkž¾t[Ս‘Ćs÷«&LQbźd‡É‘įVģ¼p+“Ōõ[yAY‚œtéX2Æź×W™K‡KI2B+œz×_«kVK§ŻŚŻ"N䍄†psHŹo”åRĄ—1Eł[pĄĘ>”&¹yŌz|r<¹åzūPJ=?HRŽŌ.,ēŠÓīķeĘOÖ½Ɨ6W÷lšµ©L‘ ä°ĻQUŹĶ#bń†&ŖśT×bÖeU²OLT~0Ń4ŻBĪž8§”±-¼g5²+S—ѬlķJC²ŠWŽ­éšĻ×µ;éķnķķ-ļ-åä`Ėßīž”oŌĄŃ¬Ų€ŗ­½ģŽČJ…m¤’8皱™}£”ŗŌd’Ž%‡ ’ćėėX3H«³2ēÄgPŪ" uaŠ“W­õ•ŠQ¹ĢźS5čU¹0©pŔd; 1XČ#‘üŌĘćŽi”ćc5īkÄQ¹”fĮč=«×4=“ųdžŻÄe·£7ń{ –‹Zźv’ŻčPĮ ŽŃĮr''.+¬¶Ž¶}·; ņŹą®OLÖ‹Gu Xū;ĄŸ!cØčÓß^}’4 Jvćg={×Ńń”¾ÖķŚV²ņć*Ø!w`ą^½}ėéģxR«¦‡Ē/„ ń5¦§—3)™¼ó#Å >¾ąUŲiŗ_‰äæÓgk†p9œ×ō ĻŚxgPÕ®|Uiuū©&•†ŅOLēæN•ö•ēļląŽźtI# n9Q×4ģh¤}%£|[šŽ“k¢i6Ņźq,J  ,¬IēĻšĒŽ"š2iāÖŅŅįļtŁP†¶Ņ1p<änÅ~w^[M³WGĪvž¢ŗ(;«™MŒ1ŪŽž¬¬|ąšH®ŗg$—qc¶ø"@ā&Lü¤qļUł‰ĄąsČ­ ”Z-±”Š»³×„[‘cŲTØ÷÷5fōĒļ¼"8Ų’zö£u Z…•õĀ³Å*yxGŅ”Čī¦ģ/ž Üż“ßā/ß~Ču[OųJü,¦ ģymGXšĒ'±Ēojž—œ%ŌP³C(ēŽ†£M«7ŌÜą¼C¢]\é×pŚØŽģr†æ=ž3ü‡>֔¾dF_õMÜń…'ƽGšė–ś}½ž±<%Ņ*Ź÷$ž1ü9'źkš¢źl„Ńä"f вĄ’ŽR2?CY0šŸ…¾,x#Äß ū>›<‰,²;³JĻ3uś…LV¤A>/ēž8·?0+6ŵKk«;„œ%Ģ2‡&ķÄt5čR@~©|ń<š·…-'•fŽå~IKś~ķVĮ_XG’q¾ī~˜­Žy›W+«4$°ģAėW“ @Ū\ĪŻüp:}M+ó$ń"#š.§ž•ĀKx-¤Rā¼éT¢(ŹĀ’ęxśėŁ«JŅĒķ—«§ķo1žē|šŁ„Ųč—KÕt"'š0±ņ‘ĪkŽÕõ9¦¾–āv.Ļ÷²0>”?"y‡Ć'ĢŁ+…6ķŸ”uĶv×ߣ–Ѭˆwü™Įõ¬œŁj+Z^Et–l wĀźŚk=ŁĀ|¤“Œš—Aø¢ī6š–×!<›fÉä}ļ„G Ż­øŽP噎x­D“:K]U.LVtcóĄWo¦ųoJ¼’ątWVĪą:Vź$¹ė:|0Üŗ+…|ćŸZĒĀ:Ī£hÖó"ŹӑĖSdĘ7:›ßjŚ Ū\#™ *vœģ>õĢ>«ömnēO¼B˜PĮHź„e)Ŗg²xr{y4Č”ŒĘ#$¶8ćSÄzŻ½ˆ¶”+#œGj’łYć>%Ņ“ū—khŪh;ŠØūŌČük·Q·šÕDV„pŹß{w·ėE™qÓCÖ¬oÓ_ÓŃ$”OoąŠ×+ńįäwqé:­­Ä¢Ś\|ŠFF?ē½"Ķo²Em¦CnĮ Ȁ8Æ?ilo›äg  NFļˆõ? x–ŽļG•ÅN׍€9÷Ķbßµž»}sØ8’\ąē¦{PC™"’=I%·^™]”GONŌ„tŽæŅķ¤Ė2ä0ÜEz\ś®=¼Ž“£Ä™?J QexĻNń›w É=¬öņm+ÄĄp}+—ń……¼ęŽś0<ß»’~ń Ņ1±„Ļn hä2FÄsĒz½•m©ļžk‘°®T÷©$YŹų“U¼¶+„¼Ėä ĄÉū Ö4ŗdsŚĀŃN²Æ\/9¦ö’¬f3ēœv®M¾›Bµ[„÷™OZ ätz‡ˆIg|­Pć§ō®ĻFg›uņŗ­¶ŠĒCS5”Qf~¹k4„_iuĮĘk›=ƒ#²ƒ“ō5‘“ņi(m>ŚX͚Gˆ„wc‚yčxÆ2¹½³°×n­mrź$afĖ0õ­’±”Żé·W lēQ5‘ĄNÜJ­«Ģ%¹²6÷9€®øÉjeĘ]™Ø$EŒ@ ē¶ErēS¼¹ø[s²;xĪ 'ļPD—kę:Ēƒn:ZX$:t–ĻØĒSAQ//®%‰¾CŃqšŠ2;β\„*FOŠQļžźŅD¤ø…ÄgLWYā+!6ÄčČļA¢™ÄCmj<ōU 6 }Mxg‹“ķ:ģGŸ<3«1åē8?ŹŖ/±”‰­ż™m7‹)å˜ b·µėČ4+°V[grŖIąōĻō­9»cN·MOOY »…]‰Aä½c.«”éÓX3Ė™ AŻpZŽcJg«ŁŻĶ)ŸĢc¹·{ŃįŪY“ūÖŗ…Ł›sćæj“®;¦óĶrŠOŠ2łž¼ļÄ·Ķ9Į”‘Į؞ĆĆRĆmŲ®źŪğ٠Š1øŒ€zcJQ¹“U‘Ķy·÷÷ROe!w8ĘqZ·v¦Ż#ó‚¾Fī¼TrXŃDĒ—HVœ]ŪŹ£rēb÷«vŸ•#,€æ4łūšF6&–;K”¹ŗóŅ79 “÷½«KŌļtō0!iö±%ߜƒOĮjtž*2¬)4…Ū¦ sŽÆ{ØKiz|^XłIzŌŗ‡L H—wV!¢bȇ «¢°¼‚Ś3$Ó'ĢŽõ®jµģ}.EĀøģĘŖ£ƒ¦ē'ŁV2µŪ+(,Ų•‘kćXķ®%}^ŌŽéĶ!ElH8?ÅxųŒgDyxIąE ’K÷ń=;CÓ»īßĖ­ė|4š³xÓT_éņyw2łŅ+0?(°ĻåŠćm×QÓ5W“ÕSj4¬-ÜTćóÆ2U.IR„ecnł®–åŲ¬O½ņOŁ›Åž(Ņm|q¦ų‹F˜ÜĀ%‘€杭’0y¬ł;ž…8G©ó׌_\š„iįŸŲ.āē-m6ģĒ(Ŗš©ks=īDn²Fކ²œŖt–Ę嵗öe”©f‚+wĖä×ŗeÄ!n‘^0sÓ½xī”w•©„œ0ʰ™¶Éƒ¢¹ŚčZV;{1Fd;æ„iDŪT3/ØöfŠZŃŲ`ķĶC{lR?2ÕvÆsN[G<ŃĶ(*ūĪ9ĮõÆ9Ó¼SŖjśŪé:†•l‹;D²6J”^ŸzĶk”M¤{¦ąk­v—Ņį…īm“Ķ*£ę`aެi70KÅ gœ1Œ®`ĄąŒzƒž*ż™ĖVŖGˆ|Sń/٧øµVŠ;xd+—8ž?\W%ądM%ģ5 Jęv×q–ŚŻqĄĻÖ·¦žĘā¬~÷|“RŅoģēS5“Eļ#;IĮ’ńŒ.|;āk™‚ÆŁ\’¤5éюšŸ%†Ķ?ŚåM½,ŠŽš”zæ†e¢-Ź““Žā±ąšlöš‰|°™}ønsō®ųÓ=ˆć“mÅšĻŗŸ ¾%|-ńŽ—9²»ŅµĖ)e~ŠÖķ Iē„XžUö7ü•m ’ģwšWĦ ˆ62G>?ķå<>øN*ĶČ~=įoÅü;‹]kr攠×ęĻę»ĮšµÄ–I²`w<œW¦ÅK4­½ų'"¼Ś®ČžĪĆ=~&Œŗ²ØŲ„`ųŖģ·Ųą“%ŪĢ Ą«ÜW+Øz±Z„¼¹†#…„CSh·V:¼„—Ū”²Ö㣆”øĘrµ„ärցÉ[jö×׆ōVā-4ŻŽ W’CN sŪÖ²~$čAÆkŗcˆ×œÖī•-ǃ¾$ų?Mš¼é?‰bŌ#WüˆĆćƒłW£N*ʱ*ö>÷ųšź}ÄĻā y™Åډ®8"R3Ćšų‹ö±šeÄ/…š·‹µųŠėń.T2hzŲõ55Ø„yōq©¬O’’føt’ŒŸ~#ų'Q†ām:ČźŚ^¢ūĀ dÄù­æ‡ś‡n’N‘€ŹypxśŠņ§4Ŗ§'ŗ~æäz¤WmVa¼ŸNµŅĮŖŪ=¬ŠŹØš°ņŻ$PUæ ֔‡V—2±ŹkžƒUX`³Övį0©ųkįN“4šź—×n…Ź;ćå“Ē8®¾sÄ©–Į»³Ė-§:±<x„hĢ~‡?į^Žśģ.WĖŹp3“޲•C³ …Q8½nĪ’Qž‚O“xw9ĮzWA—QŚćg‘€é\Üśµ!e©kNю®ģu+ø“Ū s,ÆŃW׊ņxÖI5;_‡æ u½³óY^ā/”Ÿwļ׳V‘ī|6wˆŠOČśSąĒƒ$š¼7ā ­u²ónżįyˆźIąņkĒ?~6|@“Ą¾"ų‘āė/ŁÜ˜N‹k0† cSņ¬yaŠąšÖR¶‡įŸWxŗ²­5éä+Ėa~,öźżĢ$O=†Ā:t9Ķt°x£Åś4÷×~ń׈t-A-¼ÉVk¶hXِĒŲsķQķ;œÓŹęõÜöß ~Ų÷ŗ=·‡>?üų]ń÷CTĖö½:4¹”uŽÆ¶Ö¾mųÅūx+[ų±”ź_²gÄ ;Ą>ńF“6±¤hž óM¤)÷ą„ƒz¹8ć"—*›QźĶrŒN/,Ä{U'*Oģöz»Æ]Īż3Ę>/Ń5 cĆ^.M>׌F”>ØĆnŪŅ+ˆ¤(Ū_ų”•Č>õŲIń;]øy#ŠŚÉ÷ŪÉŚÄž¼śš¼ełšØ“]K÷¾4ńŠu-°G§i—ŅFOš>`ävbp3ļRiž'Ō¬ąŚ $š,†Xóó`ö¬yĻ~k­Mōų‡wØ[D'Å²®T¹ ō<× xHńēŽ|?Æų£ĮžÕu]MŪßµøĆƒŒüŠ~’QĄ«Z™ŌÅE-O0_ x«ZŗÖā“¶ń$:•³y“Z^Ś…š6¤¾'³·gV‹PĮGpČa]”’Å"MŠ1óPž¦rĄ]Ł,:>¢ńÄ"ņ¢i@ĪģrGä ~OxÓBšŻĒŽuÆéŽÓ Šå…ŌS`­½‰ÜG¾F÷p/Słæé9+dTWż=_śDĪ(Kö™˜¢Ó½t—~ÕfŃno¬ć“nU2%²ĆöÆ« ŸųĒ}ĻŁūo³°•o6=2Ö'»Ē8üknŅ(—Ź’7?/''„zŲłņ;Ķż¦`&u!øėÉŸā->UøUŠį^$`UĒ4Ļ2Lģ`Ö®.m-į–0ØØLVEž· ”Ž9'‚½±LĘo”F’T·€ĄįĀpē=jܶ0ąšŁĖDqĒOĢQs3KUŅAš{°šĶ4™27¼­#2®Éf™å0®·j½„č&ļ|‹7•(}Ē gSā2·óiń¬ė$Ė £(tą!\ݽ²ZĖ#^•I8Čö ÅČītÉķīB=£²ą č©kv’ib9Ö`7ĮĮ>Õ§978_^ŚčsY5åǟ$Ć÷pŽvć?į[ś/Šć–$˜Ym‹s€¦ ždr¾*ón5øn ¦É¾|ČҰõ%ŠķDP ER2e hz…ŻŁ‚՝¤FµYōū“¾ź"0č§„rėc®$‡"ń„hOńq‘^ā«}!^UŽź5q‰ ó p9‘®£ XoR›}¾ZłóÅ^m:Iī gdl“»æ½\cpä8M3Oŗ•FÕó|¾>¦ŖĻur÷L–vØÓƒ Ļ””ĀÅ„bÕäŽö­=Ģ o"Ø €š+Ó]Ž) ¤7Mįµ vz€4¼'ŖkÉ.§„7ŚU¤0œcük±ńŖAį«tµ@u$Żó挞ƒÖ˜›čxiŚ…‹«]I “ØŪ]›k6ŗt% rĆk° zā‘“Üō ū*5[ˉ#H³ó1ꢰu½~Āāåķ4iŽPČ2rĒ<Š#ÉWA±·¾¹`Ó@ķņø ą{ζ,ü'e«Ģˆl”‘%y"J]L=wNŽÉVÉċ@ ڹČä(ķ³>Jćd˜ėķAȒīāćQž15ūMå©EI ō¬»-6ņ×PgŒī>lb¼ŪĒŗ7‡“KS§éÖ* )ūJŖ7gųxā‚£#ó āl—św‰žöĘų”I¹ŽŲÆ[š×nõ 9?4«'“4§ī¹#‘IÄÓŚm¬­§‡5į‹l„nŌÉ3õĆq’ׯSŅųūQŽń„¶–;xcģĆŪŽ½'JųMājzlŚ2OgåŁŹ•*ƒŸnµ5ęG/ūFŻEšß_šļ†fÓēin­Õ¼äĘƑ׊·š£SŠLŻcbņNāČx>Äw­ īŽÆÄś’j|6Śn˜–ŅھVLŒĢ~½k”Ōc½ŗŌm?“nš;¦Ś‘–<ävż+h2JńŸ‡|W¬xQŌ¬µQęŪÄv|ą’@éĻJųž-KY:eõåķŚK'ŹĖœ3qėUpK”/‚lg¼ŌÓLó “J„¦ö-»Ś½7ÄŗEµŒņÅ,op$Ę}+9óö«®‹K—…®P¶[&œŗ‹Å’Źęó1’ߍrĖs&vŗn¹¶(žBŃĪ1ŠcóÆC³ń:%±•\%Ś#2©n[ō¤_1ę°xńo ½»æ‘"ø‘ĖFŹØōŖŻ[źH±ØSpĖž3ō­Ääwž’ęĶŊʫlŲۚöß 5­½ģ-pc•·mėžzP'6w~2š½“ͦÉѯɵr÷Ē×Qi«ĀÄdƒ.ylvż+7PŃÅüā éöŽq»9ea’1ķ^§wsi}eŗ¤[If$c#ÆåK™œÓÅŪėŚf•©‚PĻ)%6‘µ5ń$^$“†÷TøC)åD£hŲ¦@śŅ¦|ųu/ü«VYbŪÓµčߣŒ–ńĖ2©“žŌŽ„ĪgT†ąŽÅpŲŲ@į}ĶmĮ©¾™kåŹ†faĘzŠ3͵Øīaœ”æ¹łœ8U8+ķō®‡Ażüė>ķÓ§ryuś¤ū ŗłČ$Q.‰oŖ¼cȏĶÜ=~•1b:GA‚ÖĮķä…ĄĀŽĘ¼ƒU¹žŽąAn¦6Vź}k¢žäŹG±é±Ėy£¤2O @r«Ė7„xē‹l!h%UœĄŹÄ0IĻ5©ƒgé“ÜYŹČ­ū½Üdēń®Ź-Fvhc…Yٶ“4L–§«xf;Ķ-#]FŻŁĆ32üĮ}«Ō®uX÷Į#Ś@cģ¶“zŸzĆ©¬bĢł¼y¤ĮĪ–tŃ=ó&į'lVų£w¦X­•†ŠŃŻ9ŲņČą _UļšEņ^«ć]jł”ÄŃ¢¤Ÿpp'½YÕ5›}GĆŗ–žŅ+»ØOPG”ķS(ÜĢłŠ-R]AįÓKrä©9ܽėŲ øæ±°KY.Ł$Īļö‰¢]‡ĢĢēŠź7Žč\¾ŒŅÅāĖ‹V’Ö(­äuĒĻžMP®Ī©-!Öa7ĮwÜ ę„ŃķõEŌ_LžĶ%¶pJ0 m8ļō bńŅźśĪhŪ‡Ąuo”œõ¬ŚuĢbų’(Ȥ،=?ĆŗŽ„rnšāāē“ņ®zڽZÓĀĪыxn#@Ø[sĒjNVŠ£Q€Ūģi@r£fģtÆ/Õ,ęæ–c”‹wĖĻ5Ÿ6· 6b\Ćqi%Ŗ!łƒƒÜW”é:ÄQGÜ:‘’š‘Ę膹=Ķģm+ɈŪ;Iž•źšMŌŅŪ©øGh#ĖļœŁÓŠūV‡ž$ń÷‰®4 lķZФū•w6Ģ€Nßƾ‡ųoo<žń5Š_Łj—&×ĶyBł;ząJśCĒövGé·v«ŻÄ\ Ųņ9ėō®uü)ā%ŌžīYģntpĆ1‡Cōē„”R6u ēH¼†ž4x ¶ćéz£­kzUÜ7a„Ļ•AŸ˜ÆlūŠŃ«|šę”ā-VćY§[1ģõć©q^ßń–Ń,ü%§„Ćł—R‚|“ü8lóķD‡}lyO‡ĒöVŸg«źB;}(å2ĒåČĘ,Š„¬É„‰ćÖl#‚FMʼnQަMlk7©Ćü8ńm÷ƒ<]%Ī”RčW›£ø1­µČד^I¤EØŻŁč÷ĘīȾärܐyž“)#„Ąķōkö†XŠŖģPŁäšõ(ģķõ}.ęՉ.Fā¬8§CŽo[uń5µ-įÅ¬vÓŻZĮ!NyķŚæ)u»XõŪ¦ŗµh®7|ŖS¢·„a'©–§‡ųžŽēHyĢdĆz9\ņ=kŠ‹REš?Ž]@ą£f6ĮR\֔΄ō?L>xėū{ĀvfmV9ļlĀÄY3#˜Ē|WіӉ@|ķԚŚR4ä…å·hØSĻ<ƒ_žŠ¾›Ā÷ØEŒW2ł¾bō$ćŒ{Jć: xšĮ%æ›xVhd\FĄožµ}š{Ę6:…¦±š×U¹ø†ÖXCŁ“ņA6G<öĒR68}JóÄ’<čæµæģ±šūā֕©Å}«-„pźØo‚``ąt!»zJJčŚēŃ^ń š÷Š-­ęr"™ü²ĒæłÅ}y©Ųéŗ¾›qg{ŻY\ĀŠ°>Œ1ŸĻš®YÄşŹēü[ö8¾ńā½{M²µµń§„ ¼¶eŒ³_Ł;|éĒ]¼_É_Œ“öÓõāė/–J‘¹0=…]$DŃå·LØY6:3IjV›%W“Č5Õ Īi Ū,:–xåRpsOAęI¤T|rOńVĘDbD‰šĀō+  bF!½ŗTLØ»2łŗA‹süŒēŸ­;ĻŗMˆēך˜Äė„ģ}ū=žŠŽ ż•~:|,ż ü2Žu POµGę?µZHBŹ’ü;IÆōÖųEń#Āžx⧁õk]c¾!Óć¾·’' Ŗģ °Č8ž.ž¹©Ö—4‘ҦއQįF”!󗚳āρ,|]¦_i3 Cx¤Ū¶ķ¦9‡ ÄW“V%Ųi¶ŚMö„7ˆķ}:XŸHÕķ䏦s†ź3žāæ•’ų(Æģń/Ć߈zæŒōĶ>8m#•ÖvE’Y?+ēæQJš\ɘÉ•÷r“Ąy¶LqļTaĄ}§,WƒÅzqv8åIJ#m ™¾•[Ē‚}OZŁHÄ«, XŌWGo­F–ž[«Čņv Œtī2Ė[ˆ#sŻ–ĻNµk2Eóņū1ŖcÄH$~XšqŽ­Ę7ŠG ņMŃ}O«cŚ>ļöYż”¼/晵‹ĖOk.“ā+x£&9”cņČW¦õ<ƒÖ抏ąßÅķĘžšī­§:ź6WV°ŚjD†R£É˜wäŸpk«C¦'ÖZ4±ZC&ƒs?Śo-£±Éxū÷ā™=‚ÉĶ¢Ķ%²Ī7ĀėÖ9=Vøf? ą¼±bžŠŸ³ž—ūJxVĮaųį"-5Ļ-6µõž~ómä…$6?ŚoJž!īįŌZÖęĻQk_:9Z=ђCcæ5Ī„«ˆžØ­įN]V±‚H\Ū3ˆäŲ2@õƲ®5HõŻO³µhžÉ ˜Õ¶ą°$ž:ĘR¶¢ögkš¾öŽ=OSRu•†åFåGÓŅ¹Ė…śäęK½×6VĆ£Ŗåw}k¢–)ūč?…~,OėO†uĻ.ĄcŠzdףvä}©ą‘ĘĄŲēZīTĪZ“ģtöQŖ,‘å]z“‘ˆˆŚ4U­:§aa½·ŗŗ6ÓH‘ąg“÷„cźG™ęÜĘŖ°z Ž>FF–™§„ä+y±bU%ƒĖT,g°Õm¤(<Ő½©šĄķ|WāŌ›I’Ś„DēzaySŠńˆäkˆŻ…INO\ā³”»Ųé4f™Umbķ$;WpŚz^¬V’É“1ŚN~ļ½f"Ņ×Gv0¼»81'8ļĶZH£»·3£ļé@7oµ+x`Ó¦I#Ø~kˆ;„XT‚$œꊹ„ž§{¤i³¼pI‘¤ŁƒŒŒzW©ŁŪ¢I²™ķn8ó o”Ÿš­‰+#Sæ×nbŌo"¼ˆaŠÄs“õĶG/ˆ£Ņ'x!FIŌmRSXĪGE(’ųsÅž {ÉRķ¤ŗ¶‘±'uē8ؼ|š}ĶĶ”–Į’ļ$œwėX91G–Ɖ5½’š%¤Ū½ÄĒbÜŁģq^‹c}įßÄl'ÖmōĻ)N$ø¬¤¬4x‡ˆRcüā«Ūéwī®śrń‚Õ2)×hŅ_M¢Ü_^Ūł&Dœä-s6ßnü;=Ķ…†‰m©E237XĻØżjM9Jś_Ŷ¼xģuH"†łr_a8JMSÄ0+Ė$HĘ" eFr}źd‡ŹŽZŪÄāęI„„?Ź9’f¬j~,‹VŅ“Ķ:(łS3ĢĢr[ÓŪ²±qĀŽė÷jņFd‹ t­ūmR5¬FF`@֐ÜO:Ōž“š#ÅҶš;{i¦•¤Ä„såūā¼}­$‚ż­åVRpŹOĪŚĪŲ¤%¤9O_JɾĶŅʒ "ö4/AumjŚuÅĖ&}Į@Mdż–ÖŽöH­$’HŪęS@‹±E “Oo½}I§hWŗ”×’iv’IĪĄSž¹ō Ś2čt¤Ļįk;±nŹ • Ł=맆;«ż>Ż®ŲrĮ†OŻÅž"µM<ŁO y¬ą† 8R+&fT–ā4q(Ą :ńL—?j[‰Üm'= mxV«›«X#w!Ų*ńĄēÆų»ĀŚQŁ]_BKģ{qś×—E¢\x†ņļN޶e]ˁ€iƒe=I¹±hģE»K,xRĄ÷®Ś9nl“{x¶¢…!™³Éć„g6)Įā_“[:4~Rä® ć½Q‚K[Ķė)ŽD/€3ĶBÜé„ĒJŃ“ż6čŽAo(o_sRŚhś:jŃj+§Ē<Ģł8s[&t*dn4iuM2ĆCŲ:"¬ń¹ÉsŸĀ¹Ém%°Ž(\yø o=je!8ŪrYÕe\ÆRMpś•°Œ“ųIbrH5ģžTRÓžŅŖD„·ēœŽÕøö>tię«Å>q—męƒKČė(‡īqX5ŻõĒČqrxī*¢Ę‘éńŗm¤Ö¶īŃĢWhlņu¾Õćµ„ÄÆup˜f,rĆ>¢­w ńʧ'‡tčnģlēŗŌ.[lQ¢½ļłT¶—Ś›ék£ožį8užÖÖF‡#āO„וqä“ ƒēĪį\½ģQ¦† aql$A·p8ż*$ūĘW†lÆ-5_²LZgÜ2F1]ž„ØcU·“]>ćģÅ yȬͣ­ģ±Ć+Įå„Įs…ćīÖt—pé®ń“f9zs҆R}Ž×ĀśV§āhn¤Ņ¢ó!‰s$‡€=³\…÷‡5 '¼“ēެT£2=*%Ķ•Īu¢žŪ* ¤µš-%fi%l(=ĻSYŲ7-“å‹ĖøuŹõóŠ.~Ļ0Pß»Ī0})‰™ “ ČžuÖXOmŸ–C#Øć&pS£ÜO#fGLžZ“mmÖh J»Ų{r(e!š–•öXmäµ 4Ģ@Ąźåż“˜!kČĀŹ«Ē<Čé†ę†›­¼Z4zLVń,~vög ceÜ ŖFöŠÅIeO49µš¢h6ģ#ŌäæČ ółyžä.t˹/‰ŠE(~ö1Y6W-ö*ŻĄÖ‘A ^5'#8ę“e¹¶ŅōoõņĖ ØŖ2Äż:ÖR¶=  uŖF•%yIŁ%»odŽ*ß[†ńLßg’ ¼üĆÆ’ĀYcj‡l9$ś×ŸW–Ēõ÷}jO’¶q>U»‚ßŃæĪßy‹©ų‚[§1ņ£`Tr\ŻĶdÅ\;/#>•äÕÅ7¹ż…Ćü'‚Ėé*8:j]—õØŪy–Ta·g¹õ§[Gā¼-`MrJW>¹aŗ7†üAŖ|5ńV—āŗ·Č`ŗY*†~­M{Ø[xÆĆÖzeæ˜ÓŁßĖr³©ä9)ōĪ:tÉ©yēÄėūŸč61Z5©»øbLJ€@$}xÆŅ’Ł‹Å>ń·ĮķRÓęķT†ų+qm/M¤zqZÜćöĻ”ņ·ķ’cmā ŻAšŃŽö]Ń] 4‡%°~‡õó‚/ĄÓ`I–X®£SއéXT–§æ†„¬¤śž­Ūīb ;Ջ( Ēļ“)ļ\w»²=špīD–‰6ęfm šG„r®e{†A2o2ŹåISŲć·µoN7T–ēÕ_³_Ā’ xylõö“Ok›˜*N€Ū¢żß\’*ō|$ŽīöļÄDŅīĶ-$"”ōQ]£Ųńńˆ©6—šĄŚŸ…5»ģū{MFɄ°GĖΤüĆź=«Źž5~ξ>ų+į=+āŻ¶…}sšō¦.fŒ{5-Ćæ¢ŸzR¤ŃęK2„'Ė7k»#ęĖßZx‚[9-[żUNsøć­z&…HŖK ą z×4Ńōx:·:ߙŽ"L°ü«y.nķē±y­Mę<šw§õ=ŗq9½M5 }&źÅMĪēt«Ō&?ž+¢ƒZ}cU4M]² U‰Ic¼z}j¤ģiŹkAØīŽ·ĖŠv•ī x猓Ł$½øYY³‘ޱ"hx[Y’BkY <Źzž¤Wm̲ ‡kp}Ŗ9Ķ’č:+€|ąĆŠŽµ¼EM†0č{õW7°Łc ē¶Š +œ²± ؂ØW“ŸZhĀ„ļ”ķæ ¼Y’ ėĒž'kvŌl@*öĢ@ą€Tž?„yÅŅĶmāw_¶_2Śāś]@BżX$±\†yX–Ó¹ńV«{Øų’Ē6ŽŅŅǽŌ@Ž%3Ų9ōĮŻ_xpi>6Ō¼ØÉZ•Œ±ćs‚„ŗ©­;Ÿ˜āyec÷ĆöUԚėĆpGSęʂLy+ھ7xF×^šš3Gw1ŒA†>õźPZĻˈs[Ÿi÷×ŗ ½’C‘“ė]÷†=j[«m²ĀųĆÜW£Ļ „SÆsœų‰g-¦«?—Uä\ź7ŌWčÆü§Ā¶ß“/üśĻā>“p’hŠōĶÅ㨔¢¬2ś ]¾«Y˱üõćõXўO–œ˜ŗjžMJ’‘ü”ųžw“·•ĆFTŖŒWŃ\āUXŻžn Ķy®[åśÅ6t"5Ua·“Xs";³cœõĒf} čl@°µ²Ś:Ęė÷ŽG5wOÓģžšNöPI"żÖeēéJP*t‘āχŽńj[Ļr§j6r}¢ !^Yūķžóļˆõ­µ›Ė ō–K˜Ó!ĻĻ‘×=śW<£Šó1—C”ŃmŅ7vDĪIćøĻzīįɈ+ •ąĒ•ŽĒ-вŒ#A½ż:WÓßfĻ|nšŽ“o¼I”ų6ŹŽ/–Y_Ģ|ó†Ž+¦4ū™ŹŖG iū4|^š·ķ4żróHń'Ʊ$‹>³§œ¤h«’νVŗķć„Ļ~ ųOį¾›5¶ąż<4“g vŹpIĒ_„tĘ ņėbUģ~šĖšKĆ/cqįՁKŗ…eIü°YI\åqīHÆĢ_ųVĆį/ĘŻįæÅ­CZ /ļa3ŽĒ½ZVb†?ŗq’3Ē­_³dąq÷±ēŸ“Āß | ż§5|4ń3x£įĘ„¤Į¬éģóy¦Ų³1ļĘįģĆÆZź“}SX¹“†;;vy6šHź*jY6“ŠļĄÕ«*•UiŪUēŌļōYŪĀ’~%ųėW¼j¶WG¦Č`YųOæ½|Ūš›ÄŚ—‡~*x3ÅWrCw2ŽĒqrerw!#v¶*Ž•VyÕŖæi$ĻéO ZüBšéšÖٜÜ[‹˜2z]ßҿ6~2ųvīĒĄ“9m£7ĒJ‘­ćcå]{WMI3ĮįüsR)½›<#ö2żüoŖx’ʞ-Š Šō ū%·Ybnnž209Ś9Ƙ~£ĶsāŻ:ü[[ßŲź÷vģ‘œ…e‚ćšį­.zY.kųŹŠƒųTöćŻltˆ–&‘ŽęģMZ–ÖŚhžŽ[xŽ>ł„ecģ,:(/ōó#ŁÄ—V¬< ­ĶŹęyį/"[Ię ¬N6ūÖŅ›9%ēļŽzü"Ž6mbÉ¢½Ė_ŗÅs’?*ä“MU51ČŃ#c?/ZÅČŽœNę(™Ę ÆÅtžŠ®Æ®Xł{-£RĪĢ~P)ųŹŹ0g‡üvų™c§J4/ /Ł­–!Ć`É"ŽXóÜęø/ŁBŃu‰÷³jŗx?kҤņdž8Üsƒßk¦(üc‹³ ó*4÷{ś}錎›{)žm‹ ²Č?LW3ńĮörż—]±i,¤v?ha÷IģM)\š2ųZj)_cąÆ4±Ü٘µ$głvMóß5•āK]M[ģŅ<šĢ§ AÕĪ}„<Ŗ2W°Ū+ąØ%F•6ć¦7 õļx¶y|'€5øÄ>ŽQ-‚Nrś\ƒ©…śÆ~(¹rŲšŸ‰Ÿ±Žįżsǟuū«ß„Ā\ÜxzęŅ_`DłĖ9'?|飳i×Z'‰“;^“ĒucyÉ Bó¬ē°”åf¶=;HŅt/ĘD&ŚÖå[1J ž›N+‚Ņ4ń©<9p’”ēüõ¬TO¤§7Źz1šö•»Mä(·CęK‘äšō/€“WŒü!ć•»šåŜ’ §¹I/,B®É—….˜äõ…vŅ‚ŲóńZ½OŁ‹’ §Ō“-/ā…ķÄŗV©k:q½Óü޽æ!_&kæ²ĀŒ_ĘėN{y­OŚ ?ō­T–å¦|«ėśv³s”Åo$N£,ź8ĢƦkѝetÉģvLć=ĻZ§°k¬ė:“™O˜ĄœØźĆ5ź 4ū «DŌ.ōČēt‘œG*“Ž+ģ3©ū ՕÕÅÕĢ1DĖ!!W£ ńÅeÅ}srņGyĮ–%T•<čŹR8Ļټ%ÄJŲR8^õ”§ZZ‹q%Ä`øł²GéTC9a®¤Gk$v…Ÿk…'…®ÆFV‘og<°‹‰På²‘šĮńf£ Õó\,A“‘ŗYšÆ‰ĆQ0&W`'ԌsA2G+ā-vh/õ}&ģ.'Œąä)ĪIäÊāuķF;U”8ŽÄd:ĶŽŌr²o鶚‹Gw*œ.O̘#ó®³[涉`·±‰ ĢŽTzŠŃ­Ž“įÖµ§3Åæ ČČöćłÕæųī;;+ķ6;–{†q ¹ĖśV|ƒ9Ķ7Kŗ1‰d ˆÄ·ŅøŸˆwb]ćJ»Rń,Ė"HˆK.;žŸ•€c|%ūv£=äVr,‘`ó½±ė^ūØk–Z~˜±Ü?ŁÆƒŪ”ēZ4ré}osz’FpĒ ķĄ#ŌŌ—zœmngŠM”ē;±łPdhų_ā6„«^Ū馍³C„‘ˆ'P~æēµy’ŒüK§Iq:¦”ÄŹĒ>[rč=h4Š?=¾(ų.ö’^:«<Š[•ŽčAūÖŸ©Ķ£Ś¦™fé˜!Œ`pO­†¦ŸŖSTO“G Įć‘[𦧢h³Z5ŅÜ=ĘsĀŸ^Ō Q¹Ąųƒć‹ķµ5ƒĆŸŁśr…°ĀO÷«Ž¾xęćŚ^±iāy£ŸVL ņ—īw/½D¢¬'/éV:x¹»ŗE‹!Šą“šąd‘õo-¼“Ęå‚åozĢžft„ʝ§<·ÖŐ`‰ĄzW©JŒįšØ„dnź)¤sƒŚÜ@šĢ†"{žÕgQ…õKAó¦Hå(¼žtc°°šQ¼±‚hī'µMĄ@ąVĪ«¢ŚK ¾ž$ž-§HĒ,sō¬e¹2•¦|aG“¶Óaū“0,r3¹Ż)*ö ųŽĖLxoNÕ|›†Ć” Łć­ ō‘ņWķāŪÆk–:h¶³j6ČŃ[Ż #§šÉšĢCJŠ`[„·IÄcy”•¤d>k- W>5 $QĒ:#«żÕĮßģkUńFš÷6l^īóT2P•SŽyõ«L¢mCTÕ.­”æ7÷°Cʵ¾ü+c¹ZóJč5ŅÜ<*žż¾“Ąé¼;cę˜oķœ˜ēhĒ5ŠėRMqu›(óH i3)¾‡x‹ĄZŗjķy{¦°vŪÆš:Z6f/.ÕāĄqŠÖSD5ĖP_0Ēåąą€pz×£|ų•¬ü ń¬~-Ó<9įŸÉö9¬ŚÓT…„F?‡xQr  ̵-,ń»]Ž^jr[éśiø™äū=²mŽĢNÕƒ5Ē„ķʝrĖ+:Ą ޵qÜr‘ķšˆ­žĢ‘łkø§\sš»sā]cĻ·“ÓķēšvĪ҃Ē\ÖńŠ ō;_ėMŽÖīįc™[{°ØōĶqھ„„O4„"ly.杯ĶiqņĆc/ ”DĻ•ėŌū~U›ć)ō+:€nøtRy#׌™Éjo|.ń—¬6nšD*AŲĆ銶źņ×ĮćƎ·«NSlKA#‚ÜŃ(•ŲłŸÄ~'‚X.#(ĆćpÆ3³Ž nh4Ō%„‡8Čz–žļk"É + łrqß½xf»Ś_LŒÆ6īB©ąRJڧ‰­[[‰-Ś$ņüĮß ō«Z&µ¬ŁG=„ÅŪ­“ŖWfN{ŠmŲōŁŁ[A<’BĒlŽcÄźž„x·Z„ÓB‚8”łi“põ„as[c\]FKe{e/ č¤õ÷Æ7Ó§Ō&’ā-BWŒ,±·šÖ¹³Ō<o ˆ»œ;~ż†;WQÆųž+kāIßķw2“ł <•õĶJāök‡,‘&1“–¹{õÖ5kāńÜÜK¼ķŁ“[Ę6ó=KĮ¾]F{D½¼†Ö]Ą6ī+Õõ{H“xc“ņ£å.1S(”·ŲóNõžH-Ö”0߻ҮéÖź[ŒŒ±¦HśVCēff½„[E•#įpXóŸ­swīēön‚fēź*&MŻ²Ü¼ę+›Æ1”t€}«{FDÓõī5ŠĒ$’ś« sg£xŃ4½_O¶ŽĀꦎ<±Žlnā¾s¾Ņš[ꉡ8pCĪk¢$ÜõÆ)Š„‰“€~µę9ÓŽ]^5TÓą„ć!$Č÷9ę·LEH|i5²J$Wl“ŒqXߣ—zڟ$¼C,>ƒŪsLZÓüE”¦A 0²Ügēv“ķķZz5ÅÕÅĢ–wń•U”ØśW9¼vŖčÖps$sõ ž1ļ^Q©źJńH”~żŖädMwn±¹@Z`p>µA–Ņ옯–HåĪXø);6š-ޤßb –łˆĒ|×­[Īój Ÿ™»V\ŚŻƒE“æöcĀčÆ09ąV•¦jjÉfķŽw>õŖ=aCh0=­³C;+»<ß½ĆÖöZę•q1‚4»s»ĢĘŃėļM’®y.³§ż¦ņąĄĶ4;‚åFCbŗm3Mŗš“­#ó*cµg4UŽāŚĪ+ C<š"I÷‰'µW:‹['œ¬™ĪĒ­fTV§!Øj6·ŗ‹YĪØ°±øŪ“[:7‡42H§ [£ śØELJ­’Tø‚ĪI¢i nŪž•Ę]čWš›ØĻīżZ…äS-Äćmu+»kØn/ēžfČd ^„a¬>»m$NęŁy$ā„ł‰FĒģ炼A¢xcĘZ¶°Z;8Æaū<ŃF «ÉNJŃų‹©x_RÓ ń…ķ"Ó%ß'ŪD7ō„},¬|źØŁņ~¬­guq}klvŗ€Īƒ—ō©¢KŖł¢źāŚxČŁøżįN՗24»źuŗĘ§<­§Et AžXrGŅ·`Õē±Ń…Õ‰™ÜFŪB™‡=)sXųuńÄ>ńV•Ŗiڼ¶©,†;ˆ’<łŠGBO¦}ā sQń 7Ž"ø™n0l‘Œņp*\!ŠÅń„v¾Ó5ĖĖ»i4ŁÜł1łI8å~µāž צŌ_S‚ux­­°UVéÓóØgM6t¾/‡LŸA'sBŲĘPą­s>ń&®Öshņ»Es·¹Ū’éč}HÅź‹W»>—šĒ‰ąŌ•ˆwB’Ł#Š÷}SŗĀ­Ŗ+¾Nź}«uäqāam Ÿ¶·u«Į¦jĻ#hŅ.ąś zWĢæ’gMK6ų|"ŅpMĶ‘‹$1üźdŽ-Ķé=ŪÜA8¹]‡xWČŻŸ’]ygön7ŹØĢŲŽųΧ v4cŌ~xęėĮ¾"“½K;{ĖwU£'‡Ļ#ŚæT<9©Å«ŚĒqjĄ¦ĄĒžŸJÕ­ °\ŚpBŽ0+²š‡„¼'ć}rx®ßKŗ“¹†H“ķIø)#Øō5ÉQ3hČüÄų±ą¤šG¼[į›ŠēJ“»0ŪL±…FŃ~˜Æ'³Ō¦Ńoķ5[Ėøµo0…źŹ#ō®ZSm&ĪŚzŸXųņń?‡ō閑ĻoKŸy TöWėwücöœ±ųGńĖÅ?²ö»5ÅÆ…|KžĪK©0¦ą)łS·<ž WU)4„מŻ@žµćŃ`µžī ¤V»°~„Č×¼ü?דTµ:LĪ Ķø sՁ®VĢēēĻŚćįd"šeļˆ¬ģ–źśŃ.wņ&…c択 ænߣćžÆÅ­vŹk]VóCÖGö¾3/īĀrY|§4Sž¦7?85=•3)Œ£§µ`(Ž ‘ĒZģƒ9ęŃ<²Ē#¶ĢķĪ9M­ĆJŁ}G@kS™’²žķA¼œ:®’Æš¤%p£ØśÖn:’“½É„°.rÉĄėŽjķ° ”ˆf-ƒĻAUŖ&“*.’öŹxc6ŅÅå3c–Ī{Wõ’Ų~Ł÷’ų[ŰßÄ=^FŌ¬.%¾š„Ó˹ īhFNARIĄć ߌ5ŗ:Oė Ūyš40åYOc\&¹ Glś{Y/cÕēÕZv~x||šÆö7‰£ń5”ż©¤vڜ,8ŽįIQžń#?Qé_˜¶Įåń§†¾Ēyih÷vł2>7™ā`J:`}Åsʼn³ł)ų…į]KĄž=ń/‚uøežśĪi<( éøą/Šbø‹ČĬ1“ģ}+Ó§±ŒŹ°Ģ$Œ„8 ūұø2+¾PČĘ*ьš ’]“ŽIĒćPĶ.Āų"Ŗ1fec,Š”¤a³9ĪzUųŠ ·+uĻaZ€łz˜•”÷«P,ŒƒĢ œöķA¤X·ÖÆ©XͦĄŽTĒ•v?q»ōÆźĆž‰ūf]ų«ĀwĀoj6‡‰<0‹¤źˆĪVk«)īgĮį¶sS=¬mś›šn½e«^źÖśš}“ÄŚ Kizķ¹·l‘x}«Ö¤{Y­ćØu ¹Æ:¢69Ÿģ­Åśv©”ėÖŠŽųGX·—LÕm'L«R¹`xĒ8ś_ēo’3żŽuŲæö©ńׁ…¤ēĮ—7sj:]Ā‚ŃżŠS˜ƒŠÆ*}ÖøgR1’O®ŸÆł‚?9/ XnÄĒŹą«F~呈ė–2X‹oķ¼Ą<·{®Ołõ©­uŲŚ>‘“!џR‹ٰQłą‘T5ŸˆfĆĆCE}5%U,ńĖ½Ÿņ+ɍļfuŸ1I}.¹©Ētd1N“ezø5÷ļĮ槈“]BŅy&mNĖĖē;‡ā+ŻĆI£ĪÆŖ>‚³āFe={VŒ¾R`Hõē­z}.¢%¶Ņ-µI•˜bBĄŒw®µ“ų浑„uĘŽ•¼ec#›hžČ#˜Č|“ĘJ“\³–ĻO·Ō”“ €[½9K±¬†4«ēӅĮ†FćvL{W!vŅÅ!yātģp3j™t‘™aP ©<C^×’šÓŽŽśč ¤1†žĻj’\¬qŚä—[ę»”“eū½Jā¹›rv·Ə ņ’*ā‰sģI­·ö³Ū½ņ‰ŒK…ČåĪj•„¼ĻęGڹė]4ĢȬ5’sör IŪž½a®Ņ;%’h•%*6ćÖ“œŽžšŻ©µ‘•żd[hSA|׌˜i­žB’3„s=ŽˆO„ītM?Pš ÉayĶ»„Mć(ķu ūI4å24HA+ž}ė$ģm"ųe¬ŻŪx/TŽŲŪŪJ+‰[£œ}?„S~ ųcQšn“©[Cäœ\DźAŽOpzž¬d9XņEĶ`Ū•=…f[iGQŲš8óPø“[ĘW0=Āž#‡M·Ōt}Eü˰€„AÉļśÖüZg‡t) o¹ Ėy… a·Ć5g›źz Ms$öp„Ģ,ÜsĻzåÆbs<~YŲ3ó1žÕRčuś%“7“D³«3†.1‘]’‰|użŪiņGm,$1B2Ģ3ĪT{ĶdxLś÷†õ°Lβ2ᕁ…{„õX…Ä³‚¬WhŖ¦„¼‹Ö^2mµ­ā6÷JĄ×7u ŚĒ„Üj¦˜(Ŗæ~ ¤­¹ą0iZž­ØŻŻ[ŪLó0'!#šÆIÓį֣ѭmnģĄ½|ÆŹO­ś¾Šō›=ES^ŒFӓ ńĮĻ##=®sS𔺭1CéNٵēqżŖ‰Få'c»»¶±]'‰“ķƂ˜ĒjålXĶ5ÉņYA8Į¬‡Ģq:ņź% xó‘ßÖ½—Ć:4Zk,ø2łdü¢Ŗ+©%‹Ū;Pna Ył•»Šöµž¢[%Ż–čcä|Ų ;f”†‘Åė:ž‘&Æ=¼MŻŹ „S’Gł"øķĮ‘j6ز<Ā‘Ҥµē;g­Ąŗ\žd,Əā\%žØŅĪ||ņÜŠPft–¶wSŚ5ģŠ#Į~÷¬‰`˜Hn- =½ i“w‰ld·ķdąš³į˜ŸJŗ{ĖÕbė’”é:Uķ½õ­ĆŽž>o›½gŻkvažkˆö©Śpph5ƒīP‘nfp$Ė·„_¶¼Óķę{;‚…œpV‚ŹšŸ†-ļnEƅdĄ`‡§Öŗ Å£ĄŠ„šFÓÄI9­uŗ¦šóŻZK—÷žŽÕŹŁßéz6·;Apu&zÓ4„±j³}„صŌhräīĄć5Ļjlī…<Ņ#Ā{ÖŒZg#$É“aHĮÅu^šķÓ_CŖM {„cł‹æóJ7:éÄö›ķ-šŅ¶U“ޣڰt«+› ĒófĄcņd}ŚLé1Æ4ų.õk›ūń»,Nš9<ÕMF2…\Ÿ524„ŃCVāÕƒĒ‘ŒÆ„s„'Pąn~„ŌŲ„©ÄÖš«„;Éž±åb&@x†qM+čWŠ£xźńUœ:µ|ĮtØļf…åĘEl•’°Ū1+^d/c$śWÆx¢µæYE$®øĖulSé×óż¦ÕZīŻcŲų@ĄZĘŽŅ ó Źęüzi"›‹Č$ŠŃŖØ\“ŌÕć«¢Ļk©­āFĄŽ[pā³s6ŠŠ‹ÄזŃjzsˆÖSµXÆCĒ_ƽ68¬ŸEiŃć¼»d*Š:zQŸqžK”ĖŌ7/(ITnŪ\W‰¤+°ŗ |õ=kAÆ#Ų¾ ų¦Õ @ķþņ:=æzīÆg wOl‹t'+ƒĶ)_”¹ó׉āµK»g!Gš× <^tÓ!d‡<éX;0ŽŻf“(yėSŻéwpĻ ĢĮąaž:ē4€œĒøboĻåS\[]ĒUp$MŠŲɞīKyE± ³–Ƕt»ŪŖGf“(/qć­g&k‡Ųe¹ŗFÓŹ#×5mcØjw o4DĢ„†Õē<ńšĢź„téó\^“včå£?1Ī6ć®}«Ļż ōkkisč°_¹ !ę8˜u#ü«¼’„ŸLšńŅŹķ.”Øu ī+ •l}VOĮxģuEK MÉł/Ļ·Ģ©ā[EGŸAĄ5ŹėZ“÷P“0Ł ŒŖ×•ˆÅōGö׃~Sʜs,É)b:Gu;ģåų/Ä­į­péZŒ7Riöś©VWŽQ•`F:zóXŠ2H\!g%@ķ^<źÜž¤§AlŽ‹I³‡R¶/"ēoҶžŹö*!™k#‡9éR„Š©¦ŚDh‘ŒŹ·<ąŌū9~Ė;DEbpzUœ©n{÷Āx[āŻ‡‰U×$Š|ØŁ,åę›8 ē°’ł§P‡Tų%ćŻOĄ>#ŌcÕ,„›6÷*˜Gq“ßšhį«ŹŻ‘ŌxŸKŃ> ųZūFf@ĒŚŹT `õōü«öRÖõæ‚>9×<9ÆMq£ų[Y‰ –I²aI†@¹ć5r‘,%ÕĻHńõæˆ|AŖź×ÖŗŽCJqڼžūHŽĻQžM>Żb‰Ÿsķćžęøē+IBźO”ŁiļAF9=źäSm  ¤dÖPv= D³hŽfäĪڼ«āw‹n4‹Ø|7c q^¾ Œr)ģOÆ»(3ÉĒ×å‹hż'ż…ĀŚēĀmF÷t‘ėöś‘µū4¼¹?2ŸĪ¾Ā¼Š#]A’ā!“ą×©Lų V.N£G‰x§ĆGKŗ½Ń-ŖrCGĘ+éĻŁCĘ·^8×5ož4Ņ­|_mā{ŅąY‚“q¢Ę’+£dciaއō§4xWMÖ˧Q;8«ßÓSł‰ń灵OŁóö‘ųŁū;ųŽį.%šĪ½$6L€€m__fW°xY* ¬‘Ī=kĶ«;¤pī>8Œ=:ńŚQOļW=:=JŪŹWFĄgõ5JŌ¬ˆŅX¾•Š–§ŪįŽƒÆ0-&@T«}ą}+7Ck«źČ˜¦V܍œj„&Ći„šk„&G$–=É­O ižńæĆ/iĪ‹oćĶT2(č÷VŠ*÷Ę3łŅå¶ |ēŖošļˆŅ ģ©.”äg5ė:eĢmÄ±5„‘¼Q§,;£O'¦)-'ū;āefŽ+!›jĶ&ÖSŌg­O£[ ó¼Ŗ9|Ö°ŲŹ{›“Ėj¬ŠĒ½Ka4‹zĻgn·r¼3F#+Ł…h÷<¼\n~bx7\ŗš—ŒõYÉä]Zjw ŒĒ^%&½Æ\‹QŌ|}Žļ sźq žE(8ąūw…oĒēŁ¬’šī~æ~ĄæžÉ}ØxKYI Õ°ø’–Rž’OÖæQ¼M¢C­ió[ń!#ƒ^­ ’Ę®J·>;Ō|+cisu`ŖLńLA/œż*¼Œš^Š‘°\€Y+¬Ś–-ÜĶų‰„źążbžĀŠj-¤¬#vHŪp'Ԛś£ö†ųćmāų æ‹utš°šEźi¶žm>F;e™/cŚ-ß1Ü»œŽĶ¼r5œž§į>>B8Ŗ9f½^*“·–©æ•׎/ޱ}Ž›k6TE GN•ķŚb ņĪ=NkŹŖībe’÷5= ZA&Øß «8f¶)ū©.N>QßČ( Ģą/#€+ź(­'HåÉ*+ØÓļ£,ŒEéŠ7”;év¬0ŖÅøҼ#āuƟpfFX„æ$É#(5…UcĻÆĒčĘ(ĘĢÄz×g±¬NB™ć=«”ńė«GŠ|@ŚŸf{‡`ΉøʽHÆŌÆŁ‡H‚ßĀvŽ%µ{¦µ»¶A'˜äØ.ēŽ»iģxuźŪCÜ~æ©0c ”Éy8&'fČŽæCŸĀ“’Šó°¼hĶĘOÆź~qx®įuļXj’isw+nĀ>>\{b½æDøL·XrB€2ZįŖ~… ]&‡üj¹ƒVż•Ži÷:&,—mÕ¬!1²nǘĒæłõ­)V26•ĻčēöEų­kā?ųcNŌ^h&ŠŻ!óŽäÕ¾™Æžą„öĶšóāõŽ‘”\>‘ x£Įsɦݐ|¦½š ć;p߈®ū.SóŠÓ• [·ŚLļf¾Q“IüÕŸĢś‚Ņļż1#ŹĘqžE2ŚT“Ī>`#>µĄŻyNŽŹBØ ‘»¦*ėHF.žÕn•#c/Ē^µń‡„RĒQe½“™®-œœ~aś~§Ö¾.‘·ŖĘń؆ܾӻŒv¬{JvZžóąM"ēÅRNm^$ɃЁœW=ńėĒĶšūĆ6ś„iiqsoęĖ26]¹ o„Iółž/ģŸžöz¾£Øj··rÜĒ.36vć=lē5ļž¾½š§öe֐Ę{ČŁYKœäd{f·R[•āhŗ•åUģ~“|0Ōü1ćM"=bx"X¤$·F”|s‘õĶuš×ōū½>īÖĪŌ\Yygr0Ļō­¹Q¦ gt|Yām#[𶨰Ćiäi¤ę9Ź}1ڽkᯀ4ˆžń׈u¶µń$,ĘÜīcœīz ÖR¤}Ž WĻ¶¾ń†5ŠüRŠ]ŽBĒÉ`Ÿ»–0x#·įļ^Ł„ųĀŪN– #Q—ä™~@’Ž<QDzę74üCųat5Õ ¾ø„©< »iźƒ_(~Ņ?•d·¾2· ×1B‹—Š äĘH”””“ĮEź|ŁšėÄŗt¾zŪ)‚e%^9F}ó]V£g ¦¬u8-öŪČąpŲÅqKMĢźa¬“=J»µŽĀdµ’ŠUĆ)Ö¾Xš,—žńmļ‡ä³K]7‘āc&K!9ßąk¢„ś^"‹ÜżūżŒ’i}WĘoƒ>5ø±»¶ŠĢÜh×r¶ å™'Ų~¢¾„æųTuūøfšŹ+\ŹĮ „¼āO@;ēҽ(ė”ĒN<²¹ų“ū{h:ĆÆŚ—Nšž ßųcQžĀOķXBāŻ§-ø4|Ÿ›~•ĢxNžÓ 7WXćAīkĮs­č‘Īx×ķ·ŗ&«e”h·ZÖ„w¶ k;x÷Éu;©/rĢĄcŽæ3iāķ_āZ^xļįF±š“Ę>—o§j–:ŽöInT Ē2öp@?0$W£ƒ…ļn‡ņēŅ–pX\”žėF’”󝯦Ü5“7^h“–DFaÕW#§æś)”ųŖĒ]ƒI³šnŸ©ÜŗAĢ€Ŗ®åŗb¾Š„zŸĀł„yæü—‡l,•dKČ£bz3{VżŻ“2:3 ߞ ®č#å«DˆŪłqŲē„cßi’y»v“h¬įœzšÖ>‚ęŅQ銄©,DbŚ7…Ōl|¼}j’2gAįX–öfIfvn6}«Š¤ńՍ“„[Ļq…`2޽’•>U±×i_ańNø%UӎœMČį¦ÓŅŗ]gO‚Ņ9 /µQs…ēwµh»Ź60į$ m >Zžs“žõ‹©IŖ}©ĆYK/ĶŌsiq&¬ó4¢E˜“ć„½Ņ•f”³t|pO½y…ē„5mR[}VÖ¦óĄ?ė„uZN™}eŸp~#š“ŚmģBŹeøA¶ģq°Ž8>’ćSm ‹±oĘ~ š¶£-¼:M½‰‹ 9Ż“źkÓü1šÓI𧂦mLi»§ I^h¹^Ч¤źZމ}{Dt•F>£šżkĻ®5Zźvń^ė}«É»²īĖҦTŪ&ķ–Æ§ Yvn Ļsłń^Ļ>—¢Żišv³§YnØ3å{Ö.Å)]āķnRKu²wu3žŒ=«ŠŃ3©ZAńŹ—mœy±• ī3֛ŸBĻ^š–‹ö}>öź{ėHš0 FĶ·ū¢¶Y“Ė™įćiøöśTÉś­­ŻŒ‰pß»*JŗŒ|Žõó¶¬ķc©É/˜RZĪfq2Ɲn!tQ"ÉŌV6™¦÷o$r8(Ł8Ę* Q:£b.#IgTrIČnߍqž%Чū+]FŒaQžiŲlrž–śįäf£U8ĮéÖ¾¹ųq”Ū,÷P”Ü*“’x#•ā¬Gć »­;Yæ{+‡KC.bMæu:`ś×%gay{<÷fī&…’‡Š`X™%Ó/-–)!‰K}ÖxŸJŸ}mŠw;8n=ł«°Vš†®źö×~|±[£XÕˆŻZź>,Ž]D¶óĄ”wƒŒõüźX5W3ʱ€øl¦»2[Øvļ2>yśVnźN×62@š›ŒŒlīsÖ¶tO Ū³ŚķP “ņ¼Ņf±Š%Õ4-ü‰Ä×2¾FĪõ›®jö6vlIiF>lž(”ønāxõ.Kg”ÉåĖņĖŽ0kØÖnmtøņö9Vč(ņ§-ųV±‰•ŗvś’Ś i䘦ƌ¶{žå~!æ‡Vŗ€Į=ÖĄć$t5„„{^„Ö·6vīDGv=Ś5·®éö3ZĒi„øŗ—8yųć5)“Ć‚ęC$Œ7²#äÆćT“Īś¤ gSŪJŒĢūČqĘ*Q¬†®£Ŗ_Ļo!e”®z€xĒŚ\„Ä ’²¢7Ģ„zÖ2v)FÄ”ŽgµˆmĻ8Ŗ–sM{q ½øHxł‹Vrds[cRÖĢYŻ‹‰L™ž Ž?JÓ)nĖ3Čę$Į#ŒŌ£9HåÜ4“īƒ ćŽ Y“²¹Žõ.cm‡'wOÖ¶VŲ.t:Żö„0(œÜd‘ŪŚøM3QדۄÓ\\såąxõ4Ķc±Ühļ=”ᮂGnó.{W¤É}k4„›)‰ŠtķYJ] utŸ=«HĶĄSž‚«jo4ģaTöm`FxõcĶģ§[›ÉVEduļé]…¦“l‘¤šŗ(nüŖ\¬5”&ƒŖĻ®łŅ<-j‰ó[ėCR‡vVO0ēŠwčl™ę^#±µ“iBDž ņ)śBB‰é6:ēh\śR–Ś“č~„ĒØk¶0JŚ’!†Ė«Rźēҵ^ö0!Ž8]8äēßō éŒ‹°Ļt\,[bĪŠŽ¦½wąÅļžĶ¾|ųu{eāMRK™ŁāK|bHŹŽĢ¹ėBµÓfš}ōŻż~7xKö”ų%šļ旂µuųŠĀ‚TÜÜmĆ#{ä0>źÕźŗÅ‹˜‰a‰SŸØ® D,Ś,łßā?„t}oFŌ4żV×ϱ¹C†Ē1H9R?ü¾ń†›²źz½¤å g²» ÷:ĒÓ +…hÄö?œ?ų(ĻģżsįĖ‹æhś{_M€‰ OšHżą:š;}kńīh#”™äĮän­wP•ō0‘U"ņö0ĆóƒÅEēyS© ͓Ȯøv0a+¤“tŚĒ°ķU| ~ lą“Ž“B"šPŹcP£ƒÅON0ķ³ŠD„’7G ĶZVU†,®0ǚ ¦ŲŪbķr÷īќäb½÷ökųįā_٣㿂ž/č×°G¤›Č¬µČ„„ŗĶdß)Ī?»œę¢ge3ż¾üjŃ~ ų[ĀŽ5‡R³Ōgµ‚žxH+«i²€b7rŸtž£ŠūĻOæ·]FēEMŲX¾Ói!ą\EŒå ~bøźG”Ó¢Ó£³‘g™T}ž~tŚāæൟ±MÆķKū8ÜüWšÖžāŸ‚-åšcfKė„™žÕÜņņĀ}M}yū?źēC»¶²×.ķć†å£‚åĄ’ē?…zTō²0Øļ”÷ ż‚é7ŅZ“āįŽŽ‘YpČļrmć'­uĒs͚7mļM“„T8r0*õˆPšÜ€T’¼žµ±Ī6śł<ˆŃaŠ})¶Aā²śtń»F }Ö8ĪxLÖgÆiZ•žœ–·•ņģĆ•䌄¤–Ö±ļ!ęf ƒÓėZØŲ›·”…cŖ®›!™‘fł¾é5ō6›ńFŌ,t=4Ō†]漙\’O¾jT öeßE¦^i¶o§(ˆ"\0ēŽ¼Ę;&!$0+‘‘ĄļN1°8–Ki¾ŲžY9Į½)ŗm­ĻaJn##©­ Œ‡Ā3ż¶ź)>QólĘ9Ķn^j’fę;šć4å.ƒ·c[ĆʋioØi÷ÖŃ=ģøxd#GZč’²WTÓ.Į‘!E]Ą“×ŲW<ßC¦+C–Ó|3e9hnBĢŹą°Ē„v†]+H–In å@Œķ)ž5ÜŁčW~žÉ‚’KŒ«Ū¾åpO#§ė^gć’_x¾MP»žTX¢ŚŹĆ ń€Ņ“¦‰nǜj’„°F»†1Ļ­lųCĆó_Ź“,ŽRgsżŽk¦ĶČõ=+ƖķŖjwēĖ@ŠŲĮb=}¹¬żfŚ FY‹¶čŌ/Ž„¢”ŃPflf&›ģQ³<¤|ĄƒŽøßXµ‹5ͲåÓ©šĢ²o źSBĀé£.ń°m¤zvÆDøń%Ģ·Ó]¢ŖŁ(ÓNĄyƍüI©x£Ä–W Čm¢~ķ0sŒśā°nµ}JŚ3 åÄĒ qŅ®čŁDŚšå“ęhļ$vø9ēŪč+×īõĖ)¬ę³†ŃĢaO­L¼‡nē?ajlŅ?$‰Y‡ĪŻ uחэ"9$·Iī#G#ń©)⮄=åū\2˜¶ó‘‚¦ŗ¤Õæ“mb†Q—Œw((ē“R&ü&Ōø·WØé^Ńs„Ųė6K5žš–CŹšs–õ¬ą'+}¾wlóO–Ģ#“]X¶3i‡TKyDŹū2ļc®[°)\ĆńzŸhŚņĄnŚĻ“d®OLVˆ¼Sw'‚tŲōĶ–S0Ū?ĖóJÉÄø»wĀĶ=µķė¼&DbB8ŪĘM{ö³įė=2S’\ž5ߝĆŌR4R¹ēv¾Óī“›½"āŽHa23,˜ƒsŌõ®×įå¤Z¬pO{)ecĘ?ZC±GYŅÆt«›«xÕžÄFąćī¶*އ-¶°ŠĆ9[Uł”ø†8 ĪK±hŪŽŪBÅŌšHv¬µŌńf²ÉĘ'•:¦”q„ķ P"Ūµp~ķsQZMŖ8C,¢Fa÷IÓ.-ž·§Ė=£‹ ęWdł{WāK*;ä}äĻ"Ź üøĒ·ZF§yį•»ńµ2ŲŠóŻ9„p<Ģ.K öš™”ÄŅD9§_zÄ ­K“R»h‚4§’½{÷ƒ÷éA¦\x'§F5„3¢2źwŗŻ“ŗ}œ×[„qDpG ńm_ĘÖw&=.Ł?y.eØ=³ųUJ'A‚×d¢Vs‚1Ö¶-¦‰`ŸpiĮ琵•„ö)A޳"ZŪF÷¾Ā1ŪŚ™ā=¼"­5ų#Jóī*” ł:{Ū{äCŒ®8—%Ÿ>eŗą/A޵¢±,oKĻzöxN{ĖFÖ'>L v)5¤`1Ÿ³£ä¬{‡Ēƅ_t’†ž3šn­>”įæ!˜Å!ŽcłžŻqZńżF&“N2łć>•Ć93īpŌ‘¤¶R ;cłVµĶ„“énø\1ĻS\׳Ōö)Ņ3Öi4ŗ»ˆČö‹†lõžµõ–µš¦Ę÷Į āxu6āßū=oQĆņIt{ēŠ“Ń§M#ākĶbėĀÆo.±o>œŗ” «°;eŚOCŒv­k‹«‘¦]µ“nŒ®FwJØŹÅŹž¶=7ö>ųłšÓ‰­hß,uhb‚CqHĖa’‰łÆVńŽ­ą/Žæ >;jqŁX/Šm®Åž‚ļ„Ÿj“/ņĄžõjš8ŽŻ³ē‡ółMŚķÄ3˜”øé“ćšõ’޾Ó?įšf·¢ŗ6µ,”ī¾ąŃ®9éMt(µ£#Ń­›NŽį­Ż'AœcÆV’Šü’UóÜł×Äś[j6óépBœõƗ< ¬ėŽż©¼ćÆĶwŚ£ÜĢŖēl€6•xŻEIY“©F„)RžĶ[ļ?(æmŻFóĘ_µĒž0Lķ&”Æ8¹¹ŚøUąŒÕ ßy¶°6HTs^ey]ÜśŒ“ =(P§šÅ$½²= Ō—#q`TäZ1ė[’Cõ#ŒW'6¶>Ū - Ėz“BHrĄg'=Ŗ 3SE8Ź}ī2jĻEHŽø×­Rę+9]RVåWŌ}ß±hģ':Μ±Ūź ø.€n#ПJī3Ė|ckĆż¦B­6āå˜s»Ūó¤šķʰH÷nĄõļYJ] ƒŌī‘|؃łAč Kå‚H0£Ö³6±R}Qō™ĢvņČ$N:©ī+ °Kn`Åų,C§Ņµ„ŗ Pīe_IجŠ|¤YUĻZé|7¬ ]FŹYb™Z)¾Žćøü³VqUsį_‹>¶šŸ¼_¤«‰“}RGŌ,01“?ŽL÷99Åń½äZE§€µÖŠāāŌ—†ćg1§eĻćÓŚ»pń?ĪÜ£Šqč}£šsÄWż¼¶s=¬ĖµŒ‡åńÆßž."šMŽ„ŗ×Wq å[sFć×C^„”āęó‚£—×[–<š®}2AāÆ!ģō›©0“ͳńĘzzV_‡žüJń³²xCĮ—^$…”61ˆ±œ}ćÅurā¬6Œ±Ŗ(Ā;¶ō_×ęj~؟±Ē? žĪŚM§‡­-uOSÕmģµ§#»é1ÉĄwaü9 t—œ‘_9ĮoMŸĄŁ?ö.ż‰“}U5+ńuž§*æj‘…ys²I<ĢĻAĻ8Ī6Üž|—ąx·Š2¼ ™ŖU%&ŚZņ®m5½Ÿ/TĮ{ o*C¹•Gqķ]­Ļ‘i5Äī±ĒÉbpxÕCżĮK–)¾ ń>”c©éPIkvn/HŽĶv· Šų÷Æ¢ļ¾xūšv‘ØxÆC:¾ˆ4K$€¶q’0:c=+%~§ŌŠŖ“G©ų{Y“Cr¶o:d“œ{×-’ S¢_Čme=@F> Õė¹ŻĢŽ’ŪđMÓŁ¤šFTńœW™ż’ÓÄ“ZY’mZ ··ŗEn#S÷‘ż+ž¬ŗUø‚žĆlī;¹C^±`!¹‚!*žė"¹’<|LO6ńǃ$Ō5Øü1Ņž?}įn®¢O ėŚEÄZ„‰‘Ugņl‘Ęæ›OŚ×öMńOģƒūAüFżž’·ķ¼c”ZĻęŸwėi:īE‘…€ąż+Š&£sóJœUMńö+ēt½­śYO–ÖļŌż„’‚I'‹¹ś’:ā­&Տ×ųc‡#ƒ«:ö÷¤’ÆŠī —ķ1¬H¬NbÆĖo&ž„•¼Ē‘żźĀ õ?DަžøBY“ø®¶wFhĀr¼dzW]ŽzŃ,Čéōr)ūĆ8ā¾tŌ”Šļ¼I.Ŗé­‹>ŅXõLV3G™ˆ¹”ą-BĖįü$°åoōƜȒ? GƒÜdf¾ ų“ākoė÷–µ{y{`³¹ƒ OW+>K3OVių~ćį~µkm„Ć%õ”ĻŸõ˵[·½Tų[PšŚYß«Ay„ä’>@Ŗ(ųŠ•õåg¶|.ųø¾»k·‡ķZlĒlńž†ī½‡?…~šų_TÓ¼Kai{„_ZŻ[O‘Z'ȎŸZ퇙­*§+āOizˆŗÓīĻf$)—®t«ļėlÆ,9'iéøfŖo±ōŁEuĻČś˜Ÿc·µšĆ jkŌ’w¼šÜ•;JuĄ8ėĖ~µŸąvęŚÖŽHÆs!Ü=G½g \śØĒ±÷oƍqüI„z!øæwIžw/®;Ö’Š~Y떐]čÖPŚėqčW!ō5¤©¦“9ŖTqgćķšvėį}Ź|lš•‚é$·kˆtø”ŖĮ.x`Üę³>kzGˆģ„sIŃOhÜ7Ÿé^ujF‘©wbʐŅi÷ĘĢ;$… s‘ŸzŌń_„4Żj_ķ·Š L ĶT*=ė:Z2'BźĒ”ü)ń‰ąWŽāņį­^Ō‰Ąūž£čkõ£Į_šRÆŽ ųu§ĮąļÅæ–ø·+¼‡ÄžĄć§5čBŗGl¹ÉY’’µļ|~ń»ćߎé—~9Ÿ|±Ź‘ķŽ0«…^€s_:x@Ž^ KŃ5­Ź>×ü¤ŽįÅsTÆwsjxND’;-^ßĘo0ü=Ō®ōßĒ,ré0•Ż ā°1Ÿ›ƒóĮą×ęWķ3ńĆö”ų¹ńRłiż~=gĘ4 ¤łq鱌£ęŽY*äƒĮéƒÅ{łEi%(tvü?įĻäß„…ö|EŃĶ}źäq“M/Zń§‚ōżZņĻMÓ%Ōb/4äOvöÆŚ94ļĮ¦øŅ4Ż6cˆŖ›Güzž5ōTŸcų?0©5- š<’Łķ1–¦zļ£.ķŚį™b`>¢ŗć+žęŽęe½Ģ>-øŒŒśV°sxź<(Ŗ±Ė&uv¾ń$ŗtš¤6 Ų!+++dƒ×§Ņ¹i4ė}v;—†ņ3å 2g“ƒ‚Z =­¤ŒÄHeć„?Pš•Ī©ŖB x c¦ģžHö§Ė©Ÿ!­,KįŻE»ŗˆ^7Ź„śžÄĆ`Óµ²Z+9g裒I’†dѬu{»‹#a|‹ ¤Œ‰'RGNk–m{yŚ1øņ®9•ŒœOEžĘ“ģŻĄ”ēźĖžõ&Ö{LĪžT˜ź{Qc)£¶æe¹ķŠqÅuJ÷ėo x_«ރ"½śĘ,¬pĄÖ-Ū@‹ vO(Ž éHĪQźVMvgQgh$…ˆ Įõč:: bŻå‘će…‚°Ļ̓A™«„hÖ–³<±$ŽP[„uW÷–’g³³@\¬Ż’?żTģCLņŪ«‹«kéü ž~ļµfĖsmq<‘Ėš„uŠD¾ĢéīõF‹KŁ@…ĮĄ${W–jZķÖLĮśzŠ\bš%Ó”•ˆóXōĶGt²Ā‹p +G8P6ģfĒē_Åq“‚B qچ™…¤Šß7vT9É gŽj˜®Õ•ĮŠ5Ź€3ŠĻÖb»ÕąŽŚYJĀH*?fŪiė¢ÜAw’$£å89ō®[āζś­–•mcv<վܹ/ĻŻėÅqžńm߃^ęgµŽ w%GØÆ„ü?|śī…żĶ³ÖBųš;Qb&tž—ĆZ•µŻ¾ßķ}`Hź¾\ƒdL¼Ź;ŽEA­›Xe.dŽLŠfyµŽ”Inć~wdqŠóĻėÓiŪ„’,ׯœ,‡ łŠKFm·ŒŃ­ DÅµĖ 15ė>jvóNó%žäĪ9S@Œ«łQÆfµkwFĘį¹1X÷§Ć_iÓĶķ¼ŪLJDųÉ zTɖIµŗÓt»\Ē ™vŒc¼ĒWŌīu=Z8ķ'x7˦Šw泿p:mVŚtFVńK!B:ƒ\Äŗ”'ök"y|¹'8ē¬Dq8¹Õ4Ų ø‘™ķ„L™²³é^obŚģ73kšuķ÷Ū”•%!8¦Óxęöd„ÜH·W›æ|ĘŻņ wśEö¬ˆĶ¼rZĶā@ßoQž{Pe&iź^*Ó“ !ūDOÕĻ$ńž5†’hö÷WŠÅ˜ ™š8}~Ś Nį\O¹ĒĢ2qŸjóėŻ)b%e»›żź ×™ŹźvW0αFVźÅæĻåXZ¶ø²Ąm“LC3ąvż(ÕųWĶŚÖ”s§ZĆv÷ńaJ”<Ū5ÖźŚĶ÷ˆmī4i Ą‘YÜ@ćšÉžĄšž™ąūŃ©iÖvwėr)!Ā—SŲÆ|qĻ©®5¼ ¶};ĚdéĶ«‰hdī é’ź©R2r=kÄ~xO:ÄŃÉ ėŒ»nÜG§øÆž¼Kū>®œ4ĶSJ×/ā†ųX ®AOĖ­U‰ņ7­“żm¤š£zbP“”?ēŲZų–īŹŽx]ęH”l Lƒ„Ź…cĻ®ü=$ŗÕŻż™ÅŒį$q¼‚’@+Ģ~#ŪOgqa;حҬXć€=zS5‹čaMaq«XĆŖ›yķ baV~aĘ ō?‡Ž±Ó5k{NGS·9Ļ9ō ŗńā)5ėĖkEѓ¶$mi1“éėŅŗ/ųwYŠ®uKrĢŽW—öi>ē ó·ń¬Üz™Ū©Įx›O“R‚äj"ŚŽ!(łsó§åXšt¦Ź8ၶگšƒĮ”¢ąŽgYš).ŻøC(|•#u`ų‡ā‹udŽĖT“OemŅ+uŒÄ? F£¼?>¹csbn.<Ģl'o9õ©|O« éŚdQĪV’'søąéļÖ®1¹†¦{üCń†»¤=ŽŸ Ė=ØAž‘åķŁī½gxDŌüS؋=FŽtøWŚD§֛ŠŅ=Īo…S•ćÓR41€ŒŅ°\ŸAČꛧü?KK»haU¹qlŒ–õ ŌĘ †®mķlŽĀxąBģČÆ\÷=+ŽŃõHš–j’#l†_z ēkmį;¬ŸgŌb¹w”€€ųWÆxbś÷E³–Ę"X€F܆õ ĀGœxŹĒSŸR{×G{žOlzVN$Ģ6­»–9iزCVѵMK7Fm­ŒÆ$z õ?…¢ö)ēMRŽÖ[rĄD&p Œr½l=ŽāgĆyõĖ˵øū$ŋ(‰vÆ<Ž€Wį՗@­u‘öė¬:#ÓŅ‚ć&`ė:%ÕŻÄ—V {üÅ_іžŪżīŻ\ī‚yéŠĪq*OBÜŽc\ƒ Ž&č¾ę”ŌlüA›‹]:KµUó72 ‹ž» Ćo©é6s]Z`ŽjĢUˆķżkwÅÖ·ž(EŽ –)£@œpæ_QÖµHēĮwPX*Ky1•†_ =ĒzÆmąż6)#»ŸRxbŻFć7©Ļj Ż‘aÆ%Gh­™”€?Ģgr’vÖō°.!ŗivķ%rz¾8 ‹'Š#†ņH%ŽAĀx®k/@[kkĘbƒŌ¶:ŌŹåsv=āĮ£ø¶bµC ƒéXö’„ņīī­ŽBł'&{µb?™Ēź¾h®™<Ć8éņަ¹ŌŽ[+‡Xcc*ŽÕbÖ„qq+ÉpFEÆZŻłÖ®ŠĄ!\m«;(Ü[x$&Ą]“ļÕ±ŸeSq#&ćĘ盽ƣc©Ņ/ ·xgQ¾j”Ļ ¶×õ:ģ3ÜaĘĢ{5ģ^ńņhy¼ø¶¹»GuVmĄ*®@Ī é\rGj—CīSÄžń—…“;;CƒtV›ed205|ē©|BŃõ GÓįu13FŠæøõ”G(³Ó?eŸ®ŸŠ]¦»†’Tef$4¹Óį_Gų®üźž’Ō3dV-—ąqĘ+K\ē–Œü…ń.•$^ Ō—.Ēe“ ą¾sŗ»Ļ ŗ5ƒłw±$ąa‚ ÕMv(XŲŻĮÆ\_+I·&BĘ_rJŃńŽuķ6e…tčnlT‘œ•Iź8Åg4tBEÆi÷<ń]ž‰bÓC<ŠļAņ±QÓ5ō÷Ć-h­Ö£ L×"śĮÄDČæ<’Ÿ„(¾ŒŻ“āŃōœ–±yį½I°±{ĖĘ·-oßk/9ĒŠń’ų¦Žūþ ՞ŚßēqĒjF@ū„G^GZŪM.„6žüwš³ÅöcRŌ,m#m.ĢLq”sŽsŠųŸÅÖwŅ„¾„r­˜Īäaó+TņėrcÅīįĆĢ–UžGOjōxžoėZ„“öyf r›¾PøūēÓ“†žĢżgš‰-u›;+č$‘`– NG‡å]b¬ņŹ¢-Ź„ēpØŖ•‰ŒuŌ{ü8Ó¾-}«Į:œ–šG23Dņ`ĮN>nµłoāMžjŚm¤čöÓ<±FŒ¼Wõ±ŃI[B–‘©Ļ£ėzV¹ję;›I¼Ķū°@ĒoҾ©ńdšŒ<+§|@³g»š|Ūź,Wœ?QĻįAŪ~˜’Įj‹’€“Ž»šcĘZœ)šæĘ%"¶y¤ °^cj€OMĄ‘\Wö©iųkX¶hnEÜJUɇF\ƒśŠ*EŁ3nd{ׂõįql¶%”1Ų„yoķ%šöĖÅ>_­Šź6nöŪfMŻ«d0?@Hü«­L›?ƒ/ų)ģÕmū>žŠž$š÷†­ęµųy®Äŗ¶…¾2¹tVź0sÅ~ZOnŠĻy”†ņ,+ēŲVō¤eQōģĶĪą9öŖšĘå¬_ė\ąī8 ] Ųä’ŌlʐL)Įćƒō¢HČŖ…»s[su%FĆn­•eyģq‘·µA .ŠÅ·9äśQĢ µ//Śą™—Ó ~Ųi—†ĀbóāpVMŻĮ?֔„c¦™ż?Į»¶–Ÿįx“öńēˆoSHÕg{ļ½Ė†KiUKÉ ž«Čܳ¦æ°]Z壶„mĢnbzGĶV'O.§™xJpKjĮ‘$;“ھ.ż¢|-`š_‡ü]¦éÄŠÉö`d ź~ä§üöjó¦ˆjĒåOķ#šµ~!x'SҖζéńK'™škvé×®Óüż«ł#ų”ą%ųećMwĮ—-{-ĢLn–y(f<„oJZœõ"y$Æ,ˆ5u%ø Ōy’'*Sr:“]ńZœÖ$!å ĄVēJźū2 nÕ°Šb&D˜~“‘ø),…°łTĶ&ózØw_J<䥐ŁõėŠšł*Ŗ¹ĪėV6Ü]ŚĖ`Ó5ؔóŒńJHŽ'ō_’Hż“ęšÄö?³÷^]V dé ß%圧”<łgętÆėćįÖ”£•o6©ēźš97ŚDÄüז2s·ż ”Ēn{Šå؍ĻtūL“Ä-įB°Ļó+/š°«ö2o“¹m~Ī+:xŚĪž–HˆĒ õ®9”ÓGš’£żˆåż‘æhWQšõµäß uėŸķܒ±Fä³ÄŒ;!$`ó·łuh.ķ”røŚ6śV6ÓŠz'|Ms£@š{Os$jHŹrZ½ĪöĒMń'†Ž„œjįIWžĆڱ—rųćÄ^k€śTsŁ]E¶bć+žļø®;W¾ÕßÄSĒķ¢Ų²nˆD¼ 7d'øĒJp©i łcü ųÆų–Äéz¹:”– ķ9åĒéżkéżīJĖ HĪzÖ»©ĢćØC®H–¦Ak¶WqĮė¶³“Qó(3ß”®“īr›Sź(Īb…Iąń€kw@h,fW“‰|ŅįŸoh–—)>‡¤ź÷‰yjŅ€Z|į@č­|’®M5Ķń‚E(ŖÄqҵ$»iįż[Åq4Ņ<ŲQ—åĒē]$ś'‡¼=ā->ĆK¹šźĪź5u!6ˆŲŒ‘ųPj¤t~#µ’ŽŌ&o-X%E ŚLˆdvV]Ų#½r(x±į-QŪČĄ0ÜTŽsėK”ÉsĄÄ ‹Ī(24üU©Y}¦6Ė ućžõēw,’vFĪG4Ķ(ģ.ćkid@-Ž~|ņ+ŠĪ³g’Ń!0ķ1Sž•”¢t.ĒWšöÖ få60'ēĒzä|S«évŽ,1G2¢ĘRHĖnäŌŲ®SW¶i#s„s޹kŠÜŻE Ś‰ĘŻ@WĘ×p"Qčq—ŗ|‚0ųßpOZōŸ‡ÖJ¬÷,Šp’ZŚ2±„£cŲ5K7ū óļ• T/#½y€ó,Šy®ņDÄēžE&Ź‚.ißg³œ^JńmvüqļW¼uż—©źŗ:iķ¶Kl̓ĖJ}½Å#C–fFČvFåNŚ£¦Œdū7ļŪ;Zh §Łm#4ŠFĮĒ”Ŗ+mmx¦6>sŒv¤nĪ†)bÓ-$EEÜFGO„eÅ©fčf9ļ@ĪŹŚQņŹåŗąu®ĪÖĶ)£¶ ĶD„måO@)ĘV&Q¹§eqcpciŒ~[Āŗ Jōū4KsپRå!F&<Pźv³Å0ČPI.8⼋W…õ(ī, ²±b § 4łŗ\²±’„jE†įŒ³¢įĻCšĄÖ|mæQ“+uz³ĄĒaÉĮć„ßx_ƚ¤¶w6ś}Å“ģJΤtĮ®wā“®čś÷‡¼Oh·ióĘ?v­ĆvŻłēō¬Ķ#.†¦·9øŠžK¶1§Ė\üĪMqZ^›“cī„”9ĻSžł¤5©čŃiŖŚ“[Āė•b~õq÷¾K$cµĶŲ‰ Ž(Cŧ¹ŗŗŗgƒfÖ s uŽŠ3{9rĢØ”mĻ4£Ų~®5ŻkT/¦D$·Żµ‚)Īģćük»Óu!«Üi·ÉäL7)ćóżjŌ¬bśžķą­1“›ī^Źčŀč0:גĶā/jZ¤É¦JYü’)RBB2īĒ5\¶(śŚ +RÓt :MI!RŹ$Źž÷Æń/ˆF¹w „…½»»Fp8?ZĀh®^†]؆x‹DNŽüzV6« é8&20šÄ“Š|¤O£Ę×,ļ$©a’ķ^‰ˆ`ß7ČĻćZA›CcĖ|A®ėwOķyÄßźW7w8GœŹCĖҜec;q¦+Mµ.?tŻ®āÉ ‰‘¤`ąŽµFŃqy§Ž]ŃR5V“Į5īŽ¹ §iś“ -Ęd(0Ȭ%Š£Īž$xŠļIÕ/”µ†K­#V5;²{žUåŗOŠÆ5‡¼†=>{8āłdRs‚G’\UIhTasKO±ø¶Y.Ć0Bß3 æZō½*1Ŗéfā)÷CŸ/x9Ük–{‘]+XŚ13Hع s\„ęęĢ—©:͐1“äę²$2Ž-ęftłē‚V(ņvź+Š4_i¾Õeńœ15ŻÄEz.sĪ:f­+EjrŗĶ‹MØÜl’0ļüYļ\„į›»&’;łŃß`Ē÷{b“ŲŠ½į"ŹęŻÆŒbI³µsĪ=ė°š’ĆmeüI=ü"ĻĻ)ä)+Ū#Æj\čŁ^4ŗ‚ķml­l–ŃaP_‰­tßµ]JÓīõ;»{w1‘zŸaPęÉ“ŽsQŌt»‰/o¬&UvmÄ0s^=¬ŽÉ,Ņ(•¤$ņsŅ„–—r}#\‡H@/h[{WM.¹„­øIĢ[²Bžk7kŪ^h/¢„Ģ·®³3’@,ø’ņ/kßōū!$śĶ°ŌX±ŠŁpŌšÅŹĒ”F›čy+žŃ·ŗ~ż£<×:å į˜RyĒąŚĻ†.¾%ßhŻŲÉ®ō•ä™G*x5ē×®‘śpÅ|Ļ 7”¾äŗ·äæ­OYšĻ…t Ó”Eąüä}ćō®ŅŽÖIŒ¤ļ\ā¼jµī„<#Ā8|« 6K~ķ½Ūó䖇”ų3\>Öt•f— pƒ¦ņqš©ńWÄŗÄ/ˆŽ!ų™bĻkowäĀ-ƒƒķ'§Ö¹ŻEk{…Į-Žę$~ ½Öķ“ż.ęśķ“Ūßg·y Ž õŲ;fµnŃdÓY× !v&±›ocŲ§C¹©„x#ĒZ֙5ē…<%ØųŽŲ$­n‘ßņ5ĄŁų‚Öµj &Ÿ­YøŽāĪąl–&> ’:Ė•½NųĀĒCā2Ϥ^ŪŪŪ‰™£9dŚńĘ5σ ü§źKń~Ÿyö[øć“oŪ /ż3ÓŚ’]ĪŲ- ’h‡v§šoį­å„½¶” iķ[ŗ|£s=KWĪZv‡¢Åą›™„¼¹>*‚ą.Ā0’ÅŽ£ßÖ©(õ;iÓOSœÓ<%¤„õę«ki¼Ņ°31ęVõ„ŠišŽ%Ŗ}–$ķžöim±Æ°FŸ«ŪGzln`,F}k”Öo¤¶„Ų3 ­V©“‘>Ÿ…'& •Œ­6ŁaUĄķƒ]jŚWj‰ŠÉĖ”“Œkėū]&t’éWÉŽŖå‡ŻÉĒó"½ŠÓį'„¼{s čz–»©iz•Ģ˜G3°‘ĮėĻ4ćcž½D£dq_?f‰Ÿķ§ń>›ØÆŽüżūŚĒ‰­ćÄĖßńÄ©-ou ĒTrMdžZĢąš©ēčMuAXųģĪÆ2h÷Ƅõ/‡Ž%¶ń‡u!‘#¬ņ ?qŗ“Ē^•ż| ż¢< ń·Ć2K©ėZu‰£²ŚŠ3 ·¬)N+Ń¢ś ‰Ž—.d«¹-šßĖ,Ū@Ēo„yĻÁ𓿓ķ-ʋsu„čž’žĒ$žó ņ8ĮźĆź+”ҹēfŌ0xyUØģ’?ļ‰īŽ(Ōmn šž½iqö› čāŻ*·B¹ōö¤ųŸą’Ų«Į’ōæźž$ń׍‘ā—Åö‰*»Ęę`J…[ Čż ōčRVŌüWĬ2hŌĮC™7iy+h}’š’Jż‡lü_£ėš?†|ećÜZŖč‚)iīz U‰äķĮ5÷ēĮ{ĻŁēįgÄÆųēą’Œo-žßkIkā ė–NŸ æhVpNŌldšzœW¬©Ć™ņģ~ÅÕsČŅ•7 '/GŃéæ”ś›ń+ā÷샫j¶>ń¶» ßZi­ģIl»ģ÷7#-A=2+¢Ń’jļƒ‹=ĄšOˆum!X¢¾™„°…@•ąg„odµ?‰*šGāšńĆb/ģõ•„.ƾīļēæMO’l_ų(¾‰ą½ ćĄæ “™u-WR³šĶF숒³Q”‚R>w8Ļ~‡óÆäCö’ų”ćļŽæn>'|Kń.¹ā­ZŹĢi–ņBŽEøcĀŽƒ'$żkĪÅÖV?¬~Œ¾ Ė.Pϱė÷ƙE.ń6Æłwæ§Č<°ē–=”§x?\±žŃ×¼)ā„šéī#3Ūm”!øŪW‹RWgöż5dz~½āi5ĖļŲ„•ø·ööŠØ3æxĒ>§śƒćķWńg…4}_QŽYnm­UIV ÖŖ’=¬ØŚēĶ0é·,°‘ģ•ģM{ēģæū|?żŗ~ąóLć ›āŪo Ū„z]ŪWčŅkĶ:ųšóž?iŚ:ˆ¾ÕpLqø?;°½M{„–į/†šģ:ʗŖ°Ł2āaóy‡Ćß½sJ¢gčҬāŅīĻ‹<1āSe®¶œģ MūÄFl”¶kŪÅŹÜlߐŲéėQt>†’.X•ŽåC° N+NņY­#i".ź+u"k# Ğ*‚=/GÓķ˜.§qx-ÉcٱäkĖ|qµąķSRҵ) - ˜Œg Öu*¬z .æ©x³u…©a¦¬œ°øō¬=CąœZÜ„“;łō»‡nY†č‡æ^õŹ|ö6ƒi”× ī¾Yė:ž±¢’mmpžŪ2¬xīŠ äąńT¼ūCü7ø-„ųŠņģ)‘&ō+ä>pśbŖ2±łö7,šŸ2'ńŸ‰4O ėMo§ŗK¶ėIǚ§‘_F~Ī?µo„|ā8<ā å›F¹`‘W䉶cwož½jŖXåXI„ŖŲūŽēā…ĶļŚ¢ic‡ļ#õ$V'Œµ­ÅZtĶq#ĻØ`2IߎĒōŖuOKĶ ŠlųKā÷Ę?ÜÅįļŽ_^Łźv7mrĖ<$!9ngŁxĒLX£[]nĪ4e|ų<ÖŻt?YĆŠēŠ• |#ńvŪJUŗÓ|KckØ@«Ļż+쯆ߓŸƒu›_ėŚFqßø2äH}źć‰#•ó+£SĒž3ż›¼uįæčž0ńg‡ļlļķ¤‰Œ­·Ļ ¤`ĘA9üüų.ųA¼_Øx.-TßYY]I¬¹Ą’Ä”śb¦„dĻ)į'ϬN§§}Ŗ(ķŚśŻ|Ä`Ų'Ԛ śjYß)ąķ9õō®7$tĘ-nZŌ“”#ĢP§'ž{Vv•¤\]k:^¤jzÖæt pYéö=Äąrv¢HĶ–ēćĻĀ1aÆYź+©hZՙe–ŽņŻā’HȬ_ėvś†•eØ-ͽܒŸ1ŸZ#rԚčw> Õ`ŃōµÖ”–{7‚āÜÆ“Ēó}ąŻ±Öæ(>K›XĢ›|É··śWąĶnŅīĀM>²{76Ī ’ ā1_QN'š†7fĻ@T„r)ezÕĻķkŲ£{tvT~ÕŲłŗ±źii֓4k!.9ü+³Ój‚ŖY3Ē©­iœĶśW‹5±>”¤éļ,0Č<·M¹:Zām隵ͬ±¼ ēŒn$÷­ ¤v0²“ė/’Ą9Ż]•ž§*q%’›hśŒc"ƒžR<ŪĒR­Ś[Ü[ FIį®CLŌäÓĀɵ‘çҲ’3s:­.Ś;˜L’ĶÖrÄ0ē5Łų~Ź9§Tr«99aŌb É»–®V=Iā±f’ŁŽFF)×V;üš]°ąž‚˜¬fĒį-:AMŅ6āAąŠÓŸK‰ei!hŃxqĘi¶JHó}võ­õ‘U¤‘»½P•ćžÖ1? »?0éRD­ŠĻԔ¬:aP[lw­}3W¾Ńt¹ķåŠ+}FUĮ`sČéõ¦ŽyZēpŗ¾¤ēyļYNķÄc ==9­{x†Ł#ŽF ˆäV—īI ŗŽŲŹŗšOQžO„hZ X I}'ŁįrGÖl‰- }cR† HŪ÷%@#ڳuX,nB.üŁ<FjDš}©ÄCa`½˜ē5R·2ĀXČclüŖGJä'ƒõ;ī®įլ̃P‘ÓŽ Gć-.K­?ϳ†ģ~ń¦x“Y]YA~tå²¶žā#łØ#ž{ń\Ć[K¹$r¶.Žų1§•d‘ī µó6żÜ†õük7\Ņ­Ļl»•]ϟOĄ’:wõ¹čŽš–‹oįėh4{F›ąÜZœ€SØ$~‘®Z_ O„Ļ}¬ŁĘ-6ŔąŒPR‘cĄśäZŽ«:Ķ~—Whyƒ'3z U‰ZŌ¾iµ9“Łķ¬Q’2ū¹ÜxēüśŅmuėmc\+Ø.ÉlW.¬“\߆/ ψ”³ø’`Ń&ĢįOl53}ĒÅ ¾Xę×t¹ą²Xžv@į·ē¦­cü6ųƒÆĮØÆ‡uÓoqf¬J7“óc¹ ĘS:_ü\Ńīo·&‘1€#kØFHĒū9ė^1/Ž.t{ē—N(ń)Āī^£ÖžÄ)³¼šgÄ«‰5ŗ­’M„m2)UŚ|Īx$Ž+Ņü?«>§q+Eq¬„‹*“ŒóTź ¾Ēk>Ÿ>µh÷W·6óÜ(Į^rŲōÆÖ¼=+ß³I" ņü¼ÆÖŽv]ģZ¶‹Kµ–;9acpp|Į÷HōéM¾šźKē]1ŚŹŻĮ¦żÅĪ>ÓĀöė4F;ŁČ#Mz™ÖÆc"[!™B– ó(ōĶ#yō½*xX‰…dånÄŌzkĄŅG’‡#Æ‘¤ŹųļÄsiPƒg—2H|¶“=É®kCŅ픊×V–ßf @’G^‡”·ŠŅ0¶ĒmØ\ZkVĶoržnJœæ ļ^Tla–Ymn]#mÄOėPL¢_Ń ²2įįS :Wd¶ÖµKSß½;™XĢÖ|/ p Čь}®TŃ?³–SOJŒG<֑•ĄÄoų—E#Ö¬ŅśÕ™¶d…ķzÄŌoG‰aŽM*5I”“‘¹ä zՅˆ“mfžŁ$†pa$ķ!O½w~Ѭ“ż^;ł'‘ą”v%qéYÉōK¼¾²ūd—ʐĀ[œ|µæoÆŚG <@ķ*FsĮ³6в<ÆÄRŁjŻ X¬˜īOēÅxfµęk³§S™·“ŠU)1ŸDųĖĀŽŠdÕęøv·±e9źEwņ]é7DÜie¼–ĄA(ĆQĢÅĢŽs̀Š(ģå·Rņ03¶¼źāŅD‘_a݌j°hd[€÷/č鷎G_zŪ›Ćzs5µÖš× č˜Xp[¾=«^c>ņÖŚ8§Kµv| }HŖÖ66ÖRG;Ŗ“DćséQ)tīžøŅāµqęÅ$"Eł;ÖļˆÄw1]=¬‚(‰ÜcFĄśb³Āu9õ(.c¼_6 Wƒ€ĄÖeʗ}|ļya*"F”ęĆęž¼P3“ŗŸę”Üł1ŹÄž8…WƒĪ*͐„ō+V—3Ć3)sžKæ…n[:J%,W°#­%ŲÓÓŁ²Ę BŗóŠ¢ŽzLŃUR)K`±Y iē!ä;‚­wś&”kon$³}Ü0Ī;f±!«jcÜŪĶ:MŽ'ņĶ`A§„±c€“Ę)ié$Ä“?j\c§-RĀÖš%ŹFŽŒ¾‡ō©šŠ®FDuX™wąŠćµ=Nś(äÜ ‘±Ī1Sr6œxcœ2 īćŽ3Ś»b–`yó[˜ĒēZŚĻ|ńĪ«āĘŌü§ŻŻi„l‘䐪D°ć< łćĒ>ńo€¼EŖé5k”å~Ē3`¬¤ƒ•ŪzŠŠłŗq}"Ilē’C¬’‘ó t®„Ž¢ŪŪŁĒ*ƒ` æxõ꩞5”śū,Łų6ĖĄ9Ō.’ā|—Ÿźg°° Ќęøoš?Ƌ_‰Öŗž“c§Ļ{œÓ§ĪHČĒ^ōÓ÷¬jā{oƒ>é¾³ƒM°ņ$wŒŠŁ »œ×m­é²čŚ©ØŽĖŁ-¢}»ųó²ēZ­ŁĖ[ČüŸńf¹ż­>£=¬ŠZłĢĪ‹(čA#ÆįU|mus«EnaøøWČ30§ŠS1³>ž“Ą·vZ8ÖfÓ&ŠŲ¹Źž= >õēž)¼ŗ“Ć7¶śNŸŪ©™āĻ–=sS8›BG!šš}kI’Ć_µ‚Iļbø`˜!|¢į_YjÖZŠtoł‹ŗ„c%*eĘ~o|ƒłÖj×= 49¤¢}AąWh¦„LĄ¾7žz~Uē·‚ībų±m{¤ŻĻdnIĪ̘šv‘ż}\eŠä© [=ÅŚŅģõ}ś7¼ūL>[(8Éźüś×å_ķšĆTšņ[Ž4cOÓęr# Ų/ĻaK]ĪH®‡ÅڦœŠ’CŽ'.UsøÖ=’Ēn£0ĮļķZ§ce±öæģńń&äY§…µFg,Mŗ ÉŒƒĄÜōÆ·ģŽGƒ*ĶĪ:ńšrNĄ^±šā+Ó9žX6‚”“‚ |ūKų'K·¾»ńNhl,ļaBȇīȟy‰õ'ŸŹøē£LłOKŠÆu`±Bv~TdšśąĪŗa¾Õžx„Ü&›«Bc„8Rhžé Ū'}hęW±ŪŠĒ×ī ż®>|6ųļį-F×QŅu«£Ō"i|‹µŃŌņTųyČ5S•įĖŪśż ]ģ} ®[;Ū°Tłć;—ŽÕį5šŽā[Iģ/4Ó/£0\ļØĻr?Zóź$‰–ēēÄĻ Ią?Żų:į-5GLĀ̹Ü.­œp}ĮęæOų)wģ’jś:ų’A…”ūÓĶ#$g˜ĻD u’ėTĘvw2‘ų‰%„–īˆŁCƒœgéY’Ją¶Ō-ަ½ĖŖ9f-œž{ŲG=ūU½ę=Ņ$ņ­}”‹‘R\²Œ…‡5Ę|ĄŠ#!ő˜¼ķÅ žļ5TŚ-¼ŠK»'@žŸZ²{t]į÷}#;Bģ7—‰ščuAźwß ~)ėŸ~)x+ā¶‚Öń^éŠ]:Œƒ4<F#®FN+ūvżž?nų–/Łök徟Q>—s.­[ ,žį-łt®yÅŲźūݦ\éó¼XĻΟu \ŁČ9 3Ø9ÜUĖč«˜“–Ņ.Uąōó®:ˆŠüŁ’‚›~ʑž×ß²o‹|"4Ļķ‰~GÕ4 :½Ü`bõ9\Æģ~?ē©éWž×õæ ^C$SZNń0cŹ•8Ś^0k’/^Pņ8Ķb+Ū‹K«2’mq¼稯 ü āø[J{K¢~ŠH č**S¾†rG ßx²ā×N›M“ÜįĆ1įMfjZ­—‰4ķĘĪŚÜźģļ7fBr3Ӟ+ĀĘgŖü7ž¾›O’X#³¹bĻ»åĆg<šūK¾K«_1J²ē ©é]ŌnrՅ‹!÷ rĹ$Uø"ŽT*€ßµz4ö8ä¬Omm°4xČ%jß²žŽĒt›UÉÉ5Ń $z†ÖŪQŠnn/g[+€Tė×9Æ5ń— Żø·bń«}š9aNś”¢tń@Ó&ĻL÷®²āX-SOšõpČ2‡Ŗ\•ĒŹĢˆ“ūYAµŅG&Ęk"NÆRń¾›”ļŽyŽ>TēØōOMxŖĪ„W!‡Z a°jvĖs’Gµ\ōĶr"Äw‘³‚*%.‡D6,ŹĻ ¼O@`uĻQUtćwØ©Ą ŃsĘćP¤Ź&ÕoµėK§ūäŠc‰#SĮ“Éõ(õ 5ŽīŠ oĻ&“Œ®8»ūw7 Ā„(TVÄv·RZ–2ć÷5¤[œ6Ķl«pTü]+Ņü;āäiŃ[b¾Ńī€šŚö4„zÆ=½Ģ/Ś#å ēė\•¾ƒ'—y%¢(œ¶8éėłR”Ķ.k™­„š}ÄŒÆ 9\ń]‚#IÓdµ#Ǽ²)o»ž¼~5“•ĄŁŌµøµ¹;D>÷*¶‹¦‹g†Iˆū?Uē‚j@õ3>› ­„Ē‘kĮ¹ĒVśÕ?ė+wR,q˜Ś6ūqšm²ć¹ä—i;Mq'˜Ņ»†`+”“S–FRĻ– ¤Ž1éA©ŲhW°@—Ē H¬09ĶvšV³1·6”ˆĖ¹4aÕöŒš„Bk›$‘·¦k˜³Ke3ióKbp»ĪĻ­±W<—ÄwĻ ]MnŒ€aµyø“æęY$ Čy ŃAÖˆŚ¦ˆ%’ #·sƞų®OS½yXŽ8™­8žWć‰6ž»“Šd[™1†|"'Ŗž¹ė_"Ī“j’Ļq4’›¶Ī_;˜ų=«†³±ģį)ō= Į~ߝõźIoe Ȓ8ŠąČsųd×¼ŻFĀŠ‹XB&IŽ<ą.kęńuzßæGŽś–ūJ²żådšÓht’Ą¾-ģ×/Tjh։*Cø/˜ø jģ/47O{˜åy<`W˜ęOį(õ9ł|Xu=ĻAm>ŚÖkRŹŅlĆæ=Iī*ĒĆ©ü#«5‡4ūŪķĢ. /µ•Ųž¾Ā“Ÿcß”A%r‡ˆ“½2=sW_ yßŲÆ10ļ8`½³^+ńū\Ómlōy®ܾõ`äd/'š!-uyøź~˜~ĻOĆWG“–{[mYÓRU¹wŹ­ĪߗZ€ä*4o“:ČvØnĄW2™ļQ‰¢gĖ#õÆ”“ĒŹĄv®ŽVv{3ŽŌü7œ’ŚŚKr±¶÷\ņW½Vń>©„ź³^®›hmmŚ%]ŒŻūćæ­=L%L×šĒ,­ćŲ…óŒg;Et¹u˜¬l›”’x’yÓ|sšćǾŗ‘ļl¢$ĘH ÉĘaßõÆ®ü ėö µąūŁt°˜’hįlžį]4՝ æ.ģż¢’‚yxŸž’Å;‡¾&Ōą{‹{?·4 Ż"'TU'%ø…~¼~Ūž<ųsū8üńŽīōŪ ö’KøšÜĮ¤²³Ē˜Õ›‚ĄĻ'‘šķŒ¬®ĻäosœUN&Ėr,,­¶oĶŹN:ś$ 'ĀÆ‰¾1šõę·į/ź-Ьā/{zæ-½°Ė6ß0ŒP:WCšĒĄ¾šö·¦ė¬SVŃŸ2ĘŻžęsÉ=šqé^Uu­ĻīŒ3Ѥö*ųŚĘĆĄŽ$Ōh„QwŠ_Ģ?Q“ڽAŽ})3¾^ ÆNņõĀ?ł2“ūŌmó>+]sĮ?/¾0jtĶ&ņĖĘZŒÖöĻ:$ŅdiŒQ€Ķ’d6 ÆĪŪöųƒū2ų3Ē:Ž»āmÅ^Ó"”nYĢž .N6žZįÄRęMŸ–ų ĒŅČźSŹ+«Ń«Ė’–[_µżī»k„Ÿå7„ęŽMM≒XŠ :0#Š÷{8-DJ.£óbŚIÆĘĒ÷¤]÷9;čƒłjBäćŚø»Øī0ƒoR}+HĖBćI3bŅļČd2©¤÷«§¶²Ż8ņŪj’;UūCxįŽ¬xwķ Ūnˆź~§oįeµI3JŹT–śzVsŖĪ…‡Žxƒ “`ć˜c%ĖN3ŠoüMGó{ģŗč~-Ļ-Ō~"[ū„6;įc†…æˆpF1ķ_Oi÷hŗu…ĻŚEĪ厫õ¤~­Ńæē*ʗ ūP ėOŸV{‹Swp fĆFG½kō81R±•ń»AM?ĄžŌ“kcżµo}ŅHO)ĒO Ķ|§ā_kž!½»Ń® ¹‚÷pūDŅ9c2v}ؕN‡‹:¤¾±›Lœ.аcŒ•ķśEöd%ĻĖÅD¤c8ŻXī“Ł®-®hĀJzl` øō öƆ¾:|!š’€ü[Œķ,šė·Śb‚‰rzŒvżj„īIJüŃž|Lšf«į­{ĆśdŚŻŠł¶HóŌF=†#]N™šÓį‘YirųOūśżóė·ŠÖ±§sē±qµģ~Ž|!šwĆ=kįī„rņ¬śŽ™„Ū#Ž €'©¤Ą~¾ó ū6ęĪ@zńW*V<µ6ģ|-ńćöqÓ­¼nļ%¾Ÿ­Y°ZÜ+ķ`§±äw³f‘qŪ„Ń^ĆaXןR™ś^O›ZšW9 æ€ś…·Ūß[Ēæ“żßʬŁēAcĒ©ź°Åø8`ĆĀ±PhśOķ(Ųõß~É’ 5»É’į%ųŸ«ZYF…”ŁX>8ķĘ |µūJüæų'’ŸlµŪ_i÷ڑӋ…ĆlĘQ³żļQZrw<ŚŲµ-Œ’ üC“Ne‚āĘK×0ĮłOnOÆ5©aā»K[‰<ŲŽ'Üjœē52GšÜß>5CØéö—QĶm Ó¤±ĄÜzŸjśAń7ÅæŁ;öšOş‚°h^=Ń„°–վݒKdŗĄ  ƒėžø­iĖ[ž~e„z3”7¤ÓNŽjĒ×Z/Åtż µĻźæ<ą O_; öŲ†\…ĄäōW“xūö3Š|O„j7Ž…<㨣2٤rl¶½`3å•ķšō)RęwgŸ…ĀF…P‡Ć’ōZ#ą›OAń&‡āMāU®””[is5§ˆc…ĀĻl‘°4gאką?śģēańŸŁ×ā–±ń#ĀwVIs,—īņMe8;L~cŖ’øĮĮļåōõ?—¾”ÕjG…Š·'4ÆŽé+[ŹÜ׳GĆ;āpń¶ć‡~“Vŗ°”E/šŠe'ęRE~°x[Hø·nõKH-5Y›ĪøŽ!ņ«žĆÖ½źkCų+Q%cŃ.-šh@ .Fą8Ø­ķü§(cĒjė<››“¢&åŹvČ抓OŌ&·„"å‡bi£ė|1{-é¼6ńÉ(ĪŠFrjMjIõ›¦¾{Hą¹=BŽžµ§1„™·”[łfŁ'1;ĖgøśWM¬µµ³&F qœŌ¹³’g->™”iö/-bŻČ$r+Ō¼2še¢O0’ėĢŚ[§Ņ¤Ä“ˆ–6Š ¦“żŸZī4©n$ÓE…QĪA␗Jæŗ¶4ĀŠ¶UŒ> »wlÖzyŠGiČo'ėNĘRoc›ŠÆŽ[ŌµÜC;mĖ7 3Ž›āe†ŪW›H’īy•ōtĪ×ĒN}:R$Ą²“I¤–WD*O͓ȭ7“œäž8 GŚ|Śm³yf}Äüçҳy®Ų4±—#'­9ģŽŅćŌa¼·¶ū<—>^B>2ž»sßČםx»J‚Ņy–ŽåQƝўʟNq: Xn•FWqÆPÓtÅh#Q,ÆĘS­#9£•ń_†Z[™õ xVÖ5aōҰįŅ’ēoœŹē6~ī(35&³ūöš$¢F*PU;‚²ŗĘä„Ļ~Ō»g”ZÜŗ¼P“›†2¾µ„«č×bŹ8–Łö•Āń@%ā4›O:ęcrt˜e 4±Į ģŽ•ē{#šõ¼śÓApńÄĆ#8 >“× Ö Ųd·G.ceQ}ėjĀķ4ŻnĪQ8¤“Źf†hŁ®um3Dµæ—PöŠ£I#Œqč{žóóųśĒÄ21“±dŚä+t,µ°lņ,‰ØÉz$ŽŅ>XŠčtß½µ“I%ĆĆn¾‡Æīuŗmå½äO,!ŸIõ^+Ž9摕&{¦2»ŲTókc•£iHļjLŲad92÷«¦ń׍“ķ{GÕķtÓģćtŒ“duUėŽOÖ“2hš-'Ć’h}Ždī¾­Īk¶’=Z+S’  €ä€}č%®åinüYåGmhÉē»,aŲ|«ß$~•ėPXÜźzA’öKyÆVŗ_ʆ)B[Gs›RZ&a•Rqyü«Ī¼SįYŚå/-ć†$śÖQīBå׿ ®µ_·M+ŚO3.čĘ>ų÷ÆJ’„/Vµš}±ŌĪÕ ‡bČIå€č;Õ¹F™ćvŚö£¦8Ņ–ę[¶%Ÿ·½CćmRūWÓ-%ÜeXšøAŠõÜ$­ ¾ó®lć–5.ŠĘ@V­qŗæŠõKBi` –ą•»Ÿ—•$—[[Åf×H$®p…K/ØČēė^§¤čp_¢ˆēµ\r~“·žAxfB¹N±Ŗj)n.ōÉģžŃlšF‘N~ļ4‰»¶‡°¾£l”ci꟝HÆJšßÄKŁ“‹ļĆ5” "m_;‰ķŽ‹‘)—į»K[ūVšhģåEķ_Ļ>½kȾ1xsÄŗö‡ŖZų^ęŚŪP)„%p:ž;ā‹ōhxļĮ’ƒž.šÖ©sØź:„ŽŲąŽÄē!$ž¹®āęŸŠ48ü;įKŅŪä`CČĒĖų.?hröž“Kšü6ķ@ØŻĮŸkyvņA ŪHvHäe”ŪéJįuŌį$šV±cāė©m|Awu£Ė)"92B)ģjõkE„@ŗŠÅ¼¹U|qōĻ­Rd3Ķž ųI’m6ļMø{;ģ>69õÆ=Ņ<5Ķõߌa !ō¢R`wz~›§iå!»†-™+IÆBҼ?„ŻMvś|ŅYĮ9ĒFk3UM&ł|+jbštL‚\d±=fÅā#QYÅøydW£Õ@^ĒC“×ī>Ćju {i&’3ó`p£üę©xÄ÷ņ ˆ`ó±\0ėVg*I"f×cµÖŽ‘4†”·˜ĄĒjét=NŽņY¦–pŹIź=Ø3åģt·ŗ)¼g»‰Õ“\޾ų«–^¹µŃ仺»“UóB,`üŲź*\Ķ”+ŲčÖÓĪ×:˜ŽKd9ŁŽZ½Įž“Ō ké4ւŚ59·˜ ²ē?ZÉĻS£Ś„š‡twec ļ–éˆY8€žKz šxTŃnīo®l„{± ƒĆ¹5]'pÓl]6‹;q,LAfǚč®<>į7O$!ē#§Ņ„LŹQ65{h²ękyŌB«÷¤ ĄwÆ ń.”4vQŪC*]m‚æÅõ÷«ML¶:o…>³ń¤®Ž$5·p69źæģŽżkGĘ’ ģō›ČõŸŻę×sFb1ķ~µŖØTgќ?Ć=å¼C©7ˆtXīŲ©Ė‚’0=N:Šč¼C¦-µč©DvūŠ1¶„ĪåĄßŠģmĶ£¬‘łŅä©ČŚ­ÜG#:§ś8ł•1€“—bљØhƒT‚åfŠAņ ĘCW“kžÖ4…–kxcdoOR>¢µP@ā¬X“»æy,¬ ·JēqʽkI½ŠįcKˆĻoÜ\ē JP] §¾·ūlė%ÓaPī^zā¹ß[Dę+_ßM€xśVD„÷PY³\²D䁜ņ}«ÓŌc”ÕtMAškÉ­—jn”ōĶs.ŅŹ0@Ž=E“X²’ꗽʺģžń÷éžÕ®£žąźˆ·šs”%_‚Øż)7aļŽNƒJšņ[ŹBXƒĄZņm#Rš/“‘ŚFŽNqLo“R1t“ QÉž,)4øę·ŽYXąä£ōÓA£‹Ł×bŖ±98ÅtV6Č b8ä‘Y¹ö7‚*k $3Ck»1FxØ#šxŃ£¹Œ† ×j[¹|¤–× ’KŲcęķZŠ;²£#ޤ“E^?%ś·õė“\żŌ†YÅ&óՆju*;Œ’ę{E·ć‚pk.YŚķå[bæ0 z›[sb3¦Ķ¹DєŪӞh¾‰ÜÅ#.;üØē3q9Ų“‹eøk‚0ć#„oÄĖ*IÆ Ū"ü»‡ ķVĶ©®‡ōßąŠv:åŖųnŹ®¢ueVQó?N¦¾~ż©<7§ųĆŗD×ÜJŽą‘pĢd·ć&½›XņU8­Ļ«m&K=Fį£fŸē 0: t5„%¦ ’¤ŃŚĪĪ'jš£Ö‹Eö; jzöŸ}nŠjŚ„\†h•š1Ž»ĶVźųæEŸTøwŗ€µi[Œ~ÕQܾn§ŪšŽ«įķ>ŪRæ–I!…UŁ\6㌟Jå•%‹ŻźŃ,‹„rbķŒg<֏±ēlĻŹųbßJ»’+FŽ#%ˆė^AwbVMÅIēæjŅźZ‘­įŻ^ėšn©ÜöžS|Ū\Šż^šˆÄžŅoįš6FŒ}Ł7s×Ńc6ĻEŽÜ®ōģÄśó\ŸÄ Cāß jWl²ĖFXƒ?ćŖ¬8=n|c Ū Kšõ%ŚŅLĮWų—“Ÿlt®\j®nąœ\}žé$&7Ą}ė‹™\ō)JkšDæ<įψÖi<Ņi|Ø x€޼×ė_’Įæk Łö?|D©aą‘k)–]¢ ŽB'Žw#ߌ·”(óZ[kłqż“ė:,šMā@]Bč²Ęūx‘dóé^ńš÷ÄOØi¢ĘVżģc5Ė4¶!å’“'ĆČüEį)ˆŖ Q('zŠAⳆ’$ü±½·¹Äwł7 H+ŸNā¹é¢u‘B9ĮÉǽz ČēØ:4“ęmåHœÓāżźŚ¶†Ē)b$pĢžAc¾Ē·µT€Ū†*HFŻéM”©X“ųĪŌÜ~µ:Ė!ķēéYÉjtӑÆm,b ē'Žæ…DŸšn'ķ¢ß ~0x‡ö7ų”Ŗ%§€Ŗč>bųŁą›KŻ!>"Zé–ŅkŚ:}›PÜæ5Ķ£oļ鏧©ÆĖĻ‹ß 4ˆ>ńæ„'±Š{¹`k› ø"lÆ)ļĒ8ö5Ź–¶1hž=¾7|5Ō>üM×¼ =¤‹iłö¬Ē’…ˆ żkÅē/’AĄķ^…us’¢*ķņ'āpSž=éŅŹQx!˜ö®ˆ£ ėb“’Ęؙbö5;/Ž>aĪ;V¼„“,ī®Ä/^ا˲H“ŗSŲ”Ą«l“¹Ū"”eĪ¢)ž¾fō øČŪ·ŠŚYcó¶–ąšżø’‚5~ӐxOāN™škĘpO«\iW­Ŗųa&ĆFÜMg•ĄĖ wķS$o‡ö„šĻ]kµézUÖż%į:·‡åLŃœ'øĆŖćÖ¾ŒŠ¼Ai«é–šš-½Źķ`ƘäGØ5ēŌF±©©½f³ÄÆ}*h󱞒Āx#ņžB憏ų.ģ/'ģõūBŻüWš•ü --¬[˜£ĮŽąs½ėzrčg(·”ķvF)$“”$WH±Ag"l!Ōžż«¾›8„J;häÜ>T\nĪzūW؛‹mI”gżÖŒZčŠŌ‚kæ_Ųłij³$8ł†xcė]φ%_,…ę4,W gkbdRÖÄå ~^×SĒĢjjsŲ³Ėē:Ę»T÷GµK‰G%o%ŅÜ@b\°`}+Ų,ü]aµœ„Фģnއ ongÜõō­-oAŸ_šö›iś(ŸęS‚pIüė3E3˜š–³’}GHÕ/—OÖbf ¤œ2óśœ äāXŅWšå¢,¤±$ä5&z/‡µĖ+”KAF –Wœā²ŽśķŲ’R6š"xzĒKѬ¦²Ė¹öJKē#éUsNTsšWˆd‚Ēū9Ģ“)Īܞ3_1üjųŸ&‹Ŗ?ƒģŠŻjŹŖņķb$o^¼TJV;°ō•ĻšŌp]_IØßOsui“ |ǦEwš6ˆ·Z¤2”H¢$R1šņqUlŅ8 …åšęt°PŃIźū%«ü?Ųą¶G„@YC&qŽĀŗ›+q,*¬‚TéœtƙÄĢ’R²Lŗ(B…5hÅ$—d“F®žöW%­ÄޮÀ:S5’’dż³D’/*å0õĘO#®.t}f ­™Ķh©Ł7[ČÜz՘āh®eBČ žx§&z“éht¶Ńʈ›†ńüėŽųįÖń&§Kfš¦³e+=·˜p®„Źß™üė(»3:Ų^cĢtßk–Ÿį߉cĖ «-¼īIxNx ŗ?*żVżš’hcā_ĮĻ|'æŌÖ 4&ā[‰÷ćķ©‚”yķß5ßNWj=Ī?ØŲųKŠąšģÖöéq&žŅ3¢ŹI ū¹ŖÆ²ūVšD ŗ*ōÖ3•ĻKG—C©µ³HUÄ”ƒ•æĢąŖÄ}k•ķ›Ö“,’ĘBÆæ­v²:CräøĄķŅŗ¢ur‰ ֌ęœ«`ž¢¼§Ä¾øµ¼y š94öĮŅ”¤sŌ+ųnń#•­‰e˜Ę{W¦G,R2Ą,ÄŁéšÉOSĢÄČų×_¼¼šĒ‰µŻīę;}gOŌ~Żn3ó(.Xp~¤~5śyšWć†üs¢xnóPY¬¼ak:‰Rc“Č1ćŌõśę»č½,|ž=Źēé’‡,Ę¢Ėmd>Ōņ–¼œ“ŒWåÆü›ąŖ|0żŖ~ źvĻ&§'„1Ø@Œ_É"L.}9-łW[»v|ģńöŖ‹ųßŻkžhņ’ üńOŒü7Ä“ƶhP3G,±¾dRĻĖ×õ­…ž%Š4¹×ķĀņėJWłÖ?æ“pF++“ŹÄą•H8ĒsėOŁā×ģĆšKöµ±ų¹ńųæIšēöUŹĆ ,‰ ÖFĘaŻŹ—Ę3Œś×č_ķūOüżø“O‡7‰-5/‡æ|7{6¹y{­Ģ±M®ˆÓdig‘KäóŠŅ5t±üĆƾć§Å\ł»ĘŠI+^ķ95×Ķ?‘ł«ńKö¦²ų™¦ź_ žųrŪį§Įk@ÖØb¶XęՆpHī”Ē^§<×Ęzʐ4·°’2Ū œ‘×½rU•ō?§øK:[×w©7Ķ/W’Čõƅ’ ō/ż»Fńm„źh÷ #W ņ”Ō>üOń€„øóģ-ćIōéó•žśJŹ0>¾UŅŠöæ‚Zū[^覝¤ń„ĻŚÓrž+ļév·ŽÖ"™"Wr1ż«¢1±¤j^ĢųŚ9æ³u/5± :ŠźĢ-ļˆ‘°Ā”vÉS’0sĮ®ÅAl”_HŒŚ½+©^”µO§NWoŠžoŲ‹ĒæšO/zsAŖk?³ž·vŅxgXdŹBĶ“öiX}×9ėŒo-Óo¢»ŃķÆƒĘČt5āć)r»釂¼|ø‹‡°ł„šu-Ė;#Ž’FÕ.tżfĪ[EDšÉŒ¬ĖĻ+ļķļZŹ-žEiÜķ“ķ1µ&)”‡ é•$b¹»æŽÉ”»x#Ī?bāŃČč_S‘’„sū2įäµņ1łĄ@æŹ» YęņĢCĶh€ū¹Č®Ķ~¬’:ĶW@?Jó’]Į žJ€nvł…²?/Ö¹ŖL¤l¬r^»óŃåīŻź+Ź~+LÅœ³Hģ±"©EĄ\÷žX§©įć>nš”Š¢xKĞYžĻŌ7ÉūÅź3éž5żžĻ<>>šo‡Æ.ĄƒU6ŖĻóä1®}kÖĆK”šyóµ~ĒńćĮ›¼cįhR÷ė6ūä ’Ÿ„z‡Į_€µ«|=Ó“æ j~>µųwu®<ß­į‰Ų—˜GĮrēž:×{O”ųwˆüE‡­•ŖƆéėå’zĘÆ‡æ žjŗwbæøń?ˆģ”Iµ\ć“9#¾p΁~Õæ|_ńKölųÆšāĒBŃļm[A“ĪžL“ŽJ(sĮćō®J’±ł^G“ūwJŗŃ]?4ž§óšĘ9ķå°ß3yĻ ‘øņ'Œ}1_XĀćŒ™C‘×ėÅr?њꍬŅY¦öf?!ąńŅøĶFRéÖ" ޵'„N&R‘&0¹ę½MrT.@9Ļ҃Ŗ1±ŻŲ(Bd³]L :¼k{Š6Ļ ńׇ5 ßŪŻźeÕ½¬¬JĢGÉłŌz$ņ])‘7:3ļUkgI,SĆ2+ĀĖøsTåĄwąd zÕ2ķŌ„öDŌ-®"›Ų¤Œa«Ļtų'Šf‡P‡É¼GŲyČ8ī)s#”īzE‚”@ŲVeé‘_@üż±i_ŁSĄ_¾|ń.…gąĻ^Ė«Mo{§}¢k;©,­d`8UČ`G§SN¹]Ńń\iĮ,ū/žY˜&éIÅ»;;Å©-}WÜ~zųČÜ^j÷śū\›Ū»é åӔŚ|ę9n;sž+Øšī½|ŗ]„ŗ[Oyv’$q§V=©ó;Um[¼šöæ£ÅÖ`šŽY"YUY愎+ȼa„\Kkr«wqJø9 ē±ķS- ńÓŌšŸüZųƒįŸ [hWwśµüFo&‰—tp šXöąŌžÕ'ÕļŪWæ¹k»×4‡’{V3©©āÕ”f{V67•Ē\ÖĀŠlFY‡Px£šęQ¦v¶¼ńłÅdśÖ7ÄM6ćĒ>Ō<-pŹöīxńüØ8#߁WyųŗÉ|y ųŠKˆ>Ēwe7Łęßüg£Ē÷ÅČkײ×ōōģeǚ3ĢyĪÖ·ŒžÄį›=B_ŠSų;ĄZ•ž…§-ŽÆē%Ą‘‰ŽR>‡­})šŪĘś¼/c­i3³Īź ØŻbnźG­oĢy~ĀŚ™ß¼ŖxĮģum*é#ø³…üȏü¶N¼{׃ų†MSM𹼆{Š`¤KĄć­c*g} œ‘å+|×/ļµSAÕķ4«&XI‚K÷<žצ³“PµĮ³ rŹæ–k£Jņ±ĻV®‡;ā_ _|ųÕcŅĻl³ŗG5¾Ļ’Qž¦? ż‡ĮQėš-½Ī3Ė|Ŗ²ĀČßx}M{˜jg•[k‰“æ‚| „žÜŚßĀßėrü=šß‰“ČnõYPcęņŪzīl„Žp7~)|Nš×ĀÆ üQń¶‘šcÄ·ž*šM„Ē‘mqr¼– `nänĒ=kŲ” ȟIüÕUxlµŠr殖üµ’e~];ą…ī§ņ’h®·78VQž?–+ķ++»;ū[ŪGCˆ²d{ŽÕéÓ?ˆ±‘Õ¶tŗi‚ītƒyˆ¶BäU›Ė³ŸkŒuEÜńę`Å4“ŗ¬ĻR8®’H>͹š‘1łIg<¶:+_1DSŪ01Å[Ōu9¶+±_“…±ø vo?Sgŗ¹Pu.0”¦kŚ“zذ;ʼķ õ Å£3ūzY'¶³± m”ńóļW/e½Õ5QaØĶÕ¼,l€mp=”³9DŽ›MXt˶ŠŽ9°$t®?AÖum>ĀFŌs‚ĖxRh3=J Z]WG·ū\6o.ŻėµpWńü+Qß{–A…qĻ>”ĢåĶäxm®D‘‡8>õ«©[K*„ł “nY¹ü©ķ¬†éäóŽõß^ «kdŹYq‡8ȁIŲä&·žV+'ś±ŠŽµĢźZcX£ŻĄX‚B‘œóō Ä‹Gŗ¾¶¼i~ŠšG“Č5oVŠnõ·…ģd/|Ē$9į©¢­Ņē¢č—M†;k«ˆ®®żWų[Ņ©E­gx†ćM½“™¤W)•hć®ī”āÆcGÄ·÷ViŠ@‚Ź}­&H%±œsųšē4 _1ó^XV?ŻūĆŅ‘<Øč5Kˆ“ēĒoZóėŪi1)ę^¼ŠD¢hxSħO½VHÅČ“ä ‚ Æo»¼{ĖKiī#mŰĮGŻÉžT˜ž,Ō/tĶ*]K¹ß¦Ża§Ąb~5ń÷Œü:nI·œ#[Ju±  šĆŪx“ēž2Öģm4›cĻy8hÉ~P3Ō׋éŚuļ†ī­ßP²I4é>xŲ1—8"‚ć+^ xļī¤6;ā¶ •äÖ~Ÿcs+ķhŃ#ĪOZL·-»I‚K %eĢJćsü8­Ķ&’OYī#²*ü‘—lķ5›F&’ˆąpE üsĢŖ¬ĮOŲ×O®|Z¶Ń¼9#][ŲŻßl‘rĄö9łcĖ­<]ń7āƦh×Ö?g…Ž7‡<ž«øŌü!Ø'‚ķ¦ń­µī¼čCOäuČ­ zhxō7/„ijeŽKK¾Cr½fxcJšžčģšŠāć ŪīE¶zݟ…n“ķIÄę¶LćŒnśV½Ž™O‰<]:uŪA rAgml'kˆZ~Xü_JåN±: ć- ° ķī=(¹›‹0šēD±q,“:]±Ė‚21Zā+PŠKk ‡ŗŽ$V— ­éA ƈ&³»yķ']æw#Óø­}oÄmØŚł².ŁtÓĒ‘µ ™¦’6x¹-ČļōÆMÓ5)–}2ī YYłmµĻūŻ(6"Õ“Ūy3, "™~šž÷=EA’ķęµbŠCm-¶r gļSpLųßć'„~&xRņßV±:”šd¤Ę°Ę…² ®Ļįv»ć=Z;;MgMHm™”˜Śį†rS¹GØėsĶe¦ÜĒĘ3ŃĢ2vČć Ż>¾ÕÉ|WŒj÷cƖž*“¶¶†E™‚,¼ræē҃h˱ó–»zµ‘^-űIŹąķÉä}j冊× I"A¹éÅ7؛:[=*OŁ„˜ģ|näu5ĆǧZKŲŚ%¹Ś]K&F}qéUõŠė¼bŗßÄ+Z·‡¬“K&ŲZ^^Z¦įsč?:źÆ<3 hs!¤k& ķ,0?^jÜ{•Ķ”ēp\Ü;ķ\ŻĀ²¦w#6~°¬u9uˆ^rgv°N3ƒõ¬„&OŖkŚ…µ²-“²»Œ*Ž£ńÆHšWŒģü;y§^ź‘Ä.Kģ]ü‚O­ceŌŹoSč‰õķGū1 ÓÆ-¬ŻŽD»2@5³£^»ÄÖrjy±‚ßóҦ^FfŗŃ,!¼°½Õķģ®]€U`s ōü+Ā~%ėžš¦“yŖ}Ž++¼Ÿ"\|²¶;ś’õčź‹9Kšµ£h¾müšš®I śTšXe‘.męķŸ%ʊ®ToČĪzņóQG‘tė1q“ēs)nµ]`%¢]ź›ĢXGXŠØp~2ńüLģoÅēE]¹$šģ|¬éÖŃBļNkø ٶąśShø#‹Öõn5«BHMøĪ07l‚±dų޾s†åąŁ½eĒ󔤞¦¦¶Ÿā=OÄ«"Ék2ĀNCŒž½ ŲĮ`é I,³³ēk¶N}Ŗ£ä4ģvŽ0¹“Ҽ){¢ˆ—#‘° ĒūÄzWŹRųĆRŠį °żÄ=€=śS`[xµ;øĀI'øe擜ūW¶|1šŽ„q vK]åvFFqY4ś™Ķh}csį‹?GrÓ·öB^20ČĒį^2ŗ•Ä—Ofó“ߐøäT™D¢+TµŪ·ä6ž¾ēҧ¼ńmö›ud¶«ÄĻū̟•G„G+øÓ=x® KN†·÷ƒ"@½×+e?ˆ4Ėū[éÄ6į_ĖEfĄõķQ(›žE£;雓į Ćn„1˜q\Ē!ŲėzDś@ŠF•Ķ8Ę29ņŻ=40qgšXüI¾šž©ršĆqęI@@ĪўHü8ŖW^+ÖuŪšĒū¦l±rA?žŗ=·»­¢ŲŻÉkowęKf£-ž«/·Jß}Jeżę^YzüP£bć.äė tåīķMØ ŒŖķé܊.ģ¾Õ±üƒ22œ{ū×Dv6ęģyVæØOįŁģöŪĆö‚Ų\/SčMzF‘¤Xźv±Ż\@é,‹ę`÷»f”„ؚžń“ā+ūĀöv€ŪŗįrĘø/é±i:+\łÓ¶±Ųx[ӚϧXŻ›ĖŲd»āƒ2“ĘkŲ4’,·QLJīÕB‡Xļ5KŚ-ĀÄŖo;±’}«Ļ4«#t—ˆŅ(Įm½ŪŲPK­iu¤Éfd·‘ ʶ ÷oµ “ŗrXRyćŠĶÅ܎F`kśmĘ”k%«¾»}Eq~ŚĶo-Ą2«ģ hr³R-/É“i›Ž7„gŁ3½Ł‰#Pr>•”ßAņ3ø†ĖĖ#k8É*zUøćž)–XŃŽ6;XōėYs-‡Ss–m£˜ ßīĘ{’®¼’Ę—1ŗ¼€ŪÜ2 ¤Ø‡­iĶŠ®c…‚K‹­™D ąē£Vå›}›*ģŹ n$¶sģ(–ęNLؚV–ŻŒRX`sʚČŃch§Jå·u<`žÕ —”ævæi†hŽ­īyciŸtI”ćŒēÖ,č‰Ó^O…ŚrŖ@;X޵Ę\Ģ.$Ē–ghėR4X“¶ÜÆ‚ź§q8č)·Mg,ĘØ©Č9EGČżsų?ć[ųu[›ųn-lŻ'R$VŚ6ąsĻÖµ¾#|HOL֖×S;Āķ8v$ōé_E$xĖ]Ģo‡^ qāUŗń łśMĆ£|ńąBēėҵ¾ ż†ĻÅWzg‡į#OhՋ Ā‘ĒņéPUķ±ĀŻŁ]YĄ—ńŪ}ŲĄć<šŻšĄ¶¾{}g½ÄL|—ė“ō4k†Æń/Ēŗ†•Ŗé÷“Ż[3Ž,ü¬ |£'ĀRĖGŌ_Ä[›Ēså*FZE UXŹQ:“M^Eyć>ŸBźl÷dø=O^•õ—‹”š&æšvåt„ƒMÖĄ1ˆ\ōn½Å[zöd>ń]…¶ƒg}-¹žÓģ”gˆŽ•³¢AįėĶė§yö¶’6ņšž沑¬SĒ–›ɨŪ}©ø‡,7±ōĒzłĆĘæ/nnļufĻ‚&ódIW ÆŅ³Ž‹S¦’g¦ų.ŁÆc·H o-pŖ8Æc“Mŗ³ÓnQ$ŒČFā>ēø­"]}ģxåļŒ4æ éh֎u6‘Ģ²ī ¬1żß^µįž ń¶²ž7‚,ly7Ÿ³ķŹŗ2:ŲćqŌłsā.“{§ųŠžŽī5Y$g•”® zs_nā¾ęż–¼Y¬%šˆ}. $RĒøą‡ĪHR}Fktōf}£ov‘åQ· rHż+gOF¬Ģ#`‡pź+–ŖčT"|¹ūE|/Āš^‡ć›käū©pńżžŁ?ŌJ xō9×ĒW­sÓĆ"…ē8ĮÆ6{ž$}qū.kš%ljo|Æ\Ķi ŻŚļYTš’īōü?ZĄųÆįūŸųŚøšāŅūIŌ¢Ōģna—ĢÆøīā§©čuÅÜ?üÆöµOŪ7ömšĻ‰/-ą_i(4ŻR4ŠŹ$Ēļ~&¾ÜŠu+ūt;“ēŻZč­OŽd4}9¦Ķ§„Ē$ńĒs ”!  ƒų_Īwü÷öT‹Å użI²—e‘“Ä–·Ī$ˇńēńϵrŹ\ŗœēń—ć½­Æ­&kKØ/¦]2 LæyXv#šóK˜ŽD9ڹłŽ:×u6rM”UdøyKlēēÅ@œmU\2øżkŖ;Ņ‘0LQ·:ńƒ»ŠCoŽ*Ż2ަA4j‘mĒ#9źi±³DÅŻ¼ĶĒ…Ē+I£¢›4WĻe`q»''µtzWˆ¼Aįx/Ǿ ¼—Oń憵5]>hŸfفäśqČØ»Œ¹‘Ū_Cż-?ąžæµ­—ķ‰ū*|-ųŃXGÆÜZ ~Ž wżšź?‘²9 eN3Īz×Öz­‡™ …cżģgrŸZå­6cȼ[io%«¼šŹś}Ā[Ķ£?+’ˆź+ó+ƾ’„KS¹Ńįz<āāŹą”żż»€OpĘ=½ė‡©rŽš‚?šSļŁ~Öķō’‰žÓ%bQļ§‚Tē|YpxÅ~H‘6e·rŠä«‚9VĻ*k®†ŠĒ%daÜJb”„(õ?z­ˆ {lė9=1Ę>µŁŠó¤õ#Ū.ÄlšvīaÖ¢–Ł\ŗē⓹¤%Šlk,ySŪ8Ķ?w“…s·1Š.ąmb½‚Ł\-Äs>Ń‘öē,1ļ_¦’oō½B/ķ] AšĪŖ>× gž=ę?}}Žzūœ÷®±ŌéŒOMŌõÖŃ­ņhd{t!eU;IĘ~ƒ©Æ?nĻŁ_Ć’¶OģĖń į଎)ŠŚMOĆWR .Tgb·P*}˜śW–¦ģ’8ƊžÖ~|HÖüā8āƒT³”Ū‘³iŠķu?ˆÆ2×į]šÉ °Śsϧ.ęr: kJÖū&Ÿż!I 3śW¾|.’īūTB‹›2āB>`?ZĀhˆ¾‡iā9olīõ#k«w˜‡%@ōŖŽńŻŽ®ŲM;^Z”}ó&ӀæķUŅEó3ķ_ė1km ‘ϲÉGa^‹öo•¦2!±Šōi•±ff10b0£Ž„šĪ)}4{Ųøķ]p1±ĮcØŚČ¦bƶÓWōxō! Em*äą–­D‘œśĻŪŽhć"eŻō«‰¦K3¬e†Ö^F2c„ń6“qO8rQ°qüŖ¤ yu«“*ōĒz ^gmįym¦Sp@łĘܞÕ{ĒZ—ˆo&ø²³°¾»v¬eĘ õö “DÕō]F5ÕmˆuĆa†1ߚõiu_µŪYĖ&6ƒÓŠse¾=Fs4%“Šp}+X3Ļcmq+3¤ ½pH §ćXٽIr±ßhڇŸ „ū#—H„›Y~b lų{ÅfŅ5­°sø?/”D£ĘüWiömj{>D™„|½éüėOEšÅĶõ­µ½ćOŒsĮĪÜśūUņĘ'¤x_Ā‘é÷WkĮ ˆ\gšīµęšäŗƒhp»Ūi—źóHUøż{Vl«#Ä<;g ėwŚ}Ļ11Ęɍ«Śŗ]z+8Ą{ˆ­.Ą$‚~ń¤'sĀ1$ŚZI34E.%vĄ8Æ$ńF¤–ś„ȱ¹I†v—ČŖ†ä8œóÜ=üźÓĖŗn¹Åo·‡/n!ŠUٜd ó[KgbÉt»cåäžk¼m> i…\O*«Éžq’ź„'aĘ&Ö÷ qę$[ĘwzՑys"5¤‰ņōć½g3^TCÖ_[é6ӈo¤ø’=EZÓu;­&čZĻp„Ē!±Ć Õsj3_Äśģ—–óI1PŪ@Āc§®x©·w1ÜÅ$Ńņēƒõ¬Žć5ā. åīœg5vĒH²®&·E7SŽ“‡Ģʼn\Hm“Ņ6ćõ®ƒUšå»iva£YCČ"µ‚&dZŚ@¼Ć&Ä?0®’’HŅuĶ2ŚH ĄJ«t-б\ć’Ā_ȇœ€GQ[PŲj7ĀʰEøHķC¬¼ŽŚkI,%PŃmÉõÅs±Ēes,J«±A*^ŗŠńōń5Žž‹x®©;O;s^ ~Żć’gg…ŽTJÉ®ƒGØxyŻaŽXó·dWmØĒ§]ŲG7Ś!k…oøs¹N)œ¤Óź2˜<Ƚ±ÓŽŗģ««@Ó2)H%“G“ŽdŠ&o˜g­gjR¦—qڹņ°JxühŽ›­¾§:Ēkp¢-æ2ū×_dhѕ‘T³Œ“ҁŲwŒāF!ą¹·–hĘß1A5Ä&„"„·Uóˆ#$v5<¦éµTóį ”ćėW4(“bśœvp¼˜łä(8©”»ČuĶ>g¹øÖnQwĪ£$ńž½ć^Osn²]±ŒŖH"¦NęĒKc ‘`·Éē5Ŗ»%›®–!.†ƒYBŹU‹p=q]‡ķ’` ‘Is‘׌”ccBµĻ†M†RY ¤¬J†ēß…=–—³ˆŒTōėš`G¤hÆ©Ū—ʧyUå€ļXo§ĖmØłqD撐jąµŗŅü7·bfoPÖ“u é=ċ7cĘkcX³˜{Ųe&(6K·ŒÕæ¤ĆĒ Õäö6z„­Š·¹Uŗf||1žµŲv:’j‰į 2ĖūB%V» ‘~æŌä,ä‹U€ļ=FH'­fiw-Ij°cģ‘„UĮ޵NM^}>HZ`…=¹‘¼7#“–yoŸP·ņś˜ ·ā-J%‚ŽÖŚ{‡’XČ“3cƒ½·ŗ“ŗ“fYa“¤W é€źf\¼£ļ)ć&“EĮō:-B+­?Nøkg"mæ&;ó}_QšāHā( ć±Ö™©VÅīÖt'tĮĪ=kFīÜźŽ–s=ä!0zh7‰ńĻĘOŠšĆŻq¼#§[[VŠäGp pEŗō9ƕ!ÖµÓķZótpÄĒ?33Ž8Å}ūF~Ź’fżJ|BŃ“½t¦š5_;Gw•D¶ä†šĻJŸdŁń9÷`°šX\D­*··ov׿Ž|eØiĆ[KØä¬TŁzdkÕžŠ`–'XĄR2„`āŃéJ¢šŗ›¤Į„4pA vŃ&U\W7ńļą‡>;|+¾¾Ó5[='āχ„—¶­9oķBäĀŻĻB=øü:#LęXé6š?9>ČfÖA¾gŅZ;€—Čp-Ź}źżÓ|smń*ėWŅ“ēeXĘĒą¼psOśĢ4ļ©ą¾)š–£įĶDŪČīł9{Šīü+u{£č—śŗł­”lŒlN*ć”ŃSXŸ”ß >4x±¼ 7Äæ [ŁZjŚ”„öžŠb  •Hßӎē8ÆŌæ|Rų×㿃Ž×ōo A4z¤Ņ› [˜„«#DĒę®ÜŽ?µÖ§”žnż!x& ULW7¼ŖrŪÉ®d’;Ÿ9žŠ6Ž1’‚‡~Ē_“÷Ąoų+Bšļʏ"źš”1¼r\‰d’$r[$£G½~_Ž ĄĻ?É/|W>”į”ŃuxßXÓœŲŽĀWiYSƒ}qšąÅ®esö”vkģéćr—-œj/šå—åÜt© –ŽŽG… mĒ^ O5“jKDQØ•ä5gsūWIä@ęQē2‚FŽų¦|'–ßUų§Yk ė «I±0#Šź§#‰åGéꄚęKÖ]ģŽvų•įĄĪr¹Ƅ?k7ž ‡ś&© ­¦¹Ō  *œ~vĒ]Ćcż¢<įO‹e³Õ®t+čātP7żą§=æ^”Æ[C/šč„ 'ŠR‰ģÓw<’WŅ-`ÓÖõ.cóY¶“Xå}ė›Óī#‚Q8®yÄŽ[E¾Ydū3.ńĘsҼĻÄPZÜĒęHŚó/˟»é\5ÉWc‰šä‘[NQß6õĻ|SŃ®ÆµĖ{Ū{˜cŠņ×hB¼¦OnYž&;£”ųcāoį+x ®£lĻ”č~Pćiéųõėö{ö¼æ}.'’KŪyq®āCéķČÆWef|~oM}^|ŻĻŚO ?įš_‡|Kā “»KP·’@P‡}¤‚=Ż’ŁnŽõä~$żØ~.j 4Y,>Ō4ŲćX5k)Ȓd “e8Ē’=}EW–öźāźŅĶšĪ¤›åŒŚ’Ądāžżl|Ŗ]j÷—w7—·š–³;™.'‰yÜ÷bkĪP䩨K ū½B$Šüī;Wu?Ś.ŚįćhøØ{KIķ¶¤Ø¼I±°ŲĻ­z›trÜcŠĶKSs±Ńn|Ė„ˆ¾G_„{ĆH’į(»¹E1“OŗĢ€«ŽæNkS—+&Åż§uē‹ĆZOƒē™R9ƒ]Ū°ūŹGWÉ’ ®ē¼f·ŚhĄ` ?x©ĘJw# +Å3Ūdó2Ī 5sҦdĪXzŠŅ¤V…+&xī¦MŪ£, ā²¼ShĀöĘś4%˜”“Ö²Š4“¢‚<#Ä÷®¦Ņ7i’T+¼w#5qĢ'Ķ~!ų5lfKųĄT’=ŲĄĆÖĻĀ+ ]Å>Õu;yfóFĮ'Żū~Ók#Ź©RĪĒÖ?ü9*ųqŪ5°’ŪxĻļæ‡ÓŠšß]ĶcöAvJ®Įø€ć§ē\Rš¹ÅŒŽ©ŸCéšō%"·ē,1“śWmŠY£Fn€f¶„“8£¹ÓPB«S&3Į5H»T•ž,£‚Cē]ÅV)£åOŚDų©§xēD·Ž×ĆzīŽƒ ź0ĆŠgģ¾ńʦU¬„€ŚN«Ōä7Ņ©EZHś+ĆĶžY•Dѱ ©=±ŽµķõĻ|ÖtO¤I/ĆķJRņŒMi Uj Ģżš/ˆ4æé6šö5¬śuĄĪa}Įģ}+Šń¬ ńmī­šĪõ¤øŠā"źč¼Bć”ļß挏'ŁÉI£åŃ.<©.ķdˆ¬žT22‘ęÜ÷5ōĒ€õ B]"ūL¼YŽXĀĒ“œœÖčķŽĒEį‡ŸĀ¾!k[Ņ«§]°©ņÜœ}G?xŸüĻWšČż’ģ“KŁķWXŌµøRś$ÆŅ¢r±-ٟžˆAjį¶0ü«½Ņēž+ēő?‹Ž¼ŹSŠ„-,tŗŽ‡ˆ“MOGh{q 'u8?ēņ©æfƈŽ)ųC¬¼fåmn7y[g÷уóķŽ†µ£;3ISŗ?G~=xŽ9.~ųĆÄśtvš=Ę-VčM¼ķqņO”ĄÆ®ü⛿ iš;Jžu¼IĀIj“|0;Å{øiėcŹÆ„ocšūž ń»ĀÆķ·į’ŒqĆe¤ųhé‘éó½įM’²1Ļ$ķļĄüeńʄšg¼k¬iIiżØ_IuhÖŅŽHŲīqĒzöØHž(śG'Ž9Ļ“’ņi‘īæ²¶„ā˘¼aį_ģ­A|=w"]Gvą„8*æ­~žiZ\ÖZv›c {#TŠō!ł32ZņeŽ™4N­ƒ½NEmŽIss¶ GZY£ēŖ2懣 ™¤Xāw÷5«©,gmø $@€=ls‘ĶrŚ}Ŗ„ŸqąĄśÕiƊ¶±ąg·įAĪĻDš·ƒeH.u‹bā9rĻ·įPjŠ$·k4‘G¼|¬ųäūP`Īc[ŽĪÉļnW6ā°ōĶJąź0Ėm\ŒŽF)r‰.”ā-RK“ma子L389sUoÆmŸKøó7»S±”Ģ=Ä÷1…³Œ·Pz×ay¬ČŠG’#|ĢަŃŠNu 6dį±ÅjjqGmföńN'łF1Ī„#+33I&(&¹1—sņĻį[±x¦ßū-·Ķöwoõ“×µ®ęSG;g­ŪŽHĖ•[žzS¦ŗ·™¤·uWrŲ^ĄÕ™Ņišģ,n=:WQįƒd/£7JģSŸĀ£wWķ>ŁwfĻä°Ļ%qYZ3Yx’ŗhßķväŒ@5©ĖUk LŖŹ\`é]޽g ½ŗ¼o‘žJĪRūZšĻTó,qėXšŻ£jņmdväīś{PbćaGƒōm9-µ5¼ū\Į„Ą‘ŽׄuoÅw4+«i’µ—ÉgXĀēļ žō_ń“Ėp‹dŲŲå¹ČÆńJŪÄįg*ģp0½hsöVV÷éć,ą‚yĘG„Pń¦·p\.ŽŠnZ"cRwm8čM\Ļ”ćmēČö×Å“ !g€M`x«J]~ŃKO,imøöāƒRdžžųÓWš.¹ćkD°}>ÕÉņw–‘” –AĶy§…`Ōļ$k‹Ū1¾öć<ąOĀ‹ ÖńTZŒP¤–ѼÖNvĄ^:WŪI-¾ō…69$œ dŠ"œ² {[™$F¶ø,IĮēµĶ[­ŻŻŁ‘×ķ/Ę3ÜzP;ŸIxĮßckgMøāŚ­2Fēäsž?Jõė«ä»Š >śćĖlŒ‘ņ ÷ MŸ4üNŠE®Ū‹+årYŽĢ`fØü;h,ÜĢ–fg'$9õ fŗŗ ²{’ŃÄAźk“¹{‰ƒG‹*6yĻJ™_d šõ¤×2ŻĶq,9%Y˜£ŅØĖ§Ķ%А¦``yfśRå¹2f|žžÖ¾ŽHšOµćo†ā¤Ņ<5żux÷#|Ņ0ƒj¤­”‰¾š5–KDņķŌć§éś%źZHnƒ“{³Čõ¦4ģ]ŽŚćģokiRO» 8ĻėŒ×¢ÜųŒi>‡G~Ÿy"Fc‰Xc$ē#ÓėA\ŻĪRÓJ¾Ōķ–C 4» 2©Č<ŌVŗ®»mÖzl’YHŽĪī:õ¬ 0ÆuŻFXćR’­­¹LØVõÆń”ŚÅ¾“³.-”µo™¶Tž„{P™q]Ź×ŚŖ>S-ėm&Nüs\·§‹[VƒŸ’^iä°I¦Ū¤ņƒ”¹>i\Ø®Īś×Ä]b¢󱉯xąõ_LŠL¢zˆÖĘ).,īAņŖ ÜsķU5_ˆŗ¾‘ĶŖX[™"$©pĀ=A„}l%HņTųķā{ż/Y³žĪhī^B¹‰@ }½+ŹõXµV}1Æ.ßķd×Ć®{qLŅ4ģm’eEös Ģ­=Ņą‡Ļ?zSūŚi®Q™˜;—ļ\Še4kŽėGUZŒ«±p:z“KŃ,-£ø¾øw°TŌ !.ĘMŲč“’1ģ¤-·ĢAķź*ž¢„tö\»Ģ>÷Ņ·ę@™ņīf[»ˆ,PīäŌ{Ö§‚+›eŲ·2īrpp=+9•ĢĻPƒĆ‘­’ĻęEsóą¶>ļ¦jĶ­žŗm “"HJćbõa\Ļqę5M¬®®›å_™v°MZŠu-µLlģźFÄĪÖqżŃļK”ˆĮ³Ā¾3|B¾š§ŽģL“„Ł„Y$iNā»±ņŸ¦kÄõæke@Ō$ŽłZRš)\Ÿņ(±ÓŲōżąUŻĪ•öÕżK• *=Č:õćą7šöc§@byaw”Īõri„Šóm_\·Šõmo I<˜U†NzdS5ę– —$nS9¬ĢŠą½ū8ž{yBŹ\×_„ZĒg$vŪą³z©M›ÓC¼cį½>[i.ķć]8}ģ³|½+Ć×G“¹¹&I£ø@p$QZÜŻGCÓü9ycjb“ ၜrĆ5}į=F’WŗŌlƦ‚0L±*ēvGjŚ:p𕆹Ŗ_ܶ©5õ܋„mĒ’=Åf_x&ųMm-„染Ŗ9³]ÕĻBŠō9ķ`77(£gh½lč^3‡OŌG’_µÖ–ć[øšī߂ ž¹5„¢>D}”¤kVšģV¦Ā4KD#!—Ó®}kŠų”„ŁjjoŻŻéāRŹ˜›Ūž•˜(x&ŚžĻNµÓąžīūUPĘIdł²=uŗŽ©µ‹bā(E!_wqAG‚[=ī’·j·tA mē'aŌśq^/ćĶ"÷\ńÕ­ėé®ĆĢH÷kīs@Ō õč“$Łśkéې#ģ;¾§žōż?įķ­‚ˆ¬‰P¼ļl±jŽ; G[3z?@<ԚIž3ŒńMŅžŪ„ćGe#Ć ·=śŅqFо2ųuqąŁŅh&µ»·e Ļå õ÷®NĪé‹“m3du$õ¬dŅ&Q/‚L#uW‰Ę2j„µšż¦gdŹ`{ō>õœ„ŲəګAmßi!pƒ©÷¬{(ÕLĮįF”Ę ‚‘¢×Ėm“f@·<šjŽÜ\A °0żć“uļXÉYŽāi·“]ę‘0HSžN}EMØéŃŻÜ„ÄŃ”`øLŽ•¢}Ē#É-o<1Ż’oJ†+T¹EĻ );‰.lę…T[Č£gēüę›emy,’ČIĖ1ąw¬īe³Š¬$¹[„÷Ā2z±«Ņ=¼Žb@ ƒœ‘ĶI“YSSC=½“vģū‰Ć‚G"”“ÓÅŗJģŁ”w'īŠ “9éÆE›I)ø`‡*qŸzåµ W͈¬r¶ĶŁāšFŠGė߇|4Ifm ‘Ü<›Ž7ńŠūsX7ž Mű¾÷7`yj ó2HćńÆØ©ē)³ŽćÕ5ķWLŃāšŽ…yŖJIuŸvłł³éŠž]:ūTÖåV_cmĮ¤ł~Vė÷Ms“mGÄK=/B¶±W²¹fµ+ū¬e Ļś×ĻžŌ$ŅR;‹i¢G$+9ļŸ~)ĘZ—§Ų_Ėā6#be‚S¹‚|ʼŠśnŽņ?ėśf„u¢?ŲŌ\ćēo~0s𤉓¹ź’~2hšgĆÖmY†Ų•UpÆęŸ”āąq_žŚUĒŽ¼s©ųKZøŗž2§lņ1g¦= 7Ų!Lś_įŽ¹m&‹„i¾#Œ$į<¹Nrf$žq^żöżš8¼·KtEł•‚@¶ÖrFŠ(łgÅZnj¾(x_ā6—«ĢƒO˜L–.ø‰›<äué_BxŸS}JćU7ńZé—sF\G•O»œļżk »-NŗI& ų+ā_'\Öü;©Üo¼Y$xģˆćÜqž}ėģY<ĖmZā Ā7pĒŽ€œgš­!.„béZGēwÄ]m_PG™dDWaå–sĻŗÆƒv:uÕō:šŗ.؅ŌäżŌ'§= ow8<ĪwāĒĆw^ÖüC¬XCl,S–GÉ 3ĻP;×Į(šÅō2Fm®@ u¦®,Ö6<¾īŚk[×)›Õ~bÜ„v?|e’Ÿ‰ģµŁ$*ń®+ć#Œ~k°¤~²čݧ‰4˜5+uD%T:¢ą+bŗ{YŸqFó@'Š Šˆ˜²_čāO _é+±™ÜF“:/לWꊛX¾ūEæŁęI6ĖS~µĮUTŖ„”{G×/ōKĖI“r Ē—øńßۚūŸĘ°iß¾ųāŽe=ÕžŸ iڰtĖ+ĒN¾ÕĶĶŌźö¦’ą’µ\’³ķ‰įĻj35Ć©Óõ9§“j[]7ś—9 a› OlūWöĆ®Z&Ÿrf·’;ŪgQ4(įѹĪŗ\“Lg£ü:ń buŅĖļ’A¤ō®wö‘ųkÄ?‡šŽ-|ķsLĶŻ‰ę?ŽQųs\ņަ2Gš_’ ų©|2ųĒ®j«¢ßé¾ńņ]ZČĆĮ:‚$PqĘHWåF£göyZ٘»‚x"ŗØ½,qŌ9{›iƒ·”!ø¶ŖšI,²Ž£<1®Ų=7ŲµaPHd,9SžŌ’\$.-ć Ļ~ĘØØ$V“æVĶXXİ4žbł”€Ų:ž¼ŃcxīhAs!DŒ–`æ„]‰S#s/Ķļ֔‘Ń©ū‹’ ż“­?eoŚ6ļöyń† ü$ńówy°éŚ€ĪŅ™łv¹;q×;Olļj)Q­–$dž–LäKä0śŠĀŗ½™ŗgjö•½³‘A²¹R§Ó=«ćoŚ Ć—cĀg‰­-Lڦ‡>ĖõQ’6mĘOū¹'šZójhĶ9ĻĪߌ¾ƒĘžÖ|5ŗ'Óo 3鄚Ų|r™÷ēŸP+łż¦¾?Ā_‰óéKiö]>žWxų*Ŗė÷½²r8Tj{Éw0š>g¾·6ÅßÉ…SŠ'ß’gD…ÆÖ½(nyµc©«%”Ģ 2«(ō5V[fhX³Įąõ«N„Fę}ăzE0Mæ;ę•XJÜGB{U†ā ²•9«³ą¼ŽZäBŪż^nĘĪ3Öŗ[9Ōyˆģ‘ŽqšR]˜3õÆž ūZźß¾8’Ā©Ōõ Mjcu¦ÜÉ!EŠķ>P=>ułpz濹υ~&ŅüHšI Ŗi6š„īĪŠ"¹ć͌ōx7ę+ ±: {“×sÜĮg5¦јīS®=ėgOo³BŸb”%Ü|YčėÜ~"ø'Ml"_šp/ģ+…ü_ķ_šēD·‡Āž!źFĒŁ5%RK:ōĄ9Ēń)Ļ©ž[e‰ēµ…¤!™śńĶE-oÄÉõ’ł‚‡`6xõÆxšÅōŗLšŽé—rA1Į‡@:ēDщõg„5ĶS³·[Ū\Ż®1¼sé^+ń ?Ćz”·r¬…&b c§SÅqĘNö)õĄ}bĻ\°··7±DžXkv‘š3޾›£/,%^«ķ^„9•bÓ&†ńÄmv÷ÅzŠÖW)“qa»ŠźFE¢†Ķ®!UB¹'ŌW%ŖŁJ–ƒQŠŻ•7m5“d¢5µ§˜%E28ć#łWY§jĒN»Šā_-ÕOŻa~µBāŻf b8ŅāI„| tę¹}&K[=Æ4jӑŒö?…oŁ_išĢĻ$t…ōÆnѵo§‡µ‹{˜ ·ŌńK!ĮB9Ēā8©r+”ńĖ›ųo­eøi<Ū¦“oĢ3øzŠÕ}*#„¤±Ŗ%Ņ&ä ö>µ.W8 ;{Å»¾ŸRžé”óŽūæׯųRćH¹ÓŽ ˜`Żæƒ÷Ž*Ұ¹Nšś};F‚a䔋f:Åx7ˆµ8ī®žhvĄć8ĻĶcē xĄ¶Ž"¶ŽÆt\Āuä1é]†«׆õM»O.ĪįˆI˜įH_OŹ¢R¶…VÆö8“mhéŅcS¹‡l,«ø)ėœWĪzæ•iˆ£K­7΁\õÆ&øIœEå~č÷śS’Ü< ÄńZé÷B2ˆPMZ×ģÓK·¹¾“Īt/µ6/SYXŅ”?5DŽ ˆåLŒFÖĻ9Ļzō]>Ł„25¼…3˃ŒF‡}ÆŲKe°@ēŅø«ižÓõ­üNäFV,w4cĮśÄ6­v„¼Ī…Kr+SPÖīmgŠĪbŃ9ž¤ö Ø½Lk­fāķ™™Ē8õØtūõ“žów°QøšI ŲõµšżĶä6·6ØÆæ‡„v6޵ŽÕlē’%2ø5”–„Øw‹ŸN¶ø·Ņfžv`µÅ[ų>æ’Q9DbÖä w„nę§1«jŸ`»ø²P³l;NĆÓ=ėGBHē†{£ęyż@cĘ=Ŗ[6Š·×+;"–8'Ś»’ÜC«qqp"8ĶL[¹GYāXéśrįmīäĮĄ^£ŽµćZ|s©[ī ŃNyć8­ś·ˆ5 Ļ]h˧żį†ģēĖ!O?„?J‚žóFµÖęŽ)‘å*ųäŸóšÖ1°Ė2EuśKn‹6ē•ؒĘ<…a…ēn:×W`Ś=åéŠį’ [åQ»”«ŽĘ°…ξO i·¶ūe€5Ś E+•ĪŪ-&y’y-”NÕÉäœōŖHŁA‘kš“4.^=±Œ/$šņk»‹©&čå!Vī9?Z k4ŁŚ¾¤ģ¤(äćōÆńgĘķ3Į-„ jåŚa·2ŽFvŠ™;#ŗŸ›^8—P½æ×55g»¾’VœĻœ³Ī >œVßĮ’Üų»W“ń½Śōh˜¢Dó`™G~œŠņ±ul®~›įǼć9Ćåļįœ—7Ouk+yņ§o3ķĖhn.JŠƒ€:-^Ń,̳PoPÜb¾SīĻõƒƒ8*tÕ¢“ItKe÷™h»B™|¼WJņA=«)Ž5egkŽQ>Š…eć)>ϧ’£Ē* ²„¢29ēÓ„yO‡Ä’Ś-o(f†HŪĘj=:p;尉ŲĮO>⦟Oa:4»o9õ،uŌźŃĖs`ŗ5§œƼ‚¹įĒl~F®[hóć žµgu8€r $õ¬čŠjś$ÖŹ\]šTņ·×ō¤ŲÜ;o}ā­KQŅtķUE݆cŽ@~f9 O ēZź5mnoG£OجrOil¶±€0Eąj=”.¦Ī–«l‰Ųōŗ{k€Łž:qĶi jtGa—£¾0MėOŒEjL²oĪę<‘šē’ńR՟dü°ÓgŅåŌ/”ßz²lL©#©ę¾Ųš½äŠ"kFœv5„3Ä«‰»>Öt6„kÖį^<8r yŸˆ<+¦ź6/¬\\‹KŪt*8)9öŻõ7Įcõ>żØ¾ų—öZų©įæķÖėĆ>+Ó…Ż­õø?gił%zsī5wąv³-‰“ł”s¾äˆLyūŻ{~uN™÷F:5©sCUžNߙõ—Äķ5­‹QJŻÉ+Ž«_6­ÅĢPĖlčį†x$R3Ł‚¼lĻÖoŲ%4æx3ā'Ā?°E{āmwI“ĖAĄóćVŁ“žz żÅż”⓱ų5ąæÜ[}Ä¾·žĖæµaóZMĪAśƒ]“éhœK,MZJ;)8MzrøæÄču‡^*¾ż ü#ńOO»Ņģ¼;e”Üh÷±ął÷Ė#ßģ«…aī¾ü_šWŸš?Ąų('Œ$š†‡‹įčŽ#Kkt Üļ1ĢįG³¬Œ}ϽsāhŁl|§Ń‰eG(į“Ņ“'ņ:üb|mį¹ęO·¶‘†šNpk­7¢+Ź¾~½õģ«u&Čńlž„ńOŽkÖ“_Ų™ēN˜ŹčDī?*TäxŁ•6Ś?u¾ėwĒ‚žńWĆļĀŽ$0 Y!r–’ ä?<ƾż¢¼;ā_ƒ¼!ćо·Ö¬nä ņN VQœ$äkŗ2>; W’RƒŻ3ä­WZÓUŪmi}‡5Äxæö|ų™į½k7‡5|͹ŽåYT{ķ$ƒYN&ŅĘ#Éā·ńV“0]CDøŲNŪīėĄ¬oFÓõiÖźĪD“b‡ĶN źĆÆjā3žX…±ēŗm³Ć©Č€Ø]Ųę½*M"Ć]²m3Sڰ6š&?ZĪ1×Sެnp:ǁ¼IįåÓ//ŅćNø¹ņķ/£a‡`GŹĖŌżUū”’tŃ×Äæµ >ÖąŠūJ·šōŚ›E'*^6 §žg_ʽ\45?<ń·Õr n#ł)T—ŻĻ܏‹WvŸj[_‚¶‹%ō•Ę Ń|˧łü–aŠ6Ģc=ˆłĒūIų Ę ž>ų³Ā8I<ö×Z<ģÅ|ŲĪwąr=wŹó›ƒóՇĮįrźŸH¹’ä×_6Ÿą|Ć­ųŪĆśOĆæųóW×4+]WK¼0Ʀ¤ŗQĪH89ōģkóāwÅ+/7ZœńŪŲxz ³ZE‘61L’Zņ1R¶‡÷7„9 y)cq)Ę;E>»;ėÓk5¾§Čo”A£j–śtqŗ,JB‘÷@WŖXŁĢŠFĆ%@Æ<ž‰ĆRźm[[Z!•äƒĶXrqƒŠÄ‘V\Fńƒs¶„«žÕ:g-Ŗčv¶·rź¶±­†wIƒ÷OÖ¬iŚ‚¬”RFx³œśÖ|†Īw¦ßCiu’:'ŸZķ4Ļė §5Ń^,¬~sį/įóü©āh’Ėŗ“§/X?Ö-?ŸĢś.P@<ĄL˜Ę{W'ŖßG ™™¶œ` VGė1‰›e;ü“*œvu­«»_ķ< J¹^~é¤_)Ąé—ÆöūĖ ”%µŌMĘ7Æ÷‡µvŃ]Hˆ™šGzڵbe|H×Y|.ÓNĮŲŽĶy“~*ŠēA†[kč Õ!“ 3ó(~µ£––ߚ׍,§°#1„ą|ł<Šūó¾;Ņü{šŽÓ᷊t ;P°*b·¹ē…˜õüĶmō8%K™ŲłcįæÄ ąOŽVąü¹¤sZE³Ė©£ź+’éŽ-mś¤D=¹ –Ļ·½~4’ĮH~)®»ćO…ßb‚1’ģO}Ŗnķ×~£“ųŅØĢyĻŽLÖ5§‰ćŌ.÷@ū¤š=ź”LZ8’ės\Z?$6S4sż3Ū…NŅą}ÓļłSp%–īuøÓž=ŌŁÖܼ #H2[>ōł]¬`×rƇŌ6¤So,Ū€÷ÆQ–ĘeaŽž“¤ŸQn|<ŠŪi·^*ż” įpA#„6óC}:Óķ¹0ŪX“ÜŌP!¶–āŅIc+¹W$Ž3^_ęB|-Ć>HČź}Ø9ę_šę‰41»É “±ź}ėŃ,“+xģf½!|ŲÜW<Ÿ„Ec¤”D[×ųGCQi˜ifX™I\Ž(b;Š!’ŽéŚ9CЊ”-Ż®‰eēŹ7ŒzŠ%Ŗjā;‹{—’G•~Søņ1X²ė:~—tbY— yõ4ĄšŃīµĖ”eš5ŗ±Ę+HĶ{hf²–ę=‡ °Ē€ĖŠõ­·-Ć“±SÅ,šå¬ÄŪŗ¬qē*GCA‰Ši“źwJZņ(ĄU9Åxö³s}5ŻÄŅf&Voöęƒ&^YīßLūB”t+Ų{Wø•ž5čpw .s¾(Ņīuƒo4“OåĀp”N6ŸOē\ÅŪ½Æ’Ćlyœu ŁJē_”|gńv‹į_ĮVÖzHšōü,¤:äa¹Ē ā¼Qń®…ø¶Œ˜nU‚62HéM"Ōnr¾#ūd+k ²łYݰœīEdÉ:Sż3@Ü,KŁocdø*_”5V/±é’­ŗBČī~š^ćHƒŅ¼!¬Ćį¹.5 ce3\”ŽH[‚[ūēҽĪńõ¤{lKŽxÅ/sʇM?dŌŚ:‡89 iä§PŌ$žm.ģŗrą@Sļ]•įŻGÄé·Ŗj-Š [ĘwĒéģ(4·s~Ć\M*[›Wœ¼Ŗ»·µÉŻj¢^™l™Õ rTņE)- ŽĐ_Igq5™ 0Įē3_3x³WÖ4ÉähŻĢĮ¶9##iö¬ā‹Œ¬nųN85‰­£Ō­Ģ¶ī1!čø÷ÆAŸCÓōķiR žÕe£īj–W8šŒÖWķ¦›¶ki>B¬qŽk“Õ¼,ś\ig*ŠDFs‘"ž„j%)\įąūw‡å¼±F–8Ėłˆ¹9ĶUŸN×5 CA4ńJÅw.N=sI«FV8½NÓPѢР=#W^Uį¹üėŅōMZł¶µÉ8PĖÕć·ēRĮĶ™2iŠjś„żä+Ż‚įō÷<Õ}?ÅZŌE¾ŌLH°’p:QČĢe+»:>§{”jSj+3ĪęF)æ {b¹;?Šž"±ńÕ¶Æoēi±¶’(¦>^Üō9ęŖ1±“GŌ°k‰©č6Z燢³ū38vłwżTÖuī­ö‹y‚ČŸhpCįx\ÕÉf|—­é÷rÜ\M¾K˜•Ų# ĶlųVK6ø6yH6.Yū‘AG£Y“1,–ńLάr7>µź¾Ō4ŸKfnllg‰äY'fPŇ =ذ^<Ō4™/.nōčŅrYÓ8äąf¾RŌ|Mr·7sżæRµ½FżŌ…°±č ;Į-‡x‹GńG‹t»=w{_dfnpł½ź‡‚š×OŌxć‚ó]¶ˆ“ĘHü? —ÜzŸ{ų8k޳ŌuóFŒå±"§ż¬ŌĻć- “OŠHnļ~häܹTpG½fąĢd˜õņM‡‰.4Ė¢¶“Ü'ļ}E¼ēŅś4ϦiśÄVI .<²ŃŽ µŁŲ鶜‡Ī‹)ךøĖ”Œ¤=lE¼­)†/:@C±j¤-Š“žZ(8aŪŚ·RhĶČæ§-ŚŚj[YGņIę¼¹š}»|²p zzĖ‘Œó½āƹ£ėS_¼—‹i(Ā…rFzēé^žß¼+ØXÜķ›Qy¢Ž2÷⤿fyÕĒŽ“^Ļq¦Į%“yŚԌ‘ßš…¼ū©Uš$EĻŽĻZ å”Ń"h4?·ĖŖ[9w#ģūŽc_SõÅx¦Ÿe}uŖÜÅ,Ńä8eaī¬ oĒžšŅ¼sĮ,÷‡$"¶wń­#+ī ]OŌōåk;m®pIa÷F;³„j’Ł÷Lķ3‚ åQ) 3 Ēß~Ója–E’v£ę'§5å\s‰dvYpß0Č®y”3f]nŚŚ7ŽMŒÄćiź>”Č~Ā#_֠ţ*čĖhE܊³(ĒSĮ®wūd“¬Ž°Ä›ølńZņŻIXŽ+ū\ÜG4Ŗ‘…;N3“č+žÄ `³™ćS‘ĮėķRé’\°Õe¶šņØ·fĢ„Ž īµ]MÖ3g*2mūŁę„ĘÅ©÷8kmRķß÷’ł©“÷V»6Hā–ŁC`äē½g4\]Īä±®VŪĖ9f;?ˆžę²¼ØÄBpŅc×±Gūb¤(äg= sŚÆˆf2±²‘\—sš#\ec…Ōī..ęē‘ÕA¾ü×č4wŅ_hnP)-8?t⦃ęŠgniC’I¾§Ģ^-Ó-ģ’ŅįaĪ6œŒóė“U¼3ā xnöŻÆą’5Ÿ0–‹ųX÷5ÓŹĻēgćųĻPW³Š[Żö4Ų9G=ņpy¾dń§ĆųIdm{M[cūˆ?tōź)[”>Tń}…”†i¢¶DŻņŒp+Ě9l®Ņ=±™Ę‡A]TÉrŠż ż™|r—–7 żÜpcóB3Ž€š}ųĶ}£i\Śbš0Tn\Ó©‡Eē; Č` įM|aūAx.×J½‡ÄÖvRĮ¦OGpÅw4²xēōÆ>¬G ź|¹as Č­ ½TwöÆģÅńēDÓļü $w–ś ĻnūĄ"w9äļŽøłONƒ¹Ā|@ŃuķÄ[ćkø/moUŁÕpUnc®0+ūŽ’‚a~Ó_ķ[ū"ųRę]Yõxa?³uE‘ƒI!\ Üs‚‘ŸC]Q…įnĒ”«rčrÉ„x^«hČ+ކ¾ Óļ—Y“‚ü!t'·FĒQXŹ:Ō‰üüĮ^cēų‡ąmn×ĆŠĻ#īm[A2<įĢ‘}1ų{×ń]āż2öŅņāItß/Ė•­ēUC¾)Tķ9 ĪiŅg%Jgsj"E‘£f'­s·;ä-åFcvĀGX؅IJ'”»@>µFŠ"–"GĪ5± k“8ÉŲOJšę»2¬8äŠij\v,T`)ŒõnÓsV8 ÷ķAŃhjŻÜŚĆ.™0ƒX²•nķ& ŠĮøaČĪ+ż’ą”Ÿ¶ž‰ū]~É>ńC3Ać=Ćž µ’Pﱨ]ēų°ß+ ’{³YN7LėŽĒ跈‡™jŖŲ2·­ygŠtĖ;›{ŪAufąĮ{ó"<?ĻJó+!Ÿ›æ¼!†uOųDŁ^&™nés Ż±?¼·9łG©ü+šļž Qū=ÉńĀŅų‡Ā#½ķ¤fūżWά§ēĖ~|Ö1v×±œ„Šžsī Äk˜eŽełdGž~5Œ6Īņ.ĶØ­Åz“ŁÅQšŒ6ņÅ{zf²džC’Ģ~c]&1 ę-įČŚz±ķCUvUŽć ^ōó"6ć`ĢcĆŚ­ĒxQ r ŚNwzP8–bšćŸjÖ+ęCę’»”ēšM›ÓdöšÖµįŻODń†ī^ĒY±ŗKĖy Ęčw żqĘæ»?ų%’ķg¤~Ó ¼1uöž6š&6ŗ”*<Õ H¼ŒńšĘZ£­“Öō½wKūbĢß¼>MĀ“Ģr×[~ŃéÖ+qdŅ\Ü[.J/,ėķ\sFŲó/æ<%ūNüų‡šOĘq,ŗ6æe/Ųeeģ.J²!<†ÆcźküÓhƁž$ż¾3ųćą’‹-5 }{H»›OxŽ<)ŲOĪ;Ćiu¹#hÖæó/ĖžZģ|č ą-dF|Œą‚ z†õgŠŹŽßT™ÄQć g5µN¤ØžĮįmbźG‘`‘!Œ o_zõ/Zéž(š“m|U5KB$Ād8õļ^|÷7>džEÆ]iQi±éWW6bŅmč‘>1Ļń…~œx7űė^Š5Tx„i!Ų9ÜAź{śW”‡ŲĘ“4:!!YCn`ŁĖ8a]ž”4D&]šƒŅ»ć±Į8õ:Ću @…ó±\F­«¼nńļV„żåōśS3-A-­å•µŌtĪī0M@o#šI u 0ć5ЀߵŽ-Iq\ĶĶ»-Ņ"’Š­Šw Ž ķõ®EO=+×-lü;®és[j—½ĘŌ!±†Ēõ+'Jå<ŽŚÓRÓõ‰mn§[«u•¶2¹8–+ØiµüցŲE·žzŠ\ “+C©Ł›ø.!ófcµ[~ŽłŖ¾ŗæµŌēI"AbßźˆĪGµk¦ ßc©ń=Ž„ØHȲ‡+’ž4µ“TIĢ –r~ķ2¹ĪėĮ×:Ō6—¶‡ī yč0CJÖų›y¬ųžėĮņŲEw4Vs>ōŒpxn£ńš)JåŸ ų‚ī÷WF“æŻql 4@µ»dQ­ųl뺌PÜiņ£q2ü„dƒžÕGžxöóūBÄpJŅZķŽG5ĻhåÖ ×6mÕ¶8Š;×öe¼Ø'óĒŚxŅKų¤˜FĶię`—ræćUÜ,z&»yĖšCfĄXĄ§O{«{»{y-,§X‹fC·q§Ö«Ÿ¹›ąsÜj7šÓfe'Ź]†{õ’iQé²JŖ×}²84„ ŒOF’Źõ¼?āė™bņÄbFW‡Ć ł¶Śå/fĀ…]Ė•R1ŸĀ ²}6?ģ”@ŖöÓJY×¾O½tĶ•xs<ėdاØÉcŽq±Fŗœ™…p€ąž£Øi–ze¬¬O#60ri„ŠoLÓō}B N:ā čۈ¶œ{ē=)— “•m-ÉE ĆxÖŖ6Œ±É{ĢBL—\žzŌöZi³µĮłŲ.O*€Ä¹Ō®šź-eyP0ČėÕü?©G„ūj©-†ĆÅsž5]'RÕR‚D1:01šÜ‹[·›H‚ŚŲĆ5¤HG­+%Øiš„”¢I&xxU'ÆŅ¹ÉY5MFęŽ%»jõÅe&6„cv—.ę6ą)ļ[ś‘„;S¼ÕBDWŹ;w>sŪ‘G3v1tķz [†HŒ»QĪŅƓĶ{"č‰<śÅŒ~l1Č[ĖcŹš2qłRæBć+Ņ#±Ņo&{‚ö· Nž×­hŽ;¶½Ņ§Ńf€3/ĄąązŠkŹĪKYŽ «XąŚŃ·™ņҼņ;Ų[|žbÄx"Xō]=ÖĖA—Q²·”āLž2zW,š†Øķqwf#Nœ€=؈µ-*{V=Ź-ך­­#O³¼Ņ¤†xVyN?xA ‡=±A¹ź^ø—CÓ`°¹ŗ{ĖēĘ2JĆńÖÆ­h«o} Īā#ߜž£ņ ŁM&…©ßj:‹\jŠe•óóc”®æW3Ū²ģ“ĪFPF8Å'ŲįNŸż£Ø1TXõ÷­3ZE'–@Ų>a‘Ķa%ÜÖ3īd[]¤“ƒvOJ߈½É1Ø9č)a—³I†ui[ öŖŚ}m¬ZĖņ}a 2ō稪Žę]OPń“·šYŚ„°•‚y`‘ŒWoąķ>ŅŪB]<GŽ?ŗqZ£TdźVöVz‰fąųÆ(ńŠ¤ÕXé°‚Ü6K)å±LڜO)Ōt¹w4Š3²õ?J±”HŃ]Bāļ0(:–‡ ^ų”é×)³¤Ī”×2 8ļÅrŚDPGwlæfˆ’ĘNüœā™£ŸcÜFÆo=œ‘Į3«ƒŸā¬—ÖÓL’8ąó.;·Ø¬$µ \įmÕZļĆńZŻ‹åy#™2{»­@Ócˆ«FŽ„oåMżČłŸž ć?Ē·÷ķ}į˜ķ×ĆZ֞…¢Ą_2ń(>¬$.=±_;YݼwČP9ģøėÅUX®f~'ĆX‰Ė'ĆN«nNnū¶ŅÜżšg†læį šņĒnžXĖ>9=F>•ÜčŚf„„»§–įīäńNŗ»Ÿ\ü-Ö`×tSCŌÖ5 hĻŻõÅ|÷ńõ"T[;Œé«‚Ld1]‹bš *ÖgÓ_į³ż¬c ųGPÓmµĻXÅåX]Ŗā[ ˜WåķJ¼uĮė_Ž^Õ_Į·zEŽ£ M©Ś\˜¦‰øt–2UŌ^ \„ŌśŸ²©ˆĮˤļņ–§čŒPxŪIMcB‘­ćøV%óü¦¾lÕt=KAŌZĻRēg!tašpµĻŃaŲś§ö=ų‹©üż¤~k–ļ3i7ŠŚjĒĻīH<}3łWīˆž*æĄŚ“ųŸO{Æ|#ńōQ5ŪĄŪ’³Æ×XĄŌW} ā椒¼vcBŗūt§Gtßž§”ś‰‰41ĶŻØećØ#"æ“ßų8bČCū@~͚‚$‹$ž¾·fQ÷€øĪ?Ļ­F){§ņ7ђ·³ćܾ’Ķ%’’MŠ:ÅͤA †ž=v×¢$žĖ“.xƓÄÅ&Ļööœ®‡jŸ±Ÿ“Ļi ž<ÓtĢųUø ·~øĮSœyŹņģį©Ž7gń/Ņ‹³,»ˆrÜÆ,m:ó‹“Z¾U+IZĻFŪč‘üÅ|#ų©éǩæŪkš“g7lČ Ó=øé_^ų?ąÕõōŗ…޹§µ­²!•w.Õ§±?¢qÜ ¬ž¦ƒü/¼×“ŃØųIZ÷O-³©ŪĮĮĮü hé?u 6Öm;R‰R6Góœg·4{Ķ­Ä‘QµĻ1»šŖųFöw‰”˜ˆ÷Ĭ1é‚+ķ߅’±_Ā’ŪŪöqų‡c C§ųć‡o 6×ö1šYŒE¢39G!¦8÷ĖŲkcć¼G㊹VM,ړғ‹~iÉEžgóoįųKĒ^,šÄOģļųP“KŌķŠį–hŲ©9Ī9ĘkŌ,tĖ©„0ZĒ»hÉ'¦+Š­6™śīMކ7 OEŽŠ’}ÓWFģ֟č¢Ū;Ų8pwoĮ^?ų‹š§ā“ńCį‡µ’xćOC7–N>d'%t=Ō‚ iF­‡›dōń”'†¬ÆNiĘKŗz4{÷ĮŸŪ—ö–ų[ūBźtĻéŽ&ń~“¾Oˆ"Õc&ŪUP .ä ą`ÆLz+Ū?ißŪ·ć‡ķC©xv_Zų/ĀöŚt/čI02– ¶÷“ŽZļUī¬~OKĄ<Ž9¦4Œ•ØĘ7÷l“M®­zė×Ļć»[i.$¹–é|Ū©X™²wg×5…ŖčZ†ģu-Qķ`‹ä31Q޵ĒZ)ź~ēGmŸųs‡įœ5|.nP«VuuéĻowĪÖßCӋ˓Œåxā¹›9ć›7±œ“…÷®7¹śµ7”Æ[@bą1ÅhZN>éx¤h`köĄ\A+ŽĆ®=)Śd²M®ä)ģyųŠ–=;Lšfƒāļ‡>3ѼI1Óīn­ŒpĪŲŁœŒ×ę.²ž"šv­w¢Ü\Yźš7—ńĖP;š>~½wv‹>Õb_Xk7¶¬.aĪ1Č+õ#ą’ʆz®noļWEÖ­ŪtHĮ¼Ė¦ōōŵõ<T%5”ńāćųśźKŠŽ]“"1Ó„x„‘Z“ąż+NDU*a¢Ų2īß·ÆNõ_P²“’+{q, ÷NMc(#¾4Ī[Ä<=āX­¾Õ§ÅoynŁY¢bŒĆѱֹķcƖÖq,“³3“1ϵbՍH,“ iąfdV`Õēž<ųKcqoˆt‹ÄP‰Ē›nT€@ĒĢÆJV<ź°8o ų×OÓ'Żź°[¢äe›9#µ}ąoŚ2ÓĮÓZ_Į¬}¦(eĆ·pn{֞ÖĮJž¦‡ÄƍžńŠ”ńTvSX¼®$F…·69ąs]‡?hŸ ĒrĖåĢnGc)N8”z°Āst>ˆš·ķ„4ėk-<_\G0—ä;—š¬cöŒµŌ{ó–=}Ķrhö…ű E*X6ÖQޠЧ¢i’Ųö‘Åw|×·q¹ Ä`…ķŸ~•/‰eŗÕķKiĄi nŖ3Ī* /Kc{²ÅŖØ[Ķ `sŽ8©ü)µō÷‰ŖÉ$VQ«*¢¬Ģ3œóŅ€8jbÉnt­,¬čč±\°Ē§ņ»}]I—÷ę;†?.ó““õ ”¼ą»])4ŪL5åہēĆ»nH®śļK²¶34 “–ł¢Q·žtšē“ųßĮ’ŚmÓ•Ø>v¶=F*&š“śfoo4=ą@²9Ī()$cĮbžD(‘™PĒxēPkƾ&x_D{XQl&œ±eRC`zŃcK#žŃ?³,lŁ'ņ@ĄĘr /śbĻę·•95<½Č“ā7MÕÄm`“¤ 9_p:ó\^Øś§†tķ: $VQä|ĒuØR#ČÅÖu¦–+ˆģ ÅĆøET*¾¦°¼Kā ‹Ó¢¶K˜%•öĖ‘އ3Xß©Ģiž%°šÕÓMÆ)Ō¢fČG$°>Õģ‰ć /ĘZ]»ųjё#Œo2¾a’ ‘øœMŌŅĶ4dČ9`£µy±„\ U.ģąXŁx8{­#.]lz…“ c_ŽīŽ{ek”MčG9ō⹿x+X·±mHŚ\ją„xąL±T£} yz ü3ńHÓµ;ū­;SŃ4‹Ņ؂ąÆīł×«Ć \YČČ]$cĆ0ä1Ŗöfr‰ČųĻDŸM…÷ĮÅ.ˆąĀ¼‹G·ŽĪā}Š?•ž7p~•™Sn&ø¹ó‹Č–ĆåĀŽEeė7Ś”Ąé¶o<Œ+ēŠ‰JÅ-5=ĮŒŠ,ÕĄŗHŁÖt?ZŹń…¼9«Ow‚Śż¦)X»'Ģ·5I–¦`ź 4V°i±^Ć%ŗ —®Gó®ĒįW‡#Õµ‹}GƒPט“Ā‚\ØÉs#KŸTź0Ōāšī„ąķEdµø –IŽ ńĄ·zų£WI|3vѬźĶ.Y±Õ½ź\Éh«£5ž¢ŠÉo!ŽÜåŠpÄ×u…Ģw6ŃŽŪ4(;ž0=i9_C›ńl"wŸHŅęJ£3m\«{zWošū\ÓōÅŌ5iēr—• qʗó·‡#·!†.qäńü«Ę4/ źž$ˆÉdŖTī(ų±ŚŸ³4W=«Ą#Tšę‘—ØOpšĘķ'”[>Y>•ģĖć¹4Ū;[ż:Ģ3”Į`3æ·"³°¹ ŽŗŌ|YØ^}®#gC ŪógÆ’Zŗ‹84ŲZViJ&Yņ2MŸar#ńGŽÆmtß²čš¼6̟3ʇ/ž¹ėÅ.“’ė÷$6·Ņy§h/ <“ÜVÉܤ¬vw’ ­ģģŅāāh༌ søW)?Š Ó/ŽžÖžj¬kózbµQDŪ["ńŁē7Vv÷ųČb=k#PŌõ^_ōö䑞9oĘ¢~EsXō xF™me•|ēĪą„dØÆMŗųFšž«›u‹U‹$(›|ιü«–Læjxƅ<-©ĒytŗāG`ŠB@[½wR\Į§ęŅāĘK¤‘Ā,±Œģ¾Õ“z™JeĘ·°ęĪŹŸ³cēó‰bŽü’*-tķ-Żeas»8 U÷0ęčh]ß[\Ś­­½²4&į/wč+šˆĢ÷CuĘS€@Ē­ĖL×A¶uĆļŒ ø#9Ŗš¼žPO³²qŒt¤#+ģ‘M°_Įęmaøł«’ašį·ž+u®•+Ügր'¶×¬¼-k<°ŁŪy§‹Dō®KŵƈwĻvˆłĮ?JĖŃ™2©`ÕÕ\IrģŁåė×÷¬eø.žt‹Œ»){ž-ž>•‰ā‹żRŁÖĘŁVÕvdq‚Ē×4–ę±e_ ųŸQÓ¬o#ÕPŽō Ū¹'ߊóké¦Õu™žānŒē` ž=s[š${•—ˆt½/DŠĻģé5ČP7…ĮłW:Ž ŠäH8ĻSރE ⓼Ei-üÅR6ŸėVßÄŪ@¶kf% ÉüiKbdŒ->ćW{5Œp1Ļ˜ńŲÖžŸ¤Ī]¢XŹD©»qć'ұ „­ŚĒ²ÄäČv’Ćéß5ꂦĘH¤Žū¢rś Ö RČo£µ:z¬,¬īŲOšā±ķģ”.6‹É(ø99ēŌÕ8Ų†"^s,Šē#Šķ$"¶¢Üѐ܌⢠¬7Iļ] Ŗ*Ū@Ę}«¬[iPye3ĄĖćƒ\Ó6б}åK@" $`ē°ÅRžŅµŠ/$/žsŁ}«•ī3œ¼ŗČ nų=«ŸææH`ģ ^sU÷žöYĄŒ3*ź:֍½Ŗ$rH„™3žkP"žĢy^N<zيŽiƖĘß|z ¾d“GM$~žŁėŗw‡5Ww…įY¤ ūµf,s…Mz_ˆ—B“L’ Nxō©ęß2Ķņš»kݱó“Ē€ų_UńLśŽ§Z&©=„ŒČf)„`ī: ö]z “‹6‚”™ćÄŅ`mÜ?\süźµG£cÖy̌Ņ3°a¹¤nƒŲV“Øźz™ ˧ēČ!½G­ǐ„¹­ÆGŖųP蚆ž‘ÜE vŖ»ƒg8Ī}+½šĒÅI|Qe…5”VÖVņ—UC»’/„?ibnmj>>Ńķ™JÓešęŪ+łŠ0=óŅŗmwÅŽ'ŃY$æOķ2¬c¾£4•N†R§Õ|ššėž!†-DŗX4¦0čŸpēž5õŸ…¾ŻhWזž-+9&żŅōeˆō'#æZ©j]5cāߋšTŗwŽuai˜į(ÜÉéś~•‘¤jz–…nśĘ•,Ļń>“~’Ɲ» Ęć—ŠŸJżjšŠģ|M”Śźś|‘<&p‘ųWKfR¦wŌ8ĻšÖW‹|>¾*šĘ„¢Ü̆6MŹ~pŻ>CŲó^~%[cJtŗŸšŗŸ‚uÅ÷Ś3ŪÉmåN#ņŻ6²©čIļŽ½é!š¦©g:‰mķa‘\ēĖŽß„q9$zŌ©Ų÷›’Ł|Lš®ā{V/퉳¹*ĆqĒBGįŌ×Ū’šIoŚĮ’dÆŚ”t~ś;/…Ž'†;[łķŽ÷mBGrIĮśÖŌ§©Ö––?³WĶ‚éu7Ž}6éEų”Čx›‘åųW“ü/×”“‰¦łs½§µg/3—ĒϧŒ|y0¬Ś…Žo-ĮƒüAOn žæąŖ?²ŗ| ųµÄ’D’š®1xcž’ Ļf"wń‡¦ūUˆ qåÓ#ØĮ=}O„~yüNšŻŽ­g«YéÆž…©Yŗ*ŗ†Œ¾ŽPū‘łW*ģa3ųõż«žß|ų›Ø^ōѵ)äXįÜŃ$É'ށkåqoöydrܓ߄zTž‡HIß¼ó•<¢ē­Set€I"—ö„v's$ˆA"²˜Ė/§­°H'AL øfPˆĻēN–݉ŸAA¬€"²“›cR{š «lóĄ’T°ŪŽōš:)ö.ŲŻ²m,6>}8ÆŅĻų%ķ=ØžĪæ“­·„µ-V Ā$š4·¼8m/Y¾B{`ž{V-juÄžī¾krė:¶…®Ś_X’Ā;āXžÓQd?&ØFG͌įCuśÓ©śkĮöś‚il¾!¶«n^¤CņŹ ą0²qڹ&Ž…ŲģtĘH•RTĘø’9ĪkłŠ’ƒŠ?cH¼Yį? ž×žŅnžK7[ hņSoĢär¹ū…­pā[I4ÆŖü]Ÿą’C7=Oć†?*š›ā<—FÅĻCļN“‘`¹e*J|äó]2A÷=CL¼–Ū iä» Kué[Qj7޲KrīĒ…śW4£ŃŌ¤¶9©āI.Į·%ęrXįxüM}sšfšķ…ŠĪ&žŅUehŽBBūJč¢ÉÄ-­ķ7H‘a³ÓŌWIs-²4EĆ£Æ?€®čly54*.Ŗ‚å –w(pW­Ū_6” Ü·łłG8­cn§:Fž—ąė“ēŚDS(\°qśŽ—}įżUąŌ­¾ĻŻžō«sCPeųīœG“°'ėŠRĄč5\€Č-‘Ö„õ%£/DZD·³ź¶¶RElÄaW< Οģözmµå½óĻ$óE“˜žµE)XÆeØJgŽGS'Ģ8Ī+£×5ĮkCn§k”Ļū?ćI®‚O[œ<“;B$°Ļ"½Ā¦WXfŽ4(Vž÷5*KbOFÖ­ģ`ˆy²Ä’¶Ńüė‡Ō4Ū;Fŗžę#¹¾`9ھō½”¢6‹«®›%½•¤hm§`„€ĘŽ:×yg}żr÷s\\E¹J§•ŌĻ҇0µ>Ņ!æŠ|Z5 hŻ"øaēH_L×Ņ-ćķģ¾Ōm­ēŗS±0O­AQg„źš£ØŻM=˜€obÜņO5×®ƒ§O Ą‘®Ō“/ŹĆž“ģZv<ŹĒEÓmļQ¶?’_<’Ķzäž#Ņ“-.śH—csGCŚ©@%]‚źUV—x$)ā»ųJ–ąäO,¶Ö©ĮĄń„ŗn…ocØĖ!{‰ 1ß·ņ®·ĀRė~!·±¾ĄŽĶd īGsŸŹ²hIWÄ­aģ4“Y›Ģ# źqĮķ_4Ć,š\„§+¤”†O%ō*;ĢĄƒž½~“Ė»¶ŗh£y_ {3@u•Ę‘h“[3Fd=Ē“ķõ9ćhd•VWF§֐`zŽ—į½:]:k©ć‰ne†A^Yā߇ö¶ͬi³Ķ=ŖÅūĻ0`)ZŠ.yrģIĖoš¶Ļ– ,_n8ļ@Ņ|7=¤P\^¹, jÖÆ¶wL³ĘŲ#‘II Ļ–Ē˵&XÉB8Znön•v6ņŗŠ™K ŠQ™•C(ŁéVķ­.-ƒšMå2Ī²£Ōµ(äÓZķÄ#Źūųæø­?kš&©¤jPj02!WÄą©ĮĒ¢yž%Ķōöļ$‹øųĒZśKÚ²Łč6ŚdN±<)‡ÜxcA¤v<_Š¢½ÖĪ©3pH*§åĘ{ 4kK»}TÉ F–„Ÿ•¹4¤ĪūU±ŗ†Ę;‹{y%óxĀĢšó)ō=¤<č`ł³Šßs^5{}« ĒVllż‚I^1µcäd0é]¦”į[æģ»jŽ@¶H72ó‘Ī R·'”ŅÓuõ’1%XžxÉbHńÆ3¾ŗńO‡å×āÄöęQ%¾Å9UĒŻoĘ“5‚Ō䵿\ź¬Ó<Ænū@*ĢA3‡-0½ īh:ąŠwņ¼nqÄdqYzl÷0_C$ƃ‚:PYģ'#W²ŅÖuY6ØĒ—ÕI<ż++ū"ÖÓ÷J[Ź\aÉėÅo^$Siˆtä?iHĪą§–ĘM]Ņ,.oģD«芐ܿŅzĮ³Jg—xƒJóRo²&ŅŽYˆ8ĶdŪųy®,®&Y‚²ß_aHŽ«ü-±·h.X›ķA° <ōü««ń–•omū³(t–<œŗqČ”šžQ“ö1Ÿ)ĄN§=Mkųi„³]™īŒŒ>eR>謜˜ŅčlźŚœ0,n×SĮ³ š~¼ źöqMi$ø ī9éķRäuÓÜü½ń夞7ń¶Ŗ4»ÉfšŒX–\Źß{Üv­]|ī°ŸĆ––žvŗŠ~_-žzūdu®J³=¼4od·;ĶH¼Km9u‚;āŖ$Xś!c„zGö|ĖåDŲPFsŌ×Ļc*ŸėW„Ü'<›!Ćąk+Ėm%&äÕÓiņߖéėk&{s¤¶ŖėwQ]Z½«©£Žø+h…³ŁBƒcC…ć©Ö¼‡=OŌéĘŚž½¢=“óB'slĄdŒ…ē½m|-ųwińfļMŠn-c†%Ė4a·°ĒŻĻ±­ć:¼§éOŒģōū߂/ń„ęae„ŠŻŪ„•˜ķߏ^õüņXŲj_>%źś ięҦ =¹$¾Õ įXöĘéED:ł•Ļ£lo¼ūf‘A.õ5ŃiĢ1ę`HyĶr5©ķR–—6>ϧ©[xjC÷7Qļąå™@ėĘ»?|Õ'š‡Œ>]Ėā)m”’jiĮy:ķīśÕ¼ŁJ²<«Ćõ¶«Ćl Ę6V*Ąą‚;×n’­«@,*šV4SDŗœ°jE؄$Ă­ž˜Ļłü+ēél†›ØĶ)sæ~[ŒW4·2¬ÉļµāUÄ)½ Žx85ķŒ-|ešś’þ-²™õ”»I-ö°ņ–1žGæ³ęÖĒŠ“>tų“óéŽ*š\e#™³½¼„ņ«»3łT^ų“Øü ųĖąļZݵ½”Ó %Ųw#ĘŲĪGįł×„†™ņ„ÜfÓ?Ŗ½ o |vųi”k¶ŪĶeØŲż¤¼n×U<ćÜץž1ųyw¤jל³§Éki,O(goˆƒózōĒē^¬%”įą³ ŗlūĖž )ūij#½ųļš'ćˆn&šę‡kų~yŌ²Ēit–~’)€ėĆWó_āļ†šxGÅ?ō;+ˆ®t×oŽĮ€ =±™¶žäb°ÄŌ¼l~+ąöIS/ć<āPØÖäšģŪmĖīmżę§…n·iéo&ų¤÷xoāĒq]¢G)‡ œ}kÉ©+½Oģ U R„¶†y¤bĘ…‰=ø®ŸąD‰7‰“ĻDā‚čù×å·p}vÖ“ pęX’g Ÿ¤ž%ż›<#ń›ąGŋå:~›ń‚Ü›’ źKåyĮP1±Į«ƒžšōÆż†<)’®įĻŚGÅIĆįK=VęłÕ÷ i¼–īH,ļ^„:1ęMģ~ ŜSZXLU)ķšĒŅQ·ēsń£Uń׍|Qń āEՂXßx£Ä7ž ž%$łm<„¶óč1WtŁvjZ%¼° <ĖØ¢ S\ņv' % „¢’ū•Ó­ę+kTX†%M€õ vÆBšõł¹€‰ćĘÖĪČS‘j–=›ĀzMŻõµķʖ¤l!\/”ńĮĘ’Įé4°ŸķP“œ×TQ„1V©ŸSö ń‡~5Śü,ń{Ēkį?Éöh/$›`ÓÆrJ8'ŽOŗÖæü£ö.’…ń{Jńf™~ųš'š+Č­|ø¬õe8h܎Ģž§"·Œt9ó^!ŽUÅŲZ54§‹ƒI’}j—ä¾gĀß|}©xC]²šÖ“żŁ|¹”ąį€ōą×Ņ’<.š®›.­l±ĶsoŹ{ŸjØĘĒļOFyW†oõ jŚˆaŠd½²˜OķĪÉóõÆzųsń‡Ä²x¶ņ}oÅSÅ$÷ÜDn›|PHŗOœqÅtӕžā ƒ ¦Õx©4¼ÆŪī?«æƒž0ŸĒ ¼+āk»Ū żFāÕMĢ–Ćelšqļ_ΧüK£ÜE«žĒ~)Eöhīõ‹%čw“p•SķĆĪ“«?uŸå7ƒYŌ9üPń&Æ1ńW޼{ć½Sg—öµŖĖtażÄ p?^¦«µĶøÆ"Ć×­ UH'R „++¤÷Iłõ?C’eØļ5gŌ kt7 æ>fsž&æDŅ$ōHm ū6ĆͼčkÓ§©łwIŹĢņ}Jū\ųu¦I§Gi ]JĶ Ŗņ~SłōŖś-×ˆō-JHį’źu_29ČojŁ@ł_¬­Ū>~ń†™ ͤ_Į$1Ē/ļJŽUsĶ}»’“ń֙ąļŚāĆ>ĶęÓ¼S§FŽåß²ZĮõWvŒ.ŠŅ›hü×¹/ø“^A„Ėvkå³'ĶĒ ×&*ģż{Į óp¦]’^i’é£0hĖrr ļYs'˜Ū1ł×›d×cKC ;f‚_6=ŹąŒb½+ĀŚ„Öw÷“ĆčVł’N„UÅźO±;.g–HŃ"RIvö¬’Įm«iwšc•„Œ CƒD¦5(x“Tæ'LւR¼”÷”ó}?żU€ī­Zīm“xǜb¹e#¦šŲ÷xåņ |ĢöØdŲŖ®ŹA53]N†pæõėĶ3Ā‘E Ü/Ūn ¦Tš¼“ł×išOX³š†ü?āŪ[)ķeamø ÆA½—æQł˜Ē¹ółž!ĘÉhŻü ‡ā‹čZ‡ƒ`“µ×õ’) Ēt8” Z_‰4Ż~ÕW™ #žąƒé]>«ĆØÄ³9PĪ7.8ⵌƒŁŲÜm‘Dø|ńšÉŌ$æŠā÷F"CŸZ¦É7-˜Ü"Ź[†k+ÄvBóD¼ ”®bżäyć8®ynŸč·Žu¼lˆŲׄvP,3Ŗ¤«Ø9!†CVz‘*iž=ćoƒš‰/®u=“MłH‘vī}Exu„u;®4żQ"ß›r²”™­*(õ]'CšõÄQ’héóŹėó ­€ß„vvžšŌ×płbļM°ćxŒå—éұēw=¼6…ū éK,˦j¤įd˜ķǹę¹+==Ī”qnóĆt‘9S mŪ±ļ]äoYĘŚr3ŪZÉenƒl„3Č挠»¾ŌE»G "IźkŖ3>?N:–ü ŖėĮuq؈āuf ē†_„7F‘[¹ŽÖ_3#ŠÖš3ĀåGBŚlS`Éķ\Ɗ”„Ķqeā(†m>ļøaų « .‡SįwūGH³‘afQßł«7:Ŗļhą™zfµ¤õ4qŌņü(ųĄ¾ųķńĀžųoć‡×6GNÖ,ļ%’‰€ g–4+· 8,ĄéŸĻ/ŁŪąžńSāFŸ”j²=¶‹kcē°¶] €:WŁ`”%I>Œ’6~±KбM’s’MÄżdšŸĀ_|8±¶°š‚[CƒŗB2Kž§ž•ķz† ņF‘wē'=«ŲŽĒó¦"W»ye5¼s“l¬ż3ĶWÓģon#9mćĶ\V§—6YK=ĶåK'>*üövńÄ"'Ķ‚1[ŅgG¦źöń"#)a·Ö©5ģq]!€’O#ņŲŌÕMi ±H<ŃŌwśW0¬_-ё†±Ķ4ģb\žŚ²ŸmŹ[Č£x«{ ĪŅgæ•·ŻMƒFV®×Ń\ˆZƒ°å±ÓėXk—;”i·æ•V‘‹‹%[:± Ąõāŗæ Ē»H&aœ×­>nä³Ŗ¶Šķ5=^E»;~N0=ė^ēƗ"ķM¼³Żó³„Kw1”®nĆįō¹ŠHšAŽWŌÓäš’Łccy:łXž&ēņ¢Ä5Šį/üiØ\LÖSÅjČr¼rKØx/VÓ-­ݾ¢¾X`aū£=5rtšEš‘%ž5€*üŪkedÓĀ‘Ėp~é¤įb\;&³w;J«ū;†Œu 6Ó^ĢŽĄ“ ÷õ©!”ŗõœ i‡}ė™7JØbŒ~šq… –ģW·’a)@Ģū›ą×Aucp±ÄIł½č2rdŻ-Õ$„±žU]n/C#GĪAéX’;X.ŅK“"ē'Śŗ+E°*I9#½0:+yUādA¦9Ŗʗcs§HdR ĄśūPĻ·r\„Ōök l'c­pzÄwš}ģ so?•y›ˆłO·ė@Ņ4u}¼go·o P ƒj„ŪŲpį^{.}a•”.7+ۊŹs¾#š„²±‘åxƒt ČĻ„sžšńÓFrd™˜ŲĒąPIÖOąÉõ2ī Ķ»*œŁķSŪxR{ˆv‰¤øŠ!½žžōĖs’ÖaIīę²ŁbUž˜®ŸĮ±xąvHFāÉźŌ•“=–ĀY4ˆĆn|ć+ ūĘś,':­ķ¾Ÿ¶įę6­q¹6”ā_źa"Óī”Ųæ0č}+†ÕeŸLg$łqÆ%MrŒ«›ČuŠį抯ø$Eœq[÷VqAĪÄprXõ ’õ¼SźS!Q•lrj{­u†āhdD•Üź~”ĻųsĄŃ޶§{ؤ—3ŗ±RŸtpyÆ>·ŃZ×Ä*1d~ć„4ŃjZ汨%µ*Š''<=¾•RĖZÖ7ÜŻj“½ģҶ’œœ/²žT2’/[Ķ į/Ē„h]x’%Żu_Ÿ8 lUÓī­®'3€Ē®;×9ć_ Xź°‰Z6›Tdr(Šųļ\·Ō“+éģģ"o“+‚<ܐF{VÕ½ÅÖ ©nʱJųŽ3Œ})5qņ³ŃžÅk¦iPĒŽl¼/Ė’GNµę>0³'ū®“ó]GnTF”±Ą9€¬Y’ŌŽ5µ…mJŖN VÕ“«›D†üŖ!L… ęƒHŽĒκ׆õMSZ’iDRŪ³³>įŽ=±^ŃąŻ?NŅ-­tÅaoo€Yœž=³AH_ŌŵÅČ“’K„)»ā”ųc—‰µĖ›mbŠĒÉ%%bwsČĻįL‡-OcÓ­“Į­]]^G,Ē Øąmö'øäÕYüO„›+kĶ:O:ü1}Ą‚1Zņõ9—§ųśėÄ%4ūŪčoa‚Fˆ yYē» )Rę öź²²‘ŽEŲĶÜóķ{ƞ%×õI%óķ Ó"O5ѐī`=q^AŖ/ŁõXR=:õ¬ŚLnTČCļķYŪ±1‰4ŗƒŚ)ˆĀńĀX‚qÖ²ež;½jÓģ/¾£zŽrՄ—RĻnš}Œ×S\[¤sJ¬q.wqŒ~ĪĻwkį7_Öuż&šBīėmU=3ÓŠ =›*'‹iZē‡X$ŅōĮ%øåķäē?Zģžx§SšĒŠ_Ä]‰ˆ3™O–ēOĒ„?fnGŌuŻGZ»½Õ/Fŗ$üŹaŸóÅxˆ5 ĶIēū[”u;cČĮĒ”¬Śŗ&”s AnNõd•ß’iŻ\Ļke!ūŪAAŽ‚ŪĮŗsĢśååŁŽqĄ‡œt­Ł­d°KYå’D € įkXXÕE#ĪuæŪų¹^;ųTBᘠ•wØķƒÖ¶tŻ:Ū@D²°“·‘Ld(Ī~”J]ĢÆ²ķŌ7<^]¶Ż¬Ųõ«öāŁb‰%O²PgśW4„Ń6›ØG L.EŪA B­µ±šō½WĻ*ŪĘ言sDÉńö& 2"\g'#Ø­ļNŽĀŪQ·ŗHœē ēé]4ÄŁēWŽ"µń åõµ€(rƒŽæJóy¼j—„«²(ŃÉü>õ„śI˜Ķe ×K©Ėc+ž+¬Ó“˜ģr·VЌ°;sķYĶtöB}FÕČ!\•Ś9ǵz-§Ä-mõŒ×‹4A† Ęsź+ĄÓāV95'k€¼³Óļf¶ šå±Ły;F²G÷Tē Y„ S¾HV#„»®LzW Ø_Įl¦2¬päŽ\¦Ö‡5ؒŹAn„”Œc”­ WCÕV»·Hå‘Ļ™ Ē±5øŅ9+čnāĆH ĖÜW;lŗĘŖ¢Y#]9G ŽI ī{9g± 88ėŒŠó«%ņõ ą›KĒ õ<ÕĘ7{U¶†XQŃäyTąś\µöžĘŽXķcbW•÷MŹV2t{ ģ¤ĪÉ{ žø®ź;xäS2Ėž§ėXM™«įŪ–“ŌŌÅW„xĶr¾2Õ®¤’?ś1łU9ĻaJžę°‘{Mt(œ6Üėõ¬ÉŁdšX¢Ų!sü5²:`µ3™®XĘT…H#’ÆķWlÜN'(Źy\ŽŌ3Sj[ō(Ņ#¤l~P£ŌSģ×ķL]üĄž Źo””–§¢i°AmyĪøt¦ßkŗI‰m R×`˜ `ī }%ܶ1 d|©AĪEp‘x~yŲG ł1nĮ\töŖRkryXŪķŚIHÕTøĻCX;¦KĘMˆw’‡Ž•\×E„Ņnķ&IoRE¶ź7.ŠŽ7Ś­c†É"IrnM”Ų“I²¹Ó¦øR¬~ī+ni-®ĮŹ‚:­e4Ėägy©yī7Ģē­sėKµCƖ§œńš‹2ēXžB*c#¹éY2EwzŹwFm¼ōŌłYQƒ{ꇱ›Ēū:½¹ó\÷鏭uR|1Öį0Š4ę8V\ēqČØ”’:į„osU>Ž7™ D?v…²ēž?ÉŖzoƒē¼ŌmģĖĆR7—¹³ņÖN²čuG }Ļ¢xwÄö’“Ķ)ō›ŁnlķH;sžŲ>•ß|]Yu½in„ -ą”ČŲź¹mĒłé_Zš>N•;C§Ś%Õ­²KfB`;{ŒŌŚĶ„ö­<0[Fó:ģ«ĪGóķQ3µé“Z\ŻYųgX“²XĻĶŒ€e½ ėZ‹Ÿg­M§ZĶŗą2’”¹Ų~”ķQxkO¶{&ŌäŽå'=õSMƒCšżž«um„ŪZYHøÜ±¦÷&Ÿ(®nxƒįæ‚ąšģš¶½³Ķ;yR"®Š1ćžMx·ĆżKÕük&›g:ˆüĘ ' Čü?Z؉3ķÆ‡·‡<qxšÖ›ī“~įć×,xõÆ}ńOĝÅPĮ«›xāŇ0JžfgĻĻ’Ž:|RųŠöėMæ²ŗ.¢OŻ}Ō$tĒōÆŠ¼Ū;V[©äY”mɳŽņ?Qs¶Œ¬}ńĻĀpMšļĄ^/“iīœDŻoéžT?³ÅĶäM¤j~Uœ++äÉ;“97ń¢—>—³>¤ńŚ"ņ …A•€ÜIņÅ֕Owu4¬ö[¾pƞżUŃĮ©®§·|(šē†/“k˜ †#Ģ#TČ’sÅy·ķ]š÷į׆<Š%fOZ^ˆåd:ž€¼TUmlgĢ|Į¦čмq«Ł¶tńGŽA÷Ę|™ā-6Ķõ™£Ēøńč=hNŪó FÕVwv•ŪĮūĀ¾Ężœ¾$ZéwV潆ŹŅIó…•Õh&Š)f3|‘NŒ”ļŠŠN±Ÿ5a§±®zŃŗ°éłŸ5|nš•īŸÆ[x»J®®†ėĢĖ:d~uåŽ&ńŪÜ8²¾_+j nĒŌW—Z—CÓ£SC3ą‰“ĶĒ0čZŹC‡õGxf?tDHįż885ģ<9>-ʝ„]Ę÷6² ć–˜IŽFĆėÓń­UÓMj¢R?±/ų%ķj?jŁŽ?ėó½×Äo E •ß›‚ņ NÉłG>āæGt+铝ZŚęĆ p'Sص±Ļ'­‘õż›ZkšxœÅęĄČėź+ń[ö’żŒt?ŒŽųš\ x“ĶvĘ]CòNżRŒÜ®¼ÆCœsĮśVVW±‘ü/ųėĀʍ ¶ń¼6~-ŅÆn4ĶR`ĄI÷ג¹Ļ½yČ ĢÅĖxąWDeŲēŖ»ēÓbø¼¬4ž«Žŗ³’ĻĢł8>«”’ĢŠū;G”ŖšĖ'˜7·^0åM+‚‹»‘C&īG_zµjŁd‰ bNµTem  ś–]ŒŹNęĪ8õ«ŗŒ×‰”ÜĻc9µŌį)5¤Ŗ~d#9-p?ŠÆžóūsi¶/ģ‡ążSSŌžćāׄa‹Eń,.ūär !n§płóź_=+õ]n­ĘĒ”ū×=X—Źx޳kmlŠźįŗƒ) =$ŒšAü2+ó·āG€“Ćŗ¦¹¢ļ’}2īVŌ4‰ņ”IÜŃpwqžȖ¦r‰ų·’ż›“’ˆ õ?Ł[Å£(‘dhš|›•’dt݌ž&æ˜ym/mÅ柪DšźVҘf‰Ē*EtŅ9¦Š;üĪNG=ie–ŃY—žøā»)³’KR»B’•¬y9łzŅĆl YźkRJē{ņgoN:‰głœ`üøĄÄh6†Å«yJ…šFµ\‚UxßpŽW#”3H½I5hŪy?įVü“ydÖā[}NŽUŗ“‘fC•ēź+)6vSgöÆ’ˆż“t_Œßō’ėóǼŖļsž~‹ˆ¦SŌ :Ęæ oų‚;ż*ŁÆÕą»ˆ›Køł0ć?ēҰŖŽ”Ķė+KČhbc$9ŹqY¾6š?…>5ü;ńÆĀļŪ ŸųšĀ[ —ź¤eĄažg”ä óŖŅē‹ƒė”œ¢›?ķæū1ųŪöLų’ńį׉“ūǶ°ŗx¢øņ|“»‡9Že÷.+ćIe –qŒņ;S£Sš _քŲßšö¬ńJČˆ©ĄĻń÷ &ļIŠy©Y­Öō*T>ŅxõśÓšźmM²œV›”Ź»!S’„Jū'ƶz‡¼!š’Z]BĀįÆā+øŽÜ•É£ć‚>‡µ‰ésē Ļ Ig4¦"Ū8ćéX0ŪH“¬ÆómbÕE4ģe»7µ[RūN¹‚8ćh cc‘÷}ń\kųJöņĀFĒÉó{V±eølt©™£ŁÕNX÷®“PŃ¢¹µS$ŽŽ£sTA‡ü&ŗÅż¦• Ų½…PĒļs]?‰|?¬ųKÄŗ~…”W‘¼G¹¾AŒp=łØtĮy–mōyµ©<¹Ģy$’xŖóh6öÖwq]Ž+šNĒyč+;s ¤éV2ŪĶ7œ‘ŹŒ¾PĻ-Ķkkļp Ó-ģ#Y®%”BG÷sü_֑ĢõįšōÜXéŃ\ŽÆŚ‚ ėļ\uݜ¾¼dŌ¢2éąĢ§=ź¹JŠHåō’ZEw6!š;q‘óÕ.£āōŗ ‘·—GĖ×ń¤QĪŲ¢ČdbŎB×dŚBjŖŌōĖŻZK¤x0LC€ ¬ųµ`@²Ē#¾p6Œ@ų·čŗ ŗ·+˜!\8éł×†ų·Ē7Ž Ó.l#t¶± ”žųzœw¦˜ʑįĖ© ŽG’h¤Ī@+Õź¼1¦˜|Ez’~ćß)éėEĶ#Ö> hö–ÖV1‰ćū'“˜01ødׁßZÅ('U|ÉąŅ„©±.#ū<®¦BĶžÕ›v±$«e#ł,­Œö"‚ gV±µy¢UÜNc†՛lZūĪĆ®ģ÷ fÓ§¹įfvSčjĶę‡qį2ŅMŃłsœ(œ“A¼Mß •ŽIRčµ»( ’н Śkˆd`¢K|~ AFF®Ö,RŁŅØ!ŠŽ+•µ¾ņ®£ŗø ī`±Œøåw½W)“v>ЇsBҾ’)Ō®}rÆ³Šµ_ j­ęMöˆF‘ ^' žR¬aE”iŠÜß^] ÷RÜ üŻōčö2\i–’źZHaņü=+E{T^"Ö/īR¶ö¬Ī2[°Ļ5»}ā«Ū@4ėy|Ų[‡łųĪ;S”PXÆ£k:•„Ȕ˜¢· ī8Į8©¼EāÉ58&ŒBfŚ„öć V2ŲŚ1±ęF÷³Fuź ,ńKk”“ ; …>ęša¢čz‡‰'ńāˆrOéM›Ćŗæ‡Æ¤Öū#Ž8ǽhmŹzn‚¶R@gšH·}ՌžsUõ¤–12*Lw©’Š–¬F·p\Ų­¼,`½ C8#č+CĆw—6öO£DŅĶpŁĢ¬Ÿ{ń‰„4uśV—§Ä—<J]6ėœלx¦}>qiiČeé“PoŠ»įi[N]öģŽ»»ÖÕķ÷ž’édfĪÜö„&hpW6z„Ó²$rL¼€U/2]™Ē>vņy²hÖÕ½XuKF…˜.ŃĆƒ\޵ć|1į cKĆu}wB£ųÕ@<ę³šŠź„ ŸŸšˆ,t=*f1Åj‘Ā}«¾š «éמ3–ĖĻŗæDKIŲpbĒ,=śõåāŖXżēĄYŸŠ…HsS§yĖžŻųņw»Ó­£@eV.ŹŁäVåŅÜ^!R?­|ķyÜ’Upōyb‘ß[[Cä±1¦ą{kĪ„Šõ)µ‹ƒ§ĄoįĘņ#²z渜u±č*z:ˆmŗ4i-Æ¢aęE:•)Ļp{WkšĪ«š×āzž–ƒ8}’%ä.æ6ÓÓ< ŽĪE6ō?^>|Tš‡ÄŁOā>± Ż‰ļRĢĒ5¢°i-АHuĮęæ*<{į—æK=~­RöXW;|Üt¢cĖ©ŁI2–Ō„øAčy®–Ņ9±³ifńé\§·ŌlŽK˺߇|Uįˆ¶Ķs=‰(@I##ƒŠū'ąWÄķKĮ~0²ń>£§LžŌīŠ\¼+Ÿ²>Ī…}?śōłšI0xÉtż+ā—Ä;ŻBųfóU’īÉBć`f$ńŪ'šŻ‚üK÷?żznge*m ©kßؚdšŒB)„$"#`īcĘ1ų׍x—U½Ńõ«×lĢV÷%uĻŻŒ‘ĻäEHėIlĪļćGĀĶOįĆčž'ŅEĘ©ą­J$š+€™ū>åĒÖ±ü+«Į,qåĆeqŸ_zŽMOī“4¼oįćāM&6Ó¾Ģu›pL /#ŖƒļĶ|?©]ÜźWWzv®ĘŅśŻĢn &lö5×CCę3l4¦ł¢Üų'ÅŻvé4_…לR:²GbĶ&Ń*68Źætæ„ŗwķńkQųińĮz…¦™eįfÓaÖl§Ą†^§v; č>¾½£? ń'<žUR?MÆ; žŃ’~~Ę?¢ųkš“^2|UŌ&s-č4±d¶żÄr yéĻjü2Õ-u{±q&³q%ę¢̲’|’NZęÄşoįxœĢźĘĪ£ÓŃĮŗłdR\ĄRKulFłp{^­m«żš8å– ŠŹvƒžÅyŅÜż¢ Ųź4‰4 Ė]Z=Y]–KiR%žZ;IöĪ+ēß ü@×¾]Ļoyg$Ś)“mÜtŹA!Y?]tµ<|Ņ„§Żu–óĘ’šO‡ż”““o„hŗ-ÓÉ";‘,ц Č=‰éӃ^iį‰_žĮ&¢eĖcļ‘É(É·qö®śĪYtõĆ:ylGjŠtśųššh}š³Ä–ŗTŚ…“ŞŽńT|§ī0Ē?„{}öŸ©gqk!żŌˆF ļ„8ŽźHüūń灵{mN³ `¹'É_)•²§pčr~öx/ć/ĮŪæök“öSų•ā[=3āž©¢ ?÷Ѳ_B Åso!įœ2#OĢ;ÖŃŠł/rģN?)ĆfńšsU/ÖŃŽŽ–Rk²~Gį_ĒŁā§ģń®xgBųŃiie⠁*é:Ż™2ZßŖ <˜Ą‚ӃĻA^‚ŗÖ„iŚ&«]ŚÅ4ˆŖĄ¶w·=Hżß„xלą)fFłgŃīšvił¦šóŻhlj=®”„ȖPĄĖĮƟ¼[įŠ“ĶžŽ!.„HĒOÖ® śˆVw?{æ`OŚnĻ⯌<šūO“> »Ņ¼2ÖŚ†—•1ßÉ?~„c'ƾµ|—’Z’œżš5%a Ä^3–%|r7B¼ć“Tk‘Ÿē¾{ĆK,ńk—ü¾ØŖ_üRŸł[ä3öŽ× „w…żkÕm&·pŚĄb¾kĻõG nTĶO1 _ŽG©ØhŽbvłŒ8ć½pž»Ž…ƒ·Hą>žõåž2µx‹ĄžƒP]B÷Tu%Œå“ 2cƵwaŃšœMV~»žĶ:Śéę‰ypŅ_%ś6HĘŠČżE~»ü.š—‰¼9Øėī†F^ 8łY»’#^½)h;x‹–Õu4ž+|>šļćz%‡‰ōńe6œÅ’wĘ’Ä~"¼ž„>xhčš]––Ö¶Ą¤²–ŁŒsĻaZó3ņ<3ˆŸ²‡s¾&éZa†ęļHŌ,µM>źŲODrpÉÜsR’Į>­/n’m…o„HUmtķfk¾øņM¾Ü«qS+¶~›šb$øOŖ«IQ©”$|5’Óš,żæ|+ā6hŃüCį…øP`™"|޹’"¾ šżĢ¾Råp=+»>ßčՋ•~ĄĪ[Øøü£)E~GO>Ö@ÅĻ„aÜ2*” ŽkĪÖēō=(čUx˱ īā·,ŸģŃŖŖ1'ŠŃ2ÜŠŅāģ)Z—›Ó­|³“&[²a`ĆåĶcRF|Œšļˆ­g{ƧŁåX#ž<ĮŒnžUęŗ$sųvęe½š£yAO,tĻA×­sb{}¶©-ĆĀd å°ć#„tˆŹė‚G„5v\¶8?Š:§­xģh±łŚŻ•ĢwÄ£™T˜~J?:Ńš}†£­xV ¶ņė7ŗ˜½œióG!ģ}'łWM:lł\ńʔJŽČżĖ’‚I|?OZüCń—ķ9āo Cą i}Ō‚7™|ēĻŽU ޤūsłńC[žŌß>(ŚDßŲzž«uØZ+  °TV»TW\éŚ »?,į æŃ¬ŹåuĆĄĄōĆ=«~ĖQŠž8ĢL²ĄćæqYU…ŠL嵟 /‡ķ/µ0™¢’bļo»%N:®{V~•«‰“;‚Ć<Ʊ®IĒ©HčĢčŹ6=ż+ϼW„E©ö…g²™wOĢ­Žõ“Fń9ö‰×!†SÅEöėē”ĘŽēŸjÅ£Ŗ ^lūŠ™„}Ük3FŅeŠoÜZ»=Ä„Īęū®}M]4Ej§ØĻÓ®…’H^žķłø,£oŅŗiž*ģ³öWū,ņ…0§wŅøß ÆŁķŒ3;1óXīöÜp?,V‡”éŖ:ĢčgŽ<¢ÆŹ³¹Ė®b}h¹¬iž[ā(ļ4Æi3é÷- ¼ ¤±·×®GÓś×¢iĆl¶į|zu­ØĖRœz žŚ7WÖ¾3ŃōūkžŅÆķOŪģloe† ņŚ&N×8ĒQZ汜wÉā/ÜiĘŽ“ŅQbæÖH€å˜~µõŁl›ŠGł«ō•øŖæ¤?ō„~‹čŽ “悎įķßaĆō"»ˆüKfņ%¼p›pAū¤ół×ŠÓCł²¾åYõˆ2RI ĘxśÖꆮe“’ڶõäkn[jy³:8慕V]ØÄž5Äk“w²DN0pøčj”ĢeÓļ\“KˆĪ9ō?JÜI·#łk“ŸĻHēh½„Dš‰e–}’/$ōėĶE;Ģ“<ŹyśP`dźÉÖg HģkSĆ7‘Ų¼ļ±$8 3ƒ[”ÜŪÖõ'ÕKź÷0ŚĒpTDBFĄ3ÅyUõó›ć$6M<”¹*>čõ¦C} ļc}-£_ø0ĄŁĒ=HķV4=*÷Ph€‘q’}ĶL£s¢ŗ]{¾v«§“ķ;6Ż„ąčkŅ,|KŚLß:Ås"ŻśšžCžIģsŚĘ¢Ļ2Zߤź8¦é:”¾‚hµ$K¤ß€ĒūøļP`ļŌģ °³–ĪcĀBIlzvLź0C§ÉnŻ'­W6–”×ßg„õ ™éČ|Č#?ć^cōÖ÷— ÄQ8v\>“IÜӜԶnŅ9„rņœdõÅH­ œ„]‚·_„A›w+ß\Gt ܧjēb³SraR”›œž(2›č\‘E*•%pKzߙ¾Óc÷€ćރ3 XG*¼ŅI€8Į©ō¤“ˆB€¹3šĢī!™‚‰“QZvNÄ*±é@,71#¢2å‡,GJČÖ.–I,¾ĢzšhĢ—A‚ėXP[›Ź0cķłWAy Śk>U…äŠ[C’wøĘß©ü(v)hÖæl²°Ō­µ‹A+,L€|¤q·ó”Öa¶·†š\µ¬*±Čąsō÷ nGĶŚä°Ī¾\QŖņJ“ŠV|BĶmžŚÉę2ƒœ˜ŠIŻY’ÕbNĒȬ«ż& Ēē[ĪOšx¬s°¢‚tNĒ^Z#ÜÜL„»øÉĄ&“ōk™ō…i'“vš“=ķ¤É€²˜ø}GĆ)ÆFĀh!’%ł’x8čhĖ#Š¾ŖÖ5ŽX™[qĻŹ÷}+ŠļļŲĄó^Hņ61–9Ī;ŠL™—aꯔr­c•\rV›Æ_ZxuVYÕyÉ-A‰ÕxSÄ'PŃć¾EÆ*GFõé.˜^µŲŗr…Hņs€OÆÖ€:Ķ#ÄwVÖ{!Cv£źEs7^d·o/‘·y' t4'ń&£ØYų†6ŗ‘…“DŠ1Č÷śV¤å…Õ“{ĆSsČ4Y#—¼O.ķ.c.źz ®×Ś„SŸ³B ŸŽdąķ@¤Æ”µö›]„ģÅŅ\ŒnĮą×B¾+¶h慭ä…Ó÷nžō I¾ š¶‘ā˜ą¾VŠŽź!Ä»yĘ;ā¾vÕō‰tHĒg—™a‰p¼ūŠ ga³¦œ^HĘćßęø]bÜYŚM¬ŪÉ4ׁ¾xąmĮ¬d†µ9? ųŚkTŸOø¶WłżŅ+Œ>1]Ö³ž£šŖÆ‡Ž¤¤­±’Ć$¼Ÿ½ø*7`p¦¹mb¬¢>PrŒĄ:­<„ÜŠš//$mOWKé!ˆ”’Y!;Ąģ=Īk£—E°³ »š+5J® ŽĆw±Ÿ>§7Æ\Ža“oYŻk^]ŗ»*Ē’8ä~×/£ųsÄ·Žń&µw§Ķ ź˶ŽĘéē ­.kO5ųs«Ūk¼Ķv°¹ >Gʬ:öė^ł/Šo4«¢šŅO3. › QDŽخ]KWįXĻ_Ö­ÉRģą挵­īt»k1s˜5v#do¼ON+ä<š’þ&ńÄļKV±·Y ‘e!vØźy«ž𵭌ž|‘“p0 Į>“ŃźÖzģz%¼Š`ń·=ėXK/é×Weg“•°ÉķLW<¢óĄśfƒO!mŲš¤’Wؚ—E“m“Ń­ĆyŹ¶~ļ=)ĪΧNDt•d»O0’Ozņ’E{5Ä¢Ń#ņ£ē;I,Mg%©%/ Į|doķ †źÆOŗŌ/ō{+·Ó,!½—rįŹņ|Ur!£[E×dÖŹE}‚V rp5Äméōł¬,®ąĀ±ł—ćŌłQ¹ą>ÖLJ®ęÓ.gžKŻŽfX–ڵļl··6V÷¶,«+UŗsPį©’“ø6²ŲŽĻÜ©Én™=냵“ŗæŗ¹HÆMĢ Y‡8ĄōĶgcSŃō/i~*ŃļcĖq–Cd*cÓÖŖiśF“b–z‡‡uk¤ņĖG<*8äõpH5vž×x§Č•rQO^QZŚP„@-ˆįd#÷x­lC‘Ģ[i3X«I•%™‡˜7WØNRźā9Łˆ9š:1)ómķäŲ¼»qŠ‚oĮ{¬8FūC;&ĮéA=l{Nµ¢ šōosuVņÄÆēǘ¬9Ås:„ģŅq4Kµ°_īąšMsĶŲčŃHaÓ§t‘į•#m»£9QųÖ~©Æ" hH—+еĪU8ŸĘbÄNÓŪ‡žīćŅø”­„ūĻē!™Tć…;J6:ķ>KŲmV[tR£±ÉÆeš¶§+ĘT·–Ō ˜$šŃL“/_ÓķoČ6j#UĪ]ŗæ>•ē+6–׋3J„yƒ9+Š®dDŗ¤‘ĄöčŠl'-‘’·„yŌ³Ū®£<ÅC°'ئ„Ō,e’m)ć’% OļOŌµ˜ģš ­­¤cŌasĀ†Å(܂[č„āUXœüŪ@ĄĻŅ„“»I—+·®sҳ›3äfµœR4›!c0럻Vnt“‚ņFGN:ūŌ'cjqčŚ¢Ū¼Œa¶ą÷śSSHæzŠŅ÷éŅ“ŒūŠZż†Ņ(|ļ>7›v ŠzÓ'Š6L[¬Hę=jĘqš­¤ńįų]§8^Ę““i74~ihŹtu?xšq·P±nńµY^įåŚ2?½\õ­ó^1U‘‘[³tĶ&4ĻNŅgidXnD *Ž@EiɦOĀŖĮģžsų×,ö&KC‚Õāˆ~č1Ż»‘žõĶ›?)Ć*‚ąēń©‹¶†65„¾žńķwą!``{SŚ$€"€œžB­³X"ĀŻ9ņā÷1ƒŽ°f.‡M§Z•- g;©O ³Ņą°Ī+!£7[–Ū ƒŸJjHēkc½ÄR°HÉž.€×½|9šĶ½ōNšŽ›(xä8.>ņö"¹k×åZ–•ō>Š`÷žBi6ŃÄ +Ę zf½­< iuamŖM©Y݉˜Č¶čø1¶qÓēü+Ŗ!½ģF•ń‡ˆtĶęćHÓō˜&ŌAh„W÷ĶyŽ…{b·+"}¶2^ń“ßłÕE»\%“>%ˆĒēģģ`¹’xi¦1ńŽAƐÅ:^æqysäÙڛyĻ”õ÷qæSįĶ;xõY­]tŪye2ķD=Fy<÷Ęiš­Śi3Ķ-ĆEtŠw)į…3X3šO‰®u[Ųµt†ø÷+ģŹõéó¼Q«K¬k÷ gmsa©Ķ ):§Ž ’/jØīick^ÕŠ’‚p~Ņŗ—ģ¹ūIh^"µžī?_²Į®Cü“+¶Ü•é•8?@kū[¾¹ŅµK w@»KūŪhļ-Ü8qœqZŹ:]•(ź{GĀ’J®—w e •ō5™ńߥ×^0š‹ŽhhÄŚTæŚVn>ń)÷—ß##čMsĪ:ÜÉ£ų°’‚Ā~Ļz&ń;Āæ“OĆķĖFš—‹D–zż¼(|Ū}N<’īƒŽq‚q“‚OZü*dū<Ó ™˜3±ÉM£ģ* ­”(wC±ŠóĒ5vSµŗ½ČœœuÓŽInr·–Ū7¾Ńø6~‚²š3!i?‹9śUÅŲĶ»ÄXH ‹µ Ę}kJܬ»„H"`HÜ{š¹¢£ø[H‹3Ē!ÜćŒę·līe‚Uhʐ˜nFjyt¹×Šż!’‚NžŪ·Ÿ±ķkįM_Q¾ø²ųćßģßF~dŽg;"•£ģ”$s‚G|Wś1M=–„¢ŁŻčӭŜŠ%՛«d<,29ļÜ~ŖŅ“üģlŁĄjß0Ž„¤œ0ĒJš‹:æ‡/4Čģ>Ń©ŚKöŪē…;—>„_Zņźhō$üéń_‡l5+ WC»ŽĀėJÖĒŁÜNś,Ć8 ōRõÆä³öęųsš›ā6”ā -*k]īy!ŗ Km—qł„]9˜J=„ZŻĒ—ķR>ńģ)²Eåį£`źS^6qN=DgŒ9u=xĘ*„Īūyv9P§ 0z[’@ŹČź T9¦“·,JV,äg©4Cbkx£“Ä£žųļL“’G™ŒäĢ›ŗŌ™cåwWpDgÓµ>Ņ@’ČŻG.77„·?a?ŚB÷ö_ż¢¼=ÆŽźWVŸ üA$z~¼Ø,/¼ysc§ž‚_~(i~9Ń“ĻŚź67šu󄾦ń}ŲdŚ rćØ0~ Ö3Īƒź[KļµC$$“ڶĻ÷Ö©YŚ]Ēā)tĀłŅ/ ó!’¦RÆQųä~µĒ4hž‡āü›ö1‡ćÆĄ?ć׆“}=Ž:ŸÖ—UŠ;™'‡LŽÖėž¬ćØŖc9Hę4é5?XÓ/ģ&H%ŠQø°9<ćņÆjń&„e©ĖiØ[Éę\:ęE#ī·|:£bƟh‘Z}”YÜćbõ5ćž2¶‘ī$ŠY?vć1IĘę‰Ü©įł o3pRnŸ{։į­3Vµ]RIķ‹Ūøt\a‡§ęjyR*ĒI>³-Ą‚ŚČ4³nŁ€NOҼ?Äzö£«Ey§jIČŪT  ’ Ž`<į ×G»ÕŸČęćaććūU?U†m!ēŠއ'qśJĘŖGØhŚ–v·ė$€‘ø®"»[‹Ė(,÷Į"*pĢ£;Ļ©¤UČ.®4­f{{›R ˆWkĪ枦øßŠö·ŗžˆ‡NyįšŻ<É I˜8i <—hšÜNŽFåÜe?z¾Ż[RÓĖŻ\3H«Žæ{ĆJ^,nm3ž*¬·%'Œ³(␬ ½Ó±• J§Šźģō±½."œgÆQ@ģ+y2—ĖS”ōÆFÓcŠ£Ó„ó!åf ¼žTw Ū^“dš>Æ>i<ĆģŪŌF2ĶŪļ_4č:ŗÉ-µ¼ö®„) _NŌģ¼ßź°źBŃA2¤aK"ćp½sŚ©e©ź’i‘;½’QĒQHÕO¹‹ć­[U³K(ŹOq Éåzģ½y|ņIq*FīīŁÉy Ķ³Ų¦š“Icm©ZŹłĀ‚¬y< ×!ā;K–ńČ[„8?1śP9sŖŽjI¤i¾\0ŁAŅW;™‰ļłšŲÖ4KŸißkw*² Ź@õ Ń@‡ĆŠÜĻko"<²ē‚}šndŃź²FńĀ”Ōc<Š <÷ʍ‘X¶žRšP@ćLšŠźó)·Ÿ>Aį[± ĻSŅÅŹ»E)#’§8Æ<Öō»tD‘`gPpæ­ŠŲ’ -šÄŽ\[’Ąp3ŒVeŽˆ¾s·–ʧęaņuŸkZ_†å]ó]\y× 2Dp©ÉÉü†}ėļ!¢Ķ¦iz-ŗ¬6öņ£‰ĮTĒNŁĘq_;ŸCūÓč™ĆńŽš5¬¤©®ė•sKäł£÷‡§ż²_-ĄXŗõ­Y|+|n‘ōūYÕLŠØ¹Ü'¦kʓw?“©j¬mi:õž‡wƒ4pȬ§³—P•pŽńF½įļ ė¾)šõ­¦§ā+Wv¹·Ž <[‰dvČ©ŠW;c±ź’“‰¾üLų]įŠŽTŠž+i²[GwĖk”l Ąį€9Ć{{ŠóGƒAń÷„mōmv9VõŖN‡˜¾œgƒ]^č„GSß’bi±Æž$jŗ‡ēųąųnm2[FŲ<«ŁWe|§Œ~‡ēĖŁįĮ`ź‘€£9ŪÉćšąTŌ”\m³”ćą²Z”±õ±Nw…HĮ%ŁĒžīŽiÆ»Š TļĒ&¶UV2“Ø»šįgŌŅŽ–d²bé J÷ąÓ¾…RŹŅi¢“2 †ĄĻŅ„‘—®iüΑ̐ĪGF@4šwu“µn®Šüž_ž‚²~c’²9Ł]i[ŪŽA§óöƖ¼;«ųĻĮڟ‡µķś} ÄŚEŅŻŁČ¤ƒŠsż(ēgčy6_F¦Ę[³śŒż™¾<|#’‚Ž| ÕžübšĪ—?ެķ={J“#jŽŚ>2‡8är­Įąāæ)æjų'×ÅŁÄkōS^üOų2›}^&óCBp©wēo #Öµµõ?ü:ā?õ/‹qcš„®é—v‡Øłŗ®›1" ØĘT8 }kÖ&¼’ā=5JI4±ĘUddÉ '§µrÕ­dρā~ĄęÖ_MZ¶z5Ö:»>öz®×}ĻĶ]ź&»ŠRĪžĄ×³é²4Ø1 ąóÖ¾z¼é¶­ćcpŲĪČå”t9ļéZVö6šØ‘Neź}"~鱦i÷ś½ŌvP¬÷³7•ę<æZłĻāµĪÆē‚u94æųGµĶF³øln%„»‹±÷•zxŸĘrŒy-ßōgźŸĀ=DŚK£k—“Ū]XźPGxp79ūŁüs_²ŚOķ įėĆ„žĀ >KhÅÄd Ė>0Łü«Ō£łļrÉf œ"ō[OÅOˆZÓ¬ķļ­®//™60:üƘ:ėi§{ŲŽi 2sø<ĪŗŌQóœÓöœ»^e–ŅÅRt«+řžń’еū½^’Ē>"æń> ųęIXˆ@ćµgŌ턾ŽD*ģ8Ś{ J»źa…Ė(įā©Ņ’;?†§‰tŠ’  ŃīaKsÄ6:-Ä2«a<Ŗ››éǵ}Ć’Lż„õæŁĘZgŝ#Ä6šļĆ’”°xŒ"9“ūōŒ’¼pČą’QČ5ŗ‹qr]Ļų“ÄY?eŁTāß×=¤oŁÅEƾöņ?¾ß\i:ÜśMŚų‡PžīMrÉģą’ée“•N#ž5ŖG“ŠÅ(žYūBÅį¦qŖKeā»M±M$MˆęEõé_+iVsźI,ņļMŁR£°5„„cāgŠvwŪ`…÷6ϰ«ĒUĪŲ€ł{“ҳS&¦Øœj.7'½rŃXčÖŚĄŌtŲLw Ūš¤®Ö·UZGR…Ļ£[ö“ų”dšxŚvqŠc Č9ÉĻZłĘh7²™·Ģąä3ņIõ§*÷f~ĀÅmBŁMøy-įt ‡p+Ó¾é ń'Įŗß‹“›…Oh‰w ¼q€×1”ÜP‘ŒćZØźK•“?^|©xöŸżŸįī‘¢xš Ū ,nmš$žUs܏Ąż+łūšTWš=÷ˆ|3q!ݦźW6JÕBߦ)Uhz­ōvļ¦Ż™ "¦į\YŽ@³Ąń±cŠ¢ø*G[pzo£F¹3DŲčOZāżøaŌ-üoįvhc–+‹%øŻ‘÷(,戮7önšÅĶoÅV¾=ųm{an ¦£#¶|Ūvį€^‡©Æ³Źßŗ®›_IØ„ÄõxCņ?Vōżl4ĖalņÉ>ĢŹHą7µDg™\ü›˜zkčbģ2TGY§é&ūOyŲĪ%”^‚¶ōxå±'{a8Ę;PåsŽPč^»æ[LJģw;¦ÜATē©˜/n 7­*ŗœć¦ź“ FĀ\h²Ē<†bž™č+VŹČGņį‰ą®~ķkOcš¦‡@š°Ķķ“ģ™ć=é„.ĀF pr†¬ę25m"h€Uå<ąqŸj~Ÿ§ ŒjGZ¤ģ:œ¾Lm 8=»U=śÉEĘamģ9oQļV¦L„cž—Rm>āńVīwĻE>Õé~hnIKݵGÕ\ÄŅÕ5[GŽ.Q]ŠeQ‡ \¶§:Åŵ҃j!äF€Mg'ŲŹ{ŒšŚĪTe2”Œw5BŌĶnöĖd¦ēēE Ń}MAŒ¢ljś»x}•&%¼Ŗޤj̽ŗ‹ Ż”’Ē#<ši£r±¼–ŽÜ>~“ś‚Gi$ Ūv”=MhĀÓŌ,yĀ«ū¾•¬i³Źļsę/Łś0īiĶō0PX" ¬äšģ*ģP ĢC.9Ęh24’y†1ĀūO·Z–ŪĶnõ,µMv‘łl 8¬gŌą°Aø„bsøŠb[käiPØŚrsާ¶³kĻ1m.ģēśP‹v17ŁęĪģuīkBīŹ4DgČa÷ó@ķŻ¬T«}%É\O?v©kYk¶Ņ6Ÿ4#güØĘm„Ҽ.ģm 6Ļ#=Ēļu$WØxÆQÕīä2°“Ķ8 $P uwØĆ«Łŗ {«<‘*¾GÓ{Sæ“ū2É}› Ū@éJ#­ųā?XŌ[KŻ5“}Pŗą)Ē'Šī|D4{2īĀę@ׂ’G ŹćÜPgŹīxļ‘ˆ”īąžÕ“ŖÅ8ŪoŻ”g± »÷ +;­*%y¦y”ŒŒ÷õŽhž#ӒŚH$··{¦Ź3īGQĻZ 8›‘Śęt@ĪĒ:VģzÅ¦u+u—=~ļ¶( 4¶ŠĀdŖĪGŹč+“Ō¼c«Į;k­=²8!zĄŠdާ1mf-„–°ƒoąs×ҹ«­3V·—ķP_–MĒz2ē>˜ō W;k}JėH³ūuŻ ’Ė`!ĄźGQY­ńSKŌŁ”²ŃŽĻŲs¹ų ŒLŻbŁüC§łĖCnBå~é>õåé¤\hįc6ņLźB±Aœ’zŠ6“; «Oōą@Pœ…ē>Õ$lHć(²p*9 Ä½ ³=ŗm‹<ƒÉ®[Äh¦x­!Ša3–`P3½šüÖś~›4—€Č?¹Ž_ŪŚ¼Ł¬ĪÆ{s4֟dˆ¾čńÜŲķ@Œßé—vvsI¾  ‚}ėÄļ.µ ­(ĒØŪ {ÖĪåVą Ę[šÓsAz%*‡8!jś.8&“œ­ĶĀĖ„€= Eõ°å.ÄńŽĻ”xŲÄĄ®Hį³] ńM½ĢRܬ[~`CŒ7ÅQÉ%©£„xv=+G™cøÕŅ™Į8öÆ ń÷ÉshŃ[¶S'#¢ūšØĘįÜņØõæčś¢jŗn£,²“r…8Ü w–ßō›½*$Ōc?ŚĀP²:¾U— ŹśÕņ£¦0ŠŌæÓ4OMcce0ĆB¹ąõĻĢų°Ļąż'ŅŹ#ķ{œgžµ‘ŖG‚Ļ©IŖŻyņÉ#LģKg½{§ˆ“7Ā}¬–r½ś0Ōgåģ1Pń¤–öSZŪĆ G;+2·>ŸTREu˜„įĒ"ø6ūMTżū±—‚2FTs±?#µ“J·¾“f‚V“|‚­žkUÕ œiĘ4•$!]ögåž•#:HüDYŻępŚ}k!MŤSŚ<Ģ&Ż· č)¹Å#2 o$ҹQŪŪŁźŗUå«GtFļg'œĄUĘE6q©a§ėņ^Kk¦Ū[Ü;_ą+”Ó/LÓ®Öįn/.S!#茮ę71oķgŌĶ bvN‡·µYšg„ąšyāžč[…Ō¹Ęćč+7r”»‘k±Żų*śīM āā[‹˜ĀK±š;j֟«ÉŖhĄź6IĘĀ&–<Œśdt¦’-Éń¹ŠĪĆżĖq`”Pą&­hw7N¦IK¬ą †č=©sjsŹf½“®nKß©.p€šŽõćž2ŌŚ[ÉeŠH­]NÕP8ć֚–¦|ĢæąĻÜ3Ķa޲K{`Ņ\ųNśm]'²‘ƒ“ø¹ē5”QŽēG­xOĒ·ö‘|¾j©HcŸ¢cŅÆčŗwŠģ¢kE$*хČr ‡G ¬f•¬vS‹;Ø"Cj¶“źzc©®{]Ó¦Ņ-c7I±dČ\œĮĄÖKCÉõ“Z¼q€ĢF7䭙m`Ń&ŸOƵW.–1’Šė4ƽ„‹3³%Ŗdßü5ģv&ƒPŽ4±ĻĢ ązĪKSHÆļZKōi ‰GŹĒ?ZįŹŗøŗR\’ücq©›%ŌqŠ«–cŒ€W3< ńO*ļI2N ĪE`[G} ¦Wå·HÆF¶³·šßFĮ$z ¦ĄČŌ4Ł„vŁ­»Ā @[hT‡’$9Į<äŠŲž·†+„yg=Ԝqō®¶ņ{',š¹m¼G©4¦bŽi±ŽBóC#$ø$)Yks{fßĘÓ×ėA¼ec)œO#-~cƒĒZÖ²’8’c3‘%uķ[EŚ¾³,R³—El2@ŖŠA+!€Č9ĒoZ”s³NīÖś †)ÖéYreŒ}ÓżÓ]U–‡v¶3źŽuĮbz“ŲÖsģ lŹy’gR£Źo»»½^Q¦Ļ1ŲŒ“XLÕūßCŹĖ.Jg'#īŠĪžžöxćecżĶ%ā’¾ę\“ŗlŹyĖ}+LGŹĖŌŅŗÆųZzDŚ­¾–ö+¤X’1"åöžē?Ҽä›gL„cŹž"ųƒĄŚŒ·PéčśĪ”yĶ2”`õćłWwšöZń^ÓĘz毄ųOĀN„.&ē»ˆ ķE=O'šģ„Ōåœõ=~ēÄž0Ń<3u ZßĻ,¾@Œ;ŹWæõĢ]xR[›X¦Ó€²¹|3•\gé_ Ųł.TzN‡©’`[Ūż¶ę…šK ĢÕü3ØųÓ_“Ä+m4ØĆcĒĖ=Y‡LŃĖŌJ6=«Ą|1²;Kė(öGėϦjż÷Ć;M'U‡RÓ `ł>BåŲR*ę&„”Ļ¢HņßiĀ3»~Xd°ėÅ7Ē9Ó5>‘a²+³•0ń5!9#ĪōXõßŚŪź—“Hßc¶/?˜pÓ`=«–šeĢśoˆŸYŌv${,s¦ćžpłō«ęčDµz@x#ćóéž$‹O:eƒéÓe”®6ŪęŸž'^ų—_½N¶h%*Rū³éß4_cORļĮƃšēğĮ¦M®[[CK‹ńšŹć×Ū'ņÆFń‡ĮyžųĻÄVzUÜŗ—†„Ex\ɒ’`äf“‰q• š]†££|F›Hø»xō½]Ä.Ļ“åž Šģüeš³Ä~ńŸāmę9nle/ āfśöȬ۳G«—b-+-nxńOÅ}FųC¬Ko§Ŗ\\[ øó$ݱ‡?/æZų“įŻŽ±¬j×ļˆ}§I!x—fÉ#_OJ֜µg5z|²qg޵+6µŌ“}V|ųjéÖH‘ŽÓnåś}k£ŗń/‚4Š3č¶&KM·nYNF;zlŁĘĻ8ń·Ć=Ē:©ń%Ž£!‰ pĖ–#Wʟ|,ž˜ŚĀ؃h,Žvž•ĻrOŒ|O¢-µĢӁ!ÜäÄõöö®-§’V4#å䓦ŗi±ŸK~Ķ“CÕī<9*q#“ؾgĖ <żZż;²¼ÄP£,{Šƒ€r0GėZIha'¦† Ł10ØgėÄž3|;ƒWŠßÄö‚%æEņī8 ”QĘq×·ė^e] )_Cäm{Ā×6v ,ņ&ĄIŚFC Ö’ĮÅą’_ĮŖ‚ŗ5Ļī!` ü»±õ5*V=jh÷»+Æ ųŻķ-uŽ\.Ą °Ūž˜ąęæ°ų$Æķ¦~Š?³lž½Ö›Zų™į[²]‰ļ&„“Ø<•Ēźµ„īŅ‹k”¢Ż-깅Ѳxķ_Yi 5=ĻPID“2nė×=sĻbOĘ/ų(OģĒ„ų³BńĻ€,¬ģģ-üM —šĉøYź ńŲŚG¹Å _<#¬ųo\×4]cMæÓ5>źk;øfM»^6+‘ģqšq"Qčy¼3ŖÅ]H= _7>d$oŪ»ŒzÖšģpŌF ³H9Es²ģd/üĮ°Ąw«9å£!˜Ē2(;ԃ‘IĶˆ”“Éō­c©I—E¼Ė”˜avŸz±OčćuŠqų՛FEɬn5(3m?Łī"ĖFūr7•ż@ęæ½ßų!GķøæµOģ±Ćųjæ~"i×ęPK«Ræ»ö¾UĘzå9ūŁ$ŸøįóüĶąś³—‘&ņ”C£Œc\~½b÷6ćŒ4Ńōå—øÆ"¤ Ļ ąš“ņ_i±įmmŚęퟳŻ/ßAÜyż{×äŸķĻš#JųÆš—P½·°HõØąxļ}@Ł śćó¦(ŹHžPµ ’BÕ/<=Ŗ[KeØŚ€’Fć“ļXrn.c CŒ×”µ÷cRzƒU§ŲŲw]īŠz](ę Ž2čJ°SłR€žG(*,ag…8=ŖĢC£ŗĄōģŌ\ÕHlw0ełyčzUčąo,æJ\Ż ©­yĄņǵ÷®:ƒƒī\’šF/ŪvŪā?Ƨųeń"ö'ńNƒDńõ³Zœ k £ƒ“€3×µe%¹Õé§į޳g$Z‡‡ļ‹.»¤†ć~ss ²Qž ēÆzōę÷« gĶ c„rTFń ’Ē:>±įßZ[jÕ­„Óµ+IŠ2:0+†Œsߌ_ēq’FżüEū!~Ӟ'š€·øo ]^}«O¹H“%“dŃŌĆī½ė“U(²dś˜Ś¢G+›i£G'†=išékxĘąķS'”®ĖséįoHŗmę›$‹u­Ā@_FśóŠō&ÖĪ&µ»kHČ+µ„ ó0=k 4o«ė#Ä0YųqŚIįcåĀp3ϵ}Iš«IæÓü!mk­Ü:źvÆä¬rg{§8lżüéĀkbjģzTwjŖŃ2 ćīš’&‰8Ūšź„“<ł“ɲ؉Ćbż *iŃźwQHĪĖm‘’§”Oģžžćū4 į)€ēĪj›j—Šļ“÷”õ¢č4hšfÆ£C§B³ˆŻšU£ĻZ[˜ģ·oK£ø«l|Œń½Z—TÖīōꄤÖņ… ōtėkٵ˜,āÓ¢¾¶c”`EĒ5’!žQöų¾ÓróÆ•ĻŽ#F‡y5żĢņ‚“b‘ܵ±Ųxé/“mþ"Óoö­3A*+ciĒĢWž3ÉāKæ0Č;}}č7±ÉŻĆ<3MdøWSü5”a¬ßŁhóhĖwrĖ#źOpjZ6I3Ń“M[PÓd°ŗµ½‘ޤå‰õ&„Öō{­Jī}bY6ł¼¶OzČ o ŚéŚ}ĢqŽĄ/­Ÿ"TcĆ(ń› ŁŚźŗ³D²ōbå>¼P =[xŪū3Hk9¬Ņźį0±°ąü»Õķ?W}sIvdHνóō¦Ę‘CĆ÷–vח1cfāOļ}kŃt飑ę?gŁ…#{ÆŹAüj“°ĻŸõŸÜŲė’=µŃ™Aó ³Ī? ×)}wŖ[;Ū“!Œä!ĻJ™[  ±øHS€E]c#ĄŃ­Ā0 „{}*A˜^O‡åPCd(źG½vcW’āĀA –5ĮaA—1ĄŪÜķ½heVf-†jōx§’(ćĆ‹ŽĘ“ŒS5Lź|3āķj=N8ļ~Ļmømx՝m¬æ“o/a{—rp€[¾9D ‹Ėؤr[bž1×"¶ōk‹(õ(gµdG ¹z†¬‹r5Čģµ(ÖGCæŸ^Ō–ŗnorÆm“ƒē tĶGÆNś¶ŽöŅ˜nٳ8Ęx智;_‡¾ Ńō 'kØĆ_0ĢMœķĻjļ4ļ =ķūu’ĖŹ;CäšĘ—zśö„k1YĒ [b­÷ųē?j ©lįŽ(Ü”B õ¤C ÷ŪĢm•+Õ²zÖ·x‚w€C¶0›”žŸēŠŒéā¹ÕtBś|ĘFB…?tg“Y×:¼66Ė ‘>SĻ&‚¹YkDń]ܤkndŽ@ŗŽõ藚EŻåķŻ¦£YC–h›ųĻ’Z‚Ō,u·>CZBÓ¢6aڵŹŲ\é0źBÖUssɋ`Ęł4Y¾Š­o¤Id]Ę6ßŌd{⹯ųF“PŌ.”æņ.t¦A²3× žæ„4h¢u—~–ŗ\v[„¬qd–[ėU¬u<9_”$ŒżįZ4ĶMkĻé÷ö·iNĘąm/’2¹‹c!ŌYYœą›Žõ2=™ÖIŸco"*”v —Ļ \¹<šYµÅ¼Ķ6[wØ+ČēnuاŠīlõ=:)¦V Źć½7ó+i÷’0x‰;“ż”@ĘÅv°$‘Ķž‘/ ź*µ­Ü–Ā@Ģ7·NknkOc*ygVrÆĘćōĶsZ&qØų–9n¢$pĆ= ö©:bĻ„U–+Wi£mĆīŽø{’*ążJĀĢÜć­¦iǤ‹HI1ŖøĻ×9­ß\Ė[Å“Ž‡ŚƒUfli^ŽKk{–MŃ’™Ī dx†]>™ō鯞Čb²Œąż(cQ±ē1M4Wp,’„Œ§q®ņßYRe~Õ)ļ}+2—cŸ—SøYc“¾²M¬sĄ­km?N‘Óʉb~O'LK2é3,;ąn’+:6٦™¤°»ŠĪˆīyō×LRā[øĶ¤QČĮ™Īė_ųöćNæń·ˆ/hŽŅęEŁ!ž!“€3õżk–“•ĻR‚÷“7¼ą-;KŗøÖķõ9ﵬ £Ąµ@0TšÆ\†ŻäŪ8v*0+ē±nģ’[<įģžĆaf½ö¹„ė'Ķų&—ČŪŃ[ū;ÄZ%žß“ ™„~X8'śWŠž5ŒŁėŗ6‡į”ƒEÖ¢žį å¶Žż85ę5©śż }>'hš’ĄŸhŗ„ØÅ­xkÄ5ķœ‘ƒ˜œ’Z6=$‘]oĆŲ¬ōfó^²¶F·ŗ‹lиʹ Œćךæfz”ét=[Äś‡€¼[¤Y龃Gԣܷ…m³©é׃ßóÆ ¾ŃÆōu+£Ūłź€‘Ī3ĆŠUXӗ”ėž Š—āWĮ=kÄīÕuŲ.d‚hc˜ " pļĻ?•|­yØ]Ųų©¬®ŒķQ$}źęœ‡fzb].£ =*ō3”° ŸJÄŽœY}. ŒlLļ‘åZJ1šø.„”K#ļ9"µķ£k2&ŽB“U”ą­D×SYSŠēüoį­[ƚŁZ^/ö”/ēŪyÕų8üq_0Ūė~$Ņ Ō¼=©ŪIa±[˜>\„t<ć=ĶLQēVĆsżū*üCŌ<'Ä kė;qmu[ łXšX~Ök7ė4ī„IY sĒ|ŠģgC£'.ęU¤O²ÄƒŽFzTÆm*Ļ„Ö4ßĶicŲ§OC ó`Q9Lusi“¢‚W?„uR–…Nž‡¢^%¼agÜ$ Ž•‹o¦žÄŌLP,²ydm=ÅvӚźq5cÕ?d3Bń§ÄæŌÖ6ŗ¶§öž†å€fe2žō&¼gUš·~xŗ[mjĮģ5k ³å68`­Į­$“9ćW÷Ž›ßsƼ}=ÕĻuĘńŪŪźngˆR9óż+¾šĪ¬"{iŻRtFV+¼3ҳåŌęÄĘZ¤}­š;EšĒĘOŪĻąf£ą?͆|9h|C¬Å°¶‘x Ž˜ĪÕś×Ą·t/ˆ·/ķ+ńĮĘŚēĀW·ŗu¤‘|ē¶µHTŽ6īVśā·D©8Ū[žGóĘ{)ˊaŚeYMņ'ˆčŽ%dŅ_P{yŒp¾Łŗ}ėķŁĪ Xń^öØ-dk…pÅŠ¤©żk3·Q;Äū ž 2žź?±\˜$ʓ&·m¼¬Yŗˆf‹Ģqjč¦|¶*’NčēõI%Óå]ČČŪö±„nxvī#učhęXä Éī ng…•”|}e?‹ō7Äą‹Ō(ĒA_2ŽxvĖÅźiŪg«DJƒ¼Ć֚G×åx—uПą~»ć¼āļxž? x‚ņIä?čóĄŁŽ“'FR5żeüųĖ žŠ ŸÄE¤ÜJ—3iz„¬n%ˆLœ:ąēå`A»õ×N=叄ļƾ†}E{ōß$ß÷[¼~é]/ńzžŅßšN=#TŌ¼OńgąVø¾ń F¾“Ćr@›{*®[Ė˜™±Š döÆČł>'źś$³é~>Šļ|®‡hb¶¾ˆĘ³2ńņ±Å*“¬}€ž,,ó²ü\æŚh$›oY­¹·»kNo6õÓĆüA£x§āW‹mü;żk¤k:Ų6¶D G– ĒŌłóž Owey£|ųu/Ā=/įߊü/ŲµMNŠ*Ē«)€ ŹTUŽęčOSÉ>MXŚēōM|$±œ+Sqösę·ó{²Ÿž‘ń†ōø`  ޽NkŚ“Č` Į_A^%HŸøå–åŠčŃ]£o˜ž"‘K)u+Ī*©Ē©ōń^é{JŌ.4ūų.­œĒ,r+«”ā±>%Śé:·ˆßēŽæM£żœļ¼7Ÿ«Ać;©ī[ %ø*7~qżk®‹‚cóz’Šf?Ä»’hŠ‹‹UMVŹ8€xC~ńHJāüćMWÓZ=BŽļNŌclMēFWéÖŗ©ān%Ęń-ź÷vž½øhÆąŠŹņ!JE<`žuöĆ’Ś£ąģš'ÄˤéßŪ>)×-ć¼°°ˆ†7×{H!śķ äśScćüJįÜvi—Ćƒūs\ݬµ×Źö#ł½ż£ü]­ünųĖćŽZÕŗéś¦Æt„­ÉŽ-­•@Xóß„]Š£+¦ŚIøl+ėŚ¼źÕ®Ļé.Ź”—åŌp1wTā£~öV6|ÄRșĘ3šĖ{†˜lgĘ sŖ‡čø}Ś6U‘WŸ­iĀ›ł$ Ņ2:Kźdū§īēæzŠ{[{ؤŠD.‡†µ[—A(žYÆ[K£ƒgLl]‹ʼ·SÕą°µ›(œU{MČł—]ų…āźbmJīŚElo”nĒ^µŪ蚼,°8Ŗmō®YH憏Sד+QŚ‹*ķŚXś• ĀŚ) )[Ö‘Õ \¼&ä1 éWbӎ§t‰1¤Ųź8ķŽ¶-ĈVBŠJźņ®A§.uA‰ēŽ„GS G£/Gmhb»†ķL‘KFT÷ČÅræ¤ńĀæÅi§Nķ¤Ė$‰r<¶žÆŃLć&Ł÷§ģÓń³Iųā‰ž—M¶–Āļż?MxČ*f`C©Ē{z×Ēž.šĒYń§‰ÉöżFMŁlī@N8ķĘ+ėrĹ?ĶO¤ÕOųÉė%Ņ0’ŅQöŌÖį¬ņ¾a8¢K+;i–BŒĻĘF1Ķ{kcłĀ}{š#hś×„õK6²Œ^*$#@ĪGé\^Æ”›4`&Š>\wؙ•ūĆļ x2śßP“RÖ Ņ5•HÄO›Įć~žõĖŽX]h™cq$e¶qü8©ƒw±”ā¬uڰ±Ž9Ф„dœ`šęī,&“ŒµQßRroųf ņīŅą$̤©`sČØ¼3wq¦Å>”8٧§$žõq·BMRśŅiP³Q2ćpwjĮME.ņŃF`’ėS$e$X2łĶ6F}G&«h6s¶ ¢ 6£±%OlŌu_ō„:vŸ{€÷Ęc<Ē^+ĶtZµtMŗŒ»8 ƒM¶ĒP×ŗ5ō1Z+2\°Ą`:Š·Ŗi:u¦ŸG#ŗFDūŽrrzzqŠ8/2)Y¼”“ž*W…nQ£ó ĻqHĘQ9;½7ģӟݿ˜=EhĀ6Eŗ@~€āƒ#R F ŃՊŒ“Ō ¤r±,ɟP ˜³o•Nõb™ĘGZŚÓōŪ[͆XrĢ ęU×-”Óm&UEX€å€č+Fc åö¦Fh3ęfšĮ%Üė";2Æ­iÜŽO °…€ņ³Ę{Š#‹ÖnŅźÕbhŲĖø—ŒŌ–AfÓF)b¾¦ƒ^cĀ|Sc-ö£ö˶Ā28Æ…u[RņiY”ˆ7e}ūŠ;‘Ķ%ɚŚWb–§-‚9ė’Ö­id…­€eóŃžč9Ķ-X±†AjÓA)ē÷ˆWlÕM>ž o“[;ģIĆ9bŽüеKč4Ų–gĆHGŹ õ=…lXŻŁjzac§K$£ yäŸa@®l龓XŠG½¼{v–EuĒį^OÆZŽZjķ G«`óõ hė<.’Ęņ]Ż•ŹœīnxōÅzVŒŚv£‡+ųČĘį@ƒ¤i®Ī!Č?)#łVN«į?GŖ^é·Vf;O,4n£”=éA“‰ē!šV­„ŗœ,0‚°#9¬‰tŪIōq“Ņ<²&wń’}h'©“šįā†y[ģ`üå†p>•āß x~ŻīgŅ¦čŽ£Ī×ģfčW·:}Ģk|D(•,;ʧ‚)n²f†1sĄ;9JåMEŃM Ką\võ«š”nķ„×W(gŗŸwZ ¬\¶Ņ§W1.psšŲ»šī‰¬Ūٳ ³Ō '÷¹ÉaéŒq@īqö—‘ CO¼ņ÷™ŽĶ¼īNğZڵŠĀ 袂NGY³køŠ{А’\£Ņ¾lń†Æį*I“łµ[[Vę2 ‰9‘×Ū+Ļšēƒu9nūÄ ˆĮ˦ÕĘģņ®Ž’Ę6śz\iP—ūNzæaķš—¬¦Œ+/j ¹d•gNģ/'>•ė–Ÿ­Ž+{[9Ž6ćpeĘ9ę‚Öē`ž!“‹Hø»ó"¹“"†ļźq_>x·ĒŚMÄņ[ŖĻ Ź®d8łOŅŖ>C„ztZ„7ņ˜Hł¾•$:NŸØG%‚\yQÜ!XåAÉ>Ō3tEšß†eš~’k‹¾ ‚Gøö7ˆ­„ń&‘{†e?»eĮüŖGcĆF™%Ž”u§Ļ ń9A ®ē { ķ¼'£.æ\Ā-[HüąS56wŒM}Ž ZŅÖóSļ8č+Žtū”ŌÜK7O0³æ–iF&R}ūsÄK4ė¦AåĄéŹĘÄ’ėW; 6»$jz¤3ż‹Ģ+ę"±óŒg׊·c3—Ō5}F9īDSK5›±,ō÷·£h±_hÉwk¬ŁÅv$O\ćéŪ­bāÄŻ£“«<éÖāGµšR›žSÓŚ™¦4P_ź&łÄŖ 2€Ų?Č5#=Ā÷F×t»‰tų–āå!nįƒŌ׆żšy„Ļ<ŅMt®Ē•ĒsĒįUŹĶbŒEšę±®1ƒLPŗ“6#ŽVڧźkR]oĀ’µž³ }”d(žQÜ£ńōā®4ū•n‡M¦üA³±Ń ½ŽšŠÉ“!æĖšß‹Æµ‹»Ļ¶Z›x‹ČžTܹč.l$€(™„¬pb¹æĶ{„ŚīŽy2‹ņ9E¬š±.69ojZ–Æc"1šå÷œ“€naėšé×Iŗ‚ŅUI°øÉRÜUČg©jPé ©*ļĮē^¢kzuŽb4l_QėOŹQźwZ/‡ģ5Xn%æŸģšąķ%€Įǽ|»ń#ĆPéZü‘GrdMł;zg½+K¢?ĀŚF”}«įW8&½ßBÖtĻģH$™.¢¬T«0cŅ”¼ch¼F—× $v,§hÉéTĘ©sØß$R¤1JIXž~£<k©;/äæ±x®„’%„pI=źmpŁjšEµĢwO;cyīž†åsĒ5™- ņćŒyŠŽœóXĀi]TŠzžō&¤±YN,ąš;”|2’“=Åv^’H^6žDDĘxīk'BĘåēÄ·²g…-c»‘&=¹Ŗ6š¢ė°Ļr”ad9*OJ›ā¶1ÆĀāU]럺zCÉš >ĻP§Ži‘[\[¤N»¶¹ćv­}9%ņ„–såĒæhŲrH¦!ö·WFF…ł¹ŖŅy±Ėŗ¬HĒqUd– Ooh³Śe…Uņąt5čZV™dŗlŅķCœ¶ ĶA¬Ģ\ė:RøRMÓ”#ƒ·Ę]\Ķs!"}°Ælu4XŁÓtķ1eŌdMŸ|в|O©Ł[jVĒO™&T.Ņ9'½4>SēXŠģZc¾Tt4šVŖ’Ė„sROśÓRh“¬6±š ō#½h&¾Écq¦‰ˆFQœō?J–Ąā'¹x$X7e:‚;Š{ĻžŽńĘrägqžS'Ų“ū óŽĶĻsŠŃh“ČĄ ’95C‹gAohŖœcHū–ļ\¶„4 ;CnęGŻ“m5”–£öm™rųS’å"øg$ņ»A<Zģto _4 u”Ī  ØčaPė§EŽŸÆkƒN6‚ŲĻlH̱=>µ«w©Žkń[iW÷Aƒ€ŚTýqŌĻJ•;—yk¦}’Zg}Ą}cšėnu[‰n¦øūNĶĮ›®{g5ēŗ}͌8uėŅH¹»’Ö§ļĒҵ|ą?üFÕÆ,ü#¢Ėwg†šźW+ KžNī•ÓJ…ĢjU¶ĒŻ_ ægŸ‡?įҚś[ļx±›BknXäÆū]zšśŽoé>T¼ń Ī’¦ŅĮdżŌjrI 8õÆF4ē›V¼‘ü5ØĻxOŪL2»©q^æ=+»°Š5¶¤CńÓé_S³<8Ģę~-x»G±Šōļ²h7Z¶­€HU~Uˆu÷5«ū>|NÓüPœšŸf—Z¼~10hvĢ„A+H§ óķŚ²ÓÅŗ>Æ%õ®“/Ś , ōØ{É7‹o5GxcŌ&>H@ØÆŌõ«ēOŠŗ ŗ5õŒöŚ£][ȀH°µIå…1mš?³Ę½’ —Å-#Ą”ąĖ½9ÄāÖIĪEįXu#ß5ņž‘į 4=.;YžÕ*’ˆŅņpOz(Ō2šę¹Õhž%±Ń5;GŌn#¶¼¹"%cž“ŸA^ŸńEš—ĆŲDŚk•Ō-ŌĶ#Œ¼,Nr?śŻw[‰éæ¬ü …ńMī£q©Äą"±Č™1ԟ­p^5żšgųĒ®źš×Ć[™~Ņ‚(~Ļ$»·ØÉČ^ƒ½e=ĒŸ›æ¼­xcQÖ¼=ā=:8u‹IŒL§Ÿó¶±kö%Ra‰””ģårs‘ÓҊUI®¢’E]*ōZßŪ°e†ę& €9PpzvÆÕļ„>5ƒĘž±¾Khཁ7’nĆ­w#G”ˆ3„rG­l­“:…ÖŸ:£ĀąēŒęø+Ē”ŃM|i»š:蚟…dŠęzܖI\ō+õéŚ¾[³G•#I%x1†fčIŸ•pFēu9ugŪ¾ Ōī>$ų/Ć×÷n5łre“É#“ŒąsłŠūgö2ż£.ædŚOĄßlÆį³š^£"iŽ"Š6c磰ŹōŹē5ŗZŲč§©ż©ė3h"µÓ|C Oö.žŃ/!a÷Hqœ/µz—ĀÆ§”4‰\‡Īqėō¤ćф£bĻLJxóĀ3YO¾£l Ķ›÷FP[õęæ‹ßų,‡ģĮ'…5OžÖŽŃäµę]+ÅŠ ;QFdtø=ņ9ū±””W3ļłčsĖsš'RŽ8§tfņįÜqņąćčk–k™]ģɒ9ķō®Ŗg NŘõ_±Ł\Śy`Å ėŸ×Ėį¶ČÄeIÉ­ &Š‚į$€Ÿ(«J 0 ®4Ó±žØšc9Š8Ä8ĘFEOfDQ2š¬N3ZĘFŌäl[łÖīX1\ć§­}Ó’Üż°üCū~Ųų„w®Ü[ü/՝4Ym9!w ęķ’„†ś w4Ņ÷’nČī§Ų’Ioź:/Š4½3ZŠ.­/“MFÖ;ķ>xœ:I€p¬8Ļ僎—S‡ģ”d1)*A«‚¬n/rόž0x6ėÅŗWˆ¼,#x&CöŻ.l’ ƒœ®:{Züōń™©c{iØ[,īćk+Ät#Élć'ŽÄgÜW2DOcłq’‚~Ļ‘|2ų›'Ä3N¾²±ęĻS…s±œE‡ĢWęõĖ$lWĖł˜ƒŌWU'„Žj†Tń ®g$Õ*#²G?Ļž€pkŖ2±Ė(ŲO*6c‡ņ‘Ө÷¦Ēņł€źNwµ\䐼›~čbƧ4{d µœ·§­×a„ŲYn)XĢezē½Mm|[*yVÕ<¬ź¦ś’UĮäv85ōæģ“ū@j³Ē|F‡PŠßĆ’}‹ÄVņ&RźŌą żų8?…>S®,žž>üX³ń7‡¼#ń¦ŅößZK{{koˆŽäŸO˜f ŠŽ»API9×č&šé}“­‰ •z:A…sN%—“ŻŽßWšō<† … *ņ†ĄÆÉ_ų-ēģY’ 7ū0\x’šKjæüō%°żżż†™±ēōlu®FķØ3üüu2}3RŌ4[Ū7“¹·~_½³·¾x®Jēj'Ī@Bv•t8źw>øW i¼ģ°<šś Į>*+bžŌķŽóMw”‘ūXĻa\uC¢œKė«ŪhzŶ±$~{ڱp™ķļųWŌæi‡¶­¦ ~éDÅ6ŹŹ®z·”nŹ’>žÕ­4Ųn!ø²‘f‚U@Ē‚ŹFEOvÆ ?VĻ͚ķ§{jyõ"śDŚžwg§‡‚åp豌ąW?§My„Ęm&v/å|ś×b2%—\Ū24ˆł ŒvØō¶Šydß)cøzV‘]JOCŖŅcµŽ5I.cĄ}؀ćo©Åzš[>©jĀ+ 0>\½ÅT––ŸsĶ<5„ˤx‚ök¹ ŌžadłpzW§k+ Ś•lńœøĄ™ŌņūĂžįģ­¤¬:õ·į=3ū.żŽ¤VÕpFXü­ųQĢd©“x’mKNøÓ~×pīg »€}½ė‡Ņ5'Ó4ė69į؁ž)Ę}Ķl.˜źęd™UĖpŒ’jĢž ø‡P„q ܍Ÿ¼)_¹Ŗ·C³]XDgu’Tۜ\ܚ¶£q}§iq[\˜fc–;qŲśT”vwśUę•7Eę²OATµ-”žCu|č@ ÷ ūZ³øŌE¹·Ųˆ@Īx5¹£ŽE ņF !Įļ@¢éŪ'ƒ6„™ø8ķ]ĘæØZŪx^=68¼«ęmĮ‡ŽĒ„y–Ø×Qifņ\yA¶–ĪÆ2|äuVł‡sځKČ̱²¼ŽIĢ„ķž¦ŗ =6{¤f’ Į}OJ å{ŅiļĄ„ øąŸA[‘K †,QZ¬¬ü}ܐ}h)ē³Y¬wM;¹Į9łS ™łTVžw­Œó±gøC‚§“õ„ur¬†G®^ČMkµ@Ü1ŒgŅø»ķZVH␟,¹Õ6l3ēÓUŻJĒ Šī¼5w Ӛk‰‘fĻŹ«üF“’Ų nåy"•VFēߌWvŅŲĮ4ŅHę2ÆJ˜ŪØž—­böīƒlH»cłqĶwאŲiv·2Č©ņr£­WŠę¾×lŅ)TŽ„ńėõ¦ėša² ܬ³0Įū¹ķ\ÓÜŁ+õ¤rO–ŚĆ½z”Qmf¹”YmɃPt+߆µ¦ÕlQ-"½·R§oņzžµGT°µ{„ŗ¶04jrHėšc8ķ[ÅńŪ_¾š©9 ”ĻČqƒļÓµs7—NļtIH™³Ēoj6Œlv~ń­ŻµÖ™ø¶·s‘\/‹­.®g½ø‰œŪŽ„ ĪRĪÖ`ˆĮ#–l×uį€eĖIó'ˌu®v‹¦‡xķä†K&Œ8UŒÆ+Ӛå|/|Ķ{*“™`rr{R7†ē®Ęķ,Dīó0>•Ėźė=„Ś(W8äēŅ¢{t£­Ļ—~4ųĻV¶»Ó@jāÖÅū‹r‘Éu‚ ćÖ¬iśŒ“XI†P2yī(r7ƒčPÓ®Ų”`ē$‚+­5‰Jä?½K‘Ó „V'ŹĒü+€ų‰¤ŚÜéi5żNٻи„ŠŹQŌą<#ö[iĖŚ€‚8ÆYóüŠ‹ ;€źjdŒŌu4"ņUB«e’Љb’åV8г•ųN§}1°“ś{„­Ä/Ÿļö”<ˆŃ—~oZŚ2h·Ŗ(ĮØ^+£¹A‚k¦:›ŻÄŠłbBA˜Åo jrŌ¤p~š’ˆü%ńCńļ‡o5V[vóhŽyśsŅæi¼UšSż«’dĶOö€·ŸB¶ń'†Äžt±šB?yŠ>ƒ×ō®źI·cįųĆ5§–ūmGh©(æIzz‡ž?‰ßQ³¼‚Ņd‰£Udģ£qėŅ™£IåA#cƒ×„Vižõz–‘śoū¬³ĻģcūfĮAüSo=•ÜöįÆ łÉøH£Ø<2=đ‚{ym_‘ō;Y¾ėZLjģćøÕQRi$RI3ŹÅ‰>½H®Š²’„zææOŠžh£ˆ–+?Ē×ūp¦½TyŸÜä`YÉ éօ„¶½]Æźøī?:ś/öh–O|FšTdĆ-¢+«n¾\:åS;«½YśK”_[K¬4’„ŚAŚčkß<_“Į!<2ēœ×e&xXŖ‡5ā’__^‹4¶C4®JØ^žÕóŹiš§…uVĪņŚX$ŽfŻņžtt§©õĆYk^¼Šīœ%Ā6šŒžŠšÆi3h~-Õ5+S)±ņC2ŒĆ94ā}F[RĶ£ĻdÕ“ŸŲĮ&“mpš¢’|¢>f#ū£­~Ą’Į5¾0ü5żœž jų‰©kZÄOxĄ­Ž‘yjń¼ˆū"ŠD  lźKgŅ»čŸćĘQ_ĀXœÕeÉd·v©;|“gīšNķ$¶s#yŖ –Ūņ¶}+ĖüOšSįĒŽä…~ x/¾5¶ƒ?g[ūä0ŸPqžę»-ņ§,Ķń*ʾn[4ģ×Ķ4|d’‚z| ų„¦”įŲõo…ž+“Œ-…ö&#$…ø=qĮ_„’šWæŲļć?ĆOŁ›Kų“āKß |@Ѽ7©BŚžµdō°;yj×Ü3(Č'­yxœ6ö?«¼ś@ā„ŽĆeŁÄœÆ8Ę3ė«JŅļ~ū÷źĻĮżäņķČȬŠGå^­¤Ü̉.ƒĮéÅ|µXŁŲ’Z0t¹b’:Ųo€gN}}jO¶P ;g =Ŗ`Ļ~ݱ§g™*3!XÉĪk³Ž×KÖ¬µT/żŸs BŅ®7ApÌõ=+xĀē‘™KšfyG‡~1|sųā oÅs i0k”’ö3÷HķœvƾōŪ;ĒŚ·ƒaÓ|O:M*Iēe# äzgé]Q§”ųž3ƒ(¦ÜOH¶ų‡k«é6:óM%Մ®±ČŁĪÖ=z-·…$Õ¢ŠžŽČEdų-#€Ø»+xĮŌr>CĻž.k? ģ|'6”šÓjž3_» »{ŸĆµ~oųęźóT¼MCQšāīeQ!؟-}ķҰ®}vW“»9K”>“į‹wį’‰õ~~Ńe“°=TGzĮŠģ m>3o"²*€z óŖ3ź°4ł[VŲŌū,0n*>nœš‰ £etŖQ¹ō“4(®•s$žE³Ä’ž¹Āƒļķ^ēń ąoš’Žõķ*ĒPš]ē”P²›ĢKbųŪęį3ӞµŻN†„ć3:wZVē|«Ķ½‘ēl<½ĀF]øö¬Ū»k¼EH Xę¦pģv*Šö2āч¾x×ĚeŚ%ʍ*+G×vO#ł~u䟓+]ń׃4oĆŠu+ųķf¶6’&¹%O©”ź#Øż„žź’²’Å=2ĻĢ–÷Ą¾ S>‘pėÄR/߀ž™äģkƞ †ż³“¹éĻ_ēOŁjsŖé­ö8ĖmĖ{t­ä]–ą#°qéQ$tÓwe?ēæ­?C–m:(`'ĢLs»œšÄ¹@ōM*õwŖæ>•±ā*}k@†ćLŗßŪæ™‚2%ū¦—)„ćcęOH½Õn”³ŽÄ½š|ķ–lōÆIH®|1c7F$•ŗ©ģq’×ŖQg™Š®¢u/„Yić½&XüØÖ}ū˜Ķʃ^MXr¾V~ÕĄ|KC<ĖięxGxM|×tĶķ3ÄöŅfOµFéżÜā½'MńV›q{j’r6oĮßī„ŠŠFHąąßŹ¾ż†|a»į^µį°m°ŌwĮ('xF?q…}nZ½Ėę§ŅF›\Sˆ}Ō?ōˆŸj%äóÜÉpēķļZrŽI&ę˜6üdŒtÆn;Ļ5ž—=7įGˆ#Iu+ DŒ$Ć~Ÿ‘ÆIÕ [Ÿ1• ÷PÕĪfģqš’Š“]2 >Žg©Į€āSžµ…£x‰õ-`…grw*üŖ~©ņ™Iž¬ŚKyx,ŠČŖ3Žõ šŚŚ-²³\mėŽ­FĒŁš¢Ęd,§=0sUć(ŹDĮCv8ÅjqĖs3S~Y”pG_ŗjŽ—Øyö†•pé%±8ÜÄzŌŁĻŪišNĖ>Ö<9Ą®ėM¶{'ŠEFuSž=č1,jŗhń "‘<āß?<ėŠß²³Ńltē±ø·[ؙ r=i¢[±åśĢŚ>“Z[«C p”„v®BĪžŽ č„3®ĶĄ€GAļNLĪR=S¾Ń×MĢG|üŲū§µ`躚ڌ–G'Ųę¤ĒœōfÓWÓ|­Bķ’4 ļā"ŽĮķē³ņmå…Ļqšd¶ģs·+o£_[¼˜UĻŹĆ„wŚe“>"IŹd^Æ“óŽę‚L=WĮŗf›%ĄŅõ)„E@ĄJ¼ŸQßłöÆ3g¼·#dūŌsk`~G\fÄ©)Pņõ­MO@X¬ćÜøŽ»ŗcØŹqźr†ē‚:4ßÉäžÕ£p×RÜ-“&ŌŒ3õ É®„pY¾’)ĀąšTŸt¶ÖlƒĒ“ć½&„Ö³YHŽ»² n¼^h¤…Ž)#ƒķ@m6ūȞ@J“ƒĘk½ƒHµ½tYŽtFęP2(5Pīr׌œ²$’3¾r„ø¦\F‘Z}œŪżźȏ7Õ“H.•Š*7<q^āĻMn'Sj š:PLcfx“p­ĆÅē4ŖŒuĒØÆIK­½Å¬/+Ŗļ¼PW+!ńŒēńŖč\iPč×66ā ±ą6ń–Ē^ `iŚŪÆ-ī#˜)RU†Ü–5Ųīõ/iŚ…›¬3:Ic‚½ė_ĆŗVÖń‹™ć9$œnŒÕf¹·Öķa±ŗKķ!ćÜğøŽ•Ė\č6-ŖMvZO:\nĮąb‚•ĢūĖ{[¼‚ą<r»•°G½2 V‰"°˜+®2ŲĪ ™hkcÓ¼9āå™cK«„Žę Ü+»Õ~ ŻN^[Ę!°¬:‚Jŗā3ń–·%ŪŪ£øš.7`śT:’o–Ņ`Ū»*ūÕņ³£ŗŅōė+ybš86Čł½kĮo|1k×PŁ •^C#fRSš§į@ԚÜùÓÖmģ4ēHÕsŸ,cwćZž‹Qiīķ?ōxŌ2Fq=…Kc+Ä–rėĖu8Žń0‰Ļ;}å[Šéé}yc1>WaĘh3:“¤MröJ.žĖyŒ‚¾żė;Siō½PŚĀ`’l31#+ź8 ‡#¤“‡Hŗ¶ø²yŅ.Šsž­³×ōżkŃ'¾šę„q »{„óŒˆ$ •Ōdy·Å‰.u8ŅņŅåćvbĪ€tö5š×Œ<Æ5Åõēö|—˜ E哽ķžÜŠmϤ|&ƒwą;-?P §k¶ķå2ĻĖ0=ó׌WĻ’tI-5T{O·¤k·Ķˆ|¬O|ŌŹū Iœ%Œ+*•G ĮjļķtMF!öęņ„ŹŽxļYcZ5¼‚ŽKQ+²/§JńŸhײjlbšBŽ›Å>aď@»ŽĀHl®ƒJģĀ48ėšśrĻL“’„pźśgŁ%ŽP2|„@䩤]Ż®yÕĒŽ|E=喓§ihĢcgŸ-O~œW”xg\KWšįW½N?|˜\‘HjA«Ž$’I¬ĶkiolŸ,°-ߊā¼Eā]:}FĄiGk @„•ŗēŅ‚¹®\æÓķā‚I¶¬®T`©=;ŠŠŚĪ ū)ķ§µ‰ā"…Śi!¶qü\ÕßiöÅĮž.Xą¶wūżkdś¢Tūž%¢kzNā)ģu8lT;Œ ōāŗo“ZGØÅ"; )Ȓ“?Dz ŽŌ–ÓķĶ$Ö³cuō8®rīīmNųiS÷ WNģ+9G©f†>›ąIµ$Ō”4Ä 1²Īk Pųƒe:N±¬Hļž¼vō¤£„ȔO6Žh5›§Y™åÜv„#Ķzļ‡<1§-ä3Ļt±²ĘF Āöć… fF‡ŠÆ¶ėUI69dcŅ¼¢ļF¹Õ‘-t䚼bC['>ä֑•ŹŠ>ńų_šæĮŚoĆ©‡‡Ųµä¶Dw“¤ćė_2x² Ī9G’¬ĻŸŗÜÓ5Za¤Gt.·¬“É#±ĄÜO4ŗŻĶÕ³yęfˆ§g2=V“]Ž-T²Ū©˜62Æ`‡ģā8ķ!…'¶l$dœzÖnB0|]ąūKmĻnˆTńæż+É5 "[Xě˜.īq“N÷!ܧ§Ų“×ĀuY$”|½3šķŅĘāH„p(ßėŠ-Kv!\ӋĆ6VÖź·P(¹o›®}« ĒD›O»ø ›‚@Y67#JśĘkō#mQ…t®Xż²žŠ+•CŒöj’FE„Oq.ö w£Ž‚­],ķ‹«9T;[„m‰r+izÓņ9źr=q[m}a2»0ĪĄ¼äVOqŔŪY·†)%y™#€>õ;Nų…qo+Ś5¢Éa!ŚÅ‡ĢØŖŒ{Q·S[S>”nל\Ž[9*U‡Īļ\’ŻŪCr‘ ČŹpFzŌ“j£bÖØež %ƒøō®N ‰/“xyč =)Å ø$·ŠÕāŒ,ŒĒ;ūj­ī%†H‘ˆ' Ć ¤D£Ō钱¢G ‘¦EéŸJžøŹąĘĮ銬ORT §™…¤r:4ƒ½©ö°Ąfņ šXŌ•m¼¶‹wNr5—u©Y[!R쁒)ó #’’{»łā· H?5vš€ļe‚-C|BŻ›€ė\õk[c®•3Üōlh[ašŽŹäø1žņ0Äzź4«m2ŽŅKy$®w£¦¼jų—{#Ó„c„ŗšM–o§ų†Źę9Śt"Kr8EĻŽēæZŸā'…¼)/†-õķ>hģõDŲ¢?,8ćęۊēX–Ī‡†ųVŌ®õ NXšB7ŹSóļZFĆĦ׉—CÓc›Z¾“oīāåĀśę»(ĘģŹOSģžČ÷v†ÓÅÆ'Ńm™ Ņó%›ūŁą/õÆŗ<=į+#ģVvöv¾šlVŠZ0ŒŃēsß>õėR¤pŌ’7­¦Ņ4ū½ĄZ^©»`“’7Ķ'Ø<ŅØ'‚l¤u¼ń^„ØN’Ö5rmŁ@ōuF<ź••®t­tż$ŻĄ&Ż!.76ā§Ņ“ō=?ÄZž Ń[ܙZ\2Ø,AĻOƽ³ĘE? ų‹Ć āż_EŌµVæ}žKyĻ·sŒg¦zW¶ü+Ņm<5>·ØŁhśN—jĢČe•A‰ĒPŁĒó[F%ßCĒ|]§|Fż£>!¦‹¢3„…¼F0!%pz’ Ļ5õwĄļŁŖ xdĮk¬Ė©kjņHšŹß>G\ēO„'"žÖ>fų÷āķ~ęuø°ÓcHģę³$Ÿ+²)ĮŪŽųÉęøoźš‰×LÓü1 ō×&0JĶј{ŠĪ0v1h“öqÓtė3XųŠĪM#Qš5x®YĀ‘}2= }ńńOI›ÄߣÓMyov©!BG%F89éUĖmĒŌł»ĒnųjštŅĆĘńDŹćyHļœ+”𦷦[5Ģķ§„ż¤Čw0P‘Į ŪŖ;‰ŌeAóI L3bD¢^é¤ü>±Õ>ź įH Ō-Agó$$8ää÷Ŗ–Ä*š£ćŻ}TH”O&ķ ³Äd±õ—ĀOųĘ_jZ·‡ĶÅķĢG ÄEžR ĄĻŌśWkŲõ°’÷Տ©,ē}WĀ—·vńż²EćsąFŲļ_ZE­§‰uŪKõ‰¬¢øŁ”'h=éł×-‰Ųئ¼ĻBš÷l5Ÿi×·H·)”£.>éõī~3Ń4Dóži xa_.4‰#ük¾/CŹ©;a¬Łų~Ū}AĢčRM‡8 óĖ"¾ˆżž!i>šĒˆµK«9¬uµŗaó2nPžšR•ĢŌl†’i½&ļNų‘ć=C]ŗ“ķ×ņ%˜ …qœśž5ł’ÆŁł7RG21Só!'bkåŠK”ŒīyżŻØiRiyŠŁĪy5ōĻģēńēĀŚūiZ…ĶĀŪŽuTĮX#ņ=+сĶ©św¦ŽAuM¦Hߕ݀ߕuś³Ķ3ĮpįX† ƒŒ×=ttSLłŪö‹ųY«_éæš•CcūėŠZ8†ęSžøżkį-SOkIĀ7c<ēŒ×‡]4z?Ą’MąY„ģŪō;پÉzŅ€Ē•ō/ÄĻk«^ų~Öś;ż:XÅ“‡ąTƒłUł‘?Ŗ’ų#'ķX’’g«æƒž-›ķ<«If-4¶§; Ļ\Ą~?­śN”>›ØŪ^Į¹#E)­FĻ®WWµń•op |Ńņ?ŗkóŸćæģįąÆŗĘŁ§ĘŠMwąļiRŽéHŹBŲ_D71»6BIīPśœįRš’³0‘žzß~ų‡įϊücšŪÄŚU֓ćo kiz„r‚Ēj³*0=ĮP9čzׂj(š¾yŻ§½k‡©Ķ%Ō¦„9TľÄcŒÕ<9ĄLć„nr“WKuŽĒiæ;‚‹Rą }(‡JĪȀ3ÆæzXķöķpĒ?™4ŃÜӂYw!“ ņīV–§k„§=œ‘1œćĖeĘčŪÕI­&wS?¶æų /ķĒ?ǁ×_³_µ3āĆåŠ=>Y„>v§bG®Šń蟏ō7ØL—)Źį ”zÖX‹¹sĖvoĖŠó-sLób¼†1’y öł÷ūBé¶šx/-ma°Óõ‹`¦4,w+Ųō-‚*ąk[×CņÓöŅųkń·į>Ætö:•Ö£k·ŌĀ"ƒåø=sņć>Õükś=߆¼C­ų_U·šÓP±»–Ü AŻ*Ć õ­Ø½la(t1ē~R£ęFzŅ3*… 0Ż„t˜5b?#nī Pzš‚L&P‚õÅe,üŪ‰Čż)#“Ėtl€{f®.Āŗ,\“3•v8ć­*Ėķ(6`Ķ>mJ‹ź^¾DŲĮĖ9jK·‚śĘāŠ¦ļ1Lg#$oŹ“:"Ļéūž•ūiA«ųFŁūā5Ļ‘„F-ĢRøwÕ4—RW»D{Žƒ5żY|ׯtMYšoˆÆ"Ōµms=„ąå®ōéc9Ē8#\µ Ļi¤—ė%֙:Éi0Ż?„ÕŪ'ŌžßQŌUäO%ķ/­³”š69ńÖøäŗ4ą‹ž Oū?ģ·ūNėśÆ‡ōżA¼ ƇՓ‰™–±;š’¦lOøÆÄŪż5e&;|Ļ•IčßJΌ\`¢Żķ”Ÿ-ˆ4;¹,n@S/˜˜Œξ“ųaįķNŅļķ6qµčččßtōɬź1GEc¼Ö<¤ÜĮ©jp]nVˆ ^Ąó\‡~é “¶XęmžÕ{ĘV·WŪyPB¢ž“ņ9čtYī,Z(n3|_ńg޹; ųžēU“Oū ŌÓn!|µČl})Ų®Vz†‘ µ…ŖėgŠķ ¼`­;[‘%ÖńN7©Ü1Õhhƒd\\\iÉG‚¼=+Še×£Ö.īģ“ļ6 F’0įŽyć±Ņė>7MQī,ī,Ņ–9HŃp=ĄįŚæ‰¾Ńyqh¤£BŪō=h-Äē#š[‰$•žó1ŸĘ½ćįŸ†ćø…|LĻm,Œ R–Ź®=F9 “ŁoīōĖmTĒŽŽĆĻ–ATž/Ö|'&žŗ”²I5(Ē cׁ@}q&±¦¬…įBrŹ: ŃŃtKXXĘŹ³”Fī”>š‘Kpё±IćŖ˜¼ ņu鮀1/dvĘŅOęµt­.®“÷ń¬ÉÉØ‘xžæØĆ$Ēh²ą>8a€~_ĪÆ-ŖY¹XCķžµqvzżŒ[-ģÆ^ J Rx‚ź ^xīŽ-äŲķL×ėÅ_:…æh­&¶HUåG'vÕūŸZµc 2ŹńČQ€óŚ¢RģX¢[‹ķ±+0L“…ōėSĒā-ź‘ WhÉ9ī8<}j Õčw—ŚÕšY#ZN$Fõ¬ėŪ\ŚĆ( Ć2}Ø+,¼pK,޹t$qČ®&ļFø†ž6Œf<ƒœš P#kR•暯 qóœńVbŗŁåą‚ĖŪ҃X2Ģ“]{„Ņ ½¾ ą‘ŁY±Š×ĶņŻjš~±v/-ę‚ö9)K »Č=G·4v1ė¦ź! Ü.ÓČ®žÓƓ“jQЉWw'8 ¤‹ś—„c¤ŸéĆų t–ņ}¦ [{‚O–›#®(4*Ķ <·PĶj„Īīķā»-SI–59žŹĢ1÷¾šļAG“=¤v“ü’™O&½ ĮńĻ«y¶š‚+C»÷c9Čō§rŌ™ÖŁé–²MoŖDČĻC\ņ<+ØdHÄmjyµ58żZ[M>Y¢Ņfo(“€GJób=RåKŪĘņ[tcŽõi6krĀĻRÕķ ¹HCŅŗĀڽŗ[Åy)$q‘ßéCEž‰Ø[i6¶· čåæ^KØŻL× jPŗ2{ŌŽĆķ“”±š;ˆ5Ė †?zÆjŹc€£Å·§< ŽKūA¤VĒą+fĒO»æ”^<…£<*śÖ-šØ¶j6‘z² 0²ŲĄ„æ·Õ4ŲćÕIōūŌ¬ol‡@Ö<ū†@ę)[˜āŗ˜µµø‘.$OlęŖ7E(2Ž§¤_N``<ĀAlõ"›¬é6–uĶŠ¼… hćŽ 9Ŗ”MO2š“_eŌf–2‘$Č3ŌzÖ注]Å4ŠÅ9–Ūø¬ģ4Œ›ópc·#5é:µ¼b9Aę?_­KŠ6„^ĒgØi:uŚ&—:.”$e  ĄnüėϦšTŚؑJ¹¹™W;{ņjyVĒD`iėzµŸ…Zu;˜"øp0›ł>ŲÆ3ńWÄ/čśmŽÆ5õ»m "Bü³ćĶsŌGu zč~zų3Wń§Å=cā«ā+ļōOķ!ia¾hWoü+é’i_eĢQ"41DGĶŲcÆÖ¼ dō/č£Ā —ŌĶŖ/z«“Ćg÷ĖņF•¼&’tp+?\ńČ«±é7V›f„‚ėŪ=«ĀŖŁż‘J7Ōµ®Xčž$šåö—āKXÜšKbNd6ž½ė“˻ŻĢųfĘS œR¬é’r9ę°ęg”Nš>ŽÓ|q­x†ÅW_»k¹£ G²Ø ”sl#c €zśÖ‘™čRHšŽĮ2OQéY:ܲiŚ^”z~ę6pHą3ż+¢4ī®trX|šÄŸxvļE²k;ŪĶ&+›{æ3 Ķ‚ r=kį{å„iZ–›«”—Yµž[)B7£N=ĘćYÕ¤–¦Øx½®Ķźh搄¼ĪYW= ėŠōK§˜DčY×§µqOAAõ:xšžL„:ŽÕĄ[ ‹vį0qėĶfĪøngé^]²¾Š¼ Öõ•łŒS>T}ÓHė†ĘńŸŹŽnœWń G›Cóœ0ņÓjć $žµq•‰šźy7„ÄvĪI#nāŻzšõĖkŲ$Čm©éD¤dŻ‹vW–kq*É*Œ šÓųmā‹;æ‹V:Xµią·įbĒĮ^ŖqW”.«[L|C±ų7ńsĆ~&Õ“ÆųŅŹ)&ŽÜ)Œ“ˆ2PƒŒäŒWČ~ń ZŽ1ŗĶ³ēĻb:’*“)Õos“Š8H ·mjXĮ˜ŽÕ“U™Łk£rbV߅Ü;bŗ}Äž+м=­xSEńƌ4_źS4ל]„óGkvO]ńŽ9Ą®ŲHņ±Ųu£ģźÅJ:;=uNėīhć¶’‚üp‡Mż›bOŲ·Į‰ąūm*ų™cEu* Ś ņ¼ģTńœ¾’é?įRkš…­ČŠę[äbžų¹Åk‰œ“‚²²üµūާóI–K,K—ÅVµIżņÓ’%Hņ ½Ebé#FŻ Ķ{OĀsĪÕtKƒ>Ćڦw`œäW-“g]Z‡éĶćZźRÅ|«)PsŪ5ō—Ćmy4ėūwŗEhŲaČ=vŅsĮÄĪģõ ½fksA¦»Ēqnž`ĻśĄ×} ßxÆ[*±¼ŚĶˈĒ2Ÿzéŗ˜PwgœMoØ|:ńKiŚ“2Eqy623T$ń‡ü$s^ŚĶ„ϘȫœåIķN*ĢśŒ»;®čšē‚õ{ wJ¶ŚŽÅx¦1ó.× Wó‚?żŚ’‚‰|9¶ųėū4|żŖ~\}‹ūŹ Bd 0³cĖ*ŃHę}+®‚čĢü]ĒĻ ™d¹Š~äkū9.žÖ _öźæŽ}æū|ińĘļŁóBÖ”āż:gÓon%Œ«Ż*cĖ•‰į‹/VH$ó×ķLnß óÆÅŒ†gć0T•”·ŗF^ņ_$Ņåāæ?ąØžMwž õūVi·q¦¢æšĖsøū…$Įü6ēš¬«­šįj¼™žk„H?ü™Ÿō½F÷CŠ\ķšąŪFχå’*ö{ al‹;¢É‘ødäWČā•īśĀ_•\źWHµ[U‘™ść梒ĀĆ-»؃óœę„R-Ų÷ĻąH¾ ü0—KžŃüuuÕZ0T¶N~ŻĒå^Wa1Wc!8# ®—ty˜…&Ģ?iŽÆdś”V7±Zņa"3Ļ~ŻėĘ[ÅŚ§ŚÄMpr‡k!=1Ś“©cÅ«Bē¢xćgÄMNÖt(`Ńn“{;_˜=»ŽŽ?Ļz[ļ5›Šuˆŗ»é T}žŲ”NnsšØÖ.Ž]¹Óč׍3½Ąi^i.ģŁf>äóV¼E2Ė 1ł2$‹ŌžüŌT•ŃėG ±„įŅ5X¬&’!, Ņ lĄĻOĀøļ k¦Hī-ü’’) Ąž„W$™*­ŲÜ»ŌA»†"rķĘ“v KgŚ®œŗ1ŪBK ĆÆ[¬—©ƒyĘY¼¾å}xēšÆ¹žkpųŸödńČmJöćĮ×:D¶š¤ĮˆŠPr‹†ī"ŗįQ£ēø‹«SƒėEÆ[ŸxBć ÓÉ…āZ°WGQŹūƒ^{āYoĪ“|–ė(o-”…Ēj—&Ļ^5ß5Vż‡5o 7Ä’|4ńl±¶āM36źąóŌcÆ®:{׀üSšļĆˆś®˜n~ŅśNŗ—PmČ LąLf§”ęö“öĪ/k¢·ę”¤xÓöSų®\É ^3¬s[©}\7įŹŹæ-¼%jöWV×WSB]ā1˳³}?M™`!$š}ßę{–Ÿ,m;˜óČ­.ŖĶ‘ł×4śžżĢ~$—¹Ōü'~!n·ć™3’įH’¢F„T7¬¹FĒG¦Ėå¢łW5ŪŪj>@B‰2pеŒNJģóJc£kÉ©_[g¢üĮ¶ąóé^!ÆkzŸŠüK¦i:vgŒ]D. b6©qĻė]4éŸ-˜ÕŒa)·±ū1šzĒĮ .4;ÆŪjŗ”bh…ÜŖXˆv‚@Ē'>ߟzńæŚ£Pš‡Šž&Žk? <ØxgĆf±æŸßµL %ödķąćšĶw{;-ęģ66®'å/‡SĆl/µ=B5·Ō¦šīÓo”ŃŹÅ†`×ßæ°Ÿš•ž*[iü{¦hž²»TŃŪP°’Ÿz5ĻĖĄźU4䔝‘sĆ3­–Wž<ÕT$ā­»KEē䏒‚ą~Ś_ž;žŠ¾ųSįļYź÷Žiń 2,‘ßŪĻmˆć²·¹ėńŗßMšž”+ HDvnĆ9 ķ#é^~d£*­Įh}7Ńė$ƑšĶ3I»É§£\ŚŁökcKKųcsāx@“P’„oĀŚ®Ŗŗ{k€¤%Ąē““uī+éß’Į?~6x7Ä"×Ć×ń†€čŅC|ŅW<Lõǧē¬,šr]ŪeÄ£8Ó¾®’óWŽ’dļŚsĮśV£ÆéZ^ƒÆi–€ÜH¶wŖÓÉe ßń^ąßėõŗGu=żź²Fx<sIÅ­ĶŽ.SŌ“xõMK]Ņ4‹n[K{Ė•‡ķ¾ŌŒ·+е.£F²«lv0|X›OŠ“FóF0ržĖO/ēmBŚ=6ü¶ēFĄ>٬„.Ä%wVž3Ņf"–䬠uėSŁüQŠt‹‰ā™…ģJ„a8#5-²Õ4ĻÖ¼A¦^jļ¬I2[»åFdź3õ®’ŪW m ńnņŲ|Łæ‘:iĒWµÕmćŪwćØŻ’ʶ!šl夌$|M"9­¢·–6w6ķ&ę<`Vbė6ZkȲĪŃ77ū#ßҵ涇=I–-µoķ=·w(ŠFėPȐ^K<ŅMŗbŲ'¾j¢ūžN"}ŽJmoVÓ5“Ņ›Oqlż.īć½ż«Óō½*ÓR¶Žk‰݉Ąō"ŗ©­¤ĻFBŠk%žŃ"źŻ¾B ņ1\Õ¾ˆš YF^Ē$¶z ō®Ś;˜¹ź~|žŻ6V÷:§€nōų—ĢL«!ūŪ=¾ WŃ4Ą_|-ywz„å²\\yxÜ’{޾Æ-•‘ž|ż%°ßń‘¹5ńB×uś[äz]ĒÄmCHŗ•ōż6ÖF^N¹ Zå/~2x®āźIo”Ó v?,P s^ģ^‡óel5•‘ōĀŁ ŪK»½«s*ĘҾŠń‹"¶Ņ&½·Łņ®Hł«XĘē›Rš/õ9µKĻ>źEŲ[Œč“oK¤ķDBÆ»$r+XÅ\咱ėń2jÓĶĄgŗÜpūp1LńM„ä—‰Pł\4`r¾)æ#–k¢"Ńåū'hMø!Ćó“ķšHÄW|\¬ō»ˆ“Č#i\ķäš½ML·Z‹Ī,äŽ/;k\ī>µģž×4ĖF‰õ%øHGŹū[øĶ¾¶!k™.ģęóWœ1VtNĶRą©‰ÉąƒÉ J%ßķkču. ŌŹ²cp-N}+zāćPÕäEĆG rp>ż±ÖŚhż‘/¼·{Rvn€Ž•‡|mģäĆ1ßü©s <³ÄŚĢ2 |ł<ā5ě·‚HXĖ$ ŒTżįļBŅj:ņ¬ŽŲJҰkÄ–•å>-ń/ڦó-n“€<õ)6Œč¼!tגĆ$ŗŻσ‚ĆŚ“ü{ē;”v5Ščš&ŒŚĘŸ&¤¢ćLā †oʛv6Œls?žųMń%Ęæį‹[·’x€ŚÄįĄÆžÆ,Æõ;(ćW0Z†S×>õō/Knō­G3#;v@«ņd3c¹5ĢM©E`ÉżØNўŌåęI„-Üöī®źŅĻŹz×sž˜Ņ‡n>_Qō¬Éå9"ŚļM¼:Å֐ڭ“ _Ė óLWŠPüLšķżæŲt]R|¤W×d{æ‹nEņ³ˆÖ¾![i}£FŅ-¬Æ¤”łĻßCü>‚¬é~+Ņ`-qŖA«”q‡ź}…ū6lé¦ŚŻžŽkĖfŗńųWsįhõbÓiRŪŗ¬œa†ƒžE&ģ>Fz懾Éh°Üǯ֟¤ųrx5«ĄŖv(9½é9Ķ{˽&®“¹į×DC÷HĪk‡Ōt=BóL¾¹¹³†R€Ķœ…*?­O“YāštÆØĪ–įH‚LśWaŖCc„µ½‹^A+²…<#„)Jć0ökį>`P lĄčilō­cÅŗ±KɹÜJŒśScXĖ”›®č^$ųwāk;iāŽ•C3Āį‚÷;±ųWÆųrŽāīŽé–āo8o\ēo5¢‰lŽóJ–;–Żla+óGZX4ūŪ[ˆZI jÄČ8Åk-ĪsÅ,uhīȒ;[¦Å"€U‰ķšņų“ «3mbgVņåī߂¼ņsCgDl}‹§Ķg5¤~}Å„ŅĄŠ0% dŚ:zöÆńf«.™ā ĶB×Jū|łnĢģx©±Ŗ‚<‡VÕu}kR vŅĢ…ÜG~ ÅyK:ļdĆ(#æÖ“A(—ćŃī<;n·b9Ą>µoM×&Riö»·OjÄ嚱ź–ÖQK`—wÄI8$kkĆ–mBāėGŽYŠ©sÜ(“†Ä§a>!ųƒ[Ń“)!Ą…s·ĢbN޾b±½æŌķßż&KœIō5Rv3ŲŪњīŚHB «eNpEoßŲG}ūÉŻ‚r9Éō®yČøÜo†ōɛqXJGčF źŚ~‘Ŗ2Ć%”UĪÜĮ³¢0īz śd’éš}»l²²ćžŲÆ5×<*/%F…žUą®3ƒIH~ͦyk}$[T7 b»87ŚÉ @>¦®ęN%ŻRŻÅeµ†Cœu,”®Qõ_“JŃ]<‰)9ūÕ&n–t±y`4 Ä«Źo\ÄU ļßLĻ„óIÜĮGOƒ;ķeµ[y §œWśę¼ć]iķghģ y¢nYĖJhĖŁ˜[ِ!gB8Č$Ö¾“XłŽą 9Ķ\;SDņx~9ycFi,98ś×*4»ė–h£ŽLēSü«C¢”ÕŲi3E2@Ź>^{Ö;ŚŻA~ņH¬diČ ‰#Nk.. üŻĪ:VŚ8™ę™ę•“9bj°½”’l¶Ęb€É Īń5vĪF„3Ɩ ćšnZjĘ’kgUĘrz UHāŠY<†8īē=+šK \øm U‰ŚyČėJ×HØĢw6H¬'#¢*ę\Ku|Lq7Ī~]Łā½Hųg¬OrŻCģÄ©ėģ5Ļ:öV;)Qźhjž±³ņ$Œ•øĪ@Ą9õ¹g¦ź:dpl –ĖŌmĪr;WJ×;”NĆuˆŸOĶ1ūĶģj±kŅ-µ]҆V “>?1\u!sdķ±Ü/ŒµæĮ›(·¶O”»ļ(~µvļ^HlSHԚIŁ\€üŖ©ŠW"s±éžų›āT¢ż™|1¢˜É7RŸ,:žœc9ćµ}Ńš³įžƒ Į—įŸÉØjūDSß\Dw‚ #z{שF•:µYt=Ž÷@𧃭®5/^Żxƒ_—j¤F]遏žµRkž6H-e½IÓeł¤ł¶±ˆuöčĆC–Ros«³»Š|=}eįD·}ZįŅßķ 7—  Łé]·Œ¼„ų/R€Įā/ųH/ ×"1˜U½?żjŲē©LüįŅī†dŽTsčæ…z%—ˆõO [A„JRåæx[ ĮäZö›£<6ėĄŚU—õ‹Oµ_Jž~üüĄ3ōÆFńļĹ“æ…×:eŽ˜å܃#±łG¦Gn§5i=c==3öŌēÕ| āūƳĄuI.ݚį$̈@!H=‡N+Öü £|pš†§ājśœ²^I+}ŠEĪֈ‚{s‘Ÿ„_R„5³<[ćƒÆõ½*ķ®”>­8iX+c$õ'½|µ§č>'šgм•ä0½ĶÉWPĀ^0p§Šš¤ˆ¹ömœžÓķ­5ßčÖw^'ó1op#Ę3ƒŅŗ9|u`¬öņ‰eI\–$$ާҔ¢(³”ųŗšWü±B‰֋•YäÉĮuā¾~šDhÉŒW{Ø9Ļ'äÖ{0½ÕŽŗĖĆMc}ŖÜA=ļ“!0wŹżņÆcżŸ~*ųKĖń†Zt²ŌÖFĆĘERĖ߁œÓWŲ\ŗŸ5ütŠltæj:¤P[Įn®eĢ-…äžHé]—ĄOZif«§ió$67ΦE`;Æ’^¹ę“g^„Ļ£üā’¶ź—Z]Ōl¤©`AŹ’;}x­ SECŖĖżbZŽåĘę}žµĒŽÅĒ’ĢõÆ|4ŗŠŲź}¢ƛɔ䷵|oń¦ĻÅsxĘĢhV:”ÖłføXee GķõŻ ¤īĶ/|)ńlædńå›D²Į"E$S†]ŹzµwŸ¼?ÆiŚuµ’ˆ£ŠKh.@Gˆø'#?†jŒ¹ŽēöčšĆ6‹ńOÖ­ZKšh#—…ņń“ų<ü£ų… ޶ĆTµ¶†#\ųQižŖŲÅ Lgy;HõŖz5Äŗn©o~$Žˆ˜lū機Jģ§.†|¶gé÷ĮOˆRųæI²k›H­.Õn»³¼gņõļ‚Z“—¼ ĢmÖ²Ŗ“5ķzĢ2M§ÜAĮu °˜‚Žp%¢ĪŒ}?ZŻJś#¦;žĖūžŃó~ȟµĆ_‰§Z¼Ó¼'©]ǧkÉnI­Ų€KÆū<6}«ū«‘ģ5};Lń–Šö—¾Õa[Ū9amČŹą6_Ȋә8¦]E©č_ uhmļ$“Ō¾Ķ!Ā’~é­oо{Ķ)5] ‚kŽ'µ‘O*ƞlōüj9głM’‚’~Ē:g‡o¼ūpx'CÕķü9®Ū’fųÕl£.‘\*Ī£‘Čd-Óå^ēŸå‡S°ņ.™įi7€qĻ<’ZĻ ĶĘNśæĒ_Ćcžhä.ˆWˌöüj“Lņ¹Dkž2{{×iĶ-Ēž`\qRyŠ”Ć!Wąƒė@‰gh޵Y% ŲV|r¾ń’O Ž1Šh”ve–X°dP§• j ˜øņŁuEi$ĪČK©õģMūQėæ±OķmšĆć~Ščś ^„޼’3mžŅRĒBæxÄsš’KļkŚ<įÆųVź ļ kqjE&ō`ź…#· b)T§ū¾nĻžõž·čęź[¾±e]lżź‡#ØÆšž1ü-/Ņn,-–Ž;©_ϱ’Ns/!’ėÆ:{ˆüŚŌķē¼µŌaŲŠFūģ5[uą:±#ŪØü+ł„’‚›~ĪW^ńČų”i°Üi0Jc½d8eG†øššs³%£ņ‚_!˜Ķ…~\ VĶpžZÄŖøüEvŜuK'”Ź\¦8ÉķU7ȹmÅĪsō®ˆÄå#ił1%ŪØĒZUı 8=éņ¢%+¤ĖœĘ J’łƒ»oøć„¦Šf»;(*Ć#¢»+嶐91Ū "øjnn|'’.ż‘ō_Ūöbń~‚tä“ā‡ķ¦Ōü?*ǽ¤Ā|šķźŪŌĒc“׳æxĆĆ÷>ń” µ¼Öļ®å`6‚W„xö¬”)søµ¦šż÷ż>š8«fxox›w¹’€×·xɎčĶŗ=‡iĘz’gYu"Hö'¹‚--t_µy>dŽd*NvŸ’Y®×Ć–Ze”š]É,]øÉZółˆlōßüI Ւīī’ε‰¾a)Ą€žuōVŸ¬[ė‹oÆEėKŒH§oŸ’]wQØrTGcijm£E…=@ļ\ÅҲm@…bS€=½kŌ§#ĒŲÅm; Ź<`š½&”°³B«¹ŗē5ÕŠzśĀh”“q‘Ūpõ©bŚŲ†G#Ō÷䊏bž™}okĶØ 02YG,+Šģķ­odF±·eG9@NI¬¬7*ļAÖ¤oŽŻįt&3·=M^LÕī.ņ‰·Q’wŠ,\`Éõ ;Ż>ŻÆaä‘@©®ÓĆ:ēŚ“X5{˜ķuLmhņC:šE8•dń6™ØŚŽ.²óBĮˆ,K{ןZCm}x×¶—Ęę×pņČ?yh2p=j– m‰"·aKørGJĀš×Ä]BŅīoźšT±­ÄŖX€ ¦x'æįAq¹ēś‡ŠtĶnī”’ ŲNwŸŗ äb¼fžŁ¤½¹ˆó]‰gQŌPYÆ£AēÜĮ€#¾Mz=ä!®a·pĘį0W»ŪŠqÜE˜ķ.<6c¾»šW¹—*„Ū—?˚ͼÕg¹¼·ŪķP±Żøq“śVŽÖø±&‹c“nd€m‘2ø9&¹Śź)ŽŽa.Ģą: ĪĄnź^žŚ"a ¹¹ĪīyÆ%Ō ¹°ŗxęFI°Įø#éH‰HŅK«;Ėe‰“ĢP6õcļXVS[Gq$P”ƒä?Ļz ‹¹­EøUłvē±Ķ-ń“Šc&šŹ¼īéŒōOkŚ0Ćię+¬cśUŸMm%¹K(R7@"FśØ”ÉJVįxĄ©“Öø‰&k§ŽHĀøė@§šņĘ-W7Ęd·HĖ$™Ęp~S×ė^cāŸ…—¾½Õ.,5/ķ-1§3¬~čnv’: ŒL„‚ņ]5Œ^f7 1žÕKHÕī­/gŠżC®AŠØ«čR]ĪŹOHT¼jѲąt⣃]Ōn g'ĖČĮšÓ•–Č»ix÷Yó“Ā<ńŽ“ķæŃNė…Ż wÖr·B’±é k y&pčЁ“Œ |żć·¶æÖg”ĒūšH$’=jFUšÕˆ¹t>HVVĘjö&M<¤r’c£…C¤¶0ܗŗó&‰Ęį“ö¦¤©s4PÅås€½qA½=#Z—OŌmH‘ø 85”­j_ŪóA$į!X@±ØPøļA¢Åźšeœ åeŁŲ‚Ojf•Ŗ®ŸD²lpxn”Ų«&¹,z“Ž‹™NC*ō'×üśÖN±­¤ū.mdt‘AÉĒŽ £&ŚõƜČAż?*ō¼Įg,·÷%Jm'±µóXŖ—¹žÄpgQʲŚX *Ѧ­óŻæ›méVļ`āķ¢YČLjŲć󮮎(™,NkŹ©}Å#™ńÅÄš4WObe &ŠĄr‡×õƽŒ¤ķxvˆX[¦+šĒtdox\Š Ø”–t€rz{×”~ŚwXD‚@ƒŒsĶ8§Šģ„#JŽfesšÉÖ¬W[Ńõ &Ic™ 1SĻJé§6•Ž™FēÖ°wĘ]įWˆ4Æ|zŌ~ŪšöŻ™ģ®ä„xlmŒœgtÆųĮkął¾2|Zń_ĆōŽėĀZ–®÷q0Āģ*2Tvꊒ¼O.T±YoOgĖóęæł4ųĆļ4&é#²C÷I­ j9F³ČtL“ĻJąØvF-nzKn̲ĄŁa×5Ęėš†ėé!†E~8+3ŖœŗŽ°Ä¹‚\0ÅmEbaŚČ;b¦Q;iģoǽ yå%Ü{nÆ?ńVÆuu¤Ū\\EZtłŲ¤`Kķõ¦‡RÅßü×ü'ą |GŠ%]G@½™c½Ž1’„ē’ Ōųkc¢x«Äš^‡©_‹+YeUž@74(N ķļŠŻEeLDS=×ć§ģĒā‚šU’Ä-#Voųę•#h±–8ź£=}+ęČ®µ˜%IńKŃ­~$Onßg³Š²$†>2?Ś<ż;×ęļ‡ü?żoh'É擲V5Ź©b=­Okš]rśY_ńæŸŹĒwc(lĘĖóÕčāhÉb¤Ó±ōq§”2ĘČŪÖL’y„ģĆj³ v­Ó2«L͹“ŌN§eŖi× ou‚2@ńśUł4’ķ½fkķFŽŅ•‡™µ«Ēėšnū.6»ģ%ż¤¾|NšWÄmFųµ„]jŚÕ“QhæZ˜ ā“ųYs÷~‡½nüEżŸn<=šgI‡Ćś¶›>¢nŅq€€n½’śōrµ¹ų~1Ѭ”é;ź’=OŒµ_kÖ³n ĻĪõlćw·ĀWW:”h’©•¢‘dd[%½æš§Šõ(ÄĻøĖhłĄeČ?ó­9O¤É+©MÅtv>£Ņ'ƒĘ~ÓÆc“‰īgˆ‡ ‚CŽæN¢æNæf’ĀÄ’‚w|ų-ā=V;_ųwOÕm"µ»“k5£!’<•ݹ8ąz×E­‚ń×'ž'!nŒ\ŖŃ©NqKŗšON¾ėgĻæ±ķ§wš;XŅ“æ‰É'ü+ķBĘŚÉ¾Ģ¼ŲL1‰\wźGКž4ŻJĆWÓģum.īķ6ꞎhĪVhŲ¬ø"»©¾‡ņŅ«ƒå…Ķ©ęŠų+«?ńGæ¬moF>īžŚĘ3-Ō«ę¾Wżµ#µń_ģkūOYYŗ]«x#Xެ¶²0żV•Sł{.Zšš|­5ÆmwłĮGƛĆoį½)™-ŅAé“cņÆoÓ—Ļ€JĮsüĶ|–&;³ž‹p©FK©u’B„Tnē§„E,{U6᛽sCc܇ĀhZĄZ4ÕJu Ņk70hŚ]ķ’Ł$šh—r…éųևŸ‰g՟ n’³>ų§P:|wŚuåøc¹xmŹGŪ9ÆŹ/ˆp’Ā;ā}>kX|­.ņI†é ēük >ēϹ^ꦛØEuW‘†:qVŻnco6 Ģ õÅB™č`ևØx_Rņ˜$Č;|Ēø­ŻB’ķ3ƒ·8öŖr¹č(ŗN” æhv…6•fĪÆ&°u‡_»–įg<ćÖ³š2”C‰C:JQI8­„‹)ƒŒµLÖ0ŠÓ“Żk™%ć# q]§ÅÆŲčsx5 =< ÄČm£€g÷OžµvSК“Zœm¦„e£Ś½ū¬«7HĒ<Ÿž½}µą‚~ų‘ą+Ż6ŽŅ]?ÅI·¢ė?$Ė·![Ó§ZéŒ:»Q՟™ŗfžžńM·4[»ˆ×MŌ;ع)!WĘ=0M{ĻķefŗŻ¶½k©Ūk:nÆnš…½ĘC9裔•‘TŚ”‘ć¾:ų‰Æų·Āŗ†u­Mõ[‚ZĘqˆG·æņåā7ˆ¬°ŻærŹg§JŠ=OF¹™c+"ģ5ÖŪĮ# ';sžk³¦1±ĶųŽÉnt«idq‚pćo^Ÿžŗćü;m>­zŗ|ēJÄ*Øź){6UZ©™āĻ kæ¬ļ_Ó.­āU  ©Ėéė]GĮ›’ų¢śķ\ƒyo*ˆA㟄oėcę3L-7(³ēŸŽž/¼øńõĪ‘UM=Ϭ>ųĀ/x+NyīāŸV²" Ü0$ōĆc®?śÕė¼³GŅomõ Ib-½‚6ć³ŠśWO6–>;ƒŒjčŗž)7†måeū=Պ¢[f©\h‹op±y1ŻŪ7?:‚3ō5•HŻh~—–į”–§Ļ¶æĀ]Ä_āž‹c ‡Œ<5qܼ`n¹“$¤{gō5š„õœm ³LÓńĪįÜō«į¹V‡Šæ“_ŠŽŪöpų„ųRö(®ŒŅ›Č €Ķpœ‚Är9ż1_UžĪ_“\üįńy}m·¦¢ZÜŪ“„ć¾jŃF'ĖՔ£wę}%āuKŪ[étk[‰²‘6ՐŖ}«ā?ڃą>Ÿąļ|ų…£ZGįżS]Šā+ė2˜RÉĪqėYŌ¦šmt;©cŪQ‰óo‰oa’„*= [y:Š^E:]F¹xŠć¦yÆ©>üxŌųÖŌŚ|ZšŽ‹iÆX[÷r)÷g3É VQйėʬ­sĀüq¦ųJļŚÕׇōõÓ4ł§fHć諞+Ē>'x\x'NŅ5ķ%ķµ käwhäddĪGzWT)\ĘXł@ū’į·ĮŁ×ćOĮx½tłtļÉ—<ђVˆH¹ėō­ķgö@šó2ßZ¼»¹šå³ĪPVQŲšr8§,9<ÖīŅ>5ż¦žč?ücąkßź÷Mį­^ •-$;žc<±>‡ßŠ×ŸÅ Åõ‹¢Nbw§­sĪŽųÖę:ō=: eļaÖVMŅÉæäuĄą/ēZŚN„mµ»mfh!Ō-Bę¶—īĢ3ßõüėTMBģ:zx’ž-3OƒE³|0·FįséłW”iV$.Ų×*rĄŽ¦ŗ! œSÕßčš>„fmg³¶‘œc,œ©öÆÖķõ2Ļw7:S0c]Ž_séÅuS‰ĮRź>ń†ŸāĖF6€Hńü²«Ē^ vś„兵£D >s|”r2s]4­s’tĻ‚ælÆI’ ÓD×c·¶·»‡RŽ4æē›7?Ģוų{āŽįM.Żu-Ea(ƒhūĒ®+č02{#ų;éCE¬ö‹’§Q’ŅźqńĆĄśõ–t½^KĖ͜£ÅåøæZåō’Ś_yęGŁ‚1»ń5īÓ›Ųž`«‡²iśōńép\h¢}9ąĮćŸž½u׎<ÕõĶ.ÓQŃZS}D‘Jēl¬2Ējź„.½3×<”ā­=.$Óå²¹PŒēÜWys᫘•Ua–Vć ļ[ĘG—V™Üų*ÕŌ\ķŽkkøšpŹFļ”®ėĆŚv³ÆM|é¬C<{™UY~ę8+»ó”ÉRƒŁœ^«¤_x~ń¢µéÉn˜ 3Ұ/¦¦ bµČ"“RęsµcŌ4¢4]¦[­· Ę0›¾|×é^?ØĻå]\NėµKd:Ÿzq9å†e…åÅÕé2«¬XČć½l¢Ä.¶K˜¬rĄö÷ŖHĶÅ$z On,ĢVŃ­·Ė¹\ óėS²»ŒĻ*Ł­}4I ”ZEÜ13ÄÄoŚ71śŃ`±®¾ÓÆ[;õĶ$ÖvÖ1؈·–ĢTēō1eńRč¶©lšŠµ»0(žŽų’=kĢ|Q¬Ļr€ĮKbå‹cž{ Å«n3Éną•īT€åY½2EV»³.Cg^ēėHŹā¤Y%¾ ÷„ī\ŲzWaØGoa$ŗf›ö¹‘s…8ŻõķThW×WØn¦ lĄ’«#‘^™o=ĪÆf,·”C„ ƅ©qͼKąķz‹„"1%[/Œžj¶‘ÅŖdEĘĶ+X ÷6ą3ʀ܀pŠ[įD1Ż!ó9ž”œĢe¹ZļY²±ŲØ’Č¬Ų,‹œ~UčpK¶Č£ć,G4£.ŒQ‘Ćė:lIĄšYŽNSŽæJņūļ jń@^4Ž\žFyÖ£r¹é‡õ --$ŽĪķÖlź2£üāŗ_hōiķõC±gM»Xc?ć@ŽHµmd³SūŌQ¼ćŲžŅč6¢³“ķF\Ÿ¼~”ščj„ÜĖńµĮYf¹P¤š#Ē>äWĻž2Ō¬ķōķ–ķeI—Ųywž÷’Z³·B”¼Ić ‹ļ%aŠa†;šCÉ÷®Vāś}Qą‰œ¼«€¹<)õ„&C¦ė‚)Žęvg?+nÅzL6k%¢^Ū°deÖnꊯNßĮ‘ĄÖóC|U”bCķąµs>-¹µÓ¬®­,-£šõA!›€x*©x¼Žńv­ÜŻiS G9R ļšåŪD¼³Ōm!¼‘ädr‘‚ß1ć’¬k[hK•·=ūĄzT¶_M5ŪA)`§æÅox^ŅŚēŽ)ć*’6åē8żEg=…ĪŽĀāv‰’O8Āēƒ]¦±¬ā–뫼‚ĶĄ&¢1¹Ÿ+gŽüHń÷ƒķo-dӌZޤæ,¦>XŒćĀx³ā–©.ö%ŚóĄ u)•1Ž{UØ"•#‡Ó¼Gm¤éĢŅYīŸžĘ¶<5g?‹'{ց­Ął‡˜@ŁYÉX^Ķńw‡5ØķķäӟķDĒ5é^šŻŻ—ö}Ž£wnŽddmÉõqZ Ķ£ćč¾ š{™Q~V Ąæ,~¹­-0iŚ~–Öģ#Xö ^€Ž•brgžKØĻØßÜ[\F"XŽåsǘķU¼A¤jš¾=½»,JTˆ˜6 °÷ŠfN„Œ?ų{Ä턾©jevlåć±<Õ/|&Öōm6Mqu(ž y¢Sʃżj¹Q¤*ٜ7‡“@ėkwiwń[Ū]Ē©½øŸhĮČ'ÓŸ3•¾ÉĖ‡Ź‰³Ś¹»‘³¼ąķĒŌUB] ±Œ“ż¦y!„/§¶{WY'‡…ĢHÅ2ł†ydņ#“¾ŃW~Ūx~ļ¶k m9Y$£¦)Ü9Õé [)vŻ–;²;UĄ¶ÜaQŒņZ|ģt+Ż“P«*Œā¹sf¦J–Ī3œ}(r¹“$Ś?3k1ŒŒb«,ČV]ģ±ś{ŌŽ+Rm¶ęM¤>sJŽ{kK˜.^i„2g%U ŽÅt°{hČÜNœżźc˜ķ]ŽqĶc'؎fmQāŪ¢“’Š:Õ­7HŌµé­Ž8®öä±.JŒ÷®jŚ+“#sķæ…ß ¼ ö[³®éęīWXZLxĒ^+_SŠf7źŗ‹’’1q"Źƒū§ņƽmOZœNsSš¤œŠ³]ĻŒ‡z6CķÅ^Ömb}­o°p.Ą+ž5MY‘m¤™]Ū t®CÅ"ĒEĆß½½³¾G–\GµtEŻ™ĪvŲƒį’‡|mćFĖMš×†ßQµ˜łŃ±5Ų抿ųCū/hšeüŚÆŒfƒÅš»  §Ąēm¹Ļ³ļžŸ„wсÅRÆD}­‡l4Ż-5ŻgRÓmņ’‘lEˆ—uķMÓ5ĶwVŌe_ čo„hÅYd”6 Æ=2AõÆF9­7Āöī­Ø¬„ھaV\Õé>±’+ʇÅ6ŅiŗwĢ€!łˆĮŪŌ}+b9Ö[xŸāw}B-:źÄĘńć*ēŠž?ξ$ų—š?ÄŽ[ć*K6ÜU‡śz(RčisćŻV/²]H²mĶ“`OZēä‰Ry¢1—`0p tĀDčÖ§²üńUĒ…üGdf™#“, eĻŽĻLWźĒ…5ØÆ$‚ā22ō„Pø®‡Ó~ÕŅ[ˆÅŽĒČ#qē…|ŸūVüŗń]½Ÿ4]=Žm=].<•,nä徜“^=EiPÜųĄ¾æÕµōČ“ļ"9cei‚±ąöīŌ|6ńGü ~+»’óPóōIA·žŽc•-½{VŌälwŸ`}#V“H¾‰nt‹ČĢöWrpØ ä'Žæ¬?ų!’ķ[}ń汚~Ļ’|Kß<+•¤‰¤ĆßZ€yūĮp#ŚŗiÅ4ÓĻŁŸ>[ĆR$ˆ#޽óĀ:œ:ī•öY‡™"© 5“ŲŹgŒü[ų=ąŸ? ž ~Ģ,~ŻįOZM«1Ȝ‚Ė“ö`ĮJūĮÉÆórż¢žx›övųÆńą·­o-uļ źņYG$ØSķ‘>\ØUdĮß5œeļśÆĖžęq>i¾·|d›±X±yę3߁žõŚa5Ԝģ‘c)éōØÖ,ĪĒrŠ@ߖL¶ķ¬;f˜pØxĒ5“vb—†ėļŠŃ·˜æ7J£X>…ŶIašŅYbpF0:žŹ’ąŻ’ŪrēāWĀ}cöAųƒ®Csćļs 38\ŁžÆoRWvÜśōØęŃÄźŠ?¦§ho †ī,łrpĄŽTןx¦ĒĪ“–ĪEj’ńWŸR:~s|`ŃcŠü}c©eY¦‰«Fö÷aNß.ą)ŚēÜąž8ÆĶ’Ś?ą”ü)ā źŽŽ-Bę2ż”r&\ŸnŸdˆ‘ü…üCųs¬ü.ńĪæą ~ `–ĪīClģGļc$‘ŒzW*܀89'ŪŅ»)÷0«اvŃ4nĮTČĆhĒjÉņ%tŽįxö®Ølp°# »°#éW§Ś-Eš;ÕņĢÉN œņM=—;Y[*;AIX±ēķ‹ę…ʼEYµ” cųPuŅ‘ęhĀypJ़«}GzžŠą†_µ³ųoRŌ~ė†āėUŅžKŻŽiĉyi'ĖqSČĄTIŌĻėįGˆ?į½Ö~[Ż]jX?ŪžžO™n-eł¤‰”Ųďl_Piŗ¬$ÓtķwGYĘé|ŒÜpAĮQI6:„·‚0%ūU‹"²įgŒŽFO ‘_ŗüö%o‚?įųŃąķ6ųwāՒśŽ<ļpL°Œ ä8śšĀŽņb?œ‰Õ¤³Œ\ C.[åžjī||‘:Ēę€ŪB€xčjj-,g7ŠõK˜äócŗ¶`Ż7œ`kמźvZĶµ•üHAg]ܓé^lćfbĻLÕ¼9„ČåšŚT¶ēV’"½³Ą>#±ŸD¼šĒ–Ö²Ł2ÉlqņȤ`Ø÷ą~U„ ģa-OKk酚, 3€*Ś½ŌJ‘`?NzW³E²Z°%Å“‹ ɐ_Jź’xŠĀwē¦{×dš$¹†bh+“œć<֞•ce|<‹qäą ŽjŪ5‹4µ=ĘH&“X¤AÕˆÕMy“Įh·;UՎĆķšŹLŽ2=E5+ÅIdP›q»vA«Ś½ccāŠ«„$Źn<*M#+ž#m.ä…Ó­’(%øūÜ’ś«Ļ,ü"±OS–TŠŁrį‡Ė“q•÷ ®q·:u–µ‘iķŗEbpOQYVZ„§ lį†8ŒDlx “ŗÕtŪsĀöVś†čfóÖd Ü£®sų óżNĖVmR[«…ó.¶ó:īśš Œ;œķ®öŪ‰$Ō!1JŽé“]¤ģr· ³Ź-ƒŸ˜śS±§³ź^ųuįM&ÓTIõ¦tV”)nį}æZöx/FƒQ3é7+,J£c‘Ł§e(ŲņYßÜˢà ‰ŅÜ0<‚sž&¹Čå°Ó^óĖ_+ę$ŠŁ¢K:O/õYA†m-_ęSĄ{ ś“ĒÓī !|°Tœj ­ōk¤˜ 2ƒ§”śÖœś’Ęҽó~ķŲŽݦ;LVQÜė.—ņ’ē?Ź»Ż68Ķ¢I‰pē>†āģf鍞 ±! ¹eĻ +¢ŸĘ«{jŚQ¶ +ó±ō Ö,éį ×&ŠF¤–‘6 ŗąš{ל]éś4ś“Š$7ØüŒįśō ·}§Į$å”…¶’_Z”em*M,.Ū3NįcM”ÄaS?θ׿¾MJņĘļä…[÷Y±ž9¤”hBiāŒ#:)lč¬Ļųj{{ĀÓbG^IBūŠ ådz#>•q —6rµ«ŗ®BżÓ^āM’\ӖūJx£Õ“ęNA±ü3@Ōƒa©_6Ÿ"ėp[Į2a”ūż½Oį«k;-Xj,YTü¬1ÕÉ4FØ,mgˆ6D’tŸį®&óPlļåI}„®;µŠG)&“æŁH%sq*ń¹ŗÖÜł–²)aę7ŻĮäP^ęM½®®±J×A¶)Ē=ėBÖŻ¤„ ńĶW/A„c”³Ód‰K}Œd{T:“݇HQŒ,OŖF°;Ÿ é‘jE욓šĒ,-7rźzq]TÆ}mįżNźĪ½·“.T}ĢōÉ„(š«™žÖōĮi<śœńŪMå ÷²Ž•ĢxɤŌlćkŒ6®Į‰ØĻCYJ=ĖPīMįéf eIck¤RFŻ­Iži•ĢڃÜȗlĄaøSŹ’¶ę»éŗl6§NøÄx8Ęq^kq¢Ék}?š¾|[÷ĘaéYIjj™ź>—ö˧¶²)(rGZźm­šÖ-|Š”šµ&—Fc.…§^k¶G_“[Ķ:<‚Hźą¼­xkÄ7-gn.|=+‡µ™só'Óq•–ŗ> ÖRZ¼+ūĀ 1\=?YÓ>Ģ­åBXšri9r˜–Čeņē)\v5nź¹ˆ%ø`På±ßŲÖR—AØŲ›Hm.oµA~eQ…ŲqƒPϤٳ–ŠuiGŽ^øØęfŌö9Ū‹ ø/"ŲwĀķŌv®¾ŚłtŪķ.Īžę;{9pZVčƒ8Ļó¬å+”©6|Ķńć¼ŗ§Œ_ĀvBkŸ ؁s(;’xź+MÓ¾Éx/Ž{‡i2sõ漬U]ź_£}o8–:¬o 1ŗ’k–ß$γJt»ŗ”PƧ„o_Ł\Ļ’±#ĀExU%v£Ō½ZŌ湏‰¾kšlŻč¾?Žę'†Šä¤›,¤tĻ<ēҼcF¼øÓ­ŹßGåŗ±łIĻ؜ocԊfžµÆx~ŪDŸPń5ĀiŚ +38˜¾ÓµTw$ąWœü/ųšĻÄŅÆ…üą]Bɤv’Ī÷Ķǘ‡…O~ō½†·1©Q|½O£|wūĆu„Ūų³įŠ.¢ŌnÖ×Oø$Ēó ćҾXÖ|'ćoῌ“‹ŻŶ/óĆ( L™Ęō'Ŗš™Q¶ĒVw”īš5Ć“ )Ē5©nÆę;gåf¬­m£”;›0Ų£²|ōČČõy­±°åĮµ“Léq¾†bé—ŗĶÅŽ“ch—N"3'’#^Æh‡…Ę§ÆŚŁ1Dł®?—įG²fR¦t~ńßhpjI#kc³÷»Ł¤e™³•¬j@Ī*ĘՌOÅ\¾µŪ[FBG f‘wg§JÄ鋩OżŖŪAŌ§ƒxDåFxę²|C.•ā‚Ą’ĀA£^4rÄ[ę‘£~„~5QF5äĻ„>\Śź³OŒ,5»a<Ÿ³GĪS{?ė_æŠm¾xóIÖīōÉg±|[¾:É9üAĮüė¦ĻWRsg퇄ļ¬üyš'Åv“Ū?†ęšÕĢ‘¼Œ LH8\ž29ÆĒ_ŲŻh¶¶ŗMź”XĮO÷†ćƒłb®R;pi¦īz~ŊQ€<¼œśšŖķoĪ É8¦÷gÕPZQE{›-»"“ķ ³†ō«]ŽŽEŌKdņŁŽ@KjĢ[w²äļ=ėHŹĘF„$Ū Ź“Œ×Yk£\Ł/–³+Oõp3ś×\5Vg‘‰§xµÜõ?ų)uķēĆæŁąL¶×i؛’ÅoØI92}‘Dr˜ćB~ą!Tćߎ¾lń‰īõ?‡śtę’† ųw®™ÅĒÜ3‹œbć'ößćcƵ½rĪžĆmß3 ĀeG{õ®CL·Ńļš4š 9qĆ:W=¬}ĶU 4™÷wĀ ]š jA–ƲēvJÆ`#^æ†õ&āĻS³Xg±x€r vS}‡Ģ0žó±źVŚ­Ä┓,j3Ū¾…ųxÓjö—P›“"tž™× 0“¢>]Y_ųāoģėāė‹h<=®–Ō,$s“Gv7vÉD?Źæ-~(|.›VŗŠę8n›R²žkvKg¶Iü«=¬©ĶŹ=użŸö}Ōķ|iq£xŖ2Ēt܆=’>ķ_”Ž7ńōŽ7𒆾x ąµ?‹N>ß}i ³In£—|Ē=všŖf™Ķg„IĖ–1Õś#É“oŁFóā'Å|4šWŒtßµźqÉ=ė“{—J®ēVN¹\cūæö†ż~xĄ¾Õž|I°°Œ[Eu|³[ÜĻ’DE#b¹ĮĄ`{sļ× äŸ¤§RĒa°Ł|UŻłļåg÷ŻżĒšüNż¹>3ü Ö4 āģ馒hźG5‚Łź7œ‚öŒćōėž+īψVĖ«|ų€š•µ”½š½ó\Ā‹ņ”{WŹóé’? $ūŸČøœ«ŁF2R»głė|?ÓhG[U.nūĄJĄČW¶iö“Ɲ¬ŖNĶ|õw{Ÿō‘Oż’•æ–?’:ķ¬ šoķhdxJ·+Ō~ø¬sbS"Œ®MsĮ+I”z4łŃ€;słUO7›¦^A[©ŒlŽ8čj¤“<śż”a+’‰_tĶ[özšē‚'ńWˆąŽęöß|Ā%†%H•› ” ųćGƝĄ>/ń/>"xzē@ń~‹«IĶ…ÉÖĪĒp*Ć ©W#Ø®:ŌŻ®|u,ūóIå*ķ §.æło}·é¾«”Ėé6F<•!¹t®Ķą[`-Į…Ń€!”~•Č}~ž–"¶ —c*€8„å³ø‘XśÕ&ś„aܽ{m%Ž…xŃ>Y«Ėd»J¼“Ÿa0ČźģkbeLök ˆī­įxĀķ*8­hŅ6t@Ł|€zUĮõf®®Ś†šat‚vƕaƒœpZć †”.Ü×D7*qŠæØiM©iw–0Ȱ“‘•BŻÖækæą™¾2żžü/ū?üTÓæh/ˆ¶ųƒje³¶Šśį#šK1PÄŲ±#Œžzé‚Ōü£ÅǘÓČ«ŌŹ"åˆ\¼©+·yÅKM~Ķļä~4iڽ‹ų¶ÖĀe›N»Ōgø ·€ŒäĶy‡ÄŸ j#HVā±[€ŖŠŖÆ§¦+ž£>ņ‚²Iī|ųŗ¬¶WGvų‹8ÆKŅn`y"(»²GNÕēJWŠõiLōū¶i¼­Ė‘Œ×u 2`žT᦮eMsKIō;¾Clˆ?Å\oĄõ²ćW€ģŅå»]ßtŒŽ u(hy˜™»3ź_Ś"ś’Ę!½‚ōDšm¹1A(PkćĖMUžk7ŚŒ al;OŽĘĘ­;3ćėQ—Õłēį]üQć/x’źĖūCVøó.-­ö QIų'ņW?i_ü_ŗ—HńģZ&—+ŚYĮČ6ؤ¤ Ŗč~yaåķR}VųGńWYš…ķ¦«£j-ö˜ˆY” @øŠ\Wź¶ń£Fń·ĀĶoZŃ­Ž÷QHšöd·#“ŸOOóšØÕ' ‡÷“>{Šé:Sčö¶v›ÉhcTüq\uŖµ5Šß×­_ÄśŽ-ĆZÜŪĻöˆpŪ» ƒė\ƇōŸxÄ ­ųfĪćIÖ÷ÄŒGqޛǾ:ׯ©įbš.OD~ÄxW殍§xĆ^&Ö–ž2{uk»%åĖ×#ߊłēöƒųūć?ʇw®YéšF‡„£%…“d*9>€ VÆŌ\VĢēĀdķOš]–Æu—ķ¼mĘ6÷‡Ņµü91Ń5?[҇ö~£k?Ÿ ±ŒPó§VūAO–ē[āŸų—Å—÷®µŖßź×nAĢĻø/ҹœF6µ˜“ :śÖR•÷:iįćē–fmÄŚdÓn•|lšœćłōL²/–O#®qI3G aŠŁĮĒZåŲ®—&x"Ó¹łū’‡ĀĶńkĆ>…,3[ŁXÉ#¢"v<ųœ×Éž¶ˆŖ*–sŽy¬ź¾o©ÖķS2‚”[=qŅŗKyv ˆŚGjęä=“˜ńn–gŽ^ŲEÄ _šTĻO­t~øūTLQ~aŒŒóZ%ŠĘQ=Š"£łĮ÷ą•Ē­ajr ĖW²ŗEū3żąEl»8#Ć/4Łü)|ڦ“w,0n"įü¬= ļü7³^‘/%‘¤N~mŻkJr³2œRe‰W’o­t@ńk³ėżĒŗ§„Ģ¹„FĀ(åłCgŌöƧ¾ŽXxĖƶž%·ž;]Hö‹GąĀsŲž¢“K±ęT‘³ÆJöQ+€»å ˜ä{Ö§ļō½+M’ÖÖŃme.YlžIś’h8ŖLĻńÆ`ó‡˜+MӐ0k…Ņō)žņkć Mn¹9čzR9$īdź‚ī[©J}xÅcLŠŻ+DІōļZF]Ļ&Gg`öļ$»CD~ļ+Øšžc©ļŗūDb`v”=G½ja'©£yi6‹3ŪÜh،}+“Ōģ­%-$a›Š.Č*ŁŻČŒ"!š>˜=½«®µŗ·Š-Zźia';Iū¢KcĖļüU5ÕĢŽj"C“³×½į9,ēø”:—vūPĢOO7öq 2mć8ĻAMžŌ“܄Ź,‚Äž”ŽIJĒaµö+S5œūļ.Öüy>Æć-{ĘŚøMBļ.v@72^94 3:óC½BØb–Ē"ø«»V¶y ƒ“ž£½1š:>¦°©ŠS¾!ÓŌźģ斶ؤōö¤&Śk‹™į…]Ūw\w­ßģ;ų!ī×r>vū~ [^‹¦Z¼ń/ŁŹH@Pžžõ/޾ˢŚ*`ŻņPdP`Ļ ‚{…ÖbC?Ī %ŹæZīę[<&x$UnCc#4Y…ŽM¶H՝«ém¾‘I)·å£P7y 4V÷!˜ī^y=½+‚ĆeeĖąę€;+Ka «,¤†? ©ā¾@Ž2±ČĖļA²<ĒŠÅp×w[4Ós×±Æ)ŠĪĘ]=kLN¤ēŅ‚±¬ŗ¤Qī[tl“Ąük’¼Ōlą»’F¹AŸ˜¦€2 ń½ö”V óĢ\ąBr=ĻJķVņĪÖ ›K,żœ‚dąśūŠ#ƒ’ÖŲŽ†‘üü—#!>•£wf f ÄńŅ¦Hv}.ŠøJĖŪ5ĶϦ_Cr]đ<Ÿ8@Ū°)GĢ :}¼ĄG“«īēŲVī›¤›ąŻē ĒŽõwčg&Gj„åb\ŒŒń]“·vļo#"vō žfOqµv4ŒOUšž£w„Ųķ 0Ml’2rC/Q‘ķ^o«üCŅüa¬Żč7„YAi.ČĮŚW®sõ¦%Š|? x~+4ŗ[h²ĪK2Ÿ¼}kƐéŃm•-ćņŃCr84¤É_uõ1˜łlĻNŌ4ŻöŪȑGī  }kĻēšZG —d3 ]ģČż³ŠžUc<ćÄ6Ķ%턆Ÿi6_w̼„#Öø½OĀ–Ÿ<†āń-»0¹!½sU`·sŸ]2öĪv·u“Čgƒƒ[r]Įo ±ł®ģ>•œ–†~ĢыĆö7,.$uÜ0ĆĪkæ‚KHć•ļ%m¾Y°ģݳX¶R>ń·Ģó«ÉŸ¼"©ŁėqŪŁ¬Ėó»‡~µĪkt.Ųų“OÕ4ŻR7†—a]²t$śW) ²I"Åø8éĮąRgD[¹ŅÅl—0„ø• S’śQ«ų»Am,é7@¼‚Āv|ČÄõŖ-«črv×6’ „f™°§Ź»;IĄŚČ]3ŠgµL‘ƒŽÅ ^…–5.pÄÆzĘ:ÄĖ"6Չy¬E`c&gŁźŹ"™bhÕcær¬‘˜Ē gæ„\¤JV2ģ žŹqu¶A)łK.p+°Mn`̓̿t`¦µ1ęčUM@6£%†ķÄ|æCUōXØ=NZāk‰^1h&bųEtV‹tX²•Čh5)]<ņݰŠQČ'•4gui3+«#œą÷©r±‡a°Āņ±Š9śÕ;­&x™J2,–Éģ*‰‚§b«18Ē#NtŠį™6ļėI›.ŝJx¾Ė >e]¹”õ®KŠõ’Ž„–bó˜ocµWźkžR²»:!FēAyšćVŃļdŠņ$Ür„2žb¾±ų/“įĶs{¤ŪO|K ćłé^63Šō©R±č:6«kupėmG²B„xĪzWG©ŪŲµ«'•2ĪĒ?)ąLWĪÕ­©Łdqvš ȊIēg!p~č¬ J5“Y–ä‹ūĒø­h¦ÉęŠņ}sʑ[ź–š”7zž³;,I–bÄ}Ž3Ķ}Gšēö&ńŠē±ń/Ę­z?[ŹX4ļ$ż¢Uė°¹Ē9Æv• +³–¤­”÷_„<'§iߌ^š_‡‡‚tę+³…ęąŒ—#óģO¤xoĆšŁĮįŪH.ü@‹¶[ĄÄ37łÅwÅ%”Ä¢ķfP“š?‰nµ µnśĘKM»„%u'æ=kNĮn–ņīĀÖņ•F÷Ęį]døn> Ż[Yųgž'śÓ§ŸöuŻ_¾F}k.5Öī“łõ?˜tkÄ»Ū"\4œäqüė¦!Äē¼qā/“ß[ŲxkCCLϹŽJ;‚łõąqZ’ųĀĻĆ’ ßLx-µo2•{¹>éäm*pzęŗ£HŅ4Ķ««]RŚÖ±FŠź’xœćėYZślž"+ŖŪYŻĪŖeöĪ? ō|K=Š`»ŃmŅŁ„}‰ˆņ»GmµŲų‡@ńwŒüFEwŃ¢eĄņĪIéŽ“ĶbūœeĆT“F•4‹K(3ŖGŒ dćÖ¹?ƒž<ń߄üHŽŽk›- §i^ aG$£5«‘QŌź¼cšļŲj÷ •%·óüɁmĢp8Qč5»7b!:¬&>łū§Ņ³ęc”{6¾ŗ2 ®&F¶8<ä~Õ¶…|#†Ńd†ĶFÕPsøš’mc³Š¾jš#Åu\\.ŠŅ19śWO}”-¼Śt7ó§šFõĻQéňł×Åśm’…īeŌtŌøä“’1Ī?½·¾1Ņŗ†5č5x,µip’~ł™6eļŒżGziQV>×%ŌüC,Ó$Éw<¬AaĪs޼ĒBió”¼’GxĢQr[4‚0čC”é³Ėf×V®²a‚ŒĒÜ×ŃŚŠ Ó“Įfó$‡jĘK[ž§·§k~ :+˜e·¹nP9tĮüMtžšÖذż²Ķä–Ö6Xłé·óŖR¶†SAń§Äėįæ 5œp¬Ž@U·.6ǁÓė×5łßš³ĀZŻĻŽ,ļ4[K™µ#…rĀR{gŚ“9Ž›„Ÿ~)ŲŲi’x;ʦœÄ“Jļ&&ć{W›|YAńØiZKż«Sd’0Ļ‚Œø?69Ø·S6ģ~2x‚ŠG}ØiūÖi`”tf’ėWœ]CäϾcšxĮėZÅŲҟaė{!Ņu+fŗūL PH*sÖ¼|^šTŃł)ā=oxė_ŠlāŅŽ;<øsóĮO§Zń/i¶ÖZÜ¢&Żržnb`ū×=:˜źŠ>•š~æ§|QųY}¢Mm{}ā Ĭ‘ˆó`b9ŻķśWoūžŠŚĻģ“ūM|7ųƤ^Ƀ`»ū©jI $¤#;uϱ驔“¹ZŸßĪ—ÆųwĘZO†ü}į‹˜5ė–«{ ±¶U‹('ß0?væ õø4-vžŚłGŁēĘĘ?Āx’I®†R‰čæt;_Ćrj: ļk¬ĄVźŅtᣑįƒõĪæ—Oų/wģé£ų’ĮŽżŗ|”źßY*č^5²¶ˆn·`v‰$^ŖQŲ®āz2W<©ź¼ŸüČ÷‰4ų­ļ¦²µa°>ÕĖżßrk„ņ&>n>^1žµŻ Žy®…•03Øł‹g8Ę*d¹(9qЊŅ1¹ĪŠŁöŸ1‚mĮģ9ÅU‘Ž_¦G$VˆĪīäŃĢ‘J#'ēa‘ž¤VŒr”R£&ØŽ–’B”d,88Ævżš~=xÆöPż¢¾~Ņ>±ŻhŚ„qj‘“¦?¶Ł¹ "Óī–ėėQk3Ŗ”ž›ž,ųgć‚|#ń3Āw±jń&£i,lVF@Xd3Ī~¤śWe«é­4Fą¹Ü™üEsW„Ė'œ¬|ńńĀvÆĀßZG:ÜĘßgn†)‡Ż?˜żkņūÅq Ķķ¾±dmo­${=NN%‹ ?B0}æ ä·C6Ļēož Yū3¾‹ŖÜxĖD“KūūSöØę·ūTg‘žuųÅ “ķĘĖ Ć®?„uR’µŒ¦QƖ‘Jd8„¶BŖŹTÖŗ ō9J±Ę‡>µž½¹2“ĢźŁ8ĻŻ«*11bųĮć”§ó *@¤IŹZ'iö„HÖ¶§?^ŌÓ/I #*¦V'Ķwæ ž%ė_¾!ųKā÷ąńN‹x·d@™4żd|va‘Ž•RŽśLžų’e?ŚLųóšCįļÄ?ŪĻ<öi®hūĄóŽ<’„YøīTēčkõkĀ2šī„§é·ŗT–öŗF«Ķ Ā9§Ōń\Ubu&wńÜł ;FŹŪ\Õ}kåĻŪgöjŃ’kŁĆāĮ›‹[ųH ©xjęår°^ %yź3’§8cé\]ęĒńį†©šŸā^·ą]fÉl®!–Hvīf1ΌC©ĻkĶ-ćšŃ×És ld‚)JIźe%©ī~ø—S¶„,Ź-\œ±<q_Bų'ƞÓ®õåź-ŗ(łćūąŸOĘøk"9M?x·D°¶†}.ś{ŌAó¢§Ī=1ĶxUŸĒ VĆĘÖrĀčŹūęB~bqŌzžšŃ÷Ń>śš—ōÆhÉ­iÖóY3mUĻĻ§µz—vĻˆĶĪ8ķ^Ż4śœ“6” G8Yó ł±éŠŽ8&S‰I‰q€kSjr­Ę‚å†ģ*}ķÄļ ¼ńŽø¦Ų%cŪ-Æ“˜|5©]]€×‰īWÜOųq^ c-ĶÕĢŅŻŹz–äš=…#h#«¶ÖķįFQ!YW+žŲÅuži0BŖŅÜO\śPYīKį+Įb°Y„[c}ķæy‡Äķ>m>×EÓ4ū‰M¾I»@NÆOüwõ¤Ę'‚¤š×†RĖR”ŪŻJϓە ©¼cżwR‡P՚ķE,ŽX”ļŸJ`aėSŻłŚ‚6Ųė_ŚB¶ęī5>Q’~ńͱ6õæģ{Ė?RÓ wAę&>éĒ5FūS¾H#°¶E»gēĻ&‚›Š¹«é—–:vys¾Õ&?+÷ń×­£xžź;+»KÄJ?Õ7p1Wc)\ó»äÕµ<¬åefł2ƏĻs¦µÅą˜„## { ŌÉČåį>Öģu [Ū™”u`Ė"ciĻjģm„›R»_0†Oīā¤Ż‡rž¼· ›TWTLW;©č[ģa˜æĪœV-”SÓ&ŠÕŻdeģ 8ĒŅ‹2=^swq «Źõ¤v¦ )Rƒ|§=ÆC“žĮ­w„^ŽNh*.ÅmJöÖĪÕnå>d„üƒĶyŒ ?‰5ˆžę;!“³Ģl 4Ņøå+”-§ń?†|•¼†Ž+‘—”:ēƒ^ƦŽæö¬ØSƒ ;›½kȈ45]6ɗķ!8š>ՙżhÖĻpc ę²hҘķ\ń]¶—>›ewoc’5sµ×닼ž;›¤Œ‡Žul䦑”éZ%ģ6ö²‹čćs"ł{ŠäÆŅ°®#³–āf·½ |‘ć’hį®c‘bxŁøé[7~†ī>ņK’÷(7«‡·“q+[¤…¢fĒĶŠS°¬Iwąļ:Š‘saóÓ5ÉjšyҚßÉ"šwŠ~“2¹Ž³JÕģ®­›K¼…ZI¶ā==ėWŒ®Å°UŲüM\76F–™Ø=¬@ÜÆļqĘzĮŌŌA³š³·ŅYŁķ%IQ¹ĘÜĻj·>pЉ! ю~nh5Œ™ęŸŪ׺ܶ1'i ŲĄ ;U Ļ5Ž·%³[»Ä¤ļōėXÉ5ļ„<™īµT)ßsg¢œWØĻy§ß$q[ī…”e³ƒšGTw7cū2Ų¬ĪéēƒžÕšēķ=ń¦óĆŗ­—ƒt»Čīõ=„ā\­¼#¹>µĻVVŌõpŚ“Žį^›sāKyuūčķī4Ń,_g,ļ¬9$Ŗ×Ó¶*×7wQŽxĒÜśWĪāŖ]Ÿé·Ńć…_C(Śuż÷éŖįÆĢf—h¶×:+N{ęŗ×Ų¤Sńžu5Įsś+OKšöWF\\}Č­;>Ęž ­ ‡'%»ķUĻBQ<[Ž=cPń-…ÉIō}>t H8ĄĮž5”ā/¦£įfŅĶJA“6ŠGāuC©ńŽ-ÓÅҊŚW_†‡é§ĮŻręŚßMÓnuĆ«,qŗHŲŲ{cōÆ"’‚„|ҼCšƒĮ_“†l­ķüWį½bŽĒPø‡å3Ł9 wב†}MCg·ƒ—½có×ĆÜ«ml†W’L›³Z÷-!¼ČCļǽpĻsģ0Rčt 0G š{ϼ0P؂=‹u3ōĻæĆļXxŗ+o“˜¤DĘCĘx*:õŸŠŽŠõ½ž€ Žާśl ó9HåXvē„\»Ōŗ•ĻŠŠŚčövšB v1€’O>kjŃcŒķZāØĢQ­‹‡iwq“Śŗėe˜E ®įA>æ„s4ÕĪ”[SN»ÓLˆ‘]Fa;ŗsÓõ¾;†OxoY¾šÅŲ&kyŒ{ƒd\ čߑ•km*:Ex'_Õģ|3{ Åu*iņ܇€¶FóžSYŗ­ńX5 hn“ļbE ³‘į•Ī·@ńOˆ“}¼'i«Žæ‡÷—Kb’$@õŚU*^åę}™ķS)ō:iaŅ7¬”7 ”V/'ڳµ{3ÄW(ŌšzJ1²±ŅŲØŗ€>T98*ŪąīPx«¹ŅÅóY€H5$kp„2.sļZ©I—”ź”…͹ŚŻ Ī…€;GRlhR ›«%t0‘"b?Ņ·§#ĪØ?ų(eŻ÷‰’ąś?‰/„{‘uń:ŅĀĄČA12?—•ī8’3_ ü Ō5ķĮž.šö ņ<ńéŽe»1Éf‰¹ ųk©ßsųēO‘“÷Ląn5™%2 ’€UĮ9ĆtžuWJÕYlŹŹį»Ė™žükč}3šĒwšWŠu_ 0iך‰ÓoC2öśōżkō—ĮĖŻA ™ß·°öÅuŅ–‡Œ««=#Ćŗ >$Ōµ […ÆĀ—į°Ī£9 W±ųGF J×sNb‰”+†k¾…)«Ÿ@ų?SšzxK×5čMՍ¦f•UrX8ćėŠųūÅ>*’„6 5ŪY¢ņõ-bf))ĮXŽC³Ż+ǵYé`bå+uńoĆouåx—M•!”łsH±œ$g<{ר~Č?“wŒ~üsų]6³«»xćVOÕRAę2Å0Ų śYOįW ϬĢņ:8ü¦®ZJQ’OÕ[š?£ąw‡wŽ#ųÉį_…qÜxę+ię•“ŅĖ5Šn_ »ŸaŸå]æĀß|4ų£įM7Zšsi·ÖŹø’ŻŌyör¼’'U`kŠ„zä;8Ębaūé9{=5čŗ/Kę«įWž+»»+wæqLцh€9dqĻ5ä_ü+ćMOGų‹”ŲųŽYFÆįėŪ[pŃ|NŃ2ƒĒN§łTUęŅĒj”ŗēõą„Ō4Yµ "ž)-u -JźÖę뤬>łļśD‹tėøƟÄÓ³gżpÕUSF¤vp‹ūŅfķķõ‚ŁĒh‘˜ī’Ņöeģ?smt<²!UÉĘŽs\“ĻŖ§±b)ļĀT",‚A5µ¦āufņ3]Ų¬O{żŸ~6xėökųĮ¤üeųoaį½CWŽŚk+Ū+ōd†öŽ@2”£åX0pkęOŚß⯉ž<|sų‰ń{Åz~—¤źŗÜ–ĢÖveš8(„`a’p95j—)łõ>ĆLjßĘMTt}‹F¹Ō¹½t±āś&Ńo±ėĻjč„r³žäĶ”PŸ—,ņ°u.1k§µłQCTcń©;įOS”ŃüGa¤>«§ŻŁC5µå³ĘĮ’…±ņ°÷Ö¼3Äė é×lŠņ\#†SŲĻJw¦u¾ ½øŃż T3޻ˉpĆĖc·9ÜJčƒ^ēUŸQńüåŒ Ē$ŒtŖVŽBæ#+œt®‹ŠQŠŪY#ތ‡OOZŠņ짚+¹,ķåHĆ“jX~5Ŗ‘ĮV&ż¼Į¦ *.ęąńU¼as¦ŪųCÄ­ØŖĶm¹“aėžy5S•Óģ~ųŸK¹’ęHŽŅ9ŌI_īŸJ¹į]BX.!±wbąc$ņ yŅfōĻ„ōHüČār¼Ÿ|ó]żžåį×^õ¬Bäģ_ßqjŹ /ņ6}¾g·æøš/ÄŪ’k+Ģ&āĮ¶ćä<ńėĪk¾Żžuy-™õV³ńÓÅ6šźŗ±µŠ4—) õ98ÉĮƀ~#ųŲųƒ_½“°2 5&eVC@ķE^[hy5lō"š®§}£_ZjRÉkwŽAÕMxoÅļ‡śE—‰µˆ°G1žÕc%į‰~H¦Ļ?/lćõ® JĒŹęų5=‘ŹhZ…œ2Į+HŖ¹ūŁĘGµ}į=JēJ™§šŽ¹5›HĆĶ &ĄöqéSķ …k[DiŚę­©4P]i6©rü)ˆcxõ WÖž)źśZ\xWÄŚg—§) Ȑl ӞėüŖsź0t%cÄ’mƊVŽ?ŸĀŽš{G†šMĶÜė‡Y$ćå$pAž•łŻŖ>ÆÉ[«8QżTöõé\Õ*6{PĆI£¶šÆĀüA““›LѵO*b^'ˆćp}i·×Ž"šF„©ųOÄĶosylŽ›ˆrĻ|}k–ģčŽ u2“Ž ē·œˆWw­zeµģwH„Npj%3«%±ĖųŸOµ{ˆXķēWüąUµxÄD“·Ÿjǚį*v&Šč&S+»Ņ„µ…„Ļ"åTö¤gČĢ{Ć«s}æī·pƖń…’XŸżcV4żD!n ąUĘDJĶčK6ēl‰y$zTrHHßnĪžµ¼79*й‹%»[ÆŚ×HŗæŒŸŽy1īąõ&¾­šoķ=āßü7Oų/GŃō{YI&÷”éžEtFV8„–§«>[ńpŌu™§ÖoMĘ£« ,×wēØöC@Ō‘į‹É¶pģؕCHa9NĪ ļ óזī+rŲ# ƒųOz•>ēG³!¾¹ge¶UżÖ2r?Z†+iō–ŠīŻG•Īüp3VL uÖŗ³ÉɐĢ}:ĆŌµ †u “üō§s’¢±™Żyö3†™]OŻäƒY^¶œEsk ŹžC“møu殚ŌäØģlüBŠ¾ŻšŪārˆžTÓduŽ3ČŠü"±µ¹)ķi²Œx+ėüėéņŲūÖ?~–1½, —zŸ”B·¾µ“‚WĶ ©®ĀÓʍ¶Ÿ8TžwŲ€WŃS?‰+ĄźüāųÆ%¶Óõ‰ Õü€®p­čkŻ­„¾Óµ >K%‚ø8|ŒÖōĻLöļ„Ņ⁇ĪēĒ!} š‡ĒšŖA¦µÄ1ÜKs×릚QœąätÆgŅķ“K+hįAČPĒ&™bķ­¤n78<6{VxŅPµšHNCqœŅ9ĪŪFŠŹĖģP]D­i…ŚÜäÕĶXicFń,śÖpé 3„…€HōŻKÄV §ŪÜj,ˆ§,¦>~™ė^#āitżjęy4Ūtµ¶g%„ö g1¬Ŗ¬ø|ō隼ü7·ž@ņ˜Č mõ ‰JĒW}~īK{hŃĄ;›=j¬“ĘŃ¢Čēpē É²Œwņ¼Ž–SfÆ Ť—ϾćtŖz†čŌd|VŪ¢[y·oJؚX.ģĶ @[vrzjnäÖzlšrĄī”žH«Ó=čU`#ƒŽŌ(•51…§ŁŽŠ‡“#‘ŌW˜ßč±Y…eR»8=(2)ā’&V|°ūÜw®"żdšpŃI&ä<qA“ZŲÉÄfb/aWćGė^S®ĆpŅŻŚé– ĻĶĀ}ß„%«ßź +[Ü<”#Ź¢ĒŚ³“ŲnuMŃmwBvŒu¾hÖj~>Š­uŻ’]E#›zdĘ=sųž•ĪYų–=vŽE¶a)Į^āŪ‰ į°G\ńšģ ±C®ÖQœē­&„åc9ĻŚy@ŗņFF)n•/-aٟ=FėXŲ”õ<śźż“y\yØ.ņUŽ‚“tżEõ;fY‘¼ŃT“"$“š[f(†0só `ÖŚ õ]ā!ūÜgĒå[’WXͽבpčp}s‘U5;Ō³*źGm«Žhy5X×NqnĮœŒüĖĘk6Žź…Ywq‚+)0&°ÓģÖėģóCp¦NŒƒæ½lßxi,±p–ē{(äõ4ć>ć5ōČē](ģIŽåcc¾”}—ŪF¬Gń »šĮ•ž'j:¶»u¢x/Ā\Y–‰7ܱbœГڳµ˜ßü1=åµģĻu"žńHņŽŲ3ż)%c3Ƽo$:lń„ŽŽd‹ar!+ļ_9j~ ¾—Qš{;x¦}ĀšUzŸ’U1ڇWNŌžņxY.ܐ=²+čO źŠā,²!‰A?7O„D®D£szO‰š]²]Ś=ģwńEŸ2"Ēäb:ć?Jó?ųKtĶjźīYķMŹ©%d cÜRQ¶¢öe=>źęyd€2µ œ?JĶÕBYŹé“ĶpŲ.åRŪ!£Åµ É­\µ”ĪŻ›,¹9$×ym²H㲕^C“(¢¤Ž+”cZ°¾ŠĮī`O>D|°Įzב_Z\Y]Kqw$¶ļĆņq҃”+Åį»­KE6ęµ _gø<ä+¼WѾ±·Ö§ūdt3‡;’23¶™œū-æĀŲ®u[«õµ’2ˆ=6żk/_¶°Ó^YĘčrrp2øüh0”ū®‰ Ś¼ŻéqĀ–ļ“"…Į`ŻIļĶyŽ»ą ė}Vīā óXɀ>Q„¦äZe;Æ M¦y .|͹Ą^+&öžčZĪ&f!ē'­I§9GƱ[N..-ČŁŽź_‘Ļjܽ\»K:"J@!HĮ#ց©œöŶt²OiÄY †8ü꧇WOŗń=­ä3¤hļĪĮ’=żė&čśO¶•o‘m`g|ߊg°ükŪ--§Ž+2Ö’g“»üÕ7čf͈ą0øĻŁT`“Īk›ń:u¬ēt±ī\oVą~¤A3„/ŪoĮ$d™X¶>@z×?ńÅZf‰1Ó”»µŗŌK‚mĆo¾+PæAž·Äš[Ź÷ÖŠ‘œ o˜}r:”Zv—sOu'š‰-ŹĖQމÕ^Ż÷Ę}N3UīuYĢ­*9Īk– 4dĪ-®¢`VW• ō‘6ĒC/é“‚²r°E؁ķ.G#jōć°®£IÓćąŗķcŌ♲—SŲ~iµoÜh’µ»ķĆ2[Č#žŌaÖLp3éœWĶ3šž•oŖj6¾Ö¦Ö“x%e·øq†ŌÕ+uŖj[šävBŲŁxĄg<^…§Ā$ ³åQޤŸhE©Ł»Ę»+÷…yĶōWvN‰å±%š0~﹬yLĶĶ3E”Zµāœ]̹<ō¶-­®.Č«!`8É­"ɔn2ēJ¼DW!•™r ńŗøA$Óo[„‘Ü0]«ÉĶQ“‹/-ÕŃ*„mēų‡A]­ÄrŪ<„l!°qł ‚Ōåķć“bv’Tn„ņ}ė”·‘å Ŗ®cĪå½v5›ƒ2Ū„ŽTŖČ?_JįŒnĶ”46¼A­i:f„ŗ„÷ֈĢī7 ģ{+Ėü-šūāoĒ­N?éÆkįø„’H¹ ƒÆ=½Ü¬ē©¦ēčwģżš?Ąæ 5ŒčśM¶­ātl RńFČdžņ®1Ÿz÷ķB<)ŖĆŖųŽś=kU2™-üÉ•Ųäķń%Õ§·1ĶnĪŖ­u¤|Å4ö2µ źQjVwžeس†S¹Xdćcšź-܀0śóHƼ#ć«O„µ–ægd.QvUŪ½Aļjå|mįiķ)ŲjšŖAØŁ¦”‹ņŒe\gļuėYøÜŁT>¢ų=Æų^ŅĪö^śQå-¢ “ ī„} š+Äך֟ā¹%˜Ļe=ىTœłHĒø­G!œęĻ9ż¢¤MN (t÷y灌nĘN;ņōÆųž0Š|_v7Cµ¢”ļ܃Œ{ŽŖ™†ē±x€ŲYĻe{< sxwŖeI!Žy“Ć_|_ācMÕ ó„…ŃrQ› ŒvśÓùłĆūMx3Bų{ńTÓ“Ęk{KƚŽ.pĢ3»>ę¾kŌg·¾HŠHšFš‰‹y–B4rCŒƒ’0k鏣·Å ¤x”hš•Ō‹ ³)ˆoķśg5«4Gźo„õ.‚*¤•Tls]mlj/?$\Ģ«œžyü놵;—cÄ>)čZfØ-üOåøø†"·r¬¹8Éü«óūĒs OTqd šBćcw‚ØćēņŁ›FcžxŹūĀ>.¶Ö­ÄŅéҳĻmć'¶ząsŠ÷ˆ¾ ·ŅoćŽĶī"šżü¢āŻäĪö9?„z)č™Gõ'’/ż«®~%|;ń'ģ”ńGW“>4š¶%šü‡å’źÉ²Ts÷¶ä)Ēb=+ö×S˜é·Æ.ęFW ō9ŖšŌrZŸR|=Õ£ń'‡ü§U‘b}ó_~Õ tM_Ā>>šŽµ¤ ‡~3·“OÖ#²JQ•fPx‘ϰ88¬'ŲĘH’=?ŚGąĘ±š—ć/Ä/„^%Ņä²Ōō+—Ž+‚›ęŁĪb“ß+·Ÿ„|­{cŗU8Ć&HÜ0GjŽ”®µ1œJ)ēUŻÓ537—“–ŃĒ$¢>B0&rNj)$Weć#ŽœV¶"Ä;ȘB™ģŲ© t ¶dʤ™QEč„TtKƒĒN†µ£FŌ`šĘöžŁŌ£«(*®=jfŽˆīZ_šm’ķ˜5ųĒö&ń¾“ZēK'Qš„óĪ<ł¢Lœ¬sž½+śĒ½å˜Ž\e$Ps†ĻQOā!\µ•ĄŻÉ1°žųCćĒ…4ė-zÓÄRŁ·Łī”ÕÉēkžæ­rIźb~nžŅl|yą­sGŽĪźėT“¶/o“’ĒĶ»õõ]Łśé_ȇů‡÷æ ¼¬x"žķQ&"Ķ]pZ>I>ų̲Ø;™ø<~•LÆĢ6sŠWb9åćgŒ˜¤-µŪ9+7ŹeĪĪüõ«‹hĪäŃĒ Ź—žG©Ŗ³ ŽcåHZ>ŻĘ+R °OīŽaĪ20:S£Ą7'4S} |¬ą¹Ąź1Ś®Ē+1„»ƒŪš4å-źlż¹’‚)žŁ§Į_ˆ÷æ¼Sā_J»ŗKļ Gp’»¶ø'÷#õ×<3_ŚOƦšĢbūB““žojlŗ¦‡4ŒAµøĪé"?ŽŻłW-^ēdCé†kū6ÓWš5ƒĖ£#ļ`c56«½Ģń¤q¼@ū¢-чqō=+ĪØµ)³ł>’ƒ‚æa«M#˵wĆĶ&k]\ŒĆ«}–?ŻŪź*8yFĢPFGńžµü¦É棬Ūć•Jžk1jńn’×če©ŲxgÄ2iį-åźŽŪSžŸżzöĖyg–Õ³•$™ĘWœ}ź*««ĒĢö<1„[xIż—µļ³źš†—yyo­ĀķH%pĻ,§ßߎæAōȖĘImŽ$ē;‡ń{×±pTŽęĶõ•Ģ’BJįg#Ņ£ŠŚXå0Ģ“ަ™ĢćŲÓkUl@qÜv¤ŽŽęŻDŲŽ„öķ@£]īļ®l&‚Ī2Ŗņ rk&ŪĆäY™ˆd›‚čyĮ=Ø5JĘę“įĶźĖW“šy¬˜‹iĮSžćÓŒéĢt©|ŲfL¼AQėA¬bzdžµĻEöDŅõtžĪs²e$’}³œV—ˆōĶBżä !2«|Ğ8 ŠómFŪiŽqŻcõ«Ö·VŽė$§dĄq“üØ2r×Bž³¬YéśsČȾsco”Æ+˜YėZŒ6÷i”ˆ;XeM$ƒžŒ³¢ū™ŲȍšŅŗč4†Šfžęš@žVWc ĮZ™-œ'Š•‘“^‡;a– ~ē<·­{Nā 3aöyäˆĀ§s` Ż:f‘¤b|õŖivqų›Q»ÓDĄīXƒĒZÕ“hōąÓŚ ŽN\ę°lŁ#“ø¾šēI ¦e݆ąڼ„ļ®–ēÉŌ2Ų*[9ö¤uB=9ųć$š6‹&“. tbŃčю?śõł¤žÖž!xĢß\B^ŹņP.¤w’S÷Aķ‘\UŚHū>Č*ęxś8I(Æ+»]ł-ߑöއ”čz;iśg‡“ļģŻ6HĀ–,X÷‰õ5×_¬ugŽMčĄ:WĶÖzŸģ^W‚£…” 5ņĀ F+²Š²Zė²źz‡ģĶyįß|`Ō4]O†ėCūˆw“ņ˃“ÄāÆ|oų5āo ė.?²ÆMœĒ|2Ę ¢ńœq\ö=¼%tŪ‹>jš‹.­õmKĆ:čŽŪU‚RŠ™<§cqŠ÷Xļw"’Uxģ:R¹éZźĒĻž&¶‹Gń/‹¬ng[?U…Ll0åǹ¦ü!ų¹įŪ››Æ†ß5$Ņ5»ŻŲĻ!ĀĢ{dšč”.‡Įńm !8ļ&}ušĒIJhśˆT6brŁ€—9Æ»æh›:ēösń‚µ4†tŌ.a£uĪčĄĪįųŖóWc×ĆT÷¢~’eMįM~óB’H¤µµ;wrTž1ōĮļŗ¶“NŠXn›8ē¶+’kCģšJĘŌó4€šØŽÕ”hcdNYœńšTŃļÓWFµµ½§ŸŚķ`¹·Č,ŃĒ”§Ļw5†„„i5¦‘rŪ¦¶Œ‘ł^ų©ØEX>x«JY’kU·’v;“±Ü~5‡¦źio·¹";€p«ź3ÖøjnqJ6gGē,É óŻ«Æ¶¼%¼AĪ;ÖGM3­³ŚČŠID•y÷Ž!“}^[HRo, į~÷½i ót)YČ`Fx˜ pjw›Ļž7hÉlm4ļ}Œ9µ72ŖQP `b­[ØyŠH“œÕMž‰|ŚTļ £¼ß¹Ūåī8=Ē}i„VXfFbƒŽ:ØĀĒZ34ėĻ"GUmżTą÷«¢=Žd„īZF}øvHäQóŲ«p; \Ž{ŠŪ•Qź]‰ēB^*qƒĪ2=źž›+Guī Ū‡ć]Ļ>¤Ž~ߞŸD’‚p~Ī’æµ øń®«ń x’Ku|²ĄĘęLžŹŃgŻ«ó—ą>„ā/ųēB“ń=ŗŲĮ:Éī<žńH {cšģkCłM¬E[4æ3Ėü]tŚ'|Oį«·OÜŻ;@ÄķŽ„ē8śęŗ;{5¼±–öŅxV5ˆæĪŲŻŠW-ŌŠŹšĒ‰5µ=3YŠEÓ5)D±1l~±šżrųać4×|5§x’ŅHīcøRKÆBxĻÓ­uRŚĒ‰‹©sŪ|«=Ž«o}“y…āryĮ<ŒśWŻž–?ųf ī­­Ņr H’Ž»ć®Ē:–‘õģūšĻĆśĻģńūJų£Äv™­ŚKk;²¹h’÷6ĆŪ'Īæ?jDŻ&’Ś|…ü=†vc÷¶•có«‘<ÄSÅē8¼ £īŠtŅ}łą„Æ£ž“»ōgR]š~-ŒH-‚(sęAjąõ)ķnt-2Łlm“ǁT-Źē{H­¹\óŌ?*ŗsŌż«JŚ3śżkoüw°Ō|ćæģĘń^‘§Ć,wq­ØÄĀģ¤ņ̑õÆų½ą’‹Ÿ³GķmaćĻ„¶:Ž·šóĘ3½FĪżŽŸ8’Z€§ļ®+Š„ŗŸēwĆ8<—ń9]hžā¼d×e̹—Üӊ?J~ üVÓž.ųb÷[µ³¼Ónķ/d±ŗ· “r'|p{W±ķ©ĶŸĶyŽaqu0ńwQmēēńæĀ'Ć?µGķO”évs-µ·Ä=Z8”ōHÄķ€?Ļz~›„Ż(ŠBG<ōóµļĢĻ÷§Āźņ©Ćx “wn&’š\M…Ó"\µĮiņzT‚ÖŽ>!P{q\ō抿"œ“,Ä e,@Ü8¢Š&é·±‹o<÷­łlŒŖ°"”Aćx$Jóˆz=»A槙0ä·„qŌ1<ėC°¶d`ņ€0vƒZkl؄0v÷® īvQ"KhbŽg‚ݜēėNĻę…ˆž•”M›HXV·,±HŹQNpr}ėĘī|?«YÜ>Ÿu9•ć}£=é•)t;½*Āīr*óŲs]ż­•§Łb–@Īć%8꓃čd=m h„ˆ±]Ż sŃķµ¶'rA'­n¦#~Śy•ŽĄ Պe.ŠŹĒ>•©É=šw˜E€źx§źŗ ų‹HŌt›Ė¶‚y­Ž4 |„±Ą?^•5S¶§3ņ£6©kmaįŚ-ž­`­ |˜óP7=śżkĶ.¾Ń¤xĘīŹįķŹ¬Š”õ’Õ^mH»ÜØĘĒÖ~¾…­£‡y|Ąśq^‰öØcHяĪz{Ó¤sā*Xļ|'”›—]FśŽW…ĖžüO䟵ų‹^¶Ō¼E @·6g Ö“’ÖÓM{ Äīė“<_z=Ŗ=*kµĢ!Bžnį—vźOrk…½±‡P¾e‰m{Rö§w³;…¾,ńWĆ+“]3Z»ū U¹"0ž™ōžƒŅøoŽjž&ń^§¬źņÉw4² <ē9f>õ“ØW'rŽ”jšŒń9U‚PŁ% V”ŃÆ4øć„ÜSešģw&{V3f¼ŗ\̚ī(C$ßiūPl2•ą­lXÅA!•’JĘ.Ęr‰“lsūࣧaVāTB ®Æ22åeČŅ7” ŒŠāü]„6™q§Üé׆‘’x¬§Ļ#ėNįŹĒĒ=ĆŒ!øā¦¹“¹ūŹG”}§§­uÓzXpGڟ fšś^‡q•–˜žO“«}”÷$Ŗ>ń\ōČķ_'6—ų£Ä¶š4śWöŒßcĒüņĪGó5ŅģT£”ŚxC²ńGŒĒ‚u ų¬„{9.•ąĢŖ/ū_ćXŸ~Ś|"ųƒ'‡ōYī.<=wi£fó6ęMÜ2”"±’9抶P–b鰐ģ|…ڧ҄ĄĒ•µQ,LØĒ±Ē„oŲKŌ?f•¦ ķ=³Z8“Ł>wFłÓˆĀ }Ņ;f·cŅćŌ!/n>Ć­Jg!ā šķ­ÄÓN¶’ō›Ó?JĖšš¼µ}FŽEU˜ä‚A?ēŠč‚8ŖS;æŁ Ÿ x­®$ŻÓflĘ[nźkš…ēkĹŅY–&·•” šZ÷š2÷¬,}*01yN÷N_ü -’턽Ź@]&&B¤pzšö­JÖ­=Ś-Į°=2G¾Ž3?‚+Čź|5ąXa»:å…ķ™ŸĶö9īē‚Tā½ßW†Ņ{nŽŚS} Ź\µ¼eÕMg© 4÷ŗŃ-oåĶ“č$^xaŸžµuś&¶Ž¼Ón“ŪH㸌ŖĄ«Ę•tBG•V'Ó֚ƒjˆ—H6³a¾QĘq] ”ŽFT"_n¹5¹ēÖGm¢L³N`™YdĄ#wzģb¶…ęPnūŽĄŅ’Šą’ŌÅń–+†˜"ÆĖĄұæµb6FĄŽp7 PG<·/ųg[“’Ž}2ī!#æŹ€õśŠ»yą;9‘¦g0#dž9frKv3ū& >Õ"·HW€qŚ«DöĶ0pŖ=±Ö‘‘×YźĄń…†AĻē^+ć‹y—Tšį­7śwϵ\{ ¢‡‡4ū׿A1«ćĘÕ÷®»ž‹©fk‰fM¹č-O٘øśu“C¶ņ.õ-Į'µV·}Rųృ »kzP+3ĘĒS$ę <÷ļśÕømŸTw“Óķwk“å=€ÉžGņ “RļLæŗŃž““nÜr:ó;Įŗ¬W³‡ø…a`6¦1¶™|½ĪÄRßiz¢Ć9pŹr›øČwL×āo³Ģńn”8Tóõ¢Ęm“qŖY“4³żŸ+”ĄĪO”ō®'Ly_Q™näßķÉéŠFRŽę7Ņķ4Ā.·=ė–Ōü_m`óŚA Ķ4Gž„7¦īƒā‹oŁŪŚßA¹V$ 0śœU;›»h\¤YÕ¹ō4„hYėĶuW,ęgśW£„µŖ)»10łq“ҁµāMӔ.žTš=*āČ<7ĘńÜDŅ„ guĒ ĻõƚüVŗŽ–“K %į ™ rWÜśv¦LccĖā֞ė1åŗ”ćrTzšō Ē$—$eŒev°SACæyF—£1Ō'ø‰@Uł7gœ{Ń`:!āDÓfņ$I]ų‡@kcA¼‡Ä½­ķźéØIÄī7ŽzTJ=H”N‚÷F“id0¼2m9˜ ?y®„ŖĆcv°G4ŖpMc-"vV’æˆtö6į!dL¶A<ÆoƳ¾ü=ÖüYā[ėķcL’-ÖE{C6sÓ·AQĪĶϳu­×ėZV™5ĀCo•‰X€/ałŅ™įĶ*×Į×r-©il]ˆŽķ—A~_N”{CšMŲ—R½{8.u_j6–K¹¤…£}ęUģz¼ŹóÄśĀĘrV.Xn8ݟQųRrf6)éó_iv÷J°½æažÕĶŪx’MÕžß§¼ŽEÜsģÄ~|Q« vŃÜ]£Å$ßkPIRFvjšˆzEüz£I•S¦Åą0÷qO©NLęō]N=*DŠęŽfYX'ʧ9ō®Šžāyn!–“asŌ ”Ę}Ī.a©j³™m&XĒĢ0ö®×Āž±°Ū­<7 8ł##¦}?•`Ń”õæĀĶ ü\”šŽīŹel昻Tc¹>+Ōµ™Ņc„Iqž[lłń¬¦ŗŒŁŗķ$Fć̇rĘN}>¾Õćŗ„„ōŚ]Üū’ĮŗµQĻŪÅś—„¼JlīŁļ4Ęr›ŸŒ’xŠŻÖü„xŃ£Ö#Ö÷ŻøŒJčS@ҽŃoĆž›ĆņMwŖÜ(ĪąŻqķŽ°5-ū_¾ŽėϜ3>G9-"ś4zLŚEøY-Ó{ÖL EŗMŅ ĻNµĖ2œnfÉ!ŗBSīśƒ\ō‘Ż[\Ÿ2mė€2+E„i÷2Ū›¦Œy ÷H5jMGȕm¢‰YŁNģv؋ŌeKŁēŅ•óuē©ßdjiP ½FkxÖ2>qėķüėRņ;M#øŠhd&0¹kĪfźF„mqs:]^Böé™U$;U×®GåÅy&”Ŗ_x‡R?…¬'×5Wu[nxćŽŗšŌ.ģĢ„S”õÆĆOŁ;KŃ5?Äæfę¬Ģ©‰ķ^yĪr:ōė_~ųoĮ¶:O†ļ,å[? h‘°6¶VĆT퓁“õĶ} GV„ō)}®qm5…“<Æ(ón%\mQżÓ޵kĆŽ °æ¼KĶPŻėZ¬LfżéŹĆō„zQ‰Å#ŃcµOķŻYlķ—CŠOōøG›÷G„uŗ®¦=ż§„“ģ+)$m±łXx"µP'”äæ·4 U ƒRæÕe—m°‰CGƒœ‡ō9ö®Ž]cÅ 2‹½[Āŗd7#µ õö vķ[B™KC™ńW‹„{TѼ;į›y¼HØ¤Ļ¦AӁźk"¼1eey’ ÜMÆy%Šó=[Ēp֚ܵ¶rłģŠÉ į<­rŗtL·«öä-f·ō¬ÆŠvG!®Y”½-*4±²€tŌS“ö¶·Ō­Ķ½°¹Ś2Cu dI_üų—>“uāæ ß,ļ-ĢAŌM  ml{óšõ±£AŖŪ\ÜA4Aą}Ūł›'µßcϼQks¦i¶”¦Ē×Ŗ›R6čś×‘¶™’ 2Śź"Śź@xóĄ Oq@”ģzgĆĶ3Ś5Õę”­YłZNB[ĪŌ~•÷įѵ}圓×.…8R½Åkõ"uņ'4=KBńī”c$pZŁŪ2ÉŹß9ÉäNŸ­y£ŲOćOŠs$±›pŸ½ĪįĮ䞦؞kŸIx{H·š>Æ{„jį,øO-› @ž"=Åy—‰># NėPŃtP/e’ąC&Ēį¹ēŪśRæB£³‚Ō’g–Õ<-­k÷™“Ū"“v©ĪäĻĶō9Įƙ|Aį VĻÄzU¤6±Å9ĻŠÆN•ZÜŚ6č}żšį“^$ŃdžtŽKŪsóģ ž£5ō½ßō’„žø°Ń“-=6f%äxŌ¾ģs“ż*Xr\ų«Ę^2ŗÖµua *å¦Ė}Ģō⼯Ć_õ½+ćƒjŗ:ü<ųµėOŗŽ£D8ŗ…œŽFćnģ{לiŽ(š’Ä x?ā_‡&Kķ\°Šõ$B oeņ8ē żI­›÷@ō†^"}Xkr¶SōĮļ^æńĀšxÆĆ÷–2¬rĒ:aA=±’>µĶ)u??ų-‡ģŁż©įż'ćĪ›au’ —‡®’³5ųÖ>nģŽvHÄz2}ėł‚ń•“[LM«ź¹õŖ”#šoCʄ0U9Ü3Ī˟”Ž“¢­”ņŪØÜs·łš…T$c,GAš¢ą¬\Iw Tł„Ę>µ©—š4s§–˜Ž : 7FÕ5o ųƒEń·‡n>ÉāM.é/­¤ÉłYqŒW÷Ó’Ųż©ü5ūVžĪ–¾'šž§ciāö†+«[Bä]F’HŒ!”IŒŽ°Øō±Ņ™ūEš’āƒńĄśg‰mJŻ3ŪŽBWÖåv9 – GJ–ćĢ%6’uÅR&čóߋ’¼-ūHüųš_ÅaeŃ5ŪBör€ “ŗQ•u÷Tõč­›WķYšgXżŸž.x÷į’‹t«­SÓuiģ&R˜Eucóśma‚ąƒXF6`|ķ§ĢY xJʼ2`u÷ÆWšĒŒžŚx ø·h¶9U9ėļJT¬CŸcŚQļµŻk7Ÿ6ƒ[Æį^OÆhéj²Z¢nŚŲR:„D¶esĪ4‰õ]"śźęݚ)£’TAŚAņ}:WźĮˆOāß é «3Ć{ }Ē;‡Ø?…zdTGŅ?n€@6€dĻČĶŠÕʎ;¬o īąā·9$‹śÅŖi:bĪ ĘΟ ';Ē·å\¦”©ÜY,K ܒÄįzŠ#Ś|;d–š\2Ļo<(Ė–ČĘk©š·‚„ńˆ sO ¾2,y`ėÅ#SW¾šŸĀ?­¬~ŗŌõ’IcHyĪ:žuóŠõmgÅ"æńķ‰Ńme”ˆ¢ Źö½ ¼Ż? źWz~©I,®Ŗwǃ^’y®iæŁÅ®ę³dg¦ƒ9_©äśB[ŽÉqoĆ]ķ‘ŽāsĮ9ž“šŅŚÅr`mĄéĻįA% ķ:fŽe›Ł ØĻą÷µ–+ń#łČ7,ö÷ W%×$q§Y\~łÆ–@>ļĢb?Zź4żNćU±×JÄšŁė@ĪK^µ‡KŌ¼‰]Reą©=8®/R¹²„…ZPr¼ńT¤Ąé<<ś»‹üæ;pžs^‘«hZ†“¦]¼²OöŲ” gi­S3¶·8_ ė:׈lŒ—m”Øč…NÜt ÷­öŪn0sŚ”ŽētR‰”:mČõœ¶…§Ś[Ļv­4†PyĒ­wn±°‚ H-Ō¬RoVĘ Ö°5LŚ„Ź\NėŸj½i{nŖ}œŪ2ŒĶ‡›ųžūĶJń­ÅśY³«7–üc<]–ƒ­“vq­Ū¬²mĮÜ8aŽÕ“[źnu:dśu­¼‚(ŠnmŪ”)$ŌćŠfŹ3YĖp9»¦¾/rņöēz©t÷Z¤¶kēIoDżĆ€ĄśĘ¤čHŻń›s6‹g1Õƒ>įø?Øö®f}dxģ걙LTtü*ĪRčoŪA>Õo؃:8A××Õ•-ĘŪxˆY ėėY›B=Me³t!iŠ60pzå5Ė[xĀ4²2*ēęĒÅ)JĒeŸ|ZæŸQ×ōŻQ &ŸW“R„ YŸƒķ‘łÖ§†ügį{éepóÜ\Øib?r>Ü`ś`׏ž–Gõ·ŃK…/9že/‡<å4ā¾\¼Žw±č²Ą–‰"ČR¹ÕgO“}BįĆ!rŃøPF2vœcńÆ[ŸčLÓWG—ü,ų“mšæāU–£­Cö$ym.ħ Ž}¹žUūżš£YšļÄøōŪ]`ŁųƒA½¶fQW,„Hćø9ļ]cÉUå \ü§żŗæežĻtŸhWkš³d×RŪʀKi‚6‚3’9ėģkČžx‡D›VŽßĘŻéś`BÓōćƒéŽ¦„ ;ę0ē‚’ź^ųįŪ_ÓįÓ5MnÜŖ]ŁĶ*AĮĆ"+Ź?k‚ŗwÄųGā—ĆGšöž’ińŚźŗ™ä½µŅ‘ūÅ^ąŒ=+(hyyå*•y9;źSŃgŌ>[é?š‘ųŖ=NāR·0²u„8'Ųś×Ū^<ż¤u_ˆZ6m{=’[[ŚGXF¤ noz%RĒn[BNĪ]ųićæĆā½r÷ā7‡­µ­ē62£Fħ¤€śąūc&øæXųcĮ9Ō4’ßOŖx2å„öƒ|ŻPē“ƒYJzXūL"±×]—ŠĮٶ† g½.•«A9PGlćšĶJdzF”ŌŪß[Nč|Å šFz²% Ģ-ļŠ$īm'sŽń%…¹ū4Ÿ9‘¤ņÕLšņ?xGR˜y–rCoynūäW.ƒųG½aR0•-NVlĘWN`ķo¹Æ]šä†[up `\Ķ1=;OÓfÕj(ęeēüGåBv*OC–“»•Ņ3“©8Č=먁rįČ'^•¢ŸswOQ4ĖdNŁc€*Ģīmnš4hŪcm%O O™t™Ņh:ōšF±iØ@#w†E•TŒ‚AĪ .»ća­>»>žVČĪf’FB©=ō¤Z6S{÷ń‡övń6•ū<|?ż“¼%Ū|)Ö5HtĘµó ”łŽbmĘŽä÷āšJ·V»éśÖ“ädœE‡ĒūeA’nœæÅ7ł¢HAū‡µYGør ōõØęhś.„Ņ,±)•łLN0iÖn»Ń³ÓžÕ“gŲāÆ;AūOųĆVmįtzāK{c£E§Ķ$„„røč1Ļå_9ŁĶ>”āTææyķ`™T«ŗ:ć]Øģ~Ź=:u[‚³zŸK|PšßĆÄ0|F¾š'ü&V_d6ÓÄĪAPėįææZł»EÓ“©­otė_“Åg4„ą·£$™öĶksņ¬TO_ųSū1Ż|EńvZµnŃ£ ī¢r7¤$ķ8Ē ōƅ–ž ų=ć?ü$ÕVit4¹’}6ļ?»tĻ*¼šsŚŗaLłģEV“>Ņš­Ųó,di‚85÷§ĮūØÅĶŖĪZY]$ QŒJģ§b©ļj~„ü3µ‚Ćö+ųõ‘ˆ!hµyX‘÷²§ŸŅæ <}£[ė0O„Ķ'Ś•¬”Ęz`©Ņ®Q>{Ć–āLŻ’z‡ž›.ü=Ó汚Mž—7ŸöhŚqŠZę|Oah°ÜÅšÆÓŚ¢ŸÓŌŖ{×>§’‚uj>%Ś×įl~ŅÆ¦F³¾£Ę0ŁydeÉ8Ęģq×8ÆŌoŒ“ż·†?o‚Ÿ 앤ŸCųZ¦ĪµZ“ģ’ Å’ķ’Śu§ķĮūYYZ¢Ŗ/ŠZćq™#ROć‚kĀćøE ё߹ƻ՟īǃQk„²Å/ś£’¦āEs8dĄQĒ|ÕhZp„±”ņ×xpIUĘ1Ś”¦ŽøS9öŅ’wB€ÉȵŅhöĶe?™•Œg'œf¤čŒŅYČŲØdcžqP 5‰:.ļQڃE’c€®œg½s÷QDn²£j8õ j"O§€R\'\v5£m T *€ųĄÉ””‘iģl/÷Ēyn¹qœ`×=w£\čā’9^ľ7Œ>µ€r›0_‘L óš“Ŗ.e.1H‡LŠ‚5œśūSLŠ5N ?Å×Z^šń“Ņ)ÄrŽWv;d ضfćcÓbŠ9¤Arn$*­Œnšk؊<ŗ„ Ł<ęŗ”.Œ”¬hM§Ü}žH¢’H"n”\®*­kŗtń=»yl0knfm”± ¾£so®[Ļ%¦·n|Ų."8xˆōüŗU)|W¬xākk­jņāūP‹0”ņ’?.(ędJš:cdDQ¹ź_i@äÕJLå”UŒ!y@ ¶1ļPYĀÖw1¤ƒi‘V̦uŅ ģ¼¹†ņĒņÆ;Ō<†[ * ›Ķ@HyMĢŽO>ōŃÅVĀGį+żvT¼×¼­NĪi‰õŒąuę»k/†Z¾uįėM>ŠøT©8Ī+ŖŒ5±ÅRH§Ø°ńs­½“ÖRŹ×#%+šCK±ŗ¶Ō/$¼| »›’øÜ‘Ē·ī`£©üµō؍ņ:’ņõi’nO_—źui›kƒ,r¬B†õ”é”¶’ĶŁÓĪÜw(ź“}¬ńŲęyœ“Żyéé]³|EY“q¦¬PÄäa“Ņ€<ĪśĪī’RY”Ÿ"BX€:šėl¬cH9Ÿf0¾¼P4iņŽMjщ1ŠŽ+»‚ęKt‚Hj>dūĀ€<ÆÅ­ķū\"ƲØĘsœ×8·­øK®6ćŌP˜x»ĆÖ7Öw2¢•Ž:ׁɔŪŪ_Gö‰ZŽ!"«8Ǿ(Šlō[>Śęī]DŻc”Ąojå&ŌģåidŽćiĆ o»ģh0*Ēā‹õ—I±–Ņßh;·H'5ŁųoÄZ}ÅÓdł‡×ņ Øßwć/xgGž{ęH\©„@Aśōś×ƒ]üWŃß]³ŃÆd-mvJ©C‘­.SS°Õžų{ĒŚ|vIŪʃĢ.‡Ų9äżcź®ō;VM>RmāFŖ¹ČÅ1Üń}c]Öēš=.¹ŅŽŁˆŗüĪsЃڶ“Ł>٧^[RK[†…¶>óvņ V<ˆx_]]U^i>ŁŃžēńā·%Ń<ūŌ„»¢ ł‘¹$Žā‚%#Ńā’d)¹±{Ū7šc˜…Ż»zŖŲX]Ūęū4ˆŠqĒlŠÉę{]ģī–DG†q†ĮĻ&¹ ¬#šu‘—÷¤å‡zꓩŅ3ģoéĀęĀu°·™£W;ŗćŸz÷ ź:®…§I5“[ÜZŹy‡­`ŁÆ9æŖś¦£iysn‘\ĄO”ˆqĮżi5ϵŖ‰6±T99ēó¦e3€ńˆ­õ-$YEæqu?(öÆæń. ¶ž”ź PG޵ŒHŠWŠķ¼%āoėÖ3Xj–Ö1@ųD)÷ĒŅøĶsĄ·^Õ³fMŅĢžd±FŁņ›?y’N*īoÜś;Į:Åęöč¾Ż»ćVÉ ÷Åsž;šm’“š±ŌŹ;>ĮnŲłī8Øs+Ł£ÉļR…`Ž} åŠ=óT¬lE“ŻĢ<čŲćūT)™ņŲė®>Ā©¦X²FąĮÓ·SH“ńoż–Ļ™7s’|ZW%_©ßųßÄZƇ4ńźWšcHĘŠ ģ*ä<#ńzõ£ø_ݐė‘Ģ1¼‡Z–+„§ü][ė{k{1RĮ‚7Ż ¬ļjóų“˲Xń¦Ć傧ńÅ\i”y½÷‚m”ø·‚{Į€ŹøÉŻŪ­K«_ éĻp,…ˆņÖ2~ńō§"›“Õą×K¹†k%•`FӚé¬ēŁh dŒ`{VrZ‚]Ž;Z½Õä‘QÉĪr9ü++G»¹)8æĪāp£ź+žL±$VČglŠ0Iīj ½5„GšLG9qXĢÖ2¹Ńų~ŚyōŁ"IŸhéƒŌśā±Ž,³G $Ėņņæ{>•™GQc¤!²YÆ Źų|?¼ßĘ^€Noģ#"܁øƒ‚}«XK””¤pŠė3é2CS Īqš t‰'*‚ń/-ĻJ%-ŗTΟ¾½Ö5 Hc¶–u2«.ĮžzWÖ¶Ž{;HL#k°)Ī+ĀĘÕčz“)•ģ"ŗyf…å™d—·®+Ńķ$Hć„dÄ»”üÚš*Jģė„üł×6£ū&Ń®®ŃKa8-õ5&­č¾Óīī/UļuPĘcn 6@ä€Z˜Āģ¶‹Ś?Ā?|Z0ųƒR¼Õ¼ąÉāe»M›”žQ«gé_Zü8ųmąĻL¶? 4ū±ā µ“iˆ9,µėP„cެ‘ōž§{š÷C¶¶£¤Ūų«Å0čģłŲż9=ņk™ŸJ×|k=¦µŖ\ŚčZ\Oö…¶S“äg ōēҽš1<ʵbšn‘ż”}i¢ĖÖZ{y/łIĘOÓ­_½ŗšĻĀĖ/X[ź:}ߌ.0.¶–i99 }WdcÜäu žörź^"×ķ“ I"YbĪ{ž€c„yf¹ā»ßh’xg@¹M;’Ā-ģsčOlzVр{B+FĒĆŚ|šy¹—ZŌN!;—ĢfõnzzŁ»Ņ峃L¾Ö|ż?N˜ļ„oĄ`:œSI¢Ģ}sTOj’f™Ee”÷;B4Ŗ¼ō<×Īž?ų­š’įpžßń~¬·Śä Ū`Œ¬Ē;[žü~UpObŌģ~müsż¶¼YćątĻG’¶‚s)…,§ļ Ōżkį½kŚÜÆ$ә[o–Œ>ó/«ZŽ1·±ūS„ų‘Æ­“ł†-ŲB¼żž§ü+¾ų‡o šŸö]3ķžY£Ļ|~'č×ÜłčTåV<4½VźŻģÖ` m^'š5KÄz¦©¤¬ö1ZŸ»¹\ńœöĶ`kķo”䦕ö„¬ 3ŻĖnр”Užī wžÓ/ZźŁn[pU˜ē'?ĢPi³ė?V²²Šõ _"pU3* ŹAås×Ö”šW‹®®µ©4+-F»bƒž™éŸ­Š'!ń#Sń^—ā}2÷Ne²`žlé.BžŻ:’õź÷€%“?x‚ž\*?ŒI×wU_ēU+#čŸüsųwćÆŁŚŚ¬śmŚJQÕ×;˜ąž+Ü>źŗ ¶ŗ“²ė–VE ļ€ąöwé]ÉSs…ųĒąųƒƒ#ńUÓk:v§agr!höHw ŌŽ€y’ü×ųÆįłt½z{8āŻ$e„æ.9ćōĶb£`‹gĻŚĶāŹ©mn­ 1ĪŖ ›LF ¤½żė¢ Cx3ķ?ŁoĒ‘Ęš„µ;“¶Ū0µÄ™Ī^Üf¾č²¼–EMł‘:DćŌiāŁO¼3o —ćsé~=š–‘%ܮ𕠐»0eŪĮ'Æ­yøČéuŠŚ2č~cjŽkKS2ȗ6‹¹ĆŖ“øsÓ‘šÓāV©ąæiśy/4°ģ²ŪÉŠŃ·ēŠf•=NžecŻ>0ų^ŸLŌtė·Mž%¼³hŪ&7=G”Ļż,Į?k]gĒ~ ń·ģ‡ń7W#VŃć[Ÿ“ņßŜ°Lö WŁt(čŃ<ś½š…Åö“3Ē";˜²6‘ė_axOZ³ń„tŪȝ|šž[€Łł€ėų×=JzhK‘š—ķyš—Dń^œį"±ŠćĀŗÄ„ėQ˜Ć!V+ø>‡iϵŸĻķYū:ė_ž.üN𢐄Ņļä’Öä)_“Ų1-(?ģąTSŅG4’ŠŒč{…‘7b5Ćzõč#»™ī[Yвf6ĻQ÷iĘC#‡-•nųéZĘ$¼Łk;AŽrŲąŸojd‘å d†$ƒG ą‘6åŠø«)$ąœeš:c„UŽĢŚ2¹„gwVÓŪÜ1džéžßŅæ¦’ų7öŪ‡Ąž:ń_ģIćĶzd¶×Uµ ż”ĖC軞4oįĪcż“ėĪw:#¶‡ö3gš”aŠ…øŒ”Gš°ė\V攄ĆĻg r§ū¦ø¦Š>ųķąŪ°°kö±'‘d­¢1Ÿ23œ7Ōqśś×ēēÄ’‡ś_ˆ¼#ā]śĀYn…“c.ĶįŠ«AüėŲRZǧķš²ēįOōsĆĻg{e¤N^{%äĘ~b\{`öÆ egvP»UxĘ+¾CšpÖå9²œø ć•TK±pFW ūWJ1"—b”e›ļ2攩P°&eĘęķŽ”Ąd$ī02ĖĪ}é%@ĶR>ö;P$O aĒ?7ó§ÜO)Ā·Ż&†ĪŠlÕ¶e0œeA,:®kōūž 7ūW]žĻæ“1šf”«Åkį“Q[^\J"M½\yx'›īŸ\Ö/s²1¹żåü&ńæ†.ćÓµ­tķÅDI­qqg{%Į`¹ēxéÄÖFƒą­WÄj‘YF]· –8ā‚”nvŚw†'Ņ|Q‡“ąĻ¬Śā[”E'+ĻĆōÆBŌį¾Ō"ß4*~tĻŽö5¤DŃn8"²R%½¼£(Ē ?Ɵāķ;Oø¾ŠīĪź‘‡ļc#Ž}*æCĻ'Õ Óę{x.7(l½QŽņęk¹įh„Ł“2¶F֑—++]Ł,æ¼ułsÜU›d¶·Ż&VćŽŌF6/ŚŪ§ö•3Źó¶r@+GKū›dšĪĆz'īĒ\ŸzV[gY’*'Ü|¬¢¬ŁM-¼āķÄoģFq@ŚzĶ{+KdD É szƒuI®.ݘ…,04Üē<;mŖ,ś‚½ŒęŁ0¬]{JŸ\µX|›«Uu›#Š P±™„³¬Ąģ>YäńŽ­„EՒi.[ŹĮŪ4t¾S_³ŗ:SœÕßxréą{;k„ØĪć9 &ńŸśõœ‘ż•eˆL¼šć×5a– ]_Čė*„&.h.,ä<5ć«m1ÄӔ—ną2~l×7Øx£ūGRk¦I&sÉėA©ÖO}éÉö9’7+– Żń^zŚ£ÜZÜi7EV f ĄŽ¤gĢŠ7¬­>Ź[ŗø\b¬ė–ė¬-³¤$Œ1§L R•ŠŒ¬sV²ŻX\yrŖ$B„ž¢ŗÆ ŁIu,!Ż>ΌK« 戳TĪī?YŚ›¹¬cFĒ-Į>õĮźŠImp·AŒd±$t­cfS8jņKėØŽ#$i‘œ?īō“°µNį&bCtj½ cn†ĖZ‡fA^}‰¬­[ÄKzVŻ\mQ“ŠŹORŽ=£Žk“ž?ŗœŸZč X® ¹Nń¶08ļYIĪŚéš‰2Ķn“³©Ū‘’ tv÷Ół!.ÉiŚr:VFš¦Ķ(u qlńĻ7’ƒžNz•mg«č’*ŪG<#†p?­D`в’fK‹)­įœyEįŠö5ć÷RÉlę# Ų§ iŲ·Oaس”WąvĻJė“;V¼óÕUĒĻQA¤bn]ŁĖ³ (Ąœ2ē­rśŻö—§6”hb’\nHÉĘćéJÅéŻķż²G˜Æ [[꿁 “ „ Æļ%ė%¢ļ¤muŽżÅÖ'”ź<49}¤œåē'd޾ˆ§¦ŽGs:·ĢÜā“[c•ך‰#،ŗn‹bE;¢Ļ O³¶ó]‘WtĻJŠāÅJژ|!kń+įµĒ†„ńŪkÖļ“ɘ}×Q’™ņÆĻ»t–[e·ø&ėnĘĆr®8?ŽA®š{•qu'ĶĶc믅ž&·ńĻ‚›Ą q©jŠDš9uĘõå9ļÓ銳ī-ūĄž ŗ²Ōὂ(„;‹zēŽ¾‚ŗéĒSņ\eZ4ōxŸĆŽ.YŃu ķ.w8„¶m’.sÜv9ÆM]g_ń®Æż™ØźwŃjĻ(Ū;H|ÄmŻI>ż턺3ŒĀ&®¾ō=#\ŅtP/ģMbÉkvčxóČ?ˆ¾±ų/āūx5M0ȫ庘NOMĆĪŗ”±ņ±^ńū#Œ<;¤žĘ_4yu(Tm"čư )‘}y<śWāeŌw ścĖ[C1<† 8ĒēTĪ^É*į³\ĆWH֕>_5i_ļm|†iWBŚö}6i8&żāē֟ām Q½šĘ¢šD-urˆĪˆƒ%ˆ++ė”ū­ źĒéĀ‡ž%żƒfOžŅŗ¦¹o®üYÖį†ÜčŅF©l°]ńĀæĘĪ€#“Ē9_̽;Zń?~7xCÄ…Śų‡Ē·WĆĀÜ<Ū€ÓåÅuĀZXüƃ] Ó5Ģ3É/zxhö䦳›ó擿’VļėĻDń.…āh/¢²¼µ½– žŹöšĢ¼4næÓŠ×ē¾µūüiо4iž2ųIńkKšŸĆ鵨®ļ¬Y_ķP[n é?2€võ֕.ö?ĢL.*TUxæóŠžloݼ’ż§4E»{°÷mł‘†2ŅŚ«‘ųf¾qš" Wfcč+ÅÆ™žåx3]VįL¶¢VżĶ?Ā ~ƒe¾cīӟ~3RC{v|½°ƒŲū×4$~«”ŠĖ­XĒmn¾]ĀŻd«’2©`æˆ2µ¼ČĢŻrzWJf5#m–ói2³ŽõōßĀŁĖOųŃį/j7^(MśŽ1ä£Eņæ’Żŗß­D©\óq8ŲRƒœ¶Gß“7ģ÷ńKö|Ņķ¾ jÖiā‡łO©éąæö{nĄįצkĻt}R+ėXä‚@APĆż”ė\5Øv;°ųČÉčkI+‚ø°=Et€Ė˜NĒ#©®)FŚ“e¦†õ˜0:­Į,˜äƒ\Œµ+[Ūé"²ŽŠB,źA-ŽqRg3#Āz¬·w6žn%QõÆG‚pr甕pÜP%$Oņ†Ę8Ē­_ŽŠ_ĀÖģJqƒŽkTjCŪiņ,Šq“IļZ•–CūĀĖŚ™”×RĀÜ4DDóÅtVwM“gžœń[t9&¬l“zeʗ«iŚ¤7vó@˵śĮŚ?ē_kžøe›FweŽ$Æ'5ĻRŽ*³²7ō ’Ā/¢ŲŲ]]›ėݹ8ĒĶõ÷Ŗ4‹­#Į—ž#ŗQæĢHŅĖ|Żžœ×ąśm\dc¹Ē|.ż|mń‚źŽmŧ°Ü"ø[ nOBķŠwė^©ā?ŁĻyįļÜĶqnŠYc;×'Ē­e(Ė©äUĶ!ĶŹ†|Yš¾÷įįÖl¤·ˆÆŚ4ėÅ$Ēs9gœŒŠč¤e†ŹŻĆ)'WØĒ­dāÖįK§¢6ōÉŽ6Kr+×t}XĻi{fjʁvpǶh=z(į¬e‚-BöŹiQ®c|żŚźÄ04D±V$qÅ)lwXŠ 5%”"ŖäóbØė¶–ś}”Œł‘œ†ÉÅ`k ‹ślĶR¹;p·™Ń£Hāa·<óĶ‘ĶåĘķäuÅR{(dU;0Ŗå`$¶ždL£—-f5„Ń€²©ŽœT2ąĖ–‘Ī½ĪåVŪČ׉öU [‘ó:Öj­œ=”fŹź{ ”į ŚuĶuš[’ZÆf`ŁfkYbr§]ĄńUuŲoµ ź:t¬ŠÆļČŚ ] ņZ|¦U2Šo…ģ 2d/øę»č2G““³3£ł”+.Ś”)c:FI¬v7ŠŠŚ“RåG%=zó’*é+icX,ōū<ØĒg䑳cņŖ&oC”ÓŽ]BtÓģŅÆīĒĖ ėTĢģn7q ØŪYIĮŠÕÅj¤^“¹0O†—$žOj±ā=zĪĖA½Ō² °ćīņ~µnĒ%J§%§ųĆPµ¼·ŠīŚķ¶īYc9SÓūŌžlž§%ģ¶‘ĘīĄd.3ļWM£†­Cټ<Ńķzš3Žŗ™õ}GL·žŽŹł ”IBŸ¾¾†»iīpT‘ę>+¼–ĻC֛IV3?8ą”#ü+ń t§¼¶]BrĶ  “÷ÉĪ+ÜĮÉ#ł+éS‹’bĀQļ)?¹%’·µšēĄé&œn.¦y­ī·GŹÆ^;śUŠ6öz̝ŗ\C²ōcžšÆ”¤ĻįŹš0¼#¬ųę};S‚Ö¾VXuęEZś?Ć>9³šTž'žÓ±¼Õ#‘GöyMŪPvõ×EzGq«uāßi÷Z¶›ödG2ŗ1łOįé]ƇąMCNš÷J1Ź*ĄéC¶Ē‘Z6>ūšF<Óļ•ĢŃƒÜcø–r. hŅ>ī3Tyu™čŚÆ>“i§oc«›$ó¾Čūō•ŠŻo0;R7ōüh4‚g–ŅŁj>g˜ŽK†ĪzŠģ“­¬„YīēŽhņ×<j 8łõ ]w\»±6bŃ6†Œ§Ż9ķśU-WA6±bÜ)'4š¾»ŗ·eL ƒķĊsõĄxćįõŅĶź–ѾŅC¦ćļŠx|6zÅ“’Łsn66AĻ[ڧĆųµ«1itD°ąĘHb}2(%ĆSŒÕü5¦xRŅjFó|ÄÖ}•“øūĪ»vGŠ„n¢å×B/\j ½®­#Ż«ädīÉ=*|;µvVžÕ|äÉČCģ;T”åcе?źžÓÆž;›;Kų²#cœJ¹é^™§ųŖāėO‚{Ÿ*9<¤v÷Ļz ē}.ńŸ•q~#žŠ¬ŗłŸŗxüØWC”ŒŁjo·~H‡pløČ­¶ØÖŅĖ’"oĪv€…”zܶܖqOņ ‡$°ĪÕÆ”蚒Šģne°Óļī"Ž3$žP'Ė_\Š ,&—”ßM¬„ęØīčˆ0żF+½Ō#‰­ †ŻŚ)RMŁĪńŽ•2ÅĢ.¼ń ]Üā')ɏ#ƒō®§Lų›u§ŲC=Ō8EĮhŲtö¢1°ĪUų»¬kŗ„Ų°šžm„b|Ē|gҹé¼[­źŗ|ŗ6ėejē̚EūĮ±Œgń5@{†¼¦ !½Ōāģ[‡UAœ3ół÷Xš%†­u­Ķż”DŃČŃąŒoaĪ}óšš]g\Ņ4­>źÖžćū=cČdźW óƶZŻ(’ŃžŃnÜļœP)- ¬ī Ņ[ČäöÉ«zĀ^jöšN„b¦)Xķp2ŌJVHĄģüQ«Ļ£¦œŗ6œŠ0IÖ@9ē†+q$“ÕttŌ,­£Žß¦?ˆ9zę¬”ŌŽ)ĄXĮć'K©ĮqzšÅ–ųĘvõ®yös„Mm472LšŹ0vžŒ:ŅÜkŗ¤{c³˜®O<Öf‘•Ķ7Ś«^/Ū ¤Ź6õėŽõķŗEĢz¼Ķ\“‹ĒŖŸóšžd9#Å>!iWz{>™cq «ø—ĖQŸü:Ō:.{owNZ1ø’½G½˜Ņ9‹ŸßYź 5³Z[–ŹpsžŻŖi<_<šÜ‘Ų9ų?ζŠ¾ēE4C¦j>3š¶¢Śž‡¬4(Ÿ,–²Ģvŗžæ)ÆFĒV¾/Ņ]gXŅż2]ĪÖŖpFĶ"÷„ōķ7Z‚śŅžöH.–2am™ō?†jĶ8w­½Ē=²8JÅĘŚT0/ōūų!Rķ.[89ÓÖŗ­5RŅŽ xSž2k%”‰gÄĖ&§`ŠJęåXn!¹ĮÅxľŃ/-ĢRźėgpŽD£īćæ’Z©Lø#ÖSĮ6™Ÿ+ß6®T#C \ü{wĆ’čZŸ‹ü>š¾¼š.‘#mšIˆECŲ“éV«Hņ’‰¾Ńēų±5¾āGÖ“KV/±ŻŹŁĘ3ß—‰e««hgY®">f vķĻįZ{C3ϵ› ”iHm$RNqŽ•ČE{qö†„¾9ĄÅc*‡M6“¹rYüÖO0ŖćŒśÖ”z-\Ē$Œz•‰”’. ‰Šžģnćõa›Č/÷‡fĪx ;ÜÆq=Ä1“«m,j„ …-œż*k7˜f9Ä͜qڦ”ŁIŲś3ąÕݵ–£§ŚßmhĘģ…ūĶĒzWѰ‚öH–ŅŻm¢ •Ėn ÷ę¾wäŚ=:SZŪĒ6ū¼l7Mü śSuĻhÖ‰qsjn:  ½yŌšķ³„ÕIjTųysćj7š…“=Oģē!Æü¼Ć»ŠWŪ^żüą“i©__üHŸ!wf¶·'ÆQßņ®śXk•q+”õž ‚«-Oāę¾Ś}¢ lģ!ڰF `˜Å[Ó¤ŌY‰<ēŲc„_9Ō©#u+ItŲßÅOr«›‰ŹČqŹžĄUjēNŸK°ńoŠ‹¬č“lĘy8—œīoqŒS¹¬ec×|S xŽĆD1ź7ī%Sp”=é^=ūBxJóą?¼=ā ęöj‘Ā·)2”RUŽqWX†ĻPÖüAąmWĀwˆü!äXLÅ#xQFŖäœēŚ»O…>&š‡‰ōķCTøžņ  gM”ß5r2GN Wd'dyõ|Ī›įo‹¼Im{ā½Å š’ÜżuŒ×pąūŒcń¬ŒŃkjIixĶlį÷а`ĄśELŲS>wšĘ³c¦¶Ś‘—PAQ—Ć1÷8®šĒŚ'ƒ|Y=•ü"øa"ČP2Øō-Ś”³„.‡ÓśGˆ“Łüs¤iK©é³hĢbySeFǵeüWńĶ’|Occį;{aqØJésG¹•9ĘļӚ‰FģØīv >16™āKEńÅ„‡®-ķ<Ó=ל²Äuxƞ~.üQ¶ń޾¦-5k’“†s6ōČ?CISŌŌźä¼’ĒĮŗ³[[É-ŪĢHŠIĪg#§$Wŗ|[¹Óķļ5k€—–ń‘wœžMoŌĮž•āWKń,š.āµ¹’)wĘ_Æ=A«Ž9šļöž‘¦YOo ŁYdE”ē’h”t2ēģ|Åᯉś‡­ėš%Ս¬¦8?.šq’p+‹ż¤ü9§x§QѼEįćmslÖ»nfˆõޤ`zW4£`ē?:|AŪÜßĀēyLcĄ\`÷®kWF ĪĢIźOJŅ“.ųY½Šµx&“m²|¼’GÆå_¬æüNšī‰c|.Rą¬@HŒ£ō?…k(čē§Å$…”ķI掷ķōń½Ī‹#E\Ęa.ܕϧłļ^f'cXČł'I¶Óü'āųW[›K Ā—.d^¼ÆųĆ®ųwXÖn@Ńć±µTڬ»q!ĒŽĄé\Tł¹“[g«|"Õķ~ ü1o_صń‹“C-ĻēÓµ[ų%ń_Äß³WĘ߇Ÿt;»Ė)“ĶR9.PĢŹÆcųYr+ŌV¹„ō/š·¼7ń£į—ž1ųJī OIÖōųgi#pĮ$(8ČļŒēÜō†ŚšŃ5[}-Š­³“ßyō¬$ŗķ<1a⯠jZ-ōhmnć1³÷}į_ÉüĆö7ńˆ“K6ŗ†±ą«v“Õą0įļ4āIVą|Ū@?€®WīūĻ”“‰üÆź¶h­å»o³*LaN‡ ś`ŠęaČJ±\唍wAō3”zr4w/ó“Įź)"ƒ<#Psń­c¹ĢÉK3+`ƒŒķRŻ$o–ś ·§µlG.„xĒBĽrzż+f9BōF1Ņ“FŃv,Įr‘ĪW·‚N1ƒ]Ÿ†#é·Ž;šž—W >ÕfcLp2ń·¹ż 7^lrņF‹só#GŽC‚1Ś·”>ŒĪh‘RŽ]²I…įWų½Sg+ä²D0}k²2±Ė$'—ŻP;ä …ć1³Ä7\Ҷ$Œ2ķ či±$\889ć¹÷  }æ/§9ĒJ\®Ü³zŽµ¦“Ł-žĘGŒīĖ(ļījÓGjK-¤Nš‚IŃ2}åu`A:ŠćmNøHž×?ą‘_µ}Æķ š2ÓĀZ•ł]YŲXH®ß6™©Ą£Ź•[°“h+÷ļĀ_§ŗŃō­cSD·»µtÓõØz&.ģyĄ<ūšĀŖ:ŪP[NīF‘±<'Ģ·`xu#?ʰõ߇žųæą|8ńU“wžńŸ6y÷lTØeĪpĆ'ąW–¶üå’ooŁkŲÆĒo|?׎Ē˵ŌŌ412–ˆüŠĪŁžM§=3_j 2&–2yŠSn)Ėq=Uųy©<2ĻlSÜd€=ė¦Ö§²ø“·xdŸń+®9#幕ŽWR¶›S ,Ģßi8ˆÉaé_@| ÕŪEŗŽ‘ŅįIūŲŹ€xü 8ŹĆœŠMKā^+]6įo-Q·…mš8’Łõ÷¦ŪŹ`ŗŒ¢«nmĶīkTīrT§©{V1LČØåœNO©”Z ½©µ÷±Į­ć±ŒVŗž’įūxmģ„ŠČ£8ČÆFųy<F“#¼Źż£1Ŗ±łA♼Ws[Q>³–źy­ā¹Ž\¢žzõÆń׌“Hҵ-BmAš»<óŸē޳äŌÜš½#W³ń„ßdŌć "©’=Ć#”żĘ»+KĖQ‚ŪĄäb“3“V4äńtVÓ„­ŲĀ*į[=+ŪUMkūNI-ĢˆŲóP?: ģiĒo ¤a|ōv\rHÉāÆ\½ÜĻnį%OįĘ7zŠ%ZW‰·@ŃLHdbƒ••ā \Gi40ÜļÜĆrē((ń?Ķc&¢‚Ż„Nč õ8äד|!Öt;fƒNÖµ³PŒāWēq qA“v=æĆOįmSÄæŚśa·ŗŌ w. °ĮüĻē\Ž„&Ÿ«ųŚī-57L„˜Wø\ōżi‘$yƉuV“KŃ":\b Œs^‹u=JcĻÜó9ę›3. ˜ųf÷…²žę¶ü+}kż· ėŹŃI•łzž:~µ h\]ųĮń.ĖUÕĆz|{ķ-€2»üĆw\“ÓµPųcą“kėāß‹Y^ŽO3O,®ž!ÓÖ¼ÜL¬~÷ąkń*U#zTżłśGeēyr«væcé]VņWӔGmW‡UĮüj߇R+‹Ż"łÄ’s_=ˆw?Ռ4,’-jÖV­Ø‹ve܈˜æÅō®†ĒåAå5Ķ©īPhɘ‚bIē&“YšÕ¦©§4ńY–¹R r ĻON>•Ó[C®ényd¾3ŗÓ,īm5w„“Sżģ,ŖyÄcUż3ÄšM&w£Žwu¢«œĘ½Um£WÕcƒE¾Õ”Pė {ĒĪ'ž?Jē<šóDų‡įojš»[6·‰"H$łŒDƒ“ēßĪ²lł|Ś·,»-|1šĻü?ā6Ę“é·d– ž² pU†{ž½~“ėWö¢šķƈü=§Ųi¾&0¼Ń°P„œ.pĢ+ t<9Õ²ęGå-ēöLJ&Ö|?¬FöšĘu5ŅŸą•©õ—ģ7āäŅ|sā)/ŅŪQ äFńIĄaź~¹ÖŌi‘õ˱ž,Óķ–żļ“µ"ŹUI␨8ü9ü«‰Õ|?g¬[Mjā+äī’+Њ X­nŒiZÄĻ€?¾ų¶8nƒčww:C8Ė[_ʅ‘ѱĮČš÷ēņ{önńOĆ߈ߘźŚõõ‡Å ÆjNc“iŲ[8ėĆu=«:±×SÕÉJUę—Āģׯ_Šõ˜ō8ķn)īY£SÉšÕKøōū{‹+(¦oŽ€ÜIZĆŁ®§ŽÓ©}ŽgÄ k6/l€;uƒo4]CįīÆ$:RÜÜ[Ü\—0IÜO"¹å ĘV=ĀMWT]ŽÓSŠkh[3 eŚ7cøä¼?m1—q+‚¤l\gܹlQ„|}ć錄w#.I +2īSk€püī÷¬JIbwpĖ“ž˜¬¦mNGS„]»ŁĆ c{ūI­ė>;§‚ņ¬ī‚RE*p{ąÕŅ‘æ::(ę”ȉĄęæS`ļŁ§Ć·?‡ž7ųoÄ1ÜhVްßiI0ZīT&6N:¤ŸĀ½\$c)Ę2Ń3óx¦EĆųœŽ’¼Ø¤Ņīܒ·ā~Qx>ĆWŠōÓ”xŠŚKM~ĀęāĀįXņͬ›æ¢ŗ†ŸŹuYĒ'5]а„Z”+%e$ŸŽ®lÉr²p 6NÕWūAįrźN?LM±¹r=TŁywń¶e ž@?„|«ćÆ%ž»{¬é0@t©É•¶”/Ääš:kX>‡Įń> Ī]‘Či:¦”į½gIÖ,¦Įž]ÜĢ„uõćŠöˆvž5š—öī‚ån¢“ę¾y®įÅt)Ųü;×9ó&”{5ÜPŪ¦&Q•,~éµé^ÕīšļūFWD½ŚX¾ļ¼khÕ<·K›CÜ>~ÓŽ,š“Ańē_š†¢Ø—°Ģ2ʽĮöõķ_« <5 x¢ÓĆ·ŚF®Čļ øŲį†ÜĆō®˜U<*łtT›GŽŽ%ņ‡Āˆāöśi­t‚ŃFķž¼ä ōƒ¼.“āMCOŅ5Yį¶½øP#2 (8ćZ©\xdąŁ±ń;įŗ‡ool š\Ä Gp‰ņ©ö5Č~Ķ’ąš?ˆō}Ē~Ö¼Y£é“ś„šBZ‘øF—¶ŠH<ńǽTQīPÄ7MžūG|y×¾=ųĀŁĶ®©{¤Ł[–Ņtū\µ½”@¬|¹Ąėķ_9ü0×¼u”üAšÅ÷‚<Ŗų×ĘjQ^XZ[Z™™g,+Ęy®˜HāĮŠĆeYLØ'ĖE¶żnäßͶK>ųŽß>Ēń_āõŽ›įÕõHnž÷š™F0ć»ńӞzOĮ?jž<Õ>&\ŻĮzŚ®§zEŌ¶ķ»¶1½sŌnĻ5¼›?ĖvU%FX–½ŪŚžjŚ}ĢžU?ą©~[ų(§Ę멈dæŃō;„ķōUCś”üėāØ`²Š0<µłxkĖÄ/x’k>õ•N ĖZéJ+īVż ūƒ9HĒJ™gŲžX@pŲżŖ+BÜ& =9|ŪZš^ŁNĶŽEiŠåÄŹĒüAńųFk {į*Ūϵä(…ŠÄHēۃ_¬æ³µ›Ūh[4ó$63ĄŒšł­ąś œ×Ż=‹ŸµÆˆu üƒį½Ō6”įÆ$ėp’&ē_”ōퟐWą‚ćHžļó$Ęk9Ķ×hc“žX¬ė4vd2\®qź’ąÓh¶ē÷”³’{U˜.„‹`-œ+Ę«¹÷T>¬²“ķ%p\sĻJó’\Eesu„ß[ÉĖšHq¶QßJÄŁ£žšµĶ­¶”*Éüų;b+Õm  ZTę®\ŠIX+uėĶj+’VF’s[ŗ‹ķ°˜Äd·o­r6zœšŻ4SĄÖ­†ž ;ŠqDŹ=Š}¬¹g%K•±ļ“mPOjŲå­!.5ė; ­:ÓU¼%Ģž\yž&ĒOŠŌčŃ4‹ Ķ~ūNP†X㨢ĒĶęUyb|É”ųĒū_ā†ta —Böćbl9({|µśq­žĢšĪ§šžśėÅśkXi2Ā%Q0Ū$‹ź€óĒ\ŅöW??Īó%NQķsĖ“ n?čĄæ­åŠōI I3`–¹aܱäō’õ×qw«Ks“<e3»Īj'GBa‡m©3åŪ‰-õÆü2ń„ķ„O{e4šuÅĀØ]°Ā“ō$~µņĀß§ˆtŻĀ—‹§l\JgÓ.˜ćęģŒO9śt®°=ģ;M.īŽe ‚Gł²Ū?JŅ(·V1Zž“ą_‡ž%ńEīŸoĮ£YOŹŽße ÷Żé^ÉØ|ż˜lⵓāēÅ-OÅZÄ2ᬓ@Cžö2GNõŁO՟q$ ż–<Ņü©‹ōĻŁļĆ~H>|2ń ō3ƒX¹wūN3’Jžqōķ\Wl¼m}©_xĖĄvŽ'²ø_ž7+g™H#œ źöłģaŒpj³N^ŸōŒæą›ß ~3x_EńßģėńĀćį¾®bjѵDČŒ„!ˆeĒNłöÆÉߋßž8|ńŻ÷ߌŽ“¶±5®­hŚj“Ąž‡Ųō„*ŲćĀq §UŠŖ­%ų®åﵬ6ŠĄŒ$“`2@Æ\Ó4ū=BˆˆöšŪ‡é\’”„[›rŽÆ§Żč— &y*)ewŽK wž*K=VžéŁåŸ-ĄÅiM›IńĶ”­š·āŌW6ēVžŹ‘įĖ|Ł•ųą½bńć¶·»›Ķd7yōÆ{½Ļćļ„}'ģ°2['Sņ‡łFiž:Ó4[» ˜cąeAĘO„p¾;ÕtÕń<:™ƒĢ“› C62¾€ž&¾Ž–‡ń]cļXIbsfĻg 01öśzõφŽ=M"7²ńn’,£Ÿ'ŒŒw®øīyUYöĢ–ŗ މ¦A„IŲh¼ÉRyÅių~ŪNšŽ—"=²ŪīpįÜą*Ö¶G‹ˆÜśŪFŌ¦>ŒŒČ#1”ŗI’ėה闚[˜•!ŠYs’HĪ)žUX–õHR)#gd’)FģƒŚØĻwedŠd–ŻaĒń†Ŗ2±Źąyõ‡‹>ĆŖĻ>ł‹ Ż&Žҽ†ÓŠآ<ŅÉ,¤ą‚jłĢfŠZ½øŌn‘#.‰Œ ŃŅ4Ł4Ė{–y ¦yąb«ta&ck:ķĀŚ;éķć!”÷Æ=š×M“—všśA<ĪHÜ Ÿ\‘ŅŖ4̼Ž»Fµ«©ŅČÖŃrG jĶÖ|2t»éī„ҐFvµ[ŒōA;Ēžå|ʵ.<ˆ-Ąci8Āē9Ør3”ŗ%Żč{ÅXÕb| Ź CÆ$×6ĘaBT@>U*bīa9t14©Ś(ɀB†u­ CU¾”3HŠŃ©łGµyŽ«ÕĖ“ņTžŖ„¾šÖp½äHO°4ÖhÓµöčī­¼’¤āJ›Å:ŲÓ£[|ß9—œōåv7w3Ü ļ,ī[hĮ5éļ£?ىø…8$7šūІ‘*źFõęX”‘źEnų›Ę°Y„Ž™ Ū g9 [‘éŸEÄAu+€ ĄÉĒRqō®ÄŪĶæcłŠA ( ?żšėLń ŗĒ›u –6? śZ²kw-;K²Œō?Ć@Ł…«Jš…Ģ·14ó–įėŽā¹Ż3OŽ;wt“xŪ9-ź= ˆö5'Қę%’h£{eo<Š×ÓüQ¦h¶7Kss"©T@ŲÉ nų’Z»ń£_(z ±¢œ`“Ü ”­½ÅƇtįk®]C;ø FŽxļš£b’Ć­CÄSųØ%Åõę³k2„ŗŒD@ėŸN+ߒw—T“O¹¶eŠ<'XūP1„,~^äSĪ}ÅiXųŽYlnaŅVąŪr”Øä&ĒmįżoRŗ›P†6F#$Éõ³£^Eöݳˆ”*ŁķļXĪc¹Ö¾Ķ4Ź—āõP(G9qéķŅøs’œ]_~NG®+žK”pGceŻ#É(Łq‚»‡Ž#Ś»ļ j-į”¶›l³•8Q!Éo­bŃ”ƒ¬ė ā-dīÓīšfrŹĄdGŽēŚ»2ģYéžUäˆFEČįéĒre+—–ڽ£½¦©§GŖŽ`z‚XW–źŚڬ[NÓ#XQpFß¼q]TŃQ›ŲņHų“K»†ßT³æ·~ó”ŚćŌśįŸ¦K jGR²Š{ę“1H­ĪĀz5l£Ų®fsæ.u}ķ®te–ĘYŗ{{V^‘ń/PW³³¾µŠķŪåyšūš‡g[¶××q«Z¤ī;˜§Ś»Qs„éž]ÄäF'ļt®ySW…‹V·{iTēo^+ĆõÄŅõtq “ū8,GæłéIĄ=ęĒľšō q+KseØT'.F:Õ?|NšO‹ōŌ·‚ĶŃeįNül#Žƒš‡ *79-%bÓķ8ł<žµŁ7ˆ4ūH„ŠĆ#NÄe³ĻҤ–ŽS^ńWqyq¤P†;²~ó{WtŌg[°ē9ć"‘‹ŃŌš(įhöėü@sŸZåā°-“ÜHģKn^;v “_Ļ|, xĪ8ę®ĶjĻl&bĮ³‡«c½c(Ų -ŒĶµC!R ^ćė–Z›€Ķ @Ķņž;zÖM«uϰźP@³•’(X² ø9÷5ērźöVWžX·(m«Üµ\@eŅ­üS üŪ3Åbéńņ‰4-žœāŗ&ŻĶ=U-,­VxöĖ3mīżk—^å#X (O,@ q‡cB$Š8ŹĢ¾h8Ś;ŌŚJgčeqƒ‚k;6ˆ³[³\øŽč°Ś¹Ē™©Gj-‘ŠõeījIåÖē8°Km½äxÖԐĻ%½1PŽ8 Jw(ēé]f,²Dą2c$×3$Ņłę,6üœŅ€$1ü…sņÖ®™g(…Q›ƒ‘ĘhlŽ ~ü5ųYšļƾv a×>ĢVīÜ.āÆŠėŸJł§āēĮŁ~ &i¼Am-Ģņ&Ędˆ/÷‡½rŗŚŲėŽē7į ‰ģu­"ś&¶E Ņ“!ė_mųŖņŁ“ėmJ8ōĖ(¼…_ÜJrKWRŌŻ;3‹æų£Ä±čž’ņö嘪AŻ'¶ńŒõļ_}|*żˆaŽ+_üsŌ]o–4¹Fµ<Ėčät­©ÓKR*Nś”>šƒg »hl_ <)ä…{hˆ/8Ū<±ę“¤ń-æ†ĘƒįÓ^¾K²ßm0#Œ|WB¦ŽI&ŁŌ[ųD}MkĘŠO{~ɗ·ŸęXЌČģ;s^³«ų^ūLŃ“E²†Ņ-{`öĻQŽÅXLVš‰C“šž‡ż…|lģ£kŪūł¶³LŒné׏JņĻiS§ŠodׯLöAž¹ÜTŽŸZčŠ0(x¹>!ų„xM‘u-'Ā‚‰p‡` 3…>õ»įß§€t«˜|2bŗÕdS½®Ņr Aėš|½ ©ŹĒ•I|÷–I{āWņÆRo1aI ]Ūøc#ښŚtž æŌu›¤“šī–Źv2BVĘz)ėO“S~t|ÓńOö ųwš·NŗŃü8`ń^æČžŽIʈÆF$rķ_”??i‰ūU:…’Š-%;xõé]ąD„sęē“h¼ę“ ¤šøŖRøl¾wv®ÄŒ&ś;YѶ9GqŲćnx؞Ē<ŁūƦųŖĖOšu¾“¬hVz­ĆʉmĆn ’ūFšäś7‡luÅ·[hM§Ścą|ŸQųWmy+6pØč|/ā›Ū[gWø€2I,ę]‡BG·‹¦Ž®¢« Ł 3÷Iõ®maŪ”Ņ^éšē…ÄwCL˜īehćE$ø=ÉōÅ} į5“S† J{7H‚|ĄĖx9ż*,iĶ”åZöŪmmm®-%vrdē¶ĮžUµ©—DÉ›•%•AĪßš¤üŠSīyīāk­/UYžÉ$ņ³ˆ˜g‚3Į?L×gń³Fń·‰|5cˆ$‚÷AxÖźŚ3.ę=ŗą qZF,™#å¼)®x~Š&4Œ· ZHP߯¦kÓžŻėŽMJŅ[É ‚įƒKL°ė‘õ®˜>†3ōö™Æfé‘Ļ?ʧ¼Ę7WUe¦źŸōėŒÜĖ>™NZrr8ģ 7#$¬|5š·KŌmž.ÜéÖ}vĀÖźā„·ĘsóŅ·ZDń޳u”ź°E§Ļö§·ĖŒ|Šq»})Å]Ü茎: ųßĆŽ%ƒRŅÆg’Ž B†E$“aø…}ć-.ūĒWń[jSǬŲó,rõƒŁ@nŖÜą¾2ĮāMA_¾Ōc’éd„MĄ%š¼)Ų šß ^źž'ńæ†|µĶÅö”t"£łJ…äž›F±–—?]4ƇŚ~ØčšŖcß!Hs€xĻ„p’bŌ¾ų“Jšfq7‘ł’I Ž \n½Č§ t2›-čU‡ŠäŃ^iä–h%VŻ»qŌóŚ½»Åš…‡,•/ļm^e[Ģn<[ņō8jHł‹Å_¼.öž!×Uv…„Āń8>ƒ­nü>šõ€ųkaįēHõ[7fq.rįĒ|õĒ=+«hDd|5ń³į*h/½6z•£XKŸĖĄÜ õ÷é_!ėv3Y=Ų:;ēåīe›ĒĢ„”éV×ÓĮnJEtĻņ|e½«źßŁÓÄĻįżz_ ^ŽZŚŚ\’%ÜÄķmĆō5·6–73ļŪy [–B•ˆ#°®†Źž[yXYŃĮČõJę©—ĖcęÆŚ'H“K[oF÷D ŻØ^AcŒŸ__ξÕ®üÉå·a÷IžMrÓ¦k†—€Kiqqies-ž‘(-͌ĢdŒuiśųRę-ń,ļ#A)Į G8«ĀŌN)/O»C9&ałh¬{7qSFĘ/ŗ·×ė¶;œĶm}ØČ«ŽwzŅę#ŗ«£·‘[’ō(M°1ęu©`ŗ/°1*ąńĒoZ2čiłŃ®L 2ž0N3[Ö/WI@{gįź*f“:`ō?}?ąßOŪe>~Ń>%ż”|yØŲX|7ń ó4y%F,ļ”sņ’ü`u,«ōÆīSOo“Y:N7ŽĮū·Ē;Ēf Žk ±Ń3¤åõK\Äéņȧš5šoķ į­CO‹Gń¶kējZt†+¤nDÖĶĮ>ųėƒé^uHźľ=šĘ‘āĶ?SŃXu^i±° Ę d>Ä {ń_Č'ķ‘šDü#ų«&± Ķ†«Ļ0…¤BPL[%G”ć5„'©‹gȲyń:«©Wžw«‰:łr4ģĢ€Ļ$īG+efW™OäqU.Ū|ą»ļ—Æ·Šī »©Ź©Ē”éQ-£Ž8F9Ķ0%R_6 ¦m’ā6MŖ’…Į ŅčCjŽ $øūĚŲT*»7x÷¤×CxK”öüßö”Õ’eƏV× w.›į ]ŅŚõćiłfÄtČn3ļ_ŽßĮ挎 ńO‚ōŸŠļöWҵō‡Jń0R6ZO"œ‚xŽv’SXŌŽ‡Ld~‚Xi%„²yˆņE“«ƒń‘Ē׌UkāŚN ‰dŒ‘Kó¹ĄnæĪøj-MŸų.?ģy§ülų%wūHčz,w*šķ‹Xų†Ty³Ygä˜z”'<’ >•ü.ė:=ę•«Ė£]"[<+óną•ž1ŌŠŹ;“K‘ĢXź³é—”£FTß·…Īīzפ.„qxŽk9‘ńĘOD&w^Ö`¹‰!ŌI“ ĮgÆdš6ƒ6‘}7Š/žĻ5ŠĀŪ!#½k J×gDcsNń’öwÄ+ūgKa,ģ³B¤įš;ŽœWčw‡um?Y³³æµž+ˆ¤yŚ8R{WNį1ÄĘÖ±±wd†S łŌńŒ×E¤ģŪiŁÜģįzķŽĒžćŌķō/Ūg,ł”.~Sļ]­Ę¹§\E§ŻČŅĒw— OąŽ?i–sŗĘ˜ŗĘ„»m<æiAŠ>7ūZäõ+Ó4wzuÕ¤MĮVŽsź(㑵ΛŖ7’YdÆ 5ī ģķu ŲĶéŠEW`nōļ|YšŲjZ­Ōśs¤6Īū•Bš«ķ^[⟠ŻxCR¶ŅīÕ”ó£ó‘óWÓėLWģihžÕuĖ&kIĢ2CŒśuļķ\µõžÆ£_Icte“–cm!r—4mRÖĀhīŗƒw( Vlś®Æ©“j"łņĄńøv £ŠńmæŲīķņO™“£5ܑ]@¬[ĢķŸį­#;žļ†•¤hļ«iw·–ś¬öćĶ‘'ł×+įOͧų•µY{¹%ŒFYŲü€g‘ŒQ(é «.«”j·ÉŻÄr£Œ²±Į„Õ|?į¼Ś¾›§ŁOpėņ8Į ėÅf„\Ś—i$Ed‹zsŅ«éŠÄÖ9²Į£9ĻJz‰¤µÕOÕ­-’+”ŽV“)ĻēM“Ó¾Éw ü‚C(\“ųP8®‡_s­ŲjPŪYj4œ>°åk#ÅŽ‚8—ū6ńnć'*Ųęƒ^CĻn4f†(ŁKÉ.0Ź=}k^;¶±RźĆrīZ ”lq7×E³dŠdˆōÆcųāŪ=Fł“ŲB]y^do·ŒŒę€‹¶‡ ź÷gĀ‚3‡`>ę¼ŗļĆöĆP¹»’Żc—¹n¤ŠS‘£o„G#¤Ģš0ĄĒ…e’ĀofĢEÄ^Füķ+÷ERˆ)\­}«iš-ņĘ·°Ko½P08žŲ¬M °‹Ø‹3Jž˜ÜYF’†µ{+»hā–ęd*I2w#¶k«–ūKKFŅaLlP/;ˆč*l\nxŽ”}ÕĖ»"[¶v®„TMBśÜmd;°O‘\ś×W{Č4ęlõ®“J¹“Äk,GĶĪŅq‘ŠæS¹ŅtŻ2;ń,fNr„u:Ō2yv(Į@w#փX»™©vń4Źźn•±¦źV‘!o9WŒĆ½5ĒE8½ŽĘŗ“vK5Ņ­Ė¾ĘP:Z­įoŪM§[ź×w« Ąr\‚ƒ·ćZ{>ęŠČõ‚儎2Z“¾=}k„O’b谅ß:®/\ŒSäEØIw5„B4sN¤‘ųcśšņVĄK¾XŲy ćŽ©™E[ īįåf…’0”< ŗ<7u½e•—ĄL}ļzĶ®ƒH¹żš`·iC4HŒę²ŹFWk™dsŖAū¢±i£¢:ōż+}ɂ ēžµ¹.‰ J…Ųo'w©:"ģC.’]Tłį€å4@³,QŪ +`āƒdČõ;x"”Ą²‰lvĶ?G·[ĘhI’,zu Ś”µqo$·‚HՙqĘ;W]›;X"łRńÓµD΄Չu Ū 2ĘIƒęM8éœW_]Ē$Ė,X¼{zČŠuxķ"c8Y21’ׯų„ńSJ‹Āš­†—4’]’Ė2dĢ:YUv;pŌ®|Ÿš’įüŽ0ÕīuŸ[Żi0ǵŽ%ä^7ČöōÆ«­“Ø£ŠŚ$Tµ…@]Ŗ=+ē±uģ¦F~ŽY’’hW«büŌ‘_=eęœ{i°xÕc*$ˆńĒoz«¤io§ŻO9kvrČIädōÆ"RŌž£ ŗ•¼HŸdŌcøŲ–P>˜®«C¾ŽāĪT@ v¬ŌJ3±ĢųƒÄŠĒØĻk‰åFØ[‰8ńÆØ“Łõ ü?“—U±‚9¹RcäŒp3é]4õ9+āģ}7į’ ųāÆĀŻ/x?GŌ¢¾¶Ł;¤AeRA Ž£#ņÆŹļŚóözńģ©©é>Š5Kæ|ÕīVß{!i4iŪ¢JŗyžŠéhyÓÅœĘ‰"x·D6VŃż¢9ćP»OŽĻLV…µŁü®jߣŗ+&ī6łH ÜūÖ2§©ćęSö”„ īŽsZńšh^9ī‚ēTšŻķ¹c;Š·B8?ē­~¼~Ć:ģž•¢jV0Om,ŅÜĘēÉ>é{?xłZ§õt„ŗżÉĻŪ!t}/Vų‘ć}2ĪŻ Ōµņ¦Æ>¾"“K%“ÉnUfĪēÉśuüėŽ¢&)õ5¢.øŲÓÆ.a‰÷Ÿ1äśW$Š3¤¼ˆ«ŖņĪ’F­*ØUĒZĒvh¤ö.iš›ŁÜC{k6É#‘X HÆmų™ćū?‰~1‡Åv:kiNl!¶ ;§ńp?„j•ćs™]ZkhćŲū¹lõéŸ ~)ųūįŒž$›įĒÄ/|>øÖ#Hõģ«ĆŽŖĢź##šč…MnŽLĻ*ĆćpóĀāą§NjĪ-]4TT’„‡R²“yŒR“ƒ;Y‰å˜ś’rk›ńŽā ź‹cā_°Hä›w$‘2õČ8ėW½ĻBŸ,ŠŃ »’D·‘%Ž}ĆųOC]¶įKĶdióÜ©Óō©¦5̃ ¹=sķ֔K©YXÉŃōķ=kÄ~’ā{K–'ˆåd™}¹¬æiŚĻĀ/é:/‰“Ų›xļ­f—kÅs=õ­éźxx¹Āw„/“?ŚĮŽ.Óķž(ų/ĮśeƆJ%•Š€¬{&ĄēhķĻ_q_ÅŖĶšÖćL²{éotė–&usŸ²Éž˜=»×w-õ?–³ŹiŠ–ńm}ÄŽ šÄ:„—zž–‰; ˆSģ»crķ?šÖæM’aļ‹ĒKńG…¼9āFO²ļņ­s!ڤ 'ד]Ń­JW¹ūͬų_Lń/ĮĻ‹×Wv‘µÄZ1–×qā6 8üzWęŠõt]{Ą—a­¾Ńjņ¶Ó÷Xzzt®ŗqčyŽĻV}łšóÄÖ^?š4ś­?öw™äįN„p_±ĻÅ;Ÿƒæµ—Əč"š‹ä>øY^8̌|§t`CJ‘ŽCéŒNĻW‚Ɔ„.YJIömhžGŃß¾ų?įGķEyš«į׍-¾KāČ¢:5¦§oęŚ[‰WH®Żį”.xČ×¼žĖ²ē‹’coˆ’¼kć}ćā}īŲõ½ 2XT1i#ū+0e9Ē+ž|Ö¼¶?šøŸÄ™UįŹ4«¶Ŗb©µĶ„Æ)}ļČüĄų„ńCāoĒĻx÷TZńN™įV¹šĖGŗŻ¶Ēę'{D~ćZżw’‚ržÓ_æhOŽé¾&šgö†<9g…¾«,l²jņ ØŪŃ0”9+ķžµ«½‘š~&QĮÓČ0Ų sÓ“›][Zæžēą?ü÷ÄćTż¾><Žż²Ś’O²²Ņ4ųš' °„Ŗ—CŽį‹f¾‹QŽåX‹yDgb¼źó÷µ?Óļ£ĪÓą¼¶-[÷QżK1yM‚OĶüŖĢXb˚㌮~įīšv±ØĮŪ’Mm4{ī>Õ¬7<ÜQóGĒ9Éń…½äĻoms¤y0JxŌ(ėź1śWźŸü‡ā<~2ųKwįÆ\/ö攢;izµĪ9?Cł×U3óŽ!ĆÉĀrCķŪ£ąŽ›yūŻüuž8­õÆ ėŠN’neg¶’Xāu8ą‚fč}+ł‰Ōī.-ž!kWÆ$æé†Į8S‘Ūņ¬1вŠņ<#ā(ftq1ü¹ŖįóQŒæöė¹e3=¼xP§8«e™™ `dńŠ×…7ļXż²š±»jŸežBäē¦+Åŗ%®»įŃöØÕ®-Īų„#˜GµѳĄļąžĪ—O–Ū2ؓcķsĘkÓģÆ7Ä­‚:“њ–¶.4ŪT½žµŃŚ* Ϭ]ĖNĘüQ£é^mćkić{mf!#l>\ŪGēJµ'°94ūó:¬,F@õ5ŁY»DŖ²Ż½Ķ>vpbźŁ£ą‡Ö%Öķæį*ŅŁlbSq²/Ż*¤äztė_1ų¦ö’ćæÄ’xĆWÖZ^¦4“„Aõć#'ēųm¶~o›ę/Ū”ŁĶ«ü ż™uøš'>-ų›C-”Œ©†ć$žzó_«~ ųĄŸ<9¤ź:Õ復a{oå© æģąŒ`ŠŽµŁ }Ļń4–"j¬õ¶ĒĢ>2š¦„įbįL‚XarŠĖŻŗŸ„fģūR«Ž=Ć8QҊ”;yƒiĀ'‚ž×ZE½ßģć¬fŅ6½MVÕRų#-“Å|Mį¶ih–ņ1hĄU|ó\iŪsŌ¦µŠśfĒÅ:ę±eg­©\Ž„ŗķ€Čä˜Ē ®ā†“iZ­öŸ]Īó”a²;ŸZó'3¾Œģp%“Āš_…|GŖ·Ł¬Ė›k–S˜³čqŠœÖMĻƁ|†ĀŹvŗ“pTełCõĻš×õĪT{WģQ©žĢ‹_iæĆØ’nĪ?³%Ö|®NRžŅīKig "©łXŁ×o{o{¢Mc6›¬C«YĖ~xœu~¦°å¶†Ī¢d6^%æ°ŗ!Sw9ä+lųćUŠH|«D‘wœōśŌ9teDĆŃīõ’jälP[ĖhbŠ’}\gæµ]¶¼Ōį†Yį!ī¢ 'fŲŁ³}ć-w_[k;ČU`v£ pF¾%[„Y-&‘ŌgļV‘Ģ'UGsŠ>ü/ų­ūAė2hŸ ōļ ®ŗ!ó…¶„{䙓 |„Ļ?…{‰?ąž_µ·„¬†»ńĆV>šŹÜļ.¬5¹{x Į‘Tc5×O ڹįb8§J²ĆŌ¦öó=^/Ųö[M LÕōoŪÅZ¦µü~éļdŒ\ž€€®>¦¾jÕfĻ_k¾%Óü tŽ$Ó”żŠāD<‹Ų‘ÓšŚx;[—S yRÆ?µ‡%›K[Żt~Wģ|Ÿ§x›Äś^©®ųgĘh ±øk[‹i†ē±ėšū öjŌ¾ź:ķ߇ž'µīÆ©ĪøÓ¢&"Ē?+‘ߊ˜Ó³³91xÉÉYó⟌ž=š×ˆ‡ƒ’=’Į¶Ŗbµ·–ŃYćļ{V7‚āÓ5­m Z~Ÿ<Ļ(yQe9ÉÅuӑāʂ[æń×RŗŅu_Ėomac ² !D>Ńč;ąų ģt^±”čz­Į]Ķü!ąóŒ‘]p‰K•+µ x‡Įņ®© ÜŻÅmǘń0G@G~õÄ|PÖo>0G§X|G½mVĘŒ ļcĒ īz{ńMÓŠoNMI­O‡Æg­ŻXų ŹĆÅz$1“mäI‰˜yJåō­R÷JŌ.4mJŅėIÕmęņnmēd†AŁ…rU„Ųč§M#Õ-R¤‘.~lÆ_šŖŽ}= ķ™Y źĄu¬éĆ[3²'=ćGašēĒWJŖŅ &`¹ź¼uµųƒį„‘2ܙ·»”~x5ķąō?‘~–4ķ‡ĄĖΧåņ:Łōū‹“›“iՈŚO_ξ„š„ō›Ė[]GYkiUÓ Ä¾ė^ż9ŸÄuٳ/…¼ācRxķį±XSĢTQ•8īļŽ§“Ć–zņé±ZøŚŒFaœ€żUÓsŹŖĻØb𦧧i >ÖŅE Ŗģ1ē¦j֙NJŪE‘¾ĻpŅ©O5Ą CۊŚ1źxÕŃśįŚÅį©5-Bss½±@‘8 ™®ZĀõݦŽw+qŽp*Ļ.²GQÅÅ̵҂€uĒ5Ćų«D¹æ‚o±\„‘”ąc%O­3’R±ŅxB“} Ķ{n.¤ŽFŅ[éõŚZčö¶ø»µŒ<ÜTœō­"“9¤ś#žÄGSצ·µ·[Ć÷šOźjųŗ(Vm6Īź?*AņČæ{õ«ŠģG!ĮųgN՞"a%­w‚sœē&‹½éf»h-Ök‚sČé[FżAŝg‚,õæ&žžā`"!ēļZŽ“›X¹Ö#½µÖ“ū¶Ÿlę”ßCžKSn &ĪŻ™¤;bfĖēųAÆŌķµH5ė»>īK1d!`'ó¬ŒäLŅ“}Śt·—iē•ČÜ9嗭x5UŽńJ[giĒLRJĒ<ā=mō˜uw²±¹ią-Ćg­w¶v‰ 菮PqLĵ©YJö·Ŗ%›ļŠęķ˜*PCT`_^¶ł!eŲŁēÜVO•,xt—®}( ēµyfŗQG9øĪ+ź†? ōŻ3ĆöZ·Ū¢{›’ŅI“‚T›æ_ĄS £'ĘśÅīØCo§µŃNE]^:·šTŗ<–zę­n—r£-ŗżę$zW–ų+]Š4tŽŠ!Ž-˜Ść FqšéL¤Ž»āŅ5Ķ)ŽöÄØ€6#?\aˆīx&…įŸĖ©;ŚŻŸ“‡Ėī•+šņéb_TµŅn…»Č„÷^ÕŅų'TÕ.õ»q‹iūwĄĶÜäš)3Ōl®ü)„ŻIkÖßi="—ē©?­q߆¬®ī–]&X­1&d\n.'œŌJČHf³¤XĖ6*3ģƂ0TśW‘-'QaScü=« ½ #.ē¤éóÉ C"Ū·Łöģ'±«ļh7DĄ/]¾†±sœ»ƒūFe–NnåHą {U§‚įጻØEž 0)¢NkwŲI>zę¢Ž<8WVXńõ”ī#J;ø j°B›”ņĆśŌ]±ĖHŽqÜtœŃJ&ž‡qHÓ8 †ĻJźµ/YJl­”‰7ņZFėJåkR£JĻ7ŚT¼r*ɂFNW%°½"I”ĒryĮšp‘¬žJ0U3ō«0A 2|ųā|ēŖfFNÆ<2\“6é$  ÄćX‘I1pÕåFx-ō£›”“V…öŠļą‰dˆˆĮ³IĖø¾Ł”‡'Ŗʱ%ō·mŚSÉOo™‰Ŗ°Ē§“Žo‹'ū=Ņš%ŁĻ]}–%•ä#h$óĒć\¦«rģ‡ģųd>½ėxłģĢ(£e9ppzQ$QļŒ;ya˜.OLš«‹Łµ„¦»JĀ[§8āŗ¼Į ¹²ļ<Č)ļY¹\č2 +[ń/ƒ/®Ī—­Om0;XIC"öČØī[SńDĻ6³Ø^ßĢĒĢv‘Ėē¶jetF=Ź §ÜŪŻI ¬‚ułh ä;ā¾ģųū$ücų±m¦_käų3Į Øķuy Dš>ū ź}«MHż.š_Į_ |)µx>ų!5}R6XåńÄaq՗<é]ż¦™’½Åõę³}?‹ui¢bŠƒ ·`¶—5'<Æs*|gā D]k%tQV8€Į)čßLvÆ{še·… •ģō-6éāS‹‹œ½Ž¾Õ¢“Ų»š~!“KÓ \^·Ū-‰("ĪKĆ錯ÕÜ „Au‹6HƒeAܹčżk¦&S<ƒĘ_õ› SOšæ‡4{ŪĖķ˜3*sē‚OćVdƒGŠą·¼øŌ×RŌn³#[Äæ<2cųŽ+]ŒłQ„įkŁ|Ueāßų÷ÄsŚińfŪO°Ž1I >ÜvÆ ÕĒ•,2iČóĄ³ķ‘÷`Fy’ėUĒqXÆ®ų’į§Ā=&÷Ä&Ō£»Ū"‡VˆsŪcŠü’ų’ūjx—ā—ŗ†ēEšœSH‘"1S '’ķé[Ó§q)u??ÆuS+Č×O3æŹKÅ¾§­bĻ/– Ä™võé]Qˆsd Ēk 7öĮ§Hā)„eC'ņ¢NĘR˜Éäک‘Å$p£ģG?)<Ö-œógōį+7^žÖ9b1Oo&ųc| /9 ž?­{ÅCąļŪZi‹ĶvķŌ,”Dǧ\ŸŹ»*ja~|Ł[kwzÄ&ķ„•Ģ„‰•ć=ūWÓ_ >^Kājā ĖP’ÄŽ7ž%UēŽĄž5*7 JĒYńCĘz‡üA„éQĖqp¾V%“¼–Q‚¾ŸJņ›_‰WÖ÷SɧN¢ŁāhÖ`žēō£Ł)2×o/Æ5{ˆ¦»n2p?óéo5øµ‹‹Čnļ®ķ\!łWéPįcŖ™°ÖŗĶĆBŠA^B#~üĆ®=«éoų"ūRÓ|=ēźWV¶†،eӎŸLę§c¢ŻOžEŗæ¾Ō“‹U’Yķub§ O§”āŗ{‡e®ÜĆ38høóĒ=1ź84ķ/I½ń”7ˆµ= “­mœÉ$F=­ lä}:ÕĘV-Ó=Īo}Š}:kæ#Xަ5r9ė]ŒÖÆ‡.uū 7½Ž2«üF©Õ'ŁŲłw[šGÅ{½B’ÅZübĖĆ7n^4ŻøD£§ŠšóQŌ>ųæGń֝t“j:s™ r’ēØ"³ēGB’ZiAūXj>(Ņō/XZŧkép^õ¤åPŹ;cĘĖńņ÷ĘFÆā‰S°¾Xķ~6Ū°įH#ņüŖāģe-O ō=[Nš¾³aį­ę}Sķņ¼īä`A'Rēr?:ō›«ų‰”ßiwl ø«>×f ü«u3†p¾ĒŽüHń½æ…ŸCšÖ¹c,vÓ7Łdš4,¤“»ń8¬ĶOß~‹k‹H§Ō¼+,ĀM²ē1‡łOL`ōėYĶu.œlŽ#ö…še굹Ōų˜—ÓÅ „Š[[a‚£ūŲü+óĖU¶I^gĮcu?_zäHÖē-$pĀö„‰šįz1”õ­­;ÄWŚf·§jńĢčš¾łŸ  +h›F]OÕ߇ž-xjĖS[ȧ¹(‚FTĒĶļų õf••£\ƃŠ™¤C•„Õō;_i—EōŠĮc:•såī#Ž?S_–¾>š‰šēˆõ I›Ķ–]wlĮPNG_lV)Xq—CŽŗ•¦Óž4Š ČC Æ澲ųM¬[|Bųw©ü;½ūzĄ3ŁŹ$9d#$/½3®›ÓPųńoÄæ³Ē‡?¼1ks&·¢jp‹“Y6,ŠnċīdWś!xCāē†hoƒŸ~8ų:e}VÓā’`Ż„z>;õÜš›:u:Ļų”“k»I™öEęa³üB½ūÄ?bńŒ°å.me\ēĶrŌ@Ņ?ž’ų-wģYuńsąHż žčÜ|Lš$½tCę_i\ļS½µAlī±ļĻń=®ŚB“Ļ<3 t÷bŃd“‚=³Ā±”4¤ą½~’é˜Ļchw¦jbČŹ@±ŌW¤rɕR]¹ƒ(Ļ„HĄ2“Č^¹ėE>ęNC#0I’.b¢–6g/sĄ­FÅ«3 ó  CĻzŚ?tm’ƒh>…†Ōõ­Qš÷Š<19°×tŪū{ø®P~ņŽ žĪæŅWž ‰ū^é¶oģ›šŪć=„Å©ń$Vė„ųŠŻ>UĢ!b:Œ=}3JWpåķś’Hč‹>ģÕ§ŻMo“*õR;טxēDµŌ“ād“Šź=†)ć#;”‚:~5ęTF‡åwŒ¼+gį-c[š¢BÉ2:]¤|ŒÄ•B•~A’ĮC¾Ų|Uš£{o„my¦3Y•=„źØÉSŽd{Ō'c9®§óym=•厓ØŪĻk¬Y1†xęĘK2>æÖ²DƱƒŖ¬ ć»¢rŌ“)@×2"—‚HĻQŠzFˆH-¹‡'­t£.„ʽY01ŲvØßœsA ĘM¢VŽ>^G½>S‘.UĘ#” d¶é¶pĆ(Sž•ad“»$įNµŃó,ˆEŌ1y™ ~0ĖČ9ŽkśČ’‚%žÖZ'ÄÆß.$Ō'H[AÖMŚlóFsĆ8A8Üy¬ēŲ鉿Oü/ń½åׇ®¼?©ČÄz [ ĄO/ā9>„cžœŠō^ņźņk%§·dómå=3ÜWDnž†~Æ„ézõ–”įļŲŪj>ÕķŸMÕm'Œ4nŽ„~`xĒ'9횒=ų*‡ģa«žŹß“'Œü,,n4ķEö“sßž—+±ē)Ź7”^ćÉ{4J?(®āh”Č€:“Õ{Zµk$QF–ģŖŁägŒóZ–§i§_”¹šwpAÆØ¼ āa¬éSč÷[<؟”,øŻYŹ&ź]‹:±%¾„ ¬śĪv(ū¹ōÆDų晦ūw†.ck³„aó(éĻå[R} Ŗź}ж²4Vr_%’ˆ÷Õ³­/‘„Ūł,§yŚ@ļ]p}&`XģćnÓ ‰œµts^É:¦ŅZ?/oά,XųōŻÆ#‡Ub>a‘Xŗž°ŚŽ©°TVĮŽ;ÓHĶĢmꐦÓJwF1‚;ń^×įŹ5±øDņ"b ķ<žzŠŠ¹™ļÖ÷śwh—‚3Ö¼?ć~œž"³³Õmć–ÖöɑPEÖXóČ>¼JFV×穯kšä^—q¹M—L¹Uļ_\Pfuŗ†§„ÜZ\Xjßč±(/éÕXGėŠóŻn×Ět „Ķ=µō2™óøI†ō÷˜Ž×Ć <ČÅԊ‡nļUüq®iŚ<)l›©§`„Õ°"ąV¼ÖF“ĻøÓ|ÉQ¾ŹŽŠį÷ž}k©AåŖŁ)"Œ”¹©®ęųé÷ /ņ±Żō=éIhoRĘū̹·™YŃ÷rsŠ÷TƒBV­-Ü7Ņ®’pÖ&Öw¢ŚŁų~[ŪĄ`•›äŁŽ¼NńV𤖸g…_’Ė÷‡±¤mVŌ/`—Py! Ž0{WA¦ŻĘK)M…FI6¹šŽ‚¦ÖF†YO–X.HÆ!š…ęń\i¬ųŽĪŪū-fó ^`tGž£^~&½ŲüąYgłŻ,_ŗ^õGŚ ×ł·h®ĶßkŸFXé:Ÿ‡›ģkkkt³Ŗˆ9dĮē>Ü~u.imsuµÖp# Ķ|ķyÜ’Z0øhS„iĮZ)Y%²Hõ/‰^µų¬hś|¬¾›}d/m§Œt\ć č¼~ėZ·¶ŗ €Hąō«ŽHõ!IJ±Ö">|h%PJu®6 5żģI 8;·a“#ŠˆÄU‘ć>.ńbĆ{iāŁJƒX€Ż.ŽĀ\ć·5ūCūTAh>ü:Ō<=²]NęŅ+ŖŸ3FUIćčk²‘ąckŁÆR—ģĮā—Ō|%¤é×3Å9Mȧ¦Žzų ś£ćĀķāļģ’ń‹į–µ ɧ_hW1de”*ėīC’× Ž(ÕÖĒókš^śņ-N°šōˆG–\±ĻŹJ’J÷¤š~«ć_‰Ņę¼ģõYŚyę~ćæ¹•g(ō&JéŸ*ų§ą÷Åo„'ńµĀAuįŪMbH šŒŠcc•ąņ8==«ōöVųŻ«|8Šž xm]/?µ­)lžąķ ćė’qō¬„+FķceŌņ’ˆŚ<~2еo ß:»]ł“G‘ŹHI |ąWē—‰fÕ?³cšŽµ Ń^é²1ːTƒŌ{~¦Šuu6Ͱ.®‡ėWü“ö”מj‰ą-Zżµß k™¾[Fīƒ××ķŠ ŗ°Ó“ÆE®—}–œšąq]ŌźÜņ£¤mV°Šü%ā?ĀL|-Øé–²ObźŹ<ŁĀüØsŌ˜Ē9ÆēkĘÖŗŽ­ćļxļY·¶m{V¼–śžhĄI²Ič*jŌŠūL‡ Üå6»#µŅ'•,£_9€äž‚·Rw†%†+Ī©.Ēé4ičMŪ.ąA õŖš®œž+Ó'Ó„9Ÿ-Ć`©ģAõ¬Üō*p±ÉEiā'E[Mbo¶…ćĢÜK0µą:õÜĒ·–É*—Xb™‚ō³ĒįŠå©.§Ž¹/ßb¹;WŠ ”{o=Ųi V‘ń„ą\s}NꝞ‘ØMĒĄ?ZоšF©«Ł ±½‹O|ä™paŽ•*&©=ŠZx#[‰a‰f“šP’NŠĒ׌Æ/‡źU-£; ŸŁĒ[š†Ÿ©ųŪEÖīŒp\a­Üī 6H'Žŗę¼ĆāäŽ#ų”]\kŅżÆZÓģV;v j©żkXS± p›R]+ĄÕWBФń_Š4Ż;B½ŽŹmJ衊ŻfŠ™>ēētšR8³æšöµÆų{WŽXõ:śKkˆ@e õ8õ澋ųU®Aa©hBck2_ĀPē§Ģ3ĄšqŠöšpēv?§†^,_~Ļ?a3Ķw%¦Ž— (ź"S—-ģ5łūń*ēK據>„§*H™·/ ©ŻĒü»)˱ΰ×rG„ü4ńóiZl²0ņÖXü¶ē‡ć©5;kßųóD˜Cā=*žBŹLdoF 3ķÅvS‘¾ cō/öīń>ūC~̟³§ķWį䰏ÄZvؚ~®lg.śkJ0ĄŹģ™€< ėÖ¾ńż’jėŸ^ ¼šg.ų™ GwH’¼Õ-ś ńŻø|ƒźOb·SųēŽx+ƒkф_>_^j7ÖNI®Ś8Ī2nÖ“o±ŲžŅß²t“Ļųƒį”Św„~"jvoi~žXHµ„#LGG’oóé_‘šTŚRż–~~Ģ?g’Š’~-é²Ć§ėŗ&‘>Ė•€Ū.ł'QÉĆ0ŻĆy™ćŽz±QÕŠxeJyŽq‚Źj®e)Å?š­žä~ųƒXžŁ¹¼Ö5Iī5zöFžžīw/5ÜģrĻ#I$šē Üäl;WĻÖzŲ’n8s &žš“`”Rģ’²6!f‹Ķi@„å] •=j)ŸUŽ’ŚćåTŒs[öžTūł˜Ē±ĮˆG%ć čž.ŃLJõ«x§ h܏ž,’tö§|ń·ģćā ō_ŻMįvŌ­Ę¢ļ“äŪ4Ŗœ š¤žUn­ĘįŌį(>§ōA’3ųēš7āģiyš/ąo<#āaā&“2&•r“-•”N³”©$3ŠsÉē5ü™ė:D‹ØĶŲßqÅC°ĮČć5†6®¶OCłėč©Ć™¦U’bs Õ±&ÓѦю¾®/åc¬ŠēĖ‚20$w®‹G½i=kĖoSś¾MīŃāhϘƒĶĪU½+”YŹéZ„3•ÓūP÷:œ§ŗ¶Óī®ÖFóąó7€OŻÕč:q²ø“óa”ą Ņ1JĢčm¬ ŪĮnū ž3]\Z4ŚF©™Ŗlā@’»WŌUB,ә/Šll4ĶNę×JŌV°B<©”mÜī=k¹’)-gŪĖ…×k‚3šķÆJ1©(ĮŻ&ģūł™ŹzCu¶:ŽÕ#ĖĪZśŪį€ķµ[×īŃÆ<¬aAéÖ¢1ī|ĘyŒp§hīu^7ńķŽ‘ŻŗNm`Kiar˜„`~uųØju?ł×o¦Ė5ä 㔤’)cŽ˜Ķo‡ęˆJĪżNcĘZœ÷wžŌķcÅüE;1ÜӀ$šū×öIż gų~Ė”źÖ—ø!LQŸžŻ³’Ć=³Ķo ē*-h~ŗųĒŚGžēG»† fŚT’Fi(>¾ƒ„t÷æ “µ°:¦™ ’x‰g…Fv§­v©#é0RqI žÕz¶ŸØųR?Ach‰u}ĶŹķ ÄS8ŪõÆĻŪX­¬o~ʁc9Ś<Žk‹cč);«Ķ¢FŠ›Ił»{ÖŪ,K–$näOsŗ9Ÿ<2čÓUŒ HążkCĄÖ1Ż=„³#“rļ'|§¹ś‘V=‘> ²OćÆi‹•Õ”8žl€ēż~ɟō]_Į?š„xš“#Ę"v\0CŒd]Ō‘ó”\ ā·Vqę’µ7Ā}GCšV«āæ i©5¼7]—‚«OL׎ü×$‚Ż4ŁŹģY²\’n£ņ§V‘ė`ń.T®Ž§å’ķO¤EįŚWĘVA8®”Žxö}Ę£ßšĒŃ<=i: ™OžµęŌV=śu ūm2Ģī-mRvżŚÓO YJSkƒųW9č@ćaųgq„j·:փ<¶”Ų—[“Ōž5OL·Yąø„E/˜U·wØöe³JMĄįaƒ1g'½Jš‡õ +Ū]JĆuݰ†`Ncm§wēµŁž&:żœ~jž"Óµ˜ąŅ…„9óÉ]®¤i¾²¼›ĆŚ®“Īę‹{ōÅzŸĆ=`]šŌŽtä4oč;W„*Q±ÕN»ZÜüG’‚šųsNšæĒ­PŃŁj¦˜—eAłYxł±Ó‚+”ų¶šEäņ%Ę ó©Įį“’ą«HīUćŌśĄh’ė¾!“’bĻ,ŒTąē}±šæįž—¤ŪY¦™¦Ś’jHw4‡—‘½+:TŽõćŲóļŚcJŌ”ɝpś…•ŽeUN±{~&½kįž½¢ų³Āś]īœ±Æ¢Œ®0ėĮ®ŚtŻ*X›ģzüQ\ĘŃC£ 0õņ7‰4ūYÆuk}6ÜĶ*–ŪpOŅ™ŪJ¤¬ŽOĀŚ÷…n“Q“¶¹‚ę3øĘ F#ŗē޹’ŪąļĆļč^ ųךs[»_Gū½{FœęY®K9e9õČ>¢¹å°ńU*ÅĘTÕÕõō×Sęźv÷v19»V;qĻvō>ŸJķ`qqnŹŅcžµĶmObƒŅē'¬Z&Æa¬é)?Ł#šŅh™Źn »8ü+ń k+½[ÕtŁÖ'\“ "Že$vćéįe«Gó'ŅĆ/¾Q†Å'šŌq·ų¢ßžŪųžūį4ėŲ^˜į„zƒŲ~*¾Ÿ¤]ė·7Ö¶wRéŠĀū >å/ōōś×»DžŖ›6„k]'OM)I‘¶»–Éa]Ć_Ų]kVš|n³$­”g85ŪLóŖÅŸd§ˆ/ ‰ bWäH£…w5 {F»Ü°¼GqRƒ zZŽ2<ŠģūRŹél +³Å żāćŒW}¦Zioqs§°F›,@čŅ«›SĖŖC&¹öC!ŠFŪ˃ŽjŽƒ®E}½dGū@ūTqKs¶ÓoŒ-q ³chĆ%³Œ5s—$µ[&ĪŒąŖ±[ÅhIĒé³Ü[¼ŽCÅ3 ®AėžæĪ›'…’“„-Ė4å~U=3ž5¼a`4ü!yŖéĶqere“FcŸ”ÆxÓ?įÓōߒ gŌ¦f‘Ī@ōĄķTc-Å·¶²k+čb”Fz×3a`“3̇fOĪqŠĄęl½ō‰fHQXķ-ž>µĶŁŚY>£sexäŪņö>’DŒ®w×6Ėkd vP6óŽā¼×YŠlīŃ÷[Ķ UÜ ŠØ²9ŗg‡.–ź;«X&NGH#žõŪż®śŽŌC >rœ`ŽA÷¦Dē(g $ÅqśõŚŁ#Žē=ūR0›čyüwĻ=̲L]ƒ6'­w6^CBŠōŚŁ(2(ĶoµÄgĖ_+?6G5čv>,žÄµČf…Ūޜ]™¤;[ńjj·&Œņ1X±Įó‰ƒßc—VhxĒCŒŌrč4“'Ņ"y/c»tt屎¾«šGÅ#Jšūčļį’¶Ü–,ew sĒOZJˆłĆėŽ,¾šrń6#•ĘsŠāõ«żAl`”\,±Xꕙ“cbæ‹tū«RÖ×BW8ĄZęļ58ŅS/½vž3Ą>Õj(.¼ó:ʎ6 ć½QĻ©¤hĢéŪ >µmŲø#gĆ©ā©<Ūwžq’1ŌW°’Ć>ß_hcTņ&¶…9xŁG̹ķõ®Yb¬ō:éŠGć/†¶ž¶€é¶7é¼|ܱĪ:jįō _]ź6ʚsϹĄ*GŻ>“£‹¾§BĀžō|+w„éĶrĘ4č `œJĀŽ ewˆF=NrkXÖ”c™ÕķEĀŻ\KøUĖoTūæ•t? ~xßāƳm ü;š¤ž"» ,“/É\õlśrMlĢeō÷ąĻģQ¢x/TKß›ųśfXÓN‡ m wxēҾā“Į^,µŽ-ā.„iįķ"Ź6’ĘŽ?ŻĘ‘įĀõ”£MīC!ń‡‚ä»Ó®ZļQ:M²½Ń²éš·į;XÓty4Ņõ“™U%ó™0·žCu=ėhұ›€—śå—‡omavŚ®§"7“ ‹¹ĄäŠTšę­Ē}§jŽ<øŌ,¬d.”HJŗHøéŪŽzvō­£Ž‡ āŸæ‹5D“Ćŗ$P%¬- ¹†=ŽqųėĒzóXoō;+£5Š[x0hT‘†>ź+NRā¾,ń$śōŗ·ˆķ4­äó&Œæ–Ŗ3ĪÓ_'ü]żµ¬< ·†<¦[jڶÖ[«į ņ°CZ˜­Üü±ńēÅOüDÖnõko4nūÄ3ČŒŽē„yĶŽ§ö’NĀøü±ķ]q‰–ĘCąīupJŸŗG"£—dčw8^ŻjŽy;!¾Ż¾[UļėK*3¶į"…aŸ§µL£s=JĮå³+('©§]Ž€‘_ždŃČž‹>hÖ3Og~!›PŃąŲ.&É@}Oį^[ńU4ż_ā,“ų~šŻčń‡D NS'ņõŻ$īrÓg/­\Ā »Ł½Łp©€T·|ž‚µ|1ć{ŹŌ$ŠYģķc?ß’×P¤oɦ¦ü?µųVń^Ÿq-ž«qĒņA+’ĢHōWξŅ5KķjēHk'–īÕ6Ļ S÷Ę3ų»ō3”S—Ćzą˜Bm$† »‹:Ÿ„^Šōė[BÜjW lą}Oµg$RmŽ§CŖx‚Y ä`UĮžzšūFĖžļ hpkŽ'hnbČR Š»Så$žÄö¬*"œ™ņĒĮ+KüQń§5-Æ<'4Č!·FŚ3ĻŻóü+¬ų’sįŻ*ėOm%$Óå¼ æg crē8ü؄,e;Ÿ/iZ­ÕµŅ‰_äÉ_ŗ}ķš£Ā¾#lŚ•Ė\Ć„\&¼7cņ5­™Qw>¬š©įŻLk9|?§ŽßŹ‘Ü哷>ŽÕµšWĮzoĮw W¬ ģ„ņŪwÆz–ķ©©ł}ńį”ŠüUsk$E“‰ÉāSœäcÓ}룻—QøšÕ¦›¢ßYÄ£ĢåYxžŽq?3²Ń5q §…õĮ%Ģļūœ° r;~uįž:żŸ4Cui ¤¶FrC$ŔsŪµh§›/ĀÅšs½æöæŪģ„W’"‘ćkqŗw®n}-Ś!Xłq烊h‹M|<ńƒ¦ųj=WPԚX`ĘŹJ3×Ū§zć[Ä^3_ cĮör]›Ūµy»yq€y`øé[Œ¢}ā ­Cėń„õ„_#C*ĘéµW?*ė?hļˆzßü"šœ5oąDdŽ5 (éŸ\NR³]N;įūč|;'†u]¬Q†Ł£QźšūŽkóĻāŸ„<-į½zīĆÚŠÕaŠY‚Üž{ŽÄV2ÜŃG”į÷‘.AeVŒs»*ćFė(ß”ųŖ§&‡Ų²÷²Śß†ī$)p ˆ˜(<;÷ƽķžm‡”óNl‰@߆<Éņ±F1žE|ŻūLü!Õµm&é/ ˆ-Ū˜\ éĘzā°”’ÕŽ0“µ>š mßģ÷1ĖŻ‘Œ źüāŻCĀ,Š5‹+8ļ­UI“~Ņ‘’1ō¦mn}5ń[G“m[Nń.• źŖ³FŪ†`“”МWļ‡üwö“6׎+ż‘j7 ¬ųnžŻšE{9ebØsŻNWšĶs{$Ŗ)|æUśżę‰łĻhU‹ÆŻgҲm¼Ų–e;[qÉĄēčGc‘ĘĆH¹ ĮLT±īŖæ*Øōā©.‡<†;C g>“Ó&ā±Ę1)ēņ­UʦI†gd+…$ę› øŽr¢wēīv5F©õF¼m4 ›”³qÜļ_¶’šAĻŪRŁOö”øų'ć[ģ_~ ”²V“÷ki©ņØTž0ۈśąö£Éu:韮ČÓü˜ÄRN.„Ełķ †¬]NŪŹ"淐>ÕēŌ5>-ųłš¦-OEÕüAc;®æ„„ŚŁć'§š#õōÆĪļų"ßĒZLś½³}3QbŠ—?,S*ńĻb~ļćķ\ϱ3ŲžR’n/Sü7ų£q­Zi·vZeŌķēp“€Iō8Å|),ad`Aۜt®ŗ¼u9§¶ĘÉ ŸĪƒU%Ō}5ÓĪnK2lɑ““Ž{Ty ø>08^sZš z8Y×Ē„I,xTl:Š4ʼns\±LąóRĄ(ņ‘ˆaėC6Lµm3E(ĄR¹ļڽūö[ųįØžĪ?<ćĖ-bX|=qt¶ŚĶ½Į/”ģü»ZĪ[ó?ŠągĘ;ųoEų̚żŒśe„éž ’¹oģ$QäÜ܍ŲÉäc§§é·„Ž<;ö}Ājģžu¤ĄäKr>•ĖQjĪ”g_\ŚE!¼Õ-ę"9‘”züµ’‚øžĒößµ_ģĮ®ųĆĆś<§ÅŸŪĶ-¹EĢ·ö$fHN9c€GŖœuÆ:¼­ŅÕ »ē™sm >Žļ’ g’)ćU ĄC‘µ³Üc„sĀö+3n'ŽzÖŃw2‘ÖéIåĮ3ēUÆ[šgŒ”Ņī-”Ų©"–ÜĄņĆ҆IŸMųŅox²;(-ļ-ķD~s\*ę4Qž y·†µ«’|Dń]åŚ}¬o*LIŹwųŃ4śųo]²Ö4½>[Y%eŖŸjī|Č®’¦?*žęŗ"Ģe 3ŲZKNŹŁŁĻłā–ęå!‚[;aę;/ ½®”AŸm¦OsYš°œäõꮯxn(Ö·¹/pqMņj\ø’D¶šy“(7 Ōöž)ŸLŽ;=Æ·ļ}T‹Hķ|;āKénž8³Č:īéZ>)ƒĒvVqŽĒlśc”e|’ÅOOjž=}wyĖÉ Hdžīj1įöTøæ²%īŠ¾Zķ4©ēEA÷ĻAMńvÄZŁēc—phƒ“ŽFšEI$£Ę­($œÅp.”€ÆņqŌPwd.‘q+€Iē5Äx¢Ūģ6ĀrȎ¼Ę®ƒe+«I-ą“—ĻIQĄ?{õj9`c‘×h?jbŻÉķ^É~ß (§iĻ^s^”ŪŁ\ŁĒ( ³H»H?ĆS(Ž2čmé6°ų+NÖ£·…Æ/.Ų6ęĄW!¦XŚév¢5{“”Ü«}< ę—dS÷{sT5= QøŃ’·ķ&‰&Tecó ņӊe¤_²ŌBiņĮ=¼RH@ @Ē>µŸ £²ķĆ1źOOj|ʑ•ŠŌ_jÖlå“ŲØįäž_­{\śv‹yįū)¦šaŖd!L|”@ėŸéH§#‚æŠ`iĢ2“`óĒZܜźļģ³Ücp «‘ڱ7Hčü­É’’Ų-9GĖćøĒoÖ¼7ĆŅų‚éäµC”<ćśŖ$ģnt¦‰u¦Nv&CĘÓZŚd‘¤Žäm˜Æęk&tÅt.­ėؘŽŻ"Ūd`~ķI{ š$†—.d|qÉėš™3tŗy²e‰—Ė'Øļ\ūx‡IÓļNŸ=äBķĒŹ€äšēœķ«= .s’§M]½‘¹¢čZī™"jvŃÜ+d!Ą;N1š×ŸĄŚO‡ōO:xä¶ū:ĘsŒīś~B¼|LŗéæŃĒÊŁW*ųčŚ½mZ¶±HæĻēäg¶—p% …§Č-; ‚y™ą™¢PÓ/N1ŠņdMRCÄVϦ]h7W·oŽbābŪ’6ć±ā¹Ē°Š+ƒpŖFö'µa+õ=(DėģeHŚ7a÷x®†K˜¾É81 .KGn€sڲnĢν=•¼SąōµńŹźW\蚚ļĄ†@G^ ü+ź_~Ņ:»ŚųzĒ^·[ß ŲŲEbžDD“* Ÿń®š2¶ēĒf‘²wčm|ų„¤xgX‚õļƒxnåüåo¹årk÷ZÓO›Kżž|qńæYÓµ?’bɍӠ xef~šÉ>¦½Jś9‰ĶiPå•Gk“—›z$2§į®§cć;M"ĪŃ|?s,ŖŪ.82D䐯kÖ¾)Xé>Ö¼1į »Ł«©Ūy–× J«H:Ŗ7éXT}OR8Č9Ø_sä}O_¹ė>Ō®ī&ø·`’G3’Ģ}ry ż“> ė‰ć›Ēš[Ēoy£<»e3†zŽ@ē”ō®øVÜšŖä³NŖö’æ¦§ĖŗĻĘŻ{ĒŗSGqöm¤Š’®HS銹,·I €·Ś3ÉQÓŽ¢Uō>ļ/ĄØFČÆį’ķ>õÖt¶Ę_Šž½nŚźO.ĢØ ŠĀUz1²±Ńéž^„pm>Ńo ģfŪh8ÅWMFŚÕŚ$““C–†™•®_ˆķŻ&øČp1Ļó^±įÖ>4¾ÖīÕbņ‘|µ9ÜA<ä{\ó<Ŗ’īv:uŗL›ć©¦EökÕeW'ž‚°”nLjŲļt‹č.ÆžĶ:Ūł„_EÜü+Y4hu"ā+ˆDAšŸJpChā—CŒ].AbÅ ŒŖ}óŽE[‚Ż!ÓnŽŻJ0ņcœz}+®š[*ŗg¤~Ļ6?ž*|$š,+ŸĄšvæā[+Q¾¶P$Xe|1ąĄŸZśóž %’ĖńģG¬č¾&ųcć KāĀŻNÜęĻQe†›,`o!”"äq‘Ó¶OTh^-®‡äÜuā½,=˲Ŗń÷1nk›ł\yyz„fåÆŹĒęO‡üOg©)ū5⼫÷6”éZˆæ“PŹbl ŻAĻjĒ›©śÓŃé7ŠO­éWÖP‚XŠ®õ®?Ü|4ńg†ü@KµŠÉęNG?†+¢”ŃćfŁ#õóįĶŽ‘ń{OŠtļjvŗ¦›āe[ # ˜®O õ ƒļšüžųŸį{įÄOü/ńu³ŚxK‘ķ§ŠTŪ¾7MŃČ”R¤ģåәĆæ.6y}Wļ-W„õüŃóO‡t9,ˆV²1@§ ÉĒéŠīu]"RĘėP²·°’„Ī÷Ś\Īæģcł~U<½O“Ķš+‡•¬Ņżc‰ælĻ„?“š2o†’ü5Wz‡š¢ó°æś²3±ŁL{”ü¤ēž‡óĀŽü!ń­‡ƒ~!čš×€~&éWQ»ÅyDZ^ŖÉž õ÷®ŗ˜V¢„џŹsH¼}\Õ§ |×[z=ŪĘzÓų·ÅšĻŠõSlšµņĒē“I“1EŚ×®ėįö¦ŹÖ±Ü!$Vó3‚=ó\ī'ßäŌ­V(ž­æą.‘®xwž /öļ‡nmw%žCėķŗæāńĘ«ą jzOŠZK™4ZļI¼Ł0§dČõBÖŃŁ3› K4ÄPoE5óuü‘ōw€üYa®évWz”mŖés*·Ź~eČčE}_įxt_hk~ædŗ÷nŽ~÷½oŚ”åÜõ_ųÆįš#Äæ³6²u;/jZ¬ŚŒw6Ŗ7.Ķ”ŁĒ{µĆ~̾/Ōž~Ö[]†ēH¹øÖSAŌüąUšŚåv+‘ŻrTę»#WCąų—)•|·…_ņž2üaĖśÕå妝iwØ_ÜEiem4ŅČŲX‘A,ĢO@'>Õü„|nż¤¼ń{ö¼ų‰ń^?‡śo‹4{ɲ“żBt±[Ū)YAČ ĮČėĒą«T]O⯢ĪIV¶u[†”-~Ņ”•æČüÜų› ֋āŻ|KdšŚĻrÓŚøLFc=—ééō®_Ć·šMs•įW’¹žĄpÕwS ĖW’ģ"&[¹”ŻCk+łšG:²ķ³Įõا#źāżÓvāE`X(Ē| ͆é¬T3Ÿa[ÕK0­ŻÓ%ÅŽŃ»ū£­Ü-’«G5“rÄFpjĘqgé&W¶æN‹;x¬”eł„(p÷Åx?Š`iuK™Œ,±KóÄŽ£½rTB$™ęŗåŻī„õͼŸŁ²Ģ Y€łńœ^…”Mģ 4fÕś×3zŲōh£Ó,ŌćsĮčE]Ō-/5 *ś×KpuB"\õnŌŪ:£#Į|C‰p#¾ÓåÓo”ysBć”aÖ­ų*t‚ģšFĄ$€OŻ4‘­Z•c`ÅXF;k«»¾»ŌēK›¹<ÉŌɐ銦˜fžHaiäpP~•‹į=^ų§ā[G‘“ĖhĢ–\nY;śėTīrÖŖ’:{æ‡i_iMF0v’”»żkēŲµßųĒ1jVī«˜„ÄÖĻ)ņÜ{Ż*&¬|ī.ÓÜó’üJÕ¼guö {Ł­ķŚ\¾Ó÷ĒqšĒ‹Ąz_ˆōɬ®,må(0ŹN֍ó÷’=k–uu<ų ź|×ćĻx×įÖØēˉ{¢†MŌ³nCјŽ½ZƒÄ7še¤7ŗ,épĮ>XÜG#"®MN)eŗh¾>|XÕ4[½'T°–iŁf@ąI‹Ę~øēŠżšŸÅ’ é-§‹õ VĘīŃ¢,Ö"`efĘ6•ĻLׄNŖµ™ÕC~d|Yń@ń’uym£²¶wo*1ŃWkų›¤j >1Éń;ĆQB4mVU–3¶;6# ¬¾äWŁ_~,jŚCŪjś¢‰p]&Ų[å•r čQ©Ššń_5Ļܟ|DšÆĘ‡厶!K»Ū1¶Ķó"J‡÷łĒ£h°ü:ń/‹ü#āū”¦=¦nģ. āźÜž1ī:~^ÕŃ9u9p”å(Ÿ|m³ÓüāC®®oÆ żŚŹĒĄéĻą+Ķ“‹Yc!a¶e#5å×Üś|:{Q£3"*ą}k|>SķāøŚ=HHÓ“ž&Pާiē‘^kāM+ģZߌ-QŚ Ō2€3µ‡ZE¹³SL¼†ąŹņ:S]ʞéo4(dea»§µÓJ'™‹>~ųĮ£?ĆÆxā’-Æ4k£-µåø ”•ąžCŸÖ¾Čż›~(ÜųWP†’HøĘJ‰!‚ž„tļ^Ž+”ńųŗnŻOŅmWÄ:/Åøu[ [{[#Ŗ( 9'kŲžč—[é;šK”Ė#¶ÅĻ9=†+ŃåV‰ī`»¾¹}9C„»”²¼.ģż+ ±G•ŚK*OįQ‹ł·$’$}«š§Äštŗö… ·`҃2G=+õSOš¤hćZ²¹ø·½O6Œ¦²„ͱųŪY®§7-¢ųŠY“ń{wœ“'9°-|+„éWhöŃXÉ#oqĄfõÅtņčy“ń ŹČf³āVšÜ_mŌ-ĢöÉ÷ŠŽ•óW€õ‹üeÖ.ģĢ–Å –”mĘ 0~‚±”zŸAƒØŁķ¾7šMżœŚ…“>EŲģ\ćž ø·ŃüM„Ż_ŲŪj֐\¤ƒätS’×°œzžÅ Ž-3Ī’noŁėÅąš÷ķ[ą/‡6p~Ļ~"’(õ25t›ĀÅVI#V#ļppHå8‹²š($Kk°Ė oĒJåücØXŪ+Śi÷1Ü\·B§īФŸCŹŖq6bµ6—1)Ų–üjż«[ŲH^Ģ»m1[“Üļ<9®mE>Ÿ·dyŚÜr T“Ć Äų2ƒ•Čē¼v3nĘEĢVŠI ¹„š8Ąéõ§XŽA †k@¦ܓ[s™ŹG}hš^¼ŖAX¦Pwc׍=ŻÕŸ`T /ĶfŁ1m5‹ķŽrČźGcŠÖö—wż³|–ÓĘ<²»d^ÜŅ3”t=÷ĀŚ&b¢Ń0˃»< óŠā‚F.XHIĢƁŗ¦]Ģ'¦ŗÉu}jn"Y øį±]E†©§^[›cŚŻŖ Ē½ŽµHČēu{ˆā¶»¹ÓåTį’ׯ ƒX½¹Ō¾†F¹|¼™?u©‘3aukÉ'6ĀŻ•:åלÕĶa¬µ 0A‡®+ǼiØŪ®¼šŚ\ “ó€‡nĒ­sÖōĶ`&•c›ęÜ g8ÆÖl|«‹‰St„±9īˆŸC»¹ø3Fƞ}Mh "Ō¼Ja‹rŒr ī>ōŪčt­įģ}šX≠';GjšźĪīÅąŽŽ,Ļ“ŗóźj\†¼ĻKŃķģ 8b}=ŖŸ‰īrŁ,—P •ć#Ó=©ŲĀlźü?ā[[ 2Å*Cēzģ5(“’y/<› ѰnŸ•\a܋bÓAe³‘ŹĒÜēųjžµo Ē¤Žhń;$,¤yŠ~aō­‘ĄiV‰t%Vqqü¤÷ŖÕ֎49aexeŽA»‚ßcļ@XäµŪ[w–ŲocœÆjåćÓ”½Eˆ3q•Š ¶·;-:ĮģaY/RTƒ‚ŽMAyiĢ×Īܰö>µ3Z 3Ÿ¼HžŃ™dhłz{ó^Ać­äX!ŽOÜNv)’Ob”4kXį|9ą„²ß›å¹fœž¢½"ś} ƶ ¬9ˆˆŒČG€ū§ėI³S‡Ņ¾ M©Į–]X[šdČn{B+¦Ö|[d4õζņ’ę?^¾µ&nž' ė×sĖ0K‹Wd©æ„v:Y²µ…m&“š)6q(ūø„ÆB,YŠźy"ūL)g5ĄĶ¬ŪÜ\5„Ā!ŚJØćõ¦‹Ž…‹6t\-·ÕQµ›]ĶĢ»’nĶžւ¹‘=É¾‚[‹R²»óšČXēæ¹‘Æ'ŻpuśŅ“±E[ˆŸ*ŽI¹ĪqŽ+Š“ß&žÖŻa‹ĖpЦ¹„3H"…Ž›µÓF±ĒNÖĄÖ?‰4nģ\ŚÄöē=TäńéJ2»49­2ņ-V8``ń’»˜`œzÖž‡®źŃjĻ|·×FŁqū‚’/¾;֖Œż~ūQ}Au%œ¤lł~:äÖč×m żĻ˜£«ąŠdßbÕóĒ“pą>׎øĒÓåÓę™Ö!*’$üĒŽ‘%XćøM²2u8 Ū[ø^Öhž `“ ĻļI[”õ9MFöUB <ÅOõŹŲi·śŠļ…£B~fōʌJ¶³žÄ€ł‘¤ČĄ„Č®cuÄ×Ņ$Š ōt¬ęŠ:Ż._³ƒŚćĘ;Ö¤ŃMØę [³6>fĄ™5“C»8«™ŚīHdvڇiœWU£Ķy2«)dR€oƒŽg£ÜÖ2¹šz^Žęs½Nqļ]a*Ćm †9ŗe½½+ ¾…X¹%»$³ y@9ĮĪMsšd‘%×Ųį`'Éõ%åüöNŅ+%Š*°Ēć\ī³ŖźW$“Ķ'$“Åma”„¶rḖY²Ū»OuU…~RAÉü«G©³^ŪG}OPKm:9 ņó¼Ž2;q޽Mų[ā)RŹę$ź—ŒÅV5O˜óŠf¼üMKhĪŖXv}1ą]ōW‹NŌ¼6ŃB1¼0Ć#c”#šõo-ŻŻ ¬ÖūvØfč=+Ć©[[:m#āų źP ¹‰;UŽĢĶ«7‡ģ//4©¬¢» Ī€ŃJNęņ•‘ēSųĪāūĪūmĆüłbOµq–ŗī£­źšV‰k%ī”<†4Eū¤OZō©Äć•Sō_ą_ģ=ā{MƒāĒ/Gį •óbÓ!?éHB½FqŌ×čn‰įEÓōĖ-#ᦑ¤ų/Į°ngu„$÷ż©8<óǽvĀ]ĪYU¹jZxVāM3JŅ ¾ÖåeE•”¹‰½r:W¢ü0ńgŽ/ßÄ^4ń h’#,vł`­įĒsŸZģ…™›–‡kįżéµEŅ£K+1–sĆ`v€®”µ­:ĘĪ[-Ż$¾†C¶ą6 7”­Œ¤ĪoUÓMމ}?Ä0nüųšXŹC’Iģ}źH5_k Ó,¼9q$ŗPm€ÜĒ'žŲĶ;JG3õ–Œ–ń ą¼Õä¶ćp<žj•ÖµW“ź~0½œé‹nc†<ń õ‡Š~y¾­®_éņBtėItĶō×.zf¾;ųŁń’Ąžy“} Śū_ńl1p±ĘŁć'5¼#sE~WüHų½āO=÷Ūo¾ĪŅJå„N@Ś}}kęMWRūCŒ”Ą0R­vSP”UŽzbK”Ų@õؤ™Ü6Ó»8#ø«9&@ĻóĘÜ+7łÓe€ļApO>Ō³GŠ 'bó¶„XL†7Ė(·z—.†F;“×oū&£† 7/ļ 9'¢Vr•É?T¾ųćZ¾“ńG…t½eōū¹ā ŪX‚Ē-exr×Ē^ ¹×,5©VõŠoiBģsŌō+ŗįȑŻųC^Ö¾#ŪM­¦µÜep!ńÓ€ØõĶZ{ˆuEX•łū8¼żö} GsX÷|Ņuł±éYÉō5„ ÆxĒĘžųnmtK›ōĻ•öPwļćx•öÄ’k_~¦Ŗ$ŗ&»4æ»Į!böĄĒÆJĢŻŅ:ļ† .¾ųkJ]¼W““÷©pFŻž¹Ł"ŗOŒŸōxVĖSÓÆ§ŸY¶żō ɐ½ņ¤{ńMŌ¦Æsą÷F×-漘Ą© &Üē±Ś¾Øń'ķ5ā_ ų#L—ĆĀĆ̈Ēo,€nB@8ćÜÖĶ\…N‹į’Ä»é.5}ZžE¹ŗ– ĮÜ Ž•÷v‹s5ßĆūnl‚[ŻBX¶2²>yŪķXĪĻ”šÅżWD·Öļķfx ŗXņCqė^5¤É ‡¼:œ6ńʛņē ßżzŹ0Ī«H]+ĒŗN¬Ö:ü)}42aä`z.>•莚bkŚ…‘ŌÆn-ģc-ęæ”­”AÉ£āēĆK=7BŌüM¦3Į¦Y;Hązõńöæö‘{hĮū>ķćgņ8éG(ł¶:&ÖĪźÖśĖT†o-Ę—æŌWŃ’ī­ü=O‚ŚĢŖÄģŹ1žćŠńB•Š{čhjß“[ ZĪ’QøK—PN7OĒĀüV½#Ņķõ+3‚9™Õ±H ֋¶K<ļįt·:F³nX\[č „˜Ępł'žµĖ~Ńæ ¼/į“·ń§ƒµ ›ĖMR2źÕ±¾ Iœśw„byģģ|y”åW1‚zŽ+=e(”UēéU©“Ņų_^»Ńu6’MI#ž)„Ęv’)ö<×ėæ…µĖiZµ¤ķ42Øs‘ŅL|Ć=ėGę*ˆīU”āDrfa÷qŅ·¬õśKŌ|=xöāŅī‰ä‘7ģąØõ®Jū™łļń3Ąś4:ōƒk-œyēhIąÜūWĢ‘†Žłķ h‘‰Źšp+žģvşT|Õ"ńg‚¼IšėUd¹»ŠA6œģŸ4xäüÕcĄæ<_šgĒžń’‚ēņ|G Ż™ćøPC 2å}2@#؊HžüžüZš×ķ-šįēķį)ŚęßS±Ž;ØŁv½½Ź¬¬½ˆ*Ćš÷Ærųsć+æ ź/}¢$åc¹F<8Ī3^•Œ–„Åō>ˆÕēŃõĖĖū iūž-÷tĖŌ}2+š3ž ™ūx‡ö–ż”]©ćž*ÓSŅī^%Y¦„”t?ʧƒųWęw~æƒu^ ėISFæv›KhņRņY:c±8śśW ŗŽĒäĒķēšÓāÆĀżCÄŠŗŲ_6÷ņė2䬄{ńõ ×ņĖŖésiŗžÆ”ŻGŁų?āżGĆŚĘ£ŞtĒU Ū.øäWŸxŽ{k^&Ō,­„šŽż™Õgå£$ēå>¼:ØĒ]K;Ļ€?Æ5Ķ[J¾bѬ»ąbFW»Ē§õÆ“tūĘ}²,{āąśóķ[„ŠŹ{Mݤ]fŻÉć„r²]Ķā¤cŹ„c†ĻZŽÄ§éųrĪDžå5½ü®1_Æ­I”[jqq'’Æ0„Œšs>{7½žę5YwcµŸā½0Ét%H|‹5‚5.2ĮFPhGAń~p1éTį¶“Tužk™–`0€¹}ÅKMŽ«O°$²w¤Ö“bßģ71ˆĶ©9Ü•#µ;iZŚu{„’i ­Õ™ż«®æ–ŚŽĢQC.@ź)™Ā¼Šj7KfEr¹é^’śD‘č1ŪŖ!‰¾fÉźzr‹§X.’=„I8ĄƒT„Óķń,¤+ÅiXų~I­ ōRDģ 3 óŒśWIt‚=9ŅXÄ»°Qø zŠ3›°Ž[•å#ĶĮ¬Æķ ¢ŅŪŹŹAĻ4GcžÖ'µ5A&īGWa µšÄ‰Œńˆžį8 }©”‰–).šBŠĄ©Ą9ūµéŚTӍ>;s‡Ś:÷ „3zĮ­L+$!ʐzńķXß¼tŽ‹ĮVzJžŌ|É §Ė Ē®+h®ĘńĢ'ųĒc­›±«Y½•ą+‚m“Ž¢øæų®ÓRÓ¬ōkd>sŽrõėÓéUcxDZÉŲhŠŚ˜Ńł¬ dć­u7Ž‚ė l²)ūĪąVܱĪĖį± ĢŪˤb³ol|øL«*šö©*-"Mx.‘–āź„gŽ»ķBŚŪ÷i§Ģ:ŽÜPh™Ā_XźqNŠA¶nsžāŗĪ9£[™#†ē#„e9t4‚ŌĆÖü-&½t§.$*Ų'ŲUų®/ō˜­ņ õØ;)Óź7F’ūW†ų^˜„FbŖ `ķ§ųB±“ŠŪA·]"ö73!Įädzśč:įp_ۚŠĖhnÖāķ$aēīżkŖE±%ĘŅ:ūQck^'ńG‡¼/£\Žźz­Œ Ds銱4_ézō{cwŹķŚBø}®jŠŚĘ T–[£8G#ÓŚ¼ÖĒĀ6ŗŽ”ØźWņ\Ė<¤D6š`>•ębŖXžŖś0p+ĢsG™V_»”kyÉŽÖ鄵^kČō5²ŗ€}†RW 5pCp|”ē3 ć9é^%ZŗŸéMI+#®²7“ŖĖoļ Ō/Jņßź‰į˜nRįÖ*d`N½r9”ŚGšų~ś=ClĶ4×YČĪ@ē³¾Óµ{ļÜ$Ö×6Ņ„™ckß„|łā F=YŠŽk2)G˜Äżåč?*ĪQw>oŒKSß¾i āY”Š1…ˆłü³Ękß|WšJš×„ļuį¬;ŻÄFP§÷4”{ž{ǧ¢<#C†Ž-BAx¢h‰Ēzūįf¢ė§j}ąŻdbYy÷UĘ66§ˆekĀ֍¢ėÆżžWC$xč}«ĄzTWśeͤėšcĄR3[F'GÖ99-uMW·M;m®¹¦ŽCØZ—ĪRHä­ėÕM^^¶šOķ›š»ąķ5–‘®XĄņ\ٳBŅ“f+‹w Ü6]r7—ńõš”Ö±?Žž™ø9<³œSoš…G:)Ę÷ņ³‚KĶŸĖ‡ü’öhš·‚iķožß[üńę–u-ķŁZĆZ‡yĈWžŌfæ3Ļp§·ē\tāÓ±ś}XŻ]ŸsĮ¾É/ķ—ā†ž0¾s¦ųwD>$²ÓĖe āĢ‹Ęz…ó3jś?ž kū:Żx/ć/‚?iŻ6é.t_ˆ|1ØŚ¤aZÖź™£”œüĮ•Oa‚µz”ÓägńqT°/ą°ĻZui8śs©k÷Ā7?ōż.éŽE|͹lś փDöŤ ¶8éN–Ēö’–¤Z~µÆiž'Ѽ_į[«]Åze¼‘A(M«xø$G.:‚{öÆÓļŚ§Rżš?nOŲgDńĘ‚¾üYšÕ½¼—~0Ó4o0Y\/Ź\ʹc“œ0g®pO£J„揎‡ņŽœ=‰Įćpł†^­ļ¦üīõ_ŠÓ±üāk¾ƒGÓu÷Ń|iić .ŽąGcĮ»ˆŒ†ćčs^Łš±­µ-¶wB8%hƒp:W%k%”÷93šĶ«ŅģOćč<«|ńIhŽŅźęG*łņÖBcbć°Ć޾µłµū@ü,{ߌ³ö³šœ6ѝ"ēÄWZ„Qćå u ĢcųrćłV}K „¶jń]éø¾ŚI5ł³óūி®ü;Öµ/^Č5m:äÅ,r’„ĄnAģF?:żšŒ,¾"h²_BæŁś¬h>ӏ½Ūp÷õ­n}²R…ŃŠü5vŚ-ō¶·s}©yŠ>uaČ śäWŽŗļĮ ~Ó ~Xčž*1žŅ:P·Hu¹ &UmĶēŗ į6ī‚3ĪźŽ7?(ńW_§ˆĀ«µ5K;’’ĮF’ą”ZʁaāoŲ÷BšĘˆ'Ʊ·ˆõ»kc‘ŻāAó s’AēÆą×ĮĶnĀM*óĀ7—vpė–R}¢<ü¦XĪI źsŠĒ)'f|O€~¬«&•hė:ļŸmyvŠł+æūyŸAücšŽŸģǬ|FÕm¤kØuH-,e+Ąvą®}9š~†‰éi¢yÜöÆ*¶ēö'‡Ļ R2é/Ńć]` {ÕČnœ² SŠP?Gå±ŃG<ņ؉YR1Ōę%¬ŠFq”7;³]g-X—,õxE»*9ė“Ož]Ŗ ]ąž“ģpĻC³ńʝ Ż|ŠüwįĄ"ń ßYćc÷sŹöś×įé?gĶoTÓm.$ń߄žg·qĄ¼géƒYĪ™µkS—Ó/|9sšāw€5«H¢¼»ˆ^i— sė×Į8žuįæ' cmmxėö€r;‘^|黝ŌļsŁķå“+Ąsļ[śg %O–PxĮ¬YŃs‡ųÅ`Ķ-¾°É·2,²ČĪ¼;O»—HńæŚP}†ę!°ē€ą’\ž”&a*‡Ņv:}彝µåżŠĆ*oˆ²ąH=G­ky'a zwµ-ɕSœńÕ嶓v雍Äēļ³ˆ¾4F1¦A Ś%Ģ„‡ØPNŽFŸWŠ4“½KĒž Ņ54žž\(W\“ƒŪ+ź…Ÿ >~Ņ> ×~x•Ē„>9hRJRP¦+‚:«~śū})ūVÉtś1ij~ŌußųŽh›Ä:Mä–7 œЊֺ»Õ5 ˆ'ņķW£S¹*:-„Æ h¦Hއ#Ø®7Z‚ēĆé“Oy'Ņē”tņŪŠ”īiģ»döډtÕ²×-£æµ~ö20GŠ‘\® Śųbō5äN_–8ĻUPzWM)XĀ®3鏇æßįåäwv«}%ŗÓC’£ŠWcāŸŚ@ųĒÆé³ųÆĀfKq4*N -Žy?JÖU©ŁŸ0üEÓ¬<ćżkĆZģš–†‰ś»oĀ8ĪĶŻń‘ĶsÖČ$x"<œ‘šä©#Ŗ;= ²OŗpĄć§Z›Īū+~š6āG^˜®SØ·5ō+·`»š‡R²Ō5 KkĶ>X”¾·>bv= y~‘® ½bę+ČRŹń$"XŌżÓķģkÖm%ŽhWnI=óÖ·„ŽZŌļ¹»įĶ Åśž×ģÖx·‰a˜1 Ž„W-įK+o†ŗ™k©Õ¼ØKIĖ`~5ßB½#„ęGÖ>ųõ£xiķ纚Ž”L2Fz_Kų»ö¦Óuļ\i’Ö{D’?.āRłg>›æ„vżjŪž'+¾‡ĮŽ2ųļ/ĮŻ+ĘZŖĮ=Żßˆ“©“veĻłĮ$w’_œß¼;ż¬ö:~— Ņj;=°~X’JÉāOžÅå\³r]¢¾üP¶š¾£c}­ŃImDB+¤0Ćg‘^'ā/ évóŻ\XĖī[Ž? ĪGµFOuŌī>|`ÓtŁ×öżš~'³k_üM£ÜŽi1Iöѵ„’ÉT,ĘxV^Ū~(|2‹ČŠō©5(žI¼ §'ļ`ć?Ķ^³”cÓO×ófy,&;‹§š×ämv’M?½Ył»Ÿ‹54Æ xĖVā·Ņnd ¾Žvś×įÆö¤×?fŌīāH&&Mü¶O=śÕa7?ž>–xéGƒĀ­„)K’I/ż)Ÿ_ų/⦅”x.āĖĻ–MRhŚ<`Ī =}k”šu–ń|——‰oylP£FŹp_±\żkčpČž ­”ė ¦ų_RóŸTÓZŽęI6Ć#ræśõŠxwĄ–ÖīĖhmķ¼ŅX9 }8®Č»3ČÆ#Ū|į7‚śq™¢•€=ĄõÆŃĻ #x_Ākįļ Cc<(y&Š ź3ƒŠčŠQ޲ōŁl5ßyʼnł‡ ~4ŒĖķi…̒ǹ˜š:­bIy-äŠŅ©ēŽ‚$®:i¢UV— É©mo®ķ|×[ųHģ(2/Ķ-¶£"Ipy-Ö«„õØcøCŽ‘@ģsśĻی ¶óŖBOŻīiśd+žZå÷¾ī1ځP\E1ėĒ5^āé5‹+“É#&8+@ŽŸ©jépöŒ$ŽŲ^ąŠæ.Æ-“Ņiŗ”ˆĢvszf\ę>Õ摣u^A=Gҵ-ua%»+DBōä#@ĘŚa™Š’ź5­ę(-*(SŠ`PK—C™æ»¹k°Q\žĄwÅ_KiµŌ³:ȀœtĶJF¶‘/–exe—'§„y§‰ō«95VK99 ēnsZ LÉøšĒöŖĒę‘A+ź8Æ)Ō|=yg½®“%‰Ś3œA¬dp³^uQä·*0:U'¶]é#LÜdÉ÷©“źQv÷ÅPŚ[!*÷j3°(<{WMąHu=fuKH¢b­—I[ õĮ¬GcŠu»MfŅŲ]G4o*·*ĶŠW9¦jQIiymØ2}­Žäp~čćõ•4ģ#Ģ|E¬ObdKkv™·l×ę}µKNīŽ2N?„śr•Ąē'•m.ŠĖĢ„qž?Ģu½Õ§“‚žcH*ø^żĶW 9ō;K=:šM%Ÿ|õ%Y{ŒUin.,Ü"ŪK÷±84’źG7CÓĻ‹d—ĆÖDŚtrMY³‚T’ Æ1ńMŁEĢ*”å~3·éRŃFY›ØB].õ 3ŠW­hz{Ȑ$×fÖŹ Č_jŁVń»Ā1ŁŅo[Qˆ®årłĄ÷’ ńI|IxņĀ—ł¢P0O®i›Cc·Óą¼D„Zŗ[o9ēłāŗ Ķ:H&!® źW$vŻ@IœīŖ'ņ ,&Fb©xNļK]PŁ^¢N<Ō³Ņ.ā·t‘€AWž]kz •āĄ…~ÖéŹ9ą{{R”neĪkVŌÓQž_&ŁmUŽŠŖ0¹ö®?T³ŗ¶šļ…AĘĀ2sY8“jjŚĒ¤XļžķĀp®ķb¼ƒā>±„ėö§AŽÕāŪ&V_īćœT›ĘG oö -:ŽĪĀŌŪĶ`Ä6wŽĘ°5Ł/õ1m•øuˆgw|ŌIŽēYeeoi¦E-Ą‘/ˆqń®KSæŌlwF&™ķ˜üƒÓ51•ˆS9/¶ßCēŹŒžI8ĄēÆ­dŁĆ6”ršāHf łĘ+TDĪ®ĘīžI €‰$Tn§·j›ÅZw£Hžk|ŲĘH?Jc iZ¦™am‚ādĪķøČö®CŚŚls" ČūeĻ ‡¶j'ŲŚ1±>¶×³Oe[‡‰nļZé|;n芌V$ėĻ®I=M##”ÕtŻ>ylŚEG‘H=’ӏOa`WćøĶ8njr"šÖū9'²HĀd©ćœ×”i u “Ēr®²G!)éė]P} „#²šÖK‹FXįŽ«†É\fŸk¦Įqjbŗ†N6žsQ-Č6™RV4ŒGьV.·¶+x<™IHéżŃļXNęRNē'K>ō`»•¹ŪZ”8łOµ܃’»G‚ąƒ“ÅĘ lió@gĮgŪČ< ŌØĘꊟŚ<š¤h„€'Ū5ĪĮ1NĻ;»ÅæµDßCd­”æ¦Ķy„–P‚ĆķA„¹|@X£u`+3"['G]é¼ńZÕ“ˆÄ’Hdź: ĮšA¬/œO# 31lņ;V„ŅÜ|ŅF0Wļpk'K*ĖāyH6…uˆž*ēg»‰oQāBŒ 1ĒZ„d‘OöɝewwĻßcŅ®łö±l*«ēŒzՎ;™·śĶ‡”ę?%qņ’KŸS^§šėįŽć="óRŌu8l,dsbpźćūµj¼±¹čQ·S×<%šėĀŗF¤ś5æŌ5häT›÷oķšūDš~›¦éWƒź0Yjńy‚Ę #²śŸjłü^!¶īzt’<ŖkĒ•‹Āެē,[Ž>•”.£„ŚhÖŃ`¶¤ĪC¹oŗ=1^l5fŅ·C築:½œ‚v7–“]#e*=kēhƒgńgDZCsź·H„,åĘ Dõė^œiYÜś=ō ]!_Rńž Ž!ՙlb< ģ½ńōžU›cˆž!ˆü4Éįļ[”3Ęė†;x?)ļļZF&)†žto=¶—”xB_]¹qÜģn;œšæ^µõŲÕ~h –-FÅfńŒøßqæ mĻŻŒń]0Z‘)Xło_y5[ż14½N 6ŦżōŖ¹mƒ®:՝7]šž½y.ą{Hµ •cÅĄ²ćłśVÖ9\ŹZö†t čou=pK4™Ś1»Ėnį—æÓšĮ·ÕüYćb¶0_G„ųQ Ėäʁņ2wŒp8ŖŒGw8McĒ^š•ĀhšuškZŌŃą—Ė>]æ=Kb¼Ūā'ˆ,t.5߈3ŅleņĂ eĖ•öA[FLGęĒoŪ{Qń™§x[ŒŃč6óŗ“ŃɆ(3Ū­~uėu I„&āi÷1c$®Y˜“ė]P€IŲók›ėéägšY„]ćėYļ÷C6ņWŽkSšuK¹@F {śŠŃćž~‚ƒžrwÜźŲńÅEĪÓŖ±Ūą’)“i,\TsėÅ(ˆÜqü«µ3QčX’0ŖX{×I¦hń\«øź;TJVś?ĀėļėĻ­Śė‘Ė™µ|¼¹ĮõõĄ_xÆĘ֖ž3žÖćI™ Ķ=Ź,>é>¹®čÉ7”ēże³Ņ¾"ŻųĄWŚ½Ļ‡ķ ¶Š‚ģ¢t鏩žuńž«ć”pśŻ¾‘sfČK ö#÷=ėh«•ķyų?ń—ZæŗŃü#ā;?GUŪew"ƒ'ųN:­}Õąļˆ?|ā¶°ń…Æ†ķĄ$·ø‘xv8ąĒ”­¹,TfĻ­µÆxbćįĘ·|ķö}ŹfŁ£ģžĆ·Źæ:.¼%į¹üD™eor¦0‘įˆĮō?ć\zóŲļŒ± ×õ/ü=š¶™®jźö Hü”rpH?•zæ„üuįß³hŗDÓ {»U>bī0…žŸmn†U#sįoˆvOāx‚hÄQB%2A PyµĮ_ZiŚŗéš>”5ÄP@ĮāēlóZB] ]3”ų±©Ķį½7Āzē…o”¹xŁÖšŒ±c S_yü'ų£­§Ā­/S×ō˜l/-ŲŹ‘o$¼}pĖŪ Ŗh͟xĆĒæš±¾ ųŸY¹²µ±-1+ƒĪιśtÆ=ń>¦–6éå±»²²eŹ8ļž{Ņä#cą ^ ń‰Æmü% HŠÄ 7!N3Ō‚¼fæQü?§ŻĶ¤=Żå“ "<©Ą[Ģā®Āf/ÅļųŠļąoˆ'šÖ“®ŪK˜×—‘AōźkóOĀŚFŽ–¬VŃcœŒ`ƒžF}œ–ć:?Āļ©źpAnd·@ėī}k¤ń€õ[+[šśźOx_.„ą•€?•f¼ŹSHłž +ūżĪe']·˜•g'i#>½«Šķµ-n÷J]&m¦"ÜŻ>µøIžĖ¢iZgĆČõY!·¼½ø‘ sčĖĪJśó/ˆ&µį%µ†ÅZąē‚Ä„#¦;öż+)³¹ńŽ©kåĪšHr9ć¹kĘŠŁ„®1’ÜŅŠŌŽœµ2¤‘-XÉö‰˜¼ćh?Jūēöoų§wy¢Yx:õķ×PI[ÉUä*óü«”EŽR>ŌŅ.¼å"RīžõnU(Ģ£ż®z“Ģ÷>~ż <"šŒ>7Ó¬Ń5>5ŠéCO dn¦įŠų+R•ZęMØc!ŹõĶr*}Q¼†—†¼Oyį {Ćśģ,žD7I梜nRĄs_^|_ŠtÉ'‡ĘZ4Wz6­n²1¤øēčzWMŽ˜Ÿ¶æšAoŪžŸx›ö>ńõżēü#šš}«@{‡(ī@Ė"ž«»€õSėĻōµi%•Éic’W*ńśQQl\w>žųKā=#ĘŚ#ųo^“·:­£Œ8ł„’~ŸēŠōKOÓ¼=é°m&xĢwp…ūń‘ƒłdÖ- Głę’ĮVdkoŁSö£ńwƒ¼9„ÜKšļ_yµŻģ•ņŃemŅ@¬:ķbqß=ėńļS“ø·ŗš'‹ĖUé‘S„,WM>ć’”Ž2WĮµ7ģŠådŽW‘łWl79&µ%ž8ÅL¶7Gźæüćöνż‹æm ŁėZ…ʝšwĘb=3]€6čVB6Å+©éµ›’9ŚOŅæŃ";»f²i!dø·’5øµ‘O߅¹Sżø5i]-678ĶKOŽ jPݹÌpkå Ö|_ၔčQ}£R“œźVC`$¹eõĮ Óė^|抵+œz–™¢ų»ķÖzęœÖŚ5ś+±÷M¤źpŽ™ }³_Ėwü#öwæųGń?ZńB°h.&0Ž#ÆĖÜķt t S‚³FS‘łÆ¼É¶@wÄNCŒ*6Ą|l%zą×|NK©$ t|3“÷5BE ’y€ēŌÖ÷…0X1Ī*O™]R5øę‹Ž;ŽYެ0ĆÆ±¦†r[wνøÅ.tl¤J’˜ž=åĒlTŠæ3•lŌsÓģzĮƊZץ‹ž ųŠޤk¦Ķ²śÜČP]Ąxd$uõǵß³/Ęķ#ā§Ā‚’4=OūO\Ń­#žuPIÕ“©p¬§ŸŸĖ=¹<{ŌÕŲģ‹?^“{ķ2M"ę;«[ø…Õ£ 2įÓš®6)5+›Č$™ctf1_FOŻćØük†¦ć“>9’‚…žČÖ_µ×ģŸńąµÅ“W¾$°‹ūsĆs÷ž#»ĖņĄ²’ĄĻ¦+üē¾#|=Õ>ųæYš•īi JĀ&”sƒzA¬!£õ3jē›(KyeFcœg’­^ą‹}. Ż;Tžmɹx8ĆVÜŻ eēŁz¹k«Ļ#éöŠC ņ  ¢¹ŠŚmĶ0_Awt^3,n#<7CĻćSĻa÷ĄķŅk󢵓 "v?+¤Ÿ^¤WßZ ‰o-­žęV\žķ޶Œ®D“č{l]ći²Ÿ-š ¼bø jĒķg[…¼N?Å])ÜĪĘ܋hcø“8ĪÓü5īž±ņtŲ!‰ĢO¾ŻŲÓē>"Ńײַ΁7ŠĪń&ż“£CunVd™Ź…åqÜžuÅY_\Yņ“ÉĪ; Œŗ­įMY/D’‘½cėƒŅ®x—ū*}Xū]¤³ Ų Ź}AŖŒ¬Yó,–é7—å‚U=łÅYk R!åÓņ­T6hųzÜGu=¾FFr8ÆbŃ5HōżSgķŲ`½3Q)tC'ń»½ģöw6Aø ‡÷½«ž²Õ®,mœÜLˆē5™¤e܃UÕg¹ŅåĻĪGBz×¢Zż²Õc¹Vˆņ Œ‘Afv½m5‰ecFW#«2ÖK¦‰d‚©qҁ4uŗ^æwi4 ÅöøĻ»^‡i³­›eu‘%¶‘€*’D{28 6k…Ɂųu¬-_V{¼F„ķĪ ’z¤"ŠšE-īÄÉĮé]µŸ‰ķåCoq"Õ ÉnƵ3DŒ/ųƒFY4ł4©[,Ÿ¾špŽÄv§éWpź* ²®ļČPŃ~Ķ–†ö‘^Io:M,J§qŒŒŪõ®WÄŗÄF,ą`— &]3ĪßZ P$Šõ@Œ4~hąšĄxŻļīßs4  †‚ģrŗĘŸsøŒ7ŹNå½C”C0¾7>d›šĪśt”>ƒ±Õk>.“Óļ§ÓmC4¤øĘ·¼5āł6F…öČÜŻėEęŠKōróĘX»pFrśRO.£ā'M6ł#¹·ˆįČēœæ#¦™Ėų·ĮK-Œ’X(¶¾_”nn ō®fĒĀĪÉ®¦•%L\ägėAŌ™é‰įy„»…­eHU”†ķšė?²²“›É.ŹÆ”¹,ēö¬ęŗ‘4x½’‰b»‘<«Ż<·½V‹$eCårfdsö&[+ČķĆ"+ćrś×Øy/jbŃ”mńƒJ[S7—C·h~Ś‹#6>öj†—5āŁG“ČN9=M`tS:¤‹O·3D3€@čÕå7zĶĮ–x$U'ƒŌšŗlŌŅŁN֌ zÕżNŽāxC¹.¦ƒ¦/©N-ÜX$^B<·ß5óWĒ?ˆWŸmäŠķbŪā €¢=ēˆć?ĒjRŲģ§³å WÄ‰Æł7Ó5ķāØģN7ątź_ķ¤Ō?·õhŚŚ,‹lł +°ÉÜ>æŅøŖĢūŽįVqŒ†j’½¾Jķæ’>‚ņ1ˆį;Aī:Ō÷ęh­Š—>KnNzńq¹žŖxmĮr,²–_Mߕjū·«ybŅĀ’R¾H!‚Y§*X\’\ ę5oŲxMŅ]HLėęl$/JņŚ×SōY­²¼)yį: %..ōÖ½½·Yü† :©ö5—ūcüšо Y^i–^ų4Ja¹·üų”ēcØ=OÆ­g$*5g&’?)¾]ßé1 Wwūu±Ū(aæÓōµ„ߌa(•ĻQt=¼"}G̲Äé6Õ*zēµź~iXćۜć9¬ąj“Š×ŽåÕqė]•ž®Æ§„«*Č$Č?ZÕ¤.Šó¬AĆŽ°éžÕĶ|PźæµĖKX%¹æŽ24Qœ’xõéUk©óy†é£ē_†’ō’ x¦ŚśåäMQŪou°|ČŻ2Ć·oŹæE¼ į³ā_ų†öÖD求s$3/VB éķÅuFzXüė2ŹŖĀ“jA^ßęxˆc··²æ“œ;G(hø8óͶ˜«mf·S…$ō¬j±U«ĶŹtŃKöxÕ=qšæ’"°įk€Ī[šq²2'Q•(r9ĪE&ŽŖh·„ ŗ€>h“QŽRB·8Å.^§|d‘Ńx{įēÓµ ’x³JkІÖÓ“÷RA?5LĀ®5-7Ō“²·Ł"snõÆ]ų/©Ųų[ĘŚˆu;æ6SłńĘNŻĪüėXÓųšżō’jóXÜÉ¬Ū —N[)3g#łō®„G©ł3>j Õhzļ‚ģōķ6ĪĪŽŹĘÖÜ!Č*ƒqśšŁų§‹æų©¤ŚšÅ•”’ c:Vdą3w9$χ씔ŻE;”‰Į“ǵ} }ćßéŽ µ±‚KČ”a?6}{܁ż×PA¾=+Ö„¦ØüƒĒ,šf*}šršõ§ļÆ½ĘŽŒģæąŗŗ?‚õÆ žĻw—ZLö_āńĢ}ŠLnÓB9YåIņŲÜ·Æ?Ļ’ÄĻŁ{A—ą¶§ńĮæ!½ų—‚Wšņķßq° ؟x¶ß˜=Ŗ1©\ųaZ—Ṣ佤Ņņ‹›»ōM¶|ĖšĻÅĶs É=ĖČیlm(Ƃ¤v"¾¬ÓÆ3@쁆^9Æ.2÷źśnčķ|ćßü'ų‰į’Š^ń÷ƒ¼}¦±ßÄ”™Ń†9øt ņ§Šōƍ_µGÅæŚ:ĖLOŒ^4øń½Å”ķqf‚Ś8 “b„r‘ Ļ^k²]>+7š×*ĒfŲ|óJųš ØĖÉė󵯻]÷>d[‰-n£1 ß.z×¼1ŹēśÕFZh}§²ks”•².ĀFŽ85ś/ūž×^ų-揈¾ż”Ö}oą×м*Ś?ļķžŃk ŹXš,†GuĪ`xäoNvjūšų±Ā2βJųNÕ$Ÿ+ķ+i±łćŸŲė]ųM­Ūź:HŌ'ų›]ń Ė>­«·ņK1vøU\IÉkO(¼ŗšæ·/ģßćo‚Ž ųūNĻįū›»i:̊į¢Gu/nŁŁU‰>ÜÖ?Įź–&Ņ}6āąLW „šĄŠŽRHńø_KB§+Ö”¬_ł[ļ>”ā}ėĀÉpćČu*ć`;Gµ|åń ö±¼ųbövß|cā=7ĘOµęIIŠ ›+’V¬„^Ēpļ× °­^-ėé¹ņ6™’ G‰uż⯉„×¼Qā;ėĄŚ¶±;³ļ•‡ ĢOtŌjž¾ŗI5oj?ŁśšĘdŒō;½3é\kßV}–S”Ó£J4”F)$¼‘õ_Ä/^%ń×ģĻį߀²h¾[x¤¶»ŗŗĖy¦XÜ;`c$c9Æ Ń4Č„Œ‰Óc#aN9¬eQ6„ጔ`£5~y9z^ŹßÓĒ„A ļ+īzÓf‰V_‘µ“V§Ś©h:$e,°¦½Æą/‡"Õ|[z<ķZņM÷/že~ģG½t6…6(ČśQs7LÆ©jæŁh½]œąڤ[‰õĖ6±™U†W=AōĶ Ų˜Ć¹k®ÜiwR鶍·“)b"%¾śŒr?:ź¬īcæž8·|ĢqÅZØW"'æµ4ylõõ¬y4ø/ī+˜ßČ*A\ć&‰Tl9DzĻŪZ]=ÓÉUG•÷^Ā»+ˆ5½īŹ×]šę³£Eq™o-Ä%Rqź­Ņ²“dŗeéę¶Ų 6_©# ØęœOēp8”b¬R;mFR‡&‚kC“ńÆō’xļĀz÷‚ī.§¶»aż¤e„Ŗ ä(ĻJżż“h·‹ĮwõßŻĻ¬XFŹŚę3žFyø®Ś,Ļ‘ĢņĖÅÉ]išæščLĆvr9ÆQ¼ńvœśjbX×j… z(ś×©Nz*šČåõ9,“F»Õšh¤ $bXr¹ķ_ųG]ÖÅ}CÄU”ø³½ŗ:ƒņ¬Xėü’:Ō÷pp}O¶¾ĶĪhē”ń^C⿆+ö­WI½»r^œz*$ØĀUŒZ¹óę©sŖXč¾+ūĢE—NøYS÷Ó`3ßü+óēĀWr>“bø “…č¼šóė/xś˜øécĪjĮ üÕ,Ģš-ޤÜ.ż®W”æ."Š8mķį ±ÄØŲq]85Üž,śYāŌ±8:Ėæü Åķ§§xkĀė©ZC“ˆ>š8®āMʌꯓ‰ī>Q‰Ił½«čpŪÅx…”ļÖōm_HŃō‹Ųb“¾IZ9 ¼4Äw¼ ÷;[¤cb…ģ±ņg®}k¤š±}ą[mEüKmjĘŲNįĒZū3N»ŗŃīDvP¬ö¼Ķ×­tGCÅŖbųÜj š8”R|°Ü® OŅÖMą‡psŽĀŗ2”×}„Y!—`Čć§ZšMIĘŁ#MФqž“Ī:…ÕŗYR¼uõ«pÜĀ‘L÷§©›$¼ŌŃ®ķŻė[¹xītń Ē ™C–^p}ėcnvvSZĆn’ÜbgŻ×ŽØėó"™NI_CŠp^GŠ„œ·µkZ)]’…#ēҁīu뛦öąĖco=«ŸH’źyī”]Įzķ={Šc&nX­Ä^i¶-"`ž•æ K"ŗß#&ģ(2”­”Ķźz ¢Ü&¦–—-“jė#Ī™Ļ#„Le¼,chuU8ĒsL{k¼ÜEb®eĒ884£§O.ž±Ćw"¾ļ7Xօʏ§ź×"ś5ņ]˜e—Šv \¦…÷„RX£ŗµˆ”Ż·xĶsZä:<©e“²FW,įxĘ ź’@‘B"D”N¢“ķ%øøGąķķ‘Žh"NĘdĮ­÷—$ĻļV4ĶIķ÷ ‰*Ny Č­©kRĖsšl~V0ܜ‘\½ķķåÖ ${uV8 ‚(§±µyvɱ¼²:ś×;āč;:[+JŖp |ʂ¢®|ł«ił—Ķv3œšk”ŸOx܂Ԝ;Vr—Cd‹&‹¦Ė=ĶÅż¹üÄf½OH¾Š“]J?³Ē*Fų ÷5™Ŗ’±»āļh"ĪāQx¶Ņ łFÅ|¹§ė7ź¾gŪ–[Héo-ž|»©g>•‹ŅI2ĀPæSč)Æ3ž[œ¦³į5K©Ė­Äkµ ¶å\ŹŲ6›‰$żą9É= nI×čz…ŌWP³0rW;‰ęŗė«{i'·š=ć~<ܞē­&€}õ…½•ä‘Ap—°ƒ€Čxo„qZ¶™}6ۈĻȹ žƒš¬šŌŅ!SsiŠB†ąxŻō®ÆĘŚV½ę[ż…Å„¾Į…#kT×AœÜ¶ZV’²jI=ź9,A%ˆśśWšjoØÉjšŁ­Ø$ćw=)›E¶™°ø’[™vą¬8_„vKŖŚĒļ·I09Ļō Š‡=Ø5õĪ£n˰Óå8ĀæĶśS-üŅų‚Öā…Hó÷]yńœŌF]ĢdvśĪödŗŅ. ŸŻ’Æø=kĮ5ķęŽózwSĻéķWrcݜ&¹®^Ųłp©É,Ā‘śÖ$~(’å‘ī –Tn sŠ–Ń¢(ź÷×ׄŹå’02sü«ŒŌ™!Žk‡DyXīf=sžEdkĒż­öĆŁĆŪJIœrĆéžz×Yq¤ź:^}Ŗ¤Ń,VĮ^U'ž}Ŗ%“=Ī-|wØjšš ˆH]ĄW ?€®ĻQ²K›UtœoŻŲRä ąŚT¶•ķAWR2qÜÕ«I!Šī3“eųąd 6c6.o-¬Q^5;†yĘ3OÓZ;Öó–]ļÄŠŅs4PGQāØ[ū"ŅyAHU@Żöö®;įüŖźZ•®œį¢¶Cƒ’_„fĖJĒØź¾²°† dŌąžó8Ų€‚ć\Ö”/öb@Z7³ķ ÓļX7öµ¬i w^õ³¼%-”D ĮSքģUĖFī;˜&€;”ąēī× {nkdY\ø©śÖń—bIc»’6?·ĢŠ£ ”zāøųµO6ł ˆJ!RxĖĮÅtzŅ O1X=ė„×5#grGœ$PqE‰“4,¦ܱO¹ćø©MĄPGp _­j7,É£Esoq9@¾XŻĻzā–A-š‰…ā Ņ'b¶J±E)L Ö³ä°.YĆäē•Œ·254ūŹćdČŒŅ­^Kö4_—oīÅe1™1_Ūɇ°F\Õ“tŸ÷Avn?6k&ŗĘFt~U¾ąŖ`©$tÅDoÄ`å¤mĆzPS•Œ ”µÄމķZ–1 Ø6>\ƒÅ!-½­ŗ³(Ƒ‚AėYq»jĆ`a‚īõ„ĢéŲ䎾’q°ā\–PŸÄ­ubźŗ|pŁ,ÓY[īĖmlW"ŖµR„-¹õĮ‹ÄÓu< 5IēĮO7Õ±Œ©ķ^­­kV÷;ćyŚK…l'kƜž‡|%ŠņŻwĒZ6‡ńßź1Ū_ņ¹'޹ÆńÄŻkQŠź-=Œ1” ¤żå^ł®¬. %3…šĒ„õ¤·z~Ÿåč_ |;”m#,—łź}łö’ėõ«±Å&Ģ’ų`ŚjƒW’KķyĖČAbūW=‹]ʏ„źPCØ^]C ½š¶äUįŲ{ūēµRƒ2“{|6·¬u{Y-…ż¬„3Ż oĮäØć?żjč|OćÆxCC¶›ÄSÄė"“I““oœ ėė[Et0|Ēįj7¾.ҼA­xJŅĻĮÉ.锐œČ¾€g™«Ž'ń?„4}fęēįw†O‡lēBÄĀr»’}Oō«åģ¤Ļń‰mm’żKUõIŪo“æ2Č~ž•Ćjž#Ö®lÜĻ4šŽ‘“’O·j…ķ¹±ß4F=Ķ£ēĒ?m x ĘĻĆ^ÓtÆkx;ļPš’z1ōćņÆÉ_‹~ üJ×.µ-kÄmb #䟛?)ģ+®œ Œzž5s#3Ė!Rē¾1Ÿ­aY3’qü«¤ŹrŅeL±ÜTw ¤ėżh9Ūī Ŗ6…P?K±Ż ²ĄōĒj d9av@ĖĪAN+:œēŠŹRģC‘§o`rKøć©RÅüŁ\3˜”g;r*‚ ŗ®‰ Žź¢9 Š4µ X“‡k=«ė?„_³Ž·āK˜īoÄz~œbi N… Ɖéõ¬Ŗ3ŗ”#Ōś‡Ē^Öm¦ÓÆ^;‰,¤ølm€Äqƒķ’+čūżGÓ>A®éå4ó j®vµń–f=Ęq]éisę>‡ĪZēŽōūŪlHš^7*ćpzƋ½ī’]Ņģt«y.ę„ic; <ķśńZĘF—¶…’xĒAŃ|E©xoUŅ!Ņ5…ø l¾fǧc]Å«» ‹] Qń2\&™4¢ß̌õ\œ’OQ\õevv҉ļ¼w'‰¼w¢čÉp©D¾|±H3‘€{W]ūZüŠüMk§|Wšv—·Šģ®–]FĘ5ķH9}:V2vgltFO€īoešÅ›ŽŪ›w#vĆ÷”c”śW|Sń6•į? ­Qŗ³ø–B#w>ŁČ§Ķ©2™½į_\x³Į÷$×ÓłoddĪMŁļ^]®ėv³³Y˜Żu @޾õikcŌKsSĀvöÓĘždāęh‡˜D®H澨šÆÅSšö”„DŃÅØ-”–ށģ,1’?­h––f.}“5Ļ ĖimyWĘ+’›DĢ9‘æĒšä“Ÿ _鶗V‹PÕmĀ ŒŖ”VB~Ÿ^+F$Ū>¾ų!ć[Ÿč×i6VŻĶ!&čF×#r{W¦'ŽüOuį=_Ćńkß圈ćłFóŲóĘ8”²ģw_ |K®ŲxzźWæŚŗ„ÖoŹlN>½łöÆĪ’jZ®‰®źVĪŹ='mpXšF1Ž„ :]7ÄāŠŚjH<ÕĄUń’ź­ĻųYč÷S¼¼Ń䂮0NxĄnżj\Q ™ŹxÖŅĻPOˆtŪe¶8xŠoĪ[ ’JäåŌī“ųmļć[xŒCtŖFwqėL®S¬šž“ž9Ó­®ģõ±iŠ£ĪяćpĒēIš{Į^(×į5æń,m'wfRrøĻ<š8©tū’Ńņ‡ÄļĒ xÜéóŹ’hXĻGł'Ž;ž+Ļ5h>ρ"£œ‘Ę)ʝµ!JĒ œŠš“‡Įķ]g‚}O4Ȓŗņ©=‡^¦ŗQJGėē…cZO”ä±5½ĀĶmy¼ÄH#hĆpkģĻėš'<9{šźõgŗ¼xÄÖKøŒ8 ŻW3;#'AńN½šŸāƄž"|>ŌÆ“_x{S†G1žSaĪ{Œd_čū7üsšēķKū9|6ųŻ ]ŁŽM{jźIAŠåFÖČ<ŽTŽ{mõŖzÄŽ1=‹Āz”šoŠtÉ搌O˜,¼n_B*ūY·]OKŽā'IŌ§8<85Ļ=ŒœOēž ū1Ēńsąö»q‡Ø^xóĀ"m[B6£|—p¹Ģ±9!r߇µ_“yģ.`æ‘n&·ŗ|*2įąc =ˆ54孌åcÉ^ŲC+L‡xBFėõØ>U“ĢBŲ>µŚŽ±!‘f.Å•O §ČJ Ü9śāŗ PŖŖńœŒ·Æ”§,h›—qŌŠn‹V¬ˆ„Žsõ­8Y±,{c4·6†Ę„ݤ7Śo™"Éssnėsc+'#kAąW÷Ł’Lżø[ö¼ż”“Æx®öėž#M7V‚é³5Ͱ_’`‹* äó•lõęéǚ”×UgųŪõü•±ū=w¤—°SļŠQ‘Žpk˵›ŽT–x/­ždp1^EV[‰łĒńĀ1xoÅśœŗ“Ńõ÷7vŪSĒp¹Ü ĒĒčkņ·öĻų9Å’†ž ŸV±·‹T²¶6—XĮf„”:ōż+(ĻS ˆžK5ķ/P𿈵Æjkķ>Sdņ%ų[ńF2ä(uÕŻMœ•:‘”ó·yy¦?ĘØH[xRsŪ„uÄŹ2¶„,QŽÄpĻ?ҧ•00;~3F£–(¾ųÜÜēqž*¾vr &: Čø=D·_“»ˆ9źĆlE 9ėķNĘń•‡ˆė#+Bćņ ~õ’ĮlKļ‡Ś“~ĪŗćźVśLænŠZI7Åui!{b ČäKČź„ģ»ąOÄĶ"ūÅŚ·ĀI‹ĘĶlšß†oI%/ķX ń+cšGƧ—ū:Ęžāķć’¢OBĄc5ÉQGrU”^XCęj6G&#ÖTīį_ʧüēö* ž Ś~Õ^Ņ ü3ńLĖ5š… ?P?}XGļ[ź¹mfGóQ~ŠÉ,ėn|ĒC“ü½ kxL¼Ž!vdÜx÷­%± K|=‹T°øšņģH–aˆ?łh=ėŠõ_čz­ö›§jĶ§Ūłe„IQßłž•É'ØF6<’ūħƒ5[łt£ Ģ.ŠOᓯ#üęŗļ‚>5ń|~'2ų–ģ@—„ e•šžŸé]4d' Õ ųŽ{­'ż0"\m€s‘ŠČŌob¹Ōm÷0Œoū×tec–héķeđ¼_¼Ęį^µø[i–÷:[y·Ģ„“r6ETdAęŚĒ‹#¼¼Ó¼ūAkp€ł£9“,5‹mVSkl~e*ÄX¾Šmnņą@'S»‘Žø[żŹŽźņMAŚå–'ūĒ ČÓ4ķ.ņ{aWćåäā¶[ĆPMxŠF„f{ŠžÆįbŚTmĒō`b0 Ozć5 ^ņx  ;\ʁ¤õĆEn×ņ„p@ōŖĶØi·öó²Ę±FŁUņ=č‹^DŃ„›|›ć—ƒēSų‹Q3”qH²Wž†€ČŃ|=ĒŽÄCŲŖī;z-M ]:Jæ)<š+U;+ĘÖŌøPŁué\{k}„ ;Q•°?z¢[öøš$1ÉbH„rĻ}sū‚¬{T³ėvėą jź%¹µ„C °[ĒCiuž#źM9ķjŅoźvv–ģ쑉€ć8>zšµ§ųGQ†Ń-uX s}Š£{ÓJę±6…›O®&Q h7süUÓxcÅ%åŅX »[IW÷a :šj%ž!³š+Ł‘YYOŻd †üEqęĒŹ•IF$œōļJĄz&ą›M~Ö`×ŃXmŒœ¹źŲéŠń+ļkļK¾¹v¼Å¤“ŹŖ(Ø¢—Ų"‘ ³Ļī—iēø®GIķ-Żäb©ŪŅ“‰²Fę‘ā­§–3>Ä~7fØė-ģ­nīłĒ_jVŽz2śuÓ¬ĢÉ)ņ{Öµ¼?%Äļ<ģĻĖĻņō§ŹŹå:IČ^Üßļn@ĢLՋ p}ŖIv†=Ŗ ‹QŠÅŸK†ėXctßø?(õŗ“«m>pÖRÉ,<}įČ5”Gq¦JŃ)fQózšģķ/lćņ^Uׂ} •XŹń#}¾[¹]¹91“^y„jI.Ÿrn•÷”Nrā¢R:#¹Üiś’Ł­ķČły GóŖ ń²ėRY0¶®pĄ½Y›4y]ę‡ka$’Y£ż™I( éŽŗOI$šĒę[„AÜ:ńPåmŹ‰4›[¹<É"HŻNT‘VnÆą†É\(‘Ōć²l¤ŗ–ž!”鬱§˜Ę1^_©jבß$ČFsH觬ø×µi¬a€Ü‡ 3“\ÅÄsÜ])[vcĘN8ĪČÅ$Łgh6K‘»5wO³¾‚ęģĻw,ń“…±…śR4GZ--¬ģg澚;Xb„"C‚Ź:ķ÷ÆČό^!üAÖ5K٧tŒ}šŻ‰ĪbėĻŠńųVu]‘ŻCs„šÄMŖ]G„é¶’l»‘‚"+rĖ‘øž×ŲZO†‚¬m,aŽh-˜,­¹·nb2yļĪkÄÅÕ¶‡÷/Ń…Ōē‰Ī'†Ōāü޳ł„Ė’3­ŚE>›ł„²ČćoÆå^¹…ØˆĪ‡ĶR:Jņ%RģžäŒu:ŻÉ£ŽŪjŗs$WQ’cČĻQ‚ |ŪńŹĪ]CT±·t‹ui,±²Ē…2+/ų7ėRхIØÜśĻį©ąßŽ>šĶµŻž³¤B–÷3gĖvąm=óX?|qįI§Ś^ߎčĒoēČX§Ž}+*;r|T]NGџ!xūĆ‘uK€jå“#Ŗē­YšÜįm£‹–u8<÷®:ŒśJi-Ž®ö}±4R²ˆ—®xė\Ō·QYĘņagq8²Œ¬iN„“!±ń:_ī0ɐ”źŽwå]Ī“¬ŲįD²fįG­mt)¦tńÜĘĢT°žTŪ–š)ÓĖc€*§O¹()nx—Šž$šĘ”ā’ Gm‰0.-$$m$’YpķžzÖĒ€|Uć’‡—ShÖŚóhÓ#o@HTÉč1ŌU7m…, whÓńĶĪ­e1“¾žāEŚ:żkĻüÉmÓeĄi3Čl걕MItTIm„Ā%k@\4yŒŪ½s¹[CnhAzH(Š«t}ŹT‡ķŽ­ŗr÷„:Z€DŒpź~•½£i’f½†V·/ `ūY ]…V„¶>ĄŅćAøŗµ–Ho•žź’­év4«$fčŽ,ŗ¶³øŅn$œ<‡lˆÄüĀ¾Óżˆąŗš/ķEš+Ēzµ…ŪhkØĻ¦’Øp‚īŻ£G8ģ­“×”J£Ųų>=Ć:ł&7ēJ¤W«„’üĖšQ/Šś·Ēߌ3Ę.£}o†üs&“”ŪĄß,ĢUZI_ż£ÓšÆĪhÆ.ģ5;+Ķ.Ż Ōķ&ą:ƒü«,MFŪ<ļøv9O `°JśAIßł§ļæ¹É„ä|MāĻüH×|OńwǾš¤zf•z—ŗ„½«mŁę—Tó†Ī= zŸĆ?§ˆ“ KėIĢ ~éī> ×gsöÜ3[v=/VŌ.µ— twŹVcÕ°1]‡†¼}ż‰&¬m‹Bņԃœ·„tS6©UE]ž]ćļ<9¬5Ž©é·B@ rsģ ŌūrI J¤•Ę>µŗvŲĶÕNĘć–rb ņGjÄææ7бĪäØ+پ“åSATĆ©-Mķā/ˆü-¢juµżÅփ%“–ŅZĪL‘łL>e sōƜÖÓL:Ę£§Ū‹O?oČ£ 遌°•S‚®_Ż#هōż 6§¾hŚŌö>Ō¼9d±Ū闆6ø`ł™:ö„°³Ü m;sŠb”Jś³ŚĆau7¬tŪ{o“I(UK žµœŗ¤1”’Ō«ÄęĮéWŻ”JĒ_ö՛Ėۜć9=…Wžwg8AĮ5Õt;턊Wh[YŽ»ˆ=k²ż–>'čpź>+š­ÓYN)ݬŠÜ®Iń?Źŗį-ŸĪ!/bŚčI^1ż—­/’`’Ś XńšYź·ž »¾²ó1˜ÄvĻ"–Ļ@Ä/įĻ„6 æžÓš/ƒŲÜ4”4ųō`€Ōė”lĻKū'œVī1$D}Gø®w]H­£?2y,ūsc’k’©żFMhjiōm_Ā>9Õ„»°µY"—*KĒē_#ėz5žŸc.½£Į4–Öńn"ÜIDĄēœāø*¦ĻF”o kŠ_Eiq‰*²īēÆć^Ė§Üžė€wz×3:eµĖw¶kZ}֟pŅ£J„S‚­x‰|?Ø“ói×¶ń¦Ó“0čąwśŌĄók;æ  ß§Ķ§%·øµ›ÉĆŽǃ_KŚhZTwöS_«Éz™*=śƒ[AuŻ)(ܾtynŻL0bR@!{Öm֏ØA"ˆ[lŖ{šiÄûijGmsy£œćƒ[:kBŒ–A§c JdzxsöSųĻūH%ę£šcÚ§s” mFKėļ!X:’89lcŲqė_5źžk7–^?šV«į›Ė) sü†Xā ć&AĘ*ż”­sĪĆęųzµźaa+Ō§ne®œŚÆ-mŃśF›ć=7Y·UŠā ‡b`EkÅvņ§Ėä68ØjǤ™Ļ/‡l|MńĮzˆ/Æ4]łŽ/bm¢ĒČIķĻņÆXńæ‹üyąß ųƒą7ÄMŪĒZžĮń °Żö|åO=N?Påaž;¦ø·o5Nüœ‚{V¼/ŹøŁ„ĪDc©fé¢(|źzTźļs!öžõ<冐į.ä‰stq$srŒöā±õ/^Ķ®C|°Ū@%P. ąN=ł&“LÅĘǦ[]Ē-¼fGŪĄ=zÖ„œÖūü™aK‹fįļ[)÷2tĪ ēMžÄń$–qF#ŅåC, ¼ĻB?/ÖŗŪ ³0łæ’„Ū[Ęx¢Ń#y¦u/"ć©ć8<_eų_Ā^ ųžöž/æŅ¬“Ļ[‘ĶmC( ņvō®ŚTĻ”Ēb4l÷ Oąw‹"ŠĘ½įKļµŚl,‰‘‘Õs×?y_Š4oĻ¢\čWś-ż­ĶÄEDńŹ¼k¶ŅGĶĘ­7-w>Fų‡ūGĒoį”ų3§½ę®CqåßOt…ZU^>\ćµu’|A ZÖF|•" Kķ=3Šøž½*VZu>ö¶[I6­¤ė4_ĀĄufSä«4„…ēߊŻĮ“\bō>-ųéį‹dųwń[W³˜[D–,±O”Oóé_šŽ‰GÓLL™ņ§‚p2kФuŌś =wt™ą_µ}ʐßtū{L3‡šCe4k–Vļü~pż™µ;„“ŽCår}=+ÆŖ?†ž•›Ļ(Æśuż.gŅ>±6ĀÕd{‡D ąVŌw w*ÉĮž3Õ¾µīŃZŹ5ē”éz/„­õ‹«MAdS=“—Ų:’U{vŸ­ĆmåZ&EĘW<×\įād}%šĶgŽģźWūātĀq÷OÆņÆ{[ƒĘŠ ÆLVхĻ«3/µéä—Ė1£Æ¬6”¬­å”Ö§‘Bęļɒ޹ä[¶‘¤ū>f$x=h9‹ØQ2p§ŒY‹$°oT&Fķ“LĮ¢ōó\\ŪݰŪ{vØl“÷¹‘Ū·ĒÜō5“Y”ŃænīÖŚ[˜­¢ē–εk¤–R#Ūż÷š‘Ņ™™ŚE—›ēȹĀŗ« ā,ī`|`.8
...
Click Here to have the test server send a big picture by http.
Websocket connection not initialized dumb increment-protocol
The incrementing number is coming from the server at 20Hz and is individual for each connection to the server... try opening a second browser window.

The button sends a message over the websocket link to ask the server to zero just this connection's number.
Websocket connection not initialized lws-mirror-protocol
Use the mouse to draw on the canvas below -- all other browser windows open on this page see your drawing in realtime and you can see any of theirs as well.

The lws-mirror protocol doesn't interpret what is being sent to it, it just re-sends it to every other websocket it has a connection with using that protocol, including the guy who sent the packet.

libwebsockets-test-client joins in by spamming circles on to this shared canvas when run.
Drawing color:
Websocket connection not initialized Open and close testing
To help with open and close testing, you can open and close a connection by hand using the buttons.
"Close" closes the connection from the browser with code 3000 and reason 'Bye!".
"Request Server Close" sends a message asking the server to initiate the close, which it does with code 1001 and reason "Seeya".
Websocket connection not initialized
Server Info
This information is sent by the server over a ws[s] link and updated live whenever the information changes server-side.
POST Form testing
This tests POST handling in lws.
FORM 1: send with urlencoded POST body args
Some text:
FORM 2: send with multipart/form-data
(can handle file upload, test limited to 100KB)
Some text:
 
Looking for support?
https://libwebsockets.org, https://github.com/warmcat/libwebsockets
Join the mailing list: https://libwebsockets.org/mailman/listinfo/libwebsockets
test.js000066400000000000000000001576531357643561300346470ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin(function () { function check_file() { var f = document.getElementById("file").files[0]; var max_len = 100000; var dis = 0; if (f) { if (f.size >= max_len) { dis = 1; document.getElementById("file_info").innerHTML = "File larger than " + max_len+""; } else document.getElementById("file_info").innerHTML = "File length "+f.size; } else dis = 1; document.getElementById("upload").disabled = dis; } /* * We display untrusted stuff in html context... reject anything * that has HTML stuff in it */ function san(s) { if (s.search("<") !== -1) return "invalid string"; return s; } /* BrowserDetect came from http://www.quirksmode.org/js/detect.html */ var BrowserDetect = { init: function () { this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version"; this.OS = this.searchString(this.dataOS) || "an unknown OS"; }, searchString: function (data) { for (var i=0;iError" + exception); } } var socket_status, jso, s; function ws_open_status() { socket_status = new_ws(get_appropriate_ws_url(""), "lws-status"); try { socket_status.onopen = function() { document.getElementById("s_statustd").style.backgroundColor = "#40ff40"; document.getElementById("s_status").innerHTML = " websocket connection opened
" + san(socket_status.extensions); }; socket_status.onmessage =function got_packet(msg) { var s; console.log(msg.data); jso = JSON.parse(msg.data); if (jso.wss_over_h2 === "1") document.getElementById("wstransport").innerHTML = ""; document.getElementById("servinfo").innerHTML = "" + "" + "
Build info"+ san(jso.version) + "
Server info" + san(jso.hostname) + "
"; s=""; var n; for (n = 0; n < jso.conns.length; n++) { var d = new Date(parseInt(jso.conns[n].time, 10) * 1000); s = s + ""; } s = s + "
client " + (n + 1) + "" + san(jso.conns[n].peer) + "
" + san(d.toString()) + "
" + san(jso.conns[n].ua) + "
"; document.getElementById("conninfo").innerHTML = s; }; socket_status.onclose = function(){ document.getElementById("s_statustd").style.backgroundColor = "#ff4040"; document.getElementById("s_status").textContent = " websocket connection CLOSED "; }; } catch(exception) { alert("

Error" + exception); } } function reset() { socket_di.send("reset\n"); } function junk() { for(var word = ""; word.length < 9000; word += "a"){} socket_di.send(word); } function on_pmd() { socket_status.send("{ \"RequestType\":\"DDoS\", \"blob\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAJbElEQVR4Xu2af4xUVxXHv+e9O0OhIEibgrRlF8rOG6CWKiumrUlTo6byj6mmNFta2DdQsRJJrP5j+0cnjSVp1BoSU1yzO28LEeL6h7GJNhpJNa2CBQ1gd9k3QPlRBU2LLV0W2p173zFvZvbtzOybmbd7J9DEd/+befece97nfe+95/4gxEWLAGlZx8aIAWqKIAYYA9QkoGkeKzAGqElA0zxWYAxQk4CmeazAGKAmAU3zWIExQE0CmuaxAmOAmgQ0zWMFxgA1CWiaxwqMAWoS0DRvrQJ3ujeb17Hrx6SuzLwV32x7VzO+1pj3HJprJue8BcBQCSONRzr+2RrHaO2OtHDc1wDcUwqOj0s7nWpVoDp+hOMeA5Au+zggbesuHX+Vti1VoOh3j4BxRxEf8xmVSbe3KlAdP2bOPUmEpaXviiGZsVbq+IsBxgCnpp9YgVPjNan2RwagmXMfUpnUAEAc9k6Rx8AHB0zzy3euU5nUXk02RXMzl+9Ssw8PYN06FeYvOkAmM5dfpzLWL6LGFXkSMR13jIAEmKXMpBM6AIXjeih+BVLqTEcSWfJ/T71ks4bZ9vAYgU1/epC2ZegAFLnhAogEM0tV5x1r/UcGKBw3UJ1sTyVwH8laZ5EU2DO4WCTFmXFbOTbnemxZdHnq9AAMvDVTjF4ObKVS7di8IvA97jOSArNsiLZ8oGBpW5HYRKrkB1IFcGwkiS2dhWkB7B1qE6Z5uiUAew7NEsk5o4EveEtgLw98TwngwIApRlcFoogBVnzdSArUAWg6+T4QS3U69Xi98eiqK7A4vnX1+YsldWbPJmSzk8fJa6FAP67FXTv9sVLZqU1k9rvHibGsmKQzBlTGeih0gqgcA69CFxaO+zKA+4uxEF6W3dbaSXFdA4Bmzt1DhK5SLHycTMd9n4A5pT9oSNqp0GXO1VagcFx/cphZhnZF2tasjwJAkRs+CqJPFvEBIzHA8a8ScQyMAdbbTGgJwAY7FS3LA3edXCyUbJoHitzwKIhK3Zb5ssykr5/Uha9BHigc9whQ3nHyu7DIDe8A0TY/OI/xtJexngnP5ocLRCRAkLLbas1KhOGps6lE2MxvOO6TBvBsMS7Pe8rbtHz7pLhavRLpdwtgCDCkzIS/o9Gff8pg/n55EtlRSqT7h+8B0xhs62AYvHJlf524QZ3duzs0pfCT7aj7gQNsmqPHH1V2qr9+ewBePHYXIICNHfsb1TNzw7Y6e343svdNWh35dpHyQL9iKUV5VGVSu+qt94tx7DrZCa8wA93pP0deiTR80fLDyACjOGthncgAp9FmqwG+CsbnynHkpW1Z04ip5Sai3x0CY3kpU+P9sjt9d6saaSlA9JybJWaMXARDyRFjLrZ1fNiqQLX8DAwmxai4CCAhzblzsWFhsH7W8lvM8eOiRSAGqIUvVqAmvhhgDFCbgKaDqY+B2ayBBV2fQJJnwzQlSL6HjcsvhMaRHUwG/2dXjjWMtXdwPjBjPryCARKXIcQ7sJd8EOn9fFuTbkCBCDOMUZw69596SXWVv4HB2bicXAClBARdwqm95+stEurFER1gz6GESM45DGBFmLNJW+C5E7cKUmfH68pkoh3rl046r8CL7s3CQ+hdFQY2KNvaXS94o8/\" }"); socket_status.send("{ \"RequestType\":\"SendImage\", \"RequestID\":\"283463389\", \"toType\":\"toUser\", \"toID\":\"1036\", \"fileType\":\"image/jpeg\", \"blob\":\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAGqAoADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArlviX43Pw78H3fipdHl1RreSGJLSKQRtK0kqxgBiDjlvSuprhvjNpmoav4INnpljPdznU9Ok8qCMu2xbuJmbA5wFBJPYA0AL4r+K2j+G/hxH8Rra0k1G3ureOezto3CPOXXcFBwcHbk9O1bmg+L9H12wW7juEimSygvrmAtlreOVCy7jjngN+VeOal4L8Vz3Wv8Ag99DvG0Hw5b317pEixMUupLpS0UUf94w5ZMD1FWdLfW/CFxqcF34S126l1vwxpttZfZdPllU3EUMitFIyqREcuOXIHXninYD0y8+KPgCwNkt34ntU/tCGO4tyA7BopPuOSBhQc8bsVYXxtpEc+tHULm2tbPRVheW5afIKyAkEjHy9OOTnNeEHQNX0bw/pTQaH4l0/W38NabbNCNFkvbS/kjgUeTMqrmF1bKncVx1rZ1Lwz4tuV1bVL3wpdSJDf8Ah+/urCGBmFzFAxaeOIf8tNv90ZzgDvRYD2fw34w8NeLoppvDurRXqwNslChlZD1GVYAj8q0rq9tLIRtd3CRCVxGhc4BY9Bn3rlfBl/Z61reqazp/g660q3kjhiW8u7SS0muyoOR5UiqwVc4DEc89q2fFQSTRprVtFk1VrjESWyjhmPQs38AHXdkYx60gNivPb74uwWXhPW/EX/CPzyXmjal/ZQ05Zh5k85ZFjCtjjcZFxxXXeGdO1LSdDtNP1bUPtt1CmJJvXngZ74HGcDOM4FeYXfhPXm+Nq28elXDeG7yaHXbi68s+SLmGORRGW6bi7RNjr8hoA6XU/i3p1pYeHr+w043a+INPk1NMziMQwIiNuY7T/fA/OtS8+J3gnSntLbWtftbO6u4IpxESzhA4BG5gMKPc4ryPSvBHipIvGdheaDei20HT7jRtB/ct/pMLzSSK0Yx8w8t4k47oaj8XaLqVglzJpmjeIbfV7rRLSAWw0WS/sdUdIiBFJsX9yQSVJZhgHPanYD1B/jD4PsfEWseHNdvo9Nm0q7itUeRiwn8yGOQN8q/IP3m3k9R1ra8ceLoPBfgzVfGTWpvYdMs3vPKSQL5qqucBsHGfXFebDwpq15YfE681LwvIuoaotuLdRbl/NK2EAKxHHzgSBxx3Bre+IukavqHwA1TRbPTbq41GXw75C2scTNM0vkAbAgGS2eMYzmgDt9c1xNF0CfXXiRlhjWQo8mwckDlsHHX0rMf4leCYNUg0O78QW0OoT+WogO4gO+Nql8bQTkYBIrjfFvjJfFvgjUfDeleE/Fq3s1qgQXHh68gQlXTI3PGBnr3rjdc0rWtM1K8Ph3QdeXVbq6tJW0250iS50/UGUIPN89V2wEYOSzfKVziiwHsPhL4k+GfGer6zoujXLvcaLcfZ5gyMA3yg7gSOmTj8K6qvPfh9aT6V418b2d3ot5bG81NL22uDZusE0Jt4l+WXGwkMrZUHI9K9CpAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVma34m8OeGvsf/CQ67YaZ/aNyllafa7hIvtFw/3Yk3EbnPZRyaANOiisbQfGfhHxTc39l4a8T6XqtxpUohvorO7jme1kOcLIFJKHg8HHQ0AbNFZ2u+ItA8MWa6j4j1qx0u1eVIFmvLhYUMjnCoGYgbieg6mi08R+H7/VrnQbLW7G41KzjSa4s47hWmhjb7rOgOVB7EjmgDRoorO1/wAQ6D4V0uXXPE2tWOladAVEt3ezrDChZgq5diAMkgDnqRQBo0UgORkUtABRVbUtT07RrCfVNWvreys7VDJPcTyCOONB1ZmPAHuaNO1LT9XsYNT0q9gvLO5QSQzwSB45EPRlYcEe4oAs0VT1fWNJ8P6Zcazrup2un2FonmT3V1KsUUS+rMxAA9zU9tc297bRXlnPHPBOiyxSxsGV0YZDAjggggg0AS0UUmRnGeaAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqrqGpWumQ+dcsQCcKBySaaTk7ITairstUVz3/AAmdh/z63H/jv+NH/CZ2H/Prcf8Ajv8AjW31ar/KZfWKfc6Giue/4TOw/wCfW4/8d/xo/wCEzsP+fW4/8d/xo+rVf5Q+sU+50NFc9/wmdh/z63H/AI7/AI0f8JnYf8+tx/47/jR9Wq/yh9Yp9zoaK57/AITOw/59bj/x3/GtDTNcstVLJBuWRRkow5xUyoVIK8kVGtCTsmaNFFFZGgUUUUAFFFFABXin7YfhS78TfAbxBeaUCup+HVj16ykUZaOS1cSkr7lVYfjXtdVtRsLXVLC50y+hWW3u4nhljboyMMEH8DQBxNz8UNOb4IH4tQyrHaz6AurREH7peEMg/wC+mAr52/Zu8OXnwh+KfhZtT3xn4seHLi9u1JO3+0Y5DcA/UxMwA9qxNG1PUX+COl/s0vcNJrFt46m8ITg9Xs7aYzE/TyvK9sGvaf2ptPTwl4J8LfEvS4WB+HGuWGolYx8xsg4imT6eU7E/SgBn7Qif8Jp8Ufhb8KU/eQTanJ4h1KP0gtgBG3/fbH8q6zw7rXw8j+M/jO3stIltPENlpdrNq2oSSnypbfLbAATgbcEk4rmPh40fj39pfx146jdZ7DwtYWnhrT5lOV8woJ7gA/70gH4Vm6DDpFx+0b8XLfX7mO30yXwzZpeTSSCNY4T5gdix4UAZ57UAbEH7S2r67YyeJfAvwY8TeIfDCFzHq0UkcX2iNTgyRRN8zrwcHIzXK/tQ+P8Aw78Sf2QNf8X+Grh3sriWzVllXZJDIt5EHjcdmB6irvg3wv8AtE/BnwxZ6B4BPhj4ieEbGEDSkkujZXv2Xqi7yDG+FxghuRiuE+Mvivwf4x/Y78djw34Tl8MXVtq8EOs6TKuJLe+a7hMhPJB3cEEcGgD2LU/2htUjt5tY8J/CHxL4j8O2u7fq9u0cccqL96SFG+aROCQeMjpXo/gHx34f+JPhSx8Y+GLhpbC/Qsu9drowOGRh2YHgitXTNNsdM0q10mxtkitLaBIIoVGFWNVwFA9McV4l+xt8vw28QQrwkPjDV0Reyr5q8D86AO2/aF/5Ij40/wCwRN/KpPgF/wAkX8G/9giD/wBBqP8AaF/5Ij40/wCwRN/KpPgF/wAkX8G/9giD/wBBoAn+Nt74T074UeJb7xzpcupaDDZFr+0ico8se5flBBBHOO9Y3iH4w+Gfh/4c8Jabo3h/UtV1HxDZxLoWh2QDTyRLCG5ZjhVVcZY1D+1X/wAm8eOv+wWf/Q1rktd+Hep+Lrb4aeLPh5440vRvHnhbQIns7W+Hmw3NrNbxrKskaneFPHzAH9aAOn8P/H+ZvF2neC/iJ8OtY8GX2tFk0uW6lSe3unUZKCRcbWx2IryTxZ8WPF1p+1VodxD8JvFM/wBj0TULaOxjeLddruT9+g3Y2jHfnmuq174jeNPDus+HbL9o/wCEumHSm1SKHT/EWk3v2m3t71uI2eMhZI89Bwa1vEP/ACeL4Q/7FbUv/Qo6APcrOeS6tIbmW3e3eWNXaKT70ZIztOO46VNRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXKeNSfNtRnjax/UV1dcp41/wBda/7rfzFdOD/jI58V/CZzVeear8Q9V0r4tWHg6e3g/sa8tlDT4PmR3D58vJ6YYgL9WFeh15/4t+HOo+IdY1fVrW/t4JLnTYobB23boLuKQSRyHA+6GVTxzxX0eF9lzNVdrf0/keFiPacqdPe5Qb4sXMPxG1fRbiGIeH9Js2Zp1UmWSdCBJjnGFZtv1U11Ws/ELw1oKeZqc8sajS5NX3bMj7OhQHv97Mi8Vx8fwf1MWcEMmq2rTto89reTYbMt7LIZXlAx90uSfXmn/wDCAePdSujfaxceHo3h8PzaNDAvmTxu7PEdz7lX5SI8EDkZ4zXVKGFk009Fo/Pz+ZzxniIp3Wr/AK/A2n+JNneQwG3t77S5jfQWzx39n8zrIpK7drYwcdcnGOlWrP4m+H77V49LtrXUmimuTaRX/wBm/wBFeYdUD5znIxnGM965DTvhN4lW4M00+n6fafbbW5XT4Lya4iTyg+91aRQQW3gbeny1veGPCXjXw+bTQFvdK/sKyvJLlZlLm6ljZy4jKFdo+ZuWDHipqU8Mk+V/j/V/QcJ4htcyO/rV8LkjWoAD1D5/75NZVavhf/kNwfR//QTXk1v4cvRnp0f4kfU7uiiivBPZCiiigAooooAKKKKAPEbP9mu3tf2kLv47HX1ayngLx6P5JxFetFHG9wGzjJEYzxnnrXqHjzwlZePfBWueC9RIW31uwnsJGIztEiFdw9xnNb1FAHl/7O/wZl+B/wAPh4Tv9eGt6ncXk99f6j5Rj+0SyOSCQSTwu1eT2p0HwVtp/iH428Wa3qEV7pfjPSItIn0/yirLGoYPl88hgxHAFenUUAeC+G/hh+0R8OdFh8D+CPiV4fvvD9kgttNm1nS3lvLK3UYSPcjqsm0YA3L0Apus/suyan8E/EXw0HjBpNc8VX8Wp6prdzb7vNuFmRziNSMLhNoGeM175RQAijaoX0GK8/8Agp8L7j4TeG9T0G51iPUm1DW73VhIkJjCLOwITBJyRjr3r0GigDm/iP4Tl8d+BNc8HQ3q2b6vZvarOybxGW7lQRn868h8L/CT9qDwj4e0/wAM6R8dPC62WmQLbwB/C+5gijjJMnNfQVFAHhmsfCL46eNfBviXwX8QPi1oWo2euaebSE2ugfZzBIWB3kh8sMDGOK0PGHwM128bwh4o8B+MF0Pxh4Q09NNivHtvNtr238tUkimiJ5VtoI5yp6GvY6KAPDL/AOEXxa+Juo6Snxj8ZaIdB0i9i1AaVolg8Qu54jmNpZJHZtoPO1cVr/FL4ReMvEPxB8PfFD4c+MLLRNa0O1uLGSO+sftMFzBNjIIDKQRtGCDXrlFAENmt0lpCl9KklwsaiV0XarPjkgdhntU1FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFZ+r6RDq0IR2KOnKOO1aFFVGTg+aO4pRUlZnKf8IVN/wBBBP8Av2f8aP8AhCpv+ggn/fs/411dFb/XK3cw+q0uxyn/AAhU3/QQT/v2f8aP+EKm/wCggn/fs/411dFH1yt3D6rS7HKf8IVN/wBBBP8Av2f8aP8AhCpv+ggn/fs/411dFH1yt3D6rS7HKf8ACFTf9BBP+/Z/xrT0bw7FpUhuHl82XGAcYArYoqZ4mrNcrZUcPTg7pBRRRWBsFFFFABRRRQAVFcPcRqDbwLK2eQX24H5GpaKAKX2jVP8AoGx/+BH/ANjR9o1T/oGx/wDgR/8AY1dooApfaNU/6Bsf/gR/9jR9o1T/AKBsf/gR/wDY1dooApfaNU/6Bsf/AIEf/Y0faNU/6Bsf/gR/9jV2igCl9o1T/oGx/wDgR/8AY0faNU/6Bsf/AIEf/Y1dooApfaNU/wCgbH/4Ef8A2NH2jVP+gbH/AOBH/wBjV2igCl9o1T/oGx/+BH/2NH2jVP8AoGx/+BH/ANjV2igCl9o1T/oGx/8AgR/9jR9o1T/oGx/+BH/2NXaKAKX2jVP+gbH/AOBH/wBjR9o1T/oGx/8AgR/9jV2igCl9o1T/AKBsf/gR/wDY0faNU/6Bsf8A4Ef/AGNXaKAKX2jVP+gbH/4Ef/Y0faNU/wCgbH/4Ef8A2NXaKAKX2jVP+gbH/wCBH/2NH2jVP+gbH/4Ef/Y1dooApfaNU/6Bsf8A4Ef/AGNH2jVP+gbH/wCBH/2NXaKAKX2jVP8AoGx/+BH/ANjR9o1T/oGx/wDgR/8AY1dooApfaNU/6Bsf/gR/9jR9o1T/AKBsf/gR/wDY1dooApfaNU/6Bsf/AIEf/Y0faNU/6Bsf/gR/9jV2igCl9o1T/oGx/wDgR/8AY0faNU/6Bsf/AIEf/Y1dooApfaNU/wCgbH/4Ef8A2NH2jVP+gbH/AOBH/wBjV2igCl9o1T/oGx/+BH/2NH2jVP8AoGx/+BH/ANjV2igCl9o1T/oGx/8AgR/9jR9o1T/oGx/+BH/2NXaKAKX2jVP+gbH/AOBH/wBjR9o1T/oGx/8AgR/9jV2igCl9o1T/AKBsf/gR/wDY0faNU/6Bsf8A4Ef/AGNXaKAKX2jVP+gbH/4Ef/Y0faNU/wCgbH/4Ef8A2NXaKAKX2jVP+gbH/wCBH/2NH2jVP+gbH/4Ef/Y1dooApfaNU/6Bsf8A4Ef/AGNH2jVP+gbH/wCBH/2NXaKAKX2jVP8AoGx/+BH/ANjR9o1T/oGx/wDgR/8AY1dooApfaNU/6Bsf/gR/9jR9o1T/AKBsf/gR/wDY1dooApfaNU/6Bsf/AIEf/Y0faNU/6Bsf/gR/9jV2igCl9o1T/oGx/wDgR/8AY0faNU/6Bsf/AIEf/Y1dooApfaNU/wCgbH/4Ef8A2NH2jVP+gbH/AOBH/wBjV2igCl9o1T/oGx/+BH/2NH2jVP8AoGx/+BH/ANjV2igCl9o1T/oGx/8AgR/9jR9o1T/oGx/+BH/2NXaKAKX2jVP+gbH/AOBH/wBjR9o1T/oGx/8AgR/9jV2igCl9o1T/AKBsf/gR/wDY0faNU/6Bsf8A4Ef/AGNXaKAKX2jVP+gbH/4Ef/Y0faNU/wCgbH/4Ef8A2NXaKAKX2jVP+gbH/wCBH/2NH2jVP+gbH/4Ef/Y1dooApfaNU/6Bsf8A4Ef/AGNOSfUWdRJp8aqSMsJ84HrjFW6KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACioZry0t/8AX3Mcf+8wFUZvEekxcfaN5/2VJosBqUVz03jC3GRBau3+8QKozeLb9/8AVRRxj86fKwOvorg5tc1Sb7124HoOKjtdUvba4WcXDtgjILZBFPlA9AoooqQCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACori5gtYzLcSqijualrkPFsztfpAWO1EBA9zTSuBqzeK9NjyIxJIfYYFUpvGMh/497NR/vtn+Vc3RV8qA1pvE+rS/dlWMf7Kj+tUZtRv7j/XXcrD0LnFV6KdkAUUUUAFFFFABQOtFA60AelDpS0g6UtZAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFcb4r/5Cv/bJf612Vcb4r/5Cv/bJf61UdwMaiiirAKKKVVZztVSSewFACUVch0fU5/8AV2UuD3K4H61eh8KanJ/rDFF/vNn+VF0Bi0V08Pg5BzPeE+yrV2HwxpUX3o3kP+01LmQHF0DrXb3ui6b9ilCWqIVQkEdQRXEDrQncD0odKWkHSlrMAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArjfFf8AyFf+2S/1rsq43xX/AMhX/tkv9aqO4FfSNGl1UuVkEaJwWIzzW7D4RsU5lmlkPpnApvg//jzn/wCuv9BW/Q27gZ8Og6TD92zRv9/5v51djhihG2KJUHooxT6KkAooooAKKKKAIbz/AI9Jv+ubfyrzoda9FvP+PSb/AK5t/KvOh1q4gelDpS0g6UtQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVxviv8A5Cv/AGyX+tdlXG+K/wDkK/8AbJf61UdwNPwf/wAec3/XX+grfrA8H/8AHnN/11/oK36T3AKKKKQBRRRQAUUUUAQ3n/HpN/1zb+VedDrXot5/x6Tf9c2/lXnQ61cQPSh0paQdKWoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK43xX/yFf+2S/wBa7KuN8V/8hX/tkv8AWqjuBp+D/wDjzm/66/0Fb9YHg/8A485v+uv9BW/Se4BRRRSAKKKKACiiigCG8/49Jv8Arm38q86HWvRbz/j0m/65t/KvOh1q4gelDpS0g6UtQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVxviv/AJCv/bJf612Vcb4r/wCQr/2yX+tVHcDT8H/8ec3/AF1/oK36wPB//HnN/wBdf6Ct+k9wCiiikAUUVDc3dtZp5lzMsY7ZPX6UATUViy+K9MQ4QSye4XH86j/4S+w/59p/yH+NOzA2Lw4tJs/882/lXnQ610GqeKBdW7W9pCyBxhmbGce1c+OtXFWA9KHSlpB0pazAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiioLy9t7GEz3MgVR09SfQUAT0Vy9z4vkJItLYAdi55/Kqh8Vaqe8Q+iVXKwOzri/FDq+qttOdqKp+vNNfxNqrqV81Fz3C81mO7yOXdizMcknvTirAdV4P/AOPOb/rr/QVv1geD/wDjzm/66/0Fb9S9wCiiikBXv7tLG1kuX/gHA9TXBXd3PeztPO5Zj09h6Cuq8WFhpqgdDIM/rXH1cUAUUUVQBQOtFS2sTT3MUKjJdwv5mgD0UdKWkpayAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACuH8QX73l+67j5cR2qP5mu4rzzUI2ivZ43HIc/zqo7gV6KKKsAooooA6zweP8AQpj/ANNf6Ct+snwzbNb6WjMMGUl/w7fpWtWb3AKKKKQFXU7IX9lJbHgsMqfQ1wU8EttK0MyFWU4INej1UvtLstQXFzECezDgiqTsB5/RXUyeDoScxXjKPQrmmr4OT+K+P4J/9eq5kBzFdH4Y0h/MGo3CFQv+rB7n1rSs/DWnWrB2VpWHQv0/KtUAAYAwBUuXYBaKKKkAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5/xFocl03220XMgHzr/e966CimnYDzZ0eNtsiFSOxGKbXok9laXP8Ar7dH9yOar/2FpH/PjH+tVzAcGAScAZNbOjeH57yRZrpCkAOcHgt7V1EOm2Fucw2kan6Zq1ScgEVQoCqAABgAUtFFSAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUV4145vPGfw28Sv8A8InG2oW3jeZbK0jnmythqTD5ZOTnyioJIHdR60Aey0V4pot5490ix1zSvB+pWctl4LPk3UupK8s+qXIjE07bs/uwS5A68+grpPCfxLv/ABPLr08dvFFb2Oj2WoWyEfMJJUlLqx7gGMYp2A9HorzjVPEWp678BR4qlYR3+oaBDev5JKASvGrHb3AyaxtB8X/ELw7NpFh4ludIvYNT0CW9tgmYPIlhiVgskrHDKRnLHGDSA9gorwvw/wDFbxvqGrSaLDrOj61PdaLcajbS2dlIkEU0WCYlkJ2zAhsblP4Vrat8a7qy0hPENnZxT2lj4dl1fUI8c/aMhI4Qf4cvv59ENOwHr1FeA/8AC8fFNlb38S3mn6zP/Z5u4JYbCa3jt5lkRTE+8fMCH4bg8Hiuz8P+IfHL+K7fwp4tu9Omi1zRZdRtZLOFo2tmVo1ZGyfm4k4PHTpRYD0uivJNOtPG2hfFTw/4WTxTHcaRZ+H4xLHLAS8/l/Izls/fLDOfTitz4oeLdY8OzaXZaVruk6QL1pDJcXiGeVto4SKBSGkJ7kdAKQHf0V4x4c+KXjbxtpnhvStE+wWWs6oL57u7uLd/KjjtZjESsJw25yM7SRt71l6B4v8AH2malq3h1prKTxFrPij+zop3LNbQItuZXkCHnGxGwvHJ/GnYD3uivAL3x54w+HviHxjdeKLy0vbyKPTbW0liV1t2MgbEhi5K4AOQM5IqxafG7xKTceH7aSy1fU7uezttNv1s5bW3Ek8yxESK4z8m4NwTkA9KLAe70V5R4afxxa/GWXTPF2qWl6q6BHJDJaI0UbgzSZLRkkBgQRnJyAPpTvin4+8SeHNXaw0bX9H08Q2LXSwy27Xl1dOOiiGM7lX/AG8HrSA9Vorxaw+I/wAR/GCyT+Gm0nToYfDljrjG5haUl5oi5iGCOOOvb0Naum/Fy9tlj1TxNBBBpt14ck1iFkHPmwf69M98g7gPRTTsB6pRXC6v4n8W6D8JD4q1C2tR4gisIZ5odpESzuVDJjrgFiPwrmbfxD8Y7vxPH4STVPD8ct5pX9rrdm1ci3UMqmLZn5yTIvzZHAPFKwHsFFeY/Dn4ma14vv8AQre/treFdR8PR6lOsYJxP5jo20/3fl4FcrffGDxsdO0y/mu7HQ7C5F75uqz6dLcWwlimKRxPs4iBUElmOOKdgPeKK8XvPibfaZfT+IpYbG6n/wCER0+8X7LcmSCS4muJUARgdpTcQQwGSK7fwkfiZDqYj8Xy6Ve2Fxa+cs9mhia3myP3RUklxgn5h6dOaQHY0V5D4m8S+L/DfxV1e9l1iCXQ9P8ADceoiwEJ3N+9lUDdn7xZfvemB2q5pPjD4gaXqXhe68XSaXcab4skEEcVpEySWUjxNJGCxP7wELtJ4wTTsB6lRXI+J/Fl74Z8WaNb3nlDRNThuI5JSvzx3KAMoz6Mu7j/AGTXIaV48+IXi2+0/QdFfTdNury1uNVkubmAyLFarKI4kCAjczbgxORgUgPXaK8s8JfE7xBrHiPRvDWqWtrFdedq1lqZiyVaa0dEDxk9FbcTg+uO1ZsnxM+IGq67beHPD0GmLcXusahp6zXCNshighVw5xyTyeO5wOOtFgPZaK5Pxz4i1jwnpWl6rH5EsS39vBqRKHHkvlSy+nzlfzrhrD4weJNTn1TToLS1S6m1mytNGJUkSWssxjkkbnkoEkY49BRYD2WivBrn4i+KtFspTYPDpmnyeINcgutVlspryK3MV46xq6qcoGAPzEhRjirEGv8AjrxV408MTeHNf0dLi98OXslxcxMbmzIW4hAkRAQGJ4HJGNx9KdgPcaK4zwL4n1TxX8Pm1jV44Y9Qj+2WlwYMhDLBI8TMueQCUJH1rzPRfFvibS9J0a40XTpNX1NPCmrXkELO7PNLHdIFXGfm6+hPGBRYD3+ivALz4i+Mte8F+JU0zxto095YW8E4kjs3trq3LPh45LdzvXthz15GK9p8J/2ofDOmNrV3Hc3rWsbTTRpsV2IzkDtxilYDWooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACsPxJ4TsvE11ot3eXM8TaJqCajCI8Yd1UgK2QePm7YNblFAHCa58K4tU1PVb7TPFWraNBrwX+1bWz8ry7ohAhbLoWRigCkoVJAqG/+D2nyXckuieI9U0W1u9Oi0u9tbPy9lxbxghRllLI2GYblIPJ5r0Gii4HNxeBtOh8AwfD1bu5Nlb6dFpqzEr5pjRAoY8Y3YX0xWf4l+FeheKrS1sdSu7wQ2ulXGkBY2Ub4povLYk4zux0x3rtKKAOD0b4XXGneItL8T3/AI21fUrvSraSzjWaOBI2gfb8hVI1GcqDuHzH1xTtK+D3hTTNL8R6M/2i6tPE25blJnH7uMhv3cZABVQXcjuCa7qigDgH+FDahY3Nl4h8ba5qwmtltImnMKmGMOGyAiAMx2jLMCfeuh/4RCxHiTTPE32mf7Rpeny6dHHxsZHZCWbjOf3Y6HHJreooA57UvB0V94v07xjDq13aXNhA1q8MQjMdzESTtfcpI5OcqQfeqninwE+v6/YeJtN8SX+jajYW8toJbaOGTfDIVLKVlRgOVUggZ4rrKKAPNrD4KWekWNlDo/i3WLS90y7u7iyvx5TzRpcPvlibehEiljn5wT70sHwT0u3spwPE2sNqkuqLrMeqM0Znhugu3co27SCuQVIIwSMYr0iincDzmP4L6dM2s3eteJtX1PUNb+zvLeSmNHhkh/1bxBFCoR0wBj25NWbj4Tw6rp93B4h8Waxqd7cNBJBfu0cUlo8L743iWNVRWDAEnbzjnIrvaKVwOM8OfDh9G8UzeMtU8WaprWqT2a2LPdLEiCNWLAKkaKq8seg569aj174YprHiG+16z8U6ppn9rWkdlqEFsIitxEm7ADMheM4ZhlCp5rt6KAOH8IfCrTfCNlNaRazf3hm0mDRy84jBEMKFEI2qBu2nGfauf8UfDf8AtF/Bvgmz028l07RLtbq41GRlCmBQ2+FsY3eYG2kYxgk9q9YoouBleJ/D1r4q0G78P3k0sMF2qqzxY3ABg3GQR2qtb+D7G28SxeJ0uZzcQ6YdKEZxsMZdG3dM7sxjvjk1vUUAedW/wZtNLg0ZNA8Wavpk+kWTad9oiELNcW5YttcMhAOScMoBGetGn/B86BYWdn4Y8c65pr2scsLyfuZ/PSR953pKjLuB6MAD716LRQB55ZfBDwjZae2lJLePato0OjGNnH3I5XlWXIGQ+9yfTgcVr+GPAb6DqY1jU/E+p65dxWpsrd7wRqIISQSFWNVBJ2rljknHWusooA5TXvh7p+v+JD4huNRuoxNpp0q7tFCGK5t9zsA25SwIMjcqQaz9D+FUWl6npV7qXirVtYt9B3f2VaXfleXakqUDZRAzkKxUFyxANd3RQBwHxh0C/wDF+jWXhWw0q4ma8u45GvEYKlmqn5mY5zkqWUAepq/rXw5t7y70zVNA12+0HUdKtDYRXNmsbl7chcxukisjDKqRkZBHFdhRQB55/wAKc0+0tNK/sTxJqunanpc9zc/2mhjknuJLhg07SiRWVtzDPTjtirHhj4R6P4Y1Cy1ODWNSu57K7u70NcOrGSS4jCPuwo44yMfy4ru6KLgZfifw/Z+KtAvvD2oPIlvfRGJ2jIDLzkMM9wQCPpXM6V8IfDuk614c1uC7vGm8N2ktrAjsu2YuCDJIMcuNzYIx9413VFAHBn4VfY2a48PeMNY0m6a+vr1pYhFIr/apmldGjkRkIDMdpIyB3qfwl8K9E8IajZ6rY3t3LPa2dzaMZSuJTPKkjyMABhtyDgYGCeK7WigDC8N+EbHwzoM3h+0uZ5YZp7qcvJjcDPK8jDgAYBcgewFc6vwc0NbW1tU1fVI/sel3WlRSRSiOQJPKspkDKAQ6soxjj1Brv6KAPPf+FQwX76jdeJvFWp6xe39gNNW5ljgiaGAMWG0RIqk7jnLA10Wg+F73RZ7SWfxVqmoJa2IsvJn8tY5CGBEpVFA3gDbxgYzxmugooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Z\"}"); socket_status.send("{ \"RequestType\":\"SendImage\", \"RequestID\":\"788346414\", \"toType\":\"toUser\", \"toID\":\"1036\", \"fileType\":\"image/jpeg\", \"blob\":\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAHgAoADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopNy/wB4fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/AHh+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv8AeH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/wB4fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/AHh+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv8AeH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/wB4fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/AHh+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv8AeH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/wB4fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAxst6mky3940UmRQA7J9TRk+ppKKAAFh/EaCWP8RoooAXJ9TRk+ppKKADL/AN40Zf8AvGkwKMCgA3N/eNG5v7xoI70Ad6AF3Mf4iPxpMsP4j+dHSlxmgBCWH8R/OlBb+8fzpCM96OgoAVWb+8fzoLN6n86OBTSc0AOy3940Zb+8aTg0YFACkv8A3jRlv7xpNvvSYx3oAXLn+I0Ev/eNAwOc0YBNABubHU/nSbm/vH86VaMc5oATc394/nTt3+0aTb70baAAl8/eP50uW/vGk20baADc3940B27k0babQA/Lf3jRlv7xpMAdTRgHpQA4lj/EaTLf3jTSMUvFAC5b+8aMt/eNJjHNGAelAC5b+8aMt/eNJxQSD3oAXLf3jRlv7xpNvvRjHegBSW/vGgFv7xpuB60YHrQA7Lf3jRlv7xpAQO9IMDvQA7Lf3jRlv7xpuM96XbQAuW/vGjLf3jSfLR8tAC5b+8aAW/vGkAFJgetADst/eNGW/vGk2+9IAPWgB5LH+I0mW/vGmkYpeKAFy3940Zb+8aTGOaMA9KAFy3940Zb+8aTigkHvQAuW/vGjLf3jSbfejGO9ACkt/eNALf3jTcD1owPWgB2Wz940mWzjcaP4aMDFAC5b+8aPm/vGmjA70pGaAF+b+8aPm/vGm4HrRgetADst/eNALf3jTcD1pQPegBQX/vGjLf3jSAClOO9AAS2fvGgFs/eNJgYzRgYzQApLf3jQS3940hA9aQjHegB2W/vGjLf3jTcD1owPWgB1FFFABRRRQAUUUUAGc0UnzUtACZFGRRk+lGT6UALSZx2paMigApMr1paTJ9KAA57UDPelpPmoAMCjAoyKMigA+Wj5aMn0oyfSgBcYowKKKAEwKCAO1Lz6UhJoAMg0ZApfwo/CgBMCjApAT0FOoATAowKWigBMCjgUZPpRk+lAAeDmlpDycUtACfNSgGkzntRz9KADn1oOR3oyBQSD3oAXoKRTnqaXp1ozmgAooooAKKT5qPmoAXPGaQEmlBzScCgAwfWjB9aMijIoADntQM96BnvQc9qAFpP4qXPOKOM0AITilHNHtRQAnzUoBpM57Uc/SgA59aDkd6MgUEg96AF6CkU56ml6daM5oAKKKKACik+aj5qADqOKFpQc0ZFACEZpQMUgPrS0AIc9qBnvQc9qBnvQAtJto3UtACE54FKOKAc0ZxQAUUm72o3e1AAc9qTBFKCaDntQAtFITigHNACg5oJxQBigjNAATQPeikyKAFoozijOaACg57UUUAJgUv4Ugz3paAEwKMCl59KOfSgAooooATgUGl59KKADgUmRS0mT6UALRwKKTJ9KADg0vAoOR2pMn0oACfalyKTJ9KUnFABRjFFGRQAcdBzQeODwPSuN+IXxa8EfDLTW1DxZq8NrGASFJyx/Ac189aj/AMFFvhRaXTQ2K/aVU4D/ADCgD635AyRj3oPTI596+evh3+218HvHl8mlx6wlrdyHARwcZ+pr362vrW8tFvbW4SSJ13KynIIoAm45/hPal6ngY968W179q34XeHfGjeBtQ1YDUldY/L2Hqa9lgnS6hSdPuSorg+xGRQA89KWkPSloAQDFLRRQAc+lI1LnFITxQANSjgUUUAIc8sB16ilHp+leZ/Fz4++Bfgy1jH4xvxbPqG7yvlJzt+ldN8PfH+hfErw1beKfDtx59ldZ8t8Yzg4oA6XHt06UuOpHJpMkHPf0rB8ceM9H8A+HLnxNrkvlWVqAZG69aAN4nC5xk96Mc4HXtXlvwq/aJ8AfF2+ubHwjqQmltSBINpHX616iB6jPvQA7A60UUhGaAA57UtIc9qWgABzSYpQMUZoAQ9KWkPSloAQDFLRRQAc+lI1LnFITxQANSjiiigAooooAMYoPNIc9qWgAHSiijPOKACiiigBPmo+ag57Upz2oATrQDmjpQBigBaKKKAEBz2paQYzSk4oAQnFKeKQjNKeaAEY0ueM0YzQelAAcnvR+NJxnOaOtAC4zRSEZpaACiiigAooooAKKBzRQAUUUUAH40UHHeigAopMCjAoAX8aPxpDjvScetADufWjn1pDjvQMdqADB9aMH1oyKMigA59aXn1pDjvSkjvQAgyc4rmfiR40sfh94O1LxPqMgWO0iJBJ744/Wum6jBr5Z/wCChOuXen/Bi6s7aRkW5xvIPo1AHxBdah8R/wBrj4vnTo7u4aGe4ZQoY7Y0B/LpX2j4Q/4J4/CnTdESDX4ft96yAyS5K849K8x/4Ji+FbSX/hIvEVzErzr5XkuRyvXNfoGAoHAz70Afl5+1T+x3cfBy2HjPwJPM2nodzxxAgxc8c9TXuP7Anxn1/wAV+Hb3wT4j8+STTY8RSSggnIPrX2B4h8N6N4p02TStbtEubab78bDg1z/hv4V+BfBBnu/DWix2csincy9+KAPzF+M8m39rm4ZjhRdxdT06V+j+rfHf4X+BrCytPEfii3t5fs8YKr838I9K/MH9qI6j/wANIawulyFblp40jYDueK+h/CP7Auv+OvDCeJfG3jO4i1O6hDrEyltvHHf0oA+1vBnxW8B+P4xJ4X1+C6B7AgH8utdaCBkk5B6e1fjday+NP2avjpHoEGq3BksrqOMqWO11cgdM46Gv0i/aI+Nn/Cqvg5/wk0L41G6tIzAueSWUZP60Ad74w+MHw+8CKW8SeIbe229VDBiPwFZ3hX4+/CzxpdCz8PeKLeeU8YY7f51+dfwU+A/j39qnVr3xb4p8Tz2tk8m4SsxIcEnjGe1bHx6/ZA8SfAnSR448G+LJruCyIeXYSu054780Afp7G6yrvQh1PRgeKz9a8RaN4dtGvdX1CG0iQZLO4Gfzr5i/Yq/aIu/iN4GvNK8S3e/UdDiy0jHlxg/0FfLPx9+LPjv9oP4vt4A8MXs6WInMMMUTEdPvHIoA+/JP2pfgjHfGwk8YwifO3btOM/WvQ/D/AIr0DxVbC70LU4LqMjIKOCfyr4bsv+CbUkvhcXdx41mGpvF5m3YchsZxnNeS/BzWfiz+zv8AGhPC98uoXGmpOIrhSrMrg8Kc84oA9N/4KiFheeEDuwczYHr0r6E/YZOf2fNAYntJwe3zV86f8FN5zcDwRc7cNMkjn2yAa2vhh+0h4f8Agn+y3owa5SbWJ45RBbhuc7utAH2jrXxE8HeHbr7Hq+u20Ew6ozjNeTftU69pev8A7P2v32lXAmhZF+ZenWvjP4OfCf4lftUeO38ceKdQu4tIabe77yFK54AANfX/AO0f4N0rwN+zTq+g6OhjhtokVcsWJOeetAHy/wD8E6NWsNI8R+Ib7VLyO2hjZSWdgB39a+1Zf2nfgvFqR0mTxhCtyG2425GfrX5UfAnwN45+JnimTwV4TvJrW3vpMXUkf8IBr6s8Xf8ABOO7sfC8moaL4xmn1OCIyFdpBY4yec0Afd+i6/pHiG0F9o2oRXMDAEFGBq+8ixxtJKQEHcnFflj+yj8a/GPwg+K8fw78V3s7afLMYZklYnZjgdfU19O/tw/tEX/w08I2eieGLny9Q1qM7ZF6oMD+hoA9y8VfHn4XeDJWt9f8UW8MgOMKd38qd4T+Ovwy8bTeToHii3mc8BWIX+dfnz8AP2Q/F3x7sH8b+L/EN1Z2t0S0buWbfzzxnioPj/8AsneMv2ereLxr4T8Q3V5ZW7b5HQlAnPHGeaAP1Gmu7eC3N08gMaruLA8Yrmbb4p+BLu8TT4fEVs1ySVEe8A5/Ovn/APYt+Ok/xm8DXXhjxROZb+yjEUjE8sDx/KvmD9rj4NeKfgj8QI/G/hm5vP7Knm85cSMRHg5PfuaAP1Ha4hihNzJIqx7dxYngCuWh+KngWe7+wQ+ILd7gttCKwJJ/CvhLxj+3edT+BltoemztH4luofJlYdUxx+oq5+wr+z7rXiPUh8VfGU939n3mSzSSRsSEk7uM0AfoYjh1DL0IBFOPtTY0WNAi9FAApSaAFOT3opOBRkGgBaKKKAAmijIoJxQAmD60YPrRkUZFAC/jQOKQAUvAoATPGaM8ZoPSg9KAFooooAAc0E4oooAKKM5ooATgUvBpODS8CgAopMijIoAWiiigBM84paT+KjHOaAAUZ5xS0e9ABRRRQAUUUUAJ81HzUmB60YHrQAvzUfNSYHrRgetAClvSgZ70tJkUALRSA5oJxQAtI1GRQT2oAGoPShqD0oAAcmj+KgHn60fxUAB7YoPSgnmgnigAB4znrXzR+3v4TvPEHwS1C7so2lktApCqOeWr6XyNpBXkdKy/Evh+x8T6Jd6HqcKvFdxlCp5HSgD8+f8Agml4/sNH1vXPB+ozrHPfmNbdWOOVzmv0ZJ6gYr8mPjT8BviX+zf8Qz4u8JJcPYrMZra5hUngnJGB+VereEv+Ckuv6XoyWPiXwXNdXUKBfOZypcgemKAPsT9oX4sR/B/4dX3ilNjXUQHkxFgCxzivF/2Vf2pfFvx31nVLLUtNMNvZr97dkcg18ffFn41fFX9qjxFbaLY6Rdw2Uj7YrRVJVQfVsV94/slfs/j4LeAWfU4h/a9/FuuOORxxQB8MfGlFk/a4uFcAj7ZD1/Cv1f0dVTRbJEGB9mj/APQBX5UfGWyvH/a2uHWznK/a4fmEZI7d6/VjSfl0ezXv9mj/APQRQB+U/wC2QAP2oJ8Lg/bLbt7ivb/+Ch73q/DXwWsDN5JtB5uOn3VxXi/7Y1jezftNzSRWk7j7ZbfMsZI6r3r7e/aK+DUvxf8AgfDpmnW+7Uraxia3Hf7oJ/lQB8Ufs/eG/wBrDUvBFvP8JrnGjHOxVKZHPfPNdx4q+FX7c3ifRbjR/EtwJrCcASI7RqPzrhPgN+0J45/Zf1a78I+JvDt1PYb9vlEECPB7HHeu5+Nf7dPib4laGfCXgHw7dWcl5hWmj3E5zx2oA2P2afgB8T/hND4l1XxBbRwQ3FuxPlzq+fkPYGvKP2NTbP8AtMRPqpUuLqfbv79fWvrb9jb4Z+OrHwXfav8AEW5nkl1iLEcMpJ2jBH9a+Tfjp8LfHv7OvxjPjnw7p85sTOZraWJSQRnLdKAP1aBVUBBBGPyFeb618Qvg1ZeJX0jVbywGrKyqytEpbcenNfJw/wCCj8p8IG1bwfMdX8nys7jndjGeleU/s7/Df4h/H74zr478QxXkVgJ/NuJX3KMdVGKAPRf+CoLo7eDnh6MsxXHcYGK+VdI+C/xL8TfD6bx3a2E8mjaeAyHdkcnnAr6u/wCCmunXIbwXb20EswgWRPkQnoAO1e7/ALHPh201j9mrS9I1awGy5ilR1dMHknrQB5F/wT7+PdlNp/8Awq7W3igurc7bbIAL85NfQX7YRB+A2vt1BROfxr8+/jp8MvFP7N/xmXXvDkVwtq9x5ttJEhIIzlhxX1r45+KsPxf/AGTdR1eCGUXawRrPEUO4EHFAHj//AATVOlDxTr3nbBdl18vPXvnFfovPsMTBz8m07s9xivxa+Cni/wCIPwo8Uv448PaReTW9lJm4QIwyCcelfVnij/go7cXPhOW10nwjPDqs8Xl5ycqcYJxigDwj9oQRp+1tfroG3aLy32lOnUZrr/29/tv/AAmvhtrzd5XlQ7M9Purmsz9lb4Q+MfjV8YY/Hviayn/s+GYzXM0qkbs8r1r6l/bh/Z51H4leDrPXPDFoZNQ0OM7Y1HMg4/kBQB67+zCbD/hTegiwKeWYjkrjk1T/AGsf7OPwR13+0dhTyxgN65r4c/Z7/a68W/AnTj4H8WeHrq7sbViibwy+Wc89uai/aF/ay8X/AB/ij8FeEvD11a2M7BHCBm83J47cUAdD/wAE2zc/8J9riwqRbiQbj2xzivq79sXxF4E0j4TalB4yjhla4TFvG33ic9u9cN+x78G5PgT8Or3xj4xgMF5eRCaRCMlcAkfnXyf8cPHnjX9qD4vw+G9Ftbs6atx5dvFsYKFzhjQB876W9tZ67bajfWbyaeLoOFIIBTf6/Sv2n+Avinwh4q+G+kah4N8lbIQhfKTqpAAOfxr5/wDHv7E3h6b4EW+haPZr/bunW5lS4A+ZifmIr54/ZA+NXiT4JfECTwL4qhu00u4n8ly0bERkHA7dzQB+poPpSDOeaitLqG+tormE/LKgcfQjNS8YwaADvR3o70d6AAnFHQUEZpaAAc80HnikJxS4xQAU3JpQc0EZoAU8UgNKeaQCgA3UZFHy0fLQAZFGRR8tHy0AGQaMgUny0fLQAuRRn3pDtxSjaaADvR3o70d6ADn1oOR3oIHrRgHpQAEkDrQARzRjPNAAoACcUtITiloAQDvS0UUAJ3o70d6O9AC0UUGgBAeaCOc0mBig4xQDVg5zkUvPrQMdKBjPFJK/UNWHA4ozQwxQRTt5hdCE0ueKRqXHFHzC6BaAecYoFIetO6DQUkjvQcgdaQ896OtK6DQXIHSjIoA4pB1o1DUM0ZoHWlajUNRaMUh6YoWlqBS1PRdM1u2az1OyhuYmGCsiA/zrzLUv2V/gjrF013f+DIWlY5JDkD9K9ZODgmg4DYLZFPUZyHhL4SfD7wOAPDvh62tj2YoGI/E115A/1eARjFKeRjHSj5cZzk+lOzE7HJXnwr8DX+sHXbzQoJL1iG84gZyK6tFVVWNQAEGAPQU8YIwBSdyCdxPalqLc5TWvhd4I17UjrOraFBPeFg3mMBnI6V1EUccUaQxgeWi7QuO1PHXnj0o3EfL2FFhnGeLPg98PPG0vmeI/DltPJ/eChT+grO8O/AL4U+FrsX2jeFreKVTkFhu/nXooOBn0oJzyOlFgGRxRQxpHDGqIvACjAFZ+u+GtE8SWr2OuWEN1E4xh0BxWkOufXtRz0zg0rtB7zPK3/Zf+Cz3f2tvBkPmk7t27jP0r0LQvDei+GrNNP0TT4bWKMYARAP1rSIz06+tKD2LZI600nILM57xR4C8LeMjC3iPS4rtrfOwuM4zWlouh6X4c0+PStHtVt7SP7iKOBV7nlg2c0vG0ZGCKAOf8TeBPCvjARf8ACQaPDeeVnbvUZGarWXw08GaZpU+i2mjRR2VxjzIh0P4V1HGN4GCetB9hgetAHJad8KvAWmW1xaWfh21SO5H71SgOf0rmpv2Zvgxc3IvJfCEAk3bg2e/0r1IEgbs5IoXptxwaAMzQfDWheGLJdP0OwhtYIhgBEAzWk6LIrCVAynjBGQaXg8E5pM8H+8egoA4PxN8C/hj4vuTda74Xt5ZW5LKoX+VL4X+B/wAMfB9yLnQfC9vFKvIZlDY/MV3mcDBPTtS8AdeT2p2sw0XQpalpOn6rZNpl9CJLZxhkAwMVzuifCjwJ4d1AappPh+3guUJKOFBPPWuu7YB4WjqcjqaSTb0YIR1V1MTKCMYxXGXvwe+Heo6k2qXXh23a5dg28KAcjvXaZ6ZOcUDjhjgetF0O5Fb20NpAlvAMKgCgegFSnOQc0ZA+ajjv3ouguLRSAYpScUm3HYQhOKWjIFFHqAhGaWk3Uuad0AUUgOaDzTugFHFNPWnZpo60XQCnpQOlLRRdAIM96Dk0ZFGRS0QW1uGD60YPrRkUZFK6YO973A9KAMUtJupgAOaCcUZA4oPSgBc0mD60ZAoyKADJ9KMn0oyKMigANABpcZpuB60ALg+tGD60ZFGRQAvPrRRkUUAJg+tGD60YFGBQAHPagjNGBQCACc9KG1b3gbSXvBjvnHvRjuR+NeX/ABB/aE8BfD+8bTr7UUe7X70YycfiK4cftneAedqcDqea46mMoU92cVTMMNSdnI+iM/7X6UZ/2v0r54/4bO8Bdk/nR/w2d4B/ufzqf7QofzELNMK/tH0OcHvQMDvXzv8A8NneAv7n86P+GzvAX9z+dH9oYf8AmD+1ML/MfRHPrRz6187/APDZ3gP+5/Oj/hs7wH/c/nR/aFD+YP7Uwv8AMfRB3HvSYP8AEa+eD+2d4C7J/Omy/tpeAIo8uvT61rTxtGbsmH9qYX+Y+icn1oHHevmj/huj4c/3P50f8Nz/AA6/ufzr2FleKkrqI/7Uw38x9L4PpQQT2r5nP7c/w4/55/zo/wCG6Phx3jP60/7KxX8of2phv5j6ZNA4/wD118zf8N0fDf8A55n9aP8Ahuj4b/8APM/rR/ZWK/lF/aWH/mPpgcUdTXzP/wAN0fDf/nmf1o/4bn+HHaM/rT/srFfyh/aeG/mPpnnOB0pAMn6V8zn9uf4c8/uzx9asWf7bnw6vrlLaKP5n+tH9lYr+Ul5thIK8pH0jn/apPoa8NH7WHgkgEJ/Oj/hq/wAFdk/nT/snFP7Bxf6yZbF2lUPc8H1owfWvDP8Ahq/wX/d/nR/w1f4L/u/zo/sjF/yh/rLlv/Pw9zz/ALX6UZ9/0rwz/hrDwV/c/nR/w1f4K/ufzpf2Ti/5Q/1ly3/n4e5k+9A69a8M/wCGsPBX9z+dH/DV/gofwfzprKMU/sjXEuXJfGe5kkKTnk0AgMQK8MP7V/gv72z+dXNL/ae8Iatex2FvH+8f61FTLMVBX5S6Gf4CtKymez5HrRn/AGv0rhB8VtNIBFu2D9aX/haunf8APu361wNW0Z7SaaujusH1owfWuE/4Wrp3/Pu360f8LV07/n3b9aBnd5/2v0oz/tfpXCf8LV07/n3b9aP+Fq6d/wA+7frQB3fXvSH1zXC/8LV07/n3b9aP+Fq6d/z7t+tAHdHjk85pQDjrxXC/8LV0wHi3bH41R1T41aJpVv8AabqEhR9axxFanhoe2qOyNKVGVeXLBHpBDY4NAz3NePf8NI+Ev7v86P8AhpHwlj7v868KXFWWN6VLHpvIsdNXjA9hyfSjn0rx7/hpHwn/AHf50n/DSXhP+7/Oj/WrK/8An4P+wcd/IexfhRz6V49/w0n4U/u/zo/4aT8J+n86P9asr/5+B/YWO/kPYefSgZHavHv+GkvCfp/Oj/hpLwp6fzprivLLXdQP7Ax/8h7CB37mgnHJPSvHz+0l4U/u9PrWN4j/AGtvBHhu3FxdD5W+taUeJMtxMuWNQqPD+Pe0D3nPtRn2/WvmA/t2/Dj+7/Ok/wCG7fhx/cP616Sx9D+Y2/1WzP8A59M+oM+360Z9v1r5f/4bu+HH9w/rR/w3d8OP7h/Wj6/Q/mD/AFWzT/n0z6gz7frRn2/Wvl//AIbu+HB/gP60f8N3fDj+4f1p/XqH8wf6rZp/z6Z9QZpMj0r5g/4bt+HH9w/rSj9u34b/ANw/rS+v0P5h/wCq2af8+mfTxzwc8GlIGeelfMcP7dfw2aRUYbVY8nnivZfhx8X/AAZ8TrP7V4Z1RLgoBuToR+dXTxdGo7JnLisix+DhzVoWR3GBRnFIDmlxmult9DyNluIRmgDFAIoJxQAfNR81Hy0fLQApz2oGe9J8tHy0AAOe1BOO1G6jdQAZ5xR/FS55xSfxUALRz6UnzUc+tAC0UUUAFFFFACcHLetY3i6+k07w7f3kJ+ZIWI/I1skk4OOBXPeP9p8I6mB3gb+RqKvwMyry9x+h+ZHiPUr7Xtcu9Sv5WkkkmcfMc9CapfZMZIA5q3sBvLknn9/Jj/vo1YWMAZ71+e1qj52flderLnkjM+yn+7R9kI6CtTyh6UeUPSsXOSdkY+0ktDK+yn+7S/ZT6VqeUPSjyhjOKfPJD9pK9rmX9k9qPsp9K1PKHpR5Q9KFO60H7WWzMo2xGeKo6pBttJDjtXRGNcEkVl62irYyYHQV6GVyviYJ9wjVu7HExQbh071L9m5HFS2Y+Q8d6thAa/pXDQjKlGy6IcqjUtWUPsgoFoK0PKo8ut/ZQWpPtJt6Gf8AZBR9kHpWh5dHl0eyXQftGt2Z5tKPsnPStDy6PLpuiJVuhnG268Ve0CDbq0P1pzR8ZqxoqY1WH60vZR7GGJqP2TPSoLYsi8dqn+xHd0q1Yx5iX6VdEIHOKtU0fn9WvJS3Mj7H7Uv2L2rW8kelHkj0o9mk0kiPrGm5k/YvQUfYj6VriIelHlewodKKshfWJRd4syPsXtR9i9q1vJHpR5I9KPZK6G8RJK9zHNlz0rc8CwbPFFnx/FUTQgdK0vByAeKLPA/jrz8ypWw0rHs5BXlLHU031Pqe00xXhjIQcqO3tVj+x1I/1Y/KtbS4Fa2iyP4F/lWkLZcdK/LJ/Ez+jKXwL0OY/sdP+eQ/Kj+x0/55D8q6j7MPQUfZl9BUlnL/ANjp/wA8h+VH9jp/zyH5V1H2ZfQUfZh6CgDl/wCx0/55D8qP7HT/AJ5D8q6j7MPQUfZh6CgDljpA/wCeYx9K4H4tWSw+HnOwD8PevZZLdQM4ry741RKvhtyPUfzr5/idtZbUPWyTXGwR4BHaZHAqUWRx0rQtIlKjirawJ6V/M9SvKMnqftlOlHkWhifYj6UGxz2rb8lPSgQIe1R9Zk1uV7GOljE+xcfdo+w/7Nbfkp6UeSnpU/Wp7Jh7GLaujE+xe1H2I+lbnkL6UeQvpVfWJ8urGqMXJJGEbJvSvNfjNBs0mH8a9kkhXB4ryj42pjSocep/nXs5DXlLGQVzowlH98rnhywbuop32fBq1EgqXy81+tqbaPs44eLitCh9nGelH2cDtWh5Q9KPL9qfPbqX9VjfYz/s6+lH2celaHlD+7R5Y9KTqX0QfVoJNWM/7MB2pfs6+lX/ACx/dpPLX0oc7ISw0exnmADOT16V7T+yX4n1TQ/i3pem21w/kXjMJV3ccDjivJWjHOF6da9F/ZsG340+Hzjje+fyrrwVR+1jqeDxHhYf2fUuuh+qcZLRo3qoNPOccVFBnyY/9wfyqT5q+6Xwn8vTilKXqLQBimg4pQc1RAfxUNRjnNH8VABkUuRRz6Uc+lACZFGRRk+lHPpQAHpQOlLRQAUUUUAFFFFABRRRQAh6Vzvj/wD5FLUv+uDfyNdEOc1zvxA/5FLUv+uDfyNZVvgZlX/hy9D8yf8Al5uP+u8n/oRqyOlVx/x9XH/XeT/0I1aAr86qfGz8nr/HL1A9RluvQ0AHgbcepz1o7EYz6V6P8Lvgn4i+JQlns42htYlyZcZyadKlOtLlp7ioYedafLT1Z5zgnIxmun+H/wAP9b+IGsw6VpVs5RmHmNjhRW7pfwR8YXvjM+E202RXjkAd8cBfX8q+0/AHw/8ACvwd8K+dKYklSPdNO3UnFelg8ulXqc1TRI9fL8oliJ81TRLc+Zvi5+zTN4H8PRa3pdyJljXNxkYwa8AKkEgr0OGr3r9oH493XjO7m0DRJCumxkqWH8deDHnG7qefrXPmHsvaWo7HLmaoKrbDidjWRrufsMn0rXI4NZGu/wDHjJ9KrKrPFwXmcCepylkBtH1NXF6VTs/uD8auL0r+n8M7YeK8kKau7sXoQSeOwpOnbHtS4J4ByB0969Z+Fn7PHiz4oabcarZwNDbwrujcj79KtXpYWHNVZpRoVMTK1M8mABbIruvhP8J/EHxR12HTdMt38ncPOl28KK2vB37PvjXxH43bwpNp0sIgkAmkI4Uf/qr738G+DPBfwI8Fb5DDB5EW6aZgMsa8TM86jh48lDWTPZy7KJV3zV9Io+Pfj/8Asv3Pwy0iLxDpFwJrJFHng8bD/XmvnVjghvzFe9ftG/tD6h8TtSl0XSnMejwsVAB4krwckkliceld+VLEOhzYndnDmUqCq8uH2Qh6VNo//ITi+tQnpU+jf8hOH616LR5GJ/gs9Z08fukq+DVHT/8AUp9KvDvVxR+d1viF6YK9uvtR1BP3g3X2o5+WvRPBnwW8ReMdGn1eCMxxqu6IY+/61jiMRTw0eao7GuDwNbHVHToRuzzvAHAGAK7T4cfDXVfH2pi3ghZLYEeZLjgCr3gr4P8AiDxJ4jOk3No8Mdu+JnI7V9X6bp/hn4VeGOTFBHAmST1Jrw81zqNL93h9ZM+u4f4XliZe3xq5acT5l+LnwYn8CRrqFk4ltSBu7bT/AFrycAZGOlel/F74sX3j3UmtYnKWEbEKg715qMngngdK9PK/b/V08R8R4GffVPrklgvgQ1hxitHweP8Aip7PP9+s9q0fB/Piiz/36WaL/ZpJmnDzisfTXW59jaT/AMe0X+4v8q1FrL0n/j2i/wBxf5VqDpX5RP4mf0lS+Begc8DGcdqD97nr29qGIXndhQCSfSvCfH37W3gHwJ42tPB9xcpIXcpPID/qj2qSz3bv0+prxn9oL9ozw58F9Ckle4S41KUfuIA3JP8ASs745ftQ+Efh14OXUtNv4ry+vYibaNG7kf8A16/O1U+IX7SHxCABnu7i8l99qLn8hxQB+hP7MX7TVl8arB7G/iaDU7cncuCQwJ45+lfQGSTnHTrXjf7O37PehfBfw6kcSh9WuEU3E2OSa9lOeMNn8KAGS/dryz43f8i5J+H869Tl+7Xlnxt/5FyT6j+dfP8AE7Tyyoevkf8AvsDxW05UfSrvQVStBhV+lXB0r+X63xP1P3Ck7U0GB/hS8HqKFUllK9+MV3WmfCTxBqXh+TWkjYEDdHFjlh3roweW4jMZNYdXsYYnG0MIlKu7XOF2jcAOQf1rufh18M7/AMY3PmyQtHZp1cjrVj4d/C3VPE2pbr+FobWFvm3DrX0BqGpeH/h1oG3EcSxJgKOpNfa8OcJqSeLzBWprv1Pl864hcGsNgdZv8D5x+I3w9n8GXow++3f7prjM/wAIHPb2rqPHnji/8Y6m9zKSLdSfLT0Fct83ds4r5LOvqzxklgvgPosqWIeGj9Z+LqNkHymvJfjeP+JVDj3/AJ1605yDXk3xw50mH6n+dbcO6Y6ET2cIl7eJ4zF0qeoYugqev2B7H29NqMUg4+8TgUnQYIx71JDDLcTLDCpZ2IUL6k17Rbfss+ObnwL/AMJgsDl9m8W+3kitaeHlVWhw47M8Nl0l9Zmo32PFApY/J1PQV7v+z9+zVrHxRn/tPVIXt9LQH5mX73HH61e/Z5/Zm1jx7rSal4jspLfTLaTL7xjfg/8A1q+zvHPjnwT8B/BXlRiCHyItsUS4yxxXr4HLo8nta2x8FxPxhUVRYDKveqy6rofn18dPgxqHwi8QiwkkElpOT5MnHzAdeO1eY46DORXc/Fn4qa38U/EUmrapKRAHPkx/3BXC8keory8T7P2j9nsfdZOsX9Sh9dd6ltRH6V6H+zf/AMlq0D/ff+VeeP0r0P8AZv8A+S16B/vP/KrwS/fROTiPXL6nofqfbHMMf+4KkJxUdt/qI/8AdH8qlr71fCfyrW+J+oUgHNLRVGYhGe9KRmiigApPmpaT5qAFPtSDPelPtSDPegBaMiijAoATrR0paKACiiigAooooAMVzvxAA/4RLUuf+WDfyNdDj3rnviAMeEtSP/TBv5Gsq2kGY19KTPzJH/H1cf8AXeT/ANCNWR1FV1/4+rn/AK7yf+hGrA7V+d1fjZ+UV9arFP6Gvoz9mr462/hMxeEteVFs3O2ObAG3/GvnPHG3OPUUqM8Tb0Yqy8hga0wteeHmpwNcJip4OoqkT9RZ9S8M2FhJ4ldrdUZN5m4yRj1r4z+Pvx+v/Gd5LoegzNHpsRKsVb79eb3XxX8Y3vhmPwrPqsn2KIYxnkj61xuSSWLEnv716eLzV4iHJT0PYx+ePE0/Z0lbuKxLEsxJJ9aKQUA5rxNz53fcQ96ydd/48ZPpWse9ZOu/8eMn0r0Mq/3uHqVHc5Sz+4KuLVSy+4PqatrX9PYbWhG/ZClJ82gobDAgYAORX1v+yl+0ZZ6EsPgfxN5cUBIWGUgDFfJBA4+bOf0p0c8tvIkkLFGQ5BBwc1jj8DTzCl7OR04HFTwVX2iP1y1bW/CfhnTJvFVw9rFGyeY0wAy3HFfAn7Rf7ReqfEnVZdH0e4eLSIWKqqnHmV57rfxi8ca94atvCmoavLJZW4KhemR9a4jcxADHNeNluQrCy9rX1fQ9bMM6liV7Ojog5PJPWgZ70c0gz3r6bW10fP2V7MG61Po//ITh+tQN1qfR/wDkJw/WkzDE/wAFnrdgcxJ9BV/PSqFgMRJ9BV/0qon53W+MVSVYSDqpyPevpH4BfGWyihh8K63sjI+WKQ8Bq+bQOPX29KfBPJbyLNBKUKHII4INcOY4Cnj6bpz3PTyXN6mT4lVobdT9BNa1vw74Z06bW53hhTbuLgD5vSvkL4s/FvUfHWoyW9vM0dhGxEag9a5zXPiJ4m1/TLfS9Qv3eCEFQOma5gf7TV5eVZEsHP2lfWXQ+gz/AIulmUVRw/ux6hnNFFFfSHw71dxDWh4OP/FT2n+/Wea0PB3/ACM9p/v15uaf7tI93h7/AJGEPU+x9J/49ov9xf5VqLWXpP8Ax7Rf7i/yrUWvyifxM/pKl8C9Bs8azRPC4yJFKt9CK/PX9sD9ljV9H1G5+IPhKOW4tpG8yaMEkx/jX6Gjhsk9aq6lplpq1nLY6hAs8MylWVhkEVJZ+MngnwV43+KviK28MWSXVy6vsO8kiMd+tfp9+z1+zz4d+Dfh6FRbRy6pMgM9wV5zXVeBfgt4E+Ht/d6j4d0aK3mum3O/U59s13g65z06UAAAPNAwe1LSAY70ANk/1Zryv42f8i3J+H869Uk/1Zryv42f8i3J+H86+f4n/wCRZUPXyP8A32B4ta/dH0q6eoqla/dH0q6eor+Xq/xM/caX8NDomMUqP3Qgivo74RfFCx1i0j0PVCkdyg2qT0YV83H72c/Sp7O9ubC4jubSUxOhySK9zh7PquR1lUirxe6PJznKaebUeSWjWzPsbxJ4k0Pwfpcl6/lJxkBcDJr5b8deOdQ8X6k8s07CIE+XGOgFUfEPi7WfEpRdSu2kSMYVegFYoO3kHr39K9niXi6ebr2ND3YHnZJw5HLf3tb3ph0FA5FIOuKOp4r4Y+pW42Toa8m+N/8AyCYfqa9ak6V5L8cP+QVF9TXucPf79A6MJ/GR41D92phyKhh+7Uw4r9etdWZ9vT1SZa02/m028hv7fG+FwwyM5wa/Q39mv9obQfH+jw+GtcaGHUIkCbWxh/6V+dJycnOCa0dB1/VPDmpRappFy8E8JyCprvwWM+pvyPm+JuHKfENDlbtNbM/Ur4n/ABP8H/CDw3Les0ETlSYokABY/hX5vfFf4seIfijr8+p6lcP5Ic+VDu4UVn+OviX4q+IN0s/iHUZJ/KUCNScDp6VynGPQ1vjsyeI92HwnmcK8H08kXtsR71TuLRRRXk+h92rX0GSdK9D/AGbv+S16B/vP/KvPJfu16H+zd/yWrQP99/5V2YP+NE8LiPTL6iXY/VG34gj/ANwfyqSo4P8AUx/7g/lUlfexfuo/lOprNt92FAGKCcUVRmJjnNB6UtFACHpS0h6UtABRRRQAUUUUAFFFFABRRRQAUUUUAGMsR61zvxAwPCGp5/54N/I10OTuA9Ky/E2ntquh3lggy0sLAfXBqKq5oMyrq9Nn5eJzdXBzx50n/oRqyvI54Bq/4q8N6l4U8RXuk6payRPHMxUlTggknrWasqbfvZPpX53WpyjN6H5Xiaco1XoS0UzzV9aTzU9RWXJNdDD2c+iJKTB9ab5qetIZU7mhwl0QOnN7okoqMyoO4pfNX1/Wjkl2Dkl2HHpWVrv/AB5S/StEypjiszXHU2UmPSvRyqLWLhddSowl2OUs87B9aueuTVKzYBOfWrXmJzzX9M4acPZRbfRBKEnokSYPrRg+tM80daXzV9a256b1TJ5Ki0aHUUzzEHejzEPWhVV3B02ug/B9aMH1pvmrSeatNVIN2uHsprWw5j2qxo3Opw896qmRc1Y0ZgdVi+tJzj3McTCXsXoeuaef3S89hV8YwOazrB1ES5PYVd81OOaqM49z88rUanN8LJKKZ5y+opfMT+8Kp1ILVsyWHqb8rHUUzzk9R+dHmp6inzR6MPYztqmPopnnJ6j86POT1H50c8e4OjU/lY5ulaPg8Z8T2f8Av1lGZDxkVp+D2U+J7PB/jrzcznF4eVme5w/TmsfBtM+yNJ/49ov9xf5VqD2NYulX1oLeMGZPuD+IelaI1Cz7zx/99CvyqfxM/o+l8CLLUo+tVf7Qs/8AnvH/AN9Cg6hZ9p4/++hUllnB9aMH1qr/AGhZ/wDPeP8A76o/tCz/AOe8f/fVAFoYoOKrf2hZf890/wC+hR/aFl/z3T/voUATy/dxmvK/jdn/AIRyTnuP516W+oWewkTx/wDfQrzD403EEvh6QJIrHjgHPevA4mTeW1Ej1skaWNg2eN2h4H0q4elUbWRNo57Va82PH3hX8w1qNTmfus/b6dSHs1qSUH61H5sfrR5sfZh+dZOjWbvys09pB63Hk89aUnio/MT+8KPNTGMj86FRqr7LEqkU7XHnpQtM8yP1A/GgSx+o/On7Gp/KxKpC+4rk7SDXk3xw/wCQVF9T/OvV3ljKk5FeTfG8g6XDj1P869zh6lNY6LaZ0YWpD2y1PHIcham5x1qCJuKl3DGK/XeSUldI+2hXpctnJfePopu8elIXHalyN6NF+2pS2kvvHUtM3il3ijkklZIft6ezkvvHUU3eKTeKfI3okL29GWikr+oPggdh6V6J+zfx8a9Ay3LO/wCHFedFwScjPpXt/wCyR4B1rX/ihY67HZyCz09iZJGXA5HFdmChL2sdD5zijF06WXT95bH6S25P2eL/AHR/KpabEu2NU/ugCnGvu0vdR/LtWXNNpAelIBigHNLTICiiigAooooAKRaWigAopcH0NGD6GgBo6UtAVsdDS4PoaAEowKXB9DRg+hoASilwfQ0bT6GgBoPFID+tP2N/dP5Umw56Gl7z0YWvuch4u+Ffgfxud3iLRI7lu7A7T+YrlG/Zb+C+Qf8AhFj/AN/mr1raR2NG3sQR+FYywtOW6OWeEoTeqPJf+GW/gvjJ8Lf+R2o/4Zb+C2M/8It/5HavWtr47/lRtOO/5VH1Sl/KT9Rw/Y8lH7LnwWH/ADK//kZqP+GW/gt/0K//AJGavW9rf3T+VG1v7p/Kj6pS/lD6jh/5TyQ/sufBU/8AMrn/AL/NR/wy78F/+hW/8jtXrWxvQ/lRhvf8qHhKP8ofUcP/ACnkv/DLnwXzz4WP/f8Aakk/ZX+Ckow3hXI/67NXrZR+pB/KlKsRwD+VXDD0ou6QfUcP/KeM/wDDI3wJ/wChR/8AI7Uf8Mi/Ar/oUv8AyO1eyhWx0P5UYbP3TXorG10rKTH9Rw/8p4z/AMMi/Av/AKFL/wAjtS/8Mi/Ar/oUv/I7V7LsPoaNh9DT+u4j+Zh9Rw/8p41/wyL8Cv8AoUv/ACO1H/DI3wK/6FL/AMjtXsuG9D+VGG9DR9exH8zD6jh/5Txr/hkb4Ff9Cj/5Hag/si/Ar/oUf/I7V7LsPoaNh9DR9dxH8zD6jh/5Txo/sjfAwAf8UlwP+m7VLbfsn/A+1mE9t4Sww/6btXsAQg5IODQVPoQPpR9er/zMmWX0JKzieZ/8M6fCYdPD2P8Atq1H/DO3wn/6F8/9/Wr0zBHY0YJ7H8qP7Qr/AMzOZ5LgnvBHmZ/Z1+FA/wCZfP8A39agfs6/Cg/8y+f+/rV6YVbPQ/lQA3ofyp/X6/8AMw/sTBfyI8z/AOGdvhP/ANC8f+/rUf8ADO3wn/6F4/8Af1q9M5/umjn+6aX16v8AzMP7EwX/AD7R5of2dPhT/wBC8f8Av81N/wCGdPhV/wBC8f8Av61emkE/wGk2n+4aax9f+Zg8jwT+wjzT/hnP4UFiP+EePP8A01arFj8Avhhp1yt3Z6BslTofNNeiEEjaSQfpS7Tx8pI7molja8tHJmlPKMHSd1BXOVHwz8I9rBx/21NH/CtPCX/PjJ/39aup2n+6aNp/umuZu56KVlY5b/hWnhH/AJ8ZP+/rUf8ACtPCP/PjJ/39aup2n+6aNh7KaBnLf8K08Jf8+En/AH9aj/hWnhL/AJ8JP+/rV1JDd0NADdkNAHLH4a+Ev+fCQ/8AbVqT/hWnhP8A58JP+/zV1O0/3DRtP9w0Acv/AMK08In5Rp8mP+uzVXvfhP4Hvo/Ju9LZl95WNdkEI4OfypMMOCpIrKrRjiI8s1oVCq6UrxPPj8Cvhz/DouP+2ho/4UV8Of8AoDH/AL+GvQQpH8JoCE/wGvLWQZfJ3nTR3vM8Sl7s39558fgV8Ou2jH/v6aT/AIUV8O/+gN/5FNehFTn7po2kdFNP+wMv/wCfaJ/tTF/zv7zz7/hRfw7/AOgMf+/rUn/Civh3/wBAb/yK1eh4/wBk0Y/2TR/YGX/8+0P+1MX/ADv7zz0/Ar4ddtGP/f00n/Ci/h0P+YL/AORGr0LaT2NJtP8AdNC4fwFv4aB5pi/53955/wD8KL+HWMHRj/38NZ2sfs2/CfXIfJ1PQPNT08xq9SKnGMGja4GApAqqWTYKjK6poazXFr7b+88U/wCGP/gX28J/+Rmo/wCGP/gZ/wBCn/5Hava9r/5FG1/Su76rSX2TX+2sb/z8f3s8UP7IHwK7+Ff/ACM1A/ZA+BX/AEKn/kZq9rCnupoKHspo+q0v5Q/trHf8/X97PFP+GPvgX/0Kf/kZqP8Ahj/4Gf8AQp/+R2r2sq3YGja/p+lH1Wl/KH9tY7/n6/vZ4mf2QPgX28K/+RmpR+x/8CyP+RU/8jNXtW1v7hpdpHRTR9Vpdg/trHf8/H97PF4v2QvgdG4b/hE+VOR++avSvCvgnw54LshYeH9MjtYlGPlHP51vBTkkgk+lCq3J2EVUcPGHQwrZlisQuWrNteoCil2n+6fyo2n0NbX6HBs7oTpRS7T6GjafQ0AJSYFO2n0NGD6GgBM4oo2k9jS7T6GgBKM5pdp9DSbSOxoA2tq/3R+VG1f7o/KlooATav8AdH5UbV/uj8qWigBNq/3R+VG1f7o/KlooATav90flRtX+6PypaKAGlR2UflSbB6CnfjSHPehXFZMNqjsPypML/dFKtLkdKA2EwvoKMJ6D8qNvvRt96Bi/L6CjC+gpNvvRt96A0FwPQUbV/uj8qTHvRt96QC4X0FJhfQUbfejb70wDC/3R+VGF/uj8qXHSjHSgBML/AHR+VGF/uj8qXHSjHSkGgmF/uj8qML/dH5UuOlGOlAaCYX+6Pyowv90flS46UY96YaBtX+6PypNo/uj8qdSZFAtRNq/3RRgDHyilyKTbS1GLtX+6Pyo2r/dH5UYo20C0Dav90flRtX+6Pyo20baA0Dav90flRtX+6PypNvvS7aY9g2r/AHR+VN2+wp9FK7Fa4m1f7o/Kjav90flS0UxibV/uj8qNq/3R+VLRQAm1f7o/Kjav90flS0UAJtX+6Pyo2r/dH5UtFACbV7gflSYT0H5U6kyKV2hbjSF7AUYHoKfRRa4xuxfQUbF9BTqKYDdi+go2L6D8qdRQAzavt+VKFX0FKDmlpagN2p3Ao2r/AHRTqTFMWobV/uj8qNq/3R+VGKNtINA2r/dH5UbV/uj8qNtG2gNA2r/dH5UbV/uj8qNtG2gNA2r/AHR+VG1f7o/KjbRtoDQQKOuBS7V9BR+NLRqwGkKP4RS7V/uj8qWm7fejYYu1f7o/Kjav90flS0UwE2r/AHR+VG1f7o/KlooATav90flRtX+6PypaKAE2r/dH5UbV/uj8qWigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9k=\"}"); } var socket_ot; function ot_open() { socket_ot = new_ws(get_appropriate_ws_url(""), "dumb-increment-protocol"); console.log("ot_open"); try { socket_ot.onopen = function() { document.getElementById("ot_statustd").style.backgroundColor = "#40ff40"; document.getElementById("ot_status").innerHTML = " websocket connection opened
" + san(socket_di.extensions); document.getElementById("ot_open_btn").disabled = true; document.getElementById("ot_close_btn").disabled = false; document.getElementById("ot_req_close_btn").disabled = false; console.log("ot_open.onopen"); }; socket_ot.onclose = function(e){ document.getElementById("ot_statustd").style.backgroundColor = "#ff4040"; document.getElementById("ot_status").textContent = " websocket connection CLOSED, code: " + e.code + ", reason: " + e.reason; document.getElementById("ot_open_btn").disabled = false; document.getElementById("ot_close_btn").disabled = true; document.getElementById("ot_req_close_btn").disabled = true; }; } catch(exception) { alert("

Error" + exception); } } /* browser will close the ws in a controlled way */ function ot_close() { socket_ot.close(3000, "Bye!"); } /* we ask the server to close the ws in a controlled way */ function ot_req_close() { socket_ot.send("closeme\n"); } var socket_lm; var pending = ""; function lm_timer_handler(ev) { socket_lm.send(pending); pending=""; } /* lws-mirror protocol */ var down = 0; var no_last = 1; var last_x = 0, last_y = 0; var ctx; var color = "#000000"; var lm_timer; function ev_mousemove (ev) { var x, y; if (ev.offsetX) { x = ev.offsetX; y = ev.offsetY; } else { x = ev.layerX - offsetX; y = ev.layerY - offsetY; } if (!down) return; if (no_last) { no_last = 0; last_x = x; last_y = y; return; } pending = pending + "d " + color + " " + last_x + " " + last_y + " " + x + " " + y + ";"; if (pending.length > 400) { socket_lm.send(pending); clearTimeout(lm_timer); pending = ""; } else lm_timer = setTimeout(lm_timer_handler, 1); last_x = x; last_y = y; } function ev_mousedown (ev) { down = 1; } function ev_mouseup(ev) { down = 0; no_last = 1; } function ws_open_mirror() { socket_lm = new_ws(get_appropriate_ws_url("?mirror=" + mirror_name), "lws-mirror-protocol"); try { socket_lm.onopen = function() { document.getElementById("wslm_statustd").style.backgroundColor = "#40ff40"; document.getElementById("wslm_status").innerHTML = " websocket connection opened
" + san(socket_lm.extensions); lws_gray_out(false); }; socket_lm.onmessage =function got_packet(msg) { j = msg.data.split(";"); var f = 0; while (f < j.length - 1) { i = j[f].split(" "); if (i[0] === "d") { ctx.strokeStyle = i[1]; ctx.beginPath(); ctx.moveTo(+(i[2]), +(i[3])); ctx.lineTo(+(i[4]), +(i[5])); ctx.stroke(); } if (i[0] === "c") { ctx.strokeStyle = i[1]; ctx.beginPath(); ctx.arc(+(i[2]), +(i[3]), +(i[4]), 0, Math.PI*2, true); ctx.stroke(); } f++; } }; socket_lm.onclose = function(){ document.getElementById("wslm_statustd").style.backgroundColor = "#ff4040"; document.getElementById("wslm_status").textContent = " websocket connection CLOSED "; lws_gray_out(true,{"zindex":"499"}); }; } catch(exception) { alert("

Error" + exception); } var canvas = document.createElement("canvas"); canvas.height = 300; canvas.width = 480; ctx = canvas.getContext("2d"); document.getElementById("wslm_drawing").appendChild(canvas); canvas.addEventListener("mousemove", ev_mousemove, false); canvas.addEventListener("mousedown", ev_mousedown, false); canvas.addEventListener("mouseup", ev_mouseup, false); offsetX = offsetY = 0; element = canvas; if (element.offsetParent) { do { offsetX += element.offsetLeft; offsetY += element.offsetTop; element = element.offsetParent; } while (element); } } function update_color() { color = document.getElementById("color").value; } /* stuff that has to be delayed until all the page assets are loaded */ window.addEventListener("load", function() { lws_gray_out(true,{"zindex":"499"}); document.getElementById("file").onchange = check_file; document.getElementById("offset").onclick = reset; document.getElementById("junk").onclick = junk; document.getElementById("color").onclick = update_color; document.getElementById("ot_open_btn").onclick = ot_open; document.getElementById("ot_close_btn").onclick = ot_close; document.getElementById("ot_req_close_btn").onclick = ot_req_close; document.getElementById("pmd").onclick = on_pmd; var transport_protocol = ""; if ( performance && performance.timing.nextHopProtocol ) { transport_protocol = performance.timing.nextHopProtocol; } else if ( window.chrome && window.chrome.loadTimes ) { transport_protocol = window.chrome.loadTimes().connectionInfo; } else { var p = performance.getEntriesByType("resource"); for (var i=0; i < p.length; i++) { var value = "nextHopProtocol" in p[i]; if (value) transport_protocol = p[i].nextHopProtocol; } } console.log("transport protocol " + transport_protocol); if (transport_protocol === "h2") document.getElementById("transport").innerHTML = ""; BrowserDetect.init(); document.getElementById("brow").textContent = " " + BrowserDetect.browser + " " + BrowserDetect.version + " " + BrowserDetect.OS +" "; document.getElementById("number").textContent = get_appropriate_ws_url(mirror_name); /* create the ws connections back to the server */ ws_open_dumb_increment(); ws_open_status(); ws_open_mirror(); }, false); }()); wss-over-h2.png000066400000000000000000000052471357643561300361230ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin‰PNG  IHDR@@ŖiqŽsBIT|dˆ pHYs é éżuĪÓtEXtSoftwarewww.inkscape.org›ī< $IDATxœķ›}P”ÕĒ?ū<ūĀī" µ.I€@L%Zh‚÷vÉkŽ/YRęZčÕJŅjz›^ߝl*uųĆqF%j茤\›ĘŗN*p4mŗd"… ¦Bńź²,ūr’xڇ}Ų]ąQ'ąźwꌞs~ēå÷=ē÷ūó,Gćõz½\Ć{ƒė öھ*½^/>1œ]…F£ ś/„ Ą§øĒćĮķvćv»d 7h4A@EDQD„2‚EĒ<ƒF³X+īCwwŸb41čõzDQD£Ńīߏ{½Mčtæį·[†-:; TWWcµZ±Z­DDDČ»"(Ņ–w£Ó ĘtÆ>'Ož$)) Q1 hµZA|v’’‡ĆAEE.\ µµ§Ó)›u&ą ččŲ±X>ų`‚œĻÉ)%=ż‚B¦Øč>ł$€yóŹ™6ķgEżwßŰk×D9æfM qq­&³cGĒĒŅŠ`ĀhtaµŚIM­'3³’E‹~@Ɨ„»[äŻw'²gĻ8ŹĖm““„é 6¶ōō dg—1}zĻø.—‹ŗŗ:āćć±Ūķø\.Ł·õz£©ÉÄĪ=“Ÿ8ń¢‚—Kąłē ŖźF¢¢:Ų°a Ÿ~ii‰‹kåõ×g’›ū7…\G‡žŽ=55‘:”Č‚e€›öv÷Ż·o¾‰SČ·“„ŃŅĘ©S6M <v»®®.…ņ ņ Ż0Ø?ņóĒĖŹŌÖF*ź++o䥁[åüŗuÅ&(ßsēž„ŃŲżG›©Ź÷Fvv™"ļókĮĀyŸ”ްŁ.)ņžtuiyóĶæ+źkj”lŁņW<)¬ÜuW™™§ÉĪ~T!³råa.< Ąłó<˜ČƒVž”äē§Ź²įįNvīüœ““‹tt詮ޢØčzčtĄÜC…rUDG+ hmķ!`×®»V¼¶Ö"’æ©ÉD~žx9ævm1RF=lŲp­Vņ?)) ̜Y-×·µ…ŃÜl”óēxüńžÕž0”ŽGżQJźLĄ`péó¾`·ėxūķÉ$&6c6;ØÆ§«Kā8// »]Š«ćĒ×3gN $Õķä~‚aĈ.¹o€’’Ń'ØQ!Ŗ/Cž~ĄGĄ¶m“Ø«H‘Įē­½^ ēĪYp:E¶mK—ŪłVß'ļõė§2~MM¦ĄÉ ^ž|ņ„œļģŌ1sę?Ų“éÜī˻שnåļZZĀhk3°ysf³“œœRL¦nY¦¶ÖĀĒß!tĒæ2wīOrżģŁ•¼ōŅ1ÅcIOšņr[Ąų7~Åĉå¼Ó)²bÅtęĢyŒövƒZu.g(żĄīŻwŅŲ(­ÖĖ/Ćf»D||«\ßŌd"//MĪÆ][p¼Ž²å?äåż[AÜŁ³QĢž­š3 ‘|ųš<õŌ÷ŠņneéŅÕŖse&ÕɇJ^ł†:yķµ£ŒŻC@MM$Ēß ĄŲ±æńČ#ĮŌ²eßQZś.IIĶrYmm$›6eČŻ¼÷Ž~ žEX˜K.ß³g%%£UésE;@R.€åĖČ2!”E–ٽūN¼^iÉ׬)ABß,o»­‘ĀĀ*ŹŽ‰)Ÿ•UNnn‘¢ģčѾϽqE>Ąg£11ķ¼šĀq¹|ōčN’dƌi`޼ņ~ū5ŖQ <†‡BLL»"ļ#{ Pu€ĄÓ ĄźÕ% ūõ7‚­ž“i‹3¦É“Ļ×Jw·ČÖ­Qxō1cØ«ĮŌ©‹Y° ŒŌŌzFźąāŬZ5MŃgJJƒ*}.ƒ„LJję駕”Ģ€“µēĻW®ž‰7qš`"&²mŪ¤ c ‚—%K$g—ŸŸŹéÓVÖ­›rnńń­ŠƒÓ@pENą7”Ó)ÆĪ½wĄźÕ‡¶õūļO /čtn¶nżB¾lõ'o³]bß¾łĪ0PØŽ7ŻŌAV–“š‘‘Ž€‹H”jńāŲķ:ĀƝŠćŖk֔”ŌLqqVš›ĆE/11ķLž\ĖŅ„’åöŪeł}ū Ų»wß~{3gĻFŅÜl$<ÜIrņļ̚u†œœR¢¢:ÕŖųMŠķvc·Ūńzēń…ź‡"Ŗ«µ,[6…ŒŒ 222HIIĮjµ¢×믒.pĶ Ś ŚŪį×_”­ ¬V)™ļKŖ”Š€ŅRČŹ ]Ÿ› sē–/ZGŽo“_¼®¼vī„ĀBج”>ˆų Ń@j*<š¼ų"DGX TąpĄĻ?‡®oo^^Wŗ(–uvĀņå°};xB ½^8qBJ[¶Hä?ūlßó†!g<ü0õ/ėƒŻĻ=ĶͰj•ŗń†œÜøQņžX»Žė_ĪCŠ€¶6Ų¼łņŪ{<šÖ[źŚ )ŠŠ$ūQ„3`śō¾ūųź«Š}Ɛ" ,šÄ,cÓ&‰ /æ„W^ -ēpĄ¹ssH*Šhµ°dIO~Ź”¾ūŃŖpķW5 ¬_[·–WU ¬}n.,^ ÅÅR:|ĄbHæŸΟ݇Į±±ŸóU% ¦FJ— A7©©ŅįĘė…„ļ•ß?łč£Š}̘!‘0P ¹s€?4;VJ>ĄŃ£”Ū¼śŖŗ1†”čUUšĢ3”ėŸxī½W]ŸĆ†€ŚZø’~é“ ÷Ü;vØļ÷Ŗš€Ł z}`yGt«ūR„@Ydf†o™™°w/„…Æļ Wulßæ’˜ś [}aļ^øūīąŹ šĪ;°’å_‡¬ “¶Ā²ešŲcpéR`}f¦t]^±BŠ—‹!¤?‚€•+”¾>°^«…œ˜0>ū œNhiQ~+XøʍŲxCŽ€Y³ś¾ ŗ\—×wéé'`ș@Eş;ސ#ąĻĘu{ƒ UNpŅ$)®‡‚ټüÓOC„z‡°“'C(BĶ#T ÕBT”Śé@xųĄe-–že®&®Šh4rņĒ5A€F£Q<’č÷Ɍ ““, Ŗ*‘3gĪšĖ/æČfī¹Rż”ŃhE'‹Å‚Łl–~ö{2@€ļ%…Ū=™ęęhΟ’ŖŖJp8Ćź hµZ"""ˆcäȑ˜Ķft:¼‚ Š"&“ ›ĶFrr2&“‰¶¶6ÅCƒįŸ.F£«ÕJ\\QQQņ.€&ąk4räHDQÄf³Ék?Ü :³ŁŒÅbĮb±`0d‚¾óz½ø\.ŗ»»éźźĀétāv»‡•żū ?ŽŅj1 čõzt:ģ‚=Og|i8mż`ANž‘ $ |d0Ü öjś!ąZĄ’6ƒėŗM<µIEND®B`‚libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-foreign/000077500000000000000000000000001357643561300312635ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-foreign/CMakeLists.txt000066400000000000000000000056031357643561300340270ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-eventlib-foreign) set(SRCS minimal-http-server-eventlib-foreign.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(LWS_WITH_LIBUV)\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" LWS_WITH_LIBUV) CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(LWS_WITH_LIBEVENT)\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" LWS_WITH_LIBEVENT) CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(LWS_WITH_LIBEV)\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" LWS_WITH_LIBEV) if (LWS_WITH_LIBUV) set(extralibs ${extralibs} uv) endif() if (LWS_WITH_LIBEVENT) set(extralibs ${extralibs} event) endif() if (LWS_WITH_LIBEV) set(extralibs ${extralibs} ev) endif() message("Extra libs: ${extralibs}") if (NOT LWS_WITH_LIBUV AND NOT LWS_WITH_LIBEVENT AND NOT LWS_WITH_LIBEV) set(requirements 0) endif() if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${extralibs}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${extralibs}) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-foreign/README.md000066400000000000000000000041411357643561300325420ustar00rootroot00000000000000# lws minimal http server eventlib foreign Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 --uv|Use the libuv event library (lws must have been configured with `-DLWS_WITH_LIBUV=1`) --event|Use the libevent library (lws must have been configured with `-DLWS_WITH_LIBEVENT=1`) --ev|Use the libev event library (lws must have been configured with `-DLWS_WITH_LIBEV=1`) Notice libevent and libev cannot coexist in the one library. But all the other combinations are OK. x|libuv|libevent|libev ---|---|---|--- libuv|-|OK|OK libevent|OK|-|no libev|OK|no|- This demonstrates having lws take part in a libuv loop owned by something else, with its own objects running in the loop. Lws can join the loop, and clean up perfectly after itself without leaving anything behind or making trouble in the larger loop, which does not need to stop during lws creation or destruction. First the foreign loop is created with a 1s timer, and runs alone for 5s. Then the lws context is created inside the timer callback and runs for 10s... during this period you can visit http://localhost:7681 for normal lws service using the foreign loop. After the 10s are up, the lws context is destroyed inside the foreign loop timer. The foreign loop runs alone again for a further 5s and then exits itself. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-eventlib-foreign [2018/03/29 12:19:31:3480] USER: LWS minimal http server eventlib + foreign loop | visit http://localhost:7681 [2018/03/29 12:19:31:3724] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/29 12:19:31:3804] NOTICE: Using foreign event loop... [2018/03/29 12:19:31:3938] USER: Foreign 1Hz timer [2018/03/29 12:19:32:4011] USER: Foreign 1Hz timer [2018/03/29 12:19:33:4024] USER: Foreign 1Hz timer ^C[2018/03/29 12:19:33:8868] NOTICE: Signal 2 caught, exiting... [2018/03/29 12:19:33:8963] USER: main: starting exit cleanup... [2018/03/29 12:19:33:9064] USER: main: lws context destroyed: cleaning the foreign loop [2018/03/29 12:19:33:9108] USER: main: exiting... ``` Visit http://localhost:7681 localhost-100y.cert000066400000000000000000000040721357643561300345450ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-foreign-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- localhost-100y.key000066400000000000000000000063101357643561300343750ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-foreign-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-eventlib-foreign.c000066400000000000000000000243741357643561300405260ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-foreign/* * lws-minimal-http-server-eventlib-foreign * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws that * uses a libuv event loop created outside lws. It shows how lws can * participate in someone else's event loop and clean up after itself. * * You choose the event loop to work with at runtime, by giving the * --uv, --event or --ev switch. Lws has to have been configured to build the * selected event lib support. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include struct lws_context_creation_info info; static struct lws_context *context; static int lifetime = 5, reported; static void foreign_timer_service(void *foreign_loop); enum { TEST_STATE_CREATE_LWS_CONTEXT, TEST_STATE_DESTROY_LWS_CONTEXT, TEST_STATE_EXIT }; static int sequence = TEST_STATE_CREATE_LWS_CONTEXT; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; static void signal_cb(int signum) { lwsl_notice("Signal %d caught, exiting...\n", signum); switch (signum) { case SIGTERM: case SIGINT: break; default: break; } lws_context_destroy(context); } /* * The event-loop specific foreign loop code, one set for each event loop lib * * Only the code in this section is specific to the event library used. */ #if defined(LWS_WITH_LIBUV) static uv_loop_t loop_uv; static uv_timer_t timer_outer_uv; static uv_signal_t sighandler_uv; static void timer_cb_uv(uv_timer_t *t) { foreign_timer_service(&loop_uv); } static void signal_cb_uv(uv_signal_t *watcher, int signum) { signal_cb(signum); } static void foreign_event_loop_init_and_run_libuv(void) { /* we create and start our "foreign loop" */ #if (UV_VERSION_MAJOR > 0) // Travis... uv_loop_init(&loop_uv); #endif uv_signal_init(&loop_uv, &sighandler_uv); uv_signal_start(&sighandler_uv, signal_cb_uv, SIGINT); uv_timer_init(&loop_uv, &timer_outer_uv); #if (UV_VERSION_MAJOR > 0) // Travis... uv_timer_start(&timer_outer_uv, timer_cb_uv, 0, 1000); #else (void)timer_cb_uv; #endif uv_run(&loop_uv, UV_RUN_DEFAULT); } static void foreign_event_loop_stop_libuv(void) { uv_stop(&loop_uv); } static void foreign_event_loop_cleanup_libuv(void) { /* cleanup the foreign loop assets */ uv_timer_stop(&timer_outer_uv); uv_close((uv_handle_t*)&timer_outer_uv, NULL); uv_signal_stop(&sighandler_uv); uv_close((uv_handle_t *)&sighandler_uv, NULL); uv_run(&loop_uv, UV_RUN_DEFAULT); #if (UV_VERSION_MAJOR > 0) // Travis... uv_loop_close(&loop_uv); #endif } #endif #if defined(LWS_WITH_LIBEVENT) static struct event_base *loop_event; static struct event *timer_outer_event; static struct event *sighandler_event; static void timer_cb_event(int fd, short event, void *arg) { foreign_timer_service(loop_event); } static void signal_cb_event(int fd, short event, void *arg) { signal_cb((int)(lws_intptr_t)arg); } static void foreign_event_loop_init_and_run_libevent(void) { struct timeval tv; /* we create and start our "foreign loop" */ tv.tv_sec = 1; tv.tv_usec = 0; loop_event = event_base_new(); sighandler_event = evsignal_new(loop_event, SIGINT, signal_cb_event, (void*)SIGINT); timer_outer_event = event_new(loop_event, -1, EV_PERSIST, timer_cb_event, NULL); //evtimer_new(loop_event, timer_cb_event, NULL); evtimer_add(timer_outer_event, &tv); event_base_loop(loop_event, 0); } static void foreign_event_loop_stop_libevent(void) { event_base_loopexit(loop_event, NULL); } static void foreign_event_loop_cleanup_libevent(void) { /* cleanup the foreign loop assets */ evtimer_del(timer_outer_event); event_free(timer_outer_event); evsignal_del(sighandler_event); event_free(sighandler_event); event_base_loop(loop_event, 0); event_base_free(loop_event); } #endif #if defined(LWS_WITH_LIBEV) static struct ev_loop *loop_ev; static struct ev_timer timer_outer_ev; static struct ev_signal sighandler_ev; static void timer_cb_ev(struct ev_loop *loop, struct ev_timer *watcher, int revents) { foreign_timer_service(loop_ev); } static void signal_cb_ev(struct ev_loop *loop, struct ev_signal *watcher, int revents) { signal_cb(watcher->signum); } static void foreign_event_loop_init_and_run_libev(void) { /* we create and start our "foreign loop" */ loop_ev = ev_loop_new(0); ev_signal_init(&sighandler_ev, signal_cb_ev, SIGINT); ev_signal_start(loop_ev, &sighandler_ev); ev_timer_init(&timer_outer_ev, timer_cb_ev, 0, 1); ev_timer_start(loop_ev, &timer_outer_ev); ev_run(loop_ev, 0); } static void foreign_event_loop_stop_libev(void) { ev_break(loop_ev, EVBREAK_ALL); } static void foreign_event_loop_cleanup_libev(void) { /* cleanup the foreign loop assets */ ev_timer_stop(loop_ev, &timer_outer_ev); ev_signal_stop(loop_ev, &sighandler_ev); ev_run(loop_ev, UV_RUN_DEFAULT); ev_loop_destroy(loop_ev); } #endif /* this is called at 1Hz using a foreign loop timer */ static void foreign_timer_service(void *foreign_loop) { void *foreign_loops[1]; lwsl_user("Foreign 1Hz timer\n"); if (sequence == TEST_STATE_EXIT && !context && !reported) { /* * at this point the lws_context_destroy() we did earlier * has completed and the entire context is wholly destroyed */ lwsl_user("lws_destroy_context() done, continuing for 5s\n"); reported = 1; } if (--lifetime) return; switch (sequence++) { case TEST_STATE_CREATE_LWS_CONTEXT: /* this only has to exist for the duration of create context */ foreign_loops[0] = foreign_loop; info.foreign_loops = foreign_loops; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return; } lwsl_user("LWS Context created and will be active for 10s\n"); lifetime = 11; break; case TEST_STATE_DESTROY_LWS_CONTEXT: /* cleanup the lws part */ lwsl_user("Destroying lws context and continuing loop for 5s\n"); lws_context_destroy(context); lifetime = 6; break; case TEST_STATE_EXIT: lwsl_user("Deciding to exit foreign loop too\n"); #if defined(LWS_WITH_LIBUV) if (info.options & LWS_SERVER_OPTION_LIBUV) foreign_event_loop_stop_libuv(); #endif #if defined(LWS_WITH_LIBEVENT) if (info.options & LWS_SERVER_OPTION_LIBEVENT) foreign_event_loop_stop_libevent(); #endif #if defined(LWS_WITH_LIBEV) if (info.options & LWS_SERVER_OPTION_LIBEV) foreign_event_loop_stop_libev(); #endif break; default: break; } } int main(int argc, const char **argv) { const char *p; int logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server eventlib + foreign loop |" " visit http://localhost:7681\n"); /* * We prepare the info here, but don't use it until later in the * timer callback, to demonstrate the independence of the foreign loop * and lws. */ memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.pcontext = &context; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } if (lws_cmdline_option(argc, argv, "--uv")) info.options |= LWS_SERVER_OPTION_LIBUV; else if (lws_cmdline_option(argc, argv, "--event")) info.options |= LWS_SERVER_OPTION_LIBEVENT; else if (lws_cmdline_option(argc, argv, "--ev")) info.options |= LWS_SERVER_OPTION_LIBEV; else { lwsl_err("This app only makes sense when used\n"); lwsl_err(" with a foreign loop, --uv, --event, or --ev\n"); return 1; } lwsl_user(" This app creates a foreign event loop with a timer +\n"); lwsl_user(" signalhandler, and performs a test in three phases:\n"); lwsl_user("\n"); lwsl_user(" 1) 5s: Runs the loop with just the timer\n"); lwsl_user(" 2) 10s: create an lws context serving on localhost:7681\n"); lwsl_user(" using the same foreign loop. Destroy it after 10s.\n"); lwsl_user(" 3) 5s: Run the loop again with just the timer\n"); lwsl_user("\n"); lwsl_user(" Finally close only the timer and signalhandler and\n"); lwsl_user(" exit the loop cleanly\n"); lwsl_user("\n"); /* foreign loop specific startup and run */ #if defined(LWS_WITH_LIBUV) if (info.options & LWS_SERVER_OPTION_LIBUV) foreign_event_loop_init_and_run_libuv(); #endif #if defined(LWS_WITH_LIBEVENT) if (info.options & LWS_SERVER_OPTION_LIBEVENT) foreign_event_loop_init_and_run_libevent(); #endif #if defined(LWS_WITH_LIBEV) if (info.options & LWS_SERVER_OPTION_LIBEV) foreign_event_loop_init_and_run_libev(); #endif lws_context_destroy(context); /* foreign loop specific cleanup and exit */ #if defined(LWS_WITH_LIBUV) if (info.options & LWS_SERVER_OPTION_LIBUV) foreign_event_loop_cleanup_libuv(); #endif #if defined(LWS_WITH_LIBEVENT) if (info.options & LWS_SERVER_OPTION_LIBEVENT) foreign_event_loop_cleanup_libevent(); #endif #if defined(LWS_WITH_LIBEV) if (info.options & LWS_SERVER_OPTION_LIBEV) foreign_event_loop_cleanup_libev(); #endif lwsl_user("%s: exiting...\n", __func__); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-foreign/mount-origin/000077500000000000000000000000001357643561300337125ustar00rootroot00000000000000404.html000066400000000000000000000002271357643561300350310ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-foreign/mount-origin

404

Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761357643561300357660ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-foreign/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000006501357643561300356310ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-foreign/mount-origin
Hello from the minimal http server eventlib foreign loop example.
The timer messages in the console are coming from
a timer on the event library lib loop set up before the lws context
started using it. libwebsockets.org-logo.svg000066400000000000000000001403321357643561300407430ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-foreign/mount-origin strict-csp.svg000066400000000000000000000302361357643561300364530ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-foreign/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-smp/000077500000000000000000000000001357643561300304315ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-smp/CMakeLists.txt000066400000000000000000000045641357643561300332020ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckIncludeFile) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-eventlib-smp) set(SRCS minimal-http-server-eventlib-smp.c) MACRO(require_pthreads result) CHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H) if (NOT LWS_HAVE_PTHREAD_H) if (LWS_WITH_MINIMAL_EXAMPLES) set(result 0) else() message(FATAL_ERROR "threading support requires pthreads") endif() endif() ENDMACRO() # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared pthread) add_dependencies(${SAMP} websockets_shared pthread) else() target_link_libraries(${SAMP} websockets pthread) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-smp/README.md000066400000000000000000000017311357643561300317120ustar00rootroot00000000000000# lws minimal http server eventlib WARNING: this is under development, it's not stable. This demonstrates a minimal http server that can use any of the event libraries Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -t |Number of threads to use. --uv|Use the libuv event library (lws must have been configured with `-DLWS_WITH_LIBUV=1`) --event|Use the libevent library (lws must have been configured with `-DLWS_WITH_LIBEVENT=1`) --ev|Use the libev event library (lws must have been configured with `-DLWS_WITH_LIBEV=1`) ## build lilbwebsockets must have been built with `LWS_MAX_SMP` greater than 1 to use multiple threads. ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-eventlib-smp [2018/03/04 09:30:02:7986] USER: LWS minimal http server-eventlib | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 localhost-100y.cert000066400000000000000000000040721357643561300337130ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-smp-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-smp/localhost-100y.key000066400000000000000000000063101357643561300336220ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-eventlib-smp.c000066400000000000000000000104271357643561300370340ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-smp/* * lws-minimal-http-server-eventlib-smp * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http[s] server that can work with any of the * supported event loop backends, or the default poll() one. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include #include #define COUNT_THREADS 8 static struct lws_context *context; static volatile int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void *thread_service(void *threadid) { while (lws_service_tsi(context, 10000, (int)(lws_intptr_t)threadid) >= 0 && !interrupted) ; pthread_exit(NULL); return NULL; } void signal_cb(void *handle, int signum) { interrupted = 1; switch (signum) { case SIGTERM: case SIGINT: break; default: lwsl_err("%s: signal %d\n", __func__, signum); break; } lws_context_destroy(context); } void sigint_handler(int sig) { signal_cb(NULL, sig); } int main(int argc, const char **argv) { pthread_t pthread_service[COUNT_THREADS]; struct lws_context_creation_info info; const char *p; void *retval; int n, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server eventlib SMP | visit http://localhost:7681\n"); lwsl_user(" [-s (ssl)] [--uv (libuv)] [--ev (libev)] [--event (libevent)]\n"); lwsl_user("WARNING: Not stable, under development!\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.pcontext = &context; info.signal_cb = signal_cb; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if ((p = lws_cmdline_option(argc, argv, "-t"))) { info.count_threads = atoi(p); if (info.count_threads < 1 || info.count_threads > LWS_MAX_SMP) return 1; } else info.count_threads = COUNT_THREADS; if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } if (lws_cmdline_option(argc, argv, "--uv")) info.options |= LWS_SERVER_OPTION_LIBUV; else if (lws_cmdline_option(argc, argv, "--event")) info.options |= LWS_SERVER_OPTION_LIBEVENT; else if (lws_cmdline_option(argc, argv, "--ev")) info.options |= LWS_SERVER_OPTION_LIBEV; else signal(SIGINT, sigint_handler); context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } lwsl_notice(" Service threads: %d\n", lws_get_count_threads(context)); /* start all the service threads */ for (n = 0; n < lws_get_count_threads(context); n++) if (pthread_create(&pthread_service[n], NULL, thread_service, (void *)(lws_intptr_t)n)) lwsl_err("Failed to start service thread\n"); /* wait for all the service threads to exit */ while ((--n) >= 0) pthread_join(pthread_service[n], &retval); lwsl_notice("%s: calling external context destroy\n", __func__); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-smp/mount-origin/000077500000000000000000000000001357643561300330605ustar00rootroot00000000000000404.html000066400000000000000000000002271357643561300341770ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-smp/mount-origin

404

Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761357643561300351340ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-smp/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000005601357643561300347770ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-smp/mount-origin
Hello from the minimal http server event loop example.
You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000001403321357643561300401110ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-smp/mount-origin strict-csp.svg000066400000000000000000000302361357643561300356210ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-smp/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib/000077500000000000000000000000001357643561300276345ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib/CMakeLists.txt000066400000000000000000000040251357643561300323750ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-eventlib) set(SRCS minimal-http-server-eventlib.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib/README.md000066400000000000000000000014301357643561300311110ustar00rootroot00000000000000# lws minimal http server eventlib This demonstrates a minimal http server that can use any of the event libraries Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 --uv|Use the libuv event library (lws must have been configured with `-DLWS_WITH_LIBUV=1`) --event|Use the libevent library (lws must have been configured with `-DLWS_WITH_LIBEVENT=1`) --ev|Use the libev event library (lws must have been configured with `-DLWS_WITH_LIBEV=1`) ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-eventlib [2018/03/04 09:30:02:7986] USER: LWS minimal http server-eventlib | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib/localhost-100y.cert000066400000000000000000000040721357643561300331750ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib/localhost-100y.key000066400000000000000000000063101357643561300330250ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-eventlib.c000066400000000000000000000064201357643561300354400ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib/* * lws-minimal-http-server-eventlib * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http[s] server that can work with any of the * supported event loop backends, or the default poll() one. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include static struct lws_context *context; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void signal_cb(void *handle, int signum) { switch (signum) { case SIGTERM: case SIGINT: break; default: lwsl_err("%s: signal %d\n", __func__, signum); break; } lws_context_destroy(context); } void sigint_handler(int sig) { signal_cb(NULL, sig); } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server eventlib | visit http://localhost:7681\n"); lwsl_user(" [-s (ssl)] [--uv (libuv)] [--ev (libev)] [--event (libevent)]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.pcontext = &context; info.signal_cb = signal_cb; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } if (lws_cmdline_option(argc, argv, "--uv")) info.options |= LWS_SERVER_OPTION_LIBUV; else if (lws_cmdline_option(argc, argv, "--event")) info.options |= LWS_SERVER_OPTION_LIBEVENT; else if (lws_cmdline_option(argc, argv, "--ev")) info.options |= LWS_SERVER_OPTION_LIBEV; else signal(SIGINT, sigint_handler); context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (!lws_service(context, 0)) ; lwsl_info("calling external context destroy\n"); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib/mount-origin/000077500000000000000000000000001357643561300322635ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib/mount-origin/404.html000066400000000000000000000002271357643561300334610ustar00rootroot00000000000000

404

Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761357643561300343370ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000005601357643561300342020ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib/mount-origin
Hello from the minimal http server event loop example.
You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000001403321357643561300373140ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib/mount-origin strict-csp.svg000066400000000000000000000302361357643561300350240ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-get/000077500000000000000000000000001357643561300275445ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-get/CMakeLists.txt000066400000000000000000000040231357643561300323030ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-form-get) set(SRCS minimal-http-server-form-get.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-get/README.md000066400000000000000000000010641357643561300310240ustar00rootroot00000000000000# lws minimal http server form GET ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-form-get [2018/03/29 08:29:41:7044] USER: LWS minimal http server form GET | visit http://localhost:7681 [2018/03/29 08:29:41:7044] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/29 08:29:49:8601] USER: text1: (len 4) 'xxxx' [2018/03/29 08:29:49:8601] USER: send: (len 6) 'Submit' ``` Visit http://localhost:7681, submit the form. The form parameters are dumped to the log and you are redirected to a different page. minimal-http-server-form-get.c000066400000000000000000000074231357643561300352640ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-get/* * lws-minimal-http-server-form-get * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server that performs a form GET with a couple * of parameters. It dumps the parameters to the console log and redirects * to another page. */ #include #include #include static int interrupted; static const char * param_names[] = { "text1", "send" }; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { uint8_t buf[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; const char *val; int n; switch (reason) { case LWS_CALLBACK_HTTP: if (!lws_hdr_total_length(wsi, WSI_TOKEN_GET_URI)) /* not a GET */ break; lwsl_err("%s: %s\n", __func__, (const char *)in); if (strcmp((const char *)in, "/form1")) /* not our form URL */ break; /* we just dump the decoded things to the log */ for (n = 0; n < (int)LWS_ARRAY_SIZE(param_names); n++) { val = lws_get_urlarg_by_name(wsi, param_names[n], (char *)buf, sizeof(buf)); if (!val) lwsl_user("%s: undefined\n", param_names[n]); else lwsl_user("%s: (len %d) '%s'\n", param_names[n], (int)strlen((const char *)buf),buf); } /* * Our response is to redirect to a static page. We could * have generated a dynamic html page here instead. */ if (lws_http_redirect(wsi, HTTP_STATUS_MOVED_PERMANENTLY, (unsigned char *)"after-form1.html", 16, &p, end) < 0) return -1; break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "http", callback_http, 0, 0 }, { NULL, NULL, 0, 0 } /* terminator */ }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server GET | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.mounts = &mount; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-get/mount-origin/000077500000000000000000000000001357643561300321735ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-get/mount-origin/404.html000066400000000000000000000002261357643561300333700ustar00rootroot00000000000000

404

Sorry, that file doesn't exist. after-form1.html000066400000000000000000000003371357643561300351300ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-get/mount-origin
Thanks for posting the form. favicon.ico000066400000000000000000000025761357643561300342470ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-get/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000011371357643561300341130ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-get/mount-origin
Hello from the minimal http form GET example.

This is a static page served from ./mount-origin/index.html.

When you submit the form below, you will see the values of the
form parameters reported on the console log.

Type some text:

libwebsockets.org-logo.svg000066400000000000000000001403321357643561300372240ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-get/mount-origin strict-csp.svg000066400000000000000000000302361357643561300347340ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-get/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-file/000077500000000000000000000000001357643561300306675ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-file/CMakeLists.txt000066400000000000000000000040371357643561300334330ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-form-post-file) set(SRCS minimal-http-server-form-post-file.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-file/README.md000066400000000000000000000013451357643561300321510ustar00rootroot00000000000000# lws minimal http server form POST file ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-form-post-file [2018/03/29 09:58:30:8800] USER: LWS minimal http server POST file | visit http://localhost:7681 [2018/03/29 09:58:30:8800] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/29 09:58:45:3284] USER: file_upload_cb: upload done, written 2729 to wss-over-h2.png [2018/03/29 09:58:45:3284] USER: text1: (len 3) 'xxx' [2018/03/29 09:58:45:3284] USER: send: (len 6) 'Submit' ``` Visit http://localhost:7681, select a file to upload and submit the form. The file is uploaded and saved in the cwd, the form parameters are dumped to the log and you are redirected to a different page. minimal-http-server-form-post-file.c000066400000000000000000000150521357643561300375270ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-file/* * lws-minimal-http-server-form-post-file * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server that performs POST with a couple * of parameters and a file upload, all in multipart (mime) form mode. * It saves the uploaded file in the current directory, dumps the parameters to * the console log and redirects to another page. */ #include #include #include #include #include #include #include /* * Unlike ws, http is a stateless protocol. This pss only exists for the * duration of a single http transaction. With http/1.1 keep-alive and http/2, * that is unrelated to (shorter than) the lifetime of the network connection. */ struct pss { struct lws_spa *spa; /* lws helper decodes multipart form */ char filename[128]; /* the filename of the uploaded file */ unsigned long long file_length; /* the amount of bytes uploaded */ int fd; /* fd on file being saved */ }; static int interrupted; static const char * const param_names[] = { "text1", "send", }; enum enum_param_names { EPN_TEXT1, EPN_SEND, }; static int file_upload_cb(void *data, const char *name, const char *filename, char *buf, int len, enum lws_spa_fileupload_states state) { struct pss *pss = (struct pss *)data; switch (state) { case LWS_UFS_OPEN: /* take a copy of the provided filename */ lws_strncpy(pss->filename, filename, sizeof(pss->filename) - 1); /* remove any scary things like .. */ lws_filename_purify_inplace(pss->filename); /* open a file of that name for write in the cwd */ pss->fd = lws_open(pss->filename, O_CREAT | O_TRUNC | O_RDWR, 0600); if (pss->fd == -1) { lwsl_notice("Failed to open output file %s\n", pss->filename); return 1; } break; case LWS_UFS_FINAL_CONTENT: case LWS_UFS_CONTENT: if (len) { int n; pss->file_length += len; n = write(pss->fd, buf, len); if (n < len) { lwsl_notice("Problem writing file %d\n", errno); } } if (state == LWS_UFS_CONTENT) /* wasn't the last part of the file */ break; /* the file upload is completed */ lwsl_user("%s: upload done, written %lld to %s\n", __func__, pss->file_length, pss->filename); close(pss->fd); pss->fd = -1; break; case LWS_UFS_CLOSE: break; } return 0; } static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { uint8_t buf[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; struct pss *pss = (struct pss *)user; int n; switch (reason) { case LWS_CALLBACK_HTTP: /* * Manually report that our form target URL exists * * you can also do this by adding a mount for the form URL * to the protocol with type LWSMPRO_CALLBACK, then no need * to trap LWS_CALLBACK_HTTP. */ if (!strcmp((const char *)in, "/form1")) /* assertively allow it to exist in the URL space */ return 0; /* default to 404-ing the URL if not mounted */ break; case LWS_CALLBACK_HTTP_BODY: /* create the POST argument parser if not already existing */ if (!pss->spa) { pss->spa = lws_spa_create(wsi, param_names, LWS_ARRAY_SIZE(param_names), 1024, file_upload_cb, pss); if (!pss->spa) return -1; } /* let it parse the POST data */ if (lws_spa_process(pss->spa, in, (int)len)) return -1; break; case LWS_CALLBACK_HTTP_BODY_COMPLETION: /* inform the spa no more payload data coming */ lws_spa_finalize(pss->spa); /* we just dump the decoded things to the log */ for (n = 0; n < (int)LWS_ARRAY_SIZE(param_names); n++) { if (!lws_spa_get_string(pss->spa, n)) lwsl_user("%s: undefined\n", param_names[n]); else lwsl_user("%s: (len %d) '%s'\n", param_names[n], lws_spa_get_length(pss->spa, n), lws_spa_get_string(pss->spa, n)); } /* * Our response is to redirect to a static page. We could * have generated a dynamic html page here instead. */ if (lws_http_redirect(wsi, HTTP_STATUS_MOVED_PERMANENTLY, (unsigned char *)"after-form1.html", 16, &p, end) < 0) return -1; break; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: /* called when our wsi user_space is going to be destroyed */ if (pss->spa) { lws_spa_destroy(pss->spa); pss->spa = NULL; } break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "http", callback_http, sizeof(struct pss), 0 }, { NULL, NULL, 0, 0 } /* terminator */ }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server POST file | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.mounts = &mount; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-file/mount-origin/000077500000000000000000000000001357643561300333165ustar00rootroot00000000000000404.html000066400000000000000000000002261357643561300344340ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-file/mount-origin

404

Sorry, that file doesn't exist. after-form1.html000066400000000000000000000004631357643561300362530ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-file/mount-origin
Thanks for posting the form.

The file you uploaded should have been saved in the current directory. favicon.ico000066400000000000000000000025761357643561300353720ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-file/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000016021357643561300352330ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-file/mount-origin
Hello from the minimal http form POST file example.

This is a static page served from ./mount-origin/index.html.

When you POST the form below, you will see the values of the
form parameters reported on the console log, and the file will be uploaded and saved in the current working directory.

Type some text:


Select a file to upload:  

libwebsockets.org-logo.svg000066400000000000000000001403321357643561300403470ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-file/mount-origin strict-csp.svg000066400000000000000000000302361357643561300360570ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-file/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-lwsac/000077500000000000000000000000001357643561300310615ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-lwsac/CMakeLists.txt000066400000000000000000000040331357643561300336210ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-form-post-lwsac) set(SRCS minimal-http-server-form-post.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-lwsac/README.md000066400000000000000000000012051357643561300323360ustar00rootroot00000000000000# lws minimal http server form POST lwsac Shows how to parse the form using an lwsac to hold the form data ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-form-post-lwsac [2018/03/29 08:29:41:7044] USER: LWS minimal http server form POST | visit http://localhost:7681 [2018/03/29 08:29:41:7044] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/29 08:29:49:8601] USER: text1: (len 4) 'xxxx' [2018/03/29 08:29:49:8601] USER: send: (len 6) 'Submit' ``` Visit http://localhost:7681, submit the form. The form parameters are dumped to the log and you are redirected to a different page. localhost-100y.cert000066400000000000000000000040721357643561300343430ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-lwsac-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- localhost-100y.key000066400000000000000000000063101357643561300341730ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-lwsac-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-form-post.c000066400000000000000000000126751357643561300370140ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post-lwsac/* * lws-minimal-http-server-form-post-lwsac * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server that performs POST with a couple * of parameters. It dumps the parameters to the console log and redirects * to another page. */ #include #include #include /* * Unlike ws, http is a stateless protocol. This pss only exists for the * duration of a single http transaction. With http/1.1 keep-alive and http/2, * that is unrelated to (shorter than) the lifetime of the network connection. */ struct pss { struct lws_spa *spa; struct lwsac *ac; }; static int interrupted; static const char * const param_names[] = { "text1", "send", }; enum enum_param_names { EPN_TEXT1, EPN_SEND, }; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; uint8_t buf[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; int n; switch (reason) { case LWS_CALLBACK_HTTP: /* * Manually report that our form target URL exists * * you can also do this by adding a mount for the form URL * to the protocol with type LWSMPRO_CALLBACK, then no need * to trap LWS_CALLBACK_HTTP. */ if (!strcmp((const char *)in, "/form1")) /* assertively allow it to exist in the URL space */ return 0; /* default to 404-ing the URL if not mounted */ break; case LWS_CALLBACK_HTTP_BODY: /* create the POST argument parser if not already existing */ if (!pss->spa) { lws_spa_create_info_t i; memset(&i, 0, sizeof(i)); i.param_names = param_names; i.count_params = LWS_ARRAY_SIZE(param_names); i.ac = &pss->ac; i.ac_chunk_size = 512; pss->spa = lws_spa_create_via_info(wsi, &i); /* no file upload */ if (!pss->spa) return -1; } /* let it parse the POST data */ if (lws_spa_process(pss->spa, in, (int)len)) return -1; break; case LWS_CALLBACK_HTTP_BODY_COMPLETION: /* inform the spa no more payload data coming */ lwsl_user("LWS_CALLBACK_HTTP_BODY_COMPLETION\n"); lws_spa_finalize(pss->spa); /* we just dump the decoded things to the log */ for (n = 0; n < (int)LWS_ARRAY_SIZE(param_names); n++) { if (!lws_spa_get_string(pss->spa, n)) lwsl_user("%s: undefined\n", param_names[n]); else lwsl_user("%s: (len %d) '%s'\n", param_names[n], lws_spa_get_length(pss->spa, n), lws_spa_get_string(pss->spa, n)); } lwsac_free(&pss->ac); /* * Our response is to redirect to a static page. We could * have generated a dynamic html page here instead. */ if (lws_http_redirect(wsi, HTTP_STATUS_MOVED_PERMANENTLY, (unsigned char *)"after-form1.html", 16, &p, end) < 0) return -1; break; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: /* called when our wsi user_space is going to be destroyed */ if (pss->spa) { lws_spa_destroy(pss->spa); pss->spa = NULL; } lwsac_free(&pss->ac); break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "http", callback_http, sizeof(struct pss), 0 }, { NULL, NULL, 0, 0 } /* terminator */ }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server POST | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.mounts = &mount; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post/000077500000000000000000000000001357643561300277525ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post/CMakeLists.txt000066400000000000000000000040251357643561300325130ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-form-post) set(SRCS minimal-http-server-form-post.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post/README.md000066400000000000000000000010671357643561300312350ustar00rootroot00000000000000# lws minimal http server form POST ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-form-post [2018/03/29 08:29:41:7044] USER: LWS minimal http server form POST | visit http://localhost:7681 [2018/03/29 08:29:41:7044] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/29 08:29:49:8601] USER: text1: (len 4) 'xxxx' [2018/03/29 08:29:49:8601] USER: send: (len 6) 'Submit' ``` Visit http://localhost:7681, submit the form. The form parameters are dumped to the log and you are redirected to a different page. libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post/localhost-100y.cert000066400000000000000000000040721357643561300333130ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post/localhost-100y.key000066400000000000000000000063101357643561300331430ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-form-post.c000066400000000000000000000123621357643561300356760ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post/* * lws-minimal-http-server-form-post * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server that performs POST with a couple * of parameters. It dumps the parameters to the console log and redirects * to another page. */ #include #include #include /* * Unlike ws, http is a stateless protocol. This pss only exists for the * duration of a single http transaction. With http/1.1 keep-alive and http/2, * that is unrelated to (shorter than) the lifetime of the network connection. */ struct pss { struct lws_spa *spa; }; static int interrupted; static const char * const param_names[] = { "text1", "send", }; enum enum_param_names { EPN_TEXT1, EPN_SEND, }; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; uint8_t buf[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; int n; switch (reason) { case LWS_CALLBACK_HTTP: /* * Manually report that our form target URL exists * * you can also do this by adding a mount for the form URL * to the protocol with type LWSMPRO_CALLBACK, then no need * to trap LWS_CALLBACK_HTTP. */ if (!strcmp((const char *)in, "/form1")) /* assertively allow it to exist in the URL space */ return 0; /* default to 404-ing the URL if not mounted */ break; case LWS_CALLBACK_HTTP_BODY: /* create the POST argument parser if not already existing */ if (!pss->spa) { pss->spa = lws_spa_create(wsi, param_names, LWS_ARRAY_SIZE(param_names), 1024, NULL, NULL); /* no file upload */ if (!pss->spa) return -1; } /* let it parse the POST data */ if (lws_spa_process(pss->spa, in, (int)len)) return -1; break; case LWS_CALLBACK_HTTP_BODY_COMPLETION: /* inform the spa no more payload data coming */ lwsl_user("LWS_CALLBACK_HTTP_BODY_COMPLETION\n"); lws_spa_finalize(pss->spa); /* we just dump the decoded things to the log */ for (n = 0; n < (int)LWS_ARRAY_SIZE(param_names); n++) { if (!lws_spa_get_string(pss->spa, n)) lwsl_user("%s: undefined\n", param_names[n]); else lwsl_user("%s: (len %d) '%s'\n", param_names[n], lws_spa_get_length(pss->spa, n), lws_spa_get_string(pss->spa, n)); } /* * Our response is to redirect to a static page. We could * have generated a dynamic html page here instead. */ if (lws_http_redirect(wsi, HTTP_STATUS_MOVED_PERMANENTLY, (unsigned char *)"after-form1.html", 16, &p, end) < 0) return -1; break; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: /* called when our wsi user_space is going to be destroyed */ if (pss->spa) { lws_spa_destroy(pss->spa); pss->spa = NULL; } break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "http", callback_http, sizeof(struct pss), 0 }, { NULL, NULL, 0, 0 } /* terminator */ }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server POST | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.mounts = &mount; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post/mount-origin/000077500000000000000000000000001357643561300324015ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post/mount-origin/404.html000066400000000000000000000002261357643561300335760ustar00rootroot00000000000000

404

Sorry, that file doesn't exist. after-form1.html000066400000000000000000000003371357643561300353360ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post/mount-origin
Thanks for posting the form. favicon.ico000066400000000000000000000025761357643561300344550ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000011341357643561300343160ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post/mount-origin
Hello from the minimal http POST example.

This is a static page served from ./mount-origin/index.html.

When you POST the form below, you will see the values of the
form parameters reported on the console log.

Type some text:

libwebsockets.org-logo.svg000066400000000000000000001403321357643561300374320ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post/mount-origin strict-csp.svg000066400000000000000000000302361357643561300351420ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-form-post/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-fulltext-search/000077500000000000000000000000001357643561300311365ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-fulltext-search/CMakeLists.txt000066400000000000000000000041531357643561300337010ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-fulltext-search) set(SRCS minimal-http-server.c) include_directories(../../../plugins) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_FTS 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-fulltext-search/README.md000066400000000000000000000005011357643561300324110ustar00rootroot00000000000000# lws minimal http server ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server [2018/03/04 09:30:02:7986] USER: LWS minimal http server | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-fulltext-search/lws-fts.index000066400000000000000000012115411357643561300335730ustar00rootroot00000000000000Źz_uaāŠČ#±NBFE0#)*+J6  CFC IF#?C$G*IFGGHD=IAIFBDHFDIHG:*) HHB&EGIHFBHHGBH@CG/CGGDFAFFFFHEGHHIID*IGFFFGIID7H.<>EHBHHFIHIHIGFEFIEGI7IGDAIHFHECEIEEH >’Š;IDDEIGEBEIHGIIHFF/FDCCG"HEEFCI@3II@B*HHIIFH4HJICIIFH:BIIEG D:CHGFGFFDIIGIEF> |IHIIDHIFI A FG!G@CEIHEE?FCGG?HH=G/G>?I:(IHGIHIFHŠČ*‹@D-FHICHGE>GHHEAH.HF GEHEFHGIBGHHGACFIHG>HHHIHFIFGIGH+:IIFHFI!>GGIGDDHJAIGHE(HGG>GFFEHGIBIGCAC@CAIIFEGEGII'FH GFDFIIDID;EGHEDHHIAHI*6FHHAFAGG%!"G :HF!GF@FDHCHI/91ę IDG/8GCGI=FHHEC#HFFI8IFI:I HEHCF6DŸ— \FFECB0G II.I@HD2G8HBIG2EBH"CIH2)IIHCBJAGE G9HIEFHHFEHIHGGFICFEHFGGBHDEHI?IHGAIFHGFD?EI>IDEGFIEFCAFIEF.GFD E>HIHHFHI9G;GFEFš’ØHFH7IHC,GFIF3EEHDIGCIFECHE?IFDEEHHEFDECIGGBF$1I"FEIDFDHAFDIAHBFDGFIHFHGGBHIGGGFEHGGHIHEHGHHHIDFIFFGEIEGIF BD F!IH$G9IG>6 īBIHECIHGBH;HFGE?D:HC 2HC'DFEHEIGEAHIAIGGAŠČ!ÄGFE!EDH3D1GH+!.FIIFIHG DA8EI4IIGFFEIFIFI0IFCFGICF9G ,<8GEI7EIFGGE7HFFFG I HIDDIFGIIHGHGE DFB1EDFGG3GIG@I*H2EE0BFGBF2G6H* E(HIHAG=vnRE()I*"GCI$GGC>E. EGHHEFIDDIEAEGFGDHDFIGHFCF6IJCFDFFHIIIAF6HIGHHJEFFEDIbZ+F@GECIFGIEHGGEFIIH1FIEIIIEFIEI)CGHIFHHEE6GG#$3=G GII%@A GF7DGHF."HŠČ) FFEH?!AF;FAGBDIFIGEFFHHIEHHGGFGDIGHHEAHCHGAGECHH@IGHCHFE@IHIIBGIDIGCICEGGGIFIIDCHIIHFD.BB GA<F6HDIBHGG CABCC0H@I ,BIFJE9GEC=F7HG%A9FICEIIFGF6BGFCFFH!F0DD,$×IBIIFD 'DG3HEE(;II FI $E1¬¤ĻGGIABIEEIHCGIIIHDIEHBFHI1GEEIGFDHFI0GIGI5<HIHFDGDE1JGIFGCDG0EI6ECH&DFIIG HH?IHIGEIEEGHIDFFFCH HH(GGCFFH@</DIEC?³«! HIAGFIIHFI@HIHHDIH>HHGDIBICBFH=EI $"H4EH=0C /AH@FIGGEIADIJDFBH&2&EDGGGIIIIEHIDFIEHHGB@DHGHBIIEIGEFIF*A$GHDGEFEGEIIGE=I/DEG$%‡GIIFHHHFI@HFGBBHGCIIIDEIHEHŠČ%mGGHIIDIFGGFHCEGEHIFGFG21<I-3G&IG8EGF)G!FDDIB2FIFGE@@GECBFD HGDHHCEFGCII*EDGI&HEHIHBCHFGBGF@CF HIIGI EG GE$HIH5A& EFFIEIHGD HGHH(;F@GGGHI*FG7!CC\TID GIIECIHFI I?HDGEGFHH??ECEEEEEGDFI@@DIEDIHGHHGHHIHCG9HEGHEDCIGBGI0HED|t?FIGF&DFFGGCIHGHIFIEII@HGG$IHEHDGICBIIHFADDGDEIG'IEF GGIHBHD9H*FIEEADGFGHDHIIEH!@IFIHC$IAGIÉĮ'¢GHIGIGEGFEGEIIHCI)B!FHFIFCHC?IAECHGGG25>CEGFAI#HHGEEHFEIIIIICIDDHB) IEGAIE.CHIHC ‡ĶGE&IGIEI.BGCGDGHCGFBFHEE& BI'IDGFGH $4H CHIIIF/HI&F? GEG@HEE8FH DGF@IIHEIDFHEGHFDA?GB9IDDHHIHGFGG@IIAÜICIIG@GHDHK*EIIFIIGGEGGFI@@BFIIIDDFIIIHIIGDC@/D*CG;IEEŠČ(l,DG:HF-IG:DHG IHDIGEIHGHIH"GH6GIDI-;EI9HAC?EIGFEE6HBG+D GHCIGEHDIHI"/0I'GHB%BEGIAHGE(GGIIFH@HHIIFEHCEEEBHD IGHHGDHGCHFHGIFBC<DBEIGIIFGAIGHFGFFAGEIFEHIE1)ŃGHDIDGFDIGHIIGH;E940:2CII;GEFHHGF§Ÿ ļFI308GG=!.04926GHDGGBHFA?CB,A-HDB GGFHHE?@IGCEFIHI;F3HH>GIF GGFG GBFIHHI!'EHDF%EBHEIHHIDIDFFHGHHIDFGEIHFGEF5HHICEGHHHDGGIFGICކ&FIFE+A GGIFFFIFIEGHHIEGBBIDGH!GFFFGICGEC=IFEHEHCHGGGGDFHIGH:EDIGGJEDHHICHIHGHHCGG?D;EIIGFG6GEIDCGBCIFGFGCGCGF IHFICJBFEEDCGFGIG0FBID@GIGGFGHHIHIC@FHHDGHHHHGE?A IEFHAH;;%ŠČ(AFHGGHDFFAFEIF$ABCFI<GHI?G HF7DGIIHIIDHEHHHIIEAGGHCHHIHFGE HHFCFII@F+HIEIFIGDHHCFGDHIGGHGI,DF2EHIDHD-0HDF 8IEDG BEEGA I*I2DGG/I1HF)EEH EF?FHIDIHHF2EBG7H/' ØBIGGEFH?0IKIF@DIEIIHAFEEDGHEFEHGHHH©”$¢FFCIFHFCGGCGHIBFGEIIEHFGGFE'HHHEHHGH$@EGGGGGACFGEHFGHECIIHEGA3DGHIAFDGEHGGIIGFIIEIFGEGEBFCEFIFH1HIFFFF&2EEAHIIHHHH5HGHHHCHIDHAIGGB&CE‡GHFG1FEG>H*+EGAH7HFC:IFIGH@ŃEFDHIHJGHGFIFFDGHHGIJC'FIDGBDIFG7CHDIFHIDIFFHBG;EAECFGHIHDEEHFEEFDDIIAFEBEEAGGIIGIHDGIGEFHICHGBH8IGF@0ADA9EIEGIIGAIHFIIEGICHIEIFIEHHHHHIFHDFIGDIIHGGI>FGHFCGHIFHEI—$2IDEEHFF@CEFGFHEFE?FHA?EFKGDEDGCIHEFGHHGGB:GCFGIHGA?HHHGC7FIHFEFHBIFGE@DIGIAHGF.IBGHGFGGD)EIIB?IIDHKHGDHIID=IDEDBGIGCGDFIEGHGIDHEDIGIDyqĶFHEF@GFIFBIFEGHIGFDDCGDDCEFFFHGECIEIF?BFHFFHKFDGEGF<IBFEBHFBHFEEIGFGEGIGIGDFIIGFIIDDDICG0FHCIIG0 C.FGHH_Wé?G@DDG IEGFGEEGH;ICIHHB IEHEII IFF<FBCIBIHCEBHHHBGDGHEFEDH9I=BHFAIIŠČ,ˆHHHHGHHCAFFFIIDEFGGGIIII?GHCGIIHFIIFDDAIHGFIFIDCHDHGFIGHFFIFIIFHI-&FIEGFGHDGHDFIHIFFBGFHIIGFIGEG!E7IEFEHG@FFDIFD%HE#FH $E=1HFEGII!BFEHIGGIG&IHGG @IG.DG+BDEEHI0HHBHEFD ¤<H'D/H6Ž'GIFHE@HH?IAEHH-FHFEII6FEIFIJH!IEBHGG@FIEG%&%9GFE EIIGHGAIDFGH#HHHEFFH7E.HI6'F9DFFBIGEFIGIHGBFFDFI0IHHGGHHIDHIDHIHIGHEHIIGHIIFFHCGH7FCF!EFBI>GCHII‹ƒÆEHHG&GFCEFGF I6I F%"H@GF 4GDHI> DICJGGIEI?HC@FIEGEF=HHFHEIHHGHHGFFHDEFGGH#HEFIII6H?GHECHIC>!&/MEē&*('$%%GIHGHIHH''GHIDGH/HJFEEFHHFDJJHBDD=FI=DHEIIFFDIEE?GŠČ'ūFFFGGHFEHDCCHEHIGECFG IGIIIEHGDBIGF I $HE0HI$8IDDGG)EEH,EGHIHF2HBE.HHHEFFGBIHI!1IGEF F*HHFIIIHEGGFIHGF ICFACGGCIFIBGIC!?AHGDGFI8HDIE H:HECBEEEHI@BFHEHH=5 EFJFH1CFIIGI.(F 0A+DCFHIE4FIHEGIG75›“ÕEEIGDFCII:EGAFGI33II4H DEH 3IGHGEGDDI@FBFICEH=CGIC DDDHB0F@GGHFI GH HAAEGIHGCHGDHFEDIEI,IHFGEIB>DDCEHFHIIHDGŠČ#EDIHHDI?FHEAHF=HFG>IF#GB-GFIHGGJD CHGII"FICIGBHIF%EJ!@BHG8-IH$E?GD B?HGFCH$EIIA2GIGIFEGI5))GEG@GE$GCC3IG-CIHCFH<H9II E)EG HI)EBGFII<@GIŠČ'¤I!E H6H1.!GECEFH0IF,F8HICHGFB.GGFHGCF:EFFEIHHDHHGG3FCEIIEI,EFFFIFFIDEDIHGGI IGBH'HFIE?IIG HIEC!IIHIBICHHCIHI(FGFIHICIA(GEGGE,IDHBII2@GDIDHD0FFIFGHDGIކ6DFDHF5GFHEDCIEFIIIIFGECDHFIFGBHBFGEBGFH!CFAEF;&H#GFI'IFIDIHGEF?<GCF D 2EGGEEI8GGFGED/F G(HGJB GG 1C*FIEHFHIDGHH>HIIDGFGED9GIGFHC DIH: :*GGEIIE!I$GGŠČRIE?IIGE GGF>IIHHIG)IAHC E=GF IGHEG GHGIHHHF I GIH1IE HF CIIGGHF>GHGHH*FHJEHDIGCFDJCGEI33,6H3C*#2I-BJFIIF1GG-1'D=(JI;%0!&:.“¬–  *1<3F 3AEF GI:HI:HHH%FIGIGCHFGHGHD H DHBA1"+EF6G)C?->6!'* &2/IFI7,ID8((+:IH$IHGDHEDGG&D*DGEH" ŠČ(°IAICIICHIHAGIGEHAACIGH(IBGIGHGFFFIEEFFGCGEEHEHDD1GFEE@FFD 0EE FDHIEGICFG>IGFIH7;GFF HIEHHHDDEII7G5#EFDEFGFHIFGADGKIGIEC?I.EIHHG>GIFH9IID9CHEGJFFFC HCB„|±HDHFHBE*FHGGI IIEIB?DG#F7DIFE@>BI8F$G33*$)!GC(/DIDFFH5IIEHHIFGIFC&A/&ETL LIHDF>FH F%EGIG FGGG HCGIIIG1HGGFEGICH HFGFD G=ŠČ*d HE@HEDFCGHHIHFCHFD?FICGED&CAFGIGFDHCIHHD(@HCEGG<G6BIIGEIIEGFC9HEHGGHHGDGBHF1IEHGIGHFGEBEFEADFGEGIH+IHAE(GFDF GDGGEHIFIHHGFFFF-EF: HIGCIGGFGBIEG&IDIIEHHFIFCHBHFEG'GG„|dDACIGBIEDFFIFH*HEIHEHHFHHFIHDECIFIGF/IFGGCIBGICIIDHIHDEGDIDFHIDAGIEIHEBGEF8GEFHEEGFCHHFGFEG?EGIFGIII3F$EG8FDTL ūGD=IEDGG"GH:D+6BDFDDFCBAHEDAHD9$9CFCI= JAHDGIIBFEŠČ,šBFHDHDIII"KFHBJKFHDFKJFEDIJJEFCHD DJJIGFBFE0JIIHFIHDDIHIICIIF>H?GCDJJIDKHHEH*AD2DJEHFFAGCEFGF:FHC:EC"IFG>2JCEDE-HH:E@CGGDIEADACCB?GHG DHEGIHIHDJG#IHJ;AHJGGFFIBIIFHJIF:( @DBIDEAFBHGGGC6F CCDF:GC7PH CGCFAD%#BCAGFHECCAGDD>)GGH$EDDCEB>GIFEEDCE>J@CD=ÅHÅHÅGÅEÅAÅ8Å6Å5Å.Å.Å-Å*Å*Å)Å)Å(Å-Å(Å(Å&Å%Å%Å$Å$Å#ÅÅÅÅÅÅÅÅAÅÅÅÅÅÅÅ Å Å Å ÅÅÅHÅÅÅÅÅÅÅÅÅÅÅÅÅÅÄÅ*Å<Ä~Ä}Å#Ä}Ä|Ä|Ä{Ä{ÄÄ{Ä{ÄzÄzÅÄzÄ{Ä~ÅÅ)ÄzÄzÄyÄyÄyÄ|ÅÄxÄqÄmÄmÄoÄlÄlÄkÄjÄhÄfÄfÄeÄfÄeÄeÅÄeÅÄdÄ^Ä^Ä^Ä^Ä\Ä\Ä[Ä[ÄZÄYÄWÄVÄVÄTÄSÄSÄRÄÄRÄRÄPÄOÄOÄPÄRÄOÄNÄLÄLÄKÄNÄKÄLÄOÄGÄGÄCÄEÄBÄEÄ>Ä=Ä:Ä9Ä9Ä8Ä8Ä8Ä8Ä7Ä6Ä5Ä5Ä4Ä4Ä4Ä3Ä[Ä3Ä5Ä[Ä.Ä3Ä9ÄOÄ.Ä2ÄPÄRÄ.Ä5Ä,ÅÅÄ+Ä+Ä+Ä+Ä*Ä+Ä*ÄBÄFÄ*Ä)Ä)Ä(Ä&ÄgÄqÄ&Ä$Ä$Ä$Ä#ÄWÅÄ#ÄYÄgÄjÄjÅÅ8ÄÅ5ÄÅ5ÄÄ=ÄÄ=Ä_ÄÄ/Ä<ÄBÄI ÄÄ!Ä#Ä.Ä/Ä<ÄIÄJÄNÄVÄÄ ÄÄ Ä ÄÄgÄqÅÅÅÅÅÅ Å%Å(Å)Å,Å-Å/ÅFÄÄÄÄÄ3ÄÄÄÅ.ÄÅ&Å/Å/ÄÄÄÄ0Ä7ÄWÄĆÄĆÄQÄSĆ~ĆĆ}Ć}ÄÄĆuĆsÄĆqĆpĆoÄ ÄÄBÄjÄnĆoÄ Ä ĆnÅÅAÅEĆnÄrÅÅ,ÅAÅEĆmĆnÅĆmĆqĆmĆqĆkĆkĆjĆjĆjĆiĆiĆfĆcĆcĆ`Ć_Ć_Ć[Ć[ĆZĆ[ĆoÅ ĆSĆUĆZĆSÅÅÅ$ĆRĆQĆyÄDÄXĆPÄ4Ä[ÅĆOĆYĆ[Ć]ĆOĆXĆ\ĆnÄ|ĆNĆJĆFĆPÅÅ7ĆEĆEĆDĆBĆeĆAĆfÅĆ<ÄzÅÅ Ć;Å)Ć9Ć8Ć7Å,Ć7Ć6Ć3Ć2Ć2ĆlĆmĆrĆ1ĆSĆZĆwÄĆ/ÅÅÅ Å>Ć-ÄjÅÅ8Ć-Ć?Ć_Ć,Ć?Ć,Ć:Ć+Ć9ĆeĆuĆ+Ć9ĆvĆ*Ć*Ć5ÅÅĆ& Ć&ÄrÄ}ÅÅÅ Å!Å/ÅA Ć%ÄÄÄÄÄ0ÄnÄpÄuÄxÄ~ÅÅGĆ"Ć Ć%Ä_ÄyÄ|ĆÄ^Å ĆĆ#Ć?ĆAĆMĆSĆTĆUĆVĆXĆZĆZĆ_ĆcĆeĆiĆsĆuĆwĆwĆyÄ ÄĆÄAÄC ĆÄ ÄÄ/Ä<Ä>ÄCÄEÄFÄIĆĆTÄĆĆpĆĆĆoĆuĆyĆ}ĆÄĆĆĆĆĆĆĆ!Ć0Ć1Ć8ÄÄÄ2Ä7ÄPÄQÄQÄTÄYĆĆ ĆQĆ ÄÄÄbÄuÅÅ2Ć ÄmĆĆYÄÄZÄ]ÄdĆĆ.ĆĆ.ÄbÅĀ{ĀzĀ|ĀzĀyÅ;ĀyĀyÄ$ĀxĀxĀxĆ+Ć:ĀvĆĆÅĀuĀuĀzÅ8Å;Å>ÅGÅHĀuĀvĆ3ĆuĆyÄĀtĆ ĀsĀtĀ{ĆĆĆUÄÄÄ1Ä7ÄWĀsĆĀrĆĆĆĆĆĆĆĆ!Ć"Ć'Ć.ĆMĆXĆdĆdĆzÄÄÄ&Ä2Ä=ÄXÄZÄeÅ2Å69ĀrĀsĆĆ Ć ĆĆĆĆĆ!Ć"Ć'Ć.Ć/Ć0Ć3Ć;ĆBĆCĆMĆUĆXĆ\Ć_ĆaĆgĆlĆnĆrĆvĆzĆ~ÄÄ ÄÄÄÄÄ%Ä&Ä1Ä2ÄXÄZÄ]Ä_ÄbÄdÄkÄlÄoÅÅ2Å5Å8Å;ÅEĀrĆĆ+Ć9ĆvĆzÄ1ĀrĆ+Ć9ĆvĀqĀqĆ Å2ĀpĀuĆOĆTĆYĆ]ÄĀoĆĆcĆiĆlÄĀnĆ%Ć%Ć;ÄÄÄÄÄÄ0Ä6ÄVÄWÄnÄpÄrÄvÄxÄ{Ä~ÅÅÅÅÅGĀnĀpĆĆ&Ć5Ć6Ć<ĆOĆYĆ[Ć]Ä$Ä)Å=ĀnĀoĆ(Ć)Ć*Ć7Ć=ĆPÄNÅÅÅ#Å%Å* ĀnĀoĆ(Ć)Ć*Ć7Ć<ĆPÅÅ*ĀnĆ&ĀmĀmĀzĆ(Ć)ĆNÄ%ÅÅ< ĀmĀnĀrĀxĆĆĆĆĆ!Ć#Ć'Ć'Ć,Ć.Ć/Ć:Ć\ĆvĆzĆ~ÄÄÄÄÄ%Ä'ÄXÄZÄeÅÅ3Å6ĀmĆ+Ć:Ä%ĀkĀjĀhĀfÄrÄ}ÅÅÅ Å!Å/ĀfĆ ÄrÄ}ÅÅ!Å/ÅCĀeÄeĀeĆ`ĀeĆĆĆ0ĆEĆRĆaÄYĀdĀdĀUĀOĀNĀMĀLĀKĀIĀHĀGĀGĀ@Ā=Ā7Ā4Ā0ĀĀĀĀĀĀĀ Ā ĀĮ|ĮvĀĮsĮlĮgĮcĮcĮ_Į^ĮYĮWĮWĮUĮPĮLĮKĮIĮGĮ[ĮEĮDĮCĮBĮ7Į)Ć}Į!ĮĮĮĮĮĮĮĮ ĄyĄxĄxĄwĄwĄwĄsĄaĄaĄ_Ą_ĄXĄXĄWĄUĄMĄLĄHĄGĄFĄEĄDĄDĄBĄBĄ?Ą=Ą=ĄAĄ8Ą2ĄrĄ1Ą'Ą"Ą!Ą ĄĄĄĄĄĄĄĄĄÄxĄ Ą Ą Ąæ|æ|æ{æ{ĄWæ{æwæsæmælælælælækækæjæjædæcæaæaæUæWæSæSæSæOæHæ?æ=æ<æ8æ7æ,æ%æ#æææææææææææĮ1æææææ¾}¾|¾x¾v¾v¾u¾q¾p¾j¾fĮ1¾e¾tææĮv¾d¾_¾_¾_¾_¾^¾^¾U¾S¾R¾D¾/¾.¾-¾-¾,¾$¾$¾$¾#¾"¾ ¾¾¾¾¾¾¾¾¾"¾2¾8æ¾¾ ¾½x½t½r½p¾½p½l½j½g½b½]½\½\½[½Z½Y½V½SĀL½O½B½:½4½+½%½$½½ ½ ½½½¼~¼~¼~¼m¼m¼i¼f¼[Å&¼U¼R¼O¼I¼H¼H¼=¼;¼6¼6¼?¼H¼4¾¼.ĆAĆe¼%¼$¼"¼!¼!¼ ¼¼¼¼¼¼¼¼ ¼¼½¼¼¼¼ ¼½[¾9¼¼¼¼ ½¼¼¼¼»~»|¼¼:»|»|¼ ¼;»z»t»r»r»q¾»p»p¼»o»o»lÅ»l»l»k»kĄEÅ»f»f»e»d»b»b»`»`»_»^»XĀH»W»U»S»Q»O»H»G»E»C»B»B»>»=ĮK»5»4»0»)»(»%»"»»»»»»»»»» » »»ŗxŗzŗwŗwŗtŗpŗjŗjŗhŗbŗbŗ^ŗZŗVŗTŗSŗSŗFŗGŗ1ŗ0ŗ.ŗ.ŗ.ŗ+æDŗ æ<ŗ ŗŗŗŗĮ7ŗŗŗŗŗŗ ŗ ŗ ŗŗæ¹|¹|¹xĄ/¹x¹v¹t¹p»LĄ.¹d¹`¹XĀĀ!¹X¹W¹S¹K¹K¹>¹>¹;¹;¹.¹.¹*¹&¹$¹"¹¹¹¹¹»F¹¹:¹=¹>¹¹ ¹ ¹¹.¹=¹\ŗŗ-»½0Į¹ ¹ ¹¹¹¹¹ø}ø}ø|øzøxŗQ»»+½$øqømøløføfĄ'øRøRøPøEøCø?»<ø>ø>ø:ø6ø5Į?ø2ø0ø%ø#ø#ø"øøĀø¹~øø ¼Vø ø ø ø øøøø¼{··}·}·|·~·z·y»~·y·w·t¼H·t·qÄ)·n·k·i·dŗ·`·Z·N·M·M·M·K·G·EøZĀD·D·D·A·@·?·.·*·"·!· ······2··¼\··· ···¼·Ā ··½U····D·¶¶¶~¶}¶}¶|¶{¶{¶y¶w¶w¶v¶u¶r¶r¶p· ·k¾%¶nĄ¶m¶m¶m¶m¶l¶k¶j·k¶i¶i¶f¶e¶b¶b¶b¶a¶`¶]¶\¶[¶[¶[¶ZøC¶Z¶Wŗ.¶T¶S¶Q¶Q¶Q¶N¶c¼¼5¾"¶L·e¶J¶I¶I¶H¶Eŗ`¶E¾¶E¶D¶C¶C¶B¶A¶A¶?¶>¶>¶:¶N¶:¶N¶i¶7¶6¶6¶4¶/¶)¶)¶(¶(¶l¶(¶'¶&¶%¶ ¶ æy¶¶¶¶ ¶¶µyµyµyµyĀGµwµwµwµt½mµtµqµoµmµmµlµrµµj¶8µhµgµgµgµgµeµeµdµdµdµ]µ\µSµOµLµ:µ:µ6µ3µ3»o µ2»n»t¼¼¼ ¼¼¼;¼<½ ½µ2µ2µ.µ*µ)µ(µ'µ(¶Gµ'µ&µ%µ%ætµ!µ/øyŗ ½Dµµµµµµµµµµµµ µ µ µ¾b“~“}“v“t“p“p“o“m“f“f“e“a“`“`“_“P“R“P“R“N“J“L“L“C“IæJÄ(“C“>“>¾“<“=“#“ ““““““““““““ “““““““³~“»³}³|³w“ “ “8³w“8³pµ³n³n³l³l³l³l³k³i³i³h³h³e³d³a³a³^·³^³Z³Z¶.³Z³Vµ µ µO³V³U³U“m¹d³U³S¶s³S³R³Q“n“w“}µ³Q³Pŗ$³O³O³O¹³K³H³F³C³;³9»M³6³8æ³5¶:ø ¾³0³/³@³.³-³'³%¾³ ¾RĀw³ ³V“ “7“Pµ2³ ³³³*³:³]³h³r³v³}“““&“;“@“E“U“\“c“zµµU¹ŗt³³³æ0³³Ä³³²z²v¹½c¾-²s²r³ ²r¶nĄ²g³ ²c²b¶ ¼a²O²M²N²I²K²K²F²F²K²N²F²A²A²@²@²;²7²4²-²,²+²*µ}²$½g²$²$²!² ²²Įh²²¾u²²Ą²²A² ² ² »²²±|±u±t¶»T±p±p²%“`±p±d±c±`±_Äk±V±W±T»!±N¼FĀuĆ?ĆwÅ=±HűH±G±D±D±D±C±C±A±@Ćc±;±:±6±0±-±,±,±,±+±±±±±±±±Kµ*Ā'Ā-Ćı°w°v°u°t°m°a·L°_°]°]°[°Z·?°Y¶|°X°X°W»V°W°V°T°T¾°T°S°R°R°O°OøL°N°J±°I°H°G°C³*³N“t¹ŗ»jÄ1°A°;°:°8µ&°6°5°4°1°4±°0°/°1±C²Įd°.°-°'°=°#±(±*±c±f±¹"°"°°°°°°°°Ąg°»A°¶°¶'°°°°°°°»°°°°°°°°°°°°°°°°°°°°°°°°°ÆæædÆ|° Æ|° Æ{° Æ{° Æ{° ÆzÆzÆzÆyÆyÆyÆwÆwÆwÆ|° ÆwÆwÆvÆvÆvÆvÆuÆuÆuÆzÆuÆtÆtÆtÆtÆrÆrÆqÆqÆrÆtÆyÆqÆpÆpÆpÆpÆ|° ÆoÆoÆoÆtÆ|° Æm° °ÆmÆkÆkÆkÆkÆjÆjÆjÆjÆjÆjÆiĄ]ÆgÆgæ,ÆgÆgÆfÆfÆfÆeÆeÆeÆrÆyÆeÆ`Æ]Æ\ÆW³n¼]ÆUÆUÆNÆMÆLÆKÆKĮ,ÆEÆCÆAÆ8Æ7Æ3Æ2Æ1Æ/½,Æ/Æ(Æ(Æ'Æ'Æ2Æ$Æ ÆYÆÆY³ÆÆY°!°)°=°B°d°l°|±s²² ²$²)²/²=²C²S²W²c²j³³ ³ ³æĮcĮm!ư!°(°l°p°y±± ±±±±$±4±@±S±Y±^±_±`±j±{²²² ²4²;²S²a²h³æĮcĮmÆÆÆ®·g®}»|®z®t®t®s®qÆN³»D¾2Ā8ĀG®i®g®hµb®b®b®\®Z®Z®Zµl®Z®Y®P² ®O®O·L®N®K®K®J®Jør®I»C®H®H®H®M®yĀ:ĀB®Gæj®A®@®@°T¶a®?®>®;Ā®:®9·»b®9·o®7®7®3®2Ā/Ā5®2®1®1±^®0®.®,®,®&²@²a³¼1®&»{®#»4® ®²møh®®®ĮS®®ĮL®® ® Ą0®· ®®®®®·#®®®ø­|­z°w¼A­w±!·_øf­e­g®uµ^¶!ø8»dĀ­_­_­V­U®-­P¹­I­I­I°U­H­HĮ­H°f·[­E»l­C­C­C­C°Z­A±­?®¾.­>­9­6·­4­+­L³<Į­)­^­)­^­(­(­(­&·¼s­%ĆNÄ'­­ ­ŗd­®a±¶¶v¬¬{¬{¬z¬y¼0ĆQ¬t¬s¬s¬r¬q¬n®y¹¬j¬c¬_Ąt¬\Ā%¬T¬T¬P ¬O­­­­ ®Y¶s·ø-ø{Į|¬O¬D¬B¬B¬@¬7¬6¬6¬5¬5¬0¶ ¶ ¬/¬/¬/¬Ā¬¬¬¬¬¬<“¬¬¬¬¬8¬¬9¬¬¬¬¬¬¬Æh·%·>·B·P·l¬¬ĀE¬±$æĮn¬«|«|«{«z«x«{«wĀ9Ā@«v¬ ¬=°r«r«qÆ.«i«f¬Ą_«c«_¾n«H«I«H«I«H·@«F«C«B«B«>«=¼ «=ĆjÄ3ÄKÄ[ÄfÅÅ.Å.ÅF«:«9·@«9«H«9«8«7µc«2«-«-²«*¾,«)«2®F¶A«'®|ƵK¾&«­>¹¹S«®w«Å«³*¼«« « «.«2«L®fµc« «2·?æ««««¶ ««+®pƵ>Ą|ĮĮĮ#«««Æ2æ«æ«Ŗ{Ą'Į ĮŖ{°ŖzŖz³?“&ŖzŖzŖy­?ŖyŖyŖyŖuŖuŖtŖs¬A»3ŖsŖrŖrŖrŖqŖqŖqŖoŖoŖnŖmŖmŖlŖkŖkŖkÆwÆ|° “Ć5ŖkŖjŖjŗ ŖiŖiŖiŖhŖhŖh¼Y½fŖhŖhŖhŖgŖfŖfŖfŖeŖeŖe»FÄŖeŖcŖcŖbŖbŖbŖaŖaŖ`Ŗ`Ŗ`Ŗ`¬Ŗ_æŖ_Ŗ_Ŗ_Ŗ^Ŗ^Ŗ^Ŗ^Ŗ]Ŗ]Ŗ\Ŗ\Ŗ[Ŗ[ŖZŖZŖYŖYŖXŖWŖWŖ^ŖWŖUŖrŖUŖUŖTŖSŖSŖRŖOŖNŖNŖMŖMŖLŖKŖKŖJŖJŖIŖHŖHŖHŖFŖEŖEŖEŖDŖD¾¾ŖDŖDŖCŖCŖCŖBŖBŖBŖAŖAŖ@ÆEĀ*Ŗ?Ŗ7Ŗ6¬¬8Ŗ2Ŗ0Ŗ.Ŗ.¶.·¾]ĀŖ-Ŗ*Ŗ*Ŗ*Ŗ'Ŗ'Ŗ&Ŗ&Ŗ&­C²2²2Ŗ%¬YŖ$Ŗ$Ŗ#Ŗ#Ŗ"Ŗ"Ŗ!Ŗ Ŗ Ŗ ŖŖŖŖŖŖŖŖŖ¾jŖŖ« ŖŖŖŖ¹¾IŖŖŖ%ŖŖŖŖµdŖŖŖŖŖŖŖ ŖŖ³IŖŖŖ ŖÆÆÆY°i²E²N²[ĀIŖŖ ŖŖŖŖŖŖŖ¼ ŖŖŖÄoŖŖ©}©|©{©w©x©v©u©uŖ^©t©pŖy©p­µu©o©n©l«]«^©i©i©h©hŖm®&³·g©g©e©eµ©e©d¬=©b©a©a©a©\©\©[©Z©Z©Y©Y©X­ĄAÅ,©V©S©R©Næw©M©L²p©KĮI©J©J©I½f©I©D©B®©B©;©;©:©:¬BĄE©3ÆD°W©3Æa©0©0»]©-³_¹©,©'©#ŖO©#©#©"©"¼w©!© © © ŖB©©Ć;©©©©®G©©©©µx©©½mÅ©©¶©©©©©©©©»\»n©ŖLÆh©©©"Ŗa®I¾^©©©°-Ä©©©©©"© Ŗr© © © © © ©æi©ĄE©©¬K©©·M©©©©©©#©ŖpÆ.©©"©©"©©©©©©µv©æi©©©©©©¹©ØØØØ~Ø}Ø{Ø{Øz“ØzØzØy©ØyŖØyØxØx¾6ØxØw®[Øw°ØwØvØvØuØuØtØsØrØrØr©©©!ŖØqØqØpØpØoØoØmØmØmØlØlØkØkÄØjØiØiØhØhØhØhØh¶]ØhØx°ØfØfØeØeØeØe© ØeØr©©©©ØeØdØcØcØu©ØcØbŖb“»QØbØbØbĆEØaŖjØ`µnØ`Ø`ŗ`Ø`Ø_ĄHØ_Ø^ŖiØ^Ø]Ø\ŖZØ\ŗZØ[ØZø4ØXØXØUØT¹ØSØS¹GØRÅØRØRĆEØQØNØJØJØIØIÆ1ØHØH¶$ØGØGØL®[ØF»æPØFØFØFØFØDØDØCØCµØBĀjØBØAØAØA»EØ@ØFØHØ@Ø@ØCØ?Ø?Ø?ØJØgŖlØ>ØAØJØ>³(Ø=Ø=Ø<Ø<Ø<ŖmØ<Ø9Ø8Ø7Ø7Ø7Ø6Ø5Į3Ø5Ø4Ø4Ø2ĀdØ1Ø1Ø1Ø1Ø1ØLØ1Ø0Ø0Ø/«}Ø/Ø.Ø.Ø-Ø-Ø,©Ø+Ø+Ø*Ø*Ø)Ø)ØkØ)©2Ø)ØB©Ø)©yØ(°¶æÅØ(Ø%Ø%Ø%Ø$Ø$Ø#Ø#Ø$Ø#Ø"Ø"Ø"ĀØ!Ø!Ø Ø ©[Ø ØØØ®_ØØØØØØØØØØØØØØØ4ØØ3ØØØØØGØØØØØ<ØØØØØØØØØÆqÆu°ØØØØEŖJØØØØØ5ØØ Ø Ø(Ø Ø ĆrØ Ø Ø ­¶BØ Ø Ø,Ø-Ø1Ø Ø Ø Ø Ø Ø «)Ø ØØØØ2Ø9ØHØLØkØs©ØØnøz ØØ7Ø9Ø?ØcØmØnŖY¶MØØ=ØØØØØØ© Ø©UØØØ§§~§z§z§y§y§y§xاx§x§x§wĄM§w§v§v§vاv§v§u§u§u§u¬¶C§t§t§r§r§r§q§q§p§y§p§p§o¶G§o§o§o§n§n§n§m§m§m§m§m·§l»{¼ §l§k§k§k« §k§i§i§h¾R§h§gÄÅÅÅ §g§g§r§gØS§f§e©Z§eØ©'§e§d§d§d§cæ/æ0ĄD§c§c§b§b§b¶1§bØ*§aØØ*§a»l§`°§`§`§iا`°·?§`§_·§_§_§_²-¶N§_§i§^§^§^§]®J§]§]§[©*¶}§[§XĮx§W§W§W§V§V§V§V§V»z§U§U§U­P³§T§S§Rµh§R§RÆ+Ā8§Q©§P§O§M§v§M§M§M§M§L§T§I§H±A±W²S§H§G§E§E§E§D»^§D§CŖ}Ās§C§B¶U¶U·x§BاB§AŖ §A§@§@§?§?§=§<§;“_“f§;¾M§;§:§:§9§7§6«t§5§2ŖC§2§2Ŗ'§1§1©#§1© ©­v§0§0§0§0§0§/§/§.§.§-§,§,§,©®2§,«®y¶møI§+®§+§*§lÆ^±H§(§(§'ŖS® ÆQ§'§'°8§&§&§&§%§&§%©Y¬q§"§!»]§!§§©yæ4§§æ§§§§æ,ŧ§§§§§ § § § Æl§ §§§æT§§ÆÆ³D»Q §§§nĀqĆĆUĆeÄÄÄIÄP§»»6§ĆB¦}¦}¦}¦}¦|¦|¦y¦zØX¦y¦u¦t¦t¦s¦s¦p¦p§:¦n¦n¦l¦j©J¦j¦j¦i»¦i¦i¦i¦hØ_¦h®P¦gĄ<¦e§)¦d½ĀwÄL¦d¦`¦_¦^§g¦\Ć/¦Z¦Y²¦W¦V²L¦V¦U¦T¦TÆJ¦T¦TŖE¦S½f¦S¦S¦R¦R­r¦QØ^¦Q¦L¦K¦Kŗ2¦JĄwĆFĆO¦J¦J§ ¦I¦H¦G¦F¦F¦E“9¦D¦?¦?¦>¦=¦<©z¦;¦W¦9³g³g¾^¦9§§(¦9©¦8¦8¦8¦6«w¦6¦6¦6ĮR¦5¦5¦3¦2¦.¦.¶8¦-¦)¦(¦'¦'ø¦&Ø/· ¦&§M§Uµh»\¦&¦%¦#¦"¦¦ø"ø#¦¦¦¦¦:§§g©ŖNø~¦©>©\¦¦¦¦ Ŗ­:¦Įs¦¦ ¦ ³P¦ ¬·A¦ «e¦Ø@ŖY¦¦„®„„¹h„„}„}„|Ŗ Ä]Ä_„w„w„t©,ÆKĀ(„rĀvĆĆlĆyÄÄÄX„qØ„p„m„[„r«ÆÆÆ&ŗ„Y„W„U§„T§_µg¼!¾D„TŖ'®n·~„T„Tµg„T„Q¦·"¹l„Q¦„O„O„N¶>„N»„NĄ]„M„M„L„K„K„K„I§Q„H„G„G«D³0³0³1“æ„F„F„F„E„E„E„E„C·|„B„B¾ĄT„B„?æz„?§©(„=„u„~„<„7§l„6© „5§fĄb„3„)¦I©C©WĆjÄ„(„'©B³,¶X¶Y¹:¹=„"„"„"ÅÅ „!§)®o±LµLĀ&Ā'„!¦IØ „!°2„ „"„„¹G„„®q°>øy½b„„„„„„¦' „ĆĆ Ć#ĆeĆsĆwÄÄÄ/Ä6ÄJ„©X„„)„„„„ÆZ±}¶Ä„„„„ „ „„„„©¬„Øs„²m„Æl“eæ„„„Æ6„„„„„„ØIÄk¤}ÆV¼`æp¤|®døL¤z¦m¤x¤u¤t«,³JµUĄ|¤r¤mŖ¤j¤bŖ¬n°Y·¤b¤aØ3·¤`¬Ć}¤`¤_Ŗ¤^¦¦©1¤^¤^¤^±v¤\¤]¤X¤WŖ;¤W«z¤V¤U¹0ĮT¤U¤P¤O­:·K¤O§}¤MÄn¤H¤H¦¤G¤F¤F¤EØ(­2¾<æ¤E¤E ¤DØ(Ø4Ø5Ø8ØcØnØvŖ ¤D­#»5¤D­#¤D··?¤D¤s±`²|ĀĀQ¤C¤C¤A«j¤A¦¬Į@¤A©¤A¤@­$¤?¦-¦R¤>¤<ŖlĄX¤<¤3¤3­®8²f¤2ø¤2Ť2¤.¤.¤.¤-¤-¤,­¤)²y¤(­· ¤#¤#Ŗ{¤#§a¤"¤"¤¤¤­¼L ¤¤(¤3­®&±²fµ ¶`¶s¼Ā<¤¤¤¤¤„Xµl¤¤¤¤¤¤³Y¤¤"¤x²%¤«¤«¤¦3¤¤¤¤&¤.¤f¤q¤x¤¹£„Øv«+£~·}£}£}Ä ÄÄF£|£|£u¤O¦J©.£t£r£q£q©h¹E£m£lŖ.æ!£k£i£g©(¶/¶^£f£e²4³»J£e£d£d£c£b¤£]£[¼£ZŖAŖl¬}­q£X®Ær¾£X£W £V£V¤Q¦¬U²7²7¾WĮA£Uµøø2£S£S¦'§n©2£S£R£Q£N£M£M£L£LĮ~£J°p²_µOøW£J£H£F£F£F£G£E£A§Ą\£A¶XĄ£?£?øg£>£:° ¹£6£8£5£<£JĀH£5£/¤¤!¤i£/¤¤¤¤!¤,¤i­>£.¬¼¼½h£,£(£'®:»9£&¬_£$ £ ©>±ĆĆ"Ć.ĆBĆQĆfĆkĆuĆzÄ£Ä3Ä[£££«mĄm£££¦`££ £ ¤I¬®V²o“}ŗw½+ĮR¢¢~¢}¢}¢t¢r¢n®s°r±6¢GÅ¢E¢C¢?¢9¢9¢6»l¢5¢5Ø\Øo©¢4¢4Ä\¢4Å=¢2«“c“e¢-®@¢-° ¢,¬¬Æh··%·>·B·P·l¢,°¢,°¢+Ŗ@½8¢+¹0¢+¢+¢*ØFŖ¢)„5ØT­M°F¢'¢¢¢¾5¢ ¢ ¢¤-©>Æl¢£”xµ ĄA”v”sø=¾(”s”r°”m”m”l§mØØØ<Øp©©"ÆkÆpÆqÆr°³w““““8“N”l”y¢GØ«z”k”k”b° ”a¦:¦~³3ŗ8Ā{”X¶~”W”U”R¢F”A”A”=”7¬HŗP”,ŖlĄ”#”"«z°I”§N°j¶S¹.½]”§ »””¦[” ” ” ” ©” ” ””””ÆtÆv””¦@Æe°””Å<”¼D””ÄQÄS”   „„>©+©<ÆK°/»2»o ~ } |””  { u u s n S T¢h S¾ M M H F E²jÄ  D > <£W±B ;®9ø 0 0 : .¬+ ,£SØ9ŖW³V , ' %„ŖR­øQĆAÄÄ\ " !¤„© !“P“R !„„rÆfÅ>     ¢N¤}»»I¼~½¾=ĄZĮg              Ø Ÿ~Ÿ}Ÿ|Ÿ|Ÿ{ŸyŸx„uŸwŸwŸwŸv» ŸtŸx Ŗ­[®®®ĮMŸsĆŸoĀŸn« ­°2²)ĀŸm²r¶ZĀĀĀUŸmĀOŸk¦¦yØ3ŸjŸi§aŸhŖf¬NĮ]Ÿh¤H©c¬Y¾zŸh¦Ø0©¬8ŸgŸb§*ĮIŸaŸ]Ÿ\Ÿ\ŸZŸV©uŸVŸTŖu·bŸRŸNŸPŸMŸLÆTĄLŸJŸJ¢HŸH yŸH±ÄFŸC«8®O¶¶&Ÿ7Ÿ7Ÿ5Ä|ÅÅ-Ÿ/Ÿ.Ÿ.Ÿ*ŖG·øPŸ¤f·>æ)ŸŸŸŸŖj®mÆEµ\Ÿ½SŸŸŸŸ¶=ŸŸŸŸ¤G©*°¶Aæ1ŸŸæŸŸØ_Ÿ£6£<£C£E£F£P¤N¤}¦«'­®;®SƲf³ µKŸž}ž|ž{ž{§)žzžt¼@¼J½žqžpžk”"”,Øžjžjžg³9žgžežeže m““#ždždžp”©s³cžb³_ž^„{³7æž]ž\ž\žZžWžUžUØpØv«®q³GĄ}Į;žTžTžRžQµ.µ/žQžPŸW¦p§'¼uæ žOžNŸØpžM§Q³žIžLÆEžIžFžEÅžE h k®·x»MžDžCž@¤i¬\ĄSž=ž;ž9ž8ž9¦`§*ž7ž6ž6æ-æPž5ž4¶Zž4”&¶Zž4¼æQž4ž3æ:Ä]ž+ž6±Bž&§XŖc°DĀ+Åž$æž"ž)žžĮžž¦f¬[ž¦Fžž»7žž5”U¦G§Džž©T©hž žbž ž ž ¤&žžž| t”1w %²$t”W¢1³Apo®L mnŖ[®Tø;æ:æ=æEæLĀiŸ@ / :h³½ĄXĮe`¼1_`³_`^]ž¢Bæ]]Vø'¾TøS»NN¬+³Hµ¼o¼p¼ræbLd± KU”"”&„„JæGF EŸ”IŖL®b¼ ¼ ¾8ĀĀ7Ā7A:¼u:„&Ø83¬6»Y.+-(#¢«~¬ ­W¹M¼¹!Ą  ¤5®gµsŸ]ÆI¶i _ m¢¬¬7®°S²³E¦^œ~58Buv„§ ¬A±|¼]¼`ĮUÄ|œ}œ}§,Ø*Øaœ{œ|æSœzŸc œz ' F¦¬¬K­NĄĄ œzœz„ŖrÆdÄrÅœyœyœ~¶/¼Eœyœv /œu§©³œuœt²/œoœnœnœmœlœkœiœeŖoœd¢£]­²h¾1œ`Ÿ~² œ`œ`Ÿ~ œWŸn¤|¦©+­®a±µaĮwœQœQœL¤d¤t«gœKœK¤œJ©œIø œIœIœA¼rœ>œ:œ:£TŖbœ3œ2œ,¾Dœ+œ*Į+œ) ÆL»iœ& r©zœ#œ#¢.„~©«9°¾Eæœ#œ#œ#œ"œ" œ"£R¦8ØCØhØuØwØ~©© ŖŖzœ"“½ œœ©aĆNÄ9Å=œ„@±H½vœœœœœœœœœœœ¬·œœ§\œœœœ„Ŗoœ”l¹Ć&Ć(Ä&Äl œœNœX§-¶E¶z·^ø¼œœ œ œœ2£xœ œ œ” £Q©!œœœ­œœœEŸC£*„„)œ¤V§±:œœœœĆĆUĆwĆy›~›~©²rĀ›wœ/œIœIœXŸG ”;”<”J”S”p£'£1£l¤„ ›s¢>¦G§4©6ŖwÆ@·|›p›l›lŸu£nØY›k›k›j›f„T®J²r¶k›b›aŸ¦{»M ›`œJ„3ØaØiØ©©ŖSµv»a›]”¦u¬¾} ›[A¤+„­@­®zµnĀ›U¤„s ›S›eŸŸŸKØYĄOĮjĀ,›S¦e›R›R›R›R¦2°=›O›M›Kœb„8„9¦<Æ-›F›A›@¬X ›=Ø>®5Ƶpŗ=¾¾#Į+Į;›;›7›4œ?›4¬"›3³µ@›3›/Ä›.›.¶~›-¢°v›,›xŸOÆl°U›,§©]»P›+§¶ø ¾Ąs›+›*°[¶I ›(›/›H›Jœ?žzžzŸJ£p¦›$œœwT”«ĀM› œ/£Q„0§9§dŖ®®'Æi° ±t·h··ø%¹$æ` › œ/£Q¤r¤~„„0®'®zÆi› ” ›››© Ä'›ØQŖSĮ›Ŗx›Øl©!›„1› ¶››Ø ¬t­›¢,››§.®H¶k›„››²*¶a›Ā1›¶aĄ ›Ø°››&ŸC›››©½U›”››› › › ®B³I»Q› ¶› ¶7› §v› ØØ Ø!ØDØH¾ › › »p› Ŗt› œW®Iµ¶› › › ›› › ›  SØaŖOÆ2›Ā=››› ››£Z›››§2››4Ø ¼Ą\››«®r¶æ›Ÿ4£Y³g›¦N¦pĆ›¢H«n›››¾|›››››šš~š~„1Ø3ŖŖK°š}§®:Æ=¶Dš|šzšzšzšyšx¼Fšxšxø:šx¶švœ8£i¦ ¦ŖŖ:Ŗ|¬;­q®·øĮBĮyĮyšvøšvŖ¶ršr”_øFĮZšqšpsšm®D²T³³&»`škšhŖšg›Tž.©ŗ5ŗ8 šf›]­®®4²m¶~»ĮYĀSšf§šfšf›N® š`”|šY¶ šX›,œdŖŖs®·»:»Q»kĄšXšTšM”WšIž~£RĀQšHšBøRš@š@œb”µaš9»*š8š1š1š0š/š/§ š-š+ššššš³#ĄBĮ3šŸ®(šššž}¢¢Q²c¶U»~ššš -„\ÆO³e½uæsšši“8š”M”a¬Pššš›Q›r v z¬qÆ9™š q ™~›M›gŸbŸc¢O©c¬ °}™v®0™u™t™s™sŸE¶=™ržU°]¶zø0Ā™p™p™cŸvÄT™b b­7²6· ¼ ¼R™^™^™Z™T™Sø™M™G™G™Dø™D› œJ¬X¶0™C™B™B™AÆo™?·™>™=™;™:™:™9 '™9™8™8Ŗ@™7™5™3™k¢-±¾y™2™2Å5™2™1™1™1™1™/™.™.«B™-™-™/™+ƶu™+¦™*šj¼X™)™)™(š"™%™$™3®EĀO™"™!¤sŖ²™®™™*ž]™™™·p™™™™™©™£™™™¶™™™™ž;™™™ ™ ©?¶™ ™ ™™ ™ ™ ŖI®L¶h™™°N™™›0¦ĮOĮYĀĀ™™™˜z¢S½]˜wĄUÄ(˜r˜r˜i˜i˜h¤VŖ˜f¢B©pĄ.˜e˜o˜e˜d˜dŖt¾x˜dšp˜cø ˜ažBžtŸ{£GŖ[°Y²·rĮi˜^˜\˜\˜\˜[šw§~¼!˜Y©:¬ZÅ6˜X››œ ¤l§wØ?ØKØt©+Ŗ'“µw¶$¶x˜X˜W§j˜W˜S˜Ræ˜Q˜P›]®$®%µoĮX˜O˜O” ˜N˜N˜M˜M™C˜L˜O¤˜JĀfĆTĆZĆu˜E²!˜E¶˜E˜L™› ˜DŸ· ˜B¦cØ5æ3˜A®H˜A£9˜=˜<˜X˜9˜A½`˜/°\˜*˜&˜&“N˜&˜&˜<› œAÆTæ/æ8˜!›¤$¤F²@˜ ˜œ)«>«?˜˜˜”.˜™Oŗ¾o˜ÄF˜˜˜µ<˜¦r˜˜˜ž@©hŖm“>˜¾Q˜˜³0˜„K˜œp¦f¦g©-˜œn»?—}—Ÿ\°½0¾SÅ.—x—u—r—q—rÅ%—p©5—o±± —nže—n—n—n—k—g› —g§w—a¶T—a™œp« Įy—_Ć*—_—_®x°\°t³d—Y—W—[—[—[—\›n—W›n£`„LŖ —S¹tĄ2—Q—R—Q—R—P—Oŗ/ŗh»c»d¼l—N—N—K“5—EµT—Dž²'²M¶0ŗ3æ@Ā —A—k˜oŸK¦a©¬¬¹—@®V—<—7—6—6˜²—3šD 2”&£A«j—2—2œ—0š"¾i—(¦ ®®&¼R—%—#„«A—#œ„—¶&————¢+—¤F§a©—ØI———§`—ØgŖ·—Ø —Ŗq¶`—ØqØu©©"——žMØEØHØgŗæ<ĄB—— — ™œ(®~ÆI³¶ŗ»(¾-—©r–y—© ŖF–y›–yœ!«L¼–t–s¶–rž–q›%±;–q–p¬ ¬°t»g–o£P°v–nŸ1”n²–n–nže¼e–mž£s¦« –m–m–l©rĆ–kž7–j–p–g¬ŗ–f–b–^–^¦\Äy–]—l£±Įe–]–\ž1–\–[„v»a–[–Z–Z–Y–Y–X–X–W–W˜a–V–V–R–Q–O–N˜¢`©wæX–M–N–Q–J "–F–C¦©$ÆBµo¶W–A–A–A˜< +“$–<–:–2§@–1§–(––˜&˜/–³–ĆiÄVÅ– „ – – ––ž` }–» ¾TÄD––––£5––¶–––¢l–Ć/ÄmÅÅ6••µ}••~šj•~•}– •}•{øjøl•zøC•z•w—E£~½f•w•s¤3ÆT•r•nøp•l•p© •l•p–^–^¦\•jÄT•g•g•g•e§)•c•b„9¦Æ6•bÄ8•a•a–”³T“S•`•_œ?•^Ÿ °f¼[•^²y· ¼[æh•W²1•W G•W—›S <•U–„§3Ŗø{•T–¶x•T²•T½O¾ækĀN•S  ±D¼R •QšV³ µc¶7·@ø¹\»B¾)•N•N•N•M•M•M•L•K•H˜@¤x®a³ •F•F•D®!•D•D•A“=•>Gø^½!•<æa•<›¶•<§+ŖF°³.Ą•9•,Į •*•)•'•'•¤••••™u•ŖG•œeS c¦zØX©N©j­4­8®°^±-¶ øI»»9»V¼ĮAĮR•Ÿ­y·ø`Ā•„ • œs¤9Ø Ø9Ø?Øj“• ©V«v¬ • • ­?®*øø0Ā5• »p••••””·”””~ø ½Ä$Å”}”}”zµu”z”z”y”y”y”y¶%”x˜W”w»E”w”w•™Ą”w— ”ukž ¬“”s«N”q ”p—u›Eœ9n e”*”E¢b©N¬%ĮrĮw”h”d”b”`”^”]”\”\•L”[”[”Z”Y”X”X”W”W”V”V”9”6µk”6”5”5”5¾”5”4”3««%«*­®sÆæ”3Ŗ,ŗ`Å8”2­S¶,ŗ%¼½D”2•¤3„[Ŗ ­®S®f²f¶q½#¾"Į$Į:”2$©^”1Æ?”-#)”+”*¦b°.æB”'”&ž”tØ&”&”%”%šz¶&”"”® ® “}¾E ”œœ$œo ;§ØØ½a”Ÿt”Ä ”Ø”µS¶U”” ”Ø=ŖEŖ\¶¶ ¶(¶:¶D¾””–¤ŖK¹^»”Ŗ]”¾”””X˜\··>øN”” ©2»P¼L¼NæHĄc””ŗ\””””””””” ”žR”m¤[¤[«y³wøx¾i””©2” ” ” ” ”qšQšYšeše”¦§ ©L©d¬Æ±{² ²C²[³»2¾l” ›” ” ¶b” F„%” ¶b” ” ¶~” šw®L·`øl»{” ” ””  4··g»8½~¾¾¾¾ ”›@œCž|Ÿt¢y£Äm”””ŖD”•"“'“-“W»AĮ4Į5”¦m±¾Ā”””Ø^”” »H””“®T“µH“}¼V¼[“|”V¤E¦?Ŗ “{še“z“z”x•= &„¶G“z•= &“z“y®F¶|ø2»6“y› S­O“w“vŸD“t“q»k“q“q„Ŗ/»qĀT“m§“k“k 8§^± “i›XœP£¤¤¤t„M²QøF½“i“i“a“a“^–S“^¦³,“^•>¤“[“g“[™6Ä5“Z“T“\“R£*“P­“N“M” “K“I“H±I“H±L“H“?Įn“>“>©#“<“;Ą;“;“;Å“9“9Ø3¶D»HĄD“9“8“7“8“7ø¹&“7«E“6¢>²“5•S„,©P“4¤c¬`°m²³¶k“3³!“-¼"“-“-[¤„ ¦­­±±]²³µµU½XĮ|ĀL“)“)“&“&•=³?¶r·?Ą“"“"“!“• šn³B“¦F““““”'–5¦N©T«c«d±S“•b®Uµ ““¦,©l“Ä““ “•^•^œEŸ §°f²;“R·¼6¼[æh“ ™m“ “““)“””8”C”H”T”n••••)•>““”1““æ“›.£n°m““ ’“ •zjŸ5 .¬&øø'ø6’’§A¼’’~ø ’|Ŗ’|ŖC’{•}˜c™*¶K’z““’u’t“”Q•&’s’q„R ’k“•F•v—— —)š]š]Ÿi’k•FØD®@¾ ’k’|•E—(¢ØnØo®1®?±^·ø%¾ ’j™xŸG”I®,·iøQøp»’j•C’j’j”6•U­G¶9’i ’i“b“{˜b¦"®[¶Z¾-¾.’e’d—8—8˜s˜t’a’a“i¹SĄUÄk’_¤¦b§-°Zø}¼S’_’^¹WĀ’^’\£¾)’\’Y•—)š›(›/›HŸK¤Y¤`¦ «i­:­G·[ølĀ’Y“p™š]Ÿi°’X’Vš ’V”f•i„o„q¶^Į\Ā3ĆĆ"Ć.ÄÄd’Ušy’U’U’TĀ ’T’\’T—gŖ(’Q£U£^¤7©²oæ%’P™{’P’Oæj’O°O’L ’L—˜O„D§.ØIØyŖŖqŖz’L·D’L˜OŸo®2’H’G’G—™™jšMĀ’Fšv’F˜f˜h Ø ŖŖ(ŖTŖ]ŖdŖg¬­E®1Æ7±D²s¶.øX½cĀĀĀ’E¬n®x¾(’EĀpĀw’B’A’i h¼DĄĀ@’<’<’;’s“ “2“9“B“G“V„„ØEŖ ¬øø/øBøIø^»,¾:Įb’;’:’:’<’:’;ØJ¼5’:œ’7’5’:’<”W’4“J•*•>—˜7™)™\™_ššOšQg­Mæ’2’2’2›2£AÆ8µ_·’/•›|„OØX¶Ą ĮW’/™?œ„x’.’-’*ĆcÄNÅÅÅ2’%–––0–2–3„ ’$™ ›¤+„ØA®x²)¶x·h’#’„}µx»l’˜V’•Q’ ’›œ „U¦J­µk¶H¶sĀ<ĀO’’’„Q’’’–:’ž’’øBĄV’—U›&›c›kœ7Ÿs J””u¤@§ §Ŗ­E°Cµ øgĄ8ĮĮUĮw’’§O’µ*’’ŸM’’ ’ ’\¢3©}æUæWĆ~’ ’£n©4­6Æ9’Ø’ĆAĆf’ ’™›.žX©,¬@°^²v½U’˜9 ¤&Ŗ0¬=°Ć!’’¤,„<§{©zæO’’’’’¦*’‘~§TŖ±/‘{µ‘z‘z‘z‘y‘x„@„sØŖÆLĀe‘x‘x²‘w§"·v‘w‘w‘v ‘v˜™8šjžB³e¼æqærĄ^‘v˜f‘u–=‘u‘t¦a‘t‘q‘p’¢0‘oš‘oŖ9‘k  ‘j‘jœt“q‘g˜ ‘gœ!¤,„F¦U§T©©?¹‘f¦'ŖX‘d¦OŖRĆA‘d¤ ¶R‘d¹‘c¢5§§§-‘bžg§J©[ ‘a”3™%[ŸD£(¤ ®4®c®z‘_Ä~ ‘_”j—P˜¢p¢x¦@¦YŖl“8Ąd‘^Ŗ‘]Ø‘Y—l‘XŸ}‘W‘V‘UŸHŖ`Ä?Ä@ÄCÅÅ)‘U‘RÆ?‘R‘Q¦#¦z©6²v¶%¶w»@‘Q„t‘Q¢-‘P‘PØ‘Pœ, ‘O™-œX  £*»J½QĮ]Ā!‘O© ‘N‘M—9£q§G‘M‘K‘n‘K‘L‘K„,»5Įr‘K‘I’ ŗzÅ-‘I—Ø‘G– šcĮ/‘F˜t˜tæA‘D•s¤`µp‘D’Z§«iµp‘@¶B·@¾/‘@˜O‘@•U–·[»+¾.¾2æo‘;‘;Ąi‘:‘9‘8‘8‘7‘7˜U‘7‘6‘5²L‘/‘,‘,Ŗ/‘)¾p‘(‘&˜˜už*²¹6‘%¤<³i‘ ‘‘ Ÿ7Ø5²Z³ ³R¶q¹¹:¹=¹>‘ ‘”•U–b x©«»X¾ 摞sŗX‘˜|‘–‘œN¤®3·z·z»N‘©}‘’”)¦Z¦a¦|·x‘‘ – —L›F›p ”6”h¢$£¤[¬?­^­`­b±¶/‘ ³.‘ © ©SÅ‘ ‘¹8‘ž¦f±7±~‘‘Gæ%špœŸŸg ¦ Ŗ ®aÆ6¶¶U»RĮ|Ā Ā8ĀL™k”=~šJ©*²Įl~”}™Ÿ\¤yĄ8zØd³y’YŖi­&¶8y®Iyw””Z•šBœnžžØ9Ŗj¬L¬a¬|­+­|® ®±9³%·Gøø:ø:øWø`øcĮMwŸ¬s±wv‘pš=š>œt±±0ø v’F’Z™:›z¢M¤j¬+®z²yµo· ø=u›VŖrĆ'Ć)ĆMĆXqŸ pd \œœ„V§T®cÆOĀ;Å;[qO”,”¦fJ”xØEŖ ÆK·ĀUIIF£TF“,œ"]Ÿ¦H²[EE™ E’ ’-Ÿ¤D­#C’?’E’W’W’g””N”Z”b• š&š&”.Ŗ"·dø[¹ŗ=”-šy¬-<;™y;§_­5®#¾|8’K’K’q“s“s•y– ›O›rf ( 3¤:Ŗ_ŗh.-µz,šA›Ø³6µ0)A™O„ «%½@(”P¤Ŗk¬!(‘<‘<‘h—&°-(Ŗ ±_ĮZ''£Q§M'#=Ÿ~£t#•?˜SžBžS¢#" ²  žV”x’ ’#搱 ˜(˜A›»{˜a©ŖZĄ&rž:Ą”“'—2³l ›„  —0 ”oÄg) u—"CFF\wxžŸ| 9¢2£U¤J§R§gØ3ØOŖŖŖW®^Æ;°]±±±A±V±[±]²{³ø»6¼¾,¾<æ&Ā3ĀS 9—“#|›9Ÿ D»=Ä8{{¾Sz¢l¢n³Myyr££_¼9kmg”-„Aežpø7d§cĮbž ³8b F”n«.®iĀOĆ1aa  `•Wŗw_‘I‘a‘wž` _™šNn¤a­<¶¶8øĮ,^Ÿ^°UĄMĮY^‘G•C£]žX¦7؏]]™L¦r¬N®NøZ]]”l[—Ø>ØHŖq«K[œsŖ[—[¦([—/Zšuœw§¶DZ”ZŖŖVŖiYŸLØ"Ø+ŖVŖk­_YŖVY “!Y— ¤@©­$Y˜=Xh‘BŸX+— —(šRQ“-›}Ÿ@ :Į6QQš|›+œ>¦x§¬/¾kPšPOœŸ§r­RONNNÆ2ø{K¢TŗwJ™DJ§*¼yI’G˜Wš›HH›Ø G²@GµxEE—š"Dšy„}®2°Y²v·D˜V˜[™AØ6DCC— ­WCB™ Bø A—yœ%žž!ž-ž-ž8ž\Ÿ  p§*س#³$ĄJAA@‘cš¢*Ø`ŖK ?•–˜@›Ø±&µ[¶ »j?>>>˜{=Tb‘‘’4™%™G™I™]™q™tš ššZžZ lŖ6ĮĮnĀ <ž «h¬­_¼O¾~;!—&—'ŸŸ£e :F i‘”S”T–W—)™$™]Ÿ r:@u‘™ ™š!¦Q88777464^Ŗg«q¶-Įr4„7§øe4..³Wµ ææ|.™,,+B¹>++–A˜Z+™D¶P)™ušš­$±v¾))’/—)Ø>Øt)(“t˜X˜i™A© Ŗ(( (+™qšJ„²T““ ¶{»[('›3ĮP''“˜ZŸ' '‘˜|™p™užY©.­,­2²n¶y·^&›· &@P•A–™ ™$ŸŸT±c»U" œ|¢P¢n¢r£¬C±–[ž5žW³Zš ¼—H¬“#i’m•i—7š>œyy ;§+§hØ ŖŖ\“Bŗ/¾g¾g¾}Ą\ĮT  •'“w£*¤sØN©©K % —˜N™jjŸ5 /§µvµæ,¾-„ØžW¶}–=©E«b› -:L‘˜M™C³^›¶|®O²¶&¶|˜E¶| ‘‘‘— £„³¶qŗ½aŽ˜Ešv¬¶&¶=¶HŽŽœvŗŽ¢(ŽŽ~•Z£1ŖFŽ~Y¹Ž}’X“t§½LÅAŽ}Ž{‘'‘Y”U¦§|Žz-¦:¦g«oŽzŽyžiŽy˜r 9¦¦&¶ŽyŖ®GŽx››i« ¶)ææi Žw=.¢¢1¢G©_Æa²z¶0½a¾lÅ Žu–c„_„e¦§{©R·»} Žt’’—Fš>Ÿb¢¦+§ ±IæIĀĀ!Žs Žsc“$“'•¬-»jĄĮ ŽrŽrŖŖg¬ŽoŽgŽc¬,¾ Žc;Ž`³1Ž_Ž_Ž_Ž^Ž_¬½Ž]y˜,æQŽ]Ž\©qŽZ™`ŽZ\žNŽYŽYŽXŽT™y­Oø,ŽSŽS˜+˜1ŽQ»ŽQ:ŽKSp|)kt’’&’2’D’z““ ““V“s•—M—O—V˜v™™™O™ešj›Y›pœh+-Bmž_žrŸŸŸI 9 `£r„„-øøøø/øBøIø^»,»G¾:¾cĮcUŽKSp|)7>ARakt’’%’3’;’D““ “““?“B“J“V“Y“]“c“v””'”,”,”8”A”l”••>•o•s–— ——M—O—V˜0˜v™™™ešj›Y›p›|œh+-2BFUmxž_žrŸŸŸIŸR 9 _ o”/£r„„-øø»G¾c¾dŽENؽ6ŽD”™T mŽB ŽBffg–&™UšJ„„Ž=Ž<”@–l¼FŽ:“™"šn›LŽ5Ž7žaŽ1 Ž-™zšvœH£(«8«WÆ\µfµpø|Ž-Ž,”#œ?Y„ ²_µZŽ,¶·kŽ*®|µ·hŽ(Ž%›{Ÿ1¬,¶ ¶'¶7Ž%¼;Ž$™iš|§1Ž!•>›Q§<±²W¼%Ž!·_Ž!Ž!Øw©ŽŽ“)ĄŽŽŽĆoŽ„H²G²L¹ŗPŽŽŽŽ©YŽŽ Ž Q Ž &„„„%„rÆ]Æf±o±sÅ>ŽŽ®x°D½FĮ0޵ ŽŽ}}• «.æ0||Ž‘:{›`{„„®;z«R«j¾bzŗzy‘%­>³.w²)µk¶9 w\˜jiqŸ4   - 7 8§°<rtŽwFeqh±0¶7øeœ&¦1®3Æ+°I±p²L e;“m—?—Cšk¢:„'ŗŗeœKeœœKØ<Øud² ²,d—7§:©d؍cccc;„OµvaØ4¶[aaĄ@]]’»7ĄE]»7\­'­K³_\¶}\”w›©![§k[©[Z’iØqŖZZYYX•X–y¤BXXØsµqWWWWØC©±ø`V“s›§[VV›%V›V­)®hU›T¦JÆ SžSQĆ_ÄÄIÄqōH’>H’Į ĮD<<”t<<³RøW8Ø]7#®VĮI7” 64T›œ(£5„««7®fƳ µbĮ;Å64„b§1ŗŗ 0ØKØlæ"/.--,ž3+—q%"‘dŖ2¹Į  %Ć%ÄÄÄÄÄ0ÄnÄpÄuÄxÄ~ÅÅF™š#œj§ W­(®7²v “N™™^o©'Æm²N¹æĄCĮ Į+‘„<„{Ŗ>“‘„JŖAƍ’H•›+®N°Sµ7“k“]  •ešw¦m§b§r²  ³6  —$ } Ž”ØRĀ8 ½¦­z••š@§}Øj«n£NÆ/°u“"·Œ“]Œ`‘Q’š=œ8§S©%Ŗ7Ŗx°X»?»?»@»fŒ~Œ~£^°9½hŒ}w˜»4Œ|Œ{µwŒ{Œ{®7¶øKĄ Œ{ŒzŒz•L¦ §°\Œz ,Œz’^” µwŒy§vŒyŒy®:ŒyŒxŒwŒwŒw¦#ŖCŒw§ŒvŖ-ŒvØØ\Œu¦TØB³ŒtŒt0„J¦VŗDŒtŒs•}›cŒs–mŒsŒr©ŒrŒr’œk Œo“ “-“cš:› i­(µ=¶M·»*æ0ŒmŽ^’¹,Œl˜»8æ3æ3Œl§O©_Ä< Œg+Ž{’¢R©mµ^¼d¼hŒeŽ=ŒeŒg—F—^—_¦p§FµŒc°Œc zŒ`$‘•Sœn„.¦f©)« ¬I³s“vø»Œ]Œb›j¬½æXÅŒY ŒS’”9žT£g¤S°]“s“{ĮbĆ"ÄoÄoŒSL’–™Bœœ^OžžZ¤q„«^«a± ± ± ŒR\ŒQŒQŒN§ŒIŒH»[ŒH ŒHŒK ;§2§]«T®°^Ą0ĮcŒF‘V–ŒE¼i ŒDŒE‘I‘J‘°.°0°FŗzŒCææ`ŒCÄ#ŒB'˜UŒBŒAŒA Œ@Žq‘’˜ œBŸ|±P¶V¼{ĮĀ Œ=6§G³'Œ=Œ;ž|Œ;Œ;Œ:Œ8ĄVŒ8Œ7Œ:ÄGŒ7—mQžlæ\ÅŒ5Œ2“YŒ1Œ0˜›C”©· Œ.Œ(Œ'æ Œ&Œ#Œ"Œ"Œ"ŒgŒ!—a™$ŒŒ–/™Rž(žK¹ ¼0ŒŒ! Œ‘W‘e‘u–>š?¦oÆBŒ•JĀĀ9Ć Ć#ÄŒŒ™)°R¶>ĮlŒž7„ ²8¶WĀNŒ¢`„2¦§ °ZŒŒœĆyŒ—;—<¹U¹WŒÆŒ–Œ Œ Œ µ7ŗ|Œ Œ 3Å!Å/Œ Œ Å Œ Œ«2ŒMŒŒ ¹Gŗ;½MŒØ­ŒŒ‹•&‹|xĮ7‹{wøĀĀĀĀĀ%‹{x•[‹zØ2‹zØ~© ¹‹x‹uŒ‹s¬!³&Ā!‹s"‹s3—z‹r›s°9‹r‹r“V“W‹q§‹p‹p‹wŒ–/Ø. ‹m’,“)”2•—'šZ©l­ ®"³Bøŗt‹k™ ›"­"‹i‹i—Y‹i‹g‹g‹f§.‹b‹a‹a7–D°5³,“*‹_–Tž‹Y‹Yš~“n‹TŒ7ŒV™Z©f©vÆ^°A‹TŒ\§9ø3¹4‹S‹S–µ 5‹ST'‘y”––˜L™™ › £.¤¤(¤M„ „¦3§§;© ©(©1©;©HŖŖ&ŖL« ««3«w¬2¬=®8®p°r±±² µ µ[¶¶r¹»2»D¼bæ1Ā:Ā<Ā@ĀG‹R‹R‹R‹Rŗ!‹R³PĄ?Ą?Äf‹R—H—H n¬³PÄf‹R‹Q‹Q0‹P‹Pž ³V‹O„K‹O‹NŒH ‹NŒH’2’z“““s£5Ŗ#³UĀH‹N–l ‹NžbŸ@Ø@«³“½aÅ7‹M|Ÿ£­X³?ŗ~‹L§®sæ3‹L›bžY³5ø3‹L—r¦=¾W‹K„ Ä#Å‹KŒ/3®x ‹K‹xŒ ŒŒŒŒ ŒMŒh$:‹K³8‹JŒy–*Ÿ0„C¼I‹JÄÄX‹I ‹I”šZ¤gÆÆM²9¹ĮĀ‹I‹H%–œ©t‹HŒE‹H‹HV•› ¤xØW«6¶q¶y·>»»}¼‹G°4‹G‹p“T©T‹G‹b ‹G‹b‹dŒŒŒŒŒ7Œg‹F@‹F‹F‹F„IØAŖøÄ/‹E‹E‹E•<‹D‹C0”E±E“o‹C,‹C‹X‹\‹f‹k‹r‹{ŒŒQŒVŒ],Ž&µµXøyø}¹ ¹¹:ŗ ŗŗŗ#ŗ*ŗ5ŗ:ŗ>ŗBŗMŗP»»i»o¼i¼l½ ½ ½½½%Į‹B“q™.Æ)µq‹B‹B‹A7‹@‹@ ‹>•s–z˜S› !Ÿ?“.ŗ#‹>œÆIµ3‹<‹IŽ'„i«²\‹;¶:ŗ¼‹;ĀL‹;'[»wĮĮ‹4‹d›hŸa ¤U„„ ©O±|²ŗĄwĮĮgĮrĮzĀĆ‹3œO­‹1‹1‹1” ĄgĮO‹0‹0‹/ ‹.‘y™£i§5©7²v¶xøJ‹,‹,‹,“|‹,ŒV‘lØT‹+‹-œK‹+§§¶]»=‹*‹*¦x‹)‹)Œt“4–— ™EšXžž> ` b f³.³0³Sø‹(·‹(¦j‹(¢‹'‹$  ‹#‹#Ø^‹!‹1 ‹ —™Ÿ]£Y¦=§c©cŖ °¼¼^¼`‹ ‹3œ£4‹‹‹¦ ‹`“{Ä(Ä.Ä<ÄIÄK‹‹‹‹DŒ~”£`§!ŖŖ3 ‹–\­“w·øh¹»V¼A‹Ž ŽŽg—oœ‹‹‹‹˜7»)¾n ‹Œ)+— ž1¤E­/·ĄCĄq‹‹‹­&‹‹C’›°|‹™¢¾‹’“h–—— œžRžW„Y©t«x¬³J³g“Eµ»#¼Gæ^‹§q‹‹§=‹§‹‹ ‹ ‹ ‹ ‹6žtŸŸIŸSŸS t£V„„.¦zŖVŖcŖp°s°y±v¶-ø¼P¼Q½Z½\½bæ'æ-ĮhĮiĀĀĀI‹ ‹ .Ž—›£c‹ ² ¼ Ā8‹ ‹ v±<²7ø>»@»OæPæPæRæTæX‹ £|‹ –³;³~“øø » ‹ •–:n§ Øt«9®(ø¹‹ ”,•,šŗFŗF»~‹ Žk‘#•_¢(¢)©.æ‹ ŽqR•WœBœzŸc¢£¦i§§]¬o­z°¶Vø&»(»3»7»T¼<½[¾æAĮ>ĮS‹ £‹•c‹‹›Øj««®N°>Ā9‹‹£1« ¶j¼4¼U¼b‹‹‹‹ø!‹Œ‹ŒM‘L˜‹Š}Š}ž+Š|‹ ŒXxŽ0ŽQŽ`E’-’B’i•r—Qžž ž žEžažbžhžq ' 3Ŗ(«}¬,®JÆQ³+³D³R³y“<“jµ&¶L·K·_øZøqŗZ¼eĮŠ|ŒDž:Š|œŠ{” ŠyŠxĄ?ŠvŠr{˜y¤m«KŠq™ Šp»_ŠpZ«ŠnŽ+Šj Šh‹|[šK”/„²Nµ(øføy¹$Į6ŠeŠe‹dŠd©h«Z³6·G¼uĀ!ŠbŠbŠe‹dŠ`’?›Ÿ-„b­Š_”-Š^Š_ Š^Ž¢S°+³+µ&µ&æ=ĮŠ\“•JŠYŠYŠX‹qŠTŠRŠR¶ŠQŠ£>£F²b¾ŠOŠT‹ŒŒŒ ŠOe–uœL©I«1«C¹tŠMŠ^‹t˜Z› Ø]ŠM޶e·eøeŠMŠ^ŠeŠjŠm‹a‹f‹iŠL/ŠK“iŠJŠJ/««!“@½|ŠI— šTø!$ŠG‹ ŒuŽt\‘ ‘F’”l•~šB›@›c¢'£¦.¦d§W§\ŖŖU­.­Y®#Æ@°±±±±µo·.øøĮUĀŠFŠIŠFŠE”yŠE1®o¼¼JĄtĀŠD‘8™ŠDI™½ŠAŒ‘A’:“””–y˜@˜X£G§««L³/µ=·!·M¼P¾5æaæfæpŠ>Š>ž ²Š<¶ Š<Š<Š;˜o”£b­; Š;[¤DØ/ØlØoØtŖ³I Š9“v”(”(¤>©<Ŗt«oµ_¶KŠ9Š9£A£S¤c Š8ŠA›®qÆN°>²Gµøx½bæwĮcŠ7Š6’;”µ Š6‹UN”•!³I³y¶»Š4Š0Š0`ŸŸŸŸUŸU r s”£?¤|ØX±±“ø'¼1¼PŠ/—6±:æ&ÅÅŠ.Ža’3Ÿ³VŠ-Š-žWŠ-Š:ŠHŠ-®æaŠ,Š,Š*³i·nŠ*ŒŒ ž7Š*Š*ŽxŠ*Š(Š(Š(š5š=ž>žO ` b f„.Ø"±4·{øøR»TĀ1Š(Š2 Š(— Ÿ B _ v¬¹¾I¾K¾iĄAŠ&Š&¬Y®µ ·GøJ»EŠ&Š&¬R±±±;³UŠ%Š%©¼Š%Š$–~rŠ$Š#©gŠ"‹ŒK’3’P—f¾WŠŠLŠO‹ZŽ0Ž9Ž9Ž<–6–8–W›q2“8“;ŠŠ$ŠDZŠŠŠ%ŠDŖŠŠ"Š"Š>¤=ŠŠ"Š"Š*Š-Š7Š9¤=Š”.©CÄpŠŠ”5ŠŠL Š”››už«p«|³FĮxŠŠ„"Š™5 Š Š Š ŠsÄÄbÄuÅÅ ÅÅ2ÅEŠ Š{²OŠ Š ŠLŠYŠd‹XŠ ŽRž]ĄvŠ1Š<›#³¹Š›#³¹½OЦ5ØŠF”@±Ą`ŠŠŠŠŠ7Š8’5’7’8’8“”—}›œœ·H·_øRøVøn½v¾ Ä ÄÄ> ‰ŠŠŠŠOŠdŠqŠŖ· ‰Œ ŒŒ(=žž^ŗŗ$æR‰•G“‰ŠG“‰| ‰{Œ]›f„~°B³4³F³Gµ=Ą;Ą}‰z‰ze !„„“f‰z‰z‰zø»j¼¼¼(‰vØe‰vŠmŒE“<Ŗ¬¬2³F¹A¾M¾P¾TĆ8Ć<‰s‰t®z‰s’œœ2œ? „VØ®q®~ÆLÆW²&½h‰s„u„{Ŗ>‰s‹G‰s½`‰r‰r‰ræz ‰rŽ Ž ›Qœž$„!¦1©=¾gæe‰r‘f“;ØRÅʼnr‹I‰q¹>‰q«8‰q„§u«7»n»{¼‰p‰p‹}Ž—y‰p‰oŒDŒEމo‰n‰n‰n‰n‰n’A ‰mŠ+Š+··rĆĆÄÄ ÄÄ>‰m•L‰l›¦{‰l¹,‰k ‰j‘H–c¤;„=§LØÆ)°1‰i‰i”‰h©JæJÅ ‰hØs·køK»z¼ĮK‰h‰h‰gŠ Š+Š0‹6““““4“Y“k•k–– 3Ø<Ŗd¬¬ÆrÆzĄw‰g³Z‰f‰f‰f–5©S‰ež%©T­‰e‹J„"¾¾6‰e‹}‹M”b¢*¢F„q«« «B®r®rÆ±æææH‰d‰d‘G”%ÆP°3‰d‰c¤¦o© ø|Ä{‰cЉcœF°l‰c‰c‰b‰bŠ:‰b ‰b‰hŠL‹a’f’l•\•g•k•wŖe¬µ:‰a¦.‰a–k‰`–m‰`ĆMĆ}‰`›rœjž¦*‰_*’W”N•bšwœC „B­o°F³h¶7·e¹»<¼¾2æ|Į@ĀĀM‰_‰_ ‰_‰y’}“4˜b› ¤¤y¶H»r¾ ¾| ‰_‰h‹:’~›"¤¤;„|¦­µ6‰^¤!Æ3‰^ŠŠŠQ ‰^‰y‰ŠŠŠŠOŠVŠdŠqŠ‹dĀE‰^‰]Žs“y®M»zæhĮ,‰]’#ZØJ«+µ¹ ‰[ĆXÄÄÄ/Ä<ÄJÄqÄuÄyÄ| ‰WŽ.š4«Q¬HÆdµr½XĮ;$‰V‹Ž*& .“D—™x›aœCœQŸB ”p£'£l¤C¬$­­­)®*®-®Q®a®}±y³³?“2ø¼S½$Ā ‰V’PŸB£P°²zµu·t»8½$Ą ‰T‹‹%Œ‘H“–X–sž0ž2·2½‰S&@¤ ‰S‰_h§®yĄhĆ7Ć<Å* ‰S˜:›®I¶¶¶(¶6¶M ‰@i‘‘‘B­ÆÆµTµW¹*Į‰=œŖ.ŖkÆ&ÆT¹»k‰9‰aŒhŽ˜U ‰8–˜U›e ­K±»,¼S‰6±S±j‰2‰1‰$‰#‰# ‰!‹r˜žI££M„«W°·PŗM½6Į%‰ŒN’Ćq‰• \¢{½ ‰“V–N«{¬ ƲWµF·o½i‰Š-‹*‘(“3”%™h™yš.œ@œW¢<„\§¬AÆ\»&Å*‰ŠŠHĆ ‰æ‰§©m‰0‰‹:›{‰‰_¢2؉ˆ}Œ“{—µdˆ}‰>‹|+’’H“™ ™DŸ1¢2£4„YØŖ-ŗNĮ-ĀT ˆ}Ž=‘?—œ2 ^±y“UøP¹½gˆ}£a©Ŗ²ˆzŠX——"ˆzˆy˜!ž ˆy“3“{™O™Rššš¦'ø½½bˆx²A¼}ˆwq &«®®g¶eĄ`ˆv‰ ‰(‘ “D”2”S— ˜0˜F˜YššsPZŸY„ˆtˆs„ˆrÆLˆr[œø| ˆrŽœ`§.ØL©²A³$¶B¶Q¾_ˆqˆq©ˆqOˆqˆq‰ø~ˆq­ˆp\G’— ˜œœ)œ\°³*µv¶qÅÅ*ˆp‰>œ„Æ'ˆoœ+§Uˆo’£u¤²?¶s½gˆm‘/£?¤:««m³H³wø'ø[øgøgæuæzĮ! ˆm•j˜pš›R›UŸ o„yŖ6­#·qˆkˆm‰Lc›zœ œœ6JŸjŸj „„\§Æ&Æ4³`“f·~»\½½p¾kæĄ[ˆk ˆi‹{Œ Œ+“mœž2¢@¤-°+³4“'ˆi‹P’•c„V«~°ˆf‹“Ÿs¦Aˆc&˜(¢9ÄNˆ^µˆ\ˆ\‘`‘j» ˆ\¦^®#¼½[ˆ\ˆ]ˆ[ ˆZ ’|“”3˜0˜c™š.ŸSŸZ 4Ŗ:ˆYˆYŽ–b˜ ˆWˆY‹Ÿc³0ˆUˆpˆs‰‰9d‘œœ£ „„„ „µWøz¹ˆU®®@ĮSˆU‹œs²&¶,½_Ā;ˆT‘$’X–R6ŸZ„„(„0„_«-±³`æwĮ:ĈS‘%›2ˆS”cˆMˆ{›!±sĄˆMˆM”_²j¼a ˆJ®n±4±9½æQæXæ]ĮmĀ$ˆH™jˆHœIœd£kˆH~™š<E·g¾#ˆH§ˆHT®0»ˆFˆE®[²AˆE¼ˆEˆEˆDšq§SˆDˆS‹b‹f‹f’jˆDˆCŖJˆCˆB­$ˆBU‘Z§sØv·~»ĄB;ˆBˆpˆt‰9ŠR‹B‹YŒ,Œ^ŒoX‘A’$•L— —C—h˜/››2œ*œ3œHœx£}„„X¦7ØaŖ«:¬P­ ­&®®$®-®5®>®A®]ÆÆV°|±±D±^±q²u³µ ·ø|¹»)¼Xæ6ĮPĮ|ˆ@„ˆ@š}¤s§Ā ˆ<Ž 5£R«®(Æ]±L±o²*Ą] ˆ;•+•,”°@¹¹ˆ9ƈ7ˆ}ŠV““aš5žŸ  i¬H­/²2³¶·øB½i ˆ0ŽD”@˜š«AµN·1Āˆ,Ÿrˆ,ˆ,žU h® ²³-·ˆ+¤r«PĮYˆ+ˆI§]­1ÆPˆ*ˆ*ˆ*—Q—Rŗ+»Pæˆ'ŒM¬Åˆ'Ąa ˆ••{ž¦`Æ:øø4øP»GĀ2Ā2Ā3 ˆ’—'—T™2š›\ U­V® ±/±0ˆˆžžqˆˆˆ‰q~›§M¬s°VµdˆŠ(Žp’— ˜?t}ž+ž>Ÿ#   1”«yÆaµP»æ!ĄAˆ””9°^ĄĮ/ˆ¶ˆˆk’ˆˆVˆi–_”k§ŗ0 ˆ ‘V”r”r™Kša¬v°s¾ˆ ˆ‰`—3 w¦HĄ[Å!Å> ˆŠ””-˜F¤;ø6ø6Ą40ˆŒ2”4•›a›xœQGŸXŸr J”!”s£p¤I¤_¤~„¦!§bŖw¬¬d¬y®0Æ<°° °\± ±K±u²s²t³³#µe¶¶4·"ø ¼@¼D½¾sĮwĀĀ7 ˆˆŠv”-›A¤O¤S©iÆ@0ˆŒ7<“0”&–[˜6›œiŸ$ ”¢"¢-¢£Z£_¤j„C„}©B©MŖ/­9­D®4®>®^®cÆ;°1±(²w“µ^µq¶0¶U¹Z½QææĄOĮwĀĀM ˆˆv’m” ²1·o¹Ą{ˆ«‡w –o¦C¬@‡v9”~²O‡tø/‡s¶1 ‡q‰=‘#–—?šFœ)·møL»¼%‡pˆ*ˆAKL•G˜s™išktŸŸ[ x°²0¾= ‡pL’Q¢4« ­c¶¶)¶>¶b»9½,‡p؇p‡o‡o¶W·w½Y ‡oˆEˆIŽn®(®,®5³%ĀĀ/ĀT‡n‰W‹ Œ3w‘O’j“”6šT››Rœ{EŸg 8£t¦`§©¬n®bÆ.°Y·]¼ ¼%¼B‡n‘G‡n»|‡lĄ‡kˆ>–q£Y»`¾)‡j‡j‘S””©]æ_Įf‡i ‡iˆA’~“0ŸZŸ[¶w½\‡i–Z‡h‡g›>·Kø&‡g§{¹¹S‡e‡e’ø?¹$ŗĮ‡d‡c¢gŖ>‡`”Y”~‡_™=ž5‡_Œu¹.æd‡^“G 7£.«Z¼5‡]« «Ā"ĀV‡\ˆ~”C–}š} R‡WŽ •o &®“5½æ‡UzŸ;¤u‡TŽy‡Mˆ< p„G‡L’Z‡Lo–x(‡J¤=©CÆ_ ‡G=œœœxØ­AÆOÆV‡G§[­A‡Fœx5JÆV±o½e‡F•v²{ ‡F‡R‡T›?œ}¢<« ­X“w»æv‡E–N¬ ƇC‹8”z®L®b°[²g²¶s¼)¼+¾æ9ĄqĀ9‡C8‘™œœs ”}£¤[¤[„W«U«WÆÆHµe¶ »T»i¾ĀK‡C™œ w”|ƾĀK‡@Œv“,”^”z™°Z‡@w”y£9­(°µv‡@;‡@]‡?‡?‡>‡WŽ’^•n—šXE{”I¬N­4°f² “;¶E·^øp½¾9¾pĀ ‡=˜\¤|„7§§z®0®dµ¶·h»ĄO‡=‡=¦{¾‡< T’.’T“0—f™H›=›w ¢„4„c­%®®+®>Æ:°|±u²*³ “5“m¹¹!¾yĄ ‡<¹‡:§‡9‡9‡4‡4‡4‡8‡3”w‡2ĆĆĆĆ~‡1”fš: i¬1²²p‡*Į6‡)ØL‡)¾‡)”{Øn‡(ˆs‡%Š7‘B•J› œD «¬v°L°T±¼S¼VĄsĮ:Įq‡"ŒY›8¦!¦!Įy‡"އ!‘Lšq›&ŸCŸK¤?¦]Ø©gŖ5®~°D°H‡®}‡™¶y‡‡‡‡ˆAŒvV•M§SØZŖ]­cÆ7°°·ø»9‡Œk”f„ „R¬.®KøJ‡œ+¾ ‡‡Y‡˜z¼Qæ'‡‡ˆDX›b‡ˆr‡‡›2Ŗ‡‡•Lœ+²,¼ ‡‡œ+‡‡æĄE ‡•eœLŸk¦ §P³&³jæ"‡‡bŒh”"®5‡¾P‡¦c‡š(°Z‡‡‡Œz¦#·¼‡­E‡ ‡‡\‹‹Œ4’ ’O•—™™5™6™~šššœ9Ÿ¦¦¦z§¬Z­NÆCÆC·!»¾8ĮCĮ}Ā,‡ ø:ÄVc‡ ˆv‰(‹vŽ+WW+FTUfhi‘‘“D””3”S”X•_–E—˜L™-™/™6™9™P™S™š ššš š)š`›aipz{ŸŸX  p q„ ¦%§ §<§<Ø-©1Ŗw««R¬O¬i­­Æ.Æ6°;²n³"³o“`µµ=µQ·E·X·Zøøø"ø[ønŗd»=»O¼X½`½bĄ7ĄGĄ|ĄĮ#Į+ĮRĮdĀ) ‡ ‡ Š0”—%Ø}©X«k®l°0Į!‡ ‡ ‡ Œz—g£Q£k¤O§Ø_© ©.Ŗ-ŖK²|Ā ‡ Š>S‘&”n”t¦1®lĄb‡ ˜W›œ, ,” ¤^„„0§]Ø ØW©©ŖŖsÆj³ ¶$·Ą5‡ ›i‡ ‡ ‹Œk‘4’V“|–S˜b™Aš§>¬³Pµ»A‡ –™L u»7 ‡3ŽŽ¤ §a«%¼‡‹'9”ž1¢/„Q‡œžM¦2§@§@©)‡Š—`±æR‡¦l‡Žv¦[§ŖæUæW‡Žw©^°uŗMĄe‡‡’L’z™š"‡‹‡øhĄĮ^††~‡™?ž»BĮI†~†~ša†~”8§ĄĄH0†}‡j‘@’””””—P˜›ižŸo ,£R£k£n¦9§[Ø Ø-Ø8Ø=ØCØEØFØGØiØpØrØuØwØ©©©©©©.ŖŖL«=­9²|“µ'µvĮV†}†|‡†|³X†{†{‡kŒ"ŒZސ'’{–^–b—T˜cžCŸm”¢&¤^¦P©T«?¬<°H»S¼¼|½<½Yæt†{š~æ†{†zšpŖ3†z‰{¾Ą\†y†y†xŠ:O“”(”C–e–o—d—h˜mš_›5>U Y n”:¬d­F­R®“ µF½{¾c†xŒA¢ ¾z†w†xŽSÆA†tm’F« ®D²z¶j†s؆r†rŒ#”-¬ ¶3†qžt¦4†p†p†n?†m¶ †mT˜a†m†l›§=ØØŖN¶$Ąr†lŽ’^¾_†l™æc †lŽH—„§V°n¶H¶`·Ā=†lš%£)ØUŖG†k‘k‘”] µt†jž(ž2”R“ Ä?ÄA†j‘+§†j—pš$œj†i«N†gŖ0°<¼†fš}†f†e›C¦ †d‡hˆŸ*£5¤aĄ5ĀĀT†V™d³8†V†T¶l†T‡&)†PŠ$Š0ŠJFL5‘_’,’7’?’O“p“|–8–<–W–a˜7˜m˜n˜p˜|™E™yššM›JœxwžŸŸL $ ;«|³W³|¾f¾zĮ2†P”†O†rc‘{‘|”g¢¤W†O‘a †N’\™S›:›hœZ”£p­F¾Z†L”•D»C†IG“pØZ¾l†H†H‹CMšX©Z­¶¶$¶a¶z·B¼ Ą3ĀH†G’T§ §6©Ą5Į_Ā!†GVœ§\Ø“ †FŠGŽ“S l„vØ©{°“ » æ`ĄF†E †EŒ“–ž(„%Æ_²Wµ@½i†B‘`¢B§Āx †@Œjt‘b§§L± »æ\†>””X¢¶WøI¼U7†>†L†w‡G‰Š0‹ ‹‹JJ‘3‘D••<•O— —/šr›aŸŸG  ¢=££1£N¤ ¦§ §§zØŖ«­@®®p°G±²d²w³³wµ=µJ¶G¶p··L½uæĄFĀ&Ā0†>§Cµ]µ^¶W†=‡· †=­<· æ+†=šh­<†=‡P†;œuµxŗ†;ŖaŖz°†;†;Ŗ$Ŗq†;†;Œq’D—K§3·L†:› †:‡[˜Eš9›*›w›zœœXŸCŸG ¢M„®|Æ^²pµ~¶`·]ø=½†7†8†A†A‡‘u›`£c£c„I¦W¦Y¦]¦s§)§IÆD¶¶¶+¶+¶-Ą`†7†7†AØ$¶¶+¶-†6— _Æ+±y²¼¼% †5Œv ,Ø Ø©tŖ*Ŗd“$æ†4øM†4²†4†I™œ#µh†3’,Ÿ †1†1†1¤Yæy†/ˆ&‘P“›DžŸ/  ”o¤6¤?«U­± ø» ¼¼FĮHÅÅ>†/‰jSR øx†/Ÿ4§%»j†.‹°° †-ˆU‹œŸB£„®}²&½_Ā;†+Ž0¾^†+™e·7†*‡q†*ˆ*™i°µ~†)†)¶]†"Žog¢w¾s†"†%‡aސA†"†%ĀpĆP†ŠsLš$¢!£/Øb««!«=Æ µ]·%·&æyĮq† †‡t‹LŽ%’a“6”1Ÿ±±x³j††‹ (=‘;˜6™2šJ›n”¦0§ØW©²¶{»HĮs††²1††-‹—U™šV›(›Hœ> 8” ”S§h¬lÆ+ø,Į††„†“&¼ †¾ †’_”¬n­®1¼1¼<½[¾9Įd†’’–_–a™`ž?Ÿ#¦q¦q¦rŗ1ŗ2ŗn† †A„7®*·Z¼Aæ+æ6Ā9†‘•$††ĄK ††G‡Š <‘E¦«a°Hæ@†‹$’„=½† † ‡‡<wZ|‘N•T˜A™ ››Oµmµq¶¶J·N¼æMĀ>† ”x˜/˜W™zš0›”XØ&«7¬r­E²²µ)µ*µc¶Cŗh† ’ Ø †† ’“JšŸ<¢$¢%£¦^Ą$†††­<† †ša›J›e›sœhžx¤X¦­.¼,¼I†•~œ=„D¦|§z¶\†’ •šmŖI¬v»\†Ŗ7ÄnÅ;†»>†­H…‡M\’ “/”œŸl„J„V„t§/§cØX©)©5Ŗ5®1®cÆP°D¾iĀ0Ā; …‰l’a“4›`¢¦~§RŖx²g·%Įi…}‡…}Žr”x¬t³…}§t…|…|…|A“p•vŸŸBŸSŸo£¬+µqµs¼\æk…{Œ Œs¹…{ŠZ‹‹t”1œQŸvŸw  £³`øøB½]ĄZ…y£`§§U…x‡^šu„8 …x† Œ,›+›fœ>«7«q­AÆ3µjĀ1…w†‹’F•C™{ø7…w‡^™»…u‡‹2‹qŒ'Œ;Ž^Ž_—š[š[ša›q”3”P”§h¬®“>µ<µZ¶æ B…u…u†*†S‡‡8ˆ>ˆ_ˆbˆvŠ‹ŒrBHp‘‘’n’x“#“$“@”t•o———˜0˜8™I™[™mœNg”;”@”F¢¢¢¢#¢`£««"¬;®®³µKµOø?ømŗŗP»¼¼2ææ.æ7æ^Ąt …t‡Zˆ9’K”"•/•K•[•b—4š7špSŸtŸt¢¤©d¬E¬y­® ²=¶;ø¼¼^¼w½(ĄĀ<…sŗ…s®…q—OšœXŸe¤T¤~ØY©E©iŖ¬¬=¬\±+¶ĮĮEĀ…q›j¦Į\Ā Ā0…q†x‡’XžD”0¢¦§R¬]Æ8Æ@ÆQ¶!·"»UĄĮWĀ,…q††Š&‹+Ž{K‘:—U›:ž<¢3£b„A„N¦¦S©0©N°»TĀ,…p8Æ' …o†‹!’›E  ¤c©+®ø4Į?Į? …n…o‡(‹Œy?mI’ ’F“}——™™pšTœH£oØ Ø2ÆrÆ{° °¶'¶a·>»W¾Eæ6ĄkĮ?…lŸJÆ6…k…k…kŽx‘Q”z˜Wšy›FŸm„H¦¦e§^ŖŖU­?®F°S±“1¶J¼QĮGĀĀ4…j…i§Į> …iŠ|”"š'ŖH­Gµf¶-·1ø»3…i…i›m£_…i‡‡œj…h›mŸ®…h—T›M£g§­Z…h›œ{” ØO©K…g–2œ=…gˆ³,…gĮK…f§H¾\æ Į…f‰ŒN‘y’›j›kœp¤]„C¦!©6ŖŖ:ŖZ«f®³%·v·wø»@»W¼Eæ ĮJĀĀ…eŽv‘R…e‡A…eÆF…e…d…d W®®»A…dšG…c—z£g¦eĀ"…c¹d…c…bˆC‹OŒ}–D§øz…b…a‹Ÿ…aˆ#™¤SĀ …a…a˜1¢¢0£­k­m­r¾Yæq…a…a­y …`“›t©3²&øĆÄ Ä@…`˜…`‘SŖ…_…d‘v‘v …^‡gŒ"ššžuŸZ 2 r¦{¶ZĄ&…]6ž J¢E­<…]†v‰e©T…\¦<…[‹Œ¦b³WA…[†5‡‡7‡G‡qˆ ˆ+ˆI‰ŒX’ • •9–z——?—V˜R˜S˜y™šUœŸ? ^”r¤/Ø(Ŗ« «­@­H­V®Æ(ÆHÆiÆj° ±o±y²²³ øøLø`¹2¹7»:¼¼%¼A¼U¾¾%¾1ĄkĀĀ…[¹2…[†F‡i“|¦¦L³ ³M…Z‘]‘^Øi³d)…X‹zŽIY_F••+————-™šyœ>ž~”V¢%¢.¢@¢X¤zØ!Ø2©Y©i«««l¬.®p°<³N³X»+»DæææuĀR …WN•^›z«T¬K²y· ¼y …V‰t–z„4ƱF²²Ąo…SĆ5…Sžf¹r…RŽT™\©q…R–j(¼o¼r…Q”)ØKŖ2±Hµ¹b…P‡˜,œ²Uŗn…P…P¦_…Pœq…P…P•M…Ob”yø…OÅ…N’5…NŽ ›qžĀ…N …N‡c‰NŠ1œ$[”x®)Ʋo¼zĄ\…L‡¢*§:¹f …J……†††J‹ŒuŽŽ Ž Ž ŽŽ™ šŸ„N§Z§]§c°°7°8°<°Eæ/ĄĄGĄOĄ]Ąi…J•›|øl…J…I…J…f…mŽy—z˜+›BžfŸd£X¤U¤V„7§2®®Æ@¶!¶!·}·~¹¹:ĮĮLĀ…H®i…H…p”4”§B°\Į^ …C’ œ^žŸz„v°I±±A±Vŗ …>¦…=ˆ…=Š@ŒsŒu0” ”T–_—x˜›:_ž2ž¢D£2¦~Ŗ?¬a­~±&»<»F½æTæ]æbĄYĮA…=‹@˜X›#œ%œ^ŸS¢£{Ø!Øz­O°/°@·_·{…<…<…< t…;…;‡9‡>™™›z®E¾8…9¤ …7‰m“I˜l„ØQÆJ …7ŠŠA‘‘Z’:—}˜lž·r·sĆ},…6…h‡‰Šq‹|Œbސb‘‘’;” ”5dh E ”4”}£9¤§ ©/«.«3¬9ÆZ²³1³F³S“ZµBøEŗŗP»w¼¼:¼YĄ:Ą;G…6†U‡ Š/ŒZŒb’O’Y“ ˜Cš šCš]šn›8›^›q›}2\žTžUŸ Ÿ#Ÿ]Ÿ s”!”4”6”Q¢ ££ ££Ø7©]ŖQ¬g­r­|­®.®.®p°°j°r³“9“;“<“=“E“o¶¶G·I·s»8»U½½UæXĄ]ĄbĄrĮs…5‘x¤!…1“J½½o …0’Vš›nx§6¬*¬*±?±@¹Ą=…0°/….….…,=­…,….…1†T‰Šm™[œN©2²[³@³Cµ·$Ą…+‡xŠ;&Ž”0•Z˜J”R”¢_¢w£/¤«Y¬ ¬­°i±,±@±d““EµLø)¼¼WĄĄ@…+…6‡9‡R…+††F•˜<™C™y- ­'®°3ĮP …+†|—®Z³W¶K· ·L»½Fæ?æ@æc…&ŠŠ}‘ ‘'‘<‘<””Ʋ ·SŗdĄD…&eŽw‘’#“h•=•U— œœs„„[««ÆÆ&°M² ²,³^µ~»X½_…&Žw‘’#“h•=— œœs„„[««Æ&»X½_…&‰}Žb"“h•=˜|žb w£?„ØØ7Øn®~°&²W½_…&ˆT’#”””#•=›œE¦««<²²\µ>µBµKµUµUøE»q¼2¾¾¾"¾=Į,Į:…&…wŠ?£?¦©S²+µBøV¼4½\¾Ą|ĀwĆ'…&‰^‹Ž!’•N— šœ¤ŖL«¬Æ ÆY¶¶¶zøGøpĄ…%‰]…%‰TSd“$”#µ{…%…X…z†N‡"‡%‡M‡dˆ>‰ ‰‰‰?‰@‰RŠ/BGGL`ŽŽmE\w_‘‘“ ““@“v””” ”Q”R•••E•`—˜8˜D˜Q™P™d\hjŸ Ÿ Ÿ8Ÿ` . K N _ v |”4££ ¤ ¤T«"«2«s«y¬P¬T¬­­®®n®p°"°#°'°i±±1±2±9±W±_²²²³@³C³]“nµµµ9µ<µTµ\·7ŗ»"»%»&»G¼1¼Y¼}½ ½o¾3æ_Ą]ĄtĮĮĮÄm…%‰?‰?‰TŠq 7Ž&Ž&‘B“!“h“k” •xŸ?¢f£«?³…%…3Øg…#Œy˜y®4…#ØIØI“U …#‹;–›ØJ®wƶ¼\ …!…kŠ+žĆ5Ć6Ć8ÄyÄÄÅÅ*…!… —n … ‰‘.“V”6}²WµF·n½iæ Ā&……1…‹D–˜R„e«Eæ ……s…s‰(Šr”H >¬ ±ø&¼ĄG…Š ’q“M–_—o™\›TžhŸx”¤R¦­%±:³D·2ŗ/»C»e¼:¼JæĄVĮĀ… …ŸlŸ}”v”w„@„s¾zĮ^…b”p…‘”3¤fĆÅ,Å/……¬l¼.¾o …‰8“+›#œ®\²µ|ø/ŗ=Į$…‹8Œ,m’z“z™›3›x£)¤y­"® ®%Ækµµ@µ~¼\½L…… …“0“2˜5¤r¤w¦N©n¹7¼~… ‡=‡EˆD… Ø~ÆMÆ`… … … h8’$’Q’|“c›yœ£?¤6„„«&­®8®E®SÆ'Æ,°a±t²l²y³dµbµx¶v¹K… ‡<ˆI‰VŽ-’K’k•E— š4šXœH£t„&„3Ø6­2®²|Ą!… … …ސxšI¢ ¢KØ:­v®®Ąd…¦ …‹!{¤R¤g¦ Ø%Ŗ ­:®h°°°L°u³h¾jĄ3Ā'Ā)…‹!¤H¦¬!²1ø5Į?…•}šfœxuv¦q©0%………n†_†_†v†}‡ ‡‡‡‡‡dˆ‹Œc‘k“{Ÿb¤R©cŖ!«q­XÆ/ø5»JĄ4Ą:Ą;Ą<ĮIĮ[Į]Į]Į_ĀS…ˆ{…»j…©b:…… …*…w††>†f‡j‹ŒgŽHZ’G’_’j“p”•••T•n——'™™j™{š9šh›4œ?EŸi”I¢N£oŖŖ*ŖV¬N¬­4®#Æ,ÆT°f² ³%µ¶Q·^ø~¹$¾9Ą!ĮVĮ~…†>‡i’›bœu¤X§3§`Ø ØŖV­:®»W½UĀ…µµwĀ…†=’س$»a…–~Ŗ Ŗ$…†hI—;ž{¾c „ˆzŒ'“ ”“Yŗ„}„}ŠŠM1K67:¤R„*¬¬¬U®®W²Z“ “C“~“~æ>„|“T””b¢±G„|Œ}“™A™sĄ„{Œ ±³A„z§Z«G°1³0µ„zøø"ŗMĀ5„x†Q‹Œx}”VBĀ8„w„wˆ>Žk‘“/”–››Qœ œs¤§tØØ9ØcŖh®1ÆO±xµBµe¶^· ¹¾iæ„w„|‡W„wŒqBE™tš {Ÿ ŸT q¢N°6°;æ0Ą„v——4„_„v‘„uŒ.©Z„u‰mŠ-‹™dŸ2 !„„[¦J©S«,«vƵDµGæ ĄuĄ| „u…$ˆw‰/DŽ%³`µ¶j„u„u“"„r»e„q¤ ØE³3„p„p‡RÆ„o ·l „m„o†U–f–p–pšFžV­8¼Į_„lŠ ŠX„im„h…1‰2m±XC„h…†‡‡‡\ˆ'‰d‹Œ\’Q’|“+• •^•_•r––K—›TœœœEžPŸŸLŸr % w¢£G£]¤G¦E¦vØT«"¬5¬o­­E­Y®4®]Æ9°#±±±?²²a²t³'µ]·Kø ø/¹ŗ=¼\¾(æĮ$ĮGĮmĮ~ „h…q‡[ˆ~y’F’j™¢M¤]°g„hŒTŒV™™. „gŽ,•™š}›|§/Æ,µf½„g1°V»n „g†ˆ Œ,1’P“•—„§»n„g«P„g…{Œqy¦d„f„f› ¼„eØ„e†/Ž9E’-˜4Ÿ4««QÆ)µ½:æĄ{ĮĮĮ0„`Œ˜s¤Į „`ˆZ  •A™xš›W©„`ŒxZ——/½c„_„_„3Æ`°„_ˆrb„MÆiÅ, „_›  Y””_¤f¬IøFæo„^%‘yžR®$®>°±„^‡7ˆo‰y‹:’“:•K™ ™~› £&£v¤9¤N¦©j«6°a²@¶z· ½l¾*ĀQ„X‡8‡<<AT’.”n• •9—?šU„4«¶%øLĄ Į+„W“˜.›2žžpŸO„3«K­­²|³;“½pæo„W‹9Œ+K”>—™{œ " ©6¬$­³%³vø~»¼V¾OĮ „WŠŒ“)˜.”9“i¼½„U „U…z…{†††††‡_‘]‘^’M”~••T•~™™=š#š#œzœz”1¢pØi®²¶¶,¶R¹ĮU„UŒw”~—+š 7£.§,®®®)®A®KÆT²µtøFĄX „T…‰P‰R““[”j—Sža”!"„T……e‹\‹mŽSŽTŽi”0•&—L˜'š_›> ”u¢;¢]„P§N«3«dÆE“zµµµS·<ø¾ĮĮAĮh„T„cÅ„S1ž8„Sˆ'‘(œ} 2ŗ ŗb„S…G‹Z*C”P–™D }¢g¤°4°z±²TĆÄ?ÄAÄC„Q8Å$„Q…8…?…@ŠŠ/‹LŒŒY)+Ž B‘5”••c™?™\š š ©t«D¬¬|““~øSøS¼6¼6¼?½ ¾æ2æ{„P‡2›£ĄT„OˆWˆY’—F LŖ²„L‡(“ “ „L‹‹A‘_œF®?°l±^„K†-†S?„K=¢¤ÆU±?±?¼^„JÆ„J‹”=”@£&£v„««<«E®\Æ&ÆU°a²!²?µK½_¾8Į:„Eˆo‹:³k8„EŠŠ&Š+‹G‹b‹d‹ŒŒŒŒ7Œg£:£>£E£H¤¤¤!¤2¤j¤o¤xŖ¬ÆÆ ÆÆÆ°d²C²I²Q²_“o¶ ¶eøB»n¼¼ ¼¼¼½r½x½~½~¾¾ ¾ ¾ĀBĀE„;‡,‡/‡/ˆLˆ]Ž”p•ž)žt ¤i±&³4Ąf„8† ††LŠŠ‹JŒNŽdŽi‘/‘5—U˜2˜4š\ž_ŸI q£d§©Ŗ8Ŗ?ŖW¾Wæ „8Œxm~S’?’~“-•™šX›NEŸ >¤^ØvŖÆ7°Sµ'µ(µ(µ)·gŗQ»%»?¼ ¾Ā„8™s„8¤„7„7ž=„6‹T„5–C°,B„4„5‡2ŠGŠHŠQŠ_ŠjŠmŠn‹E‹OŽ9ŽQŽRŽXŽZŽ[Ž]Žb+`“7–s—;—G—G˜˜˜˜Zšw›T›XkžYž_ž`žkžsžz :§6§i©gŖN“#“>“C“H“s¶··1·2·A·E·yøM¹ŗ#ŗ#ŗ$ŗn»¼d „4œUžV (Øv¼$Ć7ÄQÄSÄzÄÅ! „3‹PY‘žV„„r©¶mĆĆ„3†Y‡EˆIŠ‹BŒ(Œ7ŒS‘ ‘n’!žj F©SŖG¬¬{°'µf¶x· ·z»½0æ`æbĄuĀ`Āb„3Œ(Œ7ŒS§N©„2†w‹p‹t‹w‘/”˜T›„hرM±NÄ„1„t„|ŠxŠ{‹M‹^‹mŒŒ%Œ.ŒKŒg „1ˆ—Lž~¢I„/ÆP%„-…hŽMM”2–™/š,šz   _„¦ §m§sŖL««l«m¬0³³ ³d¶uø øøøC¼ ¼½ ĄĮĮ.Ā7„)„+‹/Ž|”4– šu›?›Oœ\Ÿ\”{¤G¤b«®Y° ²n³X»*Į/„(¢Ŗ@øe„'¦ØW„&„&“©y„&Ø„&„%„%…dˆ>Š ŽtD‘;—m—u˜˜qž9 m„§7ŖŖ;¬·{·|ŗ.Ą_ĮC„$‹ŸzŸ{°9Ą;„#”X¬4„#“;—H n°0³Y¾f „#„X‰l‹8’šw›¬/®I±A¶¶a¾„#– 9øn„#„$žK§„"…O„"Ž Žb„«y„!„ „'„1„O„p„z„|ŠxŠ{‹9‹>‹OŒR7„ … ¾M„Šr„„‹'•˜=›w¢.¦ §®IÆ6²u¶;»P„„7ŖS„…H…o‡‘e’ ’›B›{Ÿ~”£h„?¦Z§B§QŖ%Ŗ8®#ÆB¶T»bĀ+„ŽŽ”³[„ŒD˜ši›U›Vž G„…+ŽŽ£ „°„”œØy„Œv„” §\µv„‡ ‡(ˆ—› S” ¢-„T§\§mØ©©ŖŖDÆg°°µy¶xæcĮ]„„„ „’K”1– ”ÆuĄ!ĆĆDĆDĆR„„Žb¢ §¹ ¹ „…L…O…c(‘l”W—j—u—z˜f˜h™?œ{¦e¦e©æ Ā"„… Ž-˜(˜)œHž£(«WÆ\“xµp¼sĮ-„†lˆ˜/™›œŸ¢.„3¦9Ø Ø0ØrØuØx©ŖŖK«8®Z°ø|ĮY„[’H—¢*Ø „‡n•U™ œs®wÆH²/¶9Ą Ą„Pž3 l愉&¾x „‹Q˜Y©ŖÆ(·ø%ŗZ»z¼4¼4„‡‘Jŗ„‰%—S m„ˆ)Œ=Œ@˜›8œRœ^ŸHŸO±»_¼L¼N¾EĄcĮĮ>ĮRĀĆ7„‹4 H»5„„ øeæ3 „ ‰ ›iœ9Ÿl  ²“K¹ŗ0¾YĮa„ ‹#(•›gŸpŸp O¢O¦)«¬o°}±n²<·r»gæx„ ™Sœ2œ5¤b§+©N©^©uŖ«­­.­cÆ;Æj°P°s¶„ ‡“f·wĮ„ ŠE„ …ŒN”|«M„ œ{„ †yˆ.šR­k¼+„ˆ=‰Œ4Œ™œažF¢6¢D¢D¢M„I§ØØŖ0°°f»ĄZ„“m™ĄZ„”/Æ]°³µO»„…c…f…j†e†f†m‡‡ ‡ ‡eˆE‹‹‹ŒUUVWŽyŽyŽy‘N‘a‘g‘g‘t’\“q–y˜››››4›e›e›f›f›i›i›kœsžGžgŸŸkŸoŸz    r u¢¢>£ £V£Y£Y£p¤@¤A¤N¤_„M„U¦¦¦8¦F¦V¦V¦W¦n¦o¦q¦}§§§(§*§=§OØ Ø5ØNØcØqØxØ{©©C©q©z­2­6®Æ/ÆkÆk°°X°]°^· ·|·|» »:»@»`¼Q¼wĄ"ĄYĮĮJĮSĮ_Ā,Ā4Ā7Ć2ĆqÄ|ÅÅÅ„„§}„¤ ¹K„„„„½h#„…l…m‰S<‘f—P˜^œ^ŸO ”#”E¢£C¤9¤M¦¦"§Ø2¬r­'°°°@²O·(·.ø»#½bĆ5„†k‹qŒwæ-„„„a¦~„©9„” –_¦\©0³Eƒƒ’l’mƒ”)·tƒ~†T‡5Šr5™[ž;Įƒ~‡5˜{ ƒ~†i†jŽOŽQŽds‘”W˜Tš?æ> ƒ~…{’“L›9œUXŸK b„ ¬?ƒ}‰G•?£ƒ}„£dƒ|ƒyµƒy”+žŖXæRĀ ĀĀ ƒy„S†I†gŠk‹Lnt–tžžXžg¢R¤W¦4¦K§aØ#©m«_³dµ&·}ĄsĮ1ƒy¦7ØO ƒx‡‹~™;šY„§ Ŗ­P­U»Eƒv¹ƒuŽ{Ø@ŖY“v*ƒu„„W……/ˆ!-HŽŽ Ž_’l“B“E””n”}˜.™B™WŸ# 0 0 9 O¢x«"«3«b«g­~°“iµ ·G·Hŗææ^ĄĄ<ƒt‹J’ l¤ ŗ# ƒs…0‹P _ž  -³:µ%½ƒqƒr‡v”R¼lƒq„K…?R‘t™pšr›S S£4£L¦%¦*¦uŖ|«®|°l“0µ|·v·y¼¼$½jĄaĀ,*ƒq„K…>…z†uŠ(‹ Ž1‘E‘b”˜?™™ ™™pšr›SŸC R”1¢=££4£L„5¦x§<§g©9©R«®9®|°l²$²M·o¼¼$Ćƒq‰a‰e ƒo‡2‘+•*˜+žc”¢S¼d¼hæ1æDƒnƒmƒnŒ%ƒi¢Cƒiƒn†n‡–™A„u¦Æ-±M²a¶'¹¼zæqæqĮ8ƒh‡t'š+¢:«ø/Ā2ƒf˜˜q”ƒdcĀjĀjĀmÅ< ƒd‡i #”1ج¶¾tĄ ƒd…MŠŠ‹uŒkŽ"—x«4“1“Kæ-ƒdƒcƒc‘8š@ƒ`ƒ_¤M¬pƒ_†r‘w“4šA›M} E£q£rŖ»c»cĮ^ƒ^Œzƒ^ƒ]…uˆ)’a•k—'™™/š#” ”Q”\¢«M¬*±[··ƒ]µNƒ\¢7¢Uƒ\(ž8žM”” «|ƒ[ƒW… žaŸ„s§§ŖNƒW‘‘]’”–[ž ~„=§§"§DØ"Ø8©m«°I±;±@Ą/ÄNÄOƒVƒV‡f›D  ­;ƒV™™­;³^ĮVƒU‹Ą" ƒT›C›h  £X®"®_µ'»WƒT„tŠ ŽX ‘“K•@–Kœpž=¢"¤„°C±¼hæĄTƒQˆAˆT‰‹(“/›y@”F£(¬r­Æ°l²zµG¶j·]»i¼4½½bĀ:ĀD ƒM„…' „ ­®[±±ƒL‹(¢.ƒLŽZŽ[­³SĆmĆqƒK†† ‹|‘R›nœ_Ÿc„H„N¦8¦P§§4§>¶R»aĄ\ ƒKY”[˜Zž „¦"§ Ŗ'Ŗ]¾/ƒK††X‡T‹‹F>’•K—˜Z™œœ(Ÿj¢,¢<¦,Ŗ@®lÆ:ÆV°|µ ¹»)»Qæ7ĄƒJ…*†}<‘j’™› 8¤E„ ¦2¦N§^©RŖB°SøJÅ#ƒHŽ"‘Z—vŖZ«n·rƒH‰d ›¦OØ7«mƒHƒH½(ƒGÄTƒF„ƒF‹@³iƒE‘W§H©<² ær ƒEœyŖp¬"¬X®n¶!»TĮmƒE…e‡k c‘s‘s‘t‘z™  <¤b„¦#§C©Ŗ Ŗ Ŗ[±K·x¼½Y¾¾%¾,¾<ƒD¢%»` ƒDƒD‹'‹5‘{‘{¤V„A§D«8·~-ƒCƒc†f‡4‰g‹ ‹zŽv HR!v‘V‘k’’G’W™š/›oœkœvžvŸc¢B§1© ©ŖŖ,ŖdŖl­NÆ;°.¶P·vŗ0¼zĄYĮGĮyĀ ƒCƒC„GƒB…_…x‹%›z§³DƒBƒV†eˆ ™3›/›CŸK¦«i°°° ²$ĄƒBƒB†ƒB†A†A‹m”Fžc©(¶¶¶+¶+¾RĀmĆpĆp ƒA…L†}‘=œ¢:„>ŖŖ}®U#ƒA„†n†|ˆmŒYKŽ Žg’n’x“• —R—d™iŸ-¢h„h­b±²;“U“mµ<¶.ŗŗ*»½ Ą.ĄKĮGƒA‡’nŸ7 Ø@Øm©X«.®j²+µ~ø5¼&ƒ@ˆ,ˆ^ŠG‹‹-!‘%’Q’e“P”&”q–™=šX¤¦L§Ø7©^«m¬S®®!Æ,°+°V²²s“qµmµnµ}¶/øhĀ4ƒ?ƒ@„f…X††:‡P‡tˆH‰ ‰8‹‹‹3a‘F‘`‘j’’}“““P“a”"”K”`•C•g•v–y—˜˜.™K™hEbžž(ž1žnŸ  R ^””V¢¢}„Pø5 ƒ?ƒA‹&\bŸ¢?¦²T·% ƒ?ƒA†s‡‰|‹&›lœo¢„ ¦A°,»Nƒ>…8…@†#‹nŽU‘(•p–A 2”“'“)“-“Vŗ%Įƒ=ƒ|…\†~Œ]Žq.G2¢=¢~¤J¦<ØjŖ#ŖH®(°"±[¶^·pæ ĄiĮHÄÄ ÄÄ= ƒ=†>cŸn¢ £¤B¤J®gµsĄNĮcĮƒ<¦mƒ<ƒ<ƒ:‹&‹d—v®"(ƒ9ƒAƒL…†q‡/‡^ˆ[‹‹gŽt08]‘?‘m‘~“5“zš7œ\wž<Ÿ$Ÿo¢3¤y§5©¬E­X­Y³Ą?ĄDĄSĮvĀRƒ6ƒ5„#ƒ4ƒ3ž­+“` ƒ3ƒw†Uˆ)Ž^ \¢1¢Aæ?ƒ2‘h ƒ2ƒD…;‹!Gž-¢.ŗXŗXƒ2‰>Šr‹>Œl `hŽ _”—œœœižŸ2   _£R£f®®Æ³`Ā)ƒ2ƒ1›ƒ1ƒJ…*††0‡CˆB‘h–›9 5Ŗ.æ?æfæpæ{ĄĄ ƒ1ƒ1ƒ0„r…n‘‘|””+š›Q¤>Ø© ©©=Ŗ)®ÆLør½\Ć5ÄFƒ/ƒ0‰ “M“\–DĄ9ƒ.ƒ-‡Œb˜I ¬K°ƒ*ˆ MR“Z•n—$žBžC”p¦¬(ÆJ±+··PŗTæƒ'’,’/’0’3’3’n’n’x” –{——a—b›tœ-"”¢!“<“g“i“j·QŗDĄKƒ' š^šeMƒ'ƒ'ƒ3ƒiƒz„„c……p†0†d‡U‡hˆˆ*‰].K^ŽO  [‘’n”P”o•_– —-›?œ*œ:ŸŸN K K W””!”c”c¢0¢0¢b¤¤X„R¦4¦Q¦n§sØØ-©2©2Ŗx­­­WÆ=°2°G±U²NµT¶¹¹,»2»O»[¼¼)¾{Ą7'ƒ%„„p…‘’’{“<–B—<œ\ž3ŸRŸo¢E£U¤B¦¦;¦Y§ §§"§SØ««F°9±J¶·søŗ2ŗKŗKæ[Į1Į2Å;ƒ#ƒ$‰v`‘‘4¦Vŗ ƒ#ƒ#£xƒ"ƒ"ƒ"‰qŠf7–µƒ"æ#Įƒ"‹\Œ=‘—G—Gž[ƒ!‰w‘4–S¬ ƒ „… ‡8žžž=¤B«8­%Æ`æĮƒ‰$‰’¦*±Uŗ ƒ©z³eƒƒƒƒ8ĄK ƒ„„%‹,Ž"‘N’–`©r¹4½ƒŠtƒƒƒ.„$‡Ÿ§F©q°$ƒ5ƒ„P…V†6†mˆŠ7Š‹G$O‘“?“E”L•R•\—%—+˜˜ušc›wœ|Pžž¢¢=¢I¢f¤'Ŗ«Z«o«¬¬pÆ Æ(²|³6³sµW¶ ¶2æĆ*Ä.Ä<ÄI ƒƒ†‘~“K¢3„J¬>­Z°@±“ƒƒ…p…q‘Qš@£iŖĄYƒ™7ØKƒƒƒƒƒ „'Œq;šš% y”­?°4µ_¹ æ%Āƒ„p²p“5¼¾¾8ƒ‘2ƒ“6 ƒƒ0‘;’{™%™2™GŖ"ŖX°Lø ÄDÄEƒ¦Uƒµlƒ°µxƒƒœJÆgµeƒƒƒƒƒ—kŖækĮ/ƒš8æiƒ…9‡*b––e¬,·s ƒŗ>ĆĆĆĆĆÄ Ä4Ä6ÄVƒƒƒYƒHƒ…T…Z…y††OŠA‹` ‘F‘T‘k‘x’’d“S”%•E•`–|˜>™™$šd›9›G›M›eœœ=œ_8ož*Ÿu¢O£+£W£Z£n„,¦0¦R¦o§§E§~©H©lŖ2«r¬#­8­;­?®®oÆ-µaµn·$·oø2»»3»L¾\æ?Į ĮlĀƒšIƒØdĀƒŠ=Ŗ ƒæƒƒƒƒ¼ƒ„‡z‡|Š8 ĆÄ*ƒ“Y”l© Āpƒ—sƒ µ¹Xƒ #ƒ ƒƒw„„„†b†d†f†gˆQŒ G6’e’e’f“n”Y—!—Mš/œ|wxž!žWŸ4Ÿ:£«±G³e¼?Ą*ƒ ƒ ’ƒ «g¬ƒ „ „x†lˆc‰^&?‘,“x B„C§¬­[­mÆ Æ±·bø¹¹ƒ ƒ Œ0Œ1Œ3ƒ $ƒ ƒt„ †`ˆ‰p‹@‹M'‘‘:‘g——^›œœ%£„„(¦?¦n§§®S®a±q²)³-µfµs¶i»p¾h¾|æƒ ‹U•t–X¬%“·ŗN ƒ ††-“D”˜0£§ŖH±+øeƒ ‰t|¦0§Pƒ ƒ„/‡E“&­/惉#‹^‹tŒeŽ$”H• •n˜h Y”6”N”e£8­}³_³y“i¹¼ ¾ƒƒ$…J†‘F‘M–c™.œ|žpž{¢t¢u¢w¤N¤g«R¬Z±/µ0·ŗŗ(¾b ƒŠ Ža‘&f¬Næ)æMĄ>ƒˆ%‹ŒŒkY›jžNžO£W°øø »cƒƒƒ ƒƒ“v”}š_Ŗm·»G»oƒ†Cˆ‰lŒ4Y–X—$oŸ”¢¢(„q¦\§I©r±K¼l¾ƒ‚}‚}§"ØØ%Ø=µ.‚zˆLˆPžz‚zŠ ‘6³I‚z:’ ¢§>6‚yƒƒQ†.‰|Š*Š\r’”•V˜<™B™H›wœ!œW!j D” ¢>¢F¢{£z¤„W©WŖ+Ŗ+«^¬­^®*ÆI°N±±q²)³*µ µr¶ ¶i·øX¼0¼~æææwæxĀKĀN‚x“:Ÿ`ŸaÆJ²·z»‚xƒ¦6#‚xƒ7ƒ7…t†m‡‰&Œ1u‘<’e—N—_š/ž!Ÿ1 z¢5¢A¢I©u«g®²³³z¾~æ.æ^ĮÄ+ÅÅ#Å(‚x“D‚w‚x³Pæ>‚w±.‚w‚~‚vŖt¬QÄD‚u‡4–1”w„fŗ0 ‚u’š}›„TØ_®FÆ3¶$»kĄ[‚tØØH°‚t†|š}‚t‚t‚s‚s‚s„‚r¹2‚r‚uœh {”Ā‚r‚uƒv„7…+†*†|ˆ*˜[™"šš›;ž„&®^ưM;‚p‚pƒ'ƒ'…^…^…^…d†y‡2ˆ'‹‹‹DŽs__TT[“D”•A–_›jœž[ž\Ÿl¢ ¢5¤G„?¦¦¦1Ø9«a¬¬4¬<¬X®l®lÆ^°°#°G°L³C·w·xŗ¼r½YææĮy‚o‚l‚lž,ž\ĮU ‚k‚n†M‡8‡bŸ>¢ £¬ ‚kŠ“Ÿ>¤"Øh¬z¹x¾q¾Į Ć]‚kv”•šw¢}¶ ‚hƒ „2†EŒhu+a•%•x—!še¢A¢O¤0¤d®^±±±0±N±P±}±}±³&»½½ Ć"ÄqÅG‚g†‹˜e°6‚g„^„}?°6æ7Ą Ąk‚g‘—'™]Ÿ©{ ‚fˆ_Ž•%–E 0«*«D± ··æP‚f¬¬%°',‚eŠŠŠ#Š1Š8ŠB‹ D’,’,’7’>’E’b’b’f’l’x’x““0“@“R“V“h“p“v”+”0•$•*•@•J•S•Z•t—#Z $¤>„ Ŗ)°3‚b— ‚b\‚a|”£‚a‚a{¦K©D°±¶Ā" ‚_‡Zb›œžnŸ:·½{‚[ƒ!‡”dŗF¼WĄvĮ‚[ŠLŽØ6Ŗ?µµ.‚[ƒ;ƒ;„c…x‡W"T™Sž5žZ„^„u§Z«Y­8°-± “2‚Z‚Z‹b‹f‹f‚Z› ‚Z„ K””yµJ‚Y‚Zƒhƒx˜Ą ‚XŒw‚X–žGžG£L©‚X©J ‚X…!Š“^”Rj¤ «“-»‚W‚W©]¬»PĮ. ‚W…c‡‹™bdž\ŸYŸ[£¦ ‚WO’^—(˜M˜M§eØE®#®-·h»P‚Vˆqš,‚Vžc‚Vƒ Œ œD£(²&½_æS ‚Vœz”£>£l§xØØAŖ[­'°¶ø{‚V‰p‰{ŠŠŠ"Š\‹‹K6A7‘’>“D“L“Z”(”`•k•o¤/©W«a¬)‚U…n‹ŒŒzy‘q”—š››4›i£o¤„„)Ø Ø Ø ØF©ŖŖJŖdŖd®@®nÆk°±D²r³V³X¶l··Kø~»{¾DĀ ‚U‚U³‚UƒG‰LŠ'Œ\“:8žžGŸ@””R¬4­]­]®±L““ŗ»¾dævæy‚U‚Y¦4©L³>øz»q½f‚T‚T ‚Tƒw†Šr‘+–„!¦iÆJ°E¹‚T…)†v“D·_¼w:‚S„2†!†B‡‡J‡J‰ŠH‹*‹+‹4‹5Ž|c‘$‘U””P”Z–c—˜7™3™Xš*tž,ž,ŸŸYŸ[ K¢&¢'¢1„u¦¦hØØOØV©0©cŖ/Ŗ>¬:° °?“¹ ½,¾hæ>ætĄ Ą6Į‚S—˜n³+»‚Q‹$‘n ‚PŠ.™™pœ\iq«¬Q®iµ>Į‚OU‚O‚Qƒ „‡"ˆˆ(‹‹-‹QvŽŽ]5<P“6””~•i–&–D–]–s——@—}˜?˜L˜R˜Y™ ™Pšš]œQœcž Ÿ :¤>¤M¦D§ØC© ©4©]Ŗd«]¬¬%¬.ÆW°²b³³³·(¹7¼f½ ¾TĮ.Ā*ĀDĀHĆĆ:ĆAĆaĆlĆmĆqÄÄÄ)Ä*Ä1ÄJÅ-‚O„%„q…{™¶2æM‚N£h‚M„Hq Ąx‚M‚N¦0‚L—jµ_‚L†5T“••<š|››7œ*¢­®nøKøQĄ ‚K…x‹&“B”„v®D°Dµjµ|·l¼Į}1‚J‚a†3ˆF‰y‹8dŽ%’$”t˜`š*š|œ]\ž ž0žR  x£S„„„[¦O§A§f§nØØ#Ø7±±C¶¶RŗI»»E»X¾¾X¾lĄfĮ:ĀQĀeĆ]Å‚J‚Jƒ —q—rØz‚I –‚I‚I…d¬U· ‚HƒH„kŠ —Qšž¢¬­,½æ&‚G"‚G…#‰m‘f”n”w— ™›VAž-£kØØU©aŖg«®;®]ÆÆ`°°O°|±o±s²%²fµe½xĮQĮ|‚Fƒ„„9„N„k…zˆ!ˆx&’ ”EŸ<”¢R£¦,©UŖ!«x«~¬¬¬j­W®U±.»TĄ‚F„N‚F„T†JŠ/wy’T’\”~–——™=¢ ­.°A°t²+²=²b·g‚F‚F\’Kæi‚EŖY‚E‚E•Ø/“a‚Eƒ@³/‚E‚D›¹$ĀpÄ‚D†SˆrŠ.‘\’Yš$œœBœqŸ. y„¦)Ø4ØV©UŖN®(ÆC°7³Aæ8ĮDĮJĀ+Ā;‚D…h E¢>£z¬9‚Bސ:™>° ¼X‚BƒyÆ]‚B‚A®F/‚?…>…Z†HkAMMSSS’O•N—_˜P™™L™nššNšmT 8«T¬ ¬L¬v­­.­R®M°°s²T³³dµ ¶·B·`ø-¼¼zæEĄ3 ‚>k’.˜[§b§l­S¶{Ą! ‚>™œKŖ°P²Aµµy¶J¾yĮOƒ6‚>‚D‚F‚G‚G‚T‚U‚Y‚^‚b„3„q„r„v„ŠŠ#Š9Š9Š9ŠEŠGŠIŠ\ŠxŠ|Š}Š‹*‹>‹A‹D‹F‹G‹J‹\‹a‹g‹sŒTŒ]ŒhŒuŒxŒxŒz[wz{|ŽŽŽ%Ž*ŽGŽKŽMŽaŽeŽiŽmMVVWYZZ^_  ,/8899:CDLSSTbssx‘‘‘‘ ‘‘‘_’,’2’2’?’D’F’F’G’H’H’O’O’T’V’W’W’X’Y’Y’^’_’a’i’j’k’k’k’k’z’|’|““““,“-“2“2“4“6“@“@“E“K“R“W“m“n“p“v””””””"”'”(”0”}••• ••••••9•@•E•F•G•T•U•V•Z•a•c•i•p•r•s•v•w•–––– – –E–W–b————————— —#—-—/—0—7—7—9—M—P—S—S—T—a˜`˜d˜v™™™™™™™™™ ™&™)™*™=™z™z™{™{™ššššš8š9šMšNšNšTšTšUšVšXšfšhškšp›K›K›L›N›O›T›p›q›q›s›t›|›~œy3QZ[\]knny}žž ž ž žLžOžVžbžsžxŸ ŸŸ7ŸSŸSŸWŸYŸ\ ( / o q t t”/”0£/£4£5£6£F£M„!„.¦h§§}ØØpŖŖŖŖŖŖŖŖŖ(Ŗ*Ŗ*Ŗ+Ŗ+Ŗ,Ŗ-ŖOŖVŖV«B¬+¬,¬-¬-¬B®M°3³-³/³3³>³?³@³A³A³B³T³U³X“““““ “““““&“.“=“U“k“mµ%µ(··.·L·M·N·d·t·tøøøø8ø`øløpøyø}ø~ø¹ ¹.¹bŗŗŗŗ#ŗ;»¼^¼`¼j½U¾¾ ¾d¾g¾g¾h¾j¾l¾l¾p¾p¾u¾u¾{¾}¾}æææ1æ1Ą?ĄsĮĮ4Į7Į7Ā ĀI‚>¶¶DW‚>‚c‚gƒ%„E„K„o… ………%…B…n†[†h†s‡,‡M‡Wˆh‰‰RŠŠŠ Šx‹K‹wŒ ŒŒŒŒ Œ'ŒMŒh$:kŽŽ ŽŽŽ&’4’:’<”W£8¤¤¤¤¤¤¤$¤&¤.¤f¤i¤q¤w¤x„ÆÆY°d“““Zµ µ µO¹ ŗŗŗŗ*ŗ;ŗI»½ ½½ĀB‚=ƒd…m£¾hĄĄ,‚=‚Lƒ „U†{ŠQŒ’^”H•k–`™k›ž7Ÿ¤m¦ Ø"Ø\«[«r¬¬y­K­c­~®o±M³T“2¶Iø¹2»*»6»_æ"ĄEĄMĄcĮĀ&Å%‚=®N¶D‚<„›%«)ø ‚<’f’f˜T™rŖ$·E‚;"©5¬X®ÆAĮG‚;ƒS’æB‚;ƒ!ƒv‹LŽOŽ^Žd’u”˜5œgž8žNŸv©f«!°5³:“Jææ]Ą#Ćk‚8‚8©[ ‚5†‹VŒr”¤\¦h©)·&¹"¼| ‚5„P…+†~‡2” œt „ „>³8³SĀM‚5Š –kÅ.-‚4ƒvƒ„R…l…m†tŠYŒRŽ\ .‘ “–R–S—&—Sš-š-ŸDŸM”"”<««H¬(®)ÆY²!²S²W²b·pø?¹GŗT»#»p¾1¾5Ą:Į‚4‚7’U°j ‚4‚7‚8’›lœm"ži·{»MĀ-Ā-‚3Œq’i™ ™)šM¢ ¢)¢6¤;¦¦.Æ;° µj¶&·oø»R ‚3‘p˜sš›U§d»c»dĄI‚2…_‘oŸc‚2‚3‡‹‹Žv8—˜)™™zš,šhœ*ž1” ¢„6¦7ØNØ}ÆĄLĄlĀS ‚2‹bŽz”Ÿ$Ÿ'Ÿh <¢U¤K¤]‚2œP‚1(‚1†‡e,•^—v›QœOœcb~žž, £h¦¦g¦{§©,©|Ŗ9ŖHŖZ¬B¬ZÆ8±x² ³'¶V·zø ø>»L»V¾¾XĄ&ĮB‚1 ‚/ˆ‰|‰|Œy‘aK¢„U§jŖ « «+ÆÆm³]µBµp¶R»[ĀĀ0Ā:ĀU‚/œ F¼]ĀR‚.‚-ƒK„Q„Q…8…?…B…B…G‹vœjŸzŸ{ P¢£_„o¦IŖ4¬;ĮĮB‚-Ÿ}‚,‚.„6„O…L‡c‡o‹C~‘T’’{“4”+–=–q—A—`—`¤S„t¦]¦h§§}Øf·w»_$‚,‚,ƒx„!ˆŠ'Ž‘&‘U’s•'—8™t›9œ=žž:žPžS # N„xØØoØ}Ŗ5­'®%®T° ±Q³w¼,¼0Ą‚,žF ‚+†Vžž[££{§j«}¬-»‚+„††H‹6‹Z‘9—V™ažf©p°?µŗT‚+‚Kƒ0ƒ:„‡‘‘f–U–U”¢¢4¢Q¼{æ4‚*…Q…R…p‰tŽu•`–kžQ”I”f¢¦Z°!°Y±T±Tµ µ[·ø%»*»3»R»f¼P½XĮĀ*‚)‘ZĀ ‚)ˆ ’i——k™ ™qž ,”J°m±t³»RĀI‚)ˆŒ¤\ØĀ()‚)‚/‚G‚Lƒ8„!‡‡,Š ‹ŽpŽr}‘W“5•W˜M˜Q›g .¢„«,«x¬¬*­V°(°:°B°}³³4¶· øg¾i¾}Į!Ā:Å$0‚(ƒ/ƒL„‡]ˆ‹0Ž}=N)F‘–˜˜ušš ›oœ=œ]uv   .”m¢¤:„r¦+¦C«¬0Æ]°7²o“=“>¶ø#¾dæ æ Ą7ĮR,‚(ƒL„^‡‡‡[ŠDvŽG’#’_”,”O•WšœQœY q¢Z£q¦ ¦:¦:§N§yŖw­'­4®G®f°U±²0²lø »8»U¼[½~æĄ7Ā/$‚(†‰]‹5‘‘’#™sœsZm  w”{”|¦L§ ©5©u«U«W­&®~ÆH°²Z²l²zµJ¶'·?ŗĄĮ0ĀG6‚(‚3„(„J†E‡"‡[ˆˆ ‹‹9b‘^’-“/“b••Vš4šr››*œœBØQ« ¬5¬x­­F­|®®+®S®]Æ1Æi°a°u±x²/²<²f³³ “µ¶ ¶L·Aŗ:¼¼a½%‚'„…W…x‡^‘\‘l’”+–š!›EœhŸJŸ|¦\§§G©AŖ4°:³µ[‚'‚h† ŒtO‘U“6••˜E™*š Ÿ*”¢„5„w¦ ¦ ©X©\®OÆb°M°R±t¶>¶YĮx‚' ‚&„……0†~.žC n³-³>³N‚&‚&³Rµ6‚&ŠK‹‹XŒ&Žc• ˜O”¬ ÆLøy¹¼=¼oæĀH‚&…w•N˜?˜|œ!ŸC¤„5«/®j®~ÆÆ°M±x²+²?µ¶qŗ¾<‚&ƒ…wŽaœ!ÆÆ±²?µ/µ/ŗæfĄ4‚%Œ ˜©n‚$‚$¹`‚$ŠFŽ³9¼f¼u¾O‚$‚#ƒy‰zŠ“)–™H›#”bØ@Øg««L­P®f®wưvµc·Į+‚#ŽwŽ|XX”––y— ™M™TŸ £„¦2©Æ ²\³³>ŗ ŗNĄuĮ-ĀT‚#…c‚#—= ~ŗĄĄ7‚"…R‰aŽd“““žq¦1©]©n©n©x¬¬°(µ ‚"ƒ „Žx’’’–jœ{ž<Ÿ}Ā ‚"ƒjŠ=• ŸZ¤¤&¤Y„8¬`­ø2Į‚"‘4‘5‘6¢¤ „G‚!‚^‚eƒ„"Š(ŠH‹X”W”[”[—y›rŸR '£©s©t°±6³i½ ½tæææææ0æ_Į3‚!‚=‚M‚S‚Y‚^E‚!‚=‚M‚S‚Y‚^„1„tŠ‹C‹M‹^‹mŒŒ%Œ.ŒKŒgtŽ Ž$Ž'E•žRžS .£E„ŖŖ*«A¬+°:³³*³Q³V³]³h³r³v³y³}“““&“-“;“@“B“E“U“\“c“m“n“w“z“}µµµT¹ŗŗtĮ‚!²¶1¶1‚!†M†y‰iŠ)‹ ‘“3”1•_––b«®t®t°=±æ ‚ Š)Š=‹#›\ ~„x§7Ø6ØY¾aĀ‚„E…'ˆyž ¢¤¤¤u¦O§Ŗn¬_°pµ0µX¼Q¼a½y ‚†’!›œŸN¢P£&„„1¦·l‚±v¼!¾‚ƒ_ƒd„ ‡q”"•D—N™i{ # O¦RØ#©©/°3±v¶L»:»X¾¾p¾tĄĄ ĄĀT‚‡1Š‹Ž Tv“,“D”E•N >¢«C«t¬1® ®7¹!½ÅHL‚‚)‚P……}††K‡‡`‡pŒRŒ|WŽx<’a“““3”••R•`–– —˜B˜P™$œ-œBœdœgœ~Ÿ!Ÿ`””>”s¢7¢<¢l££z¤r¤}„'§G§|Ŗ8¬Y­?­D®D®TÆ?°i±v²²c³³'µf¶?·$øøL¼%¾¾1Į>ĀĀĀ)‚–yØn©ŗj¼Q‚§Ŗ‚ƒH‘]’}—Ø]»z%‚†y‡)‰]Š_‘‘’’#“3•˜DšvœZžTžXžX @ @ B w£f§ÆÆ²Z“sµJŗ¾¾æĮaĀ%Ā3‚‚°²,¶|‚˜/œ,Ø‚£4ØjØ©©© ‚™k¤C¤m„ ­øøKĀQ‚,‚„‡‡*‹pŽ0@‘D‘v‘~“7•™™ ™B››=¤,„4„Y¬5­®3®L®l®}ÆÆ1Æ\°°N³µ ¶¶8··A»¾HæhælĮ<Įv‚"‚„…;††ŒqŽv"”y•–Rš››{œ*§3§q©¬­®2®nÆ3±³D¶»S»\»z¼R¾Ą!Ąs‚‡®P‚…7†J—™}”§?®)µt¶J·løK‚‚E‡ ‡ §=Ø ‚¶‚›D‚‚n†>‰4Š^ŒhŽ h’F••i——/œ5”%¢_«6®®O¶¶l¶y¹b»6¼?½+¾GĄ ‚œ_¢~‚Œ ĆkĆzÄ6ÄAÄJ‚‚Ä*‚— ‚…‡@ˆ@•ØØ,Øc©®G‚…/æM ‚…/‡f™šœ]œe¢¢,³ ½( ‚‡Iˆt›$›7œ@œT­ĀU‚‚B‚l‚©‚›§^ ‚—f ­K­cÆ1°“5¾‚…‡#)Ž ‘+’_šš,Ÿj£Ŗ«1¬ÆO°(½(‚‚Nƒ}…Q†%‹‹wŒ ŽŽ'‘'—4Ÿt w”~¢'¢f¢o£T¤'¤W„ „,„p¦©OŖ3­O­Z®[°"³!·V»<¼Aæ3ĮĮxĮyĀ ‚ °M¶p‚ ‚TžKŖ"·M¼¾] ‚ …Z†@ˆŠ6Œ.Œj–ž[¬_æo‚ Š‚ D‚‚,ƒEƒ_ƒx„…G…i†7†8†A†B‡kˆ‹‹)c‘^‘m‘s‘s‘t‘y‘z’X˜pšš+›P›]œaœb%ŸN ¢£s¤7¤R¦¦)§I§XØŖf¬F¬H¬L¬`­+­t¶¶¶+¶,¶,¶R·#øĄĄ#Ą&Ą(Ą2ĮiĀĀ4)‚…S…|ŠkŽ}’Q“4—"—(™c™{›[œLŸcŸ~ ”g”¢¢6££¤7¤t©6©O©_Ŗ#«g¬Z®T®gµb¶·!ŗ2»PĄ4Ą9Įe ‚’u–šd ”g¢C¢I¦7Ø8µ‚žF¢F‚‡=‡Gˆ=ˆF›Bœ9œaŸh  £Y£m£s¤O¤\¦Ŗ­5­^­®"²o²s/‚‚{…=…u†ˆ ˆz‰>ŠŠOŒŒRbŽD;:‘#’˜RœœKž<Ÿ2””-”_”`”w¤¤5«®Y°m²A³*³/³>³]µŗ »&¼:æ1æ@ĄĄ7Ąy ‚†‹+‘c‘“S ¢„:­YĄ>Įd‚X e¼8½½o‚‚ƒ5„l ‚†ˆ&Ž_kmšš!›!›C›hœ9œlŸi£X¤A¤O¦§o©/©EŖMŖVŖp¬[®&®U··^ĄgĮiĀ ‚ŒDž¢£9£<°µ>ø ¼=F‚‚'‚s„4…†(‡,Š2Š4‹&‹bŒ]bŽŽ+<’-“s“|• –|—fšv››"›/-žž| - c”J¢¢¢@¢]£s¤„\¦Ø0ŖF¬_¬s­7®~ưO°m²/²=³"³]·$ø>øUøz¹¹ ¼f½ ½L½u¾¾ ¾<æ9ĄĮ}~‹ (}ƒJƒ[…G†_‰/‰`‹)Ž5Ž9Ž:i’c’m–kš>š?š?ša›KŸŸ q¦*¦_¬ ¬ ³F³G³|““<“=¶Xŗæ+ĄĮĮVÄgc}‚-‚S‚bˆ)ŠŠ0Š7Š>ŠEŒ Žm v)L’V’f”—3—4—6—6˜S˜u›5œœtœwPSTUU\žNžWž`ŸM    $ (”*”:”B”h¢¢¢:¢;¢X¢t¢u£u¤P„-¦K¬¬R­F®*®3®<®SÆ ÆÆ°)²l“Hµ>µ>µBµDµG¶·oø ø%»2»5»I¼9½(¾¾\ææ9æuæ|æĄDĄoĮ,ĀĀ r‰o›¤sØs¬Y­2·H»xrˆŒ|‘“²r„‰1“2¢(¤rĆ0Ć2'r‚‚‚‚ ƒ-ƒq„J… …5…W‡!‡T‡~ˆˆ.ˆL‰‰V‹3–M—v˜=˜l””9”J¢¢¢P¢{£Øf«1«K¬n­4Ā1Ā2p‰$“L•a—D—Fž0ž2žS¢¬­ĄĄXpŒ,Ko‚Gƒ=…X…|†‡`ˆe‰‰‰ ‹‹NŒxQ‘‘‘_‘c’u”””r•>•S—š›Gœ,œL$ŸŸ?ŸIŸOŸk :”V”c£9£m„8„[„y¦x§FØz««l«¬E®(®t®uÆ+°"°&±J±S²n³³Oµ=øø`øc»»=»N½m½~ĮĀĆĆ9*o‚oƒ|†6‡8‡RˆŠŒŒBiI“••t–@—;˜šO›xœ5Ÿ  +£¤5„h«W­b® ±{²;²h³M³v“Nµ·:ŗ(¼^½Ąl=n‚‚‚3‚f„r…$…M…b…o†K†K†P‡‡‡‹)ŒkŽ ŽŽ$!“ “n”U–j—_˜5œAœd9~žzŸ!  &”¢6££+¤'¤5§ ©=©H­?²E²³s“Eµn¶?øm¹S¼0½Ą#Ąfn‘l“?“@“B“V“V”˜dž<¤Q§§,«*®jæ=Ā(n”;®j¶½lnƒrŽ@·(·Tŗ6Ągn‚ ‚%‚NƒQƒr…>‡ ‡‡Cˆ]Š)ŠGŠJŠe‹wŽŽ Ž0Ž@ŽpŽrW •• •%•=•Q•y– — —˜?šbšw››"›0œ!œ#œNœzžBžŸŸj K””!¢=£4¤S„„4„V¦y§§~©2©9©X©g©r«¬>¬o®|ÆT°°;±±x²?³ ³C³J³g“E¶ ¶G¶M¶u·(·T·e·oøJŗ5»»i»w¼¼$½iæ8æMæ^ĄĀ=ĀKĀMlZ:l‚‚$‚t…o†I‡(ˆwŠ‹!Œx‘_”x— ™šM›››i_w <¦"¦§-§CØ!Ø`©©!©;ŖŖ\Ŗ`¬I®®^Æl°²M²N³Yµ)¶b·ø}»+½U¾¾D¾_ææ7ækĄ ĄvĮ?ĮPlš›4¢+„}¦ø ĮSk› ®| k„J†k“y˜V›.›fŸnÆ<²m¼½ckkŖ@k†Fœ °k†SjƒQ†Y‹@™qµ jæjj„…M‹-‘,“7šxœ`ž`¦@¦[©d¬Æ7³»c¾j?i‚!„L†3ˆs‰=ŠIŒsŽ Ž~+“y”•G•V•v— —™*™q™s™uš<šu›"›$œ(œx 7 8¢)„%„1§y©WŖ0« «G­®8®K®P®wÆÆ`°M±q²*³³gµ µs¶¶C¶vø»(¼¼aĮ%ĀĀ=@i‚ ƒ.ƒF„}…S‡(ˆ;ˆrˆs‰k‰|ŽŽZŽc)T‘“/”t•˜9™`™n2¢££0¤„%§tØ,Ø,ØJŖRŖY®jÆÆÆV° °}±x²A³NµJµk¶M¶r··@·Kø¹»o¼ ¾"¾S¾iæ-Į-Į[Ā9Ā@i‚h„H…†Xˆ ‰R   “•˜[™t”N®N“7“v¾k¾xæ\_i‚rƒf„H„`…)††X‡%‡F‡sˆ ˆ ˆJˆc‰‰F‹>‹XŒŒ+Œ`?a’7’b““V“e“s”8”b••1•g– — —d˜ ˜˜.™h™šš<šV-bž  > b”9”u¢¢}£J„^«P¬¬O¬c¬x­R­y³%³r“ “-“5“@“U“mµ·Gø'ø:ø^øa¹.¹:¹bŗŗ-ŗP¼¼y½¾¾C¾tæ[Ąchfhh‡:Ŗ%¬)fh‚ ‚N‚XƒRŽ>‘6’I• — —™?™R™Zš>œ8žž+ž:Ÿ 1”=¢k£B£o„„=Ŗ|­N®B±E±P³³|¾fæUĮmfeƒƒm•–B—M—V™™¬­g±1±GøCŗ@ŗBd„$…I–l©u¹=¹?d†KŠ;d„„–9™¬D³Qcprž ž³.³;³A³X““ “=øy¾}1c‚‚‚:‚:‚H„w…\…_†"†&†(ˆŠ#‹\5u“•y–(˜˜mžQžuŸ7 3¤¦ ©F©o««A«e«e«r¬R¬R¬{­i±F³T³r“µ.¹4¹bŗ æ_Ā b„XŽu•bŖ Ŗ&¬#¬#¬2½#b‰¹ a‚rƒfˆ<’>““>“>š.·2¹æ'_(_‚‚+‚~ƒ3ƒ?ƒA†‡a‹&‹xŒcŽ\C‘’•:–r—u™T›V›`ŸŸM”£2¦_©}ŖŖ6®c±Jŗ0»!»F»L»^æ2Ā +_„8ˆ^‰R‹s‹}ŒYp”R•••!•%—O™RšFšm›@›Ež? ”K¢¢ «]­­Z²;“R“XµJ¹&¼+¼W¼y½)½J¾5æ_æyĄ9Ąbā^ƒ-†oŽn‘c“g”.ž8”B¢0¦¦ ¦x©4©HŖ «g±]³D“XĄKĀ ^])]k‚ ‚*‚Vƒ@ƒ„&„_…8‡‡A‡I‡MˆAˆHˆ^ˆs‰‰8‰=‰^‰zŒ ŒCŒMŒbŒvŒz0bŽSŽTŽ`>v (‘O’’?’H“?“@“B“V“W””•L•r———g˜=˜B˜U˜Y™3™G™x™{™š› ›$›M›h›s›}›}œœxsž žSžZžbŸŸEŸg  N ^”%”S”X”_”f”r¢¢¢-¢N£)£E£L£u„4„t§Ø+Ø5©ŖŖQŖQ« «C¬¬ ¬o¬r­b®!®9®>®E®MÆÆLÆPÆUÆ`Æi°°°°°°!±p±q±u² ²*²|³ ³6µµ7µoµs¶¶3¶G¶`···s·s¹¼A¾.¾xæ9ædælĄbĄrĮ+Į<ĮXĮXĮf]]‚DĮƒ/]^^__‚>‚A‚D‚F‚G‚T‚Z‚a‚c„1„2„4„5„P„x„z„}ŠŠŠ$Š/Š0Š0ŠEŠFŠFŠGŠIŠ\ŠhŠjŠj‹P‹Q‹S‹\‹tŒXŒ`Œewwxz{{}Ž,ŽIŽOŽaIVXX\]+,-79>CDDFRSUhikqrr‘‘ ‘ ‘‘‘‘‘’/’3’7’E’I’V’V’W’X’_’a’b““““ ““)“,“-“2“3“3“5“7“9“[“e“k“m”””””””””=”C”C”H”b”n”}”•••••• ••••••%•1•9•9•?•@•J•[•^•_•`•e•i•s•t••––––––– – – – –@–@–A———————— —"—4—7—8˜1˜`˜a˜c˜d˜e˜e˜q˜r˜s™™™™™™™™!™%™(™(™*™*™+™2™=™>™?™H™I™R™R™S™S™T™]™^™^™_™_™e™~™ššššš7š7š8šMšOšTšUšXšYšfšp›L›L›S›Y›q›sœi3YZZ[]`effjxy{|žžž ž žSžUžVžXŸŸŸŸ Ÿ Ÿ ŸŸŸŸŸŸŸRŸTŸTŸUŸUŸVŸWŸX ( ( / 2 f o p p q q r r s”*”,”-”.£8£L£M£N©©Ŗ,Ŗ.¬A®K®L®L®M³,³.³/³1³3³4³4³5³>³B³h³|³}“““““““““““ “<“v“v“wµµµµµµ%µ&µ*µ,µ.·E·L·_·d·e·gøøøPøZø`øaøhøm¹¹,¹?¹A¹b¹b¹jŗŗŗŗŗ;ŗMŗ^ŗt»»¼I¼l½ ½(½)½6½M½Q½U¾¾c¾f¾i¾j¾t¾u¾{¾}ĄsĄtĮĮĮĮĮ3Į4Į6Į6Į7Į8\ƒ ƒ+‘:—\˜œ_ y”oØf«+°7²M³>³w»A¾||\c‚‚,‚<‚{ƒn„ „6„;„T„„…#…8…?ˆˆˆk‰=ŠŠ4ŠBŒŒ7ŒQŒVŒY)+UŽ[Ž]0M‘+’’’5’<“#“+“;“B“Y”””^•i—˜˜™^œ(dž žAŸLŸO 7””J¢R¢Z¢r£.¤W„\¦¦:©S©n©sŖ« «C«F«r®}®~°V°^°m±²N³+³?“““#“-“Wµ%µ(µ7µ=¶Y¶[·EŗT»v¼6¼=¼i¼l½½ ½&ææ1æ<æDæfĄĄ!Ą8Į#Į5Į5ĀĀw \km˜U˜b­LÆ^³W¼ Ą \ƒ ‰j“K“e“g•)–H–J–KšN”M”Q¦L«3«4“0æĄ0[Ø©WŖ¬.¬.[†Qˆ[ –6–Q—œ:ž5”`£«F¬CĄ<M[\h‚X†!†_‡Lˆ\‰T‰m‰tŠeŠj‹‹Q‹u‹{ŒkŽC &‘$‘,‘8’’<’s“H“M“]”9”Pœžfžk  M m”x¢¤¦¦ ¦3Ø}©b©f«>«[«{¬B®p°6³-³6³B“ “¶H¶Vŗ»2»v¼e¾yææ4æ\ĮDĮMĮhĆĆ6ÅA)[‚O‚Q„#…L‡"‡oU<‘”””~•N•i–z—˜Yš]¢¦1Øj©]­y°±² ³³¶6¶W·qŗ/»@»UĄ(ĮJĀDĀHÄ [• Ø<ØK©VŖU«u¬¹Zj„w‡(Ž`Ž}[”5—™nšM›t” ”¦,§e®°8°<²d¶9¾Y¾kĮ Zˆw‰)Wf“<hpŸ8“nZ‚µ6ZZ„?„A…$‘”P˜T™;žD£­r“q¾ÅYˆ.ˆC‰k—v˜pž¢¢~¤/„ ÆA±<±F²8µIµI¼d Yƒ]ŠŠabAD˜ ™^¬ “VYY\p–a—&—8™]œi35„Ŗ(ŖUŖm¬¬A³-“>“Yµ2æ0XŽdXˆ<ˆ[ŽŽ:D:<“e”r–x™M™ZœWAž<©o®°6“g¹¾¾XĄdĆZāXƒ(Æb½vXX^ƒ„}†n‡1ŽŽ‘;“"•!–Z–\—S—S—V˜e›cžiži§W­¶P¼<½,½SĀ Ć;WŠ)’]“]–-–Y–Y–\–`–r—3—=—Q˜>˜u1Ŗ#ŖOWaŠF’%”•\–––0–0–1ž«A³/³?“J“K“L“Zµ,ŗ ½t¾{æ2#W‚fƒ>…`‰D)xŽT‘B’;”=”@”A”O•x–E—<—V˜ažOžx””©/¬Æ°±P³µGµI¶0¼|æ Wƒ„‘o•~¦[¬ ¼Q¼zæGĄ> T‚y’K’K••–*šdž$¢?¢x¤` S…‡U‰™LžDŸ: {±#Sƒƒ ƒ†"ˆŠŠbŽ'*W“ “g•/•p–—+™\šOqžŸ*”k«¼8¼W½½o¾{ææsæS„ „ „ ‡2‹  XšFžNžUžvŸŸR£§Ø.°°ŗ-Ą0 SˆA‰wŠ “H T©w«mÆJ°/“zKR‚H‚u„ …l…m†4†@†k‰jŒŒ\Œ`Œj3Ž&q‘7‘7‘T“H•&––0™Tš@››K›Lž-žd S l”£k„f§&§3§a§xØØØ6Ø>ØDØJØ[©*©H©m« ¬­M®,°&°/³T³^“S“zµ5¶¹Z¹\ŗ1»d¼!½#¾ærærĄrĀ:RsŸ!`Re‚c‚p„x…t††oˆˆx‰‰&‹N‹x‹Ž*Ž>ŽGŽRŽR‘A‘v’t““!“?“\“b””9”;”H•–/–T–`—#—4—=™!™+™9š$šG›[011GTž (” ”:¢„„e„p«#«U«u¬;¬d¬l¬x® ®®³5“ µWø!øf¹6¹Iŗ-ŗ;»w½½¾¾¾\¾s¾~ææEæLæOæ`ĄmĮ%Ā RˆŠ=Ž*‘=G±,µW»w½æ`R¦(æ2æ2æt Qˆ'‰?‹”¤_¬!µ]·yŗ½.ĄWQo‚=„2†0ˆF‰v ?e}Ž$,,a’!’?’s“ “!”” ”S”q”s•&•+˜}™Kš*šmœd)02PžSža R ^ y”_”a”f”k£E¤„W„`§««¬|­b®+®HÆNÆU°<°~± ±²8³ “{µ¶6··(øøø øF¼@½½e¾C¾H¾Yæ æ ĄĄlĮĮĮ P‰k”o©LÆZ³w¼Y½`½f¾Qæ PĄYO†yO‚hƒ ƒ…M…S…b…e††*†S‡‡‡‡ˆv‰Šn‹‹"ŒDŒE'<7:<‘‘’’’’5’:’E“$”=”r”t•j–m———=—G˜˜˜˜˜ ˜!˜0˜8˜:™I™[™mœnœ|œ}$žž4ž6ž6ž6ž=žj”S¢¢¢¢¢D¦x¦y§ §§>§zØ©|­y®®®®®³³}“C“DµO·v·}¹I¹\ŗŗnŗwŗ|»»¼2¼:¼@¼Iææ.æTæ^Ą(ĄFĄ`ĄcĄtĮLĮLĀ Å&O„R††_‹‹ U˜nš?Ÿ#Ÿ%¢.¤z§>Ŗ:«q­9¹O„‡M‡w‰‹ Œ3—I—pžk„L§"µ7ŗ NpN„„ˆP‰$‹6Œ)zŽŽ<Ž@VVsst’’8’H’b’c’c’c’f’f’q”””'”I”R”T”V”\”o•!•!•-•/•1•o–V——&—O—[˜˜7˜m™:™W™Wšš&š&š&š-š2š5š=šBšGš\š^šašj›K›\›q›|œjuvž>ž@ž@žvž}ŸUŸUŸ[Ÿ~ r” £`£a£d¤TŖp«]° ³5³r³w³y“C“H“j·1¹nŗ%ŗ%ŗ&ŗ*¼j¼y½&Į3N„&˜Fš'Ŗo»lĮKM‚Z‚[ƒ<ƒfƒg„_„a…|††† †>†M‡"‡)‡b‡c‡c‡pˆˆ#ˆ>ˆ~‰8‰V‰rŠŠXŠ|‹V‹{ŒŒ#Œb%rŽŽŽŽŽ\Žu"UUabcin‘S‘T‘a’R““_””.”.”V•<•E––t—o˜˜˜!˜D˜M˜N˜X˜Z˜d˜e˜e˜r˜s™"šš,š9›››››GœœuAžžBžDž`ž|ŸŸ] H H H”.¢(¢(£¤+¤0¤W¤_„ „r¦¦¦.¦>¦_¦`¦`¦t§§ § § §6§h§~©A©F©eŖ3Ŗ9ŖwŖw«L«]«f¬!¬#¬#¬1¬1¬{¬{­­_®®i®iÆAÆDÆOư@²$³C³E³J““Cµ_¶J¶K¶L¶N¶S¶}¶~··!·A·B·L·{¹¹>ŗl»M»N¼¼¼¼(¼G¼e½@½u½v¾#¾_æ3æIæSæTĄ?Ą@Ą`Į.ĮXĀEMM¹¹\LP[x‚ ‚‚1‚bƒ$ƒ5ƒn……†.‡ŠŠŠŠ{ŠŒYŽdŽoKfs{5Lrt’%’e•[–8–u—— —!œ:œCBV~ " 4 ?”}¢¢¢5¢D¢i£.©A¬3¬Q¬T¬z¬|­_°±²L³s““V“pµP·vø'ŗ¼(¼G¼`½½½ ¾¾¾$¾a¾aæ æYĄ3Ą9Ą^L” zĄvLx‚0£ µæ.2L‚‚e‚gƒ„e„z…ˆ(Š/‹zŒ&k7‘.“” ”=”N”T•)•+–@—[˜˜hšš0šEš^š`še8Uyžp¢}¤l­]Æ“ µ#µ2ŗ»»S¼8æGæ[ævH«Fb‡[•v–R—›”F”`„1®)°Sµu¶¶p»q¼ E† x“}–M›*ž«« ®DŗQ>E‚‚M‚SƒY„/„K………ˆ7ˆ9‰LŠŠx‹fŒ Œ Œ>Œ]Ž@“0”C–M—-—D—Yš œœ2œR2£6«~­®\²C³““)“cµµ,µ3¶e¹¹¹A¹jŗ5»»t¼8½½&½u¾]æ!ĄĀ@C†g‹Œ2ŒKy’f”r˜V|žxµ}»>½ĮTCƒwˆ\]˜˜}›K›P¤©tŖO­Æh¶i»B¾nĄ1ĮAĮOĀ(ĀyC…R†t†t˜˜v  Ø\CC†| #±5¼FB\c‚v‚w‚wƒ8„4„5„5…%…B…V†tˆ‰?‰?‰T‰f‰wŠ2Š4ŠMŠqŠ|‹C‹D‹U‹ ,7Ž ŽŽ&Ž&67:{‘(‘5‘B’5““!“^“h“k” ”””(”=”F•!•x–<–@–n—S—a—b—d—h—j˜~™™9™\™b%žžždžqŸ(Ÿ/Ÿ? b m”¢@¢f¢h£©r©w©w«b«m¬;¬j­7­W® ÆJ°0°<±9±c²6³“X“Y“~¶·X·Z¹7¹8¹=ŗŗ»B»t»v¼ ¼R¾C¾H¾O¾\¾pæ æeæ{Ą"ĮĮ#ĮtĮ~Ā B†`ˆŽcg‘M–—^˜o›SB‚;„SˆŠ6” –U–`˜žbŸL¢gØU­8°,± ±/±5A¬A–5©m«c«d¹XA©I¾{5A„p†IŠ6‹g^‘’2’~•R•s—!˜O™™™™kš9šMšqAFžLŸ  h”W¢£5£F£l¤¤b¦"¦"§-©,Ŗ«j® ®2®_°P°U°u²²sµg¶9ø@øXø}ĀIA§@“H“IĀuÄ>ÄE@‘PØ6­N³%»AĮg@[Žu"‘<‘L’’–E–i—l› œœmžd”v¢7¦¦Ŗ,°>³O¶¶3ĮBĆ3@ –=œp¦(ØV³·m@R‡&‘ ”—@˜&›¤fØ+ÆC±²!²'²b»]¾@‚h™!«w­M²+@ ?‚p„ ™rž ŸM¬:±Q²T»4?®??ƒƒh„…]†u‡‡‰l5”œŸ/”Q£[§;¬-“K¶K¶V¹C»c¼½¾Q¾uĄb>>š,±H½+>޾bĮrĀ >]=ƒƒ7ƒSƒ]ƒg…g††7†7‡‡‡‡ˆ‰$‰kŠtŠ}‹"Ž"D‘3‘M““g– –—9—y˜™&™bšš+šCšH›Y<žž žž)žMžhŸ' k””””@”x¢u¢w£+£a„.¦t§ ©AŖI«4«4«E¬ ­q­q®®7±±*±0±<±Q²j“eøŗŗ¼:½æ6Ą;ĄCĄIĄMĮ7ĮaĮoĀĀĀ (=Œ+Ž12:@WDa‘o”S”T”T”U™B™K™rš(š2›Rž,ž<žZžu¤:©{­MÆ)°E³"æ/ĄĄ2Ą2Ą3Ą^Ąt=•”g¤`=ƒu„c…6††SŠ”t—˜d L”4”6¢¢££ §5§s§~©3«}°°z³J³J<–9šB„(±<<ˆ[Š‘.˜&¼F;ŒOŽUf|”s—T˜c›'žr o””>„sØZÄ6;\ƒ#ƒ$††0ˆˆ_‰1‰?ŠŠ>Œ5ސG‘'•7––@–g˜˜>šb›TœTŸ1””¤'«>¬S¬S°6“oµ·!·3·7øøE¹6¹8¹EŗT»"»w¼(¼Pæ æ ĮJĮa;\;‹šz«&¶u· ·Z½#; :ƒ/‹/ŒOLžc¦cØŖ5ĮW:Š:•{¤C¶C»?Ā$:NRƒ@ƒv‘.–|™RY`tyž+”`¢E¢o§ §?«C¬?³!·xŗ(½½~¾X¾eĄG:‚4ƒŠ1ŒkŽt5=E—˜N¢¬¬Ær»N¾¾ ¾æ æI:$&&–1¦=¬9£b§D»^ÄÄ@9:ž¢0Ą/9Œ!•[ø`¹¼O8H„lŠnru–›~“\ø`¼O½e¾CævĄ" 8ˆ0Œ1ŽD”@˜š«A¬:µN·1·q8¬97ƒt…'†Ž •w˜8™LšZ Ÿ8££¤¤g„^««GÆÆ±±,±{³]½ææQĄt7?‚}ƒƒfƒg……'†[ˆˆ&ˆ7ˆk‰ ‰Š7‹^Œ3ŒC- 014V’]’c’u““[”O”p•?•R–J–J–^——!—x˜˜™Ošš\šc›XœNœRœ^MN_evž+žFžG -”0”n¢/¢W¢p¤Q¤T©7©N©x©y©z«4«R«Z«}«}¬%¬>¬EÆb°!±&±+±-³5³s³t“Z·øR¹ ¹¹ŗ½½u¾X¾nææ=æTæ]æ]æbæ}Į ĮHĮLĀ+ĀdÄ%7ƒ†j‹5+‘f•`•l—E™>š[žkŸx£:¤9„=„x„|¦%¦9¦O¦q§"§/Ø© °'°0°9°U±±K¶2·sø6»2Įgh68QWY]n‚‚ ‚‚‚.‚Oƒ ƒ5„3„;„e„q„t„x……$…&…0††††0‡%‡/‡Uˆˆˆˆ%ˆ%ˆ)ˆLˆPˆ]ˆyˆy‰ŠŠVŠdŠ|‹aŒŒ%Œ&ŒA  07?kŽ ŽŽŽŽ Ž$Ž'Ž<Ž<Ž=ŽX  zd‘%‘&‘A’,’/’3’d’m“ “&”8”9”@”S”U”Z•$•$•*•w–2–K–Y—T—U—_˜5˜5˜8˜}™K™LšZšmœ5œE "2pžž"ž)ž)ž)ž*žVž^žtžtžzž}Ÿ8Ÿ:  # W””””””””,”Q”a¢ ¢ ££¤¤¤'¤5¤g¤u„^««««Q«Z«s¬¬?¬v¬|­®ÆÆ±±± ±&±M±P±S±_±{²8²9²E²\“&“E“\“zµµµS·(·1·QøøUø\ø`øm¹ ¹ ¹8ŗMŗZŗj»¼0¼O¼P¼`¼{½½½:¾H¾Y¾gææ æQĄĄ#Ą4Ą5ĄHĄJĄQĄfĄlĄ{ĮĮĮ26Aav‚‚‚.‚:‚^‚o‚}ƒƒƒ.ƒGƒRƒaƒw„„+„;„T…….…6† †-‡zˆˆ.ˆ;ˆV‰‰?‰H‰{ŠŠEŠKŠQŠvŠ{‹>Œ&ikŽ ŽŽŽŽŽ&Ž3Ž<ŽGŽVŽgŽo 2:FLVfu3C[x‘‘/‘?––-–<–M–e–x—— —6—?—L—\—h—u˜˜#˜.˜z™M™h$08TUbbsyžž ž(žnŸŸ Ÿ*Ÿ4 . 1 O T x ~”””y¢;¢J¢{¢}¢}£„^„e¬$¬4±6³c“ µµ#µ9µBµHµSµZ¹ ¹¹0¹4¹Mŗ5ŗ>ŗB»¼+¼6¼?¼N¼h¼o¼u½½½½ ¾G¾M¾Y¾a¾sææ9æLĄĄ&ĄQĄmĄ|Į ĮĮ$6‚‚‚nƒ:ŠFŒwC‘T“G•%—N˜m˜zšš š%š)š0žh£±`³z¾bƁ4>‚/‚I„5†p‰ !Ž  -‘˜RœW$Ÿ©n«4«e3ƒr3L3‚)‚LƒE„„…Q…d…d‡‡‡‡‡‡8ˆ>‰%‰b‹‹1‹tŒ',ŽŽ^46vv’’’’:’l”\–S–k–m–o—"˜œž9ž:Ÿ>Ÿ}¦n§§©}®®³$³-³7“C“Dµ2¹?¹Sŗŗ ŗ%¾eæ.Ą1Ą2Ą_Ą`ĮĮLĮLÅ*ÅAÅGÅH3ØR2‡ ,“N››~”A¦8§3§UÆ]¹»¼W123?BZZZ[‚!‚#‚L‚O‚P‚hƒEƒgƒiƒuƒ„„„v…Q…_…d…e†l‡ ‡‡‡‡‡‡‰L‹XŒ ŒŒ"Œ#Œ;ŒCŒH,8<ŽŽŽ|!!:<[‘‘‘‘~’’’’’’’’’5’A’D“$“H•,•i–E–R–i–j–k–k–k–m–m———<—<—G—a—a—b—b—x™;™P™dš.š]œœ{œ{ixž7ž;ž;ž<ž<žuž{Ÿ"Ÿ/Ÿ0Ÿ2Ÿ> /” ”¢¢C¢y¤$¤(¤j§§ § § § § §§§©}«"¬®®±X“C“H“_µ·E¹¹¹Z¹^ŗ$ŗ$ŗ(ŗ1»w¼E¼Y½ ½x¾ ¾h¾kæĄ1ĄuĮĮĮĮĮĀ Ć*Ć-ÅÅÅ#Å#Å$Å(Å= 2”] „¦1ØY©<»H»\422]…M†ŽŽ”t–u—˜`˜{™[œoœpMu ! x |£E£F£H£x¤¤I¤lŖŖŖ««"­Æ±±|²C¶ ¶A¶e¶j¶··H·Qøe»¼¼}½ ĮĮ#1„7–=™ MŖ«>³Y1!0‚‚Oƒ„!ˆvŒ%  ““ ”••@–9—$œSž}”,”o„ ««I±Mµ·.ø¹ ¾gĄ*Ą,ĮJ0Š|Ÿ0·ŗ 0Œ~–U¹h0/0LPYY]eeƒƒƒ*ƒTƒ\ƒ]ƒ_ƒk„4…*…/…0…Q…X…|††/†M†U‡‡`ˆˆ!ˆ"ˆMˆb‰ ‰|ŠŠ Š/ŠE‹m‹s‹wŒ%Œl{Ž ŽŽ0Ž9ŽMŽRŽiŽpMT`Wm‘Z””O•,–3–Q–S–T–z———@—C˜,˜2˜C™cš šCšCšDšFš\š_MžGžYžaž~Ÿ Ÿ ŸŸŸ 1”,”6”P”V”t¢ ¢#¢9¢H¢d¢p£ £W¤ ¤z„9„p„|„|¦¦¦^¦o§9Ø©d©n«E«l«l«s­­C­r®°)°E°r³³!³$³9³<³N³X“;“D“z·<·tøø¹¹2¹S¹xŗ(ŗ*ŗBŗF¼o½H½~¾ææ^æsæxæĄ/Ą6ĄfĄgĄĮ ĮĮ>ĮsĀ%0/EH‚8„-„3‡F|ŽK’’U’r“P“S”K”NššDšJ›}Ož%Ÿ8”"”'”,”.¦'Ŗg«b«j«y¬¬¬&¬8¬B­@°H²Fø¹ ¹¹¾ ¾ Į0Ć0/O‘s¦§iŖ;æ.Pƒw„„…>Œe ‘5‘l””9–V–{—W™_ž”§©{Æ-°³U“q¹ ŗ»}æĄyĮ(.X‚eƒ(†H‡‰kŒŒS‘9‘~–V—™™"™>™a™bž žž~Ÿ”ØT©yŖ4¬z®8Æb±*±c²2³“2µ7¾QĄ.Ą8ĄCn.12]‚.‚/ƒƒMƒM…&…[†h‡‡/‡1ˆˆˆˆ)‰1‰uŠ Š<ŠnŠsŒQ`yŽ bO_‘H’“M“Y–:——=—F—a—b˜˜ ˜%˜+˜5š š šiœ\ž žžBžGžKžPžYž`žcžqŸŸVŸv p””p¢ ¢C¢y£[£f¤ ¤>¤i„2„X¦ ¦5§&§?ØS«H¬5¬j°;°=°B³3³R“\µ7µHµIŗ>»»aæ<æ]æ{Ą?ĄdĄdĮĮ5Ā$.ˆy‘3 .h…H…H‘I M„C¦Z°0-v°=ø)ø,ø-ø[øg$-‚e…Wˆ_ˆcŠ1Š@‹ ŽQ4[{}‘ ‘2”=”O••:–E—™b K”9¤BŖa¬­UÆ)øWøZ¾OæĮ M-/{‚$‚P„ „2„4…†&Š.ŠAŠIŠVŠd‹‹:‹ap !8‘”E•R—"—7›W›\#žhži  ~””-”.”t”y”~¢¢7¢J¢i¢k£.£M£]Ø©F©sŖ«««¬?¬C­e± ±W³3“¹¹»»p¼^½¾\æææAæLĮ2Į4Āƒ-CYrx‚‚‚[‚b‚f‚n‚oƒ ƒƒ1ƒ6ƒ>ƒGƒj„ „„+„P„W„l„w…3…7…L…j…t†† †.†O†X†t‡‡‡‡tˆˆ&ˆ)ˆ5ˆ=ˆBˆTˆZˆt‰#‰L‰{Š ŠŠŠŠ1ŠEŠK‹#‹3‹fŒ&Œ=)ŽŽŽŽtŽ|Ž~*11{9RY‘‘‘‘+‘,‘6‘7‘T‘X‘X‘Y‘Y’’’’7’c’d’r“E“e”;”C”[”b”p•• •!•$––S–T—— ——#—%—2—3—Q—U—d—h—˜ ˜ ˜*˜.˜^˜m™]™fššš šš$š%š(š+š-š0šBšDšJ›4›>›O›X›[œœœNœPœRœbœbœmœwœw"#0>U^~žžž=žEžEžOžWž_žnŸŸ#Ÿ*Ÿ5ŸMŸRŸXŸw     # ' ( 5 ? ? D N Y Z Z n y””””9”:”^”h¢¢¢/¢J¢h¢k¢t¢~¢~££X£q£r¤¤P„ „-„-„0¦¦E¦Q§P© ©C©E©MŖŖŖ!Ŗ%Ŗ+««1«?«P«o«u«¬¬¬¬¬¬¬¬¬1¬3¬]¬i¬l¬o¬q¬x¬|­F­R­b­v­}® ® ® ®'®m®oÆÆ?Æa°°!°#°T°~±±±±!±!±+±4±9±J±J±K±`±~²²!²6²8²8²F²Q²r³³³+³E³h³o“ “)“f“i“m“o“pµ*µ<µ>µGµHµIµP¶.¶2¶]· · ·H·Q·d·o·wøøø!ø&ø)ø/ø\¹¹¹¹;¹?¹I¹j¹zŗŗ;ŗf»»N»S¼¼ ¼8¼J¼W½½½½½½2½L½\½x½{¾\¾bææ æ!æLæTærætæxĄĄĄ0ĄFĄLĄSĄeĄeĮĮĮ5ĮGĮ]ĮqĮqĀĆ6--ƒh‡ŠA‹‹F_‘—$—q—r˜o›TœOžbŸ/ l¤]¦¦!¦O¬S³$½FĄ1ĄJĄe,-ƒs† ”8ž u¢~¬4¬6°“1“E¶v¼hæR,‹a,Ød~,36‚0‚:‚:‚nƒƒƒƒƒ!„„1„?„A„P„P„R„e„w„{…………5…7…s…t† †&†/†b†d†i†}‡sˆ!ˆJˆJˆZˆcˆi‰(ŠŠ@ŠVŠY‹mŒ Œ@ ŽŽ ŽŽŽŽ<Ž~"Umy1C‘'‘B’A’D’e’m’r““ “ “““+“@“G“P”K”N”p••)•j•n•o•x––<–e–e———#—$—?—L—R˜#˜'˜l™W™\™bšš=šDšVšYš^š^šašešešm$11BOP^žž"ž(ž)ŸŸ: 0 G N Y Z e”””'”:”@”K”Q”\”^”k¢¢]¢h££<£G¤¤¤l««3«N«]«^«b«e«u¬3¬3¬9¬:¬>¬d¬l¬|­­Z­i®®Æ±±±± ±+±1±4±B±U±V±W±[±_±`±}±}²²²M²h²j³E“ ““!“U“Y“}µµ5µ9µFµS··:·G·H·P·bøl¹ ¹AŗŗŗN¼¼¼N¼R¼j½½x½{¾¾E¾eæææ æ&æEæSæYæeæuĄ&Ą0ĄGĄTĄUĄVĄnĄoĮ +,}© Ŗl+‚[…!‡>ˆZ‰qŒ0ŒA “i–/—G {„?Æŗlæ-Ą:Ā<Ä.Ä5ÄI +†f‡‡l‹ “"•rš!&¤Q¦§}©/«t¬]­5Æ=°]±B¶8¶Q·?·^ø3»=»U¼,½½ZĮĀ4+7‚W„ „a…L††uˆŽa‘6–"—›?œ-œY" /£*“0ŗtĮg+‚.‚0‚S‚b‚rƒƒ%ƒ*ƒEƒc„„„c†††‡ˆˆˆ‰‹‹%‹.‹^ŒŒ%ŒOŒZhŽVŽdŽiSfAqtx|‘U‘n‘s‘w‘x’!’A““e”T••%–——N™š)šBšG›xœœ=œhœh)GqyžržŸ"ŸT " + h o }””££££q£r¤F¤J„&„&„_¦§GØNØNØZ©EŖŖ$Ŗ)Ŗ?¬¬¬>¬q­]®D®^®^ÆÆ<Ʊ±,²S²a²s³_³y““ µ,µG¶,ø'¹6ŗŗ-»»L»T¼X¼d¼h½½½¾eææ"ĄĄĄ0Ą3ĄCĄKĮ/Į6ÄqÅFÅGÅG*Še*„a*‚H[*28„„1„u…+…W† †<‡?‡M‡\‰WŒT,LL{ŽŽŽ Ž^ŽaŽs ?I‘:’m“n”p•%•y– —˜4˜Q™™b™y›]œ8œ9œRiŸ\ K”%”;”K”M”M”P”^¢ ¢ ££t¤¤X¤o¤y¤~¦ §4§j©^ŖŖ«,¬P¬UÆP°t±±E±U±n²g²{“X“_·]ø-¼)ĄrĄ{ĮzĀĀ+*„ˆ~ %k q‘$“ ” ” 0³_ŗ ½~)3‚0‚e„„……a†*†+†H†z‡ˆ'ˆ(ˆDˆw‰!ŠŠ'‹‹‹/‹6ŒŒ2ŽŽrŽzU7O‘‘a’’“a“b“n”0”0”9•Z˜˜1˜o™š$š$ši09[]}žsžŸ  4 J n t”&”0”3”h¢¢¢Z¢Z¢o£ ££U£W£|£~¤ ¤2¤g„,¦¦<¦S©$Ŗ«#«b«n­6­:®&®3®M±<±?±I±o²0µPµnµu¶L·7·8·Bø~¹»>»\»g¼¼@½½L¾$¾Wæ æqĄ2Ą@ĮĮ%Ā )†e”r¤3¦­I­cÆH²³µh¶)³R)…J†V‡ž ¦E¹;æ[e)[‚ƒQ„|… …6†X‡(‡F‡Rˆp‰=‰VŠŒ,/Ž-Ž\Žsmx“/“z” ””t•>•K•v•{––N—— ˜0™uš4š9šgšœ(œH6@J\žž Ÿ1ŸC $ L |” ¢¢£}§§+©1©H«Q«s¬"­®®-®4®:®G®lÆÆÆÆV°°N°z²K²{³Eµø!øF¹ŗQ»"»%»&»5¼}½!¾¾h¾jæ7æwĮ;ĀN)„|Œy(ƒD“@—j—l(ˆ=(‡b'‚‚-…jŒM’š~¢£W¦C¦r¦v¦|§GŖ«f«iÆF±v¶w»4æjĄYĀ&'» 9'QY„-„/ŠvŒ ŽmR‘‘W‘W‘v“$”–š.šu›,œ8ž    $”:£{¤#¤D¤j„[§ §Ø[Ø[Ø]©+©;«°°±V“I¶ ¶ ··%ø¼¼¾¾KĮ1Ć5ÅÅ#&)&y{ƒv…I†ˆ0‰‰‰‹‹.Ž}‘g“S•G–Y—y˜7˜Tšž3ž9Ÿ £i„&„9¦=§§!§TØØ©-­N­N°+¶X½¾o&'‚ ƒ[…^†!†G‡“R–U™~šT›'›,›9 1 c£p­"­6­L¶S·ŗ:»Į&''9‚zƒ ‹žE£b§ §9§H°.±I¶TĆÄ)4%+6‚<ƒ4ƒ\ƒr… …O‡v‡~ˆV‰FŠ Š#‘ “B“Z”–r–{——"—H˜Kdž žžL  f””^¢#¦G©a«c±*³B“H“e¼;¾f¾tæ2æ>Ą9Ć-%— Ÿi$Pl„„†:‡ ”—˜*„4§Ø=©Ŗ-«v¬ ­Æ»6½: $ˆc™›2ŖEµlæ8ĮVn$‚4‚Hƒ……<…=…k…o†!‡!‡=‡Z‡oˆ<Š%Š=‹‹#‹.‹\Œr‘ ‘H‘`’ ““6“n”"”%”]”}•K•[•j•~˜v™™™Lš%š2š7šHšp›Pœœ8œcœg~žž?ŸWŸXŸa¢K¢P¢o¤ ¤,„"„'„9„Q§PØØ*ØmØpØw©NŖ Ŗ:ŖT« «<¬&¬y­­Z®ZÆ:ÆM°4°X°^±±4²=“Xµ]µl¶3¶J¶Xø[¹?ŗŗ»@»q½ ½Ą'ĮVĀ $.B‚v„5ˆF“^Ÿ(Ÿ/­W“¾$¢+#„7…‡jŽ0Hkm’}••F—š8›fŸo£n¤_ŖŖ-­9°n±F³V“·¾jædĄk#„tŒ{Ž^” ”šv£4§§5ØqØtŖŖ(®:®@®PÆT°°T°nµv¶=¶aøJ»V¼æ8æl#‰p°n#”&  ”B”E»B»bĄZ#"‚v†M‡4ˆ;‘ ‘x“• •E–s˜Dœ`Ÿs”I”S°@³}µµk¶r""‚{‚{ži U­V¾b!HQƒ'„;„iŠ=f–/šZš_5¢t„e«Æ““wµGøP½!ƒ†#‡1‡3 A”8–e—33 ”&”P¬&¬6¬X±““µ µ ¶wøCĆk%!4~‚.…n†V†x‡‡NˆTˆe“”o–gšdž% 5”4¤«T¬O®± ±T²²\µQ»"æ ĄUĄWĄZĄZĄhĄh‚7ƒ „‹}ŽŽz’–˜f˜hž} K”z¤D§©x«~Æ9±7±n·5¼½0æXĄOĄQĄSĄmĆ20‚*ƒG† Š#‹D”•i˜yšššu›Xœ@Ÿu  r”¢%£„)„J„|¦-§§I©[ŖŖ*Ŗx¬C­D®'°A°T°}±.²u·øøøQ½)¾=ĄBĮ2Į7Į@UH‚A‚g‚u…††@†s‡/‡gˆˆˆD‰‰‰JŠŠ/‹ ‹2ŒŒjGŽku‘‘j”—+—f—x˜*˜`™š<›?›q08džjŸa”k”~£T£e„b¦l¬#¬K¬_­­=®rÆ °[°y±h²²²E²K³Mµ#µF¶·,¹(»F¼V½½r¾æbæoĄĄSĄlĮ~Ā-)‚…5‡b‰4ŠIŒ@?w’D’O”n•9–i—Kš7¢;¦Ŗ,¬1¬g“ µ ¶:¶;·ø,¹!ŗŗ>ŗt¼¼D¼d½Q½UĄ Į4ĮQ$Z^in‚>‚Y„„U…Q…]††)†3†TˆIˆs‰‰v‰{ŠŠqŒ&AŽ'Ž+Ž,ŽwŽ~ &E‘‘ ‘@’“ “,“y• ••z–—&˜˜!™(™n™sšqšr››#›zœ)ž ž žUŸŸŸn R”o¢¢o£s£v¤+„ „¦h§ §4ØØ0Ø>©©1©9©W«««)«¬/­­­P®®8®;®E®V®b®j®x®|Æ)ÆDÆZÆ`°°°!±D±o² ²=²[²f³³%³o“_“`µµµSµlµt¶¶1¶i·L·iøKøPøQŗŗ»<»V»[»o»|¼¼½½l½m¾¾2¾QææoĄĄcĮ%Į/Ā8ĀMÅ/‚5‚J‚Yƒ`ƒa„7„f…9ˆˆP‰RŠx‹xŒX$q%“I•n™dšdžRŸ Ÿ"”B¢!¢%¢8¤« «!«I«Q«R«^­1±±±-“{¼@¼{¾¾MĄ>\!\}ƒƒƒ4ƒEƒ`ƒa„…7†‡‡ˆˆ_ŠŠ‹DŽ<z‘E’’b’e’m’t“Y””Q•j–6–g— —;˜#˜7™ ž!Ÿ0Ÿ0” ””””p¢8¢8¢l£¤¤u„C„\¦6¦Y¦c§(©+©r«>«N«Y¬q®®±/±X³!³G“K“o“zµ%·2·5øg¹4¼i¼l¼{½&¾ ¾æeæfĄ=ĮÅ*pƒ[ƒ_ƒgƒx†5‡7ŒDŒey’2•9•Q˜ ˜<™HšUœXŸ¢8¢p£9£<£P¤/¤j¤}©$®®i®wÆVµøE¼¼`¾%Į,Ā y‚ƒY”a”e”e”t”}¢‚“>—j˜%¤„b„ /06S^_x‚$‚(‚*‚1‚2‚4‚D‚F‚G‚L‚M‚M‚P‚U‚b‚z‚{ƒ$ƒ(ƒ-ƒ3ƒ5ƒ:ƒ:ƒ=ƒ?ƒ@ƒBƒGƒHƒKƒKƒRƒnƒqƒrƒuƒw„ „„2„4„A„H„R„`„q„x„……………%…&….…s…u…u†%†&†q‡‡,‡1‡Wˆˆˆ&ˆ'ˆ*ˆ*ˆ9ˆ<ˆ_ˆbˆc‰)‰@ŠŠ ŠŠ;ŠAŠIŠLŠrŠ{Œ%Œ+ŒZ&/BHHMpxŽŽŽdŽgŽqŽtŽuŽuŽzŽ{Ž|&?JMWfrsvw{{  !-.=?CILMRWfstt‘‘ ‘‘‘$‘$‘(‘(‘.‘B’>’b’d’k’n’x““ ““ “#“M“Y“p”;”@”E”X”Y”^”q• •[•y––U–V–x–|—— ———(—9—C—S—S—T—U—V—`˜˜%˜+˜6˜7˜8˜z˜z˜~™/™Ršššš$š%š'š*š,š-š.š0š1š2šCšEšVšYš\š]š]š^š_š`šašdšešešn#%22Vhtyz|~žžž+ž+ž?žAžCžPžVž_žhžsŸŸŸŸŸ"Ÿ$Ÿ;Ÿ<    5 9 ? U x y | } ~ ~”””””””””-”/”4”;”A”A”F”_”t”x”~”~¢¢¢¢¢ ¢¢¢¢¢"¢4¢6¢:¢;¢?¢E¢H¢I¢W¢Z¢_¢i¢k¢l¢o£££C¤¤¤&„_„_„e««««"«.«<«<«G«N«^«k««¬ ¬¬¬1¬@¬R¬l¬y¬z¬|­­­­V­V­V­W­X­X­Y­e­g­q®ÆÆÆy±± ± ± ±±±!±(±-±0±2±5±@±M±N±Q±`±`±d±{±}±~±²²²²²8²<²j³³³³D³J³K³a³s“““E“V“n“p“pµµµ%µ.µKµPµS¶···G·I·S·bø'ø)ø-øBøCø[øeømøm¹¹&¹.¹4¹G¹h¹~ŗŗŗ ŗŗŗ(ŗPŗw¼Q¼R¼S¼S¼^¼|¼}½½½½½ ½!¾¾C¾X¾\¾d¾iææ æ æ'æ/æ@æAæGæYæpævĄĄĄĄĄĄ$Ą2Ą2Ą3Ą7Ą9Ą>ĄGĄaĄnĄnĄoĄqĄxĄyĮĮ Į Px‚‚ ‚‚ƒ ƒ ƒ2ƒ:ƒ^ƒdƒjƒ}ƒ}„„„„ „ „ „ „„U„x„z…5†)†-†/†T†U†f†g†h†v†w†y†{†|‡ ‡ ‡ ‡ ‡wˆˆˆˆˆ*ˆ=ˆ=ˆUˆV‰‰‰ ‰%Š6Š@‹Y&6HŽOŽos5i‘ ‘‘‘““ “8“h”=”P”Q”W”Y”o”o”s•y•z–a–t–u———#—M˜%˜%˜+˜0˜1˜8˜a˜|™P™]™_™dšCšCšDš[š[š`KijŸ Ÿ Ÿ"Ÿ(Ÿ7”3”P”k”m”m¢b££ £ £J¤!¤&¤&¤(¤l««2«w¬7¬T­ ­,®®Æ± ± ±±±±*±0±<±]±_±`±~±~²²!²S²W²Z“;“D“Dµ9µZ¶ ¶h··S·z»#»%»X»w¼e½!½B½v¾¾z¾{¾}¾~ĄSĄWĄ`ĄdĄtĮĮ Į ĮĮĮĀeĀjĀkĆ-Ć[Ä7Äl1!7=Yht‚!‚-‚0‚>‚Q‚T‚\ƒ8ƒ]ƒcƒrƒt„„„i„w……s† †(†B†C†C†CˆˆeˆhŠŠŠ@ŠAŠsqŽŽŽ"ŽYŽqŽ~SU/5Is‘R’A’b’l’r’r““J“P”K”L”j”p••$•,•R•\–Y–e———#˜ ˜#™a™aš-šDšGœw"0<O^gxžž*žYŸ" # + N Y Z n”””'”h¢¢¢#¢5¢7¢h£{„|¦-¦t©O«D«Z«]«k«o«u«}¬ ¬ ¬¬¬$¬3¬>¬>¬D¬E¬S¬i¬j­­Z±±±4±T±~²³4³E“!“-µ9µHµJ·&øø ø%»I»I½½½½x½{æææHædĄ(ĄIĄVĄnĄvĮeÅ$‡˜5™c E z¾nt$=PQ‚‚+ƒƒƒ'ƒGƒhƒx„…… …)…I…\†5†T‡‡P‡]‡qˆˆˆ(ˆ(ˆ5ˆb‰_ŠŠŠ'Š,Š1Š7ŠjŠrŒN &&+MyŽ ŽGŽ[Žp  !EvFa‘A‘T’]’u“5“Z”4”O”n••'•S•j•w•z–8–E–J–T–X–f–q—n—u˜P˜p˜q˜r™%™]™^š1šGš\š]›!›/›TœœLœOœOœPœRPnržž9ž[žfŸŸŸ$Ÿz  0 O v””3”P”S”^”o”|¢¢¢ ¢Q££&£>¤&¤s„¦©F©M©j«h¬¬¬%¬Q¬R¬p¬z­­­#­E­|®®+®bÆÆ?ÆY°!±B±M±_±v±}±}²²²Z³³“7“B“C“Hµµ)µ9µJµKµN¶ ¶p¶{·S·i·m·{øø6øeŗ%ŗMŗV»5»L»O¼¼?½½L½u¾¾æ%æ&æLæQæ[æsĄ ĄĄ@ĄnĄsĮ$ĮvĮxĀĀĀĀĀtĀuĆĆĆ!Ć(Ć7ĆMĆQĆXĆkÄÄÄ9Ä<Ä>Ä?ÄCÄEÄP †zˆ"ˆ%ˆ%u‘%• ¢ ³s½H?‚Uƒ„k†dˆˆˆˆx‰%‰_‰{Š"Š6Š\Št‹‹ ‹!‹KŒX6Ž! -:“ ”nš!›AœœœJOŸ*”” £4£8£E¤¤\¤a­$³C³y“-“@“m¶!·¼½FĄJĄJĮ5ĮQĀ(ĀHĀOĀjÄf‰uŒ@ ŽØ?©9«¬¬¬®m°"·¹?¹KJ*i‚yƒhˆs‰%‰&Š%ŠHŒŒ%Ž9ŽS’”–s—@˜™n››U›cœœpž£0¤¤¤7¤a„„„B„C¦ ¦:¦Z§§6§B§W©I©]ŖLŖ[Ŗd¬­®l°}±-²+³/³y“>“K“L“sµ ¶¶M·y¹ŗ%ŗnŗ|¼½|¾"Į-„’‚k„x…  ’q–(–*™>t¢E¬(±K“<¶¶C¹4¹`»½¾, ˆBˆp‰j’~”3œ„ §OØEØGØy©©i­°3“Jµ3ø ø-øC»=»?ĄhĀqĆĆUĆeÄÄÄIÄP‚4Q_‚,‚Oƒ*ƒI„!„"„#„%„Q………_…`†V‡‡g‡h‡j‡k‡kˆˆˆˆ ˆ ˆˆJˆNˆ^ˆzˆ{‰‹2‹4‹5‹xŒ(Œ(ŒCŒOŒY 3GŽGŽp!vw=‘ ‘’’ ““““]””””” ”O•!•'•,•-•?•@•j–– – ––5–X–c–f–r—@—N˜C˜v˜z™.š1šHšIšJ›'›]›]›i›i›j›j›k›l›l›m›m›p›t›t›tœ:œ;œ@œSœTœWœjœjœlœlsžžž ž žžžžž?žNžQž\ž\ž_Ÿ.ŸNŸUŸWŸYŸuŸ                x””3”t”y”¢¢#¢$¢7¢H¢Q¢T¢T¢£££T£W£W£X£Y£Z£Z£[£_£h£i¤¤¤Q¤X¤]¤^¤_¤`¤`¤a¤q¤}¤~„ „„b„p¦¦¦!¦(¦2¦U¦p§§§§§/§L§~Ø©.©/©1©3©A©D©F©K©O©]«H¬¬,¬R¬R­[®A®\®s®tÆÆ?Æa°"°E°V±±E±F±F±G²{³T“B“I“I“J“K“p“t¶¶1¶T¶^·&øø;¹¹GŗŗV» »%»D»F»N¼)¼K¼N¼u½½½+½@¾¾)æLæOæeĄ$Ą9Ą:ĄoĮĮfĮsĮsĮxĮzĮ~ĮĀĀĀĀĀ'Ā-Ā1Ā2Ā3Ā3Ā4aK˜Y¢;¦ Į0{]ƒƒƒ#ƒ$ƒ5ƒ@ƒTƒ}ƒ~„…a†0†B†C†j†yˆˆˆˆˆ#Š>ŽŽar‘&’8””@”q–@–K–]–f–g–u—$—<˜˜8˜?˜P™Xšš'šb›U›rœQœTfž^ž{Ÿ T””0¢¢ ¢(¢@¢C¢E£V£m¤9„*„q„{¦S¦[¦g¦{§'§I©<©q©r«>¬S­­~®%ÆAÆBÆCÆIÆK°6°y±6±K²t“o“~¶\·!ø5ø6øWøZ¹7¹8¹8¹Wŗ^¼P¾¾]æĄ4Ą6Ą>ĄNĮĀĀ Ā ĀĆlāR„ˆ_ˆcˆhŠKŠ}Ž%”N•*–O–r«C¬¼}!¦2i3xy‚-„„?„A„`„e……†.†Cˆ`‰%‰&‰ŠŠŠ ŠŒ+LŽ["5uuv‘‘(’D“ “ “”;”\”b”h–8–<–q—O—R˜˜*™]™f™h%ž!ž5žY G G Z Z \””_”e”|£<£<£B¤¤¤l«M«b¬¬3¬6¬7¬8¬8­±±J²!²M²]“f“g“qµHµIµK··:·H·SøøUøVøV¹ ¼K¼|½væ æ&ĄGĄ}‚>ˆS‰@Ž™xœ(ž žZŸG¢>«®*Æ\²'³“n½lĮ Įf‚%Ž\¢ ±!‚$…_Ž\©>Ą]<ƒ$ƒ/ƒ^ƒjƒj„„Q……_…l…m††g†k†s‡‡ˆ‰_ŠQŒŒN!qu‘ ‘U”P”t–R—9—P˜t™ššIšbžPŸZ N”f”x¢ ¢&¤Y„7„A¦¦ ¦3¦>¦A¦_§§§§§(§eØ0©O©OŖ%Ŗ:¬7¬Q­±-±I“'“)“*“*·w¹ŗ$»A¼D¼K¼f¼wæĄĄ:ĄcĮĮĮUˆ^·y{‚ƒj†&‰fŠpŒW’“Z”*–i—D—E˜LœcŸzŸ¢££^¤S¬¬%Æ/¶Y¹¾P"(*M‚-‚Oƒƒƒ.„ „i…5…7††Tˆ#ˆbŠ\ŠrŠ{Š‹ Œ\Ž=c‘M‘Z’ ’D““@••,–S—7—A—E—N—q˜6˜l˜m˜n™$™W™[››8›m›nœœE$JPžžWŸW ”””-”R”R”y¢ £ ¤¤t¤z„|¦0¦p¦p§§:§FØ%ØV©D©«-®tÆ ÆÆ.Æ/ÆC°B± ²²M³#““jµK»C»E»H¼o½t½v¾ ¾H¾R¾a¾{æĄ=Į ĮĮsĀwĆĆĆĆĆ:Ć<Ć<ĆCĆCĆPĆZĆ`ĆaĆdĆiĆjĆrĆvÄ ÄÄ1Ä7Ä>ÄKÄLÄPÄSÄWÄYÄ\Ä]Ä^Ä_Å Å)Å>\$JxƒJƒY„„=……E† †K†]ˆ&ˆ)‰#‰-ŠmŠpŠ|Œ'Ž3 Vf3’b’b’d““Z”E”K–W—8˜#š š š šE››O›P›XœNœPž!  ;”;”M”c”u”}”~¢t¢w£8£>£^¤Q««u«v¬¬ ¬¬-¬P­F­~±±_ø)øPø[ŗ»I¼¼9½¾Pæ)æ=ĄĄĄqĮ^Ā Ā'e‚aƒ „(†‡‡LˆŠ&Š,˜ 3”E«M¬µµN¼9¼X½tæOĄI%V‚a‚e‚gƒƒ „„(†‡L‹mŒ%ŒR %ŽŽ*ŽQŽX &3[‘ ‘#‘2”n–*–x–x—6˜™O™b.žŸ- + e”””9”E¢k««M¬³5³B³v“ “B“U“wµµN¶Y¹ŗ-»!¼8¼X½0¾O¾yææOĄĮ ‚/!%ABPQVYY\‚‚,‚,‚,‚-‚.‚1‚;‚V‚a‚v‚v‚wƒƒƒƒ ƒ ƒ-ƒ9ƒLƒTƒ_ƒ_ƒkƒx„„(„1„N„S„S„o„p„z…1…3††0†1‡L‡zˆˆˆ;ˆL‰SŠ=ŠsŠt‹d‹m%prŽŽŽ*ŽQŽXŽrŽ  JT&.3=AT[w‘ ‘$‘2’f’q“““0“?“Y“Y“h“i“k“s“s”Z”Z•'•\•g•k•w•z–*–x–x–|————!—#—&—&—(—6—8—_—`˜˜}™-™.™O™b™išššššššš#š&š&š+š5š=š=š>šBšGšJš\š^š_%.3356Bjpuv{žžžžžžž@žIžUŸ-Ÿ; + G L e””””'”,”.”9”=”@”A”A”E”M”P”a”l¢¢"¢&¢6¢7¢=¢G¢]¢g¢g¢k£«««!«+«-«M¬¬@¬H¬`¬|­­­­­V­i­m­t­|®Æ±!±5±:±:±_²²!²4²[³4³6³B“““ “B“U“wµµJµKµNµT·øø#ø-ø:ø:ø>øXøn¹ ¹ ¹¹¹¹&ŗŗ-ŗdŗj»»!¼¼8¼X¼Y¼{½½0½6¾¾H¾H¾O¾yæææ0æOĄĄ:ĄIĄKĄbĮ ‰oŖ¶ ¶8· ŸŸ\šh›«{„˜(™d›°“zŒvØr¶b‚„…ŠŠ[]”^››fœ œ,”X£o¤b©©©"©2­;®Oưµl»»l¾-‚ˆEŽ’2’T’_—k››§Ŗ(·»lˆ š.”VŠŽA°n“)Ą“  yƒƒ5ƒYƒm„†o‰‰1‰DŠ•,Ÿ8 >” ”"”^”}£«%«K«j¬3­1·.·S¹!ŗ½!ĄtĮ „k¦<¬@°… 478‚‚ ‚Mƒ%ƒ'ƒ3ƒ4ƒ4ƒ6ƒKƒSƒTƒTƒVƒ]ƒrƒs„ „„(„?„A„P„P„Q„T„U„X„l………………,…?…G…I…K…\…y…y…{……† † † ††(†.†5†F†G†K†L†N†O‡-‡<‡_‡`‡a‡e‡g‡nˆˆAˆx‰‰/‰`‰a‰t‰uŠŠ Š+Š+Š.Š/Š7Š8Š9Š;ŠJŠKŠM‹‹‹‹‹‹"‹4‹:‹>‹A‹Q‹Y‹\‹mŒ+Œ=Œ| ADevwŽ]  #|‘‘‘!‘#‘'‘(‘2‘E‘G‘H‘J‘L‘`‘k‘l’ ’’%’5’A’D’I’X’X’Y’c’c’d’e’m““ “T“[”””””””%”(”)”*”>”F”H”I”O”P”Q”Q”R”R”U”[”h”j”j”j”j”l• • • •••••+•+•/•1•9•E•J•O•S•T•X•k•z•{––6–6–8–8–C˜=˜>˜B˜B˜C˜F˜P˜R˜S˜S˜l™!™~šš7š8š:šUšjškšqšx›››››!›&›.›3›G›L›N›P›S›X›Y›\›]›e›h›l›o›s›|œ#œ%œ)œ-œ8œ;œCœCœCœDœ_œaœgœgœlœlœm-žž Ÿ?ŸBŸDŸTŸUŸUŸVŸXŸbŸgŸjŸlŸs     ^ c i”””””9”A”V”f”{”¢¢¢F¢P¢T££££&£.£/£0£B£_£a£e£h£m£s£t£t£|£~£~£~¤¤ ¤ ¤ ¤6¤H¤I¤K¤U¤U¤c¤r¤s„ „„„(„(„0„2„6„8„9„Q„V„w„x¦¦¦ ¦ ¦¦¦¦+¦5¦C¦H¦J¦L¦O§%§'§(§4§?§E§F§c§|ØØØ©(©)©,©D©E©N©R©T©X©^©^©d©f©g©g©hŖŖ Ŗ ŖŖŖŖ&Ŗ'Ŗ)Ŗ,Ŗ0Ŗ7Ŗ;Ŗ@ŖBŖ\Ŗ]ŖfŖnŖnŖtŖuŖu« « « «««««1«>«E«k«l«l«n«p«x«~«¬¬¬A¬C¬_¬o¬q­"­5­6­K­y®®!®"®$®'®)®*®,®2®Q®a®o®p®w®}ÆÆ+Æ:Æ:Æ;ÆOÆh°°° °°!°7°>°R°U°[°^°_°b°i°|±±±±±&±4±E±s±u±y²² ²²²'²1²L²U²c²t²v³³³3³4³`³h³j“!“&“B“W“\“_µµ5µ6µ<µ@µLµ\µ]µeµo¶¶2¶3¶6¶8¶X¶Y¶j¶y·· ···$·%·e·l·n·pøø ø0ø2ø>øKøPøQøRøgømøm¹ ¹ŗSŗu»»»»*»,»5»7»=»G»H»J»O»P»Q»S»V»X»]»}»}¼¼¼$½½&½Z½[½_½e½f½h½i½i½m½t½~¾¾¾¾¾$¾3æ'æMæbædĄĄxĮ-Į3Į3Į4Į:Į;Į<ĮEĮJĮOĮTĮTĮZĮ\Į_ĮiĮjĮlĮoĀĀĀĀĀ ĀĀĀĀĀĀ$Ā&Ā(Ā)Ā-Ā;ĀR ŒOŒoŽŽ%r– ˜d¢©D¬N·^øZ¼OĄoĄoĮ6Ā  /‚h‚v„…8ˆˆ;Št‹OŽ“!–z™ ™!š¢x£ ¦¬ ¬@°&±1±X³Q“··ærĮ( ‚;Š;$Ž`Žs5“5“I”•*š= K \”” ”¤:¦¦§4§\©\©ŖQŖZ«?«x­_°2°;³+³5ø¾hĄĮ/ĀtĆĆm æd ‚rƒR„_†:‡‡>‡[Š.ŠQ‹‹9Œb’-’Y“” ”Q•V—f˜˜™™C™j™qšV›!›$›p›|œœDœdŸG ”7¢M¤¤G¤y„ ¦¦b§ §©/©L«¬c­,®?®L®P®]®|Æ;°°°"°W°f±u²"²Q²Z²p³ ³ “2“mµ[µ\µ¶¶'¶p·B·Pøø:øqøŗ=»G»V»]»f¼¼Y½ ¾yæcæxĄĄ:ĄqĮWĀ;5 ‚G‚n…V†Eˆ@‰4Š^‹>Œ8ŒhŽ GSh’3’D••Q•i•s—/—Kœ5!Ÿ”%¢_©«!«6®-®4®?±^²z“.¶··Lø øI¹bŗ#ŗ=¼¼?½+½h¾GæiĄ ĄV W 6V‚ƒq„f„t„‡~‰‰;Š@‹‹i‹zŒ:ŒAŒX$6Ekh’A“&“2“R“g“k”=”K• •$•e–—D—^˜˜`˜y™KšššQžž%Ÿ>”(¢Z£B¤i«*«T¬K­®®Æ²X““P“sµF¶ ¶h··Z·bøU¹,ŗ ŗ*ŗ8ŗ^»»!¼¼+½½ ½O½rĄ ĮĮ5ĀBQ C‚ƒ]ƒ_ƒjƒt„K………)‡/ˆˆˆ"ˆSˆb‰‰ŠrŒS,3Ž'T‘‘ ‘‘ ‘ “ “$”T••1——$—0š š žŸ4Ÿ? W”b¢¤¤$¤j«%«U¬*¬O¬U¬`¬`¬{­­­­r±9²²C²Q²\³J“8“_µSµUµW¶ ŗNŗd¼}æĮĮ#ÄQÄTƒ"  !",36HLy‚0‚:‚:‚f‚nƒƒƒ ƒƒƒƒ!ƒ'ƒ'ƒ5ƒYƒm„„„„1„;„?„A„P„P„R„e„i„w„{……………5…7…s…t†† †"†&†/†b†d†i†o†}‡W‡s‡vˆ!ˆ;ˆJˆJˆZˆ_ˆcˆi‰‰‰(‰+‰1‰DŠŠ=Š@ŠJŠJŠMŠVŠYŠmŠ‹mŒ Œ@  ŽŽ Ž ŽŽŽŽŽŽŽ<ŽcŽoŽ~   "Ufmy/1Caf‘'‘B’A’D’e’m’r““ “ “““+“@“G“P”K”N”p••%•'•)•,•j•n•o•o•x––(–/–<–E–N–e–e————!—#—$—%—?—L—R˜#˜'˜(˜l™I™W™\™b™iššš=šDšEšVšYšZš^š^š^š_š`šašešešešmšn$%1159BOPU^g~žž"ž(ž)ŸŸ8Ÿ: " & 0 0 > G N Y Z e””” ”"”'”4”:”@”K”M”Q”\”^”^”a”k”p”w”}”~¢¢]¢h¢t¢w££ £££<£?£G¤¤¤l¤t„e«««««!«%«*«,«3«D«K«N«]«^«b«e«e«j«q«u¬3¬3¬3¬9¬:¬>¬P¬d¬l¬{¬|­­1­Z­i­k®®®ÆÆ±±±± ± ±±+±/±1±4±B±U±V±W±[±_±`±}±}²²²M²O²h²j³E³J“ “““!“5“@“U“Y“w“w“}µµ5µ9µFµGµSµU¶e····.·:·G·H·P·S·b·eøPøeøgøl¹ ¹!¹Aŗŗŗŗŗ$ŗN¼¼¼9¼N¼R¼j½½ ½½½½!½x½{½|¾¾E¾e¾sæææææ æ&æEæPæSæYæ`æeæuĄ&Ą0ĄGĄTĄUĄVĄnĄoĄtĄ|ĮĮ ‘9™*£V¬$­~³Aŗ^¼ +„†z‡1‡lˆ‹^Œ>“ “” ”W—˜#˜{š›0œT0^zžPŸT £T©2«[«p¬¬/¬9®_°~³¶4¹¼ ½Z¾G¾sæH”l}"ƒ%ƒ'ƒ;ƒOƒSƒSƒk……%‰?‹AŒ ŒŒ"ŒRDŽ' LWTa‘‘‘‘ ‘(’4’d“ ””j”u• •+–<–E——M—P˜|™K™\™iš2šCšn›mœœ8JPeŸŸ7Ÿ?ŸO $ P””F”a”c¢¢H¢X¢t¢u¢w£)£/£:£B¤ ¤P¤Q¤~§jØ`©L««,«<«f«r¬F¬H¬L¬O¬`¬a¬{­­,­k®Æ±,±|²K³“wµTµW¶B¶p·#¼R¼V¼Y½ ½h¾¾5¾hæbĀĆĆ#ÄqhLQ‚E‚Y‚vƒ „„R„}…M†<†o†rˆc‰#‰aŠŠŠ\‹‹U‹qŒŒŒk!ŽŽ"Ž7ŽOŽyky'P‘+‘E‘a“&”u••!–D–S–T–Z˜b˜q™`™a™aššiœMxž ž@ E l”g”u¤ ©b«^«b«g«t¬¬¬¬9°A±.³N“1“i“pµ5µ<µ<ø¹¼<¼f½t¾Q¾TææEĄĄ=Ą=ĄBĮĮ5ĆÄhÅA‚:‚Zƒƒ!…0‰ [_ž ¢¦x§f§©°=³J··{¹»b»b¾)¾UĆSl‚%‚.‚/‚;‚I‚Wƒ?„!„"„l… …K…k…|†† † †"†%†/†5†L†t‡qˆh‰T‰b‰gŠ,‹‹‹*‹s‹w‹xŒOyŽŽŽ+.\] +\‘H’’5’<””4”r”r•'•R•b–––z–|——%˜@˜C˜Q˜r˜w™1šB›››/›?›E›J›L›P›P›rœœ)œ7œ9œBœhœ~vžžžž.žAžAžrŸ#ŸRŸaŸx”¢$¢/¢?¢f£££?£r¤<¤c„„„ „ „ „¦¦R¦Y¦^¦c¦d¦~§ § §§E§jØ3ØNØ\Øz©7©M©Y©fŖŖ Ŗ8Ŗ<ŖKŖ{««¬¬.¬j­#®®"®?®D®V®mÆ)Æ-Æ.Æh°°&°w±³³³H³v“B“Xµ)µ,µ/µHµIµr¶.¶X¶{ø6ø=øJøM¹\ŗ5ŗ8»<»C»D»E»F»L»e½H½J½c¾¾.¾9¾hæ ææææ8æ=ĄNĄNĄhĄlĄuĮ!Į1Į7ĮBĮDĮIĮ\Į\ĮeĮmĮnĮxĀĀ Ā ĀĀĀĀĀ Ā*Ā*Ā,Ā-„ …Qˆ7‹;ŒB•˜Tš)œ$ ¢o¬"®V®q®rÆ?°²6³»v¾kæIæfæpĮz   !"06778HLLLMPPQQQRSWXY]]^abhnnoopvxxy{‚‚‚‚ ‚ ‚‚‚‚‚!‚%‚'‚(‚)‚)‚*‚*‚+‚-‚.‚.‚/‚0‚1‚1‚3‚4‚:‚:‚;‚<‚=‚D‚F‚G‚J‚M‚O‚T‚U‚X‚X‚b‚e‚u‚v‚y‚{‚}‚}ƒƒƒ ƒ ƒ ƒ ƒƒƒƒ!ƒ"ƒ#ƒ'ƒ'ƒ*ƒ-ƒ3ƒ4ƒ5ƒ5ƒ6ƒ8ƒ8ƒ8ƒ9ƒ;ƒ<ƒ<ƒ>ƒAƒIƒIƒJƒLƒLƒOƒSƒUƒUƒ[ƒ\ƒ^ƒfƒiƒmƒmƒrƒrƒsƒsƒtƒwƒw„„„„„)„-„3„6„8„8„;„?„K„T„`„e„e„h„i„k„q„t„u„v„w„w„x„z„{……………………………$…$…$…&…'…)…,…/…/…1…5…\…^…s…t†††††††† †"†&†)†-†.†.†/†0†b‡‡‡‡‡‡%‡/‡/‡/‡1‡L‡U‡w‡xˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ!ˆ!ˆ%ˆ%ˆ&ˆ)ˆ)ˆ5ˆ7ˆ9ˆ;ˆ<ˆ=ˆ=ˆLˆMˆPˆPˆYˆZˆ[ˆ]ˆ^ˆ`ˆbˆcˆeˆkˆwˆxˆxˆyˆz‰ ‰‰‰‰‰‰‰‰+‰/‰2‰6‰;‰L‰N‰P‰R‰R‰S‰{‰‰ŠŠŠŠ Š ŠŠŠŠŠŠŠŠ Š#Š#Š#Š'Š.Š0Š6Š:Š;Š=Š>Š@Š@ŠAŠDŠEŠQŠVŠYŠbŠdŠdŠrŠrŠsŠsŠxŠ|Š}Š‹\‹a‹s‹x‹z‹{‹}‹}ŒŒŒ Œ ŒŒŒŒŒŒ Œ%Œ%Œ&Œ(Œ+Œ0Œ1Œ@ŒAŒCŒQŒRŒRŒSŒYŒ`Œe     $$%&))+-.0377?DGGGKLkmmqqvŽŽ Ž Ž Ž ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ Ž Ž$Ž$Ž%Ž'Ž'Ž'Ž*Ž7Ž<Ž<Ž<Ž=Ž=ŽXŽYŽYŽZŽoŽpŽrŽrŽsŽvŽwŽxŽzŽ{Ž~Ž~Ž~        "%&*00114556:;<=IKLMTTTUVVWXZ_ippuuvvz   +,-.15589:=>?ILRTWWY[abbcorsstuvx‘‘‘‘ ‘‘ ‘#‘%‘&‘&‘'‘'‘,‘/‘/‘4‘?‘A’,’/’3’3’>’A’H’b’c’c’d’d’e’e’e’f’l’m’t’t’u““ “ “ “ “ ““““““““ “&“8“>“>“?“?“B“D“I“J“S“[“\“g“h”8”8”@”E”H”K”R”R”S”T”U”U”Y”Z”^”f”h”q”t• ••••• •$•$•$•%•&•&•'•*•+•,•-•/•1•Z•[•i•n•p•t•w•w•x•x•z•{–––(–/–0–1–1–2–2–<–<–J–J–J–K–Q–S–T–Y–^–a–o–o–o–t–u–z–|———— — —————————!—!—!—#—$—$—%—%—%—&—(—+—/—/—6—6—7—7—D—F—L—N—O—O—R—S—T—T—U—_—_—q—x˜˜ ˜˜#˜#˜'˜'˜+˜4˜5˜5˜7˜8˜`˜h˜l˜m˜u˜u˜y˜}˜}™5™6™K™L™L™M™O™R™\™h™šš š š ššššššššššš š š#š$š'š(š(š)š*š*š*š*š,š,š.š.š/š/š1š>šBšBšCšCšDšEšEšFšHšQšZšZšZš[š[š\š\š^š`šašcšcšdšmšmšnœ3œ5œE !""%%(02258889JKOUX^_eemnpqrssuwy|}~~žžžžžžžžž!ž!ž!ž"ž(ž)ž)ž)ž*ž*ž*ž-ž.ž2ž>ž?žBžCžIžLžOžOžRžTžVžVžWž^ž^ž_žhžkžtžtžxžzž}ž~ž~ŸŸ Ÿ!Ÿ!Ÿ$Ÿ*Ÿ4Ÿ4Ÿ4Ÿ7Ÿ8Ÿ:Ÿ:Ÿ?Ÿ@          ! ! " # # % & ' + - . 2 3 > G G N P S T W Y Y \ \ _ n u v y y z”””” ”””””””””””” ”!”,”.”0”3”4”6”:”<”=”>”@”B”K”M”P”Q”Q”Q”^”`”a”b”c”k”n¢¢¢¢ ¢ ¢ ¢ ¢¢¢¢¢¢¢¢ ¢ ¢!¢!¢#¢$¢%¢%¢)¢*¢0¢0¢5¢5¢5¢6¢7¢7¢8¢9¢;¢;¢<¢<¢=¢>¢?¢?¢A¢A¢F¢F¢H¢J¢J¢Z¢_¢g¢h¢i¢n¢x¢¢££££ £ £ ££££9£<£<£B£F¤¤¤¤¤¤¤¤¤¤¤¤¤¤&¤'¤5¤g¤g¤g¤l¤t¤u„^„_„b„e„e„eØE©|«««««««««««««««« «!«!«"«%«*«+«,«,«-«-«.«=«>«A«C«E«E«H«K«M«Q«Q«R«U«U«Z«Z«]«]«e«e«f«j«k«m«n«o«o«o«o«q«r«s«s«t«x«~«~¬¬ ¬ ¬¬¬¬¬¬$¬*¬0¬1¬1¬3¬3¬4¬6¬7¬8¬8¬>¬>¬?¬C¬C¬C¬E¬E¬E¬E¬S¬T¬`¬i¬i¬i¬j¬v¬x¬{¬|­­­­­­­­­­1­U­Z­Z­Z­]­]­_­_­g­i­r­v®®®ÆÆÆÆÆ°p°r±± ±±±±±±±±±± ±&±&±*±*±*±+±-±4±9±<±@±J±M±P±P±S±S±T±W±X±_±`±c±j±{±|±}±~±²²²²8²9²;²<²C²E²E²L²M²O²Q²\²\²b²h²h²j³³³4³5³9³A³B³C³D³`³r³s³s³v³z“““““!“&“*“-“7“8“E“R“W“X“Y“\“_“f“g“q“s“v“w“z“zµµµ.µ3µ5µ5µ9µBµFµFµGµGµGµIµIµIµJµNµSµSµUµUµUµWµWµZ······(·1·7·7·:·P·Qøøøøøøøøøøøøø!ø"ø#ø;øBøCøQøUøUøVøVøWø\ø`øgøhøløm¹¹ ¹ ¹ ¹¹¹¹¹¹¹¹!¹"¹*¹,¹2¹6¹6¹8¹C¹O¹Q¹bŗ ŗŗŗŗŗŗŗ$ŗ>ŗFŗFŗMŗMŗNŗZŗdŗj»» »»»»#»%»%»&»v»w¼ ¼(¼+¼0¼8¼?¼G¼N¼O¼P¼P¼V¼W¼`¼e¼i¼i¼y¼y¼z¼{¼|¼}¼}½½½½½ ½ ½ ½½½½½½½½ ½!½)½)½:½B½J½Q½o½u½x¾¾¾5¾G¾H¾H¾M¾W¾Y¾Y¾Y¾Z¾a¾a¾b¾b¾c¾f¾g¾g¾h¾l¾l¾n¾o¾{¾~¾~ææææææææææ æ æ æ æ æææ%æ&æ'æ1æDæHæLæLæOæQæQæRæSæTæ]æ_æ_æ`æ`æbæbædæsæuæuævæyæyæyæyææææĄĄĄĄĄĄĄĄĄ"Ą#Ą(Ą1Ą4Ą5Ą7Ą9Ą:Ą=Ą?Ą@ĄCĄGĄHĄIĄJĄQĄSĄ^ĄaĄbĄbĄfĄlĄnĄ{Ą{Ą|Ą|ĮĮĮĮĮ ĮĮĮĮĮĮ Į!Į#–9°9ĆCƒF†‹&•a–š"žG e”'¦s¹æPĄ‡<‰k‹gŒ[‘@‘_’<’~”››w£Q¤;„rØ(ØDŖ«7«9²@³µkæiĮ7j!}‚P‚xƒ`ƒa„„x… … …*…7†/‡‡3‰Š0Š8Š:‹‹|Œ1Œ2Œ2ŒMŒl ŽŽ<'‘Z’0’q“&“,”•5•p–(–*—A™™7™7™7™8œ2œi tžž$Ÿ0Ÿ0Ÿ4  ( _””B”E”¢&¢8¢8¢S¢S¢l£f¦N§ ©*¬(®®®®®nÆ<°C±X² “<“zµµ!µ&¶··p¹4¹QŗK¼I¼I¼{½½Y¾Gæ[Į=««°>„ ‡ ‰]‹@‹FX™;žS „W«IÆ&³J“*µT¹»2ææ6  ˆxœ”y£0£~±}±~²L¼I¼}½i½vÅ %‚<ƒV……†!†%†-‡I‰BŠ'‘E’ –`–t˜™›(žŸ;¢¤„(¦¦C¦o§&Ŗ3°G³"³N³t“¶,¶PĮ $n‚W‚}ƒO„H„`… …$…0††U‡‡xˆ&‰‰;Š2‹{Œ Œ"Œe 7GpŽŽŽ$Žz .;?Xs‘‘‘‘‘&‘A’0’4’;’t““9“@“\“g”””H• •x–x˜˜(˜9˜n˜n™[™h›r KXdhž*žIžrŸŸ/ # ( ? v”””/”4”K”c¢¢I¢_¢y£ ££9£z£z§© «U«a¬*¬*¬d¬q¬x­1­v­~®gƱ±±?±K±}²²² ²K³D“Y“_“e“n“pµµ/µU·7ø#øV¹>ŗŗ »» »"»&»b¼1¼G¼Y½ ½!¾¾nææ/Ą.Ą4ĄmĄuĮĆĆBĆSĆZĆoĆrÄÄ ÄÄ@‚ˆsŠ–/„«&‚ar}‚‚ ‚ ‚A‚^‚lƒƒ-ƒRƒUƒt„(„5„E„O„P„W„o…….…?…W…k…z†(†S‡,‡L‡T‡vˆˆ.ˆLˆYˆv‰ ‰‰(‰=‰R‰u‰w‰{ŠŠŠ*ŠQŠ_Šq‹M‹b‹p‹wŒŒŒ%Œ0Œ4Œb')KŽŽ*Ž0ŽBŽ|Jn>L\‘‘?‘^’?’I’u“““+“9“P“p“v”`•••!•?•Z•x– –––0–o–x——+—8˜˜˜4˜^˜l™I™mšm›'›>œ œE !BIZmžž0žnžŸŸ!Ÿ-Ÿ:Ÿ;  7 T \ ^ k”” ”J”_”{¢¢¢J¢W¢k¢{£E¤¤¤!¤f¤q„e§E§W§sØØ©U©w«%«K«[«{¬ ¬3¬?¬i¬i¬v­­1­U­k®A®MÆÆR°d°r±²²4²E²T²_²j³³³n³}“““$“1“7“R“\“v“}µ5µBµZ¶ ¶¶3¶P·(·B·S·nøø)ø>øF¹¹¹2ŗ#ŗMŗS»»%¼(¼6¼V¼a¼r½ ½)½@½]½p½{¾¾5¾O¾xæææ)æ+æ6æ9æDæMæĄĄĄ{ĮĮ#Į<Įk3 ƒ4ƒ6ƒ8ƒJ…fˆ=‹5<’›0œgžž$ž_ ? ?”<”h¢ ¢h«k¬]¬p­=­D­}®®D®m±J±a±q² ³“eµa¶2ø¹Z½¾8¾G¾]æ æeĄfĮQĮk„6%/2<CM‚‚"‚.‚;‚O‚W‚yƒƒƒ4ƒ6ƒ8ƒCƒEƒFƒIƒUƒ[ƒ\ƒiƒw„„ „!„!„"„#„%„'„)„4„5„l„m„o„w……………$…?…N…k…o…o…p…y†††!†*†.†/†<†J†O†_†h†i†n†n†t†u†x†}‡,‡T‡xˆˆ!ˆ"ˆ&ˆ5ˆ7ˆ<ˆ<ˆUˆ_ˆbˆhˆkˆmˆwˆ{‰‰/‰>‰N‰uŠŠŠŠ Š7ŠFŠxŠ}Š‹t‹zŒŒHŒOŒQ !$KŽŽŽŽŽŽ%ŽRŽ\ŽdŽiŽpŽz .XZ^_dirv(XX[‘‘‘‘#‘/‘/‘5’t’u““““#“:“?“h”E”E”L”U”q”t•&•+•R•Z•\•j•w•y––––1–1–]–o–o–q–t–z–|———%—'—(—-—?—F—T—U˜˜˜%˜'˜(˜,˜1˜2˜4˜?˜p˜q˜v˜}™™6™L™cšššš'š(š2š4š<šAšBšFšHšIšJš\šcšdšn›'›W›W›rœ$œ@œ^!8KX`emsuvžžž ž žžžžžž$ž.ž?ž@žAžAžAžCž\ž]ž_ž_žcžgžkžrž{ž|ž~ŸŸ!Ÿ.Ÿ;Ÿ<Ÿd   - _ s v x””””#”0”;”<”b”u”v”v”w”|¢¢ ¢ ¢¢¢¢!¢#¢$¢J¢X¢f¢h¢i¢k¢o¢o¢{£ ££G£_£e¤¤¤?¤X¤i¤l„„(„)„B„h„t¦¦3¦U¦o¦x¦~§§§§§I§g§j§lØØ©7©yŖd««« «!«"«*«-«-«.«?«G«K«^«c«k«m«z«{¬¬¬!¬"¬&¬.¬8¬:¬F¬T¬j¬l¬q¬x­­ ­­v­}®®AÆÆÆ_°V°v±± ± ± ±±±±±*±.±/±1±6±9±<±?±J±P±W±a±|²²²4²6²7²<²E²M²\³³³#³$³%³5³D³F³G³P³v“8“B“C“V“s“sµ)µ/µ3µ9µI¶ ¶2¶U··.·7·7øøøø;ø=øRøWøhøm¹¹?¹G¹Z¹\¹^ŗ1ŗFŗFŗNŗpŗzŗ|»»"»D»F»S»t»v¼ ¼¼1¼J¼P¼W¼z¼~½½ ½ ½O½Q½`½o¾¾G¾T¾W¾Y¾Z¾\¾h¾k¾n¾yæ æ æ ææææææ%æ.æ=æ>æIæeæpætæuĄ$Ą0Ą1Ą3Ą4Ą6Ą8ĄIĄLĄLĄMĄbĄfĄhĄmĄqĄĮĮ Į\Ā ĆĆ?Ä4ÅÅ$<‚lƒ9ƒIˆ;‹I‘.“<—DŸ<”<”l¢ £+£N«=ŗ ŗ1æzĮ]X##/8Aadfo‚}ƒ+„„ „9„O„Q„h„z„{……*…V…i…n…n…q†e†f†v†v†y†{†{†}†}†‡‡ ‡&ˆ ˆˆˆˆˆˆ.‰1‰SŠŠLŠ{ŒŒRŒ]/7mqŽ=ŽdŽg#KSr|’4“““!“#“9“:”9•k–B———V—[—[—[—\˜6˜t™™]šDšGšH58:OhžŸŸŸ(Ÿ.Ÿ/Ÿ5””!”=”u”w”}¢¢¢ ¢ ¢¢/¢2¢2¢4¢G¤¤u„^««««"«%«<«=«Y«c«c«p«q«w«y¬¬2¬9¬B¬F¬L¬P¬i­k­}®®®®°r± ± ±.±1²6²8²S³6³~“I“wµøøøø!ø"ø'ø?¹0¹0¹4¹;¹Aŗŗ%»»#¼½O½S½|¾C¾\¾p¾q¾æRævĄ4Ą9ĄMĄSĄVĄhĄiĄiĄxĮĮVĆĆ8ĆYĆÄÄ,ÄAÄqāĀ)=ƒSƒ^„ …q‡‡Š‹Œu"’]““:“\”–=˜?š/›@›A›C›D9ŸsŸtŸwŸwŸyŸ{Ÿ}   s¢¤R¤T¤Y¤\¤o„ „„)„s¦P¦r¦~§Ø+Ø-©>Ŗ@ŖVŖb«{®[ÆE°#ĄĮĮ\†<§ ƒ=…^‡P’R™œ&Ÿ¢Æ-0‚)ƒ9ƒ\…}†I‹xŽ:v.X‘N‘V”)›Ÿy”-¢¢[£¤6¤V„D¦n§ §A§\§|Øa©WŖ)Ŗ?ŖR­S®Y®h®sÆ9°°Jŗ:½½æiæzĄĄ…l…m…m‡‘P›b¢„M¦{§C§SØØ!Ŗ8ŖnÆ7°V°X¶U·xø&»RĄ …yŠ0”*›oœaŸNØ+ŖŖ)®®$ÄÄ ÄÄ=‹)‘T„q¦?¦U¦_¦h§+Ø}ŖXøø4»`°VælV!@…,†6‡‡‡7‡qˆˆpŠ ‹NA’Y—?—@˜RšFšUšy› ›› ›R›bœXœqŸ{Ÿ{  '¤\¤r¤~„~¦)¦b¦u§§_§`ØrØu©©*©?ŖŖ&Ŗ'¬YÆÆ1Æ\Æm°F°b±±:±E±y²²²{“µ|¶øX»»:»C»k¾&¾_¾uæjĮĮhĀĀ+Ā0ĀQĆpÅ‚BˆCbŽ’L“b•F•U—kš8¦«nÆl³$“µt·M·dø »Q¾Dæ7ækĀ  ˜/œ/„„W©?«L­ ®¾.mr‚)‚Lƒ_……x† †)†<‡\‡h‡oˆˆ+ˆA‹Œ|xHKT~8]‘#‘]’P““2“5••G•W•Z•s—˜5˜D˜E™™™j™zšFšVšg›7›fœQŸOŸ[  ”X”{¢¢&£1£o£|¤7¤M¤_Ø©^©lŖŖ/ŖG¬`­:­G­O­v®®GÆ,°°°a°}±n²0²h²z²µj¶··#·K·o¹ ŗ%ŗ;»»8¼A½&½S¾¾=ælĄĄ{ĮSĀĀ*œC®P¶~‚D‚U‚sƒQƒQ„„L„h…#…6…;†.‡(‡9ˆF‰|Š-‹‹8‹\Œ Œ'%"@x’’7““/“s” • •'•V•c–M˜<˜F™ ™H™k™pš<››*›2›wœœ!œWœt-LežžTžTŸŸ: ! R c”£G£k¤¤(¤l„„„3„@„WØØU©:©W« « «&«y¬H¬r­­­®(®1ÆÆÆIÆPÆ`°°2°4°N°N± ±"±-±q±s²%²)²|³*³@³E³F“vµ µ µOµrµ~¶(¶7¶:¶`· ··>·A·Zø`ø|¹ ¹W»¼½½e½pæ!æaĄ2Ą;ĄXĄkĮ:ĮQĀĀĀ:ĆjÅÅ~„h†:‡P•–›!œ0¤q¬c²)µj¶h»¼¼%¾Ą/~‚'‚J† ††=†N†w‡!‹(‹8’a•–b—š+š[›=›bœ/}ž:žd”z¢„8©1©KŖ ® Æ^°'°A°[³@µj¶`øø&»S¼¼½Y¾¾lĄa~ƒ|›-žL±]<}ƒK‡Z‹‹9‹<Žt’R”~•˜@™n››aœ"ŸŸN   s z”%”r¢£l£v¤+¤X„A„P„h§4Ø[©XŖ9ŖM« ««&­­­<­HÆÆ,ÆHÆm° °j²³#µt¶A¶x·ŗnĄĄkĮ--}Qƒs„o…g‡\‰g‹‹BŒu0|‘O‘\–}—\—^—`˜˜ ˜ ˜)ž1  G¤ ¦¦¦P§§§AØØ]©6¬"Æ.³'³;· ŗG¾oæ[Ā(Ā)}† †n†o‰9ŒŽ e“•˜N›fœ;ž&” ¢N¦#©c¬#Æ,µµ|·DĮ}}}†A|‚%‚*‚/‚1‚2‚F‚H‚I‚KƒM„„„ „2„6„8„i…… …=…>…Q…X…X…\…o…z…|…|……††† † ††††††††5†:†I†K†L†M†N‡‡]‡`‡a‡b‡c‡c‡e‡qˆˆ!ˆEˆMˆ_‰>‰b‰c‰g‰h‰j‰kŠ,Š0Š8‹‹‹‹‹‹‹*‹0‹0‹3‹4‹8‹;‹L‹N‹Q‹s‹xŒŒND[`cy{}ŽŽ!Ž+ŽpŽvŽ|CEIPRp !+,,-=F}~~‘‘'‘E‘H‘J‘K‘K‘R‘S‘^‘`‘t’’’’’’’’R’W’X’Y““3“b“m“n”””&”0”1”2”2”3”4••••••7•>•E•R•_•`•b•j•t––– – ––D— ——————(˜˜,˜/˜@˜C˜D˜F˜Q˜Q˜T˜X™™ ™™+š š#š$š%š)š?šFš]š]šwšxšy››››››!›#›-›/›0›:›>›?›@›E›J›J›K›L›L›L›O›P›P›Q›R›R›S›T›W›\›a›a›b›c›h›o›r›r›sœœœœœœ$œ)œ/œ7œ7œ8œ9œ>œBœLœSœYœgœgœhœlœxœ}œ~Z]_nržžž?ž?žBžTžVŸ1ŸGŸHŸIŸKŸLŸRŸRŸSŸTŸTŸUŸVŸWŸXŸ`Ÿ`ŸaŸiŸjŸoŸsŸxŸy    O ` q v y”””V”h”{”¢¢¢¢%¢&¢*¢,¢-¢/¢7¢8¢>¢?¢@¢P¢R¢U£££ £'£A£S£T£V£]£^£a£d£p£r£|¤'¤,¤.¤9¤:¤<¤>¤B¤J¤N¤c¤d¤z¤|„„„„„„ „ „ „ „ „„„„"„,„,„-„.„0„2„5„8„9„A„V„r„y„|„¦¦¦¦¦ ¦ ¦¦¦)¦+¦.¦;¦G¦I¦R¦]¦^¦_¦c¦d¦h¦l§ § § § § §§§§&§3§N§h§oØØØ!Ø2Ø3Ø4Ø8Ø>Ø?Ø@ØIØNØSØWØ[Ø\Ø^ØpØuØzØ{© © © ©©+©+©-©7©:©;©?©D©L©X©Y©f©g©hŖ Ŗ Ŗ ŖŖŖŖŖŖ Ŗ%Ŗ%Ŗ&Ŗ+Ŗ+Ŗ/Ŗ2Ŗ6Ŗ7Ŗ8Ŗ8Ŗ9Ŗ;Ŗ>Ŗ>Ŗ@ŖCŖEŖIŖMŖTŖ\ŖcŖeŖmŖmŖnŖtŖuŖ{«« ««E«L«k«l¬¬+¬A¬[¬]¬p¬p­­#­8­:­;­=­C­E­F­O­_­e®®®!®%®(®)®?®D®F®U®V®V®m®m®n®p®p®q®r®sÆÆÆ)Æ+Æ-Æ-Æ.Æ8Æ:Æ?ÆQÆTÆaÆdÆh° ° °°°°&°'°+°-°.°/°1°3°4°7°:°@°C°F°X°j°r°w±±4±5±6²²;²n²s²w²w³³³³³³³#³,³.³4³9³@³A³N³]““““B“Xµ*µJµKµ\µ\µ]µ^µaµaµbµr¶ ¶¶¶¶'¶.¶1¶2¶2¶3¶3¶R¶X¶i¶y¶{···_·l·n·r·søøøøø3ø4ø4ø6ø7ø8øEøJøMøqøqø¹ŗT»»"»+»5»<»<»C»E»F»G»G»J»L»T»^»_»`»e»e»t¼(½½½#½J½Y½[½\½]½c½t¾¾¾.¾8¾9¾]¾læææ8æ>æAæIæLæMæ_æfæpæqævæwæyĄ#Ą#ĄLĄ[Ą]Ą^ĮĮĮ%Į1Į2Į2Į3Į3Į4Į6Į6Į8Į8Į<Į@Į@ĮBĮBĮCĮCĮDĮGĮIĮJĮOĮQĮRĮTĮTĮZĮ[Į\Į^Į_ĮbĮdĮdĮeĮiĮjĮkĮkĮlĮmĮnĮnĮrĮrĮwĮxĮzĮĀĀĀ Ā Ā ĀĀĀĀĀĀĀĀĀ Ā Ā!Ā"Ā'Ā(Ā)Ā)Ā*Ā*Ā+Ā,Ā,Ā-Ā/Ā0Ā1ĀRĀU|‚*|‹‘o¶\^|ƒM„N……‡CˆˆA‰8‹A‹kŒ+Œ=ŒMy&E,’’7“ ••V––}—C™(™q™~š7šVšg›'›8œDœXfžŸŸ] R”>”U£&£P¤H„„2¦b©FŖŖ&Ŗ|«)«1­"­G®®G®_Æ)Æd°±s²S³M³j“0µ¶¶m¶{····gøLøqŗ:»»»f¼&¼5¼U½½%ĄĄ6ĮSĀ/Ā9ĀDz¦.z‚2ƒs‡‡d‹ ‹‹.‹2‘S“8˜B™m›(›,œ%vŸŸ~”f”|¢P¢T££¤=„2¦ ¦§>Ø.©©mŖŖ ŖŖ9ŖoŖy« ­L®ÆA¶B· +yƒd„R…ˆ]Œ`!i’ “I”1–––]˜?›3ž$žA”v¦¦9ØX© ©©#©R©lŖ3«w°>²L³Yµ5·ø7¾GĮOĀ,Ā0ÅÅy¦®,yˆe‹;%Ž{’’L“"š@ %¦ØF©:Ŗk«<ÆB²&¶¶søZ½_¾py–}Įey‚#Š+‹HY¶½>æĀĀĀmĀzĆ(Ć)ĆNÄ%ÅÅÅ<nyp‚ ‚"‚"‚(‚HƒƒLƒR„ †k†z‡ ‡ ‡‡D‡D‡]‡e‰?‰iŠŠ.ŠJHaŽŽŽ5‘’“I““”]••Q–šš š[[ŸŸŸEŸ` / D”o¢3¢O„`¦ ¦ ¦H¦I§Z§~ØV©g«*«mÆÆK°° °/°F°R°[°\² ²Q²Z²o³7³I³k³kµµµ0µJµW¶$¶$¶G¶u·#·#øøzŗ/ŗ/»»3»V»|»|¼½ ½(¾æĮ^Į^Ā=y‘F’©?»_xp‚!%’n2yžR”t­U“ø'ø7ŗ¾eæAævĮP)x†uŽaF ‘‘’n”˜Fy E £?¤9„oØ©9­#­U°&“µ/µ/øø)ø)ø,ø-ø7ø[øgŗæ æAæfævĄ4ĮPÅ7xææĮf x†‡Ž%’“8–{™7„®w°\xFb‚‚ ‚‚>‚^‚nƒƒQƒf„ „(„/„W…… ….††M‡>‡C‡^‡a‡sˆˆ ˆIˆ}‰!‰(‰=‹:D}––——+—?—d˜˜U™™P›!›>›oœRœl  7 c”F”N”U¢¢W£¤Y¦¦Ŗ« ««)«6«T¬¬K¬c­­"­/­R­|®!®*®+®oÆÆ:Æ_³µc·$·nĮfĮhĀĀ/x!%4FVao‚‚ ‚‚7ƒƒƒOƒmƒ|„„ „1„`„i…………#…)…=…@…z††*†M†U‡aˆ ˆˆJˆPˆ_ˆb‰‰‰+‰;‰J‰T‹‹$D}‘‘‘ ‘#‘.‘2––+–8–J–x——%—d—˜'˜9˜y™™d™h™m›!›>›nœ:œRœSœk  + > T Y ^ e {”””0”6”@”J”P”}”¢¢¢¢¢_¢k¢x££ ££]£^£e£q¤Y¦¦Ŗ« «¬ ¬(¬v­­­­+­y®®!®o®rÆ:Æ_°°³µc¶2·$·nææææ!æ%æ:æ<æ@æDæHæLæ_æzĮfĮhĮiĮkĀĀ/w„e‰y’.’/”U—@ž  £}„\Æ<±^³øxw‡?‹9¤?§tWw‚‚‚sƒ@„…<…V‡ ‡ ‡5‡sˆhT%GOSSc‘%‘’““-–––&— —˜A™^š8šGšp››&›Ngn <”¢:££r¤¤2¤=¤@¤J„„'„1„X¦&¦4¦d§§]©;Ŗ«:°°,²y³G³|µ¶u·· ø5øJøWøZ»g½¾M¾^¾iæ ĄĮĮĮ1awx1p‚‚ ‚'‚*‚H‚yƒ3ƒ9ƒKƒRƒ[ƒiƒx„……%…J…t…|†=†N†d‡‡‡Pˆ*‰i‰mŠ*Š*Š-‹‹-‹9‹^‹i‹q .0[ŽOŽuŽx ,5X‘‘?‘F’G“““!“3””)”P”o••Q•`– –&–=–O–c— —Y˜ ˜˜˜%˜'˜'˜L˜Z™2™P™u™{›› ››››0›Wœœ%œ:œPœ_œcœjœkœm[^kž žž>žAž`žgžpŸŸŸNŸy + 9 W ””1”c¢.¢T¢b£L¤T¤W„ „„„2„G„K¦U§§B§C§~©1©>©fŖ Ŗ ŖŖ;ŖR«9«I¬=¬Z¬y­­9­:­C­C­M­_®®(®0®nÆÆ-ÆMÆN°I°T°Z±1±B±T±v²³/³c³d“0µµfµsµ|¶¶=¶D¶G¶I¶k··!øm¹ŗŗ$ŗP»H¼¼@½½½½ ½(½j¾ ¾<¾{æææGĄĄ ĄĄ4ĄvĮĮ<ĮTÄNv–Cvdƒ*ƒOŒ{m!™Ÿ(¢¢WØØT©\«²U“æUĄ8Hv#/i‚K‚S‚l„2…;†Fˆˆˆi‰%‰bŠŠ&‹ZŒ:ŒXŒZŒt&Ž^>’ ’]’q’r’}“L”'™c™n›@œœŸv”” ¤„„=„u„~¦¦:¦I©IŖ Ŗ^¬¬¬¬v­1­K­b® °+“a· ·:·Z·m¹ĄHĄJĄwĮ-Į}4v‚‚ƒYƒk„e‡Mˆˆ&‰‹4‘$–C› ›-›A›xœ0œ7œAœYœ]œkŸdŸk ”C”m¢1¢G¢X£ £¤I¦©,©BŖ(«k¬[­X­|®V²mæuĮHĮjĮkĮvĀĀQv” v‡f)Ÿ£8¤T„E„O©EŖ:“µ ¶Sø~¾=ĮDĆĆĆĆĆ2ĆBĆ_ĆfĆrÄ Ä ÄÄ~"uk„J…w‡]‡fX:<‘A—gœ,œDœI„XØtØ{Ŗ«9¬s®9±y²=“vµk¶s·øIø{»½(¾<ĄĀ=u=uufu‚%‚3‚XˆU‰y‹<UŽ,x‘D’/’}“ “/•C•[––N˜9šUšr›"›+œœ@@Q]žŸŸŸn ”>”A”G££ £1£N£Q¤6¤:¤<„„%„W„\„i¦¦¦&§§[ØkØt©+©>©V©j«I«v«~¬ ­­­"­^®;ÆÆ2°°N±±±C²²,²U²_²d³³³MµµOµZµ}¶z· »»(»3½Xæ/æ7æhĄ[Įwu—hssP©Z s‘V6£}„„§nØj¬ ²%¼y½eæDsUs478LM‚‚Y‚e‚o‚sƒ#ƒ#„„„„…V…†J†k‡`‡n‡s‡v‡xˆˆˆˆˆ!ˆTˆZ‰‰ ‰‰‰‰ ‰1ŠŠ1ŠpŠs‹‹‹/‹qŒŒXŒvŒx-ŽŽŽ+Ž7(.05BIOy{<?~‘‘n‘q’’’c“““|”5”N”Q”x”z••)•{–i——— —%—@—z˜#˜%˜W™™™8™W™^š0šYšfšy››4›N›Pœ9Lž(ž,Ÿ   }””””0”:”=”V”X¢¢¢£*„2„b¦@§3§w§x§|«>«H«N«R«u¬:¬R¬d®F®_Æ)Æ4°°°O°Z±²²-³D³Y“““!“K“L“p“sµ)µ/µ5¶$¶=¶J¶K¶b¶m·"·7·D·d¹Aŗ»+»7»k¼$¼O¼i½ ½½U½[½u½~¾ ¾¾ ¾c¾uæææ?ĄĄĄ Ą<Ą_ĮĮ6ĀĀ Ā,rŠJ/^ŽbŽx“ “”—M¦ ¦Q«[«w¬,¬0³PĄr r‡h‹(›%œ%œ>§5Ŗ ­5°¶øø2r˜Vr†‡>?r N‚u„z†y‡‡3‡k‰#‹5Œ&Ž su‘ ‘6‘~““]•@–8–a—7š›pœ;œiLNžu¢G£Z£i¤_¦?¦y©{«N¬1¬7®±³@“tµ'µ<µTµnøø"¹WŗD»N¾)ĄUĀÄRÅ(ÅFqqqqZ›œJ¤A§3Ø`ØxØ{©ŖÆg³^æ+q„;Pq‚(„f‡‹AŒoŒym ,’k“b•••E•L— ——› ››*›/œ)œ+œ?Q Y£0£P£~¤¤¤H¤^¤f¤u„§§ŖBŖF¬x­"®+Æ1ÆY°±x²²/²³M³`³oµµTµx¶¶ ¶¶h¶}··høøM»»D¼&¼a¾ææoĄDĮĮ,ĮQĀ/qopdppl‚„›z»k¼½cp0p a‚(ƒ9ƒ=…hˆˆ(ŠKŒŒ!Œ!UŽŽ=‘‘g’>›œvYžž[¤&¦FØBŖ;«,«1«P°“1“8µ=¶'¶=ŗ»q½.ætæxĄĄ"ĆĆo1o„3Ødoo“{••/ooĮK"nƒi‡_‹Œk!Ž{|‘4‘p’’V”&•r˜B˜q›gœ%œož:ž]”f¦§Ŗ « ¬!ÆB°,±uµµ[¶R»}n‹n‹4nµ|nÅ=mm|m‚U®'¶}m› mˆ@ ”W£U§.©©iŖ(l ),S‚{‚}ƒ.ƒ<ƒmƒ}„„ „{……5…H…u…u††CˆzŠY‹YŒŒ qŽŽ ŽŽŽ<24 #1:b‘E’4’q’t““S””O”^”q–2–5–i–k˜u™OšDšEš\›=›G›cœw sž"ž)žOŸŸ4ŸW  e v”n¢¢0¢B££G¦(§/©|«Z¬g­­+®lÆa± ±S±U²h³A³H“Y“t¶P·¹6»L»v¼<¼}½!½v¾ ¾Z¾d¾n¾z¾æ!æ&æWæeæuĄĄZĄnĮ Į<ĮaĮb l†Š‘c”–D˜nš>ž:¬ ±ŗ lˆp©Æfl(l„ Š'‹,>“•A–B—<1ž ž* o”'„w«d¬=¬D°p±±I²+¹½¾¾ ĄÄKl”žkˆB]’?“a”\–›*›yœ*œ3 R”`­c® ®E®Q®z±q»+æk‚&ƒH„8‡EŒx˜Vš~››¤@§wØ]µc¶%¶kø{kw‡Z˜B››wœ œ/ ”;¢`¤'¤(¦©-©3°]²m·@¼¼¼:Ą>kšqØ^Æd±n²u¶%{k"l‚L‚P‚tƒhƒx„„„l„v…]…]…y††‡‡ ‡ˆˆˆ(ˆCˆr‰L‰r‰v‰|ŠŠHŠHŠH‹‹‹,‹-Œ|\!()DHHR":O‘R‘S‘X‘X‘b‘k‘s‘w’’’’’Z’n’~“!””””]”o•E•G•\–f——+˜[˜[™™™"™R™z™{ššššš#š#š#š?šE› ››8›F›T›X›}œœœnž žž[žfž}  $ / L M” ”-”W”X”g”r¢"¢"¢9¢@¢H££h£o£¤E„„7„8„9„@„H„v¦¦¦!¦%¦*¦5¦9§§pØ*Ø,Ø,ØaØeØhØoØqØx©©©©©$©(©J©R©_©d©e©iŖŖŖŖ Ŗ-Ŗ/Ŗ5ŖSŖ|«8«|¬¬¬D­q®®m®qÆ=Æ@ưP±F±G±X²²0³7³8³8³>³|“<“Rµµ^µm¶¶¶¶!¶)¶3¶H¶I¶S¶[¶]¶}·· · ·!·pøøQø}ø~¹¹ŗVŗ\»6»A»O¼ ¼$¼+¼@¾"¾=¾K¾kæBæOĄ7Į5ĮlĀ9ĀHĀOkœ §Øq°k‚tW›%œ"£4©©©©©©!Ŗa¹Į,k=j}E‚t„†N‡g‡pˆ>ˆU‰‹YŒ]ŽmM’R“ ””5”x—C˜Yš8šUš\›>›y@¢-£££t¤T„%Ø^Ŗ9«f¬¬n­I®NÆ,ÆH±±p²u³j¶%··Dø&»j¾¾æ7æhĄ]ĄaĮ}Ā+jŽ,ŸĮ}jŗl½# jŽ+›}o¤F§§lØ$©©°»vj„‡fšš'šA›+Ÿ„R§§ ­¶I¶]»O¾jŒ›+Ÿv„{¦E§§{ØdŖŖQ­®?Æ_¶I·i,‚0ƒYƒvƒw„N……g†v‡‡‡9‡>‡D‡cˆTˆm‰‰‹ Œ>ŒbvŽ-O‘‘ ‘e’E’P’\“/”o•9•V•g––*–-–9–b—— —%—H˜˜|š<›"›E›Lœœ>œHœX<pzžžLŸ+Ÿ-Ÿ-ŸS M z¢)¢8¢:£/¤-¤:„V§ØQ©1©OŖJ«¬-¬6¬r­­1®®4®;®J®L®Y®]®j®u®}ÆÆÆIÆPÆ^°#°'°[±n±s²%²Z²g²{³C³j“µFµpµ}¶¶A¶E¶H¶p·K·Xø0øg¹¹&¹:¹Aŗ*ŗ=ŗX»)»j¼5¼]½e¾)ææ2æWæzĄ.ĄuĮ%ĮXiP~ƒƒ-ƒ<ƒu„H„l……6…}† †d†g‡ ‡/‡>‡fˆˆ)ŠŠO%7LŽ`p{5W}‘A‘e’E”]”s•%•x•y– –*–-–Q˜všš0š=šCšJ››Y"syžžLŸŸ Ÿ1ŸVŸjŸl 4 N”¢A¢H¢]¢f¢n£££U£f¤#¤-¤t¤}¦¦¦§L«C«M«o«s¬¬$¬,¬1¬U­Z®®KÆ<°(±±W±²²7²a³³³0³jµ¶¶¶H¶Y¶p··/øW»)»f½¾X¾zæææbæyĄ=ĄUĮĮ Į0ĮPĀ"i«x“>i i›BŸe©7·p¹^¼|½ZĮHi…“ ˜>šEš^›B›U%VŸd”¢©7ŗ$»@½ZæĮH h†ŒSŸ( §X°9±µ9ĄĮxh‚‚‚^ˆ ˆ*FL“––-šu¢$„Jø6»xhr~‚0„„(„U…y†† †J†O‡‡A‡aˆŒ~ŽrN#.9‘J’ ’”y•D——˜>˜F™™™!™ršššNšj›››#›-›F›{›~œ$œ+gŸŸDŸl¢6¢?¢Z££0£m¤I¤U„6„M„t„x¦¦¦,¦>¦D§§F©)©dŖŖŖ)Ŗ0Ŗ;«G¬­%­=­H®®bÆ_ư8°B°H°R°v² ²²1²U²t³lµ¶6¶=·#ø3ø5»7»9»S»]¼¼½[¾¾$æpĀĀ Āh®P¼hlP”y˜NŸ]Ø Ø{.hx/0‚+‚K„$…q‡|ˆ%‹.Œ}x‘o‘p‘q’’’U”–q˜q¢¤¤V¦e¦f¦~§zØn©,ŖŖŖYŖ[Ŗ_ŖbŖgŖiŖsÆ@²vøV»XĄ=Ā@h‡ h‚†4‡ ‡~”^¢,©©¾jg‚ƒ „h† †G‹1V]Ž0Ž[‘V’ ”z——››%  £„1Ø Ø2Ø[©©©¶¹Ąrg†“#™9ž&¦r§UggšĄrg‘\”z°ø gšNÆ,g‚"„)„l…V†-†7†C‰Š ŠOŽS.0Q‘.‘h“7“b˜š|››Eož6”v¢¢P¢£ ¤¤¤m„«+±S²[³¶ŗ%¼PæPĮ6ĮM g‚‚D‚b‚h††E‡ˆ)ˆ)‰R‰uŠEŠF‹‹"‹"‹}ŒhKLr+‘O‘Z‘u‘u‘u‘~’ ’A“,”'”)”R”••N•x—M˜>™(š)š+š-š1›Wœ9œaœiœoŸ"Ÿz '”” ””n¢¢A¢O¢_££)£e£f£g¤N¤O¤P„U„o¦ ¦§fØØ Ø$Ø/ØbØ~©)©9©CŖcŖoŖtŖ}« ¬¬E­® ®7®]®i®uÆC°"°#²³"³$³&³1³gµm¶ ¶!¶-¶.¶B·$ø¹¹Qŗ »»I»M¼.¼J¼y¾¾1¾aæ"æXæ_ĄbĮ>ĮaĮjĀĀĀÅ6 g„k…)‡dˆ‰/‰]±/³_lfEVin‚‚‚‚A‚rƒƒYƒ|„„H„N„W„g„k„p…… …………#…)…7…<…@…Z† †(†3†@†S†b‡,‡7‡<‡I‡W‡d‡vˆ ˆˆ0ˆ9ˆYˆkˆv‰‰ ‰#‰/‰8‰R‰]‰yŠŠŠ4Š@Š^Šq‹‹X‹iŒŒŒŒ+Œ0Œ@ŒMŒVŒY )?EKT`tŽ ŽŽ$Ž*Ž@ŽDnI|‘‘+‘D’–––/–@–i——-—2—;—C—Y—g˜˜˜4˜R˜^˜i™™ ™H™Z™m›3›W›X›mœ -@FIžž%ž0Ÿ-Ÿ? ”{¢R£_£}„„„'„0„\„h¦+¦5¦l§ØAØH©:©v«¬¬ÆQ±/³+³_³j³n³}““ “$“&“)“0“;“H“N“W“Y“\“j“}µµ µµ5µNµ\¶ø¹¹!ŗŗ-ŗ8ŗS»»!»W¼(¼0¼5¼8¼U¼\¼d¼r½½%½@½]½e¾D¾O¾o¾xæ+æ9æ<æ\æhĄ ĄĮĮ<Į@ĮOĀ ĀExfEVin‚‚‚‚A‚l‚rƒƒYƒ|„„!„H„N„W„g„k„o…… …………#…)…7…<…?…Z† †(†3†@†S†b‡,‡7‡<‡I‡W‡d‡vˆ ˆˆ0ˆ9ˆYˆkˆv‰‰ ‰#‰/‰8‰R‰]‰^‰yŠŠŠŠŠŠ4Š@ŠQŠ^Šq‹‹Q‹X‹iŒŒŒŒ+Œ0Œ:Œ@ŒMŒVŒY )?EKT`ŽŽ*Ž@ŽDn=I|‘‘+‘D’–––/–@–i——#—-—2—;—C—Y—f˜˜˜4˜Q˜^˜i™™ ™G™Z™m›3›W›X›mœ -@FIžž%ž0Ÿ-Ÿ> ”{¢R£_£}¤<„„„'„0„\„h¦+¦5¦l§©:©vŖ!Ŗ"Ŗi««x¬¬@ÆQ±.³+³j³n³}““ “$“&“)“0“;“H“N“W“Y“\“i“}µµ µµ2µ3µ5µNµ\¶ø¹¹!ŗŗ-ŗ8ŗS»»!»W¼(¼0¼5¼8¼U¼\¼d¼r½½%½@½\½e¾D¾O¾o¾xæ+æ9æ<æ[æhĄ ĄĄwĮĮ<Į@ĮOĀ f˜'˜'™eœA«=ffĀf‰z“#©V¹Į-f ’$› ›N\ 9„¦%Æ(±C²nµs¶ø»½X¾,æbĀS~e‚I‚WƒHƒIƒ\…R…R††u‡‡‰‰e‰r‹*‹T‹UŒy.U‘d’ ”””)”*• •<™™/™8š š%œvžžž-ž.ŸŸm”m£ ¤¤#¤<¤A„9„A„D„t„~¦ ¦'¦+¦5¦;¦E¦F¦a¦g§§§;§<§\§p§qØ,ØAØ\Ø_ØaØg©©©©$©(©S©}Ŗ Ŗ4ŖRŖ|« ¬ ­®V®h°°2°C°G°X°w±±W² ²³.µbµr¶y¶{ø3ø}¼ ¼ ¼E¼U¼]¾S¾dĄXĮĆCĆDÄÄ'Ä\Å<ÅAeeƒ}¾#eXe… ˆ,¹e‡)‡G”F««M­@®J®f¶L·øp»n¾,cc c‚›žcØ ©!Ŗ°æjc†5‹‘@›Ą[ b‡o—›D ,„7Ŗ¶9ø| brƒƒƒƒƒ$ƒ5ƒ@ƒT„…V†B†yˆŠ{‹‹-6?Ur‘9‘H’’8’D’u”””*”@”b•~•–K–\–]–^–s–u——;˜*˜7˜P™W™fš'šd›.›i›m›rœc$ž^žzŸŸW T””””0¢)¢)¢@¢C¢E£`¤9¤t„*„V„p„{¦¦¦¦¦!¦)¦-¦-¦.¦S¦f¦{§'©;©pŖ4«K«N­®%®3Æ@ÆBÆIÆK°H°\°y± ±.±5²t“~¶&¶[·2ø"ø5øWøZ¹¹7¹W¹h»9¾H¾]æ ææeĄ6ĄNĮĮ%ĀĀĀĀĀ Äpb‚†4‡b‡Ab‚‡A‘D“{—g™sš› œ¢,¤¤5„L¦ Ŗ««-®x²a³µy· »¼6æcCbb‚<‡!ˆo‰VAhŽ*’’|“,“c”3”\•V˜Mš<šz›› œC Ÿ8ŸB£P£v¤+¤6¤|„ ¦©?©L«"«&­­®8®S®a®}°a²)²?²l²y³cµµb¶M¶v·]·h·mø½$½a½h¾%¾*¾6Į$Į}ĀĀNb…*‡‡@‹(•œ*”m¤+¦¦2§«7«8¶M»w¾*æ,Vamp:†‡@‡nŠ9ŒC\Zr'‘S‘]”)”\••F•M˜i™ ™ ™Kšš:šu››››%œ$œlœvœv!žMŸŸŸX i y„„@„U¦ ¦b¦z¦§6§`§qØ(Ø0ŖŖFŖIŖKŖ|«)¬|®Æ?ÆN°°Z±E²³#“`µ)¶e·k»»*»9»R»q¼!¾^ĄĄkĀ ĆTĆZca‚ ‚*ƒR†5‡‡I‡\‡`‡pˆo‰WŠ8Š:ŒRŒgŽL R’’}• •r———˜B˜\™™(™3™G™i™šš(š7šUš[›$›7›M›h›|œœ%œRKzŸŸ[  !”>”z¢)¢M£`£t£u¤¤¤G„~« «k¬o®!Æ&Æ2Æ:Æm°!°f±T±n±u±y²?²g³ µ µIµo¶¶løKøl»»»U»X¼¼!½8½gĮWabjƒQ„„F††)†3†Y‡*‰LPš|›o›~pžIŸ S¤E¦,ŖA²=ŗ»i¾va‚‡)§s®O¼S¾a”w™a‚L…‡‡e‹S’H›o¦+§(§Q§cŖ)®$®+° ²w a‚’G“y” §­®E³9¶yø2»6 a3‚uƒzƒ|^”]™: ØWØW³C`„‡%]’.˜.›%œ)”B”z„UØ>©/­­5­¶l¶~ø2øKø{¾$æ"Ā< `$†{‡A‘q››jœ,oØGŖŖ\`Ž,„L­)µy· Ąa`„%’’]’v“N” —{£u„ØD©o³/Ą`„…pŽqŽudš~œ,¤C§o©4Ŗa¬!­6²0³k»}¾DĮAĀ*ˆ<`efsw$--}}‚‚'‚)‚+‚1‚3‚4‚;‚M‚N‚N‚}ƒƒ1ƒ2ƒ=ƒJ„„„$„&„/„1„2„3„4„6„8„O„^„|……………=…[…x…}††††††††††:†<†F†G†H†O†P†P‡‡@‡I‡^‡kˆˆˆˆˆ,ˆ9ˆBˆCˆDˆFˆ[ˆ\ˆpˆt‰8‰`‰b‰e‰i‰l‰p‰q‰s‰v‰wŠŠŠŠ#Š$Š(Š)Š,Š.Š/Š:Š:Š;Š<ŠBŠDŠFŠGŠj‹‹ ‹‹‹‹‹‹‹ ‹"‹#‹#‹%‹'‹.‹/‹0‹2‹3‹6‹A‹C‹J‹N‹N‹S‹pŒ Œ!Œ{Œ}Œ)..ASU`apxz{|ŽŽŽYŽv'*,26::;>@@BBCIM      &-.7>xy}‘G‘M‘N‘Y‘Y‘\‘]‘`‘`‘c‘c‘f‘j‘j‘j‘k‘l‘m‘n‘n‘n‘s‘y‘y‘{‘|’’’’’’’ ’ ’ ’’’’’’’’’!’$’%’%’.’K’O’V’W’}’““ “3“4“J“J“m“n“{“|””””””””” ” ” ””””””””””"”%”&”'”(”*”*•••"•&•/•:•=•@•C•J•O•S•^•a•c•g•i•k•l•v•––––– ––0–0–3–}— — ——————8˜=˜=˜L˜M˜T˜V˜`˜i™™™ ™ ™™™™™ ™%™)™1™=™>™?™?™C™D™G™O™S™t™t™x™y™zššš šššššššš!š"š"š)š*š,šBšZš`šdšrš|š››› ›'›(›9›:›:›G›J›S›V›Y›[›`›c›e›qœœœœœœ&œ(œ*œ7œ:œ=œ@œAœCœJœOœOœOœPœYœ^œ_œ_œaœcœhœoœpœtœv#9BSXY^`efzz||~~žžžžOžxŸŸŸŸŸŸŸŸ!ŸHŸIŸLŸMŸdŸdŸeŸhŸlŸmŸxŸ            " & - 2 9 e o p u x y”””””””””&”.”.”/”B”U”V”X”f”h”s”~¢¢¢¢!¢!¢3¢8¢<¢=¢N¢N¢S¢S¢U¢n¢n¢r¢u¢w££'£*£+£1£L£U£X£a£a£b£d£f£g£m£n£n£o£p£s£{£{¤¤¤¤ ¤ ¤#¤6¤:¤;¤@¤C¤I¤J¤K¤M¤R¤S¤[¤\¤]¤d¤g¤j„„„„„ „„„„„ „!„&„(„.„0„5„<„D„D„I„J„L„O„[„`„{„~¦¦¦¦¦(¦)¦*¦0¦<¦@¦C¦N¦N¦a¦c¦f¦f¦l¦m¦n¦o¦q¦t¦t§§%§%§N§PØØØØØ"Ø#Ø#Ø$Ø.Ø6Ø=ØAØKØOØUØYØZØ[Ø_ØkØlØw©©©©©©$©3©=©=©A©A©E©H©H©M©S©T©U©Y©f©m©ŖŖŖŖ Ŗ Ŗ ŖŖŖ$Ŗ.Ŗ4Ŗ6ŖGŖYŖ[Ŗ_ŖeŖhŖiŖnŖsŖw««««« «««+«7«D«F«n«o«~¬¬¬¬@¬A¬B¬C¬X¬Z¬[¬\¬q¬­%­&­&­'­(­)­.­5­7­7­8­9­=­>­?­@­C­D­I­K­M­N­P­U­g­q®®®® ® ®$®'®'®+®0®8®9®>®@®A®F®K®U®W®Y®^®_®c®c®h®j®o®rÆ Æ'Æ3Æ3Æ3Æ;Æ<Æ@ÆDÆDÆMÆ\ÆaÆeÆf° °°°#°(°+°.°0°4°5°7°<°=°?°C°C°E°F°G°L°L°S°T°W°i°s°s°t°}°~°~±±$±4±7±v² ²²²²*²,²0²n²p²r²t²u²w³ ³ ³ ³³³³³³ ³*³+³3³4³7³:³:³>³N³R³S³Y³]³c³c³n““Bµµ[µcµeµuµyµ}µ~¶¶¶,¶-¶/¶/¶0¶0¶;¶A¶K¶Y¶m¶q¶r¶~·· ··"·"·"·&·m·r·øøøøø ø/ø2ø7ø7øBøIøMøxøzøzø}ø¹¹¹¹ŗŗb»»»!»(»>»>»?»@»B»C»I»I»J»L»[»[»^»k»~¼¼¼¼ ¼9¼V¼w¼}½½ ½6½S½X½a½b½e½g½t¾¾ ¾¾$¾%¾(¾,¾9¾=¾M¾\¾c¾d¾e¾f¾j¾qæææ"æ1æ:æ<æ=æ@æAæDæEæHæIæTæbæjæræxæzĄĄĄ!ĄĮĮ+Į/Į0Į1Į2Į3Į4Į>ĮEĮEĮKĮPĮZĮ]ĮaĮbĮcĮfĮfĮgĮgĮhĮkĮnĮqĮqĮqĮwĀĀĀĀ ĀĀĀĀĀĀĀĀĀĀĀ$Ā$Ā%Ā%Ā'Ā0Ā1Ā3Ā7Ā7Ā;Ā<ĀEĀHĀIĀLĀMĀSĀTĀUĀVÄn`Fƒu„E†*‡!‡7ˆJ‹~—›> L”¢=Ŗ« «s0^¾AĀfĆ ĆĆĆĆ Ć#Ć%Ć5Ć?ĆAĆAĆMĆSĆSĆTĆUĆVĆXĆZĆZĆZĆ_ĆcĆeĆeĆiĆsĆsĆuĆwĆwĆyÄÄÄ!Ä#Ä#Ä.Ä/Ä<ÄIÄJÄNÄVÅ^„\‰[Q’*–˜Jœ £$„P„P„mŖ?ŖQ«­ Æ$³¶øv»0¾AĮ)lW0t‚‚‚3‚L‚fƒ ƒ ƒ„ „O„z„}…/†6†U‡‡%‡E‡TˆŠŠ=‹VŒŒ&Œ(Œ:ŒA )KqŽŽŽŽŽX)e9>OY‘;“2“>“S“^”” –J——K˜˜˜c˜u˜{™Hš.šcIžhžs  ”,”Q¢££'©A««<«F«G«o¬<®Æ'²³@³o³s““Fµµ·QøP¹ ¼i¾E¾c¾gæpĄ"Ą*Ą,ĄUĄxĮ U†‹S¶\Uƒ6U();MNPSW‚'‚+‚[‚[‚l‚p‚p‚yƒƒƒƒIƒx„ „„„„R„i„q„r………………G…J…L…N…O…\††@†N†_‡E‡wˆˆˆˆbˆ}ˆ~‰‰‰&‰oŠ ŠD‹‹‹‹‹"‹'‹;‹D‹O‹P‹T‹^Œ3ŒXŒbŒcŒcŒjŒlŒmŒuŒ}HSdŽŽŽ Ž Ž ŽŽ=ŽOŽ]ŽsŽwNQSW`abb(r‘F‘L‘N‘O‘O‘R‘S‘T‘U‘U‘Z‘o‘p‘p’ ’.’z’“,“I“[“g””3”W”t•)•-•y– –-–Z–]–`–c–f–q–|——A—E—O—j—l—m—n—n—o—o—q—u—u—u—}˜˜˜˜ ˜*˜*˜^˜f˜f˜h˜m˜o˜q™™™9™W™\ššš/ši›'›3›WœœœEœJœgœ|JMNNOPž ž ž>žFžFžMžQžXž_žfžižižlžpžpžqžsžuŸŸ<      0 k {”” ” ””-¢¢ ¢0¢B¢C¢T¢U¢g¢o¢p£¤N¤P¤o¤z¤}„„<„J„J„T„{¦¦ ¦¦¦@¦y¦z¦}§/§6§P§Q§yØØ/Ø9Ø@ØmØn©>©D©U©tŖŖ Ŗ#Ŗ2Ŗ2Ŗ4Ŗe«E¬¬¬<¬@¬Z­­L­W® ®®0®9®A®Y®pÆ ÆÆ(Æ/ÆDÆFÆOÆVÆÆ°°°@°y± ±²/²s³!³!³!³"³-³3³?³O³T³W³}““2“2“I“VµH¶ ¶1¶1¶P¶V¶Y¶r······&·1·2·D·p·q·r·sø"ø#øMøWøe¹¹¹¹7¹:¹=ŗŗŗ ŗ ŗ ŗ%ŗ/ŗ/ŗ1ŗ5ŗ8»»N»X¼<¼E¼K¼N¼e¼~½½,½.½.½|¾¾#¾2¾S¾]¾a¾e¾{æææ,æ.æ2æ3æ3æ4æ[æ\æ]æ^Ą(Ą.ĄFĄJĄJĄvĮ ĮĮ.Į2Į>ĮTĮdĮrĀ Ā&Ā<ĀDĀKĀjĀnUWŠ ž°W±lTˆz‹@°E½!T‚b¼e#T^‚f…Gˆ%Š’7’b’d”[•–9™]™_ž+£B§q­R““jµ*·Qŗŗŗ0ŗD¼;¼IæGæ[ĄĄĮ ĆNÄ JTjpj‚‚B„„ †/‡D‡D‡GˆˆEŠX%XŽŽ`ŽdŽi“,” •/š›œœ#žB”Q¢M¤#¤g§5§Z§`§p§s© ©©9Ŗ ­ ­A®?®H®_®uÆK°°2°O²@²S³ ““jµµ,µq¶%¶z··ø'ø=»¼¼f¾¾eædĀ'Ć,wTUNOeeƒƒƒ`ƒ}„…B†_ˆŠ'Š,Š7‹IgR‘L‘m’s•'–-–9–|—O—^—m˜6™X™tšg›0›:œ:œ=œOœSœg$^hžž*ž:žEžTŸm # 1 o”!”<”z¢=¢G¢]££T£Z¤[¤~„©/©|ŖŖW«d«f¬`­]­`­v®®®>®U®^ÆDÆQ°O°Y°\±±Q²² ²u²u³“~µm¶0¹¹¼,¼D¼G¼H½¾¾¾5¾Rææ'ĄĄCĮĮsĮĀĀĀ5TƒcŠ Ž[¤/ SUlА;‘P”'”9Ÿ`¦`§>±5¶~3Sv‚K‚S‚xƒƒ„„„2„L…$…3…\…b†Fˆ[ˆ]ŠŠ,Š6‹ ‘;’]’r“L•z–9–_——M—q˜˜˜TœBœDœFœL6LžŸD < E h”” ”££'£0£z¤¤2¤r„)¦b¦uØØ+©sŖŖŖŖŖj« «f«h«u«|¬¬ ¬4¬N¬[¬v­­1­G­K­b® ®$®-®3®A®TÆÆÆ Æ+Æ;°°+°L°d°l±±±±1±C±]²²²F²_²{³“=“V“j¶¶ ¶'¶7¶;¶W¶`··· ·:·Z·q·tø øø!ø)ø4ø8ø>øUøUøVøVø[øz¹»I»b¼ ¼¼¼¼,¼9¼D¼K¼R¼\¼a½½l¾¾ ¾,¾9¾Sææ)æ/æ?æIæMæWæ{Ą ĄĄĄĄ#ĮMĀĀ;ĀS Sˆb’k”.——š`®“DøBĮ ĮLĮjkSlx‚ƒ„…… …!…b…z†L‡<‡]ˆ+‰V‰j‰nŠI‹9‹U‹iŽ-‘%‘K’’c“a”}–u—Y˜@˜Uš4š|››=›@›g›h›yœHœYœ]œymŸIŸS F¢¢Q££e¤¤B¤P„„4„@„o„q„w¦¦ ¦¦u§§O§Z§d©4©CŖ?«Q¬5¬r­=®®;ÆIÆdÆl°°2°E°i³&µ~¶·&øøøf»»e½½\ææ%Į;Į@ĮXĮbĮdĀĀS¼wRR[R`-23LPZZ^‚)ƒƒTƒh„g„|………&…/††††-†<†d†e†n†v‡‡‡‡1‡>‡[‡hˆˆˆ7ˆ9ˆMˆ~‰L‰b‰q‰yŠŠŠ:‹:‹p‹ŒŒ"ŒRŒXŒXŒl.8Ž|1QRT(8bk‘ ’’#’3’Q’s““3“4“J“c“”Q”[• ••@•E•U——L—S—a—b˜0˜E˜a˜c™™2™;™G™~šš(›8›V›yœœœ@œAœWœ{œ}{ž žCžYžpžtŸY     _ r” ”¢!¢"¢<¢F£&£c¤2¤:¤;¤|¦ ¦ ¦%¦z§H§c§o§yØ5Ø<©H©U©\Ŗ5ŖeŖnŖ|«,«G«f«s«v¬ ¬*¬0¬A­­M­U®fÆHÆd°(°A°E±²f²p³ ³!³1³c³|“““<“=“Vµa· ·v·~ø7øQøq¹Wŗŗ5ŗ8ŗ@»*»8»W»w¼Y¾8æAæqĄBĄaĮ/Į:ĮRĀ*Ā3ĀQĆ3R°$RˆZ‘e’–\„OŖR™«h[QRƒ8ƒ9ƒ9ƒT…W…y†.‡?‡Jˆ ˆ<ˆL‰‘3‘g“2ša” ”=”M”a¢ ¢C£S¤¤o„2„F§ØØ~©©©ÆÆg±!±L²³æeæzĀ2ĆĆĆĆĆĆĆ)Ć,Ć1Ć2Ć6Ć:Ć;Ć<ĆCĆCĆMĆOĆQĆSĆTĆXĆ]Ć`ĆaĆaĆdĆdĆiĆlĆqÄÄÄÄÄ2Ä=Ä?Ä@ÄBÄCÄEÄJÄ^Ä_gQ~9Ta‚&‚I‚[‚cƒ$ƒ]ƒ^„"„8„q„v„{……3…5…7‡‡CˆC‰#ŠŠŠ)Š;Š<ŠKŠLŠsŠt‹XŒŒŒŒ&Œ4-ŽŽŽdŽkŽoŽqŽwŽ}+p58<OR‘B’’#’l““E“G””””F”l• •$•[•w––B——4—=—[—[—\—^—o˜|™W™_™_™{ši››Y›~œ!œ&œP 1Zgž ž žžžsŸbŸu # ( 0 0 5 ? b k t w ~””!”'”p¢#¢;¢N¢x£ ££r£|¤ „M¦ ¦+¦Z§%ØØD©X©eŖ««««!«-«3«E«P«Q«T«]«]«^«l«p«t¬¬¬¬ ¬ ¬¬¬¬2¬3¬Q¬T¬U¬q­®9®~ÆMÆaÆi±±.±/±[²,²?²O²W²p³H“1“iµ µG¶M¶e¶q¹¹¹;ŗ¼=¼G½ ½½L½o½yææ æææ&æ^Ą/Ą_ĄnĮĮĮ0Į~ĀKÄÄbÄpÄuÅÅ2ÅEÅHQ©b©q©Ą@QØ4Q „}§ ŖF¶|gQ "0c‚‚7ƒ@„v„{……?…Q…z†U†u‡‡‡Rˆ_ˆ`ˆi‰‰‰‹U‹Z‹^‹tŒŒ ŒQ'‘7‘?‘z’’’s“ “B“J“^––{— —p™`šš&œ7zž>žjžrž~ŸŸŸ`Ÿx ””`¢B¢S¢X¢g£a„^¦¦0¦E¦P§§'© «F³,³D³z““7“o·mŗ*¼¾g¾zæ ææ@æ`æxæĄ!Ą5Į ĮĮ>Ā%P”­OIPZ]ev‚,‚4‚:‚fƒƒƒƒ%…†6†r‡‡%ˆ5ˆTˆVˆ`‰‰%Š+ŠjŠ}‹"‹Y‹}ŒŒŒŒ'Œ=GIŽ=12Vs‘‘’ ’’r“J”9”;”C”b•?–*–-–9–M–T—%—d—h˜˜ ˜e™™™[š(š+š/š1šQ›qœRœSœw>žž"žaŸ( + D Z””/”3”:”<”@¢¢w£J£g¤¤¤l¤w„-«D¬¬6¬E¬L¬S­­­1­PÆÆÆb°#°~±±±± ± ±(±(±*±5±<±?±B±J±Q±X±c²² ²²8²8³³G“tµµ>¶h··Høø!ø#ø&ø)ø)¹Iŗŗ(ŗ;»¼;½{¾H¾zææ!æGæWæXæ^ædĄĄĄĄ*Ą1Ą6Ą:Ą@ĄĮĮnĀ Ā ĀĀvĀyĆĆĆĆ Ć*Ć6Ć_ĆcĆuÄ$ÄNÄ\ÅÅ#Å=!O†Œ8r  £~„„)„,„6„U„U¦§ § ØOØkŖQ¬C­­ ÆOư°±p±t²%ĆĆÄ+OP”,¢'¢'¢(¢N±!OPo=L‚‚v‚w‚wƒƒƒƒ_ƒ`„„%…P††4†;†JŠŠ<Š_Š_ŠkŠm‹‹|ŒŒ`abdeww‘9‘R‘T’’.’Q“5”-”w•=•@•W–\— —'˜˜<˜<˜N˜X˜Z˜[˜b˜r˜s™A™|›››› ›U›Vœ œqžžž4ž4ž5ž5ž[žežež|£h£i¤F¤W¤W¤|„„A„N¦,¦4¦G¦I¦g§§ §§§§2§3§7§I§L§OØØ ØØY©©©©[Ŗ/Ŗ;ŖD¬¬¬¬s¬t­;®O°°°=°W³Q““>“c“e¶¶B¶\··y·z¹W¹^»a»d¾Ą@ĀĀ8ĀOĀRyOPiy|"‚+‚,‚/‚4‚=‚K‚N‚PƒJƒc„„„ „1……=…[†††.†h†p†p‡‡2ˆˆVˆxˆ~‰‰‰{ŠŠ0ŠAŠIŠdŠp‹‹‹‹&‹5‹OŒ Œ.Œ:&IaŽŽŽ ŽŽŽŽ Ž'Ž5ŽGŽXŽY i.177=‘?‘E‘K‘R‘S‘~’,’/’]’b’e’m’m’t’{’““i””Q”p•)•*•?–6–i–z—v˜#˜7˜8˜u˜z™>™]™bš šQšZš[ša›c›qœ MZgm{žžWžiŸŸŸjŸo   ”””&”c¢F¢Q¢y££H£u¤¤¤0¤B¤M¤T¤c¤g¤z„N„^„_„s„v„~¦¦¦¦¦c§§L§zØ+Ø,Ø}©+©eŖ ŖŖ Ŗ:Ŗ:Ŗ>Ŗm«N«v¬¬:¬>¬T¬g¬i­+­P®®*®<Æb°F±±{²\²l³³!³8³8³G³G³P³S³Y³`““7“9“Y“\“v¶·r·wø7øe»a¼0¼l½u¾8¾Q¾Uæ#æRæsĄ0ĄfĄĮ+Į1ĮCĮOĮwĀĀ'Ā1Ā7Ān OˆB’e’i–6¤N„Ø{æ+ĮZsOZo„u… …………$…)††)†S†g†vˆv‰‰(‰/‰2‰;Š`‹ŒŒ DŽ`Žw"WT‘“$“$“&”””u•x˜0˜8™I™[™h™i™mš^š^›pœBpžDŸ-ŸDŸX $”u£££/£9£>¤¤'¤(©.©1««*«w¬(­°B±1±A±]²²K²h³B³G“1“_µ9µ>µDµGµOµUµUµU·Pø"øEŗN»»[¼)¼2¼|½!¾¾¾ĄqĄtĄ|Ą}ĮĮzNP‡œoNO®PN‚$‚G‚i„6……fˆ;Š:‹M‹TeŽzJ"’”˜šEšEšbœ%œTVyžžDžLžhŸh !”-”i”{¢J££0£z„E„¦¦1¦R§§%ØNØg©<©v¬4®LÆKÆQ°&°H°i±X²²K²{³W¶&¶X¶{»»9¼¾¾¾æ@æXĄ[Į Į4Į@ĮTĀ'N’_N…KM0‚‚2…^–››Mœ]Ÿg¢¢A¢O¦Z¦c¬o®!Æ9²½ ¾(M„f°5L¦D¦D°, LN‹‹ ˜)„w¦;¦<Ŗ3°?µ7ĄTĄe LM…C‹$™”©w±V¾~LM…C‹$‘X‘X• ——3™Q””„{©±V½0¾~‚ LMe;A‚‚‚"ƒ ƒ3ƒ3ƒ4ƒ=ƒKƒQ„R……C…z††‡‡?‡P‡R‡j‡jˆ'ˆ@ˆHˆMˆy‰9‰]‰`‰cŠ‹$‹A‹UŒgŽŽ&Y SS}‘‘P‘p‘{’’$’T’U““””Q•9•T•n––:—U˜!˜.˜M˜\™™™™>™Hšš*šTšXš^š_šz››››2›wœœœHEFžžrŸŸŸŸn  ,”” ”I¢ ¢¢"¢F££`£k£s¤¤"¤7¤M¤U¤X„„„P„b„o„q„q¦ ¦ ¦¦¦H¦g¦m§§§H§N§X§]§e§vØØ!Ø%ØfØxØz©©©©©)©<©DŖ ŖŖ+Ŗ+Ŗ.ŖOŖW««s¬¬H¬I¬N¬O¬z­­2­4­<­<­E®®®]ÆÆ°° °-°B°]°f±U±W² ²²*²6³³C³k“µµ µµr¶¶$¶'¶L¶U¶l¶z·#·&·^·{·øø0øIøQøløp¹!¹$ŗn»»H»O»P»p»|¼¼F½½#½O¾¾ ¾#¾9¾~æ6æ_ĄNĄ\Ą]ĄkĄoĮĮ\ĮyĮ|ĀĀĀĀmĆĆ*ĆNĆ`Ć}ÄÄ?Ä[Ä\ÄgÅ#Å%Å)Å;KK n„BKŖT«h¹XK§f§{UJƒ*ƒ>„'„|…^†e†q‡‡‡nˆM‰i‰|Š9‹0Œ\DenpŽY9X‘\‘z’’ ’]”f–J™ššš*›D›L›N›V›{œbf}žŸYŸgŸrŸzŸ{Ÿ| %£'£+£M¤¤¤J„?„b¦¦P§§|©NŖ«¬Z®w±.³³7µµ\¶V··"»RæĄĄ"ĄYĮĮvĀFJ‚‚A‚[ƒS„„m†[‡Aˆˆˆ%ŠŠs‹ ‹MŒ0Ž"Ž>ŽqWs‘2“h–o—x˜4˜b˜}™+™ašš)VzŸŸ'ŸEŸV  ”'”S¦K© ©'«=«d¬ ­®c®t°°°?±“Dµf¹ ¹ŗl¼Kææ,ĄBĄMĄnĮ8ĮkĀĀMJƒ7ƒ7Ÿ"½`ÄKIŒ3„K§ENI@ƒJƒn‡3ˆ<ˆ\ŠD‹VIav‘5‘E‘~’o“ ””r••1•5–K—˜˜˜˜P™š'›]œLœp1užž?Ÿ<    ”<¢ ¢B¢F¢Q¢T¤w¤}¤~„6„AØ6«¬+¬C®%ÆC°A±;²³³!³T“I·Hŗ&ŗ/¼+¾X¾zæ æ'æ9æuĮIƒ;ž6„D„DII‹THŒ3ŒCŸr„ HHH’’+Gƒƒ:ƒ?„ „O„R„p…8…K…Q…c…f…j…k† †!†"†%†&†S†e†mˆˆ~‰$‰TŠAŠYŠ\‹\‹d‹wŒŒBŒc4rŽŽO\\]s‘ ‘‘‘$‘3‘h’5’:’<“M“S“\”X”r•s–C–D—"—p—}˜˜n™1™Sšiœ œ|jsžžž*ž,ž>ž>žKžYŸ ŸŸ#Ÿ#Ÿ$Ÿ'Ÿ< 1 ; D J N t””@¢g£ ¦¦Y§E§t§z§}©s«?«B«h¬¬¬¬ ­^­g­v­y®±±±0±6±Q²² ³!³H“Wµµ*µ,µHµP·øRøf¹¹K¹fŗ/ŗ5ŗ8ŗn»¼P¼{½½½D½Hææ!æXætĄ>ĄNĄNĄOĄYĄcĄdĄfĄhĄlĄuĄwĄxĮÄÅAG³,ƒXG17;BNn‚<‚x‚~ƒƒ ƒ ƒ'ƒ3ƒ_ƒhƒt„„ „ „K„Q…'…0…5…b††0†P†Q†T†V†h†m†p‡‡‡‡‡‡‡ ‡ ‡/‡8‡a‡g‡hˆˆˆ ˆˆ)ˆJˆSˆwˆz‰%‰&‰wŠ2Š@Šr‹‹‹"‹2Œ Œ(ŒS  33Ž$ŽcŽoi‘ ‘‘‘‘.‘A‘p‘’’’%’0’]’]’c’n’x“ “+“8“\“g” ”””””=”S”T”V”W”o”p”s•)•*•@–– ––––0–5–J–K–X–^–c–f–g–l–r–|——$—$—8—L—N—U—j—j—l—l—n˜+˜>˜C˜n˜o™™"™)™8™R™_™hš šš(š*š.š1šašjšnšq› ›&›-›A›C›l›t›u›~œSœTœTœWœaœiœkœlœm%39BKLVXjž žž$ž+žbŸŸ(Ÿ0Ÿ0ŸVŸYŸnŸnŸwŸwŸy          ( G U W” ””””"”f”h”n”o¢ ¢/¢9¢I¢I¢K¢Q¢S¢T£ ££££+£+£>£X£[£f£z£z¤¤!¤J¤T¤U¤`¤a¤d„ „„p¦>¦D¦R¦S¦a¦l¦q¦s§§§§§§F§X§f§sØØØ Øb©(©*©*©9©<©?©N©s©w©xŖŖcŖo«««%«4«I«R«g«x«}¬¬¬0¬:¬;¬\­­V­~­®®®®[®\®g®t®t®uÆDÆEÆEư°!°9°;°R± ±±±±±,±;±K±M±~² ² ² ²Q²Z²a³_³c³s“*“9“I“I“J“X“e“f“g“j“qµµ!µ9µZµ^µa¶ ¶!¶4¶^··%·.·d·m·xø?øV¹ ¹ ¹¹6¹7¹8¹8¹Sŗŗ ŗ ŗV» »&»O»w¼9¼G¼L½½+½u¾1¾C¾O¾X¾z¾{¾~æ æ ææææ?æGæqæræ|ĄĄ&Ą'Ą.Ą0Ą;ĄSĮĮĮ ĮĮĮĮĮ#Į/ĮLĮsĮxĮ~ĮĀĀ$Ā3Ā4ĀdĀeĀkĀtĀyĆĆĆĆOĆ[ÄÄÄ'Ä+Ä7ÄQÅÅÅ61Gƒ…/††rŽXu‘N–"˜˜™$šœ7œOœPœYœcGIž2Ÿ££^¤.¦;¦]§§§7§P©A¬0¬0­}°°G± ± ““3“F“H¶-¹QæRĄ/Į>3G‚$…\†I‰$ސa’r”K—"™Aš1š=›.›F ; x¢A¢l£¤ ¦§§jØO©F©u««j¬-­Y­~®TÆI²{³9“Dµ_ŗ5ŗ@ŗj¾æ3ĄIĄoĮ,ĀĀĆÄ9FG‚‚gƒƒ$ƒ*ƒ^†††&‡wŠ‹nŒ@ ,ŽR>’4““5”H–Q—=™!šbœTž{Ÿ$Ÿ5Ÿu¢#¢@¢t¤/¤w¦ ©o«3«K«]«l«r¬¬D¬e­®%±±G±d³<³T³g“ ··:·Sŗ(¾¾æ[æ^Ą:ĄfĄgĀvĀzF™;Fƒ!…jFmƒ/ÄÄ'Ä*Ä@Ä@FF†‡%‹‹-‹O44}“L•,—˜)˜)š~¦>¦@“@¹¾EĄ'ĄTE—pE—pƒE~&+/JR^_c‚ ‚0‚A‚G‚M‚Y‚b‚}ƒ ƒ*ƒ4ƒ9ƒ>ƒIƒ^ƒgƒmƒ~„i……$…3…P…b…g…t…}††††!†7†8†K†M†p†t‡ ‡ ‡‡Z‡_ˆˆ;ˆ=ˆZˆ]ˆbˆw‰ ‰`‰c‰l‰vŠŠŠ-ŠHŠXŠ}Š‹1‹O‹zŒ ŒŒ.ŒBŒHŒh%-D|ŽŽŽŽŽŽ7ŽRŽoŽ~ ")4?EJez(LXr‘‘.‘3‘8‘I‘b‘e‘k‘p’’’4’d’l“““+“>“K””””Z”s• •K•o•x––/–1–5–M–p–s–u———!—H—L—_—a—d—o—u—y—}˜˜˜˜5˜9˜u˜z˜{™™)™I™R™Zššš%š/š[š`šcšnšp›,›Q›[›g›kœ&œPœoœt ).MV[_d|~ž žžž)ž-ž;žAžFžMžWžYž]žqž|ž~ŸŸ ŸŸ!Ÿ"Ÿ*Ÿ8Ÿ:Ÿ  $ & 3 L u” ”””””*”3”R”^”`¢¢2¢5¢:¢;¢R¢w¢£ ££G£f£g¤ ¤¤?¤M¤]¤~„^¦*¦D¦N¦]¦t¦v§9§;§qØY©4©CŖ/Ŗ7Ŗt«««««%«D«E«^«d«j«p«|¬>¬L­­=® ®3®7ÆÆ/ÆD°°°A°r±±±±&±<±X±{±~²w³³³³C³Q³S³g““ “)“7“F“X“eµ(µ/µ5µq¶/¶H·|øøøløq¹ ¹¹7ŗŗ1ŗ~»»)»5»<»>»]¼¼=¼E¼i¼l¼z½ ½½(¾ ¾b¾f¾o¾tææ2æ6æ?æEæHæRæ^æ`æĄ#Ą9ĄJĄZĄ`ĄdĄlĄ{ĮĮ7ĮEĮLĮ[Į\Į]ĮdĀĀ$Ā;ĀLÄÄ(ÄKÅÅ(!E‚o†X†[ŽS‘J‘Y‘n‘{‘{’8“e”[™]  ”^£B¤P„-­°s°y±± ±;±U±d³o·Q·pø*¼=æ#E…‹rŽY‘J’ ¤ØS©v±EµL¼G½½Ā{DMƒI…KˆP•?œ%ž-Ÿ ¦©=­/°²<³"½Bæ4Ā ĀGĀqĆĆ`ĆdD™Z¦\¦e§ŖThDPOSXa‚-‚1ƒ9ƒ=ƒLƒg„„S„e…K…]† †A†N†O†‡‡k‰‹&‹H‹HŒ4Œ4ŒjŒw-LŽqŽ~ JWry(DTt‘3‘L‘N‘V‘a‘b‘g‘’ ’E“9“?””””r•e•~– –R–]–f–p–p–}——H—[—m˜1˜8˜D˜}™™_ššš&šG›S›\›tœLœlœu:rvžž3ž@žFžKžVžkŸŸ Ÿ ŸŸ$Ÿ'ŸJŸWŸaŸbŸbŸu   ” ””””g¢U¢g¢££ ¤7¤I¤T¤t„>„I„y„~¦ ¦+¦C¦U¦m¦u¦|§ §§§F§G§OØN©©-©=©K©uŖ ŖŖŖ6Ŗ>ŖI«p¬¬ ¬2¬7¬\¬p­­­}®®®%®W°@°s°y± ±5²4²6²6²9²o³(³4³F“R“V“W¶[·m·qø øø8øVøVŗ1ŗ2ŗb»4»>»N»]½6½Y¾)¾Hæ2æ\Ą Ą>ĄLĄSĄWĄWĄbĄhĄlĄmĮJĮ\ĮjĮqĮxĀ$Ā4ÄhƒoDPT47;JVVv}‚‚‚‚#‚-‚4‚=‚D‚N‚k‚yƒ ƒ ƒ3ƒIƒ^ƒc„5„o„{„………H…I…K…u††††† ††%†E†P†V†p†r†s‡‡‡_‡c‡t‡zˆˆ"ˆ%ˆ3ˆ5ˆ>ˆ]ˆ]ˆ^‰‰‰%‰2‰F‰d‰|Š ŠŠŠAŠ{‹"‹)‹/‹0‹EŒŒŒ ŒFŒh`ktxŽŽGŽYŽp  !7Vpr+/>LY‘‘‘‘‘#‘=‘G‘O’’4’;’>’V’d’“““J“K“S“[“i”””””%”)”8”=”E”H”•&•*•/•@•b•i•x–*–B–R–W–Y—— —!—"—6—7—8—8—@—G—H—`—b—o˜>˜h˜s˜u™(™>™[™[šš#š#š)š/šNš]š]šc›:›E›J›c›g›k›m›mœœœ5œ9œEœNœPœhœtœwœ} #$28GJLSX\do|žžž*ž+ž.žAžNžWž^žkŸ"Ÿ"Ÿ(ŸWŸyŸ{Ÿ}     " ' 2 4 ? v v”””””””E”K”M”M”R”c”h¢¢¢$¢2¢:¢;¢I¢O¢_¢_¢l¢n££:£:£?£B£]£b£b£z¤9¤9¤Q¤R¤q¤w¤w„ „.„o¦ ¦0¦r¦x§!§N§i§j§q©.©9©E©L©R©|Ŗ ŖŖ6Ŗt« ««D«Q«Y«^«d¬ ¬¬¬&¬+¬-¬;¬>¬d­­ ­#­8­;­Z®®®3®?®S®U®]ÆÆ-Æ=ÆDÆa°@°v±± ±±±+±6±9±:±F±F±]² ²8²\²\²a²w²{³&³4³7³H³a³g³v³w““&“B“H“I“J“jµ(µ*µBµQ¶4··$·}ø ø%ø/ø8ø?øUøW¹¹$¹0¹>¹Q¹Sŗ#ŗ0ŗVŗjŗ~»»»»"»&»2»A»G»I»I»[»^»g»v¼)¼.¼;¼<¼F¼I¼L¼N½½½(½B½a½u¾ ¾1¾H¾R¾\¾a¾e¾tæ ææ%æ=æGæHæQĄ#Ą$Ą9ĄGĄJĄOĄQĄVĄWĄlĄmĄ{Į Į,ĮLĮaĮdĮjĮwĀĀUĀtĀvĆĆĆ*ĆNĆ_ĆcĆuÄ Ä(Ä7ÄKÄNÄTÅÅÅÅ#Å$Å=CƒCAD‘O–A—k˜j›2 ,£)¦«9­c³k»9½$kAD~#(‚‚ ‚*‚*‚K‚Kƒ1ƒ2……X†4†G†h‡hˆˆ,ˆA‰WŠŠ=‹ŒT&G‘O‘m’,“ “R”5—™-™k™zš4šKšU›&›-›B›eœYœYžfŸ Ÿh  h”%¢¢%¢&¢/£*£m¤O¤z¦¦¦ØY©CŖ ŖŖ*ŖM«g«q¬U¬V¬n­5­7­r­t® ÆQÆ^±±t²² ²1²l³ µ}·D·]ø-ø3øPøf»»,»8¾.¾5æĄĄ ĮyĮ}ADd‚‚/ƒƒg„ „„%…G…P††K‡9‡_‡fˆ‰%‰2‰S‰qŠm‹‹‹1‹5‹NŽaC‘`“:“?•C—#—`—l˜s™|›"›:›A›\›]›gœ8œS6Až[žqŸb  ””M”a¢/¢2¢2¢4£ ££2£V£`£s„!„@„x¦¦¦%¦F¦Q¦nØ©,©7©IŖ ŖŖ2Ŗ6Ŗ<Ŗf«« «Y¬P­7­>­>­@­D­F­R®d®hÆk°2°Xµ[·q·rø?¹ »3»7»_»d¼9¼w¼{½X¾f¾{æĄĄIĄKĄ`ĮĮ0ĮCĮXĮbĮiĮnĀ@D;¤/Ø®^®y@C˜Q@Cƒ y™D”W¶K@ƒF¢3¹@C”¤.°D@C‚J‡‰‹2ŒBa—žt£R„>„?©Ŗ!æ. @C‚J‰ŒB—Ÿ@„>æ.‚8>LNW&))9?CQVV^‚ ‚8‚N‚T‚V‚k‚y‚zƒ-ƒ4ƒAƒCƒDƒWƒ\ƒ„„„'„v………8…B…N…`†(†;‡ˆ1ˆ^ˆ{‰&ŠŠ%Š8ŠGŠ‹‹‹'‹.‹U‹q‹t‹w‹|Œ ŒŒS!'),:HL{ŽŽ+Ž9Ž`Žp'Przqt‘ ‘‘8‘n’’’!“?“\”””*”Y•••&– –2–e–i–j–{–|—————!—4—T—V—\˜+˜@˜C˜a˜t˜}™šš%š'š+šAš[šb›D›{œ$œ7œNœn !IPor|žžž,žMžgžjžržuž}žŸŸ!Ÿ$Ÿ;ŸRŸdŸeŸz  ) O o t u” ” ””-”B”X”l¢!¢/¢:¢D¢S¢i£££C£o¤¤¤G¤K¤S¤w¤w„„&„>¦)¦=¦D¦|§'§G§e§sØØ/ØbØf©B©h©sŖ)Ŗ9Ŗw««-«D«P«c«e«t¬¬!¬Q¬S¬\¬o­­%®D®VÆ Æ-Æ8°2±+±-±@²² ³:³I“““&“7“I“K“L“`µµW¶ ¶V¶\·o·|·}ø#ø4ø4ø6ŗŗŗ&ŗz»"»C»U¼}½ ½½½0¾g¾tæææGæPæPĄĄNĮĮĮEĮIĀ Ā$Ā2Ā=ĀRĀeĆĆĆĆĆ'Ć,Ć?Ć\ÄÄÄÄÄ2Ä[ÄhÅÅ<Š`>GQRUkn  &17:EHNWWbccjr~‚‚‚‚‚‚#‚'‚)‚*‚+‚1‚2‚4‚8‚:‚P‚P‚o‚p‚s‚zƒ ƒ ƒƒƒƒƒƒƒ ƒ.ƒ3ƒ4ƒ5ƒ6ƒ7ƒ7ƒ8ƒ=ƒ>ƒBƒBƒCƒDƒEƒFƒFƒHƒWƒjƒsƒwƒ~ƒ~ƒ„„„ „„„„„'„3„4„6„c„………………………6…K…L…N…S…W…X…[…[…\…\…_…_…d…e…k…m…o…p…x…z…|…}…†††† †††††††#†%†&†6†@†H†b†l†o†p†w†x‡‡‡‡‡‡ ‡‡‡‡‡‡1‡4‡8‡=‡?‡W‡^‡e‡kˆˆˆˆ ˆˆˆˆˆ!ˆ'ˆ0ˆBˆQˆhˆiˆxˆyˆz‰‰‰‰‰!‰&‰e‰o‰p‰uŠŠŠŠŠ'Š+Š1Š@ŠGŠdŠnŠpŠ}‹‹‹‹‹"‹#‹'‹*‹/‹5‹8‹:‹E‹M‹P‹S‹U‹a‹n‹x‹{‹ŒŒŒ ŒŒ Œ1ŒCŒEŒEŒ\ŒjŒlŒ|Œ}'[acŽŽŽ ŽŽŽ+Ž=Ž>ŽDŽZŽ`ŽiŽxŽ|!!56;?EHHJJLNQTgu   "->IWWcc‘ ‘ ‘‘‘'‘(‘0‘2‘3‘<‘<‘?‘@‘J‘L‘N‘R‘S‘Y‘]‘^‘`‘’’’’’ ’’’’’’%’.’;’U’i’t’{““““““ “"“:“E“E“I“L“n””””%”(”*”,”0”1”2”=”[”q•• •••&•?•?•N•R•_•y•z•}––– – ––-–2–8–B–D–E–U–Z–[–a–e–j–k–l–m–n–o–r— ————————!—'—7—<—A—E—F—M—R—R—T—g—m—q—x—y˜˜˜˜˜˜˜˜/˜1˜6˜?˜B˜C˜F˜L˜S˜f˜o˜s˜y˜~™™™™$™%™(™+™/™L™W™c™iššš!š!š"š#š)š*š*š/š/š2šQšb››››%›'›,›4›9›@›A›B›D›P›Q›X›[›a›b›b›j›n›s›}œ œœœœœ$œ)œ,œ/œ8œ@œIœSœ^œ`œaœbœbœbœgœiœkœnœ|œ}œ~!19BLNQUYYefosvz}žžž ž ž žžžžžžžžž!ž%ž(ž*ž*ž2ž3ž4ž7ž8ž;ž=ž?žDžNžPžVžVžXž^žcžižkžnžqžxžzŸŸŸŸŸŸŸŸŸ!Ÿ$Ÿ'Ÿ/Ÿ0Ÿ;ŸKŸLŸNŸTŸXŸ`ŸaŸeŸgŸjŸnŸrŸrŸuŸvŸy      ! ' 2 2 < P W _ b o |””” ” ””””””,”-”.”=”B”`”c”h”k”o”s”t”w”x”x”{¢¢¢¢%¢&¢5¢7¢7¢8¢8¢:¢<¢=¢?¢?¢@¢A¢A¢B¢D¢E¢H¢H¢R¢U¢U¢W¢Z¢_¢`¢h¢i¢k¢l¢l¢n£ ££££.£0£2£B£C£J£S£T£U£W£]£`£a£a£b£c£c£g£h£i£k£m£p£p£z£~£¤ ¤6¤6¤I¤K¤R¤S¤U¤[¤b¤s„„„„„„„!„*„0„2„3„5„6„8„?„B„C„D„F„Q„X„_„_„h„p„s„|„¦¦¦¦¦¦¦¦¦¦¦¦)¦+¦.¦:¦<¦H¦K¦N¦P¦U¦[¦[¦]¦^¦g¦m¦m¦n¦p¦s¦t¦u¦y¦|¦|¦}§ § § § §§§§§§§§§ § §!§%§*§.§/§2§;§?§I§N§N§P§Q§R§R§S§V§W§W§f§g§i§j§l§n§o§r§t§u§w§y§|ØØØØØ Ø"Ø#Ø$Ø%Ø+Ø,Ø.Ø3Ø:Ø>ØQØVØWØ\Ø^Ø^ØbØdØfØgØkØ~©© ©©©©$©'©)©5©5©7©7©:©=©=©?©A©B©D©L©M©U©Y©Z©c©d©e©f©p©s©{ŖŖ Ŗ Ŗ ŖŖŖŖŖ5Ŗ8Ŗ9Ŗ;Ŗ>ŖGŖHŖHŖHŖVŖbŖmŖnŖs«F«L«N«Z«Z«Z«d«f«o«o«t«u«v«{«|«~¬¬¬¬¬¬¬%¬.¬2¬3¬4¬6¬:¬;¬<¬?¬A¬C¬C¬D¬E¬L¬Z¬[¬[¬a¬d¬y¬z¬|­­­%­%­&­'­(­+­+­.­6­7­8­D­L­L­Y­Y®®® ®®®®'®(®,®@®A®T®W®g®rÆÆÆ Æ8Æ:Æ<Æ?ÆAÆMÆQÆ^Æ^ÆaÆb°°° ° °°°°°°°4°7°8°8°;°;°?°A°B°F°F°[°i°u°~±±±±±±±±±&±9±B±F±G±I±P±U²²0²1²1²6²9²<²E²n²r²r²u²v²z³³³ ³³³³"³#³3³7³9³:³S³W³Z³^³c³r³y““'“'“)“2“K“K“V“V“W“X“Z“tµµµ'µFµ[µ^µaµmµn¶¶¶!¶-¶.¶.¶1¶3¶P¶R¶T¶X¶Y¶m¶r¶w¶y¶|···.·b·m·w·~·~·øø#ø7øCøEøJøeø{ø~¹¹¹¹4¹6¹6¹6¹8¹E¹K¹Mŗŗ ŗŗŗŗ ŗ(ŗ-ŗ/ŗ2ŗ;ŗh» »»!»*»6»<»?»@»C»M»[»\»\»^»`»d»e»{»}¼¼¼$¼(¼<¼E¼G¼I¼K¼O¼Q¼`¼e½½½½#½,½2½e½h½x¾¾¾¾%¾(¾)¾1¾5¾C¾P¾X¾d¾e¾g¾h¾q¾t¾~ææ æææææ"æ'æ-æ.æ:æAæAæBæEæLæOæOæTæWæYæ\æ]æ^æ_æaæbæjætævæwæzæ{ĄĄĄĄĄĄ#Ą#Ą*Ą/Ą@ĄCĄFĄFĄHĄHĄIĄJĄJĄ[Ą\Ą]Ą^Ą^Ą_Ą_ĄfĄnĄrĄrĮĮ Į Į ĮĮĮĮĮĮ+Į.Į2Į3Į4Į5Į8Į<Į>Į@ĮAĮCĮCĮDĮGĮJĮJĮOĮQĮZĮ[ĮaĮbĮeĮhĮiĮjĮjĮkĮlĮlĮqĮqĮĀĀĀ Ā Ā ĀĀĀĀĀĀĀĀ"Ā&Ā/Ā2Ā2Ā3Ā8Ā@ĀVĀmĆĆĆ-ĆNĆ{Ä Ä+Ä4Ä6ÄAÄ\ÄlÅÅ6>‚k„ ‹P™{ q >>…Ku„D„y¬A­±|ĮTÄ?ÄAÅD=S%7tx‚%„„…‡JˆS‰‰=‰zŠŠŠA‹J‹|ŒŒ!qvŽw%a‘“+–i—˜š šQšZ›Sœ žQŸ" W”” ¢=¢]¢f£>¤<¤F©;©zŖ2­]®:°5“““_µŗŗ¼)¾e¾|ĄĮĮ#Ā =„tŠ©ŖAĮĮ=††Š‹Pd‘:’Ur”¤B„„„0„5„L„X„_„p„x¦§ Ŗ{­%ÆÆ`Æe° Į Į Į=…C…C¼rĮi=FHHHKLnu%'d‚ ‚#‚Z‚~ƒƒƒƒƒ:ƒ;ƒFƒfƒhƒy„'„S„k…J…J†‡Cˆ ˆx‰9ŠŠ$Š)ŠL‹ ‹ ‹‹‹‹K‹aŒ ŒŒŒCŒXŒ{<cŽŽ$ŽBŽvYefgm!"(r‘‘’““[“t”••<•n–Q–`—0—Q—R˜N™™™L™c™z™~ššd››2›T›`œœ!œ*œ2œJœpKNQTXžž0ž0ž1ž4ž7ž?žEžWŸ/ŸDŸ{  E c z”E”}¢££¤¤ „„„„4¦¦¦'¦F§;§uØTŖŖŖ4ŖEŖzŖ{««2«8«B«U«W«m¬5­$­$­4­r® ® ư'°+°5±E²²$²c³,³C³E³Q³Z³h“““oµµµ.µe¶¶ ¶M¶l··øp¹¹pŗ ŗ.ŗ.» »L»i»k¼ ¼H¼^¼r¼u½½½b¾¾¾ ¾Ræææ,æ4æaæqĄ ĄĄĄ.ĄLĮBĮ]ĀĀ=ĀKĆĆ(ĆMĆX =De–S—oœo¬¬¾~S=yAƒ6ƒHƒ…>…B…I…_†<‡ ‡ ˆ ˆ!ˆ"ˆVˆ}‹!‹#Œ ŒHŽŽ<M““|•˜˜6™ š-›F›Pœ^fž3ž?žtžv¢'££d¦¦*¦d§§mØ©$©=©a©{©|©Ŗs«h¬¬7­qÆ=°¶T··n·y»M¼Hæ4æ_ĮĮ!ĮeĀ)ĀxÄÄ Ä(Ä9Å%7;iv&&‚Aƒ6ƒiƒ~†i†o†q†v‡`ˆ%‹!‹#Œ4"Ž}KK‘p˜q™e››A›]ž-ž9ž9Ÿk u£Y£c¤¦¦¦@¦G¦a©{Ŗ+Ŗ,Ŗ_­9­Y°-¹2¹4ĮXĮZĮZĮ\ĀSq;T P‚F‚aƒƒ.ƒGƒm„…W…h…m††o†q†u‡3‡=ˆˆˆ(ˆx‰‰uŠŠ ŒXŒlp|ŽŽZŽbgRb‘4’ ’3’l“&””O”Z•y– —E—^˜˜9˜{™D™`ššb›V›{œ{žŸ> ( 3 D U”!”,”n”v¢!¢%£<¤„<¦LØ ©lŖ_ŖcŖo«+«U¬¬L¬a­+°(±@±L“*·r¹¹`ŗ/»<¼D½½>¾Sææ'æ-æ@Ą4Ą<Ā&ĆÅ8:…<‰_‰tŠ‹‹S–$˜}˜}ši›Wž ¢ ¢;¤=„v¦?¦A©ŖIŖT«|«}¬<¼Næ0Į2Ć:‘bÄB‚A:+,==>>@A‚y‚zƒ ƒc„^„^„a…=…M…O…O…y†††<†I†t‡ ‡"‡(‡2‡7‡cˆˆYˆ~ŠŠŠ ŠŠ)Š<ŠVŠXŠYŠbŠmŠp‹-‹.‹:‹|‹|‹‹ŒŒŒŒ(Œ.ŒEyŽŽŽŽŽŽ5Ž9Ž:ŽQŽRŽ]Ž^Žt*D`cde‘+‘6‘7‘:‘<‘W‘W‘X‘X‘s’G’Q“8“]“y”””-”-”.”]”w”~•••<•C– ––[–\–]–]–t— —=—o—y˜˜˜˜˜˜˜<˜@˜Y˜c˜d˜f™"™$™%™=™B™Zš-›››,›U›U›V›W›tœœbœbOP[\^wžžžžž4ž6ž6žCžCžDžYž[ž[ž]ž]žcžežuž{ž|ž}ŸŸ.ŸJ  % m””#”'”-£Y£Y£o£¤+¤2„„ „h„s¦ ¦¦¦¦,¦:¦;¦[¦^¦h¦r§§j§pØ[©;©C©F©_©eŖ0Ŗx«^«a¬¬¬¬"¬0¬0¬1¬;¬R¬R¬d¬d¬z­­®gÆCư&°(°:°A°B± ± ±[±_±`²²c²f³³E³F³F³G³I“Dµ(µ)¶¶A¶C¶G¶J¶L¶]·· ·!·.·zø7øf¹¹I¹U¹W¹W¹XŗZŗ\»»b¼¼¼4½½#½<¾¾U¾Xææææææ4ĄĄ>ĄAĀĀ:Ā:ĀDĀDĀLĀMĀNĀQĀQĀRĀUĀVĀyÄ'Äk:„Š6Š>Šd“8––<–a–n—˜hŸ@«Q“7ø&¹ŗ½ ¾Ą{ĮEĆ-‚S:=a~9}‚‚<ƒ.ƒ7ƒUƒ`ƒ~„„!„$„{………5…B…I…X…t…w††††<†G†N†P†w‡‡‡ ‡ ‡‡]‡gˆˆCˆoˆpˆv‰wŠ)Š:ŠJ‹‹‹‹‹"‹*‹6‹AŒŒŒ2Œ}8ŽZŽbŽu *+>Qbm7O‘‘M‘Q‘S‘Y‘s’’’““K“Z“n””S”U••••C•G–––0–[–s— ——˜6˜9˜=™™%™%™G™`™y™zšYšh›'›-›8›9›=›G›bœœœ&œ9œNœ_œcœdœnœ{9KjžžžAžAžKžjžsŸŸ'ŸHŸy  % . 3 < b k s” ”””&”r”s¢'¢T¢u¢w£ ££+£+£H£h£o£{¤¤ ¤!¤@¤B¤M¤S¤a¤d„.„H„e¦¦%¦9¦d¦l¦x§§§§=§N§PØ©$©.©2©M©R©vŖŖ-Ŗ4ŖwŖ{«7«C«I«h«n¬¬¬#¬#¬$¬+¬.¬2¬X¬s¬­)­5­9­M­N­q®® ®®0®m®o®xÆ3Æ7Æ<Æ@° °°°;°U°t°}±±B±c²²²0²a²w²³³;³E³H³cµ!µZ¶ ¶¶.¶k¶· ·.·_·vø ¹¹"ŗVŗ^»(»>»[¼¼ ¼¼ ¼=¼E¼H¼K¼N¼S¼o½b¾¾ ¾¾%¾(¾<¾C¾P¾P¾R¾uæHĄĄ'Ą;ĄFĄ`ĄvĄĮĮ ĮEĮKĮgĀĀĀĀĀĀĀ Ā%Ā0Ā7Ā;ĀLĆĆ :„`…S‡ŠmŽc’˜bž9Ÿd” ¦*§§{©'©lŖ«e«t¬¬y¼F¾sĄ_ĄmĮUĀ ĀnÄ&Å:7›Jž„_³:·s¼9,7W‚eƒt„'„a… … ‡b‹UŽ]?‘2’E’W’g“]””N”Z• –T˜™ ™ ™(š&( / 3 : |”/¦©cµµ6·dø[ŗĄ6ĄuĮ?7h‚%„{†Kˆi‰d‰sŒhŒw,a|Ž}‘&““M”” ””f–1–2–t—˜˜™>š2%žiž} :”v¢R£{„<¦}ØiŖ«[¬°:°S°\°m²³ ³nµ6µ7¶q¶u»4¾S¾T¾TĄĮĮC%6?‚Oƒ[‹3ŒTŽ’A—N˜p˜všHŸ|”4¢4„<Ŗ Æ/°:±:±<¶T¶v»¼5æ1ĄĄ Ā4ĀoĀpĆĆ3ĆPĆdÄFÅ6¬<¬}¾TÄ)ƒ69:=GJK+4>Bccd‚#‚7‚=‚^‚p‚yƒƒƒƒ.ƒcƒcƒmƒ|„„a„q… …!…#…'…*…I…I…J…M…O…P…S…d†6†<†B†d†w‡‡‡‡,‡2ˆ"ˆ#ˆ#ˆSˆYˆ[ˆiˆ~‰‰ ‰%ŠŠXŠ\Š^Š_ŠbŠmŠpŠv‹*‹E‹E‹X‹f‹{Œ ŒŒŒŒ&Œ.ŒQŒl $/<iŽŽŽŽŽ&Ž5Ž9Ž:Ž:Ž@ŽQŽZŽ[Ž]Žb !QT`e{q‘‘+‘5‘5‘6‘7‘8‘9‘q’q“““0“;“>“G“H“N“^“e”8”@”l”q”s”t•• • •)–E–H–R–Z–[–]–g–j–k–l–s–{—;—<—H—K—Y—a—a—b—b—o—x—z˜˜˜˜#˜f˜s™Z™`™`šššš'šAšCšHšJšNšOšcœœ)0Možžžž9ž;ž<žGž]ž^ŸŸ.Ÿ2Ÿ;Ÿ> 5 < m { }””””””M”R”o”w¢1¢J¢f¢x£x¤a¦[¦x§§=§W§i§n§u§w©©o©p©x««"«F«[«d«h«t¬ ¬¬¬$¬%¬-¬.¬0¬d¬y¬z¬|­­.­L®°±±±±±±"±;±K±[±~²²2²Z³Q³X³o“'“*“-“2“X“m“oµµµ(µ(µ<µHµP·2·E·v·}øøøø ¹¹¹¹U¹W¹v¹zŗŗSŗ^ŗjŗx»»d»d¼F¼X¼d¼f¼h¼i¼m¼o½½½&½L¾C¾E¾P¾Q¾R¾sæææ-æ4æHĄ/Ą0Ą5Ą5Ą=ĄCĄHĄKĄOĄSĄTĄUĄVĄ`ĄeĄiĮ ĮĮĮĮĮĮVĀ ĆĆ Ć(Ć)Ć-Ć5Ć6Ć7ĆQÄÄÄ~ÅÅÅÅ(Å-Å;Å<‰r69ADFHSjkuw} !'*+,224<\kl~‚‚‚‚"‚%‚-‚1‚2‚A‚I‚T‚W‚X‚a‚xƒ ƒ$ƒ.ƒ9ƒ;ƒ=ƒ=ƒCƒEƒLƒLƒSƒSƒSƒTƒVƒVƒ`ƒhƒsƒuƒwƒyƒ|„„„ „„„„„%„3„E„J„K„K„P„R„f„o„t„u…… ………%…W…Z…\…c…e…l…l…{†††† ††† †*†+†0†4†4†<†H†S†T†l†u‡‡‡ ‡‡‡‡"‡%‡)‡8‡?‡F‡W‡Z‡^‡wˆˆˆ,ˆPˆrˆy‰‰‰‰ ‰$‰L‰c‰l‰n‰q‰r‰t‰yŠŠŠŠŠŠ Š&Š(Š+Š+ŠJŠeŠm‹‹ ‹‹‹‹‹‹‹‹‹%‹'‹(‹)‹/‹0‹1‹1‹6‹;‹E‹H‹H‹I‹S‹S‹g‹|Œ Œ Œ ŒŒ.Œ3Œ@ŒSŒTŒ]ŒzŒz  !+<STTU^`dyyz|Ž ŽŽŽŽ!Ž+Ž<Ž@Ž^Ž_ŽbŽrŽsŽvŽwŽzŽ %&*77<<JPWY[__cccdn  '8DE]cq}‘‘‘$‘'‘2‘6‘7‘N‘X‘Y‘_‘g‘k‘o‘t‘y‘z’’’’-’.’F’K’O’P’V’d’q’|’““““0“;“G“L“R“c“n“s“z“{“{”””” ” ””””””””,”P”T”V”[”\”]”^”o”y•• ••••!•*•=•C•C•G•Q•U•W•`•o––––/–V–n–n–z—— ————————$—&—(—/—0—0—2—4—<—H—\—_—f—g—j—l—p—}˜˜˜˜˜˜˜˜˜˜4˜9˜:˜A˜C˜V˜X˜[˜^˜m˜q˜~™™™™ ™™™™™&™(™5™B™K™k™m™sššššššš"š2š7šNšTš`šbšhšmšr›› ››››!›$›(›-›2›>›H›f›n›w›}œœ œœ%œ+œ/œ=œ>œeœ{$.9AILLMTY_eipružžžž-ž1ž3ž=ž?žDžIžLžSžUž\žaždžežkžqžtžuŸ ŸŸŸŸ$Ÿ'Ÿ/ŸBŸHŸhŸhŸnŸsŸtŸ}Ÿ~     % & ( / 8 9 ; < N O h v x y ”””””"”;”>”U”a”b”l”m”o”u”x”|¢¢¢¢"¢'¢)¢*¢.¢2¢2¢2¢?¢@¢B¢C¢G¢U¢X¢Z¢`¢g¢t¢~¢~££££ £1£4£G£N£P£S£T£a£h£l£p£q¤¤¤¤ ¤¤¤¤'¤-¤A¤E¤J¤K¤M¤V¤V¤]¤b¤c¤f¤u¤y¤}„„„„„%„3„6„7„>„@„D„H„H„I„P„\„r„v„{„~¦¦¦¦¦¦¦%¦&¦'¦+¦,¦0¦5¦7¦;¦<¦F¦J¦P¦R¦V¦g¦h¦n¦|§§§§§§§§§,§0§2§5§;§<§=§A§A§B§C§C§O§P§Q§Q§R§S§Z§\§f§m§s§w§|§~§ØØØØØØØØ#Ø$Ø(Ø,Ø-Ø.Ø2Ø?ØEØNØRØUØfØiØjØmØpØtØtØvØw©©©© ©©©©©©#©'©-©0©3©;©>©H©W©Y©Z©]©]©b©d©l©q©t©vŖŖŖŖŖŖŖŖŖ!Ŗ"Ŗ(Ŗ,Ŗ-Ŗ/Ŗ2Ŗ2Ŗ3Ŗ6Ŗ8Ŗ8Ŗ;Ŗ?ŖAŖDŖDŖJŖOŖRŖRŖXŖ`ŖfŖkŖkŖpŖsŖwŖx«« « « «««« «!«"«+«.«.«2«7«B«I«L«P«T«[«a«i«n«o«w«y«y«}¬¬¬ ¬¬¬¬¬¬¬,¬,¬/¬0¬A¬B¬K¬X¬Y¬v¬­­­­­­­#­(­4­6­9­@­A­E­M­N­O­S­U­Y­_­k­q­y®® ® ®®%®+®2®;®>®@®J®L®b®f®h®h®m®n®p®z®}ÆÆÆ&Æ-Æ3Æ4Æ:Æ<Æ@ÆAÆPÆVÆl°° °°°°°°(°/°0°2°6°>°?°F°G°H°I°I°]°i°l°l°t°u°}±± ±±±-±-±;±B±D±H±S±c±d±s±u±v²²²0²7²7²M²T²T²c²g²h²m²m²o²z³³ ³³*³.³4³5³8³;³;³H³P³^³r³v³w³y“““5“8“9“;“fµ µ µ0µIµKµgµuµxµy¶¶¶ ¶ ¶¶¶¶¶$¶,¶;¶C¶D¶K¶P¶R¶\¶^¶j¶l¶q¶r¶r¶u¶v¶y¶z¶|·······"·.·?·@·B·K·]·`·i·tø øø,øCøIøløxø¹¹¹¹¹C¹bŗŗŗ1ŗ;ŗd»»»»»»)»3»6»>»A»H»H»P»S»W»X»\»i»{¼¼¼ ¼ ¼¼¼¼¼$¼1¼4¼:¼D¼K¼R¼U¼U¼\¼a¼a¼e¼f¼h¼y½½ ½½&½6½>½L½U½X½Y½[½]½c½f½i½v¾¾¾¾¾¾"¾#¾,¾-¾.¾9¾H¾M¾O¾f¾i¾u¾yæææ æææææ-æ/æ8æDæHæQæSædĄĄĄĄĄ"Ą(Ą2Ą3Ą9Ą:Ą>ĄAĄBĄXĄ[ĄsĄ{ĮĮĮ-Į7Į;ĮCĮGĮKĮRĮcĮcĮdĮvĀĀĀĀĀĀ Ā7Ā9Ā<Ā=ĀGĀHĀRĀSĀTĀeĀnĀoĀqĆĆĆĆĆ&Ć'Ć(Ć(Ć)Ć)Ć*Ć/Ć2Ć6Ć6Ć8Ć<ĆPĆUĆeĆiĆlĆmĆqĆsÄÄ ÄÄÄÄÄÄÄ%Ä/Ä6Ä=ÄBÄEÄFÄJÄPÄXÄeÄhÄmÅÅÅÅ%Å-Å<Å>69; 6<†eŠ)Œ2˜r„&¹8Į5!69^‚YƒUƒs…t‡ˆŽZb”•z–n—&—0˜^œuž;ždžk |¢£h„ ¦VØ~Æ“Yµ5ŗ »B69OOm„„„$†n†xŠ‹DŽ‘o’’z•)–l—Y˜p™3›nwžŸi¢¤J¤U¤V„B„C¦¦¦¦6¦?¦y¦z¦~Øj©f©oŖŖŖ9ŖIŖTŖt­L­~®®#Æm°° °±[³$³%³O³W¶RæcĄĮ[Ä55ƒi 5'ƒ;…f‹%’’{–U¦ ¦H¦q©KŖ|55L|ƒ=ƒh…]††0†i‹‹.—rœ`žM¢D¢D„Q§©xø »NĆjĆkĆrÅ5…Z„G5=TTfi|$.?A‚‚‚$‚F‚Zƒ ƒ ƒUƒcƒhƒtƒx„„„„'„S„^………@…@…B…I††††1†5†7†<†C†J†X†j†p†y‡ ‡ ‡7‡J‡P‡]‡f‡n‡qˆˆ!ˆ,ˆAˆSˆSˆ\‰>‰V‰a‰i‰lŠ'Š,ŠEŠ^Š_Šj‹‹‹‹‹‹!‹,‹-‹>‹F‹M‹R‹R‹TŒBŒs,AIbwyzŽ+Ž=ŽSŽYŽ`Ž`ŽbŽrŽz7BDDE[ab#CFx‘ ‘ ‘$‘D‘E‘K‘N‘h‘z‘’’’’’’’Q’f’m’n’u’“-“7“J””-”3”4”X”Y”n”~••••/•/•D•G•K•S––––p–r—— ———6—`—m˜˜˜@˜P˜d˜e˜e˜f˜h™™™ ™™ ™(™*™=™^™_™x™xšš-š|››!›/›/›K›N›xœ(œ(œ:œCœ\ Y`nnož!ž!ž+ž6žMžZžZžfžižvŸŸŸŸŸ$Ÿ.Ÿ2Ÿ<ŸBŸGŸGŸJŸOŸUŸYŸ[ŸgŸk    1 F F O l r u””>”Q”Q”a”v”v¢*¢*¢1¢5¢>¢>¢J¢n££ ££0£M£P£U£d£u£v¤ ¤¤(¤0¤5¤:¤;¤B¤H¤M¤a„„@„C„C„H„H„H„O„P¦¦¦*¦+¦.¦6¦7¦?¦b¦j¦l¦r¦s§§§§(§)§4§E§mØØØ)ØBØS©© ©.©:©;©^©u©x©z©zŖŖ Ŗ&Ŗ2Ŗ2Ŗ6Ŗ7Ŗ7Ŗ@ŖCŖEŖMŖMŖRŖWŖbŖdŖeŖjŖsŖ|««««««&«-«6«B«b¬¬¬#¬7¬i­­ ­#­&­4­D­m­o­r®®®®®!®*®*®*®+®<®K®b®sÆ+Æ,Æ:ÆQÆ\Æ\Æhư°5°>°E°M°V°Y±E±X±t±v²²²²²&²'²)²/²<²L²L²M²M²l²s²w³ ³³³ ³ ³ ³!³#³#³+³7³>³n“9“j“j“v“~“~“~“~µµµ%µ%µNµZµmµnµ¶¶(¶1¶2¶>¶C¶L¶S¶x¶{··· ···@·]·g·i·m·x·z·}·øøøøøø2ø3øSøS¹¹¹$¹=¹`¹`ŗ ŗ$ŗ%ŗ2ŗ2»»)»Q»Q»R»X¼¼¼?¼H¼H¼[¼f¼f½$½L½g½l½l¾¾¾¾¾<¾]¾l¾l¾x¾æææ?æ?æPæ`ækĄĄĄ3Ą?ĄĮĮĮ$Į$Į,Į?ĮQĮQĮeĮmĮvĮwĮ|ĀĀĀ ĀĀĀĀ1ĀDĀIĀIĀRĀxĆĆ,Ć,ĆUĆsÄÄÄ(ÄJÅ<5…N¦W©q2†ž7³Z¶\‡d2ADf}}  EHnr‚ ‚ ‚B‚S‚Z‚n‚r‚xƒƒƒ!ƒ!ƒ!ƒ6ƒ:ƒAƒYƒgƒyƒy„„ „'„3„J„U„_„h„p…………… … … …… …#…/…8…H…H…H…I…W…Z…\…]†† †††(†3†5†6†;†<†=†>†E†F†H†I†N‡‡7‡9‡:‡?‡E‡F‡Z‡[‡\‡_‡_‡c‡d‡d‡f‡h‡h‡i‡j‡j‡k‡k‡o‡o‡qˆˆˆˆˆ ˆ+ˆ+ˆ,ˆ0ˆ@ˆCˆIˆM‰‰2‰4‰=‰W‰^‰b‰f‰f‰f‰g‰g‰h‰m‰m‰n‰q‰s‰t‰v‰w‰yŠŠŠŠŠŠ#Š+Š,Š-Š.Š1Š8Š>ŠBŠIŠRŠVŠ^‹‹‹‹ ‹)‹5‹9‹;‹>‹B‹H‹N‹O‹rŒŒŒ)Œ1Œ}Œ~Œ`mpŽ ŽŽŽDC~ "J\hy~‘2‘3‘4‘4‘@‘\‘]‘`‘j‘l‘m’ ’’’ ’Y’Z’r’~’“ “)“P“R“S“V“^“b“n“v””””+”0”0”2”5”5”6”@”K”U”X”Y”Y”n”}”}••9•E•F•G•J•J•K•Q•Q•Q•S•g•n––=–=–C–E–N–a–y–z——/—2—?—?—A—K—_—f—k—k—r˜˜4˜D˜E˜O˜P˜i˜y™™ ™ ™ ™!™H™H™j™j™k™k™m™qššš4š8š9šUšVšXšgšhšmšr››››› ›"›#›4›7›:›>›A›B›B›E›E›J›K›N›S›\›\›\›]›b›g›q›t›w›{›|œœœœœœ#œ/œ2œ5œ8œ=œ?œDœQœSœXœiœjœu!AAEFžž&žKŸ Ÿ ŸOŸ[Ÿ`ŸaŸbŸeŸx           8 > L ^ ^ h h ”””””%”%”W”X”_”g”g”r”r”{”¢¢¢M¢N¢_¢~¢~££££££ £&£(£,£0£1£2£?£A£P£Q£S£X£`£l£n£s£v¤ ¤¤"¤/¤3¤7¤7¤=¤>¤C¤G¤H¤Q¤R¤S¤T¤c¤r¤t¤y¤}¤~¤~„„„0„>„?„V„X„b„b„s„x„~¦ ¦ ¦¦¦¦¦¦¦"¦%¦(¦)¦0¦3¦4¦4¦H¦L¦O¦Q¦R¦j§§§§,§1§2§9§e§~ØØ(Ø(Ø)Ø=Ø>ØBØBØDØKØQØYØZØv© ©$©'©+©,©-©/©0©0©3©7©=©=©H©I©J©K©L©O©S©X©[©_©b©b©h©l©m©t©wŖŖŖŖ Ŗ ŖŖŖŖŖŖ!Ŗ"Ŗ$Ŗ'Ŗ(Ŗ)Ŗ+Ŗ+Ŗ6Ŗ7Ŗ8Ŗ8Ŗ<Ŗ>ŖGŖMŖUŖXŖ\Ŗ]Ŗ_ŖeŖfŖmŖnŖpŖrŖrŖxŖ}«« « « «««&«)«6«A«K«P«T«a«i«i«j«j«k«n«p«{¬¬¬¬¬ ¬ ¬ ¬¬¬¬¬¬¬¬ ¬&¬6¬A¬K¬Y¬Y¬Z¬\¬\¬`¬­>­>­@­D­E­E­G­H­H­I­O­P­R­S­V­c®®® ® ®"®%®'®+®H®H®V®V®\®d®h®j®q®s®w®z®~ÆÆÆÆÆ&Æ(Æ(Æ,Æ,Æ.Æ1Æ1Æ7ÆHÆHÆIÆJÆKÆLÆNÆPÆTÆTÆUÆVÆZÆiÆk° °-°/°0°1°3°3°E°H°P°V°a°f°g°j°m°m°s°u°v±o±t±u±v±y±y²²²²²%²&²0²W²g²l²o²³³³³ ³&³V³Y³d³j³k³l““$“)“5“7“>“Pµ µ µµ2µ:µFµNµ[µ]µ^µbµgµjµkµoµpµqµtµ|¶¶¶¶¶ ¶ ¶¶¶'¶,¶,¶8¶9¶:¶K¶N¶S¶U¶U···· ·#·1·A·G·[·]·_·g·h·k·m·n·o·q·røøø ø%ø&ø,ø6ø:øFøLøQøXøz¹¹¹ ¹¹2ŗ=ŗDŗPŗS»»»%»(»)»3»7»8»:»<»H»O»O»P»R»T»W»]»]»_»f»p»q»q»z¼¼¼¼¼¼$¼%¼1¼?¼A¼A¼\¼]¼`¼z½%½+½S½X½Y½_½_½`½f½f½g½h½i½l¾¾¾¾¾¾%¾)¾1¾9¾=¾D¾G¾]¾]¾yæ!æ+æ7æBæDæIæbæcædæfækæoæpæpæzĄ Ą Ą ĄĄĄĄĄkĄkĄ{Į+Į+Į,Į,Į-Į0Į:Į?Į?ĮAĮAĮCĮHĮIĮJĮWĮXĮZĮZĮZĮ[Į\Į]ĮbĮdĮhĮiĮjĮnĮnĮxĮ}Į~ĀĀ Ā ĀĀĀĀĀĀĀĀ$Ā%Ā+ĀRĀT2ˆ"ØZ(2Rƒ/ƒ0ƒ;ƒ;ƒU†‡‡‡Št‹%’”E”s—˜1˜5›”””¢*¦U¦a¦l§ÆM¶"·!ŗn»w¾YĮqĀ ÄfÅGÅHB257=ADQSTUhilsv}%',-.9MRRXceefhjknp‚‚‚‚‚‚!‚#‚$‚%‚)‚1‚2‚4‚A‚H‚T‚U‚W‚a‚b‚k‚k‚u‚x‚yƒƒƒƒƒƒƒ/ƒ0ƒ5ƒ5ƒ=ƒ=ƒ@ƒBƒCƒFƒHƒSƒUƒUƒdƒhƒqƒrƒsƒtƒuƒvƒxƒyƒyƒ}„„„„„ „ „ „ „„„„„„„/„2„6„7„K„O„O„_„e„f„g„h„l„t„u„w„|………$…+…8…;…<…=…=…>…>…?…B…G…K…V…V…W…_…f…g…h…h††††††††"†<†B†I†J†L†P†P†h†i†u‡‡‡ ‡ ‡ ‡‡‡‡‡*‡1‡3‡4‡4‡5‡8‡<‡?‡C‡D‡D‡I‡J‡\‡\‡`‡g‡n‡n‡p‡q‡sˆˆˆ!ˆHˆ\ˆcˆhˆoˆoˆpˆpˆqˆrˆxˆyˆzˆ}‰‰#‰$‰T‰V‰W‰^‰c‰e‰p‰q‰s‰s‰t‰w‰y‰zŠŠ ŠŠŠŠŠŠ%Š&Š&Š&Š(Š(Š,Š/Š0Š0Š2Š7Š:Š=Š=ŠHŠJŠXŠXŠY‹‹ ‹ ‹ ‹ ‹ ‹‹‹‹‹‹‹‹ ‹#‹#‹#‹$‹,‹1‹@‹B‹C‹G‹J‹O‹P‹Q‹R‹qŒŒŒ Œ,Œ7Œ8ŒTŒVŒYŒ\Œ`ŒeŒgŒkŒoŒtŒv  33446SSUXXY]hkxyy}ŽŽŽŽŽŽŽ Ž+Ž,Ž-Ž0Ž0Ž@ŽDŽOŽQŽQŽ\Ž`ŽqŽtŽvŽ{Ž{Ž%%'(*,<<=>>?@AABEFFGIMOOOS[\vv{   $&&7?CDDEbv|~‘ ‘‘#‘%‘&‘.‘/‘7‘7‘:‘;‘@‘H‘O‘T‘Y‘Z‘\‘_‘e‘g‘m‘o‘o‘y‘{‘|‘~’’’’ ’’’’’’#’;’<’>’E’O’P’R’j’{’{’}“““ “““““ “+“:“;“D“H“L“R“T“]“]“k“|“|“}””” ” ” ” ”””””””””&”(”1”2”3”4”5”6”8”=”E”L”X”Y”^”`”b”o”s”w”x”•••••••&•:•>•@•D•R•T•W•\•^•^•a•b•c•g•k•o•r•r•s•{––––––-–0–1–9–9–A–T–W–Y–c–e–l–p–q—————————— —"—$—2—6—F—N—N—N—P—^—n—n—r—u˜˜ ˜˜˜(˜(˜)˜.˜.˜1˜4˜5˜:˜=˜?˜B˜N˜T˜T˜U˜W˜^˜e˜p™™™™™™™ ™™™™™™.™1™;™?™G™K™S™T™W™^™_™m™p™t™u™y™zš%š(š/š9šBšJšKšTšXšYšešfšrš~››› › ››››››››&›'›0›:›=›@›K›M›N›P›S›g›j›w›z›|œœœœœœœœœ$œ&œ(œ)œ+œ8œ9œ9œ:œBœEœEœHœIœJœLœ]œ^œ_œlœoœuœxœ{œ|(EGLNSTfinrw}žžžžž žžžž,ž,ž-ž-ž-ž8žEžMžNžPžRžUžWžYž\ž]žažbžcždžgžgžižqžtŸŸŸŸŸŸŸ Ÿ#ŸCŸRŸVŸYŸ[ŸgŸmŸnŸrŸtŸtŸ{Ÿ      $ ' ' , 1 3 3 4 7 ; E F F R S e i l p w w } ~ ~””””””” ”%”/”1”I”e”l”n”p”s”t”z”|”~¢¢¢)¢0¢1¢9¢=¢A¢M¢N¢Q¢T¢l¢n¢n¢r¢}£ £ ££££ £(£*£4£G£L£Q£R£S£U£V£]£t£u£}¤¤¤ ¤ ¤¤¤¤¤¤¤/¤2¤:¤:¤;¤;¤?¤B¤D¤E¤E¤i¤y„„„„„„„ „„„„„„„„„„„„„'„4„<„<„=„=„L„L„Q„Q„T„e„t„w„¦¦¦)¦;¦<¦>¦D¦E¦O¦S¦T¦T¦T¦Z¦`¦a¦c¦f¦l¦u¦v§§§§§§!§"§&§;§<§<§<§?§@§A§T§Z§[§n§s§w§z§|ØØØØØØØØØØØ!Ø!Ø"Ø#Ø(Ø.Ø3Ø8Ø9Ø>Ø@ØBØDØFØGØHØIØ_ØbØfØhØpØrØtØ}© ©©©©©)©.©9©=©R©S©T©U©W©Y©^©d©g©m©r©s©t©v©w©y©{©|©}ŖŖŖŖŖŖŖ Ŗ(ŖAŖEŖFŖIŖJŖLŖVŖZŖ\Ŗ`ŖaŖcŖhŖjŖkŖkŖlŖmŖwŖyŖyŖzŖzŖ{Ŗ|« « « «« « «"«1«1«2«7«:«>«D«W«f«f«h«h«m«u«v«x«|«~¬¬ ¬ ¬¬¬¬ ¬"¬&¬+¬,¬7¬8¬8¬:¬=¬A¬N¬O¬Y¬j¬n¬o¬o¬p¬v¬­­­­­­­­"­#­#­%­&­&­(­)­/­E­G­M­O­U­W­X­Y­Z­[­r­v­v­y®®® ®®®#®'®(®0®4®9®F®I®J®J®L®N®Y®\®_®g®h®m®w®|ÆÆ&Æ'Æ)Æ,Æ3Æ4Æ9ÆBÆDÆJÆKÆPÆQÆUÆ\Æ\Æ_Æ`Æg°° °°°°° °/°0°1°4°4°4°@°O°Y°Z°]°f°l°s°t°y°|±±±±±±±±±0±;±?±@±C±F±K±o±u±|²² ²²²²² ²!²$²*²+²-²6²;²;²?²@²@²N²N²T²T²a²g²p²y²y³³ ³³³"³#³%³'³'³*³*³+³.³9³;³?³H³M³N³R³U³U³V³X³w³|“““ ““<“=“J“R“R“V“Y“\“_“`“f“f“j“m“q“s“s“t“v“z“}“~“~µµ µµ&µ5µ7µ<µcµgµhµkµmµoµpµtµuµyµ|¶¶¶¶¶ ¶¶$¶$¶%¶'¶'¶)¶3¶C¶D¶E¶K¶L¶L¶M¶P¶`¶`¶k¶l¶n¶q¶s¶s¶u¶v¶x¶z¶{···· · · · ·····"·(·>·?·?·?·@·B·D·D·K·T·[·]·^·`·o·s·w·øøøø ø ø ø ø ø ø&ø,ø/ø5ø=ø>ø?øBøJøJøLøMøVøWøZøZøføhøxøzø¹¹ ¹¹¹¹¹¹¹¹!¹"¹$¹2¹=¹K¹S¹l¹v¹~ŗŗ ŗ!ŗ6ŗ:ŗ=ŗZŗ`ŗhŗnŗp»» »»»»»»»(»)»+»3»S»e»g»l»}¼¼¼¼ ¼ ¼ ¼¼¼¼¼!¼$¼%¼6¼6¼6¼<¼?¼A¼K¼R¼[¼\¼\¼]¼e¼s¼y¼|¼}¼~½½½ ½½½,½B½U½X½Z½[½]½e½g½l½p½~¾¾¾¾ ¾ ¾ ¾¾¾¾¾$¾(¾(¾,¾,¾-¾-¾-¾.¾/¾8¾D¾M¾Y¾^¾^¾a¾f¾f¾i¾i¾n¾x¾|¾|¾~¾ææ æææ2æ2æ<æ>æ?æAæDæOæQæUæWæWæXæ[æ]æ`æhæiæiæjæræsæxæxæ{æ|ĄĄĄĄ Ą Ą Ą ĄĄĄĄĄĄĄ Ą Ą"Ą#Ą&Ą(Ą2Ą3ĄFĄTĄWĄZĄ[Ą[Ą[Ą\Ą\Ą]Ą]ĄgĄgĄuĄ{ĮĮ ĮĮĮ$Į+Į5Į6Į>ĮBĮGĮMĮTĮ\Į]Į]Į^ĮcĮmĮqĮ}Į~ĮĀĀĀ Ā Ā ĀĀ7Ā7Ā:Ā<Ā=ĀKĀQĀSĀTĀnĀtĆĆĆĆĆĆĆĆ Ć&Ć*Ć7ĆCĆNĆQĆ`ĆlĆlĆoĆpĆpĆpĆpĆuĆyĆ}Ä Ä Ä ÄÄÄÄÄÄÄÄ)Ä*Ä*Ä1Ä<Ä>Ä>Ä@ÄBÄBÄDÄEÄFÄ]ÄnÄxÅÅ-Å6Å8Å=2Dƒ;ƒU„g‹%‹Te—2™ž4¦>©W©b¬Y²c³ ³k·»»)¼]2‚l†ˆ"‹ ”b¤§Z©©V«G²Eµd¶ ·q½a2Sbi‚G‚Vƒƒ[ƒg„E„X…X†‡‡‡<‡\‡pˆ+‰WŠ6‹‹‹‹ ‹<‹B‹L‹UŒeŒqŒt.Ž=Žc\ww‘2‘\’’’’}“ “y” ”5––R—™xšVš~›››"›+›0›4›8›=›iœœ"œ(œ`œkœu      s”z¢8¢p£)£5£9£>¤+¤6„4„W„i¦_§§1§3§9§p§yØØ5©©UŖg«3«6¬"¬/¬5¬_¬p­^®®®"®,®:®i®xÆÆ2Æ7°W±±±±n²² ²g³ ³ ³ ³µb¶¶E¶W¶w¶øø3ø?øEøK¹!ŗŗ.»¼ ¼¼¼`½g¾D¾]æ6æaĄ Ą!ĮSĮY11GJS"=LN‚‚$ƒ ƒ ƒ<ƒA„„…††7†7†X‡&ˆ;ˆTˆx‰‰&‰+‰SŠŠŠmŒŒ#Œ%Œ0Œ\ŽŽŽVŽaŽc Sbaff•–(–-–N–v——!—%—O—n—y˜˜˜(˜*˜p˜q˜r™9™I™f™iš'š.šEšGš`šn%Ujwx~žž žžhž~ " 9 F F {” ”4”6”p”w£ £¤¤§sØf©}««.«e«q¬#¬0¬L¬Q¬a¬{­­k±±/²[²h³Z³y“ “*“jµL¹6ŗ$ŗ-ŗ1¼9¼K½½ ¾O¾S¾a¾o¾uææ,æ?æ`Ą&Ą'ĀoĆĆ Ć1Ć6ĆOÄ=ÄqÅŁd169OOm$1‚‚‚yƒƒ>ƒ>ƒnƒx„„„2„J„S†F†N†n†r‡vˆˆ#ˆ[‰‰8‰`‰a‰g‰sŠŠŠŠŠ<ŠJŠ\‹'‹)‹0‹0‹3‹A‹D‹E‹G‹L‹qŒŒ Ž@ŽIŽt>CEs‘5‘u’-“!“"“{”'”E”K••D•o•z–=–W—G—G—M—Q˜M˜T˜Z˜i˜n˜p™1™C™`™a™ašœž0ž@žažbŸu E E K l x x ~”” ”.”u¢P¢T¢g¤ ¤.¤c¤i¤y„„„„ „"„=¦¦¦ ¦ ¦¦:¦J¦x§r© ©D©J©R©f©g©o©sŖŖ ŖUŖXŖZŖ\Ŗ`ŖcŖeŖfŖjŖmŖnŖrŖtŖu¬¬¬¬,¬4¬[­­+­=­L­W­~®$®UÆ)°(°3°4±±±&²F³*³;³P³R³Y³i“s“sµ0¶2···&·1·2·_øø8øMøy¹ŗFŗrŗx»I»I¼K¼O½½x½{¾9¾QæææWĄvĮ2ĮTĀĀĀĀ9ĀVĆÄ Å%Œ1Te|~ $%--.1o‚‚‚‚‚P‚f‚f‚oƒƒƒƒ'ƒ-ƒ4ƒ?ƒ@ƒBƒRƒRƒTƒUƒ]ƒ]ƒqƒqƒrƒtƒvƒ}„„ „ „„„„ „ „'„(„4„6„N„N„O„T„X„^„`„g„h……………………8…<…=…>…?…G…J…X…\…w…x…}†† † † † †††††††††!†"†#†%†&†5†6†:†E†J†K†L†P†X‡‡‡%‡8‡F‡F‡L‡R‡[‡[‡]‡]‡`‡b‡f‡k‡n‡p‡vˆˆˆˆ ˆ+ˆ,ˆ,ˆ7ˆAˆCˆEˆFˆJˆMˆTˆ]ˆ]‰‰1‰1‰;‰=‰a‰e‰e‰k‰m‰q‰r‰s‰t‰u‰yŠŠŠŠŠŠŠ,Š.Š1Š1Š1Š4Š6Š6Š:Š>Š>ŠAŠAŠAŠ_Šx‹‹‹‹‹‹"‹%‹.‹2‹4‹5‹8‹8‹8‹:‹;‹@‹M‹M‹N‹T‹Y‹m‹n‹p‹rŒŒ(Œ+Œ>ŒAŒ\Œ]ŒbŒjŒqŒsŒ|Œ~Œ  ?AB`bcehimŽŽ-Ž0B  !!##-=ahhxxy}}‘$‘(‘(‘.‘3‘;‘<‘D‘D‘G‘H‘K‘K‘\‘`‘j‘k‘m‘n‘~’’ ’#’#’$’%’>’>’b’c’d’u’}’““&“+“+“/“/“0“5“6“>“L“M“N“R“T“V“[“\“b“g“m“v“|“””””” ” ””””””””””” ”"”&”&”(”(”)”*”0”1”1”3”4”6”@”E”F”K”N”S”X”X”`”d”}•• • • •••••••$•3•7•9•?•?•A•F•G•K•K•N•Q•R•R•S•V•V•W•Z•i•j•j•k•l•n•p•v•v•w•z––––0–0–8–B–X–X–c–n–u–}——@—@—D—O—^—j˜˜˜%˜=˜@˜B˜C˜F˜N˜P˜Q˜R˜R˜S˜z™™ ™ ™I™R™j™q™~šš šš4š5š7š9š<š<šQšVšVš_š_šmšqšršušušušyš|›››››››› ›!›"›"›#›$›*›,›/›0›2›7›8›=›>›?›@›@›D›J›J›K›N›O›O›P›Q›R›T›X›[›]›a›j›k›l›m›p›r›r›w›x›x›y›y›z›{›|œœœ œœœœœ!œ$œ$œ(œ(œ-œ/œ0œ5œ>œ?œ@œ@œ@œAœBœCœEœHœKœNœRœWœWœWœXœ\œ\œcœgœhœtœvœwœwœxœyœ~œ~ AESTžž(Ÿ ŸBŸDŸGŸGŸIŸNŸNŸOŸWŸYŸ[Ÿ]Ÿ`ŸdŸgŸiŸjŸmŸrŸ              4 4 F T Y h””””” ”'”6”9”A”I”J”U”V”X”_”h”s”s”t”z”{”}”}”~”¢¢¢N¢O¢Q¢S¢Z££££££££&£'£)£+£.£.£5£A£A£B£J£M£]£]£]£^£a£k£q£t£u£v£z£z£|£}¤¤ ¤ ¤ ¤¤+¤3¤5¤9¤:¤:¤;¤>¤B¤F¤H¤H¤J¤N¤P¤Q¤R¤Y¤b¤f¤q¤r¤s¤z¤}„„„„ „ „ „„„„„„%„'„,„1„1„5„5„8„9„P„U„U„W„[„[„^„p„q„t„y„{„{¦¦¦ ¦¦¦¦¦!¦#¦(¦(¦-¦-¦-¦.¦0¦2¦>¦@¦I¦K¦N¦P¦R¦U¦b¦c§§§%§+§4§4§9§@§G§I§L§N§Z§\§e§h§o§q§y§z§|§~ØØØØ ØØØ6Ø:ØQØSØSØUØUØVØYØ`ØkØ}Ø~© © © ©©©'©(©+©+©.©1©3©3©9©:©<©?©A©D©D©F©H©H©K©R©S©U©X©Y©Z©\©a©ŖŖ ŖŖŖŖ Ŗ$Ŗ%Ŗ&Ŗ*Ŗ+Ŗ+Ŗ0Ŗ6Ŗ8Ŗ8Ŗ?Ŗ@ŖMŖWŖbŖsŖwŖ|Ŗ|«««« « « ««&«*«6«<«=«A«D«F«G«L«W«m«««¬¬¬¬ ¬¬ ¬@¬O¬X¬X¬Y¬]¬_¬c¬g¬n¬p¬p¬q¬r¬x¬x­­­­­­­­­ ­'­1­4­7­=­?­?­C­D­D­F­H­O­}­®®®® ® ®®$®%®%®'®(®)®*®*®*®+®,®2®4®5®7®7®9®;®<®D®G®P®S®S®T®Y®\®]®]®a®b®f®f®g®h®i®j®l®m®s®w®x®z®|®}ÆÆÆÆÆÆÆÆÆ Æ)Æ+Æ,Æ,Æ-Æ1Æ8Æ8Æ:Æ;Æ?Æ?Æ?Æ?ÆHÆKÆMÆOÆOÆTÆTÆVÆWÆ\Æ\Æ^Æ^Æ_ÆaÆaÆbÆdÆdÆhÆkÆm°° ° °°°°° °"°"°#°+°+°-°-°.°0°2°5°9°C°E°F°F°G°L°M°N°O°S°T°V°^°a°i°i°s°u°u°w°}°~±±±±±±±±±0±4±5±6±]±n±o±q±t±t±u±{² ²²²²²&²*²2²<²<²C²T²W²b²g²h²h²l²l²n²n²p²u²w²y²{²|²³³³³³³ ³ ³ ³³³³ ³#³&³:³N³]³]³`³d³e³g³l³r³r³s“““1“5“=“B“j“sµ µµµµµ%µ%µ6µ7µ9µ9µBµFµFµZµZµ[µ\µ\µ]µ^µ_µaµaµbµbµcµfµgµjµjµmµnµpµqµrµrµxµ|µ~µ¶¶¶¶¶ ¶¶¶0¶2¶3¶7¶9¶:¶?¶B¶I¶K¶R¶]¶^¶e¶h¶i¶j¶p¶p¶q¶s¶u¶v¶x¶z··· · ····!·"·#·$·$·%·&·&·(·@·]·b·h·l·n·øøøøøøø ø øøø%ø&ø0ø3ø4ø5ø:ø:ø>øIøLøRøSøUøUøeøføgøpøq¹¹¹¹.¹2¹Gŗŗ ŗ ŗŗ=ŗ@ŗTŗVŗtŗt»»»»»»»%»(»)»*»+»2»6»8»8»D»G»H»I»I»Q»Q»R»T»U»X»[»e»e»i»n»p»t»~¼¼ ¼¼¼¼¼¼¼%¼%¼+¼.¼0¼1¼9¼<¼A¼V¼W¼[¼]¼^¼a½½½½½&½+½H½J½L½O½\½_½a½e½e½g½i½i½p½t½x½{½|¾¾¾¾¾¾¾¾¾"¾#¾%¾(¾(¾)¾1¾5¾8¾<¾<¾=¾=¾]¾xææ"æ&æ8æ=æ=æ>æ@æAæAæEæIæMæMæ_æ`æeæoæqæræsæsæuæuĄ Ą ĄĄĄ#ĄlĄwĄxĮĮ$Į$Į$Į%Į+Į,Į-Į.Į/Į/Į0Į1Į2Į2Į2Į3Į3Į4Į8Į:Į:Į:Į>Į@Į@ĮAĮDĮGĮHĮQĮQĮRĮWĮXĮ[Į^ĮbĮeĮgĮjĮlĮnĮqĮqĮrĮrĮsĮsĮvĮvĮxĮzĮ|Į|Į~ĮĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀ Ā!Ā!Ā"Ā$Ā%Ā'Ā'Ā)Ā*Ā*Ā-Ā/Ā/Ā3Ā4Ā5Ā=ĀKĀTÄÄ Å711…K—p¦q‚1N;BS[y‚‚!ƒ/ƒz„„„„„ „1„_„t………!…G…J…L…O…X…z†O‡7‡a‡t‡~ˆˆ9ˆwˆ}‰hŠ ŠŠ"Š"ŠdŠx‹‹‹‹‹‹9‹OŒŒ4ŒNŒbŒcŒgŒmŒ{ TŽŽŽ Ž ŽŽŽ(NZ`(P}‘‘D‘F‘O‘^‘p’ ’3“ “;“v” ”'”+”,”W• •C•C–5–_–f————&—V—`—j—l—m—o—o—q—u˜^˜f˜h˜o™ ™ ™:™\››3›>›J›oœœLEFNOjž ž1žRžfžpžqŸŸŸ5ŸIŸZ $ . 3 O””I¢¢+¢,¢.¢p££*£_£q¤.¤Y¤^„„„„„-„{§Q§c§cØØØ-ØnØt©©Ŗ ŖŖŖ2Ŗm««A«f¬¬¬¬¬&¬n­4­7®®-®F®zÆQÆeÆeÆv°:°}°}±!±.±n² ³³ ³!³:³V“2µµ<µ\µc¶W··G·K·P·_·p·q·qø#ø%øRøSøUøVø[øføn¹ŗ»8»G»o¼¼9½.¾¾tæææ3æ4æsæzĄ<ĄvĄwĮĮfĀ!Ā2ĀBĀEĀ`Ä ÄkÄ{ÄÄÅÅÅÅ*Å5Å<L1EKLMNQQWn}B‚,ƒ+ƒ-ƒ/ƒ0ƒ7ƒ7ƒ;ƒSƒh„ „S†‡J‡wˆ‰k‹%Ž7 ‘‘‘d‘d‘f‘g˜™?™Xš%š'šAšGšHž^ s”¢"¢/¢C¢E¢g¤¤¤¤o¦4¦}¦}¦~§|Ø©x¶]¹jŗ.» æBæTĄ#ĄFĄhĮ10†L ”¢6£§J‘0:FJKhnruy~ )-238:;HHMNNORW[pxx‚‚‚‚!‚"‚"‚"‚&‚*‚+‚0‚0‚0‚3‚5‚5‚<‚<‚=‚B‚D‚G‚K‚M‚M‚O‚Q‚U‚W‚Y‚\‚a‚p‚p‚}ƒƒƒƒƒ"ƒ(ƒ-ƒ1ƒ2ƒ3ƒ5ƒ:ƒ?ƒ@ƒCƒGƒKƒRƒ]ƒ]ƒ_ƒdƒhƒsƒtƒvƒxƒxƒyƒ|ƒ}ƒ„„„„ „„„„ „!„'„(„(„2„3„7„?„A„J„K„P„S„_„a„c„q„u„u„v„x„x„z„|„„… ……………………………!…$…&…'…+…,….….…1…7…<…<…?…G…G…I…L…N…V…]…]…]…^…^…`…a…e…h…i…i…j…t…t…u…y…y…{…}††††† † ††† †)†*†.†0†0†3†5†6†A†C†J†L†L†O†O†P†Q†V†[†q†t†u†x†z†~†~†‡‡‡‡‡‡‡‡‡‡"‡"‡*‡2‡?‡A‡U‡U‡W‡^‡a‡a‡b‡k‡xˆˆˆˆˆˆ(ˆ5ˆAˆFˆHˆIˆVˆcˆeˆiˆsˆvˆvˆwˆwˆx‰ ‰ ‰‰‰‰$‰%‰&‰(‰(‰/‰2‰>‰@‰^‰^‰e‰j‰j‰l‰m‰p‰s‰t‰v‰w‰ŠŠŠŠŠ*Š+Š/Š8Š:Š;ŠEŠIŠLŠOŠ`ŠqŠsŠ{Š}Š}‹‹ ‹‹‹‹‹‹‹‹‹‹‹$‹*‹2‹2‹3‹4‹9‹;‹@‹A‹A‹F‹M‹N‹Y‹\‹\‹i‹p‹q‹s‹}‹ŒŒŒŒ Œ Œ ŒŒŒ!Œ'Œ'Œ+Œ+Œ;Œ@ŒDŒDŒOŒRŒSŒZŒbŒcŒ~Œ~ŒŒ   $&',--//137?DHHKLMm{}ŽŽ ŽŽŽŽŽŽ Ž!Ž%Ž<ŽRŽYŽ[Ž\Ž]Ž^Ž_Ž`ŽcŽqŽrŽsŽwŽ| "05=JNUWW]]``w~   ##()./5=>ALRST\afhittuuvw‘‘‘‘‘‘‘‘‘‘ ‘'‘(‘.‘.‘B‘E‘J‘L‘M‘R‘R‘S‘T‘U‘U‘W‘_‘_‘a‘b‘b‘l‘m‘n‘p‘x‘~‘’’’’ ’ ’ ’’’’’’!’%’%’%’-’5’:’:’>’?’?’L’Q’X’X’a’k’l’n’q’t’t’{““ “ “““““!“!“!“#“$“&“/“5“6“7“@“D“D“E“H“I“M“a“b“s“””””” ” ” ” ”””””””””””””"”'”0”8”;”@”A”L”R”S”S”S”T”U”U”V”V”X”X”d”h”j”j”j”j”p”s”~•• •••%•%•&•&•*•+•+•<•>•@•E•K•O•R•S•V•Z•\•\•a•c•y•––– ––––$–&–*–0–2–6–8–9–<–<–E–E–R–R–V–W–Y–\–]–^–g–i–l–m–q–r–|–|— — — ———————$—&—&—'—-—8—9—<—G—G—L—O—P—P—R—U—Y—`—`—j—j—l—l—n—r—}˜˜ ˜˜˜˜˜ ˜(˜+˜,˜0˜1˜>˜>˜C˜E˜F˜M˜N˜Q˜T˜Y˜^˜d˜l˜o˜p˜}˜}˜}™™™™™™™™™™!™!™!™"™+™/™2™3™6™8™=™B™C™K™M™R™R™\™]™c™d™e™h™j™j™q™u™šš šššššš š#š$š'š(š)š*š,š1š8š9š<š=š@šBšCšEšEšNšQšUš`šašašjšjšjšnšqšušxš|›››› ›#›$›&›&›*›-›-›3›7›=›F›K›P›U›W›Y›[›\›]›c›l›n›p›q›q›s›y›y›z›{›|›~œœœœœœ$œ%œ(œ*œ:œ@œBœBœCœEœRœSœSœYœ_œdœhœiœjœlœmœmœmœnœoœtœuœuœwœwœxœxœ|"%)0122335:BEJJJKNOQY`gjmppqtwyz|žžž ž žžž!ž$ž%ž+ž+ž,ž:žBžCžOžVž[žjžsžxžŸŸŸŸŸŸŸ Ÿ ŸŸŸ"Ÿ(Ÿ-Ÿ.Ÿ.Ÿ0Ÿ0Ÿ1Ÿ4Ÿ:Ÿ;Ÿ;ŸDŸDŸGŸMŸVŸZŸZŸ[ŸdŸdŸiŸlŸlŸlŸmŸmŸnŸoŸtŸtŸ}Ÿ~          2 7 8 9 ; > D E G G H H K L L R T T U \ ^ w | ”””””” ” ”””””””” ”!”"”-”-”0”4”6”:”@”K”P”Q”R”_”a”b”c”e”e”f”g”h”k”l”o”y”y”{”|”}”~¢¢ ¢ ¢ ¢ ¢¢¢¢¢¢ ¢!¢!¢%¢&¢1¢4¢6¢6¢9¢9¢:¢;¢?¢B¢E¢G¢H¢J¢K¢M¢P¢S¢W¢Z¢h¢i¢o¢u¢w¢££££ £ ££££££££ £)£+£+£.£/£/£/£/£0£:£B£M£T£U£X£X£^£_£m£q£t£u£{£{£}£~£~£¤¤ ¤ ¤ ¤¤¤¤¤¤¤"¤$¤/¤0¤2¤6¤>¤?¤?¤?¤G¤I¤J¤U¤Y¤c¤d¤i¤l¤r¤s¤s¤w„ „ „„„„(„,„-„.„2„4„6„6„9„>„?„@„M„M„P„Y„p„q„t„w„x„x„|¦¦¦ ¦ ¦¦¦¦¦¦(¦,¦-¦0¦2¦4¦<¦>¦>¦?¦C¦D¦F¦H¦K¦L¦N¦O¦P¦Q¦R¦S¦U¦]¦_¦`¦a¦d¦h¦i¦i¦l¦m¦m¦o¦o¦q¦t¦t¦u¦}§§§§§ § §§§§§§§§"§%§+§+§4§5§6§;§>§?§@§B§F§F§J§O§T§T§W§X§Z§\§a§h§j§kØØØØØØ%Ø4Ø8Ø=ØBØBØFØIØOØQØQØ[Ø`Ø}©#©(©(©)©*©*©1©7©9©<©>©?©C©D©E©L©L©T©\©]©_©d©e©g©i©n©o©s©w©y©|©ŖŖŖ ŖŖŖŖŖ0Ŗ5Ŗ;ŖGŖIŖLŖOŖQŖXŖ[Ŗk«««««««!«#«#«,«,«.«2«?«E«G«I«M«M«R«R«U«Y«]«b«k«k«s«u«w«w«x«y«z«}¬¬¬¬¬¬¬¬¬ ¬-¬4¬4¬6¬6¬7¬7¬8¬8¬=¬=¬?¬A¬F¬H¬L¬O¬U¬Z¬\¬_¬i¬i¬j¬l¬p¬r¬x¬y¬z­­­­­­­­ ­­­%­=­@­E­H­P­V­W­X­Y­b­q­|­­®® ®®"®(®)®,®3®;®E®L®M®P®U®V®b®j®l®n®q®rÆÆÆÆÆÆÆÆÆÆ+Æ1Æ;ÆBÆCÆDÆEÆEÆJÆLÆUÆUÆUÆWÆYÆ_Æ_Æ`ÆhÆmư°°° °°°°°°°°#°'°1°2°2°8°9°;°>°>°B°D°G°H°N°R°R°^°g°i°r°v°y°|°~±±±± ± ± ± ±±±±±±±±±±±± ± ±!±"±&±(±*±,±-±0±0±1±1±2±5±9±;±<±?±?±@±A±D±J±K±L±M±P±Q±Q±X±_±c±d±q±v±±±²²²²² ² ² ² ²²²"²%²&²&²'²*²1²7²8²8²?²K²L²M²U²\²a²j²o²p²t²³³³!³+³-³/³0³5³8³?³@³@³G³G³G³S³S³_³`³a³c³d³e³i³k³l³o³s“ “#“8“9“E“X“`“f“g“n“q“q“{µµµ µ µ µµµµµµ!µ.µ9µ9µ9µDµGµHµIµJµKµOµPµQµTµTµWµZµ[µ\µ^µaµeµsµ¶¶¶¶¶$¶'¶+¶-¶0¶0¶1¶2¶2¶4¶6¶7¶7¶8¶U¶V¶X¶Y¶b¶p¶w·· ····#·#·%·&·(·.·7·>·A·B·E·G·I·P·S·]·d·g·m·n·p·p·r·s·x·z·|øøøøøøøø ø!ø"ø"ø%ø&ø2ø4ø?ø?øJøKøQø`øfømøpøyø¹¹¹¹¹¹¹ ¹¹¹&¹*¹,¹6¹7¹8¹8¹8¹K¹O¹|¹|ŗŗŗ ŗ(ŗ2ŗ;ŗPŗSŗdŗnŗwŗw»»»»»#»%»(»4»5»7»9»?»B»G»H»L»O»P»P»Q»S»S»V»[»]»`»j»p»v»w»|¼¼¼¼¼¼$¼)¼)¼:¼;¼@¼@¼@¼F¼G¼J¼L¼Q¼W¼W¼X¼Y¼]¼^¼w¼z¼|¼|¼|¼|¼}¼~¼~½½½½½$½8½Z½[½[½_½`½`½a½e½e½f½f½g½h½u½y¾¾¾¾¾¾¾#¾$¾%¾1¾2¾2¾3¾5¾C¾H¾R¾R¾X¾Y¾a¾d¾h¾k¾l¾|¾}ææ æ æ æ æææ!æ%æ&æ/æ7æ:æ>æGæGæIæIæQæSæTæTæ_æiælæpæpæqæræwæyæzæ|ĄĄĄĄĄĄ1Ą7Ą:Ą<Ą=Ą>ĄFĄGĄGĄHĄNĄ^ĄbĄhĄlĄnĄsĄtĄtĄvĄxĄxĄ|Ą|Ą}Ą}ĄĮĮĮ Į ĮĮĮĮĮĮĮ%Į.Į/Į3Į;Į<Į<ĮAĮBĮDĮIĮMĮOĮTĮWĮXĮ\ĮaĮbĮeĮkĮnĮoĮvĮxĀĀ Ā ĀĀĀĀĀĀĀĀĀĀĀĀ$Ā$Ā%Ā(Ā-ĀHĀNĀNĀqĀrĀ{ĆĆĆĆĆĆĆĆĆ"Ć*Ć,Ć.Ć8Ć?ĆAĆBĆPĆQĆ\ĆfĆiĆkĆoĆuĆzĆÄÄÄÄÄÄÄ Ä ÄÄÄÄ$Ä(Ä3Ä8Ä?ÄBÄDÄDÄDÄGÄJÄKÄQÄRÄVÄ]Ä^ÄjÄkÄmÄnÄpÄ}Ä~ÅÅÅÅÅÅÅÅÅ&Å/ÅFÅFÅGÅGÅHÅH0369;=G‚‚7ƒ<ƒIƒgƒsƒu„…I…S…j††‡‡‡wˆ"ˆ]‰ŠŠY‹+‹+ŒŒlŒxŽ{!Tu‘(’““0“G”•–*–B–{—z˜˜˜?˜a›F›pœ1Lž$žLžuŸŸdŸ|Ÿ} 2 ?” ¢¢U££M„ „'„8„9¦ §§§>§}ØVØ[©$«-«F«[«h«t¬ ¬?¬dÆ=±±V²²²"²'²C²[²b³“2µ^¶3¶K¶X·¹¹Z¹\ŗŗ^¼d¼h½½,½`¾H¾sĄ.Ą^ĄnĮ<Į[ĮkĀ ĆĆ ,02699;1ƒg„6„O…>†hŠ$ŠBŠj‹ ‘m‘m”–@–B–W—z—z™+™I™eššg›e›užsŸ0” ¦3§dØV© ŖTŖ}°O“#¹7¾c0001EFGHIIJKSw6‚ƒf„T‹/–—™Tšd›K \¢E£­Mææræ|.ĀhĀhĆmĀhĀhĀh †‰uš>Ÿy„P¼]ĄgĀhÅ7øMĆÅAƒ ƒ‰fŠŠ;ŠMŠQŠ_!<‘„*«B¬µJ†J”‚re,jor‚‚‚1‚^ƒ„„%„8„T„c„f… …+…6…;†/†X‡ ‡‡9‡=‡G‡`‡dˆ ˆ+ˆZˆwˆ}ˆ~‰=‰V‰^‰d‰i‰o‰qŠEŠIŠT‹F‹J‹Q‹aŒŒ"ŒtŒ|,AX\`yŽ-Ž|",1CR#=FXy‘‘#‘@‘A’’’’$’2’W““2“a”””””0”1••9–——— —)—P˜/˜0˜<˜S˜c™™™*™-™H™q™r™u™zš(š+š4šfšr› ›››"›B›U›`›zœœœœœ!œ)œ/œ2œHœa)\hqžž1žBžBžSŸŸ7Ÿ8ŸSŸXŸZŸh    . 4 S ^””4”C”P”_”s¢)¢,£,£5£Q£Y£[£m¤C¤F¤O¤r„„„„ „„„„0„U„X¦¦¦1¦I¦O¦S§+§D§eØØØBØVØ\Ø_ØaØg©©3©U©vŖŖŖIŖLŖ\ŖnŖ|«« ««««+«-«9«L«Q¬¬U­­­­ ­'­2­5­:­L®®®"®&®'®-®3®5®7®8®A®E®H®w®yÆ'Æ(Æ+Æ?ÆdÆiÆm°3°<°X°Z°]°u±+±C±G±V±o² ² ²m²r²v³³%³^³`“*“UµµµLµdµrµu¶¶6¶6¶p···(·*·B·G·h·qøøø!ø"ø=øCøFøIøLø[øgø{¹¹¹7¹G¹\ŗ ŗZ»»E»c»f¼¼%¼)¼J¼W¼f¼{¼~½½$½X½t¾¾¾(¾,¾jæ ææcæwĄ Ą@Ą@Ą^ĮĮ;ĮPĮQĮYĀĀĀ:ĀNĀNĀSĆĆ,Ć:ĆCĆRĆnÄÄÄ$Ä'Ä@„\ĆMÄ.ÄbĀj2„v…‡ ‡3‡F‡sˆFˆLˆYŠŠVh?‘“#“+•`™S™tšm{ž$Ÿ ŸT  T p¤<ØK«k«y­R°N°a³n“1µµ=µBµr·¹½)¾"æeĄĀRĀdĆ  øvĀdĀdĀf  ‡ ˆ ‰v˜ÄÅ  ’U¦Q ‰jŖXÆd¹"Ć ĆKĆnÅCĀfĆKĆnÄrÅCĆ ĆKÅ.ĆJĆrÅ=ĀqĀ{ĆĆĆ Ć ĆĆ3ĆBĆJĆ\Ć`ĆgĆsÄ D„I¬²²“+ĀqĆĆ ĆĆĆĆĆĆ!Ć/Ć1Ć8ĆJĆ[Ć[Ć`ĆfÄ Äă`ˆt “Y›Ÿx¦'©B³Yø-æcĄ ĆJÄÄ2Ä7Äy‚*2=>bp))OZ‚[‚g‚oƒƒ!ƒ"ƒ5ƒ6„„…7…H…h…u††P†k†k†w†‡‡ˆˆVˆy‰ŠŠ&‹‹‹#ŒzeŽs4O[‘‘ ‘G‘h‘h‘n‘o‘v‘y“"“/“K”””””V•p–&–Q—n˜L›kœ&œ7œPœcœwZ_xxž ž<žCžbŸŸŸLŸ`ŸiŸwŸ|Ÿ~ 4 W m n w”””¢ ¢3¢4£1£g£q¤¤'¤^¤`¤`„„„„„K„p¦¦ ¦!¦&¦1¦:¦<¦T¦T¦_¦p¦r¦z§§§ § § §§§§§§§-§0§:§:§<§C§E§E§]§a§a§g§ØZ©©]©^©i©t©xŖSŖUŖb««2«H«w¬>­.­P­ZÆ)Æ.Æ@ÆC°°°>°@°I± ±5±C±H±I±I±x²[“tµT¶q·v·{ø!øE¹»D»b»c¼I¾)¾\¾i¾|æwĄ'Ą1Ą;ĄWĄ[ĄgĄgĮĮ/Į0Ā Ā Ā ĀdĆĆĆĆ ĆĆĆĆĆĆ&Ć+Ć9Ć:ĆAĆDĆFĆIĆKĆQĆQĆRĆTĆUĆ_Ć_Ć`ĆaĆcĆdĆfĆjĆkĆkĆmĆoĆpĆqĆvĆwĆyĆzÄÄ Ä ÄÄÄÄ(Ä)Ä*Ä*Ä+Ä+Ä/Ä5Ä8Ä<ÄAÄCÄIÄKÄLÄOÄOÄPÄRÄSÄWÄ\Ä]Ä]Ä^Ä^Ä{Å fw‚=‚[ƒw„R……††E†u†‡‡jˆ+ˆ7Š%‹ f!?c‘+‘c’s”q•••Q–—™™hš-š.š4š9šAš^š_›{FŸŸ]Ÿn z””<”n¢¢"££Y£^¤J¤X¤|„&ØØ6© ©3««G«s­<®®®)®F®N®gưB°j±]²<³gµp¶C·#ø øEøm»G¼¼|¾2¾kæ.æ0Ą'ĮfĮzĮĀ*Ā=ĀDĀyĆI+…G…]††t‡wˆˆˆ‹qŒ'Œ~”˜˜p˜}Nžž%ž6”b£C§\§nŖ¬y­²U·|ø!øl¹*¹O¹~ŗ»MĄĄAĄqĀĆIÄ9ÄDŠNPTUw  !;<@BHMNPQRTX\x}~‚‚‚‚‚‚‚‚‚+‚,‚0‚3‚4‚;‚G‚M‚N‚N‚g‚k‚{‚}ƒ ƒƒƒ ƒ3ƒ7ƒ>ƒ>ƒCƒIƒJƒJƒ[ƒ[ƒ]ƒ^ƒ^ƒfƒhƒjƒmƒxƒxƒ}„„ „ „ „„„„„„&„/„1„8„R„S„v„{„|………… …*…,…/…0…Q…a…i…i…j…k…l…t††† † ††(†)†+†1†1†5†L†P†V†X†[†d†f†g†h†j†j†l†m†m†n†o†p†q†v†y†}‡‡ ‡‡‡‡‡1‡1‡2‡3‡3‡E‡I‡L‡R‡W‡[‡[‡`‡n‡s‡t‡v‡v‡v‡x‡x‡z‡|ˆˆˆˆˆˆ ˆˆ&ˆ(ˆ(ˆ*ˆ*ˆ0ˆ3ˆ5ˆ5ˆ=ˆ=ˆ>ˆDˆFˆIˆJˆPˆPˆPˆ[ˆ\ˆ_ˆ`ˆbˆeˆeˆpˆxˆzˆ}‰‰‰ ‰ ‰$‰$‰>‰N‰T‰`‰l‰pŠŠŠŠ Š(Š)Š+Š/Š=ŠOŠjŠnŠpŠqŠ‹‹‹‹ ‹‹‹‹‹‹#‹'‹,‹.‹/‹/‹0‹0‹1‹2‹3‹s‹u‹xŒ Œ Œ ŒŒ!Œ"Œ1Œ:Œ;ŒEŒNŒYŒeŒlŒqŒrŒrŒrŒrŒsŒ{  )468LTYkppŽŽŽ Ž Ž ŽŽŽŽŽŽŽŽŽŽŽ!Ž=ŽRŽXŽYŽoŽpŽz   '.:EMOPRw$&./ILRXa‘‘‘‘‘#‘'‘,‘A‘A‘H‘H‘M‘N‘]‘j‘l‘n‘n‘’’’’’’’ ’’’’’’’!’$’$’%’P’X’l’l“““““#“#“:“S“\“\””%”4”4”O”T”Y”Y”]”p”s”y••=•D•R•S•W•^•a•c•c•o•o•x•{•~–– – – ––"–(–5–9–9–D–M–N–O–Q–Z–\–`–r–{–|———"—4—6—F—L—R—R—`˜ ˜˜˜ ˜)˜*˜7˜>˜F˜`˜u˜{˜{™ ™™™™™7™9™=™?™[™]™xšššššš)š+š+š0š1š1šAšEšGšQš[š\š^š_šbšdše›››$›(›5›7›:›?›F›J›V›[›\›]›^›`›a›c›e›h›q›x›yœœœœœ&œ*œ7œ7œ:œ;œKœLœNœNœOœOœPœYœ_œaœbœgœgœhœ|  ###$)189GGGIILPVXXY^___bdeisstyz||~~žžžžž!ž+ž+ž,ž0ž3ž=ž?žEžFžNžOžOžQžRžUžXž[žažcžfžhŸŸŸŸ!Ÿ"Ÿ#Ÿ.Ÿ2Ÿ7Ÿ:ŸGŸHŸIŸIŸLŸMŸMŸPŸRŸYŸkŸlŸlŸmŸpŸpŸsŸtŸwŸxŸxŸz             & ) 1 1 > D D O e k k z””””"”/”3”6”:”;”;”;”=”@”B”E”F”F”K”N”P”^”`”a”b”c”e”e”n”p”p”t”y”~¢#¢$¢%¢/¢3¢5¢8¢8¢:¢;¢<¢?¢@¢A¢D¢F¢H¢W¢X¢Z¢h¢n¢n¢o¢r¢x£ £ ££££)£*£+£0£8£9£9£:£:£<£>£>£G£T£U£Z£Z£[£a£a£b£d£f£l£l£m£m£n£o£q¤¤ ¤¤¤¤¤¤#¤$¤'¤(¤/¤5¤:¤;¤?¤C¤G¤I¤I¤N¤P¤P¤Q¤\¤]¤d¤f¤j¤l¤m¤q„„„„ „„„„„&„(„)„)„,„-„1„5„6„<„@„D„H„L„O„[„^„b„e„e„p„q„y¦¦(¦*¦D¦]¦m¦n¦o¦t¦t§§§§§§#§%§*§?§sØ.Ø6Ø6Ø8ØZØsØy©-©4©A©E©E©E©F©M©P©T©X©f©p©s©y©y©|Ŗ Ŗ Ŗ Ŗ)Ŗ5Ŗ6Ŗ7Ŗ7Ŗ;«« «««!«+«C«D«N«P«Q«T«U«Y«Y«Z«g«h«u«v«v¬¬ ¬ ¬¬;¬<¬>¬?¬?¬C¬O¬P¬Q¬Q¬S¬T¬U¬i­­­­­­­#­%­+­1­2­7­8­=­=­@­C­D­D­F­F­I­N­P­[­]­]­e­g­i­k­m­o­q­t­v­|­|­®®®®® ®®®®!®'®'®'®)®+®?®D®E®S®Y®[®]®^®_®c®i®j®r®sÆÆ/Æ3ÆDÆEÆbÆeÆh°(°7°:°U°W°X°^°^°r°y±±± ±!±$±&±*±+±4±6±7±:±=±?±D±L±M±M±Q±X±d±l±o±p±p±p±t±t±|±}±~±²²²² ² ²²²²%²&²8²N²O²W²Z²b²g²j²m²t²t²w²w²|³ ³*³1³6³7³A³E³N³c³z³|“ “““*“0“<“=“F“H“R“f“q“tµµµ'µ*µ.µPµaµdµeµmµmµnµpµsµsµuµuµxµ~¶¶¶¶¶%¶(¶-¶-¶1¶6¶P¶S¶X¶e¶z¶{·7·H·P·Q·e·p·r·{·øøø'ø2ø3ø7øMø[øeøføløz¹ ¹¹¹¹¹¹!¹6¹8¹C¹E¹G¹O¹Q¹Q¹d¹f¹lŗŗŗ(ŗ0ŗ1ŗ5ŗ8ŗIŗdŗn»<»?»@»F»F»L»L»U»[»^»a»w¼¼¼¼¼¼)¼+¼6¼9¼9¼:¼:¼;¼;¼?¼F¼P¼e¼|½½½ ½ ½ ½½½½½½½½½½ ½+½6½8½O½S½b½g½m¾¾¾¾¾/¾5¾S¾X¾a¾b¾d¾æææææ"æ%æ'æ9æGæIæQæRæ[ækækæpæqæræsæuævæwæwæxæxæyæyæ}ĄĄĄĄĄĄĄĄ!Ą&Ą'Ą(Ą.Ą<Ą<Ą@ĄDĄEĄFĄGĄNĄOĄTĄ\Ą^ĄdĄdĄeĄfĄuĄuĄ|ĮĮĮĮ ĮĮĮĮ+Į>Į@ĮCĮEĮKĮQĮQĮYĮZĮaĮaĮeĮfĮgĮhĮjĮnĮnĮrĮwĮwĀĀ Ā ĀĀĀĀ$Ā'Ā'Ā(Ā(Ā)Ā+Ā+Ā,Ā-Ā-Ā0Ā0Ā0Ā1Ā1Ā2Ā3Ā5ĀUĀVĀoĆĆ3ĆIĆIĆJĆNÄ=Ä>ÄDÄfōY„ØfĀoĆĆCĆIĆcĆpĆpĆpÄÄBÄE/B‚;…b†pˆ&L”U–`–m–n˜7™;žb 2§§jØ©Æ4±±6±Tµ9øE¹$¹E½½.½v¾hĄYĀtĀwĀyĀyĆĆĆIĆiĆyÄ'Ä'ÄBÄDÄF‹k!"%%/4688HSVaccdeeptxxx{}}‚ ‚‚‚!‚$‚-‚0‚:‚=‚>‚^‚n‚o‚p‚r‚uƒƒƒƒƒƒ"ƒ%ƒ*ƒ5ƒ:ƒAƒGƒGƒSƒYƒcƒmƒmƒoƒ}„„„„„ „ „ „ „ „„„;„?„A„H„T„W„`„c„i„i„l„l„o„o„q„q„z… ………………………… …#…'…'…*…*…1…?…n…n…o…o…p…s…t†††!†!†"†"†(†(†)†.†/†6†B†B†B†C†C†C†T†T†U†U†[†_†d†d†f†f†g†g†h†i†n†n†o†t†u†w†w†z†z†{†|†}‡‡‡‡‡‡‡‡‡‡‡‡ ‡&‡,‡,‡L‡T‡U‡s‡w‡xˆ ˆˆˆˆˆˆˆ!ˆ"ˆ#ˆ#ˆ&ˆ)ˆ7ˆ7ˆ9ˆ<ˆ<ˆLˆMˆSˆSˆTˆTˆUˆVˆVˆ[ˆ[ˆ^ˆ^ˆbˆbˆeˆeˆhˆhˆhˆiˆm‰‰ ‰‰‰‰‰‰ ‰1‰2‰6‰>‰>‰D‰L‰P‰S‰{‰|‰ŠŠŠŠŠŠŠv‹YŒ ŒŒŒ%Œ&Œ'Œ'Œ(Œ=ŒQŒYŒ\Œ\ $&&&'+,-.6:BDGGHILMhppqvŽŽŽŽŽŽŽŽ&Ž'Ž>Ž@ŽGŽGŽVŽ[Ž\ŽdŽiŽmŽoŽoŽpŽpŽrŽzŽ|    "2JJKRfprssuvwwy)5??COWXX\_ffoqrrs‘‘‘‘‘‘ ‘'‘/‘A’/’4’4’;’f’l’m’m’n’q’r’r’t““““ ““““““““ “"“"“#“8“9“:“>“@“B“G“G“P“Y“e“i”8”;”=”@”A”C”E”E”F”H”K”N”N”O”O”O”P”Q”Q”R”b”d”h”l”n”n”n”o”o”p”q”q”s•••••• • •!•!•%•%•)•+•,•-•/•Z•\•w•y––8–H–M–N–X–e–e–e–g–g–q–q–u–x—————— — —————!—+—-—3—4—?—K—L—M—M—Q—T—U—V—d—h˜˜#˜#˜%˜%˜&˜(˜(˜+˜+˜+˜.˜0˜1˜1˜8˜9˜a˜m˜m˜n˜v˜v˜z˜|™™L™M™W™[™\™f™h™iššššššššššššššš$š%š'š.š0š2š4š<š=š=š>š>š?š?š?šAšAšBšCšCšDšDšDšFšFšGšGšHšHšIšIšJšNšOšQšQšZš\š]š`š`šbšcšcšnšn #()0559<>BGJJKPTUdghjp~žžžž ž žž"ž$ž)ž>žQž^ž^ž`žxž}ž~žžŸŸŸŸŸŸŸ!Ÿ"Ÿ'Ÿ(Ÿ-Ÿ/Ÿ/Ÿ1Ÿ1Ÿ4Ÿ7Ÿ8Ÿ;Ÿ;Ÿ;Ÿ<Ÿ?        " " # $ $ % - 5 7 8 9 ; ? B J J L M N N O O T T Y Z Z _ e n q v v x { | | | } }”””””””””””””!”#”/”3”3”4”6”:”:”:”;”@”J”K”M”P”Q”R”S”^”e”k”n”o”o”p”t”t”u”u”w”x”y”y”|”}¢¢¢¢¢¢¢ ¢ ¢¢¢¢¢¢¢¢¢¢ ¢ ¢!¢"¢"¢"¢#¢$¢)¢*¢,¢-¢1¢1¢9¢:¢@¢H¢H¢I¢J¢J¢W¢X¢]¢_¢`¢b¢f¢f¢h¢h¢i¢i¢k¢k¢l¢t¢t¢u¢w¢w¢x¢{££££ £ £ ££££9£:£>£>£G£H£J¤¤¤¤¤¤&¤&¤'¤g¤q¤t¤w„_„b„h«««««««««#«%«,«,«,«3«<«?«D«H«M«N«U«U«Y«Z«[«a«b«b«c«e«f«k«p«r«r«r«s«t«v«w«x«z«{«|¬¬¬ ¬ ¬ ¬¬¬¬¬!¬"¬#¬#¬$¬$¬%¬(¬*¬*¬*¬.¬2¬3¬3¬4¬7¬7¬8¬8¬8¬9¬:¬;¬<¬=¬?¬C¬D¬E¬E¬N¬P¬Q¬Q¬R¬R¬S¬S¬T¬T¬U¬`¬`¬a¬c¬g¬i¬j¬j¬l¬x¬z¬z¬{¬{¬|­­­­­­­­­­­­+­,­.­1­V­W­X­Z­_­e­e­k­m­o­q­}­~­~­~®®®®ÆÆÆÆ°p°p°r±±±± ±±±±±±±±±±±±±±±± ±!±!±&±(±+±+±,±,±.±/±0±0±1±4±9±:±;±?±@±A±B±B±C±E±E±F±F±G±G±J±J±K±N±P±P±S±S±T±V±W±W±X±_±`±d±f±j±{±{±|±}±}±~±~±²²²²²²²²² ²!²"²2²4²6²7²8²;²<²F²K²O²Z²[²]²_²b²b²j³³³5³7³E³J³J³i³o³o³y³|³|“ “ “'“-“7“;“<“B“D“H“I“I“J“K“V“X“X“Y“Y“g“m“n“o“p“p“t“wµµµµµµµµ)µ=µ=µ>µ>µDµHµHµJµKµLµOµPµPµTµW¶ ¶ ¶ ¶ ···H·S·S·S·b·døøøøøøøøøøøøøøøø!ø)ø;ø=ø?øEøEøPøQøQøRøRø^øj¹¹¹¹&¹.¹4¹6¹=¹A¹E¹G¹O¹S¹v¹zŗŗŗŗŗŗŗŗŗŗŗ$ŗ%ŗ&ŗ*ŗ-ŗ;ŗDŗPŗSŗTŗ`ŗlŗpŗwŗzŗ~»»!»"»"»t¼¼J¼J¼L¼O¼R¼W¼W¼W¼X¼X¼h¼i¼l¼l¼l¼o¼u½½½½½ ½½½½ ½!½!½&½8½<½@½L½O½o½v½y½{¾¾C¾E¾K¾\¾\¾]¾a¾b¾d¾e¾n¾p¾p¾s¾s¾y¾z¾}¾}æææææ!æ/æ:æBæBæLæLæOæPæQæRæWæ`ædæqæsæsæsæuævæxæ|æ}ĄĄĄĄĄ*Ą0Ą1Ą3Ą3Ą4Ą5Ą5Ą6Ą6Ą7Ą7Ą7Ą8Ą9Ą@ĄAĄCĄHĄHĄIĄKĄLĄLĄMĄNĄNĄOĄOĄSĄTĄUĄUĄVĄVĄYĄ[Ą]Ą^Ą^ĄcĄdĄdĄeĄfĄhĄmĄnĄnĄoĄoĄqĄsĄtĄtĄwĄxĄyĄĮĮĮ Į Į Į ĮĮĮĮĮĮĮĮĮĮ!ĮVĀoĀtĀuĀuĀwĀyĆĆĆĆĆĆĆĆĆĆĆĆ Ć!Ć)Ć*Ć-Ć1Ć3Ć5Ć6Ć7Ć?ĆIĆQĆSĆiĆkĆoĆwĆyĆ}Ć}ĆÄÄ Ä Ä ÄÄÄÄÄÄ3Ä4Ä4Ä6Ä8Ä9Ä<Ä=Ä>Ä?Ä?Ä@ÄAÄCÄDÄDÄFÄJÄVÄ\Ä_ƒĆIĆI$‚L„U„X‹ B™uœ?œ]f{Ÿk”£„[„u¦¦N¦yØU©*Ŗ ¬I­$®lÆ4°°&°D±Tµ%µoµq¼1ĆI…CS`p"[‚‚‚#‚*‚B‚E‚E‚K‚Vƒ ƒƒƒƒ"ƒ#ƒ6ƒIƒm„„„„„ „/„7„^„i„t„v„z……8…;…H…Z…f…i…j…n…p…q…w…{† ††(†)†+†e†f†v†x‡‡‡\‡dˆˆ5ˆ;ˆ@ˆEˆHˆPˆTˆoˆx‰ ‰‰%‰)‰/‰9‰hŠ Š%Š.Š<ŠRŠ{‹‹‹"‹I‹I‹J‹SŒŒ&Œ0Œ1Œ3Œ3Œ8ŒAŒqŒsŒsŒ~6BGGLUWZbvwzŽŽŽ%Ž&Ž0Ž@ŽBŽqŽtŽuŽy#%+ADFGKNk|~ "DW\df|‘‘Q‘^‘e‘l‘{’’ ’’-’W’Z’j’z’}““ “ ““ “3“9“<“R“[“b“k“m“}” ””””6”~••+•?•G•S•p•s•–––T–V–l–y–}—————9—C—L—T—j—k—l˜˜ ˜4˜8˜M˜N˜U˜W˜Z˜b™ ™™1™D™d™m™y™zšššš(š.š8šJšTšgšwš}š~š›››››C›G›O›W›e›tœœ œ+œ,œEœJœ\œ]œz#:NSZhknpžž%ž@žQžuŸŸ Ÿ(ŸCŸTŸlŸwŸ}   7 D c”” ”"”@”W¢¢¢!¢+¢+¢<¢I¢T¢}£ £4£>£F£R¤¤ ¤"¤@¤C¤y„„„'„)„-„<¦¦¦¦¦¦¦)¦-¦4¦7¦=¦Y¦\¦i¦|¦§ §!§-§.§4§=§G§[§h§o§u§u§x§y§}§ØØ Ø Ø ØØØØ(Ø*Ø=Ø?ØAØCØGØGØHØIØKØLØZØcØeØjØlØmØoØqØrØsØtØwØyØ©©©©© ©©©©©© ©!©+©5©6©:©M©N©Y©Z©^©^©g©i©{ŖŖŖŖŖŖ Ŗ#Ŗ$Ŗ*Ŗ4Ŗ@ŖDŖEŖFŖGŖHŖMŖVŖ[Ŗ]Ŗ]ŖaŖfŖjŖpŖrŖr« «&«.«9«p«z«~¬¬¬¬ ¬¬¬"¬,¬-¬9¬<¬K¬\¬s­­­­"­(­6­G­I­K­O­y­}®®)®1®>®G®Z®[®sÆ&Æ(Æ)Æ6Æ8Æ;ÆEÆIÆPÆUÆfÆgÆj°°°°°°°I°R°U°t°w± ±*±5±=±?±D±Q±T±^²²²&²'²*²0²;²@²G²p²y³³+³5³9³@³A³C³R³U³W³l³o³y“&“R“\“c“e“j“nµ/µ0µ:µhµlµwµwµ|¶¶¶¶¶)¶:¶B¶N¶P¶R¶`¶····· · ··M·[·]·l·n·t·xøøøøø%ø,øLøMøhøpøy¹ ¹ ¹ ¹¹¹2ŗŗŗ#ŗ%ŗ%ŗ*ŗ:ŗ>ŗSŗ`ŗw» »»»3»Q»R»V»a»f»i»}¼¼¼¼6¼A¼L¼N¼f¼y½½%½&½B½X½c¾¾¾E¾{ææ0æDæcæjĄĄ1Ą=ĄDĄ\ĄcĄ{Į ĮĮĮAĮKĮSĮUĮlĀ Ā*Ā5ĀTĀvĀzĆĆĆ ĆĆĆĆ Ć/Ć0Ć1Ć2Ć3Ć6ĆAĆDĆHĆKĆOĆRĆRĆSĆYĆZĆ\ĆaĆeĆwÄÄÄ@ÄAÄJÄYÄYÄdÄjÅÅÅÅ&Å7Å8Å>‘g0JKNPR`giilowy|~"##$%&(.29<=?AWY]ehijo‚‚‚‚‚‚‚‚‚‚#‚&‚(‚2‚3‚7‚:‚;‚D‚E‚E‚F‚S‚U‚V‚V‚a‚e‚h‚k‚s‚w‚zƒƒƒ ƒƒƒƒƒ#ƒ0ƒ2ƒ8ƒEƒFƒJƒKƒMƒQƒQƒVƒ^ƒjƒuƒuƒuƒv„„„„„„ „ „ „„„„„„„!„"„&„(„3„6„7„8„L„O„Q„U„W„e„h„l„p„q„v„{„… … … ……………#…%…*…+….…0…0…6…7…<…>…O…P…S…W…Z…Z…\…]…`…e…f…i…k…m…n…p…w…{…}††††††††††-†3†5†:†:†;†=†>†A†E†G†J†K†O†S†T†U†_†d†e†e†i†v†v†z†{†{†|†‡ ‡‡‡‡‡‡‡!‡"‡&‡(‡(‡)‡4‡9‡<‡=‡>‡@‡D‡E‡F‡I‡J‡M‡T‡[‡[‡^‡e‡h‡h‡i‡j‡l‡o‡pˆˆˆˆˆˆ ˆ!ˆ'ˆ)ˆ+ˆ=ˆ=ˆ>ˆ@ˆAˆDˆHˆIˆSˆSˆTˆUˆVˆ`ˆcˆhˆhˆoˆpˆqˆqˆsˆtˆ~‰‰‰‰%‰&‰(‰4‰8‰=‰=‰>‰?‰H‰S‰W‰c‰g‰i‰l‰t‰u‰z‰|ŠŠŠŠ Š ŠŠ%Š+Š/ŠBŠJŠKŠtŠx‹‹‹ ‹ ‹ ‹‹‹‹‹‹‹‹ ‹!‹$‹(‹)‹+‹,‹-‹6‹8‹9‹;‹;‹@‹C‹D‹H‹I‹J‹L‹U‹g‹p‹r‹|ŒŒ+Œ,Œ;ŒEŒkŒqŒqŒrŒsŒtŒtŒvŒwŒ}Œ~   %+/47?DHLVWYZ[\hmvwyz}ŽŽ ŽŽŽŽ!Ž"Ž-Ž[Ž^Ž_Ž_ŽcŽmŽtŽyŽ~Ž ''()++0:@ACEMOSUX[[\\]^_cekmwz~    ,79FST[bhsvx‘‘‘‘‘ ‘‘‘ ‘%‘4‘6‘A‘D‘F‘J‘K‘O‘P‘Q‘T‘V‘W‘X‘\‘_‘d‘e‘e‘f‘k‘m‘q‘s‘s‘t‘u‘x‘{’’’’’ ’ ’ ’’’’’’’ ’$’/’2’5’7’:’>’?’D’F’H’P’X’\’\’_’d’j’k’s’t’z’}’~’~’~““ “ ““““/“8“;“>“D“N“a“c“m“q“y””” ” ””””””””””””””””” ”"”%”(”*”+”,”,”6”8”=”R”S”T”Y”]”n”r”t”t”z”~••• • • •!•$•+•3•9•=•A•D•F•F•L•M•Q•V•V•_•_•`•k•v•y•{–––– –––*–-–5–5–=–A–B–M–N–T–W–Z–\–^–`–b–n–s–s–y–{–}–}————— —————— —%—&—(—3—6—7—=—G—K—P—U—V—Y—f˜˜˜ ˜&˜&˜*˜<˜=˜>˜A˜D˜L˜O˜Q˜S˜S˜T˜V˜X˜X˜Y˜[˜`˜b˜d˜d˜f˜f˜h˜m˜n˜o˜r˜r˜|™™™™™ ™ ™ ™™ ™)™3™A™B™B™D™G™H™S™^™a™d™e™j™n™p™r™r™r™t™u™~ššššš!š!š"š,š4š7š8š9š9š<š?š@š@šAšIšMšNšTšUšXšXšašdšgšhškšpšqšršvšwšxšzšzš}››››››› › ››››››››$›*›+›2›7›7›9›=›@›A›B›C›D›D›G›M›M›X›\›e›h›i›k›s›u›w›y›y›}œœœœœœœœœœœœœ!œ(œ+œ0œ=œ>œAœBœFœHœJœQœRœTœWœXœ\œ_œaœaœdœdœjœkœmœmœsœsœuœxœyœz !-6@AEKfhhippqt{žžž žžžž ž*ž7ž<žCžCžEžLžSžTžTžUžZž\žhžvž~žŸŸŸŸŸŸŸŸŸ!Ÿ*Ÿ*Ÿ0Ÿ1Ÿ1Ÿ8ŸBŸCŸGŸNŸSŸUŸ\Ÿ\Ÿ]ŸbŸcŸcŸmŸsŸuŸ|Ÿ~          " $ ( - / 4 5 7 : H M R ^ i o { }””””” ””””%”&”,”.”1”3”4”F”I”J”R”W”_”c”o”z”|”~”¢¢¢¢¢¢¢¢&¢(¢)¢)¢*¢+¢.¢/¢0¢2¢6¢<¢>¢A¢D¢D¢F¢N¢P¢S¢f¢x¢x¢~£ £££££&£(£(£)£/£/£9£E£H£L£M£P£W£Y£Z£Z£]£_£b£c£d£d£e£k£l£n£o£r£s£t£|£~¤¤¤¤¤#¤+¤+¤-¤-¤3¤7¤:¤>¤>¤A¤D¤I¤N¤P¤R¤T¤U¤V¤W¤Y¤[¤_¤r¤x¤}„„„„ „ „ „„„„„!„%„%„&„(„,„,„3„4„6„<„?„@„E„E„F„H„M„O„R„T„W„Y„h„r„s„v„w„}„}„~¦¦¦¦¦ ¦ ¦¦¦¦¦¦¦¦¦¦¦#¦#¦'¦1¦3¦6¦8¦9¦9¦=¦=¦C¦D¦F¦H¦J¦K¦O¦V¦V¦Y¦Z¦[¦^¦^¦d¦e¦f¦i¦m¦r¦z¦|¦}§§§§§§§§§ §§§§§§§§§§!§&§*§,§-§1§3§5§6§6§=§>§@§A§B§H§L§L§M§O§Q§Q§R§S§S§T§U§V§V§W§Z§[§[§_§a§a§b§c§d§h§h§j§k§k§l§m§n§s§u§w§z§|§}§~ØØØØØØ Ø Ø Ø ØØØØØØØØØØØØØØØ-Ø1Ø4Ø4Ø9Ø>Ø?ØCØDØHØIØJØLØNØQØSØVØWØXØXØ_ØbØeØfØjØlØmØmØnØnØqØrØrØsØsØyØyØzØ}Ø~Ø©©©©©©©© © © ©©©©©©©©©©©©©© © ©!©!©"©"©"©#©'©-©.©/©2©4©6©9©=©B©E©J©K©L©M©T©T©V©W©Z©[©[©\©a©b©c©h©h©m©o©q©r©v©z©{ŖŖŖŖŖŖŖ ŖŖŖŖŖŖŖŖŖŖŖŖŖ!Ŗ#Ŗ$Ŗ%Ŗ)Ŗ*Ŗ+Ŗ/Ŗ3Ŗ3Ŗ7Ŗ8Ŗ:Ŗ:ŖBŖBŖCŖDŖEŖHŖIŖJŖKŖLŖMŖNŖNŖOŖQŖQŖSŖTŖTŖUŖYŖ[Ŗ]Ŗ_Ŗ`ŖaŖaŖaŖcŖeŖgŖiŖjŖjŖkŖnŖoŖpŖpŖpŖqŖqŖrŖsŖuŖxŖyŖzŖ{«««« « «««« «&«)«+«.«1«2«3«6«8«9«B«G«H«H«I«L«L«M«T«W«Y«b«c«c«d«l«q«r«r«s«s«{«}«~¬¬¬¬¬ ¬¬¬¬¬¬¬¬¬#¬$¬$¬*¬/¬1¬2¬6¬8¬<¬D¬H¬K¬[¬_¬d¬o¬r¬r¬s¬|¬}­­­­­­­­$­%­(­,­.­1­2­6­9­<­>­@­D­F­H­P­S­V­X­c­y­|­}­®®®®®® ®®® ®$®)®+®,®-®.®0®5®8®:®;®?®?®@®D®E®F®G®H®J®K®L®M®O®O®P®P®S®[®\®]®b®c®f®i®l®o®r®w®w®y®z®|®~ÆÆÆÆÆÆÆÆ'Æ+Æ1Æ3Æ7Æ9Æ;Æ<ÆBÆHÆIÆJÆKÆNÆPÆUÆVÆYÆ\Æ]Æ]Æ_Æ`ÆgÆkÆl°°°°° °°°°°°°°°°°° °,°/°1°4°5°6°7°8°9°;°<°?°B°E°G°H°N°N°U°W°X°Y°Z°\°]°^°a°f°l°m°n°s°s°v°y°y°|±±±±±A±A±L±M±^±o±p±q±s±s±t±x±y²² ² ²²!²!²$²%²&²'²)²,²/²1²7²=²?²A²A²E²L²M²N²W²c²f²g²p²r²y²z²{²|²³³³³³³ ³³³³ ³&³'³-³/³1³3³6³8³;³@³B³D³G³I³K³M³O³U³X³`³c³d³i³j³k³l³r³}“““““ “*“2“L“W“`“g“n“n“sµµµ µ µ µ µµµ*µ2µ<µ@µKµSµTµ]µaµcµdµfµfµgµjµlµlµnµnµpµsµuµvµwµxµyµ~¶¶¶¶ ¶ ¶¶¶¶¶¶¶¶¶%¶&¶&¶'¶+¶0¶6¶7¶9¶:¶;¶=¶>¶A¶C¶E¶G¶H¶J¶M¶Q¶R¶S¶V¶W¶[¶a¶h¶h¶i¶j¶l¶p¶s¶u¶v¶y¶z¶|¶····· ··· ·7·>·?·@·A·B·L·L·L·Z·g·l·o·q·s·y·{·|øøø ø ø øø#ø-ø0ø2ø:ø:øEøFøKøLøSøUøpø{ø|ø~¹¹¹ ¹>¹K¹Xŗŗŗ#ŗ.ŗ2ŗ:ŗ=ŗDŗIŗMŗNŗQ»»»»»(»)»2»3»7»9»=»L»M»N»O»R»W»]»`»a»c»d»f»g»j»p»r»{»|»}¼¼¼¼¼ ¼&¼,¼5¼<¼Y¼]¼a¼l¼o¼z½½½½!½%½_½`½f½h½i½m½v¾¾¾¾ ¾¾¾¾#¾%¾%¾*¾-¾2¾W¾^¾c¾h¾j¾p¾t¾v¾x¾}¾}ææ ææææææ"æ-æ6æ7æ8æ9æ<æ?æAæBæaædæhæhæjælæmæoæqæwæ{Ą ĄĄĄĄĄĄ Ą&Ą'Ą/Ą3Ą5Ą5Ą5Ą8ĄBĄEĄHĄNĄXĄXĄYĄZĄ\ĄaĄeĄkĄmĄqĄsĄuĄxĄyĄ|ĮĮĮĮĮĮĮ%Į+Į3Į4Į4Į5Į6Į7Į;Į;ĮAĮBĮCĮDĮGĮHĮPĮSĮVĮWĮXĮXĮ[Į^ĮbĮlĮzĮ|Į~Į~ĀĀĀĀĀĀ ĀĀĀ(Ā/Ā1Ā2Ā3Ā4Ā5Ā7Ā8Ā9Ā:Ā=Ā>ĀDĀIĀKĀLĀNĀSĀUĀeĀoĀoĀpĀrĀsĀtĀxĀyĀyĆ ĆĆĆĆĆ"Ć)ĆHĆPĆTĆYĆZĆiÄÄÄÄÄÄ#Ä$Ä'Ä1Ä3Ä7ÄVÄYÄZÄ[Ä_ÄfÄgÄjÄlÄoÄoÄqÄqÄqÄrÄzÄÅÅÅÅ ÅÅÅÅÅÅÅÅ#Å-Å.Å7ÅG‘Y¢hĆHĆod=FGI 2^}‚5ƒ#ƒTƒ~„$„4„C……B…{†d†j†w‡Zˆ‰?‰F‰`‹‹tŒŒR HŽŽŽOŽQac1‘‘J‘n’’’’““6“K“R“Z” ””"”(”F•$•K•[•`•e––2–f–p—˜˜˜'˜6™™6™=ššš7š>š_šp›4›8›9›`œSœ\œ|Xžžž;žKž]žjŸ Ÿ/Ÿ<ŸGŸHŸKŸUŸ O O b k y {”B¢¢(¢w££J£J¤¤!¤M¤N¤P¤S¤[¤d¤}¤~„ „U„q§§§=§F§I§NØ+ØY©a« ««h«|«}­­]® ®9®c®pÆÆ°+°@°F°\±±±P±U±c±{²²²² ²=²Q³"³;³P³TµBµFµO¶/·%·Pøøø"øU¹"¹7ŗV»%¼=¼E¼H¼K¼N¼P½½~¾ ¾¾C¾G¾P¾T¾uæ&æIĄ1ĄNĮĮĮĮ2ĮEĮĀĀĀĀ)Ā0Ā<ĀLĀmĆ;ĆHĆIĆoÄ4ÄJÅ$„ANOPy|  *,2==>VV\^_‚ ‚‚!‚'‚/‚H‚H‚h‚k‚s„„1„5„6„N„^„t……………$…&…&…/…3…y†††(†Y†p‡‡!‡)‡,‡9‡?‡D‡D‡F‡M‡c‡e‡f‡sˆˆ;ˆAˆFˆLˆoˆw‰ ‰8‰S‰]‰b‰d‰i‰mŠ Š#Š(Š-Š=ŠJŠJŠXŠ^Š_Šx‹‹‹ ‹&‹8‹>‹tŒ=ŒMŒSŒ]Œy '7LLhvŽŽ ŽŽŽ'Ž9ŽXŽs  ;=??Nd,-;<‘‘‘‘X‘X‘X‘m’ ’T’T’z’|“+“3“I“J“h“m“z”” ”””#”2”3”>”X”\”f”• ••••&•<•J•V•`•e– ––2–K— — — ——2—Q—f˜6˜F˜M˜O˜R˜u™™™™C™~šš2š7šXšgšm››››N›^›m›xœœœDœEœRœTœWœ]œ]œe$$-OV^ižDžRžRŸŸŸ4Ÿ>ŸKŸXŸ]ŸjŸkŸl    ! ! " - G T c w” ””” ”%”9”;”K”M”N”P”U”^”g”i¢¢ ¢ ¢¢¢5¢;¢]£££&£0£A£s£z£}£¤¤¤¤¤'¤?¤o¤w¤w¤y„„„„„E„J„X„t¦¦¦¦¦%¦0¦`§ §§§/§5§Z§^§c§j§s§ØØ@ØVØ^ØkØk©)©4©6©:©;©D©H©S©^©i©n©©ŖŖŖŖ#Ŗ&Ŗ,ŖAŖJŖYŖZŖbŖeŖiŖw«««"«)«1«4«<«D«e«e«l«x«z¬.¬@¬B¬P¬Z¬s­­5­7­G­R­|® ®®® ®$®,®J®T®p®qÆÆÆÆÆ&Æ-Æ8ÆNÆNÆ`ÆdÆk°°.°:°<°=°C°D°M°N°^°a°i±±±±±L±U±^±s²²²/²=²F²K²Q²S²Z²\³³³!³"³&³7³]³g³j³j³n“““““&“1µµ µµµ@µBµIµKµWµfµkµrµ~¶6¶8¶9¶L¶N¶`¶k¶x·· ····$·m·y·{ø øø-ø6ø>øMøxø|ø~¹¹ ŗŗŗ&ŗ1ŗ:»»»)»H»O»Q»X»n¼¼¼¼5¼G¼\¼}½½%½(½)½0½\½_½a½b¾¾¾¾¾¾"¾6¾<¾M¾kææææææ9æGĄĄĄDĄKĄTĄrĄvĮĮĮ#Į0Į4Į]ĮsĀĀĀ)Ā4Ā:ĀDĆ ĆHĆKĆ]ĆoÄÄrÄ|ÅÅÅÅÅA  ¤lĀĆHĆHĆPÄWÅ7 FCŒ˜˜˜œO^ H¤=Øl·P¹¹Qŗl¼=¾CĮĀqĀwĆĆ ĆHĆJĆTĆYĆ~ĆÄ„e:KSTCX‚‚%‚(‚2‚5‚;‚T‚Y‚k‚l‚o‚v‚w‚wƒƒ*ƒ/ƒ0ƒ?ƒBƒHƒLƒMƒdƒfƒjƒqƒtƒyƒ„„ „#„$„h„}… ………1…K…M…d…f…i…j…w†0†L†M†w‡‡‡ ‡‡‡"‡3‡C‡D‡\‡]‡xˆˆˆ ˆ ˆDˆDˆU‰‰$‰1‰g‰o‰s‰wŠŠ-Š7Š=ŠMŠdŠnŠrŠrŠ}‹‹ ‹‹!‹)‹QŒRŒSŒ\Œw <KY[}ŽŽ!Ž!Ž\ŽbŽqŽvŽzŽ} 67:=Lz !bb‘‘‘#‘&‘3‘B‘Z’’’’’’;’E’P’X’n““ “ “"“+“2“6“J“]””””(”)”*”,”1”9”U”^”r••1•5•>•J•W•_•b•j•n•r––––––6–b–j–p–p–r–|—————A—D—D—E—R—m—q—u—v—x˜˜˜5˜6˜9˜L˜Q˜s˜v˜{™™%™/™\šš š1š\š`šq››› ››››S›T›g›g›j›oœœœœ)œ2œDœDœgœiœn (S[otžžžžž>ž@žBžCžDžNžPž_ž`žaž|ŸŸŸ$Ÿ'Ÿ.Ÿ;ŸDŸUŸVŸ`ŸaŸhŸrŸz    $ . < L R W” ”A”A”E”R”l”n”u¢¢'¢J¢O¢O£££(£6£:£?£L£U£]£a¤¤¤ ¤¤¤¤¤+¤6¤9¤=¤=¤>¤K¤]¤d¤j¤u¤w„ „'„*„A„Y„o¦¦6¦7¦A¦D¦E¦G¦N¦a§§§§'§2§4§;§<§<§?§@ØØ5Ø8Ø9ØTØ]ØaØbØlØpØ}© © ©©'©)©.©R©e©h©u©w©wŖ Ŗ,Ŗ7ŖGŖdŖdŖfŖl« ««««"«,«1«N«Y¬¬¬"¬%¬%¬5¬;¬;¬=¬=¬S¬\¬i¬i¬n­­#®®!®4®9®@®\®mÆÆ9Æ9Æ=Æ=ÆM°°°.°3°<°L°U°[°p±±±±±!±(±D±`±{±²²+²<²<²F²[²b²o²t³³%³'³6³Z³h³i³s³w““ “0“C“H“_“_“p“{µµ&µ6µ]µnµ|¶¶ ¶.¶.¶8¶M¶Y¶^·G·K·o·r·s·v·w·}øø øøøø"ø/ø3øUøføn¹ ¹¹¹¹tŗŗŗ=ŗFŗGŗMŗZŗlŗn» »]»i¼¼¼)¼+¼4¼;¼E¼H¼I¼S¼V¼\¼^¼o¼u½(½M½Z½\½_½`¾(¾6¾<¾=¾Y¾pæ æ æææ>æBæOæ|ĄĄ?Ą`ĄeĄsĮĮ$Į:Į?ĮEĮJĮLĮ[Į[ĮmĮrĮ~Ā ĀĀ!Ā<ĀuĀvĀwĆĆ0ĆHĆTĆ\ĆuĆyÄÄÄ.Ä3Ä4Ä8Ä>ÄIÄLÄmÄoÅ Å Å,Å7‡&01157:=>@CHILNNPRSUWn %'19;EHMORWY\fhrx~‚‚‚‚‚‚‚‚‚‚‚ ‚8‚8‚A‚I‚g‚k‚k‚n‚o‚p‚y‚z‚{ƒƒƒƒƒƒƒ'ƒ-ƒ/ƒ0ƒ3ƒ4ƒ6ƒ7ƒ8ƒ9ƒ>ƒ>ƒ@ƒCƒDƒEƒFƒFƒGƒIƒJƒOƒRƒTƒTƒUƒWƒ`ƒdƒjƒmƒnƒtƒvƒ}ƒ~„„„„ „„„„E„N„Q„k„z„………*…/…B…C…G…K…L…M…R…R…b…f…h…l…t††%†)†0†1†@†_†i†i†j†o†p†q†q†q†s†z‡‡‡‡ ‡ ‡‡%‡1‡3‡4‡E‡L‡R‡W‡w‡z‡|ˆˆˆˆˆˆˆ.ˆ0ˆ1ˆ3ˆ5ˆ=ˆPˆ]ˆ]ˆ]ˆeˆvˆxˆ}‰‰‰‰‰‰!‰$‰&‰>‰SŠŠŠ Š ŠŠŠŠŠŠŠŠŠ1Š1Š4ŠAŠKŠOŠTŠeŠhŠjŠnŠpŠpŠx‹‹T‹uŒŒ ŒŒŒŒŒŒ!Œ1Œ2Œ7Œ:ŒDŒEŒEŒNŒVŒXŒYŒjŒl   8LakpŽŽŽ Ž ŽŽŽŽŽŽ=ŽDŽIŽKŽOŽQŽXŽYŽ`Ža  6VXXbfgmu(7ORRSUWYachkqr‘‘ ‘‘‘#‘,‘.‘2‘3‘7‘?‘B’8’<’>’c’s’s’v““#“:“?“E“K“K“L“L“S“T“Y“Z“Z“[“e“h”E”K”N”S”V”Y”]”`”j”j”p•• ••••$•+•o•o•p•z––––"–(–*–-–0–8–:–<–@–@–A–B–O–Q–V–Y–^–_–`–j–j–p–q–u–{—— ——"—$—9—@—A—C—F—L—Q—Q—R—^—`—j—l—m—r—y˜˜ ˜ ˜ ˜˜˜˜˜˜˜)˜)˜6˜7˜9˜`˜c˜o˜s˜u˜z˜{˜{˜~™™$™-™7™H™T™W™[™^™c™c™e™išš%š&šbšhœœmœ{œ|"##3CGGIIPQbdiružžžžžžžž!ž0ž2ž=žEžKžPžXžXžZžcžižjžnžsŸ$Ÿ'Ÿ.Ÿ2Ÿ5Ÿ7Ÿ@ / 1 3 4 4 ? ? ? @ D F J O b k k s |” ”””””"”6”:”<”=”B”E”S”^”k”w¢ ¢'¢A¢B¢C¢D¢W¢h¢l¢x¢~¢~£ £8£:£:£C£E£F£c¤¤¤¤'¤(¤5„^„e¦E¦F¦n¦u§§§§!§"§/§;§=§H§r§s§u© ©©5©n©r©s©t©v©x©|©|««+«.«4«=«C«I«P«Q«T«Y«Y«a«f«p«u«v¬¬ ¬¬¬¬¬¬¬$¬+¬2¬3¬<¬>¬?¬P¬c¬x­­­­+­M­]­^­`­b­i­r­t­}­}® ®®®-ÆÆ/ÆZ°?°p°y±±±± ±±±±±± ±!±5±9±:±@±J±L±M±M±X±]±c±d±l±|±²²²²²²6²8²F²N²N²a²a²j³6³;³B³E³o³r³r³s³|³}“““““ “ ““““ “ “0“<“=“F“H“R“W“}“~“~µµµµ!µ%µ'µ.µ0µ7µPµX¶¶ ¶P··.·2·H·d·z·{øø'øUøWøe¹ ¹¹¹¹¹¹¹"¹4¹6¹7¹8¹:¹=¹?¹M¹Q¹l¹x¹|ŗŗ ŗŗŗ/ŗ2ŗ@ŗBŗTŗnŗw»»a¼ ¼ ¼¼¼(¼,¼,¼6¼8¼:¼:¼<¼<¼=¼?¼D¼E¼E¼G¼H¼I¼K¼N¼P¼Q¼e¼o¼r¼~½½½ ½ ½ ½½½½½½½+½2½F½x½x½{¾¾¾C¾P¾R¾S¾a¾t¾u¾æ æ æææ&æ&æ'æ1æ2æPæPæQæRæTæ\æ]ĄĄĄ ĄĄĄ&Ą(Ą/Ą;ĄCĄEĄFĄFĄGĄJĄJĄJĄWĄWĄ^ĄeĄeĄsĄvĄxĄ|ĮĮĮĮĮĮĮĮ Į.ĮUĀ@ĀtĀwĀzĆĆ)ĆEĆEĆHĆMĆNĆXĆÄÄFÄJÄJÄdÄkÄxÄ|Ä|ÅÅÅÅ5Å=E7#<‚‚ ‚Sƒ?ƒOƒ\„k…†.†0†Tˆˆˆ.ˆ_ˆkˆm‰L‰oŠL‹‹6‹Z Žx:L‘ ‘_‘c’\’r’|“ “3“Z”%”'•z–8–a— —!˜˜>˜m˜p˜t™™6™:™Tœ œT5gržžž!ž*ž3  J””!”#”S”V¢#¢F¢P¢X¤¤N¤l„„p¦}Ø©©AŖŖ?ŖQ««.¬¬c¬x­R­r­}Æ ÆDÆY°G°L°p±±± ±±± ±(±-±C±X±c±q²²a³>³`“*“8“E¶h··.ø7ø?øWøjŗ ŗN¼8¼G½½½o¾g¾k¾zæææĀĀ$Ā3ĀbĀdĀeĀqĀvĀwĆĆĆĆ ĆĆĆĆĆĆĆ!Ć0Ć1Ć2Ć6Ć8Ć:ĆHĆKĆ]Ć`Ć`ĆcĆdĆiÄÄÄÄ2Ä7Ä=ÄJÄPÄQÄTÄYÄ]ÅE )Y„Ā` )YĀ`r'‚‚‚.ƒ!„ „X…{†A†A†F†r‡‡‡2‡sˆr‰a‰eŠŠ%Š8ŠK‹‹ ‹ ‹‹&‹D‹F‹KŒ Œ;YZq>B‘%‘G‘I‘K‘K’ ’’_“7“8””””-”u• •w––c–z—d—h˜@˜Q˜S™2™:šxœœP+6@U]ežž.ž4žaŸ?ŸVŸ   ¢¢Q£££¤¤#¤(¤<¤E¤[¤[¤x„„„„T„U„¦@¦E¦`¦c§§(§)§:§rØ ØØ Ø&Ø-Ø-ØUØ]Ø`©©©(©J©U©}ŖŖ ŖŖKŖMŖ\Ŗ_ŖcŖhŖoŖyŖzŖzŖ{Ŗ{««?¬ ¬&¬5®®"®#®K®\®rÆ.Æh°°M°S°Y°Y°m°|²c³³*³J³Qµ µ6µ<¶¶¶!¶+¶+¶A¶C¶S···ø ø¹X¹Xŗŗ.ŗ5ŗ8»»D»d»z»~»~¼4½a¾M¾R¾S¾S¾TæææRætĄĄĄĄ!ĄTĄWĮĀ%Ā`ĀhĀhĆĆĆĆĆĆĆ.Ć1Ć[Ä Ä Ä+Ä>ÄRÄeÄzÄŁM %BEy‚(‚/‚c‚hƒ%ƒ2ƒ8ƒ?ƒGƒKƒOƒRƒkƒn„„-„3„E„K„N„^„o… …………%…)…;…B…n…s†††3†E†X†[†i†s‡‡,‡7‡D‡M‡Xˆˆˆ0ˆ@ˆcˆhˆr‰‰4‰SŠŠŠ Šx‹‹2Œ'Œ|ASkŽŽ ŽŽŽ&ŽB~‘?‘F‘^’ ’%•––V–a–f—/—K˜ ˜C˜P˜`˜y™™ ™q™xšgœœt@mž ŸŸB + \ k”I”U”e”r¢¢M£¤ ¤¤¤¤$¤i¤w„-„.„o¦¦;¦]§©j©Ŗ5Ŗ{«%¬ ¬H¬p¬­&­7­G­U®® ư(°7°?°C°L°r±±n²0³³"“““Zµ ¶¶¶Q·køøø,ø0ø=øqøx¹ ŗŗŗŗŗ*ŗ:ŗ;ŗI»»¼¼y½ ½½½X¾¾¾1¾GĄ ĄĮ.ĀBĀ`Ābƒ% %OBEy‚(‚/‚P‚cƒ%ƒ2ƒ8ƒ>ƒGƒJƒOƒRƒkƒn„„-„3„E„N„^„c„k„t„…… …!…)….…6…;…V…s†††/†3†E†X‡‡7‡D‡Z‡~ˆˆˆˆ ˆ ˆ0ˆ@ˆLˆVˆcˆeˆr‰‰‰‰‰(‰4‰?‰FŠŠ‹‹2‹AŒ'Œ|ASŽ Ž Ž0Ž9ŽBŽX 5irz~&A\f‘?‘F‘^’ ’$•–––(–*–5–<–A–V–a–f–u—— —+—/—3—@—C—K—f˜ ˜˜˜%˜*˜8˜C˜P˜`˜l˜y™™ ™I™O™W™[™q™x™ššššš-š0š0šOšYšYšcšgœœ5œDœtœ} !(.5@AISXgmžž ž%žIž^žrŸŸ'Ÿ-Ÿ:Ÿ>ŸB  + > J W \ k” ”%”3”<”I”U”Z”e”r¢¢¢¢¢7¢J¢M¢W¢_¢f¢k¢t£££(£8£P¤ ¤ ¤¤/¤5¤?¤q¤y¤|„-„.„o¦¦;¦]§©j©Ŗ5ŖQŖ{« «««%«1«6«<«A«P«W«Y«a«p«u¬ ¬¬2¬H¬c¬p¬{¬­­­&­.­7­=­G­U­k­y® ® ®®® ÆÆ'°(°-°7°8°>°C°L°u°|°}±±±9±[±n±x²%²/²4²;²E²S²f²l³³³"³3³?³M³n³v“ “““5“R“cµ µµ,µ=µ@µPµW¶¶ ¶¶Q¶h·· ···1·>·A·G·S·]·køøø ø%ø,ø0ø=øFøqøxø¹¹ŗŗŗ(ŗ:ŗ=ŗP»»!»v»z¼¼¼¼(¼5¼?¼E¼J¼[¼`¼y½½½%½X½l½u½{¾¾¾¾¾1¾G¾W¾o¾yææ!æ/æ6æDæQæhæĄ ĄĄĄ*Ą3Ą6ĄIĄKĄVĄ^ĄcĄkĄqĄ{ĮĮ#Į.ĀBĀ`ĀbK %0y‚‚H……/‡D‡I‡Zˆˆˆˆ(ˆ^ˆe‰‰‘&›$›7›?›G›[›c›kœSœeŸHŸ^Ÿs   L”}¢¢ ¢¢9¢<¢I¢`¢u££^£u£{¤¤"¤-¤c„ ¦"©4©<©MŖ«!­$­@­D­F­i® ²}ĄgĮSĀ&Ā5Ā`Ābže %.0011559:@@CCDEEEFIJKLLLMMMMNOPPRST```aabbbbceeggijjkmnoopqqrrsuuuwy|| ((**+,,468::<<<=>CENOW[[[abbhiikkllrry{‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚#‚%‚(‚1‚3‚7‚8‚8‚<‚B‚H‚I‚I‚K‚X‚X‚g‚g‚l‚l‚s‚t‚t‚xƒ ƒ ƒ ƒ ƒ ƒ ƒ ƒƒƒƒƒƒƒƒƒƒƒƒƒƒ ƒ$ƒ-ƒ.ƒ/ƒ/ƒ0ƒ0ƒ1ƒ1ƒ1ƒ2ƒ8ƒ9ƒ?ƒBƒCƒCƒDƒDƒDƒEƒIƒLƒLƒLƒQƒQƒVƒVƒ^ƒ`ƒiƒjƒjƒnƒqƒuƒ„„„„„„„„ „ „„„„„„„„„„„„„!„"„"„"„#„%„%„&„&„-„3„E„E„F„J„J„K„L„Q„R„U„X„X„^„_„f„f„{„}……… … …$…3…5…6…8…;…;…C…K…N…N…O…P…Q…R…R…S…S…V…W…X…[…_…`…`…a…b…b…c…c…e…e…g…h…h…j…l…l…l…l…m…m…m…z† †††††††††††† †!†%†)†*†-†3†4†7†7†7†8†:†:†>†@†A†A†A†B†F†M†S†T†Y†Y†Y†_†_†g†j†k†k†l†q†r†s†s†s†s†t†x†}†~†~†††‡‡‡‡‡‡ ‡ ‡ ‡ ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡!‡!‡!‡%‡(‡)‡)‡*‡3‡4‡7‡9‡=‡=‡=‡=‡>‡?‡@‡@‡@‡A‡D‡E‡G‡G‡I‡L‡P‡R‡T‡]‡_‡_‡a‡e‡f‡f‡g‡i‡i‡j‡j‡s‡w‡~ˆˆˆˆˆˆ&ˆ(ˆ(ˆ*ˆ+ˆ,ˆ.ˆ0ˆ<ˆ@ˆAˆBˆCˆEˆFˆHˆHˆIˆIˆJˆLˆUˆUˆYˆZˆZˆ\ˆ^ˆeˆoˆoˆqˆsˆsˆtˆtˆvˆ{‰‰‰‰‰‰‰ ‰ ‰‰‰‰‰‰‰(‰1‰8‰9‰>‰L‰V‰V‰^‰_‰a‰c‰d‰f‰g‰i‰j‰j‰j‰m‰n‰o‰o‰p‰r‰u‰v‰y‰{Š ŠŠŠ"Š%Š'Š(Š)Š,Š,Š-Š/Š6Š7Š8Š;Š;Š<Š>Š@ŠDŠGŠHŠHŠJŠKŠQŠRŠTŠTŠ\ŠeŠkŠnŠpŠsŠ|‹‹‹‹‹‹ ‹ ‹ ‹‹‹‹‹‹‹‹‹‹‹ ‹%‹%‹&‹'‹+‹1‹3‹3‹4‹8‹:‹:‹;‹<‹@‹B‹B‹C‹H‹I‹I‹J‹Q‹S‹T‹X‹Y‹f‹g‹k‹p‹r‹z‹z‹}ŒŒ Œ ŒŒŒŒŒŒ!Œ!Œ"Œ"Œ(Œ,Œ3Œ4Œ4Œ4Œ4Œ5Œ7Œ8Œ:Œ:Œ;Œ=ŒAŒBŒDŒDŒEŒNŒNŒQŒSŒSŒTŒ^ŒjŒlŒoŒqŒqŒsŒuŒvŒwŒxŒyŒ{Œ|Œ} !!!!.688?AAHTZ\\]]aabdddhvvŽŽŽŽŽ"Ž"Ž&Ž*Ž+Ž,Ž-ŽSŽSŽYŽZŽ[Ž[Ž]ŽsŽvŽ{Ž}Ž}   &&'()*..12456;=?@BDDIILPPRSXYYZ\^ccdgyzz{    #'+-5:;;>FLRW\cqqtuux}‘‘‘‘‘‘ ‘‘‘‘‘$‘&‘,‘.‘3‘4‘8‘9‘9‘:‘;‘<‘<‘A‘D‘F‘G‘I‘I‘L‘P‘P‘P‘U‘V‘V‘W‘Y‘\‘`‘b‘b‘b‘c‘c‘d‘e‘e‘f‘f‘j‘k‘t‘t‘u‘u‘v‘v‘w‘x‘x‘y‘y‘y‘z‘z‘{’’’’’ ’ ’ ’’’’’’’’’’’’’’’$’,’-’-’.’.’7’>’?’?’A’G’H’K’L’L’O’O’P’Q’T’U’^’^’^’_’a’a’i’i’r’|’}“““““ “““““““$“&“)“,“/“0“0“5“<“<“D“G“L“M“N“P“T“[“\“a“a“c“e“m“p“p“s“y“z“z“z“{“”””””””” ” ” ” ” ”””””””"”&”*”+”2”3”4”9”K”N”P”P”R”V”X”\”\”`”f”u”w”x”y”z•• • • ••••••••'•)•/•<•=•C•D•L•L•L•M•M•N•U•V•[•[•^•_•a•a•b•e•g•r•v•}•}•}•~•–––––––––– – –––––––:–<–C–K–M–N–R–X–Y–_–i–j–l–m–n–n–o–t–x–z–|——— — ———————(—)—/—3—8—C—D—D—E—F—G—H—M—O—P—P—U—^—g—g—h—k—m—m—p—q—r—r—v—y—y—z—{˜˜˜˜˜˜˜ ˜'˜)˜+˜,˜.˜/˜/˜0˜0˜9˜<˜A˜A˜C˜D˜E˜F˜L˜L˜M˜O˜R˜S˜U˜V˜V˜V˜W˜X˜Y˜Y˜Z˜[˜\˜\˜\˜c˜f˜h˜i˜i˜l˜n˜q˜t˜t˜v˜{˜|˜|™™™™™™ ™ ™ ™ ™™™™™™™™™™™™$™$™%™(™)™+™-™1™3™8™=™A™A™B™C™C™C™D™E™G™K™K™c™d™e™h™i™j™j™k™n™p™p™q™r™s™t™t™u™x™x™yššššššššššššššš š!š!š"š"š#š(š,š.š4š<š@š@šFšIšMšUš[šbšfšišršsš|š}š}šš››››››››› › › › › › › ››››››››››››››› › › ›#›$›%›%›&›&›(›*›*›*›+›+›,›-›-›.›.›/›2›7›8›9›:›>›?›@›A›B›B›C›C›D›G›G›H›J›Q›Q›[›[›`›`›c›f›g›k›l›o›s›w›y›z›z›}›}›~œœœ œœœœœœœ"œ#œ&œ(œ*œ*œ+œ/œ/œ2œ3œ7œ:œ=œ>œ>œ>œ?œ?œ@œAœBœCœDœFœHœIœIœLœOœOœQœSœXœXœYœ]œ`œaœaœdœeœkœmœoœpœpœsœtœvœxœxœ|œ}œ} #%6@EJOYY\biooquxžžžžžžžž$ž(ž)ž,ž1ž2ž3ž9ž;ž;ž;ž<ž=ž=ž@ž@žFžPžQžSžSžTžTžXžXžXžYžZžZž_ždžfžgžjžkžnžpžržužuž}ŸŸŸŸŸŸ ŸŸŸŸŸŸŸŸŸŸ1Ÿ4Ÿ5Ÿ7Ÿ8Ÿ>Ÿ?ŸBŸBŸCŸCŸDŸGŸHŸHŸJŸJŸKŸKŸKŸLŸLŸNŸOŸSŸVŸXŸZŸZŸ]Ÿ`ŸdŸdŸgŸhŸhŸkŸnŸoŸpŸpŸrŸsŸvŸyŸ                    ! # $ % % & - . 2 4 7 8 ; ; B D G K M N R R S \ \ ^ h l l m p q r s t t y” ” ” ”””””””"”&”&”'”0”9”;”<”<”>”B”C”F”F”J”J”V”W”^”`”b”f”g”l”m”m”s”v”x”z¢¢¢ ¢ ¢¢¢¢¢¢¢¢&¢'¢(¢,¢-¢-¢.¢.¢2¢3¢3¢3¢9¢<¢=¢>¢B¢C¢E¢G¢I¢M¢N¢O¢O¢Q¢R¢U¢X¢]¢g¢t¢{¢}¢££££££££'£'£)£)£.£/£0£1£1£1£5£6£6£8£<£A£C£C£E£E£E£F£G£M£N£P£P£Q£T£U£V£X£X£X£Y£Z£^£^£_£`£c£c£f£g£i£k£k£l£m£m£o£s£u£u£u£x£z£{£}¤¤¤¤¤¤¤¤¤¤¤¤!¤"¤"¤#¤&¤'¤(¤(¤+¤+¤,¤,¤,¤,¤-¤.¤2¤3¤5¤6¤6¤7¤9¤<¤=¤=¤@¤B¤C¤D¤H¤I¤M¤N¤O¤O¤Q¤S¤X¤X¤Y¤[¤\¤\¤]¤]¤^¤_¤`¤a¤a¤a¤b¤b¤c¤i¤m¤o¤r¤s¤s¤t¤x¤|¤|¤}¤~„„„„„„„„„„ „ „ „ „ „ „ „„„„„„„„„ „ „!„"„"„%„%„&„(„)„0„1„2„3„4„5„6„7„7„>„>„@„A„C„F„G„G„I„I„I„J„K„L„M„M„N„N„P„P„R„U„V„W„W„X„X„[„\„_„i„o„r„s„u„u„v„v„x„x„{„~„¦¦¦¦¦¦ ¦ ¦ ¦ ¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦!¦!¦!¦"¦"¦#¦#¦&¦&¦'¦(¦)¦,¦-¦-¦1¦2¦2¦3¦3¦4¦5¦6¦7¦7¦7¦:¦;¦=¦=¦=¦>¦?¦@¦A¦C¦C¦C¦D¦G¦H¦I¦J¦K¦N¦P¦P¦Q¦Q¦S¦T¦T¦V¦W¦Y¦Y¦\¦]¦]¦_¦a¦i¦i¦i¦j¦j¦j¦o¦p¦r¦s¦s¦s¦u¦{¦{¦~¦¦§§§§§§§§§§§§§§§ § § § § § § §§§§§§§§§§§§%§&§'§(§(§)§)§)§*§*§+§,§-§-§.§/§0§0§0§1§1§2§2§3§5§5§6§7§9§<§=§>§@§A§B§B§C§C§D§D§I§I§L§N§N§O§R§R§S§T§X§^§b§d§e§f§f§g§i§i§k§k§l§m§p§p§p§q§q§r§r§t§v§v§w§x§x§y§{§|§ØØØØØØ Ø Ø Ø ØØØØØØØØØØØØØØØØØØØØØØØØØØ Ø!Ø"Ø#Ø#Ø$Ø$Ø$Ø%Ø(Ø)Ø)Ø)Ø)Ø*Ø*Ø+Ø,Ø-Ø.Ø/Ø/Ø/Ø2Ø2Ø3Ø3Ø4Ø4Ø5Ø5Ø5Ø6Ø7Ø8Ø<ØBØCØEØIØJØKØKØOØOØQØRØRØRØSØTØUØUØWØXØ[Ø\Ø\Ø]Ø]Ø^Ø_Ø`ØaØaØbØcØdØdØdØgØgØhØiØiØkØkØlØmØoØoØoØsØtØvØxØzØzØ{Ø}Ø©©© © © © © © ©©©©©©©©©©©©©©©#©)©*©*©,©-©-©/©1©3©5©6©7©:©;©<©<©>©>©?©B©B©C©I©J©J©L©M©N©O©O©U©V©V©Z©[©b©c©e©j©l©o©q©r©s©u©v©w©x©x©y©z©{©ŖŖŖŖŖŖŖ ŖŖŖŖŖŖŖŖŖŖ Ŗ!Ŗ!Ŗ"Ŗ"Ŗ#Ŗ#Ŗ%Ŗ&Ŗ'Ŗ'Ŗ'Ŗ,Ŗ-Ŗ.Ŗ.Ŗ.Ŗ/Ŗ5Ŗ6Ŗ9Ŗ:Ŗ>Ŗ>Ŗ?ŖAŖBŖCŖCŖDŖGŖGŖJŖJŖKŖNŖNŖNŖOŖQŖSŖWŖWŖXŖXŖZŖ\Ŗ]Ŗ^ŖbŖcŖdŖdŖgŖgŖhŖiŖjŖnŖpŖsŖxŖxŖ}««««« « « «««&«&«)«)«*«,«2«3«6«7«8«>«?«?«D«I«K«L«L«Q«[«_«i«i«i«l«n«s«u«v«z«z«z«{«}¬¬¬¬¬¬¬¬¬¬¬¬¬ ¬"¬,¬/¬2¬5¬7¬9¬B¬D¬H¬N¬N¬O¬Q¬S¬S¬X¬Y¬Z¬[¬[¬[¬\¬\¬`¬n¬p¬r¬s¬v­­­­­­­­­­­­­­­­­­ ­ ­"­'­'­(­)­+­.­1­2­2­4­4­5­5­8­9­:­:­;­;­>­>­?­@­@­G­K­K­L­N­N­P­U­X­Y­]­^­^­^­_­b­b­c­r­t­v­|­­­®®®®®®®®® ® ®®® ®"®"®#®$®$®&®&®,®,®-®-®-®0®1®2®3®4®4®5®5®7®7®8®8®8®9®:®;®;®>®>®>®@®@®@®A®A®E®E®E®F®F®G®H®I®I®I®J®K®M®N®N®O®P®S®S®T®T®T®U®U®U®Y®]®^®^®a®a®d®f®f®f®h®n®n®p®q®r®x®x®y®y®y®y®z®|®}®}ÆÆÆÆÆÆÆÆÆÆÆÆ Æ&Æ'Æ+Æ+Æ2Æ2Æ2Æ3Æ6Æ6Æ8Æ9Æ:Æ;Æ<Æ=Æ=Æ@ÆAÆAÆBÆBÆCÆEÆHÆJÆLÆMÆOÆUÆVÆWÆ`ÆdÆdÆeÆfÆfÆiÆiÆiÆj°°°°°°°°°° ° °°°°°°°°°°°°°°°° °'°,°,°/°0°1°2°6°6°:°<°?°I°L°M°M°N°R°S°V°W°W°X°a°d°f°l°t°v°v°|°}±±±±±±±±±±±-±1±5±6±7±7±;±A±D±G±H±H±H±L±Q±S±U±U±V±]±]±^±d±n±p±q±s±}±~²²² ² ² ² ²²²²² ²!²%²&²'²)²*²*²+²,²,²,²-²/²1²<²=²?²?²C²F²F²T²U²\²_²_²b²d²f²f²g²l²l²m²m²m²n²o²o²s²s²t²t²u²u²v²y²{²|²|³³³³³³³ ³ ³ ³ ³³³³&³'³+³0³6³7³8³9³>³H³I³M³N³O³Y³]³^³c³i³k³n³o³y³}“ “ “#“#“'“*“-“1“9“@“B“K“L“`“m“{µµµ µ µ µ µ µ µ µ µµµµµµµµ&µ'µ'µ'µ)µ.µ2µ3µ=µDµGµJµLµOµXµZµ[µ]µ_µaµbµdµdµfµkµqµrµrµwµwµyµ}µ}µ~µµ¶¶¶¶ ¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶ ¶!¶$¶$¶%¶&¶&¶(¶(¶(¶(¶+¶+¶+¶,¶,¶-¶0¶1¶6¶7¶7¶8¶9¶:¶;¶=¶=¶=¶>¶>¶A¶B¶D¶D¶G¶H¶M¶N¶Q¶S¶V¶V¶Y¶Z¶Z¶Z¶[¶\¶]¶`¶`¶a¶a¶a¶b¶e¶i¶i¶j¶j¶k¶k¶l¶m¶p¶s¶u¶u¶v¶w¶w¶x¶x¶y¶z¶|¶}¶~···· · · ········!·#·$·(·*·2·5·:·>·A·D·E·H·K·M·M·Z·Z·]·^·^·^·_·g·h·h·h·k·k·m·p·r·v·w·x·x·yøøø ø ø ø øøøøøø!ø)ø-ø0ø2ø3ø3ø4ø4ø4ø8ø=øCøFøIøKøKøMøNøUøVøZø`øeøføpøpøqøxøyø{ø{ø{ø|ø|ø}ø~¹¹¹¹¹¹¹ ¹¹¹¹¹¹¹¹¹"¹*¹,¹.¹7¹:¹:¹;¹=¹>¹>¹E¹G¹`¹b¹d¹d¹t¹xŗŗ ŗ ŗŗŗ#ŗ$ŗ*ŗ/ŗ2ŗ5ŗ:ŗMŗQŗZŗZŗbŗhŗwŗz»»»»»»»»»»»»»*»+»+»2»2»2»4»5»6»6»7»8»9»=»=»>»?»?»@»A»A»B»B»C»D»D»D»E»E»I»J»Q»R»S»T»U»V»W»[»\»^»_»_»`»b»c»e»i»i»j»j»j»k»k»l»n»n»o»p»p»q»q»v»v»z»z»{»{»{»|»|»~»~¼¼¼ ¼ ¼ ¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼ ¼ ¼!¼(¼+¼,¼.¼0¼4¼4¼9¼:¼=¼D¼D¼D¼E¼G¼K¼O¼O¼Q¼R¼S¼U¼U¼V¼X¼[¼[¼`¼a¼b¼b¼e¼f¼h¼i¼l¼r¼u¼w¼w¼w¼z¼z¼~½½ ½½½½½½#½#½$½$½%½(½+½0½O½Q½Z½Z½[½`½`½a½c½c½c½g½h½h½l½o½r½t½x¾¾¾¾¾¾¾¾¾¾¾¾¾¾ ¾"¾"¾#¾#¾#¾%¾%¾&¾(¾)¾,¾,¾.¾1¾2¾2¾5¾6¾8¾9¾9¾<¾M¾O¾P¾S¾j¾n¾n¾q¾y¾|æææææ æ æ ææææææææææææ"æ#æ%æ'æ)æ+æ-æ.æ/æ/æ1æ3æ4æ6æ6æ7æ7æ8æ8æBæGæIæMæSæSæXæ\æaæaæaæcæeæhæiækætæwĄĄĄĄ Ą ĄĄĄĄĄĄĄĄĄ!Ą"Ą&Ą.Ą/Ą/Ą1Ą2Ą7Ą:Ą<Ą<Ą?Ą?ĄAĄDĄDĄEĄEĄHĄIĄMĄNĄOĄQĄSĄSĄaĄbĄcĄeĄeĄkĄmĄqĄsĄtĄuĄ|ĮĮĮĮĮĮĮĮ Į!Į$Į.Į1Į1Į2Į;Į;Į<Į?ĮCĮDĮDĮHĮHĮHĮMĮOĮPĮPĮRĮRĮUĮVĮWĮYĮYĮ[ĮaĮdĮeĮgĮhĮiĮkĮlĮmĮvĮwĮyĮyĮ|Į|Į|ĮĀĀĀĀĀĀĀĀĀĀĀĀ Ā ĀĀĀĀĀĀĀĀĀĀ!Ā"Ā&Ā/Ā1Ā2Ā2Ā5Ā5Ā7Ā8Ā9Ā:Ā;Ā;Ā<Ā<Ā@Ā@ĀBĀGĀGĀGĀKĀKĀNĀNĀNĀOĀQĀRĀSĀUĀ`ĀbĀjĀjĀmĀnĀoĀqĀsĀuĀvĀ{ĆĆĆĆĆĆĆĆĆĆĆĆĆĆ!Ć%Ć%Ć&Ć'Ć'Ć(Ć(Ć)Ć)Ć*Ć,Ć-Ć/Ć0Ć1Ć1Ć2Ć5Ć5Ć7Ć8Ć8Ć;Ć<Ć<ĆAĆBĆCĆDĆHĆJĆJĆNĆOĆOĆPĆRĆRĆSĆTĆTĆTĆYĆYĆ[Ć\Ć\Ć]Ć]Ć_ĆeĆfĆfĆmĆnĆoĆqĆrĆ}Ć~Ć~ĆÄÄÄÄÄÄÄ Ä ÄÄÄÄÄÄÄÄ%Ä'Ä.Ä/Ä0Ä0Ä6Ä6Ä9Ä>Ä?Ä?Ä@Ä@ÄAÄBÄCÄCÄEÄEÄGÄIÄOÄPÄQÄQÄRÄSÄSÄTÄVÄVÄWÄYÄ\ÄbÄdÄeÄgÄjÄlÄmÄpÄrÄuÄxÄyÄyÄzÄ{Ä}Ä~ÅÅÅÅÅÅÅÅÅÅ Å$Å*Å,Å5Å5Å<ÅAÅF‘z %0255@@CCDEEEFIKLLLMMMQQ`abceeghijkllmmnoqrsuvvw}!$%((*+--06:;<>>MSWXdk}‚‚‚‚ ‚*‚1‚4‚8‚<‚D‚F‚H‚J‚M‚P‚T‚h‚r‚s‚t‚u‚x‚y‚{ƒƒ ƒ ƒ ƒƒƒƒƒƒƒƒƒ.ƒ/ƒ0ƒ1ƒ1ƒ2ƒ4ƒ6ƒ9ƒ;ƒ<ƒ=ƒ>ƒ?ƒBƒCƒDƒDƒHƒIƒTƒUƒVƒVƒ[ƒ\ƒ\ƒ`ƒaƒgƒhƒiƒkƒoƒrƒuƒyƒ~„„„„„ „ „ „„„„„„"„$„%„&„'„-„5„P„U„_„_„e„e„g„k„q„r„u………… …9…;…<…C…J…K…K…M…M…N…O…Q…R…R…R…S…[…[…_…`…b…c…f…g…h…h…l…m††††††††<†>†@†@†A†B†J†K†K†P†Y†i†j†k†l†m†n†q†r†x†z†}‡‡‡‡‡ ‡‡‡‡‡‡‡‡!‡)‡2‡=‡A‡C‡E‡E‡G‡J‡M‡Z‡\‡_‡_‡b‡e‡f‡g‡i‡n‡n‡o‡p‡q‡v‡w‡~ˆˆ"ˆ#ˆ%ˆ%ˆ&ˆ<ˆDˆEˆIˆIˆPˆUˆZˆ[ˆqˆqˆyˆ{‰‰‰‰F‰W‰c‰d‰f‰f‰j‰k‰m‰n‰o‰o‰p‰s‰t‰vŠŠ Š ŠŠ#Š'Š1Š7Š;Š=ŠAŠDŠGŠkŠqŠ|‹‹‹‹‹ ‹ ‹ ‹‹‹‹‹!‹$‹%‹'‹'‹+‹,‹-‹1‹6‹;‹B‹B‹C‹C‹D‹G‹K‹K‹L‹O‹P‹S‹U‹s‹z‹{ŒŒŒ!Œ!Œ4Œ8Œ:ŒCŒDŒEŒjŒjŒkŒkŒsŒuŒvŒwŒzŒ|!!"/0:<=ATVWYZ]]accdderŽ ŽŽŽŽŽ Ž"Ž"Ž+Ž,Ž,Ž=ŽMŽSŽTŽZŽcŽtŽuŽxŽxŽyŽ{Ž~Ž  ),.15;<=CEFGHILRSUYZ\]^ciy   "(79:;>DETcqtuvy|~‘‘‘‘$‘&‘+‘,‘.‘/‘8‘:‘:‘@‘F‘G‘I‘J‘J‘M‘N‘O‘S‘V‘W‘\‘]‘b‘d‘d‘d‘f‘g‘k‘o‘p‘t‘w‘x‘y‘z‘{‘’’’’’ ’’’’’’’’ ’-’4’G’G’H’L’O’Q’U’V’V’\’]’^’^’_’d’j’q’r’t’z’{’~“““““““!“"“#“)“,“4“B“H“M“S“T“Z“[“\“k“t“|“”””””””””&”'”+”+”0”1”3”4”6”Z”^”f”h”w”x”y”}•• ••)•)•*•>•A•D•M•M•^•a•c•e•r•}–– –––1–2–5–A–B–C–C–D–M–N–Q–S–U–Y–_–_–e–i–j–l–r–t–z–{—————"—$—&—(—/—<—H—P—U—a—g—h—k—m—q—q—r—r—y—{—˜˜˜˜˜)˜+˜1˜A˜B˜B˜N˜P˜W˜\˜\˜f˜i˜q˜r˜s˜t˜t™™™™™™™ ™ ™™™™™™™™!™$™$™)™-™1™2™6™:™A™C™G™Z™`™c™e™j™s™y™{™~ššššššš%š&š'š(š-š@šAšDšEšFšGšTšZšdšdšešišr›››››››› › › › ›››››››› ›!›#›(›-›/›3›8›:›B›C›E›G›H›K›M›N›R›R›V›[›[›g›h›l›w›{›|œœœœ œœœœœœ"œ%œ&œ/œ8œ9œ=œ>œAœJœLœOœUœXœ]œlœnœoœpœpœuœvœyœzœz%1EK]džž žžž)ž-ž3ž5ž6ž7ž8ž9ž:ž;ž=ž>ž@žDžFžLžMžQžUžXžXžZž]ž_ž`žcžežfžgžjžuŸŸŸŸŸŸ Ÿ Ÿ!Ÿ#Ÿ5Ÿ>ŸIŸIŸJŸJŸKŸMŸUŸWŸWŸYŸZŸeŸgŸgŸiŸkŸoŸpŸpŸrŸvŸ                   ! % & , 8 : : ; < D E F G c e l l o r s t u | ~ ”””” ”””””””%”&”'”/”/”0”0”:”;”=”F”I”P”W”X”^”b”f”g”o”r”s”z”|¢¢¢¢¢¢¢ ¢#¢(¢(¢,¢-¢.¢1¢2¢3¢3¢6¢7¢8¢>¢>¢D¢Q¢R¢S¢U¢`¢o¢}¢£ ££££££ £'£)£*£+£0£1£6£8£A£B£F£G£L£R£V£V£c£c£i£n£q£r£t£z¤¤¤¤ ¤¤¤¤¤¤¤¤"¤(¤,¤-¤.¤/¤2¤7¤7¤=¤E¤G¤H¤K¤Q¤T¤\¤]¤a¤g¤o¤t¤y¤|„„„„ „ „„„„„ „!„!„"„(„2„7„7„8„9„=„?„E„E„E„F„G„G„G„G„I„I„K„L„L„N„N„O„P„Q„Q„Q„V„W„o„r„t„w„w„x„}„¦¦¦¦ ¦ ¦ ¦¦¦¦¦¦¦¦¦¦¦!¦!¦"¦&¦(¦,¦3¦4¦5¦6¦7¦8¦9¦;¦;¦<¦=¦>¦>¦>¦?¦@¦C¦G¦G¦H¦I¦K¦O¦Q¦Q¦T¦T¦T¦U¦W¦Y¦Z¦\¦\¦]¦`¦`¦a¦c¦e¦i¦j¦o¦p¦q¦r¦s¦s¦u¦x¦y¦y¦z¦z¦{¦~¦§§§§§§§ § §§§§§§§§§§§!§#§%§(§)§)§*§*§-§0§0§1§5§6§7§9§:§:§<§<§>§@§B§C§D§E§F§F§G§L§N§R§T§U§V§V§V§W§W§[§^§`§b§d§e§f§i§k§l§l§n§p§r§t§u§v§v§x§z§{§}§~ØØØØØØ Ø Ø Ø ØØØØØØØØØØØØØØØ Ø!Ø#Ø$Ø(Ø)Ø)Ø)Ø*Ø*Ø.Ø/Ø/Ø0Ø0Ø2Ø3Ø3Ø8Ø8Ø9Ø<Ø<Ø>Ø?ØCØDØEØEØFØGØJØKØKØOØOØRØRØSØTØUØXØYØ]Ø_ØaØcØdØdØgØgØhØiØjØkØlØlØoØpØqØsØtØuØvØvØwØxØzØ{Ø~©© © © © © ©©©©©©©©©©©©©©© ©"©(©*©+©-©-©1©3©5©6©9©=©>©C©E©I©K©K©S©V©V©Z©[©a©a©b©c©f©l©m©o©p©r©r©w©x©y©zŖŖŖŖŖŖŖŖ ŖŖŖŖŖŖŖ Ŗ!Ŗ!Ŗ"Ŗ#Ŗ'Ŗ(Ŗ,Ŗ.Ŗ0Ŗ3Ŗ4Ŗ5Ŗ6Ŗ:Ŗ:Ŗ>ŖAŖCŖGŖJŖJŖLŖLŖTŖUŖXŖZŖ^Ŗ^Ŗ_Ŗ`Ŗ`ŖcŖdŖgŖgŖiŖiŖjŖkŖkŖnŖpŖtŖxŖyŖ}«««« « « « «««*«9«?«D«R«Y«_«b«c«d«g«i«i«j«n«u«v«x«~¬¬¬ ¬ ¬¬¬¬ ¬!¬!¬!¬+¬/¬9¬=¬?¬@¬D¬D¬N¬N¬X¬[¬\¬]¬n¬o¬p¬q¬t¬­­­­­­)­4­;­;­A­G­L­N­O­P­V­W­X­X­Y­r­t­v­y­z®®®®®®!®#®&®(®0®:®G®H®I®I®T®V®Y®Z®Z®d®n®q®x®yÆÆÆ&Æ.Æ.Æ/Æ6Æ8Æ9ÆAÆBÆDÆEÆJÆJÆMÆNÆOÆPÆTÆZÆ]Æ]ÆeÆgÆgÆiÆl°°°°°° °°°°°°°°!°!°#°,°,°-°/°0°1°1°3°:°?°I°S°T°T°V°f°j°p°s°t°v°y±±±±±±±±±&±*±-±1±6±@±H±I±L±S±U±V±X±d±n±o±u±x² ² ² ²² ²+²+²,²-²1²8²<²@²A²F²T²l²m²s³³³³³$³&³'³,³-³0³3³7³?³B³B³I³J³N³O³O³R³W³Y³Z³_³o““““““#“C“H“I“J“`“eµµ µ µ µµµµµ&µ'µ'µ(µSµ[µ_µbµdµeµkµlµvµ}¶¶¶¶¶¶¶ ¶!¶!¶(¶+¶+¶=¶C¶H¶Q¶S¶U¶V¶Z¶[¶\¶]¶]¶`¶a¶b¶b¶j¶k¶r¶x¶}¶~····· · ··!·#·%·1·@·@·D·D·]·^·h·h·m·n·p·w·x·y·}·~·~ø ø ø øøøø,ø4ø4ø5ø5ø=øMøRømøpøyøzø{ø|¹¹¹¹¹¹¹¹¹!¹*¹,¹.¹0¹0¹2¹:¹;¹=¹G¹I¹d¹j¹xŗŗŗ ŗŗŗŗŗ0ŗ0ŗ2ŗZŗz»»»»»(»)»+»,»2»3»4»<»=»@»A»J»N»O»T»U»V»V»W»\»^»_»`»e»g»g»k»l»n»n»o»v»{»|»}»~»¼¼¼¼¼ ¼ ¼¼¼¼ ¼ ¼%¼0¼4¼:¼;¼@¼A¼P¼Q¼[¼b¼d¼e¼h¼r¼u¼w¼y¼}½½½½½½#½:½F½L½Y½Z½]½c½l½o½v½x½|¾¾¾ ¾ ¾¾¾¾#¾(¾,¾,¾-¾2¾8¾=¾Q¾T¾W¾^¾e¾f¾n¾o¾q¾t¾v¾{¾|¾~¾ææ æ ææææææ&æ,æ1æ1æ3æ4æ8æ>æBæDæDæGæIæUæWæ\æ\æiælæoætæuæ{ĄĄĄĄĄ ĄĄĄĄ Ą"Ą(Ą*Ą/Ą0Ą1Ą7Ą8Ą<Ą<Ą>ĄIĄIĄJĄLĄOĄSĄXĄZĄ]ĄaĄbĄeĄhĄyĮĮĮĮ.Į0Į1Į<Į?ĮCĮDĮGĮHĮIĮJĮMĮQĮRĮVĮVĮ^ĮaĮbĮbĮhĮiĮmĮvĮyĮyĮ}ĀĀĀĀĀĀĀĀ!Ā"Ā&Ā(Ā,Ā8Ā<Ā@ĀDĀGĀKĀKĀRĀRĀUĀ`Ā`ĀbĀbĀeĀqĀqĀvĀxĆĆĆĆ ĆĆĆĆĆĆĆĆĆ Ć!Ć&Ć-Ć.Ć/Ć1Ć5Ć7Ć8Ć8Ć<ĆCĆHĆJĆOĆSĆTĆYĆ]Ć]Ć`ĆdĆfĆlĆpĆpĆqĆyĆ}Ć}Ć~ÄÄ Ä Ä ÄÄÄÄÄÄÄÄÄÄÄ.Ä/Ä0Ä5Ä5Ä9Ä9Ä<Ä=Ä>ÄBÄEÄIÄKÄLÄNÄOÄOÄQÄSÄTÄWÄXÄZÄ\Ä]ÄbÄdÄeÄgÄgÄgÄhÄyÄzÅÅÅÅÅÅ Å$Å)Å-Å5Å6Å6Å8Å<  ĀbĀvĀwĆHĆK]Ā`ĀbĀfĀrĀsĀtĆĆĆĆ Ć Ć ĆĆĆĆĆĆ!Ć"Ć%Ć'Ć,Ć.Ć/Ć0Ć3Ć;Ć?ĆBĆCĆDĆEĆJĆKĆMĆRĆUĆXĆ\Ć_ĆaĆgĆlĆnĆnĆrĆvĆzĆ~ÄÄÄÄÄ ÄÄÄÄÄÄ#Ä%Ä&Ä0Ä1Ä2ÄXÄZÄ]Ä_ÄbÄdÄkÄlÄnÄoÄpÄuÄxÄ}ÅÅÅ,Å2Å5Å8Å;ÅCÅEÅFX‹Ā`ĀbĀrĀsĀsĆĆĆĆĆ ĆĆĆĆĆĆ Ć"Ć%Ć&Ć,Ć-Ć/Ć0Ć2Ć:Ć?ĆBĆCĆDĆDĆJĆMĆRĆUĆXĆ\Ć_ĆaĆfĆlĆnĆrĆvĆzĆ~ÄÄÄÄÄ ÄÄÄÄÄÄ#Ä%Ä&Ä/Ä0Ä1ÄXÄZÄ]Ä_ÄbÄdÄkÄlÄmÄoÄpÄuÄxÄ}ÅÅÅ,Å2Å5Å7Å;ÅEÅFÅHthe-picture-of-dorian-gray.txtĄĖKŃ>Œƒf00ŠtĀ_˜’2‹b́‹nŒ„2Œ„00÷UŠ‚eŒ„<4āĢė|Œ„N20Œ„S87‡Ń1 0BŒ„B7Œ„"5Œ„X8Œƒy0Œƒ1Œ„2Œ„ 3Œ„4Œ„76ĶCŠ‚qŒ…=1Œ…B8Ё[‰ūmŒ…\1Œ…b4ąkŒ…H0Œ…h1‰ūqЁ_ Œ…|0Œ†3Ń~‚ž Œ†-0ĢD‚Ķ Œ†@557Ķ0Œ†U1‚¢) Œ†Z0ŅAĢcĢh‚‡PŒ†t0Œ†y221541Œ†~4Ģ5żiŒ‡&12Ģ ĢŒ‡:1́ź3Œ‡?0Œ‡L4116¾DÄ9Œ‡jbiterŒ‡pgot_ƒšw‡ŹcŒˆssone_Œˆfe_üs‚„,ŒˆCef_Œˆ>aud³PŒˆ#aŒˆIhŒˆalarin_øE‚Ęü;Œ‰but_Œ‰ colletee_śB‰jŒ‰8 ctrinaire_Œ‰=igtsŠ  Œ‰eŒ‰CoŒ‰ arwinismus_Œ‰cuü6Ö7 gŒŠnui_ŒŠ"trees_‚ĆŒŠ(nŒŠDsprit_ŒŠditionö|žWū*ŒŠveŒŠ|nŒŠpasco_¦ „SŒ‹ iŒ‹!leursŒ‹' oukousas_‚¾,“C„nÖŒ‹acis_‚»$įGŒ‹gaŒ‹xesŒ‹~ilasØXż†ƒĀ;ŒŒ.nstreŒŒ4ue_ŒŒ:oŒŒ#adameŒŒ)enu_ąj¹`«ŒŒ}nisŒrseme_„ .‚ė'Œ$ecis_Œ*otege_Œ aŒ0rķļ2‚Ć Œf binsoniana_Œkuge_ŒqoŒaiposte_„›iÄ ŒŽ,alon_ŒŽ2 ymbolistes_‚›œ>ŒŽZbleau_ŒŽ`edium³&‚öyūv³: Œ heŒŽfaŒropŒ eponaztli_Œure_²sCŒ tŒ‰i dŒ‹-fŒˆgcŒŠJeŒŒlŒŒTmŒMpŒŽrŒ‡varŒŽ8sŒˆbricŒ‹UgrandeŒ‹[ juruparis_ŒŒwnil_ŒUyotl_»ļŲ.į‡£w ˆ&‡é%gg…š kŒ‘ggutŒ‘"veŒ‘rdeĮ%ē$Œ‘Ks…Æ((į-Œ‘^((lyät.Œ‘d-eŒ‘sionÓ6„¹NŒ’ed£Œ’bŒ’$ption6Œ‘y.lutŒ’*rż ƒöZŒ’Xed‚ĆJŒ’]actŒ’luseł7„ō Œ“ lyPŒ’B6oŒ“urdŒ‘QenceŒ’rtr‚ų ‚MŒ‘(koŒ“PsŒ‘ leŒxandonŒ~dicateŒ‘ideŒ‘jectŒ“Iused„æc†ĘXŒ”-yŒ”'icians™¤&Œ”LlikeŒ”3demŒ”Rnthus‚ŪM¹Źw‚€,ņ Œ•ingŒ• edŒ•anceÕ,ĖZŠy Œ•8edŒ•=ibleŒ•B ssŒ• ptŒ”}ntuating¾f„Ņ Œ–al‚ˆ]Ø?Œ–edŒ–mentøTŒ–"iŒ–:y‚ß>„”E‡ä Œ–ZingŒ–Tanceƒņ‚… Œ–{sŒ–` rdŒ—untŒ–@mpan¦kĀZcŒ—7ateŒ—=sedå:‚—oŒ—atomedŒ—[ingŒ—gsŒ—CrŒ—1mulate=Œ•\eŒ— oŒ–identŒ˜u‚Œ<ā.‚¬m„–f„”;Œ˜\s‚×U‡==>Œ˜v==ssŒ˜pbatsöR‚”GŸ ƒ¹CŒ™ s‚¤R‚ęŒ™4eŒ™:ityŒ™ngŒ™&onŒ™@vśT‡ü7Œ™ts‚Ę: ‚†8õGį\‚“  ŒšlyŒšity‚ŗMŒ™ViŒš ualŒš ressŒ™zorŒ™edŒšsVŒš8MtŒ˜|>roŒ˜"=cŒ”caŒ˜PidŒ˜b quaintanceŒ˜V knowledgeŒ˜Jhilles‚åW µ<Œ›Xs Œ›R dŒ›^rŌ@ĪÕ]Œ›~alŒœsįSŹ^ŒœdŒœ$sĘm Œœ)eŒ›j eŒœ= ressŒœitionß3‚įĢ-ŒœseŒœyy±{Ī0 ŒœblŒtionŒl‚ˆ1ŻN‡Ō)‡Ū5Œ?dŒErŒKsŒ aŒQe‚Ā{‚«ŒžtedŒo rŒž tż…Īz‚–KŒž8ed‚©y’Nģgƒ‡0 ŒžQdŒžWsŒž\ eŒžKationŒžrrŒž2nisŒž>ptŒž-lpheŅn ‰ ŒŸ4 nŒŸ:tique‚”0ŒŸXd‚łŒŸjtageŒŸ^ce‚ņŒ rśGćŒ sariesŒ tiseŒ ntureŒ $r‚«  ŒŸpanŒ @eŒ Xice^ŒœK dŒž miŒŸ  oŒ ^ vŒŸ@ riaŒœnjoiningģ+‚¼‚–!Å`×,‚öDŒ”Rateß~ą8 Œ”XionŒ”LedŒ”FationsŒ”hsę4錢nityŒ¢"rmative‚™}‚ųpŒ”n ectŒ¢JordŒ¢'iŒ”@airŒ¢Dluence„ŁO==ƒÉ#„”m „ŪgzŒ£ wardsŒ£ noonLŒ£gzterŒ£==raidŒ¢P f„²#,,ƒĆoGsŒ£X,,st‚؃äUŒ£shaŒ£meŒ£^GsinŒ£yt‚Ż:ĪCŅU…¹s(Œ¤$dŒ¤/sŒ¤*ntĮ„pŒ¤TngŒ¤Ztatedƒü\‚č†ūWŒ¤nyŅZŲ3„k Œ„mentŒ„ddŒ¤aŒ¤5(eŒ„ reeŒ„oŒ¤`iŒ¤ynewŒ„7ueƒ’^##Ės½fƒ N‰ŠŒ¦sŒ¦ ing‚ķM„Ź3""/Œ¦6""rŒ¦mŒ¦0nŒ¦dĢ:Œ2!!‚żhÆ<éRŒ¦wsÆt“ųW¢fŒ§erianŒ§iersża…‘VĪ<Œ§?enŒ§EveŒ§:ce‚—(ś3Œ§janceŒ§pterative„¹U ƒ†QŒØ edˆ«Z‚8‚JŒØowŒ§uiйK$$¶S¹oƒ5‚śŒØSeŒØYgŒØ_nŒØGesŒØMft° ‚āj„…b£CĪ ƒ¦g °j}Œ©4eŒ©:iveƒģb Œ©. edŒ©@natŒ©)ation‚ō[Œ©V erŒ©#arŒ©{hough…ÆTnnŽ&„oŒØ(‚8‚JlŒŖ#nnwaysŒØA$$mostŒ¦e!!anŒŖtŒØsoŒ©soŒ©readyŒ§KiŒ¦|derŒ§exanderŒ§gŒ¦kbanyŒ¦qchemistŒ§fonsoŒ©phonsoˆ…4“vŒ«]sƒÆ`†ˆŒ«wmentŒ«qd‚æj³5 Œ«}eŒ¬ingŒ¬on Œ¬ zŒ«cteurŒ«Wrrežy‚ū}Œ¬`s·/˜ Œ¬sgris‚ĪOŒ¬yerŒ¬eassadorŒ­ itionsė ‚ķ‚ķZŒ­>s‚ŪŒ­Dn°qƒ‘]Œ­`sŒ­RricaŒ­fthystŒ­8nds‡¾ƒŗYĮŒ®stˆ0Œ®%ngŒ®4ur‚ၰ>ƒ€!ƒčž4Œ®\dŒ®bment‚Öl Œ®heŒÆing…$h‚0Œ­teŒ®:oŒ¬? aŒÆ usŒ­bŒ®idstŒ®PpleŒ®Vsterdam‚½X‚ĆT‚¤#ŒÆvngŒÆ|sŒ°iŒÆpe‚ć6Œ°sŒ°+zed¬SŒ°1lyŒ°Gstasius8½5Œ°hestorsŒ°nhoriteśqŠÅ‘g‘hŒ±rew»3¹QÆŒ±/lsŒ±5r–‚¾ƒävŒ±\yŒ±Vilyė Œ±brŒ±;eŒ±PlomaniaŒ±xuish‚¦H½+ƒ†uŒ²*ismŒ²0s²Ī į Œ²TdŒ²Zs‚N‚ū6‚ŹF ‚ŠA‚«Œ² edŒ²yanceŒ³ingŒ³ yŒ²sunceŒ³/oŒ²_ihilateŒ²Neņ;‰Æ"Œ³ntherŒ³hdyne†—-WW„×Xƒµ6 yŒ“WWedŒ“ingŸ:®CøY„…%Œ“?mianismŒ“Eusæ[ģ]Œ“feŒ“lityŒ“qquŒ“KnoŒ“9doteó^ ŒµiŒ“3honyŒµ(sŽA‚ėEŒµRousŒµLety„ĮŠõ:ˆ’FFŠõ*…üItŒµ|FFthingŒµpbodyŒ¶whereŒµvoneˆČ i—Œ±‘g‘hdŒ¶tyŒ“ yswerŒ³F nŒ³toŒ±} gŒµ- tŒ²6imalŒ°MaŒµXxiŒ°tcŒ±)ew§G‚žc‚ĘO©t÷]ż%Œ·IizeŒ·OyŒ·CloŒ·TogĮ~ķŒøly‚낵(Œøsƒ£Z„† Œø)sƒ™CŌ_Õ1¼,Œø=edŒø/ anceŒøCingŒøHsÆ#"ŒøMrŒølŒøysedõgŒ¹s$Œø" aŒ¹"titeūū;Œ¹EdŒ¹Kse­IžhŒ¹fsŅxŪw Œ¹leŒ¹zicableŒ¹QauŒ¹y‚†u„”Tƒā$Œŗ4eŒŗ:ionģbŒŗ@ciatŒŗVhensionč6Œŗxing‚€n‚†e‚źŒ»eŒ» alŒ»inglyŒ»vŒŗ}achŒŗ[eŒ»>oBŒ¹.$ eŒ»T rŒŗ lŒøarentŒŗ.ointment‚Ė=ƒņ~LŒ»hB%pŒ·jolŒ·7esŒ·1artmentŒ·=horismsŒ¼ricotŒ¼%t[®7Œ¼ianŒ¼yesquesšZŒ½bŒ½ gon‚¦ ‡%‚źŒ½BsÄ4›‚ąyŠ`Œ½balŒ½he× Œ¾ veŒ½ntecturó<ń Œ¾"sāaŒ¾iŒ¾(wayŒ½VaismsŒ½\bishopŒ¾5 hŒ½Hadeķ.‚¶CŒ¾{tŗuŒæenŒæourˆŽƒƒƒöQĪ*‚—=‚ł]Œæ?cyŒæEticŒæKtocraŒæ:eÓ-‚œK ƒŚW#ŒĄ sŒæzour¶v‚‚gŒĄ$undŒĄmaticž*æpƒŽ8ŒĄJsÕŒĄDdŒĄPmentĖUŒĄ^ngeŒĄwy‚„c¹ŒĮedŒĮing‚²(ļtŒĮ5d‚eƒ®yŒĮHsŒĄ|aŒĮ;iveŒĮestŒĮNowč‚Œ+ƒ±kŒĀulateŒĀ lesÄXłxŒĀ0ityćƒųlŒĀFally„ƉśL-ŒĀKicŒĀ\s4ŒĀb-stŒĀ6ficialŒĀcÖ ‡üqŒĆ_‰ŌILŒĀy4 iŒĆ!sŒĀemis „sŒæ,ƒƒeŒĆ/L tŒĄ#mŒ¾e cŒĮ\ rŒĄ*oŒædŒ½&aŒæbisŒæ4gueŒ½<bitrary:ĖD¼sŒÄ@ntŒÄFticismÓgŒÄLeŒÄfii„ä‚®8”z ŒÅesŒÅamedŒÅ toné8 …Œ>>‚‰ƒÅgaŒÅ:>>edŒÅ@ingš/ŽF®#ŒÅehodelŒÅkilates‚šv‚™lŒĘrtŒĘnted‚2Ģ`ŒĘ8tŒĘ2ceĄŒĘ>anŒĘSedŽ_”M ŒĘod‚§ŒĒd‚²ü‚ö- ŒĒdŒĒsżŒĒ eŒĒ5ingŒĒ;rŒĒme„\(ŒĒQuŒĘt ociateŒĘYistŒĘe˜t„.ŒČundingŒČrreƒl‚ÕvŒČ@yŒČ:khanŒČoŒČFraˆś> „G…uŒÅFakŒĒf(sŒÅ hŒÅ4 ideŒČ]tŒÄkcŒÅ_leepŒÅqpŒÄ:bestos˜W‚ńG‚ĶXŒÉXeum‚ˆJę&ŁŒÉrsŚy÷łżJŒŹdŒŹ mentŒŹs ŒŹneŒÉxmÕx‚—^ŒŹKedŒŹPment‚˜B‚’uŒŹningŒŹtkŒŹVhåŒĖcŒĖin”^ąxŒĖ8sŒĖ2edƒĀf ŒĖSntionŒĖ>mptīe‚†IŒĖscŒĖytudeåRä@ŗJŒĢsŒĢ ionŒĢedŒĖY eŒĖaŒĢ.ractŒĖiŠģ+„A„iŒĢEtŒŹ6 oŒÉReŒÉ^henaŒÉlmosphereŒÉLalanta„œsŒĶ3eerūlūgŒĶGe_ŒĶLious„LƒÓmŒĶoenceŒĶibleĢk ŒĶuiŒĶQacŒĪleyƒēa‚œ€0‚Ū^ŒĪ?ativeŒĪEyŠƒ ŒĪKitˆł`ņŒĪr biographyŒĪxmatonsŌb ŒĪchorŒĪ}oŒĻumnˆk+ŒĪ3ntŒĪ dŒĻ$ tŒĪ9straliaŒĶ9ctionŲwčp€ŒŠnueŒŠrted‚¤[ŒŠ eŒĻ}ailableŒŠ&oidƒ©g†Ü4ŒŠPnedЉ#ffjŒŠfffyŒŠVke‚Æ„ū ŗ: ŒŃ ly‚ĒWź){ŒŠljaŒŃ  fulŒŃkwardŒŃeŒŃ"oke²nˆ|ŒŃ\tecsŒŃbur‰“}BĘ@Œ¶=i—?nŒČr„G…u,sŒĆQ„s@rŒŖ)„o(lŒĢl„A„i!tŒ“O‚MbŒÆh‚0#mŒ„=dgŒšuV=cŒ£6LfŒŃ({ wŒ }^4dŒ¼+L0pŒ¦</iŒĻD+uŒ¦##hŒŠ,vŒ”:eonŒŃhzŒ¦`k‚Ņ\ū6‚üyŒÓ>s‚”!ƒ¬EÆYć<†”pdlŒÓWgroundŒÓQedŒÓ]sŒÓcwardsrŒÓhdlkŒÓChelorŒÓ8chanteˆĘƒŽ $+ŒŌ=ly˜y‡µL—4ŒŌRlioniŒŌXsī[ćZŒŌxeŒŌ}ing«7«^ŒÕsesŒÕncŒÕsłV‚Ż.æ² ŒÕOs¶qŽhŒÕ.aŒÕCconyŒÕUlŒÕIdŒÕcmsŒÕiustrade„ŽBśs‚…2‚² ‚Ö"ŒÖ?ciesą^ŒÖEruptŒÖ9erŒÖVkŒÖ3dµ-›LŒ×aricŒ× i‚²ƒŖ&ƒų'Œ×-headed‚ˆ‚ĒzŒ×Fingćiļ3Œ×\sŒ×LainŒ×aeöG‚×t‚¹·wŒŲlŒŲnśjā>‚’B Œ×ogŒ×3eŒŲreŒŲ0sŒ×bŒ×'dŒŲkedŒŲ onetŒŲ6teredÖ=†ž-ƒ¾j#ŒŁlŒŁ s%ŒŁ&#iŒŁedųHēnŒŁTedŒŁYroom„)ķŒŁwenedŒŁ}leŒŁ_hŒŚt«< ƒŒŁ=%sŒŌrcŒŌC$+dŒŲ;rŒÕo lŒŌ^gŒÖpnŒŚtŒÖ-mbooŒŚ.uderikeŲŌŒŪsŒŪedżTƒ–qŽ&ŒŪ4ingŒŪ:s„=Ø|‡£MŒŪXdŒŪ^s½‚gŒŪzs³źē=ŒÜsŒÜrŒÜn„ʁõpƒ›z¶ŒÜ&eŒÜ:ingŒÜ@riceŒÜFsų'§‰łs,-ŒÜ}lyˆĶ"77ĀfŒŻ77yŒŻ,-ifulŒÜweousfŒŻftŒŻ<fuŒŪdrŒÜLtŒŪdŒŪ@mŒÜst„æ$„Ō((FŒŽ((useŒŻ~mež'…Ę[ƒ¢ #ŒŽ's‚ćf'ŒŽ-#eŒŽ;ingnŒŽ FaŒŽA'omŒŽ!kenhamļĀu‚ŽAŒŽideŽKŒŽyroomŒßs†„Kll‚»r‡“5µ¦KŒßHsŒßNleŒßBhovenƒ› xŒß.llnŒß6rŒß<sŒßZt„×_KK„ÉS,,ƒæ*į$Œą(arŒą.ed„™/ …É‚yŒąI ningŒąOs‚©JƒÖ[JŒą",,anŒąUinŒąnunŒą3gƒķ^‚ėcŒįdŒį#s‚æ`‚ž=$$­0)ŒįC$$indŒį)aveŒį=eldŒįIoldˆÜ@??‚ņ‚<õ\„ŠY„äJ16Œā dŒās„Ģ7Œā16eŒā/ing:Œā57vŒāfšHƒ¬P Œā_sÄ]ß[ƒ ‚“ Œā~sŒāsedŒāying‚Ų&Œć ngŒć%wYŒāK:ieŒć+oŒāe lŒāgianöwŽmŒćning‡ł ‚]‚ü-Œäing Œä athŒäfit’"Œä eŒćtdŒćhchesŒä6tłŸ‚éh…(ŒäneleyŒätshire²L‚*†IŒåwickŒäzkŒånalŒå!ylƒĶƒū7 %ŒåQsÉ>†ŲQŒåeial=ŒåW %ideŒåkt”7…—67Œęs‚ģz8Œę67erŒę%ing…ŠMŒę+8tŒęBween‚ƒµyŒęeilderŒę_are‚²Q®>ˆ‰ƒX‹cŒßsxeŒŻHaŒŽWncŒć@YlŒęHMtŒąKKforeŒątJgŒį{??ingŒå{=sŒįO)hŒä;nŒßdŒå'rŒękwŒēyondŒähqueathedŒäbpaintŒē zoarīt‚Ķj‚õ#čzŒčLsԁŠ4Œč`aryŒčeding…‡ž ‚Ÿ(Œé sÅA—v‚śiŒé$dayŒédŒé*thŒérell…ŗ\‚”mŒéZhopŒé`muthƒ•S„Ø@õ}ƒķy» ‚‡ ‚¶ŒźlyŒźnessŒźsŒź"rŒź nƒĢ7 "ŒźDteŒéingŒźsDŒźX "tŒé:rŒčRllŒéfsŒčFdŒčknŒčAbleŒéology¢Ę…Ļ> ŒėDballedŒėJmailedƒ‰:åįB‰ Œė|_‚³ŒģkŒģc“ŽŒģ)phemyŒģ/t‚æ/–QØŒģSingŒģMedŒģYoned/ŒėP ckŒģnŒģ_zŒėvmeŒģ5sŒėpdeńĀ0˜Rį~ŒķDedŒķJingµaŒķOssŒķ8achedŒķ>ndedŒķfwóWļxķoŒīsŒīlyƒß2 Œī$dŒī;kingĄr‚ Ŗ+„Ė8Ŗ$ŒījsŒīdedŒī^dŒīpm‡§$ Ųx Œļ s&‚”‚– ÷i‚ē Œļ;nŒļ5ingŒļAs3ŒļoŒļ! ssomŒļF wŒīXatedŒļ/tted†‡-ż}‚Ōb‚Ę5ƒŲ Œš'esŒš-ing%ŒšeŒš3shŒš!rredŒļf3 oŒķ/aŒšL%uŒīA inŒķleńÓ#Œńdƒż#ƒ˜$ƒ®dŒń3nessĻéfߌńPedŒńUsŒń9dŒńZtŒńJogna‚„UŒņs“Œņ sÆ2‚µ‚ŠŒņ8s Œņ>netŒņdŒņ&eŒņ2ifaceˆĒ; ˆĒO(Œņv s‚øT÷„Œó hŒós+Œņ|(kŒótźcöłuƒ‚kŒóEdŒóKs›į;‚­8‚ēx ŒóreƒĄWŒóPeŒóx nŒó@deredŒófgiaŒólingŒōrowed‰ū’6‚ō}ŒōRing„ų%ŒōXer‚Ŗ"ŒōhhŒōwtleé ‚²dŒõtŒõséFƒćO Œõ2ed‚—c‡‹Lį3ŒõLdonŒõRnemouthŒõ7 ndŒõghŒõWrŒõFquetsƒß‚‡Iē/‚ĻpŒöedŒö#ingŒö)l‚惷 Ś8ńQ…±d$7ŒöV hoodŒö\ishŒöbs ‚Œöh$7yŒó,+oŒō}"tŒō  rŒń-dyŒõs uŒö/wŒöPxŒņL nŒńolŒńarŒōLssÜƒšrź5Œ÷y_Œ÷ken…Ŗ…J†Ž;Œų sŒųless‡¦'ƒ„2„ĆX•v ŒųKonŒųQyŒųEedၬ$ŒųW dŒų?chesŒųuksomeŒųztomeĖg”%ƒŗjŒł4dŒł:st÷P¢õbŒłUedŒłZingųMšŒłxerŒł}lian5Œų&inŒłnŒł`wlŒųcŒł.ssŒł@veŒśziŒ÷sbantioĻx¹VēB‚Ē^ƒ€NćT ŒśsfastŒśyingŒśs遹)Œū(ed‚ˆEžF‚®[ ŒūBingŒū<ed"ŒūH thŒū kŒū-stŒśhchŒśmd‚›MĪ`ƒ“G%Œūa" aŒüdŒüedŒüvity‚ĢFö[ŒüJdustŒüPfields„ś Łj‚ށČ[ƒ³C Œü}erŒżlyŒż ness=‚Ć‚ŃŒż8lyŒż>tŒż2cy„Ÿaƒ¢Z…’IŒżhsŒżbingŌŒżngŒžk‚«|‚»T;Œž nŒż ghtŒž&tishŒżMllianŒüUckŒüqdeŒüwefŒž stolÕr‚ČŒžs§[ØŒ’iesŒ’yƒ÷3 „Į ƒ–{ Œ’5 nŒ’;rÕmƒŽŒ’Ws‚rƒŗ†/Œ’kedŒ’qs„“r„“{ €sž=„§i€(t€"amįL„Č- €Cing‚ €H n€XsdŒ’A ke€.ugh€ ther€^ wŒ’wodŒ’cadeŒ’]nzeŒ’iderė‚„SŚeƒĪeVsPdóc‘]\epinguworkü ‚ńs ‚"e‚al‚( t{shEiseJno‚ €rdoŒž,;iŒś5aŒü"%e‚= u‚Ņƒsų1ŹxĖ?‚÷Kƒ6iedśƒ<lƒ0kyƒJwarkĻ`‚ć1“‡£9 ƒ{ed‚ą3 „ en„on‚Ī"ƒŒ‚é~‚­bƒ1V „Dng„Jshedõ0ģ{ƒĮ„P i„>ed„hs„ntƒ«e/„sn„ d„2ied„,gundy…ying„8lington‚”m‚ō'„Ž…crangers…iy‚ń&‚ˆƒĻ † iness…oh†tled†yƒßfƒ˜vī†Nies†Ty‚õ9 †oon†Yerflˆ“rƒƒ†u t†Hlerąw÷I‡'ingƒš‡;ed ƒp‡ ƒƒt… /r† sƒOl‡Azzƒ*ilt‡,yƒbbleƒonchƒ$dƒuonarottiƒĖ-‹‘%r‚ˆ<e×1šGŒēƒX‹cte‡Nƒp-uŒŚ4ƒBa‚e‚ brˆBr‚yŒ÷ ‚;oŒšl1lŒźyDių3‚ˆ ‚ļf‰&an‰,en‚‹żv‰!inet‰2m‰HsĆY¹[œ‰ulestis_‰{sar‚Ÿ/ĒFļy‚¼PŠ)sӍŠ<dˆŖ{œtŠMbanŠSgula‚üJ‚±jģ@÷VŠ~nessƒķO„v>Šred‹sŠxing‹ousä;óc‹Fly”HL‹>l‹KmŠYiŠAculate‹Zumnies…^ŠH‡»~cdŒes®T‡4‹w§Œ=bellŒ7anileŒ"cdeŒCpŒbridgeŒ1illus‚ę8‘TshadesƒŃ0le'our„„–## [¦pPnsVpy„Š^‰² cJ##notrvas-d\oDe…éDü'Ž,bleŽ2city‚„>ƒÖKƒ˜3‚ūCŽ\eŽbiousŽhc‚“=ķ  ainure‚Æ{‚¶riŽVitalŽ7aŽPet0ulet±  léŹTsyinalƒų\”[‚„•{)lyź ŸSį/Csed„†:/fuldIs#er>lessness‚ībłr‘ington‘o‘ton‚偝B‘El‘Ktionsœo‚Ļ‚ŠQ‚’  ‘{ed‘uagežqĖ’ing’ i’y‚Ł<ņ œźMņEše’Her’Nhage’Tridges’Ys‚ć&§L RYe’.r’_td‘opetsbuncles‘"l“ved‘Qna‘ioused’Bs“yatides‚Ė„‰o ”sčó‚Ła”-eųz” e”2t”'hmere”@ualƒ“{‡Ø”oing„”@Øŗ[• erine•olicó  ”uch•h•egoryƒŲ; †ūKĀ  •Zd•T ght•` se‚Õ:„3–man„exc nŒ`m“R#r‹`Ll6 p”Es•nu•2 t‰Nb– ve‰odenceŠeŠgedŠ.keŠ#iro‚¦ Łc —% d„*®‚Ģ]—Eing—?anĢyįVø'—hs—ml—bebrated¹˜sĶ`˜'ure˜eršK‡‹ģ2ˆ«&˜Vy˜Pies„Ž˜\ur˜Jre˜Daurs˜rt˜-s®†Ē>%%ē ƒł=™/%%ly™5ty?™;=tain™)emonyt™S?r™ n—+ ase—{l—Kil—9darĖ`ōOš's‚ĶFƒ—U!š:s$š@!rš-n¹5Ų}ģQšbicešhkšnlenge‚łMĄM›sžR‚³ ›)_·›/gne›=k‚†$›Ca›Yion ›ber›_pƒ³ Öœ eœing‚£Pƒģ+œ-dĀ5/œ3+eœAing?œG/gœcƒ±dżV…ü›}‡Ņs‚ņ>"terœwmanœ|sƒ¼Ä 8stic>zes„–_‚„ Di]sō’^Łw ~s©oƒæAĖ5‚ėžablež"yžiesž(tžot¬ †ƒŸQ ‚õˆŪf,0žply‹@ƒóUžv,0ingžj edŸsždant_ŠCxŸ Umcacterž gežIiž^lesycoalŸ7pentierƒé"›)  d‚Šq­)£l  e #te ing )ubles„„>ņĮ[  Zed `ing‚Č"  f ter ‚#Ÿ=xrœ]?nšN$i"p›u m  t / sšslœqosšŹYÕb”csƒ”~ƒ×q ā-‚įr”{ s”ued¢y€pę/¢%s…C¢9ry¢?st¢+calē‚ź0¢hs¢cbook‚÷ ņ£oot£ riesÉyž„%:£0nut£6s£<t£*s*¢ek£Ts¢Lmi”hck¢nque£r”]ated‚Ł ‹G‚§7‚ś¤8ly¤2estÉX„ԁŚo‚°?‚°c¤iren¤]ish¤Whood¤clike“…„i©&¤od„%l„e„+pericåfļV„_ney„Yeƒ„¦'„{a¦eseƒéw„ÉN¦ingƒ©^4„1l¤>ef¦n„em¦3selled¦#rrup¤,cago‹[„•hō-&§ ed§ingä6„–m§0sµ‚ńB§Cinā~ƒ²[§Xs‚—{‚īi§kn§ice§5ose§Ip§qse§colate§k§]rdī‚ó&ØFedØKingÕ(¹< ØhianØQen‰B±9­© beryl©lites Øn ist©yso©omatique‚Łt©\led¢ą…¾c©pill©vyard ©{rch©bckƒ1”‚#Aa¦94i£h*e§ o©5 rŖ uš ‡²xƒźYŖis‚²?ŖoetteŖ}s‚ƒV‚¼ ‡’3« e«&ing”<*œ*«Blated«Hmstance«Ns«,l«Tuæ8Š/®¬y¬izen¬ron“H¬As„Į¬Sed¬Gation¬Yiz/«gar«zrc¬ t¬rvil«nnamonŖcboß)‚„&‚„s‚­Ced­Is‘‡‰J€f­led­rs­xp­fmy‚›g‚¾ƒē ®(es ®. s®"ped‚‹†Słb®= s­Oim® m®_y­>d®Stter®YwsßBßL”FÆ%edÆ*seķ'ƒ±H ÆGly ÆM rÆ/n„Iƒž-ōl‚‰JÆ|ed°ing°‚˜°icalis°%ks‚ģK Æ\ a°E ver°nchÆpft°+rÆvmatisńFģGĆ`±ck± max±ng‚ƒ!ƒĒ‚Ģ÷‚’ Ł“„£u±O d±[r±Uly†ć#±ae²ingƒ‚ƒæ/²sæd©+ ²"e²0sŽI ²6 h²LtedĆ*„—H‚Ž3²ns²hlessł"²td³ ston‚ĢT²#s±>ck²R t³u±8ak±Ddion±Jgged³)visĮTƒÕ=³}sń.é2‚›[“p“syõ.‚ƒ„Ė1‚€g“Aing“Gs“;ed’ÓR“led“qing$“b“Mster“wtch“e“!m“6ng3³/Toµ$u°Ke®da±ißōu…Ļ}µzing‚ ‚“ž6„Į1¶s&¶!t¶ rseµlµuchman¶stŠ ŠDž^Ū‚øF¶ys”r„X·s· ers·n¶lė9ƒˆNńeƒķ&·Fly·Aer·LnessÆ^žt·usµé' øionø ed‚łø ect·{arø,ieries‚™xŖ‡§<īƒ“%ƒłƒī>øbedøssømlessøhing@øy>urøVniesø\sseumh¹%@o·Rdø2læB‚¹Ž7¹kian¹qy˜j†õ{ŗyŗ iness„’" ƒÉ4{ ŗ1 sŗl¹wdĻQ‚Õ5ŗVableŗ\ing„ÅCفˆW»rcialƒ ‚ŌQšn»ed»$ing‚Ć# »)t»s…!÷d‚Ę*‚Ü.ƒŸ#»aplace»gs»Vest»\ly‚ačW¼e¼ ionsŗV¼&cat¼=on+»mon»@ it¼Cuni»e½„Ī$ ½s‚•S½ ion½y‚©,†#½2d½8s½n½>reļ&Öh‚˜Rƒ»tų½wly‡ēV½}te¾ xÖƒ­(‚“; ¾,s¾2 ment¾'anceŁVÖ ¾Zing(¾e¾@i¾_ y½qainŌ žæessedæomisedĶrŠNæ;sC¾n( l½Raæ@uterær½gelled½lilation‚ŗ7{ eæMCp¼Z+mŗ{ing¹ebineŗbfortę\‚ģDŅ‰ÕYĄLedĄRingĄXs Gńd¼_ĮdøŹJĮionÕQ‚€<Į-ingéĮ2nĮBtsĄ^alĮHrĮptĮ ntrateĄive‡Į] eĀordeø ŗpĀ/sćn¾ ĀCorĀ5itionĀHuct¹Ćo‚½] ĀqalsĀws‚ŚĀ} ion‚²}Ė&Ö0Ć0edĆ+ationĆ6rmĆ%ded„ź,ĆessĆOiĆfusedƒ”j†÷IÄsŻyÄectureÄ%ugal‚‰(Õ6ÄGedÄMion°ÄSectÄjoisseursÆo„µ) ‚ŃS„¾sÅness'ÅousÅ ence‚±Ł=…±3ÅOsĻ_„”_ÅhlyÅcial ÅntÅUceš!Ę quenĘrvatoryÅInted‚ŽsĢTĘGeĘMy‚ ]‚œ ĘgeĘmionĘSblĘstƒö&„‹~„Šq‚ĪHĒ aĒedĒ$ingĒ*sž-‚½pÓ~Ē^cyĒdtĒYdĒjnˆ“fĒeČsĒ0 derČstŻ^ŽČDs‚‡qŻoÖuČXdČ^s ČdeČJation”wČz lÉrted‚²mß.ÕiÉ5bleÉ:nt¾8ą|ÉVedų\‚¬,‚»mÉjeÉomateÉuptionÉ\ltÉ{maÅ0'ciČ-iĘeÉoŹuÉ?taÉ/piracy“T‚¢Ō'’$Ź|edĖing ĖinŹvct‚Ö+‚ą[‚„qĖBtĖ6lationĖ<orary‚˜8Ļgƒ£,ĖmedĖss ĖHmpĖynt»B„Ī5  Ģ, d Ģ2 eĢ&anceˆa‚—/⁆‚bƒĮFĢ[ctĢrstĢadictĢfltoĢlryĢWŁ1 ĢxaĶ,ibutionsĶ1ol4Ė aĢ eĢ> inuĶ7 rĢUour” ĻĪ ionƒēO‚Ü)Ī!ationĪ'ingįķ9ŌĪGedĪLs Ī-sĪQtų"‡”Ī{edĪg rĻyĪntėƒ™rĻ eĻ-incedĻ2olvulusĻ8ulsively iŹ3a3sĶ[4tĀcĆl fĻ>vÄpnĀWdÄ  gratulateÄ+jÅ queroržh‚ßcŠUeryŠZsƒ«X‚”7ŠvlŠ`kŠ|ped¤s¾rĀ@ Ń,sŃ&dĆŪlÜZŠ a!ŃQrightŃLing4ŃV!yŃ2 ieŃFperŃ eõgųŅeliaŅs’g‚¹PüGŅAedŅGsÆ(ķP‡µlŅhsŅnrŅblian‚¼qŅ|eÓucopias­wĘÓ3ationÓ9er£9Ķ&ÓXlsÓ^tionĪPÓ{eŌsÓcora„ށŠ}Ō#ctlyŌ) spondenceœHł Īe ˆŽ ŌY ionŌ_uptŌ/eŌNidorŌT oborative²B8ÓnŌorŌ pŅ$dÓ?onŅMkŅ;esÕ tes‚Č=Ńƒ‚ ŠčY ÕzumeÕtsÖ tÕn mopolitanąf†ƒˆwÖ9es„‡‡©  ÖNn·;‚kņTÖjsÖdpart‚ł‡×es×ngÕnīe‚÷(×/men×4y×*ies¢D×DrÖper×i×Zy‚—ƒæ…ĖH44ča‚ĶqŲlyņk„=ŲeousŲ,s@Ų44seŲ ageŲ2tķoÖT  ldŲK@r×` ntÖ?chŲpleŲjsinņf„ž5 Ė}ĻƒƒsĒAŁ3 edŁ9ingŁ?letŁEsŁKrŁ-nt„µˆĄ‚;mŲoouĻsi n¹IhlÕ&8rŃr4p¶/&aŁvveÖs¶mffeeŃo·-iŚ wardice¶bbwebs¶hdes¶sgnizanceÖ4tton‚¹{‡ü1ß8ńLų$‚ҁ„Z†DŪXedŪ^ing ŪdwlŪBftŪ<ckedŪHshŪMtesŪSvingG‚Ģmņvƒ±YŅƒ÷ ÜMdÜSsŽƒØ ÜtonÜong‰śH‚ļ…©u ŻsŻ ureÜY eÜz iŻor"Ż* tÜBmÜ<kedÜHse„“6ø}ƒš"‚?Čg ŽingŽ sŽ pŻ~d‚­ §|‚ȍŽBsć_ŽHcentŽVtHŻQ" aŽ<ptŽ(eŻxditŽ[s„į(__“bß!__dß's‚“F‚č ßAsūb¤fßG eßZsonßUinalćK„¶hƒŃ7ą pąisĶYˆś‡ä‰Šą2są'alą,ism~ß-beß`mą8ticąsąnkled†NŖį odilesįus‚ŸR‚ ą\ßiį=dįBs‚ƒ?įHeō&µ}įjedįpingž‚ŽMā edÓČr ādā"nedā( wįvuchį\ssįcį1okedį7p‚©'£`āzblećfixion‚éIąć!lyŚ!ķx ƒ± ć< tyć6lyĘc‚µ\|„Ät ć`edćfing)ćB elćl shć'dećcićZmpledė(¤ć& ä9ingä>stals‚$ąY~iŽrHeä) uā@oäD yŪ} a€Ž2ådˆŪPåz‚Žhå/då4ureå)ivatedåBtåminate›x‚jåvly‚¼vƒ„Bƒ€ę idsęs“qš7ƒ«ę5d‚Ā! „©M †ŻX0;ęO lyHęU0;usęI sity†‡ƒŖ ä’M ę|edēsēy¢ Ūē3dóē9eēEingƒ‰m‡œX‚½ ēgsēaedƒŅcƒłV č sčd‚\ č eč$ingƒÉ ędHioēm tainč* vē lę;eē-rentēKsč@zonę/ateēƒŒ éedé$s‡³ é?tomé*hion‚čL ³u-čFrępé^ tå]léEså|nningédzco²b±(ūE„ćRś{ź:alź@ismÜ3źFnicź. lindricalź4mophaneź^ril×$ –iŚˆ‚Eo–„evaŖ-ƒ1hä`‚$UrµH3Kléj--u™nte¬/iźdy¦F‚ŒMżŗE©Iš ģesģlyƒė-ģ)yģi„Ü`„ĢuƒĀGģIyģCiesģ/ntģOsģly£O¹yķsšNķ maticķyŠUŠĻKķ;sķ6d§j ķ@geķUskš]’ķ[ aķvpķqnedĘ$ƒ–Aśeī dō6 ī&eī4ing‚öVæ‚‘īUismī[yīOies‚Óu ‚‘ ļ ous‘æ3ļ gerī9 cīkdļkībyļtełfķp„’ ļ[dļanž‚Šlļ|edšingņYƒ¤? šnessšenó>ńU‚õ šImooršDed+š% kļf ešOtš?lingtonYāƒ—GńedńingŠo„ēQŠ‚}ń:sń@eń5a‚žm‚ń5ńhsńmghterńbbedõC‚·J ņed„‚[„‡%Miņ*sācsņ0Miyšg+ rļ# nģg iķ|mņ wnń{uńNtķlńshėvggerņ>zedėpccaė|hlia¼nęWļ>óQyóKier‚³-)/óVlóEensņ‚§.„ü ō tōingsÓ^„¦oō.stō(rĮt†€mIMō4eōIlyģ‚ē0 !ōflike,ōOIMról)/dōk !thō lšd”Tū‚”õ"aucheryõ(onairõ.rettõ3tsĀ Åp‚£Gõwd‚“ õ}eö ing‚ųk‚Ārö+tö%cy„ųi öivö1nõqasedöFptionŚ`‚„xöxdłż#÷d÷re÷ imed‚²3÷<d÷$a÷Bineļ ƒóR‚Ćv÷jon÷pve÷vi÷ded½~öL eų orat÷Nlö~ideõkayų!riedĢRßjƒ‘dįoƒ¾# ųnenedųtly®2ųy pųidłr‚’nƒ¢j…“[ł5edł;sŠ\ū?ŃE ł]słXive‚˜Iłb ctłAatłynd”ń@ś$dƒ‡ ƒ’ī$ś6dś<s‚¦ƒ†eśWsśBeś]itionśknś*leśanceƒ“ łeū iū#ormedƒ›\’t•\‚¦5ūUdūOationū[e»qüs ūiadüee ü rūIenerate–b΁¦aƒvƒ®1Ąc‡¶4 ü`ly üf teüZcyĢ…®Bø"‚Į(żfulż edżing4ż(ghtüu caüTberation8ż@4 iüCayüIetionsüNhi’*ž~„‘/®žacyž"itus‚¤KžAtrated‚Šž(cržGnsžXralizingž^ožandžeanourƒŗ@łEœ4’,d’2s”|’&al’8e“{’Rõ[’Li’cs’iyøēŽ€ ceŽ€tƒŻ6įQŽ€,sŽ€enˆ!‚ÆYƒwŽ€TingŽ€NesÆŽ€ZessŽ€qivedķ‚«ށsŽ€2endŽ€wrށthŽ€HoseŁM‚ü4ށRdށMativeށXe‚ą`æ.„”W ށ|dŽ‚sƒ“<Ž‚ beŽ‚ptionÜkŚR½$ƒ1Ž‚ItŽ‚OveŽ‚UrŽ‚Ccration‚ÉcŠ*ŽƒedŹjˆ“‚Ö: ŽƒdŽƒsŽƒ% reŽƒ gn‚‡l‚ŠHåŃŽƒ]seŽƒbteŽƒWairŽƒgi„”dņŽ„edŽ„yZ…ČQƒOŽ„3edŽ„9sŽ„?royŽ„inÖLŽƒ;iŽ„VtŽ‚$criŽƒ}pŽ‚jeŽ‚=demonaŽƒQolateŌ,„ė4Ž…;sŽ…AilŽ…6ch‚Ś2‚Įo  Ž…j dƒ‚‚‹_„’HކedŽ…|ableކingŽ…p rmineކstŽ…dcted”ކ0eŽ…NaކTrimentˆ ‚­Eƒæ|އmentއed‚óo އ lopއ%reux§V‚ĖxއDsOއXlއJceƒŌś-އsedއyion‚‹ އtŽˆuringއ+ eŽˆ oއ^iކ{antźEŌ"„ō|,aŽ„mLsżf8 lų'cŽˆ4vކZ tū)f’onށ$ płeü) g’ mށdrivõ9bŽˆZwųdductibleś«x‚æ4މws¤’7²G މ}mondŽŠryމqlogueŽŠ perŽŠzšvŽŠYtateŽŠSe…Ša„ŌhcxŽŠvn‚š{Ī+„“S#Ž‹ dŽ‹s„–x„ƒ:…–kŽ‹2lyŽ‹8tŽ‹,ceƒÅ‚ŽlŽ‹\yŽ‹GerenŽ‹bicultŽcƒęŽŒnityŽŒ gingƒ³8m‡) ŽŒ1lyŽŒ7med‚Į‚«0„öh ŽŒVdŽŒ\s‚¼(‚ā:Ą‚ęWŽs+Ž nerŽŒb eŽŒ~ingŽŒxgy‚ūW‚ŽęŽGedŽMingŽRpŽAlomatic‚émŅG‚‰r‚Ł5ŽŽs‚‰kŽŽionŽŽ lyŽŽorŽŽness‡ä†üQš.äJŽŽZanceŽŽ`edŽŽes‚Ę_Ń{‚‰wż/ Ž edŽmentŽing‚†NŽ ointŽŽjearŽ?roveļ ŽE ppŽŽTgreeŽirm°Ļ Š)ސsސerƒ¦`ސ'aimސ4osedƒĀ6ŃrސSentސYinueüQµ2‚Øސwantސ}sƒä6Ž ®j‚x‚ÓjŽ‘edŽ‘-yŽ‘!ingŽ‘'sŽ‘3verŽ‘rdސ^ntä{ bŽ‘|ngŽ’on„‰HŽ’i*Ž‘\ oސ:lŽ’ussސiplinaów·|Ž’\d‚Ļ}Ž’baseŽ’nngagedƒ*ķÕŽ“lyKŽ“dŽ“ful‚¶<9” Ž“AdŽ“Gs‘gŽ“MiseŽ“cst Ž“)raceŽ“iuƒƒĮOŽ”esŽ”onourēgŌx„ĢŽ”Asžˆ«Ž”UdńzõVŽ”hbedienceŽ”mrdered‚ś_©NÖDŌ"Ž•ingŽ•edŽ•#layŽ•atches…’}„„!‚{Ž•\atisfiedŽ•bectingœ‡‡‹(Ž–ceŽ–t Ž–nŽ–ff·Q…™.‹'Ž–JionŽ–Pness‚ź Ž–VctŽ–oguishing Ž–u nŽ–Dlling„"‚×$Ž—/ingÕÜ Ž—CdŪ[Ų~ Ž—UngŽ—ZonĻnŽ—_ iŽ—H eŽ—uorĘŽ—zbutŽ˜ct¢ Ž˜iŽ—5essŽ˜4usted2Ž˜: rŽ— iŽ–/ aŽ—)ortedīj Ž˜\2tŽ’+*cŽn aŽ” gŽ•;pŽ”ZlikeŽ”GkŽ’teŽ”#hŽ”roŽ’VdainŽ•hsŽ”<illusionŽ•VquietŽ™used‡µ`‡ķŽš!sity¤CeŽš6edŽš<ing×ećnƒ¤ ŽšYlyŽš_stüBŽšeeŽš}ity Ž›nŽšBd„FŽ› iŽšanŽš'erŽ›-orce ƒLŽ™  csŽŠ|cxdŽ+nŽ‹#eŽ‹pffŽŒ= mŽ›3 vŽŽ'rectŽŠ aŽipŽŒgŽŠ_cĄA™nøJŽœLorŽœRrinesŽœXtŽœFks„šO ‡Ū=#/Ž nļ:‚ŒA‚S‚÷!…˜5 Ž,sŽeŽ gedlyŽ&ma„÷+²8÷B£JŽcefulŽilŽophinsŻ;ß$‰Žžtics‚‘õzņƒģI Žž9dŽž?sŽžD teŽž3ntœMŽžZnaŽžptianŽžviŽžainŽž"esŅOŅŽŸ2sŽŸ7ionŽŸ-e†Īx33Ė …ŗc~‚FŽŸY33eŽŸCatŽŸ_orsššsŽ tepƒ–c‡¹$CKŽ  sŽ way‹˜#ƒ%ƒ%ųBŠŽ ChŽ Ited‚¶,¬Ž etƒņO Ž y tŽ kle„Ą‚ŻnÕXŻ9‚‹7ģ)‰t…ĘnenŽ”+stairsŽ” loadingŽ”%rightŽ”1wardsŽ”6yrŽ”ly¼Z„Œƒ­†ŻA Ž„fsŽ„8edŽ„JiŽ„lyŽ„`less‚–WŽ„8dŽ„r mަ$ryź@‚„ ‚Ł{ ަM dަSs‚Æe–ƒ‚+'ަY eަmingަsmakerƒŖ-ަ*W aަy'ssާwަGnched„—4ƒ«Jƒ„jƒ¬rާSingާYsß`‚Ńoާ|ingާwedŽØp¢~š:övŽØ-s‚ĒFŽØ3rŽØ'n½:ŽØ@eŽØVingņ/!ŽØ\vާ_nkŽØpާMftingŽØrzzling‚‹‚Ŗ•NŽ©3ed‚Š`‚’< Ž©Hped‚¹d ‚ČRéMŽ©pyŽ©jilyŽ©vsŽ©dnŽ©^ veŽ©N pŽ©9opŽŖ wŽ©-ning‚ˆ‹årŽŖWgedŽŖ]s‚— ¶²]ŽŖymedŽŖsó„ŪŽ«ardsŽ«#enness Ž«)nkŽ«mŽŖcgŽŖQdge‚䃉MŽ«nadlikeÅF‚ާ#eޤT*aŽØw!iŽŖ  oŽ«G uŽ«tyŖj‚ąo‚į,-ެEes.ެK,-hessެ?al•‚ņƒŌ6ƒŌtެ~s‚Ķ_ Ž­tެxl5„ö ō,¼dƒĘR Ž­4edŽ­9s‚»?‚ų ķ[‡}ƒ–R Ž­hyŽ­n tŽ­bky–Lƒæ\ƒæOŽ®yŽ®chŽ®iesū# yެZ.cŽ­|sŽ­? llŽ­\ ringŽ­ eŽ­. keŽ®#tŽ­VmbެrdleyŽ­(g‚äPŽÆ arfsŽÆ&elt‚“[˜aŽÆKingŽÆEed™5–OŽ¢I‰s8oŽˆ`„DeŽ›\ƒL!iެ‚QrņDsDaŽ®ByuŽÆQyŽÆ,w„õK))żŹ@‚ö[ ƒā‚;“(‚īuްZen„w (ްH lyް`thްTsްNnestްBed‡‰@‚˜~ޱ#l‚µ ‚Ąqƒä'ޱ=ward’ ޱ7ilyޱCtޱ)eޱTy)ńwޱing‰nް7))chްo (rޱYs޲tް=gerly޲u„ŁfŒ€A ޲Zs޲_ ok޲Tny„4‚ó2ƒĄL ޳ edĆt‚·]޳$y޳ies޳ ho޳*stas޳ clesiasticalŸIĒ(„P޳qs޳kdū ƒ÷$Ų6 Ž“s Ž“ ionŽ“ ed‚ŁƒņŽ“=dĶ+‚Ł0Ž“QalŽ“CeŽ“Vion«-Ž“& itŽ“eucat޳wgeŽ“{wardļIāR‡–b ޵-ive޵2s‚„!™U޵Ocacy޵UgyŠy‚|޵ss޵7 ect޵xort޵[i‚ńN‚…y‚…~Żc޶2m޶8ts B޶>tis޶,sÅ ޶So޶&ad޶kyptianž1…±Q Ž·th—{…¹n‚Ą( Ž· eenŽ·(hŽ·.yĢy†„1Ž·YtherŽ·4 ghtŽ·Tn‚Ė‚§ Žølyœ†³ Žø borateŽøgabalusŽøpseŽø!sticŖy„§L‚ N Žøalyį. Žøg rŽøvstĻ3Ś-޹allyˆŠ/ ޹ronic¾?ßnƒn޹=s †ˆ'‚Č޹]ing޹Wed—a ޹z en޹cat7޹% ctŽŗv޹Cment޹7 gantiarum_޹QphantisūŸXŽŗZzabethŽŗUgibleųeƒę&Ž»quentŽŗ}cution„“ sŽŗ7 eŽ»&seŽø'aŽø{ deŽŗ`iŽ» oŽø[bowĖ}Ż(ÆjŠVŽ»lilŽ»qncipatedŽ»wthiaŽ»}uxü‚ū1޼3lmed޼8ssy£Tė޼Wsč Ŗ` ޼k ed޼qies޼w roider޼>a޼]lem°3™+޽1s­ ޽7ld޽Eultsé-޽Ka޽cgedīj‚Õkƒč{…é3޾ s޾al¬XŃ޾,s‚¼ ޾=ty޾1loyee޾&eror=޾otion޽b޾C p޽her޼a޽~igrated‚ų{§›sŽæ,ledŽæ2sŚŽæNouredŽæ8elŽæTmŽæ&bledŠ‚„PŽĄreŽĄ urage‚ĪaŽĄoŽĄ) yclopaedias‚©<„™é…Ź÷ƒńkŽĄisŽĄdd¼8ŽĄoeŽĮingƒćh+ŽĄSingŽĮ urŽĄMedŽĄ^sŽĄYless„–T™NŽĮTiesŽĮZy»=ŽĮ`mŽĮvrgyˆ\‚¢8ƒ‚x ŽĀdŽĀment…īO„Œ‰ūBŽĀAman!ŽĀGishŽĀ;and,ŽĀW!lŽĀ$ age×1„™œC‚æ;ƒÓ1ŽĆughŽĆrmous‚Š(ŽĆ=d„Žp‚ĶOŽĆOconcedŽĆUlaveŽĆ[uringƒŚ¢IŽÄing•7!ŽÄedŽÄtain‚©e‚ęß_‚gŽÄ<edŽÄBingŽÄHsū ŽÄNrallŽÄousiastic„œ:żEŽÅly‚śrćŽÅ'dŽÅ-s×kŽÅ2leŽÅFyŽÅreŽÅKt‚æYƒ€EŽÅ{eatŽÅuanceIŽÄ"!erŽÅ`iŽÄuhŽĘrņJė#ŽĘEouslyŽĘJronment°ŽĘ?elopeŽĘOiŽĘmyWŽĘItŽĀo,gŽĮ+ dŽĆ#oŽæmaŽĮ|eŽĘsvŽĄ/cŽĆ`sŽĆCrageŽĀflentŽĆjoyŽĆ mityŽĆnuićDŽČsškŽČ(ledŠ;ŽČ<ipmentŽČ.al„†"é{ų=ŽČactżtž(€aņ#‚ÜŽÉsŽÉ orŽČand‚ß ŽÉ/ skineŽÉrŽČfeŽČ[asŽČulynneŽČznest‡oƒę„“ ŽÉ{dŽŹ peŽÉulierżJŽŹaŽŹ'ortedŌiŽŹEly‚žŽŹKecialŽŹXialˆ+ 1»ŽĖtialŽŹ~ce– ™0·ŽĖ"ablishedŽĖ(eŽĖ.imate ŽŹ-cŽŹ^pŽĖ senŽĖ4tŽŹxquifŠ9ŚWŽmŽĢalŽĢityˆ† ćiŽĢ5alŽĢ;sƒ¼ŠMŽĢernŽĢAhicŽĢVonŽĢ chingŖF‚•{ŽĶstonŽĶ ropeŃg„Į^ŽĶ1sƒ·~ˆ‘3QŽĶ7ingŽĶEts„5 ˆƒ6FF„˜ ; ŽĶjFFthingŽĶd bodyˆ„\NYŽĶp; y‚ėS‚-ŽĪNYrŽĶK3QnÅOĒŽĪ6ceŽĪ<tóŽĪWlŽĪBden‚EŽĪ‚-eŽĪ]i„œzŽĻ ly‚ˆi…ČXŽĻ"ionŽĻed‚ōO‚ōTŽĻ?s„Ģ` Į ŽĻS d‚ÆTŽĻY eŽĻEationŽĻgingŽĻmminŽĻctŽĻ(ggeratÖ>č'‚ŪcŽŠ9lyƒĀ_…¾pŽŠMion‚ėLŽŠcively"ŽŠSptŽŠ>llentŽŠissŽŠ3edīM‚­Y†ł;ŽŃ)dŽŃ/ment„’\‘nŽŃLimedŽŃRmationĻä ŽŃtonŽŃyvelyŽŃXaŽŃ~usi‚u‡Ū)ŽŅ,s‚łŽŅ2eŽŅ@ingJŽŠy"eŽŅlŽŅFusŽŃ5iteŽŃ$hangeĖnĶ‚Ś[ƒęl ŽÓd ŽÓ rciseŽÓmptŽÓcutive‚Śk‚ģsŽÓTedŽÓZsŅ!ŌK…Śg ŽÓ{ionŽÓuedŽŌ ibitŽÓ`aust†nƒ†Dƒńr‚Ŗo ŽŌ@nceŽŌ:dĶh ŽŌF eŽŌ^sŽŌc stŽŌ4leæk„ĪP‚ĮŃvŽÕedŽÕation¶L‚ÖŽÕ@itureŠ‚Č'ŽÕVs‚²ZŽÕ[eŽÕiiveŽÕosŽÕFdąa‚¤ ƒÆŽÖsŽÖd‚¤9‚£-„u·g ŽÖ@ingŽÖFsŽÖ:alŽÖ$enceŽÖL ment)ŽÖmriŽÖnŽÕctŽÕ:l‚Ž?„œc…ŠJŽ×-edŽ×3sƒ¤tŽ×9inŽ×Pnationś8Ž×VaŽ×posionsÓ'‚Ī-ŽŲrtingŽŲund‚‡[„Š+ŽŲ3dŽŲ9sÄ*…ŹlŽŲSsˆ„D$ŽŲYionŽŲ?efŽ×)eŽŲg$ressŽ×ulŽŲo’eæ „¶ŽŁ&lyŽŁ+sƒÖ‚§mŽŁNtŽŁHding„ø=ŽŁTnŽŁkrnal‚󇆎ŚyŽŚilyŃ)õŽŚordinarŽŚ*vagantƒ† 'ŽŚ0aŽŚP emely,ŽŚV'rŽŁqe ‚@ŽŲf$pŽŅ\JcŽŚn, tŽŁ1quisiteŽŠ aŽŌhŽŌwiŽÓ- eŽÕ otic„:†ˆŽŪ^rowsŽŪXallsƒ”w‚Ŗ†į9mmīG ŽÜ mmsŽŪdbŽÜlidsŽŪ~dš<×:‹zŽĪs‚EvŽŪ‚@mxŽĒWLnŽÜ yeŽ»,sl޲na޾g=mŽ·_1iŽĖ[ sŽÉ5 r޶ff޵ d޲mboŽĢ\t޳@c޶q gŽČAquŽĶuŽČpigramŽÜ:zzelinĻs‡}‡”>„ó> ˆ§kyŽŽ sŽŽd‚āŹ@ŽŽ%eŽŽ+ityęzŽŽ0lŽŽFngōTƒńN„ńŽŽfsŽŽaoriesŖ:ŽŽkyeŽŽltŽŽLiŽŻ}adeŽßulty‚°‚äUŽß>dČ`‚ź+ ŽßDeŽßRingŽßXsłQĄmƒ e ŽąureŽß|edŽąing‚@ƒŲ Žą/ed Žą5 tĢ?ąW‚¼:ėŚE ŽąPbanksŽąUestŽąZlyŽą`nessż4‚½uƒģŽįnessŽįlyƒėbī) Žį!fulŽį;less*ŽąD nŽįA thŽą lŽąf r‚Ž[‚œ ‚†?‚ša ŽāenŽāingŽā sƒ Aƒ¶…˜Žā9edŽā?ingŽā lŽā3seŽāEterĄFÓYŽā{d‚ˆQ‚˜ŽćarŽćes‚öMŽć1yŽćiō~ Žć7ilŽćeŽćKous‚Į-‚ØjŽćpdŽćvs††} Žć|eŽäfulƒĮT'Žä,yŽä iöLŹ^‡žQŽäKally˜,<Žä2'cŽäQtasticŽäFlikeŽ-‚ļ_õŽås‚˜&‚’6ęcŽå'erę,…š"Žå-mŽåeŽåceŽå!ingŽå;thest‚Ā …Ŗ_ų)Žåu dŽå{s„¹lźwŽęngŽęon$Žę"iŽęe‚ķ) ‚偿"ŽęL ableŽęRedö“2÷_ŽęwingŽęrer7Žę8$cinatŽęXhionŽę}t…™NŃM Žē8ityŁB„¶aŽēNful‚»)‚ü Žēdsż`#Žēj herŽē> alŽēTe‚Ż]„‘?ˆŪT Žčs‰eƒ'Žč3e_ Žč% ltŽč9nŽčdelƒÖŽčgitesū6 ƒ9Žß  cŽäb< nŽē7 sŽį[*iŽēx#tŽå@"rŽā\lŽčH uŽß^ dŽćQ mŽčmvourŽč|wn†Ż8ß;źv‚Ō2ŽérfulŽéledŽéxs©9„Ģ Žź$ed£#Žź*herŽź7uresŽé}rŽźstŽź=tĢr‚üŽźseralƒēH½0Žė ing‡ü=ūt„#<ŽėingŽė%sŌoƒįBŲjŽė+#<lŽėHtŽėCsŽėdŚ&Żt…–\†€<Žėsī /Žģow„ĘzLL|Žģ"LLtŽģ/lŽėyicity‚ż@ž,üUŽģTolŽģNars ŽģYrŽģHmor‚vƒ«QŽķ ishly÷:ƒõO*+Žķ"er ‚BŽģ(|lŽėNjeŽķ'*+wŽźV aŽģp rŽźxdŽėsignedŽķverŽķtidį[ƒ‘nŽī s’dƒ€]‚“4‚äBŽī*sš-‚‹Zƒ°dŽīJyŽīDce Žī0ldŽīPrŽī>nd¤2ĶŽļthĘP‚”% Žļ eenŽļyŽļhŪp© ‚¦bƒ“ ŽļHdŽļNs‚ƒŽļT eŽļjineŽļpurŽļBhtŽXŠ‚\Žšs«2›iŽš/graneŽš5ppo‡æjŽv‚øŽšUedŽš[sŅ+"ŽšalŽš!eŽš;iŽšxmīĶ^Žń"llyŽń(ncialŲį*ˆų!#ŽńGingŽńMsƒŅnƒŗxƒ”X‚‚ ŽńklyŽńqrŽńwst†ąkƒ6Žņ#sŽņedƒ•: ƒĶuŽņ@ edmŽńS!#dŽņ)gerŽń} eŽņFishŽń-aéAƒ„+ƒ°;Žó sŽódé7„³t„»{00HŽó100stŽóeŽó&ingŽó+m‚‰E‚ģŽó^sρŃ2‚•`žŠŽó}tingŽórnessŽówsŽōzherbertƒĒj„ÖFĻ)ŽōBed ‚,ŽņUmnŽó7HrŽš~" lŽšgŽō<veŽļ$ ftŽīe eŽō tŽōHxŽībreŽīctionŽī$delityŽódstČwŅ2‚Ž:»b‡£3ŽõiikeŽõcessļ( ŽõolŽõ]d÷ģ3÷‚ĄŽö-ingŽö'edƒ“1‡MŽöJdŽöPsž#“ ŽöVeŽöjingō@w…¤BŽ÷ edš8Ž÷rŽ÷nedź^Ž÷"te‚€Eįe $Žöp shŽö meŽ÷9tŽö3rŽ÷GuntŽõQccidŽõWkeŽönnelŽö"ppingŽ÷Mwlessė)„ŲiŹ‚¦.ūkŽųQlyƒš5ŽųWshŽųfwŽų?dŽųKmishŽų9ckŽųEet}‚–Žł,ingŽł&ed‚8‡ž ƒŒ ęJŽłUingŻhķ#č1ŽłjationŽłping‡žŽł2ckerŽł[ngŽłurtŽśttedŽłOghtŽłIes„É ‡fŽś[ingŽśUedķjō  Žś~ rŽśxded›Ģ7Žū tineŽūceęl›=åŽū>dŽūDnsŽūJzelŽū&enŽūOi ¹~‡¶ƒ§ …„pƒó[ !ŽüsŽülikeŽü edŽüing‚g#Žü! !rŽüd#ŽüM#e;Žüc#wŽū oŽūnrŽśaat‚å?ƒĻBƒ”"ƒ˜)‚ā Žż edŽż&ingƒ„6Ä{œ~ŽżEdŽżKsƒ˜oŽ‡>ŽżgedŽżming ŽżQeŽżster'ŽżngŽż, shŽž tŽżid‚ģi„ÉŽžIing1Žüo;oŽž"' uŽ÷R$aŽś iŽųleŽžOy‚ҁ—N–pŽ’gyēX‚‚ŸdŽ’4edŽ’:sęp‚Ō$‚ß|Ų ś‚¤u"Ž’`edŽ’fingŽ’ls‚Ó 'Ž’r"ow€yŽ’Zies*€'lŽ’@dŽ’Uk›Xƒö/ €TledĢ2€Z d€jthill„.‚ł|„śe lyõ ishš ÷#‚āTĒ‚ņeEsteps?men3ed9lights#lKtd¾aƒøA‚…l‚ŲI ‚%dÜ8…Ę9 ‚ČB‚EersØwƒŁH‚Ys‚? head‚_st‚Kignć2Ī„ś#'ƒfulnesså?ƒ.ess‡ā ƒ4nƒæa ƒÕƒP tenIƒ#'etƒB iveƒVotƒave‚Ź|‚„ŽQÕ}„s„ion „!t„lØ:ŲH„Ld„Rrƒ± ›Bˆ›,ˆś.„8 a„xs„Xe„lless„rosus¼ ąP‚ŻbŽ"…>ly‚™s…Date…Se‚ĶM…2 h…Yun…oy…8nightć7„ŒK†sŠö„e† ƒfIg„~. m…ut‚me‚+ ce†#ward‚bidden‚9dŖ”¢Z‘F‡ness‡estÜ%ėH„¤71K‡/ation‡4erü‚ ‡Tth[‡91Knd‡Y r‡l‡ght ‡\†1„e† )r‡h[ u€8* l} o€pnŽ’ gŽ’amŽ’/il‚pperies‚ЁÜI¶lˆfileˆlmentˆrrantƒˆ,Š: ‰d±täOŸp ‰6co ‰; is‰0e‚ǁ·6ƒŃ>‰eincense‚ó‰J c‰kk‰_gipanni‰tic›Ł8"Šn‰" meˆxgŠ1tricideŠ7ughtƒā ņõRŠyom‚ˆ8‚žF ‹ lyŠ~d’Ä ‹*manĄ<ŖTƒžf‹Lh‹Fcoes+‹ e‹0 nch‹RsŠsckled‹@quent‚¹„™ †“U'Œ% hip„¦2EŒ+'sŒly‚ĢhFŒ;EndŒRzeƒŌ#‚l Œned‚Ģ8RŒXFeŒt ghtenngedüBģL,sün‡żR‚ ‚ £>œR‡˜KalsQleted’l‚–2slikeƒØ „’Mƒ„Ž edŽing„Źz‚CC‚ ‚ mWntŽwn1ckyst>id_‚¤’BēLŽtsŽnfulƒfŽ/‚C o R i‹i+ eŠ="aŽzuitģYƒ¼‡ˆ>!Gy"M!lAfilled‚Ø}¹$teszingĢ^ƒÖnydraising‚Š$‚}ƒ›DowJy—UŪ;— >iousktherPresƒ€d‚Ōg B["l‘# tureq rm"n‘ssŃ[ •gˆ‡\Soƒf8rŽéƒ9haŽķ6‚B%eŽōV‚,BiŽž_1Sl‘)BuŽŻx3­P‚¹ģ…c‚ćZ…ś5’>ed’Ding ’Jn’9ety‚¼?ęYö/’ing ’yery“opšē ‚r“0keeper‰G“5e“*bling“HmešF…– ó(“ue“{ingļ7‚•J”s‡½F ”er§`¹GÆĻ3‚ƒ:„§Wm”Ped”Vs'”) den”\ter”8lands”>ments”Dnet”JrulousĖČ2•:ed•@ing‚Ą•Fp­pę@•ks‚¦u•~ing•qe–her‚ĄÉbóC–.letedÖ ¦A„Č$–Ls–4nt–Ftier–Rze–(dy«#†ł — stonAĒ‚я—!d—'tte_„ĢG —F ing—-e ”s' r—ve—Lz–`u“ ll’c i•]s–t”p“Nm’-ble’3gs“onymedeĖiÆTŪ|ĶH‚Ī2˜is˜dl˜ntion‚«‚ü&™us™sity ˜|a™o‚ż7‚•7ƒņ4 ™Qes™W us™Kal„žR•.™|anšenšmƒ™bšeš*y7š0tl™fi™7 erł) Ō]‚ö šgsƒ„/ šm eš{ian› rgšb ffreyø>›0any‚›uF›Ds„ź1ƒĪpƒĆ,3›^ting›XsšD7n›d,3t›o›Jsture›6rm˜^m‚õ)œ7astlyœ=ostlyšŖœdtsœjnœ^ mbattista„§:ƒ©y‡_tded™D‚»{;evraAger‚„XŸ$`rdanofvanna¶9ū}‚ķ>ƒ„q)/žs0ž)/lždle…)ƒŻHŠŠp+Gž=nžCs„ 8 RžI+Gež_ ingžeRvž'0r%lœwaGnloganticžpsies–XļS ƒądŸO ysŸIstone‚µ!ƒĪ‚•<Ÿud„ĪŸ{e  ingƒ„cūćFˆ¦q +es 1like„LŸTd nc 6ssŸomour %re Pzedė.‡Ø ”edGę"”'ed”-ing‚R”2mer”Ipseļ_€”ged”mingh ”Om”ssten¢ tteredŲ-ƒše¢4_‚‘,‚·¢Hy„—9“]č=ƒĖl˜5¢ms¢hd‚¢~¢sve¢:be¢Nom¢\ssy¢bucester£ weds VL a£ o” eam¢ ių<£vedĶTõW…V‚­}%¤s¤ like„ Q„’PWW„Ģ' „Gƒ”0;¤> en¤Ds‡a†©'¤ge¤adolaƒē\‚Ś>„œh…z„ ness„s„body‚¾uˆR„<ous„Bs¼=„”y67„^hic³fį`ƒ¾O„zedč"‡ł s„„od¤8WWing¤J0;ld„d67t¤%d¤mn¤2es„Hrge„vern¦wn¤als„turdsƒ½.‚I‚äq § ful§s†ö§ e§1ious‚‰`‚š)‚Ć‚»‚ó|ŪV §Tfather§fson§Zmothers§`peres†xĶ§l dØ#iteØ)ted²g‚Ņ,ØNsć!„Ź.‚ĄF‡’7 ØhhopperØnless Øt sØbpŹ~Ą2‹"©+cation©1ed‚—h©7i©Qying¹ ©Wf©nng©ti©&efully„†'‚× Ŗ"y‚ÕR Ŗ( l‹• MM‚"ŖDMMy§7cŖ6 veØ.n© sŖ t§NduallyØTpe‚æG‹ƒ^«&st« rÅi„ü*KT«,e«AlyV«GKTt«syņOŲn„„Y «xs­‚°Oƒé?¬room¬ eƒgó¬1ed¬7ing(¬n«~ k¬<t«sdyĖx„µD‚Į^«^Va¬S( e¬}w­y¬xgoryü"ÖQ­9f­>vance˜~‚Ą\„‚°V­ning­hed ­tnn­De­\fonetto­bmyöpo®7sę^źA®Ks‚€'‚åČR®cly®]est†Ę_ ®isÆvenor‚Ÿ6¼G‚øb Æ nessÆ&sł Æ, esqueÆErian„Ö1 ¤+‚š.Æks Æe ndÆqp„»‚ź ……Kƒøh‚„lƒH °ing° n°led°&s°,thE°2 wÆ uÆ sÆJ t®=an®Pom‚ģ`±d‚÷±!e±-ing„ŖL‚""a­ e°eEo® i±3umbl‚“‚ƒ²s•ŠZ²ian±{ed²s‚›1ƒų.²:ed„ ²Os ²Ut²@sśLę‚Õ)‚¾i³lty²zde³neaöB·@³2sźźF³Dsō;Œ€S]]‚q^³[]]enberg³aters |³g^t²a es²ard³In³ i³8m²uffawed³-ll³Vsty×l Y¦s„o±I„^rž{i›}!e—b6a“|u£Ps%lœBh£{naw“Zwendolen˜Ybnewby‚ŽP„’( µPs‡‚¾^†čv†A†FµjnµdjisŪu‚‹x‰ū‰o…Ļ¶s#¶"r¶led¶nes„½9$$†üs\\‚¢I f¶V\\ward ¶\ fl¶P$$fcć š · edŽh·mer·ilton·let·!pshireŠjƒ@Ķ“+·dng·jwork‚Ŗ.ī^ƒŅ}…i59øomeƒ¼"A ø59søkerchief·Xed·piøle·^ful¦"Ź,ølsį=‚- øring¹s‚’^ ø*A d¹ g¹ somƒD‚ĪAŻ>¹Ced¹Is‚Žsįg‚če ¹rness¹fer¹lly„†c>¹Oenŗy¹x iłS€Jŗ<s‡¤‚™\ƒŽ# ŗOlyŗAenŗUyék‚ၛ$»ey»otĪ4µ…ČD»-y»'ies‚Œ »3on»"lessž#… x223»h22y»cowden‚—K‚Š ¼ lyŃ0‚¦pč¼%st¼+yn»p3rŗ[ d»I m¼ shŗ{e» l¼ t¼0veŠńZä"ł ½ily½enedˆ†)+3½t½ n‚š Ļu„åO ½Q d½Wful‚‹NķbƒĖy (½] e½{s½uredƒ›LÓH¾ ed¾&s‚·d¾,nt¾Atboy‚‚t†Ļa„6„7¾_n„‘D$$„[¾e„6„7e¾u$$ingÉt‚ƒ3æersŠ[’ µp†A†Fd¾{„[v¼Enr½9+3s¹#n¶m lŗ>pp¾ (t¶0#iµV bit·'m¶ ggard¾Guæwkæ*zard†–;55ø–iĄLsƒå %%‚Č|‚ČW‚ųSąWü„Ę"ĄphĄvlessĄ|s„ĘMcĄ^%%dĮ"tĄdingĄjs‚¢pĮJed‚Ё÷1‚ ĮcsĮi nĮ]d‚±\‡øl0ĀyĮweĀ ilyMĮ"crĄ@55dĀ0vĄRpĮPtĄFlthy‚ŗ‚­xƒ óL‚•ėq ƒ»óĆenicĆs˜F‚“P‚Ū:„™] &Ć9edĆ?ing4ĆE &pĆ dĆlĆ3met‡«*llčL ‚µ}ÄertÄs…© 44ƒ,½Ä9esÄ?it‚Œ!‚ƏÄas‚÷sÄgineÄ[es‚䂊6Å elf‹g„©fƒ6„Ä344eÅsÄsoÄbÄEmÅ"tfordÄ aldsƒĪ  Åo dóCēĘngĘonÅu eĘ iåC‰ø Œ”!Å(ƒ6„rÄllnryĀ5MaĆ^4lĘ!sitatĘ5ttyĀelĀydonismĆiressĀmbrewĀscticņ@„ƒ É…æ "ĒBness…‚Ÿ +ĒH "ousĒYs‚­/÷?<Ē_+eĒ< denĒwingƒ„‰ƒHƒšU ČrČ$st‚‰1‚…ƒ‰tČ* eČAlyČGwayman‚ŅUƒŸČqsķ]ČwlÉstone‡ā2kk†ˆ~……É"kkselfév‚žtÉ@tedÉ;deršS÷bÉ^dÉcs„žÉ}ingÉie‚ąV…˜  Ź yŹians‰ƒ`‡d‡tŹ% torŹs‚Ų7ƒ®pŹVtingŽRŹ<‡d‡tsÉ(……mĒ}<dČMghÉ lŹ\tÉFnĒ7ccoughed‚”(•oś$ĘŌzĶnŻƒœB ĖUerĖZingĖ`s’‚õ,Ģså|„—+õMČ|Ģ!edĢ'nessśĖf dĢ eĢ-lowĖObornĢinessĢGyžCƒČĶeĶ burg‡9‡Ø Ķ,combed‚±0 Ķ2eyĶEour‚ƒ(ŸĶbedę;žĶhdĶwfsĶ|kedŪƒ v‚ŽˆÕ<Ī dĪ&lessĪ,sµC‡[­ZĪSedĪYsƒŽe00„—eBĪv00eĪ|y…ÄRĻBblĻd×N‚ŒTĻ1sjĻRiĻ7orš`‚’ ĻZsyĻEjrĻ` seĪ_n‚¶5–ƒŠbleŠls’‚Ī Š4essŠ9 tŠ eŠpitaƒ­›.‚Ēiƒ•ŠtsĻ.ƒē ‚Ü75CŃ sŃholdaŃ5CseŠzrŠnnds¶X„³A…Ą1ŃReverĘ)„ ŃX1wĻny rŃ-auĶmĪ2peĢM lŠIsĶK nĪoĖ>arseŠhtĖDckĖJistedŃLveniaŃkxton‰ūŽ> ÓtpÓmlĶņz‡—z‚šcÓ-eÓ3ged‚ꁺ%ÓOity‚0‚ō3ÓkugÓele‚‰ż>ŌationŌ ty‚ŁjŽW‚ė Ō8hŌ2edÓUanÓqbŌ>pŌiliŌ,our‚³$±_ Õs„iĄ+Õsƒæ6ülÕ0ryÕ$erÕary¬iNØmÕ^dÕdrs‚Ó(ÕjeÕingÖsman(Õ6gÕ dredÖ tÕXsķō^ÖSly—!ūÖging ÖYiedÖmyą!Ö| r×tŻ~„ä)×,s‚ńW×@edõ$‚¹K×Uily×Zy×2band×Fh×`k{Ö,(n×vsÓ9gŌS m×rÓ!bbardÓ'ddledÆÆ šA‚ŻiÓuīR”ŲvsyŲ{teŁocriŲqertextāH ŁpŲYacinthŲ_dropicusŲelasŲkmnŁ3stericalŗĘ:Œ”!<eæ0’ ]aŹmŽR"iŃq„ AoŲ{0uŁ8 yÓ t†]ƒ¬{‘0ŚJdė>ŚPeŚ^yƒüoƒ <ƒ» ŚwityŚ}sƒčn„Œ$%Ū lŪsĢmяŪ7icationŪ<y'Ū!%aŪAntif‚»Jƒę-ą2ƒųcÜyŪ~ouså2/Ū['eÜ olatrŪxleŪriotÜyll…éItt‘<½Hƒ `ÜgceÜmtÜsranÜable«j‚É:ī?Ż&s‚ĖŻ,ionŻ9tratedƒƒ Ż?us„zƒłn Żis‚–-‚Ń ŽtionŻ}ry•}‚õOŽ!sŅŽ aŽ'eŽ5ing$Ž;inŻo e÷LįyŽnonŽtve‚§#Ōßly…Š?‚‘zß#ly ßdiateß)nse‡”'„ˆČßXity„„ß^alßntality ßtrßRbileß8 eą o‚·Š_‚–&ąEtientlyą?ssiveĢJˆ“4¾\ąofectąuialą{rąi cuniosity“SĻį6edį0catedåJį;iįToring„Š^‚׏įrceįxt‚©Uį~anŌ;‚¬1ā'sibleā"ed!ā-sārt‰ƒR†ßŃbƒ {‚Ń^āmeāsisationāyvāgbable ā[essionćoāaisonņ ƒ»LćOs;āF!oć+ rćTulseįZląKaįeyćb;pŽY$ agą% mą9ogenŽyitatiŠtą*äMccurateäRrtistic“NÓMäxpableä~rnationĆe­$ĻU‚‡(ŠƒFŹ;å9då?s– åX ingåDeå^udå3inedą ŗ|łaūNęleteęatibleęetent‚œ‚n ę$mpęRrrigibleę herenceęLnvenient‚š%üxēd‚Vēeē$ing„Ėz ē*asē@dibleĒ\ ēF eē_usted)åtlēe ręX oåaå"enseå(hasedå.idental…œW%%…-ĪHĪMčRfyčWty„ø*čF%%edčLfinableč\mničrpendentµfńé+nsŲZՏé?eéDingÕN…“  ée té_ce„4Ī%Ļdźly‚€5‚†źsmźty‚Əź%i ék fferenź;vidualé1aźgnationéIcatź rect‚śd‚īnƒėd‚ł ėceė,stryOčx*eźI iė2uėolence„£K‚‘"ėsvitableėy xperienced|ņ*ģ"ousģ(y‚†Sģ-mģCtuation‚ŖW‚Æ8ö[ ģily„ƒ“`ƒ³-„ø ķ sķdķuenceģ~icted‚ōb ƒš|ƒķB ationķHedŠe™|Eķ&lķNormģo initeģIaģceriorķi ringementķnused‚Ś ³?īEbitantsīKlesŸśīmanceīsedīQaīxerity`¾I5ĮC‚»0ļEtļ?ce‡³øq ļKocenļ9erļ`umerable‚śXŁ"šdinatešganicć ‚ŁT‚9š>d‚•C šDrešRsitivešX iš8est‚#™ńeńity„šj÷}„Ё Qń5eń;ity‚±u‡’'ńWdń]nceä`ƒÅ= ńceńysń~ stńAncerń0de”cžņ;tņ5cesž~č,ā'ņb taneouslyņ]ceŃ< Ż-‚¬ ó ivelyósˆ‚ó inctņhanó1rumentsóead‚ńj2ó7tņ iń*eparableņAolenógultńanņWpire„–MƒöL…Ė#ō?ly‚Ų ōEualō9s…¤I‚ŻXōlceōrtōT ectōxigenŅƒų}…‹Bõ&edõ,ing‡ŌõKly‚›!ķ/õ^dõds õiifieõQeć!ös„Ģ>ö%lyöionõ} sõ2dö+tƒÆg ‚’! ‚Õ'öd ingö^ ed‚Ūr÷ĶĖ÷l÷tionalĪm’‚ŚI÷7ed÷=ionµ77öj'est÷Crupt÷fere÷ minable÷na÷2preted÷Zvalsk÷`7 rõ llöB n…h‚ó+”.ųVlyų\teųPcy‚˜Y‚’Q‰ÆF#łlerablełxicated’}‚¹ „£Tł6d„¢ ł<ełJtionŲ‚¢łgdingłmsive łP oducłsuł1icacies‚!ł #oų3k$eś rųkimaĪ\ĒRś[ity‚×Dś`idśpuable’śvlūriablyƒüv„…]ķk×6ū.edū4ionū:sźh‚±eŖA‚©7ūkedūqingūwigatūeedĢO ū?ntüstū`rtedü&terateƒ£Séæzüfdüleü`ationsüxtüZsible¼xü, eūażiż)olve­Uˆä%‰rŽGś2‚!5tėJOdķtEfóm2sē})cż/všrquļf nļhėešoräXaļ'iquitiesļ-laidļ3mostżVwrought‚Ó ‚€`‡H’es’sžzdescent’x½A^’4y’/s s‚ŖA‚я’Vistible’\ponsibleąR‚L’bs€vocable’P proachable€ trievableų„āi€Ible€Nting€e€TitaĖ?€m r’i’:ons‚”<‚ūq-acs3bellaƒ”3™_Š’O‡&‡4Sn9aYotta‚·ö…Č_ƒīQ‚ elfŠ‹HŠN‹o‚s‚alian‚erationÕh…Ģi  ‚W y‚Qiesƒé-šr ‚] or‚sy†©^ ²cż\‰rŽG[n‚%ŠN‹ot_‡&‡4sÜYttfäy:mÜ$/drŻZ ll‚y vŚccŻgnoŻ iŚDbises« Æ{„s«F„$etÜDŠ>„inth„*k„7obean„=quemartš‡”H„tdŽN‚ g‡–|ām‚Ėq‚ļQ…s…red…$vies偳z…Kmine…Ppers¦.-… mes„Cc…panese…*r„yde…gged…Vs…pva‚µg…ķ5 †FyźR‚ƒ]†Zg†_inčR†mk†zmynē.ō;‡ingˆ‚Ą ‡1s‡+ant‚Ÿ; ²¾1‡M led‡Ss™w‚æo‡Yel‡qishØS4‡ww†L alous‡r‡7t‡st‚šhØ)ńœj­d‚š5ƒ¬:ˆ`edŖ0Æe‚Ł żQś‰ity‰ ly²ØD‰(se‰.x_£Ųd‰Jness„¶ƒ› )‰as‰Pous‰4eu 7‰g )yˆfin‰vialˆIanˆObˆTckeysˆZhnˆunquilsˆ{rdan‰urneyĶQƒ£_Šrment‚²_Šxe‹ ing‰ū ‹g‹%ith‚Ņ%‚ŗ` Ёk‹G iet‹My‚IŠ‚u¾õnõs‹{cationŒed‹uceŒfi‡Ø',0ŒiPŒ5,0st‹Sl‹+ d‹imped‹one‹AicewŒCPuŠ7oˆ4e…v-aˆCim‚ÖU‚ŃCź&,ly2nessėRŠMQs„ÖU…ŗUƒ«~%dingVerjs+p%p8n‚ō ”`ƒŠä'ÜwŽ7s[Ž+eŽ1ptŽ<yŽ%lsoŽ+nt®^‚ņƒŒb edöQ lnsį4Č‚Ć:‡— !/ly;s5ness…—É~ cs,A!di g‚œ' ‚›  ds‚ž+ e]w,nl+ssŽzdsŗ‚ī es_lõ!…ŅQ007‘00wkeltƒ‘y ‚ō,‘.ting‘( fe‘4t߁äIƒ…  ‘Xed‘]ing¾,ł‚ć…“`ƒį „÷R …ęM1`’n’ s’ledge’ing’estk’ 1`w‘c ck‘|tting‚0’Xk o‘ 7e‘Ci§*ƒi’|‚0n9]iŽJ[e“oranļ!…Qƒę“Nratory“Tur‡§‚Ąa “Zo“zyrinth“turnum“IelŠ‚ŠA”.nairełp‚½|”Fsƒé4”4e”Kk”Yquerƒ…„§?š„ĆgEE„4•EEy•ies”~en• sƒ‘ źW±-ö •Kght•QtŪD“0 •ls•VliĖ ƒüa”– ing–scapeõ=‚™R‰ūd†ŹWƒ§–Blyƒ­ –Hid–<age–Worous–] u–6tonƒāļ?—g–d—tern–1e—kų.×D‚¢$—Qis—Vseße‚“†ÄJ—tr—yst× ų˜d˜s‚˜!eģ7ƒņ+Ёw28˜Ced˜Is<˜O28t˜5h–{äoĀzƒ¬+‚ė,„„n%™ r™ly™st™nessįEĮy™Bn™Hr¶G™Ne™biced-™%e˜zch™ht…Ōa))„ąy„åj„™L†“*[š))edš"ingš.terš(s„Ž]š4[ghš_rel‰yƒĢ ÖC› s°eĒ ƒšCōI ›"s›ers›ing°#ƒb•4dše]u˜f<s™- t—rge—" n•r mp”_c›w›( y” b•@ id—\p•Fkeš|vee_‚ĖM‚Šm‚ßuœXnœRdœ^róTä2 œdeingx§eŠless#y³+ųX„Ķ Č+N ingHedƒ‰×IČ& medsing…ĀP‚ōžed…¤„#…Ģ<‚“L)ž3s‚Ē0ž9)ežGing žM0vž'st dTny p)fžrnž-therBguesī`„å/ Ÿ8gerZŸMingƒØL77  Ÿ)ŸgiesŸmyŅ:Ī/  ly lŸscčMż*¼BƒŁ& 0ers 6ing ;s‡ˆ8É  Ad cgth it®Yš_” ardus”ora™!0”3er”9rosies‚ˁ„””_on‰”es”tt”Ycaut‚¾ ƒ• äU¢! sƒ“/BZ¢'ter¢hargy‰9 ‚Tžca¢5BZtŸa77ft”zs o nŸ= d gaŸSer”on”?pŠĻi£-ility£2le‚ßG搣Pals£Vty‚Ķv£rrary£[erĖdŠƒP¤džY‡R†ß5¤/s¤#ded¤)o»VĻ:‚‹f¤Yu¤Ssƒ˜.ˆ›:hi¤tlongƒ‹„ edn¤zhie„t˜?ų6„=söV„7d„Cn„Or’ųG‚²F‡¾p&„Te„|s„ping„vningƒĢY‚ĘTƒ”uƒõ‡‹PUi¦-d¦?s¦3ly¦9nessƒ§}j¦EUie¦qingąr‡ø\§sƒ¢CśE §ac§#ies§)yą7ƒ›f§Ss§NedĪ|‚å'ī §sed§nation§y it§Yb‚„3„ƒžwńXØ4sØ(dØ.nĻ8ö<†ęZØXedØ^ingébŌ6Õ=üK©s©ed(Ø:eØdger© kØ}ing„„f©©Qs©Kize‚ŸƒŃE::ƒ G©s::s©mpedō¦żfƒ›8‚ŚdŖ!dŖ'rsƒ”ƒÅ Ŗ-eŖBing„œ ś> Ŗ` lyū$ŖH enŖf less'Ŗu$tŖ_Ŗp‚Īk‚ĪT«*ry«0tureƒ‰3ƒ‰a‡WWY«ZWWle«Ter‚Ę| z«`Yt«6era«Nheƒ…= ‚Šg‹¬d¬#są¬)ie¬=yƒę9…“ C¬Ws¬ d¬Brü+ M¬]Ce¬{ ing‡+„ nf¦wjk«v zt­M v©y Gp©#( n«' s¦&ghtØm¤cense£xb§/ l¤^e¤5d£7ab©WonŖquor‚ķ ¬)Ė$®7ed‚Xż/®Rd‚¤>Ś®Xe®jsome®ding®pth®=d®LfersÖ]̐Æ1edÆ6ionsę; Ža€)ÆS edÆYingÆ_kÆ;at­?ƒē2°ing° eėf‚Ø.°/al’qųp°4ic°Cs‚Ɂń ę6°eed°king‡Ž}ÜS©\ƒņ ±r±dƒøF†i‡ÜJX± e±3ing±9sq±?JXg±don± ely†ö ^^„ŅFF…Ī] …Ā^[‚ ±^^ed²FFing² sšs‚0²3ned‚²[‚ k²8seĻ~‡Æxy²_shipƒ„’5 ²xs‚Ąjžƒöa'³t²~ e³s³ ingšIÓ ƒ\³Ius³Ds‚·vų‚É ³fer³lly‚Źf‚ĀX† ³rd“ is“nged“vre‚¾1‚ē!Ü'‚Xst“RrƒłI “^e“sness‚Ļ& µ y“y i“Less‚®x‚¶Wµ4s‚X…ƒhp,µl“Fdµ:rµHs‚“b/µNp, eµuingäˆś8¶st¶rƒ§¶e‚¾‡/²H‚o²exyrdµ{/v±_qn³'sÆaÆxc¶3w“ u³Ot°dg°Ig°piter°_hengrin¶AyaltyƒWūT·Wy‚쐷]k·jrative–]åmźƒč ‚ė3‚ā[ øeonø ing¬bÜN¼Lø@edøFidøLksó#÷nøqless¶ƒ±¹sü1ē‚͐¹lyƒ¹ ¹4y¹%ious ¹: ur¹e_ #¹Q xø& nch·pcøRrøvstre¹ teø ggageøllømpy‡³$‰•Q¶G‡/Qo­‡+bi›JƒbOa¢Q‚T:e¹g#uŗ@ying®1lž6„ Ė_ōi»kintosh» aroni»erated»hineü`’'…Ģ~nnž]ƒż ‚ūv‚ī$$»bnne»m ness»hly»Xame»srid»]dened‚ÆvŁƒ±¼Bal„-¼Hic¼Wnificent¼<enta€ułķz½ en‚‘cėĖD½)taining½d½l½.n½$m⠁Š/„ųn‡S?_½os½ir‡ß l½u?_e¾ ing¬Iƒ»CĆ/¾3y¾-ies™dō¾Us ¾9d¾Zy¾'bar¾Otesta¾}‰~ ¾f aæl‚ł$żYĻ)æ,mentæ2ržoœW‚É‚ü~ˆ†ś4 x‰®uæusæcedæiismæoly‚ˁj‚ĖTĄ1shelfĄ+piece›Ą7elĄSle·V†ų-++‡ß. 3‚ Ąu++yæ{nerĄYtæ8ageæQdolinæWgeræ]iaĄ%onĄoufacture‚äh‚Œ Į^s‡v Įd leĮrre­ź:‚ód­:ĀetĀiteüĀ%arĀ<uerite›8åöĀ[aĀagoldĀfonettesÅņ6ĆdĆt«cƒ®i ĆeĆ0sÕ~–4ģ ‚ķt„ł)Ć^s„łPū[ĆrdĆxsƒ/Ć}eĆdageÄngćb‚óCÄ6ingIÄ/iÄ<yĆX edįtƒŗ9Äiyas×£vƒĀ@Ä~domÅs„@…ƒÅ"lyÅ(lousƒ’f ÄLI rÅ7velĮx bĆ6 kĀAgÅ tyrĀkiÄnsĀeĀcoĆLlowĆRqueterie„‚©  Ę;s„a‚¦~ƒ«sĘUsŻ#„·z Ę[pieceĘis‚”Ęo erĒ sĒtĘA kĘOsesį@č"‚“/ĒHdĒMsūĒSeĒBboxøOˆm‰“$Ē~isticČsµxƒÓ|ˆš!%Č*só-&Č0!%erČ>resses0ČC&tČ erialĒgchČ$sžtŽÉ veÉsoleumĪh‚Ķ Š”/2É0fair†HĄ{3‚ n»y$$dÅF)r¾lkÉ6/2yČ]0 tĒ$ sæ l½@i¼]g»"cÉu½hogany½djorcaÉ+ximum‚‹-‚łFśXŹ[s‚ē ƒ˜<ˆųƒ“rŹzsŹtlessƒ’$ƒ÷ƒ¢o>ĖsĖingĖtŹnest‚Š‚«PDĖ%>nŹalŹUgreĖOsureĖUt‚ŠY§ ƒ»<’mĢismØ÷Qž‚Ż3Ģ:iesĢ?yĢEitĢ4e‚‚Rˆ“#ĢvumĢ[ocrĢaevalĢ.cisĢptativeĢ| iĢallionsƒÖ)‚«l„÷ ĶPingĶVsąAĶtcholy‚“B‚ø®o‚ ‚Œ‚ˆVĪ(ticĪ"s‚Ÿ#Ī.ramaĪiousĪDyĪJdĪceusĶzanĪloĪlowĪ bourne‚ą(ŸfĻlƒ¶?ĻAyĻ;iesĻGrĻ5iresĻ]oĻ/ber‚›Š lyŻS‚‚C Šed“X Š# ionŠalŠ2one…īrJWŠ8 tĻõ ‡ ŠgibilityŠlmanŠqs‚¹‚Š/ŠwhantŃutioŃ!y„åo((ƒ¶h>ŃI((lyßyGŃO>eŃ'cŃ^ton‚†)ŅgeŅlina‚¢eÄ„‰/Ņ+orsŅ1ysicsŅ%lŅ7ph‚©Z‚¤( Ņfs„»&):Ņl hodŅQa³IÓs…Ū „ ‡ŠYJWnŃcG rĖ[D aŅz):tĻtmĶ6 dĶ\etĻ lĢ  chanicallyŅ ssaÓxicanŃ7Ī&ŌaelŌelangeloƒ÷vŌhŌ<roscope‚ŻG‚łńj Ō\dleŌhnightŌblandµ†Ü;=>Õy›d‘~÷5²}žTÕ>s ÕClÕ-dewÕ8kyÕ'anÕ3eŪõ5Õked•ƒń`ƒÜo"'ÖsÖedm„„K Ö8ral•"š|‚Ż)ÖNaturesÖTonÖZsterialå#„Ą4Ą|× sQÖ!"'d×uteÖ> eÖ`i×tż*†čn‡ķū%×[s×Ued­×ar×xurs×~ro×OandaÅwÖ+Ų,dventureŲ2nthrope‚†nÕy‚‚$ŲYableŲeyŲ_iesé#ć-ƒś_ ‚ØWŁĶ!Ł"onŁ'ssippi‚±!Ł edŁhapenŁ,i‚ÓRāCŁisøx ŁoeŁ}ingƒ‘B Ś ak‚„7;ŁFsŚ tŲkerŲ8aŁ fortuneŁlaidŚ( understoodŠ*ćƒĪ{ć(ƒ ŪedŪ ingŪture ×!Q nÕ=>ghtŚ.;sŲrŌn dÕO lŪxŌBcÖmicŚ}ttensōb‚ŅLŚ-Ü!ryÜdójƒŒ=Ü'eÜ<ing„„&ś]æ…ƒDÜdityÜjnÜ_ationÄdˆłf "ÜzrŻsÜYlĪŁ7Ż6cationŻ;ed$Ż "eŻ@ifi¦u^‡—ƒõƒÖhCaŽsŻ|ary‚õał~¶ ‡’-Ž+lyĆKŽ1ousŽ@yéWƒš`ÆHŽbs¹jƒø Ž|ousŽvanceßrŽher#ßtŽ\ieurĪ!ł„ăžS ßRsßX hßGaigneßMecß0#sßftŽ eyŽ&mouthŽFotonƒĶA Õ?ą: słJ°MąTtoneƒ¤ ąNlightąZslą@dąi nįrish‚„+ˆ“lįį.tyį(stsį4zeƒ¾_ˆĖh į9iįYsˆ„R‡¶H  ƒ…X‚‘'‚’s ¤ Å<©4āemā!uaryIį{  eāningį_ alā rowįubidā'tā oseāse‚ƒs„ō.MMNćMMtćs„šu,,Šsƒ³o‡“Kć=lessć7ed‚£4„³6ć]s ćConćcve8ć1,,herćq iŹEäs‚’¬nßä;ingä5ed’ČI‚žä^sädthäArnä#ldingä/ntedäXse„ˁĆA‚›Rå.s‚¬å(då4ment‚T åBeå[ing …#ā?IrącnŽCamentćNsä8tŻZ$ dåa vį oär uÜAckÜanŻphammedŻvist‚Ž „°_Wbęq s…ŲU\\†6‚ˆ ēsœ  % Lē)formē/plyē5tiē#es‚²įs ‚‹UƒˆY ēj edēpous’-„Ųx**ś‡“=,č**edčingBč!,murēv derčky‚ƒ½Ač[lyĄ‡üičpsƒĄ  *čaalčvian·¦\ƒ­†Č $)é)nVé/$)té *icéké#linsƒŗTƒ‹Iépteredéjilationƒé?V sē\\chč:BrévtēNlē dēfflerēdnificent‚ĮU *źfs…×t//‚§K…®1 ėousėesƒ¦Mė iė#yĆ~ø^£-ė=alėCismė)erėIicGźz//elfėbt†‚‚/‚{ėxG sźlriad›WÓ$„ ‡QeÉG†Haåw…#]oźƒuģ‚/‚{ yŪ8CięwWbrļJƒæŽwą…ˆ{…­N05ķsģ{dķless©UŠxķ,sŸķ2kinķ@les’,…Ģ3‚ƒ ķiedķ^boroughķccissusķorow“m”ī%onsī+ve…±< ‚› ’1„øD īNdīTs)īZ eīH al,īp)urī1iüŁķ 05meļ,tķ|rķFpģocreģukedļvarreļyƒ¢QƒČLĻ ļylyļser‡”-„ų\šyšilyčfƒē=š?yš9ies š#aršEitš%į)¾%šws‚œ> š|tiešqedš[ essń  k‚™WõBƒ„‚G ńDsń?edЁ¶ńfesńlrońaligencež9‚€V‚Ž#ņhoodņs…’n ņ8therņghbour‚ŁO¾Uœņ`nianāƒ©= ņws‚Énų„Ø1 ó lyónessó ousņ} eó1vņfo®(ŹEŠƒ!óawork…Ŗj00Ės®MŹ,„„.Ū4ōpapersō letter‰“,(2ōsōlyóby†Ęl ‚Zów00verō5(2wóGrļarń# cōUxtņ> ińJ edóftńygń9dņZphewó[stsƒÓ ‚·E¼QƒœKcgõ`sõZingalesš=hõfcgtŅg„ ˆ«G Ādö teenth˜ ö!eö4th’löhghö:nõT ceöleömblyöOtricę‚‡#‚ļp÷r÷st‚ņ{ ÷le÷5odyā2óJ‚ܐ÷\ing÷WedÜ ƒÓ,÷ylessly÷eųily„’ŌƒŪP Ķ9ų9 senseų.eų4 proprietaryź.øŖMųvern…‘l ų|thųpmal„§#…ĘTł#sƒ©Sł7trilsł)eĄ 0‚ø‡‹0 łUdł[paperłas…“}]]ķ:‚—č0 śdśsŅ ś ceś1fies”m¢PˆŸ ƒo„jś ]]hingłg eś6 iśNoriousśT tinghamshire‚Ģ‚ŪA•a‚ĻC ū#sū)ty˜ ū/ lūFmberƒ÷H ‡”ūc adaysŠče dˆ)śZƒo„j tūiwų?n÷; būL veł  rł=s÷bddųis÷Rcturneųjonūuvelles‚“’;Ū[Ģ&żberż erous‚»h żmüxggetü~isanceż)tsšPū}dˆ)/oō[‚Z1eöT iļ%aż/ uż\ymphs‚Ģtņp‚‰!ž&sž,thž k‡ƒ†»ƒŽ žUedž[s»%ƒ”FƒÅ6ž~d’ežxation÷D’g’*vionÄ>Ė:„Œc‚Ø)’Ration’Xe’^rv’LquiousĶm’ve’Fcure‘€olete³ŲŲ ‘€>ing‘€8ed‚“k!ža ject’/li‘€s‘€Ctain‘€[viousžOelisk„÷Ā²‘$ally‘*edūa‚ß(‘Pied‘JantsŪ-ą/‘ored‘ur‘Vp‘‚u‘0asionōļŌ‘‚6agonal‘‚<ober‘‚ c‘‚Bt‘‚1hre†”g·G‡æ<‘ƒur‘ƒrous ‘ƒo‘‚|d‚²ƒüKčHĖÕ  ‘ƒ@ed‘ƒFing‘ƒLs ‘ƒQ r‘ƒ:nsive‚˜‚ų6‘„ sÓ^ ‘„e‘„ial‚ļ2‘ƒr e‘„# ic„ˆB''‹Ż‘z’S‘„92 f‘„P''ten…Š[22·LżO„…X‘„vs‘„|yƒŽP ‚Ż~ ‘… r‘…st…ķN?I‘…$ eƒ§QO‘…9?Id‘…Give‚Ņ8ē*ē)čQče‘…oed‘…ts‘…yn‘…ilette‚‹#‚‹q‘†'es ‘†e‘†-nibus‘…car‡ūPPˆw„ŠR€C‘†ielf‡Ō-ƒ6ƒ:‘†osŠƒ;ˆĪqqv‘‡qqy‘‡ine‚»ēx‰ūu‚r‡u‘†ƒ6ƒ:e‘‡vl‘†]PPce‘†cdes‘‡1t‘‡7yxļoƒĻ„›W‡ŗ,1‘ˆed‘ˆing‚Éy >‘ˆ 1n‘ˆ& raÜbåwā&‡ģu‘ˆMs††m ‘ˆRnion‘ˆ`um‘ˆGatesĻ.‚‡z‘‰y‘‰ ies‚ę? ‘‰rtunit‘‰*site‚f‡E‘‰Rive‘‰Led ‘‰0 o‘‰Xress‚…Gƒb‘Šmism‘Š on`‘ˆ,>e‘‰o p‘ˆf i‘‡{al‘ˆAhelia‘Šti‚¼°{‘Šdsś)‘Šjnge‘Šxtory‚‚^‚ŗ ‚Č.ī~‘‹"s ‘‹(id‘‹ard‘‹estra¾„ž"‚Ć‘‹^s‘‹Xed‚µ1‘‹der‘‹{inaryŁ'‚…a‘Œ zed‘Œsm‡‹$‘Œ&iwŽ+‘Œ=an‘ŒKiesŖoƒŹO‘Œol‘Œutorąo‘Œza ‘gin‘Œients‚„ ƒĖX‘=eans‘7andoż@Ø ƒó‘bed¤H‚Ž.Š„R ‚*‚s‘Œd‘ŒQg‘‹5 ch‘ i‘Š}a‘Cl‘hnament‘wphreys‘]molu‘}risŸk‹‘‘Žqcar‘Žkborne…‘}€>„¢ Uq‘s‘wise‚ĆO„ĀP õ> ‘< elves…¤NLY‘B sõLĖP‚”Ķ|‚’G  ‘x ide‘~tretchedō…Õ6.‘ s‘bcast‘gdated‘lfit‘rlet‘!ward‚‘&.t‘TLYr‘6ght“ ƒšq‘‘ le‚€‚…-„Ą‘‘.essed‘‘(awł0‚™Ęz‘‘Sd‘‘Yrdž;ģ„ēV)5‘‘4dr‘‘_hea‘‘M emphasized‘‘"charged‘‘tladen‘‘ztired9‘‘)5 er‘‘alŅlƒæH×‘’os‘’jdŅ_Ż/ˆØf ‘“ er‘“s‘“ n‘’ue†ˆqƒĒG„I‘„V‘z’S f‘‡=‚r‡u n‘Ž‚*‚s"r‘l‚ u‘’Q9 v‘“.w‘Uqther‘Š*`p‘…MOl‘„p22h‘€a!b‘‚^c‘ƒ& d‘†< m‘Žwsž:a‘“Exford‘…ilūķ‘”ss‚—‚ģ ‘•d‘• rs‚ģ‚ų‘•e‘•'ing ‘•-k‘”ye™&‚¦[ƒŁgå)‘•es‘•_ant‘•ke‘•Yan‚ł+ ‚‰łƒņ„Ņ% ‡”7„Öh'*‘–6sJ‘–<'*r‘–0 d„…1r„„= f‘–JJe‘–^ing‘–dsƒ’‘–j ft‘–*s‘–ed‘–$fulꁑ—  n‘– d‘—4r­iįj‘—Wce‘—]teƒ‰?„ŗt‘—xtte‡”N ƒ{ĶF‘˜ id‘˜or¦Wśģ.‚»aś‘˜Cy‘˜2ates‘˜8ers‘˜>s'‘—~e‘˜l‘˜Im‘—baŃ$ƒ“[‘™s‚́ŹW‘™,led‘™2s‚ĖB‚— ‘™8l‘™Ns‘™gyricƒ’Q©‚Ž$‘™|hers‘šing‘™T e‘™vg‘štćĖ+‚Č^ ‘š=s‘šCwork‚ė\‚Ų ƒ³‘šges‘šmox‘šaiseŌKĘ5 ‘›sńÄ%‚Ž‘› graph‘š|d‘›&lysed‘›+phrases‘›1sols‘'śbƒÖT‘›zs‚éP‚ģ=‘œs‘œ ageÄm‚ū ‘œ/ianƒß‚ĀC ‘œEer‚ą!’`‘AØ„§(‘œksƒ³^ģ=—ƒŽ= ‘ ly„ųä-‘ cular‘es‘%ng“y… ˆšz8‘+i‘Sy‘œed‘Ms‘hian ‘Y8 t‘›7 a‘œ5is‘œK k‘œqrot‘›tched‘›don‘œent‘œZliament‘œ`ma‘œeodył'†ęf<<‚•gƒŒ[?‘Ÿ<<d‘Ÿ s‘ŸrsbyƒÆ= ‚¾'‚…\ƒŠP ‘Ÿ>lyƒč=ƒž-N‘ŸSs‘ŸD ate‘Ÿ8_W‘ŸY-Non‘Ÿ2 ngƒ’z ‘ŸyWi‘Ÿ?e‘ž{age÷xųR„Č@%'‘ 0e‘ 5illesG‘  s‘ :%'tžO‚š:‘ jes„.įJ‚ø ęE‘” os‘”eticą‚²‚™ ų‚ćqåV‘”@s‘”;ed ‘”Fn‘”5edā  ‘”] er‘”ri‘”x t‘”h‘ pch‘ ent‘”*ience‘”/ron›G‚ 5„Ś~ ‘¢Pd ‘¢V se‘¢Jlēsŗ ö*‘¢ment‘¢yd‘£nšU‘£ e‘£)ilionƒ­5ŅF‚€"ƒĀw ‘£Ging‘£Mments‘£Rs …‘ TGs‘—9 i‘ž #r‘˜t' l‘¢ t‘£X y‘–g‘š! n‘šH per‘¢d u‘•E c‘£/v‹QƒŌ‘¤ffullyš£Y„ØP‘„s ‘¤le‘„ ock‘¤~h±Cø2ņJ‘„5s‘„;yƒ˜h‘„AlčG‘„Wr‘„ c‘„esant³aży‘¦ly‚SłNū ŠdėC ‘¦,ed‘¦2ing‘¦'ageąAĘWƒÕ}‚ó „„9‘¦kiless‘¦qy瑦_cil‘¦wn‘¦Zalty‘¦eitence†£Ahhč`ćUå(ƒż^…æbˆ“80‘§Yly‘§SionåfŁC‚“‘§}sŖY³D‘Ød‘ØrÖOƒ ‘Øance‘Øe‘Ø0ing ‘Ø5 m‘§xatedĒf·[‡¶& ‘Øus‘ØodF‘§_0ect‘ØX or‘Ø{ ume„ĶH((±‡ņFŅ0‚ų‘©Dic ‘©>l‘©Iod‘©8dot‰/ ;ÜĪa ‘Ŗssion‘Ŗtted ‘Ŗ i‘©}anent›¬s‘Ŗ@tto‘ŖFzesć]„ĪW‘Ŗded‘Ŗjity‡µXßQ‚± ‘«nt‘« d‘«an‘«ste‚¬„ŗ ‘«Jy‘«Dies‚Ŗt‡†‘«Pit‘«fly„‰&ƒŻY,‘«lal‘¬sŌ ‚×I5‘¬ ,on‘«-i‘¬'uade‘¬!piration”T鑬\h‘¬burbed˜\“#‘¬gia‘­vians„Ž G‘©Ff‘¬-5s‘©2((haps‘©X i‘Ŗ( m‘¬gt‘ŖLo‘Ŗpplex‘­ u‘§Ich‘§Ndita‘©wles„Ģ~‚ø+ē]‘®s‘®ledŌXśgĻLƒŲV‘®Flyń"‘®$al‘®Lulant‘®;it‘®Aticoat ‚q‘­%G9r‘§>hhople‘„j a‘®[t‘¦8 er‘§n‘¦culiar‘¦ bbles‘¦!destal‘§DpperÖm  ‘Æv lafė@‘° s邤‘°asant‘° nomenon‚ź&Ök‘°Dc‘°JstƒĻm‘°Pi‘°ey  ‚Ŗ{‘°p‘±stine‚Ö0‚Ņw‘±)y‘±#icÆO‘±/oph‘±Dtratus‘±Jos‘°kanthrop‘± i‚Ź#‚Į:ą(ƒź ‘²d‘²s…™?ƒ€X‘²/cal‘²5ology)‘±e il‘² rase‘²;ysi‘°antom‘°&e‘² otographs‚ČM„š- ‘³!o‘³istsšl ‘³' n‘³>zza‚Ā>Ų"š‚½S‘³`ed‘³fingƒč4‚š ‚É1‘“ ness†”;‘“que‹žlKU‘“"s‘“d]‘“2KUture‘³lk‘³ZcadillyćKƒ‹ ‘“msĆ#Æ7«(‘µced‘µre‘µ s›Q‘“s ce‘µr‘µ2troš‚ń`‘µWsŸ.ń4é|‘µkd‘µqsś!śx‘¶ sˆńƒ‹‘¶-ow‘¶'ars ‘µwe‘¶grim‘¶3l‘¶!ier¤O‡¶ śķ‹ ‘¶y k‘¶se‘¶nacles‘·sµZ‚Ń ‘·4s±šX‘·Hachio‘·Nolōgƒģ‚øs‘·ry‘·leous 8‘“H] c‘·xt‘µ8e‘· n‘¶J l‘³D a‘·:pe‘µ]geon‘·Sst«A†į ‚’Vƒń#7‘øi d‘øos‚—DĄ‘¹ d‘¹ng;‘øu#7e‘¹i‘øcard®-‚Łƒś}‘¹Ptively‚øM ‘¹Vn‘¹ited‚q²xśO‘ŗ sļo‘ŗt‘ŗs‚ĢKƒ±‘ŗ:ic‘ŗ4erwork‚¢wæP‘ŗZsƒĘ(€k‚ć; ‘ŗ`e‘ŗnform‘ŗtinum‘ŗzoƒŌ}‚w‚›n‘»0s‘»*d‘»6r‚ę „š@…•:(J‘»De‘»X ing‘»^s#‘»d(Jy‘¹,;c‘» t‘¹o i‘ŗn‘ŗ@st‘¹JgueŃH‚Ū{ƒé‘¼Der‘¼Jly‚©nƒĶ_ ‘¼hdƒ‡;†ē`-2‘¼|sD‘½-2ure‘¼n e‘¼PantėE‘½Das‘½0nitudeœ ÷ Äv命Udded‘½Zt‘½`ughman„Ķ„™ ‘¾ ed‘¾ing„9ä‘¾ck‘¾,maged‘¾2ngedt‘¼#!a‘½5E e‘¾8u‘½eo‘½Oied„W‚„~Ēt‘æsŠ‚±=ƒ÷m‚Ŗa ‘æ,ry‘æ2s‘æ8 t‘æ&mĄ7„Bń:‡ż+‘æied‘æoing˜˜K‚/ƒŗ ‚¶d‘Ąous‘Ą ed‘Ąs‘Ąing0‘ætnt‘Ą%son‘æcgnant§=Ž0‚’zä[‘Ąyan‘Ąen‘Įm„Ż^‚—W‚Ö`„‰9‘Į:s‘Į4ian ‘Į@ic‘Į.e‘ĮV t‘Į(shed‘Įce¶}¬™I‘Įk i‘Ąsand‘Ā len‘Āo‘Āyssena˜'¤XżCŖe‘Ā^ous‘ĀX egranates‘Ādp‘ĀRander偩‘Ćd‘Ć!tusį8Ņ`‘Ć=e„Ć!‘ĆPr‘ĆBlß!üL‘Ćjes‘ĆpngķL‘Ćvpi‘Ä ularłX‚ģ%† õuń(‘Ä@co‘Ä:a ‡‡N45‘Ä[s8‘Äa45rait‘ÄFi=‘Äo8t‘Ä.k‘Ä)celain‘Ä4phyry‚ē„ān‘Å3d䂚 ‘ÅLtion‘ÅGng¤zƒŻ?‘Åjd‘Åps‚…7» ‘Åve‘Ę ionĻP‚|‚†X ‘Ę-e‘Ę3y‘Ę9 l‘Ę(ility‘ĘMib‘Ę essūÕó2‚ś} ‘Ēed‘Ę|_‘Ēures5‘Ęe s‘Ē  t‘ÅR i‘Å9e‚šQ‚”ƒƒxƒg‘Ē]ed‘Ēcing‚”7‘Ēir‘ĒWnds‘Čted‚D‚Ģ‘Č,ed„”j ‘Č?er‘Č2der‚‘Å= r‘Ē-5s‘ĄP0 i‘ĆV!o‘Āl‘æOe‘ČE w‘æcket‘Ātm‘Ču‘Äp‘Ć'n‘æ aching‘ĒQt‘Č&vertyŁ+‚Ųr‘Éely‚Ō ‘Éjal‘Éye…‚ĶA‘Źe‘Źing ‘Éc‘Ź s‚„‚Ó‘ŹJd“&‚•2‘Ź^e‘ŹdtledąK‚‘\ŁN ‘Ės ‘Ė r‘ĖdƒŒ‚‘:‘Ė e‘Ė.ing#‘Ė4y‘Ź6 cti‘ŹPise‘Źjtƒę{ā\‘Ėtd‘Ėzr“g‘ĖeĒKł]„Dƒ° ų{‘Ģ2e‘Ģ8ion‘Ģ>s‘Ģ'ous‘Ģ,pice‘ĢTi‘Ģ!eding‰ś~‚łV‘ĶredĀ+ś.‘Ķ'guring‘Ķ-x‘Ķer‘Ķ2i‘Ķ ace‚ŁH„‰b‘Ķps‘Ķjd²$ƒ†jž1æ)Ø3Ņ5‘Ī"d‘Ī(e‘Īationśl…9‘ĪMbes‘ĪRptions„‚ ²ŅBč ķ"ƒś‘Īyation‘Īed‘Ļiment‘Ļ s!‘Ļt‘Īs ce¢a„RבĻTd‘ĻZs$‘Ļ?!n‘Ļ`rve‚ŗš‘Š ed‘ŠingõƒĖa> ‘Š3ing‘Š-ed1‘Ļu$ e‘Š9 s‘ĪXcri‘Šid‘‚…N‘Šying‚ėh ‘Ń ty‘ŠendƒƒÖX‘Ń,ed«M‘Ń2ent‘Ń@iousē8 j‘ŠR1s‘Ńt‘Ķvjudice‘Ģuc‘ŃFv‘Ģach‘ĶKf‘Īmature‘Ī5par‘Ī lude‘Īoccupiedƒš[ƒü:‘ŅTd„³%äy‚€Q‚Ī<‚ĪfŻ2‚ūl‘Óitive‘Ņzarily‘Óersƒ£|‚°‘Ó4sŅ „‰‚Ė6 ‘ÓNs ‘ÓT le‘ÓHal ‘Ó:e‘Ób ipŁ0Ż6‘Ō ed#‘Óx c‘Ōtó‚ž?‘Ō4ed‚ßh‚ŚP ‘ŌHate‘ŌNilegeH‘Ō # n‘ŌT v‘ŅZce‘Ņhde‘Ó m‘Ņnest‘Ō9son‘Ņtg„Š&äƒÓ^‘ÕCy‘Õ>e‘ÕIl‘Õ8ilities‚× ‘Õ]ab‘Õwlem“lÓzęO‘Öng‘Öon‘Ö$ssi‘Öeded¬]ĀSćx‘ÖYed‘Ö_ing‘Ödur‘Ö:e‘ÖSopius‰ū" ķSŹ6 ‘× d‘×"s‡—FĪ>‘×' e‘×<ing‘×Btionõ&ĒW…ĀI‚—v‘×ts‘×nalųj‘×zion‘ŲorÓāw‘Ų.s”<¼i‘Ų@ies‘ŲFy§ ‘Ųess‘Ų3it‘ŲLligac‘×hanation‘ŲbuselyéĖŒ‚ XX„Ž Į.‚(‘Ł<ed‘ŁBing‘ŁHong‘Ł6etariatÕ6ƒÕh ƒ€S‚Ķ6‘Ś d‘Śs‘Ś se‘Ł{nentlyŁ Ī9‘Ś<ng‘ŚAon‘Ś"i‘ŚFotiŃ‚¬V‚ØR„c ‘Ūy‘Ś}ies‚šV‘Ū t‘Śwly½āC‘Ū6sied‘Ū<tĖ‚ąt‘ŪXed‘Ū^s‚‚0‚†3„‰Q‘Ūsß  ‘Üe‘Ūyal‘Üing ‘Ü s‘ŪdrtionÓ‘Ūer‘Ü8 o‘ŪAhe‘ÜPrietary‚±W‚Ž ‘Że‘ŻpectsŚ&Ė5‘Ż%ct‘Ż*sts„³ˆ‰‚3ˆ“‘ŻMd‘ŻSrbs„ĢÓ, ‘ŻqdŌd‘Żw e‘ŽingĪR‚‰>‘Žs‘Ž d‘Ž$sionÆ‘Ž2i‘ŻYe‘ŽIokedŽÓ‘Žnlingi‘Ł0XXject‘ÜUp‘ŽO v‘Ś\m‘×Gduc‘Ųh f‘Õ} b‘Ö{ c‘ŻGud‘Žtw‘Ł_l‘Ż0te‘Ż s‘Ł%grammes‘Ł+hibition‘Śrofread‚žoā7‘ą)ssic‘ą#denceƒ÷{‘ąJingƒD‘߁i^o‘Ń_j:e‘ŌnHi‘ĖL#a‘ą/u‘ąPy‚¦ƒÆ~‚„‘įcal‘į sts‚„< ‘į&i‘į>y ‘įD olog‘įicalƒ÷cƒ%†łC‘įration‘įxly‚ŖM‘į~c‘āshed÷)‚Ęw„Śq„ØI‘āAed‘āGingƒ²@‚¦i‘āds ‘āMl‘ājse‚Ė1ƒŗ,ėk‘ćed‘ćmentĻZ‘ćsh‘ć6tive ‘ć;i‘ć ctualityŌƒ›S‘ćts‘ćzpet‘ćnils„Š ‚ō: ‘älyƒ¹<É+‘ä3ication‘ä9y½ ‚€L‘äYismƒŠ= ‘äoy‘ä_an ‘äu t‘ä?fƒž2½V‘åle‘å$oseņ4ˆf2‘å*p‘ä$ e‘å i‘åAsuit‚‡W‘åod‘åusżk‘ęing‘å{e„Œ\ƒ‚R …Ś*7‘ę0 ting‘ę*s‚Ū* $‘ę6*7t‘åF2r‘ābli‘āx l‘ćS n‘ęsh‘äp‘ęOzzled‘ā6ddles‘ā;ffsåp ’^‘£|… a‘ą^ƒDLr‘Æ ‚q_e‘Č\‚^o‘¾\t7l‘ø80i‘ęU$0u‘²U)h‘įX sych‘Æ{ g‘ē7yramid‚Ū5‚…‚ļkƒ‹- ‘č6lingųaƒ–. ‘čMs‘č< rel‘čR ter‚Ź_õ‘č`r‘č0lities‘čxtorze‘č~y‘č*il‚ļ} ‚ Iƒ¤ųuQ„×9‘éEed‘éKing‘éPsˆH‘éVstion‘é9 en‘é?rulously‚†z:‘ź!ed‘ź'ingƒ£BāS‘ź-en‘źDly’>×W ‘źblyču‡ŅElll‘ź}lleƒ©Jķ3ƒ‘i‘ėed‘ėing‘ėlt‘źJck‘źh et‘ėver‘źwnzeār‚žj‘ėgation‘ėledG‘ė4 i‘éwe‘é a‘ėrotG‘ģ G"u„ƒ¾w‘ģ@d‚Ÿ‚÷~‚Ś{‘ģZs‘ģ`cal‘ģTance‚‚y‘ģni‘ķleyˆ«Ź# ‘ķ#e‘ķ)gedŽÅ°C‚Ē+‘ķQbow‚ĢPžM‘ķgd‚ŪR ‘ķme‘ķzing‘ī s‘ķWn‘ķKment‘ķElingsņYŽ^‘īAed‘īFing‚Ė_ƒ‡x ‘īced…`‚Ó5 ‘īi g‘īxk€5„ 3‘ļly².‘ļid‘ļ)t‚„0„ ‘ļDly‚ņ „Œ‘ļ_h‘ļYcallyč+ƒ®‘ļ}s„Ń//ƒ‡³Zƒ„K‘šdI‘š//her‘še‘š#tle‘šional„—CĄ&‘š]lled‘šcnous± ‘š1It‘ī~ n‘īi‘ķ/ g‘ģFce‘ķ d‘ļ/p‘ļes‘ļJre‘īLk‘šive‘ńyed‚JĒk‚“4‘ńsed‘ńyingĪ‚ĻRŪfƒĪN ‡ņ!3‘ņ) y‘ņing‘ņable‘ņ#sˆ«ƒ»W æIõƒ’G ‘ņld‘ņr e‘ņfation!‘óz‘ņ` ty‘ņZsm‡ķgg…Ź)1‘ó6ggly‘ó!iś=”h‘óTed‚Ųg¾Źs…ü $‘óhable‘óned‘óts‚‘ó<)1l‘ņ/!3d‘óz$son‘ńch‘óYppearÄCń_‘ōQsƒŖńk‘ōWn‘ōdus‘ōjlioĮJĶ[‘õd‘õel‘õukeÉQ‘õ9ed‚Ó'‘õ?ll‘õLpturedŃw‚Ø3…‘]‘õqdĻF‘õwe‘öing‘ö v‘õlptĘ‘ö i‘ö5ntlyļNļj‘öRed‘öWingųqģ„£a‘öyness‚́—/ƒ”— ‘÷d ‘÷! ze‘÷tionƒ¹*‚²:‹,/ƒˆI‘÷/ gni‘÷Gllection‘÷Yrd‘÷Mmmended‘÷S nstructed‘÷_vered„ƒ32‘÷e o‘ö;e‘ö~kless‘õRa‘ö\hristen‘ų5reate‘ösite‘÷liningŌŲ_Ł$‘łng‘łon‘ł#i‘łeÖL„Ÿ)/‘ł9istribut‘łMressed‚µUµS‘łulikeó ‘ł{d‘ś led»8Ö6‚ć_ƒ®6‚¦<‘ś3d‘ś9mentƒ¤Xō'‘ś^ion‘śXed‘śdorså-‚„\‘ū ationĆFēV‘ū!ains‘ū'eshedƒ‡+×t ƒŗ'ņ …o ‘ūYdÓn ‘ū_ e‘ūming‘ūSals‘ūs s‘ūN nd‘ūHge,‘üu‘śilect‘ś?ine‘ūorm‘ś.erences‘ū-r‘ś(ashioned‚°ž"‚ņ`Ś‘żstered‘ż mentŃC‚Ó]Ī7ƒ¹  ‘ż:s‘ż4fully‘ż@tedĖ:‘żF ret‘żi‘żarded‘żent‘żjulating‚‰[Ÿa©hę1‘ž5ed‘ž;s‘ž@n‘ž/gns½O‘žksūJ‚×y‘’ed‘ž}der ‘’oin‘žqection‚›,„’;‘’:hipŠƒ  6‚Šƒ¾VĢ&‘’bn‘’hus ‘’ngio‘’\ef‘’Vable’€ i‘’@ations‘’PeaseäN÷(ƒ¹3‚”Z’€Oing’€Us’€Ied‚ž:»g’€|e’ing‚—‚Ü ƒĪD ’$ed’able’€[in’* rk’kŠ ƒåWƒÆ[üP„Ÿh/’ged’ming’ss‚‡/1’x/er’‚rance2’‚1mb’bdiesƒ†3Ķ%į„Ā’‚Ped’‚Ving’‚\sßJ’‚ad’ƒiscences‚€‚¦RÖ-’ƒ/d ’ƒ#rse’ƒ)te’ƒ4vek’‚82e’D a’ƒin’ƒ@ oļŽ’„issance’„ medÆ-‚ˆÄOßG’„8s ’„> unciation’„a’„,dered’„2ewedę ‚¢¤a‚Ō+ ’…ed’… ingtķ>’… at’…/tition’…)ntanceŃNŽ!’…[ment…Ś~ēQ’…pied’…`ace’…vyš$ŁHÅ&’†ed’†!s£eć’†=ons’†CveÜp¤>īH‚Ćd ’†Hati’†_ed’†eing’†ksĶVÕWƒķr’‡es’‡!ing¾k’‡'ach’‡@duce’†p esent’‡FoķX…ś(’‡ws:’‡_ r’…{l’…4e’‡|utation’†&ort’„~arationÓ"’qŌT×; ’ˆVments’ˆQd ’ˆ[ ire’ˆLest‚‘Ł<…ŠK#āj’‰d±>’‰arch’‰$rve’‰mblance’‰2ttlingõx‚śƒøm’‰wst’‰qgnedąŅ&’Šutions’Šved‚Ć3‚˜“b’Š<ility’ŠBleā!’ŠHab‚ÕM‚Ī7’Šqilities’Šwleü’Š}b’‹ve ’Šcect’‹onsi„›Pś9ų »lйDßT ’‹drictions’‹Laurant’‹Red’‹Xless’‹^ored‚¤‚¬t’Œ+sƒ˜’Œ?d ’Œ1lt’ŒEme.’‹j t’‹3 p’ŒQ u’‰8e’‰}i’Š!ol’‰ cue’‰lhaped‚†Ń‚ū^’>red’8cencesģB‚ÉAĮ3Ņ+ƒ»' ’ded’jing’ps’u urn’Di’2ain’_reat„Ńp „ŠU‰Õ]’ŽA ed’ŽGsƒ“iĢ~Ć:’ŽMal’Ždlation’Žorie’Žjnue„|ၽ’)ist’.val’#ewsėßy’VedńA’[t’jver"’Žue’>i’oolėa‚ØF’"edą-‚.’6e’;ing’'ard’AritÕ† ‘ō‚a’ƒ`km’ˆ :p‘ų;2c‘łS)/d’Œg.#s‘ü1,f’"v’Ž t‘żo g’€% l‘’ j’ˆu qu’„K n‘õ"b‘śe‘žUi’Ww‘ž)hearsalØ.‚ŖR’’eims’’ymes› ‚“w’’Asō"„ž’’Xons’’Sed’’^b’’Gand«sƒŗo€X°.‡æL’“er’“mond’“ ard’“ness’“#h’“Rkety¬‚“{ö#‚’/’“{culous’”ng„Ø"’”i’“ue’“oden„Šv55™Zļ#’”Gini’”Mmed ‚æB‚ÆCW ’”ws’”king’”qlets“>ų,Ńqƒ‰%’•&ening’•,ple‚«u†ł’•Ns‚ģ.‚éBūO’•hing’•bing’•Te’•nkŗQģl÷Z’–!al’–&er ’”A55ght’“Xc’”!d’•}s’”} ng’’ub’•2p’”Sm’–+v’’;ario’• o’–tual‚•l‡%’—/d’—5r„?‚’’—Od’—Ur¹L©!‚Ņc’—od’—us’—{e’—[be°Ør’˜&he_’˜,ksÉg’˜Ie·!„ū^’˜[sˆ¦kģV’˜om’˜utsƒ§` ’˜zisŗ`,’˜ace’™ tic‚ŗ}Ŗ ’™7o6’™,an’™= eˆMļfß’™fs‚Š/‡‰Nfk’™ys·‚Ž)’š sq’™fkm’™lf’št‚×_‚·$¬D’šClind’šIry‡æ" žcƒ·; -’šg s’šmttes3’šs -e’šOa$ƒ›a’› ting‚5‚ż ’›7ly‚ųŽ+‡‘PR’›Lly’›Rs`’›XPRnd’›= gh’›osed‚¼1„ēL’œs„§\Ó ’œ)ies’œ/yĘ ’œ4t ‚d’š!qo’›u`u’™K6 m’› 3s’œJ yal’—;a’˜b’˜Od’œw’˜2c’›&t’™`ndes’š=peķĢEƒń[’Qng’Wsh’]i’Ked¬…#’žes’žnstein°^ ’ži’sb’ž.yƒĶp‚¶ž@ŸD’ž\lesłD…Š‚Ģ3’žrby’žwged’ž}s‚±L…’6 ’Ÿ"ed‰* ’Ÿ( n’Ÿ7sselant‚ @ƒōa ’ŸWsņ@‚‹(’ŸkdŗgĮd’Ÿed’ s’  our’Ÿqble‚ó„² ’ 8ning‚„‚œh ƒˆp¢1 ’ U ed’ [ingƒé|’ a h’ ztleö=ž  N’”s’Ÿ= i’ > n’ž4 b’Ÿ] le’  m’”xton’Ÿg’žVe’žbff’žPde’ Opert’”t‹b’o† ‚e’œX‚d8o‘ń /a’–A*i’” N(u’’!hĘ^ꁚ*’¢Uing’¢ZsŪ‚“ŗ5Ž{’£s ’£ifice’¢|ed’¢vament ’£ r’¢`kŖ5‡µP’£Ule’£OenedƒķEƒB ’£sly’£[d’£ynessģ8ŲM ’¤ ty†Źh‚‚ėM¢‚”A ’¤As‚”‚•"’¤G or’¤Us’¤<edś&‚Żw’¤{s‚’¤4‚‚d’¤[l’„nt‚삁Ģ@ƒ¢ō1źm’„Lt’„5ad’„;e’„Alow’„Goon…ҁåOäV’¦uineäE’¦g­°Y’¦+s™ ­_’¦?acen’¦Edius¦‚Ģ*él’¦kwood’¦es‘7ƒź‚å:’§ied’§ying’¦qn’§sf’§ režJ¾N’§YiconƒūP2’§5i’§_yr’§Surnineƒ„=ƒ˜’Øntered’Øcers„½p’Ø:sĪ‚• ’ØNd ’ØT e’Ø@ageō„¼^,-’Øxdust…ŗ2„‚4„żL`’©s’©ing„m’„‚i’©`y’§n2 t’Ø},-w’¦me’£~ d’Øb v’£; c’¤% fe’„/ke’„Ql’¦n’¦1pphire’Øu’¦Kr‚ˆ,”āo ’Ŗ@sęgūf’ŖTed’ŖZing ’ŖF dal’Ŗ`n…‹ƒŅ<’«let’«f’« celyĢ0ƒ;’«@ed%’«r’Ŗw n’«Etter’Ŗ:le‚øYƒŁ3 ‚½8 ’¬ s’«|ryĄV‡øf’¬ed’¬ e’¬%tī0ī5’¬Hism!’¬4n’¬Mptic¾æ=Ź;ƒ¦F’­y’¬oksųvŠ‚„]ƒž] ’­ bo’­'room’­!girl’­-s ’­3 ol’¬ylarµ(ƒŁW’­wbert’­}mann’­` o’®u’¬seme‚Õ} ƒĮ- ’®A tific’®; ceż‚läj‚‰O“-’®pndrel’®vrging’®|u’®`lding’®eoped’®ktlandƒšzĖx+’ÆGmble’ÆMtched’ÆSwled„°V‚“~’Æed’°ingźP’°"en’° amĶ,ƒ÷h’°(e’ÆYa’°>ibbled’°Dupulous’ „„RćP’°lpture’°yffling’±rf ’«T% a’¬\!e’°J r’®Gien’® h’Æo’± uķ(ƒ -‚Į ’±uing’±pedƒ„7’±{ch’²edƒŸwƒŚ ‚ŽX„Ž3’²6ed’²<s‚˜+-’²r’²Bt’²0son£qŽv„Œj ’²s…ƒc‚ś$ƒØ& „Ļg)3’³ s’³ary4’³%)3t’³cyĶ>Ųf’³RsÉE” ’³de’³jityN’³=4re’³ ond’³Wtion’³puråkš ’“6s’“1edˆŖlƒ‰D„‡”!’“Wing’“]s‡¤7xx…˜F„śL ’“{xxed’µsƒ½N))‘s‚Ņ1†”D}‚\’µ m’µ))n’“Qing’“ck’“<d’µ%s’µ+thingćs‰4’µwe‚:“I’¶ ed’¶ing ’¶z’µ|n‚š6 •B‚ˁĄ‚†D’¶Med’¶Sion’¶YsÆ’¶_ct’¶~niteūW‚ü=’·nessƒź.’·"ish•h-’·3f’¶A by’·e’·Ctzer’¶GdomĻA‚—R†Ē’·{ing’øsƒ „ŗk ’øsƒŖ^‡“U"9’ø2s‚‡6É ’øFble’øLtiveĮ8‚¤’økal’øqousK’ø8"9e’ø$ ation’øwu’øRiĆRčw’¹6sÖ~‚Ęn’¹Iists³0’¹Omental’¹`nelsƒˆ ’¹<ence’¹fix’¹K s’ŗt’ødƒü’ŗ7d‚„N’ŗ=e’ŗIion‚恤ƒķe„óU’ŗqly²Q’»s(ƒß9’»sĪzē’»,d‚ūH‚¾n’»@ce’»Flity+’»ant’»Li’»2eF’»d+v’ŗwious’» pent’ŗkaph‚¬hÕ’¼.d’¼4s‚õF’¼Ning’¼:e…š? %’¼TtlĻ‚Ź’¼yth%’¼een’½h‚«5 ’½t‚Æ ’½* n’½8 raléw’½>e’½TresŖt‚ĆoŌ†’µ1}‚\ e’ŗxn’“N c’¼F r’²Y- a’·I- l’¼j %t’½Zv’¶- i’ŗOparat’½vx’²ybastian’ŗequence’½pwn’½|ześ[‚™C’æy’æily„Ž,‚Ÿ}‡ž/‚ć@ ’æ?s’æ9ed’æE ow’æ3e³U‚ŗO‚Ö{ ’æwspeare’æqn‚ā ’æ} e’Ą ing‚‘ƒų’Ą4ness†˜^Qb’Ą:owŒ|œ/’ĄZd’Ą`sĪCƒ¶’Ązful’Įe’ĄfbleČƒ„ ‚ćz‚ŠZ’Į, d’Į2süaÕs’ĮNd½wĮ ƒ’X’Įgness ’ĮTe’Įmp’Įaing¶-’Āed Y’ĄKQbll’æ\d’Įm’Į8pe’Ąk’Į~ r’æbb’Į&n’Ā"wl‚’=‚…@5’Ćr’Ćp’Ć tƒ¤+‚Ų’Ć.l’Ć4vesŸ5ł’ĆPard’ĆVry„ź:ƒ/ƒ;’Ć:l’Će’Ć[rÉ"ég­DĖ’Äe’Ä$yõ3‚•)’Ä>s‚”t‚–{‚æ!’ÄQed’ÄWsq’Äted’Äzing’Ä]rt’ÄCp’Åver’Äeld’Ä*n’Ämmeringœ%ž^„Ė?ęu‚÷č[éK ’Åming’Åher’Åss&’Åbk’Åx tƒši‚č9ƒÆ ‡“/…š ƒ« ’ĘD s’Ę>ingö,…šlt’ĘJer’Ębné<‚]’Ēed’Ēing’Ęhtld’Ē t‚¤` é ’Ē9 d’Ē?red‚ä;„Š< ‡ēf„Āk '’Ēa n’ĒE e’Ēgs’Ē[ingv’Ē"u’Ēm 'w’Ę&o’Ę8 t’Ę2rt’Ę,p’ÅVd’Å\es‚ŒĘhņu„©8  ’Čo ll’Čieksƒ‹n ‚×+ ’É ed’Éing…š( ’É g’É/ ug’Ču i’Č]ank’ČcedęķCƒ˜P’Éeed’Éking”7š‹V’Źed’Źs‚Ē4ē%’Ź1ing’ŹerŁq’Ź7t!’Éqdder’ŹPt’Ź n‚ā ‚­L’Ź}ly‡]’Ćrƒ/ƒ; e’ȁvo’Ā/Y"a’Ź^! u’É= r’Å i’Ėy‚ÄrUU„dę¶]‚ØK’Ė_ed’Ėesƒ U‚ƒøO ’Ėken’Ģly’Ģness’Ģ k’ĖYilian‚Ńc÷$ƒėk ’ĢIs’ĢOwindowsņ{’ĢT e’Ģpledū1ƒš>’Ķ cle_’Ķgeƒ€i žHƒŲ0’Ķ4ed‚š? ’Ķ. ed’Ķ9t™i‚Œ&õ+ƒ™-‚€u ’Ķqs’Ķeed’Ķkifies-’ĶH h’Ķw n’Ķ_ismondoƒ­j üƒč’ĪBly‚ŅG’ĪHt’Ī< ce’ĪWusö%ų ¦‡œd’Ļs’ĻenõH…÷z’Ļ(y’Ļ"inessƒźzX’Ī]en’ĻFver’Ļ k’Ļ.l’Ī{houettedØƒÆ8’Šlyļ’Šar’Še˜oƒŽc‚‰T„ā}))3’ŠC))y’Š7e’Š=icity7’ŠI3pl’Šil’Š1onetto„Š0ƒ…’Ń rityģvųf’Ń#d’Ń(ing‚·6ķ4”g„X’ŃNton’ŃIness‚·}’ŃTe’Ńoy³pįl’Ńul’ŃCing’Ń-e’Ņ ularä‚Į?Ćj’Ņ@sƒĄ\ƒ¹Pl’Ņ g’ŅTs’Ńce’Ņ:king’ŅFner–G‚‚W‚‡’Óing’Óed‹;’Ó p’Óhonsƒßq88‚›6 ÓD…Č;ƒĢR„Ņ’Ógs‡€l’Ó{ing’Ómer‚‚+‚š’Ōs…–<’Ōt’Ōuation’Ó\e’ÓasƒÆRŽ<šw±V’ŌWeen’Ōiy’Ō]h’Ōcus‚«U ’ŌotƒŲx’Õ$d„?’ŅZln’ĻLX l’ĖSUUbyl’Ō,<t’ÓP88r’Ši7 m’Ī- g’Ģ1c’Õ x’Ģud’ÓV ster’Ó7p’Ķe’Õ*ze„—>Še„„-’Ö7ing’Ö=tch’Ö1ins‚)†čr²X’Öees’Öklfully’Öqns«„— ’× y’ÖMe’Öwi’×ullÆA”)ƒ–v’×Rder’×Xtingž{‚’i‚Öv‚Öe’Ų s’Ųryė  ’Ųve’×Lin’×^n’×wshed’×}ughter’Ų$y»xƒ·Ąh‚‘G ’Ųming’Ųgers’Ųsless‚ƒK‚™4’Łs’Ųy p’Ł$veéR›]’Ł2e’ŁMw’ŁGpt‚­Ē6”Yƒå ’Łvly’Łpest’Ł|sōp‚ƒD’Ś#y”„ŻqŒw’Ś<d’ŚBrs’Ś ght’ŚHppe’Ś(m’Ś6nking‚Ńj÷ƒÜ/‚’Ūly’Ūer’Ūw’Ū pingƒ›sēq’ŪIggish’ŪOmberousĶAP’Ū2o’ŁS e’Ś] i’Ų) a’ŪTu’Ūryćƒ„R’Ü,est‚Ž_’Ü1ll’ÜArt³·ųk’Ücing’Üill’Ü]ared„Ķ#‚Šv†č<,’Żd’ŻsƒŪ%@’Ż,e’Ż2ingą<¹0‚£’ŻNe’ŻSing’ŻYtenC’Ż8@l’Ż_tņ'†‡‡³’Že’ŽingóO’Ž%k’Žcked’Ž;oth§6o’ŻC i’ÜGa’Ž@o’Üxe’ŽayrnaµJ’ßsņ9ź’ß(ped’ß-sėw‚ēs’ßke’ß2p’ßHred’ßMtchedņh‚i’ß~edå\h’ąed’ßSa’ąeer’ąow‚Ӂō2‚ŅB§Bórƒ‰’ąKbing’ąQer’ąWieski’ą]sį„Ā+„‰4’įety’įal’įology’į#i’įFket–@É5’įhden’įbaģ‚ž( ’ās‚‹Dźć’āly’āened’ā a’ā#t‚æ(øcšBÓuĖ‚˜‚˜’ālsĖ!’āror’āgationĆ‚ē+’ćary’ć ude’ćcit’ć&t‚Öq ’ć>i’āaemnly’ā\d’ćTveƒ~‚ÉL„żC…Ä:~~„灒ä~~hing’äimes‚ż ƒƒ5’ä< at’äBere‡‚Jaƒ’ä!t’äHwh’ä body’ähowƒ’ä_aƒe’äbreØ]‚ŖF‚ć!’å-s³‚ś)’å3net’å'g’åAorousƒņh…ł}’åker™’åqn’ęthed‚ĮF‚ׂ…W„µo å ’ę/ s…š/0’ęCy’ę5 ow’ę)ierüg…™’ęhsN’ęI0r’ęmt’ędid’ę#es†ßˆCƒæ#„Ī\DG’ē.s’ē(eve‚·iśQƒ—* ’ēLed’ēRsˆ5‚Ÿi„MĢr’ētern’ēzwarkn’ē4DGl’ēW nd’ē"ght’čth’ēnpirƒ¤’čMtyß*‡õy‡C’åƒ m’čn u’ę{N r’åGn’ęo’įLc’ā<f’ćZ l’ącb’įnd’āPiled’čSvereign’ąEared’āVjourn’č`w‚ļ+ęs…“k‚… ’źdņ^ƒér‚ņ ’ź e’źks’ź!rows‚’ź' r’éwce’é}de’źnish’źIsmƒ”ƒų3’ėingÓ’ėk’ėr‚«'„v’ė1lyŁaÓ’ėKed’ėFc‚Ś'ī ’ėes’ė7al’ėkmen’ėPfiė;ƒāš2’ģsßd‡īe’ģ2s’ģ8tor’ģ$cleęT’ģFa’ģ^ral·r’ėxi’ģct’ģk’ģyulation‚°J‚ЁŃl‚‘j’ķ5sÖV  ’ķI t’ķ;dC’ėa’ģc’ķO n’ķ)eches’ķ/ll× †b’īinxes’īereē6öeęR¶bG°vĖ+‚¦Aū’īis¾ ’īoe’ī{ingĆy’ļz’īcty·b’ļiƒżg ’ļ.ual’ī]edÓc‚ńe’ļUe’ļ[ted"’ļ< rit’īQlled’ļat’ī:ces’ī@der’īEed’īKkenard’īWnels÷0ƒ”Qōs’šRly¢8’šXid’šgourõą#’ńed’ń s ’šmend’ńinter’šMashedƒÖ2 ƒŽV’ńI ed„£:„¦v’ń^nåaź+‚­q€’ņted’ń|s5’ńdke’ńOil’ņt’ńron’ńwrtż9öj’ņNed’ņSingƒ›’ņXwl’ņoy¤ƒ¤e’ņua’óing’ó eadę ’ó6ed’ó;ingĒ M’ķcCe’ņ5 o’ļw"i’źO a’ór’ń# l’ī h’óAutter’óXyƒ†^ƒ”r‚ĄA‚éU ’ō;sōE ’ōA re’ō/bble’ō5nder’ōOt +’ōed’õingœaę'’õ"s’õ b’õ(leƒ™<õ8’õJcato’õPksŹcƒ‡ Ž ł@åuß/’öe’ö ion’õr e’önat’õxgering’õ~inessƒš‚ę3ÉLƒ¶0’öTed’öZing’ö`lessĖRßV’÷ case’÷s’öfn’÷r‡/‚¼#’÷@k’÷Flsā\÷sņc’÷ged’÷ming’÷rp’÷amered“ ā"„„!’ų'_ƒĘ3ƒ«n‚ŲX’ų;ing’ų-ard’ųAs‰`’ųGd’ų!ch’ųizasƒq‚½/å £{©{’łed’ł%y„Ė"†åTÕ‚ęL‰ū8’łFed’łRled’łLingƒæĆ6’łXt’łed’ł@s’łing’ł+r’ł{ve’łlit­5‚–R‡*’śKiness’śQyŹr‚Ż$’śosÜyƒć4 ’ūs’śWl’śtment’śEd‚Ģ#†(’ū0tteÕF’ū6e’ūFs'’ū e’ūKu•'ƒ‹BƒčƒÅF’ūing’ūyed R’ś6 r’ū_' t’ųon’÷,i’üy’ö%g’õ5b’ų m’õUc’÷Ll’ūsveley’õmffŠmƒq’żfastly’ży‚ၻG„iƒ’u’ż9thy’ż-ing’ż3sōz†=’żfing’żaer ’ż?l’żd’żlm©cƒ‰*‚ģn’ž%l’žds’ž+plechaseƒšl¤‚€[’ž[medƒĀLƒÖ  ’žqed’žwing…˜‚Ź(’ž} p’’s‚“tącši‚˜m’’<ly ’’An’’0eotyped’’6ile6’’p’’P r’ž a’ž1e’žam’žUllated³‚āI“€-sŗƒ‰ƒ­e“€Ged“€Ming“€Sl“€Af‡Kƒ_03“€~ness‡¾ź«“ed“ing“!ups‚®H“'r¦R`“03ll“Hr“€jf“€3ck“Vtchedā„Į“‚s¢%ŸšO„“‚-s‡ˆz""ƒŲjƒ•1&“‚A""d“‚Mping“‚Glƒ•^—*“‚red“‚xingƒĢj “‚~pīo„¶F “ƒ#d„ó~÷g„Å& #“ƒ) e“ƒC y“ƒ7ies“ƒ=m‚ąOßO“ƒonessó} w“‚S&o“ƒI#r“ƒ p“‚3ne“‚ck“ƒuut“‚!len“‚'macher“„ve‡W’v„Ņh “„hened‚–WŽ\äv“„ed“…ing“„n ght“… n„¤ »ƒ¦~Å †÷O.C“…9 ly“…Er“…Kst“…?nessÜƒŗ“…|dJ“…Q.Ce“†leƒ¬iēb“†%ies“†+y“†0berr‚‹Iƒ‰hä,“†Ued“†[ingc“†Jng“…#i“†Fw“†ay“„bgglingƒ–j‹6“‡+ed“‡1ing‚ĄKƒČo“‡Nsƒ®‡˜M‚ĢA)“‡Tet“‡htched“‡7am“‡bngth“‡nwnź{Ļ“ˆ*ken“ˆ/t„dƒę‚ķ“ˆPe“ˆVing¶#ńGū\“ˆxedƒŗ" “ˆ\k“ˆ4c“ˆ~p“ˆJdes“ˆrngs“‰ ve„O“‰Ld‚™9“‰Re“‰^ing‚żm„åF  “‰zed“ŠingÕ\ƒŽ…Š“Š%ly“Šer“Š+ng“Š ll“‰dkƒė< „³“Šgdģ “Šme“Šying“Ša ck“Š~ggl“‹ttedH“†yca“‡t)e“ŠC o“‹u“‰ iꁫ‡Ń »Q‚łb “‹zing“‹tio“Œ y“‹ndedó7„²~ƒ„ …–O“Œ@ity/“Œd“ŒFpid“Œ4mbled“Œ/ff“Œ:ng“‹ickæˆ…z“sĒ…`’üRGa“‹<H>r“„ wo“\`i’’t6e“ŒV/ u“yle‚ņv“9×`ˆšZ“ped“vs½kŹ1ƒƒõ ī:Ł,“Ž*e“Ž/ion“Ž5itut“Ž$ance“ŽKt“Žcribe“ŽequentƒłDÉ“y“ iesƒū“t.“,tle“|ject“Žes“jaltern“Žmission„›^‚łw“ved“|ing…ĀWė\“ful“ed“ssˆĖ{SS‚¶u“Jing]“DSSh“.ce“Pk£4†åz//†ü[ :“‘//ly;“‘ :den“{ariaöA‚×0…i“‘/ed“‘5ing”M“‘;er“‘TicientåW„ƒAƒłe‚Ö “‘yed“‘ion “’ gest“‘tar•ØNøhģļ~« “’Bable“’Hed“’Nsˆr“’S t“’6cide“’<s“’uvant‚‘5ƒĶ<ƒĶV““1y““%ily““+s‚$‡“A““Uly‚©““jous ““7k““[len““pphurƒźšx‡¾V “”%s‚ b“”* r“”dÕ1“”8e“”Nonedč=“”Tm‚“Kƒ„^“”yeams“”urntāf†s„Żz  “•* ight“•$ess‚£!°T§w“•Iet“•Otoneń“•0 l“•Us“•b“•dayၺ0“–ly‚”<‚ŪY“–+argo“–1iliousƒ£uā9“–b“–7c“–Sficial“–Ystitionsœ\‚Ć.“—d“—rŠ€S“—.ce“—4es§#Ö"“—PsƒE„ū#$“—cd*“—i#$se“—Vrt.“—w*o“—e“—:liŚt‚Æ18“˜ . p“–^er“˜*remeŸN‚Žx …Ŗ !.“˜X lyĀ‡ū“˜ms‚b‚³ü,ƒˆ< “™d“™ s “™ rise“™ass½a…ˆv‚˜=ŁG“™Aed“™Ging“™MsÕc“™Sender“™toundings‚½ƒŗM“a»*“š%d“š+e“šal“š9iv“šeyed‰LN“˜^!.e“™( p“šNv“™zr“˜sface“˜Rcoat‚˜b“›"edĖ[„_“›5ded“›;se“›(ct“›An“›Xe“›micions ƒ>“^] c“šfNr“‘;d“˜08p“:.b“•o n“‘Zff“”km“’{i“’ g““~ l“›sspāNƒé“œys“œsedŹhžEė/ƒ™iśJćA“$ed“*s “0y“œllow“mp“rthy“thed‚ˆn€‘ “žed“|r“žtƒ—Lö7³k‡§z “ž1er“ž7ness “ž= t“ž+p‚™>‚Ļ_ö6“žW e“žqpt“ža“žwrved“žkll‡“O“Ÿ-nessœyƒŲo“ŸHing“ŸBer“ŸNng“Ÿ3ftē3ģ“Ÿ{ed÷l“ on“ re0“ž| e“F a“Ÿei“ o‚œ}‚ćUŗ “ Tcal“ Zze‡ś“ `iÖpˆ†„‘4“”ze“” esˆ† “”i“”-y“”eticæu “”3 ath“”Rhonic“”X p“ wbolĪ ¼}“”r m“ Nbil“¢ stem“¢nonymous‰Š'‚Æ$’ˇ]oh’čfy‡CPo’¾†te“'…`Zt’©3„mCa’Õ6„?]i“œ ƒ>u’ó^M\p’±1 ?c’Žgom’ŪxP)l“ *0!w“¢y’×& k’ą& n’ōT qua’¢O_¹t”AƒŠ;<“£gsčV>“£m;<le“£aernacle“£{ooed聎=“¤&or††d“¤:ed“¤+l“¤@ntƒĀƒŒP„“A-B“¤bn“¤hsƒŪS“¤n-Be“„ingē…õn„Ą‚Ķ/ƒō *E“„,ing“„&ed“„2s„Ž!J“„8*Ek“„Yl“„ e¢,‚ƒƒŖ²)“¦agra“¦gled“¦ nhauser»[“¦;sīxŹ“¦Mies“¦Sy “¦Ystr“¦Ar„8 “¦o e“§pedŹL‚å}īo“§!nished“§'ry“§-tuffe„•‚µr“§^s‹“§de“§ring “§xt“§Xselled‚ŠPęz“Ø'ered“Ø-ooedƒŒ ¢U“ØL ght“ØRntĘ.óq‚½“Øzy“Øuily¦“©dr“©nyŅqĶ“©2es‚“„ Sk“„_Jl“¤>b“ØXu“§ p“Ø s“©7x“¤Mi“§2r“©w“Ø2tt“¦n“Øovern“„{mperedóėd“ŖCing‚” ƒ‘ƒ‡m“Ŗ^s“ŖXingƒ‡H/“Ŗdr“ŖHchÄ/“!„æh “«lyóv‚¢`ŲC“«3m“«9phed…™j„œ)…‰\r“«Ving“«\st“«b\rl“«?egra‚† ‚åD “¬s‚Œ0‚‘q“¬ ament“¬%ed‚É^“¬+r“¬Fst²=ƒ›Eƒ¹“¬gsą“¬mation“¬Le“¬{t“¬ale‚š\„Ąc“­)derness”AŠƒr“­Is“­Cedēv„¶m((…8“­i((e“­oyƒšJ‚Ām“® ies“®y=“­u8bl“®f„ŗ.[“®+=i“®@or“­dacex“®F[ r“­Om‚×k¦fĶw“®ile“Æure ‚X“®ex r“«ztl“Ŗ|/a“­  mp“­/n“« dious“®yst“«.eth“Æ xt“«chnicalņ‚ė8Ļ? “° s“°ed…ö{“° kˆ°JŠ`Š`‹f“°9Š`Š`t“°*{nā>ƒƒH“°Ys‚œ“°_e“°micalųS‡£+‡ņW“±s„ŽI……\K]“±&selves‡žsńu‚ ‚Ō“±Ty“±Nies“±Zr“±IlogiansˆÕl‚S‚SˆŪˆŠ7‚A‚A‹  žeØN“² ‚S‚Sre“²‚A‚Ay“±,K]m“±ir“±An“²se“°satr“±po“± eö`éY“³t“²nedĒa‚›` “³ e“³ly‚Ė(®c“³<f“³Bves‰÷p‡Żwz“³^s‚ßL …ŖR‡”b“³w ing“³}s‘b†‡hƒ“³fwzg““k““ning‚¼Z ü}Ø$‚Ž*  ““W y““Qeen““F d““] t““Lst‹Ž EE„““"ƒn“µEEs““sr“³% ck“³He‚ą: ‚ĒA燶 “µObury“µUton„ä “µuoughly“µZnˆų^BBĶ<ƒóvƒĮˆ‚ U_“¶&s“¶ less“¶ful„€F&“¶,U_t€zƒó}“¶^thł  “¶O&gh“¶dsandb“¶s u“¶BBse“µ{ r“µI masŽ}ń;ƒ©n„É( “·Ds“·8bare“·>ingF‚ˆb“·mened“·J d“·stƒŌ;ģj 5“øe“øa“ø wƒę4‚ę “øFll“ø@ft‡C‚µ> “øbedƒ²G“øwbingļĢ+‡ŗRVW“¹out‚„E‚±…ų“¹,n“¹&ingv“¹VWugh“¹2w“øh at“ø}b“¹ neƒ˜a‚Šx  “ŗ t“¹zh<“¹Jv o“ø$5 e“ŗ us“øLiÕŅN“ŗFs“ŗ@ nderstruck¼T“² žeØNe“°A‹fa“µ„i“·bo“ŗ<r“ŗLu„§3“»$sé‚Źs“»Bing“»<ets‚‡ŪQ„Į,“»`d“»frRńK“¼ed“¼ingć?‚×d“¼ en“¼$lyģ$„·G„—O“¼Ming“¼Gl“¼St“¼Bed‚ötƒ±r“¼~_†łmn“½s‚ÕA“½ne“½!idlyēG‡ ƒšZō“½Ky“½@gling“½Etoret–ź$“½vped“½|toeƒŲƒņu“¾d‚äa’{Šƒ‚ŒF“¾@ed “¾:le“¾.an“¾Fter“¾4he [“½'m“¼al“¾ re“¾S t“½Qn“¼*ght“»Hck“»le“¾p“»*ara“»6beriusŚf99®H„3„ö5čp‡”3…²/MM“t‚¶|“Ąs“Ąb„Lƒī5“Ą.d³‘ “ĄBsśv “Ą4e“ĄHgue“ĄVic„„k""†Åj “Ąz""k±ī‚Ŗ'Ģ  “Įic“Įped“Įazes˜:ƒŒ+‚ųEĒ/š‚»‚Čwģ$“Įnure“Įb_“Įhoise‚ųL“ĮJe“Įtt“ĮPies“ĮVn“Āy“ĮDch“Į\pidƒŖ†—(“Ā\ed“Ābingƒ²`„£jƒ®=%“Āed“Ćing‚»Ü.ØI(“Ć %ch“Ć$jours“Ć*rneur“Ć0t…‹I«T… “Ćcards“Ćo n“Ćier’I‚ä\“Äing‰Õm‘“z“Įj o“ĄMMld“Ć6(u“Ćuw“ævgether“Į p“Ā r“Ą[ n“Āhss“Ą"m“Äy“æjad“æpe“æ|ilet“Ąkyo‘Mń'“Å9dø9ėr‚ˆw“ÅRed“Å?e“ÅWk“ÅLingŚ Ė0‚õ“Ę an“Ęen„³y“Ę mark“ĘsmƒėU‚¹&“ĘKy“ĘEies„^ !“ĘQed“Ęg ic‡\‚ “Ē n“ĒlingČƒāōBé“Ē2ed“Ē8ing“Ē=l“Ē,ing“Ē&ed‚‚5Ń Šj“Ēybe“Ē~ptionö ‚µ“Čd“Č"s‚Ó,“Č<ormed“Č(igure‰²¦< “ČBf“Čcri“Ēsaction“Č^late“ČdparencyšAõ“É&pings‚ē‚ŁA“ÉCled“É=ail“ÉIelƒ„s ]“Ęm!g“Ę+de“Čj ns“Ē i“Åfc“ĒTmp“Ény“ÉWv“É,p‚č2‚Ž~“ŹIley£(‚ļVŹm„ ‚‚: “Źns“Źced“Źiment“Źt t“ŹOd“ŹCcherous“Ź]sures‡½~“ĖDsŠ#‚ŸnŁ¼# “Ė\d“ĖbsƒØ;“Ėh e“Ė~ingĻ[‡¦/ “Ģly“Ģbl“Ģ  ulous8“Ģ/m“Ėa“ĖJe“ĖVllisų“f„›n™…Lƒ£7‚ĆY“Ķsƒģ“Ķed“Ķumph“Ķ&vial“Ģtbes“Ģoangular“Ģzckle“Ķmmed“Ķ pos‚Ņ=ķńƒ²% ‚–b “Ī d‚Øx“Ī e“Ī,ing恢p“Ī2bl“ĪHsers“ĪMville“ĪSu“Īd“Ī jans“Īop„Ÿ\ˆ;11ƒ™|‚ˆ'ƒÜX ļ…™[“Ļ=sE“Ļ%11e“Ļ7 st“ĻBth“Ļculent“Ļ+mpet“Ļ1nks„“ ƒ³z&“Š ing‚7“Ét],a“ĻPEu“ĢH8e“Š&y“Īw o“Ķ, iƒ‰\ƒÕ)‚Ėf“Šgs–9å7“Šyers“Šing¶(µo“Ń"ed‚Øq“Ń(an“Ń5id§ū@„¾66ƒŁv ±4ƒ¾: I“Ń]66ed“Ńc ing“Ńis§/„— “ŅsV“Ńo In“Ņquoise“Ń;b“ŃQkish“ŃWmoilź‡“Ņ[ck“Ņ`ree“Ņ$V r“Šaesday“Šmlip“Ńmbl“Ņfsso“Š[bes“Ńnisians‚ż~ś „€'“ÓUy“ÓPieth“Ó[nt“ÓJlve‚Ź3ēČ7‚ “Ōed“Ō ce“Ōsted“Ō!tch“Ōlight„ßv@@i“Ō\@@o“Óre“Ō.iŽrĪw‡ü{ “Õs‚£B‚ē&“Õized“Õyƒ™w“Õ"ann“Õ9ian“Õ pe“Õ?r†š ƒ"ß“ŗi¼T_h“Ä+‘“z0o“Æ#‚X0e“Š&‚7ar“©E‚;a“¾|['i“Ōbi w“Ņ|eu“æe99m“ÕWy“Ō~xtÅ+ˆų “ÖZ y“ÖTiness—C‚ĆA“Öxster“Ö~timatelyāM‘ž>ųN“×- ulterated“×2vised“×8d“×'bleßt‚Ų<ƒ„U“×sarable“×ycoming “×e“×narredēlĻV“Ų5tyė’]É0‚żK “ŲUanČƒ’ƒŸf “ŲplyU “Ųv scious“Ł trollableƒ’_“Ł n“Ųjmely“Ł,uth$“Ų[ le“Ł2o“ŲIhanged“Ų:ertain“ŲOivilizedź0‚v‹Līyƒx…£`“Ś'ingƒ°m '“Ś-and“Ś= oodŠ„*?“ŚC'st“Ślip“Śgrowth“Śneath“Ś"rate…“A“Ś[?er“ŪisturbedųĪWˆ“Ū:ducated“Ū@ nforceability‚Ś7ƒÅ “Ūsortunate“Ūmairś`‚×?µ ōJĖn“Ü(ed“Ü-ook“Üappy“Ü"eededĖ0‚Ŗj‚„G‚Ø"Ż æ“Üx ted“Ülon“Ürson“Üaform“Üf nteresting“Ü}versal„—V‚™aƒø‚GƒĮMŌ1“Żeke“Żknkņ1ä“Ž cked“ŽadingēB“Ż_ess“Žo“Żpi“ŻYawful“Ž-ucky‚ø‡’I“Žgved“Žmwnčkˆ† É‚Ŗ\‚‹2“ß ardonable“ßictured“ßoetical“ß" unctualityēM‚Ļ “ßiityķu “ßol“ßsonableąƒģT “ą ea“ąipe“ą#omanticžM‚äI‚†“ąTen“ąZlfishˁ×'ƒŠ “įtted“ą~iledš}ąF‚Āh “ą`e“į po“į$tained“ąNatisfied“ąyolicited“į)ullied“į. ympatheticģ^ż “ārnished“āsted‚ūg‚É,£“āFl“ā@dyģq•G’Y“āfoubled“ālue “āLi“ārr“āa“ā:hought“āaouchedÄJģE“ćBisely“ćHorthyˆ:\“ŪA d“ŁS$ c“Żi“Ž2 l“į4 s“ą) r“ć t“Ų b“Ūyf“ŻMjust“ŪEe“ß(p“Ü<h“ŻSkind“×Xa“Žsmo“ćNw“Ügainly“ß  necessaryЁp†ß=VV„f‡‰Fč‚™“å:tairs“å5et†ć‚“å#VVon“å@s“ådated“å)per“å/rightƒ„*†”((‡ß×‡Ū“ę&nessÓ;ŠõF W“ę((d“ę,less“ę ful“ę=r’[ƒ˜C‚ÉW‚ā/“ęxly…(y\“ęB We“ę~ual“ęring“ęmhered‚Ø ģc‚Œ7ß4“ē<ance“ēBed“ēHly“ēNterĢI…b“åY‚p“ćj\mn“ē y\ s“Ö`gl“×l“ēqt“×"mbrellas“ęrn‚ā‚Ś…>“čXlyß …ŠP“čmly¬?‚÷T“ét“éntinois‚́Įk„Š9 “é-d“é e“é3 ue“é'ois‚Ž‚Ć{::ÓnŽƒó  “éwty“éllla“éqshedH“éf::e“é} i“é`deleurĶy‚„b“źEous“ź@etyƒˆ5“źced “źKi“źinish‚Ń|~“źHn“éAl“źv r“črin“č^gue“čRcant“ė tń/„s‚§>“ė[sČD‚Ā]0“ėus“ėoed “ėal“ė{nŖ ä“ģ&rium“ģ,squezÖ„_‚ƒf“ģRs “ģXvet“ģ1a“ģLlum„…*×s“ķsšb‰W‚ÕF‰%“ķ etian“ķice“ķgeance“ķ%tured“ķ+us‚ŪHÅ|„·@‚×Zƒ•‚‡“īilion“ī outh‚³Ødłq“ī2s‰ū“ī8e“īFion„ńC||“īb||y“īLs“īm“ķsdict“ķyge“ī,ona“ķmb“ķities‚“GƒJ„/“ļ=ige“ļCments“ļIt“ļ7sel‚×P‚ȁ;“īh r“ķ1n“ģ i“ģf l“ļcs“ėUgetables“ļyxed©DŁƒ²T“šTing“šNe„mˆy“špsŪ(ƒÖ “ń s‚É!Ūk“ńa“ń"es…“xź “ń(i“ń=y“ńC or“ńim“ńYt“šve“ńious°¦zÕ'Ó‚ål‡ż “ņ$s“ņed“ņing“ņ* w“ņnna“ņille«YõQĶi‚æN“ņrness“ņwrå<¢u“óge “ņ}e“ólaä1ųCT“óDgar“óIe“ó?aigretteĪrąß‚ø=“ós“ōt“óynce‚·1„š “ō)s“ōe“ō/in“ótates¤7„ć~ˆq “ōcsŠI “ōi tue“ō]gin“ōwusŽ|›3„‚ ‚䁬3‚Ł%“õ4ed“õ( ble“õ:t“õ.on“õIi“õage“õ"contiœ9¼3‡ēP“öity“öl“ö e_‚‡gƒ±7“ö;ly‚©C “öAd“öPsecting¬8 “ńo c“ņKe“õhs“ō=ol“ō| r“ó* l“öV vi“ö&ta“šZbrat“óYn“šHands“ņlii‚čüV„ØW/4“÷gs“÷alessƒüh6“÷m/4ce“ųdƒŁ\Ń“ų's “ų,nteer“ų!me‚EC“ų 6i“ų8 lu“ųQwą†Ä)“ųtity†X“ųzgar“ł tures„“ļ;)e“öp?i“ė~a“ųWC o“łul¹eņ,‚“ “ł`s‚Ɂ”$“łfgon“łtner‚Ģ{ż ‚æe“śs‚§V ‚‡@ “ś. d“ś4rƒ™ƒß'“śNing“ś: e,“śT't“śnscoting“ś stcoat‚ä ‚ę.‚®C“ūed“ūing»} “ū nƒś,…‹n ĶcƒŽv(“ūGed“ūM ing“ūSs¢k¶>„É9 “ūs“ūyed5“ūX(k“ü l‚Ąv‚¶J “ü6ing“ü0ed®tƒ¢e“üSd“üYsą ƒ­@‚ķm¢?„œ…ų(i“üxed“ż s“ü~ing“żonĀ“żit“ü< der“ü_e“üsing‚Õ0‚Č‚Ło“żmour“żsrobe‚–9ƒ”c‹1ē;“žly“žed“žth™ß=ƒ“L“žKs“žPing“žEedķ Ļ Š4“ž{ies“’yƒ¢L“ž^n“ž$m“’rant“żyd“župed“żgbled“’s‚ķ{ƒŸDÜ“’qd‡Ąˆ<ˆJ“’kn“’wte“’ehƒ°‚ŽH”€&d”€,rsƒ€0 „ŚL/”€2e”€G ing䃤6ē[ ”€js”€ebury”€py<”€M/ch”€v er‚Łń‚Ņƒ½' ”8s”-d”3ring‚ŸY ”> e”_ing®y÷s”{ed”‚y‚€ ‡’M07”‚s ‹h”€ˆ<ˆJs“ż; n”< t”‚!07y“ü5l“śl,i“’!r”e v“ū9 ke“łzg”‚x“łZferŲs‚£;”ƒ st”ƒnłkėW”ƒ&e”ƒ;ness‚—8…Q”ƒXy®²3Ü›n‚Ņl”„g”ƒ~ess‚Śt‚¶ ”„ n”ƒxly”„ some”ƒredį#ńp‚© ”„& i”„Qs”ƒler”„Wy‚Ö5åa!”„\ r”ƒ^lth”ƒ@k”…ther”… veÜ=ÓO”…Aster‚†.‚¼U”…Wed”…]ingōY‚”…zdĄ!”…cd”…ge”† nesdayćd‚čv‚“ ”†:s⁆}ü”†Ning”†Ss”†@ k”†Yp”†5ds?¬N”‡ed”‡tƒŒ8‚ø8ˆĘ2DF”‡/ed”‡5s„Žu??ó\‡˜_{{“O‚¬]”‡fern€ …¦ 1…”‡^{{re”‡;DFll”‡R??nt”…!a”†qe”…Gb”†d”‡lst”‡igh”‡|t”‡Xptó…!й:…³Lƒƒ&”ˆpever”ˆvsoeverƒ'”ˆ|ƒƒ&t”ˆkrfčB†Ä‡ä[_”‰9everƒ„ …É9=”‰Rver„‹c ‚)”‰?[_n”‰X9=re”‰h ther”‰4el‡³N~~ƒüóYƒĢ+ē{”Š&per”Š+sš3öo”ŠMpedĢY‚Ū ¹ß„Q”Šf ed”Šling”Šrsų”Šwper”Š`kered”‹tleƒÕ4‚”h°H”‹Hd”‹NssŻI‚‡;”‹ies”‹oing„Üg:A”‹Bchapel”‹Tne”‹uwashp”Š~~ch”Œ :Ate”‹s”Š le”Š1m”ŠRp”ŠHned„¹$$ˆĻs††x‡¦A..‰“Ed‚T”..se”Œu$$le”Œ{m”rls…’\\Šp”‰ƒ'a” d‚To”‰n‚)e”Œ3pi”9\\y‚”{ƒ˜ ”qd”wrŽDĖKĶ~ƒŽ”Žr”Žst”Žning„÷må ž‹‘ ”ŽJr”ŽPst”*‚é )”ŽV e”ŽmlyļƒŲ]” ness‚Š<łIžT”&sü …ć)PT”+oughby” is”9s‚”?PTl”Žs)d”ful‚”rĪ”ed” kelmann‚£ ‡—N ”- s„U‡¾< -”3 ow”Asƒ«3 ‚Ó„Č”js”dedŚj…Øu ‚WP”G -d”^ e”‘ ter”c”pg”‘some‚‰ņE”‘Led”‘Ring»L±#ƒƒ,”‘nd”‘tlike‚ž{‚ß/‚ŃHƒĢ0”’d”’%s„ęB+1”’+e9”’?+1h”’e”’dom‚–>ƒŸ”’ked†ŽnˆŻ@%%Šŗ…C…”“%%out”“in”’qerž’ V†”“ …C…h”“0nesses”“6ty×ƒ“, ‰A”“<†t”e‚ l”‘P n”’M9s”ŽDfe”} cke”Ž"de”‘zre”‘Wp”“cves”“izen·&‚ź7++ƒā-BBm””cBBen””]++an„Ål ƒÓ„ `:@”•lyƒ›# ƒ£l„ƒN(”• :@ful”” ed”• ing”• s†ˆ.  ”•&(der‡S÷Gƒśt¶gL‚ųZ”•pland”•dbine”•jen”•vs”•|workē}”–d”–:lč\ƒŪl ‚B…Ń;”–Z s”–Ted”–`y‚ƒxŅ7‚£ƒÅ/”—sgŻN ‡ēn[”—+ s”— ed”—ing”—%manship‚s‚ē…śD]`”—fs”—`lyĒĪ[”˜edƒ§>ƒĪI’”˜ied”˜$y† K ƒĻt ÓC‚§t ”˜F ped”˜LsƒģY$”˜R hip”˜@ e”˜jt‚5… ”™y ‚f”—0[k”—l]`ld”–f;d”˜p$s”™ th”—e”˜n”˜ m”˜*r‡« ƒm…ń‚4‚8”™xnó~‚¦M”šed”šs‚?”™~‚4‚8ld”šnd¦5‡O”™"‚fr”š/‚?u”•R  n””imm”–@o”™r tton””Wke”šHven—Z‚Æ^”›d”›"r”›(peĻ$†‡"ļQ”›Os”›Iedń5ė$”›ledńPŃ7‚ŗ>”œ tched”›Uath”›qck”œnched”œsting߃„@ ßo ”œQ dĄw ”œW e”œding ”œj kl”œLgingŸ?É]”bands”s•SƒĘo”<sņqĶ1ˆĘ &”Be”[ ten”Uing”Phed4”a&t” n”$st‚ˆ~„ćW”ž(sƒ•ėK &”ž.ng”žB ught”ž<teƒŪe‚õ\r”ž 4i”žH&o”œe”›<ap”žiung”žoyŠƒ-­c”‚/‹hSa”?Šp*h”“o‰A:i”šN‡O8o”ˆ1…1e”žur$r”Ÿ,ww¬.§Q”Ÿvi”Ÿ|v” ičöäe” 'sä" ” ,rd” "cht” 9wned†ū}))ƒž 4” `))söāWƒžh” ~ow” ted” ying‚ņE …Ó4Ua””$ terday„ŽHHv””*Uas””=HHt” f 4ar””llŚƒøv””jed„“> ‡†<HQ”” er…ŃC%%ćs+”¢%%elf†ŁX‚”¢+sżƒŠc%'”¢:sŠ”a‹kŽf”¢*X‚r”¢HQng”¢@%'thk”¢N‹kŽfou””Cv e” > a””pieldūq¬x”£#angu¶4”£)p”£8thers”£>i”£ele_Œƒ<”£m»æthe%…,“Õlƒ"߃8tŒŅBĘ@„8aŚŗ‚?hƒ²c‚\i“¢C‚Æ$ˆis”Ÿ2­c‚Kw‘“K„I@oģ)›Wƒ*mˆRšGƒTbė–i†WcŽÆh–O„Vd‘a •gƒHfŗF•Q‚[l‘ē<’^…Wp”¢rky“`Y‚1gżbnŽÜ@‹zƒe’¢‹bƒRr“ē…bu“ł*„v“ ƒi7kŒ~wOj‘ģ2G#qŒ[CH_Œ„o0B1Œ† 2Œ†2 3Œ†f 5Œ‡Q8Œ†E4Œ‡6Œ‡+7”£VzŒƒk0” x”£sļminimal-http-server.c000066400000000000000000000062201357643561300351320ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-fulltext-search/* * lws-minimal-http-server-fts * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates how to use lws full-text search */ #include #include #include #define LWS_PLUGIN_STATIC #include const char *index_filepath = "./lws-fts.index"; static int interrupted; static struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_FULLTEXT_DEMO, { NULL, NULL, 0, 0 } /* terminator */ }; static struct lws_protocol_vhost_options pvo_idx = { NULL, NULL, "indexpath", /* pvo name */ NULL /* filled in at runtime */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_idx, /* "child" pvo linked-list */ "lws-test-fts", /* protocol name we belong to on this vhost */ "" /* ignored */ }; /* override the default mount for /fts in the URL space */ static const struct lws_http_mount mount_fts = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/fts", /* mountpoint URL */ /* .origin */ NULL, /* protocol */ /* .def */ NULL, /* .protocol */ "lws-test-fts", /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_CALLBACK, /* dynamic */ /* .mountpoint_len */ 4, /* char count */ /* .basic_auth_login_file */ NULL, }; static const struct lws_http_mount mount = { /* .mount_next */ &mount_fts, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; struct lws_context *context; const char *p; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server fulltext search | " "visit http://localhost:7681\n"); memset(&info, 0, sizeof info); info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.pvo = &pvo; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; pvo_idx.value = index_filepath; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-origin/000077500000000000000000000000001357643561300335655ustar00rootroot00000000000000404.html000066400000000000000000000002271357643561300347040ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-origin

404

Sorry, that file doesn't exist. dorian-gray-wikipedia.jpg000066400000000000000000005141611357643561300404000ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-origin’Ų’ąJFIFdd’į•ExifMM*bj(1%r2—‡i¬ŲB@'B@'Adobe Photoshop Elements 4.0 Windows2011:02:22 09:59:46 ’’ 1 L&.(6WHH’Ų’ąJFIFHH’ķ Adobe_CM’īAdobed€’Ū„            ’Ą j"’Ż’Ä?   3!1AQa"q2‘”±B#$RĮb34r‚ŃC%’Sšįńcs5¢²ƒ&D“TdEĀ£t6ŅUāeņ³„ĆÓućóF'”¤…“•ÄŌäō„µÅÕåõVfv†–¦¶ĘÖęö7GWgw‡—§·Ē×ē÷5!1AQaq"2‘”±B#ĮRŃš3$bįr‚’CScs4ń%¢²ƒ&5ĀŅD“T£dEU6teāņ³„ĆÓućóF”¤…“•ÄŌäō„µÅÕåõVfv†–¦¶ĘÖęö'7GWgw‡—§·Ē’Ś ?ōŹźcÖ1”¬h­€Šö©4{GĮ<$¤p”2BJa ”L¦ILa<'NJc ÓĀb’–I$’RÅ2r¢’Ÿ’Šõ6}š Ó3č7ą8Į׃¢JQ#Ać B7×ĻŅ0>ņßūźÖµ¶³qŌ‚Dkv^MdI©ņŃńGäIMß_Bā ķR•œÜƒ³Ēk@=õƒ»ū*ėݳ ƒ€ )œØŪ“U>ė²ŗõ{¼ƒžü›x:*Ł$ه”Į©Ųńa»’SRļ­8ĶÓ‡ŚGw¹µ·ĆŸŅ¹U’œ™×:)Ŗ¦Ļ“ž@ÓłLńżÅĻa #®ē6†²’?œ’ēx vķ9%/e•œ‚żÓ  ķ¬ī³žųØ>’F§ŗĒ6 ēķsž`7čĶæIgU”ē¼Ėµ‰{yžŖŹė÷Ż—Ō†#aĶŖŗC*H÷_iž¶ß¤’ž’œĢKčs±/mąGŽ›˜C_üėR‹¤;™Ō€jęśK[^EŌ²ŗŲ×Pv– Ī;t;¬ŚŻ«¢ÅąņDÉł’äRRgióUh›ąžu–7ä}æõ*ę‡ļU0–ø’܋$’jSĘōęW&‘óī÷W¢Ėe{yLD’½mP ]_*³ČĻżKš²-.eļkæ{_†čII:}Į—Öė 1ŽŅ7 {;Ÿ Õ vkCF†¶ļxÓļ Ų?7č*­±µ»éjščtI4K2ķ½ĶŽÖļh,.e§śŚ$§®śžʶ³Č{÷•Šģ\×է՝‚~ł]'ØS’ŅõŸc~rYģwŪN¤ĄĮ§Wnž®åÕ·č7ąÖóZüūĢĢ<€<›ģożJJi¬|}¹ĄĆG}?ļېoῨŠģŖ¶ć†Ł{œa‘²ĒĮ}/ŃūÖf{Ϭu@ ?ņHvį<ćŽCKnĻŽMķžÓ’SŃQÖńšś­˜ĶÖ¶°g—XęW·wų/Kž»ź-Wõ·±Ķv4lh°nė?J[ż†[®Žt$ßÖ]F-ø¹4Ę1cŽņ>—·Ž’3×ó·hk@ŪÉ’9 ž­˜ĶĶcŚ÷ŗĆķWsż•X°4Č[ŖO¦Ź¬ ¹…Ž"CH#Bcžś’—nė°óŻĘ8ÜęūóV~mA¹6»tmy{œéWģ–õ wžkĄ®{]’E:·}° ‡8|A t$§6öX_Z@‘ŲŖļĢEŲZėŃŠ ńŸkµ…ĢčŃŗū¤ż é?Eßē”ÜāÜ·q.H׳))č~§źŁ®…’GÄĖOżÕź¹?©ŅŪ^Ƭ5Śų·ž©ui)’Óōö˜cO€ Ķ3ģ{³²H\ķ³’Aæō—¤Ł»Švß„²ń"’IyGW½’n·¶“{ģ-‰žQo·čžźJB×ĶŽżęTmõr.i×e`ģa‰ü•{¦t|ŪEłuV6ŗ§ht:5÷±®kę³jYx×a±¬°;‡5ņ9÷™żķÉ)ȰŽ‹”čueP=W3md7mŚH>Ś’{čæ{=«‰%¬ˆ³ĒŸēnZnŹÉlŅĖ+ žmĄg{ś^ķæł”ō>»\ż¦Ö3·é$ūœŚō;އ}ÅäǹŒŠßō½Ļś X¶ēŽŹŹØ¤Z÷Hŗ “½–Ū¾ŻĻwę«-ĖźwXė,ŗ†µĄ)a!Ä’Ā=®~’å1%62FŪq\4 N‡Üw ßēż.Øršé#sZ@ų1ģw¢Ņ^ė“9Ī> üßĢŁé§źõ+~ŁÜĒGbŅ×øiŽIN=Žmoyö‡ ?ŒØY}įf» éęV²($ęŠŖq7øDH’’’©Ö‡å9ĆIan¢;ų.¾ ä~Ø·õ¦†ųp» ©)’Ōōė4­Ń٤¹xžuķūuאū ¤÷ÖóćW°‘5G‹cļ Ėz§Hs²¬©ŽŽöøø“Ä“žė\>žéüśŅRż?«:ŠZÖcXśni%”•’)XėyŲoŁkŚ[em¹ö½ßø×Öļkmgļģś %½2ŚŖ}”īReõDCGÓŪgŃŽĘź5¤GJĻ}š,eõŸ{ĶŽ ²ZĻZ¶Õ[=›+ÆōąRS‡½ēSÆpźŽ÷¤5äCŽ£ū_õg=—=µ+s„9Ś4OęĖö#7šŲ]u퓹Ä5»ņ›īŚ’‘×WØ6±ŅēÜ Gē}/ĶWŗv×Ü\] ±ī!ž pgųMØķ§„aXX-79Õ}¢‚=®°ķez²¶_ü‡¹F¬™{öŪśrŅ(nG²Ąų»[a{[³vļŃ$¦ŌW[/cüĮoŖŠ$µĄh×+ō‰gśiiŌ“u™ żßź*xłM­¢ēÕ\¹»ĪŒ$ū­Ū¦~ć»}ŽVߓŒČ›%ŽÖ‘©×é$¦c8Č|˜#Ą Ś÷[øR6@˜?GŚÖż$öu+pŚ,§V±®{Ž­kvKĻųĻSҳž 5wu š¬cńÜ֖–=ĄŗHśBŗē;Ÿš~¢Jt>ŖČĖcĄ;\kŒZę—µŪ‡µŪæ‘łėÆÜ!Šģū>N>Æk^kH%Š5ŲŲmæ£ż’ęæįU¹%?’Õõżüä\ÖwÓÕo,Šd—¹ßD=Ģi~čüĶ›ģō’?bōc~qæYZ×_c^Fö‰tjAwŃnÓ¹®öæoöŅS@õjhi6:§ģ°ĄsZgMŠßüö±mĄź8ö?ЦēÕ3U¬i“ūšKéwķ+KFĶ›€i’ęĢ ņßÖS¦Ā÷Loqåŗ~čŚ6¹%!Ƶ8 Ø,'CeĻ-†æGaŪ·óßŗµ Ź+ČuŒĄm®pk['Gl‚ń]Īķu{ŽĶŹN”¦ĒōāH€Oͬ÷œ‰‚×ӘĖ,öVN×ŗ €ļfń?ÖINUnøÕ/h{D5ī~ AšĮiśߣ³żģ}ÖĄdiµ³Ūoņ½žÕgØ7:›Ż‰šąėqŻśG¶6¹Ä5ķ“ģżę} ßA> ¹Įļ‚Ą$䤧W«š±Ę>u…ļ€$ 0=ĶŃæį’P­db?#„ćēÕ¹ž .mv9°Ė]éūv]KwķśkžĢhvkė’AÕĀKÖÖø”ć0U„_–š7°›öµĒŃŗĻŅ~‚æ„źĀV’œ³”q^CššG¼¼·Ü%•³ł-ÆōŸKc÷©;Ŗē–5sĘčÖ¶Š›æ2 ¦ŚØmopcZk–ŌZDh!‘'üūšżłeaĒŚLĻpēcbJw¾¬geŁŌqö46ĶŅšŠŁ€ķ}›w}Ī]¼®źĆŽ©†Š.s  æźX»©)’Öõ6}š ™śÉŒFA°Iõ[«6čcĻęŗjžƒ~eõšĒćzgn¤Ļ XļĶjJ|źźŚ‹ ŸoŅGƒZ«¾×Vv5­ ƒķ:óš;Ķ[O C«ƒ06ˆŒĖŸė±e_Ua”“ŲšłĒŗĒ¤rJk3+ß¾ĆohDÆļ+¬ĻsšĘ4{7DA~žį“9SōČqü‡ē½M€0Č:8rŅń))µö\\ް_}k-`gŖxmĮ»iŗĘ{ZśæÓ3ü'üj®Śņ‘f-µ5·TāŪ$€ŁiöømŚ××ōv¹MŽs+±Ęīˆ£CønŽŽŽŸūO#ÓČäŌYU€4X×ouŚ{Ÿk*wčżOų“”äŽńfM¶7ų3Ś?źWAN6C±čy3[Ųn¤źV7Q®¶õlÖ0mÆķ·`{› «©Žõ1ś7ŅkÄi2<æ?_ĪIN ©ōØŹ¼ …¢4ik\,ž¶ķļżõN¬M–4¹ēh.tʧc}]ŗīś_Amå42& ‡VH12ĶĢnćōv’éEOŅČpŪ¶æn£]Ą€ó’M%:V«©āŲŃ 6[g?ł’ķ¤.Cźč*‡«K€ņ–1ß÷ÅÕīIO’×õ:’›oĄ~E“Ö čķdĆ'Ėžžµkś ųČ©uVVkkœ—ņ’SĒęŃiʍ”Ī Žu:xG½ßńmöÅÖ³S‹Äjī$ź¼øĻž¢ź/Ę„ę\eęvL™?Õl,¬śXǽĶa‡5Ę~;}Ÿėé$§Ģgµ­{šaĶDÖ’kżXˆ‰n”ģÄžnęė’M\}6–C=Ič?­ær©m5‡m}Ž·oų1ķƒńś,ž§éR¶m!¢Xē€ tq#ž/譞…MŁ_hČ“0^÷ „mt’]gāā_e€×X”ƂI¹ćū{m³’©^ĶéG&ŠéÕ”®¢5Ü6{ŪūŸ÷ō”ąf]»©eZ_Æf‘¼Įs¹ƒīßš¶°¾°åem©˜„ūVčŲ=¬.ż«ÜÖ’¤½źĶ-a}•6÷ƒ”phk@ś#Żō·}/żFµŁ’NĶŽmaŗ@O€k}»RS†Öc¹¹{Il: qŪķ?GŻ^ļķ¢7Ł–ēHg ø;¾“{óŲ¶- z4mõj; @-Ū»ūHĪčģ­žąk”„Ķ$»vļśI)ÕüV¶Ė,=2GœlŸóź­Ó©5Öāęģ.?G¾“Ļõ¾’·%?’Šõ*žƒ~EōWc·Xć€x Lś ų)IHKd±Œ BčU2ŗeO{E4±¶‘ ˆŚß@śkI#Gd”āߊØx>š »W“žē’UWoÕ¶V֚źįŽ” ņ5Ū.ÜĘūæ–õŃ5­h†ˆ°I%<ż]įūŻVĖ<>ƒ‰śV~bŗŽ’Ķõ6:Š6øĮˆžD­8L’œwō[½CpĖ|ķ„ŒhįøļżvÅcÖ±ßhvāL·_pĖp’¾«Ä&!%5F £@Cµ’w4īk·¤śƒžĒva$!ØÉŠJGS!2J’Ł’ķĘPhotoshop 3.08BIM%8BIMķdd8BIM&?€8BIM x8BIM8BIMó 8BIM 8BIM' 8BIMō5-8BIM÷’’’’’’’’’’’’’’’’’’’’’’č8BIM@@8BIM8BIMIL1 Untitled-11LnullboundsObjcRct1Top longLeftlongBtomlongLRghtlong1slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongLRghtlong1urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?š8BIM8BIM sj @ČW’Ų’ąJFIFHH’ķ Adobe_CM’īAdobed€’Ū„            ’Ą j"’Ż’Ä?   3!1AQa"q2‘”±B#$RĮb34r‚ŃC%’Sšįńcs5¢²ƒ&D“TdEĀ£t6ŅUāeņ³„ĆÓućóF'”¤…“•ÄŌäō„µÅÕåõVfv†–¦¶ĘÖęö7GWgw‡—§·Ē×ē÷5!1AQaq"2‘”±B#ĮRŃš3$bįr‚’CScs4ń%¢²ƒ&5ĀŅD“T£dEU6teāņ³„ĆÓućóF”¤…“•ÄŌäō„µÅÕåõVfv†–¦¶ĘÖęö'7GWgw‡—§·Ē’Ś ?ōŹźcÖ1”¬h­€Šö©4{GĮ<$¤p”2BJa ”L¦ILa<'NJc ÓĀb’–I$’RÅ2r¢’Ÿ’Šõ6}š Ó3č7ą8Į׃¢JQ#Ać B7×ĻŅ0>ņßūźÖµ¶³qŌ‚Dkv^MdI©ņŃńGäIMß_Bā ķR•œÜƒ³Ēk@=õƒ»ū*ėݳ ƒ€ )œØŪ“U>ė²ŗõ{¼ƒžü›x:*Ł$ه”Į©Ųńa»’SRļ­8ĶÓ‡ŚGw¹µ·ĆŸŅ¹U’œ™×:)Ŗ¦Ļ“ž@ÓłLńżÅĻa #®ē6†²’?œ’ēx vķ9%/e•œ‚żÓ  ķ¬ī³žųØ>’F§ŗĒ6 ēķsž`7čĶæIgU”ē¼Ėµ‰{yžŖŹė÷Ż—Ō†#aĶŖŗC*H÷_iž¶ß¤’ž’œĢKčs±/mąGŽ›˜C_üėR‹¤;™Ō€jęśK[^EŌ²ŗŲ×Pv– Ī;t;¬ŚŻ«¢ÅąņDÉł’äRRgióUh›ąžu–7ä}æõ*ę‡ļU0–ø’܋$’jSĘōęW&‘óī÷W¢Ėe{yLD’½mP ]_*³ČĻżKš²-.eļkæ{_†čII:}Į—Öė 1ŽŅ7 {;Ÿ Õ vkCF†¶ļxÓļ Ų?7č*­±µ»éjščtI4K2ķ½ĶŽÖļh,.e§śŚ$§®śžʶ³Č{÷•Šģ\×է՝‚~ł]'ØS’ŅõŸc~rYģwŪN¤ĄĮ§Wnž®åÕ·č7ąÖóZüūĢĢ<€<›ģożJJi¬|}¹ĄĆG}?ļېoῨŠģŖ¶ć†Ł{œa‘²ĒĮ}/ŃūÖf{Ϭu@ ?ņHvį<ćŽCKnĻŽMķžÓ’SŃQÖńšś­˜ĶÖ¶°g—XęW·wų/Kž»ź-Wõ·±Ķv4lh°nė?J[ż†[®Žt$ßÖ]F-ø¹4Ę1cŽņ>—·Ž’3×ó·hk@ŪÉ’9 ž­˜ĶĶcŚ÷ŗĆķWsż•X°4Č[ŖO¦Ź¬ ¹…Ž"CH#Bcžś’—nė°óŻĘ8ÜęūóV~mA¹6»tmy{œéWģ–õ wžkĄ®{]’E:·}° ‡8|A t$§6öX_Z@‘ŲŖļĢEŲZėŃŠ ńŸkµ…ĢčŃŗū¤ż é?Eßē”ÜāÜ·q.H׳))č~§źŁ®…’GÄĖOżÕź¹?©ŅŪ^Ƭ5Śų·ž©ui)’Óōö˜cO€ Ķ3ģ{³²H\ķ³’Aæō—¤Ł»Švß„²ń"’IyGW½’n·¶“{ģ-‰žQo·čžźJB×ĶŽżęTmõr.i×e`ģa‰ü•{¦t|ŪEłuV6ŗ§ht:5÷±®kę³jYx×a±¬°;‡5ņ9÷™żķÉ)ȰŽ‹”čueP=W3md7mŚH>Ś’{čæ{=«‰%¬ˆ³ĒŸēnZnŹÉlŅĖ+ žmĄg{ś^ķæł”ō>»\ż¦Ö3·é$ūœŚō;އ}ÅäǹŒŠßō½Ļś X¶ēŽŹŹØ¤Z÷Hŗ “½–Ū¾ŻĻwę«-ĖźwXė,ŗ†µĄ)a!Ä’Ā=®~’å1%62FŪq\4 N‡Üw ßēż.Øršé#sZ@ų1ģw¢Ņ^ė“9Ī> üßĢŁé§źõ+~ŁÜĒGbŅ×øiŽIN=Žmoyö‡ ?ŒØY}įf» éęV²($ęŠŖq7øDH’’’©Ö‡å9ĆIan¢;ų.¾ ä~Ø·õ¦†ųp» ©)’Ōōė4­Ń٤¹xžuķūuאū ¤÷ÖóćW°‘5G‹cļ Ėz§Hs²¬©ŽŽöøø“Ä“žė\>žéüśŅRż?«:ŠZÖcXśni%”•’)XėyŲoŁkŚ[em¹ö½ßø×Öļkmgļģś %½2ŚŖ}”īReõDCGÓŪgŃŽĘź5¤GJĻ}š,eõŸ{ĶŽ ²ZĻZ¶Õ[=›+ÆōąRS‡½ēSÆpźŽ÷¤5äCŽ£ū_õg=—=µ+s„9Ś4OęĖö#7šŲ]u퓹Ä5»ņ›īŚ’‘×WØ6±ŅēÜ Gē}/ĶWŗv×Ü\] ±ī!ž pgųMØķ§„aXX-79Õ}¢‚=®°ķez²¶_ü‡¹F¬™{öŪśrŅ(nG²Ąų»[a{[³vļŃ$¦ŌW[/cüĮoŖŠ$µĄh×+ō‰gśiiŌ“u™ żßź*xłM­¢ēÕ\¹»ĪŒ$ū­Ū¦~ć»}ŽVߓŒČ›%ŽÖ‘©×é$¦c8Č|˜#Ą Ś÷[øR6@˜?GŚÖż$öu+pŚ,§V±®{Ž­kvKĻųĻSҳž 5wu š¬cńÜ֖–=ĄŗHśBŗē;Ÿš~¢Jt>ŖČĖcĄ;\kŒZę—µŪ‡µŪæ‘łėÆÜ!Šģū>N>Æk^kH%Š5ŲŲmæ£ż’ęæįU¹%?’Õõżüä\ÖwÓÕo,Šd—¹ßD=Ģi~čüĶ›ģō’?bōc~qæYZ×_c^Fö‰tjAwŃnÓ¹®öæoöŅS@õjhi6:§ģ°ĄsZgMŠßüö±mĄź8ö?ЦēÕ3U¬i“ūšKéwķ+KFĶ›€i’ęĢ ņßÖS¦Ā÷Loqåŗ~čŚ6¹%!Ƶ8 Ø,'CeĻ-†æGaŪ·óßŗµ Ź+ČuŒĄm®pk['Gl‚ń]Īķu{ŽĶŹN”¦ĒōāH€Oͬ÷œ‰‚×ӘĖ,öVN×ŗ €ļfń?ÖINUnøÕ/h{D5ī~ AšĮiśߣ³żģ}ÖĄdiµ³Ūoņ½žÕgØ7:›Ż‰šąėqŻśG¶6¹Ä5ķ“ģżę} ßA> ¹Įļ‚Ą$䤧W«š±Ę>u…ļ€$ 0=ĶŃæį’P­db?#„ćēÕ¹ž .mv9°Ė]éūv]KwķśkžĢhvkė’AÕĀKÖÖø”ć0U„_–š7°›öµĒŃŗĻŅ~‚æ„źĀV’œ³”q^CššG¼¼·Ü%•³ł-ÆōŸKc÷©;Ŗē–5sĘčÖ¶Š›æ2 ¦ŚØmopcZk–ŌZDh!‘'üūšżłeaĒŚLĻpēcbJw¾¬geŁŌqö46ĶŅšŠŁ€ķ}›w}Ī]¼®źĆŽ©†Š.s  æźX»©)’Öõ6}š ™śÉŒFA°Iõ[«6čcĻęŗjžƒ~eõšĒćzgn¤Ļ XļĶjJ|źźŚ‹ ŸoŅGƒZ«¾×Vv5­ ƒķ:óš;Ķ[O C«ƒ06ˆŒĖŸė±e_Ua”“ŲšłĒŗĒ¤rJk3+ß¾ĆohDÆļ+¬ĻsšĘ4{7DA~žį“9SōČqü‡ē½M€0Č:8rŅń))µö\\ް_}k-`gŖxmĮ»iŗĘ{ZśæÓ3ü'üj®Śņ‘f-µ5·TāŪ$€ŁiöømŚ××ōv¹MŽs+±Ęīˆ£CønŽŽŽŸūO#ÓČäŌYU€4X×ouŚ{Ÿk*wčżOų“”äŽńfM¶7ų3Ś?źWAN6C±čy3[Ųn¤źV7Q®¶õlÖ0mÆķ·`{› «©Žõ1ś7ŅkÄi2<æ?_ĪIN ©ōØŹ¼ …¢4ik\,ž¶ķļżõN¬M–4¹ēh.tʧc}]ŗīś_Amå42& ‡VH12ĶĢnćōv’éEOŅČpŪ¶æn£]Ą€ó’M%:V«©āŲŃ 6[g?ł’ķ¤.Cźč*‡«K€ņ–1ß÷ÅÕīIO’×õ:’›oĄ~E“Ö čķdĆ'Ėžžµkś ųČ©uVVkkœ—ņ’SĒęŃiʍ”Ī Žu:xG½ßńmöÅÖ³S‹Äjī$ź¼øĻž¢ź/Ę„ę\eęvL™?Õl,¬śXǽĶa‡5Ę~;}Ÿėé$§Ģgµ­{šaĶDÖ’kżXˆ‰n”ģÄžnęė’M\}6–C=Ič?­ær©m5‡m}Ž·oų1ķƒńś,ž§éR¶m!¢Xē€ tq#ž/譞…MŁ_hČ“0^÷ „mt’]gāā_e€×X”ƂI¹ćū{m³’©^ĶéG&ŠéÕ”®¢5Ü6{ŪūŸ÷ō”ąf]»©eZ_Æf‘¼Įs¹ƒīßš¶°¾°åem©˜„ūVčŲ=¬.ż«ÜÖ’¤½źĶ-a}•6÷ƒ”phk@ś#Żō·}/żFµŁ’NĶŽmaŗ@O€k}»RS†Öc¹¹{Il: qŪķ?GŻ^ļķ¢7Ł–ēHg ø;¾“{óŲ¶- z4mõj; @-Ū»ūHĪčģ­žąk”„Ķ$»vļśI)ÕüV¶Ė,=2GœlŸóź­Ó©5Öāęģ.?G¾“Ļõ¾’·%?’Šõ*žƒ~EōWc·Xć€x Lś ų)IHKd±Œ BčU2ŗeO{E4±¶‘ ˆŚß@śkI#Gd”āߊØx>š »W“žē’UWoÕ¶V֚źįŽ” ņ5Ū.ÜĘūæ–õŃ5­h†ˆ°I%<ż]įūŻVĖ<>ƒ‰śV~bŗŽ’Ķõ6:Š6øĮˆžD­8L’œwō[½CpĖ|ķ„ŒhįøļżvÅcÖ±ßhvāL·_pĖp’¾«Ä&!%5F £@Cµ’w4īk·¤śƒžĒva$!ØÉŠJGS!2J’Ł8BIM!yAdobe Photoshop ElementsAdobe Photoshop Elements 4.08BIM’į9ohttp://ns.adobe.com/xap/1.0/ image/jpeg Adobe Photoshop Elements 4.0 Windows 2011-02-22T09:59:03-05:00 2011-02-22T09:59:46-05:00 2011-02-22T09:59:46-05:00 uuid:390A2CF4933EE011A1CECC646E904B0B uuid:3B0A2CF4933EE011A1CECC646E904B0B 1 1000000/10000 1000000/10000 2 256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;9E91B447728BBDD1F7CA9643BC709EC1 561 844 -1 36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;E86F79C357B4EA7EF2983F70ECC7391A 1 Gray Gamma 2.2 ’āĄICC_PROFILE°ADBEmntrGRAYXYZ ĻacspMSFTnoneöÖÓ-ADBEcprtĄLdesc iwtptxbkptŒkTRC textCopyright (c) 1999 Adobe Systems Incorporated. All Rights Reserved.descGray Gamma 2.2XYZ óTĻXYZ curv3’īAdobed’ŪC     ’Ą L1’ŻG’ÄŅ s!1AQa"q2‘”±B#ĮRŃį3bš$r‚ń%C4S’¢²csĀ5D'“£³6TdtĆŅā&ƒ „”EF¤“VÓU(ņćóÄŌäōeu…•„µÅÕåõfv†–¦¶ĘÖęö7GWgw‡—§·Ē×ē÷8HXhxˆ˜ØøČŲčų)9IYiy‰™©¹ÉŁéł*:JZjzŠšŖŗŹŚźś’Ś?ō­6ĶAß ¾;W.™øųu9©—O»5+¾n9€?Fjv:e„4ß|ŌĶĒ(Æcżs e0é¶cą2Ą(§/¦ŻŽjR‡+76ĶĒ}ūę eS¾jtšĢFŽ…sx£QņéŽÄDĪ× ų(©œŠ%”oɾģVƒļĢ7Ųļ˜žŁ€öšĖ¦łD ÷˦YaLĆģę§\Ŗm\°?Ā¶9ŗ{åõĶÓ1>6Łd÷Ķ”iż™©˜Ó5O†m¼3ułfę3V£+æO§.øß»,Šué”:o÷åPf=q¤Ņ¾ż3röĻ’Šōø9töśrĄķ—ĄuīsqÆ}³ųf+AņĖ„7ŹÜū ŗ}Ł€ļ÷ę„G±ļ›ĆĄuĶOĒ)#cC昮õļš†æĒ(ŒŌ#,Įæ®ŽŁ€{f#bsuŹ Ææ†]r»S5LŖf„7ė›lĆż£•śņž,ŌĶOö³PW¦lŪš„—žtĢkÓæŽXéņĶA”FōĢi^™}Īm»usSzę;÷śseŠę?†ožQūxeŽŸ>™TĢ+Ū56Ė=Žcµ2zę§|£S¶U(źyC1÷镶Ōļ Žł\Ī’ŃōŠdfĆ/5)Ó/·\Į|s oš™©LƘĖć·šŹ"½²Č={ꔜ2Ø{}Ł__lŖ ÜiŪsß1Ź|Õģ2™‡*64> ŌeUžy]³f¦Vje‘°šŹŁf½s~ŒŌū³Sū3»ę?,³^ż3SńĖ „r²čr€`MMA; t˦jvĶ\Ōvjm×7æį˜ nŁ·ńŪĆ,ŒÆžmŗōĢ3W7l”–OߕŪß(küröśr¼k•˜ōńƚ×Ū6Ō®7‘šĻ’ŅōēO|Ō7 {’ p9ØIö˦U>šę¦ŪuĢkCMφa_ Äxęėņ÷Ķ׿ѕC÷wĖ=:ż]²æĢęļÓ6ūžł©”G|ݳfé¶QŪzuŹ Ó®Usf9ŗåoLŗf„>Y¶'å˜ō;^’Nb7Ģ2·®8ūž}¾Y@e÷žŅ@źh:eóo÷ę†jļš›œĆøī3S56ÆZę©™…i”+ß6jņŹ §¶X4Ģk˜ŌōĢ6Š>y}?ˆĶ•Z{f=1¬6Źķ\ms’ÓōéżYd ²ĶJĆnÕĖ m›Ś™ŠŒŖS§LŌĖŒ¢æM3| ßŽ’Öõ÷ĖjęĶÓēć—Je f÷˔雾Vc×)¾P ösčk›+¦Qß1ę§ß”|;öĶLŽž]zf#jåoóŹ#ß7l®Łˆü2ˆļ›ē±ĶMóuŪq˜ŽķAŪ*›ężYc¦_L¹¾/Ÿ2śęŪĒč˦5«š›~¼½ŗciķ”Iķ–k\ÕßOߛ¾jöŹĢzüņŽō7·l߯/n¹«]óo—Ś™Cß1fč2Ŗ+›¾7lŖå’\ßN’×õ Ķļ×( ²śmć—Ä}9TĖ9@mš„śóš›Ó1¶6™©ß5ʦł@żr’ ¢7Ź9©Ū7L£_žQĶO£*™ć•_»(ƒįņĶŠS1®]sęūrśūffvĶķŽży‡Ė/1ÆLŪ›0D}ż³n{åP’fU6ß+n¹Y‡‰ķ”ŽŁ_#”6­s|³|ŽXńĖ=³W|ǦjęŲõĢzeWż¼¬a2z —Lœ·åQAʝÆÅĖżŽ^’NQŹßĆ?’Šõ¦…‰©ßb*h~Ž™t  éŽ9Ahi—O»1¾ŒŻżņ©×¾l£×lŽć|Ŗ mųf#5vöŹ=j6Ź=s­ów÷ŹżYDf÷Ķ_ķĢFŌŹżYYYG0Ģ6ĢwĖͶ_źĶM³Peōś;eųS5~’ŗō'¾:™F{f>²†c•׮ٱ¬ Š·|„@aŠeöń»W¦Ē/¾Qé”wŽCn; ³\­¾y«—Pq¬$.…*ūÅ*IaMØj8ļģŲ„|2‰Ū1;’ Ę“Ķ_l£Lݲ±¦»ćwĻ’Ńõ5FQ§Ļ,eęŹ=rūemōę å{~9Y©įÓ( Ō9]ņčĘåļŪßaæ|½²ŗōŹń®QŹĖ­rūyF™²·šŹ®l­†XĶ\¼ÕĖX9u9¶šĖĶQÓĆ0Ė *@=:åxę3~9_.™Gl¢vƚ™Dm·Šr»uŹÆŻ”O†WĻlŖż9e€ *Ā»šń?k³†n+³7._ˈ§Öž°ą-SH;؏€'ŅtīĒųdų±šŖ£ÉĄOŲU53߃Sćžo‡ƒņžaޜ`ī@RĮ[rH#©هŚĒZµPš|GĆ}›oõŁ`°XŃŗ’ĆŃšŌ ³€$”  {ŠКbÕŹå½+B3—Q_sß*§·lÄę'+|Æ£?’Óõ8®mŗę”ĶO»1é›Ū¶je“½1“ßųf„2©÷åž¼£^§¦QĘ:»ø‚MØqæˆĖ®łŽV’NW]³²½±’Ź‘Ø.x‚ĮAÜ՘Р³sŲWnD…æ,Ā€mÓŪ6łG7}²ŽVnŸFfķęŹė—›ųf’:fŪ,Ÿö³Ųå×o|¾^łdųf ō ¢Ł|²¹f ½1 ›ū;gTøš8dmÕ‚±Ź~#…žvņŻØ&K°w J–> Ģ)’Ę>xZߙS[¤ö–W—i#˜ĆGą£1SžI\/Ÿó&ę9jö+é€ĆźŃ0–BŌųOŖ U߬~©žNøüČÕdŽdm$°eŽŽ•“§Øó+¢±ćčs’#Üłē\ŽßזĀÓH…†÷2ÜI3:Ēńm– Ž|Ŗßń£q<¶×®&Ī[„”œæl”¹ß¦°¼vV÷+N3FŽĄv,”ˆś+ŠI VU ”› &„Ö™S»¢”åÉūģ\)ü&Ŗ=rŌŲ3 “µH^Ē3̱‘^D׎ōģ é%ŗĘ±¬‹8ŒŽŌßbĒ”ėū¢ø–Y–HØčō]Ǝ4 Ö«šŌāęŚPÕGIų˜V”øŹŠķ c™¬œ9£r½*ъĆ*Kț£tĒōƳ*üLh*ŅMć›7źŹ'Ć6ž9Uß/¾VlŗöĘ<˜Ōń” uÜÓ_ ŗŒÕĶĖÆl՚āÖČ«ttācŽģζ²³ˆĄYeŒĈƐeįœšIö8`˜lŽč4²?īĀJLóNå™"`Š*ńį3ś‹©ĖÅOfLF1¬3Rb@}1ȆB#㨑cųĒF_·š§āŪ Ōµ°Ņå™g˜“—ŅQ$0FDø?eXEčĖéqōaoåUĆ;{®^ķŲM,® Ֆ(āQš€¢¾œh“//²ķźKĖ÷ŸŻŽ¹»×žE–hܬĀ[ˆYPJāD¢“‘²4QŸLzGŸ%høzn’!عó—ŌŽī94Õž’ā’¤}žk'¦(Kqgąķšr烓ϨŲ[‹+uĄ®fEfv$¾Ä±™ŒŠäü<½Fõ9ąą„„F”±u-Wu Ā•‚±ÉĒz% ŸĻ–µĆ3źķź¹ųwW„Ÿ kū_b žKSď…9еzž×+µOŚ\ @ƒŗŌūtū@5HėŠ}ėJ”Üž4̳ņ 4P{Ļ‡€šĒG!aR)_óšźę®żwĢӖvė°= Ę««W‹M‰ū㽿ŌØĘšo’ÕõFVł…zżņČb3m›æ¾QŠ·†jö¦nžŁĻ*“r¶Æ\Ŗ#ČļøŪ¾]GŽŽMę­~]Ā+ņ)!i}9äžI#X”«7ØDQĢģ«Ēćų~ų°§YŌ5䄣ėVös0bæPCŖ³š[—’¬Å8|1ĆĒ zåʎשm{­®·wź2›yīzģe’ą@Ī…įT_“œ[K—žŻZŅĘāį"äљ “‰¤ £^_ćčpåö1¶·¦Y!‡ŅyŲńš%J‚Jąź¤āܤzÓĒöZOļ=5m„¶¹‘£V†#fē0)^“n±v?¼wŸM¦’uż©9Ié„[żežxncXL‹RŖTÉ2 qįvOIźßģ~Ā!oØč€ÜY½%»ŠŹŠX4P1‰4Š«G#ā–Wų¾&ŵ GP±Ō=9”k+yQZ¢¬o$Ź®ź‹_ZG¹?æōÕ¤ķ?Ś„)Ø$ŅJņA#!XÖŽT)äÕO4 ÅJ8•$ż™†VŸ¦ŻžŽ]6}>+ˆa@Ŗ}yr”53Ø#SSżē.|°ĀįbiÖśļRhcxµ²z>‰bjĄóŠi_ģśP¤jßp~O2h—…eXfŌżZ¢¹ŽK€ĄD—œq„OŲft’ŠS ķ"ŌPE¾ Œj(¶óʱ: mĮ`Gh]AkvĄ+ÜČ©Ä}„dց$H’ÖH’ĖĮ¶ńCIoPŪ3<$ČTŽķ-$ųvė5Æśų:-1ˆĒÄsˆ0u m^1ŽŸ“ķ袒6 ŽåB4 č}½TÅĆåćŽ{Ą£ƒ8Ešā±?·šž@žśė…K2š‘^¤xC!©ŁxŸšøõ¹—įQZµhI”%MM+Ķ~/åä¹W±Ū';™DԘ„J·ĘõMˆ;+.—Ī FžIŲŽCźŠM0;‘³¢“]kžķĖ—Ģ· •t¹c@„¹]Ķ @Ø«HM̟gāžļŗ® Ģ†ęX-V@ ¤1¼¬µÕ¤”Ę?g=µƒ-ć9Ėu=Ōėń(•Ö5č–ėSżefĮImi†d…BI2·"æ\\ĪŽły€Ž¹y’ÖõGzf„s—”: ę®’<¬ŪåkŠu8Ęz7¤×ø„?^cČR»uØė¶żöÄ®%ąµ D„ĒpH¦[¹ 1PH^jØ  ļĖ—¶¶›ÖWu`і2(GŠv#ē€|ĀålT‚h“ĄīłD‚œæÉØ’‚Ä“fq£ŚJńZץ­;žø&hyˆģhÉćÄl““q?ĢŲZ¹’(ģÜ)r“ņaПM ŸŌSµ·eÕ9“АØ ~µĮ—J¬¼ÕJ–4Ÿ rū?kq'6 – hPnI­95*TķŠG#*|MNx’­Nōė×)™R?E”Ž Äq4AS׿|Nš–Ņ^D*(`CČŖ~š`}oŌŽīĀeŁ£b*7ūsŪÆbpążÆlFY”Ķč“W›įZ }8·¾VU~üß«+ÆM²»ūfÆūyUķ˜će‰ĒŠü6öÄķM-ŠT“V©?ėXœłžŅ;Æ/B²Aq ° Wć§pz£ŗœåWšzĮ©i„®’;KuFĘ –…ąˆ®øN>ŸĀ“|2ĒżåĀ:<ųÉ<ŌtéKšŽK=>PÖ¶h €!#*Z6‡$~\%dXäāˆųųõ䵖“z<’,Å ”aĄ¬€ū\$i“ܤHłČ±āŗT¶— wØB±ĀyMō¦PJĶ"p7³J?Ø$Ky•Yłói½5le—™‹É<-µ'!„iÅy“†S'ī"’'Œ¹äMĘHųódų³#L.õģ’,üƒ=ćr+ĮйyX!y8lŹž«żµĘL=;£u.„søˆ ”FHąsø$–8m›’Fō½ż®<ž,tzv” ŤGu ­¬q$q”*?Øbø=ßė‚V=a}Ń!ÓcŒžķse‰w_åh¤į’.³ŅńX]ßÉ%¼%J£0Ž µMBÄ'pAnżL=HŃm);D²^8żĢ³uŪ„.\ĢŌ§Aq’˜¼ža±·b>ŗ­+Ń^HĶ\ŠWīVKIXx3£`aę9$…—NÓåšŚæ½‘‚Å ßxi:ŸņĒ«ąµż7q m{t¶QV©oI"m’/W qéŸ) .>}>Ššé§½˜o ·“1āGūīCź[r’Z<®ŠFYÅźnóSŃ īdķXv\(¼óŸ–¬å1I«[Ē3Ō¼v夔ń–Ū-Ģ/Ä}­ÓCē4JhŚmģ¢B¦1C§ĘĎu­É›z|_ yĻĢ‹jLQXéŠÜųY®ę$ q·6Æ’cSÖfgKrę`a•ĮµHōč "ü6į‚ēÕīg#’pĖn“‚GĀq —“’v±śµ’t’vü¾]źī*eõJL–ĪŒä}‰#C#øū5)Ēż_‡O©‹ƒ),Ķ##š/…mØG÷ņüää¶ŁU$”†5ązm² /ŁĆ*ņ䄚ō$}ųśīG†X?v]wž¹ ’×õGlŁ·łeœŁG6ؘ–2ÄRAāĄѼ>{ćAėˆ]HS‰, y“C°ö”Ē($‚H#‘jSŚž\4Ą1©ŻŹšQĖąāFāśą ČÕ¢ˆ\F­ń+§Ąßh±Qū’Wįų±"bgŽ2ĆŌ’C24»XĮ«£©©€*@4ķ\J cÜņRĢ H UB÷’X`YKx”{ģ]÷šlKM,ĮdVÕÆ¦ƒāÆNü²õ‰6‘DB”©jTĄØ­|9vÅrceåÉ·$Pī Q{Ū/œŽ . $(‡-—šÓ¦ĆlD&ƒ=K­Pw#‹l cäōæŃ€Ł‘«ĄÓziZŸ³LKĢ ś–Ģ ¢š’+_÷¦ß Éų©Ų‚k÷\ėĻQćø>€*ŌØŻĶjvšĮg®jŠ’”C”)ōåÓ+lnmĘjםKMÕC‚*FäP æ_ģåĮ#<Ģ k˾Ūćźpæ\…eŅ®‡ 8°^¢”‡Lä·!£ō.’½¤Lį–F„š2UÕ‘æ½‘ŪŠŗ3ńTåĖ÷o»šhl'–Ķ£ŽŽVUŠōå“v&­Ä$ęgUŸ$Ø’‹%āųĻÓžF±fW½³3Š'”5Ū{r’Ż.„'m‘¾ÄĻęŠ$­ö”< Īń%šÆ_‡ÖwW§ĀćŁæÕÄ%ó‡™^VÖ66O nWsĖ=ă>Š…lQž×ķatŗĘ¼äĶ>ÆsŖėĖźQAdJrRC“ ė’wüŅņų—ā偗l.g®š[Ēv żišrĄKČļÉŻægķq’#ģąÕ]/O³‰²ĢZ>1F …āĮkʅ†ćŽkpžšRCfx UeP#%‚żˆĒHł7ŚĄ±=ó³\\6š€S•}J%xžļį>¤'Śu…’—įĒĶw-„„ø’)=oЬKƤņ³ݦ™_Ųį–šĶܒ”bŹĢ¬ !ćG5t HWÆ6,l’ń_?NCuš:ÅģŸZ.ˆźpą¤jµ$mźü 'Į'/MqŅ,RĻ$±wt¼£żöÄAüĶčS—ŁśÓ®‘Y½9#Z5»¢FĄü4!$e’Ę8ž!žėžnY=‡‘ø•}P®IfŖK[Ö Ÿ ų}¬5‰‰sSøØ§ŻŠ“Ż{~¬pöĒ—_l’ŠõNŁ»eæß,å†m±7fS‰$Š÷ųÄuF ØåŌŌ“@ @ßīĒĘü–»{ÓĒéĘĢ€„扖č Õ–‡s½ŪÓÜIȰé"° $JŠm·śŲg¬ö‘ˆĄē"Š€Õ¢ĘʼnŪü’øĶÅæÖķ£!śk*0;'äų1kØŁ.eR…žI=XZµŁ”#A·Ä©öłäąMF1%½¼CGMؤ±;oŁvY Õó1·IŠZ¤f'XĮ,y:Ąd 7')Wž%‡:mŌ%u•£!v +TJ«Ÿęę ų­£Ęk2ÄBU^•„h@ RĖa!ę•^¤2Š/"¦µö\ 5ģ2;“‘źUZ§ÜWˆm©ö’Õ’)pmƒbi fā ( ×ö|}¾ų~Ö6ędIŃH(«Zµeœ¾Ķ?™æŲc•¤H©­J³V•nGö{Æ/ųNYi} .~+Jöb$©µEŹó ź“B¬+]”{śŃ7ük†ä(•EwāiS¾ÅGńĄņ€Ś”hG$1ąŠ˜•ėąF ÷ʞĆ6ćßõeŒ¬ĒĒzåvöĄQ7ī'cAIę©ķß§q6ÕJšš–%‰$ØėĖrķÜbŃl®#ŒŃ8SļÄÓńĪKŖ]HTĻUtø™ 3²|7•¹Gv~(šÉż×ķä3QÓāą×Ū5œņÆ™>8å©©Žą ĢIJ©ä}w_ŪgĮ~__«\Z„_If“”1åéŹa#ŅV ėוįN+Ēūµčń=ĆžŽCĮ¾½4%×”ō£[€Hj£m,‡‹ąųpKĮqp_ӑĢJĮd(‹ČøPX=}BhĶĄ1Y[ž,‡Üé–hZK¹Kq ®X† ŲU.?LŃ©€.5ļ&ZȞµĢW/°-ĆĪkNĻĻ,?»v’Œx„ž“‚²XX^ĶéŽDČŠŁĘ¢”YÅ Č7;ȱBßģp#łļĢS$ŃZŁŲŁ¢7ļ½fyœŹwų½?A$z’æ’L &»ęū€ė]”q¤[HJFTµVDD„#/Āߎ~ļÕ§Yõ™„Õnd,­’¹²‡-ĘNEšƒÓµ†b5Šā8 145iźĢ»7‡Į#ßł°uĢҘªŽRJCB²Č……zļµ?Ź\×°HņؑX«-ĄD%‚«Š·@i_µˆĆté;¼qŹE}fbüc©VzVūHæg'’W–śŚUeŠž0Ń*ĘR(š]Ķ9q<ø­[ö\°s3ŹŽŗžųĀŽį½6Ė/RŅ“ŅOņS5¼ź²ŹåWŅ„…&¦…M]˜’(`O’"<¢›‹Ķb©rģ—ČS÷l=I N¬„—ż|č(Ģnāp[›Č0£Ń’1Juć¹ĆĖg3ŌQĶA­AŲb±w>4=kŲ PWčĢ Ū÷ē’ŃõNm©›6l®ų”Ÿm Sę|q’©4QŻŁ4ż–üq–¾¢;G%HÆr©»Pā—żąhĄT}< Æ(/U%Œa€Øū[Š}8×会µ ”ćČt5CųŒ u5Ą¾µ¢ąlÆŲ‰;GK*ҤƒRk©kā “v­G\4*r@9);Y…›w­w’W ļTDĪBÉh@4%ĀķCąĒ[HѤņ0ųŅ%^TźŽIh)’ŗąŪEu•m׹ę}YIa1C^?m‚¢Ėž#šāśŅ 4łŃź€×āVm‰½ü1(YR)‘˜£ĒźćZ€%q]Ø>ĖaÄ­#Cšül•pXžRWš€J’{’Ćpām¤™"¶uåĖćp¤Ņ„3z€±§uą06±zĘźŌ č©Õ©e©ŲBŸļüŸ³‚ōåoJ“’ņˆĆH¬O0 QiæłMń`łĖ­£FūCq{9ü MižK’ĀąÆ1śFÉœ84ąĒųaė?ļ€cĪ¢‡Ø"½°3’ĒZ2:śDTļćÓżø˜zIZšŪ6ĒH ŽłLŌ4‘Ś m±4ÆŃ‰Ęfāµj켈§æ*m–²PQ»RŒw'į©­6Ē‚ØÜ‡Ą īÄeazø[YŗšÜJvŪżŽrō·%n<©9¦äõ ?{{cd‘”}¢¤/Ģ³Œjoė,īńA£gHz£‘4uÆŚ ²ģ—#ā8ķ%·’ęįm£WŽ8ī¶•ż0cę]•}Užńä’Æ/‹āÅ4éL—–5,wH@^\BS}¶ū/žĮ¾Ü¹(ŃåōuģJæé(esJšÜE$/×o¶Č˜#JrMԊۃ ¼E>ŪÄg~ŸåŠdSĻ…#ÓķŽU[µ“žUō倍™Qī˜qȍ­ū,ńN&fXē^`}ŸE– ¦‹ńˆÕ±k[Ā‘K-ŹĘ±$lT—”Ŗ+CP U’gŒ··õ·2•6åÉqæ70õ9ö¾Ėń’‹>Ņį¼2ÉjŖ}šĶ$nŠMG«Ē`UXæįæŹÅįC*ĪyļĀTš¬j‡żi8"ō_ųwĮ2%½Ź$jkk4¶ā6`H$”!—s˚/ūÖŠ[É:½­éōżEEz—Q߯%éǾ<śPl–ÖÓJG”ÄZJŖ‚ĢōWždų«ń7śø”–ŅC9ō, Œ,6äÕkij7CæŁų’ę„e‚é”ō&–!"ĒAR$āŒęޟ~ÆūÆćūŠŚözžq@¦· s >ŒJXŹĆįäģĖĖįlIķ4Ėy]$bī…C$BŽ@$7Ū2ĢÕ?Ÿåżęn7 ćź¶ßTŒT5Ō¤ĘĢŹ9|O7ļ>ßņžĒƏ†h"‘$pņÉ]kĄ(ū,D„2·>ńO‡ü¤Åme™ļm…Ōœ!Ŗž˜ēUSĒÓJ…»„ā®ß ¼ž¢s~`š€½–ęHC4B+eŽ.,c‘˜I7 UY}V ŸD’l‘ńŅTCvüŚeŚ2ĄTų—f ķĒéä‹É·ó]©Y/V5ö©¼lŖM ų}Iro„¼§QąjĮ8‘¹Č+P)×āź>\8“a Šh*zŠv郣#|hAńŪ—›l’ŅõNlĆ0÷ŹĶ‰ĢĮx±cś?Ć’DR£—Z£oA„ßžģI āĮŖĄŠń#Øė¹Ådr#$Pƒāh<7Ąūóbc©ė½Eo§“—&ØAķx—Æ@p’'郚ņ¶ķ+Ź”+ʇčF½>åĆGv mAŅ…©rTmBģ9×ü¼&¤”ŒŌ)QĄ”ݶ"µ÷įĮ±jæU(¤’(™š“4Gß°ūI\eqm,AõZ"ėæŁ–ŪŅļū'Ō+I»õÆŹ…ØśĻ&“(,ÖF4=½YW µTCe+īK‡¢ŠT’¤÷ļ€8©·˜ČB…Ł«±«ŹŪÓ¦<d.ŖĢ9–ąh8ńą“Šo‚„–Ht†h©š\o槬#+›I¶[»U@I2¼‘–~GxĻĮVnŌćžm‹i@~’Ōn…CR;P AżČj+°ųž…’ZVŗU×Õŗ7]™fP6§J0W™JkOZ9Æ6= ‡c‡ōżśž@’|7§OQvė™Bżmš»P£½Fäž8³|CĆqæNųˆŁābB•R ‚Pš’qšPĀ”­8Ž“­(<6ū±,xmAĪ”ÜļOł¶TU1ĘZ„ؕo„ƒNYü<@ 40"æ»®eu 6+Bv¤Tt’cžĖŽK8 -AC^Ąļį×ß ¦“…£’G#s/’Gj1śCrK¶’——r(Įē2ž,½sŽźö_Wtµwä“–ŖüӒhiPI§Įß ­®ö6ņÜÄ÷ņ5Į C½%iQ«é~ßT—Ōżā·.+ŠéńÜC+#0É k(N¤ēnĆ”e«šoŁõłWœ·N™ö ģ~®-ī#^æ ܤ©Ņæ³ļ‚|¼ w7Ł&€vĀæÓ&EüŽÆ&ŸzKŃŅx]K+ĘÜSwBŁKw’'ß€|\¢'ęækņ&łnä_O‚™ČZqV« ĢŹI’WEhm­­Ē1RŅŠŌėźš‘ŪŃ’Ć÷žŽO©4Lhé/ė»GÅA"˜™™å‚”Ē%«¤`²Üž.+£§._,F'ųUĖȉ &‡ć;”^(Ąqz•o·$æjN}¦3…Kxī-ĻsGBh¤J¼Kš‚#ūxß_O™HUĀQG X(4r+‰³3˜Ó·ŖÜ½Ež^_e±c©_ ²1G4'‹‚CÆ\QXÖN_Åö›z÷~‚IJ¼prHŻb’4O™Ü•ˆqįAžžV’+üĖUsq2­ZE&•,yd«rjńdIWāuĒó…bcGOŠ8”**9t'”eJ«ŗtž|Źa_I%ć2w›ģ§ā}–ā­ź'ÅūŸö°|ŪZĘā8ø­¬m Ф† *Ź<³ §Ų^Ė•p ÅäP«’£ĄŹéÅxӌ`’:R© (ćžWņä‹ĖƒźÓ‰ Õ!–ŽyŲóśø.ŪīÜZł9ŅČ:¼Lhĵ~ę®§­ÕÆl>ˆ1+S^ “·LżAŠęĶɳ’ÓõNVū×§l¾™³fĤ&¤…SQJ“ģNūkń„¢Ō¼I©Ą‘ś¤°z1ų˜1 ©Š’f>Ix ńrqŽK݈šłc “"±o“!f ČWnƒ ÷ßģāQŹ“Wuä ü)ƒ·ģīp’źEś¶µ(šāt² Ę¢V*k^ “œæŌ|.ņāÜ_Ś^ß])„ŽOTh†ÅiŠą_¶Ļ·ģįƒ[žō;r©Pε!Z€ŠZņä¼g—Åö½5t®®$’ÖZ±õhź>?µYį䫵~Ėaj ĢK,¬méO‡‰ų‡Čq’cŽ“¹ś½å‡H{„Œ’:r…C‘µŻBøØ—OU, 1ęŪö*zmś°.›źĻlÉ §*£*õŒƒ­|NYdēdf]ˆ-B\;r^ž&4ÆŁĘ ø8µ­Ū„“F˜V¢cJ ¬„™[ģžķ¹bsYEję)DfPœ¤¼‘Üü ÄŽVˆUø~Ļģį®Ļž—#s<ī7Ŗ•!U ‰Ü|Cżn8ā/Nś$­= ąėՄ¬Ē±o ˜…uKB£hE:; Ņžųcyu$vÆq3QČ’yzbA!Sµ>ŹąŁRSšnŽLF `„bH?9d …-¤Œ­Օkݘ|?/‹ĆéÉ ’Ŗņ ØģB¼_öFLVŪ„—JņŖ²SŃ=E6@Ž&ÆK‰M#’Y*Ė@”-M‡a¶Łó#˜“«]( ·Ęi®=R²0¬¬+ü²OĶwĮ–­õ]:(Gå(ŒŅŸ½ ōh•_‡ģžĻśø6)”øbæWF2#T€hkšV¼J2üģ·łXåH…¦/ļaźæ²9ļB~Õp®Iš?Y•_J$i(ŹĄówßä“ųŸż“bF?Jņ ]¤’·S,2ļń¢É’£ tš²ņ"ń`Քⓠ»į~’±D‹bĮ&”­\×riöpŽ+ō¹āф š°é5włąŌ“Žk ³“!=‚’ÆE-¹īž©(øX,ƒ²TĘå•T‘Įєŗr‹Ž Ó¤™ŠT©ąˆČ»Ą#)·Téń` ņŃ^ĘąĻ4jŠ%–‡‹) [ā"¼ŽB¦ ļŪä2%,aÕG&g½zWp ßL»}õĆ-V·D¼®ĻĻģĒR|:ąŲęfu<©ńNjv²x~Šń®:Üø‰æ2Q7ŪzņžQ?9ŚĶ.£:Eśģg©ū2[ĀY†Ē§E3˜‹ÉŽāšDŌ)ĢIĄŖE,q‡ćŹ•18ŽnüŹĶöxāVóµåŚß] 6…ā‚8QÕŁÄ_¼cŠ7§$nOņ’Ÿ%2¢ŽDńJ§Ņ°‘#ÜÆ4au ·{vćūxe ĮęÉ¢m—ŃJ’•Viō°£ĢjßPŌĶ?yõ5ORRf’ɌdVCŹĶÅu$xŻIÆZW:āV Yc!HUŌ«%?®X§Õ%ć»Hņ¬c“šŖŽžę˜„“Œm'’Ś5 Īčz†ā#óżēü’tĮwAⶌ¼Ę6!Ń}0 'Äæ >\ø·fo„4—RÅs qĒĻ/„WZ¦ų~Ż _ŽÆžóŽ õ#ć[„Ófg–AĮTń‰‚NTćūԊNOšż¬ØāyWŅ ¬­Td"J1 Uąó'ā@ʼ›ććƒā–gøŠć’3£–VŠIGĀ@ Ü«ĮVœø’Āż‘:,+}8°ä+ŒßUVęŸfQĒ—ŁĆ©¼µØLސHRŅ6‹FXpū_s¤’3¤ÆśÜ—† ]ĪŹŚi-Žßø&0Üxó4ūOGjFµōųż•ųÖ‡źŽ¹µ•¦ˆ­Ä ’0e‘Uٶgcń1~&ō’Ź‘0™ˆ31ųĒø< $ü5eų¾ŅüSžĘ+(ćoõZ„ĶrCÉRµH‡6ļ]ŚdŒqų¤żā}¼bŻ(U~@­ŗ|!.M±]ČĶ7Ä[ü˜æŸDĻљd.ś BžZ;I3šņå†G–y[S’Z$Ģź >œ©æłWš¹×“Ņ[b# “EP6 B:Z}šaķø&J_Ē|^„Teńķ›ˆšŹ”ńĻ’ÕõIé›5vŹ­F^U1’‚hA”^ć|jÄŖ¢Ŗw#īżX×āŠE(:óĄ73²¬­š“20jP•>"Ÿī¼eō…\‡eÆE `«SB%æÖĄZ¬^±‚ČYCJǐŒlŠģ,±„?•²;~E’˜/n Պéöō"”Ļ/QŅQ5Ćč’—‡“‡”pŪ«ĒBŽWe>2*Ńhæū,Fš˳FøPŖƒb8IÆ&-_ę’›°6±pĀÅéTč܍hŖ-Į4/ó× żW·¶¹R¤5ĆDdĄ!ć;r=>Ķ}ńY\\±ž>>—2Ó␀ą€v<Ė·><™æÉ_ˆśi`ŠČ™PˆK?…U·äWĒ`¼1ŻBó?x ؽė–ÅmŠ ^h¤!T`jA)ö©O ĖĪ«¶Ž©­”żłżc®1j`–#÷@l¤VÆś’kžA‹“  €M-Hķķ’4āpüqIÅ6Ø“^“ū?Ė’7cql@*Õ!«Oōe O¶Ų.Ż‹r×ā'­ ƒŪ¹^Ū%@au3U‡c©OÓŪįĆ]1Ā-ͧ×$ ĄWs聒Ć(ź$3W• WÆśCųxālč*Åc NĒhäaŌ퐒:MŅ2qēI(h~C$¶Ą„]ŗõ;W ł`ŠeÓ+„|sq_ ’ÖõNnٶ͔swƽxš Ÿ ¦4ßĆø,ŖEäŌ{ąyJ˜eŠĀßĶ׉"›÷Ĝó‘yŠ²ŃH=>gÆ.8 źD.µƒÓ‹d$ŽŖO:“_Ū_‹įū+„Z%ØKhć–2Ņ"µÄĢAī™jQŖ~5V’*6ĆŅņs"„s'§* Hož $i@cTćp#T†āEOÄGCÉ7’+ uGåaə‹€„A_EC“ß“›a]’¹X䑋d›Šż®q:0ūÅf’-~2Õ k.§Ā”Qg‘+N%URNĘ¢ƒ‡ükˆjņO5bGą°¬kÅXż§JČF]ӎ“aqĄB•ź@Zž¼¤K'”2AmŽ&BA؋“ ß®>ėO·7+%³Č®­ŹŒL‚‘˜iBW—©æ/‹ZBńCĖÕ&BH1eż®T¬¼~ņ[³’t™č\€cU`$”;|F†œ©…ZœäÜĄ­PĖ456£Ž‰ŪęÅęv_2ü\HńˆłSĆpuļöpÖĪs7Ö62,AA4š–4„*ņFū?š8&Ō™u5EųŃa,½‰Ą’7’!pd¬-±h~ĪĄļ½łńl}»ĄÄŽĒS_÷PŲ»->-²¢(-Ö)A*ƒā„kĮ:€wß*¢E`©u­”&Rk×ķWžEŁO÷] š³ģ1±ĘĖ €(Ŗ¢Š¤lS·|j€VfbHS ’| §ĻAÄR5% j*M „kģ8ąŲU¹ńh hxØ„)œśIA× d©[Łuč÷·TüW$ŚKY@×ėR‚A¦źa”ė’ƒŌ7¬¤^K]÷Ži·ĻńqPÄģØ>U?øzõó“OKw”¬©ŠżØdWRiÓćuĪauõ;ĶdŪ]Z»ÜÄZ¶Algy‡f¬rĘĖĖ“+ś|x¾¤P"Čńs“čĶh¢rģŽ9åöW÷>‹I—Ž鷑\¦“q"̳,n«^ n)įRHFY‹npõ¤į©C)#įāvÕ£fמ-…± ¢„Ó'@ę TŠ„Ģ`ļEd Ł×Ń ]½6bw§6„’“˜¦ž™aā}EtÉ#āåüķˆGÄXCUādćJV»@ÉįL5½“öŅÉ%³#8=8¼€ųRrēI%’īä²8BÄŖÉ$ˆĀ£f~2óŪāoOłp“\:":qT˜qVāŁ—` P$·é2LŸńØE&41‡`ŠśfISQUņēĒāå|[ HčZDŒÉU/é‚hß t’'~ücĢ#šTŒ°•Ią¼ySŠ’ŒZž§ĘŖ[āžóÓÉ–®”Šł`gV†X^5OQd·}ĖŠÉĶ[Øæėš?—@±±½’xåb÷€”°ųŒÄņ4.x3}求tjŗ-¼Ž’“t‰ÉV Š+h6Ŗ’•’Čך¦™bI žåž1°<”Ž.ŁŁėÉJ’­ūyRR2čæĀĀ0ĮPµ*wĖžKśæīø…Nrʰo˜rļ–1ž»3ūco·†z\QČąęBś®Ā›SQŌ|3#o—q¹³ Tr w¤Ó§NFOų,‘ya;-R:Ӝw_IH„ ’ĄĪ•¢?X„ŒWÓ»–*Šīo«Ž•ń,¶äĖõ?Cū?Óöž@f"¹\[Ć?’×õMi›7Ė6U7Ķß!! µ7 ÜŸaˆ}r±+"4fxŻGŽE)žWŁĄß\ÓfżŅ]Äe• € ;uāMvĢĻdĻ“ØĢA…jn:ōŹuądā6 ~ąkCN•’p»V·Žā­d`źĪ Z/÷*y:üe’¼EžĻ ‘dŠif¼ąÓZŻ„ķqewģO+JĖ_ęćƒ1`ĻRüˆcOмŠVœ|p=¬Ėåœ&‹$„O=‚–ī£įųø’“€5æSźG"Lģ~Ė£‘°=O.æš8BÆuGt‘¼ņ3³¬[r*mÖ& )ŁĻ>?·Ēż\9K…¼æ²ž=‘–IK-GÄNTŲw‹*h.e¹™Hī2üĀR×_±øŃdyÆÄ‘”-M)VpÖĪ_F÷ć äcØ ė+NæĆžĒ -yõG{r~*Šš†#āū>8:GZž;²€ĮOZrŲÓŚAV  QķqcCńr+±#~Cüœ!„b5ū,‚j#|0‘#ą]½2üųńWū,ė²‰ŽDšA,RR6ˆśœĆ BŹ€G /‹ķ’'?ˆdMŹ(›zŸLōßvn¤|?v&”Lgą€iŇü{ŸŸśæóv:­čT®ęJ¤’Ŗ M0:³<ƒ)ØēµA’D=wn’šŲ"ŽJ8P åM÷~"½3ž]HżåhÉStåj;O|’‡ŚÉFˆ±z'ŸMĢÄ+u xzoćĒž !ā]OØÕÆü[510 įE'ÓŲ7ü»=ižg üįlņŁ[8<8Ć<,Ø Ä“€wµoœWŽŚē[‚'‰¤<Įģ€! rz†śøX¹IžW‡ õ_Fņ'SšF}Kpį‘¢Y˜1ņÜ'²~(yq’&ŽUį ­3“iq„×É;;*±,0ÆBŽ¢KüŖÜ²gwĘ&ŠVØįs$ķD _o¢fĖd’OEo²d÷źŹĶ’|ęQĘŃŚH¦ž¢Q]{ÕRßœu³“2ūA3v©Fp?Rā²šH-”åögeŠ6ÆßŲā-ś%YÉ^IŒŻG]ö?<»Pģ²€iq“īd}žĖ8ĄI3¹ōŃOų¤E” ®Ż›ķŗŃ‘+żēļāż„Ąń—Ž@ń)] ›**„8’„Į@Ģæļž-‚VcB@6 RØXŠ'r~Cģ/‰[ģaŽšüā é±TÄŹIŖP+Ą#/ī’›Öąc¤p‹ĢÅ£™Ė/Ā>Č&9ˆØčßģž÷kĖnĖŻX’-…Ģ}X’Źą€ 5é'³ö8IĖi‚ąéń‹„‰Ł!E`h”¹ļÉæŌČ7µ ś£ČĖ QÕvI$*Œ+°§·ŚžVūQ–±pHI,M JžmZČręĻ»+~ź<m`Ņ%Ą^CĻ“~Ķ*I+ūAU›~×ĆH ćmwp%»ĖĄŠń5VæµD(£ÜĀ‘µÄ²Ģ ŌÜ-Š0nŠ®²J#ÜL.a Ų‰" kō;S:60—M75¢™Rę•” ,é8ߎ œĘP'R­×sŠąŽ™Dö²é·†m³’ŠõNjŒŁGĄf­z|²æLlŒ„@Ə¾'źƒŃĒzšŒdĖ £ŒØŽ?–@éŽøG{&‘ė²Ik …[n%¹qAŃ|\Ki ·ŒŪ›xˆY§$ŠŖ (4āߌżœn£qnf1,­$ $b>LX–”•pY¹Ÿ³¾Öh““d˜G RDwØ”?Ø;‘Š-ŻŌSÖ¾ÆęsFĢEKņ`ü8ķĒö’ąqöÆ!cy,RG,00(C$fä@`“z(O‰Y“|ń\ŪĪ–ĄJS”rź†50=7“oņ°ŖQR9…Aˆ”ć½x\ī|TGŠéVó-ĢL…ćōg5*Kś±(Uų[ķƒ&;S×-¬šPR!BÓŠś|ĖFź zcćŽ½>ŹäF’Īž_“1«É‚NQŪBd”ŗæ5UY’«ö˜’±Ā=ĪÖĖWµšP¶‹+Px“’FŃ£€…¶żŻæÄßĒŚPvæ™>e•ϬńÉ€ŹQ©,jŚõbWųX¤K#ĆžTmńäŽ?Ģ«kxR;Čīf*ąĒ¹Ż~Į+ɔ©Ši9¾ųüK'Ó5Ė UÜŪKYĆ(IōärU€cCžPżŚūX[®Y ŽW‰ZTW™­FW˜xVA)söų©ZqžÖ‚WśüČō+ū֒€Ą¹!R„ļ_‰°Ź7‘5»xˆšvŖ×CŸ²£~<’ĘŲaØĒģü_²ą’%qčÅĒĒN'÷ˆß Ģr6ŪSŗ÷Į1©5ā7Ij¼qµ£-|TEz *1ŖˆˆZ€j»ś>4ŪłrČ"E€”Žü¼Z“üq£RÄÕAa@kū‡Ū³ƒƒ'ĆŗŃ ÄP^ōČŖ¾Ŗø$·ī®Jö=@ūŪ%‘­bŖ‰XJē“(¼ 5z‹żeĆUø#¢Ø‘ŠņéA&Ā•Æį²ÓŸ,~/„šŌ?W5ƎūąćÓ%GŅD²·ń!"¤žĢœƒ_²]O+”IcøW‹’ņųŽŚYž!·.2¤FŸĪ˜G=¹š}BŲ²­½”y#Dj #Cµ#—&­d+*«ņāńį——ąHō9c3¬©å\h ŽIPMTChæĶö’ŹÉ0a7—*Ż^Ē‘Æ Héž]ŗā×®}Ź~$£/ūä_kdȵʬZÖ  ü <7 Ūį_Mi·j¹Ā`źįÕEU4” ECJö !q$«ck0L²Ü{sś“Š ż"ø¹·."D45½_Pų»ś«ņŁ03!¹˜:ńA#‘ #qYį7ÆģQpdŅ'Øķ=Z e6ļJżžK?šēb‹÷4¬j.QZ?.€BŒ~ߥŸń¢rÉqM –ōב".löØbŅg‘"OååöplĢ8AōŅ” š)¾ĄÖ!¹čÅžÓ`:īų õµÄ34e*¤ŒØČjT1‘ö°ÉĖķü1žh¦..- aZĻk‘ĄFõ/ʔū·!ū(ńą¹#ˆüq¤ŖÜi,4ų˜]’āK™¹_C4LʲčŹX@)øūBæ/‡üœ‡ $žöw•Ą^Nє؄—˜Sß§ļWžĖ2Ā€ “³EŹ”ÜN”'čp©qšńbÆš ‹G‹ø÷8,0{8Ų·kq ޼D@U|yV0Ü·?/¤`UŅ)b!EO8ŃeAæ‹J¼r_£PĶĖā qå"ր~ĢkœĆ̾p†yf‚d’E‡œR%X– Ķ|Cj½}:"žŌŒ³q¶Ÿ”RŽöŚ9d…¦H†3č—?~œJ~&ā?wžģuų½<qt½ÆĮ䗙B*śmA±]ŻŪażļļWżó&)g§R9$,]˜H.„PņMꠐŖµųcāQŹOµöŅ¢ÓGŖX4›ČGų§]ĒZ~ČU’ˆ«%·Ž(ŠĘА8č)JšžĻs¾ßóFK4{é®.ķn§L„Au*"€*a‚qęĖźÆÄæ³ÅĒāc›¹T cö‹\ÅĖzD¼e·AßüÆŚĀv%—Q„-*Ķl © ČõžSć‡VŅ“1Ձ«|}ĶzœnØoķ¦m{NŅI0jÕV¦“Ćł¤ā¤!(f¢ń­*S@8üTV”žlVŃ>ØK©‰~*ŽæeiVū_īĻņW‚ž•GFwP½ ‰€§NŠ”~!öW:),¹Õ#‰·q™TŠ’ŻOE95>šuĤWŌ¹5F(i]½*~½ńĢYnA I”€ūU8“X¾ČżŲų€ć“/AŲŖą0Ė#Źõ* Æ¢ą•!Ą“R7ٹą„R€K$‘ˆÄŠĮ0¬ģ7ŲwLjūŖ*žķW 4Ė8Œ)q9õKp!#õ@55^|_—Åń~Źü1.ærh¢„˜TSR Õ¾11āßå¦Xj2‹įØD¬²ĘŽ“[īŠ„”ÜSŒŸ Ė'ķ,œWŠ&LĢwIՓ‚’"žcrc#ökµ-ö’e…V+ƒ RBŗµv£-w’X’­fU[™.̌Ų7Gc&–Ń’\¬frzU£©§óCäŸĖóAk§čQf“K½M.z˜’,|dµ|éŚz‘i ±©Œ2ĄšĄ`ĮŽlŻ~g6ž’~’ÓõEsW*»W)ĄŽ4łe@n€Slnćn¼ŖN&Ī€»1 (‹T(¦żNŻš·RÕmįJ3QE]Ś„ ¼ŪsJmÜä!µ'žEY¤ŠVļŌcæ¤Ō Ŗ qxävo³ĖÓō—ķzø†§l«1Ū·ī$Ō‘ˆÆ"Ą£iš×—ūĀi›ˆ‘ŠńŒ1¶‹YX߄rźåf4­#‘•j@’}ņˆJßė¾ŪĖõyč Łb”«[\ “Z'¤«ö°Gšµw·Ó«oS$³¤Į•dT^KRĄ0ēš·ģ}¼ą·šŗ5ä×&žÅђ#˜/īŽ@ÅÅW’A’&żÆ²a¢ńهc$3Zid„©Āś£‹#:²óXø»3üNŸ¤AĄG~PĄČRŽŹ#āąZ*ƒ±āŒļū?o':æ—Q Ņ3hCz•$mVóe§Łū(ßģü2ød†EVQŘŃõ$oOĒžiĀMkXK9Ś5“Ō’3C I„©ū\h&’›°^‘ę/1-¼ÓĘb‚āZEehXqēJ€Üy|IÅdūĻ?‰ųō+ąTŪņ$²\Gš–Ö^ŌŪź”æJŚ ±J֋N‡©ĆKxŃtöB82**½­#å՘’)ļ•kEsiU€– ®ff„h;rĮŅÜÉ3QHĖȰ©ä:VæiŲäüÉ’-0]ĄdōÄˆī‘£0RV²8­ p½8žĻ/ƒYī&P® '?„©% Uw’*ŸĒ;Ó`hv> ųļ˜9T"54­hvļį”ęJ©…–œŠŃjTv5ØרšŒH©Ŗǧ% #˜r‰ƒ9`TÕøżŖÄžßēöqU õ€VŒ 0Tß9ŒŹ%k„vōį"æĶIŠÓéQ“-FĆJ³‹oƒŌ©4ėя¾€į¢Č=(ŖĮv€ pĘøāZF-NG§„KžŽk„, ×ū™£$ōų€ÆįœkĶ0KY£j*©ęD[ŽĀm‘‰ļ,ĶѶP“‰”(Æ]—Š+’GTųxžółWÓįČW“œH÷N%–Gå"Ä%XØTšV¬ņĶc_‹ŽJü¶ µ Rgš!ćĄĪH’„¹Ė²PśpFŲ™I’dłˆČ昫%õ©ū?Z‰£cֆeäzT’ĒĒńŠU5hfP”ČƉŲ¶I)’Ų„ĮÉa'ŽČ¬65żĄ½ł ķ­ĀbJ“įŲķŠŹdcÓłF!¤ś¬Į©T‰ƒµd¹«Tü÷Ć1ÜĮl$?ōłž›,ąµ~Šįe¼J±Ę‡sź­XnhxµhÉ|²LÓŖ54Xā¢ņ’«É—•:?īŲ·ķš’‹3G,Ó7¤ĢTĪ܁O²K õ?iź“'ķ6 ŗŒI ¼jŠŅ$ÆéDhŃs•f4 U¤duoŁoäūj^„Ņr śPĒ4RŠ– Ė‹²·‰£ż…ż•Oƒ±Ö§°¾g@ĻÉĪK`Ē…C Š6ėÉN’k÷ŸėäžėV‚Rś6ØKiöŸ"+*£(j—Hc†W„O/·'o÷šĮ¶W‘¼j>ƏT=XČ¢fÆo†¼q#29iĻĀā%DSöUלɸļSĒi…—×……a»daÓxę‰÷ķń³r’c‡Ś#Q“€ŻĒw‚+G’)]( x׿VƝ-Dē“ŃSR±Šh‚ģ#¹±t„‘QN|aæŲgS“¤†)™B4Ø”x°ųą ŲīC®;Ļ’Ōõ?lݳ i&‡Ē?¼&¤)Nþ1’Ž„šÕŪÄÆ|qź#ÆrÜ؊()ŌūdĢŚ”µ(ą 1 šęCH£A†¤Ī2ÆšqoõÄIÜļØ^ŁÜH.nÖė‘ū@'¬‹1Uū-ʼnāy³Ķrxó±/IɗrånQŖ×«ĒʟóÓ I¹2!—§%-¬mԊ;-CJģ>Ļ%ćÄż…’+–TØLjnB½Ä¼äō‰`ˆV¬ƒC$Š©Ćć Į›*ŁŚYc‚7¤“·%q°Šp#žŸ»Fn?ļĘ_õ™Mm'€ČńEXÅŗ7(É“•‘Œƒö]Ux’'łiŸ®ģB:ÆĄ+ĢÉšøVńŒ9†«ƒ#q$ŒYŖū€½€ŽJ|5ķ·L 굞÷Ź—ā؃w¬“F½ · ®õ\ćšip%ŌHƔ6Į§CF‘·ŁffŖƒ-K³7.0pQžĪ_ĒzT»¤ž¤…Š#D^WU%Įd"OMYĖK!—āżÆų©‹Œź„}Wh”•Āś”Žm‰bŅ1e܏²#+JŁ(Ņ`–GŽfÖØY$*ÕFųųū·ņSÓžšMūj‘_²Į;F„BB‰ÅIęŪķ|LXõ_ņŸÓĀķLź¶ņAo£ŚFć4… JõŲ4hæ'Z³·/µÅņIåė[«y=0Ņ$°ĘfäœC&ģ”pIRµd+žīū|ѳ£P5“+ź,ŃR7ę¬Ō%ŠČ„vß 5Ń^«Fh±Įń{ü6ą„/nXjõöÄŠ·Ø €ņūAxZӋeB^VÓä%ƒ ŃŚ„柽iß \/īģ•„a>7QU—"Fõé!Z7ł,’ĶÉuĆl©q/7x‚MĮ i OŁT Ē–’óVõI$LŌ”ŠŌxx}ų›Fއ X—˜}‰E§_—ü՚@ZG©¢•¤) ®’włż¬rĪAŖ’OAJјļ㌈ÕX xŹ-XWj© TŸ×ö±ÆĶb”§#Ör­š+Fķāj÷éžILØ1i r RąöÆś8Oų“b6ȋo$u?é ŽÕ(©žĒÓĆM£µ‘ń· ¢žō ’e‰¢Ļ°Įm­qéŖ¤UZś£™čükš$×öqó„¼ÖŃHµōŠ˜ĻØjĀ  ĒnC‚užó÷\ߋ4͈ŽĶoY£Ü/"GÄÓ!Øzrņ:Ļ8½Fū|œM̱ øy .ÉZ„ˆy9gfŪģ,ßäńĶpÆu"«s䢠0bŠwīŅdū\x§Łį„Ó“D–XĄN*ÅҤFß5£ą¤æ’//ēlś‡§e*H£Ņ”Ēź%w‰Šž@š£pté’ė—4qŸJ*VU Hw«3–y +ū2ų½™¬ČNå$~$Š w_õvn8ĒY’rĶĆ*”U9Ø5’‘j0D|ķŅÖÆĒźö®@m¹rą)§łä†+”µŗµ‘ćgxׄaŽy#ü„r7#ü¹!Ń&’mĒ[Uø”żÜŠŒĢ§üØē—Žt}s-ŒU^&ĘSĄP„kžA\2VķŽ æ¶86_!្Õõ9é\Ł»å¾=ń€žM¾Õūö›²‡f4Ŗ­N•ÆšĀ½rī`·øb~Lk"Æ2¬Ńµ“ ßķqĪi’JÆ ’Ń-Ķܑٹü-ܤ 4…6Ą/"®·ź„äf»†_††€¤P°ķqųWž ±-ėĒnišøiÜm³| ­Ś8ųuųc¾‹%'ŌCĄK›d§Äˆų;W’śˆæźG…ęDW,œ¦.ˆI”d‹įäīOğ“ßä«qZ2 µ›“7īŻ”Óį.“ź)‹‚¢¹ŠhŽ]€ĄæTj Vćö™• nYŚ+ˆ”š oL¹exYéū)ž®)jø`®Ågֆœæxxż®X_ÆÜ‹m0@Äs–Ży(4rŻÆģüIżąū-éžĆ6qŪ«É ŗŒĘō…dw,„ƒ,ŠŌ37Hō  üEšq“āĆŁ¦š÷E–ą· g~)XĒĘI$¢–ō‹G*žŌœ}pšézō7\nc­ J¤’¾”®üVi£W®Ļ¤ŸkćųruJĮ܊v߰ƆäyƊ¼ŗ©${恮ļ-„œ8“’Häņ5ģMvėüŲHÖb†kVv[H#‰$w^,MHŒ?]‰’b¹Ń“›Øļ4ós£[[I' tnkÄŗ„9H:‘ų•>f”7AZ?‰¢£n[~ hOū°Tņ¬‰‚ÆCµ”‡ł·Ė·”#Xp(Ü,{v±ń4Ųaŗ5üØļ$f<™‚½]ˆVC!ų—ž.{4ø!g`mŹ–€X²ńŌ?±‹4~“Ė`®Cš”ź(zģEköq *ĘØ(O ,“F KC(ļ/ĀQÉ22Zņ!×‡ģÆ ^Śy^#[“FYœšD!?ź©ŽIÕ捕ą>”Zī£N†œXOó0Xy­īš 8æ²)ōT-³HĢ ōoIxPc‡Öä-ū¾SĪĄRiĪ@ vQ^!ĒśŲ“71 »F!'ĆRVŒ»õeųÕĮsFqqé1f‹Öd@¬Ż¹Ŗļ¹ćĒž Ždsõ›˜ēūRś–‹)åå.õ­‹Q[ģüXs§O$’Ē!RKHŃ*P“„OBOc˾ł0Ģ–z<\€ēb¶·w ȏưą™Ņ“w-oT‘$0½:тńaÓŁpČ*ué–ūY|ż³’Öõ5>üu{ iʑQæłÓ|nĄäPbfµ&µ®ÄxPa›åipČ”[ØJņ„ kõ²Ŗ_pŅ®®óŌōÕ|LŃ1÷ėĄķ…7p"Ļ:¹ -āB²€ŹÅiКz‹žWĘCnāPkČPÅ֌ĮŠ»}拐foõ¾\Į4÷+õ3%fœ“ėĘšDę„K7f“eŠO²Üž× ’YØYŻĄĄJQ¦įŹ~ĒÄŅņ’ÕĒ]RsźügŌ“į% IöTńū šķūźå¼“G±Š–[‹„ Ū – f æŁ ižSaœ÷Aoø+s†HēÜķQ!@įJ+bšuܼ,=1=@P÷q,'§¼|æŁey£M†ęź;ØPĘRŅKfv;3‚Ņ#HTāe]‹|K;Źgó¤ß¤e Ķ¢…GeāȊĮw^ߎ_ŹĻ†¶ZZjšüVīHa7Ņ1Xˆ<¹ƒö‰ÆńĄŚpÓ¦¹I#†KČHę÷ŚÉ- @Ņŗ¬iN<Ö¼æŁ|HŻJÖ­gļičń •#öĀrū_šø夒żMK"Šv©?ķ¾)s ś‰›zmP ü)ź1©įį—eg¤DÜ~ Ūoõ b2Lź±ČĄ#2Į"±‚$“‘5*ę8rū׋`øBFަ1Ąójƒö·%€ÜŌž_š9”ŹĘ"vØBO.æUéō’›e'ĄKHĮ”!?·ĪŖ`ĄR¤’xÉüæ/ó叔‚x·Å͘-A„AzōöĢLd©­MEj øŁŁ j•`vģ#lØž)ŃĮ*9©Ü€kPvńĢa`Ņ‘V”Kx€~RE2„?Ł6M¼“Üō© )V?3掵I`YĆĖR‡§O§4¢2ŹÜP“ ±£|2F ;Óž#¦fś¼¢« ­Nƒ•r'ę˜Ż^PÕc»N æĀeČŻOt ū9Č4ŲfžŽK§p@£ā!Īź±ĒæÄĢ~×ŪfUEżĻƂ&žC}E’}¤šé€!Ēź)+Mž•äɓ &²j· đ5¤DŽŽØÕ’eq.’łŲ„‚ ~‘@ćžl'ó§Ē„Oļ°Čß3"G’Ʉ7QG$öĪ›®ę$ų¬ą?ŁQNNž„ÅŹµXJöģ»×bóu§ĢbŌ2čī“-ź[Ęż’˜‡ńŹ’Ė$‘|L`äĒüØŁč7ł`łE·¦j ’UaæŁŌ©Êb6„‚3šM3¹’Y$Œ©©RärŖ8ŒxÆØŸ }œ««—ƒ‡Õx‹×•¾Æ$jO SĶæy' —‚“ŠæķHU,4ŠIaćÄ)Š(ś±Į!«×“Ē'ū e2’Yś‚³GSū¶Ø ŲHŸń•ńKAĘID¤2ńHY÷€¬¬kÖ²"HĒżl|¬‘i)”+…;Ö£•Oұ&ƒŠĖhü‡¦Df­9I*Š6Ż6bŲ:ÖPŅ™$)@š&=éņSˆ˜ŠD­Umäč:W Æ† “š85(‰ZāgsAr9’b ĒZ8µ»’ )"3Ā“sd2¼lŲ?¢0o.0sE%š@UG“^”ƁćJ<¾īh­ÓŠŗg⤲//Hm­ P ‰”ź CRŸ~üqõ¦X4ĒrĻ’×õ>oĆOн¼2·ūŗć BŌ ¶?֘`fāÜYČŻT  éC]æ›">tœ¬KA?ޘŁŌA’HÜń§-“õ²Ø$ēPō‚&- "¬fˆ¼‰Ēn‚nXž”"‰ ‘X"É&£įZČNŪ/ĘyWöüœœDĘÖeoŻ»t0!aaИŪ÷\žŅ²Ąå-Žż§~ÆpŽ¢ĻfSŠĮH“Ee⣐ū ū ¬ø²“čÅĄ’JŖÄ# ¤#`Ż(Ļž¶+3Œ¶ē‘Ÿ÷l7Feˆ †Ūö²¦yUc++P·Ŗ«öˆōäZ’Æ’‚¤T ı„¬,‡„8” ųWaƒķć$ܓBa¹•¶ßįb[æ‡<=µŗy$0HkŅun„Ę(»tÜ‘ĶEÓ®®±Ę‹Ź$*ńJH“•xŠūJĮ£ųxü1śQDņĒØĢtöśÖ™hG fb.ÕŌĄÄ²zL?ŗ÷”bćūÉø.h‘Ż[…Šåݽ3é!˜°4]ƒ°oęk|<›‰PŌ,Ģ$ōäį ę“n¦ nHšńĶq<±BwU+E=Ą švķū'ōM ŅźēӞ_«”cj HM7#J+‹’ü_šł)±»ŁA5ŖHMTīņ”ŪÆŚļ’ ›‚“©ŠPŖ;śŠzŒÓśnŹIÄAPü=‰ķįĒ.0’Od±©”†”ŠÓÓ)» qZ²ÖŸźįœ U‡Ø¬Ü½]+P@”P#_±[āoŪū<ŸY‚!Na Ƨū*WüŖ}„š?ŹøėY’YÄLė4°ņV›ęĮ†ÕŪģų°Ź:F”vzŅ«ü’—iĒİŖ8‚OŁ“śćę™C%€8Ēļ|ÕŹ”)ÉK(öųXÖ3DYcPT§ āŻ@:~¤R/© ’ Œz‘Jž™Ė¬Ü󛝧Ń=Ę.|O_“©“O(ś—>Z²t€Č ,_ŒÉM6ß äK“ &#Ē÷ŠÕ_ćZå½ĄŽTf_MT0nD»&õ$o¾¹ø±ć1õŠ3ó CQéŠŅ„ņØZä_Ķ.d’ņXˆ<Ö;„qR»'¦ĒaO±i&r¬¤–åģSŅ·ŽÖY£¶xŠz %Ō“ź0_So°æÅū¬^;éRhį¼ <½?XLÄBI"·uōøŖü öw&K4é]n­äSń=¤ØOˆ-?ädŸšø&åYµc 7ĮsnȆæĪĢ£īY ĀÆ<WG¹mĀIHūļĄUGü<$¼W“05)$3‚憧łM„óH’O!CÅBCĄ ¾Ģń§_oŽb‘Ö;Œå# ŽŃ±aó«2湤QpaĘæ»=÷˜ō§E®,ˆŅµ$U #Ėq!*[`ŠBq–wt n’kććš#HŅLļAź3؍XŌ|{R£öŲ…‡üšųŗā°³ˆ9zˆĢ7§)Ć{q,‡żŽB"bWąČ“ŠA½$jŖ×Ąqvc’°Ž6G·‘R‚2Mk·ļµó Č1÷3¬·£¤Jžį%Y˜x|+€ ,m·‹˜I?ģUpŹÖ5ąŃGVHŹ‚MJ«F¾=xā”wnŌiŌ9?‰»G%Ō<”qa/'ńdhE?įŗeŽ Kł&E-źČĘREV¬PņZ%?ėI†VNX$Néč\“!„S·0„b•6§ŁvI?ĖUżœ‘é4k#·©ub³²S©Ec:°’$“]³ØirG%¼F’Hüjź}B£ž‰ĆLpĒ ŗē’Šõ?ėŹ©Ź®łDÓ¦"įųRœ…)N’}q)œlj jä{ŃAÆ\ē>oøõ.e1ņ-n€•,JQ‚1n­Ū—ņäFīä<“1, Cu;hHø(Ŗäõ^(®‹¾h•ę²O\fćˆŌP(J’¬ž.D”ŚĘbVā.?SvbÜČe_X“Äc®£ģ·7żø°ĀĪę[†W•D³#‘Čƒ÷eø ~76’³ óżÆˆL<ćW‡Ó$2ƒµˆUŲӗüML}§Ś•1[ XÉčĪ ¬ŽV»ń¦%y ‚‰<±°b›Ģ*}ź+†Ž‹,nźµ3q©§9Ł’†Į6ŅĘdpŸ•Ku­XŠų.ø±Ō[G3½ōބӿJ’”0‹Y½°h/c¹¼1[ś MĆbČØU‚W³ÅźU’ą9?Ųwåö±mz5KčĢ÷O(‹~*’ā½8ī›ćn,ܲGØhÖ×j¬j”I,Sbk¶Õ}øń’'ķš-›HÕ [J$JÕEv"›3ŸŚĀˆ|Åqov-n4»‰^ŽŹŃĮ")ų˜óiÓ~_ģ’&-Æ^O„]YCŖZ=¬·å~«K =ō̾˜Ūü¬„ž‰žå¬oµd‘Y#±^P­ĄĢV³žQÅéŗÆŪų>ŌŹŚģģŽ ¤>?²}B€ ~Ķ1_KįųHucöx˜Č÷~ŁW$ŖVf;ÆÄxš4 ŪÄ— f‘¬4ę’v Å*ża‘CSpŠż­ėˆ‰t7‹ŃŠžćÓuį,fÜ2šo‰EN(~ĻŠæ³/ø<Ϧ<­8ŗ™-ŠŖz@ŖWšĘĮK3?Āyņ£}•h°e›tĮéF'oP!2H`-WZmżąäř¾?ŚĄļēkHāYEÅĆ7>2ˆmāPG $%=C'ŁT^?ĢŃšżæ…‡ĪVŃLč·wΈLp³Ej¤ˆčŁ{7ŚoŚō’Ÿį 7žlžIŅK½H„yĘ-ŠmŽF<}!ŗ·«·>?ŻžĻŁ¦óœ¬CE}Xä1•Yč}CV *ĀJ’"’3e'œķ}7d¶¹ Ī2Šnf$‚””Ķz{‹‡‹_8Ū\*É‹ u›ÜM#/Ŗ Q>=øóķ/ņrĀf¼QveHYeV™\ų9ń0”©žRø¶‘ØéŠčāāKFüœ–ėtŖYȼˆoN8Ēö?™¾Ī ŸYÓɕŽŅIb<®ŸV5Õv;/8„r8’sĀ/‡ćõ„šÉŹ/©GéŖɧӜöyžT޲/Āæ³š$KƒĒ™įµŌo+øX­Wźž™Ŗ7bŌų›ŒŖķ%ģŖšäœń×ŗ…¦©.„{kĻŃ{•‘”/C)5^G~’ŸĆœ²ōNšō^¬ˆŅLX¤bE5*[bx|mź·Ā¼"ORY$åÅ32ŚßZzjž…äƒt“`å(Ęi½?dń żāó_õ²W§Lė©éļ(Łł’)ьrOą8kÓĒs’Aļ—RŲļą1Ż2č<ݟ’Ńõ6cÓlÆcÓM?†0ƒµzoż˜āEN|…)1ÜMśg6ó‚ onrõHągbórCū?a[“ņČģ–’¢]Į1S!hģ>"%ĘßńkŹ7Ą]†F·ĮL$®©Ņ”įöp&“–÷±˜~°ŅCŌ d“ńre­xž%Y—4ŠÉm,ŁæŖčĖ6Ģ(dpDźe•~Ēĉž¦ cc†u{„WE” £TRYT×ģ÷ų³@°Cyč‚č®ITmŚ2ņWznOĆöGĆöU³G# ō R#sżļ@Õåń†åžW,×PŪĒn÷q”EV!xŠrŚ¢˜;‰R(byLP"µĢ +Ȉ“ädŠ(÷^埞1ż¬%Õ<ĻBÉg)˜,K…”ĒzńžNKūĻWū¼‰ÜzŽd7’¼“ČĒėČ·:8J¦č ö¾Ž/åu­u&—Õ1I#™!“vųŲż‚O+G'—ó~ĻÅŲ¼æęK=VŠHń†D?iX Õž_’K†³M³±ŖŌń54¦żśõ’Ŗ˜M¤jcIó°Ōobø±Ö8£·€ŚŽI‘ŠQš6xŚS|QIčqū\ņłŁ©ś¾vZ‚ЬJŪ0ˆRꇭ%iE?ÉĄ:6Ø.xéÓFlź±Ķ“hä 8¬›†D)ę_~%zŻÅ¬©k ¦)C¤Įž¼Z²˜Ö3ĢŠ2æ~Ć"ä¢ĒĢZ’rŽęŅ;”vDY,ä <£›‚)ū3’‘ö0žöāĘH#ŗ±›Yž6U#hŖ Jy|H’š9×'Ėó:Ķž0ŻIĢ`V¢”ųpœßL¦(Ž8YØ  ż–Ä.°_ČŲŻN·†šŖŌ‹¹v~@ü%ū_mV\CRwŠcpT"’ŽŠ/ÄżāT8^ ĢØ’“’ĶI’x!˜š‘DŹj6*Ė)ėŁf žĒ0u“eŖŖ¼ƒğTĆĖü”ćöqI›‘,‡ÓŽ5®ģ”az€:tSpńÅfZ…ˆ &›’H€ž_ģS]ŖĆ§”äÜąe±īĖ6ćüžK¶ ³TŠ+½Ć†€qõé÷#böŹGÕ·ØQ3Q€lמ#&@–Š%>8Ņ2iŌ «öB‘JÓuåüļüŲ„¼Šõ»„ ’VCMiub¼©_Ś’ˆc½B¼e2ZS=Ą”1¹JļEäi_ååŗ¼]<@#ā§ŌE.’aBģb¬ņHxµ’-›łŠ"×Q%RŽģŽdXn$?#Hh)éŖ£™_ģ«Č“sēšāł†õĄ“HŒd•ŽąV)dć)é** 7«ö~5Ā©f»KUÅ$įž‚“-Ź…–”.ž—īć4żŅ«z|9~š¾Ņ7•ŚYś5ȀŠUڟ‰x8žĻĜxĘŖķŻ­ł1-ŃR4 Ȁ±°ÆÄ7ž+t\%EųKvR*~}?VI<¹ÆÜĮrgk{¤­Š”‰VU;ĻöÓž1sĪ”c­¦” «¼a.a-"ŖQ‰S ø ©ūL:sēžTJĪž£}a“iröbIÜZ™ł(ŽxhVE‘ų¢«FŅ7/īŪķē×59õ-Jk©Ū”ŒHcREI,Ż|]˜œcz’Ū*ŹUĢ_»‘dåĮ‘«Ē:Æó’¼¾ß ™Cu Īv^A–ŠŽņ9E"–żź(Őņ’ƒFų0lšøKZÕꙧŽGžšcV<Š”sRME‹jņ·č;€MjŹŪ¾(~Œ&y?Ņ՛eøZ’ ‹”’g¶#jėŌ)äŹ.•įißF-33Ė#(ųŌÓ³ÆüœĆ'ØØC”§jI-:ū.](Pæ ±’Œ3 žü°¢CIŸb†½Żd’c\·'ƒBēoRŚR@¼qF õźĮ°=ø„ņˆóäjj~)’ĖōłzĪ*8$Šk@‡éū$āWj}`X’.ŪµŪåŠŹLa뺄ΜĢNćį’Ū•kļ¶=Ē„¦[ĀŌ+[vŲ „‰6ÆFų±óĶ$q“ķ4S4½vųR䨩’)WpÄ]ČWjEpv¦ģ؍»ąķ ŃMF8v, šaÅb‘+Ōoź4=ųäcRŽŽ]~vŒaŒI0ėéņR÷żØ½B?ćśŲM$9nķÓkf„­ĒĮätū$ōū\ž?M™0×Oœµ©rĀD¹ģIÆĀD?5=än¹.æuV‚CūqHEv£:±’…–LmįHщB÷+Ä[×ģ‡VhŲ°ż£š'ŁČ44A3 «%ŻÄ|M~/Ni=ģW—śøĘbŠ£,ŻĻ*Ēé2.?Vų­„U’†•«'ßöŗt $„ŠB&”ļŌ5µņąé`Q“š€†Š1&4_ ž`n^ŁŃ¤bÅ`7ļĒČT9Ū›Ŗ…ž?»“āE’A÷6>µŖEؖ>~œ’…ˆj%ųV¼[üƋüœ,ø“Xa’HW•ŗ‚5¦0h¤Æg«!’)?Čx°1‚1 Ŗ¬k Ŗ?h°Š¶ć­Źņž~)šČ¬µĘģ„…;¬ÖņŠvńŒ…’аŁāoEQGķ,l½@HI;”Ģæģq³4SC$%k,D7BI”§øéž®!iXÜÉåŁóņ•I?FDźbYģ%Ū!ڟ°B~[× ®OšB Ŗ»(#ž2<€ķļü9p;5āōŁäZޤrÆū%’ĆkžŪQeQ‚iXD š5AŅ$ü)̧‚žĒłK’/,¬)9XŖża’¬¬ÆéżMdHަ„āō.Möą²¢/£qõHϧ lŹ(G%”Ø=’¼q’Ož9łc/o»?’Óõ.Qļ”Mzåń”ަ•#šķįf­’“ Z‚FīJõ ;W!z­Ģč°,†޲ ž× xšžą0ȉXżiꐬ V5Sæ_r[ žŚI®^B„ ¹&ˆmB́$­GcńÆŚż¬ 5­f7ź+)%ķĖR…‹³ż’’kų_üœZŻĻÕ§ŽCéȒ,DPŖÖ!„j?w]æ›ż\KU•ŒSŗ±if*$ä Š**ŠīR¼æÕĀ-ju’Dµ…̾šÅĢĢI¬ˆž¤•a½%d§śßėE4Æb£ń£²Ęh ;ŽKUē_ēVĒ[IĀÕä ܔ2«TUK%…kɔڜ¾/‹ģ²²wėķz¦?«ƒĀU;+Ī‹R‚ŃhŹȬ}­Ėˆ9¤.ŌsĶ€S±£s æü_'ŀÆy%¼•bĄ±J×öł=ĻĆX§ją Ŗd*ß Wm»ŠcG,‡tmĘĒprQå½jźŒBžØVå$oܰ­÷s2†Æ žĖń<Ēę^z {vIuĪ7†7  ˆ„häJ–ų‹.Ļš²}ŽjܗŸļƒ,g1·!¾×ĆMŲ8‰>W¼æ~ÖW°<H^Ci9o³éH Ūą”=?š<4±Š}%½L±=e‹ćOQŃų]›øäßeæį°ĆĖņÜÉ©<‚eµøÓ:¤¤ˆĶ-žFZ÷Y$ś»ń’~d–žw›NdA¼ŠĒ*ņ$¼ŖhGŅøW2‡„ÉZH/m½I!ń¦i §!Ņz×į‚źiņŪ,Ÿ¹`@ųdVg= ^ŲSo~ø“2Ē$’»måj(I/=ĀL©^G·ā>ПŠ(§xHģ=ńŃø˜…t;PT#ÓĒ $ąI'ć<äoū”'ČØCņ[Ćūėžœžģ‘OŽś’PtŲqĒŹĮ£’Ć/Ø$t#§$‘“÷”P„ē$Øy‚ĀĢÓÆ-’–¼±F4®M)ė*z‡Œ~ŗ×“˜ĮęKI•uY#ėAńÜŚĘ?L"ó}¼+­\­Ā€°É$NĶö }*õN_åG#’³/ž;ł- Ą‚×Q"v‰c2ČŻdŽ?Ż„ųJ÷ių?»äų)QĢW‘@RBŃ(x²¶Õ¼­’’ėš’Ś4‚”sˆ{ÓŌń¤‰’ŌݚP-IڽNßåĄŁ1>Æ5č™X‚~ŌtÆüœ’‚Ą×JŒ!#²ßn¼3’&’į±MBB±Ü1ߊ°:Ņ(©ßü®XY|“²ЧäĀ”=`œ3Œ‰­£˜Žā*:¬„žhV˜ ”Yą³4:3OŽWz^5S׿–ÓRįeµ90w‡›; H|9+_ŽFßäIƒą·ŽxĻØĘųŖ›„¤WūR7©@GZÆ?•=l¼Šž%+ń']žĒ/¤;2aݤ°Ģ-­Ü~īὄļV1€ĄĘó«Wüœ3ņõõͶ£%•ģ”ēHöoöLŃ׼䝔 ŗ‡~׳YŌ4ø9µ¼ŠCÉHݜØ<•OUķĖ›üKńd„SūxįLŗē’Ōõ-7Ū(åW¦St'ūq:Tų- ū°ŖņfHH”pBäĒł«¶s©§Vi„&»1©žę+iįr?ÉżÉjaśibP Čn!JķɃJ)Ó½> %%v·HłĒDŽ:R鬄’”$įÓCpÓÄU $~š;(UģweiN“÷ׄŖs¶Ž4™Ø:ĖĢqj 5,.Õfuw‘†T’`~ L rü^Ÿ$QüĶžĖ =&†īyĘåä% v–¢ķMß‹ÆśĻ‰£<‘Ė~ņ#¼låZ |GĀc'/Łx"ÄmŁy%(“r$UŪaNLžZ’žyćbõ%‚ęę~^¤lāH5GrĢ ”ąÜĀ¼SžHU”,k;²•­$|B‡łăžyÄŸäą Ź“iX¢ø–Ŗ• SOųČN؜üŅtꊱ JŌ)팸‰}PSģ9%kŪ~‡Ž”oöX­•ĀG2±Ż VE—$=hæĢŸŽ/łJø­äwĻ%\Hßī”öš^-Ćą <æh׳0Uއ¢ƒ¹¦ūO§4„G©šėN˜{I’kgĮ?Įʅøó ö?™Ń€#ü®)’=&ż§…Ģ’+J«Ė:ƒĘB‡Ó~Ė7‹žo\JĄ½œ¬„}P€üNŖšå7 ä—,‹«dŹāIyĶkp§œ6±ńaŅHäX„ŽD ¶Ģæš-šąQ õ 5L| ]Åkū×ģp5¼/興§(åę’j0OÜŲĖøŹØą*LRk֓Zš~ūˆ%:©‘Ćīei?ć|t¢Ä'įd’^Ÿ²ÆühaXˆ@ßn&nĘ„¤’›± ķKĒ‘Łc·DGųß ¢‰~±3(fåŚ“KcZ}'u$P¬@‡s˜ŅX`»£ Ā‹O"~ƏXćXgūų˜hŹN浊0tÉdm“V (6hԌ*¬×jB’ᧉ@ń2Jių­3Uē…ŗƒ"©„"‰—Y”OŅ:|­N.®]ö#f ™”ˆaož,ėfē“K(ĶxŽ.h…~ɉ›ö¹qįö_ āŌ£KŁć·“ė·Ń1.ѐŤHĄ©ä#RnnÕųU}?ēÅa·ž iŃŹ‰X<Éʵ±—Ѧćš/śŃä¦E[ÄGć6¬"_ņ‚4kO„"Ån µ»JGī÷aßį ÓżIdȅŌ$y‹Yč©$6ó€6©*É’VĀū•wˆ0’•m…Ć«ÉÅŞ25 "aɈ*”©ūJyW$1Ü4Q•&9[Ó+SR>¦õæi† “Y(€āĘ9=©/ ŲüNp(†å-å+ŃDčGś,‰øń꩞Ė’'`Z5aĆ žä¶ź„ ”<~.+ź*ü|~\”LK~ņC#k Rh‰V™Ō%cG8Hä÷ū\x§ķćoÆSŃŚŽŻPXĮhB€ŒbY9Ē‚8¬źs“āõzßmyāźńĖkźEńDā&W&żė}'•q÷Ÿ­ŹpŻĖO—Å‘żlŅRīy"¼Ąm¹*²qļ\m i„±}¾"Å]¾ -K'üG l}ONcĒ“GʧłŠ€żóĶu +õ˜ŌxŃ„ž”°³ÉČ×ŲIJ4Īķ_Ićd= $Y*?ą›žp^ū»hŁŚ‚Ō (dÄü¹ł¹5K/eŌ-f<=+Ųn` PŹMĢ‚>,(G 4?NōLH[˜äRYKP3­P}޼™UU9|,‘ pšĖQÅ@±ÕöĻ’Õõ)®ŁD×FŪõŹ&Ÿ,k§#Ų~óģv–ž©ć8ūO2ʛßŸłż¬ēK:Čt˜£¹ŗžBh›Äҕ߫;?OŁ|'Š3Ž“h»“+ 0aČŽ"מ{ £rė Ā£ŌõDĄėd_ö·ÄŸŒQ#Ÿ³ʉ°ó‘A§vųp€‹MŚE õųŗØv;Š+H­·ņqĀO1\FÖćŃ<]®)f£˜āRœŗP«ó’‚ć…ByEŻĆ*ķéń””āuŖż³Ä2’²’U±Å\9 ĄŽ*IųG=B½¾.{ÆüW.$³“u„õPŹ•” VŖG§Äßģxęµko®aÉfVIČܔ䯹˜©ćž_/ŚõBĘ;0õ!„£Øj†’ž8ū’9Ež_ŚūŒŖK€oSÄģ~ę\|č^ŁZ…}"x)³Ą sŲ’“‰QĪE”$ņl»‚Ā•ųæe×l¹WŒDSUźh\éæQžĒr»}šµ)¾ß,`ūKČl6ŪcL6^`!5OŁ@ƒ–ĆŪāēž^I<æ5Įøt)%ܓƲ­“h]Ć|hĢå~‚ÓćiUų«’yĻ$0é0Xk1ŻÜ„·½»š1cd…f’I%K€W‚Ž ÉW—Ćūk‚ę³øÓo®,.¢’&Š&dw [3æ£"ń$q*Ÿ žĒŁdO³‚¢ š»ŅŲ)÷õ\~$āTu=æzÕ=h¼’İ<‘Ŗ]<5-ńHˆ„…\ɗÅ=7äŽ(d”n nį×·OųŪ‘$’Ś~&­4R(a°äc@>HĆ·8觀TčP!”ķVŒc¦^O3(© ?… ?ÕĒzĮdģj²±ķ»*¢~³šw‰#¹E©hķ¤=(R5nżŹfžPCÆģ°RŌżäœwÄ"Ž‚eކįoµ Šž'ŚĄ’i‘Væœ vŽ%ž#ƒŅ‚ę"Ēcu,„{Ɔūā±[rś²l…ķēf>Ļ€üX/śŲM½¬lqVš$“ždĖüĒ·’Fcy+–A#)¹%™9Ėń23|Yh­^ŲŚÜ@A2A" ƒŒA䑞$ˆK*Fü=T柵ū-ƒ“ć4 }nņÉ!Ktž?T|jV_L–üü柱’Ż,š=¼@ņeWˆWł”2}50cķĒ©¦Ā«ødTßü cėņ–<ß%t;ŽŸ³ź9F œx©ŻjīrųˆVåSčņ’%¤’'ā⯑ݓ֪(+ēžźPæė’/p»g“Õs»žUߊ± ņ­y++RJ§ķśŒüłpĆż/Ėi¬[•žāh„UP« ØWš†‹'ćż˜Ż8š‘S—7/Ō<µŖĀŖ°IŁ¶Ø¤ 9Æ#_‰ ėøQŸ+†eAÅ^64ܽP~×S§ņ®kKVbd~Nī*ŗ™EjvQ“ły?ŚĘM ¤V9Yެ…ĀqFąĄ5C|kĒ—ū?ņkD–צ‘m„ŒÄÜ  õųźM©ĻążßópnIIcwź-bäH,Hut|Xƒö\ņĒA|‰"—¢”£U®Õ•o‹&žSx®ō“·7ĶbŃN÷s'–bąµųØā9}ÆŲų8|GsĮĒ,ŚlM§×nź³H öeY%7’u¢?ū_¼åĘø±¹°“½ˆČn­ćsF„$I"”ŸIÆ(ŌڬŖßĪÆŠFUeø >Ć@›oR­ĖæśŲ”,\©t’æLS·łY’7{Øå;RTB ?bęDzOл؂x3Žœ#-ŪčĢT-”A,ī‚ƒæŲ±?M—Óä€éÉ~qŹ}·Ä¢ņ1s³‰‚ö*ļcˆŹ\ĢTVˆ°ļź?ń®*Ó1•†Ź¬;“ź(ß·|¦š±FWpéJųüOųSnÜe£oūēv§rŒØk’ˆŸŻŁĀ”£ >.+Š„¦ßHĮ*ŸZ`Õ ź„Ž§ķŪīÅ®9}dŃ·ŠŽ@Ŗä€>ęč1—¾’éé3 «Žō1¬Ó·Żéć|én—–v‰>ĘKYaĘ~Œ+ׁ­>ĻŠ,sĆ=¬Pζ>“*%bN ? ¤’ļ+Å<œ¾/‹ūϵƒ 3FCvĖėz~•Ü öHpó+ƒ]Ć*¼{’/ū’łHÓOŒHĄ˜„`ūt£#ŸÄ͊Y«-‘‰kŹ3,[ҼāgOų²ägU‡ÓÕ4ÉįG2¦ēĘCOųYׯÉ1Œ7Hä ³rb†‚ T•ĀstV霬”Čr”‘@_LŖ©'–ź5—ŁKŽÄųQ™¹¹¢…§.õųpB^3x]œ‡-,pĄņ īōRTƒń7óc•/i Mm;IZ„c*Q‡-¹…o“Moy4|V# FJƬܖ¼y^“óū<µū\0č·1Ę.'•oĀ„b"”R£÷nĶJö«|^Ÿ©žģĄŅź÷ó[¬«ża¹č‹Œ<>›An '6ōæiW÷Œ¼–!héq©Ü7ØĢī“y…*I_¶ŖCWƒq‰ƒżØø6ŹßéČÕōāōĄ;~Ó: $Ÿ”7@ĪNŻć„P»mķTó6Š’L–óFųŪČ$Z“ü«‚’B`y@£$ŠĒ’v“ÓżR0@Ž=”).LL‚„¹F…<6‚ъlõōŗõų†ßņKž ōą#Ö!`h\·^œ”IūÖEÉ’R6XM"²–§`D>„}’Õ|é¾YOšÕ­Ņ Š0`hąƒSUpŁ ĒC—Šo›l’×õ ür{cI­w”Ž˜*FĒzFģÕ”Ī[łˆ«{}j_ŌÓŅQ u_]Ć'>æ9Óž2a6³p·šŃDeh¤ō# †Y F” ?³žĆ „ŌbYćšw, °³]Ŗ®{!”1j7Oļ0(·µŲ×į©F÷b2¤†AšBŖĢ"–‰ŒØcĞC°’ˆć$‹ī RÄü@Ų ¾Ÿų,l`#†d ŕ*Ņ•ļM釚uä‘E¢± ūŌz… ÉȞ//ƏĄ®ŸgÓÉÆé=ā×ė:Ķģ÷Aå§Ä=8Qč([Ó)ŻøüOö[ģ~Ž=ž™©Y]ÅZ@Eļ"Hęˆ’ƓšŖ¢Ō~÷— éóĘi÷ un®”L“ ³žÉhŹĘŽ8†Åxˆ§ŒVŠÓn(Lröü1°Ēµ¹,‚£ƒ\BKm¹ …‡į\öåčÄĢ’9m¤ŒØ?š+Œ’”lĒ8°+Ś›Ęq±fU؈ŗķöDli÷ļ‰Ū śŗÖ¢®cZ“Ņ@‹‰ĖžōTžÓĀ{ŖŪ½+÷ć„^ Wtī+_“OšŹéų"~Hkū XoZ¾Nš$ č€h ßԜéž¶4*µØbjypļū\Čłü$e^¶¤PŽS0{Ź”Xײ±ĆÉclk“Į¶Ų Ģʝ~ÜQó慶š¬ŗ\±1ųŻ=ZR CÓ}čiĒ“’Į6 óæÖt›s.’[¹RŖŽ“nī˜^q"|Cāįör"‹)ÜŗK?ŃÜ$`øõ\+źz"żė|rIö_ć‘ÄiĪ“^‰ŽA1øōdę&XŲ°*Ō#Q¦<*ĶžVJ¼®5Ä,zJŒŻ¾)s§üųnJżb¦†;‰‹ś³Gp“#Žgˆˆtõ*9 “żæu ü}ĀkĖjÜ,.ŽG’ä6(ņ …]’•8öXģ씼±ĀˆČc*Ŗ d#€éü£įĆi®Ż®6™YéJŖ¬1– ¬ķŠŻ­Ō+ĘB9v¦Ū|Pŗ’Äӏ 8¶ųXŚäĢÄE"*ØxĖ 1䑽iń”*ß“æČÜ׊IXĶpb°<¦@Ŗu„6&Ÿķ7Ę©ł#ÅŪ­’sQŖ™ ¬­ÅHmöš—[ŽŁ£3OVH™Ā G¦ķńKŪģ® Šą”j Ŗ„įœ4nI D±:UŪ§ć‚A¶Ž=ˆe“©4;™Y_ņIĄWĄ¬ÖÉ„dr¤t ¤÷ķaM£¢\Ć8‹ S׌ńrßż‘§ū^ŃŪź2‰>“A%Åø•ŗoö™š|*”X–£‚ŒĘ‡Æļ$oՉˆR(Š1>Š^MöWSüÖĮ°f†_ōœ^°ÕIRŌDrv߬/‡0ĄU՘ULšµ<Ń”§ŅłŃ¼#»Ģ·5õ Z#”¼ŗÖµųŗqÉX鎒:eõž™Ø¹’Šõ!§ß”|:euŹÆį€5Y’+9åz”H™™E „Eh 3”ł¶õR;ĖŠć…Ń-”2·©iOõ‰ųŁyr1©\Ć£oŒ²Ē¢]·USĶ,ģiö”4Do÷ćqĄµøOYŸ•©fćJ•‹*ĘRꊪ?Čż¾y¤iäŽ@čQå²ĄH噘ČvÓģÆó«‰M;$©'TŽCø”€sŹH#’s/; żŸKX#…Y*Ķo`ÆčĘę…ä37&bh^”=5v?oāžL,»»D6p€RT‡“Uųœ5I’+įĄ7sÜŹę9‰?W‹0 ‚…ų~ī*9-üøä‰#ä Sp‘Ņ„Ejšnn_cāĖET!Ŗ!u˜rŽ„­×ķraŁ~/÷fäĒQ#2qW%„d v«nOüóųUø}œ1““ Ėź+&e˜ÆĄDl82€yXI$uįšĖĒżŁšÓćš£ŸJ¤ˆ)#*åĮHūRq¬¼©ö›Õ_ļ!LV[ż5®š֎”†ćY$ۀʭ ®ÕaĆłłd?Z¼k÷ŅŌ¬£ŠĪ‘'ļ•x… Ŗčx’«&ZĮń  ¹*šx•©N?õĘ2D‰œ”āŲ‚YyŹ›ņ®&%eŠā.@,ØEf<Øi¹ų©·Łē»<™É]ƒHŪiÉĒZüK×ö¹bGŠÕ}†;‘SÅØˆŪ®/gp"‘cz,dՉQš÷ß”źŖßõÓe¾”séķdx£¤u˜Pø”…>³uoŚoęĆo,N`¾õ$C)‡Ą¼€ƒß†%ÆéJąŃ¦ß?EĀ~8 %$aPĀ;—R“?†%2J«ö‡%»/?‡Ćƒt=ęńyŹĪ–üš‰4’³üUą€n«öy?åöpö)Aos]ņ¹‘ąŲ“ę®#āOŁWżēŲČ潄½…Į†AX˜ķä§ģ„AFŪiŠr’YĖU'I©å±3“’zˆOąø“‚YQb&€Ėńå}15~E°\p½xÆ¬Ņ Ȩ꽿•0—ց£YÜ«֒øNæfOų\6žq?—ąž•Ń̦„“KD?Īē¶D$’->Ѧ”‰ē˜¤-22ś®ž’R½!3ĒÅĆüæ‹ŪŚŪ¤ÖwVüw<ć“ŅpÉUøz<–/Sģq_å_‰²[¤Ę’„nŃŖž“P½+ћüx°Ņ²^ކŁd™«$(üž?š8Gę…v²(āž7Aµ90?įŁšŸP޲E(4żōNk¶Ī‘G’F8Pˆ$Ķæī’XܶĮ„U’gƒķÕEč’SXĢfāa±ų]9•’dÜ?ä^š6d\/©32$ˆäŃۃŹĖæĆĮd•¹~Ļī“łqó5Ķõ¹[Eōm½üC ÉFt’=ĘĖNŸåcd[ˆd†Ļ˜~"õE9sŽ(Óz~ÉuSž¬®ßī¼wKg?»^.Ū†g‚P~eJož¶6ż™ć+ĶJ:śoæüa†+ŗ—4–I§­W1ķžÉ·ĒHĘ0‚CDē©=E 4’Yp¤ź×p…<ˆ‘‹0žer mQńz;į\dGĖ/$"ŒŻ2za”Š&Qo½U˜1$‡éÅk'X~ņO޾±įä{ŸT3\ˆžš€ƒ›= ySÓ_Oķ~Ź»’…» oN0ˆSoLƒŹBß܄e’/ż†I©¹ē¼<ø±f-Ń5 Äכl‚Oł·įMŽåJЉ ķėœøµ@ćń8ųž×Å&"l®š!³"04U’Š ŌvÆ&oŽ7,¤Óį}Y¤ų?Ņ~_jØ E÷āÜ?ąż1öVÖń·Ŗ–ė@°ל®Į‚0ܚ°­8~Ūü-Å…›—õef…“RJ”ßāHˆQ@ J<±æ\ł±ā:&‘¬­Śó÷BS0Pō4 šPēĻāOŲN žV)«\:ĀŠ[\˜$Œ—U&ˆAĢģĶ p“›Ž4æ¼åĮW!ŗ¤–RO,l&’]’Gb²zŖÜMGŪøći"@ģ»»TČH©$ĘTšų·7Åf· XŪ/‰j ’ŪŠÆz³~×óe å*ROM¤g-B(8JOV īąÖĄ«ŗ9V5 VbEŌŖ€>Ū36_Łų²§’Z€•ę Šˆ)ßł[+¹(<Ø)N‹Q·æĻPįŲ‚xü»t¶ŠĻÕ«>ąžŪ@Ē£SāŪüӆ—60Ćs\zE„Qź³€"—ˆ ¤’/%bĖ*7÷¼”—„ælóČ2Ķ'˜ī„·āŅŤްRä£2ęBXīĄŗü_Ė“[„Č¦ŖÖ”dj|qN§ÓaüŌäńš’'ł\°ćHXmżIē‡Ōž)™m£`Ljį¹³±ß—eJqnGöZN¹²µhį(ŸRøM~0S™§Ļćs»/Ų’bü?w X‹F‘ō3©gU§*Qqßģ€ĶĖ»Ņ.£’±¤3“‡į‰\DģT»|+ 欜Čų¶žķÅ}4'‹ƒGb}GubY^8Ż)Ƀ+kšü?Źė‹Fes#G%ĆÕg†Å"āōĢ”Wr¬Ē¢Gž_Åšą»[…!q0”Ó,äĒÄ»qjBqeGük‚āÖŬFā*Ü£ģµTŠŻ™’É pāģėšņ ęxåŗŃm®%^34U®ÜŠ”bHųVJ©’ŒœW#WéÆ3żÜž²CQTc_Će‘'“W'Ņh>1ŌxG’³b—Ä)FÅćPµŸv"æ¹ AÅŁ^I+ćéüĆ!t ßfōx”;}ˆĢ żķ®D®ģžkˆg †+q'Öå+²¢€ž’ö׉^q÷gfā˜CwWŻX@®Ær+Īz·•Ś`/ė’'¦‰“b’¤ėūĘ·$½_‘?ÆŃ_ö8-#?_¹E;zqˆž“0žL`0„śœņ‘šr‰éįé\¬ŸńŒ‰¶Ś¦Ō-o@¦µ%£i#’Usk¬Ž Øśgnžš»žæå·<ē„ĘŒŃ/PwZGƏŚln”KųĮx§ŌPƒBd"µŪć+·ł-€ę¼ž Ńco†s"ÖæŽ;»€ōĻł9RNĘņ)¤ ńf–6›Åz“)’e‰"š¬ M (ŖAžuT®Ž>£c'F’īŖU&{qQø’z·ŗG[üSYŗī‘Ŗ¹Ųķė9"æš ˆ¼æčźda¼Aż£„t’SԐƒo)„R@$čw<‡¾܆V›‰žķ€^#į<Æånxg'ZFByCpt§Sķōā×JU®ĄDõĮA70GŅÕĒ2:E-G%I­®;¼}6§æ$ÅāµTžH“TT1āAčųX°|3IPKHņ…aP¤%Üū•uε ²Ju^ŒŅ7 Uf#¾Õ®H†?~¹«į—C㟒Ņõ4žDõ8ӄŽgoOD¼4سā<]OĆOųlåžm†¹i¦adI}p®©X’z~ö^ Ä.BnååhYi#ĘĖ2–”ū 5Ą²—ćĻö®[“|0|csTxĻ F‹†Å`R }?™yæ14?¶ø…š“- —0ˆ ¼²‚*VBPœT¶ÉéD?›‚"žŽ7Qŗ’;’ŠˆśeKäó8Ŗ+U”Ź8¾’i[ö_ īdø·I¹‹dg1£•«†żć7ū%¾Ąū?šš*VŽHt>]xp’„’_‰/­źNc{p)ĀF“9E"¤kæņæśœ~4Į"IæFzę©4­éŌ30Ž:| RvX}Ÿ·šż—Ą‹zÖV릉,€u¦Żn#»rųŻŸĶ—¹œƒuļ9U`$2ENļöT°’(r_åO“¦”,ķ„YŹÅ$ŠC<Ž=F;ŖųõżŸõ¹|^šm%ėÜK=㼋H‹F$Tõ_‰+·Eųy·©ĖāĀ1éÖkfZMø+¹!J° ųø²¶ßģæ—ó"v®Ģźڈ.-ŅqóĮĘ(ö«¬3?~­CCō¶#yR<¦2¼Üō§ØČM¶/†6щōۘėDąŸ+—y:’*ÜdBig˜%¼e!f’“§ŠFeŻĢĪĪUQx’ŗžOŁĄrĆqA e‚—K{ˆ³E'/Ż™ų²Æ§sR¾¦üe›y’»)di“éĮ«2ĆüŖ,ōóŃįL4Žõ+²zL*_FEoł6«’…ŚśØŅnTō‰%õ茿®Ȉz-Źø§)®(OuQõæŲšf•ć’žäPń©ŒČōiŽ’ żŸ¦X!jν”õ”brKŹKˆŲ•–II ü@4(ŹÆß«Ko·óf½E’{™$źÓ*ƒŽKhĮ»ĖĒå^$B¼lBŠčæó+2²^BŃg•DŪtō£2Ÿå*āQĪćQ“-_[•ŗ(;ńŖČ ŽŪÖ“Ćč¾Ģ\Ź„> e M¾Õü6æGh%…ǧöŠfN@’ŖŲĶIū’ŸĘ_‹›‚ķFŲš u©Aų~[}Ÿ‡ł}WCÜ%Ķ•Ō/'”‘H䝚W’Ÿ²Čмæeæa+–hį‘łGœ©^rQØ”[ŖĆµc ŖĪßņąö1*ˆŅ(‚¢8Ēā:Wh?ą~Ļģńu=šČ³Üśp>œ Ī)aB#¼œžÓˆä“öxpT…­„²–ŁĆźĆ #W·7R¼!~ß̼~äUāų[ ÓźqސĆosךD.ń˜ÄŽńÅO³'Ń>ēnMƒšEŃ«V‡Ó/U¢UŠæńö~Ž)qõ„`×<&p—VPØ„K|DS©Pq‘ś`1BX1 īkĄ+Ŗf<Ńįę—VJ71+ÖE·˜µwŪ‰uȕ×Ödk‰mż5ŗ¶›Œ!ՊCĢUĄ5āØźI_Ų‰½OŁG4RK46zŒ-„—źr)n,Rˆ Ø.«żē/µĖķrćörE ߝuŲŽtqÓ£ąĮ=ŗ’±ĆĖ•Uø²S¼BI¢*›ż)k!’eˆkŽ®•{Z±‰Į=źcųŗ©&C£‹Ķ©+šś¾¤‹CŗÉkďøTąOHĒ:Ü:Z2Ķ@zś«ĆžqhKCįXāBµ®õg`’r°8”¶‘4ņŹåK,”ˆ4F Œāʜ1 žS/)FP„Aź8ę`~IǦ]Ģ]€€*ŖĪ6ØHł“ō±cž¶ų䆬fŚY¤P7Ź„ŌÅ””.«„Ž@@ų©Œ‘Mė^\‡śŲrčRāHžDG0f­>#¶ćā^8ä®ĮC@Ė QæŁõCšöØ^ųķd/ÅŹŖZ:6-+ļ…Ra#NŠį–¤ÓįWÆ\ni ‰ć‚ܬā bCOłémĘø8ĒžŠ®jZŽ#µz“¼=Õ# &•*H2…;ĘŃų1’†:øk‡Š`æÜ[A&Żyśmöžm°Ź44@„°™¶ m§WĄ™³§łząÉ›Š¬¼r€=”Sć’¼p„ré¾Ż3SÜ}Ł’ŌõlĒå”k÷öÄdu $|M@ ”Ævśao’ĻĖŗ”ÜCŹŠ,pDz4®Ģ“ Hm‡²¹Č|ŪÅ-5+¢ÕP†ŅŅē«zqĆ鼌+כ7Ćž^D½) œĪŠ^K§^(Äéŗ3 ņEÖ?k÷œÓķqÄŁ™TĪŪŒ¬j€ƒmh€zq‰id<—ģóåĖż÷Ė ģį¶bPŸJ@¦,ų؍)PyrßÕTˆ_Š5Gō>ß,&ž‚4‰mH‹Ņ¤exĻ>/Ž¶Ķ­$I`įD“Ņq»j9U©öĆŖńćžGģć”ĒBԟMZ½O‰o‹ąL "*Źž€’5`Č©_³]éBŹ“éū_ģqs-¹™’>>¢ĀļTW‰&Š­Zs?š\½6āÜpS“𭰊?ŽUc€ų Ī„B×r+#}ž Ĝł»ż”¾“–SŪM&xć n§ķ/4?lq'‚£ÆŖ+žĖģįzV²3~ņd!˜’f,āeżåßqĄ²ĘV%ÆĀ$ūC”ųHSģxrō¶’}æł|µ£Ļ“‘ pEkžH'[Š[šŽrBČď‰cV54ųæk·ĆĒrEĮõ•ŲR 9JF켇ŲćžR É0ēĶ]ølG#4§Aö± ’8•„„S!Æ^“€iüÕć’\儫Ȳ&ĢīŎę„)#“WńĢŌeżį.ž¢«1<¶ąßżłžČY+¦Tj0‘øöR&»wƙkj°‚”A!£!W*ƒ‘¦āPßäÆ'vžVao»ąĪio"FüŠTņRū©ÅO¤«ū?÷1¾ĀB/”oN)j±£2¾Ģc§’} xÕ?yé4Ÿģ’}9ŅUīō[h“ĻФ””Ē'(¦J©R~Ņ D›żoW m",ĻVEcZnČą”oŚ­+EäņūdEŪ#\F­ź*0)Š8ę…Iö§ņńż‚ī.„Šx±Zžā„vŪŖ’ŸüU¼Ø¢0Ó9"?LräzWā5ļūĶž »] RŌP±óś« ø€”I”NœŃ™˜ØSÆ&ēéüŽ :Ųe 4"hćPĮ ēy"Q^Ÿ»F’døÉŪJ“•ś[GØŠū±mpŌ ņDøŻ¾.)šæRóųP<žb†×PŽ +K“¼e®®’(ćHø³ž-'‘•Āķé|[ūłdē/0kėģąJ*Ķ G*œEHWqFUįVN|½Iįū 3MÕµ£u j—æč×3ˆ“ą"x7`JÄŠŹfć/ī•ž²Ü°$¾lŌ‘4¦&@³WM†2¬²S­3CĮ}_J7‡ž*“ģ‹ÓõŪY"æÕŻ™t›i"Ś3żiU¤Š…ę`䬒EĒÓD›’ü„†­åŻrźź-";Óqj*^HŃc’“Żų(Pj| ń'ļU?cŃķå‹TōMLŃ(bxņ3%½7g„{änšMüā0A’å¤UØ éŠ§Łš%i?ČOņššiąŗø“†ŅjKm,u’_ļ ŹżwVęü üµū?I"p4łe QŠį)ü¤Lūą{tĒh„ńåEi½^'¶&æģ¤8«Ø˜2TĆżz7źžL‚Ē ŖJ¤üBd5ųTšBM}’LBõŪź­"²”/·¤ _ųŽ\å8j¤?©źƒü  {žĪaɄņ>‚ĄŹŌūqƒO¹°=Ō©*Er¤i3ŹŖČˆ÷ŖŒMďu4@Ō4MéשŖM^£āuÄåaŅĶÕ»’^+OäOLPoZ·*b&R5„w‹SÕ$Ÿˆ_£h˜q,īž…ŚT‹*‚[`y+Žø‹^¤M“ŒĢÆ?&Š9N4?[®7ė™ćd#Š£%YDŅ ‘ CüƍÉ9É|ŃfņŁĒ?vy¤43¹ŚµäĖtČr1*]…i¤iÅA) ŹÄEĪæOq’`ŽPŗ³Ņk»…’Dh"V%‚ČĪ F_Ż£SāOƒ÷b૳ØRdÆ`pŖĮ鹆«mĆģr_÷fŽ/S÷n¤¦ŅJI ¼j8ŸU“‡ų[Ÿņ` ˆb’š ˆd†¼œt1ąŸ»ėPQӊņÄÖRi"¢IgTXŲ•e1Ņ£鲟Żü?ʟkķ_7k‰(ĘI",ÅG`Xņ,Ŗ~?ģqž©·‚TØ@&W`ŹæY> æń’ŽŖx·.ȧŁ’Ė)ÅC5äT֊7Z‚’Wü’i@­$Üģ™œ ­aJ|_Fd/ V®Tuż£Nć%Ö±ź7leOÜL’0Bh*ĢĻZų²C„yWOž16…fEœ”X¦Q#"33+ģÅ8²a£łߟ)Ō0Q]Šŗ—Ÿ‹)4Ż žĆĘæń6–ŽßORöŃņ¹R®jhdgGNMB9O‡‡įżœ 3,w<,ĶHŽP] Œ»KĒĒ‹…)ĮžŅšåÄd18R’Eé,G!ČQ‡Ķ’ź|p;#|AgiÜC9Ū”y䒑© 48†ųO©ĖūæųEK^ī* HĀ sõŁĶ?©* P›@Ž/ļ_NOS‡ÆĻ”Ö,“Ū©§øŌRöźś4¤Z4(’ļźrA+™>.ś«ūÅ_ļłć›]šzM Ą·2£–į@¾ŽFŁL³ŗ£pūl¦F_ų©šĻ™uM6ÖŪ”&åU#FjK!ō H›`n<øóO·„ĆY‡ŅK{yņę(Ł“ČnŚ „·}&ę²»‚pņoŚ_ļ1{…ׄÓUŒrĆ<␱€,‘TP³‚“ÉcOõWöqöĖe +k}m#Ū¤BXJ²Bœqꧦ>±H½4ž\$±ņÅżŌ²éĘS8vō4ųā*‘!!õ’rMä(ʬße?e¶’4{m2}KEv°»r5‘‚Ēs-ežʍouź$ņņipvt"љd‰¢’ÖYc‚ v7H²«Ā%ā¼9ė!ų§V^<åĮépéÆ@œ”U#1É5ŹĘSø2Ć ægö~Ć|k„z„· _PW‘–’FrŖĮaš\ųl#Ö„±¹¶‘ƒ]BcŽ!Ō¬œųR*YŁŚNÉčžĻŚĆūM:ń¤^nØ]ŠWwæp?Õ>„{a¬ąÉ¦FüŖėčšōų•Ń ’†•°jÆ9)Z+‚°cÄĄ­ŹĄg>½`¢éŲUP½RķP}f®ų•Ó<öSAŖÄŪ€=j©?šuĘĮ:²Ė+ՕÜUEM>Mߎ&)b«ĪŽŚBš4ŽI7ų[ˆÓޜrļ#įŖŽSóƒįŲ—ŪnĄFą°$*#•'­XÜ’'ĖćZøĄ·(ÓŁ „ķŠ0“Óļ×ģČp?­³FŒ 4"CȐ h¼š]ĻņóĘżzüBC\¬‹.‚\ƒ%OOų³Ó_ęų±VšóŌe”‘›Õ1†R²Ęj9P~ķLœGņü_`asx©=`Ł”nMÄģĘŖ+¹ū\ą?kaHȲB¬ ­†%˜0$ žĻū,̼mž0€FŽ•'„#ä+Šų`W•Ś#ż©ĄY4ųł’Ÿ*H±—rŠ|q–7 4$ŠS§Ć†ŗRŹļh$P±ÄV3SBZv!«N’J4²­¦ 1ćN’ń'õ[:sĖK³”š2Ļ 0š(-Ó·&ɤ.¬ŅĄńaZvŖ)ßļÅxļŽ§lŌ>’ÖõØŹ9DāR֕ˆ?ŽłÖ¦u¤³FėR TÉjŒi±÷“ėœ£Ģ‚I“é^Ä ADœT¢ĘĻĖenLÜ`‘æć'?ŲČl6»i'‰cN?Ź¢‚4rO"$¦Übõ&äź’fœĄ’Õć~ś¬1©õei J¢·jšVW<„^ ķń,Yi4ĀE{¹*ėÉ`†3Ą(R¤ÉĢ€yzÜ}(’Ż?÷iµŅ„ŒÉ)[ˆŃd(YH’Šćä9bßĢæ±,Ÿ½õ8…õćõhĮRęy`J0 ҵ-é­•ž÷‚žĆā(dGõdZŹ Ķ<‰Tž”cӕkżŚóžńš2Jx234qž^¤›T–!Ÿ~Ė‚„>ò·ķI‚­a¹ŗ¶D©ża@`€Š€ƒį©ą?vŸĶž¾Xā’$ŅAɘP…隟jŖ§ūņ_ß~ĻŤvō›ˆaėQV „ “äŹßeø­?»õ=?ŁVÄby%™§E)Y£X˜€LM¹äv§oQSģń‡üŽ8d|·,zzŪIlĢL5 ,PGHyŠŹYŖččYžĻĆ'ł9QŁÄ×2G5Ģ0zŒ“£<«^³JÕ⬵nLæm¾žLGaĘ7ŽPÜshnVIL4”īBp}£–œ˜äzųĪŹ²Låd;U~ĻĒućÜ}„ųF$”Q%“°+AZ·s’ˆ¼LńM «ćŠBK"ÆÉ ~{³*§&Į0+:§*8ģ8GĀĄrZxŸ‹ü„’W•I§¹ūfyn^G H5÷’?…ŗT*ÓZ/G•˰jQyņU÷?Żä¢Į–1lhx¼Q…+ūÄ`>ŽL¹)Ń-īo$™m#iDŠŅ¢…x×§dÉÕ”X@]n.”¬J±%įp\ °5SOó\)ŌaÖ¢3;ŲĶõ~tŽjqrØIVąĶÄ–Ų3ņž_ŁĀ1®‹]FXµSjĀ·7rĒ3@,Œģōāܖ6“—ŚuųłEw‹ÕYšédäövöÖī_Ó&œėĶŲ£ž›Ńōł}æębŗjsMtŃP³5¼š"äVؐ›µ%‘ŪŌOāų•Ó‚āžbó?)!T‚Ęų`hŅStTɑkÅyū$‘ü_óäcU¼Õk{ż@¤æŻ®#™ł­bLnЇö8ÓłżL’yaŃ®#—NFųŅ»ō)éĶP…’AHO æŻ,Šæięū9:Óō»•“$›÷¼Ņ8ƒ,i]˜æ&ų¶_W›ŗżøy}–Ļ}o Ś›yŲĒ!u€t„¦ģ‰ ō§ūłæć ` mŲĘg» n">°ž;“:—sźĒ"ı"ÓāqĮū2ÆģŒėr…¾²““% źĖt‹HMZ©#¼¾¤oū.²G%žó —ĢõĶü©¦\Żéw›[±2rŽTeä&H˜Ø pXy¼æز/§i·š}櫬Ķy©2rQ=šR ]@āŏŚķn?’?U~YõDg’éšI&˜$#…! XŚ»»©åž»žń `wk„4ā^"Ńу šŸ³!-ū$­P;3•ų²9w„Įu#8,g“’É0n $“eä †8ٚŒ?ßmĆ÷œ[ <³4’[3Ļń¼‘·"v%B¤Å·„y—pŻRI<·(SY’ŚP޲"Šł1?ģpĘ­±N¤7ÓbOÕA58”Ż_DŒVc%Ą–Ł"¹$q¹FT½&YOņAė‡VJPŹ)# ģ8Ļ$B‡øżęM4EŅ;U­Ł%;°ŽS÷œž[Ė1© Ū”d?ńś2óoą3’×õG†7(ūāSTĘĄlH 9 ó®-µ=Bšs¦YzåFō¬ĢōaCøś‰Īgękpćź”„id-MüL*4qqÆģÄUڟk‹6F䩑d5ü¬Ó'hK©”(;Gš7õd’[‹śˆ˜Āvz“7³Ź$bėÄæĄ¦é ūNÜ}GT’S)ח'õ^U…Ų4Ž \³^$ĘĀDJt‘žéyńĀÆ^[«¤Y\qO†Żˆ&¬©@jQiš ’&?ćĒKok ‚"H*ģĖʆŸhĘĪ’ķroē\JęņIUŌ79¤$Ķ%8z’HCøžU”ćź/ӏ÷ ŽdF*X‚°•¦ėŪz­ń²ÉM„1„H üj‹# 4V5+Z1ćé æÕ|=­½µ«–žöäņ,H5Vų¶ ޚńąæĶž·ĀI-ÄĄČ_ˆ·ŠJÜ ó*„ųvTūJ$ćö=oņpVmvļsŽMńtPA źA½¾Ÿņ¾4Å/"†ä¼³€XŻErĻ·ļ$)šŌkź·¦*oÄņ¤ņĻ'‰¤oŽI*Ž‘+šĒšÆ°éö¾ß.9rµĶÜÓK%Ą@ćUų8€~Ź×ÓL ygŒ¹A"7 ¬`TķŅ“’c™£ŒK*Ōļ+ě’Bś†ūģc^óź÷3²"¼ōeˆ śˆdf1^ų#ź*‰kĖ“ńSķÅø¹ŗ…?́dfüœ|$ĶRFńƒĖāZqVå_MkĻž#‚“PŸ\²/ŚōŁBī­B§vŽ„z¬ßė|?g$CŒФ“č$€÷ä”\w’$įŹźŗ^’dĢ~&ˆÄUyøų‚Ś” ’¬Ų"ęo!ėĮiq«$8Ū¼Ŗ…ʐÒÄÓų³‚ßĖ:&”ėĆe„ VSOōi39m‡ļćäܾ4Oų»æŌu{ß«ßhz-µµńRxµ."ōÖ]ž“õUćźP/ ‡^xŻWĖ’™÷7H/ukXd,—ZtJš$s)Ž­ø „M”i?“āžė’zo哺n³łŠ§ĘįŚ«p{ vTõ…—Øųחļx>O”мŗ¶¢Ł“ Uė „)IL±Ź}’›.I>”l¶–L–Öē¬Ké*vcÅĆu’[!ŗē˜n“+łn(MbVŽßFxķ¤·‹ķDęuVyŅT+#rŽŪķįߕ¼Ė§źŗbśś‚ŁҲųm# Ø‰Ķżu•ŻŸ—ĀÜ£“ö°{łNŅxc¶if¼·†ou/ļäBģ\Ń?yWVõY•łśž—©ńāh¶ś“z0iæZ ¬FB2’?uVŒæpŹž»7óį~–4ķ.yž9ąŒrć ¬BŻVP“ęĢĢŖUW÷m/¦²rōćl˜ĖņDŠŽ"ĶÆŖ™y.C|Oń3Qc“‹zæ“I5ėŽß‰n.Võœ/L¬ŽŃ‡Fz·§Ķ$D#Ӂ½^_“–µęM;L“Ä‚I™„iiŚe!—eZ‘ń7Ł?|?ĶĖčWķĶüW¶‘ŪÅq3Ā‚V>²GqĘ=8”~쇖®ó·Øßš9$óIē©ŲKśŻ“’“²+2ƌhł™’ŲdvāĪÕ£yķžXHNsŽLč@¬¤pݹpn?ĆńÆĮ†^žcrÆpŖ$oŠUZæ ŖlJӔ)ūęĆĶ >¦aÆĒI®õzµ~÷– H¼’ŹĮ:;šŌ ­$-üÉēbM8~#ż×’’=8Äā!ųP,@÷Å$jGq¹\ŚŠø˜-ŵźcv+^Q}[ӑ6§ŚY˜õČ­ƒĶwŖ G”Šb(UŁ>W—ľ·ł? ¼É«`moZG…Ų“³Gä¤_~ 4^eO‚O‡ŌÄ4ß5ėÖ÷ßėkc$‰ÓĀ’"ćVbgFÜ7ĆqÅ’Ęj˜V· k¬®+ \C"·!öŠ 9ŸhņY~̉‘›æ3YK±„µĄ@=>(Ė-Ō(¤.ōvvIWāåüŲū?7]Xś+ś6ĀdD„{w1rŃFVW”• Ē“~Ē.gźŽ}óō\.$j–ˆT­Ģ­3wį—‚}·ćĒ#²OtĢļ$ņŻRŅ€IE«VEōъ×ifį$ųVEĒĮFEœÉ#«w … °A+óć"'ūĶŚnxd–W7Ež#%®ŸEŽ)ę2VZ ŗĘ€4ŅĘż]Ņ)VOŲ‹ąĆyÆ!¾»-§E—lR½;Tõ.Ł cØ‹ūeŸ÷—?$ĘŪ%µ…÷”ge$7r1Ynœ$× dųy™90E®ß­’żÆ„žÖÜĆsk ;8ŠC3ČģYŖ]XÕĻ¦y‰źZ4čFHƒį¬\ćŒöRs’a‘ķBŽ( ‰n a,€žU”Cū¦ĆāĮšmÄM{ŹrQĆ ŃÜUć#zė¦éDĆ%Ą$—I}Z»+Ć,c[/„¦‚«nŅ"åbr©’&?į²3®²Śj0Čmā—ā÷Šģh¬BӋ/ģ϶>8“Ó:…·Ćé“ }lŪ2;*ŗ’µ(܌æi8•6Eć·[OV€ŹßWKwqŠ4eł•c§ū,u»’Gb²®­]Ō"SĆnXŽ­ī()2Ü;ĶN‹ĒÖ’ĀbńIBŗŠ|ł‹•öżš6#%»8‘SįĶ­ÄPs»ÕQ[ž܉I/ĮxŹTõŻKõ©źņÅmģVrFĶQĀd†A¹€n!kOŽ”cuĄÉn{uć *T5y˜źV“ū,~/õšTp¹ˆ,ŻĘŅMnMC;•ļ_’W*Ņ֐˜¤4Ždō£“öˆ”,™/ęČü³™,ƒI4ÆĮŅįj‰#‡š:į$l©æŁh’—Kk ‘D937'r>&¬.iZr„cĶö¾Ė|+”-=a“Ó(ņ•\™)¤mÄV›™?āI—t/į!™Ä±ÄIäPīŅ‘@lUœ.' —d^a=Ye`Hżš3_õ„*~×, sĀ ÕŲ-*Ój±W­?É2*’­ž¶Š RbäŖŖ„ä9}öØūMlĒ—ó“Šé‘‘ØĆ#€LĢŅsš/(=¾ę§ü¼;I$ŽŽ@¼˜šäėŌD?W‚µP"ŗŲżøer•åBČc­{S†§3Źt1Ę]¤Q,Ŗ$T`ņ»s ~/…zŗćĒ -dm8ÄķÅŲŁŹQƒN$ƒĘ¾Ÿśźā?£mŒok5½gžŒU £S“SŒun5’~`˜¬})øGq'Ł!£x̜B…cŃ~Ž3mü©ü¹PŲj(Z8*²ĢņF.ąż~.5^ŸµöpÓN–_«É œyĪĻP ā¦Wō„‘öxÕægķ~ĪE%g“”ϱrx³ĀCr$ƒ¼¤ņ§Łū)žN dØųsšÅ Uš“(¼æÕųæĖoĖ·HØ`YjĢĒżŲµźŅ97§ń7ĮĪHcū*ŚysZ¼BāvńŽ//! Ŗ¢šń35ŅæļŸ…~×/‹]Py-­”xēŠJ“_V…åĄ4ån¤­Ó–óńō—ż’’ ?O¶³¹2Ņāī3Vŗøš9$?³šó·ƒē9ö}_Żįµž—ęb3>™uy ˜É[kfQµ]XµģżæŻimū|>Ņāz4Z¼÷D\ZŪŪŲ‡żõ•„ŌH…ŻęĶõŻ7–x—;Ńtū)ļl“…Ó®#¶q ø.‘›:Žf'W¬œĘž¬¾§ģ#x…įŻ¹ü9™Ķ>/EUœšŚį‡ś y<³så[]Rń#ā7C-Äb‡zŃ²'Øéö·ą3H"¼VahUčįbv_ŪŁ?įøą½D–g*fWføj©gXÉHŻĄ C¼‰F 9|?®Hģ~ »žT‘JāµūJ$»Ņ\lV7øęµ0ĢAÆś«!ü#|ŽłŃ µ:Ø«$’4ņbYU£Rżń?ÜÆ"y“„ŚN©,±Ž,ņRęŚ'EąÅ??“ßŗūGāųp膼HŲÕ+''e©!Ų4`Ž Į6¢†ø"¼ Ž„r§nĶźc)-ļ¾*“+ YkOŽ,ČŖµ÷ęķ’•9•„$Æļ –ōŪ‹Ht;žĢ›ņ’+l‹ Ćņ5X. »Šķ!tO§†ĒE·IneB‘¾õ<#Šõéū ˆ¬nÅi7Ŗ¼ųķ@Jūč/ü&‘£ŻÜ~ā$w'` Z«:véoŠn¹/!b7Ą#o”°^Ÿ©ƒā3›z%eœx’Åqā-čĖlb”UŌžü=E_ų®#sČO ŒæjXŌ®’“©]żł5qKW[HFĀć–ßń–>¾a±i¤–(NŌŗ*ÕźQ%ŠcJמyaŽ™,I©ŪĘą­zņ9;tŽ$tż‘“½=$~"„q“„HŪdusžĘ­“ HŠ4ņūóź„8–ާ¾§~ł`WśåPųē’Ņõ Ol¬nōĄZ³qÓ®Č#—”7F€ŸM»ķL'»‚42[ÅʤĆ$ƍRQrÆŲoŠ™Ā|Ē ‘K ĪŽ©§ŅPŖ–b$y Ü3=¼”n_Žäg\™Õ­ķĻxšG˜‚A’PEd>xq?äü\0žāX¤u!xĀ£ŒIPI P9ŠķüŸźąrĢX³IźNēü» ›·īQb‚įč·|("J™$5ÕQė/žīE÷™#‡QśŒšĻaĒ °XY•Ś‘ńSŻŪӊ%žó퓟gąkõ•s<§ō†£Os*? ‘HÄB9Ē5Y?bŻ$ŗćĻķLüŸŖéŃ_:†H4ė8"…¤_ˆ†‘‘U÷Rpoüœ˜_iZ¤ĘźāÖ5“_U~*µ, OĻö²­łJŹŁ.īģnŚī{8šķtłR4"Y=)ęåx‰Y>/ų,ZŁZܪ̆……@”-Ēaćšb7–Č#«‘ŌGUčĶÅ+¾ŽųT#Y\GĘ+½QLÄ*D [„>ÓČ«…Šś^ŒBąpŒ‚)³•`.€70¦æš\~»fy}CĘ%gw-RH{†o²ڤ ‹Pækž<ņ؞) ÖH×į4Vw¦Ęœ^N ö¾Ę/Ī?M[‹OH^µųx™$$ é°’?‡Ļ$ņŹīXķ äkF$K&äÕ}:"żœnĘ4(¬ą2=ā~Źv­Q>‚lĒqŲŅe^iMÕIˆR†ŸīøŁÉ|6 G-Ä+^#dŲnŒ†€ƒÓūÜf¦%šŹ3ÅÖŽ!¹’%¤ž“£‘@„OOt«ń?śĻŹ:¶{ežNsbź¦RA*~„?Ųv“ūÆR_‡āŽI4ķCGW„I§‰ŁÖ7‘.Śt¬j›‘_Z?Ż·ćgżŌ|žÉÄŚ¤z•ŖĻ§hšµš2eį/9‹†O‹tU*ĻĪ'åö~ŅüsÜĮq%ĀßĻ-Ńŗ'׉bhƒøn'ԐĖæ»ū ź£/ģ,oƒźö)[yd±†GŽ"tYwEoBēJų-Ēū6ÅÕķ§­ÖžöW²F„Ų<Žņr«4ęįÅöTš’aµŌõ{ėX[Ņ1Īčђņ#§Ą¤Č#±å#Wģ/ü ŃļøŽ.Ŗ {[ųšD¶'¦Īøpä0^1ÕcOåēŹ>mö± ˆŹĶz’-bydQB c-Īb)ޜ—\\Oå}h™)'«ĻĒąõ¢…儚I¤ų²'{n$°†SYF²<ŹhC=P¦æ« ńū<ųą» .žŽe "TŹh}U@QO*/>|—āćö—łM#°,5&.AY”FsīX³ĄÄŠ?Ł`Ėaßܤ”¤¢)ޟń`<«žĘ'’‚ĀÆ7ZĻwcičD&¼Yė? “c™<?ŗ—Ÿ,‹ßZGciZJ“\8źxźŹ**+(’ų‹öžWa~³opJŖŹą=E&5Œ¶ßåͤz’$É(©2CZ)’”‡üŒÅŽdäŒ'(ŌĻĒ¢ĶÅd Óģ©‹ž±²¢Ē:¤¤“9 †AĒÓß '«’#?—yIJ„ (ݟˆEšc§łx ä‚f(­n)ҟeBIQüÕi# žN8$¢9­Ą°Š×‹Ž4#²Ó“­ŒONKؘūŌp‚‚†¼g_„ü1[ŲT#·§ÉCĮ#ķRчį/*‘ćūXŽš²ÅÆ© $óŠå” š‚Y½Įxd\NXŚęTįB !Gļ£GŠėƝLqHIām¦ˆ•­j €ßń,ˆx2uHd ļŠ¶Ōźjƒ®šqŖÜńŅžV#cš[ĘĖ_o‡³·iƝĮ؂9,¤TØX‰QāJŠgGŃ®c” $H+Ń©0žZxœ×&¶*¾ˆćøbĪ“žVbĆš8+Žż:eń®U3’Óõ #(ōƟ|/×C6z£\)ÜŠ@ŲRøų*¼ģĶPŹ–€P,’ā+œ?SŗO]‡™tĖ( žÆ%õn&A"EF(¬&›—Ęæf?‡ü¾{¬Üś×F–8~Ӓ(@n»?y#<æó×  ü[w ąų­„¼“ÜC S”®Ø+ŠTõ?äØųŽM/u({{;t+onņĒü–Ń‘R 92’4ū,ŲŹ[™nähƒ?T„õEgV„vģŅ/(” ńś~óāYD¶¶­kČ +0rˆ8¼Į=5d„h}Vōįćžūd…)ĆD‰’IĀņ°²¬Ā5£LĄ€žīūTų–å_ķ®LōĖ›ŸO÷²4~­ S¹£ jōų”3*/śŸåbzĶ ›KžH%ąŠ·©†„}d`8Ö¢ž£7cā’…ĄŽAÕÄz.œš€ī5;hg*Ź•żā±}Ø>וÓģņoƒ¾ŃtSq ֛™Ó øbś«Ē '&””¦ČĶÉYæŻ™Ļ”*±ZĻtįć•”š62)W?²Ū1 ,ßyó ÉN:uµL·3ItŃ­h±æī£ZŠSģśßŲż×łX 8„įaŠĒ_Tńžķ””<8ż„!w M—‚ņ’U_ü¬Ó¹a+µ\¤Žx…Æ)y(•ńÆÅń}®-öq_PEp8 fb*’ \£Zö݇‡įųńёčz—]–FģņŽsŸ²¢•’WäYÕø*ŅV K8r9R°•ń'łX4Hé,p–ąŲ’Ń„géOŁ1×ü¬4¹ūEi=$ŒöØ¢Ł}÷ Ģav­w$v‰éŸe,Øjh Ąō öä+ŠŁzź«zØĀ/‰…ēD Z§ćUA ’Œ©ŠiÖŽ{©YO ¢häņäė%T±®Ń½Ķ8É$¾[Wˆ\É$öI%¤‰ öcG<°M±ļ”h•vuXÅh?Ņ*oķ3qĢ“ ćZ}bH˽XHeö§Õc®¦Z]Ī %ˆ£Z%ƐoŽ"ņžhųžĪ»·s$‘7®S³¬qšÉ„>®Ņ·8ėhbe»x.R~+,Ü%J„‘‡Ł !eoŚ’W īl®-õ1Nd+“ב5»·pC?Ķū9“Ö»‡Ė–·6æ»o\ QÕŠR¤„ų½&cČ»0f·c§;Ā'VŽ2ŠAfbąt hSŠ ī߅pĀ9Eø‚(D÷ @fø¶T’HL`##ńpŹÆńŖ«š²ø į/l’ "†¦cJH“Ł~)9ļšü<’k -Łżšńįøø…ÕŚH­½2«²°įš²×'Ė·”Sf?«s)2Č0N(ŖŖ„„x«ńÅ'céÉź2īė·Ań¢"µ;s~ųy§ÅėiZ‰”ŸŽX ČZŅ‘(w$t§ĆĘøIĀk{C‡š$n†Ą!„”µv-ŗ/ū<Öšµ­Ķ±õ¹ĒaĆu å”ņ§Įź*śź’“‡V ‹ų¬Ń“C~®Ģ’„V’‚Ć„źn²§īę„üF›ž÷·ś±3Į`_7ĮéłjöC%ÄϹŒüj‚źž^ožĖ!·HB‚jĖ‘W°ų&šßį?;Rį-šņļ;$”čx•FSöšEćŽ³u[² dõӈ”Ÿæci­įeżŸ@RD;‚“"1é×čĄöÖ²F-|dˆ bIĻ(Q_āéńHČŹמlQ}D·fŲ·4hXPŹ.K^ūH¤‡÷p¢ĘX«”HĘå÷x ż“Ēž|qó¤gM·sO^ž›¬Šag4ééps‰ß•…ć•cžźUrĄt‰%?Ōū+*ĄāŸWźT,ŖŃ·2JJžĖūåbzb»‚³-D7S«æņ”“ŌJÆÉł a•ķœ2G-Č $āejx£‰Ų5?Ła.”hļaAHäŽŖ{ŽC’Ÿæš8H‰ä3ˆ‹ŸIéüĶÄž¢pēHX¾³"SŪ€jz4–Ņ1š ±Åt` »…¹sic ÓāoE~ŗ’u׳³„y6$K©£J:¤ tūToų‹ØÉ}„J–‘*®Ź”wź8Š|ū`®'jvĶM²ø’N’Ōõ®c8…Ą¾žŌ“į54= Ūc^™ó”$ZDļ)ąĀõ‰‘Øā (=˜·\ä>vŌ$—T¾µ…€·yi<Ø+OM½5Ó¤N¼ųņäœsžŽĮ1£(Fø•k *ˆÅŖü*y'ģńōŪ$RI"Ø^RJW‚ō$¹ŲS޹ Ņ”‚ŽźÕC2 VINęIž7TųMD£8’iņ®PÉ«ź&5u‚ŽĢäīÉ ­ž×) ōĘé—-*LŅČ¢5tXa„†ŽN4§'ō"[ubß I“õ9FDžµÄ0Ž$ØVgųE+ŗ¤³Ź łćżļģį¶•Ī)`»‘’kˆ%“Ր- —Ų€ ’vŅæ5ݾ£OŁVÉeŒŽ®Ÿmp”Š;Ę;/.@téEZav³q:iÖq0iš }4R>Ś£Ģš¶į}1ü±”øĶ5ĶĀŹ3õ3Åw2+qc4!R5Y(OĮW’'įVžlźz6£©ĀŅ[ÜØŌ“Łś7 ÉdŽU«Ń֜%äŖū«/Łū?k9/˜"¾ÓķcŠäO5õ«zrõuƉĢŃ|Iš42"ÉžWŁĄ~W¹{»•śĄć}nD,¬%€"T ¹ EOł~&ĄŹ˜rU•ŹŗÕˆÜŹ„n"‰ õDZšØ&T…Z‹SŃ0¾[…ŽąĖū1±XÖ» Ń ÷4=?gįÅb2OŚ*f÷AįģŲR. N Z'®F$QžÉ8Ę&ż¾Xu§* ¹a «Na¼§&x£ō¤ńųH1Ō`›YCzhē÷1¢,Ž|dŽ”ūĘ]«‹éØŽĀŻ@=hC!ū¾ ˆ®ŽŽĄI$e‰ ˜dVÜu ćįĆ4ŪFBU™"$³ ś _׋誆ś ‹”ėšŹ…‰’d$c“æ*²C«iä‚Üģx+PŗB#Pż “ė0DP$”xō‘†.3S/?’Õõć+qßlitĘ5*>}>Ś;W OŃØāR琼j橬ƒŸ/±ößž+\LÅpüžpcå@óŠO)˜“Ā(T}Ÿ‹Ō‘W÷,[O°Š{“ÉžįT .oM]ø EAvū;sżæÜF±Ć†0iĘÖÓjį}VÉ+H‘G""BJ;r⾫ńoåįĆā•YG¤X‘āZŚYKw R+‹fY‚‹pćŹF’-¹foGfnA”T„*¬Y^›3Mb‘b'įiIX¾\ećžtq–™£ W։?Ų)ä]0ÓC™ŪY±Œl„f‰»ö+÷Ā’HČŅBP4Œį5”gbHß숣*?Łåz©еh€/" „ŁĶų’WŒˆgŽ@IH‡~ņWæ€8q$M,¶+ =^m õź±7& ­x³ņ’c‹ėBŚMźš!k2ņp*üĆ8āéW‹ˆČ-”Č4W$«·ļ—ažĒnYVČ¢Ü#UÖOZAąńn†»²;ceø0J×h ;*É Ó‘ų†„{$²qˆH$" “ÅŒ@X#vˆ° ņi$U ƒ–-Ō‰4’̬’!":oXĄf¼c'’[ū”ųĖzW*&>­QĄä±®'-µ±WRń‰“©/­ÉükéÆŁäć巒ŽńB/Ä„?*Ž+/5o”ń’šA*ī"Œ‰ ż™]NŻĄSGĢKØ’‰„%‘ŌņR€,r%„?ąŸły`ķ;ØdI'•JĢ Å˜"€üIj3|MN˜wÅʵU@¢kж޺9*¤žĆį’' õ»Yż%QåxYŚ† üpO¶‘mŚīTes$K50rå#6źYŸģæö'p*K¬Ę’lŒĖūBEG·Ś G'­nįé*iĪkō|?š94ņź°¹ŅŁ$ā±ĘČĘ•Ø–TJužwß:%ƒ–¹uõeü\Ÿć‚×5?ŪĶF÷Ļ’ÖõPʞž8Ā*Ąg<ómŻĆX\ĢŖ“Ü]FšéČO›–Œ²Ø$V« ?ž^)œƒ_ŽŽ`¶–’G$SHķ ©Æ4żŚ($īśŚ·śŸGn¬Ż•}1G4Ž׋©7žT«7‚”ēö1 `)f°ĒS3<‘%Y’7m’jSNŸī懖id[ŁÜDæ[óMeTRIފhGŚl·ŌŹ\[Ü*Š%āU…G$¾Š*ჺ<—— T$‹ź€IQų¢ÓłÕ)’=0Ķ­ąćm`OśÆt䑹ĀX­Mņõcgeżæ«¦+§:•ēƤ°*Ė4ƒ„·<);Š[ŪĆ(ż®NŲfšådŗb7š;{SüĀÕ*ńÆśŃaö•©!›Óšxč¢Fj ĘA‘y/łåd¢ ¹d¶ˆ‰C8`ZÆģØęźŌū³M•%ä¼½XČ^-Ģ–‡—ĵÆ@ÅŖæi?sš7§ūĄ÷ר°Ė3|&@hй¢Óį.(ÕųųŖqdt_]£ŚœO;q`ād5q33£ü\=TōOG—/†Eo—©ńąO­<ėŃ2ĢŒ\däI§ŁOĀ3ębKŪ”·­ķ‘:q Aœ>ר’ˆńĀ"v§~ē‰KÆ|1•϶ĆzēŠąˆTŠ6Õ7aü”§gųV1üĢĻ‚a·–w  ””pR‚Ŗ lGuY­žRÉĖįĮqśwHEO y¢ü=ORĘß““¹5]I$ÓnīaŖē–2‚P„IėńĖ 7ū, “»Acč8Žb ƒÉIA™˜üŁ‹ÉcĶY¾Ä_oū¾rµ“ZQ«Į¦2 Æ„IłńåžĻ ĪY¢ōśKNµń僬JÅh„Ńž²Šcn7 4e¶­J¼qožV]ͬq]ÜŅ”Wž®Ć`†c¤~Ķ=Œd YXń'»½?įpęē"«-x Œį5 ĶŪ²¶.m8ŻĆn„d>`°_§ƒĀaåĪ›Ÿ=“nĻ4$ŪŖķ^h«¶ōųVŠ[żšā÷ žta%eVŻH’ĶC9ŻŪŽ£lO” 2nQ®į&“*Ä2¦žį¹dŸH(‹ru¶ž9ć=ż¹õ֝;#g@Ó@6Į~:ķ½jŖjǹĮ å÷¦;|’×õ4ƒ±ü21ŽCBzVžōĪoē7ƒN ŃĘęÜpZ„6Ā2Š*ŹInG³žĖāćZÄŒ Ķ1ŠßNO«Z”nl¼Ž0j»Ō’'’)?ÕĄŹŃź6ń֖šš³t °öSö¶Šßįż®M’aĖ(HO"…]ŁPrCń<–æ²Ęæģ¹`‹[ø–lź¼9;‡Ųr<5’+038OV>4åJ؊ō’?ŚĮ°ŻFöé܊mŠī‚) w¢ĒÅGłM‡zuĆ­VįÄŖe‰/wQ(ćAOµõ‰‰ż¬ZĮ„¹?{éĶ2Ķ{P #LģėA’.ööåųӏĆƗÄŲ¬ßSHĮR°ÅonńĒߏØŅ1 "¤¤*ĖĖķ3·Ā‹{‹^)äB­#™+öc‚KxĘõ§ū§/ņšē˚ĖH.Ė’£Öt•jHY–OŲØY{ŪżŸK% ¬Eq ¦&ē"ń7Q*‡õ ˆ H‚»»/ģSāįÅÕ¾4Āū‰Œ’ÉhĻĮŠ+$o^JŃH€ĘĻ"µ*ŽČÜ>ĢS’ K»© †IL•’Då …]xõ%I¤ōĮU_Ž›Ņū ŌļŽ_Ż4|$Vo¬7',X¶ėń³±bĶń·ņšEĀā@§æ\­ė\fœ‡#ÓĄō*¤>܏Ć_ņ°Qū-Š»³# ć•d ­x×ҊŸīĪx1ŽCčšü ĆÕ R(ܖ>b=’c–\3IyR*+@œ;Wįdlm¼óKū6N!u(„€|_gcßė6 -d³(ĢńČÓÅ Ź*üaUŠŽ'~%ųžÓLŸ³‹‰.%yF\݉ĶSŌhć'ŌāÕ źĶéqv_†~ĒĆ&2 z²Ė, $*‚ęeSÅUQ‡AźČœ¢Mææ—ŸłXyo,­"¤ńćDh݆DfvS=޽“ü“ć‰ŪO1eø¶c²Ņ3$r+ū K^_³//åĆ ŌNU"ŖARMlyR¼mń|_§'ģb(ļ<,²«)…ŅŽ8‡Ŗ(`Jhe…øKųYԊOq KĖpX²ÜFģ*TžéŲÓjó~Ļņ`˜,Œš™›ŌśÜ|mfDawI(¤š7(ł °ĮkåĶRK{‰fŠÖ%&k‰$wOЁœŖ-X¤gāį„É¢A ›†‘V2IIC²¹(ÜäÆ\æužN †%hTCĪwą+Q¦•8‰ŗü?Ćö0×O°õAfSN ,¶‰^FcŹ>Ļä’…É•o¦ŲÉÖ/Æ÷l q‚.(^]Yän5?k$× w>ŸqėLœåV- E€}=·Ŗ¤?ėœŽÄ “]#ę±VŪķGŹ ˆ^źZv› ƒ!’åCÅ „õ(‘T±$ÆfTŠæŪū űTXšžŽ{rZ9b‚{weįQ:,±F¢’«Šy‚ī×ō¹+&™ĶĢŗ£CH ²,|åŻćU "dųæČĀ­}ę±¼“ŗ†hēyÖH4óm2ŗKė2G"ž¾ ›üœuĮś¤‡‰2ņg>¢Ž Rść)ź ’oI+}Rę" Š;gH¬UÓ›Č:–ąœŖ¹‹„(«ØęЧ¼„Ēśä}ųĮuwé°2»Üzj kiHš¼ÖĄļÄMĘ:ŠHžŖ7‘ā_āÆķqšd€#\śDzlH‹øģUŤ±]¬šĻéĒsAz¼’±ü)±BÄo*ĖJKm9„5kĘT…äcJŽ|žĻŁ_‰ĒAū?9bŒDb©«…Aā™I!~^Ÿ/öXi½#i2ž‹zl¼H„SÕ Æf8[e•®#oŽ)RœOÅĶH”ŪŲ6Xå'gŒ’ÓnHć§ķĖż–æ{Qõd»™¢Š 8Ø ūÉd,Aā±S‘żžOžN2(•L؁„0Hd‘™hā9ĄćZŃ :~Ēū4×O½–6āü.^6CN. Ŗ{*ä7PׯüµåūšRTŗ–BĀ †¶„§ĒŌZ’’Ų’-ŁŚÉ¤E<źMÜļ+,²SŅy’wY²'½FķĖ*ęāŽĒQX9J%õŽ[ś`FØ.Œ ü_ļĻęåž¶J“eēpb—qtńM+‘Bģæä#’ĻLéŌåčµĶm-»©„ GÉŗ™³¢Ų;h‹³ “ž,87ŻŪ.§łæV’ŠõƟĒj=ńėéµ8×ü®{ōĪoł‹„·8®]9Äņ,2€Ė-ÜIĶ»/Ąģż¼ćzģ7+kYŃĢ—‚ģͤģÜŅ»lČäŠ~Ūa ūĆ5Ų0ŸÜ7jח)”H=iĖŖ/ü#ØĘÜ™J4lŃŗø €ß½JÖ§£2’°Ą†I³WāūD“S^•ß®ųė—õ$/Z–ų¶®Õ܍źM|øčQƒS‹Ž ⢵ē\0[ĘŠŽźN—.c~l8:Č®=N mČ7ž«¶ŽńįJ»”Me«s· FąQ9'Å’æĆöń!{X­DŹŅ“P;ĖPC2ŸˆoūQ??ņd|4ņO—ZśėJ,EīVāƐī°õ[öQž†6ä¹'ŃtØnģę1śqĖ#ܤæU$Ę>ÄRIĄ€Æ½ŗÉ°ć 'ƒ÷˜G©°Ńn£·XŹ-É?KzńAĒ6 87§ńĖqn żŪ śĒ8˜˜m¢~<ä:‚G \ õŸc“­üŲO{®« ĪKŁö1©jżšÕ\®ĖžOŲąFwļRNēūqŽ‘ c^$µß~Q Å jX’°Śæ~)ɃŪˆ"O}æąpjĘĖ$qņ£Ć PĮ@ jFäķš”’dÆķ`ļJIm–4OݘåujģĢšz1­tW‰’ē¦<¤q£¹d§eœ•ķ·ļŁp§Õī®mÕ 2Ä>Įꑉ%Ÿ“ø’eƒmь‘\$`:“A}:†~PĒ3|5ųø‰y}ÆŽK'Ū\ZĪŲŪ8ø2„Õ Hń€ˆƒo÷ż+Ėķ|K‹]G$r%­³ܲ¬ EēpX™„RŌoæÕJĀéßLX!PŒźM»QŠƒrĶæ#CŲ¼’‘ń}ر6½Œ@ęq¼ŃĢU¦ĘMŗPW‹Ÿöø:’¾šg鵿6²­æ ’ŸņŁÄL¦½’ɦ+ck¢„ @®Ń¦Ž‘ēŃŗŅæ»pß_i•ńyÄ©°åC%Ūį¦Ćć~Īi—3ĮŻÅƒ¢]Ē'“BZ,‘«D?¶²=9ņ›Žn®@šīęGX q1"Fܤ@,hĻ ų>X*ÓĖ÷÷ń³[Fī‚ÉypDq£P£qåD 6ßkāżŒ5µŠōčådOWR”ó~*¬• Äs’vH…E?Ż1cī"ŌžÜŪ“ŃŪ¢˜ĮQE )ā=%§Ć]äņ±±ˆ-€• mxEė`©ż2~Ó­¼ ’Ē$:eåċB’¤”aˆ|+InN+³Ø’6u-Ļąū8X¹Ó“k(½P}y™Å­±ųKÓˆŲ‚Ź#DŠœŪģg9'Öõw–yZ¹‘ZY¼b¶J#H€ÖŖ¼[ź‹Ēœ“:Æļ&ž¹VņC©ŽŅ(­¼qųü ĒƒÆ’v“S[Yc¶†į<£’%HÜŌ ²–4eQĖāų~,ƒXĄ÷—Ęņ9šKĖ‹‚V”!«“Hćń7÷)żßĮÉŅū2kmZŅ’ÓVÓ'kj³G«ŁLؕy°’ø­˜üE¹’­‹Ķu¢%œ¤jöói÷Éo I= “3FĄŠeåæģ3+'Ćö›ŠōLĖu!}`”]©Ē÷t§j­FGęWŽžżŽü'õ#Æ/R$ēÓŁ˜āK\H Äš £ŖAZ°é×~UĆI=D¤«ƒÄˆj¢ƒ·4š­¶ ŒŠ¢‘šš}‚īz~Ń8ūFę÷ SŠ/ĒØ'ÓÜļž®$Ń#X- T1oūHX7œļn© ¤Ä<2Čģ ,•$|€é”ŹxJŠøåÄÓa°ŗ#’ŁäVwģ PėۈĄSXś·‘»A«I3Žn#˜øšŽėū?Ɔ5&åßķ½Q¤ļ@*:{ą-NĘóPŅu L0¤°Ädøš9&e#’Ŗ*#‹—ļOļ?es•]ŁŁ[ĢcmE$Ž“Ž7=|?a¾‡Ćß,ź÷^¬}­f†hžŽAØö±+U=dōĖ$eż&“ķĘł3½ŠŒĪ±EpŸø†tõUT࣯^ žĪhšu݌iox`×ūåŗķćE,’I°ŅāŁ Ę³ČŠb•ĒĜ¹po“ļśøG…«ŻŲÉqś9š ŽĢNˆSÓ1s¬TP›<³ü¼°’źEē%“ØöŅp¤ŠČ •‘ dų(ŸOˆa}7ĒT‘ÖæŁŽF””R(Ć„Gū{橉._ćäx’zµGÖßl앲š1m P9hŒ<Čo~<’Źoņ±K)¤k ąžVņĄģw ˜{N£vų’Õ|8ÓµI¬ōŻSMŒ:XŻ^”¼¹‚”ž¦¦“%äŖŃ€ĮæÉeÉG–īu½?Sś–›4w:UĮR·Š±²Ā¼ÜĒ?Iø«Į~ļ÷œ£LoęĶĀ]]ĮV¬$čü”—žźi`Sā^E“‚ü_äšlŠEkoŒ7š³ÉK›PįęŠV$2Hā-ūׯw^?»Čō§ĄSP@;ż1K(D·Ęy•ń 9¼ 2»²ō9(X%äbjØų( t”P­ZŸ³ńal詅fŲńeP @+@zļŌ·-—ćĒZĘ«-HRIX·Ž„°,Ūo²’ĀņÔ餢B /&/æ!DPXPĘ9Nd%!™9š,įėĢriV:RœzŪā‘02É>DĒ"ŗØ«'ŠP×ā‹–#ؚ`ü^[ŠjėĀCņć%„Ż\ ćTj˜ā’•~ dW«o…°SĆ)·„ ) &Ż#aŌr O·(’Łføi%„Øy$heōj(=Y#WĀ“b‹ÜĀVōŗ9H£rŹŪņUl¢u›Ŗ\·ķ2.'gɅ­ĖÆ#Š{¾e™xŽõ(TŸęÄ-¬'‘eˆ0ēÄ»HĄŅK¹Ō~æīØŪšÓģ³įå’Ąc6öÜø«¤HļŁ-‘”„>Õ%~×?ņ~ TZš±šŻ(Ź„¾-冬M;–.Ē ō·ś’$7IOY[ė¹> u?•šį€ż ax..&·‘Źó‡ÖoUȱ"D+R«æĀø"]~vd2Āņ‚#޼f¶ŒzŖȰØõOŚåŃ~‡–!uę{™Qb’rˆ*ϲ$/ģ€WyŖūĘ們ukć/£3³ČX7E*ÜV üjžĘ_.NÅźē÷!R4,@ ČüKÕ¹’»9}Ž?UÖ¬<³£ŪĖm &yž++6FĄśŒe’Ÿī“fž_•æ–FNuu=ę§r×Z„ĖĖy%+3ķZ”šū”µ~‰WķpOŽI9ņߑÉŅ⻹š>āUĮ:²Ņ Į“ŠØćūÖgõ%Æ.O’<ńš•Ö™¦GŻ^ĮÖTh-[ėRHģĖA‚¢4ųøś“4qņdžljšö£«Ģö±§åbgµUćZśƒ×ÕäbJ3Š*ü-’— mĄ@«,ΊZ{RWØ+;ŌP[)¢ų»Ō“ß Ē*ʗ· ƊĢĀ•ėš*–ąæĆ—ojŃ#W…¢Tģ QLŪśH <®¼‹×q̐Pū|\±ŽśTū[ŗtžĘĶh‚" sHźdjĄ b"±e­SȞ†„×,Ö¾ŸN4;n7µü1 %Š1s’q£„jų˜«B¼OĘ“ų™—!ŗ¼S-ĶŖ78¬.c0å,œĄ+³Dš²ÆßoķrĀß/É„¦«0Ģ’Va?ƒ”ł‚īŠĖ:ß\ŖĖP‰‘Ä/T±äyÄ©$oÉ.Ońz‘³šČtĘżåYÓ×Wb€,-øe^*y&ČĄ€8zkĒģ|ōŖoöŖŅH“ėXd<Ē÷Ž’rū»o³‘kŪ -ļBā5÷qÜĘb›‰ÜsCß刯Ą °„kpE+P1•'¹žĢĀ„SIÖ²Ö@ĶYIܰ?j¦£ÆĻ/žhA*Ā»5>³“žĒĆ}p·qĶhÅdV2ĻVä ēÄWˆWoµöžū2[=nęŹ&¹·±³±2«JæXb µ,ėćåAĒįż®īĪ9Š<—ä-WS€jŚź½¼÷`’įGÖYA †=„ ˆÜcęæŗ“›ś27 P7ę·åLŅBuß.‰ekxU/4²Ķ+zQūĖzņ5_÷dķ|RGńņWåQySĢ’Ū}j=:a(xŚ@±™AŒ9V—•GL7?Ųå†^QŠoJ-Å͹Ž8½Ue”e)Z22žM‡÷6-}f–åĄh„~™ļXā#sžSr’‚Čtģ*0Z¤3rAŃ\[™H­ü„}«’5`y-’ É"RޤlĖž?o‹ ­ūOé•’!æ› \¹iR2$ Y‘Ö›«ń¶ ūLk—o/¦¶u4 ¬ĪvÜńšaŠŒwˉaŽGd H*«B(~#8sg£kr[Dm­„lµYoˆRÅ@°''ęׄދ|X14 ·HgŌ. «-ĖĘV Sķ|qփ.lś-½ņ,öXF·Y$¹†į¢%£U?,«høżŖ'Į„Ó ”–‘¼œ¤SN–<Ø‘ŃøżŚ·Oęųp$ČÄTR54 #*P1ųT°ęĖĒāo‡5µ¤Ü,žšČęE ģĖæĪēćo³ĖŠ}ŸŁĆ+P¤NT*«x8j“(ÕM>/‹¤’Ė27#Ī2¬­ČōŒh:nē!~nÕgŌ5ĪŸRŚČ5½²¹ TĒX™÷¢4ŠŹžŸ.šõä“įēĄ•=†Db¢HÉõ›™^L <ÉęĖżäŸnInŗŽ¾·"IC Čœi˜Wƒ«PštŖ’ŗ—’ż˜żNĘa6ö—·w‰ (ņDrfäĒpUb‚œ÷Ąež<™T~ķżFZ š5ū_6Ę]åõµ2#…BHńņ$žąŻ‹āŠ–Q ‰m„H,ϲV¬xōfu®äż‹¾½½ŽH¤¶™ķ՛÷É Špü€ӌ©$~˰ǽżŚ²¤LiP1·(g•“—*$pˆäjßep[žœ‡Óš[4k·Y Ś Žjl­Ź)&ę•ćßö°¶óThŪI”ÜÉ&o%Ģķn"śĖü8G„śkr.aWYüóq'U…‚Mپ°#¹°G••Ćäń:PRœ wI——8½n¾uwÆźWž†ūNŠ!qÕ»-±x‡U‹ŗ]Ēū·~ Å+'ʱńĄė«źTky ‚Öq Ė%ė»ČÅ]™%–Ų;@Ēć‘Ö_OįeżÖ¶ÕÜS[Ģ`±Õ­É‚Kr«f÷.…ģēb-$(š[ĖńIĻā“łÄéjééswi4LĖżį’6”*Ń|P¾ßŻ?ķrāļ‚eø¹¶†šĄ n¢[k„Uäį]$6žOõæ—!g³K d¶ć’\¤B ’EYŠŸPH­ū¦_O£~Ė7ĮˆÄ²“¦¾ŸéZ½čs܁障ĖzE„¬Ÿmד4r//±ĆāÉmĪ» ’I.Že @mgõEP“V½‡Wy¢[GK{[ŠśImst#š¼HžģĒĖżŪßāĆŲeŌŚćŌ–Ś8mܱy! ÜXŃ}4›“ŖņÉN–¼tžYOnœ‘_omšČ{åŌtĖßĆšĻ’Óõ)Ó64ė]¼;c‚«14 'Ą ņę$ŽI®äw—ÕÓcŽ· ¤¤q„‰„+·Ū’6üoŅżēŲĪquIļŠŪ’9õn„(gøÜ( koѦšÖI"‹œŸī̌ßčŗŠć§A$1g¬’,ó•J³¼¬…mx|Gx”ž%ćé¤īÜøĒn“aŠiå ]Ū2"ų„$ųQCFwųCGIžźFūxO^ a%Žź(ƒg’NČ2•Vˆ7ZQ1ЬK'ÖP4į+ 3¬Q| °ėOŚĄ“[[I·1–‡÷¤, S½¬ĒāZӇÄĶüŲ?IņĖ_ś’żjm£eŒ\Lé™§<ŲPžŹüLß³ńa½×“- Ž9ė:TĒĒ÷q±’“Ÿ‰’dŽČæĻ„W mkŹ@Ęv%‘•‘āx… ©äÆĶ…ĒüK‡O7ikØOmŖ«$Ņ×ėb44uƒ“zæńO(’Ź‘3¤yoĢ’•Ś,‹=øæŌµPjZ‚bP¼k7Įåńsų„’‹øü9&œ¾[Z7‰‹J˜y:ńS5wöĮ–’›ŗ„¢]%(Kr€ī}–Br1®ėR‰ŸĖr}XLęąéš’ØƒÖÜ:,lŹV$J¢)8¬œæaøc“ķ0^$wג5¾¼!T˜—2Ū0ŒņHł’v›żÕ’g÷æÅ=£LØB‰cćĶQ¶5N@ÆNJz}Ÿęū*³znޟŚāń³|1Ū­ Ų9śå’ÅČC¦Č¤‘é1fW«}®%“ķ`HU£‰™(°øs·9+$¼B+6Õå×öpm¹šIaäß’‰Hz…ŒT\ü;‘J/ŚĆø‹}^K‰+§\? Ųnh ońsQꌀ\Ķ śÜõWÜ1·ˆ!O#ĮjĶ_ēbæ2žĻõƒz°ƒ+O#™¢R&,ƀźĢ9P(äߎQQæ»ūRpŖŽ2Q„\5Óõ7†fXĀŽ<kķ$¶¦P^›{Y­ģbCŖRK–&NiæĀ3Ä ų˜ŪÄĪßļĘ^ra„…Ķ¢X¤hęVfw©&kž »QŪ÷’zlß ’/Ų}–‘quyź^ņĘÄŹ(T/ķŒŽ‡āżóW÷+zŽ«FrˆĮYʊ‚Z”čņT §ł*‹÷.ä|A. ®äl )¹ļűÓ@ZFPA$ݘš“ĄßåŠe4ńrP0Š€"ē˜£R‹S·Āq  …Œ†ĻļH=.L¦Ŗ>>-4BW김¬ƒ„¬B„ŸŒŖķžWŚĄR’ōfEµ“•ŚFžęy ¤rŌœŃČefEk$>Œq’vÜ=DVź~lü½Öo ·¹“Ōl®cˆ½Õž™ih“GqUÕ„āeySŃųxIž¾G¼Ā|˦Z.ą-·%’éf—еYъpx=%·y® ‚ÕżiZ>o/ŽdšŪF֞M:ķ.ÅŌś‰’$øv–Ż Bž¢–’XV)HÆ{yW×ū_¼d’L)¼ņŖ$“Ļ©ßĶkęk‰GŃ`™ ½ÄK@>;yĶϧOµ3qoå‡ö1ņj×zdj>±„G’Žę{¤‘daN2?­›ˆoRi?kŽ(<ßsØXŻG«ł‡JÓŽE‰ †ZuPŖUÜ? ī^>§§…zuę‹m®E=®±©łZ Īį Įōš”ęDę?Uy2sžĒ„ńrĆx/¼¹gmy šķżdžY®„²Ą«,eӌ27«|3ÄŅK„žķĀ03ŪŪ«ÜéÉcbĢazėźŠ| ‘2'Ą*Ąßń“iU’Ę9f}8Y[Ö ³›gØ%ؾ“eŪv߂¼œæ¹ōŪāĆė?0yrŽžēOÓę²ŽÅŁžÖyævŠĒ…}kŃOŽü<}Fåš»~ÖG®čŅĆčO«YŻC#PĆ<֍ &‚†?¬^æå ¦éśzĢ’Ų"ĮǐSfÜcļšĘ$žßžHżœšh‰ØQZ_A”"ž°2śÄ*ń^JŹ©Ėł˜7ū8ļļ–_ݟ’Ōõ!Ę×*‡tVFFVXxƒ¶Guč šŲ›«_­G1‘] ŽDi+é9}Na#Ņ#üŸ–s½JĢŁŪÜ5收ŃOwXŽTfExį9i9‹h‘[”iżß)^GĀ }v·½#Ó°[ŠIsn²z0An¬R'žTųÖ(¾BoŽqy>ßśKFŽ·3E>¤Ś‰l½pśä>ŸØÜqi4mr+Y®§ŗ]<ÅØSƒ¬ŹT̊“Wr’ŗ_öXī#xĮÄ‹cõ9Dበ˜•Ż·žcĒ—üC ­b{«ų“ūWC°ŒJź&PˆzÕAŖņ-šFæ½õ?āÅL>Ÿ§ÜNÖ÷W_]Ā„ÉF·˜•e!ˆ x/ųżXyżæSŌā˜7HÕ!ŠQk¦ÅõU1)iVG„Č¢²Gt×ÜCš…äx9·ģ~Ö ×,äÖ43 —%¦ĻÕgy"=eäåL±–hWžü8'óšĪu ©•y³'£æŲuc·ł(õ6ŽĶą敃†(_ƒ'ćŚC<\#+į½ē_\œ©0‰¤.Ž„Æ_õ¶Fū8tf‚fŠg?²Ž—0O­j1HīńHĮTßąh(?Ų‚”’cƒ­—LˆrŽģ[7ƒ²Ć’ ¼~š$_ėā÷vWÓP¬°Ü(Ō£0#rbŹGN-7śĖ…óŁÜĀCpœĄW„”œL‚½Œ“<_æ'Äß [®Eä[hīx²0ŚPLŠĖzŠP†jq’væÄĶ’ —,Öš@g•ż0B“gį©d•eڵ’~ŗ’Įb–ŅŪ‘=¼O,ŸjT±£Ž”ßūł>/åĆų“‹Ū’šŚ¢ČLIO^FJSģĘxöū(Ņ/ƋŚéŗ5ØORWøv^nKEŃxqh”BĄń<’Õ_ņĶ,­4„oZŚŽ/“rķ-OĶJŌwż¼ZMMc˜[ĢJó‹oĒ~œ©øĒö²£ŗ`åĖjī6#®Ū}Ÿõų&–ę9ķ©1õ •jČŌWP£FG!Ķ*ƏĜyĘüroä4Ķ}e.›©HŅj6¬ģy™ v>ŒŖY¹PõäßĢļżć†ó5¢¬k3-Ռ|ļ!COZŻ*\®ßßF¢±’æ8śMöłä^÷U°·ÕV½[u™y[¼n‘Jņ_QŒgā’Wķd†ĻY‰Ä_[n3Ŗ²ń•ż¢@䦿“Āß³€0<ɍ§ŚFŅØ’ņ_ޘ‹˜£Z²ĒB’īY~?ų|>Ŗś«+/?ź«/”¦G§[ĘÅÖ¼äĘX‹#’&–Df’‚Ŗ’ĶĖŌż¼>_;ŲėVQŚj¶R„ĪžÄ[ś2-Ė"Ÿļ#’8Ķé•ZÄTÜH’"ry"Å!ˆEŹ9ĘJÆX¤y( ŠMčß俬_O²’G‘b©hTÅĄ6ōŪ‘åÅpFµĶĶ›YBī-É (‰ųśœceōežxU۔пi¹üŗČ®”å»xį1”ø`žš/䢨ų'Äæb‰’°āž¦Żī&[r$hčĪTµ!ÆÅÄ· U_¢|_gö„”ĪĆHµzŖŹ(ÅdHŠQ‰_…dR¾˜ O³ĖŠ}Ÿ¬HŁsŚ[µ×į’ęāEœ tPįiž4ūDQӓV·–ė„B‹$®öŃó£BQŁžETEOYßŅ’urāĶP[›åFŠēP™Z4Œ¬DšŗĖĻ›²“J$w[÷Êé~`žöIōū4™.:›€{1/ßæūnв|˜ā•æćĮċ^ņõō1¶£ź^E8WI&µŠC#ÉnŹßW.eAW~\ž(Ł?øoWÖZ_;hV”HŅõ '­h—WózqĶø2$ ,Ė՛ƒF±“‘K[ó©#I}q=Ē!ŗ»;/Š“²Šż³üŲ…˜¾“¶v·f5ĒX”ƒöjŹļNM‹&‘ØÜL‰R]LʬŪ2qģĘBY~ü9·ņÉ ĘR9”QµQW›hGģ*’³žļ “½Ż+Ü]©½ŌU7WÉjY~…®g*ģ܍=xe“āžļŌĆx<£¢_Ū¬‹D•)Ö–dhĖqĻŃåMšHž/÷Śāzd\’p¶_Ōomł˜ē¹ō–;ud4bń£‰×Ɣ‘ÄæĖ;Ģ1ϧ e°ŗŠm4Ł„²#0w™ZzŠéqZr~Ó|?kŃüĮ®‰Å™¼śŌ2÷Gc-ÆwS!3ušUG“‹+ńÉF¦Gw×Ov÷(і6ä‚—©p}OH²ÆŖ²}æ‰~”łbą]iŻˆVt‚P‹R½rƒx×w­rś æ‡?’Õõ.’F6›üń§¹Ę’6÷Ā}RÄÜżUÖ;{Y¤–P ń? Õ¶Ŗ|R}–ų’ą² ŖŲ»ß<±É)GIa‡”‹QŖDŹģKšF£»LĆ÷q||ZYxKĶn/āęKÉöą&wąé(SWų-xżZ:~é%śÄõ›ŸR!7Öјµ‹Y-Œ‘2iöįAµŽž¬«•y‘n_gÕfųćˆE”Z½å“MpVŪOˆ‰Ņb#Š2 /Ąpy?ŌŽ_I滎I’{¶‹k,ņO=Ńh*’][ʍ…¤ŖDŽŒŅN¾©Ł"–O¬Mūq¢&:ė@±xīEø]LŠĶ;z3"E)<¢xÕĀˆĻŁU”pūŁē†[‹ ŅĖQR)HxŹ?$dŖ~±'4HčŽŖ;GÅż_J^Nu6§©k{$ø‚Y y+i~±#lk2?­UžøŽßåaŽ• āźBå’ęŅīDHŚ;«UU"¼‚ "’āoŻ·ŁY’/Å"ń^XIē;X£Ō-ĀY=•ÕćŅv(M›—Ł]hJzÄķ/„’L$R‚ʶεGhĀŌl9pœń'p².-©nƒ”–еøŖŅÖĪB Pœä–:WżL5®·Æ‘q*B3ĻqÆP?KŅiøJ­"·§ÉŃ9ņeÅį“Rš­YŪ©͛ėWLŌū\x–J~ŪŻ¢ü\øüX>Š]¬kŹīŁöFŌE5TČļĻż€|w§ęX åmzjˆYY>^(¶łę[OĶII’;ų%I(Ō²ŸLń§\/“—ĻQj2-Ť~£ģńĀ,ƒˆ=½ŸłLĒ– ƒLŽLɤȑ¾ÅÖŗTf5*Lr "œøū?īĻŁÅäÕa@‘¼éć ±GV#`Ŗį?‡ģ7g’}ÆÄŲ.°•,]d‡ķ0(挬Aų”×ķ|,‹ū|=\jSšĶ0‘~2ķąh$­[žIĢæ³ģŻī­ghÄĻrˆÅ9Q›ķØļGeXzœ¹G/±€5»ŪW–p5ŠŗHŹ‘B_ā„Wē§^_ ŽāāéI“Œ‘ÉIŅB$€-›#䟚i?ČāUŖ][ŖGėM$Ę+Ucń4jBZÉ#m_ˆ8¦’ä’6ł?Rż樢‘MĄąT:ńŒ±Z5x·®ĪœāŸå擉5…I… 9×n-@ćń®r­I4†æešīžŹ{G6±“J$Š «H×ÓŻ€’/å_‹ŽmS»Ņõr‘j)%Æķ=³,E—Ŗ³Ū\Q;QFčüyzc%Z޹äsN‹NÖ¦7HŒ$ŽāĀZīAŹ«ÄśfUž?°ßcŸČŚjŽÅ'–|ŃeuctĢ©gux¶×\ć÷30RF ą§ī›,Ś×–5+yֆM/VT’F»Sū›’‚”YÕꍛzÓzŠæ‘ś§”Ļws}­Lžé“ÕaI ’č?NhĆŃk$G„Źė/Ł_Sū¼wē;›MzXķ’-mį”$²–F $š)‹G-²žåVū2zīŸļ“K_2Y\±ōФ“ķźŹ£nH#ś{»?įžļ‹(–øŠķ)#™kĘdŖH‡„Y;V¼ZŸ wÅ’ŗBĆ”ŁKs„ś¬0M(+4L#µvئP 8Ž*äz²Éƒ­ō«h®$“čበK[y#IĒ¢Ÿ¶D‘}@zqŖĒł_oĘ¢"cŠ‘£Ģ"97Ł•S±® TX”„‚BņoLŻÉēßü²pŒźŪŪÜ”‘9G,–ᙂRCÉł1ųUU>&cöqNīąŚ“±IÆ)OÜŖq«™=j#ÅŽ|Ų"7Ą¼[— £“ f«3ĖE’ę4 ĖźŽJĻĻ„5Eż—å*Ēżä\øĒ„¶wV2ÜŽK„ŒŽ«kqĀž³@˜*äÜjzā$γA"$œЉV ˜•«-œC÷Ī~/Ųvžņ²En"æž–At‰ń@ERŻBy¬tū GĄŅ«¼żĒī×ŌR=cQ¶†Y¬ķigśŌڜlĘ)$ÉjYĮ- މĖūŸƒ÷MĆāĮ†Ö3„[Ą±²ĢʲZéš(‘ž®Ņ‘įD #u›ó^bœ•˜UTüoŹæ-BѹrżŽ6ŪXøä–7’+™£ōŁ£ffxˆ–ˆŖ#‚VWåĖÓųž,Ģvź‘Žy¤+ū‘ŗÉ ŁT*r„“}#ąČĻš:qå&[ßż\fYo #Ō2HY(˜éŪƟ·š¢ÅžĒ‚y’Å(ZH㔯3;żćö~UżŌTYeųŃāü“6½D2ŽĘŃp5’“P"“ÅZDi\ü^œj’Æ%o¶Ŗ×¾ĻĢQF^3kčŪŖ–’{Łę“‚ °GYxČyX#—ą’vG².i|Ģd¼ŖĖ"[š(D<”Æ6GŒQŚen?kŒæŗĮŠ[y~žŚ \)OUPn“Œ’żRF•¹/÷XU«Gs¤²Gyo&„„D€JÜ@iOŽ¢Õiöžiǚ3pę7Ó/ÕZĪWslCH‘M*(§‘ЫǕŌuųx¢ÆśµŌ0L·EĪdE~& ü_ ¬uUū<æcŌuuŗÓ’Ī'fŌPÜD¤r˜ä!Gü\ņ| ’%–ęicŽ7ZęįĆ@Ęź[¹ą U+#qžGų~ sØZ]·Ŗ°M(‰=O‰–ĆÕšūQB…æÉ¹oēl½[ĖZÕĆüK$i+TÖ¬dšn5'ģük’]dĖVón›oy,o8v™R‡2Ē—ANæÄ?āY ¼¹µŌī/oĀKé\ĢG飿ˆ^¼¶å鿩ǟū/³K ǰ”éҼ’Ū·z\ą;qīš«ÖE­?y õ’wČŗÉõGµoBčĒmQE'˜Ø5€ĖńCįū_ģ™G[ĶtŖćP“²ŌcšŖC¬Ō)#ąn*«¹?»'ŸüW†>T»ŌÆ-ę±µR4Ųęđ‚ĪDURx¢‘ĻÕHŚTžn—ÆŻ½„ė 2ßŖ‡¹āÉ%:'Ó\•xšO‡"‰*zEfęÄ8f GǹÆ:žŲ©(’kķ'Łū"ćK»#¾³F’”W(üē`ŹC/*6źČėń§ģüRŻ+Ģ–×qĆč"š0T‡t^€óP¢Hwćź2Ęéń/ĀæĢ,DįĒqČ­V4ŪŖ±ū<šz}ĘņAüƒ,jo€š†Mæ»cń:’x‹&Ÿ,RC2Ķo/9cø@B±ŗ•;Ęč[‹Ä~%’‰#,Ąŗ[A.„w}#^],r\C*DÉefF·…ŒŽ‡ŲįĶ­£~(¼xČøc©iŚLkg$W6Ļnž¤0ŽEv‹x Ż’ą'¦É*–ąŽĮŚDęœSjķ彘µ¶™.ōņ£—SŃjÖŁéĪ>5”óNmūžŚyÅ.Œs_śö!2Łr!~+%fy>ßÄļš~ÄKźįl:Ŧ—8³{ [Ė‚8Csz¢W“ŠHŠōœtåń|pśŲ1?Äw—ŃĪŽ÷zŒĄEóCźJ€$[Ā­&ä~ńsŽé:~«q5¤³Ź¦Ą „»Ll±GĘ6¤YeŃ“źJܾ,3±ž õBśō·Q«gj‰Sč@ļ^ ÅTČčæŗ…¼ų’wÉ%čŽoUåø`.żkĢ-)RĆāų©Ćģńk†oŠWSkAØĮ-āĒoSr-٤‘‘¢“ż (~N‘•‡ķržU_„­ļ¤°–·‘ķÆā‚hŚ+QI[Ր.A>šŗUä}DNr70v%Üwo'é(ķa‡Ö‹EóP* qh¾5! QpĖüŅLģŲqŌZd3Nœļnåc#O0Hćp žķ­ÕŁĒÅŹ?†VżŪĶźpĀK«‹Éę2°\#+ņhVȞ€šGćōœsõ„gōe_QŁā’A„ZÜĖbmļe·{ŸY¶‘E#‹ūםż0ńD~)¹zßäžóŅēϼĻqy¬I-§©ÉėųųsžĆżk¦žyå ŒG T“|RÄSįTāy&9®ÖÖY~§#aÅœx©§^nó’gö°O—łć·µeŠō‰eIhI/D×`~'Ūüņ±š^2ņ˜1ŠTŒÜ­]dźŌ=yE#|'ł°ęźśćO–*D%ŚnTeXČy€ˆSصų‘ŸöāēˆŻYKy,z¶ˆœ3JØŹČZ“’9@ŖÓvūKĮæoūČńח±Ą”ukx Äj„Vą@ąŁyižB·žLlšķÜVX–Ńb“3ŁĮĮGؼЉB• Či9NMü¹­Äw3L¤Ė!f‰hˆõ9¾ŅƒN?e~Ėć/ćW—ė3H’‘V=}FƹŻéĻüž\?gIe‡‹ÄäĘwć_‡‘‚ ūlßkö—ā_…Ń]K ŹŻŚ3C*@®Ü[øÜžHh0ćžėoņ¦žZó:ށŠEtƒ‘‰v ÄOzSöćÆ%żŽQ’s.MY(ĻĆȊ¢¤ŌTńÆFįoö8¦•5Ō­ČäĒNŗ¶WšŃ¶UŗI£Š ’£įn.ńÉķü?g‡<­Z[dyd’9Ž1õR‘‡ŽNlĖ4RrŽJńŒ© Ék`ҦˆLōmœĆX"ś#‹Ó’šp1aø"i$¹V‘¼vņŖ Ÿ…}Kk™üŁ’ÖĮ–o§¬Jc[‹Xö$żQ£COę0DÄ®’gŃų°< ¼­øŖ8śæĄņ‰Œ‘śe­źĻpį+*|_żœ!óV‰u”ś“[9žĀņ9“ÅU Ź©4S©žIžŖüŗ·ōž5“i+m=śC, ”±śI=ĻN1qź¼s9 ÜČ+7ļ~>-Ļ)mš’³8øšDd¬KØ5uXĻØŸÅsésū Ģ士D F;Āń™‰•«ńš#÷’’æ¹"ü1ąŻ4Oy9AĘcZx™R8†äM"Č!õ(Ü84küŸg¤ólP£išn%‰’]IY•%JšHTseaķ~éWöĒłEü»‹OŠKéU¾%žbo”TŒšŃĪK‹y…÷œÕ’™pŅo:~ZX\GZ)ą_ļ-೜0'ᢽ+ČߟŞÅpd_œž[†5ŠĘŽāxć2z Ÿ°¢9Iā?¤lwł© 5ĀĖ-Ė“¬ĢLrŲ]Ż\]7wžåĄW˜Ž[K$6S‡‰Cs•ķ'jš *2ń"æfĆž¹üŶ2x!ydC+Mš]“ĖöZ«zž<›’Zɬ±šĒé¬v ļSÉQ—Ÿ#żśÜkłpmæœu1 µŒöņµæøä-į‹ŅäQ˜śĖ*žš HÉéŖŗsūiČĪ/:j7DB–±[Ö#+É|D£Ó1™*¾cFmŪĆżēó]ö¤š«‹»¹®)=eKRéźAÉU”ā„.Q}ų,0Ó ±Ńu¹ä{DśšÓŅBüD²¬Ķ-Ą)µd-ĀżÆęĪ‹¦Āé¼Īd–J±©Ø‰>sūX4ń½²÷Ļ’Šõ.VS nŌt²­ŲGqĮ„.G $"ˆx÷ųˆŪ"Z¤I¢[h–q‘-ĆzSI*ŌEĒūé^µ«mšæ$x’g9ż¢ŲYŻi¶|¤½ż-%¬’‚#D"R[ˆXŹJҵ?ĖTųS„d:„ćN˜[Āņ²F谖w/õŠØbŅܾ܌œø’»?ٜhGcåǹi—©æe ­)5nÜš~E¶ū+ń}–į‘Ū½OVÕnJĄĶjÖ¬¬õ䄆ą”däOņ7“üĶ`†¬b‘-Ž]8€ÓDÆ(gšž«٤wfoQ$x'‹—īøÆ9ZėrAda²…Z‡īdh–Ž>4Œ®4āÓeN ö’½ūRr2Ōm”žŌjJ m …Š Jp ńT7:’…¹r?½’SįĀ߯F¦HļaśÜ6É?ĒĮ¢$I$ų>Ūan›­XƬˆo½FŽŅhŹYXD‚&ž ĆĪ0Ū2ʱ¢ņšDćā’ĖĢĖĶ:6ē=HjšeūĒŖÜ[3KmwV‚gµ·’/©#dnČ?g“'/I¹rՍŌ׆¢‚¤Sõ昞*?dVƒē‚>ÄtsW¢õmĒĀ£—ŁTNą}ƃģā|–I½^#R8ʔč½Tŗ·śŁ¢Ōi¹ u Æ"Ŗ ±ŲŠ‘²ż¦ q_öXqķŸŌŚ ÉB²’›Ņˆś…‰ m-Ŗ3·©š$k†:6­õIÜN;‰%/ɇĄé^D³ ŸŻś_ķ?ĆĖ‚:į¾§ęł„b;6ī”PčK¬’)ōć‰X K'Śn\ż8Ż~¶(ŗ½=8ßQ{skG»2–) #Ä’«ü*Ńšõ0BZYʱ•šR­č &]öų^Eh’fŠ‘óäŹøq ¹Š\*”„‰č71Ÿ‡ö8pų\)Ö<«e«Ż²ybÖĖ­cyVI(ĶäźŪ|R1‹żWāøóʺŜZ}¶ømō­]£šUµ‘Ó‰† @¤’‚"…*ž“jņqōłGN"™|æl4Yļt»µ½ø° ņĖĘ!pØĶTbĻ4Ģ=“÷¢q‰’ŗ^y7R˜ż1EC^Ej r555ާüžÄI©­I'®Óo –”mx76ņ+{€~!’\5ó‚Ä×¶ÓGR²@­JOł%é×K¹otKR¼¤ø†E…É BĖš/"1Y-ŻżOõ0 wŅZ[\Įc4ŠDģ9°u”ūšū-Œ‘żÆ‹—Įö]i~”Qp±…!„¾Œ8>€žńł2ņ«&ѧ©ń»šįžoī^{‘4ŹĀŪ€¶XŁÄjEV^UćNLmł>W’Ś}Jü-ĄŌ­~ś#ŖŲĀsÄ|-Óéč;cørb•”5MMzü²ŃdUICĒwÜmā?ęœ§Į/Ø'‚_JD£A ,88`7nŖ ā>ź¾W’y¬I]~”E$üjx³@šżŸņ°ōS/öv;ö9\d’~¹¦’Ńõ/łķš›b7M:ŪČÖźuRbF n‘’j~‘·ó7‹łyN¹<šźĄFE冠’? 34l²¤¼Ižqmžüų“Ņ’*#®[–æCšzfź“qęL†Žü‰*j²¬Ŗ>ųįń{=å„¶©q" 6mōøÅ–F‡p‡—Ā“ߏ/õÕ3yJ³hā¼wdd…­xµ8¹'ā/Ė›7¼_—Ś_ŁSRµ³Ž%yŲǧC µäŹŸ3Ķž#ćńü_½gÅķn M0iņEÄÜŻÓ¬‹RY¢“œAdŒ1–8Ē©Ķłń⟷ū9$ŚßķlŽka$TThķå2~ī6žH6­iØŪźS¦£ŠńŪ֙~+5_ąYhkŲą}¹@iæ* ¹½““/\LvÖį‹4qŠ© Č;%ś½“\_Ó_W„Oéšt Ö,R6 ;L±š8~2ÕŲ§ØOMøzq7/ī½y¹Čų<_GĮ„2,qŅgbcV„…yØī‹š§ūē‡Ē„מrŠ­ųCIØśGՍR.6įė±1GÆó4p’©+dĒņšźęļO»ŗ{h--™ĮŽŽŃf,Õw”–fäń’Wõæ+h·į®§±Ań+"ńvߐų©źoö¾ÖF/ō‹e†Ž ĀeYažVše ‰åĻ)Č7§Å•~Ėd^ļJm/PŲ(ŗÕļŚ/Z/RŽnl$§īž5āȎZFõ¹§6…$ĄĖ«]é×Ü"T[]BŻ®c†*•gWed€“#q$æ\xśk‹ł~ 9c‡UŗuÓć“uŽ˜¢ ŃI+z$²žg‚3 “æVē/%%óÅüŽf‘o#T»µ­£ŖŠƒčņÖĖ•~ü¼p²e…µnAcQžčŽœzęåžOŁęĘ õj€ö ų¶’Ÿš_ł_śæЬdAqĮćē3—åBXĄ…~ Ć£ą=O·ū°Į„–ėnźcĘ2ŖąU„¤ŸŠµæÖÅn\gQoéōŹ¢Øü_Ś”’³IjöčėsŲšę„ ŹV…Ł¾ˆ’y*#:Ä5 Ģh…ÆIåQŪżoŚĶe‚ó‰_šČkĢųV¦»šqū]>?ęĶJ”5<ė Ŗ…*ƕާžæĖĆh=³¾åF$]Ē`6X-€kMē®*ßæŌnUd<>±!Šiīces0!ü|Ś9÷Ÿä6Į%Ō·±MõßGėę0^Ö5QH—įdS^š’.vŸ'@ŠčĢŹźy±cńLI'©fĆįᘜæ¤ē’Ņõ1Do”~Xݰ=ż§Ö­&·ØV‘hŽĀ”\nM¾Ė…l#ÖZŪR҇Ö"åå"š*ļ Õāń–„UƒrT’‹×Lē7O4š¾§lī³ [§‹Ņ7_W’ ­˜¶Ü}M¾(Ļäy¾ßģBu­>+Æō5C Ūń1ŪBŅĘyB¼wTy#OGo÷d^—÷’/$<¾`¼F"ćn6”}E Ÿåń4Ÿ¾gųæwĶuÉŠ|ņEoĘFZ½Ģ²z×…TµÄ½*JB [©'ļÓį„’Ą—÷Ń\_'8­—Ö6*8¢[GšD¼×ąfrTŹå¾ĻĆö=5uōK)Æõ©Æ`v·WI‚HWģ@JF8GøS)fHQž¢½O³ƒĄ‘¤ŗIVHķ!w†ÖŚ"bS,¼‰GŽ.*>¾ß%ōcZAmŖ¶Kf‡“EÄ*MŹY> |*„cĘ |?fæåcm#iƒ³”+°īH5’b ·ŁÉ ·’üÅwfś’iw#O·ˆcĘŁjjUī o"°«žķ9;IĮ›eäÆ7˜ŲY-ŗźżbęhį‹ ?SƁ~ųĖĆVņ͉7×ŗw蘩Ī” Ŗąü!ŠŖĶ12Ę Ń?»n\„ūōņõµĶ’ÕķŽāM-J›“iƒ§§œ‰‰ū1²ē|$ā/3XXĄĶ¦En±”ś„”–čœāX7‘g4HR“ō~Ē÷£Ÿģ4BIN¤Ķl× "…dVtEŒɘ»*ĮĮżõĆzņŗa‹ŌVĘGz )v·-čÄ”Į%c7ÕÄŖOĘ«q}sö—Œmźc®žŠĮ=½ ō!#œ×N½#Z4ildś¢RņĪņ\\·ĮŚć†~EŠK=KėvŠM<“ŻĀ-•A‰)‹UŁ„n-żŌOöææ™x*¼@|×äėĶ*’P’kC$‰s34q7ØØÆ#Ip„Z6FNtų?‘×#\²Y£“”jŠrf`E!ĶE9WįdnIö¾%GÅćŗ.-„“¦«O«€nØę¼Uł7ĮŹI¹}™Żž 3²^µk kmgR=gƒÓ‰½SŃ¢JŽ(Ėö£“Œlß rF’lއ’“Įf¤ń#quŪ‹˜ŁWgSZæŚęü¹bQxaĒ}f…‘čĢŖ«źjš©¢EĮQ?i¹šL!y’¦JļĄŌ׋š|,Ō ńńäækķ·ŚĄč„/& x·Š÷ĶÉā}ŗƒ¹ ‚:m؃˜Ę U$§.5ŽĒŃ’ųšDč‚1$lü@l¦‘’C§.•ŠON\¹“† ‹ˆ~Øš™ŁĪ’[ŸT,\|¬Ŗ­@Šžŗ’'ĄŸgŠaÅ“JĘ&(%†TQqw“‹“e^?‰>Ō’×Šńy]Ÿ÷|”<—¶Ö0¬ƒ õ±•OĀ“°i+(~Tżüœ~Ӏäg?mÉPŖÄ7aČ ł0ōł'Ēp’¹}ĒI¬­˜h£Tēö}Ē÷j €„Å@mž4Ašżži€gŌī®B-åĮ)ŖĀ­²mąjˆM~Ū+Ķšā6–Ésp±™©Čš°‚ ¬ĢiķĒo‹=ä›(4ß+YĄ‹M–I ҳŗņŲ„0ās[š€’J”ßąn{ m\ˆjÖ±±A9%\P!ØŲtßā*æõĻ,(N”)éčחōYmų­%)4āåwŠ%Ž%ų׊«dWŹśÖ—mgj÷q+^‹™Ŗµixśaäø“‘,Żhæń‘æ—Ó­Fūō]­Å­ÅŖI§ėQ\„Ć8¤«$nõ’v[Ļö[ż÷ū¬ŽK%Ģ÷>£–’yEdŽ (r?”VøĮÄZ#-9z²;ģ„zާörĶę ØaœÖCBŪµ?wÄrć’5;¦’#P€> SeQ ISsńW/Śä­ö“›źĢˆ×ƒ"RjC7"A;ŸŁ#¦ e»6ÓŌĘÉčĆĻāāH$2 I†˜”6opźe22$ÆPę€Rōošµ‰)ōęx=ExDµ?Ąl§•Tӈl”cČ_ą,Ģ(]‰āĄ%Tµū_šŲųX’V”ZÅȫȫS©SŁ›©’)¹į֓¤\ßi< ^S-ä©õoŠŅ6U’b²rĮŃiV×7 ‘ˆģä»·•ź©f„”üŅ3WyN¼]b”,vö$¬Y‡M¤z*RK#ń_õ[;·—Ū–— ęZŖ Ö›ŠĆA×Ū.§5OóŸĆśg’Óõ1TŪ|ĒMü1ŒĻŪ#śŗ‘,ó†R''·ćĢ: ū[Ӌvē^Ą¼ >k³ˆjk܈„1¬sHG4! •’AššWśĀĆ=>EŚoµÆ-­Žœ÷‹ØĀ’»¤1)QMüø¹’V ØFÅSך¤ däŃFdõ[©iaą®f8ŪöŁpßKŗ¶[QpēėŒźf$’ ģīĢ@äĻźr‘Ł~ːė#¤ó*ßiz£Ę%§Š‡’ŪKBźÜ«ž’ČV9yzO"żæO–h)¦yšßėnåšF¹sY@̦hėŠ3MnćX~'Ÿ–6§-„ŹZżcÕ[k‘sjĀ@é,-ÕÓØћż*՗žZe·oŪ‹*ßTCŅ4½8»K=ØśŠŃźčĻK*˜•m’»ąŸÉČUæ^śĆO»¼°¶Ōļäø—Ø ¼ ĶXĢ*F’ÉGŒśĪ’ É'ļÓāķø¼ņ“ZRźQéV䎒„Cµ¬nž¤§ģĒÅć(İõxIö?cö™°ł‚ÖŹŅÖÖŅĀĻH’āQ Énµ%dČ~צ„äų~?i_˜/ńdņżbļŌx8™b¶hĀžęA7uõ٘zKĻįų^oO#ö¾gÕdÓµ;mAMž„Ļ×-ę‘Ü·`$(XæīŁWÓä¼£hł}Œ,V‚ēPkBåƒŹ£ŗW–Óā)EĮ}8Āzæ6dō½HĶ®u6ś”ŃķQ8Ź Ø·*ū]Ōq`?fÖŲI$’/ļå™~йžG-rņ”*D(žœ|"…AR#4KPœYĒŪ•"įŹX8$¹¤•=&FÉx‘5JėRĘ-¹·"”i }® +7÷iI$ŃKÅĶK1`¤Ž­GFŠdfåǟ„ĘWųŚY_0FˆŅ·FfD—ÓU$^IJQ§“—üd¼n\ÓCÕµ[W”ŲC³qŪ)_¬?ģ§ī׎%-ĮX]і¾¦ĢµjYT)ļ“o³ĪO݁ÆéŪ„öŖŃŌĒ1ˆ«",a•‰ų!ā”|"®°óži0TWZI=ÅĶŗ˜§%ÜI,v³Ī¢"ڇö–T_‡ģÉö8ō#Īś„čˆ.ćŠ@AkkĘҊ@ ŸJJtUŽG’W ąÕŒ©Äé"RWc4jK³^ ä_Tó%ϧk;˜2$"x%Œ27ē'% @²-[ķ¼ˆ™ °¾y ³æÓȉŚ+ŌŌ¤‹Ū‹Ö«žNqkØČŒÅ^ HĪTüq"=(z³1å†>fÕļµk„¹»UWPā8“hŌ*©jT ßķ‘ɾ7ųq8H2²¬”›Õ·¹ Į†AJŽ?gżO‡öŸłĖ!]:ŁU¾2—PĆÅvą ¦Źæ²æģ¾+ŪX35¼2ĢnT®ÜX;€ĶAWE1«°’żœœ²ŗś*—‰ŚEivįĶØ*;²ņ_‡Š’.2kVaŽe”<ņ1‘JÖE⬵āųA?äb&ÕŅŽXįaõµ˜­$<© //²?rÅāŠ”Ķ HŪCĮŠ7ߔˆ$$ĖżÖź>.\ø’.TZt?V½ø±(f5õ8¹,q 鬬“ā³Źöś}ź‘.MP³DVä·Ś‹ćąŸoŁ\,’ŚŻ§7Ź įmD+-½'1J¦…›‡ÄŹÉń'¦ü“ąŹ¹¶™$ŽO®A#7÷dw’F^{£pāqūKń``Ė9ZĖ=¬¢)~ÆRĒE‰c“ķ}”Į:|é>¦[ ŅkE0óbÕmčM>ĻØbI?i~±ź~Ī)£ßżv›x¤ n#Š°PcvųdØ£*É 7ņ}ŸõŸf—-„ DSmŖŪĖ\ŌP³,źĻ>ć÷ž¢B¼‹rę’»żœo%®„DĘÖŚĢa®lįb­ŚO,až×Æńz‹+ņżėżæ…¦ŻŹIf³za½[‹ %QĮ½PyFŹ@V^? ōŽóHļ"ż¾ ß½Ō‘pbЈ•”ˆ’ZHÖPؒ5Ē( ĶĶ9EĆŌÕõ0J@%·‘"V-ź8®ĖF*Ŗ9P|ńqžDųžĪ!kݤ1ĖČMbźÉz«“HžÉ*ŹČ¼øŌüéö_ģØåŚŅHH™b‰®fU$—sæ*nxņ‘E9.š T¶[z«:*¼b&e~rĆq ā z“+7H¦Nq·ó1¶¹’ ŅĖ$ĮžOFßӑ½@Ō#4č“’>\cTH’i˜‚­¬‘ĶhĄb§Ņ,'śUŁœ"ųŲśmˆ¼E=)#āJŠÖāux‚«Få³;r·‘ż?±žūd\Q­mÄR}S”ˆ®C<”ś×(ŁØnyƒØF!¹Ü?ļ„’OŽći%OCK(żŲļv£’Ó֟ÄēŌ“żõĮł`Fƒ÷źe§œ/8¢ˆ:…õ™Ü ķ0Vq|<#YW÷xµ¤*Ņżbą³r4X’„… rsG‹‡īż†uh·ŅV+ P¼[tY؊ŽBŗrŖŽlŠń“ŸņŅŃ6]]]\yV[ PŚ“Ź-¤”–exķ®Yh? óż®?Ī’k#“ł%øt²·KÉ¢āe«ŖD<ŽČ?d;śLßg÷šą8/4—Ō/5QŖ˜uåŠĀGŒˆāRX«²žõ֔õ~ęĒėśćƤDšĖ,—éĀAsw'­u^)eå1Żåō—ÅĶ ųæk!w’K4Iq4‚I$f޵*((:1ćÉæą¾Ó6%|¹–‹)UjT§%ģ[ŠW³õ—’lBš ż‘Z«_‹ż×.67(}B‚};˜œõū[n½ĮäÆž¶)鄼1Ī~šÉ q"ž§Ł4Ų†åĆš! Ēė!†įsÉyT‘ĒÕZ¢Š¢Ē(š$rÉū27ĆŌ¤’æķsyŌå‘{Ćugp ¼Œ/ĆIR2 /Ķ–µ4~cāZ’²ąü²Æ¹ŽŽCof Ŗ‘,vńЃÄąBÕ©·OŽ7Ł^Xm[©ģ:šü”V˜ŠĻŠ)ÜØŲ°;ŽTßčĮvQßI MKxcÆ+¢h :zĒzü4ū_kżl1³ņ_šuL–šlÓŪÆÄ×¢j÷Y'ō‘½ų³a¾Ÿłaęxī#z\šJÄ*ŃPTV¬cśÄ”#ģq…¹d¢ĖÉRč֒$šŒļs{ ]D˜ æĀR5¹Ek‚€²±“łł$(ł#•töI/a[˜.LČö6±O°#)Ž©ĄĘ“FæŲfvOŲūs‘źŗtÆ$³Ł«\G1[_PōIĀ#ńj’4dGąųŸį^+ƒ#Ó­'Ņg¶Óȓ•ŻĒÕŽŖm” ų™yrųæ› ģ`kß1Į§?Śžq‚ǐdR“«ŁŻwšø ļNø6ӗÕ!@­Unfž_…ł}ž8}wdņ^ih>䆦 NŌ*ó#mŖĪp4ó™ocŽ2¼­¦ Ņ$•GnÅ2īåI/~²”ōe–ŅXÅ3# "žS…č."Ž4ŠVTе^T„Pžtå1[y”DĖ'*½KƒŲƒ’ ø½„Ā,ڬ”Ø'·$V„Uć`v§Ń—«óŗ¹“‚]FW‘­P<źŪöš-ˆ[CÅŻü¼¹I¤‘čĢĪ«’\2‚Ź+Ø,oܘRUEBµ?×`ø4Ł@·uĆJÜĻer +ŚiĮĢ{ģdP~ŠW— “Ėu·Ō ²„ŌųÕ> oŹOźhŠČiź9¬”ž`«×Ž”ĆŹS.ž9t÷Ļ’Õõ>U7ĢŻ1“ÄåŖÄģ (¤ņšŪ®D5Fu%ŗŃmŹ zʲ>ź ØżŠz²PżŸµżźp,ÕN›a*X}`Étģģ¼Ų€X²ØøÓķ9ųßĆ$^ā-Q¹™ćEśÄ’ŗgAŠåSn/UhŚpƲsFU_ŚÕŽ;ØłzŚīdkˆÖNF{–„Ąe rp²Mź5ińŗÉ"żÆ¬|>žG¢Yŗó†8œNūF˜Ś¹”©Ä­*nßﵑŸż×oĻ­½„ĮE–i ¶­9­ąšü Ī(@ļKĖāN~0·ÖņÅ\­źHėhó†"F+DA(ōD^ ·1ņifųŚ8’Ī%¼–q9`%n>šzėY¢wš„Čųąõ=FWUēń:¶VŽ£Ķ*±ČÜī!?ŗuŗā¤šRˆó Iģ„Ģ_ī¤ä¦–VYāRu w!€VU*=N¾ÉųS”-ūčSÖå s¾}0‹ZĒĪ`²žīh¤¤Øį}?UI§ˆP,RGżŻŌińśsŖ.\/<óˆęTžYu¤q\ś}€%­5Ä$Qø?łĖ*²—,Z„giē¤RM²cPƒń¢Ē%oUžŌ |SI'ķuéIJ˜I€ƒ@iE!ż  —xāSńž\¤żž\±ļżĖ<“1’~LŅN+,ąqfįėNßm™9OĖ—<āļteµ·TGo1Žņ9ČĒöüq~Įń·„å¹^0ī'LÄnń…ēĄåØų’ͱMrömE[R˜$ž4Ž“õŗ»0„ŁŪ3@Śb…žö7,ä×`ŪmŌ|ņ’ušÜņŠ%Qń—(PO:†‹­ānI»}œt3F†V@U\4`«½UŠl”¾Wä¼ł²£AĻās jD ōŲOL±VŪąųŲńŏ«Y™}_IxȓTˆįn÷r(gōŸā’+Åj‘Ć ¦uTµ·¶ÉZØ(Óāć2G7£*4rü0ŹŹ8dŌž¶é#Ū)d·tn2KŅ?[ü…#›§ķ|Q$KĶżN;½>XnG«5ĖśĻvĖń«Ō$toļZ›7?…}cżŪśŽV÷cÓ[y.dŌ4²(²»‰UHcŤHÕ œ|“Šś¾žŽK·V¦åd¬hÉ8e+U Źh9/ņ?ńOŻąx&y£†¾1·¢Ń &õz|4Ań*žĪ(·a„)3µĶ˜^uAĶŲ|}Ø¢’gąÄš½vyYQ*¢¼X‡f.ųø‘ūĶ—łWƒdæĖpYjčÆ4 «Ē,Šd+APR2>Õ#~)üÉö2dŚ~­ot“ –*²LxJT®ė4Ī[ģ¢(U’!ņM„ݼˆÉyŖ“€/RH«'SÉ!ęÜ*œŽgć_³MbßN½ciq¤€Ēźŗ³źIjÉ#3#vų׏ƅ÷Z°ŗæ‚y‰74hņŃU‰ E^-ž·÷™žŻ®.­&¶hÓMVø]N>š–k4,ˆ¼‘Æ&ūH¹½Ō.eóĻžŠ,±­“QxDÓ3(’„§$R}6O°’¼ūhQG&»§ź,{usm<ܘ¹Ve"½v]żŽX ŸĖ”vä|¾® Aų­nO#°žją›Š‚ĀÓR˜éšéŅKżźģEõ  ōˆ–Mz:7­ov×ų©!f9-:eålBÖ)Ā(Zą`·õ`— "IŽR\õy|<¾Į–1C$Œ÷*lõŗ{)Ź‘Q#D]\V«é·ĒOŚ‹Œ‰Ė’ą+X ¼V“·t[‰m­”‰äcEe•„š”į¤ßĖ‹XiRŽiNŒcž( uCZąåæ%ų•æ—ÓŻā:eŪžH¤ØP žŖ€vš#sū<Óō„‚źęÜØ ‘@Ō2É·üĆ%øI|ŗV7%,ā–Ž §«s4a|LHæüY‡ ūGŅW4].ݜ_Š8eŖ6’v Sž¶[Čmo Yć¬m(žņ ŠJõę»gSņœe4H[żüĻ*ŠŌp-DūŃTįĻĖŽVŁ’ÖõFli\G€öÄ.ī#“µ–ź@̐#HŹ‚¬ĮExØŚ¬Ż"×ÓM„Zżb8ļZœ˜-mPÖ7»˜ÆŖēģŸB'ąŒß± æ·š1˜|æa“Vw+䶄š\I~įŅ‘+Uōh KĒ÷œ=/_ūč…ģ(šƒ¬fTyąZåb ėƂHŌ<~?čó,‹é v“SDõoŌO0n2:QqĬ”(b掇żŪĒ Æ‡—g–!%‚ •«u$I2!Zš#7­$f«Į?w'ū'ĀūĖg¾“Ó{9•!TĘ>5jVI#õLĻ"Ņ‘ÅūČį’vž÷÷X6ĻIÓ#¶xķ%Q(Fkˆ®fõC°āYœÆŠ…c’~#ü8D”–!BńWżoSž+_‹9‡žtōżRK«H½…Ą‚Q g÷PÉt'„OŻžźCßc„ø’K!*VĢź¤Rņžd‘^“zfY¤ÅRQœ*€ G'5§²ų,»)u%ŗü!Ź»¶Õ 2­zQ^\Njļ™vaJŌ5O샳7ņņżœ„.—<ܲ:9 $DŽU+AU;ü'z,c•}HÕUUē·%ø5ŅØ]ø•?kįh™›įŽ<źJJ7-ˆ2ņ20ūqųĄ>‘Y­„–9øžŹ¶p®Ü/ØLQž4ų RćOM‹Cź«“‰Į9d‡J²ŠŅ F"ihd(Äžķ@.{V“^~Ÿ_Åź4r°©n#qĮB.ÜV›…č§^ķrųxś–üXČ=YÉć]¦ūlI4 ģ÷cĢÆēĻģ\7f¬ó%-f5O2+ńpˆ,kÓoŁn˜Čø!`Ä+­benJŌ$­ØäźÜW›|R"ā&‹#Ņ•Żv!‡* ŃTx‹üŁmndG'.é›e A^ä%)É’ČfÅloŽŽ¬!Åg™ĒĀ„}¹-V?…>Ēķ:ͬõ{9¬#œ£Ēė‚7*ŅJŖ+G<©é…³üÅĒ ō›4ź…Ø·¶"‹sw#qaJŻDˆ²Øż•¤ļĒįĘłĖž`³ŽkėMfŽöźÕŕĢDĮ¶"0[ūŌÆūķbćĒćņ!¢ł»Z“Z“†é–5[˜#‘cP¢śŹ$x–wż„Oē’W 5x“‡ŌŁ-šę{Ųcžū‚„ø‡,h»Ašņ䬣Ó®ZV·bß½g‡U¾°īĒö™pļAøµŽÖāi`\ÅK„¢<…½[t‰V$@OVxĻķ3ś•csi pi·ŃĖ—vsŲĆźĘŃŗ¬÷’7ˆ<–Dˆz­ĀZ~’ŸŻŪ]Y˜Ļķ­&‰¶ń+dj-X§šķõ(OFäJ żä‘™žGU &Æš`Q .õ*[Ų\ÅÄ/ÅY”1?ī±,_ģÓ /µ°“¶„A¤»|DKrȂy7®Ķé/ų×FīŒ£Ø uØ4ÆņrG§źqa(Œśf;x ` xķē‹Ē§Ä0,ŗuÜVk‡Äeiøµ_P>ōōŪž .ķ¢ŠMIfrM€H a»ŁXPż–o‹ÓŽ7ņÕ¤ §Ņ·›Õž›ĢOZx/o «k&ZżbÖÖX‡#ҐÜ!§oŁ\ µĘ±o8“ėå`Œ~Ē"ĪßB#æśŁŚ¼°AŠ“āˆkhߍ)BĀ§éŽ˜l2ž@ĒpöĻ’×õGį›¶U>ģŖ`Kų„É ,“FZµ Ÿ[ńōųįwčš5d2H%hŅYÉ Ō<T ĀüS³1ų’ÕN_1^ÅuęY”*$‰­ę“µSRæčĻšF U’I=#·ü{7lųDå};­Æ×BIX–z•WHZ:EIœKKūȂG3Å_īĻ‹ĘlÖXķŁZÓRZ[wTOU•ŲŸŻ‡fŅoōuxŸķšVęҤ‹ĖmxÅ-Ģ6l¤I1Õ§Y7Y£ŒæåO‘=tQdŽyr_&˜×Ö…¶­+g-‘µkčŲÜ£ [ÖFheUōyÅĘĶ7Ųå&qŸ1ł^ēA×5-ād‘ģeQÓ ŽTõVE]Č䱨n?e¾ %³“sʋZDĶÄ ·U Jo²ņÄČ«ź)*Ø|…Gā1yJ•ĀhU·rŖÕ;’hüבżŽ¾Ö*҉įW1F€°Vą:,\‹;…żŠ|QÆĀé4y¬.—ė),® zsE/bŽ”ĻĒć^?Śā†_Suj:˜œ/eŸM8Pņ‘Ą‹O‹Œ©Ė÷±zݦZÜYÉ:s’±ń¤Œ¬ŅšÆ IņūĒÅįO‰Õ7Æ,ŸhāŠ†UųC’5õēAöx³«æ·§—Š®”÷1Š7>Ū7ESĆżEūV˜ėę–K`cV‘cry&✘ńņų›—ķ/6_…¦ŽÖŖ=oC „C"‚zœG©ČŃjKņēŒŽ€’?w@M  Ɛ+š+žŪziūXĒž„˜W™ęI®äņļńr~_źį†› Ģ’MĘcRĒĈ4AĊę5/‹‡ķ7,E™]aebS›z|—õĘT£ īY¾ß5ćšpÉߖõk^~čĖn•(‚»ŖR¬ļń]׹§^żfć/©yßVd’8„6Ö“*ŃBŽ„IÄž”fY9÷g&Džx^Ģ[a¬Ü=ÜŅš’_«Æ­#©įˊ’œĖsōÕéÉ"£\Ķ’.ĖšäGLYW·HtKŌbį…züKR~Ł_ų|œŻŻZi–·ŗŒVKõØķUZzõÕāPI?ųŸż_ŪĀÆ/‹;É­a—뱿īf"…Ä`L>LµĘœ>%Å<™¶µ£@ _JźķåѲ>?ŻWÜżNlŽöŽč®•=ĶL„¬¬°ÜźCź'Æ<(£żõĻ©ÆéV»kfTśĄõ¢wŠ>£o7’)¾%Z~Ū`?Š­ŗé×±˜ī"¶f@ąspŃpŽW T3§«Å¾ćžG +ż[Aµō£ r‰-¬ą¤ĀFbWˆoŚ*­ūp„£b½åZSÆĄ»tnækł?ΚƒÅō ßłėJt¦łoNæ½Ōo-¬§ō$śµĖøUēź*P !G/SķŁVĒ-Ę«֛5²™ ĶÅ“iń¬ŒŽIU'sŹNuCū86öŪź÷:Än’ ~s%Kw”9;Š’rP’­†ŗY|™y2DÓKéųńśĘŌ§ł<æŲćܑ©k¼Ļ¬µĆ0pÆlĢŪ‘ā”LĢ–BRÖÖk@M\«Ā£nŸŸk;‡”׏–t±įob6*}šä(®Y_lÜĒ?’ŠõNWolŪo|NEć$ʼnõ‰_z(×utˆ5 N^C“I ”åV—Ӎ8žNģī>õs•źP\Ś]i—q;‹žF+ÉXģīB:Č«é³4ģ’QĒŌoQ’Ń”N ,⾤eQ>ÆĆėŹ•¼Œ„ …<ųØI«Ļ—śņpC_Y®nJkŽ/©Č%U9§ Ģ”jæ…}ūω=Oƒķ¶[JĻŖÜ\Ė'¤’Z¬RM%™ås,©12‚É"'ķ’’Ķ„J×&ÖŽtšv›ŌšźÜDZW'‹±õb·+ĄS÷Ҭ1z~Ÿ„Ī7|4•īćHdK[˜Õ„øšh­—ˆŖ’Ł«K7?ŁT_OÓ^qĒūnMCP–ż!©z>·ŽŹŹG,#Ž 3M$‹³’~ńQæå”ąĄ«i¦„“ā8^i·w_W`[¬’—‘¤ū?a像ūå'žł‚‹ n(ķ@ڃ£)Š4,ņøžBŖ®ä[—ū^‚F¾¦!ŻČ>¾ ›‚WOŻ„•–£­VCźO!vż¶X®%_Ł|0“ÓlĪ+Ū«ƒM4Ļ 4—ҼƓ^K)GĀ«õtśĖ~ÓpeÅe‹Oõ™ž©F„LÅ"¹»=ŹŹÉmß³u3ÜÅ|šUƘ ŽtŽi0źs7«4aMB©•Ś5’ÅWąŸ±'ģįµ°–ā5x¦kˆĄo†/ʵ)i’“œrī äš³,&Y`ņE2”#oļ&xʎܰÄ·±Śƒ Q4” H_ÕZwPĢšĘĻ’¤Ī’ĢøBŗĄµz ¬<ø“ny©ų¢«Dė·÷XäæńfU½Ųx.ŽU†HZ;ŠUhé1ZņUhŻ„xŻOŪāÉūOńHĆ%Õ“j«²¤*—73EP¼XB·2ģFĖ$ßėc“ÖŒŽ”! ‘P€)żē6“į’5Ę­„‹Ęd–T XžńߙG`w@ä²³ō’vIŠK¤‰}`ņ·sńrQœ¬‘*ŸQꎬęF‘?ß\3C§ÜBāE–ķłÄŃĮq!Ā‚¤,“Ųø µ.‚}¤żē\Ś/Õd‚žŪŌiHŠCGżŅ°ÉONTćÅJńNKöWćÅķ„ärK(wY•%œąāE!„„>™DYēÅWŽUūM“ķ6x­ēŠäˆ•ad%YŠČO/ˆ(*gāżŲüæĮóžh\Īś®Æ2®Ü‰"ø‹—5Ž”ØŪŒ~¢¢7ó¬ŸźäLŗKKŲē‘ŠŖƒV•<*µ^KüėūK‹,1%ķΟr=g¬[Ō!”£|,±'ćų?›–ŽÖt™Ń˜ŲAĒ4;qVźŪ}Ÿµü¼±2Œe#Óu”£¢©Ŗ°ėµ7čøeŻÕß§kŅĶėN8‘"{™*v_P(dŪķČŅņćū>ŸŁYe˜‚#†LˆrŅŗšM‚“’¹aZ 7§ļŸxł“ZA¤²*ģ‰ /!w? +āʬ~/“’?Å.C5£1Õ%iÕVRš)Ŗ‚AµųvųWłp82‚¾™©^µ‘eߨ )ö~ų!ÖvQˆČ¼Cq7vBvāæļÖ_ų’ąŻ7Z[{߯[=Āž?W A!c@„ üTģܕxü_IicwØŁÅu:JHłĶ<+ÅB®Ń†Z‚ėµ—Ēé|Ɇ,Vk4²¤Kė™"äÅ+«?wn4Hż9=V_Žš‘ N…Ø\‘¼HVžŒ1Kū™·®ćūÅ‡ķš‘Ł™¤6ƒo¦Å śÕZ"ĢņŁ11ÆĆńH·›ķŖK$’q’ON?µĶ•·š"Ÿc¦[X@Ŗ© źq`Ę>Öü„ņæk“¶łŚšĢ–ėé$VĶi}rØ£e,JN*gŪ¬oÄó)«DŠśš¢I2Å„6ÆīÕ°]¬‹¤j£Q·eøŽn&Bˆd$·eźwJbšĄŌļ/„½Vb_Fߌ¬~Æ+}”ŲPŅ…3*~Ļ‹–7Ģ(ŠÓK‚Ź[x†“ „"7ćlWł›ģįI·#óĢĘ$_V)Šü4r HØÅ8uæ›Õż†Ą÷¶į-ęęŸéJ#‘Ŗ[Æ/†¤Šīøœbé 8V™'ž+ŗoóćŒW ^õN(ÜI$ žÖJ’-¤X|×'1Ī–—čŖ7%Š„+Oׁ×R0hžV^§€Ćs5 "¬¬#ģņ!ū,dŃæ”ę–I­£”ČŽ£Uäć³›ÓHųbš=Ō‡ŹĻlßXØxdc_öxmęK‰tķ[P1Ę^99J‚J«n{ĶžĖååšĀm*öG2>Æi4GT"!2Óįā\’­×@Qś"Ī•*#P¤ššA¹Üķ†!włwĒl;o ’ŃõNjeS(ƒaµFätW¬78Z’¾1²×ćąOVV<•ߜ—9¾·iq‹9” ĖØĒŖcrž’GE~?Żq“ŅÆĀØīĶšśæT„b“e1ŠDĖR2­%cüZ²H9Fń/9=_ˆ Kš» ę,I!ćrÜOؼBŖŃbc ōž¤ų~5Ā^Ä[“—RJ€z“4Œr!£EžH²E*<’ü+šĶéqĀ{SišŚ+$—vń7ļķ§‘>®J$‘`Ó@’·6Į‘ÖDżä_Ę„¼w¦G¶u¶sĘāqݱ.=Hż!š½ųŃćź~éc’5欹¾iƒO{t–Y øŽŽwOĀóøY>>”ż_ƒ³·æuń³.a½xb{Sqo$j–sIĘ8RIĶ9ĒŇżņqū_Žšžń©\=óŁE-Ŗ2žīFc3z1ń!پŠ'zürŖ£óo‚Eå&.t«}ū»® oj=YYD*Æ2“*_ŻĒ¼Ÿ?ŁŪĄšÖ$¶·c+US˜Ź³1*ƒ‹V“ķ„=(ųĻĮ—Š·.ndÆ$ž™RF…‚Ę-ÄBh˜=Gb°ŖJń+ČüŸąGžL$‡¤œ÷,5v ójjČI—¢’Å‚'–g_EE‘Õyqā‘ü8o%“¬b[«µ•?xљcŽUR Ž-D•7ųOæŔŚl—ĶŌ¬’±]4ę@I©TIg0ʾ®:Żļ-žēš\»± ,ÜR`Č¢œ-žÆ~Õ’.9~ß»0źŽžĮcŒ\\Äg¢'–=~$e‹ćéšüÅßńń…·Z’i‰~–ń «pZ8W‰ ¾‘*“ŗ… /8™xś^„šņ‘ŠŽø²†öÖᤶŽ7åȔäŪb§ż¹$h8sHņOokuØé¶³i÷¶Šhäµ½ƒĘ‘Ń:1`ĶŖ“«éš_BuģüYüҵšŽÖÕeFŠA1„Fz$qā«M»ś•’vzŠĖœśä–ED^Lz(źiŲcī£tĘģ\( œŽį;)³O俜1µ³[عȲ5Ź¢Ŗ£ó`č”…—į? ‘Ŗ’¾ŽZi׆0ń:šI3Ŗ½œA· “RgŪżõ^LŸšX!4Ū± ĖX\°·”š[É”Épƒ£$¼h¢aĖ…dē*»ŗ¾FŽĘKeܬq‰4īĆԌGɁi™€FŽ@©¾¬®ßaāåɵøø14ņIA‡»øžćķSūÓ.e’J’uü Üqc#}e'‘]ĀÆ2’Fų‡īdUbŸ£H©ź~ēĒ†66`²3æŖb Ŗ­ĢFy.x³ ŸQŠńGų'ōāų™FĪV5Š!ŽādäŖ“¢M€oN5@Šž×ī|ńƐkėĒæŌ¤¹PQåp# hCASZ.ū×ö᱈«šŠ0@„BWā”jĻ)oOüŒRS#ŖÅĮH4½Ō¼@;ždņE’%æą8ą'Õƒ)šÜÕ¶gø2üKūl‡€±Æī«lļüß³åÕļŁ]DŒņ—ē ś ©¢¼Ę(Ą`+ū»ołø3M+¹™hļ ’ĮmūʬćÖvwyū?ɋZ\Ćrņpc˜±¤SsēĢņe™‹rßūÓĘn<9|<°tÆ4rŽnĪх…£J’PtEifhX|?W»užX„ŹXca*[-b„sšŻx¬HMH3Ś3"GĆųˆ†?ų·CvöÅ#šŽ&"‰Ī·Œ²Óį-äkćĢz·īžÓKö°ŲėqڈVOR7O‰ Ä©;ڽ⒪ޭ»/ņb³ßZ–Ū\%ē}Ø”S<©½\¼qōæ×—Š—÷‰.Fļu…‚ŅņčDīõfu+”1¼V¶%Įjæ§ėJĆü®źžč‹¤=µ®Ÿ’VŌ`‚8®!™P-ŌA>²xOCźÄń·©ń_>WzŽ—«ĪÖÄGķĶ `|[|JTpIYˆ-źÖ9Ā’Źß ėv6ŗĆŪ[_ƒ ±Œ ’É!VāÄ£Š$|~ Ü_ÕGā‘ē,x"S'ĀX))BE‘[qѕ¾śē%ŗ•mękØmJˆu9āuW#ėLb£Ž ~į“—+źšĆ=kŹw^W³†-RŚęį BH9K¼ĮŲ‘“j·žŒP5>6–9=WżĖĒͰ†ūĢz“ėß^4°/¢F1žüaœ,’·/Ūføyö™š1šÕÆ“<و/4ŅŹ~*2ŹBqŲ’¾ųńżÆŪƋyˆ1¤SĖ1'Ÿ¦'²•M~Ķ‹Ūɰ)OÅÅæŹį‹¤vm;ÜcŠs±˜„kü±4ŠCSą@ß¼ū?ŹŁF{[i½vō¢V%„²P$°¢…¹³üĖ·Å4LøŖź$AäźYEżē4Ėā!G­$1śĢņqhŅE—ŌĢv¶SÕŽéÄņŌÉĮ™Y•I”QWŻžĻū/Ž4»ebĶšó ‚G.ß©čU9?,O"…AT9 ‚čM  ņą²ž/Įx3•§Ę½ząF(Ė™Šžl^tvT ÆOµšžÖÓ[ yīBĀ‘…õ}Z*ЦŒ£ˆSž²·üYĒXڬ’Bb”żØćeutCr2 ÆÄŒątåĻ÷Ÿ³†W—śa¾H•Ō\ŪK#¬je… üw§&@2“]NöŃLDD”Fһ߼•00[»čøZÄļ(–ܬ?ęnbEMi»Ą“ßö²aŖhŗõœ.¾®Õ77rĖjčA‰ÅĖ]Ł’ÓõNlٱ²'(ŁkBE*6ĀłMb’Ā2ü”H¢¤zµ ASķ¶G5/,µÖ”=ėHÖšķź#„Ųś¬ŒśJŚ/ŪųžĪCoķī®­“Ē-“/ń*µY"“öĄ©^*~(ÓŃēÅćõ²2†ŗµK«;`ŅD X½ ˜#S'&CM’wūš§ĀųYv·×7^Ķc¶öķźżf‘Ū…I-<äņąäņŪžģČYwy}qi,ņŪ$zķ”3Mńµ>¬I"ŸŽDīĶūø’yū¼ ʗoisāŗ[«Q½v…#NKš£żLAš}؉“įćńŗż ÷zŒ1ThśdVĢOĮØÜĬåHŚH£HŽwā)+z¼¾6_å@ϦŻĒū¼šXOÄ~·3„’Jže`ž·ĀæjKŽ\¼‹öĆ H–ŅQzÕ ­/J!ng5ŁŲ„ļü+ņønd‰’VxaŽE‘c-AG!é‘nö°$ļ~³:Ėź/÷|¾ ’Q©o,öʜW`ņIvIŒ//äI¹}¶żŽI_ék!ēĘi!aĶ$ę ²ŻM7¦ēj·īćo‹—ӊ*z¶įŤ±2(#ŒrĤ²KĖéö·õW–T“ŻLĀf’Ö9Czō3HŖҬ}yŒæ+ÆÅĒ2ÜŪ½ėS½¹ ö–CÓ=_Pńū_ńžikĶ¦Ģ ŲY’hAø¼w”ƁP•@É·Uo‡ķ+`˜ÆdµāZā8Ź„*^Ŗ SƁw=x#ż®X*KO•d7>›T2*ČKƒŌėLāOåżćÆĀŸa~ «]GO‘–Ś&Ń£hWÓQļšŌ·ÄŪvßø’Špl,`Uõķ]…¬ŒÖņ[ó2Å·T‰ŚIx•õŽI ’Š8ā¶vŗtĖ$֚¼k$ä)µµh%cÖÆ5ŗ,jkŹžÅįńś‡īĒĖŪrĶĒŠžHŠ'Āļ0E1ØŻ9[²r’‚ĘŪŻ[M2„ÕĀ^ʃ×`a6öŠ «3?˃“čē·ēe"4Ö°HĄP!ā+•åxƧ8xy"A/āoNIdÉ)yņŠį¤†”¹-*żž>›ü/@*xæ«#'Ło…0æX™mģÆ&·Öźą2p€ņEIŃb‰Zü#ķDŒČ±²HŸnl…Kn«=é·ĘPJ[›1DF™+4•YŁ>ķńåŻ3PŸS“„·¤”©aä¬ėĖÕdeT<Ąų¤ųł*rųsøy·OŃüϦŚé·w–Ö1L±éw'ҹŗzb)ØĢ‰ėIƉäĶźqOųÉĒu»+ķxķŻĻ©WIį1H²qˆücfHڟe‘æcāų‘› l®Üz‘=eچ9e‰Ą ślĀ»/÷š|8¼u “Ńr¹²7ļ!76ģŸnOĪ0~É@Ķ'k’ Ēæē"DĪ 5…f+R[ż)Iū#ö’i>/‡ąŻBĢŖėo,b„ŗ*ʤ‚#䁦•¾ĻśD’Ļž‰,Œ‘āeļfŗd†t ®^īąń¬D?v~8¢‘Š7Śõn#HšIZ"ōÕm~u‡C6qĘ"·ŽA «V7yz³,Ņ1?¼.[ŒĶéHޤ¼[ĘJ2l¼øD§bKLE>õ[ķ}¬_Œ`WŌ”–ˆ(äO©š¢|Gį”xSłæÉÄmZPˆ9Ōq~[Ž ‚Ģhāķ·óqĆtšPYh’8’B7_E[‘䓞NgžzæłXkåi˜jZ„ĪĘ?NŚgb½‹| ‘ū[‡–[4R5¼hIdˆl*ÅQ‹Ń˜ŁŸŚd_‹ķą§¶wGK¹øā¦U¢É%„~dFRÉń’¾’>L”Q›eV… Hæ¾$ŠĢ•€WŠFęķĮÆ’}¦/;]%®8Ȏ WŒ’óPU¾Ų’eūJĪJ ©ßźŠ–¦ŽX ©SÉ£{‰€’y'’ƒČmńh5kšG#(oH¤]‡o‡ 4d‹ō“ƒū†)v½E¦¤:ņc^?źäÆĶ7wy’k×ų¢šKE°Def„³ il„„”2žūŸOķrČטEÅǦĢę ‰ķ—ŸØ„ $& ŽT!ŪØ’)‘p é­,v¶ĶĘ]$–(Õø˜”€ĘKń,9”“’ü,ܛā_čwZzŻz²¬ž’BÆ"r1Öpč«ČŠFæģ]1xÕ£qs‚ėŅ öƒ¬)Įœ~Ļk6„r8HĢ‘±Ų¼¶ĒˆŲR”¤ųvĮ:Œu{ęQHŁĢž›(āå¼eōN~µöpśf¶ŅµöD-¤×WPž®b‰$p+݇ócķīFƬź:åŗEŸq}Į¢vs1¤‰,D!SŁ“ƒü_g |Æ«å >"jÆęÆbmyĄdĢK%妨lʬ²Źd‰ćéJģŅ(„zSņ;Ŗ4w,‘©ˆŖšÆ©2JĄÓŪ’’«{ŹüN…cĆEŽ€bGчųeœŗūē’ŌõNW#ʜM)^[SåÖ¹y²ˆ4Ųż8±”`ÕG•ī RøG©\"zŗxiÕ£Œ5É ”uj*¢’X/Ø[ŠšžWå{©P-`uųÜIĒ“<Õ"…źŽŠ²ō’wIķ|öhŻ{ŁE­°vā„AōPP³=xŖ4œ~&żÜ|£_ōˆĶō÷śŖĮ<ŚbCerį“m:rSՉG5™£&“ä¼łqN/šņ½²Š8Ć\¹r” *†ś“"@UcŠ%9ĖöDhžµÄĆ—¤ņį;²]+­ŗ¢ĀζPØFō#ŌvT`óŻs+õ‰Óą†Vōa’Yæu‹\É“F“žžåŪՎ+uäĪ„‰/ ˆ2#:’»•!gćżēżlou'§$–³0¹cŹWFåV”ؒXFüxŃ’Ņnążģ(˜ŁžŽ1)(­õŠ’‘ńˆ:)I’kˆĻŚØŽīŻž×/Sw{›ÄZÜM5µ0Č-!F1ē-ĆLėĒöŽwUūŸ,mĶ…ā‘.§y w2•ōį<§˜ķN³—‘däæ E Ÿ·_³ęEšnp*Č*n.VKėš‚OŁUhb”Wų'Łżē.ØfˆČ#KY5 ˜ÜwT+R(ӋÖ_åųQ×ü¼ly4"KÖś½£čĀ?І© 1‚ŸŖæü6cy:ĄQ!śÄf¹4¶4 ė/šÓž*[«Ė¶„ÅÉćĶyD¬±%(@hŻČ}ŸµĖK+e0²Įtd`¬*ąõā}7>ĘĢ>$oŲųšI1ĖÄŁ .VæŸŌ”‰G>,¼$“ھŸó|yGXœFa–ā8ÕIć4Œ²ČźĄ†g9ā——E>×&Å®nué–÷U»µ„"²žF €&{^¤üedo…¾<„Öōų” <7Z̜”!Ō2„~75-ό~Æģżæ‰øƒŽSs,-<ÖĮ@X-ķ!†ŁÉméÅīd¢µ}EŠf’/—ņ—7ŗjĘ× š/§šņų‘ |łåX|Éå«MZÉi©ŗ#ŗ1ei8Ėśž  Rå#RQ›ūÕć æ±œxH’Iµ 4DńvUā;RäcE›ū¦Å­ī5(Ųzv‚Ņz2‚k@Ecņä?gö’ŹĖ·ž6¬“Æ I¢}^ v ^ԟeaĒö¤ćĖ ¢Ó®Ā>Ÿk ©TäHˆ‡;ņhčĢæjI?ŗū/{§†Ļdš}²ĒŖŻČńæ5P§ŌVŽ~ Åb—ŒĘ$ŠFüeI#žk¹¶‘tų-ÜøHY„?»§"å@^ õQÄü\¾.\“—÷Ž[!JTX«uē"% |@=ā8łTéŹÉŽŠąĘ¼ˆ²Ę#žtÅ-xµ½Ģεi(©UDµxF§łQāŃŻFœ”ę )@: †ńõž“Ü’kįƏ'ĄóA­L— k[rģ6żäŹdž¼ŗļūY3†ÜC….=Œ°-JnOPi]ĖżÆł©ź—1\ˆn,š#">”«°`>Ń$~Ąøż•żŚÆņ±ōĖ©ZK—e¼ ,*¤Ė° ’x˜—łSŠIšņųWŠĶŃV7Icš(Érį–f™Ų3Ō±ųƒqžeżÓ~Āq|ZūO²ŗžĪ$ān-Æ'š4ä±I+E#o_…ŪŁ–Śö Y(–I$©3rŖżžž×.Xo£Ų42Ai$nŽÖ®±+R$æų’vĮzĻÖ[Ķe${ ›Wź³4vM($ŽĖ‘t?ärųŸü¬+óMŃt°¹”{­6uŻx¼¶Ćm÷÷ż¬(²ÓDś¦õ1"OVtĮ‡$õ™$¤Ÿäśņ·<0NŸ-āXŽÅ:z‰s 08Ø$Io H“ūd”üŸOj(§"!ń2Sr?xĀ’”§!^ĒüæņpĻXXąÖõŪR†@/a’ö‚z©Ę”*×oņqO J­«HŒCM%„Ä϶Ą\=«Ąńå\«‰XėVÉ9¬RC D”4ām@wޜB¦-co½Ž„Ŗń‚BčB‰P'¢Ø=«_ųLŽF5Ņ4Š5‡r8ŠžīÅeŪäa®H„€ĆhÓ(”7aE?vĮų!_öY¼£g ®½sD“Yä&SĖāhb½>Ó}ņ³Æym=Ö8æŗUŽ«Ę:ÜĻš’B 鬄qyLa™˜|TOŲ^<štąaŽF‘[į0‰"¢Œ»*Q›n??±ö~Ī µ†Fe†;"[‚I!Š2†9˜Ž7µ ųžޯņ V) woijļY"µ‘aJuW‡Õ•׍htž§ūóŸÅ–· ŅCiĪīYFRŅ؈ž=‡.\Sūj’É2·³ūXų%…5cX­īc­Ÿ*\Qć@8ČØY™>Ģ-æ'‰cų߃ ¶†Łķä·øi¤Ó¦Ubņ0icUPč¢f)ń[=7ž_‰’Ѥøś°››É­nC]•h%ą7!i*µķÄŌ/5\UŗŌt«›·ż¦„ž°—Ōeˆ%Ś’V°EƟf“4«’†š~Ætįāś5,œ%†Åi€ypY~9gE’—~MĖżnO3’!ņĢQ¼·WšŅ¼Ęy3µ@©Ē“7ģ'Ć’ö?xŲJXSV“fEēĻR- $qHu2“ ¾Ķź‹ž*L"…,n”µ»ø+K¢—.ģšY¢JÉGŪü¬“Xiz¬MĖkyet%39j½Œ‰*l7>¤\y­ˆI5†©IaumčY]$›&„„ø‰č(JŃŲ;’ĻO‡#¾pāŽĒźŠ²Į [Ā•$q¢Ž­ŗńĀUžiļ­õKcń0++5ZfBbį°čŃŪ;VŸ±žVŻPĆ} DāõP,n QÄńņõąŅ¹Äķm#’ŅöOL²„ė$›¶ ÷Ū®¼/ęŪÉ#+µŒĒn“…\żĀ•Ļ+Ā֞a1<”'Iųˆ;!ˆŲ®6śoBmY÷Ŗ"ļæĄQāJō§ĮƖ ņŌ“Żź4“-}{ÉŲ |rHџł—LäŌ i£[Ø£)ß©-e$=?Łaģ 6‡liVk–EiWE2®ß5ĒyF#7˜®g4Y¢Qįø¦’ė.uO+ʱhÜ«qéJć†ÕĖ®jū~’ÖõNlٳfĀKėrJŗ}¼r ÜN**•§¤’…]’Ż^iŲżć« M(éīgø†›’„ŖFX$1($uQN®ž‡Ē¬٦Ÿ¢ņ‘$o³ }.OÓüŗ—bGæ½nnAsnó\$³+Wœ×wKń|\$÷͐3hŗæ—umužŗgŸMŖĶ Ä[żŌūqd'„?ą[ž˜—źĶq“’[¬×- jTՒ&"Œx³HŹØæ3|xūÉf’_ZäĘŃžöZ—V‘*ś„Ŗ#OM#ōæc†J<¶öl 3+`—$PZ©ŖĘ†/ńża››ülˆńĒüĶct;°œmļ]ä“VųLÉ-8ĶÄģ=@‹Ä/Š©…4ŹØ•ŻˆQBµćTI>g“5>ĻƏ³ę ³””ŒzkČŠÆØ8mįĘ:Æ/ŁoOOPLHI( /ˊ™eäØÄ± ė$æźŖžĻ̹“%c(\1źT•†1OõWŸ_²ł7ņü"ŚĻGV6ø»ŠR¢¢FdĄĶr]elösÜ«3ŽÅ~Õŗ˜†yurČў‹jĖå_“œya­•”‰oõB¶Å¹śSčʇģ«V‡—&żŸņ¶ļW“žY+=™«"µfeŠŽ-ә åšóŁ_īń8õ¶Ļeeoé\IŅž ĄÉ;Š);QxŸŁįź~ļÓBkˆ‘ķ…”’{®„Ō,m$zŽ%®n„~Ÿd7¢¼æŌĘĮåĶ:,~‚¼œ5ģŠK(–2zRIĖ.7„W<>.8w¢ź:W闩杤2żrÆQDr?Ż^›€NGfŃÖūUŅÜŽŹĶi:Ą…õe†Ņ~0K!//ŻŖøUż®_ŁĀ­a¢#Ėī£u[rI £­ėÓłsImmõū`‘ØtG¢|?ßÅ)FŚ•`ńČžiY±Ktxšžé[šŹĘ‡‰-YK–’æ"?ąpH“X¬µŠ“&)58”-V#`^”ęį­ĄS4@VV,£W§Ž*Ė7ü³ĒÄ!lćøŌn&Žłż{[WŖE )rÄܒĄq-ÜŅ8HšY9|?\’u*Ō­fž(/¬"’xmdZ[\/&˜%޵żć"µ=5ų¹żæņ0zj>”;*ÉlV$ÓērÜŃczIõwŁ•?^įæ}čĒö$`Wń4.¶ÖšC-­Š1Ag|CĶź^I#h½‚·ĄeiYdżļ­'¤įVŻįmļ${“B$c42“ĢQš­ūćf4ęŹ¾£*³rG—Ē½™,cŽi“oG¶‰˜ Øćc(V’ĻvO‹ģal6āHšUxį”j%Q,‚%o³U—’~ŚĘ¼æāæå0š}98±mBįø…†I=PĄė™>Ū‹Eš.D÷W réĶf_ō‹cZ-øeį95@Ē~5YSą~8%­ęXŽņ9 å¬䶄ĒĀ¢±aūĪcÓ_KŌ’_ õgņoPF¶°/?P’K,‘TYx—ā’÷_¦­ĘGÉõ%Ō&€ŲZ–žˆq#³Yµ$Ž®Üłņż«śŌĒ÷w.­ÖQ!Õ£ŗ@(X׹UhŲ~ń‘x§ĆżēŲu§ŠŚę»’I%H™#‡Q ķrBŖØ‘iéśj8‡dU•92’æ1²9>„vŖm…cfHƒ*µC(øų¢_VŸ¼nwœÉūX¼ic‹fC VdˆĶČŌ-A*£É*µcUFā’æīŁ[Y§,„ķ®ÕUĢÖײśØdo‚yźŹœłĀ¼żOŽqN_ß'yse'§éŗéóĘ”c‘ˬ0½HEYōł ՚0’U•?yé³|8&ā’GXėUÕbÕ¦¶ čZŚ'§ńø’vQTn?dkӑ±O.˦ŅZĻnVēŅ’„"@(V%Hd^·ģŃ£ōžNO‹ ­C[Ė š2,Só67q'[ˆ÷x^ŠĖń3B[Õ_ōˆy·uØßK-Ō‚@¢XDUˆq‘ć U$˜ė»/©®} ^XŻÕRĄ†II0B‹<÷Ź)ś•`=“§–Ü ŽĖĀn?é^£zvK.°ó…†•\Čeøŗ ֏%Ưț3Ä#FYž³7”ŁżŚ.~aj2Kåm.Žü˜µYnščZ‰”-ų4kÉø(õExcn.ü¾ß§Ļ9čgSš’ā£n¢‡“<Ȳ38]čΊ(7ūRž{¶Lō+Ł.,­mÅ¢J÷Ҭ6vq<ȱ ćS: ĀKūŌćŹONĻĪ{Ņo<·h†©ia#+š‡w‚FųŚ“݊“’ œĪt‘!‰ß‹3ŠV‰żÖūSsĻqüė‹ŪFMŗ£æ.dn¼±$-;ņj’¾¹e¼ĪxGŖń(®Īć„CżŒHÆÓķb†.”1@„žå˜¢‚*b€” iöžM²px<¶(ˆ=n½ĄčDvņ© Ą2’“šžĘO_U†ŅÕRŌ†øz āAևŸBüŁÅš¾ēQ~|.¤`‘ŸH# U„px*%>*såūīŅ?O³„\Ĭ> H”+ Gģ;žģ|%Sö×毜|Ņ–ŚŌĢ÷FORHėTä !÷pĢßŽĒ—ÅüļöbćM=Ķä čU¦‰Į&÷•egqey¤ Éž/B(“‡90”n¶sÉgdTŪĒɅ»Ÿ·qF.T–?z“j”fį?°Ų_q ”·Öš@^"­;GK‰Ł½N }1õ¢…ųŹŅzR·Įép1–ś˜Ć q ŠŽÓ’Åh­ÅcT¬ŒŽ§5ų”pē|¦Š/ļ ‘]I{fž¤ŅŸRu†±C©ÄÆ YeY=^KžėōŸŸī÷r\b²Az’˜%ŃäŃ\‡ %(•&Ż”DéɹpśŹ4²ÉūĻWö“Õ®-͚»§Õ§…dć‰an ą±½AN|=EųækįE— &y¤žļŒ6ń)-³—Hy:–D`ŽOŽ5=GvOŒmĒ’˜#$°­­§¬¶Ž8ÖįŠ#p!Bņ‘§!čĖĘ8£…æj&_µ„³ĒčM-“nā9_“E•õW‘pÆ!dų„-~?õ’­§Ķn“š‚”¹Æy Ų­˜ŹåūLxH’źpʾoRe‰yGƜ`š?LO(ŒåzP¤1§ŲN)ū ‚~§–ܽ5’I¤.Ŗ#vbhLk-x–ų%ŗX׳>,d–Šś%.¤1ĖnžŒwE’ŃŹFåU"_ÖSĒ÷Šæ·Ēł¤FrGr‡--œÅżK …įˆ"Š4ž…Eßa'ķ}æƒÓų”øaõŗ¼~’pŌ-˜ĻÄvb®¼ 3z+öæŻqśŸß£l“J¢Ę+ø¦½_«,оœ¼e…ä~e#ū®m$搾,)m{up«%®£Nj°H«R ”ŗ€¾ÓÉ2"qēč’ŗżA1iąžśęn^`IPø+BQ”ćN‹ź¹įńAĮɑCߣ»Eńr!n&>Hß PbhŲé ¹e${i½N\qżh\Ķ©vē²ÉØŃZkpĄ>Ū<гįépu0K+»[qyo*4qÖX®mėÄ+€Y–*Ū}fÖ¼_ūČ}OŒm®»k%ąŗ(±­į÷šrÓ¼E&©!dä«Į$ūN¾Ść*`}f9¤”OźžķŹĆs cÅŅHżky)5•×ÕµF!däīŸķ¤ÉoĪJ܇Hī.šĘ‹ bdõFš†ŻŽ’óDķéśr+ė1I©-“–MĶöĶy»ÜLQwIer_ŽŻāHßMĀL5Õ4 [Ķa.2]²YhņH^häō¢bĖ: :ńx¦ōē‰ł|ģņ‹ŻyE&ŅŚłmeÓÆexģĖV2Ń?¬Ēė õŚŚugųśk#&) sĶ»żaU¢X% ›”qšøefåÅæÉēš|9×’'<µnIó¢ąµø1X<Ō«HŖŖĢ …ažī5’~;żœłš€Żčs§Ć ŚÜF8Š}DjSµć\ę,«čČĖƼP-6«*:’3ü_ź~Ī uŒ;*š#K•¤!^5Śč¬ņ7ł^Ÿū·®f<;• ŒYB++’`żćĒ=G0?¹^½ż¦ųW$ZTs }%r’[;Ö¼ƒ²¼„¼>&y™~ףż¬½¾£RRņ ;f»K7„ åÉŚ1Ļ£Q¾%ū|?ŹÄÜN’Ž$ōuPÖ±¼{?¼2ĪYøn¼>?ģś•č+Ņ)ӒвŃŌSqN|Økʍ’&åų$ZxŻ™]“½M[}‰bJæ]ééŖ’:Iū¬ÜŻŻņ»EzÉzĘgzTņœlæš³•ĒĄ…ø²MĄ–@Ō*“œ<”G’š±M.ĀŹ Oŗ`Ķ,o4 4C„°°OŻ…ZqŽ?µö~ĒĆöp”š„­¾½Ą’āāKkY­£c$Ęu‘bˆŖŽlx/īŌ¶~b):“‘"ņ-c ©’D ©ž\,°.o`Ō/84[Ū•jü\ŚAØų*Č#oęÅthY®"ky >"8ęj|ż]°£u-½ŻµŹ Gõ©ai„Õę?z“ļ"øMVwB\Ę †ebiĘktVŚ›~šóĆX¦¬P#' du R§Ń5Zż¤ųųÆ—Ē÷ŚT˲ĄbˆWj+5į²CäųŌy®~ J,Äõ„¬­æĖŌ\äRWō0aö£µØ?iEį‡ö¤›IĀ‘Ę=J1ZšÕäŒūq †ŽNeO1ß§NP¹'§[ÉüϹ6Ń]4”¢ń_MZöŽ åļÓ53’ŃõNlٳfĄ·öĶ",±H!ŗŠ¦˜T ŅŖā«Ź7 äµ’+ķŖ6ŗÖ$KˆķYā‚åŌA¹39§ÄŠ·ĆŹ8«ńæćžķōWćČmķŸé“¬ŠæX +«Øh ‚XHĄPĒ ȏš?Ēß&Āv°³™Ń®dtˆUWÖoVŽGéĘ)Ybzæģ-Ć;Hæīž%ÜĒÓµõLlčäÖ¦5ę“§ķIY~׌vżęŻ‹›³§BѤsĶ\»)¢ž–VR[—5Ž7óŗŹ.VüIn«3¬B6VŖ¼mRA+Ń£uų¹}ƇģšČö¢VTHĮåpņś²p@¤š§UZy¾'Æ9=y½%įčį[Ń--ą+6Ę¢åŅ8dU~%y•y«3d·H„Ō÷Ü«ĒhģąŹóÄši¶’s$Ń“ +æĄŚ[“#4†^DKsėÜśæŻĘņĘˊ[›­"Ž1kŠ5Ģl¶öóæ6€ÅÕZ2nƒĒ A”øõ^iÓ÷¾šž¬ 0Q’99Z°_Ehh ĘWÓę¬9¤„_Œkž‹gs’2}D[Is‘„“L¶•Vī1ŹD@€©X™U"‘ųŖ%ųżw“ģücn­nm‘ä·įqhæ †Ū¹#÷SÉš”GźźØ•XžSö½OļpžĘö [(^Ę"@DøpL€Ö¬8ƾ„[ķ

4w©]Ś'«y=Ŗjæ]¹sŹ#2p×€KJĻ'Ćk ?i·2G‘Ÿ0łM¼Éęe†MZuš¼­on\*†:«z±ŗŁøüKĝvHµ N]*Ņ“¶"‹%åX ĮdH£1ČŹ¬ĻźÆŚäłĶ;'·˜hÖ1Ȳ;zҵ8~ķ"“ Są,Ü[–rÄųLp źjY…hõ*¤ÓcĮäćü¬Ńā²<ŁJˆ@ā+ČØRżU·Œ/óz“—š«,r}Y!÷Ó5y¦I hŽ_.ä^ Ó£nsŻsUŒš·µä­AŠr’Įä×@€OŖYGĢGoė*Ēź)r¢;iŠ(?`L—įL•jh2^æ÷¼ćVx–g| ¤ŖŽœj\žkŹŽżÆ[F–q š¤“vŠž°½X·õų~?Ė‚ō»mFķ$±Z¬ĄlAq«……‹§ŚFt’+Ļk$m%µ¢ŽŒ„–ćŌ? %”ŪgX’Łįėŗ•ŖÅFČ~0KN’+rnü Ū .#UŌø7^ó”4„Ō?!\+k…:]ĆFŒ.īGՕ8•tŽį>Ŗ)gVbC|rKƒ|„©EØF$ž¤Q^Ā-™•A*Ń#²ķ;U?Čžl%ó %ߙRt&­gm"SØ? ضGZÉ%°ŠĶ  ”ÓBĖ! –y×ķ}Ʊø@–Z“qŽ/Qh*ŠŅŌlw|¾,s[Ćmv· źCĮ4~4–Ī-·ł9škęū›yIo®«Ī„ŗ©Ž7u½hƒė63Ļ©y|$[‰Ų·Xä+ķVųpVҦš@­2K œ’¤T–TžĶp׏R…ó…ńn‚fg§] AŪäp?‘]«¢H —ąCķį’k }_PT¼·`½÷r†ņ⵿œoćSź±RŸ©$‡É֑NyWā”ģ ü)žOŽƒC——SŸ’ŅõNlŁ»fĢH§ ļļ$dSā¬IvUā ü›öc—u$kÕ)0Y „2D“P§—pŹ~æ³'7nļ?7’EČŌ¶z„W[ZŽzń')'·»‚}Fi(.»,L9ĢĘDŸŸ%Ya{Ž Žė§O‰#žŽXn¤ä„HFćß uX‡ĆĒŌ_ŪOV?ą-•hųpōķŚ…aCū„īR^椫é7/¶įĢ·r¶øSf€™õ‚•juś°Au§[—ż×ģEõµise黨’D4%ˆ%ēbhń×o‡öÕU}$ĀMVšÜ¹xˆ¹¾ "†Jz±‘Č-g óNnžŒ1[r½NܾÖ&…įš@ee tp³K%M-ķµ`„QšéżOVNMėM+æī•žv·Q 1¬±!‘ĢŁŁFµEŖØy®$^QGZo³źCs#Ł££]_Ļ,–ÓIŽēPœ¤’†1$*œŅ"ÄXbõąHāO…}j’ęņų}F/R*HXM.%pŖŹyUR6,«Én!·D_ļn¦gōĀÜÉy¦Ķ,1:InØa¹“ڌ[į++ńEFzŸŻĖéÉ*śŠæĆūÉ·>„Ą’ŹAÄ'żē™L‘Fī”Gsńżb[ąGż–ųZ,ä¾£A§_3Ę¢4E!€$s*į}4’Å Ģæ¼O7ļ0£,w+,w±«ß$E¢kPßWX™Ęń>­ĆLŹßŁēöeƒ÷ÜĆÅ„ŹMØĖėDĄ“sĘZ)U żė9^=9EĪOµńʜ¾Vį^ĀŽ3="Óą’’ÜD}וA_‡Ōz}Ŗ·ŁFēšóĖŅŖ÷IqŖĢ·SæĆcdq:—O@…X”åĮ"o‹ƒā——I¹hĖŲ[Īx<²’)ę6T,wųł¾•ż6åĖ“OØĖŹŃ9z(•œņ ń#Ź$v…ҵ_FĀ%ćĻ÷ ąŪÆ©Z˜ÓT+#]+²‹e)p¤–$zl ’Ÿ‰½9}i’zĶ'ĆĻhuW•…ŖČė«żbŖ.ƒŠ„‹ż›ū?¼ƒć•> °ŠĢĻ+’¤^±W”„yc%2°+wlŖ>ĻQ[ķřœ:ŹĻi;…į×6Ņ”·›€ū¹øņ›ƒę’G,’c¶Žn.œH#śÆīš 8š$ƒz‘©’X‚•ų_ƒśŖŹæŽ*#=¢ŖĶ²F,hD–²;$ń¬„ŽP7Ā…%ćźzsGģńćžėZkÅŅÓԊīHį™x‰\§0ąńų£‘„1Ó쬨·iĒū¹aÄķīt ɔZĆ^9āź€[,ŠE%YcT Ą“ū”–.?īæWāŵhī!Šī ™ÄQÖŸ›°ұ«Ģ°I"WˆS$n}ÆUSš6Wiõ6ŸhŠĒHnÆ`ØxĄ Īi#RG_Sƒqż®Ə0O”246‘ø­ZxLŹŖNõD†y$T'öY%wÄtJ{6¼½†Vž b¢ęėźėĢUŪrœXÖ²KõÆŁ‰=I$uE+JQߓ4Ó$±ś›G$Õ)Œ4Ÿ»Æļéüæģ° F74u “ŅZW–ą×~+(XŸżFć‚K½ G(ĄM6‘ˆ4?°*ßóĻ/¤Ź!RŃŪĀ”ŠŽ2TƒæĀ’ź£äóȱIqŖé)s¹‰ęŃ˜'»4«×ö2}-Õå¤q][(½J©¼@žiš“¼EׄUdVćö‘ydwPŅ…¼ŠŃ\ȒÕÕk³r‘#xįjņ¢| ’H‰ö†Yźp­µn#3†PŠ“H;в# žW’‚ūX„<ż>qKKH¢GfeQńQĖ­ĒŁ¬qHŹæ«‘é,ī%×n©8K;ÕKbEL«(»‘Dˆ«EG~\¾.J™zt׌–ž>ŗÆou5“ˆœjdŖ ż‘YOū%ÅVŚ[-:{»Ł=(¾±,Æ)ØCH$ūl؏‰A¢łSµż' ŌšŚŪÉ(mŪźŃ,°YÄQ‰ōÖM” N/é’/Åńadq˜šĶZś¤’ÄG|ĖSJ’h0=šUąj?£.¾ƒé\ŠTž#ˆ]£æé[qöēµ­wų¦Š={~épMŗ9“lŠl“övżŸ©ĘŖg÷]ŹĆmZŹ&óxP4’[]*P“m—o¤÷Ę$Ō|²ĶöZŽłA÷ä=’— "RöŗŒny½¤°Ø=©ź*Ÿųgėƒ<°6_IŌś„ļWŠ1ßnųĖņ m3J”ü<`³V ’撍_%m@śÄn8¬oiÄ’©Xżķ\2¶UƒĻCĶl³0­ AoO¾FÉż’qIŽFf§ozSśą¬¾ŁUĢ3’ÓõNlٳb3–vØ&„•?ē’6į}å›NL#K † wł.Ćąū-žģ[Ÿ±…RŹef†Õ}f—.:ućȓČŪØ}Eųx"Ėžņ޽ÆÖ%±xź­U”4\āÆĆĒYåĪß½ō”——9ä¼ōŁČ†Ÿ jI–ŽĄÜM!ŻM Z¤<ćT€“ž”°ĘĶÅ8Æ>TÖ¢k±%ŌhØ,v惐iJŹä’e’2±Åńrõ¾ĄZĢ $’Ž=Ņ!!ųŹō#“X•æŻŸ Æü“hėŽ_jMéCžE§9Ų9µŠ“ U!d”ŗŃø°T•}NhŃ+½ģ.£‘-¢v’åęžł¾×%ŒÖ5įøė?ū¦?ŻEö›ƒÜDח6ÖĢķ%²,S ­$£—ÅĒ‹;qįéĆÅš·ĘńĘß ļ%‹Nµõ® ÉØH$[4‰Q„lcäņ%xEĶU÷ņp‰~Ģp"G)4śdwB3xŌŖ4֐YŌŗ­jLŽeŖ’\Ėżā·īž§ ózš³‚8¹*Xqh“MАŻHŌci#UųT½œ_gŌk‰~ĪKXšz„Ėi·\ƒN¶„Å+)žī(ŅO…ķč~8ķćżū~óŌŁAķīģŚB­krĄŖ/¤ 4VøØōĖqfŠ%õ£nīæšLsĒe„¶—õ¾¶˜¹HZٌõ!k4ĮG ‡)=4į7ļ?ÜÆd66šGėĘļ„,Ķ$nĮ@«JņĀ™¦AńĢŃ£"§8U—Zéš5–®~“ˆŖEČĄ1Ŗ%Ź–OLŽ_Ĝø~ķ™R0 3Gõ{ÆT“1FP`^Rs@Ó„j~Ź<ž¬~ÄkĮ}&Š}f#4p¬(Rź_īÉ5Z»Ģ”ęU\]Ų‘Zźś:dinK”=I®},Ä}‡åüƜÓó‚wż#§M idH„hY[‘14JŌf’/ģ·ŚČLöéĘĪĪ1É~ܼv¶Ńш®ß¼c"ÆÅń|?źąhĀ‹I$uåź2˜Oó,uD®äwfW’Yxżœ§Į%ĶŹD RyžfQøzqŌŌńųĖ’‚¢†5¶RHtfę„1*hˆßÜRU_ęh•ņył{ ©u$óyŒ2ųd2”†‡Ņ*ŹōƒķdĪ搑¢²ø[hŠ€ĖĻ/zšųĆĘÄļ°_ŚĄ–:«\E6±~]ž®ÖüH[~‹!’½™jæó~Ī;U²HØšĖ)3¬Ó<ҚĀ…„?Ł'üŽ9ÖžŠœØģ7SžWžjÜÅž§ķdGĪw[7©o's’Ćr żnE©«tsW“­ƒ,µuf·žłÅZIąŖŌU”čÆĄģQS¦øóÕü¹ś*P°ŻßŪÄń«t2\ āGN@ ‰‹mńbšõ¶­såV ęŠĶBņĪ;gõŒ „øbĀ®”Z6åš’Āą]RÉ­5;«/PŹĪgŽJq#×½–EZTŃV¼ ¬nŠĘC? YÕ·%L·(h{yšÖ8Žźķˆ5¶²‡“ŚōƒŪ~逮$6ŚVŸŅO¦YƒÄTń†RM+²š<°]ö¬oįŃoķÉD¶ć0$ÅD‰-?•¢fųN?LøśÄŚ%Ė%½·*zü27†#bŹömvÆī‘Pwā“)8/E‰5(¶ōĶd  «ņO G/šŻ›©”Y‘J £Gšs)ÉåÜ¢Y/¶ŻŚ­Ė² ĘæC`²¼Ó␠Ū"‘ŗKƒCž«ŻBĊMH§©­7ÅŽXĶCŸ’ŌõHĶ›6aŒFŹcrVŲ©Üļ…Śõ½¼%eō#B󳲤IóHOĀ‘Š~ߌ_²²äkӗRY^tkm)ĻVŠ{žTžņ§Ō†īŽ_X•8żeā>­ -vżŒq,6ÖjŖŖŃāēnŪÆĮQ}YxDæÜ¶*¤,bXŠØa“’WbõÆ¢†Œī z’/÷ŸüŚŽ”©H¶ °ÓŽ§q"FģĒD'ł-Į™æ”“čÖöӛx§w¹"“ŽČ}GTF Yj=?TŸ†ŠžŒmžėųdŌ{Ø­¤[5c,gįŠ.RČ9Q‹Vf‘ĖóiåoŚõ„uäžØ fE† śjÆéĢ’*ń.ŹŖČ2žggTżäŸhßj\/{›«8'ŗŌ„kHĮܤj]½BXƦ]½7•õÓųž÷Ō\ƒYĆrÅī¹JóNVE{‚­kT` ŒŻßŅq‹ÕUįĮĮé„W‹!²,ÜTśšœŒéoȑĻģ²=ĖQxń^6éńüžŠTŒĮ2‹y¢Ń„Wœz¢šÄ Ŗ$N)Éu$Aeś²z?å2£"²3Ćõ‹¶YäøäśŻō!HXeųz^§Ē"ń_K£ÅŽW€Ķl­ÖŹ==§ÓŃĖKkpXĖ' ą“) <™¹z’ĖĮåŠ.HÅz–£Ļ«[jē÷fF'œŸh³¼rœ~O“s@‹q4¬ŲB-žQź-$ŽVT",TuęŅ[,æļĘĚ³†"’ŠķÉ-•¢åjWÓ„99¬©Õćø‹Ÿķ3ņ“.Qżf÷GOBœL²¬¤&Ā‘ĘZO…¾Uhמ*ū? ­ĪŸØ,Qæ«,¤F~S+ę2¶į œ˜ß²7ūµyz™R¶ž7ļ¬õ6c#ō¦¶õAcÅĻ«čGBķóeų~Ę%)’å涊Īó³ōø Ź…‰¢›†R~%Oud䜰E­®³GŽŚs§Ā§”)¼„K1 ÓOǚ±(hā?‹āćé¤x3J“Õm#–d×(9\H¤“ņ32Ŗ‰&yc~„x’­š’õÓu©„Žy ·BxpXT#šņ䮜7 öćn?cŪÄoPˆˆnu; U˜€E€ ū>“?ī‡Š"Æ%ž|/’śŹkŗIskõŠØ3Ū«ŁHõ xŒŃ9ßu<•džS;hµ+ÄM:^Ü?"¬Ó4SÉO„2Ė – ćAöU'ųYæg–]¬–2EsH¶!$õ$²»4¹øøŲŅDŒ/؜Õ_ӇūĘDI=ćį”ó^ŪBO"“†ćҐ]n²ī$õ—ĘÖ?ņųį]µ«Ė ­z÷—T*Ūŗj—œp^Ś*ēžN?ĢŲ%ķĮ˜£ l–Ii3¤µšI©I®9'ø’Š­ U_äćńįŽ†¦ė “źw­M6Ą©ži*܊q•œAh/­#vć'/ŚįŌü”½–t·Ō$ŸP† ©d)ŠŌC²~ķ*cƒČß“¼ł`żBķWÕŪĮ,ęźXšĢÄ»²Ŗ1ćŒ~Ē2iYs–~dŪ;źvw³ō8dŽV™Ż’óÓsĢŖÖ±<}9*šūYBd·ø„=yĢv¼™…UŠ–˜PаV•‹ž_„öń÷ŽIä„H#IÅOīŃ8–”ćńpOŒæ8|8¾›Ø[ŪCs4Ņ„žļxćņŽ">  żŸŚ tk)µT†ŚĪŽiķ£^&åAŠ 9įżäŸ“—n?Ŗœ›:.§z4ļr}Y56²)ˆ~ļŸū„ä“ūĻŪōæŁdšŅń!_NK5ęÄÕ¤UE;„¤łįmżöœ%–Ņżm–‹*±ÄŪ’»T™«ū?ŁAhaS äņX­W~{֊¾¤ėzłIõMB8HAU „­XՇü»ó’ŒxMę­0]Ļyr¦IŁUޤņv~Õ §«ß üņ‚[ß.31I%h݊ģ‡ GzdsNõ¢ĘGäöŗšŪ©®É‚õÕFĄq©|7ó$7ŗ4ėĖi-@ŗō䐒c•fõ„,¤?ćŁ9 ū/†šßÉ­\Ė£tŗM£Ļ_Ng»<÷éU/€ü±!3A ĆY2†=>+×ŲaøR×<–KyeA^Œdˆõļ…—E¬Vœ½="ųšƒÄ4rI_n{aG—¦’āĀŽÉ—ŠÅ GČy L3!§ł<°žĪŽx“ż=MžmA×}Į’ē˜#żƒŒNĮ£6žqˆÄO ÜGCE ~ž8'C‹Ÿę¤¤[N»=)ĻfĄz<ĶåHT”-õ{&P{²ĮįČ äšŃLÆQöĢüų¤NcG(šžĘ׿&ÉŻ‡$ųļN§ZÆ šŖń öĒåķÓ6Ł’ÕõMsfĶ”H Į¹ļ¹;Ž?~F.ÅŽ§79c­¼-ŹŹŌQƒH¦‚āB¤†§ĀaJžėį›āŸŠā–Æ©A„E4jVēP9$``š!ei䓱†.+Éųü?a,v ²Iv{Ć#:ÄÄ3I7Ū,hEX;R1ÅÉc×āvr¤}FHm€Ž‘ #~ ÄrOłx’+÷iæ /¬­t¶¹µŅāBĮ€14‹O÷Pź‘’hÆUg’użÆY‰Õ53Žu–ėxĄųE²J§åRYŃ™-Ńxą'’ 2Qk£Ū$čd¹¾˜± *O)]æy)byońČܾ%ūqšŹŹ aōŪėŚµÄ”…Ģ’¼:·ցxƼ‚Ŗ¬qņwżÜ…×wń5ź#Ģe‘$õ’sĀI\!?Ä{-Å`FżŚ~ń’}źLZͩȢĮV(^Fõ¢rŠqČ#¹1žh’8~±'ļ8HÉżäĀ„»KRė]ŒĢ„ł[ȌM¼Ž>ĀGōų’æ×ų!FOŽżœVęxĮõ)TóćčYBĢ E ŗ³²R^.„”#'?Kł"’⣣»”š[]åŽī6Q(”,ŅĢcćźqūIĄIõ²œ¾Ņ¦EÅćÉ<¤ŗe=7™źüUaéTvXż^,œ}nj5ÜQŻĖy{ %Eœq‡œĒBIZIM!f’UFI[łø·$dY]ŚęÖh·Ä]ØhH§ĘécĄnš‹āõdfÄ&c¬RBzq“öü吐8™e7E9±O‰"X~ŹżcąĮöĖgoh÷q!Y$be–FŖ³WŠ©‘ŻżDä;śéĖ˜ ˜,QĀX‰טzp«:“' V5gÜ|p·īøś<ł¢ēR…>° ė*ąz±e'›øB‰?ģžn®’7Śhß÷xšÉ6„'Õõćøŗ$·i±Bō‘ČVf_¶ĪģņwŠ]^ņŠ8® ŗ[]$TH„.yŃEaV5PĻŹG’6OīqJĘȱŸHō®Æ £5„p­ÕTõi—ŗŠī§Ūō’cŁé7A½YcŠk…Oˆ¤PŖčwĪÜwųyĄńųq{āH–ÖźĶ¾ʐ aą‹*ZDĆsY9ȍū|Ÿ %Ó4õ•=M>chü„Ņ‹A#5([ė2¼ß Ž?aQŸŸņ`ū]67•VĖNÓacÕ[ µÜŌ±…Ŗ(ßV?‡"¼µ™į‰GĘ»³†Ż!UcMŃ\Sž,›‹3r& r>·d#7w@ o¦«Ü]Čf4ųæ_\ż4ų#^Y=ņōPYh:8¼ąŠŠ¬&i#Ž_«’ĀßąfFj Fpķ6 »²“ŠįŽ>7SŸ†Y„%„ųw bå”o²ē;üŃ.“ou²[Ėep.ž2VZ”P‘ņ'“rć!䞟§ŸĆŹ2Ž\pŠuUˆHØ8‡Õä»u!Ūżśø”’ĢG“cS½wÆöc”nKńS©ćÉ~’p×M¼¹i ­•¼××7*Ė6Ė7Ŗ¤P†‹‰wä“§$›'6Śī­¦YOm¬³ŚßCi-ŹÅH‚1tRD*d~"%āŅžĖ«æļ0E§›a71,r=Ä3Ļ29eY”g„ĆŠ™•[÷€ńOņ~r¶’ĻŌu{H㼑""³€ ežŽæŹxš3[ĀŅ­$‘£ųå™L•QŁ9±CÅ»1xSżś™‘¦1Y•ī›ģ’Y„öŲ mšüÅ’1=VvŠęŃø“źź’E6Ę”x–jĄóDS„Žmuś¶“/%õ"µøŪ†0¢ŠW½ām•„ʋm| S\ź³ÉpY€y©ŠĒ-[›•ŪŠ’ŗłæģį÷˜l Ūh7kcotd’C@R7 iž“†ųlw™’‰/ä#į}>E6’{*:dkE‰!žÓ‰ę€Øā÷S˽6ź”’[ gu†ā’˜Zµœē¦ÜŒŃu’€ĀMMęŠĖŌQĘAc|NJÉŚŸi~!¶“O©ŁÜŽć„ōē²š‘ £w’uѲW2ˆ4Ż!ČØ[™ō’vų†č:lŸó²kõš°åü¢)ĄüW ģŅÕ¤ŗrø`å€ėG•žĮp‡ 65ćTHŌ $A ’Į.H4H;ųc̄ӕTŒ/҈[%:>›"8¢žń¹*’–„–PǧYȱ0i%ų®Ń$’B)źæĀ8Šqąy4p§ĆHŽ›9UčEŽ[‹‰=c¼iZ¢õę­ŗ ųÄßkāõł~ž ›T’ō Ā2XV‹$‡ØkQÅkź\?VE_Ż"z$­',źß\Œ‚%¹Zµ—“¤‚Hg“Ÿ„Šņų#vćżÜsńē…³_Ķ,© r½æšFŪ6pÆ#‡rĆf§4’ žī>9Mke`‹{©Ģ÷3Čß»^!TȤ•bŻa‚W÷ÆżĀz~¬Žæ7ņ^OØĶõX^!²¤—ÆH–(ä/$„KnµHćXš.HŖŽ¢qž÷iz.5o¦÷6„Ø@@wSūōā8¹ō¢’yāžļ­ź/bņZ۟¬jsĒū»h˜¤vցjd™‡“ü_µ,¼¾ ~ǦŹĀTqurPÕYd]ÉUµµ ”Ž1±Ž(Š}ؑ}v^ŻĆĖ‚pŲŚŚ«ŻŹ­ĀQe6čŖ”ŖŸM#>¤fi8,4īüęęééā u­ŻŠźĻœ¼¤W*K ”*U½Hų’/؟µĒģÉ;ėŪG¼‘“ŹZŪĀ ^ÜÄN1•,$x—ūŁK|^§Ś_³'?µ†š¦‹u`ž­¤Ķ4ČØņK2(·̹<Łi·īꍳ?c ī,/'‚S„Ē4qæ&—Sgx£) ”Ę+ź,Ō2Éérųł4ŸiGh÷pÉ ĀZŪÉkw „ĀČŽūՌG“Gķ•ų¾Ļģ|!u¢IżOFGié²"Ę ¬$eGć,JÜW‹DÜæcģ`+)äTG,lć1Äį ‰ 5–Ņļ€-¹žī_ŚćÉłńĮrYĀ—1¤¶wVr³Ņ;ūXŽÖŽ‚¬Äs‰Püø¤ŸšĖˆ^Ę×A­cž{ķ2 גˆJ?RM¼ę/Qƒ ¶n\?ŻHų¬væX…~ŖÆn¬­f²FŹęØŹ¾˜eUšāV³é|ĖŁ+n”mÕBZ2Q`Sžü“žÆŚ‹ćå‚#D\G2Ū†!ŠYõ 5>'ŗœy“†8Ż’Ż_q`ĖxBF·/ųö·@ķ+±1ƒÖjrzo3qųVO¬ņūl"e…eK‹ÓźÆuYޱ‰‚ŽTpćĒ™vetć'ķæĆéXلΠ#³ø±Ē×iEŽCJ3äą4ßlæØŸ /ŁĪ‰­¼q¬ž²Ę 1†$JJ6ØØųlMcT~_¼Eż —MźĘpŻ›”‘i·Ęјҿģs‰žhjĶuę²ŠYR$ōdŠY( ”$’åųÉö™jx?>_ixdT}xĘW—$VV1JŌØ4aĢ2ń@Ü~ßķ’­‹Cm1eŪ1PG0m$q_µ.Ē·ę’TbŚŻ$ŌkhˆŖ•³yÖ¾æ£ń|“żWż¬1“·F¬–ʰ£BE¼qļøõ)$Æķ|iń.kķ§ĮZ~šWźI#I·¤ZI£I#ĘĶüüR?‡‚’±āÖśńÓźŹŃĵnU™ £1^#ąóįĪ›Øy£Q‘4żµ+ŠĀMµ†<ą!ęVF™"ŲŌż©>µ'ĒĒgēļ¬Ļlŗuä÷1Žįī ¾“€L’$](ņ~Ö8čR[Kę?2~€ŠQX­ćāóĒŪ¤śJ޵_µüßk%63Ćt‰čÉ#Į%Ō“Å4£‹ŗI}³2ö'r;õSęO/Éo2›{«[wh%<ˆŒ, ‡ Æ©+ń6³QmØéV1ĘR9g²½XA%TŻi÷ '¹,ßågB.²él€rYeˆ)Ū©łČøĢN[\¼pjFoß}īמjČÜѵ“‚*”I%·ž'ōneāz}†uĆ-dmrƼŽHą5žYaYĒėÄZ_^X@ąµ³Gumrąv‘Į%Æ™©€īō»Öņ®§i3Ė}©[„·AĢÅmg©§÷°øl“iöRĶ”éÉ:^µK€¦”dŠibz6ܾ1¶;˱¬ŗt÷AKr†ü—Õ–55’T tkIŠ€²E •ŲW“ŹÄą_,G/Ō½'ūhDÜc·%žXƒ÷¾±§WW$Ux˜ oįńI’ųPT¤§n‹÷ą…-Ź·;1ł[³q’×õH͚™³oLrĢį•$*ūĪāń j’Į«„Ęā•·DM%„BŖģx·‹žÓĆr’v—_z0H³³U@‘GRECĮĮ#1ųXž_µš·ļ#źdÅ.u>|d­•‘ų 2Š*R·%9†1ż•õ(ųıƒhµ+õ7$Ū/ŁDŲJ«Zpӂæµ3æ÷~¤ß,Hߣ}]浉~»} ak` ŽÖ1]å™@_UV¼¤õ9/?÷_/ļ·µ°“g°……åķ̇ės²†ē"®ķŌR!Å8ŸŻĄŽœ_³Ē*-$Ēu ”Yu-ŚI‹Į j?vXq,±U#Ž?‹ÓTųžä§Õ¬‰Åāk‚¢OL€Ģ°3HģĻ$Š>>g‘<š^\[ ®®¦¾q ¢Éåy< ń”p¬c!½> žŁg~/†į¹š ØŚkµ¦¦`č÷KĢU‹#^É0Ck'4·“‹r“‡(qg{‰.%‰~«õ£ŽįžŽWI)b…§‡¤³žķ}i&į髿<©Ž›Hі8®.e+•»/A`¾«Ē?JŻXÆīƒrtōżYdgżÓįҦŠƒS»’wrĢńÆĀ)VÜĒŲSżÖĪéūæ‡‚Ēš$†X¬.ēk‰m„Ō„w‚(€[‚¤|­øP*9š‹ł‘>,_ĢsY¤‹sØÜŹ×R0ŠS s ·(œ¼k#Ęååły¶ ŅnįšŹźĪś9ģŃ”°GBI‡Æw$ęÕū4_S÷ĖĆķŌ“6Õ!hāŗž2źåQźF’Ö‹ ¾ÆØß"Ęīü~×ū­°†(uxe ×÷(”āŒėĶK3*Ē(õ%Š4§Ł“ķrvēÉp]Å®§jāŽźŻ(Įe1µ½Ä.(ą4Ė4<{™ß‡ĀŹ­…“y ý”H漑’¦ŒUeNTN-ń:GūLجœy‰­¬0Bd—ź[mÜB±™üeVŻķ˜³©ö“|?TV‹<’¹µ”ń<žyŁ•\žŠ±Ü—i\Wn_ŗ~?kŽ#-¶g†Ił™ž«Ū‹kumčTIĀ’*׃3rżÆ[ž:9õęҦ(ęEjVIĖj9Gxźk²ń·Y~õćĈ¬z“^%UĢ €My'ŖR8mՎÜŻŸķ«ü8¤:5ü—%å…U÷ >µ1®ü{žKź÷d*ˆœŻ_ĖSfśõüŸ f¹’M÷TsĶän$n|±‹5õŌ¬©ś›!E&~ž,xh¾§ec,3ÆŲś¼ŸÉkb„ÅØĪ××÷©eUą+ö_ŠB±ÓoŽĻp’ģIöŸ.«utńƧC ‡dõ\Į$,Übõ$ģŪ/§Ć÷kėüXqœŹĶĪį®īÉų®d V”ć ŗJ(č+>j¼]żƒŽĀ¢Ä…‹īĪO&~ß¶ļÄ~ĒŲ^pzkÓ¬Ö5śÜ”ydAŖŅ4?¢æÄS”%Y¤~Q·Ąœł‰$¶²TĮtBÜH±±EˆĘŠ¢„šŠ.!xĒšæŪ’v2d„.X³Č÷Goȱ•“` ĆNH(ķ’=—¼×, «õ‹ä–W?»e™cG’ˆvjxüyĒæ3­š8^YĒ)Š!#Ō Ķöań¢,ؼ›—Ąæir;a’‹*†åĀܕ!ŗW Sztn?Ųåƒ ³² !²1zŸRNʦ„×”b6^,½›²X/Ą°[!ÜČĻ4Ņ) ō*Ÿ]×v’+[€„į0ċ¹•cHTie +ķÄc‘dš?¬Ż-ĶŚFhAÆ§Šä-ʟꪒ­‚ķ5mÕ&õ¼æܲÄVŻ„ŗ˜¤lŻ$hŠ‚ī»ü<ā’WMröõķ%7(”Ų‡‚Åī¬'Ų»rżœ4]WĻś¼<ŪWŌĢ3:Ļs|ńAW ¢;øåįé§?õqKOĖė™#id•Ąoµ"ÄŠBOzĻr#v¹$|Y4õ—N±Ž@B­“ƒR¤7(zŠV¼¼0ŸĖjēSÕc™ƒŚĮe$7V†²ÄŅA·CHćdc—uQęp߇Jf'ŚÖäæüLłįļ<¢z„–Kˆ×⩨FH©’)qšĀacij'ŅŠƒŌ‘Ü[ų,š-Åͤ†”Ž(Åj>HSķöF ózQ^­A]Ł­|Y¬rßÄ®‚ĪņĀā). „ɇ•Ń– Ņ”·ś8ķPOüՒø‹šZz Q+ν@®ūSs÷öĒķ›6ł’ŠõAĖĶ›50¾Ifõ08švb_¦§—ģżÆņŠHD‘Ę„@e¦ßiA5ų›§/ņTõ¹dc\Žu¹xĆ«ŹMG2ÜwčĢvärV³š£3į=½¤vņ5ё§»xż7øjāß*ED`*ʜSöŸ—ĘųęŗH¢$¢—`L1 …UŪ“SӉā’gū?Ž~Ōj”–Ē’I4× ƽķį %tķKö­ķÖæ Ž·ķńvnN…,ķ$X­#EœĘ‹ ¢Į½9xo]žÓ·ģŖÆī—¹žŽŚ,É ūÉ6„w;ž¬ŪW¦Dļfż#sĒ# š£¬OꮄŒ¦±‰–ÜńųKŽ’Ę?ŽMkjmƒÜŹĖii~˜ˆnģŠ933“Ō“ń*ņåĮ>6Eųе7fÖŽ RüW7“‰F%Ÿ5iTóY”lßjDåšiŗsŽŁ%åæ+cpßX“Qćˆ v¤Ć¬ņ'6ćū©yńD{źKo5Ÿ ×i"–KŲ)åtpģZžŖ(@)ūŁ`Š6oN(¾Å5 Ę­"„Ē5Ū4ub*æ’:Š«öUU›ģš^Žb–¶•eoP„Dä­) ! ”s° µ8qōų®¾–ĪI!žįŅÖĶ~$ø~k,ę•Ę3:±dųxsń»S‘–“sÜIs4ž’!·hRNJøœŚ…†žŖdø¹‘÷õ$P°)äNąÜ2Ž©’Z, ·vh²XéĖqr×72ŻźS'‚£9²³Šæ²Ÿé/žĖįĄ÷1Ž\F»¶ÜĖšµ kš¤æW·Śõgwõ°u–%ÆÅ1KW¢ņ@LBķFX‚N[°õ$dżŽī¬KTžĀŃ^ŽY–(䒏HĄƒ•GÄóĆ'•œĀBUæ™8ü8—é9mm¢H,ÖĀŻ€X¦æ" ŌųvKI;³Ē2/…°Į?HK–wK;> ś÷m”Üü.ŹO'jż‰Y­gžNOū¼ &©¢Įž\kÓĖ_R+zÅnÄæZOžKJ.ųÆŚ“żÕ…³łV™Å¤ –Ń€vzQ^`v sū×Zžß¦Ü[ģ²*bŗv‹,£Ó½˜Cl&Ó­‚…$ŠÖwcĄÉū\¦õ›Ó’€Éś1žķIäą,Q[ņŽæŹß CūŽ>ł’²Z5h€”ƒ‘” '­kNkя/M}KźH͊\ÜĒüh¶ļı§ZnG*ģƇż5ćū®x½­“Ź#°—¼š„#"†»3½XĖWķ}®\æ½Įėõ}:=„{›‹“Ęwų˼d™'}¹zq(¬\ݾ…>/…šŸĢś¦­o ]Į¬ŸH…oŖ\æ Żx˜+ž‘ µ~ÄÓ~?qČōžr¹’ŻažÉZ²©’瓬oB^<”­’ąO4jŃjš¬—" ā*E!(HU)!¶N<×ķ/äć…^¤Œōsr9ÅŖ č@†ß³šā¶÷vöüU–NQæ÷,ŖšńpJņ³"ńų±³]ڤķ¢BU’e ŹżĀz.<]ŻÉ)˜[Fœ‘]8ųU…Ć£y‡S“‘¶ŸPr qp~(„‡$-łsp…9‚ce챘x±hėuqŁ?·é¶[~\X»“¦_G§ķåK¦QO“;iø7ūöy#ÓtmOŚ5XīŁ9XŅ›™dvéį᢫Š‘ $VR¼S­>×5’]²+ØĄ÷ Ļń¾©xɱ$ČŹ’ 曚Æ1ғ՗Hšą§§=å¬YuB]›Ń¹QQŌ• …÷žSÕ%Öō‰[„ŠˆÖŚN;ćÖń1ßāżģŠ­Ćģ¶ ņ|ńĮå9åżŻ¼vv×FJŅž› å=¾ÉxłbM¤Lś…Øųf]*«Šz‚a±łš9gO’µ;ł'ÖŽŅD“eįf”5w‘važCcüß ÖwŖ»9~#†1C]«źŒSZõŹĪN%Ča³«_öl”’[$Äybޤ Fiīņ™ĆMQ·qū©µB”Ź×'—޲ąĖIV(gÆBĀP)Ņ®®~ļS „ŗ *¦ø|””®õž|GJ¶Y½c@ N t]’—yyŽX¦P¤|Wphr y ‘FNŻGA‹Ÿ<ŌĶų¼s’ŃõMr·ĖĢ@"‡”͉“+@ »Ļ¾ųŁcżŪ’vNõP+ŪŪŚ™ ŌÖF’i%,aäƙÆ‚A­Į’ųU^7-h8њ3!'„p†U.zŪ`ƒķŹķöWā÷\xŚČŽIė\?$Z<’U•N Ie…X«Ū'Äßfī^w/mé/ØL‘ U“‘`[Š)ZÓŌp„‡<ø±Ļįš_ ¦š;H¤dZüTyŸrf?ĶĄy{,//ŲEU^XY=™šŗ»³Ń£ńcÅw©Df^€ż×&‡įżä·«>1ÓĻ7ÕāÄ)µ+§ŖN¬Ā„ōåET‡ŁžDJ6śi •ö*KNōq‰˜‘ŖZ§öd›ąż×©o×!8§õŅŽW—į<ī¤ ČīćūÉÜNŽŽ?·“|e~^»Fī’ŗi“5ŽŖĮ Ė€Ņń…xsD#Œp53Üśq#|r|Ké {]QzÉØÜ,½]Æ3 „~¹ó«‡÷ĀFųWįć…·w0Xݵ¼ėĪhĶ-UĻØģržŗHüÕĪš¤»ųSöpŗćTó%Ō·Ńi­5­=;¹~Wžqqü‰öøüOń²«.4żięfM3N‡P‘y /n÷t”ū!jėĖāefųŹžvĆ.½!HbÖįšD؟ō}¬rz|MUMĆāIīĻOł~,_źk%Zęź÷Pw½11nTźh+c’%SķIĖįĘ[ŁGjĒŅ·µ±‘EZGęē‹xµU’ŒÜ oŲų±gwāLÓ4‡dXå`–ÜyAķšņ>³~ŹĒÅ°™™ąI¦mŃZ?UČż”éF>?ņ.?Ūy$ĄWzĪ™oVXīfŖ@¬. ~ŅĒ1¾ŪÉ4’Ąśx‰Õõ×t‚;AlĪ+ŗ,²0čI‰Æ7Ż7ū4āø–” ŻŖ+ź×2§ -…—0FÄ[ ’śDż”i¢µų~Ģ‘&Csb®"ƒÕ,ā‰m¦ŖŪs4©i=i˜§’:ü?köšEšj·~£ŁĆo¦Ū„Ō—™&»…śä,ŒĻӌ§©ū_ ¶Ž'+j²ė7źO;Ū”ˆž„yeŲ»ĒöWö’o4śC“Ź·<Æå5åkhV+d ü\ÜżÆ„s’vJŸĢešcŒAu:ŁÅQž…dœ95E›•هŁęšśæ·b€Įnΐż^Ž1UøŸ„AG욐P+S‹ņžż¾—‡ŁFĘś9Óż· õS:(ĻøąŒM\.üÓż÷šŪ³Æ.C †T «F¼‘yEɁ@ īäԁóIńsƒąžõpĀĀŅ¢ŽEk‚CŽLjdĄ ”īÄ’Żž“žūŸ,P5Å¼ŅŻ«žāZżoŖ( Į]UƒzqrÆ/‹ŅIWœŹæ¼äCę2āī—PŸPĄ¾£;J‡įfę¬ūKńųo÷y]KL‹Otżŗ”ĪIŗ”—ƒ"’Ķ'ó|oé³žĖÆĮćˆČ­ėĘ“ˆT­^\€>”TFŪŌ‰VjZĀ”É!r+Ņ [mæ½»X±c£Yøcžöį  „^Ü$ĪŹ,‘I$ŪvX¢’_]"Ź Ęærµ­x "`FåxC*žŖßĻ—čI=¤JדĀČÜ&ˆĒ¦ĒŌ¾7¼ !Uäē™Åō@¤— @O¦’)N¬ nßfWłyā‹*7÷¬½øZ±ßł®9łśxŽ04±n6wPÖ»qH÷é’M.&÷PÅZ ōÅ «¬lińųĒƃ¢³oÆZ 'š]BYv ć8aÜošŠmž¢qų³ŸhÓŚOä{K(Ļd}V==%»Hdėā¶ķ‡/y¾gŅ ~»i“ æīX;ʧżl~”¾Œ%, ”ØŲ1[[·~Å£’‚Ąŗ¾iŖMpķpŃ mķŽę(›ąwŠó„e¾ų‚C¾4įü˜¶„§=åœ $µ½ÅµĮjųm䕣()ö‚š’'–Ó“v‹O[ ¦Y\ĶpŖ• „•“Æ^>¢ą½RŅK}>;ž_ š¤Å€žöā"Ā•äń^“³˜' ßņāZ…ĀXX{"š†4EŪÆĀŖ wųr'<ƒ3qw`Bė·~ĪąqŒ0ū?iŪūŽ?ńģź‘ĀĢKNč*95RÜG¹f)Åy?ĆūßHÓÄaŽį‹Čģ ‹eJpvēHž5AĆąćšC뤉*0[Į(‰&}Fņ½5^%øĒs_N”f^\}5ēūųÕ.įlcėWO,q»l\ŻKqqQū4ć²| š¤N®².–pŅ“wx„UœŖĘ¤ŽCŒcįŽæī¤å$ĢžŸ÷ß¾Ō-D®—’‰BĖe:ų #%„5?ņŽaN{ĶGV¢­ō:UšĪ+YRK³žI”JŻwžāf_µÆ/čmoĖZ:m…æÖuY››éÖĄÜ^I%)Īķēpž–ßīłU—öš5󳚳 w.—nēkXO«sČļĘyˆ4`ĆQ¬‘~ÄČæ½ĀČm¼æ”Dnd<%¹'Œ“Hnneažė¢–w"æbäæńń&—SÕļO­§éĀŅ/“·”Č‹A±1A 7’‹‘•æ¼›ŗŃī%£¼i®¢$<–Č¢ŽŻ¶ūm %Oē–~ńžUĒHÖŠDicЇؐ¢Å鞞ˆœO”²jrō6ÖHÓ«žĢVŠŒßńc¬ŸäG‰]ͬ¬?X¹ÓM•±ŁdŌ.bµM¼CU½Eż¤ųęž_G EĪ”7ÅõÕH‡Ś:| °±*n®LKĖÄ+“r~ŌˆŻYRRd•ā—‰ė󅌁½R*ŚDĆüØŚåČFŹP·UōģÄ2É@%KTdGłEE”|ʘÜ'üOlõĖ•+æUV£46ʱAA±išÜ/?~”©ū>¦m#L±ä/ⵑIõ¤©¬ ¤?ńkČæļď ­&¹P£NµeyØ#½ŌĀ™];q·Pļ/ŲćĘž×÷f.Ś8ž³ŖŹ÷®-ĢæżŖGD—ķĻ՟—Łż¼4¶²w·Hą“ŃßҚEHm«ZrD'÷‘©ńśšüÕōŗE‚ØÜ—xÜG$UV;šaĒÆķECź/Śū_𙙣ÓģΟnūĀĪ@4f©Č”'Œ²4ŸŲha@É 2¹y¹ź%OĀ—#ÖaQ*BĘÓūEg¶’»ĮÅōg՚Ź*!6öń+¼ŹŅuōP[ś’Ķ*~Ģ*Ė2|K-æŲĆDŸWŽBo$µĄ­†…×Ń’yp`^Oé’»N(¬­·£ĻtūFŁP ńivT­>#·ĆÄ}§ā¼V?AŃ&Ž>X,Ķh¦ōįŒür?Ą•Ś€’4›€ĖĖķ³v³ņČæšlQ³ cˆäo\ĄŖ•J ?Ogjż¾_mŻ×"Śf“qØO b9.¢Pg˜•ĄMAŒžażßóJ‘ņŹŌmķ­ę0[\#\D£ō†£8!¦Žœ|zI’E/÷_ūõ°RśzM©3XÅ(żåķŚu/>ńĄ­š®ß9[ö¹«Æ>ltł®õ.­ŅĀ€L tõ„e ŗ‘čĝłČ«+ēHÓa£XÅ«[§ŲČQ„`ßĢ94`æe¬Ņ7ūīå8²ˆŽĆQvdy¢Š#žś·õ"r6£sźš¦ļĆąžX±YāXcõn®^åUvŽ4$•=z47’—CüµÅšāw™ž©$_$–…‹qś•ÆśŒYæāģ|V×…Ė‹RÓ>܇šŠSā Ķ¢ū'ŸüöćšćMŪ2N—6š‚īŹp¶¢Ė ā_ų¶ßüø_ķb–Ö¶”,’8ŽC@āīcj×ć½9ü•’ÖÅ­lŒp¤ެOŖ¬_(Įiæ„37‰iYy`[$g’˜ż©® iøNPŌרā¹$I G¦®Xć4ųÅ>®öŪö?×ų°ŅĪŽĪ9Ṑ9h¤YB†NSP@*­Ę­^|¹3qČ(ņą·ó7čX¢õtX¬®!y ’ä9QOŗųÄmć̚+…ćčiaŠWP¶Zæc‡°F²ł†ę7”·“IWøéqÓ“m/S–šG Ē­=„ µ¹‰~šņŻ«øč¢4ŠG’%åÉmõŗBš[¹)½"•«ÉĖż^'ŲiäÉȬŃĢ<ųŠ)źV¶§Glė·8Ś1Ī“‘YZ:Ø“tĀIJ&ö* *$oļżäi’2šlIXėßÓŪé¶c·Ž1xj–ÜXļ"'æĆXy6Ūķ½p÷E…!_D‰©Ø4*Ø>c Ń8Š܁O–;®j~9©›?’ÓõFj÷żY,Ć0ƽx:ž•ńÄ”ąds^LŸM~dļ¶äžĻük…ŗä­ÄU‹¦ĄMiAJ·^4 ’W÷œp†@~ĢbŒ7 ą6Üī˵|ć"|7!Łc(-!„NćsJÓwjņ?å·üd“ÖQ$ńQ~…#ŲW¦č>×ņ|¬±¶P”yN8«ž ü˜“°Ųäx»Ŗ¢ś¼¹IÅėā^ƒ³‚ņz æ0B+NJxĀ”MvZEżĖśÜrĢJWŠŅ įĒ‚*ŸµD?Óģ«Iö&o÷bÉź`Kė5Ž(ć†/ī׉X’›Ā€|ƒYQxzoūÄgĀ©­õ)¤*dxmŹ•1'(źH--ÖīČßī©­‘&oųGø,Īk%¾›f–p­^įĄF²ORy$.Wįė#«\æóÅöp—RŅ|Ć02Ėu,q2é¶ķ%˽cø—ÓD‡~_øh¹~Ņ7ŚĀ];NH.$– ė.=3#Įq,ŇģLė™f†’W }†Nźęyo}D°±³1ܚt'ÕiĶļ’gŽézĢ©ėi÷0E»“fāNdt ń³[@æė4—üŃLjA£é螭ž•a4ą–7s¼ˆPüLXŪ¬ĪæåĒöpS5­” o5N6’W“h¬­¾#ZĀĄŠßń`•ł’$ųM.¹l†I4‹(åōĄW¾ ĻB6@÷Rż^4cæķĻĻö$ģbĮę{ŽMmÆ ±F!R)æ„#˜vŪž=ÖH×ķz‰‚m|„„ĢMõŠiĀŽsĢdōą"“ē$ózŒcZqwf’!0`¼ŃR>VP}u#޶Qˆ,ŠŌźr‘¬F»ĘŒīßīĪg»‡Vŗ ÓI‚œ–ĶšTŠńIo'Uva’.šŖńžéų|X†Ÿå»Łµ·Öe Ō z’J“o_°ėé+ńų?ߘ2xģlįFŌ.-ģmä$¤0”õdoɘ,Æć" …’^UĄrłŖĀ)Ö-/L{‰MO,ndaüŠĘĮ$ć·ļ8}S—Śo‡÷Lōך5Tō qõ¶,ė%æ„ĄÅ3“‡ŌUī™2żæ«šć‰„½åRh®łKśXQŲ-7ŠŅ6Dķ+ĖÆö£’‹[Gm=·+4Xć˜ÖMMżYDb¤FZ²qķ;I#æ/‰>¬Ÿ¾Ą©:ŻĢ–p O­ uō„ž6 Čģ±ń’+w’|ÄÉõ–_RęoK›ä£NņóÄÜ^åį™PG,p:Irˆh}?PR×OŠŸī‹u’UO.žVNvÖŚ9µµ¶*¬G©’æ6¦&$æ³Ź_‰Š^2ż¼mĀāUŽśõĶB–„š°;ÖAČČGDH–N½‰ž4uĖ•-'W‚įĶÅÅŹ½»4(BŒ„[ŅŻć‰š¼/«7ܓ߯«—ÉéĮ)HųNü&Œ# ±Zzæx„&QjßŗńõoܕjWfņI“ŽŽĶ Ä Ąś¬¼Šv撱ϗŁų•‡CÓ­`Š#d·SĀy¢2–’Iéżä…Ė÷=]¾ećńx]'Õ՘Į"ˬFC\^2ś‘YsXąŽ“i>n_ļĻF6dõ¤ŚfŸ œ™•h ĪA’vf’v¼­^2;׋~óāžė“ņøĆ™čQ+Į›÷ˆæ*}„¦źĢµżąų”_÷o¬Ųė·†8ÖKÉ}%,m!ūjGĀWŸŪ§ūńӊ’ŗ”ÄLĖ% ĄĄ“Ä4Õ_Žt5U<¹‘ü£ė ūoü.)(yÄ…8 zØa²’©“­ūywOzń·Õ½?Uvu’3"Ø“aU?×•ŻæÉĄKqu,DžܰKB3 ś¢3#’’!xÓö[āĮvvb&mä—¼ÅŻD±–š? véžHfl2HhöJņJŠG'¶’ĒēšįlVLn¢rÅU>³R”UŖ× (£uS³’¼pĀŁ€ø¢Øe–q°„Izń…ü?Ż­’…¶C–3~ĖV¤Óģӝ?g–ksǦkPÜĢĖčźQ-Ņ©-»D…Z»|hPÆłj’ääj[u_0Xń4į¦F›t%ļmއžį²Ś#ė:„ra{{8܂ČO%»vŻhA£uSĖåæ*i¾Z’÷T°¶– ēYķĢ 3Ō~”•”āoåÄļ ål²\ń–Ž%،DŽŸpY}OņĒø’ŗW W͚ “ˆ½·½š¼$K_ß×~W—Ż+»Å9µ0zQ)†ĪīnjY !·NFļŃøōߢśVńBß³źau”—d»[XCd÷YĖĘņ;½6OŽ"użß”Å0¢[xn§x¬ī$½¼‡„•©IT5H”/čų$åöŚhÉEø|J]Xõ‘oī$ø¹‘‚›m:B±Ę¼M߯rUoų¦Ęęō¾fFOkä=0ˆÆ¦µ{¶5–ĪĢ4ģĢ7FVį׳Ņ@ÜŸāżŚüX¤:„܎棓 ģįSKygōķœ+nh\śŠ¤|Qz>œkž[eĀ5ĶBW6ęŚ õZÖ'¼u>2Ļ2„ŗ±ńt™ßöŽ_³‰ĖŽ×(÷nu[°Õ‰$“ōŒæRˆH“N ūQ|}¤OŲÅnµ‹(i­ģŁ~ʰ7—@ކ8ć‚·^>”MĖāN ńą{›‹øāŽčŲ-„nIMGĢÓ-»0ÆÅéŚÆ9˜ ü Ė*Güö°6”ŖpāÆ}wØLÕ1ZŲšÓԚ}…2®¹‘ö¾Æ O"|M' )¶Ż=ĆZŪŪĆr6s ³¢ōänoL’ŻNUiT…½÷÷ūļƒN6°Iõˆ…Ō÷'•ṏĶ4žļįJ%M$ż5±Ķ’Žyqč[ŪMqŖ/ī$£Ei,~”vūIź‚쇧īż6‰Wģšō~ Gė©ĘKgiQW÷Ā" ŲŃ«éµÜōžķGonŸŽął<æŖźRĒŹÉ¦i­“lģ¢žā*Õ Ā”c·‡¼qĖč[Ƽ„Š'ÉN“¦Cgföö†8kÄĒjŌęŪō‹·āŅ·ģæOŠ2BŠü›ŽU‰±·DAH­¬Ė-ŗ'V\Ńōپ†ę4åŠĆ-Õļ ·YČ*±„a…Ó„h¼®%Jż§Qrž×ĒżČĖȒHŌ]]GkaŃmā*ˆBŠšŖ.œz¬k*³|OūØń–Öҙӄ ¹£)›į$VŠVńq.ĘVåĆ÷ž’4‰é+©iڤ÷S‡PŖ!˜3TĒķś· ¬PGĘÅEO)E*ÄüEéFy |3~ԊŃĆĆ-¾Å‰ą7ų‹ö;4P©ų$‘>Ē÷1ą§±¼`#“ˆ}d”¢Ė@OgAWQūi «æŽzsæĆŠZy>åēõ®n½Y$’}–«PīCnķńpōŪł—īšDś u?TEŽĒ6„“^lĖ×ū¦įłĘÓ5“H„j“On`˜øxzRĀø‡Ōīč¢UāÕ!96¬{p@“”ņbW–ĖF25¬€ü2]¼›Ÿų”•Õ(Ōū?gŽ “³™R«^=D‘ńēŽ±D¤”oņ¤ē†[HÕ!¢ŠÆT’ŏ°U’%p[n=7‘d™”ņ^BwcP717$łŪż–(¤BĄŌ]÷ 5;’“É?m©ū„ųSĆ©\2ŗ!āW©5 f4ų½'’)łĖ…bš)rvšę;uēCÅåtųXŽŒOĆū)€õWć«—RŚŌķõ’_ņ—$ŗ.™—ś…Üœdś»ĀŒ*Ƌ¤C„>Šō„“į’WżŒ‚ī)ø+‡eD”載h (Ģßk‹UŽÄšĶōuF%k€XÕėG”įJV½y6jQM»’kPMNõ ŚN£żśß}oš‘;UV•‘¶^µmśŌD~×.\~&—Ó{ÅLv±Ń„‘"Œ°@ēpyl5PyUM(Ŗß|+č:z nŽŠ–°ÜHA`dz˜É;DŌŁ›ž_Q¤wV|Alu}„v‘+U‹™n)EZS‚Ēæ=œĒĀ&ōä~ Ƃ-ü³¬^}»ų­ k<ŠŪ—żåjQ„²?2­šń/‡‚š‹O+hĮA¹Ö5[¢t·cń1¢æ%ż¶gy“ gņ'–£‰µ V“Øa=Äp4Ŗ+Qčß_Ié¬å§ĘßkÓWČõī²»išĶ%“ Ń WõŃAۊLLj›üq¼©4æĖ…ӇЗWæTÓ(ĮR{¶gh¶ŲD¤Å ›:’Ž;®ä.śŽ›vķoec}ę9ųŅepÉü\XCcÄžĖz_ń‘„oƒŻ[łÖ{?B÷UӼƦW€·³%īGŲ2(EYX żIdžOO ĖŖ£®«®MOŽkéŅÜ+ «zlUĻŁe ’æ÷Xcž–PĒmĮ¤‰ įa§[;Ļ!ö‚¬LWłŁcū\ķ±+ŲŅŽ$vÓØTO©KĆQŗVŽ&{p+ŗ4’pžUš\Rč #_¬ZÜj.EÖn6čŌ§¢ąõ~Ļ/UæŻ’Ŗžė Ž˜²Īß_’;vjzZl„Ą J]¾tŚŁ~ˆ·'œk“S1;ŌF_›0ś³HŸjo‡ƒƒH“K)ōt„ƹ\^M!kTpIg,9ĘĻ·īȊźę7_Žo±Š©źLØ›Ę #‚‚w>œ@󜮒߷.?f_ļ  Ó4›7ŒÜršįGĄ÷µ ( Ę¤|*ßŗfż–ō~,0h®ęA+8Ҭުe•PĪĢ?–Éy(ų_ąõ8uš| ĖS¤ĆsÕć¹¹øÄPßN­,ĶJ³°”ŖÅŹĶÉ9;’s ½8ōź~Ź’Źć‰5¹fõų«6čü«F>5ļ·ś¹‚$Ņ3"Fw•ų~6ØÆŁū’[ .Ń„ƒ‹†ęƓ(Ž’†ēSžIõwĆ«[xķaHPtāĶSV©BmæÉŪžmÄR8źĻšĘ×$€cfsÄUäI*Źæš¹QZ1dECJ$’Ž{•Ŗæ§üÅöpĢ jwʧl¢2ŽŁuöĻ’Öõ>o|¾™³fß¾%s*Å%Ø{ųnr75³Ī(‰,½Y·”Ŗń§f’‡õūԌ/čĖ—bЁń3±oQńT³1ܱåž_ØüÖuSBv*ĶĒG7ÆBßż_Śż•įńG Ų±Óø1‰”cRI„ 7=1’€’uāēFY™ø×˜² öæŁžŅņż—ųlł~ÜYœcń}āŸš_k—ł\żGG Ūʵ¼oŻ CĄ]ƒS^œą’uüQü8…Õ¾¢ęH-ķÖ+(ĻĮ >ŒL| āīõ'ģś …~<*:N XI%ņ€vōģօB’y •ÉSšŃ`uųW÷xO+Ģ· r!³ŠR~ÆbŸQ½$žŹM5Ā:±]ŪÓäŸäI„Žaņv©q~·PŻÜ›gŒG$6ńAnŽ 24±FCüßWH®SĘße°³Lņ²7ļ4ż8‰7×Č\‚7Wy½K†ˆŸ³K’9d†/-éecŠīyī5E)Š*‚*K*ļĄ}¦ųŲż¦ĀɗLµ¹v“·V„»G*ī«ū5vži‡Äź]żOļdD^ć=j1ŗŪJĄ·¬9 7čźģZU€}—bÜæaR5ƒ>“o$±4ńĆ,ōiż3Ęgįیc›’æe?Ż­öW„„¬’X²Ņdšz·Bģ™%”Ü“ræÆ4g³ČE²’Ę%ų°L¶š½Ō¼tµÄHGŖ +V‹ĀŻć’Z7ś[zßm}_³€ļtū½9āÓ44Üj€ņ5ĢKokÉQĪhą ĢĖOŻŪŹģó}§ēń*’y„i–2żVņśWæu^o уøįø |jžŸ«ĮŹļshšNµs—Gўy ‹jś—(į…؍Uƒ ācøDćö"Ć |­§¼f]{Ykµ­Eš*ÄE+FWXmŹgćt’īĒõ0JhāĘÕn쓿J9Ć-«³žuż£ +*ŖžM2śqÅÆĮ:…’hPOŖÄ”å@4mcµ²øVŗŗ’0³”šN+yÉšEHĢóFeė³\Ķ›g+Ąež¤·šU…Ł}eQ¤…cūæ "•ßhz¦²d]Bą„¬“3Ś“ńĮjŅ.ēÕH÷ø`¼FėuĖłW[ŪYĒr~®¬œ¶öšG"ć˜™›”uąĮxķæĆšóUeāJ¹¹¹u¶’`‘ĒkĪ–ź‹!>¤‘7©%y/?MY½VŽ.?k“qć!°°½ŽE #³ BR²\±nŠŅ8ōŃßżŅ¾”æĢ²sų±oR&¹1XėsP ¹rćƒr~fK™++ʧŹ8Y¹q“ŃĆ4Ó!Ž{w1¢FyļL\bEåĀ ĆĪ/²Æńü^£ą]fÅ/ģmžŹe–ęk‹Ĝ±°zˆģY÷1}XIɛӞGų0Œw:—•–c7 Õä2BŻO؏1pY­ß÷tHć—Õę«õt›ż#°µÕn4™ķŸPH½RӊBb“”J~–v¹nkQĶŅ?Ü/÷QÆļ%Å4č®{y!•łs‚` ©kćPHӕZH¾Š9Å,ÖÓ !ÕćāIxņ©įåĒć¹fHž>8ś²:2!$BB~ šŃ‰ų™ĻūŹßaWįõ2®¤¹ō€—”6żōMiö·³ÓūŌ?Ž/Ł“6™ØhW>¢ŁÜ-Ū§%Ž}ޜVZ‡Ż%Kü¬6²¼W‘Ņ®Ķ(Śæd¼D'‡Ū‹’’±Į’_C‘#)•hLj}^ ŪTׄ±Æz¶"ś¼mp#Š0čG÷’9-FÆUGĀO„ʸ)YÉPT‰ŲvaßģMGڟī¹>,¶aHø‡‘ž ńžµŖ¬†9ąy«–µBOصę܉!HßāfQįĶ]g ®ua ōm8‡3+Ģ{ŠP7YSżEåćX™źÄī>:ŃH§QŹ”R’ßQü8&;(˜ļö¾¢Ļ^1oö›ķüXe ?OؤZUĒN½T“ū)‘ˆ`ēł‡f Uc‰8„vå“3u­wɤĘ8›™%*hj¦‚ƒżeZX±‰ˆčÆÄ+ʧcæŅßšXĒ…Łł*¾Õڔۄ=Iėū 5Nv¶2KPQ™D˹ųKTÓŪ‡ĀĆłW ęä_«ŸļZ‘æū*ŪæNźx°Ć¢”Æ$ŁØhM@ż ń#ā„Xז!-“†‰#Įxƒ! €7<źßīµéüŲ*–4U €č)ŲŠSŪ1ʓž[uĶFĻ’×õ9ė›qļ—˜ن6iDHXī@4Q@M<+…e'šB÷ v”‚Gøˆ’?‹—÷Bā€( 6ķņ’?Ų{Ś) §ķToōc¢€Ś€ŅFōł×ѓOcāEG½2½NĒŽąųƒµ2C&~,V§‰£€v­g„Ķ8”ÓC|ŌT× ų¶ß©ÆOö\WāĄ&I93NÄØõc½8ŠŠuų~?õx³q“’ČŹBĮéĆWnMH®Ż>Ļł2"}¬E .Õ+żąä¬"ćj7ýŻ‘/ģM(ś0’ƒö©öÜņ=Č©.W·&ēü³ćeЁ’ś„zźŹ+ÕøŠ/?ų³įõņ)¬Ėmrķ¹i =PT:»Æv )Ä7ڧ’&n_ ]¶š^B‚7 Z™{šnW˜?Ž#zÕoƒ÷xaåKc b ˜q FźA©ūQ„8~ß,7–t{Uk—†$’Ÿ üBń  nbĶTń䮿ʸI,Ö2Č W—M†ŚP„Æģ豟ęH’»_Łfl &”ƘŁōhÕ <³Ej]‡ģÄēėWCžģē Hߏ˜ēMŗ†ŠĖ­źÖŗDž‹i[YæhŻåŗøAžķōŅFū2GĒąĄśv£§)|¹åć{éŌ>Æ| EjˆI0S"÷ß%težn_Ė· ¾lքQ ¶ˆāųO.6‘JY_j¼lŅ7ŚI?”Lqy[ź÷6ś‚u‰d$øŗ2?^įĀĻ4"§— –ü›ćŸŚĀO0éņŽAq¬;nķ};]”<XlĮ!ZGnwsųķ–oSūĘĮ„žŸq%~¹>Ļ1‰ų¤²Øā†•ų——&ųyóųĒ#ł†`؍™k %²IŃk·>"I"RŸe=%‰ækö“‡oi5Ź\_ógÜHL·"]‚ŠśÕ¾1$‘²y€®ä·“Š.ļ Š(ZXųʱ‚‘śÓžéØū.doŻ·Łżæ·Šé:<ö×77éX£ŪéZKH™¢…TÆ0Opģ©VDƒ÷æ„ÅĀÜŲLÖ<ÕšÕO2ļ’c©@üU©ÉRTų7Į7Ś\»ø”“ÓµŪØš4}>Bˆ dš v•T“|^­ĘŪz¼ž,ÖPjZ4± y&”löš\!W ORÉO‡•*Ä_÷ō/Ē -m(–vf¶“„[€Œś¤ÄzB1ÓÓ±'Ūų_ģbG—ʝ§ŁYI7­5µ²Bn‚ślĖ*ŠņŠ4.’e½Oćø‹ū¼• hé$ff ĢØ”ź >ĀvNńTŸį|žRÓnd3^OyxYŒ‹\ŗ[ĖąU‚¹UÆy’Ź‘0Æoåo.¢Ž,ŗtČyFÅHņVŖ”T+Jj9RfćūXųr ¬~`ź­ĪK{xģį%¹ź7µeĊDlOŚ[tK™Ółp² O4y‚įf‡HŌuHŗGyØĶś:ÕČŽ©É½W_JN,æn92Ncó>™kzƹ”yz ) œqr¢ŽŠü¶Q’?Փüœu¾ŖØUlüģ——P%«›9YĻRC?ĢŽ•ņ|8:;Mi"Œ››[‰ Ēż Pw¤ü˜“+ū|ć™Wü淂ģu+ėQŹėOõäz—{+ˆXŃ~ „“Q ĢfOåulŁkČŠó0Nƒ›Ś\#[IĘ rōęYw_?›ü¬2`ž™f@j ż:ń5Oö\æ›ü¬¶²$hWmˆ4x ŌSü™0-ʆ² ¶%Ė0E]źv§.ŸĶVõ?oįåńcāŃ!VÜ”PK’A$Tž)Ołēń~Ö9ķ,­;ÕøR‹Pƒm”lUUE~Ķ~×ģóʮȀCŃUQ@ģXü&žrāßk÷oö$Ó­~¾·¦KÖé€õ)ŌØ+š»|,Qyæ?IŪāĮėČŹAz•!‚ø‚8рėø-ńʘ„)ī|s}įn¼¤ŚEÓÓĒź‚h µTųją-.¤»@ą–"’F5ė"“÷ņ‡õšōØåZoćß/æ|ÕŪ|iĢkO|ol­ĖlE?ŽjŸ’Šõ=6̧čĶ\¾æ,±‰Ķr¤R«]{÷Ū–Ė·06č?šGü¬Z™»ę‡lŻń9¤ōӐRĢv ؼAåū äH¼”¶‡öāż—õ¤3Śˆ$ŠūPk»“ =„µrqP²±'`§÷I#GĮ>Ź3`;Uąć Œé€užcŹ`[ł§ZNGö8Wł°#;™Ģ1‰o/yk‰Ä…Ļ÷¶÷ Iš«żgŅ䟮žļ†ZčSŻGÖmŃbŠeøŠ> $žŖĖ-"1ƒ'.L.qÆķEšį„͌7vsYHĘ/ÖKBb ©EÆßź$r|?oū$:õķīŸ„³,VękÖ7njź#ŽåÖ©o…¦ēτпü 66Zv¤¶7S¬Z}õ·«-ŻÄž’›“äsźś±L“’tųŸåäžMŃnn®®ž_©ÅšĘS‰’1%QĆ4 Ķ?ś™/·Ņm­ßԁLNŪ±f.ĒżgåĶæŁ;"ń^+ītī*Žśö ŃBćbŌ©ž“r£6ō2po‡ķ}†Āć£ėźĮSĢsÉd¹³µ˜°×÷iOšÆņĒńc‡˜š!Ē\F“e ]’bU'Ēį“–Gäé&ŗkɵ9ę¹'’½„µœ#i"™Šžœ„ŃIĒöÕ8ąłü·qk"ßiö°Żźäz[½‘ę–8kR‰<¬Ó¢rųų$¾ŸŪoKŸĆ€O‘/®`–}{TøÖodŻtųg“JӅNą­Ø3KžT—~_Čø„æ“J.‰e£hņHyčXĖ4Œkš“,Oo+¶ų¢ézŻŌl—7_\E`BŖ˜ć‡łf’ļ•ŚWhp<Ś}źÜjN6nP˜ŽŃ@U_÷dnĖžN-æ›ä ·²Ōķ‰fIÄņZR†”‘=„™öż/Ś’tC’Ż+‰<ØĀsŹ ćbżŹšøˆāܛޤh‹DP v¦:žs £ķ€īlR6!•O©?)±,8Ō}®,œžĖIƖP±z†ä*ې(@ÜńĆuÓēžģēŠ-ØØ,j@ S}ź@'_Ųųæ™ßTTTqQŲfß(į?™+$0Ś„n— 侈öoßó_ųĒ‚4r%Žāģ5EĢŖ(Š#Ūż’6?«64Ó66‡1öŹ#~˜Ńįš‡Äē’Ńõ8隇.¹¾ytĶ\ٳfŹ”ń®½¹(ėŠ1ŪV#~ŪńšßgłP_K#ØFWf‘h~1üÕ¾žŅņū\¾5žüB¤ōå9.ģjj¼B [Ū·śßīÜZ(ÖM… jJ‘MˆŚ‚•’6ż‘>ŁDv½_PŠ%ōB¬ŪHW° ģiø’cńa:"ÜĖ鄪ÜL+_Qæx+ד©ä“ū?kįoŚĆX4;p½„†,GŚ#ƍÓü’pz[ĒŖŖ Ä-ÓLd¶)#«ņ)ļ6"¦§ āog»9jÓx”@U@„>.5$“Ėģń_³ū¾IŌEź0)U»aN[ ų6ż¤ų~Ļ÷-ū¾B—OGāgų‚ˆĘŹh~]Ūe?łG«yŅ }A“}Ę]gTˆ~ś Z 5Ł'˜H]»#²ćšątŃ<嬀ŚÕųŅmś‹+éžS0(ó+żj?åąßZyW@µ·0%’H¬C;ĢLŅ1SÉk#–z)ū*żœŚ†±¢č‘‹w+•å …ŗ#‚h8D“ūG§ū/å¹4ĶsXRŪčVs|°ü7rWvęźÖ§xž8›żż’w€õķāĘ-“½1ī-č}3J%R0b äø–Uõ÷r7ŲĀČtnę^)cpff¤Ęvvćž2IśĢŹŁņOņ?o Äi·iOt×n¾Æč.5¶@µ­Z…Ÿ‡~¼ŪķI˵€h¶śĄVžē‰ō•¹Ä*ÄE8&ngćnH’Įš2įߣ®>²I–XŌ“„ˆ#öÕG9UGĆūŲęOęl ØµĶ¬ś}–l’ŻÜĖč9ørŚŻ"yÜGY?cHG£sćū浇ŗvœ–P°ęežZ‰Ų́J qÆģFæ ’®Īģ*†”ģ:l˜É!÷;)Q±§†4[C^L 5)ń÷šé·fūXń`(ų¾ÖŻkćć–|IʧłŒÄŖ·‘½[U’Yž„QŖ6j}© ņ«"WöxH˜Ņ+»Õ"Ī9'ˆ_]’»4żæTüžD±§_Ū‹¬“‰£ZĻp}B)HBń_~N§›’•Ę5o÷Ö*…ń$õ$’Iłœ³C•M¼2ĘQĶōći\Ō§Ļ1Ź9GŪ¦UQÜ ŖŖT"(¢…=€Ģk•\ŖefŹ4ĘÓš‡?’Ņõ8łW/6^lٳfĶ›šŪŸ"(Üŗ«T‚)Jw§üGł—3Å"ĄĀ †VūD~Ń„įy²Ę(œ³ B 1¤Ē‰ šöjҧEū-öW‹8•UU  *‚€c+ õ ×ęe’īS·óšĮv6¶P-£ƽ·$ŸcRĒē‹ŠÓ(ŌoµZąg揕āč ō„>uyqåūłbQæxkU-¹Ū•((ĖČ«ńq“ÓoŽ`Ø¬ąŒ«šŠQŠ•ä’.ߏ1zcV5Z…T’HRjNŽ9`o›ož7€åˈ今õīĖ ½rˆ­røųā/adņZŽ3)§)8ŽgiVź@ÆC€5o,錤1ĆreĒ*ΰ<™š†ęØžļūæņpJi6Ŗ 1’@:©rØIīc„GžÅ 0§QcOä@}˜śePxę Ó1ķLŌĶĒ|­ś²ˆŪ1vQŪčCÉßÓNRSÕn"­Ēģņ4ųøö®8ījMrˆ9]²€ķ—ķ”A;e{fŹ9æĢf5®6ž9T„seS(ūet9»år²·ķ”q½Ķ~Œ¾9’Óõ8Ķ—¾^lٳfĶ›6lٲ²ó¢7÷Ź8Wy|ĶČG(HBē^;6į˜ÕJæČųy2·(ųć"3I?ցŖŒdF ^[4ā’|Æ/÷āŹ˜g “qWŽęµ©ėōSeˊåÓ+*ƒ®oÄf§ć˜Ö›vŹ„O·|Äٲ²ˆžÜŌ9@mS—QZ”^”Ź c1Ź”ŲfŹ9L”ÓĒ*™¾yDefŹńŹć˜ųeRŸ,¬ŌŹé¶Vb6ĶMń§n¹YT”ĶŽ˜Ó•Ó1ņˆĘķą ’Ōõ8Øļ—\¼¬Ćē–lŁ»ę9…sfĶ›6lٲ€zoć‰-µ°§PQ‹„ ;K¬I'–(‘Ŗ(TPŠ:(<;eęy·Źß1ĶLŖf¦aķ˜»6W¶Vµ4ł·¦U=³3eWę7 ĖżY[ę5ŽĒn™ˆ&Ÿ†jczåĄ“½3¬”ąs}Źi”röʝļķš™DPPåe}¶ß¾VQłåeSz÷Źo»*ƒ„r\¬’Õõ>U½yQ@ū>ųģĒ/0͘ę&ƒ* æ†^lÕ®lٳfŹķ–22÷¦V`? ¼Ū­¾ģ¾ŪåuĒ56;Wæ|Ż3Ć( Äoür»长\¼Ŗo•PM;Œ³L”@iķ”zę=2r+¾l£×õęß+ß+(°Øv]2…)·Ń•Ūn¾łæ\¢2ŽQŹĶ”kŪ(|Ē+l¢)”q¹Yøūg’Öõ04ĶŽøģنnūfĶ±ĶŠm›õfļü2ņ²ņ{o—”2ĪWLٲófĢ2»ęĖĶ]óewĶMóņØ~ŒŌĶ”vöCåLÄļOĒ*ƒ1m×ß1ėķ•¶W¶nŽłTØĢGŻ•˜ī1æēL”S½ö9³‡ß¶4e2½³SnłTʦje÷ćHĶM²©š†˜Üiü²¶Ź>ū×5ß?’×õ%~ńŽł«÷e×Ē0öĶņļß+¾^cÓ2šŠżłc6l­žYy«•æ_ŗfĶ›õfŪ6c¾c˜¢– Fć¦m²ófŹ͚™€Ź ĶJę#lŖ ŌÆńŹŽ”9³PeST¹¹fSUؐp[™&“*G+O‡āū\±CS;eõłåƹ^Ē(Æ|¢6¦Uѕ–js¶l­ń‡n¹}±§/®6¢•Ģq“Ķ••#|iĶĖü럒Šõ é˜W|wėŹ5§ėĢ?½’®m»frĻ\Ūo˜f9{åęŹŪ1ü2ņk¶oó9y‡|£\­Ŗ2ö§¶^ł_ƽ26­+_†¾8ģŁ²³mC›jfŹ{×ß7ėĢ:ćM6Ėķ¾nł_ęsož}3S(ÓčĘÆ‡Ł¦ß,Ł[efŹß0÷ÆÓŽ½éŪ1öśi”k\ݶĢ3dœiæLŪm”}’·,õŹ=6ŹŪ+64’·˜ć¦4fūó’Łfavicon.ico000066400000000000000000000025761357643561300356410ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000013421357643561300355030ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-origin

The Picture of Dorian Gray
Fulltext search
libwebsockets.org-logo.svg000066400000000000000000001403321357643561300406160ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-origin lws-fts.css000066400000000000000000000731511357643561300356260ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-originspan.title { font-size: 24pt; text-align: center; } img.eyeglass { display: inline-block; background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyMjQuMDUyMjIgMjU2LjQ4MjE1IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KCTxkZWZzPgoJCTxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjkwOS4xMSIgeDI9Ijk5Ni42OSIgeTE9Ii03MS4wMzUiIHkyPSItMzEuNjEzIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC05MTYuMDYgMTA1LjU4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSIjNGQ0ZDRkIiBvZmZzZXQ9IjAiLz4KCQkJPHN0b3Agc3RvcC1jb2xvcj0iIzgwODA4MCIgc3RvcC1vcGFjaXR5PSIuMDgyNjQ1IiBvZmZzZXQ9IjEiLz4KCQk8L2xpbmVhckdyYWRpZW50PgoJCTxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjEwMjAuMyIgeDI9IjEwMTcuNiIgeTE9Ii0zNy44NjMiIHkyPSItMzUuMzgzIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC05MTYuMDYgMTA1LjU4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSIjOTk5IiBvZmZzZXQ9IjAiLz4KCQkJPHN0b3Agc3RvcC1jb2xvcj0iIzk5OSIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KCQk8L2xpbmVhckdyYWRpZW50PgoJCTxmaWx0ZXIgaWQ9ImMiIHg9Ii0uMDg1NTgiIHk9Ii0uMTIyNiIgd2lkdGg9IjEuMTcxMiIgaGVpZ2h0PSIxLjI0NTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNDc2NDQ5MzkiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJkIiB4PSItLjIxNjYxIiB5PSItLjI5NDQ1IiB3aWR0aD0iMS40MzMyIiBoZWlnaHQ9IjEuNTg4OSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KCQkJPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMS40NjkwMTk0Ii8+CgkJPC9maWx0ZXI+CgkJPGZpbHRlciBpZD0iZSIgeD0iLS4wNTkyMjgiIHk9Ii0uMDc3NjUyIiB3aWR0aD0iMS4xMTg1IiBoZWlnaHQ9IjEuMTU1MyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KCQkJPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMy40NzIzODc4Ii8+CgkJPC9maWx0ZXI+CgkJPGZpbHRlciBpZD0iZiIgeD0iLS4wNzUwNTMiIHk9Ii0uMDY3MDAzIiB3aWR0aD0iMS4xNTAxIiBoZWlnaHQ9IjEuMTM0IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgoJCQk8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyLjMwNjQ1MzgiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJqIiB4PSItLjcwMzc4IiB5PSItLjY5MDc0IiB3aWR0aD0iMi40MDc2IiBoZWlnaHQ9IjIuMzgxNSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KCQkJPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNC4xMTIwODgiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJpIiB4PSItLjA2MSIgeT0iLS4wOTUzNDUiIHdpZHRoPSIxLjEyMiIgaGVpZ2h0PSIxLjE5MDciIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNzU4ODkwNDIiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJoIiB4PSItLjA3OTU4NyIgeT0iLS4xNjc5NyIgd2lkdGg9IjEuMTU5MiIgaGVpZ2h0PSIxLjMzNTkiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNTgwMDg2MTUiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJnIiB4PSItLjAzMjI5NSIgeT0iLS4wMjgwMDkiIHdpZHRoPSIxLjA2NDYiIGhlaWdodD0iMS4wNTYiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEuMjM0MzQ2OCIvPgoJCTwvZmlsdGVyPgoJCTxmaWx0ZXIgaWQ9ImsiIHg9Ii0uMTY2NDgiIHk9Ii0uMzQ5ODEiIHdpZHRoPSIxLjMzMyIgaGVpZ2h0PSIxLjY5OTYiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjMuODg4NzYzNiIvPgoJCTwvZmlsdGVyPgoJCTxmaWx0ZXIgaWQ9Im0iIHg9Ii0uMDM1OTIyIiB5PSItLjA0NzIxMSIgd2lkdGg9IjEuMDcxOCIgaGVpZ2h0PSIxLjA5NDQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjIuMDUzNDk2NiIvPgoJCTwvZmlsdGVyPgoJCTxmaWx0ZXIgaWQ9ImwiIHg9Ii0uMDM1OTIyIiB5PSItLjA0NzIxMSIgd2lkdGg9IjEuMDcxOCIgaGVpZ2h0PSIxLjA5NDQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjIuMTg1OTg3NSIvPgoJCTwvZmlsdGVyPgoJPC9kZWZzPgoJPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTkuMDQ0IDUzLjQ5MSkiPgoJCTxwYXRoIGQ9Im0tOC44MDY4IDI2LjA4MmMtMy4wMzI4LTM1LjM1MyAyOC43MTItNjIuMTY3IDY0LjY1My02NC4wMTcgMjIuOTg5LTIuNTkzMiA2Ni44MTkgOS4wNDY5IDgyLjk1NSA0Ni4yOTMtMS4yODAxLTIxLjkyMy0yNS45NjctNjguMjkxLTEwOC43OC00OS4yOTMtMjUuMzc2IDguMjg5Mi01MS4zMzYgMzUuMzQ3LTQxLjQxMSA2My41NTZ6IiBmaWxsPSIjOTk5Ii8+CgkJPGVsbGlwc2UgY3g9IjYzLjgzMiIgY3k9IjEzLjY5NyIgcng9Ijc1LjgwNyIgcnk9IjU3LjY3OSIgZmlsbD0iI2IzYjNiMyIgZmlsbC1vcGFjaXR5PSIuNDQyMTUiLz4KCQk8cGF0aCBkPSJtNjIuNzU1LTQ3LjQ3MmE3Ny43ODQgNTkuMTgzIDAgMCAwIC03Ny43ODMgNTkuMTgzIDc3Ljc4NCA1OS4xODMgMCAwIDAgNzcuNzgzIDU5LjE4MyA3Ny43ODQgNTkuMTgzIDAgMCAwIDc3Ljc4NCAtNTkuMTgzIDc3Ljc4NCA1OS4xODMgMCAwIDAgLTc3Ljc4NCAtNTkuMTgzem0wLjEyNjEgMi4xMDI3YTc1LjgxNyA1Ny42ODcgMCAwIDEgNzUuODE3IDU3LjY4NiA3NS44MTcgNTcuNjg3IDAgMCAxIC03NS44MTcgNTcuNjg3IDc1LjgxNyA1Ny42ODcgMCAwIDEgLTc1LjgxNyAtNTcuNjg3IDc1LjgxNyA1Ny42ODcgMCAwIDEgNzUuODE3IC01Ny42ODZ6IiBmaWxsPSIjODA4MDgwIi8+CgkJPGVsbGlwc2UgY3g9IjYzLjYxMSIgY3k9IjE3LjE4OCIgcng9IjczLjAyNSIgcnk9IjU1LjU2MiIgZmlsbD0iI2IzYjNiMyIgZmlsbC1vcGFjaXR5PSIuNTUzNzIiIGZpbHRlcj0idXJsKCNsKSIvPgoJCTxwYXRoIGQ9Im0xMzkuNDMgMTguMjI0Yy0xLjEyMjUgMzYuMDg2LTMzLjMxMyA2My4xMjUtNzUuMzMxIDYzLjEyNS00Mi4wMTcgMC03Ny45NS0zNC43MS03Ny45NS02Ni42NzkgNy4yOTY1IDIxLjUzOCAyNS4xMTEgNTIuMTA4IDc4LjY5OCA1Mi4zMDkgNTMuOTYyLTIuNjA1NCA2OS45MDUtMzQuODg3IDc0LjU4Mi00OC43NTR6IiBmaWxsPSIjODA4MDgwIi8+CgkJPGVsbGlwc2UgY3g9IjYwLjQ5NiIgY3k9IjEyLjEyOSIgcng9IjY4LjU5OSIgcnk9IjUyLjE5NSIgZmlsbD0iI2VjZWNlYyIgZmlsbC1vcGFjaXR5PSIuNTQ1NDUiIGZpbHRlcj0idXJsKCNtKSIvPgoJCTxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KC45MTQ2MSAtLjUzNjUyIC41MzY1MiAuOTE0NjEgLTg5NC4zNCA0NDguMjkpIiBjeD0iOTY5Ljk1IiBjeT0iNjMuNzI0IiByeD0iMjguNDQzIiByeT0iMTIuNDM1IiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii44MDE2NSIgZmlsdGVyPSJ1cmwoI2spIi8+CgkJPHBhdGggZD0ibTg2LjU0NSA3NS4wODYgMy42NjU0IDUuMjU0OCAyLjAwNDggMS42ODM3IDIuMDkxMSAwLjc2Mzg1IDAuOTQ2NiAwLjQ0MTc0IDkuMjMyMyAxMy43MzQgMS4xMDUyIDUuNDI2NSA2Mi43MTIgODkuOTA3YzguMTA1IDkuNjI1MiAyOC45OTUgMTIuMDIgMzIuMzM3LTMuMDkwNiAzLjE1MzItMTMuMTg1LTkuNDY5Mi0yMS42NTItMTYuNDY3LTMwLjc0OC0xOS41NDgtMjIuMzU4LTQ3LjU3LTU1LjE3OS01OC4yODgtNjcuNDQ1LTMuNTc0My0yLjIxMjQtMy4wOTY5LTAuOTY3NTUtNS45NDg3LTMuMjQ2Ni0yLjg1MTktMi4yNzkxLTcuNDI5Mi04LjAxODgtMTAuMjAyLTExLjEyOC0wLjgzNjMtMC45Mzc4Ny0wLjE5ODQtNC4xMDIyLTAuOTg4NS00Ljk4NTktMi41OTg4LTIuOTA2Ny00LjkwMy01LjQ3MTEtNi42MTkzLTcuMzY4NS02Ljc2NjctNC4xOTItMTguMTk3IDIuNDc2MS0xNS41ODIgMTAuODAyeiIgZmlsbD0iIzY2NiIvPgoJCTxnIGZpbGw9IiM0ZDRkNGQiPgoJCQk8cGF0aCBkPSJtMTEzLjQ5IDk0LjI2MmMzLjUwNzEgOS4xNTc4IDYuMDYwNiAxOC44NjUgMTAuODM0IDI3LjQzMiA2Ljg4NTggMTAuMTY2IDEyLjYyNCAyMS4yMzMgMjEuNDE2IDI5Ljk0NyA1LjUyNDggNS44Mzk1IDEwLjIwOSAxMi42NjggMTcuMzU4IDE2LjY2NCA1Ljk5MyA2LjI1NCAxNC45MjUgNS41MDU2IDIxLjk5MSA5LjQ3MTIgNy4xMjEzIDIuNDAzOCAxNi4yMTUgMTIuMjIgMTAuNDQgMTkuMTk3LTguMjk5MiA1Ljk1NjItMTkuOTU3IDIuNDY3Mi0yNi44NDMtNC4xNDItNi41OTU5LTguMjQ1Mi0xMi4xODUtMTcuNDA5LTE4LjM5LTI2LjAxLTE0Ljg4OC0yMS41MDUtMjkuNzEtNDMuMDc2LTQ0LjU5OC02NC41OCAxLjMyMjQtMy44ODcgMy40MjM2LTYuNjg0NiA3Ljc5MTYtNy45Nzg3eiIgZmlsdGVyPSJ1cmwoI2cpIi8+CgkJCTxwYXRoIGQ9Im0xMDguNDMgNzIuMTg2Yy0yLjA0NzctMC40OTI2NS00LjEyNDItMS4yMTE1LTYuMjQyNS0wLjY0OTA3LTIuODIxNiAwLjI1ODIzLTUuMjYxOSAxLjkyMjMtNy4xMjgyIDMuOTY2Ni0xLjA5NDggMC45MjI5MyAxLjU3NS0wLjM3OTc2IDIuMTg4NC0wLjQxOCAyLjA4ODItMC41MTk4NSA0LjI5MDItMC40OTI3MiA2LjQyNDctMC4zMTQ5MyAzLjAyNTUgMC4yMTIyMSA1LjMzMDUgMi4zMTc3IDcuNTYzNiA0LjEzNTIgMC42MTI0IDAuNDkyMzYgMS42OTg4IDEuMjIzMiAwLjU1MiAwLjE5MjkyLTAuODQ4NS0xLjE4MjYtMi41OTM1LTEuOTIwNC0yLjg3NjctMy4zODM0LTAuMTYwNC0xLjE3NjQtMC4zMjA5LTIuMzUyOC0wLjQ4MTMtMy41MjkyeiIgZmlsdGVyPSJ1cmwoI2gpIi8+CgkJCTxwYXRoIGQ9Im0xMTguMzUgODYuMjE3Yy0yLjQzODggMC4wMjQtNC45NzU3LTAuMjc1MjYtNy4yNTQ3IDAuODEzNzYtMi43MDYzIDAuODYzNzEtNC44OTc1IDIuMDc2MS04LjI3MzYgMS45OTI2LTEuMDk4NS0wLjE4MjktMi4zNTk0LTEuMTY2Mi0zLjgzMjUtMi4zNTM0LTEuNTU4My0xLjI1NTgtMy4yMjE1LTMuMjE1My0zLjY5NS0zLjMyMjIgMi45MTQ1IDQuNDE3NSA2LjEwOTYgOS4wMjIyIDkuMDI0MiAxMy40NCAwLjM1NSAxLjU2MTUgMC43MTQ4IDQuOTY2OCAxLjMwMjEgNS42NjI4IDIuNTQzOS0zLjI1NDcgNS4wMTgzLTYuNzQ4IDguNzIzMy04Ljc3OTggMi42ODQ4LTEuNDkyNiA1LjUwOTgtMy40MDAyIDguNzQ1MS0yLjk1NDQgMC45MDg5IDAuMTMyOTUgMy4zOTA3IDAuMjE4NDEgMS4xNTQ5LTAuNTU4MS0yLjEwODctMS4wNjU2LTQuMzA2NS0yLjEzNTUtNS44OTM4LTMuOTQxeiIgZmlsdGVyPSJ1cmwoI2kpIi8+CgkJPC9nPgoJCTxlbGxpcHNlIGN4PSIxODguMTMiIGN5PSIxODUuMTciIHJ4PSI3LjAxMTUiIHJ5PSI3LjE0MzciIGZpbGw9IiM5OTkiIGZpbHRlcj0idXJsKCNqKSIvPgoJCTxnIGZpbGw9IiNiM2IzYjMiPgoJCQk8cGF0aCBkPSJtMTI1LjIgOTMuNTUxYy0xLjkxLTAuMjc5MjItMy43NTc3LTAuMDIwNi01LjU1NjMgMC42NjE0Ni0wLjg2MTcgMS4zMzE2LTAuODQ5MyAyLjUzNzkgMC40NDI5IDMuNTYwOSAxOS45NjEgMjUuNDQ4IDM5LjkyMSA1MC44OTYgNTkuODgyIDc2LjM0MyAyLjgwNzIgMC42MTM3IDUuNjEwMiAxLjQ4ODIgOC40MiAxLjkzOSAxLjU3MDQtMC4zNDM4MyAzLjQwMi0wLjQ4OTAzIDQuMzg1MS0xLjY3NzkgMC4zMDg3LTIuMTczOS0xLjkzMzctMy4zNDY5LTIuOTkxNS00Ljk3NDEtMjEuNTI4LTI1LjI4NC00My4wNTUtNTAuNTY4LTY0LjU4Mi03NS44NTN6IiBmaWx0ZXI9InVybCgjZikiLz4KCQkJPHBhdGggZD0ibTEwMy45MS0zMi4zOTFjNy4yMzI3IDEzLjM0OCAxMS44MiAzMC4wNjkgNi4wMTA0IDQ0LjY1LTguMjg4MiAxNi4yNTktMjQuNDQ0IDI3LjQ4NC00Mi42MjEgMjkuNTc1LTIwLjU0MSA1LjMzMTktNDMuNjc4IDUuNjI3OS02Mi4zMzUtNS41NDYzLTE3LjgyOC01LjEyNTQgNC40MzQ4IDE0LjgzNiAxMC4xNTkgMTcuNjQ0IDMxLjMyOSAxOS4yMjUgNzUuMDUyIDE2LjY0NyAxMDQuMDUtNS45NDA5IDEyLjE3Ni0xMC44MjggMjIuOTY0LTI2LjMyNSAxOC43OTQtNDMuNDQ4LTMuOTA5NS0yMi4yNTYtMjMuNzAzLTM4LjEwNC00NC4xMzQtNDUuMDYgMy4xMTc0IDMuMDA1NCA2Ljg3NzEgNS4yMTggMTAuMDc2IDguMTI3MXoiIGZpbGwtb3BhY2l0eT0iLjQwOTA5IiBmaWx0ZXI9InVybCgjZSkiLz4KCQkJPHBhdGggZD0ibTEwMi4wNyA3NC45OTJoNC40OTAybDIuOTkzNCAxLjY4MzggOC43OTMxIDkuOTE1Ny00LjExNTktMC45MzU0NC0yLjYxOTIgMS4zMDk2eiIgZmlsbC1vcGFjaXR5PSIuNDA5MDkiIGZpbHRlcj0idXJsKCNkKSIvPgoJCTwvZz4KCQk8Zz4KCQkJPHBhdGggZD0ibTk1Ljc3IDYyLjk5MiA2LjQxNjEgOC40MDA1IDIuOTEwNS0wLjA2NjEgMi4wNTA1IDAuMzMwNzMgMS45ODQ0IDAuNjYxNDYtMC4zOTY5LTAuNzkzNzUtNi40MTYyLTcuMjA5OS0xLjM4OS0wLjcyNzYxLTIuMjQ5LTAuNTI5MTYtMS4wNTgzLTAuMDY2MnoiIGZpbGw9InVybCgjYikiIGZpbHRlcj0idXJsKCNjKSIvPgoJCQk8cGF0aCBkPSJtLTE0LjM2MyAxNC4xNzYgMC43OTM3NSAxMC4wNTQgNS4wMjcxIDExLjY0MiA1LjAyNzEgMTAuMDU0IDkuNzg5NiAxMC44NDggMTIuNDM1IDEwLjg0OCAxNC44MTcgNy42NzI5IDEyLjk2NSAzLjcwNDIgMTEuOTA2IDIuMTE2N2g4LjczMTJsMjAuNjM4LTIuNjQ1OCAxLjA1ODMtMS4wNTgzLTIuMzgxMy0zLjQzOTYgMC41MjkyLTUuODIwOCAzLjQzOTYtMi4zODEyIDMuNzA0Mi0yLjExNjcgNy45Mzc1LTQuNDk3OS0xNS4wODEgNC43NjI1LTE3LjcyNyAzLjE3NS0yMC42MzgtMS4wNTgzLTE2LjY2OS0zLjcwNDItMTYuOTMzLTguMjAyMS0xMS4xMTItOC40NjY3LTExLjkwNi0xNi40MDR6IiBmaWxsPSJ1cmwoI2EpIi8+CgkJCTx0ZXh0IHRyYW5zZm9ybT0icm90YXRlKDUyLjY0MikiIHg9IjIyMS4yMzgzNCIgeT0iLTM0LjUzODExMyIgZG9taW5hbnQtYmFzZWxpbmU9ImF1dG8iIGZpbGw9IiM2NjY2NjYiIGZvbnQtZmFtaWx5PSInT3BlbiBTYW5zJyIgZm9udC1zaXplPSI4LjkxMDNweCIgbGV0dGVyLXNwYWNpbmc9IjBweCIgc3Ryb2tlLXdpZHRoPSIuMDQ2NDA4IiB0ZXh0LWFsaWduPSJjZW50ZXIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHdvcmQtc3BhY2luZz0iMHB4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtYWx0ZXJuYXRlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LXZhcmlhbnQtcG9zaXRpb246bm9ybWFsO2xpbmUtaGVpZ2h0OjEuMjU7c2hhcGUtcGFkZGluZzowO3RleHQtZGVjb3JhdGlvbi1jb2xvcjojMDAwMDAwO3RleHQtZGVjb3JhdGlvbi1saW5lOm5vbmU7dGV4dC1kZWNvcmF0aW9uLXN0eWxlOnNvbGlkO3RleHQtaW5kZW50OjA7dGV4dC1vcmllbnRhdGlvbjptaXhlZDt0ZXh0LXRyYW5zZm9ybTpub25lO3doaXRlLXNwYWNlOm5vcm1hbCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHRzcGFuIHg9IjIyMS4yMzgzNCIgeT0iLTM0LjUzODExMyIgZmlsbD0iIzY2NjY2NiIgc3Ryb2tlLXdpZHRoPSIuMDQ2NDA4Ij5naW90b2hhc2hpPC90c3Bhbj48L3RleHQ+CgkJPC9nPgoJPC9nPgo8L3N2Zz4="); width:0px; height:0px; padding:2em 1.6em; vertical-align:middle; margin-right: 0.1em; background-repeat: no-repeat; color: rgba(0, 0, 0, 0); } img.spinner { display: inline-block; background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiCiAgaWQ9InN2Zy1zcGlubmVyIiAKICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgeD0iMHB4IiAKICB5PSIwcHgiIAogIHZpZXdCb3g9Ii0xMTIgLTEyOCA0NDggNTEyIgogIHhtbDpzcGFjZT0icHJlc2VydmUiPgoKCTxkZWZzPgoJCTxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjkwOS4xMSIgeDI9Ijk5Ni42OSIgeTE9Ii03MS4wMzUiIHkyPSItMzEuNjEzIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC05MTYuMDYgMTA1LjU4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSIjNGQ0ZDRkIiBvZmZzZXQ9IjAiLz4KCQkJPHN0b3Agc3RvcC1jb2xvcj0iIzgwODA4MCIgc3RvcC1vcGFjaXR5PSIuMDgyNjQ1IiBvZmZzZXQ9IjEiLz4KCQk8L2xpbmVhckdyYWRpZW50PgoJCTxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjEwMjAuMyIgeDI9IjEwMTcuNiIgeTE9Ii0zNy44NjMiIHkyPSItMzUuMzgzIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC05MTYuMDYgMTA1LjU4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSIjOTk5IiBvZmZzZXQ9IjAiLz4KCQkJPHN0b3Agc3RvcC1jb2xvcj0iIzk5OSIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KCQk8L2xpbmVhckdyYWRpZW50PgoJCTxmaWx0ZXIgaWQ9ImMiIHg9Ii0uMDg1NTgiIHk9Ii0uMTIyNiIgd2lkdGg9IjEuMTcxMiIgaGVpZ2h0PSIxLjI0NTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNDc2NDQ5MzkiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJkIiB4PSItLjIxNjYxIiB5PSItLjI5NDQ1IiB3aWR0aD0iMS40MzMyIiBoZWlnaHQ9IjEuNTg4OSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KCQkJPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMS40NjkwMTk0Ii8+CgkJPC9maWx0ZXI+CgkJPGZpbHRlciBpZD0iZSIgeD0iLS4wNTkyMjgiIHk9Ii0uMDc3NjUyIiB3aWR0aD0iMS4xMTg1IiBoZWlnaHQ9IjEuMTU1MyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KCQkJPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMy40NzIzODc4Ii8+CgkJPC9maWx0ZXI+CgkJPGZpbHRlciBpZD0iZiIgeD0iLS4wNzUwNTMiIHk9Ii0uMDY3MDAzIiB3aWR0aD0iMS4xNTAxIiBoZWlnaHQ9IjEuMTM0IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgoJCQk8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyLjMwNjQ1MzgiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJqIiB4PSItLjcwMzc4IiB5PSItLjY5MDc0IiB3aWR0aD0iMi40MDc2IiBoZWlnaHQ9IjIuMzgxNSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KCQkJPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNC4xMTIwODgiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJpIiB4PSItLjA2MSIgeT0iLS4wOTUzNDUiIHdpZHRoPSIxLjEyMiIgaGVpZ2h0PSIxLjE5MDciIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNzU4ODkwNDIiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJoIiB4PSItLjA3OTU4NyIgeT0iLS4xNjc5NyIgd2lkdGg9IjEuMTU5MiIgaGVpZ2h0PSIxLjMzNTkiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNTgwMDg2MTUiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJnIiB4PSItLjAzMjI5NSIgeT0iLS4wMjgwMDkiIHdpZHRoPSIxLjA2NDYiIGhlaWdodD0iMS4wNTYiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEuMjM0MzQ2OCIvPgoJCTwvZmlsdGVyPgoJCTxmaWx0ZXIgaWQ9ImsiIHg9Ii0uMTY2NDgiIHk9Ii0uMzQ5ODEiIHdpZHRoPSIxLjMzMyIgaGVpZ2h0PSIxLjY5OTYiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjMuODg4NzYzNiIvPgoJCTwvZmlsdGVyPgoJCTxmaWx0ZXIgaWQ9Im0iIHg9Ii0uMDM1OTIyIiB5PSItLjA0NzIxMSIgd2lkdGg9IjEuMDcxOCIgaGVpZ2h0PSIxLjA5NDQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjIuMDUzNDk2NiIvPgoJCTwvZmlsdGVyPgoJCTxmaWx0ZXIgaWQ9ImwiIHg9Ii0uMDM1OTIyIiB5PSItLjA0NzIxMSIgd2lkdGg9IjEuMDcxOCIgaGVpZ2h0PSIxLjA5NDQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjIuMTg1OTg3NSIvPgoJCTwvZmlsdGVyPgoJPC9kZWZzPgoJPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTkuMDQ0IDUzLjQ5MSkiPgoJCTxwYXRoIGQ9Im0tOC44MDY4IDI2LjA4MmMtMy4wMzI4LTM1LjM1MyAyOC43MTItNjIuMTY3IDY0LjY1My02NC4wMTcgMjIuOTg5LTIuNTkzMiA2Ni44MTkgOS4wNDY5IDgyLjk1NSA0Ni4yOTMtMS4yODAxLTIxLjkyMy0yNS45NjctNjguMjkxLTEwOC43OC00OS4yOTMtMjUuMzc2IDguMjg5Mi01MS4zMzYgMzUuMzQ3LTQxLjQxMSA2My41NTZ6IiBmaWxsPSIjOTk5Ii8+CgkJPGVsbGlwc2UgY3g9IjYzLjgzMiIgY3k9IjEzLjY5NyIgcng9Ijc1LjgwNyIgcnk9IjU3LjY3OSIgZmlsbD0iI2IzYjNiMyIgZmlsbC1vcGFjaXR5PSIuNDQyMTUiLz4KCQk8cGF0aCBkPSJtNjIuNzU1LTQ3LjQ3MmE3Ny43ODQgNTkuMTgzIDAgMCAwIC03Ny43ODMgNTkuMTgzIDc3Ljc4NCA1OS4xODMgMCAwIDAgNzcuNzgzIDU5LjE4MyA3Ny43ODQgNTkuMTgzIDAgMCAwIDc3Ljc4NCAtNTkuMTgzIDc3Ljc4NCA1OS4xODMgMCAwIDAgLTc3Ljc4NCAtNTkuMTgzem0wLjEyNjEgMi4xMDI3YTc1LjgxNyA1Ny42ODcgMCAwIDEgNzUuODE3IDU3LjY4NiA3NS44MTcgNTcuNjg3IDAgMCAxIC03NS44MTcgNTcuNjg3IDc1LjgxNyA1Ny42ODcgMCAwIDEgLTc1LjgxNyAtNTcuNjg3IDc1LjgxNyA1Ny42ODcgMCAwIDEgNzUuODE3IC01Ny42ODZ6IiBmaWxsPSIjODA4MDgwIi8+CgkJPGVsbGlwc2UgY3g9IjYzLjYxMSIgY3k9IjE3LjE4OCIgcng9IjczLjAyNSIgcnk9IjU1LjU2MiIgZmlsbD0iI2IzYjNiMyIgZmlsbC1vcGFjaXR5PSIuNTUzNzIiIGZpbHRlcj0idXJsKCNsKSIvPgoJCTxwYXRoIGQ9Im0xMzkuNDMgMTguMjI0Yy0xLjEyMjUgMzYuMDg2LTMzLjMxMyA2My4xMjUtNzUuMzMxIDYzLjEyNS00Mi4wMTcgMC03Ny45NS0zNC43MS03Ny45NS02Ni42NzkgNy4yOTY1IDIxLjUzOCAyNS4xMTEgNTIuMTA4IDc4LjY5OCA1Mi4zMDkgNTMuOTYyLTIuNjA1NCA2OS45MDUtMzQuODg3IDc0LjU4Mi00OC43NTR6IiBmaWxsPSIjODA4MDgwIi8+CgkJPGVsbGlwc2UgY3g9IjYwLjQ5NiIgY3k9IjEyLjEyOSIgcng9IjY4LjU5OSIgcnk9IjUyLjE5NSIgZmlsbD0iI2VjZWNlYyIgZmlsbC1vcGFjaXR5PSIuNTQ1NDUiIGZpbHRlcj0idXJsKCNtKSIvPgoJCTxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KC45MTQ2MSAtLjUzNjUyIC41MzY1MiAuOTE0NjEgLTg5NC4zNCA0NDguMjkpIiBjeD0iOTY5Ljk1IiBjeT0iNjMuNzI0IiByeD0iMjguNDQzIiByeT0iMTIuNDM1IiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii44MDE2NSIgZmlsdGVyPSJ1cmwoI2spIi8+CgkJPHBhdGggZD0ibTg2LjU0NSA3NS4wODYgMy42NjU0IDUuMjU0OCAyLjAwNDggMS42ODM3IDIuMDkxMSAwLjc2Mzg1IDAuOTQ2NiAwLjQ0MTc0IDkuMjMyMyAxMy43MzQgMS4xMDUyIDUuNDI2NSA2Mi43MTIgODkuOTA3YzguMTA1IDkuNjI1MiAyOC45OTUgMTIuMDIgMzIuMzM3LTMuMDkwNiAzLjE1MzItMTMuMTg1LTkuNDY5Mi0yMS42NTItMTYuNDY3LTMwLjc0OC0xOS41NDgtMjIuMzU4LTQ3LjU3LTU1LjE3OS01OC4yODgtNjcuNDQ1LTMuNTc0My0yLjIxMjQtMy4wOTY5LTAuOTY3NTUtNS45NDg3LTMuMjQ2Ni0yLjg1MTktMi4yNzkxLTcuNDI5Mi04LjAxODgtMTAuMjAyLTExLjEyOC0wLjgzNjMtMC45Mzc4Ny0wLjE5ODQtNC4xMDIyLTAuOTg4NS00Ljk4NTktMi41OTg4LTIuOTA2Ny00LjkwMy01LjQ3MTEtNi42MTkzLTcuMzY4NS02Ljc2NjctNC4xOTItMTguMTk3IDIuNDc2MS0xNS41ODIgMTAuODAyeiIgZmlsbD0iIzY2NiIvPgoJCTxnIGZpbGw9IiM0ZDRkNGQiPgoJCQk8cGF0aCBkPSJtMTEzLjQ5IDk0LjI2MmMzLjUwNzEgOS4xNTc4IDYuMDYwNiAxOC44NjUgMTAuODM0IDI3LjQzMiA2Ljg4NTggMTAuMTY2IDEyLjYyNCAyMS4yMzMgMjEuNDE2IDI5Ljk0NyA1LjUyNDggNS44Mzk1IDEwLjIwOSAxMi42NjggMTcuMzU4IDE2LjY2NCA1Ljk5MyA2LjI1NCAxNC45MjUgNS41MDU2IDIxLjk5MSA5LjQ3MTIgNy4xMjEzIDIuNDAzOCAxNi4yMTUgMTIuMjIgMTAuNDQgMTkuMTk3LTguMjk5MiA1Ljk1NjItMTkuOTU3IDIuNDY3Mi0yNi44NDMtNC4xNDItNi41OTU5LTguMjQ1Mi0xMi4xODUtMTcuNDA5LTE4LjM5LTI2LjAxLTE0Ljg4OC0yMS41MDUtMjkuNzEtNDMuMDc2LTQ0LjU5OC02NC41OCAxLjMyMjQtMy44ODcgMy40MjM2LTYuNjg0NiA3Ljc5MTYtNy45Nzg3eiIgZmlsdGVyPSJ1cmwoI2cpIi8+CgkJCTxwYXRoIGQ9Im0xMDguNDMgNzIuMTg2Yy0yLjA0NzctMC40OTI2NS00LjEyNDItMS4yMTE1LTYuMjQyNS0wLjY0OTA3LTIuODIxNiAwLjI1ODIzLTUuMjYxOSAxLjkyMjMtNy4xMjgyIDMuOTY2Ni0xLjA5NDggMC45MjI5MyAxLjU3NS0wLjM3OTc2IDIuMTg4NC0wLjQxOCAyLjA4ODItMC41MTk4NSA0LjI5MDItMC40OTI3MiA2LjQyNDctMC4zMTQ5MyAzLjAyNTUgMC4yMTIyMSA1LjMzMDUgMi4zMTc3IDcuNTYzNiA0LjEzNTIgMC42MTI0IDAuNDkyMzYgMS42OTg4IDEuMjIzMiAwLjU1MiAwLjE5MjkyLTAuODQ4NS0xLjE4MjYtMi41OTM1LTEuOTIwNC0yLjg3NjctMy4zODM0LTAuMTYwNC0xLjE3NjQtMC4zMjA5LTIuMzUyOC0wLjQ4MTMtMy41MjkyeiIgZmlsdGVyPSJ1cmwoI2gpIi8+CgkJCTxwYXRoIGQ9Im0xMTguMzUgODYuMjE3Yy0yLjQzODggMC4wMjQtNC45NzU3LTAuMjc1MjYtNy4yNTQ3IDAuODEzNzYtMi43MDYzIDAuODYzNzEtNC44OTc1IDIuMDc2MS04LjI3MzYgMS45OTI2LTEuMDk4NS0wLjE4MjktMi4zNTk0LTEuMTY2Mi0zLjgzMjUtMi4zNTM0LTEuNTU4My0xLjI1NTgtMy4yMjE1LTMuMjE1My0zLjY5NS0zLjMyMjIgMi45MTQ1IDQuNDE3NSA2LjEwOTYgOS4wMjIyIDkuMDI0MiAxMy40NCAwLjM1NSAxLjU2MTUgMC43MTQ4IDQuOTY2OCAxLjMwMjEgNS42NjI4IDIuNTQzOS0zLjI1NDcgNS4wMTgzLTYuNzQ4IDguNzIzMy04Ljc3OTggMi42ODQ4LTEuNDkyNiA1LjUwOTgtMy40MDAyIDguNzQ1MS0yLjk1NDQgMC45MDg5IDAuMTMyOTUgMy4zOTA3IDAuMjE4NDEgMS4xNTQ5LTAuNTU4MS0yLjEwODctMS4wNjU2LTQuMzA2NS0yLjEzNTUtNS44OTM4LTMuOTQxeiIgZmlsdGVyPSJ1cmwoI2kpIi8+CgkJPC9nPgoJCTxlbGxpcHNlIGN4PSIxODguMTMiIGN5PSIxODUuMTciIHJ4PSI3LjAxMTUiIHJ5PSI3LjE0MzciIGZpbGw9IiM5OTkiIGZpbHRlcj0idXJsKCNqKSIvPgoJCTxnIGZpbGw9IiNiM2IzYjMiPgoJCQk8cGF0aCBkPSJtMTI1LjIgOTMuNTUxYy0xLjkxLTAuMjc5MjItMy43NTc3LTAuMDIwNi01LjU1NjMgMC42NjE0Ni0wLjg2MTcgMS4zMzE2LTAuODQ5MyAyLjUzNzkgMC40NDI5IDMuNTYwOSAxOS45NjEgMjUuNDQ4IDM5LjkyMSA1MC44OTYgNTkuODgyIDc2LjM0MyAyLjgwNzIgMC42MTM3IDUuNjEwMiAxLjQ4ODIgOC40MiAxLjkzOSAxLjU3MDQtMC4zNDM4MyAzLjQwMi0wLjQ4OTAzIDQuMzg1MS0xLjY3NzkgMC4zMDg3LTIuMTczOS0xLjkzMzctMy4zNDY5LTIuOTkxNS00Ljk3NDEtMjEuNTI4LTI1LjI4NC00My4wNTUtNTAuNTY4LTY0LjU4Mi03NS44NTN6IiBmaWx0ZXI9InVybCgjZikiLz4KCQkJPHBhdGggZD0ibTEwMy45MS0zMi4zOTFjNy4yMzI3IDEzLjM0OCAxMS44MiAzMC4wNjkgNi4wMTA0IDQ0LjY1LTguMjg4MiAxNi4yNTktMjQuNDQ0IDI3LjQ4NC00Mi42MjEgMjkuNTc1LTIwLjU0MSA1LjMzMTktNDMuNjc4IDUuNjI3OS02Mi4zMzUtNS41NDYzLTE3LjgyOC01LjEyNTQgNC40MzQ4IDE0LjgzNiAxMC4xNTkgMTcuNjQ0IDMxLjMyOSAxOS4yMjUgNzUuMDUyIDE2LjY0NyAxMDQuMDUtNS45NDA5IDEyLjE3Ni0xMC44MjggMjIuOTY0LTI2LjMyNSAxOC43OTQtNDMuNDQ4LTMuOTA5NS0yMi4yNTYtMjMuNzAzLTM4LjEwNC00NC4xMzQtNDUuMDYgMy4xMTc0IDMuMDA1NCA2Ljg3NzEgNS4yMTggMTAuMDc2IDguMTI3MXoiIGZpbGwtb3BhY2l0eT0iLjQwOTA5IiBmaWx0ZXI9InVybCgjZSkiLz4KCQkJPHBhdGggZD0ibTEwMi4wNyA3NC45OTJoNC40OTAybDIuOTkzNCAxLjY4MzggOC43OTMxIDkuOTE1Ny00LjExNTktMC45MzU0NC0yLjYxOTIgMS4zMDk2eiIgZmlsbC1vcGFjaXR5PSIuNDA5MDkiIGZpbHRlcj0idXJsKCNkKSIvPgoJCTwvZz4KCQk8Zz4KCQkJPHBhdGggZD0ibTk1Ljc3IDYyLjk5MiA2LjQxNjEgOC40MDA1IDIuOTEwNS0wLjA2NjEgMi4wNTA1IDAuMzMwNzMgMS45ODQ0IDAuNjYxNDYtMC4zOTY5LTAuNzkzNzUtNi40MTYyLTcuMjA5OS0xLjM4OS0wLjcyNzYxLTIuMjQ5LTAuNTI5MTYtMS4wNTgzLTAuMDY2MnoiIGZpbGw9InVybCgjYikiIGZpbHRlcj0idXJsKCNjKSIvPgoJCQk8cGF0aCBkPSJtLTE0LjM2MyAxNC4xNzYgMC43OTM3NSAxMC4wNTQgNS4wMjcxIDExLjY0MiA1LjAyNzEgMTAuMDU0IDkuNzg5NiAxMC44NDggMTIuNDM1IDEwLjg0OCAxNC44MTcgNy42NzI5IDEyLjk2NSAzLjcwNDIgMTEuOTA2IDIuMTE2N2g4LjczMTJsMjAuNjM4LTIuNjQ1OCAxLjA1ODMtMS4wNTgzLTIuMzgxMy0zLjQzOTYgMC41MjkyLTUuODIwOCAzLjQzOTYtMi4zODEyIDMuNzA0Mi0yLjExNjcgNy45Mzc1LTQuNDk3OS0xNS4wODEgNC43NjI1LTE3LjcyNyAzLjE3NS0yMC42MzgtMS4wNTgzLTE2LjY2OS0zLjcwNDItMTYuOTMzLTguMjAyMS0xMS4xMTItOC40NjY3LTExLjkwNi0xNi40MDR6IiBmaWxsPSJ1cmwoI2EpIi8+CgkJCTx0ZXh0IHRyYW5zZm9ybT0icm90YXRlKDUyLjY0MikiIHg9IjIyMS4yMzgzNCIgeT0iLTM0LjUzODExMyIgZG9taW5hbnQtYmFzZWxpbmU9ImF1dG8iIGZpbGw9IiM2NjY2NjYiIGZvbnQtZmFtaWx5PSInT3BlbiBTYW5zJyIgZm9udC1zaXplPSI4LjkxMDNweCIgbGV0dGVyLXNwYWNpbmc9IjBweCIgc3Ryb2tlLXdpZHRoPSIuMDQ2NDA4IiB0ZXh0LWFsaWduPSJjZW50ZXIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHdvcmQtc3BhY2luZz0iMHB4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtYWx0ZXJuYXRlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LXZhcmlhbnQtcG9zaXRpb246bm9ybWFsO2xpbmUtaGVpZ2h0OjEuMjU7c2hhcGUtcGFkZGluZzowO3RleHQtZGVjb3JhdGlvbi1jb2xvcjojMDAwMDAwO3RleHQtZGVjb3JhdGlvbi1saW5lOm5vbmU7dGV4dC1kZWNvcmF0aW9uLXN0eWxlOnNvbGlkO3RleHQtaW5kZW50OjA7dGV4dC1vcmllbnRhdGlvbjptaXhlZDt0ZXh0LXRyYW5zZm9ybTpub25lO3doaXRlLXNwYWNlOm5vcm1hbCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHRzcGFuIHg9IjIyMS4yMzgzNCIgeT0iLTM0LjUzODExMyIgZmlsbD0iIzY2NjY2NiIgc3Ryb2tlLXdpZHRoPSIuMDQ2NDA4Ij5naW90b2hhc2hpPC90c3Bhbj48L3RleHQ+CgkJPC9nPgoJPC9nPgogIAogIDxhbmltYXRlVHJhbnNmb3JtIAogICAgYXR0cmlidXRlVHlwZT0ieG1sIgogICAgYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIgogICAgdHlwZT0icm90YXRlIiAKICAgIGZyb209IjAgMCAwIgogICAgdG89IjM2MCAwIDAiIAogICAgZHVyPSIyMi44cyIKICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIgogIC8+IAo8L3N2Zz4="); width:0px; height:0px; padding:2.25em 2em 2.25em 2em; margin: 0 0.8em; background-repeat: no-repeat; line-height:100%; vertical-align:middle; color: rgba(0, 0, 0, 0); } img.noentry { display: inline-block; background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzMy4wNTQyMDcgMzMuMDQ0NzI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgoJPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTY5LjY1MSAtNjguODExKSI+CgkJPGNpcmNsZSBjeD0iODYuMzk1IiBjeT0iODUuMzQiIHI9IjE1Ljk0OSIgZmlsbD0iI2ZmZiIgb3BhY2l0eT0iLjc0MiIvPgoJCTxwYXRoIGQ9Im04My4zMDYgMTAxLjY4Yy0yLjI5MDItMC40MDg2NC00Ljg2NTItMS40OTg5LTYuNzktMi44NzQ5LTMuNTAwOC0yLjUwMjYtNS45NDE1LTYuNDIyNS02LjY5NzItMTAuNzU2LTAuMjIzMDEtMS4yNzg5LTAuMjIzMDEtNC4xNDUzIDAtNS40MjQyIDAuNDIzNTYtMi40Mjg5IDEuNDc1NC00Ljk1OTIgMi44ODE2LTYuOTMxOSAyLjQ5MTMtMy40OTQ5IDYuNDQ3LTUuOTYyNCAxMC43NjYtNi43MTU1IDEuMjc4OS0wLjIyMzAyIDQuMTQ1NC0wLjIyMzAyIDUuNDI0MiAwIDIuNDM2MiAwLjQyNDg0IDQuOTU3NyAxLjQ3NDggNi45NTA0IDIuODk0MiAzLjQ2ODQgMi40NzA2IDUuOTYxOSA2LjQ1NzQgNi42ODk5IDEwLjY5NiAwLjIzMDA0IDEuMzM5NiAwLjIzMzc4IDQuMTgxOSA4ZS0zIDUuNDgxMi0wLjM4NzA1IDIuMjE5NS0xLjM2ODcgNC43MjA2LTIuNTMxMiA2LjQ0OTItMi41ODEyIDMuODM4Mi02LjUzNyA2LjM5OTctMTEuMTE2IDcuMTk4My0xLjI1MjIgMC4yMTgzNi00LjMxODQgMC4yMDkxNC01LjU4NDYtMC4wMTczem0tMy45Mjc2LTUuODQ5NmMwLTAuNDY0NzEgMC4wNjQ1LTAuNDQxODMtMS4yODk3LTAuNDU3NDctMC41NDgxMi02ZS0zIC0xLjA2MjUtMC4wNTQzLTEuMTQzMS0wLjEwNjQxLTAuMTg3OTktMC4xMjE2LTAuMTkyNTYtMS4xNjA1LTZlLTMgLTEuMzQ3MiAwLjA3NzMtMC4wNzczIDAuNDQ2NjktMC4xNDA2NSAwLjgyMDY5LTAuMTQwNjVoMC42ODAwMXYtMC44MjA3aC0wLjY4OTA5Yy0wLjgyNjc2IDAtMC45ODA2OC0wLjEzOTMtMC45MzAxNi0wLjg0MTM0bDAuMDM2Ni0wLjUwNjk0IDAuOTM3OTUtMC4wMjk0YzEuMzg3NS0wLjA0MzcgMS40ODctMC4wODAyIDEuNDQzNC0wLjUzMTRsLTAuMDM2NC0wLjM3NzAyaC0zLjE2NTZsLTAuMDMxNCAyLjc4NDUtMC4wMzE0IDIuNzg0NWgzLjQwNDN6bTEuNzU4Ni0xLjI5OTRjMC0xLjI2NTMgMC4wMzYyLTEuNjk3OCAwLjEzODkyLTEuNjYzNSAwLjA3NjQgMC4wMjU0IDAuNTYxNTMgMC43OTQ4NiAxLjA3ODEgMS43MDk4IDAuOTEzMzMgMS42MTc1IDAuOTUwMDQgMS42NjM1IDEuMzI4OCAxLjY2MzVoMC4zODk0OWwtMC4wMzE0LTIuNzg0NS0wLjAzMTQtMi43ODQ1aC0wLjcwMzQ2bC0wLjA1ODcgMS41NTQxYy0wLjAzMjMgMC44NTQ3NS0wLjEwODUxIDEuNTU5Ni0wLjE2OTMyIDEuNTY2NC0wLjA2MSA4ZS0zIC0wLjUxMDY5LTAuNjkyNTctMC45OTk1LTEuNTU0MS0wLjg3MzQtMS41Mzk0LTAuODk1NzgtMS41NjY0LTEuMjk2Mi0xLjU2NjRoLTAuNDA3NGwtMC4wMzE0IDIuNzg0NS0wLjAzMTQgMi43ODQ1aDAuODI0OTN6bTUuOTc5NC0wLjY5MzY5IDAuMDU4Ny0yLjM0NDkgMC41ODYyMy0wLjA1ODdjMC41NjAxNi0wLjA1NiAwLjU4NjIxLTAuMDc0MyAwLjU4NjIxLTAuNDEwMzV2LTAuMzUxNzJsLTEuNjYxOC0wLjAzMjVjLTEuNTkzMS0wLjAzMTItMS42NjUtMC4wMjI1LTEuNzM5IDAuMjEwOC0wLjExODMzIDAuMzcyOTkgMC4xNDEwNCAwLjU4Mzc1IDAuNzE4NTkgMC41ODM3NWgwLjUxMzIzdjIuMzI1M2MwIDEuMjc4OSAwLjAzNzcgMi4zNjMgMC4wODM3IDIuNDA5IDAuMDQ2IDAuMDQ2IDAuMjQzODkgMC4wNjgxIDAuNDM5NjcgMC4wNDg5bDAuMzU1OTQtMC4wMzQ4em0zLjA0ODMgMS4xNzI0IDAuMDU4Ny0xLjE3MjQgMC40MjAzNy0wLjAzNTJjMC4yNDM0LTAuMDIwNCAwLjQ3NDAyIDAuMDI5NCAwLjU0Nzc1IDAuMTE4MzQgMC4wNyAwLjA4NDUgMC4zMDQxOCAwLjYyNzg0IDAuNTIwMjcgMS4yMDc2IDAuMzkxNzMgMS4wNTExIDAuMzk0MTkgMS4wNTQzIDAuODI5ODQgMS4wOTA2IDAuNTM2MzIgMC4wNDQ2IDAuNTQwNzEtNmUtMyAwLjEwMTAxLTEuMTUyOS0wLjUyODg5LTEuMzc5OC0wLjUyNDA4LTEuMzE3OS0wLjEzNTQ1LTEuNzUzIDAuNTUwMjUtMC42MTYzNCAwLjYwNTQzLTEuMzg2NiAwLjE0OTExLTIuMDgyOS0wLjMwNDEtMC40NjQwOS0wLjgyOTM1LTAuNjE2NjMtMi4xMjM0LTAuNjE2NjMtMC45NTI5NSAwLTEuMTc2NSAwLjAzMzctMS4yMzQ4IDAuMTg1NDgtMC4xMDA2MyAwLjI2MjI0LTAuMDg4OSA1LjI2ODEgMC4wMTM1IDUuMzY5NiAwLjA0NiAwLjA0NiAwLjI0Mzg4IDAuMDY3OSAwLjQzOTY2IDAuMDQ4OWwwLjM1NTkzLTAuMDM0OHptMC4wNDc1LTIuMjE0MmMtMC4wMzQzLTAuMDg5My0wLjA0NTgtMC4zOTI3MS0wLjAyNTYtMC42NzQxNGwwLjAzNjctMC41MTE2OSAwLjcxOTE0LTAuMDM0NmMwLjU0MDI1LTAuMDI2IDAuNzY2MjkgMC4wMTM1IDAuOTA4NjMgMC4xNTQ4OSAwLjI3ODA1IDAuMjc4MDcgMC4yNDA3MiAwLjgyNzAxLTAuMDcxIDEuMDQ1NC0wLjMzNjk0IDAuMjM2MDEtMS40NzkzIDAuMjUwNjItMS41Njc4IDAuMDJ6bTYuMzc1NiAyLjE4MTEgMC4wMzM1LTEuMjA1NiAwLjg3NTE3LTEuNDM4MmMwLjQ4MTM1LTAuNzkxMDMgMC44NzUxOS0xLjUwNDcgMC44NzUxOS0xLjU4NiAwLTAuMDk5MS0wLjE0NDY5LTAuMTM1ODQtMC40Mzg5NC0wLjExMTQtMC4zOTgxOSAwLjAzMzEtMC40ODQzNyAwLjEwNzE3LTAuOTI4MjcgMC43OTg0Ni0wLjI2OTE1IDAuNDE5MTYtMC41NzI4MiAwLjg2NzYtMC42NzQ4OCAwLjk5NjU4bC0wLjE4NTQ4IDAuMjM0NDYtMC4xODU0OC0wLjIzNDQ2Yy0wLjEwMTk4LTAuMTI4OTItMC40MDU3My0wLjU3NzQyLTAuNjc0ODctMC45OTY1OC0wLjQ0MzkxLTAuNjkxMzMtMC41MzAwOS0wLjc2NTQ0LTAuOTI4MjgtMC43OTg0Ni0wLjMxMzI2LTAuMDI2LTAuNDM4OTQgMC4wMS0wLjQzODk0IDAuMTI2MDMgMCAwLjA4OTMgMC4zOTU3MSAwLjgwMDIgMC44NzkzMyAxLjU3OThsMC44NzkzMiAxLjQxNzV2MS4xNjI5YzAgMC42Mzk2MSAwLjAzNzcgMS4yMDA2IDAuMDgzNyAxLjI0NjYgMC4wNDYgMC4wNDYgMC4yNDM4OCAwLjA2ODEgMC40Mzk2NSAwLjA0ODlsMC4zNTU5Ni0wLjAzNDh6bTMuNjM2Mi02LjczMThjMC4xNDg3NC0wLjE0ODczIDAuMjExMzgtNC45MzE4IDAuMDY5NS01LjMwMTUtMC4wNjQzLTAuMTY3NTktMS40MTctMC4xODU0OC0xNC4xMTUtMC4xODU0OC0xMi42OTggMC0xNC4wNTEgMC4wMTczLTE0LjExNSAwLjE4NTQ4LTAuMTI0MyAwLjMyMzktMC4wNzk1IDQuOTczIDAuMDUwMiA1LjIxNTQgMC4xMTg5MSAwLjIyMjI1IDAuMzk5MTIgMC4yMjY3OSAxNC4wNDYgMC4yMjY3OSAxMC42NzQgMCAxMy45NTctMC4wMzI5IDE0LjA2NS0wLjE0MDY1em0tMTAuNDQtOC40OTYyYzAuNzAwNzctMC41MjMyIDEuMDYyNC0xLjkyOTYgMC44NDUzNy0zLjI4OC0wLjIxNjIxLTEuMzUzMy0wLjg0MTIxLTIuMDI1Ny0xLjg4MzktMi4wMjY1LTEuMDcxLTllLTQgLTEuODAyMyAwLjg4Njc1LTEuOTM5MyAyLjM1MzYtMC4xMzQzIDEuNDM4OSAwLjMxMTM4IDIuNjQ4NyAxLjEzMjkgMy4wNzQ5IDAuNTExMjUgMC4yNjUyNCAxLjQxMTUgMC4yMDk1OSAxLjg0NDktMC4xMTM5em0tMS42NDUxLTAuODMwNjVjLTAuMzExNDktMC4zNDQxOC0wLjQzNjY3LTAuODI2MzctMC40MzY2Ny0xLjY4MTkgMC0wLjk0OTY1IDAuMjA1MzUtMS41Mjg3IDAuNjQ0MTItMS44MTYyIDAuNjY0MjctMC40MzUyNCAxLjMyODIgMC4xODA0OCAxLjQzMjMgMS4zMjgzIDAuMTM5MTEgMS41MzMyLTAuMjM1NDEgMi4zNzUyLTEuMDU2MyAyLjM3NTItMC4yMjk4MyAwLTAuNDc1OS0wLjA4NjYtMC41ODMzOC0wLjIwNTR6bS01LjY2NjUgMC44NDA2NGMwLjAzOTEtMC4xMDE5OCAwLjA3MTItMC44NDA2MiAwLjA3MTItMS42NDE0IDAtMC44MDA3NyAwLjAzOTYtMS40NTU5IDAuMDg3OS0xLjQ1NTcgMC4wNDgzIDllLTUgMC40OTEzOSAwLjcyNTUzIDAuOTg0NSAxLjYxMjEgMC44MjcwOSAxLjQ4NyAwLjkyNDc1IDEuNjE0OCAxLjI2MDQgMS42NDg2IDAuMjAwMzggMC4wMjAyIDAuMzY1NDgtMC4wMTkyIDAuMzY3NTQtMC4wODc5IDJlLTMgLTAuMDY4NSA0ZS0zIC0xLjIzMjYgNGUtMyAtMi41ODY4IDAtMS4zNTQyLTJlLTMgLTIuNTE4Mi00ZS0zIC0yLjU4NjgtMmUtMyAtMC4wNjk1LTAuMTcyMjEtMC4xMDg1Mi0wLjM4NDc4LTAuMDg3OWwtMC4zODEwMiAwLjAzNjctMC4wMzI3IDEuNDk0OGMtMC4wMTczIDAuODIyMTYtMC4wNzM5IDEuNDk0OC0wLjEyMzkyIDEuNDk0OC0wLjA1MDIgMC0wLjQ2NTEyLTAuNjcyNjgtMC45MjIxOS0xLjQ5NDgtMC43NzY1OC0xLjM5Ny0wLjg1NTk3LTEuNDk3NC0xLjIxMi0xLjUzMjktMC4yMjU0Ni0wLjAyMjUtMC40MjExNiAwLjAyNTQtMC40Nzk0MiAwLjExNzE3LTAuMTExNzkgMC4xNzY0NC0wLjEzOTg4IDQuNzg1Ny0wLjAzMDggNS4wNjk4IDAuMDQxNCAwLjEwNzc1IDAuMjA4MTEgMC4xODU0OCAwLjM5NzgxIDAuMTg1NDggMC4xODk3MSAwIDAuMzU2NDktMC4wNzc3IDAuMzk3ODItMC4xODU0OHoiIGZpbGw9IiNlYzIyMjkiIHN0cm9rZS13aWR0aD0iLjExNzI0Ii8+Cgk8L2c+Cjwvc3ZnPgo="); width:0px; height:0px; padding:2.25em 2em 2.25em 2em; margin: 0 0.8em; background-repeat: no-repeat; line-height:100%; vertical-align:middle; font-size: 20pt; color: rgba(0, 0, 0, 0); } div.searchbg { background-repeat: no-repeat; background-image: url("dorian-gray-wikipedia.jpg"); background-position: left top; width: 561px; height: 844px; padding: 10px; padding-top: 20px; text-align:center; } table.searchtable { position:relative; display:inline-table; padding-top: 6px; } div.acomplete { position:absolute; display:block; float:right; text-align:left; background-color: #aaa; font-size: 12pt; max-height: 50vh; right:0px; margin: 0px; padding: 0px 1px; overflow:auto; opacity: 0; z-index: 4; border: 1px solid gray; border-radius: 3px; background-color: white; white-space: nowrap; box-shadow: 0px 5px 15px gray; transition: opacity 0.3s; font-weight:normal } div.acomplete ul { list-style-type: none; padding: 0px 2px; cursor: pointer; } div.acomplete ul li { margin: 2px; padding: 1px; font-size: 14px; left: 0px; } div.acomplete ul li:hover { background-color: lightblue; } div.acomplete ul li:active { background-color: blue; color: white; } div.searchresults { position:absolute; display:block; float:right; text-align:left; font-size: 9pt; width: 100%; max-height: 600px; left:0px; margin: 4px 20px; margin-top: 24px; padding: 0px 20px; overflow: scroll; opacity: 0; z-index: 3; border: 1px solid gray; border-radius: 3px; background-color: rgba(255,255,255,0.7); white-space: nowrap; box-shadow: 0px 5px 15px gray; transition: opacity 0.3s; font-weight:normal; } div.filepath { font-size: 14pt; padding: 12px 0px; } input.viable { color: #000 } input.nonviable { color: #aaa } td.searchboxtitle { text-align:right; font-size: 15pt; } td.r { text-align:right; color: #aaa; width:99%; } lws-fts.js000066400000000000000000000120111357643561300354360ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-origin/* lws-fts.js - JS supporting lws fulltext search * * Copyright (C) 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. */ (function() { var last_ac = ""; function san(s) { s.replace("<", "!"); s.replace("%", "!"); return s; } function lws_fts_choose() { var xhr = new XMLHttpRequest(); var sr = document.getElementById("searchresults"); var ac = document.getElementById("acomplete"); var inp = document.getElementById("lws_fts"); xhr.onopen = function(e) { xhr.setRequestHeader("cache-control", "max-age=0"); }; xhr.onload = function(e) { var jj, n, m, s = "", x, lic = 0, hl, re; var sr = document.getElementById("searchresults"); var ac = document.getElementById("acomplete"); var inp = document.getElementById("lws_fts"); sr.style.width = (parseInt(sr.parentNode.offsetWidth, 10) - 88) + "px"; sr.style.opacity = "1"; inp.blur(); hl = document.getElementById("lws_fts").value; re = new RegExp(hl, "gi"); // console.log(xhr.responseText); jj = JSON.parse(xhr.responseText); if (jj.fp) { lic = jj.fp.length; for (n = 0; n < lic; n++) { var q; s += "
" + jj.fp[n].path + "
"; s += ""; for (m = 0; m < jj.fp[n].hits.length; m++) s += ""; s += "
" + jj.fp[n].hits[m].l + "" + jj.fp[n].hits[m].s + "
"; } } sr.innerHTML = s; }; inp.blur(); ac.style.opacity = "0"; sr.style.innerHTML = ""; xhr.open("GET", "../fts/r/" + document.getElementById("lws_fts").value); xhr.send(); } function lws_fts_ac_select(e) { var t = e.target; while (t) { if (t.getAttribute && t.getAttribute("string")) { document.getElementById("lws_fts").value = t.getAttribute("string"); lws_fts_choose(); } t = t.parentNode; } } function lws_fts_search_input() { var ac = document.getElementById("acomplete"), sb = document.getElementById("lws_fts"); if (last_ac === sb.value) return; last_ac = sb.value; ac.style.width = (parseInt(sb.offsetWidth, 10) - 2) + "px"; ac.style.opacity = "1"; /* detect loss of focus for popup menu */ sb.addEventListener("focusout", function(e) { ac.style.opacity = "0"; }); var xhr = new XMLHttpRequest(); xhr.onopen = function(e) { xhr.setRequestHeader("cache-control", "max-age=0"); }; xhr.onload = function(e) { var jj, n, s = "", x, lic = 0; var inp = document.getElementById("lws_fts"); var ac = document.getElementById("acomplete"); // console.log(xhr.responseText); jj = JSON.parse(xhr.responseText); switch(parseInt(jj.indexed, 10)) { case 0: /* there is no index */ break; case 1: /* yay there is an index */ if (jj.ac) { lic = jj.ac.length; s += ""; if (!lic) { //s = ""; inp.className = "nonviable"; ac.style.opacity = "0"; } else { inp.className = "viable"; ac.style.opacity = "1"; } } break; default: /* an index is being built... */ s = "
" + "
Indexing
" + "
" + "
" + jj.index_done + " / " + jj.index_files + "
" + "
"; setTimeout(lws_fts_search_input, 300); break; } ac.innerHTML = s; for (n = 0; n < lic; n++) if (document.getElementById("mi_ac" + n)) document.getElementById("mi_ac" + n). addEventListener("click", lws_fts_ac_select); if (jj.index_files) { document.getElementById("bar2").style.width = ((150 * jj.index_done) / (jj.index_files + 1)) + "px"; } }; xhr.open("GET", "../fts/a/" + document.getElementById("lws_fts").value); xhr.send(); } document.addEventListener("DOMContentLoaded", function() { var inp = document.getElementById("lws_fts"); inp.addEventListener("input", lws_fts_search_input, false); inp.addEventListener("keydown", function(e) { var inp = document.getElementById("lws_fts"); var sr = document.getElementById("searchresults"); var ac = document.getElementById("acomplete"); if (e.key === "Enter" && inp.className === "viable") { lws_fts_choose(); sr.focus(); ac.style.opacity = "0"; } }, false); }, false); }());strict-csp.svg000066400000000000000000000302361357643561300363260ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-origin the-picture-of-dorian-gray.txt000066400000000000000000016063731357643561300367050ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-fulltext-searchThe Project Gutenberg EBook of The Picture of Dorian Gray, by Oscar Wilde This eBook is for the use of anyone anywhere at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included with this eBook or online at www.gutenberg.net Title: The Picture of Dorian Gray Author: Oscar Wilde Release Date: June 9, 2008 [EBook #174] [This file last updated on July 2, 2011] [This file last updated on July 23, 2014] Language: English *** START OF THIS PROJECT GUTENBERG EBOOK THE PICTURE OF DORIAN GRAY *** Produced by Judith Boss. HTML version by Al Haines. The Picture of Dorian Gray by Oscar Wilde THE PREFACE The artist is the creator of beautiful things. To reveal art and conceal the artist is art's aim. The critic is he who can translate into another manner or a new material his impression of beautiful things. The highest as the lowest form of criticism is a mode of autobiography. Those who find ugly meanings in beautiful things are corrupt without being charming. This is a fault. Those who find beautiful meanings in beautiful things are the cultivated. For these there is hope. They are the elect to whom beautiful things mean only beauty. There is no such thing as a moral or an immoral book. Books are well written, or badly written. That is all. The nineteenth century dislike of realism is the rage of Caliban seeing his own face in a glass. The nineteenth century dislike of romanticism is the rage of Caliban not seeing his own face in a glass. The moral life of man forms part of the subject-matter of the artist, but the morality of art consists in the perfect use of an imperfect medium. No artist desires to prove anything. Even things that are true can be proved. No artist has ethical sympathies. An ethical sympathy in an artist is an unpardonable mannerism of style. No artist is ever morbid. The artist can express everything. Thought and language are to the artist instruments of an art. Vice and virtue are to the artist materials for an art. From the point of view of form, the type of all the arts is the art of the musician. From the point of view of feeling, the actor's craft is the type. All art is at once surface and symbol. Those who go beneath the surface do so at their peril. Those who read the symbol do so at their peril. It is the spectator, and not life, that art really mirrors. Diversity of opinion about a work of art shows that the work is new, complex, and vital. When critics disagree, the artist is in accord with himself. We can forgive a man for making a useful thing as long as he does not admire it. The only excuse for making a useless thing is that one admires it intensely. All art is quite useless. OSCAR WILDE CHAPTER 1 The studio was filled with the rich odour of roses, and when the light summer wind stirred amidst the trees of the garden, there came through the open door the heavy scent of the lilac, or the more delicate perfume of the pink-flowering thorn. From the corner of the divan of Persian saddle-bags on which he was lying, smoking, as was his custom, innumerable cigarettes, Lord Henry Wotton could just catch the gleam of the honey-sweet and honey-coloured blossoms of a laburnum, whose tremulous branches seemed hardly able to bear the burden of a beauty so flamelike as theirs; and now and then the fantastic shadows of birds in flight flitted across the long tussore-silk curtains that were stretched in front of the huge window, producing a kind of momentary Japanese effect, and making him think of those pallid, jade-faced painters of Tokyo who, through the medium of an art that is necessarily immobile, seek to convey the sense of swiftness and motion. The sullen murmur of the bees shouldering their way through the long unmown grass, or circling with monotonous insistence round the dusty gilt horns of the straggling woodbine, seemed to make the stillness more oppressive. The dim roar of London was like the bourdon note of a distant organ. In the centre of the room, clamped to an upright easel, stood the full-length portrait of a young man of extraordinary personal beauty, and in front of it, some little distance away, was sitting the artist himself, Basil Hallward, whose sudden disappearance some years ago caused, at the time, such public excitement and gave rise to so many strange conjectures. As the painter looked at the gracious and comely form he had so skilfully mirrored in his art, a smile of pleasure passed across his face, and seemed about to linger there. But he suddenly started up, and closing his eyes, placed his fingers upon the lids, as though he sought to imprison within his brain some curious dream from which he feared he might awake. "It is your best work, Basil, the best thing you have ever done," said Lord Henry languidly. "You must certainly send it next year to the Grosvenor. The Academy is too large and too vulgar. Whenever I have gone there, there have been either so many people that I have not been able to see the pictures, which was dreadful, or so many pictures that I have not been able to see the people, which was worse. The Grosvenor is really the only place." "I don't think I shall send it anywhere," he answered, tossing his head back in that odd way that used to make his friends laugh at him at Oxford. "No, I won't send it anywhere." Lord Henry elevated his eyebrows and looked at him in amazement through the thin blue wreaths of smoke that curled up in such fanciful whorls from his heavy, opium-tainted cigarette. "Not send it anywhere? My dear fellow, why? Have you any reason? What odd chaps you painters are! You do anything in the world to gain a reputation. As soon as you have one, you seem to want to throw it away. It is silly of you, for there is only one thing in the world worse than being talked about, and that is not being talked about. A portrait like this would set you far above all the young men in England, and make the old men quite jealous, if old men are ever capable of any emotion." "I know you will laugh at me," he replied, "but I really can't exhibit it. I have put too much of myself into it." Lord Henry stretched himself out on the divan and laughed. "Yes, I knew you would; but it is quite true, all the same." "Too much of yourself in it! Upon my word, Basil, I didn't know you were so vain; and I really can't see any resemblance between you, with your rugged strong face and your coal-black hair, and this young Adonis, who looks as if he was made out of ivory and rose-leaves. Why, my dear Basil, he is a Narcissus, and you--well, of course you have an intellectual expression and all that. But beauty, real beauty, ends where an intellectual expression begins. Intellect is in itself a mode of exaggeration, and destroys the harmony of any face. The moment one sits down to think, one becomes all nose, or all forehead, or something horrid. Look at the successful men in any of the learned professions. How perfectly hideous they are! Except, of course, in the Church. But then in the Church they don't think. A bishop keeps on saying at the age of eighty what he was told to say when he was a boy of eighteen, and as a natural consequence he always looks absolutely delightful. Your mysterious young friend, whose name you have never told me, but whose picture really fascinates me, never thinks. I feel quite sure of that. He is some brainless beautiful creature who should be always here in winter when we have no flowers to look at, and always here in summer when we want something to chill our intelligence. Don't flatter yourself, Basil: you are not in the least like him." "You don't understand me, Harry," answered the artist. "Of course I am not like him. I know that perfectly well. Indeed, I should be sorry to look like him. You shrug your shoulders? I am telling you the truth. There is a fatality about all physical and intellectual distinction, the sort of fatality that seems to dog through history the faltering steps of kings. It is better not to be different from one's fellows. The ugly and the stupid have the best of it in this world. They can sit at their ease and gape at the play. If they know nothing of victory, they are at least spared the knowledge of defeat. They live as we all should live--undisturbed, indifferent, and without disquiet. They neither bring ruin upon others, nor ever receive it from alien hands. Your rank and wealth, Harry; my brains, such as they are--my art, whatever it may be worth; Dorian Gray's good looks--we shall all suffer for what the gods have given us, suffer terribly." "Dorian Gray? Is that his name?" asked Lord Henry, walking across the studio towards Basil Hallward. "Yes, that is his name. I didn't intend to tell it to you." "But why not?" "Oh, I can't explain. When I like people immensely, I never tell their names to any one. It is like surrendering a part of them. I have grown to love secrecy. It seems to be the one thing that can make modern life mysterious or marvellous to us. The commonest thing is delightful if one only hides it. When I leave town now I never tell my people where I am going. If I did, I would lose all my pleasure. It is a silly habit, I dare say, but somehow it seems to bring a great deal of romance into one's life. I suppose you think me awfully foolish about it?" "Not at all," answered Lord Henry, "not at all, my dear Basil. You seem to forget that I am married, and the one charm of marriage is that it makes a life of deception absolutely necessary for both parties. I never know where my wife is, and my wife never knows what I am doing. When we meet--we do meet occasionally, when we dine out together, or go down to the Duke's--we tell each other the most absurd stories with the most serious faces. My wife is very good at it--much better, in fact, than I am. She never gets confused over her dates, and I always do. But when she does find me out, she makes no row at all. I sometimes wish she would; but she merely laughs at me." "I hate the way you talk about your married life, Harry," said Basil Hallward, strolling towards the door that led into the garden. "I believe that you are really a very good husband, but that you are thoroughly ashamed of your own virtues. You are an extraordinary fellow. You never say a moral thing, and you never do a wrong thing. Your cynicism is simply a pose." "Being natural is simply a pose, and the most irritating pose I know," cried Lord Henry, laughing; and the two young men went out into the garden together and ensconced themselves on a long bamboo seat that stood in the shade of a tall laurel bush. The sunlight slipped over the polished leaves. In the grass, white daisies were tremulous. After a pause, Lord Henry pulled out his watch. "I am afraid I must be going, Basil," he murmured, "and before I go, I insist on your answering a question I put to you some time ago." "What is that?" said the painter, keeping his eyes fixed on the ground. "You know quite well." "I do not, Harry." "Well, I will tell you what it is. I want you to explain to me why you won't exhibit Dorian Gray's picture. I want the real reason." "I told you the real reason." "No, you did not. You said it was because there was too much of yourself in it. Now, that is childish." "Harry," said Basil Hallward, looking him straight in the face, "every portrait that is painted with feeling is a portrait of the artist, not of the sitter. The sitter is merely the accident, the occasion. It is not he who is revealed by the painter; it is rather the painter who, on the coloured canvas, reveals himself. The reason I will not exhibit this picture is that I am afraid that I have shown in it the secret of my own soul." Lord Henry laughed. "And what is that?" he asked. "I will tell you," said Hallward; but an expression of perplexity came over his face. "I am all expectation, Basil," continued his companion, glancing at him. "Oh, there is really very little to tell, Harry," answered the painter; "and I am afraid you will hardly understand it. Perhaps you will hardly believe it." Lord Henry smiled, and leaning down, plucked a pink-petalled daisy from the grass and examined it. "I am quite sure I shall understand it," he replied, gazing intently at the little golden, white-feathered disk, "and as for believing things, I can believe anything, provided that it is quite incredible." The wind shook some blossoms from the trees, and the heavy lilac-blooms, with their clustering stars, moved to and fro in the languid air. A grasshopper began to chirrup by the wall, and like a blue thread a long thin dragon-fly floated past on its brown gauze wings. Lord Henry felt as if he could hear Basil Hallward's heart beating, and wondered what was coming. "The story is simply this," said the painter after some time. "Two months ago I went to a crush at Lady Brandon's. You know we poor artists have to show ourselves in society from time to time, just to remind the public that we are not savages. With an evening coat and a white tie, as you told me once, anybody, even a stock-broker, can gain a reputation for being civilized. Well, after I had been in the room about ten minutes, talking to huge overdressed dowagers and tedious academicians, I suddenly became conscious that some one was looking at me. I turned half-way round and saw Dorian Gray for the first time. When our eyes met, I felt that I was growing pale. A curious sensation of terror came over me. I knew that I had come face to face with some one whose mere personality was so fascinating that, if I allowed it to do so, it would absorb my whole nature, my whole soul, my very art itself. I did not want any external influence in my life. You know yourself, Harry, how independent I am by nature. I have always been my own master; had at least always been so, till I met Dorian Gray. Then--but I don't know how to explain it to you. Something seemed to tell me that I was on the verge of a terrible crisis in my life. I had a strange feeling that fate had in store for me exquisite joys and exquisite sorrows. I grew afraid and turned to quit the room. It was not conscience that made me do so: it was a sort of cowardice. I take no credit to myself for trying to escape." "Conscience and cowardice are really the same things, Basil. Conscience is the trade-name of the firm. That is all." "I don't believe that, Harry, and I don't believe you do either. However, whatever was my motive--and it may have been pride, for I used to be very proud--I certainly struggled to the door. There, of course, I stumbled against Lady Brandon. 'You are not going to run away so soon, Mr. Hallward?' she screamed out. You know her curiously shrill voice?" "Yes; she is a peacock in everything but beauty," said Lord Henry, pulling the daisy to bits with his long nervous fingers. "I could not get rid of her. She brought me up to royalties, and people with stars and garters, and elderly ladies with gigantic tiaras and parrot noses. She spoke of me as her dearest friend. I had only met her once before, but she took it into her head to lionize me. I believe some picture of mine had made a great success at the time, at least had been chattered about in the penny newspapers, which is the nineteenth-century standard of immortality. Suddenly I found myself face to face with the young man whose personality had so strangely stirred me. We were quite close, almost touching. Our eyes met again. It was reckless of me, but I asked Lady Brandon to introduce me to him. Perhaps it was not so reckless, after all. It was simply inevitable. We would have spoken to each other without any introduction. I am sure of that. Dorian told me so afterwards. He, too, felt that we were destined to know each other." "And how did Lady Brandon describe this wonderful young man?" asked his companion. "I know she goes in for giving a rapid _precis_ of all her guests. I remember her bringing me up to a truculent and red-faced old gentleman covered all over with orders and ribbons, and hissing into my ear, in a tragic whisper which must have been perfectly audible to everybody in the room, the most astounding details. I simply fled. I like to find out people for myself. But Lady Brandon treats her guests exactly as an auctioneer treats his goods. She either explains them entirely away, or tells one everything about them except what one wants to know." "Poor Lady Brandon! You are hard on her, Harry!" said Hallward listlessly. "My dear fellow, she tried to found a _salon_, and only succeeded in opening a restaurant. How could I admire her? But tell me, what did she say about Mr. Dorian Gray?" "Oh, something like, 'Charming boy--poor dear mother and I absolutely inseparable. Quite forget what he does--afraid he--doesn't do anything--oh, yes, plays the piano--or is it the violin, dear Mr. Gray?' Neither of us could help laughing, and we became friends at once." "Laughter is not at all a bad beginning for a friendship, and it is far the best ending for one," said the young lord, plucking another daisy. Hallward shook his head. "You don't understand what friendship is, Harry," he murmured--"or what enmity is, for that matter. You like every one; that is to say, you are indifferent to every one." "How horribly unjust of you!" cried Lord Henry, tilting his hat back and looking up at the little clouds that, like ravelled skeins of glossy white silk, were drifting across the hollowed turquoise of the summer sky. "Yes; horribly unjust of you. I make a great difference between people. I choose my friends for their good looks, my acquaintances for their good characters, and my enemies for their good intellects. A man cannot be too careful in the choice of his enemies. I have not got one who is a fool. They are all men of some intellectual power, and consequently they all appreciate me. Is that very vain of me? I think it is rather vain." "I should think it was, Harry. But according to your category I must be merely an acquaintance." "My dear old Basil, you are much more than an acquaintance." "And much less than a friend. A sort of brother, I suppose?" "Oh, brothers! I don't care for brothers. My elder brother won't die, and my younger brothers seem never to do anything else." "Harry!" exclaimed Hallward, frowning. "My dear fellow, I am not quite serious. But I can't help detesting my relations. I suppose it comes from the fact that none of us can stand other people having the same faults as ourselves. I quite sympathize with the rage of the English democracy against what they call the vices of the upper orders. The masses feel that drunkenness, stupidity, and immorality should be their own special property, and that if any one of us makes an ass of himself, he is poaching on their preserves. When poor Southwark got into the divorce court, their indignation was quite magnificent. And yet I don't suppose that ten per cent of the proletariat live correctly." "I don't agree with a single word that you have said, and, what is more, Harry, I feel sure you don't either." Lord Henry stroked his pointed brown beard and tapped the toe of his patent-leather boot with a tasselled ebony cane. "How English you are Basil! That is the second time you have made that observation. If one puts forward an idea to a true Englishman--always a rash thing to do--he never dreams of considering whether the idea is right or wrong. The only thing he considers of any importance is whether one believes it oneself. Now, the value of an idea has nothing whatsoever to do with the sincerity of the man who expresses it. Indeed, the probabilities are that the more insincere the man is, the more purely intellectual will the idea be, as in that case it will not be coloured by either his wants, his desires, or his prejudices. However, I don't propose to discuss politics, sociology, or metaphysics with you. I like persons better than principles, and I like persons with no principles better than anything else in the world. Tell me more about Mr. Dorian Gray. How often do you see him?" "Every day. I couldn't be happy if I didn't see him every day. He is absolutely necessary to me." "How extraordinary! I thought you would never care for anything but your art." "He is all my art to me now," said the painter gravely. "I sometimes think, Harry, that there are only two eras of any importance in the world's history. The first is the appearance of a new medium for art, and the second is the appearance of a new personality for art also. What the invention of oil-painting was to the Venetians, the face of Antinous was to late Greek sculpture, and the face of Dorian Gray will some day be to me. It is not merely that I paint from him, draw from him, sketch from him. Of course, I have done all that. But he is much more to me than a model or a sitter. I won't tell you that I am dissatisfied with what I have done of him, or that his beauty is such that art cannot express it. There is nothing that art cannot express, and I know that the work I have done, since I met Dorian Gray, is good work, is the best work of my life. But in some curious way--I wonder will you understand me?--his personality has suggested to me an entirely new manner in art, an entirely new mode of style. I see things differently, I think of them differently. I can now recreate life in a way that was hidden from me before. 'A dream of form in days of thought'--who is it who says that? I forget; but it is what Dorian Gray has been to me. The merely visible presence of this lad--for he seems to me little more than a lad, though he is really over twenty--his merely visible presence--ah! I wonder can you realize all that that means? Unconsciously he defines for me the lines of a fresh school, a school that is to have in it all the passion of the romantic spirit, all the perfection of the spirit that is Greek. The harmony of soul and body--how much that is! We in our madness have separated the two, and have invented a realism that is vulgar, an ideality that is void. Harry! if you only knew what Dorian Gray is to me! You remember that landscape of mine, for which Agnew offered me such a huge price but which I would not part with? It is one of the best things I have ever done. And why is it so? Because, while I was painting it, Dorian Gray sat beside me. Some subtle influence passed from him to me, and for the first time in my life I saw in the plain woodland the wonder I had always looked for and always missed." "Basil, this is extraordinary! I must see Dorian Gray." Hallward got up from the seat and walked up and down the garden. After some time he came back. "Harry," he said, "Dorian Gray is to me simply a motive in art. You might see nothing in him. I see everything in him. He is never more present in my work than when no image of him is there. He is a suggestion, as I have said, of a new manner. I find him in the curves of certain lines, in the loveliness and subtleties of certain colours. That is all." "Then why won't you exhibit his portrait?" asked Lord Henry. "Because, without intending it, I have put into it some expression of all this curious artistic idolatry, of which, of course, I have never cared to speak to him. He knows nothing about it. He shall never know anything about it. But the world might guess it, and I will not bare my soul to their shallow prying eyes. My heart shall never be put under their microscope. There is too much of myself in the thing, Harry--too much of myself!" "Poets are not so scrupulous as you are. They know how useful passion is for publication. Nowadays a broken heart will run to many editions." "I hate them for it," cried Hallward. "An artist should create beautiful things, but should put nothing of his own life into them. We live in an age when men treat art as if it were meant to be a form of autobiography. We have lost the abstract sense of beauty. Some day I will show the world what it is; and for that reason the world shall never see my portrait of Dorian Gray." "I think you are wrong, Basil, but I won't argue with you. It is only the intellectually lost who ever argue. Tell me, is Dorian Gray very fond of you?" The painter considered for a few moments. "He likes me," he answered after a pause; "I know he likes me. Of course I flatter him dreadfully. I find a strange pleasure in saying things to him that I know I shall be sorry for having said. As a rule, he is charming to me, and we sit in the studio and talk of a thousand things. Now and then, however, he is horribly thoughtless, and seems to take a real delight in giving me pain. Then I feel, Harry, that I have given away my whole soul to some one who treats it as if it were a flower to put in his coat, a bit of decoration to charm his vanity, an ornament for a summer's day." "Days in summer, Basil, are apt to linger," murmured Lord Henry. "Perhaps you will tire sooner than he will. It is a sad thing to think of, but there is no doubt that genius lasts longer than beauty. That accounts for the fact that we all take such pains to over-educate ourselves. In the wild struggle for existence, we want to have something that endures, and so we fill our minds with rubbish and facts, in the silly hope of keeping our place. The thoroughly well-informed man--that is the modern ideal. And the mind of the thoroughly well-informed man is a dreadful thing. It is like a _bric-a-brac_ shop, all monsters and dust, with everything priced above its proper value. I think you will tire first, all the same. Some day you will look at your friend, and he will seem to you to be a little out of drawing, or you won't like his tone of colour, or something. You will bitterly reproach him in your own heart, and seriously think that he has behaved very badly to you. The next time he calls, you will be perfectly cold and indifferent. It will be a great pity, for it will alter you. What you have told me is quite a romance, a romance of art one might call it, and the worst of having a romance of any kind is that it leaves one so unromantic." "Harry, don't talk like that. As long as I live, the personality of Dorian Gray will dominate me. You can't feel what I feel. You change too often." "Ah, my dear Basil, that is exactly why I can feel it. Those who are faithful know only the trivial side of love: it is the faithless who know love's tragedies." And Lord Henry struck a light on a dainty silver case and began to smoke a cigarette with a self-conscious and satisfied air, as if he had summed up the world in a phrase. There was a rustle of chirruping sparrows in the green lacquer leaves of the ivy, and the blue cloud-shadows chased themselves across the grass like swallows. How pleasant it was in the garden! And how delightful other people's emotions were!--much more delightful than their ideas, it seemed to him. One's own soul, and the passions of one's friends--those were the fascinating things in life. He pictured to himself with silent amusement the tedious luncheon that he had missed by staying so long with Basil Hallward. Had he gone to his aunt's, he would have been sure to have met Lord Goodbody there, and the whole conversation would have been about the feeding of the poor and the necessity for model lodging-houses. Each class would have preached the importance of those virtues, for whose exercise there was no necessity in their own lives. The rich would have spoken on the value of thrift, and the idle grown eloquent over the dignity of labour. It was charming to have escaped all that! As he thought of his aunt, an idea seemed to strike him. He turned to Hallward and said, "My dear fellow, I have just remembered." "Remembered what, Harry?" "Where I heard the name of Dorian Gray." "Where was it?" asked Hallward, with a slight frown. "Don't look so angry, Basil. It was at my aunt, Lady Agatha's. She told me she had discovered a wonderful young man who was going to help her in the East End, and that his name was Dorian Gray. I am bound to state that she never told me he was good-looking. Women have no appreciation of good looks; at least, good women have not. She said that he was very earnest and had a beautiful nature. I at once pictured to myself a creature with spectacles and lank hair, horribly freckled, and tramping about on huge feet. I wish I had known it was your friend." "I am very glad you didn't, Harry." "Why?" "I don't want you to meet him." "You don't want me to meet him?" "No." "Mr. Dorian Gray is in the studio, sir," said the butler, coming into the garden. "You must introduce me now," cried Lord Henry, laughing. The painter turned to his servant, who stood blinking in the sunlight. "Ask Mr. Gray to wait, Parker: I shall be in in a few moments." The man bowed and went up the walk. Then he looked at Lord Henry. "Dorian Gray is my dearest friend," he said. "He has a simple and a beautiful nature. Your aunt was quite right in what she said of him. Don't spoil him. Don't try to influence him. Your influence would be bad. The world is wide, and has many marvellous people in it. Don't take away from me the one person who gives to my art whatever charm it possesses: my life as an artist depends on him. Mind, Harry, I trust you." He spoke very slowly, and the words seemed wrung out of him almost against his will. "What nonsense you talk!" said Lord Henry, smiling, and taking Hallward by the arm, he almost led him into the house. CHAPTER 2 As they entered they saw Dorian Gray. He was seated at the piano, with his back to them, turning over the pages of a volume of Schumann's "Forest Scenes." "You must lend me these, Basil," he cried. "I want to learn them. They are perfectly charming." "That entirely depends on how you sit to-day, Dorian." "Oh, I am tired of sitting, and I don't want a life-sized portrait of myself," answered the lad, swinging round on the music-stool in a wilful, petulant manner. When he caught sight of Lord Henry, a faint blush coloured his cheeks for a moment, and he started up. "I beg your pardon, Basil, but I didn't know you had any one with you." "This is Lord Henry Wotton, Dorian, an old Oxford friend of mine. I have just been telling him what a capital sitter you were, and now you have spoiled everything." "You have not spoiled my pleasure in meeting you, Mr. Gray," said Lord Henry, stepping forward and extending his hand. "My aunt has often spoken to me about you. You are one of her favourites, and, I am afraid, one of her victims also." "I am in Lady Agatha's black books at present," answered Dorian with a funny look of penitence. "I promised to go to a club in Whitechapel with her last Tuesday, and I really forgot all about it. We were to have played a duet together--three duets, I believe. I don't know what she will say to me. I am far too frightened to call." "Oh, I will make your peace with my aunt. She is quite devoted to you. And I don't think it really matters about your not being there. The audience probably thought it was a duet. When Aunt Agatha sits down to the piano, she makes quite enough noise for two people." "That is very horrid to her, and not very nice to me," answered Dorian, laughing. Lord Henry looked at him. Yes, he was certainly wonderfully handsome, with his finely curved scarlet lips, his frank blue eyes, his crisp gold hair. There was something in his face that made one trust him at once. All the candour of youth was there, as well as all youth's passionate purity. One felt that he had kept himself unspotted from the world. No wonder Basil Hallward worshipped him. "You are too charming to go in for philanthropy, Mr. Gray--far too charming." And Lord Henry flung himself down on the divan and opened his cigarette-case. The painter had been busy mixing his colours and getting his brushes ready. He was looking worried, and when he heard Lord Henry's last remark, he glanced at him, hesitated for a moment, and then said, "Harry, I want to finish this picture to-day. Would you think it awfully rude of me if I asked you to go away?" Lord Henry smiled and looked at Dorian Gray. "Am I to go, Mr. Gray?" he asked. "Oh, please don't, Lord Henry. I see that Basil is in one of his sulky moods, and I can't bear him when he sulks. Besides, I want you to tell me why I should not go in for philanthropy." "I don't know that I shall tell you that, Mr. Gray. It is so tedious a subject that one would have to talk seriously about it. But I certainly shall not run away, now that you have asked me to stop. You don't really mind, Basil, do you? You have often told me that you liked your sitters to have some one to chat to." Hallward bit his lip. "If Dorian wishes it, of course you must stay. Dorian's whims are laws to everybody, except himself." Lord Henry took up his hat and gloves. "You are very pressing, Basil, but I am afraid I must go. I have promised to meet a man at the Orleans. Good-bye, Mr. Gray. Come and see me some afternoon in Curzon Street. I am nearly always at home at five o'clock. Write to me when you are coming. I should be sorry to miss you." "Basil," cried Dorian Gray, "if Lord Henry Wotton goes, I shall go, too. You never open your lips while you are painting, and it is horribly dull standing on a platform and trying to look pleasant. Ask him to stay. I insist upon it." "Stay, Harry, to oblige Dorian, and to oblige me," said Hallward, gazing intently at his picture. "It is quite true, I never talk when I am working, and never listen either, and it must be dreadfully tedious for my unfortunate sitters. I beg you to stay." "But what about my man at the Orleans?" The painter laughed. "I don't think there will be any difficulty about that. Sit down again, Harry. And now, Dorian, get up on the platform, and don't move about too much, or pay any attention to what Lord Henry says. He has a very bad influence over all his friends, with the single exception of myself." Dorian Gray stepped up on the dais with the air of a young Greek martyr, and made a little _moue_ of discontent to Lord Henry, to whom he had rather taken a fancy. He was so unlike Basil. They made a delightful contrast. And he had such a beautiful voice. After a few moments he said to him, "Have you really a very bad influence, Lord Henry? As bad as Basil says?" "There is no such thing as a good influence, Mr. Gray. All influence is immoral--immoral from the scientific point of view." "Why?" "Because to influence a person is to give him one's own soul. He does not think his natural thoughts, or burn with his natural passions. His virtues are not real to him. His sins, if there are such things as sins, are borrowed. He becomes an echo of some one else's music, an actor of a part that has not been written for him. The aim of life is self-development. To realize one's nature perfectly--that is what each of us is here for. People are afraid of themselves, nowadays. They have forgotten the highest of all duties, the duty that one owes to one's self. Of course, they are charitable. They feed the hungry and clothe the beggar. But their own souls starve, and are naked. Courage has gone out of our race. Perhaps we never really had it. The terror of society, which is the basis of morals, the terror of God, which is the secret of religion--these are the two things that govern us. And yet--" "Just turn your head a little more to the right, Dorian, like a good boy," said the painter, deep in his work and conscious only that a look had come into the lad's face that he had never seen there before. "And yet," continued Lord Henry, in his low, musical voice, and with that graceful wave of the hand that was always so characteristic of him, and that he had even in his Eton days, "I believe that if one man were to live out his life fully and completely, were to give form to every feeling, expression to every thought, reality to every dream--I believe that the world would gain such a fresh impulse of joy that we would forget all the maladies of mediaevalism, and return to the Hellenic ideal--to something finer, richer than the Hellenic ideal, it may be. But the bravest man amongst us is afraid of himself. The mutilation of the savage has its tragic survival in the self-denial that mars our lives. We are punished for our refusals. Every impulse that we strive to strangle broods in the mind and poisons us. The body sins once, and has done with its sin, for action is a mode of purification. Nothing remains then but the recollection of a pleasure, or the luxury of a regret. The only way to get rid of a temptation is to yield to it. Resist it, and your soul grows sick with longing for the things it has forbidden to itself, with desire for what its monstrous laws have made monstrous and unlawful. It has been said that the great events of the world take place in the brain. It is in the brain, and the brain only, that the great sins of the world take place also. You, Mr. Gray, you yourself, with your rose-red youth and your rose-white boyhood, you have had passions that have made you afraid, thoughts that have filled you with terror, day-dreams and sleeping dreams whose mere memory might stain your cheek with shame--" "Stop!" faltered Dorian Gray, "stop! you bewilder me. I don't know what to say. There is some answer to you, but I cannot find it. Don't speak. Let me think. Or, rather, let me try not to think." For nearly ten minutes he stood there, motionless, with parted lips and eyes strangely bright. He was dimly conscious that entirely fresh influences were at work within him. Yet they seemed to him to have come really from himself. The few words that Basil's friend had said to him--words spoken by chance, no doubt, and with wilful paradox in them--had touched some secret chord that had never been touched before, but that he felt was now vibrating and throbbing to curious pulses. Music had stirred him like that. Music had troubled him many times. But music was not articulate. It was not a new world, but rather another chaos, that it created in us. Words! Mere words! How terrible they were! How clear, and vivid, and cruel! One could not escape from them. And yet what a subtle magic there was in them! They seemed to be able to give a plastic form to formless things, and to have a music of their own as sweet as that of viol or of lute. Mere words! Was there anything so real as words? Yes; there had been things in his boyhood that he had not understood. He understood them now. Life suddenly became fiery-coloured to him. It seemed to him that he had been walking in fire. Why had he not known it? With his subtle smile, Lord Henry watched him. He knew the precise psychological moment when to say nothing. He felt intensely interested. He was amazed at the sudden impression that his words had produced, and, remembering a book that he had read when he was sixteen, a book which had revealed to him much that he had not known before, he wondered whether Dorian Gray was passing through a similar experience. He had merely shot an arrow into the air. Had it hit the mark? How fascinating the lad was! Hallward painted away with that marvellous bold touch of his, that had the true refinement and perfect delicacy that in art, at any rate comes only from strength. He was unconscious of the silence. "Basil, I am tired of standing," cried Dorian Gray suddenly. "I must go out and sit in the garden. The air is stifling here." "My dear fellow, I am so sorry. When I am painting, I can't think of anything else. But you never sat better. You were perfectly still. And I have caught the effect I wanted--the half-parted lips and the bright look in the eyes. I don't know what Harry has been saying to you, but he has certainly made you have the most wonderful expression. I suppose he has been paying you compliments. You mustn't believe a word that he says." "He has certainly not been paying me compliments. Perhaps that is the reason that I don't believe anything he has told me." "You know you believe it all," said Lord Henry, looking at him with his dreamy languorous eyes. "I will go out to the garden with you. It is horribly hot in the studio. Basil, let us have something iced to drink, something with strawberries in it." "Certainly, Harry. Just touch the bell, and when Parker comes I will tell him what you want. I have got to work up this background, so I will join you later on. Don't keep Dorian too long. I have never been in better form for painting than I am to-day. This is going to be my masterpiece. It is my masterpiece as it stands." Lord Henry went out to the garden and found Dorian Gray burying his face in the great cool lilac-blossoms, feverishly drinking in their perfume as if it had been wine. He came close to him and put his hand upon his shoulder. "You are quite right to do that," he murmured. "Nothing can cure the soul but the senses, just as nothing can cure the senses but the soul." The lad started and drew back. He was bareheaded, and the leaves had tossed his rebellious curls and tangled all their gilded threads. There was a look of fear in his eyes, such as people have when they are suddenly awakened. His finely chiselled nostrils quivered, and some hidden nerve shook the scarlet of his lips and left them trembling. "Yes," continued Lord Henry, "that is one of the great secrets of life--to cure the soul by means of the senses, and the senses by means of the soul. You are a wonderful creation. You know more than you think you know, just as you know less than you want to know." Dorian Gray frowned and turned his head away. He could not help liking the tall, graceful young man who was standing by him. His romantic, olive-coloured face and worn expression interested him. There was something in his low languid voice that was absolutely fascinating. His cool, white, flowerlike hands, even, had a curious charm. They moved, as he spoke, like music, and seemed to have a language of their own. But he felt afraid of him, and ashamed of being afraid. Why had it been left for a stranger to reveal him to himself? He had known Basil Hallward for months, but the friendship between them had never altered him. Suddenly there had come some one across his life who seemed to have disclosed to him life's mystery. And, yet, what was there to be afraid of? He was not a schoolboy or a girl. It was absurd to be frightened. "Let us go and sit in the shade," said Lord Henry. "Parker has brought out the drinks, and if you stay any longer in this glare, you will be quite spoiled, and Basil will never paint you again. You really must not allow yourself to become sunburnt. It would be unbecoming." "What can it matter?" cried Dorian Gray, laughing, as he sat down on the seat at the end of the garden. "It should matter everything to you, Mr. Gray." "Why?" "Because you have the most marvellous youth, and youth is the one thing worth having." "I don't feel that, Lord Henry." "No, you don't feel it now. Some day, when you are old and wrinkled and ugly, when thought has seared your forehead with its lines, and passion branded your lips with its hideous fires, you will feel it, you will feel it terribly. Now, wherever you go, you charm the world. Will it always be so? ... You have a wonderfully beautiful face, Mr. Gray. Don't frown. You have. And beauty is a form of genius--is higher, indeed, than genius, as it needs no explanation. It is of the great facts of the world, like sunlight, or spring-time, or the reflection in dark waters of that silver shell we call the moon. It cannot be questioned. It has its divine right of sovereignty. It makes princes of those who have it. You smile? Ah! when you have lost it you won't smile.... People say sometimes that beauty is only superficial. That may be so, but at least it is not so superficial as thought is. To me, beauty is the wonder of wonders. It is only shallow people who do not judge by appearances. The true mystery of the world is the visible, not the invisible.... Yes, Mr. Gray, the gods have been good to you. But what the gods give they quickly take away. You have only a few years in which to live really, perfectly, and fully. When your youth goes, your beauty will go with it, and then you will suddenly discover that there are no triumphs left for you, or have to content yourself with those mean triumphs that the memory of your past will make more bitter than defeats. Every month as it wanes brings you nearer to something dreadful. Time is jealous of you, and wars against your lilies and your roses. You will become sallow, and hollow-cheeked, and dull-eyed. You will suffer horribly.... Ah! realize your youth while you have it. Don't squander the gold of your days, listening to the tedious, trying to improve the hopeless failure, or giving away your life to the ignorant, the common, and the vulgar. These are the sickly aims, the false ideals, of our age. Live! Live the wonderful life that is in you! Let nothing be lost upon you. Be always searching for new sensations. Be afraid of nothing.... A new Hedonism--that is what our century wants. You might be its visible symbol. With your personality there is nothing you could not do. The world belongs to you for a season.... The moment I met you I saw that you were quite unconscious of what you really are, of what you really might be. There was so much in you that charmed me that I felt I must tell you something about yourself. I thought how tragic it would be if you were wasted. For there is such a little time that your youth will last--such a little time. The common hill-flowers wither, but they blossom again. The laburnum will be as yellow next June as it is now. In a month there will be purple stars on the clematis, and year after year the green night of its leaves will hold its purple stars. But we never get back our youth. The pulse of joy that beats in us at twenty becomes sluggish. Our limbs fail, our senses rot. We degenerate into hideous puppets, haunted by the memory of the passions of which we were too much afraid, and the exquisite temptations that we had not the courage to yield to. Youth! Youth! There is absolutely nothing in the world but youth!" Dorian Gray listened, open-eyed and wondering. The spray of lilac fell from his hand upon the gravel. A furry bee came and buzzed round it for a moment. Then it began to scramble all over the oval stellated globe of the tiny blossoms. He watched it with that strange interest in trivial things that we try to develop when things of high import make us afraid, or when we are stirred by some new emotion for which we cannot find expression, or when some thought that terrifies us lays sudden siege to the brain and calls on us to yield. After a time the bee flew away. He saw it creeping into the stained trumpet of a Tyrian convolvulus. The flower seemed to quiver, and then swayed gently to and fro. Suddenly the painter appeared at the door of the studio and made staccato signs for them to come in. They turned to each other and smiled. "I am waiting," he cried. "Do come in. The light is quite perfect, and you can bring your drinks." They rose up and sauntered down the walk together. Two green-and-white butterflies fluttered past them, and in the pear-tree at the corner of the garden a thrush began to sing. "You are glad you have met me, Mr. Gray," said Lord Henry, looking at him. "Yes, I am glad now. I wonder shall I always be glad?" "Always! That is a dreadful word. It makes me shudder when I hear it. Women are so fond of using it. They spoil every romance by trying to make it last for ever. It is a meaningless word, too. The only difference between a caprice and a lifelong passion is that the caprice lasts a little longer." As they entered the studio, Dorian Gray put his hand upon Lord Henry's arm. "In that case, let our friendship be a caprice," he murmured, flushing at his own boldness, then stepped up on the platform and resumed his pose. Lord Henry flung himself into a large wicker arm-chair and watched him. The sweep and dash of the brush on the canvas made the only sound that broke the stillness, except when, now and then, Hallward stepped back to look at his work from a distance. In the slanting beams that streamed through the open doorway the dust danced and was golden. The heavy scent of the roses seemed to brood over everything. After about a quarter of an hour Hallward stopped painting, looked for a long time at Dorian Gray, and then for a long time at the picture, biting the end of one of his huge brushes and frowning. "It is quite finished," he cried at last, and stooping down he wrote his name in long vermilion letters on the left-hand corner of the canvas. Lord Henry came over and examined the picture. It was certainly a wonderful work of art, and a wonderful likeness as well. "My dear fellow, I congratulate you most warmly," he said. "It is the finest portrait of modern times. Mr. Gray, come over and look at yourself." The lad started, as if awakened from some dream. "Is it really finished?" he murmured, stepping down from the platform. "Quite finished," said the painter. "And you have sat splendidly to-day. I am awfully obliged to you." "That is entirely due to me," broke in Lord Henry. "Isn't it, Mr. Gray?" Dorian made no answer, but passed listlessly in front of his picture and turned towards it. When he saw it he drew back, and his cheeks flushed for a moment with pleasure. A look of joy came into his eyes, as if he had recognized himself for the first time. He stood there motionless and in wonder, dimly conscious that Hallward was speaking to him, but not catching the meaning of his words. The sense of his own beauty came on him like a revelation. He had never felt it before. Basil Hallward's compliments had seemed to him to be merely the charming exaggeration of friendship. He had listened to them, laughed at them, forgotten them. They had not influenced his nature. Then had come Lord Henry Wotton with his strange panegyric on youth, his terrible warning of its brevity. That had stirred him at the time, and now, as he stood gazing at the shadow of his own loveliness, the full reality of the description flashed across him. Yes, there would be a day when his face would be wrinkled and wizen, his eyes dim and colourless, the grace of his figure broken and deformed. The scarlet would pass away from his lips and the gold steal from his hair. The life that was to make his soul would mar his body. He would become dreadful, hideous, and uncouth. As he thought of it, a sharp pang of pain struck through him like a knife and made each delicate fibre of his nature quiver. His eyes deepened into amethyst, and across them came a mist of tears. He felt as if a hand of ice had been laid upon his heart. "Don't you like it?" cried Hallward at last, stung a little by the lad's silence, not understanding what it meant. "Of course he likes it," said Lord Henry. "Who wouldn't like it? It is one of the greatest things in modern art. I will give you anything you like to ask for it. I must have it." "It is not my property, Harry." "Whose property is it?" "Dorian's, of course," answered the painter. "He is a very lucky fellow." "How sad it is!" murmured Dorian Gray with his eyes still fixed upon his own portrait. "How sad it is! I shall grow old, and horrible, and dreadful. But this picture will remain always young. It will never be older than this particular day of June.... If it were only the other way! If it were I who was to be always young, and the picture that was to grow old! For that--for that--I would give everything! Yes, there is nothing in the whole world I would not give! I would give my soul for that!" "You would hardly care for such an arrangement, Basil," cried Lord Henry, laughing. "It would be rather hard lines on your work." "I should object very strongly, Harry," said Hallward. Dorian Gray turned and looked at him. "I believe you would, Basil. You like your art better than your friends. I am no more to you than a green bronze figure. Hardly as much, I dare say." The painter stared in amazement. It was so unlike Dorian to speak like that. What had happened? He seemed quite angry. His face was flushed and his cheeks burning. "Yes," he continued, "I am less to you than your ivory Hermes or your silver Faun. You will like them always. How long will you like me? Till I have my first wrinkle, I suppose. I know, now, that when one loses one's good looks, whatever they may be, one loses everything. Your picture has taught me that. Lord Henry Wotton is perfectly right. Youth is the only thing worth having. When I find that I am growing old, I shall kill myself." Hallward turned pale and caught his hand. "Dorian! Dorian!" he cried, "don't talk like that. I have never had such a friend as you, and I shall never have such another. You are not jealous of material things, are you?--you who are finer than any of them!" "I am jealous of everything whose beauty does not die. I am jealous of the portrait you have painted of me. Why should it keep what I must lose? Every moment that passes takes something from me and gives something to it. Oh, if it were only the other way! If the picture could change, and I could be always what I am now! Why did you paint it? It will mock me some day--mock me horribly!" The hot tears welled into his eyes; he tore his hand away and, flinging himself on the divan, he buried his face in the cushions, as though he was praying. "This is your doing, Harry," said the painter bitterly. Lord Henry shrugged his shoulders. "It is the real Dorian Gray--that is all." "It is not." "If it is not, what have I to do with it?" "You should have gone away when I asked you," he muttered. "I stayed when you asked me," was Lord Henry's answer. "Harry, I can't quarrel with my two best friends at once, but between you both you have made me hate the finest piece of work I have ever done, and I will destroy it. What is it but canvas and colour? I will not let it come across our three lives and mar them." Dorian Gray lifted his golden head from the pillow, and with pallid face and tear-stained eyes, looked at him as he walked over to the deal painting-table that was set beneath the high curtained window. What was he doing there? His fingers were straying about among the litter of tin tubes and dry brushes, seeking for something. Yes, it was for the long palette-knife, with its thin blade of lithe steel. He had found it at last. He was going to rip up the canvas. With a stifled sob the lad leaped from the couch, and, rushing over to Hallward, tore the knife out of his hand, and flung it to the end of the studio. "Don't, Basil, don't!" he cried. "It would be murder!" "I am glad you appreciate my work at last, Dorian," said the painter coldly when he had recovered from his surprise. "I never thought you would." "Appreciate it? I am in love with it, Basil. It is part of myself. I feel that." "Well, as soon as you are dry, you shall be varnished, and framed, and sent home. Then you can do what you like with yourself." And he walked across the room and rang the bell for tea. "You will have tea, of course, Dorian? And so will you, Harry? Or do you object to such simple pleasures?" "I adore simple pleasures," said Lord Henry. "They are the last refuge of the complex. But I don't like scenes, except on the stage. What absurd fellows you are, both of you! I wonder who it was defined man as a rational animal. It was the most premature definition ever given. Man is many things, but he is not rational. I am glad he is not, after all--though I wish you chaps would not squabble over the picture. You had much better let me have it, Basil. This silly boy doesn't really want it, and I really do." "If you let any one have it but me, Basil, I shall never forgive you!" cried Dorian Gray; "and I don't allow people to call me a silly boy." "You know the picture is yours, Dorian. I gave it to you before it existed." "And you know you have been a little silly, Mr. Gray, and that you don't really object to being reminded that you are extremely young." "I should have objected very strongly this morning, Lord Henry." "Ah! this morning! You have lived since then." There came a knock at the door, and the butler entered with a laden tea-tray and set it down upon a small Japanese table. There was a rattle of cups and saucers and the hissing of a fluted Georgian urn. Two globe-shaped china dishes were brought in by a page. Dorian Gray went over and poured out the tea. The two men sauntered languidly to the table and examined what was under the covers. "Let us go to the theatre to-night," said Lord Henry. "There is sure to be something on, somewhere. I have promised to dine at White's, but it is only with an old friend, so I can send him a wire to say that I am ill, or that I am prevented from coming in consequence of a subsequent engagement. I think that would be a rather nice excuse: it would have all the surprise of candour." "It is such a bore putting on one's dress-clothes," muttered Hallward. "And, when one has them on, they are so horrid." "Yes," answered Lord Henry dreamily, "the costume of the nineteenth century is detestable. It is so sombre, so depressing. Sin is the only real colour-element left in modern life." "You really must not say things like that before Dorian, Harry." "Before which Dorian? The one who is pouring out tea for us, or the one in the picture?" "Before either." "I should like to come to the theatre with you, Lord Henry," said the lad. "Then you shall come; and you will come, too, Basil, won't you?" "I can't, really. I would sooner not. I have a lot of work to do." "Well, then, you and I will go alone, Mr. Gray." "I should like that awfully." The painter bit his lip and walked over, cup in hand, to the picture. "I shall stay with the real Dorian," he said, sadly. "Is it the real Dorian?" cried the original of the portrait, strolling across to him. "Am I really like that?" "Yes; you are just like that." "How wonderful, Basil!" "At least you are like it in appearance. But it will never alter," sighed Hallward. "That is something." "What a fuss people make about fidelity!" exclaimed Lord Henry. "Why, even in love it is purely a question for physiology. It has nothing to do with our own will. Young men want to be faithful, and are not; old men want to be faithless, and cannot: that is all one can say." "Don't go to the theatre to-night, Dorian," said Hallward. "Stop and dine with me." "I can't, Basil." "Why?" "Because I have promised Lord Henry Wotton to go with him." "He won't like you the better for keeping your promises. He always breaks his own. I beg you not to go." Dorian Gray laughed and shook his head. "I entreat you." The lad hesitated, and looked over at Lord Henry, who was watching them from the tea-table with an amused smile. "I must go, Basil," he answered. "Very well," said Hallward, and he went over and laid down his cup on the tray. "It is rather late, and, as you have to dress, you had better lose no time. Good-bye, Harry. Good-bye, Dorian. Come and see me soon. Come to-morrow." "Certainly." "You won't forget?" "No, of course not," cried Dorian. "And ... Harry!" "Yes, Basil?" "Remember what I asked you, when we were in the garden this morning." "I have forgotten it." "I trust you." "I wish I could trust myself," said Lord Henry, laughing. "Come, Mr. Gray, my hansom is outside, and I can drop you at your own place. Good-bye, Basil. It has been a most interesting afternoon." As the door closed behind them, the painter flung himself down on a sofa, and a look of pain came into his face. CHAPTER 3 At half-past twelve next day Lord Henry Wotton strolled from Curzon Street over to the Albany to call on his uncle, Lord Fermor, a genial if somewhat rough-mannered old bachelor, whom the outside world called selfish because it derived no particular benefit from him, but who was considered generous by Society as he fed the people who amused him. His father had been our ambassador at Madrid when Isabella was young and Prim unthought of, but had retired from the diplomatic service in a capricious moment of annoyance on not being offered the Embassy at Paris, a post to which he considered that he was fully entitled by reason of his birth, his indolence, the good English of his dispatches, and his inordinate passion for pleasure. The son, who had been his father's secretary, had resigned along with his chief, somewhat foolishly as was thought at the time, and on succeeding some months later to the title, had set himself to the serious study of the great aristocratic art of doing absolutely nothing. He had two large town houses, but preferred to live in chambers as it was less trouble, and took most of his meals at his club. He paid some attention to the management of his collieries in the Midland counties, excusing himself for this taint of industry on the ground that the one advantage of having coal was that it enabled a gentleman to afford the decency of burning wood on his own hearth. In politics he was a Tory, except when the Tories were in office, during which period he roundly abused them for being a pack of Radicals. He was a hero to his valet, who bullied him, and a terror to most of his relations, whom he bullied in turn. Only England could have produced him, and he always said that the country was going to the dogs. His principles were out of date, but there was a good deal to be said for his prejudices. When Lord Henry entered the room, he found his uncle sitting in a rough shooting-coat, smoking a cheroot and grumbling over _The Times_. "Well, Harry," said the old gentleman, "what brings you out so early? I thought you dandies never got up till two, and were not visible till five." "Pure family affection, I assure you, Uncle George. I want to get something out of you." "Money, I suppose," said Lord Fermor, making a wry face. "Well, sit down and tell me all about it. Young people, nowadays, imagine that money is everything." "Yes," murmured Lord Henry, settling his button-hole in his coat; "and when they grow older they know it. But I don't want money. It is only people who pay their bills who want that, Uncle George, and I never pay mine. Credit is the capital of a younger son, and one lives charmingly upon it. Besides, I always deal with Dartmoor's tradesmen, and consequently they never bother me. What I want is information: not useful information, of course; useless information." "Well, I can tell you anything that is in an English Blue Book, Harry, although those fellows nowadays write a lot of nonsense. When I was in the Diplomatic, things were much better. But I hear they let them in now by examination. What can you expect? Examinations, sir, are pure humbug from beginning to end. If a man is a gentleman, he knows quite enough, and if he is not a gentleman, whatever he knows is bad for him." "Mr. Dorian Gray does not belong to Blue Books, Uncle George," said Lord Henry languidly. "Mr. Dorian Gray? Who is he?" asked Lord Fermor, knitting his bushy white eyebrows. "That is what I have come to learn, Uncle George. Or rather, I know who he is. He is the last Lord Kelso's grandson. His mother was a Devereux, Lady Margaret Devereux. I want you to tell me about his mother. What was she like? Whom did she marry? You have known nearly everybody in your time, so you might have known her. I am very much interested in Mr. Gray at present. I have only just met him." "Kelso's grandson!" echoed the old gentleman. "Kelso's grandson! ... Of course.... I knew his mother intimately. I believe I was at her christening. She was an extraordinarily beautiful girl, Margaret Devereux, and made all the men frantic by running away with a penniless young fellow--a mere nobody, sir, a subaltern in a foot regiment, or something of that kind. Certainly. I remember the whole thing as if it happened yesterday. The poor chap was killed in a duel at Spa a few months after the marriage. There was an ugly story about it. They said Kelso got some rascally adventurer, some Belgian brute, to insult his son-in-law in public--paid him, sir, to do it, paid him--and that the fellow spitted his man as if he had been a pigeon. The thing was hushed up, but, egad, Kelso ate his chop alone at the club for some time afterwards. He brought his daughter back with him, I was told, and she never spoke to him again. Oh, yes; it was a bad business. The girl died, too, died within a year. So she left a son, did she? I had forgotten that. What sort of boy is he? If he is like his mother, he must be a good-looking chap." "He is very good-looking," assented Lord Henry. "I hope he will fall into proper hands," continued the old man. "He should have a pot of money waiting for him if Kelso did the right thing by him. His mother had money, too. All the Selby property came to her, through her grandfather. Her grandfather hated Kelso, thought him a mean dog. He was, too. Came to Madrid once when I was there. Egad, I was ashamed of him. The Queen used to ask me about the English noble who was always quarrelling with the cabmen about their fares. They made quite a story of it. I didn't dare show my face at Court for a month. I hope he treated his grandson better than he did the jarvies." "I don't know," answered Lord Henry. "I fancy that the boy will be well off. He is not of age yet. He has Selby, I know. He told me so. And ... his mother was very beautiful?" "Margaret Devereux was one of the loveliest creatures I ever saw, Harry. What on earth induced her to behave as she did, I never could understand. She could have married anybody she chose. Carlington was mad after her. She was romantic, though. All the women of that family were. The men were a poor lot, but, egad! the women were wonderful. Carlington went on his knees to her. Told me so himself. She laughed at him, and there wasn't a girl in London at the time who wasn't after him. And by the way, Harry, talking about silly marriages, what is this humbug your father tells me about Dartmoor wanting to marry an American? Ain't English girls good enough for him?" "It is rather fashionable to marry Americans just now, Uncle George." "I'll back English women against the world, Harry," said Lord Fermor, striking the table with his fist. "The betting is on the Americans." "They don't last, I am told," muttered his uncle. "A long engagement exhausts them, but they are capital at a steeplechase. They take things flying. I don't think Dartmoor has a chance." "Who are her people?" grumbled the old gentleman. "Has she got any?" Lord Henry shook his head. "American girls are as clever at concealing their parents, as English women are at concealing their past," he said, rising to go. "They are pork-packers, I suppose?" "I hope so, Uncle George, for Dartmoor's sake. I am told that pork-packing is the most lucrative profession in America, after politics." "Is she pretty?" "She behaves as if she was beautiful. Most American women do. It is the secret of their charm." "Why can't these American women stay in their own country? They are always telling us that it is the paradise for women." "It is. That is the reason why, like Eve, they are so excessively anxious to get out of it," said Lord Henry. "Good-bye, Uncle George. I shall be late for lunch, if I stop any longer. Thanks for giving me the information I wanted. I always like to know everything about my new friends, and nothing about my old ones." "Where are you lunching, Harry?" "At Aunt Agatha's. I have asked myself and Mr. Gray. He is her latest _protege_." "Humph! tell your Aunt Agatha, Harry, not to bother me any more with her charity appeals. I am sick of them. Why, the good woman thinks that I have nothing to do but to write cheques for her silly fads." "All right, Uncle George, I'll tell her, but it won't have any effect. Philanthropic people lose all sense of humanity. It is their distinguishing characteristic." The old gentleman growled approvingly and rang the bell for his servant. Lord Henry passed up the low arcade into Burlington Street and turned his steps in the direction of Berkeley Square. So that was the story of Dorian Gray's parentage. Crudely as it had been told to him, it had yet stirred him by its suggestion of a strange, almost modern romance. A beautiful woman risking everything for a mad passion. A few wild weeks of happiness cut short by a hideous, treacherous crime. Months of voiceless agony, and then a child born in pain. The mother snatched away by death, the boy left to solitude and the tyranny of an old and loveless man. Yes; it was an interesting background. It posed the lad, made him more perfect, as it were. Behind every exquisite thing that existed, there was something tragic. Worlds had to be in travail, that the meanest flower might blow.... And how charming he had been at dinner the night before, as with startled eyes and lips parted in frightened pleasure he had sat opposite to him at the club, the red candleshades staining to a richer rose the wakening wonder of his face. Talking to him was like playing upon an exquisite violin. He answered to every touch and thrill of the bow.... There was something terribly enthralling in the exercise of influence. No other activity was like it. To project one's soul into some gracious form, and let it tarry there for a moment; to hear one's own intellectual views echoed back to one with all the added music of passion and youth; to convey one's temperament into another as though it were a subtle fluid or a strange perfume: there was a real joy in that--perhaps the most satisfying joy left to us in an age so limited and vulgar as our own, an age grossly carnal in its pleasures, and grossly common in its aims.... He was a marvellous type, too, this lad, whom by so curious a chance he had met in Basil's studio, or could be fashioned into a marvellous type, at any rate. Grace was his, and the white purity of boyhood, and beauty such as old Greek marbles kept for us. There was nothing that one could not do with him. He could be made a Titan or a toy. What a pity it was that such beauty was destined to fade! ... And Basil? From a psychological point of view, how interesting he was! The new manner in art, the fresh mode of looking at life, suggested so strangely by the merely visible presence of one who was unconscious of it all; the silent spirit that dwelt in dim woodland, and walked unseen in open field, suddenly showing herself, Dryadlike and not afraid, because in his soul who sought for her there had been wakened that wonderful vision to which alone are wonderful things revealed; the mere shapes and patterns of things becoming, as it were, refined, and gaining a kind of symbolical value, as though they were themselves patterns of some other and more perfect form whose shadow they made real: how strange it all was! He remembered something like it in history. Was it not Plato, that artist in thought, who had first analyzed it? Was it not Buonarotti who had carved it in the coloured marbles of a sonnet-sequence? But in our own century it was strange.... Yes; he would try to be to Dorian Gray what, without knowing it, the lad was to the painter who had fashioned the wonderful portrait. He would seek to dominate him--had already, indeed, half done so. He would make that wonderful spirit his own. There was something fascinating in this son of love and death. Suddenly he stopped and glanced up at the houses. He found that he had passed his aunt's some distance, and, smiling to himself, turned back. When he entered the somewhat sombre hall, the butler told him that they had gone in to lunch. He gave one of the footmen his hat and stick and passed into the dining-room. "Late as usual, Harry," cried his aunt, shaking her head at him. He invented a facile excuse, and having taken the vacant seat next to her, looked round to see who was there. Dorian bowed to him shyly from the end of the table, a flush of pleasure stealing into his cheek. Opposite was the Duchess of Harley, a lady of admirable good-nature and good temper, much liked by every one who knew her, and of those ample architectural proportions that in women who are not duchesses are described by contemporary historians as stoutness. Next to her sat, on her right, Sir Thomas Burdon, a Radical member of Parliament, who followed his leader in public life and in private life followed the best cooks, dining with the Tories and thinking with the Liberals, in accordance with a wise and well-known rule. The post on her left was occupied by Mr. Erskine of Treadley, an old gentleman of considerable charm and culture, who had fallen, however, into bad habits of silence, having, as he explained once to Lady Agatha, said everything that he had to say before he was thirty. His own neighbour was Mrs. Vandeleur, one of his aunt's oldest friends, a perfect saint amongst women, but so dreadfully dowdy that she reminded one of a badly bound hymn-book. Fortunately for him she had on the other side Lord Faudel, a most intelligent middle-aged mediocrity, as bald as a ministerial statement in the House of Commons, with whom she was conversing in that intensely earnest manner which is the one unpardonable error, as he remarked once himself, that all really good people fall into, and from which none of them ever quite escape. "We are talking about poor Dartmoor, Lord Henry," cried the duchess, nodding pleasantly to him across the table. "Do you think he will really marry this fascinating young person?" "I believe she has made up her mind to propose to him, Duchess." "How dreadful!" exclaimed Lady Agatha. "Really, some one should interfere." "I am told, on excellent authority, that her father keeps an American dry-goods store," said Sir Thomas Burdon, looking supercilious. "My uncle has already suggested pork-packing, Sir Thomas." "Dry-goods! What are American dry-goods?" asked the duchess, raising her large hands in wonder and accentuating the verb. "American novels," answered Lord Henry, helping himself to some quail. The duchess looked puzzled. "Don't mind him, my dear," whispered Lady Agatha. "He never means anything that he says." "When America was discovered," said the Radical member--and he began to give some wearisome facts. Like all people who try to exhaust a subject, he exhausted his listeners. The duchess sighed and exercised her privilege of interruption. "I wish to goodness it never had been discovered at all!" she exclaimed. "Really, our girls have no chance nowadays. It is most unfair." "Perhaps, after all, America never has been discovered," said Mr. Erskine; "I myself would say that it had merely been detected." "Oh! but I have seen specimens of the inhabitants," answered the duchess vaguely. "I must confess that most of them are extremely pretty. And they dress well, too. They get all their dresses in Paris. I wish I could afford to do the same." "They say that when good Americans die they go to Paris," chuckled Sir Thomas, who had a large wardrobe of Humour's cast-off clothes. "Really! And where do bad Americans go to when they die?" inquired the duchess. "They go to America," murmured Lord Henry. Sir Thomas frowned. "I am afraid that your nephew is prejudiced against that great country," he said to Lady Agatha. "I have travelled all over it in cars provided by the directors, who, in such matters, are extremely civil. I assure you that it is an education to visit it." "But must we really see Chicago in order to be educated?" asked Mr. Erskine plaintively. "I don't feel up to the journey." Sir Thomas waved his hand. "Mr. Erskine of Treadley has the world on his shelves. We practical men like to see things, not to read about them. The Americans are an extremely interesting people. They are absolutely reasonable. I think that is their distinguishing characteristic. Yes, Mr. Erskine, an absolutely reasonable people. I assure you there is no nonsense about the Americans." "How dreadful!" cried Lord Henry. "I can stand brute force, but brute reason is quite unbearable. There is something unfair about its use. It is hitting below the intellect." "I do not understand you," said Sir Thomas, growing rather red. "I do, Lord Henry," murmured Mr. Erskine, with a smile. "Paradoxes are all very well in their way...." rejoined the baronet. "Was that a paradox?" asked Mr. Erskine. "I did not think so. Perhaps it was. Well, the way of paradoxes is the way of truth. To test reality we must see it on the tight rope. When the verities become acrobats, we can judge them." "Dear me!" said Lady Agatha, "how you men argue! I am sure I never can make out what you are talking about. Oh! Harry, I am quite vexed with you. Why do you try to persuade our nice Mr. Dorian Gray to give up the East End? I assure you he would be quite invaluable. They would love his playing." "I want him to play to me," cried Lord Henry, smiling, and he looked down the table and caught a bright answering glance. "But they are so unhappy in Whitechapel," continued Lady Agatha. "I can sympathize with everything except suffering," said Lord Henry, shrugging his shoulders. "I cannot sympathize with that. It is too ugly, too horrible, too distressing. There is something terribly morbid in the modern sympathy with pain. One should sympathize with the colour, the beauty, the joy of life. The less said about life's sores, the better." "Still, the East End is a very important problem," remarked Sir Thomas with a grave shake of the head. "Quite so," answered the young lord. "It is the problem of slavery, and we try to solve it by amusing the slaves." The politician looked at him keenly. "What change do you propose, then?" he asked. Lord Henry laughed. "I don't desire to change anything in England except the weather," he answered. "I am quite content with philosophic contemplation. But, as the nineteenth century has gone bankrupt through an over-expenditure of sympathy, I would suggest that we should appeal to science to put us straight. The advantage of the emotions is that they lead us astray, and the advantage of science is that it is not emotional." "But we have such grave responsibilities," ventured Mrs. Vandeleur timidly. "Terribly grave," echoed Lady Agatha. Lord Henry looked over at Mr. Erskine. "Humanity takes itself too seriously. It is the world's original sin. If the caveman had known how to laugh, history would have been different." "You are really very comforting," warbled the duchess. "I have always felt rather guilty when I came to see your dear aunt, for I take no interest at all in the East End. For the future I shall be able to look her in the face without a blush." "A blush is very becoming, Duchess," remarked Lord Henry. "Only when one is young," she answered. "When an old woman like myself blushes, it is a very bad sign. Ah! Lord Henry, I wish you would tell me how to become young again." He thought for a moment. "Can you remember any great error that you committed in your early days, Duchess?" he asked, looking at her across the table. "A great many, I fear," she cried. "Then commit them over again," he said gravely. "To get back one's youth, one has merely to repeat one's follies." "A delightful theory!" she exclaimed. "I must put it into practice." "A dangerous theory!" came from Sir Thomas's tight lips. Lady Agatha shook her head, but could not help being amused. Mr. Erskine listened. "Yes," he continued, "that is one of the great secrets of life. Nowadays most people die of a sort of creeping common sense, and discover when it is too late that the only things one never regrets are one's mistakes." A laugh ran round the table. He played with the idea and grew wilful; tossed it into the air and transformed it; let it escape and recaptured it; made it iridescent with fancy and winged it with paradox. The praise of folly, as he went on, soared into a philosophy, and philosophy herself became young, and catching the mad music of pleasure, wearing, one might fancy, her wine-stained robe and wreath of ivy, danced like a Bacchante over the hills of life, and mocked the slow Silenus for being sober. Facts fled before her like frightened forest things. Her white feet trod the huge press at which wise Omar sits, till the seething grape-juice rose round her bare limbs in waves of purple bubbles, or crawled in red foam over the vat's black, dripping, sloping sides. It was an extraordinary improvisation. He felt that the eyes of Dorian Gray were fixed on him, and the consciousness that amongst his audience there was one whose temperament he wished to fascinate seemed to give his wit keenness and to lend colour to his imagination. He was brilliant, fantastic, irresponsible. He charmed his listeners out of themselves, and they followed his pipe, laughing. Dorian Gray never took his gaze off him, but sat like one under a spell, smiles chasing each other over his lips and wonder growing grave in his darkening eyes. At last, liveried in the costume of the age, reality entered the room in the shape of a servant to tell the duchess that her carriage was waiting. She wrung her hands in mock despair. "How annoying!" she cried. "I must go. I have to call for my husband at the club, to take him to some absurd meeting at Willis's Rooms, where he is going to be in the chair. If I am late he is sure to be furious, and I couldn't have a scene in this bonnet. It is far too fragile. A harsh word would ruin it. No, I must go, dear Agatha. Good-bye, Lord Henry, you are quite delightful and dreadfully demoralizing. I am sure I don't know what to say about your views. You must come and dine with us some night. Tuesday? Are you disengaged Tuesday?" "For you I would throw over anybody, Duchess," said Lord Henry with a bow. "Ah! that is very nice, and very wrong of you," she cried; "so mind you come"; and she swept out of the room, followed by Lady Agatha and the other ladies. When Lord Henry had sat down again, Mr. Erskine moved round, and taking a chair close to him, placed his hand upon his arm. "You talk books away," he said; "why don't you write one?" "I am too fond of reading books to care to write them, Mr. Erskine. I should like to write a novel certainly, a novel that would be as lovely as a Persian carpet and as unreal. But there is no literary public in England for anything except newspapers, primers, and encyclopaedias. Of all people in the world the English have the least sense of the beauty of literature." "I fear you are right," answered Mr. Erskine. "I myself used to have literary ambitions, but I gave them up long ago. And now, my dear young friend, if you will allow me to call you so, may I ask if you really meant all that you said to us at lunch?" "I quite forget what I said," smiled Lord Henry. "Was it all very bad?" "Very bad indeed. In fact I consider you extremely dangerous, and if anything happens to our good duchess, we shall all look on you as being primarily responsible. But I should like to talk to you about life. The generation into which I was born was tedious. Some day, when you are tired of London, come down to Treadley and expound to me your philosophy of pleasure over some admirable Burgundy I am fortunate enough to possess." "I shall be charmed. A visit to Treadley would be a great privilege. It has a perfect host, and a perfect library." "You will complete it," answered the old gentleman with a courteous bow. "And now I must bid good-bye to your excellent aunt. I am due at the Athenaeum. It is the hour when we sleep there." "All of you, Mr. Erskine?" "Forty of us, in forty arm-chairs. We are practising for an English Academy of Letters." Lord Henry laughed and rose. "I am going to the park," he cried. As he was passing out of the door, Dorian Gray touched him on the arm. "Let me come with you," he murmured. "But I thought you had promised Basil Hallward to go and see him," answered Lord Henry. "I would sooner come with you; yes, I feel I must come with you. Do let me. And you will promise to talk to me all the time? No one talks so wonderfully as you do." "Ah! I have talked quite enough for to-day," said Lord Henry, smiling. "All I want now is to look at life. You may come and look at it with me, if you care to." CHAPTER 4 One afternoon, a month later, Dorian Gray was reclining in a luxurious arm-chair, in the little library of Lord Henry's house in Mayfair. It was, in its way, a very charming room, with its high panelled wainscoting of olive-stained oak, its cream-coloured frieze and ceiling of raised plasterwork, and its brickdust felt carpet strewn with silk, long-fringed Persian rugs. On a tiny satinwood table stood a statuette by Clodion, and beside it lay a copy of Les Cent Nouvelles, bound for Margaret of Valois by Clovis Eve and powdered with the gilt daisies that Queen had selected for her device. Some large blue china jars and parrot-tulips were ranged on the mantelshelf, and through the small leaded panes of the window streamed the apricot-coloured light of a summer day in London. Lord Henry had not yet come in. He was always late on principle, his principle being that punctuality is the thief of time. So the lad was looking rather sulky, as with listless fingers he turned over the pages of an elaborately illustrated edition of Manon Lescaut that he had found in one of the book-cases. The formal monotonous ticking of the Louis Quatorze clock annoyed him. Once or twice he thought of going away. At last he heard a step outside, and the door opened. "How late you are, Harry!" he murmured. "I am afraid it is not Harry, Mr. Gray," answered a shrill voice. He glanced quickly round and rose to his feet. "I beg your pardon. I thought--" "You thought it was my husband. It is only his wife. You must let me introduce myself. I know you quite well by your photographs. I think my husband has got seventeen of them." "Not seventeen, Lady Henry?" "Well, eighteen, then. And I saw you with him the other night at the opera." She laughed nervously as she spoke, and watched him with her vague forget-me-not eyes. She was a curious woman, whose dresses always looked as if they had been designed in a rage and put on in a tempest. She was usually in love with somebody, and, as her passion was never returned, she had kept all her illusions. She tried to look picturesque, but only succeeded in being untidy. Her name was Victoria, and she had a perfect mania for going to church. "That was at Lohengrin, Lady Henry, I think?" "Yes; it was at dear Lohengrin. I like Wagner's music better than anybody's. It is so loud that one can talk the whole time without other people hearing what one says. That is a great advantage, don't you think so, Mr. Gray?" The same nervous staccato laugh broke from her thin lips, and her fingers began to play with a long tortoise-shell paper-knife. Dorian smiled and shook his head: "I am afraid I don't think so, Lady Henry. I never talk during music--at least, during good music. If one hears bad music, it is one's duty to drown it in conversation." "Ah! that is one of Harry's views, isn't it, Mr. Gray? I always hear Harry's views from his friends. It is the only way I get to know of them. But you must not think I don't like good music. I adore it, but I am afraid of it. It makes me too romantic. I have simply worshipped pianists--two at a time, sometimes, Harry tells me. I don't know what it is about them. Perhaps it is that they are foreigners. They all are, ain't they? Even those that are born in England become foreigners after a time, don't they? It is so clever of them, and such a compliment to art. Makes it quite cosmopolitan, doesn't it? You have never been to any of my parties, have you, Mr. Gray? You must come. I can't afford orchids, but I spare no expense in foreigners. They make one's rooms look so picturesque. But here is Harry! Harry, I came in to look for you, to ask you something--I forget what it was--and I found Mr. Gray here. We have had such a pleasant chat about music. We have quite the same ideas. No; I think our ideas are quite different. But he has been most pleasant. I am so glad I've seen him." "I am charmed, my love, quite charmed," said Lord Henry, elevating his dark, crescent-shaped eyebrows and looking at them both with an amused smile. "So sorry I am late, Dorian. I went to look after a piece of old brocade in Wardour Street and had to bargain for hours for it. Nowadays people know the price of everything and the value of nothing." "I am afraid I must be going," exclaimed Lady Henry, breaking an awkward silence with her silly sudden laugh. "I have promised to drive with the duchess. Good-bye, Mr. Gray. Good-bye, Harry. You are dining out, I suppose? So am I. Perhaps I shall see you at Lady Thornbury's." "I dare say, my dear," said Lord Henry, shutting the door behind her as, looking like a bird of paradise that had been out all night in the rain, she flitted out of the room, leaving a faint odour of frangipanni. Then he lit a cigarette and flung himself down on the sofa. "Never marry a woman with straw-coloured hair, Dorian," he said after a few puffs. "Why, Harry?" "Because they are so sentimental." "But I like sentimental people." "Never marry at all, Dorian. Men marry because they are tired; women, because they are curious: both are disappointed." "I don't think I am likely to marry, Harry. I am too much in love. That is one of your aphorisms. I am putting it into practice, as I do everything that you say." "Who are you in love with?" asked Lord Henry after a pause. "With an actress," said Dorian Gray, blushing. Lord Henry shrugged his shoulders. "That is a rather commonplace _debut_." "You would not say so if you saw her, Harry." "Who is she?" "Her name is Sibyl Vane." "Never heard of her." "No one has. People will some day, however. She is a genius." "My dear boy, no woman is a genius. Women are a decorative sex. They never have anything to say, but they say it charmingly. Women represent the triumph of matter over mind, just as men represent the triumph of mind over morals." "Harry, how can you?" "My dear Dorian, it is quite true. I am analysing women at present, so I ought to know. The subject is not so abstruse as I thought it was. I find that, ultimately, there are only two kinds of women, the plain and the coloured. The plain women are very useful. If you want to gain a reputation for respectability, you have merely to take them down to supper. The other women are very charming. They commit one mistake, however. They paint in order to try and look young. Our grandmothers painted in order to try and talk brilliantly. _Rouge_ and _esprit_ used to go together. That is all over now. As long as a woman can look ten years younger than her own daughter, she is perfectly satisfied. As for conversation, there are only five women in London worth talking to, and two of these can't be admitted into decent society. However, tell me about your genius. How long have you known her?" "Ah! Harry, your views terrify me." "Never mind that. How long have you known her?" "About three weeks." "And where did you come across her?" "I will tell you, Harry, but you mustn't be unsympathetic about it. After all, it never would have happened if I had not met you. You filled me with a wild desire to know everything about life. For days after I met you, something seemed to throb in my veins. As I lounged in the park, or strolled down Piccadilly, I used to look at every one who passed me and wonder, with a mad curiosity, what sort of lives they led. Some of them fascinated me. Others filled me with terror. There was an exquisite poison in the air. I had a passion for sensations.... Well, one evening about seven o'clock, I determined to go out in search of some adventure. I felt that this grey monstrous London of ours, with its myriads of people, its sordid sinners, and its splendid sins, as you once phrased it, must have something in store for me. I fancied a thousand things. The mere danger gave me a sense of delight. I remembered what you had said to me on that wonderful evening when we first dined together, about the search for beauty being the real secret of life. I don't know what I expected, but I went out and wandered eastward, soon losing my way in a labyrinth of grimy streets and black grassless squares. About half-past eight I passed by an absurd little theatre, with great flaring gas-jets and gaudy play-bills. A hideous Jew, in the most amazing waistcoat I ever beheld in my life, was standing at the entrance, smoking a vile cigar. He had greasy ringlets, and an enormous diamond blazed in the centre of a soiled shirt. 'Have a box, my Lord?' he said, when he saw me, and he took off his hat with an air of gorgeous servility. There was something about him, Harry, that amused me. He was such a monster. You will laugh at me, I know, but I really went in and paid a whole guinea for the stage-box. To the present day I can't make out why I did so; and yet if I hadn't--my dear Harry, if I hadn't--I should have missed the greatest romance of my life. I see you are laughing. It is horrid of you!" "I am not laughing, Dorian; at least I am not laughing at you. But you should not say the greatest romance of your life. You should say the first romance of your life. You will always be loved, and you will always be in love with love. A _grande passion_ is the privilege of people who have nothing to do. That is the one use of the idle classes of a country. Don't be afraid. There are exquisite things in store for you. This is merely the beginning." "Do you think my nature so shallow?" cried Dorian Gray angrily. "No; I think your nature so deep." "How do you mean?" "My dear boy, the people who love only once in their lives are really the shallow people. What they call their loyalty, and their fidelity, I call either the lethargy of custom or their lack of imagination. Faithfulness is to the emotional life what consistency is to the life of the intellect--simply a confession of failure. Faithfulness! I must analyse it some day. The passion for property is in it. There are many things that we would throw away if we were not afraid that others might pick them up. But I don't want to interrupt you. Go on with your story." "Well, I found myself seated in a horrid little private box, with a vulgar drop-scene staring me in the face. I looked out from behind the curtain and surveyed the house. It was a tawdry affair, all Cupids and cornucopias, like a third-rate wedding-cake. The gallery and pit were fairly full, but the two rows of dingy stalls were quite empty, and there was hardly a person in what I suppose they called the dress-circle. Women went about with oranges and ginger-beer, and there was a terrible consumption of nuts going on." "It must have been just like the palmy days of the British drama." "Just like, I should fancy, and very depressing. I began to wonder what on earth I should do when I caught sight of the play-bill. What do you think the play was, Harry?" "I should think 'The Idiot Boy', or 'Dumb but Innocent'. Our fathers used to like that sort of piece, I believe. The longer I live, Dorian, the more keenly I feel that whatever was good enough for our fathers is not good enough for us. In art, as in politics, _les grandperes ont toujours tort_." "This play was good enough for us, Harry. It was Romeo and Juliet. I must admit that I was rather annoyed at the idea of seeing Shakespeare done in such a wretched hole of a place. Still, I felt interested, in a sort of way. At any rate, I determined to wait for the first act. There was a dreadful orchestra, presided over by a young Hebrew who sat at a cracked piano, that nearly drove me away, but at last the drop-scene was drawn up and the play began. Romeo was a stout elderly gentleman, with corked eyebrows, a husky tragedy voice, and a figure like a beer-barrel. Mercutio was almost as bad. He was played by the low-comedian, who had introduced gags of his own and was on most friendly terms with the pit. They were both as grotesque as the scenery, and that looked as if it had come out of a country-booth. But Juliet! Harry, imagine a girl, hardly seventeen years of age, with a little, flowerlike face, a small Greek head with plaited coils of dark-brown hair, eyes that were violet wells of passion, lips that were like the petals of a rose. She was the loveliest thing I had ever seen in my life. You said to me once that pathos left you unmoved, but that beauty, mere beauty, could fill your eyes with tears. I tell you, Harry, I could hardly see this girl for the mist of tears that came across me. And her voice--I never heard such a voice. It was very low at first, with deep mellow notes that seemed to fall singly upon one's ear. Then it became a little louder, and sounded like a flute or a distant hautboy. In the garden-scene it had all the tremulous ecstasy that one hears just before dawn when nightingales are singing. There were moments, later on, when it had the wild passion of violins. You know how a voice can stir one. Your voice and the voice of Sibyl Vane are two things that I shall never forget. When I close my eyes, I hear them, and each of them says something different. I don't know which to follow. Why should I not love her? Harry, I do love her. She is everything to me in life. Night after night I go to see her play. One evening she is Rosalind, and the next evening she is Imogen. I have seen her die in the gloom of an Italian tomb, sucking the poison from her lover's lips. I have watched her wandering through the forest of Arden, disguised as a pretty boy in hose and doublet and dainty cap. She has been mad, and has come into the presence of a guilty king, and given him rue to wear and bitter herbs to taste of. She has been innocent, and the black hands of jealousy have crushed her reedlike throat. I have seen her in every age and in every costume. Ordinary women never appeal to one's imagination. They are limited to their century. No glamour ever transfigures them. One knows their minds as easily as one knows their bonnets. One can always find them. There is no mystery in any of them. They ride in the park in the morning and chatter at tea-parties in the afternoon. They have their stereotyped smile and their fashionable manner. They are quite obvious. But an actress! How different an actress is! Harry! why didn't you tell me that the only thing worth loving is an actress?" "Because I have loved so many of them, Dorian." "Oh, yes, horrid people with dyed hair and painted faces." "Don't run down dyed hair and painted faces. There is an extraordinary charm in them, sometimes," said Lord Henry. "I wish now I had not told you about Sibyl Vane." "You could not have helped telling me, Dorian. All through your life you will tell me everything you do." "Yes, Harry, I believe that is true. I cannot help telling you things. You have a curious influence over me. If I ever did a crime, I would come and confess it to you. You would understand me." "People like you--the wilful sunbeams of life--don't commit crimes, Dorian. But I am much obliged for the compliment, all the same. And now tell me--reach me the matches, like a good boy--thanks--what are your actual relations with Sibyl Vane?" Dorian Gray leaped to his feet, with flushed cheeks and burning eyes. "Harry! Sibyl Vane is sacred!" "It is only the sacred things that are worth touching, Dorian," said Lord Henry, with a strange touch of pathos in his voice. "But why should you be annoyed? I suppose she will belong to you some day. When one is in love, one always begins by deceiving one's self, and one always ends by deceiving others. That is what the world calls a romance. You know her, at any rate, I suppose?" "Of course I know her. On the first night I was at the theatre, the horrid old Jew came round to the box after the performance was over and offered to take me behind the scenes and introduce me to her. I was furious with him, and told him that Juliet had been dead for hundreds of years and that her body was lying in a marble tomb in Verona. I think, from his blank look of amazement, that he was under the impression that I had taken too much champagne, or something." "I am not surprised." "Then he asked me if I wrote for any of the newspapers. I told him I never even read them. He seemed terribly disappointed at that, and confided to me that all the dramatic critics were in a conspiracy against him, and that they were every one of them to be bought." "I should not wonder if he was quite right there. But, on the other hand, judging from their appearance, most of them cannot be at all expensive." "Well, he seemed to think they were beyond his means," laughed Dorian. "By this time, however, the lights were being put out in the theatre, and I had to go. He wanted me to try some cigars that he strongly recommended. I declined. The next night, of course, I arrived at the place again. When he saw me, he made me a low bow and assured me that I was a munificent patron of art. He was a most offensive brute, though he had an extraordinary passion for Shakespeare. He told me once, with an air of pride, that his five bankruptcies were entirely due to 'The Bard,' as he insisted on calling him. He seemed to think it a distinction." "It was a distinction, my dear Dorian--a great distinction. Most people become bankrupt through having invested too heavily in the prose of life. To have ruined one's self over poetry is an honour. But when did you first speak to Miss Sibyl Vane?" "The third night. She had been playing Rosalind. I could not help going round. I had thrown her some flowers, and she had looked at me--at least I fancied that she had. The old Jew was persistent. He seemed determined to take me behind, so I consented. It was curious my not wanting to know her, wasn't it?" "No; I don't think so." "My dear Harry, why?" "I will tell you some other time. Now I want to know about the girl." "Sibyl? Oh, she was so shy and so gentle. There is something of a child about her. Her eyes opened wide in exquisite wonder when I told her what I thought of her performance, and she seemed quite unconscious of her power. I think we were both rather nervous. The old Jew stood grinning at the doorway of the dusty greenroom, making elaborate speeches about us both, while we stood looking at each other like children. He would insist on calling me 'My Lord,' so I had to assure Sibyl that I was not anything of the kind. She said quite simply to me, 'You look more like a prince. I must call you Prince Charming.'" "Upon my word, Dorian, Miss Sibyl knows how to pay compliments." "You don't understand her, Harry. She regarded me merely as a person in a play. She knows nothing of life. She lives with her mother, a faded tired woman who played Lady Capulet in a sort of magenta dressing-wrapper on the first night, and looks as if she had seen better days." "I know that look. It depresses me," murmured Lord Henry, examining his rings. "The Jew wanted to tell me her history, but I said it did not interest me." "You were quite right. There is always something infinitely mean about other people's tragedies." "Sibyl is the only thing I care about. What is it to me where she came from? From her little head to her little feet, she is absolutely and entirely divine. Every night of my life I go to see her act, and every night she is more marvellous." "That is the reason, I suppose, that you never dine with me now. I thought you must have some curious romance on hand. You have; but it is not quite what I expected." "My dear Harry, we either lunch or sup together every day, and I have been to the opera with you several times," said Dorian, opening his blue eyes in wonder. "You always come dreadfully late." "Well, I can't help going to see Sibyl play," he cried, "even if it is only for a single act. I get hungry for her presence; and when I think of the wonderful soul that is hidden away in that little ivory body, I am filled with awe." "You can dine with me to-night, Dorian, can't you?" He shook his head. "To-night she is Imogen," he answered, "and to-morrow night she will be Juliet." "When is she Sibyl Vane?" "Never." "I congratulate you." "How horrid you are! She is all the great heroines of the world in one. She is more than an individual. You laugh, but I tell you she has genius. I love her, and I must make her love me. You, who know all the secrets of life, tell me how to charm Sibyl Vane to love me! I want to make Romeo jealous. I want the dead lovers of the world to hear our laughter and grow sad. I want a breath of our passion to stir their dust into consciousness, to wake their ashes into pain. My God, Harry, how I worship her!" He was walking up and down the room as he spoke. Hectic spots of red burned on his cheeks. He was terribly excited. Lord Henry watched him with a subtle sense of pleasure. How different he was now from the shy frightened boy he had met in Basil Hallward's studio! His nature had developed like a flower, had borne blossoms of scarlet flame. Out of its secret hiding-place had crept his soul, and desire had come to meet it on the way. "And what do you propose to do?" said Lord Henry at last. "I want you and Basil to come with me some night and see her act. I have not the slightest fear of the result. You are certain to acknowledge her genius. Then we must get her out of the Jew's hands. She is bound to him for three years--at least for two years and eight months--from the present time. I shall have to pay him something, of course. When all that is settled, I shall take a West End theatre and bring her out properly. She will make the world as mad as she has made me." "That would be impossible, my dear boy." "Yes, she will. She has not merely art, consummate art-instinct, in her, but she has personality also; and you have often told me that it is personalities, not principles, that move the age." "Well, what night shall we go?" "Let me see. To-day is Tuesday. Let us fix to-morrow. She plays Juliet to-morrow." "All right. The Bristol at eight o'clock; and I will get Basil." "Not eight, Harry, please. Half-past six. We must be there before the curtain rises. You must see her in the first act, where she meets Romeo." "Half-past six! What an hour! It will be like having a meat-tea, or reading an English novel. It must be seven. No gentleman dines before seven. Shall you see Basil between this and then? Or shall I write to him?" "Dear Basil! I have not laid eyes on him for a week. It is rather horrid of me, as he has sent me my portrait in the most wonderful frame, specially designed by himself, and, though I am a little jealous of the picture for being a whole month younger than I am, I must admit that I delight in it. Perhaps you had better write to him. I don't want to see him alone. He says things that annoy me. He gives me good advice." Lord Henry smiled. "People are very fond of giving away what they need most themselves. It is what I call the depth of generosity." "Oh, Basil is the best of fellows, but he seems to me to be just a bit of a Philistine. Since I have known you, Harry, I have discovered that." "Basil, my dear boy, puts everything that is charming in him into his work. The consequence is that he has nothing left for life but his prejudices, his principles, and his common sense. The only artists I have ever known who are personally delightful are bad artists. Good artists exist simply in what they make, and consequently are perfectly uninteresting in what they are. A great poet, a really great poet, is the most unpoetical of all creatures. But inferior poets are absolutely fascinating. The worse their rhymes are, the more picturesque they look. The mere fact of having published a book of second-rate sonnets makes a man quite irresistible. He lives the poetry that he cannot write. The others write the poetry that they dare not realize." "I wonder is that really so, Harry?" said Dorian Gray, putting some perfume on his handkerchief out of a large, gold-topped bottle that stood on the table. "It must be, if you say it. And now I am off. Imogen is waiting for me. Don't forget about to-morrow. Good-bye." As he left the room, Lord Henry's heavy eyelids drooped, and he began to think. Certainly few people had ever interested him so much as Dorian Gray, and yet the lad's mad adoration of some one else caused him not the slightest pang of annoyance or jealousy. He was pleased by it. It made him a more interesting study. He had been always enthralled by the methods of natural science, but the ordinary subject-matter of that science had seemed to him trivial and of no import. And so he had begun by vivisecting himself, as he had ended by vivisecting others. Human life--that appeared to him the one thing worth investigating. Compared to it there was nothing else of any value. It was true that as one watched life in its curious crucible of pain and pleasure, one could not wear over one's face a mask of glass, nor keep the sulphurous fumes from troubling the brain and making the imagination turbid with monstrous fancies and misshapen dreams. There were poisons so subtle that to know their properties one had to sicken of them. There were maladies so strange that one had to pass through them if one sought to understand their nature. And, yet, what a great reward one received! How wonderful the whole world became to one! To note the curious hard logic of passion, and the emotional coloured life of the intellect--to observe where they met, and where they separated, at what point they were in unison, and at what point they were at discord--there was a delight in that! What matter what the cost was? One could never pay too high a price for any sensation. He was conscious--and the thought brought a gleam of pleasure into his brown agate eyes--that it was through certain words of his, musical words said with musical utterance, that Dorian Gray's soul had turned to this white girl and bowed in worship before her. To a large extent the lad was his own creation. He had made him premature. That was something. Ordinary people waited till life disclosed to them its secrets, but to the few, to the elect, the mysteries of life were revealed before the veil was drawn away. Sometimes this was the effect of art, and chiefly of the art of literature, which dealt immediately with the passions and the intellect. But now and then a complex personality took the place and assumed the office of art, was indeed, in its way, a real work of art, life having its elaborate masterpieces, just as poetry has, or sculpture, or painting. Yes, the lad was premature. He was gathering his harvest while it was yet spring. The pulse and passion of youth were in him, but he was becoming self-conscious. It was delightful to watch him. With his beautiful face, and his beautiful soul, he was a thing to wonder at. It was no matter how it all ended, or was destined to end. He was like one of those gracious figures in a pageant or a play, whose joys seem to be remote from one, but whose sorrows stir one's sense of beauty, and whose wounds are like red roses. Soul and body, body and soul--how mysterious they were! There was animalism in the soul, and the body had its moments of spirituality. The senses could refine, and the intellect could degrade. Who could say where the fleshly impulse ceased, or the psychical impulse began? How shallow were the arbitrary definitions of ordinary psychologists! And yet how difficult to decide between the claims of the various schools! Was the soul a shadow seated in the house of sin? Or was the body really in the soul, as Giordano Bruno thought? The separation of spirit from matter was a mystery, and the union of spirit with matter was a mystery also. He began to wonder whether we could ever make psychology so absolute a science that each little spring of life would be revealed to us. As it was, we always misunderstood ourselves and rarely understood others. Experience was of no ethical value. It was merely the name men gave to their mistakes. Moralists had, as a rule, regarded it as a mode of warning, had claimed for it a certain ethical efficacy in the formation of character, had praised it as something that taught us what to follow and showed us what to avoid. But there was no motive power in experience. It was as little of an active cause as conscience itself. All that it really demonstrated was that our future would be the same as our past, and that the sin we had done once, and with loathing, we would do many times, and with joy. It was clear to him that the experimental method was the only method by which one could arrive at any scientific analysis of the passions; and certainly Dorian Gray was a subject made to his hand, and seemed to promise rich and fruitful results. His sudden mad love for Sibyl Vane was a psychological phenomenon of no small interest. There was no doubt that curiosity had much to do with it, curiosity and the desire for new experiences, yet it was not a simple, but rather a very complex passion. What there was in it of the purely sensuous instinct of boyhood had been transformed by the workings of the imagination, changed into something that seemed to the lad himself to be remote from sense, and was for that very reason all the more dangerous. It was the passions about whose origin we deceived ourselves that tyrannized most strongly over us. Our weakest motives were those of whose nature we were conscious. It often happened that when we thought we were experimenting on others we were really experimenting on ourselves. While Lord Henry sat dreaming on these things, a knock came to the door, and his valet entered and reminded him it was time to dress for dinner. He got up and looked out into the street. The sunset had smitten into scarlet gold the upper windows of the houses opposite. The panes glowed like plates of heated metal. The sky above was like a faded rose. He thought of his friend's young fiery-coloured life and wondered how it was all going to end. When he arrived home, about half-past twelve o'clock, he saw a telegram lying on the hall table. He opened it and found it was from Dorian Gray. It was to tell him that he was engaged to be married to Sibyl Vane. CHAPTER 5 "Mother, Mother, I am so happy!" whispered the girl, burying her face in the lap of the faded, tired-looking woman who, with back turned to the shrill intrusive light, was sitting in the one arm-chair that their dingy sitting-room contained. "I am so happy!" she repeated, "and you must be happy, too!" Mrs. Vane winced and put her thin, bismuth-whitened hands on her daughter's head. "Happy!" she echoed, "I am only happy, Sibyl, when I see you act. You must not think of anything but your acting. Mr. Isaacs has been very good to us, and we owe him money." The girl looked up and pouted. "Money, Mother?" she cried, "what does money matter? Love is more than money." "Mr. Isaacs has advanced us fifty pounds to pay off our debts and to get a proper outfit for James. You must not forget that, Sibyl. Fifty pounds is a very large sum. Mr. Isaacs has been most considerate." "He is not a gentleman, Mother, and I hate the way he talks to me," said the girl, rising to her feet and going over to the window. "I don't know how we could manage without him," answered the elder woman querulously. Sibyl Vane tossed her head and laughed. "We don't want him any more, Mother. Prince Charming rules life for us now." Then she paused. A rose shook in her blood and shadowed her cheeks. Quick breath parted the petals of her lips. They trembled. Some southern wind of passion swept over her and stirred the dainty folds of her dress. "I love him," she said simply. "Foolish child! foolish child!" was the parrot-phrase flung in answer. The waving of crooked, false-jewelled fingers gave grotesqueness to the words. The girl laughed again. The joy of a caged bird was in her voice. Her eyes caught the melody and echoed it in radiance, then closed for a moment, as though to hide their secret. When they opened, the mist of a dream had passed across them. Thin-lipped wisdom spoke at her from the worn chair, hinted at prudence, quoted from that book of cowardice whose author apes the name of common sense. She did not listen. She was free in her prison of passion. Her prince, Prince Charming, was with her. She had called on memory to remake him. She had sent her soul to search for him, and it had brought him back. His kiss burned again upon her mouth. Her eyelids were warm with his breath. Then wisdom altered its method and spoke of espial and discovery. This young man might be rich. If so, marriage should be thought of. Against the shell of her ear broke the waves of worldly cunning. The arrows of craft shot by her. She saw the thin lips moving, and smiled. Suddenly she felt the need to speak. The wordy silence troubled her. "Mother, Mother," she cried, "why does he love me so much? I know why I love him. I love him because he is like what love himself should be. But what does he see in me? I am not worthy of him. And yet--why, I cannot tell--though I feel so much beneath him, I don't feel humble. I feel proud, terribly proud. Mother, did you love my father as I love Prince Charming?" The elder woman grew pale beneath the coarse powder that daubed her cheeks, and her dry lips twitched with a spasm of pain. Sybil rushed to her, flung her arms round her neck, and kissed her. "Forgive me, Mother. I know it pains you to talk about our father. But it only pains you because you loved him so much. Don't look so sad. I am as happy to-day as you were twenty years ago. Ah! let me be happy for ever!" "My child, you are far too young to think of falling in love. Besides, what do you know of this young man? You don't even know his name. The whole thing is most inconvenient, and really, when James is going away to Australia, and I have so much to think of, I must say that you should have shown more consideration. However, as I said before, if he is rich ..." "Ah! Mother, Mother, let me be happy!" Mrs. Vane glanced at her, and with one of those false theatrical gestures that so often become a mode of second nature to a stage-player, clasped her in her arms. At this moment, the door opened and a young lad with rough brown hair came into the room. He was thick-set of figure, and his hands and feet were large and somewhat clumsy in movement. He was not so finely bred as his sister. One would hardly have guessed the close relationship that existed between them. Mrs. Vane fixed her eyes on him and intensified her smile. She mentally elevated her son to the dignity of an audience. She felt sure that the _tableau_ was interesting. "You might keep some of your kisses for me, Sibyl, I think," said the lad with a good-natured grumble. "Ah! but you don't like being kissed, Jim," she cried. "You are a dreadful old bear." And she ran across the room and hugged him. James Vane looked into his sister's face with tenderness. "I want you to come out with me for a walk, Sibyl. I don't suppose I shall ever see this horrid London again. I am sure I don't want to." "My son, don't say such dreadful things," murmured Mrs. Vane, taking up a tawdry theatrical dress, with a sigh, and beginning to patch it. She felt a little disappointed that he had not joined the group. It would have increased the theatrical picturesqueness of the situation. "Why not, Mother? I mean it." "You pain me, my son. I trust you will return from Australia in a position of affluence. I believe there is no society of any kind in the Colonies--nothing that I would call society--so when you have made your fortune, you must come back and assert yourself in London." "Society!" muttered the lad. "I don't want to know anything about that. I should like to make some money to take you and Sibyl off the stage. I hate it." "Oh, Jim!" said Sibyl, laughing, "how unkind of you! But are you really going for a walk with me? That will be nice! I was afraid you were going to say good-bye to some of your friends--to Tom Hardy, who gave you that hideous pipe, or Ned Langton, who makes fun of you for smoking it. It is very sweet of you to let me have your last afternoon. Where shall we go? Let us go to the park." "I am too shabby," he answered, frowning. "Only swell people go to the park." "Nonsense, Jim," she whispered, stroking the sleeve of his coat. He hesitated for a moment. "Very well," he said at last, "but don't be too long dressing." She danced out of the door. One could hear her singing as she ran upstairs. Her little feet pattered overhead. He walked up and down the room two or three times. Then he turned to the still figure in the chair. "Mother, are my things ready?" he asked. "Quite ready, James," she answered, keeping her eyes on her work. For some months past she had felt ill at ease when she was alone with this rough stern son of hers. Her shallow secret nature was troubled when their eyes met. She used to wonder if he suspected anything. The silence, for he made no other observation, became intolerable to her. She began to complain. Women defend themselves by attacking, just as they attack by sudden and strange surrenders. "I hope you will be contented, James, with your sea-faring life," she said. "You must remember that it is your own choice. You might have entered a solicitor's office. Solicitors are a very respectable class, and in the country often dine with the best families." "I hate offices, and I hate clerks," he replied. "But you are quite right. I have chosen my own life. All I say is, watch over Sibyl. Don't let her come to any harm. Mother, you must watch over her." "James, you really talk very strangely. Of course I watch over Sibyl." "I hear a gentleman comes every night to the theatre and goes behind to talk to her. Is that right? What about that?" "You are speaking about things you don't understand, James. In the profession we are accustomed to receive a great deal of most gratifying attention. I myself used to receive many bouquets at one time. That was when acting was really understood. As for Sibyl, I do not know at present whether her attachment is serious or not. But there is no doubt that the young man in question is a perfect gentleman. He is always most polite to me. Besides, he has the appearance of being rich, and the flowers he sends are lovely." "You don't know his name, though," said the lad harshly. "No," answered his mother with a placid expression in her face. "He has not yet revealed his real name. I think it is quite romantic of him. He is probably a member of the aristocracy." James Vane bit his lip. "Watch over Sibyl, Mother," he cried, "watch over her." "My son, you distress me very much. Sibyl is always under my special care. Of course, if this gentleman is wealthy, there is no reason why she should not contract an alliance with him. I trust he is one of the aristocracy. He has all the appearance of it, I must say. It might be a most brilliant marriage for Sibyl. They would make a charming couple. His good looks are really quite remarkable; everybody notices them." The lad muttered something to himself and drummed on the window-pane with his coarse fingers. He had just turned round to say something when the door opened and Sibyl ran in. "How serious you both are!" she cried. "What is the matter?" "Nothing," he answered. "I suppose one must be serious sometimes. Good-bye, Mother; I will have my dinner at five o'clock. Everything is packed, except my shirts, so you need not trouble." "Good-bye, my son," she answered with a bow of strained stateliness. She was extremely annoyed at the tone he had adopted with her, and there was something in his look that had made her feel afraid. "Kiss me, Mother," said the girl. Her flowerlike lips touched the withered cheek and warmed its frost. "My child! my child!" cried Mrs. Vane, looking up to the ceiling in search of an imaginary gallery. "Come, Sibyl," said her brother impatiently. He hated his mother's affectations. They went out into the flickering, wind-blown sunlight and strolled down the dreary Euston Road. The passersby glanced in wonder at the sullen heavy youth who, in coarse, ill-fitting clothes, was in the company of such a graceful, refined-looking girl. He was like a common gardener walking with a rose. Jim frowned from time to time when he caught the inquisitive glance of some stranger. He had that dislike of being stared at, which comes on geniuses late in life and never leaves the commonplace. Sibyl, however, was quite unconscious of the effect she was producing. Her love was trembling in laughter on her lips. She was thinking of Prince Charming, and, that she might think of him all the more, she did not talk of him, but prattled on about the ship in which Jim was going to sail, about the gold he was certain to find, about the wonderful heiress whose life he was to save from the wicked, red-shirted bushrangers. For he was not to remain a sailor, or a supercargo, or whatever he was going to be. Oh, no! A sailor's existence was dreadful. Fancy being cooped up in a horrid ship, with the hoarse, hump-backed waves trying to get in, and a black wind blowing the masts down and tearing the sails into long screaming ribands! He was to leave the vessel at Melbourne, bid a polite good-bye to the captain, and go off at once to the gold-fields. Before a week was over he was to come across a large nugget of pure gold, the largest nugget that had ever been discovered, and bring it down to the coast in a waggon guarded by six mounted policemen. The bushrangers were to attack them three times, and be defeated with immense slaughter. Or, no. He was not to go to the gold-fields at all. They were horrid places, where men got intoxicated, and shot each other in bar-rooms, and used bad language. He was to be a nice sheep-farmer, and one evening, as he was riding home, he was to see the beautiful heiress being carried off by a robber on a black horse, and give chase, and rescue her. Of course, she would fall in love with him, and he with her, and they would get married, and come home, and live in an immense house in London. Yes, there were delightful things in store for him. But he must be very good, and not lose his temper, or spend his money foolishly. She was only a year older than he was, but she knew so much more of life. He must be sure, also, to write to her by every mail, and to say his prayers each night before he went to sleep. God was very good, and would watch over him. She would pray for him, too, and in a few years he would come back quite rich and happy. The lad listened sulkily to her and made no answer. He was heart-sick at leaving home. Yet it was not this alone that made him gloomy and morose. Inexperienced though he was, he had still a strong sense of the danger of Sibyl's position. This young dandy who was making love to her could mean her no good. He was a gentleman, and he hated him for that, hated him through some curious race-instinct for which he could not account, and which for that reason was all the more dominant within him. He was conscious also of the shallowness and vanity of his mother's nature, and in that saw infinite peril for Sibyl and Sibyl's happiness. Children begin by loving their parents; as they grow older they judge them; sometimes they forgive them. His mother! He had something on his mind to ask of her, something that he had brooded on for many months of silence. A chance phrase that he had heard at the theatre, a whispered sneer that had reached his ears one night as he waited at the stage-door, had set loose a train of horrible thoughts. He remembered it as if it had been the lash of a hunting-crop across his face. His brows knit together into a wedge-like furrow, and with a twitch of pain he bit his underlip. "You are not listening to a word I am saying, Jim," cried Sibyl, "and I am making the most delightful plans for your future. Do say something." "What do you want me to say?" "Oh! that you will be a good boy and not forget us," she answered, smiling at him. He shrugged his shoulders. "You are more likely to forget me than I am to forget you, Sibyl." She flushed. "What do you mean, Jim?" she asked. "You have a new friend, I hear. Who is he? Why have you not told me about him? He means you no good." "Stop, Jim!" she exclaimed. "You must not say anything against him. I love him." "Why, you don't even know his name," answered the lad. "Who is he? I have a right to know." "He is called Prince Charming. Don't you like the name. Oh! you silly boy! you should never forget it. If you only saw him, you would think him the most wonderful person in the world. Some day you will meet him--when you come back from Australia. You will like him so much. Everybody likes him, and I ... love him. I wish you could come to the theatre to-night. He is going to be there, and I am to play Juliet. Oh! how I shall play it! Fancy, Jim, to be in love and play Juliet! To have him sitting there! To play for his delight! I am afraid I may frighten the company, frighten or enthrall them. To be in love is to surpass one's self. Poor dreadful Mr. Isaacs will be shouting 'genius' to his loafers at the bar. He has preached me as a dogma; to-night he will announce me as a revelation. I feel it. And it is all his, his only, Prince Charming, my wonderful lover, my god of graces. But I am poor beside him. Poor? What does that matter? When poverty creeps in at the door, love flies in through the window. Our proverbs want rewriting. They were made in winter, and it is summer now; spring-time for me, I think, a very dance of blossoms in blue skies." "He is a gentleman," said the lad sullenly. "A prince!" she cried musically. "What more do you want?" "He wants to enslave you." "I shudder at the thought of being free." "I want you to beware of him." "To see him is to worship him; to know him is to trust him." "Sibyl, you are mad about him." She laughed and took his arm. "You dear old Jim, you talk as if you were a hundred. Some day you will be in love yourself. Then you will know what it is. Don't look so sulky. Surely you should be glad to think that, though you are going away, you leave me happier than I have ever been before. Life has been hard for us both, terribly hard and difficult. But it will be different now. You are going to a new world, and I have found one. Here are two chairs; let us sit down and see the smart people go by." They took their seats amidst a crowd of watchers. The tulip-beds across the road flamed like throbbing rings of fire. A white dust--tremulous cloud of orris-root it seemed--hung in the panting air. The brightly coloured parasols danced and dipped like monstrous butterflies. She made her brother talk of himself, his hopes, his prospects. He spoke slowly and with effort. They passed words to each other as players at a game pass counters. Sibyl felt oppressed. She could not communicate her joy. A faint smile curving that sullen mouth was all the echo she could win. After some time she became silent. Suddenly she caught a glimpse of golden hair and laughing lips, and in an open carriage with two ladies Dorian Gray drove past. She started to her feet. "There he is!" she cried. "Who?" said Jim Vane. "Prince Charming," she answered, looking after the victoria. He jumped up and seized her roughly by the arm. "Show him to me. Which is he? Point him out. I must see him!" he exclaimed; but at that moment the Duke of Berwick's four-in-hand came between, and when it had left the space clear, the carriage had swept out of the park. "He is gone," murmured Sibyl sadly. "I wish you had seen him." "I wish I had, for as sure as there is a God in heaven, if he ever does you any wrong, I shall kill him." She looked at him in horror. He repeated his words. They cut the air like a dagger. The people round began to gape. A lady standing close to her tittered. "Come away, Jim; come away," she whispered. He followed her doggedly as she passed through the crowd. He felt glad at what he had said. When they reached the Achilles Statue, she turned round. There was pity in her eyes that became laughter on her lips. She shook her head at him. "You are foolish, Jim, utterly foolish; a bad-tempered boy, that is all. How can you say such horrible things? You don't know what you are talking about. You are simply jealous and unkind. Ah! I wish you would fall in love. Love makes people good, and what you said was wicked." "I am sixteen," he answered, "and I know what I am about. Mother is no help to you. She doesn't understand how to look after you. I wish now that I was not going to Australia at all. I have a great mind to chuck the whole thing up. I would, if my articles hadn't been signed." "Oh, don't be so serious, Jim. You are like one of the heroes of those silly melodramas Mother used to be so fond of acting in. I am not going to quarrel with you. I have seen him, and oh! to see him is perfect happiness. We won't quarrel. I know you would never harm any one I love, would you?" "Not as long as you love him, I suppose," was the sullen answer. "I shall love him for ever!" she cried. "And he?" "For ever, too!" "He had better." She shrank from him. Then she laughed and put her hand on his arm. He was merely a boy. At the Marble Arch they hailed an omnibus, which left them close to their shabby home in the Euston Road. It was after five o'clock, and Sibyl had to lie down for a couple of hours before acting. Jim insisted that she should do so. He said that he would sooner part with her when their mother was not present. She would be sure to make a scene, and he detested scenes of every kind. In Sybil's own room they parted. There was jealousy in the lad's heart, and a fierce murderous hatred of the stranger who, as it seemed to him, had come between them. Yet, when her arms were flung round his neck, and her fingers strayed through his hair, he softened and kissed her with real affection. There were tears in his eyes as he went downstairs. His mother was waiting for him below. She grumbled at his unpunctuality, as he entered. He made no answer, but sat down to his meagre meal. The flies buzzed round the table and crawled over the stained cloth. Through the rumble of omnibuses, and the clatter of street-cabs, he could hear the droning voice devouring each minute that was left to him. After some time, he thrust away his plate and put his head in his hands. He felt that he had a right to know. It should have been told to him before, if it was as he suspected. Leaden with fear, his mother watched him. Words dropped mechanically from her lips. A tattered lace handkerchief twitched in her fingers. When the clock struck six, he got up and went to the door. Then he turned back and looked at her. Their eyes met. In hers he saw a wild appeal for mercy. It enraged him. "Mother, I have something to ask you," he said. Her eyes wandered vaguely about the room. She made no answer. "Tell me the truth. I have a right to know. Were you married to my father?" She heaved a deep sigh. It was a sigh of relief. The terrible moment, the moment that night and day, for weeks and months, she had dreaded, had come at last, and yet she felt no terror. Indeed, in some measure it was a disappointment to her. The vulgar directness of the question called for a direct answer. The situation had not been gradually led up to. It was crude. It reminded her of a bad rehearsal. "No," she answered, wondering at the harsh simplicity of life. "My father was a scoundrel then!" cried the lad, clenching his fists. She shook her head. "I knew he was not free. We loved each other very much. If he had lived, he would have made provision for us. Don't speak against him, my son. He was your father, and a gentleman. Indeed, he was highly connected." An oath broke from his lips. "I don't care for myself," he exclaimed, "but don't let Sibyl.... It is a gentleman, isn't it, who is in love with her, or says he is? Highly connected, too, I suppose." For a moment a hideous sense of humiliation came over the woman. Her head drooped. She wiped her eyes with shaking hands. "Sibyl has a mother," she murmured; "I had none." The lad was touched. He went towards her, and stooping down, he kissed her. "I am sorry if I have pained you by asking about my father," he said, "but I could not help it. I must go now. Good-bye. Don't forget that you will have only one child now to look after, and believe me that if this man wrongs my sister, I will find out who he is, track him down, and kill him like a dog. I swear it." The exaggerated folly of the threat, the passionate gesture that accompanied it, the mad melodramatic words, made life seem more vivid to her. She was familiar with the atmosphere. She breathed more freely, and for the first time for many months she really admired her son. She would have liked to have continued the scene on the same emotional scale, but he cut her short. Trunks had to be carried down and mufflers looked for. The lodging-house drudge bustled in and out. There was the bargaining with the cabman. The moment was lost in vulgar details. It was with a renewed feeling of disappointment that she waved the tattered lace handkerchief from the window, as her son drove away. She was conscious that a great opportunity had been wasted. She consoled herself by telling Sibyl how desolate she felt her life would be, now that she had only one child to look after. She remembered the phrase. It had pleased her. Of the threat she said nothing. It was vividly and dramatically expressed. She felt that they would all laugh at it some day. CHAPTER 6 "I suppose you have heard the news, Basil?" said Lord Henry that evening as Hallward was shown into a little private room at the Bristol where dinner had been laid for three. "No, Harry," answered the artist, giving his hat and coat to the bowing waiter. "What is it? Nothing about politics, I hope! They don't interest me. There is hardly a single person in the House of Commons worth painting, though many of them would be the better for a little whitewashing." "Dorian Gray is engaged to be married," said Lord Henry, watching him as he spoke. Hallward started and then frowned. "Dorian engaged to be married!" he cried. "Impossible!" "It is perfectly true." "To whom?" "To some little actress or other." "I can't believe it. Dorian is far too sensible." "Dorian is far too wise not to do foolish things now and then, my dear Basil." "Marriage is hardly a thing that one can do now and then, Harry." "Except in America," rejoined Lord Henry languidly. "But I didn't say he was married. I said he was engaged to be married. There is a great difference. I have a distinct remembrance of being married, but I have no recollection at all of being engaged. I am inclined to think that I never was engaged." "But think of Dorian's birth, and position, and wealth. It would be absurd for him to marry so much beneath him." "If you want to make him marry this girl, tell him that, Basil. He is sure to do it, then. Whenever a man does a thoroughly stupid thing, it is always from the noblest motives." "I hope the girl is good, Harry. I don't want to see Dorian tied to some vile creature, who might degrade his nature and ruin his intellect." "Oh, she is better than good--she is beautiful," murmured Lord Henry, sipping a glass of vermouth and orange-bitters. "Dorian says she is beautiful, and he is not often wrong about things of that kind. Your portrait of him has quickened his appreciation of the personal appearance of other people. It has had that excellent effect, amongst others. We are to see her to-night, if that boy doesn't forget his appointment." "Are you serious?" "Quite serious, Basil. I should be miserable if I thought I should ever be more serious than I am at the present moment." "But do you approve of it, Harry?" asked the painter, walking up and down the room and biting his lip. "You can't approve of it, possibly. It is some silly infatuation." "I never approve, or disapprove, of anything now. It is an absurd attitude to take towards life. We are not sent into the world to air our moral prejudices. I never take any notice of what common people say, and I never interfere with what charming people do. If a personality fascinates me, whatever mode of expression that personality selects is absolutely delightful to me. Dorian Gray falls in love with a beautiful girl who acts Juliet, and proposes to marry her. Why not? If he wedded Messalina, he would be none the less interesting. You know I am not a champion of marriage. The real drawback to marriage is that it makes one unselfish. And unselfish people are colourless. They lack individuality. Still, there are certain temperaments that marriage makes more complex. They retain their egotism, and add to it many other egos. They are forced to have more than one life. They become more highly organized, and to be highly organized is, I should fancy, the object of man's existence. Besides, every experience is of value, and whatever one may say against marriage, it is certainly an experience. I hope that Dorian Gray will make this girl his wife, passionately adore her for six months, and then suddenly become fascinated by some one else. He would be a wonderful study." "You don't mean a single word of all that, Harry; you know you don't. If Dorian Gray's life were spoiled, no one would be sorrier than yourself. You are much better than you pretend to be." Lord Henry laughed. "The reason we all like to think so well of others is that we are all afraid for ourselves. The basis of optimism is sheer terror. We think that we are generous because we credit our neighbour with the possession of those virtues that are likely to be a benefit to us. We praise the banker that we may overdraw our account, and find good qualities in the highwayman in the hope that he may spare our pockets. I mean everything that I have said. I have the greatest contempt for optimism. As for a spoiled life, no life is spoiled but one whose growth is arrested. If you want to mar a nature, you have merely to reform it. As for marriage, of course that would be silly, but there are other and more interesting bonds between men and women. I will certainly encourage them. They have the charm of being fashionable. But here is Dorian himself. He will tell you more than I can." "My dear Harry, my dear Basil, you must both congratulate me!" said the lad, throwing off his evening cape with its satin-lined wings and shaking each of his friends by the hand in turn. "I have never been so happy. Of course, it is sudden--all really delightful things are. And yet it seems to me to be the one thing I have been looking for all my life." He was flushed with excitement and pleasure, and looked extraordinarily handsome. "I hope you will always be very happy, Dorian," said Hallward, "but I don't quite forgive you for not having let me know of your engagement. You let Harry know." "And I don't forgive you for being late for dinner," broke in Lord Henry, putting his hand on the lad's shoulder and smiling as he spoke. "Come, let us sit down and try what the new _chef_ here is like, and then you will tell us how it all came about." "There is really not much to tell," cried Dorian as they took their seats at the small round table. "What happened was simply this. After I left you yesterday evening, Harry, I dressed, had some dinner at that little Italian restaurant in Rupert Street you introduced me to, and went down at eight o'clock to the theatre. Sibyl was playing Rosalind. Of course, the scenery was dreadful and the Orlando absurd. But Sibyl! You should have seen her! When she came on in her boy's clothes, she was perfectly wonderful. She wore a moss-coloured velvet jerkin with cinnamon sleeves, slim, brown, cross-gartered hose, a dainty little green cap with a hawk's feather caught in a jewel, and a hooded cloak lined with dull red. She had never seemed to me more exquisite. She had all the delicate grace of that Tanagra figurine that you have in your studio, Basil. Her hair clustered round her face like dark leaves round a pale rose. As for her acting--well, you shall see her to-night. She is simply a born artist. I sat in the dingy box absolutely enthralled. I forgot that I was in London and in the nineteenth century. I was away with my love in a forest that no man had ever seen. After the performance was over, I went behind and spoke to her. As we were sitting together, suddenly there came into her eyes a look that I had never seen there before. My lips moved towards hers. We kissed each other. I can't describe to you what I felt at that moment. It seemed to me that all my life had been narrowed to one perfect point of rose-coloured joy. She trembled all over and shook like a white narcissus. Then she flung herself on her knees and kissed my hands. I feel that I should not tell you all this, but I can't help it. Of course, our engagement is a dead secret. She has not even told her own mother. I don't know what my guardians will say. Lord Radley is sure to be furious. I don't care. I shall be of age in less than a year, and then I can do what I like. I have been right, Basil, haven't I, to take my love out of poetry and to find my wife in Shakespeare's plays? Lips that Shakespeare taught to speak have whispered their secret in my ear. I have had the arms of Rosalind around me, and kissed Juliet on the mouth." "Yes, Dorian, I suppose you were right," said Hallward slowly. "Have you seen her to-day?" asked Lord Henry. Dorian Gray shook his head. "I left her in the forest of Arden; I shall find her in an orchard in Verona." Lord Henry sipped his champagne in a meditative manner. "At what particular point did you mention the word marriage, Dorian? And what did she say in answer? Perhaps you forgot all about it." "My dear Harry, I did not treat it as a business transaction, and I did not make any formal proposal. I told her that I loved her, and she said she was not worthy to be my wife. Not worthy! Why, the whole world is nothing to me compared with her." "Women are wonderfully practical," murmured Lord Henry, "much more practical than we are. In situations of that kind we often forget to say anything about marriage, and they always remind us." Hallward laid his hand upon his arm. "Don't, Harry. You have annoyed Dorian. He is not like other men. He would never bring misery upon any one. His nature is too fine for that." Lord Henry looked across the table. "Dorian is never annoyed with me," he answered. "I asked the question for the best reason possible, for the only reason, indeed, that excuses one for asking any question--simple curiosity. I have a theory that it is always the women who propose to us, and not we who propose to the women. Except, of course, in middle-class life. But then the middle classes are not modern." Dorian Gray laughed, and tossed his head. "You are quite incorrigible, Harry; but I don't mind. It is impossible to be angry with you. When you see Sibyl Vane, you will feel that the man who could wrong her would be a beast, a beast without a heart. I cannot understand how any one can wish to shame the thing he loves. I love Sibyl Vane. I want to place her on a pedestal of gold and to see the world worship the woman who is mine. What is marriage? An irrevocable vow. You mock at it for that. Ah! don't mock. It is an irrevocable vow that I want to take. Her trust makes me faithful, her belief makes me good. When I am with her, I regret all that you have taught me. I become different from what you have known me to be. I am changed, and the mere touch of Sibyl Vane's hand makes me forget you and all your wrong, fascinating, poisonous, delightful theories." "And those are ...?" asked Lord Henry, helping himself to some salad. "Oh, your theories about life, your theories about love, your theories about pleasure. All your theories, in fact, Harry." "Pleasure is the only thing worth having a theory about," he answered in his slow melodious voice. "But I am afraid I cannot claim my theory as my own. It belongs to Nature, not to me. Pleasure is Nature's test, her sign of approval. When we are happy, we are always good, but when we are good, we are not always happy." "Ah! but what do you mean by good?" cried Basil Hallward. "Yes," echoed Dorian, leaning back in his chair and looking at Lord Henry over the heavy clusters of purple-lipped irises that stood in the centre of the table, "what do you mean by good, Harry?" "To be good is to be in harmony with one's self," he replied, touching the thin stem of his glass with his pale, fine-pointed fingers. "Discord is to be forced to be in harmony with others. One's own life--that is the important thing. As for the lives of one's neighbours, if one wishes to be a prig or a Puritan, one can flaunt one's moral views about them, but they are not one's concern. Besides, individualism has really the higher aim. Modern morality consists in accepting the standard of one's age. I consider that for any man of culture to accept the standard of his age is a form of the grossest immorality." "But, surely, if one lives merely for one's self, Harry, one pays a terrible price for doing so?" suggested the painter. "Yes, we are overcharged for everything nowadays. I should fancy that the real tragedy of the poor is that they can afford nothing but self-denial. Beautiful sins, like beautiful things, are the privilege of the rich." "One has to pay in other ways but money." "What sort of ways, Basil?" "Oh! I should fancy in remorse, in suffering, in ... well, in the consciousness of degradation." Lord Henry shrugged his shoulders. "My dear fellow, mediaeval art is charming, but mediaeval emotions are out of date. One can use them in fiction, of course. But then the only things that one can use in fiction are the things that one has ceased to use in fact. Believe me, no civilized man ever regrets a pleasure, and no uncivilized man ever knows what a pleasure is." "I know what pleasure is," cried Dorian Gray. "It is to adore some one." "That is certainly better than being adored," he answered, toying with some fruits. "Being adored is a nuisance. Women treat us just as humanity treats its gods. They worship us, and are always bothering us to do something for them." "I should have said that whatever they ask for they had first given to us," murmured the lad gravely. "They create love in our natures. They have a right to demand it back." "That is quite true, Dorian," cried Hallward. "Nothing is ever quite true," said Lord Henry. "This is," interrupted Dorian. "You must admit, Harry, that women give to men the very gold of their lives." "Possibly," he sighed, "but they invariably want it back in such very small change. That is the worry. Women, as some witty Frenchman once put it, inspire us with the desire to do masterpieces and always prevent us from carrying them out." "Harry, you are dreadful! I don't know why I like you so much." "You will always like me, Dorian," he replied. "Will you have some coffee, you fellows? Waiter, bring coffee, and _fine-champagne_, and some cigarettes. No, don't mind the cigarettes--I have some. Basil, I can't allow you to smoke cigars. You must have a cigarette. A cigarette is the perfect type of a perfect pleasure. It is exquisite, and it leaves one unsatisfied. What more can one want? Yes, Dorian, you will always be fond of me. I represent to you all the sins you have never had the courage to commit." "What nonsense you talk, Harry!" cried the lad, taking a light from a fire-breathing silver dragon that the waiter had placed on the table. "Let us go down to the theatre. When Sibyl comes on the stage you will have a new ideal of life. She will represent something to you that you have never known." "I have known everything," said Lord Henry, with a tired look in his eyes, "but I am always ready for a new emotion. I am afraid, however, that, for me at any rate, there is no such thing. Still, your wonderful girl may thrill me. I love acting. It is so much more real than life. Let us go. Dorian, you will come with me. I am so sorry, Basil, but there is only room for two in the brougham. You must follow us in a hansom." They got up and put on their coats, sipping their coffee standing. The painter was silent and preoccupied. There was a gloom over him. He could not bear this marriage, and yet it seemed to him to be better than many other things that might have happened. After a few minutes, they all passed downstairs. He drove off by himself, as had been arranged, and watched the flashing lights of the little brougham in front of him. A strange sense of loss came over him. He felt that Dorian Gray would never again be to him all that he had been in the past. Life had come between them.... His eyes darkened, and the crowded flaring streets became blurred to his eyes. When the cab drew up at the theatre, it seemed to him that he had grown years older. CHAPTER 7 For some reason or other, the house was crowded that night, and the fat Jew manager who met them at the door was beaming from ear to ear with an oily tremulous smile. He escorted them to their box with a sort of pompous humility, waving his fat jewelled hands and talking at the top of his voice. Dorian Gray loathed him more than ever. He felt as if he had come to look for Miranda and had been met by Caliban. Lord Henry, upon the other hand, rather liked him. At least he declared he did, and insisted on shaking him by the hand and assuring him that he was proud to meet a man who had discovered a real genius and gone bankrupt over a poet. Hallward amused himself with watching the faces in the pit. The heat was terribly oppressive, and the huge sunlight flamed like a monstrous dahlia with petals of yellow fire. The youths in the gallery had taken off their coats and waistcoats and hung them over the side. They talked to each other across the theatre and shared their oranges with the tawdry girls who sat beside them. Some women were laughing in the pit. Their voices were horribly shrill and discordant. The sound of the popping of corks came from the bar. "What a place to find one's divinity in!" said Lord Henry. "Yes!" answered Dorian Gray. "It was here I found her, and she is divine beyond all living things. When she acts, you will forget everything. These common rough people, with their coarse faces and brutal gestures, become quite different when she is on the stage. They sit silently and watch her. They weep and laugh as she wills them to do. She makes them as responsive as a violin. She spiritualizes them, and one feels that they are of the same flesh and blood as one's self." "The same flesh and blood as one's self! Oh, I hope not!" exclaimed Lord Henry, who was scanning the occupants of the gallery through his opera-glass. "Don't pay any attention to him, Dorian," said the painter. "I understand what you mean, and I believe in this girl. Any one you love must be marvellous, and any girl who has the effect you describe must be fine and noble. To spiritualize one's age--that is something worth doing. If this girl can give a soul to those who have lived without one, if she can create the sense of beauty in people whose lives have been sordid and ugly, if she can strip them of their selfishness and lend them tears for sorrows that are not their own, she is worthy of all your adoration, worthy of the adoration of the world. This marriage is quite right. I did not think so at first, but I admit it now. The gods made Sibyl Vane for you. Without her you would have been incomplete." "Thanks, Basil," answered Dorian Gray, pressing his hand. "I knew that you would understand me. Harry is so cynical, he terrifies me. But here is the orchestra. It is quite dreadful, but it only lasts for about five minutes. Then the curtain rises, and you will see the girl to whom I am going to give all my life, to whom I have given everything that is good in me." A quarter of an hour afterwards, amidst an extraordinary turmoil of applause, Sibyl Vane stepped on to the stage. Yes, she was certainly lovely to look at--one of the loveliest creatures, Lord Henry thought, that he had ever seen. There was something of the fawn in her shy grace and startled eyes. A faint blush, like the shadow of a rose in a mirror of silver, came to her cheeks as she glanced at the crowded enthusiastic house. She stepped back a few paces and her lips seemed to tremble. Basil Hallward leaped to his feet and began to applaud. Motionless, and as one in a dream, sat Dorian Gray, gazing at her. Lord Henry peered through his glasses, murmuring, "Charming! charming!" The scene was the hall of Capulet's house, and Romeo in his pilgrim's dress had entered with Mercutio and his other friends. The band, such as it was, struck up a few bars of music, and the dance began. Through the crowd of ungainly, shabbily dressed actors, Sibyl Vane moved like a creature from a finer world. Her body swayed, while she danced, as a plant sways in the water. The curves of her throat were the curves of a white lily. Her hands seemed to be made of cool ivory. Yet she was curiously listless. She showed no sign of joy when her eyes rested on Romeo. The few words she had to speak-- Good pilgrim, you do wrong your hand too much, Which mannerly devotion shows in this; For saints have hands that pilgrims' hands do touch, And palm to palm is holy palmers' kiss-- with the brief dialogue that follows, were spoken in a thoroughly artificial manner. The voice was exquisite, but from the point of view of tone it was absolutely false. It was wrong in colour. It took away all the life from the verse. It made the passion unreal. Dorian Gray grew pale as he watched her. He was puzzled and anxious. Neither of his friends dared to say anything to him. She seemed to them to be absolutely incompetent. They were horribly disappointed. Yet they felt that the true test of any Juliet is the balcony scene of the second act. They waited for that. If she failed there, there was nothing in her. She looked charming as she came out in the moonlight. That could not be denied. But the staginess of her acting was unbearable, and grew worse as she went on. Her gestures became absurdly artificial. She overemphasized everything that she had to say. The beautiful passage-- Thou knowest the mask of night is on my face, Else would a maiden blush bepaint my cheek For that which thou hast heard me speak to-night-- was declaimed with the painful precision of a schoolgirl who has been taught to recite by some second-rate professor of elocution. When she leaned over the balcony and came to those wonderful lines-- Although I joy in thee, I have no joy of this contract to-night: It is too rash, too unadvised, too sudden; Too like the lightning, which doth cease to be Ere one can say, "It lightens." Sweet, good-night! This bud of love by summer's ripening breath May prove a beauteous flower when next we meet-- she spoke the words as though they conveyed no meaning to her. It was not nervousness. Indeed, so far from being nervous, she was absolutely self-contained. It was simply bad art. She was a complete failure. Even the common uneducated audience of the pit and gallery lost their interest in the play. They got restless, and began to talk loudly and to whistle. The Jew manager, who was standing at the back of the dress-circle, stamped and swore with rage. The only person unmoved was the girl herself. When the second act was over, there came a storm of hisses, and Lord Henry got up from his chair and put on his coat. "She is quite beautiful, Dorian," he said, "but she can't act. Let us go." "I am going to see the play through," answered the lad, in a hard bitter voice. "I am awfully sorry that I have made you waste an evening, Harry. I apologize to you both." "My dear Dorian, I should think Miss Vane was ill," interrupted Hallward. "We will come some other night." "I wish she were ill," he rejoined. "But she seems to me to be simply callous and cold. She has entirely altered. Last night she was a great artist. This evening she is merely a commonplace mediocre actress." "Don't talk like that about any one you love, Dorian. Love is a more wonderful thing than art." "They are both simply forms of imitation," remarked Lord Henry. "But do let us go. Dorian, you must not stay here any longer. It is not good for one's morals to see bad acting. Besides, I don't suppose you will want your wife to act, so what does it matter if she plays Juliet like a wooden doll? She is very lovely, and if she knows as little about life as she does about acting, she will be a delightful experience. There are only two kinds of people who are really fascinating--people who know absolutely everything, and people who know absolutely nothing. Good heavens, my dear boy, don't look so tragic! The secret of remaining young is never to have an emotion that is unbecoming. Come to the club with Basil and myself. We will smoke cigarettes and drink to the beauty of Sibyl Vane. She is beautiful. What more can you want?" "Go away, Harry," cried the lad. "I want to be alone. Basil, you must go. Ah! can't you see that my heart is breaking?" The hot tears came to his eyes. His lips trembled, and rushing to the back of the box, he leaned up against the wall, hiding his face in his hands. "Let us go, Basil," said Lord Henry with a strange tenderness in his voice, and the two young men passed out together. A few moments afterwards the footlights flared up and the curtain rose on the third act. Dorian Gray went back to his seat. He looked pale, and proud, and indifferent. The play dragged on, and seemed interminable. Half of the audience went out, tramping in heavy boots and laughing. The whole thing was a _fiasco_. The last act was played to almost empty benches. The curtain went down on a titter and some groans. As soon as it was over, Dorian Gray rushed behind the scenes into the greenroom. The girl was standing there alone, with a look of triumph on her face. Her eyes were lit with an exquisite fire. There was a radiance about her. Her parted lips were smiling over some secret of their own. When he entered, she looked at him, and an expression of infinite joy came over her. "How badly I acted to-night, Dorian!" she cried. "Horribly!" he answered, gazing at her in amazement. "Horribly! It was dreadful. Are you ill? You have no idea what it was. You have no idea what I suffered." The girl smiled. "Dorian," she answered, lingering over his name with long-drawn music in her voice, as though it were sweeter than honey to the red petals of her mouth. "Dorian, you should have understood. But you understand now, don't you?" "Understand what?" he asked, angrily. "Why I was so bad to-night. Why I shall always be bad. Why I shall never act well again." He shrugged his shoulders. "You are ill, I suppose. When you are ill you shouldn't act. You make yourself ridiculous. My friends were bored. I was bored." She seemed not to listen to him. She was transfigured with joy. An ecstasy of happiness dominated her. "Dorian, Dorian," she cried, "before I knew you, acting was the one reality of my life. It was only in the theatre that I lived. I thought that it was all true. I was Rosalind one night and Portia the other. The joy of Beatrice was my joy, and the sorrows of Cordelia were mine also. I believed in everything. The common people who acted with me seemed to me to be godlike. The painted scenes were my world. I knew nothing but shadows, and I thought them real. You came--oh, my beautiful love!--and you freed my soul from prison. You taught me what reality really is. To-night, for the first time in my life, I saw through the hollowness, the sham, the silliness of the empty pageant in which I had always played. To-night, for the first time, I became conscious that the Romeo was hideous, and old, and painted, that the moonlight in the orchard was false, that the scenery was vulgar, and that the words I had to speak were unreal, were not my words, were not what I wanted to say. You had brought me something higher, something of which all art is but a reflection. You had made me understand what love really is. My love! My love! Prince Charming! Prince of life! I have grown sick of shadows. You are more to me than all art can ever be. What have I to do with the puppets of a play? When I came on to-night, I could not understand how it was that everything had gone from me. I thought that I was going to be wonderful. I found that I could do nothing. Suddenly it dawned on my soul what it all meant. The knowledge was exquisite to me. I heard them hissing, and I smiled. What could they know of love such as ours? Take me away, Dorian--take me away with you, where we can be quite alone. I hate the stage. I might mimic a passion that I do not feel, but I cannot mimic one that burns me like fire. Oh, Dorian, Dorian, you understand now what it signifies? Even if I could do it, it would be profanation for me to play at being in love. You have made me see that." He flung himself down on the sofa and turned away his face. "You have killed my love," he muttered. She looked at him in wonder and laughed. He made no answer. She came across to him, and with her little fingers stroked his hair. She knelt down and pressed his hands to her lips. He drew them away, and a shudder ran through him. Then he leaped up and went to the door. "Yes," he cried, "you have killed my love. You used to stir my imagination. Now you don't even stir my curiosity. You simply produce no effect. I loved you because you were marvellous, because you had genius and intellect, because you realized the dreams of great poets and gave shape and substance to the shadows of art. You have thrown it all away. You are shallow and stupid. My God! how mad I was to love you! What a fool I have been! You are nothing to me now. I will never see you again. I will never think of you. I will never mention your name. You don't know what you were to me, once. Why, once ... Oh, I can't bear to think of it! I wish I had never laid eyes upon you! You have spoiled the romance of my life. How little you can know of love, if you say it mars your art! Without your art, you are nothing. I would have made you famous, splendid, magnificent. The world would have worshipped you, and you would have borne my name. What are you now? A third-rate actress with a pretty face." The girl grew white, and trembled. She clenched her hands together, and her voice seemed to catch in her throat. "You are not serious, Dorian?" she murmured. "You are acting." "Acting! I leave that to you. You do it so well," he answered bitterly. She rose from her knees and, with a piteous expression of pain in her face, came across the room to him. She put her hand upon his arm and looked into his eyes. He thrust her back. "Don't touch me!" he cried. A low moan broke from her, and she flung herself at his feet and lay there like a trampled flower. "Dorian, Dorian, don't leave me!" she whispered. "I am so sorry I didn't act well. I was thinking of you all the time. But I will try--indeed, I will try. It came so suddenly across me, my love for you. I think I should never have known it if you had not kissed me--if we had not kissed each other. Kiss me again, my love. Don't go away from me. I couldn't bear it. Oh! don't go away from me. My brother ... No; never mind. He didn't mean it. He was in jest.... But you, oh! can't you forgive me for to-night? I will work so hard and try to improve. Don't be cruel to me, because I love you better than anything in the world. After all, it is only once that I have not pleased you. But you are quite right, Dorian. I should have shown myself more of an artist. It was foolish of me, and yet I couldn't help it. Oh, don't leave me, don't leave me." A fit of passionate sobbing choked her. She crouched on the floor like a wounded thing, and Dorian Gray, with his beautiful eyes, looked down at her, and his chiselled lips curled in exquisite disdain. There is always something ridiculous about the emotions of people whom one has ceased to love. Sibyl Vane seemed to him to be absurdly melodramatic. Her tears and sobs annoyed him. "I am going," he said at last in his calm clear voice. "I don't wish to be unkind, but I can't see you again. You have disappointed me." She wept silently, and made no answer, but crept nearer. Her little hands stretched blindly out, and appeared to be seeking for him. He turned on his heel and left the room. In a few moments he was out of the theatre. Where he went to he hardly knew. He remembered wandering through dimly lit streets, past gaunt, black-shadowed archways and evil-looking houses. Women with hoarse voices and harsh laughter had called after him. Drunkards had reeled by, cursing and chattering to themselves like monstrous apes. He had seen grotesque children huddled upon door-steps, and heard shrieks and oaths from gloomy courts. As the dawn was just breaking, he found himself close to Covent Garden. The darkness lifted, and, flushed with faint fires, the sky hollowed itself into a perfect pearl. Huge carts filled with nodding lilies rumbled slowly down the polished empty street. The air was heavy with the perfume of the flowers, and their beauty seemed to bring him an anodyne for his pain. He followed into the market and watched the men unloading their waggons. A white-smocked carter offered him some cherries. He thanked him, wondered why he refused to accept any money for them, and began to eat them listlessly. They had been plucked at midnight, and the coldness of the moon had entered into them. A long line of boys carrying crates of striped tulips, and of yellow and red roses, defiled in front of him, threading their way through the huge, jade-green piles of vegetables. Under the portico, with its grey, sun-bleached pillars, loitered a troop of draggled bareheaded girls, waiting for the auction to be over. Others crowded round the swinging doors of the coffee-house in the piazza. The heavy cart-horses slipped and stamped upon the rough stones, shaking their bells and trappings. Some of the drivers were lying asleep on a pile of sacks. Iris-necked and pink-footed, the pigeons ran about picking up seeds. After a little while, he hailed a hansom and drove home. For a few moments he loitered upon the doorstep, looking round at the silent square, with its blank, close-shuttered windows and its staring blinds. The sky was pure opal now, and the roofs of the houses glistened like silver against it. From some chimney opposite a thin wreath of smoke was rising. It curled, a violet riband, through the nacre-coloured air. In the huge gilt Venetian lantern, spoil of some Doge's barge, that hung from the ceiling of the great, oak-panelled hall of entrance, lights were still burning from three flickering jets: thin blue petals of flame they seemed, rimmed with white fire. He turned them out and, having thrown his hat and cape on the table, passed through the library towards the door of his bedroom, a large octagonal chamber on the ground floor that, in his new-born feeling for luxury, he had just had decorated for himself and hung with some curious Renaissance tapestries that had been discovered stored in a disused attic at Selby Royal. As he was turning the handle of the door, his eye fell upon the portrait Basil Hallward had painted of him. He started back as if in surprise. Then he went on into his own room, looking somewhat puzzled. After he had taken the button-hole out of his coat, he seemed to hesitate. Finally, he came back, went over to the picture, and examined it. In the dim arrested light that struggled through the cream-coloured silk blinds, the face appeared to him to be a little changed. The expression looked different. One would have said that there was a touch of cruelty in the mouth. It was certainly strange. He turned round and, walking to the window, drew up the blind. The bright dawn flooded the room and swept the fantastic shadows into dusky corners, where they lay shuddering. But the strange expression that he had noticed in the face of the portrait seemed to linger there, to be more intensified even. The quivering ardent sunlight showed him the lines of cruelty round the mouth as clearly as if he had been looking into a mirror after he had done some dreadful thing. He winced and, taking up from the table an oval glass framed in ivory Cupids, one of Lord Henry's many presents to him, glanced hurriedly into its polished depths. No line like that warped his red lips. What did it mean? He rubbed his eyes, and came close to the picture, and examined it again. There were no signs of any change when he looked into the actual painting, and yet there was no doubt that the whole expression had altered. It was not a mere fancy of his own. The thing was horribly apparent. He threw himself into a chair and began to think. Suddenly there flashed across his mind what he had said in Basil Hallward's studio the day the picture had been finished. Yes, he remembered it perfectly. He had uttered a mad wish that he himself might remain young, and the portrait grow old; that his own beauty might be untarnished, and the face on the canvas bear the burden of his passions and his sins; that the painted image might be seared with the lines of suffering and thought, and that he might keep all the delicate bloom and loveliness of his then just conscious boyhood. Surely his wish had not been fulfilled? Such things were impossible. It seemed monstrous even to think of them. And, yet, there was the picture before him, with the touch of cruelty in the mouth. Cruelty! Had he been cruel? It was the girl's fault, not his. He had dreamed of her as a great artist, had given his love to her because he had thought her great. Then she had disappointed him. She had been shallow and unworthy. And, yet, a feeling of infinite regret came over him, as he thought of her lying at his feet sobbing like a little child. He remembered with what callousness he had watched her. Why had he been made like that? Why had such a soul been given to him? But he had suffered also. During the three terrible hours that the play had lasted, he had lived centuries of pain, aeon upon aeon of torture. His life was well worth hers. She had marred him for a moment, if he had wounded her for an age. Besides, women were better suited to bear sorrow than men. They lived on their emotions. They only thought of their emotions. When they took lovers, it was merely to have some one with whom they could have scenes. Lord Henry had told him that, and Lord Henry knew what women were. Why should he trouble about Sibyl Vane? She was nothing to him now. But the picture? What was he to say of that? It held the secret of his life, and told his story. It had taught him to love his own beauty. Would it teach him to loathe his own soul? Would he ever look at it again? No; it was merely an illusion wrought on the troubled senses. The horrible night that he had passed had left phantoms behind it. Suddenly there had fallen upon his brain that tiny scarlet speck that makes men mad. The picture had not changed. It was folly to think so. Yet it was watching him, with its beautiful marred face and its cruel smile. Its bright hair gleamed in the early sunlight. Its blue eyes met his own. A sense of infinite pity, not for himself, but for the painted image of himself, came over him. It had altered already, and would alter more. Its gold would wither into grey. Its red and white roses would die. For every sin that he committed, a stain would fleck and wreck its fairness. But he would not sin. The picture, changed or unchanged, would be to him the visible emblem of conscience. He would resist temptation. He would not see Lord Henry any more--would not, at any rate, listen to those subtle poisonous theories that in Basil Hallward's garden had first stirred within him the passion for impossible things. He would go back to Sibyl Vane, make her amends, marry her, try to love her again. Yes, it was his duty to do so. She must have suffered more than he had. Poor child! He had been selfish and cruel to her. The fascination that she had exercised over him would return. They would be happy together. His life with her would be beautiful and pure. He got up from his chair and drew a large screen right in front of the portrait, shuddering as he glanced at it. "How horrible!" he murmured to himself, and he walked across to the window and opened it. When he stepped out on to the grass, he drew a deep breath. The fresh morning air seemed to drive away all his sombre passions. He thought only of Sibyl. A faint echo of his love came back to him. He repeated her name over and over again. The birds that were singing in the dew-drenched garden seemed to be telling the flowers about her. CHAPTER 8 It was long past noon when he awoke. His valet had crept several times on tiptoe into the room to see if he was stirring, and had wondered what made his young master sleep so late. Finally his bell sounded, and Victor came in softly with a cup of tea, and a pile of letters, on a small tray of old Sevres china, and drew back the olive-satin curtains, with their shimmering blue lining, that hung in front of the three tall windows. "Monsieur has well slept this morning," he said, smiling. "What o'clock is it, Victor?" asked Dorian Gray drowsily. "One hour and a quarter, Monsieur." How late it was! He sat up, and having sipped some tea, turned over his letters. One of them was from Lord Henry, and had been brought by hand that morning. He hesitated for a moment, and then put it aside. The others he opened listlessly. They contained the usual collection of cards, invitations to dinner, tickets for private views, programmes of charity concerts, and the like that are showered on fashionable young men every morning during the season. There was a rather heavy bill for a chased silver Louis-Quinze toilet-set that he had not yet had the courage to send on to his guardians, who were extremely old-fashioned people and did not realize that we live in an age when unnecessary things are our only necessities; and there were several very courteously worded communications from Jermyn Street money-lenders offering to advance any sum of money at a moment's notice and at the most reasonable rates of interest. After about ten minutes he got up, and throwing on an elaborate dressing-gown of silk-embroidered cashmere wool, passed into the onyx-paved bathroom. The cool water refreshed him after his long sleep. He seemed to have forgotten all that he had gone through. A dim sense of having taken part in some strange tragedy came to him once or twice, but there was the unreality of a dream about it. As soon as he was dressed, he went into the library and sat down to a light French breakfast that had been laid out for him on a small round table close to the open window. It was an exquisite day. The warm air seemed laden with spices. A bee flew in and buzzed round the blue-dragon bowl that, filled with sulphur-yellow roses, stood before him. He felt perfectly happy. Suddenly his eye fell on the screen that he had placed in front of the portrait, and he started. "Too cold for Monsieur?" asked his valet, putting an omelette on the table. "I shut the window?" Dorian shook his head. "I am not cold," he murmured. Was it all true? Had the portrait really changed? Or had it been simply his own imagination that had made him see a look of evil where there had been a look of joy? Surely a painted canvas could not alter? The thing was absurd. It would serve as a tale to tell Basil some day. It would make him smile. And, yet, how vivid was his recollection of the whole thing! First in the dim twilight, and then in the bright dawn, he had seen the touch of cruelty round the warped lips. He almost dreaded his valet leaving the room. He knew that when he was alone he would have to examine the portrait. He was afraid of certainty. When the coffee and cigarettes had been brought and the man turned to go, he felt a wild desire to tell him to remain. As the door was closing behind him, he called him back. The man stood waiting for his orders. Dorian looked at him for a moment. "I am not at home to any one, Victor," he said with a sigh. The man bowed and retired. Then he rose from the table, lit a cigarette, and flung himself down on a luxuriously cushioned couch that stood facing the screen. The screen was an old one, of gilt Spanish leather, stamped and wrought with a rather florid Louis-Quatorze pattern. He scanned it curiously, wondering if ever before it had concealed the secret of a man's life. Should he move it aside, after all? Why not let it stay there? What was the use of knowing? If the thing was true, it was terrible. If it was not true, why trouble about it? But what if, by some fate or deadlier chance, eyes other than his spied behind and saw the horrible change? What should he do if Basil Hallward came and asked to look at his own picture? Basil would be sure to do that. No; the thing had to be examined, and at once. Anything would be better than this dreadful state of doubt. He got up and locked both doors. At least he would be alone when he looked upon the mask of his shame. Then he drew the screen aside and saw himself face to face. It was perfectly true. The portrait had altered. As he often remembered afterwards, and always with no small wonder, he found himself at first gazing at the portrait with a feeling of almost scientific interest. That such a change should have taken place was incredible to him. And yet it was a fact. Was there some subtle affinity between the chemical atoms that shaped themselves into form and colour on the canvas and the soul that was within him? Could it be that what that soul thought, they realized?--that what it dreamed, they made true? Or was there some other, more terrible reason? He shuddered, and felt afraid, and, going back to the couch, lay there, gazing at the picture in sickened horror. One thing, however, he felt that it had done for him. It had made him conscious how unjust, how cruel, he had been to Sibyl Vane. It was not too late to make reparation for that. She could still be his wife. His unreal and selfish love would yield to some higher influence, would be transformed into some nobler passion, and the portrait that Basil Hallward had painted of him would be a guide to him through life, would be to him what holiness is to some, and conscience to others, and the fear of God to us all. There were opiates for remorse, drugs that could lull the moral sense to sleep. But here was a visible symbol of the degradation of sin. Here was an ever-present sign of the ruin men brought upon their souls. Three o'clock struck, and four, and the half-hour rang its double chime, but Dorian Gray did not stir. He was trying to gather up the scarlet threads of life and to weave them into a pattern; to find his way through the sanguine labyrinth of passion through which he was wandering. He did not know what to do, or what to think. Finally, he went over to the table and wrote a passionate letter to the girl he had loved, imploring her forgiveness and accusing himself of madness. He covered page after page with wild words of sorrow and wilder words of pain. There is a luxury in self-reproach. When we blame ourselves, we feel that no one else has a right to blame us. It is the confession, not the priest, that gives us absolution. When Dorian had finished the letter, he felt that he had been forgiven. Suddenly there came a knock to the door, and he heard Lord Henry's voice outside. "My dear boy, I must see you. Let me in at once. I can't bear your shutting yourself up like this." He made no answer at first, but remained quite still. The knocking still continued and grew louder. Yes, it was better to let Lord Henry in, and to explain to him the new life he was going to lead, to quarrel with him if it became necessary to quarrel, to part if parting was inevitable. He jumped up, drew the screen hastily across the picture, and unlocked the door. "I am so sorry for it all, Dorian," said Lord Henry as he entered. "But you must not think too much about it." "Do you mean about Sibyl Vane?" asked the lad. "Yes, of course," answered Lord Henry, sinking into a chair and slowly pulling off his yellow gloves. "It is dreadful, from one point of view, but it was not your fault. Tell me, did you go behind and see her, after the play was over?" "Yes." "I felt sure you had. Did you make a scene with her?" "I was brutal, Harry--perfectly brutal. But it is all right now. I am not sorry for anything that has happened. It has taught me to know myself better." "Ah, Dorian, I am so glad you take it in that way! I was afraid I would find you plunged in remorse and tearing that nice curly hair of yours." "I have got through all that," said Dorian, shaking his head and smiling. "I am perfectly happy now. I know what conscience is, to begin with. It is not what you told me it was. It is the divinest thing in us. Don't sneer at it, Harry, any more--at least not before me. I want to be good. I can't bear the idea of my soul being hideous." "A very charming artistic basis for ethics, Dorian! I congratulate you on it. But how are you going to begin?" "By marrying Sibyl Vane." "Marrying Sibyl Vane!" cried Lord Henry, standing up and looking at him in perplexed amazement. "But, my dear Dorian--" "Yes, Harry, I know what you are going to say. Something dreadful about marriage. Don't say it. Don't ever say things of that kind to me again. Two days ago I asked Sibyl to marry me. I am not going to break my word to her. She is to be my wife." "Your wife! Dorian! ... Didn't you get my letter? I wrote to you this morning, and sent the note down by my own man." "Your letter? Oh, yes, I remember. I have not read it yet, Harry. I was afraid there might be something in it that I wouldn't like. You cut life to pieces with your epigrams." "You know nothing then?" "What do you mean?" Lord Henry walked across the room, and sitting down by Dorian Gray, took both his hands in his own and held them tightly. "Dorian," he said, "my letter--don't be frightened--was to tell you that Sibyl Vane is dead." A cry of pain broke from the lad's lips, and he leaped to his feet, tearing his hands away from Lord Henry's grasp. "Dead! Sibyl dead! It is not true! It is a horrible lie! How dare you say it?" "It is quite true, Dorian," said Lord Henry, gravely. "It is in all the morning papers. I wrote down to you to ask you not to see any one till I came. There will have to be an inquest, of course, and you must not be mixed up in it. Things like that make a man fashionable in Paris. But in London people are so prejudiced. Here, one should never make one's _debut_ with a scandal. One should reserve that to give an interest to one's old age. I suppose they don't know your name at the theatre? If they don't, it is all right. Did any one see you going round to her room? That is an important point." Dorian did not answer for a few moments. He was dazed with horror. Finally he stammered, in a stifled voice, "Harry, did you say an inquest? What did you mean by that? Did Sibyl--? Oh, Harry, I can't bear it! But be quick. Tell me everything at once." "I have no doubt it was not an accident, Dorian, though it must be put in that way to the public. It seems that as she was leaving the theatre with her mother, about half-past twelve or so, she said she had forgotten something upstairs. They waited some time for her, but she did not come down again. They ultimately found her lying dead on the floor of her dressing-room. She had swallowed something by mistake, some dreadful thing they use at theatres. I don't know what it was, but it had either prussic acid or white lead in it. I should fancy it was prussic acid, as she seems to have died instantaneously." "Harry, Harry, it is terrible!" cried the lad. "Yes; it is very tragic, of course, but you must not get yourself mixed up in it. I see by _The Standard_ that she was seventeen. I should have thought she was almost younger than that. She looked such a child, and seemed to know so little about acting. Dorian, you mustn't let this thing get on your nerves. You must come and dine with me, and afterwards we will look in at the opera. It is a Patti night, and everybody will be there. You can come to my sister's box. She has got some smart women with her." "So I have murdered Sibyl Vane," said Dorian Gray, half to himself, "murdered her as surely as if I had cut her little throat with a knife. Yet the roses are not less lovely for all that. The birds sing just as happily in my garden. And to-night I am to dine with you, and then go on to the opera, and sup somewhere, I suppose, afterwards. How extraordinarily dramatic life is! If I had read all this in a book, Harry, I think I would have wept over it. Somehow, now that it has happened actually, and to me, it seems far too wonderful for tears. Here is the first passionate love-letter I have ever written in my life. Strange, that my first passionate love-letter should have been addressed to a dead girl. Can they feel, I wonder, those white silent people we call the dead? Sibyl! Can she feel, or know, or listen? Oh, Harry, how I loved her once! It seems years ago to me now. She was everything to me. Then came that dreadful night--was it really only last night?--when she played so badly, and my heart almost broke. She explained it all to me. It was terribly pathetic. But I was not moved a bit. I thought her shallow. Suddenly something happened that made me afraid. I can't tell you what it was, but it was terrible. I said I would go back to her. I felt I had done wrong. And now she is dead. My God! My God! Harry, what shall I do? You don't know the danger I am in, and there is nothing to keep me straight. She would have done that for me. She had no right to kill herself. It was selfish of her." "My dear Dorian," answered Lord Henry, taking a cigarette from his case and producing a gold-latten matchbox, "the only way a woman can ever reform a man is by boring him so completely that he loses all possible interest in life. If you had married this girl, you would have been wretched. Of course, you would have treated her kindly. One can always be kind to people about whom one cares nothing. But she would have soon found out that you were absolutely indifferent to her. And when a woman finds that out about her husband, she either becomes dreadfully dowdy, or wears very smart bonnets that some other woman's husband has to pay for. I say nothing about the social mistake, which would have been abject--which, of course, I would not have allowed--but I assure you that in any case the whole thing would have been an absolute failure." "I suppose it would," muttered the lad, walking up and down the room and looking horribly pale. "But I thought it was my duty. It is not my fault that this terrible tragedy has prevented my doing what was right. I remember your saying once that there is a fatality about good resolutions--that they are always made too late. Mine certainly were." "Good resolutions are useless attempts to interfere with scientific laws. Their origin is pure vanity. Their result is absolutely _nil_. They give us, now and then, some of those luxurious sterile emotions that have a certain charm for the weak. That is all that can be said for them. They are simply cheques that men draw on a bank where they have no account." "Harry," cried Dorian Gray, coming over and sitting down beside him, "why is it that I cannot feel this tragedy as much as I want to? I don't think I am heartless. Do you?" "You have done too many foolish things during the last fortnight to be entitled to give yourself that name, Dorian," answered Lord Henry with his sweet melancholy smile. The lad frowned. "I don't like that explanation, Harry," he rejoined, "but I am glad you don't think I am heartless. I am nothing of the kind. I know I am not. And yet I must admit that this thing that has happened does not affect me as it should. It seems to me to be simply like a wonderful ending to a wonderful play. It has all the terrible beauty of a Greek tragedy, a tragedy in which I took a great part, but by which I have not been wounded." "It is an interesting question," said Lord Henry, who found an exquisite pleasure in playing on the lad's unconscious egotism, "an extremely interesting question. I fancy that the true explanation is this: It often happens that the real tragedies of life occur in such an inartistic manner that they hurt us by their crude violence, their absolute incoherence, their absurd want of meaning, their entire lack of style. They affect us just as vulgarity affects us. They give us an impression of sheer brute force, and we revolt against that. Sometimes, however, a tragedy that possesses artistic elements of beauty crosses our lives. If these elements of beauty are real, the whole thing simply appeals to our sense of dramatic effect. Suddenly we find that we are no longer the actors, but the spectators of the play. Or rather we are both. We watch ourselves, and the mere wonder of the spectacle enthralls us. In the present case, what is it that has really happened? Some one has killed herself for love of you. I wish that I had ever had such an experience. It would have made me in love with love for the rest of my life. The people who have adored me--there have not been very many, but there have been some--have always insisted on living on, long after I had ceased to care for them, or they to care for me. They have become stout and tedious, and when I meet them, they go in at once for reminiscences. That awful memory of woman! What a fearful thing it is! And what an utter intellectual stagnation it reveals! One should absorb the colour of life, but one should never remember its details. Details are always vulgar." "I must sow poppies in my garden," sighed Dorian. "There is no necessity," rejoined his companion. "Life has always poppies in her hands. Of course, now and then things linger. I once wore nothing but violets all through one season, as a form of artistic mourning for a romance that would not die. Ultimately, however, it did die. I forget what killed it. I think it was her proposing to sacrifice the whole world for me. That is always a dreadful moment. It fills one with the terror of eternity. Well--would you believe it?--a week ago, at Lady Hampshire's, I found myself seated at dinner next the lady in question, and she insisted on going over the whole thing again, and digging up the past, and raking up the future. I had buried my romance in a bed of asphodel. She dragged it out again and assured me that I had spoiled her life. I am bound to state that she ate an enormous dinner, so I did not feel any anxiety. But what a lack of taste she showed! The one charm of the past is that it is the past. But women never know when the curtain has fallen. They always want a sixth act, and as soon as the interest of the play is entirely over, they propose to continue it. If they were allowed their own way, every comedy would have a tragic ending, and every tragedy would culminate in a farce. They are charmingly artificial, but they have no sense of art. You are more fortunate than I am. I assure you, Dorian, that not one of the women I have known would have done for me what Sibyl Vane did for you. Ordinary women always console themselves. Some of them do it by going in for sentimental colours. Never trust a woman who wears mauve, whatever her age may be, or a woman over thirty-five who is fond of pink ribbons. It always means that they have a history. Others find a great consolation in suddenly discovering the good qualities of their husbands. They flaunt their conjugal felicity in one's face, as if it were the most fascinating of sins. Religion consoles some. Its mysteries have all the charm of a flirtation, a woman once told me, and I can quite understand it. Besides, nothing makes one so vain as being told that one is a sinner. Conscience makes egotists of us all. Yes; there is really no end to the consolations that women find in modern life. Indeed, I have not mentioned the most important one." "What is that, Harry?" said the lad listlessly. "Oh, the obvious consolation. Taking some one else's admirer when one loses one's own. In good society that always whitewashes a woman. But really, Dorian, how different Sibyl Vane must have been from all the women one meets! There is something to me quite beautiful about her death. I am glad I am living in a century when such wonders happen. They make one believe in the reality of the things we all play with, such as romance, passion, and love." "I was terribly cruel to her. You forget that." "I am afraid that women appreciate cruelty, downright cruelty, more than anything else. They have wonderfully primitive instincts. We have emancipated them, but they remain slaves looking for their masters, all the same. They love being dominated. I am sure you were splendid. I have never seen you really and absolutely angry, but I can fancy how delightful you looked. And, after all, you said something to me the day before yesterday that seemed to me at the time to be merely fanciful, but that I see now was absolutely true, and it holds the key to everything." "What was that, Harry?" "You said to me that Sibyl Vane represented to you all the heroines of romance--that she was Desdemona one night, and Ophelia the other; that if she died as Juliet, she came to life as Imogen." "She will never come to life again now," muttered the lad, burying his face in his hands. "No, she will never come to life. She has played her last part. But you must think of that lonely death in the tawdry dressing-room simply as a strange lurid fragment from some Jacobean tragedy, as a wonderful scene from Webster, or Ford, or Cyril Tourneur. The girl never really lived, and so she has never really died. To you at least she was always a dream, a phantom that flitted through Shakespeare's plays and left them lovelier for its presence, a reed through which Shakespeare's music sounded richer and more full of joy. The moment she touched actual life, she marred it, and it marred her, and so she passed away. Mourn for Ophelia, if you like. Put ashes on your head because Cordelia was strangled. Cry out against Heaven because the daughter of Brabantio died. But don't waste your tears over Sibyl Vane. She was less real than they are." There was a silence. The evening darkened in the room. Noiselessly, and with silver feet, the shadows crept in from the garden. The colours faded wearily out of things. After some time Dorian Gray looked up. "You have explained me to myself, Harry," he murmured with something of a sigh of relief. "I felt all that you have said, but somehow I was afraid of it, and I could not express it to myself. How well you know me! But we will not talk again of what has happened. It has been a marvellous experience. That is all. I wonder if life has still in store for me anything as marvellous." "Life has everything in store for you, Dorian. There is nothing that you, with your extraordinary good looks, will not be able to do." "But suppose, Harry, I became haggard, and old, and wrinkled? What then?" "Ah, then," said Lord Henry, rising to go, "then, my dear Dorian, you would have to fight for your victories. As it is, they are brought to you. No, you must keep your good looks. We live in an age that reads too much to be wise, and that thinks too much to be beautiful. We cannot spare you. And now you had better dress and drive down to the club. We are rather late, as it is." "I think I shall join you at the opera, Harry. I feel too tired to eat anything. What is the number of your sister's box?" "Twenty-seven, I believe. It is on the grand tier. You will see her name on the door. But I am sorry you won't come and dine." "I don't feel up to it," said Dorian listlessly. "But I am awfully obliged to you for all that you have said to me. You are certainly my best friend. No one has ever understood me as you have." "We are only at the beginning of our friendship, Dorian," answered Lord Henry, shaking him by the hand. "Good-bye. I shall see you before nine-thirty, I hope. Remember, Patti is singing." As he closed the door behind him, Dorian Gray touched the bell, and in a few minutes Victor appeared with the lamps and drew the blinds down. He waited impatiently for him to go. The man seemed to take an interminable time over everything. As soon as he had left, he rushed to the screen and drew it back. No; there was no further change in the picture. It had received the news of Sibyl Vane's death before he had known of it himself. It was conscious of the events of life as they occurred. The vicious cruelty that marred the fine lines of the mouth had, no doubt, appeared at the very moment that the girl had drunk the poison, whatever it was. Or was it indifferent to results? Did it merely take cognizance of what passed within the soul? He wondered, and hoped that some day he would see the change taking place before his very eyes, shuddering as he hoped it. Poor Sibyl! What a romance it had all been! She had often mimicked death on the stage. Then Death himself had touched her and taken her with him. How had she played that dreadful last scene? Had she cursed him, as she died? No; she had died for love of him, and love would always be a sacrament to him now. She had atoned for everything by the sacrifice she had made of her life. He would not think any more of what she had made him go through, on that horrible night at the theatre. When he thought of her, it would be as a wonderful tragic figure sent on to the world's stage to show the supreme reality of love. A wonderful tragic figure? Tears came to his eyes as he remembered her childlike look, and winsome fanciful ways, and shy tremulous grace. He brushed them away hastily and looked again at the picture. He felt that the time had really come for making his choice. Or had his choice already been made? Yes, life had decided that for him--life, and his own infinite curiosity about life. Eternal youth, infinite passion, pleasures subtle and secret, wild joys and wilder sins--he was to have all these things. The portrait was to bear the burden of his shame: that was all. A feeling of pain crept over him as he thought of the desecration that was in store for the fair face on the canvas. Once, in boyish mockery of Narcissus, he had kissed, or feigned to kiss, those painted lips that now smiled so cruelly at him. Morning after morning he had sat before the portrait wondering at its beauty, almost enamoured of it, as it seemed to him at times. Was it to alter now with every mood to which he yielded? Was it to become a monstrous and loathsome thing, to be hidden away in a locked room, to be shut out from the sunlight that had so often touched to brighter gold the waving wonder of its hair? The pity of it! the pity of it! For a moment, he thought of praying that the horrible sympathy that existed between him and the picture might cease. It had changed in answer to a prayer; perhaps in answer to a prayer it might remain unchanged. And yet, who, that knew anything about life, would surrender the chance of remaining always young, however fantastic that chance might be, or with what fateful consequences it might be fraught? Besides, was it really under his control? Had it indeed been prayer that had produced the substitution? Might there not be some curious scientific reason for it all? If thought could exercise its influence upon a living organism, might not thought exercise an influence upon dead and inorganic things? Nay, without thought or conscious desire, might not things external to ourselves vibrate in unison with our moods and passions, atom calling to atom in secret love or strange affinity? But the reason was of no importance. He would never again tempt by a prayer any terrible power. If the picture was to alter, it was to alter. That was all. Why inquire too closely into it? For there would be a real pleasure in watching it. He would be able to follow his mind into its secret places. This portrait would be to him the most magical of mirrors. As it had revealed to him his own body, so it would reveal to him his own soul. And when winter came upon it, he would still be standing where spring trembles on the verge of summer. When the blood crept from its face, and left behind a pallid mask of chalk with leaden eyes, he would keep the glamour of boyhood. Not one blossom of his loveliness would ever fade. Not one pulse of his life would ever weaken. Like the gods of the Greeks, he would be strong, and fleet, and joyous. What did it matter what happened to the coloured image on the canvas? He would be safe. That was everything. He drew the screen back into its former place in front of the picture, smiling as he did so, and passed into his bedroom, where his valet was already waiting for him. An hour later he was at the opera, and Lord Henry was leaning over his chair. CHAPTER 9 As he was sitting at breakfast next morning, Basil Hallward was shown into the room. "I am so glad I have found you, Dorian," he said gravely. "I called last night, and they told me you were at the opera. Of course, I knew that was impossible. But I wish you had left word where you had really gone to. I passed a dreadful evening, half afraid that one tragedy might be followed by another. I think you might have telegraphed for me when you heard of it first. I read of it quite by chance in a late edition of _The Globe_ that I picked up at the club. I came here at once and was miserable at not finding you. I can't tell you how heart-broken I am about the whole thing. I know what you must suffer. But where were you? Did you go down and see the girl's mother? For a moment I thought of following you there. They gave the address in the paper. Somewhere in the Euston Road, isn't it? But I was afraid of intruding upon a sorrow that I could not lighten. Poor woman! What a state she must be in! And her only child, too! What did she say about it all?" "My dear Basil, how do I know?" murmured Dorian Gray, sipping some pale-yellow wine from a delicate, gold-beaded bubble of Venetian glass and looking dreadfully bored. "I was at the opera. You should have come on there. I met Lady Gwendolen, Harry's sister, for the first time. We were in her box. She is perfectly charming; and Patti sang divinely. Don't talk about horrid subjects. If one doesn't talk about a thing, it has never happened. It is simply expression, as Harry says, that gives reality to things. I may mention that she was not the woman's only child. There is a son, a charming fellow, I believe. But he is not on the stage. He is a sailor, or something. And now, tell me about yourself and what you are painting." "You went to the opera?" said Hallward, speaking very slowly and with a strained touch of pain in his voice. "You went to the opera while Sibyl Vane was lying dead in some sordid lodging? You can talk to me of other women being charming, and of Patti singing divinely, before the girl you loved has even the quiet of a grave to sleep in? Why, man, there are horrors in store for that little white body of hers!" "Stop, Basil! I won't hear it!" cried Dorian, leaping to his feet. "You must not tell me about things. What is done is done. What is past is past." "You call yesterday the past?" "What has the actual lapse of time got to do with it? It is only shallow people who require years to get rid of an emotion. A man who is master of himself can end a sorrow as easily as he can invent a pleasure. I don't want to be at the mercy of my emotions. I want to use them, to enjoy them, and to dominate them." "Dorian, this is horrible! Something has changed you completely. You look exactly the same wonderful boy who, day after day, used to come down to my studio to sit for his picture. But you were simple, natural, and affectionate then. You were the most unspoiled creature in the whole world. Now, I don't know what has come over you. You talk as if you had no heart, no pity in you. It is all Harry's influence. I see that." The lad flushed up and, going to the window, looked out for a few moments on the green, flickering, sun-lashed garden. "I owe a great deal to Harry, Basil," he said at last, "more than I owe to you. You only taught me to be vain." "Well, I am punished for that, Dorian--or shall be some day." "I don't know what you mean, Basil," he exclaimed, turning round. "I don't know what you want. What do you want?" "I want the Dorian Gray I used to paint," said the artist sadly. "Basil," said the lad, going over to him and putting his hand on his shoulder, "you have come too late. Yesterday, when I heard that Sibyl Vane had killed herself--" "Killed herself! Good heavens! is there no doubt about that?" cried Hallward, looking up at him with an expression of horror. "My dear Basil! Surely you don't think it was a vulgar accident? Of course she killed herself." The elder man buried his face in his hands. "How fearful," he muttered, and a shudder ran through him. "No," said Dorian Gray, "there is nothing fearful about it. It is one of the great romantic tragedies of the age. As a rule, people who act lead the most commonplace lives. They are good husbands, or faithful wives, or something tedious. You know what I mean--middle-class virtue and all that kind of thing. How different Sibyl was! She lived her finest tragedy. She was always a heroine. The last night she played--the night you saw her--she acted badly because she had known the reality of love. When she knew its unreality, she died, as Juliet might have died. She passed again into the sphere of art. There is something of the martyr about her. Her death has all the pathetic uselessness of martyrdom, all its wasted beauty. But, as I was saying, you must not think I have not suffered. If you had come in yesterday at a particular moment--about half-past five, perhaps, or a quarter to six--you would have found me in tears. Even Harry, who was here, who brought me the news, in fact, had no idea what I was going through. I suffered immensely. Then it passed away. I cannot repeat an emotion. No one can, except sentimentalists. And you are awfully unjust, Basil. You come down here to console me. That is charming of you. You find me consoled, and you are furious. How like a sympathetic person! You remind me of a story Harry told me about a certain philanthropist who spent twenty years of his life in trying to get some grievance redressed, or some unjust law altered--I forget exactly what it was. Finally he succeeded, and nothing could exceed his disappointment. He had absolutely nothing to do, almost died of _ennui_, and became a confirmed misanthrope. And besides, my dear old Basil, if you really want to console me, teach me rather to forget what has happened, or to see it from a proper artistic point of view. Was it not Gautier who used to write about _la consolation des arts_? I remember picking up a little vellum-covered book in your studio one day and chancing on that delightful phrase. Well, I am not like that young man you told me of when we were down at Marlow together, the young man who used to say that yellow satin could console one for all the miseries of life. I love beautiful things that one can touch and handle. Old brocades, green bronzes, lacquer-work, carved ivories, exquisite surroundings, luxury, pomp--there is much to be got from all these. But the artistic temperament that they create, or at any rate reveal, is still more to me. To become the spectator of one's own life, as Harry says, is to escape the suffering of life. I know you are surprised at my talking to you like this. You have not realized how I have developed. I was a schoolboy when you knew me. I am a man now. I have new passions, new thoughts, new ideas. I am different, but you must not like me less. I am changed, but you must always be my friend. Of course, I am very fond of Harry. But I know that you are better than he is. You are not stronger--you are too much afraid of life--but you are better. And how happy we used to be together! Don't leave me, Basil, and don't quarrel with me. I am what I am. There is nothing more to be said." The painter felt strangely moved. The lad was infinitely dear to him, and his personality had been the great turning point in his art. He could not bear the idea of reproaching him any more. After all, his indifference was probably merely a mood that would pass away. There was so much in him that was good, so much in him that was noble. "Well, Dorian," he said at length, with a sad smile, "I won't speak to you again about this horrible thing, after to-day. I only trust your name won't be mentioned in connection with it. The inquest is to take place this afternoon. Have they summoned you?" Dorian shook his head, and a look of annoyance passed over his face at the mention of the word "inquest." There was something so crude and vulgar about everything of the kind. "They don't know my name," he answered. "But surely she did?" "Only my Christian name, and that I am quite sure she never mentioned to any one. She told me once that they were all rather curious to learn who I was, and that she invariably told them my name was Prince Charming. It was pretty of her. You must do me a drawing of Sibyl, Basil. I should like to have something more of her than the memory of a few kisses and some broken pathetic words." "I will try and do something, Dorian, if it would please you. But you must come and sit to me yourself again. I can't get on without you." "I can never sit to you again, Basil. It is impossible!" he exclaimed, starting back. The painter stared at him. "My dear boy, what nonsense!" he cried. "Do you mean to say you don't like what I did of you? Where is it? Why have you pulled the screen in front of it? Let me look at it. It is the best thing I have ever done. Do take the screen away, Dorian. It is simply disgraceful of your servant hiding my work like that. I felt the room looked different as I came in." "My servant has nothing to do with it, Basil. You don't imagine I let him arrange my room for me? He settles my flowers for me sometimes--that is all. No; I did it myself. The light was too strong on the portrait." "Too strong! Surely not, my dear fellow? It is an admirable place for it. Let me see it." And Hallward walked towards the corner of the room. A cry of terror broke from Dorian Gray's lips, and he rushed between the painter and the screen. "Basil," he said, looking very pale, "you must not look at it. I don't wish you to." "Not look at my own work! You are not serious. Why shouldn't I look at it?" exclaimed Hallward, laughing. "If you try to look at it, Basil, on my word of honour I will never speak to you again as long as I live. I am quite serious. I don't offer any explanation, and you are not to ask for any. But, remember, if you touch this screen, everything is over between us." Hallward was thunderstruck. He looked at Dorian Gray in absolute amazement. He had never seen him like this before. The lad was actually pallid with rage. His hands were clenched, and the pupils of his eyes were like disks of blue fire. He was trembling all over. "Dorian!" "Don't speak!" "But what is the matter? Of course I won't look at it if you don't want me to," he said, rather coldly, turning on his heel and going over towards the window. "But, really, it seems rather absurd that I shouldn't see my own work, especially as I am going to exhibit it in Paris in the autumn. I shall probably have to give it another coat of varnish before that, so I must see it some day, and why not to-day?" "To exhibit it! You want to exhibit it?" exclaimed Dorian Gray, a strange sense of terror creeping over him. Was the world going to be shown his secret? Were people to gape at the mystery of his life? That was impossible. Something--he did not know what--had to be done at once. "Yes; I don't suppose you will object to that. Georges Petit is going to collect all my best pictures for a special exhibition in the Rue de Seze, which will open the first week in October. The portrait will only be away a month. I should think you could easily spare it for that time. In fact, you are sure to be out of town. And if you keep it always behind a screen, you can't care much about it." Dorian Gray passed his hand over his forehead. There were beads of perspiration there. He felt that he was on the brink of a horrible danger. "You told me a month ago that you would never exhibit it," he cried. "Why have you changed your mind? You people who go in for being consistent have just as many moods as others have. The only difference is that your moods are rather meaningless. You can't have forgotten that you assured me most solemnly that nothing in the world would induce you to send it to any exhibition. You told Harry exactly the same thing." He stopped suddenly, and a gleam of light came into his eyes. He remembered that Lord Henry had said to him once, half seriously and half in jest, "If you want to have a strange quarter of an hour, get Basil to tell you why he won't exhibit your picture. He told me why he wouldn't, and it was a revelation to me." Yes, perhaps Basil, too, had his secret. He would ask him and try. "Basil," he said, coming over quite close and looking him straight in the face, "we have each of us a secret. Let me know yours, and I shall tell you mine. What was your reason for refusing to exhibit my picture?" The painter shuddered in spite of himself. "Dorian, if I told you, you might like me less than you do, and you would certainly laugh at me. I could not bear your doing either of those two things. If you wish me never to look at your picture again, I am content. I have always you to look at. If you wish the best work I have ever done to be hidden from the world, I am satisfied. Your friendship is dearer to me than any fame or reputation." "No, Basil, you must tell me," insisted Dorian Gray. "I think I have a right to know." His feeling of terror had passed away, and curiosity had taken its place. He was determined to find out Basil Hallward's mystery. "Let us sit down, Dorian," said the painter, looking troubled. "Let us sit down. And just answer me one question. Have you noticed in the picture something curious?--something that probably at first did not strike you, but that revealed itself to you suddenly?" "Basil!" cried the lad, clutching the arms of his chair with trembling hands and gazing at him with wild startled eyes. "I see you did. Don't speak. Wait till you hear what I have to say. Dorian, from the moment I met you, your personality had the most extraordinary influence over me. I was dominated, soul, brain, and power, by you. You became to me the visible incarnation of that unseen ideal whose memory haunts us artists like an exquisite dream. I worshipped you. I grew jealous of every one to whom you spoke. I wanted to have you all to myself. I was only happy when I was with you. When you were away from me, you were still present in my art.... Of course, I never let you know anything about this. It would have been impossible. You would not have understood it. I hardly understood it myself. I only knew that I had seen perfection face to face, and that the world had become wonderful to my eyes--too wonderful, perhaps, for in such mad worships there is peril, the peril of losing them, no less than the peril of keeping them.... Weeks and weeks went on, and I grew more and more absorbed in you. Then came a new development. I had drawn you as Paris in dainty armour, and as Adonis with huntsman's cloak and polished boar-spear. Crowned with heavy lotus-blossoms you had sat on the prow of Adrian's barge, gazing across the green turbid Nile. You had leaned over the still pool of some Greek woodland and seen in the water's silent silver the marvel of your own face. And it had all been what art should be--unconscious, ideal, and remote. One day, a fatal day I sometimes think, I determined to paint a wonderful portrait of you as you actually are, not in the costume of dead ages, but in your own dress and in your own time. Whether it was the realism of the method, or the mere wonder of your own personality, thus directly presented to me without mist or veil, I cannot tell. But I know that as I worked at it, every flake and film of colour seemed to me to reveal my secret. I grew afraid that others would know of my idolatry. I felt, Dorian, that I had told too much, that I had put too much of myself into it. Then it was that I resolved never to allow the picture to be exhibited. You were a little annoyed; but then you did not realize all that it meant to me. Harry, to whom I talked about it, laughed at me. But I did not mind that. When the picture was finished, and I sat alone with it, I felt that I was right.... Well, after a few days the thing left my studio, and as soon as I had got rid of the intolerable fascination of its presence, it seemed to me that I had been foolish in imagining that I had seen anything in it, more than that you were extremely good-looking and that I could paint. Even now I cannot help feeling that it is a mistake to think that the passion one feels in creation is ever really shown in the work one creates. Art is always more abstract than we fancy. Form and colour tell us of form and colour--that is all. It often seems to me that art conceals the artist far more completely than it ever reveals him. And so when I got this offer from Paris, I determined to make your portrait the principal thing in my exhibition. It never occurred to me that you would refuse. I see now that you were right. The picture cannot be shown. You must not be angry with me, Dorian, for what I have told you. As I said to Harry, once, you are made to be worshipped." Dorian Gray drew a long breath. The colour came back to his cheeks, and a smile played about his lips. The peril was over. He was safe for the time. Yet he could not help feeling infinite pity for the painter who had just made this strange confession to him, and wondered if he himself would ever be so dominated by the personality of a friend. Lord Henry had the charm of being very dangerous. But that was all. He was too clever and too cynical to be really fond of. Would there ever be some one who would fill him with a strange idolatry? Was that one of the things that life had in store? "It is extraordinary to me, Dorian," said Hallward, "that you should have seen this in the portrait. Did you really see it?" "I saw something in it," he answered, "something that seemed to me very curious." "Well, you don't mind my looking at the thing now?" Dorian shook his head. "You must not ask me that, Basil. I could not possibly let you stand in front of that picture." "You will some day, surely?" "Never." "Well, perhaps you are right. And now good-bye, Dorian. You have been the one person in my life who has really influenced my art. Whatever I have done that is good, I owe to you. Ah! you don't know what it cost me to tell you all that I have told you." "My dear Basil," said Dorian, "what have you told me? Simply that you felt that you admired me too much. That is not even a compliment." "It was not intended as a compliment. It was a confession. Now that I have made it, something seems to have gone out of me. Perhaps one should never put one's worship into words." "It was a very disappointing confession." "Why, what did you expect, Dorian? You didn't see anything else in the picture, did you? There was nothing else to see?" "No; there was nothing else to see. Why do you ask? But you mustn't talk about worship. It is foolish. You and I are friends, Basil, and we must always remain so." "You have got Harry," said the painter sadly. "Oh, Harry!" cried the lad, with a ripple of laughter. "Harry spends his days in saying what is incredible and his evenings in doing what is improbable. Just the sort of life I would like to lead. But still I don't think I would go to Harry if I were in trouble. I would sooner go to you, Basil." "You will sit to me again?" "Impossible!" "You spoil my life as an artist by refusing, Dorian. No man comes across two ideal things. Few come across one." "I can't explain it to you, Basil, but I must never sit to you again. There is something fatal about a portrait. It has a life of its own. I will come and have tea with you. That will be just as pleasant." "Pleasanter for you, I am afraid," murmured Hallward regretfully. "And now good-bye. I am sorry you won't let me look at the picture once again. But that can't be helped. I quite understand what you feel about it." As he left the room, Dorian Gray smiled to himself. Poor Basil! How little he knew of the true reason! And how strange it was that, instead of having been forced to reveal his own secret, he had succeeded, almost by chance, in wresting a secret from his friend! How much that strange confession explained to him! The painter's absurd fits of jealousy, his wild devotion, his extravagant panegyrics, his curious reticences--he understood them all now, and he felt sorry. There seemed to him to be something tragic in a friendship so coloured by romance. He sighed and touched the bell. The portrait must be hidden away at all costs. He could not run such a risk of discovery again. It had been mad of him to have allowed the thing to remain, even for an hour, in a room to which any of his friends had access. CHAPTER 10 When his servant entered, he looked at him steadfastly and wondered if he had thought of peering behind the screen. The man was quite impassive and waited for his orders. Dorian lit a cigarette and walked over to the glass and glanced into it. He could see the reflection of Victor's face perfectly. It was like a placid mask of servility. There was nothing to be afraid of, there. Yet he thought it best to be on his guard. Speaking very slowly, he told him to tell the house-keeper that he wanted to see her, and then to go to the frame-maker and ask him to send two of his men round at once. It seemed to him that as the man left the room his eyes wandered in the direction of the screen. Or was that merely his own fancy? After a few moments, in her black silk dress, with old-fashioned thread mittens on her wrinkled hands, Mrs. Leaf bustled into the library. He asked her for the key of the schoolroom. "The old schoolroom, Mr. Dorian?" she exclaimed. "Why, it is full of dust. I must get it arranged and put straight before you go into it. It is not fit for you to see, sir. It is not, indeed." "I don't want it put straight, Leaf. I only want the key." "Well, sir, you'll be covered with cobwebs if you go into it. Why, it hasn't been opened for nearly five years--not since his lordship died." He winced at the mention of his grandfather. He had hateful memories of him. "That does not matter," he answered. "I simply want to see the place--that is all. Give me the key." "And here is the key, sir," said the old lady, going over the contents of her bunch with tremulously uncertain hands. "Here is the key. I'll have it off the bunch in a moment. But you don't think of living up there, sir, and you so comfortable here?" "No, no," he cried petulantly. "Thank you, Leaf. That will do." She lingered for a few moments, and was garrulous over some detail of the household. He sighed and told her to manage things as she thought best. She left the room, wreathed in smiles. As the door closed, Dorian put the key in his pocket and looked round the room. His eye fell on a large, purple satin coverlet heavily embroidered with gold, a splendid piece of late seventeenth-century Venetian work that his grandfather had found in a convent near Bologna. Yes, that would serve to wrap the dreadful thing in. It had perhaps served often as a pall for the dead. Now it was to hide something that had a corruption of its own, worse than the corruption of death itself--something that would breed horrors and yet would never die. What the worm was to the corpse, his sins would be to the painted image on the canvas. They would mar its beauty and eat away its grace. They would defile it and make it shameful. And yet the thing would still live on. It would be always alive. He shuddered, and for a moment he regretted that he had not told Basil the true reason why he had wished to hide the picture away. Basil would have helped him to resist Lord Henry's influence, and the still more poisonous influences that came from his own temperament. The love that he bore him--for it was really love--had nothing in it that was not noble and intellectual. It was not that mere physical admiration of beauty that is born of the senses and that dies when the senses tire. It was such love as Michelangelo had known, and Montaigne, and Winckelmann, and Shakespeare himself. Yes, Basil could have saved him. But it was too late now. The past could always be annihilated. Regret, denial, or forgetfulness could do that. But the future was inevitable. There were passions in him that would find their terrible outlet, dreams that would make the shadow of their evil real. He took up from the couch the great purple-and-gold texture that covered it, and, holding it in his hands, passed behind the screen. Was the face on the canvas viler than before? It seemed to him that it was unchanged, and yet his loathing of it was intensified. Gold hair, blue eyes, and rose-red lips--they all were there. It was simply the expression that had altered. That was horrible in its cruelty. Compared to what he saw in it of censure or rebuke, how shallow Basil's reproaches about Sibyl Vane had been!--how shallow, and of what little account! His own soul was looking out at him from the canvas and calling him to judgement. A look of pain came across him, and he flung the rich pall over the picture. As he did so, a knock came to the door. He passed out as his servant entered. "The persons are here, Monsieur." He felt that the man must be got rid of at once. He must not be allowed to know where the picture was being taken to. There was something sly about him, and he had thoughtful, treacherous eyes. Sitting down at the writing-table he scribbled a note to Lord Henry, asking him to send him round something to read and reminding him that they were to meet at eight-fifteen that evening. "Wait for an answer," he said, handing it to him, "and show the men in here." In two or three minutes there was another knock, and Mr. Hubbard himself, the celebrated frame-maker of South Audley Street, came in with a somewhat rough-looking young assistant. Mr. Hubbard was a florid, red-whiskered little man, whose admiration for art was considerably tempered by the inveterate impecuniosity of most of the artists who dealt with him. As a rule, he never left his shop. He waited for people to come to him. But he always made an exception in favour of Dorian Gray. There was something about Dorian that charmed everybody. It was a pleasure even to see him. "What can I do for you, Mr. Gray?" he said, rubbing his fat freckled hands. "I thought I would do myself the honour of coming round in person. I have just got a beauty of a frame, sir. Picked it up at a sale. Old Florentine. Came from Fonthill, I believe. Admirably suited for a religious subject, Mr. Gray." "I am so sorry you have given yourself the trouble of coming round, Mr. Hubbard. I shall certainly drop in and look at the frame--though I don't go in much at present for religious art--but to-day I only want a picture carried to the top of the house for me. It is rather heavy, so I thought I would ask you to lend me a couple of your men." "No trouble at all, Mr. Gray. I am delighted to be of any service to you. Which is the work of art, sir?" "This," replied Dorian, moving the screen back. "Can you move it, covering and all, just as it is? I don't want it to get scratched going upstairs." "There will be no difficulty, sir," said the genial frame-maker, beginning, with the aid of his assistant, to unhook the picture from the long brass chains by which it was suspended. "And, now, where shall we carry it to, Mr. Gray?" "I will show you the way, Mr. Hubbard, if you will kindly follow me. Or perhaps you had better go in front. I am afraid it is right at the top of the house. We will go up by the front staircase, as it is wider." He held the door open for them, and they passed out into the hall and began the ascent. The elaborate character of the frame had made the picture extremely bulky, and now and then, in spite of the obsequious protests of Mr. Hubbard, who had the true tradesman's spirited dislike of seeing a gentleman doing anything useful, Dorian put his hand to it so as to help them. "Something of a load to carry, sir," gasped the little man when they reached the top landing. And he wiped his shiny forehead. "I am afraid it is rather heavy," murmured Dorian as he unlocked the door that opened into the room that was to keep for him the curious secret of his life and hide his soul from the eyes of men. He had not entered the place for more than four years--not, indeed, since he had used it first as a play-room when he was a child, and then as a study when he grew somewhat older. It was a large, well-proportioned room, which had been specially built by the last Lord Kelso for the use of the little grandson whom, for his strange likeness to his mother, and also for other reasons, he had always hated and desired to keep at a distance. It appeared to Dorian to have but little changed. There was the huge Italian _cassone_, with its fantastically painted panels and its tarnished gilt mouldings, in which he had so often hidden himself as a boy. There the satinwood book-case filled with his dog-eared schoolbooks. On the wall behind it was hanging the same ragged Flemish tapestry where a faded king and queen were playing chess in a garden, while a company of hawkers rode by, carrying hooded birds on their gauntleted wrists. How well he remembered it all! Every moment of his lonely childhood came back to him as he looked round. He recalled the stainless purity of his boyish life, and it seemed horrible to him that it was here the fatal portrait was to be hidden away. How little he had thought, in those dead days, of all that was in store for him! But there was no other place in the house so secure from prying eyes as this. He had the key, and no one else could enter it. Beneath its purple pall, the face painted on the canvas could grow bestial, sodden, and unclean. What did it matter? No one could see it. He himself would not see it. Why should he watch the hideous corruption of his soul? He kept his youth--that was enough. And, besides, might not his nature grow finer, after all? There was no reason that the future should be so full of shame. Some love might come across his life, and purify him, and shield him from those sins that seemed to be already stirring in spirit and in flesh--those curious unpictured sins whose very mystery lent them their subtlety and their charm. Perhaps, some day, the cruel look would have passed away from the scarlet sensitive mouth, and he might show to the world Basil Hallward's masterpiece. No; that was impossible. Hour by hour, and week by week, the thing upon the canvas was growing old. It might escape the hideousness of sin, but the hideousness of age was in store for it. The cheeks would become hollow or flaccid. Yellow crow's feet would creep round the fading eyes and make them horrible. The hair would lose its brightness, the mouth would gape or droop, would be foolish or gross, as the mouths of old men are. There would be the wrinkled throat, the cold, blue-veined hands, the twisted body, that he remembered in the grandfather who had been so stern to him in his boyhood. The picture had to be concealed. There was no help for it. "Bring it in, Mr. Hubbard, please," he said, wearily, turning round. "I am sorry I kept you so long. I was thinking of something else." "Always glad to have a rest, Mr. Gray," answered the frame-maker, who was still gasping for breath. "Where shall we put it, sir?" "Oh, anywhere. Here: this will do. I don't want to have it hung up. Just lean it against the wall. Thanks." "Might one look at the work of art, sir?" Dorian started. "It would not interest you, Mr. Hubbard," he said, keeping his eye on the man. He felt ready to leap upon him and fling him to the ground if he dared to lift the gorgeous hanging that concealed the secret of his life. "I shan't trouble you any more now. I am much obliged for your kindness in coming round." "Not at all, not at all, Mr. Gray. Ever ready to do anything for you, sir." And Mr. Hubbard tramped downstairs, followed by the assistant, who glanced back at Dorian with a look of shy wonder in his rough uncomely face. He had never seen any one so marvellous. When the sound of their footsteps had died away, Dorian locked the door and put the key in his pocket. He felt safe now. No one would ever look upon the horrible thing. No eye but his would ever see his shame. On reaching the library, he found that it was just after five o'clock and that the tea had been already brought up. On a little table of dark perfumed wood thickly incrusted with nacre, a present from Lady Radley, his guardian's wife, a pretty professional invalid who had spent the preceding winter in Cairo, was lying a note from Lord Henry, and beside it was a book bound in yellow paper, the cover slightly torn and the edges soiled. A copy of the third edition of _The St. James's Gazette_ had been placed on the tea-tray. It was evident that Victor had returned. He wondered if he had met the men in the hall as they were leaving the house and had wormed out of them what they had been doing. He would be sure to miss the picture--had no doubt missed it already, while he had been laying the tea-things. The screen had not been set back, and a blank space was visible on the wall. Perhaps some night he might find him creeping upstairs and trying to force the door of the room. It was a horrible thing to have a spy in one's house. He had heard of rich men who had been blackmailed all their lives by some servant who had read a letter, or overheard a conversation, or picked up a card with an address, or found beneath a pillow a withered flower or a shred of crumpled lace. He sighed, and having poured himself out some tea, opened Lord Henry's note. It was simply to say that he sent him round the evening paper, and a book that might interest him, and that he would be at the club at eight-fifteen. He opened _The St. James's_ languidly, and looked through it. A red pencil-mark on the fifth page caught his eye. It drew attention to the following paragraph: INQUEST ON AN ACTRESS.--An inquest was held this morning at the Bell Tavern, Hoxton Road, by Mr. Danby, the District Coroner, on the body of Sibyl Vane, a young actress recently engaged at the Royal Theatre, Holborn. A verdict of death by misadventure was returned. Considerable sympathy was expressed for the mother of the deceased, who was greatly affected during the giving of her own evidence, and that of Dr. Birrell, who had made the post-mortem examination of the deceased. He frowned, and tearing the paper in two, went across the room and flung the pieces away. How ugly it all was! And how horribly real ugliness made things! He felt a little annoyed with Lord Henry for having sent him the report. And it was certainly stupid of him to have marked it with red pencil. Victor might have read it. The man knew more than enough English for that. Perhaps he had read it and had begun to suspect something. And, yet, what did it matter? What had Dorian Gray to do with Sibyl Vane's death? There was nothing to fear. Dorian Gray had not killed her. His eye fell on the yellow book that Lord Henry had sent him. What was it, he wondered. He went towards the little, pearl-coloured octagonal stand that had always looked to him like the work of some strange Egyptian bees that wrought in silver, and taking up the volume, flung himself into an arm-chair and began to turn over the leaves. After a few minutes he became absorbed. It was the strangest book that he had ever read. It seemed to him that in exquisite raiment, and to the delicate sound of flutes, the sins of the world were passing in dumb show before him. Things that he had dimly dreamed of were suddenly made real to him. Things of which he had never dreamed were gradually revealed. It was a novel without a plot and with only one character, being, indeed, simply a psychological study of a certain young Parisian who spent his life trying to realize in the nineteenth century all the passions and modes of thought that belonged to every century except his own, and to sum up, as it were, in himself the various moods through which the world-spirit had ever passed, loving for their mere artificiality those renunciations that men have unwisely called virtue, as much as those natural rebellions that wise men still call sin. The style in which it was written was that curious jewelled style, vivid and obscure at once, full of _argot_ and of archaisms, of technical expressions and of elaborate paraphrases, that characterizes the work of some of the finest artists of the French school of _Symbolistes_. There were in it metaphors as monstrous as orchids and as subtle in colour. The life of the senses was described in the terms of mystical philosophy. One hardly knew at times whether one was reading the spiritual ecstasies of some mediaeval saint or the morbid confessions of a modern sinner. It was a poisonous book. The heavy odour of incense seemed to cling about its pages and to trouble the brain. The mere cadence of the sentences, the subtle monotony of their music, so full as it was of complex refrains and movements elaborately repeated, produced in the mind of the lad, as he passed from chapter to chapter, a form of reverie, a malady of dreaming, that made him unconscious of the falling day and creeping shadows. Cloudless, and pierced by one solitary star, a copper-green sky gleamed through the windows. He read on by its wan light till he could read no more. Then, after his valet had reminded him several times of the lateness of the hour, he got up, and going into the next room, placed the book on the little Florentine table that always stood at his bedside and began to dress for dinner. It was almost nine o'clock before he reached the club, where he found Lord Henry sitting alone, in the morning-room, looking very much bored. "I am so sorry, Harry," he cried, "but really it is entirely your fault. That book you sent me so fascinated me that I forgot how the time was going." "Yes, I thought you would like it," replied his host, rising from his chair. "I didn't say I liked it, Harry. I said it fascinated me. There is a great difference." "Ah, you have discovered that?" murmured Lord Henry. And they passed into the dining-room. CHAPTER 11 For years, Dorian Gray could not free himself from the influence of this book. Or perhaps it would be more accurate to say that he never sought to free himself from it. He procured from Paris no less than nine large-paper copies of the first edition, and had them bound in different colours, so that they might suit his various moods and the changing fancies of a nature over which he seemed, at times, to have almost entirely lost control. The hero, the wonderful young Parisian in whom the romantic and the scientific temperaments were so strangely blended, became to him a kind of prefiguring type of himself. And, indeed, the whole book seemed to him to contain the story of his own life, written before he had lived it. In one point he was more fortunate than the novel's fantastic hero. He never knew--never, indeed, had any cause to know--that somewhat grotesque dread of mirrors, and polished metal surfaces, and still water which came upon the young Parisian so early in his life, and was occasioned by the sudden decay of a beau that had once, apparently, been so remarkable. It was with an almost cruel joy--and perhaps in nearly every joy, as certainly in every pleasure, cruelty has its place--that he used to read the latter part of the book, with its really tragic, if somewhat overemphasized, account of the sorrow and despair of one who had himself lost what in others, and the world, he had most dearly valued. For the wonderful beauty that had so fascinated Basil Hallward, and many others besides him, seemed never to leave him. Even those who had heard the most evil things against him--and from time to time strange rumours about his mode of life crept through London and became the chatter of the clubs--could not believe anything to his dishonour when they saw him. He had always the look of one who had kept himself unspotted from the world. Men who talked grossly became silent when Dorian Gray entered the room. There was something in the purity of his face that rebuked them. His mere presence seemed to recall to them the memory of the innocence that they had tarnished. They wondered how one so charming and graceful as he was could have escaped the stain of an age that was at once sordid and sensual. Often, on returning home from one of those mysterious and prolonged absences that gave rise to such strange conjecture among those who were his friends, or thought that they were so, he himself would creep upstairs to the locked room, open the door with the key that never left him now, and stand, with a mirror, in front of the portrait that Basil Hallward had painted of him, looking now at the evil and aging face on the canvas, and now at the fair young face that laughed back at him from the polished glass. The very sharpness of the contrast used to quicken his sense of pleasure. He grew more and more enamoured of his own beauty, more and more interested in the corruption of his own soul. He would examine with minute care, and sometimes with a monstrous and terrible delight, the hideous lines that seared the wrinkling forehead or crawled around the heavy sensual mouth, wondering sometimes which were the more horrible, the signs of sin or the signs of age. He would place his white hands beside the coarse bloated hands of the picture, and smile. He mocked the misshapen body and the failing limbs. There were moments, indeed, at night, when, lying sleepless in his own delicately scented chamber, or in the sordid room of the little ill-famed tavern near the docks which, under an assumed name and in disguise, it was his habit to frequent, he would think of the ruin he had brought upon his soul with a pity that was all the more poignant because it was purely selfish. But moments such as these were rare. That curiosity about life which Lord Henry had first stirred in him, as they sat together in the garden of their friend, seemed to increase with gratification. The more he knew, the more he desired to know. He had mad hungers that grew more ravenous as he fed them. Yet he was not really reckless, at any rate in his relations to society. Once or twice every month during the winter, and on each Wednesday evening while the season lasted, he would throw open to the world his beautiful house and have the most celebrated musicians of the day to charm his guests with the wonders of their art. His little dinners, in the settling of which Lord Henry always assisted him, were noted as much for the careful selection and placing of those invited, as for the exquisite taste shown in the decoration of the table, with its subtle symphonic arrangements of exotic flowers, and embroidered cloths, and antique plate of gold and silver. Indeed, there were many, especially among the very young men, who saw, or fancied that they saw, in Dorian Gray the true realization of a type of which they had often dreamed in Eton or Oxford days, a type that was to combine something of the real culture of the scholar with all the grace and distinction and perfect manner of a citizen of the world. To them he seemed to be of the company of those whom Dante describes as having sought to "make themselves perfect by the worship of beauty." Like Gautier, he was one for whom "the visible world existed." And, certainly, to him life itself was the first, the greatest, of the arts, and for it all the other arts seemed to be but a preparation. Fashion, by which what is really fantastic becomes for a moment universal, and dandyism, which, in its own way, is an attempt to assert the absolute modernity of beauty, had, of course, their fascination for him. His mode of dressing, and the particular styles that from time to time he affected, had their marked influence on the young exquisites of the Mayfair balls and Pall Mall club windows, who copied him in everything that he did, and tried to reproduce the accidental charm of his graceful, though to him only half-serious, fopperies. For, while he was but too ready to accept the position that was almost immediately offered to him on his coming of age, and found, indeed, a subtle pleasure in the thought that he might really become to the London of his own day what to imperial Neronian Rome the author of the Satyricon once had been, yet in his inmost heart he desired to be something more than a mere _arbiter elegantiarum_, to be consulted on the wearing of a jewel, or the knotting of a necktie, or the conduct of a cane. He sought to elaborate some new scheme of life that would have its reasoned philosophy and its ordered principles, and find in the spiritualizing of the senses its highest realization. The worship of the senses has often, and with much justice, been decried, men feeling a natural instinct of terror about passions and sensations that seem stronger than themselves, and that they are conscious of sharing with the less highly organized forms of existence. But it appeared to Dorian Gray that the true nature of the senses had never been understood, and that they had remained savage and animal merely because the world had sought to starve them into submission or to kill them by pain, instead of aiming at making them elements of a new spirituality, of which a fine instinct for beauty was to be the dominant characteristic. As he looked back upon man moving through history, he was haunted by a feeling of loss. So much had been surrendered! and to such little purpose! There had been mad wilful rejections, monstrous forms of self-torture and self-denial, whose origin was fear and whose result was a degradation infinitely more terrible than that fancied degradation from which, in their ignorance, they had sought to escape; Nature, in her wonderful irony, driving out the anchorite to feed with the wild animals of the desert and giving to the hermit the beasts of the field as his companions. Yes: there was to be, as Lord Henry had prophesied, a new Hedonism that was to recreate life and to save it from that harsh uncomely puritanism that is having, in our own day, its curious revival. It was to have its service of the intellect, certainly, yet it was never to accept any theory or system that would involve the sacrifice of any mode of passionate experience. Its aim, indeed, was to be experience itself, and not the fruits of experience, sweet or bitter as they might be. Of the asceticism that deadens the senses, as of the vulgar profligacy that dulls them, it was to know nothing. But it was to teach man to concentrate himself upon the moments of a life that is itself but a moment. There are few of us who have not sometimes wakened before dawn, either after one of those dreamless nights that make us almost enamoured of death, or one of those nights of horror and misshapen joy, when through the chambers of the brain sweep phantoms more terrible than reality itself, and instinct with that vivid life that lurks in all grotesques, and that lends to Gothic art its enduring vitality, this art being, one might fancy, especially the art of those whose minds have been troubled with the malady of reverie. Gradually white fingers creep through the curtains, and they appear to tremble. In black fantastic shapes, dumb shadows crawl into the corners of the room and crouch there. Outside, there is the stirring of birds among the leaves, or the sound of men going forth to their work, or the sigh and sob of the wind coming down from the hills and wandering round the silent house, as though it feared to wake the sleepers and yet must needs call forth sleep from her purple cave. Veil after veil of thin dusky gauze is lifted, and by degrees the forms and colours of things are restored to them, and we watch the dawn remaking the world in its antique pattern. The wan mirrors get back their mimic life. The flameless tapers stand where we had left them, and beside them lies the half-cut book that we had been studying, or the wired flower that we had worn at the ball, or the letter that we had been afraid to read, or that we had read too often. Nothing seems to us changed. Out of the unreal shadows of the night comes back the real life that we had known. We have to resume it where we had left off, and there steals over us a terrible sense of the necessity for the continuance of energy in the same wearisome round of stereotyped habits, or a wild longing, it may be, that our eyelids might open some morning upon a world that had been refashioned anew in the darkness for our pleasure, a world in which things would have fresh shapes and colours, and be changed, or have other secrets, a world in which the past would have little or no place, or survive, at any rate, in no conscious form of obligation or regret, the remembrance even of joy having its bitterness and the memories of pleasure their pain. It was the creation of such worlds as these that seemed to Dorian Gray to be the true object, or amongst the true objects, of life; and in his search for sensations that would be at once new and delightful, and possess that element of strangeness that is so essential to romance, he would often adopt certain modes of thought that he knew to be really alien to his nature, abandon himself to their subtle influences, and then, having, as it were, caught their colour and satisfied his intellectual curiosity, leave them with that curious indifference that is not incompatible with a real ardour of temperament, and that, indeed, according to certain modern psychologists, is often a condition of it. It was rumoured of him once that he was about to join the Roman Catholic communion, and certainly the Roman ritual had always a great attraction for him. The daily sacrifice, more awful really than all the sacrifices of the antique world, stirred him as much by its superb rejection of the evidence of the senses as by the primitive simplicity of its elements and the eternal pathos of the human tragedy that it sought to symbolize. He loved to kneel down on the cold marble pavement and watch the priest, in his stiff flowered dalmatic, slowly and with white hands moving aside the veil of the tabernacle, or raising aloft the jewelled, lantern-shaped monstrance with that pallid wafer that at times, one would fain think, is indeed the "_panis caelestis_," the bread of angels, or, robed in the garments of the Passion of Christ, breaking the Host into the chalice and smiting his breast for his sins. The fuming censers that the grave boys, in their lace and scarlet, tossed into the air like great gilt flowers had their subtle fascination for him. As he passed out, he used to look with wonder at the black confessionals and long to sit in the dim shadow of one of them and listen to men and women whispering through the worn grating the true story of their lives. But he never fell into the error of arresting his intellectual development by any formal acceptance of creed or system, or of mistaking, for a house in which to live, an inn that is but suitable for the sojourn of a night, or for a few hours of a night in which there are no stars and the moon is in travail. Mysticism, with its marvellous power of making common things strange to us, and the subtle antinomianism that always seems to accompany it, moved him for a season; and for a season he inclined to the materialistic doctrines of the _Darwinismus_ movement in Germany, and found a curious pleasure in tracing the thoughts and passions of men to some pearly cell in the brain, or some white nerve in the body, delighting in the conception of the absolute dependence of the spirit on certain physical conditions, morbid or healthy, normal or diseased. Yet, as has been said of him before, no theory of life seemed to him to be of any importance compared with life itself. He felt keenly conscious of how barren all intellectual speculation is when separated from action and experiment. He knew that the senses, no less than the soul, have their spiritual mysteries to reveal. And so he would now study perfumes and the secrets of their manufacture, distilling heavily scented oils and burning odorous gums from the East. He saw that there was no mood of the mind that had not its counterpart in the sensuous life, and set himself to discover their true relations, wondering what there was in frankincense that made one mystical, and in ambergris that stirred one's passions, and in violets that woke the memory of dead romances, and in musk that troubled the brain, and in champak that stained the imagination; and seeking often to elaborate a real psychology of perfumes, and to estimate the several influences of sweet-smelling roots and scented, pollen-laden flowers; of aromatic balms and of dark and fragrant woods; of spikenard, that sickens; of hovenia, that makes men mad; and of aloes, that are said to be able to expel melancholy from the soul. At another time he devoted himself entirely to music, and in a long latticed room, with a vermilion-and-gold ceiling and walls of olive-green lacquer, he used to give curious concerts in which mad gipsies tore wild music from little zithers, or grave, yellow-shawled Tunisians plucked at the strained strings of monstrous lutes, while grinning Negroes beat monotonously upon copper drums and, crouching upon scarlet mats, slim turbaned Indians blew through long pipes of reed or brass and charmed--or feigned to charm--great hooded snakes and horrible horned adders. The harsh intervals and shrill discords of barbaric music stirred him at times when Schubert's grace, and Chopin's beautiful sorrows, and the mighty harmonies of Beethoven himself, fell unheeded on his ear. He collected together from all parts of the world the strangest instruments that could be found, either in the tombs of dead nations or among the few savage tribes that have survived contact with Western civilizations, and loved to touch and try them. He had the mysterious _juruparis_ of the Rio Negro Indians, that women are not allowed to look at and that even youths may not see till they have been subjected to fasting and scourging, and the earthen jars of the Peruvians that have the shrill cries of birds, and flutes of human bones such as Alfonso de Ovalle heard in Chile, and the sonorous green jaspers that are found near Cuzco and give forth a note of singular sweetness. He had painted gourds filled with pebbles that rattled when they were shaken; the long _clarin_ of the Mexicans, into which the performer does not blow, but through which he inhales the air; the harsh _ture_ of the Amazon tribes, that is sounded by the sentinels who sit all day long in high trees, and can be heard, it is said, at a distance of three leagues; the _teponaztli_, that has two vibrating tongues of wood and is beaten with sticks that are smeared with an elastic gum obtained from the milky juice of plants; the _yotl_-bells of the Aztecs, that are hung in clusters like grapes; and a huge cylindrical drum, covered with the skins of great serpents, like the one that Bernal Diaz saw when he went with Cortes into the Mexican temple, and of whose doleful sound he has left us so vivid a description. The fantastic character of these instruments fascinated him, and he felt a curious delight in the thought that art, like Nature, has her monsters, things of bestial shape and with hideous voices. Yet, after some time, he wearied of them, and would sit in his box at the opera, either alone or with Lord Henry, listening in rapt pleasure to "Tannhauser" and seeing in the prelude to that great work of art a presentation of the tragedy of his own soul. On one occasion he took up the study of jewels, and appeared at a costume ball as Anne de Joyeuse, Admiral of France, in a dress covered with five hundred and sixty pearls. This taste enthralled him for years, and, indeed, may be said never to have left him. He would often spend a whole day settling and resettling in their cases the various stones that he had collected, such as the olive-green chrysoberyl that turns red by lamplight, the cymophane with its wirelike line of silver, the pistachio-coloured peridot, rose-pink and wine-yellow topazes, carbuncles of fiery scarlet with tremulous, four-rayed stars, flame-red cinnamon-stones, orange and violet spinels, and amethysts with their alternate layers of ruby and sapphire. He loved the red gold of the sunstone, and the moonstone's pearly whiteness, and the broken rainbow of the milky opal. He procured from Amsterdam three emeralds of extraordinary size and richness of colour, and had a turquoise _de la vieille roche_ that was the envy of all the connoisseurs. He discovered wonderful stories, also, about jewels. In Alphonso's Clericalis Disciplina a serpent was mentioned with eyes of real jacinth, and in the romantic history of Alexander, the Conqueror of Emathia was said to have found in the vale of Jordan snakes "with collars of real emeralds growing on their backs." There was a gem in the brain of the dragon, Philostratus told us, and "by the exhibition of golden letters and a scarlet robe" the monster could be thrown into a magical sleep and slain. According to the great alchemist, Pierre de Boniface, the diamond rendered a man invisible, and the agate of India made him eloquent. The cornelian appeased anger, and the hyacinth provoked sleep, and the amethyst drove away the fumes of wine. The garnet cast out demons, and the hydropicus deprived the moon of her colour. The selenite waxed and waned with the moon, and the meloceus, that discovers thieves, could be affected only by the blood of kids. Leonardus Camillus had seen a white stone taken from the brain of a newly killed toad, that was a certain antidote against poison. The bezoar, that was found in the heart of the Arabian deer, was a charm that could cure the plague. In the nests of Arabian birds was the aspilates, that, according to Democritus, kept the wearer from any danger by fire. The King of Ceilan rode through his city with a large ruby in his hand, as the ceremony of his coronation. The gates of the palace of John the Priest were "made of sardius, with the horn of the horned snake inwrought, so that no man might bring poison within." Over the gable were "two golden apples, in which were two carbuncles," so that the gold might shine by day and the carbuncles by night. In Lodge's strange romance 'A Margarite of America', it was stated that in the chamber of the queen one could behold "all the chaste ladies of the world, inchased out of silver, looking through fair mirrours of chrysolites, carbuncles, sapphires, and greene emeraults." Marco Polo had seen the inhabitants of Zipangu place rose-coloured pearls in the mouths of the dead. A sea-monster had been enamoured of the pearl that the diver brought to King Perozes, and had slain the thief, and mourned for seven moons over its loss. When the Huns lured the king into the great pit, he flung it away--Procopius tells the story--nor was it ever found again, though the Emperor Anastasius offered five hundred-weight of gold pieces for it. The King of Malabar had shown to a certain Venetian a rosary of three hundred and four pearls, one for every god that he worshipped. When the Duke de Valentinois, son of Alexander VI, visited Louis XII of France, his horse was loaded with gold leaves, according to Brantome, and his cap had double rows of rubies that threw out a great light. Charles of England had ridden in stirrups hung with four hundred and twenty-one diamonds. Richard II had a coat, valued at thirty thousand marks, which was covered with balas rubies. Hall described Henry VIII, on his way to the Tower previous to his coronation, as wearing "a jacket of raised gold, the placard embroidered with diamonds and other rich stones, and a great bauderike about his neck of large balasses." The favourites of James I wore ear-rings of emeralds set in gold filigrane. Edward II gave to Piers Gaveston a suit of red-gold armour studded with jacinths, a collar of gold roses set with turquoise-stones, and a skull-cap _parseme_ with pearls. Henry II wore jewelled gloves reaching to the elbow, and had a hawk-glove sewn with twelve rubies and fifty-two great orients. The ducal hat of Charles the Rash, the last Duke of Burgundy of his race, was hung with pear-shaped pearls and studded with sapphires. How exquisite life had once been! How gorgeous in its pomp and decoration! Even to read of the luxury of the dead was wonderful. Then he turned his attention to embroideries and to the tapestries that performed the office of frescoes in the chill rooms of the northern nations of Europe. As he investigated the subject--and he always had an extraordinary faculty of becoming absolutely absorbed for the moment in whatever he took up--he was almost saddened by the reflection of the ruin that time brought on beautiful and wonderful things. He, at any rate, had escaped that. Summer followed summer, and the yellow jonquils bloomed and died many times, and nights of horror repeated the story of their shame, but he was unchanged. No winter marred his face or stained his flowerlike bloom. How different it was with material things! Where had they passed to? Where was the great crocus-coloured robe, on which the gods fought against the giants, that had been worked by brown girls for the pleasure of Athena? Where the huge velarium that Nero had stretched across the Colosseum at Rome, that Titan sail of purple on which was represented the starry sky, and Apollo driving a chariot drawn by white, gilt-reined steeds? He longed to see the curious table-napkins wrought for the Priest of the Sun, on which were displayed all the dainties and viands that could be wanted for a feast; the mortuary cloth of King Chilperic, with its three hundred golden bees; the fantastic robes that excited the indignation of the Bishop of Pontus and were figured with "lions, panthers, bears, dogs, forests, rocks, hunters--all, in fact, that a painter can copy from nature"; and the coat that Charles of Orleans once wore, on the sleeves of which were embroidered the verses of a song beginning "_Madame, je suis tout joyeux_," the musical accompaniment of the words being wrought in gold thread, and each note, of square shape in those days, formed with four pearls. He read of the room that was prepared at the palace at Rheims for the use of Queen Joan of Burgundy and was decorated with "thirteen hundred and twenty-one parrots, made in broidery, and blazoned with the king's arms, and five hundred and sixty-one butterflies, whose wings were similarly ornamented with the arms of the queen, the whole worked in gold." Catherine de Medicis had a mourning-bed made for her of black velvet powdered with crescents and suns. Its curtains were of damask, with leafy wreaths and garlands, figured upon a gold and silver ground, and fringed along the edges with broideries of pearls, and it stood in a room hung with rows of the queen's devices in cut black velvet upon cloth of silver. Louis XIV had gold embroidered caryatides fifteen feet high in his apartment. The state bed of Sobieski, King of Poland, was made of Smyrna gold brocade embroidered in turquoises with verses from the Koran. Its supports were of silver gilt, beautifully chased, and profusely set with enamelled and jewelled medallions. It had been taken from the Turkish camp before Vienna, and the standard of Mohammed had stood beneath the tremulous gilt of its canopy. And so, for a whole year, he sought to accumulate the most exquisite specimens that he could find of textile and embroidered work, getting the dainty Delhi muslins, finely wrought with gold-thread palmates and stitched over with iridescent beetles' wings; the Dacca gauzes, that from their transparency are known in the East as "woven air," and "running water," and "evening dew"; strange figured cloths from Java; elaborate yellow Chinese hangings; books bound in tawny satins or fair blue silks and wrought with _fleurs-de-lis_, birds and images; veils of _lacis_ worked in Hungary point; Sicilian brocades and stiff Spanish velvets; Georgian work, with its gilt coins, and Japanese _Foukousas_, with their green-toned golds and their marvellously plumaged birds. He had a special passion, also, for ecclesiastical vestments, as indeed he had for everything connected with the service of the Church. In the long cedar chests that lined the west gallery of his house, he had stored away many rare and beautiful specimens of what is really the raiment of the Bride of Christ, who must wear purple and jewels and fine linen that she may hide the pallid macerated body that is worn by the suffering that she seeks for and wounded by self-inflicted pain. He possessed a gorgeous cope of crimson silk and gold-thread damask, figured with a repeating pattern of golden pomegranates set in six-petalled formal blossoms, beyond which on either side was the pine-apple device wrought in seed-pearls. The orphreys were divided into panels representing scenes from the life of the Virgin, and the coronation of the Virgin was figured in coloured silks upon the hood. This was Italian work of the fifteenth century. Another cope was of green velvet, embroidered with heart-shaped groups of acanthus-leaves, from which spread long-stemmed white blossoms, the details of which were picked out with silver thread and coloured crystals. The morse bore a seraph's head in gold-thread raised work. The orphreys were woven in a diaper of red and gold silk, and were starred with medallions of many saints and martyrs, among whom was St. Sebastian. He had chasubles, also, of amber-coloured silk, and blue silk and gold brocade, and yellow silk damask and cloth of gold, figured with representations of the Passion and Crucifixion of Christ, and embroidered with lions and peacocks and other emblems; dalmatics of white satin and pink silk damask, decorated with tulips and dolphins and _fleurs-de-lis_; altar frontals of crimson velvet and blue linen; and many corporals, chalice-veils, and sudaria. In the mystic offices to which such things were put, there was something that quickened his imagination. For these treasures, and everything that he collected in his lovely house, were to be to him means of forgetfulness, modes by which he could escape, for a season, from the fear that seemed to him at times to be almost too great to be borne. Upon the walls of the lonely locked room where he had spent so much of his boyhood, he had hung with his own hands the terrible portrait whose changing features showed him the real degradation of his life, and in front of it had draped the purple-and-gold pall as a curtain. For weeks he would not go there, would forget the hideous painted thing, and get back his light heart, his wonderful joyousness, his passionate absorption in mere existence. Then, suddenly, some night he would creep out of the house, go down to dreadful places near Blue Gate Fields, and stay there, day after day, until he was driven away. On his return he would sit in front of the picture, sometimes loathing it and himself, but filled, at other times, with that pride of individualism that is half the fascination of sin, and smiling with secret pleasure at the misshapen shadow that had to bear the burden that should have been his own. After a few years he could not endure to be long out of England, and gave up the villa that he had shared at Trouville with Lord Henry, as well as the little white walled-in house at Algiers where they had more than once spent the winter. He hated to be separated from the picture that was such a part of his life, and was also afraid that during his absence some one might gain access to the room, in spite of the elaborate bars that he had caused to be placed upon the door. He was quite conscious that this would tell them nothing. It was true that the portrait still preserved, under all the foulness and ugliness of the face, its marked likeness to himself; but what could they learn from that? He would laugh at any one who tried to taunt him. He had not painted it. What was it to him how vile and full of shame it looked? Even if he told them, would they believe it? Yet he was afraid. Sometimes when he was down at his great house in Nottinghamshire, entertaining the fashionable young men of his own rank who were his chief companions, and astounding the county by the wanton luxury and gorgeous splendour of his mode of life, he would suddenly leave his guests and rush back to town to see that the door had not been tampered with and that the picture was still there. What if it should be stolen? The mere thought made him cold with horror. Surely the world would know his secret then. Perhaps the world already suspected it. For, while he fascinated many, there were not a few who distrusted him. He was very nearly blackballed at a West End club of which his birth and social position fully entitled him to become a member, and it was said that on one occasion, when he was brought by a friend into the smoking-room of the Churchill, the Duke of Berwick and another gentleman got up in a marked manner and went out. Curious stories became current about him after he had passed his twenty-fifth year. It was rumoured that he had been seen brawling with foreign sailors in a low den in the distant parts of Whitechapel, and that he consorted with thieves and coiners and knew the mysteries of their trade. His extraordinary absences became notorious, and, when he used to reappear again in society, men would whisper to each other in corners, or pass him with a sneer, or look at him with cold searching eyes, as though they were determined to discover his secret. Of such insolences and attempted slights he, of course, took no notice, and in the opinion of most people his frank debonair manner, his charming boyish smile, and the infinite grace of that wonderful youth that seemed never to leave him, were in themselves a sufficient answer to the calumnies, for so they termed them, that were circulated about him. It was remarked, however, that some of those who had been most intimate with him appeared, after a time, to shun him. Women who had wildly adored him, and for his sake had braved all social censure and set convention at defiance, were seen to grow pallid with shame or horror if Dorian Gray entered the room. Yet these whispered scandals only increased in the eyes of many his strange and dangerous charm. His great wealth was a certain element of security. Society--civilized society, at least--is never very ready to believe anything to the detriment of those who are both rich and fascinating. It feels instinctively that manners are of more importance than morals, and, in its opinion, the highest respectability is of much less value than the possession of a good _chef_. And, after all, it is a very poor consolation to be told that the man who has given one a bad dinner, or poor wine, is irreproachable in his private life. Even the cardinal virtues cannot atone for half-cold _entrees_, as Lord Henry remarked once, in a discussion on the subject, and there is possibly a good deal to be said for his view. For the canons of good society are, or should be, the same as the canons of art. Form is absolutely essential to it. It should have the dignity of a ceremony, as well as its unreality, and should combine the insincere character of a romantic play with the wit and beauty that make such plays delightful to us. Is insincerity such a terrible thing? I think not. It is merely a method by which we can multiply our personalities. Such, at any rate, was Dorian Gray's opinion. He used to wonder at the shallow psychology of those who conceive the ego in man as a thing simple, permanent, reliable, and of one essence. To him, man was a being with myriad lives and myriad sensations, a complex multiform creature that bore within itself strange legacies of thought and passion, and whose very flesh was tainted with the monstrous maladies of the dead. He loved to stroll through the gaunt cold picture-gallery of his country house and look at the various portraits of those whose blood flowed in his veins. Here was Philip Herbert, described by Francis Osborne, in his Memoires on the Reigns of Queen Elizabeth and King James, as one who was "caressed by the Court for his handsome face, which kept him not long company." Was it young Herbert's life that he sometimes led? Had some strange poisonous germ crept from body to body till it had reached his own? Was it some dim sense of that ruined grace that had made him so suddenly, and almost without cause, give utterance, in Basil Hallward's studio, to the mad prayer that had so changed his life? Here, in gold-embroidered red doublet, jewelled surcoat, and gilt-edged ruff and wristbands, stood Sir Anthony Sherard, with his silver-and-black armour piled at his feet. What had this man's legacy been? Had the lover of Giovanna of Naples bequeathed him some inheritance of sin and shame? Were his own actions merely the dreams that the dead man had not dared to realize? Here, from the fading canvas, smiled Lady Elizabeth Devereux, in her gauze hood, pearl stomacher, and pink slashed sleeves. A flower was in her right hand, and her left clasped an enamelled collar of white and damask roses. On a table by her side lay a mandolin and an apple. There were large green rosettes upon her little pointed shoes. He knew her life, and the strange stories that were told about her lovers. Had he something of her temperament in him? These oval, heavy-lidded eyes seemed to look curiously at him. What of George Willoughby, with his powdered hair and fantastic patches? How evil he looked! The face was saturnine and swarthy, and the sensual lips seemed to be twisted with disdain. Delicate lace ruffles fell over the lean yellow hands that were so overladen with rings. He had been a macaroni of the eighteenth century, and the friend, in his youth, of Lord Ferrars. What of the second Lord Beckenham, the companion of the Prince Regent in his wildest days, and one of the witnesses at the secret marriage with Mrs. Fitzherbert? How proud and handsome he was, with his chestnut curls and insolent pose! What passions had he bequeathed? The world had looked upon him as infamous. He had led the orgies at Carlton House. The star of the Garter glittered upon his breast. Beside him hung the portrait of his wife, a pallid, thin-lipped woman in black. Her blood, also, stirred within him. How curious it all seemed! And his mother with her Lady Hamilton face and her moist, wine-dashed lips--he knew what he had got from her. He had got from her his beauty, and his passion for the beauty of others. She laughed at him in her loose Bacchante dress. There were vine leaves in her hair. The purple spilled from the cup she was holding. The carnations of the painting had withered, but the eyes were still wonderful in their depth and brilliancy of colour. They seemed to follow him wherever he went. Yet one had ancestors in literature as well as in one's own race, nearer perhaps in type and temperament, many of them, and certainly with an influence of which one was more absolutely conscious. There were times when it appeared to Dorian Gray that the whole of history was merely the record of his own life, not as he had lived it in act and circumstance, but as his imagination had created it for him, as it had been in his brain and in his passions. He felt that he had known them all, those strange terrible figures that had passed across the stage of the world and made sin so marvellous and evil so full of subtlety. It seemed to him that in some mysterious way their lives had been his own. The hero of the wonderful novel that had so influenced his life had himself known this curious fancy. In the seventh chapter he tells how, crowned with laurel, lest lightning might strike him, he had sat, as Tiberius, in a garden at Capri, reading the shameful books of Elephantis, while dwarfs and peacocks strutted round him and the flute-player mocked the swinger of the censer; and, as Caligula, had caroused with the green-shirted jockeys in their stables and supped in an ivory manger with a jewel-frontleted horse; and, as Domitian, had wandered through a corridor lined with marble mirrors, looking round with haggard eyes for the reflection of the dagger that was to end his days, and sick with that ennui, that terrible _taedium vitae_, that comes on those to whom life denies nothing; and had peered through a clear emerald at the red shambles of the circus and then, in a litter of pearl and purple drawn by silver-shod mules, been carried through the Street of Pomegranates to a House of Gold and heard men cry on Nero Caesar as he passed by; and, as Elagabalus, had painted his face with colours, and plied the distaff among the women, and brought the Moon from Carthage and given her in mystic marriage to the Sun. Over and over again Dorian used to read this fantastic chapter, and the two chapters immediately following, in which, as in some curious tapestries or cunningly wrought enamels, were pictured the awful and beautiful forms of those whom vice and blood and weariness had made monstrous or mad: Filippo, Duke of Milan, who slew his wife and painted her lips with a scarlet poison that her lover might suck death from the dead thing he fondled; Pietro Barbi, the Venetian, known as Paul the Second, who sought in his vanity to assume the title of Formosus, and whose tiara, valued at two hundred thousand florins, was bought at the price of a terrible sin; Gian Maria Visconti, who used hounds to chase living men and whose murdered body was covered with roses by a harlot who had loved him; the Borgia on his white horse, with Fratricide riding beside him and his mantle stained with the blood of Perotto; Pietro Riario, the young Cardinal Archbishop of Florence, child and minion of Sixtus IV, whose beauty was equalled only by his debauchery, and who received Leonora of Aragon in a pavilion of white and crimson silk, filled with nymphs and centaurs, and gilded a boy that he might serve at the feast as Ganymede or Hylas; Ezzelin, whose melancholy could be cured only by the spectacle of death, and who had a passion for red blood, as other men have for red wine--the son of the Fiend, as was reported, and one who had cheated his father at dice when gambling with him for his own soul; Giambattista Cibo, who in mockery took the name of Innocent and into whose torpid veins the blood of three lads was infused by a Jewish doctor; Sigismondo Malatesta, the lover of Isotta and the lord of Rimini, whose effigy was burned at Rome as the enemy of God and man, who strangled Polyssena with a napkin, and gave poison to Ginevra d'Este in a cup of emerald, and in honour of a shameful passion built a pagan church for Christian worship; Charles VI, who had so wildly adored his brother's wife that a leper had warned him of the insanity that was coming on him, and who, when his brain had sickened and grown strange, could only be soothed by Saracen cards painted with the images of love and death and madness; and, in his trimmed jerkin and jewelled cap and acanthuslike curls, Grifonetto Baglioni, who slew Astorre with his bride, and Simonetto with his page, and whose comeliness was such that, as he lay dying in the yellow piazza of Perugia, those who had hated him could not choose but weep, and Atalanta, who had cursed him, blessed him. There was a horrible fascination in them all. He saw them at night, and they troubled his imagination in the day. The Renaissance knew of strange manners of poisoning--poisoning by a helmet and a lighted torch, by an embroidered glove and a jewelled fan, by a gilded pomander and by an amber chain. Dorian Gray had been poisoned by a book. There were moments when he looked on evil simply as a mode through which he could realize his conception of the beautiful. CHAPTER 12 It was on the ninth of November, the eve of his own thirty-eighth birthday, as he often remembered afterwards. He was walking home about eleven o'clock from Lord Henry's, where he had been dining, and was wrapped in heavy furs, as the night was cold and foggy. At the corner of Grosvenor Square and South Audley Street, a man passed him in the mist, walking very fast and with the collar of his grey ulster turned up. He had a bag in his hand. Dorian recognized him. It was Basil Hallward. A strange sense of fear, for which he could not account, came over him. He made no sign of recognition and went on quickly in the direction of his own house. But Hallward had seen him. Dorian heard him first stopping on the pavement and then hurrying after him. In a few moments, his hand was on his arm. "Dorian! What an extraordinary piece of luck! I have been waiting for you in your library ever since nine o'clock. Finally I took pity on your tired servant and told him to go to bed, as he let me out. I am off to Paris by the midnight train, and I particularly wanted to see you before I left. I thought it was you, or rather your fur coat, as you passed me. But I wasn't quite sure. Didn't you recognize me?" "In this fog, my dear Basil? Why, I can't even recognize Grosvenor Square. I believe my house is somewhere about here, but I don't feel at all certain about it. I am sorry you are going away, as I have not seen you for ages. But I suppose you will be back soon?" "No: I am going to be out of England for six months. I intend to take a studio in Paris and shut myself up till I have finished a great picture I have in my head. However, it wasn't about myself I wanted to talk. Here we are at your door. Let me come in for a moment. I have something to say to you." "I shall be charmed. But won't you miss your train?" said Dorian Gray languidly as he passed up the steps and opened the door with his latch-key. The lamplight struggled out through the fog, and Hallward looked at his watch. "I have heaps of time," he answered. "The train doesn't go till twelve-fifteen, and it is only just eleven. In fact, I was on my way to the club to look for you, when I met you. You see, I shan't have any delay about luggage, as I have sent on my heavy things. All I have with me is in this bag, and I can easily get to Victoria in twenty minutes." Dorian looked at him and smiled. "What a way for a fashionable painter to travel! A Gladstone bag and an ulster! Come in, or the fog will get into the house. And mind you don't talk about anything serious. Nothing is serious nowadays. At least nothing should be." Hallward shook his head, as he entered, and followed Dorian into the library. There was a bright wood fire blazing in the large open hearth. The lamps were lit, and an open Dutch silver spirit-case stood, with some siphons of soda-water and large cut-glass tumblers, on a little marqueterie table. "You see your servant made me quite at home, Dorian. He gave me everything I wanted, including your best gold-tipped cigarettes. He is a most hospitable creature. I like him much better than the Frenchman you used to have. What has become of the Frenchman, by the bye?" Dorian shrugged his shoulders. "I believe he married Lady Radley's maid, and has established her in Paris as an English dressmaker. Anglomania is very fashionable over there now, I hear. It seems silly of the French, doesn't it? But--do you know?--he was not at all a bad servant. I never liked him, but I had nothing to complain about. One often imagines things that are quite absurd. He was really very devoted to me and seemed quite sorry when he went away. Have another brandy-and-soda? Or would you like hock-and-seltzer? I always take hock-and-seltzer myself. There is sure to be some in the next room." "Thanks, I won't have anything more," said the painter, taking his cap and coat off and throwing them on the bag that he had placed in the corner. "And now, my dear fellow, I want to speak to you seriously. Don't frown like that. You make it so much more difficult for me." "What is it all about?" cried Dorian in his petulant way, flinging himself down on the sofa. "I hope it is not about myself. I am tired of myself to-night. I should like to be somebody else." "It is about yourself," answered Hallward in his grave deep voice, "and I must say it to you. I shall only keep you half an hour." Dorian sighed and lit a cigarette. "Half an hour!" he murmured. "It is not much to ask of you, Dorian, and it is entirely for your own sake that I am speaking. I think it right that you should know that the most dreadful things are being said against you in London." "I don't wish to know anything about them. I love scandals about other people, but scandals about myself don't interest me. They have not got the charm of novelty." "They must interest you, Dorian. Every gentleman is interested in his good name. You don't want people to talk of you as something vile and degraded. Of course, you have your position, and your wealth, and all that kind of thing. But position and wealth are not everything. Mind you, I don't believe these rumours at all. At least, I can't believe them when I see you. Sin is a thing that writes itself across a man's face. It cannot be concealed. People talk sometimes of secret vices. There are no such things. If a wretched man has a vice, it shows itself in the lines of his mouth, the droop of his eyelids, the moulding of his hands even. Somebody--I won't mention his name, but you know him--came to me last year to have his portrait done. I had never seen him before, and had never heard anything about him at the time, though I have heard a good deal since. He offered an extravagant price. I refused him. There was something in the shape of his fingers that I hated. I know now that I was quite right in what I fancied about him. His life is dreadful. But you, Dorian, with your pure, bright, innocent face, and your marvellous untroubled youth--I can't believe anything against you. And yet I see you very seldom, and you never come down to the studio now, and when I am away from you, and I hear all these hideous things that people are whispering about you, I don't know what to say. Why is it, Dorian, that a man like the Duke of Berwick leaves the room of a club when you enter it? Why is it that so many gentlemen in London will neither go to your house or invite you to theirs? You used to be a friend of Lord Staveley. I met him at dinner last week. Your name happened to come up in conversation, in connection with the miniatures you have lent to the exhibition at the Dudley. Staveley curled his lip and said that you might have the most artistic tastes, but that you were a man whom no pure-minded girl should be allowed to know, and whom no chaste woman should sit in the same room with. I reminded him that I was a friend of yours, and asked him what he meant. He told me. He told me right out before everybody. It was horrible! Why is your friendship so fatal to young men? There was that wretched boy in the Guards who committed suicide. You were his great friend. There was Sir Henry Ashton, who had to leave England with a tarnished name. You and he were inseparable. What about Adrian Singleton and his dreadful end? What about Lord Kent's only son and his career? I met his father yesterday in St. James's Street. He seemed broken with shame and sorrow. What about the young Duke of Perth? What sort of life has he got now? What gentleman would associate with him?" "Stop, Basil. You are talking about things of which you know nothing," said Dorian Gray, biting his lip, and with a note of infinite contempt in his voice. "You ask me why Berwick leaves a room when I enter it. It is because I know everything about his life, not because he knows anything about mine. With such blood as he has in his veins, how could his record be clean? You ask me about Henry Ashton and young Perth. Did I teach the one his vices, and the other his debauchery? If Kent's silly son takes his wife from the streets, what is that to me? If Adrian Singleton writes his friend's name across a bill, am I his keeper? I know how people chatter in England. The middle classes air their moral prejudices over their gross dinner-tables, and whisper about what they call the profligacies of their betters in order to try and pretend that they are in smart society and on intimate terms with the people they slander. In this country, it is enough for a man to have distinction and brains for every common tongue to wag against him. And what sort of lives do these people, who pose as being moral, lead themselves? My dear fellow, you forget that we are in the native land of the hypocrite." "Dorian," cried Hallward, "that is not the question. England is bad enough I know, and English society is all wrong. That is the reason why I want you to be fine. You have not been fine. One has a right to judge of a man by the effect he has over his friends. Yours seem to lose all sense of honour, of goodness, of purity. You have filled them with a madness for pleasure. They have gone down into the depths. You led them there. Yes: you led them there, and yet you can smile, as you are smiling now. And there is worse behind. I know you and Harry are inseparable. Surely for that reason, if for none other, you should not have made his sister's name a by-word." "Take care, Basil. You go too far." "I must speak, and you must listen. You shall listen. When you met Lady Gwendolen, not a breath of scandal had ever touched her. Is there a single decent woman in London now who would drive with her in the park? Why, even her children are not allowed to live with her. Then there are other stories--stories that you have been seen creeping at dawn out of dreadful houses and slinking in disguise into the foulest dens in London. Are they true? Can they be true? When I first heard them, I laughed. I hear them now, and they make me shudder. What about your country-house and the life that is led there? Dorian, you don't know what is said about you. I won't tell you that I don't want to preach to you. I remember Harry saying once that every man who turned himself into an amateur curate for the moment always began by saying that, and then proceeded to break his word. I do want to preach to you. I want you to lead such a life as will make the world respect you. I want you to have a clean name and a fair record. I want you to get rid of the dreadful people you associate with. Don't shrug your shoulders like that. Don't be so indifferent. You have a wonderful influence. Let it be for good, not for evil. They say that you corrupt every one with whom you become intimate, and that it is quite sufficient for you to enter a house for shame of some kind to follow after. I don't know whether it is so or not. How should I know? But it is said of you. I am told things that it seems impossible to doubt. Lord Gloucester was one of my greatest friends at Oxford. He showed me a letter that his wife had written to him when she was dying alone in her villa at Mentone. Your name was implicated in the most terrible confession I ever read. I told him that it was absurd--that I knew you thoroughly and that you were incapable of anything of the kind. Know you? I wonder do I know you? Before I could answer that, I should have to see your soul." "To see my soul!" muttered Dorian Gray, starting up from the sofa and turning almost white from fear. "Yes," answered Hallward gravely, and with deep-toned sorrow in his voice, "to see your soul. But only God can do that." A bitter laugh of mockery broke from the lips of the younger man. "You shall see it yourself, to-night!" he cried, seizing a lamp from the table. "Come: it is your own handiwork. Why shouldn't you look at it? You can tell the world all about it afterwards, if you choose. Nobody would believe you. If they did believe you, they would like me all the better for it. I know the age better than you do, though you will prate about it so tediously. Come, I tell you. You have chattered enough about corruption. Now you shall look on it face to face." There was the madness of pride in every word he uttered. He stamped his foot upon the ground in his boyish insolent manner. He felt a terrible joy at the thought that some one else was to share his secret, and that the man who had painted the portrait that was the origin of all his shame was to be burdened for the rest of his life with the hideous memory of what he had done. "Yes," he continued, coming closer to him and looking steadfastly into his stern eyes, "I shall show you my soul. You shall see the thing that you fancy only God can see." Hallward started back. "This is blasphemy, Dorian!" he cried. "You must not say things like that. They are horrible, and they don't mean anything." "You think so?" He laughed again. "I know so. As for what I said to you to-night, I said it for your good. You know I have been always a stanch friend to you." "Don't touch me. Finish what you have to say." A twisted flash of pain shot across the painter's face. He paused for a moment, and a wild feeling of pity came over him. After all, what right had he to pry into the life of Dorian Gray? If he had done a tithe of what was rumoured about him, how much he must have suffered! Then he straightened himself up, and walked over to the fire-place, and stood there, looking at the burning logs with their frostlike ashes and their throbbing cores of flame. "I am waiting, Basil," said the young man in a hard clear voice. He turned round. "What I have to say is this," he cried. "You must give me some answer to these horrible charges that are made against you. If you tell me that they are absolutely untrue from beginning to end, I shall believe you. Deny them, Dorian, deny them! Can't you see what I am going through? My God! don't tell me that you are bad, and corrupt, and shameful." Dorian Gray smiled. There was a curl of contempt in his lips. "Come upstairs, Basil," he said quietly. "I keep a diary of my life from day to day, and it never leaves the room in which it is written. I shall show it to you if you come with me." "I shall come with you, Dorian, if you wish it. I see I have missed my train. That makes no matter. I can go to-morrow. But don't ask me to read anything to-night. All I want is a plain answer to my question." "That shall be given to you upstairs. I could not give it here. You will not have to read long." CHAPTER 13 He passed out of the room and began the ascent, Basil Hallward following close behind. They walked softly, as men do instinctively at night. The lamp cast fantastic shadows on the wall and staircase. A rising wind made some of the windows rattle. When they reached the top landing, Dorian set the lamp down on the floor, and taking out the key, turned it in the lock. "You insist on knowing, Basil?" he asked in a low voice. "Yes." "I am delighted," he answered, smiling. Then he added, somewhat harshly, "You are the one man in the world who is entitled to know everything about me. You have had more to do with my life than you think"; and, taking up the lamp, he opened the door and went in. A cold current of air passed them, and the light shot up for a moment in a flame of murky orange. He shuddered. "Shut the door behind you," he whispered, as he placed the lamp on the table. Hallward glanced round him with a puzzled expression. The room looked as if it had not been lived in for years. A faded Flemish tapestry, a curtained picture, an old Italian _cassone_, and an almost empty book-case--that was all that it seemed to contain, besides a chair and a table. As Dorian Gray was lighting a half-burned candle that was standing on the mantelshelf, he saw that the whole place was covered with dust and that the carpet was in holes. A mouse ran scuffling behind the wainscoting. There was a damp odour of mildew. "So you think that it is only God who sees the soul, Basil? Draw that curtain back, and you will see mine." The voice that spoke was cold and cruel. "You are mad, Dorian, or playing a part," muttered Hallward, frowning. "You won't? Then I must do it myself," said the young man, and he tore the curtain from its rod and flung it on the ground. An exclamation of horror broke from the painter's lips as he saw in the dim light the hideous face on the canvas grinning at him. There was something in its expression that filled him with disgust and loathing. Good heavens! it was Dorian Gray's own face that he was looking at! The horror, whatever it was, had not yet entirely spoiled that marvellous beauty. There was still some gold in the thinning hair and some scarlet on the sensual mouth. The sodden eyes had kept something of the loveliness of their blue, the noble curves had not yet completely passed away from chiselled nostrils and from plastic throat. Yes, it was Dorian himself. But who had done it? He seemed to recognize his own brushwork, and the frame was his own design. The idea was monstrous, yet he felt afraid. He seized the lighted candle, and held it to the picture. In the left-hand corner was his own name, traced in long letters of bright vermilion. It was some foul parody, some infamous ignoble satire. He had never done that. Still, it was his own picture. He knew it, and he felt as if his blood had changed in a moment from fire to sluggish ice. His own picture! What did it mean? Why had it altered? He turned and looked at Dorian Gray with the eyes of a sick man. His mouth twitched, and his parched tongue seemed unable to articulate. He passed his hand across his forehead. It was dank with clammy sweat. The young man was leaning against the mantelshelf, watching him with that strange expression that one sees on the faces of those who are absorbed in a play when some great artist is acting. There was neither real sorrow in it nor real joy. There was simply the passion of the spectator, with perhaps a flicker of triumph in his eyes. He had taken the flower out of his coat, and was smelling it, or pretending to do so. "What does this mean?" cried Hallward, at last. His own voice sounded shrill and curious in his ears. "Years ago, when I was a boy," said Dorian Gray, crushing the flower in his hand, "you met me, flattered me, and taught me to be vain of my good looks. One day you introduced me to a friend of yours, who explained to me the wonder of youth, and you finished a portrait of me that revealed to me the wonder of beauty. In a mad moment that, even now, I don't know whether I regret or not, I made a wish, perhaps you would call it a prayer...." "I remember it! Oh, how well I remember it! No! the thing is impossible. The room is damp. Mildew has got into the canvas. The paints I used had some wretched mineral poison in them. I tell you the thing is impossible." "Ah, what is impossible?" murmured the young man, going over to the window and leaning his forehead against the cold, mist-stained glass. "You told me you had destroyed it." "I was wrong. It has destroyed me." "I don't believe it is my picture." "Can't you see your ideal in it?" said Dorian bitterly. "My ideal, as you call it..." "As you called it." "There was nothing evil in it, nothing shameful. You were to me such an ideal as I shall never meet again. This is the face of a satyr." "It is the face of my soul." "Christ! what a thing I must have worshipped! It has the eyes of a devil." "Each of us has heaven and hell in him, Basil," cried Dorian with a wild gesture of despair. Hallward turned again to the portrait and gazed at it. "My God! If it is true," he exclaimed, "and this is what you have done with your life, why, you must be worse even than those who talk against you fancy you to be!" He held the light up again to the canvas and examined it. The surface seemed to be quite undisturbed and as he had left it. It was from within, apparently, that the foulness and horror had come. Through some strange quickening of inner life the leprosies of sin were slowly eating the thing away. The rotting of a corpse in a watery grave was not so fearful. His hand shook, and the candle fell from its socket on the floor and lay there sputtering. He placed his foot on it and put it out. Then he flung himself into the rickety chair that was standing by the table and buried his face in his hands. "Good God, Dorian, what a lesson! What an awful lesson!" There was no answer, but he could hear the young man sobbing at the window. "Pray, Dorian, pray," he murmured. "What is it that one was taught to say in one's boyhood? 'Lead us not into temptation. Forgive us our sins. Wash away our iniquities.' Let us say that together. The prayer of your pride has been answered. The prayer of your repentance will be answered also. I worshipped you too much. I am punished for it. You worshipped yourself too much. We are both punished." Dorian Gray turned slowly around and looked at him with tear-dimmed eyes. "It is too late, Basil," he faltered. "It is never too late, Dorian. Let us kneel down and try if we cannot remember a prayer. Isn't there a verse somewhere, 'Though your sins be as scarlet, yet I will make them as white as snow'?" "Those words mean nothing to me now." "Hush! Don't say that. You have done enough evil in your life. My God! Don't you see that accursed thing leering at us?" Dorian Gray glanced at the picture, and suddenly an uncontrollable feeling of hatred for Basil Hallward came over him, as though it had been suggested to him by the image on the canvas, whispered into his ear by those grinning lips. The mad passions of a hunted animal stirred within him, and he loathed the man who was seated at the table, more than in his whole life he had ever loathed anything. He glanced wildly around. Something glimmered on the top of the painted chest that faced him. His eye fell on it. He knew what it was. It was a knife that he had brought up, some days before, to cut a piece of cord, and had forgotten to take away with him. He moved slowly towards it, passing Hallward as he did so. As soon as he got behind him, he seized it and turned round. Hallward stirred in his chair as if he was going to rise. He rushed at him and dug the knife into the great vein that is behind the ear, crushing the man's head down on the table and stabbing again and again. There was a stifled groan and the horrible sound of some one choking with blood. Three times the outstretched arms shot up convulsively, waving grotesque, stiff-fingered hands in the air. He stabbed him twice more, but the man did not move. Something began to trickle on the floor. He waited for a moment, still pressing the head down. Then he threw the knife on the table, and listened. He could hear nothing, but the drip, drip on the threadbare carpet. He opened the door and went out on the landing. The house was absolutely quiet. No one was about. For a few seconds he stood bending over the balustrade and peering down into the black seething well of darkness. Then he took out the key and returned to the room, locking himself in as he did so. The thing was still seated in the chair, straining over the table with bowed head, and humped back, and long fantastic arms. Had it not been for the red jagged tear in the neck and the clotted black pool that was slowly widening on the table, one would have said that the man was simply asleep. How quickly it had all been done! He felt strangely calm, and walking over to the window, opened it and stepped out on the balcony. The wind had blown the fog away, and the sky was like a monstrous peacock's tail, starred with myriads of golden eyes. He looked down and saw the policeman going his rounds and flashing the long beam of his lantern on the doors of the silent houses. The crimson spot of a prowling hansom gleamed at the corner and then vanished. A woman in a fluttering shawl was creeping slowly by the railings, staggering as she went. Now and then she stopped and peered back. Once, she began to sing in a hoarse voice. The policeman strolled over and said something to her. She stumbled away, laughing. A bitter blast swept across the square. The gas-lamps flickered and became blue, and the leafless trees shook their black iron branches to and fro. He shivered and went back, closing the window behind him. Having reached the door, he turned the key and opened it. He did not even glance at the murdered man. He felt that the secret of the whole thing was not to realize the situation. The friend who had painted the fatal portrait to which all his misery had been due had gone out of his life. That was enough. Then he remembered the lamp. It was a rather curious one of Moorish workmanship, made of dull silver inlaid with arabesques of burnished steel, and studded with coarse turquoises. Perhaps it might be missed by his servant, and questions would be asked. He hesitated for a moment, then he turned back and took it from the table. He could not help seeing the dead thing. How still it was! How horribly white the long hands looked! It was like a dreadful wax image. Having locked the door behind him, he crept quietly downstairs. The woodwork creaked and seemed to cry out as if in pain. He stopped several times and waited. No: everything was still. It was merely the sound of his own footsteps. When he reached the library, he saw the bag and coat in the corner. They must be hidden away somewhere. He unlocked a secret press that was in the wainscoting, a press in which he kept his own curious disguises, and put them into it. He could easily burn them afterwards. Then he pulled out his watch. It was twenty minutes to two. He sat down and began to think. Every year--every month, almost--men were strangled in England for what he had done. There had been a madness of murder in the air. Some red star had come too close to the earth.... And yet, what evidence was there against him? Basil Hallward had left the house at eleven. No one had seen him come in again. Most of the servants were at Selby Royal. His valet had gone to bed.... Paris! Yes. It was to Paris that Basil had gone, and by the midnight train, as he had intended. With his curious reserved habits, it would be months before any suspicions would be roused. Months! Everything could be destroyed long before then. A sudden thought struck him. He put on his fur coat and hat and went out into the hall. There he paused, hearing the slow heavy tread of the policeman on the pavement outside and seeing the flash of the bull's-eye reflected in the window. He waited and held his breath. After a few moments he drew back the latch and slipped out, shutting the door very gently behind him. Then he began ringing the bell. In about five minutes his valet appeared, half-dressed and looking very drowsy. "I am sorry to have had to wake you up, Francis," he said, stepping in; "but I had forgotten my latch-key. What time is it?" "Ten minutes past two, sir," answered the man, looking at the clock and blinking. "Ten minutes past two? How horribly late! You must wake me at nine to-morrow. I have some work to do." "All right, sir." "Did any one call this evening?" "Mr. Hallward, sir. He stayed here till eleven, and then he went away to catch his train." "Oh! I am sorry I didn't see him. Did he leave any message?" "No, sir, except that he would write to you from Paris, if he did not find you at the club." "That will do, Francis. Don't forget to call me at nine to-morrow." "No, sir." The man shambled down the passage in his slippers. Dorian Gray threw his hat and coat upon the table and passed into the library. For a quarter of an hour he walked up and down the room, biting his lip and thinking. Then he took down the Blue Book from one of the shelves and began to turn over the leaves. "Alan Campbell, 152, Hertford Street, Mayfair." Yes; that was the man he wanted. CHAPTER 14 At nine o'clock the next morning his servant came in with a cup of chocolate on a tray and opened the shutters. Dorian was sleeping quite peacefully, lying on his right side, with one hand underneath his cheek. He looked like a boy who had been tired out with play, or study. The man had to touch him twice on the shoulder before he woke, and as he opened his eyes a faint smile passed across his lips, as though he had been lost in some delightful dream. Yet he had not dreamed at all. His night had been untroubled by any images of pleasure or of pain. But youth smiles without any reason. It is one of its chiefest charms. He turned round, and leaning upon his elbow, began to sip his chocolate. The mellow November sun came streaming into the room. The sky was bright, and there was a genial warmth in the air. It was almost like a morning in May. Gradually the events of the preceding night crept with silent, blood-stained feet into his brain and reconstructed themselves there with terrible distinctness. He winced at the memory of all that he had suffered, and for a moment the same curious feeling of loathing for Basil Hallward that had made him kill him as he sat in the chair came back to him, and he grew cold with passion. The dead man was still sitting there, too, and in the sunlight now. How horrible that was! Such hideous things were for the darkness, not for the day. He felt that if he brooded on what he had gone through he would sicken or grow mad. There were sins whose fascination was more in the memory than in the doing of them, strange triumphs that gratified the pride more than the passions, and gave to the intellect a quickened sense of joy, greater than any joy they brought, or could ever bring, to the senses. But this was not one of them. It was a thing to be driven out of the mind, to be drugged with poppies, to be strangled lest it might strangle one itself. When the half-hour struck, he passed his hand across his forehead, and then got up hastily and dressed himself with even more than his usual care, giving a good deal of attention to the choice of his necktie and scarf-pin and changing his rings more than once. He spent a long time also over breakfast, tasting the various dishes, talking to his valet about some new liveries that he was thinking of getting made for the servants at Selby, and going through his correspondence. At some of the letters, he smiled. Three of them bored him. One he read several times over and then tore up with a slight look of annoyance in his face. "That awful thing, a woman's memory!" as Lord Henry had once said. After he had drunk his cup of black coffee, he wiped his lips slowly with a napkin, motioned to his servant to wait, and going over to the table, sat down and wrote two letters. One he put in his pocket, the other he handed to the valet. "Take this round to 152, Hertford Street, Francis, and if Mr. Campbell is out of town, get his address." As soon as he was alone, he lit a cigarette and began sketching upon a piece of paper, drawing first flowers and bits of architecture, and then human faces. Suddenly he remarked that every face that he drew seemed to have a fantastic likeness to Basil Hallward. He frowned, and getting up, went over to the book-case and took out a volume at hazard. He was determined that he would not think about what had happened until it became absolutely necessary that he should do so. When he had stretched himself on the sofa, he looked at the title-page of the book. It was Gautier's Emaux et Camees, Charpentier's Japanese-paper edition, with the Jacquemart etching. The binding was of citron-green leather, with a design of gilt trellis-work and dotted pomegranates. It had been given to him by Adrian Singleton. As he turned over the pages, his eye fell on the poem about the hand of Lacenaire, the cold yellow hand "_du supplice encore mal lavee_," with its downy red hairs and its "_doigts de faune_." He glanced at his own white taper fingers, shuddering slightly in spite of himself, and passed on, till he came to those lovely stanzas upon Venice: Sur une gamme chromatique, Le sein de perles ruisselant, La Venus de l'Adriatique Sort de l'eau son corps rose et blanc. Les domes, sur l'azur des ondes Suivant la phrase au pur contour, S'enflent comme des gorges rondes Que souleve un soupir d'amour. L'esquif aborde et me depose, Jetant son amarre au pilier, Devant une facade rose, Sur le marbre d'un escalier. How exquisite they were! As one read them, one seemed to be floating down the green water-ways of the pink and pearl city, seated in a black gondola with silver prow and trailing curtains. The mere lines looked to him like those straight lines of turquoise-blue that follow one as one pushes out to the Lido. The sudden flashes of colour reminded him of the gleam of the opal-and-iris-throated birds that flutter round the tall honeycombed Campanile, or stalk, with such stately grace, through the dim, dust-stained arcades. Leaning back with half-closed eyes, he kept saying over and over to himself: "Devant une facade rose, Sur le marbre d'un escalier." The whole of Venice was in those two lines. He remembered the autumn that he had passed there, and a wonderful love that had stirred him to mad delightful follies. There was romance in every place. But Venice, like Oxford, had kept the background for romance, and, to the true romantic, background was everything, or almost everything. Basil had been with him part of the time, and had gone wild over Tintoret. Poor Basil! What a horrible way for a man to die! He sighed, and took up the volume again, and tried to forget. He read of the swallows that fly in and out of the little _cafe_ at Smyrna where the Hadjis sit counting their amber beads and the turbaned merchants smoke their long tasselled pipes and talk gravely to each other; he read of the Obelisk in the Place de la Concorde that weeps tears of granite in its lonely sunless exile and longs to be back by the hot, lotus-covered Nile, where there are Sphinxes, and rose-red ibises, and white vultures with gilded claws, and crocodiles with small beryl eyes that crawl over the green steaming mud; he began to brood over those verses which, drawing music from kiss-stained marble, tell of that curious statue that Gautier compares to a contralto voice, the "_monstre charmant_" that couches in the porphyry-room of the Louvre. But after a time the book fell from his hand. He grew nervous, and a horrible fit of terror came over him. What if Alan Campbell should be out of England? Days would elapse before he could come back. Perhaps he might refuse to come. What could he do then? Every moment was of vital importance. They had been great friends once, five years before--almost inseparable, indeed. Then the intimacy had come suddenly to an end. When they met in society now, it was only Dorian Gray who smiled: Alan Campbell never did. He was an extremely clever young man, though he had no real appreciation of the visible arts, and whatever little sense of the beauty of poetry he possessed he had gained entirely from Dorian. His dominant intellectual passion was for science. At Cambridge he had spent a great deal of his time working in the laboratory, and had taken a good class in the Natural Science Tripos of his year. Indeed, he was still devoted to the study of chemistry, and had a laboratory of his own in which he used to shut himself up all day long, greatly to the annoyance of his mother, who had set her heart on his standing for Parliament and had a vague idea that a chemist was a person who made up prescriptions. He was an excellent musician, however, as well, and played both the violin and the piano better than most amateurs. In fact, it was music that had first brought him and Dorian Gray together--music and that indefinable attraction that Dorian seemed to be able to exercise whenever he wished--and, indeed, exercised often without being conscious of it. They had met at Lady Berkshire's the night that Rubinstein played there, and after that used to be always seen together at the opera and wherever good music was going on. For eighteen months their intimacy lasted. Campbell was always either at Selby Royal or in Grosvenor Square. To him, as to many others, Dorian Gray was the type of everything that is wonderful and fascinating in life. Whether or not a quarrel had taken place between them no one ever knew. But suddenly people remarked that they scarcely spoke when they met and that Campbell seemed always to go away early from any party at which Dorian Gray was present. He had changed, too--was strangely melancholy at times, appeared almost to dislike hearing music, and would never himself play, giving as his excuse, when he was called upon, that he was so absorbed in science that he had no time left in which to practise. And this was certainly true. Every day he seemed to become more interested in biology, and his name appeared once or twice in some of the scientific reviews in connection with certain curious experiments. This was the man Dorian Gray was waiting for. Every second he kept glancing at the clock. As the minutes went by he became horribly agitated. At last he got up and began to pace up and down the room, looking like a beautiful caged thing. He took long stealthy strides. His hands were curiously cold. The suspense became unbearable. Time seemed to him to be crawling with feet of lead, while he by monstrous winds was being swept towards the jagged edge of some black cleft of precipice. He knew what was waiting for him there; saw it, indeed, and, shuddering, crushed with dank hands his burning lids as though he would have robbed the very brain of sight and driven the eyeballs back into their cave. It was useless. The brain had its own food on which it battened, and the imagination, made grotesque by terror, twisted and distorted as a living thing by pain, danced like some foul puppet on a stand and grinned through moving masks. Then, suddenly, time stopped for him. Yes: that blind, slow-breathing thing crawled no more, and horrible thoughts, time being dead, raced nimbly on in front, and dragged a hideous future from its grave, and showed it to him. He stared at it. Its very horror made him stone. At last the door opened and his servant entered. He turned glazed eyes upon him. "Mr. Campbell, sir," said the man. A sigh of relief broke from his parched lips, and the colour came back to his cheeks. "Ask him to come in at once, Francis." He felt that he was himself again. His mood of cowardice had passed away. The man bowed and retired. In a few moments, Alan Campbell walked in, looking very stern and rather pale, his pallor being intensified by his coal-black hair and dark eyebrows. "Alan! This is kind of you. I thank you for coming." "I had intended never to enter your house again, Gray. But you said it was a matter of life and death." His voice was hard and cold. He spoke with slow deliberation. There was a look of contempt in the steady searching gaze that he turned on Dorian. He kept his hands in the pockets of his Astrakhan coat, and seemed not to have noticed the gesture with which he had been greeted. "Yes: it is a matter of life and death, Alan, and to more than one person. Sit down." Campbell took a chair by the table, and Dorian sat opposite to him. The two men's eyes met. In Dorian's there was infinite pity. He knew that what he was going to do was dreadful. After a strained moment of silence, he leaned across and said, very quietly, but watching the effect of each word upon the face of him he had sent for, "Alan, in a locked room at the top of this house, a room to which nobody but myself has access, a dead man is seated at a table. He has been dead ten hours now. Don't stir, and don't look at me like that. Who the man is, why he died, how he died, are matters that do not concern you. What you have to do is this--" "Stop, Gray. I don't want to know anything further. Whether what you have told me is true or not true doesn't concern me. I entirely decline to be mixed up in your life. Keep your horrible secrets to yourself. They don't interest me any more." "Alan, they will have to interest you. This one will have to interest you. I am awfully sorry for you, Alan. But I can't help myself. You are the one man who is able to save me. I am forced to bring you into the matter. I have no option. Alan, you are scientific. You know about chemistry and things of that kind. You have made experiments. What you have got to do is to destroy the thing that is upstairs--to destroy it so that not a vestige of it will be left. Nobody saw this person come into the house. Indeed, at the present moment he is supposed to be in Paris. He will not be missed for months. When he is missed, there must be no trace of him found here. You, Alan, you must change him, and everything that belongs to him, into a handful of ashes that I may scatter in the air." "You are mad, Dorian." "Ah! I was waiting for you to call me Dorian." "You are mad, I tell you--mad to imagine that I would raise a finger to help you, mad to make this monstrous confession. I will have nothing to do with this matter, whatever it is. Do you think I am going to peril my reputation for you? What is it to me what devil's work you are up to?" "It was suicide, Alan." "I am glad of that. But who drove him to it? You, I should fancy." "Do you still refuse to do this for me?" "Of course I refuse. I will have absolutely nothing to do with it. I don't care what shame comes on you. You deserve it all. I should not be sorry to see you disgraced, publicly disgraced. How dare you ask me, of all men in the world, to mix myself up in this horror? I should have thought you knew more about people's characters. Your friend Lord Henry Wotton can't have taught you much about psychology, whatever else he has taught you. Nothing will induce me to stir a step to help you. You have come to the wrong man. Go to some of your friends. Don't come to me." "Alan, it was murder. I killed him. You don't know what he had made me suffer. Whatever my life is, he had more to do with the making or the marring of it than poor Harry has had. He may not have intended it, the result was the same." "Murder! Good God, Dorian, is that what you have come to? I shall not inform upon you. It is not my business. Besides, without my stirring in the matter, you are certain to be arrested. Nobody ever commits a crime without doing something stupid. But I will have nothing to do with it." "You must have something to do with it. Wait, wait a moment; listen to me. Only listen, Alan. All I ask of you is to perform a certain scientific experiment. You go to hospitals and dead-houses, and the horrors that you do there don't affect you. If in some hideous dissecting-room or fetid laboratory you found this man lying on a leaden table with red gutters scooped out in it for the blood to flow through, you would simply look upon him as an admirable subject. You would not turn a hair. You would not believe that you were doing anything wrong. On the contrary, you would probably feel that you were benefiting the human race, or increasing the sum of knowledge in the world, or gratifying intellectual curiosity, or something of that kind. What I want you to do is merely what you have often done before. Indeed, to destroy a body must be far less horrible than what you are accustomed to work at. And, remember, it is the only piece of evidence against me. If it is discovered, I am lost; and it is sure to be discovered unless you help me." "I have no desire to help you. You forget that. I am simply indifferent to the whole thing. It has nothing to do with me." "Alan, I entreat you. Think of the position I am in. Just before you came I almost fainted with terror. You may know terror yourself some day. No! don't think of that. Look at the matter purely from the scientific point of view. You don't inquire where the dead things on which you experiment come from. Don't inquire now. I have told you too much as it is. But I beg of you to do this. We were friends once, Alan." "Don't speak about those days, Dorian--they are dead." "The dead linger sometimes. The man upstairs will not go away. He is sitting at the table with bowed head and outstretched arms. Alan! Alan! If you don't come to my assistance, I am ruined. Why, they will hang me, Alan! Don't you understand? They will hang me for what I have done." "There is no good in prolonging this scene. I absolutely refuse to do anything in the matter. It is insane of you to ask me." "You refuse?" "Yes." "I entreat you, Alan." "It is useless." The same look of pity came into Dorian Gray's eyes. Then he stretched out his hand, took a piece of paper, and wrote something on it. He read it over twice, folded it carefully, and pushed it across the table. Having done this, he got up and went over to the window. Campbell looked at him in surprise, and then took up the paper, and opened it. As he read it, his face became ghastly pale and he fell back in his chair. A horrible sense of sickness came over him. He felt as if his heart was beating itself to death in some empty hollow. After two or three minutes of terrible silence, Dorian turned round and came and stood behind him, putting his hand upon his shoulder. "I am so sorry for you, Alan," he murmured, "but you leave me no alternative. I have a letter written already. Here it is. You see the address. If you don't help me, I must send it. If you don't help me, I will send it. You know what the result will be. But you are going to help me. It is impossible for you to refuse now. I tried to spare you. You will do me the justice to admit that. You were stern, harsh, offensive. You treated me as no man has ever dared to treat me--no living man, at any rate. I bore it all. Now it is for me to dictate terms." Campbell buried his face in his hands, and a shudder passed through him. "Yes, it is my turn to dictate terms, Alan. You know what they are. The thing is quite simple. Come, don't work yourself into this fever. The thing has to be done. Face it, and do it." A groan broke from Campbell's lips and he shivered all over. The ticking of the clock on the mantelpiece seemed to him to be dividing time into separate atoms of agony, each of which was too terrible to be borne. He felt as if an iron ring was being slowly tightened round his forehead, as if the disgrace with which he was threatened had already come upon him. The hand upon his shoulder weighed like a hand of lead. It was intolerable. It seemed to crush him. "Come, Alan, you must decide at once." "I cannot do it," he said, mechanically, as though words could alter things. "You must. You have no choice. Don't delay." He hesitated a moment. "Is there a fire in the room upstairs?" "Yes, there is a gas-fire with asbestos." "I shall have to go home and get some things from the laboratory." "No, Alan, you must not leave the house. Write out on a sheet of notepaper what you want and my servant will take a cab and bring the things back to you." Campbell scrawled a few lines, blotted them, and addressed an envelope to his assistant. Dorian took the note up and read it carefully. Then he rang the bell and gave it to his valet, with orders to return as soon as possible and to bring the things with him. As the hall door shut, Campbell started nervously, and having got up from the chair, went over to the chimney-piece. He was shivering with a kind of ague. For nearly twenty minutes, neither of the men spoke. A fly buzzed noisily about the room, and the ticking of the clock was like the beat of a hammer. As the chime struck one, Campbell turned round, and looking at Dorian Gray, saw that his eyes were filled with tears. There was something in the purity and refinement of that sad face that seemed to enrage him. "You are infamous, absolutely infamous!" he muttered. "Hush, Alan. You have saved my life," said Dorian. "Your life? Good heavens! what a life that is! You have gone from corruption to corruption, and now you have culminated in crime. In doing what I am going to do--what you force me to do--it is not of your life that I am thinking." "Ah, Alan," murmured Dorian with a sigh, "I wish you had a thousandth part of the pity for me that I have for you." He turned away as he spoke and stood looking out at the garden. Campbell made no answer. After about ten minutes a knock came to the door, and the servant entered, carrying a large mahogany chest of chemicals, with a long coil of steel and platinum wire and two rather curiously shaped iron clamps. "Shall I leave the things here, sir?" he asked Campbell. "Yes," said Dorian. "And I am afraid, Francis, that I have another errand for you. What is the name of the man at Richmond who supplies Selby with orchids?" "Harden, sir." "Yes--Harden. You must go down to Richmond at once, see Harden personally, and tell him to send twice as many orchids as I ordered, and to have as few white ones as possible. In fact, I don't want any white ones. It is a lovely day, Francis, and Richmond is a very pretty place--otherwise I wouldn't bother you about it." "No trouble, sir. At what time shall I be back?" Dorian looked at Campbell. "How long will your experiment take, Alan?" he said in a calm indifferent voice. The presence of a third person in the room seemed to give him extraordinary courage. Campbell frowned and bit his lip. "It will take about five hours," he answered. "It will be time enough, then, if you are back at half-past seven, Francis. Or stay: just leave my things out for dressing. You can have the evening to yourself. I am not dining at home, so I shall not want you." "Thank you, sir," said the man, leaving the room. "Now, Alan, there is not a moment to be lost. How heavy this chest is! I'll take it for you. You bring the other things." He spoke rapidly and in an authoritative manner. Campbell felt dominated by him. They left the room together. When they reached the top landing, Dorian took out the key and turned it in the lock. Then he stopped, and a troubled look came into his eyes. He shuddered. "I don't think I can go in, Alan," he murmured. "It is nothing to me. I don't require you," said Campbell coldly. Dorian half opened the door. As he did so, he saw the face of his portrait leering in the sunlight. On the floor in front of it the torn curtain was lying. He remembered that the night before he had forgotten, for the first time in his life, to hide the fatal canvas, and was about to rush forward, when he drew back with a shudder. What was that loathsome red dew that gleamed, wet and glistening, on one of the hands, as though the canvas had sweated blood? How horrible it was!--more horrible, it seemed to him for the moment, than the silent thing that he knew was stretched across the table, the thing whose grotesque misshapen shadow on the spotted carpet showed him that it had not stirred, but was still there, as he had left it. He heaved a deep breath, opened the door a little wider, and with half-closed eyes and averted head, walked quickly in, determined that he would not look even once upon the dead man. Then, stooping down and taking up the gold-and-purple hanging, he flung it right over the picture. There he stopped, feeling afraid to turn round, and his eyes fixed themselves on the intricacies of the pattern before him. He heard Campbell bringing in the heavy chest, and the irons, and the other things that he had required for his dreadful work. He began to wonder if he and Basil Hallward had ever met, and, if so, what they had thought of each other. "Leave me now," said a stern voice behind him. He turned and hurried out, just conscious that the dead man had been thrust back into the chair and that Campbell was gazing into a glistening yellow face. As he was going downstairs, he heard the key being turned in the lock. It was long after seven when Campbell came back into the library. He was pale, but absolutely calm. "I have done what you asked me to do," he muttered. "And now, good-bye. Let us never see each other again." "You have saved me from ruin, Alan. I cannot forget that," said Dorian simply. As soon as Campbell had left, he went upstairs. There was a horrible smell of nitric acid in the room. But the thing that had been sitting at the table was gone. CHAPTER 15 That evening, at eight-thirty, exquisitely dressed and wearing a large button-hole of Parma violets, Dorian Gray was ushered into Lady Narborough's drawing-room by bowing servants. His forehead was throbbing with maddened nerves, and he felt wildly excited, but his manner as he bent over his hostess's hand was as easy and graceful as ever. Perhaps one never seems so much at one's ease as when one has to play a part. Certainly no one looking at Dorian Gray that night could have believed that he had passed through a tragedy as horrible as any tragedy of our age. Those finely shaped fingers could never have clutched a knife for sin, nor those smiling lips have cried out on God and goodness. He himself could not help wondering at the calm of his demeanour, and for a moment felt keenly the terrible pleasure of a double life. It was a small party, got up rather in a hurry by Lady Narborough, who was a very clever woman with what Lord Henry used to describe as the remains of really remarkable ugliness. She had proved an excellent wife to one of our most tedious ambassadors, and having buried her husband properly in a marble mausoleum, which she had herself designed, and married off her daughters to some rich, rather elderly men, she devoted herself now to the pleasures of French fiction, French cookery, and French _esprit_ when she could get it. Dorian was one of her especial favourites, and she always told him that she was extremely glad she had not met him in early life. "I know, my dear, I should have fallen madly in love with you," she used to say, "and thrown my bonnet right over the mills for your sake. It is most fortunate that you were not thought of at the time. As it was, our bonnets were so unbecoming, and the mills were so occupied in trying to raise the wind, that I never had even a flirtation with anybody. However, that was all Narborough's fault. He was dreadfully short-sighted, and there is no pleasure in taking in a husband who never sees anything." Her guests this evening were rather tedious. The fact was, as she explained to Dorian, behind a very shabby fan, one of her married daughters had come up quite suddenly to stay with her, and, to make matters worse, had actually brought her husband with her. "I think it is most unkind of her, my dear," she whispered. "Of course I go and stay with them every summer after I come from Homburg, but then an old woman like me must have fresh air sometimes, and besides, I really wake them up. You don't know what an existence they lead down there. It is pure unadulterated country life. They get up early, because they have so much to do, and go to bed early, because they have so little to think about. There has not been a scandal in the neighbourhood since the time of Queen Elizabeth, and consequently they all fall asleep after dinner. You shan't sit next either of them. You shall sit by me and amuse me." Dorian murmured a graceful compliment and looked round the room. Yes: it was certainly a tedious party. Two of the people he had never seen before, and the others consisted of Ernest Harrowden, one of those middle-aged mediocrities so common in London clubs who have no enemies, but are thoroughly disliked by their friends; Lady Ruxton, an overdressed woman of forty-seven, with a hooked nose, who was always trying to get herself compromised, but was so peculiarly plain that to her great disappointment no one would ever believe anything against her; Mrs. Erlynne, a pushing nobody, with a delightful lisp and Venetian-red hair; Lady Alice Chapman, his hostess's daughter, a dowdy dull girl, with one of those characteristic British faces that, once seen, are never remembered; and her husband, a red-cheeked, white-whiskered creature who, like so many of his class, was under the impression that inordinate joviality can atone for an entire lack of ideas. He was rather sorry he had come, till Lady Narborough, looking at the great ormolu gilt clock that sprawled in gaudy curves on the mauve-draped mantelshelf, exclaimed: "How horrid of Henry Wotton to be so late! I sent round to him this morning on chance and he promised faithfully not to disappoint me." It was some consolation that Harry was to be there, and when the door opened and he heard his slow musical voice lending charm to some insincere apology, he ceased to feel bored. But at dinner he could not eat anything. Plate after plate went away untasted. Lady Narborough kept scolding him for what she called "an insult to poor Adolphe, who invented the _menu_ specially for you," and now and then Lord Henry looked across at him, wondering at his silence and abstracted manner. From time to time the butler filled his glass with champagne. He drank eagerly, and his thirst seemed to increase. "Dorian," said Lord Henry at last, as the _chaud-froid_ was being handed round, "what is the matter with you to-night? You are quite out of sorts." "I believe he is in love," cried Lady Narborough, "and that he is afraid to tell me for fear I should be jealous. He is quite right. I certainly should." "Dear Lady Narborough," murmured Dorian, smiling, "I have not been in love for a whole week--not, in fact, since Madame de Ferrol left town." "How you men can fall in love with that woman!" exclaimed the old lady. "I really cannot understand it." "It is simply because she remembers you when you were a little girl, Lady Narborough," said Lord Henry. "She is the one link between us and your short frocks." "She does not remember my short frocks at all, Lord Henry. But I remember her very well at Vienna thirty years ago, and how _decolletee_ she was then." "She is still _decolletee_," he answered, taking an olive in his long fingers; "and when she is in a very smart gown she looks like an _edition de luxe_ of a bad French novel. She is really wonderful, and full of surprises. Her capacity for family affection is extraordinary. When her third husband died, her hair turned quite gold from grief." "How can you, Harry!" cried Dorian. "It is a most romantic explanation," laughed the hostess. "But her third husband, Lord Henry! You don't mean to say Ferrol is the fourth?" "Certainly, Lady Narborough." "I don't believe a word of it." "Well, ask Mr. Gray. He is one of her most intimate friends." "Is it true, Mr. Gray?" "She assures me so, Lady Narborough," said Dorian. "I asked her whether, like Marguerite de Navarre, she had their hearts embalmed and hung at her girdle. She told me she didn't, because none of them had had any hearts at all." "Four husbands! Upon my word that is _trop de zele_." "_Trop d'audace_, I tell her," said Dorian. "Oh! she is audacious enough for anything, my dear. And what is Ferrol like? I don't know him." "The husbands of very beautiful women belong to the criminal classes," said Lord Henry, sipping his wine. Lady Narborough hit him with her fan. "Lord Henry, I am not at all surprised that the world says that you are extremely wicked." "But what world says that?" asked Lord Henry, elevating his eyebrows. "It can only be the next world. This world and I are on excellent terms." "Everybody I know says you are very wicked," cried the old lady, shaking her head. Lord Henry looked serious for some moments. "It is perfectly monstrous," he said, at last, "the way people go about nowadays saying things against one behind one's back that are absolutely and entirely true." "Isn't he incorrigible?" cried Dorian, leaning forward in his chair. "I hope so," said his hostess, laughing. "But really, if you all worship Madame de Ferrol in this ridiculous way, I shall have to marry again so as to be in the fashion." "You will never marry again, Lady Narborough," broke in Lord Henry. "You were far too happy. When a woman marries again, it is because she detested her first husband. When a man marries again, it is because he adored his first wife. Women try their luck; men risk theirs." "Narborough wasn't perfect," cried the old lady. "If he had been, you would not have loved him, my dear lady," was the rejoinder. "Women love us for our defects. If we have enough of them, they will forgive us everything, even our intellects. You will never ask me to dinner again after saying this, I am afraid, Lady Narborough, but it is quite true." "Of course it is true, Lord Henry. If we women did not love you for your defects, where would you all be? Not one of you would ever be married. You would be a set of unfortunate bachelors. Not, however, that that would alter you much. Nowadays all the married men live like bachelors, and all the bachelors like married men." "_Fin de siecle_," murmured Lord Henry. "_Fin du globe_," answered his hostess. "I wish it were _fin du globe_," said Dorian with a sigh. "Life is a great disappointment." "Ah, my dear," cried Lady Narborough, putting on her gloves, "don't tell me that you have exhausted life. When a man says that one knows that life has exhausted him. Lord Henry is very wicked, and I sometimes wish that I had been; but you are made to be good--you look so good. I must find you a nice wife. Lord Henry, don't you think that Mr. Gray should get married?" "I am always telling him so, Lady Narborough," said Lord Henry with a bow. "Well, we must look out for a suitable match for him. I shall go through Debrett carefully to-night and draw out a list of all the eligible young ladies." "With their ages, Lady Narborough?" asked Dorian. "Of course, with their ages, slightly edited. But nothing must be done in a hurry. I want it to be what _The Morning Post_ calls a suitable alliance, and I want you both to be happy." "What nonsense people talk about happy marriages!" exclaimed Lord Henry. "A man can be happy with any woman, as long as he does not love her." "Ah! what a cynic you are!" cried the old lady, pushing back her chair and nodding to Lady Ruxton. "You must come and dine with me soon again. You are really an admirable tonic, much better than what Sir Andrew prescribes for me. You must tell me what people you would like to meet, though. I want it to be a delightful gathering." "I like men who have a future and women who have a past," he answered. "Or do you think that would make it a petticoat party?" "I fear so," she said, laughing, as she stood up. "A thousand pardons, my dear Lady Ruxton," she added, "I didn't see you hadn't finished your cigarette." "Never mind, Lady Narborough. I smoke a great deal too much. I am going to limit myself, for the future." "Pray don't, Lady Ruxton," said Lord Henry. "Moderation is a fatal thing. Enough is as bad as a meal. More than enough is as good as a feast." Lady Ruxton glanced at him curiously. "You must come and explain that to me some afternoon, Lord Henry. It sounds a fascinating theory," she murmured, as she swept out of the room. "Now, mind you don't stay too long over your politics and scandal," cried Lady Narborough from the door. "If you do, we are sure to squabble upstairs." The men laughed, and Mr. Chapman got up solemnly from the foot of the table and came up to the top. Dorian Gray changed his seat and went and sat by Lord Henry. Mr. Chapman began to talk in a loud voice about the situation in the House of Commons. He guffawed at his adversaries. The word _doctrinaire_--word full of terror to the British mind--reappeared from time to time between his explosions. An alliterative prefix served as an ornament of oratory. He hoisted the Union Jack on the pinnacles of thought. The inherited stupidity of the race--sound English common sense he jovially termed it--was shown to be the proper bulwark for society. A smile curved Lord Henry's lips, and he turned round and looked at Dorian. "Are you better, my dear fellow?" he asked. "You seemed rather out of sorts at dinner." "I am quite well, Harry. I am tired. That is all." "You were charming last night. The little duchess is quite devoted to you. She tells me she is going down to Selby." "She has promised to come on the twentieth." "Is Monmouth to be there, too?" "Oh, yes, Harry." "He bores me dreadfully, almost as much as he bores her. She is very clever, too clever for a woman. She lacks the indefinable charm of weakness. It is the feet of clay that make the gold of the image precious. Her feet are very pretty, but they are not feet of clay. White porcelain feet, if you like. They have been through the fire, and what fire does not destroy, it hardens. She has had experiences." "How long has she been married?" asked Dorian. "An eternity, she tells me. I believe, according to the peerage, it is ten years, but ten years with Monmouth must have been like eternity, with time thrown in. Who else is coming?" "Oh, the Willoughbys, Lord Rugby and his wife, our hostess, Geoffrey Clouston, the usual set. I have asked Lord Grotrian." "I like him," said Lord Henry. "A great many people don't, but I find him charming. He atones for being occasionally somewhat overdressed by being always absolutely over-educated. He is a very modern type." "I don't know if he will be able to come, Harry. He may have to go to Monte Carlo with his father." "Ah! what a nuisance people's people are! Try and make him come. By the way, Dorian, you ran off very early last night. You left before eleven. What did you do afterwards? Did you go straight home?" Dorian glanced at him hurriedly and frowned. "No, Harry," he said at last, "I did not get home till nearly three." "Did you go to the club?" "Yes," he answered. Then he bit his lip. "No, I don't mean that. I didn't go to the club. I walked about. I forget what I did.... How inquisitive you are, Harry! You always want to know what one has been doing. I always want to forget what I have been doing. I came in at half-past two, if you wish to know the exact time. I had left my latch-key at home, and my servant had to let me in. If you want any corroborative evidence on the subject, you can ask him." Lord Henry shrugged his shoulders. "My dear fellow, as if I cared! Let us go up to the drawing-room. No sherry, thank you, Mr. Chapman. Something has happened to you, Dorian. Tell me what it is. You are not yourself to-night." "Don't mind me, Harry. I am irritable, and out of temper. I shall come round and see you to-morrow, or next day. Make my excuses to Lady Narborough. I shan't go upstairs. I shall go home. I must go home." "All right, Dorian. I dare say I shall see you to-morrow at tea-time. The duchess is coming." "I will try to be there, Harry," he said, leaving the room. As he drove back to his own house, he was conscious that the sense of terror he thought he had strangled had come back to him. Lord Henry's casual questioning had made him lose his nerve for the moment, and he wanted his nerve still. Things that were dangerous had to be destroyed. He winced. He hated the idea of even touching them. Yet it had to be done. He realized that, and when he had locked the door of his library, he opened the secret press into which he had thrust Basil Hallward's coat and bag. A huge fire was blazing. He piled another log on it. The smell of the singeing clothes and burning leather was horrible. It took him three-quarters of an hour to consume everything. At the end he felt faint and sick, and having lit some Algerian pastilles in a pierced copper brazier, he bathed his hands and forehead with a cool musk-scented vinegar. Suddenly he started. His eyes grew strangely bright, and he gnawed nervously at his underlip. Between two of the windows stood a large Florentine cabinet, made out of ebony and inlaid with ivory and blue lapis. He watched it as though it were a thing that could fascinate and make afraid, as though it held something that he longed for and yet almost loathed. His breath quickened. A mad craving came over him. He lit a cigarette and then threw it away. His eyelids drooped till the long fringed lashes almost touched his cheek. But he still watched the cabinet. At last he got up from the sofa on which he had been lying, went over to it, and having unlocked it, touched some hidden spring. A triangular drawer passed slowly out. His fingers moved instinctively towards it, dipped in, and closed on something. It was a small Chinese box of black and gold-dust lacquer, elaborately wrought, the sides patterned with curved waves, and the silken cords hung with round crystals and tasselled in plaited metal threads. He opened it. Inside was a green paste, waxy in lustre, the odour curiously heavy and persistent. He hesitated for some moments, with a strangely immobile smile upon his face. Then shivering, though the atmosphere of the room was terribly hot, he drew himself up and glanced at the clock. It was twenty minutes to twelve. He put the box back, shutting the cabinet doors as he did so, and went into his bedroom. As midnight was striking bronze blows upon the dusky air, Dorian Gray, dressed commonly, and with a muffler wrapped round his throat, crept quietly out of his house. In Bond Street he found a hansom with a good horse. He hailed it and in a low voice gave the driver an address. The man shook his head. "It is too far for me," he muttered. "Here is a sovereign for you," said Dorian. "You shall have another if you drive fast." "All right, sir," answered the man, "you will be there in an hour," and after his fare had got in he turned his horse round and drove rapidly towards the river. CHAPTER 16 A cold rain began to fall, and the blurred street-lamps looked ghastly in the dripping mist. The public-houses were just closing, and dim men and women were clustering in broken groups round their doors. From some of the bars came the sound of horrible laughter. In others, drunkards brawled and screamed. Lying back in the hansom, with his hat pulled over his forehead, Dorian Gray watched with listless eyes the sordid shame of the great city, and now and then he repeated to himself the words that Lord Henry had said to him on the first day they had met, "To cure the soul by means of the senses, and the senses by means of the soul." Yes, that was the secret. He had often tried it, and would try it again now. There were opium dens where one could buy oblivion, dens of horror where the memory of old sins could be destroyed by the madness of sins that were new. The moon hung low in the sky like a yellow skull. From time to time a huge misshapen cloud stretched a long arm across and hid it. The gas-lamps grew fewer, and the streets more narrow and gloomy. Once the man lost his way and had to drive back half a mile. A steam rose from the horse as it splashed up the puddles. The sidewindows of the hansom were clogged with a grey-flannel mist. "To cure the soul by means of the senses, and the senses by means of the soul!" How the words rang in his ears! His soul, certainly, was sick to death. Was it true that the senses could cure it? Innocent blood had been spilled. What could atone for that? Ah! for that there was no atonement; but though forgiveness was impossible, forgetfulness was possible still, and he was determined to forget, to stamp the thing out, to crush it as one would crush the adder that had stung one. Indeed, what right had Basil to have spoken to him as he had done? Who had made him a judge over others? He had said things that were dreadful, horrible, not to be endured. On and on plodded the hansom, going slower, it seemed to him, at each step. He thrust up the trap and called to the man to drive faster. The hideous hunger for opium began to gnaw at him. His throat burned and his delicate hands twitched nervously together. He struck at the horse madly with his stick. The driver laughed and whipped up. He laughed in answer, and the man was silent. The way seemed interminable, and the streets like the black web of some sprawling spider. The monotony became unbearable, and as the mist thickened, he felt afraid. Then they passed by lonely brickfields. The fog was lighter here, and he could see the strange, bottle-shaped kilns with their orange, fanlike tongues of fire. A dog barked as they went by, and far away in the darkness some wandering sea-gull screamed. The horse stumbled in a rut, then swerved aside and broke into a gallop. After some time they left the clay road and rattled again over rough-paven streets. Most of the windows were dark, but now and then fantastic shadows were silhouetted against some lamplit blind. He watched them curiously. They moved like monstrous marionettes and made gestures like live things. He hated them. A dull rage was in his heart. As they turned a corner, a woman yelled something at them from an open door, and two men ran after the hansom for about a hundred yards. The driver beat at them with his whip. It is said that passion makes one think in a circle. Certainly with hideous iteration the bitten lips of Dorian Gray shaped and reshaped those subtle words that dealt with soul and sense, till he had found in them the full expression, as it were, of his mood, and justified, by intellectual approval, passions that without such justification would still have dominated his temper. From cell to cell of his brain crept the one thought; and the wild desire to live, most terrible of all man's appetites, quickened into force each trembling nerve and fibre. Ugliness that had once been hateful to him because it made things real, became dear to him now for that very reason. Ugliness was the one reality. The coarse brawl, the loathsome den, the crude violence of disordered life, the very vileness of thief and outcast, were more vivid, in their intense actuality of impression, than all the gracious shapes of art, the dreamy shadows of song. They were what he needed for forgetfulness. In three days he would be free. Suddenly the man drew up with a jerk at the top of a dark lane. Over the low roofs and jagged chimney-stacks of the houses rose the black masts of ships. Wreaths of white mist clung like ghostly sails to the yards. "Somewhere about here, sir, ain't it?" he asked huskily through the trap. Dorian started and peered round. "This will do," he answered, and having got out hastily and given the driver the extra fare he had promised him, he walked quickly in the direction of the quay. Here and there a lantern gleamed at the stern of some huge merchantman. The light shook and splintered in the puddles. A red glare came from an outward-bound steamer that was coaling. The slimy pavement looked like a wet mackintosh. He hurried on towards the left, glancing back now and then to see if he was being followed. In about seven or eight minutes he reached a small shabby house that was wedged in between two gaunt factories. In one of the top-windows stood a lamp. He stopped and gave a peculiar knock. After a little time he heard steps in the passage and the chain being unhooked. The door opened quietly, and he went in without saying a word to the squat misshapen figure that flattened itself into the shadow as he passed. At the end of the hall hung a tattered green curtain that swayed and shook in the gusty wind which had followed him in from the street. He dragged it aside and entered a long low room which looked as if it had once been a third-rate dancing-saloon. Shrill flaring gas-jets, dulled and distorted in the fly-blown mirrors that faced them, were ranged round the walls. Greasy reflectors of ribbed tin backed them, making quivering disks of light. The floor was covered with ochre-coloured sawdust, trampled here and there into mud, and stained with dark rings of spilled liquor. Some Malays were crouching by a little charcoal stove, playing with bone counters and showing their white teeth as they chattered. In one corner, with his head buried in his arms, a sailor sprawled over a table, and by the tawdrily painted bar that ran across one complete side stood two haggard women, mocking an old man who was brushing the sleeves of his coat with an expression of disgust. "He thinks he's got red ants on him," laughed one of them, as Dorian passed by. The man looked at her in terror and began to whimper. At the end of the room there was a little staircase, leading to a darkened chamber. As Dorian hurried up its three rickety steps, the heavy odour of opium met him. He heaved a deep breath, and his nostrils quivered with pleasure. When he entered, a young man with smooth yellow hair, who was bending over a lamp lighting a long thin pipe, looked up at him and nodded in a hesitating manner. "You here, Adrian?" muttered Dorian. "Where else should I be?" he answered, listlessly. "None of the chaps will speak to me now." "I thought you had left England." "Darlington is not going to do anything. My brother paid the bill at last. George doesn't speak to me either.... I don't care," he added with a sigh. "As long as one has this stuff, one doesn't want friends. I think I have had too many friends." Dorian winced and looked round at the grotesque things that lay in such fantastic postures on the ragged mattresses. The twisted limbs, the gaping mouths, the staring lustreless eyes, fascinated him. He knew in what strange heavens they were suffering, and what dull hells were teaching them the secret of some new joy. They were better off than he was. He was prisoned in thought. Memory, like a horrible malady, was eating his soul away. From time to time he seemed to see the eyes of Basil Hallward looking at him. Yet he felt he could not stay. The presence of Adrian Singleton troubled him. He wanted to be where no one would know who he was. He wanted to escape from himself. "I am going on to the other place," he said after a pause. "On the wharf?" "Yes." "That mad-cat is sure to be there. They won't have her in this place now." Dorian shrugged his shoulders. "I am sick of women who love one. Women who hate one are much more interesting. Besides, the stuff is better." "Much the same." "I like it better. Come and have something to drink. I must have something." "I don't want anything," murmured the young man. "Never mind." Adrian Singleton rose up wearily and followed Dorian to the bar. A half-caste, in a ragged turban and a shabby ulster, grinned a hideous greeting as he thrust a bottle of brandy and two tumblers in front of them. The women sidled up and began to chatter. Dorian turned his back on them and said something in a low voice to Adrian Singleton. A crooked smile, like a Malay crease, writhed across the face of one of the women. "We are very proud to-night," she sneered. "For God's sake don't talk to me," cried Dorian, stamping his foot on the ground. "What do you want? Money? Here it is. Don't ever talk to me again." Two red sparks flashed for a moment in the woman's sodden eyes, then flickered out and left them dull and glazed. She tossed her head and raked the coins off the counter with greedy fingers. Her companion watched her enviously. "It's no use," sighed Adrian Singleton. "I don't care to go back. What does it matter? I am quite happy here." "You will write to me if you want anything, won't you?" said Dorian, after a pause. "Perhaps." "Good night, then." "Good night," answered the young man, passing up the steps and wiping his parched mouth with a handkerchief. Dorian walked to the door with a look of pain in his face. As he drew the curtain aside, a hideous laugh broke from the painted lips of the woman who had taken his money. "There goes the devil's bargain!" she hiccoughed, in a hoarse voice. "Curse you!" he answered, "don't call me that." She snapped her fingers. "Prince Charming is what you like to be called, ain't it?" she yelled after him. The drowsy sailor leaped to his feet as she spoke, and looked wildly round. The sound of the shutting of the hall door fell on his ear. He rushed out as if in pursuit. Dorian Gray hurried along the quay through the drizzling rain. His meeting with Adrian Singleton had strangely moved him, and he wondered if the ruin of that young life was really to be laid at his door, as Basil Hallward had said to him with such infamy of insult. He bit his lip, and for a few seconds his eyes grew sad. Yet, after all, what did it matter to him? One's days were too brief to take the burden of another's errors on one's shoulders. Each man lived his own life and paid his own price for living it. The only pity was one had to pay so often for a single fault. One had to pay over and over again, indeed. In her dealings with man, destiny never closed her accounts. There are moments, psychologists tell us, when the passion for sin, or for what the world calls sin, so dominates a nature that every fibre of the body, as every cell of the brain, seems to be instinct with fearful impulses. Men and women at such moments lose the freedom of their will. They move to their terrible end as automatons move. Choice is taken from them, and conscience is either killed, or, if it lives at all, lives but to give rebellion its fascination and disobedience its charm. For all sins, as theologians weary not of reminding us, are sins of disobedience. When that high spirit, that morning star of evil, fell from heaven, it was as a rebel that he fell. Callous, concentrated on evil, with stained mind, and soul hungry for rebellion, Dorian Gray hastened on, quickening his step as he went, but as he darted aside into a dim archway, that had served him often as a short cut to the ill-famed place where he was going, he felt himself suddenly seized from behind, and before he had time to defend himself, he was thrust back against the wall, with a brutal hand round his throat. He struggled madly for life, and by a terrible effort wrenched the tightening fingers away. In a second he heard the click of a revolver, and saw the gleam of a polished barrel, pointing straight at his head, and the dusky form of a short, thick-set man facing him. "What do you want?" he gasped. "Keep quiet," said the man. "If you stir, I shoot you." "You are mad. What have I done to you?" "You wrecked the life of Sibyl Vane," was the answer, "and Sibyl Vane was my sister. She killed herself. I know it. Her death is at your door. I swore I would kill you in return. For years I have sought you. I had no clue, no trace. The two people who could have described you were dead. I knew nothing of you but the pet name she used to call you. I heard it to-night by chance. Make your peace with God, for to-night you are going to die." Dorian Gray grew sick with fear. "I never knew her," he stammered. "I never heard of her. You are mad." "You had better confess your sin, for as sure as I am James Vane, you are going to die." There was a horrible moment. Dorian did not know what to say or do. "Down on your knees!" growled the man. "I give you one minute to make your peace--no more. I go on board to-night for India, and I must do my job first. One minute. That's all." Dorian's arms fell to his side. Paralysed with terror, he did not know what to do. Suddenly a wild hope flashed across his brain. "Stop," he cried. "How long ago is it since your sister died? Quick, tell me!" "Eighteen years," said the man. "Why do you ask me? What do years matter?" "Eighteen years," laughed Dorian Gray, with a touch of triumph in his voice. "Eighteen years! Set me under the lamp and look at my face!" James Vane hesitated for a moment, not understanding what was meant. Then he seized Dorian Gray and dragged him from the archway. Dim and wavering as was the wind-blown light, yet it served to show him the hideous error, as it seemed, into which he had fallen, for the face of the man he had sought to kill had all the bloom of boyhood, all the unstained purity of youth. He seemed little more than a lad of twenty summers, hardly older, if older indeed at all, than his sister had been when they had parted so many years ago. It was obvious that this was not the man who had destroyed her life. He loosened his hold and reeled back. "My God! my God!" he cried, "and I would have murdered you!" Dorian Gray drew a long breath. "You have been on the brink of committing a terrible crime, my man," he said, looking at him sternly. "Let this be a warning to you not to take vengeance into your own hands." "Forgive me, sir," muttered James Vane. "I was deceived. A chance word I heard in that damned den set me on the wrong track." "You had better go home and put that pistol away, or you may get into trouble," said Dorian, turning on his heel and going slowly down the street. James Vane stood on the pavement in horror. He was trembling from head to foot. After a little while, a black shadow that had been creeping along the dripping wall moved out into the light and came close to him with stealthy footsteps. He felt a hand laid on his arm and looked round with a start. It was one of the women who had been drinking at the bar. "Why didn't you kill him?" she hissed out, putting haggard face quite close to his. "I knew you were following him when you rushed out from Daly's. You fool! You should have killed him. He has lots of money, and he's as bad as bad." "He is not the man I am looking for," he answered, "and I want no man's money. I want a man's life. The man whose life I want must be nearly forty now. This one is little more than a boy. Thank God, I have not got his blood upon my hands." The woman gave a bitter laugh. "Little more than a boy!" she sneered. "Why, man, it's nigh on eighteen years since Prince Charming made me what I am." "You lie!" cried James Vane. She raised her hand up to heaven. "Before God I am telling the truth," she cried. "Before God?" "Strike me dumb if it ain't so. He is the worst one that comes here. They say he has sold himself to the devil for a pretty face. It's nigh on eighteen years since I met him. He hasn't changed much since then. I have, though," she added, with a sickly leer. "You swear this?" "I swear it," came in hoarse echo from her flat mouth. "But don't give me away to him," she whined; "I am afraid of him. Let me have some money for my night's lodging." He broke from her with an oath and rushed to the corner of the street, but Dorian Gray had disappeared. When he looked back, the woman had vanished also. CHAPTER 17 A week later Dorian Gray was sitting in the conservatory at Selby Royal, talking to the pretty Duchess of Monmouth, who with her husband, a jaded-looking man of sixty, was amongst his guests. It was tea-time, and the mellow light of the huge, lace-covered lamp that stood on the table lit up the delicate china and hammered silver of the service at which the duchess was presiding. Her white hands were moving daintily among the cups, and her full red lips were smiling at something that Dorian had whispered to her. Lord Henry was lying back in a silk-draped wicker chair, looking at them. On a peach-coloured divan sat Lady Narborough, pretending to listen to the duke's description of the last Brazilian beetle that he had added to his collection. Three young men in elaborate smoking-suits were handing tea-cakes to some of the women. The house-party consisted of twelve people, and there were more expected to arrive on the next day. "What are you two talking about?" said Lord Henry, strolling over to the table and putting his cup down. "I hope Dorian has told you about my plan for rechristening everything, Gladys. It is a delightful idea." "But I don't want to be rechristened, Harry," rejoined the duchess, looking up at him with her wonderful eyes. "I am quite satisfied with my own name, and I am sure Mr. Gray should be satisfied with his." "My dear Gladys, I would not alter either name for the world. They are both perfect. I was thinking chiefly of flowers. Yesterday I cut an orchid, for my button-hole. It was a marvellous spotted thing, as effective as the seven deadly sins. In a thoughtless moment I asked one of the gardeners what it was called. He told me it was a fine specimen of _Robinsoniana_, or something dreadful of that kind. It is a sad truth, but we have lost the faculty of giving lovely names to things. Names are everything. I never quarrel with actions. My one quarrel is with words. That is the reason I hate vulgar realism in literature. The man who could call a spade a spade should be compelled to use one. It is the only thing he is fit for." "Then what should we call you, Harry?" she asked. "His name is Prince Paradox," said Dorian. "I recognize him in a flash," exclaimed the duchess. "I won't hear of it," laughed Lord Henry, sinking into a chair. "From a label there is no escape! I refuse the title." "Royalties may not abdicate," fell as a warning from pretty lips. "You wish me to defend my throne, then?" "Yes." "I give the truths of to-morrow." "I prefer the mistakes of to-day," she answered. "You disarm me, Gladys," he cried, catching the wilfulness of her mood. "Of your shield, Harry, not of your spear." "I never tilt against beauty," he said, with a wave of his hand. "That is your error, Harry, believe me. You value beauty far too much." "How can you say that? I admit that I think that it is better to be beautiful than to be good. But on the other hand, no one is more ready than I am to acknowledge that it is better to be good than to be ugly." "Ugliness is one of the seven deadly sins, then?" cried the duchess. "What becomes of your simile about the orchid?" "Ugliness is one of the seven deadly virtues, Gladys. You, as a good Tory, must not underrate them. Beer, the Bible, and the seven deadly virtues have made our England what she is." "You don't like your country, then?" she asked. "I live in it." "That you may censure it the better." "Would you have me take the verdict of Europe on it?" he inquired. "What do they say of us?" "That Tartuffe has emigrated to England and opened a shop." "Is that yours, Harry?" "I give it to you." "I could not use it. It is too true." "You need not be afraid. Our countrymen never recognize a description." "They are practical." "They are more cunning than practical. When they make up their ledger, they balance stupidity by wealth, and vice by hypocrisy." "Still, we have done great things." "Great things have been thrust on us, Gladys." "We have carried their burden." "Only as far as the Stock Exchange." She shook her head. "I believe in the race," she cried. "It represents the survival of the pushing." "It has development." "Decay fascinates me more." "What of art?" she asked. "It is a malady." "Love?" "An illusion." "Religion?" "The fashionable substitute for belief." "You are a sceptic." "Never! Scepticism is the beginning of faith." "What are you?" "To define is to limit." "Give me a clue." "Threads snap. You would lose your way in the labyrinth." "You bewilder me. Let us talk of some one else." "Our host is a delightful topic. Years ago he was christened Prince Charming." "Ah! don't remind me of that," cried Dorian Gray. "Our host is rather horrid this evening," answered the duchess, colouring. "I believe he thinks that Monmouth married me on purely scientific principles as the best specimen he could find of a modern butterfly." "Well, I hope he won't stick pins into you, Duchess," laughed Dorian. "Oh! my maid does that already, Mr. Gray, when she is annoyed with me." "And what does she get annoyed with you about, Duchess?" "For the most trivial things, Mr. Gray, I assure you. Usually because I come in at ten minutes to nine and tell her that I must be dressed by half-past eight." "How unreasonable of her! You should give her warning." "I daren't, Mr. Gray. Why, she invents hats for me. You remember the one I wore at Lady Hilstone's garden-party? You don't, but it is nice of you to pretend that you do. Well, she made it out of nothing. All good hats are made out of nothing." "Like all good reputations, Gladys," interrupted Lord Henry. "Every effect that one produces gives one an enemy. To be popular one must be a mediocrity." "Not with women," said the duchess, shaking her head; "and women rule the world. I assure you we can't bear mediocrities. We women, as some one says, love with our ears, just as you men love with your eyes, if you ever love at all." "It seems to me that we never do anything else," murmured Dorian. "Ah! then, you never really love, Mr. Gray," answered the duchess with mock sadness. "My dear Gladys!" cried Lord Henry. "How can you say that? Romance lives by repetition, and repetition converts an appetite into an art. Besides, each time that one loves is the only time one has ever loved. Difference of object does not alter singleness of passion. It merely intensifies it. We can have in life but one great experience at best, and the secret of life is to reproduce that experience as often as possible." "Even when one has been wounded by it, Harry?" asked the duchess after a pause. "Especially when one has been wounded by it," answered Lord Henry. The duchess turned and looked at Dorian Gray with a curious expression in her eyes. "What do you say to that, Mr. Gray?" she inquired. Dorian hesitated for a moment. Then he threw his head back and laughed. "I always agree with Harry, Duchess." "Even when he is wrong?" "Harry is never wrong, Duchess." "And does his philosophy make you happy?" "I have never searched for happiness. Who wants happiness? I have searched for pleasure." "And found it, Mr. Gray?" "Often. Too often." The duchess sighed. "I am searching for peace," she said, "and if I don't go and dress, I shall have none this evening." "Let me get you some orchids, Duchess," cried Dorian, starting to his feet and walking down the conservatory. "You are flirting disgracefully with him," said Lord Henry to his cousin. "You had better take care. He is very fascinating." "If he were not, there would be no battle." "Greek meets Greek, then?" "I am on the side of the Trojans. They fought for a woman." "They were defeated." "There are worse things than capture," she answered. "You gallop with a loose rein." "Pace gives life," was the _riposte_. "I shall write it in my diary to-night." "What?" "That a burnt child loves the fire." "I am not even singed. My wings are untouched." "You use them for everything, except flight." "Courage has passed from men to women. It is a new experience for us." "You have a rival." "Who?" He laughed. "Lady Narborough," he whispered. "She perfectly adores him." "You fill me with apprehension. The appeal to antiquity is fatal to us who are romanticists." "Romanticists! You have all the methods of science." "Men have educated us." "But not explained you." "Describe us as a sex," was her challenge. "Sphinxes without secrets." She looked at him, smiling. "How long Mr. Gray is!" she said. "Let us go and help him. I have not yet told him the colour of my frock." "Ah! you must suit your frock to his flowers, Gladys." "That would be a premature surrender." "Romantic art begins with its climax." "I must keep an opportunity for retreat." "In the Parthian manner?" "They found safety in the desert. I could not do that." "Women are not always allowed a choice," he answered, but hardly had he finished the sentence before from the far end of the conservatory came a stifled groan, followed by the dull sound of a heavy fall. Everybody started up. The duchess stood motionless in horror. And with fear in his eyes, Lord Henry rushed through the flapping palms to find Dorian Gray lying face downwards on the tiled floor in a deathlike swoon. He was carried at once into the blue drawing-room and laid upon one of the sofas. After a short time, he came to himself and looked round with a dazed expression. "What has happened?" he asked. "Oh! I remember. Am I safe here, Harry?" He began to tremble. "My dear Dorian," answered Lord Henry, "you merely fainted. That was all. You must have overtired yourself. You had better not come down to dinner. I will take your place." "No, I will come down," he said, struggling to his feet. "I would rather come down. I must not be alone." He went to his room and dressed. There was a wild recklessness of gaiety in his manner as he sat at table, but now and then a thrill of terror ran through him when he remembered that, pressed against the window of the conservatory, like a white handkerchief, he had seen the face of James Vane watching him. CHAPTER 18 The next day he did not leave the house, and, indeed, spent most of the time in his own room, sick with a wild terror of dying, and yet indifferent to life itself. The consciousness of being hunted, snared, tracked down, had begun to dominate him. If the tapestry did but tremble in the wind, he shook. The dead leaves that were blown against the leaded panes seemed to him like his own wasted resolutions and wild regrets. When he closed his eyes, he saw again the sailor's face peering through the mist-stained glass, and horror seemed once more to lay its hand upon his heart. But perhaps it had been only his fancy that had called vengeance out of the night and set the hideous shapes of punishment before him. Actual life was chaos, but there was something terribly logical in the imagination. It was the imagination that set remorse to dog the feet of sin. It was the imagination that made each crime bear its misshapen brood. In the common world of fact the wicked were not punished, nor the good rewarded. Success was given to the strong, failure thrust upon the weak. That was all. Besides, had any stranger been prowling round the house, he would have been seen by the servants or the keepers. Had any foot-marks been found on the flower-beds, the gardeners would have reported it. Yes, it had been merely fancy. Sibyl Vane's brother had not come back to kill him. He had sailed away in his ship to founder in some winter sea. From him, at any rate, he was safe. Why, the man did not know who he was, could not know who he was. The mask of youth had saved him. And yet if it had been merely an illusion, how terrible it was to think that conscience could raise such fearful phantoms, and give them visible form, and make them move before one! What sort of life would his be if, day and night, shadows of his crime were to peer at him from silent corners, to mock him from secret places, to whisper in his ear as he sat at the feast, to wake him with icy fingers as he lay asleep! As the thought crept through his brain, he grew pale with terror, and the air seemed to him to have become suddenly colder. Oh! in what a wild hour of madness he had killed his friend! How ghastly the mere memory of the scene! He saw it all again. Each hideous detail came back to him with added horror. Out of the black cave of time, terrible and swathed in scarlet, rose the image of his sin. When Lord Henry came in at six o'clock, he found him crying as one whose heart will break. It was not till the third day that he ventured to go out. There was something in the clear, pine-scented air of that winter morning that seemed to bring him back his joyousness and his ardour for life. But it was not merely the physical conditions of environment that had caused the change. His own nature had revolted against the excess of anguish that had sought to maim and mar the perfection of its calm. With subtle and finely wrought temperaments it is always so. Their strong passions must either bruise or bend. They either slay the man, or themselves die. Shallow sorrows and shallow loves live on. The loves and sorrows that are great are destroyed by their own plenitude. Besides, he had convinced himself that he had been the victim of a terror-stricken imagination, and looked back now on his fears with something of pity and not a little of contempt. After breakfast, he walked with the duchess for an hour in the garden and then drove across the park to join the shooting-party. The crisp frost lay like salt upon the grass. The sky was an inverted cup of blue metal. A thin film of ice bordered the flat, reed-grown lake. At the corner of the pine-wood he caught sight of Sir Geoffrey Clouston, the duchess's brother, jerking two spent cartridges out of his gun. He jumped from the cart, and having told the groom to take the mare home, made his way towards his guest through the withered bracken and rough undergrowth. "Have you had good sport, Geoffrey?" he asked. "Not very good, Dorian. I think most of the birds have gone to the open. I dare say it will be better after lunch, when we get to new ground." Dorian strolled along by his side. The keen aromatic air, the brown and red lights that glimmered in the wood, the hoarse cries of the beaters ringing out from time to time, and the sharp snaps of the guns that followed, fascinated him and filled him with a sense of delightful freedom. He was dominated by the carelessness of happiness, by the high indifference of joy. Suddenly from a lumpy tussock of old grass some twenty yards in front of them, with black-tipped ears erect and long hinder limbs throwing it forward, started a hare. It bolted for a thicket of alders. Sir Geoffrey put his gun to his shoulder, but there was something in the animal's grace of movement that strangely charmed Dorian Gray, and he cried out at once, "Don't shoot it, Geoffrey. Let it live." "What nonsense, Dorian!" laughed his companion, and as the hare bounded into the thicket, he fired. There were two cries heard, the cry of a hare in pain, which is dreadful, the cry of a man in agony, which is worse. "Good heavens! I have hit a beater!" exclaimed Sir Geoffrey. "What an ass the man was to get in front of the guns! Stop shooting there!" he called out at the top of his voice. "A man is hurt." The head-keeper came running up with a stick in his hand. "Where, sir? Where is he?" he shouted. At the same time, the firing ceased along the line. "Here," answered Sir Geoffrey angrily, hurrying towards the thicket. "Why on earth don't you keep your men back? Spoiled my shooting for the day." Dorian watched them as they plunged into the alder-clump, brushing the lithe swinging branches aside. In a few moments they emerged, dragging a body after them into the sunlight. He turned away in horror. It seemed to him that misfortune followed wherever he went. He heard Sir Geoffrey ask if the man was really dead, and the affirmative answer of the keeper. The wood seemed to him to have become suddenly alive with faces. There was the trampling of myriad feet and the low buzz of voices. A great copper-breasted pheasant came beating through the boughs overhead. After a few moments--that were to him, in his perturbed state, like endless hours of pain--he felt a hand laid on his shoulder. He started and looked round. "Dorian," said Lord Henry, "I had better tell them that the shooting is stopped for to-day. It would not look well to go on." "I wish it were stopped for ever, Harry," he answered bitterly. "The whole thing is hideous and cruel. Is the man ...?" He could not finish the sentence. "I am afraid so," rejoined Lord Henry. "He got the whole charge of shot in his chest. He must have died almost instantaneously. Come; let us go home." They walked side by side in the direction of the avenue for nearly fifty yards without speaking. Then Dorian looked at Lord Henry and said, with a heavy sigh, "It is a bad omen, Harry, a very bad omen." "What is?" asked Lord Henry. "Oh! this accident, I suppose. My dear fellow, it can't be helped. It was the man's own fault. Why did he get in front of the guns? Besides, it is nothing to us. It is rather awkward for Geoffrey, of course. It does not do to pepper beaters. It makes people think that one is a wild shot. And Geoffrey is not; he shoots very straight. But there is no use talking about the matter." Dorian shook his head. "It is a bad omen, Harry. I feel as if something horrible were going to happen to some of us. To myself, perhaps," he added, passing his hand over his eyes, with a gesture of pain. The elder man laughed. "The only horrible thing in the world is _ennui_, Dorian. That is the one sin for which there is no forgiveness. But we are not likely to suffer from it unless these fellows keep chattering about this thing at dinner. I must tell them that the subject is to be tabooed. As for omens, there is no such thing as an omen. Destiny does not send us heralds. She is too wise or too cruel for that. Besides, what on earth could happen to you, Dorian? You have everything in the world that a man can want. There is no one who would not be delighted to change places with you." "There is no one with whom I would not change places, Harry. Don't laugh like that. I am telling you the truth. The wretched peasant who has just died is better off than I am. I have no terror of death. It is the coming of death that terrifies me. Its monstrous wings seem to wheel in the leaden air around me. Good heavens! don't you see a man moving behind the trees there, watching me, waiting for me?" Lord Henry looked in the direction in which the trembling gloved hand was pointing. "Yes," he said, smiling, "I see the gardener waiting for you. I suppose he wants to ask you what flowers you wish to have on the table to-night. How absurdly nervous you are, my dear fellow! You must come and see my doctor, when we get back to town." Dorian heaved a sigh of relief as he saw the gardener approaching. The man touched his hat, glanced for a moment at Lord Henry in a hesitating manner, and then produced a letter, which he handed to his master. "Her Grace told me to wait for an answer," he murmured. Dorian put the letter into his pocket. "Tell her Grace that I am coming in," he said, coldly. The man turned round and went rapidly in the direction of the house. "How fond women are of doing dangerous things!" laughed Lord Henry. "It is one of the qualities in them that I admire most. A woman will flirt with anybody in the world as long as other people are looking on." "How fond you are of saying dangerous things, Harry! In the present instance, you are quite astray. I like the duchess very much, but I don't love her." "And the duchess loves you very much, but she likes you less, so you are excellently matched." "You are talking scandal, Harry, and there is never any basis for scandal." "The basis of every scandal is an immoral certainty," said Lord Henry, lighting a cigarette. "You would sacrifice anybody, Harry, for the sake of an epigram." "The world goes to the altar of its own accord," was the answer. "I wish I could love," cried Dorian Gray with a deep note of pathos in his voice. "But I seem to have lost the passion and forgotten the desire. I am too much concentrated on myself. My own personality has become a burden to me. I want to escape, to go away, to forget. It was silly of me to come down here at all. I think I shall send a wire to Harvey to have the yacht got ready. On a yacht one is safe." "Safe from what, Dorian? You are in some trouble. Why not tell me what it is? You know I would help you." "I can't tell you, Harry," he answered sadly. "And I dare say it is only a fancy of mine. This unfortunate accident has upset me. I have a horrible presentiment that something of the kind may happen to me." "What nonsense!" "I hope it is, but I can't help feeling it. Ah! here is the duchess, looking like Artemis in a tailor-made gown. You see we have come back, Duchess." "I have heard all about it, Mr. Gray," she answered. "Poor Geoffrey is terribly upset. And it seems that you asked him not to shoot the hare. How curious!" "Yes, it was very curious. I don't know what made me say it. Some whim, I suppose. It looked the loveliest of little live things. But I am sorry they told you about the man. It is a hideous subject." "It is an annoying subject," broke in Lord Henry. "It has no psychological value at all. Now if Geoffrey had done the thing on purpose, how interesting he would be! I should like to know some one who had committed a real murder." "How horrid of you, Harry!" cried the duchess. "Isn't it, Mr. Gray? Harry, Mr. Gray is ill again. He is going to faint." Dorian drew himself up with an effort and smiled. "It is nothing, Duchess," he murmured; "my nerves are dreadfully out of order. That is all. I am afraid I walked too far this morning. I didn't hear what Harry said. Was it very bad? You must tell me some other time. I think I must go and lie down. You will excuse me, won't you?" They had reached the great flight of steps that led from the conservatory on to the terrace. As the glass door closed behind Dorian, Lord Henry turned and looked at the duchess with his slumberous eyes. "Are you very much in love with him?" he asked. She did not answer for some time, but stood gazing at the landscape. "I wish I knew," she said at last. He shook his head. "Knowledge would be fatal. It is the uncertainty that charms one. A mist makes things wonderful." "One may lose one's way." "All ways end at the same point, my dear Gladys." "What is that?" "Disillusion." "It was my _debut_ in life," she sighed. "It came to you crowned." "I am tired of strawberry leaves." "They become you." "Only in public." "You would miss them," said Lord Henry. "I will not part with a petal." "Monmouth has ears." "Old age is dull of hearing." "Has he never been jealous?" "I wish he had been." He glanced about as if in search of something. "What are you looking for?" she inquired. "The button from your foil," he answered. "You have dropped it." She laughed. "I have still the mask." "It makes your eyes lovelier," was his reply. She laughed again. Her teeth showed like white seeds in a scarlet fruit. Upstairs, in his own room, Dorian Gray was lying on a sofa, with terror in every tingling fibre of his body. Life had suddenly become too hideous a burden for him to bear. The dreadful death of the unlucky beater, shot in the thicket like a wild animal, had seemed to him to pre-figure death for himself also. He had nearly swooned at what Lord Henry had said in a chance mood of cynical jesting. At five o'clock he rang his bell for his servant and gave him orders to pack his things for the night-express to town, and to have the brougham at the door by eight-thirty. He was determined not to sleep another night at Selby Royal. It was an ill-omened place. Death walked there in the sunlight. The grass of the forest had been spotted with blood. Then he wrote a note to Lord Henry, telling him that he was going up to town to consult his doctor and asking him to entertain his guests in his absence. As he was putting it into the envelope, a knock came to the door, and his valet informed him that the head-keeper wished to see him. He frowned and bit his lip. "Send him in," he muttered, after some moments' hesitation. As soon as the man entered, Dorian pulled his chequebook out of a drawer and spread it out before him. "I suppose you have come about the unfortunate accident of this morning, Thornton?" he said, taking up a pen. "Yes, sir," answered the gamekeeper. "Was the poor fellow married? Had he any people dependent on him?" asked Dorian, looking bored. "If so, I should not like them to be left in want, and will send them any sum of money you may think necessary." "We don't know who he is, sir. That is what I took the liberty of coming to you about." "Don't know who he is?" said Dorian, listlessly. "What do you mean? Wasn't he one of your men?" "No, sir. Never saw him before. Seems like a sailor, sir." The pen dropped from Dorian Gray's hand, and he felt as if his heart had suddenly stopped beating. "A sailor?" he cried out. "Did you say a sailor?" "Yes, sir. He looks as if he had been a sort of sailor; tattooed on both arms, and that kind of thing." "Was there anything found on him?" said Dorian, leaning forward and looking at the man with startled eyes. "Anything that would tell his name?" "Some money, sir--not much, and a six-shooter. There was no name of any kind. A decent-looking man, sir, but rough-like. A sort of sailor we think." Dorian started to his feet. A terrible hope fluttered past him. He clutched at it madly. "Where is the body?" he exclaimed. "Quick! I must see it at once." "It is in an empty stable in the Home Farm, sir. The folk don't like to have that sort of thing in their houses. They say a corpse brings bad luck." "The Home Farm! Go there at once and meet me. Tell one of the grooms to bring my horse round. No. Never mind. I'll go to the stables myself. It will save time." In less than a quarter of an hour, Dorian Gray was galloping down the long avenue as hard as he could go. The trees seemed to sweep past him in spectral procession, and wild shadows to fling themselves across his path. Once the mare swerved at a white gate-post and nearly threw him. He lashed her across the neck with his crop. She cleft the dusky air like an arrow. The stones flew from her hoofs. At last he reached the Home Farm. Two men were loitering in the yard. He leaped from the saddle and threw the reins to one of them. In the farthest stable a light was glimmering. Something seemed to tell him that the body was there, and he hurried to the door and put his hand upon the latch. There he paused for a moment, feeling that he was on the brink of a discovery that would either make or mar his life. Then he thrust the door open and entered. On a heap of sacking in the far corner was lying the dead body of a man dressed in a coarse shirt and a pair of blue trousers. A spotted handkerchief had been placed over the face. A coarse candle, stuck in a bottle, sputtered beside it. Dorian Gray shuddered. He felt that his could not be the hand to take the handkerchief away, and called out to one of the farm-servants to come to him. "Take that thing off the face. I wish to see it," he said, clutching at the door-post for support. When the farm-servant had done so, he stepped forward. A cry of joy broke from his lips. The man who had been shot in the thicket was James Vane. He stood there for some minutes looking at the dead body. As he rode home, his eyes were full of tears, for he knew he was safe. CHAPTER 19 "There is no use your telling me that you are going to be good," cried Lord Henry, dipping his white fingers into a red copper bowl filled with rose-water. "You are quite perfect. Pray, don't change." Dorian Gray shook his head. "No, Harry, I have done too many dreadful things in my life. I am not going to do any more. I began my good actions yesterday." "Where were you yesterday?" "In the country, Harry. I was staying at a little inn by myself." "My dear boy," said Lord Henry, smiling, "anybody can be good in the country. There are no temptations there. That is the reason why people who live out of town are so absolutely uncivilized. Civilization is not by any means an easy thing to attain to. There are only two ways by which man can reach it. One is by being cultured, the other by being corrupt. Country people have no opportunity of being either, so they stagnate." "Culture and corruption," echoed Dorian. "I have known something of both. It seems terrible to me now that they should ever be found together. For I have a new ideal, Harry. I am going to alter. I think I have altered." "You have not yet told me what your good action was. Or did you say you had done more than one?" asked his companion as he spilled into his plate a little crimson pyramid of seeded strawberries and, through a perforated, shell-shaped spoon, snowed white sugar upon them. "I can tell you, Harry. It is not a story I could tell to any one else. I spared somebody. It sounds vain, but you understand what I mean. She was quite beautiful and wonderfully like Sibyl Vane. I think it was that which first attracted me to her. You remember Sibyl, don't you? How long ago that seems! Well, Hetty was not one of our own class, of course. She was simply a girl in a village. But I really loved her. I am quite sure that I loved her. All during this wonderful May that we have been having, I used to run down and see her two or three times a week. Yesterday she met me in a little orchard. The apple-blossoms kept tumbling down on her hair, and she was laughing. We were to have gone away together this morning at dawn. Suddenly I determined to leave her as flowerlike as I had found her." "I should think the novelty of the emotion must have given you a thrill of real pleasure, Dorian," interrupted Lord Henry. "But I can finish your idyll for you. You gave her good advice and broke her heart. That was the beginning of your reformation." "Harry, you are horrible! You mustn't say these dreadful things. Hetty's heart is not broken. Of course, she cried and all that. But there is no disgrace upon her. She can live, like Perdita, in her garden of mint and marigold." "And weep over a faithless Florizel," said Lord Henry, laughing, as he leaned back in his chair. "My dear Dorian, you have the most curiously boyish moods. Do you think this girl will ever be really content now with any one of her own rank? I suppose she will be married some day to a rough carter or a grinning ploughman. Well, the fact of having met you, and loved you, will teach her to despise her husband, and she will be wretched. From a moral point of view, I cannot say that I think much of your great renunciation. Even as a beginning, it is poor. Besides, how do you know that Hetty isn't floating at the present moment in some starlit mill-pond, with lovely water-lilies round her, like Ophelia?" "I can't bear this, Harry! You mock at everything, and then suggest the most serious tragedies. I am sorry I told you now. I don't care what you say to me. I know I was right in acting as I did. Poor Hetty! As I rode past the farm this morning, I saw her white face at the window, like a spray of jasmine. Don't let us talk about it any more, and don't try to persuade me that the first good action I have done for years, the first little bit of self-sacrifice I have ever known, is really a sort of sin. I want to be better. I am going to be better. Tell me something about yourself. What is going on in town? I have not been to the club for days." "The people are still discussing poor Basil's disappearance." "I should have thought they had got tired of that by this time," said Dorian, pouring himself out some wine and frowning slightly. "My dear boy, they have only been talking about it for six weeks, and the British public are really not equal to the mental strain of having more than one topic every three months. They have been very fortunate lately, however. They have had my own divorce-case and Alan Campbell's suicide. Now they have got the mysterious disappearance of an artist. Scotland Yard still insists that the man in the grey ulster who left for Paris by the midnight train on the ninth of November was poor Basil, and the French police declare that Basil never arrived in Paris at all. I suppose in about a fortnight we shall be told that he has been seen in San Francisco. It is an odd thing, but every one who disappears is said to be seen at San Francisco. It must be a delightful city, and possess all the attractions of the next world." "What do you think has happened to Basil?" asked Dorian, holding up his Burgundy against the light and wondering how it was that he could discuss the matter so calmly. "I have not the slightest idea. If Basil chooses to hide himself, it is no business of mine. If he is dead, I don't want to think about him. Death is the only thing that ever terrifies me. I hate it." "Why?" said the younger man wearily. "Because," said Lord Henry, passing beneath his nostrils the gilt trellis of an open vinaigrette box, "one can survive everything nowadays except that. Death and vulgarity are the only two facts in the nineteenth century that one cannot explain away. Let us have our coffee in the music-room, Dorian. You must play Chopin to me. The man with whom my wife ran away played Chopin exquisitely. Poor Victoria! I was very fond of her. The house is rather lonely without her. Of course, married life is merely a habit, a bad habit. But then one regrets the loss even of one's worst habits. Perhaps one regrets them the most. They are such an essential part of one's personality." Dorian said nothing, but rose from the table, and passing into the next room, sat down to the piano and let his fingers stray across the white and black ivory of the keys. After the coffee had been brought in, he stopped, and looking over at Lord Henry, said, "Harry, did it ever occur to you that Basil was murdered?" Lord Henry yawned. "Basil was very popular, and always wore a Waterbury watch. Why should he have been murdered? He was not clever enough to have enemies. Of course, he had a wonderful genius for painting. But a man can paint like Velasquez and yet be as dull as possible. Basil was really rather dull. He only interested me once, and that was when he told me, years ago, that he had a wild adoration for you and that you were the dominant motive of his art." "I was very fond of Basil," said Dorian with a note of sadness in his voice. "But don't people say that he was murdered?" "Oh, some of the papers do. It does not seem to me to be at all probable. I know there are dreadful places in Paris, but Basil was not the sort of man to have gone to them. He had no curiosity. It was his chief defect." "What would you say, Harry, if I told you that I had murdered Basil?" said the younger man. He watched him intently after he had spoken. "I would say, my dear fellow, that you were posing for a character that doesn't suit you. All crime is vulgar, just as all vulgarity is crime. It is not in you, Dorian, to commit a murder. I am sorry if I hurt your vanity by saying so, but I assure you it is true. Crime belongs exclusively to the lower orders. I don't blame them in the smallest degree. I should fancy that crime was to them what art is to us, simply a method of procuring extraordinary sensations." "A method of procuring sensations? Do you think, then, that a man who has once committed a murder could possibly do the same crime again? Don't tell me that." "Oh! anything becomes a pleasure if one does it too often," cried Lord Henry, laughing. "That is one of the most important secrets of life. I should fancy, however, that murder is always a mistake. One should never do anything that one cannot talk about after dinner. But let us pass from poor Basil. I wish I could believe that he had come to such a really romantic end as you suggest, but I can't. I dare say he fell into the Seine off an omnibus and that the conductor hushed up the scandal. Yes: I should fancy that was his end. I see him lying now on his back under those dull-green waters, with the heavy barges floating over him and long weeds catching in his hair. Do you know, I don't think he would have done much more good work. During the last ten years his painting had gone off very much." Dorian heaved a sigh, and Lord Henry strolled across the room and began to stroke the head of a curious Java parrot, a large, grey-plumaged bird with pink crest and tail, that was balancing itself upon a bamboo perch. As his pointed fingers touched it, it dropped the white scurf of crinkled lids over black, glasslike eyes and began to sway backwards and forwards. "Yes," he continued, turning round and taking his handkerchief out of his pocket; "his painting had quite gone off. It seemed to me to have lost something. It had lost an ideal. When you and he ceased to be great friends, he ceased to be a great artist. What was it separated you? I suppose he bored you. If so, he never forgave you. It's a habit bores have. By the way, what has become of that wonderful portrait he did of you? I don't think I have ever seen it since he finished it. Oh! I remember your telling me years ago that you had sent it down to Selby, and that it had got mislaid or stolen on the way. You never got it back? What a pity! it was really a masterpiece. I remember I wanted to buy it. I wish I had now. It belonged to Basil's best period. Since then, his work was that curious mixture of bad painting and good intentions that always entitles a man to be called a representative British artist. Did you advertise for it? You should." "I forget," said Dorian. "I suppose I did. But I never really liked it. I am sorry I sat for it. The memory of the thing is hateful to me. Why do you talk of it? It used to remind me of those curious lines in some play--Hamlet, I think--how do they run?-- "Like the painting of a sorrow, A face without a heart." Yes: that is what it was like." Lord Henry laughed. "If a man treats life artistically, his brain is his heart," he answered, sinking into an arm-chair. Dorian Gray shook his head and struck some soft chords on the piano. "'Like the painting of a sorrow,'" he repeated, "'a face without a heart.'" The elder man lay back and looked at him with half-closed eyes. "By the way, Dorian," he said after a pause, "'what does it profit a man if he gain the whole world and lose--how does the quotation run?--his own soul'?" The music jarred, and Dorian Gray started and stared at his friend. "Why do you ask me that, Harry?" "My dear fellow," said Lord Henry, elevating his eyebrows in surprise, "I asked you because I thought you might be able to give me an answer. That is all. I was going through the park last Sunday, and close by the Marble Arch there stood a little crowd of shabby-looking people listening to some vulgar street-preacher. As I passed by, I heard the man yelling out that question to his audience. It struck me as being rather dramatic. London is very rich in curious effects of that kind. A wet Sunday, an uncouth Christian in a mackintosh, a ring of sickly white faces under a broken roof of dripping umbrellas, and a wonderful phrase flung into the air by shrill hysterical lips--it was really very good in its way, quite a suggestion. I thought of telling the prophet that art had a soul, but that man had not. I am afraid, however, he would not have understood me." "Don't, Harry. The soul is a terrible reality. It can be bought, and sold, and bartered away. It can be poisoned, or made perfect. There is a soul in each one of us. I know it." "Do you feel quite sure of that, Dorian?" "Quite sure." "Ah! then it must be an illusion. The things one feels absolutely certain about are never true. That is the fatality of faith, and the lesson of romance. How grave you are! Don't be so serious. What have you or I to do with the superstitions of our age? No: we have given up our belief in the soul. Play me something. Play me a nocturne, Dorian, and, as you play, tell me, in a low voice, how you have kept your youth. You must have some secret. I am only ten years older than you are, and I am wrinkled, and worn, and yellow. You are really wonderful, Dorian. You have never looked more charming than you do to-night. You remind me of the day I saw you first. You were rather cheeky, very shy, and absolutely extraordinary. You have changed, of course, but not in appearance. I wish you would tell me your secret. To get back my youth I would do anything in the world, except take exercise, get up early, or be respectable. Youth! There is nothing like it. It's absurd to talk of the ignorance of youth. The only people to whose opinions I listen now with any respect are people much younger than myself. They seem in front of me. Life has revealed to them her latest wonder. As for the aged, I always contradict the aged. I do it on principle. If you ask them their opinion on something that happened yesterday, they solemnly give you the opinions current in 1820, when people wore high stocks, believed in everything, and knew absolutely nothing. How lovely that thing you are playing is! I wonder, did Chopin write it at Majorca, with the sea weeping round the villa and the salt spray dashing against the panes? It is marvellously romantic. What a blessing it is that there is one art left to us that is not imitative! Don't stop. I want music to-night. It seems to me that you are the young Apollo and that I am Marsyas listening to you. I have sorrows, Dorian, of my own, that even you know nothing of. The tragedy of old age is not that one is old, but that one is young. I am amazed sometimes at my own sincerity. Ah, Dorian, how happy you are! What an exquisite life you have had! You have drunk deeply of everything. You have crushed the grapes against your palate. Nothing has been hidden from you. And it has all been to you no more than the sound of music. It has not marred you. You are still the same." "I am not the same, Harry." "Yes, you are the same. I wonder what the rest of your life will be. Don't spoil it by renunciations. At present you are a perfect type. Don't make yourself incomplete. You are quite flawless now. You need not shake your head: you know you are. Besides, Dorian, don't deceive yourself. Life is not governed by will or intention. Life is a question of nerves, and fibres, and slowly built-up cells in which thought hides itself and passion has its dreams. You may fancy yourself safe and think yourself strong. But a chance tone of colour in a room or a morning sky, a particular perfume that you had once loved and that brings subtle memories with it, a line from a forgotten poem that you had come across again, a cadence from a piece of music that you had ceased to play--I tell you, Dorian, that it is on things like these that our lives depend. Browning writes about that somewhere; but our own senses will imagine them for us. There are moments when the odour of _lilas blanc_ passes suddenly across me, and I have to live the strangest month of my life over again. I wish I could change places with you, Dorian. The world has cried out against us both, but it has always worshipped you. It always will worship you. You are the type of what the age is searching for, and what it is afraid it has found. I am so glad that you have never done anything, never carved a statue, or painted a picture, or produced anything outside of yourself! Life has been your art. You have set yourself to music. Your days are your sonnets." Dorian rose up from the piano and passed his hand through his hair. "Yes, life has been exquisite," he murmured, "but I am not going to have the same life, Harry. And you must not say these extravagant things to me. You don't know everything about me. I think that if you did, even you would turn from me. You laugh. Don't laugh." "Why have you stopped playing, Dorian? Go back and give me the nocturne over again. Look at that great, honey-coloured moon that hangs in the dusky air. She is waiting for you to charm her, and if you play she will come closer to the earth. You won't? Let us go to the club, then. It has been a charming evening, and we must end it charmingly. There is some one at White's who wants immensely to know you--young Lord Poole, Bournemouth's eldest son. He has already copied your neckties, and has begged me to introduce him to you. He is quite delightful and rather reminds me of you." "I hope not," said Dorian with a sad look in his eyes. "But I am tired to-night, Harry. I shan't go to the club. It is nearly eleven, and I want to go to bed early." "Do stay. You have never played so well as to-night. There was something in your touch that was wonderful. It had more expression than I had ever heard from it before." "It is because I am going to be good," he answered, smiling. "I am a little changed already." "You cannot change to me, Dorian," said Lord Henry. "You and I will always be friends." "Yet you poisoned me with a book once. I should not forgive that. Harry, promise me that you will never lend that book to any one. It does harm." "My dear boy, you are really beginning to moralize. You will soon be going about like the converted, and the revivalist, warning people against all the sins of which you have grown tired. You are much too delightful to do that. Besides, it is no use. You and I are what we are, and will be what we will be. As for being poisoned by a book, there is no such thing as that. Art has no influence upon action. It annihilates the desire to act. It is superbly sterile. The books that the world calls immoral are books that show the world its own shame. That is all. But we won't discuss literature. Come round to-morrow. I am going to ride at eleven. We might go together, and I will take you to lunch afterwards with Lady Branksome. She is a charming woman, and wants to consult you about some tapestries she is thinking of buying. Mind you come. Or shall we lunch with our little duchess? She says she never sees you now. Perhaps you are tired of Gladys? I thought you would be. Her clever tongue gets on one's nerves. Well, in any case, be here at eleven." "Must I really come, Harry?" "Certainly. The park is quite lovely now. I don't think there have been such lilacs since the year I met you." "Very well. I shall be here at eleven," said Dorian. "Good night, Harry." As he reached the door, he hesitated for a moment, as if he had something more to say. Then he sighed and went out. CHAPTER 20 It was a lovely night, so warm that he threw his coat over his arm and did not even put his silk scarf round his throat. As he strolled home, smoking his cigarette, two young men in evening dress passed him. He heard one of them whisper to the other, "That is Dorian Gray." He remembered how pleased he used to be when he was pointed out, or stared at, or talked about. He was tired of hearing his own name now. Half the charm of the little village where he had been so often lately was that no one knew who he was. He had often told the girl whom he had lured to love him that he was poor, and she had believed him. He had told her once that he was wicked, and she had laughed at him and answered that wicked people were always very old and very ugly. What a laugh she had!--just like a thrush singing. And how pretty she had been in her cotton dresses and her large hats! She knew nothing, but she had everything that he had lost. When he reached home, he found his servant waiting up for him. He sent him to bed, and threw himself down on the sofa in the library, and began to think over some of the things that Lord Henry had said to him. Was it really true that one could never change? He felt a wild longing for the unstained purity of his boyhood--his rose-white boyhood, as Lord Henry had once called it. He knew that he had tarnished himself, filled his mind with corruption and given horror to his fancy; that he had been an evil influence to others, and had experienced a terrible joy in being so; and that of the lives that had crossed his own, it had been the fairest and the most full of promise that he had brought to shame. But was it all irretrievable? Was there no hope for him? Ah! in what a monstrous moment of pride and passion he had prayed that the portrait should bear the burden of his days, and he keep the unsullied splendour of eternal youth! All his failure had been due to that. Better for him that each sin of his life had brought its sure swift penalty along with it. There was purification in punishment. Not "Forgive us our sins" but "Smite us for our iniquities" should be the prayer of man to a most just God. The curiously carved mirror that Lord Henry had given to him, so many years ago now, was standing on the table, and the white-limbed Cupids laughed round it as of old. He took it up, as he had done on that night of horror when he had first noted the change in the fatal picture, and with wild, tear-dimmed eyes looked into its polished shield. Once, some one who had terribly loved him had written to him a mad letter, ending with these idolatrous words: "The world is changed because you are made of ivory and gold. The curves of your lips rewrite history." The phrases came back to his memory, and he repeated them over and over to himself. Then he loathed his own beauty, and flinging the mirror on the floor, crushed it into silver splinters beneath his heel. It was his beauty that had ruined him, his beauty and the youth that he had prayed for. But for those two things, his life might have been free from stain. His beauty had been to him but a mask, his youth but a mockery. What was youth at best? A green, an unripe time, a time of shallow moods, and sickly thoughts. Why had he worn its livery? Youth had spoiled him. It was better not to think of the past. Nothing could alter that. It was of himself, and of his own future, that he had to think. James Vane was hidden in a nameless grave in Selby churchyard. Alan Campbell had shot himself one night in his laboratory, but had not revealed the secret that he had been forced to know. The excitement, such as it was, over Basil Hallward's disappearance would soon pass away. It was already waning. He was perfectly safe there. Nor, indeed, was it the death of Basil Hallward that weighed most upon his mind. It was the living death of his own soul that troubled him. Basil had painted the portrait that had marred his life. He could not forgive him that. It was the portrait that had done everything. Basil had said things to him that were unbearable, and that he had yet borne with patience. The murder had been simply the madness of a moment. As for Alan Campbell, his suicide had been his own act. He had chosen to do it. It was nothing to him. A new life! That was what he wanted. That was what he was waiting for. Surely he had begun it already. He had spared one innocent thing, at any rate. He would never again tempt innocence. He would be good. As he thought of Hetty Merton, he began to wonder if the portrait in the locked room had changed. Surely it was not still so horrible as it had been? Perhaps if his life became pure, he would be able to expel every sign of evil passion from the face. Perhaps the signs of evil had already gone away. He would go and look. He took the lamp from the table and crept upstairs. As he unbarred the door, a smile of joy flitted across his strangely young-looking face and lingered for a moment about his lips. Yes, he would be good, and the hideous thing that he had hidden away would no longer be a terror to him. He felt as if the load had been lifted from him already. He went in quietly, locking the door behind him, as was his custom, and dragged the purple hanging from the portrait. A cry of pain and indignation broke from him. He could see no change, save that in the eyes there was a look of cunning and in the mouth the curved wrinkle of the hypocrite. The thing was still loathsome--more loathsome, if possible, than before--and the scarlet dew that spotted the hand seemed brighter, and more like blood newly spilled. Then he trembled. Had it been merely vanity that had made him do his one good deed? Or the desire for a new sensation, as Lord Henry had hinted, with his mocking laugh? Or that passion to act a part that sometimes makes us do things finer than we are ourselves? Or, perhaps, all these? And why was the red stain larger than it had been? It seemed to have crept like a horrible disease over the wrinkled fingers. There was blood on the painted feet, as though the thing had dripped--blood even on the hand that had not held the knife. Confess? Did it mean that he was to confess? To give himself up and be put to death? He laughed. He felt that the idea was monstrous. Besides, even if he did confess, who would believe him? There was no trace of the murdered man anywhere. Everything belonging to him had been destroyed. He himself had burned what had been below-stairs. The world would simply say that he was mad. They would shut him up if he persisted in his story.... Yet it was his duty to confess, to suffer public shame, and to make public atonement. There was a God who called upon men to tell their sins to earth as well as to heaven. Nothing that he could do would cleanse him till he had told his own sin. His sin? He shrugged his shoulders. The death of Basil Hallward seemed very little to him. He was thinking of Hetty Merton. For it was an unjust mirror, this mirror of his soul that he was looking at. Vanity? Curiosity? Hypocrisy? Had there been nothing more in his renunciation than that? There had been something more. At least he thought so. But who could tell? ... No. There had been nothing more. Through vanity he had spared her. In hypocrisy he had worn the mask of goodness. For curiosity's sake he had tried the denial of self. He recognized that now. But this murder--was it to dog him all his life? Was he always to be burdened by his past? Was he really to confess? Never. There was only one bit of evidence left against him. The picture itself--that was evidence. He would destroy it. Why had he kept it so long? Once it had given him pleasure to watch it changing and growing old. Of late he had felt no such pleasure. It had kept him awake at night. When he had been away, he had been filled with terror lest other eyes should look upon it. It had brought melancholy across his passions. Its mere memory had marred many moments of joy. It had been like conscience to him. Yes, it had been conscience. He would destroy it. He looked round and saw the knife that had stabbed Basil Hallward. He had cleaned it many times, till there was no stain left upon it. It was bright, and glistened. As it had killed the painter, so it would kill the painter's work, and all that that meant. It would kill the past, and when that was dead, he would be free. It would kill this monstrous soul-life, and without its hideous warnings, he would be at peace. He seized the thing, and stabbed the picture with it. There was a cry heard, and a crash. The cry was so horrible in its agony that the frightened servants woke and crept out of their rooms. Two gentlemen, who were passing in the square below, stopped and looked up at the great house. They walked on till they met a policeman and brought him back. The man rang the bell several times, but there was no answer. Except for a light in one of the top windows, the house was all dark. After a time, he went away and stood in an adjoining portico and watched. "Whose house is that, Constable?" asked the elder of the two gentlemen. "Mr. Dorian Gray's, sir," answered the policeman. They looked at each other, as they walked away, and sneered. One of them was Sir Henry Ashton's uncle. Inside, in the servants' part of the house, the half-clad domestics were talking in low whispers to each other. Old Mrs. Leaf was crying and wringing her hands. Francis was as pale as death. After about a quarter of an hour, he got the coachman and one of the footmen and crept upstairs. They knocked, but there was no reply. They called out. Everything was still. Finally, after vainly trying to force the door, they got on the roof and dropped down on to the balcony. The windows yielded easily--their bolts were old. When they entered, they found hanging upon the wall a splendid portrait of their master as they had last seen him, in all the wonder of his exquisite youth and beauty. Lying on the floor was a dead man, in evening dress, with a knife in his heart. He was withered, wrinkled, and loathsome of visage. It was not till they had examined the rings that they recognized who it was. End of Project Gutenberg's The Picture of Dorian Gray, by Oscar Wilde *** END OF THIS PROJECT GUTENBERG EBOOK THE PICTURE OF DORIAN GRAY *** ***** This file should be named 174.txt or 174.zip ***** This and all associated files of various formats will be found in: http://www.gutenberg.org/1/7/174/ Produced by Judith Boss. HTML version by Al Haines. Updated editions will replace the previous one--the old editions will be renamed. Creating the works from public domain print editions means that no one owns a United States copyright in these works, so the Foundation (and you!) can copy and distribute it in the United States without permission and without paying copyright royalties. Special rules, set forth in the General Terms of Use part of this license, apply to copying and distributing Project Gutenberg-tm electronic works to protect the PROJECT GUTENBERG-tm concept and trademark. Project Gutenberg is a registered trademark, and may not be used if you charge for the eBooks, unless you receive specific permission. If you do not charge anything for copies of this eBook, complying with the rules is very easy. You may use this eBook for nearly any purpose such as creation of derivative works, reports, performances and research. They may be modified and printed and given away--you may do practically ANYTHING with public domain eBooks. Redistribution is subject to the trademark license, especially commercial redistribution. *** START: FULL LICENSE *** THE FULL PROJECT GUTENBERG LICENSE PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK To protect the Project Gutenberg-tm mission of promoting the free distribution of electronic works, by using or distributing this work (or any other work associated in any way with the phrase "Project Gutenberg"), you agree to comply with all the terms of the Full Project Gutenberg-tm License (available with this file or online at http://gutenberg.net/license). Section 1. General Terms of Use and Redistributing Project Gutenberg-tm electronic works 1.A. By reading or using any part of this Project Gutenberg-tm electronic work, you indicate that you have read, understand, agree to and accept all the terms of this license and intellectual property (trademark/copyright) agreement. If you do not agree to abide by all the terms of this agreement, you must cease using and return or destroy all copies of Project Gutenberg-tm electronic works in your possession. If you paid a fee for obtaining a copy of or access to a Project Gutenberg-tm electronic work and you do not agree to be bound by the terms of this agreement, you may obtain a refund from the person or entity to whom you paid the fee as set forth in paragraph 1.E.8. 1.B. "Project Gutenberg" is a registered trademark. It may only be used on or associated in any way with an electronic work by people who agree to be bound by the terms of this agreement. There are a few things that you can do with most Project Gutenberg-tm electronic works even without complying with the full terms of this agreement. See paragraph 1.C below. There are a lot of things you can do with Project Gutenberg-tm electronic works if you follow the terms of this agreement and help preserve free future access to Project Gutenberg-tm electronic works. See paragraph 1.E below. 1.C. The Project Gutenberg Literary Archive Foundation ("the Foundation" or PGLAF), owns a compilation copyright in the collection of Project Gutenberg-tm electronic works. Nearly all the individual works in the collection are in the public domain in the United States. If an individual work is in the public domain in the United States and you are located in the United States, we do not claim a right to prevent you from copying, distributing, performing, displaying or creating derivative works based on the work as long as all references to Project Gutenberg are removed. Of course, we hope that you will support the Project Gutenberg-tm mission of promoting free access to electronic works by freely sharing Project Gutenberg-tm works in compliance with the terms of this agreement for keeping the Project Gutenberg-tm name associated with the work. You can easily comply with the terms of this agreement by keeping this work in the same format with its attached full Project Gutenberg-tm License when you share it without charge with others. 1.D. The copyright laws of the place where you are located also govern what you can do with this work. Copyright laws in most countries are in a constant state of change. If you are outside the United States, check the laws of your country in addition to the terms of this agreement before downloading, copying, displaying, performing, distributing or creating derivative works based on this work or any other Project Gutenberg-tm work. The Foundation makes no representations concerning the copyright status of any work in any country outside the United States. 1.E. Unless you have removed all references to Project Gutenberg: 1.E.1. The following sentence, with active links to, or other immediate access to, the full Project Gutenberg-tm License must appear prominently whenever any copy of a Project Gutenberg-tm work (any work on which the phrase "Project Gutenberg" appears, or with which the phrase "Project Gutenberg" is associated) is accessed, displayed, performed, viewed, copied or distributed: This eBook is for the use of anyone anywhere at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included with this eBook or online at www.gutenberg.net 1.E.2. If an individual Project Gutenberg-tm electronic work is derived from the public domain (does not contain a notice indicating that it is posted with permission of the copyright holder), the work can be copied and distributed to anyone in the United States without paying any fees or charges. If you are redistributing or providing access to a work with the phrase "Project Gutenberg" associated with or appearing on the work, you must comply either with the requirements of paragraphs 1.E.1 through 1.E.7 or obtain permission for the use of the work and the Project Gutenberg-tm trademark as set forth in paragraphs 1.E.8 or 1.E.9. 1.E.3. If an individual Project Gutenberg-tm electronic work is posted with the permission of the copyright holder, your use and distribution must comply with both paragraphs 1.E.1 through 1.E.7 and any additional terms imposed by the copyright holder. Additional terms will be linked to the Project Gutenberg-tm License for all works posted with the permission of the copyright holder found at the beginning of this work. 1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm License terms from this work, or any files containing a part of this work or any other work associated with Project Gutenberg-tm. 1.E.5. Do not copy, display, perform, distribute or redistribute this electronic work, or any part of this electronic work, without prominently displaying the sentence set forth in paragraph 1.E.1 with active links or immediate access to the full terms of the Project Gutenberg-tm License. 1.E.6. You may convert to and distribute this work in any binary, compressed, marked up, nonproprietary or proprietary form, including any word processing or hypertext form. However, if you provide access to or distribute copies of a Project Gutenberg-tm work in a format other than "Plain Vanilla ASCII" or other format used in the official version posted on the official Project Gutenberg-tm web site (www.gutenberg.net), you must, at no additional cost, fee or expense to the user, provide a copy, a means of exporting a copy, or a means of obtaining a copy upon request, of the work in its original "Plain Vanilla ASCII" or other form. Any alternate format must include the full Project Gutenberg-tm License as specified in paragraph 1.E.1. 1.E.7. Do not charge a fee for access to, viewing, displaying, performing, copying or distributing any Project Gutenberg-tm works unless you comply with paragraph 1.E.8 or 1.E.9. 1.E.8. You may charge a reasonable fee for copies of or providing access to or distributing Project Gutenberg-tm electronic works provided that - You pay a royalty fee of 20% of the gross profits you derive from the use of Project Gutenberg-tm works calculated using the method you already use to calculate your applicable taxes. The fee is owed to the owner of the Project Gutenberg-tm trademark, but he has agreed to donate royalties under this paragraph to the Project Gutenberg Literary Archive Foundation. Royalty payments must be paid within 60 days following each date on which you prepare (or are legally required to prepare) your periodic tax returns. Royalty payments should be clearly marked as such and sent to the Project Gutenberg Literary Archive Foundation at the address specified in Section 4, "Information about donations to the Project Gutenberg Literary Archive Foundation." - You provide a full refund of any money paid by a user who notifies you in writing (or by e-mail) within 30 days of receipt that s/he does not agree to the terms of the full Project Gutenberg-tm License. You must require such a user to return or destroy all copies of the works possessed in a physical medium and discontinue all use of and all access to other copies of Project Gutenberg-tm works. - You provide, in accordance with paragraph 1.F.3, a full refund of any money paid for a work or a replacement copy, if a defect in the electronic work is discovered and reported to you within 90 days of receipt of the work. - You comply with all other terms of this agreement for free distribution of Project Gutenberg-tm works. 1.E.9. If you wish to charge a fee or distribute a Project Gutenberg-tm electronic work or group of works on different terms than are set forth in this agreement, you must obtain permission in writing from both the Project Gutenberg Literary Archive Foundation and Michael Hart, the owner of the Project Gutenberg-tm trademark. Contact the Foundation as set forth in Section 3 below. 1.F. 1.F.1. Project Gutenberg volunteers and employees expend considerable effort to identify, do copyright research on, transcribe and proofread public domain works in creating the Project Gutenberg-tm collection. Despite these efforts, Project Gutenberg-tm electronic works, and the medium on which they may be stored, may contain "Defects," such as, but not limited to, incomplete, inaccurate or corrupt data, transcription errors, a copyright or other intellectual property infringement, a defective or damaged disk or other medium, a computer virus, or computer codes that damage or cannot be read by your equipment. 1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right of Replacement or Refund" described in paragraph 1.F.3, the Project Gutenberg Literary Archive Foundation, the owner of the Project Gutenberg-tm trademark, and any other party distributing a Project Gutenberg-tm electronic work under this agreement, disclaim all liability to you for damages, costs and expenses, including legal fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE PROVIDED IN PARAGRAPH F3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH DAMAGE. 1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a defect in this electronic work within 90 days of receiving it, you can receive a refund of the money (if any) you paid for it by sending a written explanation to the person you received the work from. If you received the work on a physical medium, you must return the medium with your written explanation. The person or entity that provided you with the defective work may elect to provide a replacement copy in lieu of a refund. If you received the work electronically, the person or entity providing it to you may choose to give you a second opportunity to receive the work electronically in lieu of a refund. If the second copy is also defective, you may demand a refund in writing without further opportunities to fix the problem. 1.F.4. Except for the limited right of replacement or refund set forth in paragraph 1.F.3, this work is provided to you 'AS-IS' WITH NO OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PURPOSE. 1.F.5. Some states do not allow disclaimers of certain implied warranties or the exclusion or limitation of certain types of damages. If any disclaimer or limitation set forth in this agreement violates the law of the state applicable to this agreement, the agreement shall be interpreted to make the maximum disclaimer or limitation permitted by the applicable state law. The invalidity or unenforceability of any provision of this agreement shall not void the remaining provisions. 1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the trademark owner, any agent or employee of the Foundation, anyone providing copies of Project Gutenberg-tm electronic works in accordance with this agreement, and any volunteers associated with the production, promotion and distribution of Project Gutenberg-tm electronic works, harmless from all liability, costs and expenses, including legal fees, that arise directly or indirectly from any of the following which you do or cause to occur: (a) distribution of this or any Project Gutenberg-tm work, (b) alteration, modification, or additions or deletions to any Project Gutenberg-tm work, and (c) any Defect you cause. Section 2. Information about the Mission of Project Gutenberg-tm Project Gutenberg-tm is synonymous with the free distribution of electronic works in formats readable by the widest variety of computers including obsolete, old, middle-aged and new computers. It exists because of the efforts of hundreds of volunteers and donations from people in all walks of life. Volunteers and financial support to provide volunteers with the assistance they need, is critical to reaching Project Gutenberg-tm's goals and ensuring that the Project Gutenberg-tm collection will remain freely available for generations to come. In 2001, the Project Gutenberg Literary Archive Foundation was created to provide a secure and permanent future for Project Gutenberg-tm and future generations. To learn more about the Project Gutenberg Literary Archive Foundation and how your efforts and donations can help, see Sections 3 and 4 and the Foundation web page at http://www.pglaf.org. Section 3. Information about the Project Gutenberg Literary Archive Foundation The Project Gutenberg Literary Archive Foundation is a non profit 501(c)(3) educational corporation organized under the laws of the state of Mississippi and granted tax exempt status by the Internal Revenue Service. The Foundation's EIN or federal tax identification number is 64-6221541. Its 501(c)(3) letter is posted at http://pglaf.org/fundraising. Contributions to the Project Gutenberg Literary Archive Foundation are tax deductible to the full extent permitted by U.S. federal laws and your state's laws. The Foundation's principal office is located at 4557 Melan Dr. S. Fairbanks, AK, 99712., but its volunteers and employees are scattered throughout numerous locations. Its business office is located at 809 North 1500 West, Salt Lake City, UT 84116, (801) 596-1887, email business@pglaf.org. Email contact links and up to date contact information can be found at the Foundation's web site and official page at http://pglaf.org For additional contact information: Dr. Gregory B. Newby Chief Executive and Director gbnewby@pglaf.org Section 4. Information about Donations to the Project Gutenberg Literary Archive Foundation Project Gutenberg-tm depends upon and cannot survive without wide spread public support and donations to carry out its mission of increasing the number of public domain and licensed works that can be freely distributed in machine readable form accessible by the widest array of equipment including outdated equipment. Many small donations ($1 to $5,000) are particularly important to maintaining tax exempt status with the IRS. The Foundation is committed to complying with the laws regulating charities and charitable donations in all 50 states of the United States. Compliance requirements are not uniform and it takes a considerable effort, much paperwork and many fees to meet and keep up with these requirements. We do not solicit donations in locations where we have not received written confirmation of compliance. To SEND DONATIONS or determine the status of compliance for any particular state visit http://pglaf.org While we cannot and do not solicit contributions from states where we have not met the solicitation requirements, we know of no prohibition against accepting unsolicited donations from donors in such states who approach us with offers to donate. International donations are gratefully accepted, but we cannot make any statements concerning tax treatment of donations received from outside the United States. U.S. laws alone swamp our small staff. Please check the Project Gutenberg Web pages for current donation methods and addresses. Donations are accepted in a number of other ways including including checks, online payments and credit card donations. To donate, please visit: http://pglaf.org/donate Section 5. General Information About Project Gutenberg-tm electronic works. Professor Michael S. Hart is the originator of the Project Gutenberg-tm concept of a library of electronic works that could be freely shared with anyone. For thirty years, he produced and distributed Project Gutenberg-tm eBooks with only a loose network of volunteer support. Project Gutenberg-tm eBooks are often created from several printed editions, all of which are confirmed as Public Domain in the U.S. unless a copyright notice is included. Thus, we do not necessarily keep eBooks in compliance with any particular paper edition. Most people start at our Web site which has the main PG search facility: http://www.gutenberg.net This Web site includes information about Project Gutenberg-tm, including how to make donations to the Project Gutenberg Literary Archive Foundation, how to help produce our new eBooks, and how to subscribe to our email newsletter to hear about new eBooks. libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/000077500000000000000000000000001357643561300313045ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/CMakeLists.txt000066400000000000000000000043771357643561300340570ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-generic-sessions) set(SRCS minimal-http-server-generic-sessions.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) require_lws_config(LWS_OPENSSL_SUPPORT 1 requirements) require_lws_config(LWS_WITH_GENERIC_SESSIONS 1 requirements) require_lws_config(LWS_WITH_LIBUV 1 requirements) require_lws_config(LWS_WITH_PLUGINS 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/README.md000066400000000000000000000017671357643561300325760ustar00rootroot00000000000000# lws minimal http server with generic-sessions ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-tls [2018/03/20 13:23:13:0131] USER: LWS minimal http server TLS | visit https://localhost:7681 [2018/03/20 13:23:13:0142] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/20 13:23:13:0142] NOTICE: Using SSL mode [2018/03/20 13:23:13:0146] NOTICE: SSL ECDH curve 'prime256v1' [2018/03/20 13:23:13:0146] NOTICE: HTTP2 / ALPN enabled [2018/03/20 13:23:13:0195] NOTICE: lws_tls_client_create_vhost_context: doing cert filepath localhost-100y.cert [2018/03/20 13:23:13:0195] NOTICE: Loaded client cert localhost-100y.cert [2018/03/20 13:23:13:0195] NOTICE: lws_tls_client_create_vhost_context: doing private key filepath [2018/03/20 13:23:13:0196] NOTICE: Loaded client cert private key localhost-100y.key [2018/03/20 13:23:13:0196] NOTICE: created client ssl context for default [2018/03/20 13:23:14:0207] NOTICE: vhost default: cert expiry: 730459d ``` localhost-100y.cert000066400000000000000000000040721357643561300345660ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- localhost-100y.key000066400000000000000000000063101357643561300344160ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-generic-sessions.c000066400000000000000000000137131357643561300405630ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/* * lws-minimal-http-server-generic-sessions * * Copyright (C) 2019 Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates setting up and using generic sessions */ #include #include #include static int interrupted; struct lws_context *context; static const struct lws_protocol_vhost_options pvo_mm1 = { NULL, NULL, "message-db", (void *)"/var/www/sessions/messageboard.sqlite3" }, pvo_m1 = { NULL, &pvo_mm1, "protocol-lws-messageboard", "" }, pvo13 = { NULL, NULL, "email-confirm-url-base", (void *)"https://localhost:7681/" }, pvo12 = { &pvo13, NULL, "urlroot", (void *)"https://127.0.0.1:7681/" }, pvo11 = { &pvo12, NULL, "email-contact-person", (void *)"andy@warmcat.com" }, pvo10 = { &pvo11, NULL, "email-helo", (void *)"warmcat.com" }, pvo9 = { &pvo10, NULL, "email-expire", (void *)"3600" }, pvo8 = { &pvo9, NULL, "email-smtp-ip", (void *)"127.0.0.1" }, pvo7 = { &pvo8, NULL, "email-from", (void *)"noreply@warmcat.com" }, pvo6 = { &pvo7, NULL, "confounder", (void *)"some kind of secret confounder" }, pvo5 = { &pvo6, NULL, "timeout-anon-idle-secs", (void *)"1200" }, pvo4 = { &pvo5, NULL, "timeout-idle-secs", (void *)"6000" }, pvo3 = { &pvo4, NULL, "session-db", (void *)"/var/www/sessions/lws.sqlite3" }, pvo2 = { &pvo3, NULL, "admin-password-sha256", (void *)"25d08521d996bad92605f5a40fe71179dc968e70f669cb1db6190dcd53258200" /* pvo value */ }, pvo1 = { &pvo2, NULL, "admin-user", (void *)"admin" }, pvo = { &pvo_m1, &pvo1, "protocol-generic-sessions", "" }, interpret1 = { NULL, NULL, ".js", "protocol-lws-messageboard" }, pvo_hsbph[] = {{ NULL, NULL, "referrer-policy:", "no-referrer" }, { &pvo_hsbph[0], NULL, "x-xss-protection:", "1; mode=block" }, { &pvo_hsbph[1], NULL, "x-content-type-options:", "nosniff" }, { &pvo_hsbph[2], NULL, "content-security-policy:", "default-src 'self'; " "img-src https://www.gravatar.com 'self' data: ; " "script-src 'self'; " "font-src 'self'; " "style-src 'self'; " "connect-src 'self'; " "frame-ancestors 'self'; " "base-uri 'none'; " "form-action 'self';" }}; static const struct lws_http_mount mount2 = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/needadmin", /* mountpoint URL */ /* .origin */ "./mount-origin/needadmin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ "protocol-lws-messageboard", /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ &interpret1, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 7, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; static const struct lws_http_mount mount1 = { /* .mount_next */ &mount2, /* linked-list "next" */ /* .mountpoint */ "/needauth", /* mountpoint URL */ /* .origin */ "./mount-origin/needauth", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ "protocol-lws-messageboard", /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ &interpret1, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 5, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; static const struct lws_http_mount mount = { /* .mount_next */ &mount1, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ "protocol-lws-messageboard", /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ &interpret1, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { lws_context_destroy(context); interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p, *plugin_dirs[] = { "/usr/local/share/libwebsockets-test-server/plugins", NULL }; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server TLS | visit https://localhost:7681\n"); signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_EXPLICIT_VHOSTS; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; info.plugin_dirs = plugin_dirs; info.pvo = &pvo; if (lws_cmdline_option(argc, argv, "-h")) info.options |= LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } info.headers = &pvo_hsbph[3]; if (!lws_create_vhost(context, &info)) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin/000077500000000000000000000000001357643561300337335ustar00rootroot00000000000000404.html000066400000000000000000000002651357643561300350540ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin

404

Sorry, that file doesn't exist. admin-login.html000066400000000000000000000002321357643561300367350ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin This is an example destination that will appear after successful Admin login. This URL cannot be served if you're not logged in as admin. example.js000066400000000000000000000012711357643561300356460ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origindocument.addEventListener("DOMContentLoaded", function() { var transport_protocol = ""; if ( performance && performance.timing.nextHopProtocol ) { transport_protocol = performance.timing.nextHopProtocol; } else if ( window.chrome && window.chrome.loadTimes ) { transport_protocol = window.chrome.loadTimes().connectionInfo; } else { var p = performance.getEntriesByType("resource"); for (var i=0; i < p.length; i++) { var value = "nextHopProtocol" in p[i]; if (value) transport_protocol = p[i].nextHopProtocol; } } if (transport_protocol == "h2") document.getElementById("transport").innerHTML = ""; } }, false);failed-login.html000066400000000000000000000001241357643561300370710ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin This is an example destination that will appear after a failed login favicon.ico000066400000000000000000000025761357643561300360070ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’http2.png000066400000000000000000000166131357643561300354320ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin‰PNG  IHDR@qeO„Ö pHYsCC,ę·ētEXtSoftwarewww.inkscape.org›ī<IDATxœķœ{”žU}ļ?ūņ\ŽĖd2!!!@ˆ:Ķ1Cė… ˆZ ļ§.EcO½j„zŖmķQj»°ķ$­ÖćŖÖ„e)еœ.XWµŠ*„F«Ų(1š ™dBfęĶ{y.ūržxžwnļ;™,Īj¾k͚™żüžēŁū÷ģ½÷ §p §p §p §p §š_b9ļ½Ų±cĒ,ķųų8;wīŪŹ’ļŲ½[lówģŽ-¶ŽyÖ¬»öģ[FFÜĪyĻŪ¶m›gĒóļŲś’—Ąž=bošJFG­T,““žŻ»}łbß„ķög¼hŸ{ĮĪ¢ū¾Ż»wūńńq/„š,%ą½ģÜ)÷·ZA”e2 CWQJ©<—2ŠÄdšśµRŖf­&E§#d’54¤l»Öf¹Rašē¢ĒIÓ_QŹ5£”!‘I§£”s “RER:!e @8'­µ&TŖŃt.Y”µ{°IāOņÓy.kCC¦jE£(k„UŹuǐ­XaŻÄDņƒuė̶mŪ\?Fōe€qĒķ·«_žÅ/*YµŗRv:CV)ćņ<ŌR†6MµUJ[Øy.}Yom,Y!¤¬;Ą įźB„Mļ3å}‚RŲM½¢°“¦Y½VSi§³Z z!œBäĪéż ©u3—ņēŽ˜‰)hoyĒ;Ģb&ōgĄöķ’±±čH»½>˲M&ĖĪ>-ŽW 8—SÆ×P*<ĪY‚@!„Ą{O ”µ@© R ¬Ķ‘2Bʹ(å±Vļ5RfX[|9­«(‘ē)BXŅ“M§Ó$Ļćœ”ÕŹØ×k“įœÅū€Zm­C¼ļIbš>&MŪ>ü‹@ėļW¢hļŹ›āā‹Ķü±ź~_×gس’dČdŁęÕ•ŹłńʍgQ­ŽE’ pHéĆ:R*œóx/Ńŗų-„B‹Ru¼·@„sŗ\W)` ö ‡Rē$ŽĖŁ6)Œ18—#D†sMŒÉqĪ eŽ”1Ī8—U¬³Ićœ%Ir²,#Ig„©9ŠlīC©+÷ģiyļÅüYŠĆ¼gĖĪb2MWäƌĘk֜ɹšF¢h5q„$RJ@Ŗüŗ!BtŸS Ö{‰µA9p0¦`āģkR ŒhķqĪE!Ī„0Q“ƒ£;ē4Ž+¤ōX[ōĒZƒ9R¶€P®\9%¦§G•1?gd¤gĘ÷2 D;I¬Kµ:D®Aė5H#„BJ‰” 8Wtŗ@÷+z„@ń[)A¹ŁEŻNtļéŽļ CˆņŁļ!<Ö:œó(%f TA!˜]JåT*R&Ōė5/„ńÖz&&cĄžVKā\¤ĆŠE­”Ŗ– „”B)(Ö0³_½h+jm·ĆąÜ”Å’ŌšdĮÜĖ :÷s}S ¬u%c¤¦ *QDcŗĻōXK9;Aą"ÉĄ­õw‘-Ė!0Ÿü¤*•Ō;gšŽP©0ū…”’’āå_~šƒ<ėÜså_łŠŸ\²é9ĻGåSż(ÓiŹUų@?Ͼķ×_łJź+Wrżõ×÷\›’ĻUļ}Æ8ļĀ Å[.æœC‡ͶŒŒš’æ˜W^ɳ6mņå*–ÖēņŠŹ įĪīӁ¾3`4ŠÜ0Ģl§“£µGK:¼h-:SSS4Žgö+—Ģ›žžfjjŠ4ĻIJŗ”Õn#ƒ`YŗNšŠééi:„‚Õ«W099É-·ŽŹ7o»’Ę7Äęg<ƗĖT‘e‚8Žā0 [IéZm€%ą=ūÆ»N‘$Cu„Ö&Hiń^~8f÷‚īß]ĮŪ~ó7yĶĖ^B`…`Ó¹ēšƽ–]TLĘZ­†”’?ū£?ą¾ūļ絯=÷Žy'§­Z_śöļ~€(Š8²oxĻæ~ļ{¼źµÆeff†}ę3|ŗčO±Īłé4mT‡†š­éi»<€hõjiÖµ8ސ2œŻŻ‹ĶmĮ {2ļŚšš0ĆĆĆ̾g¬[Ēӟö“äkŹ/z¬Łœm;ēœs8}͚%Ÿ¼ą‚ xłĖ_Ī 7ÜĄīūļ/Ś•rYęHÓć‘RM:öcĒģØX8 ś2@NM ­”±Ž{„PHYˆ¤ņ„]“ŪmvŻw߂Ncüæ$–ŗ¶˜ĮĖA)<@½Vc^m)9“Qź˜ŃŚló‹ŸŲBå¹Ī…Q„aŒ÷Ž+mL÷ļŁĆłĻžņ|<čĆē÷žĒŠītøé–[øūī»xÅ„—ā“ųX!rœóĀūĢf™ßY«Įœųś1ąŽ;d^©DY£Q;])÷²TjzÖOEœ¹~ż‚>šĄXŪCzR‘e¾š… Ś.Łŗ•w_qEw™Œ…BSÕĆĆrۚ5]½”æ&čA09éÓ45U„Zkӊm¼·(%°V ēnŪ¼™ļß}÷=ąō³Ībrrņ‰;Pˆł‹ž’|“Ölܰ—^|1’ć²ĖPB:÷)=Žœ3BZģžœ”Ž{+ęͪްfØG‘m>l‡½—d€#Ļ%aø¤]żd" Cīŗķ¶Bóƒā·sÅĄ½„āeQ*%ĻS)e–g™ėtzśæ` ąŁŗÕ9pĄćœ”ҁFŹ`V}Ŗb”8.žŃ:4ÖĘÕ8®īMÓ‘ÕÓ°cĒĘŖU†!©µfÖLõ=čS…¦š¾J…^ˆµćĒulŒœļŁ‚>K`||ÜóµÆłģȁēŽ[„š(åž¶aƒæō×~MŒ>ć ovŽæčEĢ4¬?ćŒ—„÷\zÉ%œvŚiKö}E­VŠyO† ®¾j—^r a×vč@ Å„(E”*}Z”“”į™gÅų¶m~ūöķóˆ{˜ēŁ;ć“Ń83ʲ­gž…¬]{>ZŸÖu” ˆ¢b­ĘĻ`ņś‰Bw($'M}éKheæąČ‘ķæ÷Ž„^’®®Õ8kŪ¶d¾? W‚dbĀiļm†ŠBddaK{ü©‹łĀŚBzļ¬R.Čs§¦¦–·ą£Č„|¶©pw-­ö>UPx†<…OAb­DJ9Qb­īd™]<[{Fä]€Cßń>+}׳/zŖ£š9F14E5ƔķYó½ŸŌ{¶ŒŒˆŠŚhDė:APÅūbיSxžźKĮ£”4Z‹¶1¹P*Ż»w/Ž/ģz—X«%sctT«i” š>,ļė†ēóœģē?'č!ņƒq>/V™Z¹µjśŒ3ˆŸżldį€yōPŖŠēö­ćs<3& ¼7“QäÄ Öąa„T’$]äQŹ”»ķÜŻ0"¹ļ>7ßLė;ß!łĮpĪņƒŠšų¼óŗäF~ė·ĪīēĒYÖ®łī~UC™÷-Ēvˆ ]aīu=ٱCUAÖ!,°»ņ·\«Åō—¾Ä±k®!żÉOļ|ʐÜ{/ɽ÷rä#!|Å+Ų°cqéL9!ę÷©p‹Å”]–å€crņÄŖ0ć愍†Bˆ•„a čśż»;l’w§)\}5?Ū¼™CļyĻcü"ēȒ韸’Ā Łżśž‰0·7y¼‘cL µī;e{°cCJ9éœAėŸ/D7Š#śMżÖæü {/ø€‰÷æsōč£åŠĪį?žqī|Žó°ķörä]&ŲīßRŹŠćwMMI)}ūL kL„tieYœ›»Ń˜bGĢs_uū_łJ²Ÿżģ±īQ`õO~ĀWĘĘH–bB”wc…ųRq.„ŖŒŒōLį¾ XQDnR:Ę“ŹŒ.7ŗĘ-·pōŸXr?x"°éČ®}į {ÄYœ“h­B„a„Ŗ”ƒž¾öŪ|:Į"0"„²Ž›2ę.Źé椠FFXóÉOņ¶zļv_¹ńFīśÖ·ųõW½ją=ż‚ 8żC˜~-pß8×°ŲL/ee yžeŠz]ūE¾ĶŒ2ŠD»ÓY9†UāxBTqNHŲšÖ·ņŸł ?øēžG5šłxĘ»ŽE>44­&x`®”+¦»Ź[‘^“GJ…6 ķīf³Ēš]rŃ)­£ ^A©bo Sŗ˜NȄ7¼īuœuę™  „Ö¬zéK¦wIBš¦s ŽŒčŚÖŚNžŪ0Ė\gjŹ/–½K­–0E`1,“ ,ŽēĖĶ€“…xÓ¦i;@Ņe@©ŸĢ¢›œ%e;¶ō¹æw Œ{«µ —Rd„Vµ“Č<ÉÕź@thÕ®eNSu(e±6Da[d¬Į ĘPnŒÕZ%I:8—ĪŅ>IĮsäČ@t‡ØZ%z4Ü")K)C…u­WÄBÄūĆP-^ĮżUį0t™”¼÷(UB¤œKO›Ė {B`&&¢{ŲøaĆ\ĆBMŠkeØTą!޲lłŠŖ°ö>BˆBł ‚9qų$ ݳg ŗū€_³šŠ%Päxo‡1IÓŚD:—Ł‘‘Į!U©ÖåyŠ1-ņÜĶfr>Į¦Æ™˜ ™Ÿur|ø`±R$T:“Nńސē@<«Ļ3ś*BĪūV’e Žž“ł¦šāŻö$¢ło Ää6p/š«/xĮ\ćÜL°@Ž÷-¼÷6˼ɲüGI²üčfŽ+cōt–u°¶C‘‚ś¤L’Ę?žć@tßź«Vqхö'ĀQäfåa(į½\Ń'u„ļˆff“‚ØÖõ ‚ė‰ >KĮLLŠüēˆöą5Æ~5Z/’ĪÅ>„ń>Fˆ„bĄ )Åʵk—×ļŁ±6y®b„B” ‚R#~#ĮS÷wxc–„;Ü ¼ķ­o]x”H‘ó„ķ"D8Ž””Ź‘ļ?|xysxčŒ3„‡8·vmT©Ōč&/Kih‚'™>M™ŗīŗhožŪ3ŸÉ‹%JĶE ʛs¾™$ Ī%k5·¼OŠĪιÕT«u“ĮŚz yĀ>’Ōß’=y™ļw"ąVą]q‹Ć\eBG×u/)–‚WA ]éXŒlŁ“ÉRęBʜ””a”АRį}8» N2|’pōcˆö Y­ņ?ßüꮋ]†®0 W¤ DžŚĘxå}ˆµŠ"WP/H<:ÉÓ’Ųg?;Š×Ļ€k€w¾żķ¬,Sp{ś#„@Y*qt¼")ŻŽ>õ½ ˜œōa˜\Ź£¤é ֚2éHĢśObxÜ>Ģä‡?<ķ @³^ēO®¼ri¢ł)3E‚gT‹ćŲ(µbtŻŗTįmŪ|dm”u}6Ež¼€CW^‰™Y–®\ ¼ēŻļ^:znšcœxßi$I"ĖöÖė=Įž±Į¼V3NE×=kœd4o»ĘM7 Dū9ĄóŽ?ųƒŽ‹óŽ…Ö);“¶¬måyޘyč!·¼GØ¬Ī“AŠ ŻnŅ­‘ņ¤ŖĄ¶Ńąįßū½h®¶’éŸĪ¹Ąū”k uÓd‹ ×T;7é“īlqÅR°‘MŒiam^–æ™RĒV3—"÷1ń¾÷‘?ųą@“’Ųtī¹¼ėļXxa±6ZX¬Żś¢”N§M’4|µW¬YćxĶk³OMéÜt~üųŽO"D0³zĄćō’źW™žā¢ż:p—\ó·ŪĻńы";Ä£TŽÓ“ŪĒ…÷²11!YIb ¬‡Ą*eŽ43äy»¬Ą8)Ó?č!žīļD;Eńõß~łå¼`¹ŗ„ł³”p޼·äyx?-ŪmŃ-Ųž~ Q­¦ˆĻ\±b BŌ1¦B”U=.&ų<ēĄå—cyd śæ¢õėłČ ±‚"mÖē2’¤™¦iGH)V¬Yӕ'ö īܹSŚĘ¬¢RYA®Ā¹ ĘĢ„Č<ĘĶpāŹ+ißsĻ@“7ß‚k?õ©o|óQX¬Eu©”„T†@#Ļ%kֈe}‚»ĖZżĄ{I&e"“g˜łņ—9vķµŃ>B!ó_ł²— ž’¹JR÷“"ŽWcVÅŽ»''åņbC— ”°6„ȵ1e‚ŅcśņéīŻ<üūæ?-EPõœĶ›ł«>›Ö’˜_½Zų+H9D)Aī}Š™šZ^ ŒLNā„˜*KŌ›xļ‚ĒTäšMzĖ[p­Ö@ōØ×¹į _ ņX&„ cƒÖ‘²vJU†ÓT”"c“vCJey»Ż ČĪCc|ś;ĒĮßłҟžt ņ/·Į篹†s7oų5 PĢE± ¢hH*»<‡V®ģŃ{–Œ vœÓRŽ«²¾æX_Ž‹A7ĮĆŪ·ÓX*~æ?¤X÷ļļ{ŁvŁeŻÓ×*ó i„Ø!„VB”Tŗ¶ÓÉŚl«å•”­cŠņöŒGóåé/|£żč@“G’ ¼ųā‹łŠ¼jށ1Æv™Ā $š¾šg*VĆ0ҐļéaY’ø@­&„µ¢Ón?‚÷Ęų²~p /ß¾ūī7=C±éU6ląĖ’šØĒ©bŻŗ†b¹:ēyŽriŚ7Ķ“\`żztXk­'M›H)䝡,ĪöīåĮßų üüõšĄ‡’ŒcnŗžzVŸ –čQBPÄ2‚ KÉĘ )°¼1d;/Œ1-!’zqx‰ļ1<śŻ75ÅÆ=öŲ±ei[ĄŸߔ’뮾š-Ļ}īņĆZsuĆ¢ō ņ<—ÖZY«Ižö“ĮCcÖ9JE+B朞µ·ūI\»Ķƒo|ć@)³?Ž|oÕ*¾zóͼõMozt] Ż~Ü¢bdĪ)źŲ³głš!€©”µ(ŠF*•APGˆˆÅˆyšYĘCozķ²ˆłDų šĄsĪ;/żŁŸ±ņŠ!&Ž’~ÜņIŠKb䷛ʳžµ°±8˜Å†aģ\ló¼;€„k‡”P„öK’Ā0¦äby Ay—öŻ Ń[ĖĮ+®(bzĖ E”P|mõjN’ńiæīu<öaĻįKūöńŠ˜_~ę3ē•ņ¤)SQA Œńī>§ČōU„†ĆŠYē4Z‡Q(Aó#C]=Ą{żį2sću“¼Xsō(¾ØI>)øķöŪyšĄ…ER·DkQ¢Ųc‰‰žŸ¾óŚLM¹Øø=2§š-ø’šų8SŸ’üIČIC‘'č1Ę"÷>a(uŠÅ•¦ż#C##ŅG‘#ĻSœs€EėnÄu.]~@‡ę“†…!üٱŁN;޵,r•ēt- Ž>‰U"£[Ń”žl”Źc*µšŲ»wļņ•£»>ūY%“DˆāĄ4Ŝ7Ų•'4,<¹į©‚łż*īČsMš¦Ęڼentt“ē¶)°eÓ&æoļ^„„čP¤Č )QqeA²@μöZްmÓ„¶žHģ987÷£T‚R*VŖj ÷>\VVĻ”W nŻźÄžżią\jŅ4ÕÅńtē,RZœShķ±VTŸ÷<žäśėÉĖō'ė<y3ń9ēž[D‹Ÿā‘<‘².“Öι Z½Z.ƒż*G©<żéy*DGj]EŃé@t³/”˜bą=/¾šĀåܝ—ó÷®Ī¾ü*6^?ū»ŠĢµ…ĘšēŽāŲ=Kš¶³<ĻU½nlŸCTś*Bnd쇖FkĀ,3„O 8ØP©B,ŅfŠ57 …*®4Em’BFĢg÷†Ž,“³A˜Åž‡.Š,Š…j÷ĖgęXkHÓ c,aŲŃBäk'&z|½ ÷vēNƤl><33³±ÕjE)•J„ʄeܽ{–X7óJ•kÆ8@±ė€‡µŻžŹRC“tĻ -ŹZŠ/WWĖYqŪ½§8MĢé…„*Rb F£Źkc,Ž7Iӄ$ɽsŽ4e/°xģ;’‰ W­× J=L£±ju„ D@Œµ® ™ååį¦(RiŅ4Dkƒ)Īåå tŁń¢®ßū¢®Æ81/]ŁēŠc;„ŠX«2ùā0Å<„ŒIŃŗŚZ[„ļ­•xļpNēÖ£Ż>lcʹĪLg›“‹O•ķ{ āčķ·Ū©ÉÉF23óšĮ#GŽžE0¦CUExß"Ļ›eĒ»ĒlĘå R#„ƹ„ĀóÕ­>—e5ĒJI¬mį}Š:ŰäyFF8×5"‹CS„Œ)=<„"Ā–³J“ēšN§I§s„G™xčŲ±q?Tƒ„>ESżĪńŪļ¼Ó½yÕŖ$yXdŁæ’bß¾Īś‘‘ÓāJ„†Ö ČņćĒi&IĒ_GÖāø2•$ œcżŠPqĢmµZGŹcŚ$I‡(Ŗ–~…äłqŅŌ ”Cėˆ0ĀŚ¢ā»Ųų,Y–†A)Ž)]ŻQ)ŠcĄ‘e-„®ŻnåĘ)5“off2‚½aL8­:sƆ}Žųź»}{ļ;vˆżēœ“®·Ót(bČYkt5s$Ļ… ĆLd™Ø ¹Lė<}äkj­GLšvu†8WŹ c”׌Ź,[AtB!Ž)ē2ć}`ŒQZŹP†aŠ“ÖĒĪe. ­ö> ĖŚ‰RB'EĘBk)Ė"”TG”8k£Ü{YŪI«ÕéČŚģ@§“m9tȊķŪ{|‚'–_Ū·Ė;@n“ū[-iŽ÷ŒŽ’5›~ljŹļ*##āČīŻnė¼éµkjJ®ŃA’H72ā»Fˆ¬Tо83y¶n]Ļ“›šņlŚäٳG°i“ßµgŲ²i“æćĪ;‹óǁ½÷ݧōА0ĒūŃuėüžVKšµk½>|XlÜøŃpēŽeĪ„/­AæčēDōŽū?Ū·o—ŻßŪ·o—KŻ’hūµų=÷¹§p §p §p §p ’%š’‡­·ķ:IIEND®B`‚index.html000066400000000000000000000040651357643561300356560ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin
This is a demo application for lws generic-sessions.

It's a simple messageboard.

What's interesting about it is there is no serverside scripting,
instead client js makes a wss:// connection back to the server
and then reacts to JSON from the ws protocol. Sessions stuff is
handled by lws generic sessions, making the actual
test application
very small.

And because it's natively websocket, it's naturally connected
for dynamic events and easy to maintain.

Register / Login at the top right to see and create new messages.
New message

libwebsockets.org-logo.svg000066400000000000000000001403321357643561300407640ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin lws-common.js000066400000000000000000000063551357643561300363160ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin/* * This section around grayOut came from here: * http://www.codingforums.com/archive/index.php/t-151720.html * Assumed public domain * * Init like this in your main html script, this also reapplies the gray * * lws_gray_out(true,{'zindex':'499'}); * * To remove the gray * * lws_gray_out(false); * */ function gsize(ptype) { var h = document.compatMode === "CSS1Compat" && !window.opera ? document.documentElement.clientHeight : document.body.clientHeight; var w = document.compatMode === "CSS1Compat" && !window.opera ? document.documentElement.clientWidth : document.body.clientWidth; var pageWidth, pageHeight, t; if (document.body && (document.body.scrollWidth || document.body.scrollHeight)) { t = document.body.scrollWidth; pageWidth = (w > t) ? ("" + w + "px") : ("" + (t) + "px"); t = document.body.scrollHeight; pageHeight = (h > t) ? ("" + h + "px") : ("" + (t) + "px"); } else if (document.body.offsetWidth) { t = document.body.offsetWidth; pageWidth = (w > t) ? ("" + w + "px") : ("" + (t) + "px"); t = document.body.offsetHeight; pageHeight =(h > t) ? ("" + h + "px") : ("" + (t) + "px"); } else { pageWidth = "100%"; pageHeight = "100%"; } return (ptype === 1) ? pageWidth : pageHeight; } function addEvent( obj, type, fn ) { if ( obj.attachEvent ) { obj["e" + type + fn] = fn; obj[type+fn] = function() { obj["e" + type + fn]( window.event );}; obj.attachEvent("on" + type, obj[type + fn]); } else obj.addEventListener(type, fn, false); } function removeEvent( obj, type, fn ) { if ( obj.detachEvent ) { obj.detachEvent("on" + type, obj[type + fn]); obj[type + fn] = null; } else obj.removeEventListener(type, fn, false); } function lws_gray_out(vis, _options) { var options = _options || {}; var zindex = options.zindex || 50; var opacity = options.opacity || 70; var opaque = (opacity / 100); var bgcolor = options.bgcolor || "#000000"; var dark = document.getElementById("darkenScreenObject"); if (!dark) { var tbody = document.getElementsByTagName("body")[0]; var tnode = document.createElement("div"); tnode.style.position = "absolute"; tnode.style.top = "0px"; tnode.style.left = "0px"; tnode.style.overflow = "hidden"; tnode.style.display ="none"; tnode.id = "darkenScreenObject"; tbody.appendChild(tnode); dark = document.getElementById("darkenScreenObject"); } if (vis) { dark.style.opacity = opaque; dark.style.MozOpacity = opaque; // dark.style.filter ='alpha(opacity='+opacity+')'; dark.style.zIndex = zindex; dark.style.backgroundColor = bgcolor; dark.style.width = gsize(1); dark.style.height = gsize(0); dark.style.display = "block"; addEvent(window, "resize", function() { dark.style.height = gsize(0); dark.style.width = gsize(1); } ); } else { dark.style.display = "none"; removeEvent(window, "resize", function() { dark.style.height = gsize(0); dark.style.width = gsize(1); } ); } } /* * end of grayOut related stuff */ function new_ws(urlpath, protocol) { if (typeof MozWebSocket != "undefined") return new MozWebSocket(urlpath, protocol); return new WebSocket(urlpath, protocol); } function lws_san(s) { if (s.search("<") !== -1) return "invalid string"; return s; } lwsgs-logo.png000066400000000000000000000230011357643561300364530ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin‰PNG  IHDRČO®ķŠžsBIT|dˆ pHYs$œ$œYƒö9tEXtSoftwarewww.inkscape.org›ī< IDATxœķ]y\T厒à òƒ ‹"*Š„éUp!M%Ķ\2·ne™-.ia·,ė¾×¼Ž×›¹f.™Kīhī¢Blā²ļĖlæ÷§9ĪaŌzēūłœœó¬ēĢłßśüL0Į­0{Ņ0Į„§&1Į=0ˆ &聉@L0ALb‚ z`"LЁ˜`‚˜ÄōĄD &˜ &1Į=0Ņ0&ˆ2™ .\@aa!jjj  įć惞={ĀĮĮęę©[6”ń—y[īŽ½‹“'O"%%7oŽDuu5¤R)ĢĢĢ`kk 777 0111茵+„Ba»Ķ%//ėÖ­CRRrssQ^^+++ųųų OŸ>>|8bccįččŲnsxŅØ©©Į{gӧOĆÓÓK—.EXXŲ“žVĖAüžūļ“|łr %''' …€;‰D" ¦yóęщ'ض¶ÖčóP*•“dɲ°°ąÆķ8tčŃĒššį‡ņī×ĮĮjjjžō“ZŒ?=¹}ū6öģŁƒ-[¶ąęĶ›Üu‘HWWWø»»C$”¼¼·oßʶmŪP[[ ;;;<ūģ³FĖģŁ³±vķŚfė …B 8ŠØc?mP’- ¢¢wļŽEPPŠšQėš§&„R‰żū÷ćēŸÖųAœŲŲXŲŚŚ"--«wźŌ)x{{£WÆ^FÓI6mڤ•8$ üüü —ĖńąĮŌÖÖ"$$vvvF÷iETTöļßĻwėÖ OpF­Ä“fa­…R©¤ŠŠ š0aŁŚŚjˆ0qqqtäČR(¤P(H&“Ńʍ©_æ~daaAƆ £¼¼<’ĖåmžKuu5u芁7¾X,¦åĖ—Suu5ÆnFF;v¬Ķc>ķP*•ōÓO?Ѽyóč믿¦ŅŅŅ'=„VįOĖAär9Nž<‰ģģlŌÕÕq×lll‰=ząśõėŲ¹s'œœœ   \½z%%%ČĪΆ‡‡G›ö-[¶ ¬¬Œwķæ’ż/^{ķ5ŗ]»vE×®]Ū4ޟńńńˆŅSi '¬,ąŠ!ąŅ„vœWW .xę@"ŃYˆPRR‚ŗŗ:( 2'''”——抔CŲ»w/ʎ‹üü|TVVB©TB©TmŹ7nä÷ķŪÓ¦Mku÷ļßǹsē8ėW’žżŃ„KƒŪ+ ¤¦¦āĮƒ°°°@hhh³³{÷īįüłó(//‡µµ5śõė×¢1sss‘››‹ĄĄ@ųųųÜNÕVõŃrttDPPzöģŁ¢>Ś óš¼<¢’ł"__"‘ˆhŸĆŁ™hęL¢cLjźźtN§””¾żö[źÖ­›V‹ÕŖU«())‰fĻžMÖÖÖ4räHŠ‹‹£€€‰D4`Ąŗzõ*I„Ņ6±ą††‹Å¼9¬\¹²U}åååŃ /¼@@CdŒŠŠ¢ū÷ļóźļŪ·+·³³#¹\NGŽ!___^[Ś“i“Ö1srrhĈZnjŽŽÖó—_~įŹCBBH.—Ó¬Y³øöīīīDDtąĄ^_'NŌzæĻ?’¼V+_·nŻ(55µUĻј0œƒtźŒ <|ģŚ”•Fü C”Ŗ«’`ēN@*D"ą¹ētr"5YRO8 ³²²Š±cGųųųĄĀĀIIIĖå033ƒ‡‡zõź//Æ6‹WW®\T*å]2dH‹ūÉŹŹBDD “–=zC‡EJJŠVæŖŖ ’üē?±xńbČår^YMM f̘ņåĢĢLDFF¢°°Pė˜III6lRRR`kk«Qž––†eĖ–į»ļ¾ć®uźŌÉ ū-((@DDīܹ£µ<==ż©0dN ąķ ,XĄ¾õ·o³—Ų jj€+W€Ŗ*F|»w••Ą'ŸŻ»b±F3333­]¦§§#<<øtéRRR •JammĮƒć•W^³³s›§ž——§1§Ī;·Ø„R‰)S¦h‡X,ę_FF¾łę|üńĒZūY°`Ī1¤R)~üńG®­B”Ą”)S4ˆ£é˜éééX¹r%/^¬uŽMēbØxõžūļė$š÷÷*tµ–)éff€ƒšé§Ęåć?üüē?@a!ć&Ē„„Ą’ tī XXØMÅ ...°P»¦Žääd899q¾‰«WÆ¢°°¾¾¾čŅ„ :tč`”iWVVņĪķķķ!Ń£;iƱcĒpįĀīÜĮĮ»wļFxx8Ž9‚Ń£Gs/ķ?ü “@ _æ~Xøp!”J%>ųąäęęre—ŌōĒ_ż©©©Ü¹££#vļŽAƒįšįĆxńÅ!“Éø1µˆ b±Ļ?’<ˆ½{÷nö~ ±mŪ6޵ˆˆ,Z“‰ׯ_7ŖŽŲ“܊%čUž0ĪRRäēõõ€µ5Ń\]‘iƒ§'0m “[¶0£@M pķšöŪĄ¢E@’ž€ ›ø¹9śõėOOOܼySCĢihhĄ±cĒP\\Œ‘#GbņäÉ读7$ $ ĢtĶ£…hJ ÖÖÖ¼ó 6hˆ<*Œ;NNNŲ±cļśĀ…  ˆ‰‰ALL öīŻ ČĪĪFII‰VīēķķcĒŽĮęgŌŲ؈‰'råźŖé˜‹-BDD 66ŃŃќćÖ­[(++ÓśQ‘H$8{ö,śōé£õµįĄ<prrĀžżū¹y‡‡‡ÜW{ĆųfŽ+WŲ—’Ņ% ¼Ė™.įįĮ^š”Cm#ssF$/æĢŚģڤ§3"¹pų÷æEFpssƒææ?:tč !*(•J””” 55åååhhhĄŌ©SĘ9 ÅŪoæŚŚZ­eżū÷‡““._¾Ģ»žā‹/ņĪCBB8€āāb­νdŠ«W/^¹ŗ9ܐ1Õ}ÅÅÅZŸ]lll‹ˆ®]»Ę;‹‹ćĶūi‚q äŅ%`ūv`ß> 3“é*H$Œ“'^^Œ(š¢kWą„—X[¹œq’ŗ:ą×_”]6 ų#27((ZM"Buu5ŅŅŅPYY 777ÄÄÄĄĆĆĆh·ÜTyU Evv6÷æ@ @NNO>æwļƾ.ń£©>ęąąĄ;W7h43;;·oßꮯæß 1µ)ļĶA]ģ`ōcĀ8B440ŃhēN&Z‰Å@‡@ĒŽL_©®fŠ}b"#–ńćWŃF$Ŗ/ŸBlŽ 0"9tˆ‰l"0x0`k‹gŸ}ÉÉÉøuė–Ī/µL&CNN6nÜ‘H„ččhøøøå֛~ł***ŠŠŠĄé!iiiČĪĪFvv6._¾ŒuėÖńźjjjxē±±±zĒ4” ź#•J%ļY†n”1 śżLÄzZa‘JŁ—žšaąī]öŅ{x±±Ąōé@c#–8;|ž9ąģĢŹ]]µ÷Ł«`iÉ8ʆ ĢŗÕŠĄÄ·ņrĄŹ 0ėßéééHOOǵk×4̾ź8uź”J%ˆćʍƒ„„e›oŻĻĻw®T*‘ąą`®ÜĻĻQQQČĢĢŌ …B”įčŌ ø¹¹µiĪr¹¼EJ°D"«®ß©hŖ/¶ŌØń8a©Ŗbfٲ2ĘM||˜˜“p!{‘‰˜g¼KĘ=öģ6mzōŠM ąļĢĖ÷Ÿ~bÖ-™Œ‰jsę’ü'aa4hrss‘‘‘††½SMIIR©„L&Ó ŅRōģŁ€G˜'Ožä¤9˜››óL«ĪĪĪX½zµĪś–––m60ˆÅb˜››sĘWWWüē?’ŃYߏŹJ§9½5hśa*..6ZßʆqD&rs'QHß¾€ŗ£G$bצOīßnÜ`CB“ś80ĆŻY±jj˜ˆUPĄĘ)-eœI©„··7¢££‘——‡­[·€NN"•Jqżśu$&&ĀĢĢ /½ō¬¬¬Z}ė Dff&w-11o¾ł¦Į/•‹‹ 'óWVVb̘1ķ¾ņŃÅҳjUTT ..®]‘©£©H•••õXĘm Œcėlh®_gśĄšīŻ•ēäæüœ;8:2Biljk™Õ„ĀG"ĄøN|<ĆŚ‰ĮĮĮ˜4i¢££5L­MQ]]k×®aŻŗuŲµkW›æ`/æü2ļüņåĖX³fĮķ»uėĘż/“ÉpöģŁ6ͧ„cJ„R$''·ū˜*ųūūóĪ÷ģŁóŲĘn)ŒC 2pļŽ#ĻŗJ9Wįša&VŻøĮv„’q ±X·_`żŻ¹Ćı˗‘øŗ2}śtžóŠŃŃ”””ųūß’ŽČČČfæźźjüöŪoX·nŽ=Ŗ3ÜĀL:ā&\pΜ9ųģ³ĻPUUō·aĆ­ķ‡Ź;’ųć5äōŗŗ:ž3±­0dĢŚŚZ£Ž©BÓ„·<ˆpńāE£Ū‡ ģ+Æ)$Ī”8}šY¶:vdSR˜ļä¤[¼’ÉqģŻĖ| Œ°ŗtF“ŲŽķģģ0jŌ(…Bœ9s:§-•JqźŌ)…B˜™™!&&FĆ4j|}}1wī\|õÕWÜ5¹\Ž%K–`éŅ„prrBqq±NÅų•W^ABBgΜAÆ^½[[[äååaļŽ½ "äēēE©}å•Wšé§Ÿrcž:uŠ7fnn.öķŪ€­Ś4¦"=tčP8;;£¤¤„»6gά_æīīīČČČ@QQŹŹŹtFJ<6%äńÖ-"??"±˜Eä~ų!æüŻw‰:u"²µ%rs#²·'Z°€(;[{J%ѝ;D+VŁŁ ¬_€hčP¢ƒ‰d2½S:xš 5J#ŅV×1räH:xš`«Amm-…‡‡4žˆ:ĪČČąŚ/Y²Ä vß}÷×F=šMš4‰7§šŹ»wļĪ+’č£ sŻŗu\õh^4uźT­Ļ£¹hŽ+V4;īÓ°°Ģ8"–@Ą8ŠƒŌ×3æ‡ 3g2Įח…œ,Xüżļģm(,~üX±‚)ēź8ž™‰~¤“hAdd$^żuŒ9Ņ [(..ĘƇ Ŗ« VVV8pą&OžÜ¬rīåå…š‚ń0sęL½ķ¬’Š·Œ…O?żÓ§O×[ĒĘʦ]̰ļ¼óf̘”³\  ??ßčć¶Ā„„„£ō$‘æ’Īō„śz¦|÷źÅĒĪŽ‰F‘‘Ģ÷ŹĀJ“Yj>Ö®¶mņņ˜UĢĪPy[ĖŹ˜$3“é:nnĢ”Ü"‘ĪĪĪpqqA}}=rrrōŚž=<<šģ³Ļ¶É«+‹1fĢÄĘĘĀĪĪ2™ VVVšõõELL ęϟ5kÖh$/xį…Ī™-,,ąåå…ŠŠP¼łę›HLLD’žż¹6B”žžž6l† †Įƒ#00×§½½=W>tčPŽż Œ5 ƒ Ą|8‰^^^ Ć[o½… 6 _æ~¼1½¼¼tŽ©onźÕŲ½{÷ęŅ3YZZ" qqqXµj•Į·v…QųTJ”ŸO“hQ—.DÖÖDĻ=Gōļ•–)Ķ÷!—³ŗ_~IĀÄ5”ČՕčż÷‰¶mc¢Z` µÄb¢Įƒ‰6m"j²ØGeee“’~2dˆÖµėŖ£oß¾“vķZ£<ž:0 {{Ęjk™E+7—…–880_†µõ#¬)ärĘ9vļ¾ūøu‹]óōFŒ`NĮæżõ£P0¬“”õ_]Ķśvu“ÄYZZĀÕÕeeeHKKć¬JMįé鉾}ū>ÕqA&<~×Õ­0e {‰·l22€eĖ=’<‡ššu•JFG²u&%%¬½‹ ‹ü}ļ=fĪ53c–+‰„õ—˜³ F©”õ3z4³Œ5½Issne” &“Ęw׆„S§2šķ·Œ“üćģ%?žļ]˜Ī’”ÄV0.ca Ģ›4M4Ö£SšE"¶øŖ¼œ™‘«Ŗa͘”Į©ˆč©Y€cŸ ķĻŠ½;šź«LYß²…0žļ’2ńkęL&L<ڼ™‰U* ’™ ‡õUś® ĄėÆ3%’ūļfdkÖ°eĮaa|? t‡ž“d2®_掂‚Čd2888Ą××¾¾¾Fkz(..6ZōóŸ ķC Lܚ9óŃŅŁ¬,f™R*Y³˜uźū[ģlꀑ#Yڟž=u;ĶĶ™øöŹ+Œ[lßĪ,hEE̹Ø#|åqIee%˜˜Ø±Ś`cƌABBÜŻŻŪ}>mżzųša„……į×_ż'¦¶_Dœµ5‹ą}żuöĀž=ĖBŽ Ę%ˆ€ŸęĒpĢ·!ź&ĢĢX“ļøqŒH~ž™é/õõZ×Ė?ā(((@dd$nŻŗ„³NQQÖÆ_„K—¶ū|ڊ¼¼<>|pöģY\øp[–ū’ķ2ja ²“(LWųżw:0±Ŗ¾ž‘Ī@¤¦²Ø]GG¦ĻˆDśĒ bNHss¶ÖD‡ųņ8äŻwßåˆ#,, .D·nŻ`kk‹āāb\»v ;vģ€R©lóšŽĒŲŁŁ”ŖŖ b±Ųą”>%<žŌ£/¾ČøH}=ć$ź©rģ옾 —3«TEĖn¢T2³m—.ś 0­e÷õeĘ-aŪķM UUUŲµk×Ó Ä‘#GxėœŃ­[7L˜0įOc0°µµÅéÓ§qčŠ!DFFĀ××÷IOé±ćńˆ@Œþņåå€z¤ęąĮĢ»^XØ\2„„L¹Æ«¾ü’q“ę[f_W÷Č †ö&7npirfΜ©wµ¢±2Ŗ<„„„ $$äIOć‰įń%Æ67TņėĒ3g`T³V…‡?Ņ6l`Źvy93’ĄgŸ1’Fs z„BFZ^@Ņ’…Ń˜POÖšgŸL0 7»»£#3Į.YĀ|Ŗø¬˜˜5m#’={XX|a! J“µfĻf邚#’'@xk¶/]ŗ„É“'·ŗÆ’’œ?„„„šōōD÷īŻŃQ}}äęęāāÅ‹ØØØ€““¬Õ¤LDø|ł2ŅÓÓŃŲŲōīŻ»ÅI§Õ!“ɐœœŒ;wī@,#00Ļ<óL‹LŚwīÜĮ•+WPZZ ooo„……éåÄ555HNNƽ{÷ ‹Ń±cG<÷ÜsĘM!Ōń+J„’źė멸ø˜ŖŖŖØ””Ŗx,…‚ئ†(%…Å^5ÅŋDo¼ĮĀć"ss"//¢O>!ŗqưø®&ج¬¤ļ¾ūŽüüüŚ-«””Ū#ÄŚŚš233[ÜGUU͚5‹D"onfff4qāD½FTmāććµ&ŸīŅ„ ķŁ³‡W’Ö­[ōĢ3Ļh}”””tćĘ ^}Uréčœ÷ڵkÉŁŁY£æ€€:räˆÖ6oæż6 Ķ›7SII ?žĢĢĢxķŻŻŻéĢ™3ZŪoŲ°ģķķ5Ę“¶¶¦™3g6÷Ø †QD.—SQQŻŗu‹.]ŗDĒ§;vŠźÕ«éūļæ§Ÿ~ś‰öķŪGgΜ”ĢĢLŖ®®&„R©»Ć³g‰fĻ&rw”õŻĻč³ĻŲŚ}mµ ²²’Ö¬YÓ®BDōžūļsżłūūSnn®Įm(22’koaaAžžž|H2}‹ž’“‰^}•-²‰ŲD“lQYY‹ęYYYIß~ūm»HUUłūūó~Ü'NŌö‹/¾ąŚ½óĪ;·xųš!EDDpe—/_ꦔ––r/ŹŠ”Cy»8eeeŃgŸ}ĘŪ¬T}Õ{ļ½Ēmż “É(%%…V¬X”1/}rćĘ Žø:wīLW®\!"ö^¬Y³†#īN:QCCÆ­Š@TǼyóø{®ŖŖ¢Q£Fqeė×Æēµ'$‘Hx¦ŖŖŠ¶mŪ¦“kµm"’’ڽ{7=𬭭ÉĀĀ‚D" …BĖ$H(’…„„ŠĀ… )++Kwēr9Ń„KD“'³=Iüż‰ŗw'Š‹#śį‡ĶSE M÷Ķ06„§§ó¾fB”–-[¦—c666’££# ˜˜ņū÷ļs+#—,YĀ]?wī7ĪīŻ»››ś×¾øøŲ ūŃG 3fĢą~ß«WÆj”/^¼˜oėÖ­¼2uyżõ×5ŚfeeqåÓ¦Mć•©8Nll¬A÷Š“ŚŽxöģY|žłēXŗt)N:…ŗŗ:H„RČd2( žRL(Ɂ …łłłŲøq#¾żö[\¹rEūB! WIH`aš;w²°”/¾¢£[<_zL±XAAAHMM岜+ ,Z“ńńń:3?;v åååX.ߦšōōĀæżöw]]6$ł\Kė7U¾ąČČH­¦ą9sępé‹TėŪ›B,ćÓO?ո޹sgn‡«¦iT÷”+)ø1Ńb+!//?żōöļߏ{÷īqöC P(ŠŲŲˆŹŹJģŽ½›K⦾jƒ„% 'i#„B!<<<ŠæŽ`UŽ_c S§NHNNĘĢ™3±eĖĄĪ;‘““ƒżū÷ĆĖĖ‹W_}]‰ ===„„„ܵ€€…B( üė_’ĀšįĆõęųR_ÅųłēŸćßŖˆ†Vąžżū(**nEbSøŗŗ¢Gøvķ®^½ŖµŽµµµĪ@HOOOdeei¬į錵+ŅŅŅpüųqœ?žūx“ZL …ĉ'ŸŸo°WX pÄ śzåęęrŁ:„Ba‹³„ cŹ”):æā:tŠČ×ŌXYYįĒÄŠ”C1gĪŌÕÕįźÕ«ˆ‰‰Arr2o÷¤ōōtlo‘ššÜµĄ#ēb½Zܚ‹‹ ʍ‡ķŪ·ćܹsˆŠŠĀöķŪuš„Ÿžyųłł!//«V­B}}=V®\ŁŖÄyź_uńjC@@®]»†ģģlNŠ0Ŗ|ĄŖĢ+*Ģž=?’ü3är9¢¢¢°qćFŒ;¶…w` Z") *++£ØØ(­ĖWČ×חŗtéBŽŽŽdggĒ)‘*=¤iäććCo¾ł&effRcc£ŃåČ'““4źŲ±#wæ³gĻę•ėڧOŪŃT(**¢ĄĄ@®ÜĘʆ¾łę:Ļ… x”N:ŃįƇuĪ]—²gĻ®;včl?sęL®^MM w]„ƒ8::źl;~üx@]»vÕ(ūšĆyĻeŌØQTPP ³ÆÖ¢E:Hcc#ņņņ™™É}åĢĶĶįąą€°°0LŸ>sēĪÅäɓѯ_?ŲŪŪsr(éŠīܹƒ­[·ā믿F^^^‹D¶?‚ƒƒqüųqn§Łµk×ņ¶nSq5”PGGG½GSgž‹‹ RRR0aĀĢy6wī\Œ;Õź™ež@’žżńŪoæ”oß¾€üü|ÄĘĘbéŅ„-ŅÓŌ9±¾\bźYį[³5„.,_¾‰‰‰'Ž»w/śōéƒsēĪm -ć %%%“qćFrss㸁H$¢.]ŗŠš5k(??Ÿjkk©®®ŽjjjčīŻ»“téRźŌ©“Nī”:ĢĢĢČŅŅ’¦OŸN©©©ŌŠŠšX©TśČ™ŁNX½z5wæ_~ł%w}šąĮÜ×¼-Ų¹s'yyyqc 2„är¹ÖŗR©”¾ųā ²““äź/^¼X£ž.²cǮݾ}ūtĪiΜ9\=uF[9ˆ łłł4räHn kkkĪÜl “JIW’ėä䄰°0Œ5 ĪĪĪø~ż:222ŠŲŲ'''Lš4 :tĄ¦M›pńāE_)„R‰śśzģŪ·W®\yģ;Y[[#<<ƾśj»-dš8q"Žxć |^uÆ*„·µˆ‹‹ĆąĮƒ1zōhœ9sĒĒʍµf±‰DX°`¢££…ŅŅR|łå—˜8q"/oÆ.Øē?֗½ReTķņ›śųų`ß¾}ųüóϱxńbŌÖÖā7Ž0'iØD)õhTWWW„††ĀĶĶ W®\Į¦M›šš ¹\gggL˜0„R©„P(DJJŠ^V^TTŌę„5‹Åø’>är9f͚'''£g;···‡ jjjxā*Œ¼¾¾åååœ(Ö8::ā—_~A@@ŹĖĖńć?źŻęį™gžĮ®]»¹\Žķ۷ÐD7ź¢ž¾ßK•^Ō[nėĆG}„Ū·ocŻŗu8žÄŻ»wqųī,BrIDATāÄ ¬_æ …±±±xłå—ѧO‚§n]¶T*EFF6oŽŒĶ›7·Ų|m*++9Ł]=ø±gĻžÜ’§OŸnó8ŽŽŽˆžĆW¤¾Õš.„‡‡s–/CźĢO!śc1›®×DÄķGŲ]=Ū;A=˾”÷ŃZL žžžčÕ«ģķķ°¬å*sÆX,F’žż1bÄ„„„ ±±©©©ČÉɁ‹‹ ƌƒ×^{ ;w†¹¹łSI$999ųꫯpąĄÜ»wĻØĪØ-[¶pÜSŻvĖ=‹U«Vm<ĄpiSѹ9XXXpžƒņü3*œ>}šKēcPæm5qN-"@‰D‚įƇĆŪŪB”EEE8wīŹŹŹ„±cĒā…^@ēĪ°—īöķŪ(//‡··7ʍ‡>ų\ö§ r¹EEEHHHĄžżūQTTdŠĆ.--ÅŲ±cqžüy2™L†µk×ā½÷ŽĄøĒčŃ£¹r///Œ5 óŖņÉ'cq›© •J5¶T€»wļāčŃ£Ąópēååiģn IIIÜ>MwĘՇI“&`­Y³fń>&eee\T€••ʏopæĶįäɓZ 211{O[rzŃ;¢¢‚>śč#  ”PH:t #FŠ?žńZ±bM›6üüüČĢ̌襁TWWGDĢ—R^^N«WƦnŻŗ5kŻz‡*nĢĻĻ–-[F>lö™¬\¹’kļååEŃŃŃOC† !777žµN=ĀV…ŒŒ ^lpp0½żöŪ4ž|=z4YZZ’D"”pmöīŻK +?~<}šĮōŚkÆqż^$­ŹwŠ·o_š:u*͟?ŸĘŒĆŚŁŁµ(šW&“ńBē{ōčAóęĶ£7ŽxƒÜŻŻ¹ė_|ń…FŪÖZ± yyy‘••ÅÄÄŠ[o½Eļ¾ū.õīŻ›/>>^’Õ“Š@”J%effŅ'Ÿ|B$ ÉŽŽžüżż)00ÜŻŻÉŹŹŠ<<44”īܹĆ՟?¾ĪŗB”¾žśk^’ŌYßŃёŽ=Ŗ1§ęĀŻļŻ»G}śōŃ9‡… jm×Z¹yó¦Ž--BCCyQĶm…€ØušR©Dzz:N:…ääddeeqÖ ‰DoooDDD`ųšį Ņŗ-Z^^vļŽ­[·>5; 5………1~üx̘1ĪĪĪ:­1„„„Ųµk._¾Œ‚‚ŌÖÖrŁŅ „øøøfwÖ-//ĒÖ­[qīÜ9<|ų666čŽ½;bbb“Ę<%''ćȑ#øyó&***`ii‰ž={bŹ”)¼lźsō&%%įŌ©SČĪĪF]]ģķķń·æż Ó¦MÓŗ+—Jprr!C“ĪY.—cĻž=8|ų0 var lwsgs_user = "$lwsgs_user"; var lwsgs_auth = "$lwsgs_auth"; var lwsgs_email = "$lwsgs_email"; var lwsgs_html = '\ \ \
\
\ \ \ \ \
\ \
\ \
\ \ \ \ \ \ \ '; /*-- this came from -- https://raw.githubusercontent.com/blueimp/JavaScript-MD5/master/js/md5.min.js -- under MIT license */ !function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t),e=(n>>16)+(t>>16)+(r>>16);return e<<16|65535&r}function r(n,t){return n<>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<>>9<<4)+14]=r;var e,i,a,h,d,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e>5]>>>t%32&255);return r}function h(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t>5]|=(255&n.charCodeAt(t/8))<16&&(o=i(o,8*n.length)),r=0;16>r;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(h(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="0123456789abcdef",o="";for(r=0;r>>4&15)+e.charAt(15&t);return o}function v(n){return unescape(encodeURIComponent(n))}function m(n){return d(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this); if (lwsgs_user.substring(0, 1) == "$") { alert("lwsgs.js: lws generic sessions misconfigured and not providing vars"); } function lwsgs_san(s) { if (s.search("<") != -1) return "invalid string"; return s; } function lwsgs_update() { var en_login = 1, en_forgot = 1; if (document.getElementById('password').value.length && document.getElementById('password').value.length < 8) en_login = 0; if (!document.getElementById('username').value || !document.getElementById('password').value) en_login = 0; if (!document.getElementById('username').value || document.getElementById('password').value) en_forgot = 0; document.getElementById('login').disabled = !en_login; document.getElementById('forgot').disabled = !en_forgot; if (lwsgs_user) document.getElementById("curuser").innerHTML = lwsgs_san(lwsgs_user); if (lwsgs_user === "") document.getElementById("dlogin").style.display = "inline"; else document.getElementById("dlogout").style.display = "inline"; } function lwsgs_open_registration() { document.getElementById("dadmin").style.display = "none"; document.getElementById("dlogin").style.display = "none"; document.getElementById("dlogout").style.display = "none"; document.getElementById("dchange").style.display = "none"; document.getElementById("dregister").style.display = "inline"; } function lwsgs_cancel_registration() { document.getElementById("dadmin").style.display = "none"; document.getElementById("dregister").style.display = "none"; document.getElementById("dchange").style.display = "none"; if (lwsgs_user === "") document.getElementById("dlogin").style.display = "inline"; else document.getElementById("dlogout").style.display = "inline"; } function lwsgs_select_change() { document.getElementById("dlogin").style.display = "none"; document.getElementById("dlogout").style.display = "none"; document.getElementById("dregister").style.display = "none"; if (lwsgs_auth & 2) { document.getElementById("dadmin").style.display = "inline"; document.getElementById("dchange").style.display = "none"; } else { document.getElementById("dadmin").style.display = "none"; document.getElementById("dchange").style.display = "inline"; } event.preventDefault() } var lwsgs_user_check = '0'; var lwsgs_email_check = '0'; function lwsgs_rupdate() { var en_register = 1, en_forgot = 0; if (document.getElementById('rpassword').value == document.getElementById('password2').value) { if (document.getElementById('rpassword').value.length) document.getElementById('match').innerHTML = "\u2713"; else document.getElementById('match').innerHTML = ""; document.getElementById('pw2').style = ""; } else { if (document.getElementById('password2').value || document.getElementById('email').value) { // ie, he is filling in "register" path and cares document.getElementById('match').innerHTML = "\u2718 Passwords do not match"; } else document.getElementById('match').innerHTML = "\u2718 Passwords do not match"; en_register = 0; } if (document.getElementById('rpassword').value.length && document.getElementById('rpassword').value.length < 8) { en_register = 0; document.getElementById('rpw1').innerHTML = "Need 8 chars"; } else if (document.getElementById('rpassword').value.length) document.getElementById('rpw1').innerHTML = "\u2713"; else document.getElementById('rpw1').innerHTML = ""; if (!document.getElementById('rpassword').value || !document.getElementById('password2').value || !document.getElementById('rusername').value || !document.getElementById('email').value || lwsgs_email_check === '1'|| lwsgs_user_check === '1') en_register = 0; document.getElementById('register').disabled = !en_register; document.getElementById('rpassword').disabled = lwsgs_user_check === '1'; document.getElementById('password2').disabled = lwsgs_user_check === '1'; document.getElementById('email').disabled = lwsgs_user_check === '1'; if (lwsgs_user_check === '0') { var uc = document.getElementById('uchk'); if (uc) { if (document.getElementById('rusername').value) uc.innerHTML = "\u2713"; else uc.innerHTML = ""; } } else { if (document.getElementById('uchk')) ocument.getElementById('uchk').innerHTML = "\u2718 Already registered"; en_forgot = 1; } if (lwsgs_email_check === '0') { var ec = document.getElementById('echk'); if (ec) { if (document.getElementById('email').value) ec.innerHTML = "\u2713"; else ec.innerHTML = ""; } } else { if (document.getElementById('echk')) document.getElementById('echk').innerHTML = "\u2718 Already registered"; en_forgot = 1; } if (en_forgot) document.getElementById('rforgot').style.display = "inline"; else document.getElementById('rforgot').style.display = "none"; if (lwsgs_user_check === '1') op = '0.5'; else op = '1.0'; document.getElementById('rpassword').style.opacity = op; document.getElementById('password2').style.opacity = op; document.getElementById('email').style.opacity = op; } function lwsgs_cupdate() { var en_change = 1, en_forgot = 1, pwok = 1; if (lwsgs_auth & 8) { document.getElementById('ccurpw').style.display = "none"; document.getElementById('ccurpw_name').style.display = "none"; } else { if (!document.getElementById('ccurpw').value || document.getElementById('ccurpw').value.length < 8) { en_change = 0; pwok = 0; document.getElementById('cuchk').innerHTML = "\u2718"; } else { en_forgot = 0; document.getElementById('cuchk').innerHTML = ""; } document.getElementById('ccurpw').style.display = "inline"; document.getElementById('ccurpw_name').style.display = "inline"; } if (document.getElementById('cpassword').value == document.getElementById('cpassword2').value) { if (document.getElementById('cpassword').value.length) document.getElementById('cmatch').innerHTML = "\u2713"; else document.getElementById('cmatch').innerHTML = ""; document.getElementById('pw2').style = ""; } else { if (document.getElementById('cpassword2').value //|| //document.getElementById('cemail').value ) { // ie, he is filling in "register" path and cares document.getElementById('cmatch').innerHTML = "\u2718 Passwords do not match"; } else document.getElementById('cmatch').innerHTML = "\u2718 Passwords do not match"; en_change = 0; } if (document.getElementById('cpassword').value.length && document.getElementById('cpassword').value.length < 8) { en_change = 0; document.getElementById('cpw1').innerHTML = "Need 8 chars"; } else { var cpw = document.getElementById('cpw1'); if (cpw) { if (document.getElementById('cpassword').value.length) cpw.innerHTML = "\u2713"; else cpw.innerHTML = ""; } } if (!document.getElementById('cpassword').value || !document.getElementById('cpassword2').value || pwok === 0) en_change = 0; if (document.getElementById('showdel').checked) document.getElementById('delete').style.display = "inline"; else document.getElementById('delete').style.display = "none"; document.getElementById('change').disabled = !en_change; document.getElementById('cpassword').disabled = pwok === 0; document.getElementById('cpassword2').disabled = pwok === 0; document.getElementById('showdel').disabled = pwok === 0; document.getElementById('delete').disabled = pwok === 0; //document.getElementById('cemail').disabled = pwok === 0; /* if (lwsgs_auth & 8) { document.getElementById('cemail').style.display = "none"; document.getElementById('cemail_name').style.display = "none"; } else { document.getElementById('cemail').style.display = "inline"; document.getElementById('cemail_name').style.display = "inline"; if (lwsgs_email_check === '0' && document.getElementById('cemail').value != lwsgs_email) { if (document.getElementById('cemail').value) document.getElementById('cechk').innerHTML = "\u2713"; else document.getElementById('cechk').innerHTML = ""; } else { document.getElementById('cechk').innerHTML = "\u2718 Already registered"; en_forgot = 1; } } */ if (lwsgs_auth & 8) en_forgot = 0; if (en_forgot) document.getElementById('cforgot').style.display = "inline"; else document.getElementById('cforgot').style.display = "none"; if (pwok === 0) op = '0.5'; else op = '1.0'; document.getElementById('cpassword').style.opacity = op; document.getElementById('cpassword2').style.opacity = op; // document.getElementById('cemail').style.opacity = op; } function lwsgs_check_user() { var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState === 4 && xmlHttp.status === 200) { lwsgs_user_check = xmlHttp.responseText; lwsgs_rupdate(); } } xmlHttp.open("GET", "lwsgs-check/username="+document.getElementById('rusername').value, true); xmlHttp.send(null); } function lwsgs_check_email(id) { var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState === 4 && xmlHttp.status === 200) { lwsgs_email_check = xmlHttp.responseText; lwsgs_rupdate(); } } xmlHttp.open("GET", "lwsgs-check/email="+document.getElementById(id).value, true); xmlHttp.send(null); } function rupdate_user() { lwsgs_rupdate(); lwsgs_check_user(); } function rupdate_email() { lwsgs_rupdate(); lwsgs_check_email('email'); } function cupdate_email() { lwsgs_cupdate(); lwsgs_check_email('cemail'); } function lwsgs_initial() { document.getElementById('lwsgs').innerHTML = lwsgs_html; if (lwsgs_user) { document.getElementById("curuser").innerHTML = "currently logged in as " + lwsgs_san(lwsgs_user) + "
"; document.getElementById("ccuruser").innerHTML = "Login settings for " + lwsgs_san(lwsgs_user) + "
"; } document.getElementById('username').oninput = lwsgs_update; document.getElementById('username').onchange = lwsgs_update; document.getElementById('password').oninput = lwsgs_update; document.getElementById('password').onchange = lwsgs_update; document.getElementById('doreg').onclick = lwsgs_open_registration; document.getElementById('clink').onclick = lwsgs_select_change; document.getElementById('cancel').onclick =lwsgs_cancel_registration; document.getElementById('cancel2').onclick =lwsgs_cancel_registration; document.getElementById('rpassword').oninput = lwsgs_rupdate; document.getElementById('password2').oninput = lwsgs_rupdate; document.getElementById('rusername').oninput = rupdate_user; document.getElementById('email').oninput = rupdate_email; document.getElementById('ccurpw').oninput = lwsgs_cupdate; document.getElementById('cpassword').oninput = lwsgs_cupdate; document.getElementById('cpassword2').oninput = lwsgs_cupdate; document.getElementById('showdel').onchange = lwsgs_cupdate; if (lwsgs_email) document.getElementById('grav').innerHTML = ""; //if (lwsgs_email) //document.getElementById('cemail').placeholder = lwsgs_email; document.getElementById('cusername').value = lwsgs_user; lwsgs_update(); lwsgs_cupdate(); } window.addEventListener("load", function() { lwsgs_initial(); document.getElementById("nolog").style.display = !!lwsgs_user ? "none" : "inline-block"; document.getElementById("logged").style.display = !lwsgs_user ? "none" : "inline-block"; document.getElementById("msg").onkeyup = mupd; document.getElementById("msg").onchange = mupd; var ws; function mb_format(s) { var r = "", n, wos = 0; for (n = 0; n < s.length; n++) { if (s[n] == ' ') wos = 0; else { wos++; if (wos === 40) { wos = 0; r = r + ' '; } } if (s[n] == '<') { r = r + "<"; continue; } if (s[n] == '\n') { r = r + "
"; continue; } r = r + s[n]; } return r; } function add_div(n, m) { var q = document.getElementById(n); var d = new Date(m.time * 1000), s = d.toTimeString(), t; t = s.indexOf('('); if (t) s = s.substring(0, t); q.innerHTML = "
" + "
" + "" + lwsgs_san(m.username) + "
" + "" + d.toDateString() + "
" + s + "

" + "IP: " + lwsgs_san(m.ip) + "
" + mb_format(m.content) + "

" + q.innerHTML; } function get_appropriate_ws_url() { var pcol; var u = document.URL; if (u.substring(0, 5) == "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) == "http") u = u.substr(7); } u = u.split('/'); return pcol + u[0] + "/xxx"; } if (lwsgs_user) { if (typeof MozWebSocket != "undefined") ws = new MozWebSocket(get_appropriate_ws_url(), "protocol-lws-messageboard"); else ws = new WebSocket(get_appropriate_ws_url(), "protocol-lws-messageboard"); try { ws.onopen = function() { document.getElementById("debug").textContent = "ws opened"; } ws.onmessage =function got_packet(msg) { add_div("messages", JSON.parse(msg.data)); } ws.onclose = function(){ } } catch(exception) { alert('

Error' + exception); } } function mupd() { document.getElementById("send").disabled = !document.getElementById("msg").value; } }, false); md5.min.js000066400000000000000000000074401357643561300354660ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t),e=(n>>16)+(t>>16)+(r>>16);return e<<16|65535&r}function r(n,t){return n<>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<>>9<<4)+14]=r;var e,i,a,h,d,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e>5]>>>t%32&255);return r}function h(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t>5]|=(255&n.charCodeAt(t/8))<16&&(o=i(o,8*n.length)),r=0;16>r;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(h(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="0123456789abcdef",o="";for(r=0;r>>4&15)+e.charAt(15&t);return o}function v(n){return unescape(encodeURIComponent(n))}function m(n){return d(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this); //# sourceMappingURL=md5.min.js.mapneedadmin/000077500000000000000000000000001357643561300356005ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-originadmin-login.html000066400000000000000000000002321357643561300406610ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin/needadmin This is an example destination that will appear after successful Admin login. This URL cannot be served if you're not logged in as admin. needauth/000077500000000000000000000000001357643561300354515ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-originsuccessful-login.html000066400000000000000000000001411357643561300416200ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin/needauth This is an example destination that will appear after successful non-Admin login post-forgot-fail.html000066400000000000000000000001271357643561300377360ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin Sorry, something went wrong. Click here to continue. post-forgot-ok.html000066400000000000000000000002331357643561300374320ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin This is a one-time password recovery login. Please click here and click your username at the top to reset your password. post-register-fail.html000066400000000000000000000000331357643561300402560ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-originRegistration failed, sorry post-register-ok.html000066400000000000000000000012561357643561300377640ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin
Your registration as is accepted,
you will receive an email shortly with instructions
to verify and enable the account for normal use.

The link is only valid for an hour, after that if it has
not been verified your account will be deleted.
post-verify-fail.html000066400000000000000000000004221357643561300377400ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin
Sorry, the link was invalid.
post-verify-ok.html000066400000000000000000000007631357643561300374460ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin
Thanks for signing up, your registration as is verified.

Click here to continue.
seats.jpg000066400000000000000000003576021357643561300355120ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin’Ų’ąJFIFHH’įÜExifII* ’ š¤¬(1 “2Ąi‡Ō%ˆnsamsungSM-T715CHHGIMP 2.8.162016:06:14 09:34:29‚²"ˆ0220ŗĪ’ā’ ’ź|’bņ 0100  €  ¤¤¤¤ ¤T 2016:05:13 19:25:312016:05:13 19:25:31ćd"d0100  Z@PK08LLIC03AM K08LLIG04SA N¤E¼y"’į3http://ns.adobe.com/xap/1.0/ 3264 2448 samsung SM-T715C Right-top 72 72 Inch T715CZSU2AOJ2 2016:05:13 19:25:31 Centered f/1.9 Normal program Exif Version 2.2 2016:05:13 19:25:31 2016:05:13 19:25:31 2.27 EV (f/2.2) Center-weighted average 2.9 mm 98 bytes undefined data FlashPix Version 1.0 sRGB 3264 2448 Auto exposure Auto white balance 31 Night scene K08LLIC03AM K08LLIG04SA N 25, 0, 5 E 121, 34, 31 ’ŪC!#,J0,)),[AD6Jk^qoi^hfv…Ŗv~”€fh”Ź–”°µæĄæsŽŃąĻ¹ŽŖ»æ·’ŪC!!,',W00W·zhz··················································’Ā €’Ä’Ä’Ś šŹ)Ņ^‰›%`ę QuåśVSĄy“5!ØöĒ®»P‡’2S8@ ĘāK+4HAJ*:Yź3±Äń,!N‰„‘š„! €(@«¹i¦”‹œ¤U²÷bS6yŽmsQ›£”’²(Zź˜$v°`‹’E"A@²…€ T²”n^ÖVr €(€ŅūåöYSŒæ2ĪtE;Ē®½ƒ1ÄĄ°yԜŒ€±ŅŹ‚¢@R€ZŁŖ¦£Š{£™ä\ !’PX@€ Ęå.”e9Ų[/Y}ĢӝžR5ĶFl•9Y›!€Īē8‡{!‚.Šd!Ŗ RĮFW&K …)`B§ŗ_I£šsƟd Ņ4v9Ū©K[:O9Ȅ2 a,©d »ź{­ĖēĒT¤8.¤2 @PBˆ €FåhC0–X-,»—ŽĪSĖo%(Ț—eNvbČ@ S½rˆzlēT̼„ˆB ` @4Q-—fF³³ENkĦŒš:–4ž¹}09ÖSž§˜„M"膄ŁIX:' Õ q²€)øQ©«g;V–RÓ78@(ZjP!­)š‰©tK3fS (t³„–ĶĘ™ØĀä×&AA(°Ø@ ,½óÆtm9[ąÖ3[M£g:A»—Ł œģķ©É:j"9.Ž’õ6S5éN“!ę £®m!š–B@ @ É @( !@cŽy×ŗ|źę ¢šŅrŌEZ%Yf¦„be*ҬLŁeŁ‹ ,É)Õ7¬ŚŌ°ęj8* EęB” “@T FĽ3ÆNwŃ6œuŸ&š;Ī ‹P:Å%dD—¼½É\Óvy«ŠœfŒ˜–/Ŗ!²,ļ@!ē8˜ FUrf„™ “hÉ JB‚(!¹zOQók˜£gkVr²Ą-!@*źZŁ•¦lŹYi›˜’ €§¤ēr®Ę2ŠH§Eą d€€X*€ 5o:ė5Š©ŅĻ&ńē¹čt8/0³FAcbZ¾ˆ§;8ŁŹŗ¤š¬„Śō6–ε CĻLV >–\ååX¬Łš@)³& B”¤( eō§sgˬPØŁ‹QWG+€P®  T.Alȅfä)č8¤=vyĶÕ9Ō±yh„ ¢)”MõséŅRĀ›K¬ųwŒ's Ą…5/H/XčbĻ.¦  ™‚—Ń);ŗ¦Ī'3%Cśn8[ʹٚ H hĄ¤ Rž˜ö9ę ( `˜° E “-LŁ ’‚P G[9NėęNµ’µcRó^`„U‚„4Sérė£Iē\›:YĒxńŁHd„  Ōŗ)¹{BĻ&¦J „õF N–dɃˆJ‘ƹļ—Ŗ<–ó²T  ) `@:K¤člę`Įβ@ Š™°€   @(€6jĢJp;AAM–¤ UE€T4Sčņė“•dcµšÖ>n§2RĖ£f„čuO%œh@ Š÷G3‰Šģu³TŽBėĪ FĪT  HõK꬙(%Č¶Q›l€@@ Š(*ƒ¹“šz+Aå)@6¼b’ UEb @€!@)£×Ė®k¤t³¢kYó' …!„čn6½xźA%čj=ÖĶ;Ækž”8x„!šņ€R —”̈”((°RKұ@ƒ±Ķ2z+Ģhčp)HRĖ€J€Ń© ØJSÓϬl†’Ł“Żx¬ÉHBAeŃ£“½'—L ņöŠCŖŗ§j4`§:ņ )@ (ČB@7Ø€°)(!J…¤Nēk‰č8˜‰, Ø@ (¢ĄŖH*€Rƒ×ĻØŃ”Ø’Ī‰ę®hÉ„–š:'*ęé/Ŗ Š†ćµžŗŃęNKŌär<†@… 4}ē P €@)“… ōt¦ŒšóDµøĀŠ Y  (°T … ūÖ¬‰y/2œk…ƒ”LČ(,µHHSrčõÄÆ:m{,ō¤<‹ź9œOĢ) € €(P HPB¬((ōdčBėĶ‚š0“„^Ē äŠ @ ׍älĪvdŔ€€ Ŗ*j”CVu¹ŅóĪ’äŁčNF(j;®“µz&—'œšœHR)  €@ PR%… PŠŃÅ:˜)³‰JBš\4[Gˆ€@(¢TP@;gQ¤i:ĪĒ+9€@@—d6l¶p! g}gRfožu“¬oS™ SRÄŃō¬Ł•óœq° Šd€  €…"‚”€$‹PXA¤”@ˆ™6s:Ö#ѕB†×`‚ Q € @(ōK‰“P±ŽĻ=s=ią³lu‹^{*4SgCgžĪh”ŅēŖt—œß,ßdrŌój%Ų{«ŗe|ъ†#™š„@)’ ĄP)€‚ R—•‚™;W€¦UyŠ‚ Q÷ž\t„(6{égxYĀĄ ,mjr؀Q£FŽĘlóźuÖsåÜCÓ\³Æ^Mē‘xĖ%‚!čÆQ³Ģs10f²M™2B€H€ €RF(!AH w·‚h„;b€Ą[š€@é5f·.ćDH{.}Ļƙg+ EB%]E)£Ōv<śĻ>˜–rĘęn“źzńKčÖH^rć6-ˆn½gS‰Čåäf” (Ń €,RPR E(( (©#Gjó 6yŹ*䠆m!D  yŻ^ٽn}·6¾aē°€…D»Š£Õ›sg—§xN @«b¬¢Š“K„ēq› @‚€S+(XѤģyČ UŠK‘@ P ¤×5«;„ R”Zx&±g+˜X€U§„4q) z]Ÿ0ę}(óÆBzłĢ‰T@€VīœćR@„T°dŠ“K„ÅĪ.P R@;ƒŠä ¦AU@“ä@P©ōĶm7gbÉ£@²üå'+0U”iķJr<„4lölł’ö0™®Éč6æ?:ŹóÖ:œe€• l :YÜįp !P UJ %€ (”jźYg;Ī €%   )¤§Sg3’Y@ (Ā@(ōĖÖĮŌ2n©Nrų¬Į %¢…,iiÖOus<ē˜†IŲŅńŽ6sN§Uf°¹øŹ‚J)«62å0“²ˆ `‰EZ¶*ņ×8€ €Ø ±¤))W ČTl, @ @(÷Ė»9”Ńƒ'`dņœˆP€ XŅīMžŖźœ:Óiµ8 Ķ&¢ZŹ™č”įX"*‚,Zšg“²ˆ `‰EZØŅóøĶČ B ¢Ø$ @,P-%UQ€€ *Ą>”ŗ³™ĢŃĢŹr<†A@ZŠhѳŅzR‚0°‡œÕ›©ŅµLטćdHP“ˆ°„%L¢†H€“²ˆ `UEZ%ŅęĢ^` ¢ØP@,)¤ % “Q¤@( @=²õ°pb«gœó(  =¢6t)LžEÉĄĢŅ[gCkŚj¢¹tęJEI`BŹRDX4s PU- ² %E–…ē®d€€ØŖ @ €D¤!B‰BŹ–@  ŅŚō$9’2u)¹E  lŁ©u-SGņ™:Mt—fŒ®L™³$B  @V·/=s—0²”‘­Č¢ĖH,€…@Ŗ*£:Ä@(€€ØŖ@  (…*ˆ* T ` P @ŚŌŃÜÄd†Ź°@)U@¤BŅķčĮ*@‰•4¦²Dw5,ēyµIŠŃĢ€€QD“‚Ą@Ŗ‰.@ŌPR­ąœČP …!A ¢Ø€ € BÄ(”BĄ (X€€P4hDd§É¢Š€D¤Õ–Y ¶UB$C=¬o$@]Ķē”)I,¦P(KH(RŅ)",ÜSP-½NČ!@€P( Š DP ¢¤J ]– ¦øŃ qØhŌhål •Yd^™Ö—6@ŗš«.r„‰Ń®'H¹¹ŌÕ9ėžR… $²˜ @‚*Ņ”ŃčL®Ź`óœĮB’"Č ĒH©V/+q`“„¹( –€D )J ¶Ä( ¤ś'ā±JBœ«%7NK‚P(¤JBĮK¹F.Hwz„į©„ŗ£,’&ŁčbtK˜”³Uqq›©S’ B€T }6l²ö:§%Śb^“Ī`PK:GH[Ée(².`P @¢ (P H )śÖXęr9¬$d‡:…4tˆ× @ * Rīj&nHu-–ŌHVŖˆ‘"iž¢oÕ2Ī„ŃeĪ\ĖIQ!¤ÅB@ (4hŃė:J)¤äÖ §#N`JhŃ„‡%–}$óKŖąs” `!@ĄĀ@ QeP …@ (€ (P=ģź©£I`¾uņœČ tÆØĖ5K¹©fY RÕ”%–ZÜ ’ĪŅno•±H,.I ŁY@-Ž«č;§Zēä“är\‘2@ ”ŃķLUŒéź®e<ēy«G–RՌːPP .I ”€(€(!HPP@@H( (萦Қ6w9Æ„É t7/€(„\1Tŗ–˜¹P%ŠEE³@D$³¤Y¬Ś"––D–D€ÕœĄ!@F„õĶdŹJę˜*€ 4zÓ©ƒ) ‘‚=hó/žPI,T, € EP@¢P B €€‚ @jB€Nē#™ hŌÖL€P"Uu5›˜„-ZiME– 'EŹĄ¢$@E ƒµž`@P ¹{Mą‰›2”(€:/„!̇C¢C9”čm=ę_€Ā–Ō,€”@°P"¢€A @”H£$)£sR\ِ ¤…-,¶²Ķ2ƒKeŖEΌµ-"JIŃ5»„4•žŒŅ’ß:䕔/Iw7™² - @čw0SiŲÉČٳ½œ„š.L€PA,!@@-ĄP Ą(DP  ˆ– B”é5¼ī'dѕ–YS:GUĆQ%Ķ2ø Ao.É7X!M%f„0t® š„ōΓЉ›" )jÄĄBŽÉŌŃ»5—ĪhŁSП=KĀ©@$²% *€Y @ ( $  € SRõĪįĖYÉ@ (6eE—DLŁ”§IMs (”$SŃ!so5ÉSI¤ˆ\ÖH•H ŗĪ·4%™¹ĖZ(‰,ˆ=¬2Ā0  @’Č”( @  ‰AH@ … €P€HRP€P€Z‚((!ŲŌ3²sÓJE*€-;˜SR՗9!BŁH ØÉ”R*i7f‚ö³+Ųīœcē[ĶR˹«4%™¹!Q¦Ź"K"R˜ (,Ż%™BKP @•dŲ3YP€P‚€ "Ō!Hˆ@ e!’b›®fĘ£q‹xŚ•@±„Ņr³ ԓ͐ «e”@€­Ł¤źw*lѳ™Ųäy×Ķ P hK¹«4%™`PVĶ‘%€”§Ic ‰›˜’ĀP!;&ĀĄ«@@(€Ŗ ”€) P( člŃĄČŠZĄ)c®fŽÜ ( )ز!jŲY’‚­!tNõźOIO86 ęx#šńXP’²Ł­Ķ d`‚©ŖŲÉ\± Ņu—•r‘œÜĖ¢€@Né…ĀĀØXŠŠJP@źlśG€ņ Xé ē¤:†[8kXP€ n4bĢ «eµIŽĻrw!€dٲ)Ī<Ė• ,RĘę¬Ų–K‚X-hŁbD—0 €¤Ņt–N•sdL\ːE!@ˆ„ŃB@(PR :š=gŹ@ o3¤+5Ī·aåuŹŠ•DAe„nbŁjŖ3 ×¹= £&M›2r9‘³Ģ`›ĢŌR”„’‹qožčB@²čÓ:Jrj.Ž÷=ėŖ 9Ē%/#$ P %€"­—¬Ü%™ø©¢ES”aY ZÜŽ¦„IfXĶ€©Ö[7³1˜‹R(E!¤ @¤(    (@ŌRä0¼Ī’XŃ@)*]y­ŠP,»±“µĶ®+ŗ Ą)Ģ‚ɲ5šŹXAfŗĶŗ9ø©ŠĢ©DL¤°^“¦¦„IfnrČ*t—Sq²fȘ¹ 4€D@P ( (R!H „,}4ŁĪ$p›myī² ( ¤čĪČskˆB€  P$é&Œ5‹¼Y”$JfŗĶ—79øŹhŁ%ŪyhB&nbĄWsz›¤IdLÜ*"Ķ›̳›ˆ'R(Ą ‚€€PŠDŸJŗ©9G‹.fA*.-ČPV’¦J[P"Iß9ŅEĀ˼®.bRk¬Ų‰ĻXˆ)WSU±’ē(…UÜé¹”Y7‹'ItŚn™LŁ›’ (–D›2¢ (@R(4;IŁ:į.@E¶(XY nQ‹`UJž™˜f \]āȄҗ¤Ł¬³ĻXˆ[5¶Ä"K˜,w7¹°LŁ,t·&ÄIfR\ŠB€€)¤( Š#¼$É P†VŲ )¤†Ķ”ÉW Pi=Kä›-!›˜€Jž™˜…ŹŅ:r3rM%)™w7ZŹs×8€µ¹ŗ±"K˜‚D[7¹ŗ6DÅĢf¬n4՛,IdLŲAH€€@(€B€ €  #¤ž©0óĶae¤”  4h‰ŠŃ’œ×Š¤Ļ@č¼›ĆvQ›œ\Bw™č”/55ɼ\“I© ]ĶŁqX×2BK¹ŗ°‰.b°ˆŅķt¶o¢D¶hŹyµfĖYY bJˆ@A@¤)@…€ (wĢė$4Eäf²E €(JR›^PNŅY!WuÉ®n–ZC¹v™či …ŃÉ× ›šQĶw5f±YÖ:³Č…#Z›­Dˆ²%JR’½)Ń$¢Nՙ|& ;Mjo YĢ«`²$@ @€ ‚(!@ ( Ō ”¦€(#²TźC¢š(4Rœ—Ļu¤ė%HP±yŗjh¤ĶĪ.b “ķ'd‹“+†šÖ.Iў‡)w5©¬V53¢œJ©¾‹Žē&’ƒŖJŁĢŁ„ĀŲV%Ł‚šUÜ՚ŖIQ"fĄ" Pˆ@B‚@ @€@K Ń B€J…“±ŲĀEђ%ćnTm=Tɂ,\ŗYŖ£79¹Ė N³=JS+™¬]į™fäč™,ަ¹Öu3Šąhģ{-óK»;&Īd—&‹gškvw2›6y2š9Ŗ55¦‘IQ"f"(€((X€("”²PPR°!A£©Jd€…!„_=øQN³:N‡2“y(!›Œ\€;3Ņ6 .V7…Ć5ž©“S{šēXÖ4Ķ;×CFœi•Äh;Y…äzOzlĀč6P K.ŚJ°B™` " P@PB…$€(FČ(uLƒ&Ą6dÉHSٕżŌXč›gŠyĮW+™Ų¤¹ēr@:§Y2RØ­qo ó155©¾uĪćW>ŚźCg‘}Q,I®J=,EœV„šĖé„Öz,óĖĢčZ”ń/œ ė'Pu”ęk¢u³Œ»;3gŖĪǐõ#Ľ¬ś'Ģ—Ī ¤źƒ+']4LÜęÄPi³P°,o*H*‚ŠB€Y€él°Rę€YA)T ›­³ĮI‚‚ђ‚@тŅlä¢"ĄH @ABȀŁ5Ń2`Ōę¾Z¦9’©ŚIPķ[Ž ŚĪǚ^‰£ĘŗOulóź`ńKÄA “4«'JŻ…e%™d“ŻsĪQŬ™XD€  ‚@K" „²Ä,ŹPe¤Z žĖŸh°·…)!A„Ø@R'sĪ“„H `(,ˆöMTĮMŒØ hȍžė<ŅŌōš¬›<ńČ÷×¢‘ę\ש<ņł•gSŒ)(@²m4øoS„%‘˜…‚ĖV%% €…-"¬”«VÄPJ²$(”P Ŗs-D,€-S1ŗĮ -R2)3@e!@P ZD–S×5É:•ĄW¤ö'”ć͇k!ē^§¢Ļ<¼×˜ Üąd…”"ØRB€tµ¤ébŌ"K2‚€ʔXLDhV€–D­T (—0 P(Té\"Pźœ–( @ d€„E@ ¢Y é5,É@¢µÉŠāR+1•¢„’Š A@ “¤"ØčMŠB$² ¶KQˆ°BʃqŖ@A™@*élRäUiŽĻ4ÕL”¤„)£$…".’–”€hŁĢ¤!KY (   ) P H©€œŌ“Ō Ō5-šÓH“"K2€ YŃkšęZE„B‘HÕn”€ •” «VĮbUKlPTŻ•yŹHėŖBŌV@!³&ĢŅS"Ah%‘P@ @U ”aHRu)Ęź-5.“åŌµ­MX¢¢D\ä×>‹žgø§Ļšņ®J •‘CFŖŁD¢€Ȃ­[` .@Ź*m:[Ā]$«1j@¬”… )Na! ‘P€€€%RJ @¬LķĖTÜŗL®,€²ō ›„5•Ļ[=(2q\¦ˆhźx&¹(šJ%€4j­”* ˆ!,ˆ*JP , ĖJ”ŁÖ¼Š2SEkF Z‡tą“‡@`Č A*,AE%‘PŖP¤( ˆ Š=`ѝŠŌ“„Ø€uOJ›DĮÕsŌĄŖwLŖ9œ$×   ŌŃ"€±ŗÕ” D!,ˆ*‹- °@Ø –,£G¢Ļ< jĶå²Pu8€hÉŠēd© A*Õ%€@-",€PŖ€hģyČ @(" B€S¬”…^V–Ė»4r]3OJf“š9ž³‚łĻRp8/dźn†ć¹ó×É.BŠ#5;œÄhé\ę²ée¤D „² €@]J% Øō&k”»²Ę*Āŗœ‰®rŠBP°!I` ­RĘe€XH * ¤U”B‚äɕ.ÄD é&Ą9ŻUźž”ÅAU§[)éLœĻQÄī`ąs\$6u†jej7fØ%„!,ˆ•D«eT@)eõ§­žY”BX)  iZ˜ŠQ D“ ŖE dÜt%¼š€X” ɲeæBĪ£zS‚ÓG%Ź`„=©Ģ2v! ń”„„;œ‰-•«T ȀA@)¶RːåŃSg%ČP¤€  ˆiZŹ,B„@łœī³@ŠB„Ščsk T‘ dé[^Kħ„9­­'sĪ]X!•Äš;YOIŃ9ŪÄľc€)$JSp4EÖ’ŠJˆ"ȀJR)Ešˆ„„!R(@!@ HU¤,‰,ķ”®v€!A-%@pµD#*@‘4z“zK“šņ!JtN :§ZŅw2SμJ”čz”ø‚Бބ4fZ±ŅĖA* ‰K"4DŃ ©tŌ² –Ø$ Ā€@P€ ZVØĢ°@®V¹¬ ,  `€¢­T+,©P ŸJĢG™yÆdōYĮzåW'Sv}$āq0Sg3©ŠńņØ²Ā€‚D4ʎsXt²ŠJ"DȀJĻC™‚‹4Yr¦Ø"@…•«£1 ŁS5ĪŠU ` ¢­P"Kd†AOMq—'¢ē±ć]™;¦O:“”ōOa“Čy—3UR@ XIčSg(­³T„H‘² „ , *¦„„–¬ °@ V"A` @:ęh–ó¶PĄ –­TfY”ŃÖĪŅqXKN©ÖtXq O@98®N©ē\ĄP@ØJH‹$ ŃI,oStTH‘² „ ‹A¶UDš „@RQ €„h‘)N™”¦mēhT°Qe.„Q˜ vģĵ!Oe˜_4`t¬öž%ąC č`ē))*@Ø«)%‘±¦°²jŗXTBe² P ()«,°šš ‰ ° UJؑ®fŠKy™“P A,%«VĄQ%QXnϦž9x©=Ör^q³‰Ź”%-@bPP V¬”fY CFČ„®–ZJŒfȀ A@ [,”©i”€ĄR€ (Z ‘%€ ķ™H¹ØfŠ-€-"A``µlŃEž¤‘H€Pe`¤BR%ĀȀ-[5H’Č„XMŃŁxĪ–j‚P‰™² (  Ur¤²Õ K4˜‚…Ŗ X€Vf Ūkš„P HXX(ŌŃVgDōIa,BؔR (Q-[5A,Ė$Q$hčSšÕ³vj‚ˆH™² -č›!•„9­\€Y@ˆŠ) ,ˆ€ZXF`‹|€ēh hØ X¦–METd,U‚T b… -,ÕP3sbHSD4jZÜm¢D¹€ˆŖĄ”)@*Ā€R’¬ (€€€µIX€S¦eeS šP“%:%2TFķē.[TfPH *€)R‚)VĖZĶĢdŠˆŠl„–µKTD–fĢ  P)TK@P‚ČĢJE€“ˆ°@ķ”BŹQTŖˆM&ˆT¢\®[VY(”P P jŁ¢Ó,ęĀ‚”Ņ¢µ²ÕȀDÅČ Ŗ)TK4ah( ³,P-Q’Ą€¬¢eaT“hˆ)¤Š) ¦Öå’@“U€%X€(±J©Ŗ„&nbšQ£Ś¾)Ń- Q1s ŲP*‘Q³™T,Ė1€ B’$°@ėERRŠ“ M4Aµ¹f  €ˆ«Z²”’̲$¦Ž‹Ł|Óe²Š Q3s’€¶ 6™!H©ŹZP „²1( Š€ ((-PAXJ@:EjͲRŠ“‰ V$@;'cĪ 7Y#  P“M& „ X«U5AY`©źŠ×šj“,Š„BFW9R‚Ń,źĻ0¹4ŗ\@ ( ̳.J€h @ @Pµ@$I`D ĖRƒ+µh…DJ™6lYu‚2 @ŠU "(D‰ŌKT ÜÄōĶ5T Yh%\ņX “@ Œķ=ĘRóT@XP ±  3s,€‚ @“-!2   KS@¤‹•-Z"™²%P 4z –[‚ @-Š %‘"@ˆ-RŁh3s R–„š •·Ō “@P‰YōŚē*¬H€³,Ė  €ж³(°@  (©A@!–‹JØ«,ˆ€4h±…·X"B ­"Ņ% Š %‘"€QKeŖ3r"PĖC"µ[E%D!3r"U@•6¼å * „ØŖL¤ ”,Ė2䠀€ “…“-€¬³,€(P@, š!H@„j *$() ”ŃŻyµÄˆ!@­P*€ BJĖ0 ) DU)l”dBZTÓ(Ėzm-%DˆEĶL4 ,ØP±‚”Ҭ%ĢB€ŠJŒĖ -P¶ØĢD”@ ²‚hUYEZØ-3s“!@ˆE"§s”Ķ®-DˆJ€ *Ā€,Ź ¤ µlDZšK ³AQ"q£ @ˆ€@„,T“jĉ›”@‰.@ @ ‚ŠPQ`JŒĮa  K( €QB*–­VY–E‹R ģž“É5–2H²Õˆ *€%‘"(, “(&¤-hµFY–hŹ€Q`ˆBd,Z¢ÅZ°ŒęĄŖ#2Ą€Q@P”BČX Ø !EŹ*ÕVYƒFHS”ÉjŠB ¢‚ĖTDP h!@ĶĢH€V€ ‚Š B€•,”‹„ējP°@¢…¢Dž©•ę–…EZ¢&n@‚$° hP((–@ (@ ²‚Õ°–@¤Q* @,Õ)-–e˜Š@¤ØAAÓÕfŒDhø— „åd"ŠXD!*e`*”P¶*”˜¹  $EH¤(‚Š€ "(€*€ AePJZØVYU HR @Ŗ ,“ ”e†sd (!@€ Š“«bÖ͐  -€”f%"@U…–؉›@ØMW8)@‚ŠUR°@P (…R.ŒĮAt ‘ «ŖZ“ P%L$ ‚ŠQ@ .”U„ĶȈE ,%‘H*”¢…²‚fĀ“  P   … D” )(Č6 [UR**Õ@Ŗ€Ø)( TQ@»P…dĶ‘-l%‘AB” U²‚K"€(€“›0C“+ˆR@"Š€   P («HP ŖZ% D•A‰(eŠ.–€’YŠĄdHČ)AE[($²€ Pe  D§”<ź)RC¬b²± „!”PJ¢ ض%Pµh–€2ŠY@(P)L€5P„ h[Fc P DµI,€ b€¢ ÉS”ŗąJyTQ²”äATŃH`€¤"‡c&Ž%  U€“P @@@ Õ°Z@’K hZtĀ‚RE*–ˆdC S )J `KP %”h;YĄŁcT-,›­™94` z0( ģÄerK€  ‚€EUP HD@-[ )‰( °eJ Ą2„@*‚ж–Č„-(PD¢•@$I@SFe”5XP‚”L.@!BRl¢ĪRó (P”*Š@‘¶ “Ŗ”P"* ŠUŖ ŠP RŌ BŠØ¢¢$É¢„“-) @¢Z @R¤”ŠŚt<“U ¤ĢT)H@lźœĪ`€Õ €`T ”@( `  Re “j„ Q”(l Øz,ķ6yšęE‘!AR(”AhZ‚%#6͜ ”ж($¢&ˆ¶*€ M¶:ęPE (S”˜ē@¦’X€@`X@Ŗ@@²€) B EPZ¶*€% [-* ŃźĮrJ‰R@”PZ€“ˆ ’P@)jĄ ¶-!, $(= ŽĻ$×eå.H5gгēMfRZ),ATģš9/  ¢˜R  IB  (Ah*ÕK@–)lė^©č®rł&€ŗ—RĖ! `@„ *‚Š„ŒŖÅ¬Ä“YjĄ Y@-l €µ=—šó … 6håØŒĄ†ź4”€Č€€  … Ŗ „K@¤3r D¦Ž‹‰D*Ą¤Uܲ¢D”‰P P-P fX=' ņœYjˆ Ą-² W0Q“ĀĄ-vL¬9ÄŖ( t®`€4EˆM3`$Ø PP“-[@Ķ„“€ R.¢©I”ŖŖ"K!B“(ØT PZ°€ eŖ [“B”¢ )M/0)Ż9.!PB…,j¶™\ JŌ„R”†ˆ@ fČ@*€@ PP ERÕ°*€eĢAB€ „”µI- J‚   Ā€„҈UŖ% %éfW³g%ˆÕläb,B€J *ŃĢ……H hŹŌ…2£Ł‹2€*€€R( iVŖi d@ `؀ %„X YR€H€$ Z¢Q-*Š”)“½Ļ&²j4u³Ė4@ Šl¦+$š!²ÉA@„)Įp@l† @ K "Ņ€  Z­d*•”@@P D¦Ø$DUœåā*ĘH-@@R( £MS  ²Š¢”ģĻ ¤)’Š2@ VM@ė\Œ€RŃR˜€€ Pd€€ ˆ JZ,€ *–…¤ H{¬óKĶ«,IDˆ!ATYŖ Aa ¬÷§Īš ±#*¤Č  5bT(,¢­tYSĻ(9€C”“UˆTÖA j²d 4Pm8( ‰@C&L€@ŠÜ„ •HP(-*€!@;$^J[@Ķ„ˆ")T²Š!DˆT§€DXhĄPØ­jYd(Қ5d—!) WtĀņŽ÷<ō3ēj9†Œ D *EČ(AH @ŠHÜ *”ę€ ¤@ERŠ@€ h÷Yą–)l ¤Ķ– „³T –„ÕzO° (€@[5©e€ .Š@CIš²Ä)4BWB¦:މÉ@£ ’+A¦Œ™ E€ Ŗ!kG0 HPe§­<«’زIQI`Ą„TÕR€ ‘=VrŽ+A @[.¦–@Srˆ;Üö<ĖĪ!³% CfIH• H   ƒ*  "( €Ü¢ÖA‚( % =r—$QeJ$I` °*ŠÕš(‚$°ƒF,H @ ²īhK)č8K@)«c  … =6yTGRB§CQ)OByH(@ ĶD¤Ø(B€ (@  ©h%€D– ­š( "DKR l»š¤;ĶcŝsP T=Œł̤*‰Įi€! 4™3@ ؄€”@K@«T `@ ”EšŖZ@D–K€P@P.ę·(é^ŪĻĢךP@7BāԊ+F@6”¦ ¬)£¤Ģ ‚PH’ę €) @Ah €ZKB¬ •SU@Ķ„° €PXP dQ¹½Ė¢ž½cĖ5Č‚†ŹN&Ī*¤!¢”p…Ł£”($;\$PP ŅĄ … ŖP@PJ€ˆ@)TĶU$²Ā@ @AØ•H  …Fę÷.…m9, S%”¤ŃčOŌ”A S&ȑ`р SG0 @@€” Ŗ€   R a)P ZµR–€’Ā@’ĀB‚)b‚U2 …Fę·5Aš$IU6uH¾u“ѓFA@ŚUɂ‚‘Pd€P*€(@(P€¤ R,@ @= ŚøĶpš ‘%‚$°„E@@Ušé5ADĶČ” ƒf@;X`u9u0¹ @ ƒ$" KV‘%€DŖ ¢€° EŖĢ… ,ŠU@‘%$²  ±I@ šė6 I@e%Ģ:¦   Ł³&Ž$(ZdØiP@)” (.–Ź3s, *€-%„€UØUŖŠPZ%‘"K" XPŠ!Ušé5V’†S7 @4d€(Q³&B Ķ…@K„²‰fQ`$  K@E"K”@"Ø”l P ŠH’‰›’@‚‚5Y (Tjk¤Ų©(e3r(!@³©ē( ¤t œĄ€˜°ˆUjŹ!.e€€*€ĖT ›  ¶ UŖ€ @ (&l$fY £¹ē!H k:ė7 EDő@P@ $ €  jjʳ,Ø*€YjՈ¤Id@(  Š U-€ J Š"D–D—"R@ ›ÜŠd3s” @ !@)¢€(*fµ(Ģ”@”@e«U )#2Ȑ € U@B‹5„DĶ‘-‘2@€…Ī÷4 ÜĈ) !B€”E—S@K"D@ØTŗTĀfĀ@‚€B€  "Ø €Kfč$"K™a!H (Tnos@@‰›˜€€ …$)TYu4 ؑ„@*€@ lU²€•\ˆ …€U€čs i©ŖŠ ‰.bK €Fó½ĶE˜¹ˆ@ ˆ*]5bP$@ ؀…  )tØ€Q3r@€ @(ĘŅÕŌŲ ‰,ŒĖ ¤”Q©¾“@ @˜³,Ø@ Ø­YV@€ ² ¤((P b®„($(!,„¹ B‚@ (( E(!¢(µ5T‚$²$¹€€B€…Tjo¤ŠDP‰›3r… €R@ -,ÕR@€²    Ė©j€ %‘™` 2 @@$( P#fęk@[5¦€ˆ ,ÅÉ!HF³®“`ABē), @…²Õ€ ,ˆ«WS@EFb,€B …Œ€CF@ ĄR@«©²ˆ‚$³7$… @Q¬ė¤ŲP³,Ė€€RÕ0 €T (ÓVP„£2Ȕ„…!H( -*¦ŖˆTfY(@Q©®™ŲDT ,Ė2Č“$Z€ HQZ@—0 € „“.„Ŗ–Fe”Ų0@B¤  P”AJ )”— @ !£ Uk®vˆ"fē6D@P @UER€ Y(E”UŌŠ€„²2°@ˆ@¤ P°€QPQ¦ŗg`@B';……  E@€½%†B€–D €@ ŠSU@B\ĘT4`R ¢’Ŗ@ BŁ®™ÕQ T3q‹ØŖ€ ź"€P–D € ³ ,®„- eYN‡dD("’” @ B‚R€… eé7e€"„1q›(ŖZD P € Ł@( d@ EkR€ ,$°h €@RN&@ P¶^“v L\ęä@³U@$"@D( ‚Š RXH€@Ŗ55„…ˆ²$¹„0@(ŃÜ󐀀ŃL‚-—¤Ż‰@Ä°(²Ö¬%™B( Š¢‚Y€@ -*źh‘$e•@() B()€Ŗ^“tÄ°زźh&lˆE  Š¢‚XH€ YF¦“±h HKœŲH‚H@AA€*„ÜÕZzÄ@ ¢Ė©¢HK"K@…ERŠA`ˆ „…ÜÕP@"K"K‘P@ €¤¤ eŅ„„P k[.¦‹@ %ĪQ` Yj€@"* (P@²Š»š(€%™¹ˆ€( ƒŌyŒ”€Ŗ+TAEʱU²źjØ( ‰›™`T%Ņ„ $A* (‹š­HYY)’€!A( ¤ŖŠŠ¤) B\ÄlŗšŖ "fÉr@P©t©TA,ˆ )L€Ą«WsQ@$‰,Ė2Ą )¶*”@%‘Tŗš«THKœ²  *4Ń@$A(*‚ S ¢([5¦€ %™¹ˆ@(4`Ŗ,„ d@ ¢ĖfŖŠ ē(°@Ŗ,ÕIQ ¤-„nØ %FeĢ)@ز€YØ²Ł­(- "K#2Ą زÕD @€ØŖ]Ķ’ĢÜÄ  B ¢ŹAsUĖfŖŠ¢$³,ĖP¢ĖTQ  € F•5¦„)’£2Ȁ)…€ ¢ŹAs( jźRŠ“&lŒĖ ¢ŹZ@Q  ØAjźj؀ %‘%̦Œ€… ¢ŹsŖERźRŠ“€$LŁPH ”-Z@€D€  (”E]Ķ€"K3rH „ (!A , °U% ­XŖ A„Ķ‘• PЁŖ  BŹŌŽ”’Č’ęƒFH@ !B‹(d *Št^rŠ“(¤ ,ŹDX@K@`ˆØB€*īj¬!H€–fä)H l EB*Wd3-j€HK"DXH!T“ ؀*¤!H”@jkMT€•–e‘( ( (…R(²€YØ«TidJEhPHK"DX(PAhŠˆØ( t°$²3,€(!P)(²”€%‘6` e«*ŖPH’¢DXHŖJ(( ¢@*€P!@EP (¢Z PB‚DĶ̹€@2h†J€(²”€%„ U«e D jŠBXH‘P@(@Q؅²‚ŠUP H%̹‰ €H‹-X%„P  µu(Q BÕ°RAdH(  Ё*€”U@@ŖI`ĶÉ hźp€H4d€‹-X",jō—Yfl K"@P  @Y*€ZU”`(€ RD–B\’рP B @€ ,µ` ęP YE^’ä) ؙB…²Ø$…  @XH*€”UT UD–D–@£Č@) *ĀĖT@P‹œ””«¹JEDŹ,-Z*€h"¢,ŖÅP¤ –€*&n@$)R ²*Õ"K@±WSED–D–Š ‘( UP ² Ź ”U@VŖ²$E(¤((²Õ™°š2  K¹øP@fę$°Z@Š‚‚ˆTP °SP"€” @@KH$@  )  @)((²ÕRY,$QAfŗĶd("fęXB€‚‚ €€@Ń@ E 54 Y@HP @"‰((²Õ"©%’Čckź_4Ų„LÜĖ ŖP R@H‚ŖZ‚Į M° h!HŖh"KZB‚\Ą  ,µ@Ą•.aAŚ;Młę­D‰›™`$R)Ø(€@$*„€ °S@€ @"(U¤Ŗ&lSF@…  (K„²‰ddgY¬4”,‰2Ā @  “…  P” ,$ M"Ø" @RK˜€”h–‚XHUé4š’̦.%„€PŠ@ $T¢€%‚ S@ °P( –T.`@Ti B‰Āj5eĢ^x¹U-…!@€"€$  “ Į S@–@P€% –D€@Ti ƒ©ĪorÕY‹Žw*„“@, *€–€¤DT@4 €ŌŠ °€ B€(@ €”QZ ,µu5A,ēq‹€P*„UH"!ØPK@ŌŠ°€$ $Pt9 @Ti  ¶]KV&.q®p €¤*eAX@@KB€° -PA`  ) €@€¢QZ ,µu(ÅĒ=`  @Ø h €  )@X"ŖŠ – €€(  @ §  Ej© ²—FSž¹€T% €”*€–…Ad@ØEP"€ ¦Œ‚(P@¢ Ej©VnP–€  @ T‚Č€ŖT@P 2` B…j€%ĢBZ(Q@EQT‚YØŖK  € BH eŖ ‚Č€T%  H “D ,(PЈ  (  ¶j©$@B¢Ø€XH  “ ˆØ€€”@,…€P@¶Z DQB*€(@%‘ŖK@RDT@( ²€Ą‚R€A QeŖ$°B„“€X"   ¢‚ "(@K@"€R… eŖ€$°D€¤B„“€‚ "  H)P€–€ °" hĮBŁj€ ,P”-  ȀØ € % @€€„Ņ€‰,P”-Ā@(PĄ%€€€„ŅĀ€DĄB€ ”@€ Ā@… ( @€¤(BŁAAĄA¤… Z@A,PP²€ @¤T@ (Ō°,RP%  Y €l@€Ņ   (K@‚ĄF (P”P €Ad@…–€ @ HB ”( €"€!H )@Ø h –*€ h@ @ B‘"@P@P(!B% Ø E –P@Ø €Ą" BZVĄ‰ `@P”P  `!A *–Ą…!@A H)H€(@l“ !"€”P@ `@­•@ €QåP “¦@€( l“ d ,” @,@SAH  ER EŅĀQAVĖ@A %Fe€–€@,DµaH)RP@  €QAVĖAH Hfę" A @,‚M¤) $R€ AVĖ@@&nbŠP@,DSAHR X$HHPU…Ō  HfĀ@  ‚Ą",µ@€QP¤("€ˆ( -,µh@&l ‚Ā@*„(”°@*€ZĖJHK"@,ØZ"(€P¤“²ŅØ„² P‚Į*€P-€ °@  (h–€K"*Ę|- ‚Ā@(   –XˆP  “ AUPhĄ ) @@ *" @ ‚Š-JB  @@P€(:2  –€ZR€(=”€‚Į( D  ‹@U@hŁĢu4pĄ" ‚€P ,@*Ŗ)Ō갅B”@„2PB ˆ €(@P¤Š P B‚L.@S×gŠh{<é€ @U)P @€@”hђ‚) AŠ)Ń2°€Dę° ›<¤@R€  IE¦Œ¬@@Z€P3a @ B€”@„¦ŒP D A Ń ’Č€ B€¤±V›4qĒ%ˆ R@(  ĶĢ‹" Č@ Uš)!POJyŚČŅE€B‘(«¤ŹĄ ¤ ’pK (ČP€E (]@R…E F@€ ,ѐSŗf^kĀ@HP¤čFŽ©åP*A$(cšäFA @S²qj!,€„) €Pv=å\…ŅdČh"ŠR ØE€PB‚(@`¢”Ł¢M™2¤ŠH )S’‚BŖ)H@N‡@,RP:œ@T UِPz:’)(‚™E "ˆT(Śu<ŹŚrP@( @HP d@P C¼zkČĮ*ĄS©ĮiH…  $RŠvNK@€ @ E‚…ŃЧµ9ƚ^fA@   !`(%"¤( ”h d€"PP ‹H«³Ńg%äXĄ)@   А ‚ˆ°@ €B`  )AÉ@SŖrX€Uhѓ D “‚($Ł €  Ŗar@T („4`€ –€  ›\ *čČC S S±³Ź  €Ʌę*€Š£e;`!h‚ؐ¤!H¤Ŗ ¤h @¤ €( V”¤4`@R  ”ČˆP †r¼) hČ4`€€hŁČ€ €”B*ŠR€Ł“ ŁĶ@€@4 ؅"Š@ … R  z¬åT…  H (Q@PB€@R QH ‘hJ@¢€( "(6er(  @@”@²„€!@ Š ¤Ń£’…P€(EŅ…€@‘:œ‚Ą¬()TRˆh ()  (2€("( TiaP°(™  «Ju8Ø* @ )ŁLKP ‚( (Q`¢”Šy”@D BŠi9‚”i„)€€@‚©ˆA (EQV €… (R”Ą Z…Ŗ ¤ @  D ¬(D€ V•D”hŃ©ƒ%2-@ UDUEH(€ (²Ņ؀QAX€@” "@Q@ @€ U€”€ **él+ u8…%PŽÉēP)£ () H4R"*€i/dēX €¶ZU°%@JB…€@Õ9)@(= Įb’” @€€R@ 3@QeŅ€@U‚„  €(@ ‚Ä¢¤ ¤J@ eč²%@P@  P€wN ”A H P“ę“ @@H -—rō9Ö@… @0P € ŅbP P% E—rՄ² Z€‚ €¤ Øš€n½Ž‚( B„Ü֌‹ "@¤ P €@HH PATB€€ZĢ  P©w-X,„*@Ŗ ęP@@PB‚P «@ €€H XD(@€P©w5H,€!H(€ŌĮ€ č`Č6˜¶D B€ (US¢`Ā€@  e©Ōā± A‚ *4Ö„‚ČDD)P!H”@ˆ©mĢ `@U€”hL€ J *4Ö„ČDP ( P (а€( -(*ĮiL $ANǜBMjQ,@(4`€$¤ J"€ QH Ø Ŗ"€@Ŗ,Ö儰… ©Ń2¼ĄŒ€4d €@€¤  @@Ŗ@Ps$([.¦„° Š@)PhĄ( €jØ(lŗšĮ ‚ Č @Ó‚Ā€P ( RPB€@JE  Ėf©, DF@…"@B‚U–  …!@¬€@”l¶h,"B€ˆ "   €*’*Ä )  U.–Ė,"A HP   € j²H (€Pźq€  …FšJ°@)Ō—Ŗ @UQ@ ,S P‚$ Y­K,€ ( @¤”P   €€€ˆ@ EšŌ¤” P AHPˆŌ  @€E—SBX( ( ”RPB…  €“€€ BŁu4%€D@@DH@ •@P (€¤BŁu4E@(¬ć  @³ -—S[ ŠŹ¤PR @PPŠR@ˆA €-—RՖ@D!HPR"Š@ XP@Š(h…@P©t @(@*€(Pˆ€AKŠ@ h f¤‚Œ€*]($DH   P hµ˜„ŠD €IHP… ‚*+Tˆ RQIF«0  ( D¤B€Š@€P `Ą B‹-ؔ"R-@P¬jĪp@ €ˆ @(*Ó(@Ł €(²€€¬!@(–2U"ŠŚr”°( (@ZH( , @Ŗ$) A”E!²‹!喑-H¤@@(7 ē Uˆ€(²€Œ„€ @…(¤*@A؝䅒AL€@@ €Jf(EP$P@ ATĢ€ @ Ŗ * P€ ( €@P–€PU) P@@@ @P€ZHP *€ˆ €PR’‚ Ń€P µ R…”ajA€ (…@>Š|õČ#UR…f¢‘ €P±P€ !@‚A€   U@R)( (!@EHRH (HA ’QR@ )PMČ@P) (RHPA­(€ B“„hį  )@  (R  J"€€€P( @…š0¦Žp @ (Š «3b€  UD)  ŃN`¤AL€@ "ž«<«˜€D@(RH (@ $‚€ PQH€@PPPP@ ”@Uˆ B€   @P)”@ …„@PXŻr€ B€Ń@€@P Š*R@¤€€”AŠJ‚@Ņ:W PP€P(€… BP€P€€zO9¤h„ €€ „R(@@ A B€€@ €€    (  PS €€)P RPS !@ @€ @€@PH@P((  P€P@)L€(€S@ĄP(€@)P @€€€  @š0 €   @P €XŠ€P@@ š0 AŠēP  P€„2B€P(@  ( @(P€  P€@@PP@R‚( (€ @ ()P 4` P)€ )§¤ņØ P@P ¤B€R™ P@@P@ €€€@P @   @€@…B€@€’Ä. !01@Pp`"A2€B #3’Śø¼£ĢĘÉkaŖ‚8BaMŠķ/ą“PD®©“įT:@Ń?EeĶŽ³Ł„lņāŠˆę ßŗ{`š54¬ĀłłS:sebˆG³V ćX.„   a:¢&t‚„OŸ< ėgNŅ;c`—9BŽÓMJ”JpDkżhr'Xåfč5HD„’ä²RÓĀ O:ÅĻeśA†Ēɀ±ø»“„‹ˆ».TŖPˆ„-•(łb¢ĻGXåk ŗŖĶe¤÷'Ėę²ć=ˆDŁ”GĘÓ@'S9±i³µJ•*t1 ukZ±‘Œ(Ō.PMŠį³µŽņ{¢Å€°ķąQpĄyΉ삋ė!Ä ”ń(ˆ°D#`ˆį ¶6j‡#ÖĒCt³AUC³•=Ć:·ƒś÷ģNøNķĻlŻ€#ćZR„Tm…œ/7 / ,ÓršSŽō*®ĪÉd‰Šmvéz!Ø ¼P[„ßÉD’.ż] ōģ”EĻlފPéc¤#Óʀ†Š°6:AY,”©S`P6*QTĢĆmmu…ęņb”FŠ{°„{#Ū„¦ SŽĪė߄Oo*{Ÿń·FŹé Ž7 4ƅ‚wø±Fłp6Į 4.ˆ¹N’4Qrr(ö'¶…NŠ€„\×źÆčš‰Ņ¼|'!w¶Ą¢yB£ĘX£ŗÅ©Āōś½Č»Ć_*łJQś‹S­LoTī‡O(JĢ©R‚‰ėĪ,ńĘoG `”Kī>\éSõv§Y‰ŻBvĢŅzxŁS  ä^ŸĶ*nńÄ,ó‘³P¶)ķ:]ā‡ÖZ‡ńMU4„ļ*qbĀÄę©Sp@ŻĢEŠ,īś }“ülЦ7]bV%`V ń¢8åd²G…«%Š:@¦›9Ä é&ĪG¼nĘ£Į¦~Éž(#ft=t 1†e!HRČŻŚOn k“ō 4 ˆ”[‹£lS‚w BDŌmњZ6Nń9¬Ök%šĶf²DöpŽ€”F†” 7”Ób&ŅŖ"=Ōė6Į?¦“¤łE·c%;±#H±`Gm2„5ۓ͉N(”Qō·é5?®“¤ų£Ø Ŗ54IwāÓ©”8p‹8h‹v ”Tą¦ķ„@–6õņŽˆŅŌŠœŁā^uŹ”xBpP€D\I"™Nn Ÿu9_uQZ…Żc÷šæH#ońņ²l/¦lšŸŁ0,Ql\٦ׂŖ āÓņ,Öh!4Ų§Xżü#Ń īž\ii‚ *§^ŅJr67˜Yq“ QFēļĮ:ß¤ŌżGÉ %1Čn«P¢Ų’¢0ƒÖH!ĘQŠl~ĄģOQ±°čī¾bTč;&9T »vN‚œ»adp8~$Ųń„ŅŠ˜Y¬–R©¹ČTn%Žƒśušåü…Jp¢Ģ)Ķęk”8χ?Vk c+Š|£xüOTyø-„į+„¤äöäH…MŪ:Ķ@§n ęGZX ļ~®×Ā&Qłs¢S܉ęaƒ ¢Ō[(ˆ“ŖN_$,ĮF°R³GšVK5(żžV^T  ‰@ܧi°)XŹu)_ _B į•š/‰9šāP¦Qb>TżR|ȱ“¢…܏<ŗ „ å*VK5ņ/‘fž‚!¬ `D_>Xś6P(éw0M@5bÕbœÕ‘iuI)øci 4j"å>ĕ(GL§sŹÉf¾Eņ/•|©ĪŹą(¶K%’•&¹¢)ĶsOEņ’×½¦ŸßeJ•’ÉfƒŠzxG@SąaŽÜA2³+2‹»,U1 ŖÄDJŌ‰©RQvM Z‹PSj9ØV„ĒŌ®©čYRƒÓūć¬qĀ…ø‚= 7h[©Rša$XWÅAÄ åœ©iMō‰ 9ČŃƒ€(ņŽĶ¬ÉxŚSæņsŁ ą‚”ēlŅŅ> S„R§ŅgŠ4ĶŚ¤ė„F©“ QėČ;Ós—Å ¢s²E¢ "ĄĀĶ»gO –K%”,„… ź7€!l¹0+Ä;UÄ>¶C%’ł uYl©ōąŠ{YāR„4'S! dÆśėāƒ‚üSźždš??qż)R¦Īģbā¾7&ѕ’\!@#D!O Œ„ēAudjJ&~<8GčAsQē<Ų92škwä¬x6”^ŲĶ9ÓŹ<8īż”½ZŻŖ¶øDX(¹ī Ŗt²M¤ŠÅK‚Č­‰~=šMDO–i‚*ģēN”sa”Ż„(ÖÖYE`±“¬ČAą© 6£U”>«JsĘ”*|@D^r@`Õń5)Ō\ˆ#HŃ 4;²„oNžKŌ0E:¦+ēó”jJĶ)ķĘØš"Ń÷ģ׏¾T+'9®NŽģ|”fVH<„ēeŁB…ĆŌóp%R`ƒI|E|gT£Ī ›ÜB²²ćøÅGŪ©&›—„īŗOc=ĄBÄńŽ ģ8ī%JŸ¶µJEȟ *9p9Ē”ŪyŅyćD #T(M]CkĒ_«B ƀxp}ÓxE‘ ö0”Eΐ- Øä퀛@ŃG4,T&¶V?‘dŁ€z!¦óŲB… k:¹h“(Ս†Ō(øÕ ƒ 4Ź +N- ¼¶ąSŌmüS;0ž ”ņR„O0ShŲ'tÓ£p§±ĄÜégac` ¢’Ęš¾-°M¤Sį1’¶’ž.(<±9ß"²’ī­Ż9dœąöś‘­N§ˆ“Ü “cp ÆÅ8Ļ`,Z‡M!Dh7.ŁBkQhĮ®™M‰Į<‡)- |–*L…1ĀŹ1k¢'ē)䕃¦VZ„J›t±“ “mŽĄ Q“p bČ„@rl1Ė·“¬”‹JȆ䄦0éD”Ö‰’‘ü}D"żé()EČźĻńż #Qæ]M¢ęķfĒńAįq3µ0Qrx3ŗŻ4OāSbŻĖĄ¶^s·É=.q7bl-Žˆš…įFŁSv.{ĮA[a #q ¦²V !²4šs!IA…ū¹ĄL ^ÜVP2Dd„µš‰Ż8śm…IFÓleS`NlX(Į<Xjēē~ˆčkrXBiż SČ*CƒD§ø¬rY43&H V0>¤–T ż{ć÷Šy!D ˆQ(Ņj)ShN5;kG;tž“4IĀd,侚¦Ąœ!Ģ‚ŅŅÕĆ’Ķlēø9 ü8¢AM0œó%ÄłēūP‚#D €DZQtˆ@ T(Żą\‰X9Be<“šZ˜ę&Ņ_&°A!®{Ƃ•=»[‘ĆćGt$'~Kņj”ųYBł$H ä@µ:” J•‘S`QócģĄ©Ó,”Ł­.Q»§Ó…Ń1ȂærՃ\ŖSÅ1ų¦88Tnō¤''Q•łÓ,~J£ĄEŹPā:Ā…ŅÓ”®ÄšĮf…V£X!XĖž‹‰Ņ #äĶ€”[u 5$ˆL8‡;" ‰(µ®†‹²YuS’«Kfø± ĆŸ)®¹Š“"n×Bž¬&˜O2|üp„ŃĮ?hnč¶5bS6OdĮäōHž.8½¤åŖ›ĮOé˜pu)9Š›ņNxi{äĪ”ŪtNv^naLŽ6Š~Ź‹cqųŃl(P”BM0KēS*'4¦<Ŗ¬Ū¢¦čkžT HYęœĢlŹhłF!ŽÄ—4‚Į< ķõ¾W¾Ģ*ed eŒ ŁCŖ„·j©O`TJmRÕÆ*„9l–Ś›X6”ęā›mJK¢fēųЦJČńĘ(ņķiryŪ†8ŪS˜Z>·L'lJĄŠqLŖZS$N¦Ūu%6¢©HcMжA›`…\S€Øˆ-LÜĪ~aķÅ2®ļ z,ųĆŖĢ8ź*23j5.Såč?ēdėJlK¢tIę˜U+f>·ˆ%®ˆ½i›“~FŒ§Ó,M@€¤9|rķŖ3ņ‚Ó ]ų¹ĪŇj‰ģÄęP®}\”©_+£˜} ~+©#PŁ%#†5ÖņEg¶IĻą #75|‰ķÄä©Ō F¢.L« ćVE…Ļ•*VKę0Oj-DcdÕÅN¶SĻ–~Ć*yCˆE䬊52CÜŌL÷bÓŲĻ1ģGfŃ%Ķ,“ŃetŃ1sŅ'\)ŠއŽķĶrÄł žéą $h˜ŠDi˜ CŠQcŚEĘ(±ŚdČ\rńįˆŠÓ łk .Ó ĶÅ«rŗ! ųĖŪ¦[“¼ŲŗŁmö°ˆߍm0œfĀŹ›ĒĘ„fœITÜ1u0‹wųIµˆ&¶Gb±MaRJ›š„HŃ;x÷dSN$ļyæQiŪī“Ī!B„G0ŅJ¦Ł. ĮX'QŚR¾IR D&’'3lBž#å„X)™s]Lа˜üWG‘ ƒ7ėčĄly†–½øJu2€ƒøL¹ r(_‰!dTƒGóq¤AĀvEÅ48ø0śmLĮŖØ‡r² ų ²R„H ;”)Ct‘}©\VĢNy>dø¹OGÕ lƛēd}Ś]ēbŠ£¶¦sśūNž i"śK䤾F/‘…KT…*{)DĻ®#é®v^£Ÿ©c·Ś>”lMƒǹ›F[Ą×ĄåK–‘ōŚLYš”4'68GWuž6Ņ.l'ŅĄz ‘3ē’-(š±Š^!— ]}£V2šu2”h(™ölhsqŌ]’-GsÅÕ‘zOƒV3öt""ģ]³ß†:öŃp4É|gĀĘęHħ4·ŠbƒŹń“é )Į=ūČ#ŗƒĀŻÉj#Ą§3pĻ$&Īqw ‚\¾G#ęi`‰¦ō#*ˆ4»€l\%„š‹Ÿšt'ĄŃŃ:”8  .n'ļ J4œ(S ć¤V°!į1=Ä'¼@Ė8r0ÖŹØĢ’ Ü#ĘJź£A3÷®ˆŌqņT@/®ż”¢Ÿi†ÖDĻ 2čēuįч˜śā-:%a ā$ń‰ą•ń’ŅdbOg„GS³Y’sq( Yd5=łsęčS·AŚ/‘ĒCD¢#Ö°ˆ‹™6¤Ü‹Œ”ÓæB\0įżāż'uįkp™ O]Dżœˆš&¬gć6ĆLńAŌ:`O`Üč5°ó.óńÓꎳ€ÕĀ/¶:(Ó ^u’"Gņu@ źdK£/·Ó§™Ø ÷ģU‘ę»ą 'Q€ć•©æ©09ŠŚ8„j™Ņzż#怒j5Œ&{ö4½Ļnā¤"‹HŃ~GbÅU­mŚģx`G<Ųķē§ĒĄk<'`ŖTĢųȳRŌ÷_h±ėp„Ÿ;A»| ų€%|.Ó7ėĀĒ43*Ži愚ĶĻŽ™±©ł5Ģ-ąÅ'‚ @¹ķübQ¾ QõøL?…Z™j 'mGC]‰œœī€Įq.6“ˆå‹Ē#蹟yFŠ[ƒź!7óuZX aT~zI1ĘĖńāiGÕ‘Ł @&M£mB.’ēĀ TėsqÕ)õa3Ł)¼Æä*a1hŪI3  G˜ś"‘`%Ō“žŲņ•ĢZu“”ƒ"v'\·ćøyo¤…3ōF?÷dķS S‘+!‡${ˆ#ŹN’#PNź©ģGt:Ō§ŒXB=x‰õ8‹[‡d;¹ŸjõKī艟ģÄyxŪ×X Gū¾Ž {xšĄzx6 ī,ų’Љ3ļ@OwžZīŚmÉÕ@g¬„yĄOwÓŻĢaz;k?SJä[¬Ÿ©ƒ’ļMŸ&>ą]ųż,Ÿw“ėę²[ķB#Ģ[“Ż™Ēowɏüue·ž4æ_īxūČ*³qīBI䟿X’ß‹ŻóŪ6€Iėā@AŸ‰÷._Y‘ķSæ`×¹q±…Ü­,ųøN[ėdpƒy„Lžvø·mÄś’Ļķ™ä„į¶!bœÜF°`rJ;š»P'č”r…•(’x)µ„1ĪķX`T“•*!~ĒÕń¦£Įo‚¤ZtOeN¦ÕŌéę\Ę1xŸu™»Ÿ±øv)ĘOs‡ćŲ@ś¹gįõčQ¤†ü\‘ŚÉŽõ¬v¢ņ[õyśą¦Jm ˆhY"{'æ.ō\+ć Sh&YI:¼¬Ź™÷H„*§Us¬\Ob¢#Ž=·LdēŒNŗoĄńD&»ķϊÄǟų܋cķĄĮ&Ob6/vNīÄG Ö ¬Ü<ųŖą‹§ė®d7źEÄśtøćŚõDbyéÓÉThaąq¾sKGØ[nXCyFÉĒ#Ļ$'8øųŠbSŽ]źiŪĒķ‰šsņö+~x 'cŹDz„vr0ń“ĀDzV£Śy€nś4ĻØĮ„ć—™&}h9ÕŻQ3ōR°nl aT¤6yą÷$ä܋ö>‘'Ht`sGÆn_-ölJ;r ½‰śļ©<0Ļ–ĖoL“ #$#æŽRŲ˜šŠ8Ų25Ļöˆ NŸqµĄ<-v$™=£@(÷mv%ĘOkN$śövž¹`>?"9 cŻōĪ/{²wf>®Ņā}DHöŁ;vtź`_:?ÕØŽŽ±œke¾FQ3ėŁś`?ķšF>=Mō©Ūԃź '6=®Œ÷ϱŹś0ż+õö†‰.}&ęĒÖĮ„LśP™ä„[»@›1Į¦»ĆŻß·łsl;&¦ŅķžOÅKļ z¢µŠŠ┳5<Žō¬ĘXģ Ź*3×–ąŽ¼ÆĒÆ+±yt –ąŹ86–±ÓŲ\1‚*;ā°Xa9Ć:ˆzĄĢ= c›NHŲ€4f¦§T` éŚBćčB€ōćҊŽN0 žœaӌ(ĒPmӌ/†ShŠ~2F€Š ń„rm@,£0Ą9:¢ćˆ+Ň(Ą97 óSS^U9¼Zs‡&į¾āӔ^97 šššœS¢D^9-_ĘӔQ“ruĀųZr‹‡%žn-7Ē%¶-9EÓR× ĆR9©V1ž:(V‹NQĢq Qi¼¹CxnŠ›ĶĮŗ(Zo.AŌWxŌT|<$Ą|6Tc4Ōč Ōę ©©äŚÓSdŌŌŌó5.YÆ*ņÆ-Ąš‰Ė8<Ą<Ä<Ą<Ä<ŲwAl; š pšČw eązRÜŅkąxĻ»ńQö‰ZĶMMMOŃ9‚¢jz·+OńØß,AšxØĒ ˜ā*>aüSSéˆ÷Ŗ-reŽh<@wœCŻ æˆxxĄ<Ą<uAŒ: šš Ō€x€Ā\ć xxxAŅĢ}iē^’‹¾Ņļ%Ń’ļ%ŽK¼—y.ł’J>®GóķńT_’Ä p  ĄŠ`€°ą’Ś?ōĶEw^üGZr.Óxń€¼Fśt(“‘8ƒī7{ųD8ų¬*-ƒKˆä¢‹”Öqž’’æį’Ä+!1p 0@P`€"AQa 2°q’Ś?č¢żģĻķ™Źē³Iż(~ŻŹČ“œa1C›ętv?kĪ{ w»ą8>p/Ž4Ös\q¦‡%ĪØąŹµ%ØPP:“ę;Ņ6%FfZāĶBކo¾b ݽ•“œĻ: -™ēM•“ĘcšĆ©­ėé|wz_”Āœį?Å ~j3Q^„ ŚNYM@ ÓõWĢå‘tĮYCŠEó]QI}#L ī‰Q˜&ƒT²>e IŹ3æ4²….¢…MŃQ¢ĖįN/žE<T"WŻ>éåÕ*2Ō/(£”_JŹ„(i|o>µyjżŅ4^Ÿ}÷Ös²Z‘A¢Tqņ­HĒqK/UŖ„µJ ōóx_©#®&“H^­XW„¹dķ@čź[Tx]‘gžŸgźGĆm™EŖŌVo¢:oĖå‚:ĻNN›oE”ØØu%Rź-Č?ʆē”JŽŖČÆ/‰F“ᬔ ·éŗ”5J-iÓ±ƒaś®8q¹į޾"‰E”Ņ9ōb«)Ń*9§Ž±A¤ 1†ÆR՛Š3«•z] ߙÅ%zlšu;¾ Ō^tMEa×ŗ*XƅézG15(ģŒ7*P³éū¤i-@¦°üŠ»āy¬"õ:ÆXD©sIQ•ʉ”Ó Ź4|± T=%¶¦’Ōœ“F‰e ±uuum åø1’¶ˆP„čY_EōJ†į£!Ķ—§cŌՅu ÓBŁ|{é\«źŒŗt–zĪd½c˜&ĖÓŠ×W­”~Ō‹¾oi~v7J&lŹ3{·r2£œN5*yĢ)Ę”‘ķrÆ®¶_å•eoĄóŸ¦„Nf'dbYč!Ww~ TnyØĪo’~÷į ²ļ“2›kĮ =8ʶ©Ż”ćh…'K««ØćŲrQ“šåžk8źüčų”Ć/„õµęŪbQĄ:īŌ—_ézy}ø˜elŠ_ Ėó)^_ ¼š§zs9}ĮµęįNžI4¾­ oŽ{cł„ʐ6ēv6™ŻÓy4ʌ^Ź9lbü„rą›Ė}z”āckԜ[¬G <å^o jZ’·g ‡1Ÿ-Źüą÷~bźpį蔲vÜßy¼­Ä3¶7gŁ(ķJóP>Y’́øhQ}™ąIõ"Ō¶Äo °>x9Õ÷–#pź1…żJŹ<<ų!¶6~ōFW(ļ=ļĘōćOæéÓŌ£łsžŸŻ9üŽ’2 ;ćf÷żöfkꚣ¾?3c¦ē³įßĖæxĒ8ć¬ŕŽpŸźō5ßņŽ_–ĢÓ·³åłĻŃŗ’;/āöȱĀĒ Žü£¢v/Ėoՙ›‘śøw¾ėåóxłCIā¼Ü é7RŸ~D=¶eFæ.5.ü+erź]4®T5eóĄCbXīXzŻ^[ƒ(ńŽxģ›ž“œ:8`§€(r¦œE:žwĻæ)¤>10ę}ŪO`y-ƒp±ß÷ØŻ<0»·Īū3æĢžŻß9ē Mŗ„ę7mĄ›ĆńłźhŪ(š®xĖ |DzÓՒ£œøÜ#·³žŠ¹Ć¾'ųž.±ūę;’œß*9ɇų”ćņ|2›ŁÓÉ‰ż×aų{©Ÿś,?ńšr+y’’Ä*! 10@APQ`paq€‘ ”±’Ś?!Ū] Ŗh@ 1ßņ,z ,Ń^‚“­Ė²Yœ&XxQŚV‹¢ćķˆj‘čr†œ"ŪŗCCŁ jć©é>­Ā7•G«Źqƒ OåŠ&,¦X„OÄd¹z B`Ąƒi¶ŗkh:‡‚ˆ2ńÖŚ# ŗ¾Üźƒ)‹ˆö$8œ”8Ī}CźČ:Œ£MÕ+MjEˆj+šŌ©R Ša½EŃR“Atu&QŲōV\#O)1F J‰×©^ØŠŃć”Ī8¦[„ŽÆlŹ©g-˜C»ĘĒÓŁ/ń*“Zʂ€Ų„z1C)ä!h°%F mŒUi»Aø»z™©lT\»„¹{Ä4j=cEzZÜjļ!B7‹zŗÅv%hŗ%Ā-¦ŪéF`×c½ĆAĘńĢMbÄ`•L¬,E$b¢F0b² AŅ„ŖzG«[*5ė—©¢ĖĢÆAdk°6T4:Jކ„唦ī=”•©PŽóõF®™‡@™r„hĮ jĮzšTμõ S„¹"gĒ2®c¢h Ās*™FVĘXÓ¢uz&įwWcNPd!Ä䜾€møl½n;ŽĆQ£*'`.:ø#ĪŽ—Ŗ5å¤AäŒUō8jnDʧW„¤•Ž,“"éząĻ$!*Ɍ½^ Īü#²ØźõMKčSy y.ĪO@ö'heŗ4Yq{v.a9ĀēC‰R„h%M’>˜Š6—eJ5œķ£e$“e•ékč"ź^·ЄŠŌ"åĘUĘĆØƒ ¦čõHnܾÅfQƒ¢gč „š‘㲹ޛ—o²!‰aĢ4YiuØ#ŲGÓHPĆōź^N3ž£JcŠ"ĢZ,Ph2ŗT­Ī”Uu¬C¦#ÓĢUŠ ¦~”ńŁ;oµŽƒCq‰5f—³”Yõf•R¦,Pa¤Ź%ś=Š(q9ģ½üį„M%ŠhGJ”jŖGAzä"öasŹ%HpĀ™f?Rg=0e’AĪ<ķ8«4¹LB7„-X*]^‰VžI[ÓĶ é8Ņ!ŲēGNŖ–÷aqŅ„JÜŖ(F\5}+ė ē¦9Šć”ĄŚEė&¦V‚šAyŲōF@ĀXD§¢nfē™ PN"½ah."0c*z;‹¼øŖø¾ŠŗXĒ$y‚Ųü|n/Ģaŗ =BŠNtyĻ!8Ō¼tTģ®`3ā–œN1ē½3+eō xŃė°1 ÅDŌ;{œ½uA¼CąĮń/.CbfÖ“'D…uŸEÓ .ę Ż‘āsH19÷ˆX0÷’§UW9Œ:1nšó“›J>f;5U)—QŽ„āYŅ_Jµ% Ē–irō’ˆ®”38f²÷¢ń±›fӜY„]Ē ž=M¢å„å “:øĆeĖź[9ŹJŌM$Ć9čhCV1āTę!ćI>É]ē8ķ•0#bĄŚN0Š„TEæ\BńjpēNC‰Ļ«q+@1GR+4Xéc¤ŗšøņ†•{ĆGč×°mPNP#1A°;żQ­¤p\Æ3Bfī JŽh¬J4©U"Km3e&‹ƒ¹`¼Ģ‹š˜KŠŁ£õŖŅ„m5/0ēI„ŽŃ‹źĀÕR„hŗ ĢUÜB‘Ż„”Ē  hp˘(§–:Ščś?ū„VÓŅń:M {£GčÜ×DćO)ĖN#ĻI}_öŠ@•Ŗ˜tÅ =Sa Ų—£•P<¢LKˆ_E„‘Ų©–“ĘžŠĒŗ!~KėVŹźŽ‡1éĞ`˜ī>Ā”¦¦eŗ„ä̇Ŗ †– Š\%ŽXęśLxčń؝Ūõ ß] ß[Ng-­4šTj ąŠ`Ę*®Z£-—ę •0•ŌŒy†`ŠwD~ŒåŽjƬ9Ņk+÷†…ė–åó9 =2*ƒr¦IVSeŇͅš%Ė‹Pė{®“V”Õ; éš–žĢź5¾ˆĮmœ ¶s‚ēĖŽ*YC[*eu¢„Ā ESƊœK=FQpsl¶čšœĒø7Ō $Ā:+~ŻÖ¶Ü½oA­—Ņ%ŅK³–•^čjįĖJ¦Ź:ceĻND: ā5“«™IB+ę/9{ÆI®š‚hKŠFænlā,¹{ŖWEčˆ™Ź†&×D¼\PY0Ž’˜³ ƒ—HŽ‚e9GM&—bÜ^Q†ITĖ­k‹ŗ„kŹņō/B¢{ké_Ič ½HÜ1»Hķ}e@3ŹK©ĒJ• ”Lئ)ϧW*˜Xφ8ĢTʶփˆlį ˜Œ1.)qg`Y~ģōĶŠģeŲ¹}1Š E¹Ėi¹õ¼”ÄK(ŲĒHc¬8! b\¹J& .eØqĒ™–QšsGĪu¹E‚QéDńō5Ė{!‚Ƀ/gd:;6^Œ ‘[Q/Ŗ$̊z/Wˆ?šœĢi¹ kK2嚼©Vv\]Õ Eŗ=8śµŃó1ÜR×Ģ~ČŃV˃”ĢZ ĒPBU)DV„·2Ć0dŽ"E™qhÖ#1 œ3ŠĒy J©io2¦‡ÓU\ó`OĆNS—² ʜA³E .–“4øō‰Z\Źņi®Ė˜Ą™e\ĢŲŽ\p¬a^Ē”rįY} ¶HĒźfĢ4Æ“ĶUzѣƃŌ@Å øb24-ų–é…raO,Ę9*v_@¤†øß[Hń«÷‘~文N9CGŲ‚aāe̲WKH˜Ēū‰y€äұ@L°\iõ©Rŗ#¢~d"Ż.ŒĒćÕ!ę& G%1S9™˜īaHPJ" tHŪy„ā<ś2?‡ 8čĀ i}RÓ$Œa¢B8t²Q0Œ±xĒ;+xt_LžS2#/EÖ¹råĖ—øUčTģ4zxōĪĄ•*T-ļÖ%wµ~­ā.ĻŸ|+a ]†Žņ=õŁhÓ¦:˜5ž½;Ń£Ō(K—ēg‰ĖQ™Xƒ­]S·Q•°č+EķéŃhˆ‰wS啍žV*Tei{Ž[ ź‘Žęę ^ƒŃц‡AΠDz“"Q.TTq­ |©ž[Ėé¹rō2?ā<ØæąˆJ¼EӖŖŸPŃßrś*7ŗVŽ—ė ā āj&‰ńy€ęāt/aźŹ–„38ˆČ<‘#”Z'ó·×ß¹5–ühÕq#© ʈō+aĖE[Ž£pŸ6'1)ˆ’;(LŠ€r‹‹–Šzbą\£Ä/1‚0b˜ń/ß2ŽQUŌ#’ه’ģo§–«‰o<÷)ĘÅūŽņšŲ‘q,†Š6#ĻPœō“‹“ŲÅŚ¬ŗ|§'ō‰yˆĖģ)aļX`†]̘%ģRŽ`²9vĢ“F"&ńK38œCUćs÷ė— d~G&ĆGŖDčœō :;ÖŚ]$ńĒž—8±«Ų”Įā_ę+AV—!Ģcó*qҼ±Ž#āĘÓžkĪ÷š+³a°#Tj0<Ē$J—½Q6ŹLJ19h½K«×e*濉NR‰›Ä±˜”qcƒ\ĖeUœK»q¢ŅĒž“ų1G¢į©1±«Ģ„AńpcčB6ؚV^aĢw”ėŽ©¶—å œ\ń'ų1<£~[‚Ö Ł%Ō~:ł‚Xf{“Um꿃T4/HaZšT ĢŲ„ō%Ōp‹©„K—/Je‡?+¹ĢK’“܄(©'ÜkJŹ!*‰°„MIz1}\¹ząœ™¤Ś¹‚”%Ņ`(aŠØ5vķźlG˜½ĒbŠ.'@Ž4I`źš^'-ÆFå̳(8#VŠ©‡Éę4Į<ÄSĮ•Ķˆ7˜WJ8Ž¢.źéZ=±+Ė”\F>“”Wō#qŖ%;ˆćZŃĪ—Tœn=^&+Ø)rO(¢żœnŃj¼Åų˜’ņę _)}A«Šv‘ķĻĶyNXŽ•öfĢędÜJŃC ½™āl4Hć¤7‰sĆKØ,œpęPĶæČņZ4Ź*rµlĢ ¼G®b¬¾©›čOjĄź×iEČh v™Ze*^“SVъuØŹe Ā Cąœ†ž äŸÉł‚ž!mš–-ó/±^Ģ[(• JŃź½bˆ Īpܽ+aZž©+JŠj§Ė—ó™ä1,¹Ü|yAؒˆšcšĖ|ĖŅūs”ĮÄ[„5tz<”°Ē“ ]1ØżfŅŚóəG Āj¬.rꐁA<˃抳œ² BXN5g-ČŚōN`ÅŲödæµ^Ŋ!*%ß\Žø ښGó=@‹ń³(āsфŠs.ČĆsŹŹ”39u)."VɌ”nUøųĆ4Ä>y‰<WkÄCn Z0ĢųbU!–”uļąD­•+eD”k›•ę2”@„6eĖӝL%“-H0Q™R£”n»ļx9ƒ.µ.ČĒO™”°7 !¦Š–”Jļq+uÄW8č2™łxö¾bźL¼1³łœŲĆÉce„ńÖ7æ8Óc”™U ĢeÉr‹‰LAĢøBåZ @tųы֤¬ ¼īw‰dā<Ćmi‹(̲ĒEPvœāFœ1ݹ‚’*XįœSDs ņžf‹į5-r•L3.!b-ķ£ā^TY(qö&ēš:TĘ·Rļs™A…#˜.“ēD*ܾrŹ'„yŠŠ]m«Ō\\@NHš4æÆc­ E¶”©W7P‚µÅC·ņ?§š‘ Ŗ®cZ•Šēż™’XܽüLĖ’H’œX‡ąģĢv„|6¦¦#˜GL¢Ę`¶!-ĆM\EźęTts2ˆj$„!hįŽĒrń„j֊‰£U,©…"Ö*¾ff+ *’ČžįƒUĮųž §āQ^tH–ī­_ń‹IĢ2ūS[ŠŽįØ·ŚT©R„he}‡”Ą‚å;‹e…ÉĖO *bģĘÆœ£ė‹'š—ŹWuł‹(f¼#eLū0ūxTĀ6Ń7;ˆfJ©ZUf1"Ń Y'É.āpb¾SĢ,a˜w˜_8^!($`§żL9ną¾eeŸ2ŁI÷5*TŖī*T©SE—ža§~Ėéhtq‘U@įQņ–ņ…YˆÉÄŹZfP1?™žvg’Ļ%ŽˆW,@<Āį8Fa“°Œ¢JŽōdDU2ō\t cŹØøCg…<§·ĘsŁlĪ‹Ā+oæ;2 Ń ©Rŗ\KŠŲÅ˘Ō=£ ef˜3) ^§óŠ%HÆ ’’ŖČæ˜VńĘ,™ē0d GˆĢ)š2öQ‚“æµŲ2ÓĢv= VaąŠ ÄNu½—éÕ¾„™U*T­ ĩĎOģWčJN_³ŹĶ²µØs&>A„¬—L§°ā/ ędJåÓp ™’#PŽ!JŃŠ¼‰Wā|Ę]¦%„ķsĘ®Ö;‡BT°ārÜša2yļŽ¹¹Ų+N!}‘²Ų ›xŪO>~“7—/@ 3²äŹZZZ*sšr!Zbˆ™“ˆ&Ń-‚Įę*%d(§1²%Ü­Ŗį‹RąaœH’cS˜”EĖŃVš»ę‹”ˆ1{ć°¹{YPƒQoPŽ«VX×l½ˆŌ\é_U³˜éƒSÄ«¢RP\eApć’!še¹t344\Ėd@K6&b‚ •.Ÿźp½dę%–ÖeĢ"ņ°esś=%S™ā;ä“"’‰QōĻ[€&:³U:ܽmVėn”*(v+[HĒÖ՗WĢįx™˘TEĮ”ńqĢęĖ%;„QĮ?œF¼Óē8Ėv»3qóŽŌĆĢjĪiŽģÄĄ+'$“KłĶ²ū†ĒzØĄ¤’WżŒ If‹öbŠk*ć"ҧ’šķ°Æ u j8iа~#¬ÕGˆS9,tµ•9¢²ć«r“„˜×*™(Ļ1k«Œļ ˆmŒŹsZ8Xń7‚µĆˆQJę ĢāhĘ"¶XYT»•‰pŚļ=§ö|•®gø• )—øbޜov Š8bż^•ń› ĪžSƒFśæõ/Ԉ“Yš‚·ę|l±¹ż‚EƎŽņšC† ɖ6v·„HcpŚļ6TqŌ«ź½ŹB€2g 8—µ-^"T# E·JڌµT4­ńØŌ_²¶Ī5œ£lbd—.^¼ĄEvöéøī=ŸģljwÓ ŌVßQÜ¢!S‚Cy—l *Ū-É AŹ [ Œ0[‹u ­ʂ‘OĮō¼źDŲK¾øęq Z¦;Øw.Ó¤ōs‹Œ mń/T^Ė–į„¦ķŖƒ/¤_/YąpĘ&Į*&Ā™OÄ·Ę„ł -  0@9q x„°PžĄbą™T²;3*±-‚Õѝ*Tž­Ė—/¤‰J¼±€”."©ę E†•Šä"¹Jќu°T9˜ø <"-öÆÕ«yŅžųŲx޶ø¹ČŖŃĪ£$Ć1q1i,)ÄOā3ę—aāU-MJYĮ¢Œ½ō@ņį“ł¹o Ą¹KĶĒ]ź/Aœ¢8# ĆŠ'QÜo:vą‹ü#„WW.¶yŅ  jŅ®;ēźöėb"U*ń .Ŗ%:\æøWoz2ģ˃˜yŗƒ-LZ CĖ J1q…’‚ĪX1Pŗ*ŸF¼šezŹ-V ø $„ĄOØh‹³1g_Qé×Io˜9W˜KĒŻŚbw AÖX<ˆų›ˆĮœāxQÆ(Ƙ”+qł‚U"9Rxy@BlŽ`‡ĻūX*a.߈xˆē†,Ź‘®Xø«Õ'‰RŌ ŃŌzUŅ>ųńÜŃ,ź‹g \ĶXLČÜE,™TTT¤˜©ā]”©Ć9Šę O ŒŁ,ͤo‚(`OĢĢ ĖĶx‚Ą©ē³ū sŁ-ćO[8—Ņ>śž˜”8SĢeØé²L8S'“ü€åœn!āaĢĀN1€†øēL\Ø3Ėż”ųEUāįņóĢŲę7Šł{^–ČŸ8£Ł=3!&QČAäfBŁÉ˜ŸŪE‡”Oöą@µe+ģó’cj/5JwU>eÅ'`Cž’—˜Ę-ģÉ}Cļ†ś+<§3CĘ<FfQįŸŌŖŒ†Ä~13<āq<"ég;Mx G¶LeŹ’"¦®!k}© CœÄC¤õ2‹å¼ū颻žĒlS˜Į0ó?Ņž;łĖ˜J—pa Ārˆ1“a 5łž-Żvꔋ—…hv„œēߟ@Sr†"”rŻ%*ęē3āŚBŽ:¼“¾Ä¦IcµJūĖź®Ēõm{÷£u.Ŗū•Š}PˆóŽß\%ųŸi'™Oś{ėjfT©Rŗ^gēK)ń_«ī„żH÷aqYŅ%5„GU¼½:€GĪT©_]­+ŚUń8•t.\¹rūJÕļNakę˜ó„5+mJ™–įę3k¶ėcĖ„lTu­ōÅTƐ TÆØßµӎ#ro”}»Ņ{ūģŖųLqŁ‘ź’ŸE ŅÅa1Ėz?vc+yŲaĢWn5½MżšŠ½|y[čPēŅ;~H»µńW±FŽ!Ć(į‡+:/…J?®•‰Ń­o ū˜=p[3‹–>‚µ-ōfÓ3ˆ·­“1’C>"øŌÉóį–” ¾`j͇mhN"\ć§}œź#>ģ“Jō×")cč\+Қ«˜q{xT`JGÅŌ @Ž1ZœĒ™Rõ­q¦t čÓĢ Qó¶čŚsWrĒÄJw„ŲÜóvR_Ææ£šTU¤5ž`7x–üĆ"-ØĢ¼ķ½ƒh”³’YoĶA*#”g¢1ßR·„s¶ö ÷dśE'>Č.gœ„ššm©‘RŹ9…Å—˜Ģœź‡‚“­ĆÄĒ1­%WĀ)Ōj’šāµcų—3Ó·:d"ŖóōEśCf{Ŗø•¼iŠŽøćOłxkrōˆXÓ0EĢ &!!©xhoL‚ųbŖśv—aéՇĢ4Ēņqœź£ž‡Ž˜Öš{*yÆ`PŹŅĢć”Nąøµ9;-œ’²«/ųŪ[n6ēš»–þį‰Ļ³°5¹p¦— ó ’ @|ōø\ •3gćoōˆķ^ÅĆ ¹{BSĒąar„iQÕeÆ(ŚUÓ}8Žėz-Įo|ĒXA+KŲāWūŲ{Ęąć}D­„øöµöšŁ±•Ō{*½•ŲŽķÄ¢³óŗåø½ŽīRÖgÄ Ń·Ęļ[„z=™«ųź {ŽĶćŖ#‡ĘĄ¾%ŠÜmĻhĄŻ^Ē…w'²"/‰IįŠŲ/Ć2|%-\j5uĖNĢŲžõš“}ŲöDW.­ĖļĶą`5/¼=’,ĮN;óī—._bz›č ųįŠtø·źOŠrtžŻź‰®«ėOæ>²w$„]ÄW=¹ņwF?y:Õ½õ^:cnŹķĻŽŽ“­ź4qžžÕ}2±¢ä٤Q“ŽöĻlcųKŻR½¶Ŗź:ŽÓŌņéæz·1§ul{›—ģL~öuX6Ėß`n¹}ékt’żšķ‚ćź®ćҾųčæAfS_I©ä¬}lśP\ne„9ÜtÅó”}eJ¶%{ ʏ|!ĻD‡ƒŽµ×­°šŸÜGӐļŚū9Õ}i”ó.ōнÉĢ„ćÆĆ ÷OŁtG,{0WU<÷7±ķ ļŁ‡ß zč¬ę"+kҬuŽƒųŅ}u{ —/cųōßZį]„]!†•Žżü é>„=ÓŚ›ßP{`¹Ć¢qŅ~īzóŪz'ÕĀŚžtz“ķĆ.Iśe×Uko©:Ś ūޟpćPzO°¼vķNƒö£¤ūäį8Ōj-ō—ń£¹k×Į2ūēķGI÷Ō1[ģB撿ŲŃś™čĀ ??»ŻBq÷zÓ}5iĮj+ųußN¤­.T4׊ĮŸT?·Ŗ`ńTóÜ/ÓXĤ~&~=eµŌ¬_rčć¶Õvą'ūōµÓ+¢tɱ] œśU¾“Ń •[ßŲGp œoæŲźĪ˜śŠ+?^Ī\»×× [ūŻū°½ˆ”ŗežV(۟y|ZŌemoké—ų‰½Ō^óõć£ĀAÄÜÅõ*Š9? :0ęj¹ŚæU—ōå5~ų齚9?o{įŅ?f„ž~dŽ;ä­ēQ#3Ÿ¹9w5—ł“{YcßĒę+dĒæ?p:i_ø-ž¼Ÿ¹Óū…æ÷‹¼ąrķŠżŹæqÆÓȾ5DēŠTÆÓ¹Cd:a}‚÷Ō©_„“^ó`֕æüŅÆüū:oģ÷/ žÓrśŌóūĖé‘b‰%?·Ÿ³•ŃC6Q *ļźT¬_Fɗšę,ćōój'={ÓV|ōU5Ÿ$TO.JĒ2VÕÖ#ž#öR?h©ZÄ®ÄI]2P£wp8ę ›ŠŽŹĘ*Éz–DEģĖ™wÓfQčš| Ē󱕰1ŁźVą‹Ø&:§¾žqZ­_= ߔz…"Vw…ĆnÕqˆż [÷!ZARĆJŁKk­äŗT哆¼uHŖdö„ƙI^¢ Eæ·Ø-ŅåĖź;—zS»¢E¬’)t+įJüŗ“TØQ0æÉWjåļyÜ©ćQZÖĖUvJ@[ę6¶ółmL$Ģ-Ō\#K_”Tį@ÕPŻlud·ė*ŗ–žWQčØķ cü/¬Rwõń:kgō-8œē¤ čßR¬æ*čTضĢõ5-ĄĢ”€ˆöU0Ŗ;Ō ņéĻkXü‰xLaDMˆ”훕čT~h÷`ėŗÖ?0OšcWėˆXXv+Äé¢[Ä{S·?.~aÆĆ JŠbÆD"¹JV½ vč aæ³˜Ÿ[TÉ )"XåģqJķÆ¹ŌńŃ%|n# Ų4>}ł48‹ĖėUs*>^õD¼Ź›-qųź…švĄ rĒ£—`E·ä(·Š«Ģó<Ź +č\r~F ^5dõ‰BxkžĄę*XŪ}A)åTø@Ü~LZŽŹ«¾J›åÄCžŽå§ē7ßq+ó9{'JЬG—e^·ńŠ•Ł*=\żiN:qė¹ošć˜H®ŗį+p 믠÷‰]•ŌW/É« čÕź•ė¹G¢qų•#Ó„|%-PĆ.}ĻĀjW¾ÆdżųЉЯłz”āųځc޲¹Ģę iCģ «‚ŽUų ōyz(óŚxf00ŅÜcwR=µżųō”Alõ£ŸUXæĘ \»ś!vEcżļšīD?—ć# ˆAdzFN枀ž:©cĻįÄøēŁŠĄóٵ]WłĪ„,Ƈa^¦šæQußĆŽĀśUұSŚZ㾮ڿ5¾Ō…["ŁŖ:$©„Ōf^{[ĀŖ ųīĪŚ†_5]©9|g/ĄusĮł©öŃ«æØœž=±ŽŃ*ēöCG¢dņDGĘŌÅõŻ_ÕČŌžĻ¼­0{$§ń3¶ńƞÓ8Õ`÷ÕóĆNµ’ęY޾Š[ŠYćš¼ĖČQ²]¾ä/šƒ¼±Ēn{Z'Ÿż½•g'ØPĻä¤aŠžĒ{ō#Ąü˜·ė’ŗõ]½±+~=zõ•7-ßoqiooWJū ”ó9~sż*ų}¦˜Kcń2`’}'obå‹PŽ„ž%o—ķ©‰š‡|!_Ļ "†^|?$*ŻŅWY«,Lz5™b»{Š«{™‡čą·Ļž†DČt«öRc*ųŽˆĒš,óö;śŁģJ÷ݟÆß“#łŠQYõוŸAæÓŲ¹ ˜7ųø}·˜WžĪė»N_€+ qęsæ·æx ‰_·EæĄœ~߃įĒP›WŒūjŽ?oæŌļĮ{góšżĮ„ųJpīÅŅ WźcįŽqßż~©Ź¾ōÄOŃOT­ž~³ĢJż¼ę;Eē™KĒž æ•Ų}ü®’š‰”~ØäsŃl?üß̳Ēg…ü3źŪ~¾A_žß’Ś ŚĒäæm²Üňø@‘ 'HĢ‚@pl¶BŁ„lŠ #I ’KI6$’I$’I$’IŪdżˆEź~Ģ£2Ų²I$du.éļ$I$’H 5"d$’Lhć­æū’šg| QazJšMtĮģ–ŃtžĀ€$H HI¢$’I$’I$’IŪlńÆęüҔݲ’I$$•]ēķż I$’I!4d„’Ii•Ä5Ųßé`¢$Ź0zFŽDSd„–ҁ$ i$’I$’I$’H$Ņ@łłŖÓŲ“µ¢ŚżI$š%’a ‚I$’I&6ģ„’I‰Xś'”˜Éā~ŠIKBźd¬X’Lń`„’ĀI$@ ’iŖŖd’I$’I$’IŅDīż¹e„–B³’I$ƒÉ’I ‚I$’I &6ģ„’I‰Ā“Ńٵ8˜~ōó|ŗ ’A•(ķ’ $A@mŽÄ$’I$’I$’IŅŚx+Ųżž¶żū²»’I$!Ɂ‰$‚I$’I!&Vl„’I€™$łēć·"ŁłJ? ¶ŚŠHų­’Y@‚Im­”$’I$’I$’I$Śŗ{Žü<ž&ÅūŠćI ⣒‰I$’I!&Ģ€’H™ „}Ė^ŗČVž‹Ō»šūČ H9čå¶ €$€IŗT$’I$’I$’I$‚ŪšzĘń!<Ÿ$ǜ.ż’IH¢Hr É I$’I"?Ł€’I›"ŽŲI$sĮŁĂ÷ąöH6€I¶ź€’’@‚A$@$ I+ķ$’I$’I$’I$‚ŪųäČŽŪ¤—MÖÄi`HIø” żI$I$’H 0wŁ’I˜ł’I$ŚD{óŃ$“ŌŖō¶Zö’ÓA I$A’HSvž$’I$’I$’I$„ŚFyŪ2[’Ś”·¤’@-±l²Ų 2I$’@I£>ū0’H$ŚBž¢÷¤Ó$’•®É ½Åø²Ł !“HŠ$‚ ÜŁj$’I$’I$’I$€›b÷lģ’²fż¶’Ket“lm2I$’M£6»’A„Ś`õö“ š‹”É$€é¬\Q&YI¤@’I ®ķŚ$’I$’I$’I$’d{’Mķ,æ$Ūķ$’K-¶É%'ōӇ%M6I$’BIōł’IŚb•Z„ 6’•WĮ‘¶Ė [Km¤ € I $‚}¦Ń$’I$’I$’I$’BI€ {m·ķ¶ŪI-’ČÄIivš %/I"I!°’I‘ōł°’HŚDvŖ’-¶Ņ²Ł‚™Źj%Am" $’I$€@$ $’I$’I$’I$’I!$@›$’I$’[@ Ū!֟¼ ķ&ŅI’I‘͐’`„Ś@Ū¤8ȶÓS~„²JQ4’€ĀAm$I$’I$‰ $’I$’I$’I$’I$¦HI’I,€›M@I%m×Ū| 0“d’’I’Ģ€$€ŚdŪŚ0Šˆ &ŅoĖђŽ‘Ppe Ji" $’I$@’@ I$’I$’I$’I$’I$’HI²Ė ¬™$ɲĮ'ļū_āg8$›$’’I¾Ģ„’$€šda,Ń}’M“ŚNZB–Ć̹PS°m¤ $’I$’@’H’I$’I$’I$’I$’I$’Ii–‚6šHŪg2Hü’I!  ›%’’I’$$“$šdRi„šlLŅFŚP™OšŹ²OśńBŁ4É$’I$’ÉHI$’I$’I$’I$’I$’I $²II$›ķ“‘ ’·ŖĢ“i# ›d–’I !$™$’dšŲiSdrĀLČSA÷ūĄˆųBł“‰$’I$’6›iI$’I$’I$’I$’I$’I$m²Ł#ęŚ{¶’ļ·.Ūm±ad’’I HI6I$’l€IÓ«JȒ Ś’Ūš7\ū8øŻ"‘’I$’@I6“iI$’I$’I$’I$’I$’I$ƒ-²K/ioēœĻöŪdönYŪm¾“$’ŚI$’l’I$lÓ÷@˜[b[–œuŻ¦Ø GަĮ’I$’@JL’m I$’I$’I$’I$’I$’I$‚,·k_ﬗk·ūm’nČÓi Mś›$’ŪI$Ūd’I$šl /SV›DŲ%ĖØ˜÷ćÕ%Ņ’Q–†’’I$’H’Y$’AM I$’I$’I$’I$’I$’I$€$’’–ŪżöŲ[žūo÷ęŹ³l’Meś›$’Ūi&É$’I$’l\ FŲ5kvSņQ¶Į“’M²€Ś$’I$’HĖŁ„I$’I$’I$’I$’I$’I$,‰Š’ļ¶Ų™÷ŪåµęÜŽlŹ›$’[m&É$’I$ü¬iŪ`H p’H ¬€ ’$’I$’HÓioŗtI$’I$’I$’I$’I$’I$’ädŪ[}’żÉ¶ ö~\Ś_ir Ļ$’[m6É$’I$›ģÓ0`I3 +ńƾĶ5) H$’’D’I$’HĶč-½^ŠÉ$’I$’I$’I$’I$’I$’“ _’ü™¤$€µBöŪrķrĶ$’[i6É$’I$l¹s‚WdIm›dŒm-.’ ū&A%0š$’I$’HÆiIķÜ É$’I$’I$’I$’I$’I$’A’[m }¾Ż’ ’ÉzĘŲ&I2Ķ$’ŪI&É$’I$ÓméłIÄ$lŪū—bŒš„“ł“Į)“Śd’I$’H4Æ_Ł'ń~I$’I$’I$’I$’I$’I$’@I$°Ł$“ŚM·–‹tŚrI"Ķ$€I&É$’I$Ómr›m;$ƒ@ž$—ž)š T²ÖŪhÜ@’I$’H¶}Ō$œńõI$’I$’I$’I$’I$’I$’A$“nß2vŅBI&ŚÓžĶ’Kć-Ķ ’I&Ł$’I$„ŃmŠŲM+éH‹vśµ%°‚d5—ž’H€ŗD’I$’H“ņ6•ń×I$’I$’I$’I$’I$’I$’HÖĖ~ß²I$Ū—}²Łć-Ķ ’I$Ł$’I$„ŃmŚm§h mŽ,’׏ې‘iR’I$’I 4Œś¶Õ $’ $’I$’I$’I$’I$’I$“Ÿķžü’I$Ū÷~Ż–É»mM6’I$Ū$’I$„“m䛳%m9 ²Ź1œ¾|Ņp_‘@ ’I$’I 6^ڶR¾ I$’ $’I$’I$’I$’I$’I$‘Ūo’ą’I$›WT̶Iūlm@“’$Ū$’I$„ÓmD „’i0†ņzEŃŠ%ŠęAssL’I$’I!6VڰR¼ł$A$’I$’I$’I$’I$’I$‘Ņ’I$’V[$’_;zlI“Ą$›$’I$$ŻmR‚Si0fŒ’dtó°)ģyo`’I$’I$&ҰJ:<Ā›d’I$’I$’I$’I$’I$‘Ņ_ū$I$“P[dM;ņnI6Č›$’I$$™mąAܒŚil_žŁĪ)  œ“yiėl’I$’I!&ŒŃ’Rŗ‰čŅl’K$’I%¶I$’I$’I$‘Ņߌ’I$’`I’Ė;Rn‚I¶Ą›$’I$&›mp²Ä’p”$\ qō'óYEiļ@’I$’I!&Lń²R”rŪm²Ūd–Ūm¶I$’I$’I$”‘Ū_Ń 6Ūi$’D$ zn‚I$€Ūd’I$&Ūm–MŽŠ’@€ HzAŅW-#$„_Rį’h’I$’BI2ń$’P $Ū> ¤“m“ši6É$’I$’I$‘Ū_Ą “’m$’@d¤ŪRŹ‚I$€›$’I$&›m²EŪfD€%łžŪōėC².±-ĀĖa½i’I$€’M’œō6Ō·ķ>ŃiĄ $€É$’I$’I$”‘ß^‚I²m$’@’I·Ū~JI$€$Ū$’I$&›m¢/’Pč²’Ak°Ūń‰§÷4Ūo 0…H’I$$Ū$‚żūĪ6Ÿģ>dˆŽ ‚[A$€ĻY$’I$’I$“‘æ_ĀI¢@m$’H·Ó|Z’I$$Ł$’I$$“e’GŽB[¶AMj?›q)˜$¢Ē'p”ˆĄ’A 6€śßŽźwæķ„DH¶ßA KmM$’I$’I$¤€æß‚I I$’L#Š “I$€Ū$’I$&‘mŸń7Ö G[d-ŖO›y°°7n릟§Č=č’JISiŁ0 Ł,›mƓ¦Æ‰P„č KlMƒ$’I$’I%$пނII$’H! ›I$’I&É$’I$$ŅĄCԐŚ[·Äź)›k«%z°ų(7‰’MŸw;Ś€’ł'÷˜†qĖjāż Kh_S$’I$¶’I$J¾’ĀI!$’L €Ūi$‚I&I$’I$$Ņ@²€m~Ūµˆė?’BóŌA&F"‰’¬?©"L—. ¤›o·ū¹¶6Š@‰©æų_śŅd’I$¤’I^š_ĀH $ÓLI @$Ūm$’I6I$’I$„ŚH$mrß·ßė•3Čļü[:—’bN’„6I–{–™³o÷Į‚.]$sI’ü _øMPd’Im ’Öž’ĖD$›I! I&Ł-$’I6I$’I$„›HDfæōŚ{6|,¶/=ńóD°†…$‚I†„wķ¾­+ūžød²_ķż _ņMZKi $µ“–^ŹI$’H I6I%$’I¶I$’I$€›’IADż¶ŚHƒąo–On–2h‹$$’IŠ›%]uwŁ$^ ÓļD’_휤ŅI#,’@Id½“’~É)I&’I$’I!$›m¶I$’I$“l’I$--϶žHŅ—¾ŃūmŚ}¦¬`hwĄ¤’mū@F„6Łä’٤’I$¶Ż5œ¤¶Il€¾ÖŪI-’~É  &’I I ¦I $Ūm¶I$’I$“l‚I$Ģ>į¶ÜĻ[õK_’īn„z¶æX ¤“mKņņŌ7ķå–O$’I$¶3œ [ņI$ęJÉkkm²I$“öČI ’IH¶€’I$Ūm²I$’I$’mI$L‰¶ŽŁ€ae¾l©`KJ0’iĖŗŅņמķm’ߤ’I-¶¶VX _²I¤–śWÖŪm¶Ķ¶ŪžČ $ „’I @ I$Ūm²I$’I$m I$ 7ūŁyŁéŽ}óž°ˆ>²vm[ŗæT™Æżd[_¤ŚI$–"HŻßöI$Ó-5¶Y$–IdšöŁ "m’I"@Ūm²I$’I$’m $ėÉ@’’ŻŁ#gņƒßē\š(æ„¶IÓi’ū"@€ŠoäŚ_?'I$¶1;õ’²É$Ūżä’Y$–ŪdŸö@ $$’IH@$Ūm²I$€ ’BI $L‘m¶Ū“J͘”h“€C}Ym¾ÉKoKó/n‰¢o$_t² É$¶£5ö¶’²I$»Ļe¶Ėd–Ūfß“I$AŚII$’I$‚ Ūm²I$’IIA$lƒaä“[:MŅ’ō“} æ’Ū¶Ū’;o^ū!n›ź’$ßāHƒÉ-¶”ö"ßż†Iō³{%’Ł,’Ł} I&–ŪI$’I$HŪm²I$@’I$öÉd4–Ū$MY(“KanŪöŪd=Ēū{lė$ÜRž¤Ó|I„Ł%¶1GVI$’Iõ’I$’I%’_ņI&ŪI’@‚@†Ūm’I ’I$4ĮŚ%Łpģ—’÷åv‚€ż¶ŪI?öŪ"ŻåŪl 4‰R’$BlĄĀ_-¶h-BĪ’I’¶o,¶Ū?¶ŠI&I$’[m Ūm²I ’I$4Ņ$ś$Õ&ßŪ-(‰vĒm¶Ū`/žŪh›õŸūśV_5ŅžØvö ĪŻ%¶°!¤E ŅIµ¶ķ“æ’Ūi$M¦É$’Il’I$@$’[m²I ’I$$’"ēŻ„³ ¶Ł%­ŗ’œm$Ūā­žŪ(M…ˆ$‡[į1ģFĄˆź’$¶i®@ܒI¶’’æ’ō“M¶É$’Il’I$’AI$’Km²I$’I$$’nµ¬„£,ŸtÓM$»I&e‹ŌæŪ)(„uģĶSųA1oébKHM%¶š½Ė–Śŗm¶’}’h “M¦É$’Il’I$’I$’I$’Km²I$$’I$“’No½¶ŗ=’AŻ0ĄOĖG-@-÷Ū(KĄŲ"ā}WźÓ5żåOHŹķ)$’Žżļæ3mö’~Ņ@M6’I¤’I¶Ł$’Kl’I$’I$’I$’[m²I$$’I$¶’H…÷½ł¤™  Šśg—ŪjwZhPüV x®ß„ĖŁ$’ō­īń,Smµ“\€Ūm¶Ņ@&’m6Ł$’Kl’I$’I$’I$’[m²I$$’I$¶ŅIˉMm%–iūŠÄ²ŻXI“ČūnsĢ$t6LāBŁ€Aˆ,ŅÉf’ātĮRHæm“æ“Ūm¶’I$Ņi$Ł$’Il²I$’I$’I$’Ūm²I$’I’I$6ŚI­M5å²B1¾‚ –-ÕélØūmžŽ1źĘüĶÜH9ŖØ MßI6’NĄrßo¶½$Ūm¶I"Ł$’I$’I$’I$’I$’Ūm’I$’I$’I$6ŚI»m†õ“’™”Ū ­ĮE2bs’mĪH 7Ō42Ū ’āäA“m·’ƝHŒšæo¶æd€Si$€ ¤ŚM Ū$’I$’I$’I$’I$’Ūm²I$’I$’I$&ŪI7fm¤ ·’Ó“”šN.še²©QŸmĘ·~]5½$ĢO£ūlŪm·žĮĀI’»’õ’’’É$ ¤’m [$’I$’I$’I$’I$’Ūm²I$’I$’Im$›i'-H–Ī”’VįI1?mæīśCę–Xh½ź ė&ū’÷öĆCi®’öæ’’’ō¤ŅI[$’I$’I$’I$’I$’[m²I$’I$’I%$Ūi$£Ķ¦–i$–oD÷ŚĢ¢ #˜"oöĀüWCĶ”(&bgY?žŪžöĒKmŸßæŗÉe²ßŁ%’ ¤’I [$’I$’I$’I$’I$–[m²I$’I$’I-&Ūm$”M’é6–iš[Ö(’żC’•¶ė4‰ū;)|dūY?¶Ł’ö#æ/—É%¶I$²I-–Iz 4ŅI d’I$’I$’I$’I$’Ūm²I$’I$’I$&›m$·4Ջ’yąa¢tł1%&$Če–„“ærY8{Iæ‘$ļö†?–¦’y&Ó[/’|“h½mE¤’H d’I$’I$’I$’I$–Ūm’I$’I$’I-6ŪI$—÷äåƒp ņ&‡9 —Ķ)ZŽ„)<·ÜKµŪż½wI¾Č žF •’ł¶¾Ļ‰¤’@mM¶’H‹d’I$’I$’I$’I$–Ūm’I$’I$’I-¶Ś@·Ćü”Œø2Ę µ`…ld[[ŁžŚ³O½²mžIé$µHė!7¾cÓS¼Ņl²Y kņ 䭒I$’I$’I$’I$’Ūl’I$’I$’ZI¶’I-’I6’J $“v²ŚqLwG'įāß““·nŠ‹“ėō;Ū­õHU»™·7÷öi}æż$Ų#[÷ö ķ’I$’I$’I$’I$’Ūl’I$’I$’ŚI¶ŚI$’I¶ŅJ “’t–ßy\WWLl Ÿ+čB M©uŖāŪ›ėõ^Ł%ōiTža¾ÖŠwj&ˆi¦Ł[æÓōģ­’I$’I$’I$’I$’Ūl’I$’K$’ŚIöŚI6Ūķ“ŅO6’ööŽC“RqŸr“”SHI?÷ęīP›ĖōŌŁ»©UōÉ<¦ĖH§¶yl›S[’Ń(ü¹’I$’I$’I$’I$’[l’I$’I$’ZIöŅM&’’¶’{KöŅżöśā¦T²å ąAĀ!É?"ę|Pć’Ü[oˆAŻÕæ…ݶ[!ŹŚ3[æŁž€’©’I$’I$’I$’I$’[m’I$’I$’KI¾ŪI¶÷©$Ą#±5ś]¶·š7¶5¬aļhŒ=ė“ūo“>Šn‚Sé·ÖįmĻ%›+/’ė%²É“›ZG[’¼ŸŠæé’I$’I$’I$’I$’Kl’I$’I$’KmņÉi–’Ó&Ą#`+ŅH­»kż>@-°Ü¶YŹ“’’“RĄnĆSć“·É&‡Ō ³Łe¶Ū$’M¶ŅKFk’œƒPE’I$’I$’I$’I$’Kl’I$’I$’KmjAm¶ßŁdČäś I-·ŽģļŠĖ„#³w“’—Q7įķŠįµ·O¼‹š ļ{-¶É$i&ŚHvė~œÅP ’I$’I$’I$’I$’Id’I$’I$’KmVA$¶ūrNČ‹ś qm—MÕóū?Ü0QŚü’’׊I½ķŠÉ„·]żGD+äkd’Imµ’[&Ū,JĶoœŃŠ ’I$’I$’I$’I$’Kl’I$’I$’KmĆ$–ŪRJÉzyćl’åü쬀€‰ęՒoןļˆVAµ²½żeŚ£ ’“’K-ķ¶Ūe²‰JŁķœSš ’I$’I$’I$’I$’I$’I$’I$’KmJĄŽ’JÉ$zIsl·$ø±°RI"Š §ž‚{nźAŃļŠvɽ¶ŻµĄ:Ķ’I-i“›m6ŪJŁķ˜‡ą m’I$’I$’I$’I$’I$’I$’I$’[mž@–ž—ķ@’¶~e‘é4ž2Jd“Ć·’ŅęŃł@yO±ė÷¶mų¼œŅ€]’Ūk)i$€I¶ŪK[­˜ƒ`Sl’I$’I$’I$’I$’I$’I$’I$’Kiē˜¶Ž“żX"¬ßeµĻūėŃ)¶]Ż7’Ņó3Ł{)#³OĆ’ł µ­B’’ż­@$M$’J{½™Ć`m’I$’I$’I$’I$’I$’I$’I$’[mļ†¶Ś—ŻŠ m?(^‘?rōŪ·6ŚķæžŅóaŠżlg½æ;ē’Ł&JMUȄķµ@[m°ŅJ[} d’I$’I$’I$’I$’I$’I$’I$’[mm¶$›Ėė’>W¼}ž¶A,‚NÄmæ’ūW.S%eŸ=ŗwż€"Óh¢T ’’’żµRM·¶ŪVŪ­œ¢ d’I$’I$’I$’I$’I$’I$’I$’[mnEū$—Ė+d’=Ž* µ“ŸJI$’~’ż¶’iS4$ą’ ÷ü„”š$€¬’žö[gvݶöŪi–ͤ–&ŗd’I$’I$’I$’I$’I$’I$’I$’[m’É„¹$ŸMr@6»-‰¶ŚI$’߯’¾ßķGž’„Kƒž-×l=4™-† Żd’ļgSI6öÉöūkm— ŗ d’I$’I$’I$’I$’I$’I$’I$’[iļč©&ßÄōŗY?.ٶō’I$’Yo’ž’oc’§bü­čwdŖY¤“Ÿž,I,’m¬y$ßm¶ŅIm“„ģ[d’I$’I$’I$’I$’I$’I$’I$’[m]Iæė’’K­³²R–4·»$’m¶Ś[~’žŪdz<¾I¶ĆW­lKdĮłØ“ŸæY%·m¾kl›m„¶Ūm³Šd@d’I$’I$’I$’I$’I$’I$’I$’Ūm ŗė%žI/·Pü—”$Ūo·ūKnæöŁ$M’M7”E=åäęŪž˜n²I$²m“6’ģ›m$¶Ūm³Ä@[d’I$’I$’I$’I$’I$’I$’I$’Ūm ¾+;÷Ėo·ģA^’’I6ß’’’ko’¶Ū$øč>ŌÕ>Ä©dęŪI(R¶"É/²ķ½ü›i-æŪ}³ĀˆŪd’I$’I$’I$’I$’I$’I$’I$–Ūm ³+XnK¶y!›;ż²I·’É3ho’öŁ$Ÿ’XƒĶöE»“ą’WēvfIŪöķ¶Q’›]­’’ķ³ĀJČ[d’I$’I$’I$’I$’I$’I$’I$–ŪmĄI›kAźK}öŁą>»ü’O’ņ`“½‰ļ÷žŪ$‘‡ś’5°¦ĶŒ4į’ĖĮ3nŚÉQÖŁ¼Š’“{­kūl“Ę ½›d’I$’I$’I$’I$’I$’I$’I$¶ŅmäI¶[CŻénžĻx æm’O#m$’…­·žŪd)ŗ»l^§Įua~ˆńĮ,›iQ[ilx›’äūd›Ī7uŪd’I$’I$’I$’I$’I$’I$’I$“’IjI–ūŠId’Ķx e’})$’§Æ’žŁ$ƒ²Ņ«·rŗą)4člFĄBßżP|¶¬Yß` Ė&ßĘ6Ūd’I$’I$’I$’I$’I$’I$’I$“€IK¬æĖ±żY%—Ķ®L,›~P%ņcļ÷’Ūl³v· /äł|Å}ēiŸł²’Q w|ū$ Ͷžę%Ūd’I$’I$’I$’I$’I$’I$’I$“€ k‡Ž‰±ņæ&’̧¼$ßųöd’C/’ßŪm%ķ~,ż]ĄJģĢ-„‰97Iϑԉ4{äOĶæ¶¢%>Ū$’I$’I$’I$’I$’I$’I$’I$“iæģéz¶ó̓H”žĻÆd$æ^/’’’mµ,d‘l/K)£,œ­¶/’d”>ŪQ<_ü€žĻķµ"mr Ūd’I$’I$’I$’I$’I$’I$’I$“²Kģ•v/÷Ūé·Õ;¤öO„ķ,Ÿźļ’ėo’m,d‘d-ķøµMżŒ-¶¦ō3i¶Ūf½·žżĄž[bIHr Ūl’I$’I$’I$’I$’I$’I$’I$¤³md•=?žśIeö_'ņO7æ’~ņüłm·ż.Œ•$ž ā™½˜¶ÄĖķ–„?–’䟿’üŠņx“M$Šcą m²I$’I$’I$’I$’I$’I$’I$“³in….Fž•émūŁDߓ6æż¶›ncoŁ,’I'5äßYĒ›’‘¶āÉžžČ¶žķ›?ž ņāŪl$’GT-¶Ūd’I$’I$’I$’I$’I$’I$¤€ ’RɅ§€-7×Io’YeÜ'6śM“’·OÉ$’I/°4$-F€†«æ³•¶®O’ßŲĶžm’žI$’’ō»VŅd°’GL€6Ūm¶Ū$’H$’I$’I$’I$’I$”I’Fß7”ķI$ūm’’Ł'Ų}’× $”? é6Ūm’²“% ŹŪĪ›¦ņ5öīĶžßŚšmæūŪµ$žĄ4ƒq Ūhː &Ūm’I$’I$’I$’I$’I$’ŅM’HH–ÕÖĖ$Ÿ’ūIeÜ9¾Ó€I)¶6©÷ūķæņV¤mȒF§ö1öŹżæßū›Łż²¦’žé$ƒu“dļķß A  m²H$’I$’I$’I$’I$’ŪmI$ؒ뤟’śK$ō9¶Ž2HH>©ż¶Ū’ś’m5śklŽ1žĆ’·ū™Ūm’öo|(öČ6ŚH†ŚžŪoLĄ)²I ’I$’I$’I$’I$’[d ^›kü“ķöŽ[dōy½žrHKu»äĖk’šRaū~’³@¾Ž}·ßŪŻ{m°”ļ–XR­2Ś@¤šæ}¤”i%lI$’I$’I$’I$’I$’I$ öŽŽ’ķmk_¤šyµūrRJŪõM«¹$…~’ę[%6Ū}æÓĘ>­i¾Óūܐ¬„~2žŪJŽĄæŚ`&›[ē%¶Ł,“†É$’I$’I$’I$I$’I$ m¤Z’ßCż’šń;¶ūbŅZŪõ’ĖŠ@¦ßv›$_4²ŲóŹd,ßž×’(Żę€)7ūłŪ2Ļæß~ÓL‚€3m“ŽŻ%“É$’I$’I$’I$I$’I$ @bß[ŽZü»96ŪĪRHŪt»[ÖŪbTŻĶC$ <“H~ųĄ ĄŪ’`ŪYВˆŪ[v~¹2ż rl@J’’žŁ¬¶“Y$’I$’I$’I$’I$’I$’ mK÷ŪÖŽž6Ū~PŪ[f²[ßż•{ $ßī€yX,H–ÓK`ŪĻFŸiSÉ’Ų»[0™l€H-¢‘’ķü³Ł$’I$’I$’I$’I$’I$’I$%¶Ū@—g7’zZķyoµk’’šeu &Ūt_*sG+[bŪĶŹ.Kף¾D!ŅiļŪh€I 욒’·¶ Ł$’I$’I$’I$’I$’I$›m¤€ ×ē&ßj©mgeŪ‰æÖŪōqp&śŚŅĻ¢s° * c[͚3£„ņĶ’Å…ŚY-Źh%0—’ļž² Ł$’I$’I$’I$’I$’I$Ūm¤’ rÓ¤’~K`’¤’§ŅKv»§šAėmšXšł>”"ZB‹oßóLŸ·ÖŻūm&³}„N i…Ī«ķü•Ū$’I$’I$’I$’I$’I$¶@Ūd“’I zĮō·ųl@&D–/&ņinŠ6ßémšŠ@6ś ’Fƒl3O°hŽŚ’ą =4·}Ų€ ’|W’{¶ÕŪ$’I$’I$’I$’I$’I$¶É$›$’’I¦’I$™nlæ–źm£’š–9½žm­Ö$»Ifš€’I °’·hs]­·Jƒ±M’o“mAZMėžz]m•Ūd’I$’I$’I$’I$’I$$‘$Ū$’Ūl–ŚI$˜.zŪžģéżø“2 ~}µž=m†KxšZM¤m’ŅG‡dS]ƟļwŪ}óE|Si‚B@ $–ūé hŪl’I$’I$’I$’I$’I$ł`›$’I$’I $XĮ-§~ķx¾k/+M·Ÿ-$nIū¼Zm¦Ūm’ZG eSK [۷ߜhLŻCI°A;}ļž[“HŪl’I$’I$’I$’I$’I$i»h›d’I$’HĶSķæ„k(ŗūn„Ͷ· %žŁ%Č@$¶Ūd’ZG˜evżā·o’ÄĪāĖI0 jA’ķ÷ŚKŅŪl’I$’I$’I$’I$’I$mš`’l’I$’@“Ņļ%æŻ Ō}9r³gŠĻī։96’ž$’Ł$’ZLš„’owݾą6KhII /%›÷öŽ€Ūm’I$’I$’I$’I$’I$/“@M’I$’@ ‚’A©’ž['Õ_±R€EšOmži×”H’I$’I$’ZH8ˆRK+ƒķ»ŪŲ”€CY "o%æm’–dŅm’I$’I$’I$’I$’I$lÓ`m’I$’@€Ņ@¹æŅX/ų/õ€×Ó/m»õģ•l‚A$’I$’RHIzÉ/ż’ś lHČķĮ»ūlædm’I$’I$’I$’I$’I$]ŪI’I$’@”ŅH56’Iµ×"³dž I³ĮvŌ’l‚ I$’ZHIµ^Łóm–dĮ`’@(H‚@“o$› M²I$’I$’I$’I$’I$4ŚI"I$’@KH$€[õÖęŃŚ“ešæĮ7īæŠ$›l‚€I$’ZHÉx‡M°­Ņd¼˜’ €AŅæł&é$m²I$’I$’I$’I$’I$vŪm&& $’A’KhäK~’š•“DŽG€Ź,Ō4›l‚h€A$’ZHéÜSOȲ$› €‰ ążČšKwȬ-²I$’I$’I$’I$’I$6€-¶Ą& $’I$’Imķ’é%Ūߓ滷ž1Ō6Ód‚-¤€ ’KHéø ’‰Rb‚Ą‚I$€ o’Ś[ņ=‘ ¶I$’I$’I$’I$’I$°mæŚlÉ$’I$’I- ’’ž’Ūėoķ¶Ś@C0 $d¤€@$’[Hļ’h.S÷Ą [€I  ļ÷’] ūr¶I$’I$’I$’I$’I$€Mūż€É$’I$’I- ’’’’oņ[>Ō‰Ą)ŗø2I$,€ $’Ih’÷ɋæ÷gļŪ’’ćč~ßķ¾śm€Ųz¶É$’I$’I$’I$’I$ oŁ$’PŁ$’I$’I- _ķžŃ%ķ’ŅĖćBk€ #ų’I$L¤‚ $’KHm ķ™üžż¶ß|Ļ0FHLO’÷×d€Å/D¶É$’I$’I$’I$’I$-ɦßč$’I$’I- m“’’ŅŪŁŪią-¢ x’I$-¤’I$’Khļģ¤’o’ūŚß’÷܂OŪo’· ¦’Å»€6É$’I$’I$’I$’I$mĻ’²M“$’I$’I- m6›oYŻūIų“?2I$@&I$’KH’e>„’É$’ŪgŪm÷ųžū’„‘-¶Ść¾ČŁ$’I$’I$I$’I$-JՑ”Ć$’I$’I%¤/ ”’ɹ¤ 2I$ ‚ $’KH½$·&m¶Ū$’K-ß}¶ū”æśI%Øm¶Ū@£¶¹Y$’I$’I$’I$’I$%¾‹M6id’I$’I%$’@/KØæŻ&e“Ę"I$’II$’KHk%¶ mŽŪe¶I,’m/’ķō–Ū’@m¶Ū@³öw [$’I$’I$’I$’I$ Ŗ„6†l’I€I%$ė‚@p¶‚ī–I$’HI$’KH©$·2Æ’’’’’ķ¶Y$¶ķ%·ß²@m¶ŪH/õWģ$’I$’I$’I$’I$£ ²IW ’I$@ &’H½&Ūo­Ģ6†“€H$’@I$’[Hi%¶3?Ū’’ļ’’Ūm’[mæü’ Óm¶Kh-=6ßŃd’I$’I$’I$’I$@±Żž[8‰€%$ˆ’M$’H۲˒»–ÓvI$’H $’[h)$—£ŽŪķ·Ūm·’ūžŪßäŪm’Ii(Kn$’I$’I$’I$’I$ ’H5aū’ą© d$ȒM$’IŪ}¦ŃĪśfI$’H€I$’KHū$›¤ŽI€I$’Ū÷’’öŪ Ūl’Imć»m,$’I$’I$’I$’I$4“H2Ņ}½t¢I$ ¤’’M$›I$CōÜ ½FI$’I $’Zh{$—¶Ź ‚Ėo²Ūī¶Ū Ūd’IM…æm„l’I$’I$’I$’I$$ŪmĢŅI¾«“ B$¤’4’I$Óm¤šNY<øĄ™¢ $’I$€H$’[h­$Ÿ¦TI$Id€IŪd’I-!æżµl’I$’I$’I$’I$¤Łi"öRY%ĆD@$A$”’@$š$Ń$‘6˶›$ų $’I H[h­$Ÿ¤L[d’ $¶Ū$’I-£M¶Ū·Œ’I$’I$’I$’I$&Ł% UĀ[äüb‰$–Ūi¦ÉI$’A ¾ó½ēI$’I [h$—±–`0’ż$@Ł$’I%£­¶ß¶Œ’I$’I$’I$’I$&É$$·Züš¾˜A$’[i¶I$’I$’@&‚nžä‰–²A$’I$I ’Kh$æ#1m¶’öß² Ł$’I%£½¶Ū¶„’I$’I$’I$’I$6É$$Š•Ūž“Q H’Km¶I$I$’HmūßöŲ$’I ’Khį%æ”3m¶Ūm öŪ2AŁ$’I%$&öŪv„’I$’I$’I$’I$&É$¤™ßėŪśisH$’Im²I$’I$’HEŁĀ ’I$’I$’H$’Ki„Ÿ0Ūm¶Ūm“Ū[vHŁ$’I$&6ŽŪ6„’I$’I$’I$’I$&É$‘^›o\r $’I-¶I$’I$’H’vÓm’I$’I$ Ji­½;[,’Ūm¤ž]īČ&É$’I%$&ō³v„’I$’I$’I$’I$&É$„›:sŪmŻ`I$’I%’I$’I$’HH$”Ūl’I$’I$ $’Ii·iY$’Km¶t‚ķéÉ$’I$$ō«>©’I$’I$’I$’I$$Ł$„’'OšMūHI$’I$’I$’I$’IH$›d’I$’I$$’Ii;iÉ$’I%¶‘\m³¹6É$’I$¤õ'v­’I$’I$’I$’I$$Ł$“'ČŪ±”ĶI$’I$’I$’I$’I I$I$’I$I$€ $’ImIÉ$’I$¶Š[yg·¶É$’I$¤ å&6©’I$’I$’I$’I$$›$€’D«³74į’I$’I$’I$’I$’I  $‚I$’I I$€ ’ImBDŖÉ$’I$–Š[Ū½5 6É$’I$“Žį&uؒI$’I$’I$’I$$“$€’@łDÆy2I$’I$’I$’I$’I$’I$’I’I$I’Im˜ž$:I$’I$’Ś[Ķæ® ¶É$’I$”‚‰$¶ø²I$’I$’I$’I$$’H€H•z@ōä²I$’I$’I$’I$’I@  $’I‚I$’I$’I-²JI$’I$’ŚLF“ ¶É$’I$–ƒ®Š·ø²I$’I$’I$’I$$’I‚IīĄŸļI$’I$’I$’I$’I €I$’I’I$’I$’C-SM2I$’I$’ŚnHž 6É$’I$–‘†„ö±²I$’I$’I$’I$$’II±ō֝öÉ$’I$’I$’I$’I AI$’I$I$’I$’I-Ķ7lI$’I$’Ś7źHńä¶É$’I$’‘Đõ½2I$’I$’I$’I$’I–HM°w4NņÉ$’I$’I$’I$’I$’I$I$’I I$’A$’ImīūhI$’I$’Š_īHõĶÉ$’I$’Ńe0ö·I$’I$’I$’I$’I&ĀM6>Ž€ ׈Ł$’I$’I$’I$’I$’A$’I$’I$’I$’’Im¶ŪhI$’I$–Š_n¼t¶Ł$’I$’Š]$öµI$’I$’I$’I$$’I4H “ Õ zbŁ$’I$’I$’I$’I$’I$’I$’I$A’I ’Im¶ŪXÉ$’I%¶_īSdŁ$’I$–Y&4·I$’I$’I$’I$’I$ 6Ąz@A[ó‹$’I$’I$’I$’I$’I$’I$’I  $’H ‚Im¶ŚXÉ$’I-¤“īōŁ$’I$¶ŠU74·I$’I$’I$’I$I$$ŠZ -N£d’I$’I$’I$’I$’I$’I$’I$’H ’Im¶ŅŲÉ$’Im^ÆĪ›Ü€Ū$’I%¶Šv3“·&I$’I$’I$’I$I$‚I&IŽä@-½d’I$’I$’I$’I$’I$’I$’I$ $’I‚IiöÖŌÉ$’KhäćN»œŪl²I-¶€sķ“·¶I$’I$’I$’I$I$’ICV’H+Ōl’I$’I$’I$’I$’I$’I$’I$I$’I ‚JiöŚ\É$’Z@ż&sŹA™Ų€[m¶Ūm¶€sm%¶¢I$’I$’I$’I$I$’H‚^ŅŽ‘ ©”L’I$’I$’I$’I$’I$’I$’I H$’I$Ii1öŚ\É$’ŚY£sxHõŲ€m–Ūm¦€rm“¶āÉ$’I$’I$’I$I$’žö–ß©!½1ŒI$’I$’I$’I$@$’I$’I$’I$’HižŚZI$–Šj…3xČōŲ€›m¶Ūm ~M$¶āÉ$’I$’I$’I$I$/ķ­¶cūi=ļY’I$’I$’I$’I$ $€ $’I$’I$’I$’IiļūJY$“€jó¾fĶČÜؐm–Ūm“vId¶ōÉ$’I$’A$’I$‰zKvō-ZM%$¹’I$’I$’I$’I A$’I$€ $’I$’HIļūJ“$“z=öį?£|[m¶Ūm Ū$–ÜY$’I$’ $’I$ WŹJķ[iæ’‘2I$’I$’I$’I @€ $’I$’ $’I$’I­’j‘%¤ ōO²sŃļŻ’@m¶Ūm“-Ł&’ÜY$’I$‚ $’I$ ¼  æ};Ł’ļŹ†I$’I$’I$’I I€ $’I$’ $’I$’BI­æļ“i ¢’±ņe¶zģ’l–Ūm¤)’$’XŁ$’I$’I$’I$ ½"@—’ż²Ė$ަÉ$’I$’ $’I I$’I$’I$’I$ I­¶żi„7O…¾WCžģņHl’Ūm“€’$’Z™$’ $’I$’I$“Z¼¶Śm>ßé%ŅŁ$’I$’I$’I ‚$’I$I$’I$’@I‘ XI“ķŅ\oȘ·mžÉl’Ūm¶Š?äŅ[‹$’ $’I$’I$ö[:¶Ūa¤“;žŁ$’I$’I$’I  $’I$’H$’I%2mI#’H•æ¶Z  ĻgÉ$žŁ @l’I%¶ŚģŪK $’A$’I$’I$öšŚø¤é$“ä7 ›$’I$’I$’I$ $’I$I$’I$’RIŅMżĀD”ŖJUłnż»$’H,’I$¶ŪhģŪk$’I$’I$’I$[Ņھߤ·’ž“ö—ö‚$’I$I$’I I$’I$I$’I$BI‘mīƒ ±ČHżæä¶Ł L’I ’Ūhģūk$’I$’I$’I$KkI Ś›É’ė¶’“ꔿ’ƒ$’I$’I$’I$@I$’I$’I$’I$’JISo\‰'@Ho`mIhż·ü·’$l’I’KmäŪkQ$’I$’I$’I$ImM[’[ś {Ņł'~Y£$’I$’I$’IHI$’I$’I$’I$’BI[m ÜŁßŪm¦[m½¶ßż·l€ ’I$’KmäŪkS$’I$’I$’I$I-­¶[ņKŁ$Kz_u’I÷$’I$’I$’I$‚‚I$’I$’I$’I$’IIMZwŽų$Óm¶Ūm ¼²Ūm¶ģ€ ’I$’IiäūkS$I$’I$’I$I„­  ž$oO’Édd’I$’I$’I$’I$’I$’I$’I$’I$’KI›nZ-ŁĮ¶Ém¶Ūm –Ūl–ä€ ’I$’Ihgūj‹$’I$’I$’I$I“µ o¤I$ł*é|d’I$’I$’I$’I$’I$’I$’I$’I$’Yi#›mõä‚[Gm¶I$’I- ’Ė&ŚŁ ’I$’IH??æTK$’I’I$’I$I6’¤I$’抹)$’I$’I$’I$’I ’I$’I$’I$’I$’Ki#›mµ’»x›m’I$’I%““i¶Ū{,’I$’K@¹żū\[$’I’I$’I$I¶ŅŌ’L$@€@Ć$’I$’A$’I$’I$’I$’I$’I$’I$’Im!Ėm5e3RŪl’$’I-“›m¶›or,’H’[A©’ūT[$’I$’I$’I$I6ŅT€’I$’i$’I$’$’I$’I$’I$’I$’H$’I$’[i#›mµHŗčŪd’Bd2I%“›m·³mj’I$’ZĻm³@Ū$’I$’I$’I$é6ŪZ€’I$’I$›m$$’I$$’I$’I$’I$’I$’H’I$’Ii#ŹI%ŸvŁ$’Bd2I%“›m½¶mj ’I$’Ņ {m³"Ū$’I$’I$’I$½6ŪJŠI$Ņm¦Ł%“›$’I$I$’I$’I$@’I$’H$’I$’I#ÉI1жŁ$’I$’I$¶ƒ›m½¶ĶīE’I$’Š{mžŪ$’I$’I$’I$—¦ŪKšI$’m¶É$–Ł$’I$’$’I$’I$’@’I$’H’I$’I!Či++Å6É$’I$’I$¶ƒ›mµ¶Ķ½E’I$¶zxlš¶Ūd’I$’I$’I$—¤ŪmzI$’m¶I$’I$’I I$’I$’I$’H’I$’I$’I$’I KIžŒ–I$’I$’I%¶›m½¶ŁµÅ’I$¶€z螌¶Ū$’I$’I$’I$ō›m[@ $m²I$’I$’I$H$’I$’I$’ $’I$’I$’I$’I$[i9¬,’I$’I$’I%¶›oķ¶Ł½Į’I$“rąēE¶Ūd’I$’I$’I$ \›mÆ@$l’I$’I$’I$$’I$’H$’A$’I$’I$’I$’I $Ii9jL’I$’I$’I$¶‘Óm½¶Ū7‰’I%“r{®-¶Ūd’I$’I$’I$$“m­H m’I$’I$’I$$’I$’I$’H’I$’I$’I$’H $;Irm–I$’I$’I$¶Ómż¶Ł6’I%“słqm’Ūd’I$’I$’I$$ Sm„ml’I$’I$’I$‚ $’I$’I$’I$’I$’I$’I$’ :i9Pm¶É$’I$’I$¶smż¶ūvزI%“öO d’I$’I$’I$’I$$‰r}µ½ @l’I$’I$’I$’I$’I$’I$H$’I$’I$’I$’H ¦*I¹Qi“Ł$’I$’I$–sm½¶Ūfš²I-“ü›$’I$’I$’I$I$¤.“µ¶‚ l’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I¤"IQm¶Ū$’I$’I$¶rmż·ŪnвI-“Ū$’I$’I$’I$’I$”.oö—“ĆI  d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I $`H PI¶Ūm’I$’I$¶rmæ¶Ū~Ń2I-¤É$’I$’I$’I$’I$–’,ožŅ¶›m  d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I $e’]P@m¶Ūl’I$¶Š:mæöŪnÕ6Km“m¶É$’I$’I$’I$’I$„’ OžŅßūżäd’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I-¤'·żP€M¶Óm¶É$¦.m·¶ŪmÕŪm¶Ūm¶I$’I$’I$’I$’I $€ OżŪ[’’ŽŪ$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I%$VßżŠ&šI¶Ūm¶’mæ¶ŪnŽŪm“Ūl’I$’I$’I$’I$’I$$,M’ū[’ņ֛$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I-$\“o$ж@[m¦ŅͶöŪnŽŪm¶Ūd’I$’I$’I$’I$’I$ nOķ’kņŽ‹$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I!$]’Ū€’m’ßč[m¶ŠM¶öūlڦŪm¶Ū$’I$’I$’I$’I$’I$noķ»im–^‹$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I!$’ž€?’’’„iÜ m¶ŠɶöŪmŚ&ŚM¶Ł$’I$’I$’I$’I$’I$¶ß’oķ’i-²V‹$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I $ƒĶ“?’’ł.?ń ͶöŪlŚ €m¶Ł$’I$’I$’I$’I$’I$±,²Oķ’ķ­¶ö›$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$˜’’é.6IøɶŽŪmŪ M¶É$’I$’I$’I$’I$’I$Ø’’’ķ„·ö›$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I €b’@’’Ł&7}¾¬DNٶŽŪlŪĄ ²I$’I$’I$’I$’I$’I$H$ m’’m¤·“[$’I$’H$’I$’I$’I$’I$’I$’I$’I$’I$’I$Z$’I’ū&3ģČŽ’nM¶ŽŪm»Ąm¶I$’I$’I$’I$’I$’I$ˆ$M¶Ūm„æ ›$’I$’H$’I$’I$’I$’I$’I$’I$’I$’I$’I$„ŪI&ŪI BOū&sī[3OßņY¶ŽŪmŪĄm²I$’I$’I$’I$’I$’I$AŪm“± Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$‚Ūm¶Ūi$€’&3’É2_ż’ͶŽŪlŪĄm’I$’I$’I$’I$’I$’I$H ¶É$’M“­Ūd’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’[m²I)¤šåŻÉ#y%²m¶öŪm›Ō m’I$’I$’I$’I$’I$’I$é-·³M¶I¤½Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Km’I$–Ņ@üžoɲł¤“m¶ŽŪmŪĄŪl’I$’I$’I$’I$’I$’I$·Ūm-©%µŪ$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Ūm¼ŻČ“é¶ß’÷žŪmŪŌ[d’I$’I$’I$’I$’I$’I$&€¹$½Ūd’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Km rsyė’ūk¶ŪlŪÄ[$’I$’I$’I$’I$’I$’I$I$’6$µ Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I-¤öoĆæK’Ö_-öŪmŪŌŪ$’I$’I$’I$’A$’I$’I$$“I4’@å­Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Im¤ņm·į­)£-–ŪmŪŌY$’I$’I$’I$’I$’I$’I$“ŪM²ZIŁ­Ł$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’A$’I$’[m ņm’šY-)%$’IoŚŌ[$’I$’I$’I$’I$’I$’I$’I$’Ii"ŪķŁ$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$$’I$¶ŅI[’oėMÉ4„$’ImŚÄY$’I$’I$’I$’I$’I$’I$’I$’I%$mŁ$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$$’Km“™¶Ś`’bM¤­¤’YoŚT $’I$’I$’I$’I$’I$’I$’I$’I$¤@Ł$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’$&ŅI0-вŹ’Y„I„$¶Ė/ŚHŪ$’I$’I$’I$’I$’I$’I$’I$’I$¤€&É$’I$I$’I$’I$’I$’I$’I$’I$’I$’I$’I$AI6’’ÓŚY¾ūż÷’o¶ķ„-¶Žm’Ū$’I$’I$’I$’I$’I$’I$’I$€ $Ś6I$’I$I$’I$’I$’I$’I$’I$’I$’I$’I$’I$„›I%¶’¶’žÓM’’ļdI%%¶ĻoūÉ$’I$’I$’I$’I$’I$’I$’I$’I$’Zm¶I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$$’D[+.ßĻö’Ėe’ł%m%$²Ł/ūmŗd’I$’I$’I$’I$’I$’I$’I$’I$’Km²I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Ii$$–ö–Ķöūļ¶¶Ūm—ł$‰$$²M’’m“,’I$’I$’I$’I$’I$’I$’I$’H$’I-’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Ūi Mµ„³m·Ā’l–Ł%’m¼ŒŪ$’’’’ķ¼,’I$’I$’I$’I$’I$’I$’I$’$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$¶’–ž’Knßķ¶ų’g’ŁeŪm4ŠŪmææ’łō ’I$’I$’I$’I$’I$’I$’I$ ’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Ii$%ļ÷“}žūķ­ ’@ [ŪomKo’’æé,5M’I$’I$’I$’I$’I$’I$’I$’ $’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$–ŚH[MŁlŸ’’’żM’l’IgŪymYl’ķ·ūó5I²I$’I$’I$’I$’I$’I$’I$’’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Km4–Śmmę’’’’ł)4m²I$ņKe’Ūo’m·’uč²I$’I$’I$’I$’I$’I$’I$’’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$¶ŪI -­dś¾Óo’ö@IIõžI÷ŅC-¶[oūmæ’’õµI$’I$’I$’I$’I$’I$’I ’’I$’I$’I$’I$’I$’I$’I$’I$’I$’I%¶€’ŚŽ_¶—_ü–’’²@ `I··K4’Ėm¶{Ūi7ßķ­łÉ$’I$’I$’I$’I$’I$’I’I$’I$’I$’I$’I$’I$’I$’I$’I$’Ii $“ÖömõöŪm–ķå²ų4²{ü³Įe–[žŪIæ’ķ-čÉ$’I$’I$’I$’I$’I$’I$I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’KHIm6S÷ķüæĖ,’kd’m¶Łd›’ö”$’ŪžŪI~’턹Ł$’I$’I$’I$’I$’I$€ $’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’ZD¶ņÖ0¦ßķķ¶Ū%’ō–R¶ŪüŸ’÷²É$’’öŚKß}„µŁ$’I$’I$’I$’I$’I$ $’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’+IfŪ}’’ķē¶›~’’¤°Ņ@—’’’’ōɾŅ’’Knūi%·ą$’I$’I$’I$’I$’I$G’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$¶ƒV]’’’ž’ļ„¶ŪH’m$¼€‚’’’ō6M’’’ö²K,»Im·ä $’I$’I$’I$’I$’I$d$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$“ ×mv’’’¾[d’ĖH’ż%”>÷ķæū’ń2m÷’’ž’K'ūIm÷ōƒd’I$’I$’I$’I$’I$ $’I$’I$’I$’I$’I$’I$’I$’I$’I$’I%$^›¶’ļż¶Y%–Édæé-:Ļ_’}÷’’ä‚’’’’¤’[lŚIm·ō‚l’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I- õ»ķžŪom¶I$ß,æÉP‰ļ’’’’ļż·’’’m$’[FŚI,¶žƒl’I$’I$’I$’I$’I$’I$’I$’I$’I$’I ’I$’I$’I$’I$’I$’II¤žŻmŚ}ģ¶y$¶K-ߣ d /’’’’oæķ¶“i$’[$’I-–ü€m’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’IH•n–Ł&ŅK$›[l’É-æĖKm°?’’’’\Ż’m¶’I,’[$’I,’’ ²I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JH„~¶I$Ūm­·MmÖIeæėI$/’’¶žYmæķ¤–Ie’I$’Kd’’жI$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’REė¬ņI6Ūm(Y’’ūõ’ﱐo’ż·’Yo’m“¶[d’É$’'4Ÿ’˜&I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Ņ+_·” ¶ŚHI7Ł?ß’’’yYÓo’ķ·ŽÉ.Ūi$¶Ūm²[oÓæžß’’m†I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’:pdI¦ŅB6ßeū}’žZd²QūmæŅ@OŚI%²ßż²Ūm¶_’ū’’Y†É$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’‘zpI¢K·’Zfż·Ļ’’’ČD’Iūķ’žI~ŚI$¶Ū„¶Ū’’’žļ’’Ū"É$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$”™S e²[’śHÉ&Ļ’ś’’’ļķ“Kžßłžś[~ŪI%æ’$’Ū’’’’’ļśŻ"Ł$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$”‘ųöm¶ļī’Ęķ„ɶےößŪ’ū’’m’Ś’öŪI æż$’K’’’’¶žw€Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$”Ønܳö–6I!;ߒ÷ßO’’’’’évś’öŚI%æł,’Im’ż’ż'žū Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$¶€‰$Ū’Iž–&ٶ]’’’·ņI¶ū’·ŪI6ß’¶’I$¶É-’K]Ÿ’ši¶’ß Sd’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$–«4,“ō”&ķ¶Ł¾’’÷³Oæ’ż¤šIe’m“’I%¾ÉlņY$’žŚ·’’ d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$“ŗ¤%æ’ö¤·d²M¾’’¤’’’’$ŅIŪI$²Ie¶Il’I$“?óAæ’’$ l’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$¶€šÄo’’䶗'Žo’’ķ¾Ś’’’’d›i¶’I$²I/’I=’I%½ž›żæ’ż$M’I$’I$’I$’I$’I$’I$’I$’I$’I$‚I$’I$’I$’I$’I$–‘³Ę®’’”!6’o’’ļfß’ōŪk&ŚI$–I$²ImśKl’Y&Ł’Ńo’’ż¤M²I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$–‘ŸÖē’’ō$™6ū’’ožß’¶ŚI$–[%’Ū$’ŃśY-–Ł$“’Ųoļ„’ä¶I$’I$’I$’I$’I$’I$’I$’I$’H$’I$’I$’I$’I$’I$–‘—Ō„¾’žŠ¶ž’’’’’ż¶ŅI$²ńm÷ŪmæŪś['ößżæ’Óm«½’ō6I$’I$’I$’I$’I$’I$’I$’I$’I$I$’I$’I$’I$’I$”‘ėÅ’’ž–[¶Ūļ’’{/’ż¤’I$¶a+o’ķ·’’śK%æ’’’’Ūoi?’vŚ6I$’I$’I$’I$’I$’I$’I$’I$ $’I$’I$’I$’I$’I$–‘ĻEūoæ’’’Ū’’ūK?’’¤’Id’O[o’żæ’’’É%·’’’’›}i/’žŪ`6É$’I$’I$’I$’I$’I$’I$’I$€$’I$’I$’I$’I$’I$’‘oAŪ’æ’žßķ¾ūi’’ķ$–[-Śö’m’żæ’’žĖo’’’’’ÓI/’’ŅhŁ$’I$’I$’I$’I$’I$’I$’I$$’I$’I$’I$’I$’I$’ŠcŌ/–ū’ž’M·’o’¾É$–’’ ·’’ö’ž[’ū’’퓃I’¶Ó Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Ó>U$–ļ’’ž’Mæß’ż²I%·’’hżæ÷’žŪ’ķ·›m¤I’öŪ@Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’:Udšo’’ż½’I7ßķ½¶_-æ’÷ĄŅ@’’’’ž’’ķöŪ_¶ūł’Ūh›$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’RE$'’’’e’I6’ķ$’K/’’ņ4šHŽ«’’’’ž}>ūm [’’’ūm“d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’RÄ%’’ž’[d’I$ŚY$’K’’’Ų-¶ŚIżæ’ō’’óM¶Ūh _Ūo÷Śld’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Z5D(’’’ŪM$’K6ŚIm’’’’’Ųm¶Ūiżæż¤&’žIŅ€ ūžŚęŪL d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’R9Ą—’¶ŽI$’Y&ŅKm’’’’’Ńl’IMż’ķ _’ūI'’ [žŚo¶Ūm m’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’R,Væż¶ŅI$’Y$ŗY-’’’’’Įl’Iiżæł$·’’I’@ m6Ūm“ŪMI¶I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Z,N„—ż“’I$’K$’Io’’’’üŃm²[ißæé$æ’ó} ’@ }“-4ŚmI&I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Z/Ś…æķ$’Y-’[$–I/’ļ’’’Ńi¶“HżæÉ$æ’ūm“ż¤°$€I&I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’ZkŚ’i$’[l’I$’I%’’’ž€m¶’ŻŗH æ’’ż4 ISE @É$’I$’I$’I$’I$’I$’I$’I$’I$’A$’I$’I$’I$’ZCÜ'ūI$’Ūm’I$’Ū’’’’’Š $—’śK ’’’ż¶[h $ É$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’ZBĖśY$’K$’I$–Śm’’’’žŠ$·’ņZDæ’ū}6€ŚH@Ł$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’ZBųÕśI,¶ķ¤’I$’H/’’ņM’˜ %’ž²Im’½’o¶6ÓH$€Ł$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JFµ'śId—ż$’I$’I-’ż„¶’Ņm¶“’’ö[oż·’O¦Š¶ÓH$™$’I$’I$’I$’I$’I$’I$’ $’I$’I$’I$’I$’I$’JF‘’’_’ūż%’I$’I/’ķ-‚[óm¶Ū’’ņ_’żæś¾¶ūģ€%€$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JG“ö–’ž’ģ„I$’I’żm"]ūMöŪ’nßņ[’ķ·’ķ¦€æŚ d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JEżō’ß’’ōä’ļ6’A_’é$¶’o’žŪ}¶ßŅ’’ķ·ūI¶žŪ@†ˆ d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JEõ¶ß’’õ¤’É$’@’’če +5·’Ūł6ß’žŪy6›m4/ļÓL’‘` l€d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JAIm—’’’’ō’}ößķ’’k,°óß’ū¶ß’¶ŪI÷Ņi°/ė’m6ŚH¶€H$l’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JAKm“’ß’’’k’ö]’ūKdď’ūļžÉ6×’¶Ūm&Rl-“ūi¶ŪĄ -l’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JDé$Ÿžß’’’’żśIžŪ’É-’ż-›o’ķ6Ū’“Ém‚Šm'÷m¶Ūd¶ČIl’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JH¹$’’’’’’’’’ž›é$’’’žÓI¶Ÿ’“Io’ūm¶Ūm¶€[ M’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JHæä’’’’’’’¾Ūż¶Ÿ’I$æ’ļūžŅ¶’ļ AvóM6Ūm @Ū@M’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’HH?’’öŪ’ūķ¶Ūo¦’k ’’ļ’ö€O’’Ģ }¶Ūm†ūi2@’óH ²I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’ $’I$’IH’’’¶ßüŪk4ŃŪŁżæ’’ōÓķķ AoöŪm–Ūl&–ūh ¶I$’I$’I$’I$’I$’I$’I$’I$’I’I$’I$’I$’II’’ż¶ķžŚm“™h{ß’żæŪ¾Łģ’’¶Im¶Ų Ū%¶–Ū ¶I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’II’ļé4ƒ’³ķ¶ ’’ķæūm¤Ūś_æ’žŅKm¶ČQ$’¶ū@ 6É$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I ū’é¤ß’“Ho’’mæŪm¶[ūÜm¶ŲIm°Čµ’h@&Ł$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’IIū’m”æ’Ūm°[ļžŪż¶ūm KŪYļ¶ŚKd’ $¤Ÿ`$Ł$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I Ūom^¾’ūmöĄmęŪm¶Ū zIżōš %H $¦›@’H$Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I) Ūm?Ū’’’m“€Ūm²Km¶Ó ś_’’ö›hA$€¦’`’@$Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I)"Ūm&Ÿ’öūm¶¶Ūi Ke²[[’’’ż¶Ū@H¶Ū$$›d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I)"Ūoéū’ūm¶€%¶Śm,†Šß’’’é¾Ūl€€$¶Ū ’@$›d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I%"Ūė’żöŅM² -$Ū`Ū’’Ūm¦Śi”€€$¶€$›d’I$’I$’I$’I$’I$’I$’I$’I$’I$I$’I$’I% [’Ūķ¶ŅM¶Įi.[hßļ’’}²›L“Ų€$¶H@$›d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I! [oöŪm¶Ūm“Ūof›mŪožŚ 2Ū $“Ą$€%¶@ $›d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I! [mö“m¶Ūi"ŪovŪm6Óü±d’A%¶I$€° $›l’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I!$[m¶’m¶Ū` öŪm²–Ū’öšH%¶ĄA$€ &Ūd’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I!$[m“›-¢_žŪm¢HŪm¶Č €@$¶Ą $I6Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I!$Km¶“L‚@ Ÿū’Ūi$Ł–Ū Ųh’@m¶ÉI$€i6Ūd’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I!$I$¶Ūi€Ū’žß}¶Ś–Š‚@€ m¤II$€@I6Ł$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$$€$[l[’öŪm¶Ū$¶Ą’Im¢ I$@’I6Ūl’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I%$ŪDß’öŪm¶Ś€%¶ĄJm  I’I’I¶Ūd’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$¤€’Ū’¶Ūm¶Ś -¶Zi°H’i$’I¶Ūd’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$¤€ ¶’m¶Ūm¶Ó’Ii"Zm€H ’I$’I¶Ūd’I$’I$’I$’I$’I$’I$’H$’I$’I$’I$’I$’I$¤¶ßm“›m·Ū Ki$[m€@Z’I¤’m¶Ūm’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I I$¤€–Ūm’[%¶Ś[m¶[l€@H’I$›m¶Ūm’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I I$¤ ¶Ūm²%¶É[}“@[d@$’I$Ūm¶Ūl’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$I$¤d¶ŪL–Ł–Ą’ż¢ @[`@$’I¶Ūl¶Ūm’I$’I$’I$’I$’I$’I$’I$I$’I$’I$’I$’I$¤m°’Ū$’I @Ūż²A ’I’@$’M¶Ūm¶Kl’I$’I$’I$’I$’I$’I$’I$I$’I$’I$’I$I$¤$’¶II$–¶½²I ’HH$’’@ $’M¶É$¶Ūm’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$„‘-°@$°I$’š_¶$@ $’@I$Ūm’I$–Ūl’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$„‘-°@ €—¶żI @I$’@I&Ūd’I$’Ūl’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$„‘$’@$·÷łH$ ’I$’H‚I$’@’I6Ūm’I$’[l’I$’I$’I$’I$’I$’I$’I’I$’I$’I$’I$’I$„‘!’@H ·’ķ¢I$’’I$’I  $’I“m¶Ūl’I$’K$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$„$H ·’l $I$’I$’I6’I$›m²I$’I$’I$’I$’I$’I$’I$’I$’I$I$’I$’I$’I$’I$’I$”€–Ó $€$–ūmA$’$‚I$’I$’I¶’I$Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$I$’I$’I$’I$’I$’I$¶ -$’[l$H$‚I$’I$’m¶ŚI6Ł$’I$’I$’I$’É,’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’’¶Ł$%·Ūd€I$’I$’m¶ŚM¶É$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’’%¶Ł $ -¶Ū$$’@$I¶ŅI$›m¶[m¶I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’’%¶Ł$ $’@-¶$‚ $I$ŪI4›m¶Ūm¶I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’’%öŪ`€I$’I m–Z $$I$Ūm¶Ūm²[l²I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’R%¶Ū$$’I mI$ m¤I$Ū%¶Ūl’Im¶É$’I$’I$’Kl’Y$’Ä% 0@P`p!1AQ€ Ą’Ś?Į‡¢F.>s…%Ā\c¹ĀpF8z7‡ćV5ų‚w0čeĮōœŗhń×yškĢ0ĒcŽǤåŠōĆ DŃā:gÉÖĘ]ŒT­œzL¹rżcä/žĮŃ4v¾¹ę¾0DŌ˱£«ƒI‹/SŅ0m…"W@ŃÜė dަ.1ŌŃÕĮ‡¤ĒŪ1 ½ƒµC­~mųÄv¹rö4upaeōŖV÷čLcW¼|‘…Ė‹‹—/7Ŗśį«rs¼‡Hł7„rō¹rž>Ż1]¼KņjWóßαé1ūźÖ,zOIō2āż[ć?£\¹rü‡ōEāgögö£Ų¾#ōj•*Wq——śīā¢tĖ‹5ŅT8]ź'›Œe@„?L ™xw¾F1`ā°0bÅ.\т&ōŅ&2į2„B赃F$HGØäC+ųé³ä&āāĘV#ńƒgĪbuźWµR„J•+źŸ=%Ań•*V*WÖ¾EĖ—€Ė—‰ń5+uŃśsråĖ‹. ü@„¬Ü¹rō©Q#šõČó˜|g/Q„ ¾’„JõIrųˆ#šõĖ\¦¦ā0½7“ųä`ų*•*WpŌĆćq‹ł£ølEqĄĮĒCa‹j鐣?{†ŽĘ¶ ’;8įŒ'ńƒµéX½ P:d6c±÷µÜ®ÄpюĆeį’pāåīJ•+ •…WZåĖĀįģu*V*T¬×ß\¾ ģ›F-O÷„©R„J„T©R„Jå©RøźV‡éogģėJÖóR¢j14`ŁŽĖ …Kd Š•*T®ŗp­XųOŁ‘ČĒ`Ń4#у”0o+5Šx HĒsf1ēÆĆĀVÉ£†‰‡Š7w!«ļRæ­5‡ˆ8ƒfnš\¹rōcčæõ : €•+‰2¶ ʤ;ĒĄĆUģÜģ?a%nź9¼Ž‘2®Hõw/--xčšÜ0šV«ēłŲH+č*W Ėä’1R b„s¦ ¬vØ#‘ŌՇĮæļR£µJźø02į܈åĖ—.ަĘ^5‡ńę?!R„JŚ»•jļy/…éNāX7Ć^cõ7.\øp†®ė\"›±ÜqŗœO @ÆUśÓg$!«‹””—)rņ³rņģC‘ŠāxN[ņ_Ŗr`ŃĶą@įŒ0ń˖ĀōØnģCwWC„P*[|•łŃ`߄żiƒDŃp)žī1ā8†.Ė—.\¹rņģĮŃĄŽ×„b±]3gėC qĀĖĶ`bę„JŌ8]Ō!Äņœ &•µv̼ĻĢÜø=āĖeĖ—Š•+€eĖÅ`8^ŁŃå1Qɋ—?׌eę~ūD9\˜žŽ.9¹råŹ•*Wąįc¹³£ŹeɊ•+Ę2üyњ‰Épp’„aÅJ•‹—?‘•+P•ĘīE S.O(Ė;5 <·^Xeeéråō^ ܼĆäņˆeś’cÄe•.\¹zI ±+<7.\¹rąõ÷Ÿ™®GR,>I īlåbš²åču÷ߓ6M]Œ=•*T©]21Ų\ ‡+²Ē’ŗoɛ:ÜxČG”X­k¦0ĖBąCC€p1Œøg‘qyĶŒwމ:Šįzd0ĒJ†o†]G ė1ā¹}Dł2=ģ1萆]ī,øį—.×.ģ{ģ~HÉ£{„xNv=k/ ±‹/ŠøGŻ}ĢŌyˆ`šœģzG‘e‹.1ĮŹźCC/ą?4ņ„ Čs±š8\ø²ć“•u52š?tņT5w!ĪĘ=Ę\øK——¢±ŌŌĖĄż¹—ą¾=ĘT©L Qč1ŲŌ˾4w^‘Ļqr J•*V^v;›xXxʚ>EŏˆĒ™ŽęĘōŖWą‡Uļ¼Ģw8ńŌ©XT©R„Jćæø=3[Āó1ÜŌŃ䮚¹*V*Tƽz×½ģ —ĢĒsRzŌf’¼É\wš•+ģ­ąķ±ÜŲź¬¶ö­ŲEØ7Ē|U*VÕņ Ąy‡qŽĘĒjōŖSüēaóɹÜ<×b–2××xÖ³(īwbī[W¾59n^ŌķVĻÄ\¹råĖ—Ąq=ā©W'ń+w¼:n?āų¼IŗWRļ寔įcĢae±¼fŖĘ;š›»Ō`¤’'ńįZƒ}ŗśC…-\"°¤Ŗć0įuz·.<¦ļ_x?8*='’åĘ\¹råĒWžåįą9;ćø7Å|ó0ņ\¹|oh‡JåńtUÓÆ 8.=\¾GĒ!Ē[¬4ü%ŲżÉpā¹z ƒ:¬5Øöˆq®õć××\¹z,:8vøöˆq¬b_÷ŽļJŽłŽ%ū³‡ˆįc£ ®=³Æp0˜X~²®!‡ •‡†ać¹|F ēśümąp¹Ø‡5»€ÆĒCSv;†ģ|sAĮrųæ·Ģ_üö/ģ.^ |bØ?‘TŻ”°į¹peĖüEŻĖĀAįu|be\ØJøł) Ųźų$4ląZŠā@®°~4CÕšHiR·ø°?½›ü`F> ̬׿Ū0øpŗ1šN­ņ_÷Jæ%Dū*•+‘Ėį:„Ą®:ó̧¼ś'Aˇ|Ėq¢t\1šNĖóL±õ'ą\1šN|Ńõ&>µĖ—/…‚p˜ūęØC…”råĖ—.\¹p`īĘ1š#ļš>©ÄĒϾ!†ģcąF>ń«źœO“·cā1÷ˆfć»ēLO€1€qūÄ8ß<āHūŲłgŽ!Ęłä8XūŲų¼q±ólj"{f>Ęcļ <,OeK—.^ųÅ>€Ć…‰ģ ¹råĖ‹įŽ/žˆń$}›—._ˆ8/Ą_čxR'Š Ų¾1ō† cóćwŖ3R½GÓ$‰ó¤;ƒJ‰é¾˜Ć…ĪŻźj'¤śƒ/…"|į ŽØŁ‰ę¾Į…‰ęČnõ!µDńĻxaĆQ>l†.^TCv>1ļŒ8XŸ4CwŖ!»†“EĀÄĢÖåŏP†ģ|bųĮįHŸ2p½B±ńĶ_lx’'Ģ/P†ģcāā}aƒĀĒč^”>1Äść…"}Ō!ĄĒÅ!Äū …‰ōP‡Ø š±>}źącćPąyŽƒōµ*T©PćHĒäĪ˜ēæMō*T®‹Ÿ&p<”²ĖÉ„Ėūw ’8@ŻŠśS®āćņGʶ]LÜæøc“8š„5ø±u2śļ«råĖ—.\¹rōc“8£†.Ę.>»é\¹råĖÜяŹ w,_|ū—._BžTąw±büšļǜÕ Ż–/Ā?ī‘ųćŪś•ŖÅųWāŽ8ŌØHV«_įÆĒŻČ@†«ĆĢ~4†ī.ÕüD~8‡`ŃaŽ"\ Ɛā2ą_ŲN#…oįŸĘČqš-ü;ųŁ—[żāXžŹpÜ~!üxżĄżĄżĄżĄŻõ_ĶqüŠżĄżĄżĄüAś·^ņoŻŌ©R»ļÉætf„J•+ōė—Ś5©R„Jķ?š“‚„J•+öCģ‡#ū!ČžąžĖ|oģ·._ ūEĖ—³ūUĖ—//wū-Ė’Ž›żĀæ÷vł·Ć­WZ£łżz/ī/č5ūEp/īŲ¾’Ō?æšTĆoÆżJü»ü…æ¶Öoæ§_÷Ā®ėó[įy½_3żūe@•*æxZƒĄ—ģ_Ą_×ÕŹé…yæä÷ėēÆ÷ ńÖ ņėü˜{õ*¼•ł0W”}šż`+ōU’Š?ļéLæ×żfüė÷Ē“žvkņⷐļ·ģWć"’ćŌæ6’ !ņµČĆšŅ·ż¼‡eq%śIųÉŪČ~ŽCöņi«~俥ņÓōS÷÷·ī_źd?o!ūyŪČ~ą~ą~ąCöóŽÆĢÜææÜ+ņ+ż½‡ķ©ö+÷!ø0’©‡’ø'’ĆŌņC’Ä$ 0@pP`!€ °1Š’Ś?” Ń0Dʉłƒ”Ō^h>4ź!W˜ŲćČ/”5šŸ4qŠ^lzįŠ‡ž ł„ü”  Ę:‰†ĮE¦m OĆįEa:Ŗ(½c@BŃ6 ĆhńĻ’0 1¤ {'ō ƒ“d5*`Ł4B O°-AŒč˜h(>,Ų`Ģp‹›ŽÕ^0›,ʆ¢ ³ ¼s¢ ÄyäÜPi1 ƒäÖZƒ!Ń1@"ń_ŠøćōU‚ !€ČDĘ>hśµŌ#Ņ1ykėĮŠ4hŽÆŌQb8DOÄüOÄüB¬ź+R"(D8„`z#TX*Ep~x”õH†į‰Ąq( ‚†k= Ćpؽd ŠčØ ‰Ā:9øTiƒ ƒ‚(`G0šóė˜m‚&ƒGÄCƏ°m** ƈŽŒb°A¤(Ŗć!ōp"38į>cŽ>0¢Š(Tp@røč2?Uq5QEQPŌh¼ĻQ^žMEšŖN?‚¢Č`ųCA¦> swEäŽ0wɀåPD>@ęBŽ8óŗ ? sM\~øäŹēqĒSA…Ē 9y£Ž;V|ńÉ^#j‹ =pĆ¢h=WŹ˜ƒ®ōMV Aā ĘĮĮŌQjš ŒZcuź:Øøą54oMų…øō ĆiE¤cŽ=§W#'lŲ6T\\Ē›ń€¢ā†Ņ5Įę¦4 F#E¹Ń|ĆʂµE@"‹9ņ A 4Š+æĒ6Ž ,0Į Ą¢ŠåkĢ|sĀLp 0A¾öćį&¢„ĒQ ć°^š=3“掃 į&Ž8㨃X\ćdŲ5 6Œ&įĄĪ˜ļ8ćĀl¦Ń„š•P‹‡œ0˜j5MF3xą¤ŃEšŁ6 &C üpcŽ<É7‹Œ4bĻ>+Ž×x¼ŠAˆc7 Gˆģvƒy°ā4jØDPB‹‰•č+Ž!˜\h øņu–/9MQEÉčĪ4Ķ,gœ†ƒ¦ ćLŠAˆõØ åēMlŒ's¦ņØ”ŪQA™ĒG“¢Žv¢ŖŠ(Æ8ĘqŃĒ{ωŖ(®QA‰cĮŽ8ćŽ8čźłQ²˜1,C¦­¢;ŠéK8ĢpŒ (¾E}Y“ˆ7ĪW~øŚ'źĻ„jzsśõĄ_ Ī=•Qu#Q¦¢ØXz ”¬Q@"¢¢ėCĘ\4ŌVˆś;Ut'°EĪ?ŗl,ēŁ@y Õūh?xGĻ Cū†{ļ#øóm kŁ<Ż’ƒ*.ęćķŽ;Gų掏ö­E^»Ŗļ+ø>ĢxįŹ½„1‘qÓAū‡ćĒöÜqć|eÕĒś ¾ųoƓ}Xru]Œüyģg]Zŗ” Õv¾ØsÄmXWfĖ«š8 pžÖlį#±ąyłōOľN~ ņƒń”|ņƒ„{ē”#ß6HpŽĪz1ņF>QÄ=óķ­8‡f8‡D¼cˆvc„vs„vs„vs„vs„pōēżq?īhż×=Ä÷ÜOq=Ą’Bgõ½EśŖ0>Ž{{‡“‹nqĒŻ] Ž;C¼Žk6Ū @ķąvC~źžą{żą?ÜŪ·s}Ķ’3 ł±ęk’ƒažžņźępxp=Ą÷Üū‚{żą?ż3Ÿ’Ä,!1A 0@QP`aqp‘”±€ĮŃįš’Ś?Į6•(Ęųś\óŽGPiG’ 1sĢYƒä©„’ā/"Ę=0å$nĆqŌEŠĖš„ÜcØą•«œH~ЊÅį+éę”˜­É,.i€HŪĀžMAd9x—!ÖqĮ‹jįŽ9ĪjrŒ}äŗ9AÜ©’ųø!ųq #,Žż«IPKˆµ‰j.ń^"&ė–Åu £Œ?żƒu„Bbņēö”ĢĀ‘ĖÜ8‰$a2C&ž.XŁ n*ƒŚÄ®¢sx| R™oR̆łŌÆÅ‘ź^ąź\=ų„t'”+9įā8„xœšūłMNPė7¤Ø5åZŒ!ųq Ž5įVEt+ Åug™4åduęXĒBn;Kƒx[iL4±K-Ė“in  IżĆb¹l«ƒ<”¤Õ©R£˜Ė”sņˆ„’X֍±"’¤gõ“Jø1R ĀŲ±ž°GʱQśE‰#ŌXµxŸ K “ą\éKrĻ/0ÓGŸyø)Æsœ„²@ĄóąGXĆń!Ń9ņYÓfąŹ£9JøMĖ" Ą 8U*bNSŒ‡ZŠN<ÕF˜ŗA–‚ÖÄV¦²Ę„ą ‘B1¤BUCØ÷. ZŽkŠŲ"GĢ€P§LCwsY§Ņs,²°d[„Ķo/>š„€xŠ6‘łĒK1œ—¢ĪI«ąBŌZć(ŠÜ®œ10p|ø¤̵¹¢œ¢Äóąw4ĮĻāJ6Gī ŖŠŽ§·CdMƘG˜źĄY+JE,Ŗe"_1XYVGkQä‚A”GE7J˜ Y?ŒŃ–źhÜiŒjœÄq—‹Žyʁł\wqƒČPm‹zŹGˆ4ܼ\S‡ —Sf£¾ š•ℽ\Ÿ<Łą›0B\Qe* ųŒ ź%Ād˜Œ7gSCqŗŲżä±Ą*!X(‹qĮ-‹įL!%ü”x§QUaVY°‹Ü* \R– Š÷*ę°ōdBĮ·ł,Īuø0Č*!µ@ŗ„S)ŌŁHåu* DIP Å[Q—“¦āÖ1=*ø ŒtÜįÄeęņIY¦‹qņ2*–›¬ü?Ž`$ӈó‡LŚ \T°‡qņaš3œ>Ųē.¼ĘÓPu„ó,[Žķ‡&“ąB$f QIw0Œ4Ė„KvAMA©m%Ü ˆD„#ĘåĖĀįRŒp©xŌXĄ"—ęg”Ad»µŌC?:¦8#ÜWą ŗ>'0āā%Į©©*™©Ē%£ ȏ¼ęD­M•ÉԜΌåa%ĢXņąĮGšūX†ę¬¹¾ÄJˆ©˜V¾„éĢSÜÜ¢ń‘‡Ø©Ü¶ÜØ.†(Łlu.Y—.·³d(ܲK— !hŅs M„øźĻ(IüÜŁ› Ž¢ßĖ—’1ƔRńpa ³u©L؞dqHŽ:Ōč„n¢µü±ś‡Ÿ(§æhCRåĶ!D[ၨéudl›‡l¼6 ŚĪQŲ'Ņ o)gFI“„ÆŲfĆ8qus掾ā¼J–˜sspÅŹX†œ7eānŁ.µāx±nYŅZJø¬ēŪ–²č«*ć ź•`4ĆYž@“¬`ąYx¹x¼^ ~Äs~H·/5;šŠÄC£ū B »¢ź!׹HG˜Eą<«‚^:Šs+-¼_UxT©tP£øĄFńŗø76fŲ ÅŹ\²Aضü*‡“ģ2 (öˆ82ŪMVS-ą™\æ,6ˉdõągŻāüDŖJ·(e°Å^†Ź„¦"&¦Ü˘īV[ ÄeŠĖ—.\¹råĖĶĖˆ…Qņ ¹¼_‚* ĪJŪLŻD ßGœĘ{‹:ü^> Ēé¬W•d%J•-“RČ^‡Ł•§¶%ͱ2ü0ü$ʚbX¼Łŗ][ˆŌ–Ę1|ˆ3y|+ÄHĀØeŪå~sYgI)]NRēlPSpŠT¤.ȃIÉī XØĆl[}d|.[.üˆq,AM3™oARĒJ® Õ)Š/ŌæĮo7 DÆ*ÅĪcčÆ:•*TØ„C †”ĪO”rݜæyƒp„ø„_ėTpžŹņģ* 2’Pī(ŁQ“cĪ6‘ćA,P§Øōõ„®ąŌa¹µ ßPFł%˜§ņwdݹZ…ęŻī:quھĀSˆ¶ī EÖ %’ü]1ųnāąbŋ„),‰Ā8<._¾ NŖq‚8 @– ōK gų%Eiū”$Ś}UB,å* œ?ųD%į‰ó("ø Ł™cäd£¶&„{M‹é'(&©JšHŃWĘWżBH6ā ).”*ˆø²š¬æ&źm(?ȵ༛šUø”RåĖ—ųĀŽ5‹—._®°ZUJ+P#„ĒX05fćÜ솗£l·`Ė—²o“©Q#E{„B\QŌģ\©{J5F)eRgpÜeQ"cŽś›Ė®½4Ģ+‘uxbjĖŻGqŽ5FQ ¹kW2ĪGėDŁŠSł‚čāĮ ’ā}¼Ļ –%æ‘ Ė—/ŪR„BS8œĄ•‹ŒŌøµ.^.]Gq`E¾`¶n>„¹·}Q„š  ÆSkBTIg؆@īƀ|#(]½P Q x%TU9£"{Āę^É”øŃńŸ1„,¶ eJŒ`\“¤źĆD^HeœąĀß3„±+JC4L \­Z–EæĢ% µõ8y˜*K—ąyT©R„JÄĄ.ńļqråų1/ņ"ī7Ē2ē³A÷Ž J• Ū÷aąŁpģcCāĖ÷ϳī?|-ęRęYåŒA?‰Ż‚Į•åpsd-0œ„ŃN–u6KĄ(Åv"Ōåø©‚†Ü;«ƒd©^IUIrµ‚$Yr‡É D‰äCē*lJ•š1u›—.óråĖń2`ć[0XæSšĖ¢Ä XØ-ØØ#,¹ųc)+*oŒÄœ‘åź(OHœ<*TT§Ē”„@ÜøÅeŖ réĄR…Ō±¦"±ģMCilĀ…£ˆ„Œ”Ip9 7QlJVTHü›GōA*…Ęē)üC˜˜øaeÜqXų©R„„¶żCjĪęV%•Ā»Į z–A¢0b¢^×Ē~•Ā”* g€Ŗ„§]n-™¬pF„Ļ˜0'9HŽ\¦[”ėŒ»gŪė KČ+dt›¹ƒ…Œtˆģ€ᨑUŪ”†īS£+äļP~xš¬Ō­fąEźq.]įeĪp©W*VDU*(ą–ol{CtŸKœ”¢åĒūŗÅĒSfåĆū QߎūĻuĢ \ –‘l•„¹ClŽ.-ųņİÜVų„ t©kB*ĘÜæ‚.2‡šhš¾”°vJŖIƳ’²Ē€žĘÅųĶ#.ss8ÉJ”“ ĮG3I“~CÜ8üüs„L¼¼K—/Ī0Ź•+xؚpŠ•Ž'ł y‰NāTٚ;‹¶¤v¤Kžćµ+,źw›©wĒæ€xr ²¢K`ÜŁ-LµĮ’åĒĄ@„Ź ™x†”$”ƒØüås·OŌ( Fló/Ó.īø Ō5' ¬eD»¹w²XĮČåēĪ‘T}&*T-5ÄHJeT­bÆpŒ¬ĶˆīY„½Įcą”‰¤„ć&ęĖƞ!ø.qŌhźXÜŗ†[†ŁRō¹ ‹pJ!¤DÄu7’bÕĒLJŅJu@ØBĮū—– E[—rœ ZT `ø”ĘØįųÄ%zŸņåSd •1Ø3™ Žįõ.‘ĒQ;ĀCiTĮn¢źqj§pęW¶ÕĀ¢ā±;”1x<ųæƒ3Pni”…‘FĢÖ²•c§Ö‚’Ž1ą74Į#(ĻrĀnŠŗ‰`öŽīp\įĖœąĀß3r9°Ā‘Ŗ„. bIQ5+ā“„įč#*Trž@„¬THKßĀ¬ī µ+p‡Z†ąØ¢ø9‚‚\w rļ=Aˆßź=Ėq {ŅāNš}ǟņCĄ•` Ž]Ľ@Ņā7-Ċāx…¬J$½^b« "P¹s?ŁKŅŚ/ī6f©±8u,'ręŲvKĮt8I?öå Q‰/"cń”vJōsÄF^^æ+ą©Ę/¹WG\Kƒ4ó,#l œJ†¦¤có NāĄ¬ Ø’ČŠÜ5® pÅŇ¼Æ“ų#ă. pŁ!Õϰ“n‚‰^‘Øź_ š—{īk/”©³iĢęŪŽk®#qe˃ »š¶m’g"°ī%9”Ü»†1¶#V↔¦1ł ńŌDū [I¢ź.ŖńÉ jVąÅP¶6A04ś*„H‚ ¦lŗœ¢ĀźpŌ“¹TĪcØ©mp ,鈭T¼§qŻ*…)lYl¶ Ab ·ż–#üS5rČ1^ź!Šńī.¢®žMAƒåŪp "āĖÉ— ·*§œOņ)rŹ—õ‹ƒ.)|ƒČmóŗ=bź;•œźTeĀDĆäžš/YÄP˘{”e’ā=XE›Į© ŠōL(¢Øž”E3 ”7õcøü0u¹S°j$pRœÄ ē…Žƒ%˜ ŽĘÖV*€‘…%£üR¦ƒÅe® Ö6•~L†J³ø2å˃ƒ™”DĢygsū?žeź(±eĖ—\¢²TŌ3}ĆY¤eŃÄ»ę\ø-¹Ź\¹Īqąaüąo¤†”Ī‚+c܉­“Æ–“jTv—HżZ čn-ˆĮ|„81ēOFrBw„µ7QKGGˆūJEj`nRĀØÜDiޠų ’¼3‚0Ø)ØüR„^.\æpjrü˜Ė—/^D½KĮ‰±uĘņŁxæÅŠœƒlčE|%Ķ$a5vį+‡ą EP:HoPƒ* €De‚„süJ,"ß ĮąlīF ²”—8āā8c“Üj=1Ö Äł•^V#HŽŠŌŁÆØƒÓļJȝ2²œÜø²åĒB ½¤³2¾C :ńø`ÉÜ ü™/$¹~77ÓĮ]ųuéø0žO² Έl”‹¬ŗ¼0åš0łŌƔxZĮ©¬Œø0Ą[QÜD6`§'”nßĶ‘Š{€2…0ŲŁIiʈ!źŹN:ˆøź6·ĆQ§Q <,äį•4–xŌ!*2č„PŃŽˆCœ>‘Öa³ņõł”.\¼wä¾¢ 'iQ 1ŠHŲ•@Ō"å| ?†{†Éj§%āčĻRµ>‰X;©ĢŹĆš!*h“ķhžų—ĢAdŠ£ÄZ”ųÕōÅčuEĀL©]T[|Ą°ŚCģŅŗ @ķ”,ā#IĒŅĀMLæõ¼CdyüĶĆāæ 0¤žĮ²ˆlhļH4EæńB!¶4w*"¶ qˆmC,L¼W“ă+Sž£ģā9}ĒP!|1)a#ć½ĖPŗb±5J8†6ˬK—.5{†ø›ÄÜ©Xcœ0_q .å¾å˜5€ƒā#‡Ėø`ƒ6 ßęć0‚‹×r蝱—éy,#(j=„äEÜįŠ'bEo‘ąK”J ±}:‚ß’ŲGŪŚ‚ś njl„C¶²÷’Ž–m’bkj·5"Abź^õ1É7‹P”,_Ā«*jĶį7Œ!3ĄĄj }5„Žq\ebżÆąOš•n]7 Bøź±©Ž×‰äBś‰į@©n’ČnĶuQāÜ7r—™HŃщY«b› ŌO¾i EÅL3T?ČÖÜNQ%C¤JeĒn9BhŽŸˆB8}. uEźæL<ĶĒč|«åž"w K›Ós‰›Š‰Ļ²„Dš<*µÜвQ 'Üčź1jc XKrNÄW,“Zy`uøŅYŗrZ ”āDŠ•?Ųu9‚hœbü/ž¾,ać Ź›‘ēĘæ.ü®¼GÖł>u¢” elįŠāÜ­8FVøł™:•ņ˜Ÿq;gōe± Ū<3ØĪXÜ%Nįę•Ō–Ä^cöFb¼¢CPēH1Ē)Z”7“Äš?€3u.ĶĮæ •*Tؕłź•÷Šöó½Æą!ĀsÄoÜw "ÖGŌ`¤bŅŅ÷÷÷-|ĮW1nĀ*#Ü·©q#ó ²Ń«pDĻ9Ō܈ߓ9JĆĻĘėŃ~C…oH_»ˆ€7 „‚”³ńē°ĄœkŌx1nT©rüÅĆšGĮ—»–r”EømƒŅĮ$i-Ÿ1—/&:Åxš‰RąBØĘ=Ź$4G˜{ɦlGź3ˆā¼\cĻĄÆ.¼.nm€®”õÄåįĪœĮŌ¢•ÄęmĄCŌXpųu+åžåDwmĖĮ.,ÆB wĮ6ŠŸŌ"–-.VįØ1p†” ĆŁģ \tń1Gźm‰L1ubC™“‰Kˆé•|eŌф3Ō-)9š£ķ©^7.õé’äÓąb%s²Ÿģ ·+Ų†¢“\µƒÅ2nźœ.hE½MĒą˜~Y >«—/{Ę£‹Ėęžń@¤ŽŠŌl…Y`B,ī^³›¤©‰ė œcϊŖb6šeWźXĪąĖ‹q‹’ģ‡pušØkœ •*UĦÅÄńcÜ5ķÄZŹeJJĶī\«–`ś–u ĄĶMź}xū€ulø-‘ biąKoqbŃnŖ>æ*b‰R°Jöæ(ü3ųƒĒżCūe½Į¹¦’=TqgQŌFsÅÅ8+6ÄåćX"§x#źT©pcƒ \`ÓŕR·&ąŌę\×rŒØĒq•:×°Š€Ų¬}ĄZé8ø2wūC§ź,ŅÄ^gåoo1=³śÄ6ĶŹ+Ķ:eü!•B ˆ…*Ō"źųļäā8•’e/u@»4œjØ®7:Ēq$8°Ø:§w&]zߔ~œxŖ¹ÄINX?ø#¹ż”–Dkš˜ąęTs4žˆ‹©Ž¢R?Y Ė„Q™s™S¹ŌįĘ×Ė‹s¹±SłXEc*†ĒMzĒÓYhŽ`‰ķbže²Ņ6Ź•*V½Įšˆ»•Ÿ¶ ’ō “æČ4ŲK1ƒ5:Ūn8Š®„:‹ŽĪžā(.š‚ļ¢ “Géo£4“R–yˆ4!ü`ČąūĀWé7‹-»•¬Ō±ödŠ7 >wĄ‹S» 1pÜ!ø.U^.u2ˆŅAS¹Q”EØ#® /f øÄŖƒqŃŚõŃ#V P•āų-M™k@_öņDlæäßµž1ą; BńĆŌEĪāX07Kų'(B y˜ō £qj£”/ž%²Óq]–ß.g/g¼_7ń+Ģü}ĖņpėŠMN*`²XŌB„1•¼¶Ó†Įå\eĪā²7.!/G?ŲĶ„0ÆPڇĄ†œŁ»‹W8®1›ĘµØ+ŌØĮ6żŹ7))jrjƒę©…¹,7Ä bв;–iÜŽµż†5ÜžöŌ£-r®Ų^¤;‹~œæ žĒē>gäÆ71ĮBfÄÓÄ;ōv!„$ „JˁŹ©5Ē(Ӊ£rÜŽUźę‰b(q£ē1SpŅ™£P AŚ'øaø“–j©Qń9Ÿś€u… j¾¦…±Źv‘ØUń(1M"^.GÜą³÷/T»ŽÆ9Ü×6–J'ņ E^WŁßĄT©R£ļ!šėYJ©X s„ėœ½X<įn%¹(Å”¤Īģ”Vå£g$r©Œo{‰‹©,bīēü6ĒZšE±¶ Ó(‘A-uSāxsĖÄyĄB¹ĀF>5qMŌmĘ„ar”9n96$ÜUЬī/ƒ+ÓR„aĄ UĒ7é¬T©X=ź¬\¬>ŚšgY üED•+ȄR\9…qŹAn;Ąī-EŌøā:p©Āõ¼99•^橏L-č•s—*IØ=F„ŗm+¹®į…ø@é@ŸÉv(’"0Æ0ČqĀ8ŗ!8cØĒĄę4"²¾åcr½½d%°ŌHĘ>'¬Ü~X•¤øš©R„b½Ļ ‡@Ɯ+ÜlvŹÅGĮüRaQțµb}÷)#Ļ `åAøŅĮqā!\6Šā}’½ŻJRĻņX~®Ü]`!‡ü€Pž„Ł”NĖaAN±"ĖBÜ_2 bļ#Ģ" †#ē”z‡±ō›cPŌ"DĮ½Š¶–iÄķā„JÅ|£Ā„“P–‰Qõ/U/Rćųź…¤ŪĘA*w“ā]0€N'L“Óҹx&ä¦-y‚ NqYī>u怨T… óćĪ&ÄMŠqāQö”/¢°ŖĻ÷It„0q7¬ŻA]ĮlUwüEģ  ØJ$±f9‹7‡żØź£ž§UĆP ”£«ŃĪż¢^Ö©šR*ÅM¼Źõ\EFTpį)…MäĘqŽ;„©R™RŸW9Zøš8<Ēąīąė ¦£EĪćCŹ£ī-ĖĖé#Æō¹Fŗ†ń/ŌŌ&ÜĆPY9z_†ŠP>ągŽZā-Ī Æ¹Q ģ'koģšÄ8„QµZHŸl±VT‡rŹÓü—r˜¶ZĮGmŹš2ʾ%9|¹@Ōyœ#¦o( T©_R£±ēŠ*²*Ūć rŽęä(.TfŠGą™°‹qÉ/Ął²ż æeäā%|FÜf¾šübŖ>Ź·p=A<³¹WŌ±üBWĆ7P› Dy”5 uJĀÄ+Į^•Ld»S’Āk¹®Čj 6F›óŪ؈•­Ä†ŠKF*ĀńR„b½äh£™ŗS‡ĖžÜpcK©eUÜ“­AŻF,H‘õęDĄ‰+ĶŌjŌJęu*0}ǜT©R±ß^\ *\IX|.^8Åŗń†˜·šœw¼Žāžóø3‰dÜNš„҈žué%Ś®h¢l‡öjsœVõźnīiøŒ»Ü¼WŠ•+^晫‰·p†„²U¼><§Õ‚j/¹hź'pBŽžˆÜĒ cź9‚É5+qŸ†ćIĮ‡)X©Z°[ŗiGl.\YeGņWȌeĖ» pKXbG5sE»¹¼^å¢ō’į+ ^£V©āng^£øā5¹a̐jpƒxŚUJ•ąYĻRŁL.šĘ<ś‰Ā§1Ó6Įäs8Ę”.mrĮ9µ£:%šŻžwœŒSF‰ßq8kØ­ GrטĄÅ¬ŻĆąxT%Īaq–.5ćx؏ œQI…Ņ׈ÕĢˆj X¦Ś…”’©œbœ|z‹ćī˿:ĮO¬$cš¼ˆ‰ĖDŒź1}„ø±ż³”Ü؄£ˆ£˜Ū3 Š"ÅŌ|jT©Z•p—Z—å -W)…Éun™Ć^ą‚n.P- ©f‹HŗdQš5¼Ü5—Ćī;kqņ"Ń.A®0@Ō55[Ō&ä8Cõādc…JóØFȵ¼;Ā) KNü•č–VĆsˆĒ•å“؞ĒöŅRÄą*˜›p—zš8[WTŸR @bāq,q.£9D:C »ČJ¶^ŪÄ©o—Q§’Ž2‹~į Ne‘+ÉSĪ!OūE„£Ō¼* aÜHs+’¹’ŲÕuØęV8F;Œrŗ.o’Āźr*\³Hµ²]„ö5ŚćŜÄ9mŁō1£:מŽįü•S˜Ę1ē8c‹²ŻqbœE?ÜŁ.Ēū$«Ą‚ KØJ*æ°§Q[auG¢8KNw(䎒ČĘ5qu5óĮŁ9.’nSˆB$O¬«Üž’åŖ·5„a©q‡øZ‚®!„¼.Nåq)SnŖ{”IDfś›q`]!Ä%ās…MØk¢ƒĮI8I_ŁBÓžDæņQT’Θ6ģTvšą"Ū—lóåĪ2™QJ©ŌbDƒ#³æŪÅBw(eĒp±4Āī$ØŚTÓTbĘŅ–S*ŗ›Ņ\tŌŌ øA&ŌĮ4J$—[Äa×õČ=‰€w©”62ķ”Ģ :†W‹€$µ…CÜŖ?e’Ž'#ćtŸćEQākóKn(ź \†a.ā0ObäłŪU •ĢCM!þт…ÅhS‚F Xūż”øEAžMü~ ]ΆłŠSW"Ć{rųw,āź‚Rł—ŠĶĘ` …Āńrī&™®„įŽ.\X°.:ōī$Ir-‘Tq¬¢n.£²YŒÆ@įq@Śćœ²ŽÅÖx"źø‚Ū,”R® ęµ·SjZœÄŸŁ¢ ‹©± ÖĆO‘üœMĘBbĖ”P‡ū6€øg`Cˆž#ō‰īrĆSĢC­KŅ9ā[wPs@€”£DCm.:®įÉYvĶ#Gsµ{C-Ė „‚kā•°Ś@ˆ„į £ęćčv/Ü;©wüŒŖC©cwrĖzO‘ŒcĪ]NįHķżģ`@ P1~åŌw‚DHT !ż€‡74b$舌°Ł Ż3R§ś®(šu.ujQ‚„‡pÅ®&©u*sĀ!g%ØJŒMAäsÕ,ź ŠÉa{uÅ\¤¼I(śCIw6ˌ C¹Ü­}@ƶ$ś”M§ņYŲ9ŻK« ­‹u}ܣ⃒ȸå8¹ošq)ĆŌŚ±q8füŅ»'}–0¾FmȧsøEŌÓ5£žĖdÆ9ōµq„Hģb½ĆŁĪ—.)9‰‘+ŌžźįbVåj#ÖJŒ ”½M»šPDB“«ź—½l—‘%Ći舽ŹT6ĄxSHū0NRŖ†Ą'ņLS©KW7ee> Sq7äµ°[—ixŒ[€öQ(£5pīWlµśŸFuŠÓ— oPŗķ€vEP£÷,J7ĮŖĆ—Ø[Ŗ¢Õ‚÷YHķEź%F¶¦ł‰Ąč€īcK‚gśe©’ģTCĶMÅĖq·–Z+ų÷hĖœā»„fŁė÷ė‹pVˆš›‡Ō­Ńj%‚Ń¢ŪR‚‡ö;\%œ :N%ąA­4K sG2ŻįøĶmī-°]#l“Ōw"VŃø5röÓ©{”…Å¢ą‡qÓX¬{… aė”Ļņæ±e¬$›!LK2Ō÷B*@ĪF%aü>„`ēš”a»[ˆ@;cÖq-4äµ½æģµa–æ‹qeĖK‹PDń½9Äeb¢yT©^UĖĀW€AU÷*ėż”ÜŠnīXÜ=‰MĖŌŲ\RŌP ŗŸÖ"„bHÄt”¶^¢ÆÓŅ!²©]‰GSžA})eA q9 “ś“uŗŸJ}Ä$:©;2jXӈ° ĖQpĀŚ(ę’ŽążMP„XÄŌ;ńžÅ»Ž}Į“[6u)$}˜mš8†IĖŠWMõ1oÜžūłöZ½½J»Ėõ n®įŽ<óķØąæń䖢=ķ/¾. JŁŚS؈æi’ŁŌ²Ś"nTÆ]JōÜ«ƒeīĀ«ŒMG™QĮŠńH JĒšJ•ﰁé/Rļ‰mkŃé– ŖČÆ3ØūŸŌ‰x r‘)os¹T؋¾„6” &½Å½ÅPń$UK\čßł.tžĖ¾P䟼'Ń!~>Ńą†+6w”ØÓ±ˆĆ“q8-[­ÕA…źŁ·’ī mP9r/ŗX÷l‹Ük¹z‹÷į)•€Éƒ‰Äź‡Ū*d )|Ed •Ą!+6ÆsAŖ–³SÆŁöƽoÓ—’ˆķØ&ÖēöeØ oh·7pœNgÜyŒcč©Rµ+ ęC Œ©ÕDØĒœõ s8œłJ‡eŠ[bk %K¢„ĖļĄ*å+DmWq…”»b¶?°Ėb„GKY{›Š!öˆ‹ÕV„£źZ‚Ųgń?Ļ­šŪ†>śØšÆyµUø*.ā BvOń R® ”y7ś# U’ÄŃĻ܃½Ō”—`ÄüČ"ečBVā.ķ‚%GTź’<Ā …JœGøk”²OPXDj÷””"nćr¢ÅŽ·‡ūįq%#äļ"uąÄߙ{Ć|+q §%Õ8Kźq)£.Q§WZ¬øj"ž‘‚ˆWyęUE:2ŠŒģŠŁ÷*VÕ+Ąś¹CU7ÕÖi£rķÜlj ×E÷>嫊‰&“ܱRĀpAū(ca’²äétš––æ±ÓV¦ķSøoŪŲŗ•Ü„# Q餸 („ž[Ü ±ūŸžÅ}Źšé`„ŗœĀĀ‚ łTŲ ęēQŻP ®cV6÷4pĻö2¾±rüŗœaÅį7AńO"ŹVmEq5‚Y”RÜćE#/# m¢ :‰źÓX—grŹ•)•;œ1a¶q)Ū¢T’ś‹/QżQ§WiÜķ/»ļ)G®Fźˆ;š8€‹ĄŠp£eŹ<Ī2R”@āõ’cużˆ!Šćr§ÅĒ=Ŗ<ļż—+ØĆķ9õ!t Ēړ¹®>^Ń'_żŖl‹ 3L Ż<ĒÖ3™X’ūd “™ÓSl¤Yy§™¶[Tq€V—,Lw8\cšŠīmØ:ų …, ›…ø‰a;›eš”žĻžo„’“›š_^LŌšAj¹޼fŅQÆdæÄāu#ā8XóįpƒĄŽ”*ņā:•©Ü$Ŗ—r·€,ŗź# ·D-^k©”R±rįĢģŠą1Ļīl›%Ėøؐ¶Öšę„”s‡Qż Š fåhU7ķščŖä )[eر-;P&ŠŒcŃpJ.U©źjNåšžĖ!’ˆŠŻ¢E\)/)VYØcĄ Ü' ø¬ē+ÕQĖØs҉gvk1•„CeN£‚Ģ=˜¾ŁSˆ˜øBŽįpųq9łj3™tę›Å\O™Ä!š—.ˆ,Ö0‡‰Ź–ź67 ń6ó¬§NŁu;й›7ŌB¶Y<&„²ˆŌŖęYzƒŚ$äDnåŪ Jˆž£wøµ„³l7ĢcšßИįQcsl<ī]eÄ.¦vdµ•qKĢ“WŽ*F}F‹kĖ*T©R”é< Ægv™£ø©CØ8ź$pć9źē‘r• Ę*„ LÅŖ:c¾bj*Ō»TŅ’äD&Śat6ū”‰U’ÉĮØéź‰÷GD* ¹—¹peŊ.ؔ¤"„N!GĖrA‡ī9ćcä`¬Žõ Ž©pV…Ąé'RtĒTtuK7Ō E=M¶K¹r°.‹ce<’‚ Ķ˦&Ęn§õŠ&یmcŃuŅ‹”–·ø½Åćæ4÷æ“ą Ķ–‘öux8ˆ™ŗ X¼&ŒŁ§:ŠtĶrN5Nø?²ŠE}ĆgžŅ^Iv£™dJ'8¬kØŽĆ±†?ZG‘ŪŠq źķ—āÜNb·P¹ÜåĢ<V/Nc„8š©ÄļČĮõ EO:b‚čQ,¶Å£PQøRī!F—̹aą@/‰HüEŪa%Ūl1‰m®åŃQµ®H}¦ÅķzšÆ~åŽŚ"ŅÖå°.4q5ņn>žc}Ļéõ)9ō÷ń¾‰©īT‡ˆˆÖ%Sź!ŃbˆÄš@kˆ‰ŌA¶Æøµ³PŲTR ØŚ"’Č£c?Ō°%dF§3|ķjŖØŹHī—z;šē‡™ŗ‹ŚGTśD’ČUæśŠ­¾^cJ”p-” f\XėīR;†'’Ę>#ų‹¦%ĮĆāF@6Ʀrab‹č‹‡$@é)ŚŖnWŪO}ÄOØÕĪ`‚ŲT"Sƒū+jā³ø28e ø‹’ɝĮ• ļī/&åµ Āų±ō%{Ļé„o`§łīFų”ā½¼¢ŌJ†ēŁ98G³WÕC’š£äj–ćUćdjT"7Ø`ōE·RY¹(€.£UQØ’ §* +*Zé~ˆ!āµ9Žrņ…€”\Ā£ū@,³÷Ģ>‰ż †s\B†.“Ä»U^Y~7“|\§(ƒk.Q¦ƒüœółGxcāøEQoācžį q±zp}K@ ²XKb/°Üh‹ˆ7*›œ’±[«—øö6ĖĆUžĒn;š¼Ž\>d8õ'ō‹®"ĘŁwķžąUåqĻD”T}F™q yœ1\žbeƒłĄ÷’U Į]>ŃTŌ䈊aÕ® ĮJ©x\uœ;_ł.­%Tiß;[Ģ æŲ*·ō_’ˆŚŗo«ƒĻQ&Źü’ *CeźĀ?s‚‘ŻŗˆAÓØļrüÖ0ŌŠŲ…ŸJƒęc¾°į—Ī^Š×‰+2§ģŹĖbŗeķZC·V‡+ŖlŸā0ŠÜ4>§ųƒ^q»‡;—ąEõ2£"Āaö? “> ā5:Å®jX”ļβźThÖćA„m€ĀF[›¶¾ˆ Ø AśęPt_Y:!|.*–ź4¹[¤~ź\»?Ų(xf²ÓĢįé ?ØBčūØŖÖˆ^Ö±Cˆ„Ÿż &‹‹ÕÓ¾Š=zœ$—ØfĶt­H:†•c•Ėé5‡p†“Fū%ŗµD¦åJ€'“»œŁpY~‹šī>¦_¤5‡é¤5+}§Øjpś@8šIX!ā©„@•¢R¾ć҉Ż@éøéĻ,§KT—zÜ>ⱋ;,Ø?žNyEVīmwS”_āu’pl”އŻĮ” ū,­u¹ ˆö¦ “C ‹žĪ<’”µŠt}G.ŁŹ>¦0e™M*ę°u÷öDƒ 8c;õ̚KÜF92ŗŠ¬nēq÷÷ƒ^§Ģ„0Ēōį›ĆĻĄæ1Øŗ@ é@˜ŃØKŠ\’PžÄ[]K£µī1uøBåiG”*ZŸķ€XH8Bcu‘rÕC’āˆLw¤rŌDwÆ(4s(ļ†Šéz†C¾“h=œ)BĶ#³āCÉĒshN]M.ÕÜv“JåN§1Žć ō»`ļ&ŲDšÜŹĒ7›Ļ†}ƒāqøįõ树,•?ĶäĮ ±š3L׍GhEm¦=’#i7u9Ļø(ż\³ žW+oÆØŹ'—ˆ“l#6ęŗ> UGśE?ÓØ}"śtĖŲņ=j»DŬ\ eō·røƒĪ™Ciģā RvūWĀSˆZĄs;0 ”Ü!s‚?yc.1ņ&Ӊ,S¹Ō1ŌǃÜ\eĶĀĮ„įoÓ^W߯ŸCāN£Óōś“büc$2ļĄv1įĖjŪ…%n –K@,ó%Ø¶Š’ÉŅ©žĆ­ŒŻ•mŖJ"ך„Ŗs÷ h_ģ ŗœS>ų=ÄK“›…ōĖ© ×Ō6˜Ihƒ{/"åFŌGQq×,½5-}dؘ|;ĄkŽc;€€4EaĀDĆ9xĒq5*ą•aöjēPē ØĆĄĒL’ž}ų_ ń|Œ±ż8 –ī¢Sķ}F ±ĀŌĄA­+ptDt®ŌNHź Vź+hR1zŌŪ śZm@Öö%G¢Ż(¤ķ€i܁ę]j*»©qŌ¹7ųf™IžĖZlVįqy=‚£>+ńpQ ƒOr؜01ā8c.ćä`—pµŌ4ÅøˆŪ8`ÅŌaĪwØśqšŒqĻ©`ĆĶš2ĒōŠÜ%•]ŹNZõV*T©^ƒƒÄī"Ų\ΰÄ4ĒH;åJWƒp[z¹yģ:j/ ’\­LL8ŠéÜįŽę‘‹Ś.SWūb®ź"ór‡‹›-”¬·źžÅ īćą|ūɆ^ń*UGÄņ=„c‡ōĮsćw9MĄV„Óq7ź2ųWŌF ?RŻĪRżB콆\ø¬Øj]ā±÷•{†ž7õĘŪ(9„ œGūį.^Žå½MĶŹÜźTźTćĒ~LÆü+Q•¹ĻŁrń~F ±ż0D"Ē‚ēŁ ßØóå¦!u —MjM•œ1—ėæ…Ļ‘‚ 0ėČc:74*=KŠƒ÷ rćĢc. GĄÉ TH‘šx”°ō\ eć,L^”Ę'ycśfŅ®7ÅOö3‰¶OSąjRĘ$5 “n#„EøĘ?‡!ø÷„R§Ē$ EM‘·äJ9›°„TJĒöUī17ƒ™^GYeÖ.=AsQßhzb:y<Ę~ąC)ž˜5…ćˆ¢DŽz_QŪq‚E*Ńā øĒć?ŸVšńäpŌptŌoł(¤!†8ÜKƒy!žp¢ź\½Ne"¤ µÄz…Å`¾’É»ńŽü)g æ£Ģ}łžö?¦¤©Qø‘5ą„xī<ų QhŌ"ĢE%µWĀ÷כ*?Ēp—:‚>7īPėRŖ\zŖĆŽa:Ć-ou–Ėä4s,ā:…ŖĒQļ×,Ū—R§~Kƒ‰xØĒŽ}d!”éc‹…TīS¹±(Į“ˆžjš9„ˆxŠĮ¾%ĕ«‚¢| •*W€¼8’eńķ2@ø•#Q<%Źm‡“Wi,­aÄā\0Ē ŹŌt䇁÷MD¦]ø…ŽįaøœģęŌ \#ŠÜļĮ„ėĮŒ~Y*Wż&āœĖź7åMŃä—+N4ˬN"Ŗ'ū Q÷„ P¬9 EnćīØN±±N{„a¶TqżE]¬Ŗš2²š4ńw*“ćŠĒqŽŌTEp)5h•¤«FĖf¼ ˜0Ē7‡Č<Œ¾žüHC§. NąMˆø­Aq*Ļ^Cˆłm1ŻDźįÜālG×R”*ĆįØĘ<ų¾‹É‹ö1•V¢ša¶’åĮ„'~'ˆ…ĒčDļÄšcF; šX…9DØøg‡ĄGŒ ^ >„Ė—._“Į€œ2ž’AØ1m‡ź[‚CĪ«ÅŌ£Äįę6÷pŌ}BUgæ.¼$|ļŅN!EŌr`„&ÓL*—8EÖ Åė& Ö9ʬķ‹{•Æq.‰•ĖĄĖGęx?„’÷ nXclÅįņź>U5` ‡’ģƄŒ}ąCĒüŒc€Oīy‚•ŗõ ā˜2”;†Xė(Įm€}ĖŅ5\5ÄŪB^H’21~ ņĢ\cžąƒ‹.9!qŽ`šę8|E” GŚĻQĶ4EløyōaĶJ§Ķć cäzČKG…Wq‘8ŽÅ©b`Į„ø»‹PaIrZ‹Æµ—Ÿ„lG˜bšo#Ø`ƒ†>‹ų'‹ÄqRæK*łełŗbüblŠw@aWčV±ń'ū†QŌ[‡”#ˆ1G]K«†ČXH""ŗ.ˆ]gˆzjŚ•5¶\ī,† 0a‡üŲś+P>+ßźD!æąDÕħĆWs„ā՝A—ł“‡Cįs¬$c꜈CĪ”-P;TM’ņź5Ź›Œ-Šc“Ō²§0˜rŌwƒ'0—*šyóc+Ńué3X<œ¤ļõļ$2ǟēķņ yo…`2|kRór÷ *T©P J•„Ō­@ˆÜGČĖśeĮŒ`†üī0üB(Ž+ÓyXóš:ņyÉ.T ź^.uøĒČɇ |GŠFåXAtu:„¬F{‚Ā+łŒPQn±Q”l­JÅJ•Ņl/m²u±Ī•+ōWĢeĖ–—-ŠĖ—äb”āń†_©öW„…¶u ŁT rūrNńÜŃ(‘eśC'ƒ*šŚ^;‡>0ʹQń3Ę|…±³NŚś©z‚[ɃÜ&älFŚ-žA %J•ÕAé6 ·Ü@’}Bź>6ņ©UT¹¾ļ7!d u>€š\;ī\5¤źVj$5¤œ&ʉ]z -ć˜eN„Wč7ęJńL߈ƍG=eÅ叉 PĶc¹žy”ūFÄyĖįu.š8|zɋšs¹Ēū8EŌOAćZõŒ0 9šqøÜ“ā?qŃXµ%·}Įōėfć?öć.g3ü)J„×ŲF ‹V0ÅJ•øŪ tÅ^Bœš€šy•Ų•źR­ ƒ]ł±*ĒjÅeŅāGōsĘē1‘ Ä1~ÜsĒ¢¼ĶŹŌ­ś5:‹.;–ø JūĖ諌 ƒŚGQā {ā”Ļqם`š×‰‚) ĖxNeŠū‰ÜBTJ(y„%³­DģKŌ)āŲJÜJ`Üję’±M†£~”Ģ©R×}\¹pt–3G¾*˾’,]@ļȅh»†«VwŃptōŁ:Į%~“róX|ˆCŚoÕX0K„×…JĆt ¼Bųö•µßŠ@å¦×S€tӈ¶¬L7|*ā¾Ńū–^ųß׃/ō#Ęńr÷.\øÅłœćyrāćØzk‹ƒqēQ"!’ĢÕ_ū9'ž„ņi^.jq q„ń=:•+k;—.^:õ'qņx‚OÆqU;@sż‚ĄŪÆģŻų#š·ü‰KaÆ©Ģ_ØaK_ģFM¬»Ž*õ.ųĆčLU<£S‡ijėoöu‹6oQožK„øĀ-Ė×8g1ŠmQ±ś3Ģy‡2ąŽ¢—ś=ų^/×Ü!Ž&3Œq„ō ;Yæ©ÓqÕ(±Øżnn{ÜÜzoMу5‡$蛉xØMHyf„VQ¹“vøĆ‹YĮ«ą”T­N£›Ęw ɰĮŗ¶ Š©ĢZ—/§˜7Ü< I’Œ ū錹paqU. ¹w/ ʁ(¹z²½ųs¦Ļė$!ƒ Œļ),!0„X˜ēĶAŌŅ_…¤U|9Ķjį;‹Ķ„¹n§yŪWå~ĆŅ­JȾ`š*²÷—Ó+©\„-süJ¹déK6œ&Ā ž„A¢°„)r“TŅĖ˚j&ÕŚł Į×ņ]4}CŚó3‡sūŁU†*"ā×,5Ģ_°Ķņī]ć PaN#u÷.ēRš-j\ÆČ×āC/¼.8qrńXgQš ƘK·…y1Įٌ~‚lēÅÅⵋƒD[×Ć'ų™uX[ź§2ŗ"é;—ż~̦ź÷veŪL ä\žip*wŽ!Āę ^.YråŌļXØ ¾aj“%nž;‰°ŖK—‹ÅJƒ9ŽŒ›‹J7¶„ndl.V1K—. é‰Ļņu*[šxš%ļep“ÖP„a ¦IpbŌfżAAŽĪåĶ;Ūø4}+S‡:'x¼ æ‚M'§1$o̳śĄ÷£Į.¢ĒŠĄm§;”7ĢEÖbĢ–9pĘĖŽÖ”ć6¶āXp²AP½Ė©rŲ”\ŅSÜ Jƒ ½āńÓmD,– Ē“#̹lyšæŹW…Ź"ü‹ńŗ—.1ˆMN.Éøe0ķšX§#¹~§ ļ)Ś h„mDJķpfņŪ$uuÓæ„E9ą† *0-gŅĄ°ļƒ/Xƶńdä›Cō}F™y؋•µĀĄ8p°×Q@¹ķÉYEŧQ[ˆE„āęłR™ØGQZ†å0ŌT €‡QAŚ¢T2żd”–ļSs‚ C¾žž”°Ņū… —._ēGSIƒb½W—.X^°«6Ō2F1ĖąB\7ǹQˇ‰Øj9«Ā¼oņ\tļ;¬ńļ',<ąāįø !”eĖ5 ŁŪÅĒžu€Ü©Ph½ ,^”ÕŠŃ4ŌU МPŪzŒ„ÕC3Š1RrķĆ ĻŠÕ—ž„jhļž"¶”KÅŌŗkˆˆxlˆŽ×~Xu€£©xbć²ó„D3ye­°“"ßǬV Äyń! yæ®ę‘,Ū5ƅNĒ c/&Hy¤yŹA՟ׂ „P6Nčū/āęuā ”oR×RåÅÜDā[A,Hc…ʉų”ŖUš••JÜŁ£Č÷,]©`a²īp›ę[µlBāŖ®Õ¶\e×ī wī 7jiÅėąJœF ĢeœJŽo¼n*:ćLMā’4mPŠÆ_Ž žÄ¾#å~‡ī ®#æ+ŒqQŽIĘyāqžüœŽ…]\ŗ4Tēxs0œ§Q5ż‚҇­Å¬¦vu2Ø ż–(i·Ō8GpĘ”æ¤D uÄ(h_ÜD»0ŹØH–[[#.(b JVĮįŌ±囗:—Øo˜Ź„hEÖjT ¬l ˜½Ą(µ _ ł†zˆ«åÜ»ĄĖšGŚF¬³‚+mŽóz‡>Lc“įżŸäų÷–8ŹjŽßaĻ®½D!‘#,¤„ ²ĢQ"Ė (/ˆźĮöw-q޵ ÕD‹x6!ū\ÓsE„ °-lJ”Ź\ʦkŠŌŗ—Jh—Tƒg¹prX>ńrń÷qź?„Z}°š—āؽ†ę> ēł›ĀpŠ[—ųÓ[Šuz•‡&.,rų2Brų;Ėšsr½dć+PŚ'Bī['JŌ øJłś_ —Ž¼ĢŒ †›šÅo5‡ąĒÕĖ =qé^²r†å ÄŲlnžģ’#Ä" üKc-Kū {‘|¬½ri?±F™fQ+Pu.^øƒ…pT 5aXP¦į®5¬2Ūę\¹w9•*ÉüÉŪw .ēp“Ą*-ēmĄčJüN~¬ÜæAlŅJøā¾©Øó<ŹĒQõ’Øķ+©OŹzÖqįNŽ®XAaX1Ū9–”R«õ*šJ®fÆp’ŒZŸ÷źpg8ŌėK*£,lū÷9Õ©xÜU‘P^nY”jP)‡ē§PāģØŃĻ,q·+÷kĶGŌJŠ8ę-“ł6źV°Ę9c‘§qmó!N ŠĒ­\¬óį~„¼c,į5ī:JĄ—«ƒ"€ąGANūśŽ®\¼]KŌø·ģ{Q-6© ¼s8‚ˆ”’Ėö.ńÄ#LD²+\ŹHb¦åė „å‡Ė6iF_ĮÆĻ?ˆGĶxE 8?©³…āĖ%ņ?ąŃ)YżĖ¶sžü;‰įõ‹¢ŒuÄqÖ_Y-s„½T½Ę¦°— K›ĀćUŖ-ˆŅ$ŚŽģ¹r– ͲŖa•Eõ)Ņ‹”KØB‘nĖ+īßń%j K!KWØā½¼Ė¶åŌ»ŸĢ–‡ØŒ­b· óŌvÅ~J#łŗ•—š—‹—ēKAĒ’Č0•pY „>åīń^“Ž}„9„ U%ššs*>ӘęĘ„GłįzŠłų%6Ɔ ō3xŠ@cax0@ņ1į;ę Žį_üK·7f&š°Žź'Ūx@AāT©Ä~åų\¶Ā&Ųę æ˜¬$ GŌs8¬ß„āV#Ģ}D%żAˌA}J3ż>Ņsš¹Xu ŽW‹—›—/©råܽT„‹©X%˜ĀŲ'ÜAPA,Š—9°ä±rbüNó\|>cł2s*Wš|ł—9ČĀwč¼™g.]ĮøśĘ°²÷ īmõæ±J“ƒxø±ŒuŽoĄ‡…ˆŃw.[.£¹«†ī…‹l¼Y-åŹŹWµK(Õ“eV¢­²åĖ—÷.ßq*_„~f%b¼V$I_™ļĆ’'Q}ė¼Ō€4qÖ§n [}Ü„qcO;ō±#gQĖJųuRīģ¼āĮMŒWp±Äy—p|o/įžŹ 8rį#ʞ‹Œ²Y. ‹?%Åš7. {ƒpńc;ŒčFų*Ėė2OR㋯…~Wā;›õ4bži ¼Gņƒ „xTHś‰^5īēĘóršKÉ,%Ā«qžKœEåųø0Cg$[ō%@ø•ĻĮ'<×Üq]į†?*üĄYTMžHŹóžŹøźÕų׍Ō[ń4õŌWsæ]ĖĮ*Åf Ī°Ä•˜¾ĖYžNc—ŻĻɟęĮļėńäTK—qexVĒ 7+)äžn9•*•QoŲŖTŖõ‹jQ«Pü•bĪ„j^6ąeĖÄJŒs^ĮŁčź<xōņń7œŸCĻæńėÅĖ%ž%clL\„ėÕ_'sp»‡š»¢Óø»œĆPęćĖHĒßaK¬ŌәĘn½<§PœbźrīYżĒå÷ī> d†CĒ‘NćåŽ1ÄRS P„Āķ‰ņ.s•ƒ}^‚^?¦P8%5RļK©Ī5Zęwē.³Ā8&¾Ōæk”ėIų#ƚB·ńÄnsŽ°Ēˆ‘ĀV* eÄæ©j”×…µć~R‡‰Ā²ž †±xī,XūĢ߃„ō/›ĖÆēˆz\?<†^Ĝd7"UUšś‡Q_>ÓRיróp¶ź.\Ywü[Ž.>ŽDź\ā8#iēĻ[ł+=ēbU3øÜ%,ؾ/¶ź2ü­.čē ’üŽqsśSł^]į.$c0',Æ+ŅƒÆ„Nåjż×/<Ī2ī?ą}K—.2üxT½ÅŽ½Æ…ężį³SÆ7D[~_…R<-^ µ®½OćoĄę „k õ&DĮ͐ˆī#ā)ĒądĘ”JĆ:łõ~ŽpāüŸö:‹ā„|WćÜ_5 ļĶĖųĆ¢  Æ><Īƶ©`<„S¦;e¤Ų˜×įk…„ź\³5ńĪ+Ōø¶čØłņĮx_ĒŲD_„{0•Ćģ2_ņ-bāÄ*sų‡9©R”Ćū9UÉS‰ĘXʌqr’B el8”ėūźV…± ä~9^kx\9ü2rņ`įĻ>äFœ¹šc’ŁSœ$Ö.u›„2‹~óoB>m…}HŚ÷Љ^¢: Ėū—8ĮØĪ ‡01ycšę+/“ų§ŅG~<8c*Åx}±QĶ{•9÷qė ĮČEĖśų²Ā±XؚŽæ JÅaüÕlš¬±ā/,GV”ż—Åū‹ģ9‹qPģv_Ę!8ÅĖ—.¾,‡ü1ü12ĒĮćŸ#w8ņī1 üA)ćĪńp/ؗ8u›ėą_‰ Žn/ÅcXGšĘLī1šcQ­¼`ƒR¼£Ī±ĘÜpĮų{ź+Uč¬_ā6?Ƭuąī1üQņŖ:RųÅqQ7¹ĢÆ$ŒKćļį>ŖŽ@Ū(mRėĒÆ3Ąš~!ā%įŒ CÅń`ĮŠ0čō&£é‚V©¾ĆŠü2Ōė.·Æ’N¼Ē^yÉ ØxŽ]AÕFu„Ž9ŒH•ł ×¼ń­zŖW©Ļ“ˆe¼¦ń‡ēn\ø!tfÉ̬\s¼ üƒĮ^āsJõ䊜O°Ēį˜ćęĮq#ųR/óf*åNćóbJƒóĀ4ŗ›UÜX¹büķĄŌ·ŅCåT n2xŒ|/šF_Č9¼>’ⰌqX"D‰ØūˆEWćR®R/3‡~ŹÅD+ūč<Ųü0*L91™ė끨÷9•ްs#ģ†~?ł9¢‡³ØKńrB?„V**¢RÅ`ĖøįŒd­xTXYr‘"~h—ćEzÕGŅGā³”̦GÖHN°Ī£Čæ2xŽ嘷ąį#QüduńćįW:ų„|ßq+Rʱ É ypóČæ¬WJ…°pG~L؟PGšUŠ… ¹MJH‡x%JöØqćō1•YN¹×ØĄN1ʱŽē,YĮžÅśɒ„aR±~įĶj&ą®\ø5ø9‚6ū€įŗļ.„ž¼OKė0.uä2į xeÅcškōāS+ł+R°b„cŸ.°īę7?‚„Ļ4k˜ †žžĮ•š5āCQóc/ÖŒ³ˆø¼p±bžĄxVkŹüo3øF<Ę<ś—ä ā1ā)pWr©ĻĆÕx1—é*¾ėŠśź-€x¼K‹äpĘ?’`ƒē~7/7.šdŒbÅæˆGŖäØĖĖr„Jų— ź]śy•ØæįŽ²C“?ÉcPE|gū.¢ų™råī?°ńa›ÅĖĶĖ—ĄŒcąü!AäöÜ|X`,Ō£Ū_’Õ}Õ‡Ųžżę ‚åĆŹ„F 7§ČÉøhØķĆ)‰āž;æCų÷=N„ź,Y{—.\¹pc/ ś_”ß8<8ʱUøü½wåŌn.8š­N§82™IĢBgÆŲ?óÄņæMGšÆāO7Yy®°•Š,šb©Ö~-ųšÄŗœŲ_ßĮēćWĄļĘõą„|.æE3{qNkø”«XźQ:_•ćÉöŖ°ū/5æ…}ļĖ‹š;‰X4žxx˜øiŽęć:a»ēŃzĆóYרŠ)õ¤(õō1żhem,ųgÅēć/ š!8Ƭ ~~G1ČGÖCŽüSąįł’ēĆļąuńĻ–>ń-·ń q ܼąƒ¬7Ń}dr5;öąĻ6\YėćV¼zš~'‡æx{‚Śó†—8!©_qmĖų‡ę,98:¬` ^÷ƒūē“ō˜n¹×æ©×µl[<|ÜdĄĖ”n~qļ~‚æĢ¤j÷ UaZˆ †%÷ ļ.:ÅĖ‹Qo=~5ų‹…üļ_€uø!hąƒLwøĆę?ł ä±ü š_€C+‡óÜŹü#æĖWˆŽ:šē(ÄäWąĀæ!x~Iæ 3įšr4ÄåóČoƾa–?¤W‹ųŽ"ßĶ ĄoܐćÉü!š‡»óćTošBÉ Ī¼œ?’~ å~qUśźßąØ`)wžąĖÖ?ƒ==z…‹=–?³×8ó|ė柯?³“ģƆj-üWó+-żˆN\_ƒC“šų§µĆś ū™ćrćq*W•B(Śõķ>~€|GõĆ××Ā©^+~słŠōšĀT˜$Ɯž]żå}Ǽē5qŚ$I_ōĶį)J—;”“KōÓ9„źVµ„•¹DpTÆMĖ÷æ¤æ³ÕĪńĆžÄuŌł…ħ7*,ā#ģ!²1tUD•*$aĄŸ¬õų2?¦čŁÉ”Eõę©‹nQYą>²xń¬»Ž¾;ū-ėõå—/Ģ„2½f„a>5š˜žšü‡ō¾0XłC-ĮĪü/ćńßł‘ž9‚š¬_ƒØæ­Ž/÷į+#.)yæ ĆŠoÓ߃ūõź\ ÆäŸŅO'ŸųĀ %įĆ ČF­ū÷æõ;‚0—óįP%J›aP€*¶Ms*Wµ’™×ąī„ĘT¬‚e9‹|ųTēÆąŖWņi —ĪRž’00PŪJĮ÷“¹^ʁpū@KŚŗ"ī^ų§qķšoų„ż—÷žtĒŲ-ę¼iiWĒ‹āŹ`T–F.Äū9'9%ā”9B ¢‡Ü„Ā>–3Æ*Ć’/ņ.¤“+|īWi±÷Õyk|óüE؎©ż®¼jŸźgs”€r“ P}JņåÉßq‹N:šęh¾¦ćĶĪ 2® Ćv‘l¹R½·g•ævķ~„#ė_Ϭ?/ŪBņRŠø}aydœóé9•ZŽøøx 2Ņ‰ßˆ[QŖ|ƒĢ+d\~Ú÷éķ«øRŅ5%CłP—RįĘQČ\¦„¶Ń]\ś_^ć:ĶćŸ”ŪˆCwVÆpź5zš •ŸÜ"Ip§ˆ–øxč*Wķ1ļå`fēŌ%ADø3„B“fü+ŅoĆÆCĢ!ŹŌhy^._µ—¬²æB³ö:•N#EĖ÷Ģ4¾  YVx£]1**óW+ŠqA~zƒPŽēū>‹8‚9‹Æ¢®ŻĆ/¾õąžb½;āP@ävDÆÕ+ĪćŽ$‹ cOģ \HŠ>„!ø·6•ĖšÅkX ŌęR®W¢Ņń^‘Pģ’éĢnĪŠäA~‰UµŲyņžĖ€6”šŸ ü½ųׁĢXųė”įź!ŚJćÓ’±t-;Ŗ”iŁŚA¼^/Æ7.s _“]śī\¼ž7~$YrK«Š­«žĪ1Üps¾ƒūåŻāž€·śźT*“>Ī`3—Uw4uĽ®NXK’±Õ®Žg>&+Éā^±üœzPķÜ,óā_°Ž„²żz IAFNOųÅJČ@ūŚ‚‘GÜ-0ś[*~⬠£5ąašėFkš8‰Ź_§h&…°#L©Uéø2üŒ$ø¶ł/Ąį6łWüJ„@ĶÅXÜ­ćR„GĄŠbāZ‹Ude䨼UW¾¼+Ęƾā4)Œ 4šŹd”l,īs<ß")~³ ^„ź?G~žc­~°J…¦ŲōžDXŒ™NX`ē’cĒ—>0(4ÅJ¬pGEņ’1^²:ĒRüN$ŚwčóRÄ:BŲÄĄŲ@Z(½N?:)īŗ`‹欖‚„D£ö<צ¼z†£¹XļĀåĪgŽ”ĘT%cÆ *³R™³“Č‹Ž<~F/ĻHņ}CI†­Ō_Ļ?­0¶j.¾©š¹QēŅkŠlŚQ•³Ęž9ÅEe, žń¾Łs^ƒu訆@_Q„@zūų$ZQ8?ń£І mĢŲU’„}JÕ”gŖ¼­«"§Ūœ>ēx8‰ Æä૯I|»Ļ~Ūń2;†ŚhŹ»Ÿ]ˆÆE~¶Gņ”©Pućxa.u،YĆŻ~ yĶĒ~›ó%(×F}ŹZ%ģųÕ©”RåŠ^¹œæń3˜/ĒØz*q+Å%x1SŒŽXūHAµn“R¾-Ā/č'źĘ4cŖ’0ś9‰æ ¶‚@Zß¹ØĪü8ń!RńzĖĢ}§Ē`0Ł.»‡²®"¤§Ōžž`Ķ\P)̽ųó¾ \¶°]±Ē•āįõ*h£°āz©^!lJü2oŹ*«ēj¦įßü.˜īßS’ eÕ Ü¢–‰¦qź%DHt\j߉Īę豕ØGŌBZ.üH5ūŽ0n>®b-ü!p•ÖZųü+Ę aĒxņˆÆ™Z˜DÆ©oy:"#ā-ś:•7ą_®†ā+Müsź"©‹zōWEĶł÷ąa‹_Ø­õŚ;1®ØÄXĶ•šō\øł¾!luåĖ8ĆųAŲŽŽ}KZļ„­ĀOIä@”†ü_;HŻ’¾Ėö GÄ©§‹ĻĆėäTūé7Ō¢<ų^ µ·{<\”øeƒaׅBG¬_ƒ8ó­P’½ąāüŒ:“mčo æié#ņ„Ž«K›x²¬įżō„!ØŚ$GÄjsć^dYKn<9Žx4ØķŽk•eĪ(DO$©P†hˆ:eNlŅ~1¢<ä|Q—8cūš#©rõ.\³ÅŽLæ$š0ŌÅ£—£c¦³siWÆÕ~dæ ņ¬ńź%ģ —žŹVéßŌ«0ł±š1¬¾ā¼Q/Š?QķīŅCĶš¬¤ÆŠmˆ—ķ ˆžf  iė÷’ 囆É;W5•—Ń~OŸxź^L;ōołńįĢ9¬wąūļƈÆ(ł‚£G3ŽcéØ(!ĆŹ¼ßų”F+n$OYzˆāåłÆkĪ@ėø|!“} PŖÜæ^Ž«cūFšż…üa£ćŸMāõs~ĮÆW~+ÆŠ(xłdw‹ĮØłßaGłÅUū’†™²–:qצįš«•¼UÄö(-ņ1Üę9Ybź’žo¦ņÄtpG䙧źćNOSė c¶£Ļź5ÆČYzÜø'Üwƒ¼r‚d¹* ‚͇Äʒ˜ ]3õu+~žü;1÷o‡Įey*}ŌRWA×Ä' FźM„„ÓĀæP9‰Oć Ļ cč­yŽ.\ø3ÆMo/?Kx+ā\¼<|R\WØóąŗÆß¹Ļö,O؞U*q.óß®ż/¼>7šĻ„ś`²ē­ż – v¾ß”?p€|ˆ„±c…¶ūoĻońsнų_Ę}=JøėŸŃn[U×ä•0g(ź>&Ś,IxźĶĢ9¤ż½5äP©Qē'›äųžN¾1ųj³§ø¼ŅžōXłÜx†¼Füj>¾}P"x>‚?„«j5O9ē㳟ŽCx~U”UEŪļÓ~‹Įņ(0X,te~5µß—^h+]ĮHq^!*]Ē™~Ī ń~ĒęǟłA<ļšWųJ‰Lļž@E‡å‹>nчę9 w9?š#Šųä× &»n‘BJH¶9ł^Ó^K’ž©×ęŲZ[æŹcƽ—ćy¦ŽWĪž ½Ź~MkŃĻćߜ1éÆÜN¾ ÷ß~ĶD ąŲśLT~@–.ęy#²Z·ū‹š~%zH°X(ó%cØn «Y80üŹgńāUųu; Zé¦+Ž[jā Z »łäę<Øb®Oųłāl?ł~•åĢ`_~Īp'ŖS*’­ŗ‰®}%©ē'Ēò^^üŗō‰¾!8’‰Ž„ßČ”¾Šõ×Ŗūˆķ~"ėį’YÆĄØu(GŸIhŸšü­~9S£w\ė’šĻ׫_ƒk/sT~Ę®-żl_1ēńfxĆž%ŪąüĆÓO©ó'sĆßė—łzj’ K#~’WĮ JOžw_:¬żü‚T½kńĮØ_¢Dį>OX»ü1C÷JĖźÆĘ³ŸM|MdgMǟ‘`#ž ,żžµŅćc_^šæČ ¹ŅžøE^~HŌtRŃGļĦGn®Ü{Æ_’X«Ė’-øæ OźLŖ;§ž:4W³æŃ®Ü¹oģ±ü[P*ŸX\ćó’+@Æøā•mzĘ mNŸĢ-`µ?ņ§ŪkšÆŅšæš!×1U’©6מŽQŖ’œŁćę?-_ĄŸšćĄŽ·—žMžŸõ±Y{Ųł7’4¹Ļ…Ė›UŽüŌ*³’%/żMż)’„š’Ÿ_źĀڊ©’čµģØ;W[ł«”s·p~Dü)ĢWǰ—$»¤v’Āļōе<üBqąßüz£ÆÄėh7ōZWś’Ńķ&’m‚¾yĢOŹ żZŁś?”‘_Ļćņל°ĀĄõł •’5ėąŹÕßāN©©Ėžˆ4Å#£ń7’ś[łõ°ŸŠæŁF£’ÆłqśkįDē˜ž&„"ĒÕĢNb„—÷,d¾Å 1u’Eæ”mÜ%Æs’abÆż.æīšėžąGö’Łsent-forgot-fail.html000066400000000000000000000001271357643561300377220ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin Sorry, something went wrong. Click here to continue. sent-forgot-ok.html000066400000000000000000000001541357643561300374200ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-originAn email has been sent to your registered address. Please follow the instructions to reset your password. strict-csp.svg000066400000000000000000000302361357643561300364740ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin successful-login.html000066400000000000000000000001411357643561300400230ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-generic-sessions/mount-origin This is an example destination that will appear after successful non-Admin login libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-mimetypes/000077500000000000000000000000001357643561300300405ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-mimetypes/CMakeLists.txt000066400000000000000000000040301357643561300325750ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-mimetypes) set(SRCS minimal-http-server-mimetypes.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-mimetypes/README.md000066400000000000000000000007771357643561300313320ustar00rootroot00000000000000# lws minimal http server mimetypes This is the same as the basic minimal http server, but it demonstrates how to add support for extra mimetypes to a mount. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server [2018/03/04 09:30:02:7986] USER: LWS minimal http server | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 and click on the link to download the test.tar.bz2 file. minimal-http-server-mimetypes.c000066400000000000000000000051161357643561300360510ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-mimetypes/* * lws-minimal-http-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include static int interrupted; static const struct lws_protocol_vhost_options pvo_mime = { NULL, /* "next" pvo linked-list */ NULL, /* "child" pvo linked-list */ ".bz2", /* file suffix to match */ "application/x-bzip2" /* mimetype to use */ }; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ &pvo_mime, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-mimetypes/mount-origin/000077500000000000000000000000001357643561300324675ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-mimetypes/mount-origin/404.html000066400000000000000000000002271357643561300336650ustar00rootroot00000000000000

404

Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761357643561300345430ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-mimetypes/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000014321357643561300344050ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-mimetypes/mount-origin
Hello from the minimal http server + mimetypes example.
This shows how to teach a mount new bindings between file
suffix and mimetype used to serve it.

Lws has a bunch of built-in ones, but you can add as many
as you like when defining the mount.

For example, lws doesn't know the suffix [.tar].bz2
implies the mimetype application/x-bzip2, but we taught
this mount about that relationship in the example code, so it
knows how to serve this example test.tar.bz2. libwebsockets.org-logo.svg000066400000000000000000001403321357643561300375200ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-mimetypes/mount-origin strict-csp.svg000066400000000000000000000302361357643561300352300ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-mimetypes/mount-origin test.tar.bz2000066400000000000000000000166451357643561300346070ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-mimetypes/mount-originBZh91AY&SY«×;a’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ą’=ƾw<łŗz÷}Śß}Öūٽóėėęöō÷ß}ﯽńļ}óµīvww{ŽŃõ·µļ¼w×ßm÷{¶÷®õ{ĖĶī½Ū·_FMJ{"zA<›I£ż)ꀌMM¦š`MO'„<›PÓSĄC'©3MO&£&™©š§MźjoIšzM¦£& MmO 1ž¤ō&G¦SŠeD³MSō§ƒ$ĆDžL4LL§¦ž¦i=&FG”=FLh¢<“4&“É©é“ ?Q¦M¤iźž™O4Ó@jy4Š1L›MLh¤ńOQźza#ÓMO&šbič™!ŌōLČSõÄu '©øœm<ļåćauĘyW{ͧ‘śöĢ­ ŗRØA”Ļ^Œ\ŽŃ¦}&ėrμ‘²£%f•¹ÖŽé?i’É“tŪĀżõ¼éO­†Ę%)‚V ŖQĢhu­_£®¾˜šä&VÄ †ų¦cĮŚž¢OŸ:2fōmą|©øY]ńA1Ę£aw&F³#>Ļ“’ké0t¢9:﬿½“A7 ‚Ÿ;šŪæAÜõ‚č—Gmą¼·ŃćZœ‘ČĻ”v¶Œš©ś—Ā/idŲD‹Ń ³ ēÅ”5"¢?ė›MGé%y–źŸżźŁ•9‚Æ«ü³ä„ćJgŽ™„@h æ…“)XæēnĄ?nʗß[ °q‹T÷9q€œKka’^R8%–Uä&™­4ĀļŻQVd÷m8żĘų8÷ČHėĒF)Œ(3ōŻÓÓ„ ™µaõōčīéĄTŅŻ«*|ϳm¤®²ņ΃˟pjŠž]˜łõĮB  !a‡‰{n\Ė‡ ƵŁ;“å#¢ƒ‰d/“ޜƒL᢬6¼r„Ķ€BŽü  ›1ÅU z“öŠ®]ó=ż/“畲Ūō˜Ža޲ ż{ķĪfŖZ2"_ŠB_ŹRf_³y]s {£óŽŌu ÆZ±p.Æ“/”›5²®~Ņ˲œHŸYəVG灶t„K2…IČ9Ģ~F’ŒéEYܳyÓäēć©aŪ®bEHÖ'›·ā[]Ż‹?Ż(Äˌ<+ŗSLUu8ŁÓ AŅ ©Ūą,Ā$F’ȑī&T–ąŹˆņSŁž×Ų—+cn™¤®U}dՎ÷ČĻÕ»›mGņDuC½fwĄ\Ōś2¶P³ėƒ¶‹rrż¾3nnڊ3¬!Ż%c™=ķØC°f_ʜ&E4Ɩ(Nl”Ø:I“pģŲŽ„„ŚšĒŚÅ‚“jąńā£Āwł²%·³ć«‘½ŹŃå”j½_ćn%”ž?R,„¤¤ōĘųń”¶ĶÆ^’2»¼ńt!a_Y`]göCSs¬<!­”7.ĘBźozįB)£ą8&M[&»øoÖņ‰õZ2ńa„Żżņż ™ ńֻ#ŚĒ²õ)ĆęõĪ”ü›µ&\RAŌs‚kśnvõhę0uib‘Ef“ĮKjy¬g–r {›füNǜĒ©łk3_›ū’£ļK’ ŸGł‹ūES¾9Z«:ūęś=5éśŪל8"Px“PĢf#h”e@B;d~±0žH "ŲŪĘR>/Ļżių,¼¬Yp‹ѽKM~Ķ2Į,˜ÆŁečåDōP2įäIq¢dłq‡Óš^ׄu~łĄ@tn»ü±ßL¾ź “ąlūŹć$©5W y¬) B¬*źÆł^Ŗ, s`Ųį‡"żv®ōĒŌytŹqājXecCH*ā.Ū.¬ÉńŻÜ&Fœ‘–¬”‚fĖ„oY’æ¤ė€xžCœŲ0R$@Ą(·„²É¢·®ėvĀN‘ÕT‡·±ńž#Š„‰-Ÿ}ą€ {Fą>QõJe”3†”¾”Ą÷«cMā»ÓlŃÜļ”bsĖvV;Mw ’m-U$«öę>*Ņ®¼¬ Ä-œB4²¢Ŗ™OŻ‡dōņt£“[ʒN=Ķ¢ÅZxŽ|¼¬‘ż‚\Ūņ÷f[4£qzyJ/©X^„ŖÖū:ģž•nRZø0k€r@UX!ŽüN‚ä"ĮyĢžÉ9%Ł[µwŃ©› żUO„\ŲĄŠó<ģķü “SĒž»Ś‹ā©G3_’Šs ué.jī×}“rÆé’Šņ„pĢ1o€ž ŸVe‡²Ä[ÉĖnNOś«Ń4t9œČˆVĀÅ;–ž…,Hj†³½Ō~ĮćŌŠ—šō漈ÖÖ}·mEgn>£ydgBMŹvPNdčül«ż}¾»Oj#õōH0Ŗ ”Æjs0‚ōŚ'“)2ż³Ń“ćœSŠ$ؖ…#ŌZ™ˆ‚#ĀĪ£ļ‘˜-篂¦s®u潞d9٤“µÕ;(§m‡2Ÿ0w¢8Ų[‚É K²„‰Jńg«vg§.w}HĮæ$ŗ]­4.Ś’ŗź@0>:|ićŁ^GAFūöیGw*X°±Ų·YÅNę(Čh+‰ūĀJh±ÉnŪ„½h™Å¾e°µ©÷`’ģģćņ …ƒnÅ.³µ&=ž”ßĶ# rcœGÜ5éH®Ž/Ø9Ēž*ā0CŠŃÓvk ģ‰ž²¦Ļ¹Ø¦[-„\ø{$!2×hžgÓ»!MĒ–Ąh\ŗĖdz¼|šė‹„Čƒ‘ur‰ŗ*-%ÉrÖk…WQ–qEmezi«Ŗ6É Ŗ\Į÷ĪŚ5D1'Bw/^ æ²qAf æLĄO{|čĆÓģ²T5§æ)n4}ECøĢ’*.C—ÉbÄVź¤×Ƕno KłŠ\²næžÉkŪł2Ń»ƒJ DÉEóŒęS‚^ŌŹzfc§Įp–WzŠĢ\öRh·i9•õĮŗś5“k裓žB>d”¦hļ8R™5Ą¹§üįYA%Šm¾'\+©"ĀųāÉIŖÕpNéŪŅ>:S°Ę·£:ŲK拵J’§ZRĀvSß^!5›OT‹)vĮŌōYÆPüpŖÜŽ_~ŗ›p$Āüé;6ž-üłŃ ޱA7…¢mć$MųQė°))¦ņg½½sĒBéü:ų!-ō¶ŅźdV±8[~‚JZ?³<óqš-óCŒ01p›ī9l3ÕJøG˜¾€soĖ'Ŗü^ź6ÓŗŖē÷=l&^ÖxW jĘHqš‹č41›`åa€4ś÷ūа˜] ®Ō šp-5dfS%³›ÜµƒpīRn#äŌ:žC/'Ä„ hHMVÜ=³-qō‡ŃFū”-éh„{õy€fŗėœV>­rū“Ųyƒū_ŌVnØjŲ:tE¦®Ē:Æt|^®ņ3ŽęĻpQ“)wŪ`)Ē£a”`īüŗōĘq¶vb–Ų..]sé’Mčäü›ŌqB*͈€jŪč¤ŪlT@•¦člP3Ł5Co3Ķ c¢wĮįŁŸef“ŪI+IYPžĀUĄ…Q0e3µ`ł-ō0Mļ Ģ×é>&Ø;wU¦ĘÓK“é¶žåQčńc vÖF9āgīU»¦’JV4„\EéuŠ9oF\t7‚`ˆ›^&æd…ššGŗąŠŌlTźÕ¬Ē`HA'©vx™ ”n}:¶J•²»eQģq±6PßauAĄ9ŠšŠ©˜­’k3]”»+oŻ®Ųp =œ/~Ö»÷^|ŽCFė†źRIĪ‘”Ō hŽ™OPÉä>«dŸV¶hļß~ƒ™L󾓏’>t¤›ŠBżKŌŹ s»j²ō¬āīŗ“˜mEæ Ü’īmŁĒ°lŅćŚ?ęŒ,żP;]ežoÓŲćcށĀįČņ2¢6QéR c @ŁP”1zźI&©5: {ioHW(Hļł3œgԁ擱ś.×^Üņgtdü£ÉĶ¢>9DęēŌ‡œ?_BW«ÄōOĒ—Üóčbõ\€Ž–Ć€Ē ‘ߊ*¼*KĻb1÷f0żBѕ‘ņ%Š *['šĪųŌ@žsCˆœZĶ«J6ĖXŲbÜĄ1åa­nČĪ'®‡~4Ņū¾Ń„Ž«JõĘZq˜'Ž“8„ŽY«ónł•±&{xUäåķÆōSäŠG+ śŽėŲYĮ=+y½Š ó%ŪŌ5ÅŌł‹ nI)QtśØŲƹj'®Į-,‚²gŹ£/æēÉ$!üĆł}r¬–Ę-lš¾7D! ·¾xwĘ^Éi3 ŒRN­ö.–”ć_ø?ÅłŽ@Oķąh~Ì+å[O¾ĄÄ燔UĆĒĀRŽXĵˆ·†ĪĀ 7 µ5ż.¹óM˜!‹‹×k“…mw€ˆ«6Ynՙ•«ųZ Õ+—>JšĀæS°vąMbŻ ĀՄÆČ}Ķ6ŖZCéI|Ž·Iņ3Źg5¼=Ÿ_/ebĆßӖ{ÄY8ēń:ōTkģpk\¦”˜;č‹ 4 ešµö®’Ļ”›r(ŌłWńi„žĢ/9P.€8ŽŖ)?ėwu T³śM«wĮ¦”¤×"›Eļ…{2ļ>Ē4/!  ǹą&‚¾„;+0”·KSCʗS >Ó©ŹÕKb€jĻūaG!¹½ÆzNČÅŖ­­ āt±5p•hŒ|kŽ>”©fŗ1‡ßo¤J6Vź„1oˆåŽ™ƒ˜ŻrQ1Z}(‹¦/ģ¶āi’reDÕć描Ÿ3µOƒmF!ųjkŠą]]`¼WųcöƐÓ(ść‚żšµK e¹Źó:ŽÆČ’Tdųó=„nEsTā5ęģ½9ü'&ān“Ļ˜LŁgégå N°$ƒ Jźå#ɰ’„)® kƉ3}­„łiH©Cų&ųÖ AäJ[Xµ:“ ķģd-y^V„)ꝭ&w8=”ū+‡™%råhĮDŸTœ6˜čĆ0ȳ•µžl6Dī †I÷–Õ0ņ %{YŠ”Żn—~›OļēŻĒŽYĮĒdž‹’.kć¹&øęCŅÕ}/õõa¶€µšžæĪ›䏞“‡­)@źiyéĆé](}yR3kņęf*ĶØd¾\\ź„6ØłĆĀ{uĢÓŃX¦Ķ£‰ Œ8É !}Ö}~gŪĄYćśā'$øÜ¼ź~ImzXvße«#Ašuh,<‘Ķ ±[ķ‚ģG„Ļš-i"É¢&Ēy™'‚¤%·L±t›Źk*‡ÆX1 gR “Töé2ƒ!hPVn[ÓZĄs ųõČąX÷ÆWÖ Oj<½³{yÆ#™ā ekd† ĆT šø\ė3{źćh¢³Ź6®W:<½|†¢ż^†ū„HŌm”+¾Ś9~jĪB~Ōŗ:toqÄu±¦]©ČĶC{«õū©ė„»®Ō9“*æ*9āUč«›ęś!}„É–—įį©»ö¤ł#诨”™Ø:†ŁóhĖkˆsĪŠCČć…X_f%Њ¢Ąl*³DŅæČSz"—ĢO#e»Õ£¶š+x‰ŸÖśwŌ_†·|æœ 'q§Tß7ķ¤ ÅlĄū[‹ė“tńĻ ŅØń؟·JĮ·™óɖ”Ó‰AéSÓ:Ų”Z• žZ2•3«šIćŽ:źĆöbļ)°˜o_æx¶gᩳ…Ćķ¢f²,āŗų[—Š8ÄHÖ°ö8>ŽŖ&W÷|%ģ9ļo•Ūr:Q’Ƒ5;”ŃŃ{\–F÷%¬„ķęk0PÕ~#8 yśį”›ńb€‚PĖJ+?īkW³ęŌę+Ö„ōV#7"ųõ5ō\5 ÅZxQ!C­µ¹ “4b ü'{kĪE Į/µ¢5=Ī”No4£²| mõ ę.ŲÜ]©w²hĪ—©·×ƒ,š8Į ¬Į č·NčBjŲ ”·ö.œk/²0^.÷+ī=‚9,J:÷ÆEõBß-ö•ĘļUx° µš–…ŲĪ įŹPāóŠc4J¼üYĒ•W³vĄ^ėH6æ!ÖwYÄĢ7µ…ß»W×ĀąFp®įüūFmbĻhІū$x•Õä(–ģh…9óұ|Ōn§ ”ÜÄūŖ¹ČŽīACń昗Ń~«¹ŖŲ– õĶŁy_Äř·YóƒÅ'§B žfĀ5Ķ M‰Z¶VKwU&|®ī•é+ÓӦ謹3ŁCœßöSÓ-n‰s,ׇōq„B¹¼5š`µ×5*±{¦ŹÜ‡lr܂fMšĮ ąwöWdœ’[ | ė8ļ%Ū'¾ź k‹W¦yꈚXWų\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif()libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/README.md000066400000000000000000000030401357643561300315160ustar00rootroot00000000000000# lws minimal http server multivhost This creates a single server that creates three vhosts listening on both :7681 and :7682. Two separate vhosts share listening on :7682. |vhost|listens on port|serves| ---|---|--- localhost1|7681|./mount-origin-localhost1 localhost2|7682|./mount-origin-localhost2 localhost3|7682|./mount-origin-localhost3 Notice the last two both listen on 7682. If you visit http://localhost:7682, by default you will get mapped to the first one, localhost2. However if you edit /etc/hosts on your machine and add ``` 127.0.0.1 localhost3 ``` so that you can visit http://localhost3:7682 in your browser, lws will use the `Host: localhost3` header sent by your browser to select the localhost3 vhost for the connection, and you will be served content from ./mount-origin-localhost3 ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 --die-after-vhost | For testing failure handling ``` $ ./lws-minimal-http-server-multivhost [2018/03/16 09:37:20:0866] USER: LWS minimal http server-multivhost | visit http://localhost:7681 / 7682 [2018/03/16 09:37:20:0867] NOTICE: Creating Vhost 'localhost1' port 7681, 1 protocols, IPv6 off [2018/03/16 09:37:20:0868] NOTICE: Creating Vhost 'localhost2' port 7682, 1 protocols, IPv6 off [2018/03/16 09:37:20:0869] NOTICE: Creating Vhost 'localhost3' port 7682, 1 protocols, IPv6 off [2018/03/16 09:37:20:0869] NOTICE: using listen skt from vhost localhost2 ``` Visit http://localhost:7681 and http://localhost:7682 minimal-http-server.c000066400000000000000000000123761357643561300342470ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/* * lws-minimal-http-server-multivhost * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include static int interrupted; static const struct lws_http_mount mount_localhost1 = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin-localhost1", /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }, mount_localhost2 = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin-localhost2", /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }, mount_localhost3 = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin-localhost3", /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } void vh_destruction_notification(struct lws_vhost *vh, void *arg) { lwsl_user("%s: called, arg: %p\n", __func__, arg); } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server-multivhost | visit http://localhost:7681 / 7682\n"); signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; /* * Because of LWS_SERVER_OPTION_EXPLICIT_VHOSTS, this only creates * the context and no longer creates a default vhost */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* it's our job now to create the vhosts we want: * * - "localhost1" listen on 7681 and serve ./mount-origin-localhost1/ * - "localhost2" listen on 7682 and serve ./mount-origin-localhost2/ * - "localhost3" share 7682 and serve ./mount-origin-localhost3/ * * Note lws supports dynamic vhost creation and destruction at runtime. * When using multi-vhost with your own protocols, you must provide a * pvo for each vhost naming each protocol you want enabled on it. * minimal-ws-server-threads demonstrates how to provide pvos. */ info.port = 7681; info.mounts = &mount_localhost1; info.error_document_404 = "/404.html"; info.vhost_name = "localhost1"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create first vhost\n"); goto bail; } info.port = 7682; info.mounts = &mount_localhost2; info.error_document_404 = "/404.html"; info.vhost_name = "localhost2"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create second vhost\n"); goto bail; } /* a second vhost listens on port 7682 */ info.mounts = &mount_localhost3; info.error_document_404 = "/404.html"; info.vhost_name = "localhost3"; info.finalize = vh_destruction_notification; info.finalize_arg = NULL; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create third vhost\n"); goto bail; } if (lws_cmdline_option(argc, argv, "--die-after-vhost")) { lwsl_warn("bailing after creating vhosts\n"); goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lws_context_destroy(context); return 0; } mount-origin-localhost1/000077500000000000000000000000001357643561300346615ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost404.html000066400000000000000000000002521357643561300360550ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost1

404 (vhost localhost1)

Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761357643561300370140ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost1h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000007131357643561300366570ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost1
Hello from the minimal http server multivhost example.

This was served from ./mount-origin-localhost1/index.html

You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000001403321357643561300417710ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost1 strict-csp.svg000066400000000000000000000302361357643561300375010ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost1 mount-origin-localhost2/000077500000000000000000000000001357643561300346625ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost404.html000066400000000000000000000002521357643561300360560ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost2

404 (vhost localhost2)

Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761357643561300370150ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost2h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000007111357643561300366560ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost2
Hello from the minimal http server multivhost example.

This was served from ./mount-origin-localhost2/index.html

You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000001403321357643561300417720ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost2 strict-csp.svg000066400000000000000000000302361357643561300375020ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost2 mount-origin-localhost3/000077500000000000000000000000001357643561300346635ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost404.html000066400000000000000000000002521357643561300360570ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost3

404 (vhost localhost3)

Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761357643561300370160ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost3h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000007111357643561300366570ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost3
Hello from the minimal http server multivhost example.

This was served from ./mount-origin-localhost3/index.html

You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000001403321357643561300417730ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost3 strict-csp.svg000066400000000000000000000302361357643561300375030ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost3 libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-proxy/000077500000000000000000000000001357643561300272055ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-proxy/CMakeLists.txt000066400000000000000000000041751357643561300317540ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-proxy) set(SRCS minimal-http-server-proxy.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) require_lws_config(LWS_WITH_HTTP_PROXY 1 requirements) require_lws_config(LWS_OPENSSL_SUPPORT 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-proxy/localhost-100y.cert000066400000000000000000000040721357643561300325460ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-proxy/localhost-100y.key000066400000000000000000000063101357643561300323760ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-proxy.c000066400000000000000000000044701357643561300343650ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-proxy/* * lws-minimal-http-server-proxy * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal tls reverse proxy */ #include #include #include static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "warmcat.com/", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_HTTPS, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server proxy | visit https://localhost:7681\n"); signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-proxy/mount-origin/000077500000000000000000000000001357643561300316345ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-proxy/mount-origin/404.html000066400000000000000000000002271357643561300330320ustar00rootroot00000000000000

404

Sorry, that file doesn't exist. libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-proxy/mount-origin/favicon.ico000066400000000000000000000025761357643561300337670ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-proxy/mount-origin/http2.png000066400000000000000000000166131357643561300334120ustar00rootroot00000000000000‰PNG  IHDR@qeO„Ö pHYsCC,ę·ētEXtSoftwarewww.inkscape.org›ī<IDATxœķœ{”žU}ļ?ūņ\ŽĖd2!!!@ˆ:Ķ1Cė… ˆZ ļ§.EcO½j„zŖmķQj»°ķ$­ÖćŖÖ„e)еœ.XWµŠ*„F«Ų(1š ™dBfęĶ{y.ūržxžwnļ;™,Īj¾k͚™żüžēŁū÷ģ½÷ §p §p §p §p §š_b9ļ½Ų±cĒ,ķųų8;wīŪŹ’ļŲ½[lówģŽ-¶ŽyÖ¬»öģ[FFÜĪyĻŪ¶m›gĒóļŲś’—Ąž=bošJFG­T,““žŻ»}łbß„ķög¼hŸ{ĮĪ¢ū¾Ż»wūńńq/„š,%ą½ģÜ)÷·ZA”e2 CWQJ©<—2ŠÄdšśµRŖf­&E§#d’54¤l»Öf¹Rašē¢ĒIÓ_QŹ5£”!‘I§£”s “RER:!e @8'­µ&TŖŃt.Y”µ{°IāOņÓy.kCC¦jE£(k„UŹuǐ­XaŻÄDņƒuė̶mŪ\?Fōe€qĒķ·«_žÅ/*YµŗRv:CV)ćņ<ŌR†6MµUJ[Øy.}Yom,Y!¤¬;Ą įźB„Mļ3å}‚RŲM½¢°“¦Y½VSi§³Z z!œBäĪéż ©u3—ņēŽ˜‰)hoyĒ;Ģb&ōgĄöķ’±±čH»½>˲M&ĖĪ>-ŽW 8—SÆ×P*<ĪY‚@!„Ą{O ”µ@© R ¬Ķ‘2Bʹ(å±Vļ5RfX[|9­«(‘ē)BXŅ“M§Ó$Ļćœ”ÕŹØ×k“įœÅū€Zm­C¼ļIbš>&MŪ>ü‹@ėļW¢hļŹ›āā‹Ķü±ź~_×gس’dČdŁęÕ•ŹłńʍgQ­ŽE’ pHéĆ:R*œóx/Ńŗų-„B‹Ru¼·@„sŗ\W)` ö ‡Rē$ŽĖŁ6)Œ18—#D†sMŒÉqĪ eŽ”1Ī8—U¬³Ićœ%Ir²,#Ig„©9ŠlīC©+÷ģiyļÅüYŠĆ¼gĖĪb2MWäƌĘk֜ɹšF¢h5q„$RJ@Ŗüŗ!BtŸS Ö{‰µA9p0¦`āģkR ŒhķqĪE!Ī„0Q“ƒ£;ē4Ž+¤ōX[ōĒZƒ9R¶€P®\9%¦§G•1?gd¤gĘ÷2 D;I¬Kµ:D®Aė5H#„BJ‰” 8Wtŗ@÷+z„@ń[)A¹ŁEŻNtļéŽļ CˆņŁļ!<Ö:œó(%f TA!˜]JåT*R&Ōė5/„ńÖz&&cĄžVKā\¤ĆŠE­”Ŗ– „”B)(Ö0³_½h+jm·ĆąÜ”Å’ŌšdĮÜĖ :÷s}S ¬u%c¤¦ *QDcŗĻōXK9;Aą"ÉĄ­õw‘-Ė!0Ÿü¤*•Ō;gšŽP©0ū…”’’āå_~šƒ<ėÜså_łŠŸ\²é9ĻGåSż(ÓiŹUų@?Ͼķ×_łJź+Wrżõ×÷\›’ĻUļ}Æ8ļĀ Å[.æœC‡ͶŒŒš’æ˜W^ɳ6mņå*–ÖēņŠŹ įĪīӁ¾3`4ŠÜ0Ģl§“£µGK:¼h-:SSS4Žgö+—Ģ›žžfjjŠ4ĻIJŗ”Õn#ƒ`YŗNšŠééi:„‚Õ«W099É-·ŽŹ7o»’Ę7Äęg<ƗĖT‘e‚8Žā0 [IéZm€%ą=ūÆ»N‘$Cu„Ö&Hiń^~8f÷‚īß]ĮŪ~ó7yĶĖ^B`…`Ó¹ēšƽ–]TLĘZ­†”’?ū£?ą¾ūļ絯=÷Žy'§­Z_śöļ~€(Š8²oxĻæ~ļ{¼źµÆeff†}ę3|ŗčO±Īłé4mT‡†š­éi»<€hõjiÖµ8ސ2œŻŻ‹ĶmĮ {2ļŚšš0ĆĆĆ̾g¬[Ēӟö“äkŹ/z¬Łœm;ēœs8}͚%Ÿ¼ą‚ xłĖ_Ī 7ÜĄīūļ/Ś•rYęHÓć‘RM:öcĒģØX8 ś2@NM ­”±Ž{„PHYˆ¤ņ„]“ŪmvŻw߂Ncüæ$–ŗ¶˜ĮĖA)<@½Vc^m)9“Qź˜ŃŚló‹ŸŲBå¹Ī…Q„aŒ÷Ž+mL÷ļŁĆłĻžņ|<čĆē÷žĒŠītøé–[øūī»xÅ„—ā“ųX!rœóĀūĢf™ßY«Įœųś1ąŽ;d^©DY£Q;])÷²TjzÖOEœ¹~ż‚>šĄXŪCzR‘e¾š… Ś.Łŗ•w_qEw™Œ…BSÕĆĆrۚ5]½”æ&čA09éÓ45U„Zkӊm¼·(%°V ēnŪ¼™ļß}÷=ąō³Ībrrņ‰;Pˆł‹ž’|“Ölܰ—^|1’ć²ĖPB:÷)=Žœ3BZģžœ”Ž{+ęͪްfØG‘m>l‡½—d€#Ļ%aø¤]żd" Cīŗķ¶Bóƒā·sÅĄ½„āeQ*%ĻS)e–g™ėtzśæ` ąŁŗÕ9pĄćœ”ҁFŹ`V}Ŗb”8.žŃ:4ÖĘÕ8®īMÓ‘ÕÓ°cĒĘŖU†!©µfÖLõ=čS…¦š¾J…^ˆµćĒulŒœļŁ‚>K`||ÜóµÆłģȁēŽ[„š(åž¶aƒæō×~MŒ>ć ovŽæčEĢ4¬?ćŒ—„÷\zÉ%œvŚiKö}E­VŠyO† ®¾j—^r a×vč@ Å„(E”*}Z”“”į™gÅų¶m~ūöķóˆ{˜ēŁ;ć“Ń83ʲ­gž…¬]{>ZŸÖu” ˆ¢b­ĘĻ`ņś‰Bw($'M}éKheæąČ‘ķæ÷Ž„^’®®Õ8kŪ¶d¾? W‚dbĀiļm†ŠBddaK{ü©‹łĀŚBzļ¬R.Čs§¦¦–·ą£Č„|¶©pw-­ö>UPx†<…OAb­DJ9Qb­īd™]<[{Fä]€Cßń>+}׳/zŖ£š9F14E5ƔķYó½ŸŌ{¶ŒŒˆŠŚhDė:APÅūbיSxžźKĮ£”4Z‹¶1¹P*Ż»w/Ž/ģz—X«%sctT«i” š>,ļė†ēóœģē?'č!ņƒq>/V™Z¹µjśŒ3ˆŸżldį€yōPŖŠēö­ćs<3& ¼7“QäÄ Öąa„T’$]äQŹ”»ķÜŻ0"¹ļ>7ßLė;ß!łĮpĪņƒŠšų¼óŗäF~ė·ĪīēĒYÖ®łī~UC™÷-Ēvˆ ]aīu=ٱCUAÖ!,°»ņ·\«Åō—¾Ä±k®!żÉOļ|ʐÜ{/ɽ÷rä#!|Å+Ų°cqéL9!ę÷©p‹Å”]–å€crņÄŖ0ć愍†Bˆ•„a čśż»;l’w§)\}5?Ū¼™CļyĻcü"ēȒ韸’Ā Łżśž‰0·7y¼‘cL µī;e{°cCJ9éœAėŸ/D7Š#śMżÖæü {/ø€‰÷æsōč£åŠĪį?žqī|Žó°ķörä]&ŲīßRŹŠćwMMI)}ūL kL„tieYœ›»Ń˜bGĢs_uū_łJ²Ÿżģ±īQ`õO~ĀWĘĘH–bB”wc…ųRq.„ŖŒŒōLį¾ XQDnR:Ę“ŹŒ.7ŗĘ-·pōŸXr?x"°éČ®}į {ÄYœ“h­B„a„Ŗ”ƒž¾öŪ|:Į"0"„²Ž›2ę.Źé椠FFXóÉOņ¶zļv_¹ńFīśÖ·ųõW½ją=ż‚ 8żC˜~-pß8×°ŲL/ee yžeŠz]ūE¾ĶŒ2ŠD»ÓY9†UāxBTqNHŲšÖ·ņŸł ?øēžG5šłxĘ»ŽE>44­&x`®”+¦»Ź[‘^“GJ…6 ķīf³Ēš]rŃ)­£ ^A©bo Sŗ˜NȄ7¼īuœuę™  „Ö¬zéK¦wIBš¦s ŽŒčŚÖŚNžŪ0Ė\gjŹ/–½K­–0E`1,“ ,ŽēĖĶ€“…xÓ¦i;@Ņe@©ŸĢ¢›œ%e;¶ō¹æw Œ{«µ —Rd„Vµ“Č<ÉÕź@thÕ®eNSu(e±6Da[d¬Į ĘPnŒÕZ%I:8—ĪŅ>IĮsäČ@t‡ØZ%z4Ü")K)C…u­WÄBÄūĆP-^ĮżUį0t™”¼÷(UB¤œKO›Ė {B`&&¢{ŲøaĆ\ĆBMŠkeØTą!޲lłŠŖ°ö>BˆBł ‚9qų$ ݳg ŗū€_³šŠ%Päxo‡1IÓŚD:—Ł‘‘Į!U©ÖåyŠ1-ņÜĶfr>Į¦Æ™˜ ™Ÿur|ø`±R$T:“Nńސē@<«Ļ3ś*BĪūV’e Žž“ł¦šāŻö$¢ło Ää6p/š«/xĮ\ćÜL°@Ž÷-¼÷6˼ɲüGI²üčfŽ+cōt–u°¶C‘‚ś¤L’Ę?žć@tßź«Vqхö'ĀQäfåa(į½\Ń'u„ļˆff“‚ØÖõ ‚ė‰ >KĮLLŠüēˆöą5Æ~5Z/’ĪÅ>„ń>Fˆ„bĄ )Åʵk—×ļŁ±6y®b„B” ‚R#~#ĮS÷wxc–„;Ü ¼ķ­o]x”H‘ó„ķ"D8Ž””Ź‘ļ?|xysxčŒ3„‡8·vmT©Ōč&/Kih‚'™>M™ŗīŗhožŪ3ŸÉ‹%JĶE ʛs¾™$ Ī%k5·¼OŠĪιÕT«u“ĮŚz yĀ>’Ōß’=y™ļw"ąVą]q‹Ć\eBG×u/)–‚WA ]éXŒlŁ“ÉRęBʜ””a”АRį}8» N2|’pōcˆö Y­ņ?ßüꮋ]†®0 W¤ DžŚĘxå}ˆµŠ"WP/H<:ÉÓ’Ųg?;Š×Ļ€k€w¾żķ¬,Sp{ś#„@Y*qt¼")ŻŽ>õ½ ˜œōa˜\Ź£¤é ֚2éHĢśObxÜ>Ģä‡?<ķ @³^ēO®¼ri¢ł)3E‚gT‹ćŲ(µbtŻŗTįmŪ|dm”u}6Ež¼€CW^‰™Y–®\ ¼ēŻļ^:znšcœxßi$I"ĖöÖė=Įž±Į¼V3NE×=kœd4o»ĘM7 Dū9ĄóŽ?ųƒŽ‹óŽ…Ö);“¶¬måyޘyč!·¼GØ¬Ī“AŠ ŻnŅ­‘ņ¤ŖĄ¶Ńąįßū½h®¶’éŸĪ¹Ąū”k uÓd‹ ×T;7é“īlqÅR°‘MŒiam^–æ™RĒV3—"÷1ń¾÷‘?ųą@“’Ųtī¹¼ėļXxa±6ZX¬Żś¢”N§M’4|µW¬YćxĶk³OMéÜt~üųŽO"D0³zĄćō’źW™žā¢ż:p—\ó·ŪĻńы";Ä£TŽÓ“ŪĒ…÷²11!YIb ¬‡Ą*eŽ43äy»¬Ą8)Ó?č!žīļD;Eńõß~łå¼`¹ŗ„ł³”p޼·äyx?-ŪmŃ-Ųž~ Q­¦ˆĻ\±b BŌ1¦B”U=.&ų<ēĄå—cyd śæ¢õėłČ ±‚"mÖē2’¤™¦iGH)V¬Yӕ'ö īܹSŚĘ¬¢RYA®Ā¹ ĘĢ„Č<ĘĶpāŹ+ißsĻ@“7ß‚k?õ©o|óQX¬Eu©”„T†@#Ļ%kֈe}‚»ĖZżĄ{I&e"“g˜łņ—9vķµŃ>B!ó_ł²— ž’¹JR÷“"ŽWcVÅŽ»''åņbC— ”°6„ȵ1e‚ŅcśņéīŻ<üūæ?-EPõœĶ›ł«>›Ö’˜_½Zų+H9D)Aī}Š™šZ^ ŒLNā„˜*KŌ›xļ‚ĒTäšMzĖ[p­Ö@ōØ×¹į _ ņX&„ cƒÖ‘²vJU†ÓT”"c“vCJey»Ż ČĪCc|ś;ĒĮßłҟžt ņ/·Į篹†s7oų5 PĢE± ¢hH*»<‡V®ģŃ{–Œ vœÓRŽ«²¾æX_Ž‹A7ĮĆŪ·ÓX*~æ?¤X÷ļļ{ŁvŁeŻÓ×*ó i„Ø!„VB”Tŗ¶ÓÉŚl«å•”­cŠņöŒGóåé/|£żč@“G’ ¼ųā‹łŠ¼jށ1Æv™Ā $š¾šg*VĆ0ҐļéaY’ø@­&„µ¢Ón?‚÷Ęų²~p /ß¾ūī7=C±éU6ląĖ’šØĒ©bŻŗ†b¹:ēyŽriŚ7Ķ“\`żztXk­'M›H)䝡,ĪöīåĮßų üüõšĄ‡’ŒcnŗžzVŸ –čQBPÄ2‚ KÉĘ )°¼1d;/Œ1-!’zqx‰ļ1<śŻ75ÅÆ=öŲ±ei[ĄŸߔ’뮾š-Ļ}īņĆZsuĆ¢ō ņ<—ÖZY«Ižö“ĮCcÖ9JE+B朞µ·ūI\»Ķƒo|ć@)³?Ž|oÕ*¾zóͼõMozt] Ż~Ü¢bdĪ)źŲ³głš!€©”µ(ŠF*•APGˆˆÅˆyšYĘCozķ²ˆłDų šĄsĪ;/żŁŸ±ņŠ!&Ž’~ÜņIŠKb䷛ʳžµ°±8˜Å†aģ\ló¼;€„k‡”P„öK’Ā0¦äby Ay—öŻ Ń[ĖĮ+®(bzĖ E”P|mõjN’ńiæīu<öaĻįKūöńŠ˜_~ę3ē•ņ¤)SQA Œńī>§ČōU„†ĆŠYē4Z‡Q(Aó#C]=Ą{żį2sću“¼Xsō(¾ØI>)øķöŪyšĄ…ER·DkQ¢Ųc‰‰žŸ¾óŚLM¹Øø=2§š-ø’šų8SŸ’üIČIC‘'č1Ę"÷>a(uŠÅ•¦ż#C##ŅG‘#ĻSœs€EėnÄu.]~@‡ę“†…!üٱŁN;޵,r•ēt- Ž>‰U"£[Ń”žl”Źc*µšŲ»wļņ•£»>ūY%“DˆāĄ4Ŝ7Ų•'4,<¹į©‚łż*īČsMš¦Ęڼentt“ē¶)°eÓ&æoļ^„„čP¤Č )QqeA²@μöZްmÓ„¶žHģ987÷£T‚R*VŖj ÷>\VVĻ”W nŻźÄžżią\jŅ4ÕÅńtē,RZœShķ±VTŸ÷<žäśėÉĖō'ė<y3ń9ēž[D‹Ÿā‘<‘².“Öι Z½Z.ƒż*G©<żéy*DGj]EŃé@t³/”˜bą=/¾šĀåܝ—ó÷®Ī¾ü*6^?ū»ŠĢµ…ĘšēŽāŲ=Kš¶³<ĻU½nlŸCTś*Bnd쇖FkĀ,3„O 8ØP©B,ŅfŠ57 …*®4Em’BFĢg÷†Ž,“³A˜Åž‡.Š,Š…j÷ĖgęXkHÓ c,aŲŃBäk'&z|½ ÷vēNƤl><33³±ÕjE)•J„ʄeܽ{–X7óJ•kÆ8@±ė€‡µŻžŹRC“tĻ -ŹZŠ/WWĖYqŪ½§8MĢé…„*Rb F£Źkc,Ž7Iӄ$ɽsŽ4e/°xģ;’‰ W­× J=L£±ju„ D@Œµ® ™ååį¦(RiŅ4Dkƒ)Īåå tŁń¢®ßū¢®Æ81/]ŁēŠc;„ŠX«2ùā0Å<„ŒIŃŗŚZ[„ļ­•xļpNēÖ£Ż>lcʹĪLg›“‹O•ķ{ āčķ·Ū©ÉÉF23óšĮ#GŽžE0¦CUExß"Ļ›eĒ»ĒlĘå R#„ƹ„ĀóÕ­>—e5ĒJI¬mį}Š:ŰäyFF8×5"‹CS„Œ)=<„"Ā–³J“ēšN§I§s„G™xčŲ±q?Tƒ„>ESżĪńŪļ¼Ó½yÕŖ$yXdŁæ’bß¾Īś‘‘ÓāJ„†Ö ČņćĒi&IĒ_GÖāø2•$ œcżŠPqĢmµZGŹcŚ$I‡(Ŗ–~…äłqŅŌ ”Cėˆ0ĀŚ¢ā»Ųų,Y–†A)Ž)]ŻQ)ŠcĄ‘e-„®ŻnåĘ)5“off2‚½aL8­:sƆ}Žųź»}{ļ;vˆżēœ“®·Ót(bČYkt5s$Ļ… ĆLd™Ø ¹Lė<}äkj­GLšvu†8WŹ c”׌Ź,[AtB!Ž)ē2ć}`ŒQZŹP†aŠ“ÖĒĪe. ­ö> ĖŚ‰RB'EĘBk)Ė"”TG”8k£Ü{YŪI«ÕéČŚģ@§“m9tȊķŪ{|‚'–_Ū·Ė;@n“ū[-iŽ÷ŒŽ’5›~ljŹļ*##āČīŻnė¼éµkjJ®ŃA’H72ā»Fˆ¬Tо83y¶n]Ļ“›šņlŚäٳG°i“ßµgŲ²i“æćĪ;‹óǁ½÷ݧōА0ĒūŃuėüžVKšµk½>|XlÜøŃpēŽeĪ„/­AæčēDōŽū?Ū·o—ŻßŪ·o—KŻ’hūµų=÷¹§p §p §p §p ’%š’‡­·ķ:IIEND®B`‚libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-proxy/mount-origin/index.html000066400000000000000000000006241357643561300336330ustar00rootroot00000000000000
Hello from the minimal https server example.
You can confirm the 404 page handler by going to this nonexistant page.
libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-smp/000077500000000000000000000000001357643561300266235ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-smp/CMakeLists.txt000066400000000000000000000045411357643561300313670ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckIncludeFile) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-smp) set(SRCS minimal-http-server-smp.c) MACRO(require_pthreads result) CHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H) if (NOT LWS_HAVE_PTHREAD_H) if (LWS_WITH_MINIMAL_EXAMPLES) set(result 0) else() message(FATAL_ERROR "threading support requires pthreads") endif() endif() ENDMACRO() # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared pthread) add_dependencies(${SAMP} websockets_shared pthread) else() target_link_libraries(${SAMP} websockets pthread) endif() endif()libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-smp/README.md000066400000000000000000000023331357643561300301030ustar00rootroot00000000000000# lws minimal http server with multithreaded service Lws supports multithreaded service... build lws with `-DLWS_MAP_SMP=`, the default is 1. If nonzero, some extra pthreads locking is built into lws and it supports multiple independent service threads. ![lws-smp-overview](../../doc-assets/lws-smp-ov.png) When an incoming connection is accepted, it is bound to the pt with the lowest current wsi count, to keep the load on the threads balanced. Only the pt the wsi is bound to can service the thread, so although there can be as many wsi being serviced simultaneously as there are service threads, a wsi can only be service by the pt it is bound to. The effectiveness of the scalability depends on the load. Here is an example of roughly what can be expected ![lws-smp-example](../../doc-assets/lws-smp-example.png) ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-smp [2018/03/07 17:44:20:2409] USER: LWS minimal http server SMP | visit http://localhost:7681 [2018/03/07 17:44:20:2410] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on [2018/03/07 17:44:20:2411] NOTICE: Service threads: 10 ``` Visit http://localhost:7681 and use ab or other testing tools libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-smp/localhost-100y.cert000066400000000000000000000040721357643561300321640ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-smp/localhost-100y.key000066400000000000000000000063101357643561300320140ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-smp/minimal-http-server-smp.c000066400000000000000000000073521357643561300335020ustar00rootroot00000000000000/* * lws-minimal-http-server-smp * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal multithreaded http server you can make with lws. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. * * Also for simplicity the number of threads is set in the code... note that * the real number of threads possible is decided by the LWS_MAX_SMP that lws * was configured with, by default that is 1. Lws will limit the number of * requested threads to the number possible. */ #include #include #include #include #define COUNT_THREADS 8 static struct lws_context *context; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void *thread_service(void *threadid) { while (lws_service_tsi(context, 10000, (int)(lws_intptr_t)threadid) >= 0 && !interrupted) ; pthread_exit(NULL); return NULL; } void sigint_handler(int sig) { interrupted = 1; lws_cancel_service(context); } int main(int argc, const char **argv) { pthread_t pthread_service[COUNT_THREADS]; struct lws_context_creation_info info; void *retval; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server SMP | visit http://127.0.0.1:7681\n"); signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if ((p = lws_cmdline_option(argc, argv, "-t"))) { info.count_threads = atoi(p); if (info.count_threads < 1 || info.count_threads > LWS_MAX_SMP) return 1; } else info.count_threads = COUNT_THREADS; if (lws_cmdline_option(argc, argv, "-s")) { info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } lwsl_notice(" Service threads: %d\n", lws_get_count_threads(context)); /* start all the service threads */ for (n = 0; n < lws_get_count_threads(context); n++) if (pthread_create(&pthread_service[n], NULL, thread_service, (void *)(lws_intptr_t)n)) lwsl_err("Failed to start service thread\n"); /* wait for all the service threads to exit */ while ((--n) >= 0) pthread_join(pthread_service[n], &retval); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-smp/mount-origin/000077500000000000000000000000001357643561300312525ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-smp/mount-origin/favicon.ico000066400000000000000000000025761357643561300334050ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-smp/mount-origin/index.html000066400000000000000000000003711357643561300332500ustar00rootroot00000000000000
Hello from the minimal http server SMP example. libwebsockets.org-logo.svg000066400000000000000000001403321357643561300363030ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-smp/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-smp/mount-origin/strict-csp.svg000066400000000000000000000302361357643561300340720ustar00rootroot00000000000000 libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse-ring/000077500000000000000000000000001357643561300275535ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse-ring/CMakeLists.txt000066400000000000000000000045441357643561300323220ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckIncludeFile) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-sse-ring) set(SRCS minimal-http-server-sse-ring.c) MACRO(require_pthreads result) CHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H) if (NOT LWS_HAVE_PTHREAD_H) if (LWS_WITH_MINIMAL_EXAMPLES) set(result 0) else() message(FATAL_ERROR "threading support requires pthreads") endif() endif() ENDMACRO() # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared pthread) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets pthread) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse-ring/README.md000066400000000000000000000013561357643561300310370ustar00rootroot00000000000000# lws minimal http Server Side Events + ringbuffer This demonstates serving both normal content and content over Server Side Events, where all clients see the same data via a ringbuffer. Two separate threads generate content into the ringbuffer at random intervals. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-sse [2018/04/20 06:09:56:9974] USER: LWS minimal http Server-Side Events + ring | visit http://localhost:7681 [2018/04/20 06:09:57:0148] NOTICE: Creating Vhost 'default' port 7681, 2 protocols, IPv6 off ``` Visit http://localhost:7681, which connects back to the server using SSE and displays the incoming data. Connecting from multiple browsers shows the same content from the server ringbuffer. minimal-http-server-sse-ring.c000066400000000000000000000241571357643561300353050ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse-ring/* * lws-minimal-http-server-sse * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server that can serve both normal static * content and server-side event connections. * * To keep it simple, it serves the static stuff from the subdirectory * "./mount-origin" of the directory it was started in. * * You can change that by changing mount.origin below. */ #include #include #include #include #include #include /* one of these created for each message in the ringbuffer */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* * Unlike ws, http is a stateless protocol. This pss only exists for the * duration of a single http transaction. With http/1.1 keep-alive and http/2, * that is unrelated to (shorter than) the lifetime of the network connection. */ struct pss { struct pss *pss_list; struct lws *wsi; uint32_t tail; }; /* one of these is created for each vhost our protocol is used with */ struct vhd { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct pss *pss_list; /* linked-list of live pss*/ pthread_t pthread_spam[2]; pthread_mutex_t lock_ring; /* serialize access to the ring buffer */ struct lws_ring *ring; /* ringbuffer holding unsent messages */ char finished; }; static int interrupted; #if defined(WIN32) static void usleep(unsigned long l) { Sleep(l / 1000); } #endif /* destroys the message when everyone has had a copy of it */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } /* * This runs under the "spam thread" thread context only. * * We spawn two threads that generate messages with this. * */ static void * thread_spam(void *d) { struct vhd *vhd = (struct vhd *)d; struct msg amsg; int len = 128, index = 1, n; do { /* don't generate output if nobody connected */ if (!vhd->pss_list) goto wait; pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ /* only create if space in ringbuffer */ n = (int)lws_ring_get_count_free_elements(vhd->ring); if (!n) { lwsl_user("dropping!\n"); goto wait_unlock; } amsg.payload = malloc(len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); goto wait_unlock; } n = lws_snprintf((char *)amsg.payload, len, "%s: tid: %p, msg: %d", __func__, (void *)pthread_self(), index++); amsg.len = n; n = lws_ring_insert(vhd->ring, &amsg, 1); if (n != 1) { __minimal_destroy_message(&amsg); lwsl_user("dropping!\n"); } else /* * This will cause a LWS_CALLBACK_EVENT_WAIT_CANCELLED * in the lws service thread context. */ lws_cancel_service(vhd->context); wait_unlock: pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ wait: /* rand() would make more sense but coverity shrieks */ usleep(100000 + (time(NULL) & 0xffff)); } while (!vhd->finished); lwsl_notice("thread_spam %p exiting\n", (void *)pthread_self()); pthread_exit(NULL); return NULL; } static int callback_sse(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; struct vhd *vhd = (struct vhd *)lws_protocol_vh_priv_get( lws_get_vhost(wsi), lws_get_protocol(wsi)); uint8_t buf[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; const struct msg *pmsg; void *retval; int n; switch (reason) { /* --- vhost protocol lifecycle --- */ case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); vhd->ring = lws_ring_create(sizeof(struct msg), 8, __minimal_destroy_message); if (!vhd->ring) return 1; pthread_mutex_init(&vhd->lock_ring, NULL); /* start the content-creating threads */ for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (pthread_create(&vhd->pthread_spam[n], NULL, thread_spam, vhd)) { lwsl_err("thread creation failed\n"); goto init_fail; } return 0; case LWS_CALLBACK_PROTOCOL_DESTROY: init_fail: vhd->finished = 1; for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (vhd->pthread_spam[n]) pthread_join(vhd->pthread_spam[n], &retval); if (vhd->ring) lws_ring_destroy(vhd->ring); pthread_mutex_destroy(&vhd->lock_ring); return 0; /* --- http connection lifecycle --- */ case LWS_CALLBACK_HTTP: /* * `in` contains the url part after our mountpoint /sse, if any * you can use this to determine what data to return and store * that in the pss */ lwsl_info("%s: LWS_CALLBACK_HTTP: '%s'\n", __func__, (const char *)in); /* SSE requires a http OK response with this content-type */ if (lws_add_http_common_headers(wsi, HTTP_STATUS_OK, "text/event-stream", LWS_ILLEGAL_HTTP_CONTENT_LEN, &p, end)) return 1; if (lws_finalize_write_http_header(wsi, start, &p, end)) return 1; /* add ourselves to the list of live pss held in the vhd */ lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); pss->tail = lws_ring_get_oldest_tail(vhd->ring); pss->wsi = wsi; /* * This tells lws we are no longer a normal http stream, * but are an "immortal" (plus or minus whatever timeout you * set on it afterwards) SSE stream. In http/2 case that also * stops idle timeouts being applied to the network connection * while this wsi is still open. */ lws_http_mark_sse(wsi); /* write the body separately */ lws_callback_on_writable(wsi); return 0; case LWS_CALLBACK_CLOSED_HTTP: /* remove our closing pss from the list of live pss */ lws_ll_fwd_remove(struct pss, pss_list, pss, vhd->pss_list); return 0; /* --- data transfer --- */ case LWS_CALLBACK_HTTP_WRITEABLE: lwsl_info("%s: LWS_CALLBACK_HTTP_WRITEABLE\n", __func__); pmsg = lws_ring_get_element(vhd->ring, &pss->tail); if (!pmsg) break; p += lws_snprintf((char *)p, end - p, "data: %s\x0d\x0a\x0d\x0a", (const char *)pmsg->payload); if (lws_write(wsi, (uint8_t *)start, lws_ptr_diff(p, start), LWS_WRITE_HTTP) != lws_ptr_diff(p, start)) return 1; lws_ring_consume_and_update_oldest_tail( vhd->ring, /* lws_ring object */ struct pss, /* type of objects with tails */ &pss->tail, /* tail of guy doing the consuming */ 1, /* number of payload objects being consumed */ vhd->pss_list, /* head of list of objects with tails */ tail, /* member name of tail in objects with tails */ pss_list /* member name of next object in objects with tails */ ); if (lws_ring_get_element(vhd->ring, &pss->tail)) /* come back as soon as we can write more */ lws_callback_on_writable(pss->wsi); return 0; case LWS_CALLBACK_EVENT_WAIT_CANCELLED: if (!vhd) break; /* * let everybody know we want to write something on them * as soon as they are ready */ lws_start_foreach_llp(struct pss **, ppss, vhd->pss_list) { lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0 }, { "sse", callback_sse, sizeof(struct pss), 0 }, { NULL, NULL, 0, 0 } /* terminator */ }; /* override the default mount for /sse in the URL space */ static const struct lws_http_mount mount_sse = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/sse", /* mountpoint URL */ /* .origin */ NULL, /* protocol */ /* .def */ NULL, /* .protocol */ "sse", /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_CALLBACK, /* dynamic */ /* .mountpoint_len */ 4, /* char count */ /* .basic_auth_login_file */ NULL, }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ &mount_sse, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http Server-Side Events + ring | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.mounts = &mount; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse-ring/mount-origin/000077500000000000000000000000001357643561300322025ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse-ring/mount-origin/404.html000066400000000000000000000002271357643561300334000ustar00rootroot00000000000000

404

Sorry, that file doesn't exist. example.js000066400000000000000000000015001357643561300341100ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse-ring/mount-origindocument.addEventListener("DOMContentLoaded", function() { var head = 0, tail = 0, ring = new Array(); es = new EventSource("/sse/sourcename"); try { es.onopen = function() { // console.log("EventSource opened"); document.getElementById("r").disabled = 0; }; es.onmessage = function got_packet(msg) { var n, s = ""; // console.log(msg.data); ring[head] = msg.data + "\n"; head = (head + 1) % 50; if (tail === head) tail = (tail + 1) % 50; n = tail; do { s = s + ring[n]; n = (n + 1) % 50; } while (n !== head); document.getElementById("r").value = s; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; /* there is no onclose() for EventSource */ } catch(exception) { alert("

Error " + exception); } }, false); favicon.ico000066400000000000000000000025761357643561300342560ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse-ring/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000013141357643561300341170ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse-ring/mount-origin
Hello from the minimal http Server Side Events + Ring example.

This is a static page served from ./mount-origin/index.html.

It connects back to the server at /sse/sourcename using EventSource()
and displays the perioding incoming event data below.

The data is being produced by two asynchronous threads at the server, which each sleep for a random period inbetween samples.


libwebsockets.org-logo.svg000066400000000000000000001403321357643561300372330ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse-ring/mount-origin strict-csp.svg000066400000000000000000000302361357643561300347430ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse-ring/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse/000077500000000000000000000000001357643561300266165ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse/CMakeLists.txt000066400000000000000000000040131357643561300313540ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-sse) set(SRCS minimal-http-server-sse.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse/README.md000066400000000000000000000012011357643561300300670ustar00rootroot00000000000000# lws minimal http Server Side Events This demonstates serving both normal content and content over Server Side Events. ## build ``` $ cmake . && make ``` ## usage You can give -s to listen using https on port :443 ``` $ ./lws-minimal-http-server-sse [2018/04/20 06:09:56:9974] USER: LWS minimal http Server-Side Events | visit http://localhost:7681 [2018/04/20 06:09:57:0148] NOTICE: Creating Vhost 'default' port 7681, 2 protocols, IPv6 off ``` Visit http://localhost:7681, which connects back to the server using SSE and displays the incoming data. Connecting from multiple browsers shows content individual to the connection. libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse/localhost-100y.cert000066400000000000000000000040721357643561300321570ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse/localhost-100y.key000066400000000000000000000063101357643561300320070ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse/minimal-http-server-sse.c000066400000000000000000000136441357643561300334710ustar00rootroot00000000000000/* * lws-minimal-http-server-sse * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server that can serve both normal static * content and server-side event connections. * * To keep it simple, it serves the static stuff from the subdirectory * "./mount-origin" of the directory it was started in. * * You can change that by changing mount.origin below. */ #include #include #include #include #include /* * Unlike ws, http is a stateless protocol. This pss only exists for the * duration of a single http transaction. With http/1.1 keep-alive and http/2, * that is unrelated to (shorter than) the lifetime of the network connection. */ struct pss { time_t established; }; static int interrupted; #define SECS_REPORT 3 static int callback_sse(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; uint8_t buf[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; switch (reason) { case LWS_CALLBACK_HTTP: /* * `in` contains the url part after our mountpoint /sse, if any * you can use this to determine what data to return and store * that in the pss */ lwsl_notice("%s: LWS_CALLBACK_HTTP: '%s'\n", __func__, (const char *)in); pss->established = time(NULL); /* SSE requires a response with this content-type */ if (lws_add_http_common_headers(wsi, HTTP_STATUS_OK, "text/event-stream", LWS_ILLEGAL_HTTP_CONTENT_LEN, &p, end)) return 1; if (lws_finalize_write_http_header(wsi, start, &p, end)) return 1; /* * This tells lws we are no longer a normal http stream, * but are an "immortal" (plus or minus whatever timeout you * set on it afterwards) SSE stream. In http/2 case that also * stops idle timeouts being applied to the network connection * while this wsi is still open. */ lws_http_mark_sse(wsi); /* write the body separately */ lws_callback_on_writable(wsi); return 0; case LWS_CALLBACK_HTTP_WRITEABLE: lwsl_notice("%s: LWS_CALLBACK_HTTP_WRITEABLE\n", __func__); if (!pss) break; /* * to keep this demo as simple as possible, each client has his * own private data and timer. */ p += lws_snprintf((char *)p, end - p, "data: %llu\x0d\x0a\x0d\x0a", (unsigned long long)time(NULL) - pss->established); if (lws_write(wsi, (uint8_t *)start, lws_ptr_diff(p, start), LWS_WRITE_HTTP) != lws_ptr_diff(p, start)) return 1; lws_set_timer_usecs(wsi, SECS_REPORT * LWS_USEC_PER_SEC); return 0; case LWS_CALLBACK_TIMER: lwsl_notice("%s: LWS_CALLBACK_TIMER\n", __func__); lws_callback_on_writable(wsi); return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0 }, { "sse", callback_sse, sizeof(struct pss), 0 }, { NULL, NULL, 0, 0 } /* terminator */ }; /* override the default mount for /sse in the URL space */ static const struct lws_http_mount mount_sse = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/sse", /* mountpoint URL */ /* .origin */ NULL, /* protocol */ /* .def */ NULL, /* .protocol */ "sse", /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_CALLBACK, /* dynamic */ /* .mountpoint_len */ 4, /* char count */ /* .basic_auth_login_file */ NULL, }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ &mount_sse, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http Server-Side Events | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.protocols = protocols; info.mounts = &mount; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; info.port = 7681; if (lws_cmdline_option(argc, argv, "-s")) { info.port = 443; info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse/mount-origin/000077500000000000000000000000001357643561300312455ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse/mount-origin/404.html000066400000000000000000000002271357643561300324430ustar00rootroot00000000000000

404

Sorry, that file doesn't exist. libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse/mount-origin/example.js000066400000000000000000000014761357643561300332460ustar00rootroot00000000000000document.addEventListener("DOMContentLoaded", function() { var head = 0, tail = 0, ring = new Array(); es = new EventSource("/sse/sourcename"); try { es.onopen = function() { // console.log("EventSource opened"); document.getElementById("r").disabled = 0; }; es.onmessage = function got_packet(msg) { var n, s = ""; // console.log(msg.data); ring[head] = msg.data + "\n"; head = (head + 1) % 50; if (tail === head) tail = (tail + 1) % 50; n = tail; do { s = s + ring[n]; n = (n + 1) % 50; } while (n !== head); document.getElementById("r").value = s; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; /* there is no onclose() for EventSource */ } catch(exception) { alert("

Error" + exception); } }, false); libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse/mount-origin/favicon.ico000066400000000000000000000025761357643561300334000ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse/mount-origin/index.html000066400000000000000000000010741357643561300332440ustar00rootroot00000000000000
Hello from the minimal http Server Side Events example.

This is a static page served from ./mount-origin/index.html.

It connects back to the server at /sse/sourcename using EventSource()
and displays the periodic incoming event data below.


libwebsockets.org-logo.svg000066400000000000000000001403321357643561300362760ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-sse/mount-origin/strict-csp.svg000066400000000000000000000302361357643561300340650ustar00rootroot00000000000000 libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-80/000077500000000000000000000000001357643561300270535ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-80/CMakeLists.txt000066400000000000000000000041101357643561300316070ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-tls-80) set(SRCS minimal-http-server-tls-80.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) require_lws_config(LWS_OPENSSL_SUPPORT 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-80/README.md000066400000000000000000000053261357643561300303400ustar00rootroot00000000000000# lws minimal http server with tls and port 80 redirect ## build ``` $ cmake . && make ``` ## usage Because this listens on low ports (80 + 443), it must be run as root. ``` $ sudo ./lws-minimal-http-server-tls-80 [2018/03/20 13:23:13:0131] USER: LWS minimal http server TLS | visit https://localhost:7681 [2018/03/20 13:23:13:0142] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/20 13:23:13:0142] NOTICE: Using SSL mode [2018/03/20 13:23:13:0146] NOTICE: SSL ECDH curve 'prime256v1' [2018/03/20 13:23:13:0146] NOTICE: HTTP2 / ALPN enabled [2018/03/20 13:23:13:0195] NOTICE: lws_tls_client_create_vhost_context: doing cert filepath localhost-100y.cert [2018/03/20 13:23:13:0195] NOTICE: Loaded client cert localhost-100y.cert [2018/03/20 13:23:13:0195] NOTICE: lws_tls_client_create_vhost_context: doing private key filepath [2018/03/20 13:23:13:0196] NOTICE: Loaded client cert private key localhost-100y.key [2018/03/20 13:23:13:0196] NOTICE: created client ssl context for default [2018/03/20 13:23:14:0207] NOTICE: vhost default: cert expiry: 730459d ``` Visit http://localhost This will go first to port 80 using http, where it will be redirected to https and port 443 ``` 07:41:48.596918 IP localhost.http > localhost.52662: Flags [P.], seq 1:100, ack 416, win 350, options [nop,nop,TS val 3906619933 ecr 3906619933], length 99: HTTP: HTTP/1.1 301 Redirect 0x0000: 4500 0097 3f8f 4000 4006 fccf 7f00 0001 E...?.@.@....... 0x0010: 7f00 0001 0050 cdb6 6601 dfa7 922a 4c06 .....P..f....*L. 0x0020: 8018 015e fe8b 0000 0101 080a e8da 4a1d ...^..........J. 0x0030: e8da 4a1d 4854 5450 2f31 2e31 2033 3031 ..J.HTTP/1.1.301 0x0040: 2052 6564 6972 6563 740d 0a6c 6f63 6174 .Redirect..locat 0x0050: 696f 6e3a 2068 7474 7073 3a2f 2f6c 6f63 ion:.https://loc 0x0060: 616c 686f 7374 2f0d 0a63 6f6e 7465 6e74 alhost/..content 0x0070: 2d74 7970 653a 2074 6578 742f 6874 6d6c -type:.text/html 0x0080: 0d0a 636f 6e74 656e 742d 6c65 6e67 7468 ..content-length 0x0090: 3a20 300d 0a0d 0a ``` Because :443 uses a selfsigned certificate, you will have to make an exception for it in your browser. ## Certificate creation The selfsigned certs provided were created with ``` echo -e "GB\nErewhon\nAll around\nlibwebsockets-test\n\nlocalhost\nnone@invalid.org\n" | openssl req -new -newkey rsa:4096 -days 36500 -nodes -x509 -keyout "localhost-100y.key" -out "localhost-100y.cert" ``` they cover "localhost" and last 100 years from 2018-03-20. You can replace them with commercial certificates matching your hostname. ## HTTP/2 If you built lws with `-DLWS_WITH_HTTP2=1` at cmake, this simple server is also http/2 capable out of the box. If the index.html was loaded over http/2, it will display an HTTP 2 png. libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-80/localhost-100y.cert000066400000000000000000000040721357643561300324140ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-80/localhost-100y.key000066400000000000000000000063101357643561300322440ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-tls-80.c000066400000000000000000000074731357643561300341070ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-80/* * lws-minimal-http-server-tls-80 * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws, * with three extra lines giving it tls (ssl) capabilities, which in * turn allow operation with HTTP/2 if lws was configured for it. * * In addition, it runs a vhost on port 80 with the job of redirecting * and upgrading http clients that came in on port 80 to https on port 443. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * * You can change that by changing mount.origin below. */ #include #include #include static int interrupted; static const struct lws_http_mount mount80 = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "localhost/", /* .def */ "/", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_REDIR_HTTPS, /* https redir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server TLS + 80 | visit https://localhost\n"); lwsl_user(" Run as ROOT so can listen on 443\n"); signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } info.port = 80; info.mounts = &mount80; info.vhost_name = "localhost80"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create tls vhost\n"); goto bail; } info.port = 443; info.mounts = &mount; info.error_document_404 = "/404.html"; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; info.vhost_name = "localhost"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create tls vhost\n"); goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-80/mount-origin/000077500000000000000000000000001357643561300315025ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-80/mount-origin/404.html000066400000000000000000000004261357643561300327010ustar00rootroot00000000000000

404

Sorry, that file doesn't exist. libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-80/mount-origin/example.js000066400000000000000000000012511357643561300334720ustar00rootroot00000000000000document.addEventListener("DOMContentLoaded", function() { var transport_protocol = ""; if (performance && performance.timing.nextHopProtocol) { transport_protocol = performance.timing.nextHopProtocol; } else if (window.chrome && window.chrome.loadTimes) { transport_protocol = window.chrome.loadTimes().connectionInfo; } else { var p = performance.getEntriesByType("resource"); for (var i = 0; i < p.length; i++) { var value = "nextHopProtocol" in p[i]; if (value) transport_protocol = p[i].nextHopProtocol; } } if (transport_protocol === "h2") document.getElementById("transport").innerHTML = ""; }, false); libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-80/mount-origin/favicon.ico000066400000000000000000000025761357643561300336350ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-80/mount-origin/http2.png000066400000000000000000000166131357643561300332600ustar00rootroot00000000000000‰PNG  IHDR@qeO„Ö pHYsCC,ę·ētEXtSoftwarewww.inkscape.org›ī<IDATxœķœ{”žU}ļ?ūņ\ŽĖd2!!!@ˆ:Ķ1Cė… ˆZ ļ§.EcO½j„zŖmķQj»°ķ$­ÖćŖÖ„e)еœ.XWµŠ*„F«Ų(1š ™dBfęĶ{y.ūržxžwnļ;™,Īj¾k͚™żüžēŁū÷ģ½÷ §p §p §p §p §š_b9ļ½Ų±cĒ,ķųų8;wīŪŹ’ļŲ½[lówģŽ-¶ŽyÖ¬»öģ[FFÜĪyĻŪ¶m›gĒóļŲś’—Ąž=bošJFG­T,““žŻ»}łbß„ķög¼hŸ{ĮĪ¢ū¾Ż»wūńńq/„š,%ą½ģÜ)÷·ZA”e2 CWQJ©<—2ŠÄdšśµRŖf­&E§#d’54¤l»Öf¹Rašē¢ĒIÓ_QŹ5£”!‘I§£”s “RER:!e @8'­µ&TŖŃt.Y”µ{°IāOņÓy.kCC¦jE£(k„UŹuǐ­XaŻÄDņƒuė̶mŪ\?Fōe€qĒķ·«_žÅ/*YµŗRv:CV)ćņ<ŌR†6MµUJ[Øy.}Yom,Y!¤¬;Ą įźB„Mļ3å}‚RŲM½¢°“¦Y½VSi§³Z z!œBäĪéż ©u3—ņēŽ˜‰)hoyĒ;Ģb&ōgĄöķ’±±čH»½>˲M&ĖĪ>-ŽW 8—SÆ×P*<ĪY‚@!„Ą{O ”µ@© R ¬Ķ‘2Bʹ(å±Vļ5RfX[|9­«(‘ē)BXŅ“M§Ó$Ļćœ”ÕŹØ×k“įœÅū€Zm­C¼ļIbš>&MŪ>ü‹@ėļW¢hļŹ›āā‹Ķü±ź~_×gس’dČdŁęÕ•ŹłńʍgQ­ŽE’ pHéĆ:R*œóx/Ńŗų-„B‹Ru¼·@„sŗ\W)` ö ‡Rē$ŽĖŁ6)Œ18—#D†sMŒÉqĪ eŽ”1Ī8—U¬³Ićœ%Ir²,#Ig„©9ŠlīC©+÷ģiyļÅüYŠĆ¼gĖĪb2MWäƌĘk֜ɹšF¢h5q„$RJ@Ŗüŗ!BtŸS Ö{‰µA9p0¦`āģkR ŒhķqĪE!Ī„0Q“ƒ£;ē4Ž+¤ōX[ōĒZƒ9R¶€P®\9%¦§G•1?gd¤gĘ÷2 D;I¬Kµ:D®Aė5H#„BJ‰” 8Wtŗ@÷+z„@ń[)A¹ŁEŻNtļéŽļ CˆņŁļ!<Ö:œó(%f TA!˜]JåT*R&Ōė5/„ńÖz&&cĄžVKā\¤ĆŠE­”Ŗ– „”B)(Ö0³_½h+jm·ĆąÜ”Å’ŌšdĮÜĖ :÷s}S ¬u%c¤¦ *QDcŗĻōXK9;Aą"ÉĄ­õw‘-Ė!0Ÿü¤*•Ō;gšŽP©0ū…”’’āå_~šƒ<ėÜså_łŠŸ\²é9ĻGåSż(ÓiŹUų@?Ͼķ×_łJź+Wrżõ×÷\›’ĻUļ}Æ8ļĀ Å[.æœC‡ͶŒŒš’æ˜W^ɳ6mņå*–ÖēņŠŹ įĪīӁ¾3`4ŠÜ0Ģl§“£µGK:¼h-:SSS4Žgö+—Ģ›žžfjjŠ4ĻIJŗ”Õn#ƒ`YŗNšŠééi:„‚Õ«W099É-·ŽŹ7o»’Ę7Äęg<ƗĖT‘e‚8Žā0 [IéZm€%ą=ūÆ»N‘$Cu„Ö&Hiń^~8f÷‚īß]ĮŪ~ó7yĶĖ^B`…`Ó¹ēšƽ–]TLĘZ­†”’?ū£?ą¾ūļ絯=÷Žy'§­Z_śöļ~€(Š8²oxĻæ~ļ{¼źµÆeff†}ę3|ŗčO±Īłé4mT‡†š­éi»<€hõjiÖµ8ސ2œŻŻ‹ĶmĮ {2ļŚšš0ĆĆĆ̾g¬[Ēӟö“äkŹ/z¬Łœm;ēœs8}͚%Ÿ¼ą‚ xłĖ_Ī 7ÜĄīūļ/Ś•rYęHÓć‘RM:öcĒģØX8 ś2@NM ­”±Ž{„PHYˆ¤ņ„]“ŪmvŻw߂Ncüæ$–ŗ¶˜ĮĖA)<@½Vc^m)9“Qź˜ŃŚló‹ŸŲBå¹Ī…Q„aŒ÷Ž+mL÷ļŁĆłĻžņ|<čĆē÷žĒŠītøé–[øūī»xÅ„—ā“ųX!rœóĀūĢf™ßY«Įœųś1ąŽ;d^©DY£Q;])÷²TjzÖOEœ¹~ż‚>šĄXŪCzR‘e¾š… Ś.Łŗ•w_qEw™Œ…BSÕĆĆrۚ5]½”æ&čA09éÓ45U„Zkӊm¼·(%°V ēnŪ¼™ļß}÷=ąō³Ībrrņ‰;Pˆł‹ž’|“Ölܰ—^|1’ć²ĖPB:÷)=Žœ3BZģžœ”Ž{+ęͪްfØG‘m>l‡½—d€#Ļ%aø¤]żd" Cīŗķ¶Bóƒā·sÅĄ½„āeQ*%ĻS)e–g™ėtzśæ` ąŁŗÕ9pĄćœ”ҁFŹ`V}Ŗb”8.žŃ:4ÖĘÕ8®īMÓ‘ÕÓ°cĒĘŖU†!©µfÖLõ=čS…¦š¾J…^ˆµćĒulŒœļŁ‚>K`||ÜóµÆłģȁēŽ[„š(åž¶aƒæō×~MŒ>ć ovŽæčEĢ4¬?ćŒ—„÷\zÉ%œvŚiKö}E­VŠyO† ®¾j—^r a×vč@ Å„(E”*}Z”“”į™gÅų¶m~ūöķóˆ{˜ēŁ;ć“Ń83ʲ­gž…¬]{>ZŸÖu” ˆ¢b­ĘĻ`ņś‰Bw($'M}éKheæąČ‘ķæ÷Ž„^’®®Õ8kŪ¶d¾? W‚dbĀiļm†ŠBddaK{ü©‹łĀŚBzļ¬R.Čs§¦¦–·ą£Č„|¶©pw-­ö>UPx†<…OAb­DJ9Qb­īd™]<[{Fä]€Cßń>+}׳/zŖ£š9F14E5ƔķYó½ŸŌ{¶ŒŒˆŠŚhDė:APÅūbיSxžźKĮ£”4Z‹¶1¹P*Ż»w/Ž/ģz—X«%sctT«i” š>,ļė†ēóœģē?'č!ņƒq>/V™Z¹µjśŒ3ˆŸżldį€yōPŖŠēö­ćs<3& ¼7“QäÄ Öąa„T’$]äQŹ”»ķÜŻ0"¹ļ>7ßLė;ß!łĮpĪņƒŠšų¼óŗäF~ė·ĪīēĒYÖ®łī~UC™÷-Ēvˆ ]aīu=ٱCUAÖ!,°»ņ·\«Åō—¾Ä±k®!żÉOļ|ʐÜ{/ɽ÷rä#!|Å+Ų°cqéL9!ę÷©p‹Å”]–å€crņÄŖ0ć愍†Bˆ•„a čśż»;l’w§)\}5?Ū¼™CļyĻcü"ēȒ韸’Ā Łżśž‰0·7y¼‘cL µī;e{°cCJ9éœAėŸ/D7Š#śMżÖæü {/ø€‰÷æsōč£åŠĪį?žqī|Žó°ķörä]&ŲīßRŹŠćwMMI)}ūL kL„tieYœ›»Ń˜bGĢs_uū_łJ²Ÿżģ±īQ`õO~ĀWĘĘH–bB”wc…ųRq.„ŖŒŒōLį¾ XQDnR:Ę“ŹŒ.7ŗĘ-·pōŸXr?x"°éČ®}į {ÄYœ“h­B„a„Ŗ”ƒž¾öŪ|:Į"0"„²Ž›2ę.Źé椠FFXóÉOņ¶zļv_¹ńFīśÖ·ųõW½ją=ż‚ 8żC˜~-pß8×°ŲL/ee yžeŠz]ūE¾ĶŒ2ŠD»ÓY9†UāxBTqNHŲšÖ·ņŸł ?øēžG5šłxĘ»ŽE>44­&x`®”+¦»Ź[‘^“GJ…6 ķīf³Ēš]rŃ)­£ ^A©bo Sŗ˜NȄ7¼īuœuę™  „Ö¬zéK¦wIBš¦s ŽŒčŚÖŚNžŪ0Ė\gjŹ/–½K­–0E`1,“ ,ŽēĖĶ€“…xÓ¦i;@Ņe@©ŸĢ¢›œ%e;¶ō¹æw Œ{«µ —Rd„Vµ“Č<ÉÕź@thÕ®eNSu(e±6Da[d¬Į ĘPnŒÕZ%I:8—ĪŅ>IĮsäČ@t‡ØZ%z4Ü")K)C…u­WÄBÄūĆP-^ĮżUį0t™”¼÷(UB¤œKO›Ė {B`&&¢{ŲøaĆ\ĆBMŠkeØTą!޲lłŠŖ°ö>BˆBł ‚9qų$ ݳg ŗū€_³šŠ%Päxo‡1IÓŚD:—Ł‘‘Į!U©ÖåyŠ1-ņÜĶfr>Į¦Æ™˜ ™Ÿur|ø`±R$T:“Nńސē@<«Ļ3ś*BĪūV’e Žž“ł¦šāŻö$¢ło Ää6p/š«/xĮ\ćÜL°@Ž÷-¼÷6˼ɲüGI²üčfŽ+cōt–u°¶C‘‚ś¤L’Ę?žć@tßź«Vqхö'ĀQäfåa(į½\Ń'u„ļˆff“‚ØÖõ ‚ė‰ >KĮLLŠüēˆöą5Æ~5Z/’ĪÅ>„ń>Fˆ„bĄ )Åʵk—×ļŁ±6y®b„B” ‚R#~#ĮS÷wxc–„;Ü ¼ķ­o]x”H‘ó„ķ"D8Ž””Ź‘ļ?|xysxčŒ3„‡8·vmT©Ōč&/Kih‚'™>M™ŗīŗhožŪ3ŸÉ‹%JĶE ʛs¾™$ Ī%k5·¼OŠĪιÕT«u“ĮŚz yĀ>’Ōß’=y™ļw"ąVą]q‹Ć\eBG×u/)–‚WA ]éXŒlŁ“ÉRęBʜ””a”АRį}8» N2|’pōcˆö Y­ņ?ßüꮋ]†®0 W¤ DžŚĘxå}ˆµŠ"WP/H<:ÉÓ’Ųg?;Š×Ļ€k€w¾żķ¬,Sp{ś#„@Y*qt¼")ŻŽ>õ½ ˜œōa˜\Ź£¤é ֚2éHĢśObxÜ>Ģä‡?<ķ @³^ēO®¼ri¢ł)3E‚gT‹ćŲ(µbtŻŗTįmŪ|dm”u}6Ež¼€CW^‰™Y–®\ ¼ēŻļ^:znšcœxßi$I"ĖöÖė=Įž±Į¼V3NE×=kœd4o»ĘM7 Dū9ĄóŽ?ųƒŽ‹óŽ…Ö);“¶¬måyޘyč!·¼GØ¬Ī“AŠ ŻnŅ­‘ņ¤ŖĄ¶Ńąįßū½h®¶’éŸĪ¹Ąū”k uÓd‹ ×T;7é“īlqÅR°‘MŒiam^–æ™RĒV3—"÷1ń¾÷‘?ųą@“’Ųtī¹¼ėļXxa±6ZX¬Żś¢”N§M’4|µW¬YćxĶk³OMéÜt~üųŽO"D0³zĄćō’źW™žā¢ż:p—\ó·ŪĻńы";Ä£TŽÓ“ŪĒ…÷²11!YIb ¬‡Ą*eŽ43äy»¬Ą8)Ó?č!žīļD;Eńõß~łå¼`¹ŗ„ł³”p޼·äyx?-ŪmŃ-Ųž~ Q­¦ˆĻ\±b BŌ1¦B”U=.&ų<ēĄå—cyd śæ¢õėłČ ±‚"mÖē2’¤™¦iGH)V¬Yӕ'ö īܹSŚĘ¬¢RYA®Ā¹ ĘĢ„Č<ĘĶpāŹ+ißsĻ@“7ß‚k?õ©o|óQX¬Eu©”„T†@#Ļ%kֈe}‚»ĖZżĄ{I&e"“g˜łņ—9vķµŃ>B!ó_ł²— ž’¹JR÷“"ŽWcVÅŽ»''åņbC— ”°6„ȵ1e‚ŅcśņéīŻ<üūæ?-EPõœĶ›ł«>›Ö’˜_½Zų+H9D)Aī}Š™šZ^ ŒLNā„˜*KŌ›xļ‚ĒTäšMzĖ[p­Ö@ōØ×¹į _ ņX&„ cƒÖ‘²vJU†ÓT”"c“vCJey»Ż ČĪCc|ś;ĒĮßłҟžt ņ/·Į篹†s7oų5 PĢE± ¢hH*»<‡V®ģŃ{–Œ vœÓRŽ«²¾æX_Ž‹A7ĮĆŪ·ÓX*~æ?¤X÷ļļ{ŁvŁeŻÓ×*ó i„Ø!„VB”Tŗ¶ÓÉŚl«å•”­cŠņöŒGóåé/|£żč@“G’ ¼ųā‹łŠ¼jށ1Æv™Ā $š¾šg*VĆ0ҐļéaY’ø@­&„µ¢Ón?‚÷Ęų²~p /ß¾ūī7=C±éU6ląĖ’šØĒ©bŻŗ†b¹:ēyŽriŚ7Ķ“\`żztXk­'M›H)䝡,ĪöīåĮßų üüõšĄ‡’ŒcnŗžzVŸ –čQBPÄ2‚ KÉĘ )°¼1d;/Œ1-!’zqx‰ļ1<śŻ75ÅÆ=öŲ±ei[ĄŸߔ’뮾š-Ļ}īņĆZsuĆ¢ō ņ<—ÖZY«Ižö“ĮCcÖ9JE+B朞µ·ūI\»Ķƒo|ć@)³?Ž|oÕ*¾zóͼõMozt] Ż~Ü¢bdĪ)źŲ³głš!€©”µ(ŠF*•APGˆˆÅˆyšYĘCozķ²ˆłDų šĄsĪ;/żŁŸ±ņŠ!&Ž’~ÜņIŠKb䷛ʳžµ°±8˜Å†aģ\ló¼;€„k‡”P„öK’Ā0¦äby Ay—öŻ Ń[ĖĮ+®(bzĖ E”P|mõjN’ńiæīu<öaĻįKūöńŠ˜_~ę3ē•ņ¤)SQA Œńī>§ČōU„†ĆŠYē4Z‡Q(Aó#C]=Ą{żį2sću“¼Xsō(¾ØI>)øķöŪyšĄ…ER·DkQ¢Ųc‰‰žŸ¾óŚLM¹Øø=2§š-ø’šų8SŸ’üIČIC‘'č1Ę"÷>a(uŠÅ•¦ż#C##ŅG‘#ĻSœs€EėnÄu.]~@‡ę“†…!üٱŁN;޵,r•ēt- Ž>‰U"£[Ń”žl”Źc*µšŲ»wļņ•£»>ūY%“DˆāĄ4Ŝ7Ų•'4,<¹į©‚łż*īČsMš¦Ęڼentt“ē¶)°eÓ&æoļ^„„čP¤Č )QqeA²@μöZްmÓ„¶žHģ987÷£T‚R*VŖj ÷>\VVĻ”W nŻźÄžżią\jŅ4ÕÅńtē,RZœShķ±VTŸ÷<žäśėÉĖō'ė<y3ń9ēž[D‹Ÿā‘<‘².“Öι Z½Z.ƒż*G©<żéy*DGj]EŃé@t³/”˜bą=/¾šĀåܝ—ó÷®Ī¾ü*6^?ū»ŠĢµ…ĘšēŽāŲ=Kš¶³<ĻU½nlŸCTś*Bnd쇖FkĀ,3„O 8ØP©B,ŅfŠ57 …*®4Em’BFĢg÷†Ž,“³A˜Åž‡.Š,Š…j÷ĖgęXkHÓ c,aŲŃBäk'&z|½ ÷vēNƤl><33³±ÕjE)•J„ʄeܽ{–X7óJ•kÆ8@±ė€‡µŻžŹRC“tĻ -ŹZŠ/WWĖYqŪ½§8MĢé…„*Rb F£Źkc,Ž7Iӄ$ɽsŽ4e/°xģ;’‰ W­× J=L£±ju„ D@Œµ® ™ååį¦(RiŅ4Dkƒ)Īåå tŁń¢®ßū¢®Æ81/]ŁēŠc;„ŠX«2ùā0Å<„ŒIŃŗŚZ[„ļ­•xļpNēÖ£Ż>lcʹĪLg›“‹O•ķ{ āčķ·Ū©ÉÉF23óšĮ#GŽžE0¦CUExß"Ļ›eĒ»ĒlĘå R#„ƹ„ĀóÕ­>—e5ĒJI¬mį}Š:ŰäyFF8×5"‹CS„Œ)=<„"Ā–³J“ēšN§I§s„G™xčŲ±q?Tƒ„>ESżĪńŪļ¼Ó½yÕŖ$yXdŁæ’bß¾Īś‘‘ÓāJ„†Ö ČņćĒi&IĒ_GÖāø2•$ œcżŠPqĢmµZGŹcŚ$I‡(Ŗ–~…äłqŅŌ ”Cėˆ0ĀŚ¢ā»Ųų,Y–†A)Ž)]ŻQ)ŠcĄ‘e-„®ŻnåĘ)5“off2‚½aL8­:sƆ}Žųź»}{ļ;vˆżēœ“®·Ót(bČYkt5s$Ļ… ĆLd™Ø ¹Lė<}äkj­GLšvu†8WŹ c”׌Ź,[AtB!Ž)ē2ć}`ŒQZŹP†aŠ“ÖĒĪe. ­ö> ĖŚ‰RB'EĘBk)Ė"”TG”8k£Ü{YŪI«ÕéČŚģ@§“m9tȊķŪ{|‚'–_Ū·Ė;@n“ū[-iŽ÷ŒŽ’5›~ljŹļ*##āČīŻnė¼éµkjJ®ŃA’H72ā»Fˆ¬Tо83y¶n]Ļ“›šņlŚäٳG°i“ßµgŲ²i“æćĪ;‹óǁ½÷ݧōА0ĒūŃuėüžVKšµk½>|XlÜøŃpēŽeĪ„/­AæčēDōŽū?Ū·o—ŻßŪ·o—KŻ’hūµų=÷¹§p §p §p §p ’%š’‡­·ķ:IIEND®B`‚libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-80/mount-origin/index.html000066400000000000000000000006601357643561300335010ustar00rootroot00000000000000
Hello from the minimal https server example.
You can confirm the 404 page handler by going to this nonexistant page.
libwebsockets.org-logo.svg000066400000000000000000001403321357643561300365330ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-80/mount-origin strict-csp.svg000066400000000000000000000302361357643561300342430ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-80/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-mem/000077500000000000000000000000001357643561300274025ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-mem/CMakeLists.txt000066400000000000000000000041121357643561300321400ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-tls-mem) set(SRCS minimal-http-server-tls-mem.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) require_lws_config(LWS_OPENSSL_SUPPORT 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-mem/README.md000066400000000000000000000045261357643561300306700ustar00rootroot00000000000000# lws minimal http server with tls and certs from memory This is the same as the minimal-http-server-tls example, but shows how to init the vhost with both PEM or DER certs from memory instead of files. The server listens on port 7681 (initialized with PEM in-memory certs) and port 7682 (initialized with DER in-memory certs). ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-tls-mem [2019/02/14 14:46:40:9783] USER: LWS minimal http server TLS | visit https://localhost:7681 [2019/02/14 14:46:40:9784] NOTICE: Using SSL mode [2019/02/14 14:46:40:9784] NOTICE: lws_tls_server_vhost_backend_init: vh first: mem CA OK parsing as der [2019/02/14 14:46:40:9849] NOTICE: no client cert required [2019/02/14 14:46:40:9849] NOTICE: created client ssl context for first [2019/02/14 14:46:40:9849] NOTICE: Using SSL mode [2019/02/14 14:46:40:9850] NOTICE: lws_tls_server_vhost_backend_init: vh second: mem CA OK parsing as der [2019/02/14 14:46:40:9894] NOTICE: no client cert required [2019/02/14 14:46:40:9894] NOTICE: created client ssl context for second [2019/02/14 14:46:40:9894] NOTICE: vhost first: cert expiry: 36167d [2019/02/14 14:46:40:9894] NOTICE: vhost second: cert expiry: 36167d [2018/03/20 13:23:14:0207] NOTICE: vhost default: cert expiry: 730459d ``` Visit https://127.0.0.1:7681 and https://127.0.0.1:7682 Because it uses a selfsigned certificate, you will have to make an exception for it in your browser. ## Certificate creation The selfsigned certs provided were created with ``` echo -e "GB\nErewhon\nAll around\nlibwebsockets-test\n\nlocalhost\nnone@invalid.org\n" | openssl req -new -newkey rsa:4096 -days 36500 -nodes -x509 -keyout "localhost-100y.key" -out "localhost-100y.cert" ``` they cover "localhost" and last 100 years from 2018-03-20. You can replace them with commercial certificates matching your hostname. The der content was made from PEM like this ``` $ cat ../minimal-http-server-tls/localhost-100y.key | grep -v ^- | base64 -d | hexdump -C | tr -s ' ' | cut -d' ' -f2- | cut -d' ' -f-16 | sed "s/|.*//g" | sed "s/0000.*//g" | sed "s/^/0x/g" | sed "s/\ /\,\ 0x/g" | sed "s/\$/,/g" | sed "s/0x,//g" ``` ## HTTP/2 If you built lws with `-DLWS_WITH_HTTP2=1` at cmake, this simple server is also http/2 capable out of the box. If the index.html was loaded over http/2, it will display an HTTP 2 png. minimal-http-server-tls-mem.c000066400000000000000000001004101357643561300347460ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-mem/* * lws-minimal-http-server-tls * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws, * with three extra lines giving it tls (ssl) capabilities, which in * turn allow operation with HTTP/2 if lws was configured for it. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * * You can change that by changing mount.origin below. */ #include #include #include static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; /* the cert and key as PEM */ static const char *cert_pem = "-----BEGIN CERTIFICATE-----\n" "MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD\n" "VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb\n" "MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx\n" "HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3\n" "WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl\n" "d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0\n" "cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA\n" "aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW\n" "aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8\n" "Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek\n" "LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH\n" "KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6\n" "jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ\n" "Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz\n" "TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK\n" "Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0\n" "nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo\n" "GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p\n" "sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU\n" "9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar\n" "jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow\n" "YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA\n" "xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P\n" "wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34\n" "H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv\n" "xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk\n" "ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g\n" "1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA\n" "AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg\n" "mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s\n" "8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX\n" "e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE=\n" "-----END CERTIFICATE-----\n", *key_pem = "-----BEGIN PRIVATE KEY-----\n" "MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ\n" "PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK\n" "nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ\n" "toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU\n" "0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT\n" "J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS\n" "Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN\n" "uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9\n" "fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn\n" "zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au\n" "ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB\n" "QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f\n" "qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+\n" "vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9\n" "fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A\n" "Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT\n" "G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/\n" "HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8\n" "YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl\n" "xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs\n" "esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw\n" "zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz\n" "mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw\n" "au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77\n" "40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5\n" "YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH\n" "PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj\n" "W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR\n" "naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6\n" "2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m\n" "39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79\n" "J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC\n" "R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp\n" "Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh\n" "BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE\n" "fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ\n" "x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI\n" "UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM\n" "OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L\n" "65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A\n" "aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5\n" "SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S\n" "me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I\n" "G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK\n" "TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY\n" "56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2\n" "gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr\n" "Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E\n" "NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs\n" "fBrpEY1IATtPq1taBZZogRqI3rOkkPk=\n" "-----END PRIVATE KEY-----\n" ; static const uint8_t cert_der[] = { 0x30, 0x82, 0x05, 0xe6, 0x30, 0x82, 0x03, 0xce, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xda, 0xb9, 0xd0, 0x8b, 0xb0, 0x3c, 0x52, 0xa0, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x86, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x07, 0x45, 0x72, 0x65, 0x77, 0x68, 0x6f, 0x6e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x0a, 0x41, 0x6c, 0x6c, 0x20, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x12, 0x6c, 0x69, 0x62, 0x77, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2d, 0x74, 0x65, 0x73, 0x74, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x2e, 0x6f, 0x72, 0x67, 0x30, 0x20, 0x17, 0x0d, 0x31, 0x38, 0x30, 0x33, 0x32, 0x30, 0x30, 0x34, 0x31, 0x36, 0x30, 0x37, 0x5a, 0x18, 0x0f, 0x32, 0x31, 0x31, 0x38, 0x30, 0x32, 0x32, 0x34, 0x30, 0x34, 0x31, 0x36, 0x30, 0x37, 0x5a, 0x30, 0x81, 0x86, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x07, 0x45, 0x72, 0x65, 0x77, 0x68, 0x6f, 0x6e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x0a, 0x41, 0x6c, 0x6c, 0x20, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x12, 0x6c, 0x69, 0x62, 0x77, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2d, 0x74, 0x65, 0x73, 0x74, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x2e, 0x6f, 0x72, 0x67, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xa3, 0x62, 0xdb, 0x96, 0x68, 0x80, 0x82, 0x63, 0x4b, 0x49, 0x3e, 0xe6, 0xf1, 0xa4, 0x88, 0x08, 0x2f, 0xe5, 0x96, 0x9b, 0x3f, 0xdf, 0x98, 0xaf, 0x08, 0x42, 0xbd, 0x75, 0x5a, 0xd7, 0x9e, 0xeb, 0xf2, 0x14, 0xc9, 0x49, 0x68, 0xe4, 0x8e, 0xb4, 0xda, 0x6a, 0xb5, 0xa9, 0xc2, 0xe1, 0x4f, 0xf9, 0x26, 0xa6, 0x84, 0x7c, 0x0e, 0x2d, 0xc3, 0x02, 0x61, 0xca, 0x9d, 0x25, 0x9d, 0x3d, 0x6b, 0x67, 0xd4, 0x1b, 0x57, 0x2c, 0x4a, 0xcb, 0x95, 0x48, 0x87, 0x81, 0x90, 0xeb, 0x65, 0x62, 0x27, 0x98, 0x40, 0x63, 0x28, 0xcd, 0x43, 0x65, 0xff, 0x82, 0xbc, 0xd1, 0x99, 0xf8, 0x4c, 0xcf, 0x80, 0x1b, 0xf9, 0x9d, 0x37, 0xa4, 0x2d, 0x67, 0x1f, 0x23, 0x96, 0x59, 0xb6, 0x81, 0xae, 0x20, 0xfd, 0x43, 0x97, 0xf2, 0x24, 0x34, 0x3c, 0x3c, 0xcc, 0x5c, 0xf8, 0x72, 0x98, 0x8c, 0x7b, 0xf0, 0x45, 0x19, 0xe9, 0xb2, 0xc5, 0xd1, 0xe1, 0x2e, 0xb2, 0x87, 0x4a, 0x6f, 0x04, 0xa3, 0xe9, 0xd3, 0xef, 0x7e, 0x2d, 0x22, 0xd9, 0xc7, 0x29, 0x3f, 0xe6, 0xe8, 0x34, 0x94, 0xd3, 0x19, 0x59, 0xd7, 0x77, 0x7a, 0x7a, 0x12, 0xd1, 0x9b, 0xbf, 0xfe, 0x37, 0x1e, 0x3b, 0x33, 0x75, 0xcc, 0x4d, 0x11, 0xf9, 0xa8, 0xa3, 0xff, 0xed, 0x34, 0xc4, 0xda, 0xcd, 0x14, 0xeb, 0xe3, 0x34, 0xb6, 0xc1, 0x88, 0xdb, 0x3a, 0x51, 0x8b, 0xe9, 0xba, 0x8f, 0x38, 0x4d, 0xc8, 0xc0, 0x53, 0x27, 0x5b, 0xb9, 0xf2, 0xa0, 0x1e, 0xdd, 0x95, 0xb9, 0xff, 0xe6, 0x00, 0x8a, 0xe6, 0x58, 0x00, 0x1e, 0xa7, 0xe5, 0xb8, 0x54, 0xa7, 0x8a, 0x05, 0xb8, 0x1e, 0x70, 0x61, 0xb7, 0x01, 0xcb, 0x05, 0x51, 0xf2, 0xe8, 0xc8, 0x9e, 0x91, 0x7c, 0x6e, 0xe5, 0x90, 0x52, 0x3c, 0xb9, 0x37, 0xca, 0x52, 0x36, 0x9e, 0xec, 0xcd, 0xd6, 0x2c, 0x9c, 0xb2, 0x69, 0xbc, 0x07, 0x74, 0xb2, 0x26, 0xeb, 0x34, 0xf8, 0xc2, 0xd0, 0x54, 0x02, 0x36, 0xba, 0x4d, 0x8e, 0x02, 0x66, 0x20, 0xad, 0xfe, 0x98, 0xa9, 0x38, 0x91, 0x75, 0xfb, 0x65, 0x3c, 0x1e, 0x7e, 0x80, 0x33, 0x4c, 0xae, 0x25, 0xda, 0x91, 0xcd, 0xb8, 0x2e, 0x77, 0x41, 0x57, 0x3f, 0x10, 0x5f, 0xbe, 0x18, 0x12, 0xc0, 0xc6, 0x6b, 0xc2, 0x0e, 0xaf, 0x59, 0xa4, 0xc2, 0x18, 0x8b, 0xb3, 0xa6, 0xce, 0x49, 0x00, 0x28, 0xa0, 0xbd, 0x51, 0xee, 0x84, 0x7f, 0x6d, 0x7b, 0x2c, 0x54, 0x02, 0x14, 0x80, 0x4a, 0x23, 0x3b, 0xfd, 0x72, 0x08, 0xbd, 0x7f, 0x03, 0xcc, 0x2e, 0x1a, 0xca, 0x95, 0xea, 0x15, 0x44, 0xdb, 0x1e, 0x70, 0x1b, 0x02, 0x3f, 0x9e, 0xbd, 0x5a, 0x02, 0x57, 0x85, 0x49, 0xf0, 0x7f, 0x69, 0x68, 0x9f, 0x87, 0xc4, 0x66, 0xbd, 0xfe, 0xbd, 0x1b, 0x9c, 0xf6, 0xc8, 0x5f, 0xaa, 0x75, 0x74, 0x9c, 0xf3, 0x75, 0x20, 0xc4, 0xa7, 0xcd, 0x70, 0x9a, 0xb2, 0xde, 0xc8, 0xd9, 0xf8, 0xae, 0x45, 0x77, 0x48, 0xcf, 0xde, 0x8a, 0x8e, 0x51, 0x90, 0xa4, 0xfe, 0x17, 0x7c, 0xd5, 0x40, 0xf9, 0x11, 0x8b, 0xed, 0xa3, 0x27, 0x58, 0xe1, 0x48, 0x69, 0x5a, 0xca, 0x58, 0xbc, 0xc0, 0xb6, 0x0c, 0xe8, 0x18, 0xc4, 0xef, 0x3f, 0xf0, 0x2e, 0x7a, 0x12, 0x97, 0x9d, 0xc0, 0x49, 0x85, 0x8b, 0x56, 0xd2, 0x5b, 0x53, 0x8a, 0x85, 0x71, 0xfb, 0x9c, 0x93, 0x61, 0x20, 0x19, 0x5a, 0x5f, 0x88, 0xb2, 0xc9, 0x97, 0x8d, 0xe7, 0xf1, 0x26, 0xa6, 0x22, 0xdb, 0xfe, 0xd0, 0x5a, 0x6b, 0xf5, 0x40, 0x2f, 0x69, 0xb0, 0xd7, 0x23, 0x4c, 0xc6, 0x81, 0x40, 0xb3, 0x74, 0xdd, 0x3d, 0x50, 0x7a, 0x56, 0xec, 0xed, 0x8d, 0xbb, 0xb3, 0x17, 0x44, 0x9c, 0xd5, 0x2d, 0x87, 0x89, 0x08, 0xfb, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x53, 0x30, 0x51, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xf6, 0x66, 0x14, 0xdb, 0x7b, 0x56, 0xdb, 0x3b, 0x28, 0x9a, 0x42, 0x93, 0x01, 0x76, 0xab, 0x8e, 0xbd, 0xaf, 0x8e, 0xeb, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xf6, 0x66, 0x14, 0xdb, 0x7b, 0x56, 0xdb, 0x3b, 0x28, 0x9a, 0x42, 0x93, 0x01, 0x76, 0xab, 0x8e, 0xbd, 0xaf, 0x8e, 0xeb, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x36, 0x32, 0x01, 0x32, 0xba, 0x30, 0x60, 0xd0, 0x9b, 0x84, 0x02, 0x5d, 0x3f, 0xb7, 0x61, 0x96, 0x14, 0xf6, 0x45, 0x41, 0x51, 0x75, 0xe4, 0x54, 0x24, 0x3d, 0x08, 0xc6, 0xb1, 0xff, 0x86, 0x4b, 0xdb, 0xea, 0x6c, 0x87, 0x1e, 0x72, 0xbc, 0x9c, 0xe6, 0x1e, 0xcc, 0x53, 0xe3, 0x52, 0x59, 0x91, 0x29, 0x48, 0x0d, 0x10, 0x3b, 0x80, 0xc5, 0xb9, 0xd7, 0x67, 0x33, 0xdd, 0x09, 0x13, 0x55, 0xf5, 0x5d, 0xa6, 0x4a, 0x16, 0xd7, 0xbc, 0x2c, 0xa2, 0x0d, 0x8e, 0xd6, 0x09, 0x01, 0x36, 0x06, 0x7e, 0x38, 0xcf, 0x6e, 0x8e, 0xd2, 0xe5, 0x95, 0x93, 0xee, 0xc3, 0x34, 0xd2, 0xc7, 0xf4, 0x19, 0xe4, 0xc1, 0x4b, 0x4e, 0x9c, 0xcf, 0x4f, 0xc2, 0xd9, 0x83, 0xf6, 0x98, 0x56, 0x7b, 0x19, 0xb8, 0xab, 0x61, 0xa7, 0x4e, 0xc8, 0x8b, 0xe9, 0x49, 0x7a, 0x73, 0x2d, 0x10, 0x95, 0x32, 0x56, 0x29, 0x52, 0xc4, 0x51, 0x04, 0x3a, 0xc9, 0xd6, 0xb9, 0xf3, 0x67, 0xb6, 0xdc, 0x9d, 0x40, 0x5e, 0xab, 0x6a, 0x15, 0xca, 0x5f, 0xa0, 0x4d, 0xf8, 0x1f, 0x76, 0x9f, 0x12, 0x21, 0xb2, 0xf3, 0xcd, 0x9b, 0xf9, 0x90, 0x62, 0xc2, 0x47, 0x95, 0xfa, 0x8a, 0xba, 0x5d, 0x51, 0x7c, 0xb0, 0x5c, 0xab, 0xf7, 0x36, 0x2b, 0xbf, 0xd0, 0xaf, 0x59, 0x36, 0x25, 0x92, 0x94, 0xd0, 0x7c, 0xb4, 0xd9, 0x4a, 0xc8, 0x0f, 0x74, 0x41, 0xd8, 0x55, 0xc8, 0xef, 0xc5, 0x0d, 0x83, 0xf9, 0x7c, 0x83, 0x47, 0x46, 0x91, 0x2d, 0x19, 0x6f, 0xc5, 0x46, 0xbd, 0x74, 0x71, 0x85, 0x1c, 0xb2, 0x02, 0x1b, 0x7e, 0x09, 0xba, 0xae, 0x40, 0x8b, 0xa9, 0x4c, 0xd4, 0x4b, 0x28, 0x0f, 0xc1, 0xd2, 0xb0, 0x9a, 0x4c, 0x72, 0x6a, 0xc7, 0xec, 0xc5, 0xb0, 0xd9, 0xc2, 0xa4, 0xba, 0x30, 0xb7, 0xac, 0xc7, 0x45, 0x4e, 0xdb, 0x5e, 0xf3, 0x7c, 0x05, 0xd6, 0xeb, 0x85, 0xe0, 0x58, 0xd4, 0x0b, 0xbd, 0xbe, 0x4a, 0x67, 0x10, 0x37, 0xb0, 0x37, 0xf3, 0xa0, 0x42, 0xfe, 0x79, 0x36, 0x4d, 0x3b, 0x09, 0x6b, 0x04, 0xc3, 0xce, 0xac, 0x0e, 0xbb, 0xf5, 0x5d, 0x66, 0xfd, 0xa0, 0xd5, 0x6a, 0x53, 0x1e, 0x5b, 0xa6, 0x94, 0x29, 0x59, 0x78, 0xff, 0x86, 0xfe, 0x39, 0x12, 0xc8, 0x3c, 0x2a, 0x36, 0x74, 0xee, 0xd5, 0xaa, 0x1d, 0x0e, 0x65, 0x1a, 0xe3, 0x16, 0x68, 0x75, 0xf8, 0x4f, 0xd4, 0x75, 0x8f, 0xc1, 0x42, 0x85, 0x72, 0xaf, 0x28, 0x42, 0xbd, 0x78, 0xf1, 0x06, 0x00, 0x00, 0xe9, 0x5b, 0x50, 0xe2, 0x50, 0x53, 0xb4, 0x30, 0x45, 0x67, 0x75, 0x55, 0xb9, 0xf0, 0x84, 0x3b, 0x50, 0x59, 0x70, 0xbd, 0xd8, 0x0d, 0xb0, 0xd6, 0x7f, 0xf1, 0x91, 0x94, 0x91, 0xd4, 0x13, 0x3f, 0x35, 0x44, 0x83, 0x86, 0x40, 0x52, 0x51, 0x4d, 0x56, 0x8c, 0xc6, 0xd6, 0x83, 0xa1, 0xa0, 0x9a, 0x72, 0x19, 0x2d, 0x17, 0xab, 0x40, 0x2b, 0xb5, 0x3a, 0x8c, 0xeb, 0xf3, 0xba, 0xce, 0x42, 0xa4, 0x1a, 0x90, 0xf9, 0x32, 0xb7, 0xc0, 0x54, 0x48, 0xd2, 0xb7, 0x2b, 0x8d, 0xa3, 0xda, 0xa7, 0x1f, 0x84, 0x03, 0x8d, 0x75, 0x19, 0x7c, 0x1e, 0xaf, 0x10, 0xb3, 0x9a, 0x6e, 0xa7, 0x2f, 0xac, 0xf2, 0xc7, 0x42, 0x18, 0x39, 0x70, 0x47, 0x72, 0x4d, 0x08, 0xcb, 0xfa, 0xbb, 0x8f, 0x0e, 0x2b, 0xce, 0xc5, 0xe2, 0x67, 0x08, 0xc6, 0x19, 0x12, 0x79, 0xf1, 0x49, 0x50, 0x52, 0x08, 0xdb, 0x9a, 0x42, 0x18, 0xde, 0x56, 0xb4, 0x4e, 0x29, 0xe6, 0x5f, 0xbd, 0x72, 0x73, 0xb5, 0x1a, 0xb2, 0x17, 0x7b, 0x61, 0xe5, 0xff, 0xb3, 0x34, 0x73, 0xf9, 0x5b, 0x67, 0x81, 0x6f, 0x5e, 0x00, 0x11, 0x95, 0xec, 0x76, 0xae, 0x48, 0x12, 0xd0, 0xa6, 0xb4, 0xe8, 0x71, }, key_der[] = { 0x30, 0x82, 0x09, 0x43, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x09, 0x2d, 0x30, 0x82, 0x09, 0x29, 0x02, 0x01, 0x00, 0x02, 0x82, 0x02, 0x01, 0x00, 0xa3, 0x62, 0xdb, 0x96, 0x68, 0x80, 0x82, 0x63, 0x4b, 0x49, 0x3e, 0xe6, 0xf1, 0xa4, 0x88, 0x08, 0x2f, 0xe5, 0x96, 0x9b, 0x3f, 0xdf, 0x98, 0xaf, 0x08, 0x42, 0xbd, 0x75, 0x5a, 0xd7, 0x9e, 0xeb, 0xf2, 0x14, 0xc9, 0x49, 0x68, 0xe4, 0x8e, 0xb4, 0xda, 0x6a, 0xb5, 0xa9, 0xc2, 0xe1, 0x4f, 0xf9, 0x26, 0xa6, 0x84, 0x7c, 0x0e, 0x2d, 0xc3, 0x02, 0x61, 0xca, 0x9d, 0x25, 0x9d, 0x3d, 0x6b, 0x67, 0xd4, 0x1b, 0x57, 0x2c, 0x4a, 0xcb, 0x95, 0x48, 0x87, 0x81, 0x90, 0xeb, 0x65, 0x62, 0x27, 0x98, 0x40, 0x63, 0x28, 0xcd, 0x43, 0x65, 0xff, 0x82, 0xbc, 0xd1, 0x99, 0xf8, 0x4c, 0xcf, 0x80, 0x1b, 0xf9, 0x9d, 0x37, 0xa4, 0x2d, 0x67, 0x1f, 0x23, 0x96, 0x59, 0xb6, 0x81, 0xae, 0x20, 0xfd, 0x43, 0x97, 0xf2, 0x24, 0x34, 0x3c, 0x3c, 0xcc, 0x5c, 0xf8, 0x72, 0x98, 0x8c, 0x7b, 0xf0, 0x45, 0x19, 0xe9, 0xb2, 0xc5, 0xd1, 0xe1, 0x2e, 0xb2, 0x87, 0x4a, 0x6f, 0x04, 0xa3, 0xe9, 0xd3, 0xef, 0x7e, 0x2d, 0x22, 0xd9, 0xc7, 0x29, 0x3f, 0xe6, 0xe8, 0x34, 0x94, 0xd3, 0x19, 0x59, 0xd7, 0x77, 0x7a, 0x7a, 0x12, 0xd1, 0x9b, 0xbf, 0xfe, 0x37, 0x1e, 0x3b, 0x33, 0x75, 0xcc, 0x4d, 0x11, 0xf9, 0xa8, 0xa3, 0xff, 0xed, 0x34, 0xc4, 0xda, 0xcd, 0x14, 0xeb, 0xe3, 0x34, 0xb6, 0xc1, 0x88, 0xdb, 0x3a, 0x51, 0x8b, 0xe9, 0xba, 0x8f, 0x38, 0x4d, 0xc8, 0xc0, 0x53, 0x27, 0x5b, 0xb9, 0xf2, 0xa0, 0x1e, 0xdd, 0x95, 0xb9, 0xff, 0xe6, 0x00, 0x8a, 0xe6, 0x58, 0x00, 0x1e, 0xa7, 0xe5, 0xb8, 0x54, 0xa7, 0x8a, 0x05, 0xb8, 0x1e, 0x70, 0x61, 0xb7, 0x01, 0xcb, 0x05, 0x51, 0xf2, 0xe8, 0xc8, 0x9e, 0x91, 0x7c, 0x6e, 0xe5, 0x90, 0x52, 0x3c, 0xb9, 0x37, 0xca, 0x52, 0x36, 0x9e, 0xec, 0xcd, 0xd6, 0x2c, 0x9c, 0xb2, 0x69, 0xbc, 0x07, 0x74, 0xb2, 0x26, 0xeb, 0x34, 0xf8, 0xc2, 0xd0, 0x54, 0x02, 0x36, 0xba, 0x4d, 0x8e, 0x02, 0x66, 0x20, 0xad, 0xfe, 0x98, 0xa9, 0x38, 0x91, 0x75, 0xfb, 0x65, 0x3c, 0x1e, 0x7e, 0x80, 0x33, 0x4c, 0xae, 0x25, 0xda, 0x91, 0xcd, 0xb8, 0x2e, 0x77, 0x41, 0x57, 0x3f, 0x10, 0x5f, 0xbe, 0x18, 0x12, 0xc0, 0xc6, 0x6b, 0xc2, 0x0e, 0xaf, 0x59, 0xa4, 0xc2, 0x18, 0x8b, 0xb3, 0xa6, 0xce, 0x49, 0x00, 0x28, 0xa0, 0xbd, 0x51, 0xee, 0x84, 0x7f, 0x6d, 0x7b, 0x2c, 0x54, 0x02, 0x14, 0x80, 0x4a, 0x23, 0x3b, 0xfd, 0x72, 0x08, 0xbd, 0x7f, 0x03, 0xcc, 0x2e, 0x1a, 0xca, 0x95, 0xea, 0x15, 0x44, 0xdb, 0x1e, 0x70, 0x1b, 0x02, 0x3f, 0x9e, 0xbd, 0x5a, 0x02, 0x57, 0x85, 0x49, 0xf0, 0x7f, 0x69, 0x68, 0x9f, 0x87, 0xc4, 0x66, 0xbd, 0xfe, 0xbd, 0x1b, 0x9c, 0xf6, 0xc8, 0x5f, 0xaa, 0x75, 0x74, 0x9c, 0xf3, 0x75, 0x20, 0xc4, 0xa7, 0xcd, 0x70, 0x9a, 0xb2, 0xde, 0xc8, 0xd9, 0xf8, 0xae, 0x45, 0x77, 0x48, 0xcf, 0xde, 0x8a, 0x8e, 0x51, 0x90, 0xa4, 0xfe, 0x17, 0x7c, 0xd5, 0x40, 0xf9, 0x11, 0x8b, 0xed, 0xa3, 0x27, 0x58, 0xe1, 0x48, 0x69, 0x5a, 0xca, 0x58, 0xbc, 0xc0, 0xb6, 0x0c, 0xe8, 0x18, 0xc4, 0xef, 0x3f, 0xf0, 0x2e, 0x7a, 0x12, 0x97, 0x9d, 0xc0, 0x49, 0x85, 0x8b, 0x56, 0xd2, 0x5b, 0x53, 0x8a, 0x85, 0x71, 0xfb, 0x9c, 0x93, 0x61, 0x20, 0x19, 0x5a, 0x5f, 0x88, 0xb2, 0xc9, 0x97, 0x8d, 0xe7, 0xf1, 0x26, 0xa6, 0x22, 0xdb, 0xfe, 0xd0, 0x5a, 0x6b, 0xf5, 0x40, 0x2f, 0x69, 0xb0, 0xd7, 0x23, 0x4c, 0xc6, 0x81, 0x40, 0xb3, 0x74, 0xdd, 0x3d, 0x50, 0x7a, 0x56, 0xec, 0xed, 0x8d, 0xbb, 0xb3, 0x17, 0x44, 0x9c, 0xd5, 0x2d, 0x87, 0x89, 0x08, 0xfb, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x02, 0x00, 0x55, 0x9e, 0xf0, 0xc4, 0x19, 0x6f, 0x7e, 0xe4, 0xda, 0x07, 0x40, 0x57, 0x76, 0x3a, 0x6a, 0xaf, 0x1f, 0xaa, 0x89, 0x0a, 0x42, 0xa6, 0xc2, 0x34, 0xb7, 0x77, 0x82, 0x21, 0x85, 0xc1, 0x89, 0x1e, 0xcc, 0x75, 0xe8, 0x25, 0xf8, 0x3a, 0x0e, 0x2e, 0xe8, 0x67, 0x13, 0x5c, 0x2b, 0x2c, 0x37, 0xe4, 0xb1, 0x44, 0x82, 0x19, 0x20, 0xb5, 0x0a, 0x84, 0xad, 0x0a, 0xa8, 0xdf, 0x95, 0x4f, 0x22, 0x81, 0xfe, 0xbd, 0x75, 0x29, 0x58, 0xe8, 0xe7, 0x0a, 0x63, 0x38, 0x9a, 0xe1, 0x40, 0xf7, 0xf7, 0x17, 0xea, 0x66, 0x0c, 0x73, 0xc4, 0xe6, 0x26, 0xc8, 0x34, 0x7b, 0x02, 0xdd, 0x04, 0x23, 0x99, 0x57, 0x0f, 0xb0, 0x3c, 0x00, 0x65, 0x6a, 0xac, 0xfe, 0xd1, 0x43, 0xa2, 0x48, 0xc3, 0x1f, 0xb6, 0x99, 0x3d, 0x7f, 0x3f, 0x49, 0xc0, 0x67, 0x7c, 0x11, 0x1c, 0x81, 0xb1, 0x3f, 0xad, 0x93, 0x74, 0x22, 0xe8, 0x3d, 0x2f, 0x3d, 0x95, 0x6c, 0x0b, 0x52, 0xaa, 0xc7, 0x12, 0xff, 0x73, 0x02, 0x05, 0x77, 0x71, 0xdf, 0xd9, 0x90, 0x6d, 0x25, 0x77, 0xb4, 0x28, 0x19, 0xf5, 0xa6, 0x4b, 0x56, 0x86, 0xde, 0x40, 0x2a, 0xac, 0x7d, 0x9a, 0x57, 0x76, 0x3a, 0xf9, 0x7b, 0x36, 0x38, 0x22, 0x0b, 0x51, 0x71, 0xf6, 0xbf, 0x9f, 0x67, 0x0f, 0xe2, 0x39, 0xa6, 0xc5, 0x17, 0x04, 0x00, 0xe1, 0xda, 0xfe, 0x47, 0xc9, 0x84, 0x30, 0xaf, 0xfb, 0x6d, 0xde, 0x15, 0x5d, 0xf4, 0x35, 0xa3, 0xf4, 0x06, 0x19, 0xb3, 0x13, 0x1b, 0xeb, 0xa5, 0x16, 0xbb, 0x22, 0x0f, 0x23, 0xfe, 0xac, 0x12, 0x00, 0x68, 0x60, 0xb4, 0x8b, 0xb8, 0x03, 0x8c, 0xb0, 0x08, 0x05, 0x07, 0x83, 0x84, 0xfe, 0x34, 0xf5, 0x98, 0x6c, 0xc0, 0x81, 0x1c, 0xfc, 0x60, 0x6d, 0x38, 0x35, 0x37, 0xef, 0x66, 0xb6, 0x09, 0x02, 0xbf, 0xbb, 0x84, 0x3f, 0x1c, 0x14, 0x2f, 0xb8, 0x1b, 0x4a, 0x14, 0xd9, 0x06, 0x52, 0x8a, 0x0b, 0x80, 0x20, 0x9b, 0x17, 0x1c, 0xe0, 0x35, 0x41, 0x9c, 0xf3, 0x71, 0x81, 0xff, 0xa2, 0x30, 0x6c, 0x43, 0x3b, 0x47, 0x9b, 0x97, 0xaa, 0xc1, 0x62, 0x13, 0xbd, 0x4b, 0xa6, 0x6a, 0xe8, 0x0f, 0x28, 0xca, 0x4e, 0x54, 0x3c, 0x61, 0x99, 0x29, 0x21, 0xc2, 0xcd, 0x54, 0xbc, 0x34, 0xba, 0xca, 0x06, 0x60, 0x71, 0x66, 0xda, 0xbb, 0xc2, 0xc8, 0x45, 0x65, 0x7e, 0xc1, 0x37, 0x51, 0xbf, 0x1c, 0x17, 0x24, 0xc5, 0x93, 0x9d, 0x12, 0x78, 0xe7, 0x05, 0xd9, 0x02, 0xf6, 0xc7, 0x32, 0xa6, 0x99, 0xb6, 0x44, 0xa5, 0x78, 0x25, 0xc4, 0x11, 0xd1, 0xd2, 0x18, 0xe0, 0xa2, 0x7d, 0x08, 0x28, 0x90, 0xc6, 0x7e, 0x8a, 0xf8, 0x6c, 0x73, 0xbb, 0x36, 0xdf, 0xb5, 0x11, 0xc7, 0xbc, 0xbb, 0x6a, 0x13, 0x10, 0xab, 0xe9, 0xcf, 0x96, 0x88, 0x9f, 0x8e, 0x0e, 0x78, 0x2e, 0x66, 0x02, 0x94, 0x46, 0xcb, 0xcd, 0xff, 0xd1, 0xbb, 0xec, 0x7a, 0xc9, 0xd6, 0x8c, 0x31, 0x3f, 0x6c, 0x6a, 0x68, 0x4f, 0xca, 0x85, 0xbb, 0x2f, 0xb4, 0xba, 0xb0, 0xc4, 0x3c, 0xd2, 0x1d, 0xe3, 0x85, 0xdc, 0x26, 0x6d, 0x48, 0x44, 0x89, 0x46, 0xe7, 0xa1, 0x2b, 0xc4, 0x2d, 0xe5, 0xd2, 0xcd, 0x75, 0xc2, 0xb2, 0x29, 0x4e, 0x65, 0xd7, 0x72, 0x4a, 0xb0, 0xcc, 0x54, 0x7d, 0xb3, 0x6c, 0xfb, 0x7f, 0x4c, 0xe3, 0x7b, 0x2c, 0x6a, 0x66, 0x0e, 0x0d, 0x4c, 0xf2, 0x3b, 0xc2, 0x43, 0x37, 0x33, 0xc0, 0x57, 0x96, 0xfa, 0x76, 0x19, 0x30, 0x48, 0x7a, 0x8c, 0x6b, 0x58, 0x1e, 0x15, 0xdd, 0x80, 0x2b, 0xc2, 0xef, 0x10, 0x17, 0xcd, 0x10, 0x06, 0x05, 0x73, 0x9a, 0x01, 0xe5, 0xdb, 0x89, 0xd3, 0x83, 0x4d, 0x14, 0x1f, 0x53, 0xa3, 0x66, 0xc0, 0x01, 0x02, 0x82, 0x01, 0x01, 0x00, 0xce, 0xc5, 0xfb, 0x52, 0x0d, 0xb4, 0xaa, 0x1b, 0x2b, 0x5c, 0x5a, 0xa3, 0xd8, 0x3f, 0x74, 0x99, 0x1c, 0x05, 0x83, 0x03, 0x43, 0xb8, 0x00, 0x21, 0x0c, 0xf9, 0xe0, 0xb0, 0x6a, 0xef, 0x40, 0x4a, 0xeb, 0x65, 0xd0, 0x80, 0xe5, 0x34, 0x33, 0x09, 0xf2, 0x70, 0xb6, 0xa6, 0x1d, 0xb9, 0x04, 0xc7, 0xb9, 0x84, 0x70, 0xd6, 0xa7, 0x67, 0x06, 0x40, 0x9a, 0x20, 0xee, 0x96, 0x7f, 0xde, 0xa4, 0x28, 0x81, 0x08, 0x68, 0xda, 0x05, 0x27, 0x88, 0xa0, 0xe2, 0x7c, 0xde, 0xfb, 0xe3, 0x44, 0x1d, 0xca, 0x49, 0x65, 0x4f, 0x34, 0xd5, 0x44, 0xea, 0xa6, 0x3f, 0xcf, 0x9e, 0x7e, 0xb7, 0x88, 0xbe, 0xa9, 0x73, 0x1e, 0x6b, 0xaa, 0x68, 0x67, 0xc6, 0xb3, 0x9a, 0x13, 0x91, 0x96, 0x96, 0x8f, 0x9b, 0x2e, 0xf8, 0x1f, 0x9b, 0x4f, 0xef, 0x6b, 0x23, 0x06, 0x5c, 0xc1, 0xfb, 0x39, 0x61, 0x12, 0x0d, 0x85, 0x04, 0x71, 0xd7, 0xba, 0x9a, 0xfb, 0xec, 0x61, 0xe6, 0x67, 0xc4, 0xdb, 0x97, 0x3e, 0x33, 0xd7, 0xe2, 0x20, 0x14, 0xe2, 0x35, 0x2a, 0x38, 0x95, 0x3c, 0x56, 0x30, 0x14, 0xa1, 0x9c, 0xaf, 0x31, 0xac, 0x66, 0x8c, 0x12, 0x63, 0x7b, 0x5b, 0x4a, 0x93, 0x31, 0xb1, 0x47, 0x3e, 0x04, 0x33, 0xe4, 0x57, 0x31, 0x46, 0x30, 0x82, 0xab, 0x01, 0xe2, 0x97, 0x03, 0x41, 0x78, 0xb0, 0xd3, 0xa7, 0xf6, 0x44, 0x08, 0x40, 0x7b, 0xcb, 0x7e, 0x24, 0x85, 0x58, 0x79, 0xdf, 0x59, 0x81, 0x13, 0x69, 0x8d, 0xcd, 0x25, 0x48, 0x41, 0xc1, 0x99, 0x3f, 0x52, 0x3f, 0x0e, 0xf5, 0xe3, 0x5b, 0xb5, 0x14, 0x35, 0xd8, 0x05, 0xc2, 0x28, 0xbf, 0x19, 0x6f, 0xba, 0x33, 0x4b, 0x94, 0x0f, 0x2d, 0xb7, 0x51, 0x54, 0x29, 0x6c, 0x5c, 0xdc, 0x57, 0xca, 0x35, 0x0b, 0x69, 0xd9, 0x73, 0x81, 0x5b, 0xe3, 0x3c, 0x01, 0x02, 0x82, 0x01, 0x01, 0x00, 0xca, 0x48, 0x99, 0x05, 0xc3, 0x0b, 0x91, 0x9d, 0xa5, 0x49, 0x4b, 0xa5, 0xb1, 0x38, 0xa8, 0xd7, 0xf0, 0xc0, 0xae, 0xf7, 0xf7, 0x0a, 0x3e, 0x7c, 0x01, 0xbf, 0x69, 0xa6, 0x23, 0x68, 0xe0, 0x1b, 0x11, 0xd3, 0xc3, 0x9b, 0x2b, 0xdd, 0xa8, 0x66, 0x17, 0x97, 0x93, 0x6f, 0xc6, 0x68, 0xd7, 0xd0, 0x68, 0xc3, 0x2b, 0x4d, 0xfa, 0xda, 0xfa, 0xd9, 0x91, 0x68, 0x20, 0x10, 0x3d, 0x51, 0xb7, 0x3d, 0x7a, 0xc1, 0x00, 0x53, 0xc9, 0x77, 0x7e, 0x08, 0x1d, 0x7c, 0xcf, 0x36, 0x72, 0xe4, 0x7d, 0xb0, 0x67, 0x1f, 0x41, 0x5a, 0x02, 0x87, 0xcb, 0x4c, 0x83, 0xa0, 0x4f, 0xf0, 0x80, 0x4b, 0x3a, 0x66, 0xd2, 0x52, 0x13, 0x77, 0x3c, 0x6d, 0xa6, 0xdf, 0xd2, 0x3c, 0xd3, 0x6b, 0xb4, 0x7c, 0x53, 0x55, 0x40, 0x22, 0x4a, 0x87, 0x1d, 0x66, 0xd4, 0xc1, 0x45, 0x2c, 0xeb, 0xbb, 0x95, 0x57, 0x03, 0x4b, 0xd2, 0x4d, 0xfa, 0x86, 0x15, 0x3d, 0xbe, 0x8c, 0x0d, 0xf0, 0x4b, 0x9b, 0x98, 0xce, 0x88, 0xfb, 0x98, 0x90, 0x56, 0x78, 0x80, 0x7e, 0xfd, 0x27, 0xb8, 0x17, 0x23, 0x4f, 0xd8, 0x2a, 0x16, 0x89, 0xef, 0x25, 0xed, 0x85, 0x85, 0x64, 0x76, 0xb4, 0x85, 0xe8, 0x4a, 0x28, 0x7a, 0xbe, 0x11, 0x66, 0x09, 0x9a, 0xeb, 0x60, 0xdd, 0xd5, 0x53, 0x73, 0x4a, 0xad, 0xc9, 0x06, 0x8e, 0xab, 0x62, 0x31, 0x7b, 0x2e, 0xf7, 0x7e, 0x47, 0x00, 0xc2, 0x47, 0x5b, 0x61, 0x1e, 0xb9, 0x9f, 0xfc, 0x85, 0xe9, 0x97, 0x1a, 0x4d, 0x56, 0x4a, 0x0c, 0x57, 0x1b, 0x73, 0x6e, 0xba, 0xdb, 0x82, 0x70, 0xb6, 0xe5, 0x09, 0xaf, 0x45, 0x87, 0x34, 0xae, 0x54, 0xbf, 0x92, 0xf3, 0x38, 0xc9, 0x08, 0x4c, 0x1f, 0x77, 0x80, 0xec, 0x8c, 0x9c, 0x0d, 0x93, 0x29, 0x63, 0xed, 0x31, 0x9b, 0xb2, 0x3b, 0x8d, 0x34, 0xfb, 0x02, 0x82, 0x01, 0x00, 0x62, 0xb3, 0x28, 0x83, 0x03, 0x5d, 0xd0, 0xb1, 0x05, 0x62, 0xa1, 0x35, 0x82, 0x7c, 0xcf, 0xb8, 0x62, 0x22, 0xd3, 0x65, 0xd4, 0x86, 0x59, 0x31, 0x6d, 0x93, 0x3d, 0x48, 0x98, 0xd2, 0xb9, 0x7a, 0xc9, 0xa0, 0xa1, 0x05, 0x55, 0xe3, 0x33, 0xd5, 0xb4, 0xaf, 0x4e, 0xd0, 0x3e, 0x71, 0xd9, 0xb1, 0x48, 0x81, 0xca, 0xa6, 0xfb, 0xe3, 0x76, 0x9d, 0x91, 0xb4, 0xd4, 0x8e, 0x6c, 0x5d, 0x27, 0x38, 0xda, 0x56, 0xdc, 0x4d, 0xed, 0x95, 0xf0, 0x66, 0xf3, 0x95, 0xad, 0x8e, 0xc8, 0xed, 0xf3, 0xd6, 0x62, 0x70, 0x84, 0x7d, 0x70, 0xab, 0xe3, 0xe2, 0x15, 0xa5, 0x92, 0x3f, 0x64, 0x76, 0x56, 0xa4, 0x65, 0xfa, 0x08, 0x64, 0xa0, 0x4f, 0xa1, 0x0e, 0x8c, 0x26, 0x79, 0x21, 0x4b, 0x9f, 0x22, 0xf1, 0x29, 0xa9, 0x54, 0xa6, 0xb4, 0x5f, 0x0c, 0xa9, 0xf5, 0xce, 0xf6, 0x8f, 0x6e, 0x21, 0x82, 0xe8, 0x92, 0xb5, 0x90, 0xc7, 0x57, 0x41, 0x97, 0x95, 0x27, 0xb9, 0x32, 0xc3, 0xab, 0x0f, 0x1b, 0x0a, 0x1a, 0xbb, 0x3b, 0x9c, 0xba, 0xc9, 0xfb, 0x96, 0x68, 0xe5, 0xaf, 0x2f, 0xb9, 0xf1, 0x23, 0xc3, 0x6f, 0x4a, 0xc7, 0xe3, 0xe3, 0x2e, 0xb7, 0xe6, 0x02, 0x1a, 0xff, 0x47, 0x45, 0x78, 0x16, 0x19, 0x11, 0xf1, 0xc8, 0x52, 0x51, 0x9d, 0x35, 0x5a, 0x26, 0xc1, 0x7c, 0x18, 0x13, 0x38, 0x04, 0xfd, 0xcd, 0x7d, 0xae, 0xe2, 0x28, 0xc1, 0x7e, 0xc7, 0x53, 0xf3, 0x60, 0xc4, 0xc5, 0x93, 0x31, 0x98, 0x69, 0x6b, 0x39, 0x71, 0x81, 0xeb, 0x17, 0xc9, 0xb7, 0xa5, 0xf9, 0x83, 0x5c, 0x7c, 0x34, 0x38, 0x7b, 0x74, 0x4c, 0x38, 0xcc, 0xf7, 0x64, 0x58, 0x9a, 0x31, 0xa2, 0x6c, 0x18, 0x63, 0x5f, 0xe3, 0xef, 0x9d, 0xf5, 0x39, 0x8c, 0x82, 0x4e, 0x0d, 0xb3, 0xaa, 0x03, 0xb3, 0xa4, 0xdb, 0xf4, 0x01, 0x02, 0x82, 0x01, 0x01, 0x00, 0x96, 0x33, 0x77, 0xe4, 0x8e, 0x62, 0x8d, 0xba, 0x88, 0x1b, 0xb7, 0x9f, 0x0d, 0xcb, 0xeb, 0x9b, 0x84, 0x7a, 0x1e, 0xb1, 0xa2, 0xef, 0x29, 0x5c, 0x7d, 0x13, 0xbb, 0x88, 0x10, 0xac, 0xf4, 0x13, 0x45, 0x96, 0x7f, 0x9d, 0x3d, 0xe2, 0x36, 0x03, 0xb0, 0xaa, 0xed, 0x60, 0x46, 0xec, 0x5c, 0xab, 0xb4, 0xce, 0x8e, 0xde, 0x35, 0x51, 0xda, 0x88, 0x28, 0xef, 0x2f, 0x37, 0xbf, 0xc0, 0x68, 0x96, 0xaf, 0x0a, 0x96, 0x8a, 0xa0, 0x83, 0x28, 0xc3, 0x2f, 0xda, 0x18, 0x26, 0xef, 0x02, 0xf8, 0xcd, 0x3e, 0x95, 0x37, 0xba, 0x75, 0x3c, 0x8d, 0xd9, 0x7f, 0xb7, 0x4f, 0x04, 0x5e, 0xce, 0xfd, 0x4b, 0x92, 0x0a, 0x3d, 0xc8, 0x00, 0xc7, 0xce, 0xec, 0x4d, 0x38, 0xbb, 0x28, 0x33, 0x79, 0x49, 0x8b, 0x78, 0xb6, 0xbd, 0xae, 0x3c, 0x47, 0xb9, 0xdc, 0xd4, 0xd7, 0xb9, 0x26, 0xad, 0x8a, 0x51, 0xb9, 0x40, 0x2c, 0x84, 0xc4, 0x81, 0x0b, 0x3a, 0xec, 0xd6, 0x00, 0xc2, 0xb3, 0x83, 0xb0, 0x80, 0x88, 0x89, 0x4d, 0x4b, 0xd7, 0xe8, 0x59, 0xe2, 0xf2, 0x56, 0x40, 0x60, 0x09, 0x0e, 0x92, 0x99, 0xef, 0xcb, 0xf2, 0xd6, 0xbe, 0x99, 0x40, 0xf2, 0xdf, 0xb2, 0xba, 0xbc, 0x2d, 0xf8, 0x8e, 0x1f, 0x6f, 0x2b, 0xdc, 0xab, 0xc0, 0x5e, 0x97, 0xe3, 0x82, 0x2d, 0x46, 0x83, 0x89, 0x69, 0xf0, 0x9a, 0x55, 0xf1, 0x88, 0xfb, 0x5e, 0xf9, 0xab, 0xf7, 0x96, 0x72, 0xa4, 0xd7, 0xe2, 0xaf, 0x88, 0x1b, 0x8b, 0x4a, 0x96, 0xce, 0x2c, 0x2f, 0x89, 0xa0, 0x38, 0x92, 0xea, 0xfa, 0xb6, 0xb9, 0xd1, 0xa6, 0x0c, 0xc5, 0xb7, 0x2e, 0xa2, 0x69, 0x9c, 0xb4, 0xf3, 0x17, 0x53, 0xa0, 0xab, 0xad, 0x8c, 0x90, 0xa4, 0xf4, 0xc7, 0x30, 0xd5, 0x43, 0x43, 0x2d, 0xad, 0xb4, 0x57, 0x6c, 0xab, 0xd8, 0x8a, 0x4e, 0x77, 0x02, 0x82, 0x01, 0x01, 0x00, 0xc9, 0xad, 0xff, 0xcc, 0xaf, 0x3d, 0xf9, 0x52, 0xfb, 0x1b, 0xf7, 0x92, 0x0f, 0xd9, 0x06, 0xf4, 0x7d, 0x24, 0x1d, 0x48, 0x9f, 0x69, 0xf7, 0xad, 0x40, 0x98, 0x60, 0x3e, 0x3b, 0x45, 0xe2, 0x85, 0xa8, 0x9d, 0x37, 0x56, 0x6a, 0xb9, 0x0b, 0xd9, 0xd8, 0xe7, 0xab, 0x3d, 0xc3, 0xb3, 0x94, 0x3b, 0xca, 0x5e, 0xac, 0x15, 0xe5, 0x25, 0x89, 0x8a, 0x65, 0x08, 0x4e, 0xe3, 0x6f, 0x77, 0x96, 0xfc, 0x59, 0x0f, 0x62, 0x2a, 0xe0, 0xd7, 0x19, 0x6d, 0x54, 0x82, 0x32, 0x81, 0xc0, 0x53, 0x38, 0x73, 0x63, 0x76, 0xeb, 0x76, 0x0b, 0x52, 0x23, 0x16, 0xb6, 0x80, 0x6b, 0xde, 0x18, 0x07, 0xb3, 0x67, 0x7f, 0x2a, 0x28, 0x85, 0x36, 0xe9, 0xd9, 0x33, 0xed, 0xd7, 0x84, 0x09, 0x8e, 0x2f, 0xae, 0xc4, 0x64, 0xc2, 0x1a, 0x53, 0x5b, 0x42, 0xc6, 0x54, 0x2a, 0x63, 0x71, 0x0a, 0x1a, 0x2a, 0xfc, 0xa6, 0x02, 0x80, 0xa6, 0x02, 0xcf, 0x15, 0xda, 0x83, 0x2b, 0x66, 0x2c, 0x35, 0x61, 0x0f, 0x6e, 0x39, 0x4a, 0x16, 0xc0, 0xea, 0xa6, 0xd7, 0x06, 0x6a, 0x99, 0x57, 0x0e, 0x5e, 0xf3, 0xc8, 0x4b, 0x68, 0x16, 0x02, 0xcd, 0xdf, 0x42, 0x55, 0xa3, 0x1f, 0xd8, 0x64, 0x71, 0x04, 0xcc, 0xb1, 0x46, 0x97, 0x40, 0x33, 0x83, 0xd1, 0xaa, 0xa4, 0x49, 0x8d, 0xc4, 0x36, 0xa3, 0xaf, 0x6c, 0x25, 0x75, 0xfe, 0x85, 0x29, 0x46, 0x2d, 0xf4, 0xef, 0xa9, 0x21, 0x0a, 0x80, 0x17, 0x23, 0x56, 0xca, 0x4a, 0x7f, 0xc0, 0xbd, 0x1d, 0xca, 0x0c, 0xfd, 0x78, 0x07, 0x9b, 0x68, 0x1c, 0x8f, 0xc5, 0xe4, 0xe4, 0xd2, 0x12, 0x21, 0xa1, 0x84, 0x77, 0xac, 0x81, 0x1a, 0xec, 0x7c, 0x1a, 0xe9, 0x11, 0x8d, 0x48, 0x01, 0x3b, 0x4f, 0xab, 0x5b, 0x5a, 0x05, 0x96, 0x68, 0x81, 0x1a, 0x88, 0xde, 0xb3, 0xa4, 0x90, 0xf9, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */, ret = 1; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server TLS | visit https://localhost:7681\n"); signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if (lws_cmdline_option(argc, argv, "-h")) info.options |= LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.server_ssl_cert_mem = cert_pem; info.server_ssl_cert_mem_len = strlen(cert_pem); info.server_ssl_private_key_mem = key_pem; info.server_ssl_private_key_mem_len = strlen(key_pem); info.vhost_name = "first"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create first vhost\n"); goto bail; } info.port = 7682; info.mounts = &mount; info.error_document_404 = "/404.html"; info.server_ssl_cert_mem = cert_der; info.server_ssl_cert_mem_len = sizeof(cert_der); info.server_ssl_private_key_mem = key_der; info.server_ssl_private_key_mem_len = sizeof(key_der); info.vhost_name = "second"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create second vhost\n"); goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); ret = 0; bail: lws_context_destroy(context); return ret; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-mem/mount-origin/000077500000000000000000000000001357643561300320315ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-mem/mount-origin/404.html000066400000000000000000000002651357643561300332310ustar00rootroot00000000000000

404

Sorry, that file doesn't exist. libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-mem/mount-origin/example.js000066400000000000000000000012711357643561300340230ustar00rootroot00000000000000document.addEventListener("DOMContentLoaded", function() { var transport_protocol = ""; if ( performance && performance.timing.nextHopProtocol ) { transport_protocol = performance.timing.nextHopProtocol; } else if ( window.chrome && window.chrome.loadTimes ) { transport_protocol = window.chrome.loadTimes().connectionInfo; } else { var p = performance.getEntriesByType("resource"); for (var i=0; i < p.length; i++) { var value = "nextHopProtocol" in p[i]; if (value) transport_protocol = p[i].nextHopProtocol; } } if (transport_protocol == "h2") document.getElementById("transport").innerHTML = ""; } }, false);favicon.ico000066400000000000000000000025761357643561300341050ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-mem/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-mem/mount-origin/http2.png000066400000000000000000000166131357643561300336070ustar00rootroot00000000000000‰PNG  IHDR@qeO„Ö pHYsCC,ę·ētEXtSoftwarewww.inkscape.org›ī<IDATxœķœ{”žU}ļ?ūņ\ŽĖd2!!!@ˆ:Ķ1Cė… ˆZ ļ§.EcO½j„zŖmķQj»°ķ$­ÖćŖÖ„e)еœ.XWµŠ*„F«Ų(1š ™dBfęĶ{y.ūržxžwnļ;™,Īj¾k͚™żüžēŁū÷ģ½÷ §p §p §p §p §š_b9ļ½Ų±cĒ,ķųų8;wīŪŹ’ļŲ½[lówģŽ-¶ŽyÖ¬»öģ[FFÜĪyĻŪ¶m›gĒóļŲś’—Ąž=bošJFG­T,““žŻ»}łbß„ķög¼hŸ{ĮĪ¢ū¾Ż»wūńńq/„š,%ą½ģÜ)÷·ZA”e2 CWQJ©<—2ŠÄdšśµRŖf­&E§#d’54¤l»Öf¹Rašē¢ĒIÓ_QŹ5£”!‘I§£”s “RER:!e @8'­µ&TŖŃt.Y”µ{°IāOņÓy.kCC¦jE£(k„UŹuǐ­XaŻÄDņƒuė̶mŪ\?Fōe€qĒķ·«_žÅ/*YµŗRv:CV)ćņ<ŌR†6MµUJ[Øy.}Yom,Y!¤¬;Ą įźB„Mļ3å}‚RŲM½¢°“¦Y½VSi§³Z z!œBäĪéż ©u3—ņēŽ˜‰)hoyĒ;Ģb&ōgĄöķ’±±čH»½>˲M&ĖĪ>-ŽW 8—SÆ×P*<ĪY‚@!„Ą{O ”µ@© R ¬Ķ‘2Bʹ(å±Vļ5RfX[|9­«(‘ē)BXŅ“M§Ó$Ļćœ”ÕŹØ×k“įœÅū€Zm­C¼ļIbš>&MŪ>ü‹@ėļW¢hļŹ›āā‹Ķü±ź~_×gس’dČdŁęÕ•ŹłńʍgQ­ŽE’ pHéĆ:R*œóx/Ńŗų-„B‹Ru¼·@„sŗ\W)` ö ‡Rē$ŽĖŁ6)Œ18—#D†sMŒÉqĪ eŽ”1Ī8—U¬³Ićœ%Ir²,#Ig„©9ŠlīC©+÷ģiyļÅüYŠĆ¼gĖĪb2MWäƌĘk֜ɹšF¢h5q„$RJ@Ŗüŗ!BtŸS Ö{‰µA9p0¦`āģkR ŒhķqĪE!Ī„0Q“ƒ£;ē4Ž+¤ōX[ōĒZƒ9R¶€P®\9%¦§G•1?gd¤gĘ÷2 D;I¬Kµ:D®Aė5H#„BJ‰” 8Wtŗ@÷+z„@ń[)A¹ŁEŻNtļéŽļ CˆņŁļ!<Ö:œó(%f TA!˜]JåT*R&Ōė5/„ńÖz&&cĄžVKā\¤ĆŠE­”Ŗ– „”B)(Ö0³_½h+jm·ĆąÜ”Å’ŌšdĮÜĖ :÷s}S ¬u%c¤¦ *QDcŗĻōXK9;Aą"ÉĄ­õw‘-Ė!0Ÿü¤*•Ō;gšŽP©0ū…”’’āå_~šƒ<ėÜså_łŠŸ\²é9ĻGåSż(ÓiŹUų@?Ͼķ×_łJź+Wrżõ×÷\›’ĻUļ}Æ8ļĀ Å[.æœC‡ͶŒŒš’æ˜W^ɳ6mņå*–ÖēņŠŹ įĪīӁ¾3`4ŠÜ0Ģl§“£µGK:¼h-:SSS4Žgö+—Ģ›žžfjjŠ4ĻIJŗ”Õn#ƒ`YŗNšŠééi:„‚Õ«W099É-·ŽŹ7o»’Ę7Äęg<ƗĖT‘e‚8Žā0 [IéZm€%ą=ūÆ»N‘$Cu„Ö&Hiń^~8f÷‚īß]ĮŪ~ó7yĶĖ^B`…`Ó¹ēšƽ–]TLĘZ­†”’?ū£?ą¾ūļ絯=÷Žy'§­Z_śöļ~€(Š8²oxĻæ~ļ{¼źµÆeff†}ę3|ŗčO±Īłé4mT‡†š­éi»<€hõjiÖµ8ސ2œŻŻ‹ĶmĮ {2ļŚšš0ĆĆĆ̾g¬[Ēӟö“äkŹ/z¬Łœm;ēœs8}͚%Ÿ¼ą‚ xłĖ_Ī 7ÜĄīūļ/Ś•rYęHÓć‘RM:öcĒģØX8 ś2@NM ­”±Ž{„PHYˆ¤ņ„]“ŪmvŻw߂Ncüæ$–ŗ¶˜ĮĖA)<@½Vc^m)9“Qź˜ŃŚló‹ŸŲBå¹Ī…Q„aŒ÷Ž+mL÷ļŁĆłĻžņ|<čĆē÷žĒŠītøé–[øūī»xÅ„—ā“ųX!rœóĀūĢf™ßY«Įœųś1ąŽ;d^©DY£Q;])÷²TjzÖOEœ¹~ż‚>šĄXŪCzR‘e¾š… Ś.Łŗ•w_qEw™Œ…BSÕĆĆrۚ5]½”æ&čA09éÓ45U„Zkӊm¼·(%°V ēnŪ¼™ļß}÷=ąō³Ībrrņ‰;Pˆł‹ž’|“Ölܰ—^|1’ć²ĖPB:÷)=Žœ3BZģžœ”Ž{+ęͪްfØG‘m>l‡½—d€#Ļ%aø¤]żd" Cīŗķ¶Bóƒā·sÅĄ½„āeQ*%ĻS)e–g™ėtzśæ` ąŁŗÕ9pĄćœ”ҁFŹ`V}Ŗb”8.žŃ:4ÖĘÕ8®īMÓ‘ÕÓ°cĒĘŖU†!©µfÖLõ=čS…¦š¾J…^ˆµćĒulŒœļŁ‚>K`||ÜóµÆłģȁēŽ[„š(åž¶aƒæō×~MŒ>ć ovŽæčEĢ4¬?ćŒ—„÷\zÉ%œvŚiKö}E­VŠyO† ®¾j—^r a×vč@ Å„(E”*}Z”“”į™gÅų¶m~ūöķóˆ{˜ēŁ;ć“Ń83ʲ­gž…¬]{>ZŸÖu” ˆ¢b­ĘĻ`ņś‰Bw($'M}éKheæąČ‘ķæ÷Ž„^’®®Õ8kŪ¶d¾? W‚dbĀiļm†ŠBddaK{ü©‹łĀŚBzļ¬R.Čs§¦¦–·ą£Č„|¶©pw-­ö>UPx†<…OAb­DJ9Qb­īd™]<[{Fä]€Cßń>+}׳/zŖ£š9F14E5ƔķYó½ŸŌ{¶ŒŒˆŠŚhDė:APÅūbיSxžźKĮ£”4Z‹¶1¹P*Ż»w/Ž/ģz—X«%sctT«i” š>,ļė†ēóœģē?'č!ņƒq>/V™Z¹µjśŒ3ˆŸżldį€yōPŖŠēö­ćs<3& ¼7“QäÄ Öąa„T’$]äQŹ”»ķÜŻ0"¹ļ>7ßLė;ß!łĮpĪņƒŠšų¼óŗäF~ė·ĪīēĒYÖ®łī~UC™÷-Ēvˆ ]aīu=ٱCUAÖ!,°»ņ·\«Åō—¾Ä±k®!żÉOļ|ʐÜ{/ɽ÷rä#!|Å+Ų°cqéL9!ę÷©p‹Å”]–å€crņÄŖ0ć愍†Bˆ•„a čśż»;l’w§)\}5?Ū¼™CļyĻcü"ēȒ韸’Ā Łżśž‰0·7y¼‘cL µī;e{°cCJ9éœAėŸ/D7Š#śMżÖæü {/ø€‰÷æsōč£åŠĪį?žqī|Žó°ķörä]&ŲīßRŹŠćwMMI)}ūL kL„tieYœ›»Ń˜bGĢs_uū_łJ²Ÿżģ±īQ`õO~ĀWĘĘH–bB”wc…ųRq.„ŖŒŒōLį¾ XQDnR:Ę“ŹŒ.7ŗĘ-·pōŸXr?x"°éČ®}į {ÄYœ“h­B„a„Ŗ”ƒž¾öŪ|:Į"0"„²Ž›2ę.Źé椠FFXóÉOņ¶zļv_¹ńFīśÖ·ųõW½ją=ż‚ 8żC˜~-pß8×°ŲL/ee yžeŠz]ūE¾ĶŒ2ŠD»ÓY9†UāxBTqNHŲšÖ·ņŸł ?øēžG5šłxĘ»ŽE>44­&x`®”+¦»Ź[‘^“GJ…6 ķīf³Ēš]rŃ)­£ ^A©bo Sŗ˜NȄ7¼īuœuę™  „Ö¬zéK¦wIBš¦s ŽŒčŚÖŚNžŪ0Ė\gjŹ/–½K­–0E`1,“ ,ŽēĖĶ€“…xÓ¦i;@Ņe@©ŸĢ¢›œ%e;¶ō¹æw Œ{«µ —Rd„Vµ“Č<ÉÕź@thÕ®eNSu(e±6Da[d¬Į ĘPnŒÕZ%I:8—ĪŅ>IĮsäČ@t‡ØZ%z4Ü")K)C…u­WÄBÄūĆP-^ĮżUį0t™”¼÷(UB¤œKO›Ė {B`&&¢{ŲøaĆ\ĆBMŠkeØTą!޲lłŠŖ°ö>BˆBł ‚9qų$ ݳg ŗū€_³šŠ%Päxo‡1IÓŚD:—Ł‘‘Į!U©ÖåyŠ1-ņÜĶfr>Į¦Æ™˜ ™Ÿur|ø`±R$T:“Nńސē@<«Ļ3ś*BĪūV’e Žž“ł¦šāŻö$¢ło Ää6p/š«/xĮ\ćÜL°@Ž÷-¼÷6˼ɲüGI²üčfŽ+cōt–u°¶C‘‚ś¤L’Ę?žć@tßź«Vqхö'ĀQäfåa(į½\Ń'u„ļˆff“‚ØÖõ ‚ė‰ >KĮLLŠüēˆöą5Æ~5Z/’ĪÅ>„ń>Fˆ„bĄ )Åʵk—×ļŁ±6y®b„B” ‚R#~#ĮS÷wxc–„;Ü ¼ķ­o]x”H‘ó„ķ"D8Ž””Ź‘ļ?|xysxčŒ3„‡8·vmT©Ōč&/Kih‚'™>M™ŗīŗhožŪ3ŸÉ‹%JĶE ʛs¾™$ Ī%k5·¼OŠĪιÕT«u“ĮŚz yĀ>’Ōß’=y™ļw"ąVą]q‹Ć\eBG×u/)–‚WA ]éXŒlŁ“ÉRęBʜ””a”АRį}8» N2|’pōcˆö Y­ņ?ßüꮋ]†®0 W¤ DžŚĘxå}ˆµŠ"WP/H<:ÉÓ’Ųg?;Š×Ļ€k€w¾żķ¬,Sp{ś#„@Y*qt¼")ŻŽ>õ½ ˜œōa˜\Ź£¤é ֚2éHĢśObxÜ>Ģä‡?<ķ @³^ēO®¼ri¢ł)3E‚gT‹ćŲ(µbtŻŗTįmŪ|dm”u}6Ež¼€CW^‰™Y–®\ ¼ēŻļ^:znšcœxßi$I"ĖöÖė=Įž±Į¼V3NE×=kœd4o»ĘM7 Dū9ĄóŽ?ųƒŽ‹óŽ…Ö);“¶¬måyޘyč!·¼GØ¬Ī“AŠ ŻnŅ­‘ņ¤ŖĄ¶Ńąįßū½h®¶’éŸĪ¹Ąū”k uÓd‹ ×T;7é“īlqÅR°‘MŒiam^–æ™RĒV3—"÷1ń¾÷‘?ųą@“’Ųtī¹¼ėļXxa±6ZX¬Żś¢”N§M’4|µW¬YćxĶk³OMéÜt~üųŽO"D0³zĄćō’źW™žā¢ż:p—\ó·ŪĻńы";Ä£TŽÓ“ŪĒ…÷²11!YIb ¬‡Ą*eŽ43äy»¬Ą8)Ó?č!žīļD;Eńõß~łå¼`¹ŗ„ł³”p޼·äyx?-ŪmŃ-Ųž~ Q­¦ˆĻ\±b BŌ1¦B”U=.&ų<ēĄå—cyd śæ¢õėłČ ±‚"mÖē2’¤™¦iGH)V¬Yӕ'ö īܹSŚĘ¬¢RYA®Ā¹ ĘĢ„Č<ĘĶpāŹ+ißsĻ@“7ß‚k?õ©o|óQX¬Eu©”„T†@#Ļ%kֈe}‚»ĖZżĄ{I&e"“g˜łņ—9vķµŃ>B!ó_ł²— ž’¹JR÷“"ŽWcVÅŽ»''åņbC— ”°6„ȵ1e‚ŅcśņéīŻ<üūæ?-EPõœĶ›ł«>›Ö’˜_½Zų+H9D)Aī}Š™šZ^ ŒLNā„˜*KŌ›xļ‚ĒTäšMzĖ[p­Ö@ōØ×¹į _ ņX&„ cƒÖ‘²vJU†ÓT”"c“vCJey»Ż ČĪCc|ś;ĒĮßłҟžt ņ/·Į篹†s7oų5 PĢE± ¢hH*»<‡V®ģŃ{–Œ vœÓRŽ«²¾æX_Ž‹A7ĮĆŪ·ÓX*~æ?¤X÷ļļ{ŁvŁeŻÓ×*ó i„Ø!„VB”Tŗ¶ÓÉŚl«å•”­cŠņöŒGóåé/|£żč@“G’ ¼ųā‹łŠ¼jށ1Æv™Ā $š¾šg*VĆ0ҐļéaY’ø@­&„µ¢Ón?‚÷Ęų²~p /ß¾ūī7=C±éU6ląĖ’šØĒ©bŻŗ†b¹:ēyŽriŚ7Ķ“\`żztXk­'M›H)䝡,ĪöīåĮßų üüõšĄ‡’ŒcnŗžzVŸ –čQBPÄ2‚ KÉĘ )°¼1d;/Œ1-!’zqx‰ļ1<śŻ75ÅÆ=öŲ±ei[ĄŸߔ’뮾š-Ļ}īņĆZsuĆ¢ō ņ<—ÖZY«Ižö“ĮCcÖ9JE+B朞µ·ūI\»Ķƒo|ć@)³?Ž|oÕ*¾zóͼõMozt] Ż~Ü¢bdĪ)źŲ³głš!€©”µ(ŠF*•APGˆˆÅˆyšYĘCozķ²ˆłDų šĄsĪ;/żŁŸ±ņŠ!&Ž’~ÜņIŠKb䷛ʳžµ°±8˜Å†aģ\ló¼;€„k‡”P„öK’Ā0¦äby Ay—öŻ Ń[ĖĮ+®(bzĖ E”P|mõjN’ńiæīu<öaĻįKūöńŠ˜_~ę3ē•ņ¤)SQA Œńī>§ČōU„†ĆŠYē4Z‡Q(Aó#C]=Ą{żį2sću“¼Xsō(¾ØI>)øķöŪyšĄ…ER·DkQ¢Ųc‰‰žŸ¾óŚLM¹Øø=2§š-ø’šų8SŸ’üIČIC‘'č1Ę"÷>a(uŠÅ•¦ż#C##ŅG‘#ĻSœs€EėnÄu.]~@‡ę“†…!üٱŁN;޵,r•ēt- Ž>‰U"£[Ń”žl”Źc*µšŲ»wļņ•£»>ūY%“DˆāĄ4Ŝ7Ų•'4,<¹į©‚łż*īČsMš¦Ęڼentt“ē¶)°eÓ&æoļ^„„čP¤Č )QqeA²@μöZްmÓ„¶žHģ987÷£T‚R*VŖj ÷>\VVĻ”W nŻźÄžżią\jŅ4ÕÅńtē,RZœShķ±VTŸ÷<žäśėÉĖō'ė<y3ń9ēž[D‹Ÿā‘<‘².“Öι Z½Z.ƒż*G©<żéy*DGj]EŃé@t³/”˜bą=/¾šĀåܝ—ó÷®Ī¾ü*6^?ū»ŠĢµ…ĘšēŽāŲ=Kš¶³<ĻU½nlŸCTś*Bnd쇖FkĀ,3„O 8ØP©B,ŅfŠ57 …*®4Em’BFĢg÷†Ž,“³A˜Åž‡.Š,Š…j÷ĖgęXkHÓ c,aŲŃBäk'&z|½ ÷vēNƤl><33³±ÕjE)•J„ʄeܽ{–X7óJ•kÆ8@±ė€‡µŻžŹRC“tĻ -ŹZŠ/WWĖYqŪ½§8MĢé…„*Rb F£Źkc,Ž7Iӄ$ɽsŽ4e/°xģ;’‰ W­× J=L£±ju„ D@Œµ® ™ååį¦(RiŅ4Dkƒ)Īåå tŁń¢®ßū¢®Æ81/]ŁēŠc;„ŠX«2ùā0Å<„ŒIŃŗŚZ[„ļ­•xļpNēÖ£Ż>lcʹĪLg›“‹O•ķ{ āčķ·Ū©ÉÉF23óšĮ#GŽžE0¦CUExß"Ļ›eĒ»ĒlĘå R#„ƹ„ĀóÕ­>—e5ĒJI¬mį}Š:ŰäyFF8×5"‹CS„Œ)=<„"Ā–³J“ēšN§I§s„G™xčŲ±q?Tƒ„>ESżĪńŪļ¼Ó½yÕŖ$yXdŁæ’bß¾Īś‘‘ÓāJ„†Ö ČņćĒi&IĒ_GÖāø2•$ œcżŠPqĢmµZGŹcŚ$I‡(Ŗ–~…äłqŅŌ ”Cėˆ0ĀŚ¢ā»Ųų,Y–†A)Ž)]ŻQ)ŠcĄ‘e-„®ŻnåĘ)5“off2‚½aL8­:sƆ}Žųź»}{ļ;vˆżēœ“®·Ót(bČYkt5s$Ļ… ĆLd™Ø ¹Lė<}äkj­GLšvu†8WŹ c”׌Ź,[AtB!Ž)ē2ć}`ŒQZŹP†aŠ“ÖĒĪe. ­ö> ĖŚ‰RB'EĘBk)Ė"”TG”8k£Ü{YŪI«ÕéČŚģ@§“m9tȊķŪ{|‚'–_Ū·Ė;@n“ū[-iŽ÷ŒŽ’5›~ljŹļ*##āČīŻnė¼éµkjJ®ŃA’H72ā»Fˆ¬Tо83y¶n]Ļ“›šņlŚäٳG°i“ßµgŲ²i“æćĪ;‹óǁ½÷ݧōА0ĒūŃuėüžVKšµk½>|XlÜøŃpēŽeĪ„/­AæčēDōŽū?Ū·o—ŻßŪ·o—KŻ’hūµų=÷¹§p §p §p §p ’%š’‡­·ķ:IIEND®B`‚libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-mem/mount-origin/index.html000066400000000000000000000006571357643561300340360ustar00rootroot00000000000000
Hello from the minimal https server example.
You can confirm the 404 page handler by going to this nonexistant page.
libwebsockets.org-logo.svg000066400000000000000000001403321357643561300370620ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-mem/mount-origin strict-csp.svg000066400000000000000000000302361357643561300345720ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls-mem/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls/000077500000000000000000000000001357643561300266265ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls/CMakeLists.txt000066400000000000000000000041021357643561300313630ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-tls) set(SRCS minimal-http-server-tls.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) require_lws_config(LWS_OPENSSL_SUPPORT 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls/README.md000066400000000000000000000033271357643561300301120ustar00rootroot00000000000000# lws minimal http server with tls ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-tls [2018/03/20 13:23:13:0131] USER: LWS minimal http server TLS | visit https://localhost:7681 [2018/03/20 13:23:13:0142] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/20 13:23:13:0142] NOTICE: Using SSL mode [2018/03/20 13:23:13:0146] NOTICE: SSL ECDH curve 'prime256v1' [2018/03/20 13:23:13:0146] NOTICE: HTTP2 / ALPN enabled [2018/03/20 13:23:13:0195] NOTICE: lws_tls_client_create_vhost_context: doing cert filepath localhost-100y.cert [2018/03/20 13:23:13:0195] NOTICE: Loaded client cert localhost-100y.cert [2018/03/20 13:23:13:0195] NOTICE: lws_tls_client_create_vhost_context: doing private key filepath [2018/03/20 13:23:13:0196] NOTICE: Loaded client cert private key localhost-100y.key [2018/03/20 13:23:13:0196] NOTICE: created client ssl context for default [2018/03/20 13:23:14:0207] NOTICE: vhost default: cert expiry: 730459d ``` Visit https://localhost:7681 Because it uses a selfsigned certificate, you will have to make an exception for it in your browser. ## Certificate creation The selfsigned certs provided were created with ``` echo -e "GB\nErewhon\nAll around\nlibwebsockets-test\n\nlocalhost\nnone@invalid.org\n" | openssl req -new -newkey rsa:4096 -days 36500 -nodes -x509 -keyout "localhost-100y.key" -out "localhost-100y.cert" ``` they cover "localhost" and last 100 years from 2018-03-20. You can replace them with commercial certificates matching your hostname. ## HTTP/2 If you built lws with `-DLWS_WITH_HTTP2=1` at cmake, this simple server is also http/2 capable out of the box. If the index.html was loaded over http/2, it will display an HTTP 2 png. libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls/localhost-100y.cert000066400000000000000000000040721357643561300321670ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls/localhost-100y.key000066400000000000000000000063101357643561300320170ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls/minimal-http-server-tls.c000066400000000000000000000053641357643561300335110ustar00rootroot00000000000000/* * lws-minimal-http-server-tls * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws, * with three extra lines giving it tls (ssl) capabilities, which in * turn allow operation with HTTP/2 if lws was configured for it. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * * You can change that by changing mount.origin below. */ #include #include #include static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server TLS | visit https://localhost:7681\n"); signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; if (lws_cmdline_option(argc, argv, "-h")) info.options |= LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls/mount-origin/000077500000000000000000000000001357643561300312555ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls/mount-origin/404.html000066400000000000000000000002651357643561300324550ustar00rootroot00000000000000

404

Sorry, that file doesn't exist. libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls/mount-origin/example.js000066400000000000000000000012711357643561300332470ustar00rootroot00000000000000document.addEventListener("DOMContentLoaded", function() { var transport_protocol = ""; if ( performance && performance.timing.nextHopProtocol ) { transport_protocol = performance.timing.nextHopProtocol; } else if ( window.chrome && window.chrome.loadTimes ) { transport_protocol = window.chrome.loadTimes().connectionInfo; } else { var p = performance.getEntriesByType("resource"); for (var i=0; i < p.length; i++) { var value = "nextHopProtocol" in p[i]; if (value) transport_protocol = p[i].nextHopProtocol; } } if (transport_protocol == "h2") document.getElementById("transport").innerHTML = ""; } }, false);libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls/mount-origin/favicon.ico000066400000000000000000000025761357643561300334100ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls/mount-origin/http2.png000066400000000000000000000166131357643561300330330ustar00rootroot00000000000000‰PNG  IHDR@qeO„Ö pHYsCC,ę·ētEXtSoftwarewww.inkscape.org›ī<IDATxœķœ{”žU}ļ?ūņ\ŽĖd2!!!@ˆ:Ķ1Cė… ˆZ ļ§.EcO½j„zŖmķQj»°ķ$­ÖćŖÖ„e)еœ.XWµŠ*„F«Ų(1š ™dBfęĶ{y.ūržxžwnļ;™,Īj¾k͚™żüžēŁū÷ģ½÷ §p §p §p §p §š_b9ļ½Ų±cĒ,ķųų8;wīŪŹ’ļŲ½[lówģŽ-¶ŽyÖ¬»öģ[FFÜĪyĻŪ¶m›gĒóļŲś’—Ąž=bošJFG­T,““žŻ»}łbß„ķög¼hŸ{ĮĪ¢ū¾Ż»wūńńq/„š,%ą½ģÜ)÷·ZA”e2 CWQJ©<—2ŠÄdšśµRŖf­&E§#d’54¤l»Öf¹Rašē¢ĒIÓ_QŹ5£”!‘I§£”s “RER:!e @8'­µ&TŖŃt.Y”µ{°IāOņÓy.kCC¦jE£(k„UŹuǐ­XaŻÄDņƒuė̶mŪ\?Fōe€qĒķ·«_žÅ/*YµŗRv:CV)ćņ<ŌR†6MµUJ[Øy.}Yom,Y!¤¬;Ą įźB„Mļ3å}‚RŲM½¢°“¦Y½VSi§³Z z!œBäĪéż ©u3—ņēŽ˜‰)hoyĒ;Ģb&ōgĄöķ’±±čH»½>˲M&ĖĪ>-ŽW 8—SÆ×P*<ĪY‚@!„Ą{O ”µ@© R ¬Ķ‘2Bʹ(å±Vļ5RfX[|9­«(‘ē)BXŅ“M§Ó$Ļćœ”ÕŹØ×k“įœÅū€Zm­C¼ļIbš>&MŪ>ü‹@ėļW¢hļŹ›āā‹Ķü±ź~_×gس’dČdŁęÕ•ŹłńʍgQ­ŽE’ pHéĆ:R*œóx/Ńŗų-„B‹Ru¼·@„sŗ\W)` ö ‡Rē$ŽĖŁ6)Œ18—#D†sMŒÉqĪ eŽ”1Ī8—U¬³Ićœ%Ir²,#Ig„©9ŠlīC©+÷ģiyļÅüYŠĆ¼gĖĪb2MWäƌĘk֜ɹšF¢h5q„$RJ@Ŗüŗ!BtŸS Ö{‰µA9p0¦`āģkR ŒhķqĪE!Ī„0Q“ƒ£;ē4Ž+¤ōX[ōĒZƒ9R¶€P®\9%¦§G•1?gd¤gĘ÷2 D;I¬Kµ:D®Aė5H#„BJ‰” 8Wtŗ@÷+z„@ń[)A¹ŁEŻNtļéŽļ CˆņŁļ!<Ö:œó(%f TA!˜]JåT*R&Ōė5/„ńÖz&&cĄžVKā\¤ĆŠE­”Ŗ– „”B)(Ö0³_½h+jm·ĆąÜ”Å’ŌšdĮÜĖ :÷s}S ¬u%c¤¦ *QDcŗĻōXK9;Aą"ÉĄ­õw‘-Ė!0Ÿü¤*•Ō;gšŽP©0ū…”’’āå_~šƒ<ėÜså_łŠŸ\²é9ĻGåSż(ÓiŹUų@?Ͼķ×_łJź+Wrżõ×÷\›’ĻUļ}Æ8ļĀ Å[.æœC‡ͶŒŒš’æ˜W^ɳ6mņå*–ÖēņŠŹ įĪīӁ¾3`4ŠÜ0Ģl§“£µGK:¼h-:SSS4Žgö+—Ģ›žžfjjŠ4ĻIJŗ”Õn#ƒ`YŗNšŠééi:„‚Õ«W099É-·ŽŹ7o»’Ę7Äęg<ƗĖT‘e‚8Žā0 [IéZm€%ą=ūÆ»N‘$Cu„Ö&Hiń^~8f÷‚īß]ĮŪ~ó7yĶĖ^B`…`Ó¹ēšƽ–]TLĘZ­†”’?ū£?ą¾ūļ絯=÷Žy'§­Z_śöļ~€(Š8²oxĻæ~ļ{¼źµÆeff†}ę3|ŗčO±Īłé4mT‡†š­éi»<€hõjiÖµ8ސ2œŻŻ‹ĶmĮ {2ļŚšš0ĆĆĆ̾g¬[Ēӟö“äkŹ/z¬Łœm;ēœs8}͚%Ÿ¼ą‚ xłĖ_Ī 7ÜĄīūļ/Ś•rYęHÓć‘RM:öcĒģØX8 ś2@NM ­”±Ž{„PHYˆ¤ņ„]“ŪmvŻw߂Ncüæ$–ŗ¶˜ĮĖA)<@½Vc^m)9“Qź˜ŃŚló‹ŸŲBå¹Ī…Q„aŒ÷Ž+mL÷ļŁĆłĻžņ|<čĆē÷žĒŠītøé–[øūī»xÅ„—ā“ųX!rœóĀūĢf™ßY«Įœųś1ąŽ;d^©DY£Q;])÷²TjzÖOEœ¹~ż‚>šĄXŪCzR‘e¾š… Ś.Łŗ•w_qEw™Œ…BSÕĆĆrۚ5]½”æ&čA09éÓ45U„Zkӊm¼·(%°V ēnŪ¼™ļß}÷=ąō³Ībrrņ‰;Pˆł‹ž’|“Ölܰ—^|1’ć²ĖPB:÷)=Žœ3BZģžœ”Ž{+ęͪްfØG‘m>l‡½—d€#Ļ%aø¤]żd" Cīŗķ¶Bóƒā·sÅĄ½„āeQ*%ĻS)e–g™ėtzśæ` ąŁŗÕ9pĄćœ”ҁFŹ`V}Ŗb”8.žŃ:4ÖĘÕ8®īMÓ‘ÕÓ°cĒĘŖU†!©µfÖLõ=čS…¦š¾J…^ˆµćĒulŒœļŁ‚>K`||ÜóµÆłģȁēŽ[„š(åž¶aƒæō×~MŒ>ć ovŽæčEĢ4¬?ćŒ—„÷\zÉ%œvŚiKö}E­VŠyO† ®¾j—^r a×vč@ Å„(E”*}Z”“”į™gÅų¶m~ūöķóˆ{˜ēŁ;ć“Ń83ʲ­gž…¬]{>ZŸÖu” ˆ¢b­ĘĻ`ņś‰Bw($'M}éKheæąČ‘ķæ÷Ž„^’®®Õ8kŪ¶d¾? W‚dbĀiļm†ŠBddaK{ü©‹łĀŚBzļ¬R.Čs§¦¦–·ą£Č„|¶©pw-­ö>UPx†<…OAb­DJ9Qb­īd™]<[{Fä]€Cßń>+}׳/zŖ£š9F14E5ƔķYó½ŸŌ{¶ŒŒˆŠŚhDė:APÅūbיSxžźKĮ£”4Z‹¶1¹P*Ż»w/Ž/ģz—X«%sctT«i” š>,ļė†ēóœģē?'č!ņƒq>/V™Z¹µjśŒ3ˆŸżldį€yōPŖŠēö­ćs<3& ¼7“QäÄ Öąa„T’$]äQŹ”»ķÜŻ0"¹ļ>7ßLė;ß!łĮpĪņƒŠšų¼óŗäF~ė·ĪīēĒYÖ®łī~UC™÷-Ēvˆ ]aīu=ٱCUAÖ!,°»ņ·\«Åō—¾Ä±k®!żÉOļ|ʐÜ{/ɽ÷rä#!|Å+Ų°cqéL9!ę÷©p‹Å”]–å€crņÄŖ0ć愍†Bˆ•„a čśż»;l’w§)\}5?Ū¼™CļyĻcü"ēȒ韸’Ā Łżśž‰0·7y¼‘cL µī;e{°cCJ9éœAėŸ/D7Š#śMżÖæü {/ø€‰÷æsōč£åŠĪį?žqī|Žó°ķörä]&ŲīßRŹŠćwMMI)}ūL kL„tieYœ›»Ń˜bGĢs_uū_łJ²Ÿżģ±īQ`õO~ĀWĘĘH–bB”wc…ųRq.„ŖŒŒōLį¾ XQDnR:Ę“ŹŒ.7ŗĘ-·pōŸXr?x"°éČ®}į {ÄYœ“h­B„a„Ŗ”ƒž¾öŪ|:Į"0"„²Ž›2ę.Źé椠FFXóÉOņ¶zļv_¹ńFīśÖ·ųõW½ją=ż‚ 8żC˜~-pß8×°ŲL/ee yžeŠz]ūE¾ĶŒ2ŠD»ÓY9†UāxBTqNHŲšÖ·ņŸł ?øēžG5šłxĘ»ŽE>44­&x`®”+¦»Ź[‘^“GJ…6 ķīf³Ēš]rŃ)­£ ^A©bo Sŗ˜NȄ7¼īuœuę™  „Ö¬zéK¦wIBš¦s ŽŒčŚÖŚNžŪ0Ė\gjŹ/–½K­–0E`1,“ ,ŽēĖĶ€“…xÓ¦i;@Ņe@©ŸĢ¢›œ%e;¶ō¹æw Œ{«µ —Rd„Vµ“Č<ÉÕź@thÕ®eNSu(e±6Da[d¬Į ĘPnŒÕZ%I:8—ĪŅ>IĮsäČ@t‡ØZ%z4Ü")K)C…u­WÄBÄūĆP-^ĮżUį0t™”¼÷(UB¤œKO›Ė {B`&&¢{ŲøaĆ\ĆBMŠkeØTą!޲lłŠŖ°ö>BˆBł ‚9qų$ ݳg ŗū€_³šŠ%Päxo‡1IÓŚD:—Ł‘‘Į!U©ÖåyŠ1-ņÜĶfr>Į¦Æ™˜ ™Ÿur|ø`±R$T:“Nńސē@<«Ļ3ś*BĪūV’e Žž“ł¦šāŻö$¢ło Ää6p/š«/xĮ\ćÜL°@Ž÷-¼÷6˼ɲüGI²üčfŽ+cōt–u°¶C‘‚ś¤L’Ę?žć@tßź«Vqхö'ĀQäfåa(į½\Ń'u„ļˆff“‚ØÖõ ‚ė‰ >KĮLLŠüēˆöą5Æ~5Z/’ĪÅ>„ń>Fˆ„bĄ )Åʵk—×ļŁ±6y®b„B” ‚R#~#ĮS÷wxc–„;Ü ¼ķ­o]x”H‘ó„ķ"D8Ž””Ź‘ļ?|xysxčŒ3„‡8·vmT©Ōč&/Kih‚'™>M™ŗīŗhožŪ3ŸÉ‹%JĶE ʛs¾™$ Ī%k5·¼OŠĪιÕT«u“ĮŚz yĀ>’Ōß’=y™ļw"ąVą]q‹Ć\eBG×u/)–‚WA ]éXŒlŁ“ÉRęBʜ””a”АRį}8» N2|’pōcˆö Y­ņ?ßüꮋ]†®0 W¤ DžŚĘxå}ˆµŠ"WP/H<:ÉÓ’Ųg?;Š×Ļ€k€w¾żķ¬,Sp{ś#„@Y*qt¼")ŻŽ>õ½ ˜œōa˜\Ź£¤é ֚2éHĢśObxÜ>Ģä‡?<ķ @³^ēO®¼ri¢ł)3E‚gT‹ćŲ(µbtŻŗTįmŪ|dm”u}6Ež¼€CW^‰™Y–®\ ¼ēŻļ^:znšcœxßi$I"ĖöÖė=Įž±Į¼V3NE×=kœd4o»ĘM7 Dū9ĄóŽ?ųƒŽ‹óŽ…Ö);“¶¬måyޘyč!·¼GØ¬Ī“AŠ ŻnŅ­‘ņ¤ŖĄ¶Ńąįßū½h®¶’éŸĪ¹Ąū”k uÓd‹ ×T;7é“īlqÅR°‘MŒiam^–æ™RĒV3—"÷1ń¾÷‘?ųą@“’Ųtī¹¼ėļXxa±6ZX¬Żś¢”N§M’4|µW¬YćxĶk³OMéÜt~üųŽO"D0³zĄćō’źW™žā¢ż:p—\ó·ŪĻńы";Ä£TŽÓ“ŪĒ…÷²11!YIb ¬‡Ą*eŽ43äy»¬Ą8)Ó?č!žīļD;Eńõß~łå¼`¹ŗ„ł³”p޼·äyx?-ŪmŃ-Ųž~ Q­¦ˆĻ\±b BŌ1¦B”U=.&ų<ēĄå—cyd śæ¢õėłČ ±‚"mÖē2’¤™¦iGH)V¬Yӕ'ö īܹSŚĘ¬¢RYA®Ā¹ ĘĢ„Č<ĘĶpāŹ+ißsĻ@“7ß‚k?õ©o|óQX¬Eu©”„T†@#Ļ%kֈe}‚»ĖZżĄ{I&e"“g˜łņ—9vķµŃ>B!ó_ł²— ž’¹JR÷“"ŽWcVÅŽ»''åņbC— ”°6„ȵ1e‚ŅcśņéīŻ<üūæ?-EPõœĶ›ł«>›Ö’˜_½Zų+H9D)Aī}Š™šZ^ ŒLNā„˜*KŌ›xļ‚ĒTäšMzĖ[p­Ö@ōØ×¹į _ ņX&„ cƒÖ‘²vJU†ÓT”"c“vCJey»Ż ČĪCc|ś;ĒĮßłҟžt ņ/·Į篹†s7oų5 PĢE± ¢hH*»<‡V®ģŃ{–Œ vœÓRŽ«²¾æX_Ž‹A7ĮĆŪ·ÓX*~æ?¤X÷ļļ{ŁvŁeŻÓ×*ó i„Ø!„VB”Tŗ¶ÓÉŚl«å•”­cŠņöŒGóåé/|£żč@“G’ ¼ųā‹łŠ¼jށ1Æv™Ā $š¾šg*VĆ0ҐļéaY’ø@­&„µ¢Ón?‚÷Ęų²~p /ß¾ūī7=C±éU6ląĖ’šØĒ©bŻŗ†b¹:ēyŽriŚ7Ķ“\`żztXk­'M›H)䝡,ĪöīåĮßų üüõšĄ‡’ŒcnŗžzVŸ –čQBPÄ2‚ KÉĘ )°¼1d;/Œ1-!’zqx‰ļ1<śŻ75ÅÆ=öŲ±ei[ĄŸߔ’뮾š-Ļ}īņĆZsuĆ¢ō ņ<—ÖZY«Ižö“ĮCcÖ9JE+B朞µ·ūI\»Ķƒo|ć@)³?Ž|oÕ*¾zóͼõMozt] Ż~Ü¢bdĪ)źŲ³głš!€©”µ(ŠF*•APGˆˆÅˆyšYĘCozķ²ˆłDų šĄsĪ;/żŁŸ±ņŠ!&Ž’~ÜņIŠKb䷛ʳžµ°±8˜Å†aģ\ló¼;€„k‡”P„öK’Ā0¦äby Ay—öŻ Ń[ĖĮ+®(bzĖ E”P|mõjN’ńiæīu<öaĻįKūöńŠ˜_~ę3ē•ņ¤)SQA Œńī>§ČōU„†ĆŠYē4Z‡Q(Aó#C]=Ą{żį2sću“¼Xsō(¾ØI>)øķöŪyšĄ…ER·DkQ¢Ųc‰‰žŸ¾óŚLM¹Øø=2§š-ø’šų8SŸ’üIČIC‘'č1Ę"÷>a(uŠÅ•¦ż#C##ŅG‘#ĻSœs€EėnÄu.]~@‡ę“†…!üٱŁN;޵,r•ēt- Ž>‰U"£[Ń”žl”Źc*µšŲ»wļņ•£»>ūY%“DˆāĄ4Ŝ7Ų•'4,<¹į©‚łż*īČsMš¦Ęڼentt“ē¶)°eÓ&æoļ^„„čP¤Č )QqeA²@μöZްmÓ„¶žHģ987÷£T‚R*VŖj ÷>\VVĻ”W nŻźÄžżią\jŅ4ÕÅńtē,RZœShķ±VTŸ÷<žäśėÉĖō'ė<y3ń9ēž[D‹Ÿā‘<‘².“Öι Z½Z.ƒż*G©<żéy*DGj]EŃé@t³/”˜bą=/¾šĀåܝ—ó÷®Ī¾ü*6^?ū»ŠĢµ…ĘšēŽāŲ=Kš¶³<ĻU½nlŸCTś*Bnd쇖FkĀ,3„O 8ØP©B,ŅfŠ57 …*®4Em’BFĢg÷†Ž,“³A˜Åž‡.Š,Š…j÷ĖgęXkHÓ c,aŲŃBäk'&z|½ ÷vēNƤl><33³±ÕjE)•J„ʄeܽ{–X7óJ•kÆ8@±ė€‡µŻžŹRC“tĻ -ŹZŠ/WWĖYqŪ½§8MĢé…„*Rb F£Źkc,Ž7Iӄ$ɽsŽ4e/°xģ;’‰ W­× J=L£±ju„ D@Œµ® ™ååį¦(RiŅ4Dkƒ)Īåå tŁń¢®ßū¢®Æ81/]ŁēŠc;„ŠX«2ùā0Å<„ŒIŃŗŚZ[„ļ­•xļpNēÖ£Ż>lcʹĪLg›“‹O•ķ{ āčķ·Ū©ÉÉF23óšĮ#GŽžE0¦CUExß"Ļ›eĒ»ĒlĘå R#„ƹ„ĀóÕ­>—e5ĒJI¬mį}Š:ŰäyFF8×5"‹CS„Œ)=<„"Ā–³J“ēšN§I§s„G™xčŲ±q?Tƒ„>ESżĪńŪļ¼Ó½yÕŖ$yXdŁæ’bß¾Īś‘‘ÓāJ„†Ö ČņćĒi&IĒ_GÖāø2•$ œcżŠPqĢmµZGŹcŚ$I‡(Ŗ–~…äłqŅŌ ”Cėˆ0ĀŚ¢ā»Ųų,Y–†A)Ž)]ŻQ)ŠcĄ‘e-„®ŻnåĘ)5“off2‚½aL8­:sƆ}Žųź»}{ļ;vˆżēœ“®·Ót(bČYkt5s$Ļ… ĆLd™Ø ¹Lė<}äkj­GLšvu†8WŹ c”׌Ź,[AtB!Ž)ē2ć}`ŒQZŹP†aŠ“ÖĒĪe. ­ö> ĖŚ‰RB'EĘBk)Ė"”TG”8k£Ü{YŪI«ÕéČŚģ@§“m9tȊķŪ{|‚'–_Ū·Ė;@n“ū[-iŽ÷ŒŽ’5›~ljŹļ*##āČīŻnė¼éµkjJ®ŃA’H72ā»Fˆ¬Tо83y¶n]Ļ“›šņlŚäٳG°i“ßµgŲ²i“æćĪ;‹óǁ½÷ݧōА0ĒūŃuėüžVKšµk½>|XlÜøŃpēŽeĪ„/­AæčēDōŽū?Ū·o—ŻßŪ·o—KŻ’hūµų=÷¹§p §p §p §p ’%š’‡­·ķ:IIEND®B`‚libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls/mount-origin/index.html000066400000000000000000000006571357643561300332620ustar00rootroot00000000000000
Hello from the minimal https server example.
You can confirm the 404 page handler by going to this nonexistant page.
libwebsockets.org-logo.svg000066400000000000000000001403321357643561300363060ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-tls/mount-origin/strict-csp.svg000066400000000000000000000302361357643561300340750ustar00rootroot00000000000000 libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server/000077500000000000000000000000001357643561300260265ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server/CMakeLists.txt000066400000000000000000000040031357643561300305630ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server) set(SRCS minimal-http-server.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif()libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server/README.md000066400000000000000000000005011357643561300273010ustar00rootroot00000000000000# lws minimal http server ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server [2018/03/04 09:30:02:7986] USER: LWS minimal http server | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server/minimal-http-server.c000066400000000000000000000045451357643561300321110ustar00rootroot00000000000000/* * lws-minimal-http-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server/mount-origin/000077500000000000000000000000001357643561300304555ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server/mount-origin/404.html000066400000000000000000000002271357643561300316530ustar00rootroot00000000000000

404

Sorry, that file doesn't exist. libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server/mount-origin/favicon.ico000066400000000000000000000025761357643561300326100ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server/mount-origin/index.html000066400000000000000000000005451357643561300324560ustar00rootroot00000000000000
Hello from the minimal http server example.
You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000001403321357643561300355060ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server/mount-origin libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server/mount-origin/strict-csp.svg000066400000000000000000000302361357643561300332750ustar00rootroot00000000000000 libwebsockets-3.2.1/minimal-examples/raw/000077500000000000000000000000001357643561300204255ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/raw/README.md000066400000000000000000000015611357643561300217070ustar00rootroot00000000000000|name|demonstrates| ---|--- minimal-raw-adopt-tcp|Shows how to have lws adopt an existing tcp socket something else had connected minimal-raw-adopt-udp|Shows how to create a udp socket and read and write on it minimal-raw-fallback-http|Shows how to run a normal http(s) server that falls back to a specified role + protocol minimal-raw-file|Shows how to adopt a file descriptor (device node, fifo, file, etc) into the lws event loop and handle events minimal-raw-netcat|Writes stdin to a remote server and prints results on stdout minimal-raw-proxy-fallback|Shows how to run a normal http(s) server that falls back to a proxied connection to a specified IP and port minimal-raw-proxy|Shows how to set up a vhost so it listens for connections and proxies them to a specified IP and port minimal-raw-vhost|Shows how to set up a vhost that listens and accepts RAW socket connections libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-adopt-tcp/000077500000000000000000000000001357643561300245335ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-adopt-tcp/CMakeLists.txt000066400000000000000000000037271357643561300273040ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-raw-adopt-tcp) set(SRCS minimal-raw-adopt-tcp.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-adopt-tcp/README.md000066400000000000000000000055531357643561300260220ustar00rootroot00000000000000# lws minimal ws server raw adopt tcp This example is only meaningful if you are integrating lws in another app which generates its own connected sockets. In some cases you may want lws to "adopt" the socket. (If you simply want a connected client raw socket using lws alone, you can just use lws_client_connect_via_info() with info.method = "RAW". http-client/minimal-http-client shows how to do that, just set info.method to "RAW".) This example demonstrates how to adopt a foreign, connected socket into lws as a raw wsi, bound to a specific lws protocol. The example connects a socket itself to libwebsockets.org:80, and then has lws adopt it as a raw wsi. The lws protocol writes "GET / HTTP/1.1" to the socket and hexdumps what was sent back. The socket won't close until the server side times it out, since it's a raw socket that doesn't understand it's looking at http. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-raw-adopt-tcp [2018/03/23 09:03:57:1960] USER: LWS minimal raw adopt tcp [2018/03/23 09:03:57:1961] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/23 09:03:57:2079] USER: Starting connect... [2018/03/23 09:03:57:4963] USER: Connected... [2018/03/23 09:03:57:4963] USER: LWS_CALLBACK_RAW_ADOPT [2018/03/23 09:03:57:7842] USER: LWS_CALLBACK_RAW_RX (186) [2018/03/23 09:03:57:7842] NOTICE: [2018/03/23 09:03:57:7842] NOTICE: 0000: 48 54 54 50 2F 31 2E 31 20 33 30 31 20 52 65 64 HTTP/1.1 301 Red [2018/03/23 09:03:57:7842] NOTICE: 0010: 69 72 65 63 74 0D 0A 73 65 72 76 65 72 3A 20 6C irect..server: l [2018/03/23 09:03:57:7842] NOTICE: 0020: 77 73 77 73 0D 0A 53 74 72 69 63 74 2D 54 72 61 wsws..Strict-Tra [2018/03/23 09:03:57:7843] NOTICE: 0030: 6E 73 70 6F 72 74 2D 53 65 63 75 72 69 74 79 3A nsport-Security: [2018/03/23 09:03:57:7843] NOTICE: 0040: 20 6D 61 78 2D 61 67 65 3D 31 35 37 36 38 30 30 max-age=1576800 [2018/03/23 09:03:57:7843] NOTICE: 0050: 30 20 3B 20 69 6E 63 6C 75 64 65 53 75 62 44 6F 0 ; includeSubDo [2018/03/23 09:03:57:7843] NOTICE: 0060: 6D 61 69 6E 73 0D 0A 6C 6F 63 61 74 69 6F 6E 3A mains..location: [2018/03/23 09:03:57:7843] NOTICE: 0070: 20 68 74 74 70 73 3A 2F 2F 6C 69 62 77 65 62 73 https://libwebs [2018/03/23 09:03:57:7843] NOTICE: 0080: 6F 63 6B 65 74 73 2E 6F 72 67 0D 0A 63 6F 6E 74 ockets.org..cont [2018/03/23 09:03:57:7843] NOTICE: 0090: 65 6E 74 2D 74 79 70 65 3A 20 74 65 78 74 2F 68 ent-type: text/h [2018/03/23 09:03:57:7843] NOTICE: 00A0: 74 6D 6C 0D 0A 63 6F 6E 74 65 6E 74 2D 6C 65 6E tml..content-len [2018/03/23 09:03:57:7843] NOTICE: 00B0: 67 74 68 3A 20 30 0D 0A 0D 0A gth: 0.... [2018/03/23 09:03:57:7843] NOTICE: [2018/03/23 09:04:03:3627] USER: LWS_CALLBACK_RAW_CLOSE ``` Note the example does everything itself, after 5s idle the remote server closes the connection after which the example continues until you ^C it. libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-adopt-tcp/minimal-raw-adopt-tcp.c000066400000000000000000000111601357643561300310040ustar00rootroot00000000000000/* * lws-minimal-raw-adopt-tcp * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates integrating somebody else's connected tcp * socket into the lws event loop as a RAW wsi. It's interesting in * the kind of situation where you already have a connected socket * in your application, and you need to hand it over to lws to deal with. * * Lws supports "adopting" these foreign sockets. * * If you simply want a connected client raw socket using lws alone, you * can just use lws_client_connect_via_info() with info.method = "RAW". * */ #include #include #include #if !defined(WIN32) #include #include #include #include #endif #include #include #include #include #include #include static int callback_raw_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { /* callbacks related to raw socket descriptor */ case LWS_CALLBACK_RAW_ADOPT: lwsl_user("LWS_CALLBACK_RAW_ADOPT\n"); lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RAW_CLOSE: lwsl_user("LWS_CALLBACK_RAW_CLOSE\n"); break; case LWS_CALLBACK_RAW_RX: lwsl_user("LWS_CALLBACK_RAW_RX (%d)\n", (int)len); lwsl_hexdump_level(LLL_NOTICE, in, len); break; case LWS_CALLBACK_RAW_WRITEABLE: if (lws_write(wsi, (uint8_t *)"GET / HTTP/1.1\xd\xa\xd\xa", 18, LWS_WRITE_RAW) != 18) { lwsl_notice("%s: raw write failed\n", __func__); return 1; } break; default: break; } return 0; } static struct lws_protocols protocols[] = { { "raw-test", callback_raw_test, 0, 0 }, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; lws_sock_file_fd_type sock; struct addrinfo h, *r, *rp; struct lws_vhost *vhost; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw adopt tcp\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } info.port = CONTEXT_PORT_NO_LISTEN_SERVER; info.protocols = protocols; vhost = lws_create_vhost(context, &info); if (!vhost) { lwsl_err("lws vhost creation failed\n"); goto bail; } /* * Connect our own "foreign" socket to libwebsockets.org:80 * * Normally you would do this with lws_client_connect_via_info() inside * the lws event loop, hiding all this detail. But this example * demonstrates how to integrate an externally-connected "foreign" * socket, so we create one by hand. */ memset(&h, 0, sizeof(h)); h.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ h.ai_socktype = SOCK_STREAM; h.ai_protocol = IPPROTO_TCP; n = getaddrinfo("libwebsockets.org", "80", &h, &r); if (n) { lwsl_err("%s: problem resolving libwebsockets.org: %s\n", __func__, gai_strerror(n)); return 1; } for (rp = r; rp; rp = rp->ai_next) { sock.sockfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); if (sock.sockfd != LWS_SOCK_INVALID) break; } if (!rp) { lwsl_err("%s: unable to create INET socket\n", __func__); freeaddrinfo(r); return 1; } lwsl_user("Starting connect...\n"); if (connect(sock.sockfd, rp->ai_addr, sizeof(*rp->ai_addr)) < 0) { lwsl_err("%s: unable to connect to libwebsockets.org:80\n", __func__); freeaddrinfo(r); return 1; } freeaddrinfo(r); signal(SIGINT, sigint_handler); lwsl_user("Connected...\n"); /* our foreign socket is connected... adopt it into lws */ if (!lws_adopt_descriptor_vhost(vhost, LWS_ADOPT_SOCKET, sock, protocols[0].name, NULL)) { lwsl_err("%s: foreign socket adoption failed\n", __func__); goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-adopt-udp/000077500000000000000000000000001357643561300245355ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-adopt-udp/CMakeLists.txt000066400000000000000000000037271357643561300273060ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-raw-adopt-udp) set(SRCS minimal-raw-adopt-udp.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-adopt-udp/README.md000066400000000000000000000033671357643561300260250ustar00rootroot00000000000000# lws minimal ws server raw adopt udp This example demonstrates echoing packets on a UDP socket in lws. A "foreign" UDP socket is created, bound (so it can "listen"), and adopted into lws event loop. It acts like a tcp RAW mode connection in lws and uses the same callbacks. Writing is a bit different for UDP. By default, the system has no idea about the receiver state and so asking for a callback_on_writable() always believes that the socket is writeable... the callback will happen next time around the event loop if there are no pending partials. With UDP, there is no "connection". You need to write with sendto() and direct the packets to a specific destination. You can learn the source of the last packet that arrived at the LWS_CALLBACK_RAW_RX callback by getting a `struct lws_udp *` from `lws_get_udp(wsi)`. To be able to send back to that guy, you should take a copy of the `struct lws_udp *` and use the .sa and .salen members in your sendto(). However the kernel may not accept to buffer / write everything you wanted to send. So you are responsible to watch the result of sendto() and resend the unsent part next time. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-raw-adopt-udp $ ./lws-minimal-raw-adopt-udp [2018/03/24 08:12:37:8869] USER: LWS minimal raw adopt udp | nc -u 127.0.0.1 7681 [2018/03/24 08:12:37:8870] NOTICE: Creating Vhost 'default' (no listener), 1 protocols, IPv6 off [2018/03/24 08:12:37:8878] USER: LWS_CALLBACK_RAW_ADOPT [2018/03/24 08:12:41:5656] USER: LWS_CALLBACK_RAW_RX (6) [2018/03/24 08:12:41:5656] NOTICE: [2018/03/24 08:12:41:5656] NOTICE: 0000: 68 65 6C 6C 6F 0A hello. [2018/03/24 08:12:41:5656] NOTICE: ``` ``` $ nc -u 127.0.0.1 7681 hello hello ``` libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-adopt-udp/minimal-raw-adopt-udp.c000066400000000000000000000111261357643561300310120ustar00rootroot00000000000000/* * lws-minimal-raw-adopt-udp * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates integrating a connected udp * socket into the lws event loop as a RAW wsi. It's interesting in * the kind of situation where you already have a connected socket * in your application, and you need to hand it over to lws to deal with. * * Lws supports "adopting" these foreign sockets, and also has a helper API * to create, bind, and adopt them inside lws. */ #include #include #include #if !defined(WIN32) #include #include #include #include #endif #include #include #include #include #include #include static uint8_t sendbuf[4096]; static size_t sendlen; struct lws_udp udp; static int callback_raw_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { ssize_t n; int fd; switch (reason) { /* callbacks related to raw socket descriptor */ case LWS_CALLBACK_RAW_ADOPT: lwsl_user("LWS_CALLBACK_RAW_ADOPT\n"); break; case LWS_CALLBACK_RAW_CLOSE: lwsl_user("LWS_CALLBACK_RAW_CLOSE\n"); break; case LWS_CALLBACK_RAW_RX: lwsl_user("LWS_CALLBACK_RAW_RX (%d)\n", (int)len); lwsl_hexdump_level(LLL_NOTICE, in, len); /* * Take a copy of the buffer and the source socket address... */ udp = *(lws_get_udp(wsi)); sendlen = len; if (sendlen > sizeof(sendbuf)) sendlen = sizeof(sendbuf); memcpy(sendbuf, in, sendlen); /* * ... and we send it next time around the event loop. This * can be extended to having a ringbuffer of different send * buffers and targets queued. * * Note that UDP is ALWAYS writable as far as poll() knows * because there is no mechanism like the tcp window to * understand that packets are not being acknowledged. But * this allows the event loop to share out the work. */ lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RAW_WRITEABLE: if (!sendlen) break; fd = lws_get_socket_fd(wsi); if (fd < 0) /* keep Coverity happy: actually it cannot be < 0 */ break; /* * We can write directly on the UDP socket, specifying * the peer the write is directed to. * * However the kernel may only accept parts of large sendto()s, * leaving you to try to resend the remainder later. However * depending on how your protocol on top of UDP works, that * may involve sticking new headers before the remainder. * * For clarity partial sends just drop the remainder here. */ n = sendto(fd, #if defined(WIN32) (const char *) #endif sendbuf, sendlen, 0, &udp.sa, udp.salen); if (n < (ssize_t)len) lwsl_notice("%s: send returned %d\n", __func__, (int)n); break; default: break; } return 0; } static struct lws_protocols protocols[] = { { "raw-test", callback_raw_test, 0, 0 }, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; struct lws_vhost *vhost; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw adopt udp | nc -u 127.0.0.1 7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } info.port = CONTEXT_PORT_NO_LISTEN_SERVER; info.protocols = protocols; vhost = lws_create_vhost(context, &info); if (!vhost) { lwsl_err("lws vhost creation failed\n"); goto bail; } /* * Create our own "foreign" UDP socket bound to 7681/udp */ if (!lws_create_adopt_udp(vhost, 7681, LWS_CAUDP_BIND, protocols[0].name, NULL)) { lwsl_err("%s: foreign socket adoption failed\n", __func__); goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-fallback-http-server/000077500000000000000000000000001357643561300266605ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-fallback-http-server/CMakeLists.txt000066400000000000000000000040361357643561300314230ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-raw-fallback-http-server) set(SRCS minimal-raw-fallback-http-server.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-fallback-http-server/README.md000066400000000000000000000037341357643561300301460ustar00rootroot00000000000000# lws minimal raw fallback http server This is the same as the minimal http server, with one difference... if you connect to localhost:7681 with something that doesn't send recognizable http, then the connection will be switched to a raw-skt role and bind to a protocol that echoes anything sent back to the sender. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -s|Configure the server for tls / https and `LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT` -h|(needs -s) Configure the vhost also for `LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER`, allowing http service on tls port (caution... it's insecure then) -u|(needs -s) Configure the vhost also for `LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS`, so the server issues a redirect to https to clients that attempt to connect to a server configured for tls with http. ``` $ ./lws-minimal-raw-fallback-http-server [2018/11/29 14:27:34:3014] USER: LWS minimal raw fallback http server | visit http://localhost:7681 [2018/11/29 14:27:34:3243] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off ``` Visit http://127.0.0.1:7681 This allows testing of various combinations of special features for unexpected content on an http(s) listening socket. |cmdline args|http://127.0.0.1:7681|https://127.0.0.1:7681|ssh -p7681 127.0.0.1|flags| |---|---|---|---|---| |none|served|no tls|echos hello|LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG |-s|echos http GET|served|echos hello|LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG, LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT |-s -h|served|served|echos hello|LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG, LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT, LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER |-s -u|redirected to https|served|echos hello|LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG, LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT, LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-fallback-http-server/localhost-100y.cert000066400000000000000000000040721357643561300322210ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-fallback-http-server/localhost-100y.key000066400000000000000000000063101357643561300320510ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-raw-fallback-http-server.c000066400000000000000000000075341357643561300352110ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-fallback-http-server/* * lws-minimal-raw-fallback http-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. * * In addition, if the connection does to seem to be talking http, then it * falls back to a raw echo protocol. */ #include #include #include struct pss__raw_echo { uint8_t buf[2048]; int len; }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; static int callback_raw_echo(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss__raw_echo *pss = (struct pss__raw_echo *)user; switch (reason) { case LWS_CALLBACK_RAW_ADOPT: lwsl_notice("LWS_CALLBACK_RAW_ADOPT\n"); break; case LWS_CALLBACK_RAW_RX: lwsl_notice("LWS_CALLBACK_RAW_RX %ld\n", (long)len); if (len > sizeof(pss->buf)) len = sizeof(pss->buf); memcpy(pss->buf, in, len); pss->len = len; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RAW_CLOSE: lwsl_notice("LWS_CALLBACK_RAW_CLOSE\n"); break; case LWS_CALLBACK_RAW_WRITEABLE: lwsl_notice("LWS_CALLBACK_RAW_WRITEABLE\n"); lws_write(wsi, pss->buf, pss->len, LWS_WRITE_HTTP); break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "raw-echo", callback_raw_echo, sizeof(struct pss__raw_echo), 2048 }, { NULL, NULL, 0, 0 } }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw fallback http server | " "visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.mounts = &mount; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE | LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG; info.listen_accept_role = "raw-skt"; info.listen_accept_protocol = "raw-echo"; if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; if (lws_cmdline_option(argc, argv, "-u")) info.options |= LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS; if (lws_cmdline_option(argc, argv, "-h")) info.options |= LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER; } context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-fallback-http-server/mount-origin/000077500000000000000000000000001357643561300313075ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-fallback-http-server/mount-origin/404.html000066400000000000000000000002271357643561300325050ustar00rootroot00000000000000

404

Sorry, that file doesn't exist. libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-fallback-http-server/mount-origin/favicon.ico000066400000000000000000000025761357643561300334420ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-fallback-http-server/mount-origin/index.html000066400000000000000000000005621357643561300333070ustar00rootroot00000000000000
Hello from the minimal raw fallback http server example.
You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000001403321357643561300363400ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-fallback-http-server/mount-origin strict-csp.svg000066400000000000000000000302361357643561300340500ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-fallback-http-server/mount-origin libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-file/000077500000000000000000000000001357643561300235575ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-file/CMakeLists.txt000066400000000000000000000037151357643561300263250ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-raw-file) set(SRCS minimal-raw-file.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif()libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-file/README.md000066400000000000000000000027221357643561300250410ustar00rootroot00000000000000# lws minimal ws server This demonstrates adopting a file descriptor into the lws event loop. The filepath to open and adopt is given as an argument to the example app, eg ``` $ ./lws-minimal-raw-file ``` On a Linux system, some example files for testing might be - /proc/self/fd/0 (stdin) - /dev/ttyUSB0 (a USB <-> serial converter) - /dev/input/event (needs root... input device events) The example application opens the file in the protocol init handler, and hexdumps data from the file to the lws log as it becomes available. This isn't very useful standalone as shown here for clarity, but you can freely combine raw file descriptor adoption with other lws server and client features. Becuase raw file events have their own callback reasons, the handlers can be integrated in a single protocol that also handles http and ws server and client callbacks without conflict. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-raw-file /proc/self/fd/0 [2018/03/22 10:48:53:9709] USER: LWS minimal raw file [2018/03/22 10:48:53:9876] NOTICE: Creating Vhost 'default' port -2, 1 protocols, IPv6 off [2018/03/22 10:48:55:0037] NOTICE: LWS_CALLBACK_RAW_ADOPT_FILE [2018/03/22 10:48:55:9370] NOTICE: LWS_CALLBACK_RAW_RX_FILE [2018/03/22 10:48:55:9377] NOTICE: [2018/03/22 10:48:55:9408] NOTICE: 0000: 0A . ``` The example logs above show the result of typing the Enter key. libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-file/minimal-raw-file.c000066400000000000000000000072611357643561300270630ustar00rootroot00000000000000/* * lws-minimal-raw-file * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates adopting a file descriptor into the lws event * loop. */ #include #include #include #include #include #include struct raw_vhd { // lws_sock_file_fd_type u; int filefd; }; static char filepath[256]; static int callback_raw_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct raw_vhd *vhd = (struct raw_vhd *)lws_protocol_vh_priv_get( lws_get_vhost(wsi), lws_get_protocol(wsi)); lws_sock_file_fd_type u; uint8_t buf[1024]; int n; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct raw_vhd)); vhd->filefd = lws_open(filepath, O_RDWR); if (vhd->filefd == -1) { lwsl_err("Unable to open %s\n", filepath); return 1; } u.filefd = (lws_filefd_type)(long long)vhd->filefd; if (!lws_adopt_descriptor_vhost(lws_get_vhost(wsi), LWS_ADOPT_RAW_FILE_DESC, u, "raw-test", NULL)) { lwsl_err("Failed to adopt fifo descriptor\n"); close(vhd->filefd); vhd->filefd = -1; return 1; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (vhd && vhd->filefd != -1) close(vhd->filefd); break; /* callbacks related to raw file descriptor */ case LWS_CALLBACK_RAW_ADOPT_FILE: lwsl_notice("LWS_CALLBACK_RAW_ADOPT_FILE\n"); break; case LWS_CALLBACK_RAW_RX_FILE: lwsl_notice("LWS_CALLBACK_RAW_RX_FILE\n"); n = read(vhd->filefd, buf, sizeof(buf)); if (n < 0) { lwsl_err("Reading from %s failed\n", filepath); return 1; } lwsl_hexdump_level(LLL_NOTICE, buf, n); break; case LWS_CALLBACK_RAW_CLOSE_FILE: lwsl_notice("LWS_CALLBACK_RAW_CLOSE_FILE\n"); break; case LWS_CALLBACK_RAW_WRITEABLE_FILE: lwsl_notice("LWS_CALLBACK_RAW_WRITEABLE_FILE\n"); /* * you can call lws_callback_on_writable() on a raw file wsi as * usual, and then write directly into the raw filefd here. */ break; default: break; } return 0; } static struct lws_protocols protocols[] = { { "raw-test", callback_raw_test, 0, 0 }, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw file\n"); if (argc < 2) { lwsl_user("Usage: %s " " eg, /dev/ttyUSB0 or /dev/input/event0 or " "/proc/self/fd/0\n", argv[0]); return 1; } signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN_SERVER; /* no listen socket for demo */ info.protocols = protocols; lws_strncpy(filepath, argv[1], sizeof(filepath)); context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-netcat/000077500000000000000000000000001357643561300241165ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-netcat/CMakeLists.txt000066400000000000000000000037211357643561300266610ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-raw-netcat) set(SRCS minimal-raw-netcat.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-netcat/README.md000066400000000000000000000024411357643561300253760ustar00rootroot00000000000000# lws minimal raw netcat This example shows to to create a "netcat" that copies its stdin to a remote socket and prints what is returned in stdout. It has some advantage over the real netcat, it will wait 1s after stdin closes to print results that are in flight. ## build ``` $ cmake . && make ``` ## usage ``` $ echo -e -n "GET / http/1.1\r\n\r\n"| ./lws-minimal-raw-netcat [2018/05/02 08:53:53:2665] USER: LWS minimal raw netcat [--server ip] [--port port] [2018/05/02 08:53:53:2667] NOTICE: Creating Vhost 'default' (no listener), 1 protocols, IPv6 off [2018/05/02 08:53:53:2703] USER: Starting connect... [2018/05/02 08:53:53:5644] USER: Connected to libwebsockets.org:80... [2018/05/02 08:53:53:5645] USER: LWS_CALLBACK_RAW_ADOPT [2018/05/02 08:53:53:5645] USER: LWS_CALLBACK_RAW_ADOPT_FILE [2018/05/02 08:53:53:5646] USER: LWS_CALLBACK_RAW_RX_FILE [2018/05/02 08:53:53:5646] USER: LWS_CALLBACK_RAW_CLOSE_FILE [2018/05/02 08:53:53:8600] USER: LWS_CALLBACK_RAW_RX (186) HTTP/1.1 301 Redirect server: lwsws Strict-Transport-Security: max-age=15768000 ; includeSubDomains location: https://libwebsockets.org content-type: text/html content-length: 0 ``` Note the example does everything itself, after 5s idle the remote server closes the connection after which the example continues until you ^C it. libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-netcat/minimal-raw-netcat.c000066400000000000000000000140341357643561300277550ustar00rootroot00000000000000/* * lws-minimal-raw-netcat * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates sending stdin to a remote socket and printing * what is returned to stdout. * * All the logging is on stderr, so you can tune it out with 2>log * or whatever. */ #include #include #include #if !defined(WIN32) #include #include #include #include #include #endif #include #include #include #include #include static struct lws *raw_wsi, *stdin_wsi; static uint8_t buf[LWS_PRE + 4096]; static int waiting, interrupted; static struct lws_context *context; static int us_wait_after_input_close = LWS_USEC_PER_SEC / 10; static int callback_raw_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { const char *cp = (const char *)in; switch (reason) { /* callbacks related to file descriptor */ case LWS_CALLBACK_RAW_ADOPT_FILE: lwsl_user("LWS_CALLBACK_RAW_ADOPT_FILE\n"); break; case LWS_CALLBACK_RAW_CLOSE_FILE: lwsl_user("LWS_CALLBACK_RAW_CLOSE_FILE\n"); /* stdin close, wait 1s then close the raw skt */ stdin_wsi = NULL; /* invalid now we close */ if (raw_wsi) lws_set_timer_usecs(raw_wsi, us_wait_after_input_close); else { interrupted = 1; lws_cancel_service(context); } break; case LWS_CALLBACK_RAW_RX_FILE: lwsl_user("LWS_CALLBACK_RAW_RX_FILE\n"); waiting = read(0, buf, sizeof(buf)); lwsl_notice("raw file read %d\n", waiting); if (waiting < 0) return -1; if (raw_wsi) lws_callback_on_writable(raw_wsi); lws_rx_flow_control(wsi, 0); break; /* callbacks related to raw socket descriptor */ case LWS_CALLBACK_RAW_ADOPT: lwsl_user("LWS_CALLBACK_RAW_ADOPT\n"); lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RAW_CLOSE: lwsl_user("LWS_CALLBACK_RAW_CLOSE\n"); /* * If the socket to the remote server closed, we must close * and drop any remaining stdin */ interrupted = 1; lws_cancel_service(context); /* our pointer to this wsi is invalid now we close */ raw_wsi = NULL; break; case LWS_CALLBACK_RAW_RX: lwsl_user("LWS_CALLBACK_RAW_RX (%d)\n", (int)len); while (len--) putchar(*cp++); fflush(stdout); break; case LWS_CALLBACK_RAW_WRITEABLE: lwsl_user("LWS_CALLBACK_RAW_WRITEABLE\n"); // lwsl_hexdump_info(buf, waiting); if (stdin_wsi) lws_rx_flow_control(stdin_wsi, 1); if (lws_write(wsi, buf, waiting, LWS_WRITE_RAW) != waiting) { lwsl_notice("%s: raw skt write failed\n", __func__); return -1; } break; case LWS_CALLBACK_TIMER: lwsl_user("LWS_CALLBACK_TIMER\n"); interrupted = 1; lws_cancel_service(context); return -1; default: break; } return 0; } static struct lws_protocols protocols[] = { { "raw-test", callback_raw_test, 0, 0 }, { NULL, NULL, 0, 0 } /* terminator */ }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { const char *server = "libwebsockets.org", *port = "80"; struct lws_context_creation_info info; lws_sock_file_fd_type sock; struct addrinfo h, *r, *rp; struct lws_vhost *vhost; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw netcat [--server ip] [--port port] [-w ms]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } info.port = CONTEXT_PORT_NO_LISTEN_SERVER; info.protocols = protocols; vhost = lws_create_vhost(context, &info); if (!vhost) { lwsl_err("lws vhost creation failed\n"); goto bail; } /* * Connect our own "foreign" socket to libwebsockets.org:80 * * Normally you would do this with lws_client_connect_via_info() inside * the lws event loop, hiding all this detail. But this example * demonstrates how to integrate an externally-connected "foreign" * socket, so we create one by hand. */ memset(&h, 0, sizeof(h)); h.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ h.ai_socktype = SOCK_STREAM; h.ai_protocol = IPPROTO_TCP; if ((p = lws_cmdline_option(argc, argv, "--port"))) port = p; if ((p = lws_cmdline_option(argc, argv, "--server"))) server = p; if ((p = lws_cmdline_option(argc, argv, "-w"))) us_wait_after_input_close = 1000 * atoi(p); n = getaddrinfo(server, port, &h, &r); if (n) { lwsl_err("%s: problem resolving %s: %s\n", __func__, server, gai_strerror(n)); return 1; } for (rp = r; rp; rp = rp->ai_next) { sock.sockfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); if (sock.sockfd != LWS_SOCK_INVALID) break; } if (!rp) { lwsl_err("%s: unable to create INET socket\n", __func__); freeaddrinfo(r); return 1; } lwsl_user("Starting connect to %s:%s...\n", server, port); if (connect(sock.sockfd, rp->ai_addr, sizeof(*rp->ai_addr)) < 0) { lwsl_err("%s: unable to connect\n", __func__); freeaddrinfo(r); return 1; } freeaddrinfo(r); signal(SIGINT, sigint_handler); lwsl_user("Connected...\n"); /* our foreign socket is connected... adopt it into lws */ raw_wsi = lws_adopt_descriptor_vhost(vhost, LWS_ADOPT_SOCKET, sock, protocols[0].name, NULL); if (!raw_wsi) { lwsl_err("%s: foreign socket adoption failed\n", __func__); goto bail; } sock.filefd = 0; stdin_wsi = lws_adopt_descriptor_vhost(vhost, LWS_ADOPT_RAW_FILE_DESC, sock, protocols[0].name, NULL); if (!stdin_wsi) { lwsl_err("%s: stdin adoption failed\n", __func__); goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lwsl_user("%s: destroying context\n", __func__); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-proxy-fallback/000077500000000000000000000000001357643561300255565ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-proxy-fallback/CMakeLists.txt000066400000000000000000000043621357643561300303230ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-raw-proxy-fallback) set(SRCS minimal-raw-proxy-fallback.c) # NOTE... if you are building this standalone, you must point LWS_PLUGINS_DIR # to the lws plugins dir so it can pick up the plugin source. Eg, # cmake . -DLWS_PLUGINS_DIR=~/libwebsockets/plugins # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_RAW_PROXY 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (LWS_PLUGINS_DIR) include_directories(${LWS_PLUGINS_DIR}) endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-proxy-fallback/README.md000066400000000000000000000040411357643561300270340ustar00rootroot00000000000000# lws minimal ws server raw proxy fallback This demonstrates how a vhost doing normal http or http(s) duty can be also be bound to a specific role and protocol as a fallback if the incoming protocol is unexpected for tls or http. The example makes the fallback role + protocol an lws plugin that performs raw packet proxying. By default the fallback in the example will proxy 127.0.0.1:22, which is usually your ssh server listen port, on 127.0.0.1:7681. You should be able to ssh into port 7681 the same as you can port 22. At the same time, you should be able to visit http://127.0.0.1:7681 in a browser (and if you give -s, to https://127.0.0.1:7681 while your ssh client can still connect to the same port. ## build To build this standalone, you must tell cmake where the lws source tree ./plugins directory can be found, since it relies on including the source of the raw-proxy plugin. ``` $ cmake . -DLWS_PLUGINS_DIR=~/libwebsockets/plugins && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -r ipv4:address:port|Configure the remote IP and port that will be proxied, by default ipv4:127.0.0.1:22 -s|Configure the server for tls / https and `LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT` -h|(needs -s) Configure the vhost also for `LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER`, allowing http service on tls port (caution... it's insecure then) -u|(needs -s) Configure the vhost also for `LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS`, so the server issues a redirect to https to clients that attempt to connect to a server configured for tls with http. ``` $ ./lws-minimal-raw-proxy [2018/11/30 19:22:35:7290] USER: LWS minimal raw proxy-fallback [2018/11/30 19:22:35:7291] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/11/30 19:22:35:7336] NOTICE: callback_raw_proxy: onward ipv4 127.0.0.1:22 ... ``` ``` $ ssh -p7681 me@127.0.0.1 Last login: Fri Nov 30 19:29:23 2018 from 127.0.0.1 [me@learn ~]$ ``` At the same time, visiting http(s)://127.0.0.1:7681 in a browser works fine. libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-proxy-fallback/localhost-100y.cert000066400000000000000000000040721357643561300311170ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-proxy-fallback/localhost-100y.key000066400000000000000000000063101357643561300307470ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-proxy-fallback/minimal-raw-proxy-fallback.c000066400000000000000000000074301357643561300330570ustar00rootroot00000000000000/* * lws-minimal-raw-proxy-fallback * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a normal http / https server which if it receives something * it can't make sense of at the start, falls back to becoming a raw tcp proxy * to a specified address and port. * * Incoming connections cause an outgoing connection to be initiated, and if * successfully established then traffic coming in one side is placed on a * ringbuffer and sent out the opposite side as soon as possible. * * If it receives expected packets for an http(s) connection, it acts like a * normal h1 / h2 webserver. */ #include #include #include #include #define LWS_PLUGIN_STATIC #include "../plugins/raw-proxy/protocol_lws_raw_proxy.c" static struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_RAW_PROXY, { NULL, NULL, 0, 0 } /* terminator */ }; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; static int interrupted; void sigint_handler(int sig) { interrupted = 1; } static struct lws_protocol_vhost_options pvo1 = { NULL, NULL, "onward", /* pvo name */ "ipv4:127.0.0.1:22" /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo1, /* "child" pvo linked-list */ "raw-proxy", /* protocol name we belong to on this vhost */ "" /* ignored */ }; int main(int argc, const char **argv) { int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; struct lws_context *context; char outward[256]; const char *p; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw proxy fallback | visit http://localhost:7681\n"); if ((p = lws_cmdline_option(argc, argv, "-r"))) { lws_strncpy(outward, p, sizeof(outward)); pvo1.value = outward; } memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.pvo = &pvo; info.mounts = &mount; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE | LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG; info.listen_accept_role = "raw-proxy"; info.listen_accept_protocol = "raw-proxy"; if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; if (lws_cmdline_option(argc, argv, "-u")) info.options |= LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS; if (lws_cmdline_option(argc, argv, "-h")) info.options |= LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER; } context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-proxy-fallback/mount-origin/000077500000000000000000000000001357643561300302055ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-proxy-fallback/mount-origin/404.html000066400000000000000000000002271357643561300314030ustar00rootroot00000000000000

404

Sorry, that file doesn't exist. libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-proxy-fallback/mount-origin/favicon.ico000066400000000000000000000025761357643561300323400ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-proxy-fallback/mount-origin/index.html000066400000000000000000000005621357643561300322050ustar00rootroot00000000000000
Hello from the minimal raw fallback http server example.
You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000001403321357643561300352360ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-proxy-fallback/mount-origin libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-proxy-fallback/mount-origin/strict-csp.svg000066400000000000000000000302361357643561300330250ustar00rootroot00000000000000 libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-proxy/000077500000000000000000000000001357643561300240215ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-proxy/CMakeLists.txt000066400000000000000000000043401357643561300265620ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-raw-proxy) set(SRCS minimal-raw-proxy.c) # NOTE... if you are building this standalone, you must point LWS_PLUGINS_DIR # to the lws plugins dir so it can pick up the plugin source. Eg, # cmake . -DLWS_PLUGINS_DIR=~/libwebsockets/plugins # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_RAW_PROXY 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (LWS_PLUGINS_DIR) include_directories(${LWS_PLUGINS_DIR}) endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-proxy/README.md000066400000000000000000000023511357643561300253010ustar00rootroot00000000000000# lws minimal ws server raw proxy This demonstrates how a vhost can be bound to a specific role and protocol, with the example using a lws plugin that performs raw packet proxying. By default the example will proxy 127.0.0.1:22, usually your ssh server listen port, on 127.0.0.1:7681. You should be able to ssh into port 7681 the same as you can port 22. But your ssh server is only listening on port 22... ## build To build this standalone, you must tell cmake where the lws source tree ./plugins directory can be found, since it relies on including the source of the raw-proxy plugin. ``` $ cmake . -DLWS_PLUGINS_DIR=~/libwebsockets/plugins && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -r ipv4:address:port|Configure the remote IP and port that will be proxied, by default ipv4:127.0.0.1:22 ``` $ ./lws-minimal-raw-proxy [2018/11/30 19:22:35:7290] USER: LWS minimal raw proxy | nc localhost 7681 [2018/11/30 19:22:35:7291] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/11/30 19:22:35:7336] NOTICE: callback_raw_proxy: onward ipv4 127.0.0.1:22 ... ``` ``` $ ssh -p7681 me@127.0.0.1 Last login: Fri Nov 30 19:29:23 2018 from 127.0.0.1 [me@learn ~]$ ``` libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-proxy/minimal-raw-proxy.c000066400000000000000000000044041357643561300275630ustar00rootroot00000000000000/* * lws-minimal-raw-proxy * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a vhost that acts as a raw tcp proxy. Incoming connections * cause an outgoing connection to be initiated, and if successfully established * then traffic coming in one side is placed on a ringbuffer and sent out the * opposite side as soon as possible. */ #include #include #include #include #define LWS_PLUGIN_STATIC #include "../plugins/raw-proxy/protocol_lws_raw_proxy.c" static struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_RAW_PROXY, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted; void sigint_handler(int sig) { interrupted = 1; } static struct lws_protocol_vhost_options pvo1 = { NULL, NULL, "onward", /* pvo name */ "ipv4:127.0.0.1:22" /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo1, /* "child" pvo linked-list */ "raw-proxy", /* protocol name we belong to on this vhost */ "" /* ignored */ }; int main(int argc, const char **argv) { int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; struct lws_context *context; char outward[256]; const char *p; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw proxy\n"); if ((p = lws_cmdline_option(argc, argv, "-r"))) { lws_strncpy(outward, p, sizeof(outward)); pvo1.value = outward; } memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.pvo = &pvo; info.options = LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG; info.listen_accept_role = "raw-proxy"; info.listen_accept_protocol = "raw-proxy"; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-vhost/000077500000000000000000000000001357643561300240035ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-vhost/CMakeLists.txt000066400000000000000000000037171357643561300265530ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-raw-vhost) set(SRCS minimal-raw-vhost.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-vhost/README.md000066400000000000000000000023111357643561300252570ustar00rootroot00000000000000# lws minimal ws server raw vhost This demonstrates setting up a vhost to listen and accept raw sockets. Raw sockets are just sockets... lws does not send anything on them or interpret by itself what it receives on them. So you can implement arbitrary tcp protocols using them. This isn't very useful standalone as shown here for clarity, but you can freely combine a raw socket vhost with other lws server and client features and other vhosts handling http or ws. Becuase raw socket events have their own callback reasons, the handlers can be integrated in a single protocol that also handles http and ws server and client callbacks without conflict. ## build ``` $ cmake . && make ``` ## usage -s means listen using tls ``` $ ./lws-minimal-raw-vhost [2018/03/22 14:49:47:9516] USER: LWS minimal raw vhost [2018/03/22 14:49:47:9673] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/22 14:49:52:3789] USER: LWS_CALLBACK_RAW_ADOPT [2018/03/22 14:49:57:4271] USER: LWS_CALLBACK_RAW_CLOSE ``` ``` $ nc localhost 7681 hello hello ``` Connect one or more sessions to the server using netcat... lines you type into netcat are sent to the server, which echos them to all connected clients. libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-vhost/localhost-100y.cert000066400000000000000000000040721357643561300273440ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-vhost/localhost-100y.key000066400000000000000000000063101357643561300271740ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- libwebsockets-3.2.1/minimal-examples/raw/minimal-raw-vhost/minimal-raw-vhost.c000066400000000000000000000102211357643561300275210ustar00rootroot00000000000000/* * lws-minimal-raw-vhost * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates integrating a raw tcp listener into the lws event loop. * * This demo doesn't have any http or ws support. You can connect to it * using netcat. If you make multiple connections to it, things typed in one * netcat session are broadcast to all netcat connections. * * $ nc localhost 7681 * * You can add more vhosts with things like http or ws support, it's as it is * for clarity. * * The main point is the apis and ways of managing raw sockets are almost * identical to http or ws mode sockets in lws. The callback names for raw * wsi are changed to be specific to RAW mode is all. */ #include #include #include #include #include #include struct raw_pss { struct raw_pss *pss_list; struct lws *wsi; }; /* one of these is created for each vhost our protocol is used with */ struct raw_vhd { struct raw_pss *pss_list; /* linked-list of live pss*/ int len; uint8_t buf[4096]; }; static int callback_raw_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct raw_pss *pss = (struct raw_pss *)user; struct raw_vhd *vhd = (struct raw_vhd *)lws_protocol_vh_priv_get( lws_get_vhost(wsi), lws_get_protocol(wsi)); switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct raw_vhd)); break; case LWS_CALLBACK_PROTOCOL_DESTROY: break; /* callbacks related to raw socket descriptor */ case LWS_CALLBACK_RAW_ADOPT: lwsl_user("LWS_CALLBACK_RAW_ADOPT\n"); pss->wsi = wsi; lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); break; case LWS_CALLBACK_RAW_CLOSE: lwsl_user("LWS_CALLBACK_RAW_CLOSE\n"); lws_ll_fwd_remove(struct raw_pss, pss_list, pss, vhd->pss_list); break; case LWS_CALLBACK_RAW_RX: lwsl_user("LWS_CALLBACK_RAW_RX: %d\n", (int)len); vhd->len = len; if (vhd->len > (int)sizeof(vhd->buf)) vhd->len = sizeof(vhd->buf); memcpy(vhd->buf, in, vhd->len); lws_start_foreach_llp(struct raw_pss **, ppss, vhd->pss_list) { lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); break; case LWS_CALLBACK_RAW_WRITEABLE: if (lws_write(wsi, vhd->buf, vhd->len, LWS_WRITE_RAW) != vhd->len) { lwsl_notice("%s: raw write failed\n", __func__); return 1; } break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "raw-test", callback_raw_test, sizeof(struct raw_pss), 0 }, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw vhost | nc localhost 7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.options = LWS_SERVER_OPTION_ONLY_RAW; /* vhost accepts RAW */ if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/selftests-library.sh000077500000000000000000000035251357643561300236560ustar00rootroot00000000000000#!/bin/bash if [ -z "$1" -o -z "$2" ] ; then echo "required args missing" exit 1 fi IDX=$3 TOT=$4 MYTEST=`echo $0 | sed "s/\/[^\/]*\$//g" |sed "s/.*\///g"` mkdir -p $2/$MYTEST rm -f $2/$MYTEST/*.log $2/$MYTEST/*.result FAILS=0 WHICH=$IDX SPID= SCRIPT_DIR=`dirname $0` SCRIPT_DIR=`readlink -f $SCRIPT_DIR` LOGPATH=$2 feedback() { if [ "$2" != "0" ] ; then FAILS=$(( $FAILS + 1 )) echo -n -e "\e[31m" fi T=" --- killed --- " if [ ! -z "`cat $LOGPATH/$MYTEST/$3.time`" ] ; then T="`cat $LOGPATH/$MYTEST/$3.time | grep real | sed "s/.*\ //g"`" T="$T `cat $LOGPATH/$MYTEST/$3.time | grep user | sed "s/.*\ //g"`" T="$T `cat $LOGPATH/$MYTEST/$3.time | grep sys | sed "s/.*\ //g"`" fi printf "%-35s [ %3s/%3s ]: %3s : %8s : %s\n" $1 $WHICH $TOT $2 "$T" $3 if [ "$2" != "0" ] ; then echo -n -e "\e[0m" fi WHICH=$(( $WHICH + 1)) } spawn() { if [ ! -z "$1" ] ; then if [ `ps $1 | wc -l` -eq 2 ]; then # echo "prerequisite still up" return 0 fi fi QQ=`pwd` cd $SCRIPT_DIR cd $2 $3 $4 $5 > $LOGPATH/$MYTEST/serverside.log 2> $LOGPATH/$MYTEST/serverside.log & SPID=$! cd $QQ sleep 0.5s # echo "launched prerequisite $SPID" } dotest() { T=$3 ( { /usr/bin/time -p $1/lws-$MYTEST $4 $5 $6 $7 $8 $9 > $2/$MYTEST/$T.log 2> $2/$MYTEST/$T.log ; echo $? > $2/$MYTEST/$T.result } 2> $2/$MYTEST/$T.time >/dev/null ) >/dev/null 2> /dev/null & W=$! WT=0 while [ $WT -le 820 ] ; do kill -0 $W 2>/dev/null if [ $? -ne 0 ] ; then WT=10000 else if [ $WT -ge 800 ] ; then WT=10000 kill $W 2>/dev/null wait $W 2>/dev/null fi fi sleep 0.1s WT=$(( $WT + 1 )) done R=254 if [ -e $2/$MYTEST/$T.result ] ; then R=`cat $2/$MYTEST/$T.result` cat $2/$MYTEST/$T.log | tail -n 3 > $2/$MYTEST/$T.time if [ $R -ne 0 ] ; then pwd echo cat $2/$MYTEST/$T.log echo fi fi feedback $MYTEST $R $T } libwebsockets-3.2.1/minimal-examples/selftests.sh000077500000000000000000000025601357643561300222120ustar00rootroot00000000000000#!/bin/bash # # run this from your build dir having configured # -DLWS_WITH_MINIMAL_EXAMPLES=1 to get all the examples # that apply built into ./bin # # Eg, # # build $ ../minimal-examples/selftests.sh echo echo "----------------------------------------------" echo "------- tests: lws minimal example selftests" echo LOGGING_PATH=/tmp/logs # for mebedtls, we need the CA certs in ./build where we run from cp ../minimal-examples/http-client/minimal-http-client-multi/warmcat.com.cer . cp ../minimal-examples/http-client/minimal-http-client-post/libwebsockets.org.cer . MINEX=`dirname $0` MINEX=`realpath $MINEX` TESTS=0 for i in `find $MINEX -name selftest.sh` ; do BN=`echo -n "$i" | sed "s/\/[^\/]*\$//g" | sed "s/.*\///g"` if [ -e `pwd`/bin/lws-$BN ] ; then C=`cat $i | grep COUNT_TESTS= | cut -d= -f2` TESTS=$(( $TESTS + $C )) fi done FAILS=0 WH=1 for i in `find $MINEX -name selftest.sh` ; do BN=`echo -n "$i" | sed "s/\/[^\/]*\$//g" | sed "s/.*\///g"` if [ -e `pwd`/bin/lws-$BN ] ; then C=`cat $i | grep COUNT_TESTS= | cut -d= -f2` sh $i `pwd`/bin $LOGGING_PATH $WH $TESTS $MINEX FAILS=$(( $FAILS + $? )) L=`ps fax | grep lws- | cut -d' ' -f2` kill $L 2>/dev/null kill -9 $L 2>/dev/null wait $L 2>/dev/null WH=$(( $WH + $C )) fi done if [ $FAILS -eq 0 ] ; then echo "All $TESTS passed" exit 0 else echo "Failed: $FAILS / $TESTS" exit 1 fi libwebsockets-3.2.1/minimal-examples/ws-client/000077500000000000000000000000001357643561300215415ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-client/README.md000066400000000000000000000011531357643561300230200ustar00rootroot00000000000000|name|demonstrates| ---|--- minimal-ws-client-echo|Simple client that connects to a ws server and echos anything the server sends minimal-ws-client-ping|Ws ping test client minimal-ws-client-pmd-bulk|Client that sends bulk multifragment data to the minimal-ws-server-pmd-bulk example minimal-ws-client-rx|Connects to the dumb-increment-protocol wss server at https://libwebsockets.org and demonstrates receiving ws data minimal-ws-client-spam|Spams ws connections in parallel to a server for stability testing minimal-ws-client-tx|Connects to the minimal-ws-broker example as a publisher, demonstrating sending ws data libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-echo/000077500000000000000000000000001357643561300260065ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-echo/CMakeLists.txt000066400000000000000000000041051357643561300305460ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8.9) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-client-echo) set(SRCS minimal-ws-client-echo.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITHOUT_EXTENSIONS 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-echo/README.md000066400000000000000000000023471357643561300272730ustar00rootroot00000000000000# lws minimal ws client + permessage-deflate echo This example opens a ws client connection to localhost:7681 and echoes back anything that comes from the server. You can use it for testing lws against Autobahn. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -p port|Port to connect to -u url|URL path part to connect to -o|Finish after one connection --ssl|Open client connection with ssl -i |Bind the client connection to interface iface ``` $ ./lws-minimal-ws-client-echo [2018/04/22 20:03:50:2343] USER: LWS minimal ws client echo + permessage-deflate + multifragment bulk message [2018/04/22 20:03:50:2344] USER: lws-minimal-ws-client-echo [-n (no exts)] [-u url] [-o (once)] [2018/04/22 20:03:50:2344] USER: options 0 [2018/04/22 20:03:50:2345] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off [2018/04/22 20:03:51:2356] USER: connecting to localhost:9001//runCase?case=362&agent=libwebsockets [2018/04/22 20:03:51:2385] NOTICE: checking client ext permessage-deflate [2018/04/22 20:03:51:2386] NOTICE: instantiating client ext permessage-deflate [2018/04/22 20:03:51:2386] USER: LWS_CALLBACK_CLIENT_ESTABLISHED ... ``` libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-echo/minimal-ws-client-echo.c000066400000000000000000000107041357643561300324210ustar00rootroot00000000000000/* * lws-minimal-ws-client-echo * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a ws client that echoes back what it was sent, in a * way compatible with autobahn -m fuzzingserver */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal_client_echo.c" static struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL_CLIENT_ECHO, { NULL, NULL, 0, 0 } /* terminator */ }; static struct lws_context *context; static int interrupted, port = 7681, options = 0; static const char *url = "/", *ads = "localhost", *iface = NULL; /* pass pointers to shared vars to the protocol */ static const struct lws_protocol_vhost_options pvo_iface = { NULL, NULL, "iface", /* pvo name */ (void *)&iface /* pvo value */ }; static const struct lws_protocol_vhost_options pvo_ads = { &pvo_iface, NULL, "ads", /* pvo name */ (void *)&ads /* pvo value */ }; static const struct lws_protocol_vhost_options pvo_url = { &pvo_ads, NULL, "url", /* pvo name */ (void *)&url /* pvo value */ }; static const struct lws_protocol_vhost_options pvo_options = { &pvo_url, NULL, "options", /* pvo name */ (void *)&options /* pvo value */ }; static const struct lws_protocol_vhost_options pvo_port = { &pvo_options, NULL, "port", /* pvo name */ (void *)&port /* pvo value */ }; static const struct lws_protocol_vhost_options pvo_interrupted = { &pvo_port, NULL, "interrupted", /* pvo name */ (void *)&interrupted /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_interrupted, /* "child" pvo linked-list */ "lws-minimal-client-echo", /* protocol name we belong to on this vhost */ "" /* ignored */ }; static const struct lws_extension extensions[] = { { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" "; client_no_context_takeover" "; client_max_window_bits" }, { NULL, NULL, NULL /* terminator */ } }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int n, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws client echo + permessage-deflate + multifragment bulk message\n"); lwsl_user(" lws-minimal-ws-client-echo [-n (no exts)] [-u url] [-p port] [-o (once)]\n"); if ((p = lws_cmdline_option(argc, argv, "-u"))) url = p; if ((p = lws_cmdline_option(argc, argv, "-p"))) port = atoi(p); if (lws_cmdline_option(argc, argv, "-o")) options |= 1; if (lws_cmdline_option(argc, argv, "--ssl")) options |= 2; if ((p = lws_cmdline_option(argc, argv, "-s"))) ads = p; if ((p = lws_cmdline_option(argc, argv, "-i"))) iface = p; lwsl_user("options %d, ads %s\n", options, ads); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.protocols = protocols; info.pvo = &pvo; if (!lws_cmdline_option(argc, argv, "-n")) info.extensions = extensions; info.pt_serv_buf_size = 32 * 1024; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_VALIDATE_UTF8; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; if (lws_cmdline_option(argc, argv, "--libuv")) info.options |= LWS_SERVER_OPTION_LIBUV; else signal(SIGINT, sigint_handler); context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (!lws_service(context, 0) && !interrupted) ; lws_context_destroy(context); n = (options & 1) ? interrupted != 2 : interrupted == 3; lwsl_user("Completed %d %s\n", interrupted, !n ? "OK" : "failed"); return n; } protocol_lws_minimal_client_echo.c000066400000000000000000000177511357643561300346760ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-echo/* * ws protocol handler plugin for "lws-minimal-client-echo" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The protocol shows how to send and receive bulk messages over a ws connection * that optionally may have the permessage-deflate extension negotiated on it. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include #define RING_DEPTH 1024 /* one of these created for each message */ struct msg { void *payload; /* is malloc'd */ size_t len; char binary; char first; char final; }; struct per_session_data__minimal_client_echo { struct lws_ring *ring; uint32_t tail; char flow_controlled; uint8_t completed:1; uint8_t write_consume_pending:1; }; struct vhd_minimal_client_echo { struct lws_context *context; struct lws_vhost *vhost; struct lws *client_wsi; int *interrupted; int *options; const char **url; const char **ads; const char **iface; int *port; }; static int connect_client(struct vhd_minimal_client_echo *vhd) { struct lws_client_connect_info i; char host[128]; lws_snprintf(host, sizeof(host), "%s:%u", *vhd->ads, *vhd->port); memset(&i, 0, sizeof(i)); i.context = vhd->context; i.port = *vhd->port; i.address = *vhd->ads; i.path = *vhd->url; i.host = host; i.origin = host; i.ssl_connection = 0; if ((*vhd->options) & 2) i.ssl_connection |= LCCSCF_USE_SSL; i.vhost = vhd->vhost; i.iface = *vhd->iface; //i.protocol = ; i.pwsi = &vhd->client_wsi; lwsl_user("connecting to %s:%d/%s\n", i.address, i.port, i.path); return !lws_client_connect_via_info(&i); } static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } static void schedule_callback(struct lws *wsi, int reason, int secs) { lws_timed_callback_vh_protocol(lws_get_vhost(wsi), lws_get_protocol(wsi), reason, secs); } static int callback_minimal_client_echo(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal_client_echo *pss = (struct per_session_data__minimal_client_echo *)user; struct vhd_minimal_client_echo *vhd = (struct vhd_minimal_client_echo *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct msg *pmsg; struct msg amsg; int n, m, flags; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd_minimal_client_echo)); if (!vhd) return -1; vhd->context = lws_get_context(wsi); vhd->vhost = lws_get_vhost(wsi); /* get the pointer to "interrupted" we were passed in pvo */ vhd->interrupted = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "interrupted")->value; vhd->port = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "port")->value; vhd->options = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "options")->value; vhd->ads = (const char **)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "ads")->value; vhd->url = (const char **)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "url")->value; vhd->iface = (const char **)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "iface")->value; if (connect_client(vhd)) schedule_callback(wsi, LWS_CALLBACK_USER, 1); break; case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_user("LWS_CALLBACK_CLIENT_ESTABLISHED\n"); pss->ring = lws_ring_create(sizeof(struct msg), RING_DEPTH, __minimal_destroy_message); if (!pss->ring) return 1; pss->tail = 0; break; case LWS_CALLBACK_CLIENT_WRITEABLE: lwsl_user("LWS_CALLBACK_CLIENT_WRITEABLE\n"); if (pss->write_consume_pending) { /* perform the deferred fifo consume */ lws_ring_consume_single_tail(pss->ring, &pss->tail, 1); pss->write_consume_pending = 0; } pmsg = lws_ring_get_element(pss->ring, &pss->tail); if (!pmsg) { lwsl_user(" (nothing in ring)\n"); break; } flags = lws_write_ws_flags( pmsg->binary ? LWS_WRITE_BINARY : LWS_WRITE_TEXT, pmsg->first, pmsg->final); /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE, pmsg->len, flags); if (m < (int)pmsg->len) { lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lwsl_user(" wrote %d: flags: 0x%x first: %d final %d\n", m, flags, pmsg->first, pmsg->final); if ((*vhd->options & 1) && pmsg && pmsg->final) pss->completed = 1; /* * Workaround deferred deflate in pmd extension by only * consuming the fifo entry when we are certain it has been * fully deflated at the next WRITABLE callback. You only need * this if you're using pmd. */ pss->write_consume_pending = 1; lws_callback_on_writable(wsi); if (pss->flow_controlled && (int)lws_ring_get_count_free_elements(pss->ring) > RING_DEPTH - 5) { lws_rx_flow_control(wsi, 1); pss->flow_controlled = 0; } break; case LWS_CALLBACK_CLIENT_RECEIVE: lwsl_user("LWS_CALLBACK_CLIENT_RECEIVE: %4d (rpp %5d, first %d, last %d, bin %d)\n", (int)len, (int)lws_remaining_packet_payload(wsi), lws_is_first_fragment(wsi), lws_is_final_fragment(wsi), lws_frame_is_binary(wsi)); // lwsl_hexdump_notice(in, len); amsg.first = lws_is_first_fragment(wsi); amsg.final = lws_is_final_fragment(wsi); amsg.binary = lws_frame_is_binary(wsi); n = (int)lws_ring_get_count_free_elements(pss->ring); if (!n) { lwsl_user("dropping!\n"); break; } amsg.len = len; /* notice we over-allocate by LWS_PRE */ amsg.payload = malloc(LWS_PRE + len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); break; } memcpy((char *)amsg.payload + LWS_PRE, in, len); if (!lws_ring_insert(pss->ring, &amsg, 1)) { __minimal_destroy_message(&amsg); lwsl_user("dropping!\n"); break; } lws_callback_on_writable(wsi); if (!pss->flow_controlled && n < 3) { pss->flow_controlled = 1; lws_rx_flow_control(wsi, 0); } break; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); vhd->client_wsi = NULL; //schedule_callback(wsi, LWS_CALLBACK_USER, 1); //if (*vhd->options & 1) { if (!*vhd->interrupted) *vhd->interrupted = 3; lws_cancel_service(lws_get_context(wsi)); //} break; case LWS_CALLBACK_CLIENT_CLOSED: lwsl_user("LWS_CALLBACK_CLIENT_CLOSED\n"); lws_ring_destroy(pss->ring); vhd->client_wsi = NULL; // schedule_callback(wsi, LWS_CALLBACK_USER, 1); //if (*vhd->options & 1) { if (!*vhd->interrupted) *vhd->interrupted = 1 + pss->completed; lws_cancel_service(lws_get_context(wsi)); // } break; /* rate-limited client connect retries */ case LWS_CALLBACK_USER: lwsl_notice("%s: LWS_CALLBACK_USER\n", __func__); if (connect_client(vhd)) schedule_callback(wsi, LWS_CALLBACK_USER, 1); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL_CLIENT_ECHO \ { \ "lws-minimal-client-echo", \ callback_minimal_client_echo, \ sizeof(struct per_session_data__minimal_client_echo), \ 1024, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) /* boilerplate needed if we are built as a dynamic plugin */ static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL_CLIENT_ECHO }; LWS_EXTERN LWS_VISIBLE int init_protocol_minimal_client_echo(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_minimal_client_echo(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-ping/000077500000000000000000000000001357643561300260255ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-ping/CMakeLists.txt000066400000000000000000000045371357643561300305760ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckIncludeFile) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-client-ping) set(SRCS minimal-ws-client-ping.c) MACRO(require_pthreads result) CHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H) if (NOT LWS_HAVE_PTHREAD_H) if (LWS_WITH_MINIMAL_EXAMPLES) set(result 0) else() message(FATAL_ERROR "threading support requires pthreads") endif() endif() ENDMACRO() # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared pthread) add_dependencies(${SAMP} websockets_shared pthread) else() target_link_libraries(${SAMP} websockets pthread) endif() endif() libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-ping/README.md000066400000000000000000000026321357643561300273070ustar00rootroot00000000000000# lws minimal ws client PING This connects to libwebsockets.org using the lws-mirror-protocol. It then sends a ws PING every 5s and records any PONG coming back. ## build ``` $ cmake . && make ``` ## Commandline Options Option|Meaning ---|--- -d|Set logging verbosity --server|Use a specific server instead of libwebsockets.org, eg `--server localhost`. Implies LCCSCF_ALLOW_SELFSIGNED --port|Use a specific port instead of 443, eg `--port 7681` -z|Send zero-length pings for testing --protocol|Use a specific ws subprotocol rather than lws-mirror-protocol, eg, `--protocol myprotocol` ## usage Just run it, wait for the connect and then there will be PINGs sent at 5s intervals. ``` $ ./lws-minimal-ws-client-ping [2018/05/09 16:55:03:1160] USER: LWS minimal ws client PING [2018/05/09 16:55:03:1379] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off [2018/05/09 16:55:03:1715] NOTICE: client loaded CA for verification ./libwebsockets.org.cer [2018/05/09 16:55:03:1717] NOTICE: created client ssl context for default [2018/05/09 16:55:04:8332] USER: callback_minimal_broker: established [2018/05/09 16:55:09:8389] USER: Sending PING 10... [2018/05/09 16:55:10:1491] USER: LWS_CALLBACK_CLIENT_RECEIVE_PONG [2018/05/09 16:55:10:1494] NOTICE: [2018/05/09 16:55:10:1514] NOTICE: 0000: 70 69 6E 67 20 62 6F 64 79 21 ping body! [2018/05/09 16:55:10:1515] NOTICE: ... ``` libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-ping/libwebsockets.org.cer000066400000000000000000000067521357643561300321600ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFWjCCBEKgAwIBAgISA9x0/oj5PLdW46hsmR82/7ytMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTA5MDcwNzA5NDBaFw0x OTEyMDYwNzA5NDBaMBwxGjAYBgNVBAMTEWxpYndlYnNvY2tldHMub3JnMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxPinIkleLmvEcA/YuBss6ASXVi7g yr6Sss7cB3vTy7Fp8OB2c1N25prHZxVpORAUo0UreiaY2Ws4NFvDaYp08ZffevuC UhThsEJlbkD0uvt7dPapJt9PNJtlxjNFWyvHEy6PijzIaMYDROiStcCJQn7kAew/ Za2+5kNVgKqT+7OXukJEFdSdVZI6QC/npeQlkIrFSq1WVthCGBNJehxxES0hSWzk 0gNVKlkD3/SbkupsfUpe73XiawMtrtsSE7cdnul7VZmiP8I/3sJr1+4/3xZ+DEYg mVB82B0vd08VJYzU7Nf0pz0PWusAmzRoRn81IXkOfBg9ohlSSEoZhHYS7QIDAQAB o4ICZjCCAmIwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr BgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRmKKyGjufWgp7pR2x0tWxG D9G+WTAfBgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcB AQRjMGEwLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlw dC5vcmcwLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlw dC5vcmcvMBwGA1UdEQQVMBOCEWxpYndlYnNvY2tldHMub3JnMEwGA1UdIARFMEMw CAYGZ4EMAQIBMDcGCysGAQQBgt8TAQEBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly9j cHMubGV0c2VuY3J5cHQub3JnMIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHcAdH7a gzGtMxCRIZzOJU9CcMK//V5CIAjGNzV55hB7zFYAAAFtCsWIfgAABAMASDBGAiEA 0H55VqSKV3otHK7uHNbcR0QwoUYtCmeObhsqxzCnmDwCIQD3mtuSKrxTD3oA+Yde nmTgWfFyS4TNgLNEPCJYo2s75gB1ACk8UZZUyDlluqpQ/FgH1Ldvv1h6KXLcpMMM 9OVFR/R4AAABbQrFil4AAAQDAEYwRAIgNSpvz/1JA2aP6fh6ujGNuYfrAvWjlxXo CJtVGe4XaDYCIGmK1/9tl1uQbVD46P5NswnULq06KQmuOrlI3HO4r86HMA0GCSqG SIb3DQEBCwUAA4IBAQBiAlV7wkCsWE99VmZHBmcbZChWyWUHG3LM1hnaQRQjTSYk CIlauCpWzlUd6weuvra85KqBbCYo+1hxbwITI796uAdgtHmBE8nj0VltHwKeSq2s KKiGXBRT7Z7t0VHYSLOlGOVn1auuQFaWBArc0cQ/m1ZsoHvOiHTlKQvVsA4HnIxA CjGY9OOQoh0c36ecbJZ44XKnU9J/OXtDx00aW6QodaZmgMp/OOCghFQUvufkgTUL LZid873/8dJVWjAaj1VdadO1nSbdAfBbeWXy93+vg1aAoig80RoscrzYCaNlwmR7 EO5zWxL3l+xUZogQSJuICgUgNzVB3wjn8HeHGsqt -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj /PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-ping/minimal-ws-client-ping.c000066400000000000000000000123431357643561300324600ustar00rootroot00000000000000/* * lws-minimal-ws-client-ping * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a ws client that sends pings from time to time and * shows when it receives the PONG */ #include #include #include #include static struct lws_context *context; static struct lws *client_wsi; static int interrupted, zero_length_ping, port = 443, ssl_connection = LCCSCF_USE_SSL; static const char *server_address = "libwebsockets.org", *pro = "lws-mirror-protocol"; struct pss { int send_a_ping; }; static int connect_client(void) { struct lws_client_connect_info i; memset(&i, 0, sizeof(i)); i.context = context; i.port = port; i.address = server_address; i.path = "/"; i.host = i.address; i.origin = i.address; i.ssl_connection = ssl_connection; i.protocol = pro; i.local_protocol_name = "lws-ping-test"; i.pwsi = &client_wsi; return !lws_client_connect_via_info(&i); } static int callback_minimal_broker(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; int n; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: goto try; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); client_wsi = NULL; lws_timed_callback_vh_protocol(lws_get_vhost(wsi), lws_get_protocol(wsi), LWS_CALLBACK_USER, 1); break; /* --- client callbacks --- */ case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_user("%s: established\n", __func__); lws_set_timer_usecs(wsi, 5 * LWS_USEC_PER_SEC); break; case LWS_CALLBACK_CLIENT_WRITEABLE: if (pss->send_a_ping) { uint8_t ping[LWS_PRE + 125]; int m; pss->send_a_ping = 0; n = 0; if (!zero_length_ping) n = lws_snprintf((char *)ping + LWS_PRE, 125, "ping body!"); lwsl_user("Sending PING %d...\n", n); m = lws_write(wsi, ping + LWS_PRE, n, LWS_WRITE_PING); if (m < n) { lwsl_err("sending ping failed: %d\n", m); return -1; } lws_callback_on_writable(wsi); } break; case LWS_CALLBACK_WS_CLIENT_DROP_PROTOCOL: client_wsi = NULL; lws_timed_callback_vh_protocol(lws_get_vhost(wsi), lws_get_protocol(wsi), LWS_CALLBACK_USER, 1); break; case LWS_CALLBACK_CLIENT_RECEIVE_PONG: lwsl_user("LWS_CALLBACK_CLIENT_RECEIVE_PONG\n"); lwsl_hexdump_notice(in, len); break; case LWS_CALLBACK_TIMER: /* we want to send a ws PING every few seconds */ pss->send_a_ping = 1; lws_callback_on_writable(wsi); lws_set_timer_usecs(wsi, 5 * LWS_USEC_PER_SEC); break; /* rate-limited client connect retries */ case LWS_CALLBACK_USER: lwsl_notice("%s: LWS_CALLBACK_USER\n", __func__); try: if (connect_client()) lws_timed_callback_vh_protocol(lws_get_vhost(wsi), lws_get_protocol(wsi), LWS_CALLBACK_USER, 1); break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "lws-ping-test", callback_minimal_broker, sizeof(struct pss), 0, }, { NULL, NULL, 0, 0 } }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws client PING\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; #if defined(LWS_WITH_MBEDTLS) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./libwebsockets.org.cer"; #endif if (lws_cmdline_option(argc, argv, "-z")) zero_length_ping = 1; if ((p = lws_cmdline_option(argc, argv, "--protocol"))) pro = p; if ((p = lws_cmdline_option(argc, argv, "--server"))) { server_address = p; pro = "lws-minimal"; ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; } if ((p = lws_cmdline_option(argc, argv, "--port"))) port = atoi(p); /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed\n"); return 0; } libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-pmd-bulk/000077500000000000000000000000001357643561300266035ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-pmd-bulk/CMakeLists.txt000066400000000000000000000041161357643561300313450ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8.9) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-client-pmd-bulk) set(SRCS minimal-ws-client-pmd-bulk.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) #require_lws_config(LWS_WITHOUT_EXTENSIONS 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-pmd-bulk/README.md000066400000000000000000000302331357643561300300630ustar00rootroot00000000000000# lws minimal ws client + permessage-deflate for bulk traffic This example opens a client connection to localhost:7681 where it expects to find minimal-ws-server-pmd-bulk running. It sends and receives a large, multifragment message, and then exits. ## build ``` $ cmake . && make ``` ## usage Both the server and client side must use the same options - `-n` disable permessage-deflate extension - `-c` send compressible text instead of uncompressible binary data ``` $ ./lws-minimal-ws-client-pmd-bulk [2018/04/05 12:08:58:9120] USER: LWS minimal ws client + permessage-deflate + multifragment bulk message [2018/04/05 12:08:58:9120] USER: ./lws-minimal-ws-client-pmd-bulk [-n (no exts)] [-c (compressible)] [2018/04/05 12:08:58:9120] NOTICE: Creating Vhost 'default' (serving disabled), 2 protocols, IPv6 on [2018/04/05 12:08:59:9139] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9139] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9139] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9139] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9139] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9140] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9140] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9140] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9140] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9140] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9140] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9141] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9141] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9141] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9142] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9142] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9142] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9142] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9142] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9142] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9143] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9143] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9143] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9143] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9143] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9143] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9144] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9144] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9144] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9144] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9144] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9144] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9145] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9145] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9145] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9145] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9146] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9146] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9146] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9146] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9146] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9146] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9147] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9147] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9147] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9147] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9147] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9148] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9148] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9148] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9148] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9148] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9148] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9149] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9149] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9149] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9149] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9149] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9149] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9150] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9150] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9150] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9150] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9150] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9150] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9151] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9151] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9151] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9151] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9152] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9152] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9152] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9152] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9152] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9152] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9153] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9153] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9153] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9153] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9153] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9153] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9154] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9154] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9154] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9154] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9154] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9154] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9155] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9155] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9155] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9155] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9155] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9155] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9156] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9156] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9156] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9156] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9157] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9157] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9157] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9157] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9157] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9158] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9158] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9158] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9158] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9158] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9158] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9159] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9159] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9159] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9159] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9159] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9159] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9160] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9160] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9160] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9160] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9160] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9160] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9161] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9161] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9161] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9161] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9161] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9161] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9162] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9162] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9162] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9162] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9162] USER: LWS_CALLBACK_CLIENT_RECEIVE: 580 (rpp 0, last 1) [2018/04/05 12:08:59:9180] USER: Completed OK ``` Visit http://localhost:7681 in your browser One or another kind of bulk ws transfer is made to the browser. The ws connection is made via permessage-deflate extension. minimal-ws-client-pmd-bulk.c000066400000000000000000000072611357643561300337400ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-pmd-bulk/* * lws-minimal-ws-client-pmd-bulk * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a ws client that sends bulk data in multiple * ws fragments, in a way compatible with per-message deflate. * * It shows how to send huge messages without needing a lot of memory. * * Build and start the minimal-examples/ws-server/minmal-ws-server-pmd-bulk * example first. Running this sends a large message to the server and * exits. * * If you give both sides the -n commandline option, it disables permessage- * deflate compression extension. */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal_pmd_bulk.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL_PMD_BULK, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted, options; /* pass pointers to shared vars to the protocol */ static const struct lws_protocol_vhost_options pvo_options = { NULL, NULL, "options", /* pvo name */ (void *)&options /* pvo value */ }; static const struct lws_protocol_vhost_options pvo_interrupted = { &pvo_options, NULL, "interrupted", /* pvo name */ (void *)&interrupted /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_interrupted, /* "child" pvo linked-list */ "lws-minimal-pmd-bulk", /* protocol name we belong to on this vhost */ "" /* ignored */ }; static const struct lws_extension extensions[] = { { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" "; client_no_context_takeover" "; client_max_window_bits" }, { NULL, NULL, NULL /* terminator */ } }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws client + permessage-deflate + multifragment bulk message\n"); lwsl_user(" needs minimal-ws-server-pmd-bulk running to communicate with\n"); lwsl_user(" %s [-n (no exts)] [-c (compressible)]\n", argv[0]); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.protocols = protocols; info.pvo = &pvo; if (!lws_cmdline_option(argc, argv, "-n")) info.extensions = extensions; info.pt_serv_buf_size = 32 * 1024; if (lws_cmdline_option(argc, argv, "-c")) options |= 1; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed %s\n", interrupted == 2 ? "OK" : "failed"); return interrupted != 2; } protocol_lws_minimal_pmd_bulk.c000066400000000000000000000203731357643561300350060ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-pmd-bulk/* * ws protocol handler plugin for "lws-minimal-pmd-bulk" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The protocol shows how to send and receive bulk messages over a ws connection * that optionally may have the permessage-deflate extension negotiated on it. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* * We will produce a large ws message either from this text repeated many times, * or from 0x40 + a 6-bit pseudorandom number */ static const char * const redundant_string = "No one would have believed in the last years of the nineteenth " "century that this world was being watched keenly and closely by " "intelligences greater than man's and yet as mortal as his own; that as " "men busied themselves about their various concerns they were " "scrutinised and studied, perhaps almost as narrowly as a man with a " "microscope might scrutinise the transient creatures that swarm and " "multiply in a drop of water. With infinite complacency men went to " "and fro over this globe about their little affairs, serene in their " "assurance of their empire over matter. It is possible that the " "infusoria under the microscope do the same. No one gave a thought to " "the older worlds of space as sources of human danger, or thought of " "them only to dismiss the idea of life upon them as impossible or " "improbable. It is curious to recall some of the mental habits of " "those departed days. At most terrestrial men fancied there might be " "other men upon Mars, perhaps inferior to themselves and ready to " "welcome a missionary enterprise. Yet across the gulf of space, minds " "that are to our minds as ours are to those of the beasts that perish, " "intellects vast and cool and unsympathetic, regarded this earth with " "envious eyes, and slowly and surely drew their plans against us. And " "early in the twentieth century came the great disillusionment. " ; /* this reflects the length of the string above */ #define REPEAT_STRING_LEN 1337 /* this is the total size of the ws message we will send */ #define MESSAGE_SIZE (100 * REPEAT_STRING_LEN) /* this is how much we will send each time the connection is writable */ #define MESSAGE_CHUNK_SIZE (1 * 1024) /* one of these is created for each client connecting to us */ struct per_session_data__minimal_pmd_bulk { int position_tx, position_rx; uint64_t rng_rx, rng_tx; }; struct vhd_minimal_pmd_bulk { struct lws_context *context; struct lws_vhost *vhost; struct lws *client_wsi; int *interrupted; int *options; }; static uint64_t rng(uint64_t *r) { *r ^= *r << 21; *r ^= *r >> 35; *r ^= *r << 4; return *r; } static int connect_client(struct vhd_minimal_pmd_bulk *vhd) { struct lws_client_connect_info i; memset(&i, 0, sizeof(i)); i.context = vhd->context; i.port = 7681; i.address = "localhost"; i.path = "/"; i.host = i.address; i.origin = i.address; i.ssl_connection = 0; i.vhost = vhd->vhost; i.protocol = "lws-minimal-pmd-bulk"; i.pwsi = &vhd->client_wsi; return !lws_client_connect_via_info(&i); } static void schedule_callback(struct lws *wsi, int reason, int secs) { lws_timed_callback_vh_protocol(lws_get_vhost(wsi), lws_get_protocol(wsi), reason, secs); } static int callback_minimal_pmd_bulk(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal_pmd_bulk *pss = (struct per_session_data__minimal_pmd_bulk *)user; struct vhd_minimal_pmd_bulk *vhd = (struct vhd_minimal_pmd_bulk *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); uint8_t buf[LWS_PRE + MESSAGE_CHUNK_SIZE], *start = &buf[LWS_PRE], *p; int n, m, flags; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd_minimal_pmd_bulk)); if (!vhd) return -1; vhd->context = lws_get_context(wsi); vhd->vhost = lws_get_vhost(wsi); /* get the pointer to "interrupted" we were passed in pvo */ vhd->interrupted = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "interrupted")->value; vhd->options = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "options")->value; if (connect_client(vhd)) schedule_callback(wsi, LWS_CALLBACK_USER, 1); break; case LWS_CALLBACK_CLIENT_ESTABLISHED: pss->rng_tx = 4; pss->rng_rx = 4; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_CLIENT_WRITEABLE: /* * when we connect, we will send the server a message */ if (pss->position_tx == MESSAGE_SIZE) break; /* fill up one chunk's worth of message content */ p = start; n = MESSAGE_CHUNK_SIZE; if (n > MESSAGE_SIZE - pss->position_tx) n = MESSAGE_SIZE - pss->position_tx; flags = lws_write_ws_flags(LWS_WRITE_BINARY, !pss->position_tx, pss->position_tx + n == MESSAGE_SIZE); /* * select between producing compressible repeated text, * or uncompressible PRNG output */ if (*vhd->options & 1) { while (n) { size_t s; m = pss->position_tx % REPEAT_STRING_LEN; s = REPEAT_STRING_LEN - m; if (s > (size_t)n) s = n; memcpy(p, &redundant_string[m], s); pss->position_tx += s; p += s; n -= s; } } else { pss->position_tx += n; while (n--) *p++ = rng(&pss->rng_tx); } n = lws_ptr_diff(p, start); m = lws_write(wsi, start, n, flags); if (m < n) { lwsl_err("ERROR %d writing ws\n", m); return -1; } if (pss->position_tx != MESSAGE_SIZE) /* if more to do... */ lws_callback_on_writable(wsi); else /* if we sent and received everything */ if (pss->position_rx == MESSAGE_SIZE) *vhd->interrupted = 2; break; case LWS_CALLBACK_CLIENT_RECEIVE: /* * When we connect, the server will send us a message too */ lwsl_user("LWS_CALLBACK_CLIENT_RECEIVE: %4d (rpp %5d, last %d)\n", (int)len, (int)lws_remaining_packet_payload(wsi), lws_is_final_fragment(wsi)); if (*vhd->options & 1) { while (len) { size_t s; m = pss->position_rx % REPEAT_STRING_LEN; s = REPEAT_STRING_LEN - m; if (s > len) s = len; if (memcmp(in, &redundant_string[m], s)) { lwsl_user("echo'd data doesn't match\n"); return -1; } pss->position_rx += s; in = ((unsigned char *)in) + s; len -= s; } } else { p = (uint8_t *)in; pss->position_rx += len; while (len--) if (*p++ != (uint8_t)rng(&pss->rng_rx)) { lwsl_user("echo'd data doesn't match\n"); return -1; } } /* if we sent and received everything */ if (pss->position_rx == MESSAGE_SIZE && pss->position_tx == MESSAGE_SIZE) *vhd->interrupted = 2; break; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); vhd->client_wsi = NULL; schedule_callback(wsi, LWS_CALLBACK_USER, 1); break; case LWS_CALLBACK_CLIENT_CLOSED: vhd->client_wsi = NULL; schedule_callback(wsi, LWS_CALLBACK_USER, 1); break; /* rate-limited client connect retries */ case LWS_CALLBACK_USER: lwsl_notice("%s: LWS_CALLBACK_USER\n", __func__); if (connect_client(vhd)) schedule_callback(wsi, LWS_CALLBACK_USER, 1); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL_PMD_BULK \ { \ "lws-minimal-pmd-bulk", \ callback_minimal_pmd_bulk, \ sizeof(struct per_session_data__minimal_pmd_bulk), \ 4096, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) /* boilerplate needed if we are built as a dynamic plugin */ static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL_PMD_BULK }; LWS_EXTERN LWS_VISIBLE int init_protocol_minimal_pmd_bulk(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_minimal_pmd_bulk(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-rx/000077500000000000000000000000001357643561300255215ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-rx/CMakeLists.txt000066400000000000000000000040011357643561300302540ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-client-rx) set(SRCS minimal-ws-client.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif()libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-rx/README.md000066400000000000000000000024471357643561300270070ustar00rootroot00000000000000# lws minimal ws client rx ## build ``` $ cmake . && make ``` ## usage The application goes to https://libwebsockets.org and makes a wss connection using the dumb-increment-protocol. It shows the incrementing number it is being sent over ws as it arrives. This example only receives things to keep it simple. See minimal-ws-client-tx for code related to sending things. Of course rx and tx are supported in the same protocol. ``` ./lws-minimal-ws-client-rx [2018/03/14 11:57:24:0689] USER: LWS minimal ws client rx [2018/03/14 11:57:24:0705] NOTICE: Creating Vhost 'default' port -1, 1 protocols, IPv6 off [2018/03/14 11:57:24:0710] NOTICE: created client ssl context for default [2018/03/14 11:57:24:0788] NOTICE: lws_client_connect_2: 0x15b8310: address libwebsockets.org [2018/03/14 11:57:24:7643] NOTICE: lws_client_connect_2: 0x15b8310: address libwebsockets.org [2018/03/14 11:57:26:9191] USER: RX: 0 [2018/03/14 11:57:26:9318] USER: RX: 1 [2018/03/14 11:57:27:2182] USER: RX: 2 [2018/03/14 11:57:27:2336] USER: RX: 3 [2018/03/14 11:57:27:2838] USER: RX: 4 [2018/03/14 11:57:27:5173] USER: RX: 5 [2018/03/14 11:57:27:5352] USER: RX: 6 [2018/03/14 11:57:27:5854] USER: RX: 7 [2018/03/14 11:57:27:8156] USER: RX: 8 [2018/03/14 11:57:27:8359] USER: RX: 9 ^C[2018/03/14 11:57:27:9884] USER: Completed ``` libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-rx/libwebsockets.org.cer000066400000000000000000000067521357643561300316540ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFWjCCBEKgAwIBAgISA9x0/oj5PLdW46hsmR82/7ytMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTA5MDcwNzA5NDBaFw0x OTEyMDYwNzA5NDBaMBwxGjAYBgNVBAMTEWxpYndlYnNvY2tldHMub3JnMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxPinIkleLmvEcA/YuBss6ASXVi7g yr6Sss7cB3vTy7Fp8OB2c1N25prHZxVpORAUo0UreiaY2Ws4NFvDaYp08ZffevuC UhThsEJlbkD0uvt7dPapJt9PNJtlxjNFWyvHEy6PijzIaMYDROiStcCJQn7kAew/ Za2+5kNVgKqT+7OXukJEFdSdVZI6QC/npeQlkIrFSq1WVthCGBNJehxxES0hSWzk 0gNVKlkD3/SbkupsfUpe73XiawMtrtsSE7cdnul7VZmiP8I/3sJr1+4/3xZ+DEYg mVB82B0vd08VJYzU7Nf0pz0PWusAmzRoRn81IXkOfBg9ohlSSEoZhHYS7QIDAQAB o4ICZjCCAmIwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr BgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRmKKyGjufWgp7pR2x0tWxG D9G+WTAfBgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcB AQRjMGEwLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlw dC5vcmcwLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlw dC5vcmcvMBwGA1UdEQQVMBOCEWxpYndlYnNvY2tldHMub3JnMEwGA1UdIARFMEMw CAYGZ4EMAQIBMDcGCysGAQQBgt8TAQEBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly9j cHMubGV0c2VuY3J5cHQub3JnMIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHcAdH7a gzGtMxCRIZzOJU9CcMK//V5CIAjGNzV55hB7zFYAAAFtCsWIfgAABAMASDBGAiEA 0H55VqSKV3otHK7uHNbcR0QwoUYtCmeObhsqxzCnmDwCIQD3mtuSKrxTD3oA+Yde nmTgWfFyS4TNgLNEPCJYo2s75gB1ACk8UZZUyDlluqpQ/FgH1Ldvv1h6KXLcpMMM 9OVFR/R4AAABbQrFil4AAAQDAEYwRAIgNSpvz/1JA2aP6fh6ujGNuYfrAvWjlxXo CJtVGe4XaDYCIGmK1/9tl1uQbVD46P5NswnULq06KQmuOrlI3HO4r86HMA0GCSqG SIb3DQEBCwUAA4IBAQBiAlV7wkCsWE99VmZHBmcbZChWyWUHG3LM1hnaQRQjTSYk CIlauCpWzlUd6weuvra85KqBbCYo+1hxbwITI796uAdgtHmBE8nj0VltHwKeSq2s KKiGXBRT7Z7t0VHYSLOlGOVn1auuQFaWBArc0cQ/m1ZsoHvOiHTlKQvVsA4HnIxA CjGY9OOQoh0c36ecbJZ44XKnU9J/OXtDx00aW6QodaZmgMp/OOCghFQUvufkgTUL LZid873/8dJVWjAaj1VdadO1nSbdAfBbeWXy93+vg1aAoig80RoscrzYCaNlwmR7 EO5zWxL3l+xUZogQSJuICgUgNzVB3wjn8HeHGsqt -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj /PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-rx/minimal-ws-client.c000066400000000000000000000073361357643561300312270ustar00rootroot00000000000000/* * lws-minimal-ws-client * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the a minimal ws client using lws. * * It connects to https://libwebsockets.org/ and makes a * wss connection to the dumb-increment protocol there. While * connected, it prints the numbers it is being sent by * dumb-increment protocol. */ #include #include #include static int interrupted, rx_seen, test; static struct lws *client_wsi; static int callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); client_wsi = NULL; break; case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_user("%s: established\n", __func__); break; case LWS_CALLBACK_CLIENT_RECEIVE: lwsl_user("RX: %s\n", (const char *)in); rx_seen++; if (test && rx_seen == 10) interrupted = 1; break; case LWS_CALLBACK_CLIENT_CLOSED: client_wsi = NULL; break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "dumb-increment-protocol", callback_dumb_increment, 0, 0, }, { NULL, NULL, 0, 0 } }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_client_connect_info i; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, lws * must have been configured with -DCMAKE_BUILD_TYPE=DEBUG * instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); test = !!lws_cmdline_option(argc, argv, "-t"); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws client rx [-d ] [--h2] [-t (test)]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; #if defined(LWS_WITH_MBEDTLS) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./libwebsockets.org.cer"; #endif /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; i.port = 443; i.address = "libwebsockets.org"; i.path = "/"; i.host = i.address; i.origin = i.address; i.ssl_connection = LCCSCF_USE_SSL; i.protocol = protocols[0].name; /* "dumb-increment-protocol" */ i.pwsi = &client_wsi; if (lws_cmdline_option(argc, argv, "--h2")) i.alpn = "h2"; lws_client_connect_via_info(&i); while (n >= 0 && client_wsi && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed %s\n", rx_seen > 10 ? "OK" : "Failed"); return rx_seen > 10; } libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-rx/selftest.sh000066400000000000000000000010311357643561300277010ustar00rootroot00000000000000#!/bin/bash # # $1: path to minimal example binaries... # if lws is built with -DLWS_WITH_MINIMAL_EXAMPLES=1 # that will be ./bin from your build dir # # $2: path for logs and results. The results will go # in a subdir named after the directory this script # is in # # $3: offset for test index count # # $4: total test count # # $5: path to ./minimal-examples dir in lws # # Test return code 0: OK, 254: timed out, other: error indication . $5/selftests-library.sh COUNT_TESTS=1 dotest $1 $2 warmcat -t exit $FAILS libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-spam/000077500000000000000000000000001357643561300260305ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-spam/CMakeLists.txt000066400000000000000000000045371357643561300306010ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckIncludeFile) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-client-spam) set(SRCS minimal-ws-client-spam.c) MACRO(require_pthreads result) CHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H) if (NOT LWS_HAVE_PTHREAD_H) if (LWS_WITH_MINIMAL_EXAMPLES) set(result 0) else() message(FATAL_ERROR "threading support requires pthreads") endif() endif() ENDMACRO() # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared pthread) add_dependencies(${SAMP} websockets_shared pthread) else() target_link_libraries(${SAMP} websockets pthread) endif() endif() libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-spam/README.md000066400000000000000000000043461357643561300273160ustar00rootroot00000000000000# lws minimal ws client SPAM This connects to libwebsockets.org using the lws-mirror-protocol. By default is has 10 concurrent connections and connects 100 times. ## build ``` $ cmake . && make ``` ## Commandline Options Option|Meaning ---|--- -d|Set logging verbosity --server|Use a specific server instead of libwebsockets.org, eg `--server localhost`. Implies LCCSCF_ALLOW_SELFSIGNED --port|Use a specific port instead of 443, eg `--port 7681` -c|Amount of concurrent connections -l|Test limit (total number of connections to make) ## usage Just run it, it will repeatedly connect and reconnect to libwebsockets.org until it hits the test limit. You can also direct it to use the lws test server in tls mode by running that with `libwebsockets-test-server -s` and running this using, eg ``` $ ./lws-minimal-ws-client-spam -c 20 -l 200 --server localhost --port 7681 ``` ``` $ ./lws-minimal-ws-client-spam [2018/11/15 09:53:19:9639] USER: LWS minimal ws client SPAM [2018/11/15 09:53:19:9647] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off [2018/11/15 09:53:19:9695] NOTICE: created client ssl context for default [2018/11/15 09:53:21:0976] USER: callback_minimal_spam: established (try 10, est 0, closed 0, err 0) [2018/11/15 09:53:21:1041] USER: callback_minimal_spam: established (try 10, est 1, closed 0, err 0) [2018/11/15 09:53:21:1089] USER: callback_minimal_spam: established (try 10, est 2, closed 0, err 0) [2018/11/15 09:53:21:1132] USER: callback_minimal_spam: established (try 10, est 3, closed 0, err 0) [2018/11/15 09:53:21:1166] USER: callback_minimal_spam: established (try 10, est 4, closed 0, err 0) [2018/11/15 09:53:21:1531] USER: callback_minimal_spam: established (try 10, est 5, closed 0, err 0) [2018/11/15 09:53:21:1563] USER: callback_minimal_spam: established (try 10, est 6, closed 0, err 0) [2018/11/15 09:53:21:1589] USER: callback_minimal_spam: established (try 10, est 7, closed 0, err 0) [2018/11/15 09:53:21:1616] USER: callback_minimal_spam: established (try 10, est 8, closed 0, err 0) [2018/11/15 09:53:21:1671] USER: callback_minimal_spam: established (try 10, est 9, closed 0, err 0) [2018/11/15 09:53:21:3778] USER: callback_minimal_spam: reopening (try 11, est 10, closed 1, err 0) ... ``` libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-spam/libwebsockets.org.cer000066400000000000000000000067521357643561300321630ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFWjCCBEKgAwIBAgISA9x0/oj5PLdW46hsmR82/7ytMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTA5MDcwNzA5NDBaFw0x OTEyMDYwNzA5NDBaMBwxGjAYBgNVBAMTEWxpYndlYnNvY2tldHMub3JnMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxPinIkleLmvEcA/YuBss6ASXVi7g yr6Sss7cB3vTy7Fp8OB2c1N25prHZxVpORAUo0UreiaY2Ws4NFvDaYp08ZffevuC UhThsEJlbkD0uvt7dPapJt9PNJtlxjNFWyvHEy6PijzIaMYDROiStcCJQn7kAew/ Za2+5kNVgKqT+7OXukJEFdSdVZI6QC/npeQlkIrFSq1WVthCGBNJehxxES0hSWzk 0gNVKlkD3/SbkupsfUpe73XiawMtrtsSE7cdnul7VZmiP8I/3sJr1+4/3xZ+DEYg mVB82B0vd08VJYzU7Nf0pz0PWusAmzRoRn81IXkOfBg9ohlSSEoZhHYS7QIDAQAB o4ICZjCCAmIwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr BgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRmKKyGjufWgp7pR2x0tWxG D9G+WTAfBgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcB AQRjMGEwLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlw dC5vcmcwLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlw dC5vcmcvMBwGA1UdEQQVMBOCEWxpYndlYnNvY2tldHMub3JnMEwGA1UdIARFMEMw CAYGZ4EMAQIBMDcGCysGAQQBgt8TAQEBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly9j cHMubGV0c2VuY3J5cHQub3JnMIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHcAdH7a gzGtMxCRIZzOJU9CcMK//V5CIAjGNzV55hB7zFYAAAFtCsWIfgAABAMASDBGAiEA 0H55VqSKV3otHK7uHNbcR0QwoUYtCmeObhsqxzCnmDwCIQD3mtuSKrxTD3oA+Yde nmTgWfFyS4TNgLNEPCJYo2s75gB1ACk8UZZUyDlluqpQ/FgH1Ldvv1h6KXLcpMMM 9OVFR/R4AAABbQrFil4AAAQDAEYwRAIgNSpvz/1JA2aP6fh6ujGNuYfrAvWjlxXo CJtVGe4XaDYCIGmK1/9tl1uQbVD46P5NswnULq06KQmuOrlI3HO4r86HMA0GCSqG SIb3DQEBCwUAA4IBAQBiAlV7wkCsWE99VmZHBmcbZChWyWUHG3LM1hnaQRQjTSYk CIlauCpWzlUd6weuvra85KqBbCYo+1hxbwITI796uAdgtHmBE8nj0VltHwKeSq2s KKiGXBRT7Z7t0VHYSLOlGOVn1auuQFaWBArc0cQ/m1ZsoHvOiHTlKQvVsA4HnIxA CjGY9OOQoh0c36ecbJZ44XKnU9J/OXtDx00aW6QodaZmgMp/OOCghFQUvufkgTUL LZid873/8dJVWjAaj1VdadO1nSbdAfBbeWXy93+vg1aAoig80RoscrzYCaNlwmR7 EO5zWxL3l+xUZogQSJuICgUgNzVB3wjn8HeHGsqt -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj /PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-spam/minimal-ws-client-spam.c000066400000000000000000000137631357643561300324750ustar00rootroot00000000000000/* * lws-minimal-ws-client-spam * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a ws client that makes continuous mass ws connections * asynchronously */ #include #include #include #include enum { CLIENT_IDLE, CLIENT_CONNECTING, CLIENT_AWAITING_SEND, }; struct client { struct lws *wsi; int index; int state; }; static struct lws_context *context; static struct client clients[200]; static int interrupted, port = 443, ssl_connection = LCCSCF_USE_SSL; static const char *server_address = "libwebsockets.org", *pro = "lws-mirror-protocol"; static int concurrent = 3, conn, tries, est, errors, closed, sent, limit = 15; struct pss { int conn; }; static int connect_client(int idx) { struct lws_client_connect_info i; if (tries == limit) { lwsl_user("Reached limit... finishing\n"); return 0; } memset(&i, 0, sizeof(i)); i.context = context; i.port = port; i.address = server_address; i.path = "/"; i.host = i.address; i.origin = i.address; i.ssl_connection = ssl_connection; i.protocol = pro; i.local_protocol_name = pro; i.pwsi = &clients[idx].wsi; clients[idx].state = CLIENT_CONNECTING; tries++; if (!lws_client_connect_via_info(&i)) { clients[idx].wsi = NULL; clients[idx].state = CLIENT_IDLE; return 1; } return 0; } static int callback_minimal_spam(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; uint8_t ping[LWS_PRE + 125]; int n, m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: for (n = 0; n < concurrent; n++) { clients[n].index = n; connect_client(n); } break; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: errors++; lwsl_err("CLIENT_CONNECTION_ERROR: %s (try %d, est %d, closed %d, err %d)\n", in ? (char *)in : "(null)", tries, est, closed, errors); for (n = 0; n < concurrent; n++) { if (clients[n].wsi == wsi) { clients[n].wsi = NULL; clients[n].state = CLIENT_IDLE; connect_client(n); break; } } if (tries == closed + errors) interrupted = 1; break; /* --- client callbacks --- */ case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_user("%s: established (try %d, est %d, closed %d, err %d)\n", __func__, tries, est, closed, errors); est++; pss->conn = conn++; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_CLIENT_CLOSED: closed++; if (tries == closed + errors) interrupted = 1; if (tries == limit) { lwsl_user("%s: leaving CLOSED (try %d, est %d, sent %d, closed %d, err %d)\n", __func__, tries, est, sent, closed, errors); break; } for (n = 0; n < concurrent; n++) { if (clients[n].wsi == wsi) { connect_client(n); lwsl_user("%s: reopening (try %d, est %d, closed %d, err %d)\n", __func__, tries, est, closed, errors); break; } } if (n == concurrent) lwsl_user("CLOSED: can't find client wsi\n"); break; case LWS_CALLBACK_CLIENT_WRITEABLE: n = lws_snprintf((char *)ping + LWS_PRE, sizeof(ping) - LWS_PRE, "hello %d", pss->conn); m = lws_write(wsi, ping + LWS_PRE, n, LWS_WRITE_TEXT); if (m < n) { lwsl_err("sending ping failed: %d\n", m); return -1; } lws_set_timeout(wsi, PENDING_TIMEOUT_USER_OK, LWS_TO_KILL_ASYNC); break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "lws-spam-test", callback_minimal_spam, sizeof(struct pss), 0, }, { NULL, NULL, 0, 0 } }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws client SPAM\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; #if defined(LWS_WITH_MBEDTLS) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./libwebsockets.org.cer"; #endif if ((p = lws_cmdline_option(argc, argv, "--server"))) { server_address = p; ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; } if ((p = lws_cmdline_option(argc, argv, "--port"))) port = atoi(p); if ((p = lws_cmdline_option(argc, argv, "-l"))) limit = atoi(p); if ((p = lws_cmdline_option(argc, argv, "-c"))) concurrent = atoi(p); if (lws_cmdline_option(argc, argv, "-n")) { ssl_connection = 0; info.options = 0; } if (concurrent < 0 || concurrent > (int)LWS_ARRAY_SIZE(clients)) { lwsl_err("%s: -c %d larger than max concurrency %d\n", __func__, concurrent, (int)LWS_ARRAY_SIZE(clients)); return 1; } /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and n (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + concurrent + 1; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); if (tries == limit && closed == tries) { lwsl_user("Completed\n"); return 0; } lwsl_err("Failed\n"); return 1; } libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-spam/selftest.sh000077500000000000000000000010271357643561300302200ustar00rootroot00000000000000#!/bin/bash # # $1: path to minimal example binaries... # if lws is built with -DLWS_WITH_MINIMAL_EXAMPLES=1 # that will be ./bin from your build dir # # $2: path for logs and results. The results will go # in a subdir named after the directory this script # is in # # $3: offset for test index count # # $4: total test count # # $5: path to ./minimal-examples dir in lws # # Test return code 0: OK, 254: timed out, other: error indication . $5/selftests-library.sh COUNT_TESTS=1 dotest $1 $2 warmcat exit $FAILS libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-tx/000077500000000000000000000000001357643561300255235ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-tx/CMakeLists.txt000066400000000000000000000045271357643561300302730ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckIncludeFile) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-client-tx) set(SRCS minimal-ws-client.c) MACRO(require_pthreads result) CHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H) if (NOT LWS_HAVE_PTHREAD_H) if (LWS_WITH_MINIMAL_EXAMPLES) set(result 0) else() message(FATAL_ERROR "threading support requires pthreads") endif() endif() ENDMACRO() # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared pthread) add_dependencies(${SAMP} websockets_shared pthread) else() target_link_libraries(${SAMP} websockets pthread) endif() endif()libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-tx/README.md000066400000000000000000000020311357643561300267760ustar00rootroot00000000000000# lws minimal ws client tx This demonstrates a ws "publisher" to go with the minimal-ws-broker example. Two threads are spawned that produce messages to be sent to the broker, via a local ringbuffer. Locking is provided to make ringbuffer access threadsafe. When a nailed-up client connection to the broker is established, the ringbuffer is sent to the broker, which distributes the events to all connected clients. ## build ``` $ cmake . && make ``` ## usage This example connects to ws-server/minimal-ws-broker, so you need to build and run that in another terminal. ``` $ ./lws-minimal-ws-client-tx [2018/03/16 16:04:33:5774] USER: LWS minimal ws client tx [2018/03/16 16:04:33:5774] USER: Run minimal-ws-broker and browse to that [2018/03/16 16:04:33:5774] NOTICE: Creating Vhost 'default' port -1, 1 protocols, IPv6 off [2018/03/16 16:04:34:5794] USER: callback_minimal_broker: established ``` If you open a browser on http://localhost:7681 , you will see the subscribed messages from the threads in this app via the broker app. libwebsockets-3.2.1/minimal-examples/ws-client/minimal-ws-client-tx/minimal-ws-client.c000066400000000000000000000205761357643561300312320ustar00rootroot00000000000000/* * lws-minimal-ws-client-tx * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a ws "publisher" to go with the minimal-ws-broker * example. * * Two threads are spawned that produce messages to be sent to the broker, * via a local ringbuffer. Locking is provided to make ringbuffer access * threadsafe. * * When a nailed-up client connection to the broker is established, the * ringbuffer is sent to the broker, which distributes the events to all * connected clients. */ #include #include #include #include static int interrupted; /* one of these created for each message */ struct msg { void *payload; /* is malloc'd */ size_t len; }; struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; pthread_t pthread_spam[2]; pthread_mutex_t lock_ring; /* serialize access to the ring buffer */ struct lws_ring *ring; /* ringbuffer holding unsent messages */ uint32_t tail; struct lws_client_connect_info i; struct lws *client_wsi; int counter; char finished; char established; }; #if defined(WIN32) static void usleep(unsigned long l) { Sleep(l / 1000); } #endif static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } static void * thread_spam(void *d) { struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *)d; struct msg amsg; int len = 128, index = 1, n; do { /* don't generate output if client not connected */ if (!vhd->established) goto wait; pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ /* only create if space in ringbuffer */ n = (int)lws_ring_get_count_free_elements(vhd->ring); if (!n) { lwsl_user("dropping!\n"); goto wait_unlock; } amsg.payload = malloc(LWS_PRE + len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); goto wait_unlock; } n = lws_snprintf((char *)amsg.payload + LWS_PRE, len, "tid: %p, msg: %d", (void *)pthread_self(), index++); amsg.len = n; n = lws_ring_insert(vhd->ring, &amsg, 1); if (n != 1) { __minimal_destroy_message(&amsg); lwsl_user("dropping!\n"); } else /* * This will cause a LWS_CALLBACK_EVENT_WAIT_CANCELLED * in the lws service thread context. */ lws_cancel_service(vhd->context); wait_unlock: pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ wait: usleep(100000); } while (!vhd->finished); lwsl_notice("thread_spam %p exiting\n", (void *)pthread_self()); pthread_exit(NULL); return NULL; } static int connect_client(struct per_vhost_data__minimal *vhd) { vhd->i.context = vhd->context; vhd->i.port = 7681; vhd->i.address = "localhost"; vhd->i.path = "/publisher"; vhd->i.host = vhd->i.address; vhd->i.origin = vhd->i.address; vhd->i.ssl_connection = 0; vhd->i.protocol = "lws-minimal-broker"; vhd->i.pwsi = &vhd->client_wsi; return !lws_client_connect_via_info(&vhd->i); } static int callback_minimal_broker(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct msg *pmsg; void *retval; int n, m, r = 0; switch (reason) { /* --- protocol lifecycle callbacks --- */ case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); vhd->ring = lws_ring_create(sizeof(struct msg), 8, __minimal_destroy_message); if (!vhd->ring) return 1; pthread_mutex_init(&vhd->lock_ring, NULL); /* start the content-creating threads */ for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (pthread_create(&vhd->pthread_spam[n], NULL, thread_spam, vhd)) { lwsl_err("thread creation failed\n"); r = 1; goto init_fail; } if (connect_client(vhd)) lws_timed_callback_vh_protocol(vhd->vhost, vhd->protocol, LWS_CALLBACK_USER, 1); break; case LWS_CALLBACK_PROTOCOL_DESTROY: init_fail: vhd->finished = 1; for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (vhd->pthread_spam[n]) pthread_join(vhd->pthread_spam[n], &retval); if (vhd->ring) lws_ring_destroy(vhd->ring); pthread_mutex_destroy(&vhd->lock_ring); return r; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); vhd->client_wsi = NULL; lws_timed_callback_vh_protocol(vhd->vhost, vhd->protocol, LWS_CALLBACK_USER, 1); break; /* --- client callbacks --- */ case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_user("%s: established\n", __func__); vhd->established = 1; break; case LWS_CALLBACK_CLIENT_WRITEABLE: pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ pmsg = lws_ring_get_element(vhd->ring, &vhd->tail); if (!pmsg) goto skip; /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE, pmsg->len, LWS_WRITE_TEXT); if (m < (int)pmsg->len) { pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock */ lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lws_ring_consume_single_tail(vhd->ring, &vhd->tail, 1); /* more to do for us? */ if (lws_ring_get_element(vhd->ring, &vhd->tail)) /* come back as soon as we can write more */ lws_callback_on_writable(wsi); skip: pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ break; case LWS_CALLBACK_CLIENT_CLOSED: vhd->client_wsi = NULL; vhd->established = 0; lws_timed_callback_vh_protocol(vhd->vhost, vhd->protocol, LWS_CALLBACK_USER, 1); break; case LWS_CALLBACK_EVENT_WAIT_CANCELLED: /* * When the "spam" threads add a message to the ringbuffer, * they create this event in the lws service thread context * using lws_cancel_service(). * * We respond by scheduling a writable callback for the * connected client, if any. */ if (vhd && vhd->client_wsi && vhd->established) lws_callback_on_writable(vhd->client_wsi); break; /* rate-limited client connect retries */ case LWS_CALLBACK_USER: lwsl_notice("%s: LWS_CALLBACK_USER\n", __func__); if (connect_client(vhd)) lws_timed_callback_vh_protocol(vhd->vhost, vhd->protocol, LWS_CALLBACK_USER, 1); break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "lws-minimal-broker", callback_minimal_broker, 0, 0, }, { NULL, NULL, 0, 0 } }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws client tx\n"); lwsl_user(" Run minimal-ws-broker and browse to that\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed\n"); return 0; } libwebsockets-3.2.1/minimal-examples/ws-server/000077500000000000000000000000001357643561300215715ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/README.md000066400000000000000000000016421357643561300230530ustar00rootroot00000000000000|Example|Demonstrates| ---|--- minimal-ws-broker|Simple ws server with a publish / broker / subscribe architecture minimal-ws-server-echo|Simple ws server that listens and echos back anything clients send minimal-ws-server-pmd-bulk|Simple ws server showing how to pass bulk data with permessage-deflate minimal-ws-server-pmd-corner|Corner-case tests for permessage-deflate minimal-ws-server-pmd|Simple ws server with permessage-deflate support minimal-ws-server-ring|Like minimal-ws-server but holds the chat in a multi-tail ringbuffer minimal-ws-server-threadpool|Demonstrates how to use a worker thread pool with lws minimal-ws-server-threads-smp|SMP ws server where data is produced by different threads with multiple lws service threads too minimal-ws-server-threads|Simple ws server where data is produced by different threads minimal-ws-server|Serves an index.html over http that opens a ws shared chat client in a browser libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-broker/000077500000000000000000000000001357643561300251305ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-broker/CMakeLists.txt000066400000000000000000000037751357643561300277040ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-broker) set(SRCS minimal-ws-broker.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif()libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-broker/README.md000066400000000000000000000012421357643561300264060ustar00rootroot00000000000000# lws minimal ws broker ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-ws-broker [2018/03/15 12:23:12:1559] USER: LWS minimal ws broker | visit http://localhost:7681 [2018/03/15 12:23:12:1560] NOTICE: Creating Vhost 'default' port 7681, 2 protocols, IPv6 off ``` Visit http://localhost:7681 on multiple browser windows The page opens a subscribe mode ws connection back to the broker, and a publisher mode ws connection back to the broker. The textarea shows the data from the subscription connection. If you type text is in the text box and press send, the text is passed to the broker on the publisher ws connection and sent to all subscribers. libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-broker/minimal-ws-broker.c000066400000000000000000000051441357643561300306370ustar00rootroot00000000000000/* * lws-minimal-ws-broker * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws, * with an added publish / broker / subscribe ws server. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws broker | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-broker/mount-origin/000077500000000000000000000000001357643561300275575ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-broker/mount-origin/example.js000066400000000000000000000035171357643561300315560ustar00rootroot00000000000000 function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { if (typeof MozWebSocket != "undefined") return new MozWebSocket(urlpath, protocol); return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { subscriber_ws = new_ws(get_appropriate_ws_url(""), "lws-minimal-broker"); try { subscriber_ws.onopen = function() { document.getElementById("b").disabled = 0; }; subscriber_ws.onmessage =function got_packet(msg) { document.getElementById("r").value = document.getElementById("r").value + msg.data + "\n"; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; subscriber_ws.onclose = function(){ document.getElementById("b").disabled = 1; }; } catch(exception) { alert("

Error " + exception); } publisher_ws = new_ws(get_appropriate_ws_url("/publisher"), "lws-minimal-broker"); try { publisher_ws.onopen = function() { document.getElementById("m").disabled = 0; }; publisher_ws.onmessage =function got_packet(msg) { }; publisher_ws.onclose = function(){ document.getElementById("m").disabled = 1; }; } catch(exception) { alert("

Error " + exception); } function sendmsg() { publisher_ws.send(document.getElementById("m").value); document.getElementById("m").value = ""; } document.getElementById("b").addEventListener("click", sendmsg); }, false); libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-broker/mount-origin/favicon.ico000066400000000000000000000025761357643561300317120ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-broker/mount-origin/index.html000066400000000000000000000012651357643561300315600ustar00rootroot00000000000000
LWS chat minimal ws broker example.
This page opens two separate ws connections...
A subscriber ws connection fills this textarea
with data it receives from the broker...



... and a publisher ws connection sends the string
in the box below to the broker when you press Send.
libwebsockets.org-logo.svg000066400000000000000000001403321357643561300346100ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-broker/mount-origin libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-broker/mount-origin/strict-csp.svg000066400000000000000000000302361357643561300323770ustar00rootroot00000000000000 libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-broker/protocol_lws_minimal.c000066400000000000000000000144271357643561300315400ustar00rootroot00000000000000/* * ws protocol handler plugin for "lws-minimal-broker" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This implements a minimal "broker", for systems that look like this * * [ publisher ws client ] <-> [ ws server broker ws server ] <-> [ ws client subscriber ] * * The "publisher" role is to add data to the broker. * * The "subscriber" role is to hear about all data added to the system. * * The "broker" role is to manage incoming data from publishers and pass it out * to subscribers. * * Any number of publishers and subscribers are supported. * * This example implements a single ws server, using one ws protocol, that treats ws * connections as being in publisher or subscriber mode according to the URL the ws * connection was made to. ws connections to "/publisher" URL are understood to be * publishing data and to any other URL, subscribing. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* one of these created for each message */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* one of these is created for each client connecting to us */ struct per_session_data__minimal { struct per_session_data__minimal *pss_list; struct lws *wsi; uint32_t tail; char publishing; /* nonzero: peer is publishing to us */ }; /* one of these is created for each vhost our protocol is used with */ struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__minimal *pss_list; /* linked-list of live pss*/ struct lws_ring *ring; /* ringbuffer holding unsent messages */ }; /* destroys the message when everyone has had a copy of it */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct msg *pmsg; struct msg amsg; char buf[32]; int n, m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); vhd->ring = lws_ring_create(sizeof(struct msg), 8, __minimal_destroy_message); if (!vhd->ring) return 1; break; case LWS_CALLBACK_PROTOCOL_DESTROY: lws_ring_destroy(vhd->ring); break; case LWS_CALLBACK_ESTABLISHED: pss->tail = lws_ring_get_oldest_tail(vhd->ring); pss->wsi = wsi; if (lws_hdr_copy(wsi, buf, sizeof(buf), WSI_TOKEN_GET_URI) > 0) pss->publishing = !strcmp(buf, "/publisher"); if (!pss->publishing) /* add subscribers to the list of live pss held in the vhd */ lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); break; case LWS_CALLBACK_CLOSED: /* remove our closing pss from the list of live pss */ lws_ll_fwd_remove(struct per_session_data__minimal, pss_list, pss, vhd->pss_list); break; case LWS_CALLBACK_SERVER_WRITEABLE: if (pss->publishing) break; pmsg = lws_ring_get_element(vhd->ring, &pss->tail); if (!pmsg) break; /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE, pmsg->len, LWS_WRITE_TEXT); if (m < (int)pmsg->len) { lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lws_ring_consume_and_update_oldest_tail( vhd->ring, /* lws_ring object */ struct per_session_data__minimal, /* type of objects with tails */ &pss->tail, /* tail of guy doing the consuming */ 1, /* number of payload objects being consumed */ vhd->pss_list, /* head of list of objects with tails */ tail, /* member name of tail in objects with tails */ pss_list /* member name of next object in objects with tails */ ); /* more to do? */ if (lws_ring_get_element(vhd->ring, &pss->tail)) /* come back as soon as we can write more */ lws_callback_on_writable(pss->wsi); break; case LWS_CALLBACK_RECEIVE: if (!pss->publishing) break; /* * For test, our policy is ignore publishing when there are * no subscribers connected. */ if (!vhd->pss_list) break; n = (int)lws_ring_get_count_free_elements(vhd->ring); if (!n) { lwsl_user("dropping!\n"); break; } amsg.len = len; /* notice we over-allocate by LWS_PRE */ amsg.payload = malloc(LWS_PRE + len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); break; } memcpy((char *)amsg.payload + LWS_PRE, in, len); if (!lws_ring_insert(vhd->ring, &amsg, 1)) { __minimal_destroy_message(&amsg); lwsl_user("dropping 2!\n"); break; } /* * let every subscriber know we want to write something * on them as soon as they are ready */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { if (!(*ppss)->publishing) lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal-broker", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 128, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) /* boilerplate needed if we are built as a dynamic plugin */ static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL }; LWS_EXTERN LWS_VISIBLE int init_protocol_minimal(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_minimal(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-echo/000077500000000000000000000000001357643561300260665ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-echo/CMakeLists.txt000066400000000000000000000041051357643561300306260ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8.9) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-server-echo) set(SRCS minimal-ws-server-echo.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) require_lws_config(LWS_WITHOUT_EXTENSIONS 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-echo/README.md000066400000000000000000000013511357643561300273450ustar00rootroot00000000000000# lws minimal ws server + permessage-deflate echo This example serves no-protocl-name ws on localhost:7681 and echoes back anything that comes from the client. You can use it for testing lws against Autobahn (use the -p option to tell it to listen on 9001 for that) ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -p port|Port to connect to -u url|URL path part to connect to -o|Finish after one connection ``` $ ./lws-minimal-ws-server-echo [2018/04/24 10:29:34:6212] USER: LWS minimal ws server echo + permessage-deflate + multifragment bulk message [2018/04/24 10:29:34:6213] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off ... ``` libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-echo/minimal-ws-server-echo.c000066400000000000000000000061101357643561300325250ustar00rootroot00000000000000/* * lws-minimal-ws-server-echo * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a ws server that echoes back what it was sent, in a way * compatible with autobahn -m fuzzingclient */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal_server_echo.c" static struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL_SERVER_ECHO, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted, port = 7681, options; /* pass pointers to shared vars to the protocol */ static const struct lws_protocol_vhost_options pvo_options = { NULL, NULL, "options", /* pvo name */ (void *)&options /* pvo value */ }; static const struct lws_protocol_vhost_options pvo_interrupted = { &pvo_options, NULL, "interrupted", /* pvo name */ (void *)&interrupted /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_interrupted, /* "child" pvo linked-list */ "lws-minimal-server-echo", /* protocol name we belong to on this vhost */ "" /* ignored */ }; static const struct lws_extension extensions[] = { { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" "; client_no_context_takeover" "; client_max_window_bits" }, { NULL, NULL, NULL /* terminator */ } }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws client echo + permessage-deflate + multifragment bulk message\n"); lwsl_user(" lws-minimal-ws-client-echo [-n (no exts)] [-p port] [-o (once)]\n"); if ((p = lws_cmdline_option(argc, argv, "-p"))) port = atoi(p); if (lws_cmdline_option(argc, argv, "-o")) options |= 1; memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = port; info.protocols = protocols; info.pvo = &pvo; if (!lws_cmdline_option(argc, argv, "-n")) info.extensions = extensions; info.pt_serv_buf_size = 32 * 1024; info.options = LWS_SERVER_OPTION_VALIDATE_UTF8 | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed %s\n", interrupted == 2 ? "OK" : "failed"); return interrupted != 2; } protocol_lws_minimal_server_echo.c000066400000000000000000000143571357643561300350050ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-echo/* * ws protocol handler plugin for "lws-minimal-server-echo" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The protocol shows how to send and receive bulk messages over a ws connection * that optionally may have the permessage-deflate extension negotiated on it. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include #define RING_DEPTH 4096 /* one of these created for each message */ struct msg { void *payload; /* is malloc'd */ size_t len; char binary; char first; char final; }; struct per_session_data__minimal_server_echo { struct lws_ring *ring; uint32_t msglen; uint32_t tail; uint8_t completed:1; uint8_t flow_controlled:1; uint8_t write_consume_pending:1; }; struct vhd_minimal_server_echo { struct lws_context *context; struct lws_vhost *vhost; int *interrupted; int *options; }; static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } #include static int callback_minimal_server_echo(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal_server_echo *pss = (struct per_session_data__minimal_server_echo *)user; struct vhd_minimal_server_echo *vhd = (struct vhd_minimal_server_echo *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct msg *pmsg; struct msg amsg; int m, n, flags; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd_minimal_server_echo)); if (!vhd) return -1; vhd->context = lws_get_context(wsi); vhd->vhost = lws_get_vhost(wsi); /* get the pointers we were passed in pvo */ vhd->interrupted = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "interrupted")->value; vhd->options = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "options")->value; break; case LWS_CALLBACK_ESTABLISHED: /* generate a block of output before travis times us out */ lwsl_warn("LWS_CALLBACK_ESTABLISHED\n"); pss->ring = lws_ring_create(sizeof(struct msg), RING_DEPTH, __minimal_destroy_message); if (!pss->ring) return 1; pss->tail = 0; break; case LWS_CALLBACK_SERVER_WRITEABLE: lwsl_user("LWS_CALLBACK_SERVER_WRITEABLE\n"); if (pss->write_consume_pending) { /* perform the deferred fifo consume */ lws_ring_consume_single_tail(pss->ring, &pss->tail, 1); pss->write_consume_pending = 0; } pmsg = lws_ring_get_element(pss->ring, &pss->tail); if (!pmsg) { lwsl_user(" (nothing in ring)\n"); break; } flags = lws_write_ws_flags( pmsg->binary ? LWS_WRITE_BINARY : LWS_WRITE_TEXT, pmsg->first, pmsg->final); /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE, pmsg->len, flags); if (m < (int)pmsg->len) { lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lwsl_user(" wrote %d: flags: 0x%x first: %d final %d\n", m, flags, pmsg->first, pmsg->final); /* * Workaround deferred deflate in pmd extension by only * consuming the fifo entry when we are certain it has been * fully deflated at the next WRITABLE callback. You only need * this if you're using pmd. */ pss->write_consume_pending = 1; lws_callback_on_writable(wsi); if (pss->flow_controlled && (int)lws_ring_get_count_free_elements(pss->ring) > RING_DEPTH - 5) { lws_rx_flow_control(wsi, 1); pss->flow_controlled = 0; } if ((*vhd->options & 1) && pmsg && pmsg->final) pss->completed = 1; break; case LWS_CALLBACK_RECEIVE: lwsl_user("LWS_CALLBACK_RECEIVE: %4d (rpp %5d, first %d, " "last %d, bin %d, msglen %d (+ %d = %d))\n", (int)len, (int)lws_remaining_packet_payload(wsi), lws_is_first_fragment(wsi), lws_is_final_fragment(wsi), lws_frame_is_binary(wsi), pss->msglen, (int)len, (int)pss->msglen + (int)len); if (len) { ; //puts((const char *)in); //lwsl_hexdump_notice(in, len); } amsg.first = lws_is_first_fragment(wsi); amsg.final = lws_is_final_fragment(wsi); amsg.binary = lws_frame_is_binary(wsi); n = (int)lws_ring_get_count_free_elements(pss->ring); if (!n) { lwsl_user("dropping!\n"); break; } if (amsg.final) pss->msglen = 0; else pss->msglen += len; amsg.len = len; /* notice we over-allocate by LWS_PRE */ amsg.payload = malloc(LWS_PRE + len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); break; } memcpy((char *)amsg.payload + LWS_PRE, in, len); if (!lws_ring_insert(pss->ring, &amsg, 1)) { __minimal_destroy_message(&amsg); lwsl_user("dropping!\n"); break; } lws_callback_on_writable(wsi); if (n < 3 && !pss->flow_controlled) { pss->flow_controlled = 1; lws_rx_flow_control(wsi, 0); } break; case LWS_CALLBACK_CLOSED: lwsl_user("LWS_CALLBACK_CLOSED\n"); lws_ring_destroy(pss->ring); if (*vhd->options & 1) { if (!*vhd->interrupted) *vhd->interrupted = 1 + pss->completed; lws_cancel_service(lws_get_context(wsi)); } break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL_SERVER_ECHO \ { \ "lws-minimal-server-echo", \ callback_minimal_server_echo, \ sizeof(struct per_session_data__minimal_server_echo), \ 1024, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) /* boilerplate needed if we are built as a dynamic plugin */ static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL_SERVER_ECHO }; LWS_EXTERN LWS_VISIBLE int init_protocol_minimal_server_echo(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_minimal_server_echo(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/000077500000000000000000000000001357643561300266635ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/CMakeLists.txt000066400000000000000000000041161357643561300314250ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8.9) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-server-pmd-bulk) set(SRCS minimal-ws-server-pmd-bulk.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) #require_lws_config(LWS_WITHOUT_EXTENSIONS 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/README.md000066400000000000000000000007671357643561300301540ustar00rootroot00000000000000# lws minimal ws server + permessage-deflate for bulk traffic ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-ws-server-pmd-bulk [2018/03/04 09:30:02:7986] USER: LWS minimal ws server | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 in your browser One or another kind of bulk ws transfer is made to the browser. The ws connection is made via permessage-deflate extension. minimal-ws-server-pmd-bulk.c000066400000000000000000000076701357643561300340540ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/* * lws-minimal-ws-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal_pmd_bulk.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL_PMD_BULK, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted, options; /* pass pointers to shared vars to the protocol */ static const struct lws_protocol_vhost_options pvo_options = { NULL, NULL, "options", /* pvo name */ (void *)&options /* pvo value */ }; static const struct lws_protocol_vhost_options pvo_interrupted = { &pvo_options, NULL, "interrupted", /* pvo name */ (void *)&interrupted /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_interrupted, /* "child" pvo linked-list */ "lws-minimal-pmd-bulk", /* protocol name we belong to on this vhost */ "" /* ignored */ }; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; static const struct lws_extension extensions[] = { { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" "; client_no_context_takeover" "; client_max_window_bits" }, { NULL, NULL, NULL /* terminator */ } }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server + permessage-deflate | visit http://localhost:7681\n"); lwsl_user(" %s [-n (no exts)] [-c (compressible)] [-b (blob)]\n", argv[0]); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.pvo = &pvo; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if (!lws_cmdline_option(argc, argv, "-n")) info.extensions = extensions; if (lws_cmdline_option(argc, argv, "-c")) options |= 1; /* send compressible text */ if (lws_cmdline_option(argc, argv, "-b")) options |= 2; /* send in one giant blob */ info.pt_serv_buf_size = 32 * 1024; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/mount-origin/000077500000000000000000000000001357643561300313125ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/mount-origin/example.js000066400000000000000000000027571357643561300333160ustar00rootroot00000000000000 function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { if (typeof MozWebSocket != "undefined") return new MozWebSocket(urlpath, protocol); return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { ws = new_ws(get_appropriate_ws_url(""), "lws-minimal-pmd-bulk"); try { ws.onopen = function() { document.getElementById("r").disabled = 0; document.getElementById("status").textContent = "ws open "+ ws.extensions; }; ws.onmessage = function got_packet(msg) { console.log("Received ws message len " + msg.data.size); document.getElementById("r").value = document.getElementById("r").value + "\nReceived: " + msg.data.size + " bytes\n"; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; /* echo it back */ ws.send(msg.data); }; ws.onclose = function(){ document.getElementById("r").disabled = 1; document.getElementById("status").textContent = "ws closed"; }; } catch(exception) { alert("

Error " + exception); } } window.addEventListener("load", function() { var n; /* * we make 5 individual connections. Because if we don't, by default pmd * will reuse its dictionary to make subsequent tests very short. */ for (n = 0; n < 5; n++) conn(n); console.log("load"); }, false); libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-corner/mount-origin/favicon.ico000066400000000000000000000025761357643561300340000ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-corner/mount-origin/index.html000066400000000000000000000007741357643561300336520ustar00rootroot00000000000000
LWS pmd corner case test.
A ws link is made back to the server and results shown here.
It should show four binary blobs of increasing size.

Ws closed

libwebsockets.org-logo.svg000066400000000000000000001403321357643561300366760ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-corner/mount-origin strict-csp.svg000066400000000000000000000302361357643561300344060ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-corner/mount-origin libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-corner/protocol_lws_minimal.c000066400000000000000000000242741357643561300336270ustar00rootroot00000000000000/* * ws protocol handler plugin for "lws-minimal" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This version holds a single message at a time, which may be lost if a new * message comes. See the minimal-ws-server-ring sample for the same thing * but using an lws_ring ringbuffer to hold up to 8 messages at a time. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* * This came from... * * cat /dev/urandom | hexdump -C -n 1024 | tr -s ' ' | cut -d' ' -f 2-17 | head -n-1 | sed "s/\ /, 0x/g" | sed "s/^/0x/g" | sed "s/\$/,/g" * * ...then the length tuned by hand to get the ciphertext sizes that we want to * confirm are OK. * * We can only pass in a maximum of one compression buffer of input at a time, * which is 1024 by default. */ unsigned char uncompressible[] = { 0xfe, 0xcc, 0x47, 0xcb, 0x10, 0xf4, 0x3c, 0x85, 0x8e, 0xd4, 0xe2, 0xf6, 0xd1, 0xd1, 0xdb, 0x64, 0x94, 0x50, 0xf6, 0x14, 0x25, 0x03, 0x09, 0x3a, 0xb1, 0x47, 0x86, 0xa8, 0x3c, 0x4f, 0x3b, 0x98, 0x7b, 0x3e, 0x67, 0x3e, 0x22, 0xc5, 0x4c, 0x45, 0xf4, 0xf7, 0xb5, 0x79, 0xc0, 0x26, 0x6e, 0x5c, 0xf4, 0x10, 0x04, 0xa9, 0x3c, 0x4f, 0xed, 0xc5, 0x3d, 0xd4, 0x9f, 0x9f, 0xa3, 0xdb, 0x29, 0xeb, 0x1e, 0xe1, 0x52, 0xab, 0xb5, 0x75, 0x25, 0x86, 0x86, 0x02, 0x2c, 0x9d, 0x9c, 0x86, 0x46, 0x92, 0xe9, 0x04, 0xd8, 0x2c, 0x7d, 0x8a, 0x56, 0xe1, 0xe1, 0xb6, 0x84, 0x4d, 0x17, 0x30, 0x01, 0x60, 0xa6, 0xf4, 0xba, 0xc9, 0x5a, 0x29, 0xe3, 0x05, 0xe1, 0xb4, 0x0b, 0x23, 0x74, 0x93, 0x25, 0x76, 0xce, 0x15, 0xe4, 0x82, 0x9f, 0xbf, 0xe8, 0x6a, 0x4a, 0xc5, 0xc2, 0x22, 0x91, 0x80, 0xb5, 0xd7, 0xb3, 0xce, 0x70, 0x0e, 0xf7, 0xbb, 0x2f, 0xc5, 0x83, 0x39, 0x86, 0xe5, 0x3e, 0xb7, 0x83, 0x87, 0xc2, 0xeb, 0xc8, 0xed, 0x59, 0x26, 0xc1, 0xe6, 0x80, 0x17, 0x3c, 0x29, 0x53, 0x4c, 0x1c, 0x3f, 0x54, 0xbe, 0x34, 0x26, 0x72, 0xed, 0x38, 0x10, 0xd1, 0x37, 0x07, 0x2d, 0x12, 0x31, 0x9b, 0xc5, 0x92, 0x09, 0x13, 0x5d, 0x8e, 0xef, 0xdb, 0x52, 0x7f, 0x7d, 0x6f, 0x62, 0x1e, 0x17, 0xd2, 0xf9, 0x72, 0x74, 0xc7, 0xd6, 0x1f, 0x8b, 0x9c, 0x4c, 0x26, 0xd2, 0x6f, 0x7c, 0x33, 0x06, 0xee, 0xc2, 0xa3, 0x41, 0x43, 0x4f, 0x40, 0x2a, 0x9c, 0xb3, 0x4a, 0xb1, 0x88, 0x4e, 0x6f, 0xf2, 0xb7, 0x38, 0xde, 0x87, 0x0d, 0xdc, 0x15, 0x6a, 0x36, 0x6b, 0xf3, 0x6c, 0x61, 0xf5, 0x24, 0x8e, 0xb6, 0xcc, 0x8a, 0x3a, 0xa0, 0xb4, 0x9b, 0xae, 0x85, 0x87, 0x75, 0xf5, 0xbd, 0x50, 0x1f, 0xb5, 0x0c, 0xdb, 0x6c, 0x68, 0x59, 0xef, 0x37, 0x5a, 0x2a, 0x85, 0xf0, 0xce, 0x4d, 0x58, 0xa1, 0xa5, 0xde, 0x73, 0x9b, 0x1a, 0x3d, 0x8a, 0x00, 0xba, 0x2f, 0xe2, 0xda, 0xad, 0x3c, 0x63, 0x8a, 0x33, 0x39, 0xc4, 0x07, 0x29, 0x1d, 0xa7, 0x40, 0x3b, 0xa4, 0xa6, 0xae, 0xee, 0x37, 0x08, 0x83, 0xd1, 0x72, 0x66, 0x3d, 0x43, 0xe3, 0x7a, 0x48, 0xfc, 0xf8, 0xd4, 0xe3, 0xab, 0xd0, 0xe9, 0xb1, 0xf4, 0x4d, 0x3c, 0x6b, 0x58, 0xde, 0x3c, 0x91, 0x0d, 0x3e, 0xec, 0x35, 0x6d, 0x53, 0xe6, 0xb6, 0x4b, 0xc0, 0x80, 0x18, 0xab, 0x96, 0x7f, 0x05, 0xd7, 0xd4, 0x81, 0x0f, 0x92, 0x2b, 0xaf, 0x72, 0x59, 0xc2, 0x14, 0xca, 0x62, 0x82, 0xac, 0xe3, 0x17, 0x43, 0x61, 0x4d, 0x1e, 0xfc, 0x72, 0xaf, 0xfc, 0x55, 0x2a, 0x2b, 0xb6, 0x8e, 0x6e, 0xe6, 0x86, 0xeb, 0xcc, 0x26, 0x6c, 0xdf, 0xac, 0x02, 0x58, 0xa1, 0x5d, 0x1b, 0x07, 0xe2, 0x5d, 0x50, 0xb9, 0xbf, 0x2e, 0x1f, 0x49, 0x39, 0xe6, 0x7f, 0x2f, 0x0e, 0x9d, 0x09, 0x42, 0xc7, 0xa1, 0xcc, 0xeb, 0x5b, 0x06, 0x1c, 0x11, 0x9f, 0xea, 0xc1, 0x96, 0x82, 0xa9, 0x30, 0x6a, 0xda, 0x98, 0x87, 0x43, 0xfd, 0x25, 0xe7, 0x27, 0x53, 0x9a, 0xb3, 0x2f, 0x19, 0xa9, 0x1a, 0xf4, 0xd6, 0xf3, 0x9e, 0xba, 0x9a, 0x91, 0x52, 0x8f, 0x20, 0x6b, 0x4c, 0x3a, 0x2a, 0x3d, 0xa0, 0xff, 0x8d, 0x61, 0x04, 0xee, 0x26, 0x55, 0xdd, 0xd7, 0x67, 0xe4, 0x84, 0x0d, 0xf1, 0x5d, 0xc7, 0xeb, 0xb3, 0x8c, 0x67, 0xa2, 0xc8, 0x1f, 0x53, 0x02, 0xc4, 0x8c, 0x89, 0xd5, 0x51, 0xc8, 0x8b, 0xb7, 0xc8, 0x11, 0xbe, 0x0e, 0xc2, 0xb1, 0x00, 0x35, 0x81, 0x96, 0xac, 0x90, 0x9c, 0xbc, 0x09, 0x82, 0x75, 0xc3, 0xe7, 0x66, 0x4e, 0x68, 0xdc, 0xa1, 0xf0, 0xd0, 0x2d, 0x49, 0x3b, 0x47, 0xba, 0x19, 0xc8, 0x9b, 0x90, 0x12, 0xc0, 0xdf, 0xda, 0x32, 0x0f, 0x79, 0x6d, 0x1a, 0x5f, 0x92, 0x51, 0x70, 0xfc, 0xca, 0x08, 0xd4, 0x7f, 0x1a, 0x56, 0x04, 0x99, 0x33, 0x89, 0x3d, 0x6f, 0x89, 0x10, 0x25, 0x81, 0xe2, 0xbd, 0x06, 0xd6, 0xaa, 0x02, 0x8e, 0x4c, 0xa3, 0x60, 0xfd, 0xaf, 0x9c, 0x81, 0x75, 0xaf, 0x2f, 0xe1, 0x72, 0xe0, 0x6e, 0x15, 0xdd, 0xbb, 0x92, 0xd1, 0xbe, 0x8e, 0x9b, 0xfb, 0x82, 0xb9, 0x47, 0x6f, 0x02, 0x28, 0x2a, 0x67, 0x50, 0xed, 0x24, 0x9b, 0x4d, 0x69, 0xd7, 0xa9, 0x66, 0x3e, 0x14, 0x4b, 0x00, 0x2a, 0xe4, 0x3d, 0x63, 0xb2, 0x10, 0xd4, 0x05, 0x9d, 0xe3, 0xde, 0xce, 0xd8, 0x04, 0x41, 0x03, 0xb5, 0xda, 0xb0, 0x6f, 0xca, 0x63, 0x64, 0x04, 0xff, 0x07, 0x58, 0x5f, 0x96, 0xf7, 0x6c, 0xb7, 0x67, 0x05, 0xd6, 0x85, 0xf2, 0x1e, 0xc1, 0xdc, 0x76, 0x12, 0x50, 0x83, 0x78, 0xa2, 0x51, 0x94, 0xe1, 0x2e, 0xb8, 0x97, 0x5b, 0x08, 0x81, 0xac, 0x59, 0x43, 0xe9, 0x01, 0x09, 0xa2, 0xed, 0x10, 0x4f, 0xb1, 0x5b, 0xb8, 0x67, 0xe8, 0x61, 0x8d, 0xc8, 0xd9, 0xc3, 0x5f, 0x65, 0xd7, 0xaa, 0x30, 0x0e, 0xc9, 0x43, 0x98, 0x1d, 0xf1, 0xa5, 0x28, 0xd5, 0xa1, 0x6b, 0x8f, 0x89, 0x76, 0x97, 0xa1, 0x3e, 0x6f, 0x39, 0xf4, 0xb9, 0x6b, 0xa7, 0xfe, 0x58, 0x24, 0xcd, 0x75, 0xa8, 0xec, 0x9e, 0x1c, 0x8e, 0x02, 0x2a, 0xce, 0xe9, 0x0a, 0x24, 0x31, 0x89, 0x5a, 0xd5, 0xdd, 0x70, 0x8e, 0x5f, 0xee, 0xc1, 0x34, 0xf8, 0xe2, 0x8a, 0xca, 0xf1, 0xf2, 0x71, 0x4c, 0x31, 0x56, 0xeb, 0x03, 0xf9, 0x6c, 0x0d, 0xa9, 0x65, 0x6e, 0x88, 0x4f, 0x8e, 0x80, 0x69, 0xd7, 0xd4, 0x63, 0x45, 0x9c, 0xab, 0x8c, 0x3d, 0x08, 0x8b, 0xd9, 0x97, 0xdc, 0x88, 0x59, 0x19, 0x2d, 0xb2, 0x84, 0xf4, 0x78, 0x3e, 0xce, 0x80, 0xba, 0xeb, 0x34, 0x5a, 0x9e, 0x8e, 0x98, 0xc4, 0x45, 0x9d, 0x59, 0xb2, 0x7e, 0xc1, 0x7e, 0x5b, 0x89, 0xd0, 0x02, 0xcb, 0xa4, 0xf1, 0xf2, 0xa7, 0x3a, 0x05, 0xc3, 0x7d, 0x43, 0x64, 0x7f, 0xf0, 0xc1, 0xf8, 0x71, 0x3b, 0x38, 0x39, 0xc7, 0x1b, 0xf4, 0x2f, 0x5a, 0x5c, 0x43, 0x1b, 0xe3, 0x93, 0xe8, 0x79, 0xe8, 0x35, 0x63, 0x34, 0x7e, 0x25, 0x41, 0x6f, 0x08, 0xce, 0x6f, 0x95, 0x2a, 0xc2, 0xdc, 0x65, 0xe2, 0xa5, 0xc0, 0xfd, 0xf1, 0x78, 0x32, 0x23, 0x09, 0x75, 0x99, 0x12, 0x7a, 0x83, 0xfd, 0xae, 0x1e, 0xb2, 0xe9, 0x12, 0x5c, 0x3d, 0x03, 0x68, 0x12, 0x1e, 0xe3, 0x8f, 0xff, 0x47, 0xe3, 0xb4, 0x7e, 0x9b, 0x7e, 0x60, 0x2e, 0xf4, 0x06, 0xba, 0x10, 0x08, 0x6b, 0xf9, 0x25, 0x59, 0xf3, 0x61, 0x13, 0x2b, 0xd1, 0x2f, 0x04, 0x5f, 0xd6, 0xd3, 0x42, 0xf6, 0x21, 0x57, 0xf6, 0xd3, 0xb3, 0xec, 0xec, 0x07, 0x33, 0xbf, 0x69, 0x04, 0xec, 0x88, 0x8d, 0x06, 0x2b, 0xfa, 0xee, 0xb2, 0x7b, 0x41, 0x2a, 0x49, 0x0f, 0x30, 0x52, 0x41, 0x29, 0x70, 0xd0, 0xf6, 0xb6, 0xbf, 0x27, 0x1a, 0x56, 0x9a, 0x4b, 0x2a, 0x67, 0xfb, 0xc8, 0x16, 0x46, 0x59, 0xc7, 0xf5, 0x5f, 0x20, 0x10, 0x25, 0x6c, 0x1e, 0x36, 0x20, 0x0c, 0x3e, 0x7e, 0x15, 0x6c, 0xa2, 0xbd, 0x22, 0xc4, 0x3d, 0xc9, 0x74, 0x56, 0xab, 0x31, 0x92, 0xb8, 0x9f, 0xa1, 0x05, 0x2e, 0xc4, 0xdb, 0x32, 0x91, 0xcb, 0x0f, 0x4a, 0x73, 0x7f, 0xe1, 0xe6, 0x65, 0x2e, 0x5e, 0xa6, 0xaf, 0xae, 0xa9, 0x04, 0x14, 0x83, 0xef, 0x19, 0x70, 0x5e, 0xcb, 0xf5, 0x87, 0xcc, 0x45, 0xf7, 0x60, 0xd7, 0x9d, 0x1e, 0x2e, /* 1012 */ /* up to here, this generates a 1022-byte single packet of compressed * data that is well-formed and produces 1012 bytes of plaintext. * * The compressed packet ends * * 03F0: 70 5E CB F5 87 CC 45 F7 60 D7 9D 1E 2E 00 */ 0x54, /* 1013 */ /* up to here, this generates a 1023-byte single packet of compressed * data that is well-formed and produces 1013 bytes of plaintext. * * The compressed packet ends * * 03F0: 70 5E CB F5 87 CC 45 F7 60 D7 9D 1E 2E 54 00 */ 0x83, /* 1014 */ /* up to here, a 1023-byte + 3-byte (1 byte payload) packet * of uncompressed length 1014 */ 0x09, 0x99, 0xf9, 0x71, 0x9f, 0x15, 0x49, 0xda, 0xa8, 0x99, /* 1024 */ /* up to here, a 1023-byte (1020 payload) + 3-byte (1 payload) packet * of uncompressed length 1019 */ 0xf5, 0xe6, 0xa1, 0x71, 0x64, 0x9a, 0x95, 0xed, }; /* generates ciphertext: 1022 1023 1023 + 3 1023 + 3 */ static int corner_lengths[] = { /* bytes plaintext, ciphertext */ 1012, /* 1019 */ 1013, /* 1020 */ 1014, /* 1021 */ 1019, /* 1021 */ 1024, /* 1021*/ }; /* one of these is created for each client connecting to us */ struct per_session_data__minimal { int which; int last; /* 0 no test, else test number in corner_lengths[] + 1 */ }; static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; unsigned char buf[LWS_PRE + 2048]; int m; switch (reason) { case LWS_CALLBACK_ESTABLISHED: if (lws_hdr_copy(wsi, (char *)buf, sizeof(buf), WSI_TOKEN_GET_URI) < 0) return -1; pss->last = atoi((char *)buf + 1); if (pss->last > (int)LWS_ARRAY_SIZE(corner_lengths)) pss->last = 0; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_SERVER_WRITEABLE: if (!pss->last) break; lwsl_err("%s: writable %d, %d\n", __func__, pss->last, corner_lengths[pss->last - 1]); memcpy(buf + LWS_PRE, uncompressible, corner_lengths[pss->last - 1]); /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, buf + LWS_PRE, corner_lengths[pss->last - 1], LWS_WRITE_BINARY); if (m < corner_lengths[pss->last - 1]) { lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } pss->last = 0; break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 2048, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) /* boilerplate needed if we are built as a dynamic plugin */ static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL }; LWS_EXTERN LWS_VISIBLE int init_protocol_minimal(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_minimal(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd/000077500000000000000000000000001357643561300257305ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd/CMakeLists.txt000066400000000000000000000041031357643561300304660ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8.9) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-server-pmd) set(SRCS minimal-ws-server-pmd.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) require_lws_config(LWS_WITHOUT_EXTENSIONS 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd/README.md000066400000000000000000000010651357643561300272110ustar00rootroot00000000000000# lws minimal ws server + permessage-deflate ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-ws-server [2018/03/04 09:30:02:7986] USER: LWS minimal ws server | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 on multiple browser windows Text you type in any browser window is sent to all of them. For simplicity of this example, only one line of text is cached at the server. The ws connection is made via permessage-deflate extension. libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd/minimal-ws-server-pmd.c000066400000000000000000000055311357643561300322370ustar00rootroot00000000000000/* * lws-minimal-ws-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; static const struct lws_extension extensions[] = { { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" "; client_no_context_takeover" "; client_max_window_bits" }, { NULL, NULL, NULL /* terminator */ } }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server + permessage-deflate | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.extensions = extensions; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd/mount-origin/000077500000000000000000000000001357643561300303575ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd/mount-origin/example.js000066400000000000000000000031651357643561300323550ustar00rootroot00000000000000 function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { if (typeof MozWebSocket != "undefined") return new MozWebSocket(urlpath, protocol); return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { ws = new_ws(get_appropriate_ws_url(""), "lws-minimal"); try { ws.onopen = function() { document.getElementById("m").disabled = 0; document.getElementById("b").disabled = 0; document.getElementById("status").textContent = "ws open "+ ws.extensions; }; ws.onmessage =function got_packet(msg) { document.getElementById("r").value = document.getElementById("r").value + msg.data + "\n"; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ document.getElementById("m").disabled = 1; document.getElementById("b").disabled = 1; document.getElementById("status").textContent = "ws closed"; }; } catch(exception) { alert("

Error " + exception); } function sendmsg() { ws.send(document.getElementById("m").value); document.getElementById("m").value = ""; } document.getElementById("b").addEventListener("click", sendmsg); }, false); libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd/mount-origin/favicon.ico000066400000000000000000000025761357643561300325120ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd/mount-origin/index.html000066400000000000000000000010061357643561300323510ustar00rootroot00000000000000
LWS chat minimal ws server example.
Chat is sent to all browsers open on this page.

Ws closed


libwebsockets.org-logo.svg000066400000000000000000001403321357643561300354100ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd/mount-origin libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd/mount-origin/strict-csp.svg000066400000000000000000000302361357643561300331770ustar00rootroot00000000000000 libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd/protocol_lws_minimal.c000066400000000000000000000110271357643561300323310ustar00rootroot00000000000000/* * ws protocol handler plugin for "lws-minimal" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This version holds a single message at a time, which may be lost if a new * message comes. See the minimal-ws-server-ring sample for the same thing * but using an lws_ring ringbuffer to hold up to 8 messages at a time. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* one of these created for each message */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* one of these is created for each client connecting to us */ struct per_session_data__minimal { struct per_session_data__minimal *pss_list; struct lws *wsi; int last; /* the last message number we sent */ }; /* one of these is created for each vhost our protocol is used with */ struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__minimal *pss_list; /* linked-list of live pss*/ struct msg amsg; /* the one pending message... */ int current; /* the current message number we are caching */ }; /* destroys the message when everyone has had a copy of it */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); int m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); break; case LWS_CALLBACK_ESTABLISHED: /* add ourselves to the list of live pss held in the vhd */ pss->pss_list = vhd->pss_list; vhd->pss_list = pss; pss->wsi = wsi; pss->last = vhd->current; break; case LWS_CALLBACK_CLOSED: /* remove our closing pss from the list of live pss */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { if (*ppss == pss) { *ppss = pss->pss_list; break; } } lws_end_foreach_llp(ppss, pss_list); break; case LWS_CALLBACK_SERVER_WRITEABLE: if (!vhd->amsg.payload) break; if (pss->last == vhd->current) break; /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)vhd->amsg.payload) + LWS_PRE, vhd->amsg.len, LWS_WRITE_TEXT); if (m < (int)vhd->amsg.len) { lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } pss->last = vhd->current; break; case LWS_CALLBACK_RECEIVE: if (vhd->amsg.payload) __minimal_destroy_message(&vhd->amsg); vhd->amsg.len = len; /* notice we over-allocate by LWS_PRE */ vhd->amsg.payload = malloc(LWS_PRE + len); if (!vhd->amsg.payload) { lwsl_user("OOM: dropping\n"); break; } memcpy((char *)vhd->amsg.payload + LWS_PRE, in, len); vhd->current++; /* * let everybody know we want to write something on them * as soon as they are ready */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 128, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) /* boilerplate needed if we are built as a dynamic plugin */ static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL }; LWS_EXTERN LWS_VISIBLE int init_protocol_minimal(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_minimal(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-ring/000077500000000000000000000000001357643561300261075ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-ring/CMakeLists.txt000066400000000000000000000040111357643561300306430ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-server-ring) set(SRCS minimal-ws-server-ring.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-ring/README.md000066400000000000000000000011321357643561300273630ustar00rootroot00000000000000# lws minimal ws server (lws_ring) ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-ws-server [2018/03/04 09:30:02:7986] USER: LWS minimal ws server (lws_ring) | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 on multiple browser windows Text you type in any browser window is sent to all of them. A ringbuffer holds up to 8 lines of text. This also demonstrates how the ringbuffer can take action against lagging or disconnected clients that cause the ringbuffer to fill. libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-ring/minimal-ws-server-ring.c000066400000000000000000000051611357643561300325740ustar00rootroot00000000000000/* * lws-minimal-ws-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws, * with an added websocket chat server using a ringbuffer. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server (lws_ring) | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-ring/mount-origin/000077500000000000000000000000001357643561300305365ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-ring/mount-origin/example.js000066400000000000000000000027461357643561300325400ustar00rootroot00000000000000function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { if (typeof MozWebSocket != "undefined") return new MozWebSocket(urlpath, protocol); return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { ws = new_ws(get_appropriate_ws_url(""), "lws-minimal"); try { ws.onopen = function() { document.getElementById("m").disabled = 0; document.getElementById("b").disabled = 0; }; ws.onmessage =function got_packet(msg) { document.getElementById("r").value = document.getElementById("r").value + msg.data + "\n"; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ document.getElementById("m").disabled = 1; document.getElementById("b").disabled = 1; }; } catch(exception) { alert("

Error " + exception); } function sendmsg() { ws.send(document.getElementById("m").value); document.getElementById("m").value = ""; } document.getElementById("b").addEventListener("click", sendmsg); }, false); libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-ring/mount-origin/favicon.ico000066400000000000000000000025761357643561300326710ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-ring/mount-origin/index.html000066400000000000000000000007321357643561300325350ustar00rootroot00000000000000
LWS chat minimal ws server example.
Chat is sent to all browsers open on this page.


libwebsockets.org-logo.svg000066400000000000000000001403321357643561300355670ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-ring/mount-origin libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-ring/mount-origin/strict-csp.svg000066400000000000000000000302361357643561300333560ustar00rootroot00000000000000 libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-ring/protocol_lws_minimal.c000066400000000000000000000177571357643561300325300ustar00rootroot00000000000000/* * ws protocol handler plugin for "lws-minimal" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This version uses an lws_ring ringbuffer to cache up to 8 messages at a time, * so it's not so easy to lose messages. * * This also demonstrates how to "cull", ie, kill, connections that can't * keep up for some reason. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* one of these created for each message */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* one of these is created for each client connecting to us */ struct per_session_data__minimal { struct per_session_data__minimal *pss_list; struct lws *wsi; uint32_t tail; unsigned int culled:1; }; /* one of these is created for each vhost our protocol is used with */ struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__minimal *pss_list; /* linked-list of live pss*/ struct lws_ring *ring; /* ringbuffer holding unsent messages */ }; static void cull_lagging_clients(struct per_vhost_data__minimal *vhd) { uint32_t oldest_tail = lws_ring_get_oldest_tail(vhd->ring); struct per_session_data__minimal *old_pss = NULL; int most = 0, before = lws_ring_get_count_waiting_elements(vhd->ring, &oldest_tail), m; /* * At least one guy with the oldest tail has lagged too far, filling * the ringbuffer with stuff waiting for them, while new stuff is * coming in, and they must close, freeing up ringbuffer entries. */ lws_start_foreach_llp_safe(struct per_session_data__minimal **, ppss, vhd->pss_list, pss_list) { if ((*ppss)->tail == oldest_tail) { old_pss = *ppss; lwsl_user("Killing lagging client %p\n", (*ppss)->wsi); lws_set_timeout((*ppss)->wsi, PENDING_TIMEOUT_LAGGING, /* * we may kill the wsi we came in on, * so the actual close is deferred */ LWS_TO_KILL_ASYNC); /* * We might try to write something before we get a * chance to close. But this pss is now detached * from the ring buffer. Mark this pss as culled so we * don't try to do anything more with it. */ (*ppss)->culled = 1; /* * Because we can't kill it synchronously, but we * know it's closing momentarily and don't want its * participation any more, remove its pss from the * vhd pss list early. (This is safe to repeat * uselessly later in the close flow). * * Notice this changes *ppss! */ lws_ll_fwd_remove(struct per_session_data__minimal, pss_list, (*ppss), vhd->pss_list); /* use the changed *ppss so we won't skip anything */ continue; } else { /* * so this guy is a survivor of the cull. Let's track * what is the largest number of pending ring elements * for any survivor. */ m = lws_ring_get_count_waiting_elements(vhd->ring, &((*ppss)->tail)); if (m > most) most = m; } } lws_end_foreach_llp_safe(ppss); /* it would mean we lost track of oldest... but Coverity insists */ if (!old_pss) return; /* * Let's recover (ie, free up) all the ring slots between the * original oldest's last one and the "worst" survivor. */ lws_ring_consume_and_update_oldest_tail(vhd->ring, struct per_session_data__minimal, &old_pss->tail, before - most, vhd->pss_list, tail, pss_list); lwsl_user("%s: shrunk ring from %d to %d\n", __func__, before, most); } /* destroys the message when everyone has had a copy of it */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct msg *pmsg; struct msg amsg; int n, m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); vhd->ring = lws_ring_create(sizeof(struct msg), 8, __minimal_destroy_message); if (!vhd->ring) return 1; break; case LWS_CALLBACK_PROTOCOL_DESTROY: lws_ring_destroy(vhd->ring); break; case LWS_CALLBACK_ESTABLISHED: /* add ourselves to the list of live pss held in the vhd */ lwsl_user("LWS_CALLBACK_ESTABLISHED: wsi %p\n", wsi); lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); pss->tail = lws_ring_get_oldest_tail(vhd->ring); pss->wsi = wsi; break; case LWS_CALLBACK_CLOSED: lwsl_user("LWS_CALLBACK_CLOSED: wsi %p\n", wsi); /* remove our closing pss from the list of live pss */ lws_ll_fwd_remove(struct per_session_data__minimal, pss_list, pss, vhd->pss_list); break; case LWS_CALLBACK_SERVER_WRITEABLE: if (pss->culled) break; pmsg = lws_ring_get_element(vhd->ring, &pss->tail); if (!pmsg) break; /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE, pmsg->len, LWS_WRITE_TEXT); if (m < (int)pmsg->len) { lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lws_ring_consume_and_update_oldest_tail( vhd->ring, /* lws_ring object */ struct per_session_data__minimal, /* type of objects with tails */ &pss->tail, /* tail of guy doing the consuming */ 1, /* number of payload objects being consumed */ vhd->pss_list, /* head of list of objects with tails */ tail, /* member name of tail in objects with tails */ pss_list /* member name of next object in objects with tails */ ); /* more to do for us? */ if (lws_ring_get_element(vhd->ring, &pss->tail)) /* come back as soon as we can write more */ lws_callback_on_writable(pss->wsi); break; case LWS_CALLBACK_RECEIVE: n = (int)lws_ring_get_count_free_elements(vhd->ring); if (!n) { /* forcibly make space */ cull_lagging_clients(vhd); n = (int)lws_ring_get_count_free_elements(vhd->ring); } if (!n) break; lwsl_user("LWS_CALLBACK_RECEIVE: free space %d\n", n); amsg.len = len; /* notice we over-allocate by LWS_PRE... */ amsg.payload = malloc(LWS_PRE + len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); break; } /* ...and we copy the payload in at +LWS_PRE */ memcpy((char *)amsg.payload + LWS_PRE, in, len); if (!lws_ring_insert(vhd->ring, &amsg, 1)) { __minimal_destroy_message(&amsg); lwsl_user("dropping!\n"); break; } /* * let everybody know we want to write something on them * as soon as they are ready */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 0, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) /* boilerplate needed if we are built as a dynamic plugin */ static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL }; LWS_EXTERN LWS_VISIBLE int init_protocol_minimal(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_minimal(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threadpool/000077500000000000000000000000001357643561300273115ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threadpool/CMakeLists.txt000066400000000000000000000046331357643561300320570ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckIncludeFile) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-server-threadpool) set(SRCS minimal-ws-server-threadpool.c) MACRO(require_pthreads result) CHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H) if (NOT LWS_HAVE_PTHREAD_H) if (LWS_WITH_MINIMAL_EXAMPLES) set(result 0) else() message(FATAL_ERROR "threading support requires pthreads") endif() endif() ENDMACRO() # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) require_lws_config(LWS_WITH_THREADPOOL 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared pthread) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets pthread) endif() endif() libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threadpool/README.md000066400000000000000000000011731357643561300305720ustar00rootroot00000000000000# lws minimal ws server (threadpool) ## build ``` $ cmake . && make ``` Pthreads is required on your system. This demonstrates how to cleanly assign tasks bound to a wsi to a thread pool, with a queue if the pool is occupied. It creates a threadpool with 3 worker threads and a maxiumum queue size of 4. The web page at http://localhost:7681 then starts up 8 x ws connections. ## usage ``` $ ./lws-minimal-ws-server-threadpool [2018/03/13 13:09:52:2208] USER: LWS minimal ws server + threadpool | visit http://localhost:7681 [2018/03/13 13:09:52:2365] NOTICE: Creating Vhost 'default' port 7681, 2 protocols, IPv6 off ``` minimal-ws-server-threadpool.c000066400000000000000000000071121357643561300351170ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threadpool/* * lws-minimal-ws-server=threadpool * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal ws server that can cooperate with * other threads cleanly. Two other threads are started, which fill * a ringbuffer with strings at 10Hz. * * The actual work and thread spawning etc are done in the protocol * implementation in protocol_lws_minimal.c. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal_threadpool.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; /* * This demonstrates how to pass a pointer into a specific protocol handler * running on a specific vhost. In this case, it's our default vhost and * we pass the pvo named "config" with the value a const char * "myconfig". * * This is the preferred way to pass configuration into a specific vhost + * protocol instance. */ static const struct lws_protocol_vhost_options pvo_ops = { NULL, NULL, "config", /* pvo name */ (void *)"myconfig" /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_ops, /* "child" pvo linked-list */ "lws-minimal", /* protocol name we belong to on this vhost */ "" /* ignored */ }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server + threadpool | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.pvo = &pvo; /* per-vhost options */ info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* start the threads that create content */ while (!interrupted) if (lws_service(context, 0)) interrupted = 1; lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threadpool/mount-origin/000077500000000000000000000000001357643561300317405ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threadpool/mount-origin/example.js000066400000000000000000000030731357643561300337340ustar00rootroot00000000000000var head = 0, tail = 0, ring = new Array(); function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { if (typeof MozWebSocket != "undefined") return new MozWebSocket(urlpath, protocol); return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var n, wsa = new Array, alive = 0; for (n = 0; n < 8; n++) { ws = new_ws(get_appropriate_ws_url(""), "lws-minimal"); wsa.push(ws); try { ws.onopen = function() { document.getElementById("r").disabled = 0; alive++; }; ws.onmessage = function got_packet(msg) { var n, s = ""; ring[head] = msg.data + "\n"; head = (head + 1) % 50; if (tail === head) tail = (tail + 1) % 50; n = tail; do { s = s + ring[n]; n = (n + 1) % 50; } while (n !== head); document.getElementById("r").value = s; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ if (--alive === 0) document.getElementById("r").disabled = 1; }; } catch(exception) { alert("

Error " + exception); } } }, false); libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threadpool/mount-origin/favicon.ico000066400000000000000000000025761357643561300340730ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threadpool/mount-origin/index.html000066400000000000000000000011171357643561300337350ustar00rootroot00000000000000
Minimal ws server threadpool example.
8 x ws connections are opened back to the example server.
There are three threads in the pool to service them, the
remainder are queued until a thread in the pool is free.

The textarea show the last 50 lines received.


libwebsockets.org-logo.svg000066400000000000000000001403321357643561300367710ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threadpool/mount-origin strict-csp.svg000066400000000000000000000302361357643561300345010ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threadpool/mount-origin protocol_lws_minimal_threadpool.c000066400000000000000000000215071357643561300360600ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threadpool/* * ws protocol handler plugin for "lws-minimal" demonstrating lws threadpool * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The main reason some things are as they are is that the task lifecycle may * be unrelated to the wsi lifecycle that queued that task. * * Consider the task may call an external library and run for 30s without * "checking in" to see if it should stop. The wsi that started the task may * have closed at any time before the 30s are up, with the browser window * closing or whatever. * * So data shared between the asynchronous task and the wsi must have its * lifecycle determined by the task, not the wsi. That means a separate struct * that can be freed by the task. * * In the case the wsi outlives the task, the tasks do not get destroyed until * the service thread has called lws_threadpool_task_status() on the completed * task. So there is no danger of the shared task private data getting randomly * freed. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include struct per_vhost_data__minimal { struct lws_threadpool *tp; const char *config; }; struct task_data { char result[64]; uint64_t pos, end; }; /* * Create the private data for the task * * Notice we hand over responsibility for the cleanup and freeing of the * allocated task_data to the threadpool, because the wsi it was originally * bound to may close while the thread is still running. So we allocate * something discrete for the task private data that can be definitively owned * and freed by the threadpool, not the wsi... the pss won't do, as it only * exists for the lifecycle of the wsi connection. * * When the task is created, we also tell it how to destroy the private data * by giving it args.cleanup as cleanup_task_private_data() defined below. */ static struct task_data * create_task_private_data(void) { struct task_data *priv = malloc(sizeof(*priv)); return priv; } /* * Destroy the private data for the task * * Notice the wsi the task was originally bound to may be long gone, in the * case we are destroying the lws context and the thread was doing something * for a long time without checking in. */ static void cleanup_task_private_data(struct lws *wsi, void *user) { struct task_data *priv = (struct task_data *)user; free(priv); } /* * This runs in its own thread, from the threadpool. * * The implementation behind this in lws uses pthreads, but no pthreadisms are * required in the user code. * * The example counts to 10M, "checking in" to see if it should stop after every * 100K and pausing to sync with the service thread to send a ws message every * 1M. It resumes after the service thread determines the wsi is writable and * the LWS_CALLBACK_SERVER_WRITEABLE indicates the task thread can continue by * calling lws_threadpool_task_sync(). */ static enum lws_threadpool_task_return task_function(void *user, enum lws_threadpool_task_status s) { struct task_data *priv = (struct task_data *)user; int budget = 100 * 1000; if (priv->pos == priv->end) return LWS_TP_RETURN_FINISHED; /* * Preferably replace this with ~100ms of your real task, so it * can "check in" at short intervals to see if it has been asked to * stop. * * You can just run tasks atomically here with the thread dedicated * to it, but it will cause odd delays while shutting down etc and * the task will run to completion even if the wsi that started it * has since closed. */ while (budget--) priv->pos++; usleep(100000); if (!(priv->pos % (1000 * 1000))) { lws_snprintf(priv->result + LWS_PRE, sizeof(priv->result) - LWS_PRE, "pos %llu", (unsigned long long)priv->pos); return LWS_TP_RETURN_SYNC; } return LWS_TP_RETURN_CHECKING_IN; } static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct lws_protocol_vhost_options *pvo; struct lws_threadpool_create_args cargs; struct lws_threadpool_task_args args; struct lws_threadpool_task *task; struct task_data *priv; int n, m, r = 0; char name[32]; void *_user; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: /* create our per-vhost struct */ vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); if (!vhd) return 1; /* recover the pointer to the globals struct */ pvo = lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "config"); if (!pvo || !pvo->value) { lwsl_err("%s: Can't find \"config\" pvo\n", __func__); return 1; } vhd->config = pvo->value; memset(&cargs, 0, sizeof(cargs)); cargs.max_queue_depth = 8; cargs.threads = 3; vhd->tp = lws_threadpool_create(lws_get_context(wsi), &cargs, "%s", lws_get_vhost_name(lws_get_vhost(wsi))); if (!vhd->tp) return 1; lws_timed_callback_vh_protocol(lws_get_vhost(wsi), lws_get_protocol(wsi), LWS_CALLBACK_USER, 1); break; case LWS_CALLBACK_PROTOCOL_DESTROY: lws_threadpool_finish(vhd->tp); lws_threadpool_destroy(vhd->tp); break; case LWS_CALLBACK_USER: /* * in debug mode, dump the threadpool stat to the logs once * a second */ lws_threadpool_dump(vhd->tp); lws_timed_callback_vh_protocol(lws_get_vhost(wsi), lws_get_protocol(wsi), LWS_CALLBACK_USER, 1); break; case LWS_CALLBACK_ESTABLISHED: memset(&args, 0, sizeof(args)); priv = args.user = create_task_private_data(); if (!args.user) return 1; priv->pos = 0; priv->end = 10 * 1000 * 1000; /* queue the task... the task takes on responsibility for * destroying args.user. pss->priv just has a copy of it */ args.wsi = wsi; args.task = task_function; args.cleanup = cleanup_task_private_data; lws_get_peer_simple(wsi, name, sizeof(name)); if (!lws_threadpool_enqueue(vhd->tp, &args, "ws %s", name)) { lwsl_user("%s: Couldn't enqueue task\n", __func__); cleanup_task_private_data(wsi, priv); return 1; } lws_set_timeout(wsi, PENDING_TIMEOUT_THREADPOOL, 30); /* * so the asynchronous worker will let us know the next step * by causing LWS_CALLBACK_SERVER_WRITEABLE */ break; case LWS_CALLBACK_CLOSED: break; case LWS_CALLBACK_WS_SERVER_DROP_PROTOCOL: lwsl_debug("LWS_CALLBACK_WS_SERVER_DROP_PROTOCOL: %p\n", wsi); lws_threadpool_dequeue(wsi); break; case LWS_CALLBACK_SERVER_WRITEABLE: /* * even completed tasks wait in a queue until we call the * below on them. Then they may destroy themselves and their * args.user data (by calling the cleanup callback). * * If you need to get things from the still-valid private task * data, copy it here before calling * lws_threadpool_task_status() that may free the task and the * private task data. */ n = lws_threadpool_task_status_wsi(wsi, &task, &_user); lwsl_debug("%s: LWS_CALLBACK_SERVER_WRITEABLE: status %d\n", __func__, n); switch(n) { case LWS_TP_STATUS_FINISHED: case LWS_TP_STATUS_STOPPED: case LWS_TP_STATUS_QUEUED: case LWS_TP_STATUS_RUNNING: case LWS_TP_STATUS_STOPPING: return 0; case LWS_TP_STATUS_SYNCING: /* the task has paused for us to do something */ break; default: return -1; } priv = (struct task_data *)_user; lws_set_timeout(wsi, PENDING_TIMEOUT_THREADPOOL_TASK, 5); n = strlen(priv->result + LWS_PRE); m = lws_write(wsi, (unsigned char *)priv->result + LWS_PRE, n, LWS_WRITE_TEXT); if (m < n) { lwsl_err("ERROR %d writing to ws socket\n", m); lws_threadpool_task_sync(task, 1); return -1; } /* * service thread has done whatever it wanted to do with the * data the task produced: if it's waiting to do more it can * continue now. */ lws_threadpool_task_sync(task, 0); break; default: break; } return r; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal", \ callback_minimal, \ 0, \ 128, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) /* boilerplate needed if we are built as a dynamic plugin */ static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL }; LWS_EXTERN LWS_VISIBLE int init_protocol_minimal(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_minimal(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads-smp/000077500000000000000000000000001357643561300273775ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads-smp/CMakeLists.txt000066400000000000000000000045321357643561300321430ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckIncludeFile) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-server-threads-smp) set(SRCS minimal-ws-server.c) MACRO(require_pthreads result) CHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H) if (NOT LWS_HAVE_PTHREAD_H) if (LWS_WITH_MINIMAL_EXAMPLES) set(result 0) else() message(FATAL_ERROR "threading support requires pthreads") endif() endif() ENDMACRO() # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared pthread) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets pthread) endif() endif() libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads-smp/README.md000066400000000000000000000024071357643561300306610ustar00rootroot00000000000000# lws minimal ws server (threads) + SMP This demonstrates both independent threads creating content as in the -threads example, and multiple service threads as in the http-server-smp example (but with ws). ## build You must first build libwebsockets itself with cmake `-DLWS_MAX_SMP=8` or some other number greater than one. ``` $ cmake . && make ``` Pthreads is required on your system. ## usage ``` $ ./lws-minimal-ws-server-threads-smp [2019/01/28 06:59:17:4217] USER: LWS minimal ws server + threads + smp | visit http://localhost:7681 [2019/01/28 06:59:17:4219] NOTICE: Service threads: 2 [2019/01/28 06:59:17:4220] NOTICE: LWS_CALLBACK_EVENT_WAIT_CANCELLED in svc tid 0x7fec48af8700 [2019/01/28 06:59:17:4220] NOTICE: LWS_CALLBACK_EVENT_WAIT_CANCELLED in svc tid 0x7fec48af8700 ... ``` Visit http://localhost:7681 on multiple browser windows. You may need to open 4 before the second service thread is used (check "svc tid" in the browser output). Two lws service threads are started. Two separate asynchronous threads generate strings and add them to a ringbuffer, signalling all lws service threads to send new entries to all the browser windows. This demonstrates how to safely manage asynchronously generated content and hook it up to the lws service threads. libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads-smp/minimal-ws-server.c000066400000000000000000000075751357643561300331420ustar00rootroot00000000000000/* * lws-minimal-ws-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal ws server that can cooperate with * other threads cleanly. Two other threads are started, which fill * a ringbuffer with strings at 10Hz. * * The actual work and thread spawning etc are done in the protocol * implementation in protocol_lws_minimal.c. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" #define COUNT_THREADS 2 static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, { NULL, NULL, 0, 0 } /* terminator */ }; static struct lws_context *context; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; /* * This demonstrates how to pass a pointer into a specific protocol handler * running on a specific vhost. In this case, it's our default vhost and * we pass the pvo named "config" with the value a const char * "myconfig". * * This is the preferred way to pass configuration into a specific vhost + * protocol instance. */ static const struct lws_protocol_vhost_options pvo_ops = { NULL, NULL, "config", /* pvo name */ (void *)"myconfig" /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_ops, /* "child" pvo linked-list */ "lws-minimal", /* protocol name we belong to on this vhost */ "" /* ignored */ }; void *thread_service(void *threadid) { while (lws_service_tsi(context, 1000, (int)(lws_intptr_t)threadid) >= 0 && !interrupted) ; pthread_exit(NULL); return NULL; } void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { int n, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; pthread_t pthread_service[COUNT_THREADS]; struct lws_context_creation_info info; const char *p; void *retval; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server + threads + smp | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.pvo = &pvo; /* per-vhost options */ info.count_threads = COUNT_THREADS; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } lwsl_notice(" Service threads: %d\n", lws_get_count_threads(context)); /* start all the service threads */ for (n = 0; n < lws_get_count_threads(context); n++) if (pthread_create(&pthread_service[n], NULL, thread_service, (void *)(lws_intptr_t)n)) lwsl_err("Failed to start service thread\n"); /* wait for all the service threads to exit */ while ((--n) >= 0) pthread_join(pthread_service[n], &retval); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads-smp/mount-origin/000077500000000000000000000000001357643561300320265ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads-smp/mount-origin/example.js000066400000000000000000000026451357643561300340260ustar00rootroot00000000000000var head = 0, tail = 0, ring = new Array(); function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { if (typeof MozWebSocket != "undefined") return new MozWebSocket(urlpath, protocol); return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { ws = new_ws(get_appropriate_ws_url(""), "lws-minimal"); try { ws.onopen = function() { document.getElementById("r").disabled = 0; }; ws.onmessage =function got_packet(msg) { var n, s = ""; ring[head] = msg.data + "\n"; head = (head + 1) % 50; if (tail === head) tail = (tail + 1) % 50; n = tail; do { s = s + ring[n]; n = (n + 1) % 50; } while (n !== head); document.getElementById("r").value = s; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ document.getElementById("r").disabled = 1; }; } catch(exception) { alert("

Error " + exception); } }, false); favicon.ico000066400000000000000000000025761357643561300341020ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads-smp/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads-smp/mount-origin/index.html000066400000000000000000000007521357643561300340270ustar00rootroot00000000000000
Minimal ws server threads SMP example.
Strings generated by server threads are sent to all browsers open on this page.
The textarea show the last 50 lines received.


libwebsockets.org-logo.svg000066400000000000000000001403321357643561300370570ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads-smp/mount-origin strict-csp.svg000066400000000000000000000302361357643561300345670ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads-smp/mount-origin libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads-smp/protocol_lws_minimal.c000066400000000000000000000202361357643561300340020ustar00rootroot00000000000000/* * ws protocol handler plugin for "lws-minimal" demonstrating multithread * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* one of these created for each message in the ringbuffer */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* * One of these is created for each client connecting to us. * * It is ONLY read or written from the lws service thread context. */ struct per_session_data__minimal { struct per_session_data__minimal *pss_list; struct lws *wsi; uint32_t tail; }; /* one of these is created for each vhost our protocol is used with */ struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__minimal *pss_list; /* linked-list of live pss*/ pthread_t pthread_spam[2]; pthread_mutex_t lock_ring; /* serialize access to the ring buffer */ struct lws_ring *ring; /* {lock_ring} ringbuffer holding unsent content */ const char *config; char finished; }; #if defined(WIN32) static void usleep(unsigned long l) { Sleep(l / 1000); } #endif /* * This runs under both lws service and "spam threads" contexts. * Access is serialized by vhd->lock_ring. */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } /* * This runs under the "spam thread" thread context only. * * We spawn two threads that generate messages with this. * */ static void * thread_spam(void *d) { struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *)d; struct msg amsg; int len = 128, index = 1, n; do { /* don't generate output if nobody connected */ if (!vhd->pss_list) goto wait; pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ /* only create if space in ringbuffer */ n = (int)lws_ring_get_count_free_elements(vhd->ring); if (!n) { lwsl_user("dropping!\n"); goto wait_unlock; } amsg.payload = malloc(LWS_PRE + len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); goto wait_unlock; } n = lws_snprintf((char *)amsg.payload + LWS_PRE, len, "%s: spam tid: %p, msg: %d", vhd->config, (void *)pthread_self(), index++); amsg.len = n; n = lws_ring_insert(vhd->ring, &amsg, 1); if (n != 1) { __minimal_destroy_message(&amsg); lwsl_user("dropping!\n"); } else /* * This will cause a LWS_CALLBACK_EVENT_WAIT_CANCELLED * in the lws service thread context. */ lws_cancel_service(vhd->context); wait_unlock: pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ wait: usleep(100000); } while (!vhd->finished); lwsl_notice("thread_spam %p exiting\n", (void *)pthread_self()); pthread_exit(NULL); return NULL; } /* this runs under the lws service thread context only */ static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct lws_protocol_vhost_options *pvo; const struct msg *pmsg; char temp[LWS_PRE + 256]; void *retval; int n, m, r = 0; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: /* create our per-vhost struct */ vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); if (!vhd) return 1; pthread_mutex_init(&vhd->lock_ring, NULL); /* recover the pointer to the globals struct */ pvo = lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "config"); if (!pvo || !pvo->value) { lwsl_err("%s: Can't find \"config\" pvo\n", __func__); return 1; } vhd->config = pvo->value; vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); vhd->ring = lws_ring_create(sizeof(struct msg), 8, __minimal_destroy_message); if (!vhd->ring) { lwsl_err("%s: failed to create ring\n", __func__); return 1; } /* start the content-creating threads */ for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (pthread_create(&vhd->pthread_spam[n], NULL, thread_spam, vhd)) { lwsl_err("thread creation failed\n"); r = 1; goto init_fail; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: init_fail: vhd->finished = 1; for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (vhd->pthread_spam[n]) pthread_join(vhd->pthread_spam[n], &retval); if (vhd->ring) lws_ring_destroy(vhd->ring); pthread_mutex_destroy(&vhd->lock_ring); break; case LWS_CALLBACK_ESTABLISHED: /* add ourselves to the list of live pss held in the vhd */ lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); pss->tail = lws_ring_get_oldest_tail(vhd->ring); pss->wsi = wsi; break; case LWS_CALLBACK_CLOSED: /* remove our closing pss from the list of live pss */ lws_ll_fwd_remove(struct per_session_data__minimal, pss_list, pss, vhd->pss_list); break; case LWS_CALLBACK_SERVER_WRITEABLE: pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ pmsg = lws_ring_get_element(vhd->ring, &pss->tail); if (!pmsg) { pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ break; } n = lws_snprintf(temp + LWS_PRE, sizeof(temp) - LWS_PRE, "svc tid:%p, %s", (void *)pthread_self(), (char *)pmsg->payload + LWS_PRE); /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, (unsigned char *)temp + LWS_PRE, n, LWS_WRITE_TEXT); if (m < n) { pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lws_ring_consume_and_update_oldest_tail( vhd->ring, /* lws_ring object */ struct per_session_data__minimal, /* type of objects with tails */ &pss->tail, /* tail of guy doing the consuming */ 1, /* number of payload objects being consumed */ vhd->pss_list, /* head of list of objects with tails */ tail, /* member name of tail in objects with tails */ pss_list /* member name of next object in objects with tails */ ); /* more to do? */ if (lws_ring_get_element(vhd->ring, &pss->tail)) /* come back as soon as we can write more */ lws_callback_on_writable(pss->wsi); pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ break; case LWS_CALLBACK_RECEIVE: break; case LWS_CALLBACK_EVENT_WAIT_CANCELLED: lwsl_notice("LWS_CALLBACK_EVENT_WAIT_CANCELLED in svc tid %p\n", (void *)pthread_self()); if (!vhd) break; /* * When the "spam" threads add a message to the ringbuffer, * they create this event in the lws service thread context * using lws_cancel_service(). * * We respond by scheduling a writable callback for all * connected clients. */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); break; default: break; } return r; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 128, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) /* boilerplate needed if we are built as a dynamic plugin */ static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL }; LWS_EXTERN LWS_VISIBLE int init_protocol_minimal(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_minimal(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads/000077500000000000000000000000001357643561300266025ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads/CMakeLists.txt000066400000000000000000000045261357643561300313510ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckIncludeFile) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-server-threads) set(SRCS minimal-ws-server.c) MACRO(require_pthreads result) CHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H) if (NOT LWS_HAVE_PTHREAD_H) if (LWS_WITH_MINIMAL_EXAMPLES) set(result 0) else() message(FATAL_ERROR "threading support requires pthreads") endif() endif() ENDMACRO() # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared pthread) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets pthread) endif() endif() libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads/README.md000066400000000000000000000012241357643561300300600ustar00rootroot00000000000000# lws minimal ws server (threads) ## build ``` $ cmake . && make ``` Pthreads is required on your system. ## usage ``` $ ./lws-minimal-ws-server-threads [2018/03/13 13:09:52:2208] USER: LWS minimal ws server + threads | visit http://localhost:7681 [2018/03/13 13:09:52:2365] NOTICE: Creating Vhost 'default' port 7681, 2 protocols, IPv6 off ``` Visit http://localhost:7681 on multiple browser windows Two asynchronous threads generate strings and add them to a ringbuffer, signalling lws to send new entries to all the browser windows. This demonstrates how to safely manage asynchronously generated content and hook it up to the lws service thread. libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads/minimal-ws-server.c000066400000000000000000000070611357643561300323330ustar00rootroot00000000000000/* * lws-minimal-ws-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal ws server that can cooperate with * other threads cleanly. Two other threads are started, which fill * a ringbuffer with strings at 10Hz. * * The actual work and thread spawning etc are done in the protocol * implementation in protocol_lws_minimal.c. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; /* * This demonstrates how to pass a pointer into a specific protocol handler * running on a specific vhost. In this case, it's our default vhost and * we pass the pvo named "config" with the value a const char * "myconfig". * * This is the preferred way to pass configuration into a specific vhost + * protocol instance. */ static const struct lws_protocol_vhost_options pvo_ops = { NULL, NULL, "config", /* pvo name */ (void *)"myconfig" /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_ops, /* "child" pvo linked-list */ "lws-minimal", /* protocol name we belong to on this vhost */ "" /* ignored */ }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server + threads | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.pvo = &pvo; /* per-vhost options */ info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* start the threads that create content */ while (!interrupted) if (lws_service(context, 0)) interrupted = 1; lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads/mount-origin/000077500000000000000000000000001357643561300312315ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads/mount-origin/example.js000066400000000000000000000026451357643561300332310ustar00rootroot00000000000000var head = 0, tail = 0, ring = new Array(); function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { if (typeof MozWebSocket != "undefined") return new MozWebSocket(urlpath, protocol); return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { ws = new_ws(get_appropriate_ws_url(""), "lws-minimal"); try { ws.onopen = function() { document.getElementById("r").disabled = 0; }; ws.onmessage =function got_packet(msg) { var n, s = ""; ring[head] = msg.data + "\n"; head = (head + 1) % 50; if (tail === head) tail = (tail + 1) % 50; n = tail; do { s = s + ring[n]; n = (n + 1) % 50; } while (n !== head); document.getElementById("r").value = s; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ document.getElementById("r").disabled = 1; }; } catch(exception) { alert("

Error " + exception); } }, false); libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads/mount-origin/favicon.ico000066400000000000000000000025761357643561300333640ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads/mount-origin/index.html000066400000000000000000000007521357643561300332320ustar00rootroot00000000000000

Minimal ws server threads example.
Strings generated by server threads are sent to all browsers open on this page.
The textarea show the last 50 lines received.


libwebsockets.org-logo.svg000066400000000000000000001403321357643561300362620ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads/mount-origin libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads/mount-origin/strict-csp.svg000066400000000000000000000302361357643561300340510ustar00rootroot00000000000000 libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-threads/protocol_lws_minimal.c000066400000000000000000000176441357643561300332160ustar00rootroot00000000000000/* * ws protocol handler plugin for "lws-minimal" demonstrating multithread * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* one of these created for each message in the ringbuffer */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* * One of these is created for each client connecting to us. * * It is ONLY read or written from the lws service thread context. */ struct per_session_data__minimal { struct per_session_data__minimal *pss_list; struct lws *wsi; uint32_t tail; }; /* one of these is created for each vhost our protocol is used with */ struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__minimal *pss_list; /* linked-list of live pss*/ pthread_t pthread_spam[2]; pthread_mutex_t lock_ring; /* serialize access to the ring buffer */ struct lws_ring *ring; /* {lock_ring} ringbuffer holding unsent content */ const char *config; char finished; }; #if defined(WIN32) static void usleep(unsigned long l) { Sleep(l / 1000); } #endif /* * This runs under both lws service and "spam threads" contexts. * Access is serialized by vhd->lock_ring. */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } /* * This runs under the "spam thread" thread context only. * * We spawn two threads that generate messages with this. * */ static void * thread_spam(void *d) { struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *)d; struct msg amsg; int len = 128, index = 1, n; do { /* don't generate output if nobody connected */ if (!vhd->pss_list) goto wait; pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ /* only create if space in ringbuffer */ n = (int)lws_ring_get_count_free_elements(vhd->ring); if (!n) { lwsl_user("dropping!\n"); goto wait_unlock; } amsg.payload = malloc(LWS_PRE + len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); goto wait_unlock; } n = lws_snprintf((char *)amsg.payload + LWS_PRE, len, "%s: tid: %p, msg: %d", vhd->config, (void *)pthread_self(), index++); amsg.len = n; n = lws_ring_insert(vhd->ring, &amsg, 1); if (n != 1) { __minimal_destroy_message(&amsg); lwsl_user("dropping!\n"); } else /* * This will cause a LWS_CALLBACK_EVENT_WAIT_CANCELLED * in the lws service thread context. */ lws_cancel_service(vhd->context); wait_unlock: pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ wait: usleep(100000); } while (!vhd->finished); lwsl_notice("thread_spam %p exiting\n", (void *)pthread_self()); pthread_exit(NULL); return NULL; } /* this runs under the lws service thread context only */ static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct lws_protocol_vhost_options *pvo; const struct msg *pmsg; void *retval; int n, m, r = 0; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: /* create our per-vhost struct */ vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); if (!vhd) return 1; pthread_mutex_init(&vhd->lock_ring, NULL); /* recover the pointer to the globals struct */ pvo = lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "config"); if (!pvo || !pvo->value) { lwsl_err("%s: Can't find \"config\" pvo\n", __func__); return 1; } vhd->config = pvo->value; vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); vhd->ring = lws_ring_create(sizeof(struct msg), 8, __minimal_destroy_message); if (!vhd->ring) { lwsl_err("%s: failed to create ring\n", __func__); return 1; } /* start the content-creating threads */ for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (pthread_create(&vhd->pthread_spam[n], NULL, thread_spam, vhd)) { lwsl_err("thread creation failed\n"); r = 1; goto init_fail; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: init_fail: vhd->finished = 1; for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (vhd->pthread_spam[n]) pthread_join(vhd->pthread_spam[n], &retval); if (vhd->ring) lws_ring_destroy(vhd->ring); pthread_mutex_destroy(&vhd->lock_ring); break; case LWS_CALLBACK_ESTABLISHED: /* add ourselves to the list of live pss held in the vhd */ lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); pss->tail = lws_ring_get_oldest_tail(vhd->ring); pss->wsi = wsi; break; case LWS_CALLBACK_CLOSED: /* remove our closing pss from the list of live pss */ lws_ll_fwd_remove(struct per_session_data__minimal, pss_list, pss, vhd->pss_list); break; case LWS_CALLBACK_SERVER_WRITEABLE: pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ pmsg = lws_ring_get_element(vhd->ring, &pss->tail); if (!pmsg) { pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ break; } /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE, pmsg->len, LWS_WRITE_TEXT); if (m < (int)pmsg->len) { pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lws_ring_consume_and_update_oldest_tail( vhd->ring, /* lws_ring object */ struct per_session_data__minimal, /* type of objects with tails */ &pss->tail, /* tail of guy doing the consuming */ 1, /* number of payload objects being consumed */ vhd->pss_list, /* head of list of objects with tails */ tail, /* member name of tail in objects with tails */ pss_list /* member name of next object in objects with tails */ ); /* more to do? */ if (lws_ring_get_element(vhd->ring, &pss->tail)) /* come back as soon as we can write more */ lws_callback_on_writable(pss->wsi); pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ break; case LWS_CALLBACK_RECEIVE: break; case LWS_CALLBACK_EVENT_WAIT_CANCELLED: if (!vhd) break; /* * When the "spam" threads add a message to the ringbuffer, * they create this event in the lws service thread context * using lws_cancel_service(). * * We respond by scheduling a writable callback for all * connected clients. */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); break; default: break; } return r; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 128, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) /* boilerplate needed if we are built as a dynamic plugin */ static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL }; LWS_EXTERN LWS_VISIBLE int init_protocol_minimal(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_minimal(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-timer/000077500000000000000000000000001357643561300262705ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-timer/CMakeLists.txt000066400000000000000000000040011357643561300310230ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-server-timer) set(SRCS minimal-ws-server.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-timer/README.md000066400000000000000000000017271357643561300275560ustar00rootroot00000000000000# lws minimal ws server timer This is designed to confirm long term stability of ws timers on a particular platform. ## build ``` $ cmake . && make ``` ## Commandline Options Option|Meaning ---|--- -d|Set logging verbosity -s|Serve using TLS selfsigned cert (ie, connect to it with https://...) -h|Strict Host: header checking against vhost name (localhost) and port -v|Connection validity use 3s / 10s instead of default 5m / 5m10s ## usage ``` $ ./lws-minimal-ws-server-timer [2018/03/04 09:30:02:7986] USER: LWS minimal ws server | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 and the browser will connect back to the test server, you'll see ESTABLISHED logged. That triggers a TIMER event at 20s intervals which sets the wsi timeout to 60s. It should just stay like that forever doing the TIMER events at 20s intervals and not sending any traffic either way. libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-timer/localhost-100y.cert000066400000000000000000000040721357643561300316310ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-timer/localhost-100y.key000066400000000000000000000063101357643561300314610ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-timer/minimal-ws-server.c000066400000000000000000000067771357643561300320360ustar00rootroot00000000000000/* * lws-minimal-ws-server-timer * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws, * with an added websocket chat server. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include static int callback_protocol(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { case LWS_CALLBACK_ESTABLISHED: lwsl_user("LWS_CALLBACK_ESTABLISHED\n"); lws_set_timer_usecs(wsi, 20 * LWS_USEC_PER_SEC); lws_set_timeout(wsi, 1, 60); break; case LWS_CALLBACK_TIMER: lwsl_user("LWS_CALLBACK_TIMER\n"); lws_set_timer_usecs(wsi, 20 * LWS_USEC_PER_SEC); lws_set_timeout(wsi, 1, 60); break; case LWS_CALLBACK_CLOSED: lwsl_user("LWS_CALLBACK_CLOSED\n"); break; default: break; } return 0; } static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0 }, { "timer", callback_protocol, 0, 0 }, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server | visit http://localhost:7681 (-s = use TLS / https)\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.vhost_name = "localhost"; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if (lws_cmdline_option(argc, argv, "-s")) { lwsl_user("Server using TLS\n"); info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } if (lws_cmdline_option(argc, argv, "-h")) info.options |= LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-timer/mount-origin/000077500000000000000000000000001357643561300307175ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-timer/mount-origin/example.js000066400000000000000000000027371357643561300327210ustar00rootroot00000000000000 function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { if (typeof MozWebSocket != "undefined") return new MozWebSocket(urlpath, protocol); return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var ws = new_ws(get_appropriate_ws_url(""), "timer"); try { ws.onopen = function() { document.getElementById("m").disabled = 0; document.getElementById("b").disabled = 0; }; ws.onmessage =function got_packet(msg) { document.getElementById("r").value = document.getElementById("r").value + msg.data + "\n"; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ document.getElementById("m").disabled = 1; document.getElementById("b").disabled = 1; }; } catch(exception) { alert("

Error " + exception); } function sendmsg() { ws.send(document.getElementById("m").value); document.getElementById("m").value = ""; } document.getElementById("b").addEventListener("click", sendmsg); }, false); libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-timer/mount-origin/favicon.ico000066400000000000000000000000001357643561300330260ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-timer/mount-origin/index.html000066400000000000000000000007511357643561300327170ustar00rootroot00000000000000
LWS wsi timer minimal ws server timer example.
This opens a ws connection back to the server and just sits there setting the timer to fire every 20s, which resets the wsi timeout for 60s each timer. It should just stay like that forever. libwebsockets.org-logo.svg000066400000000000000000001403321357643561300357500ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-timer/mount-origin libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-timer/mount-origin/strict-csp.svg000066400000000000000000000302361357643561300335370ustar00rootroot00000000000000 libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server/000077500000000000000000000000001357643561300251525ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server/CMakeLists.txt000066400000000000000000000037761357643561300277270ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-server) set(SRCS minimal-ws-server.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif()libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server/README.md000066400000000000000000000012741357643561300264350ustar00rootroot00000000000000# lws minimal ws server ## build ``` $ cmake . && make ``` ## Commandline Options Option|Meaning ---|--- -d|Set logging verbosity -s|Serve using TLS selfsigned cert (ie, connect to it with https://...) -h|Strict Host: header checking against vhost name (localhost) and port ## usage ``` $ ./lws-minimal-ws-server [2018/03/04 09:30:02:7986] USER: LWS minimal ws server | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 on multiple browser windows Text you type in any browser window is sent to all of them. For simplicity of this example, only one line of text is cached at the server. libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server/localhost-100y.cert000066400000000000000000000040721357643561300305130ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server/localhost-100y.key000066400000000000000000000063101357643561300303430ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server/minimal-ws-server.c000066400000000000000000000060201357643561300306750ustar00rootroot00000000000000/* * lws-minimal-ws-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws, * with an added websocket chat server. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server | visit http://localhost:7681 (-s = use TLS / https)\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.vhost_name = "localhost"; info.ws_ping_pong_interval = 10; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if (lws_cmdline_option(argc, argv, "-s")) { lwsl_user("Server using TLS\n"); info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } if (lws_cmdline_option(argc, argv, "-h")) info.options |= LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server/mount-origin/000077500000000000000000000000001357643561300276015ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server/mount-origin/example.js000066400000000000000000000027511357643561300315770ustar00rootroot00000000000000 function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { if (typeof MozWebSocket != "undefined") return new MozWebSocket(urlpath, protocol); return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { ws = new_ws(get_appropriate_ws_url(""), "lws-minimal"); try { ws.onopen = function() { document.getElementById("m").disabled = 0; document.getElementById("b").disabled = 0; }; ws.onmessage =function got_packet(msg) { document.getElementById("r").value = document.getElementById("r").value + msg.data + "\n"; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ document.getElementById("m").disabled = 1; document.getElementById("b").disabled = 1; }; } catch(exception) { alert("

Error " + exception); } function sendmsg() { ws.send(document.getElementById("m").value); document.getElementById("m").value = ""; } document.getElementById("b").addEventListener("click", sendmsg); }, false); libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server/mount-origin/favicon.ico000066400000000000000000000025761357643561300317340ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server/mount-origin/index.html000066400000000000000000000007311357643561300315770ustar00rootroot00000000000000
LWS chat minimal ws server example.
Chat is sent to all browsers open on this page.


libwebsockets.org-logo.svg000066400000000000000000001403321357643561300346320ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server/mount-origin libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server/mount-origin/strict-csp.svg000066400000000000000000000302361357643561300324210ustar00rootroot00000000000000 libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server/protocol_lws_minimal.c000066400000000000000000000106351357643561300315570ustar00rootroot00000000000000/* * ws protocol handler plugin for "lws-minimal" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This version holds a single message at a time, which may be lost if a new * message comes. See the minimal-ws-server-ring sample for the same thing * but using an lws_ring ringbuffer to hold up to 8 messages at a time. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* one of these created for each message */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* one of these is created for each client connecting to us */ struct per_session_data__minimal { struct per_session_data__minimal *pss_list; struct lws *wsi; int last; /* the last message number we sent */ }; /* one of these is created for each vhost our protocol is used with */ struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__minimal *pss_list; /* linked-list of live pss*/ struct msg amsg; /* the one pending message... */ int current; /* the current message number we are caching */ }; /* destroys the message when everyone has had a copy of it */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); int m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); break; case LWS_CALLBACK_ESTABLISHED: /* add ourselves to the list of live pss held in the vhd */ lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); pss->wsi = wsi; pss->last = vhd->current; break; case LWS_CALLBACK_CLOSED: /* remove our closing pss from the list of live pss */ lws_ll_fwd_remove(struct per_session_data__minimal, pss_list, pss, vhd->pss_list); break; case LWS_CALLBACK_SERVER_WRITEABLE: if (!vhd->amsg.payload) break; if (pss->last == vhd->current) break; /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)vhd->amsg.payload) + LWS_PRE, vhd->amsg.len, LWS_WRITE_TEXT); if (m < (int)vhd->amsg.len) { lwsl_err("ERROR %d writing to ws\n", m); return -1; } pss->last = vhd->current; break; case LWS_CALLBACK_RECEIVE: if (vhd->amsg.payload) __minimal_destroy_message(&vhd->amsg); vhd->amsg.len = len; /* notice we over-allocate by LWS_PRE */ vhd->amsg.payload = malloc(LWS_PRE + len); if (!vhd->amsg.payload) { lwsl_user("OOM: dropping\n"); break; } memcpy((char *)vhd->amsg.payload + LWS_PRE, in, len); vhd->current++; /* * let everybody know we want to write something on them * as soon as they are ready */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 128, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) /* boilerplate needed if we are built as a dynamic plugin */ static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL }; LWS_EXTERN LWS_VISIBLE int init_protocol_minimal(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_minimal(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/plugin-standalone/000077500000000000000000000000001357643561300200165ustar00rootroot00000000000000libwebsockets-3.2.1/plugin-standalone/CMakeLists.txt000066400000000000000000000043101357643561300225540ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) if(NOT DEFINED CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type") endif() # This shows one way to build a standalone plugin # outside of lws itself project(lws-protocol-plugin-example C) set(PACKAGE "lws-protocol-plugin-example") set(CPACK_PACKAGE_NAME "${PACKAGE}") set(CPACK_PACKAGE_VERSION "0.1") set(CPACK_PACKAGE_VENDOR "andy@warmcat.com") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PACKAGE} ${PACKAGE_VERSION}") set(SOVERSION "1") set(VERSION "0.1") set(PLUGIN_NAME "protocol_example_standalone") # space-separated list of sources set(PLUGIN_SRCS protocol_example_standalone.c) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/") message(STATUS "CMAKE_TOOLCHAIN_FILE='${CMAKE_TOOLCHAIN_FILE}'") # Try to find the current Git hash. find_package(Git) if(GIT_EXECUTABLE) execute_process( WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMAND "${GIT_EXECUTABLE}" describe OUTPUT_VARIABLE GIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMAND "whoami" OUTPUT_VARIABLE GIT_USER OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMAND "hostname" OUTPUT_VARIABLE GIT_HOST OUTPUT_STRIP_TRAILING_WHITESPACE ) string(REGEX REPLACE "([^\\])[\\]([^\\])" "\\1\\\\\\\\\\2" GIT_USER ${GIT_USER}) set(LWS_BUILD_HASH ${GIT_USER}@${GIT_HOST}-${GIT_HASH}) message("Git commit hash: ${LWS_BUILD_HASH}") endif() set(CMAKE_C_FLAGS "-fPIC ${CMAKE_C_FLAGS}") source_group("Headers Private" FILES ${PLUGIN_HDR}) source_group("Sources" FILES ${PLUGIN_SRCS}) add_library(${PLUGIN_NAME} SHARED ${PLUGIN_SRCS} ${PLUGIN_HDR}) target_link_libraries(${PLUGIN_NAME} -lwebsockets) # Set test app specific defines. set_property(TARGET ${PLUGIN_NAME} PROPERTY COMPILE_DEFINITIONS INSTALL_DATADIR="${CMAKE_INSTALL_PREFIX}/plugins" ) list(APPEND PLUGINS_LIST ${PLUGIN_NAME}) install(TARGETS ${PLUGINS_LIST} PERMISSIONS OWNER_WRITE OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE OWNER_READ GROUP_READ WORLD_READ DESTINATION share/libwebsockets-test-server/plugins COMPONENT plugins) libwebsockets-3.2.1/plugin-standalone/protocol_example_standalone.c000066400000000000000000000077151357643561300257600ustar00rootroot00000000000000/* * ws protocol handler plugin for "dumb increment" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * These test plugins are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. * * This is a copy of dumb_increment adapted slightly to serve as the * "example-standalone-protocol", to show how to build protocol plugins * outside the library easily. */ #define LWS_DLL #define LWS_INTERNAL #include #include struct per_vhost_data__dumb_increment { uv_timer_t timeout_watcher; struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; }; struct per_session_data__dumb_increment { int number; }; static void uv_timeout_cb_dumb_increment(uv_timer_t *w #if UV_VERSION_MAJOR == 0 , int status #endif ) { struct per_vhost_data__dumb_increment *vhd = lws_container_of(w, struct per_vhost_data__dumb_increment, timeout_watcher); lws_callback_on_writable_all_protocol_vhost(vhd->vhost, vhd->protocol); } static int callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__dumb_increment *pss = (struct per_session_data__dumb_increment *)user; struct per_vhost_data__dumb_increment *vhd = (struct per_vhost_data__dumb_increment *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); unsigned char buf[LWS_PRE + 512]; unsigned char *p = &buf[LWS_PRE]; int n, m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__dumb_increment)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); uv_timer_init(lws_uv_getloop(vhd->context, 0), &vhd->timeout_watcher); uv_timer_start(&vhd->timeout_watcher, uv_timeout_cb_dumb_increment, 50, 50); break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (!vhd) break; uv_timer_stop(&vhd->timeout_watcher); break; case LWS_CALLBACK_ESTABLISHED: pss->number = 0; break; case LWS_CALLBACK_SERVER_WRITEABLE: n = sprintf((char *)p, "%d", pss->number++); m = lws_write(wsi, p, n, LWS_WRITE_TEXT); if (m < n) { lwsl_err("ERROR %d writing to di socket\n", n); return -1; } break; case LWS_CALLBACK_RECEIVE: if (len < 6) break; if (strcmp((const char *)in, "reset\n") == 0) pss->number = 0; if (strcmp((const char *)in, "closeme\n") == 0) { lwsl_notice("dumb_inc: closing as requested\n"); lws_close_reason(wsi, LWS_CLOSE_STATUS_GOINGAWAY, (unsigned char *)"seeya", 5); return -1; } break; default: break; } return 0; } static const struct lws_protocols protocols[] = { { "example-standalone-protocol", callback_dumb_increment, sizeof(struct per_session_data__dumb_increment), 10, /* rx buf size must be >= permessage-deflate rx size */ }, }; LWS_VISIBLE int init_protocol_example_standalone(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_VISIBLE int destroy_protocol_example_standalone(struct lws_context *context) { return 0; } libwebsockets-3.2.1/plugins/000077500000000000000000000000001357643561300160535ustar00rootroot00000000000000libwebsockets-3.2.1/plugins/acme-client/000077500000000000000000000000001357643561300202345ustar00rootroot00000000000000libwebsockets-3.2.1/plugins/acme-client/protocol_lws_acme_client.c000066400000000000000000001223001357643561300254470ustar00rootroot00000000000000/* * libwebsockets ACME client protocol plugin * * Copyright (C) 2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * * Acme is in a big messy transition at the moment from a homebrewed api * to an IETF one. The old repo for the homebrew api (they currently * implement) is marked up as deprecated and "not accurate[ly] reflect[ing]" * what they implement, but the IETF standard, currently at v7 is not yet * implemented at let's encrypt (ETA Jan 2018). * * This implementation follows draft 7 of the IETF standard, and falls back * to whatever differences exist for Boulder's tls-sni-01 challenge. The * tls-sni-02 support is there but nothing to test it against at the time of * writing (Nov 1 2017). */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include #include typedef enum { ACME_STATE_DIRECTORY, /* get the directory JSON using GET + parse */ ACME_STATE_NEW_REG, /* register a new RSA key + email combo */ ACME_STATE_NEW_AUTH, /* start the process to request a cert */ ACME_STATE_ACCEPT_CHALL, /* notify server ready for one challenge */ ACME_STATE_POLLING, /* he should be trying our challenge */ ACME_STATE_POLLING_CSR, /* sent CSR, checking result */ ACME_STATE_FINISHED } lws_acme_state; struct acme_connection { char buf[4096]; char replay_nonce[64]; char chall_token[64]; char challenge_uri[256]; char detail[64]; char status[16]; char san_a[100]; char san_b[100]; char urls[6][100]; /* directory contents */ lws_acme_state state; struct lws_client_connect_info i; struct lejp_ctx jctx; struct lws_context_creation_info ci; struct lws_vhost *vhost; struct lws *cwsi; const char *real_vh_name; const char *real_vh_iface; char *alloc_privkey_pem; char *dest; int pos; int len; int resp; int cpos; int real_vh_port; int goes_around; size_t len_privkey_pem; unsigned int yes:2; unsigned int use:1; unsigned int is_sni_02:1; }; struct per_vhost_data__lws_acme_client { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; /* * the vhd is allocated for every vhost using the plugin. * But ac is only allocated when we are doing the server auth. */ struct acme_connection *ac; struct lws_jwk jwk; struct lws_genrsa_ctx rsactx; char *pvo_data; char *pvop[LWS_TLS_TOTAL_COUNT]; const char *pvop_active[LWS_TLS_TOTAL_COUNT]; int count_live_pss; char *dest; int pos; int len; int fd_updated_cert; /* these are opened while we have root... */ int fd_updated_key; /* ...if nonempty next startup will replace old */ }; static int callback_acme_client(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len); #define LWS_PLUGIN_PROTOCOL_LWS_ACME_CLIENT \ { \ "lws-acme-client", \ callback_acme_client, \ 0, \ 512, \ 0, NULL, 0 \ } static const struct lws_protocols acme_protocols[] = { LWS_PLUGIN_PROTOCOL_LWS_ACME_CLIENT, { NULL, NULL, 0, 0, 0, NULL, 0 } }; /* directory JSON parsing */ static const char * const jdir_tok[] = { "key-change", "meta.terms-of-service", "new-authz", "new-cert", "new-reg", "revoke-cert", }; enum enum_jhdr_tok { JAD_KEY_CHANGE_URL, JAD_TOS_URL, JAD_NEW_AUTHZ_URL, JAD_NEW_CERT_URL, JAD_NEW_REG_URL, JAD_REVOKE_CERT_URL, }; static signed char cb_dir(struct lejp_ctx *ctx, char reason) { struct per_vhost_data__lws_acme_client *s = (struct per_vhost_data__lws_acme_client *)ctx->user; if (reason == LEJPCB_VAL_STR_START && ctx->path_match) { s->pos = 0; s->len = sizeof(s->ac->urls[0]) - 1; s->dest = s->ac->urls[ctx->path_match - 1]; return 0; } if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; if (s->pos + ctx->npos > s->len) { lwsl_notice("url too long\n"); return -1; } memcpy(s->dest + s->pos, ctx->buf, ctx->npos); s->pos += ctx->npos; s->dest[s->pos] = '\0'; return 0; } /* authz JSON parsing */ static const char * const jauthz_tok[] = { "identifier.type", "identifier.value", "status", "expires", "challenges[].type", "challenges[].status", "challenges[].uri", "challenges[].token", "detail" }; enum enum_jauthz_tok { JAAZ_ID_TYPE, JAAZ_ID_VALUE, JAAZ_STATUS, JAAZ_EXPIRES, JAAZ_CHALLENGES_TYPE, JAAZ_CHALLENGES_STATUS, JAAZ_CHALLENGES_URI, JAAZ_CHALLENGES_TOKEN, JAAZ_DETAIL, }; static signed char cb_authz(struct lejp_ctx *ctx, char reason) { struct acme_connection *s = (struct acme_connection *)ctx->user; if (reason == LEJPCB_CONSTRUCTED) { s->yes = 0; s->use = 0; s->chall_token[0] = '\0'; s->is_sni_02 = 0; } if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; switch (ctx->path_match - 1) { case JAAZ_ID_TYPE: break; case JAAZ_ID_VALUE: break; case JAAZ_STATUS: break; case JAAZ_EXPIRES: break; case JAAZ_DETAIL: lws_snprintf(s->detail, sizeof(s->detail), "%s", ctx->buf); break; case JAAZ_CHALLENGES_TYPE: if (s->is_sni_02) break; s->use = !strcmp(ctx->buf, "tls-sni-01") || !strcmp(ctx->buf, "tls-sni-02"); s->is_sni_02 = !strcmp(ctx->buf, "tls-sni-02"); break; case JAAZ_CHALLENGES_STATUS: lws_strncpy(s->status, ctx->buf, sizeof(s->status)); break; case JAAZ_CHALLENGES_URI: if (s->use) { lws_strncpy(s->challenge_uri, ctx->buf, sizeof(s->challenge_uri)); s->yes |= 2; } break; case JAAZ_CHALLENGES_TOKEN: lwsl_notice("JAAZ_CHALLENGES_TOKEN: %s %d\n", ctx->buf, s->use); if (s->use) { lws_strncpy(s->chall_token, ctx->buf, sizeof(s->chall_token)); s->yes |= 1; } break; } return 0; } /* challenge accepted JSON parsing */ static const char * const jchac_tok[] = { "type", "status", "uri", "token", "error.detail" }; enum enum_jchac_tok { JCAC_TYPE, JCAC_STATUS, JCAC_URI, JCAC_TOKEN, JCAC_DETAIL, }; static signed char cb_chac(struct lejp_ctx *ctx, char reason) { struct acme_connection *s = (struct acme_connection *)ctx->user; if (reason == LEJPCB_CONSTRUCTED) { s->yes = 0; s->use = 0; } if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; switch (ctx->path_match - 1) { case JCAC_TYPE: if (strcmp(ctx->buf, "tls-sni-01") && strcmp(ctx->buf, "tls-sni-02")) return 1; break; case JCAC_STATUS: lws_strncpy(s->status, ctx->buf, sizeof(s->status)); break; case JCAC_URI: s->yes |= 2; break; case JCAC_TOKEN: lws_strncpy(s->chall_token, ctx->buf, sizeof(s->chall_token)); s->yes |= 1; break; case JCAC_DETAIL: lws_snprintf(s->detail, sizeof(s->detail), "%s", ctx->buf); break; } return 0; } /* https://github.com/letsencrypt/boulder/blob/release/docs/acme-divergences.md * * 7.1: * * Boulder does not implement the new-order resource. * Instead of new-order Boulder implements the new-cert resource that is * defined in draft-ietf-acme-02 Section 6.5. * * Boulder also doesn't implement the new-nonce endpoint. * * Boulder implements the new-account resource only under the new-reg key. * * Boulder implements Link: rel="next" headers from new-reg to new-authz, and * new-authz to new-cert, as specified in draft-02, but these links are not * provided in the latest draft, and clients should use URLs from the directory * instead. * * Boulder does not provide the "index" link relation pointing at the * directory URL. * * (ie, just use new-cert instead of new-order, use the directory for links) */ static int lws_acme_report_status(struct lws_vhost *v, int state, const char *json) { lws_callback_vhost_protocols_vhost(v, LWS_CALLBACK_VHOST_CERT_UPDATE, (void *)json, state); return 0; } /* * Notice: trashes i and url */ static struct lws * lws_acme_client_connect(struct lws_context *context, struct lws_vhost *vh, struct lws **pwsi, struct lws_client_connect_info *i, char *url, const char *method) { const char *prot, *p; char path[200], _url[256]; struct lws *wsi; memset(i, 0, sizeof(*i)); i->port = 443; lws_strncpy(_url, url, sizeof(_url)); if (lws_parse_uri(_url, &prot, &i->address, &i->port, &p)) { lwsl_err("unable to parse uri %s\n", url); return NULL; } /* add back the leading / on path */ path[0] = '/'; lws_strncpy(path + 1, p, sizeof(path) - 1); i->path = path; i->context = context; i->vhost = vh; i->ssl_connection = 1; i->host = i->address; i->origin = i->address; i->method = method; i->pwsi = pwsi; i->protocol = "lws-acme-client"; wsi = lws_client_connect_via_info(i); if (!wsi) { lws_snprintf(path, sizeof(path) - 1, "Unable to connect to %s", url); lwsl_notice("%s: %s\n", __func__, path); lws_acme_report_status(vh, LWS_CUS_FAILED, path); } return wsi; } static void lws_acme_finished(struct per_vhost_data__lws_acme_client *vhd) { lwsl_debug("%s\n", __func__); if (vhd->ac) { if (vhd->ac->vhost) lws_vhost_destroy(vhd->ac->vhost); if (vhd->ac->alloc_privkey_pem) free(vhd->ac->alloc_privkey_pem); free(vhd->ac); } lws_genrsa_destroy(&vhd->rsactx); lws_jwk_destroy(&vhd->jwk); vhd->ac = NULL; #if defined(LWS_WITH_ESP32) lws_esp32.acme = 0; /* enable scanning */ #endif } static const char * const pvo_names[] = { "country", "state", "locality", "organization", "common-name", "email", "directory-url", "auth-path", "cert-path", "key-path", }; static int lws_acme_load_create_auth_keys(struct per_vhost_data__lws_acme_client *vhd, int bits) { int n; if (!lws_jwk_load(&vhd->jwk, vhd->pvop[LWS_TLS_SET_AUTH_PATH], NULL, NULL)) return 0; vhd->jwk.kty = LWS_GENCRYPTO_KTY_RSA; lwsl_notice("Generating ACME %d-bit keypair... " "will take a little while\n", bits); n = lws_genrsa_new_keypair(vhd->context, &vhd->rsactx, LGRSAM_PKCS1_1_5, vhd->jwk.e, bits); if (n) { lwsl_notice("failed to create keypair\n"); return 1; } lwsl_notice("...keypair generated\n"); if (lws_jwk_save(&vhd->jwk, vhd->pvop[LWS_TLS_SET_AUTH_PATH])) { lwsl_notice("unable to save %s\n", vhd->pvop[LWS_TLS_SET_AUTH_PATH]); return 1; } return 0; } static int lws_acme_start_acquisition(struct per_vhost_data__lws_acme_client *vhd, struct lws_vhost *v) { char buf[128]; /* ...and we were given enough info to do the update? */ if (!vhd->pvop[LWS_TLS_REQ_ELEMENT_COMMON_NAME]) return -1; /* * ...well... we should try to do something about it then... */ lwsl_notice("%s: ACME cert needs creating / updating: " "vhost %s\n", __func__, lws_get_vhost_name(vhd->vhost)); vhd->ac = malloc(sizeof(*vhd->ac)); memset(vhd->ac, 0, sizeof(*vhd->ac)); /* * So if we don't have it, the first job is get the directory. * * If we already have the directory, jump straight into trying * to register our key. * * We always try to register the keys... if it's not the first * time, we will get a JSON body in the (legal, nonfatal) * response like this * * { * "type": "urn:acme:error:malformed", * "detail": "Registration key is already in use", * "status": 409 * } */ if (!vhd->ac->urls[0][0]) { vhd->ac->state = ACME_STATE_DIRECTORY; lws_snprintf(buf, sizeof(buf) - 1, "%s", vhd->pvop_active[LWS_TLS_SET_DIR_URL]); } else { vhd->ac->state = ACME_STATE_NEW_REG; lws_snprintf(buf, sizeof(buf) - 1, "%s", vhd->ac->urls[JAD_NEW_REG_URL]); } vhd->ac->real_vh_port = lws_get_vhost_port(vhd->vhost); vhd->ac->real_vh_name = lws_get_vhost_name(vhd->vhost); vhd->ac->real_vh_iface = lws_get_vhost_iface(vhd->vhost); lws_acme_report_status(vhd->vhost, LWS_CUS_STARTING, NULL); #if defined(LWS_WITH_ESP32) lws_acme_report_status(vhd->vhost, LWS_CUS_CREATE_KEYS, "Generating keys, please wait"); if (lws_acme_load_create_auth_keys(vhd, 2048)) goto bail; lws_acme_report_status(vhd->vhost, LWS_CUS_CREATE_KEYS, "Auth keys created"); #endif if (lws_acme_client_connect(vhd->context, vhd->vhost, &vhd->ac->cwsi, &vhd->ac->i, buf, "GET")) return 0; #if defined(LWS_WITH_ESP32) bail: #endif free(vhd->ac); vhd->ac = NULL; return 1; } static int callback_acme_client(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_vhost_data__lws_acme_client *vhd = (struct per_vhost_data__lws_acme_client *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); char buf[LWS_PRE + 2536], *start = buf + LWS_PRE, *p = start, *end = buf + sizeof(buf) - 1, digest[32], *failreason = NULL; const struct lws_protocol_vhost_options *pvo; struct lws_acme_cert_aging_args *caa; struct acme_connection *ac = NULL; struct lws_genhash_ctx hctx; unsigned char **pp, *pend; const char *content_type; struct lws_jwe jwe; struct lws *cwsi; int n, m; if (vhd) ac = vhd->ac; lws_jwe_init(&jwe, lws_get_context(wsi)); switch ((int)reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__lws_acme_client)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); /* compute how much we need to hold all the pvo payloads */ m = 0; pvo = (const struct lws_protocol_vhost_options *)in; while (pvo) { m += strlen(pvo->value) + 1; pvo = pvo->next; } p = vhd->pvo_data = malloc(m); if (!p) return -1; pvo = (const struct lws_protocol_vhost_options *)in; while (pvo) { start = p; n = strlen(pvo->value) + 1; memcpy(start, pvo->value, n); p += n; for (m = 0; m < (int)LWS_ARRAY_SIZE(pvo_names); m++) if (!strcmp(pvo->name, pvo_names[m])) vhd->pvop[m] = start; pvo = pvo->next; } n = 0; for (m = 0; m < (int)LWS_ARRAY_SIZE(pvo_names); m++) if (!vhd->pvop[m] && m >= LWS_TLS_REQ_ELEMENT_COMMON_NAME) { lwsl_notice("%s: require pvo '%s'\n", __func__, pvo_names[m]); n |= 1; } else if (vhd->pvop[m]) lwsl_info(" %s: %s\n", pvo_names[m], vhd->pvop[m]); if (n) { free(vhd->pvo_data); vhd->pvo_data = NULL; return -1; } #if !defined(LWS_WITH_ESP32) /* * load (or create) the registration keypair while we * still have root */ if (lws_acme_load_create_auth_keys(vhd, 4096)) return 1; /* * in case we do an update, open the update files while we * still have root */ lws_snprintf(buf, sizeof(buf) - 1, "%s.upd", vhd->pvop[LWS_TLS_SET_CERT_PATH]); vhd->fd_updated_cert = lws_open(buf, LWS_O_WRONLY | LWS_O_CREAT | LWS_O_TRUNC, 0600); if (vhd->fd_updated_cert < 0) { lwsl_err("unable to create update cert file %s\n", buf); return -1; } lws_snprintf(buf, sizeof(buf) - 1, "%s.upd", vhd->pvop[LWS_TLS_SET_KEY_PATH]); vhd->fd_updated_key = lws_open(buf, LWS_O_WRONLY | LWS_O_CREAT | LWS_O_TRUNC, 0600); if (vhd->fd_updated_key < 0) { lwsl_err("unable to create update key file %s\n", buf); return -1; } #endif break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (vhd && vhd->pvo_data) { free(vhd->pvo_data); vhd->pvo_data = NULL; } if (vhd) lws_acme_finished(vhd); break; case LWS_CALLBACK_VHOST_CERT_AGING: if (!vhd) break; caa = (struct lws_acme_cert_aging_args *)in; /* * Somebody is telling us about a cert some vhost is using. * * First see if the cert is getting close enough to expiry that * we *want* to do something about it. */ if ((int)(ssize_t)len > 14) break; /* * ...is this a vhost we were configured on? */ if (vhd->vhost != caa->vh) return 1; for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pvop);n++) if (caa->element_overrides[n]) vhd->pvop_active[n] = caa->element_overrides[n]; else vhd->pvop_active[n] = vhd->pvop[n]; lwsl_notice("starting acme acquisition on %s: %s\n", lws_get_vhost_name(caa->vh), vhd->pvop_active[LWS_TLS_SET_DIR_URL]); lws_acme_start_acquisition(vhd, caa->vh); break; /* * Client */ case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_notice("%s: CLIENT_ESTABLISHED\n", __func__); break; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_notice("%s: CLIENT_CONNECTION_ERROR: %p\n", __func__, wsi); break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: lwsl_notice("%s: CLOSED_CLIENT_HTTP: %p\n", __func__, wsi); break; case LWS_CALLBACK_CLOSED: lwsl_notice("%s: CLOSED: %p\n", __func__, wsi); break; case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: lwsl_notice("lws_http_client_http_response %d\n", lws_http_client_http_response(wsi)); if (!ac) break; ac->resp = lws_http_client_http_response(wsi); /* we get a new nonce each time */ if (lws_hdr_total_length(wsi, WSI_TOKEN_REPLAY_NONCE) && lws_hdr_copy(wsi, ac->replay_nonce, sizeof(ac->replay_nonce), WSI_TOKEN_REPLAY_NONCE) < 0) { lwsl_notice("%s: nonce too large\n", __func__); goto failed; } switch (ac->state) { case ACME_STATE_DIRECTORY: lejp_construct(&ac->jctx, cb_dir, vhd, jdir_tok, LWS_ARRAY_SIZE(jdir_tok)); break; case ACME_STATE_NEW_REG: break; case ACME_STATE_NEW_AUTH: lejp_construct(&ac->jctx, cb_authz, ac, jauthz_tok, LWS_ARRAY_SIZE(jauthz_tok)); break; case ACME_STATE_POLLING: case ACME_STATE_ACCEPT_CHALL: lejp_construct(&ac->jctx, cb_chac, ac, jchac_tok, LWS_ARRAY_SIZE(jchac_tok)); break; case ACME_STATE_POLLING_CSR: ac->cpos = 0; if (ac->resp != 201) break; /* * He acknowledges he will create the cert... * get the URL to GET it from in the Location * header. */ if (lws_hdr_copy(wsi, ac->challenge_uri, sizeof(ac->challenge_uri), WSI_TOKEN_HTTP_LOCATION) < 0) { lwsl_notice("%s: missing cert location:\n", __func__); goto failed; } lwsl_notice("told to fetch cert from %s\n", ac->challenge_uri); break; default: break; } break; case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: if (!ac) break; switch (ac->state) { case ACME_STATE_DIRECTORY: break; case ACME_STATE_NEW_REG: p += lws_snprintf(p, end - p, "{" "\"resource\":\"new-reg\"," "\"contact\":[" "\"mailto:%s\"" "],\"agreement\":\"%s\"" "}", vhd->pvop_active[LWS_TLS_REQ_ELEMENT_EMAIL], ac->urls[JAD_TOS_URL]); puts(start); pkt_add_hdrs: if (lws_gencrypto_jwe_alg_to_definition("RSA1_5", &jwe.jose.alg)) { ac->len = 0; lwsl_notice("%s: no RSA1_5\n", __func__); goto failed; } jwe.jws.jwk = &vhd->jwk; ac->len = lws_jwe_create_packet(&jwe, start, p - start, ac->replay_nonce, &ac->buf[LWS_PRE], sizeof(ac->buf) - LWS_PRE, lws_get_context(wsi)); if (ac->len < 0) { ac->len = 0; lwsl_notice("lws_jwe_create_packet failed\n"); goto failed; } pp = (unsigned char **)in; pend = (*pp) + len; ac->pos = 0; content_type = "application/jose+json"; if (ac->state == ACME_STATE_POLLING_CSR) content_type = "application/pkix-cert"; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (uint8_t *)content_type, 21, pp, pend)) { lwsl_notice("could not add content type\n"); goto failed; } n = sprintf(buf, "%d", ac->len); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH, (uint8_t *)buf, n, pp, pend)) { lwsl_notice("could not add content length\n"); goto failed; } lws_client_http_body_pending(wsi, 1); lws_callback_on_writable(wsi); lwsl_notice("prepare to send ACME_STATE_NEW_REG\n"); break; case ACME_STATE_NEW_AUTH: p += lws_snprintf(p, end - p, "{" "\"resource\":\"new-authz\"," "\"identifier\":{" "\"type\":\"http-01\"," "\"value\":\"%s\"" "}" "}", vhd->pvop_active[LWS_TLS_REQ_ELEMENT_COMMON_NAME]); goto pkt_add_hdrs; case ACME_STATE_ACCEPT_CHALL: /* * Several of the challenges in this document makes use * of a key authorization string. A key authorization * expresses a domain holder's authorization for a * specified key to satisfy a specified challenge, by * concatenating the token for the challenge with a key * fingerprint, separated by a "." character: * * key-authz = token || '.' || * base64(JWK_Thumbprint(accountKey)) * * The "JWK_Thumbprint" step indicates the computation * specified in [RFC7638], using the SHA-256 digest. As * specified in the individual challenges below, the * token for a challenge is a JSON string comprised * entirely of characters in the base64 alphabet. * The "||" operator indicates concatenation of strings. * * keyAuthorization (required, string): The key * authorization for this challenge. This value MUST * match the token from the challenge and the client's * account key. * * draft acme-01 tls-sni-01: * * { * "keyAuthorization": "evaGxfADs...62jcerQ", * } (Signed as JWS) * * draft acme-07 tls-sni-02: * * POST /acme/authz/1234/1 * Host: example.com * Content-Type: application/jose+json * * { * "protected": base64url({ * "alg": "ES256", * "kid": "https://example.com/acme/acct/1", * "nonce": "JHb54aT_KTXBWQOzGYkt9A", * "url": "https://example.com/acme/authz/1234/1" * }), * "payload": base64url({ * "keyAuthorization": "evaGxfADs...62jcerQ" * }), * "signature": "Q1bURgJoEslbD1c5...3pYdSMLio57mQNN4" * } * * On receiving a response, the server MUST verify that * the key authorization in the response matches the * "token" value in the challenge and the client's * account key. If they do not match, then the server * MUST return an HTTP error in response to the POST * request in which the client sent the challenge. */ lws_jwk_rfc7638_fingerprint(&vhd->jwk, digest); p = start; end = &buf[sizeof(buf) - 1]; p += lws_snprintf(p, end - p, "{\"resource\":\"challenge\"," "\"type\":\"tls-sni-0%d\"," "\"keyAuthorization\":\"%s.", 1 + ac->is_sni_02, ac->chall_token); n = lws_jws_base64_enc(digest, 32, p, end - p); if (n < 0) goto failed; p += n; p += lws_snprintf(p, end - p, "\"}"); puts(start); goto pkt_add_hdrs; case ACME_STATE_POLLING: break; case ACME_STATE_POLLING_CSR: /* * "To obtain a certificate for the domain, the agent * constructs a PKCS#10 Certificate Signing Request that * asks the Let’s Encrypt CA to issue a certificate for * example.com with a specified public key. As usual, * the CSR includes a signature by the private key * corresponding to the public key in the CSR. The agent * also signs the whole CSR with the authorized * key for example.com so that the Let’s Encrypt CA * knows it’s authorized." * * IOW we must create a new RSA keypair which will be * the cert public + private key, and put the public * key in the CSR. The CSR, just for transport, is also * signed with our JWK, showing that as the owner of the * authorized JWK, the request should be allowed. * * The cert comes back with our public key in it showing * that the owner of the matching private key (we * created that keypair) is the owner of the cert. * * We feed the CSR the elements we want in the cert, * like the CN etc, and it gives us the b64URL-encoded * CSR and the PEM-encoded (public +)private key in * memory buffers. */ if (ac->goes_around) break; p += lws_snprintf(p, end - p, "{\"resource\":\"new-cert\"," "\"csr\":\""); n = lws_tls_acme_sni_csr_create(vhd->context, &vhd->pvop_active[0], (uint8_t *)p, end - p, &ac->alloc_privkey_pem, &ac->len_privkey_pem); if (n < 0) { lwsl_notice("CSR generation failed\n"); goto failed; } p += n; p += lws_snprintf(p, end - p, "\"}"); puts(start); goto pkt_add_hdrs; default: break; } break; case LWS_CALLBACK_CLIENT_HTTP_WRITEABLE: lwsl_notice("LWS_CALLBACK_CLIENT_HTTP_WRITEABLE\n"); if (!ac) break; if (ac->pos == ac->len) break; ac->buf[LWS_PRE + ac->len] = '\0'; if (lws_write(wsi, (uint8_t *)ac->buf + LWS_PRE, ac->len, LWS_WRITE_HTTP_FINAL) < 0) return -1; lwsl_notice("wrote %d\n", ac->len); ac->pos = ac->len; lws_client_http_body_pending(wsi, 0); break; /* chunked content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: if (!ac) return -1; switch (ac->state) { case ACME_STATE_POLLING: case ACME_STATE_ACCEPT_CHALL: case ACME_STATE_NEW_AUTH: case ACME_STATE_DIRECTORY: ((char *)in)[len] = '\0'; puts(in); m = (int)(signed char)lejp_parse(&ac->jctx, (uint8_t *)in, len); if (m < 0 && m != LEJP_CONTINUE) { lwsl_notice("lejp parse failed %d\n", m); goto failed; } break; case ACME_STATE_NEW_REG: ((char *)in)[len] = '\0'; puts(in); break; case ACME_STATE_POLLING_CSR: /* it should be the DER cert! */ if (ac->cpos + len > sizeof(ac->buf)) { lwsl_notice("Incoming cert is too large!\n"); goto failed; } memcpy(&ac->buf[ac->cpos], in, len); ac->cpos += len; break; default: break; } break; /* unchunked content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: lwsl_notice("%s: LWS_CALLBACK_RECEIVE_CLIENT_HTTP\n", __func__); { char buffer[2048 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } break; case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_notice("%s: COMPLETED_CLIENT_HTTP\n", __func__); if (!ac) return -1; switch (ac->state) { case ACME_STATE_DIRECTORY: lejp_destruct(&ac->jctx); /* check dir validity */ for (n = 0; n < 6; n++) lwsl_notice(" %d: %s\n", n, ac->urls[n]); /* * So... having the directory now... we try to * register our keys next. It's OK if it ends up * they're already registered... this eliminates any * gaps where we stored the key but registration did * not complete for some reason... */ ac->state = ACME_STATE_NEW_REG; lws_acme_report_status(vhd->vhost, LWS_CUS_REG, NULL); strcpy(buf, ac->urls[JAD_NEW_REG_URL]); cwsi = lws_acme_client_connect(vhd->context, vhd->vhost, &ac->cwsi, &ac->i, buf, "POST"); if (!cwsi) { lwsl_notice("%s: failed to connect to acme\n", __func__); goto failed; } return -1; /* close the completed client connection */ case ACME_STATE_NEW_REG: if ((ac->resp >= 200 && ac->resp < 299) || ac->resp == 409) { /* * Our account already existed, or exists now. * * Move on to requesting a cert auth. */ ac->state = ACME_STATE_NEW_AUTH; lws_acme_report_status(vhd->vhost, LWS_CUS_AUTH, NULL); strcpy(buf, ac->urls[JAD_NEW_AUTHZ_URL]); cwsi = lws_acme_client_connect(vhd->context, vhd->vhost, &ac->cwsi, &ac->i, buf, "POST"); if (!cwsi) lwsl_notice("%s: failed to connect\n", __func__); return -1; /* close the completed client connection */ } else { lwsl_notice("new-reg replied %d\n", ac->resp); goto failed; } return -1; /* close the completed client connection */ case ACME_STATE_NEW_AUTH: lejp_destruct(&ac->jctx); if (ac->resp / 100 == 4) { lws_snprintf(buf, sizeof(buf), "Auth failed: %s", ac->detail); failreason = buf; lwsl_notice("auth failed\n"); goto failed; } lwsl_notice("chall: %s (%d)\n", ac->chall_token, ac->resp); if (!ac->chall_token[0]) { lwsl_notice("no challenge\n"); goto failed; } ac->state = ACME_STATE_ACCEPT_CHALL; lws_acme_report_status(vhd->vhost, LWS_CUS_CHALLENGE, NULL); /* tls-sni-01 ... what a mess. * The stuff in * https://tools.ietf.org/html/ * draft-ietf-acme-acme-01#section-7.3 * "requires" n but it's missing from let's encrypt * tls-sni-01 challenge. The go docs say that they just * implement one hashing round regardless * https://godoc.org/golang.org/x/crypto/acme * * The go way is what is actually implemented today by * letsencrypt * * "A client responds to this challenge by constructing * a key authorization from the "token" value provided * in the challenge and the client's account key. The * client first computes the SHA-256 digest Z0 of the * UTF8-encoded key authorization, and encodes Z0 in * UTF-8 lower-case hexadecimal form." */ /* tls-sni-02 * * SAN A MUST be constructed as follows: compute the * SHA-256 digest of the UTF-8-encoded challenge token * and encode it in lowercase hexadecimal form. The * dNSName is "x.y.token.acme.invalid", where x * is the first half of the hexadecimal representation * and y is the second half. */ memset(&ac->ci, 0, sizeof(ac->ci)); /* first compute the key authorization */ lws_jwk_rfc7638_fingerprint(&vhd->jwk, digest); p = start; end = &buf[sizeof(buf) - 1]; p += lws_snprintf(p, end - p, "%s.", ac->chall_token); n = lws_jws_base64_enc(digest, 32, p, end - p); if (n < 0) goto failed; p += n; if (lws_genhash_init(&hctx, LWS_GENHASH_TYPE_SHA256)) return -1; if (lws_genhash_update(&hctx, (uint8_t *)start, lws_ptr_diff(p, start))) { lws_genhash_destroy(&hctx, NULL); return -1; } if (lws_genhash_destroy(&hctx, digest)) return -1; p = buf; for (n = 0; n < 32; n++) { p += lws_snprintf(p, end - p, "%02x", digest[n] & 0xff); if (n == (32 / 2) - 1) p = buf + 64; } p = ac->san_a; if (ac->is_sni_02) { lws_snprintf(p, sizeof(ac->san_a), "%s.%s.token.acme.invalid", buf, buf + 64); /* * SAN B MUST be constructed as follows: compute * the SHA-256 digest of the UTF-8 encoded key * authorization and encode it in lowercase * hexadecimal form. The dNSName is * "x.y.ka.acme.invalid" where x is the first * half of the hexadecimal representation and y * is the second half. */ lws_jwk_rfc7638_fingerprint(&vhd->jwk, (char *)digest); p = buf; for (n = 0; n < 32; n++) { p += lws_snprintf(p, end - p, "%02x", digest[n] & 0xff); if (n == (32 / 2) - 1) p = buf + 64; } p = ac->san_b; lws_snprintf(p, sizeof(ac->san_b), "%s.%s.ka.acme.invalid", buf, buf + 64); } else { lws_snprintf(p, sizeof(ac->san_a), "%s.%s.acme.invalid", buf, buf + 64); ac->san_b[0] = '\0'; } lwsl_notice("san_a: '%s'\n", ac->san_a); lwsl_notice("san_b: '%s'\n", ac->san_b); /* * tls-sni-01: * * The client then configures the TLS server at the * domain such that when a handshake is initiated with * the Server Name Indication extension set to * "..acme.invalid", the * corresponding generated certificate is presented. * * tls-sni-02: * * The client MUST ensure that the certificate is * served to TLS connections specifying a Server Name * Indication (SNI) value of SAN A. */ ac->ci.vhost_name = ac->san_a; /* * we bind to exact iface of real vhost, so we can * share the listen socket by SNI */ ac->ci.iface = ac->real_vh_iface; /* listen on the same port as the vhost that triggered * us */ ac->ci.port = ac->real_vh_port; /* Skip filling in any x509 info into the ssl_ctx. * It will be done at the callback * LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS * in this callback handler (below) */ ac->ci.options = LWS_SERVER_OPTION_CREATE_VHOST_SSL_CTX | LWS_SERVER_OPTION_SKIP_PROTOCOL_INIT | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; /* make ourselves protocols[0] for the new vhost */ ac->ci.protocols = acme_protocols; /* * vhost .user points to the ac associated with the * temporary vhost */ ac->ci.user = ac; ac->vhost = lws_create_vhost(lws_get_context(wsi), &ac->ci); if (!ac->vhost) goto failed; /* * The challenge-specific vhost is up... let the ACME * server know we are ready to roll... */ ac->goes_around = 0; cwsi = lws_acme_client_connect(vhd->context, vhd->vhost, &ac->cwsi, &ac->i, ac->challenge_uri, "POST"); if (!cwsi) { lwsl_notice("%s: failed to connect\n", __func__); goto failed; } return -1; /* close the completed client connection */ case ACME_STATE_ACCEPT_CHALL: /* * he returned something like this (which we parsed) * * { * "type": "tls-sni-01", * "status": "pending", * "uri": "https://acme-staging.api.letsencrypt.org/ * acme/challenge/xCt7bT3FaxoIQU3Qry87t5h * uKDcC-L-0ERcD5DLAZts/71100507", * "token": "j2Vs-vLI_dsza4A35SFHIU03aIe2PzFRijbqCY * dIVeE", * "keyAuthorization": "j2Vs-vLI_dsza4A35SFHIU03aIe2 * PzFRijbqCYdIVeE.nmOtdFd8Jikn6K8NnYYmT5 * vCM_PwSDT8nLdOYoFXhRU" * } * */ lwsl_notice("%s: COMPLETED accept chall: %s\n", __func__, ac->challenge_uri); poll_again: ac->state = ACME_STATE_POLLING; lws_acme_report_status(vhd->vhost, LWS_CUS_CHALLENGE, NULL); if (ac->goes_around++ == 20) { lwsl_notice("%s: too many chall retries\n", __func__); goto failed; } lws_timed_callback_vh_protocol(vhd->vhost, vhd->protocol, LWS_CALLBACK_USER + 0xac33, ac->goes_around == 1 ? 10 : 2); return -1; /* close the completed client connection */ case ACME_STATE_POLLING: if (ac->resp == 202 && strcmp(ac->status, "invalid") && strcmp(ac->status, "valid")) { lwsl_notice("status: %s\n", ac->status); goto poll_again; } if (!strcmp(ac->status, "invalid")) { lwsl_notice("%s: polling failed\n", __func__); lws_snprintf(buf, sizeof(buf), "Challenge Invalid: %s", ac->detail); failreason = buf; goto failed; } lwsl_notice("Challenge passed\n"); /* * The challenge was validated... so delete the * temp SNI vhost now its job is done */ if (ac->vhost) lws_vhost_destroy(ac->vhost); ac->vhost = NULL; /* * now our JWK is accepted as authorized to make * requests for the domain, next move is create the * CSR signed with the JWK, and send it to the ACME * server to request the actual certs. */ ac->state = ACME_STATE_POLLING_CSR; lws_acme_report_status(vhd->vhost, LWS_CUS_REQ, NULL); ac->goes_around = 0; strcpy(buf, ac->urls[JAD_NEW_CERT_URL]); cwsi = lws_acme_client_connect(vhd->context, vhd->vhost, &ac->cwsi, &ac->i, buf, "POST"); if (!cwsi) { lwsl_notice("%s: failed to connect to acme\n", __func__); goto failed; } return -1; /* close the completed client connection */ case ACME_STATE_POLLING_CSR: /* * (after POSTing the CSR)... * * If the CA decides to issue a certificate, then the * server creates a new certificate resource and * returns a URI for it in the Location header field * of a 201 (Created) response. * * HTTP/1.1 201 Created * Location: https://example.com/acme/cert/asdf * * If the certificate is available at the time of the * response, it is provided in the body of the response. * If the CA has not yet issued the certificate, the * body of this response will be empty. The client * should then send a GET request to the certificate URI * to poll for the certificate. As long as the * certificate is unavailable, the server MUST provide a * 202 (Accepted) response and include a Retry-After * header to indicate when the server believes the * certificate will be issued. */ if (ac->resp < 200 || ac->resp > 202) { lwsl_notice("CSR poll failed on resp %d\n", ac->resp); goto failed; } if (ac->resp == 200) { char *pp; int max; lwsl_notice("The cert was sent..\n"); lws_acme_report_status(vhd->vhost, LWS_CUS_ISSUE, NULL); /* * That means we have the issued cert DER in * ac->buf, length in ac->cpos; and the key in * ac->alloc_privkey_pem, length in * ac->len_privkey_pem. * * We write out a PEM copy of the cert, and a * PEM copy of the private key, using the * write-only fds we opened while we still * had root. * * Estimate the size of the PEM version of the * cert and allocate a temp buffer for it. * * This is a bit complicated because first we * drop the b64url version into the buffer at * +384, then we add the header at 0 and move * lines of it back + '\n' to make PEM. * * This avoids the need for two fullsize * allocations. */ max = (ac->cpos * 4) / 3 + 16 + 384; start = p = malloc(max); if (!p) goto failed; n = lws_b64_encode_string(ac->buf, ac->cpos, start + 384, max - 384); if (n < 0) { free(start); goto failed; } pp = start + 384; p += lws_snprintf(start, 64, "%s", "-----BEGIN CERTIFICATE-----\n"); while (n) { m = 65; if (n < m) m = n; memcpy(p, pp, m); n -= m; p += m; pp += m; if (n) *p++ = '\n'; } p += lws_snprintf(p, max - lws_ptr_diff(p, start), "%s", "\n-----END CERTIFICATE-----\n"); n = lws_plat_write_cert(vhd->vhost, 0, vhd->fd_updated_cert, start, lws_ptr_diff(p, start)); free(start); if (n) { lwsl_err("unable to write ACME cert! %d\n", n); goto failed; } /* * don't close it... we may update the certs * again */ if (lws_plat_write_cert(vhd->vhost, 1, vhd->fd_updated_key, ac->alloc_privkey_pem, ac->len_privkey_pem)) { lwsl_err("unable to write ACME key!\n"); goto failed; } /* * we have written the persistent copies */ lwsl_notice("%s: Updated certs written for %s " "to %s.upd and %s.upd\n", __func__, vhd->pvop_active[LWS_TLS_REQ_ELEMENT_COMMON_NAME], vhd->pvop_active[LWS_TLS_SET_CERT_PATH], vhd->pvop_active[LWS_TLS_SET_KEY_PATH]); /* notify lws there was a cert update */ if (lws_tls_cert_updated(vhd->context, vhd->pvop_active[LWS_TLS_SET_CERT_PATH], vhd->pvop_active[LWS_TLS_SET_KEY_PATH], ac->buf, ac->cpos, ac->alloc_privkey_pem, ac->len_privkey_pem)) { lwsl_notice("problem setting certs\n"); } lws_acme_finished(vhd); lws_acme_report_status(vhd->vhost, LWS_CUS_SUCCESS, NULL); return 0; } lws_acme_report_status(vhd->vhost, LWS_CUS_CONFIRM, NULL); /* he is preparing the cert, go again with a GET */ if (ac->goes_around++ == 30) { lwsl_notice("%s: too many retries\n", __func__); goto failed; } strcpy(buf, ac->challenge_uri); cwsi = lws_acme_client_connect(vhd->context, vhd->vhost, &ac->cwsi, &ac->i, buf, "GET"); if (!cwsi) { lwsl_notice("%s: failed to connect to acme\n", __func__); goto failed; } return -1; /* close the completed client connection */ default: break; } break; case LWS_CALLBACK_USER + 0xac33: if (!vhd) break; cwsi = lws_acme_client_connect(vhd->context, vhd->vhost, &ac->cwsi, &ac->i, ac->challenge_uri, "GET"); if (!cwsi) { lwsl_notice("%s: failed to connect\n", __func__); goto failed; } break; case LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS: /* * This goes to vhost->protocols[0], but for our temp certs * vhost we created, we have arranged that to be our protocol, * so the callback will come here. * * When we created the temp vhost, we set its pvo to point * to the ac associated with the temp vhost. */ lwsl_debug("LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS\n"); ac = (struct acme_connection *)lws_get_vhost_user( (struct lws_vhost *)in); lws_acme_report_status((struct lws_vhost *)in, LWS_CUS_CREATE_REQ, "creating challenge cert"); if (lws_tls_acme_sni_cert_create((struct lws_vhost *)in, ac->san_a, ac->san_b)) { lwsl_err("%s: creating the sni test cert failed\n", __func__); return -1; } break; default: break; } return 0; failed: lwsl_err("%s: failed out\n", __func__); lws_acme_report_status(vhd->vhost, LWS_CUS_FAILED, failreason); lws_acme_finished(vhd); return -1; } #if !defined (LWS_PLUGIN_STATIC) static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_LWS_ACME_CLIENT }; LWS_EXTERN LWS_VISIBLE int init_protocol_lws_acme_client(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_lws_acme_client(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/plugins/deaddrop/000077500000000000000000000000001357643561300176355ustar00rootroot00000000000000libwebsockets-3.2.1/plugins/deaddrop/README.md000066400000000000000000000055461357643561300211260ustar00rootroot00000000000000# Deaddrop: File upload and sharing plugin ## Building the plugin Just configure lws with `cmake .. -DLWS_WITH_PLUGINS=1` and build lws as normal. ## Configurable settings |pvo name|value meaning| |---|---| |upload-dir|A writeable directory where uploaded files will go| |max-size|Maximum individual file size in bytes| |basic-auth|Path to basic auth credential file so wss can also be protected| ## Required mounts To use deaddrop meaningfully, all the mounts and the ws protocol must be protected by basic auth. And to use basic auth securely, the connection must be protected from snooping by tls. 1) Set the basic-auth pvo to require valid credentials as described above 2) Protect your basic fileserving mount by the same basic auth file... this is used to serve index.html, the css etc. 3) Add a callback mount into "lws-deaddrop" protocol at "upload"... so if your URL for deaddrop is "/tools/share", this would be at "/tools/share/upload". It must also be protected by the basic auth file. 4) Add a fileserving mount at the url "get" (continuing the example above, it would be "/tools/share/get" whose origin matches the "upload-dir" pvo value you selected. This mount needs any additional mimtype mappings since it's where the uploaded files are shared from. ## Using with C See ./minimal-examples/http-server/minimal-example-http-server-deaddrop for how to use the plugin directly with C. ## Using with lwsws / lejp-conf As a plugin, you can configure the mounts and pvos per-vhost easily in JSON. All the snippets here The mountpoints would look something like this (added to vhost/mounts) ``` { "mountpoint": "/tools/share", "origin": "file:///var/www/deaddrop", "default": "index.html", "basic-auth": "/var/www/ba" }, { "mountpoint": "/tools/share/upload", "origin": "callback://lws-deaddrop", "basic-auth": "/var/www/ba" }, { "mountpoint": "/tools/share/get", "origin": "file:///var/cache/deaddrop-uploads", "basic-auth": "/var/www/ba", "extra-mimetypes": { ".bin": "application/octet-stream", ".ttf": "application/x-font-truetype", ".otf": "application/font-sfnt", ".zip": "application/zip", ".webm": "video/webm", ".romfs": "application/octet-stream", ".pdf": "application/pdf", ".odt": "application/vnd.oasis.opendocument.text", ".tgz": "application/x-gzip", ".tar.gz": "application/x-gzip" } } ``` This enables the plugin on the vhost, configures the pvos, and makes the wss serving also depend on having a valid basic auth credential. ``` "ws-protocols": [{ "lws-deaddrop": { "status": "ok", "upload-dir": "/var/cache/deaddrop-uploads", "max-size": "52428800", "basic-auth": "/var/www/ba" } }], ``` libwebsockets-3.2.1/plugins/deaddrop/assets/000077500000000000000000000000001357643561300211375ustar00rootroot00000000000000libwebsockets-3.2.1/plugins/deaddrop/assets/deaddrop.css000066400000000000000000000127351357643561300234430ustar00rootroot00000000000000.td { padding: 8px } .h1 { } .dd-fileinfo { font-size: 8pt; } table td { display: table-cell; vertical-align: top; background-color: rgba(247, 247, 232, 0.6); text-align: center } table { border: 2px solid #ccc; padding: 4px; border-radius: 12px; transition: background-color 0.5s ease; } table.nb { border: 0px; border-radius: 0px; transition: opacity 0.5s; } table.noconn { background-color: #ddd; } div { transition: opacity 0.5s; } div.da { padding-left: 20px; padding-right:20px; } div.trot { animation: scale 0.5s linear infinite; } div.uplbox { padding-bottom: 8px; } div.disa { opacity: 0.2; } td.ogn { text-align:left; font-size: 8pt; padding-left: 4px; padding-right: 4px;} td.dow { text-align:left; font-size: 9pt; padding-left: 4px; padding-right: 4px;} td.r { text-align: right; } td.err { color: red; font-weight: bold; } td.vm { display: table-cell; vertical-align: middle; padding-top: 12px; padding-bottom: 12px; } h3 { font-size: 12pt; margin-bottom: 6px; } span { font-size: 9pt; } a { font-size: 9pt; } input.ubtn { font-size: 16pt; margin-top: 4px; text-align: center } img.working { display: inline-block; float:left; background: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKICAgICB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzMHB4IiB2aWV3Qm94PSIwIDAgMjQgMzAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUwIDUwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICA8cmVjdCB4PSIwIiB5PSIxMCIgd2lkdGg9IjQiIGhlaWdodD0iMTAiIGZpbGw9IiMzMzMiIG9wYWNpdHk9IjAuMiI+CiAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIwLjI7IDE7IC4yIiBiZWdpbj0iMHMiIGR1cj0iMC42cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+CiAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImhlaWdodCIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyAyMDsgMTAiIGJlZ2luPSIwcyIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ieSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyA1OyAxMCIgYmVnaW49IjBzIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogICAgPC9yZWN0PgogICAgPHJlY3QgeD0iOCIgeT0iMTAiIHdpZHRoPSI0IiBoZWlnaHQ9IjEwIiBmaWxsPSIjMzMzIiAgb3BhY2l0eT0iMC4yIj4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjAuMjsgMTsgLjIiIGJlZ2luPSIwLjE1cyIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iaGVpZ2h0IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIHZhbHVlcz0iMTA7IDIwOyAxMCIgYmVnaW49IjAuMTVzIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJ5IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIHZhbHVlcz0iMTA7IDU7IDEwIiBiZWdpbj0iMC4xNXMiIGR1cj0iMC42cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+CiAgICA8L3JlY3Q+CiAgICA8cmVjdCB4PSIxNiIgeT0iMTAiIHdpZHRoPSI0IiBoZWlnaHQ9IjEwIiBmaWxsPSIjMzMzIiAgb3BhY2l0eT0iMC4yIj4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjAuMjsgMTsgLjIiIGJlZ2luPSIwLjNzIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJoZWlnaHQiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIxMDsgMjA7IDEwIiBiZWdpbj0iMC4zcyIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ieSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyA1OyAxMCIgYmVnaW49IjAuM3MiIGR1cj0iMC42cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+CiAgICA8L3JlY3Q+Cjwvc3ZnPg=="); width:0px; height:0px; cursor:pointer; padding:0.6em 1em; background-repeat: no-repeat; vertical-align:middle; color: rgba(0, 0, 0, 0); } img.delbtn { display: inline-block; float:left; background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNC4yMTcxMzMgMzQuMTQ0MjQ5IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KCTxkZWZzPgoJCTxyYWRpYWxHcmFkaWVudCBpZD0iYSIgY3g9IjEzNTguNSIgY3k9Ijk3Ny43MiIgcj0iNC4xMTYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS41MDM1IDAgMCAyLjQ5NDQgLTI1NzcuNCAtMTgyMy44KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KCQkJPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KCQk8L3JhZGlhbEdyYWRpZW50PgoJCTxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjEzNjYuMyIgeDI9IjEzNDQuOCIgeTE9Ijk3OC4xOSIgeTI9Ijk1OC43MyIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtMjE3NCAtMTA3Ni4xKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSIjOWM5NzlkIiBvZmZzZXQ9IjAiLz4KCQkJPHN0b3Agc3RvcC1jb2xvcj0iI2Y0ZmVmMyIgc3RvcC1vcGFjaXR5PSIuNzQwMTYiIG9mZnNldD0iMSIvPgoJCTwvbGluZWFyR3JhZGllbnQ+Cgk8L2RlZnM+Cgk8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4MzQuMjkgMTIzLjc1KSI+CgkJPGcgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KCQkJPGNpcmNsZSBjeD0iLTgxNy4yMiIgY3k9Ii0xMDYuNjgiIHI9IjE2LjA5IiBmaWxsPSJ1cmwoI2IpIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS45NjUiLz4KCQkJPHBhdGggZD0ibS04MjUuNjctMTE0LjcxYzE3LjMzIDE3LjMzIDE3IDE2Ljk5OSAxNyAxNi45OTkiIGZpbGw9IiNmNTUiIHN0cm9rZT0iI2EwMCIgc3Ryb2tlLXdpZHRoPSIxLjY2NSIvPgoJCQk8cGF0aCBkPSJtLTgwOC45Ni0xMTQuNjFjLTE3LjMzIDE3LjMzLTE3IDE2Ljk5OS0xNyAxNi45OTkiIGZpbGw9IiNmNTUiIHN0cm9rZT0iI2EwMCIgc3Ryb2tlLXdpZHRoPSIxLjY2NSIvPgoJCTwvZz4KCQk8ZWxsaXBzZSB0cmFuc2Zvcm09InJvdGF0ZSg1NS44ODUpIiBjeD0iLTUzNC45NiIgY3k9IjYxNS4wNyIgcng9IjYuMTg4MyIgcnk9IjEwLjI2NyIgZmlsbD0idXJsKCNhKSIvPgoJPC9nPgo8L3N2Zz4="); width:0px; height:0px; cursor:pointer; padding:0.45em; background-repeat: no-repeat; vertical-align:middle; color: rgba(0, 0, 0, 0); } @keyframes scale { 50% { opacity: 0.5; transform:scale(1.1) rotate(2deg); } } libwebsockets-3.2.1/plugins/deaddrop/assets/deaddrop.js000066400000000000000000000146451357643561300232710ustar00rootroot00000000000000(function() { var server_max_size = 0, ws; function san(s) { if (!s) return ""; return s.replace(/&/g, "&"). replace(/\/g, ">"). replace(/\"/g, """). replace(/%/g, "%"); } function lws_urlencode(s) { return encodeURI(s).replace(/@/g, "%40"); } function trim(num) { var s = num.toString(); if (!s.indexOf(".")) return s; while (s.length && s[s.length - 1] === "0") s = s.substring(0, s.length - 1); if (s[s.length - 1] === ".") s = s.substring(0, s.length - 1); return s; } function humanize(n) { if (n < 1024) return n + "B"; if (n < 1024 * 1024) return trim((n / 1024).toFixed(2)) + "KiB"; if (n < 1024 * 1024 * 1024) return trim((n / (1024 * 1024)).toFixed(2)) + "MiB"; return trim((n / (1024 * 1024 * 1024)).toFixed(2)) + "GiB"; } function da_enter(e) { var da = document.getElementById("da"); e.preventDefault(); da.classList.add("trot"); } function da_leave(e) { var da = document.getElementById("da"); e.preventDefault(); da.classList.remove("trot"); } function da_over(e) { var da = document.getElementById("da"); e.preventDefault(); da.classList.add("trot"); } function clear_errors() { var t = document.getElementById("ongoing"); for (n = 0; n < t.rows.length; n++) if (t.rows[n].cells[0].classList.contains("err")) t.deleteRow(n); } function do_upload(file) { var formData = new FormData(); var t = document.getElementById("ongoing"); formData.append("file", file); var row = t.insertRow(0), c1 = row.insertCell(0), c2 = row.insertCell(1), c3 = row.insertCell(2); c1.classList.add("ogn"); c1.classList.add("r"); if (file.size > server_max_size) { c1.innerHTML = "Too Large"; c1.classList.add("err"); } else c1.innerHTML = ""; c2.classList.add("ogn"); c2.classList.add("r"); c2.innerHTML = humanize(file.size); c3.classList.add("ogn"); c3.innerHTML = file.name; if (file.size > server_max_size) return; fetch("upload/" + lws_urlencode(file.name), { method: "POST", body: formData }) .then((e) => { /* this just means we got a response code */ var us = e.url.split("/"), ul = us[us.length - 1], n; for (n = 0; n < t.rows.length; n++) if (ul === lws_urlencode( t.rows[n].cells[2].textContent)) { if (e.ok === true) { t.deleteRow(n); } else { t.rows[n].cells[0].textContent = "Failed " + san(e.status.toString()); t.rows[n].cells[0]. classList.add("err"); } break; } }) .catch((e) => { var us = e.url.split("/"), ul = us[us.length - 1], n; for (n = 0; n < t.rows.length; n++) if (ul === lws_urlencode( t.rows[n].cells[2].textContent)) { t.rows[n].cells[0] = "FAIL"; break; } }); } function da_drop(e) { var da = document.getElementById("da"); e.preventDefault(); da.classList.remove("trot"); clear_errors(); ([...e.dataTransfer.files]).forEach(do_upload); } function upl_button(e) { var fi = document.getElementById("file"), da = document.getElementById("da"); clear_errors(); e.preventDefault(); ([...fi.files]).forEach(do_upload); } function body_drop(e) { e.preventDefault(); } function inp() { var fi = document.getElementById("file"), upl = document.getElementById("upl"); console.log("inp"); upl.disabled = !fi.files.length; } function delfile(e) { e.stopPropagation(); e.preventDefault(); ws.send("{\"del\":\"" + decodeURI(e.target.getAttribute("file")) + "\"}"); } function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { if (typeof MozWebSocket != "undefined") return new MozWebSocket(urlpath, protocol); return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var da = document.getElementById("da"), fi = document.getElementById("file"), upl = document.getElementById("upl"); da.addEventListener("dragenter", da_enter, false); da.addEventListener("dragleave", da_leave, false); da.addEventListener("dragover", da_over, false); da.addEventListener("drop", da_drop, false); upl.addEventListener("click", upl_button, false); fi.addEventListener("change", inp, false); window.addEventListener("dragover", body_drop, false); window.addEventListener("drop", body_drop, false); ws = new_ws(get_appropriate_ws_url(""), "lws-deaddrop"); try { ws.onopen = function() { var dd = document.getElementById("ddrop"), da = document.getElementById("da"); dd.classList.remove("noconn"); da.classList.remove("disa"); }; ws.onmessage = function got_packet(msg) { var j = JSON.parse(msg.data), s = "", n, t = document.getElementById("dd-list"); server_max_size = j.max_size; document.getElementById("size").innerHTML = "Server maximum file size " + humanize(j.max_size); s += ""; for (n = 0; n < j.files.length; n++) { var date = new Date(j.files[n].mtime * 1000); s += ""; } s += "
" + humanize(j.files[n].size) + "" + date.toDateString() + " " + date.toLocaleTimeString() + ""; if (j.files[n].yours === 1) s += ""; else s += " "; s += "" + san(j.files[n].name) + "
"; t.innerHTML = s; for (n = 0; n < j.files.length; n++) { var d = document.getElementById("d" + n); if (d) d.addEventListener("click", delfile, false); } }; ws.onclose = function() { var dd = document.getElementById("ddrop"), da = document.getElementById("da"); dd.classList.add("noconn"); da.classList.add("disa"); }; } catch(exception) { alert("

Error " + exception); } }); }()); libwebsockets-3.2.1/plugins/deaddrop/assets/drop.svg000066400000000000000000000463171357643561300226370ustar00rootroot00000000000000 libwebsockets-3.2.1/plugins/deaddrop/assets/index.html000066400000000000000000000017351357643561300231420ustar00rootroot00000000000000

LWS Deaddrop

...or select files to upload:



libwebsockets-3.2.1/plugins/deaddrop/protocol_lws_deaddrop.c000066400000000000000000000377241357643561300244060ustar00rootroot00000000000000/* * lws protocol handler plugin for "Dead Drop" * * Copyright (C) 2010 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include #include #include #include #include #include #ifdef WIN32 #include #endif #include #include struct dir_entry { lws_list_ptr next; /* sorted by mtime */ char user[32]; unsigned long long size; time_t mtime; }; /* filename follows */ #define lp_to_dir_entry(p, _n) lws_list_ptr_container(p, struct dir_entry, _n) struct pss_deaddrop; struct vhd_deaddrop { struct lws_context *context; struct lws_vhost *vh; const struct lws_protocols *protocol; struct pss_deaddrop *pss_head; const char *upload_dir; struct lwsac *lwsac_head; struct dir_entry *dire_head; int filelist_version; unsigned long long max_size; }; struct pss_deaddrop { struct lws_spa *spa; struct vhd_deaddrop *vhd; struct lws *wsi; char result[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE]; char filename[256]; char user[32]; unsigned long long file_length; lws_filefd_type fd; int response_code; struct pss_deaddrop *pss_list; struct lwsac *lwsac_head; struct dir_entry *dire; int filelist_version; uint8_t completed:1; uint8_t sent_headers:1; uint8_t sent_body:1; uint8_t first:1; }; static const char * const param_names[] = { "text", "send", "file", "upload", }; enum enum_param_names { EPN_TEXT, EPN_SEND, EPN_FILE, EPN_UPLOAD, }; static int de_mtime_sort(lws_list_ptr a, lws_list_ptr b) { struct dir_entry *p1 = lp_to_dir_entry(a, next), *p2 = lp_to_dir_entry(b, next); return (int)(p2->mtime - p1->mtime); } static void start_sending_dir(struct pss_deaddrop *pss) { if (pss->vhd->lwsac_head) lwsac_reference(pss->vhd->lwsac_head); pss->lwsac_head = pss->vhd->lwsac_head; pss->dire = pss->vhd->dire_head; pss->filelist_version = pss->vhd->filelist_version; pss->first = 1; } static int scan_upload_dir(struct vhd_deaddrop *vhd) { char filepath[256], subdir[3][128], *p; int m, sp = 0, initial, found = 0; struct lwsac *lwsac_head = NULL; lws_list_ptr sorted_head = NULL; struct dir_entry *dire; struct dirent *de; struct stat s; DIR *dir[3]; initial = strlen(vhd->upload_dir) + 1; lws_strncpy(subdir[sp], vhd->upload_dir, sizeof(subdir[sp])); dir[sp] = opendir(vhd->upload_dir); if (!dir[sp]) { lwsl_err("%s: Unable to walk upload dir '%s'\n", __func__, vhd->upload_dir); return -1; } do { de = readdir(dir[sp]); if (!de) { closedir(dir[sp]); if (!sp) break; sp--; continue; } p = filepath; for (m = 0; m <= sp; m++) p += lws_snprintf(p, (filepath + sizeof(filepath)) - p, "%s/", subdir[m]); lws_snprintf(p, (filepath + sizeof(filepath)) - p, "%s", de->d_name); /* ignore temp files */ if (de->d_name[strlen(de->d_name) - 1] == '~') continue; if (stat(filepath, &s)) continue; if (S_ISDIR(s.st_mode)) { if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) continue; sp++; if (sp == LWS_ARRAY_SIZE(dir)) { lwsl_err("%s: Skipping too-deep subdir %s\n", __func__, filepath); sp--; continue; } lws_strncpy(subdir[sp], de->d_name, sizeof(subdir[sp])); dir[sp] = opendir(filepath); if (!dir[sp]) { lwsl_err("%s: Unable to open subdir '%s'\n", __func__, filepath); goto bail; } continue; } m = strlen(filepath + initial) + 1; dire = lwsac_use(&lwsac_head, sizeof(*dire) + m, 0); if (!dire) { lwsac_free(&lwsac_head); goto bail; } dire->next = NULL; dire->size = s.st_size; dire->mtime = s.st_mtime; dire->user[0] = '\0'; if (sp) lws_strncpy(dire->user, subdir[1], sizeof(dire->user)); found++; memcpy(&dire[1], filepath + initial, m); lws_list_ptr_insert(&sorted_head, &dire->next, de_mtime_sort); } while (1); /* the old lwsac continues to live while someone else is consuming it */ if (vhd->lwsac_head) lwsac_detach(&vhd->lwsac_head); /* we replace it with the fresh one */ vhd->lwsac_head = lwsac_head; if (sorted_head) vhd->dire_head = lp_to_dir_entry(sorted_head, next); else vhd->dire_head = NULL; vhd->filelist_version++; lwsl_info("%s: found %d\n", __func__, found); lws_start_foreach_llp(struct pss_deaddrop **, ppss, vhd->pss_head) { start_sending_dir(*ppss); lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); return 0; bail: while (sp >= 0) closedir(dir[sp--]); return -1; } static int file_upload_cb(void *data, const char *name, const char *filename, char *buf, int len, enum lws_spa_fileupload_states state) { struct pss_deaddrop *pss = (struct pss_deaddrop *)data; char filename2[256]; int n; (void)n; switch (state) { case LWS_UFS_OPEN: lws_urldecode(filename2, filename, sizeof(filename2) - 1); lws_filename_purify_inplace(filename2); if (pss->user[0]) { lws_filename_purify_inplace(pss->user); lws_snprintf(pss->filename, sizeof(pss->filename), "%s/%s", pss->vhd->upload_dir, pss->user); if (mkdir(pss->filename #if !defined(WIN32) , 0700 #endif ) < 0) lwsl_debug("%s: mkdir failed\n", __func__); lws_snprintf(pss->filename, sizeof(pss->filename), "%s/%s/%s~", pss->vhd->upload_dir, pss->user, filename2); } else lws_snprintf(pss->filename, sizeof(pss->filename), "%s/%s~", pss->vhd->upload_dir, filename2); lwsl_notice("%s: filename '%s'\n", __func__, pss->filename); pss->fd = (lws_filefd_type)(long long)lws_open(pss->filename, O_CREAT | O_TRUNC | O_RDWR, 0600); if (pss->fd == LWS_INVALID_FILE) { pss->response_code = HTTP_STATUS_INTERNAL_SERVER_ERROR; lwsl_err("%s: unable to open %s (errno %d)\n", __func__, pss->filename, errno); return -1; } break; case LWS_UFS_FINAL_CONTENT: case LWS_UFS_CONTENT: if (len) { pss->file_length += len; /* if the file length is too big, drop it */ if (pss->file_length > pss->vhd->max_size) { pss->response_code = HTTP_STATUS_REQ_ENTITY_TOO_LARGE; close((int)(long long)pss->fd); pss->fd = LWS_INVALID_FILE; unlink(pss->filename); return -1; } if (pss->fd != LWS_INVALID_FILE) { n = write((int)(long long)pss->fd, buf, len); lwsl_debug("%s: write %d says %d\n", __func__, len, n); lws_set_timeout(pss->wsi, PENDING_TIMEOUT_HTTP_CONTENT, 30); } } if (state == LWS_UFS_CONTENT) break; if (pss->fd != LWS_INVALID_FILE) close((int)(long long)pss->fd); /* the temp filename without the ~ */ lws_strncpy(filename2, pss->filename, sizeof(filename2)); filename2[strlen(filename2) - 1] = '\0'; if (rename(pss->filename, filename2) < 0) lwsl_err("%s: unable to rename\n", __func__); pss->fd = LWS_INVALID_FILE; pss->response_code = HTTP_STATUS_OK; scan_upload_dir(pss->vhd); break; case LWS_UFS_CLOSE: break; } return 0; } /* * returns length in bytes */ static int format_result(struct pss_deaddrop *pss) { unsigned char *p, *start, *end; p = (unsigned char *)pss->result + LWS_PRE; start = p; end = p + sizeof(pss->result) - LWS_PRE - 1; p += lws_snprintf((char *)p, end -p, "" "" ""); p += lws_snprintf((char *)p, end - p, ""); return (int)lws_ptr_diff(p, start); } static int callback_deaddrop(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct vhd_deaddrop *vhd = (struct vhd_deaddrop *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); struct pss_deaddrop *pss = (struct pss_deaddrop *)user; uint8_t buf[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - LWS_PRE - 1]; char fname[256], *wp; const char *cp; int n, m, was; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: /* per vhost */ lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd_deaddrop)); vhd = (struct vhd_deaddrop *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); vhd->context = lws_get_context(wsi); vhd->vh = lws_get_vhost(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->max_size = 20 * 1024 * 1024; /* default without pvo */ if (!lws_pvo_get_str(in, "max-size", &cp)) vhd->max_size = atoll(cp); if (lws_pvo_get_str(in, "upload-dir", &vhd->upload_dir)) { lwsl_err("%s: requires 'upload-dir' pvo\n", __func__); return -1; } scan_upload_dir(vhd); lwsl_notice(" deaddrop: vh %s, upload dir %s, max size %llu\n", lws_get_vhost_name(vhd->vh), vhd->upload_dir, vhd->max_size); break; case LWS_CALLBACK_PROTOCOL_DESTROY: lwsac_free(&vhd->lwsac_head); break; /* WS-related */ case LWS_CALLBACK_ESTABLISHED: pss->vhd = vhd; pss->wsi = wsi; /* add ourselves to the list of live pss held in the vhd */ pss->pss_list = vhd->pss_head; vhd->pss_head = pss; m = lws_hdr_copy(wsi, pss->user, sizeof(pss->user), WSI_TOKEN_HTTP_AUTHORIZATION); if (m > 0) lwsl_info("%s: basic auth user: %s\n", __func__, pss->user); else pss->user[0] = '\0'; start_sending_dir(pss); lws_callback_on_writable(wsi); return 0; case LWS_CALLBACK_CLOSED: if (pss->lwsac_head) lwsac_unreference(&pss->lwsac_head); /* remove our closing pss from the list of live pss */ lws_start_foreach_llp(struct pss_deaddrop **, ppss, vhd->pss_head) { if (*ppss == pss) { *ppss = pss->pss_list; break; } } lws_end_foreach_llp(ppss, pss_list); return 0; case LWS_CALLBACK_RECEIVE: /* we get this kind of thing {"del":"agreen/no-entry.svg"} */ if (!pss || len < 10) break; if (strncmp((const char *)in, "{\"del\":\"", 8)) break; cp = strchr((const char *)in, '/'); if (cp) { n = ((void *)cp - in) - 8; if ((int)strlen(pss->user) != n || memcmp(pss->user, ((const char *)in) + 8, n)) { lwsl_notice("%s: del: auth mismatch " " '%s' '%s' (%d)\n", __func__, pss->user, ((const char *)in) + 8, n); break; } } lws_strncpy(fname, ((const char *)in) + 8, sizeof(fname)); lws_filename_purify_inplace(fname); wp = strchr((const char *)fname, '\"'); if (wp) *wp = '\0'; lws_snprintf((char *)buf, sizeof(buf), "%s/%s", vhd->upload_dir, fname); lwsl_notice("%s: del: path %s\n", __func__, (const char *)buf); if (unlink((const char *)buf) < 0) lwsl_err("%s: unlink %s failed\n", __func__, (const char *)buf); scan_upload_dir(vhd); break; case LWS_CALLBACK_SERVER_WRITEABLE: if (pss->lwsac_head && !pss->dire) return 0; was = 0; if (pss->first) { p += lws_snprintf((char *)p, lws_ptr_diff(end, p), "{\"max_size\":%llu, \"files\": [", vhd->max_size); was = 1; } m = 5; while (m-- && pss->dire) { p += lws_snprintf((char *)p, lws_ptr_diff(end, p), "%c{\"name\":\"%s\", " "\"size\":%llu," "\"mtime\":%llu," "\"yours\":%d}", pss->first ? ' ' : ',', (const char *)&pss->dire[1], pss->dire->size, (unsigned long long)pss->dire->mtime, !strcmp(pss->user, pss->dire->user) && pss->user[0]); pss->first = 0; pss->dire = lp_to_dir_entry(pss->dire->next, next); } if (!pss->dire) { p += lws_snprintf((char *)p, lws_ptr_diff(end, p), "]}"); if (pss->lwsac_head) { lwsac_unreference(&pss->lwsac_head); pss->lwsac_head = NULL; } } n = lws_write(wsi, start, lws_ptr_diff(p, start), lws_write_ws_flags(LWS_WRITE_TEXT, was, !pss->dire)); if (n < 0) { lwsl_notice("%s: ws write failed\n", __func__); return 1; } if (pss->dire) { lws_callback_on_writable(wsi); return 0; } /* ie, we finished */ if (pss->filelist_version != pss->vhd->filelist_version) { lwsl_info("%s: restart send\n", __func__); /* what we just sent is already out of date */ start_sending_dir(pss); lws_callback_on_writable(wsi); } return 0; /* POST-related */ case LWS_CALLBACK_HTTP_BODY: /* create the POST argument parser if not already existing */ if (!pss->spa) { pss->vhd = vhd; pss->wsi = wsi; pss->spa = lws_spa_create(wsi, param_names, LWS_ARRAY_SIZE(param_names), 1024, file_upload_cb, pss); if (!pss->spa) return -1; pss->filename[0] = '\0'; pss->file_length = 0; /* catchall */ pss->response_code = HTTP_STATUS_SERVICE_UNAVAILABLE; m = lws_hdr_copy(wsi, pss->user, sizeof(pss->user), WSI_TOKEN_HTTP_AUTHORIZATION); if (m > 0) lwsl_info("basic auth user: %s\n", pss->user); else pss->user[0] = '\0'; } /* let it parse the POST data */ if (lws_spa_process(pss->spa, in, (int)len)) { lwsl_notice("spa saw a problem\n"); /* some problem happened */ lws_spa_finalize(pss->spa); pss->completed = 1; lws_callback_on_writable(wsi); } break; case LWS_CALLBACK_HTTP_BODY_COMPLETION: /* call to inform no more payload data coming */ lws_spa_finalize(pss->spa); pss->completed = 1; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_HTTP_WRITEABLE: if (!pss->completed) break; p = (unsigned char *)pss->result + LWS_PRE; start = p; end = p + sizeof(pss->result) - LWS_PRE - 1; if (!pss->sent_headers) { n = format_result(pss); if (lws_add_http_header_status(wsi, pss->response_code, &p, end)) goto bail; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"text/html", 9, &p, end)) goto bail; if (lws_add_http_header_content_length(wsi, n, &p, end)) goto bail; if (lws_finalize_http_header(wsi, &p, end)) goto bail; /* first send the headers ... */ n = lws_write(wsi, start, lws_ptr_diff(p, start), LWS_WRITE_HTTP_HEADERS | LWS_WRITE_H2_STREAM_END); if (n < 0) goto bail; pss->sent_headers = 1; lws_callback_on_writable(wsi); break; } if (!pss->sent_body) { n = format_result(pss); n = lws_write(wsi, (unsigned char *)start, n, LWS_WRITE_HTTP_FINAL); pss->sent_body = 1; if (n < 0) { lwsl_err("%s: writing body failed\n", __func__); return 1; } goto try_to_reuse; } break; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: /* called when our wsi user_space is going to be destroyed */ if (pss->spa) { lws_spa_destroy(pss->spa); pss->spa = NULL; } break; default: break; } return 0; bail: return 1; try_to_reuse: if (lws_http_transaction_completed(wsi)) return -1; return 0; } #define LWS_PLUGIN_PROTOCOL_DEADDROP \ { \ "lws-deaddrop", \ callback_deaddrop, \ sizeof(struct pss_deaddrop), \ 1024, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_DEADDROP }; LWS_EXTERN LWS_VISIBLE int init_protocol_deaddrop(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_deaddrop(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/plugins/generic-sessions/000077500000000000000000000000001357643561300213335ustar00rootroot00000000000000libwebsockets-3.2.1/plugins/generic-sessions/assets/000077500000000000000000000000001357643561300226355ustar00rootroot00000000000000libwebsockets-3.2.1/plugins/generic-sessions/assets/admin-login.html000066400000000000000000000002321357643561300257160ustar00rootroot00000000000000 This is an example destination that will appear after successful Admin login. This URL cannot be served if you're not logged in as admin. libwebsockets-3.2.1/plugins/generic-sessions/assets/failed-login.html000066400000000000000000000001241357643561300260520ustar00rootroot00000000000000 This is an example destination that will appear after a failed login libwebsockets-3.2.1/plugins/generic-sessions/assets/index.html000066400000000000000000000040001357643561300246240ustar00rootroot00000000000000
This is a demo application for lws generic-sessions.

It's a simple messageboard.

What's interesting about it is there is no serverside scripting,
instead client js makes a wss:// connection back to the server
and then reacts to JSON from the ws protocol. Sessions stuff is
handled by lws generic sessions, making the actual
test application
very small.

And because it's natively websocket, it's naturally connected
for dynamic events and easy to maintain.

Register / Login at the top right to see and create new messages.
New message

libwebsockets-3.2.1/plugins/generic-sessions/assets/lwsgs-logo.png000066400000000000000000000230011357643561300254340ustar00rootroot00000000000000‰PNG  IHDRČO®ķŠžsBIT|dˆ pHYs$œ$œYƒö9tEXtSoftwarewww.inkscape.org›ī< IDATxœķ]y\T厒à òƒ ‹"*Š„éUp!M%Ķ\2·ne™-.ia·,ė¾×¼Ž×›¹f.™Kīhī¢Blā²ļĖlæ÷§9ĪaŌzēūłœœó¬ēĢłßśüL0Į­0{Ņ0Į„§&1Į=0ˆ &聉@L0ALb‚ z`"LЁ˜`‚˜ÄōĄD &˜ &1Į=0Ņ0&ˆ2™ .\@aa!jjj  įć惞={ĀĮĮęę©[6”ń—y[īŽ½‹“'O"%%7oŽDuu5¤R)ĢĢĢ`kk 777 0111茵+„Ba»Ķ%//ėÖ­CRRrssQ^^+++ųųų OŸ>>|8bccįččŲnsxŅØ©©Į{gӧOĆÓÓK—.EXXŲ“žVĖAüžūļ“|łr %''' …€;‰D" ¦yóęщ'ض¶ÖčóP*•“dɲ°°ąÆķ8tčŃĒššį‡ņī×ĮĮjjjžō“ZŒ?=¹}ū6öģŁƒ-[¶ąęĶ›Üu‘HWWWø»»C$”¼¼·oßʶmŪP[[ ;;;<ūģ³FĖģŁ³±vķŚfė …B 8ŠØc?mP’- ¢¢wļŽEPPŠšQėš§&„R‰żū÷ćēŸÖųAœŲŲXŲŚŚ"--«wźŌ)x{{£WÆ^FÓI6mڤ•8$ üüü —ĖńąĮŌÖÖ"$$vvvF÷iETTöļßĻwėÖ OpF­Ä“fa­…R©¤ŠŠ š0aŁŚŚjˆ0qqqtäČR(¤P(H&“Ńʍ©_æ~daaAƆ £¼¼<’ĖåmžKuu5u芁7¾X,¦åĖ—Suu5ÆnFF;v¬Ķc>ķP*•ōÓO?Ѽyóč믿¦ŅŅŅ'=„VįOĖAär9Nž<‰ģģlŌÕÕq×lll‰=ząśõėŲ¹s'œœœ   \½z%%%ČĪΆ‡‡G›ö-[¶ ¬¬Œwķæ’ż/^{ķ5ŗ]»vE×®]Ū4ޟńńńˆŅSi '¬,ąŠ!ąŅ„vœWW .xę@"ŃYˆPRR‚ŗŗ:( 2'''”——抔CŲ»w/ʎ‹üü|TVVB©TB©TmŹ7nä÷ķŪÓ¦Mku÷ļßǹsē8ėW’žżŃ„KƒŪ+ ¤¦¦āĮƒ°°°@hhh³³{÷īįüłó(//‡µµ5śõė×¢1sss‘››‹ĄĄ@ųųųÜNÕVõŃrttDPPzöģŁ¢>Ś óš¼<¢’ł"__"‘ˆhŸĆŁ™hęL¢cLjźźtN§””¾żö[źÖ­›V‹ÕŖU«())‰fĻžMÖÖÖ4räHŠ‹‹£€€‰D4`Ąŗzõ*I„Ņ6±ą††‹Å¼9¬\¹²U}åååŃ /¼@@CdŒŠŠ¢ū÷ļóźļŪ·+·³³#¹\NGŽ!___^[Ś“i“Ö1srrhĈZnjŽŽÖó—_~įŹCBBH.—Ó¬Y³øöīīīDDtąĄ^_'NŌzæĻ?’¼V+_·nŻ(55µUĻј0œƒtźŒ <|ģŚ”•Fü C”Ŗ«’`ēN@*D"ą¹ētr"5YRO8 ³²²Š±cGųųųĄĀĀIIIĖå033ƒ‡‡zõź//Æ6‹WW®\T*å]2dH‹ūÉŹŹBDD “–=zC‡EJJŠVæŖŖ ’üē?±xńbČår^YMM f̘ņåĢĢLDFF¢°°Pė˜III6lRRR`kk«Qž––†eĖ–į»ļ¾ć®uźŌÉ ū-((@DDīܹ£µ<==ż©0dN ąķ ,XĄ¾õ·o³—Ų jj€+W€Ŗ*F|»w••Ą'ŸŻ»b±F3333­]¦§§#<<øtéRRR •JammĮƒć•W^³³s›§ž——§1§Ī;·Ø„R‰)S¦h‡X,ę_FF¾łę|üńĒZūY°`Ī1¤R)~üńG®­B”Ą”)S4ˆ£é˜éééX¹r%/^¬uŽMēbØxõžūļė$š÷÷*tµ–)éff€ƒšé§Ęåć?üüē?@a!ć&Ē„„Ą’ tī XXØMÅ ...°P»¦Žääd899q¾‰«WÆ¢°°¾¾¾čŅ„ :tč`”iWVVņĪķķķ!Ń£;iƱcĒpįĀīÜĮĮ»wļFxx8Ž9‚Ń£Gs/ķ?ü “@ _æ~Xøp!”J%>ųąäęęre—ŌōĒ_ż©©©Ü¹££#vļŽAƒįšįĆxńÅ!“Éø1µˆ b±Ļ?’<ˆ½{÷nö~ ±mŪ6޵ˆˆ,Z“‰ׯ_7ŖŽŲ“܊%čUž0ĪRRäēõõ€µ5Ń\]‘iƒ§'0m “[¶0£@M pķšöŪĄ¢E@’ž€ ›ø¹9śõėOOOܼySCĢihhĄ±cĒP\\Œ‘#GbņäÉ读7$ $ ĢtĶ£…hJ ÖÖÖ¼ó 6hˆ<*Œ;NNNŲ±cļśĀ…  ˆ‰‰ALL öīŻ ČĪĪFII‰VīēķķcĒŽĮęgŌŲ؈‰'råźŖé˜‹-BDD 66ŃŃќćÖ­[(++ÓśQ‘H$8{ö,śōé£õµįĄ<prrĀžżū¹y‡‡‡ÜW{ĆųfŽ+WŲ—’Ņ% ¼Ė™.įįĮ^š”Cm#ssF$/æĢŚģڤ§3"¹pų÷æEFpssƒææ?:tč !*(•J””” 55åååhhhĄŌ©SĘ9 ÅŪoæŚŚZ­eżū÷‡““._¾Ģ»žā‹/ņĪCBB8€āāb­νdŠ«W/^¹ŗ9ܐ1Õ}ÅÅÅZŸ]lll‹ˆ®]»Ę;‹‹ćĶūi‚q äŅ%`ūv`ß> 3“é*H$Œ“'^^Œ(š¢kWą„—X[¹œq’ŗ:ą×_”]6 ų#27((ZM"Buu5ŅŅŅPYY 777ÄÄÄĄĆĆĆh·ÜTyU Evv6÷æ@ @NNO>æwļƾ.ń£©>ęąąĄ;W7h43;;·oßꮯæß 1µ)ļĶA]ģ`ōcĀ8B440ŃhēN&Z‰Å@‡@ĒŽL_©®fŠ}b"#–ńćWŃF$Ŗ/ŸBlŽ 0"9tˆ‰l"0x0`k‹gŸ}ÉÉÉøuė–Ī/µL&CNN6nÜ‘H„ččhøøøå֛~ł***ŠŠŠĄé!iiiČĪĪFvv6._¾ŒuėÖńźjjjxē±±±zĒ4” ź#•J%ļY†n”1 śżLÄzZa‘JŁ—žšaąī]öŅ{x±±Ąōé@c#–8;|ž9ąģĢŹ]]µ÷Ł«`iÉ8ʆ ĢŗÕŠĄÄ·ņrĄŹ 0ėßéééHOOǵk×4̾ź8uź”J%ˆćʍƒ„„e›oŻĻĻw®T*‘ąą`®ÜĻĻQQQČĢĢŌ …B”įčŌ ø¹¹µiĪr¹¼EJ°D"«®ß©hŖ/¶ŌØń8a©Ŗbfٲ2ĘM||˜˜“p!{‘‰˜g¼KĘ=öģ6mzōŠM ąļĢĖ÷Ÿ~bÖ-™Œ‰jsę’ü'aa4hrss‘‘‘††½SMIIR©„L&Ó ŅRōģŁ€G˜'Ožä¤9˜››óL«ĪĪĪX½zµĪś–––m60ˆÅb˜››sĘWWWüē?’ŃYߏŹJ§9½5hśa*..6ZßʆqD&rs'QHß¾€ŗ£G$bצOīßnÜ`CB“ś80ĆŻY±jj˜ˆUPĄĘ)-eœI©„··7¢££‘——‡­[·€NN"•Jqżśu$&&ĀĢĢ /½ō¬¬¬Z}ė Dff&w-11o¾ł¦Į/•‹‹ 'óWVVb̘1ķ¾ņŃÅҳjUTT ..®]‘©£©H•••õXĘm Œcėlh®_gśĄšīŻ•ēäæüœ;8:2Biljk™Õ„ĀG"ĄøN|<ĆŚ‰ĮĮĮ˜4i¢££5L­MQ]]k×®aŻŗuŲµkW›æ`/æü2ļüņåĖX³fĮķ»uėĘż/“ÉpöģŁ6ͧ„cJ„R$''·ū˜*ųūūóĪ÷ģŁóŲĘn)ŒC 2pļŽ#ĻŗJ9Wįša&VŻøĮv„’q ±X·_`żŻ¹Ćı˗‘øŗ2}śtžóŠŃŃ”””ųūß’ŽČČČfæźźjüöŪoX·nŽ=Ŗ3ÜĀL:ā&\pΜ9ųģ³ĻPUUō·aĆ­ķ‡Ź;’ųć5äōŗŗ:ž3±­0dĢŚŚZ£Ž©BÓ„·<ˆpńāE£Ū‡ ģ+Æ)$Ī”8}šY¶:vdSR˜ļä¤[¼’ÉqģŻĖ| Œ°ŗtF“ŲŽķģģ0jŌ(…Bœ9s:§-•JqźŌ)…B˜™™!&&FĆ4j|}}1wī\|õÕWÜ5¹\Ž%K–`éŅ„prrBqq±NÅų•W^ABBgΜAÆ^½[[[äååaļŽ½ "äēēE©}å•Wšé§Ÿrcž:uŠ7fnn.öķŪ€­Ś4¦"=tčP8;;£¤¤„»6gά_æīīīČČČ@QQŹŹŹtFJ<6%äńÖ-"??"±˜Eä~ų!æüŻw‰:u"²µ%rs#²·'Z°€(;[{J%ѝ;D+VŁŁ ¬_€hčP¢ƒ‰d2½S:xš 5J#ŅV×1räH:xš`«Amm-…‡‡4žˆ:ĪČČąŚ/Y²Ä vß}÷×F=šMš4‰7§šŹ»wļĪ+’č£ sŻŗu\õh^4uźT­Ļ£¹hŽ+V4;īÓ°°Ģ8"–@Ą8ŠƒŌ×3æ‡ 3g2Įח…œ,Xüżļģm(,~üX±‚)ēź8ž™‰~¤“hAdd$^żuŒ9Ņ [(..ĘƇ Ŗ« VVV8pą&OžÜ¬rīåå…š‚ń0sęL½ķ¬’Š·Œ…O?żÓ§O×[ĒĘʦ]̰ļ¼óf̘”³\  ??ßčć¶Ā„„„£ō$‘æ’Īō„śz¦|÷źÅĒĪŽ‰F‘‘Ģ÷ŹĀJ“Yj>Ö®¶mņņ˜UĢĪPy[ĖŹ˜$3“é:nnĢ”Ü"‘ĪĪĪpqqA}}=rrrōŚž=<<šģ³Ļ¶É«+‹1fĢÄĘĘĀĪĪ2™ VVVšõõELL ęϟ5kÖh$/xį…Ī™-,,ąåå…ŠŠP¼łę›HLLD’žż¹6B”žžž6l† †Įƒ#00×§½½=W>tčPŽż Œ5 ƒ Ą|8‰^^^ Ć[o½… 6 _æ~¼1½¼¼tŽ©onźÕŲ½{÷ęŅ3YZZ" qqqXµj•Į·v…QųTJ”ŸO“hQ—.DÖÖDĻ=Gōļ•–)Ķ÷!—³ŗ_~IĀÄ5”ČՕčż÷‰¶mc¢Z` µÄb¢Įƒ‰6m"j²ØGeee“’~2dˆÖµėŖ£oß¾“vķZ£<ž:0 {{Ęjk™E+7—…–880_†µõ#¬)ärĘ9vļ¾ūøu‹]óōFŒ`NĮæżõ£P0¬“”õ_]Ķśvu“ÄYZZĀÕÕeeeHKKć¬JMįé鉾}ū>ÕqA&<~×Õ­0e {‰·l22€eĖ=’<‡ššu•JFG²u&%%¬½‹ ‹ü}ļ=fĪ53c–+‰„õ—˜³ F©”õ3z4³Œ5½Issne” &“Ęw׆„S§2šķ·Œ“üćģ%?žļ]˜Ī’”ÄV0.ca Ģ›4M4Ö£SšE"¶øŖ¼œ™‘«Ŗa͘”Į©ˆč©Y€cŸ ķĻŠ½;šź«LYß²…0žļ’2ńkęL&L<ڼ™‰U* ’™ ‡õUś® ĄėÆ3%’ūļfdkÖ°eĮaa|? t‡ž“d2®_掂‚Čd2888Ą××¾¾¾Fkz(..6ZōóŸ ķC Lܚ9óŃŅŁ¬,f™R*Y³˜uźū[ģlꀑ#Yڟž=u;ĶĶ™øöŹ+Œ[lßĪ,hEE̹Ø#|åqIee%˜˜Ø±Ś`cƌABBÜŻŻŪ}>mżzųša„……į×_ż'¦¶_Dœµ5‹ą}żuöĀž=ĖBŽ Ę%ˆ€ŸęĒpĢ·!ź&ĢĢX“ļøqŒH~ž™é/õõZ×Ė?ā(((@dd$nŻŗ„³NQQÖÆ_„K—¶ū|ڊ¼¼<>|pöģY\øp[–ū’ķ2ja ²“(LWųżw:0±Ŗ¾ž‘Ī@¤¦²Ø]GG¦ĻˆDśĒ bNHss¶ÖD‡ųņ8äŻwßåˆ#,, .D·nŻ`kk‹āāb\»v ;vģ€R©lóšŽĒŲŁŁ”ŖŖ b±Ųą”>%<žŌ£/¾ČøH}=ć$ź©rģ옾 —3«TEĖn¢T2³m—.ś 0­e÷õeĘ-aŪķM UUUŲµk×Ó Ä‘#GxėœŃ­[7L˜0įOc0°µµÅéÓ§qčŠ!DFFĀ××÷IOé±ćńˆ@Œþņåå€z¤ęąĮĢ»^XØ\2„„L¹Æ«¾ü’q“ę[f_W÷Č †ö&7npirfΜ©wµ¢±2Ŗ<„„„ $$äIOć‰įń%Æ67TņėĒ3g`T³V…‡?Ņ6l`Źvy93’ĄgŸ1’Fs z„BFZ^@Ņ’…Ń˜POÖšgŸL0 7»»£#3Į.YĀ|Ŗø¬˜˜5m#’={XX|a! J“µfĻf邚#’'@xk¶/]ŗ„É“'·ŗÆ’’œ?„„„šōōD÷īŻŃQ}}äęęāāÅ‹ØØØ€““¬Õ¤LDø|ł2ŅÓÓŃŲŲōīŻ»ÅI§Õ!“ɐœœŒ;wī@,#00Ļ<óL‹LŚwīÜĮ•+WPZZ ooo„……éåÄ555HNNƽ{÷ ‹Ń±cG<÷ÜsĘM!Ōń+J„’źė멸ø˜ŖŖŖØ””Ŗx,…‚ئ†(%…Å^5ÅŋDo¼ĮĀć"ss"//¢O>!ŗqưø®&ج¬¤ļ¾ūŽüüüŚ-«””Ū#ÄŚŚš233[ÜGUU͚5‹D"onfff4qāD½FTmāććµ&ŸīŅ„ ķŁ³‡W’Ö­[ōĢ3Ļh}”””tćĘ ^}Uréčœ÷ڵkÉŁŁY£æ€€:räˆÖ6oæż6 Ķ›7SII ?žĢĢĢxķŻŻŻéĢ™3ZŪoŲ°ģķķ5Ę“¶¶¦™3g6÷Ø †QD.—SQQŻŗu‹.]ŗDĒ§;vŠźÕ«éūļæ§Ÿ~ś‰öķŪGgΜ”ĢĢLŖ®®&„R©»Ć³g‰fĻ&rw”õŻĻč³ĻŲŚ}mµ ²²’Ö¬YÓ®BDōžūļsżłūūSnn®Įm(22’koaaAžžž|H2}‹ž’“‰^}•-²‰ŲD“lQYY‹ęYYYIß~ūm»HUUłūūó~Ü'NŌö‹/¾ąŚ½óĪ;·xųš!EDDpe—/_ꦔ––r/ŹŠ”Cy»8eeeŃgŸ}ĘŪ¬T}Õ{ļ½Ēmż “É(%%…V¬X”1/}rćĘ Žø:wīLW®\!"ö^¬Y³†#īN:QCCÆ­Š@TǼyóø{®ŖŖ¢Q£Fqeė×Æēµ'$‘Hx¦ŖŖŠ¶mŪ¦“kµm"’’ڽ{7=𬭭ÉĀĀ‚D" …BĖ$H(’…„„ŠĀ… )++Kwēr9Ń„KD“'³=Iüż‰ŗw'Š‹#śį‡ĶSE M÷Ķ06„§§ó¾fB”–-[¦—c666’££# ˜˜ņū÷ļs+#—,YĀ]?wī7ĪīŻ»››ś×¾øøŲ ūŃG 3fĢą~ß«WÆj”/^¼˜oėÖ­¼2uyżõ×5ŚfeeqåÓ¦Mć•©8Nll¬A÷Š“ŚŽxöģY|žłēXŗt)N:…ŗŗ:H„RČd2( žRL(Ɂ …łłłŲøq#¾żö[\¹rEūB! WIH`aš;w²°”/¾¢£[<_zL±XAAAHMM岜+ ,Z“ńńń:3?;v åååX.ߦšōōĀæżöw]]6$ł\Kė7U¾ąČČH­¦ą9sępé‹TėŪ›B,ćÓO?ո޹sgn‡«¦iT÷”+)ø1Ńb+!//?żōöļߏ{÷īqöC P(ŠŲŲˆŹŹJģŽ½›K⦾jƒ„% 'i#„B!<<<ŠæŽ`UŽ_c S§NHNNĘĢ™3±eĖĄĪ;‘““ƒżū÷ĆĖĖ‹W_}]‰ ===„„„ܵ€€…B( üė_’ĀšįĆõęųR_ÅųłēŸćßŖˆ†Vąžżū(**nEbSøŗŗ¢Gøvķ®^½ŖµŽµµµĪ@HOOOdeei¬į錵+ŅŅŅpüųqœ?žūx“ZL …ĉ'ŸŸo°WX pÄ śzåęęrŁ:„Ba‹³„ cŹ”):æā:tŠČ×ŌXYYįĒÄŠ”C1gĪŌÕÕįźÕ«ˆ‰‰Arr2o÷¤ōōtlo‘ššÜµĄ#ēb½Zܚ‹‹ ʍ‡ķŪ·ćܹsˆŠŠĀöķŪuš„Ÿžyųłł!//«V­B}}=V®\ŁŖÄyź_uńjC@@®]»†ģģlNŠ0Ŗ|ĄŖĢ+*Ģž=?’ü3är9¢¢¢°qćFŒ;¶…w` Z") *++£ØØ(­ĖWČ×חŗtéBŽŽŽdggĒ)‘*=¤iäććCo¾ł&effRcc£ŃåČ'““4źŲ±#wæ³gĻę•ėڧOŪŃT(**¢ĄĄ@®ÜĘʆ¾łę:Ļ… x”N:ŃįƇuĪ]—²gĻ®;včl?sęL®^MM w]„ƒ8::źl;~üx@]»vÕ(ūšĆyĻeŌØQTPP ³ÆÖ¢E:Hcc#ņņņ™™É}åĢĶĶįąą€°°0LŸ>sēĪÅäɓѯ_?ŲŪŪsr(éŠīܹƒ­[·ā믿F^^^‹D¶?‚ƒƒqüųqn§Łµk×ņ¶nSq5”PGGG½GSgž‹‹ RRR0aĀĢy6wī\Œ;Õź™ež@’žżńŪoæ”oß¾€üü|ÄĘĘbéŅ„-ŅÓŌ9±¾\bźYį[³5„.,_¾‰‰‰'Ž»w/śōéƒsēĪm -ć %%%“qćFrss㸁H$¢.]ŗŠš5k(??Ÿjkk©®®ŽjjjčīŻ»“téRźŌ©“Nī”:ĢĢĢČŅŅ’¦OŸN©©©ŌŠŠšX©TśČ™ŁNX½z5wæ_~ł%w}šąĮÜ×¼-Ų¹s'yyyqc 2„är¹ÖŗR©”¾ųā ²““äź/^¼X£ž.²cǮݾ}ūtĪiΜ9\=uF[9ˆ łłł4räHn kkkĪÜl “JIW’ėä䄰°0Œ5 ĪĪĪø~ż:222ŠŲŲ'''Lš4 :tĄ¦M›pńāE_)„R‰śśzģŪ·W®\yģ;Y[[#<<ƾśj»-dš8q"Žxć |^uÆ*„·µˆ‹‹ĆąĮƒ1zōhœ9sĒĒʍµf±‰DX°`¢££…ŅŅR|łå—˜8q"/oÆ.Øē?֗½ReTķņ›śųų`ß¾}ųüóϱxńbŌÖÖā7Ž0'iØD)õhTWWW„††ĀĶĶ W®\Į¦M›šš ¹\gggL˜0„R©„P(DJJŠ^V^TTŌę„5‹Åø’>är9f͚'''£g;···‡ jjjxā*Œ¼¾¾åååœ(Ö8::ā—_~A@@ŹĖĖńć?źŻęį™gžĮ®]»¹\Žķ۷ÐD7ź¢ž¾ßK•^Ō[nėĆG}„Ū·ocŻŗu8žÄŻ»wqųī,BrIDATāÄ ¬_æ …±±±xłå—ѧO‚§n]¶T*EFF6oŽŒĶ›7·Ų|m*++9Ł]=ø±gĻžÜ’§OŸnó8ŽŽŽˆžĆW¤¾Õš.„‡‡s–/CźĢO!śc1›®×DÄķGŲ]=Ū;A=˾”÷ŃZL žžžčÕ«ģķķ°¬å*sÆX,F’žż1bÄ„„„ ±±©©©ČÉɁ‹‹ ƌƒ×^{ ;w†¹¹łSI$999ųꫯpąĄÜ»wĻØĪØ-[¶pÜSŻvĖ=‹U«Vm<ĄpiSѹ9XXXpžƒņü3*œ>}šKēcPæm5qN-"@‰D‚įƇĆŪŪB”EEE8wīŹŹŹ„±cĒā…^@ēĪ°—īöķŪ(//‡··7ʍ‡>ų\ö§ r¹EEEHHHĄžżūQTTdŠĆ.--ÅŲ±cqžüy2™L†µk×ā½÷ŽĄøĒčŃ£¹r///Œ5 óŖņÉ'cq›© •J5¶T€»wļāčŃ£Ąópēååiģn IIIÜ>MwĘՇI“&`­Y³fń>&eee\T€••ʏopæĶįäɓZ 211{O[rzŃ;¢¢‚>śč#  ”PH:t #FŠ?žńZ±bM›6üüüČĢ̌襁TWWGDĢ—R^^N«WƦnŻŗ5kŻz‡*nĢĻĻ–-[F>lö™¬\¹’kļååEŃŃŃOC† !777žµN=ĀV…ŒŒ ^lpp0½żöŪ4ž|=z4YZZ’D"”pmöīŻK +?~<}šĮōŚkÆqż^$­ŹwŠ·o_š:u*͟?ŸĘŒĆŚŁŁµ(šW&“ńBē{ōčAóęĶ£7ŽxƒÜŻŻ¹ė_|ń…FŪÖZ± yyy‘••ÅÄÄŠ[o½Eļ¾ū.õīŻ›/>>^’Õ“Š@”J%effŅ'Ÿ|B$ ÉŽŽžüżż)00ÜŻŻÉŹŹŠ<<44”īܹĆ՟?¾ĪŗB”¾žśk^’ŌYßŃёŽ=Ŗ1§ęĀŻļŻ»G}śōŃ9‡… jm×Z¹yó¦Ž--BCCyQĶm…€ØušR©Dzz:N:…ääddeeqÖ ‰DoooDDD`ųšį Ņŗ-Z^^vļŽ­[·>5; 5………1~üx̘1ĪĪĪ:­1„„„Ųµk._¾Œ‚‚ŌÖÖrŁŅ „øøøfwÖ-//ĒÖ­[qīÜ9<|ų666čŽ½;bbb“Ę<%''ćȑ#øyó&***`ii‰ž={bŹ”)¼lźsō&%%įŌ©SČĪĪF]]ģķķń·æż Ó¦MÓŗ+—Jprr!C“ĪY.—cĻž=8|ų0 var lwsgs_user = "$lwsgs_user"; var lwsgs_auth = "$lwsgs_auth"; var lwsgs_email = "$lwsgs_email"; var lwsgs_html = '\ \ \
\
\ \ \ \ \
\ \
\ \
\
\ \ \ \ \ \ \ '; /*-- this came from -- https://raw.githubusercontent.com/blueimp/JavaScript-MD5/master/js/md5.min.js -- under MIT license */ !function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t),e=(n>>16)+(t>>16)+(r>>16);return e<<16|65535&r}function r(n,t){return n<>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<>>9<<4)+14]=r;var e,i,a,h,d,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e>5]>>>t%32&255);return r}function h(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t>5]|=(255&n.charCodeAt(t/8))<16&&(o=i(o,8*n.length)),r=0;16>r;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(h(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="0123456789abcdef",o="";for(r=0;r>>4&15)+e.charAt(15&t);return o}function v(n){return unescape(encodeURIComponent(n))}function m(n){return d(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this); if (lwsgs_user.substring(0, 1) == "$") { alert("lwsgs.js: lws generic sessions misconfigured and not providing vars"); } function lwsgs_san(s) { if (s.search("<") != -1) return "invalid string"; return s; } function lwsgs_update() { var en_login = 1, en_forgot = 1; if (document.getElementById('password').value.length && document.getElementById('password').value.length < 8) en_login = 0; if (!document.getElementById('username').value || !document.getElementById('password').value) en_login = 0; if (!document.getElementById('username').value || document.getElementById('password').value) en_forgot = 0; document.getElementById('login').disabled = !en_login; document.getElementById('forgot').disabled = !en_forgot; if (lwsgs_user) document.getElementById("curuser").innerHTML = lwsgs_san(lwsgs_user); if (lwsgs_user === "") document.getElementById("dlogin").style.display = "inline"; else document.getElementById("dlogout").style.display = "inline"; } function lwsgs_open_registration() { document.getElementById("dadmin").style.display = "none"; document.getElementById("dlogin").style.display = "none"; document.getElementById("dlogout").style.display = "none"; document.getElementById("dchange").style.display = "none"; document.getElementById("dregister").style.display = "inline"; } function lwsgs_cancel_registration() { document.getElementById("dadmin").style.display = "none"; document.getElementById("dregister").style.display = "none"; document.getElementById("dchange").style.display = "none"; if (lwsgs_user === "") document.getElementById("dlogin").style.display = "inline"; else document.getElementById("dlogout").style.display = "inline"; } function lwsgs_select_change() { document.getElementById("dlogin").style.display = "none"; document.getElementById("dlogout").style.display = "none"; document.getElementById("dregister").style.display = "none"; if (lwsgs_auth & 2) { document.getElementById("dadmin").style.display = "inline"; document.getElementById("dchange").style.display = "none"; } else { document.getElementById("dadmin").style.display = "none"; document.getElementById("dchange").style.display = "inline"; } event.preventDefault() } var lwsgs_user_check = '0'; var lwsgs_email_check = '0'; function lwsgs_rupdate() { var en_register = 1, en_forgot = 0; if (document.getElementById('rpassword').value == document.getElementById('password2').value) { if (document.getElementById('rpassword').value.length) document.getElementById('match').innerHTML = "\u2713"; else document.getElementById('match').innerHTML = ""; document.getElementById('pw2').style = ""; } else { if (document.getElementById('password2').value || document.getElementById('email').value) { // ie, he is filling in "register" path and cares document.getElementById('match').innerHTML = "\u2718 Passwords do not match"; } else document.getElementById('match').innerHTML = "\u2718 Passwords do not match"; en_register = 0; } if (document.getElementById('rpassword').value.length && document.getElementById('rpassword').value.length < 8) { en_register = 0; document.getElementById('rpw1').innerHTML = "Need 8 chars"; } else if (document.getElementById('rpassword').value.length) document.getElementById('rpw1').innerHTML = "\u2713"; else document.getElementById('rpw1').innerHTML = ""; if (!document.getElementById('rpassword').value || !document.getElementById('password2').value || !document.getElementById('rusername').value || !document.getElementById('email').value || lwsgs_email_check === '1'|| lwsgs_user_check === '1') en_register = 0; document.getElementById('register').disabled = !en_register; document.getElementById('rpassword').disabled = lwsgs_user_check === '1'; document.getElementById('password2').disabled = lwsgs_user_check === '1'; document.getElementById('email').disabled = lwsgs_user_check === '1'; if (lwsgs_user_check === '0') { var uc = document.getElementById('uchk'); if (uc) { if (document.getElementById('rusername').value) uc.innerHTML = "\u2713"; else uc.innerHTML = ""; } } else { if (document.getElementById('uchk')) ocument.getElementById('uchk').innerHTML = "\u2718 Already registered"; en_forgot = 1; } if (lwsgs_email_check === '0') { var ec = document.getElementById('echk'); if (ec) { if (document.getElementById('email').value) ec.innerHTML = "\u2713"; else ec.innerHTML = ""; } } else { if (document.getElementById('echk')) document.getElementById('echk').innerHTML = "\u2718 Already registered"; en_forgot = 1; } if (en_forgot) document.getElementById('rforgot').style.display = "inline"; else document.getElementById('rforgot').style.display = "none"; if (lwsgs_user_check === '1') op = '0.5'; else op = '1.0'; document.getElementById('rpassword').style.opacity = op; document.getElementById('password2').style.opacity = op; document.getElementById('email').style.opacity = op; } function lwsgs_cupdate() { var en_change = 1, en_forgot = 1, pwok = 1; if (lwsgs_auth & 8) { document.getElementById('ccurpw').style.display = "none"; document.getElementById('ccurpw_name').style.display = "none"; } else { if (!document.getElementById('ccurpw').value || document.getElementById('ccurpw').value.length < 8) { en_change = 0; pwok = 0; document.getElementById('cuchk').innerHTML = "\u2718"; } else { en_forgot = 0; document.getElementById('cuchk').innerHTML = ""; } document.getElementById('ccurpw').style.display = "inline"; document.getElementById('ccurpw_name').style.display = "inline"; } if (document.getElementById('cpassword').value == document.getElementById('cpassword2').value) { if (document.getElementById('cpassword').value.length) document.getElementById('cmatch').innerHTML = "\u2713"; else document.getElementById('cmatch').innerHTML = ""; document.getElementById('pw2').style = ""; } else { if (document.getElementById('cpassword2').value //|| //document.getElementById('cemail').value ) { // ie, he is filling in "register" path and cares document.getElementById('cmatch').innerHTML = "\u2718 Passwords do not match"; } else document.getElementById('cmatch').innerHTML = "\u2718 Passwords do not match"; en_change = 0; } if (document.getElementById('cpassword').value.length && document.getElementById('cpassword').value.length < 8) { en_change = 0; document.getElementById('cpw1').innerHTML = "Need 8 chars"; } else { var cpw = document.getElementById('cpw1'); if (cpw) { if (document.getElementById('cpassword').value.length) cpw.innerHTML = "\u2713"; else cpw.innerHTML = ""; } } if (!document.getElementById('cpassword').value || !document.getElementById('cpassword2').value || pwok === 0) en_change = 0; if (document.getElementById('showdel').checked) document.getElementById('delete').style.display = "inline"; else document.getElementById('delete').style.display = "none"; document.getElementById('change').disabled = !en_change; document.getElementById('cpassword').disabled = pwok === 0; document.getElementById('cpassword2').disabled = pwok === 0; document.getElementById('showdel').disabled = pwok === 0; document.getElementById('delete').disabled = pwok === 0; //document.getElementById('cemail').disabled = pwok === 0; /* if (lwsgs_auth & 8) { document.getElementById('cemail').style.display = "none"; document.getElementById('cemail_name').style.display = "none"; } else { document.getElementById('cemail').style.display = "inline"; document.getElementById('cemail_name').style.display = "inline"; if (lwsgs_email_check === '0' && document.getElementById('cemail').value != lwsgs_email) { if (document.getElementById('cemail').value) document.getElementById('cechk').innerHTML = "\u2713"; else document.getElementById('cechk').innerHTML = ""; } else { document.getElementById('cechk').innerHTML = "\u2718 Already registered"; en_forgot = 1; } } */ if (lwsgs_auth & 8) en_forgot = 0; if (en_forgot) document.getElementById('cforgot').style.display = "inline"; else document.getElementById('cforgot').style.display = "none"; if (pwok === 0) op = '0.5'; else op = '1.0'; document.getElementById('cpassword').style.opacity = op; document.getElementById('cpassword2').style.opacity = op; // document.getElementById('cemail').style.opacity = op; } function lwsgs_check_user() { var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState === 4 && xmlHttp.status === 200) { lwsgs_user_check = xmlHttp.responseText; lwsgs_rupdate(); } } xmlHttp.open("GET", "lwsgs-check?username="+document.getElementById('rusername').value, true); xmlHttp.send(null); } function lwsgs_check_email(id) { var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState === 4 && xmlHttp.status === 200) { lwsgs_email_check = xmlHttp.responseText; lwsgs_rupdate(); } } xmlHttp.open("GET", "lwsgs-check?email="+document.getElementById(id).value, true); xmlHttp.send(null); } function rupdate_user() { lwsgs_rupdate(); lwsgs_check_user(); } function rupdate_email() { lwsgs_rupdate(); lwsgs_check_email('email'); } function cupdate_email() { lwsgs_cupdate(); lwsgs_check_email('cemail'); } function lwsgs_initial() { document.getElementById('lwsgs').innerHTML = lwsgs_html; if (lwsgs_user) { document.getElementById("curuser").innerHTML = "currently logged in as " + lwsgs_san(lwsgs_user) + "
"; document.getElementById("ccuruser").innerHTML = "Login settings for " + lwsgs_san(lwsgs_user) + "
"; } document.getElementById('username').oninput = lwsgs_update; document.getElementById('username').onchange = lwsgs_update; document.getElementById('password').oninput = lwsgs_update; document.getElementById('password').onchange = lwsgs_update; document.getElementById('doreg').onclick = lwsgs_open_registration; document.getElementById('clink').onclick = lwsgs_select_change; document.getElementById('cancel').onclick =lwsgs_cancel_registration; document.getElementById('cancel2').onclick =lwsgs_cancel_registration; document.getElementById('rpassword').oninput = lwsgs_rupdate; document.getElementById('password2').oninput = lwsgs_rupdate; document.getElementById('rusername').oninput = rupdate_user; document.getElementById('email').oninput = rupdate_email; document.getElementById('ccurpw').oninput = lwsgs_cupdate; document.getElementById('cpassword').oninput = lwsgs_cupdate; document.getElementById('cpassword2').oninput = lwsgs_cupdate; document.getElementById('showdel').onchange = lwsgs_cupdate; if (lwsgs_email) document.getElementById('grav').innerHTML = ""; //if (lwsgs_email) //document.getElementById('cemail').placeholder = lwsgs_email; document.getElementById('cusername').value = lwsgs_user; lwsgs_update(); lwsgs_cupdate(); } window.addEventListener("load", function() { lwsgs_initial(); document.getElementById("nolog").style.display = !!lwsgs_user ? "none" : "inline-block"; document.getElementById("logged").style.display = !lwsgs_user ? "none" : "inline-block"; document.getElementById("msg").onkeyup = mupd; document.getElementById("msg").onchange = mupd; var ws; function mb_format(s) { var r = "", n, wos = 0; for (n = 0; n < s.length; n++) { if (s[n] == ' ') wos = 0; else { wos++; if (wos === 40) { wos = 0; r = r + ' '; } } if (s[n] == '<') { r = r + "<"; continue; } if (s[n] == '\n') { r = r + "
"; continue; } r = r + s[n]; } return r; } function add_div(n, m) { var q = document.getElementById(n); var d = new Date(m.time * 1000); q.innerHTML = "
" + "
" + "" + lwsgs_san(m.username) + "
" + "" + d.toDateString() + "
" + d.toTimeString() + "

" + "IP: " + lwsgs_san(m.ip) + "
" + mb_format(m.content) + "

" + q.innerHTML; } function get_appropriate_ws_url() { var pcol; var u = document.URL; if (u.substring(0, 5) == "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) == "http") u = u.substr(7); } u = u.split('/'); return pcol + u[0] + "/xxx"; } if (lwsgs_user) { if (typeof MozWebSocket != "undefined") ws = new MozWebSocket(get_appropriate_ws_url(), "protocol-lws-messageboard"); else ws = new WebSocket(get_appropriate_ws_url(), "protocol-lws-messageboard"); try { ws.onopen = function() { document.getElementById("debug").textContent = "ws opened"; } ws.onmessage =function got_packet(msg) { add_div("messages", JSON.parse(msg.data)); } ws.onclose = function(){ } } catch(exception) { alert('

Error' + exception); } } function mupd() { document.getElementById("send").disabled = !document.getElementById("msg").value; } }, false); libwebsockets-3.2.1/plugins/generic-sessions/assets/md5.min.js000066400000000000000000000074401357643561300244470ustar00rootroot00000000000000!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t),e=(n>>16)+(t>>16)+(r>>16);return e<<16|65535&r}function r(n,t){return n<>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<>>9<<4)+14]=r;var e,i,a,h,d,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e>5]>>>t%32&255);return r}function h(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t>5]|=(255&n.charCodeAt(t/8))<16&&(o=i(o,8*n.length)),r=0;16>r;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(h(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="0123456789abcdef",o="";for(r=0;r>>4&15)+e.charAt(15&t);return o}function v(n){return unescape(encodeURIComponent(n))}function m(n){return d(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this); //# sourceMappingURL=md5.min.js.maplibwebsockets-3.2.1/plugins/generic-sessions/assets/post-forgot-fail.html000066400000000000000000000001271357643561300267170ustar00rootroot00000000000000 Sorry, something went wrong. Click here to continue. libwebsockets-3.2.1/plugins/generic-sessions/assets/post-forgot-ok.html000066400000000000000000000002331357643561300264130ustar00rootroot00000000000000 This is a one-time password recovery login. Please click here and click your username at the top to reset your password. libwebsockets-3.2.1/plugins/generic-sessions/assets/post-register-fail.html000066400000000000000000000000331357643561300272370ustar00rootroot00000000000000Registration failed, sorry libwebsockets-3.2.1/plugins/generic-sessions/assets/post-register-ok.html000066400000000000000000000012561357643561300267450ustar00rootroot00000000000000
Your registration as is accepted,
you will receive an email shortly with instructions
to verify and enable the account for normal use.

The link is only valid for an hour, after that if it has
not been verified your account will be deleted.
libwebsockets-3.2.1/plugins/generic-sessions/assets/post-verify-fail.html000066400000000000000000000004221357643561300267210ustar00rootroot00000000000000
Sorry, the link was invalid.
libwebsockets-3.2.1/plugins/generic-sessions/assets/post-verify-ok.html000066400000000000000000000007631357643561300264270ustar00rootroot00000000000000
Thanks for signing up, your registration as is verified.

Click here to continue.
libwebsockets-3.2.1/plugins/generic-sessions/assets/seats.jpg000066400000000000000000003576021357643561300244730ustar00rootroot00000000000000’Ų’ąJFIFHH’įÜExifII* ’ š¤¬(1 “2Ąi‡Ō%ˆnsamsungSM-T715CHHGIMP 2.8.162016:06:14 09:34:29‚²"ˆ0220ŗĪ’ā’ ’ź|’bņ 0100  €  ¤¤¤¤ ¤T 2016:05:13 19:25:312016:05:13 19:25:31ćd"d0100  Z@PK08LLIC03AM K08LLIG04SA N¤E¼y"’į3http://ns.adobe.com/xap/1.0/ 3264 2448 samsung SM-T715C Right-top 72 72 Inch T715CZSU2AOJ2 2016:05:13 19:25:31 Centered f/1.9 Normal program Exif Version 2.2 2016:05:13 19:25:31 2016:05:13 19:25:31 2.27 EV (f/2.2) Center-weighted average 2.9 mm 98 bytes undefined data FlashPix Version 1.0 sRGB 3264 2448 Auto exposure Auto white balance 31 Night scene K08LLIC03AM K08LLIG04SA N 25, 0, 5 E 121, 34, 31 ’ŪC!#,J0,)),[AD6Jk^qoi^hfv…Ŗv~”€fh”Ź–”°µæĄæsŽŃąĻ¹ŽŖ»æ·’ŪC!!,',W00W·zhz··················································’Ā €’Ä’Ä’Ś šŹ)Ņ^‰›%`ę QuåśVSĄy“5!ØöĒ®»P‡’2S8@ ĘāK+4HAJ*:Yź3±Äń,!N‰„‘š„! €(@«¹i¦”‹œ¤U²÷bS6yŽmsQ›£”’²(Zź˜$v°`‹’E"A@²…€ T²”n^ÖVr €(€ŅūåöYSŒæ2ĪtE;Ē®½ƒ1ÄĄ°yԜŒ€±ŅŹ‚¢@R€ZŁŖ¦£Š{£™ä\ !’PX@€ Ęå.”e9Ų[/Y}ĢӝžR5ĶFl•9Y›!€Īē8‡{!‚.Šd!Ŗ RĮFW&K …)`B§ŗ_I£šsƟd Ņ4v9Ū©K[:O9Ȅ2 a,©d »ź{­ĖēĒT¤8.¤2 @PBˆ €FåhC0–X-,»—ŽĪSĖo%(Ț—eNvbČ@ S½rˆzlēT̼„ˆB ` @4Q-—fF³³ENkĦŒš:–4ž¹}09ÖSž§˜„M"膄ŁIX:' Õ q²€)øQ©«g;V–RÓ78@(ZjP!­)š‰©tK3fS (t³„–ĶĘ™ØĀä×&AA(°Ø@ ,½óÆtm9[ąÖ3[M£g:A»—Ł œģķ©É:j"9.Ž’õ6S5éN“!ę £®m!š–B@ @ É @( !@cŽy×ŗ|źę ¢šŅrŌEZ%Yf¦„be*ҬLŁeŁ‹ ,É)Õ7¬ŚŌ°ęj8* EęB” “@T FĽ3ÆNwŃ6œuŸ&š;Ī ‹P:Å%dD—¼½É\Óvy«ŠœfŒ˜–/Ŗ!²,ļ@!ē8˜ FUrf„™ “hÉ JB‚(!¹zOQók˜£gkVr²Ą-!@*źZŁ•¦lŹYi›˜’ €§¤ēr®Ę2ŠH§Eą d€€X*€ 5o:ė5Š©ŅĻ&ńē¹čt8/0³FAcbZ¾ˆ§;8ŁŹŗ¤š¬„Śō6–ε CĻLV >–\ååX¬Łš@)³& B”¤( eō§sgˬPØŁ‹QWG+€P®  T.Alȅfä)č8¤=vyĶÕ9Ō±yh„ ¢)”MõséŅRĀ›K¬ųwŒ's Ą…5/H/XčbĻ.¦  ™‚—Ń);ŗ¦Ī'3%Cśn8[ʹٚ H hĄ¤ Rž˜ö9ę ( `˜° E “-LŁ ’‚P G[9NėęNµ’µcRó^`„U‚„4Sérė£Iē\›:YĒxńŁHd„  Ōŗ)¹{BĻ&¦J „õF N–dɃˆJ‘ƹļ—Ŗ<–ó²T  ) `@:K¤člę`Įβ@ Š™°€   @(€6jĢJp;AAM–¤ UE€T4Sčņė“•dcµšÖ>n§2RĖ£f„čuO%œh@ Š÷G3‰Šģu³TŽBėĪ FĪT  HõK꬙(%Č¶Q›l€@@ Š(*ƒ¹“šz+Aå)@6¼b’ UEb @€!@)£×Ė®k¤t³¢kYó' …!„čn6½xźA%čj=ÖĶ;Ækž”8x„!šņ€R —”̈”((°RKұ@ƒ±Ķ2z+Ģhčp)HRĖ€J€Ń© ØJSÓϬl†’Ł“Żx¬ÉHBAeŃ£“½'—L ņöŠCŖŗ§j4`§:ņ )@ (ČB@7Ø€°)(!J…¤Nēk‰č8˜‰, Ø@ (¢ĄŖH*€Rƒ×ĻØŃ”Ø’Ī‰ę®hÉ„–š:'*ęé/Ŗ Š†ćµžŗŃęNKŌär<†@… 4}ē P €@)“… ōt¦ŒšóDµøĀŠ Y  (°T … ūÖ¬‰y/2œk…ƒ”LČ(,µHHSrčõÄÆ:m{,ō¤<‹ź9œOĢ) € €(P HPB¬((ōdčBėĶ‚š0“„^Ē äŠ @ ׍älĪvdŔ€€ Ŗ*j”CVu¹ŅóĪ’äŁčNF(j;®“µz&—'œšœHR)  €@ PR%… PŠŃÅ:˜)³‰JBš\4[Gˆ€@(¢TP@;gQ¤i:ĪĒ+9€@@—d6l¶p! g}gRfožu“¬oS™ SRÄŃō¬Ł•óœq° Šd€  €…"‚”€$‹PXA¤”@ˆ™6s:Ö#ѕB†×`‚ Q € @(ōK‰“P±ŽĻ=s=ią³lu‹^{*4SgCgžĪh”ŅēŖt—œß,ßdrŌój%Ų{«ŗe|ъ†#™š„@)’ ĄP)€‚ R—•‚™;W€¦UyŠ‚ Q÷ž\t„(6{égxYĀĄ ,mjr؀Q£FŽĘlóźuÖsåÜCÓ\³Æ^Mē‘xĖ%‚!čÆQ³Ģs10f²M™2B€H€ €RF(!AH w·‚h„;b€Ą[š€@é5f·.ćDH{.}Ļƙg+ EB%]E)£Ōv<śĻ>˜–rĘęn“źzńKčÖH^rć6-ˆn½gS‰Čåäf” (Ń €,RPR E(( (©#Gjó 6yŹ*䠆m!D  yŻ^ٽn}·6¾aē°€…D»Š£Õ›sg—§xN @«b¬¢Š“K„ēq› @‚€S+(XѤģyČ UŠK‘@ P ¤×5«;„ R”Zx&±g+˜X€U§„4q) z]Ÿ0ę}(óÆBzłĢ‰T@€VīœćR@„T°dŠ“K„ÅĪ.P R@;ƒŠä ¦AU@“ä@P©ōĶm7gbÉ£@²üå'+0U”iķJr<„4lölł’ö0™®Éč6æ?:ŹóÖ:œe€• l :YÜįp !P UJ %€ (”jźYg;Ī €%   )¤§Sg3’Y@ (Ā@(ōĖÖĮŌ2n©Nrų¬Į %¢…,iiÖOus<ē˜†IŲŅńŽ6sN§Uf°¹øŹ‚J)«62å0“²ˆ `‰EZ¶*ņ×8€ €Ø ±¤))W ČTl, @ @(÷Ė»9”Ńƒ'`dņœˆP€ XŅīMžŖźœ:Óiµ8 Ķ&¢ZŹ™č”įX"*‚,Zšg“²ˆ `‰EZØŅóøĶČ B ¢Ø$ @,P-%UQ€€ *Ą>”ŗ³™ĢŃĢŹr<†A@ZŠhѳŅzR‚0°‡œÕ›©ŅµLטćdHP“ˆ°„%L¢†H€“²ˆ `UEZ%ŅęĢ^` ¢ØP@,)¤ % “Q¤@( @=²õ°pb«gœó(  =¢6t)LžEÉĄĢŅ[gCkŚj¢¹tęJEI`BŹRDX4s PU- ² %E–…ē®d€€ØŖ @ €D¤!B‰BŹ–@  ŅŚō$9’2u)¹E  lŁ©u-SGņ™:Mt—fŒ®L™³$B  @V·/=s—0²”‘­Č¢ĖH,€…@Ŗ*£:Ä@(€€ØŖ@  (…*ˆ* T ` P @ŚŌŃÜÄd†Ź°@)U@¤BŅķčĮ*@‰•4¦²Dw5,ēyµIŠŃĢ€€QD“‚Ą@Ŗ‰.@ŌPR­ąœČP …!A ¢Ø€ € BÄ(”BĄ (X€€P4hDd§É¢Š€D¤Õ–Y ¶UB$C=¬o$@]Ķē”)I,¦P(KH(RŅ)",ÜSP-½NČ!@€P( Š DP ¢¤J ]– ¦øŃ qØhŌhål •Yd^™Ö—6@ŗš«.r„‰Ń®'H¹¹ŌÕ9ėžR… $²˜ @‚*Ņ”ŃčL®Ź`óœĮB’"Č ĒH©V/+q`“„¹( –€D )J ¶Ä( ¤ś'ā±JBœ«%7NK‚P(¤JBĮK¹F.Hwz„į©„ŗ£,’&ŁčbtK˜”³Uqq›©S’ B€T }6l²ö:§%Śb^“Ī`PK:GH[Ée(².`P @¢ (P H )śÖXęr9¬$d‡:…4tˆ× @ * Rīj&nHu-–ŌHVŖˆ‘"iž¢oÕ2Ī„ŃeĪ\ĖIQ!¤ÅB@ (4hŃė:J)¤äÖ §#N`JhŃ„‡%–}$óKŖąs” `!@ĄĀ@ QeP …@ (€ (P=ģź©£I`¾uņœČ tÆØĖ5K¹©fY RÕ”%–ZÜ ’ĪŅno•±H,.I ŁY@-Ž«č;§Zēä“är\‘2@ ”ŃķLUŒéź®e<ēy«G–RՌːPP .I ”€(€(!HPP@@H( (萦Қ6w9Æ„É t7/€(„\1Tŗ–˜¹P%ŠEE³@D$³¤Y¬Ś"––D–D€ÕœĄ!@F„õĶdŹJę˜*€ 4zÓ©ƒ) ‘‚=hó/žPI,T, € EP@¢P B €€‚ @jB€Nē#™ hŌÖL€P"Uu5›˜„-ZiME– 'EŹĄ¢$@E ƒµž`@P ¹{Mą‰›2”(€:/„!̇C¢C9”čm=ę_€Ā–Ō,€”@°P"¢€A @”H£$)£sR\ِ ¤…-,¶²Ķ2ƒKeŖEΌµ-"JIŃ5»„4•žŒŅ’ß:䕔/Iw7™² - @čw0SiŲÉČٳ½œ„š.L€PA,!@@-ĄP Ą(DP  ˆ– B”é5¼ī'dѕ–YS:GUĆQ%Ķ2ø Ao.É7X!M%f„0t® š„ōΓЉ›" )jÄĄBŽÉŌŃ»5—ĪhŁSП=KĀ©@$²% *€Y @ ( $  € SRõĪįĖYÉ@ (6eE—DLŁ”§IMs (”$SŃ!so5ÉSI¤ˆ\ÖH•H ŗĪ·4%™¹ĖZ(‰,ˆ=¬2Ā0  @’Č”( @  ‰AH@ … €P€HRP€P€Z‚((!ŲŌ3²sÓJE*€-;˜SR՗9!BŁH ØÉ”R*i7f‚ö³+Ųīœcē[ĶR˹«4%™¹!Q¦Ź"K"R˜ (,Ż%™BKP @•dŲ3YP€P‚€ "Ō!Hˆ@ e!’b›®fĘ£q‹xŚ•@±„Ņr³ ԓ͐ «e”@€­Ł¤źw*lѳ™Ųäy×Ķ P hK¹«4%™`PVĶ‘%€”§Ic ‰›˜’ĀP!;&ĀĄ«@@(€Ŗ ”€) P( člŃĄČŠZĄ)c®fŽÜ ( )ز!jŲY’‚­!tNõźOIO86 ęx#šńXP’²Ł­Ķ d`‚©ŖŲÉ\± Ņu—•r‘œÜĖ¢€@Né…ĀĀØXŠŠJP@źlśG€ņ Xé ē¤:†[8kXP€ n4bĢ «eµIŽĻrw!€dٲ)Ī<Ė• ,RĘę¬Ų–K‚X-hŁbD—0 €¤Ņt–N•sdL\ːE!@ˆ„ŃB@(PR :š=gŹ@ o3¤+5Ī·aåuŹŠ•DAe„nbŁjŖ3 ×¹= £&M›2r9‘³Ģ`›ĢŌR”„’‹qožčB@²čÓ:Jrj.Ž÷=ėŖ 9Ē%/#$ P %€"­—¬Ü%™ø©¢ES”aY ZÜŽ¦„IfXĶ€©Ö[7³1˜‹R(E!¤ @¤(    (@ŌRä0¼Ī’XŃ@)*]y­ŠP,»±“µĶ®+ŗ Ą)Ģ‚ɲ5šŹXAfŗĶŗ9ø©ŠĢ©DL¤°^“¦¦„IfnrČ*t—Sq²fȘ¹ 4€D@P ( (R!H „,}4ŁĪ$p›myī² ( ¤čĪČskˆB€  P$é&Œ5‹¼Y”$JfŗĶ—79øŹhŁ%ŪyhB&nbĄWsz›¤IdLÜ*"Ķ›̳›ˆ'R(Ą ‚€€PŠDŸJŗ©9G‹.fA*.-ČPV’¦J[P"Iß9ŅEĀ˼®.bRk¬Ų‰ĻXˆ)WSU±’ē(…UÜé¹”Y7‹'ItŚn™LŁ›’ (–D›2¢ (@R(4;IŁ:į.@E¶(XY nQ‹`UJž™˜f \]āȄҗ¤Ł¬³ĻXˆ[5¶Ä"K˜,w7¹°LŁ,t·&ÄIfR\ŠB€€)¤( Š#¼$É P†VŲ )¤†Ķ”ÉW Pi=Kä›-!›˜€Jž™˜…ŹŅ:r3rM%)™w7ZŹs×8€µ¹ŗ±"K˜‚D[7¹ŗ6DÅĢf¬n4՛,IdLŲAH€€@(€B€ €  #¤ž©0óĶae¤”  4h‰ŠŃ’œ×Š¤Ļ@č¼›ĆvQ›œ\Bw™č”/55ɼ\“I© ]ĶŁqX×2BK¹ŗ°‰.b°ˆŅķt¶o¢D¶hŹyµfĖYY bJˆ@A@¤)@…€ (wĢė$4Eäf²E €(JR›^PNŅY!WuÉ®n–ZC¹v™či …ŃÉ× ›šQĶw5f±YÖ:³Č…#Z›­Dˆ²%JR’½)Ń$¢Nՙ|& ;Mjo YĢ«`²$@ @€ ‚(!@ ( Ō ”¦€(#²TźC¢š(4Rœ—Ļu¤ė%HP±yŗjh¤ĶĪ.b “ķ'd‹“+†šÖ.Iў‡)w5©¬V53¢œJ©¾‹Žē&’ƒŖJŁĢŁ„ĀŲV%Ł‚šUÜ՚ŖIQ"fĄ" Pˆ@B‚@ @€@K Ń B€J…“±ŲĀEђ%ćnTm=Tɂ,\ŗYŖ£79¹Ė N³=JS+™¬]į™fäč™,ަ¹Öu3Šąhģ{-óK»;&Īd—&‹gškvw2›6y2š9Ŗ55¦‘IQ"f"(€((X€("”²PPR°!A£©Jd€…!„_=øQN³:N‡2“y(!›Œ\€;3Ņ6 .V7…Ć5ž©“S{šēXÖ4Ķ;×CFœi•Äh;Y…äzOzlĀč6P K.ŚJ°B™` " P@PB…$€(FČ(uLƒ&Ą6dÉHSٕżŌXč›gŠyĮW+™Ų¤¹ēr@:§Y2RØ­qo ó155©¾uĪćW>ŚźCg‘}Q,I®J=,EœV„šĖé„Öz,óĖĢčZ”ń/œ ė'Pu”ęk¢u³Œ»;3gŖĪǐõ#Ľ¬ś'Ģ—Ī ¤źƒ+']4LÜęÄPi³P°,o*H*‚ŠB€Y€él°Rę€YA)T ›­³ĮI‚‚ђ‚@тŅlä¢"ĄH @ABȀŁ5Ń2`Ōę¾Z¦9’©ŚIPķ[Ž ŚĪǚ^‰£ĘŗOulóź`ńKÄA “4«'JŻ…e%™d“ŻsĪQŬ™XD€  ‚@K" „²Ä,ŹPe¤Z žĖŸh°·…)!A„Ø@R'sĪ“„H `(,ˆöMTĮMŒØ hȍžė<ŅŌōš¬›<ńČ÷×¢‘ę\ש<ņł•gSŒ)(@²m4øoS„%‘˜…‚ĖV%% €…-"¬”«VÄPJ²$(”P Ŗs-D,€-S1ŗĮ -R2)3@e!@P ZD–S×5É:•ĄW¤ö'”ć͇k!ē^§¢Ļ<¼×˜ Üąd…”"ØRB€tµ¤ébŌ"K2‚€ʔXLDhV€–D­T (—0 P(Té\"Pźœ–( @ d€„E@ ¢Y é5,É@¢µÉŠāR+1•¢„’Š A@ “¤"ØčMŠB$² ¶KQˆ°BʃqŖ@A™@*élRäUiŽĻ4ÕL”¤„)£$…".’–”€hŁĢ¤!KY (   ) P H©€œŌ“Ō Ō5-šÓH“"K2€ YŃkšęZE„B‘HÕn”€ •” «VĮbUKlPTŻ•yŹHėŖBŌV@!³&ĢŅS"Ah%‘P@ @U ”aHRu)Ęź-5.“åŌµ­MX¢¢D\ä×>‹žgø§Ļšņ®J •‘CFŖŁD¢€Ȃ­[` .@Ź*m:[Ā]$«1j@¬”… )Na! ‘P€€€%RJ @¬LķĖTÜŗL®,€²ō ›„5•Ļ[=(2q\¦ˆhźx&¹(šJ%€4j­”* ˆ!,ˆ*JP , ĖJ”ŁÖ¼Š2SEkF Z‡tą“‡@`Č A*,AE%‘PŖP¤( ˆ Š=`ѝŠŌ“„Ø€uOJ›DĮÕsŌĄŖwLŖ9œ$×   ŌŃ"€±ŗÕ” D!,ˆ*‹- °@Ø –,£G¢Ļ< jĶå²Pu8€hÉŠēd© A*Õ%€@-",€PŖ€hģyČ @(" B€S¬”…^V–Ė»4r]3OJf“š9ž³‚łĻRp8/dźn†ć¹ó×É.BŠ#5;œÄhé\ę²ée¤D „² €@]J% Øō&k”»²Ę*Āŗœ‰®rŠBP°!I` ­RĘe€XH * ¤U”B‚äɕ.ÄD é&Ą9ŻUźž”ÅAU§[)éLœĻQÄī`ąs\$6u†jej7fØ%„!,ˆ•D«eT@)eõ§­žY”BX)  iZ˜ŠQ D“ ŖE dÜt%¼š€X” ɲeæBĪ£zS‚ÓG%Ź`„=©Ģ2v! ń”„„;œ‰-•«T ȀA@)¶RːåŃSg%ČP¤€  ˆiZŹ,B„@łœī³@ŠB„Ščsk T‘ dé[^Kħ„9­­'sĪ]X!•Äš;YOIŃ9ŪÄľc€)$JSp4EÖ’ŠJˆ"ȀJR)Ešˆ„„!R(@!@ HU¤,‰,ķ”®v€!A-%@pµD#*@‘4z“zK“šņ!JtN :§ZŅw2SμJ”čz”ø‚Бބ4fZ±ŅĖA* ‰K"4DŃ ©tŌ² –Ø$ Ā€@P€ ZVØĢ°@®V¹¬ ,  `€¢­T+,©P ŸJĢG™yÆdōYĮzåW'Sv}$āq0Sg3©ŠńņØ²Ā€‚D4ʎsXt²ŠJ"DȀJĻC™‚‹4Yr¦Ø"@…•«£1 ŁS5ĪŠU ` ¢­P"Kd†AOMq—'¢ē±ć]™;¦O:“”ōOa“Čy—3UR@ XIčSg(­³T„H‘² „ , *¦„„–¬ °@ V"A` @:ęh–ó¶PĄ –­TfY”ŃÖĪŅqXKN©ÖtXq O@98®N©ē\ĄP@ØJH‹$ ŃI,oStTH‘² „ ‹A¶UDš „@RQ €„h‘)N™”¦mēhT°Qe.„Q˜ vģĵ!Oe˜_4`t¬öž%ąC č`ē))*@Ø«)%‘±¦°²jŗXTBe² P ()«,°šš ‰ ° UJؑ®fŠKy™“P A,%«VĄQ%QXnϦž9x©=Ör^q³‰Ź”%-@bPP V¬”fY CFČ„®–ZJŒfȀ A@ [,”©i”€ĄR€ (Z ‘%€ ķ™H¹ØfŠ-€-"A``µlŃEž¤‘H€Pe`¤BR%ĀȀ-[5H’Č„XMŃŁxĪ–j‚P‰™² (  Ur¤²Õ K4˜‚…Ŗ X€Vf Ūkš„P HXX(ŌŃVgDōIa,BؔR (Q-[5A,Ė$Q$hčSšÕ³vj‚ˆH™² -č›!•„9­\€Y@ˆŠ) ,ˆ€ZXF`‹|€ēh hØ X¦–METd,U‚T b… -,ÕP3sbHSD4jZÜm¢D¹€ˆŖĄ”)@*Ā€R’¬ (€€€µIX€S¦eeS šP“%:%2TFķē.[TfPH *€)R‚)VĖZĶĢdŠˆŠl„–µKTD–fĢ  P)TK@P‚ČĢJE€“ˆ°@ķ”BŹQTŖˆM&ˆT¢\®[VY(”P P jŁ¢Ó,ęĀ‚”Ņ¢µ²ÕȀDÅČ Ŗ)TK4ah( ³,P-Q’Ą€¬¢eaT“hˆ)¤Š) ¦Öå’@“U€%X€(±J©Ŗ„&nbšQ£Ś¾)Ń- Q1s ŲP*‘Q³™T,Ė1€ B’$°@ėERRŠ“ M4Aµ¹f  €ˆ«Z²”’̲$¦Ž‹Ł|Óe²Š Q3s’€¶ 6™!H©ŹZP „²1( Š€ ((-PAXJ@:EjͲRŠ“‰ V$@;'cĪ 7Y#  P“M& „ X«U5AY`©źŠ×šj“,Š„BFW9R‚Ń,źĻ0¹4ŗ\@ ( ̳.J€h @ @Pµ@$I`D ĖRƒ+µh…DJ™6lYu‚2 @ŠU "(D‰ŌKT ÜÄōĶ5T Yh%\ņX “@ Œķ=ĘRóT@XP ±  3s,€‚ @“-!2   KS@¤‹•-Z"™²%P 4z –[‚ @-Š %‘"@ˆ-RŁh3s R–„š •·Ō “@P‰YōŚē*¬H€³,Ė  €ж³(°@  (©A@!–‹JØ«,ˆ€4h±…·X"B ­"Ņ% Š %‘"€QKeŖ3r"PĖC"µ[E%D!3r"U@•6¼å * „ØŖL¤ ”,Ė2䠀€ “…“-€¬³,€(P@, š!H@„j *$() ”ŃŻyµÄˆ!@­P*€ BJĖ0 ) DU)l”dBZTÓ(Ėzm-%DˆEĶL4 ,ØP±‚”Ҭ%ĢB€ŠJŒĖ -P¶ØĢD”@ ²‚hUYEZØ-3s“!@ˆE"§s”Ķ®-DˆJ€ *Ā€,Ź ¤ µlDZšK ³AQ"q£ @ˆ€@„,T“jĉ›”@‰.@ @ ‚ŠPQ`JŒĮa  K( €QB*–­VY–E‹R ģž“É5–2H²Õˆ *€%‘"(, “(&¤-hµFY–hŹ€Q`ˆBd,Z¢ÅZ°ŒęĄŖ#2Ą€Q@P”BČX Ø !EŹ*ÕVYƒFHS”ÉjŠB ¢‚ĖTDP h!@ĶĢH€V€ ‚Š B€•,”‹„ējP°@¢…¢Dž©•ę–…EZ¢&n@‚$° hP((–@ (@ ²‚Õ°–@¤Q* @,Õ)-–e˜Š@¤ØAAÓÕfŒDhø— „åd"ŠXD!*e`*”P¶*”˜¹  $EH¤(‚Š€ "(€*€ AePJZØVYU HR @Ŗ ,“ ”e†sd (!@€ Š“«bÖ͐  -€”f%"@U…–؉›@ØMW8)@‚ŠUR°@P (…R.ŒĮAt ‘ «ŖZ“ P%L$ ‚ŠQ@ .”U„ĶȈE ,%‘H*”¢…²‚fĀ“  P   … D” )(Č6 [UR**Õ@Ŗ€Ø)( TQ@»P…dĶ‘-l%‘AB” U²‚K"€(€“›0C“+ˆR@"Š€   P («HP ŖZ% D•A‰(eŠ.–€’YŠĄdHČ)AE[($²€ Pe  D§”<ź)RC¬b²± „!”PJ¢ ض%Pµh–€2ŠY@(P)L€5P„ h[Fc P DµI,€ b€¢ ÉS”ŗąJyTQ²”äATŃH`€¤"‡c&Ž%  U€“P @@@ Õ°Z@’K hZtĀ‚RE*–ˆdC S )J `KP %”h;YĄŁcT-,›­™94` z0( ģÄerK€  ‚€EUP HD@-[ )‰( °eJ Ą2„@*‚ж–Č„-(PD¢•@$I@SFe”5XP‚”L.@!BRl¢ĪRó (P”*Š@‘¶ “Ŗ”P"* ŠUŖ ŠP RŌ BŠØ¢¢$É¢„“-) @¢Z @R¤”ŠŚt<“U ¤ĢT)H@lźœĪ`€Õ €`T ”@( `  Re “j„ Q”(l Øz,ķ6yšęE‘!AR(”AhZ‚%#6͜ ”ж($¢&ˆ¶*€ M¶:ęPE (S”˜ē@¦’X€@`X@Ŗ@@²€) B EPZ¶*€% [-* ŃźĮrJ‰R@”PZ€“ˆ ’P@)jĄ ¶-!, $(= ŽĻ$×eå.H5gгēMfRZ),ATģš9/  ¢˜R  IB  (Ah*ÕK@–)lė^©č®rł&€ŗ—RĖ! `@„ *‚Š„ŒŖÅ¬Ä“YjĄ Y@-l €µ=—šó … 6håØŒĄ†ź4”€Č€€  … Ŗ „K@¤3r D¦Ž‹‰D*Ą¤Uܲ¢D”‰P P-P fX=' ņœYjˆ Ą-² W0Q“ĀĄ-vL¬9ÄŖ( t®`€4EˆM3`$Ø PP“-[@Ķ„“€ R.¢©I”ŖŖ"K!B“(ØT PZ°€ eŖ [“B”¢ )M/0)Ż9.!PB…,j¶™\ JŌ„R”†ˆ@ fČ@*€@ PP ERÕ°*€eĢAB€ „”µI- J‚   Ā€„҈UŖ% %éfW³g%ˆÕläb,B€J *ŃĢ……H hŹŌ…2£Ł‹2€*€€R( iVŖi d@ `؀ %„X YR€H€$ Z¢Q-*Š”)“½Ļ&²j4u³Ė4@ Šl¦+$š!²ÉA@„)Įp@l† @ K "Ņ€  Z­d*•”@@P D¦Ø$DUœåā*ĘH-@@R( £MS  ²Š¢”ģĻ ¤)’Š2@ VM@ė\Œ€RŃR˜€€ Pd€€ ˆ JZ,€ *–…¤ H{¬óKĶ«,IDˆ!ATYŖ Aa ¬÷§Īš ±#*¤Č  5bT(,¢­tYSĻ(9€C”“UˆTÖA j²d 4Pm8( ‰@C&L€@ŠÜ„ •HP(-*€!@;$^J[@Ķ„ˆ")T²Š!DˆT§€DXhĄPØ­jYd(Қ5d—!) WtĀņŽ÷<ō3ēj9†Œ D *EČ(AH @ŠHÜ *”ę€ ¤@ERŠ@€ h÷Yą–)l ¤Ķ– „³T –„ÕzO° (€@[5©e€ .Š@CIš²Ä)4BWB¦:މÉ@£ ’+A¦Œ™ E€ Ŗ!kG0 HPe§­<«’زIQI`Ą„TÕR€ ‘=VrŽ+A @[.¦–@Srˆ;Üö<ĖĪ!³% CfIH• H   ƒ*  "( €Ü¢ÖA‚( % =r—$QeJ$I` °*ŠÕš(‚$°ƒF,H @ ²īhK)č8K@)«c  … =6yTGRB§CQ)OByH(@ ĶD¤Ø(B€ (@  ©h%€D– ­š( "DKR l»š¤;ĶcŝsP T=Œł̤*‰Įi€! 4™3@ ؄€”@K@«T `@ ”EšŖZ@D–K€P@P.ę·(é^ŪĻĢךP@7BāԊ+F@6”¦ ¬)£¤Ģ ‚PH’ę €) @Ah €ZKB¬ •SU@Ķ„° €PXP dQ¹½Ė¢ž½cĖ5Č‚†ŹN&Ī*¤!¢”p…Ł£”($;\$PP ŅĄ … ŖP@PJ€ˆ@)TĶU$²Ā@ @AØ•H  …Fę÷.…m9, S%”¤ŃčOŌ”A S&ȑ`р SG0 @@€” Ŗ€   R a)P ZµR–€’Ā@’ĀB‚)b‚U2 …Fę·5Aš$IU6uH¾u“ѓFA@ŚUɂ‚‘Pd€P*€(@(P€¤ R,@ @= ŚøĶpš ‘%‚$°„E@@Ušé5ADĶČ” ƒf@;X`u9u0¹ @ ƒ$" KV‘%€DŖ ¢€° EŖĢ… ,ŠU@‘%$²  ±I@ šė6 I@e%Ģ:¦   Ł³&Ž$(ZdØiP@)” (.–Ź3s, *€-%„€UØUŖŠPZ%‘"K" XPŠ!Ušé5V’†S7 @4d€(Q³&B Ķ…@K„²‰fQ`$  K@E"K”@"Ø”l P ŠH’‰›’@‚‚5Y (Tjk¤Ų©(e3r(!@³©ē( ¤t œĄ€˜°ˆUjŹ!.e€€*€ĖT ›  ¶ UŖ€ @ (&l$fY £¹ē!H k:ė7 EDő@P@ $ €  jjʳ,Ø*€YjՈ¤Id@(  Š U-€ J Š"D–D—"R@ ›ÜŠd3s” @ !@)¢€(*fµ(Ģ”@”@e«U )#2Ȑ € U@B‹5„DĶ‘-‘2@€…Ī÷4 ÜĈ) !B€”E—S@K"D@ØTŗTĀfĀ@‚€B€  "Ø €Kfč$"K™a!H (Tnos@@‰›˜€€ …$)TYu4 ؑ„@*€@ lU²€•\ˆ …€U€čs i©ŖŠ ‰.bK €Fó½ĶE˜¹ˆ@ ˆ*]5bP$@ ؀…  )tØ€Q3r@€ @(ĘŅÕŌŲ ‰,ŒĖ ¤”Q©¾“@ @˜³,Ø@ Ø­YV@€ ² ¤((P b®„($(!,„¹ B‚@ (( E(!¢(µ5T‚$²$¹€€B€…Tjo¤ŠDP‰›3r… €R@ -,ÕR@€²    Ė©j€ %‘™` 2 @@$( P#fęk@[5¦€ˆ ,ÅÉ!HF³®“`ABē), @…²Õ€ ,ˆ«WS@EFb,€B …Œ€CF@ ĄR@«©²ˆ‚$³7$… @Q¬ė¤ŲP³,Ė€€RÕ0 €T (ÓVP„£2Ȕ„…!H( -*¦ŖˆTfY(@Q©®™ŲDT ,Ė2Č“$Z€ HQZ@—0 € „“.„Ŗ–Fe”Ų0@B¤  P”AJ )”— @ !£ Uk®vˆ"fē6D@P @UER€ Y(E”UŌŠ€„²2°@ˆ@¤ P°€QPQ¦ŗg`@B';……  E@€½%†B€–D €@ ŠSU@B\ĘT4`R ¢’Ŗ@ BŁ®™ÕQ T3q‹ØŖ€ ź"€P–D € ³ ,®„- eYN‡dD("’” @ B‚R€… eé7e€"„1q›(ŖZD P € Ł@( d@ EkR€ ,$°h €@RN&@ P¶^“v L\ęä@³U@$"@D( ‚Š RXH€@Ŗ55„…ˆ²$¹„0@(ŃÜ󐀀ŃL‚-—¤Ż‰@Ä°(²Ö¬%™B( Š¢‚Y€@ -*źh‘$e•@() B()€Ŗ^“tÄ°زźh&lˆE  Š¢‚XH€ YF¦“±h HKœŲH‚H@AA€*„ÜÕZzÄ@ ¢Ė©¢HK"K@…ERŠA`ˆ „…ÜÕP@"K"K‘P@ €¤¤ eŅ„„P k[.¦‹@ %ĪQ` Yj€@"* (P@²Š»š(€%™¹ˆ€( ƒŌyŒ”€Ŗ+TAEʱU²źjØ( ‰›™`T%Ņ„ $A* (‹š­HYY)’€!A( ¤ŖŠŠ¤) B\ÄlŗšŖ "fÉr@P©t©TA,ˆ )L€Ą«WsQ@$‰,Ė2Ą )¶*”@%‘Tŗš«THKœ²  *4Ń@$A(*‚ S ¢([5¦€ %™¹ˆ@(4`Ŗ,„ d@ ¢ĖfŖŠ ē(°@Ŗ,ÕIQ ¤-„nØ %FeĢ)@ز€YØ²Ł­(- "K#2Ą زÕD @€ØŖ]Ķ’ĢÜÄ  B ¢ŹAsUĖfŖŠ¢$³,ĖP¢ĖTQ  € F•5¦„)’£2Ȁ)…€ ¢ŹAs( jźRŠ“&lŒĖ ¢ŹZ@Q  ØAjźj؀ %‘%̦Œ€… ¢ŹsŖERźRŠ“€$LŁPH ”-Z@€D€  (”E]Ķ€"K3rH „ (!A , °U% ­XŖ A„Ķ‘• PЁŖ  BŹŌŽ”’Č’ęƒFH@ !B‹(d *Št^rŠ“(¤ ,ŹDX@K@`ˆØB€*īj¬!H€–fä)H l EB*Wd3-j€HK"DXH!T“ ؀*¤!H”@jkMT€•–e‘( ( (…R(²€YØ«TidJEhPHK"DX(PAhŠˆØ( t°$²3,€(!P)(²”€%‘6` e«*ŖPH’¢DXHŖJ(( ¢@*€P!@EP (¢Z PB‚DĶ̹€@2h†J€(²”€%„ U«e D jŠBXH‘P@(@Q؅²‚ŠUP H%̹‰ €H‹-X%„P  µu(Q BÕ°RAdH(  Ё*€”U@@ŖI`ĶÉ hźp€H4d€‹-X",jō—Yfl K"@P  @Y*€ZU”`(€ RD–B\’рP B @€ ,µ` ęP YE^’ä) ؙB…²Ø$…  @XH*€”UT UD–D–@£Č@) *ĀĖT@P‹œ””«¹JEDŹ,-Z*€h"¢,ŖÅP¤ –€*&n@$)R ²*Õ"K@±WSED–D–Š ‘( UP ² Ź ”U@VŖ²$E(¤((²Õ™°š2  K¹øP@fę$°Z@Š‚‚ˆTP °SP"€” @@KH$@  )  @)((²ÕRY,$QAfŗĶd("fęXB€‚‚ €€@Ń@ E 54 Y@HP @"‰((²Õ"©%’Čckź_4Ų„LÜĖ ŖP R@H‚ŖZ‚Į M° h!HŖh"KZB‚\Ą  ,µ@Ą•.aAŚ;Młę­D‰›™`$R)Ø(€@$*„€ °S@€ @"(U¤Ŗ&lSF@…  (K„²‰ddgY¬4”,‰2Ā @  “…  P” ,$ M"Ø" @RK˜€”h–‚XHUé4š’̦.%„€PŠ@ $T¢€%‚ S@ °P( –T.`@Ti B‰Āj5eĢ^x¹U-…!@€"€$  “ Į S@–@P€% –D€@Ti ƒ©ĪorÕY‹Žw*„“@, *€–€¤DT@4 €ŌŠ °€ B€(@ €”QZ ,µu5A,ēq‹€P*„UH"!ØPK@ŌŠ°€$ $Pt9 @Ti  ¶]KV&.q®p €¤*eAX@@KB€° -PA`  ) €@€¢QZ ,µu(ÅĒ=`  @Ø h €  )@X"ŖŠ – €€(  @ §  Ej© ²—FSž¹€T% €”*€–…Ad@ØEP"€ ¦Œ‚(P@¢ Ej©VnP–€  @ T‚Č€ŖT@P 2` B…j€%ĢBZ(Q@EQT‚YØŖK  € BH eŖ ‚Č€T%  H “D ,(PЈ  (  ¶j©$@B¢Ø€XH  “ ˆØ€€”@,…€P@¶Z DQB*€(@%‘ŖK@RDT@( ²€Ą‚R€A QeŖ$°B„“€X"   ¢‚ "(@K@"€R… eŖ€$°D€¤B„“€‚ "  H)P€–€ °" hĮBŁj€ ,P”-  ȀØ € % @€€„Ņ€‰,P”-Ā@(PĄ%€€€„ŅĀ€DĄB€ ”@€ Ā@… ( @€¤(BŁAAĄA¤… Z@A,PP²€ @¤T@ (Ō°,RP%  Y €l@€Ņ   (K@‚ĄF (P”P €Ad@…–€ @ HB ”( €"€!H )@Ø h –*€ h@ @ B‘"@P@P(!B% Ø E –P@Ø €Ą" BZVĄ‰ `@P”P  `!A *–Ą…!@A H)H€(@l“ !"€”P@ `@­•@ €QåP “¦@€( l“ d ,” @,@SAH  ER EŅĀQAVĖ@A %Fe€–€@,DµaH)RP@  €QAVĖAH Hfę" A @,‚M¤) $R€ AVĖ@@&nbŠP@,DSAHR X$HHPU…Ō  HfĀ@  ‚Ą",µ@€QP¤("€ˆ( -,µh@&l ‚Ā@*„(”°@*€ZĖJHK"@,ØZ"(€P¤“²ŅØ„² P‚Į*€P-€ °@  (h–€K"*Ę|- ‚Ā@(   –XˆP  “ AUPhĄ ) @@ *" @ ‚Š-JB  @@P€(:2  –€ZR€(=”€‚Į( D  ‹@U@hŁĢu4pĄ" ‚€P ,@*Ŗ)Ō갅B”@„2PB ˆ €(@P¤Š P B‚L.@S×gŠh{<é€ @U)P @€@”hђ‚) AŠ)Ń2°€Dę° ›<¤@R€  IE¦Œ¬@@Z€P3a @ B€”@„¦ŒP D A Ń ’Č€ B€¤±V›4qĒ%ˆ R@(  ĶĢ‹" Č@ Uš)!POJyŚČŅE€B‘(«¤ŹĄ ¤ ’pK (ČP€E (]@R…E F@€ ,ѐSŗf^kĀ@HP¤čFŽ©åP*A$(cšäFA @S²qj!,€„) €Pv=å\…ŅdČh"ŠR ØE€PB‚(@`¢”Ł¢M™2¤ŠH )S’‚BŖ)H@N‡@,RP:œ@T UِPz:’)(‚™E "ˆT(Śu<ŹŚrP@( @HP d@P C¼zkČĮ*ĄS©ĮiH…  $RŠvNK@€ @ E‚…ŃЧµ9ƚ^fA@   !`(%"¤( ”h d€"PP ‹H«³Ńg%äXĄ)@   А ‚ˆ°@ €B`  )AÉ@SŖrX€Uhѓ D “‚($Ł €  Ŗar@T („4`€ –€  ›\ *čČC S S±³Ź  €Ʌę*€Š£e;`!h‚ؐ¤!H¤Ŗ ¤h @¤ €( V”¤4`@R  ”ČˆP †r¼) hČ4`€€hŁČ€ €”B*ŠR€Ł“ ŁĶ@€@4 ؅"Š@ … R  z¬åT…  H (Q@PB€@R QH ‘hJ@¢€( "(6er(  @@”@²„€!@ Š ¤Ń£’…P€(EŅ…€@‘:œ‚Ą¬()TRˆh ()  (2€("( TiaP°(™  «Ju8Ø* @ )ŁLKP ‚( (Q`¢”Šy”@D BŠi9‚”i„)€€@‚©ˆA (EQV €… (R”Ą Z…Ŗ ¤ @  D ¬(D€ V•D”hŃ©ƒ%2-@ UDUEH(€ (²Ņ؀QAX€@” "@Q@ @€ U€”€ **él+ u8…%PŽÉēP)£ () H4R"*€i/dēX €¶ZU°%@JB…€@Õ9)@(= Įb’” @€€R@ 3@QeŅ€@U‚„  €(@ ‚Ä¢¤ ¤J@ eč²%@P@  P€wN ”A H P“ę“ @@H -—rō9Ö@… @0P € ŅbP P% E—rՄ² Z€‚ €¤ Øš€n½Ž‚( B„Ü֌‹ "@¤ P €@HH PATB€€ZĢ  P©w-X,„*@Ŗ ęP@@PB‚P «@ €€H XD(@€P©w5H,€!H(€ŌĮ€ č`Č6˜¶D B€ (US¢`Ā€@  e©Ōā± A‚ *4Ö„‚ČDD)P!H”@ˆ©mĢ `@U€”hL€ J *4Ö„ČDP ( P (а€( -(*ĮiL $ANǜBMjQ,@(4`€$¤ J"€ QH Ø Ŗ"€@Ŗ,Ö儰… ©Ń2¼ĄŒ€4d €@€¤  @@Ŗ@Ps$([.¦„° Š@)PhĄ( €jØ(lŗšĮ ‚ Č @Ó‚Ā€P ( RPB€@JE  Ėf©, DF@…"@B‚U–  …!@¬€@”l¶h,"B€ˆ "   €*’*Ä )  U.–Ė,"A HP   € j²H (€Pźq€  …FšJ°@)Ō—Ŗ @UQ@ ,S P‚$ Y­K,€ ( @¤”P   €€€ˆ@ EšŌ¤” P AHPˆŌ  @€E—SBX( ( ”RPB…  €“€€ BŁu4%€D@@DH@ •@P (€¤BŁu4E@(¬ć  @³ -—S[ ŠŹ¤PR @PPŠR@ˆA €-—RՖ@D!HPR"Š@ XP@Š(h…@P©t @(@*€(Pˆ€AKŠ@ h f¤‚Œ€*]($DH   P hµ˜„ŠD €IHP… ‚*+Tˆ RQIF«0  ( D¤B€Š@€P `Ą B‹-ؔ"R-@P¬jĪp@ €ˆ @(*Ó(@Ł €(²€€¬!@(–2U"ŠŚr”°( (@ZH( , @Ŗ$) A”E!²‹!喑-H¤@@(7 ē Uˆ€(²€Œ„€ @…(¤*@A؝䅒AL€@@ €Jf(EP$P@ ATĢ€ @ Ŗ * P€ ( €@P–€PU) P@@@ @P€ZHP *€ˆ €PR’‚ Ń€P µ R…”ajA€ (…@>Š|õČ#UR…f¢‘ €P±P€ !@‚A€   U@R)( (!@EHRH (HA ’QR@ )PMČ@P) (RHPA­(€ B“„hį  )@  (R  J"€€€P( @…š0¦Žp @ (Š «3b€  UD)  ŃN`¤AL€@ "ž«<«˜€D@(RH (@ $‚€ PQH€@PPPP@ ”@Uˆ B€   @P)”@ …„@PXŻr€ B€Ń@€@P Š*R@¤€€”AŠJ‚@Ņ:W PP€P(€… BP€P€€zO9¤h„ €€ „R(@@ A B€€@ €€    (  PS €€)P RPS !@ @€ @€@PH@P((  P€P@)L€(€S@ĄP(€@)P @€€€  @š0 €   @P €XŠ€P@@ š0 AŠēP  P€„2B€P(@  ( @(P€  P€@@PP@R‚( (€ @ ()P 4` P)€ )§¤ņØ P@P ¤B€R™ P@@P@ €€€@P @   @€@…B€@€’Ä. !01@Pp`"A2€B #3’Śø¼£ĢĘÉkaŖ‚8BaMŠķ/ą“PD®©“įT:@Ń?EeĶŽ³Ł„lņāŠˆę ßŗ{`š54¬ĀłłS:sebˆG³V ćX.„   a:¢&t‚„OŸ< ėgNŅ;c`—9BŽÓMJ”JpDkżhr'Xåfč5HD„’ä²RÓĀ O:ÅĻeśA†Ēɀ±ø»“„‹ˆ».TŖPˆ„-•(łb¢ĻGXåk ŗŖĶe¤÷'Ėę²ć=ˆDŁ”GĘÓ@'S9±i³µJ•*t1 ukZ±‘Œ(Ō.PMŠį³µŽņ{¢Å€°ķąQpĄyΉ삋ė!Ä ”ń(ˆ°D#`ˆį ¶6j‡#ÖĒCt³AUC³•=Ć:·ƒś÷ģNøNķĻlŻ€#ćZR„Tm…œ/7 / ,ÓršSŽō*®ĪÉd‰Šmvéz!Ø ¼P[„ßÉD’.ż] ōģ”EĻlފPéc¤#Óʀ†Š°6:AY,”©S`P6*QTĢĆmmu…ęņb”FŠ{°„{#Ū„¦ SŽĪė߄Oo*{Ÿń·FŹé Ž7 4ƅ‚wø±Fłp6Į 4.ˆ¹N’4Qrr(ö'¶…NŠ€„\×źÆčš‰Ņ¼|'!w¶Ą¢yB£ĘX£ŗÅ©Āōś½Č»Ć_*łJQś‹S­LoTī‡O(JĢ©R‚‰ėĪ,ńĘoG `”Kī>\éSõv§Y‰ŻBvĢŅzxŁS  ä^ŸĶ*nńÄ,ó‘³P¶)ķ:]ā‡ÖZ‡ńMU4„ļ*qbĀÄę©Sp@ŻĢEŠ,īś }“ülЦ7]bV%`V ń¢8åd²G…«%Š:@¦›9Ä é&ĪG¼nĘ£Į¦~Éž(#ft=t 1†e!HRČŻŚOn k“ō 4 ˆ”[‹£lS‚w BDŌmњZ6Nń9¬Ök%šĶf²DöpŽ€”F†” 7”Ób&ŅŖ"=Ōė6Į?¦“¤łE·c%;±#H±`Gm2„5ۓ͉N(”Qō·é5?®“¤ų£Ø Ŗ54IwāÓ©”8p‹8h‹v ”Tą¦ķ„@–6õņŽˆŅŌŠœŁā^uŹ”xBpP€D\I"™Nn Ÿu9_uQZ…Żc÷šæH#ońņ²l/¦lšŸŁ0,Ql\٦ׂŖ āÓņ,Öh!4Ų§Xżü#Ń īž\ii‚ *§^ŅJr67˜Yq“ QFēļĮ:ß¤ŌżGÉ %1Čn«P¢Ų’¢0ƒÖH!ĘQŠl~ĄģOQ±°čī¾bTč;&9T »vN‚œ»adp8~$Ųń„ŅŠ˜Y¬–R©¹ČTn%Žƒśušåü…Jp¢Ģ)Ķęk”8χ?Vk c+Š|£xüOTyø-„į+„¤äöäH…MŪ:Ķ@§n ęGZX ļ~®×Ā&Qłs¢S܉ęaƒ ¢Ō[(ˆ“ŖN_$,ĮF°R³GšVK5(żžV^T  ‰@ܧi°)XŹu)_ _B į•š/‰9šāP¦Qb>TżR|ȱ“¢…܏<ŗ „ å*VK5ņ/‘fž‚!¬ `D_>Xś6P(éw0M@5bÕbœÕ‘iuI)øci 4j"å>ĕ(GL§sŹÉf¾Eņ/•|©ĪŹą(¶K%’•&¹¢)ĶsOEņ’×½¦ŸßeJ•’ÉfƒŠzxG@SąaŽÜA2³+2‹»,U1 ŖÄDJŌ‰©RQvM Z‹PSj9ØV„ĒŌ®©čYRƒÓūć¬qĀ…ø‚= 7h[©Rša$XWÅAÄ åœ©iMō‰ 9ČŃƒ€(ņŽĶ¬ÉxŚSæņsŁ ą‚”ēlŅŅ> S„R§ŅgŠ4ĶŚ¤ė„F©“ QėČ;Ós—Å ¢s²E¢ "ĄĀĶ»gO –K%”,„… ź7€!l¹0+Ä;UÄ>¶C%’ł uYl©ōąŠ{YāR„4'S! dÆśėāƒ‚üSźždš??qż)R¦Īģbā¾7&ѕ’\!@#D!O Œ„ēAudjJ&~<8GčAsQē<Ų92škwä¬x6”^ŲĶ9ÓŹ<8īż”½ZŻŖ¶øDX(¹ī Ŗt²M¤ŠÅK‚Č­‰~=šMDO–i‚*ģēN”sa”Ż„(ÖÖYE`±“¬ČAą© 6£U”>«JsĘ”*|@D^r@`Õń5)Ō\ˆ#HŃ 4;²„oNžKŌ0E:¦+ēó”jJĶ)ķĘØš"Ń÷ģ׏¾T+'9®NŽģ|”fVH<„ēeŁB…ĆŌóp%R`ƒI|E|gT£Ī ›ÜB²²ćøÅGŪ©&›—„īŗOc=ĄBÄńŽ ģ8ī%JŸ¶µJEȟ *9p9Ē”ŪyŅyćD #T(M]CkĒ_«B ƀxp}ÓxE‘ ö0”Eΐ- Øä퀛@ŃG4,T&¶V?‘dŁ€z!¦óŲB… k:¹h“(Ս†Ō(øÕ ƒ 4Ź +N- ¼¶ąSŌmüS;0ž ”ņR„O0ShŲ'tÓ£p§±ĄÜégac` ¢’Ęš¾-°M¤Sį1’¶’ž.(<±9ß"²’ī­Ż9dœąöś‘­N§ˆ“Ü “cp ÆÅ8Ļ`,Z‡M!Dh7.ŁBkQhĮ®™M‰Į<‡)- |–*L…1ĀŹ1k¢'ē)䕃¦VZ„J›t±“ “mŽĄ Q“p bČ„@rl1Ė·“¬”‹JȆ䄦0éD”Ö‰’‘ü}D"żé()EČźĻńż #Qæ]M¢ęķfĒńAįq3µ0Qrx3ŗŻ4OāSbŻĖĄ¶^s·É=.q7bl-Žˆš…įFŁSv.{ĮA[a #q ¦²V !²4šs!IA…ū¹ĄL ^ÜVP2Dd„µš‰Ż8śm…IFÓleS`NlX(Į<Xjēē~ˆčkrXBiż SČ*CƒD§ø¬rY43&H V0>¤–T ż{ć÷Šy!D ˆQ(Ņj)ShN5;kG;tž“4IĀd,侚¦Ąœ!Ģ‚ŅŅÕĆ’Ķlēø9 ü8¢AM0œó%ÄłēūP‚#D €DZQtˆ@ T(Żą\‰X9Be<“šZ˜ę&Ņ_&°A!®{Ƃ•=»[‘ĆćGt$'~Kņj”ųYBł$H ä@µ:” J•‘S`QócģĄ©Ó,”Ł­.Q»§Ó…Ń1ȂærՃ\ŖSÅ1ų¦88Tnō¤''Q•łÓ,~J£ĄEŹPā:Ā…ŅÓ”®ÄšĮf…V£X!XĖž‹‰Ņ #äĶ€”[u 5$ˆL8‡;" ‰(µ®†‹²YuS’«Kfø± ĆŸ)®¹Š“"n×Bž¬&˜O2|üp„ŃĮ?hnč¶5bS6OdĮäōHž.8½¤åŖ›ĮOé˜pu)9Š›ņNxi{äĪ”ŪtNv^naLŽ6Š~Ź‹cqųŃl(P”BM0KēS*'4¦<Ŗ¬Ū¢¦čkžT HYęœĢlŹhłF!ŽÄ—4‚Į< ķõ¾W¾Ģ*ed eŒ ŁCŖ„·j©O`TJmRÕÆ*„9l–Ś›X6”ęā›mJK¢fēųЦJČńĘ(ņķiryŪ†8ŪS˜Z>·L'lJĄŠqLŖZS$N¦Ūu%6¢©HcMжA›`…\S€Øˆ-LÜĪ~aķÅ2®ļ z,ųĆŖĢ8ź*23j5.Såč?ēdėJlK¢tIę˜U+f>·ˆ%®ˆ½i›“~FŒ§Ó,M@€¤9|rķŖ3ņ‚Ó ]ų¹ĪŇj‰ģÄęP®}\”©_+£˜} ~+©#PŁ%#†5ÖņEg¶IĻą #75|‰ķÄä©Ō F¢.L« ćVE…Ļ•*VKę0Oj-DcdÕÅN¶SĻ–~Ć*yCˆE䬊52CÜŌL÷bÓŲĻ1ģGfŃ%Ķ,“ŃetŃ1sŅ'\)ŠއŽķĶrÄł žéą $h˜ŠDi˜ CŠQcŚEĘ(±ŚdČ\rńįˆŠÓ łk .Ó ĶÅ«rŗ! ųĖŪ¦[“¼ŲŗŁmö°ˆߍm0œfĀŹ›ĒĘ„fœITÜ1u0‹wųIµˆ&¶Gb±MaRJ›š„HŃ;x÷dSN$ļyæQiŪī“Ī!B„G0ŅJ¦Ł. ĮX'QŚR¾IR D&’'3lBž#å„X)™s]Lа˜üWG‘ ƒ7ėčĄly†–½øJu2€ƒøL¹ r(_‰!dTƒGóq¤AĀvEÅ48ø0śmLĮŖØ‡r² ų ²R„H ;”)Ct‘}©\VĢNy>dø¹OGÕ lƛēd}Ś]ēbŠ£¶¦sśūNž i"śK䤾F/‘…KT…*{)DĻ®#é®v^£Ÿ©c·Ś>”lMƒǹ›F[Ą×ĄåK–‘ōŚLYš”4'68GWuž6Ņ.l'ŅĄz ‘3ē’-(š±Š^!— ]}£V2šu2”h(™ölhsqŌ]’-GsÅÕ‘zOƒV3öt""ģ]³ß†:öŃp4É|gĀĘęHħ4·ŠbƒŹń“é )Į=ūČ#ŗƒĀŻÉj#Ą§3pĻ$&Īqw ‚\¾G#ęi`‰¦ō#*ˆ4»€l\%„š‹Ÿšt'ĄŃŃ:”8  .n'ļ J4œ(S ć¤V°!į1=Ä'¼@Ė8r0ÖŹØĢ’ Ü#ĘJź£A3÷®ˆŌqņT@/®ż”¢Ÿi†ÖDĻ 2čēuįч˜śā-:%a ā$ń‰ą•ń’ŅdbOg„GS³Y’sq( Yd5=łsęčS·AŚ/‘ĒCD¢#Ö°ˆ‹™6¤Ü‹Œ”ÓæB\0įżāż'uįkp™ O]Dżœˆš&¬gć6ĆLńAŌ:`O`Üč5°ó.óńÓꎳ€ÕĀ/¶:(Ó ^u’"Gņu@ źdK£/·Ó§™Ø ÷ģU‘ę»ą 'Q€ć•©æ©09ŠŚ8„j™Ņzż#怒j5Œ&{ö4½Ļnā¤"‹HŃ~GbÅU­mŚģx`G<Ųķē§ĒĄk<'`ŖTĢųȳRŌ÷_h±ėp„Ÿ;A»| ų€%|.Ó7ėĀĒ43*Ži愚ĶĻŽ™±©ł5Ģ-ąÅ'‚ @¹ķübQ¾ QõøL?…Z™j 'mGC]‰œœī€Įq.6“ˆå‹Ē#蹟yFŠ[ƒź!7óuZX aT~zI1ĘĖńāiGÕ‘Ł @&M£mB.’ēĀ TėsqÕ)õa3Ł)¼Æä*a1hŪI3  G˜ś"‘`%Ō“žŲņ•ĢZu“”ƒ"v'\·ćøyo¤…3ōF?÷dķS S‘+!‡${ˆ#ŹN’#PNź©ģGt:Ō§ŒXB=x‰õ8‹[‡d;¹ŸjõKī艟ģÄyxŪ×X Gū¾Ž {xšĄzx6 ī,ų’Љ3ļ@OwžZīŚmÉÕ@g¬„yĄOwÓŻĢaz;k?SJä[¬Ÿ©ƒ’ļMŸ&>ą]ųż,Ÿw“ėę²[ķB#Ģ[“Ż™Ēowɏüue·ž4æ_īxūČ*³qīBI䟿X’ß‹ŻóŪ6€Iėā@AŸ‰÷._Y‘ķSæ`×¹q±…Ü­,ųøN[ėdpƒy„Lžvø·mÄś’Ļķ™ä„į¶!bœÜF°`rJ;š»P'č”r…•(’x)µ„1ĪķX`T“•*!~ĒÕń¦£Įo‚¤ZtOeN¦ÕŌéę\Ę1xŸu™»Ÿ±øv)ĘOs‡ćŲ@ś¹gįõčQ¤†ü\‘ŚÉŽõ¬v¢ņ[õyśą¦Jm ˆhY"{'æ.ō\+ć Sh&YI:¼¬Ź™÷H„*§Us¬\Ob¢#Ž=·LdēŒNŗoĄńD&»ķϊÄǟų܋cķĄĮ&Ob6/vNīÄG Ö ¬Ü<ųŖą‹§ė®d7źEÄśtøćŚõDbyéÓÉThaąq¾sKGØ[nXCyFÉĒ#Ļ$'8øųŠbSŽ]źiŪĒķ‰šsņö+~x 'cŹDz„vr0ń“ĀDzV£Śy€nś4ĻØĮ„ć—™&}h9ÕŻQ3ōR°nl aT¤6yą÷$ä܋ö>‘'Ht`sGÆn_-ölJ;r ½‰śļ©<0Ļ–ĖoL“ #$#æŽRŲ˜šŠ8Ų25Ļöˆ NŸqµĄ<-v$™=£@(÷mv%ĘOkN$śövž¹`>?"9 cŻōĪ/{²wf>®Ņā}DHöŁ;vtź`_:?ÕØŽŽ±œke¾FQ3ėŁś`?ķšF>=Mō©Ūԃź '6=®Œ÷ϱŹś0ż+õö†‰.}&ęĒÖĮ„LśP™ä„[»@›1Į¦»ĆŻß·łsl;&¦ŅķžOÅKļ z¢µŠŠ┳5<Žō¬ĘXģ Ź*3×–ąŽ¼ÆĒÆ+±yt –ąŹ86–±ÓŲ\1‚*;ā°Xa9Ć:ˆzĄĢ= c›NHŲ€4f¦§T` éŚBćčB€ōćҊŽN0 žœaӌ(ĒPmӌ/†ShŠ~2F€Š ń„rm@,£0Ą9:¢ćˆ+Ň(Ą97 óSS^U9¼Zs‡&į¾āӔ^97 šššœS¢D^9-_ĘӔQ“ruĀųZr‹‡%žn-7Ē%¶-9EÓR× ĆR9©V1ž:(V‹NQĢq Qi¼¹CxnŠ›ĶĮŗ(Zo.AŌWxŌT|<$Ą|6Tc4Ōč Ōę ©©äŚÓSdŌŌŌó5.YÆ*ņÆ-Ąš‰Ė8<Ą<Ä<Ą<Ä<ŲwAl; š pšČw eązRÜŅkąxĻ»ńQö‰ZĶMMMOŃ9‚¢jz·+OńØß,AšxØĒ ˜ā*>aüSSéˆ÷Ŗ-reŽh<@wœCŻ æˆxxĄ<Ą<uAŒ: šš Ō€x€Ā\ć xxxAŅĢ}iē^’‹¾Ņļ%Ń’ļ%ŽK¼—y.ł’J>®GóķńT_’Ä p  ĄŠ`€°ą’Ś?ōĶEw^üGZr.Óxń€¼Fśt(“‘8ƒī7{ųD8ų¬*-ƒKˆä¢‹”Öqž’’æį’Ä+!1p 0@P`€"AQa 2°q’Ś?č¢żģĻķ™Źē³Iż(~ŻŹČ“œa1C›ętv?kĪ{ w»ą8>p/Ž4Ös\q¦‡%ĪØąŹµ%ØPP:“ę;Ņ6%FfZāĶBކo¾b ݽ•“œĻ: -™ēM•“ĘcšĆ©­ėé|wz_”Āœį?Å ~j3Q^„ ŚNYM@ ÓõWĢå‘tĮYCŠEó]QI}#L ī‰Q˜&ƒT²>e IŹ3æ4²….¢…MŃQ¢ĖįN/žE<T"WŻ>éåÕ*2Ō/(£”_JŹ„(i|o>µyjżŅ4^Ÿ}÷Ös²Z‘A¢Tqņ­HĒqK/UŖ„µJ ōóx_©#®&“H^­XW„¹dķ@čź[Tx]‘gžŸgźGĆm™EŖŌVo¢:oĖå‚:ĻNN›oE”ØØu%Rź-Č?ʆē”JŽŖČÆ/‰F“ᬔ ·éŗ”5J-iÓ±ƒaś®8q¹į޾"‰E”Ņ9ōb«)Ń*9§Ž±A¤ 1†ÆR՛Š3«•z] ߙÅ%zlšu;¾ Ō^tMEa×ŗ*XƅézG15(ģŒ7*P³éū¤i-@¦°üŠ»āy¬"õ:ÆXD©sIQ•ʉ”Ó Ź4|± T=%¶¦’Ōœ“F‰e ±uuum åø1’¶ˆP„čY_EōJ†į£!Ķ—§cŌՅu ÓBŁ|{é\«źŒŗt–zĪd½c˜&ĖÓŠ×W­”~Ō‹¾oi~v7J&lŹ3{·r2£œN5*yĢ)Ę”‘ķrÆ®¶_å•eoĄóŸ¦„Nf'dbYč!Ww~ TnyØĪo’~÷į ²ļ“2›kĮ =8ʶ©Ż”ćh…'K««ØćŲrQ“šåžk8źüčų”Ć/„õµęŪbQĄ:īŌ—_ézy}ø˜elŠ_ Ėó)^_ ¼š§zs9}ĮµęįNžI4¾­ oŽ{cł„ʐ6ēv6™ŻÓy4ʌ^Ź9lbü„rą›Ė}z”āckԜ[¬G <å^o jZ’·g ‡1Ÿ-Źüą÷~bźpį蔲vÜßy¼­Ä3¶7gŁ(ķJóP>Y’́øhQ}™ąIõ"Ō¶Äo °>x9Õ÷–#pź1…żJŹ<<ų!¶6~ōFW(ļ=ļĘōćOæéÓŌ£łsžŸŻ9üŽ’2 ;ćf÷żöfkꚣ¾?3c¦ē³įßĖæxĒ8ć¬ŕŽpŸźō5ßņŽ_–ĢÓ·³åłĻŃŗ’;/āöȱĀĒ Žü£¢v/Ėoՙ›‘śøw¾ėåóxłCIā¼Ü é7RŸ~D=¶eFæ.5.ü+erź]4®T5eóĄCbXīXzŻ^[ƒ(ńŽxģ›ž“œ:8`§€(r¦œE:žwĻæ)¤>10ę}ŪO`y-ƒp±ß÷ØŻ<0»·Īū3æĢžŻß9ē Mŗ„ę7mĄ›ĆńłźhŪ(š®xĖ |DzÓՒ£œøÜ#·³žŠ¹Ć¾'ųž.±ūę;’œß*9ɇų”ćņ|2›ŁÓÉ‰ż×aų{©Ÿś,?ńšr+y’’Ä*! 10@APQ`paq€‘ ”±’Ś?!Ū] Ŗh@ 1ßņ,z ,Ń^‚“­Ė²Yœ&XxQŚV‹¢ćķˆj‘čr†œ"ŪŗCCŁ jć©é>­Ā7•G«Źqƒ OåŠ&,¦X„OÄd¹z B`Ąƒi¶ŗkh:‡‚ˆ2ńÖŚ# ŗ¾Üźƒ)‹ˆö$8œ”8Ī}CźČ:Œ£MÕ+MjEˆj+šŌ©R Ša½EŃR“Atu&QŲōV\#O)1F J‰×©^ØŠŃć”Ī8¦[„ŽÆlŹ©g-˜C»ĘĒÓŁ/ń*“Zʂ€Ų„z1C)ä!h°%F mŒUi»Aø»z™©lT\»„¹{Ä4j=cEzZÜjļ!B7‹zŗÅv%hŗ%Ā-¦ŪéF`×c½ĆAĘńĢMbÄ`•L¬,E$b¢F0b² AŅ„ŖzG«[*5ė—©¢ĖĢÆAdk°6T4:Jކ„唦ī=”•©PŽóõF®™‡@™r„hĮ jĮzšTμõ S„¹"gĒ2®c¢h Ās*™FVĘXÓ¢uz&įwWcNPd!Ä䜾€møl½n;ŽĆQ£*'`.:ø#ĪŽ—Ŗ5å¤AäŒUō8jnDʧW„¤•Ž,“"éząĻ$!*Ɍ½^ Īü#²ØźõMKčSy y.ĪO@ö'heŗ4Yq{v.a9ĀēC‰R„h%M’>˜Š6—eJ5œķ£e$“e•ékč"ź^·ЄŠŌ"åĘUĘĆØƒ ¦čõHnܾÅfQƒ¢gč „š‘㲹ޛ—o²!‰aĢ4YiuØ#ŲGÓHPĆōź^N3ž£JcŠ"ĢZ,Ph2ŗT­Ī”Uu¬C¦#ÓĢUŠ ¦~”ńŁ;oµŽƒCq‰5f—³”Yõf•R¦,Pa¤Ź%ś=Š(q9ģ½üį„M%ŠhGJ”jŖGAzä"öasŹ%HpĀ™f?Rg=0e’AĪ<ķ8«4¹LB7„-X*]^‰VžI[ÓĶ é8Ņ!ŲēGNŖ–÷aqŅ„JÜŖ(F\5}+ė ē¦9Šć”ĄŚEė&¦V‚šAyŲōF@ĀXD§¢nfē™ PN"½ah."0c*z;‹¼øŖø¾ŠŗXĒ$y‚Ųü|n/Ģaŗ =BŠNtyĻ!8Ō¼tTģ®`3ā–œN1ē½3+eō xŃė°1 ÅDŌ;{œ½uA¼CąĮń/.CbfÖ“'D…uŸEÓ .ę Ż‘āsH19÷ˆX0÷’§UW9Œ:1nšó“›J>f;5U)—QŽ„āYŅ_Jµ% Ē–irō’ˆ®”38f²÷¢ń±›fӜY„]Ē ž=M¢å„å “:øĆeĖź[9ŹJŌM$Ć9čhCV1āTę!ćI>É]ē8ķ•0#bĄŚN0Š„TEæ\BńjpēNC‰Ļ«q+@1GR+4Xéc¤ŗšøņ†•{ĆGč×°mPNP#1A°;żQ­¤p\Æ3Bfī JŽh¬J4©U"Km3e&‹ƒ¹`¼Ģ‹š˜KŠŁ£õŖŅ„m5/0ēI„ŽŃ‹źĀÕR„hŗ ĢUÜB‘Ż„”Ē  hp˘(§–:Ščś?ū„VÓŅń:M {£GčÜ×DćO)ĖN#ĻI}_öŠ@•Ŗ˜tÅ =Sa Ų—£•P<¢LKˆ_E„‘Ų©–“ĘžŠĒŗ!~KėVŹźŽ‡1éĞ`˜ī>Ā”¦¦eŗ„ä̇Ŗ †– Š\%ŽXęśLxčń؝Ūõ ß] ß[Ng-­4šTj ąŠ`Ę*®Z£-—ę •0•ŌŒy†`ŠwD~ŒåŽjƬ9Ņk+÷†…ė–åó9 =2*ƒr¦IVSeŇͅš%Ė‹Pė{®“V”Õ; éš–žĢź5¾ˆĮmœ ¶s‚ēĖŽ*YC[*eu¢„Ā ESƊœK=FQpsl¶čšœĒø7Ō $Ā:+~ŻÖ¶Ü½oA­—Ņ%ŅK³–•^čjįĖJ¦Ź:ceĻND: ā5“«™IB+ę/9{ÆI®š‚hKŠFænlā,¹{ŖWEčˆ™Ź†&×D¼\PY0Ž’˜³ ƒ—HŽ‚e9GM&—bÜ^Q†ITĖ­k‹ŗ„kŹņō/B¢{ké_Ič ½HÜ1»Hķ}e@3ŹK©ĒJ• ”Lئ)ϧW*˜Xφ8ĢTʶփˆlį ˜Œ1.)qg`Y~ģōĶŠģeŲ¹}1Š E¹Ėi¹õ¼”ÄK(ŲĒHc¬8! b\¹J& .eØqĒ™–QšsGĪu¹E‚QéDńō5Ė{!‚Ƀ/gd:;6^Œ ‘[Q/Ŗ$̊z/Wˆ?šœĢi¹ kK2嚼©Vv\]Õ Eŗ=8śµŃó1ÜR×Ģ~ČŃV˃”ĢZ ĒPBU)DV„·2Ć0dŽ"E™qhÖ#1 œ3ŠĒy J©io2¦‡ÓU\ó`OĆNS—² ʜA³E .–“4øō‰Z\Źņi®Ė˜Ą™e\ĢŲŽ\p¬a^Ē”rįY} ¶HĒźfĢ4Æ“ĶUzѣƃŌ@Å øb24-ų–é…raO,Ę9*v_@¤†øß[Hń«÷‘~文N9CGŲ‚aāe̲WKH˜Ēū‰y€äұ@L°\iõ©Rŗ#¢~d"Ż.ŒĒćÕ!ę& G%1S9™˜īaHPJ" tHŪy„ā<ś2?‡ 8čĀ i}RÓ$Œa¢B8t²Q0Œ±xĒ;+xt_LžS2#/EÖ¹råĖ—øUčTģ4zxōĪĄ•*T-ļÖ%wµ~­ā.ĻŸ|+a ]†Žņ=õŁhÓ¦:˜5ž½;Ń£Ō(K—ēg‰ĖQ™Xƒ­]S·Q•°č+EķéŃhˆ‰wS啍žV*Tei{Ž[ ź‘Žęę ^ƒŃц‡AΠDz“"Q.TTq­ |©ž[Ėé¹rō2?ā<ØæąˆJ¼EӖŖŸPŃßrś*7ŗVŽ—ė ā āj&‰ńy€ęāt/aźŹ–„38ˆČ<‘#”Z'ó·×ß¹5–ühÕq#© ʈō+aĖE[Ž£pŸ6'1)ˆ’;(LŠ€r‹‹–Šzbą\£Ä/1‚0b˜ń/ß2ŽQUŌ#’ه’ģo§–«‰o<÷)ĘÅūŽņšŲ‘q,†Š6#ĻPœō“‹“ŲÅŚ¬ŗ|§'ō‰yˆĖģ)aļX`†]̘%ģRŽ`²9vĢ“F"&ńK38œCUćs÷ė— d~G&ĆGŖDčœō :;ÖŚ]$ńĒž—8±«Ų”Įā_ę+AV—!Ģcó*qҼ±Ž#āĘÓžkĪ÷š+³a°#Tj0<Ē$J—½Q6ŹLJ19h½K«×e*濉NR‰›Ä±˜”qcƒ\ĖeUœK»q¢ŅĒž“ų1G¢į©1±«Ģ„AńpcčB6ؚV^aĢw”ėŽ©¶—å œ\ń'ų1<£~[‚Ö Ł%Ō~:ł‚Xf{“Um꿃T4/HaZšT ĢŲ„ō%Ōp‹©„K—/Je‡?+¹ĢK’“܄(©'ÜkJŹ!*‰°„MIz1}\¹ząœ™¤Ś¹‚”%Ņ`(aŠØ5vķźlG˜½ĒbŠ.'@Ž4I`źš^'-ÆFå̳(8#VŠ©‡Éę4Į<ÄSĮ•Ķˆ7˜WJ8Ž¢.źéZ=±+Ė”\F>“”Wō#qŖ%;ˆćZŃĪ—Tœn=^&+Ø)rO(¢żœnŃj¼Åų˜’ņę _)}A«Šv‘ķĻĶyNXŽ•öfĢędÜJŃC ½™āl4Hć¤7‰sĆKØ,œpęPĶæČņZ4Ź*rµlĢ ¼G®b¬¾©›čOjĄź×iEČh v™Ze*^“SVъuØŹe Ā Cąœ†ž äŸÉł‚ž!mš–-ó/±^Ģ[(• JŃź½bˆ Īpܽ+aZž©+JŠj§Ė—ó™ä1,¹Ü|yAؒˆšcšĖ|ĖŅūs”ĮÄ[„5tz<”°Ē“ ]1ØżfŅŚóəG Āj¬.rꐁA<˃抳œ² BXN5g-ČŚōN`ÅŲödæµ^Ŋ!*%ß\Žø ښGó=@‹ń³(āsфŠs.ČĆsŹŹ”39u)."VɌ”nUøųĆ4Ä>y‰<WkÄCn Z0ĢųbU!–”uļąD­•+eD”k›•ę2”@„6eĖӝL%“-H0Q™R£”n»ļx9ƒ.µ.ČĒO™”°7 !¦Š–”Jļq+uÄW8č2™łxö¾bźL¼1³łœŲĆÉce„ńÖ7æ8Óc”™U ĢeÉr‹‰LAĢøBåZ @tųы֤¬ ¼īw‰dā<Ćmi‹(̲ĒEPvœāFœ1ݹ‚’*XįœSDs ņžf‹į5-r•L3.!b-ķ£ā^TY(qö&ēš:TĘ·Rļs™A…#˜.“ēD*ܾrŹ'„yŠŠ]m«Ō\\@NHš4æÆc­ E¶”©W7P‚µÅC·ņ?§š‘ Ŗ®cZ•Šēż™’XܽüLĖ’H’œX‡ąģĢv„|6¦¦#˜GL¢Ę`¶!-ĆM\EźęTts2ˆj$„!hįŽĒrń„j֊‰£U,©…"Ö*¾ff+ *’ČžįƒUĮųž §āQ^tH–ī­_ń‹IĢ2ūS[ŠŽįØ·ŚT©R„he}‡”Ą‚å;‹e…ÉĖO *bģĘÆœ£ė‹'š—ŹWuł‹(f¼#eLū0ūxTĀ6Ń7;ˆfJ©ZUf1"Ń Y'É.āpb¾SĢ,a˜w˜_8^!($`§żL9ną¾eeŸ2ŁI÷5*TŖī*T©SE—ža§~Ėéhtq‘U@įQņ–ņ…YˆÉÄŹZfP1?™žvg’Ļ%ŽˆW,@<Āį8Fa“°Œ¢JŽōdDU2ō\t cŹØøCg…<§·ĘsŁlĪ‹Ā+oæ;2 Ń ©Rŗ\KŠŲÅ˘Ō=£ ef˜3) ^§óŠ%HÆ ’’ŖČæ˜VńĘ,™ē0d GˆĢ)š2öQ‚“æµŲ2ÓĢv= VaąŠ ÄNu½—éÕ¾„™U*T­ ĩĎOģWčJN_³ŹĶ²µØs&>A„¬—L§°ā/ ędJåÓp ™’#PŽ!JŃŠ¼‰Wā|Ę]¦%„ķsĘ®Ö;‡BT°ārÜša2yļŽ¹¹Ų+N!}‘²Ų ›xŪO>~“7—/@ 3²äŹZZZ*sšr!Zbˆ™“ˆ&Ń-‚Įę*%d(§1²%Ü­Ŗį‹RąaœH’cS˜”EĖŃVš»ę‹”ˆ1{ć°¹{YPƒQoPŽ«VX×l½ˆŌ\é_U³˜éƒSÄ«¢RP\eApć’!še¹t344\Ėd@K6&b‚ •.Ÿźp½dę%–ÖeĢ"ņ°esś=%S™ā;ä“"’‰QōĻ[€&:³U:ܽmVėn”*(v+[HĒÖ՗WĢįx™˘TEĮ”ńqĢęĖ%;„QĮ?œF¼Óē8Ėv»3qóŽŌĆĢjĪiŽģÄĄ+'$“KłĶ²ū†ĒzØĄ¤’WżŒ If‹öbŠk*ć"ҧ’šķ°Æ u j8iа~#¬ÕGˆS9,tµ•9¢²ć«r“„˜×*™(Ļ1k«Œļ ˆmŒŹsZ8Xń7‚µĆˆQJę ĢāhĘ"¶XYT»•‰pŚļ=§ö|•®gø• )—øbޜov Š8bż^•ń› ĪžSƒFśæõ/Ԉ“Yš‚·ę|l±¹ż‚EƎŽņšC† ɖ6v·„HcpŚļ6TqŌ«ź½ŹB€2g 8—µ-^"T# E·JڌµT4­ńØŌ_²¶Ī5œ£lbd—.^¼ĄEvöéøī=ŸģljwÓ ŌVßQÜ¢!S‚Cy—l *Ū-É AŹ [ Œ0[‹u ­ʂ‘OĮō¼źDŲK¾øęq Z¦;Øw.Ó¤ōs‹Œ mń/T^Ė–į„¦ķŖƒ/¤_/YąpĘ&Į*&Ā™OÄ·Ę„ł -  0@9q x„°PžĄbą™T²;3*±-‚Õѝ*Tž­Ė—/¤‰J¼±€”."©ę E†•Šä"¹Jќu°T9˜ø <"-öÆÕ«yŅžųŲx޶ø¹ČŖŃĪ£$Ć1q1i,)ÄOā3ę—aāU-MJYĮ¢Œ½ō@ņį“ł¹o Ą¹KĶĒ]ź/Aœ¢8# ĆŠ'QÜo:vą‹ü#„WW.¶yŅ  jŅ®;ēźöėb"U*ń .Ŗ%:\æøWoz2ģ˃˜yŗƒ-LZ CĖ J1q…’‚ĪX1Pŗ*ŸF¼šezŹ-V ø $„ĄOØh‹³1g_Qé×Io˜9W˜KĒŻŚbw AÖX<ˆų›ˆĮœāxQÆ(Ƙ”+qł‚U"9Rxy@BlŽ`‡ĻūX*a.߈xˆē†,Ź‘®Xø«Õ'‰RŌ ŃŌzUŅ>ųńÜŃ,ź‹g \ĶXLČÜE,™TTT¤˜©ā]”©Ć9Šę O ŒŁ,ͤo‚(`OĢĢ ĖĶx‚Ą©ē³ū sŁ-ćO[8—Ņ>śž˜”8SĢeØé²L8S'“ü€åœn!āaĢĀN1€†øēL\Ø3Ėż”ųEUāįņóĢŲę7Šł{^–ČŸ8£Ł=3!&QČAäfBŁÉ˜ŸŪE‡”Oöą@µe+ģó’cj/5JwU>eÅ'`Cž’—˜Ę-ģÉ}Cļ†ś+<§3CĘ<FfQįŸŌŖŒ†Ä~13<āq<"ég;Mx G¶LeŹ’"¦®!k}© CœÄC¤õ2‹å¼ū颻žĒlS˜Į0ó?Ņž;łĖ˜J—pa Ārˆ1“a 5łž-Żvꔋ—…hv„œēߟ@Sr†"”rŻ%*ęē3āŚBŽ:¼“¾Ä¦IcµJūĖź®Ēõm{÷£u.Ŗū•Š}PˆóŽß\%ųŸi'™Oś{ėjfT©Rŗ^gēK)ń_«ī„żH÷aqYŅ%5„GU¼½:€GĪT©_]­+ŚUń8•t.\¹rūJÕļNakę˜ó„5+mJ™–įę3k¶ėcĖ„lTu­ōÅTƐ TÆØßµӎ#ro”}»Ņ{ūģŖųLqŁ‘ź’ŸE ŅÅa1Ėz?vc+yŲaĢWn5½MżšŠ½|y[čPēŅ;~H»µńW±FŽ!Ć(į‡+:/…J?®•‰Ń­o ū˜=p[3‹–>‚µ-ōfÓ3ˆ·­“1’C>"øŌÉóį–” ¾`j͇mhN"\ć§}œź#>ģ“Jō×")cč\+Қ«˜q{xT`JGÅŌ @Ž1ZœĒ™Rõ­q¦t čÓĢ Qó¶čŚsWrĒÄJw„ŲÜóvR_Ææ£šTU¤5ž`7x–üĆ"-ØĢ¼ķ½ƒh”³’YoĶA*#”g¢1ßR·„s¶ö ÷dśE'>Č.gœ„ššm©‘RŹ9…Å—˜Ģœź‡‚“­ĆÄĒ1­%WĀ)Ōj’šāµcų—3Ó·:d"ŖóōEśCf{Ŗø•¼iŠŽøćOłxkrōˆXÓ0EĢ &!!©xhoL‚ųbŖśv—aéՇĢ4Ēņqœź£ž‡Ž˜Öš{*yÆ`PŹŅĢć”Nąøµ9;-œ’²«/ųŪ[n6ēš»–þį‰Ļ³°5¹p¦— ó ’ @|ōø\ •3gćoōˆķ^ÅĆ ¹{BSĒąar„iQÕeÆ(ŚUÓ}8Žėz-Įo|ĒXA+KŲāWūŲ{Ęąć}D­„øöµöšŁ±•Ō{*½•ŲŽķÄ¢³óŗåø½ŽīRÖgÄ Ń·Ęļ[„z=™«ųź {ŽĶćŖ#‡ĘĄ¾%ŠÜmĻhĄŻ^Ē…w'²"/‰IįŠŲ/Ć2|%-\j5uĖNĢŲžõš“}ŲöDW.­ĖļĶą`5/¼=’,ĮN;óī—._bz›č ųįŠtø·źOŠrtžŻź‰®«ėOæ>²w$„]ÄW=¹ņwF?y:Õ½õ^:cnŹķĻŽŽ“­ź4qžžÕ}2±¢ä٤Q“ŽöĻlcųKŻR½¶Ŗź:ŽÓŌņéæz·1§ul{›—ģL~öuX6Ėß`n¹}ékt’żšķ‚ćź®ćҾųčæAfS_I©ä¬}lśP\ne„9ÜtÅó”}eJ¶%{ ʏ|!ĻD‡ƒŽµ×­°šŸÜGӐļŚū9Õ}i”ó.ōнÉĢ„ćÆĆ ÷OŁtG,{0WU<÷7±ķ ļŁ‡ß zč¬ę"+kҬuŽƒųŅ}u{ —/cųōßZį]„]!†•Žżü é>„=ÓŚ›ßP{`¹Ć¢qŅ~īzóŪz'ÕĀŚžtz“ķĆ.Iśe×Uko©:Ś ūޟpćPzO°¼vķNƒö£¤ūäį8Ōj-ō—ń£¹k×Į2ūēķGI÷Ō1[ģB撿ŲŃś™čĀ ??»ŻBq÷zÓ}5iĮj+ųußN¤­.T4׊ĮŸT?·Ŗ`ńTóÜ/ÓXĤ~&~=eµŌ¬_rčć¶Õvą'ūōµÓ+¢tɱ] œśU¾“Ń •[ßŲGp œoæŲźĪ˜śŠ+?^Ī\»×× [ūŻū°½ˆ”ŗežV(۟y|ZŌemoké—ų‰½Ō^óõć£ĀAÄÜÅõ*Š9? :0ęj¹ŚæU—ōå5~ų齚9?o{įŅ?f„ž~dŽ;ä­ēQ#3Ÿ¹9w5—ł“{YcßĒę+dĒæ?p:i_ø-ž¼Ÿ¹Óū…æ÷‹¼ąrķŠżŹæqÆÓȾ5DēŠTÆÓ¹Cd:a}‚÷Ō©_„“^ó`֕æüŅÆüū:oģ÷/ žÓrśŌóūĖé‘b‰%?·Ÿ³•ŃC6Q *ļźT¬_Fɗšę,ćōój'={ÓV|ōU5Ÿ$TO.JĒ2VÕÖ#ž#öR?h©ZÄ®ÄI]2P£wp8ę ›ŠŽŹĘ*Éz–DEģĖ™wÓfQčš| Ē󱕰1ŁźVą‹Ø&:§¾žqZ­_= ߔz…"Vw…ĆnÕqˆż [÷!ZARĆJŁKk­äŗT哆¼uHŖdö„ƙI^¢ Eæ·Ø-ŅåĖź;—zS»¢E¬’)t+įJüŗ“TØQ0æÉWjåļyÜ©ćQZÖĖUvJ@[ę6¶ółmL$Ģ-Ō\#K_”Tį@ÕPŻlud·ė*ŗ–žWQčØķ cü/¬Rwõń:kgō-8œē¤ čßR¬æ*čTضĢõ5-ĄĢ”€ˆöU0Ŗ;Ō ņéĻkXü‰xLaDMˆ”훕čT~h÷`ėŗÖ?0OšcWėˆXXv+Äé¢[Ä{S·?.~aÆĆ JŠbÆD"¹JV½ vč aæ³˜Ÿ[TÉ )"XåģqJķÆ¹ŌńŃ%|n# Ų4>}ł48‹ĖėUs*>^õD¼Ź›-qųź…švĄ rĒ£—`E·ä(·Š«Ģó<Ź +č\r~F ^5dõ‰BxkžĄę*XŪ}A)åTø@Ü~LZŽŹ«¾J›åÄCžŽå§ē7ßq+ó9{'JЬG—e^·ńŠ•Ł*=\żiN:qė¹ošć˜H®ŗį+p 믠÷‰]•ŌW/É« čÕź•ė¹G¢qų•#Ó„|%-PĆ.}ĻĀjW¾ÆdżųЉЯłz”āųځc޲¹Ģę iCģ «‚ŽUų ōyz(óŚxf00ŅÜcwR=µżųō”Alõ£ŸUXæĘ \»ś!vEcżļšīD?—ć# ˆAdzFN枀ž:©cĻįÄøēŁŠĄóٵ]WłĪ„,Ƈa^¦šæQußĆŽĀśUұSŚZ㾮ڿ5¾Ō…["ŁŖ:$©„Ōf^{[ĀŖ ųīĪŚ†_5]©9|g/ĄusĮł©öŃ«æØœž=±ŽŃ*ēöCG¢dņDGĘŌÅõŻ_ÕČŌžĻ¼­0{$§ń3¶ńƞÓ8Õ`÷ÕóĆNµ’ęY޾Š[ŠYćš¼ĖČQ²]¾ä/šƒ¼±Ēn{Z'Ÿż½•g'ØPĻä¤aŠžĒ{ō#Ąü˜·ė’ŗõ]½±+~=zõ•7-ßoqiooWJū ”ó9~sż*ų}¦˜Kcń2`’}'obå‹PŽ„ž%o—ķ©‰š‡|!_Ļ "†^|?$*ŻŅWY«,Lz5™b»{Š«{™‡čą·Ļž†DČt«öRc*ųŽˆĒš,óö;śŁģJ÷ݟÆß“#łŠQYõוŸAæÓŲ¹ ˜7ųø}·˜WžĪė»N_€+ qęsæ·æx ‰_·EæĄœ~߃įĒP›WŒūjŽ?oæŌļĮ{góšżĮ„ųJpīÅŅ WźcįŽqßż~©Ź¾ōÄOŃOT­ž~³ĢJż¼ę;Eē™KĒž æ•Ų}ü®’š‰”~ØäsŃl?üß̳Ēg…ü3źŪ~¾A_žß’Ś ŚĒäæm²Üňø@‘ 'HĢ‚@pl¶BŁ„lŠ #I ’KI6$’I$’I$’IŪdżˆEź~Ģ£2Ų²I$du.éļ$I$’H 5"d$’Lhć­æū’šg| QazJšMtĮģ–ŃtžĀ€$H HI¢$’I$’I$’IŪlńÆęüҔݲ’I$$•]ēķż I$’I!4d„’Ii•Ä5Ųßé`¢$Ź0zFŽDSd„–ҁ$ i$’I$’I$’H$Ņ@łłŖÓŲ“µ¢ŚżI$š%’a ‚I$’I&6ģ„’I‰Xś'”˜Éā~ŠIKBźd¬X’Lń`„’ĀI$@ ’iŖŖd’I$’I$’IŅDīż¹e„–B³’I$ƒÉ’I ‚I$’I &6ģ„’I‰Ā“Ńٵ8˜~ōó|ŗ ’A•(ķ’ $A@mŽÄ$’I$’I$’IŅŚx+Ųżž¶żū²»’I$!Ɂ‰$‚I$’I!&Vl„’I€™$łēć·"ŁłJ? ¶ŚŠHų­’Y@‚Im­”$’I$’I$’I$Śŗ{Žü<ž&ÅūŠćI ⣒‰I$’I!&Ģ€’H™ „}Ė^ŗČVž‹Ō»šūČ H9čå¶ €$€IŗT$’I$’I$’I$‚ŪšzĘń!<Ÿ$ǜ.ż’IH¢Hr É I$’I"?Ł€’I›"ŽŲI$sĮŁĂ÷ąöH6€I¶ź€’’@‚A$@$ I+ķ$’I$’I$’I$‚ŪųäČŽŪ¤—MÖÄi`HIø” żI$I$’H 0wŁ’I˜ł’I$ŚD{óŃ$“ŌŖō¶Zö’ÓA I$A’HSvž$’I$’I$’I$„ŚFyŪ2[’Ś”·¤’@-±l²Ų 2I$’@I£>ū0’H$ŚBž¢÷¤Ó$’•®É ½Åø²Ł !“HŠ$‚ ÜŁj$’I$’I$’I$€›b÷lģ’²fż¶’Ket“lm2I$’M£6»’A„Ś`õö“ š‹”É$€é¬\Q&YI¤@’I ®ķŚ$’I$’I$’I$’d{’Mķ,æ$Ūķ$’K-¶É%'ōӇ%M6I$’BIōł’IŚb•Z„ 6’•WĮ‘¶Ė [Km¤ € I $‚}¦Ń$’I$’I$’I$’BI€ {m·ķ¶ŪI-’ČÄIivš %/I"I!°’I‘ōł°’HŚDvŖ’-¶Ņ²Ł‚™Źj%Am" $’I$€@$ $’I$’I$’I$’I!$@›$’I$’[@ Ū!֟¼ ķ&ŅI’I‘͐’`„Ś@Ū¤8ȶÓS~„²JQ4’€ĀAm$I$’I$‰ $’I$’I$’I$’I$¦HI’I,€›M@I%m×Ū| 0“d’’I’Ģ€$€ŚdŪŚ0Šˆ &ŅoĖђŽ‘Ppe Ji" $’I$@’@ I$’I$’I$’I$’I$’HI²Ė ¬™$ɲĮ'ļū_āg8$›$’’I¾Ģ„’$€šda,Ń}’M“ŚNZB–Ć̹PS°m¤ $’I$’@’H’I$’I$’I$’I$’I$’Ii–‚6šHŪg2Hü’I!  ›%’’I’$$“$šdRi„šlLŅFŚP™OšŹ²OśńBŁ4É$’I$’ÉHI$’I$’I$’I$’I$’I $²II$›ķ“‘ ’·ŖĢ“i# ›d–’I !$™$’dšŲiSdrĀLČSA÷ūĄˆųBł“‰$’I$’6›iI$’I$’I$’I$’I$’I$m²Ł#ęŚ{¶’ļ·.Ūm±ad’’I HI6I$’l€IÓ«JȒ Ś’Ūš7\ū8øŻ"‘’I$’@I6“iI$’I$’I$’I$’I$’I$ƒ-²K/ioēœĻöŪdönYŪm¾“$’ŚI$’l’I$lÓ÷@˜[b[–œuŻ¦Ø GަĮ’I$’@JL’m I$’I$’I$’I$’I$’I$‚,·k_ﬗk·ūm’nČÓi Mś›$’ŪI$Ūd’I$šl /SV›DŲ%ĖØ˜÷ćÕ%Ņ’Q–†’’I$’H’Y$’AM I$’I$’I$’I$’I$’I$€$’’–ŪżöŲ[žūo÷ęŹ³l’Meś›$’Ūi&É$’I$’l\ FŲ5kvSņQ¶Į“’M²€Ś$’I$’HĖŁ„I$’I$’I$’I$’I$’I$,‰Š’ļ¶Ų™÷ŪåµęÜŽlŹ›$’[m&É$’I$ü¬iŪ`H p’H ¬€ ’$’I$’HÓioŗtI$’I$’I$’I$’I$’I$’ädŪ[}’żÉ¶ ö~\Ś_ir Ļ$’[m6É$’I$›ģÓ0`I3 +ńƾĶ5) H$’’D’I$’HĶč-½^ŠÉ$’I$’I$’I$’I$’I$’“ _’ü™¤$€µBöŪrķrĶ$’[i6É$’I$l¹s‚WdIm›dŒm-.’ ū&A%0š$’I$’HÆiIķÜ É$’I$’I$’I$’I$’I$’A’[m }¾Ż’ ’ÉzĘŲ&I2Ķ$’ŪI&É$’I$ÓméłIÄ$lŪū—bŒš„“ł“Į)“Śd’I$’H4Æ_Ł'ń~I$’I$’I$’I$’I$’I$’@I$°Ł$“ŚM·–‹tŚrI"Ķ$€I&É$’I$Ómr›m;$ƒ@ž$—ž)š T²ÖŪhÜ@’I$’H¶}Ō$œńõI$’I$’I$’I$’I$’I$’A$“nß2vŅBI&ŚÓžĶ’Kć-Ķ ’I&Ł$’I$„ŃmŠŲM+éH‹vśµ%°‚d5—ž’H€ŗD’I$’H“ņ6•ń×I$’I$’I$’I$’I$’I$’HÖĖ~ß²I$Ū—}²Łć-Ķ ’I$Ł$’I$„ŃmŚm§h mŽ,’׏ې‘iR’I$’I 4Œś¶Õ $’ $’I$’I$’I$’I$’I$“Ÿķžü’I$Ū÷~Ż–É»mM6’I$Ū$’I$„“m䛳%m9 ²Ź1œ¾|Ņp_‘@ ’I$’I 6^ڶR¾ I$’ $’I$’I$’I$’I$’I$‘Ūo’ą’I$›WT̶Iūlm@“’$Ū$’I$„ÓmD „’i0†ņzEŃŠ%ŠęAssL’I$’I!6VڰR¼ł$A$’I$’I$’I$’I$’I$‘Ņ’I$’V[$’_;zlI“Ą$›$’I$$ŻmR‚Si0fŒ’dtó°)ģyo`’I$’I$&ҰJ:<Ā›d’I$’I$’I$’I$’I$‘Ņ_ū$I$“P[dM;ņnI6Č›$’I$$™mąAܒŚil_žŁĪ)  œ“yiėl’I$’I!&ŒŃ’Rŗ‰čŅl’K$’I%¶I$’I$’I$‘Ņߌ’I$’`I’Ė;Rn‚I¶Ą›$’I$&›mp²Ä’p”$\ qō'óYEiļ@’I$’I!&Lń²R”rŪm²Ūd–Ūm¶I$’I$’I$”‘Ū_Ń 6Ūi$’D$ zn‚I$€Ūd’I$&Ūm–MŽŠ’@€ HzAŅW-#$„_Rį’h’I$’BI2ń$’P $Ū> ¤“m“ši6É$’I$’I$‘Ū_Ą “’m$’@d¤ŪRŹ‚I$€›$’I$&›m²EŪfD€%łžŪōėC².±-ĀĖa½i’I$€’M’œō6Ō·ķ>ŃiĄ $€É$’I$’I$”‘ß^‚I²m$’@’I·Ū~JI$€$Ū$’I$&›m¢/’Pč²’Ak°Ūń‰§÷4Ūo 0…H’I$$Ū$‚żūĪ6Ÿģ>dˆŽ ‚[A$€ĻY$’I$’I$“‘æ_ĀI¢@m$’H·Ó|Z’I$$Ł$’I$$“e’GŽB[¶AMj?›q)˜$¢Ē'p”ˆĄ’A 6€śßŽźwæķ„DH¶ßA KmM$’I$’I$¤€æß‚I I$’L#Š “I$€Ū$’I$&‘mŸń7Ö G[d-ŖO›y°°7n릟§Č=č’JISiŁ0 Ł,›mƓ¦Æ‰P„č KlMƒ$’I$’I%$пނII$’H! ›I$’I&É$’I$$ŅĄCԐŚ[·Äź)›k«%z°ų(7‰’MŸw;Ś€’ł'÷˜†qĖjāż Kh_S$’I$¶’I$J¾’ĀI!$’L €Ūi$‚I&I$’I$$Ņ@²€m~Ūµˆė?’BóŌA&F"‰’¬?©"L—. ¤›o·ū¹¶6Š@‰©æų_śŅd’I$¤’I^š_ĀH $ÓLI @$Ūm$’I6I$’I$„ŚH$mrß·ßė•3Čļü[:—’bN’„6I–{–™³o÷Į‚.]$sI’ü _øMPd’Im ’Öž’ĖD$›I! I&Ł-$’I6I$’I$„›HDfæōŚ{6|,¶/=ńóD°†…$‚I†„wķ¾­+ūžød²_ķż _ņMZKi $µ“–^ŹI$’H I6I%$’I¶I$’I$€›’IADż¶ŚHƒąo–On–2h‹$$’IŠ›%]uwŁ$^ ÓļD’_휤ŅI#,’@Id½“’~É)I&’I$’I!$›m¶I$’I$“l’I$--϶žHŅ—¾ŃūmŚ}¦¬`hwĄ¤’mū@F„6Łä’٤’I$¶Ż5œ¤¶Il€¾ÖŪI-’~É  &’I I ¦I $Ūm¶I$’I$“l‚I$Ģ>į¶ÜĻ[õK_’īn„z¶æX ¤“mKņņŌ7ķå–O$’I$¶3œ [ņI$ęJÉkkm²I$“öČI ’IH¶€’I$Ūm²I$’I$’mI$L‰¶ŽŁ€ae¾l©`KJ0’iĖŗŅņמķm’ߤ’I-¶¶VX _²I¤–śWÖŪm¶Ķ¶ŪžČ $ „’I @ I$Ūm²I$’I$m I$ 7ūŁyŁéŽ}óž°ˆ>²vm[ŗæT™Æżd[_¤ŚI$–"HŻßöI$Ó-5¶Y$–IdšöŁ "m’I"@Ūm²I$’I$’m $ėÉ@’’ŻŁ#gņƒßē\š(æ„¶IÓi’ū"@€ŠoäŚ_?'I$¶1;õ’²É$Ūżä’Y$–ŪdŸö@ $$’IH@$Ūm²I$€ ’BI $L‘m¶Ū“J͘”h“€C}Ym¾ÉKoKó/n‰¢o$_t² É$¶£5ö¶’²I$»Ļe¶Ėd–Ūfß“I$AŚII$’I$‚ Ūm²I$’IIA$lƒaä“[:MŅ’ō“} æ’Ū¶Ū’;o^ū!n›ź’$ßāHƒÉ-¶”ö"ßż†Iō³{%’Ł,’Ł} I&–ŪI$’I$HŪm²I$@’I$öÉd4–Ū$MY(“KanŪöŪd=Ēū{lė$ÜRž¤Ó|I„Ł%¶1GVI$’Iõ’I$’I%’_ņI&ŪI’@‚@†Ūm’I ’I$4ĮŚ%Łpģ—’÷åv‚€ż¶ŪI?öŪ"ŻåŪl 4‰R’$BlĄĀ_-¶h-BĪ’I’¶o,¶Ū?¶ŠI&I$’[m Ūm²I ’I$4Ņ$ś$Õ&ßŪ-(‰vĒm¶Ū`/žŪh›õŸūśV_5ŅžØvö ĪŻ%¶°!¤E ŅIµ¶ķ“æ’Ūi$M¦É$’Il’I$@$’[m²I ’I$$’"ēŻ„³ ¶Ł%­ŗ’œm$Ūā­žŪ(M…ˆ$‡[į1ģFĄˆź’$¶i®@ܒI¶’’æ’ō“M¶É$’Il’I$’AI$’Km²I$’I$$’nµ¬„£,ŸtÓM$»I&e‹ŌæŪ)(„uģĶSųA1oébKHM%¶š½Ė–Śŗm¶’}’h “M¦É$’Il’I$’I$’I$’Km²I$$’I$“’No½¶ŗ=’AŻ0ĄOĖG-@-÷Ū(KĄŲ"ā}WźÓ5żåOHŹķ)$’Žżļæ3mö’~Ņ@M6’I¤’I¶Ł$’Kl’I$’I$’I$’[m²I$$’I$¶’H…÷½ł¤™  Šśg—ŪjwZhPüV x®ß„ĖŁ$’ō­īń,Smµ“\€Ūm¶Ņ@&’m6Ł$’Kl’I$’I$’I$’[m²I$$’I$¶ŅIˉMm%–iūŠÄ²ŻXI“ČūnsĢ$t6LāBŁ€Aˆ,ŅÉf’ātĮRHæm“æ“Ūm¶’I$Ņi$Ł$’Il²I$’I$’I$’Ūm²I$’I’I$6ŚI­M5å²B1¾‚ –-ÕélØūmžŽ1źĘüĶÜH9ŖØ MßI6’NĄrßo¶½$Ūm¶I"Ł$’I$’I$’I$’I$’Ūm’I$’I$’I$6ŚI»m†õ“’™”Ū ­ĮE2bs’mĪH 7Ō42Ū ’āäA“m·’ƝHŒšæo¶æd€Si$€ ¤ŚM Ū$’I$’I$’I$’I$’Ūm²I$’I$’I$&ŪI7fm¤ ·’Ó“”šN.še²©QŸmĘ·~]5½$ĢO£ūlŪm·žĮĀI’»’õ’’’É$ ¤’m [$’I$’I$’I$’I$’Ūm²I$’I$’Im$›i'-H–Ī”’VįI1?mæīśCę–Xh½ź ė&ū’÷öĆCi®’öæ’’’ō¤ŅI[$’I$’I$’I$’I$’[m²I$’I$’I%$Ūi$£Ķ¦–i$–oD÷ŚĢ¢ #˜"oöĀüWCĶ”(&bgY?žŪžöĒKmŸßæŗÉe²ßŁ%’ ¤’I [$’I$’I$’I$’I$–[m²I$’I$’I-&Ūm$”M’é6–iš[Ö(’żC’•¶ė4‰ū;)|dūY?¶Ł’ö#æ/—É%¶I$²I-–Iz 4ŅI d’I$’I$’I$’I$’Ūm²I$’I$’I$&›m$·4Ջ’yąa¢tł1%&$Če–„“ærY8{Iæ‘$ļö†?–¦’y&Ó[/’|“h½mE¤’H d’I$’I$’I$’I$–Ūm’I$’I$’I-6ŪI$—÷äåƒp ņ&‡9 —Ķ)ZŽ„)<·ÜKµŪż½wI¾Č žF •’ł¶¾Ļ‰¤’@mM¶’H‹d’I$’I$’I$’I$–Ūm’I$’I$’I-¶Ś@·Ćü”Œø2Ę µ`…ld[[ŁžŚ³O½²mžIé$µHė!7¾cÓS¼Ņl²Y kņ 䭒I$’I$’I$’I$’Ūl’I$’I$’ZI¶’I-’I6’J $“v²ŚqLwG'įāß““·nŠ‹“ėō;Ū­õHU»™·7÷öi}æż$Ų#[÷ö ķ’I$’I$’I$’I$’Ūl’I$’I$’ŚI¶ŚI$’I¶ŅJ “’t–ßy\WWLl Ÿ+čB M©uŖāŪ›ėõ^Ł%ōiTža¾ÖŠwj&ˆi¦Ł[æÓōģ­’I$’I$’I$’I$’Ūl’I$’K$’ŚIöŚI6Ūķ“ŅO6’ööŽC“RqŸr“”SHI?÷ęīP›ĖōŌŁ»©UōÉ<¦ĖH§¶yl›S[’Ń(ü¹’I$’I$’I$’I$’[l’I$’I$’ZIöŅM&’’¶’{KöŅżöśā¦T²å ąAĀ!É?"ę|Pć’Ü[oˆAŻÕæ…ݶ[!ŹŚ3[æŁž€’©’I$’I$’I$’I$’[m’I$’I$’KI¾ŪI¶÷©$Ą#±5ś]¶·š7¶5¬aļhŒ=ė“ūo“>Šn‚Sé·ÖįmĻ%›+/’ė%²É“›ZG[’¼ŸŠæé’I$’I$’I$’I$’Kl’I$’I$’KmņÉi–’Ó&Ą#`+ŅH­»kż>@-°Ü¶YŹ“’’“RĄnĆSć“·É&‡Ō ³Łe¶Ū$’M¶ŅKFk’œƒPE’I$’I$’I$’I$’Kl’I$’I$’KmjAm¶ßŁdČäś I-·ŽģļŠĖ„#³w“’—Q7įķŠįµ·O¼‹š ļ{-¶É$i&ŚHvė~œÅP ’I$’I$’I$’I$’Id’I$’I$’KmVA$¶ūrNČ‹ś qm—MÕóū?Ü0QŚü’’׊I½ķŠÉ„·]żGD+äkd’Imµ’[&Ū,JĶoœŃŠ ’I$’I$’I$’I$’Kl’I$’I$’KmĆ$–ŪRJÉzyćl’åü쬀€‰ęՒoןļˆVAµ²½żeŚ£ ’“’K-ķ¶Ūe²‰JŁķœSš ’I$’I$’I$’I$’I$’I$’I$’KmJĄŽ’JÉ$zIsl·$ø±°RI"Š §ž‚{nźAŃļŠvɽ¶ŻµĄ:Ķ’I-i“›m6ŪJŁķ˜‡ą m’I$’I$’I$’I$’I$’I$’I$’[mž@–ž—ķ@’¶~e‘é4ž2Jd“Ć·’ŅęŃł@yO±ė÷¶mų¼œŅ€]’Ūk)i$€I¶ŪK[­˜ƒ`Sl’I$’I$’I$’I$’I$’I$’I$’Kiē˜¶Ž“żX"¬ßeµĻūėŃ)¶]Ż7’Ņó3Ł{)#³OĆ’ł µ­B’’ż­@$M$’J{½™Ć`m’I$’I$’I$’I$’I$’I$’I$’[mļ†¶Ś—ŻŠ m?(^‘?rōŪ·6ŚķæžŅóaŠżlg½æ;ē’Ł&JMUȄķµ@[m°ŅJ[} d’I$’I$’I$’I$’I$’I$’I$’[mm¶$›Ėė’>W¼}ž¶A,‚NÄmæ’ūW.S%eŸ=ŗwż€"Óh¢T ’’’żµRM·¶ŪVŪ­œ¢ d’I$’I$’I$’I$’I$’I$’I$’[mnEū$—Ė+d’=Ž* µ“ŸJI$’~’ż¶’iS4$ą’ ÷ü„”š$€¬’žö[gvݶöŪi–ͤ–&ŗd’I$’I$’I$’I$’I$’I$’I$’[m’É„¹$ŸMr@6»-‰¶ŚI$’߯’¾ßķGž’„Kƒž-×l=4™-† Żd’ļgSI6öÉöūkm— ŗ d’I$’I$’I$’I$’I$’I$’I$’[iļč©&ßÄōŗY?.ٶō’I$’Yo’ž’oc’§bü­čwdŖY¤“Ÿž,I,’m¬y$ßm¶ŅIm“„ģ[d’I$’I$’I$’I$’I$’I$’I$’[m]Iæė’’K­³²R–4·»$’m¶Ś[~’žŪdz<¾I¶ĆW­lKdĮłØ“ŸæY%·m¾kl›m„¶Ūm³Šd@d’I$’I$’I$’I$’I$’I$’I$’Ūm ŗė%žI/·Pü—”$Ūo·ūKnæöŁ$M’M7”E=åäęŪž˜n²I$²m“6’ģ›m$¶Ūm³Ä@[d’I$’I$’I$’I$’I$’I$’I$’Ūm ¾+;÷Ėo·ģA^’’I6ß’’’ko’¶Ū$øč>ŌÕ>Ä©dęŪI(R¶"É/²ķ½ü›i-æŪ}³ĀˆŪd’I$’I$’I$’I$’I$’I$’I$–Ūm ³+XnK¶y!›;ż²I·’É3ho’öŁ$Ÿ’XƒĶöE»“ą’WēvfIŪöķ¶Q’›]­’’ķ³ĀJČ[d’I$’I$’I$’I$’I$’I$’I$–ŪmĄI›kAźK}öŁą>»ü’O’ņ`“½‰ļ÷žŪ$‘‡ś’5°¦ĶŒ4į’ĖĮ3nŚÉQÖŁ¼Š’“{­kūl“Ę ½›d’I$’I$’I$’I$’I$’I$’I$¶ŅmäI¶[CŻénžĻx æm’O#m$’…­·žŪd)ŗ»l^§Įua~ˆńĮ,›iQ[ilx›’äūd›Ī7uŪd’I$’I$’I$’I$’I$’I$’I$“’IjI–ūŠId’Ķx e’})$’§Æ’žŁ$ƒ²Ņ«·rŗą)4člFĄBßżP|¶¬Yß` Ė&ßĘ6Ūd’I$’I$’I$’I$’I$’I$’I$“€IK¬æĖ±żY%—Ķ®L,›~P%ņcļ÷’Ūl³v· /äł|Å}ēiŸł²’Q w|ū$ Ͷžę%Ūd’I$’I$’I$’I$’I$’I$’I$“€ k‡Ž‰±ņæ&’̧¼$ßųöd’C/’ßŪm%ķ~,ż]ĄJģĢ-„‰97Iϑԉ4{äOĶæ¶¢%>Ū$’I$’I$’I$’I$’I$’I$’I$“iæģéz¶ó̓H”žĻÆd$æ^/’’’mµ,d‘l/K)£,œ­¶/’d”>ŪQ<_ü€žĻķµ"mr Ūd’I$’I$’I$’I$’I$’I$’I$“²Kģ•v/÷Ūé·Õ;¤öO„ķ,Ÿźļ’ėo’m,d‘d-ķøµMżŒ-¶¦ō3i¶Ūf½·žżĄž[bIHr Ūl’I$’I$’I$’I$’I$’I$’I$¤³md•=?žśIeö_'ņO7æ’~ņüłm·ż.Œ•$ž ā™½˜¶ÄĖķ–„?–’䟿’üŠņx“M$Šcą m²I$’I$’I$’I$’I$’I$’I$“³in….Fž•émūŁDߓ6æż¶›ncoŁ,’I'5äßYĒ›’‘¶āÉžžČ¶žķ›?ž ņāŪl$’GT-¶Ūd’I$’I$’I$’I$’I$’I$¤€ ’RɅ§€-7×Io’YeÜ'6śM“’·OÉ$’I/°4$-F€†«æ³•¶®O’ßŲĶžm’žI$’’ō»VŅd°’GL€6Ūm¶Ū$’H$’I$’I$’I$’I$”I’Fß7”ķI$ūm’’Ł'Ų}’× $”? é6Ūm’²“% ŹŪĪ›¦ņ5öīĶžßŚšmæūŪµ$žĄ4ƒq Ūhː &Ūm’I$’I$’I$’I$’I$’ŅM’HH–ÕÖĖ$Ÿ’ūIeÜ9¾Ó€I)¶6©÷ūķæņV¤mȒF§ö1öŹżæßū›Łż²¦’žé$ƒu“dļķß A  m²H$’I$’I$’I$’I$’ŪmI$ؒ뤟’śK$ō9¶Ž2HH>©ż¶Ū’ś’m5śklŽ1žĆ’·ū™Ūm’öo|(öČ6ŚH†ŚžŪoLĄ)²I ’I$’I$’I$’I$’[d ^›kü“ķöŽ[dōy½žrHKu»äĖk’šRaū~’³@¾Ž}·ßŪŻ{m°”ļ–XR­2Ś@¤šæ}¤”i%lI$’I$’I$’I$’I$’I$ öŽŽ’ķmk_¤šyµūrRJŪõM«¹$…~’ę[%6Ū}æÓĘ>­i¾Óūܐ¬„~2žŪJŽĄæŚ`&›[ē%¶Ł,“†É$’I$’I$’I$I$’I$ m¤Z’ßCż’šń;¶ūbŅZŪõ’ĖŠ@¦ßv›$_4²ŲóŹd,ßž×’(Żę€)7ūłŪ2Ļæß~ÓL‚€3m“ŽŻ%“É$’I$’I$’I$I$’I$ @bß[ŽZü»96ŪĪRHŪt»[ÖŪbTŻĶC$ <“H~ųĄ ĄŪ’`ŪYВˆŪ[v~¹2ż rl@J’’žŁ¬¶“Y$’I$’I$’I$’I$’I$’ mK÷ŪÖŽž6Ū~PŪ[f²[ßż•{ $ßī€yX,H–ÓK`ŪĻFŸiSÉ’Ų»[0™l€H-¢‘’ķü³Ł$’I$’I$’I$’I$’I$’I$%¶Ū@—g7’zZķyoµk’’šeu &Ūt_*sG+[bŪĶŹ.Kף¾D!ŅiļŪh€I 욒’·¶ Ł$’I$’I$’I$’I$’I$›m¤€ ×ē&ßj©mgeŪ‰æÖŪōqp&śŚŅĻ¢s° * c[͚3£„ņĶ’Å…ŚY-Źh%0—’ļž² Ł$’I$’I$’I$’I$’I$Ūm¤’ rÓ¤’~K`’¤’§ŅKv»§šAėmšXšł>”"ZB‹oßóLŸ·ÖŻūm&³}„N i…Ī«ķü•Ū$’I$’I$’I$’I$’I$¶@Ūd“’I zĮō·ųl@&D–/&ņinŠ6ßémšŠ@6ś ’Fƒl3O°hŽŚ’ą =4·}Ų€ ’|W’{¶ÕŪ$’I$’I$’I$’I$’I$¶É$›$’’I¦’I$™nlæ–źm£’š–9½žm­Ö$»Ifš€’I °’·hs]­·Jƒ±M’o“mAZMėžz]m•Ūd’I$’I$’I$’I$’I$$‘$Ū$’Ūl–ŚI$˜.zŪžģéżø“2 ~}µž=m†KxšZM¤m’ŅG‡dS]ƟļwŪ}óE|Si‚B@ $–ūé hŪl’I$’I$’I$’I$’I$ł`›$’I$’I $XĮ-§~ķx¾k/+M·Ÿ-$nIū¼Zm¦Ūm’ZG eSK [۷ߜhLŻCI°A;}ļž[“HŪl’I$’I$’I$’I$’I$i»h›d’I$’HĶSķæ„k(ŗūn„Ͷ· %žŁ%Č@$¶Ūd’ZG˜evżā·o’ÄĪāĖI0 jA’ķ÷ŚKŅŪl’I$’I$’I$’I$’I$mš`’l’I$’@“Ņļ%æŻ Ō}9r³gŠĻī։96’ž$’Ł$’ZLš„’owݾą6KhII /%›÷öŽ€Ūm’I$’I$’I$’I$’I$/“@M’I$’@ ‚’A©’ž['Õ_±R€EšOmži×”H’I$’I$’ZH8ˆRK+ƒķ»ŪŲ”€CY "o%æm’–dŅm’I$’I$’I$’I$’I$lÓ`m’I$’@€Ņ@¹æŅX/ų/õ€×Ó/m»õģ•l‚A$’I$’RHIzÉ/ż’ś lHČķĮ»ūlædm’I$’I$’I$’I$’I$]ŪI’I$’@”ŅH56’Iµ×"³dž I³ĮvŌ’l‚ I$’ZHIµ^Łóm–dĮ`’@(H‚@“o$› M²I$’I$’I$’I$’I$4ŚI"I$’@KH$€[õÖęŃŚ“ešæĮ7īæŠ$›l‚€I$’ZHÉx‡M°­Ņd¼˜’ €AŅæł&é$m²I$’I$’I$’I$’I$vŪm&& $’A’KhäK~’š•“DŽG€Ź,Ō4›l‚h€A$’ZHéÜSOȲ$› €‰ ążČšKwȬ-²I$’I$’I$’I$’I$6€-¶Ą& $’I$’Imķ’é%Ūߓ滷ž1Ō6Ód‚-¤€ ’KHéø ’‰Rb‚Ą‚I$€ o’Ś[ņ=‘ ¶I$’I$’I$’I$’I$°mæŚlÉ$’I$’I- ’’ž’Ūėoķ¶Ś@C0 $d¤€@$’[Hļ’h.S÷Ą [€I  ļ÷’] ūr¶I$’I$’I$’I$’I$€Mūż€É$’I$’I- ’’’’oņ[>Ō‰Ą)ŗø2I$,€ $’Ih’÷ɋæ÷gļŪ’’ćč~ßķ¾śm€Ųz¶É$’I$’I$’I$’I$ oŁ$’PŁ$’I$’I- _ķžŃ%ķ’ŅĖćBk€ #ų’I$L¤‚ $’KHm ķ™üžż¶ß|Ļ0FHLO’÷×d€Å/D¶É$’I$’I$’I$’I$-ɦßč$’I$’I- m“’’ŅŪŁŪią-¢ x’I$-¤’I$’Khļģ¤’o’ūŚß’÷܂OŪo’· ¦’Å»€6É$’I$’I$’I$’I$mĻ’²M“$’I$’I- m6›oYŻūIų“?2I$@&I$’KH’e>„’É$’ŪgŪm÷ųžū’„‘-¶Ść¾ČŁ$’I$’I$I$’I$-JՑ”Ć$’I$’I%¤/ ”’ɹ¤ 2I$ ‚ $’KH½$·&m¶Ū$’K-ß}¶ū”æśI%Øm¶Ū@£¶¹Y$’I$’I$’I$’I$%¾‹M6id’I$’I%$’@/KØæŻ&e“Ę"I$’II$’KHk%¶ mŽŪe¶I,’m/’ķō–Ū’@m¶Ū@³öw [$’I$’I$’I$’I$ Ŗ„6†l’I€I%$ė‚@p¶‚ī–I$’HI$’KH©$·2Æ’’’’’ķ¶Y$¶ķ%·ß²@m¶ŪH/õWģ$’I$’I$’I$’I$£ ²IW ’I$@ &’H½&Ūo­Ģ6†“€H$’@I$’[Hi%¶3?Ū’’ļ’’Ūm’[mæü’ Óm¶Kh-=6ßŃd’I$’I$’I$’I$@±Żž[8‰€%$ˆ’M$’H۲˒»–ÓvI$’H $’[h)$—£ŽŪķ·Ūm·’ūžŪßäŪm’Ii(Kn$’I$’I$’I$’I$ ’H5aū’ą© d$ȒM$’IŪ}¦ŃĪśfI$’H€I$’KHū$›¤ŽI€I$’Ū÷’’öŪ Ūl’Imć»m,$’I$’I$’I$’I$4“H2Ņ}½t¢I$ ¤’’M$›I$CōÜ ½FI$’I $’Zh{$—¶Ź ‚Ėo²Ūī¶Ū Ūd’IM…æm„l’I$’I$’I$’I$$ŪmĢŅI¾«“ B$¤’4’I$Óm¤šNY<øĄ™¢ $’I$€H$’[h­$Ÿ¦TI$Id€IŪd’I-!æżµl’I$’I$’I$’I$¤Łi"öRY%ĆD@$A$”’@$š$Ń$‘6˶›$ų $’I H[h­$Ÿ¤L[d’ $¶Ū$’I-£M¶Ū·Œ’I$’I$’I$’I$&Ł% UĀ[äüb‰$–Ūi¦ÉI$’A ¾ó½ēI$’I [h$—±–`0’ż$@Ł$’I%£­¶ß¶Œ’I$’I$’I$’I$&É$$·Züš¾˜A$’[i¶I$’I$’@&‚nžä‰–²A$’I$I ’Kh$æ#1m¶’öß² Ł$’I%£½¶Ū¶„’I$’I$’I$’I$6É$$Š•Ūž“Q H’Km¶I$I$’HmūßöŲ$’I ’Khį%æ”3m¶Ūm öŪ2AŁ$’I%$&öŪv„’I$’I$’I$’I$&É$¤™ßėŪśisH$’Im²I$’I$’HEŁĀ ’I$’I$’H$’Ki„Ÿ0Ūm¶Ūm“Ū[vHŁ$’I$&6ŽŪ6„’I$’I$’I$’I$&É$‘^›o\r $’I-¶I$’I$’H’vÓm’I$’I$ Ji­½;[,’Ūm¤ž]īČ&É$’I%$&ō³v„’I$’I$’I$’I$&É$„›:sŪmŻ`I$’I%’I$’I$’HH$”Ūl’I$’I$ $’Ii·iY$’Km¶t‚ķéÉ$’I$$ō«>©’I$’I$’I$’I$$Ł$„’'OšMūHI$’I$’I$’I$’IH$›d’I$’I$$’Ii;iÉ$’I%¶‘\m³¹6É$’I$¤õ'v­’I$’I$’I$’I$$Ł$“'ČŪ±”ĶI$’I$’I$’I$’I I$I$’I$I$€ $’ImIÉ$’I$¶Š[yg·¶É$’I$¤ å&6©’I$’I$’I$’I$$›$€’D«³74į’I$’I$’I$’I$’I  $‚I$’I I$€ ’ImBDŖÉ$’I$–Š[Ū½5 6É$’I$“Žį&uؒI$’I$’I$’I$$“$€’@łDÆy2I$’I$’I$’I$’I$’I$’I’I$I’Im˜ž$:I$’I$’Ś[Ķæ® ¶É$’I$”‚‰$¶ø²I$’I$’I$’I$$’H€H•z@ōä²I$’I$’I$’I$’I@  $’I‚I$’I$’I-²JI$’I$’ŚLF“ ¶É$’I$–ƒ®Š·ø²I$’I$’I$’I$$’I‚IīĄŸļI$’I$’I$’I$’I €I$’I’I$’I$’C-SM2I$’I$’ŚnHž 6É$’I$–‘†„ö±²I$’I$’I$’I$$’II±ō֝öÉ$’I$’I$’I$’I AI$’I$I$’I$’I-Ķ7lI$’I$’Ś7źHńä¶É$’I$’‘Đõ½2I$’I$’I$’I$’I–HM°w4NņÉ$’I$’I$’I$’I$’I$I$’I I$’A$’ImīūhI$’I$’Š_īHõĶÉ$’I$’Ńe0ö·I$’I$’I$’I$’I&ĀM6>Ž€ ׈Ł$’I$’I$’I$’I$’A$’I$’I$’I$’’Im¶ŪhI$’I$–Š_n¼t¶Ł$’I$’Š]$öµI$’I$’I$’I$$’I4H “ Õ zbŁ$’I$’I$’I$’I$’I$’I$’I$A’I ’Im¶ŪXÉ$’I%¶_īSdŁ$’I$–Y&4·I$’I$’I$’I$’I$ 6Ąz@A[ó‹$’I$’I$’I$’I$’I$’I$’I  $’H ‚Im¶ŚXÉ$’I-¤“īōŁ$’I$¶ŠU74·I$’I$’I$’I$I$$ŠZ -N£d’I$’I$’I$’I$’I$’I$’I$’H ’Im¶ŅŲÉ$’Im^ÆĪ›Ü€Ū$’I%¶Šv3“·&I$’I$’I$’I$I$‚I&IŽä@-½d’I$’I$’I$’I$’I$’I$’I$ $’I‚IiöÖŌÉ$’KhäćN»œŪl²I-¶€sķ“·¶I$’I$’I$’I$I$’ICV’H+Ōl’I$’I$’I$’I$’I$’I$’I$I$’I ‚JiöŚ\É$’Z@ż&sŹA™Ų€[m¶Ūm¶€sm%¶¢I$’I$’I$’I$I$’H‚^ŅŽ‘ ©”L’I$’I$’I$’I$’I$’I$’I H$’I$Ii1öŚ\É$’ŚY£sxHõŲ€m–Ūm¦€rm“¶āÉ$’I$’I$’I$I$’žö–ß©!½1ŒI$’I$’I$’I$@$’I$’I$’I$’HižŚZI$–Šj…3xČōŲ€›m¶Ūm ~M$¶āÉ$’I$’I$’I$I$/ķ­¶cūi=ļY’I$’I$’I$’I$ $€ $’I$’I$’I$’IiļūJY$“€jó¾fĶČÜؐm–Ūm“vId¶ōÉ$’I$’A$’I$‰zKvō-ZM%$¹’I$’I$’I$’I A$’I$€ $’I$’HIļūJ“$“z=öį?£|[m¶Ūm Ū$–ÜY$’I$’ $’I$ WŹJķ[iæ’‘2I$’I$’I$’I @€ $’I$’ $’I$’I­’j‘%¤ ōO²sŃļŻ’@m¶Ūm“-Ł&’ÜY$’I$‚ $’I$ ¼  æ};Ł’ļŹ†I$’I$’I$’I I€ $’I$’ $’I$’BI­æļ“i ¢’±ņe¶zģ’l–Ūm¤)’$’XŁ$’I$’I$’I$ ½"@—’ż²Ė$ަÉ$’I$’ $’I I$’I$’I$’I$ I­¶żi„7O…¾WCžģņHl’Ūm“€’$’Z™$’ $’I$’I$“Z¼¶Śm>ßé%ŅŁ$’I$’I$’I ‚$’I$I$’I$’@I‘ XI“ķŅ\oȘ·mžÉl’Ūm¶Š?äŅ[‹$’ $’I$’I$ö[:¶Ūa¤“;žŁ$’I$’I$’I  $’I$’H$’I%2mI#’H•æ¶Z  ĻgÉ$žŁ @l’I%¶ŚģŪK $’A$’I$’I$öšŚø¤é$“ä7 ›$’I$’I$’I$ $’I$I$’I$’RIŅMżĀD”ŖJUłnż»$’H,’I$¶ŪhģŪk$’I$’I$’I$[Ņھߤ·’ž“ö—ö‚$’I$I$’I I$’I$I$’I$BI‘mīƒ ±ČHżæä¶Ł L’I ’Ūhģūk$’I$’I$’I$KkI Ś›É’ė¶’“ꔿ’ƒ$’I$’I$’I$@I$’I$’I$’I$’JISo\‰'@Ho`mIhż·ü·’$l’I’KmäŪkQ$’I$’I$’I$ImM[’[ś {Ņł'~Y£$’I$’I$’IHI$’I$’I$’I$’BI[m ÜŁßŪm¦[m½¶ßż·l€ ’I$’KmäŪkS$’I$’I$’I$I-­¶[ņKŁ$Kz_u’I÷$’I$’I$’I$‚‚I$’I$’I$’I$’IIMZwŽų$Óm¶Ūm ¼²Ūm¶ģ€ ’I$’IiäūkS$I$’I$’I$I„­  ž$oO’Édd’I$’I$’I$’I$’I$’I$’I$’I$’KI›nZ-ŁĮ¶Ém¶Ūm –Ūl–ä€ ’I$’Ihgūj‹$’I$’I$’I$I“µ o¤I$ł*é|d’I$’I$’I$’I$’I$’I$’I$’I$’Yi#›mõä‚[Gm¶I$’I- ’Ė&ŚŁ ’I$’IH??æTK$’I’I$’I$I6’¤I$’抹)$’I$’I$’I$’I ’I$’I$’I$’I$’Ki#›mµ’»x›m’I$’I%““i¶Ū{,’I$’K@¹żū\[$’I’I$’I$I¶ŅŌ’L$@€@Ć$’I$’A$’I$’I$’I$’I$’I$’I$’Im!Ėm5e3RŪl’$’I-“›m¶›or,’H’[A©’ūT[$’I$’I$’I$I6ŅT€’I$’i$’I$’$’I$’I$’I$’I$’H$’I$’[i#›mµHŗčŪd’Bd2I%“›m·³mj’I$’ZĻm³@Ū$’I$’I$’I$é6ŪZ€’I$’I$›m$$’I$$’I$’I$’I$’I$’H’I$’Ii#ŹI%ŸvŁ$’Bd2I%“›m½¶mj ’I$’Ņ {m³"Ū$’I$’I$’I$½6ŪJŠI$Ņm¦Ł%“›$’I$I$’I$’I$@’I$’H$’I$’I#ÉI1жŁ$’I$’I$¶ƒ›m½¶ĶīE’I$’Š{mžŪ$’I$’I$’I$—¦ŪKšI$’m¶É$–Ł$’I$’$’I$’I$’@’I$’H’I$’I!Či++Å6É$’I$’I$¶ƒ›mµ¶Ķ½E’I$¶zxlš¶Ūd’I$’I$’I$—¤ŪmzI$’m¶I$’I$’I I$’I$’I$’H’I$’I$’I$’I KIžŒ–I$’I$’I%¶›m½¶ŁµÅ’I$¶€z螌¶Ū$’I$’I$’I$ō›m[@ $m²I$’I$’I$H$’I$’I$’ $’I$’I$’I$’I$[i9¬,’I$’I$’I%¶›oķ¶Ł½Į’I$“rąēE¶Ūd’I$’I$’I$ \›mÆ@$l’I$’I$’I$$’I$’H$’A$’I$’I$’I$’I $Ii9jL’I$’I$’I$¶‘Óm½¶Ū7‰’I%“r{®-¶Ūd’I$’I$’I$$“m­H m’I$’I$’I$$’I$’I$’H’I$’I$’I$’H $;Irm–I$’I$’I$¶Ómż¶Ł6’I%“słqm’Ūd’I$’I$’I$$ Sm„ml’I$’I$’I$‚ $’I$’I$’I$’I$’I$’I$’ :i9Pm¶É$’I$’I$¶smż¶ūvزI%“öO d’I$’I$’I$’I$$‰r}µ½ @l’I$’I$’I$’I$’I$’I$H$’I$’I$’I$’H ¦*I¹Qi“Ł$’I$’I$–sm½¶Ūfš²I-“ü›$’I$’I$’I$I$¤.“µ¶‚ l’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I¤"IQm¶Ū$’I$’I$¶rmż·ŪnвI-“Ū$’I$’I$’I$’I$”.oö—“ĆI  d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I $`H PI¶Ūm’I$’I$¶rmæ¶Ū~Ń2I-¤É$’I$’I$’I$’I$–’,ožŅ¶›m  d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I $e’]P@m¶Ūl’I$¶Š:mæöŪnÕ6Km“m¶É$’I$’I$’I$’I$„’ OžŅßūżäd’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I-¤'·żP€M¶Óm¶É$¦.m·¶ŪmÕŪm¶Ūm¶I$’I$’I$’I$’I $€ OżŪ[’’ŽŪ$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I%$VßżŠ&šI¶Ūm¶’mæ¶ŪnŽŪm“Ūl’I$’I$’I$’I$’I$$,M’ū[’ņ֛$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I-$\“o$ж@[m¦ŅͶöŪnŽŪm¶Ūd’I$’I$’I$’I$’I$ nOķ’kņŽ‹$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I!$]’Ū€’m’ßč[m¶ŠM¶öūlڦŪm¶Ū$’I$’I$’I$’I$’I$noķ»im–^‹$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I!$’ž€?’’’„iÜ m¶ŠɶöŪmŚ&ŚM¶Ł$’I$’I$’I$’I$’I$¶ß’oķ’i-²V‹$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I $ƒĶ“?’’ł.?ń ͶöŪlŚ €m¶Ł$’I$’I$’I$’I$’I$±,²Oķ’ķ­¶ö›$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$˜’’é.6IøɶŽŪmŪ M¶É$’I$’I$’I$’I$’I$Ø’’’ķ„·ö›$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I €b’@’’Ł&7}¾¬DNٶŽŪlŪĄ ²I$’I$’I$’I$’I$’I$H$ m’’m¤·“[$’I$’H$’I$’I$’I$’I$’I$’I$’I$’I$’I$Z$’I’ū&3ģČŽ’nM¶ŽŪm»Ąm¶I$’I$’I$’I$’I$’I$ˆ$M¶Ūm„æ ›$’I$’H$’I$’I$’I$’I$’I$’I$’I$’I$’I$„ŪI&ŪI BOū&sī[3OßņY¶ŽŪmŪĄm²I$’I$’I$’I$’I$’I$AŪm“± Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$‚Ūm¶Ūi$€’&3’É2_ż’ͶŽŪlŪĄm’I$’I$’I$’I$’I$’I$H ¶É$’M“­Ūd’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’[m²I)¤šåŻÉ#y%²m¶öŪm›Ō m’I$’I$’I$’I$’I$’I$é-·³M¶I¤½Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Km’I$–Ņ@üžoɲł¤“m¶ŽŪmŪĄŪl’I$’I$’I$’I$’I$’I$·Ūm-©%µŪ$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Ūm¼ŻČ“é¶ß’÷žŪmŪŌ[d’I$’I$’I$’I$’I$’I$&€¹$½Ūd’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Km rsyė’ūk¶ŪlŪÄ[$’I$’I$’I$’I$’I$’I$I$’6$µ Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I-¤öoĆæK’Ö_-öŪmŪŌŪ$’I$’I$’I$’A$’I$’I$$“I4’@å­Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Im¤ņm·į­)£-–ŪmŪŌY$’I$’I$’I$’I$’I$’I$“ŪM²ZIŁ­Ł$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’A$’I$’[m ņm’šY-)%$’IoŚŌ[$’I$’I$’I$’I$’I$’I$’I$’Ii"ŪķŁ$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$$’I$¶ŅI[’oėMÉ4„$’ImŚÄY$’I$’I$’I$’I$’I$’I$’I$’I%$mŁ$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$$’Km“™¶Ś`’bM¤­¤’YoŚT $’I$’I$’I$’I$’I$’I$’I$’I$¤@Ł$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’$&ŅI0-вŹ’Y„I„$¶Ė/ŚHŪ$’I$’I$’I$’I$’I$’I$’I$’I$¤€&É$’I$I$’I$’I$’I$’I$’I$’I$’I$’I$’I$AI6’’ÓŚY¾ūż÷’o¶ķ„-¶Žm’Ū$’I$’I$’I$’I$’I$’I$’I$€ $Ś6I$’I$I$’I$’I$’I$’I$’I$’I$’I$’I$’I$„›I%¶’¶’žÓM’’ļdI%%¶ĻoūÉ$’I$’I$’I$’I$’I$’I$’I$’I$’Zm¶I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$$’D[+.ßĻö’Ėe’ł%m%$²Ł/ūmŗd’I$’I$’I$’I$’I$’I$’I$’I$’Km²I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Ii$$–ö–Ķöūļ¶¶Ūm—ł$‰$$²M’’m“,’I$’I$’I$’I$’I$’I$’I$’H$’I-’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Ūi Mµ„³m·Ā’l–Ł%’m¼ŒŪ$’’’’ķ¼,’I$’I$’I$’I$’I$’I$’I$’$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$¶’–ž’Knßķ¶ų’g’ŁeŪm4ŠŪmææ’łō ’I$’I$’I$’I$’I$’I$’I$ ’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Ii$%ļ÷“}žūķ­ ’@ [ŪomKo’’æé,5M’I$’I$’I$’I$’I$’I$’I$’ $’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$–ŚH[MŁlŸ’’’żM’l’IgŪymYl’ķ·ūó5I²I$’I$’I$’I$’I$’I$’I$’’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Km4–Śmmę’’’’ł)4m²I$ņKe’Ūo’m·’uč²I$’I$’I$’I$’I$’I$’I$’’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$¶ŪI -­dś¾Óo’ö@IIõžI÷ŅC-¶[oūmæ’’õµI$’I$’I$’I$’I$’I$’I ’’I$’I$’I$’I$’I$’I$’I$’I$’I$’I%¶€’ŚŽ_¶—_ü–’’²@ `I··K4’Ėm¶{Ūi7ßķ­łÉ$’I$’I$’I$’I$’I$’I’I$’I$’I$’I$’I$’I$’I$’I$’I$’Ii $“ÖömõöŪm–ķå²ų4²{ü³Įe–[žŪIæ’ķ-čÉ$’I$’I$’I$’I$’I$’I$I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’KHIm6S÷ķüæĖ,’kd’m¶Łd›’ö”$’ŪžŪI~’턹Ł$’I$’I$’I$’I$’I$€ $’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’ZD¶ņÖ0¦ßķķ¶Ū%’ō–R¶ŪüŸ’÷²É$’’öŚKß}„µŁ$’I$’I$’I$’I$’I$ $’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’+IfŪ}’’ķē¶›~’’¤°Ņ@—’’’’ōɾŅ’’Knūi%·ą$’I$’I$’I$’I$’I$G’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$¶ƒV]’’’ž’ļ„¶ŪH’m$¼€‚’’’ō6M’’’ö²K,»Im·ä $’I$’I$’I$’I$’I$d$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$“ ×mv’’’¾[d’ĖH’ż%”>÷ķæū’ń2m÷’’ž’K'ūIm÷ōƒd’I$’I$’I$’I$’I$ $’I$’I$’I$’I$’I$’I$’I$’I$’I$’I%$^›¶’ļż¶Y%–Édæé-:Ļ_’}÷’’ä‚’’’’¤’[lŚIm·ō‚l’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I- õ»ķžŪom¶I$ß,æÉP‰ļ’’’’ļż·’’’m$’[FŚI,¶žƒl’I$’I$’I$’I$’I$’I$’I$’I$’I$’I ’I$’I$’I$’I$’I$’II¤žŻmŚ}ģ¶y$¶K-ߣ d /’’’’oæķ¶“i$’[$’I-–ü€m’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’IH•n–Ł&ŅK$›[l’É-æĖKm°?’’’’\Ż’m¶’I,’[$’I,’’ ²I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JH„~¶I$Ūm­·MmÖIeæėI$/’’¶žYmæķ¤–Ie’I$’Kd’’жI$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’REė¬ņI6Ūm(Y’’ūõ’ﱐo’ż·’Yo’m“¶[d’É$’'4Ÿ’˜&I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Ņ+_·” ¶ŚHI7Ł?ß’’’yYÓo’ķ·ŽÉ.Ūi$¶Ūm²[oÓæžß’’m†I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’:pdI¦ŅB6ßeū}’žZd²QūmæŅ@OŚI%²ßż²Ūm¶_’ū’’Y†É$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’‘zpI¢K·’Zfż·Ļ’’’ČD’Iūķ’žI~ŚI$¶Ū„¶Ū’’’žļ’’Ū"É$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$”™S e²[’śHÉ&Ļ’ś’’’ļķ“Kžßłžś[~ŪI%æ’$’Ū’’’’’ļśŻ"Ł$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$”‘ųöm¶ļī’Ęķ„ɶےößŪ’ū’’m’Ś’öŪI æż$’K’’’’¶žw€Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$”Ønܳö–6I!;ߒ÷ßO’’’’’évś’öŚI%æł,’Im’ż’ż'žū Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$¶€‰$Ū’Iž–&ٶ]’’’·ņI¶ū’·ŪI6ß’¶’I$¶É-’K]Ÿ’ši¶’ß Sd’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$–«4,“ō”&ķ¶Ł¾’’÷³Oæ’ż¤šIe’m“’I%¾ÉlņY$’žŚ·’’ d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$“ŗ¤%æ’ö¤·d²M¾’’¤’’’’$ŅIŪI$²Ie¶Il’I$“?óAæ’’$ l’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$¶€šÄo’’䶗'Žo’’ķ¾Ś’’’’d›i¶’I$²I/’I=’I%½ž›żæ’ż$M’I$’I$’I$’I$’I$’I$’I$’I$’I$‚I$’I$’I$’I$’I$–‘³Ę®’’”!6’o’’ļfß’ōŪk&ŚI$–I$²ImśKl’Y&Ł’Ńo’’ż¤M²I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$–‘ŸÖē’’ō$™6ū’’ožß’¶ŚI$–[%’Ū$’ŃśY-–Ł$“’Ųoļ„’ä¶I$’I$’I$’I$’I$’I$’I$’I$’H$’I$’I$’I$’I$’I$–‘—Ō„¾’žŠ¶ž’’’’’ż¶ŅI$²ńm÷ŪmæŪś['ößżæ’Óm«½’ō6I$’I$’I$’I$’I$’I$’I$’I$’I$I$’I$’I$’I$’I$”‘ėÅ’’ž–[¶Ūļ’’{/’ż¤’I$¶a+o’ķ·’’śK%æ’’’’Ūoi?’vŚ6I$’I$’I$’I$’I$’I$’I$’I$ $’I$’I$’I$’I$’I$–‘ĻEūoæ’’’Ū’’ūK?’’¤’Id’O[o’żæ’’’É%·’’’’›}i/’žŪ`6É$’I$’I$’I$’I$’I$’I$’I$€$’I$’I$’I$’I$’I$’‘oAŪ’æ’žßķ¾ūi’’ķ$–[-Śö’m’żæ’’žĖo’’’’’ÓI/’’ŅhŁ$’I$’I$’I$’I$’I$’I$’I$$’I$’I$’I$’I$’I$’ŠcŌ/–ū’ž’M·’o’¾É$–’’ ·’’ö’ž[’ū’’퓃I’¶Ó Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Ó>U$–ļ’’ž’Mæß’ż²I%·’’hżæ÷’žŪ’ķ·›m¤I’öŪ@Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’:Udšo’’ż½’I7ßķ½¶_-æ’÷ĄŅ@’’’’ž’’ķöŪ_¶ūł’Ūh›$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’RE$'’’’e’I6’ķ$’K/’’ņ4šHŽ«’’’’ž}>ūm [’’’ūm“d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’RÄ%’’ž’[d’I$ŚY$’K’’’Ų-¶ŚIżæ’ō’’óM¶Ūh _Ūo÷Śld’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Z5D(’’’ŪM$’K6ŚIm’’’’’Ųm¶Ūiżæż¤&’žIŅ€ ūžŚęŪL d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’R9Ą—’¶ŽI$’Y&ŅKm’’’’’Ńl’IMż’ķ _’ūI'’ [žŚo¶Ūm m’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’R,Væż¶ŅI$’Y$ŗY-’’’’’Įl’Iiżæł$·’’I’@ m6Ūm“ŪMI¶I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Z,N„—ż“’I$’K$’Io’’’’üŃm²[ißæé$æ’ó} ’@ }“-4ŚmI&I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Z/Ś…æķ$’Y-’[$–I/’ļ’’’Ńi¶“HżæÉ$æ’ūm“ż¤°$€I&I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’ZkŚ’i$’[l’I$’I%’’’ž€m¶’ŻŗH æ’’ż4 ISE @É$’I$’I$’I$’I$’I$’I$’I$’I$’A$’I$’I$’I$’ZCÜ'ūI$’Ūm’I$’Ū’’’’’Š $—’śK ’’’ż¶[h $ É$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’ZBĖśY$’K$’I$–Śm’’’’žŠ$·’ņZDæ’ū}6€ŚH@Ł$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’ZBųÕśI,¶ķ¤’I$’H/’’ņM’˜ %’ž²Im’½’o¶6ÓH$€Ł$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JFµ'śId—ż$’I$’I-’ż„¶’Ņm¶“’’ö[oż·’O¦Š¶ÓH$™$’I$’I$’I$’I$’I$’I$’ $’I$’I$’I$’I$’I$’JF‘’’_’ūż%’I$’I/’ķ-‚[óm¶Ū’’ņ_’żæś¾¶ūģ€%€$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JG“ö–’ž’ģ„I$’I’żm"]ūMöŪ’nßņ[’ķ·’ķ¦€æŚ d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JEżō’ß’’ōä’ļ6’A_’é$¶’o’žŪ}¶ßŅ’’ķ·ūI¶žŪ@†ˆ d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JEõ¶ß’’õ¤’É$’@’’če +5·’Ūł6ß’žŪy6›m4/ļÓL’‘` l€d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JAIm—’’’’ō’}ößķ’’k,°óß’ū¶ß’¶ŪI÷Ņi°/ė’m6ŚH¶€H$l’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JAKm“’ß’’’k’ö]’ūKdď’ūļžÉ6×’¶Ūm&Rl-“ūi¶ŪĄ -l’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JDé$Ÿžß’’’’żśIžŪ’É-’ż-›o’ķ6Ū’“Ém‚Šm'÷m¶Ūd¶ČIl’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JH¹$’’’’’’’’’ž›é$’’’žÓI¶Ÿ’“Io’ūm¶Ūm¶€[ M’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’JHæä’’’’’’’¾Ūż¶Ÿ’I$æ’ļūžŅ¶’ļ AvóM6Ūm @Ū@M’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’HH?’’öŪ’ūķ¶Ūo¦’k ’’ļ’ö€O’’Ģ }¶Ūm†ūi2@’óH ²I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’ $’I$’IH’’’¶ßüŪk4ŃŪŁżæ’’ōÓķķ AoöŪm–Ūl&–ūh ¶I$’I$’I$’I$’I$’I$’I$’I$’I’I$’I$’I$’II’’ż¶ķžŚm“™h{ß’żæŪ¾Łģ’’¶Im¶Ų Ū%¶–Ū ¶I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’II’ļé4ƒ’³ķ¶ ’’ķæūm¤Ūś_æ’žŅKm¶ČQ$’¶ū@ 6É$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I ū’é¤ß’“Ho’’mæŪm¶[ūÜm¶ŲIm°Čµ’h@&Ł$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’IIū’m”æ’Ūm°[ļžŪż¶ūm KŪYļ¶ŚKd’ $¤Ÿ`$Ł$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I Ūom^¾’ūmöĄmęŪm¶Ū zIżōš %H $¦›@’H$Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I) Ūm?Ū’’’m“€Ūm²Km¶Ó ś_’’ö›hA$€¦’`’@$Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I)"Ūm&Ÿ’öūm¶¶Ūi Ke²[[’’’ż¶Ū@H¶Ū$$›d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I)"Ūoéū’ūm¶€%¶Śm,†Šß’’’é¾Ūl€€$¶Ū ’@$›d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I%"Ūė’żöŅM² -$Ū`Ū’’Ūm¦Śi”€€$¶€$›d’I$’I$’I$’I$’I$’I$’I$’I$’I$I$’I$’I% [’Ūķ¶ŅM¶Įi.[hßļ’’}²›L“Ų€$¶H@$›d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I! [oöŪm¶Ūm“Ūof›mŪožŚ 2Ū $“Ą$€%¶@ $›d’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I! [mö“m¶Ūi"ŪovŪm6Óü±d’A%¶I$€° $›l’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I!$[m¶’m¶Ū` öŪm²–Ū’öšH%¶ĄA$€ &Ūd’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I!$[m“›-¢_žŪm¢HŪm¶Č €@$¶Ą $I6Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I!$Km¶“L‚@ Ÿū’Ūi$Ł–Ū Ųh’@m¶ÉI$€i6Ūd’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I!$I$¶Ūi€Ū’žß}¶Ś–Š‚@€ m¤II$€@I6Ł$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$$€$[l[’öŪm¶Ū$¶Ą’Im¢ I$@’I6Ūl’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I%$ŪDß’öŪm¶Ś€%¶ĄJm  I’I’I¶Ūd’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$¤€’Ū’¶Ūm¶Ś -¶Zi°H’i$’I¶Ūd’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$¤€ ¶’m¶Ūm¶Ó’Ii"Zm€H ’I$’I¶Ūd’I$’I$’I$’I$’I$’I$’H$’I$’I$’I$’I$’I$¤¶ßm“›m·Ū Ki$[m€@Z’I¤’m¶Ūm’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I I$¤€–Ūm’[%¶Ś[m¶[l€@H’I$›m¶Ūm’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I I$¤ ¶Ūm²%¶É[}“@[d@$’I$Ūm¶Ūl’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$I$¤d¶ŪL–Ł–Ą’ż¢ @[`@$’I¶Ūl¶Ūm’I$’I$’I$’I$’I$’I$’I$I$’I$’I$’I$’I$¤m°’Ū$’I @Ūż²A ’I’@$’M¶Ūm¶Kl’I$’I$’I$’I$’I$’I$’I$I$’I$’I$’I$I$¤$’¶II$–¶½²I ’HH$’’@ $’M¶É$¶Ūm’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$„‘-°@$°I$’š_¶$@ $’@I$Ūm’I$–Ūl’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$„‘-°@ €—¶żI @I$’@I&Ūd’I$’Ūl’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$„‘$’@$·÷łH$ ’I$’H‚I$’@’I6Ūm’I$’[l’I$’I$’I$’I$’I$’I$’I’I$’I$’I$’I$’I$„‘!’@H ·’ķ¢I$’’I$’I  $’I“m¶Ūl’I$’K$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$„$H ·’l $I$’I$’I6’I$›m²I$’I$’I$’I$’I$’I$’I$’I$’I$I$’I$’I$’I$’I$’I$”€–Ó $€$–ūmA$’$‚I$’I$’I¶’I$Ū$’I$’I$’I$’I$’I$’I$’I$’I$’I$I$’I$’I$’I$’I$’I$¶ -$’[l$H$‚I$’I$’m¶ŚI6Ł$’I$’I$’I$’É,’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’’¶Ł$%·Ūd€I$’I$’m¶ŚM¶É$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’’%¶Ł $ -¶Ū$$’@$I¶ŅI$›m¶[m¶I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’’%¶Ł$ $’@-¶$‚ $I$ŪI4›m¶Ūm¶I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’’%öŪ`€I$’I m–Z $$I$Ūm¶Ūm²[l²I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’R%¶Ū$$’I mI$ m¤I$Ū%¶Ūl’Im¶É$’I$’I$’Kl’Y$’Ä% 0@P`p!1AQ€ Ą’Ś?Į‡¢F.>s…%Ā\c¹ĀpF8z7‡ćV5ų‚w0čeĮōœŗhń×yškĢ0ĒcŽǤåŠōĆ DŃā:gÉÖĘ]ŒT­œzL¹rżcä/žĮŃ4v¾¹ę¾0DŌ˱£«ƒI‹/SŅ0m…"W@ŃÜė dަ.1ŌŃÕĮ‡¤ĒŪ1 ½ƒµC­~mųÄv¹rö4upaeōŖV÷čLcW¼|‘…Ė‹‹—/7Ŗśį«rs¼‡Hł7„rō¹rž>Ż1]¼KņjWóßαé1ūźÖ,zOIō2āż[ć?£\¹rü‡ōEāgögö£Ų¾#ōj•*Wq——śīā¢tĖ‹5ŅT8]ź'›Œe@„?L ™xw¾F1`ā°0bÅ.\т&ōŅ&2į2„B赃F$HGØäC+ųé³ä&āāĘV#ńƒgĪbuźWµR„J•+źŸ=%Ań•*V*WÖ¾EĖ—€Ė—‰ń5+uŃśsråĖ‹. ü@„¬Ü¹rō©Q#šõČó˜|g/Q„ ¾’„JõIrųˆ#šõĖ\¦¦ā0½7“ųä`ų*•*WpŌĆćq‹ł£ølEqĄĮĒCa‹j鐣?{†ŽĘ¶ ’;8įŒ'ńƒµéX½ P:d6c±÷µÜ®ÄpюĆeį’pāåīJ•+ •…WZåĖĀįģu*V*T¬×ß\¾ ģ›F-O÷„©R„J„T©R„Jå©RøźV‡éogģėJÖóR¢j14`ŁŽĖ …Kd Š•*T®ŗp­XųOŁ‘ČĒ`Ń4#у”0o+5Šx HĒsf1ēÆĆĀVÉ£†‰‡Š7w!«ļRæ­5‡ˆ8ƒfnš\¹rōcčæõ : €•+‰2¶ ʤ;ĒĄĆUģÜģ?a%nź9¼Ž‘2®Hõw/--xčšÜ0šV«ēłŲH+č*W Ėä’1R b„s¦ ¬vØ#‘ŌՇĮæļR£µJźø02į܈åĖ—.ަĘ^5‡ńę?!R„JŚ»•jļy/…éNāX7Ć^cõ7.\øp†®ė\"›±ÜqŗœO @ÆUśÓg$!«‹””—)rņ³rņģC‘ŠāxN[ņ_Ŗr`ŃĶą@įŒ0ń˖ĀōØnģCwWC„P*[|•łŃ`߄żiƒDŃp)žī1ā8†.Ė—.\¹rņģĮŃĄŽ×„b±]3gėC qĀĖĶ`bę„JŌ8]Ō!Äņœ &•µv̼ĻĢÜø=āĖeĖ—Š•+€eĖÅ`8^ŁŃå1Qɋ—?׌eę~ūD9\˜žŽ.9¹råŹ•*Wąįc¹³£ŹeɊ•+Ę2üyњ‰Épp’„aÅJ•‹—?‘•+P•ĘīE S.O(Ė;5 <·^Xeeéråō^ ܼĆäņˆeś’cÄe•.\¹zI ±+<7.\¹rąõ÷Ÿ™®GR,>I īlåbš²åču÷ߓ6M]Œ=•*T©]21Ų\ ‡+²Ē’ŗoɛ:ÜxČG”X­k¦0ĖBąCC€p1Œøg‘qyĶŒwމ:Šįzd0ĒJ†o†]G ė1ā¹}Dł2=ģ1萆]ī,øį—.×.ģ{ģ~HÉ£{„xNv=k/ ±‹/ŠøGŻ}ĢŌyˆ`šœģzG‘e‹.1ĮŹźCC/ą?4ņ„ Čs±š8\ø²ć“•u52š?tņT5w!ĪĘ=Ę\øK——¢±ŌŌĖĄż¹—ą¾=ĘT©L Qč1ŲŌ˾4w^‘Ļqr J•*V^v;›xXxʚ>EŏˆĒ™ŽęĘōŖWą‡Uļ¼Ģw8ńŌ©XT©R„Jćæø=3[Āó1ÜŌŃ䮚¹*V*Tƽz×½ģ —ĢĒsRzŌf’¼É\wš•+ģ­ąķ±ÜŲź¬¶ö­ŲEØ7Ē|U*VÕņ Ąy‡qŽĘĒjōŖSüēaóɹÜ<×b–2××xÖ³(īwbī[W¾59n^ŌķVĻÄ\¹råĖ—Ąq=ā©W'ń+w¼:n?āų¼IŗWRļ寔įcĢae±¼fŖĘ;š›»Ō`¤’'ńįZƒ}ŗśC…-\"°¤Ŗć0įuz·.<¦ļ_x?8*='’åĘ\¹råĒWžåįą9;ćø7Å|ó0ņ\¹|oh‡JåńtUÓÆ 8.=\¾GĒ!Ē[¬4ü%ŲżÉpā¹z ƒ:¬5Øöˆq®õć××\¹z,:8vøöˆq¬b_÷ŽļJŽłŽ%ū³‡ˆįc£ ®=³Æp0˜X~²®!‡ •‡†ać¹|F ēśümąp¹Ø‡5»€ÆĒCSv;†ģ|sAĮrųæ·Ģ_üö/ģ.^ |bØ?‘TŻ”°į¹peĖüEŻĖĀAįu|be\ØJøł) Ųźų$4ląZŠā@®°~4CÕšHiR·ø°?½›ü`F> ̬׿Ū0øpŗ1šN­ņ_÷Jæ%Dū*•+‘Ėį:„Ą®:ó̧¼ś'Aˇ|Ėq¢t\1šNĖóL±õ'ą\1šN|Ńõ&>µĖ—/…‚p˜ūęØC…”råĖ—.\¹p`īĘ1š#ļš>©ÄĒϾ!†ģcąF>ń«źœO“·cā1÷ˆfć»ēLO€1€qūÄ8ß<āHūŲłgŽ!Ęłä8XūŲų¼q±ólj"{f>Ęcļ <,OeK—.^ųÅ>€Ć…‰ģ ¹råĖ‹įŽ/žˆń$}›—._ˆ8/Ą_čxR'Š Ų¾1ō† cóćwŖ3R½GÓ$‰ó¤;ƒJ‰é¾˜Ć…ĪŻźj'¤śƒ/…"|į ŽØŁ‰ę¾Į…‰ęČnõ!µDńĻxaĆQ>l†.^TCv>1ļŒ8XŸ4CwŖ!»†“EĀÄĢÖåŏP†ģ|bųĮįHŸ2p½B±ńĶ_lx’'Ģ/P†ģcāā}aƒĀĒč^”>1Äść…"}Ō!ĄĒÅ!Äū …‰ōP‡Ø š±>}źącćPąyŽƒōµ*T©PćHĒäĪ˜ēæMō*T®‹Ÿ&p<”²ĖÉ„Ėūw ’8@ŻŠśS®āćņGʶ]LÜæøc“8š„5ø±u2śļ«råĖ—.\¹rōc“8£†.Ę.>»é\¹råĖÜяŹ w,_|ū—._BžTąw±büšļǜÕ Ż–/Ā?ī‘ųćŪś•ŖÅųWāŽ8ŌØHV«_įÆĒŻČ@†«ĆĢ~4†ī.ÕüD~8‡`ŃaŽ"\ Ɛā2ą_ŲN#…oįŸĘČqš-ü;ųŁ—[żāXžŹpÜ~!üxżĄżĄżĄżĄŻõ_ĶqüŠżĄżĄżĄüAś·^ņoŻŌ©R»ļÉætf„J•+ōė—Ś5©R„Jķ?š“‚„J•+öCģ‡#ū!ČžąžĖ|oģ·._ ūEĖ—³ūUĖ—//wū-Ė’Ž›żĀæ÷vł·Ć­WZ£łżz/ī/č5ūEp/īŲ¾’Ō?æšTĆoÆżJü»ü…æ¶Öoæ§_÷Ā®ėó[įy½_3żūe@•*æxZƒĄ—ģ_Ą_×ÕŹé…yæä÷ėēÆ÷ ńÖ ņėü˜{õ*¼•ł0W”}šż`+ōU’Š?ļéLæ×żfüė÷Ē“žvkņⷐļ·ģWć"’ćŌæ6’ !ņµČĆšŅ·ż¼‡eq%śIųÉŪČ~ŽCöņi«~俥ņÓōS÷÷·ī_źd?o!ūyŪČ~ą~ą~ąCöóŽÆĢÜææÜ+ņ+ż½‡ķ©ö+÷!ø0’©‡’ø'’ĆŌņC’Ä$ 0@pP`!€ °1Š’Ś?” Ń0Dʉłƒ”Ō^h>4ź!W˜ŲćČ/”5šŸ4qŠ^lzįŠ‡ž ł„ü”  Ę:‰†ĮE¦m OĆįEa:Ŗ(½c@BŃ6 ĆhńĻ’0 1¤ {'ō ƒ“d5*`Ł4B O°-AŒč˜h(>,Ų`Ģp‹›ŽÕ^0›,ʆ¢ ³ ¼s¢ ÄyäÜPi1 ƒäÖZƒ!Ń1@"ń_ŠøćōU‚ !€ČDĘ>hśµŌ#Ņ1ykėĮŠ4hŽÆŌQb8DOÄüOÄüB¬ź+R"(D8„`z#TX*Ep~x”õH†į‰Ąq( ‚†k= Ćpؽd ŠčØ ‰Ā:9øTiƒ ƒ‚(`G0šóė˜m‚&ƒGÄCƏ°m** ƈŽŒb°A¤(Ŗć!ōp"38į>cŽ>0¢Š(Tp@røč2?Uq5QEQPŌh¼ĻQ^žMEšŖN?‚¢Č`ųCA¦> swEäŽ0wɀåPD>@ęBŽ8óŗ ? sM\~øäŹēqĒSA…Ē 9y£Ž;V|ńÉ^#j‹ =pĆ¢h=WŹ˜ƒ®ōMV Aā ĘĮĮŌQjš ŒZcuź:Øøą54oMų…øō ĆiE¤cŽ=§W#'lŲ6T\\Ē›ń€¢ā†Ņ5Įę¦4 F#E¹Ń|ĆʂµE@"‹9ņ A 4Š+æĒ6Ž ,0Į Ą¢ŠåkĢ|sĀLp 0A¾öćį&¢„ĒQ ć°^š=3“掃 į&Ž8㨃X\ćdŲ5 6Œ&įĄĪ˜ļ8ćĀl¦Ń„š•P‹‡œ0˜j5MF3xą¤ŃEšŁ6 &C üpcŽ<É7‹Œ4bĻ>+Ž×x¼ŠAˆc7 Gˆģvƒy°ā4jØDPB‹‰•č+Ž!˜\h øņu–/9MQEÉčĪ4Ķ,gœ†ƒ¦ ćLŠAˆõØ åēMlŒ's¦ņØ”ŪQA™ĒG“¢Žv¢ŖŠ(Æ8ĘqŃĒ{ωŖ(®QA‰cĮŽ8ćŽ8čźłQ²˜1,C¦­¢;ŠéK8ĢpŒ (¾E}Y“ˆ7ĪW~øŚ'źĻ„jzsśõĄ_ Ī=•Qu#Q¦¢ØXz ”¬Q@"¢¢ėCĘ\4ŌVˆś;Ut'°EĪ?ŗl,ēŁ@y Õūh?xGĻ Cū†{ļ#øóm kŁ<Ż’ƒ*.ęćķŽ;Gų掏ö­E^»Ŗļ+ø>ĢxįŹ½„1‘qÓAū‡ćĒöÜqć|eÕĒś ¾ųoƓ}Xru]Œüyģg]Zŗ” Õv¾ØsÄmXWfĖ«š8 pžÖlį#±ąyłōOľN~ ņƒń”|ņƒ„{ē”#ß6HpŽĪz1ņF>QÄ=óķ­8‡f8‡D¼cˆvc„vs„vs„vs„vs„pōēżq?īhż×=Ä÷ÜOq=Ą’Bgõ½EśŖ0>Ž{{‡“‹nqĒŻ] Ž;C¼Žk6Ū @ķąvC~źžą{żą?ÜŪ·s}Ķ’3 ł±ęk’ƒažžņźępxp=Ą÷Üū‚{żą?ż3Ÿ’Ä,!1A 0@QP`aqp‘”±€ĮŃįš’Ś?Į6•(Ęųś\óŽGPiG’ 1sĢYƒä©„’ā/"Ę=0å$nĆqŌEŠĖš„ÜcØą•«œH~ЊÅį+éę”˜­É,.i€HŪĀžMAd9x—!ÖqĮ‹jįŽ9ĪjrŒ}äŗ9AÜ©’ųø!ųq #,Žż«IPKˆµ‰j.ń^"&ė–Åu £Œ?żƒu„Bbņēö”ĢĀ‘ĖÜ8‰$a2C&ž.XŁ n*ƒŚÄ®¢sx| R™oR̆łŌÆÅ‘ź^ąź\=ų„t'”+9įā8„xœšūłMNPė7¤Ø5åZŒ!ųq Ž5įVEt+ Åug™4åduęXĒBn;Kƒx[iL4±K-Ė“in  IżĆb¹l«ƒ<”¤Õ©R£˜Ė”sņˆ„’X֍±"’¤gõ“Jø1R ĀŲ±ž°GʱQśE‰#ŌXµxŸ K “ą\éKrĻ/0ÓGŸyø)Æsœ„²@ĄóąGXĆń!Ń9ņYÓfąŹ£9JøMĖ" Ą 8U*bNSŒ‡ZŠN<ÕF˜ŗA–‚ÖÄV¦²Ę„ą ‘B1¤BUCØ÷. ZŽkŠŲ"GĢ€P§LCwsY§Ņs,²°d[„Ķo/>š„€xŠ6‘łĒK1œ—¢ĪI«ąBŌZć(ŠÜ®œ10p|ø¤̵¹¢œ¢Äóąw4ĮĻāJ6Gī ŖŠŽ§·CdMƘG˜źĄY+JE,Ŗe"_1XYVGkQä‚A”GE7J˜ Y?ŒŃ–źhÜiŒjœÄq—‹Žyʁł\wqƒČPm‹zŹGˆ4ܼ\S‡ —Sf£¾ š•ℽ\Ÿ<Łą›0B\Qe* ųŒ ź%Ād˜Œ7gSCqŗŲżä±Ą*!X(‹qĮ-‹įL!%ü”x§QUaVY°‹Ü* \R– Š÷*ę°ōdBĮ·ł,Īuø0Č*!µ@ŗ„S)ŌŁHåu* DIP Å[Q—“¦āÖ1=*ø ŒtÜįÄeęņIY¦‹qņ2*–›¬ü?Ž`$ӈó‡LŚ \T°‡qņaš3œ>Ųē.¼ĘÓPu„ó,[Žķ‡&“ąB$f QIw0Œ4Ė„KvAMA©m%Ü ˆD„#ĘåĖĀįRŒp©xŌXĄ"—ęg”Ad»µŌC?:¦8#ÜWą ŗ>'0āā%Į©©*™©Ē%£ ȏ¼ęD­M•ÉԜΌåa%ĢXņąĮGšūX†ę¬¹¾ÄJˆ©˜V¾„éĢSÜÜ¢ń‘‡Ø©Ü¶ÜØ.†(Łlu.Y—.·³d(ܲK— !hŅs M„øźĻ(IüÜŁ› Ž¢ßĖ—’1ƔRńpa ³u©L؞dqHŽ:Ōč„n¢µü±ś‡Ÿ(§æhCRåĶ!D[ၨéudl›‡l¼6 ŚĪQŲ'Ņ o)gFI“„ÆŲfĆ8qus掾ā¼J–˜sspÅŹX†œ7eānŁ.µāx±nYŅZJø¬ēŪ–²č«*ć ź•`4ĆYž@“¬`ąYx¹x¼^ ~Äs~H·/5;šŠÄC£ū B »¢ź!׹HG˜Eą<«‚^:Šs+-¼_UxT©tP£øĄFńŗø76fŲ ÅŹ\²Aضü*‡“ģ2 (öˆ82ŪMVS-ą™\æ,6ˉdõągŻāüDŖJ·(e°Å^†Ź„¦"&¦Ü˘īV[ ÄeŠĖ—.\¹råĖĶĖˆ…Qņ ¹¼_‚* ĪJŪLŻD ßGœĘ{‹:ü^> Ēé¬W•d%J•-“RČ^‡Ł•§¶%ͱ2ü0ü$ʚbX¼Łŗ][ˆŌ–Ę1|ˆ3y|+ÄHĀØeŪå~sYgI)]NRēlPSpŠT¤.ȃIÉī XØĆl[}d|.[.üˆq,AM3™oARĒJ® Õ)Š/ŌæĮo7 DÆ*ÅĪcčÆ:•*TØ„C †”ĪO”rݜæyƒp„ø„_ėTpžŹņģ* 2’Pī(ŁQ“cĪ6‘ćA,P§Øōõ„®ąŌa¹µ ßPFł%˜§ņwdݹZ…ęŻī:quھĀSˆ¶ī EÖ %’ü]1ųnāąbŋ„),‰Ā8<._¾ NŖq‚8 @– ōK gų%Eiū”$Ś}UB,å* œ?ųD%į‰ó("ø Ł™cäd£¶&„{M‹é'(&©JšHŃWĘWżBH6ā ).”*ˆø²š¬æ&źm(?ȵ༛šUø”RåĖ—ųĀŽ5‹—._®°ZUJ+P#„ĒX05fćÜ솗£l·`Ė—²o“©Q#E{„B\QŌģ\©{J5F)eRgpÜeQ"cŽś›Ė®½4Ģ+‘uxbjĖŻGqŽ5FQ ¹kW2ĪGėDŁŠSł‚čāĮ ’ā}¼Ļ –%æ‘ Ė—/ŪR„BS8œĄ•‹ŒŌøµ.^.]Gq`E¾`¶n>„¹·}Q„š  ÆSkBTIg؆@īƀ|#(]½P Q x%TU9£"{Āę^É”øŃńŸ1„,¶ eJŒ`\“¤źĆD^HeœąĀß3„±+JC4L \­Z–EæĢ% µõ8y˜*K—ąyT©R„JÄĄ.ńļqråų1/ņ"ī7Ē2ē³A÷Ž J• Ū÷aąŁpģcCāĖ÷ϳī?|-ęRęYåŒA?‰Ż‚Į•åpsd-0œ„ŃN–u6KĄ(Åv"Ōåø©‚†Ü;«ƒd©^IUIrµ‚$Yr‡É D‰äCē*lJ•š1u›—.óråĖń2`ć[0XæSšĖ¢Ä XØ-ØØ#,¹ųc)+*oŒÄœ‘åź(OHœ<*TT§Ē”„@ÜøÅeŖ réĄR…Ō±¦"±ģMCilĀ…£ˆ„Œ”Ip9 7QlJVTHü›GōA*…Ęē)üC˜˜øaeÜqXų©R„„¶żCjĪęV%•Ā»Į z–A¢0b¢^×Ē~•Ā”* g€Ŗ„§]n-™¬pF„Ļ˜0'9HŽ\¦[”ėŒ»gŪė KČ+dt›¹ƒ…Œtˆģ€ᨑUŪ”†īS£+äļP~xš¬Ō­fąEźq.]įeĪp©W*VDU*(ą–ol{CtŸKœ”¢åĒūŗÅĒSfåĆū QߎūĻuĢ \ –‘l•„¹ClŽ.-ųņİÜVų„ t©kB*ĘÜæ‚.2‡šhš¾”°vJŖIƳ’²Ē€žĘÅųĶ#.ss8ÉJ”“ ĮG3I“~CÜ8üüs„L¼¼K—/Ī0Ź•+xؚpŠ•Ž'ł y‰NāTٚ;‹¶¤v¤Kžćµ+,źw›©wĒæ€xr ²¢K`ÜŁ-LµĮ’åĒĄ@„Ź ™x†”$”ƒØüås·OŌ( Fló/Ó.īø Ō5' ¬eD»¹w²XĮČåēĪ‘T}&*T-5ÄHJeT­bÆpŒ¬ĶˆīY„½Įcą”‰¤„ć&ęĖƞ!ø.qŌhźXÜŗ†[†ŁRō¹ ‹pJ!¤DÄu7’bÕĒLJŅJu@ØBĮū—– E[—rœ ZT `ø”ĘØįųÄ%zŸņåSd •1Ø3™ Žįõ.‘ĒQ;ĀCiTĮn¢źqj§pęW¶ÕĀ¢ā±;”1x<ųæƒ3Pni”…‘FĢÖ²•c§Ö‚’Ž1ą74Į#(ĻrĀnŠŗ‰`öŽīp\įĖœąĀß3r9°Ā‘Ŗ„. bIQ5+ā“„įč#*Trž@„¬THKßĀ¬ī µ+p‡Z†ąØ¢ø9‚‚\w rļ=Aˆßź=Ėq {ŅāNš}ǟņCĄ•` Ž]Ľ@Ņā7-Ċāx…¬J$½^b« "P¹s?ŁKŅŚ/ī6f©±8u,'ręŲvKĮt8I?öå Q‰/"cń”vJōsÄF^^æ+ą©Ę/¹WG\Kƒ4ó,#l œJ†¦¤có NāĄ¬ Ø’ČŠÜ5® pÅŇ¼Æ“ų#ă. pŁ!Õϰ“n‚‰^‘Øź_ š—{īk/”©³iĢęŪŽk®#qe˃ »š¶m’g"°ī%9”Ü»†1¶#V↔¦1ł ńŌDū [I¢ź.ŖńÉ jVąÅP¶6A04ś*„H‚ ¦lŗœ¢ĀźpŌ“¹TĪcØ©mp ,鈭T¼§qŻ*…)lYl¶ Ab ·ż–#üS5rČ1^ź!Šńī.¢®žMAƒåŪp "āĖÉ— ·*§œOņ)rŹ—õ‹ƒ.)|ƒČmóŗ=bź;•œźTeĀDĆäžš/YÄP˘{”e’ā=XE›Į© ŠōL(¢Øž”E3 ”7õcøü0u¹S°j$pRœÄ ē…Žƒ%˜ ŽĘÖV*€‘…%£üR¦ƒÅe® Ö6•~L†J³ø2å˃ƒ™”DĢygsū?žeź(±eĖ—\¢²TŌ3}ĆY¤eŃÄ»ę\ø-¹Ź\¹Īqąaüąo¤†”Ī‚+c܉­“Æ–“jTv—HżZ čn-ˆĮ|„81ēOFrBw„µ7QKGGˆūJEj`nRĀØÜDiޠų ’¼3‚0Ø)ØüR„^.\æpjrü˜Ė—/^D½KĮ‰±uĘņŁxæÅŠœƒlčE|%Ķ$a5vį+‡ą EP:HoPƒ* €De‚„süJ,"ß ĮąlīF ²”—8āā8c“Üj=1Ö Äł•^V#HŽŠŌŁÆØƒÓļJȝ2²œÜø²åĒB ½¤³2¾C :ńø`ÉÜ ü™/$¹~77ÓĮ]ųuéø0žO² Έl”‹¬ŗ¼0åš0łŌƔxZĮ©¬Œø0Ą[QÜD6`§'”nßĶ‘Š{€2…0ŲŁIiʈ!źŹN:ˆøź6·ĆQ§Q <,äį•4–xŌ!*2č„PŃŽˆCœ>‘Öa³ņõł”.\¼wä¾¢ 'iQ 1ŠHŲ•@Ō"å| ?†{†Éj§%āčĻRµ>‰X;©ĢŹĆš!*h“ķhžų—ĢAdŠ£ÄZ”ųÕōÅčuEĀL©]T[|Ą°ŚCģŅŗ @ķ”,ā#IĒŅĀMLæõ¼CdyüĶĆāæ 0¤žĮ²ˆlhļH4EæńB!¶4w*"¶ qˆmC,L¼W“ă+Sž£ģā9}ĒP!|1)a#ć½ĖPŗb±5J8†6ˬK—.5{†ø›ÄÜ©Xcœ0_q .å¾å˜5€ƒā#‡Ėø`ƒ6 ßęć0‚‹×r蝱—éy,#(j=„äEÜįŠ'bEo‘ąK”J ±}:‚ß’ŲGŪŚ‚ś njl„C¶²÷’Ž–m’bkj·5"Abź^õ1É7‹P”,_Ā«*jĶį7Œ!3ĄĄj }5„Žq\ebżÆąOš•n]7 Bøź±©Ž×‰äBś‰į@©n’ČnĶuQāÜ7r—™HŃщY«b› ŌO¾i EÅL3T?ČÖÜNQ%C¤JeĒn9BhŽŸˆB8}. uEźæL<ĶĒč|«åž"w K›Ós‰›Š‰Ļ²„Dš<*µÜвQ 'Üčź1jc XKrNÄW,“Zy`uøŅYŗrZ ”āDŠ•?Ųu9‚hœbü/ž¾,ać Ź›‘ēĘæ.ü®¼GÖł>u¢” elįŠāÜ­8FVøł™:•ņ˜Ÿq;gōe± Ū<3ØĪXÜ%Nįę•Ō–Ä^cöFb¼¢CPēH1Ē)Z”7“Äš?€3u.ĶĮæ •*Tؕłź•÷Šöó½Æą!ĀsÄoÜw "ÖGŌ`¤bŅŅ÷÷÷-|ĮW1nĀ*#Ü·©q#ó ²Ń«pDĻ9Ō܈ߓ9JĆĻĘėŃ~C…oH_»ˆ€7 „‚”³ńē°ĄœkŌx1nT©rüÅĆšGĮ—»–r”EømƒŅĮ$i-Ÿ1—/&:Åxš‰RąBØĘ=Ź$4G˜{ɦlGź3ˆā¼\cĻĄÆ.¼.nm€®”õÄåįĪœĮŌ¢•ÄęmĄCŌXpųu+åžåDwmĖĮ.,ÆB wĮ6ŠŸŌ"–-.VįØ1p†” ĆŁģ \tń1Gźm‰L1ubC™“‰Kˆé•|eŌф3Ō-)9š£ķ©^7.õé’äÓąb%s²Ÿģ ·+Ų†¢“\µƒÅ2nźœ.hE½MĒą˜~Y >«—/{Ę£‹Ėęžń@¤ŽŠŌl…Y`B,ī^³›¤©‰ė œcϊŖb6šeWźXĪąĖ‹q‹’ģ‡pušØkœ •*UĦÅÄńcÜ5ķÄZŹeJJĶī\«–`ś–u ĄĶMź}xū€ulø-‘ biąKoqbŃnŖ>æ*b‰R°Jöæ(ü3ųƒĒżCūe½Į¹¦’=TqgQŌFsÅÅ8+6ÄåćX"§x#źT©pcƒ \`ÓŕR·&ąŌę\×rŒØĒq•:×°Š€Ų¬}ĄZé8ø2wūC§ź,ŅÄ^gåoo1=³śÄ6ĶŹ+Ķ:eü!•B ˆ…*Ō"źųļäā8•’e/u@»4œjØ®7:Ēq$8°Ø:§w&]zߔ~œxŖ¹ÄINX?ø#¹ż”–Dkš˜ąęTs4žˆ‹©Ž¢R?Y Ė„Q™s™S¹ŌįĘ×Ė‹s¹±SłXEc*†ĒMzĒÓYhŽ`‰ķbže²Ņ6Ź•*V½Įšˆ»•Ÿ¶ ’ō “æČ4ŲK1ƒ5:Ūn8Š®„:‹ŽĪžā(.š‚ļ¢ “Géo£4“R–yˆ4!ü`ČąūĀWé7‹-»•¬Ō±ödŠ7 >wĄ‹S» 1pÜ!ø.U^.u2ˆŅAS¹Q”EØ#® /f øÄŖƒqŃŚõŃ#V P•āų-M™k@_öņDlæäßµž1ą; BńĆŌEĪāX07Kų'(B y˜ō £qj£”/ž%²Óq]–ß.g/g¼_7ń+Ģü}ĖņpėŠMN*`²XŌB„1•¼¶Ó†Įå\eĪā²7.!/G?ŲĶ„0ÆPڇĄ†œŁ»‹W8®1›ĘµØ+ŌØĮ6żŹ7))jrjƒę©…¹,7Ä bв;–iÜŽµż†5ÜžöŌ£-r®Ų^¤;‹~œæ žĒē>gäÆ71ĮBfÄÓÄ;ōv!„$ „JˁŹ©5Ē(Ӊ£rÜŽUźę‰b(q£ē1SpŅ™£P AŚ'øaø“–j©Qń9Ÿś€u… j¾¦…±Źv‘ØUń(1M"^.GÜą³÷/T»ŽÆ9Ü×6–J'ņ E^WŁßĄT©R£ļ!šėYJ©X s„ėœ½X<įn%¹(Å”¤Īģ”Vå£g$r©Œo{‰‹©,bīēü6ĒZšE±¶ Ó(‘A-uSāxsĖÄyĄB¹ĀF>5qMŌmĘ„ar”9n96$ÜUЬī/ƒ+ÓR„aĄ UĒ7é¬T©X=ź¬\¬>ŚšgY üED•+ȄR\9…qŹAn;Ąī-EŌøā:p©Āõ¼99•^橏L-č•s—*IØ=F„ŗm+¹®į…ø@é@ŸÉv(’"0Æ0ČqĀ8ŗ!8cØĒĄę4"²¾åcr½½d%°ŌHĘ>'¬Ü~X•¤øš©R„b½Ļ ‡@Ɯ+ÜlvŹÅGĮüRaQțµb}÷)#Ļ `åAøŅĮqā!\6Šā}’½ŻJRĻņX~®Ü]`!‡ü€Pž„Ł”NĖaAN±"ĖBÜ_2 bļ#Ģ" †#ē”z‡±ō›cPŌ"DĮ½Š¶–iÄķā„JÅ|£Ā„“P–‰Qõ/U/Rćųź…¤ŪĘA*w“ā]0€N'L“Óҹx&ä¦-y‚ NqYī>u怨T… óćĪ&ÄMŠqāQö”/¢°ŖĻ÷It„0q7¬ŻA]ĮlUwüEģ  ØJ$±f9‹7‡żØź£ž§UĆP ”£«ŃĪż¢^Ö©šR*ÅM¼Źõ\EFTpį)…MäĘqŽ;„©R™RŸW9Zøš8<Ēąīąė ¦£EĪćCŹ£ī-ĖĖé#Æō¹Fŗ†ń/ŌŌ&ÜĆPY9z_†ŠP>ągŽZā-Ī Æ¹Q ģ'koģšÄ8„QµZHŸl±VT‡rŹÓü—r˜¶ZĮGmŹš2ʾ%9|¹@Ōyœ#¦o( T©_R£±ēŠ*²*Ūć rŽęä(.TfŠGą™°‹qÉ/Ął²ż æeäā%|FÜf¾šübŖ>Ź·p=A<³¹WŌ±üBWĆ7P› Dy”5 uJĀÄ+Į^•Ld»S’Āk¹®Čj 6F›óŪ؈•­Ä†ŠKF*ĀńR„b½äh£™ŗS‡ĖžÜpcK©eUÜ“­AŻF,H‘õęDĄ‰+ĶŌjŌJęu*0}ǜT©R±ß^\ *\IX|.^8Åŗń†˜·šœw¼Žāžóø3‰dÜNš„҈žué%Ś®h¢l‡öjsœVõźnīiøŒ»Ü¼WŠ•+^晫‰·p†„²U¼><§Õ‚j/¹hź'pBŽžˆÜĒ cź9‚É5+qŸ†ćIĮ‡)X©Z°[ŗiGl.\YeGņWȌeĖ» pKXbG5sE»¹¼^å¢ō’į+ ^£V©āng^£øā5¹a̐jpƒxŚUJ•ąYĻRŁL.šĘ<ś‰Ā§1Ó6Įäs8Ę”.mrĮ9µ£:%šŻžwœŒSF‰ßq8kØ­ GrטĄÅ¬ŻĆąxT%Īaq–.5ćx؏ œQI…Ņ׈ÕĢˆj X¦Ś…”’©œbœ|z‹ćī˿:ĮO¬$cš¼ˆ‰ĖDŒź1}„ø±ż³”Ü؄£ˆ£˜Ū3 Š"ÅŌ|jT©Z•p—Z—å -W)…Éun™Ć^ą‚n.P- ©f‹HŗdQš5¼Ü5—Ćī;kqņ"Ń.A®0@Ō55[Ō&ä8Cõādc…JóØFȵ¼;Ā) KNü•č–VĆsˆĒ•å“؞ĒöŅRÄą*˜›p—zš8[WTŸR @bāq,q.£9D:C »ČJ¶^ŪÄ©o—Q§’Ž2‹~į Ne‘+ÉSĪ!OūE„£Ō¼* aÜHs+’¹’ŲÕuØęV8F;Œrŗ.o’Āźr*\³Hµ²]„ö5ŚćŜÄ9mŁō1£:מŽįü•S˜Ę1ē8c‹²ŻqbœE?ÜŁ.Ēū$«Ą‚ KØJ*æ°§Q[auG¢8KNw(䎒ČĘ5qu5óĮŁ9.’nSˆB$O¬«Üž’åŖ·5„a©q‡øZ‚®!„¼.Nåq)SnŖ{”IDfś›q`]!Ä%ās…MØk¢ƒĮI8I_ŁBÓžDæņQT’Θ6ģTvšą"Ū—lóåĪ2™QJ©ŌbDƒ#³æŪÅBw(eĒp±4Āī$ØŚTÓTbĘŅ–S*ŗ›Ņ\tŌŌ øA&ŌĮ4J$—[Äa×õČ=‰€w©”62ķ”Ģ :†W‹€$µ…CÜŖ?e’Ž'#ćtŸćEQākóKn(ź \†a.ā0ObäłŪU •ĢCM!þт…ÅhS‚F Xūż”øEAžMü~ ]ΆłŠSW"Ć{rųw,āź‚Rł—ŠĶĘ` …Āńrī&™®„įŽ.\X°.:ōī$Ir-‘Tq¬¢n.£²YŒÆ@įq@Śćœ²ŽÅÖx"źø‚Ū,”R® ęµ·SjZœÄŸŁ¢ ‹©± ÖĆO‘üœMĘBbĖ”P‡ū6€øg`Cˆž#ō‰īrĆSĢC­KŅ9ā[wPs@€”£DCm.:®įÉYvĶ#Gsµ{C-Ė „‚kā•°Ś@ˆ„į £ęćčv/Ü;©wüŒŖC©cwrĖzO‘ŒcĪ]NįHķżģ`@ P1~åŌw‚DHT !ż€‡74b$舌°Ł Ż3R§ś®(šu.ujQ‚„‡pÅ®&©u*sĀ!g%ØJŒMAäsÕ,ź ŠÉa{uÅ\¤¼I(śCIw6ˌ C¹Ü­}@ƶ$ś”M§ņYŲ9ŻK« ­‹u}ܣ⃒ȸå8¹ošq)ĆŌŚ±q8füŅ»'}–0¾FmȧsøEŌÓ5£žĖdÆ9ōµq„Hģb½ĆŁĪ—.)9‰‘+ŌžźįbVåj#ÖJŒ ”½M»šPDB“«ź—½l—‘%Ći舽ŹT6ĄxSHū0NRŖ†Ą'ņLS©KW7ee> Sq7äµ°[—ixŒ[€öQ(£5pīWlµśŸFuŠÓ— oPŗķ€vEP£÷,J7ĮŖĆ—Ø[Ŗ¢Õ‚÷YHķEź%F¶¦ł‰Ąč€īcK‚gśe©’ģTCĶMÅĖq·–Z+ų÷hĖœā»„fŁė÷ė‹pVˆš›‡Ō­Ńj%‚Ń¢ŪR‚‡ö;\%œ :N%ąA­4K sG2ŻįøĶmī-°]#l“Ōw"VŃø5röÓ©{”…Å¢ą‡qÓX¬{… aė”Ļņæ±e¬$›!LK2Ō÷B*@ĪF%aü>„`ēš”a»[ˆ@;cÖq-4äµ½æģµa–æ‹qeĖK‹PDń½9Äeb¢yT©^UĖĀW€AU÷*ėż”ÜŠnīXÜ=‰MĖŌŲ\RŌP ŗŸÖ"„bHÄt”¶^¢ÆÓŅ!²©]‰GSžA})eA q9 “ś“uŗŸJ}Ä$:©;2jXӈ° ĖQpĀŚ(ę’ŽążMP„XÄŌ;ńžÅ»Ž}Į“[6u)$}˜mš8†IĖŠWMõ1oÜžūłöZ½½J»Ėõ n®įŽ<óķØąæń䖢=ķ/¾. JŁŚS؈æi’ŁŌ²Ś"nTÆ]JōÜ«ƒeīĀ«ŒMG™QĮŠńH JĒšJ•ﰁé/Rļ‰mkŃé– ŖČÆ3ØūŸŌ‰x r‘)os¹T؋¾„6” &½Å½ÅPń$UK\čßł.tžĖ¾P䟼'Ń!~>Ńą†+6w”ØÓ±ˆĆ“q8-[­ÕA…źŁ·’ī mP9r/ŗX÷l‹Ük¹z‹÷į)•€Éƒ‰Äź‡Ū*d )|Ed •Ą!+6ÆsAŖ–³SÆŁöƽoÓ—’ˆķØ&ÖēöeØ oh·7pœNgÜyŒcč©Rµ+ ęC Œ©ÕDØĒœõ s8œłJ‡eŠ[bk %K¢„ĖļĄ*å+DmWq…”»b¶?°Ėb„GKY{›Š!öˆ‹ÕV„£źZ‚Ųgń?Ļ­šŪ†>śØšÆyµUø*.ā BvOń R® ”y7ś# U’ÄŃĻ܃½Ō”—`ÄüČ"ečBVā.ķ‚%GTź’<Ā …JœGøk”²OPXDj÷””"nćr¢ÅŽ·‡ūįq%#äļ"uąÄߙ{Ć|+q §%Õ8Kźq)£.Q§WZ¬øj"ž‘‚ˆWyęUE:2ŠŒģŠŁ÷*VÕ+Ąś¹CU7ÕÖi£rķÜlj ×E÷>嫊‰&“ܱRĀpAū(ca’²äétš––æ±ÓV¦ķSøoŪŲŗ•Ü„# Q餸 („ž[Ü ±ūŸžÅ}Źšé`„ŗœĀĀ‚ łTŲ ęēQŻP ®cV6÷4pĻö2¾±rüŗœaÅį7AńO"ŹVmEq5‚Y”RÜćE#/# m¢ :‰źÓX—grŹ•)•;œ1a¶q)Ū¢T’ś‹/QżQ§WiÜķ/»ļ)G®Fźˆ;š8€‹ĄŠp£eŹ<Ī2R”@āõ’cużˆ!Šćr§ÅĒ=Ŗ<ļż—+ØĆķ9õ!t Ēړ¹®>^Ń'_żŖl‹ 3L Ż<ĒÖ3™X’ūd “™ÓSl¤Yy§™¶[Tq€V—,Lw8\cšŠīmØ:ų …, ›…ø‰a;›eš”žĻžo„’“›š_^LŌšAj¹޼fŅQÆdæÄāu#ā8XóįpƒĄŽ”*ņā:•©Ü$Ŗ—r·€,ŗź# ·D-^k©”R±rįĢģŠą1Ļīl›%Ėøؐ¶Öšę„”s‡Qż Š fåhU7ķščŖä )[eر-;P&ŠŒcŃpJ.U©źjNåšžĖ!’ˆŠŻ¢E\)/)VYØcĄ Ü' ø¬ē+ÕQĖØs҉gvk1•„CeN£‚Ģ=˜¾ŁSˆ˜øBŽįpųq9łj3™tę›Å\O™Ä!š—.ˆ,Ö0‡‰Ź–ź67 ń6ó¬§NŁu;й›7ŌB¶Y<&„²ˆŌŖęYzƒŚ$äDnåŪ Jˆž£wøµ„³l7ĢcšßИįQcsl<ī]eÄ.¦vdµ•qKĢ“WŽ*F}F‹kĖ*T©R”é< Ægv™£ø©CØ8ź$pć9źē‘r• Ę*„ LÅŖ:c¾bj*Ō»TŅ’äD&Śat6ū”‰U’ÉĮØéź‰÷GD* ¹—¹peŊ.ؔ¤"„N!GĖrA‡ī9ćcä`¬Žõ Ž©pV…Ąé'RtĒTtuK7Ō E=M¶K¹r°.‹ce<’‚ Ķ˦&Ęn§õŠ&یmcŃuŅ‹”–·ø½Åćæ4÷æ“ą Ķ–‘öux8ˆ™ŗ X¼&ŒŁ§:ŠtĶrN5Nø?²ŠE}ĆgžŅ^Iv£™dJ'8¬kØŽĆ±†?ZG‘ŪŠq źķ—āÜNb·P¹ÜåĢ<V/Nc„8š©ÄļČĮõ EO:b‚čQ,¶Å£PQøRī!F—̹aą@/‰HüEŪa%Ūl1‰m®åŃQµ®H}¦ÅķzšÆ~åŽŚ"ŅÖå°.4q5ņn>žc}Ļéõ)9ō÷ń¾‰©īT‡ˆˆÖ%Sź!ŃbˆÄš@kˆ‰ŌA¶Æøµ³PŲTR ØŚ"’Č£c?Ō°%dF§3|ķjŖØŹHī—z;šē‡™ŗ‹ŚGTśD’ČUæśŠ­¾^cJ”p-” f\XėīR;†'’Ę>#ų‹¦%ĮĆāF@6Ʀrab‹č‹‡$@é)ŚŖnWŪO}ÄOØÕĪ`‚ŲT"Sƒū+jā³ø28e ø‹’ɝĮ• ļī/&åµ Āų±ō%{Ļé„o`§łīFų”ā½¼¢ŌJ†ēŁ98G³WÕC’š£äj–ćUćdjT"7Ø`ōE·RY¹(€.£UQØ’ §* +*Zé~ˆ!āµ9Žrņ…€”\Ā£ū@,³÷Ģ>‰ż †s\B†.“Ä»U^Y~7“|\§(ƒk.Q¦ƒüœółGxcāøEQoācžį q±zp}K@ ²XKb/°Üh‹ˆ7*›œ’±[«—øö6ĖĆUžĒn;š¼Ž\>d8õ'ō‹®"ĘŁwķžąUåqĻD”T}F™q yœ1\žbeƒłĄ÷’U Į]>ŃTŌ䈊aÕ® ĮJ©x\uœ;_ł.­%Tiß;[Ģ æŲ*·ō_’ˆŚŗo«ƒĻQ&Źü’ *CeźĀ?s‚‘ŻŗˆAÓØļrüÖ0ŌŠŲ…ŸJƒęc¾°į—Ī^Š×‰+2§ģŹĖbŗeķZC·V‡+ŖlŸā0ŠÜ4>§ųƒ^q»‡;—ąEõ2£"Āaö? “> ā5:Å®jX”ļβźThÖćA„m€ĀF[›¶¾ˆ Ø AśęPt_Y:!|.*–ź4¹[¤~ź\»?Ų(xf²ÓĢįé ?ØBčūØŖÖˆ^Ö±Cˆ„Ÿż &‹‹ÕÓ¾Š=zœ$—ØfĶt­H:†•c•Ėé5‡p†“Fū%ŗµD¦åJ€'“»œŁpY~‹šī>¦_¤5‡é¤5+}§Øjpś@8šIX!ā©„@•¢R¾ć҉Ż@éøéĻ,§KT—zÜ>ⱋ;,Ø?žNyEVīmwS”_āu’pl”އŻĮ” ū,­u¹ ˆö¦ “C ‹žĪ<’”µŠt}G.ŁŹ>¦0e™M*ę°u÷öDƒ 8c;õ̚KÜF92ŗŠ¬nēq÷÷ƒ^§Ģ„0Ēōį›ĆĻĄæ1Øŗ@ é@˜ŃØKŠ\’PžÄ[]K£µī1uøBåiG”*ZŸķ€XH8Bcu‘rÕC’āˆLw¤rŌDwÆ(4s(ļ†Šéz†C¾“h=œ)BĶ#³āCÉĒshN]M.ÕÜv“JåN§1Žć ō»`ļ&ŲDšÜŹĒ7›Ļ†}ƒāqøįõ树,•?ĶäĮ ±š3L׍GhEm¦=’#i7u9Ļø(ż\³ žW+oÆØŹ'—ˆ“l#6ęŗ> UGśE?ÓØ}"śtĖŲņ=j»DŬ\ eō·røƒĪ™Ciģā RvūWĀSˆZĄs;0 ”Ü!s‚?yc.1ņ&Ӊ,S¹Ō1ŌǃÜ\eĶĀĮ„įoÓ^W߯ŸCāN£Óōś“büc$2ļĄv1įĖjŪ…%n –K@,ó%Ø¶Š’ÉŅ©žĆ­ŒŻ•mŖJ"ך„Ŗs÷ h_ģ ŗœS>ų=ÄK“›…ōĖ© ×Ō6˜Ihƒ{/"åFŌGQq×,½5-}dؘ|;ĄkŽc;€€4EaĀDĆ9xĒq5*ą•aöjēPē ØĆĄĒL’ž}ų_ ń|Œ±ż8 –ī¢Sķ}F ±ĀŌĄA­+ptDt®ŌNHź Vź+hR1zŌŪ śZm@Öö%G¢Ż(¤ķ€i܁ę]j*»©qŌ¹7ųf™IžĖZlVįqy=‚£>+ńpQ ƒOr؜01ā8c.ćä`—pµŌ4ÅøˆŪ8`ÅŌaĪwØśqšŒqĻ©`ĆĶš2ĒōŠÜ%•]ŹNZõV*T©^ƒƒÄī"Ų\ΰÄ4ĒH;åJWƒp[z¹yģ:j/ ’\­LL8ŠéÜįŽę‘‹Ś.SWūb®ź"ór‡‹›-”¬·źžÅ īćą|ūɆ^ń*UGÄņ=„c‡ōĮsćw9MĄV„Óq7ź2ųWŌF ?RŻĪRżB콆\ø¬Øj]ā±÷•{†ž7õĘŪ(9„ œGūį.^Žå½MĶŹÜźTźTćĒ~LÆü+Q•¹ĻŁrń~F ±ż0D"Ē‚ēŁ ßØóå¦!u —MjM•œ1—ėæ…Ļ‘‚ 0ėČc:74*=KŠƒ÷ rćĢc. GĄÉ TH‘šx”°ō\ eć,L^”Ę'ycśfŅ®7ÅOö3‰¶OSąjRĘ$5 “n#„EøĘ?‡!ø÷„R§Ē$ EM‘·äJ9›°„TJĒöUī17ƒ™^GYeÖ.=AsQßhzb:y<Ę~ąC)ž˜5…ćˆ¢DŽz_QŪq‚E*Ńā øĒć?ŸVšńäpŌptŌoł(¤!†8ÜKƒy!žp¢ź\½Ne"¤ µÄz…Å`¾’É»ńŽü)g æ£Ģ}łžö?¦¤©Qø‘5ą„xī<ų QhŌ"ĢE%µWĀ÷כ*?Ēp—:‚>7īPėRŖ\zŖĆŽa:Ć-ou–Ėä4s,ā:…ŖĒQļ×,Ū—R§~Kƒ‰xØĒŽ}d!”éc‹…TīS¹±(Į“ˆžjš9„ˆxŠĮ¾%ĕ«‚¢| •*W€¼8’eńķ2@ø•#Q<%Źm‡“Wi,­aÄā\0Ē ŹŌt䇁÷MD¦]ø…ŽįaøœģęŌ \#ŠÜļĮ„ėĮŒ~Y*Wż&āœĖź7åMŃä—+N4ˬN"Ŗ'ū Q÷„ P¬9 EnćīØN±±N{„a¶TqżE]¬Ŗš2²š4ńw*“ćŠĒqŽŌTEp)5h•¤«FĖf¼ ˜0Ē7‡Č<Œ¾žüHC§. NąMˆø­Aq*Ļ^Cˆłm1ŻDźįÜālG×R”*ĆįØĘ<ų¾‹É‹ö1•V¢ša¶’åĮ„'~'ˆ…ĒčDļÄšcF; šX…9DØøg‡ĄGŒ ^ >„Ė—._“Į€œ2ž’AØ1m‡ź[‚CĪ«ÅŌ£Äįę6÷pŌ}BUgæ.¼$|ļŅN!EŌr`„&ÓL*—8EÖ Åė& Ö9ʬķ‹{•Æq.‰•ĖĄĖGęx?„’÷ nXclÅįņź>U5` ‡’ģƄŒ}ąCĒüŒc€Oīy‚•ŗõ ā˜2”;†Xė(Įm€}ĖŅ5\5ÄŪB^H’21~ ņĢ\cžąƒ‹.9!qŽ`šę8|E” GŚĻQĶ4EløyōaĶJ§Ķć cäzČKG…Wq‘8ŽÅ©b`Į„ø»‹PaIrZ‹Æµ—Ÿ„lG˜bšo#Ø`ƒ†>‹ų'‹ÄqRæK*łełŗbüblŠw@aWčV±ń'ū†QŌ[‡”#ˆ1G]K«†ČXH""ŗ.ˆ]gˆzjŚ•5¶\ī,† 0a‡üŲś+P>+ßźD!æąDÕħĆWs„ā՝A—ł“‡Cįs¬$c꜈CĪ”-P;TM’ņź5Ź›Œ-Šc“Ō²§0˜rŌwƒ'0—*šyóc+Ńué3X<œ¤ļõļ$2ǟēķņ yo…`2|kRór÷ *T©P J•„Ō­@ˆÜGČĖśeĮŒ`†üī0üB(Ž+ÓyXóš:ņyÉ.T ź^.uøĒČɇ |GŠFåXAtu:„¬F{‚Ā+łŒPQn±Q”l­JÅJ•Ņl/m²u±Ī•+ōWĢeĖ–—-ŠĖ—äb”āń†_©öW„…¶u ŁT rūrNńÜŃ(‘eśC'ƒ*šŚ^;‡>0ʹQń3Ę|…±³NŚś©z‚[ɃÜ&älFŚ-žA %J•ÕAé6 ·Ü@’}Bź>6ņ©UT¹¾ļ7!d u>€š\;ī\5¤źVj$5¤œ&ʉ]z -ć˜eN„Wč7ęJńL߈ƍG=eÅ叉 PĶc¹žy”ūFÄyĖįu.š8|zɋšs¹Ēū8EŌOAćZõŒ0 9šqøÜ“ā?qŃXµ%·}Įōėfć?öć.g3ü)J„×ŲF ‹V0ÅJ•øŪ tÅ^Bœš€šy•Ų•źR­ ƒ]ł±*ĒjÅeŅāGōsĘē1‘ Ä1~ÜsĒ¢¼ĶŹŌ­ś5:‹.;–ø JūĖ諌 ƒŚGQā {ā”Ļqם`š×‰‚) ĖxNeŠū‰ÜBTJ(y„%³­DģKŌ)āŲJÜJ`Üję’±M†£~”Ģ©R×}\¹pt–3G¾*˾’,]@ļȅh»†«VwŃptōŁ:Į%~“róX|ˆCŚoÕX0K„×…JĆt ¼Bųö•µßŠ@å¦×S€tӈ¶¬L7|*ā¾Ńū–^ųß׃/ō#Ęńr÷.\øÅłœćyrāćØzk‹ƒqēQ"!’ĢÕ_ū9'ž„ņi^.jq q„ń=:•+k;—.^:õ'qņx‚OÆqU;@sż‚ĄŪÆģŻų#š·ü‰KaÆ©Ģ_ØaK_ģFM¬»Ž*õ.ųĆčLU<£S‡ijėoöu‹6oQožK„øĀ-Ė×8g1ŠmQ±ś3Ģy‡2ąŽ¢—ś=ų^/×Ü!Ž&3Œq„ō ;Yæ©ÓqÕ(±Øżnn{ÜÜzoMу5‡$蛉xØMHyf„VQ¹“vøĆ‹YĮ«ą”T­N£›Ęw ɰĮŗ¶ Š©ĢZ—/§˜7Ü< I’Œ ū錹paqU. ¹w/ ʁ(¹z²½ųs¦Ļė$!ƒ Œļ),!0„X˜ēĶAŌŅ_…¤U|9Ķjį;‹Ķ„¹n§yŪWå~ĆŅ­JȾ`š*²÷—Ó+©\„-süJ¹déK6œ&Ā ž„A¢°„)r“TŅĖ˚j&ÕŚł Į×ņ]4}CŚó3‡sūŁU†*"ā×,5Ģ_°Ķņī]ć PaN#u÷.ēRš-j\ÆČ×āC/¼.8qrńXgQš ƘK·…y1Įٌ~‚lēÅÅⵋƒD[×Ć'ų™uX[ź§2ŗ"é;—ż~̦ź÷veŪL ä\žip*wŽ!Āę ^.YråŌļXØ ¾aj“%nž;‰°ŖK—‹ÅJƒ9ŽŒ›‹J7¶„ndl.V1K—. é‰Ļņu*[šxš%ļep“ÖP„a ¦IpbŌfżAAŽĪåĶ;Ūø4}+S‡:'x¼ æ‚M'§1$o̳śĄ÷£Į.¢ĒŠĄm§;”7ĢEÖbĢ–9pĘĖŽÖ”ć6¶āXp²AP½Ė©rŲ”\ŅSÜ Jƒ ½āńÓmD,– Ē“#̹lyšæŹW…Ź"ü‹ńŗ—.1ˆMN.Éøe0ķšX§#¹~§ ļ)Ś h„mDJķpfņŪ$uuÓæ„E9ą† *0-gŅĄ°ļƒ/Xƶńdä›Cō}F™y؋•µĀĄ8p°×Q@¹ķÉYEŧQ[ˆE„āęłR™ØGQZ†å0ŌT €‡QAŚ¢T2żd”–ļSs‚ C¾žž”°Ņū… —._ēGSIƒb½W—.X^°«6Ō2F1ĖąB\7ǹQˇ‰Øj9«Ā¼oņ\tļ;¬ńļ',<ąāįø !”eĖ5 ŁŪÅĒžu€Ü©Ph½ ,^”ÕŠŃ4ŌU МPŪzŒ„ÕC3Š1RrķĆ ĻŠÕ—ž„jhļž"¶”KÅŌŗkˆˆxlˆŽ×~Xu€£©xbć²ó„D3ye­°“"ßǬV Äyń! yæ®ę‘,Ū5ƅNĒ c/&Hy¤yŹA՟ׂ „P6Nčū/āęuā ”oR×RåÅÜDā[A,Hc…ʉų”ŖUš••JÜŁ£Č÷,]©`a²īp›ę[µlBāŖ®Õ¶\e×ī wī 7jiÅėąJœF ĢeœJŽo¼n*:ćLMā’4mPŠÆ_Ž žÄ¾#å~‡ī ®#æ+ŒqQŽIĘyāqžüœŽ…]\ŗ4Tēxs0œ§Q5ż‚҇­Å¬¦vu2Ø ż–(i·Ō8GpĘ”æ¤D uÄ(h_ÜD»0ŹØH–[[#.(b JVĮįŌ±囗:—Øo˜Ź„hEÖjT ¬l ˜½Ą(µ _ ł†zˆ«åÜ»ĄĖšGŚF¬³‚+mŽóz‡>Lc“įżŸäų÷–8ŹjŽßaĻ®½D!‘#,¤„ ²ĢQ"Ė (/ˆźĮöw-q޵ ÕD‹x6!ū\ÓsE„ °-lJ”Ź\ʦkŠŌŗ—Jh—Tƒg¹prX>ńrń÷qź?„Z}°š—āؽ†ę> ēł›ĀpŠ[—ųÓ[Šuz•‡&.,rų2Brų;Ėšsr½dć+PŚ'Bī['JŌ øJłś_ —Ž¼ĢŒ †›šÅo5‡ąĒÕĖ =qé^²r†å ÄŲlnžģ’#Ä" üKc-Kū {‘|¬½ri?±F™fQ+Pu.^øƒ…pT 5aXP¦į®5¬2Ūę\¹w9•*ÉüÉŪw .ēp“Ą*-ēmĄčJüN~¬ÜæAlŅJøā¾©Øó<ŹĒQõ’Øķ+©OŹzÖqįNŽ®XAaX1Ū9–”R«õ*šJ®fÆp’ŒZŸ÷źpg8ŌėK*£,lū÷9Õ©xÜU‘P^nY”jP)‡ē§PāģØŃĻ,q·+÷kĶGŌJŠ8ę-“ł6źV°Ę9c‘§qmó!N ŠĒ­\¬óį~„¼c,į5ī:JĄ—«ƒ"€ąGANūśŽ®\¼]KŌø·ģ{Q-6© ¼s8‚ˆ”’Ėö.ńÄ#LD²+\ŹHb¦åė „å‡Ė6iF_ĮÆĻ?ˆGĶxE 8?©³…āĖ%ņ?ąŃ)YżĖ¶sžü;‰įõ‹¢ŒuÄqÖ_Y-s„½T½Ę¦°— K›ĀćUŖ-ˆŅ$ŚŽģ¹r– ͲŖa•Eõ)Ņ‹”KØB‘nĖ+īßń%j K!KWØā½¼Ė¶åŌ»ŸĢ–‡ØŒ­b· óŌvÅ~J#łŗ•—š—‹—ēKAĒ’Č0•pY „>åīń^“Ž}„9„ U%ššs*>ӘęĘ„GłįzŠłų%6Ɔ ō3xŠ@cax0@ņ1į;ę Žį_üK·7f&š°Žź'Ūx@AāT©Ä~åų\¶Ā&Ųę æ˜¬$ GŌs8¬ß„āV#Ģ}D%żAˌA}J3ż>Ņsš¹Xu ŽW‹—›—/©råܽT„‹©X%˜ĀŲ'ÜAPA,Š—9°ä±rbüNó\|>cł2s*Wš|ł—9ČĀwč¼™g.]ĮøśĘ°²÷ īmõæ±J“ƒxø±ŒuŽoĄ‡…ˆŃw.[.£¹«†ī…‹l¼Y-åŹŹWµK(Õ“eV¢­²åĖ—÷.ßq*_„~f%b¼V$I_™ļĆ’'Q}ė¼Ō€4qÖ§n [}Ü„qcO;ō±#gQĖJųuRīģ¼āĮMŒWp±Äy—p|o/įžŹ 8rį#ʞ‹Œ²Y. ‹?%Åš7. {ƒpńc;ŒčFų*Ėė2OR㋯…~Wā;›õ4bži ¼Gņƒ „xTHś‰^5īēĘóršKÉ,%Ā«qžKœEåųø0Cg$[ō%@ø•ĻĮ'<×Üq]į†?*üĄYTMžHŹóžŹøźÕų׍Ō[ń4õŌWsæ]ĖĮ*Åf Ī°Ä•˜¾ĖYžNc—ŻĻɟęĮļėńäTK—qexVĒ 7+)äžn9•*•QoŲŖTŖõ‹jQ«Pü•bĪ„j^6ąeĖÄJŒs^ĮŁčź<xōņń7œŸCĻæńėÅĖ%ž%clL\„ėÕ_'sp»‡š»¢Óø»œĆPęćĖHĒßaK¬ŌәĘn½<§PœbźrīYżĒå÷ī> d†CĒ‘NćåŽ1ÄRS P„Āķ‰ņ.s•ƒ}^‚^?¦P8%5RļK©Ī5Zęwē.³Ā8&¾Ōæk”ėIų#ƚB·ńÄnsŽ°Ēˆ‘ĀV* eÄæ©j”×…µć~R‡‰Ā²ž †±xī,XūĢ߃„ō/›ĖÆēˆz\?<†^Ĝd7"UUšś‡Q_>ÓRיróp¶ź.\Ywü[Ž.>ŽDź\ā8#iēĻ[ł+=ēbU3øÜ%,ؾ/¶ź2ü­.čē ’üŽqsśSł^]į.$c0',Æ+ŅƒÆ„Nåjż×/<Ī2ī?ą}K—.2üxT½ÅŽ½Æ…ężį³SÆ7D[~_…R<-^ µ®½OćoĄę „k õ&DĮ͐ˆī#ā)ĒądĘ”JĆ:łõ~ŽpāüŸö:‹ā„|WćÜ_5 ļĶĖųĆ¢  Æ><Īƶ©`<„S¦;e¤Ų˜×įk…„ź\³5ńĪ+Ōø¶čØłņĮx_ĒŲD_„{0•Ćģ2_ņ-bāÄ*sų‡9©R”Ćū9UÉS‰ĘXʌqr’B el8”ėūźV…± ä~9^kx\9ü2rņ`įĻ>äFœ¹šc’ŁSœ$Ö.u›„2‹~óoB>m…}HŚ÷Љ^¢: Ėū—8ĮØĪ ‡01ycšę+/“ų§ŅG~<8c*Åx}±QĶ{•9÷qė ĮČEĖśų²Ā±XؚŽæ JÅaüÕlš¬±ā/,GV”ż—Åū‹ģ9‹qPģv_Ę!8ÅĖ—.¾,‡ü1ü12ĒĮćŸ#w8ņī1 üA)ćĪńp/ؗ8u›ėą_‰ Žn/ÅcXGšĘLī1šcQ­¼`ƒR¼£Ī±ĘÜpĮų{ź+Uč¬_ā6?Ƭuąī1üQņŖ:RųÅqQ7¹ĢÆ$ŒKćļį>ŖŽ@Ū(mRėĒÆ3Ąš~!ā%įŒ CÅń`ĮŠ0čō&£é‚V©¾ĆŠü2Ōė.·Æ’N¼Ē^yÉ ØxŽ]AÕFu„Ž9ŒH•ł ×¼ń­zŖW©Ļ“ˆe¼¦ń‡ēn\ø!tfÉ̬\s¼ üƒĮ^āsJõ䊜O°Ēį˜ćęĮq#ųR/óf*åNćóbJƒóĀ4ŗ›UÜX¹büķĄŌ·ŅCåT n2xŒ|/šF_Č9¼>’ⰌqX"D‰ØūˆEWćR®R/3‡~ŹÅD+ūč<Ųü0*L91™ė끨÷9•ްs#ģ†~?ł9¢‡³ØKńrB?„V**¢RÅ`ĖøįŒd­xTXYr‘"~h—ćEzÕGŅGā³”̦GÖHN°Ī£Čæ2xŽ嘷ąį#QüduńćįW:ų„|ßq+Rʱ É ypóČæ¬WJ…°pG~L؟PGšUŠ… ¹MJH‡x%JöØqćō1•YN¹×ØĄN1ʱŽē,YĮžÅśɒ„aR±~įĶj&ą®\ø5ø9‚6ū€įŗļ.„ž¼OKė0.uä2į xeÅcškōāS+ł+R°b„cŸ.°īę7?‚„Ļ4k˜ †žžĮ•š5āCQóc/ÖŒ³ˆø¼p±bžĄxVkŹüo3øF<Ę<ś—ä ā1ā)pWr©ĻĆÕx1—é*¾ėŠśź-€x¼K‹äpĘ?’`ƒē~7/7.šdŒbÅæˆGŖäØĖĖr„Jų— ź]śy•ØæįŽ²C“?ÉcPE|gū.¢ų™råī?°ńa›ÅĖĶĖ—ĄŒcąü!AäöÜ|X`,Ō£Ū_’Õ}Õ‡Ųžżę ‚åĆŹ„F 7§ČÉøhØķĆ)‰āž;æCų÷=N„ź,Y{—.\¹pc/ ś_”ß8<8ʱUøü½wåŌn.8š­N§82™IĢBgÆŲ?óÄņæMGšÆāO7Yy®°•Š,šb©Ö~-ųšÄŗœŲ_ßĮēćWĄļĘõą„|.æE3{qNkø”«XźQ:_•ćÉöŖ°ū/5æ…}ļĖ‹š;‰X4žxx˜øiŽęć:a»ēŃzĆóYרŠ)õ¤(õō1żhem,ųgÅēć/ š!8Ƭ ~~G1ČGÖCŽüSąįł’ēĆļąuńĻ–>ń-·ń q ܼąƒ¬7Ń}dr5;öąĻ6\YėćV¼zš~'‡æx{‚Śó†—8!©_qmĖų‡ę,98:¬` ^÷ƒūē“ō˜n¹×æ©×µl[<|ÜdĄĖ”n~qļ~‚æĢ¤j÷ UaZˆ †%÷ ļ.:ÅĖ‹Qo=~5ų‹…üļ_€uø!hąƒLwøĆę?ł ä±ü š_€C+‡óÜŹü#æĖWˆŽ:šē(ÄäWąĀæ!x~Iæ 3įšr4ÄåóČoƾa–?¤W‹ųŽ"ßĶ ĄoܐćÉü!š‡»óćTošBÉ Ī¼œ?’~ å~qUśźßąØ`)wžąĖÖ?ƒ==z…‹=–?³×8ó|ė柯?³“ģƆj-üWó+-żˆN\_ƒC“šų§µĆś ū™ćrćq*W•B(Śõķ>~€|GõĆ××Ā©^+~słŠōšĀT˜$Ɯž]żå}Ǽē5qŚ$I_ōĶį)J—;”“KōÓ9„źVµ„•¹DpTÆMĖ÷æ¤æ³ÕĪńĆžÄuŌł…ħ7*,ā#ģ!²1tUD•*$aĄŸ¬õų2?¦čŁÉ”Eõę©‹nQYą>²xń¬»Ž¾;ū-ėõå—/Ģ„2½f„a>5š˜žšü‡ō¾0XłC-ĮĪü/ćńßł‘ž9‚š¬_ƒØæ­Ž/÷į+#.)yæ ĆŠoÓ߃ūõź\ ÆäŸŅO'ŸųĀ %įĆ ČF­ū÷æõ;‚0—óįP%J›aP€*¶Ms*Wµ’™×ąī„ĘT¬‚e9‹|ųTēÆąŖWņi —ĪRž’00PŪJĮ÷“¹^ʁpū@KŚŗ"ī^ų§qķšoų„ż—÷žtĒŲ-ę¼iiWĒ‹āŹ`T–F.Äū9'9%ā”9B ¢‡Ü„Ā>–3Æ*Ć’/ņ.¤“+|īWi±÷Õyk|óüE؎©ż®¼jŸźgs”€r“ P}JņåÉßq‹N:šęh¾¦ćĶĪ 2® Ćv‘l¹R½·g•ævķ~„#ė_Ϭ?/ŪBņRŠø}aydœóé9•ZŽøøx 2Ņ‰ßˆ[QŖ|ƒĢ+d\~Ú÷éķ«øRŅ5%CłP—RįĘQČ\¦„¶Ń]\ś_^ć:ĶćŸ”ŪˆCwVÆpź5zš •ŸÜ"Ip§ˆ–øxč*Wķ1ļå`fēŌ%ADø3„B“fü+ŅoĆÆCĢ!ŹŌhy^._µ—¬²æB³ö:•N#EĖ÷Ģ4¾  YVx£]1**óW+ŠqA~zƒPŽēū>‹8‚9‹Æ¢®ŻĆ/¾õąžb½;āP@ävDÆÕ+ĪćŽ$‹ cOģ \HŠ>„!ø·6•ĖšÅkX ŌęR®W¢Ņń^‘Pģ’éĢnĪŠäA~‰UµŲyņžĖ€6”šŸ ü½ųׁĢXųė”įź!ŚJćÓ’±t-;Ŗ”iŁŚA¼^/Æ7.s _“]śī\¼ž7~$YrK«Š­«žĪ1Üps¾ƒūåŻāž€·śźT*“>Ī`3—Uw4uĽ®NXK’±Õ®Žg>&+Éā^±üœzPķÜ,óā_°Ž„²żz IAFNOųÅJČ@ūŚ‚‘GÜ-0ś[*~⬠£5ąašėFkš8‰Ź_§h&…°#L©Uéø2üŒ$ø¶ł/Ąį6łWüJ„@ĶÅXÜ­ćR„GĄŠbāZ‹Ude䨼UW¾¼+Ęƾā4)Œ 4šŹd”l,īs<ß")~³ ^„ź?G~žc­~°J…¦ŲōžDXŒ™NX`ē’cĒ—>0(4ÅJ¬pGEņ’1^²:ĒRüN$ŚwčóRÄ:BŲÄĄŲ@Z(½N?:)īŗ`‹欖‚„D£ö<צ¼z†£¹XļĀåĪgŽ”ĘT%cÆ *³R™³“Č‹Ž<~F/ĻHņ}CI†­Ō_Ļ?­0¶j.¾©š¹QēŅkŠlŚQ•³Ęž9ÅEe, žń¾Łs^ƒu訆@_Q„@zūų$ZQ8?ń£І mĢŲU’„}JÕ”gŖ¼­«"§Ūœ>ēx8‰ Æä૯I|»Ļ~Ūń2;†ŚhŹ»Ÿ]ˆÆE~¶Gņ”©Pućxa.u،YĆŻ~ yĶĒ~›ó%(×F}ŹZ%ģųÕ©”RåŠ^¹œæń3˜/ĒØz*q+Å%x1SŒŽXūHAµn“R¾-Ā/č'źĘ4cŖ’0ś9‰æ ¶‚@Zß¹ØĪü8ń!RńzĖĢ}§Ē`0Ł.»‡²®"¤§Ōžž`Ķ\P)̽ųó¾ \¶°]±Ē•āįõ*h£°āz©^!lJü2oŹ*«ēj¦įßü.˜īßS’ eÕ Ü¢–‰¦qź%DHt\j߉Īę豕ØGŌBZ.üH5ūŽ0n>®b-ü!p•ÖZųü+Ę aĒxņˆÆ™Z˜DÆ©oy:"#ā-ś:•7ą_®†ā+Müsź"©‹zōWEĶł÷ąa‹_Ø­õŚ;1®ØÄXĶ•šō\øł¾!luåĖ8ĆųAŲŽŽ}KZļ„­ĀOIä@”†ü_;HŻ’¾Ėö GÄ©§‹ĻĆėäTūé7Ō¢<ų^ µ·{<\”øeƒaׅBG¬_ƒ8ó­P’½ąāüŒ:“mčo æié#ņ„Ž«K›x²¬įżō„!ØŚ$GÄjsć^dYKn<9Žx4ØķŽk•eĪ(DO$©P†hˆ:eNlŅ~1¢<ä|Q—8cūš#©rõ.\³ÅŽLæ$š0ŌÅ£—£c¦³siWÆÕ~dæ ņ¬ńź%ģ —žŹVéßŌ«0ł±š1¬¾ā¼Q/Š?QķīŅCĶš¬¤ÆŠmˆ—ķ ˆžf  iė÷’ 囆É;W5•—Ń~OŸxź^L;ōołńįĢ9¬wąūļƈÆ(ł‚£G3ŽcéØ(!ĆŹ¼ßų”F+n$OYzˆāåłÆkĪ@ėø|!“} PŖÜæ^Ž«cūFšż…üa£ćŸMāõs~ĮÆW~+ÆŠ(xłdw‹ĮØłßaGłÅUū’†™²–:qצįš«•¼UÄö(-ņ1Üę9Ybź’žo¦ņÄtpG䙧źćNOSė c¶£Ļź5ÆČYzÜø'Üwƒ¼r‚d¹* ‚͇Äʒ˜ ]3õu+~žü;1÷o‡Įey*}ŌRWA×Ä' FźM„„ÓĀæP9‰Oć Ļ cč­yŽ.\ø3ÆMo/?Kx+ā\¼<|R\WØóąŗÆß¹Ļö,O؞U*q.óß®ż/¼>7šĻ„ś`²ē­ż – v¾ß”?p€|ˆ„±c…¶ūoĻońsнų_Ę}=JøėŸŃn[U×ä•0g(ź>&Ś,IxźĶĢ9¤ż½5äP©Qē'›äųžN¾1ųj³§ø¼ŅžōXłÜx†¼Füj>¾}P"x>‚?„«j5O9ē㳟ŽCx~U”UEŪļÓ~‹Įņ(0X,te~5µß—^h+]ĮHq^!*]Ē™~Ī ń~ĒęǟłA<ļšWųJ‰Lļž@E‡å‹>nчę9 w9?š#Šųä× &»n‘BJH¶9ł^Ó^K’ž©×ęŲZ[æŹcƽ—ćy¦ŽWĪž ½Ź~MkŃĻćߜ1éÆÜN¾ ÷ß~ĶD ąŲśLT~@–.ęy#²Z·ū‹š~%zH°X(ó%cØn «Y80üŹgńāUųu; Zé¦+Ž[jā Z »łäę<Øb®Oųłāl?ł~•åĢ`_~Īp'ŖS*’­ŗ‰®}%©ē'Ēò^^üŗō‰¾!8’‰Ž„ßČ”¾Šõ×Ŗūˆķ~"ėį’YÆĄØu(GŸIhŸšü­~9S£w\ė’šĻ׫_ƒk/sT~Ę®-żl_1ēńfxĆž%ŪąüĆÓO©ó'sĆßė—łzj’ K#~’WĮ JOžw_:¬żü‚T½kńĮØ_¢Dį>OX»ü1C÷JĖźÆĘ³ŸM|MdgMǟ‘`#ž ,żžµŅćc_^šæČ ¹ŅžøE^~HŌtRŃGļĦGn®Ü{Æ_’X«Ė’-øæ OźLŖ;§ž:4W³æŃ®Ü¹oģ±ü[P*ŸX\ćó’+@Æøā•mzĘ mNŸĢ-`µ?ņ§ŪkšÆŅšæš!×1U’©6מŽQŖ’œŁćę?-_ĄŸšćĄŽ·—žMžŸõ±Y{Ųł7’4¹Ļ…Ė›UŽüŌ*³’%/żMż)’„š’Ÿ_źĀڊ©’čµģØ;W[ł«”s·p~Dü)ĢWǰ—$»¤v’Āļōе<üBqąßüz£ÆÄėh7ōZWś’Ńķ&’m‚¾yĢOŹ żZŁś?”‘_Ļćņל°ĀĄõł •’5ėąŹÕßāN©©Ėžˆ4Å#£ń7’ś[łõ°ŸŠæŁF£’ÆłqśkįDē˜ž&„"ĒÕĢNb„—÷,d¾Å 1u’Eæ”mÜ%Æs’abÆż.æīšėžąGö’Łlibwebsockets-3.2.1/plugins/generic-sessions/assets/sent-forgot-fail.html000066400000000000000000000001271357643561300267030ustar00rootroot00000000000000 Sorry, something went wrong. Click here to continue. libwebsockets-3.2.1/plugins/generic-sessions/assets/sent-forgot-ok.html000066400000000000000000000001541357643561300264010ustar00rootroot00000000000000An email has been sent to your registered address. Please follow the instructions to reset your password. libwebsockets-3.2.1/plugins/generic-sessions/assets/successful-login.html000066400000000000000000000001411357643561300270040ustar00rootroot00000000000000 This is an example destination that will appear after successful non-Admin login libwebsockets-3.2.1/plugins/generic-sessions/handlers.c000066400000000000000000000443001357643561300233000ustar00rootroot00000000000000/* * ws protocol handler plugin for "generic sessions" * * Copyright (C) 2010-2019 Andy Green * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "private-lwsgs.h" static int lwsgs_smtp_client_done(struct lws_smtp_email *e, void *buf, size_t len) { free(e); return 0; } static int lwsgs_smtp_client_done_sentvfy(struct lws_smtp_email *e, void *buf, size_t len) { struct per_vhost_data__gs *vhd = (struct per_vhost_data__gs *)e->data; const char *username = (const char *)e->extra; char s[200], esc[96]; lwsl_notice("%s: registration email sent: %s\n", __func__, username); /* mark the user as having sent the verification email */ lws_snprintf(s, sizeof(s) - 1, "update users set verified=1 where username='%s' and verified==0;", lws_sql_purify(esc, username, sizeof(esc) - 1)); if (sqlite3_exec(vhd->pdb, s, NULL, NULL, NULL) != SQLITE_OK) { lwsl_err("%s: Unable to update user: %s\n", __func__, sqlite3_errmsg(vhd->pdb)); return 1; } free(e); return 0; } /* handle account confirmation links */ int lwsgs_handler_confirm(struct per_vhost_data__gs *vhd, struct lws *wsi, struct per_session_data__gs *pss) { char cookie[1024], s[256], esc[90]; struct lws_gs_event_args a; struct lwsgs_user u; if (lws_hdr_copy_fragment(wsi, cookie, sizeof(cookie), WSI_TOKEN_HTTP_URI_ARGS, 0) < 0) { lwsl_err("%s: missing URI_ARGS\n", __func__); goto verf_fail; } if (strncmp(cookie, "token=", 6)) { lwsl_err("%s: missing URI_ARGS token=\n", __func__); goto verf_fail; } u.username[0] = '\0'; u.verified = -1; lws_snprintf(s, sizeof(s) - 1, "select username,email,verified from users where token = '%s';", lws_sql_purify(esc, &cookie[6], sizeof(esc) - 1)); puts(s); if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, &u, NULL) != SQLITE_OK) { lwsl_err("Unable to lookup token: %s\n", sqlite3_errmsg(vhd->pdb)); goto verf_fail; } if (!u.username[0] || u.verified != 1) { lwsl_notice("verify token %s doesn't map to unverified user (user='%s', verified=%d)\n", &cookie[6], u.username, u.verified); goto verf_fail; } lwsl_notice("Verifying %s\n", u.username); lws_snprintf(s, sizeof(s) - 1, "update users set verified=%d where username='%s';", LWSGS_VERIFIED_ACCEPTED, lws_sql_purify(esc, u.username, sizeof(esc) - 1)); if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, &u, NULL) != SQLITE_OK) { lwsl_err("Unable to lookup token: %s\n", sqlite3_errmsg(vhd->pdb)); goto verf_fail; } lwsl_notice("deleting account\n"); a.event = LWSGSE_CREATED; a.username = u.username; a.email = u.email; lws_callback_vhost_protocols_vhost(lws_get_vhost(wsi), LWS_CALLBACK_GS_EVENT, &a, 0); lws_snprintf(pss->onward, sizeof(pss->onward), "%s/post-verify-ok.html", vhd->email_confirm_url); pss->login_expires = lws_now_secs() + vhd->timeout_absolute_secs; pss->delete_session.id[0] = '\0'; lwsgs_get_sid_from_wsi(wsi, &pss->delete_session); /* we need to create a new, authorized session */ if (lwsgs_new_session_id(vhd, &pss->login_session, u.username, pss->login_expires)) goto verf_fail; lwsl_notice("Creating new session: %s, redir to %s\n", pss->login_session.id, pss->onward); return 0; verf_fail: pss->delete_session.id[0] = '\0'; lwsgs_get_sid_from_wsi(wsi, &pss->delete_session); pss->login_expires = 0; lws_snprintf(pss->onward, sizeof(pss->onward), "%s/post-verify-fail.html", vhd->email_confirm_url); return 1; } /* handle forgot password confirmation links */ int lwsgs_handler_forgot(struct per_vhost_data__gs *vhd, struct lws *wsi, struct per_session_data__gs *pss) { char cookie[1024], s[256], esc[96]; struct lwsgs_user u; const char *a; a = lws_get_urlarg_by_name(wsi, "token=", cookie, sizeof(cookie)); if (!a) goto forgot_fail; u.username[0] = '\0'; lws_snprintf(s, sizeof(s) - 1, "select username,verified from users where verified=%d and " "token = '%s' and token_time != 0;", LWSGS_VERIFIED_ACCEPTED, lws_sql_purify(esc, &cookie[6], sizeof(esc) - 1)); if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, &u, NULL) != SQLITE_OK) { lwsl_err("Unable to lookup token: %s\n", sqlite3_errmsg(vhd->pdb)); goto forgot_fail; } if (!u.username[0]) { puts(s); lwsl_notice("forgot token doesn't map to verified user\n"); goto forgot_fail; } /* mark user as having validated forgot flow just now */ lws_snprintf(s, sizeof(s) - 1, "update users set token_time=0,last_forgot_validated=%lu " "where username='%s';", (unsigned long)lws_now_secs(), lws_sql_purify(esc, u.username, sizeof(esc) - 1)); if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, &u, NULL) != SQLITE_OK) { lwsl_err("Unable to lookup token: %s\n", sqlite3_errmsg(vhd->pdb)); goto forgot_fail; } a = lws_get_urlarg_by_name(wsi, "good=", cookie, sizeof(cookie)); if (!a) a = "broken-forget-post-good-url"; lws_snprintf(pss->onward, sizeof(pss->onward), "%s/%s", vhd->email_confirm_url, a); pss->login_expires = lws_now_secs() + vhd->timeout_absolute_secs; pss->delete_session.id[0] = '\0'; lwsgs_get_sid_from_wsi(wsi, &pss->delete_session); /* we need to create a new, authorized session */ if (lwsgs_new_session_id(vhd, &pss->login_session, u.username, pss->login_expires)) goto forgot_fail; lwsl_notice("Creating new session: %s, redir to %s\n", pss->login_session.id, pss->onward); return 0; forgot_fail: pss->delete_session.id[0] = '\0'; lwsgs_get_sid_from_wsi(wsi, &pss->delete_session); pss->login_expires = 0; a = lws_get_urlarg_by_name(wsi, "bad=", cookie, sizeof(cookie)); if (!a) a = "broken-forget-post-bad-url"; lws_snprintf(pss->onward, sizeof(pss->onward), "%s/%s", vhd->email_confirm_url, a); return 1; } /* support dynamic username / email checking */ int lwsgs_handler_check(struct per_vhost_data__gs *vhd, struct lws *wsi, struct per_session_data__gs *pss, const char *in) { static const char * const colname[] = { "username", "email" }; char s[256], esc[96], *pc; unsigned char *p, *start, *end, buffer[LWS_PRE + 1024]; struct lwsgs_user u; int n; /* * either /check/email=xxx@yyy or: /check/username=xxx * returns '0' if not already registered, else '1' */ u.username[0] = '\0'; n = !strncmp(in, "email=", 6); pc = strchr(in, '='); if (!pc) { lwsl_notice("cookie has no =\n"); goto reply; } pc++; /* admin user cannot be registered in user db */ if (!strcmp(vhd->admin_user, pc)) { u.username[0] = 'a'; goto reply; } lws_snprintf(s, sizeof(s) - 1, "select username, email from users where %s = '%s';", colname[n], lws_sql_purify(esc, pc, sizeof(esc) - 1)); if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, &u, NULL) != SQLITE_OK) { lwsl_err("Unable to lookup token: %s\n", sqlite3_errmsg(vhd->pdb)); goto reply; } reply: s[0] = '0' + !!u.username[0]; p = buffer + LWS_PRE; start = p; end = p + sizeof(buffer) - LWS_PRE; if (lws_add_http_header_status(wsi, HTTP_STATUS_OK, &p, end)) return -1; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"text/plain", 10, &p, end)) return -1; if (lws_add_http_header_content_length(wsi, 1, &p, end)) return -1; if (lws_finalize_http_header(wsi, &p, end)) return -1; n = lws_write(wsi, start, p - start, LWS_WRITE_HTTP_HEADERS); if (n != (p - start)) { lwsl_err("_write returned %d from %ld\n", n, (long)(p - start)); return -1; } pss->check_response_value = s[0]; pss->check_response = 1; lws_callback_on_writable(wsi); return 0; } /* handle forgot password confirmation links */ int lwsgs_handler_change_password(struct per_vhost_data__gs *vhd, struct lws *wsi, struct per_session_data__gs *pss) { char s[256], esc[96], username[96]; struct lwsgs_user u; lwsgw_hash sid; int n = 0; /* see if he's logged in */ username[0] = '\0'; if (!lwsgs_get_sid_from_wsi(wsi, &sid)) { u.username[0] = '\0'; if (!lwsgs_lookup_session(vhd, &sid, username, sizeof(username))) { n = 1; /* yes, logged in */ if (lwsgs_lookup_user(vhd, username, &u)) return 1; /* did a forgot pw ? */ if (u.last_forgot_validated > (time_t)lws_now_secs() - 300) { n |= LWSGS_AUTH_FORGOT_FLOW; lwsl_debug("within forgot password flow\n"); } } } lwsl_debug("auth value %d\n", n); /* if he just did forgot pw flow, don't need old pw */ if ((n & (LWSGS_AUTH_FORGOT_FLOW | 1)) != (LWSGS_AUTH_FORGOT_FLOW | 1)) { /* otherwise user:pass must be right */ lwsl_debug("checking pw\n"); if (lwsgs_check_credentials(vhd, lws_spa_get_string(pss->spa, FGS_USERNAME), lws_spa_get_string(pss->spa, FGS_CURPW))) { lwsl_notice("credentials bad\n"); return 1; } lwsl_debug("current pw checks out\n"); lws_strncpy(u.username, lws_spa_get_string(pss->spa, FGS_USERNAME), sizeof(u.username)); } /* does he want to delete his account? */ if (lws_spa_get_length(pss->spa, FGS_DELETE)) { struct lws_gs_event_args a; lwsl_notice("deleting account\n"); a.event = LWSGSE_DELETED; a.username = u.username; a.email = ""; lws_callback_vhost_protocols_vhost(lws_get_vhost(wsi), LWS_CALLBACK_GS_EVENT, &a, 0); lws_snprintf(s, sizeof(s) - 1, "delete from users where username='%s';" "delete from sessions where username='%s';", lws_sql_purify(esc, u.username, sizeof(esc) - 1), lws_sql_purify(esc, u.username, sizeof(esc) - 1)); goto sql; } if (lwsgs_hash_password(vhd, lws_spa_get_string(pss->spa, FGS_PASSWORD), &u)) return 1; lwsl_notice("updating password hash\n"); lws_snprintf(s, sizeof(s) - 1, "update users set pwhash='%s', pwsalt='%s', " "last_forgot_validated=0 where username='%s';", u.pwhash.id, u.pwsalt.id, lws_sql_purify(esc, u.username, sizeof(esc) - 1)); sql: if (sqlite3_exec(vhd->pdb, s, NULL, NULL, NULL) != SQLITE_OK) { lwsl_err("Unable to update pw hash: %s\n", sqlite3_errmsg(vhd->pdb)); return 1; } return 0; } int lwsgs_handler_forgot_pw_form(struct per_vhost_data__gs *vhd, struct lws *wsi, struct per_session_data__gs *pss) { char esc[96], esc1[96], esc2[96], esc3[96], esc4[96]; char s[LWSGS_EMAIL_CONTENT_SIZE]; unsigned char sid_rand[32]; lws_smtp_email_t *em; struct lwsgs_user u; lwsgw_hash hash; int n; lwsl_notice("FORGOT %s %s\n", lws_spa_get_string(pss->spa, FGS_USERNAME), lws_spa_get_string(pss->spa, FGS_EMAIL)); if (!lws_spa_get_string(pss->spa, FGS_USERNAME) && !lws_spa_get_string(pss->spa, FGS_EMAIL)) { lwsl_err("Form must provide either " "username or email\n"); return -1; } if (!lws_spa_get_string(pss->spa, FGS_FORGOT_GOOD) || !lws_spa_get_string(pss->spa, FGS_FORGOT_BAD) || !lws_spa_get_string(pss->spa, FGS_FORGOT_POST_GOOD) || !lws_spa_get_string(pss->spa, FGS_FORGOT_POST_BAD)) { lwsl_err("Form must provide reg-good " "and reg-bad (and post-*)" "targets\n"); return -1; } u.username[0] = '\0'; if (lws_spa_get_string(pss->spa, FGS_USERNAME)) lws_snprintf(s, sizeof(s) - 1, "select username,email " "from users where username = '%s';", lws_sql_purify(esc, lws_spa_get_string(pss->spa, FGS_USERNAME), sizeof(esc) - 1)); else lws_snprintf(s, sizeof(s) - 1, "select username,email " "from users where email = '%s';", lws_sql_purify(esc, lws_spa_get_string(pss->spa, FGS_EMAIL), sizeof(esc) - 1)); if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, &u, NULL) != SQLITE_OK) { lwsl_err("Unable to lookup token: %s\n", sqlite3_errmsg(vhd->pdb)); return 1; } if (!u.username[0]) { lwsl_err("No match found %s\n", s); return 1; } lws_get_peer_simple(wsi, pss->ip, sizeof(pss->ip)); if (lws_get_random(vhd->context, sid_rand, sizeof(sid_rand)) != sizeof(sid_rand)) { lwsl_err("Problem getting random for token\n"); return 1; } sha256_to_lwsgw_hash(sid_rand, &hash); lws_snprintf(s, sizeof(s) - 1, "update users set token='%s',token_time='%ld' where username='%s';", hash.id, (long)lws_now_secs(), lws_sql_purify(esc, u.username, sizeof(esc) - 1)); if (sqlite3_exec(vhd->pdb, s, NULL, NULL, NULL) != SQLITE_OK) { lwsl_err("Unable to set token: %s\n", sqlite3_errmsg(vhd->pdb)); return 1; } n = lws_snprintf(s, sizeof(s), "From: Forgot Password Assistant Noreply <%s>\n" "To: %s <%s>\n" "Subject: Password reset request\n" "\n" "Hello, %s\n\n" "We received a password reset request from IP %s for this email,\n" "to confirm you want to do that, please click the link below.\n\n", lws_sql_purify(esc, vhd->email_from, sizeof(esc) - 1), lws_sql_purify(esc1, u.username, sizeof(esc1) - 1), lws_sql_purify(esc2, u.email, sizeof(esc2) - 1), lws_sql_purify(esc3, u.username, sizeof(esc3) - 1), lws_sql_purify(esc4, pss->ip, sizeof(esc4) - 1)); n += lws_snprintf(s + n, sizeof(s) - n, "%s/lwsgs-forgot?token=%s" "&good=%s" "&bad=%s\n\n" "If this request is unexpected, please ignore it and\n" "no further action will be taken.\n\n" "If you have any questions or concerns about this\n" "automated email, you can contact a real person at\n" "%s.\n" "\n.\n", vhd->email_confirm_url, hash.id, lws_urlencode(esc1, lws_spa_get_string(pss->spa, FGS_FORGOT_POST_GOOD), sizeof(esc1) - 1), lws_urlencode(esc3, lws_spa_get_string(pss->spa, FGS_FORGOT_POST_BAD), sizeof(esc3) - 1), vhd->email_contact_person); puts(s); em = lws_smtp_client_alloc_email_helper(s, n, vhd->email_from, u.email, u.username, strlen(u.username), vhd, lwsgs_smtp_client_done); if (!em) return 1; if (lws_smtp_client_add_email(vhd->smtp_client, em)) return 1; return 0; } int lwsgs_handler_register_form(struct per_vhost_data__gs *vhd, struct lws *wsi, struct per_session_data__gs *pss) { unsigned char buffer[LWS_PRE + LWSGS_EMAIL_CONTENT_SIZE]; char esc[96], esc1[96], esc2[96], esc3[96], esc4[96]; char s[LWSGS_EMAIL_CONTENT_SIZE]; unsigned char sid_rand[32]; lws_smtp_email_t *em; struct lwsgs_user u; lwsgw_hash hash; size_t n; lwsl_notice("REGISTER %s %s %s\n", lws_spa_get_string(pss->spa, FGS_USERNAME), lws_spa_get_string(pss->spa, FGS_PASSWORD), lws_spa_get_string(pss->spa, FGS_EMAIL)); if (lwsgs_get_sid_from_wsi(wsi, &pss->login_session)) return 1; lws_get_peer_simple(wsi, pss->ip, sizeof(pss->ip)); lwsl_notice("IP=%s\n", pss->ip); if (!lws_spa_get_string(pss->spa, FGS_REG_GOOD) || !lws_spa_get_string(pss->spa, FGS_REG_BAD)) { lwsl_info("Form must provide reg-good and reg-bad targets\n"); return -1; } /* admin user cannot be registered in user db */ if (!strcmp(vhd->admin_user, lws_spa_get_string(pss->spa, FGS_USERNAME))) return 1; if (!lwsgs_lookup_user(vhd, lws_spa_get_string(pss->spa, FGS_USERNAME), &u)) { lwsl_notice("user %s already registered\n", lws_spa_get_string(pss->spa, FGS_USERNAME)); return 1; } u.username[0] = '\0'; lws_snprintf(s, sizeof(s) - 1, "select username, email from users where email = '%s';", lws_sql_purify(esc, lws_spa_get_string(pss->spa, FGS_EMAIL), sizeof(esc) - 1)); if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, &u, NULL) != SQLITE_OK) { lwsl_err("Unable to lookup token: %s\n", sqlite3_errmsg(vhd->pdb)); return 1; } if (u.username[0]) { lwsl_notice("email %s already in use\n", lws_spa_get_string(pss->spa, FGS_USERNAME)); return 1; } if (lwsgs_hash_password(vhd, lws_spa_get_string(pss->spa, FGS_PASSWORD), &u)) { lwsl_err("Password hash failed\n"); return 1; } if (lws_get_random(vhd->context, sid_rand, sizeof(sid_rand)) != sizeof(sid_rand)) { lwsl_err("Problem getting random for token\n"); return 1; } sha256_to_lwsgw_hash(sid_rand, &hash); lws_snprintf((char *)buffer, sizeof(buffer) - 1, "insert into users(username," " creation_time, ip, email, verified," " pwhash, pwsalt, token, last_forgot_validated)" " values ('%s', %lu, '%s', '%s', 0," " '%s', '%s', '%s', 0);", lws_sql_purify(esc, lws_spa_get_string(pss->spa, FGS_USERNAME), sizeof(esc) - 1), (unsigned long)lws_now_secs(), lws_sql_purify(esc1, pss->ip, sizeof(esc1) - 1), lws_sql_purify(esc2, lws_spa_get_string(pss->spa, FGS_EMAIL), sizeof(esc2) - 1), u.pwhash.id, u.pwsalt.id, hash.id); if (sqlite3_exec(vhd->pdb, (char *)buffer, NULL, NULL, NULL) != SQLITE_OK) { lwsl_err("Unable to insert user: %s\n", sqlite3_errmsg(vhd->pdb)); return 1; } n = lws_snprintf(s, sizeof(s), "From: Noreply <%s>\n" "To: %s <%s>\n" "Subject: Registration verification\n" "\n" "Hello, %s\n\n" "We received a registration from IP %s using this email,\n" "to confirm it is legitimate, please click the link below.\n\n" "%s/lwsgs-confirm?token=%s\n\n" "If this request is unexpected, please ignore it and\n" "no further action will be taken.\n\n" "If you have any questions or concerns about this\n" "automated email, you can contact a real person at\n" "%s.\n" "\n.\n", lws_sql_purify(esc, vhd->email_from, sizeof(esc) - 1), lws_sql_purify(esc1, lws_spa_get_string(pss->spa, FGS_USERNAME), sizeof(esc1) - 1), lws_sql_purify(esc2, lws_spa_get_string(pss->spa, FGS_EMAIL), sizeof(esc2) - 1), lws_sql_purify(esc3, lws_spa_get_string(pss->spa, FGS_USERNAME), sizeof(esc3) - 1), lws_sql_purify(esc4, pss->ip, sizeof(esc4) - 1), vhd->email_confirm_url, hash.id, vhd->email_contact_person); em = lws_smtp_client_alloc_email_helper(s, n, vhd->email_from, lws_spa_get_string(pss->spa, FGS_EMAIL), lws_spa_get_string(pss->spa, FGS_USERNAME), strlen(lws_spa_get_string(pss->spa, FGS_USERNAME)), vhd, lwsgs_smtp_client_done_sentvfy); if (!em) return 1; if (lws_smtp_client_add_email(vhd->smtp_client, em)) return 1; return 0; } libwebsockets-3.2.1/plugins/generic-sessions/private-lwsgs.h000066400000000000000000000105431357643561300243160ustar00rootroot00000000000000/* * ws protocol handler plugin for "generic sessions" * * Copyright (C) 2010-2016 Andy Green * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #define LWS_DLL #define LWS_INTERNAL #include #include #include #define LWSGS_VERIFIED_ACCEPTED 100 enum { FGS_USERNAME, FGS_PASSWORD, FGS_PASSWORD2, FGS_EMAIL, FGS_REGISTER, FGS_GOOD, FGS_BAD, FGS_REG_GOOD, FGS_REG_BAD, FGS_ADMIN, FGS_FORGOT, FGS_FORGOT_GOOD, FGS_FORGOT_BAD, FGS_FORGOT_POST_GOOD, FGS_FORGOT_POST_BAD, FGS_CHANGE, FGS_CURPW, FGS_DELETE, }; struct lwsgs_user { char username[32]; char ip[16]; lwsgw_hash pwhash; lwsgw_hash pwsalt; lwsgw_hash token; time_t created; time_t last_forgot_validated; char email[100]; int verified; }; struct per_vhost_data__gs { lws_abs_t *smtp_client; struct lwsgs_user u; lws_token_map_t transport_tokens[3]; lws_token_map_t protocol_tokens[2]; char helo[64], ip[64]; struct lws_context *context; char session_db[256]; char admin_user[32]; char urlroot[48]; char confounder[32]; char email_contact_person[128]; char email_title[128]; char email_template[128]; char email_confirm_url[128]; char email_from[128]; lwsgw_hash admin_password_sha256; sqlite3 *pdb; int timeout_idle_secs; int timeout_absolute_secs; int timeout_anon_absolute_secs; int timeout_email_secs; time_t last_session_expire; }; struct per_session_data__gs { struct lws_spa *spa; lwsgw_hash login_session; lwsgw_hash delete_session; unsigned int login_expires; char onward[256]; char result[500 + LWS_PRE]; char urldec[500 + LWS_PRE]; int result_len; char ip[46]; struct lws_process_html_state phs; int spos; char check_response_value; unsigned int logging_out:1; unsigned int check_response:1; }; /* utils.c */ int lwsgs_lookup_callback_user(void *priv, int cols, char **col_val, char **col_name); void lwsgw_cookie_from_session(lwsgw_hash *sid, time_t expires, char **p, char *end); int lwsgs_get_sid_from_wsi(struct lws *wsi, lwsgw_hash *sid); int lwsgs_lookup_session(struct per_vhost_data__gs *vhd, const lwsgw_hash *sid, char *username, int len); int lwsgs_get_auth_level(struct per_vhost_data__gs *vhd, const char *username); int lwsgs_check_credentials(struct per_vhost_data__gs *vhd, const char *username, const char *password); void sha256_to_lwsgw_hash(unsigned char *hash, lwsgw_hash *shash); unsigned int lwsgs_now_secs(void); int lwsgw_check_admin(struct per_vhost_data__gs *vhd, const char *username, const char *password); int lwsgs_hash_password(struct per_vhost_data__gs *vhd, const char *password, struct lwsgs_user *u); int lwsgs_new_session_id(struct per_vhost_data__gs *vhd, lwsgw_hash *sid, const char *username, int exp); int lwsgs_lookup_user(struct per_vhost_data__gs *vhd, const char *username, struct lwsgs_user *u); int lwsgw_update_session(struct per_vhost_data__gs *vhd, lwsgw_hash *hash, const char *user); int lwsgw_expire_old_sessions(struct per_vhost_data__gs *vhd); /* handlers.c */ int lwsgs_handler_confirm(struct per_vhost_data__gs *vhd, struct lws *wsi, struct per_session_data__gs *pss); int lwsgs_handler_forgot(struct per_vhost_data__gs *vhd, struct lws *wsi, struct per_session_data__gs *pss); int lwsgs_handler_check(struct per_vhost_data__gs *vhd, struct lws *wsi, struct per_session_data__gs *pss, const char *in); int lwsgs_handler_change_password(struct per_vhost_data__gs *vhd, struct lws *wsi, struct per_session_data__gs *pss); int lwsgs_handler_forgot_pw_form(struct per_vhost_data__gs *vhd, struct lws *wsi, struct per_session_data__gs *pss); int lwsgs_handler_register_form(struct per_vhost_data__gs *vhd, struct lws *wsi, struct per_session_data__gs *pss); libwebsockets-3.2.1/plugins/generic-sessions/protocol_generic_sessions.c000066400000000000000000000560541357643561300267740ustar00rootroot00000000000000/* * ws protocol handler plugin for "generic sessions" * * Copyright (C) 2010-2019 Andy Green * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "private-lwsgs.h" #include /* keep changes in sync with the enum in lwsgs.h */ static const char * const param_names[] = { "username", "password", "password2", "email", "register", "good", "bad", "reg-good", "reg-bad", "admin", "forgot", "forgot-good", "forgot-bad", "forgot-post-good", "forgot-post-bad", "change", "curpw", "delete" }; struct lwsgs_fill_args { char *buf; int len; }; static const struct lws_protocols protocols[]; struct lwsgs_subst_args { struct per_session_data__gs *pss; struct per_vhost_data__gs *vhd; struct lws *wsi; }; static const char * lwsgs_subst(void *data, int index) { struct lwsgs_subst_args *a = (struct lwsgs_subst_args *)data; struct lwsgs_user u; lwsgw_hash sid; char esc[96], s[100]; int n; a->pss->result[0] = '\0'; u.email[0] = '\0'; if (!lwsgs_get_sid_from_wsi(a->wsi, &sid)) { if (lwsgs_lookup_session(a->vhd, &sid, a->pss->result, 31)) { lwsl_notice("sid lookup for %s failed\n", sid.id); a->pss->delete_session = sid; return NULL; } lws_snprintf(s, sizeof(s) - 1, "select username,email " "from users where username = '%s';", lws_sql_purify(esc, a->pss->result, sizeof(esc) - 1)); if (sqlite3_exec(a->vhd->pdb, s, lwsgs_lookup_callback_user, &u, NULL) != SQLITE_OK) { lwsl_err("Unable to lookup token: %s\n", sqlite3_errmsg(a->vhd->pdb)); a->pss->delete_session = sid; return NULL; } } else lwsl_notice("no sid\n"); lws_strncpy(a->pss->result + 32, u.email, 100); switch (index) { case 0: return a->pss->result; case 1: n = lwsgs_get_auth_level(a->vhd, a->pss->result); sprintf(a->pss->result, "%d", n); return a->pss->result; case 2: return a->pss->result + 32; } return NULL; } static int lws_get_effective_host(struct lws *wsi, char *buf, size_t buflen) { /* h2 */ if (lws_hdr_copy(wsi, buf, buflen - 1, WSI_TOKEN_HTTP_COLON_AUTHORITY) > 0) return 0; /* h1 */ if (lws_hdr_copy(wsi, buf, buflen - 1, WSI_TOKEN_HOST) > 0) return 0; return 1; } static int callback_generic_sessions(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__gs *pss = (struct per_session_data__gs *)user; const struct lws_protocol_vhost_options *pvo; struct per_vhost_data__gs *vhd = (struct per_vhost_data__gs *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_vhost_name_to_protocol(lws_get_vhost(wsi), "protocol-generic-sessions")); char cookie[1024], username[32], *pc = cookie; unsigned char buffer[LWS_PRE + LWSGS_EMAIL_CONTENT_SIZE]; struct lws_process_html_args *args = in; struct lws_session_info *sinfo; char s[LWSGS_EMAIL_CONTENT_SIZE]; unsigned char *p, *start, *end; const char *cp, *cp1; sqlite3_stmt *sm; lwsgw_hash sid; lws_abs_t abs; int n; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: /* per vhost */ vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__gs)); if (!vhd) return 1; vhd->context = lws_get_context(wsi); /* defaults */ vhd->timeout_idle_secs = 600; vhd->timeout_absolute_secs = 36000; vhd->timeout_anon_absolute_secs = 1200; vhd->timeout_email_secs = 24 * 3600; strcpy(vhd->helo, "unconfigured.com"); strcpy(vhd->ip, "127.0.0.1"); strcpy(vhd->email_from, "noreply@unconfigured.com"); strcpy(vhd->email_title, "Registration Email from unconfigured"); vhd->urlroot[0] = '\0'; pvo = (const struct lws_protocol_vhost_options *)in; while (pvo) { if (!strcmp(pvo->name, "admin-user")) lws_strncpy(vhd->admin_user, pvo->value, sizeof(vhd->admin_user)); if (!strcmp(pvo->name, "urlroot")) lws_strncpy(vhd->urlroot, pvo->value, sizeof(vhd->urlroot)); if (!strcmp(pvo->name, "admin-password-sha256")) lws_strncpy(vhd->admin_password_sha256.id, pvo->value, sizeof(vhd->admin_password_sha256.id)); if (!strcmp(pvo->name, "session-db")) lws_strncpy(vhd->session_db, pvo->value, sizeof(vhd->session_db)); if (!strcmp(pvo->name, "confounder")) lws_strncpy(vhd->confounder, pvo->value, sizeof(vhd->confounder)); if (!strcmp(pvo->name, "email-from")) lws_strncpy(vhd->email_from, pvo->value, sizeof(vhd->email_from)); if (!strcmp(pvo->name, "email-helo")) lws_strncpy(vhd->helo, pvo->value, sizeof(vhd->helo)); if (!strcmp(pvo->name, "email-template")) lws_strncpy(vhd->email_template, pvo->value, sizeof(vhd->email_template)); if (!strcmp(pvo->name, "email-title")) lws_strncpy(vhd->email_title, pvo->value, sizeof(vhd->email_title)); if (!strcmp(pvo->name, "email-contact-person")) lws_strncpy(vhd->email_contact_person, pvo->value, sizeof(vhd->email_contact_person)); if (!strcmp(pvo->name, "email-confirm-url-base")) lws_strncpy(vhd->email_confirm_url, pvo->value, sizeof(vhd->email_confirm_url)); if (!strcmp(pvo->name, "email-server-ip")) lws_strncpy(vhd->ip, pvo->value, sizeof(vhd->ip)); if (!strcmp(pvo->name, "timeout-idle-secs")) vhd->timeout_idle_secs = atoi(pvo->value); if (!strcmp(pvo->name, "timeout-absolute-secs")) vhd->timeout_absolute_secs = atoi(pvo->value); if (!strcmp(pvo->name, "timeout-anon-absolute-secs")) vhd->timeout_anon_absolute_secs = atoi(pvo->value); if (!strcmp(pvo->name, "email-expire")) vhd->timeout_email_secs = atoi(pvo->value); pvo = pvo->next; } if (!vhd->admin_user[0] || !vhd->admin_password_sha256.id[0] || !vhd->session_db[0]) { lwsl_err("generic-sessions: " "You must give \"admin-user\", " "\"admin-password-sha256\", " "and \"session_db\" per-vhost options\n"); return 1; } if (lws_struct_sq3_open(lws_get_context(wsi), vhd->session_db, &vhd->pdb)) { lwsl_err("Unable to open session db %s: %s\n", vhd->session_db, sqlite3_errmsg(vhd->pdb)); return 1; } if (sqlite3_prepare(vhd->pdb, "create table if not exists sessions (" " name char(65)," " username varchar(32)," " expire integer" ");", -1, &sm, NULL) != SQLITE_OK) { lwsl_err("Unable to prepare session table init: %s\n", sqlite3_errmsg(vhd->pdb)); return 1; } if (sqlite3_step(sm) != SQLITE_DONE) { lwsl_err("Unable to run session table init: %s\n", sqlite3_errmsg(vhd->pdb)); return 1; } sqlite3_finalize(sm); if (sqlite3_exec(vhd->pdb, "create table if not exists users (" " username varchar(32)," " creation_time integer," " ip varchar(46)," " email varchar(100)," " pwhash varchar(65)," " pwsalt varchar(65)," " pwchange_time integer," " token varchar(65)," " verified integer," " token_time integer," " last_forgot_validated integer," " primary key (username)" ");", NULL, NULL, NULL) != SQLITE_OK) { lwsl_err("Unable to create user table: %s\n", sqlite3_errmsg(vhd->pdb)); return 1; } memset(&abs, 0, sizeof(abs)); abs.vh = lws_get_vhost(wsi); /* select the protocol and bind its tokens */ abs.ap = lws_abs_protocol_get_by_name("smtp"); if (!abs.ap) return 1; vhd->protocol_tokens[0].name_index = LTMI_PSMTP_V_HELO; vhd->protocol_tokens[0].u.value = vhd->helo; abs.ap_tokens = vhd->protocol_tokens; /* select the transport and bind its tokens */ abs.at = lws_abs_transport_get_by_name("raw_skt"); if (!abs.at) return 1; vhd->transport_tokens[0].name_index = LTMI_PEER_V_DNS_ADDRESS; vhd->transport_tokens[0].u.value = vhd->ip; vhd->transport_tokens[1].name_index = LTMI_PEER_LV_PORT; vhd->transport_tokens[1].u.lvalue = 25; abs.at_tokens = vhd->transport_tokens; vhd->smtp_client = lws_abs_bind_and_create_instance(&abs); if (!vhd->smtp_client) return 1; lwsl_notice("%s: created SMTP client\n", __func__); break; case LWS_CALLBACK_PROTOCOL_DESTROY: // lwsl_notice("gs: LWS_CALLBACK_PROTOCOL_DESTROY: v=%p, ctx=%p\n", vhd, vhd->context); if (vhd->pdb) { sqlite3_close(vhd->pdb); vhd->pdb = NULL; } if (vhd->smtp_client) lws_abs_destroy_instance(&vhd->smtp_client); break; case LWS_CALLBACK_HTTP_WRITEABLE: if (!pss->check_response) break; pss->check_response = 0; n = lws_write(wsi, (unsigned char *)&pss->check_response_value, 1, LWS_WRITE_HTTP | LWS_WRITE_H2_STREAM_END); if (n != 1) return -1; goto try_to_reuse; case LWS_CALLBACK_HTTP: if (!pss) { lwsl_err("%s: no valid pss\n", __func__); return 1; } pss->login_session.id[0] = '\0'; pss->phs.pos = 0; cp = in; if ((*(const char *)in == '/')) cp++; if (lws_get_effective_host(wsi, cookie, sizeof(cookie))) { lwsl_err("%s: HTTP: no effective host\n", __func__); return 1; } lwsl_notice("LWS_CALLBACK_HTTP: %s, HOST '%s'\n", (const char *)in, cookie); n = strlen(cp); lws_snprintf(pss->onward, sizeof(pss->onward), "%s%s", vhd->urlroot, (const char *)in); if (n >= 12 && !strcmp(cp + n - 12, "lwsgs-forgot")) { lwsgs_handler_forgot(vhd, wsi, pss); goto redirect_with_cookie; } if (n >= 13 && !strcmp(cp + n - 13, "lwsgs-confirm")) { lwsgs_handler_confirm(vhd, wsi, pss); goto redirect_with_cookie; } cp = strstr(cp, "lwsgs-check/"); if (cp) { lwsgs_handler_check(vhd, wsi, pss, cp + 12); /* second, async part will complete transaction */ break; } if (n >= 11 && !strcmp(cp + n - 11, "lwsgs-login")) break; if (n >= 12 && !strcmp(cp + n - 12, "lwsgs-logout")) break; if (n >= 12 && !strcmp(cp + n - 12, "lwsgs-forgot")) break; if (n >= 12 && !strcmp(cp + n - 12, "lwsgs-change")) break; /* if no legitimate url for GET, return 404 */ lwsl_err("http doing 404 on %s\n", cp); lws_return_http_status(wsi, HTTP_STATUS_NOT_FOUND, NULL); return -1; //goto try_to_reuse; case LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION: args = (struct lws_process_html_args *)in; if (!args->chunked) break; case LWS_CALLBACK_CHECK_ACCESS_RIGHTS: n = 0; username[0] = '\0'; sid.id[0] = '\0'; args = (struct lws_process_html_args *)in; lwsl_notice("%s: LWS_CALLBACK_CHECK_ACCESS_RIGHTS: need 0x%x\n", __func__, args->max_len); if (!lwsgs_get_sid_from_wsi(wsi, &sid)) { if (lwsgs_lookup_session(vhd, &sid, username, sizeof(username))) { /* * if we're authenticating for ws, we don't * want to redirect it or gain a cookie on that, * he'll need to get the cookie from http * interactions outside of this. */ if (args->chunked) { lwsl_notice("%s: ws auth failed\n", __func__); return 1; } lwsl_notice("session lookup for %s failed, " "probably expired\n", sid.id); pss->delete_session = sid; args->final = 1; /* signal we dealt with it */ lws_snprintf(pss->onward, sizeof(pss->onward) - 1, "%s%s", vhd->urlroot, args->p); lwsl_notice("redirecting to ourselves with " "cookie refresh\n"); /* we need a redirect to ourselves, * session cookie is expired */ goto redirect_with_cookie; } } else lwsl_notice("failed to get sid from wsi\n"); n = lwsgs_get_auth_level(vhd, username); if ((args->max_len & n) != args->max_len) { lwsl_notice("Access rights fail 0x%X vs 0x%X (cookie %s)\n", args->max_len, n, sid.id); return 1; } lwsl_debug("Access rights OK\n"); break; case LWS_CALLBACK_SESSION_INFO: { struct lwsgs_user u; sinfo = (struct lws_session_info *)in; sinfo->username[0] = '\0'; sinfo->email[0] = '\0'; sinfo->ip[0] = '\0'; sinfo->session[0] = '\0'; sinfo->mask = 0; sid.id[0] = '\0'; lwsl_debug("LWS_CALLBACK_SESSION_INFO\n"); if (lwsgs_get_sid_from_wsi(wsi, &sid)) break; if (lwsgs_lookup_session(vhd, &sid, username, sizeof(username))) break; lws_snprintf(s, sizeof(s) - 1, "select username, email from users where username='%s';", username); if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, &u, NULL) != SQLITE_OK) { lwsl_err("Unable to lookup token: %s\n", sqlite3_errmsg(vhd->pdb)); break; } lws_strncpy(sinfo->username, u.username, sizeof(sinfo->username)); lws_strncpy(sinfo->email, u.email, sizeof(sinfo->email)); lws_strncpy(sinfo->session, sid.id, sizeof(sinfo->session)); sinfo->mask = lwsgs_get_auth_level(vhd, username); lws_get_peer_simple(wsi, sinfo->ip, sizeof(sinfo->ip)); } break; case LWS_CALLBACK_PROCESS_HTML: args = (struct lws_process_html_args *)in; { static const char * const vars[] = { "$lwsgs_user", "$lwsgs_auth", "$lwsgs_email" }; struct lwsgs_subst_args a; a.vhd = vhd; a.pss = pss; a.wsi = wsi; pss->phs.vars = vars; pss->phs.count_vars = LWS_ARRAY_SIZE(vars); pss->phs.replace = lwsgs_subst; pss->phs.data = &a; if (lws_chunked_html_process(args, &pss->phs)) return -1; } break; case LWS_CALLBACK_HTTP_BODY: if (len < 2) break; if (!pss->spa) { pss->spa = lws_spa_create(wsi, param_names, LWS_ARRAY_SIZE(param_names), 1024, NULL, NULL); if (!pss->spa) return -1; } if (lws_spa_process(pss->spa, in, len)) { lwsl_notice("spa process blew\n"); return -1; } break; case LWS_CALLBACK_HTTP_BODY_COMPLETION: if (!pss->spa) break; cp1 = (const char *)pss->onward; if (*cp1 == '/') cp1++; lws_spa_finalize(pss->spa); n = strlen(cp1); if (lws_get_effective_host(wsi, cookie, sizeof(cookie))) return 1; if (!strcmp(cp1 + n - 12, "lwsgs-change")) { if (!lwsgs_handler_change_password(vhd, wsi, pss)) { cp = lws_spa_get_string(pss->spa, FGS_GOOD); goto pass; } cp = lws_spa_get_string(pss->spa, FGS_BAD); lwsl_notice("user/password no good %s\n", lws_spa_get_string(pss->spa, FGS_USERNAME)); lws_snprintf(pss->onward, sizeof(pss->onward), "%s%s", vhd->urlroot, cp); pss->onward[sizeof(pss->onward) - 1] = '\0'; goto completion_flow; } if (!strcmp(cp1 + n - 11, "lwsgs-login")) { lwsl_err("%s: lwsgs-login\n", __func__); if (lws_spa_get_string(pss->spa, FGS_FORGOT) && lws_spa_get_string(pss->spa, FGS_FORGOT)[0]) { if (lwsgs_handler_forgot_pw_form(vhd, wsi, pss)) { n = FGS_FORGOT_BAD; goto reg_done; } /* get the email monitor to take a look */ lws_smtp_client_kick(vhd->smtp_client); n = FGS_FORGOT_GOOD; goto reg_done; } if (!lws_spa_get_string(pss->spa, FGS_USERNAME) || !lws_spa_get_string(pss->spa, FGS_PASSWORD)) { lwsl_notice("username '%s' or pw '%s' missing\n", lws_spa_get_string(pss->spa, FGS_USERNAME), lws_spa_get_string(pss->spa, FGS_PASSWORD)); return -1; } if (lws_spa_get_string(pss->spa, FGS_REGISTER) && lws_spa_get_string(pss->spa, FGS_REGISTER)[0]) { if (lwsgs_handler_register_form(vhd, wsi, pss)) n = FGS_REG_BAD; else { n = FGS_REG_GOOD; /* get the email monitor to take a look */ lws_smtp_client_kick(vhd->smtp_client); } reg_done: lws_snprintf(pss->onward, sizeof(pss->onward), "%s%s", vhd->urlroot, lws_spa_get_string(pss->spa, n)); pss->login_expires = 0; pss->logging_out = 1; goto completion_flow; } /* we have the username and password... check if admin */ if (lwsgw_check_admin(vhd, lws_spa_get_string(pss->spa, FGS_USERNAME), lws_spa_get_string(pss->spa, FGS_PASSWORD))) { if (lws_spa_get_string(pss->spa, FGS_ADMIN)) cp = lws_spa_get_string(pss->spa, FGS_ADMIN); else if (lws_spa_get_string(pss->spa, FGS_GOOD)) cp = lws_spa_get_string(pss->spa, FGS_GOOD); else { lwsl_info("No admin or good target url in form\n"); return -1; } lwsl_debug("admin\n"); goto pass; } /* check users in database */ if (!lwsgs_check_credentials(vhd, lws_spa_get_string(pss->spa, FGS_USERNAME), lws_spa_get_string(pss->spa, FGS_PASSWORD))) { lwsl_notice("pw hash check met\n"); cp = lws_spa_get_string(pss->spa, FGS_GOOD); goto pass; } else lwsl_notice("user/password no good %s %s\n", lws_spa_get_string(pss->spa, FGS_USERNAME), lws_spa_get_string(pss->spa, FGS_PASSWORD)); if (!lws_spa_get_string(pss->spa, FGS_BAD)) { lwsl_info("No admin or good target url in form\n"); return -1; } lws_snprintf(pss->onward, sizeof(pss->onward), "%s%s", vhd->urlroot, lws_spa_get_string(pss->spa, FGS_BAD)); lwsl_notice("failed: %s\n", pss->onward); goto completion_flow; } if (!strcmp(cp1 + n - 12, "lwsgs-logout")) { lwsl_notice("/logout\n"); if (lwsgs_get_sid_from_wsi(wsi, &pss->login_session)) { lwsl_notice("not logged in...\n"); return 1; } /* * We keep the same session, but mark it as not * being associated to any authenticated user */ lwsgw_update_session(vhd, &pss->login_session, ""); if (!lws_spa_get_string(pss->spa, FGS_GOOD)) { lwsl_info("No admin or good target url in form\n"); return -1; } lws_snprintf(pss->onward, sizeof(pss->onward), "%s%s", vhd->urlroot, lws_spa_get_string(pss->spa, FGS_GOOD)); pss->login_expires = 0; pss->logging_out = 1; goto completion_flow; } break; pass: lws_snprintf(pss->onward, sizeof(pss->onward), "%s%s", vhd->urlroot, cp); if (lwsgs_get_sid_from_wsi(wsi, &sid)) sid.id[0] = '\0'; pss->login_expires = lws_now_secs() + vhd->timeout_absolute_secs; if (!sid.id[0]) { /* we need to create a new, authorized session */ if (lwsgs_new_session_id(vhd, &pss->login_session, lws_spa_get_string(pss->spa, FGS_USERNAME), pss->login_expires)) goto try_to_reuse; lwsl_notice("Creating new session: %s\n", pss->login_session.id); } else { /* * we can just update the existing session to be * authorized */ lwsl_notice("Authorizing existing session %s", sid.id); lwsgw_update_session(vhd, &sid, lws_spa_get_string(pss->spa, FGS_USERNAME)); pss->login_session = sid; } completion_flow: lwsgw_expire_old_sessions(vhd); goto redirect_with_cookie; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: if (pss && pss->spa) { lws_spa_destroy(pss->spa); pss->spa = NULL; } break; case LWS_CALLBACK_ADD_HEADERS: lwsgw_expire_old_sessions(vhd); lwsl_warn("ADD_HEADERS\n"); args = (struct lws_process_html_args *)in; if (!pss) return 1; if (pss->delete_session.id[0]) { pc = cookie; lwsgw_cookie_from_session(&pss->delete_session, 0, &pc, cookie + sizeof(cookie) - 1); lwsl_notice("deleting cookie '%s'\n", cookie); if (lws_add_http_header_by_name(wsi, (unsigned char *)"set-cookie:", (unsigned char *)cookie, pc - cookie, (unsigned char **)&args->p, (unsigned char *)args->p + args->max_len)) return 1; } if (!pss->login_session.id[0]) lwsgs_get_sid_from_wsi(wsi, &pss->login_session); if (!pss->login_session.id[0] && !pss->logging_out) { pss->login_expires = lws_now_secs() + vhd->timeout_anon_absolute_secs; if (lwsgs_new_session_id(vhd, &pss->login_session, "", pss->login_expires)) goto try_to_reuse; pc = cookie; lwsgw_cookie_from_session(&pss->login_session, pss->login_expires, &pc, cookie + sizeof(cookie) - 1); lwsl_info("LWS_CALLBACK_ADD_HEADERS: setting cookie '%s'\n", cookie); if (lws_add_http_header_by_name(wsi, (unsigned char *)"set-cookie:", (unsigned char *)cookie, pc - cookie, (unsigned char **)&args->p, (unsigned char *)args->p + args->max_len)) return 1; } break; default: break; } return 0; redirect_with_cookie: p = buffer + LWS_PRE; start = p; end = p + sizeof(buffer) - LWS_PRE; lwsl_warn("%s: redirect_with_cookie\n", __func__); if (lws_add_http_header_status(wsi, HTTP_STATUS_SEE_OTHER, &p, end)) return 1; { char loc[1024], uria[128]; uria[0] = '\0'; lws_hdr_copy_fragment(wsi, uria, sizeof(uria), WSI_TOKEN_HTTP_URI_ARGS, 0); n = lws_snprintf(loc, sizeof(loc), "%s?%s", pss->onward, uria); lwsl_notice("%s: redirect to '%s'\n", __func__, loc); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_LOCATION, (unsigned char *)loc, n, &p, end)) return 1; } if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"text/html", 9, &p, end)) return 1; if (lws_add_http_header_content_length(wsi, 0, &p, end)) return 1; if (pss->delete_session.id[0]) { lwsgw_cookie_from_session(&pss->delete_session, 0, &pc, cookie + sizeof(cookie) - 1); lwsl_notice("deleting cookie '%s'\n", cookie); if (lws_add_http_header_by_name(wsi, (unsigned char *)"set-cookie:", (unsigned char *)cookie, pc - cookie, &p, end)) { lwsl_err("fail0\n"); return 1; } } if (!pss->login_session.id[0]) { pss->login_expires = lws_now_secs() + vhd->timeout_anon_absolute_secs; if (lwsgs_new_session_id(vhd, &pss->login_session, "", pss->login_expires)) { lwsl_err("fail1\n"); return 1; } } else pss->login_expires = lws_now_secs() + vhd->timeout_absolute_secs; if (pss->login_session.id[0] || pss->logging_out) { /* * we succeeded to login, we must issue a login * cookie with the prepared data */ pc = cookie; lwsgw_cookie_from_session(&pss->login_session, pss->login_expires, &pc, cookie + sizeof(cookie) - 1); lwsl_err("%s: setting cookie '%s'\n", __func__, cookie); pss->logging_out = 0; if (lws_add_http_header_by_name(wsi, (unsigned char *)"set-cookie:", (unsigned char *)cookie, pc - cookie, &p, end)) { lwsl_err("fail2\n"); return 1; } } if (lws_finalize_http_header(wsi, &p, end)) return 1; // lwsl_hexdump_notice(start, p - start); n = lws_write(wsi, start, p - start, LWS_WRITE_H2_STREAM_END | LWS_WRITE_HTTP_HEADERS); if (n < 0) return 1; /* fallthru */ try_to_reuse: if (lws_http_transaction_completed(wsi)) return -1; return 0; } static const struct lws_protocols protocols[] = { { "protocol-generic-sessions", callback_generic_sessions, sizeof(struct per_session_data__gs), 1024, }, }; LWS_EXTERN LWS_VISIBLE int init_protocol_generic_sessions(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_generic_sessions(struct lws_context *context) { return 0; } libwebsockets-3.2.1/plugins/generic-sessions/protocol_lws_messageboard.c000066400000000000000000000246421357643561300267510ustar00rootroot00000000000000/* * ws protocol handler plugin for messageboard "generic sessions" demo * * Copyright (C) 2010-2019 Andy Green * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #define LWS_DLL #define LWS_INTERNAL #include #include #include #include struct per_vhost_data__gs_mb { struct lws_vhost *vh; const struct lws_protocols *gsp; sqlite3 *pdb; char message_db[256]; unsigned long last_idx; }; struct per_session_data__gs_mb { void *pss_gs; /* for use by generic-sessions */ struct lws_session_info sinfo; struct lws_spa *spa; unsigned long last_idx; unsigned int our_form:1; char second_http_part; }; static const char * const param_names[] = { "send", "msg", }; enum { MBSPA_SUBMIT, MBSPA_MSG, }; #define MAX_MSG_LEN 512 struct message { unsigned long idx; unsigned long time; char username[32]; char email[100]; char ip[72]; char content[MAX_MSG_LEN]; }; static int lookup_cb(void *priv, int cols, char **col_val, char **col_name) { struct message *m = (struct message *)priv; int n; for (n = 0; n < cols; n++) { if (!strcmp(col_name[n], "idx") || !strcmp(col_name[n], "MAX(idx)")) { if (!col_val[n]) m->idx = 0; else m->idx = atol(col_val[n]); continue; } if (!strcmp(col_name[n], "time")) { m->time = atol(col_val[n]); continue; } if (!strcmp(col_name[n], "username")) { lws_strncpy(m->username, col_val[n], sizeof(m->username)); continue; } if (!strcmp(col_name[n], "email")) { lws_strncpy(m->email, col_val[n], sizeof(m->email)); continue; } if (!strcmp(col_name[n], "ip")) { lws_strncpy(m->ip, col_val[n], sizeof(m->ip)); continue; } if (!strcmp(col_name[n], "content")) { lws_strncpy(m->content, col_val[n], sizeof(m->content)); continue; } } return 0; } static unsigned long get_last_idx(struct per_vhost_data__gs_mb *vhd) { struct message m; if (sqlite3_exec(vhd->pdb, "SELECT MAX(idx) FROM msg;", lookup_cb, &m, NULL) != SQLITE_OK) { lwsl_err("Unable to lookup token: %s\n", sqlite3_errmsg(vhd->pdb)); return 0; } return m.idx; } static int post_message(struct lws *wsi, struct per_vhost_data__gs_mb *vhd, struct per_session_data__gs_mb *pss) { struct lws_session_info sinfo; char s[MAX_MSG_LEN + 512]; char esc[MAX_MSG_LEN + 256]; vhd->gsp->callback(wsi, LWS_CALLBACK_SESSION_INFO, pss->pss_gs, &sinfo, 0); lws_snprintf((char *)s, sizeof(s) - 1, "insert into msg(time, username, email, ip, content)" " values (%lu, '%s', '%s', '%s', '%s');", (unsigned long)lws_now_secs(), sinfo.username, sinfo.email, sinfo.ip, lws_sql_purify(esc, lws_spa_get_string(pss->spa, MBSPA_MSG), sizeof(esc) - 1)); if (sqlite3_exec(vhd->pdb, s, NULL, NULL, NULL) != SQLITE_OK) { lwsl_err("Unable to insert msg: %s\n", sqlite3_errmsg(vhd->pdb)); return 1; } vhd->last_idx = get_last_idx(vhd); /* let everybody connected by this protocol on this vhost know */ lws_callback_on_writable_all_protocol_vhost(lws_get_vhost(wsi), lws_get_protocol(wsi)); return 0; } static int callback_messageboard(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__gs_mb *pss = (struct per_session_data__gs_mb *)user; const struct lws_protocol_vhost_options *pvo; struct per_vhost_data__gs_mb *vhd = (struct per_vhost_data__gs_mb *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); unsigned char *p, *start, *end, buffer[LWS_PRE + 4096]; char s[512]; int n; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: /* per vhost */ vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__gs_mb)); if (!vhd) return 1; vhd->vh = lws_get_vhost(wsi); vhd->gsp = lws_vhost_name_to_protocol(vhd->vh, "protocol-generic-sessions"); if (!vhd->gsp) { lwsl_err("messageboard: requires generic-sessions\n"); return 1; } pvo = (const struct lws_protocol_vhost_options *)in; while (pvo) { if (!strcmp(pvo->name, "message-db")) strncpy(vhd->message_db, pvo->value, sizeof(vhd->message_db) - 1); pvo = pvo->next; } if (!vhd->message_db[0]) { lwsl_err("messageboard: \"message-db\" pvo missing\n"); return 1; } if (lws_struct_sq3_open(lws_get_context(wsi), vhd->message_db, &vhd->pdb)) { lwsl_err("Unable to open message db %s: %s\n", vhd->message_db, sqlite3_errmsg(vhd->pdb)); return 1; } if (sqlite3_exec(vhd->pdb, "create table if not exists msg (" " idx integer primary key, time integer," " username varchar(32), email varchar(100)," " ip varchar(80), content blob);", NULL, NULL, NULL) != SQLITE_OK) { lwsl_err("Unable to create msg table: %s\n", sqlite3_errmsg(vhd->pdb)); return 1; } vhd->last_idx = get_last_idx(vhd); break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (vhd && vhd->pdb) sqlite3_close(vhd->pdb); goto passthru; case LWS_CALLBACK_ESTABLISHED: vhd->gsp->callback(wsi, LWS_CALLBACK_SESSION_INFO, pss->pss_gs, &pss->sinfo, 0); if (!pss->sinfo.username[0]) { lwsl_notice("messageboard ws attempt with no session\n"); return -1; } lws_callback_on_writable(wsi); break; case LWS_CALLBACK_CLOSED: lwsl_debug("%s: LWS_CALLBACK_CLOSED\n", __func__); if (pss && pss->pss_gs) { free(pss->pss_gs); pss->pss_gs = NULL; } break; case LWS_CALLBACK_SERVER_WRITEABLE: { struct message m; char j[MAX_MSG_LEN + 512], e[MAX_MSG_LEN + 512], *p = j + LWS_PRE, *start = p, *end = j + sizeof(j) - LWS_PRE; if (pss->last_idx == vhd->last_idx) break; /* restrict to last 10 */ if (!pss->last_idx) if (vhd->last_idx >= 10) pss->last_idx = vhd->last_idx - 10; sprintf(s, "select idx, time, username, email, ip, content " "from msg where idx > %lu order by idx limit 1;", pss->last_idx); if (sqlite3_exec(vhd->pdb, s, lookup_cb, &m, NULL) != SQLITE_OK) { lwsl_err("Unable to lookup msg: %s\n", sqlite3_errmsg(vhd->pdb)); return 0; } /* format in JSON */ p += lws_snprintf(p, end - p, "{\"idx\":\"%lu\",\"time\":\"%lu\",", m.idx, m.time); p += lws_snprintf(p, end - p, " \"username\":\"%s\",", lws_json_purify(e, m.username, sizeof(e))); p += lws_snprintf(p, end - p, " \"email\":\"%s\",", lws_json_purify(e, m.email, sizeof(e))); p += lws_snprintf(p, end - p, " \"ip\":\"%s\",", lws_json_purify(e, m.ip, sizeof(e))); p += lws_snprintf(p, end - p, " \"content\":\"%s\"}", lws_json_purify(e, m.content, sizeof(e))); if (lws_write(wsi, (unsigned char *)start, p - start, LWS_WRITE_TEXT) < 0) return -1; pss->last_idx = m.idx; if (pss->last_idx == vhd->last_idx) break; lws_callback_on_writable(wsi); /* more to do */ } break; case LWS_CALLBACK_HTTP: pss->our_form = 0; /* ie, it's our messageboard new message form */ if (!strcmp((const char *)in, "/msg") || !strcmp((const char *)in, "msg")) { pss->our_form = 1; break; } goto passthru; case LWS_CALLBACK_HTTP_BODY: if (!pss->our_form) goto passthru; if (len < 2) break; if (!pss->spa) { pss->spa = lws_spa_create(wsi, param_names, LWS_ARRAY_SIZE(param_names), MAX_MSG_LEN + 1024, NULL, NULL); if (!pss->spa) return -1; } if (lws_spa_process(pss->spa, in, len)) { lwsl_notice("spa process blew\n"); return -1; } break; case LWS_CALLBACK_HTTP_WRITEABLE: if (!pss->second_http_part) goto passthru; s[0] = '0'; n = lws_write(wsi, (unsigned char *)s, 1, LWS_WRITE_HTTP| LWS_WRITE_H2_STREAM_END); if (n != 1) return -1; goto try_to_reuse; case LWS_CALLBACK_HTTP_BODY_COMPLETION: if (!pss->our_form) goto passthru; if (post_message(wsi, vhd, pss)) return -1; p = buffer + LWS_PRE; start = p; end = p + sizeof(buffer) - LWS_PRE; if (lws_add_http_header_status(wsi, HTTP_STATUS_OK, &p, end)) return -1; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"text/plain", 10, &p, end)) return -1; if (lws_add_http_header_content_length(wsi, 1, &p, end)) return -1; if (lws_finalize_http_header(wsi, &p, end)) return -1; n = lws_write(wsi, start, p - start, LWS_WRITE_HTTP_HEADERS); if (n != (p - start)) { lwsl_err("_write returned %d from %ld\n", n, (long)(p - start)); return -1; } pss->second_http_part = 1; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_HTTP_BIND_PROTOCOL: if (!pss || !vhd || pss->pss_gs) break; pss->pss_gs = malloc(vhd->gsp->per_session_data_size); if (!pss->pss_gs) return -1; memset(pss->pss_gs, 0, vhd->gsp->per_session_data_size); break; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: if (vhd->gsp->callback(wsi, reason, pss ? pss->pss_gs : NULL, in, len)) return -1; if (pss && pss->spa) { lws_spa_destroy(pss->spa); pss->spa = NULL; } if (pss && pss->pss_gs) { free(pss->pss_gs); pss->pss_gs = NULL; } break; default: passthru: if (!pss || !vhd) break; return vhd->gsp->callback(wsi, reason, pss->pss_gs, in, len); } return 0; try_to_reuse: if (lws_http_transaction_completed(wsi)) return -1; return 0; } static const struct lws_protocols protocols[] = { { "protocol-lws-messageboard", callback_messageboard, sizeof(struct per_session_data__gs_mb), 4096, }, }; LWS_EXTERN LWS_VISIBLE int init_protocol_lws_messageboard(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_lws_messageboard(struct lws_context *context) { return 0; } libwebsockets-3.2.1/plugins/generic-sessions/utils.c000066400000000000000000000257501357643561300226500ustar00rootroot00000000000000/* * ws protocol handler plugin for "generic sessions" * * Copyright (C) 2010-2016 Andy Green * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "private-lwsgs.h" #include void sha256_to_lwsgw_hash(unsigned char *hash, lwsgw_hash *shash) { static const char *hex = "0123456789abcdef"; char *p = shash->id; int n; for (n = 0; n < (int)lws_genhash_size(LWS_GENHASH_TYPE_SHA256); n++) { *p++ = hex[(hash[n] >> 4) & 0xf]; *p++ = hex[hash[n] & 15]; } *p = '\0'; } int lwsgw_check_admin(struct per_vhost_data__gs *vhd, const char *username, const char *password) { lwsgw_hash_bin hash_bin; lwsgw_hash pw_hash; if (strcmp(vhd->admin_user, username)) return 0; lws_SHA1((unsigned char *)password, strlen(password), hash_bin.bin); sha256_to_lwsgw_hash(hash_bin.bin, &pw_hash); return !strcmp(vhd->admin_password_sha256.id, pw_hash.id); } /* * secure cookie: it can only be passed over https where it cannot be * snooped in transit * HttpOnly: it can only be accessed via http[s] transport, it cannot be * gotten at by JS */ void lwsgw_cookie_from_session(lwsgw_hash *sid, time_t expires, char **p, char *end) { struct tm *tm = gmtime(&expires); time_t n = lws_now_secs(); *p += lws_snprintf(*p, end - *p, "id=%s;Expires=", sid->id); #ifdef WIN32 *p += strftime(*p, end - *p, "%Y %H:%M %Z", tm); #else *p += strftime(*p, end - *p, "%F %H:%M %Z", tm); #endif *p += lws_snprintf(*p, end - *p, ";path=/"); *p += lws_snprintf(*p, end - *p, ";Max-Age=%lu", (unsigned long)(expires - n)); // *p += lws_snprintf(*p, end - *p, ";secure"); *p += lws_snprintf(*p, end - *p, ";HttpOnly"); } int lwsgw_expire_old_sessions(struct per_vhost_data__gs *vhd) { time_t n = lws_now_secs(); char s[200]; if (n - vhd->last_session_expire < 5) return 0; vhd->last_session_expire = n; lws_snprintf(s, sizeof(s) - 1, "delete from sessions where " "expire <= %lu;", (unsigned long)n); if (sqlite3_exec(vhd->pdb, s, NULL, NULL, NULL) != SQLITE_OK) { lwsl_err("Unable to expire sessions: %s\n", sqlite3_errmsg(vhd->pdb)); return 1; } return 0; } int lwsgw_update_session(struct per_vhost_data__gs *vhd, lwsgw_hash *hash, const char *user) { time_t n = lws_now_secs(); char s[200], esc[96], esc1[96]; if (user[0]) n += vhd->timeout_absolute_secs; else n += vhd->timeout_anon_absolute_secs; lws_snprintf(s, sizeof(s) - 1, "update sessions set expire=%lu,username='%s' where name='%s';", (unsigned long)n, lws_sql_purify(esc, user, sizeof(esc)), lws_sql_purify(esc1, hash->id, sizeof(esc1))); if (sqlite3_exec(vhd->pdb, s, NULL, NULL, NULL) != SQLITE_OK) { lwsl_err("Unable to update session: %s\n", sqlite3_errmsg(vhd->pdb)); return 1; } puts(s); return 0; } static int lwsgw_session_from_cookie(const char *cookie, lwsgw_hash *sid) { const char *p = cookie; int n; while (*p) { if (p[0] == 'i' && p[1] == 'd' && p[2] == '=') { p += 3; break; } p++; } if (!*p) { lwsl_info("no id= in cookie\n"); return 1; } for (n = 0; n < (int)sizeof(sid->id) - 1 && *p; n++) { /* our SID we issue only has these chars */ if ((*p >= '0' && *p <= '9') || (*p >= 'a' && *p <= 'f')) sid->id[n] = *p++; else { lwsl_info("bad chars in cookie id %c\n", *p); return 1; } } if (n < (int)sizeof(sid->id) - 1) { lwsl_info("cookie id too short\n"); return 1; } sid->id[sizeof(sid->id) - 1] = '\0'; return 0; } int lwsgs_get_sid_from_wsi(struct lws *wsi, lwsgw_hash *sid) { char cookie[1024]; /* fail it on no cookie */ if (!lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COOKIE)) { lwsl_info("%s: no cookie\n", __func__); return 1; } if (lws_hdr_copy(wsi, cookie, sizeof cookie, WSI_TOKEN_HTTP_COOKIE) < 0) { lwsl_info("cookie copy failed\n"); return 1; } /* extract the sid from the cookie */ if (lwsgw_session_from_cookie(cookie, sid)) { lwsl_info("%s: session from cookie failed\n", __func__); return 1; } return 0; } struct lla { char *username; int len; int results; }; static int lwsgs_lookup_callback(void *priv, int cols, char **col_val, char **col_name) { struct lla *lla = (struct lla *)priv; //lwsl_err("%s: %d\n", __func__, cols); if (cols) lla->results = 0; if (col_val && col_val[0]) { lws_strncpy(lla->username, col_val[0], lla->len + 1); lwsl_info("%s: %s\n", __func__, lla->username); } return 0; } int lwsgs_lookup_session(struct per_vhost_data__gs *vhd, const lwsgw_hash *sid, char *username, int len) { struct lla lla = { username, len, 1 }; char s[150], esc[96]; lwsgw_expire_old_sessions(vhd); lws_snprintf(s, sizeof(s) - 1, "select username from sessions where name = '%s';", lws_sql_purify(esc, sid->id, sizeof(esc) - 1)); if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback, &lla, NULL) != SQLITE_OK) { lwsl_err("Unable to create user table: %s\n", sqlite3_errmsg(vhd->pdb)); return 1; } /* 0 if found */ return lla.results; } int lwsgs_lookup_callback_user(void *priv, int cols, char **col_val, char **col_name) { struct lwsgs_user *u = (struct lwsgs_user *)priv; int n; for (n = 0; n < cols; n++) { if (!strcmp(col_name[n], "username")) { lws_strncpy(u->username, col_val[n], sizeof(u->username)); continue; } if (!strcmp(col_name[n], "ip")) { lws_strncpy(u->ip, col_val[n], sizeof(u->ip)); continue; } if (!strcmp(col_name[n], "creation_time")) { u->created = atol(col_val[n]); continue; } if (!strcmp(col_name[n], "last_forgot_validated")) { if (col_val[n]) u->last_forgot_validated = atol(col_val[n]); else u->last_forgot_validated = 0; continue; } if (!strcmp(col_name[n], "email")) { lws_strncpy(u->email, col_val[n], sizeof(u->email)); continue; } if (!strcmp(col_name[n], "verified")) { u->verified = atoi(col_val[n]); continue; } if (!strcmp(col_name[n], "pwhash")) { lws_strncpy(u->pwhash.id, col_val[n], sizeof(u->pwhash.id)); continue; } if (!strcmp(col_name[n], "pwsalt")) { lws_strncpy(u->pwsalt.id, col_val[n], sizeof(u->pwsalt.id)); continue; } if (!strcmp(col_name[n], "token")) { lws_strncpy(u->token.id, col_val[n], sizeof(u->token.id)); continue; } } return 0; } int lwsgs_lookup_user(struct per_vhost_data__gs *vhd, const char *username, struct lwsgs_user *u) { char s[150], esc[96]; u->username[0] = '\0'; lws_snprintf(s, sizeof(s) - 1, "select username,creation_time,ip,email,verified,pwhash,pwsalt,last_forgot_validated " "from users where username = '%s';", lws_sql_purify(esc, username, sizeof(esc) - 1)); if (sqlite3_exec(vhd->pdb, s, lwsgs_lookup_callback_user, u, NULL) != SQLITE_OK) { lwsl_err("Unable to lookup user: %s\n", sqlite3_errmsg(vhd->pdb)); return -1; } return !u->username[0]; } int lwsgs_new_session_id(struct per_vhost_data__gs *vhd, lwsgw_hash *sid, const char *username, int exp) { unsigned char sid_rand[32]; const char *u; char s[300], esc[96], esc1[96]; if (username) u = username; else u = ""; if (!sid) { lwsl_err("%s: NULL sid\n", __func__); return 1; } memset(sid, 0, sizeof(*sid)); if (lws_get_random(vhd->context, sid_rand, sizeof(sid_rand)) != sizeof(sid_rand)) return 1; sha256_to_lwsgw_hash(sid_rand, sid); lws_snprintf(s, sizeof(s) - 1, "insert into sessions(name, username, expire) " "values ('%s', '%s', %u);", lws_sql_purify(esc, sid->id, sizeof(esc) - 1), lws_sql_purify(esc1, u, sizeof(esc1) - 1), exp); if (sqlite3_exec(vhd->pdb, s, NULL, NULL, NULL) != SQLITE_OK) { lwsl_err("Unable to insert session: %s\n", sqlite3_errmsg(vhd->pdb)); return 1; } lwsl_notice("%s: created session %s\n", __func__, sid->id); return 0; } int lwsgs_get_auth_level(struct per_vhost_data__gs *vhd, const char *username) { struct lwsgs_user u; int n = 0; /* we are logged in as some kind of user */ if (username[0]) { /* we are logged in as admin */ if (!strcmp(username, vhd->admin_user)) /* automatically verified */ n |= LWSGS_AUTH_VERIFIED | LWSGS_AUTH_ADMIN; } if (!lwsgs_lookup_user(vhd, username, &u)) { if ((u.verified & 0xff) == LWSGS_VERIFIED_ACCEPTED) n |= LWSGS_AUTH_LOGGED_IN | LWSGS_AUTH_VERIFIED; if (u.last_forgot_validated > (time_t)lws_now_secs() - 300) n |= LWSGS_AUTH_FORGOT_FLOW; } return n; } int lwsgs_check_credentials(struct per_vhost_data__gs *vhd, const char *username, const char *password) { struct lws_genhash_ctx hash_ctx; lwsgw_hash_bin hash_bin; struct lwsgs_user u; lwsgw_hash hash; if (lwsgs_lookup_user(vhd, username, &u)) return -1; lwsl_info("user %s found, salt '%s'\n", username, u.pwsalt.id); /* sha256sum of password + salt */ if (lws_genhash_init(&hash_ctx, LWS_GENHASH_TYPE_SHA256) || lws_genhash_update(&hash_ctx, password, strlen(password)) || lws_genhash_update(&hash_ctx, "-", 1) || lws_genhash_update(&hash_ctx, vhd->confounder, strlen(vhd->confounder)) || lws_genhash_update(&hash_ctx, "-", 1) || lws_genhash_update(&hash_ctx, u.pwsalt.id, strlen(u.pwsalt.id)) || lws_genhash_destroy(&hash_ctx, hash_bin.bin)) { lws_genhash_destroy(&hash_ctx, NULL); return 1; } sha256_to_lwsgw_hash(&hash_bin.bin[0], &hash); return !!strcmp(hash.id, u.pwhash.id); } /* sets u->pwsalt and u->pwhash */ int lwsgs_hash_password(struct per_vhost_data__gs *vhd, const char *password, struct lwsgs_user *u) { unsigned char sid_rand[32]; struct lws_genhash_ctx hash_ctx; lwsgw_hash_bin hash_bin; /* create a random salt as big as the hash */ if (lws_get_random(vhd->context, sid_rand, sizeof(sid_rand)) != sizeof(sid_rand)) { lwsl_err("Problem getting random for salt\n"); return 1; } sha256_to_lwsgw_hash(sid_rand, &u->pwsalt); /* if (lws_get_random(vhd->context, sid_rand, sizeof(sid_rand)) != sizeof(sid_rand)) { lwsl_err("Problem getting random for token\n"); return 1; } sha256_to_lwsgw_hash(sid_rand, &hash); */ /* sha256sum of password + salt */ if (lws_genhash_init(&hash_ctx, LWS_GENHASH_TYPE_SHA256) || lws_genhash_update(&hash_ctx, password, strlen(password)) || lws_genhash_update(&hash_ctx, "-", 1) || lws_genhash_update(&hash_ctx, vhd->confounder, strlen(vhd->confounder)) || lws_genhash_update(&hash_ctx, "-", 1) || lws_genhash_update(&hash_ctx, u->pwsalt.id, strlen(u->pwsalt.id)) || lws_genhash_destroy(&hash_ctx, hash_bin.bin)) { lws_genhash_destroy(&hash_ctx, NULL); return 1; } sha256_to_lwsgw_hash(&hash_bin.bin[0], &u->pwhash); return 0; } libwebsockets-3.2.1/plugins/generic-table/000077500000000000000000000000001357643561300205545ustar00rootroot00000000000000libwebsockets-3.2.1/plugins/generic-table/assets/000077500000000000000000000000001357643561300220565ustar00rootroot00000000000000libwebsockets-3.2.1/plugins/generic-table/assets/index.html000066400000000000000000000050151357643561300240540ustar00rootroot00000000000000
LWS Generic Table demo
This is a demo of lws generic table, using a protocol plugin "protocol-lws-table-dirlisting". It shows a directory listing, but unlike an oldstyle directory listing done on the server side with a script, this is static html that connects back to the server with a websocket, and gets live JSON from that.

Actually the static html is extremely simple, since it uses lwsgt, LWS Generic Table, JS include on the client-side that handles all the table generation from a template sent in JSON over the ws link. It means there is no custom JS required clientside either. It's just CSS, this text and a call to initialize lwsgt with the appropriate ws protocol.

There's no problem having multiple independent instances per page...

libwebsockets-3.2.1/plugins/generic-table/assets/lwsgt.js000066400000000000000000000072431357643561300235620ustar00rootroot00000000000000function lwsgt_get_appropriate_ws_url() { var pcol; var u = document.URL; if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } return pcol + u; } function lwsgt_app_hdr(j, bc, ws) { var s = "", n, m = 0; ws.bcq = 0; for (n = 0; n < j.cols.length; n++) if (!j.cols[n].hide) m++; s = "" + ws.lwsgt_title + ""; if (!!bc) { s += ""; for (n = 0; n < bc.length; n++) { s += " / "; if (!bc[n].url && bc[n].url !== "") s += " " + lws_san(bc[n].name) + " "; else { s += "" + lws_san(bc[n].name) + " "; ws.bcq++; } } s += ""; } s += ""; for (n = 0; n < j.cols.length; n++) if (!j.cols[n].hide) s = s + "" + lws_san(j.cols[n].name) + ""; s += ""; return s; } function lwsgt_click_callthru() { window[this.getAttribute("h")](this.getAttribute("p"), this.getAttribute("aa"), this.getAttribute("m"), this.getAttribute("n")); event.preventDefault(); } function lwsgt_initial(title, pcol, divname, cb, gname) { this.divname = divname; lws_gray_out(true,{"zindex":"499"}); if (typeof MozWebSocket != "undefined") this.lwsgt_ws = new MozWebSocket(lwsgt_get_appropriate_ws_url(), pcol); else this.lwsgt_ws = new WebSocket(lwsgt_get_appropriate_ws_url(), pcol); this.lwsgt_ws.divname = divname; this.lwsgt_ws.lwsgt_cb = cb; this.lwsgt_ws.lwsgt_parent = gname; this.lwsgt_ws.lwsgt_title = title; try { this.lwsgt_ws.onopen = function() { lws_gray_out(false); // document.getElementById("debug").textContent = // "ws opened " + lwsgt_get_appropriate_ws_url(); }; this.lwsgt_ws.onmessage = function got_packet(msg) { var s, m, n, j = JSON.parse(msg.data); document.getElementById("debug").textContent = msg.data; if (j.cols) { this.hdr = j; } if (j.breadcrumbs) this.breadcrumbs = j.breadcrumbs; if (j.data) { var q = 0; s = "" + lwsgt_app_hdr(this.hdr, this.breadcrumbs, this); for (m = 0; m < j.data.length; m++) { s = s + ""; for (n = 0; n < this.hdr.cols.length; n++) { if (!this.hdr.cols[n].hide) { if (!this.hdr.cols[n].align) s = s + ""; } } s = s + ""; } s = s + "
"; else s = s + ""; if (this.hdr.cols[n].href && !!j.data[m][this.hdr.cols[n].href]) { s = s + "" + lws_san(j.data[m][this.hdr.cols[n].name]) + ""; q++; } else s = s + lws_san(j.data[m][this.hdr.cols[n].name]); s = s + "
"; document.getElementById(this.divname).innerHTML = s; for (n = 0; n < q; n++) document.getElementById(this.divname + n).onclick = lwsgt_click_callthru; for (n = 0; n < this.bcq; n++) document.getElementById("bc_" + this.divname + n).onclick = lwsgt_click_callthru; } }; this.lwsgt_ws.onclose = function(){ lws_gray_out(true,{"zindex":"499"}); }; } catch(exception) { alert("

Error" + exception); } } libwebsockets-3.2.1/plugins/generic-table/protocol_table_dirlisting.c000066400000000000000000000220261357643561300261620ustar00rootroot00000000000000/* * ws protocol handler plugin for dirlisting "generic table" demo * * Copyright (C) 2010-2016 Andy Green * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #define LWS_DLL #define LWS_INTERNAL #include #include #include #include struct fobj { struct fobj *next; const char *name, *uri, *icon, *date; time_t m; unsigned long size; }; struct per_session_data__tbl_dir { struct fobj base; char strings[64 * 1024]; char reldir[256]; char *p; const char *dir; #if UV_VERSION_MAJOR > 0 uv_fs_event_t *event_req; #endif struct lws *wsi; }; #if UV_VERSION_MAJOR > 0 static void mon_cb(uv_fs_event_t *handle, const char *filename, int events, int status) { struct per_session_data__tbl_dir *pss = handle->data; //lwsl_notice("%s\n", __func__); if (pss && pss->wsi) lws_callback_on_writable(pss->wsi); } static void lws_uv_close_cb(uv_handle_t *handle) { free(handle); } static void lws_protocol_dir_kill_monitor(struct per_session_data__tbl_dir *pss) { if (!pss->event_req) return; pss->wsi = NULL; pss->event_req->data = NULL; uv_fs_event_stop(pss->event_req); uv_close((uv_handle_t *)pss->event_req, lws_uv_close_cb); pss->event_req = NULL; } #endif static int scan_dir(struct lws *wsi, struct per_session_data__tbl_dir *pss) { /* uuh travis... */ #if UV_VERSION_MAJOR > 0 uv_loop_t *loop = lws_uv_getloop(lws_get_context(wsi), 0); char *end = &(pss->strings[sizeof(pss->strings) - 1]); struct fobj *prev = &pss->base; char path[512], da[200]; const char *icon; uv_dirent_t dent; struct fobj *f; struct stat st; struct tm *tm; int ret = 0, n; uv_fs_t req; lws_protocol_dir_kill_monitor(pss); lws_snprintf(path, sizeof(path) - 1, "%s/%s", pss->dir, pss->reldir); //lwsl_notice("path = %s\n", path); pss->event_req = malloc(sizeof(*pss->event_req)); if (!pss->event_req) return 2; pss->wsi = wsi; pss->event_req->data = pss; uv_fs_event_init(lws_uv_getloop(lws_get_context(wsi), 0), pss->event_req); // The recursive flag watches subdirectories too. n = uv_fs_event_start(pss->event_req, mon_cb, path, UV_FS_EVENT_RECURSIVE); //lwsl_notice("monitoring %s (%d)\n", path, n); if (!uv_fs_scandir(loop, &req, path, 0, NULL)) { lwsl_err("Scandir on %s failed\n", path); return 2; } pss->p = pss->strings; while (uv_fs_scandir_next(&req, &dent) != UV_EOF) { lws_snprintf(path, sizeof(path) - 1, "%s/%s/%s", pss->dir, pss->reldir, dent.name); if (stat(path, &st)) { lwsl_info("unable to stat %s\n", path); continue; } f = malloc(sizeof(*f)); f->next = NULL; f->name = pss->p; n = lws_snprintf(pss->p, end - pss->p, "%s", dent.name); pss->p += n + 1; f->uri = NULL; if ((S_IFMT & st.st_mode) == S_IFDIR) { n = lws_snprintf(pss->p, end - pss->p, "=%s/%s", pss->reldir, dent.name); f->uri = pss->p; } if (lws_get_mimetype(dent.name, NULL)) { n = lws_snprintf(pss->p, end - pss->p, "./serve/%s/%s", pss->reldir, dent.name); f->uri = pss->p; } if (f->uri) pss->p += n + 1; if (end - pss->p < 100) { free(f); break; } icon = " "; if ((S_IFMT & st.st_mode) == S_IFDIR) icon = "📂"; f->icon = pss->p; n = lws_snprintf(pss->p, end - pss->p, "%s", icon); pss->p += n + 1; f->date = pss->p; tm = gmtime(&st.st_mtime); strftime(da, sizeof(da), "%Y-%b-%d %H:%M:%S %z", tm); n = lws_snprintf(pss->p, end - pss->p, "%s", da); pss->p += n + 1; f->size = st.st_size; f->m = st.st_mtime; prev->next = f; prev = f; } uv_fs_req_cleanup(&req); return ret; #else return 0; #endif } static void free_scan_dir(struct per_session_data__tbl_dir *pss) { struct fobj *f = pss->base.next, *f1; while (f) { f1 = f->next; free(f); f = f1; } pss->base.next = NULL; } static int callback_lws_table_dirlisting(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__tbl_dir *pss = (struct per_session_data__tbl_dir *)user; char j[LWS_PRE + 16384], *p = j + LWS_PRE, *start = p, *q, *q1, *w, *end = j + sizeof(j) - LWS_PRE, e[384], s[384], s1[384]; const struct lws_protocol_vhost_options *pmo; struct fobj *f; int n, first = 1; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: /* per vhost */ break; case LWS_CALLBACK_ESTABLISHED: lwsl_debug("LWS_CALLBACK_ESTABLISHED\n"); /* * send client the lwsgt table layout */ start = "{\"cols\":[" " {\"name\": \"Date\"}," " {\"name\": \"Size\", \"align\": \"right\"}," " {\"name\": \"Icon\"}," " {\"name\": \"Name\", \"href\": \"uri\"}," " {\"name\": \"uri\", \"hide\": \"1\" }" " ]" "}"; if (lws_write(wsi, (unsigned char *)start, strlen(start), LWS_WRITE_TEXT) < 0) return -1; /* send a view update next */ lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RECEIVE: if (len > sizeof(pss->reldir) - 1) len = sizeof(pss->reldir) - 1; if (!strstr(in, "..") && !strchr(in, '~')) lws_strncpy(pss->reldir, in, len + 1); else len = 0; pss->reldir[len] = '\0'; if (pss->reldir[0] == '/' && !pss->reldir[1]) pss->reldir[0] = '\0'; lwsl_info("%s\n", pss->reldir); lws_callback_on_writable(wsi); break; case LWS_CALLBACK_SERVER_WRITEABLE: if (scan_dir(wsi, pss)) return 1; p += lws_snprintf(p, end - p, "{\"breadcrumbs\":["); q = pss->reldir; if (!q[0]) p += lws_snprintf(p, end - p, "{\"name\":\"top\"}"); while (*q) { q1 = strchr(q, '/'); if (!q1) { if (first) strcpy(s, "top1"); else strcpy(s, q); s1[0] = '\0'; q += strlen(q); } else { n = lws_ptr_diff(q1, q); if (n > (int)sizeof(s) - 1) n = sizeof(s) - 1; if (first) { strcpy(s1, "/"); strcpy(s, "top"); } else { lws_strncpy(s, q, n + 1); n = lws_ptr_diff(q1, pss->reldir); if (n > (int)sizeof(s1) - 1) n = sizeof(s1) - 1; lws_strncpy(s1, pss->reldir, n + 1); } q = q1 + 1; } if (!first) p += lws_snprintf(p, end - p, ","); else first = 0; p += lws_snprintf(p, end - p, "{\"name\":\"%s\"", lws_json_purify(e, s, sizeof(e))); if (*q) { w = s1; while (w[0] == '/' && w[1] == '/') w++; p += lws_snprintf(p, end - p, ",\"url\":\"%s\"", lws_json_purify(e, w, sizeof(e))); } p += lws_snprintf(p, end - p, "}"); if (!q1) break; } p += lws_snprintf(p, end - p, "],\"data\":["); f = pss->base.next; while (f) { /* format in JSON */ p += lws_snprintf(p, end - p, "{\"Icon\":\"%s\",", lws_json_purify(e, f->icon, sizeof(e))); p += lws_snprintf(p, end - p, " \"Date\":\"%s\",", lws_json_purify(e, f->date, sizeof(e))); p += lws_snprintf(p, end - p, " \"Size\":\"%ld\",", f->size); if (f->uri) p += lws_snprintf(p, end - p, " \"uri\":\"%s\",", lws_json_purify(e, f->uri, sizeof(e))); p += lws_snprintf(p, end - p, " \"Name\":\"%s\"}", lws_json_purify(e, f->name, sizeof(e))); f = f->next; if (f) p += lws_snprintf(p, end - p, ","); } p += lws_snprintf(p, end - p, "]}"); free_scan_dir(pss); if (lws_write(wsi, (unsigned char *)start, p - start, LWS_WRITE_TEXT) < 0) return -1; break; case LWS_CALLBACK_HTTP_PMO: /* find the per-mount options we're interested in */ lwsl_debug("LWS_CALLBACK_HTTP_PMO\n"); pmo = (struct lws_protocol_vhost_options *)in; while (pmo) { if (!strcmp(pmo->name, "dir")) /* path to list files */ pss->dir = pmo->value; pmo = pmo->next; } if (!pss->dir[0]) { lwsl_err("dirlisting: \"dir\" pmo missing\n"); return 1; } break; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: //lwsl_notice("LWS_CALLBACK_HTTP_DROP_PROTOCOL\n"); #if UV_VERSION_MAJOR > 0 lws_protocol_dir_kill_monitor(pss); #endif break; default: return 0; } return 0; } static const struct lws_protocols protocols[] = { { "protocol-lws-table-dirlisting", callback_lws_table_dirlisting, sizeof(struct per_session_data__tbl_dir), 0, }, }; LWS_EXTERN LWS_VISIBLE int init_protocol_lws_table_dirlisting(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_lws_table_dirlisting(struct lws_context *context) { return 0; } libwebsockets-3.2.1/plugins/lwsws-logo.png000066400000000000000000000120641357643561300207010ustar00rootroot00000000000000‰PNG  IHDR–&&Ėb—sBIT|dˆ pHYsÕÕ/!•ÜtEXtSoftwarewww.inkscape.org›ī<±IDATxœķ\yPTWöžhhvpAÖl#Q‰J4Fqˆ–Ė˜ŸL&ĘčD%ĘÉbÜfƒA`L5.!˜q‰KEKœv+ŒDĀ*¢€";Żl6Żßļg?ŗé††qfŠÆźVŃēŽwĻ]¾wĻ¹ēŽ‡ ‚d€’Ćš+abbbÆłŪLKn`šoߜüƀ¤‰‰‰ @ņø3€’M kż3ćE ÷ļßGQQąķķ 3³~W9 ‰ęęf(•JX[[ĆÜܼ_õõŪŠÕŚŚŠ;v`Üøq˜9s&†ÜÜÜžRŁkØT*ØÕj€R©|Ģ­é?“··ćŠ”CX²d ęĶ›‡×^{ ?’üóo£œäģ#ØÕjĘĘĘŅĀĀ‚8wī\œIII}­ŹDĆ'mbxP^“¶öŒ‘&&Ąˆ€µµ(Ŗ®®Ę‚ šš ©TŠĖ—/£°°VVVX¶lrrrąććÓe•*• ēϟǜ9s •J –¹pįŚŚŚŒ«WÆĀÄÄööö;v, !‘H T*Q^^Ž   ¤„„ĮĻĻšņņBmm-īܹƒ3fĄÅÅ_|ńllląźź ”••aņäÉ=ƒĒ€ööv¤„„!$$¦¦¦]–+++Ƙ1c°gĻųūū£°°K—.…J„ĀĀ… qōčQŲŲŲōU³$š]”a‡ē“O€;ž˜33`õj &°“ ˜Į††IīŻ»‡ŲŲXŲŲŲ@"‘ķI“!¶D"Ahh(222ąččˆööv(•J¤§§C"‘ĄŚŚ·oßʈ#PUUOOOܼy...ØÆÆGcc#ʏ/Ö7lŲ0Lœ8łłłČĖĖėv²ž@••• Łm¹––“¶¶¢  §NĀŪoæ ‰D•J…¢¢"ŌÕÕu̇Z œ:ģŪģ QQQįƇ#//^^^ÜĘ’xxx <<‡ĀĢ™3ńĖ/戞¤)5¤zķ5T2™`ŗĆˆĄK/u_†ŻłX••äžżdTyźŁŌŌ‘wó&9{6ijJ¾ōY[K„RÉ„K—ŠĀĀ‚/¼šoß¾Ż#æI©Tņųńć|šąA—eŽ;ʬ¬,’d^^‹ŠŠH’÷īŻccc# «««™žžĪ¦¦&Ö>lWZZ«««yėÖ-ŽøqƒMūRPPĄŸ~ś‰$yéŅ%£~ąćʃxüųq*•J£e•J%‹‹‹łŁgŸŃŻŻ]œ—Y³fQ.—“*łÕW¤­-9lyś“n ™›KŽæoL•>Ł±ČšpŅŅ’ōö&½¼ČĶ›ÉÖ֎2dh()‘Ė—“••Œ§T*;ajjŹåĖ—³±±±GaŒX¹¹¹Fėł5P©TĢČČč—ŗū½!I8p€¶¶¶ā|ą®]»H„’£GI$$$ą»ļ¾CQQ,--įģģŒŠŠP„‡‡?rĢ)>>[¶lB”e¾¾¾ˆX“ųōSa^Ķ́€šš˜“¬['˜»qć€?¢£gŸz¦œ]­X›7“yż:)—“—.‘ė×ė2[­&cbH3322’ljbII e2™Ī[€Ææž:›››»|»z²b½ņŹ+ š@m¼õÖ[Ą3gĪčåżįąäɓõägĻž%īŻ»—$™ššŹ”C‡Š«­¹¹¹Ųž;w2//Oü-‘H“ņ­­­“²²"nŪ¶MGĻsĻ='>—‘‘A„RÉŋė‘&½õÖ[ūߓ«½½ß|ó uꓱ±į‰'ØŖ®&gĪę,:Z0‰ØÕäūļ“›6‘eeĀ*uį‚Ą…˜˜®Tö¾śŖP™\N&' žŌ’H<ØŻņ_’Ģe@YQ!fåēēsĀ„ :“H$|żõשP( Ŗ|Tb;vŒųĪ;ļčå¹ŗŗR*•źéŽŗu+033“$9vģXš˜˜šĄlkk£Z­fYY?łäŃWŌž°«WƊu%''‹ņ9sęččńņņ"ZZZ²­­ūöķė’T˜œœl°’ʈ„V«yīÜ96LT{÷īķšuÓÓIwwrĀņĪķ Ÿś£ČµkÉģl²¦FąĀźÕu²WÄŚµ‹41!33Éŗ:rėVrĒĮ”#R8!Ųg{{rŠ į­)++‹“&MŅé §§' Ŗ|Tbݾ}›¦#/..ęĆ8 uņęϟOkkk>xš€UUU¢sŪ~÷»ß‰ż9Øõ¢ķŲ±C”<˜ķķķ$ÉęęfJ$`pp0IrƌbŁ-[¶P”P°¶¶–©©©Ü°aC—›cÄ*))įčŃ£uĘÜĪĪŽqqqŗÓŅ ɒķ#CBČ  ²ØH˜€|óĶ®†¤ÄŖ®&.$Ē#üQ×ü©TäŁ³¤‹ éę&,•æ’=9x0¹}»ŽƒŸššŖ³#ńšš`~~¾A•J,’tssć!Ct&ęšįĆōņņāŠ”CłŽ{ļé”÷ššąŌ©SI’åååĄÅ‹w©Ÿ$ß’}±?oj vXX˜Ī„jvÆŁŁŁ¢ģķ·ß&Iśųųˆ²²²²nõiƱņóóéįį!Ö=hŠ īßæ_·üåˤLFŽE¾ń†ą ?ż“@( ČśzaµZ¶Œ9’¼v­«f‰Ä2~V8d ,_ÜøŃ‘wå °f ŠŽ.8aaĄĒ³g;v| ÄŗČd2899U×W˜2e jjjPRR"Ź’““įéé OOO$''‹ņššܾ}S¦L899ĮŃŃ.\Šyސ rrrtDÄĶĢĢčCJJ ˆN»ö³Śųųų_Ż_cÉdX°`AĒ%€’Xµ J…¹‹‰6l~ųA˜Ó;w𰁀JlŽ \¾,lŅʍ3ŖÆg‡ŠC‡Ē޶¶ĄóĻׯ))Ą’%@K‹5K(«!bD°u«ŠŠĒ€   @ff¦(KJJ‚L&ƒ··7®^½Š£Ė×®]Š1٦¦¦X³f  fΜ‰ŅŅRƒ:žzź)H$Ājˆ• ¹\Ž#Fą‰'ž¤¦¦0L,ķŻé¦M›•Jõˆ½×‡©©©ŲVÜŗ,[&źćŠPįļæžX¹ųī;į4„¶Ėł¹sĄGÓ§œ¢7·\]ƒ/X §¦hnņņVk`o/lMW­ŚŚQ^9~čKh&ī‡‡Ä®ØØ@QQ‚ƒƒ‚ęęf‘tŁŁŁ s6ųī»ļbƌ())Į¤I“ÄŠ‚6ģķķįėė @øTYY‰¤¤$€››<<<čÆXīīīāéĆŗuėĕ$¢££1mŚ4Üŗu«ļ¢ģwīĒoGÓ¦uČ­¬€Å‹…ł»pxłeaõ:qųŪ߄¼¢w×fƌĪ‘¬¬&ļÜ Œ%(‹Ž4ppL”ŸŸįĪõ3`aa!’G3į”””˜:u*ˆę0++Kg²ĄĀĀ xłå—Q]]ēž{’ūßõōt6‡ß’=ą‰'žĄ“O> (//GII‰H,ķgœqęĢńh ŅÓÓØc®ūāų;9ēĻ“&éųé'`Å a±˜:ųö[ąĢa;Å錔ĒÄR«ÕĀŻ„‰#G„eqżzhƆ A¶ćĒuW®Aƒ‚į·% Ćßß?žų£x^éęꆑ#GĀĻĻāÄ]»v O=õ”Į:>Œ½{÷B*•bóęĶxļ½÷tŹh“äʍHKK̘1Ó§OóRSSQXX ĆLkŠ~ų¢¬ŗŗsēĪEqqń£ ÄC茿··“QX¼ų"p÷®ąĀ|õ•š{ūvT’Ž­AFK—••įŲ±cŲøq#Žxć ümēNäXZ Ģ65ģóĮƒ€`ś¾żVtŲ»ķÜo€)S¦@.—#??III  ܌ Ajj*är9 tŅkÖ¬Abb"lll°}ūvŃgtIróęMŌŌŌ¢ź“&M‚­­-ĮÜj|:Cŗ¼¼¼––†­[·Āä”ÓŲŲˆØØØG:®HgéęMg5ķ ©ƒƒƒĮ2½ 7ųūūóīŻ»śėėÉU«„ é_žB¶“ˆY999\“h‘xĘ(•J)“ÉøbÅ ęååбcmß¾–––z‘`šššŅŹŹŠ~ų”ŃAŅ@.—3..ŽŪ¶mć¶mŪ˚šƒeūŠX„„„Ą?żéOĄŸžYĢKOOó¤R©xĖ”;ØÕjŚŁŁńÉ'ŸŌ‘k5dČąŹ•+ż]»véäM™2„Ēz4cnˆ<ʈUZZŹššpśūūÓßߟ¬ŖŖ2Ŗ[ƒ¬¬,Ž9’ęęębPW;9;;3!!”ócŻ«¾¾^ Ü >œ«WÆęŠ+čää¤S¹­­-wļŽĶ––ŖÕź^§®ŠWÄ"…#œńćĒėKŪŚŚhmmM???t[‡*•ŠÖÖ֜0a‚ŽüŻwßÕ—ųųx1/##C'ļĶNQ놆½~޽{W“ævÅR©TT(”Ėå”ĖåljjźńUļ””½Ø½©©)e2}||D¢…„„t¾^Ōżķ†ŹŹJŌ××ĆÖÖ{öģA`` rss†7Šq…BØØ(¤§§ĆŽŽŽPU]B*•ā•W^ĮĉEŸ¢?„Ó§Ocīܹ:zĢĶĶ1yņd|’ż÷ˆŒŒŌ{®©©Iļ¦ėéÓ§ŃÜܬēčwö™“ö€€ŲŁŁ”±±Ql6vļŽO?żįįįšõõESS>’üs1–õĢ3Ļō¾ÓźźźpćĘ ńc‘ž¢²²ŃŃŃ(((e666ˆŒŒÄüłóįččˆC‡į’ųŠ‹‹QVVÖż„HvZ±ĘŒCwww^æ~trrāŖU«˜””¤c»%yzz2==]ļé͊ĮU«Vé%ĶJ¶{÷nąīŻ»õꈊŠ"~öŁg:ņĀĀB<˜+W®äž={xšąAFFFŅŅŅ’666ĢĖĖÓ)_UU%žAśśśźé ū\ZZ*ŹÕjµx(m(YYY‰—;£»«ŗŗš/¾ų¢Žoük“……£££¹oß>N˜06l`vv6]\\čīīŽłŹøC{{{FGGóģŁ³|ę™gŹŗŗ:¦„„ŃÕÕµĻČÕłb]{{;Ļž=Ū#bu•RRRH g”€īķ  @o‘žžĪ±cĒźÕéēē'ÖŪŽŽŽĄČČH½<ĶFĮÕÕUGŽŠŠĄÅ‹‹_3i§ńćĒ355µĖžwE¬¦¦&.Y²Ä _ōkҶmŪxļŽ=†„„0<<œńńńLLL¤££##"":›WćÄjllä¦M›(“ÉčėėK~žłē¢”˜˜Ųgä5j³²²ÄFŖÕj644ōÉē_mmm¼té’Į7»„„…—.]źROii)SRRxåŹkĢ@EE‹‹‹Y__Ɨ§P(X\\,~jÖr¹œ * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * These test plugins are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #define LWS_DLL #define LWS_INTERNAL #include #include struct per_session_data__client_loopback_test { struct lws *wsi; }; /* * This is a bit fiddly... * * 0) If you want the wss:// test to work, make sure the vhost is marked with * enable-client-ssl if using lwsws, or call lws_init_vhost_client_ssl() on * the vhost if you're doing it by hand. * * 1) enable the protocol on a vhost * * "ws-protocols": [{ * "client-loopback-test": { * "status": "ok" * }, ... * * the vhost should listen on 80 (ws://) or 443 (wss://) * * 2) mount the http part of the test one level down on the same vhost, eg * { * "mountpoint": "/c", * "origin": "callback://client-loopback-test" * } * * 3) Use a browser to visit the mountpoint with a URI attached for looping * back, eg, if testing on localhost * * http://localhost/c/ws://localhost * https://localhost/c/wss://localhost * * 4) The HTTP part of this test protocol will try to do the requested * ws client connection, to the same test protocol on the same * server. */ static int callback_client_loopback_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct lws_client_connect_info i; struct per_session_data__client_loopback_test *pss = (struct per_session_data__client_loopback_test *)user; const char *p = (const char *)in; char buf[100]; int n; switch (reason) { /* HTTP part */ case LWS_CALLBACK_HTTP: if (len < 10) return -1; p++; while (*p && *p != '/') p++; if (!*p) { lws_return_http_status(wsi, 400, "Arg needs to be in format ws://xxx or wss://xxx"); return -1; } p++; memset(&i, 0, sizeof(i)); i.context = lws_get_context(wsi); // stacked /// get resolved to / if (strncmp(p, "ws:/", 4) == 0) { i.ssl_connection = 0; i.port = 80; p += 4; } else if (strncmp(p, "wss:/", 5) == 0) { i.port = 443; i.ssl_connection = 1; p += 5; } else { sprintf(buf, "Arg %s is not in format ws://xxx or wss://xxx\n", p); lws_return_http_status(wsi, 400, buf); return -1; } i.address = p; i.path = ""; i.host = p; i.origin = p; i.ietf_version_or_minus_one = -1; i.protocol = "client-loopback-test"; pss->wsi = lws_client_connect_via_info(&i); if (!pss->wsi) lws_return_http_status(wsi, 401, "client-loopback-test: connect failed\n"); else { lwsl_notice("client connection to %s:%d with ssl: %d started\n", i.address, i.port, i.ssl_connection); lws_return_http_status(wsi, 200, "OK"); } /* either way, close the triggering http link */ return -1; case LWS_CALLBACK_CLOSED_HTTP: lwsl_notice("Http part closed\n"); break; /* server part */ case LWS_CALLBACK_ESTABLISHED: lwsl_notice("server part: LWS_CALLBACK_ESTABLISHED\n"); strcpy(buf + LWS_PRE, "Made it"); n = lws_write(wsi, (unsigned char *)buf + LWS_PRE, 7, LWS_WRITE_TEXT); if (n < 7) return -1; break; /* client part */ case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_notice("Client connection established\n"); break; case LWS_CALLBACK_CLIENT_RECEIVE: lws_strncpy(buf, in, sizeof(buf)); lwsl_notice("Client connection received %ld from server '%s'\n", (long)len, buf); /* OK we are done with the client connection */ return -1; default: break; } return 0; } static const struct lws_protocols protocols[] = { { "client-loopback-test", callback_client_loopback_test, sizeof(struct per_session_data__client_loopback_test), 1024, /* rx buf size must be >= permessage-deflate rx size */ }, }; LWS_EXTERN LWS_VISIBLE int init_protocol_client_loopback_test(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_client_loopback_test(struct lws_context *context) { return 0; } libwebsockets-3.2.1/plugins/protocol_dumb_increment.c000066400000000000000000000072611357643561300231410ustar00rootroot00000000000000/* * ws protocol handler plugin for "dumb increment" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * These test plugins are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include #define DUMB_PERIOD_US 50000 struct pss__dumb_increment { int number; }; struct vhd__dumb_increment { const unsigned int *options; }; static int callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss__dumb_increment *pss = (struct pss__dumb_increment *)user; struct vhd__dumb_increment *vhd = (struct vhd__dumb_increment *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); uint8_t buf[LWS_PRE + 20], *p = &buf[LWS_PRE]; const struct lws_protocol_vhost_options *opt; int n, m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd__dumb_increment)); if (!vhd) return -1; if ((opt = lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "options"))) vhd->options = (unsigned int *)opt->value; break; case LWS_CALLBACK_ESTABLISHED: pss->number = 0; if (!vhd->options || !((*vhd->options) & 1)) lws_set_timer_usecs(wsi, DUMB_PERIOD_US); break; case LWS_CALLBACK_SERVER_WRITEABLE: n = lws_snprintf((char *)p, sizeof(buf) - LWS_PRE, "%d", pss->number++); m = lws_write(wsi, p, n, LWS_WRITE_TEXT); if (m < n) { lwsl_err("ERROR %d writing to di socket\n", n); return -1; } break; case LWS_CALLBACK_RECEIVE: if (len < 6) break; if (strncmp((const char *)in, "reset\n", 6) == 0) pss->number = 0; if (strncmp((const char *)in, "closeme\n", 8) == 0) { lwsl_notice("dumb_inc: closing as requested\n"); lws_close_reason(wsi, LWS_CLOSE_STATUS_GOINGAWAY, (unsigned char *)"seeya", 5); return -1; } break; case LWS_CALLBACK_TIMER: if (!vhd->options || !((*vhd->options) & 1)) { lws_callback_on_writable_all_protocol_vhost( lws_get_vhost(wsi), lws_get_protocol(wsi)); lws_set_timer_usecs(wsi, DUMB_PERIOD_US); } break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_DUMB_INCREMENT \ { \ "dumb-increment-protocol", \ callback_dumb_increment, \ sizeof(struct pss__dumb_increment), \ 10, /* rx buf size must be >= permessage-deflate rx size */ \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_DUMB_INCREMENT }; LWS_EXTERN LWS_VISIBLE int init_protocol_dumb_increment(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_dumb_increment(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/plugins/protocol_esp32_lws_group.c000066400000000000000000000127501357643561300232020ustar00rootroot00000000000000/* * ESP32 Group protocol handler * * Copyright (C) 2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA* * */ #include #include #include typedef enum { GROUP_STATE_NONE, GROUP_STATE_INITIAL, GROUP_STATE_MEMBERS, GROUP_STATE_FINAL } group_state; struct per_session_data__lws_group { struct per_session_data__lws_group *next; group_state group_state; struct lws_group_member *member; unsigned char subsequent:1; unsigned char changed_partway:1; }; struct per_vhost_data__lws_group { struct per_session_data__lws_group *live_pss_list; struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; int count_live_pss; }; static void render_ip4(char *dest, int len, uint8_t *ip) { snprintf(dest, len, "%u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]); } static int callback_lws_group(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__lws_group *pss = (struct per_session_data__lws_group *)user; struct per_vhost_data__lws_group *vhd = (struct per_vhost_data__lws_group *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); char buffer[1024 + LWS_PRE], ipv4[20]; char *start = buffer + LWS_PRE - 1, *p = start, *end = buffer + sizeof(buffer) - 1; struct lws_group_member *mbr; int n, m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__lws_group)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (!vhd) break; break; case LWS_CALLBACK_ESTABLISHED: lwsl_notice("%s: ESTABLISHED\n", __func__); vhd->count_live_pss++; pss->next = vhd->live_pss_list; vhd->live_pss_list = pss; pss->group_state = GROUP_STATE_INITIAL; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_SERVER_WRITEABLE: switch (pss->group_state) { case GROUP_STATE_NONE: /* fallthru */ case GROUP_STATE_INITIAL: p += snprintf((char *)p, end - p, "{\n" " \"group\":\"%s\"," " \"members\":[\n", lws_esp32.group); n = LWS_WRITE_TEXT | LWS_WRITE_NO_FIN; pss->group_state = GROUP_STATE_MEMBERS; pss->subsequent = 0; pss->changed_partway = 0; pss->member = lws_esp32.first; break; case GROUP_STATE_MEMBERS: /* confirm pss->member is still in the list... */ mbr = lws_esp32.first; while (mbr && mbr != pss->member) mbr = mbr->next; if (!mbr) { /* no longer exists... */ if (lws_esp32.first || pss->member) pss->changed_partway = 1; *p++ = ' '; pss->member = NULL; /* * finish the list where we got to, then * immediately reissue it */ } while (end - p > 100 && pss->member) { if (pss->subsequent) *p++ = ','; pss->subsequent = 1; render_ip4(ipv4, sizeof(ipv4), (uint8_t *)&pss->member->addr); p += snprintf((char *)p, end - p, " {\n" " \"mac\":\"%s\",\n" " \"model\":\"%s\",\n" " \"role\":\"%s\",\n" " \"width\":\"%d\",\n" " \"height\":\"%d\",\n" " \"ipv4\":\"%s\"\n" " }\n", pss->member->mac, pss->member->model, pss->member->role, pss->member->width, pss->member->height, ipv4 ); pss->member = pss->member->next; } lwsl_notice("%s\n", p); n = LWS_WRITE_CONTINUATION | LWS_WRITE_NO_FIN; if (!pss->member) pss->group_state = GROUP_STATE_FINAL; break; case GROUP_STATE_FINAL: n = LWS_WRITE_CONTINUATION; p += sprintf((char *)p, "],\n \"discard\":\"%d\"}\n", pss->changed_partway); if (pss->changed_partway) pss->group_state = GROUP_STATE_INITIAL; else pss->group_state = GROUP_STATE_NONE; break; default: return 0; } // lwsl_notice("issue: %d (%d)\n", p - start, n); m = lws_write(wsi, (unsigned char *)start, p - start, n); if (m < 0) { lwsl_err("ERROR %d writing to di socket\n", m); return -1; } if (pss->group_state != GROUP_STATE_NONE) lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RECEIVE: { break; } case LWS_CALLBACK_CLOSED: { struct per_session_data__lws_group **p = &vhd->live_pss_list; while (*p) { if ((*p) == pss) { *p = pss->next; continue; } p = &((*p)->next); } vhd->count_live_pss--; } break; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: /* called when our wsi user_space is going to be destroyed */ break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_LWS_GROUP \ { \ "lws-group", \ callback_lws_group, \ sizeof(struct per_session_data__lws_group), \ 1024, 0, NULL, 900 \ } libwebsockets-3.2.1/plugins/protocol_esp32_lws_ota.c000066400000000000000000000160661357643561300226350ustar00rootroot00000000000000/* * ESP32 OTA update protocol handler * * Copyright (C) 2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * */ #include #include #include #include struct per_session_data__esplws_ota { struct lws_spa *spa; char filename[32]; char result[LWS_PRE + 512]; int result_len; int filename_length; esp_ota_handle_t otahandle; const esp_partition_t *part; long file_length; long last_rep; nvs_handle nvh; TimerHandle_t reboot_timer; }; struct per_vhost_data__esplws_ota { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; }; static const char * const ota_param_names[] = { "upload", }; enum enum_ota_param_names { EPN_UPLOAD, }; static void ota_reboot_timer_cb(TimerHandle_t t) { esp_restart(); } const esp_partition_t * ota_choose_part(void) { const esp_partition_t *bootpart, *part = NULL; esp_partition_iterator_t i; bootpart = lws_esp_ota_get_boot_partition(); i = esp_partition_find(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_ANY, NULL); while (i) { part = esp_partition_get(i); /* cannot update ourselves */ if (part == bootpart) goto next; /* OTA Partition numbering is from _OTA_MIN to less than _OTA_MAX */ if (part->subtype < ESP_PARTITION_SUBTYPE_APP_OTA_MIN || part->subtype >= ESP_PARTITION_SUBTYPE_APP_OTA_MAX) goto next; break; next: i = esp_partition_next(i); } if (!i) { lwsl_err("Can't find good OTA part\n"); return NULL; } lwsl_notice("Directing OTA to part type %d/%d start 0x%x\n", part->type, part->subtype, (uint32_t)part->address); return part; } static int ota_file_upload_cb(void *data, const char *name, const char *filename, char *buf, int len, enum lws_spa_fileupload_states state) { struct per_session_data__esplws_ota *pss = (struct per_session_data__esplws_ota *)data; switch (state) { case LWS_UFS_OPEN: lwsl_notice("LWS_UFS_OPEN Filename %s\n", filename); lws_strncpy(pss->filename, filename, sizeof(pss->filename)); if (strcmp(name, "ota")) return 1; pss->part = ota_choose_part(); if (!pss->part) return 1; if (esp_ota_begin(pss->part, OTA_SIZE_UNKNOWN, &pss->otahandle) != ESP_OK) { lwsl_err("OTA: Failed to begin\n"); return 1; } pss->file_length = 0; pss->last_rep = -1; break; case LWS_UFS_FINAL_CONTENT: case LWS_UFS_CONTENT: if (pss->file_length + len > pss->part->size) { lwsl_err("OTA: incoming file too large\n"); return 1; } if ((pss->file_length & ~0xffff) != (pss->last_rep & ~0xffff)) { lwsl_notice("writing 0x%lx...\n", pss->part->address + pss->file_length); pss->last_rep = pss->file_length; } if (esp_ota_write(pss->otahandle, buf, len) != ESP_OK) { lwsl_err("OTA: Failed to write\n"); return 1; } pss->file_length += len; if (state == LWS_UFS_CONTENT) break; lwsl_notice("LWS_UFS_FINAL_CONTENT\n"); if (esp_ota_end(pss->otahandle) != ESP_OK) { lwsl_err("OTA: end failed\n"); return 1; } if (esp_ota_set_boot_partition(pss->part) != ESP_OK) { lwsl_err("OTA: set boot part failed\n"); return 1; } pss->reboot_timer = xTimerCreate("x", pdMS_TO_TICKS(250), 0, NULL, ota_reboot_timer_cb); xTimerStart(pss->reboot_timer, 0); break; } return 0; } static int callback_esplws_ota(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__esplws_ota *pss = (struct per_session_data__esplws_ota *)user; struct per_vhost_data__esplws_ota *vhd = (struct per_vhost_data__esplws_ota *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); unsigned char buf[LWS_PRE + 384], *start = buf + LWS_PRE - 1, *p = start, *end = buf + sizeof(buf) - 1; int n; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__esplws_ota)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (!vhd) break; break; /* OTA POST handling */ case LWS_CALLBACK_HTTP_BODY: /* create the POST argument parser if not already existing */ // lwsl_notice("LWS_CALLBACK_HTTP_BODY (ota) %d %d %p\n", (int)pss->file_length, (int)len, pss->spa); lws_set_timeout(wsi, PENDING_TIMEOUT_HTTP_CONTENT, 30); if (!pss->spa) { pss->spa = lws_spa_create(wsi, ota_param_names, LWS_ARRAY_SIZE(ota_param_names), 4096, ota_file_upload_cb, pss); if (!pss->spa) return -1; pss->filename[0] = '\0'; pss->file_length = 0; } lws_esp32.upload = 1; /* let it parse the POST data */ if (lws_spa_process(pss->spa, in, len)) return -1; break; case LWS_CALLBACK_HTTP_BODY_COMPLETION: lwsl_notice("LWS_CALLBACK_HTTP_BODY_COMPLETION (ota)\n"); /* call to inform no more payload data coming */ lws_spa_finalize(pss->spa); pss->result_len = snprintf(pss->result + LWS_PRE, sizeof(pss->result) - LWS_PRE - 1, "Rebooting after OTA update"); if (lws_add_http_header_status(wsi, HTTP_STATUS_OK, &p, end)) goto bail; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"text/html", 9, &p, end)) goto bail; if (lws_add_http_header_content_length(wsi, pss->result_len, &p, end)) goto bail; if (lws_finalize_http_header(wsi, &p, end)) goto bail; n = lws_write(wsi, start, p - start, LWS_WRITE_HTTP_HEADERS | LWS_WRITE_H2_STREAM_END); if (n < 0) goto bail; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_HTTP_WRITEABLE: if (!pss->result_len) break; lwsl_debug("LWS_CALLBACK_HTTP_WRITEABLE: sending %d\n", pss->result_len); n = lws_write(wsi, (unsigned char *)pss->result + LWS_PRE, pss->result_len, LWS_WRITE_HTTP); if (n < 0) return 1; if (lws_http_transaction_completed(wsi)) return 1; /* stop further service so we don't serve the probe GET to see if we rebooted */ while (1); break; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: /* called when our wsi user_space is going to be destroyed */ if (pss->spa) { lws_spa_destroy(pss->spa); pss->spa = NULL; } lws_esp32.upload = 0; break; default: break; } return 0; bail: return 1; } #define LWS_PLUGIN_PROTOCOL_ESPLWS_OTA \ { \ "esplws-ota", \ callback_esplws_ota, \ sizeof(struct per_session_data__esplws_ota), \ 4096, 0, NULL, 900 \ } libwebsockets-3.2.1/plugins/protocol_esp32_lws_reboot_to_factory.c000066400000000000000000000031521357643561300255650ustar00rootroot00000000000000/* * Example ESP32 app code using Libwebsockets * * Copyright (C) 2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * * This is intended to be mounted somewhere in your ESP32 user app... if the * client touched the mount, the plugin hangs up and reboots into the * factory mode one second later. * * The factory mode will reassociate with the same IP with the same MAC * shortly afterwards and be accessible by the same IP / mDNS name. */ #include #include #include #include static int callback_esplws_rtf(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { case LWS_CALLBACK_HTTP: lws_esp32_restart_guided(LWS_MAGIC_REBOOT_TYPE_REQ_FACTORY); return 1; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_ESPLWS_RTF \ { \ "esplws-rtf", \ callback_esplws_rtf, \ 0, \ 10, 0, NULL, 0 \ } libwebsockets-3.2.1/plugins/protocol_esp32_lws_scan.c000066400000000000000000000754331357643561300230010ustar00rootroot00000000000000/* * ESP32 Scan / Factory protocol handler * * Copyright (C) 2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA* * */ #include #include #include typedef enum { SCAN_STATE_NONE, SCAN_STATE_INITIAL, SCAN_STATE_INITIAL_MANIFEST, SCAN_STATE_KNOWN, SCAN_STATE_LIST, SCAN_STATE_FINAL } scan_state; struct store_json { const char *j; const char *nvs; }; struct per_session_data__esplws_scan { struct per_session_data__esplws_scan *next; scan_state scan_state; struct timeval last_send; struct lws_spa *spa; char filename[32]; char result[LWS_PRE + 512]; unsigned char buffer[4096]; int result_len; int filename_length; long file_length; nvs_handle nvh; char ap_record; unsigned char subsequent:1; unsigned char changed_partway:1; }; #define max_aps 12 struct per_vhost_data__esplws_scan { wifi_ap_record_t ap_records[10]; TimerHandle_t timer, reboot_timer; struct per_session_data__esplws_scan *live_pss_list; struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct lws_wifi_scan *known_aps_list; const esp_partition_t *part; esp_ota_handle_t otahandle; long file_length; long content_length; int cert_remaining_days; struct lws *cwsi; char json[2048]; int json_len; int acme_state; char acme_msg[256]; uint16_t count_ap_records; char count_live_pss; unsigned char scan_ongoing:1; unsigned char completed_any_scan:1; unsigned char reboot:1; unsigned char changed_settings:1; unsigned char checked_updates:1; unsigned char autonomous_update:1; unsigned char autonomous_update_sampled:1; }; static const struct store_json store_json[] = { { "\"ssid0\":\"", "0ssid" }, { ",\"pw0\":\"", "0password" }, { "\"ssid1\":\"", "1ssid" }, { ",\"pw1\":\"", "1password" }, { "\"ssid2\":\"", "2ssid" }, { ",\"pw2\":\"", "2password" }, { "\"ssid3\":\"", "3ssid" }, { ",\"pw3\":\"", "3password" }, { ",\"access_pw\":\"", "access_pw" }, { "{\"group\":\"", "group" }, { "{\"role\":\"", "role" }, { ",\"region\":\"", "region" }, }; static wifi_scan_config_t scan_config = { .ssid = 0, .bssid = 0, .channel = 0, .show_hidden = true }; const esp_partition_t * ota_choose_part(void); static const char * const param_names[] = { "text", "pub", "pri", "serial", "opts", "group", "role", "updsettings", }; enum enum_param_names { EPN_TEXT, EPN_PUB, EPN_PRI, EPN_SERIAL, EPN_OPTS, EPN_GROUP, EPN_ROLE, EPN_UPDSETTINGS, }; static void scan_finished(uint16_t count, wifi_ap_record_t *recs, void *v); static int esplws_simple_arg(char *dest, int len, const char *in, const char *match) { const char *p = strstr(in, match); int n = 0; if (!p) return 1; p += strlen(match); while (*p && *p != '\"' && n < len - 1) dest[n++] = *p++; dest[n] = '\0'; return 0; } static void scan_start(struct per_vhost_data__esplws_scan *vhd) { int n; if (vhd->reboot) esp_restart(); if (vhd->scan_ongoing) return; if (lws_esp32.acme) return; if (lws_esp32.upload) return; vhd->scan_ongoing = 1; lws_esp32.scan_consumer = scan_finished; lws_esp32.scan_consumer_arg = vhd; n = esp_wifi_scan_start(&scan_config, false); if (n != ESP_OK) lwsl_err("scan start failed %d\n", n); } static int scan_defer; static void timer_cb(TimerHandle_t t) { struct per_vhost_data__esplws_scan *vhd = pvTimerGetTimerID(t); // if (!lws_esp32.inet && ((scan_defer++) & 1)) /* * AP mode + scan does not work well on ESP32... if we didn't connect to an AP * ourselves, just scan once at boot. Then leave us on the AP channel. * * Do the callback for everyone to keep the heartbeat alive. */ if (!lws_esp32.inet && scan_defer++) { lws_callback_on_writable_all_protocol(vhd->context, vhd->protocol); return; } scan_start(vhd); } static void reboot_timer_cb(TimerHandle_t t) { esp_restart(); } static int client_connection(struct per_vhost_data__esplws_scan *vhd, const char *file) { #if defined(CONFIG_LWS_IS_FACTORY_APPLICATION) && defined(CONFIG_LWS_OTA_SERVER_BASE_URL) && \ defined(CONFIG_LWS_OTA_SERVER_FQDN) static struct lws_client_connect_info i; char path[256]; memset(&i, 0, sizeof i); snprintf(path, sizeof(path) - 1, CONFIG_LWS_OTA_SERVER_BASE_URL "/" CONFIG_LWS_MODEL_NAME "/%s", file); lwsl_notice("Fetching %s\n", path); i.port = 443; i.context = vhd->context; i.address = CONFIG_LWS_OTA_SERVER_FQDN; i.ssl_connection = 1; i.host = i.address; i.origin = i.host; i.vhost = vhd->vhost; i.method = "GET"; i.path = path; i.protocol = "esplws-scan"; i.pwsi = &vhd->cwsi; vhd->cwsi = lws_client_connect_via_info(&i); if (!vhd->cwsi) { lwsl_notice("NULL return\n"); return 1; /* fail */ } #endif return 0; /* ongoing */ } static int lws_wifi_scan_rssi(struct lws_wifi_scan *p) { if (!p->count) return -127; return p->rssi / p->count; } /* * Insert new lws_wifi_scan into linkedlist in rssi-sorted order, trimming the * list if needed to keep it at or below max_aps entries. */ static int lws_wifi_scan_insert_trim(struct lws_wifi_scan **list, struct lws_wifi_scan *ns) { int count = 0, ins = 1, worst; struct lws_wifi_scan *newlist, **pworst, *pp1; lws_start_foreach_llp(struct lws_wifi_scan **, pp, *list) { /* try to find existing match */ if (!strcmp((*pp)->ssid, ns->ssid) && !memcmp((*pp)->bssid, ns->bssid, 6)) { if ((*pp)->count > 127) { (*pp)->count /= 2; (*pp)->rssi /= 2; } (*pp)->rssi += ns->rssi; (*pp)->count++; ins = 0; break; } } lws_end_foreach_llp(pp, next); if (ins) { lws_start_foreach_llp(struct lws_wifi_scan **, pp, *list) { /* trim any excess guys */ if (count++ >= max_aps - 1) { pp1 = *pp; *pp = (*pp)->next; free(pp1); continue; /* stay where we are */ } } lws_end_foreach_llp(pp, next); /* we are inserting... so alloc a copy of him */ pp1 = malloc(sizeof(*pp1)); if (!pp1) return -1; memcpy(pp1, ns, sizeof(*pp1)); pp1->next = *list; *list = pp1; } /* sort the list ... worst first, but added at the newlist head */ newlist = NULL; /* while anybody left on the old list */ while (*list) { worst = 0; pworst = NULL; /* who is the worst guy still left on the old list? */ lws_start_foreach_llp(struct lws_wifi_scan **, pp, *list) { if (lws_wifi_scan_rssi(*pp) <= worst) { worst = lws_wifi_scan_rssi(*pp); pworst = pp; } } lws_end_foreach_llp(pp, next); if (pworst) { /* move the worst to the head of the new list */ pp1 = *pworst; *pworst = (*pworst)->next; pp1->next = newlist; newlist = pp1; } } *list = newlist; return 0; } static void scan_finished(uint16_t count, wifi_ap_record_t *recs, void *v) { struct per_vhost_data__esplws_scan *vhd = v; struct per_session_data__esplws_scan *p = vhd->live_pss_list; struct lws_wifi_scan lws; wifi_ap_record_t *r; int m; lwsl_notice("%s: count %d\n", __func__, count); vhd->scan_ongoing = 0; if (count < LWS_ARRAY_SIZE(vhd->ap_records)) vhd->count_ap_records = count; else vhd->count_ap_records = LWS_ARRAY_SIZE(vhd->ap_records); memcpy(vhd->ap_records, recs, vhd->count_ap_records * sizeof(*recs)); while (p) { if (p->scan_state != SCAN_STATE_INITIAL && p->scan_state != SCAN_STATE_NONE) p->changed_partway = 1; else p->scan_state = SCAN_STATE_INITIAL; p = p->next; } /* convert to generic, cumulative scan results */ for (m = 0; m < vhd->count_ap_records; m++) { r = &vhd->ap_records[m]; lws.authmode = r->authmode; lws.channel = r->primary; lws.rssi = r->rssi; lws.count = 1; memcpy(&lws.bssid, r->bssid, 6); lws_strncpy(lws.ssid, (const char *)r->ssid, sizeof(lws.ssid)); lws_wifi_scan_insert_trim(&vhd->known_aps_list, &lws); } lws_callback_on_writable_all_protocol(vhd->context, vhd->protocol); if (lws_esp32.inet && !vhd->cwsi && !vhd->checked_updates) client_connection(vhd, "manifest.json"); if (vhd->changed_settings) { lws_esp32_wlan_nvs_get(1); vhd->changed_settings = 0; } else esp_wifi_connect(); } static const char *ssl_names[] = { "ap-cert.pem", "ap-key.pem" }; static int file_upload_cb(void *data, const char *name, const char *filename, char *buf, int len, enum lws_spa_fileupload_states state) { struct per_session_data__esplws_scan *pss = (struct per_session_data__esplws_scan *)data; int n; switch (state) { case LWS_UFS_OPEN: if (lws_esp32_get_reboot_type() != LWS_MAGIC_REBOOT_TYPE_FORCED_FACTORY_BUTTON) return -1; lwsl_notice("LWS_UFS_OPEN Filename %s\n", filename); lws_strncpy(pss->filename, filename, sizeof(pss->filename)); if (!strcmp(name, "pub") || !strcmp(name, "pri")) { if (nvs_open("lws-station", NVS_READWRITE, &pss->nvh)) return 1; } else return 1; pss->file_length = 0; break; case LWS_UFS_FINAL_CONTENT: case LWS_UFS_CONTENT: if (len) { /* if the file length is too big, drop it */ if (pss->file_length + len > sizeof(pss->buffer)) return 1; memcpy(pss->buffer + pss->file_length, buf, len); } pss->file_length += len; if (state == LWS_UFS_CONTENT) break; lwsl_notice("LWS_UFS_FINAL_CONTENT\n"); n = 0; if (!strcmp(name, "pri")) n = 1; lwsl_notice("writing %s\n", ssl_names[n]); n = nvs_set_blob(pss->nvh, ssl_names[n], pss->buffer, pss->file_length); if (n == ESP_OK) nvs_commit(pss->nvh); nvs_close(pss->nvh); if (n != ESP_OK) return 1; break; } return 0; } static int callback_esplws_scan(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__esplws_scan *pss = (struct per_session_data__esplws_scan *)user; struct per_vhost_data__esplws_scan *vhd = (struct per_vhost_data__esplws_scan *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); unsigned char *start = pss->buffer + LWS_PRE - 1, *p = start, *end = pss->buffer + sizeof(pss->buffer) - 1; union lws_tls_cert_info_results ir; struct lws_wifi_scan *lwscan; char subject[64]; int n, m; nvs_handle nvh; size_t s; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__esplws_scan)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); vhd->timer = xTimerCreate("x", pdMS_TO_TICKS(10000), 1, vhd, (TimerCallbackFunction_t)timer_cb); vhd->scan_ongoing = 0; strcpy(vhd->json, " { }"); // scan_start(vhd); break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (!vhd) break; xTimerStop(vhd->timer, 0); xTimerDelete(vhd->timer, 0); break; case LWS_CALLBACK_ESTABLISHED: lwsl_notice("%s: ESTABLISHED\n", __func__); if (!vhd->live_pss_list) { // scan_start(vhd); xTimerStart(vhd->timer, 0); } vhd->count_live_pss++; pss->next = vhd->live_pss_list; vhd->live_pss_list = pss; /* if we have scan results, update them. Otherwise wait */ // if (vhd->count_ap_records) { pss->scan_state = SCAN_STATE_INITIAL; lws_callback_on_writable(wsi); // } break; case LWS_CALLBACK_SERVER_WRITEABLE: if (vhd->autonomous_update_sampled) { p += snprintf((char *)p, end - p, " {\n \"auton\":\"1\",\n \"pos\": \"%ld\",\n" " \"len\":\"%ld\"\n}\n", vhd->file_length, vhd->content_length); n = LWS_WRITE_TEXT; goto issue; } switch (pss->scan_state) { struct timeval t; uint8_t mac[6]; struct lws_esp32_image i; char img_factory[384], img_ota[384], group[16], role[16]; int grt; case SCAN_STATE_NONE: /* fallthru */ case SCAN_STATE_INITIAL: gettimeofday(&t, NULL); // if (t.tv_sec - pss->last_send.tv_sec < 10) // return 0; pss->last_send = t; if (nvs_open("lws-station", NVS_READWRITE, &nvh)) { lwsl_err("unable to open nvs\n"); return -1; } n = 0; if (nvs_get_blob(nvh, "ap-cert.pem", NULL, &s) == ESP_OK) n = 1; if (nvs_get_blob(nvh, "ap-key.pem", NULL, &s) == ESP_OK) n |= 2; s = sizeof(group) - 1; group[0] = '\0'; role[0] = '\0'; nvs_get_str(nvh, "group", group, &s); nvs_get_str(nvh, "role", role, &s); nvs_close(nvh); ir.ns.name[0] = '\0'; subject[0] = '\0'; if (t.tv_sec > 1464083026 && !lws_tls_vhost_cert_info(vhd->vhost, LWS_TLS_CERT_INFO_VALIDITY_TO, &ir, 0)) { vhd->cert_remaining_days = (ir.time - t.tv_sec) / (24 * 3600); ir.ns.name[0] = '\0'; lws_tls_vhost_cert_info(vhd->vhost, LWS_TLS_CERT_INFO_COMMON_NAME, &ir, sizeof(ir.ns.name)); lws_strncpy(subject, ir.ns.name, sizeof(subject)); ir.ns.name[0] = '\0'; lws_tls_vhost_cert_info(vhd->vhost, LWS_TLS_CERT_INFO_ISSUER_NAME, &ir, sizeof(ir.ns.name)); } /* * this value in the JSON is just * used for UI indication. Each conditional feature confirms * it itself before it allows itself to be used. */ grt = lws_esp32_get_reboot_type(); esp_efuse_mac_get_default(mac); strcpy(img_factory, " { \"date\": \"Empty\" }"); strcpy(img_ota, " { \"date\": \"Empty\" }"); // if (grt != LWS_MAGIC_REBOOT_TYPE_FORCED_FACTORY_BUTTON) { lws_esp32_get_image_info(esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, NULL), &i, img_factory, sizeof(img_factory) - 1); img_factory[sizeof(img_factory) - 1] = '\0'; if (img_factory[0] == 0xff || strlen(img_factory) < 8) strcpy(img_factory, " { \"date\": \"Empty\" }"); lws_esp32_get_image_info(esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_OTA_0, NULL), &i, img_ota, sizeof(img_ota) - 1); img_ota[sizeof(img_ota) - 1] = '\0'; if (img_ota[0] == 0xff || strlen(img_ota) < 8) strcpy(img_ota, " { \"date\": \"Empty\" }"); // } p += snprintf((char *)p, end - p, "{ \"model\":\"%s\",\n" " \"forced_button\":\"%d\",\n" " \"serial\":\"%s\",\n" " \"opts\":\"%s\",\n" " \"host\":\"%s-%s\",\n" " \"region\":\"%d\",\n" " \"ssl_pub\":\"%d\",\n" " \"ssl_pri\":\"%d\",\n" " \"mac\":\"%02X%02X%02X%02X%02X%02X\",\n" " \"ssid\":\"%s\",\n" " \"conn_ip\":\"%s\",\n" " \"conn_mask\":\"%s\",\n" " \"conn_gw\":\"%s\",\n" " \"certdays\":\"%d\",\n" " \"unixtime\":\"%llu\",\n" " \"certissuer\":\"%s\",\n" " \"certsubject\":\"%s\",\n" " \"le_dns\":\"%s\",\n" " \"le_email\":\"%s\",\n" " \"acme_state\":\"%d\",\n" " \"acme_msg\":\"%s\",\n" " \"button\":\"%d\",\n" " \"group\":\"%s\",\n" " \"role\":\"%s\",\n", lws_esp32.model, grt == LWS_MAGIC_REBOOT_TYPE_FORCED_FACTORY_BUTTON, lws_esp32.serial, lws_esp32.opts, lws_esp32.model, lws_esp32.serial, lws_esp32.region, n & 1, (n >> 1) & 1, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5] | 1, lws_esp32.active_ssid, lws_esp32.sta_ip, lws_esp32.sta_mask, lws_esp32.sta_gw, vhd->cert_remaining_days, (unsigned long long)t.tv_sec, ir.ns.name, subject, lws_esp32.le_dns, lws_esp32.le_email, vhd->acme_state, vhd->acme_msg, ((volatile struct lws_esp32 *)(&lws_esp32))->button_is_down, group, role); p += snprintf((char *)p, end - p, " \"img_factory\": %s,\n" " \"img_ota\": %s,\n", img_factory, img_ota ); n = LWS_WRITE_TEXT | LWS_WRITE_NO_FIN; pss->scan_state = SCAN_STATE_INITIAL_MANIFEST; pss->ap_record = 0; pss->subsequent = 0; break; case SCAN_STATE_INITIAL_MANIFEST: p += snprintf((char *)p, end - p, " \"latest\": %s,\n" " \"inet\":\"%d\",\n", vhd->json, lws_esp32.inet ); p += snprintf((char *)p, end - p, " \"known\":[\n"); n = LWS_WRITE_CONTINUATION | LWS_WRITE_NO_FIN; pss->scan_state = SCAN_STATE_KNOWN; break; case SCAN_STATE_KNOWN: if (nvs_open("lws-station", NVS_READONLY, &nvh)) { lwsl_notice("unable to open nvh\n"); return -1; } for (m = 0; m < 4; m++) { char name[10], ssid[65]; unsigned int pp = 0, use = 0; if (m) *p++ = ','; s = sizeof(ssid) - 1; ssid[0] = '\0'; lws_snprintf(name, sizeof(name) - 1, "%dssid", m); nvs_get_str(nvh, name, ssid, &s); lws_snprintf(name, sizeof(name) - 1, "%dpassword", m); s = 10; nvs_get_str(nvh, name, NULL, &s); pp = !!s; lws_snprintf(name, sizeof(name) - 1, "%duse", m); nvs_get_u32(nvh, name, &use); p += snprintf((char *)p, end - p, "{\"ssid\":\"%s\",\n" " \"pp\":\"%u\",\n" "\"use\":\"%u\"}\n", ssid, pp, use); } nvs_close(nvh); pss->ap_record = 0; p += snprintf((char *)p, end - p, "], \"aps\":[\n"); n = LWS_WRITE_CONTINUATION | LWS_WRITE_NO_FIN; pss->scan_state = SCAN_STATE_LIST; break; case SCAN_STATE_LIST: lwscan = vhd->known_aps_list; n = pss->ap_record; while (lwscan && n--) lwscan = lwscan->next; for (m = 0; m < 6; m++) { n = LWS_WRITE_CONTINUATION | LWS_WRITE_NO_FIN; if (!lwscan) goto scan_state_final; if (pss->subsequent) *p++ = ','; pss->subsequent = 1; pss->ap_record++; p += snprintf((char *)p, end - p, "{\"ssid\":\"%s\",\n" "\"bssid\":\"%02X:%02X:%02X:%02X:%02X:%02X\",\n" "\"rssi\":\"%d\",\n" "\"chan\":\"%d\",\n" "\"auth\":\"%d\"}\n", lwscan->ssid, lwscan->bssid[0], lwscan->bssid[1], lwscan->bssid[2], lwscan->bssid[3], lwscan->bssid[4], lwscan->bssid[5], lws_wifi_scan_rssi(lwscan), lwscan->channel, lwscan->authmode); lwscan = lwscan->next; if (!lwscan) pss->scan_state = SCAN_STATE_FINAL; } break; case SCAN_STATE_FINAL: scan_state_final: n = LWS_WRITE_CONTINUATION; p += sprintf((char *)p, "]\n}\n"); if (pss->changed_partway) { pss->changed_partway = 0; pss->subsequent = 0; pss->scan_state = SCAN_STATE_INITIAL; } else { pss->scan_state = SCAN_STATE_NONE; vhd->autonomous_update_sampled = vhd->autonomous_update; } break; default: return 0; } issue: m = lws_write(wsi, (unsigned char *)start, p - start, n); if (m < 0) { lwsl_err("ERROR %d writing to di socket\n", m); return -1; } if (pss->scan_state != SCAN_STATE_NONE) lws_callback_on_writable(wsi); break; case LWS_CALLBACK_VHOST_CERT_UPDATE: lwsl_notice("LWS_CALLBACK_VHOST_CERT_UPDATE: %d\n", (int)len); vhd->acme_state = (int)len; if (in) { lws_strncpy(vhd->acme_msg, in, sizeof(vhd->acme_msg)); lwsl_notice("acme_msg: %s\n", (char *)in); } lws_callback_on_writable_all_protocol_vhost(vhd->vhost, vhd->protocol); break; case LWS_CALLBACK_RECEIVE: { const char *sect = "\"app\": {", *b; nvs_handle nvh; char p[64], use[6]; int n, si = -1; if (strstr((const char *)in, "identify")) { lws_esp32_identify_physical_device(); break; } if (vhd->json_len && strstr((const char *)in, "update-factory")) { sect = "\"factory\": {"; goto auton; } if (vhd->json_len && strstr((const char *)in, "update-ota")) goto auton; if (strstr((const char *)in, "\"reset\"")) goto sched_reset; if (!strncmp((const char *)in, "{\"job\":\"start-le\"", 17)) goto start_le; if (nvs_open("lws-station", NVS_READWRITE, &nvh) != ESP_OK) { lwsl_err("Unable to open nvs\n"); break; } if (!esplws_simple_arg(p, sizeof(p), in, ",\"slot\":\"")) si = atoi(p); lwsl_notice("si %d\n", si); for (n = 0; n < LWS_ARRAY_SIZE(store_json); n++) { if (esplws_simple_arg(p, sizeof(p), in, store_json[n].j)) continue; /* only change access password if he has physical access to device */ if (n == 8 && lws_esp32_get_reboot_type() != LWS_MAGIC_REBOOT_TYPE_FORCED_FACTORY_BUTTON) continue; if (lws_nvs_set_str(nvh, store_json[n].nvs, p) != ESP_OK) { lwsl_err("Unable to store %s in nvm\n", store_json[n].nvs); goto bail_nvs; } if (si != -1 && n < 8) { if (!(n & 1)) { lws_strncpy(lws_esp32.ssid[(n >> 1) & 3], p, sizeof(lws_esp32.ssid[0])); lws_snprintf(use, sizeof(use) - 1, "%duse", si); lwsl_notice("resetting %s to 0\n", use); nvs_set_u32(nvh, use, 0); } else lws_strncpy(lws_esp32.password[(n >> 1) & 3], p, sizeof(lws_esp32.password[0])); } } nvs_commit(nvh); nvs_close(nvh); if (strstr((const char *)in, "\"factory-reset\"")) { if (lws_esp32_get_reboot_type() == LWS_MAGIC_REBOOT_TYPE_FORCED_FACTORY_BUTTON) { lwsl_notice("Doing factory reset\n"); ESP_ERROR_CHECK(nvs_open("lws-station", NVS_READWRITE, &nvh)); n = nvs_erase_all(nvh); if (n) lwsl_notice("erase_all failed %d\n", n); nvs_commit(nvh); nvs_close(nvh); goto sched_reset; } else lwsl_notice("failed on factory button boot\n"); } if (vhd->scan_ongoing) vhd->changed_settings = 1; else lws_esp32_wlan_nvs_get(1); lwsl_notice("set Join AP info\n"); break; bail_nvs: nvs_close(nvh); return 1; sched_reset: vhd->reboot_timer = xTimerCreate("x", pdMS_TO_TICKS(250), 0, vhd, (TimerCallbackFunction_t)reboot_timer_cb); xTimerStart(vhd->reboot_timer, 0); return 1; auton: lwsl_notice("Autonomous upload\n"); b = strstr(vhd->json, sect); if (!b) { lwsl_notice("Can't find %s in JSON\n", sect); return 1; } b = strstr(b, "\"file\": \""); if (!b) { lwsl_notice("Can't find \"file\": JSON\n"); return 1; } vhd->autonomous_update = 1; if (pss->scan_state == SCAN_STATE_NONE) vhd->autonomous_update_sampled = 1; b += 9; n = 0; while ((*b != '\"') && n < sizeof(p) - 1) p[n++] = *b++; p[n] = '\0'; vhd->part = ota_choose_part(); if (!vhd->part) return 1; if (client_connection(vhd, p)) vhd->autonomous_update = 0; break; start_le: lws_esp32.acme = 1; /* hold off scanning */ puts(in); /* * {"job":"start-le","cn":"home.warmcat.com", * "email":"andy@warmcat.com", "staging":"true"} */ if (nvs_open("lws-station", NVS_READWRITE, &nvh) != ESP_OK) { lwsl_err("Unable to open nvs\n"); break; } n = 0; b = strstr(in, ",\"cn\":\""); if (b) { b += 7; while (*b && *b != '\"' && n < sizeof(lws_esp32.le_dns) - 1) lws_esp32.le_dns[n++] = *b++; } lws_esp32.le_dns[n] = '\0'; lws_nvs_set_str(nvh, "acme-cn", lws_esp32.le_dns); n = 0; b = strstr(in, ",\"email\":\""); if (b) { b += 10; while (*b && *b != '\"' && n < sizeof(lws_esp32.le_email) - 1) lws_esp32.le_email[n++] = *b++; } lws_esp32.le_email[n] = '\0'; lws_nvs_set_str(nvh, "acme-email", lws_esp32.le_email); nvs_commit(nvh); nvs_close(nvh); n = 1; b = strstr(in, ",\"staging\":\""); if (b) lwsl_notice("staging: %s\n", b); if (b && b[12] == 'f') n = 0; lwsl_notice("cn: %s, email: %s, staging: %d\n", lws_esp32.le_dns, lws_esp32.le_email, n); { struct lws_acme_cert_aging_args caa; memset(&caa, 0, sizeof(caa)); caa.vh = vhd->vhost; caa.element_overrides[LWS_TLS_REQ_ELEMENT_COMMON_NAME] = lws_esp32.le_dns; caa.element_overrides[LWS_TLS_REQ_ELEMENT_EMAIL] = lws_esp32.le_email; if (n) caa.element_overrides[LWS_TLS_SET_DIR_URL] = "https://acme-staging.api.letsencrypt.org/directory"; /* staging */ else caa.element_overrides[LWS_TLS_SET_DIR_URL] = "https://acme-v01.api.letsencrypt.org/directory"; /* real */ lws_callback_vhost_protocols_vhost(vhd->vhost, LWS_CALLBACK_VHOST_CERT_AGING, (void *)&caa, 0); } break; } case LWS_CALLBACK_CLOSED: { struct per_session_data__esplws_scan **p = &vhd->live_pss_list; while (*p) { if ((*p) == pss) { *p = pss->next; continue; } p = &((*p)->next); } vhd->count_live_pss--; } if (!vhd->live_pss_list) xTimerStop(vhd->timer, 0); break; /* "factory" POST handling */ case LWS_CALLBACK_HTTP_BODY: /* create the POST argument parser if not already existing */ if (!pss->spa) { pss->spa = lws_spa_create(wsi, param_names, LWS_ARRAY_SIZE(param_names), 1024, file_upload_cb, pss); if (!pss->spa) return -1; pss->filename[0] = '\0'; pss->file_length = 0; } //puts((const char *)in); /* let it parse the POST data */ if (lws_spa_process(pss->spa, in, len)) return -1; break; case LWS_CALLBACK_HTTP_BODY_COMPLETION: lwsl_notice("LWS_CALLBACK_HTTP_BODY_COMPLETION (scan)\n"); /* call to inform no more payload data coming */ lws_spa_finalize(pss->spa); for (n = 0; n < LWS_ARRAY_SIZE(param_names); n++) if (lws_spa_get_string(pss->spa, n)) lwsl_notice(" Param %s: %s\n", param_names[n], lws_spa_get_string(pss->spa, n)); else lwsl_notice(" Param %s: (none)\n", param_names[n]); if (nvs_open("lws-station", NVS_READWRITE, &nvh) != ESP_OK) { lwsl_err("Unable to open nvs\n"); break; } if (lws_esp32_get_reboot_type() == LWS_MAGIC_REBOOT_TYPE_FORCED_FACTORY_BUTTON) { if (lws_spa_get_string(pss->spa, EPN_SERIAL)) { if (lws_nvs_set_str(nvh, "serial", lws_spa_get_string(pss->spa, EPN_SERIAL)) != ESP_OK) { lwsl_err("Unable to store serial in nvm\n"); goto bail_nvs; } nvs_commit(nvh); } if (lws_spa_get_string(pss->spa, EPN_OPTS)) { if (lws_nvs_set_str(nvh, "opts", lws_spa_get_string(pss->spa, EPN_OPTS)) != ESP_OK) { lwsl_err("Unable to store options in nvm\n"); goto bail_nvs; } nvs_commit(nvh); } } if (lws_spa_get_string(pss->spa, EPN_GROUP)) { if (lws_nvs_set_str(nvh, "group", lws_spa_get_string(pss->spa, EPN_GROUP)) != ESP_OK) { lwsl_err("Unable to store group in nvm\n"); goto bail_nvs; } nvs_commit(nvh); } if (lws_spa_get_string(pss->spa, EPN_ROLE)) { if (lws_nvs_set_str(nvh, "role", lws_spa_get_string(pss->spa, EPN_ROLE)) != ESP_OK) { lwsl_err("Unable to store group in nvm\n"); goto bail_nvs; } nvs_commit(nvh); } nvs_close(nvh); pss->result_len = snprintf(pss->result + LWS_PRE, sizeof(pss->result) - LWS_PRE - 1, "OK"); if (lws_add_http_header_status(wsi, HTTP_STATUS_OK, &p, end)) goto bail; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"text/html", 9, &p, end)) goto bail; if (lws_add_http_header_content_length(wsi, pss->result_len, &p, end)) goto bail; if (lws_finalize_http_header(wsi, &p, end)) goto bail; n = lws_write(wsi, start, p - start, LWS_WRITE_HTTP_HEADERS); goto bail; case LWS_CALLBACK_HTTP_WRITEABLE: lwsl_debug("LWS_CALLBACK_HTTP_WRITEABLE: sending %d\n", pss->result_len); if (!pss->result_len) break; n = lws_write(wsi, (unsigned char *)pss->result + LWS_PRE, pss->result_len, LWS_WRITE_HTTP); if (n < 0) return 1; vhd->reboot_timer = xTimerCreate("x", pdMS_TO_TICKS(3000), 0, vhd, (TimerCallbackFunction_t)reboot_timer_cb); xTimerStart(vhd->reboot_timer, 0); return 1; // hang up since we will reset /* ----- client handling ----- */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_notice("Client connection error %s\n", (char *)in); vhd->cwsi = NULL; break; case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: if (!vhd->autonomous_update) break; { char pp[20]; if (lws_hdr_copy(wsi, pp, sizeof(pp) - 1, WSI_TOKEN_HTTP_CONTENT_LENGTH) < 0) return -1; vhd->content_length = atoi(pp); if (vhd->content_length <= 0 || vhd->content_length > vhd->part->size) return -1; if (esp_ota_begin(vhd->part, (long)-1, &vhd->otahandle) != ESP_OK) { lwsl_err("OTA: Failed to begin\n"); return 1; } vhd->file_length = 0; break; } break; case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: //lwsl_notice("LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: %ld\n", // (long)len); if (!vhd->autonomous_update) { if (sizeof(vhd->json) - vhd->json_len - 1 < len) len = sizeof(vhd->json) - vhd->json_len - 1; memcpy(vhd->json + vhd->json_len, in, len); vhd->json_len += len; vhd->json[vhd->json_len] = '\0'; break; } /* autonomous download */ if (vhd->file_length + len > vhd->part->size) { lwsl_err("OTA: incoming file too large\n"); goto abort_ota; } lwsl_debug("writing 0x%lx... 0x%lx\n", vhd->part->address + vhd->file_length, vhd->part->address + vhd->file_length + len); if (esp_ota_write(vhd->otahandle, in, len) != ESP_OK) { lwsl_err("OTA: Failed to write\n"); goto abort_ota; } vhd->file_length += len; lws_callback_on_writable_all_protocol(vhd->context, vhd->protocol); break; abort_ota: esp_ota_end(vhd->otahandle); vhd->otahandle = 0; vhd->autonomous_update = 0; return 1; case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char *px = (char *)pss->buffer + LWS_PRE; int lenx = sizeof(pss->buffer) - LWS_PRE - 1; //lwsl_notice("LWS_CALLBACK_RECEIVE_CLIENT_HTTP: %d\n", len); if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } break; case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_notice("LWS_CALLBACK_COMPLETED_CLIENT_HTTP\n"); vhd->cwsi = NULL; if (!vhd->autonomous_update) { vhd->checked_updates = 1; puts(vhd->json); return -1; } /* autonomous download */ lwsl_notice("auton complete\n"); if (esp_ota_end(vhd->otahandle) != ESP_OK) { lwsl_err("OTA: end failed\n"); return 1; } if (esp_ota_set_boot_partition(vhd->part) != ESP_OK) { lwsl_err("OTA: set boot part failed\n"); return 1; } vhd->otahandle = 0; vhd->autonomous_update = 0; vhd->reboot_timer = xTimerCreate("x", pdMS_TO_TICKS(250), 0, vhd, (TimerCallbackFunction_t)reboot_timer_cb); xTimerStart(vhd->reboot_timer, 0); return -1; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: lwsl_notice("LWS_CALLBACK_CLOSED_CLIENT_HTTP\n"); break; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: /* called when our wsi user_space is going to be destroyed */ if (pss->spa) { lws_spa_destroy(pss->spa); pss->spa = NULL; } break; default: break; } return 0; bail: return 1; } #define LWS_PLUGIN_PROTOCOL_ESPLWS_SCAN \ { \ "esplws-scan", \ callback_esplws_scan, \ sizeof(struct per_session_data__esplws_scan), \ 1024, 0, NULL, 900 \ } libwebsockets-3.2.1/plugins/protocol_fulltext_demo.c000066400000000000000000000154101357643561300230140ustar00rootroot00000000000000/* * ws protocol handler plugin for "fulltext demo" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * These test plugins are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include #include #include #include #include #ifdef WIN32 #include #endif #include struct vhd_fts_demo { const char *indexpath; }; struct pss_fts_demo { struct lwsac *result; struct lws_fts_result_autocomplete *ac; struct lws_fts_result_filepath *fp; uint32_t *li; int done; uint8_t first:1; uint8_t ac_done:1; uint8_t fp_init_done:1; }; static int callback_fts(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct vhd_fts_demo *vhd = (struct vhd_fts_demo *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); struct pss_fts_demo *pss = (struct pss_fts_demo *)user; uint8_t buf[LWS_PRE + 2048], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - LWS_PRE - 1]; struct lws_fts_search_params params; const char *ccp = (const char *)in; struct lws_fts_result *result; struct lws_fts_file *jtf; int n; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi),sizeof(struct vhd_fts_demo)); if (!vhd) return 1; if (lws_pvo_get_str(in, "indexpath", (const char **)&vhd->indexpath)) return 1; return 0; case LWS_CALLBACK_HTTP: pss->first = 1; pss->ac_done = 0; /* * we have a "subdirectory" selecting the task * * /a/ = autocomplete * /r/ = results */ if (strncmp(ccp, "/a/", 3) && strncmp(ccp, "/r/", 3)) goto reply_404; memset(¶ms, 0, sizeof(params)); params.needle = ccp + 3; if (*(ccp + 1) == 'a') params.flags = LWSFTS_F_QUERY_AUTOCOMPLETE; if (*(ccp + 1) == 'r') params.flags = LWSFTS_F_QUERY_FILES | LWSFTS_F_QUERY_FILE_LINES | LWSFTS_F_QUERY_QUOTE_LINE; params.max_autocomplete = 10; params.max_files = 10; jtf = lws_fts_open(vhd->indexpath); if (!jtf) { lwsl_err("unable to open %s\n", vhd->indexpath); /* we'll inform the client in the JSON */ goto reply_200; } result = lws_fts_search(jtf, ¶ms); lws_fts_close(jtf); if (result) { pss->result = params.results_head; pss->ac = result->autocomplete_head; pss->fp = result->filepath_head; } /* NULL result will be told in the json as "indexed": 0 */ reply_200: if (lws_add_http_common_headers(wsi, HTTP_STATUS_OK, "text/html", LWS_ILLEGAL_HTTP_CONTENT_LEN, &p, end)) return 1; if (lws_finalize_write_http_header(wsi, start, &p, end)) return 1; lws_callback_on_writable(wsi); return 0; reply_404: if (lws_add_http_common_headers(wsi, HTTP_STATUS_NOT_FOUND, "text/html", LWS_ILLEGAL_HTTP_CONTENT_LEN, &p, end)) return 1; if (lws_finalize_write_http_header(wsi, start, &p, end)) return 1; return lws_http_transaction_completed(wsi); case LWS_CALLBACK_CLOSED_HTTP: if (pss && pss->result) lwsac_free(&pss->result); break; case LWS_CALLBACK_HTTP_WRITEABLE: if (!pss) break; n = LWS_WRITE_HTTP; if (pss->first) p += lws_snprintf((char *)p, lws_ptr_diff(end, p), "{\"indexed\": %d, \"ac\": [", !!pss->result); while (pss->ac && lws_ptr_diff(end, p) > 256) { p += lws_snprintf((char *)p, lws_ptr_diff(end, p), "%c{\"ac\": \"%s\",\"matches\": %d," "\"agg\": %d, \"elided\": %d}", pss->first ? ' ' : ',', (char *)(pss->ac + 1), pss->ac->instances, pss->ac->agg_instances, pss->ac->elided); pss->first = 0; pss->ac = pss->ac->next; } if (!pss->ac_done && !pss->ac && pss->fp) { pss->ac_done = 1; p += lws_snprintf((char *)p, lws_ptr_diff(end, p), "], \"fp\": ["); } while (pss->fp && lws_ptr_diff(end, p) > 256) { if (!pss->fp_init_done) { p += lws_snprintf((char *)p, lws_ptr_diff(end, p), "%c{\"path\": \"%s\",\"matches\": %d," "\"origlines\": %d," "\"hits\": [", pss->first ? ' ' : ',', ((char *)(pss->fp + 1)) + pss->fp->matches_length, pss->fp->matches, pss->fp->lines_in_file); pss->li = ((uint32_t *)(pss->fp + 1)); pss->done = 0; pss->fp_init_done = 1; pss->first = 0; } else { while (pss->done < pss->fp->matches && lws_ptr_diff(end, p) > 256) { p += lws_snprintf((char *)p, lws_ptr_diff(end, p), "%c\n{\"l\":%d,\"o\":%d," "\"s\":\"%s\"}", !pss->done ? ' ' : ',', pss->li[0], pss->li[1], *((const char **)&pss->li[2])); pss->li += 2 + (sizeof(const char *) / sizeof(uint32_t)); pss->done++; } if (pss->done == pss->fp->matches) { *p++ = ']'; pss->fp_init_done = 0; pss->fp = pss->fp->next; if (!pss->fp) *p++ = '}'; } } } if (!pss->ac && !pss->fp) { n = LWS_WRITE_HTTP_FINAL; p += lws_snprintf((char *)p, lws_ptr_diff(end, p), "]}"); } if (lws_write(wsi, (uint8_t *)start, lws_ptr_diff(p, start), n) != lws_ptr_diff(p, start)) return 1; if (n == LWS_WRITE_HTTP_FINAL) { if (pss->result) lwsac_free(&pss->result); if (lws_http_transaction_completed(wsi)) return -1; } else lws_callback_on_writable(wsi); return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } #define LWS_PLUGIN_PROTOCOL_FULLTEXT_DEMO \ { \ "lws-test-fts", \ callback_fts, \ sizeof(struct pss_fts_demo), \ 0, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_FULLTEXT_DEMO }; LWS_EXTERN LWS_VISIBLE int init_protocol_fulltext_demo(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_fulltext_demo(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/plugins/protocol_lws_mirror.c000066400000000000000000000330651357643561300223460ustar00rootroot00000000000000/* * libwebsockets-test-server - libwebsockets test implementation * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. * * Notice that the lws_pthread... locking apis are all zero-footprint * NOPs in the case LWS_MAX_SMP == 1, which is the default. When lws * is built for multiple service threads though, they resolve to their * pthreads equivalents. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include #include #define QUEUELEN 32 /* queue free space below this, rx flow is disabled */ #define RXFLOW_MIN (4) /* queue free space above this, rx flow is enabled */ #define RXFLOW_MAX ((2 * QUEUELEN) / 3) #define MAX_MIRROR_INSTANCES 3 struct mirror_instance; struct per_session_data__lws_mirror { struct lws *wsi; struct mirror_instance *mi; struct per_session_data__lws_mirror *same_mi_pss_list; uint32_t tail; }; /* this is the element in the ring */ struct a_message { void *payload; size_t len; }; struct mirror_instance { struct mirror_instance *next; lws_pthread_mutex(lock) /* protects all mirror instance data */ struct per_session_data__lws_mirror *same_mi_pss_list; /**< must hold the the per_vhost_data__lws_mirror.lock as well * to change mi list membership */ struct lws_ring *ring; int messages_allocated; char name[30]; char rx_enabled; }; struct per_vhost_data__lws_mirror { lws_pthread_mutex(lock) /* protects mi_list membership changes */ struct mirror_instance *mi_list; }; /* enable or disable rx from all connections to this mirror instance */ static void __mirror_rxflow_instance(struct mirror_instance *mi, int enable) { lws_start_foreach_ll(struct per_session_data__lws_mirror *, pss, mi->same_mi_pss_list) { lws_rx_flow_control(pss->wsi, enable); } lws_end_foreach_ll(pss, same_mi_pss_list); mi->rx_enabled = enable; } /* * Find out which connection to this mirror instance has the longest number * of still unread elements in the ringbuffer and update the lws_ring "oldest * tail" with it. Elements behind the "oldest tail" are freed and recycled for * new head content. Elements after the "oldest tail" are still waiting to be * read by somebody. * * If the oldest tail moved on from before, check if it created enough space * in the queue to re-enable RX flow control for the mirror instance. * * Mark connections that are at the oldest tail as being on a 3s timeout to * transmit something, otherwise the connection will be closed. Without this, * a choked or nonresponsive connection can block the FIFO from freeing up any * new space for new data. * * You can skip calling this if on your connection, before processing, the tail * was not equal to the current worst, ie, if the tail you will work on is != * lws_ring_get_oldest_tail(ring) then no need to call this when the tail * has changed; it wasn't the oldest so it won't change the oldest. * * Returns 0 if oldest unchanged or 1 if oldest changed from this call. */ static int __mirror_update_worst_tail(struct mirror_instance *mi) { uint32_t wai, worst = 0, worst_tail = 0, oldest; struct per_session_data__lws_mirror *worst_pss = NULL; oldest = lws_ring_get_oldest_tail(mi->ring); lws_start_foreach_ll(struct per_session_data__lws_mirror *, pss, mi->same_mi_pss_list) { wai = (uint32_t)lws_ring_get_count_waiting_elements(mi->ring, &pss->tail); if (wai >= worst) { worst = wai; worst_tail = pss->tail; worst_pss = pss; } } lws_end_foreach_ll(pss, same_mi_pss_list); if (!worst_pss) return 0; lws_ring_update_oldest_tail(mi->ring, worst_tail); if (oldest == lws_ring_get_oldest_tail(mi->ring)) return 0; /* * The oldest tail did move on. Check if we should re-enable rx flow * for the mirror instance since we made some space now. */ if (!mi->rx_enabled && /* rx is disabled */ lws_ring_get_count_free_elements(mi->ring) >= RXFLOW_MAX) /* there is enough space, let's re-enable rx for our instance */ __mirror_rxflow_instance(mi, 1); /* if nothing in queue, no timeout needed */ if (!worst) return 1; /* * The guy(s) with the oldest tail block the ringbuffer from recycling * the FIFO entries he has not read yet. Don't allow those guys to * block the FIFO operation for very long. */ lws_start_foreach_ll(struct per_session_data__lws_mirror *, pss, mi->same_mi_pss_list) { if (pss->tail == worst_tail) /* * Our policy is if you are the slowest connection, * you had better transmit something to help with that * within 3s, or we will hang up on you to stop you * blocking the FIFO for everyone else. */ lws_set_timeout(pss->wsi, PENDING_TIMEOUT_USER_REASON_BASE, 3); } lws_end_foreach_ll(pss, same_mi_pss_list); return 1; } static void __mirror_callback_all_in_mi_on_writable(struct mirror_instance *mi) { /* ask for WRITABLE callback for every wsi on this mi */ lws_start_foreach_ll(struct per_session_data__lws_mirror *, pss, mi->same_mi_pss_list) { lws_callback_on_writable(pss->wsi); } lws_end_foreach_ll(pss, same_mi_pss_list); } static void __mirror_destroy_message(void *_msg) { struct a_message *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } static int callback_lws_mirror(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__lws_mirror *pss = (struct per_session_data__lws_mirror *)user; struct per_vhost_data__lws_mirror *v = (struct per_vhost_data__lws_mirror *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); char name[300], update_worst, sent_something, *pn = name; struct mirror_instance *mi = NULL; const struct a_message *msg; struct a_message amsg; uint32_t oldest_tail; int n, count_mi = 0; switch (reason) { case LWS_CALLBACK_ESTABLISHED: lwsl_info("%s: LWS_CALLBACK_ESTABLISHED\n", __func__); /* * mirror instance name... defaults to "", but if URL includes * "?mirror=xxx", will be "xxx" */ name[0] = '\0'; if (!lws_get_urlarg_by_name(wsi, "mirror", name, sizeof(name) - 1)) lwsl_debug("get urlarg failed\n"); if (strchr(name, '=')) pn = strchr(name, '=') + 1; //lwsl_notice("%s: mirror name '%s'\n", __func__, pn); /* is there already a mirror instance of this name? */ lws_pthread_mutex_lock(&v->lock); /* vhost lock { */ lws_start_foreach_ll(struct mirror_instance *, mi1, v->mi_list) { count_mi++; if (!strcmp(pn, mi1->name)) { /* yes... we will join it */ mi = mi1; break; } } lws_end_foreach_ll(mi1, next); if (!mi) { /* no existing mirror instance for name */ if (count_mi == MAX_MIRROR_INSTANCES) { lws_pthread_mutex_unlock(&v->lock); /* } vh lock */ return -1; } /* create one with this name, and join it */ mi = malloc(sizeof(*mi)); if (!mi) goto bail1; memset(mi, 0, sizeof(*mi)); mi->ring = lws_ring_create(sizeof(struct a_message), QUEUELEN, __mirror_destroy_message); if (!mi->ring) { free(mi); goto bail1; } mi->next = v->mi_list; v->mi_list = mi; lws_snprintf(mi->name, sizeof(mi->name) - 1, "%s", pn); mi->rx_enabled = 1; lws_pthread_mutex_init(&mi->lock); lwsl_notice("Created new mi %p '%s'\n", mi, pn); } /* add our pss to list of guys bound to this mi */ lws_ll_fwd_insert(pss, same_mi_pss_list, mi->same_mi_pss_list); /* init the pss */ pss->mi = mi; pss->tail = lws_ring_get_oldest_tail(mi->ring); pss->wsi = wsi; lws_pthread_mutex_unlock(&v->lock); /* } vhost lock */ break; bail1: lws_pthread_mutex_unlock(&v->lock); /* } vhost lock */ return 1; case LWS_CALLBACK_CLOSED: /* detach our pss from the mirror instance */ mi = pss->mi; if (!mi) break; lws_pthread_mutex_lock(&v->lock); /* vhost lock { */ /* remove our closing pss from its mirror instance list */ lws_ll_fwd_remove(struct per_session_data__lws_mirror, same_mi_pss_list, pss, mi->same_mi_pss_list); pss->mi = NULL; if (mi->same_mi_pss_list) { /* * Still other pss using the mirror instance. The pss * going away may have had the oldest tail, reconfirm * using the remaining pss what is the current oldest * tail. If the oldest tail moves on, this call also * will re-enable rx flow control when appropriate. */ lws_pthread_mutex_lock(&mi->lock); /* mi lock { */ __mirror_update_worst_tail(mi); lws_pthread_mutex_unlock(&mi->lock); /* } mi lock */ lws_pthread_mutex_unlock(&v->lock); /* } vhost lock */ break; } /* No more pss using the mirror instance... delete mi */ lws_start_foreach_llp(struct mirror_instance **, pmi, v->mi_list) { if (*pmi == mi) { *pmi = (*pmi)->next; lws_ring_destroy(mi->ring); lws_pthread_mutex_destroy(&mi->lock); free(mi); break; } } lws_end_foreach_llp(pmi, next); lws_pthread_mutex_unlock(&v->lock); /* } vhost lock */ break; case LWS_CALLBACK_CONFIRM_EXTENSION_OKAY: return 1; /* disallow compression */ case LWS_CALLBACK_PROTOCOL_INIT: /* per vhost */ lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__lws_mirror)); v = (struct per_vhost_data__lws_mirror *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); lws_pthread_mutex_init(&v->lock); break; case LWS_CALLBACK_PROTOCOL_DESTROY: lws_pthread_mutex_destroy(&v->lock); break; case LWS_CALLBACK_SERVER_WRITEABLE: lws_pthread_mutex_lock(&pss->mi->lock); /* instance lock { */ oldest_tail = lws_ring_get_oldest_tail(pss->mi->ring); update_worst = oldest_tail == pss->tail; sent_something = 0; do { msg = lws_ring_get_element(pss->mi->ring, &pss->tail); if (!msg) break; if (!msg->payload) { lwsl_err("%s: NULL payload: worst = %d," " pss->tail = %d\n", __func__, oldest_tail, pss->tail); if (lws_ring_consume(pss->mi->ring, &pss->tail, NULL, 1)) continue; break; } n = lws_write(wsi, (unsigned char *)msg->payload + LWS_PRE, msg->len, LWS_WRITE_TEXT); if (n < 0) { lwsl_info("%s: WRITEABLE: %d\n", __func__, n); goto bail2; } sent_something = 1; lws_ring_consume(pss->mi->ring, &pss->tail, NULL, 1); } while (!lws_send_pipe_choked(wsi)); /* if any left for us to send, ask for writeable again */ if (lws_ring_get_count_waiting_elements(pss->mi->ring, &pss->tail)) lws_callback_on_writable(wsi); if (!sent_something || !update_worst) goto done1; /* * We are no longer holding the oldest tail (since we sent * something. So free us of the timeout related to hogging the * oldest tail. */ lws_set_timeout(pss->wsi, NO_PENDING_TIMEOUT, 0); /* * If we were originally at the oldest fifo position of * all the tails, now we used some up we may have * changed the oldest fifo position and made some space. */ __mirror_update_worst_tail(pss->mi); done1: lws_pthread_mutex_unlock(&pss->mi->lock); /* } instance lock */ break; bail2: lws_pthread_mutex_unlock(&pss->mi->lock); /* } instance lock */ return -1; case LWS_CALLBACK_RECEIVE: lws_pthread_mutex_lock(&pss->mi->lock); /* mi lock { */ n = (int)lws_ring_get_count_free_elements(pss->mi->ring); if (!n) { lwsl_notice("dropping!\n"); if (pss->mi->rx_enabled) __mirror_rxflow_instance(pss->mi, 0); goto req_writable; } amsg.payload = malloc(LWS_PRE + len); amsg.len = len; if (!amsg.payload) { lwsl_notice("OOM: dropping\n"); goto done2; } memcpy((char *)amsg.payload + LWS_PRE, in, len); if (!lws_ring_insert(pss->mi->ring, &amsg, 1)) { __mirror_destroy_message(&amsg); lwsl_notice("dropping!\n"); if (pss->mi->rx_enabled) __mirror_rxflow_instance(pss->mi, 0); goto req_writable; } if (pss->mi->rx_enabled && lws_ring_get_count_free_elements(pss->mi->ring) < RXFLOW_MIN) __mirror_rxflow_instance(pss->mi, 0); req_writable: __mirror_callback_all_in_mi_on_writable(pss->mi); done2: lws_pthread_mutex_unlock(&pss->mi->lock); /* } mi lock */ break; case LWS_CALLBACK_EVENT_WAIT_CANCELLED: lwsl_info("LWS_CALLBACK_EVENT_WAIT_CANCELLED\n"); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MIRROR { \ "lws-mirror-protocol", \ callback_lws_mirror, \ sizeof(struct per_session_data__lws_mirror), \ 4096, /* rx buf size must be >= permessage-deflate rx size */ \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MIRROR }; LWS_EXTERN LWS_VISIBLE int init_protocol_lws_mirror(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_lws_mirror(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/plugins/protocol_lws_raw_test.c000066400000000000000000000172521357643561300226640ustar00rootroot00000000000000/* * ws protocol handler plugin for testing raw file and raw socket * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * These test plugins are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. * * This plugin test both raw file descriptors and raw socket descriptors. It * can test both or just one depending on how you configure it. libwebsockets- * test-server-v2.0 is set up to test both. * * RAW File Descriptor Testing * =========================== * * Enable on a vhost like this * * "protocol-lws-raw-test": { * "status": "ok", * "fifo-path": "/tmp/lws-test-raw" * }, * * Then you can feed it data through the FIFO like this * * $ sudo sh -c "echo hello > /tmp/lws-test-raw" * * This plugin simply prints the data. But it does it through the lws event * loop / service poll. * * * RAW Socket Descriptor Testing * ============================= * * 1) You must give the vhost the option flag * LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG * * 2) Enable on a vhost like this * * "protocol-lws-raw-test": { * "status": "ok", * "raw": "1" * }, * * The "raw" pvo marks this protocol as being used for RAW connections. * * 3) Run libwebsockets-test-server-v2.0 and connect to it by telnet, eg * * telnet 127.0.0.1 7681 * * type something that isn't a valid HTTP method and enter, before the * connection times out. The connection will switch to RAW mode using this * protocol, and pass the unused rx as a raw RX callback. * * The test protocol echos back what was typed on telnet to telnet. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include struct per_vhost_data__raw_test { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; char fifo_path[100]; int fifo; char zero_length_read; }; struct per_session_data__raw_test { int number; unsigned char buf[128]; int len; }; static int callback_raw_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__raw_test *pss = (struct per_session_data__raw_test *)user; struct per_vhost_data__raw_test *vhd = (struct per_vhost_data__raw_test *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); lws_sock_file_fd_type u; (void)pss; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__raw_test)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); { const struct lws_protocol_vhost_options *pvo = (const struct lws_protocol_vhost_options *)in; while (pvo) { if (!strcmp(pvo->name, "fifo-path")) lws_strncpy(vhd->fifo_path, pvo->value, sizeof(vhd->fifo_path)); pvo = pvo->next; } if (vhd->fifo_path[0] == '\0') { lwsl_err("%s: Missing pvo \"fifo-path\", " "raw file fd testing disabled\n", __func__); break; } } unlink(vhd->fifo_path); if (mkfifo(vhd->fifo_path, 0666)) { lwsl_err("mkfifo failed\n"); return 1; } vhd->fifo = lws_open(vhd->fifo_path, O_NONBLOCK | O_RDONLY); if (vhd->fifo == -1) { lwsl_err("opening fifo failed\n"); unlink(vhd->fifo_path); return 1; } lwsl_notice("FIFO %s created\n", vhd->fifo_path); u.filefd = vhd->fifo; if (!lws_adopt_descriptor_vhost(vhd->vhost, LWS_ADOPT_RAW_FILE_DESC, u, "protocol-lws-raw-test", NULL)) { lwsl_err("Failed to adopt fifo descriptor\n"); close(vhd->fifo); unlink(vhd->fifo_path); return 1; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (!vhd) break; if (vhd->fifo >= 0) { close(vhd->fifo); unlink(vhd->fifo_path); } break; /* * Callbacks related to Raw file descriptor testing */ case LWS_CALLBACK_RAW_ADOPT_FILE: lwsl_notice("LWS_CALLBACK_RAW_ADOPT_FILE\n"); break; case LWS_CALLBACK_RAW_RX_FILE: lwsl_notice("LWS_CALLBACK_RAW_RX_FILE\n"); { char buf[256]; int n; n = read(vhd->fifo, buf, sizeof(buf) - 1); if (n < 0) { lwsl_err("FIFO read failed\n"); return 1; } /* * When nobody opened the other side of the FIFO, the * FIFO fd acts well and only signals POLLIN when * somebody opened and wrote to it. * * But if the other side of the FIFO closed it, we will * see an endless POLLIN and 0 available to read. * * The only way to handle it is to reopen the FIFO our * side and wait for a new peer. This is a quirk of * FIFOs not of LWS. */ if (n == 0) { /* peer closed - reopen in close processing */ vhd->zero_length_read = 1; return 1; } buf[n] = '\0'; lwsl_info("read %d\n", n); puts(buf); } break; case LWS_CALLBACK_RAW_CLOSE_FILE: lwsl_notice("LWS_CALLBACK_RAW_CLOSE_FILE\n"); if (vhd->zero_length_read) { vhd->zero_length_read = 0; close(vhd->fifo); /* the wsi that adopted the fifo file is closing... * reopen the fifo and readopt */ vhd->fifo = lws_open(vhd->fifo_path, O_NONBLOCK | O_RDONLY); if (vhd->fifo == -1) { lwsl_err("opening fifo failed\n"); return 1; } lwsl_notice("FIFO %s reopened\n", vhd->fifo_path); u.filefd = vhd->fifo; if (!lws_adopt_descriptor_vhost(vhd->vhost, 0, u, "protocol-lws-raw-test", NULL)) { lwsl_err("Failed to adopt fifo descriptor\n"); close(vhd->fifo); return 1; } } break; case LWS_CALLBACK_RAW_WRITEABLE_FILE: lwsl_notice("LWS_CALLBACK_RAW_WRITEABLE_FILE\n"); break; /* * Callbacks related to Raw socket descriptor testing */ case LWS_CALLBACK_RAW_ADOPT: lwsl_notice("LWS_CALLBACK_RAW_ADOPT\n"); break; case LWS_CALLBACK_RAW_RX: lwsl_notice("LWS_CALLBACK_RAW_RX %ld\n", (long)len); if (len > sizeof(pss->buf)) len = sizeof(pss->buf); memcpy(pss->buf, in, len); pss->len = len; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RAW_CLOSE: lwsl_notice("LWS_CALLBACK_RAW_CLOSE\n"); break; case LWS_CALLBACK_RAW_WRITEABLE: lwsl_notice("LWS_CALLBACK_RAW_WRITEABLE\n"); lws_write(wsi, pss->buf, pss->len, LWS_WRITE_HTTP); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_RAW_TEST \ { \ "protocol-lws-raw-test", \ callback_raw_test, \ sizeof(struct per_session_data__raw_test), \ 1024, /* rx buf size must be >= permessage-deflate rx size */ \ } #if !defined (LWS_PLUGIN_STATIC) static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_RAW_TEST }; LWS_EXTERN LWS_VISIBLE int init_protocol_lws_raw_test(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_lws_raw_test(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/plugins/protocol_lws_server_status.c000066400000000000000000000125161357643561300237430ustar00rootroot00000000000000/* * libwebsockets-test-server - libwebsockets test implementation * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #define LWS_DLL #define LWS_INTERNAL #include #include #include #include #include #include #include struct lws_ss_filepath { struct lws_ss_filepath *next; char filepath[128]; }; struct lws_ss_dumps { char buf[32768]; int length; }; struct pss { int ver; int pos; }; struct vhd { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; int hide_vhosts; int tow_flag; int period_s; int clients; struct lws_ss_dumps d; struct lws_ss_filepath *fp; }; static const struct lws_protocols protocols[1]; static void update(struct vhd *v) { struct lws_ss_filepath *fp; char contents[256], pure[256], *p = v->d.buf + LWS_PRE, *end = v->d.buf + sizeof(v->d.buf) - LWS_PRE - 1; int n, first = 1, fd; p += lws_snprintf(p, lws_ptr_diff(end, p), "{\"i\":"); p += lws_json_dump_context(v->context, p, lws_ptr_diff(end, p), v->hide_vhosts); p += lws_snprintf(p, lws_ptr_diff(end, p), ", \"files\": ["); fp = v->fp; while (fp) { if (!first) p += lws_snprintf(p, lws_ptr_diff(end, p), ","); strcpy(pure, "(unknown)"); fd = lws_open(fp->filepath, LWS_O_RDONLY); if (fd >= 0) { n = read(fd, contents, sizeof(contents) - 1); close(fd); if (n >= 0) { contents[n] = '\0'; lws_json_purify(pure, contents, sizeof(pure)); } } p += lws_snprintf(p, lws_ptr_diff(end, p), "{\"path\":\"%s\",\"val\":\"%s\"}", fp->filepath, pure); first = 0; fp = fp->next; } p += lws_snprintf(p, lws_ptr_diff(end, p), "]}"); v->d.length = p - (v->d.buf + LWS_PRE); lws_callback_on_writable_all_protocol(v->context, &protocols[0]); } static int callback_lws_server_status(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { const struct lws_protocol_vhost_options *pvo = (const struct lws_protocol_vhost_options *)in; struct vhd *v = (struct vhd *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); struct lws_ss_filepath *fp, *fp1, **fp_old; int m; switch (reason) { case LWS_CALLBACK_ESTABLISHED: lwsl_info("%s: LWS_CALLBACK_ESTABLISHED\n", __func__); if (!v->clients++) { lws_timed_callback_vh_protocol(v->vhost, v->protocol, LWS_CALLBACK_USER, v->period_s); lwsl_info("%s: starting updates\n", __func__); } update(v); break; case LWS_CALLBACK_CLOSED: if (!--v->clients) lwsl_notice("%s: stopping updates\n", __func__); break; case LWS_CALLBACK_USER: update(v); if (v->clients) lws_timed_callback_vh_protocol(v->vhost, v->protocol, LWS_CALLBACK_USER, v->period_s); break; case LWS_CALLBACK_PROTOCOL_INIT: /* per vhost */ if (v) break; lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd)); v = (struct vhd *)lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); fp_old = &v->fp; while (pvo) { if (!strcmp(pvo->name, "hide-vhosts")) v->hide_vhosts = atoi(pvo->value); if (!strcmp(pvo->name, "update-ms")) v->period_s = (atoi(pvo->value) + 500) / 1000; else v->period_s = 5; if (!strcmp(pvo->name, "filepath")) { fp = malloc(sizeof(*fp)); fp->next = NULL; lws_snprintf(&fp->filepath[0], sizeof(fp->filepath), "%s", pvo->value); *fp_old = fp; fp_old = &fp->next; } pvo = pvo->next; } v->context = lws_get_context(wsi); v->vhost = lws_get_vhost(wsi); v->protocol = lws_get_protocol(wsi); /* get the initial data */ update(v); break; case LWS_CALLBACK_PROTOCOL_DESTROY: /* per vhost */ if (!v) break; fp = v->fp; while (fp) { fp1= fp->next; free(fp); fp = fp1; } break; case LWS_CALLBACK_SERVER_WRITEABLE: m = lws_write(wsi, (unsigned char *)v->d.buf + LWS_PRE, v->d.length, LWS_WRITE_TEXT); if (m < 0) return -1; break; default: break; } return 0; } static const struct lws_protocols protocols[] = { { "lws-server-status", callback_lws_server_status, sizeof(struct pss), 1024, }, }; LWS_EXTERN LWS_VISIBLE int init_protocol_lws_server_status(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_lws_server_status(struct lws_context *context) { return 0; } libwebsockets-3.2.1/plugins/protocol_lws_sshd_demo.c000066400000000000000000000264631357643561300230050ustar00rootroot00000000000000/* * ws protocol handler plugin for sshd demo * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * These test plugins are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include #include #include #include #define TEST_SERVER_KEY_PATH "/etc/lws-test-sshd-server-key" struct per_vhost_data__lws_sshd_demo { const struct lws_protocols *ssh_base_protocol; int privileged_fd; }; /* * This is a copy of the lws ssh test public key, you can find it in * /usr[/local]/share/libwebsockets-test-server/lws-ssh-test-keys.pub * and the matching private key there too in .../lws-ssh-test-keys * * If the vhost with this protocol is using localhost:2222, you can test with * the matching private key like this: * * ssh -p 2222 -i /usr/local/share/libwebsockets-test-server/lws-ssh-test-keys anyuser@127.0.0.1 * * These keys are distributed for testing! Don't use them on a real system * unless you want anyone with a copy of lws to access it. */ static const char *authorized_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCnWiP+c+kSD6Lk+C6NA9KruApa45sbt" "94/dxT0bCITlAA/+PBk6mR1lwWgXYozOMdrHrqx34piqDyXnc4HabqCaOm/FrYhkCPL8z" "a26PMYqteSosuwKv//5iT6ZWhNnsMwExBwtV6MIq0MxAeWqxRnYNWpNM8iN6sFzkdG/YF" "dyHrIBTgwzM77NLCMl6GEkJErRCFppC2SwYxGa3BRrgUwX3LkV8HpMIaYHFo1Qgj7Scqm" "HwS2R75SOqi2aOWDpKjznARg9JgzDWSQi4seBMV2oL0BTwJANSDf+p0sQLsaKGJhpVpBQ" "yS2wUeyuGyytupWzEluQrajMZq52iotcogv5BfeulfTTFbJP4kuHOsSP0lsQ2lpMDQANS" "HEvXxzHJLDLXM9gXJzwJ+ZiRt6R+bfmP1nfN3MiWtxcIbBanWwQK6xTCKBe4wPaKta5EU" "6wsLPeakOIVzoeaOu/HsbtPZlwX0Mu/oUFcfKyKAhlkU15MOAIEfUPo8Yh52bWMlIlpZa" "4xWbLMGw3GrsrPPdcsAauyqvY4/NjjWQbWhP1SuUfvv5709PIiOUjVKK2HUwmR1ouch6X" "MQGXfMR1h1Wjvc+bkNs17gCIrQnFilAZLC3Sm3Opiz/4LO99Hw448G0RM2vQn0mJE46w" "Eu/B10U6Jf4Efojhh1dk85BD1LTIb+N3Q== ssh-test-key@lws"; enum states { SSH_TEST_GREET, SSH_TEST_PRESSED, SSH_TEST_DONE, }; static const char * const strings[] = { /* SSH_TEST_GREET */ "Thanks for logging to lws sshd server demo.\n\r" "\n\r" "This demo is very simple, it waits for you to press\n\r" "a key, and acknowledges it. Then press another key\n\r" "and it will exit. But actually that demos the basic\n\r" "sshd functions underneath. You can use the ops struct\n\r" "members to add a pty / shell or whatever you want.\n\r" "\n\r" "Press a key...\n\r", /* SSH_TEST_PRESSED */ "Thanks for pressing a key. Press another to exit.\n\r", /* SSH_TEST_DONE */ "Bye!\n\r" }; struct sshd_instance_priv { struct lws *wsi; enum states state; const char *ptr; int pos; int len; }; static void enter_state(struct sshd_instance_priv *priv, enum states state) { priv->state = state; priv->ptr = strings[state]; priv->pos = 0; priv->len = (int)strlen(priv->ptr); lws_callback_on_writable(priv->wsi); } /* ops: channel lifecycle */ static int ssh_ops_channel_create(struct lws *wsi, void **_priv) { struct sshd_instance_priv *priv; priv = malloc(sizeof(struct sshd_instance_priv)); *_priv = priv; if (!priv) return 1; memset(priv, 0, sizeof(*priv)); priv->wsi = wsi; return 0; } static int ssh_ops_channel_destroy(void *_priv) { struct sshd_instance_priv *priv = _priv; free(priv); return 0; } /* ops: IO */ static int ssh_ops_tx_waiting(void *_priv) { struct sshd_instance_priv *priv = _priv; if (priv->state == SSH_TEST_DONE && priv->pos == priv->len) return -1; /* exit */ if (priv->pos != priv->len) return LWS_STDOUT; return 0; } static size_t ssh_ops_tx(void *_priv, int stdch, uint8_t *buf, size_t len) { struct sshd_instance_priv *priv = _priv; size_t chunk = len; if (stdch != LWS_STDOUT) return 0; if ((size_t)(priv->len - priv->pos) < chunk) chunk = priv->len - priv->pos; if (!chunk) return 0; memcpy(buf, priv->ptr + priv->pos, chunk); priv->pos += (int)chunk; if (priv->state == SSH_TEST_DONE && priv->pos == priv->len) { /* * we are sending the last thing we want to send * before exiting. Make it ask again at ssh_ops_tx_waiting() * and we will exit then, after this has been sent */ lws_callback_on_writable(priv->wsi); } return chunk; } static int ssh_ops_rx(void *_priv, struct lws *wsi, const uint8_t *buf, uint32_t len) { struct sshd_instance_priv *priv = _priv; if (priv->state < SSH_TEST_DONE) enter_state(priv, priv->state + 1); else return -1; return 0; } /* ops: storage for the (autogenerated) persistent server key */ static size_t ssh_ops_get_server_key(struct lws *wsi, uint8_t *buf, size_t len) { struct per_vhost_data__lws_sshd_demo *vhd = (struct per_vhost_data__lws_sshd_demo *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); int n; if (lseek(vhd->privileged_fd, 0, SEEK_SET) < 0) return 0; n = read(vhd->privileged_fd, buf, (int)len); if (n < 0) { lwsl_err("%s: read failed: %d\n", __func__, n); n = 0; } return n; } static size_t ssh_ops_set_server_key(struct lws *wsi, uint8_t *buf, size_t len) { struct per_vhost_data__lws_sshd_demo *vhd = (struct per_vhost_data__lws_sshd_demo *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); int n; n = write(vhd->privileged_fd, buf, (int)len); if (n < 0) { lwsl_err("%s: read failed: %d\n", __func__, errno); n = 0; } return n; } /* ops: auth */ static int ssh_ops_is_pubkey_authorized(const char *username, const char *type, const uint8_t *peer, int peer_len) { char *aps, *p, *ps; int n = (int)strlen(type), alen = 2048, ret = 2, len; size_t s = 0; lwsl_info("%s: checking pubkey for %s\n", __func__, username); s = strlen(authorized_key) + 1; aps = malloc(s); if (!aps) { lwsl_notice("OOM 1\n"); goto bail_p1; } memcpy(aps, authorized_key, s); /* we only understand RSA */ if (strcmp(type, "ssh-rsa")) { lwsl_notice("type is not ssh-rsa\n"); goto bail_p1; } p = aps; if (strncmp(p, type, n)) { lwsl_notice("lead-in string does not match %s\n", type); goto bail_p1; } p += n; if (*p != ' ') { lwsl_notice("missing space at end of lead-in\n"); goto bail_p1; } p++; ps = malloc(alen); if (!ps) { lwsl_notice("OOM 2\n"); free(aps); goto bail; } len = lws_b64_decode_string(p, ps, alen); free(aps); if (len < 0) { lwsl_notice("key too big\n"); goto bail; } if (peer_len > len) { lwsl_notice("peer_len %d bigger than decoded len %d\n", peer_len, len); goto bail; } /* * once we are past that, it's the same name * EN that the peer sends us */ if (memcmp(peer, ps, peer_len)) { lwsl_info("%s: factors mismatch, rejecting key\n", __func__); goto bail; } lwsl_info("pubkey authorized\n"); ret = 0; bail: free(ps); return ret; bail_p1: if (aps) free(aps); return 1; } static int ssh_ops_shell(void *_priv, struct lws *wsi, lws_ssh_finish_exec finish, void *finish_handle) { struct sshd_instance_priv *priv = _priv; /* for this demo, we don't open a real shell */ enter_state(priv, SSH_TEST_GREET); return 0; } /* ops: banner */ static size_t ssh_ops_banner(char *buf, size_t max_len, char *lang, size_t max_lang_len) { int n = lws_snprintf(buf, max_len, "\n" " |\\---/| lws-ssh Test Server\n" " | o_o | SSH Terminal Server\n" " \\_^_/ Copyright (C) 2017 Crash Barrier Ltd\n\n"); lws_snprintf(lang, max_lang_len, "en/US"); return n; } static void ssh_ops_disconnect_reason(uint32_t reason, const char *desc, const char *desc_lang) { lwsl_notice("DISCONNECT reason 0x%X, %s (lang %s)\n", reason, desc, desc_lang); } static const struct lws_ssh_ops ssh_ops = { .channel_create = ssh_ops_channel_create, .channel_destroy = ssh_ops_channel_destroy, .tx_waiting = ssh_ops_tx_waiting, .tx = ssh_ops_tx, .rx = ssh_ops_rx, .get_server_key = ssh_ops_get_server_key, .set_server_key = ssh_ops_set_server_key, .set_env = NULL, .pty_req = NULL, .child_process_io = NULL, .child_process_terminated = NULL, .exec = NULL, .shell = ssh_ops_shell, .is_pubkey_authorized = ssh_ops_is_pubkey_authorized, .banner = ssh_ops_banner, .disconnect_reason = ssh_ops_disconnect_reason, .server_string = "SSH-2.0-Libwebsockets", .api_version = 2, }; static int callback_lws_sshd_demo(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_vhost_data__lws_sshd_demo *vhd = (struct per_vhost_data__lws_sshd_demo *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__lws_sshd_demo)); /* * During this we still have the privs / caps we were started * with. So open an fd on the server key, either just for read * or for creat / trunc if doesn't exist. This allows us to * deal with it down /etc/.. when just after this we will lose * the privileges needed to read / write /etc/... */ vhd->privileged_fd = lws_open(TEST_SERVER_KEY_PATH, O_RDONLY); if (vhd->privileged_fd == -1) vhd->privileged_fd = lws_open(TEST_SERVER_KEY_PATH, O_CREAT | O_TRUNC | O_RDWR, 0600); if (vhd->privileged_fd == -1) { lwsl_err("%s: Can't open %s\n", __func__, TEST_SERVER_KEY_PATH); return -1; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: close(vhd->privileged_fd); break; case LWS_CALLBACK_VHOST_CERT_AGING: break; case LWS_CALLBACK_EVENT_WAIT_CANCELLED: break; default: if (!vhd->ssh_base_protocol) { vhd->ssh_base_protocol = lws_vhost_name_to_protocol( lws_get_vhost(wsi), "lws-ssh-base"); if (vhd->ssh_base_protocol) user = lws_adjust_protocol_psds(wsi, vhd->ssh_base_protocol->per_session_data_size); } if (vhd->ssh_base_protocol) return vhd->ssh_base_protocol->callback(wsi, reason, user, in, len); else lwsl_notice("can't find lws-ssh-base\n"); break; } return 0; } #define LWS_PLUGIN_PROTOCOL_LWS_SSHD_DEMO \ { \ "lws-sshd-demo", \ callback_lws_sshd_demo, \ 0, \ 1024, /* rx buf size must be >= permessage-deflate rx size */ \ 0, (void *)&ssh_ops, 0 \ } #if !defined (LWS_PLUGIN_STATIC) static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_LWS_SSHD_DEMO }; LWS_EXTERN LWS_VISIBLE int init_protocol_lws_sshd_demo(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_lws_sshd_demo(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/plugins/protocol_lws_status.c000066400000000000000000000150151357643561300223520ustar00rootroot00000000000000/* * libwebsockets-test-server - libwebsockets test implementation * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include #include #ifdef WIN32 #include #include #endif typedef enum { WALK_NONE, WALK_INITIAL, WALK_LIST, WALK_FINAL } e_walk; struct per_session_data__lws_status { struct per_session_data__lws_status *next; struct lws *wsi; time_t time_est; char user_agent[256]; e_walk walk; struct per_session_data__lws_status *walk_next; unsigned char subsequent:1; unsigned char changed_partway:1; unsigned char wss_over_h2:1; }; struct per_vhost_data__lws_status { struct per_session_data__lws_status *live_pss_list; struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; int count_live_pss; }; static void trigger_resend(struct per_vhost_data__lws_status *vhd) { lws_start_foreach_ll(struct per_session_data__lws_status *, pss, vhd->live_pss_list) { if (pss->walk == WALK_NONE) { pss->subsequent = 0; pss->walk_next = vhd->live_pss_list; pss->walk = WALK_INITIAL; } else pss->changed_partway = 1; } lws_end_foreach_ll(pss, next); lws_callback_on_writable_all_protocol(vhd->context, vhd->protocol); } /* lws-status protocol */ int callback_lws_status(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__lws_status *pss = (struct per_session_data__lws_status *)user; struct per_vhost_data__lws_status *vhd = (struct per_vhost_data__lws_status *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); char buf[LWS_PRE + 384], ip[24], *start = buf + LWS_PRE - 1, *p = start, *end = buf + sizeof(buf) - 1; int n, m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__lws_status)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); break; case LWS_CALLBACK_ESTABLISHED: /* * This shows how to stage sending a single ws message in * multiple fragments. In this case, it lets us trade off * memory needed to make the data vs time to send it. */ vhd->count_live_pss++; pss->next = vhd->live_pss_list; vhd->live_pss_list = pss; pss->wss_over_h2 = !!len; time(&pss->time_est); pss->wsi = wsi; if (lws_hdr_copy(wsi, pss->user_agent, sizeof(pss->user_agent), WSI_TOKEN_HTTP_USER_AGENT) < 0) /* too big */ strcpy(pss->user_agent, "unknown"); trigger_resend(vhd); break; case LWS_CALLBACK_SERVER_WRITEABLE: switch (pss->walk) { case WALK_INITIAL: n = LWS_WRITE_TEXT | LWS_WRITE_NO_FIN; p += lws_snprintf(p, end - p, "{ \"version\":\"%s\"," " \"wss_over_h2\":\"%d\"," " \"hostname\":\"%s\"," " \"wsi\":\"%d\", \"conns\":[", lws_get_library_version(), pss->wss_over_h2, lws_canonical_hostname(vhd->context), vhd->count_live_pss); pss->walk = WALK_LIST; pss->walk_next = vhd->live_pss_list; break; case WALK_LIST: n = LWS_WRITE_CONTINUATION | LWS_WRITE_NO_FIN; if (!pss->walk_next) goto walk_final; if (pss->subsequent) *p++ = ','; pss->subsequent = 1; m = 0; lws_start_foreach_ll(struct per_session_data__lws_status *, pss2, vhd->live_pss_list) { if (pss2 == pss->walk_next) { m = 1; break; } } lws_end_foreach_ll(pss2, next); if (!m) { /* our next guy went away */ pss->walk = WALK_FINAL; pss->changed_partway = 1; break; } strcpy(ip, "unknown"); lws_get_peer_simple(pss->walk_next->wsi, ip, sizeof(ip)); p += lws_snprintf(p, end - p, "{\"peer\":\"%s\",\"time\":\"%ld\"," "\"ua\":\"%s\"}", ip, (unsigned long)pss->walk_next->time_est, pss->walk_next->user_agent); pss->walk_next = pss->walk_next->next; if (!pss->walk_next) pss->walk = WALK_FINAL; break; case WALK_FINAL: walk_final: n = LWS_WRITE_CONTINUATION; p += lws_snprintf(p, 4, "]}"); if (pss->changed_partway) { pss->changed_partway = 0; pss->subsequent = 0; pss->walk_next = vhd->live_pss_list; pss->walk = WALK_INITIAL; } else pss->walk = WALK_NONE; break; default: return 0; } m = lws_write(wsi, (unsigned char *)start, p - start, n); if (m < 0) { lwsl_err("ERROR %d writing to di socket\n", m); return -1; } if (pss->walk != WALK_NONE) lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RECEIVE: lwsl_notice("pmd test: RX len %d\n", (int)len); break; case LWS_CALLBACK_CLOSED: // lwsl_debug("****** LWS_CALLBACK_CLOSED\n"); lws_start_foreach_llp(struct per_session_data__lws_status **, ppss, vhd->live_pss_list) { if (*ppss == pss) { *ppss = pss->next; break; } } lws_end_foreach_llp(ppss, next); trigger_resend(vhd); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_LWS_STATUS \ { \ "lws-status", \ callback_lws_status, \ sizeof(struct per_session_data__lws_status), \ 512, /* rx buf size must be >= permessage-deflate rx size */ \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_LWS_STATUS }; LWS_EXTERN LWS_VISIBLE int init_protocol_lws_status(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_lws_status(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/plugins/protocol_post_demo.c000066400000000000000000000160271357643561300221370ustar00rootroot00000000000000/* * ws protocol handler plugin for "POST demo" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * These test plugins are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include #include #include #include #include #ifdef WIN32 #include #endif #include struct per_session_data__post_demo { struct lws_spa *spa; char result[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE]; char filename[64]; long file_length; #if !defined(LWS_WITH_ESP32) lws_filefd_type fd; #endif uint8_t completed:1; uint8_t sent_headers:1; uint8_t sent_body:1; }; static const char * const param_names[] = { "text", "send", "file", "upload", }; enum enum_param_names { EPN_TEXT, EPN_SEND, EPN_FILE, EPN_UPLOAD, }; static int file_upload_cb(void *data, const char *name, const char *filename, char *buf, int len, enum lws_spa_fileupload_states state) { struct per_session_data__post_demo *pss = (struct per_session_data__post_demo *)data; #if !defined(LWS_WITH_ESP32) int n; (void)n; #endif switch (state) { case LWS_UFS_OPEN: lws_strncpy(pss->filename, filename, sizeof(pss->filename)); /* we get the original filename in @filename arg, but for * simple demo use a fixed name so we don't have to deal with * attacks */ #if !defined(LWS_WITH_ESP32) pss->fd = (lws_filefd_type)(long long)lws_open("/tmp/post-file", O_CREAT | O_TRUNC | O_RDWR, 0600); #endif break; case LWS_UFS_FINAL_CONTENT: case LWS_UFS_CONTENT: if (len) { pss->file_length += len; /* if the file length is too big, drop it */ if (pss->file_length > 100000) return 1; #if !defined(LWS_WITH_ESP32) n = write((int)(long long)pss->fd, buf, len); lwsl_info("%s: write %d says %d\n", __func__, len, n); #else lwsl_notice("%s: Received chunk size %d\n", __func__, len); #endif } if (state == LWS_UFS_CONTENT) break; #if !defined(LWS_WITH_ESP32) close((int)(long long)pss->fd); pss->fd = LWS_INVALID_FILE; #endif break; case LWS_UFS_CLOSE: break; } return 0; } /* * returns length in bytes */ static int format_result(struct per_session_data__post_demo *pss) { unsigned char *p, *start, *end; int n; p = (unsigned char *)pss->result + LWS_PRE; start = p; end = p + sizeof(pss->result) - LWS_PRE - 1; p += lws_snprintf((char *)p, end -p, "" "" "LWS Server Status" "

Form results (after urldecoding)

" ""); for (n = 0; n < (int)LWS_ARRAY_SIZE(param_names); n++) { if (!lws_spa_get_string(pss->spa, n)) p += lws_snprintf((char *)p, end - p, "", param_names[n]); else p += lws_snprintf((char *)p, end - p, "", param_names[n], lws_spa_get_length(pss->spa, n), lws_spa_get_string(pss->spa, n)); } p += lws_snprintf((char *)p, end - p, "
NameLengthValue
%s0" "NULL
%s%d" "%s

filename: %s, " "length %ld", pss->filename, pss->file_length); p += lws_snprintf((char *)p, end - p, ""); return (int)lws_ptr_diff(p, start); } static int callback_post_demo(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__post_demo *pss = (struct per_session_data__post_demo *)user; unsigned char *p, *start, *end; int n; switch (reason) { case LWS_CALLBACK_HTTP_BODY: /* create the POST argument parser if not already existing */ if (!pss->spa) { pss->spa = lws_spa_create(wsi, param_names, LWS_ARRAY_SIZE(param_names), 1024, file_upload_cb, pss); if (!pss->spa) return -1; pss->filename[0] = '\0'; pss->file_length = 0; } /* let it parse the POST data */ if (lws_spa_process(pss->spa, in, (int)len)) return -1; break; case LWS_CALLBACK_HTTP_BODY_COMPLETION: lwsl_debug("LWS_CALLBACK_HTTP_BODY_COMPLETION: %p\n", wsi); /* call to inform no more payload data coming */ lws_spa_finalize(pss->spa); pss->completed = 1; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_HTTP_WRITEABLE: if (!pss->completed) break; p = (unsigned char *)pss->result + LWS_PRE; start = p; end = p + sizeof(pss->result) - LWS_PRE - 1; if (!pss->sent_headers) { n = format_result(pss); if (lws_add_http_header_status(wsi, HTTP_STATUS_OK, &p, end)) goto bail; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"text/html", 9, &p, end)) goto bail; if (lws_add_http_header_content_length(wsi, n, &p, end)) goto bail; if (lws_finalize_http_header(wsi, &p, end)) goto bail; /* first send the headers ... */ n = lws_write(wsi, start, lws_ptr_diff(p, start), LWS_WRITE_HTTP_HEADERS); if (n < 0) goto bail; pss->sent_headers = 1; lws_callback_on_writable(wsi); break; } if (!pss->sent_body) { n = format_result(pss); n = lws_write(wsi, (unsigned char *)start, n, LWS_WRITE_HTTP_FINAL); pss->sent_body = 1; if (n < 0) return 1; goto try_to_reuse; } break; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: /* called when our wsi user_space is going to be destroyed */ if (pss->spa) { lws_spa_destroy(pss->spa); pss->spa = NULL; } break; default: break; } return 0; bail: return 1; try_to_reuse: if (lws_http_transaction_completed(wsi)) return -1; return 0; } #define LWS_PLUGIN_PROTOCOL_POST_DEMO \ { \ "protocol-post-demo", \ callback_post_demo, \ sizeof(struct per_session_data__post_demo), \ 1024, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_POST_DEMO }; LWS_EXTERN LWS_VISIBLE int init_protocol_post_demo(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_post_demo(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/plugins/raw-proxy/000077500000000000000000000000001357643561300200235ustar00rootroot00000000000000libwebsockets-3.2.1/plugins/raw-proxy/README.md000066400000000000000000000034211357643561300213020ustar00rootroot00000000000000# raw-proxy plugin ## Enabling for build ``` $ cmake .. -DLWS_ROLE_RAW_PROXY=1 ``` ## configuration pvo |pvo|value meaning| |---|---| |onward|The onward proxy destination, in the form `ipv4:addr[:port]`| ## Note for vhost selection Notice that since it proxies the packets "raw", there's no SNI or Host: header to resolve amongst multiple vhosts on the same listen port. So the vhost you associate with this protocol must be alone on its own port. It's also possible to apply this or other role + protocols as a fallback after http[s] processing rejected the first packet from an incoming connection. See `./READMEs/README-http-fallback.md` ## Note for packet size For throughput, since often one side is localhost that can handle larger packets easily, you should create the context used with this plugin with ``` info.pt_serv_buf_size = 8192; ``` lwsws already does this. ## Using with C See the minimal example `./minimal-example/raw/minimal-raw-proxy` for a working example of a vhost that accepts connections and then proxies them using this plugin. The example is almost all boilerplate for setting up the context and the pvo. ## Using with lwsws For a usage where the plugin "owns" the whole vhost, you should enable the plugin protocol on the vhost as usual, and specify the "onward" pvo with: ``` "ws-protocols": [{ "raw-proxy": { "status": "ok", "onward": "ipv4:remote.address.com:port" } }], ``` and then define the vhost with: ``` "apply-listen-accept": "1", "listen-accept-role": "raw-proxy", "listen-accept-protocol": "raw-proxy" ``` which tells it to apply the role and protocol as soon as a connection is accepted on the vhost. libwebsockets-3.2.1/plugins/raw-proxy/protocol_lws_raw_proxy.c000066400000000000000000000343071357643561300250360ustar00rootroot00000000000000/* * libwebsockets - plugin for raw proxying * * Copyright (C) 2010-2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include #include #include #define RING_DEPTH 8 struct packet { void *payload; uint32_t len; uint32_t ticket; }; enum { ACC, ONW }; /* * Because both sides of the connection want to share this, we allocate it * during accepted adoption and both sides have a pss that is just a wrapper * pointing to this. * * The last one of the accepted side and the onward side to close frees it. * This removes any chance of one side or the other having an invalidated * pointer to the pss. */ struct conn { struct lws *wsi[2]; /* rings containing unsent rx from accepted and onward sides */ struct lws_ring *r[2]; uint32_t t[2]; /* ring tail */ uint32_t ticket_next; uint32_t ticket_retired; char rx_enabled[2]; char closed[2]; char established[2]; }; struct raw_pss { struct conn *conn; }; /* one of these is created for each vhost our protocol is used with */ struct raw_vhd { char addr[128]; uint16_t port; char ipv6; }; static void __destroy_packet(void *_pkt) { struct packet *pkt = _pkt; free(pkt->payload); pkt->payload = NULL; pkt->len = 0; } static void destroy_conn(struct raw_vhd *vhd, struct raw_pss *pss) { struct conn *conn = pss->conn; if (conn->r[ACC]) lws_ring_destroy(conn->r[ACC]); if (conn->r[ONW]) lws_ring_destroy(conn->r[ONW]); pss->conn = NULL; free(conn); } static int connect_client(struct raw_vhd *vhd, struct raw_pss *pss) { struct lws_client_connect_info i; char host[128]; struct lws *cwsi; lws_snprintf(host, sizeof(host), "%s:%u", vhd->addr, vhd->port); memset(&i, 0, sizeof(i)); i.method = "RAW"; i.context = lws_get_context(pss->conn->wsi[ACC]); i.port = vhd->port; i.address = vhd->addr; i.host = host; i.origin = host; i.ssl_connection = 0; i.vhost = lws_get_vhost(pss->conn->wsi[ACC]); i.local_protocol_name = "raw-proxy"; i.protocol = "raw-proxy"; i.path = "/"; /* * The "onward" client wsi has its own pss but shares the "conn" * created when the inbound connection was accepted. We need to stash * the address of the shared conn and apply it to the client psss * when the client connection completes. */ i.opaque_user_data = pss->conn; i.pwsi = &pss->conn->wsi[ONW]; lwsl_info("%s: onward: %s:%d%s\n", __func__, i.address, i.port, i.path); cwsi = lws_client_connect_via_info(&i); if (!cwsi) lwsl_err("%s: client connect failed early\n", __func__); return !cwsi; } static int flow_control(struct conn *conn, int side, int enable) { if (conn->closed[side] || enable == conn->rx_enabled[side] || !conn->established[side]) return 0; if (lws_rx_flow_control(conn->wsi[side], enable)) return 1; conn->rx_enabled[side] = enable; lwsl_info("%s: %s side: %s\n", __func__, side ? "ONW" : "ACC", enable ? "rx enabled" : "rx flow controlled"); return 0; } static int callback_raw_proxy(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct raw_pss *pss = (struct raw_pss *)user; struct raw_vhd *vhd = (struct raw_vhd *)lws_protocol_vh_priv_get( lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct packet *ppkt; struct conn *conn = NULL; struct lws_tokenize ts; lws_tokenize_elem e; struct packet pkt; const char *cp; int n; if (pss) conn = pss->conn; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct raw_vhd)); if (lws_pvo_get_str(in, "onward", &cp)) { lwsl_err("%s: vh %s: pvo 'onward' required\n", __func__, lws_get_vhost_name(lws_get_vhost(wsi))); return -1; } lws_tokenize_init(&ts, cp, LWS_TOKENIZE_F_DOT_NONTERM | LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_NO_FLOATS); ts.len = strlen(cp); if (lws_tokenize(&ts) != LWS_TOKZE_TOKEN) goto bad_onward; if (!strncmp(ts.token, "ipv6", ts.token_len)) vhd->ipv6 = 1; else if (strncmp(ts.token, "ipv4", ts.token_len)) goto bad_onward; /* then the colon */ if (lws_tokenize(&ts) != LWS_TOKZE_DELIMITER) goto bad_onward; e = lws_tokenize(&ts); if (!vhd->ipv6) { if (e != LWS_TOKZE_TOKEN || ts.token_len + 1 >= (int)sizeof(vhd->addr)) goto bad_onward; lws_strncpy(vhd->addr, ts.token, ts.token_len + 1); e = lws_tokenize(&ts); if (e == LWS_TOKZE_DELIMITER) { /* there should be a port then */ e = lws_tokenize(&ts); if (e != LWS_TOKZE_INTEGER) goto bad_onward; vhd->port = atoi(ts.token); e = lws_tokenize(&ts); } if (e != LWS_TOKZE_ENDED) goto bad_onward; } else lws_strncpy(vhd->addr, ts.token, sizeof(vhd->addr)); lwsl_notice("%s: vh %s: onward %s:%s:%d\n", __func__, lws_get_vhost_name(lws_get_vhost(wsi)), vhd->ipv6 ? "ipv6": "ipv4", vhd->addr, vhd->port); break; bad_onward: lwsl_err("%s: onward pvo format must be ipv4:addr[:port] " " or ipv6:addr, not '%s'\n", __func__, cp); return -1; case LWS_CALLBACK_PROTOCOL_DESTROY: break; /* callbacks related to client "onward side" */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); break; case LWS_CALLBACK_RAW_PROXY_CLI_ADOPT: lwsl_debug("LWS_CALLBACK_RAW_CLI_ADOPT: pss %p\n", pss); if (conn || !pss) break; conn = pss->conn = lws_get_opaque_user_data(wsi); conn->established[ONW] = 1; /* they start enabled */ conn->rx_enabled[ACC] = 1; conn->rx_enabled[ONW] = 1; /* he disabled his rx while waiting for use to be established */ flow_control(conn, ACC, 1); lws_callback_on_writable(wsi); lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); break; case LWS_CALLBACK_RAW_PROXY_CLI_CLOSE: lwsl_debug("LWS_CALLBACK_RAW_PROXY_CLI_CLOSE\n"); if (!conn) break; conn->closed[ONW] = 1; if (conn->closed[ACC]) destroy_conn(vhd, pss); break; case LWS_CALLBACK_RAW_PROXY_CLI_RX: lwsl_debug("LWS_CALLBACK_RAW_PROXY_CLI_RX: %d\n", (int)len); if (!conn) return 0; if (!pss || !conn->wsi[ACC] || conn->closed[ACC]) { lwsl_info(" pss %p, wsi[ACC] %p, closed[ACC] %d\n", pss, conn->wsi[ACC], conn->closed[ACC]); return -1; } pkt.payload = malloc(len); if (!pkt.payload) { lwsl_notice("OOM: dropping\n"); return -1; } pkt.len = len; pkt.ticket = conn->ticket_next++; memcpy(pkt.payload, in, len); if (!lws_ring_insert(conn->r[ONW], &pkt, 1)) { __destroy_packet(&pkt); lwsl_notice("dropping!\n"); return -1; } lwsl_debug("After onward RX: acc free: %d...\n", (int)lws_ring_get_count_free_elements(conn->r[ONW])); if (conn->rx_enabled[ONW] && lws_ring_get_count_free_elements(conn->r[ONW]) < 2) flow_control(conn, ONW, 0); if (!conn->closed[ACC]) lws_callback_on_writable(conn->wsi[ACC]); break; case LWS_CALLBACK_RAW_PROXY_CLI_WRITEABLE: lwsl_debug("LWS_CALLBACK_RAW_PROXY_CLI_WRITEABLE\n"); if (!conn) break; ppkt = lws_ring_get_element(conn->r[ACC], &conn->t[ACC]); if (!ppkt) { lwsl_info("%s: CLI_WRITABLE had nothing in acc ring\n", __func__); break; } if (ppkt->ticket != conn->ticket_retired + 1) { lwsl_info("%s: acc ring has %d but next %d\n", __func__, ppkt->ticket, conn->ticket_retired + 1); lws_callback_on_writable(conn->wsi[ACC]); break; } n = lws_write(wsi, ppkt->payload, ppkt->len, LWS_WRITE_RAW); if (n < 0) { lwsl_info("%s: WRITEABLE: %d\n", __func__, n); return -1; } conn->ticket_retired = ppkt->ticket; lws_ring_consume(conn->r[ACC], &conn->t[ACC], NULL, 1); lws_ring_update_oldest_tail(conn->r[ACC], conn->t[ACC]); lwsl_debug("acc free: %d...\n", (int)lws_ring_get_count_free_elements(conn->r[ACC])); if (!conn->rx_enabled[ACC] && lws_ring_get_count_free_elements(conn->r[ACC]) > 2) flow_control(conn, ACC, 1); ppkt = lws_ring_get_element(conn->r[ACC], &conn->t[ACC]); lwsl_debug("%s: CLI_WRITABLE: next acc pkt %p idx %d vs %d\n", __func__, ppkt, ppkt ? ppkt->ticket : 0, conn->ticket_retired + 1); if (ppkt && ppkt->ticket == conn->ticket_retired + 1) lws_callback_on_writable(wsi); else { /* * defer checking for accepted side closing until we * sent everything in the ring to onward */ if (conn->closed[ACC]) /* * there is never going to be any more... but * we may have some tx still in tx buflist / * partial */ return lws_raw_transaction_completed(wsi); if (lws_ring_get_element(conn->r[ONW], &conn->t[ONW])) lws_callback_on_writable(conn->wsi[ACC]); } break; /* callbacks related to raw socket descriptor "accepted side" */ case LWS_CALLBACK_RAW_PROXY_SRV_ADOPT: lwsl_debug("LWS_CALLBACK_RAW_SRV_ADOPT\n"); if (!pss) return -1; conn = pss->conn = malloc(sizeof(struct conn)); if (!pss->conn) return -1; memset(conn, 0, sizeof(*conn)); conn->wsi[ACC] = wsi; conn->ticket_next = 1; conn->r[ACC] = lws_ring_create(sizeof(struct packet), RING_DEPTH, __destroy_packet); if (!conn->r[ACC]) { lwsl_err("%s: OOM\n", __func__); return -1; } conn->r[ONW] = lws_ring_create(sizeof(struct packet), RING_DEPTH, __destroy_packet); if (!conn->r[ONW]) { lws_ring_destroy(conn->r[ACC]); conn->r[ACC] = NULL; lwsl_err("%s: OOM\n", __func__); return -1; } conn->established[ACC] = 1; /* disable any rx until the client side is up */ flow_control(conn, ACC, 0); lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); /* try to create the onward client connection */ connect_client(vhd, pss); break; case LWS_CALLBACK_RAW_PROXY_SRV_CLOSE: lwsl_debug("LWS_CALLBACK_RAW_PROXY_SRV_CLOSE:\n"); if (!conn) break; conn->closed[ACC] = 1; if (conn->closed[ONW]) destroy_conn(vhd, pss); break; case LWS_CALLBACK_RAW_PROXY_SRV_RX: lwsl_debug("LWS_CALLBACK_RAW_PROXY_SRV_RX: rx %d\n", (int)len); if (!conn || !conn->wsi[ONW]) { lwsl_err("%s: LWS_CALLBACK_RAW_PROXY_SRV_RX: " "conn->wsi[ONW] NULL\n", __func__); return -1; } if (conn->closed[ONW]) { lwsl_info(" closed[ONW] %d\n", conn->closed[ONW]); return -1; } pkt.payload = malloc(len); if (!pkt.payload) { lwsl_notice("OOM: dropping\n"); return -1; } pkt.len = len; pkt.ticket = conn->ticket_next++; memcpy(pkt.payload, in, len); if (!lws_ring_insert(conn->r[ACC], &pkt, 1)) { __destroy_packet(&pkt); lwsl_notice("dropping!\n"); return -1; } lwsl_debug("After acc RX: acc free: %d...\n", (int)lws_ring_get_count_free_elements(conn->r[ACC])); if (conn->rx_enabled[ACC] && lws_ring_get_count_free_elements(conn->r[ACC]) <= 2) flow_control(conn, ACC, 0); if (conn->established[ONW] && !conn->closed[ONW]) lws_callback_on_writable(conn->wsi[ONW]); break; case LWS_CALLBACK_RAW_PROXY_SRV_WRITEABLE: lwsl_debug("LWS_CALLBACK_RAW_PROXY_SRV_WRITEABLE\n"); if (!conn || !conn->established[ONW] || conn->closed[ONW]) break; ppkt = lws_ring_get_element(conn->r[ONW], &conn->t[ONW]); if (!ppkt) { lwsl_info("%s: SRV_WRITABLE nothing in onw ring\n", __func__); break; } if (ppkt->ticket != conn->ticket_retired + 1) { lwsl_info("%s: onw ring has %d but next %d\n", __func__, ppkt->ticket, conn->ticket_retired + 1); lws_callback_on_writable(conn->wsi[ONW]); break; } n = lws_write(wsi, ppkt->payload, ppkt->len, LWS_WRITE_RAW); if (n < 0) { lwsl_info("%s: WRITEABLE: %d\n", __func__, n); return -1; } conn->ticket_retired = ppkt->ticket; lws_ring_consume(conn->r[ONW], &conn->t[ONW], NULL, 1); lws_ring_update_oldest_tail(conn->r[ONW], conn->t[ONW]); lwsl_debug("onward free: %d... waiting %d\n", (int)lws_ring_get_count_free_elements(conn->r[ONW]), (int)lws_ring_get_count_waiting_elements(conn->r[ONW], &conn->t[ONW])); if (!conn->rx_enabled[ONW] && lws_ring_get_count_free_elements(conn->r[ONW]) > 2) flow_control(conn, ONW, 1); ppkt = lws_ring_get_element(conn->r[ONW], &conn->t[ONW]); lwsl_debug("%s: SRV_WRITABLE: next onw pkt %p idx %d vs %d\n", __func__, ppkt, ppkt ? ppkt->ticket : 0, conn->ticket_retired + 1); if (ppkt && ppkt->ticket == conn->ticket_retired + 1) lws_callback_on_writable(wsi); else { /* * defer checking for onward side closing until we * sent everything in the ring to accepted side */ if (conn->closed[ONW]) /* * there is never going to be any more... but * we may have some tx still in tx buflist / * partial */ return lws_raw_transaction_completed(wsi); if (lws_ring_get_element(conn->r[ACC], &conn->t[ACC])) lws_callback_on_writable(conn->wsi[ONW]); } break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } #define LWS_PLUGIN_PROTOCOL_RAW_PROXY { \ "raw-proxy", \ callback_raw_proxy, \ sizeof(struct raw_pss), \ 8192, \ 8192, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_RAW_PROXY }; LWS_EXTERN LWS_VISIBLE int init_protocol_lws_raw_proxy(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_lws_raw_proxy(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/plugins/server-status.css000066400000000000000000000104041357643561300214130ustar00rootroot00000000000000 span.title { font-size:18pt; font-family: Arial; font-weight:normal; text-align:center; color:#000000; } span.mount { font-size:10pt; font-family: Arial; font-weight:normal; text-align:center; color:#000000; } span.mountname { font-size:14pt; font-family: Arial; font-weight:bold; text-align:center; color:#404010; } span.n { font-size:12pt; font-family: Arial; font-weight:normal; text-align:center; color:#808020; } span.sn { font-size:12pt; font-family: Arial; font-weight:bold; text-align:center; color:#808020; } span.v { font-size:12pt; font-family: Arial; font-weight:bold; text-align:center; color:#202020; } span.m1 { font-size:12pt; font-family: Arial; font-weight:bold; text-align:center; color:#202020; } span.m2 { font-size:12pt; font-family: Arial; font-weight:normal; text-align:center; color:#202020; } .browser { font-size:12pt; font-family: Arial; font-weight:normal; text-align:center; color:#ffff00; vertical-align:middle; text-align:center; background:#d0b070; padding:12px; -webkit-border-radius:10px; border-radius:10px;} .group2 { vertical-align:middle; text-align:center; background:#f0f0e0; padding:12px; -webkit-border-radius:10px; border-radius:10px; } .explain { vertical-align:middle; text-align:center; background:#f0f0c0; padding:12px; -webkit-border-radius:10px; border-radius:10px; color:#404000; padding:3px; } td.wsstatus { vertical-align:middle; width:200px; height:50px; text-align:center; background:#f0f0c0; padding:6px; -webkit-border-radius:8px; border-radius:8px; color:#404000; } .tdform { vertical-align:middle; width:200px; height:50px; text-align:center; background:#f0f0d0; padding:6px; -webkit-border-radius:8px; margin:10px; border-radius:8px; border: 1px solid black; border-collapse: collapse;font-size:18pt; font-family: Arial; font-weight:normal; text-align:center; color:#000000; color:#404000; } td.l { vertical-align:middle; text-align:center; background:#d0d0b0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.bigger { font-size:120%; } div.bgw { background:white } div.conninfo { border: solid 2px #e0d040; padding: 4px; width: 500px; height:350px; overflow: auto; } span.f12 { font-size:12pt } .content { vertical-align:top; text-align:center; background:#fffff0; padding:12px; -webkit-border-radius:10px; border-radius:10px; } .canvas { vertical-align:top; text-align:center; background:#efefd0; padding:12px; -webkit-border-radius:10px; border-radius:10px; } .tabs { position: relative; min-height: 750px; /* This part sucks */ clear: both; margin: 25px 0; } .tab { float: left; } .tab label { background: #eee; padding: 10px; border: 1px solid #ccc; margin-left: -1px; position: relative; left: 1px; } .tab [type=radio] { display: none; } .content { position: absolute; top: 28px; left: 0; background: white; right: 0; bottom: 0; padding: 20px; border: 1px solid #ccc; } [type=radio]:checked ~ label { background: white; border-bottom: 1px solid white; z-index: 2; } [type=radio]:checked ~ label ~ .content { z-index: 1; } td.wsstatus { vertical-align:middle; width:200px; height:50px; text-align:center; background:#f0f0c0; padding:6px; -webkit-border-radius:8px; border-radius:8px; color:#404000; } td.l { vertical-align:middle; text-align:center; background:#d0d0b0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.dl { vertical-align:middle; text-align:center; background:#c0c0c0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.c { vertical-align:middle; text-align:center; background:#c0c0a0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.c0 { vertical-align:middle; text-align:center; background:#b0b090; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.dc0 { vertical-align:middle; text-align:center; background:#a0a0a0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.c1 { vertical-align:middle; text-align:center; background:#c0c0c0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.t { vertical-align:middle; text-align:center; background:#e0e0c0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } libwebsockets-3.2.1/plugins/server-status.html000066400000000000000000000011271357643561300215710ustar00rootroot00000000000000 LWS Server Status
Server status
...
libwebsockets-3.2.1/plugins/server-status.js000066400000000000000000000224231357643561300212430ustar00rootroot00000000000000(function() { /* * We display untrusted stuff in html context... reject anything * that has HTML stuff in it */ function san(s) { if (s.search("<") !== -1) return "invalid string"; return s; } function humanize(s) { var i = parseInt(s, 10); if (i >= (1024 * 1024 * 1024)) return (i / (1024 * 1024 * 1024)).toFixed(3) + "Gi"; if (i >= (1024 * 1024)) return (i / (1024 * 1024)).toFixed(3) + "Mi"; if (i > 1024) return (i / 1024).toFixed(3) + "Ki"; return s; } var pos = 0; function get_appropriate_ws_url() { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/xxx"; } var socket_status, jso, s; function ws_open_server_status() { socket_status = new WebSocket(get_appropriate_ws_url(), "lws-server-status"); try { socket_status.onopen = function() { document.getElementById("title").innerHTML = "Server Status (Active)"; lws_gray_out(false); }; socket_status.onmessage =function got_packet(msg) { var u, ci, n; //document.getElementById("json").innerHTML = "
"+msg.data+"
"; if (msg.data.length < 100) return; jso = JSON.parse(msg.data); u = parseInt(san(jso.i.uptime), 10); if (parseInt(jso.i.contexts[0].deprecated, 10) === 0) s = "
"; else s = ""; for (ci = 0; ci < jso.i.contexts.length; ci++) { if (parseInt(jso.i.contexts[ci].deprecated, 10) === 0) s += ""; } // context s = s + "
"; s += "Server" + "Server Version: " + san(jso.i.version) + "
" + "Host Uptime: " + ((u / (24 * 3600)) | 0) + "d " + (((u % (24 * 3600)) / 3600) | 0) + "h " + (((u % 3600) / 60) | 0) + "m"; if (jso.i.l1) s = s + ", Host Load: " + san(jso.i.l1) + " "; if (jso.i.l2) s = s + san(jso.i.l2) + " "; if (jso.i.l3) s = s + san(jso.i.l3); if (jso.i.l1) s =s + ""; if (jso.i.statm) { var sm = jso.i.statm.split(" "); s += ", Virt stack + heap Usage: " + humanize(parseInt(sm[5], 10) * 4096) + "B"; } s += ", lws heap usage: " + humanize(jso.i.heap) + "B"; for (n = 0; n < jso.files.length; n++) { s += "
" + san(jso.files[n].path) + ":
" + san(jso.files[n].val); } s += "
" + "Active Context"; else s += "
" + "Deprecated Context " + ci + ""; u = parseInt(san(jso.i.contexts[ci].context_uptime), 10); s += "Server Uptime: " + ((u / (24 * 3600)) | 0) + "d " + (((u % (24 * 3600)) / 3600) | 0) + "h " + (((u % 3600) / 60) | 0) + "m"; s = s + "
" + "Listening wsi: " + san(jso.i.contexts[ci].listen_wsi) + ", " + "Current wsi alive: " + (parseInt(san(jso.i.contexts[ci].wsi_alive), 10) - parseInt(san(jso.i.contexts[ci].listen_wsi), 10)) + "
" + "Total Rx: " + humanize(san(jso.i.contexts[ci].rx)) +"B, " + "Total Tx: " + humanize(san(jso.i.contexts[ci].tx)) +"B
" + "CONNECTIONS: HTTP/1.x: " + san(jso.i.contexts[ci].h1_conn) +", " + "Websocket: " + san(jso.i.contexts[ci].ws_upg) +", " + "H2 upgrade: " + san(jso.i.contexts[ci].h2_upg) +", " + "H2 ALPN: " + san(jso.i.contexts[ci].h2_alpn) +", " + "Rejected: " + san(jso.i.contexts[ci].rejected) +"
" + "TRANSACTIONS: HTTP/1.x: " + san(jso.i.contexts[ci].h1_trans) + ", " + "H2: " + san(jso.i.contexts[ci].h2_trans) +", " + "Total H2 substreams: " + san(jso.i.contexts[ci].h2_subs) +"
" + "CGI: alive: " + san(jso.i.contexts[ci].cgi_alive) + ", " + "spawned: " + san(jso.i.contexts[ci].cgi_spawned) + ""; for (n = 0; n < jso.i.contexts[ci].pt.length; n++) { if (parseInt(jso.i.contexts[ci].deprecated, 10) === 0) s += ""; } for (n = 0; n < jso.i.contexts[ci].vhosts.length; n++) { if (parseInt(jso.i.contexts[ci].deprecated, 10) === 0) s += ""; } s += "
  service thread " + (n + 1); else s += "
  service thread " + (n + 1); s += "" + "fds: " + san(jso.i.contexts[ci].pt[n].fds_count) + " / " + san(jso.i.contexts[ci].pt_fd_max) + ", "; s = s + "ah pool: " + san(jso.i.contexts[ci].pt[n].ah_pool_inuse) + " / " + san(jso.i.contexts[ci].ah_pool_max) + ", " + "ah waiting list: " + san(jso.i.contexts[ci].pt[n].ah_wait_list); s = s + "
  vhost " + (n + 1); else s += "
  vhost " + (n + 1); s += ""; if (jso.i.contexts[ci].vhosts[n].use_ssl === "1") s = s + "https://"; else s = s + "http://"; s = s + san(jso.i.contexts[ci].vhosts[n].name) + ":" + san(jso.i.contexts[ci].vhosts[n].port) + ""; if (jso.i.contexts[ci].vhosts[n].sts === "1") s = s + " (STS)"; s = s +"
" + "Total Rx: " + humanize(san(jso.i.contexts[ci].vhosts[n].rx)) +"B, " + "Total Tx: " + humanize(san(jso.i.contexts[ci].vhosts[n].tx)) +"B
" + "CONNECTIONS: HTTP/1.x: " + san(jso.i.contexts[ci].vhosts[n].h1_conn) +", " + "Websocket: " + san(jso.i.contexts[ci].vhosts[n].ws_upg) +", " + "H2 upgrade: " + san(jso.i.contexts[ci].vhosts[n].h2_upg) +", " + "H2 ALPN: " + san(jso.i.contexts[ci].vhosts[n].h2_alpn) +", " + "Rejected: " + san(jso.i.contexts[ci].vhosts[n].rejected) +"
" + "TRANSACTIONS: HTTP/1.x: " + san(jso.i.contexts[ci].vhosts[n].h1_trans) + ", " + "H2: " + san(jso.i.contexts[ci].vhosts[n].h2_trans) +", " + "Total H2 substreams: " + san(jso.i.contexts[ci].vhosts[n].h2_subs) +"
"; if (jso.i.contexts[ci].vhosts[n].mounts) { s = s + ""; var m; for (m = 0; m < jso.i.contexts[ci].vhosts[n].mounts.length; m++) { s = s + ""; } s = s + "
MountpointOriginCache Policy
"; s = s + "" + san(jso.i.contexts[ci].vhosts[n].mounts[m].mountpoint) + "" + san(jso.i.contexts[ci].vhosts[n].mounts[m].origin) + ""; if (parseInt(san(jso.i.contexts[ci].vhosts[n].mounts[m].cache_max_age), 10)) s = s + "max-age: " + san(jso.i.contexts[ci].vhosts[n].mounts[m].cache_max_age) + ", reuse: " + san(jso.i.contexts[ci].vhosts[n].mounts[m].cache_reuse) + ", reval: " + san(jso.i.contexts[ci].vhosts[n].mounts[m].cache_revalidate) + ", inter: " + san(jso.i.contexts[ci].vhosts[n].mounts[m].cache_intermediaries); s = s + "
"; } s = s + "
"; document.getElementById("conninfo").innerHTML = s; }; socket_status.onclose = function(){ document.getElementById("title").innerHTML = "Server Status (Disconnected)"; lws_gray_out(true,{"zindex":"499"}); }; } catch(exception) { alert("

Error" + exception); } } /* stuff that has to be delayed until all the page assets are loaded */ window.addEventListener("load", function() { lws_gray_out(true,{"zindex":"499"}); ws_open_server_status(); }, false); }()); libwebsockets-3.2.1/plugins/ssh-base/000077500000000000000000000000001357643561300175605ustar00rootroot00000000000000libwebsockets-3.2.1/plugins/ssh-base/crypto/000077500000000000000000000000001357643561300211005ustar00rootroot00000000000000libwebsockets-3.2.1/plugins/ssh-base/crypto/chacha.c000066400000000000000000000232371357643561300224620ustar00rootroot00000000000000/* chacha-merged.c version 20080118 D. J. Bernstein Public domain. */ #include #include "lws-ssh.h" #include #include struct chacha_ctx { u_int input[16]; }; #define CHACHA_MINKEYLEN 16 #define CHACHA_NONCELEN 8 #define CHACHA_CTRLEN 8 #define CHACHA_STATELEN (CHACHA_NONCELEN+CHACHA_CTRLEN) #define CHACHA_BLOCKLEN 64 typedef unsigned char u8; typedef unsigned int u32; typedef struct chacha_ctx chacha_ctx; #define U8C(v) (v##U) #define U32C(v) (v##U) #define U8V(v) ((u8)(v) & U8C(0xFF)) #define U32V(v) ((u32)(v) & U32C(0xFFFFFFFF)) #define ROTL32(v, n) \ (U32V((v) << (n)) | ((v) >> (32 - (n)))) #define U8TO32_LITTLE(p) \ (((u32)((p)[0]) ) | \ ((u32)((p)[1]) << 8) | \ ((u32)((p)[2]) << 16) | \ ((u32)((p)[3]) << 24)) #define U32TO8_LITTLE(p, v) \ do { \ (p)[0] = U8V((v) ); \ (p)[1] = U8V((v) >> 8); \ (p)[2] = U8V((v) >> 16); \ (p)[3] = U8V((v) >> 24); \ } while (0) #define ROTATE(v,c) (ROTL32(v,c)) #define XOR(v,w) ((v) ^ (w)) #define PLUS(v,w) (U32V((v) + (w))) #define PLUSONE(v) (PLUS((v),1)) #define QUARTERROUND(a,b,c,d) \ a = PLUS(a,b); d = ROTATE(XOR(d,a),16); \ c = PLUS(c,d); b = ROTATE(XOR(b,c),12); \ a = PLUS(a,b); d = ROTATE(XOR(d,a), 8); \ c = PLUS(c,d); b = ROTATE(XOR(b,c), 7); static const char sigma[16] = "expand 32-byte k"; static const char tau[16] = "expand 16-byte k"; void chacha_keysetup(chacha_ctx *x,const u8 *k,u32 kbits) { const char *constants; x->input[4] = U8TO32_LITTLE(k + 0); x->input[5] = U8TO32_LITTLE(k + 4); x->input[6] = U8TO32_LITTLE(k + 8); x->input[7] = U8TO32_LITTLE(k + 12); if (kbits == 256) { /* recommended */ k += 16; constants = sigma; } else { /* kbits == 128 */ constants = tau; } x->input[8] = U8TO32_LITTLE(k + 0); x->input[9] = U8TO32_LITTLE(k + 4); x->input[10] = U8TO32_LITTLE(k + 8); x->input[11] = U8TO32_LITTLE(k + 12); x->input[0] = U8TO32_LITTLE(constants + 0); x->input[1] = U8TO32_LITTLE(constants + 4); x->input[2] = U8TO32_LITTLE(constants + 8); x->input[3] = U8TO32_LITTLE(constants + 12); } void chacha_ivsetup(chacha_ctx *x, const u8 *iv, const u8 *counter) { x->input[12] = counter == NULL ? 0 : U8TO32_LITTLE(counter + 0); x->input[13] = counter == NULL ? 0 : U8TO32_LITTLE(counter + 4); x->input[14] = U8TO32_LITTLE(iv + 0); x->input[15] = U8TO32_LITTLE(iv + 4); } void chacha_encrypt_bytes(chacha_ctx *x,const u8 *m,u8 *c,u32 bytes) { u32 x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15; u32 j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15; u8 *ctarget = NULL; u8 tmp[64]; u_int i; if (!bytes) return; j0 = x->input[0]; j1 = x->input[1]; j2 = x->input[2]; j3 = x->input[3]; j4 = x->input[4]; j5 = x->input[5]; j6 = x->input[6]; j7 = x->input[7]; j8 = x->input[8]; j9 = x->input[9]; j10 = x->input[10]; j11 = x->input[11]; j12 = x->input[12]; j13 = x->input[13]; j14 = x->input[14]; j15 = x->input[15]; for (;;) { if (bytes < 64) { for (i = 0;i < bytes;++i) tmp[i] = m[i]; m = tmp; ctarget = c; c = tmp; } x0 = j0; x1 = j1; x2 = j2; x3 = j3; x4 = j4; x5 = j5; x6 = j6; x7 = j7; x8 = j8; x9 = j9; x10 = j10; x11 = j11; x12 = j12; x13 = j13; x14 = j14; x15 = j15; for (i = 20;i > 0;i -= 2) { QUARTERROUND( x0, x4, x8,x12) QUARTERROUND( x1, x5, x9,x13) QUARTERROUND( x2, x6,x10,x14) QUARTERROUND( x3, x7,x11,x15) QUARTERROUND( x0, x5,x10,x15) QUARTERROUND( x1, x6,x11,x12) QUARTERROUND( x2, x7, x8,x13) QUARTERROUND( x3, x4, x9,x14) } x0 = PLUS(x0,j0); x1 = PLUS(x1,j1); x2 = PLUS(x2,j2); x3 = PLUS(x3,j3); x4 = PLUS(x4,j4); x5 = PLUS(x5,j5); x6 = PLUS(x6,j6); x7 = PLUS(x7,j7); x8 = PLUS(x8,j8); x9 = PLUS(x9,j9); x10 = PLUS(x10,j10); x11 = PLUS(x11,j11); x12 = PLUS(x12,j12); x13 = PLUS(x13,j13); x14 = PLUS(x14,j14); x15 = PLUS(x15,j15); x0 = XOR(x0,U8TO32_LITTLE(m + 0)); x1 = XOR(x1,U8TO32_LITTLE(m + 4)); x2 = XOR(x2,U8TO32_LITTLE(m + 8)); x3 = XOR(x3,U8TO32_LITTLE(m + 12)); x4 = XOR(x4,U8TO32_LITTLE(m + 16)); x5 = XOR(x5,U8TO32_LITTLE(m + 20)); x6 = XOR(x6,U8TO32_LITTLE(m + 24)); x7 = XOR(x7,U8TO32_LITTLE(m + 28)); x8 = XOR(x8,U8TO32_LITTLE(m + 32)); x9 = XOR(x9,U8TO32_LITTLE(m + 36)); x10 = XOR(x10,U8TO32_LITTLE(m + 40)); x11 = XOR(x11,U8TO32_LITTLE(m + 44)); x12 = XOR(x12,U8TO32_LITTLE(m + 48)); x13 = XOR(x13,U8TO32_LITTLE(m + 52)); x14 = XOR(x14,U8TO32_LITTLE(m + 56)); x15 = XOR(x15,U8TO32_LITTLE(m + 60)); j12 = PLUSONE(j12); if (!j12) j13 = PLUSONE(j13); /* stopping at 2^70 bytes per nonce is user's responsibility */ U32TO8_LITTLE(c + 0,x0); U32TO8_LITTLE(c + 4,x1); U32TO8_LITTLE(c + 8,x2); U32TO8_LITTLE(c + 12,x3); U32TO8_LITTLE(c + 16,x4); U32TO8_LITTLE(c + 20,x5); U32TO8_LITTLE(c + 24,x6); U32TO8_LITTLE(c + 28,x7); U32TO8_LITTLE(c + 32,x8); U32TO8_LITTLE(c + 36,x9); U32TO8_LITTLE(c + 40,x10); U32TO8_LITTLE(c + 44,x11); U32TO8_LITTLE(c + 48,x12); U32TO8_LITTLE(c + 52,x13); U32TO8_LITTLE(c + 56,x14); U32TO8_LITTLE(c + 60,x15); if (bytes <= 64) { if (bytes < 64) { for (i = 0;i < bytes;++i) ctarget[i] = c[i]; } x->input[12] = j12; x->input[13] = j13; return; } bytes -= 64; c += 64; m += 64; } } struct lws_cipher_chacha { struct chacha_ctx ccctx[2]; }; #define K_1(_keys) &((struct lws_cipher_chacha *)_keys->cipher)->ccctx[0] #define K_2(_keys) &((struct lws_cipher_chacha *)_keys->cipher)->ccctx[1] int lws_chacha_activate(struct lws_ssh_keys *keys) { if (keys->cipher) { free(keys->cipher); keys->cipher = NULL; } keys->cipher = malloc(sizeof(struct lws_cipher_chacha)); if (!keys->cipher) return 1; memset(keys->cipher, 0, sizeof(struct lws_cipher_chacha)); /* uses 2 x 256-bit keys, so 512 bits (64 bytes) needed */ chacha_keysetup(K_2(keys), keys->key[SSH_KEYIDX_ENC], 256); chacha_keysetup(K_1(keys), &keys->key[SSH_KEYIDX_ENC][32], 256); keys->valid = 1; keys->full_length = 1; keys->padding_alignment = 8; // CHACHA_BLOCKLEN; keys->MAC_length = POLY1305_TAGLEN; return 0; } void lws_chacha_destroy(struct lws_ssh_keys *keys) { if (keys->cipher) { free(keys->cipher); keys->cipher = NULL; } } uint32_t lws_chachapoly_get_length(struct lws_ssh_keys *keys, uint32_t seq, const uint8_t *in4) { uint8_t buf[4], seqbuf[8]; /* * When receiving a packet, the length must be decrypted first. When 4 * bytes of ciphertext length have been received, they may be decrypted * using the K_1 key, a nonce consisting of the packet sequence number * encoded as a uint64 under the usual SSH wire encoding and a zero * block counter to obtain the plaintext length. */ POKE_U64(seqbuf, seq); chacha_ivsetup(K_1(keys), seqbuf, NULL); chacha_encrypt_bytes(K_1(keys), in4, buf, 4); return PEEK_U32(buf); } /* * chachapoly_crypt() operates as following: * En/decrypt with header key 'aadlen' bytes from 'src', storing result * to 'dest'. The ciphertext here is treated as additional authenticated * data for MAC calculation. * En/decrypt 'len' bytes at offset 'aadlen' from 'src' to 'dest'. Use * POLY1305_TAGLEN bytes at offset 'len'+'aadlen' as the authentication * tag. This tag is written on encryption and verified on decryption. */ int chachapoly_crypt(struct lws_ssh_keys *keys, u_int seqnr, u_char *dest, const u_char *src, u_int len, u_int aadlen, u_int authlen, int do_encrypt) { u_char seqbuf[8]; const u_char one[8] = { 1, 0, 0, 0, 0, 0, 0, 0 }; /* NB little-endian */ u_char expected_tag[POLY1305_TAGLEN], poly_key[POLY1305_KEYLEN]; int r = 1; /* * Run ChaCha20 once to generate the Poly1305 key. The IV is the * packet sequence number. */ memset(poly_key, 0, sizeof(poly_key)); POKE_U64(seqbuf, seqnr); chacha_ivsetup(K_2(keys), seqbuf, NULL); chacha_encrypt_bytes(K_2(keys), poly_key, poly_key, sizeof(poly_key)); /* If decrypting, check tag before anything else */ if (!do_encrypt) { const u_char *tag = src + aadlen + len; poly1305_auth(expected_tag, src, aadlen + len, poly_key); if (lws_timingsafe_bcmp(expected_tag, tag, POLY1305_TAGLEN)) { r = 2; goto out; } } /* Crypt additional data */ if (aadlen) { chacha_ivsetup(K_1(keys), seqbuf, NULL); chacha_encrypt_bytes(K_1(keys), src, dest, aadlen); } /* Set Chacha's block counter to 1 */ chacha_ivsetup(K_2(keys), seqbuf, one); chacha_encrypt_bytes(K_2(keys), src + aadlen, dest + aadlen, len); /* If encrypting, calculate and append tag */ if (do_encrypt) { poly1305_auth(dest + aadlen + len, dest, aadlen + len, poly_key); } r = 0; out: lws_explicit_bzero(expected_tag, sizeof(expected_tag)); lws_explicit_bzero(seqbuf, sizeof(seqbuf)); lws_explicit_bzero(poly_key, sizeof(poly_key)); return r; } int lws_chacha_decrypt(struct lws_ssh_keys *keys, uint32_t seq, const uint8_t *ct, uint32_t len, uint8_t *pt) { return chachapoly_crypt(keys, seq, pt, ct, len - POLY1305_TAGLEN - 4, 4, POLY1305_TAGLEN, 0); } int lws_chacha_encrypt(struct lws_ssh_keys *keys, uint32_t seq, const uint8_t *ct, uint32_t len, uint8_t *pt) { return chachapoly_crypt(keys, seq, pt, ct, len - 4, 4, 0, 1); } libwebsockets-3.2.1/plugins/ssh-base/crypto/ed25519.c000066400000000000000000000102161357643561300222420ustar00rootroot00000000000000/* $OpenBSD: ed25519.c,v 1.3 2013/12/09 11:03:45 markus Exp $ */ /* * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, * Peter Schwabe, Bo-Yin Yang. * Copied from supercop-20130419/crypto_sign/ed25519/ref/ed25519.c * * Modified to use lws genhash by Andy Green */ #include #include #include "ge25519.h" int crypto_hash_sha512(uint8_t *hash64, const uint8_t *data, size_t len) { struct lws_genhash_ctx ctx; int ret; if (lws_genhash_init(&ctx, LWS_GENHASH_TYPE_SHA512)) { lwsl_notice("Failed to init SHA512\n"); return 0; } ret = lws_genhash_update(&ctx, data, len); if (lws_genhash_destroy(&ctx, hash64)) lwsl_notice("genhash destroy failed\n"); return ret ? 0 : 64; } static void get_hram(unsigned char *hram, const unsigned char *sm, const unsigned char *pk, unsigned char *playground, size_t smlen) { unsigned long long i; for (i = 0; i < 32; ++i) playground[i] = sm[i]; for (i = 32; i < 64; ++i) playground[i] = pk[i-32]; for (i = 64; i < smlen; ++i) playground[i] = sm[i]; crypto_hash_sha512(hram, playground, smlen); } int crypto_sign_ed25519_keypair( struct lws_context *context, unsigned char *pk, unsigned char *sk ) { sc25519 scsk; ge25519 gepk; unsigned char extsk[64]; int i; lws_get_random(context, sk, 32); crypto_hash_sha512(extsk, sk, 32); extsk[0] &= 248; extsk[31] &= 127; extsk[31] |= 64; sc25519_from32bytes(&scsk,extsk); ge25519_scalarmult_base(&gepk, &scsk); ge25519_pack(pk, &gepk); for(i=0;i<32;i++) sk[32 + i] = pk[i]; return 0; } int crypto_sign_ed25519( unsigned char *sm, unsigned long long *smlen, const unsigned char *m, size_t mlen, const unsigned char *sk ) { sc25519 sck, scs, scsk; ge25519 ger; unsigned char r[32]; unsigned char s[32]; unsigned char extsk[64]; unsigned long long i; unsigned char hmg[crypto_hash_sha512_BYTES]; unsigned char hram[crypto_hash_sha512_BYTES]; crypto_hash_sha512(extsk, sk, 32); extsk[0] &= 248; extsk[31] &= 127; extsk[31] |= 64; *smlen = mlen+64; for(i=0;i> 8)) - 1; } int crypto_sign_ed25519_open( unsigned char *m,unsigned long long *mlen, const unsigned char *sm,unsigned long long smlen, const unsigned char *pk ) { unsigned int i; int ret; unsigned char t2[32]; ge25519 get1, get2; sc25519 schram, scs; unsigned char hram[crypto_hash_sha512_BYTES]; *mlen = (unsigned long long) -1; if (smlen < 64) { lwsl_notice("a\n"); return -1; } if (ge25519_unpackneg_vartime(&get1, pk)) { lwsl_notice("b\n"); return -1; } get_hram(hram,sm,pk,m, (size_t)smlen); sc25519_from64bytes(&schram, hram); sc25519_from32bytes(&scs, sm+32); ge25519_double_scalarmult_vartime(&get2, &get1, &schram, &ge25519_base, &scs); ge25519_pack(t2, &get2); ret = crypto_verify_32(sm, t2); lwsl_notice("vf says %d\n", ret); if (!ret) { for(i=0;i>= 31; /* 1: yes; 0: no */ return x; } static uint32_t ge(uint32_t a,uint32_t b) /* 16-bit inputs */ { unsigned int x = a; x -= (unsigned int) b; /* 0..65535: yes; 4294901761..4294967295: no */ x >>= 31; /* 0: yes; 1: no */ x ^= 1; /* 1: yes; 0: no */ return x; } static uint32_t times19(uint32_t a) { return (a << 4) + (a << 1) + a; } static uint32_t times38(uint32_t a) { return (a << 5) + (a << 2) + (a << 1); } static void fe_reduce_add_sub(fe25519 *r) { uint32_t t; int i,rep; for(rep=0;rep<4;rep++) { t = r->v[31] >> 7; r->v[31] &= 127; t = times19(t); r->v[0] += t; for(i=0;i<31;i++) { t = r->v[i] >> 8; r->v[i+1] += t; r->v[i] &= 255; } } } static void reduce_mul(fe25519 *r) { uint32_t t; int i,rep; for(rep=0;rep<2;rep++) { t = r->v[31] >> 7; r->v[31] &= 127; t = times19(t); r->v[0] += t; for(i=0;i<31;i++) { t = r->v[i] >> 8; r->v[i+1] += t; r->v[i] &= 255; } } } /* reduction modulo 2^255-19 */ void fe25519_freeze(fe25519 *r) { int i; uint32_t m = fe_equal(r->v[31],127); for(i=30;i>0;i--) m &= fe_equal(r->v[i],255); m &= ge(r->v[0],237); m = -(int32_t)m; r->v[31] -= m&127; for(i=30;i>0;i--) r->v[i] -= m&255; r->v[0] -= m&237; } void fe25519_unpack(fe25519 *r, const unsigned char x[32]) { int i; for(i=0;i<32;i++) r->v[i] = x[i]; r->v[31] &= 127; } /* Assumes input x being reduced below 2^255 */ void fe25519_pack(unsigned char r[32], const fe25519 *x) { int i; fe25519 y = *x; fe25519_freeze(&y); for(i=0;i<32;i++) r[i] = y.v[i]; } int fe25519_iszero(const fe25519 *x) { int i; int r; fe25519 t = *x; fe25519_freeze(&t); r = fe_equal(t.v[0],0); for(i=1;i<32;i++) r &= fe_equal(t.v[i],0); return r; } int fe25519_iseq_vartime(const fe25519 *x, const fe25519 *y) { int i; fe25519 t1 = *x; fe25519 t2 = *y; fe25519_freeze(&t1); fe25519_freeze(&t2); for(i=0;i<32;i++) if(t1.v[i] != t2.v[i]) return 0; return 1; } void fe25519_cmov(fe25519 *r, const fe25519 *x, unsigned char b) { int i; uint32_t mask = b; mask = -(int32_t)mask; for(i=0;i<32;i++) r->v[i] ^= mask & (x->v[i] ^ r->v[i]); } unsigned char fe25519_getparity(const fe25519 *x) { fe25519 t = *x; fe25519_freeze(&t); return (unsigned char)(t.v[0] & 1); } void fe25519_setone(fe25519 *r) { int i; r->v[0] = 1; for(i=1;i<32;i++) r->v[i]=0; } void fe25519_setzero(fe25519 *r) { int i; for(i=0;i<32;i++) r->v[i]=0; } void fe25519_neg(fe25519 *r, const fe25519 *x) { fe25519 t; int i; for(i=0;i<32;i++) t.v[i]=x->v[i]; fe25519_setzero(r); fe25519_sub(r, r, &t); } void fe25519_add(fe25519 *r, const fe25519 *x, const fe25519 *y) { int i; for(i=0;i<32;i++) r->v[i] = x->v[i] + y->v[i]; fe_reduce_add_sub(r); } void fe25519_sub(fe25519 *r, const fe25519 *x, const fe25519 *y) { int i; uint32_t t[32]; t[0] = x->v[0] + 0x1da; t[31] = x->v[31] + 0xfe; for(i=1;i<31;i++) t[i] = x->v[i] + 0x1fe; for(i=0;i<32;i++) r->v[i] = t[i] - y->v[i]; fe_reduce_add_sub(r); } void fe25519_mul(fe25519 *r, const fe25519 *x, const fe25519 *y) { int i,j; uint32_t t[63]; for(i=0;i<63;i++)t[i] = 0; for(i=0;i<32;i++) for(j=0;j<32;j++) t[i+j] += x->v[i] * y->v[j]; for(i=32;i<63;i++) r->v[i-32] = t[i-32] + times38(t[i]); r->v[31] = t[31]; /* result now in r[0]...r[31] */ reduce_mul(r); } void fe25519_square(fe25519 *r, const fe25519 *x) { fe25519_mul(r, x, x); } void fe25519_invert(fe25519 *r, const fe25519 *x) { fe25519 z2; fe25519 z9; fe25519 z11; fe25519 z2_5_0; fe25519 z2_10_0; fe25519 z2_20_0; fe25519 z2_50_0; fe25519 z2_100_0; fe25519 t0; fe25519 t1; int i; /* 2 */ fe25519_square(&z2,x); /* 4 */ fe25519_square(&t1,&z2); /* 8 */ fe25519_square(&t0,&t1); /* 9 */ fe25519_mul(&z9,&t0,x); /* 11 */ fe25519_mul(&z11,&z9,&z2); /* 22 */ fe25519_square(&t0,&z11); /* 2^5 - 2^0 = 31 */ fe25519_mul(&z2_5_0,&t0,&z9); /* 2^6 - 2^1 */ fe25519_square(&t0,&z2_5_0); /* 2^7 - 2^2 */ fe25519_square(&t1,&t0); /* 2^8 - 2^3 */ fe25519_square(&t0,&t1); /* 2^9 - 2^4 */ fe25519_square(&t1,&t0); /* 2^10 - 2^5 */ fe25519_square(&t0,&t1); /* 2^10 - 2^0 */ fe25519_mul(&z2_10_0,&t0,&z2_5_0); /* 2^11 - 2^1 */ fe25519_square(&t0,&z2_10_0); /* 2^12 - 2^2 */ fe25519_square(&t1,&t0); /* 2^20 - 2^10 */ for (i = 2;i < 10;i += 2) { fe25519_square(&t0,&t1); fe25519_square(&t1,&t0); } /* 2^20 - 2^0 */ fe25519_mul(&z2_20_0,&t1,&z2_10_0); /* 2^21 - 2^1 */ fe25519_square(&t0,&z2_20_0); /* 2^22 - 2^2 */ fe25519_square(&t1,&t0); /* 2^40 - 2^20 */ for (i = 2;i < 20;i += 2) { fe25519_square(&t0,&t1); fe25519_square(&t1,&t0); } /* 2^40 - 2^0 */ fe25519_mul(&t0,&t1,&z2_20_0); /* 2^41 - 2^1 */ fe25519_square(&t1,&t0); /* 2^42 - 2^2 */ fe25519_square(&t0,&t1); /* 2^50 - 2^10 */ for (i = 2;i < 10;i += 2) { fe25519_square(&t1,&t0); fe25519_square(&t0,&t1); } /* 2^50 - 2^0 */ fe25519_mul(&z2_50_0,&t0,&z2_10_0); /* 2^51 - 2^1 */ fe25519_square(&t0,&z2_50_0); /* 2^52 - 2^2 */ fe25519_square(&t1,&t0); /* 2^100 - 2^50 */ for (i = 2;i < 50;i += 2) { fe25519_square(&t0,&t1); fe25519_square(&t1,&t0); } /* 2^100 - 2^0 */ fe25519_mul(&z2_100_0,&t1,&z2_50_0); /* 2^101 - 2^1 */ fe25519_square(&t1,&z2_100_0); /* 2^102 - 2^2 */ fe25519_square(&t0,&t1); /* 2^200 - 2^100 */ for (i = 2;i < 100;i += 2) { fe25519_square(&t1,&t0); fe25519_square(&t0,&t1); } /* 2^200 - 2^0 */ fe25519_mul(&t1,&t0,&z2_100_0); /* 2^201 - 2^1 */ fe25519_square(&t0,&t1); /* 2^202 - 2^2 */ fe25519_square(&t1,&t0); /* 2^250 - 2^50 */ for (i = 2;i < 50;i += 2) { fe25519_square(&t0,&t1); fe25519_square(&t1,&t0); } /* 2^250 - 2^0 */ fe25519_mul(&t0,&t1,&z2_50_0); /* 2^251 - 2^1 */ fe25519_square(&t1,&t0); /* 2^252 - 2^2 */ fe25519_square(&t0,&t1); /* 2^253 - 2^3 */ fe25519_square(&t1,&t0); /* 2^254 - 2^4 */ fe25519_square(&t0,&t1); /* 2^255 - 2^5 */ fe25519_square(&t1,&t0); /* 2^255 - 21 */ fe25519_mul(r,&t1,&z11); } void fe25519_pow2523(fe25519 *r, const fe25519 *x) { fe25519 z2; fe25519 z9; fe25519 z11; fe25519 z2_5_0; fe25519 z2_10_0; fe25519 z2_20_0; fe25519 z2_50_0; fe25519 z2_100_0; fe25519 t; int i; /* 2 */ fe25519_square(&z2,x); /* 4 */ fe25519_square(&t,&z2); /* 8 */ fe25519_square(&t,&t); /* 9 */ fe25519_mul(&z9,&t,x); /* 11 */ fe25519_mul(&z11,&z9,&z2); /* 22 */ fe25519_square(&t,&z11); /* 2^5 - 2^0 = 31 */ fe25519_mul(&z2_5_0,&t,&z9); /* 2^6 - 2^1 */ fe25519_square(&t,&z2_5_0); /* 2^10 - 2^5 */ for (i = 1;i < 5;i++) { fe25519_square(&t,&t); } /* 2^10 - 2^0 */ fe25519_mul(&z2_10_0,&t,&z2_5_0); /* 2^11 - 2^1 */ fe25519_square(&t,&z2_10_0); /* 2^20 - 2^10 */ for (i = 1;i < 10;i++) { fe25519_square(&t,&t); } /* 2^20 - 2^0 */ fe25519_mul(&z2_20_0,&t,&z2_10_0); /* 2^21 - 2^1 */ fe25519_square(&t,&z2_20_0); /* 2^40 - 2^20 */ for (i = 1;i < 20;i++) { fe25519_square(&t,&t); } /* 2^40 - 2^0 */ fe25519_mul(&t,&t,&z2_20_0); /* 2^41 - 2^1 */ fe25519_square(&t,&t); /* 2^50 - 2^10 */ for (i = 1;i < 10;i++) { fe25519_square(&t,&t); } /* 2^50 - 2^0 */ fe25519_mul(&z2_50_0,&t,&z2_10_0); /* 2^51 - 2^1 */ fe25519_square(&t,&z2_50_0); /* 2^100 - 2^50 */ for (i = 1;i < 50;i++) { fe25519_square(&t,&t); } /* 2^100 - 2^0 */ fe25519_mul(&z2_100_0,&t,&z2_50_0); /* 2^101 - 2^1 */ fe25519_square(&t,&z2_100_0); /* 2^200 - 2^100 */ for (i = 1;i < 100;i++) { fe25519_square(&t,&t); } /* 2^200 - 2^0 */ fe25519_mul(&t,&t,&z2_100_0); /* 2^201 - 2^1 */ fe25519_square(&t,&t); /* 2^250 - 2^50 */ for (i = 1;i < 50;i++) { fe25519_square(&t,&t); } /* 2^250 - 2^0 */ fe25519_mul(&t,&t,&z2_50_0); /* 2^251 - 2^1 */ fe25519_square(&t,&t); /* 2^252 - 2^2 */ fe25519_square(&t,&t); /* 2^252 - 3 */ fe25519_mul(r,&t,x); } libwebsockets-3.2.1/plugins/ssh-base/crypto/fe25519.h000066400000000000000000000044341357643561300222560ustar00rootroot00000000000000/* $OpenBSD: fe25519.h,v 1.3 2013/12/09 11:03:45 markus Exp $ */ /* * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, * Peter Schwabe, Bo-Yin Yang. * Copied from supercop-20130419/crypto_sign/ed25519/ref/fe25519.h */ #ifndef FE25519_H #define FE25519_H #define fe25519 crypto_sign_ed25519_ref_fe25519 #define fe25519_freeze crypto_sign_ed25519_ref_fe25519_freeze #define fe25519_unpack crypto_sign_ed25519_ref_fe25519_unpack #define fe25519_pack crypto_sign_ed25519_ref_fe25519_pack #define fe25519_iszero crypto_sign_ed25519_ref_fe25519_iszero #define fe25519_iseq_vartime crypto_sign_ed25519_ref_fe25519_iseq_vartime #define fe25519_cmov crypto_sign_ed25519_ref_fe25519_cmov #define fe25519_setone crypto_sign_ed25519_ref_fe25519_setone #define fe25519_setzero crypto_sign_ed25519_ref_fe25519_setzero #define fe25519_neg crypto_sign_ed25519_ref_fe25519_neg #define fe25519_getparity crypto_sign_ed25519_ref_fe25519_getparity #define fe25519_add crypto_sign_ed25519_ref_fe25519_add #define fe25519_sub crypto_sign_ed25519_ref_fe25519_sub #define fe25519_mul crypto_sign_ed25519_ref_fe25519_mul #define fe25519_square crypto_sign_ed25519_ref_fe25519_square #define fe25519_invert crypto_sign_ed25519_ref_fe25519_invert #define fe25519_pow2523 crypto_sign_ed25519_ref_fe25519_pow2523 typedef struct { uint32_t v[32]; } fe25519; void fe25519_freeze(fe25519 *r); void fe25519_unpack(fe25519 *r, const unsigned char x[32]); void fe25519_pack(unsigned char r[32], const fe25519 *x); int fe25519_iszero(const fe25519 *x); int fe25519_iseq_vartime(const fe25519 *x, const fe25519 *y); void fe25519_cmov(fe25519 *r, const fe25519 *x, unsigned char b); void fe25519_setone(fe25519 *r); void fe25519_setzero(fe25519 *r); void fe25519_neg(fe25519 *r, const fe25519 *x); unsigned char fe25519_getparity(const fe25519 *x); void fe25519_add(fe25519 *r, const fe25519 *x, const fe25519 *y); void fe25519_sub(fe25519 *r, const fe25519 *x, const fe25519 *y); void fe25519_mul(fe25519 *r, const fe25519 *x, const fe25519 *y); void fe25519_square(fe25519 *r, const fe25519 *x); void fe25519_invert(fe25519 *r, const fe25519 *x); void fe25519_pow2523(fe25519 *r, const fe25519 *x); #endif libwebsockets-3.2.1/plugins/ssh-base/crypto/ge25519.c000066400000000000000000000261251357643561300222530ustar00rootroot00000000000000/* $OpenBSD: ge25519.c,v 1.3 2013/12/09 11:03:45 markus Exp $ */ /* * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, * Peter Schwabe, Bo-Yin Yang. * Copied from supercop-20130419/crypto_sign/ed25519/ref/ge25519.c */ #include #include "fe25519.h" #include "sc25519.h" #include "ge25519.h" /* * Arithmetic on the twisted Edwards curve -x^2 + y^2 = 1 + dx^2y^2 * with d = -(121665/121666) = 37095705934669439343138083508754565189542113879843219016388785533085940283555 * Base point: (15112221349535400772501151409588531511454012693041857206046113283949847762202,46316835694926478169428394003475163141307993866256225615783033603165251855960); */ /* d */ static const fe25519 ge25519_ecd = {{0xA3, 0x78, 0x59, 0x13, 0xCA, 0x4D, 0xEB, 0x75, 0xAB, 0xD8, 0x41, 0x41, 0x4D, 0x0A, 0x70, 0x00, 0x98, 0xE8, 0x79, 0x77, 0x79, 0x40, 0xC7, 0x8C, 0x73, 0xFE, 0x6F, 0x2B, 0xEE, 0x6C, 0x03, 0x52}}; /* 2*d */ static const fe25519 ge25519_ec2d = {{0x59, 0xF1, 0xB2, 0x26, 0x94, 0x9B, 0xD6, 0xEB, 0x56, 0xB1, 0x83, 0x82, 0x9A, 0x14, 0xE0, 0x00, 0x30, 0xD1, 0xF3, 0xEE, 0xF2, 0x80, 0x8E, 0x19, 0xE7, 0xFC, 0xDF, 0x56, 0xDC, 0xD9, 0x06, 0x24}}; /* sqrt(-1) */ static const fe25519 ge25519_sqrtm1 = {{0xB0, 0xA0, 0x0E, 0x4A, 0x27, 0x1B, 0xEE, 0xC4, 0x78, 0xE4, 0x2F, 0xAD, 0x06, 0x18, 0x43, 0x2F, 0xA7, 0xD7, 0xFB, 0x3D, 0x99, 0x00, 0x4D, 0x2B, 0x0B, 0xDF, 0xC1, 0x4F, 0x80, 0x24, 0x83, 0x2B}}; #define ge25519_p3 ge25519 typedef struct { fe25519 x; fe25519 z; fe25519 y; fe25519 t; } ge25519_p1p1; typedef struct { fe25519 x; fe25519 y; fe25519 z; } ge25519_p2; typedef struct { fe25519 x; fe25519 y; } ge25519_aff; /* Packed coordinates of the base point */ const ge25519 ge25519_base = {{{0x1A, 0xD5, 0x25, 0x8F, 0x60, 0x2D, 0x56, 0xC9, 0xB2, 0xA7, 0x25, 0x95, 0x60, 0xC7, 0x2C, 0x69, 0x5C, 0xDC, 0xD6, 0xFD, 0x31, 0xE2, 0xA4, 0xC0, 0xFE, 0x53, 0x6E, 0xCD, 0xD3, 0x36, 0x69, 0x21}}, {{0x58, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0xA3, 0xDD, 0xB7, 0xA5, 0xB3, 0x8A, 0xDE, 0x6D, 0xF5, 0x52, 0x51, 0x77, 0x80, 0x9F, 0xF0, 0x20, 0x7D, 0xE3, 0xAB, 0x64, 0x8E, 0x4E, 0xEA, 0x66, 0x65, 0x76, 0x8B, 0xD7, 0x0F, 0x5F, 0x87, 0x67}}}; /* Multiples of the base point in affine representation */ static const ge25519_aff ge25519_base_multiples_affine[425] = { #include "ge25519_base.data" }; static void p1p1_to_p2(ge25519_p2 *r, const ge25519_p1p1 *p) { fe25519_mul(&r->x, &p->x, &p->t); fe25519_mul(&r->y, &p->y, &p->z); fe25519_mul(&r->z, &p->z, &p->t); } static void p1p1_to_p3(ge25519_p3 *r, const ge25519_p1p1 *p) { p1p1_to_p2((ge25519_p2 *)r, p); fe25519_mul(&r->t, &p->x, &p->y); } static void ge25519_mixadd2(ge25519_p3 *r, const ge25519_aff *q) { fe25519 a,b,t1,t2,c,d,e,f,g,h,qt; fe25519_mul(&qt, &q->x, &q->y); fe25519_sub(&a, &r->y, &r->x); /* A = (Y1-X1)*(Y2-X2) */ fe25519_add(&b, &r->y, &r->x); /* B = (Y1+X1)*(Y2+X2) */ fe25519_sub(&t1, &q->y, &q->x); fe25519_add(&t2, &q->y, &q->x); fe25519_mul(&a, &a, &t1); fe25519_mul(&b, &b, &t2); fe25519_sub(&e, &b, &a); /* E = B-A */ fe25519_add(&h, &b, &a); /* H = B+A */ fe25519_mul(&c, &r->t, &qt); /* C = T1*k*T2 */ fe25519_mul(&c, &c, &ge25519_ec2d); fe25519_add(&d, &r->z, &r->z); /* D = Z1*2 */ fe25519_sub(&f, &d, &c); /* F = D-C */ fe25519_add(&g, &d, &c); /* G = D+C */ fe25519_mul(&r->x, &e, &f); fe25519_mul(&r->y, &h, &g); fe25519_mul(&r->z, &g, &f); fe25519_mul(&r->t, &e, &h); } static void add_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_p3 *q) { fe25519 a, b, c, d, t; fe25519_sub(&a, &p->y, &p->x); /* A = (Y1-X1)*(Y2-X2) */ fe25519_sub(&t, &q->y, &q->x); fe25519_mul(&a, &a, &t); fe25519_add(&b, &p->x, &p->y); /* B = (Y1+X1)*(Y2+X2) */ fe25519_add(&t, &q->x, &q->y); fe25519_mul(&b, &b, &t); fe25519_mul(&c, &p->t, &q->t); /* C = T1*k*T2 */ fe25519_mul(&c, &c, &ge25519_ec2d); fe25519_mul(&d, &p->z, &q->z); /* D = Z1*2*Z2 */ fe25519_add(&d, &d, &d); fe25519_sub(&r->x, &b, &a); /* E = B-A */ fe25519_sub(&r->t, &d, &c); /* F = D-C */ fe25519_add(&r->z, &d, &c); /* G = D+C */ fe25519_add(&r->y, &b, &a); /* H = B+A */ } /* See http://www.hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#doubling-dbl-2008-hwcd */ static void dbl_p1p1(ge25519_p1p1 *r, const ge25519_p2 *p) { fe25519 a,b,c,d; fe25519_square(&a, &p->x); fe25519_square(&b, &p->y); fe25519_square(&c, &p->z); fe25519_add(&c, &c, &c); fe25519_neg(&d, &a); fe25519_add(&r->x, &p->x, &p->y); fe25519_square(&r->x, &r->x); fe25519_sub(&r->x, &r->x, &a); fe25519_sub(&r->x, &r->x, &b); fe25519_add(&r->z, &d, &b); fe25519_sub(&r->t, &r->z, &c); fe25519_sub(&r->y, &d, &b); } /* Constant-time version of: if(b) r = p */ static void cmov_aff(ge25519_aff *r, const ge25519_aff *p, unsigned char b) { fe25519_cmov(&r->x, &p->x, b); fe25519_cmov(&r->y, &p->y, b); } static unsigned char ge_equal(signed char b,signed char c) { unsigned char ub = b; unsigned char uc = c; unsigned char x = ub ^ uc; /* 0: yes; 1..255: no */ uint32_t y = x; /* 0: yes; 1..255: no */ y -= 1; /* 4294967295: yes; 0..254: no */ y >>= 31; /* 1: yes; 0: no */ return y; } static unsigned char negative(signed char b) { unsigned long long x = b; /* 18446744073709551361..18446744073709551615: yes; 0..255: no */ x >>= 63; /* 1: yes; 0: no */ return (unsigned char)x; } static void choose_t(ge25519_aff *t, unsigned long long pos, signed char b) { /* constant time */ fe25519 v; *t = ge25519_base_multiples_affine[5*pos+0]; cmov_aff(t, &ge25519_base_multiples_affine[5*pos+1],ge_equal(b,1) | ge_equal(b,-1)); cmov_aff(t, &ge25519_base_multiples_affine[5*pos+2],ge_equal(b,2) | ge_equal(b,-2)); cmov_aff(t, &ge25519_base_multiples_affine[5*pos+3],ge_equal(b,3) | ge_equal(b,-3)); cmov_aff(t, &ge25519_base_multiples_affine[5*pos+4],ge_equal(b,-4)); fe25519_neg(&v, &t->x); fe25519_cmov(&t->x, &v, negative(b)); } static void setneutral(ge25519 *r) { fe25519_setzero(&r->x); fe25519_setone(&r->y); fe25519_setone(&r->z); fe25519_setzero(&r->t); } /* ******************************************************************** * EXPORTED FUNCTIONS ******************************************************************** */ /* return 0 on success, -1 otherwise */ int ge25519_unpackneg_vartime(ge25519_p3 *r, const unsigned char p[32]) { unsigned char par; fe25519 t, chk, num, den, den2, den4, den6; fe25519_setone(&r->z); par = p[31] >> 7; fe25519_unpack(&r->y, p); fe25519_square(&num, &r->y); /* x = y^2 */ fe25519_mul(&den, &num, &ge25519_ecd); /* den = dy^2 */ fe25519_sub(&num, &num, &r->z); /* x = y^2-1 */ fe25519_add(&den, &r->z, &den); /* den = dy^2+1 */ /* Computation of sqrt(num/den) */ /* 1.: computation of num^((p-5)/8)*den^((7p-35)/8) = (num*den^7)^((p-5)/8) */ fe25519_square(&den2, &den); fe25519_square(&den4, &den2); fe25519_mul(&den6, &den4, &den2); fe25519_mul(&t, &den6, &num); fe25519_mul(&t, &t, &den); fe25519_pow2523(&t, &t); /* 2. computation of r->x = t * num * den^3 */ fe25519_mul(&t, &t, &num); fe25519_mul(&t, &t, &den); fe25519_mul(&t, &t, &den); fe25519_mul(&r->x, &t, &den); /* 3. Check whether sqrt computation gave correct result, multiply by sqrt(-1) if not: */ fe25519_square(&chk, &r->x); fe25519_mul(&chk, &chk, &den); if (!fe25519_iseq_vartime(&chk, &num)) fe25519_mul(&r->x, &r->x, &ge25519_sqrtm1); /* 4. Now we have one of the two square roots, except if input was not a square */ fe25519_square(&chk, &r->x); fe25519_mul(&chk, &chk, &den); if (!fe25519_iseq_vartime(&chk, &num)) return -1; /* 5. Choose the desired square root according to parity: */ if(fe25519_getparity(&r->x) != (1-par)) fe25519_neg(&r->x, &r->x); fe25519_mul(&r->t, &r->x, &r->y); return 0; } void ge25519_pack(unsigned char r[32], const ge25519_p3 *p) { fe25519 tx, ty, zi; fe25519_invert(&zi, &p->z); fe25519_mul(&tx, &p->x, &zi); fe25519_mul(&ty, &p->y, &zi); fe25519_pack(r, &ty); r[31] ^= fe25519_getparity(&tx) << 7; } int ge25519_isneutral_vartime(const ge25519_p3 *p) { int ret = 1; if(!fe25519_iszero(&p->x)) ret = 0; if(!fe25519_iseq_vartime(&p->y, &p->z)) ret = 0; return ret; } /* computes [s1]p1 + [s2]p2 */ void ge25519_double_scalarmult_vartime(ge25519_p3 *r, const ge25519_p3 *p1, const sc25519 *s1, const ge25519_p3 *p2, const sc25519 *s2) { ge25519_p1p1 tp1p1; ge25519_p3 pre[16]; unsigned char b[127]; int i; /* precomputation s2 s1 */ setneutral(pre); /* 00 00 */ pre[1] = *p1; /* 00 01 */ dbl_p1p1(&tp1p1,(ge25519_p2 *)p1); p1p1_to_p3( &pre[2], &tp1p1); /* 00 10 */ add_p1p1(&tp1p1,&pre[1], &pre[2]); p1p1_to_p3( &pre[3], &tp1p1); /* 00 11 */ pre[4] = *p2; /* 01 00 */ add_p1p1(&tp1p1,&pre[1], &pre[4]); p1p1_to_p3( &pre[5], &tp1p1); /* 01 01 */ add_p1p1(&tp1p1,&pre[2], &pre[4]); p1p1_to_p3( &pre[6], &tp1p1); /* 01 10 */ add_p1p1(&tp1p1,&pre[3], &pre[4]); p1p1_to_p3( &pre[7], &tp1p1); /* 01 11 */ dbl_p1p1(&tp1p1,(ge25519_p2 *)p2); p1p1_to_p3( &pre[8], &tp1p1); /* 10 00 */ add_p1p1(&tp1p1,&pre[1], &pre[8]); p1p1_to_p3( &pre[9], &tp1p1); /* 10 01 */ dbl_p1p1(&tp1p1,(ge25519_p2 *)&pre[5]); p1p1_to_p3(&pre[10], &tp1p1); /* 10 10 */ add_p1p1(&tp1p1,&pre[3], &pre[8]); p1p1_to_p3(&pre[11], &tp1p1); /* 10 11 */ add_p1p1(&tp1p1,&pre[4], &pre[8]); p1p1_to_p3(&pre[12], &tp1p1); /* 11 00 */ add_p1p1(&tp1p1,&pre[1],&pre[12]); p1p1_to_p3(&pre[13], &tp1p1); /* 11 01 */ add_p1p1(&tp1p1,&pre[2],&pre[12]); p1p1_to_p3(&pre[14], &tp1p1); /* 11 10 */ add_p1p1(&tp1p1,&pre[3],&pre[12]); p1p1_to_p3(&pre[15], &tp1p1); /* 11 11 */ sc25519_2interleave2(b,s1,s2); /* scalar multiplication */ *r = pre[b[126]]; for(i=125;i>=0;i--) { dbl_p1p1(&tp1p1, (ge25519_p2 *)r); p1p1_to_p2((ge25519_p2 *) r, &tp1p1); dbl_p1p1(&tp1p1, (ge25519_p2 *)r); if(b[i]!=0) { p1p1_to_p3(r, &tp1p1); add_p1p1(&tp1p1, r, &pre[b[i]]); } if(i != 0) p1p1_to_p2((ge25519_p2 *)r, &tp1p1); else p1p1_to_p3(r, &tp1p1); } } void ge25519_scalarmult_base(ge25519_p3 *r, const sc25519 *s) { signed char b[85]; int i; ge25519_aff t; sc25519_window3(b,s); choose_t((ge25519_aff *)r, 0, b[0]); fe25519_setone(&r->z); fe25519_mul(&r->t, &r->x, &r->y); for(i=1;i<85;i++) { choose_t(&t, (unsigned long long) i, b[i]); ge25519_mixadd2(r, &t); } } libwebsockets-3.2.1/plugins/ssh-base/crypto/ge25519.h000066400000000000000000000025501357643561300222540ustar00rootroot00000000000000/* $OpenBSD: ge25519.h,v 1.4 2015/02/16 18:26:26 miod Exp $ */ /* * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, * Peter Schwabe, Bo-Yin Yang. * Copied from supercop-20130419/crypto_sign/ed25519/ref/ge25519.h */ #ifndef GE25519_H #define GE25519_H #include "fe25519.h" #include "sc25519.h" #define ge25519 crypto_sign_ed25519_ref_ge25519 #define ge25519_base crypto_sign_ed25519_ref_ge25519_base #define ge25519_unpackneg_vartime crypto_sign_ed25519_ref_unpackneg_vartime #define ge25519_pack crypto_sign_ed25519_ref_pack #define ge25519_isneutral_vartime crypto_sign_ed25519_ref_isneutral_vartime #define ge25519_double_scalarmult_vartime crypto_sign_ed25519_ref_double_scalarmult_vartime #define ge25519_scalarmult_base crypto_sign_ed25519_ref_scalarmult_base typedef struct { fe25519 x; fe25519 y; fe25519 z; fe25519 t; } ge25519; extern const ge25519 ge25519_base; int ge25519_unpackneg_vartime(ge25519 *r, const unsigned char p[32]); void ge25519_pack(unsigned char r[32], const ge25519 *p); int ge25519_isneutral_vartime(const ge25519 *p); void ge25519_double_scalarmult_vartime(ge25519 *r, const ge25519 *p1, const sc25519 *s1, const ge25519 *p2, const sc25519 *s2); void ge25519_scalarmult_base(ge25519 *r, const sc25519 *s); #endif libwebsockets-3.2.1/plugins/ssh-base/crypto/ge25519_base.data000066400000000000000000005111601357643561300237320ustar00rootroot00000000000000/* $OpenBSD: ge25519_base.data,v 1.3 2013/12/09 11:03:45 markus Exp $ */ /* * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, * Peter Schwabe, Bo-Yin Yang. * Copied from supercop-20130419/crypto_sign/ed25519/ref/ge25519_base.data */ {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x1a, 0xd5, 0x25, 0x8f, 0x60, 0x2d, 0x56, 0xc9, 0xb2, 0xa7, 0x25, 0x95, 0x60, 0xc7, 0x2c, 0x69, 0x5c, 0xdc, 0xd6, 0xfd, 0x31, 0xe2, 0xa4, 0xc0, 0xfe, 0x53, 0x6e, 0xcd, 0xd3, 0x36, 0x69, 0x21}} , {{0x58, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66}}}, {{{0x0e, 0xce, 0x43, 0x28, 0x4e, 0xa1, 0xc5, 0x83, 0x5f, 0xa4, 0xd7, 0x15, 0x45, 0x8e, 0x0d, 0x08, 0xac, 0xe7, 0x33, 0x18, 0x7d, 0x3b, 0x04, 0x3d, 0x6c, 0x04, 0x5a, 0x9f, 0x4c, 0x38, 0xab, 0x36}} , {{0xc9, 0xa3, 0xf8, 0x6a, 0xae, 0x46, 0x5f, 0x0e, 0x56, 0x51, 0x38, 0x64, 0x51, 0x0f, 0x39, 0x97, 0x56, 0x1f, 0xa2, 0xc9, 0xe8, 0x5e, 0xa2, 0x1d, 0xc2, 0x29, 0x23, 0x09, 0xf3, 0xcd, 0x60, 0x22}}}, {{{0x5c, 0xe2, 0xf8, 0xd3, 0x5f, 0x48, 0x62, 0xac, 0x86, 0x48, 0x62, 0x81, 0x19, 0x98, 0x43, 0x63, 0x3a, 0xc8, 0xda, 0x3e, 0x74, 0xae, 0xf4, 0x1f, 0x49, 0x8f, 0x92, 0x22, 0x4a, 0x9c, 0xae, 0x67}} , {{0xd4, 0xb4, 0xf5, 0x78, 0x48, 0x68, 0xc3, 0x02, 0x04, 0x03, 0x24, 0x67, 0x17, 0xec, 0x16, 0x9f, 0xf7, 0x9e, 0x26, 0x60, 0x8e, 0xa1, 0x26, 0xa1, 0xab, 0x69, 0xee, 0x77, 0xd1, 0xb1, 0x67, 0x12}}}, {{{0x70, 0xf8, 0xc9, 0xc4, 0x57, 0xa6, 0x3a, 0x49, 0x47, 0x15, 0xce, 0x93, 0xc1, 0x9e, 0x73, 0x1a, 0xf9, 0x20, 0x35, 0x7a, 0xb8, 0xd4, 0x25, 0x83, 0x46, 0xf1, 0xcf, 0x56, 0xdb, 0xa8, 0x3d, 0x20}} , {{0x2f, 0x11, 0x32, 0xca, 0x61, 0xab, 0x38, 0xdf, 0xf0, 0x0f, 0x2f, 0xea, 0x32, 0x28, 0xf2, 0x4c, 0x6c, 0x71, 0xd5, 0x80, 0x85, 0xb8, 0x0e, 0x47, 0xe1, 0x95, 0x15, 0xcb, 0x27, 0xe8, 0xd0, 0x47}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xc8, 0x84, 0xa5, 0x08, 0xbc, 0xfd, 0x87, 0x3b, 0x99, 0x8b, 0x69, 0x80, 0x7b, 0xc6, 0x3a, 0xeb, 0x93, 0xcf, 0x4e, 0xf8, 0x5c, 0x2d, 0x86, 0x42, 0xb6, 0x71, 0xd7, 0x97, 0x5f, 0xe1, 0x42, 0x67}} , {{0xb4, 0xb9, 0x37, 0xfc, 0xa9, 0x5b, 0x2f, 0x1e, 0x93, 0xe4, 0x1e, 0x62, 0xfc, 0x3c, 0x78, 0x81, 0x8f, 0xf3, 0x8a, 0x66, 0x09, 0x6f, 0xad, 0x6e, 0x79, 0x73, 0xe5, 0xc9, 0x00, 0x06, 0xd3, 0x21}}}, {{{0xf8, 0xf9, 0x28, 0x6c, 0x6d, 0x59, 0xb2, 0x59, 0x74, 0x23, 0xbf, 0xe7, 0x33, 0x8d, 0x57, 0x09, 0x91, 0x9c, 0x24, 0x08, 0x15, 0x2b, 0xe2, 0xb8, 0xee, 0x3a, 0xe5, 0x27, 0x06, 0x86, 0xa4, 0x23}} , {{0xeb, 0x27, 0x67, 0xc1, 0x37, 0xab, 0x7a, 0xd8, 0x27, 0x9c, 0x07, 0x8e, 0xff, 0x11, 0x6a, 0xb0, 0x78, 0x6e, 0xad, 0x3a, 0x2e, 0x0f, 0x98, 0x9f, 0x72, 0xc3, 0x7f, 0x82, 0xf2, 0x96, 0x96, 0x70}}}, {{{0x81, 0x6b, 0x88, 0xe8, 0x1e, 0xc7, 0x77, 0x96, 0x0e, 0xa1, 0xa9, 0x52, 0xe0, 0xd8, 0x0e, 0x61, 0x9e, 0x79, 0x2d, 0x95, 0x9c, 0x8d, 0x96, 0xe0, 0x06, 0x40, 0x5d, 0x87, 0x28, 0x5f, 0x98, 0x70}} , {{0xf1, 0x79, 0x7b, 0xed, 0x4f, 0x44, 0xb2, 0xe7, 0x08, 0x0d, 0xc2, 0x08, 0x12, 0xd2, 0x9f, 0xdf, 0xcd, 0x93, 0x20, 0x8a, 0xcf, 0x33, 0xca, 0x6d, 0x89, 0xb9, 0x77, 0xc8, 0x93, 0x1b, 0x4e, 0x60}}}, {{{0x26, 0x4f, 0x7e, 0x97, 0xf6, 0x40, 0xdd, 0x4f, 0xfc, 0x52, 0x78, 0xf9, 0x90, 0x31, 0x03, 0xe6, 0x7d, 0x56, 0x39, 0x0b, 0x1d, 0x56, 0x82, 0x85, 0xf9, 0x1a, 0x42, 0x17, 0x69, 0x6c, 0xcf, 0x39}} , {{0x69, 0xd2, 0x06, 0x3a, 0x4f, 0x39, 0x2d, 0xf9, 0x38, 0x40, 0x8c, 0x4c, 0xe7, 0x05, 0x12, 0xb4, 0x78, 0x8b, 0xf8, 0xc0, 0xec, 0x93, 0xde, 0x7a, 0x6b, 0xce, 0x2c, 0xe1, 0x0e, 0xa9, 0x34, 0x44}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x0b, 0xa4, 0x3c, 0xb0, 0x0f, 0x7a, 0x51, 0xf1, 0x78, 0xd6, 0xd9, 0x6a, 0xfd, 0x46, 0xe8, 0xb8, 0xa8, 0x79, 0x1d, 0x87, 0xf9, 0x90, 0xf2, 0x9c, 0x13, 0x29, 0xf8, 0x0b, 0x20, 0x64, 0xfa, 0x05}} , {{0x26, 0x09, 0xda, 0x17, 0xaf, 0x95, 0xd6, 0xfb, 0x6a, 0x19, 0x0d, 0x6e, 0x5e, 0x12, 0xf1, 0x99, 0x4c, 0xaa, 0xa8, 0x6f, 0x79, 0x86, 0xf4, 0x72, 0x28, 0x00, 0x26, 0xf9, 0xea, 0x9e, 0x19, 0x3d}}}, {{{0x87, 0xdd, 0xcf, 0xf0, 0x5b, 0x49, 0xa2, 0x5d, 0x40, 0x7a, 0x23, 0x26, 0xa4, 0x7a, 0x83, 0x8a, 0xb7, 0x8b, 0xd2, 0x1a, 0xbf, 0xea, 0x02, 0x24, 0x08, 0x5f, 0x7b, 0xa9, 0xb1, 0xbe, 0x9d, 0x37}} , {{0xfc, 0x86, 0x4b, 0x08, 0xee, 0xe7, 0xa0, 0xfd, 0x21, 0x45, 0x09, 0x34, 0xc1, 0x61, 0x32, 0x23, 0xfc, 0x9b, 0x55, 0x48, 0x53, 0x99, 0xf7, 0x63, 0xd0, 0x99, 0xce, 0x01, 0xe0, 0x9f, 0xeb, 0x28}}}, {{{0x47, 0xfc, 0xab, 0x5a, 0x17, 0xf0, 0x85, 0x56, 0x3a, 0x30, 0x86, 0x20, 0x28, 0x4b, 0x8e, 0x44, 0x74, 0x3a, 0x6e, 0x02, 0xf1, 0x32, 0x8f, 0x9f, 0x3f, 0x08, 0x35, 0xe9, 0xca, 0x16, 0x5f, 0x6e}} , {{0x1c, 0x59, 0x1c, 0x65, 0x5d, 0x34, 0xa4, 0x09, 0xcd, 0x13, 0x9c, 0x70, 0x7d, 0xb1, 0x2a, 0xc5, 0x88, 0xaf, 0x0b, 0x60, 0xc7, 0x9f, 0x34, 0x8d, 0xd6, 0xb7, 0x7f, 0xea, 0x78, 0x65, 0x8d, 0x77}}}, {{{0x56, 0xa5, 0xc2, 0x0c, 0xdd, 0xbc, 0xb8, 0x20, 0x6d, 0x57, 0x61, 0xb5, 0xfb, 0x78, 0xb5, 0xd4, 0x49, 0x54, 0x90, 0x26, 0xc1, 0xcb, 0xe9, 0xe6, 0xbf, 0xec, 0x1d, 0x4e, 0xed, 0x07, 0x7e, 0x5e}} , {{0xc7, 0xf6, 0x6c, 0x56, 0x31, 0x20, 0x14, 0x0e, 0xa8, 0xd9, 0x27, 0xc1, 0x9a, 0x3d, 0x1b, 0x7d, 0x0e, 0x26, 0xd3, 0x81, 0xaa, 0xeb, 0xf5, 0x6b, 0x79, 0x02, 0xf1, 0x51, 0x5c, 0x75, 0x55, 0x0f}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x0a, 0x34, 0xcd, 0x82, 0x3c, 0x33, 0x09, 0x54, 0xd2, 0x61, 0x39, 0x30, 0x9b, 0xfd, 0xef, 0x21, 0x26, 0xd4, 0x70, 0xfa, 0xee, 0xf9, 0x31, 0x33, 0x73, 0x84, 0xd0, 0xb3, 0x81, 0xbf, 0xec, 0x2e}} , {{0xe8, 0x93, 0x8b, 0x00, 0x64, 0xf7, 0x9c, 0xb8, 0x74, 0xe0, 0xe6, 0x49, 0x48, 0x4d, 0x4d, 0x48, 0xb6, 0x19, 0xa1, 0x40, 0xb7, 0xd9, 0x32, 0x41, 0x7c, 0x82, 0x37, 0xa1, 0x2d, 0xdc, 0xd2, 0x54}}}, {{{0x68, 0x2b, 0x4a, 0x5b, 0xd5, 0xc7, 0x51, 0x91, 0x1d, 0xe1, 0x2a, 0x4b, 0xc4, 0x47, 0xf1, 0xbc, 0x7a, 0xb3, 0xcb, 0xc8, 0xb6, 0x7c, 0xac, 0x90, 0x05, 0xfd, 0xf3, 0xf9, 0x52, 0x3a, 0x11, 0x6b}} , {{0x3d, 0xc1, 0x27, 0xf3, 0x59, 0x43, 0x95, 0x90, 0xc5, 0x96, 0x79, 0xf5, 0xf4, 0x95, 0x65, 0x29, 0x06, 0x9c, 0x51, 0x05, 0x18, 0xda, 0xb8, 0x2e, 0x79, 0x7e, 0x69, 0x59, 0x71, 0x01, 0xeb, 0x1a}}}, {{{0x15, 0x06, 0x49, 0xb6, 0x8a, 0x3c, 0xea, 0x2f, 0x34, 0x20, 0x14, 0xc3, 0xaa, 0xd6, 0xaf, 0x2c, 0x3e, 0xbd, 0x65, 0x20, 0xe2, 0x4d, 0x4b, 0x3b, 0xeb, 0x9f, 0x4a, 0xc3, 0xad, 0xa4, 0x3b, 0x60}} , {{0xbc, 0x58, 0xe6, 0xc0, 0x95, 0x2a, 0x2a, 0x81, 0x9a, 0x7a, 0xf3, 0xd2, 0x06, 0xbe, 0x48, 0xbc, 0x0c, 0xc5, 0x46, 0xe0, 0x6a, 0xd4, 0xac, 0x0f, 0xd9, 0xcc, 0x82, 0x34, 0x2c, 0xaf, 0xdb, 0x1f}}}, {{{0xf7, 0x17, 0x13, 0xbd, 0xfb, 0xbc, 0xd2, 0xec, 0x45, 0xb3, 0x15, 0x31, 0xe9, 0xaf, 0x82, 0x84, 0x3d, 0x28, 0xc6, 0xfc, 0x11, 0xf5, 0x41, 0xb5, 0x8b, 0xd3, 0x12, 0x76, 0x52, 0xe7, 0x1a, 0x3c}} , {{0x4e, 0x36, 0x11, 0x07, 0xa2, 0x15, 0x20, 0x51, 0xc4, 0x2a, 0xc3, 0x62, 0x8b, 0x5e, 0x7f, 0xa6, 0x0f, 0xf9, 0x45, 0x85, 0x6c, 0x11, 0x86, 0xb7, 0x7e, 0xe5, 0xd7, 0xf9, 0xc3, 0x91, 0x1c, 0x05}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xea, 0xd6, 0xde, 0x29, 0x3a, 0x00, 0xb9, 0x02, 0x59, 0xcb, 0x26, 0xc4, 0xba, 0x99, 0xb1, 0x97, 0x2f, 0x8e, 0x00, 0x92, 0x26, 0x4f, 0x52, 0xeb, 0x47, 0x1b, 0x89, 0x8b, 0x24, 0xc0, 0x13, 0x7d}} , {{0xd5, 0x20, 0x5b, 0x80, 0xa6, 0x80, 0x20, 0x95, 0xc3, 0xe9, 0x9f, 0x8e, 0x87, 0x9e, 0x1e, 0x9e, 0x7a, 0xc7, 0xcc, 0x75, 0x6c, 0xa5, 0xf1, 0x91, 0x1a, 0xa8, 0x01, 0x2c, 0xab, 0x76, 0xa9, 0x59}}}, {{{0xde, 0xc9, 0xb1, 0x31, 0x10, 0x16, 0xaa, 0x35, 0x14, 0x6a, 0xd4, 0xb5, 0x34, 0x82, 0x71, 0xd2, 0x4a, 0x5d, 0x9a, 0x1f, 0x53, 0x26, 0x3c, 0xe5, 0x8e, 0x8d, 0x33, 0x7f, 0xff, 0xa9, 0xd5, 0x17}} , {{0x89, 0xaf, 0xf6, 0xa4, 0x64, 0xd5, 0x10, 0xe0, 0x1d, 0xad, 0xef, 0x44, 0xbd, 0xda, 0x83, 0xac, 0x7a, 0xa8, 0xf0, 0x1c, 0x07, 0xf9, 0xc3, 0x43, 0x6c, 0x3f, 0xb7, 0xd3, 0x87, 0x22, 0x02, 0x73}}}, {{{0x64, 0x1d, 0x49, 0x13, 0x2f, 0x71, 0xec, 0x69, 0x87, 0xd0, 0x42, 0xee, 0x13, 0xec, 0xe3, 0xed, 0x56, 0x7b, 0xbf, 0xbd, 0x8c, 0x2f, 0x7d, 0x7b, 0x9d, 0x28, 0xec, 0x8e, 0x76, 0x2f, 0x6f, 0x08}} , {{0x22, 0xf5, 0x5f, 0x4d, 0x15, 0xef, 0xfc, 0x4e, 0x57, 0x03, 0x36, 0x89, 0xf0, 0xeb, 0x5b, 0x91, 0xd6, 0xe2, 0xca, 0x01, 0xa5, 0xee, 0x52, 0xec, 0xa0, 0x3c, 0x8f, 0x33, 0x90, 0x5a, 0x94, 0x72}}}, {{{0x8a, 0x4b, 0xe7, 0x38, 0xbc, 0xda, 0xc2, 0xb0, 0x85, 0xe1, 0x4a, 0xfe, 0x2d, 0x44, 0x84, 0xcb, 0x20, 0x6b, 0x2d, 0xbf, 0x11, 0x9c, 0xd7, 0xbe, 0xd3, 0x3e, 0x5f, 0xbf, 0x68, 0xbc, 0xa8, 0x07}} , {{0x01, 0x89, 0x28, 0x22, 0x6a, 0x78, 0xaa, 0x29, 0x03, 0xc8, 0x74, 0x95, 0x03, 0x3e, 0xdc, 0xbd, 0x07, 0x13, 0xa8, 0xa2, 0x20, 0x2d, 0xb3, 0x18, 0x70, 0x42, 0xfd, 0x7a, 0xc4, 0xd7, 0x49, 0x72}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x02, 0xff, 0x32, 0x2b, 0x5c, 0x93, 0x54, 0x32, 0xe8, 0x57, 0x54, 0x1a, 0x8b, 0x33, 0x60, 0x65, 0xd3, 0x67, 0xa4, 0xc1, 0x26, 0xc4, 0xa4, 0x34, 0x1f, 0x9b, 0xa7, 0xa9, 0xf4, 0xd9, 0x4f, 0x5b}} , {{0x46, 0x8d, 0xb0, 0x33, 0x54, 0x26, 0x5b, 0x68, 0xdf, 0xbb, 0xc5, 0xec, 0xc2, 0xf9, 0x3c, 0x5a, 0x37, 0xc1, 0x8e, 0x27, 0x47, 0xaa, 0x49, 0x5a, 0xf8, 0xfb, 0x68, 0x04, 0x23, 0xd1, 0xeb, 0x40}}}, {{{0x65, 0xa5, 0x11, 0x84, 0x8a, 0x67, 0x9d, 0x9e, 0xd1, 0x44, 0x68, 0x7a, 0x34, 0xe1, 0x9f, 0xa3, 0x54, 0xcd, 0x07, 0xca, 0x79, 0x1f, 0x54, 0x2f, 0x13, 0x70, 0x4e, 0xee, 0xa2, 0xfa, 0xe7, 0x5d}} , {{0x36, 0xec, 0x54, 0xf8, 0xce, 0xe4, 0x85, 0xdf, 0xf6, 0x6f, 0x1d, 0x90, 0x08, 0xbc, 0xe8, 0xc0, 0x92, 0x2d, 0x43, 0x6b, 0x92, 0xa9, 0x8e, 0xab, 0x0a, 0x2e, 0x1c, 0x1e, 0x64, 0x23, 0x9f, 0x2c}}}, {{{0xa7, 0xd6, 0x2e, 0xd5, 0xcc, 0xd4, 0xcb, 0x5a, 0x3b, 0xa7, 0xf9, 0x46, 0x03, 0x1d, 0xad, 0x2b, 0x34, 0x31, 0x90, 0x00, 0x46, 0x08, 0x82, 0x14, 0xc4, 0xe0, 0x9c, 0xf0, 0xe3, 0x55, 0x43, 0x31}} , {{0x60, 0xd6, 0xdd, 0x78, 0xe6, 0xd4, 0x22, 0x42, 0x1f, 0x00, 0xf9, 0xb1, 0x6a, 0x63, 0xe2, 0x92, 0x59, 0xd1, 0x1a, 0xb7, 0x00, 0x54, 0x29, 0xc9, 0xc1, 0xf6, 0x6f, 0x7a, 0xc5, 0x3c, 0x5f, 0x65}}}, {{{0x27, 0x4f, 0xd0, 0x72, 0xb1, 0x11, 0x14, 0x27, 0x15, 0x94, 0x48, 0x81, 0x7e, 0x74, 0xd8, 0x32, 0xd5, 0xd1, 0x11, 0x28, 0x60, 0x63, 0x36, 0x32, 0x37, 0xb5, 0x13, 0x1c, 0xa0, 0x37, 0xe3, 0x74}} , {{0xf1, 0x25, 0x4e, 0x11, 0x96, 0x67, 0xe6, 0x1c, 0xc2, 0xb2, 0x53, 0xe2, 0xda, 0x85, 0xee, 0xb2, 0x9f, 0x59, 0xf3, 0xba, 0xbd, 0xfa, 0xcf, 0x6e, 0xf9, 0xda, 0xa4, 0xb3, 0x02, 0x8f, 0x64, 0x08}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x34, 0x94, 0xf2, 0x64, 0x54, 0x47, 0x37, 0x07, 0x40, 0x8a, 0x20, 0xba, 0x4a, 0x55, 0xd7, 0x3f, 0x47, 0xba, 0x25, 0x23, 0x14, 0xb0, 0x2c, 0xe8, 0x55, 0xa8, 0xa6, 0xef, 0x51, 0xbd, 0x6f, 0x6a}} , {{0x71, 0xd6, 0x16, 0x76, 0xb2, 0x06, 0xea, 0x79, 0xf5, 0xc4, 0xc3, 0x52, 0x7e, 0x61, 0xd1, 0xe1, 0xad, 0x70, 0x78, 0x1d, 0x16, 0x11, 0xf8, 0x7c, 0x2b, 0xfc, 0x55, 0x9f, 0x52, 0xf8, 0xf5, 0x16}}}, {{{0x34, 0x96, 0x9a, 0xf6, 0xc5, 0xe0, 0x14, 0x03, 0x24, 0x0e, 0x4c, 0xad, 0x9e, 0x9a, 0x70, 0x23, 0x96, 0xb2, 0xf1, 0x2e, 0x9d, 0xc3, 0x32, 0x9b, 0x54, 0xa5, 0x73, 0xde, 0x88, 0xb1, 0x3e, 0x24}} , {{0xf6, 0xe2, 0x4c, 0x1f, 0x5b, 0xb2, 0xaf, 0x82, 0xa5, 0xcf, 0x81, 0x10, 0x04, 0xef, 0xdb, 0xa2, 0xcc, 0x24, 0xb2, 0x7e, 0x0b, 0x7a, 0xeb, 0x01, 0xd8, 0x52, 0xf4, 0x51, 0x89, 0x29, 0x79, 0x37}}}, {{{0x74, 0xde, 0x12, 0xf3, 0x68, 0xb7, 0x66, 0xc3, 0xee, 0x68, 0xdc, 0x81, 0xb5, 0x55, 0x99, 0xab, 0xd9, 0x28, 0x63, 0x6d, 0x8b, 0x40, 0x69, 0x75, 0x6c, 0xcd, 0x5c, 0x2a, 0x7e, 0x32, 0x7b, 0x29}} , {{0x02, 0xcc, 0x22, 0x74, 0x4d, 0x19, 0x07, 0xc0, 0xda, 0xb5, 0x76, 0x51, 0x2a, 0xaa, 0xa6, 0x0a, 0x5f, 0x26, 0xd4, 0xbc, 0xaf, 0x48, 0x88, 0x7f, 0x02, 0xbc, 0xf2, 0xe1, 0xcf, 0xe9, 0xdd, 0x15}}}, {{{0xed, 0xb5, 0x9a, 0x8c, 0x9a, 0xdd, 0x27, 0xf4, 0x7f, 0x47, 0xd9, 0x52, 0xa7, 0xcd, 0x65, 0xa5, 0x31, 0x22, 0xed, 0xa6, 0x63, 0x5b, 0x80, 0x4a, 0xad, 0x4d, 0xed, 0xbf, 0xee, 0x49, 0xb3, 0x06}} , {{0xf8, 0x64, 0x8b, 0x60, 0x90, 0xe9, 0xde, 0x44, 0x77, 0xb9, 0x07, 0x36, 0x32, 0xc2, 0x50, 0xf5, 0x65, 0xdf, 0x48, 0x4c, 0x37, 0xaa, 0x68, 0xab, 0x9a, 0x1f, 0x3e, 0xff, 0x89, 0x92, 0xa0, 0x07}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x7d, 0x4f, 0x9c, 0x19, 0xc0, 0x4a, 0x31, 0xec, 0xf9, 0xaa, 0xeb, 0xb2, 0x16, 0x9c, 0xa3, 0x66, 0x5f, 0xd1, 0xd4, 0xed, 0xb8, 0x92, 0x1c, 0xab, 0xda, 0xea, 0xd9, 0x57, 0xdf, 0x4c, 0x2a, 0x48}} , {{0x4b, 0xb0, 0x4e, 0x6e, 0x11, 0x3b, 0x51, 0xbd, 0x6a, 0xfd, 0xe4, 0x25, 0xa5, 0x5f, 0x11, 0x3f, 0x98, 0x92, 0x51, 0x14, 0xc6, 0x5f, 0x3c, 0x0b, 0xa8, 0xf7, 0xc2, 0x81, 0x43, 0xde, 0x91, 0x73}}}, {{{0x3c, 0x8f, 0x9f, 0x33, 0x2a, 0x1f, 0x43, 0x33, 0x8f, 0x68, 0xff, 0x1f, 0x3d, 0x73, 0x6b, 0xbf, 0x68, 0xcc, 0x7d, 0x13, 0x6c, 0x24, 0x4b, 0xcc, 0x4d, 0x24, 0x0d, 0xfe, 0xde, 0x86, 0xad, 0x3b}} , {{0x79, 0x51, 0x81, 0x01, 0xdc, 0x73, 0x53, 0xe0, 0x6e, 0x9b, 0xea, 0x68, 0x3f, 0x5c, 0x14, 0x84, 0x53, 0x8d, 0x4b, 0xc0, 0x9f, 0x9f, 0x89, 0x2b, 0x8c, 0xba, 0x86, 0xfa, 0xf2, 0xcd, 0xe3, 0x2d}}}, {{{0x06, 0xf9, 0x29, 0x5a, 0xdb, 0x3d, 0x84, 0x52, 0xab, 0xcc, 0x6b, 0x60, 0x9d, 0xb7, 0x4a, 0x0e, 0x36, 0x63, 0x91, 0xad, 0xa0, 0x95, 0xb0, 0x97, 0x89, 0x4e, 0xcf, 0x7d, 0x3c, 0xe5, 0x7c, 0x28}} , {{0x2e, 0x69, 0x98, 0xfd, 0xc6, 0xbd, 0xcc, 0xca, 0xdf, 0x9a, 0x44, 0x7e, 0x9d, 0xca, 0x89, 0x6d, 0xbf, 0x27, 0xc2, 0xf8, 0xcd, 0x46, 0x00, 0x2b, 0xb5, 0x58, 0x4e, 0xb7, 0x89, 0x09, 0xe9, 0x2d}}}, {{{0x54, 0xbe, 0x75, 0xcb, 0x05, 0xb0, 0x54, 0xb7, 0xe7, 0x26, 0x86, 0x4a, 0xfc, 0x19, 0xcf, 0x27, 0x46, 0xd4, 0x22, 0x96, 0x5a, 0x11, 0xe8, 0xd5, 0x1b, 0xed, 0x71, 0xc5, 0x5d, 0xc8, 0xaf, 0x45}} , {{0x40, 0x7b, 0x77, 0x57, 0x49, 0x9e, 0x80, 0x39, 0x23, 0xee, 0x81, 0x0b, 0x22, 0xcf, 0xdb, 0x7a, 0x2f, 0x14, 0xb8, 0x57, 0x8f, 0xa1, 0x39, 0x1e, 0x77, 0xfc, 0x0b, 0xa6, 0xbf, 0x8a, 0x0c, 0x6c}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x77, 0x3a, 0xd4, 0xd8, 0x27, 0xcf, 0xe8, 0xa1, 0x72, 0x9d, 0xca, 0xdd, 0x0d, 0x96, 0xda, 0x79, 0xed, 0x56, 0x42, 0x15, 0x60, 0xc7, 0x1c, 0x6b, 0x26, 0x30, 0xf6, 0x6a, 0x95, 0x67, 0xf3, 0x0a}} , {{0xc5, 0x08, 0xa4, 0x2b, 0x2f, 0xbd, 0x31, 0x81, 0x2a, 0xa6, 0xb6, 0xe4, 0x00, 0x91, 0xda, 0x3d, 0xb2, 0xb0, 0x96, 0xce, 0x8a, 0xd2, 0x8d, 0x70, 0xb3, 0xd3, 0x34, 0x01, 0x90, 0x8d, 0x10, 0x21}}}, {{{0x33, 0x0d, 0xe7, 0xba, 0x4f, 0x07, 0xdf, 0x8d, 0xea, 0x7d, 0xa0, 0xc5, 0xd6, 0xb1, 0xb0, 0xe5, 0x57, 0x1b, 0x5b, 0xf5, 0x45, 0x13, 0x14, 0x64, 0x5a, 0xeb, 0x5c, 0xfc, 0x54, 0x01, 0x76, 0x2b}} , {{0x02, 0x0c, 0xc2, 0xaf, 0x96, 0x36, 0xfe, 0x4a, 0xe2, 0x54, 0x20, 0x6a, 0xeb, 0xb2, 0x9f, 0x62, 0xd7, 0xce, 0xa2, 0x3f, 0x20, 0x11, 0x34, 0x37, 0xe0, 0x42, 0xed, 0x6f, 0xf9, 0x1a, 0xc8, 0x7d}}}, {{{0xd8, 0xb9, 0x11, 0xe8, 0x36, 0x3f, 0x42, 0xc1, 0xca, 0xdc, 0xd3, 0xf1, 0xc8, 0x23, 0x3d, 0x4f, 0x51, 0x7b, 0x9d, 0x8d, 0xd8, 0xe4, 0xa0, 0xaa, 0xf3, 0x04, 0xd6, 0x11, 0x93, 0xc8, 0x35, 0x45}} , {{0x61, 0x36, 0xd6, 0x08, 0x90, 0xbf, 0xa7, 0x7a, 0x97, 0x6c, 0x0f, 0x84, 0xd5, 0x33, 0x2d, 0x37, 0xc9, 0x6a, 0x80, 0x90, 0x3d, 0x0a, 0xa2, 0xaa, 0xe1, 0xb8, 0x84, 0xba, 0x61, 0x36, 0xdd, 0x69}}}, {{{0x6b, 0xdb, 0x5b, 0x9c, 0xc6, 0x92, 0xbc, 0x23, 0xaf, 0xc5, 0xb8, 0x75, 0xf8, 0x42, 0xfa, 0xd6, 0xb6, 0x84, 0x94, 0x63, 0x98, 0x93, 0x48, 0x78, 0x38, 0xcd, 0xbb, 0x18, 0x34, 0xc3, 0xdb, 0x67}} , {{0x96, 0xf3, 0x3a, 0x09, 0x56, 0xb0, 0x6f, 0x7c, 0x51, 0x1e, 0x1b, 0x39, 0x48, 0xea, 0xc9, 0x0c, 0x25, 0xa2, 0x7a, 0xca, 0xe7, 0x92, 0xfc, 0x59, 0x30, 0xa3, 0x89, 0x85, 0xdf, 0x6f, 0x43, 0x38}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x79, 0x84, 0x44, 0x19, 0xbd, 0xe9, 0x54, 0xc4, 0xc0, 0x6e, 0x2a, 0xa8, 0xa8, 0x9b, 0x43, 0xd5, 0x71, 0x22, 0x5f, 0xdc, 0x01, 0xfa, 0xdf, 0xb3, 0xb8, 0x47, 0x4b, 0x0a, 0xa5, 0x44, 0xea, 0x29}} , {{0x05, 0x90, 0x50, 0xaf, 0x63, 0x5f, 0x9d, 0x9e, 0xe1, 0x9d, 0x38, 0x97, 0x1f, 0x6c, 0xac, 0x30, 0x46, 0xb2, 0x6a, 0x19, 0xd1, 0x4b, 0xdb, 0xbb, 0x8c, 0xda, 0x2e, 0xab, 0xc8, 0x5a, 0x77, 0x6c}}}, {{{0x2b, 0xbe, 0xaf, 0xa1, 0x6d, 0x2f, 0x0b, 0xb1, 0x8f, 0xe3, 0xe0, 0x38, 0xcd, 0x0b, 0x41, 0x1b, 0x4a, 0x15, 0x07, 0xf3, 0x6f, 0xdc, 0xb8, 0xe9, 0xde, 0xb2, 0xa3, 0x40, 0x01, 0xa6, 0x45, 0x1e}} , {{0x76, 0x0a, 0xda, 0x8d, 0x2c, 0x07, 0x3f, 0x89, 0x7d, 0x04, 0xad, 0x43, 0x50, 0x6e, 0xd2, 0x47, 0xcb, 0x8a, 0xe6, 0x85, 0x1a, 0x24, 0xf3, 0xd2, 0x60, 0xfd, 0xdf, 0x73, 0xa4, 0x0d, 0x73, 0x0e}}}, {{{0xfd, 0x67, 0x6b, 0x71, 0x9b, 0x81, 0x53, 0x39, 0x39, 0xf4, 0xb8, 0xd5, 0xc3, 0x30, 0x9b, 0x3b, 0x7c, 0xa3, 0xf0, 0xd0, 0x84, 0x21, 0xd6, 0xbf, 0xb7, 0x4c, 0x87, 0x13, 0x45, 0x2d, 0xa7, 0x55}} , {{0x5d, 0x04, 0xb3, 0x40, 0x28, 0x95, 0x2d, 0x30, 0x83, 0xec, 0x5e, 0xe4, 0xff, 0x75, 0xfe, 0x79, 0x26, 0x9d, 0x1d, 0x36, 0xcd, 0x0a, 0x15, 0xd2, 0x24, 0x14, 0x77, 0x71, 0xd7, 0x8a, 0x1b, 0x04}}}, {{{0x5d, 0x93, 0xc9, 0xbe, 0xaa, 0x90, 0xcd, 0x9b, 0xfb, 0x73, 0x7e, 0xb0, 0x64, 0x98, 0x57, 0x44, 0x42, 0x41, 0xb1, 0xaf, 0xea, 0xc1, 0xc3, 0x22, 0xff, 0x60, 0x46, 0xcb, 0x61, 0x81, 0x70, 0x61}} , {{0x0d, 0x82, 0xb9, 0xfe, 0x21, 0xcd, 0xc4, 0xf5, 0x98, 0x0c, 0x4e, 0x72, 0xee, 0x87, 0x49, 0xf8, 0xa1, 0x95, 0xdf, 0x8f, 0x2d, 0xbd, 0x21, 0x06, 0x7c, 0x15, 0xe8, 0x12, 0x6d, 0x93, 0xd6, 0x38}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x91, 0xf7, 0x51, 0xd9, 0xef, 0x7d, 0x42, 0x01, 0x13, 0xe9, 0xb8, 0x7f, 0xa6, 0x49, 0x17, 0x64, 0x21, 0x80, 0x83, 0x2c, 0x63, 0x4c, 0x60, 0x09, 0x59, 0x91, 0x92, 0x77, 0x39, 0x51, 0xf4, 0x48}} , {{0x60, 0xd5, 0x22, 0x83, 0x08, 0x2f, 0xff, 0x99, 0x3e, 0x69, 0x6d, 0x88, 0xda, 0xe7, 0x5b, 0x52, 0x26, 0x31, 0x2a, 0xe5, 0x89, 0xde, 0x68, 0x90, 0xb6, 0x22, 0x5a, 0xbd, 0xd3, 0x85, 0x53, 0x31}}}, {{{0xd8, 0xce, 0xdc, 0xf9, 0x3c, 0x4b, 0xa2, 0x1d, 0x2c, 0x2f, 0x36, 0xbe, 0x7a, 0xfc, 0xcd, 0xbc, 0xdc, 0xf9, 0x30, 0xbd, 0xff, 0x05, 0xc7, 0xe4, 0x8e, 0x17, 0x62, 0xf8, 0x4d, 0xa0, 0x56, 0x79}} , {{0x82, 0xe7, 0xf6, 0xba, 0x53, 0x84, 0x0a, 0xa3, 0x34, 0xff, 0x3c, 0xa3, 0x6a, 0xa1, 0x37, 0xea, 0xdd, 0xb6, 0x95, 0xb3, 0x78, 0x19, 0x76, 0x1e, 0x55, 0x2f, 0x77, 0x2e, 0x7f, 0xc1, 0xea, 0x5e}}}, {{{0x83, 0xe1, 0x6e, 0xa9, 0x07, 0x33, 0x3e, 0x83, 0xff, 0xcb, 0x1c, 0x9f, 0xb1, 0xa3, 0xb4, 0xc9, 0xe1, 0x07, 0x97, 0xff, 0xf8, 0x23, 0x8f, 0xce, 0x40, 0xfd, 0x2e, 0x5e, 0xdb, 0x16, 0x43, 0x2d}} , {{0xba, 0x38, 0x02, 0xf7, 0x81, 0x43, 0x83, 0xa3, 0x20, 0x4f, 0x01, 0x3b, 0x8a, 0x04, 0x38, 0x31, 0xc6, 0x0f, 0xc8, 0xdf, 0xd7, 0xfa, 0x2f, 0x88, 0x3f, 0xfc, 0x0c, 0x76, 0xc4, 0xa6, 0x45, 0x72}}}, {{{0xbb, 0x0c, 0xbc, 0x6a, 0xa4, 0x97, 0x17, 0x93, 0x2d, 0x6f, 0xde, 0x72, 0x10, 0x1c, 0x08, 0x2c, 0x0f, 0x80, 0x32, 0x68, 0x27, 0xd4, 0xab, 0xdd, 0xc5, 0x58, 0x61, 0x13, 0x6d, 0x11, 0x1e, 0x4d}} , {{0x1a, 0xb9, 0xc9, 0x10, 0xfb, 0x1e, 0x4e, 0xf4, 0x84, 0x4b, 0x8a, 0x5e, 0x7b, 0x4b, 0xe8, 0x43, 0x8c, 0x8f, 0x00, 0xb5, 0x54, 0x13, 0xc5, 0x5c, 0xb6, 0x35, 0x4e, 0x9d, 0xe4, 0x5b, 0x41, 0x6d}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x15, 0x7d, 0x12, 0x48, 0x82, 0x14, 0x42, 0xcd, 0x32, 0xd4, 0x4b, 0xc1, 0x72, 0x61, 0x2a, 0x8c, 0xec, 0xe2, 0xf8, 0x24, 0x45, 0x94, 0xe3, 0xbe, 0xdd, 0x67, 0xa8, 0x77, 0x5a, 0xae, 0x5b, 0x4b}} , {{0xcb, 0x77, 0x9a, 0x20, 0xde, 0xb8, 0x23, 0xd9, 0xa0, 0x0f, 0x8c, 0x7b, 0xa5, 0xcb, 0xae, 0xb6, 0xec, 0x42, 0x67, 0x0e, 0x58, 0xa4, 0x75, 0x98, 0x21, 0x71, 0x84, 0xb3, 0xe0, 0x76, 0x94, 0x73}}}, {{{0xdf, 0xfc, 0x69, 0x28, 0x23, 0x3f, 0x5b, 0xf8, 0x3b, 0x24, 0x37, 0xf3, 0x1d, 0xd5, 0x22, 0x6b, 0xd0, 0x98, 0xa8, 0x6c, 0xcf, 0xff, 0x06, 0xe1, 0x13, 0xdf, 0xb9, 0xc1, 0x0c, 0xa9, 0xbf, 0x33}} , {{0xd9, 0x81, 0xda, 0xb2, 0x4f, 0x82, 0x9d, 0x43, 0x81, 0x09, 0xf1, 0xd2, 0x01, 0xef, 0xac, 0xf4, 0x2d, 0x7d, 0x01, 0x09, 0xf1, 0xff, 0xa5, 0x9f, 0xe5, 0xca, 0x27, 0x63, 0xdb, 0x20, 0xb1, 0x53}}}, {{{0x67, 0x02, 0xe8, 0xad, 0xa9, 0x34, 0xd4, 0xf0, 0x15, 0x81, 0xaa, 0xc7, 0x4d, 0x87, 0x94, 0xea, 0x75, 0xe7, 0x4c, 0x94, 0x04, 0x0e, 0x69, 0x87, 0xe7, 0x51, 0x91, 0x10, 0x03, 0xc7, 0xbe, 0x56}} , {{0x32, 0xfb, 0x86, 0xec, 0x33, 0x6b, 0x2e, 0x51, 0x2b, 0xc8, 0xfa, 0x6c, 0x70, 0x47, 0x7e, 0xce, 0x05, 0x0c, 0x71, 0xf3, 0xb4, 0x56, 0xa6, 0xdc, 0xcc, 0x78, 0x07, 0x75, 0xd0, 0xdd, 0xb2, 0x6a}}}, {{{0xc6, 0xef, 0xb9, 0xc0, 0x2b, 0x22, 0x08, 0x1e, 0x71, 0x70, 0xb3, 0x35, 0x9c, 0x7a, 0x01, 0x92, 0x44, 0x9a, 0xf6, 0xb0, 0x58, 0x95, 0xc1, 0x9b, 0x02, 0xed, 0x2d, 0x7c, 0x34, 0x29, 0x49, 0x44}} , {{0x45, 0x62, 0x1d, 0x2e, 0xff, 0x2a, 0x1c, 0x21, 0xa4, 0x25, 0x7b, 0x0d, 0x8c, 0x15, 0x39, 0xfc, 0x8f, 0x7c, 0xa5, 0x7d, 0x1e, 0x25, 0xa3, 0x45, 0xd6, 0xab, 0xbd, 0xcb, 0xc5, 0x5e, 0x78, 0x77}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xd0, 0xd3, 0x42, 0xed, 0x1d, 0x00, 0x3c, 0x15, 0x2c, 0x9c, 0x77, 0x81, 0xd2, 0x73, 0xd1, 0x06, 0xd5, 0xc4, 0x7f, 0x94, 0xbb, 0x92, 0x2d, 0x2c, 0x4b, 0x45, 0x4b, 0xe9, 0x2a, 0x89, 0x6b, 0x2b}} , {{0xd2, 0x0c, 0x88, 0xc5, 0x48, 0x4d, 0xea, 0x0d, 0x4a, 0xc9, 0x52, 0x6a, 0x61, 0x79, 0xe9, 0x76, 0xf3, 0x85, 0x52, 0x5c, 0x1b, 0x2c, 0xe1, 0xd6, 0xc4, 0x0f, 0x18, 0x0e, 0x4e, 0xf6, 0x1c, 0x7f}}}, {{{0xb4, 0x04, 0x2e, 0x42, 0xcb, 0x1f, 0x2b, 0x11, 0x51, 0x7b, 0x08, 0xac, 0xaa, 0x3e, 0x9e, 0x52, 0x60, 0xb7, 0xc2, 0x61, 0x57, 0x8c, 0x84, 0xd5, 0x18, 0xa6, 0x19, 0xfc, 0xb7, 0x75, 0x91, 0x1b}} , {{0xe8, 0x68, 0xca, 0x44, 0xc8, 0x38, 0x38, 0xcc, 0x53, 0x0a, 0x32, 0x35, 0xcc, 0x52, 0xcb, 0x0e, 0xf7, 0xc5, 0xe7, 0xec, 0x3d, 0x85, 0xcc, 0x58, 0xe2, 0x17, 0x47, 0xff, 0x9f, 0xa5, 0x30, 0x17}}}, {{{0xe3, 0xae, 0xc8, 0xc1, 0x71, 0x75, 0x31, 0x00, 0x37, 0x41, 0x5c, 0x0e, 0x39, 0xda, 0x73, 0xa0, 0xc7, 0x97, 0x36, 0x6c, 0x5b, 0xf2, 0xee, 0x64, 0x0a, 0x3d, 0x89, 0x1e, 0x1d, 0x49, 0x8c, 0x37}} , {{0x4c, 0xe6, 0xb0, 0xc1, 0xa5, 0x2a, 0x82, 0x09, 0x08, 0xad, 0x79, 0x9c, 0x56, 0xf6, 0xf9, 0xc1, 0xd7, 0x7c, 0x39, 0x7f, 0x93, 0xca, 0x11, 0x55, 0xbf, 0x07, 0x1b, 0x82, 0x29, 0x69, 0x95, 0x5c}}}, {{{0x87, 0xee, 0xa6, 0x56, 0x9e, 0xc2, 0x9a, 0x56, 0x24, 0x42, 0x85, 0x4d, 0x98, 0x31, 0x1e, 0x60, 0x4d, 0x87, 0x85, 0x04, 0xae, 0x46, 0x12, 0xf9, 0x8e, 0x7f, 0xe4, 0x7f, 0xf6, 0x1c, 0x37, 0x01}} , {{0x73, 0x4c, 0xb6, 0xc5, 0xc4, 0xe9, 0x6c, 0x85, 0x48, 0x4a, 0x5a, 0xac, 0xd9, 0x1f, 0x43, 0xf8, 0x62, 0x5b, 0xee, 0x98, 0x2a, 0x33, 0x8e, 0x79, 0xce, 0x61, 0x06, 0x35, 0xd8, 0xd7, 0xca, 0x71}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x72, 0xd3, 0xae, 0xa6, 0xca, 0x8f, 0xcd, 0xcc, 0x78, 0x8e, 0x19, 0x4d, 0xa7, 0xd2, 0x27, 0xe9, 0xa4, 0x3c, 0x16, 0x5b, 0x84, 0x80, 0xf9, 0xd0, 0xcc, 0x6a, 0x1e, 0xca, 0x1e, 0x67, 0xbd, 0x63}} , {{0x7b, 0x6e, 0x2a, 0xd2, 0x87, 0x48, 0xff, 0xa1, 0xca, 0xe9, 0x15, 0x85, 0xdc, 0xdb, 0x2c, 0x39, 0x12, 0x91, 0xa9, 0x20, 0xaa, 0x4f, 0x29, 0xf4, 0x15, 0x7a, 0xd2, 0xf5, 0x32, 0xcc, 0x60, 0x04}}}, {{{0xe5, 0x10, 0x47, 0x3b, 0xfa, 0x90, 0xfc, 0x30, 0xb5, 0xea, 0x6f, 0x56, 0x8f, 0xfb, 0x0e, 0xa7, 0x3b, 0xc8, 0xb2, 0xff, 0x02, 0x7a, 0x33, 0x94, 0x93, 0x2a, 0x03, 0xe0, 0x96, 0x3a, 0x6c, 0x0f}} , {{0x5a, 0x63, 0x67, 0xe1, 0x9b, 0x47, 0x78, 0x9f, 0x38, 0x79, 0xac, 0x97, 0x66, 0x1d, 0x5e, 0x51, 0xee, 0x24, 0x42, 0xe8, 0x58, 0x4b, 0x8a, 0x03, 0x75, 0x86, 0x37, 0x86, 0xe2, 0x97, 0x4e, 0x3d}}}, {{{0x3f, 0x75, 0x8e, 0xb4, 0xff, 0xd8, 0xdd, 0xd6, 0x37, 0x57, 0x9d, 0x6d, 0x3b, 0xbd, 0xd5, 0x60, 0x88, 0x65, 0x9a, 0xb9, 0x4a, 0x68, 0x84, 0xa2, 0x67, 0xdd, 0x17, 0x25, 0x97, 0x04, 0x8b, 0x5e}} , {{0xbb, 0x40, 0x5e, 0xbc, 0x16, 0x92, 0x05, 0xc4, 0xc0, 0x4e, 0x72, 0x90, 0x0e, 0xab, 0xcf, 0x8a, 0xed, 0xef, 0xb9, 0x2d, 0x3b, 0xf8, 0x43, 0x5b, 0xba, 0x2d, 0xeb, 0x2f, 0x52, 0xd2, 0xd1, 0x5a}}}, {{{0x40, 0xb4, 0xab, 0xe6, 0xad, 0x9f, 0x46, 0x69, 0x4a, 0xb3, 0x8e, 0xaa, 0xea, 0x9c, 0x8a, 0x20, 0x16, 0x5d, 0x8c, 0x13, 0xbd, 0xf6, 0x1d, 0xc5, 0x24, 0xbd, 0x90, 0x2a, 0x1c, 0xc7, 0x13, 0x3b}} , {{0x54, 0xdc, 0x16, 0x0d, 0x18, 0xbe, 0x35, 0x64, 0x61, 0x52, 0x02, 0x80, 0xaf, 0x05, 0xf7, 0xa6, 0x42, 0xd3, 0x8f, 0x2e, 0x79, 0x26, 0xa8, 0xbb, 0xb2, 0x17, 0x48, 0xb2, 0x7a, 0x0a, 0x89, 0x14}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x20, 0xa8, 0x88, 0xe3, 0x91, 0xc0, 0x6e, 0xbb, 0x8a, 0x27, 0x82, 0x51, 0x83, 0xb2, 0x28, 0xa9, 0x83, 0xeb, 0xa6, 0xa9, 0x4d, 0x17, 0x59, 0x22, 0x54, 0x00, 0x50, 0x45, 0xcb, 0x48, 0x4b, 0x18}} , {{0x33, 0x7c, 0xe7, 0x26, 0xba, 0x4d, 0x32, 0xfe, 0x53, 0xf4, 0xfa, 0x83, 0xe3, 0xa5, 0x79, 0x66, 0x73, 0xef, 0x80, 0x23, 0x68, 0xc2, 0x60, 0xdd, 0xa9, 0x33, 0xdc, 0x03, 0x7a, 0xe0, 0xe0, 0x3e}}}, {{{0x34, 0x5c, 0x13, 0xfb, 0xc0, 0xe3, 0x78, 0x2b, 0x54, 0x58, 0x22, 0x9b, 0x76, 0x81, 0x7f, 0x93, 0x9c, 0x25, 0x3c, 0xd2, 0xe9, 0x96, 0x21, 0x26, 0x08, 0xf5, 0xed, 0x95, 0x11, 0xae, 0x04, 0x5a}} , {{0xb9, 0xe8, 0xc5, 0x12, 0x97, 0x1f, 0x83, 0xfe, 0x3e, 0x94, 0x99, 0xd4, 0x2d, 0xf9, 0x52, 0x59, 0x5c, 0x82, 0xa6, 0xf0, 0x75, 0x7e, 0xe8, 0xec, 0xcc, 0xac, 0x18, 0x21, 0x09, 0x67, 0x66, 0x67}}}, {{{0xb3, 0x40, 0x29, 0xd1, 0xcb, 0x1b, 0x08, 0x9e, 0x9c, 0xb7, 0x53, 0xb9, 0x3b, 0x71, 0x08, 0x95, 0x12, 0x1a, 0x58, 0xaf, 0x7e, 0x82, 0x52, 0x43, 0x4f, 0x11, 0x39, 0xf4, 0x93, 0x1a, 0x26, 0x05}} , {{0x6e, 0x44, 0xa3, 0xf9, 0x64, 0xaf, 0xe7, 0x6d, 0x7d, 0xdf, 0x1e, 0xac, 0x04, 0xea, 0x3b, 0x5f, 0x9b, 0xe8, 0x24, 0x9d, 0x0e, 0xe5, 0x2e, 0x3e, 0xdf, 0xa9, 0xf7, 0xd4, 0x50, 0x71, 0xf0, 0x78}}}, {{{0x3e, 0xa8, 0x38, 0xc2, 0x57, 0x56, 0x42, 0x9a, 0xb1, 0xe2, 0xf8, 0x45, 0xaa, 0x11, 0x48, 0x5f, 0x17, 0xc4, 0x54, 0x27, 0xdc, 0x5d, 0xaa, 0xdd, 0x41, 0xbc, 0xdf, 0x81, 0xb9, 0x53, 0xee, 0x52}} , {{0xc3, 0xf1, 0xa7, 0x6d, 0xb3, 0x5f, 0x92, 0x6f, 0xcc, 0x91, 0xb8, 0x95, 0x05, 0xdf, 0x3c, 0x64, 0x57, 0x39, 0x61, 0x51, 0xad, 0x8c, 0x38, 0x7b, 0xc8, 0xde, 0x00, 0x34, 0xbe, 0xa1, 0xb0, 0x7e}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x25, 0x24, 0x1d, 0x8a, 0x67, 0x20, 0xee, 0x42, 0xeb, 0x38, 0xed, 0x0b, 0x8b, 0xcd, 0x46, 0x9d, 0x5e, 0x6b, 0x1e, 0x24, 0x9d, 0x12, 0x05, 0x1a, 0xcc, 0x05, 0x4e, 0x92, 0x38, 0xe1, 0x1f, 0x50}} , {{0x4e, 0xee, 0x1c, 0x91, 0xe6, 0x11, 0xbd, 0x8e, 0x55, 0x1a, 0x18, 0x75, 0x66, 0xaf, 0x4d, 0x7b, 0x0f, 0xae, 0x6d, 0x85, 0xca, 0x82, 0x58, 0x21, 0x9c, 0x18, 0xe0, 0xed, 0xec, 0x22, 0x80, 0x2f}}}, {{{0x68, 0x3b, 0x0a, 0x39, 0x1d, 0x6a, 0x15, 0x57, 0xfc, 0xf0, 0x63, 0x54, 0xdb, 0x39, 0xdb, 0xe8, 0x5c, 0x64, 0xff, 0xa0, 0x09, 0x4f, 0x3b, 0xb7, 0x32, 0x60, 0x99, 0x94, 0xfd, 0x94, 0x82, 0x2d}} , {{0x24, 0xf6, 0x5a, 0x44, 0xf1, 0x55, 0x2c, 0xdb, 0xea, 0x7c, 0x84, 0x7c, 0x01, 0xac, 0xe3, 0xfd, 0xc9, 0x27, 0xc1, 0x5a, 0xb9, 0xde, 0x4f, 0x5a, 0x90, 0xdd, 0xc6, 0x67, 0xaa, 0x6f, 0x8a, 0x3a}}}, {{{0x78, 0x52, 0x87, 0xc9, 0x97, 0x63, 0xb1, 0xdd, 0x54, 0x5f, 0xc1, 0xf8, 0xf1, 0x06, 0xa6, 0xa8, 0xa3, 0x88, 0x82, 0xd4, 0xcb, 0xa6, 0x19, 0xdd, 0xd1, 0x11, 0x87, 0x08, 0x17, 0x4c, 0x37, 0x2a}} , {{0xa1, 0x0c, 0xf3, 0x08, 0x43, 0xd9, 0x24, 0x1e, 0x83, 0xa7, 0xdf, 0x91, 0xca, 0xbd, 0x69, 0x47, 0x8d, 0x1b, 0xe2, 0xb9, 0x4e, 0xb5, 0xe1, 0x76, 0xb3, 0x1c, 0x93, 0x03, 0xce, 0x5f, 0xb3, 0x5a}}}, {{{0x1d, 0xda, 0xe4, 0x61, 0x03, 0x50, 0xa9, 0x8b, 0x68, 0x18, 0xef, 0xb2, 0x1c, 0x84, 0x3b, 0xa2, 0x44, 0x95, 0xa3, 0x04, 0x3b, 0xd6, 0x99, 0x00, 0xaf, 0x76, 0x42, 0x67, 0x02, 0x7d, 0x85, 0x56}} , {{0xce, 0x72, 0x0e, 0x29, 0x84, 0xb2, 0x7d, 0xd2, 0x45, 0xbe, 0x57, 0x06, 0xed, 0x7f, 0xcf, 0xed, 0xcd, 0xef, 0x19, 0xd6, 0xbc, 0x15, 0x79, 0x64, 0xd2, 0x18, 0xe3, 0x20, 0x67, 0x3a, 0x54, 0x0b}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x52, 0xfd, 0x04, 0xc5, 0xfb, 0x99, 0xe7, 0xe8, 0xfb, 0x8c, 0xe1, 0x42, 0x03, 0xef, 0x9d, 0xd9, 0x9e, 0x4d, 0xf7, 0x80, 0xcf, 0x2e, 0xcc, 0x9b, 0x45, 0xc9, 0x7b, 0x7a, 0xbc, 0x37, 0xa8, 0x52}} , {{0x96, 0x11, 0x41, 0x8a, 0x47, 0x91, 0xfe, 0xb6, 0xda, 0x7a, 0x54, 0x63, 0xd1, 0x14, 0x35, 0x05, 0x86, 0x8c, 0xa9, 0x36, 0x3f, 0xf2, 0x85, 0x54, 0x4e, 0x92, 0xd8, 0x85, 0x01, 0x46, 0xd6, 0x50}}}, {{{0x53, 0xcd, 0xf3, 0x86, 0x40, 0xe6, 0x39, 0x42, 0x95, 0xd6, 0xcb, 0x45, 0x1a, 0x20, 0xc8, 0x45, 0x4b, 0x32, 0x69, 0x04, 0xb1, 0xaf, 0x20, 0x46, 0xc7, 0x6b, 0x23, 0x5b, 0x69, 0xee, 0x30, 0x3f}} , {{0x70, 0x83, 0x47, 0xc0, 0xdb, 0x55, 0x08, 0xa8, 0x7b, 0x18, 0x6d, 0xf5, 0x04, 0x5a, 0x20, 0x0c, 0x4a, 0x8c, 0x60, 0xae, 0xae, 0x0f, 0x64, 0x55, 0x55, 0x2e, 0xd5, 0x1d, 0x53, 0x31, 0x42, 0x41}}}, {{{0xca, 0xfc, 0x88, 0x6b, 0x96, 0x78, 0x0a, 0x8b, 0x83, 0xdc, 0xbc, 0xaf, 0x40, 0xb6, 0x8d, 0x7f, 0xef, 0xb4, 0xd1, 0x3f, 0xcc, 0xa2, 0x74, 0xc9, 0xc2, 0x92, 0x55, 0x00, 0xab, 0xdb, 0xbf, 0x4f}} , {{0x93, 0x1c, 0x06, 0x2d, 0x66, 0x65, 0x02, 0xa4, 0x97, 0x18, 0xfd, 0x00, 0xe7, 0xab, 0x03, 0xec, 0xce, 0xc1, 0xbf, 0x37, 0xf8, 0x13, 0x53, 0xa5, 0xe5, 0x0c, 0x3a, 0xa8, 0x55, 0xb9, 0xff, 0x68}}}, {{{0xe4, 0xe6, 0x6d, 0x30, 0x7d, 0x30, 0x35, 0xc2, 0x78, 0x87, 0xf9, 0xfc, 0x6b, 0x5a, 0xc3, 0xb7, 0x65, 0xd8, 0x2e, 0xc7, 0xa5, 0x0c, 0xc6, 0xdc, 0x12, 0xaa, 0xd6, 0x4f, 0xc5, 0x38, 0xbc, 0x0e}} , {{0xe2, 0x3c, 0x76, 0x86, 0x38, 0xf2, 0x7b, 0x2c, 0x16, 0x78, 0x8d, 0xf5, 0xa4, 0x15, 0xda, 0xdb, 0x26, 0x85, 0xa0, 0x56, 0xdd, 0x1d, 0xe3, 0xb3, 0xfd, 0x40, 0xef, 0xf2, 0xd9, 0xa1, 0xb3, 0x04}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xdb, 0x49, 0x0e, 0xe6, 0x58, 0x10, 0x7a, 0x52, 0xda, 0xb5, 0x7d, 0x37, 0x6a, 0x3e, 0xa1, 0x78, 0xce, 0xc7, 0x1c, 0x24, 0x23, 0xdb, 0x7d, 0xfb, 0x8c, 0x8d, 0xdc, 0x30, 0x67, 0x69, 0x75, 0x3b}} , {{0xa9, 0xea, 0x6d, 0x16, 0x16, 0x60, 0xf4, 0x60, 0x87, 0x19, 0x44, 0x8c, 0x4a, 0x8b, 0x3e, 0xfb, 0x16, 0x00, 0x00, 0x54, 0xa6, 0x9e, 0x9f, 0xef, 0xcf, 0xd9, 0xd2, 0x4c, 0x74, 0x31, 0xd0, 0x34}}}, {{{0xa4, 0xeb, 0x04, 0xa4, 0x8c, 0x8f, 0x71, 0x27, 0x95, 0x85, 0x5d, 0x55, 0x4b, 0xb1, 0x26, 0x26, 0xc8, 0xae, 0x6a, 0x7d, 0xa2, 0x21, 0xca, 0xce, 0x38, 0xab, 0x0f, 0xd0, 0xd5, 0x2b, 0x6b, 0x00}} , {{0xe5, 0x67, 0x0c, 0xf1, 0x3a, 0x9a, 0xea, 0x09, 0x39, 0xef, 0xd1, 0x30, 0xbc, 0x33, 0xba, 0xb1, 0x6a, 0xc5, 0x27, 0x08, 0x7f, 0x54, 0x80, 0x3d, 0xab, 0xf6, 0x15, 0x7a, 0xc2, 0x40, 0x73, 0x72}}}, {{{0x84, 0x56, 0x82, 0xb6, 0x12, 0x70, 0x7f, 0xf7, 0xf0, 0xbd, 0x5b, 0xa9, 0xd5, 0xc5, 0x5f, 0x59, 0xbf, 0x7f, 0xb3, 0x55, 0x22, 0x02, 0xc9, 0x44, 0x55, 0x87, 0x8f, 0x96, 0x98, 0x64, 0x6d, 0x15}} , {{0xb0, 0x8b, 0xaa, 0x1e, 0xec, 0xc7, 0xa5, 0x8f, 0x1f, 0x92, 0x04, 0xc6, 0x05, 0xf6, 0xdf, 0xa1, 0xcc, 0x1f, 0x81, 0xf5, 0x0e, 0x9c, 0x57, 0xdc, 0xe3, 0xbb, 0x06, 0x87, 0x1e, 0xfe, 0x23, 0x6c}}}, {{{0xd8, 0x2b, 0x5b, 0x16, 0xea, 0x20, 0xf1, 0xd3, 0x68, 0x8f, 0xae, 0x5b, 0xd0, 0xa9, 0x1a, 0x19, 0xa8, 0x36, 0xfb, 0x2b, 0x57, 0x88, 0x7d, 0x90, 0xd5, 0xa6, 0xf3, 0xdc, 0x38, 0x89, 0x4e, 0x1f}} , {{0xcc, 0x19, 0xda, 0x9b, 0x3b, 0x43, 0x48, 0x21, 0x2e, 0x23, 0x4d, 0x3d, 0xae, 0xf8, 0x8c, 0xfc, 0xdd, 0xa6, 0x74, 0x37, 0x65, 0xca, 0xee, 0x1a, 0x19, 0x8e, 0x9f, 0x64, 0x6f, 0x0c, 0x8b, 0x5a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x25, 0xb9, 0xc2, 0xf0, 0x72, 0xb8, 0x15, 0x16, 0xcc, 0x8d, 0x3c, 0x6f, 0x25, 0xed, 0xf4, 0x46, 0x2e, 0x0c, 0x60, 0x0f, 0xe2, 0x84, 0x34, 0x55, 0x89, 0x59, 0x34, 0x1b, 0xf5, 0x8d, 0xfe, 0x08}} , {{0xf8, 0xab, 0x93, 0xbc, 0x44, 0xba, 0x1b, 0x75, 0x4b, 0x49, 0x6f, 0xd0, 0x54, 0x2e, 0x63, 0xba, 0xb5, 0xea, 0xed, 0x32, 0x14, 0xc9, 0x94, 0xd8, 0xc5, 0xce, 0xf4, 0x10, 0x68, 0xe0, 0x38, 0x27}}}, {{{0x74, 0x1c, 0x14, 0x9b, 0xd4, 0x64, 0x61, 0x71, 0x5a, 0xb6, 0x21, 0x33, 0x4f, 0xf7, 0x8e, 0xba, 0xa5, 0x48, 0x9a, 0xc7, 0xfa, 0x9a, 0xf0, 0xb4, 0x62, 0xad, 0xf2, 0x5e, 0xcc, 0x03, 0x24, 0x1a}} , {{0xf5, 0x76, 0xfd, 0xe4, 0xaf, 0xb9, 0x03, 0x59, 0xce, 0x63, 0xd2, 0x3b, 0x1f, 0xcd, 0x21, 0x0c, 0xad, 0x44, 0xa5, 0x97, 0xac, 0x80, 0x11, 0x02, 0x9b, 0x0c, 0xe5, 0x8b, 0xcd, 0xfb, 0x79, 0x77}}}, {{{0x15, 0xbe, 0x9a, 0x0d, 0xba, 0x38, 0x72, 0x20, 0x8a, 0xf5, 0xbe, 0x59, 0x93, 0x79, 0xb7, 0xf6, 0x6a, 0x0c, 0x38, 0x27, 0x1a, 0x60, 0xf4, 0x86, 0x3b, 0xab, 0x5a, 0x00, 0xa0, 0xce, 0x21, 0x7d}} , {{0x6c, 0xba, 0x14, 0xc5, 0xea, 0x12, 0x9e, 0x2e, 0x82, 0x63, 0xce, 0x9b, 0x4a, 0xe7, 0x1d, 0xec, 0xf1, 0x2e, 0x51, 0x1c, 0xf4, 0xd0, 0x69, 0x15, 0x42, 0x9d, 0xa3, 0x3f, 0x0e, 0xbf, 0xe9, 0x5c}}}, {{{0xe4, 0x0d, 0xf4, 0xbd, 0xee, 0x31, 0x10, 0xed, 0xcb, 0x12, 0x86, 0xad, 0xd4, 0x2f, 0x90, 0x37, 0x32, 0xc3, 0x0b, 0x73, 0xec, 0x97, 0x85, 0xa4, 0x01, 0x1c, 0x76, 0x35, 0xfe, 0x75, 0xdd, 0x71}} , {{0x11, 0xa4, 0x88, 0x9f, 0x3e, 0x53, 0x69, 0x3b, 0x1b, 0xe0, 0xf7, 0xba, 0x9b, 0xad, 0x4e, 0x81, 0x5f, 0xb5, 0x5c, 0xae, 0xbe, 0x67, 0x86, 0x37, 0x34, 0x8e, 0x07, 0x32, 0x45, 0x4a, 0x67, 0x39}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x90, 0x70, 0x58, 0x20, 0x03, 0x1e, 0x67, 0xb2, 0xc8, 0x9b, 0x58, 0xc5, 0xb1, 0xeb, 0x2d, 0x4a, 0xde, 0x82, 0x8c, 0xf2, 0xd2, 0x14, 0xb8, 0x70, 0x61, 0x4e, 0x73, 0xd6, 0x0b, 0x6b, 0x0d, 0x30}} , {{0x81, 0xfc, 0x55, 0x5c, 0xbf, 0xa7, 0xc4, 0xbd, 0xe2, 0xf0, 0x4b, 0x8f, 0xe9, 0x7d, 0x99, 0xfa, 0xd3, 0xab, 0xbc, 0xc7, 0x83, 0x2b, 0x04, 0x7f, 0x0c, 0x19, 0x43, 0x03, 0x3d, 0x07, 0xca, 0x40}}}, {{{0xf9, 0xc8, 0xbe, 0x8c, 0x16, 0x81, 0x39, 0x96, 0xf6, 0x17, 0x58, 0xc8, 0x30, 0x58, 0xfb, 0xc2, 0x03, 0x45, 0xd2, 0x52, 0x76, 0xe0, 0x6a, 0x26, 0x28, 0x5c, 0x88, 0x59, 0x6a, 0x5a, 0x54, 0x42}} , {{0x07, 0xb5, 0x2e, 0x2c, 0x67, 0x15, 0x9b, 0xfb, 0x83, 0x69, 0x1e, 0x0f, 0xda, 0xd6, 0x29, 0xb1, 0x60, 0xe0, 0xb2, 0xba, 0x69, 0xa2, 0x9e, 0xbd, 0xbd, 0xe0, 0x1c, 0xbd, 0xcd, 0x06, 0x64, 0x70}}}, {{{0x41, 0xfa, 0x8c, 0xe1, 0x89, 0x8f, 0x27, 0xc8, 0x25, 0x8f, 0x6f, 0x5f, 0x55, 0xf8, 0xde, 0x95, 0x6d, 0x2f, 0x75, 0x16, 0x2b, 0x4e, 0x44, 0xfd, 0x86, 0x6e, 0xe9, 0x70, 0x39, 0x76, 0x97, 0x7e}} , {{0x17, 0x62, 0x6b, 0x14, 0xa1, 0x7c, 0xd0, 0x79, 0x6e, 0xd8, 0x8a, 0xa5, 0x6d, 0x8c, 0x93, 0xd2, 0x3f, 0xec, 0x44, 0x8d, 0x6e, 0x91, 0x01, 0x8c, 0x8f, 0xee, 0x01, 0x8f, 0xc0, 0xb4, 0x85, 0x0e}}}, {{{0x02, 0x3a, 0x70, 0x41, 0xe4, 0x11, 0x57, 0x23, 0xac, 0xe6, 0xfc, 0x54, 0x7e, 0xcd, 0xd7, 0x22, 0xcb, 0x76, 0x9f, 0x20, 0xce, 0xa0, 0x73, 0x76, 0x51, 0x3b, 0xa4, 0xf8, 0xe3, 0x62, 0x12, 0x6c}} , {{0x7f, 0x00, 0x9c, 0x26, 0x0d, 0x6f, 0x48, 0x7f, 0x3a, 0x01, 0xed, 0xc5, 0x96, 0xb0, 0x1f, 0x4f, 0xa8, 0x02, 0x62, 0x27, 0x8a, 0x50, 0x8d, 0x9a, 0x8b, 0x52, 0x0f, 0x1e, 0xcf, 0x41, 0x38, 0x19}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xf5, 0x6c, 0xd4, 0x2f, 0x0f, 0x69, 0x0f, 0x87, 0x3f, 0x61, 0x65, 0x1e, 0x35, 0x34, 0x85, 0xba, 0x02, 0x30, 0xac, 0x25, 0x3d, 0xe2, 0x62, 0xf1, 0xcc, 0xe9, 0x1b, 0xc2, 0xef, 0x6a, 0x42, 0x57}} , {{0x34, 0x1f, 0x2e, 0xac, 0xd1, 0xc7, 0x04, 0x52, 0x32, 0x66, 0xb2, 0x33, 0x73, 0x21, 0x34, 0x54, 0xf7, 0x71, 0xed, 0x06, 0xb0, 0xff, 0xa6, 0x59, 0x6f, 0x8a, 0x4e, 0xfb, 0x02, 0xb0, 0x45, 0x6b}}}, {{{0xf5, 0x48, 0x0b, 0x03, 0xc5, 0x22, 0x7d, 0x80, 0x08, 0x53, 0xfe, 0x32, 0xb1, 0xa1, 0x8a, 0x74, 0x6f, 0xbd, 0x3f, 0x85, 0xf4, 0xcf, 0xf5, 0x60, 0xaf, 0x41, 0x7e, 0x3e, 0x46, 0xa3, 0x5a, 0x20}} , {{0xaa, 0x35, 0x87, 0x44, 0x63, 0x66, 0x97, 0xf8, 0x6e, 0x55, 0x0c, 0x04, 0x3e, 0x35, 0x50, 0xbf, 0x93, 0x69, 0xd2, 0x8b, 0x05, 0x55, 0x99, 0xbe, 0xe2, 0x53, 0x61, 0xec, 0xe8, 0x08, 0x0b, 0x32}}}, {{{0xb3, 0x10, 0x45, 0x02, 0x69, 0x59, 0x2e, 0x97, 0xd9, 0x64, 0xf8, 0xdb, 0x25, 0x80, 0xdc, 0xc4, 0xd5, 0x62, 0x3c, 0xed, 0x65, 0x91, 0xad, 0xd1, 0x57, 0x81, 0x94, 0xaa, 0xa1, 0x29, 0xfc, 0x68}} , {{0xdd, 0xb5, 0x7d, 0xab, 0x5a, 0x21, 0x41, 0x53, 0xbb, 0x17, 0x79, 0x0d, 0xd1, 0xa8, 0x0c, 0x0c, 0x20, 0x88, 0x09, 0xe9, 0x84, 0xe8, 0x25, 0x11, 0x67, 0x7a, 0x8b, 0x1a, 0xe4, 0x5d, 0xe1, 0x5d}}}, {{{0x37, 0xea, 0xfe, 0x65, 0x3b, 0x25, 0xe8, 0xe1, 0xc2, 0xc5, 0x02, 0xa4, 0xbe, 0x98, 0x0a, 0x2b, 0x61, 0xc1, 0x9b, 0xe2, 0xd5, 0x92, 0xe6, 0x9e, 0x7d, 0x1f, 0xca, 0x43, 0x88, 0x8b, 0x2c, 0x59}} , {{0xe0, 0xb5, 0x00, 0x1d, 0x2a, 0x6f, 0xaf, 0x79, 0x86, 0x2f, 0xa6, 0x5a, 0x93, 0xd1, 0xfe, 0xae, 0x3a, 0xee, 0xdb, 0x7c, 0x61, 0xbe, 0x7c, 0x01, 0xf9, 0xfe, 0x52, 0xdc, 0xd8, 0x52, 0xa3, 0x42}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x22, 0xaf, 0x13, 0x37, 0xbd, 0x37, 0x71, 0xac, 0x04, 0x46, 0x63, 0xac, 0xa4, 0x77, 0xed, 0x25, 0x38, 0xe0, 0x15, 0xa8, 0x64, 0x00, 0x0d, 0xce, 0x51, 0x01, 0xa9, 0xbc, 0x0f, 0x03, 0x1c, 0x04}} , {{0x89, 0xf9, 0x80, 0x07, 0xcf, 0x3f, 0xb3, 0xe9, 0xe7, 0x45, 0x44, 0x3d, 0x2a, 0x7c, 0xe9, 0xe4, 0x16, 0x5c, 0x5e, 0x65, 0x1c, 0xc7, 0x7d, 0xc6, 0x7a, 0xfb, 0x43, 0xee, 0x25, 0x76, 0x46, 0x72}}}, {{{0x02, 0xa2, 0xed, 0xf4, 0x8f, 0x6b, 0x0b, 0x3e, 0xeb, 0x35, 0x1a, 0xd5, 0x7e, 0xdb, 0x78, 0x00, 0x96, 0x8a, 0xa0, 0xb4, 0xcf, 0x60, 0x4b, 0xd4, 0xd5, 0xf9, 0x2d, 0xbf, 0x88, 0xbd, 0x22, 0x62}} , {{0x13, 0x53, 0xe4, 0x82, 0x57, 0xfa, 0x1e, 0x8f, 0x06, 0x2b, 0x90, 0xba, 0x08, 0xb6, 0x10, 0x54, 0x4f, 0x7c, 0x1b, 0x26, 0xed, 0xda, 0x6b, 0xdd, 0x25, 0xd0, 0x4e, 0xea, 0x42, 0xbb, 0x25, 0x03}}}, {{{0x51, 0x16, 0x50, 0x7c, 0xd5, 0x5d, 0xf6, 0x99, 0xe8, 0x77, 0x72, 0x4e, 0xfa, 0x62, 0xcb, 0x76, 0x75, 0x0c, 0xe2, 0x71, 0x98, 0x92, 0xd5, 0xfa, 0x45, 0xdf, 0x5c, 0x6f, 0x1e, 0x9e, 0x28, 0x69}} , {{0x0d, 0xac, 0x66, 0x6d, 0xc3, 0x8b, 0xba, 0x16, 0xb5, 0xe2, 0xa0, 0x0d, 0x0c, 0xbd, 0xa4, 0x8e, 0x18, 0x6c, 0xf2, 0xdc, 0xf9, 0xdc, 0x4a, 0x86, 0x25, 0x95, 0x14, 0xcb, 0xd8, 0x1a, 0x04, 0x0f}}}, {{{0x97, 0xa5, 0xdb, 0x8b, 0x2d, 0xaa, 0x42, 0x11, 0x09, 0xf2, 0x93, 0xbb, 0xd9, 0x06, 0x84, 0x4e, 0x11, 0xa8, 0xa0, 0x25, 0x2b, 0xa6, 0x5f, 0xae, 0xc4, 0xb4, 0x4c, 0xc8, 0xab, 0xc7, 0x3b, 0x02}} , {{0xee, 0xc9, 0x29, 0x0f, 0xdf, 0x11, 0x85, 0xed, 0xce, 0x0d, 0x62, 0x2c, 0x8f, 0x4b, 0xf9, 0x04, 0xe9, 0x06, 0x72, 0x1d, 0x37, 0x20, 0x50, 0xc9, 0x14, 0xeb, 0xec, 0x39, 0xa7, 0x97, 0x2b, 0x4d}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x69, 0xd1, 0x39, 0xbd, 0xfb, 0x33, 0xbe, 0xc4, 0xf0, 0x5c, 0xef, 0xf0, 0x56, 0x68, 0xfc, 0x97, 0x47, 0xc8, 0x72, 0xb6, 0x53, 0xa4, 0x0a, 0x98, 0xa5, 0xb4, 0x37, 0x71, 0xcf, 0x66, 0x50, 0x6d}} , {{0x17, 0xa4, 0x19, 0x52, 0x11, 0x47, 0xb3, 0x5c, 0x5b, 0xa9, 0x2e, 0x22, 0xb4, 0x00, 0x52, 0xf9, 0x57, 0x18, 0xb8, 0xbe, 0x5a, 0xe3, 0xab, 0x83, 0xc8, 0x87, 0x0a, 0x2a, 0xd8, 0x8c, 0xbb, 0x54}}}, {{{0xa9, 0x62, 0x93, 0x85, 0xbe, 0xe8, 0x73, 0x4a, 0x0e, 0xb0, 0xb5, 0x2d, 0x94, 0x50, 0xaa, 0xd3, 0xb2, 0xea, 0x9d, 0x62, 0x76, 0x3b, 0x07, 0x34, 0x4e, 0x2d, 0x70, 0xc8, 0x9a, 0x15, 0x66, 0x6b}} , {{0xc5, 0x96, 0xca, 0xc8, 0x22, 0x1a, 0xee, 0x5f, 0xe7, 0x31, 0x60, 0x22, 0x83, 0x08, 0x63, 0xce, 0xb9, 0x32, 0x44, 0x58, 0x5d, 0x3a, 0x9b, 0xe4, 0x04, 0xd5, 0xef, 0x38, 0xef, 0x4b, 0xdd, 0x19}}}, {{{0x4d, 0xc2, 0x17, 0x75, 0xa1, 0x68, 0xcd, 0xc3, 0xc6, 0x03, 0x44, 0xe3, 0x78, 0x09, 0x91, 0x47, 0x3f, 0x0f, 0xe4, 0x92, 0x58, 0xfa, 0x7d, 0x1f, 0x20, 0x94, 0x58, 0x5e, 0xbc, 0x19, 0x02, 0x6f}} , {{0x20, 0xd6, 0xd8, 0x91, 0x54, 0xa7, 0xf3, 0x20, 0x4b, 0x34, 0x06, 0xfa, 0x30, 0xc8, 0x6f, 0x14, 0x10, 0x65, 0x74, 0x13, 0x4e, 0xf0, 0x69, 0x26, 0xce, 0xcf, 0x90, 0xf4, 0xd0, 0xc5, 0xc8, 0x64}}}, {{{0x26, 0xa2, 0x50, 0x02, 0x24, 0x72, 0xf1, 0xf0, 0x4e, 0x2d, 0x93, 0xd5, 0x08, 0xe7, 0xae, 0x38, 0xf7, 0x18, 0xa5, 0x32, 0x34, 0xc2, 0xf0, 0xa6, 0xec, 0xb9, 0x61, 0x7b, 0x64, 0x99, 0xac, 0x71}} , {{0x25, 0xcf, 0x74, 0x55, 0x1b, 0xaa, 0xa9, 0x38, 0x41, 0x40, 0xd5, 0x95, 0x95, 0xab, 0x1c, 0x5e, 0xbc, 0x41, 0x7e, 0x14, 0x30, 0xbe, 0x13, 0x89, 0xf4, 0xe5, 0xeb, 0x28, 0xc0, 0xc2, 0x96, 0x3a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x2b, 0x77, 0x45, 0xec, 0x67, 0x76, 0x32, 0x4c, 0xb9, 0xdf, 0x25, 0x32, 0x6b, 0xcb, 0xe7, 0x14, 0x61, 0x43, 0xee, 0xba, 0x9b, 0x71, 0xef, 0xd2, 0x48, 0x65, 0xbb, 0x1b, 0x8a, 0x13, 0x1b, 0x22}} , {{0x84, 0xad, 0x0c, 0x18, 0x38, 0x5a, 0xba, 0xd0, 0x98, 0x59, 0xbf, 0x37, 0xb0, 0x4f, 0x97, 0x60, 0x20, 0xb3, 0x9b, 0x97, 0xf6, 0x08, 0x6c, 0xa4, 0xff, 0xfb, 0xb7, 0xfa, 0x95, 0xb2, 0x51, 0x79}}}, {{{0x28, 0x5c, 0x3f, 0xdb, 0x6b, 0x18, 0x3b, 0x5c, 0xd1, 0x04, 0x28, 0xde, 0x85, 0x52, 0x31, 0xb5, 0xbb, 0xf6, 0xa9, 0xed, 0xbe, 0x28, 0x4f, 0xb3, 0x7e, 0x05, 0x6a, 0xdb, 0x95, 0x0d, 0x1b, 0x1c}} , {{0xd5, 0xc5, 0xc3, 0x9a, 0x0a, 0xd0, 0x31, 0x3e, 0x07, 0x36, 0x8e, 0xc0, 0x8a, 0x62, 0xb1, 0xca, 0xd6, 0x0e, 0x1e, 0x9d, 0xef, 0xab, 0x98, 0x4d, 0xbb, 0x6c, 0x05, 0xe0, 0xe4, 0x5d, 0xbd, 0x57}}}, {{{0xcc, 0x21, 0x27, 0xce, 0xfd, 0xa9, 0x94, 0x8e, 0xe1, 0xab, 0x49, 0xe0, 0x46, 0x26, 0xa1, 0xa8, 0x8c, 0xa1, 0x99, 0x1d, 0xb4, 0x27, 0x6d, 0x2d, 0xc8, 0x39, 0x30, 0x5e, 0x37, 0x52, 0xc4, 0x6e}} , {{0xa9, 0x85, 0xf4, 0xe7, 0xb0, 0x15, 0x33, 0x84, 0x1b, 0x14, 0x1a, 0x02, 0xd9, 0x3b, 0xad, 0x0f, 0x43, 0x6c, 0xea, 0x3e, 0x0f, 0x7e, 0xda, 0xdd, 0x6b, 0x4c, 0x7f, 0x6e, 0xd4, 0x6b, 0xbf, 0x0f}}}, {{{0x47, 0x9f, 0x7c, 0x56, 0x7c, 0x43, 0x91, 0x1c, 0xbb, 0x4e, 0x72, 0x3e, 0x64, 0xab, 0xa0, 0xa0, 0xdf, 0xb4, 0xd8, 0x87, 0x3a, 0xbd, 0xa8, 0x48, 0xc9, 0xb8, 0xef, 0x2e, 0xad, 0x6f, 0x84, 0x4f}} , {{0x2d, 0x2d, 0xf0, 0x1b, 0x7e, 0x2a, 0x6c, 0xf8, 0xa9, 0x6a, 0xe1, 0xf0, 0x99, 0xa1, 0x67, 0x9a, 0xd4, 0x13, 0xca, 0xca, 0xba, 0x27, 0x92, 0xaa, 0xa1, 0x5d, 0x50, 0xde, 0xcc, 0x40, 0x26, 0x0a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x9f, 0x3e, 0xf2, 0xb2, 0x90, 0xce, 0xdb, 0x64, 0x3e, 0x03, 0xdd, 0x37, 0x36, 0x54, 0x70, 0x76, 0x24, 0xb5, 0x69, 0x03, 0xfc, 0xa0, 0x2b, 0x74, 0xb2, 0x05, 0x0e, 0xcc, 0xd8, 0x1f, 0x6a, 0x1f}} , {{0x19, 0x5e, 0x60, 0x69, 0x58, 0x86, 0xa0, 0x31, 0xbd, 0x32, 0xe9, 0x2c, 0x5c, 0xd2, 0x85, 0xba, 0x40, 0x64, 0xa8, 0x74, 0xf8, 0x0e, 0x1c, 0xb3, 0xa9, 0x69, 0xe8, 0x1e, 0x40, 0x64, 0x99, 0x77}}}, {{{0x6c, 0x32, 0x4f, 0xfd, 0xbb, 0x5c, 0xbb, 0x8d, 0x64, 0x66, 0x4a, 0x71, 0x1f, 0x79, 0xa3, 0xad, 0x8d, 0xf9, 0xd4, 0xec, 0xcf, 0x67, 0x70, 0xfa, 0x05, 0x4a, 0x0f, 0x6e, 0xaf, 0x87, 0x0a, 0x6f}} , {{0xc6, 0x36, 0x6e, 0x6c, 0x8c, 0x24, 0x09, 0x60, 0xbe, 0x26, 0xd2, 0x4c, 0x5e, 0x17, 0xca, 0x5f, 0x1d, 0xcc, 0x87, 0xe8, 0x42, 0x6a, 0xcb, 0xcb, 0x7d, 0x92, 0x05, 0x35, 0x81, 0x13, 0x60, 0x6b}}}, {{{0xf4, 0x15, 0xcd, 0x0f, 0x0a, 0xaf, 0x4e, 0x6b, 0x51, 0xfd, 0x14, 0xc4, 0x2e, 0x13, 0x86, 0x74, 0x44, 0xcb, 0x66, 0x6b, 0xb6, 0x9d, 0x74, 0x56, 0x32, 0xac, 0x8d, 0x8e, 0x8c, 0x8c, 0x8c, 0x39}} , {{0xca, 0x59, 0x74, 0x1a, 0x11, 0xef, 0x6d, 0xf7, 0x39, 0x5c, 0x3b, 0x1f, 0xfa, 0xe3, 0x40, 0x41, 0x23, 0x9e, 0xf6, 0xd1, 0x21, 0xa2, 0xbf, 0xad, 0x65, 0x42, 0x6b, 0x59, 0x8a, 0xe8, 0xc5, 0x7f}}}, {{{0x64, 0x05, 0x7a, 0x84, 0x4a, 0x13, 0xc3, 0xf6, 0xb0, 0x6e, 0x9a, 0x6b, 0x53, 0x6b, 0x32, 0xda, 0xd9, 0x74, 0x75, 0xc4, 0xba, 0x64, 0x3d, 0x3b, 0x08, 0xdd, 0x10, 0x46, 0xef, 0xc7, 0x90, 0x1f}} , {{0x7b, 0x2f, 0x3a, 0xce, 0xc8, 0xa1, 0x79, 0x3c, 0x30, 0x12, 0x44, 0x28, 0xf6, 0xbc, 0xff, 0xfd, 0xf4, 0xc0, 0x97, 0xb0, 0xcc, 0xc3, 0x13, 0x7a, 0xb9, 0x9a, 0x16, 0xe4, 0xcb, 0x4c, 0x34, 0x63}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x07, 0x4e, 0xd3, 0x2d, 0x09, 0x33, 0x0e, 0xd2, 0x0d, 0xbe, 0x3e, 0xe7, 0xe4, 0xaa, 0xb7, 0x00, 0x8b, 0xe8, 0xad, 0xaa, 0x7a, 0x8d, 0x34, 0x28, 0xa9, 0x81, 0x94, 0xc5, 0xe7, 0x42, 0xac, 0x47}} , {{0x24, 0x89, 0x7a, 0x8f, 0xb5, 0x9b, 0xf0, 0xc2, 0x03, 0x64, 0xd0, 0x1e, 0xf5, 0xa4, 0xb2, 0xf3, 0x74, 0xe9, 0x1a, 0x16, 0xfd, 0xcb, 0x15, 0xea, 0xeb, 0x10, 0x6c, 0x35, 0xd1, 0xc1, 0xa6, 0x28}}}, {{{0xcc, 0xd5, 0x39, 0xfc, 0xa5, 0xa4, 0xad, 0x32, 0x15, 0xce, 0x19, 0xe8, 0x34, 0x2b, 0x1c, 0x60, 0x91, 0xfc, 0x05, 0xa9, 0xb3, 0xdc, 0x80, 0x29, 0xc4, 0x20, 0x79, 0x06, 0x39, 0xc0, 0xe2, 0x22}} , {{0xbb, 0xa8, 0xe1, 0x89, 0x70, 0x57, 0x18, 0x54, 0x3c, 0xf6, 0x0d, 0x82, 0x12, 0x05, 0x87, 0x96, 0x06, 0x39, 0xe3, 0xf8, 0xb3, 0x95, 0xe5, 0xd7, 0x26, 0xbf, 0x09, 0x5a, 0x94, 0xf9, 0x1c, 0x63}}}, {{{0x2b, 0x8c, 0x2d, 0x9a, 0x8b, 0x84, 0xf2, 0x56, 0xfb, 0xad, 0x2e, 0x7f, 0xb7, 0xfc, 0x30, 0xe1, 0x35, 0x89, 0xba, 0x4d, 0xa8, 0x6d, 0xce, 0x8c, 0x8b, 0x30, 0xe0, 0xda, 0x29, 0x18, 0x11, 0x17}} , {{0x19, 0xa6, 0x5a, 0x65, 0x93, 0xc3, 0xb5, 0x31, 0x22, 0x4f, 0xf3, 0xf6, 0x0f, 0xeb, 0x28, 0xc3, 0x7c, 0xeb, 0xce, 0x86, 0xec, 0x67, 0x76, 0x6e, 0x35, 0x45, 0x7b, 0xd8, 0x6b, 0x92, 0x01, 0x65}}}, {{{0x3d, 0xd5, 0x9a, 0x64, 0x73, 0x36, 0xb1, 0xd6, 0x86, 0x98, 0x42, 0x3f, 0x8a, 0xf1, 0xc7, 0xf5, 0x42, 0xa8, 0x9c, 0x52, 0xa8, 0xdc, 0xf9, 0x24, 0x3f, 0x4a, 0xa1, 0xa4, 0x5b, 0xe8, 0x62, 0x1a}} , {{0xc5, 0xbd, 0xc8, 0x14, 0xd5, 0x0d, 0xeb, 0xe1, 0xa5, 0xe6, 0x83, 0x11, 0x09, 0x00, 0x1d, 0x55, 0x83, 0x51, 0x7e, 0x75, 0x00, 0x81, 0xb9, 0xcb, 0xd8, 0xc5, 0xe5, 0xa1, 0xd9, 0x17, 0x6d, 0x1f}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xea, 0xf9, 0xe4, 0xe9, 0xe1, 0x52, 0x3f, 0x51, 0x19, 0x0d, 0xdd, 0xd9, 0x9d, 0x93, 0x31, 0x87, 0x23, 0x09, 0xd5, 0x83, 0xeb, 0x92, 0x09, 0x76, 0x6e, 0xe3, 0xf8, 0xc0, 0xa2, 0x66, 0xb5, 0x36}} , {{0x3a, 0xbb, 0x39, 0xed, 0x32, 0x02, 0xe7, 0x43, 0x7a, 0x38, 0x14, 0x84, 0xe3, 0x44, 0xd2, 0x5e, 0x94, 0xdd, 0x78, 0x89, 0x55, 0x4c, 0x73, 0x9e, 0xe1, 0xe4, 0x3e, 0x43, 0xd0, 0x4a, 0xde, 0x1b}}}, {{{0xb2, 0xe7, 0x8f, 0xe3, 0xa3, 0xc5, 0xcb, 0x72, 0xee, 0x79, 0x41, 0xf8, 0xdf, 0xee, 0x65, 0xc5, 0x45, 0x77, 0x27, 0x3c, 0xbd, 0x58, 0xd3, 0x75, 0xe2, 0x04, 0x4b, 0xbb, 0x65, 0xf3, 0xc8, 0x0f}} , {{0x24, 0x7b, 0x93, 0x34, 0xb5, 0xe2, 0x74, 0x48, 0xcd, 0xa0, 0x0b, 0x92, 0x97, 0x66, 0x39, 0xf4, 0xb0, 0xe2, 0x5d, 0x39, 0x6a, 0x5b, 0x45, 0x17, 0x78, 0x1e, 0xdb, 0x91, 0x81, 0x1c, 0xf9, 0x16}}}, {{{0x16, 0xdf, 0xd1, 0x5a, 0xd5, 0xe9, 0x4e, 0x58, 0x95, 0x93, 0x5f, 0x51, 0x09, 0xc3, 0x2a, 0xc9, 0xd4, 0x55, 0x48, 0x79, 0xa4, 0xa3, 0xb2, 0xc3, 0x62, 0xaa, 0x8c, 0xe8, 0xad, 0x47, 0x39, 0x1b}} , {{0x46, 0xda, 0x9e, 0x51, 0x3a, 0xe6, 0xd1, 0xa6, 0xbb, 0x4d, 0x7b, 0x08, 0xbe, 0x8c, 0xd5, 0xf3, 0x3f, 0xfd, 0xf7, 0x44, 0x80, 0x2d, 0x53, 0x4b, 0xd0, 0x87, 0x68, 0xc1, 0xb5, 0xd8, 0xf7, 0x07}}}, {{{0xf4, 0x10, 0x46, 0xbe, 0xb7, 0xd2, 0xd1, 0xce, 0x5e, 0x76, 0xa2, 0xd7, 0x03, 0xdc, 0xe4, 0x81, 0x5a, 0xf6, 0x3c, 0xde, 0xae, 0x7a, 0x9d, 0x21, 0x34, 0xa5, 0xf6, 0xa9, 0x73, 0xe2, 0x8d, 0x60}} , {{0xfa, 0x44, 0x71, 0xf6, 0x41, 0xd8, 0xc6, 0x58, 0x13, 0x37, 0xeb, 0x84, 0x0f, 0x96, 0xc7, 0xdc, 0xc8, 0xa9, 0x7a, 0x83, 0xb2, 0x2f, 0x31, 0xb1, 0x1a, 0xd8, 0x98, 0x3f, 0x11, 0xd0, 0x31, 0x3b}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x81, 0xd5, 0x34, 0x16, 0x01, 0xa3, 0x93, 0xea, 0x52, 0x94, 0xec, 0x93, 0xb7, 0x81, 0x11, 0x2d, 0x58, 0xf9, 0xb5, 0x0a, 0xaa, 0x4f, 0xf6, 0x2e, 0x3f, 0x36, 0xbf, 0x33, 0x5a, 0xe7, 0xd1, 0x08}} , {{0x1a, 0xcf, 0x42, 0xae, 0xcc, 0xb5, 0x77, 0x39, 0xc4, 0x5b, 0x5b, 0xd0, 0x26, 0x59, 0x27, 0xd0, 0x55, 0x71, 0x12, 0x9d, 0x88, 0x3d, 0x9c, 0xea, 0x41, 0x6a, 0xf0, 0x50, 0x93, 0x93, 0xdd, 0x47}}}, {{{0x6f, 0xc9, 0x51, 0x6d, 0x1c, 0xaa, 0xf5, 0xa5, 0x90, 0x3f, 0x14, 0xe2, 0x6e, 0x8e, 0x64, 0xfd, 0xac, 0xe0, 0x4e, 0x22, 0xe5, 0xc1, 0xbc, 0x29, 0x0a, 0x6a, 0x9e, 0xa1, 0x60, 0xcb, 0x2f, 0x0b}} , {{0xdc, 0x39, 0x32, 0xf3, 0xa1, 0x44, 0xe9, 0xc5, 0xc3, 0x78, 0xfb, 0x95, 0x47, 0x34, 0x35, 0x34, 0xe8, 0x25, 0xde, 0x93, 0xc6, 0xb4, 0x76, 0x6d, 0x86, 0x13, 0xc6, 0xe9, 0x68, 0xb5, 0x01, 0x63}}}, {{{0x1f, 0x9a, 0x52, 0x64, 0x97, 0xd9, 0x1c, 0x08, 0x51, 0x6f, 0x26, 0x9d, 0xaa, 0x93, 0x33, 0x43, 0xfa, 0x77, 0xe9, 0x62, 0x9b, 0x5d, 0x18, 0x75, 0xeb, 0x78, 0xf7, 0x87, 0x8f, 0x41, 0xb4, 0x4d}} , {{0x13, 0xa8, 0x82, 0x3e, 0xe9, 0x13, 0xad, 0xeb, 0x01, 0xca, 0xcf, 0xda, 0xcd, 0xf7, 0x6c, 0xc7, 0x7a, 0xdc, 0x1e, 0x6e, 0xc8, 0x4e, 0x55, 0x62, 0x80, 0xea, 0x78, 0x0c, 0x86, 0xb9, 0x40, 0x51}}}, {{{0x27, 0xae, 0xd3, 0x0d, 0x4c, 0x8f, 0x34, 0xea, 0x7d, 0x3c, 0xe5, 0x8a, 0xcf, 0x5b, 0x92, 0xd8, 0x30, 0x16, 0xb4, 0xa3, 0x75, 0xff, 0xeb, 0x27, 0xc8, 0x5c, 0x6c, 0xc2, 0xee, 0x6c, 0x21, 0x0b}} , {{0xc3, 0xba, 0x12, 0x53, 0x2a, 0xaa, 0x77, 0xad, 0x19, 0x78, 0x55, 0x8a, 0x2e, 0x60, 0x87, 0xc2, 0x6e, 0x91, 0x38, 0x91, 0x3f, 0x7a, 0xc5, 0x24, 0x8f, 0x51, 0xc5, 0xde, 0xb0, 0x53, 0x30, 0x56}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x02, 0xfe, 0x54, 0x12, 0x18, 0xca, 0x7d, 0xa5, 0x68, 0x43, 0xa3, 0x6d, 0x14, 0x2a, 0x6a, 0xa5, 0x8e, 0x32, 0xe7, 0x63, 0x4f, 0xe3, 0xc6, 0x44, 0x3e, 0xab, 0x63, 0xca, 0x17, 0x86, 0x74, 0x3f}} , {{0x1e, 0x64, 0xc1, 0x7d, 0x52, 0xdc, 0x13, 0x5a, 0xa1, 0x9c, 0x4e, 0xee, 0x99, 0x28, 0xbb, 0x4c, 0xee, 0xac, 0xa9, 0x1b, 0x89, 0xa2, 0x38, 0x39, 0x7b, 0xc4, 0x0f, 0x42, 0xe6, 0x89, 0xed, 0x0f}}}, {{{0xf3, 0x3c, 0x8c, 0x80, 0x83, 0x10, 0x8a, 0x37, 0x50, 0x9c, 0xb4, 0xdf, 0x3f, 0x8c, 0xf7, 0x23, 0x07, 0xd6, 0xff, 0xa0, 0x82, 0x6c, 0x75, 0x3b, 0xe4, 0xb5, 0xbb, 0xe4, 0xe6, 0x50, 0xf0, 0x08}} , {{0x62, 0xee, 0x75, 0x48, 0x92, 0x33, 0xf2, 0xf4, 0xad, 0x15, 0x7a, 0xa1, 0x01, 0x46, 0xa9, 0x32, 0x06, 0x88, 0xb6, 0x36, 0x47, 0x35, 0xb9, 0xb4, 0x42, 0x85, 0x76, 0xf0, 0x48, 0x00, 0x90, 0x38}}}, {{{0x51, 0x15, 0x9d, 0xc3, 0x95, 0xd1, 0x39, 0xbb, 0x64, 0x9d, 0x15, 0x81, 0xc1, 0x68, 0xd0, 0xb6, 0xa4, 0x2c, 0x7d, 0x5e, 0x02, 0x39, 0x00, 0xe0, 0x3b, 0xa4, 0xcc, 0xca, 0x1d, 0x81, 0x24, 0x10}} , {{0xe7, 0x29, 0xf9, 0x37, 0xd9, 0x46, 0x5a, 0xcd, 0x70, 0xfe, 0x4d, 0x5b, 0xbf, 0xa5, 0xcf, 0x91, 0xf4, 0xef, 0xee, 0x8a, 0x29, 0xd0, 0xe7, 0xc4, 0x25, 0x92, 0x8a, 0xff, 0x36, 0xfc, 0xe4, 0x49}}}, {{{0xbd, 0x00, 0xb9, 0x04, 0x7d, 0x35, 0xfc, 0xeb, 0xd0, 0x0b, 0x05, 0x32, 0x52, 0x7a, 0x89, 0x24, 0x75, 0x50, 0xe1, 0x63, 0x02, 0x82, 0x8e, 0xe7, 0x85, 0x0c, 0xf2, 0x56, 0x44, 0x37, 0x83, 0x25}} , {{0x8f, 0xa1, 0xce, 0xcb, 0x60, 0xda, 0x12, 0x02, 0x1e, 0x29, 0x39, 0x2a, 0x03, 0xb7, 0xeb, 0x77, 0x40, 0xea, 0xc9, 0x2b, 0x2c, 0xd5, 0x7d, 0x7e, 0x2c, 0xc7, 0x5a, 0xfd, 0xff, 0xc4, 0xd1, 0x62}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x1d, 0x88, 0x98, 0x5b, 0x4e, 0xfc, 0x41, 0x24, 0x05, 0xe6, 0x50, 0x2b, 0xae, 0x96, 0x51, 0xd9, 0x6b, 0x72, 0xb2, 0x33, 0x42, 0x98, 0x68, 0xbb, 0x10, 0x5a, 0x7a, 0x8c, 0x9d, 0x07, 0xb4, 0x05}} , {{0x2f, 0x61, 0x9f, 0xd7, 0xa8, 0x3f, 0x83, 0x8c, 0x10, 0x69, 0x90, 0xe6, 0xcf, 0xd2, 0x63, 0xa3, 0xe4, 0x54, 0x7e, 0xe5, 0x69, 0x13, 0x1c, 0x90, 0x57, 0xaa, 0xe9, 0x53, 0x22, 0x43, 0x29, 0x23}}}, {{{0xe5, 0x1c, 0xf8, 0x0a, 0xfd, 0x2d, 0x7e, 0xf5, 0xf5, 0x70, 0x7d, 0x41, 0x6b, 0x11, 0xfe, 0xbe, 0x99, 0xd1, 0x55, 0x29, 0x31, 0xbf, 0xc0, 0x97, 0x6c, 0xd5, 0x35, 0xcc, 0x5e, 0x8b, 0xd9, 0x69}} , {{0x8e, 0x4e, 0x9f, 0x25, 0xf8, 0x81, 0x54, 0x2d, 0x0e, 0xd5, 0x54, 0x81, 0x9b, 0xa6, 0x92, 0xce, 0x4b, 0xe9, 0x8f, 0x24, 0x3b, 0xca, 0xe0, 0x44, 0xab, 0x36, 0xfe, 0xfb, 0x87, 0xd4, 0x26, 0x3e}}}, {{{0x0f, 0x93, 0x9c, 0x11, 0xe7, 0xdb, 0xf1, 0xf0, 0x85, 0x43, 0x28, 0x15, 0x37, 0xdd, 0xde, 0x27, 0xdf, 0xad, 0x3e, 0x49, 0x4f, 0xe0, 0x5b, 0xf6, 0x80, 0x59, 0x15, 0x3c, 0x85, 0xb7, 0x3e, 0x12}} , {{0xf5, 0xff, 0xcc, 0xf0, 0xb4, 0x12, 0x03, 0x5f, 0xc9, 0x84, 0xcb, 0x1d, 0x17, 0xe0, 0xbc, 0xcc, 0x03, 0x62, 0xa9, 0x8b, 0x94, 0xa6, 0xaa, 0x18, 0xcb, 0x27, 0x8d, 0x49, 0xa6, 0x17, 0x15, 0x07}}}, {{{0xd9, 0xb6, 0xd4, 0x9d, 0xd4, 0x6a, 0xaf, 0x70, 0x07, 0x2c, 0x10, 0x9e, 0xbd, 0x11, 0xad, 0xe4, 0x26, 0x33, 0x70, 0x92, 0x78, 0x1c, 0x74, 0x9f, 0x75, 0x60, 0x56, 0xf4, 0x39, 0xa8, 0xa8, 0x62}} , {{0x3b, 0xbf, 0x55, 0x35, 0x61, 0x8b, 0x44, 0x97, 0xe8, 0x3a, 0x55, 0xc1, 0xc8, 0x3b, 0xfd, 0x95, 0x29, 0x11, 0x60, 0x96, 0x1e, 0xcb, 0x11, 0x9d, 0xc2, 0x03, 0x8a, 0x1b, 0xc6, 0xd6, 0x45, 0x3d}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x7e, 0x0e, 0x50, 0xb2, 0xcc, 0x0d, 0x6b, 0xa6, 0x71, 0x5b, 0x42, 0xed, 0xbd, 0xaf, 0xac, 0xf0, 0xfc, 0x12, 0xa2, 0x3f, 0x4e, 0xda, 0xe8, 0x11, 0xf3, 0x23, 0xe1, 0x04, 0x62, 0x03, 0x1c, 0x4e}} , {{0xc8, 0xb1, 0x1b, 0x6f, 0x73, 0x61, 0x3d, 0x27, 0x0d, 0x7d, 0x7a, 0x25, 0x5f, 0x73, 0x0e, 0x2f, 0x93, 0xf6, 0x24, 0xd8, 0x4f, 0x90, 0xac, 0xa2, 0x62, 0x0a, 0xf0, 0x61, 0xd9, 0x08, 0x59, 0x6a}}}, {{{0x6f, 0x2d, 0x55, 0xf8, 0x2f, 0x8e, 0xf0, 0x18, 0x3b, 0xea, 0xdd, 0x26, 0x72, 0xd1, 0xf5, 0xfe, 0xe5, 0xb8, 0xe6, 0xd3, 0x10, 0x48, 0x46, 0x49, 0x3a, 0x9f, 0x5e, 0x45, 0x6b, 0x90, 0xe8, 0x7f}} , {{0xd3, 0x76, 0x69, 0x33, 0x7b, 0xb9, 0x40, 0x70, 0xee, 0xa6, 0x29, 0x6b, 0xdd, 0xd0, 0x5d, 0x8d, 0xc1, 0x3e, 0x4a, 0xea, 0x37, 0xb1, 0x03, 0x02, 0x03, 0x35, 0xf1, 0x28, 0x9d, 0xff, 0x00, 0x13}}}, {{{0x7a, 0xdb, 0x12, 0xd2, 0x8a, 0x82, 0x03, 0x1b, 0x1e, 0xaf, 0xf9, 0x4b, 0x9c, 0xbe, 0xae, 0x7c, 0xe4, 0x94, 0x2a, 0x23, 0xb3, 0x62, 0x86, 0xe7, 0xfd, 0x23, 0xaa, 0x99, 0xbd, 0x2b, 0x11, 0x6c}} , {{0x8d, 0xa6, 0xd5, 0xac, 0x9d, 0xcc, 0x68, 0x75, 0x7f, 0xc3, 0x4d, 0x4b, 0xdd, 0x6c, 0xbb, 0x11, 0x5a, 0x60, 0xe5, 0xbd, 0x7d, 0x27, 0x8b, 0xda, 0xb4, 0x95, 0xf6, 0x03, 0x27, 0xa4, 0x92, 0x3f}}}, {{{0x22, 0xd6, 0xb5, 0x17, 0x84, 0xbf, 0x12, 0xcc, 0x23, 0x14, 0x4a, 0xdf, 0x14, 0x31, 0xbc, 0xa1, 0xac, 0x6e, 0xab, 0xfa, 0x57, 0x11, 0x53, 0xb3, 0x27, 0xe6, 0xf9, 0x47, 0x33, 0x44, 0x34, 0x1e}} , {{0x79, 0xfc, 0xa6, 0xb4, 0x0b, 0x35, 0x20, 0xc9, 0x4d, 0x22, 0x84, 0xc4, 0xa9, 0x20, 0xec, 0x89, 0x94, 0xba, 0x66, 0x56, 0x48, 0xb9, 0x87, 0x7f, 0xca, 0x1e, 0x06, 0xed, 0xa5, 0x55, 0x59, 0x29}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x56, 0xe1, 0xf5, 0xf1, 0xd5, 0xab, 0xa8, 0x2b, 0xae, 0x89, 0xf3, 0xcf, 0x56, 0x9f, 0xf2, 0x4b, 0x31, 0xbc, 0x18, 0xa9, 0x06, 0x5b, 0xbe, 0xb4, 0x61, 0xf8, 0xb2, 0x06, 0x9c, 0x81, 0xab, 0x4c}} , {{0x1f, 0x68, 0x76, 0x01, 0x16, 0x38, 0x2b, 0x0f, 0x77, 0x97, 0x92, 0x67, 0x4e, 0x86, 0x6a, 0x8b, 0xe5, 0xe8, 0x0c, 0xf7, 0x36, 0x39, 0xb5, 0x33, 0xe6, 0xcf, 0x5e, 0xbd, 0x18, 0xfb, 0x10, 0x1f}}}, {{{0x83, 0xf0, 0x0d, 0x63, 0xef, 0x53, 0x6b, 0xb5, 0x6b, 0xf9, 0x83, 0xcf, 0xde, 0x04, 0x22, 0x9b, 0x2c, 0x0a, 0xe0, 0xa5, 0xd8, 0xc7, 0x9c, 0xa5, 0xa3, 0xf6, 0x6f, 0xcf, 0x90, 0x6b, 0x68, 0x7c}} , {{0x33, 0x15, 0xd7, 0x7f, 0x1a, 0xd5, 0x21, 0x58, 0xc4, 0x18, 0xa5, 0xf0, 0xcc, 0x73, 0xa8, 0xfd, 0xfa, 0x18, 0xd1, 0x03, 0x91, 0x8d, 0x52, 0xd2, 0xa3, 0xa4, 0xd3, 0xb1, 0xea, 0x1d, 0x0f, 0x00}}}, {{{0xcc, 0x48, 0x83, 0x90, 0xe5, 0xfd, 0x3f, 0x84, 0xaa, 0xf9, 0x8b, 0x82, 0x59, 0x24, 0x34, 0x68, 0x4f, 0x1c, 0x23, 0xd9, 0xcc, 0x71, 0xe1, 0x7f, 0x8c, 0xaf, 0xf1, 0xee, 0x00, 0xb6, 0xa0, 0x77}} , {{0xf5, 0x1a, 0x61, 0xf7, 0x37, 0x9d, 0x00, 0xf4, 0xf2, 0x69, 0x6f, 0x4b, 0x01, 0x85, 0x19, 0x45, 0x4d, 0x7f, 0x02, 0x7c, 0x6a, 0x05, 0x47, 0x6c, 0x1f, 0x81, 0x20, 0xd4, 0xe8, 0x50, 0x27, 0x72}}}, {{{0x2c, 0x3a, 0xe5, 0xad, 0xf4, 0xdd, 0x2d, 0xf7, 0x5c, 0x44, 0xb5, 0x5b, 0x21, 0xa3, 0x89, 0x5f, 0x96, 0x45, 0xca, 0x4d, 0xa4, 0x21, 0x99, 0x70, 0xda, 0xc4, 0xc4, 0xa0, 0xe5, 0xf4, 0xec, 0x0a}} , {{0x07, 0x68, 0x21, 0x65, 0xe9, 0x08, 0xa0, 0x0b, 0x6a, 0x4a, 0xba, 0xb5, 0x80, 0xaf, 0xd0, 0x1b, 0xc5, 0xf5, 0x4b, 0x73, 0x50, 0x60, 0x2d, 0x71, 0x69, 0x61, 0x0e, 0xc0, 0x20, 0x40, 0x30, 0x19}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xd0, 0x75, 0x57, 0x3b, 0xeb, 0x5c, 0x14, 0x56, 0x50, 0xc9, 0x4f, 0xb8, 0xb8, 0x1e, 0xa3, 0xf4, 0xab, 0xf5, 0xa9, 0x20, 0x15, 0x94, 0x82, 0xda, 0x96, 0x1c, 0x9b, 0x59, 0x8c, 0xff, 0xf4, 0x51}} , {{0xc1, 0x3a, 0x86, 0xd7, 0xb0, 0x06, 0x84, 0x7f, 0x1b, 0xbd, 0xd4, 0x07, 0x78, 0x80, 0x2e, 0xb1, 0xb4, 0xee, 0x52, 0x38, 0xee, 0x9a, 0xf9, 0xf6, 0xf3, 0x41, 0x6e, 0xd4, 0x88, 0x95, 0xac, 0x35}}}, {{{0x41, 0x97, 0xbf, 0x71, 0x6a, 0x9b, 0x72, 0xec, 0xf3, 0xf8, 0x6b, 0xe6, 0x0e, 0x6c, 0x69, 0xa5, 0x2f, 0x68, 0x52, 0xd8, 0x61, 0x81, 0xc0, 0x63, 0x3f, 0xa6, 0x3c, 0x13, 0x90, 0xe6, 0x8d, 0x56}} , {{0xe8, 0x39, 0x30, 0x77, 0x23, 0xb1, 0xfd, 0x1b, 0x3d, 0x3e, 0x74, 0x4d, 0x7f, 0xae, 0x5b, 0x3a, 0xb4, 0x65, 0x0e, 0x3a, 0x43, 0xdc, 0xdc, 0x41, 0x47, 0xe6, 0xe8, 0x92, 0x09, 0x22, 0x48, 0x4c}}}, {{{0x85, 0x57, 0x9f, 0xb5, 0xc8, 0x06, 0xb2, 0x9f, 0x47, 0x3f, 0xf0, 0xfa, 0xe6, 0xa9, 0xb1, 0x9b, 0x6f, 0x96, 0x7d, 0xf9, 0xa4, 0x65, 0x09, 0x75, 0x32, 0xa6, 0x6c, 0x7f, 0x47, 0x4b, 0x2f, 0x4f}} , {{0x34, 0xe9, 0x59, 0x93, 0x9d, 0x26, 0x80, 0x54, 0xf2, 0xcc, 0x3c, 0xc2, 0x25, 0x85, 0xe3, 0x6a, 0xc1, 0x62, 0x04, 0xa7, 0x08, 0x32, 0x6d, 0xa1, 0x39, 0x84, 0x8a, 0x3b, 0x87, 0x5f, 0x11, 0x13}}}, {{{0xda, 0x03, 0x34, 0x66, 0xc4, 0x0c, 0x73, 0x6e, 0xbc, 0x24, 0xb5, 0xf9, 0x70, 0x81, 0x52, 0xe9, 0xf4, 0x7c, 0x23, 0xdd, 0x9f, 0xb8, 0x46, 0xef, 0x1d, 0x22, 0x55, 0x7d, 0x71, 0xc4, 0x42, 0x33}} , {{0xc5, 0x37, 0x69, 0x5b, 0xa8, 0xc6, 0x9d, 0xa4, 0xfc, 0x61, 0x6e, 0x68, 0x46, 0xea, 0xd7, 0x1c, 0x67, 0xd2, 0x7d, 0xfa, 0xf1, 0xcc, 0x54, 0x8d, 0x36, 0x35, 0xc9, 0x00, 0xdf, 0x6c, 0x67, 0x50}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x9a, 0x4d, 0x42, 0x29, 0x5d, 0xa4, 0x6b, 0x6f, 0xa8, 0x8a, 0x4d, 0x91, 0x7b, 0xd2, 0xdf, 0x36, 0xef, 0x01, 0x22, 0xc5, 0xcc, 0x8d, 0xeb, 0x58, 0x3d, 0xb3, 0x50, 0xfc, 0x8b, 0x97, 0x96, 0x33}} , {{0x93, 0x33, 0x07, 0xc8, 0x4a, 0xca, 0xd0, 0xb1, 0xab, 0xbd, 0xdd, 0xa7, 0x7c, 0xac, 0x3e, 0x45, 0xcb, 0xcc, 0x07, 0x91, 0xbf, 0x35, 0x9d, 0xcb, 0x7d, 0x12, 0x3c, 0x11, 0x59, 0x13, 0xcf, 0x5c}}}, {{{0x45, 0xb8, 0x41, 0xd7, 0xab, 0x07, 0x15, 0x00, 0x8e, 0xce, 0xdf, 0xb2, 0x43, 0x5c, 0x01, 0xdc, 0xf4, 0x01, 0x51, 0x95, 0x10, 0x5a, 0xf6, 0x24, 0x24, 0xa0, 0x19, 0x3a, 0x09, 0x2a, 0xaa, 0x3f}} , {{0xdc, 0x8e, 0xeb, 0xc6, 0xbf, 0xdd, 0x11, 0x7b, 0xe7, 0x47, 0xe6, 0xce, 0xe7, 0xb6, 0xc5, 0xe8, 0x8a, 0xdc, 0x4b, 0x57, 0x15, 0x3b, 0x66, 0xca, 0x89, 0xa3, 0xfd, 0xac, 0x0d, 0xe1, 0x1d, 0x7a}}}, {{{0x89, 0xef, 0xbf, 0x03, 0x75, 0xd0, 0x29, 0x50, 0xcb, 0x7d, 0xd6, 0xbe, 0xad, 0x5f, 0x7b, 0x00, 0x32, 0xaa, 0x98, 0xed, 0x3f, 0x8f, 0x92, 0xcb, 0x81, 0x56, 0x01, 0x63, 0x64, 0xa3, 0x38, 0x39}} , {{0x8b, 0xa4, 0xd6, 0x50, 0xb4, 0xaa, 0x5d, 0x64, 0x64, 0x76, 0x2e, 0xa1, 0xa6, 0xb3, 0xb8, 0x7c, 0x7a, 0x56, 0xf5, 0x5c, 0x4e, 0x84, 0x5c, 0xfb, 0xdd, 0xca, 0x48, 0x8b, 0x48, 0xb9, 0xba, 0x34}}}, {{{0xc5, 0xe3, 0xe8, 0xae, 0x17, 0x27, 0xe3, 0x64, 0x60, 0x71, 0x47, 0x29, 0x02, 0x0f, 0x92, 0x5d, 0x10, 0x93, 0xc8, 0x0e, 0xa1, 0xed, 0xba, 0xa9, 0x96, 0x1c, 0xc5, 0x76, 0x30, 0xcd, 0xf9, 0x30}} , {{0x95, 0xb0, 0xbd, 0x8c, 0xbc, 0xa7, 0x4f, 0x7e, 0xfd, 0x4e, 0x3a, 0xbf, 0x5f, 0x04, 0x79, 0x80, 0x2b, 0x5a, 0x9f, 0x4f, 0x68, 0x21, 0x19, 0x71, 0xc6, 0x20, 0x01, 0x42, 0xaa, 0xdf, 0xae, 0x2c}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x90, 0x6e, 0x7e, 0x4b, 0x71, 0x93, 0xc0, 0x72, 0xed, 0xeb, 0x71, 0x24, 0x97, 0x26, 0x9c, 0xfe, 0xcb, 0x3e, 0x59, 0x19, 0xa8, 0x0f, 0x75, 0x7d, 0xbe, 0x18, 0xe6, 0x96, 0x1e, 0x95, 0x70, 0x60}} , {{0x89, 0x66, 0x3e, 0x1d, 0x4c, 0x5f, 0xfe, 0xc0, 0x04, 0x43, 0xd6, 0x44, 0x19, 0xb5, 0xad, 0xc7, 0x22, 0xdc, 0x71, 0x28, 0x64, 0xde, 0x41, 0x38, 0x27, 0x8f, 0x2c, 0x6b, 0x08, 0xb8, 0xb8, 0x7b}}}, {{{0x3d, 0x70, 0x27, 0x9d, 0xd9, 0xaf, 0xb1, 0x27, 0xaf, 0xe3, 0x5d, 0x1e, 0x3a, 0x30, 0x54, 0x61, 0x60, 0xe8, 0xc3, 0x26, 0x3a, 0xbc, 0x7e, 0xf5, 0x81, 0xdd, 0x64, 0x01, 0x04, 0xeb, 0xc0, 0x1e}} , {{0xda, 0x2c, 0xa4, 0xd1, 0xa1, 0xc3, 0x5c, 0x6e, 0x32, 0x07, 0x1f, 0xb8, 0x0e, 0x19, 0x9e, 0x99, 0x29, 0x33, 0x9a, 0xae, 0x7a, 0xed, 0x68, 0x42, 0x69, 0x7c, 0x07, 0xb3, 0x38, 0x2c, 0xf6, 0x3d}}}, {{{0x64, 0xaa, 0xb5, 0x88, 0x79, 0x65, 0x38, 0x8c, 0x94, 0xd6, 0x62, 0x37, 0x7d, 0x64, 0xcd, 0x3a, 0xeb, 0xff, 0xe8, 0x81, 0x09, 0xc7, 0x6a, 0x50, 0x09, 0x0d, 0x28, 0x03, 0x0d, 0x9a, 0x93, 0x0a}} , {{0x42, 0xa3, 0xf1, 0xc5, 0xb4, 0x0f, 0xd8, 0xc8, 0x8d, 0x15, 0x31, 0xbd, 0xf8, 0x07, 0x8b, 0xcd, 0x08, 0x8a, 0xfb, 0x18, 0x07, 0xfe, 0x8e, 0x52, 0x86, 0xef, 0xbe, 0xec, 0x49, 0x52, 0x99, 0x08}}}, {{{0x0f, 0xa9, 0xd5, 0x01, 0xaa, 0x48, 0x4f, 0x28, 0x66, 0x32, 0x1a, 0xba, 0x7c, 0xea, 0x11, 0x80, 0x17, 0x18, 0x9b, 0x56, 0x88, 0x25, 0x06, 0x69, 0x12, 0x2c, 0xea, 0x56, 0x69, 0x41, 0x24, 0x19}} , {{0xde, 0x21, 0xf0, 0xda, 0x8a, 0xfb, 0xb1, 0xb8, 0xcd, 0xc8, 0x6a, 0x82, 0x19, 0x73, 0xdb, 0xc7, 0xcf, 0x88, 0xeb, 0x96, 0xee, 0x6f, 0xfb, 0x06, 0xd2, 0xcd, 0x7d, 0x7b, 0x12, 0x28, 0x8e, 0x0c}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x93, 0x44, 0x97, 0xce, 0x28, 0xff, 0x3a, 0x40, 0xc4, 0xf5, 0xf6, 0x9b, 0xf4, 0x6b, 0x07, 0x84, 0xfb, 0x98, 0xd8, 0xec, 0x8c, 0x03, 0x57, 0xec, 0x49, 0xed, 0x63, 0xb6, 0xaa, 0xff, 0x98, 0x28}} , {{0x3d, 0x16, 0x35, 0xf3, 0x46, 0xbc, 0xb3, 0xf4, 0xc6, 0xb6, 0x4f, 0xfa, 0xf4, 0xa0, 0x13, 0xe6, 0x57, 0x45, 0x93, 0xb9, 0xbc, 0xd6, 0x59, 0xe7, 0x77, 0x94, 0x6c, 0xab, 0x96, 0x3b, 0x4f, 0x09}}}, {{{0x5a, 0xf7, 0x6b, 0x01, 0x12, 0x4f, 0x51, 0xc1, 0x70, 0x84, 0x94, 0x47, 0xb2, 0x01, 0x6c, 0x71, 0xd7, 0xcc, 0x17, 0x66, 0x0f, 0x59, 0x5d, 0x5d, 0x10, 0x01, 0x57, 0x11, 0xf5, 0xdd, 0xe2, 0x34}} , {{0x26, 0xd9, 0x1f, 0x5c, 0x58, 0xac, 0x8b, 0x03, 0xd2, 0xc3, 0x85, 0x0f, 0x3a, 0xc3, 0x7f, 0x6d, 0x8e, 0x86, 0xcd, 0x52, 0x74, 0x8f, 0x55, 0x77, 0x17, 0xb7, 0x8e, 0xb7, 0x88, 0xea, 0xda, 0x1b}}}, {{{0xb6, 0xea, 0x0e, 0x40, 0x93, 0x20, 0x79, 0x35, 0x6a, 0x61, 0x84, 0x5a, 0x07, 0x6d, 0xf9, 0x77, 0x6f, 0xed, 0x69, 0x1c, 0x0d, 0x25, 0x76, 0xcc, 0xf0, 0xdb, 0xbb, 0xc5, 0xad, 0xe2, 0x26, 0x57}} , {{0xcf, 0xe8, 0x0e, 0x6b, 0x96, 0x7d, 0xed, 0x27, 0xd1, 0x3c, 0xa9, 0xd9, 0x50, 0xa9, 0x98, 0x84, 0x5e, 0x86, 0xef, 0xd6, 0xf0, 0xf8, 0x0e, 0x89, 0x05, 0x2f, 0xd9, 0x5f, 0x15, 0x5f, 0x73, 0x79}}}, {{{0xc8, 0x5c, 0x16, 0xfe, 0xed, 0x9f, 0x26, 0x56, 0xf6, 0x4b, 0x9f, 0xa7, 0x0a, 0x85, 0xfe, 0xa5, 0x8c, 0x87, 0xdd, 0x98, 0xce, 0x4e, 0xc3, 0x58, 0x55, 0xb2, 0x7b, 0x3d, 0xd8, 0x6b, 0xb5, 0x4c}} , {{0x65, 0x38, 0xa0, 0x15, 0xfa, 0xa7, 0xb4, 0x8f, 0xeb, 0xc4, 0x86, 0x9b, 0x30, 0xa5, 0x5e, 0x4d, 0xea, 0x8a, 0x9a, 0x9f, 0x1a, 0xd8, 0x5b, 0x53, 0x14, 0x19, 0x25, 0x63, 0xb4, 0x6f, 0x1f, 0x5d}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xac, 0x8f, 0xbc, 0x1e, 0x7d, 0x8b, 0x5a, 0x0b, 0x8d, 0xaf, 0x76, 0x2e, 0x71, 0xe3, 0x3b, 0x6f, 0x53, 0x2f, 0x3e, 0x90, 0x95, 0xd4, 0x35, 0x14, 0x4f, 0x8c, 0x3c, 0xce, 0x57, 0x1c, 0x76, 0x49}} , {{0xa8, 0x50, 0xe1, 0x61, 0x6b, 0x57, 0x35, 0xeb, 0x44, 0x0b, 0x0c, 0x6e, 0xf9, 0x25, 0x80, 0x74, 0xf2, 0x8f, 0x6f, 0x7a, 0x3e, 0x7f, 0x2d, 0xf3, 0x4e, 0x09, 0x65, 0x10, 0x5e, 0x03, 0x25, 0x32}}}, {{{0xa9, 0x60, 0xdc, 0x0f, 0x64, 0xe5, 0x1d, 0xe2, 0x8d, 0x4f, 0x79, 0x2f, 0x0e, 0x24, 0x02, 0x00, 0x05, 0x77, 0x43, 0x25, 0x3d, 0x6a, 0xc7, 0xb7, 0xbf, 0x04, 0x08, 0x65, 0xf4, 0x39, 0x4b, 0x65}} , {{0x96, 0x19, 0x12, 0x6b, 0x6a, 0xb7, 0xe3, 0xdc, 0x45, 0x9b, 0xdb, 0xb4, 0xa8, 0xae, 0xdc, 0xa8, 0x14, 0x44, 0x65, 0x62, 0xce, 0x34, 0x9a, 0x84, 0x18, 0x12, 0x01, 0xf1, 0xe2, 0x7b, 0xce, 0x50}}}, {{{0x41, 0x21, 0x30, 0x53, 0x1b, 0x47, 0x01, 0xb7, 0x18, 0xd8, 0x82, 0x57, 0xbd, 0xa3, 0x60, 0xf0, 0x32, 0xf6, 0x5b, 0xf0, 0x30, 0x88, 0x91, 0x59, 0xfd, 0x90, 0xa2, 0xb9, 0x55, 0x93, 0x21, 0x34}} , {{0x97, 0x67, 0x9e, 0xeb, 0x6a, 0xf9, 0x6e, 0xd6, 0x73, 0xe8, 0x6b, 0x29, 0xec, 0x63, 0x82, 0x00, 0xa8, 0x99, 0x1c, 0x1d, 0x30, 0xc8, 0x90, 0x52, 0x90, 0xb6, 0x6a, 0x80, 0x4e, 0xff, 0x4b, 0x51}}}, {{{0x0f, 0x7d, 0x63, 0x8c, 0x6e, 0x5c, 0xde, 0x30, 0xdf, 0x65, 0xfa, 0x2e, 0xb0, 0xa3, 0x25, 0x05, 0x54, 0xbd, 0x25, 0xba, 0x06, 0xae, 0xdf, 0x8b, 0xd9, 0x1b, 0xea, 0x38, 0xb3, 0x05, 0x16, 0x09}} , {{0xc7, 0x8c, 0xbf, 0x64, 0x28, 0xad, 0xf8, 0xa5, 0x5a, 0x6f, 0xc9, 0xba, 0xd5, 0x7f, 0xd5, 0xd6, 0xbd, 0x66, 0x2f, 0x3d, 0xaa, 0x54, 0xf6, 0xba, 0x32, 0x22, 0x9a, 0x1e, 0x52, 0x05, 0xf4, 0x1d}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xaa, 0x1f, 0xbb, 0xeb, 0xfe, 0xe4, 0x87, 0xfc, 0xb1, 0x2c, 0xb7, 0x88, 0xf4, 0xc6, 0xb9, 0xf5, 0x24, 0x46, 0xf2, 0xa5, 0x9f, 0x8f, 0x8a, 0x93, 0x70, 0x69, 0xd4, 0x56, 0xec, 0xfd, 0x06, 0x46}} , {{0x4e, 0x66, 0xcf, 0x4e, 0x34, 0xce, 0x0c, 0xd9, 0xa6, 0x50, 0xd6, 0x5e, 0x95, 0xaf, 0xe9, 0x58, 0xfa, 0xee, 0x9b, 0xb8, 0xa5, 0x0f, 0x35, 0xe0, 0x43, 0x82, 0x6d, 0x65, 0xe6, 0xd9, 0x00, 0x0f}}}, {{{0x7b, 0x75, 0x3a, 0xfc, 0x64, 0xd3, 0x29, 0x7e, 0xdd, 0x49, 0x9a, 0x59, 0x53, 0xbf, 0xb4, 0xa7, 0x52, 0xb3, 0x05, 0xab, 0xc3, 0xaf, 0x16, 0x1a, 0x85, 0x42, 0x32, 0xa2, 0x86, 0xfa, 0x39, 0x43}} , {{0x0e, 0x4b, 0xa3, 0x63, 0x8a, 0xfe, 0xa5, 0x58, 0xf1, 0x13, 0xbd, 0x9d, 0xaa, 0x7f, 0x76, 0x40, 0x70, 0x81, 0x10, 0x75, 0x99, 0xbb, 0xbe, 0x0b, 0x16, 0xe9, 0xba, 0x62, 0x34, 0xcc, 0x07, 0x6d}}}, {{{0xc3, 0xf1, 0xc6, 0x93, 0x65, 0xee, 0x0b, 0xbc, 0xea, 0x14, 0xf0, 0xc1, 0xf8, 0x84, 0x89, 0xc2, 0xc9, 0xd7, 0xea, 0x34, 0xca, 0xa7, 0xc4, 0x99, 0xd5, 0x50, 0x69, 0xcb, 0xd6, 0x21, 0x63, 0x7c}} , {{0x99, 0xeb, 0x7c, 0x31, 0x73, 0x64, 0x67, 0x7f, 0x0c, 0x66, 0xaa, 0x8c, 0x69, 0x91, 0xe2, 0x26, 0xd3, 0x23, 0xe2, 0x76, 0x5d, 0x32, 0x52, 0xdf, 0x5d, 0xc5, 0x8f, 0xb7, 0x7c, 0x84, 0xb3, 0x70}}}, {{{0xeb, 0x01, 0xc7, 0x36, 0x97, 0x4e, 0xb6, 0xab, 0x5f, 0x0d, 0x2c, 0xba, 0x67, 0x64, 0x55, 0xde, 0xbc, 0xff, 0xa6, 0xec, 0x04, 0xd3, 0x8d, 0x39, 0x56, 0x5e, 0xee, 0xf8, 0xe4, 0x2e, 0x33, 0x62}} , {{0x65, 0xef, 0xb8, 0x9f, 0xc8, 0x4b, 0xa7, 0xfd, 0x21, 0x49, 0x9b, 0x92, 0x35, 0x82, 0xd6, 0x0a, 0x9b, 0xf2, 0x79, 0xf1, 0x47, 0x2f, 0x6a, 0x7e, 0x9f, 0xcf, 0x18, 0x02, 0x3c, 0xfb, 0x1b, 0x3e}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x2f, 0x8b, 0xc8, 0x40, 0x51, 0xd1, 0xac, 0x1a, 0x0b, 0xe4, 0xa9, 0xa2, 0x42, 0x21, 0x19, 0x2f, 0x7b, 0x97, 0xbf, 0xf7, 0x57, 0x6d, 0x3f, 0x3d, 0x4f, 0x0f, 0xe2, 0xb2, 0x81, 0x00, 0x9e, 0x7b}} , {{0x8c, 0x85, 0x2b, 0xc4, 0xfc, 0xf1, 0xab, 0xe8, 0x79, 0x22, 0xc4, 0x84, 0x17, 0x3a, 0xfa, 0x86, 0xa6, 0x7d, 0xf9, 0xf3, 0x6f, 0x03, 0x57, 0x20, 0x4d, 0x79, 0xf9, 0x6e, 0x71, 0x54, 0x38, 0x09}}}, {{{0x40, 0x29, 0x74, 0xa8, 0x2f, 0x5e, 0xf9, 0x79, 0xa4, 0xf3, 0x3e, 0xb9, 0xfd, 0x33, 0x31, 0xac, 0x9a, 0x69, 0x88, 0x1e, 0x77, 0x21, 0x2d, 0xf3, 0x91, 0x52, 0x26, 0x15, 0xb2, 0xa6, 0xcf, 0x7e}} , {{0xc6, 0x20, 0x47, 0x6c, 0xa4, 0x7d, 0xcb, 0x63, 0xea, 0x5b, 0x03, 0xdf, 0x3e, 0x88, 0x81, 0x6d, 0xce, 0x07, 0x42, 0x18, 0x60, 0x7e, 0x7b, 0x55, 0xfe, 0x6a, 0xf3, 0xda, 0x5c, 0x8b, 0x95, 0x10}}}, {{{0x62, 0xe4, 0x0d, 0x03, 0xb4, 0xd7, 0xcd, 0xfa, 0xbd, 0x46, 0xdf, 0x93, 0x71, 0x10, 0x2c, 0xa8, 0x3b, 0xb6, 0x09, 0x05, 0x70, 0x84, 0x43, 0x29, 0xa8, 0x59, 0xf5, 0x8e, 0x10, 0xe4, 0xd7, 0x20}} , {{0x57, 0x82, 0x1c, 0xab, 0xbf, 0x62, 0x70, 0xe8, 0xc4, 0xcf, 0xf0, 0x28, 0x6e, 0x16, 0x3c, 0x08, 0x78, 0x89, 0x85, 0x46, 0x0f, 0xf6, 0x7f, 0xcf, 0xcb, 0x7e, 0xb8, 0x25, 0xe9, 0x5a, 0xfa, 0x03}}}, {{{0xfb, 0x95, 0x92, 0x63, 0x50, 0xfc, 0x62, 0xf0, 0xa4, 0x5e, 0x8c, 0x18, 0xc2, 0x17, 0x24, 0xb7, 0x78, 0xc2, 0xa9, 0xe7, 0x6a, 0x32, 0xd6, 0x29, 0x85, 0xaf, 0xcb, 0x8d, 0x91, 0x13, 0xda, 0x6b}} , {{0x36, 0x0a, 0xc2, 0xb6, 0x4b, 0xa5, 0x5d, 0x07, 0x17, 0x41, 0x31, 0x5f, 0x62, 0x46, 0xf8, 0x92, 0xf9, 0x66, 0x48, 0x73, 0xa6, 0x97, 0x0d, 0x7d, 0x88, 0xee, 0x62, 0xb1, 0x03, 0xa8, 0x3f, 0x2c}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x4a, 0xb1, 0x70, 0x8a, 0xa9, 0xe8, 0x63, 0x79, 0x00, 0xe2, 0x25, 0x16, 0xca, 0x4b, 0x0f, 0xa4, 0x66, 0xad, 0x19, 0x9f, 0x88, 0x67, 0x0c, 0x8b, 0xc2, 0x4a, 0x5b, 0x2b, 0x6d, 0x95, 0xaf, 0x19}} , {{0x8b, 0x9d, 0xb6, 0xcc, 0x60, 0xb4, 0x72, 0x4f, 0x17, 0x69, 0x5a, 0x4a, 0x68, 0x34, 0xab, 0xa1, 0x45, 0x32, 0x3c, 0x83, 0x87, 0x72, 0x30, 0x54, 0x77, 0x68, 0xae, 0xfb, 0xb5, 0x8b, 0x22, 0x5e}}}, {{{0xf1, 0xb9, 0x87, 0x35, 0xc5, 0xbb, 0xb9, 0xcf, 0xf5, 0xd6, 0xcd, 0xd5, 0x0c, 0x7c, 0x0e, 0xe6, 0x90, 0x34, 0xfb, 0x51, 0x42, 0x1e, 0x6d, 0xac, 0x9a, 0x46, 0xc4, 0x97, 0x29, 0x32, 0xbf, 0x45}} , {{0x66, 0x9e, 0xc6, 0x24, 0xc0, 0xed, 0xa5, 0x5d, 0x88, 0xd4, 0xf0, 0x73, 0x97, 0x7b, 0xea, 0x7f, 0x42, 0xff, 0x21, 0xa0, 0x9b, 0x2f, 0x9a, 0xfd, 0x53, 0x57, 0x07, 0x84, 0x48, 0x88, 0x9d, 0x52}}}, {{{0xc6, 0x96, 0x48, 0x34, 0x2a, 0x06, 0xaf, 0x94, 0x3d, 0xf4, 0x1a, 0xcf, 0xf2, 0xc0, 0x21, 0xc2, 0x42, 0x5e, 0xc8, 0x2f, 0x35, 0xa2, 0x3e, 0x29, 0xfa, 0x0c, 0x84, 0xe5, 0x89, 0x72, 0x7c, 0x06}} , {{0x32, 0x65, 0x03, 0xe5, 0x89, 0xa6, 0x6e, 0xb3, 0x5b, 0x8e, 0xca, 0xeb, 0xfe, 0x22, 0x56, 0x8b, 0x5d, 0x14, 0x4b, 0x4d, 0xf9, 0xbe, 0xb5, 0xf5, 0xe6, 0x5c, 0x7b, 0x8b, 0xf4, 0x13, 0x11, 0x34}}}, {{{0x07, 0xc6, 0x22, 0x15, 0xe2, 0x9c, 0x60, 0xa2, 0x19, 0xd9, 0x27, 0xae, 0x37, 0x4e, 0xa6, 0xc9, 0x80, 0xa6, 0x91, 0x8f, 0x12, 0x49, 0xe5, 0x00, 0x18, 0x47, 0xd1, 0xd7, 0x28, 0x22, 0x63, 0x39}} , {{0xe8, 0xe2, 0x00, 0x7e, 0xf2, 0x9e, 0x1e, 0x99, 0x39, 0x95, 0x04, 0xbd, 0x1e, 0x67, 0x7b, 0xb2, 0x26, 0xac, 0xe6, 0xaa, 0xe2, 0x46, 0xd5, 0xe4, 0xe8, 0x86, 0xbd, 0xab, 0x7c, 0x55, 0x59, 0x6f}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x24, 0x64, 0x6e, 0x9b, 0x35, 0x71, 0x78, 0xce, 0x33, 0x03, 0x21, 0x33, 0x36, 0xf1, 0x73, 0x9b, 0xb9, 0x15, 0x8b, 0x2c, 0x69, 0xcf, 0x4d, 0xed, 0x4f, 0x4d, 0x57, 0x14, 0x13, 0x82, 0xa4, 0x4d}} , {{0x65, 0x6e, 0x0a, 0xa4, 0x59, 0x07, 0x17, 0xf2, 0x6b, 0x4a, 0x1f, 0x6e, 0xf6, 0xb5, 0xbc, 0x62, 0xe4, 0xb6, 0xda, 0xa2, 0x93, 0xbc, 0x29, 0x05, 0xd2, 0xd2, 0x73, 0x46, 0x03, 0x16, 0x40, 0x31}}}, {{{0x4c, 0x73, 0x6d, 0x15, 0xbd, 0xa1, 0x4d, 0x5c, 0x13, 0x0b, 0x24, 0x06, 0x98, 0x78, 0x1c, 0x5b, 0xeb, 0x1f, 0x18, 0x54, 0x43, 0xd9, 0x55, 0x66, 0xda, 0x29, 0x21, 0xe8, 0xb8, 0x3c, 0x42, 0x22}} , {{0xb4, 0xcd, 0x08, 0x6f, 0x15, 0x23, 0x1a, 0x0b, 0x22, 0xed, 0xd1, 0xf1, 0xa7, 0xc7, 0x73, 0x45, 0xf3, 0x9e, 0xce, 0x76, 0xb7, 0xf6, 0x39, 0xb6, 0x8e, 0x79, 0xbe, 0xe9, 0x9b, 0xcf, 0x7d, 0x62}}}, {{{0x92, 0x5b, 0xfc, 0x72, 0xfd, 0xba, 0xf1, 0xfd, 0xa6, 0x7c, 0x95, 0xe3, 0x61, 0x3f, 0xe9, 0x03, 0xd4, 0x2b, 0xd4, 0x20, 0xd9, 0xdb, 0x4d, 0x32, 0x3e, 0xf5, 0x11, 0x64, 0xe3, 0xb4, 0xbe, 0x32}} , {{0x86, 0x17, 0x90, 0xe7, 0xc9, 0x1f, 0x10, 0xa5, 0x6a, 0x2d, 0x39, 0xd0, 0x3b, 0xc4, 0xa6, 0xe9, 0x59, 0x13, 0xda, 0x1a, 0xe6, 0xa0, 0xb9, 0x3c, 0x50, 0xb8, 0x40, 0x7c, 0x15, 0x36, 0x5a, 0x42}}}, {{{0xb4, 0x0b, 0x32, 0xab, 0xdc, 0x04, 0x51, 0x55, 0x21, 0x1e, 0x0b, 0x75, 0x99, 0x89, 0x73, 0x35, 0x3a, 0x91, 0x2b, 0xfe, 0xe7, 0x49, 0xea, 0x76, 0xc1, 0xf9, 0x46, 0xb9, 0x53, 0x02, 0x23, 0x04}} , {{0xfc, 0x5a, 0x1e, 0x1d, 0x74, 0x58, 0x95, 0xa6, 0x8f, 0x7b, 0x97, 0x3e, 0x17, 0x3b, 0x79, 0x2d, 0xa6, 0x57, 0xef, 0x45, 0x02, 0x0b, 0x4d, 0x6e, 0x9e, 0x93, 0x8d, 0x2f, 0xd9, 0x9d, 0xdb, 0x04}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xc0, 0xd7, 0x56, 0x97, 0x58, 0x91, 0xde, 0x09, 0x4f, 0x9f, 0xbe, 0x63, 0xb0, 0x83, 0x86, 0x43, 0x5d, 0xbc, 0xe0, 0xf3, 0xc0, 0x75, 0xbf, 0x8b, 0x8e, 0xaa, 0xf7, 0x8b, 0x64, 0x6e, 0xb0, 0x63}} , {{0x16, 0xae, 0x8b, 0xe0, 0x9b, 0x24, 0x68, 0x5c, 0x44, 0xc2, 0xd0, 0x08, 0xb7, 0x7b, 0x62, 0xfd, 0x7f, 0xd8, 0xd4, 0xb7, 0x50, 0xfd, 0x2c, 0x1b, 0xbf, 0x41, 0x95, 0xd9, 0x8e, 0xd8, 0x17, 0x1b}}}, {{{0x86, 0x55, 0x37, 0x8e, 0xc3, 0x38, 0x48, 0x14, 0xb5, 0x97, 0xd2, 0xa7, 0x54, 0x45, 0xf1, 0x35, 0x44, 0x38, 0x9e, 0xf1, 0x1b, 0xb6, 0x34, 0x00, 0x3c, 0x96, 0xee, 0x29, 0x00, 0xea, 0x2c, 0x0b}} , {{0xea, 0xda, 0x99, 0x9e, 0x19, 0x83, 0x66, 0x6d, 0xe9, 0x76, 0x87, 0x50, 0xd1, 0xfd, 0x3c, 0x60, 0x87, 0xc6, 0x41, 0xd9, 0x8e, 0xdb, 0x5e, 0xde, 0xaa, 0x9a, 0xd3, 0x28, 0xda, 0x95, 0xea, 0x47}}}, {{{0xd0, 0x80, 0xba, 0x19, 0xae, 0x1d, 0xa9, 0x79, 0xf6, 0x3f, 0xac, 0x5d, 0x6f, 0x96, 0x1f, 0x2a, 0xce, 0x29, 0xb2, 0xff, 0x37, 0xf1, 0x94, 0x8f, 0x0c, 0xb5, 0x28, 0xba, 0x9a, 0x21, 0xf6, 0x66}} , {{0x02, 0xfb, 0x54, 0xb8, 0x05, 0xf3, 0x81, 0x52, 0x69, 0x34, 0x46, 0x9d, 0x86, 0x76, 0x8f, 0xd7, 0xf8, 0x6a, 0x66, 0xff, 0xe6, 0xa7, 0x90, 0xf7, 0x5e, 0xcd, 0x6a, 0x9b, 0x55, 0xfc, 0x9d, 0x48}}}, {{{0xbd, 0xaa, 0x13, 0xe6, 0xcd, 0x45, 0x4a, 0xa4, 0x59, 0x0a, 0x64, 0xb1, 0x98, 0xd6, 0x34, 0x13, 0x04, 0xe6, 0x97, 0x94, 0x06, 0xcb, 0xd4, 0x4e, 0xbb, 0x96, 0xcd, 0xd1, 0x57, 0xd1, 0xe3, 0x06}} , {{0x7a, 0x6c, 0x45, 0x27, 0xc4, 0x93, 0x7f, 0x7d, 0x7c, 0x62, 0x50, 0x38, 0x3a, 0x6b, 0xb5, 0x88, 0xc6, 0xd9, 0xf1, 0x78, 0x19, 0xb9, 0x39, 0x93, 0x3d, 0xc9, 0xe0, 0x9c, 0x3c, 0xce, 0xf5, 0x72}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x24, 0xea, 0x23, 0x7d, 0x56, 0x2c, 0xe2, 0x59, 0x0e, 0x85, 0x60, 0x04, 0x88, 0x5a, 0x74, 0x1e, 0x4b, 0xef, 0x13, 0xda, 0x4c, 0xff, 0x83, 0x45, 0x85, 0x3f, 0x08, 0x95, 0x2c, 0x20, 0x13, 0x1f}} , {{0x48, 0x5f, 0x27, 0x90, 0x5c, 0x02, 0x42, 0xad, 0x78, 0x47, 0x5c, 0xb5, 0x7e, 0x08, 0x85, 0x00, 0xfa, 0x7f, 0xfd, 0xfd, 0xe7, 0x09, 0x11, 0xf2, 0x7e, 0x1b, 0x38, 0x6c, 0x35, 0x6d, 0x33, 0x66}}}, {{{0x93, 0x03, 0x36, 0x81, 0xac, 0xe4, 0x20, 0x09, 0x35, 0x4c, 0x45, 0xb2, 0x1e, 0x4c, 0x14, 0x21, 0xe6, 0xe9, 0x8a, 0x7b, 0x8d, 0xfe, 0x1e, 0xc6, 0x3e, 0xc1, 0x35, 0xfa, 0xe7, 0x70, 0x4e, 0x1d}} , {{0x61, 0x2e, 0xc2, 0xdd, 0x95, 0x57, 0xd1, 0xab, 0x80, 0xe8, 0x63, 0x17, 0xb5, 0x48, 0xe4, 0x8a, 0x11, 0x9e, 0x72, 0xbe, 0x85, 0x8d, 0x51, 0x0a, 0xf2, 0x9f, 0xe0, 0x1c, 0xa9, 0x07, 0x28, 0x7b}}}, {{{0xbb, 0x71, 0x14, 0x5e, 0x26, 0x8c, 0x3d, 0xc8, 0xe9, 0x7c, 0xd3, 0xd6, 0xd1, 0x2f, 0x07, 0x6d, 0xe6, 0xdf, 0xfb, 0x79, 0xd6, 0x99, 0x59, 0x96, 0x48, 0x40, 0x0f, 0x3a, 0x7b, 0xb2, 0xa0, 0x72}} , {{0x4e, 0x3b, 0x69, 0xc8, 0x43, 0x75, 0x51, 0x6c, 0x79, 0x56, 0xe4, 0xcb, 0xf7, 0xa6, 0x51, 0xc2, 0x2c, 0x42, 0x0b, 0xd4, 0x82, 0x20, 0x1c, 0x01, 0x08, 0x66, 0xd7, 0xbf, 0x04, 0x56, 0xfc, 0x02}}}, {{{0x24, 0xe8, 0xb7, 0x60, 0xae, 0x47, 0x80, 0xfc, 0xe5, 0x23, 0xe7, 0xc2, 0xc9, 0x85, 0xe6, 0x98, 0xa0, 0x29, 0x4e, 0xe1, 0x84, 0x39, 0x2d, 0x95, 0x2c, 0xf3, 0x45, 0x3c, 0xff, 0xaf, 0x27, 0x4c}} , {{0x6b, 0xa6, 0xf5, 0x4b, 0x11, 0xbd, 0xba, 0x5b, 0x9e, 0xc4, 0xa4, 0x51, 0x1e, 0xbe, 0xd0, 0x90, 0x3a, 0x9c, 0xc2, 0x26, 0xb6, 0x1e, 0xf1, 0x95, 0x7d, 0xc8, 0x6d, 0x52, 0xe6, 0x99, 0x2c, 0x5f}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x85, 0xe0, 0x24, 0x32, 0xb4, 0xd1, 0xef, 0xfc, 0x69, 0xa2, 0xbf, 0x8f, 0x72, 0x2c, 0x95, 0xf6, 0xe4, 0x6e, 0x7d, 0x90, 0xf7, 0x57, 0x81, 0xa0, 0xf7, 0xda, 0xef, 0x33, 0x07, 0xe3, 0x6b, 0x78}} , {{0x36, 0x27, 0x3e, 0xc6, 0x12, 0x07, 0xab, 0x4e, 0xbe, 0x69, 0x9d, 0xb3, 0xbe, 0x08, 0x7c, 0x2a, 0x47, 0x08, 0xfd, 0xd4, 0xcd, 0x0e, 0x27, 0x34, 0x5b, 0x98, 0x34, 0x2f, 0x77, 0x5f, 0x3a, 0x65}}}, {{{0x13, 0xaa, 0x2e, 0x4c, 0xf0, 0x22, 0xb8, 0x6c, 0xb3, 0x19, 0x4d, 0xeb, 0x6b, 0xd0, 0xa4, 0xc6, 0x9c, 0xdd, 0xc8, 0x5b, 0x81, 0x57, 0x89, 0xdf, 0x33, 0xa9, 0x68, 0x49, 0x80, 0xe4, 0xfe, 0x21}} , {{0x00, 0x17, 0x90, 0x30, 0xe9, 0xd3, 0x60, 0x30, 0x31, 0xc2, 0x72, 0x89, 0x7a, 0x36, 0xa5, 0xbd, 0x39, 0x83, 0x85, 0x50, 0xa1, 0x5d, 0x6c, 0x41, 0x1d, 0xb5, 0x2c, 0x07, 0x40, 0x77, 0x0b, 0x50}}}, {{{0x64, 0x34, 0xec, 0xc0, 0x9e, 0x44, 0x41, 0xaf, 0xa0, 0x36, 0x05, 0x6d, 0xea, 0x30, 0x25, 0x46, 0x35, 0x24, 0x9d, 0x86, 0xbd, 0x95, 0xf1, 0x6a, 0x46, 0xd7, 0x94, 0x54, 0xf9, 0x3b, 0xbd, 0x5d}} , {{0x77, 0x5b, 0xe2, 0x37, 0xc7, 0xe1, 0x7c, 0x13, 0x8c, 0x9f, 0x7b, 0x7b, 0x2a, 0xce, 0x42, 0xa3, 0xb9, 0x2a, 0x99, 0xa8, 0xc0, 0xd8, 0x3c, 0x86, 0xb0, 0xfb, 0xe9, 0x76, 0x77, 0xf7, 0xf5, 0x56}}}, {{{0xdf, 0xb3, 0x46, 0x11, 0x6e, 0x13, 0xb7, 0x28, 0x4e, 0x56, 0xdd, 0xf1, 0xac, 0xad, 0x58, 0xc3, 0xf8, 0x88, 0x94, 0x5e, 0x06, 0x98, 0xa1, 0xe4, 0x6a, 0xfb, 0x0a, 0x49, 0x5d, 0x8a, 0xfe, 0x77}} , {{0x46, 0x02, 0xf5, 0xa5, 0xaf, 0xc5, 0x75, 0x6d, 0xba, 0x45, 0x35, 0x0a, 0xfe, 0xc9, 0xac, 0x22, 0x91, 0x8d, 0x21, 0x95, 0x33, 0x03, 0xc0, 0x8a, 0x16, 0xf3, 0x39, 0xe0, 0x01, 0x0f, 0x53, 0x3c}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x34, 0x75, 0x37, 0x1f, 0x34, 0x4e, 0xa9, 0x1d, 0x68, 0x67, 0xf8, 0x49, 0x98, 0x96, 0xfc, 0x4c, 0x65, 0x97, 0xf7, 0x02, 0x4a, 0x52, 0x6c, 0x01, 0xbd, 0x48, 0xbb, 0x1b, 0xed, 0xa4, 0xe2, 0x53}} , {{0x59, 0xd5, 0x9b, 0x5a, 0xa2, 0x90, 0xd3, 0xb8, 0x37, 0x4c, 0x55, 0x82, 0x28, 0x08, 0x0f, 0x7f, 0xaa, 0x81, 0x65, 0xe0, 0x0c, 0x52, 0xc9, 0xa3, 0x32, 0x27, 0x64, 0xda, 0xfd, 0x34, 0x23, 0x5a}}}, {{{0xb5, 0xb0, 0x0c, 0x4d, 0xb3, 0x7b, 0x23, 0xc8, 0x1f, 0x8a, 0x39, 0x66, 0xe6, 0xba, 0x4c, 0x10, 0x37, 0xca, 0x9c, 0x7c, 0x05, 0x9e, 0xff, 0xc0, 0xf8, 0x8e, 0xb1, 0x8f, 0x6f, 0x67, 0x18, 0x26}} , {{0x4b, 0x41, 0x13, 0x54, 0x23, 0x1a, 0xa4, 0x4e, 0xa9, 0x8b, 0x1e, 0x4b, 0xfc, 0x15, 0x24, 0xbb, 0x7e, 0xcb, 0xb6, 0x1e, 0x1b, 0xf5, 0xf2, 0xc8, 0x56, 0xec, 0x32, 0xa2, 0x60, 0x5b, 0xa0, 0x2a}}}, {{{0xa4, 0x29, 0x47, 0x86, 0x2e, 0x92, 0x4f, 0x11, 0x4f, 0xf3, 0xb2, 0x5c, 0xd5, 0x3e, 0xa6, 0xb9, 0xc8, 0xe2, 0x33, 0x11, 0x1f, 0x01, 0x8f, 0xb0, 0x9b, 0xc7, 0xa5, 0xff, 0x83, 0x0f, 0x1e, 0x28}} , {{0x1d, 0x29, 0x7a, 0xa1, 0xec, 0x8e, 0xb5, 0xad, 0xea, 0x02, 0x68, 0x60, 0x74, 0x29, 0x1c, 0xa5, 0xcf, 0xc8, 0x3b, 0x7d, 0x8b, 0x2b, 0x7c, 0xad, 0xa4, 0x40, 0x17, 0x51, 0x59, 0x7c, 0x2e, 0x5d}}}, {{{0x0a, 0x6c, 0x4f, 0xbc, 0x3e, 0x32, 0xe7, 0x4a, 0x1a, 0x13, 0xc1, 0x49, 0x38, 0xbf, 0xf7, 0xc2, 0xd3, 0x8f, 0x6b, 0xad, 0x52, 0xf7, 0xcf, 0xbc, 0x27, 0xcb, 0x40, 0x67, 0x76, 0xcd, 0x6d, 0x56}} , {{0xe5, 0xb0, 0x27, 0xad, 0xbe, 0x9b, 0xf2, 0xb5, 0x63, 0xde, 0x3a, 0x23, 0x95, 0xb7, 0x0a, 0x7e, 0xf3, 0x9e, 0x45, 0x6f, 0x19, 0x39, 0x75, 0x8f, 0x39, 0x3d, 0x0f, 0xc0, 0x9f, 0xf1, 0xe9, 0x51}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x88, 0xaa, 0x14, 0x24, 0x86, 0x94, 0x11, 0x12, 0x3e, 0x1a, 0xb5, 0xcc, 0xbb, 0xe0, 0x9c, 0xd5, 0x9c, 0x6d, 0xba, 0x58, 0x72, 0x8d, 0xfb, 0x22, 0x7b, 0x9f, 0x7c, 0x94, 0x30, 0xb3, 0x51, 0x21}} , {{0xf6, 0x74, 0x3d, 0xf2, 0xaf, 0xd0, 0x1e, 0x03, 0x7c, 0x23, 0x6b, 0xc9, 0xfc, 0x25, 0x70, 0x90, 0xdc, 0x9a, 0xa4, 0xfb, 0x49, 0xfc, 0x3d, 0x0a, 0x35, 0x38, 0x6f, 0xe4, 0x7e, 0x50, 0x01, 0x2a}}}, {{{0xd6, 0xe3, 0x96, 0x61, 0x3a, 0xfd, 0xef, 0x9b, 0x1f, 0x90, 0xa4, 0x24, 0x14, 0x5b, 0xc8, 0xde, 0x50, 0xb1, 0x1d, 0xaf, 0xe8, 0x55, 0x8a, 0x87, 0x0d, 0xfe, 0xaa, 0x3b, 0x82, 0x2c, 0x8d, 0x7b}} , {{0x85, 0x0c, 0xaf, 0xf8, 0x83, 0x44, 0x49, 0xd9, 0x45, 0xcf, 0xf7, 0x48, 0xd9, 0x53, 0xb4, 0xf1, 0x65, 0xa0, 0xe1, 0xc3, 0xb3, 0x15, 0xed, 0x89, 0x9b, 0x4f, 0x62, 0xb3, 0x57, 0xa5, 0x45, 0x1c}}}, {{{0x8f, 0x12, 0xea, 0xaf, 0xd1, 0x1f, 0x79, 0x10, 0x0b, 0xf6, 0xa3, 0x7b, 0xea, 0xac, 0x8b, 0x57, 0x32, 0x62, 0xe7, 0x06, 0x12, 0x51, 0xa0, 0x3b, 0x43, 0x5e, 0xa4, 0x20, 0x78, 0x31, 0xce, 0x0d}} , {{0x84, 0x7c, 0xc2, 0xa6, 0x91, 0x23, 0xce, 0xbd, 0xdc, 0xf9, 0xce, 0xd5, 0x75, 0x30, 0x22, 0xe6, 0xf9, 0x43, 0x62, 0x0d, 0xf7, 0x75, 0x9d, 0x7f, 0x8c, 0xff, 0x7d, 0xe4, 0x72, 0xac, 0x9f, 0x1c}}}, {{{0x88, 0xc1, 0x99, 0xd0, 0x3c, 0x1c, 0x5d, 0xb4, 0xef, 0x13, 0x0f, 0x90, 0xb9, 0x36, 0x2f, 0x95, 0x95, 0xc6, 0xdc, 0xde, 0x0a, 0x51, 0xe2, 0x8d, 0xf3, 0xbc, 0x51, 0xec, 0xdf, 0xb1, 0xa2, 0x5f}} , {{0x2e, 0x68, 0xa1, 0x23, 0x7d, 0x9b, 0x40, 0x69, 0x85, 0x7b, 0x42, 0xbf, 0x90, 0x4b, 0xd6, 0x40, 0x2f, 0xd7, 0x52, 0x52, 0xb2, 0x21, 0xde, 0x64, 0xbd, 0x88, 0xc3, 0x6d, 0xa5, 0xfa, 0x81, 0x3f}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xfb, 0xfd, 0x47, 0x7b, 0x8a, 0x66, 0x9e, 0x79, 0x2e, 0x64, 0x82, 0xef, 0xf7, 0x21, 0xec, 0xf6, 0xd8, 0x86, 0x09, 0x31, 0x7c, 0xdd, 0x03, 0x6a, 0x58, 0xa0, 0x77, 0xb7, 0x9b, 0x8c, 0x87, 0x1f}} , {{0x55, 0x47, 0xe4, 0xa8, 0x3d, 0x55, 0x21, 0x34, 0xab, 0x1d, 0xae, 0xe0, 0xf4, 0xea, 0xdb, 0xc5, 0xb9, 0x58, 0xbf, 0xc4, 0x2a, 0x89, 0x31, 0x1a, 0xf4, 0x2d, 0xe1, 0xca, 0x37, 0x99, 0x47, 0x59}}}, {{{0xc7, 0xca, 0x63, 0xc1, 0x49, 0xa9, 0x35, 0x45, 0x55, 0x7e, 0xda, 0x64, 0x32, 0x07, 0x50, 0xf7, 0x32, 0xac, 0xde, 0x75, 0x58, 0x9b, 0x11, 0xb2, 0x3a, 0x1f, 0xf5, 0xf7, 0x79, 0x04, 0xe6, 0x08}} , {{0x46, 0xfa, 0x22, 0x4b, 0xfa, 0xe1, 0xfe, 0x96, 0xfc, 0x67, 0xba, 0x67, 0x97, 0xc4, 0xe7, 0x1b, 0x86, 0x90, 0x5f, 0xee, 0xf4, 0x5b, 0x11, 0xb2, 0xcd, 0xad, 0xee, 0xc2, 0x48, 0x6c, 0x2b, 0x1b}}}, {{{0xe3, 0x39, 0x62, 0xb4, 0x4f, 0x31, 0x04, 0xc9, 0xda, 0xd5, 0x73, 0x51, 0x57, 0xc5, 0xb8, 0xf3, 0xa3, 0x43, 0x70, 0xe4, 0x61, 0x81, 0x84, 0xe2, 0xbb, 0xbf, 0x4f, 0x9e, 0xa4, 0x5e, 0x74, 0x06}} , {{0x29, 0xac, 0xff, 0x27, 0xe0, 0x59, 0xbe, 0x39, 0x9c, 0x0d, 0x83, 0xd7, 0x10, 0x0b, 0x15, 0xb7, 0xe1, 0xc2, 0x2c, 0x30, 0x73, 0x80, 0x3a, 0x7d, 0x5d, 0xab, 0x58, 0x6b, 0xc1, 0xf0, 0xf4, 0x22}}}, {{{0xfe, 0x7f, 0xfb, 0x35, 0x7d, 0xc6, 0x01, 0x23, 0x28, 0xc4, 0x02, 0xac, 0x1f, 0x42, 0xb4, 0x9d, 0xfc, 0x00, 0x94, 0xa5, 0xee, 0xca, 0xda, 0x97, 0x09, 0x41, 0x77, 0x87, 0x5d, 0x7b, 0x87, 0x78}} , {{0xf5, 0xfb, 0x90, 0x2d, 0x81, 0x19, 0x9e, 0x2f, 0x6d, 0x85, 0x88, 0x8c, 0x40, 0x5c, 0x77, 0x41, 0x4d, 0x01, 0x19, 0x76, 0x60, 0xe8, 0x4c, 0x48, 0xe4, 0x33, 0x83, 0x32, 0x6c, 0xb4, 0x41, 0x03}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xff, 0x10, 0xc2, 0x09, 0x4f, 0x6e, 0xf4, 0xd2, 0xdf, 0x7e, 0xca, 0x7b, 0x1c, 0x1d, 0xba, 0xa3, 0xb6, 0xda, 0x67, 0x33, 0xd4, 0x87, 0x36, 0x4b, 0x11, 0x20, 0x05, 0xa6, 0x29, 0xc1, 0x87, 0x17}} , {{0xf6, 0x96, 0xca, 0x2f, 0xda, 0x38, 0xa7, 0x1b, 0xfc, 0xca, 0x7d, 0xfe, 0x08, 0x89, 0xe2, 0x47, 0x2b, 0x6a, 0x5d, 0x4b, 0xfa, 0xa1, 0xb4, 0xde, 0xb6, 0xc2, 0x31, 0x51, 0xf5, 0xe0, 0xa4, 0x0b}}}, {{{0x5c, 0xe5, 0xc6, 0x04, 0x8e, 0x2b, 0x57, 0xbe, 0x38, 0x85, 0x23, 0xcb, 0xb7, 0xbe, 0x4f, 0xa9, 0xd3, 0x6e, 0x12, 0xaa, 0xd5, 0xb2, 0x2e, 0x93, 0x29, 0x9a, 0x4a, 0x88, 0x18, 0x43, 0xf5, 0x01}} , {{0x50, 0xfc, 0xdb, 0xa2, 0x59, 0x21, 0x8d, 0xbd, 0x7e, 0x33, 0xae, 0x2f, 0x87, 0x1a, 0xd0, 0x97, 0xc7, 0x0d, 0x4d, 0x63, 0x01, 0xef, 0x05, 0x84, 0xec, 0x40, 0xdd, 0xa8, 0x0a, 0x4f, 0x70, 0x0b}}}, {{{0x41, 0x69, 0x01, 0x67, 0x5c, 0xd3, 0x8a, 0xc5, 0xcf, 0x3f, 0xd1, 0x57, 0xd1, 0x67, 0x3e, 0x01, 0x39, 0xb5, 0xcb, 0x81, 0x56, 0x96, 0x26, 0xb6, 0xc2, 0xe7, 0x5c, 0xfb, 0x63, 0x97, 0x58, 0x06}} , {{0x0c, 0x0e, 0xf3, 0xba, 0xf0, 0xe5, 0xba, 0xb2, 0x57, 0x77, 0xc6, 0x20, 0x9b, 0x89, 0x24, 0xbe, 0xf2, 0x9c, 0x8a, 0xba, 0x69, 0xc1, 0xf1, 0xb0, 0x4f, 0x2a, 0x05, 0x9a, 0xee, 0x10, 0x7e, 0x36}}}, {{{0x3f, 0x26, 0xe9, 0x40, 0xe9, 0x03, 0xad, 0x06, 0x69, 0x91, 0xe0, 0xd1, 0x89, 0x60, 0x84, 0x79, 0xde, 0x27, 0x6d, 0xe6, 0x76, 0xbd, 0xea, 0xe6, 0xae, 0x48, 0xc3, 0x67, 0xc0, 0x57, 0xcd, 0x2f}} , {{0x7f, 0xc1, 0xdc, 0xb9, 0xc7, 0xbc, 0x86, 0x3d, 0x55, 0x4b, 0x28, 0x7a, 0xfb, 0x4d, 0xc7, 0xf8, 0xbc, 0x67, 0x2a, 0x60, 0x4d, 0x8f, 0x07, 0x0b, 0x1a, 0x17, 0xbf, 0xfa, 0xac, 0xa7, 0x3d, 0x1a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x91, 0x3f, 0xed, 0x5e, 0x18, 0x78, 0x3f, 0x23, 0x2c, 0x0d, 0x8c, 0x44, 0x00, 0xe8, 0xfb, 0xe9, 0x8e, 0xd6, 0xd1, 0x36, 0x58, 0x57, 0x9e, 0xae, 0x4b, 0x5c, 0x0b, 0x07, 0xbc, 0x6b, 0x55, 0x2b}} , {{0x6f, 0x4d, 0x17, 0xd7, 0xe1, 0x84, 0xd9, 0x78, 0xb1, 0x90, 0xfd, 0x2e, 0xb3, 0xb5, 0x19, 0x3f, 0x1b, 0xfa, 0xc0, 0x68, 0xb3, 0xdd, 0x00, 0x2e, 0x89, 0xbd, 0x7e, 0x80, 0x32, 0x13, 0xa0, 0x7b}}}, {{{0x1a, 0x6f, 0x40, 0xaf, 0x44, 0x44, 0xb0, 0x43, 0x8f, 0x0d, 0xd0, 0x1e, 0xc4, 0x0b, 0x19, 0x5d, 0x8e, 0xfe, 0xc1, 0xf3, 0xc5, 0x5c, 0x91, 0xf8, 0x04, 0x4e, 0xbe, 0x90, 0xb4, 0x47, 0x5c, 0x3f}} , {{0xb0, 0x3b, 0x2c, 0xf3, 0xfe, 0x32, 0x71, 0x07, 0x3f, 0xaa, 0xba, 0x45, 0x60, 0xa8, 0x8d, 0xea, 0x54, 0xcb, 0x39, 0x10, 0xb4, 0xf2, 0x8b, 0xd2, 0x14, 0x82, 0x42, 0x07, 0x8e, 0xe9, 0x7c, 0x53}}}, {{{0xb0, 0xae, 0xc1, 0x8d, 0xc9, 0x8f, 0xb9, 0x7a, 0x77, 0xef, 0xba, 0x79, 0xa0, 0x3c, 0xa8, 0xf5, 0x6a, 0xe2, 0x3f, 0x5d, 0x00, 0xe3, 0x4b, 0x45, 0x24, 0x7b, 0x43, 0x78, 0x55, 0x1d, 0x2b, 0x1e}} , {{0x01, 0xb8, 0xd6, 0x16, 0x67, 0xa0, 0x15, 0xb9, 0xe1, 0x58, 0xa4, 0xa7, 0x31, 0x37, 0x77, 0x2f, 0x8b, 0x12, 0x9f, 0xf4, 0x3f, 0xc7, 0x36, 0x66, 0xd2, 0xa8, 0x56, 0xf7, 0x7f, 0x74, 0xc6, 0x41}}}, {{{0x5d, 0xf8, 0xb4, 0xa8, 0x30, 0xdd, 0xcc, 0x38, 0xa5, 0xd3, 0xca, 0xd8, 0xd1, 0xf8, 0xb2, 0x31, 0x91, 0xd4, 0x72, 0x05, 0x57, 0x4a, 0x3b, 0x82, 0x4a, 0xc6, 0x68, 0x20, 0xe2, 0x18, 0x41, 0x61}} , {{0x19, 0xd4, 0x8d, 0x47, 0x29, 0x12, 0x65, 0xb0, 0x11, 0x78, 0x47, 0xb5, 0xcb, 0xa3, 0xa5, 0xfa, 0x05, 0x85, 0x54, 0xa9, 0x33, 0x97, 0x8d, 0x2b, 0xc2, 0xfe, 0x99, 0x35, 0x28, 0xe5, 0xeb, 0x63}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xb1, 0x3f, 0x3f, 0xef, 0xd8, 0xf4, 0xfc, 0xb3, 0xa0, 0x60, 0x50, 0x06, 0x2b, 0x29, 0x52, 0x70, 0x15, 0x0b, 0x24, 0x24, 0xf8, 0x5f, 0x79, 0x18, 0xcc, 0xff, 0x89, 0x99, 0x84, 0xa1, 0xae, 0x13}} , {{0x44, 0x1f, 0xb8, 0xc2, 0x01, 0xc1, 0x30, 0x19, 0x55, 0x05, 0x60, 0x10, 0xa4, 0x6c, 0x2d, 0x67, 0x70, 0xe5, 0x25, 0x1b, 0xf2, 0xbf, 0xdd, 0xfb, 0x70, 0x2b, 0xa1, 0x8c, 0x9c, 0x94, 0x84, 0x08}}}, {{{0xe7, 0xc4, 0x43, 0x4d, 0xc9, 0x2b, 0x69, 0x5d, 0x1d, 0x3c, 0xaf, 0xbb, 0x43, 0x38, 0x4e, 0x98, 0x3d, 0xed, 0x0d, 0x21, 0x03, 0xfd, 0xf0, 0x99, 0x47, 0x04, 0xb0, 0x98, 0x69, 0x55, 0x72, 0x0f}} , {{0x5e, 0xdf, 0x15, 0x53, 0x3b, 0x86, 0x80, 0xb0, 0xf1, 0x70, 0x68, 0x8f, 0x66, 0x7c, 0x0e, 0x49, 0x1a, 0xd8, 0x6b, 0xfe, 0x4e, 0xef, 0xca, 0x47, 0xd4, 0x03, 0xc1, 0x37, 0x50, 0x9c, 0xc1, 0x16}}}, {{{0xcd, 0x24, 0xc6, 0x3e, 0x0c, 0x82, 0x9b, 0x91, 0x2b, 0x61, 0x4a, 0xb2, 0x0f, 0x88, 0x55, 0x5f, 0x5a, 0x57, 0xff, 0xe5, 0x74, 0x0b, 0x13, 0x43, 0x00, 0xd8, 0x6b, 0xcf, 0xd2, 0x15, 0x03, 0x2c}} , {{0xdc, 0xff, 0x15, 0x61, 0x2f, 0x4a, 0x2f, 0x62, 0xf2, 0x04, 0x2f, 0xb5, 0x0c, 0xb7, 0x1e, 0x3f, 0x74, 0x1a, 0x0f, 0xd7, 0xea, 0xcd, 0xd9, 0x7d, 0xf6, 0x12, 0x0e, 0x2f, 0xdb, 0x5a, 0x3b, 0x16}}}, {{{0x1b, 0x37, 0x47, 0xe3, 0xf5, 0x9e, 0xea, 0x2c, 0x2a, 0xe7, 0x82, 0x36, 0xf4, 0x1f, 0x81, 0x47, 0x92, 0x4b, 0x69, 0x0e, 0x11, 0x8c, 0x5d, 0x53, 0x5b, 0x81, 0x27, 0x08, 0xbc, 0xa0, 0xae, 0x25}} , {{0x69, 0x32, 0xa1, 0x05, 0x11, 0x42, 0x00, 0xd2, 0x59, 0xac, 0x4d, 0x62, 0x8b, 0x13, 0xe2, 0x50, 0x5d, 0xa0, 0x9d, 0x9b, 0xfd, 0xbb, 0x12, 0x41, 0x75, 0x41, 0x9e, 0xcc, 0xdc, 0xc7, 0xdc, 0x5d}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xd9, 0xe3, 0x38, 0x06, 0x46, 0x70, 0x82, 0x5e, 0x28, 0x49, 0x79, 0xff, 0x25, 0xd2, 0x4e, 0x29, 0x8d, 0x06, 0xb0, 0x23, 0xae, 0x9b, 0x66, 0xe4, 0x7d, 0xc0, 0x70, 0x91, 0xa3, 0xfc, 0xec, 0x4e}} , {{0x62, 0x12, 0x37, 0x6a, 0x30, 0xf6, 0x1e, 0xfb, 0x14, 0x5c, 0x0d, 0x0e, 0xb7, 0x81, 0x6a, 0xe7, 0x08, 0x05, 0xac, 0xaa, 0x38, 0x46, 0xe2, 0x73, 0xea, 0x4b, 0x07, 0x81, 0x43, 0x7c, 0x9e, 0x5e}}}, {{{0xfc, 0xf9, 0x21, 0x4f, 0x2e, 0x76, 0x9b, 0x1f, 0x28, 0x60, 0x77, 0x43, 0x32, 0x9d, 0xbe, 0x17, 0x30, 0x2a, 0xc6, 0x18, 0x92, 0x66, 0x62, 0x30, 0x98, 0x40, 0x11, 0xa6, 0x7f, 0x18, 0x84, 0x28}} , {{0x3f, 0xab, 0xd3, 0xf4, 0x8a, 0x76, 0xa1, 0x3c, 0xca, 0x2d, 0x49, 0xc3, 0xea, 0x08, 0x0b, 0x85, 0x17, 0x2a, 0xc3, 0x6c, 0x08, 0xfd, 0x57, 0x9f, 0x3d, 0x5f, 0xdf, 0x67, 0x68, 0x42, 0x00, 0x32}}}, {{{0x51, 0x60, 0x1b, 0x06, 0x4f, 0x8a, 0x21, 0xba, 0x38, 0xa8, 0xba, 0xd6, 0x40, 0xf6, 0xe9, 0x9b, 0x76, 0x4d, 0x56, 0x21, 0x5b, 0x0a, 0x9b, 0x2e, 0x4f, 0x3d, 0x81, 0x32, 0x08, 0x9f, 0x97, 0x5b}} , {{0xe5, 0x44, 0xec, 0x06, 0x9d, 0x90, 0x79, 0x9f, 0xd3, 0xe0, 0x79, 0xaf, 0x8f, 0x10, 0xfd, 0xdd, 0x04, 0xae, 0x27, 0x97, 0x46, 0x33, 0x79, 0xea, 0xb8, 0x4e, 0xca, 0x5a, 0x59, 0x57, 0xe1, 0x0e}}}, {{{0x1a, 0xda, 0xf3, 0xa5, 0x41, 0x43, 0x28, 0xfc, 0x7e, 0xe7, 0x71, 0xea, 0xc6, 0x3b, 0x59, 0xcc, 0x2e, 0xd3, 0x40, 0xec, 0xb3, 0x13, 0x6f, 0x44, 0xcd, 0x13, 0xb2, 0x37, 0xf2, 0x6e, 0xd9, 0x1c}} , {{0xe3, 0xdb, 0x60, 0xcd, 0x5c, 0x4a, 0x18, 0x0f, 0xef, 0x73, 0x36, 0x71, 0x8c, 0xf6, 0x11, 0xb4, 0xd8, 0xce, 0x17, 0x5e, 0x4f, 0x26, 0x77, 0x97, 0x5f, 0xcb, 0xef, 0x91, 0xeb, 0x6a, 0x62, 0x7a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x18, 0x4a, 0xa2, 0x97, 0x08, 0x81, 0x2d, 0x83, 0xc4, 0xcc, 0xf0, 0x83, 0x7e, 0xec, 0x0d, 0x95, 0x4c, 0x5b, 0xfb, 0xfa, 0x98, 0x80, 0x4a, 0x66, 0x56, 0x0c, 0x51, 0xb3, 0xf2, 0x04, 0x5d, 0x27}} , {{0x3b, 0xb9, 0xb8, 0x06, 0x5a, 0x2e, 0xfe, 0xc3, 0x82, 0x37, 0x9c, 0xa3, 0x11, 0x1f, 0x9c, 0xa6, 0xda, 0x63, 0x48, 0x9b, 0xad, 0xde, 0x2d, 0xa6, 0xbc, 0x6e, 0x32, 0xda, 0x27, 0x65, 0xdd, 0x57}}}, {{{0x84, 0x4f, 0x37, 0x31, 0x7d, 0x2e, 0xbc, 0xad, 0x87, 0x07, 0x2a, 0x6b, 0x37, 0xfc, 0x5f, 0xeb, 0x4e, 0x75, 0x35, 0xa6, 0xde, 0xab, 0x0a, 0x19, 0x3a, 0xb7, 0xb1, 0xef, 0x92, 0x6a, 0x3b, 0x3c}} , {{0x3b, 0xb2, 0x94, 0x6d, 0x39, 0x60, 0xac, 0xee, 0xe7, 0x81, 0x1a, 0x3b, 0x76, 0x87, 0x5c, 0x05, 0x94, 0x2a, 0x45, 0xb9, 0x80, 0xe9, 0x22, 0xb1, 0x07, 0xcb, 0x40, 0x9e, 0x70, 0x49, 0x6d, 0x12}}}, {{{0xfd, 0x18, 0x78, 0x84, 0xa8, 0x4c, 0x7d, 0x6e, 0x59, 0xa6, 0xe5, 0x74, 0xf1, 0x19, 0xa6, 0x84, 0x2e, 0x51, 0xc1, 0x29, 0x13, 0xf2, 0x14, 0x6b, 0x5d, 0x53, 0x51, 0xf7, 0xef, 0xbf, 0x01, 0x22}} , {{0xa4, 0x4b, 0x62, 0x4c, 0xe6, 0xfd, 0x72, 0x07, 0xf2, 0x81, 0xfc, 0xf2, 0xbd, 0x12, 0x7c, 0x68, 0x76, 0x2a, 0xba, 0xf5, 0x65, 0xb1, 0x1f, 0x17, 0x0a, 0x38, 0xb0, 0xbf, 0xc0, 0xf8, 0xf4, 0x2a}}}, {{{0x55, 0x60, 0x55, 0x5b, 0xe4, 0x1d, 0x71, 0x4c, 0x9d, 0x5b, 0x9f, 0x70, 0xa6, 0x85, 0x9a, 0x2c, 0xa0, 0xe2, 0x32, 0x48, 0xce, 0x9e, 0x2a, 0xa5, 0x07, 0x3b, 0xc7, 0x6c, 0x86, 0x77, 0xde, 0x3c}} , {{0xf7, 0x18, 0x7a, 0x96, 0x7e, 0x43, 0x57, 0xa9, 0x55, 0xfc, 0x4e, 0xb6, 0x72, 0x00, 0xf2, 0xe4, 0xd7, 0x52, 0xd3, 0xd3, 0xb6, 0x85, 0xf6, 0x71, 0xc7, 0x44, 0x3f, 0x7f, 0xd7, 0xb3, 0xf2, 0x79}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x46, 0xca, 0xa7, 0x55, 0x7b, 0x79, 0xf3, 0xca, 0x5a, 0x65, 0xf6, 0xed, 0x50, 0x14, 0x7b, 0xe4, 0xc4, 0x2a, 0x65, 0x9e, 0xe2, 0xf9, 0xca, 0xa7, 0x22, 0x26, 0x53, 0xcb, 0x21, 0x5b, 0xa7, 0x31}} , {{0x90, 0xd7, 0xc5, 0x26, 0x08, 0xbd, 0xb0, 0x53, 0x63, 0x58, 0xc3, 0x31, 0x5e, 0x75, 0x46, 0x15, 0x91, 0xa6, 0xf8, 0x2f, 0x1a, 0x08, 0x65, 0x88, 0x2f, 0x98, 0x04, 0xf1, 0x7c, 0x6e, 0x00, 0x77}}}, {{{0x81, 0x21, 0x61, 0x09, 0xf6, 0x4e, 0xf1, 0x92, 0xee, 0x63, 0x61, 0x73, 0x87, 0xc7, 0x54, 0x0e, 0x42, 0x4b, 0xc9, 0x47, 0xd1, 0xb8, 0x7e, 0x91, 0x75, 0x37, 0x99, 0x28, 0xb8, 0xdd, 0x7f, 0x50}} , {{0x89, 0x8f, 0xc0, 0xbe, 0x5d, 0xd6, 0x9f, 0xa0, 0xf0, 0x9d, 0x81, 0xce, 0x3a, 0x7b, 0x98, 0x58, 0xbb, 0xd7, 0x78, 0xc8, 0x3f, 0x13, 0xf1, 0x74, 0x19, 0xdf, 0xf8, 0x98, 0x89, 0x5d, 0xfa, 0x5f}}}, {{{0x9e, 0x35, 0x85, 0x94, 0x47, 0x1f, 0x90, 0x15, 0x26, 0xd0, 0x84, 0xed, 0x8a, 0x80, 0xf7, 0x63, 0x42, 0x86, 0x27, 0xd7, 0xf4, 0x75, 0x58, 0xdc, 0x9c, 0xc0, 0x22, 0x7e, 0x20, 0x35, 0xfd, 0x1f}} , {{0x68, 0x0e, 0x6f, 0x97, 0xba, 0x70, 0xbb, 0xa3, 0x0e, 0xe5, 0x0b, 0x12, 0xf4, 0xa2, 0xdc, 0x47, 0xf8, 0xe6, 0xd0, 0x23, 0x6c, 0x33, 0xa8, 0x99, 0x46, 0x6e, 0x0f, 0x44, 0xba, 0x76, 0x48, 0x0f}}}, {{{0xa3, 0x2a, 0x61, 0x37, 0xe2, 0x59, 0x12, 0x0e, 0x27, 0xba, 0x64, 0x43, 0xae, 0xc0, 0x42, 0x69, 0x79, 0xa4, 0x1e, 0x29, 0x8b, 0x15, 0xeb, 0xf8, 0xaf, 0xd4, 0xa2, 0x68, 0x33, 0xb5, 0x7a, 0x24}} , {{0x2c, 0x19, 0x33, 0xdd, 0x1b, 0xab, 0xec, 0x01, 0xb0, 0x23, 0xf8, 0x42, 0x2b, 0x06, 0x88, 0xea, 0x3d, 0x2d, 0x00, 0x2a, 0x78, 0x45, 0x4d, 0x38, 0xed, 0x2e, 0x2e, 0x44, 0x49, 0xed, 0xcb, 0x33}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xa0, 0x68, 0xe8, 0x41, 0x8f, 0x91, 0xf8, 0x11, 0x13, 0x90, 0x2e, 0xa7, 0xab, 0x30, 0xef, 0xad, 0xa0, 0x61, 0x00, 0x88, 0xef, 0xdb, 0xce, 0x5b, 0x5c, 0xbb, 0x62, 0xc8, 0x56, 0xf9, 0x00, 0x73}} , {{0x3f, 0x60, 0xc1, 0x82, 0x2d, 0xa3, 0x28, 0x58, 0x24, 0x9e, 0x9f, 0xe3, 0x70, 0xcc, 0x09, 0x4e, 0x1a, 0x3f, 0x11, 0x11, 0x15, 0x07, 0x3c, 0xa4, 0x41, 0xe0, 0x65, 0xa3, 0x0a, 0x41, 0x6d, 0x11}}}, {{{0x31, 0x40, 0x01, 0x52, 0x56, 0x94, 0x5b, 0x28, 0x8a, 0xaa, 0x52, 0xee, 0xd8, 0x0a, 0x05, 0x8d, 0xcd, 0xb5, 0xaa, 0x2e, 0x38, 0xaa, 0xb7, 0x87, 0xf7, 0x2b, 0xfb, 0x04, 0xcb, 0x84, 0x3d, 0x54}} , {{0x20, 0xef, 0x59, 0xde, 0xa4, 0x2b, 0x93, 0x6e, 0x2e, 0xec, 0x42, 0x9a, 0xd4, 0x2d, 0xf4, 0x46, 0x58, 0x27, 0x2b, 0x18, 0x8f, 0x83, 0x3d, 0x69, 0x9e, 0xd4, 0x3e, 0xb6, 0xc5, 0xfd, 0x58, 0x03}}}, {{{0x33, 0x89, 0xc9, 0x63, 0x62, 0x1c, 0x17, 0xb4, 0x60, 0xc4, 0x26, 0x68, 0x09, 0xc3, 0x2e, 0x37, 0x0f, 0x7b, 0xb4, 0x9c, 0xb6, 0xf9, 0xfb, 0xd4, 0x51, 0x78, 0xc8, 0x63, 0xea, 0x77, 0x47, 0x07}} , {{0x32, 0xb4, 0x18, 0x47, 0x79, 0xcb, 0xd4, 0x5a, 0x07, 0x14, 0x0f, 0xa0, 0xd5, 0xac, 0xd0, 0x41, 0x40, 0xab, 0x61, 0x23, 0xe5, 0x2a, 0x2a, 0x6f, 0xf7, 0xa8, 0xd4, 0x76, 0xef, 0xe7, 0x45, 0x6c}}}, {{{0xa1, 0x5e, 0x60, 0x4f, 0xfb, 0xe1, 0x70, 0x6a, 0x1f, 0x55, 0x4f, 0x09, 0xb4, 0x95, 0x33, 0x36, 0xc6, 0x81, 0x01, 0x18, 0x06, 0x25, 0x27, 0xa4, 0xb4, 0x24, 0xa4, 0x86, 0x03, 0x4c, 0xac, 0x02}} , {{0x77, 0x38, 0xde, 0xd7, 0x60, 0x48, 0x07, 0xf0, 0x74, 0xa8, 0xff, 0x54, 0xe5, 0x30, 0x43, 0xff, 0x77, 0xfb, 0x21, 0x07, 0xff, 0xb2, 0x07, 0x6b, 0xe4, 0xe5, 0x30, 0xfc, 0x19, 0x6c, 0xa3, 0x01}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x13, 0xc5, 0x2c, 0xac, 0xd3, 0x83, 0x82, 0x7c, 0x29, 0xf7, 0x05, 0xa5, 0x00, 0xb6, 0x1f, 0x86, 0x55, 0xf4, 0xd6, 0x2f, 0x0c, 0x99, 0xd0, 0x65, 0x9b, 0x6b, 0x46, 0x0d, 0x43, 0xf8, 0x16, 0x28}} , {{0x1e, 0x7f, 0xb4, 0x74, 0x7e, 0xb1, 0x89, 0x4f, 0x18, 0x5a, 0xab, 0x64, 0x06, 0xdf, 0x45, 0x87, 0xe0, 0x6a, 0xc6, 0xf0, 0x0e, 0xc9, 0x24, 0x35, 0x38, 0xea, 0x30, 0x54, 0xb4, 0xc4, 0x52, 0x54}}}, {{{0xe9, 0x9f, 0xdc, 0x3f, 0xc1, 0x89, 0x44, 0x74, 0x27, 0xe4, 0xc1, 0x90, 0xff, 0x4a, 0xa7, 0x3c, 0xee, 0xcd, 0xf4, 0x1d, 0x25, 0x94, 0x7f, 0x63, 0x16, 0x48, 0xbc, 0x64, 0xfe, 0x95, 0xc4, 0x0c}} , {{0x8b, 0x19, 0x75, 0x6e, 0x03, 0x06, 0x5e, 0x6a, 0x6f, 0x1a, 0x8c, 0xe3, 0xd3, 0x28, 0xf2, 0xe0, 0xb9, 0x7a, 0x43, 0x69, 0xe6, 0xd3, 0xc0, 0xfe, 0x7e, 0x97, 0xab, 0x6c, 0x7b, 0x8e, 0x13, 0x42}}}, {{{0xd4, 0xca, 0x70, 0x3d, 0xab, 0xfb, 0x5f, 0x5e, 0x00, 0x0c, 0xcc, 0x77, 0x22, 0xf8, 0x78, 0x55, 0xae, 0x62, 0x35, 0xfb, 0x9a, 0xc6, 0x03, 0xe4, 0x0c, 0xee, 0xab, 0xc7, 0xc0, 0x89, 0x87, 0x54}} , {{0x32, 0xad, 0xae, 0x85, 0x58, 0x43, 0xb8, 0xb1, 0xe6, 0x3e, 0x00, 0x9c, 0x78, 0x88, 0x56, 0xdb, 0x9c, 0xfc, 0x79, 0xf6, 0xf9, 0x41, 0x5f, 0xb7, 0xbc, 0x11, 0xf9, 0x20, 0x36, 0x1c, 0x53, 0x2b}}}, {{{0x5a, 0x20, 0x5b, 0xa1, 0xa5, 0x44, 0x91, 0x24, 0x02, 0x63, 0x12, 0x64, 0xb8, 0x55, 0xf6, 0xde, 0x2c, 0xdb, 0x47, 0xb8, 0xc6, 0x0a, 0xc3, 0x00, 0x78, 0x93, 0xd8, 0xf5, 0xf5, 0x18, 0x28, 0x0a}} , {{0xd6, 0x1b, 0x9a, 0x6c, 0xe5, 0x46, 0xea, 0x70, 0x96, 0x8d, 0x4e, 0x2a, 0x52, 0x21, 0x26, 0x4b, 0xb1, 0xbb, 0x0f, 0x7c, 0xa9, 0x9b, 0x04, 0xbb, 0x51, 0x08, 0xf1, 0x9a, 0xa4, 0x76, 0x7c, 0x18}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xfa, 0x94, 0xf7, 0x40, 0xd0, 0xd7, 0xeb, 0xa9, 0x82, 0x36, 0xd5, 0x15, 0xb9, 0x33, 0x7a, 0xbf, 0x8a, 0xf2, 0x63, 0xaa, 0x37, 0xf5, 0x59, 0xac, 0xbd, 0xbb, 0x32, 0x36, 0xbe, 0x73, 0x99, 0x38}} , {{0x2c, 0xb3, 0xda, 0x7a, 0xd8, 0x3d, 0x99, 0xca, 0xd2, 0xf4, 0xda, 0x99, 0x8e, 0x4f, 0x98, 0xb7, 0xf4, 0xae, 0x3e, 0x9f, 0x8e, 0x35, 0x60, 0xa4, 0x33, 0x75, 0xa4, 0x04, 0x93, 0xb1, 0x6b, 0x4d}}}, {{{0x97, 0x9d, 0xa8, 0xcd, 0x97, 0x7b, 0x9d, 0xb9, 0xe7, 0xa5, 0xef, 0xfd, 0xa8, 0x42, 0x6b, 0xc3, 0x62, 0x64, 0x7d, 0xa5, 0x1b, 0xc9, 0x9e, 0xd2, 0x45, 0xb9, 0xee, 0x03, 0xb0, 0xbf, 0xc0, 0x68}} , {{0xed, 0xb7, 0x84, 0x2c, 0xf6, 0xd3, 0xa1, 0x6b, 0x24, 0x6d, 0x87, 0x56, 0x97, 0x59, 0x79, 0x62, 0x9f, 0xac, 0xed, 0xf3, 0xc9, 0x89, 0x21, 0x2e, 0x04, 0xb3, 0xcc, 0x2f, 0xbe, 0xd6, 0x0a, 0x4b}}}, {{{0x39, 0x61, 0x05, 0xed, 0x25, 0x89, 0x8b, 0x5d, 0x1b, 0xcb, 0x0c, 0x55, 0xf4, 0x6a, 0x00, 0x8a, 0x46, 0xe8, 0x1e, 0xc6, 0x83, 0xc8, 0x5a, 0x76, 0xdb, 0xcc, 0x19, 0x7a, 0xcc, 0x67, 0x46, 0x0b}} , {{0x53, 0xcf, 0xc2, 0xa1, 0xad, 0x6a, 0xf3, 0xcd, 0x8f, 0xc9, 0xde, 0x1c, 0xf8, 0x6c, 0x8f, 0xf8, 0x76, 0x42, 0xe7, 0xfe, 0xb2, 0x72, 0x21, 0x0a, 0x66, 0x74, 0x8f, 0xb7, 0xeb, 0xe4, 0x6f, 0x01}}}, {{{0x22, 0x8c, 0x6b, 0xbe, 0xfc, 0x4d, 0x70, 0x62, 0x6e, 0x52, 0x77, 0x99, 0x88, 0x7e, 0x7b, 0x57, 0x7a, 0x0d, 0xfe, 0xdc, 0x72, 0x92, 0xf1, 0x68, 0x1d, 0x97, 0xd7, 0x7c, 0x8d, 0x53, 0x10, 0x37}} , {{0x53, 0x88, 0x77, 0x02, 0xca, 0x27, 0xa8, 0xe5, 0x45, 0xe2, 0xa8, 0x48, 0x2a, 0xab, 0x18, 0xca, 0xea, 0x2d, 0x2a, 0x54, 0x17, 0x37, 0x32, 0x09, 0xdc, 0xe0, 0x4a, 0xb7, 0x7d, 0x82, 0x10, 0x7d}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x8a, 0x64, 0x1e, 0x14, 0x0a, 0x57, 0xd4, 0xda, 0x5c, 0x96, 0x9b, 0x01, 0x4c, 0x67, 0xbf, 0x8b, 0x30, 0xfe, 0x08, 0xdb, 0x0d, 0xd5, 0xa8, 0xd7, 0x09, 0x11, 0x85, 0xa2, 0xd3, 0x45, 0xfb, 0x7e}} , {{0xda, 0x8c, 0xc2, 0xd0, 0xac, 0x18, 0xe8, 0x52, 0x36, 0xd4, 0x21, 0xa3, 0xdd, 0x57, 0x22, 0x79, 0xb7, 0xf8, 0x71, 0x9d, 0xc6, 0x91, 0x70, 0x86, 0x56, 0xbf, 0xa1, 0x11, 0x8b, 0x19, 0xe1, 0x0f}}}, {{{0x18, 0x32, 0x98, 0x2c, 0x8f, 0x91, 0xae, 0x12, 0xf0, 0x8c, 0xea, 0xf3, 0x3c, 0xb9, 0x5d, 0xe4, 0x69, 0xed, 0xb2, 0x47, 0x18, 0xbd, 0xce, 0x16, 0x52, 0x5c, 0x23, 0xe2, 0xa5, 0x25, 0x52, 0x5d}} , {{0xb9, 0xb1, 0xe7, 0x5d, 0x4e, 0xbc, 0xee, 0xbb, 0x40, 0x81, 0x77, 0x82, 0x19, 0xab, 0xb5, 0xc6, 0xee, 0xab, 0x5b, 0x6b, 0x63, 0x92, 0x8a, 0x34, 0x8d, 0xcd, 0xee, 0x4f, 0x49, 0xe5, 0xc9, 0x7e}}}, {{{0x21, 0xac, 0x8b, 0x22, 0xcd, 0xc3, 0x9a, 0xe9, 0x5e, 0x78, 0xbd, 0xde, 0xba, 0xad, 0xab, 0xbf, 0x75, 0x41, 0x09, 0xc5, 0x58, 0xa4, 0x7d, 0x92, 0xb0, 0x7f, 0xf2, 0xa1, 0xd1, 0xc0, 0xb3, 0x6d}} , {{0x62, 0x4f, 0xd0, 0x75, 0x77, 0xba, 0x76, 0x77, 0xd7, 0xb8, 0xd8, 0x92, 0x6f, 0x98, 0x34, 0x3d, 0xd6, 0x4e, 0x1c, 0x0f, 0xf0, 0x8f, 0x2e, 0xf1, 0xb3, 0xbd, 0xb1, 0xb9, 0xec, 0x99, 0xb4, 0x07}}}, {{{0x60, 0x57, 0x2e, 0x9a, 0x72, 0x1d, 0x6b, 0x6e, 0x58, 0x33, 0x24, 0x8c, 0x48, 0x39, 0x46, 0x8e, 0x89, 0x6a, 0x88, 0x51, 0x23, 0x62, 0xb5, 0x32, 0x09, 0x36, 0xe3, 0x57, 0xf5, 0x98, 0xde, 0x6f}} , {{0x8b, 0x2c, 0x00, 0x48, 0x4a, 0xf9, 0x5b, 0x87, 0x69, 0x52, 0xe5, 0x5b, 0xd1, 0xb1, 0xe5, 0x25, 0x25, 0xe0, 0x9c, 0xc2, 0x13, 0x44, 0xe8, 0xb9, 0x0a, 0x70, 0xad, 0xbd, 0x0f, 0x51, 0x94, 0x69}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xa2, 0xdc, 0xab, 0xa9, 0x25, 0x2d, 0xac, 0x5f, 0x03, 0x33, 0x08, 0xe7, 0x7e, 0xfe, 0x95, 0x36, 0x3c, 0x5b, 0x3a, 0xd3, 0x05, 0x82, 0x1c, 0x95, 0x2d, 0xd8, 0x77, 0x7e, 0x02, 0xd9, 0x5b, 0x70}} , {{0xc2, 0xfe, 0x1b, 0x0c, 0x67, 0xcd, 0xd6, 0xe0, 0x51, 0x8e, 0x2c, 0xe0, 0x79, 0x88, 0xf0, 0xcf, 0x41, 0x4a, 0xad, 0x23, 0xd4, 0x46, 0xca, 0x94, 0xa1, 0xc3, 0xeb, 0x28, 0x06, 0xfa, 0x17, 0x14}}}, {{{0x7b, 0xaa, 0x70, 0x0a, 0x4b, 0xfb, 0xf5, 0xbf, 0x80, 0xc5, 0xcf, 0x08, 0x7a, 0xdd, 0xa1, 0xf4, 0x9d, 0x54, 0x50, 0x53, 0x23, 0x77, 0x23, 0xf5, 0x34, 0xa5, 0x22, 0xd1, 0x0d, 0x96, 0x2e, 0x47}} , {{0xcc, 0xb7, 0x32, 0x89, 0x57, 0xd0, 0x98, 0x75, 0xe4, 0x37, 0x99, 0xa9, 0xe8, 0xba, 0xed, 0xba, 0xeb, 0xc7, 0x4f, 0x15, 0x76, 0x07, 0x0c, 0x4c, 0xef, 0x9f, 0x52, 0xfc, 0x04, 0x5d, 0x58, 0x10}}}, {{{0xce, 0x82, 0xf0, 0x8f, 0x79, 0x02, 0xa8, 0xd1, 0xda, 0x14, 0x09, 0x48, 0xee, 0x8a, 0x40, 0x98, 0x76, 0x60, 0x54, 0x5a, 0xde, 0x03, 0x24, 0xf5, 0xe6, 0x2f, 0xe1, 0x03, 0xbf, 0x68, 0x82, 0x7f}} , {{0x64, 0xe9, 0x28, 0xc7, 0xa4, 0xcf, 0x2a, 0xf9, 0x90, 0x64, 0x72, 0x2c, 0x8b, 0xeb, 0xec, 0xa0, 0xf2, 0x7d, 0x35, 0xb5, 0x90, 0x4d, 0x7f, 0x5b, 0x4a, 0x49, 0xe4, 0xb8, 0x3b, 0xc8, 0xa1, 0x2f}}}, {{{0x8b, 0xc5, 0xcc, 0x3d, 0x69, 0xa6, 0xa1, 0x18, 0x44, 0xbc, 0x4d, 0x77, 0x37, 0xc7, 0x86, 0xec, 0x0c, 0xc9, 0xd6, 0x44, 0xa9, 0x23, 0x27, 0xb9, 0x03, 0x34, 0xa7, 0x0a, 0xd5, 0xc7, 0x34, 0x37}} , {{0xf9, 0x7e, 0x3e, 0x66, 0xee, 0xf9, 0x99, 0x28, 0xff, 0xad, 0x11, 0xd8, 0xe2, 0x66, 0xc5, 0xcd, 0x0f, 0x0d, 0x0b, 0x6a, 0xfc, 0x7c, 0x24, 0xa8, 0x4f, 0xa8, 0x5e, 0x80, 0x45, 0x8b, 0x6c, 0x41}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xef, 0x1e, 0xec, 0xf7, 0x8d, 0x77, 0xf2, 0xea, 0xdb, 0x60, 0x03, 0x21, 0xc0, 0xff, 0x5e, 0x67, 0xc3, 0x71, 0x0b, 0x21, 0xb4, 0x41, 0xa0, 0x68, 0x38, 0xc6, 0x01, 0xa3, 0xd3, 0x51, 0x3c, 0x3c}} , {{0x92, 0xf8, 0xd6, 0x4b, 0xef, 0x42, 0x13, 0xb2, 0x4a, 0xc4, 0x2e, 0x72, 0x3f, 0xc9, 0x11, 0xbd, 0x74, 0x02, 0x0e, 0xf5, 0x13, 0x9d, 0x83, 0x1a, 0x1b, 0xd5, 0x54, 0xde, 0xc4, 0x1e, 0x16, 0x6c}}}, {{{0x27, 0x52, 0xe4, 0x63, 0xaa, 0x94, 0xe6, 0xc3, 0x28, 0x9c, 0xc6, 0x56, 0xac, 0xfa, 0xb6, 0xbd, 0xe2, 0xcc, 0x76, 0xc6, 0x27, 0x27, 0xa2, 0x8e, 0x78, 0x2b, 0x84, 0x72, 0x10, 0xbd, 0x4e, 0x2a}} , {{0xea, 0xa7, 0x23, 0xef, 0x04, 0x61, 0x80, 0x50, 0xc9, 0x6e, 0xa5, 0x96, 0xd1, 0xd1, 0xc8, 0xc3, 0x18, 0xd7, 0x2d, 0xfd, 0x26, 0xbd, 0xcb, 0x7b, 0x92, 0x51, 0x0e, 0x4a, 0x65, 0x57, 0xb8, 0x49}}}, {{{0xab, 0x55, 0x36, 0xc3, 0xec, 0x63, 0x55, 0x11, 0x55, 0xf6, 0xa5, 0xc7, 0x01, 0x5f, 0xfe, 0x79, 0xd8, 0x0a, 0xf7, 0x03, 0xd8, 0x98, 0x99, 0xf5, 0xd0, 0x00, 0x54, 0x6b, 0x66, 0x28, 0xf5, 0x25}} , {{0x7a, 0x8d, 0xa1, 0x5d, 0x70, 0x5d, 0x51, 0x27, 0xee, 0x30, 0x65, 0x56, 0x95, 0x46, 0xde, 0xbd, 0x03, 0x75, 0xb4, 0x57, 0x59, 0x89, 0xeb, 0x02, 0x9e, 0xcc, 0x89, 0x19, 0xa7, 0xcb, 0x17, 0x67}}}, {{{0x6a, 0xeb, 0xfc, 0x9a, 0x9a, 0x10, 0xce, 0xdb, 0x3a, 0x1c, 0x3c, 0x6a, 0x9d, 0xea, 0x46, 0xbc, 0x45, 0x49, 0xac, 0xe3, 0x41, 0x12, 0x7c, 0xf0, 0xf7, 0x4f, 0xf9, 0xf7, 0xff, 0x2c, 0x89, 0x04}} , {{0x30, 0x31, 0x54, 0x1a, 0x46, 0xca, 0xe6, 0xc6, 0xcb, 0xe2, 0xc3, 0xc1, 0x8b, 0x75, 0x81, 0xbe, 0xee, 0xf8, 0xa3, 0x11, 0x1c, 0x25, 0xa3, 0xa7, 0x35, 0x51, 0x55, 0xe2, 0x25, 0xaa, 0xe2, 0x3a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xb4, 0x48, 0x10, 0x9f, 0x8a, 0x09, 0x76, 0xfa, 0xf0, 0x7a, 0xb0, 0x70, 0xf7, 0x83, 0x80, 0x52, 0x84, 0x2b, 0x26, 0xa2, 0xc4, 0x5d, 0x4f, 0xba, 0xb1, 0xc8, 0x40, 0x0d, 0x78, 0x97, 0xc4, 0x60}} , {{0xd4, 0xb1, 0x6c, 0x08, 0xc7, 0x40, 0x38, 0x73, 0x5f, 0x0b, 0xf3, 0x76, 0x5d, 0xb2, 0xa5, 0x2f, 0x57, 0x57, 0x07, 0xed, 0x08, 0xa2, 0x6c, 0x4f, 0x08, 0x02, 0xb5, 0x0e, 0xee, 0x44, 0xfa, 0x22}}}, {{{0x0f, 0x00, 0x3f, 0xa6, 0x04, 0x19, 0x56, 0x65, 0x31, 0x7f, 0x8b, 0xeb, 0x0d, 0xe1, 0x47, 0x89, 0x97, 0x16, 0x53, 0xfa, 0x81, 0xa7, 0xaa, 0xb2, 0xbf, 0x67, 0xeb, 0x72, 0x60, 0x81, 0x0d, 0x48}} , {{0x7e, 0x13, 0x33, 0xcd, 0xa8, 0x84, 0x56, 0x1e, 0x67, 0xaf, 0x6b, 0x43, 0xac, 0x17, 0xaf, 0x16, 0xc0, 0x52, 0x99, 0x49, 0x5b, 0x87, 0x73, 0x7e, 0xb5, 0x43, 0xda, 0x6b, 0x1d, 0x0f, 0x2d, 0x55}}}, {{{0xe9, 0x58, 0x1f, 0xff, 0x84, 0x3f, 0x93, 0x1c, 0xcb, 0xe1, 0x30, 0x69, 0xa5, 0x75, 0x19, 0x7e, 0x14, 0x5f, 0xf8, 0xfc, 0x09, 0xdd, 0xa8, 0x78, 0x9d, 0xca, 0x59, 0x8b, 0xd1, 0x30, 0x01, 0x13}} , {{0xff, 0x76, 0x03, 0xc5, 0x4b, 0x89, 0x99, 0x70, 0x00, 0x59, 0x70, 0x9c, 0xd5, 0xd9, 0x11, 0x89, 0x5a, 0x46, 0xfe, 0xef, 0xdc, 0xd9, 0x55, 0x2b, 0x45, 0xa7, 0xb0, 0x2d, 0xfb, 0x24, 0xc2, 0x29}}}, {{{0x38, 0x06, 0xf8, 0x0b, 0xac, 0x82, 0xc4, 0x97, 0x2b, 0x90, 0xe0, 0xf7, 0xa8, 0xab, 0x6c, 0x08, 0x80, 0x66, 0x90, 0x46, 0xf7, 0x26, 0x2d, 0xf8, 0xf1, 0xc4, 0x6b, 0x4a, 0x82, 0x98, 0x8e, 0x37}} , {{0x8e, 0xb4, 0xee, 0xb8, 0xd4, 0x3f, 0xb2, 0x1b, 0xe0, 0x0a, 0x3d, 0x75, 0x34, 0x28, 0xa2, 0x8e, 0xc4, 0x92, 0x7b, 0xfe, 0x60, 0x6e, 0x6d, 0xb8, 0x31, 0x1d, 0x62, 0x0d, 0x78, 0x14, 0x42, 0x11}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x5e, 0xa8, 0xd8, 0x04, 0x9b, 0x73, 0xc9, 0xc9, 0xdc, 0x0d, 0x73, 0xbf, 0x0a, 0x0a, 0x73, 0xff, 0x18, 0x1f, 0x9c, 0x51, 0xaa, 0xc6, 0xf1, 0x83, 0x25, 0xfd, 0xab, 0xa3, 0x11, 0xd3, 0x01, 0x24}} , {{0x4d, 0xe3, 0x7e, 0x38, 0x62, 0x5e, 0x64, 0xbb, 0x2b, 0x53, 0xb5, 0x03, 0x68, 0xc4, 0xf2, 0x2b, 0x5a, 0x03, 0x32, 0x99, 0x4a, 0x41, 0x9a, 0xe1, 0x1a, 0xae, 0x8c, 0x48, 0xf3, 0x24, 0x32, 0x65}}}, {{{0xe8, 0xdd, 0xad, 0x3a, 0x8c, 0xea, 0xf4, 0xb3, 0xb2, 0xe5, 0x73, 0xf2, 0xed, 0x8b, 0xbf, 0xed, 0xb1, 0x0c, 0x0c, 0xfb, 0x2b, 0xf1, 0x01, 0x48, 0xe8, 0x26, 0x03, 0x8e, 0x27, 0x4d, 0x96, 0x72}} , {{0xc8, 0x09, 0x3b, 0x60, 0xc9, 0x26, 0x4d, 0x7c, 0xf2, 0x9c, 0xd4, 0xa1, 0x3b, 0x26, 0xc2, 0x04, 0x33, 0x44, 0x76, 0x3c, 0x02, 0xbb, 0x11, 0x42, 0x0c, 0x22, 0xb7, 0xc6, 0xe1, 0xac, 0xb4, 0x0e}}}, {{{0x6f, 0x85, 0xe7, 0xef, 0xde, 0x67, 0x30, 0xfc, 0xbf, 0x5a, 0xe0, 0x7b, 0x7a, 0x2a, 0x54, 0x6b, 0x5d, 0x62, 0x85, 0xa1, 0xf8, 0x16, 0x88, 0xec, 0x61, 0xb9, 0x96, 0xb5, 0xef, 0x2d, 0x43, 0x4d}} , {{0x7c, 0x31, 0x33, 0xcc, 0xe4, 0xcf, 0x6c, 0xff, 0x80, 0x47, 0x77, 0xd1, 0xd8, 0xe9, 0x69, 0x97, 0x98, 0x7f, 0x20, 0x57, 0x1d, 0x1d, 0x4f, 0x08, 0x27, 0xc8, 0x35, 0x57, 0x40, 0xc6, 0x21, 0x0c}}}, {{{0xd2, 0x8e, 0x9b, 0xfa, 0x42, 0x8e, 0xdf, 0x8f, 0xc7, 0x86, 0xf9, 0xa4, 0xca, 0x70, 0x00, 0x9d, 0x21, 0xbf, 0xec, 0x57, 0x62, 0x30, 0x58, 0x8c, 0x0d, 0x35, 0xdb, 0x5d, 0x8b, 0x6a, 0xa0, 0x5a}} , {{0xc1, 0x58, 0x7c, 0x0d, 0x20, 0xdd, 0x11, 0x26, 0x5f, 0x89, 0x3b, 0x97, 0x58, 0xf8, 0x8b, 0xe3, 0xdf, 0x32, 0xe2, 0xfc, 0xd8, 0x67, 0xf2, 0xa5, 0x37, 0x1e, 0x6d, 0xec, 0x7c, 0x27, 0x20, 0x79}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xd0, 0xe9, 0xc0, 0xfa, 0x95, 0x45, 0x23, 0x96, 0xf1, 0x2c, 0x79, 0x25, 0x14, 0xce, 0x40, 0x14, 0x44, 0x2c, 0x36, 0x50, 0xd9, 0x63, 0x56, 0xb7, 0x56, 0x3b, 0x9e, 0xa7, 0xef, 0x89, 0xbb, 0x0e}} , {{0xce, 0x7f, 0xdc, 0x0a, 0xcc, 0x82, 0x1c, 0x0a, 0x78, 0x71, 0xe8, 0x74, 0x8d, 0x01, 0x30, 0x0f, 0xa7, 0x11, 0x4c, 0xdf, 0x38, 0xd7, 0xa7, 0x0d, 0xf8, 0x48, 0x52, 0x00, 0x80, 0x7b, 0x5f, 0x0e}}}, {{{0x25, 0x83, 0xe6, 0x94, 0x7b, 0x81, 0xb2, 0x91, 0xae, 0x0e, 0x05, 0xc9, 0xa3, 0x68, 0x2d, 0xd9, 0x88, 0x25, 0x19, 0x2a, 0x61, 0x61, 0x21, 0x97, 0x15, 0xa1, 0x35, 0xa5, 0x46, 0xc8, 0xa2, 0x0e}} , {{0x1b, 0x03, 0x0d, 0x8b, 0x5a, 0x1b, 0x97, 0x4b, 0xf2, 0x16, 0x31, 0x3d, 0x1f, 0x33, 0xa0, 0x50, 0x3a, 0x18, 0xbe, 0x13, 0xa1, 0x76, 0xc1, 0xba, 0x1b, 0xf1, 0x05, 0x7b, 0x33, 0xa8, 0x82, 0x3b}}}, {{{0xba, 0x36, 0x7b, 0x6d, 0xa9, 0xea, 0x14, 0x12, 0xc5, 0xfa, 0x91, 0x00, 0xba, 0x9b, 0x99, 0xcc, 0x56, 0x02, 0xe9, 0xa0, 0x26, 0x40, 0x66, 0x8c, 0xc4, 0xf8, 0x85, 0x33, 0x68, 0xe7, 0x03, 0x20}} , {{0x50, 0x5b, 0xff, 0xa9, 0xb2, 0xf1, 0xf1, 0x78, 0xcf, 0x14, 0xa4, 0xa9, 0xfc, 0x09, 0x46, 0x94, 0x54, 0x65, 0x0d, 0x9c, 0x5f, 0x72, 0x21, 0xe2, 0x97, 0xa5, 0x2d, 0x81, 0xce, 0x4a, 0x5f, 0x79}}}, {{{0x3d, 0x5f, 0x5c, 0xd2, 0xbc, 0x7d, 0x77, 0x0e, 0x2a, 0x6d, 0x22, 0x45, 0x84, 0x06, 0xc4, 0xdd, 0xc6, 0xa6, 0xc6, 0xd7, 0x49, 0xad, 0x6d, 0x87, 0x91, 0x0e, 0x3a, 0x67, 0x1d, 0x2c, 0x1d, 0x56}} , {{0xfe, 0x7a, 0x74, 0xcf, 0xd4, 0xd2, 0xe5, 0x19, 0xde, 0xd0, 0xdb, 0x70, 0x23, 0x69, 0xe6, 0x6d, 0xec, 0xec, 0xcc, 0x09, 0x33, 0x6a, 0x77, 0xdc, 0x6b, 0x22, 0x76, 0x5d, 0x92, 0x09, 0xac, 0x2d}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x23, 0x15, 0x17, 0xeb, 0xd3, 0xdb, 0x12, 0x5e, 0x01, 0xf0, 0x91, 0xab, 0x2c, 0x41, 0xce, 0xac, 0xed, 0x1b, 0x4b, 0x2d, 0xbc, 0xdb, 0x17, 0x66, 0x89, 0x46, 0xad, 0x4b, 0x1e, 0x6f, 0x0b, 0x14}} , {{0x11, 0xce, 0xbf, 0xb6, 0x77, 0x2d, 0x48, 0x22, 0x18, 0x4f, 0xa3, 0x5d, 0x4a, 0xb0, 0x70, 0x12, 0x3e, 0x54, 0xd7, 0xd8, 0x0e, 0x2b, 0x27, 0xdc, 0x53, 0xff, 0xca, 0x8c, 0x59, 0xb3, 0x4e, 0x44}}}, {{{0x07, 0x76, 0x61, 0x0f, 0x66, 0xb2, 0x21, 0x39, 0x7e, 0xc0, 0xec, 0x45, 0x28, 0x82, 0xa1, 0x29, 0x32, 0x44, 0x35, 0x13, 0x5e, 0x61, 0x5e, 0x54, 0xcb, 0x7c, 0xef, 0xf6, 0x41, 0xcf, 0x9f, 0x0a}} , {{0xdd, 0xf9, 0xda, 0x84, 0xc3, 0xe6, 0x8a, 0x9f, 0x24, 0xd2, 0x96, 0x5d, 0x39, 0x6f, 0x58, 0x8c, 0xc1, 0x56, 0x93, 0xab, 0xb5, 0x79, 0x3b, 0xd2, 0xa8, 0x73, 0x16, 0xed, 0xfa, 0xb4, 0x2f, 0x73}}}, {{{0x8b, 0xb1, 0x95, 0xe5, 0x92, 0x50, 0x35, 0x11, 0x76, 0xac, 0xf4, 0x4d, 0x24, 0xc3, 0x32, 0xe6, 0xeb, 0xfe, 0x2c, 0x87, 0xc4, 0xf1, 0x56, 0xc4, 0x75, 0x24, 0x7a, 0x56, 0x85, 0x5a, 0x3a, 0x13}} , {{0x0d, 0x16, 0xac, 0x3c, 0x4a, 0x58, 0x86, 0x3a, 0x46, 0x7f, 0x6c, 0xa3, 0x52, 0x6e, 0x37, 0xe4, 0x96, 0x9c, 0xe9, 0x5c, 0x66, 0x41, 0x67, 0xe4, 0xfb, 0x79, 0x0c, 0x05, 0xf6, 0x64, 0xd5, 0x7c}}}, {{{0x28, 0xc1, 0xe1, 0x54, 0x73, 0xf2, 0xbf, 0x76, 0x74, 0x19, 0x19, 0x1b, 0xe4, 0xb9, 0xa8, 0x46, 0x65, 0x73, 0xf3, 0x77, 0x9b, 0x29, 0x74, 0x5b, 0xc6, 0x89, 0x6c, 0x2c, 0x7c, 0xf8, 0xb3, 0x0f}} , {{0xf7, 0xd5, 0xe9, 0x74, 0x5d, 0xb8, 0x25, 0x16, 0xb5, 0x30, 0xbc, 0x84, 0xc5, 0xf0, 0xad, 0xca, 0x12, 0x28, 0xbc, 0x9d, 0xd4, 0xfa, 0x82, 0xe6, 0xe3, 0xbf, 0xa2, 0x15, 0x2c, 0xd4, 0x34, 0x10}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x61, 0xb1, 0x46, 0xba, 0x0e, 0x31, 0xa5, 0x67, 0x6c, 0x7f, 0xd6, 0xd9, 0x27, 0x85, 0x0f, 0x79, 0x14, 0xc8, 0x6c, 0x2f, 0x5f, 0x5b, 0x9c, 0x35, 0x3d, 0x38, 0x86, 0x77, 0x65, 0x55, 0x6a, 0x7b}} , {{0xd3, 0xb0, 0x3a, 0x66, 0x60, 0x1b, 0x43, 0xf1, 0x26, 0x58, 0x99, 0x09, 0x8f, 0x2d, 0xa3, 0x14, 0x71, 0x85, 0xdb, 0xed, 0xf6, 0x26, 0xd5, 0x61, 0x9a, 0x73, 0xac, 0x0e, 0xea, 0xac, 0xb7, 0x0c}}}, {{{0x5e, 0xf4, 0xe5, 0x17, 0x0e, 0x10, 0x9f, 0xe7, 0x43, 0x5f, 0x67, 0x5c, 0xac, 0x4b, 0xe5, 0x14, 0x41, 0xd2, 0xbf, 0x48, 0xf5, 0x14, 0xb0, 0x71, 0xc6, 0x61, 0xc1, 0xb2, 0x70, 0x58, 0xd2, 0x5a}} , {{0x2d, 0xba, 0x16, 0x07, 0x92, 0x94, 0xdc, 0xbd, 0x50, 0x2b, 0xc9, 0x7f, 0x42, 0x00, 0xba, 0x61, 0xed, 0xf8, 0x43, 0xed, 0xf5, 0xf9, 0x40, 0x60, 0xb2, 0xb0, 0x82, 0xcb, 0xed, 0x75, 0xc7, 0x65}}}, {{{0x80, 0xba, 0x0d, 0x09, 0x40, 0xa7, 0x39, 0xa6, 0x67, 0x34, 0x7e, 0x66, 0xbe, 0x56, 0xfb, 0x53, 0x78, 0xc4, 0x46, 0xe8, 0xed, 0x68, 0x6c, 0x7f, 0xce, 0xe8, 0x9f, 0xce, 0xa2, 0x64, 0x58, 0x53}} , {{0xe8, 0xc1, 0xa9, 0xc2, 0x7b, 0x59, 0x21, 0x33, 0xe2, 0x43, 0x73, 0x2b, 0xac, 0x2d, 0xc1, 0x89, 0x3b, 0x15, 0xe2, 0xd5, 0xc0, 0x97, 0x8a, 0xfd, 0x6f, 0x36, 0x33, 0xb7, 0xb9, 0xc3, 0x88, 0x09}}}, {{{0xd0, 0xb6, 0x56, 0x30, 0x5c, 0xae, 0xb3, 0x75, 0x44, 0xa4, 0x83, 0x51, 0x6e, 0x01, 0x65, 0xef, 0x45, 0x76, 0xe6, 0xf5, 0xa2, 0x0d, 0xd4, 0x16, 0x3b, 0x58, 0x2f, 0xf2, 0x2f, 0x36, 0x18, 0x3f}} , {{0xfd, 0x2f, 0xe0, 0x9b, 0x1e, 0x8c, 0xc5, 0x18, 0xa9, 0xca, 0xd4, 0x2b, 0x35, 0xb6, 0x95, 0x0a, 0x9f, 0x7e, 0xfb, 0xc4, 0xef, 0x88, 0x7b, 0x23, 0x43, 0xec, 0x2f, 0x0d, 0x0f, 0x7a, 0xfc, 0x5c}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x8d, 0xd2, 0xda, 0xc7, 0x44, 0xd6, 0x7a, 0xdb, 0x26, 0x7d, 0x1d, 0xb8, 0xe1, 0xde, 0x9d, 0x7a, 0x7d, 0x17, 0x7e, 0x1c, 0x37, 0x04, 0x8d, 0x2d, 0x7c, 0x5e, 0x18, 0x38, 0x1e, 0xaf, 0xc7, 0x1b}} , {{0x33, 0x48, 0x31, 0x00, 0x59, 0xf6, 0xf2, 0xca, 0x0f, 0x27, 0x1b, 0x63, 0x12, 0x7e, 0x02, 0x1d, 0x49, 0xc0, 0x5d, 0x79, 0x87, 0xef, 0x5e, 0x7a, 0x2f, 0x1f, 0x66, 0x55, 0xd8, 0x09, 0xd9, 0x61}}}, {{{0x54, 0x83, 0x02, 0x18, 0x82, 0x93, 0x99, 0x07, 0xd0, 0xa7, 0xda, 0xd8, 0x75, 0x89, 0xfa, 0xf2, 0xd9, 0xa3, 0xb8, 0x6b, 0x5a, 0x35, 0x28, 0xd2, 0x6b, 0x59, 0xc2, 0xf8, 0x45, 0xe2, 0xbc, 0x06}} , {{0x65, 0xc0, 0xa3, 0x88, 0x51, 0x95, 0xfc, 0x96, 0x94, 0x78, 0xe8, 0x0d, 0x8b, 0x41, 0xc9, 0xc2, 0x58, 0x48, 0x75, 0x10, 0x2f, 0xcd, 0x2a, 0xc9, 0xa0, 0x6d, 0x0f, 0xdd, 0x9c, 0x98, 0x26, 0x3d}}}, {{{0x2f, 0x66, 0x29, 0x1b, 0x04, 0x89, 0xbd, 0x7e, 0xee, 0x6e, 0xdd, 0xb7, 0x0e, 0xef, 0xb0, 0x0c, 0xb4, 0xfc, 0x7f, 0xc2, 0xc9, 0x3a, 0x3c, 0x64, 0xef, 0x45, 0x44, 0xaf, 0x8a, 0x90, 0x65, 0x76}} , {{0xa1, 0x4c, 0x70, 0x4b, 0x0e, 0xa0, 0x83, 0x70, 0x13, 0xa4, 0xaf, 0xb8, 0x38, 0x19, 0x22, 0x65, 0x09, 0xb4, 0x02, 0x4f, 0x06, 0xf8, 0x17, 0xce, 0x46, 0x45, 0xda, 0x50, 0x7c, 0x8a, 0xd1, 0x4e}}}, {{{0xf7, 0xd4, 0x16, 0x6c, 0x4e, 0x95, 0x9d, 0x5d, 0x0f, 0x91, 0x2b, 0x52, 0xfe, 0x5c, 0x34, 0xe5, 0x30, 0xe6, 0xa4, 0x3b, 0xf3, 0xf3, 0x34, 0x08, 0xa9, 0x4a, 0xa0, 0xb5, 0x6e, 0xb3, 0x09, 0x0a}} , {{0x26, 0xd9, 0x5e, 0xa3, 0x0f, 0xeb, 0xa2, 0xf3, 0x20, 0x3b, 0x37, 0xd4, 0xe4, 0x9e, 0xce, 0x06, 0x3d, 0x53, 0xed, 0xae, 0x2b, 0xeb, 0xb6, 0x24, 0x0a, 0x11, 0xa3, 0x0f, 0xd6, 0x7f, 0xa4, 0x3a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xdb, 0x9f, 0x2c, 0xfc, 0xd6, 0xb2, 0x1e, 0x2e, 0x52, 0x7a, 0x06, 0x87, 0x2d, 0x86, 0x72, 0x2b, 0x6d, 0x90, 0x77, 0x46, 0x43, 0xb5, 0x7a, 0xf8, 0x60, 0x7d, 0x91, 0x60, 0x5b, 0x9d, 0x9e, 0x07}} , {{0x97, 0x87, 0xc7, 0x04, 0x1c, 0x38, 0x01, 0x39, 0x58, 0xc7, 0x85, 0xa3, 0xfc, 0x64, 0x00, 0x64, 0x25, 0xa2, 0xbf, 0x50, 0x94, 0xca, 0x26, 0x31, 0x45, 0x0a, 0x24, 0xd2, 0x51, 0x29, 0x51, 0x16}}}, {{{0x4d, 0x4a, 0xd7, 0x98, 0x71, 0x57, 0xac, 0x7d, 0x8b, 0x37, 0xbd, 0x63, 0xff, 0x87, 0xb1, 0x49, 0x95, 0x20, 0x7c, 0xcf, 0x7c, 0x59, 0xc4, 0x91, 0x9c, 0xef, 0xd0, 0xdb, 0x60, 0x09, 0x9d, 0x46}} , {{0xcb, 0x78, 0x94, 0x90, 0xe4, 0x45, 0xb3, 0xf6, 0xd9, 0xf6, 0x57, 0x74, 0xd5, 0xf8, 0x83, 0x4f, 0x39, 0xc9, 0xbd, 0x88, 0xc2, 0x57, 0x21, 0x1f, 0x24, 0x32, 0x68, 0xf8, 0xc7, 0x21, 0x5f, 0x0b}}}, {{{0x2a, 0x36, 0x68, 0xfc, 0x5f, 0xb6, 0x4f, 0xa5, 0xe3, 0x9d, 0x24, 0x2f, 0xc0, 0x93, 0x61, 0xcf, 0xf8, 0x0a, 0xed, 0xe1, 0xdb, 0x27, 0xec, 0x0e, 0x14, 0x32, 0x5f, 0x8e, 0xa1, 0x62, 0x41, 0x16}} , {{0x95, 0x21, 0x01, 0xce, 0x95, 0x5b, 0x0e, 0x57, 0xc7, 0xb9, 0x62, 0xb5, 0x28, 0xca, 0x11, 0xec, 0xb4, 0x46, 0x06, 0x73, 0x26, 0xff, 0xfb, 0x66, 0x7d, 0xee, 0x5f, 0xb2, 0x56, 0xfd, 0x2a, 0x08}}}, {{{0x92, 0x67, 0x77, 0x56, 0xa1, 0xff, 0xc4, 0xc5, 0x95, 0xf0, 0xe3, 0x3a, 0x0a, 0xca, 0x94, 0x4d, 0x9e, 0x7e, 0x3d, 0xb9, 0x6e, 0xb6, 0xb0, 0xce, 0xa4, 0x30, 0x89, 0x99, 0xe9, 0xad, 0x11, 0x59}} , {{0xf6, 0x48, 0x95, 0xa1, 0x6f, 0x5f, 0xb7, 0xa5, 0xbb, 0x30, 0x00, 0x1c, 0xd2, 0x8a, 0xd6, 0x25, 0x26, 0x1b, 0xb2, 0x0d, 0x37, 0x6a, 0x05, 0xf4, 0x9d, 0x3e, 0x17, 0x2a, 0x43, 0xd2, 0x3a, 0x06}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x32, 0x99, 0x93, 0xd1, 0x9a, 0x72, 0xf3, 0xa9, 0x16, 0xbd, 0xb4, 0x4c, 0xdd, 0xf9, 0xd4, 0xb2, 0x64, 0x9a, 0xd3, 0x05, 0xe4, 0xa3, 0x73, 0x1c, 0xcb, 0x7e, 0x57, 0x67, 0xff, 0x04, 0xb3, 0x10}} , {{0xb9, 0x4b, 0xa4, 0xad, 0xd0, 0x6d, 0x61, 0x23, 0xb4, 0xaf, 0x34, 0xa9, 0xaa, 0x65, 0xec, 0xd9, 0x69, 0xe3, 0x85, 0xcd, 0xcc, 0xe7, 0xb0, 0x9b, 0x41, 0xc1, 0x1c, 0xf9, 0xa0, 0xfa, 0xb7, 0x13}}}, {{{0x04, 0xfd, 0x88, 0x3c, 0x0c, 0xd0, 0x09, 0x52, 0x51, 0x4f, 0x06, 0x19, 0xcc, 0xc3, 0xbb, 0xde, 0x80, 0xc5, 0x33, 0xbc, 0xf9, 0xf3, 0x17, 0x36, 0xdd, 0xc6, 0xde, 0xe8, 0x9b, 0x5d, 0x79, 0x1b}} , {{0x65, 0x0a, 0xbe, 0x51, 0x57, 0xad, 0x50, 0x79, 0x08, 0x71, 0x9b, 0x07, 0x95, 0x8f, 0xfb, 0xae, 0x4b, 0x38, 0xba, 0xcf, 0x53, 0x2a, 0x86, 0x1e, 0xc0, 0x50, 0x5c, 0x67, 0x1b, 0xf6, 0x87, 0x6c}}}, {{{0x4f, 0x00, 0xb2, 0x66, 0x55, 0xed, 0x4a, 0xed, 0x8d, 0xe1, 0x66, 0x18, 0xb2, 0x14, 0x74, 0x8d, 0xfd, 0x1a, 0x36, 0x0f, 0x26, 0x5c, 0x8b, 0x89, 0xf3, 0xab, 0xf2, 0xf3, 0x24, 0x67, 0xfd, 0x70}} , {{0xfd, 0x4e, 0x2a, 0xc1, 0x3a, 0xca, 0x8f, 0x00, 0xd8, 0xec, 0x74, 0x67, 0xef, 0x61, 0xe0, 0x28, 0xd0, 0x96, 0xf4, 0x48, 0xde, 0x81, 0xe3, 0xef, 0xdc, 0xaa, 0x7d, 0xf3, 0xb6, 0x55, 0xa6, 0x65}}}, {{{0xeb, 0xcb, 0xc5, 0x70, 0x91, 0x31, 0x10, 0x93, 0x0d, 0xc8, 0xd0, 0xef, 0x62, 0xe8, 0x6f, 0x82, 0xe3, 0x69, 0x3d, 0x91, 0x7f, 0x31, 0xe1, 0x26, 0x35, 0x3c, 0x4a, 0x2f, 0xab, 0xc4, 0x9a, 0x5e}} , {{0xab, 0x1b, 0xb5, 0xe5, 0x2b, 0xc3, 0x0e, 0x29, 0xb0, 0xd0, 0x73, 0xe6, 0x4f, 0x64, 0xf2, 0xbc, 0xe4, 0xe4, 0xe1, 0x9a, 0x52, 0x33, 0x2f, 0xbd, 0xcc, 0x03, 0xee, 0x8a, 0xfa, 0x00, 0x5f, 0x50}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xf6, 0xdb, 0x0d, 0x22, 0x3d, 0xb5, 0x14, 0x75, 0x31, 0xf0, 0x81, 0xe2, 0xb9, 0x37, 0xa2, 0xa9, 0x84, 0x11, 0x9a, 0x07, 0xb5, 0x53, 0x89, 0x78, 0xa9, 0x30, 0x27, 0xa1, 0xf1, 0x4e, 0x5c, 0x2e}} , {{0x8b, 0x00, 0x54, 0xfb, 0x4d, 0xdc, 0xcb, 0x17, 0x35, 0x40, 0xff, 0xb7, 0x8c, 0xfe, 0x4a, 0xe4, 0x4e, 0x99, 0x4e, 0xa8, 0x74, 0x54, 0x5d, 0x5c, 0x96, 0xa3, 0x12, 0x55, 0x36, 0x31, 0x17, 0x5c}}}, {{{0xce, 0x24, 0xef, 0x7b, 0x86, 0xf2, 0x0f, 0x77, 0xe8, 0x5c, 0x7d, 0x87, 0x38, 0x2d, 0xef, 0xaf, 0xf2, 0x8c, 0x72, 0x2e, 0xeb, 0xb6, 0x55, 0x4b, 0x6e, 0xf1, 0x4e, 0x8a, 0x0e, 0x9a, 0x6c, 0x4c}} , {{0x25, 0xea, 0x86, 0xc2, 0xd1, 0x4f, 0xb7, 0x3e, 0xa8, 0x5c, 0x8d, 0x66, 0x81, 0x25, 0xed, 0xc5, 0x4c, 0x05, 0xb9, 0xd8, 0xd6, 0x70, 0xbe, 0x73, 0x82, 0xe8, 0xa1, 0xe5, 0x1e, 0x71, 0xd5, 0x26}}}, {{{0x4e, 0x6d, 0xc3, 0xa7, 0x4f, 0x22, 0x45, 0x26, 0xa2, 0x7e, 0x16, 0xf7, 0xf7, 0x63, 0xdc, 0x86, 0x01, 0x2a, 0x71, 0x38, 0x5c, 0x33, 0xc3, 0xce, 0x30, 0xff, 0xf9, 0x2c, 0x91, 0x71, 0x8a, 0x72}} , {{0x8c, 0x44, 0x09, 0x28, 0xd5, 0x23, 0xc9, 0x8f, 0xf3, 0x84, 0x45, 0xc6, 0x9a, 0x5e, 0xff, 0xd2, 0xc7, 0x57, 0x93, 0xa3, 0xc1, 0x69, 0xdd, 0x62, 0x0f, 0xda, 0x5c, 0x30, 0x59, 0x5d, 0xe9, 0x4c}}}, {{{0x92, 0x7e, 0x50, 0x27, 0x72, 0xd7, 0x0c, 0xd6, 0x69, 0x96, 0x81, 0x35, 0x84, 0x94, 0x35, 0x8b, 0x6c, 0xaa, 0x62, 0x86, 0x6e, 0x1c, 0x15, 0xf3, 0x6c, 0xb3, 0xff, 0x65, 0x1b, 0xa2, 0x9b, 0x59}} , {{0xe2, 0xa9, 0x65, 0x88, 0xc4, 0x50, 0xfa, 0xbb, 0x3b, 0x6e, 0x5f, 0x44, 0x01, 0xca, 0x97, 0xd4, 0xdd, 0xf6, 0xcd, 0x3f, 0x3f, 0xe5, 0x97, 0x67, 0x2b, 0x8c, 0x66, 0x0f, 0x35, 0x9b, 0xf5, 0x07}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xf1, 0x59, 0x27, 0xd8, 0xdb, 0x5a, 0x11, 0x5e, 0x82, 0xf3, 0x38, 0xff, 0x1c, 0xed, 0xfe, 0x3f, 0x64, 0x54, 0x3f, 0x7f, 0xd1, 0x81, 0xed, 0xef, 0x65, 0xc5, 0xcb, 0xfd, 0xe1, 0x80, 0xcd, 0x11}} , {{0xe0, 0xdb, 0x22, 0x28, 0xe6, 0xff, 0x61, 0x9d, 0x41, 0x14, 0x2d, 0x3b, 0x26, 0x22, 0xdf, 0xf1, 0x34, 0x81, 0xe9, 0x45, 0xee, 0x0f, 0x98, 0x8b, 0xa6, 0x3f, 0xef, 0xf7, 0x43, 0x19, 0xf1, 0x43}}}, {{{0xee, 0xf3, 0x00, 0xa1, 0x50, 0xde, 0xc0, 0xb6, 0x01, 0xe3, 0x8c, 0x3c, 0x4d, 0x31, 0xd2, 0xb0, 0x58, 0xcd, 0xed, 0x10, 0x4a, 0x7a, 0xef, 0x80, 0xa9, 0x19, 0x32, 0xf3, 0xd8, 0x33, 0x8c, 0x06}} , {{0xcb, 0x7d, 0x4f, 0xff, 0x30, 0xd8, 0x12, 0x3b, 0x39, 0x1c, 0x06, 0xf9, 0x4c, 0x34, 0x35, 0x71, 0xb5, 0x16, 0x94, 0x67, 0xdf, 0xee, 0x11, 0xde, 0xa4, 0x1d, 0x88, 0x93, 0x35, 0xa9, 0x32, 0x10}}}, {{{0xe9, 0xc3, 0xbc, 0x7b, 0x5c, 0xfc, 0xb2, 0xf9, 0xc9, 0x2f, 0xe5, 0xba, 0x3a, 0x0b, 0xab, 0x64, 0x38, 0x6f, 0x5b, 0x4b, 0x93, 0xda, 0x64, 0xec, 0x4d, 0x3d, 0xa0, 0xf5, 0xbb, 0xba, 0x47, 0x48}} , {{0x60, 0xbc, 0x45, 0x1f, 0x23, 0xa2, 0x3b, 0x70, 0x76, 0xe6, 0x97, 0x99, 0x4f, 0x77, 0x54, 0x67, 0x30, 0x9a, 0xe7, 0x66, 0xd6, 0xcd, 0x2e, 0x51, 0x24, 0x2c, 0x42, 0x4a, 0x11, 0xfe, 0x6f, 0x7e}}}, {{{0x87, 0xc0, 0xb1, 0xf0, 0xa3, 0x6f, 0x0c, 0x93, 0xa9, 0x0a, 0x72, 0xef, 0x5c, 0xbe, 0x65, 0x35, 0xa7, 0x6a, 0x4e, 0x2c, 0xbf, 0x21, 0x23, 0xe8, 0x2f, 0x97, 0xc7, 0x3e, 0xc8, 0x17, 0xac, 0x1e}} , {{0x7b, 0xef, 0x21, 0xe5, 0x40, 0xcc, 0x1e, 0xdc, 0xd6, 0xbd, 0x97, 0x7a, 0x7c, 0x75, 0x86, 0x7a, 0x25, 0x5a, 0x6e, 0x7c, 0xe5, 0x51, 0x3c, 0x1b, 0x5b, 0x82, 0x9a, 0x07, 0x60, 0xa1, 0x19, 0x04}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x96, 0x88, 0xa6, 0xab, 0x8f, 0xe3, 0x3a, 0x49, 0xf8, 0xfe, 0x34, 0xe7, 0x6a, 0xb2, 0xfe, 0x40, 0x26, 0x74, 0x57, 0x4c, 0xf6, 0xd4, 0x99, 0xce, 0x5d, 0x7b, 0x2f, 0x67, 0xd6, 0x5a, 0xe4, 0x4e}} , {{0x5c, 0x82, 0xb3, 0xbd, 0x55, 0x25, 0xf6, 0x6a, 0x93, 0xa4, 0x02, 0xc6, 0x7d, 0x5c, 0xb1, 0x2b, 0x5b, 0xff, 0xfb, 0x56, 0xf8, 0x01, 0x41, 0x90, 0xc6, 0xb6, 0xac, 0x4f, 0xfe, 0xa7, 0x41, 0x70}}}, {{{0xdb, 0xfa, 0x9b, 0x2c, 0xd4, 0x23, 0x67, 0x2c, 0x8a, 0x63, 0x6c, 0x07, 0x26, 0x48, 0x4f, 0xc2, 0x03, 0xd2, 0x53, 0x20, 0x28, 0xed, 0x65, 0x71, 0x47, 0xa9, 0x16, 0x16, 0x12, 0xbc, 0x28, 0x33}} , {{0x39, 0xc0, 0xfa, 0xfa, 0xcd, 0x33, 0x43, 0xc7, 0x97, 0x76, 0x9b, 0x93, 0x91, 0x72, 0xeb, 0xc5, 0x18, 0x67, 0x4c, 0x11, 0xf0, 0xf4, 0xe5, 0x73, 0xb2, 0x5c, 0x1b, 0xc2, 0x26, 0x3f, 0xbf, 0x2b}}}, {{{0x86, 0xe6, 0x8c, 0x1d, 0xdf, 0xca, 0xfc, 0xd5, 0xf8, 0x3a, 0xc3, 0x44, 0x72, 0xe6, 0x78, 0x9d, 0x2b, 0x97, 0xf8, 0x28, 0x45, 0xb4, 0x20, 0xc9, 0x2a, 0x8c, 0x67, 0xaa, 0x11, 0xc5, 0x5b, 0x2f}} , {{0x17, 0x0f, 0x86, 0x52, 0xd7, 0x9d, 0xc3, 0x44, 0x51, 0x76, 0x32, 0x65, 0xb4, 0x37, 0x81, 0x99, 0x46, 0x37, 0x62, 0xed, 0xcf, 0x64, 0x9d, 0x72, 0x40, 0x7a, 0x4c, 0x0b, 0x76, 0x2a, 0xfb, 0x56}}}, {{{0x33, 0xa7, 0x90, 0x7c, 0xc3, 0x6f, 0x17, 0xa5, 0xa0, 0x67, 0x72, 0x17, 0xea, 0x7e, 0x63, 0x14, 0x83, 0xde, 0xc1, 0x71, 0x2d, 0x41, 0x32, 0x7a, 0xf3, 0xd1, 0x2b, 0xd8, 0x2a, 0xa6, 0x46, 0x36}} , {{0xac, 0xcc, 0x6b, 0x7c, 0xf9, 0xb8, 0x8b, 0x08, 0x5c, 0xd0, 0x7d, 0x8f, 0x73, 0xea, 0x20, 0xda, 0x86, 0xca, 0x00, 0xc7, 0xad, 0x73, 0x4d, 0xe9, 0xe8, 0xa9, 0xda, 0x1f, 0x03, 0x06, 0xdd, 0x24}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x9c, 0xb2, 0x61, 0x0a, 0x98, 0x2a, 0xa5, 0xd7, 0xee, 0xa9, 0xac, 0x65, 0xcb, 0x0a, 0x1e, 0xe2, 0xbe, 0xdc, 0x85, 0x59, 0x0f, 0x9c, 0xa6, 0x57, 0x34, 0xa5, 0x87, 0xeb, 0x7b, 0x1e, 0x0c, 0x3c}} , {{0x2f, 0xbd, 0x84, 0x63, 0x0d, 0xb5, 0xa0, 0xf0, 0x4b, 0x9e, 0x93, 0xc6, 0x34, 0x9a, 0x34, 0xff, 0x73, 0x19, 0x2f, 0x6e, 0x54, 0x45, 0x2c, 0x92, 0x31, 0x76, 0x34, 0xf1, 0xb2, 0x26, 0xe8, 0x74}}}, {{{0x0a, 0x67, 0x90, 0x6d, 0x0c, 0x4c, 0xcc, 0xc0, 0xe6, 0xbd, 0xa7, 0x5e, 0x55, 0x8c, 0xcd, 0x58, 0x9b, 0x11, 0xa2, 0xbb, 0x4b, 0xb1, 0x43, 0x04, 0x3c, 0x55, 0xed, 0x23, 0xfe, 0xcd, 0xb1, 0x53}} , {{0x05, 0xfb, 0x75, 0xf5, 0x01, 0xaf, 0x38, 0x72, 0x58, 0xfc, 0x04, 0x29, 0x34, 0x7a, 0x67, 0xa2, 0x08, 0x50, 0x6e, 0xd0, 0x2b, 0x73, 0xd5, 0xb8, 0xe4, 0x30, 0x96, 0xad, 0x45, 0xdf, 0xa6, 0x5c}}}, {{{0x0d, 0x88, 0x1a, 0x90, 0x7e, 0xdc, 0xd8, 0xfe, 0xc1, 0x2f, 0x5d, 0x67, 0xee, 0x67, 0x2f, 0xed, 0x6f, 0x55, 0x43, 0x5f, 0x87, 0x14, 0x35, 0x42, 0xd3, 0x75, 0xae, 0xd5, 0xd3, 0x85, 0x1a, 0x76}} , {{0x87, 0xc8, 0xa0, 0x6e, 0xe1, 0xb0, 0xad, 0x6a, 0x4a, 0x34, 0x71, 0xed, 0x7c, 0xd6, 0x44, 0x03, 0x65, 0x4a, 0x5c, 0x5c, 0x04, 0xf5, 0x24, 0x3f, 0xb0, 0x16, 0x5e, 0x8c, 0xb2, 0xd2, 0xc5, 0x20}}}, {{{0x98, 0x83, 0xc2, 0x37, 0xa0, 0x41, 0xa8, 0x48, 0x5c, 0x5f, 0xbf, 0xc8, 0xfa, 0x24, 0xe0, 0x59, 0x2c, 0xbd, 0xf6, 0x81, 0x7e, 0x88, 0xe6, 0xca, 0x04, 0xd8, 0x5d, 0x60, 0xbb, 0x74, 0xa7, 0x0b}} , {{0x21, 0x13, 0x91, 0xbf, 0x77, 0x7a, 0x33, 0xbc, 0xe9, 0x07, 0x39, 0x0a, 0xdd, 0x7d, 0x06, 0x10, 0x9a, 0xee, 0x47, 0x73, 0x1b, 0x15, 0x5a, 0xfb, 0xcd, 0x4d, 0xd0, 0xd2, 0x3a, 0x01, 0xba, 0x54}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x48, 0xd5, 0x39, 0x4a, 0x0b, 0x20, 0x6a, 0x43, 0xa0, 0x07, 0x82, 0x5e, 0x49, 0x7c, 0xc9, 0x47, 0xf1, 0x7c, 0x37, 0xb9, 0x23, 0xef, 0x6b, 0x46, 0x45, 0x8c, 0x45, 0x76, 0xdf, 0x14, 0x6b, 0x6e}} , {{0x42, 0xc9, 0xca, 0x29, 0x4c, 0x76, 0x37, 0xda, 0x8a, 0x2d, 0x7c, 0x3a, 0x58, 0xf2, 0x03, 0xb4, 0xb5, 0xb9, 0x1a, 0x13, 0x2d, 0xde, 0x5f, 0x6b, 0x9d, 0xba, 0x52, 0xc9, 0x5d, 0xb3, 0xf3, 0x30}}}, {{{0x4c, 0x6f, 0xfe, 0x6b, 0x0c, 0x62, 0xd7, 0x48, 0x71, 0xef, 0xb1, 0x85, 0x79, 0xc0, 0xed, 0x24, 0xb1, 0x08, 0x93, 0x76, 0x8e, 0xf7, 0x38, 0x8e, 0xeb, 0xfe, 0x80, 0x40, 0xaf, 0x90, 0x64, 0x49}} , {{0x4a, 0x88, 0xda, 0xc1, 0x98, 0x44, 0x3c, 0x53, 0x4e, 0xdb, 0x4b, 0xb9, 0x12, 0x5f, 0xcd, 0x08, 0x04, 0xef, 0x75, 0xe7, 0xb1, 0x3a, 0xe5, 0x07, 0xfa, 0xca, 0x65, 0x7b, 0x72, 0x10, 0x64, 0x7f}}}, {{{0x3d, 0x81, 0xf0, 0xeb, 0x16, 0xfd, 0x58, 0x33, 0x8d, 0x7c, 0x1a, 0xfb, 0x20, 0x2c, 0x8a, 0xee, 0x90, 0xbb, 0x33, 0x6d, 0x45, 0xe9, 0x8e, 0x99, 0x85, 0xe1, 0x08, 0x1f, 0xc5, 0xf1, 0xb5, 0x46}} , {{0xe4, 0xe7, 0x43, 0x4b, 0xa0, 0x3f, 0x2b, 0x06, 0xba, 0x17, 0xae, 0x3d, 0xe6, 0xce, 0xbd, 0xb8, 0xed, 0x74, 0x11, 0x35, 0xec, 0x96, 0xfe, 0x31, 0xe3, 0x0e, 0x7a, 0x4e, 0xc9, 0x1d, 0xcb, 0x20}}}, {{{0xe0, 0x67, 0xe9, 0x7b, 0xdb, 0x96, 0x5c, 0xb0, 0x32, 0xd0, 0x59, 0x31, 0x90, 0xdc, 0x92, 0x97, 0xac, 0x09, 0x38, 0x31, 0x0f, 0x7e, 0xd6, 0x5d, 0xd0, 0x06, 0xb6, 0x1f, 0xea, 0xf0, 0x5b, 0x07}} , {{0x81, 0x9f, 0xc7, 0xde, 0x6b, 0x41, 0x22, 0x35, 0x14, 0x67, 0x77, 0x3e, 0x90, 0x81, 0xb0, 0xd9, 0x85, 0x4c, 0xca, 0x9b, 0x3f, 0x04, 0x59, 0xd6, 0xaa, 0x17, 0xc3, 0x88, 0x34, 0x37, 0xba, 0x43}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x4c, 0xb6, 0x69, 0xc8, 0x81, 0x95, 0x94, 0x33, 0x92, 0x34, 0xe9, 0x3c, 0x84, 0x0d, 0x3d, 0x5a, 0x37, 0x9c, 0x22, 0xa0, 0xaa, 0x65, 0xce, 0xb4, 0xc2, 0x2d, 0x66, 0x67, 0x02, 0xff, 0x74, 0x10}} , {{0x22, 0xb0, 0xd5, 0xe6, 0xc7, 0xef, 0xb1, 0xa7, 0x13, 0xda, 0x60, 0xb4, 0x80, 0xc1, 0x42, 0x7d, 0x10, 0x70, 0x97, 0x04, 0x4d, 0xda, 0x23, 0x89, 0xc2, 0x0e, 0x68, 0xcb, 0xde, 0xe0, 0x9b, 0x29}}}, {{{0x33, 0xfe, 0x42, 0x2a, 0x36, 0x2b, 0x2e, 0x36, 0x64, 0x5c, 0x8b, 0xcc, 0x81, 0x6a, 0x15, 0x08, 0xa1, 0x27, 0xe8, 0x57, 0xe5, 0x78, 0x8e, 0xf2, 0x58, 0x19, 0x12, 0x42, 0xae, 0xc4, 0x63, 0x3e}} , {{0x78, 0x96, 0x9c, 0xa7, 0xca, 0x80, 0xae, 0x02, 0x85, 0xb1, 0x7c, 0x04, 0x5c, 0xc1, 0x5b, 0x26, 0xc1, 0xba, 0xed, 0xa5, 0x59, 0x70, 0x85, 0x8c, 0x8c, 0xe8, 0x87, 0xac, 0x6a, 0x28, 0x99, 0x35}}}, {{{0x9f, 0x04, 0x08, 0x28, 0xbe, 0x87, 0xda, 0x80, 0x28, 0x38, 0xde, 0x9f, 0xcd, 0xe4, 0xe3, 0x62, 0xfb, 0x2e, 0x46, 0x8d, 0x01, 0xb3, 0x06, 0x51, 0xd4, 0x19, 0x3b, 0x11, 0xfa, 0xe2, 0xad, 0x1e}} , {{0xa0, 0x20, 0x99, 0x69, 0x0a, 0xae, 0xa3, 0x70, 0x4e, 0x64, 0x80, 0xb7, 0x85, 0x9c, 0x87, 0x54, 0x43, 0x43, 0x55, 0x80, 0x6d, 0x8d, 0x7c, 0xa9, 0x64, 0xca, 0x6c, 0x2e, 0x21, 0xd8, 0xc8, 0x6c}}}, {{{0x91, 0x4a, 0x07, 0xad, 0x08, 0x75, 0xc1, 0x4f, 0xa4, 0xb2, 0xc3, 0x6f, 0x46, 0x3e, 0xb1, 0xce, 0x52, 0xab, 0x67, 0x09, 0x54, 0x48, 0x6b, 0x6c, 0xd7, 0x1d, 0x71, 0x76, 0xcb, 0xff, 0xdd, 0x31}} , {{0x36, 0x88, 0xfa, 0xfd, 0xf0, 0x36, 0x6f, 0x07, 0x74, 0x88, 0x50, 0xd0, 0x95, 0x38, 0x4a, 0x48, 0x2e, 0x07, 0x64, 0x97, 0x11, 0x76, 0x01, 0x1a, 0x27, 0x4d, 0x8e, 0x25, 0x9a, 0x9b, 0x1c, 0x22}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xbe, 0x57, 0xbd, 0x0e, 0x0f, 0xac, 0x5e, 0x76, 0xa3, 0x71, 0xad, 0x2b, 0x10, 0x45, 0x02, 0xec, 0x59, 0xd5, 0x5d, 0xa9, 0x44, 0xcc, 0x25, 0x4c, 0xb3, 0x3c, 0x5b, 0x69, 0x07, 0x55, 0x26, 0x6b}} , {{0x30, 0x6b, 0xd4, 0xa7, 0x51, 0x29, 0xe3, 0xf9, 0x7a, 0x75, 0x2a, 0x82, 0x2f, 0xd6, 0x1d, 0x99, 0x2b, 0x80, 0xd5, 0x67, 0x1e, 0x15, 0x9d, 0xca, 0xfd, 0xeb, 0xac, 0x97, 0x35, 0x09, 0x7f, 0x3f}}}, {{{0x35, 0x0d, 0x34, 0x0a, 0xb8, 0x67, 0x56, 0x29, 0x20, 0xf3, 0x19, 0x5f, 0xe2, 0x83, 0x42, 0x73, 0x53, 0xa8, 0xc5, 0x02, 0x19, 0x33, 0xb4, 0x64, 0xbd, 0xc3, 0x87, 0x8c, 0xd7, 0x76, 0xed, 0x25}} , {{0x47, 0x39, 0x37, 0x76, 0x0d, 0x1d, 0x0c, 0xf5, 0x5a, 0x6d, 0x43, 0x88, 0x99, 0x15, 0xb4, 0x52, 0x0f, 0x2a, 0xb3, 0xb0, 0x3f, 0xa6, 0xb3, 0x26, 0xb3, 0xc7, 0x45, 0xf5, 0x92, 0x5f, 0x9b, 0x17}}}, {{{0x9d, 0x23, 0xbd, 0x15, 0xfe, 0x52, 0x52, 0x15, 0x26, 0x79, 0x86, 0xba, 0x06, 0x56, 0x66, 0xbb, 0x8c, 0x2e, 0x10, 0x11, 0xd5, 0x4a, 0x18, 0x52, 0xda, 0x84, 0x44, 0xf0, 0x3e, 0xe9, 0x8c, 0x35}} , {{0xad, 0xa0, 0x41, 0xec, 0xc8, 0x4d, 0xb9, 0xd2, 0x6e, 0x96, 0x4e, 0x5b, 0xc5, 0xc2, 0xa0, 0x1b, 0xcf, 0x0c, 0xbf, 0x17, 0x66, 0x57, 0xc1, 0x17, 0x90, 0x45, 0x71, 0xc2, 0xe1, 0x24, 0xeb, 0x27}}}, {{{0x2c, 0xb9, 0x42, 0xa4, 0xaf, 0x3b, 0x42, 0x0e, 0xc2, 0x0f, 0xf2, 0xea, 0x83, 0xaf, 0x9a, 0x13, 0x17, 0xb0, 0xbd, 0x89, 0x17, 0xe3, 0x72, 0xcb, 0x0e, 0x76, 0x7e, 0x41, 0x63, 0x04, 0x88, 0x71}} , {{0x75, 0x78, 0x38, 0x86, 0x57, 0xdd, 0x9f, 0xee, 0x54, 0x70, 0x65, 0xbf, 0xf1, 0x2c, 0xe0, 0x39, 0x0d, 0xe3, 0x89, 0xfd, 0x8e, 0x93, 0x4f, 0x43, 0xdc, 0xd5, 0x5b, 0xde, 0xf9, 0x98, 0xe5, 0x7b}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xe7, 0x3b, 0x65, 0x11, 0xdf, 0xb2, 0xf2, 0x63, 0x94, 0x12, 0x6f, 0x5c, 0x9e, 0x77, 0xc1, 0xb6, 0xd8, 0xab, 0x58, 0x7a, 0x1d, 0x95, 0x73, 0xdd, 0xe7, 0xe3, 0x6f, 0xf2, 0x03, 0x1d, 0xdb, 0x76}} , {{0xae, 0x06, 0x4e, 0x2c, 0x52, 0x1b, 0xbc, 0x5a, 0x5a, 0xa5, 0xbe, 0x27, 0xbd, 0xeb, 0xe1, 0x14, 0x17, 0x68, 0x26, 0x07, 0x03, 0xd1, 0x18, 0x0b, 0xdf, 0xf1, 0x06, 0x5c, 0xa6, 0x1b, 0xb9, 0x24}}}, {{{0xc5, 0x66, 0x80, 0x13, 0x0e, 0x48, 0x8c, 0x87, 0x31, 0x84, 0xb4, 0x60, 0xed, 0xc5, 0xec, 0xb6, 0xc5, 0x05, 0x33, 0x5f, 0x2f, 0x7d, 0x40, 0xb6, 0x32, 0x1d, 0x38, 0x74, 0x1b, 0xf1, 0x09, 0x3d}} , {{0xd4, 0x69, 0x82, 0xbc, 0x8d, 0xf8, 0x34, 0x36, 0x75, 0x55, 0x18, 0x55, 0x58, 0x3c, 0x79, 0xaf, 0x26, 0x80, 0xab, 0x9b, 0x95, 0x00, 0xf1, 0xcb, 0xda, 0xc1, 0x9f, 0xf6, 0x2f, 0xa2, 0xf4, 0x45}}}, {{{0x17, 0xbe, 0xeb, 0x85, 0xed, 0x9e, 0xcd, 0x56, 0xf5, 0x17, 0x45, 0x42, 0xb4, 0x1f, 0x44, 0x4c, 0x05, 0x74, 0x15, 0x47, 0x00, 0xc6, 0x6a, 0x3d, 0x24, 0x09, 0x0d, 0x58, 0xb1, 0x42, 0xd7, 0x04}} , {{0x8d, 0xbd, 0xa3, 0xc4, 0x06, 0x9b, 0x1f, 0x90, 0x58, 0x60, 0x74, 0xb2, 0x00, 0x3b, 0x3c, 0xd2, 0xda, 0x82, 0xbb, 0x10, 0x90, 0x69, 0x92, 0xa9, 0xb4, 0x30, 0x81, 0xe3, 0x7c, 0xa8, 0x89, 0x45}}}, {{{0x3f, 0xdc, 0x05, 0xcb, 0x41, 0x3c, 0xc8, 0x23, 0x04, 0x2c, 0x38, 0x99, 0xe3, 0x68, 0x55, 0xf9, 0xd3, 0x32, 0xc7, 0xbf, 0xfa, 0xd4, 0x1b, 0x5d, 0xde, 0xdc, 0x10, 0x42, 0xc0, 0x42, 0xd9, 0x75}} , {{0x2d, 0xab, 0x35, 0x4e, 0x87, 0xc4, 0x65, 0x97, 0x67, 0x24, 0xa4, 0x47, 0xad, 0x3f, 0x8e, 0xf3, 0xcb, 0x31, 0x17, 0x77, 0xc5, 0xe2, 0xd7, 0x8f, 0x3c, 0xc1, 0xcd, 0x56, 0x48, 0xc1, 0x6c, 0x69}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x14, 0xae, 0x5f, 0x88, 0x7b, 0xa5, 0x90, 0xdf, 0x10, 0xb2, 0x8b, 0x5e, 0x24, 0x17, 0xc3, 0xa3, 0xd4, 0x0f, 0x92, 0x61, 0x1a, 0x19, 0x5a, 0xad, 0x76, 0xbd, 0xd8, 0x1c, 0xdd, 0xe0, 0x12, 0x6d}} , {{0x8e, 0xbd, 0x70, 0x8f, 0x02, 0xa3, 0x24, 0x4d, 0x5a, 0x67, 0xc4, 0xda, 0xf7, 0x20, 0x0f, 0x81, 0x5b, 0x7a, 0x05, 0x24, 0x67, 0x83, 0x0b, 0x2a, 0x80, 0xe7, 0xfd, 0x74, 0x4b, 0x9e, 0x5c, 0x0d}}}, {{{0x94, 0xd5, 0x5f, 0x1f, 0xa2, 0xfb, 0xeb, 0xe1, 0x07, 0x34, 0xf8, 0x20, 0xad, 0x81, 0x30, 0x06, 0x2d, 0xa1, 0x81, 0x95, 0x36, 0xcf, 0x11, 0x0b, 0xaf, 0xc1, 0x2b, 0x9a, 0x6c, 0x55, 0xc1, 0x16}} , {{0x36, 0x4f, 0xf1, 0x5e, 0x74, 0x35, 0x13, 0x28, 0xd7, 0x11, 0xcf, 0xb8, 0xde, 0x93, 0xb3, 0x05, 0xb8, 0xb5, 0x73, 0xe9, 0xeb, 0xad, 0x19, 0x1e, 0x89, 0x0f, 0x8b, 0x15, 0xd5, 0x8c, 0xe3, 0x23}}}, {{{0x33, 0x79, 0xe7, 0x18, 0xe6, 0x0f, 0x57, 0x93, 0x15, 0xa0, 0xa7, 0xaa, 0xc4, 0xbf, 0x4f, 0x30, 0x74, 0x95, 0x5e, 0x69, 0x4a, 0x5b, 0x45, 0xe4, 0x00, 0xeb, 0x23, 0x74, 0x4c, 0xdf, 0x6b, 0x45}} , {{0x97, 0x29, 0x6c, 0xc4, 0x42, 0x0b, 0xdd, 0xc0, 0x29, 0x5c, 0x9b, 0x34, 0x97, 0xd0, 0xc7, 0x79, 0x80, 0x63, 0x74, 0xe4, 0x8e, 0x37, 0xb0, 0x2b, 0x7c, 0xe8, 0x68, 0x6c, 0xc3, 0x82, 0x97, 0x57}}}, {{{0x22, 0xbe, 0x83, 0xb6, 0x4b, 0x80, 0x6b, 0x43, 0x24, 0x5e, 0xef, 0x99, 0x9b, 0xa8, 0xfc, 0x25, 0x8d, 0x3b, 0x03, 0x94, 0x2b, 0x3e, 0xe7, 0x95, 0x76, 0x9b, 0xcc, 0x15, 0xdb, 0x32, 0xe6, 0x66}} , {{0x84, 0xf0, 0x4a, 0x13, 0xa6, 0xd6, 0xfa, 0x93, 0x46, 0x07, 0xf6, 0x7e, 0x5c, 0x6d, 0x5e, 0xf6, 0xa6, 0xe7, 0x48, 0xf0, 0x06, 0xea, 0xff, 0x90, 0xc1, 0xcc, 0x4c, 0x19, 0x9c, 0x3c, 0x4e, 0x53}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x2a, 0x50, 0xe3, 0x07, 0x15, 0x59, 0xf2, 0x8b, 0x81, 0xf2, 0xf3, 0xd3, 0x6c, 0x99, 0x8c, 0x70, 0x67, 0xec, 0xcc, 0xee, 0x9e, 0x59, 0x45, 0x59, 0x7d, 0x47, 0x75, 0x69, 0xf5, 0x24, 0x93, 0x5d}} , {{0x6a, 0x4f, 0x1b, 0xbe, 0x6b, 0x30, 0xcf, 0x75, 0x46, 0xe3, 0x7b, 0x9d, 0xfc, 0xcd, 0xd8, 0x5c, 0x1f, 0xb4, 0xc8, 0xe2, 0x24, 0xec, 0x1a, 0x28, 0x05, 0x32, 0x57, 0xfd, 0x3c, 0x5a, 0x98, 0x10}}}, {{{0xa3, 0xdb, 0xf7, 0x30, 0xd8, 0xc2, 0x9a, 0xe1, 0xd3, 0xce, 0x22, 0xe5, 0x80, 0x1e, 0xd9, 0xe4, 0x1f, 0xab, 0xc0, 0x71, 0x1a, 0x86, 0x0e, 0x27, 0x99, 0x5b, 0xfa, 0x76, 0x99, 0xb0, 0x08, 0x3c}} , {{0x2a, 0x93, 0xd2, 0x85, 0x1b, 0x6a, 0x5d, 0xa6, 0xee, 0xd1, 0xd1, 0x33, 0xbd, 0x6a, 0x36, 0x73, 0x37, 0x3a, 0x44, 0xb4, 0xec, 0xa9, 0x7a, 0xde, 0x83, 0x40, 0xd7, 0xdf, 0x28, 0xba, 0xa2, 0x30}}}, {{{0xd3, 0xb5, 0x6d, 0x05, 0x3f, 0x9f, 0xf3, 0x15, 0x8d, 0x7c, 0xca, 0xc9, 0xfc, 0x8a, 0x7c, 0x94, 0xb0, 0x63, 0x36, 0x9b, 0x78, 0xd1, 0x91, 0x1f, 0x93, 0xd8, 0x57, 0x43, 0xde, 0x76, 0xa3, 0x43}} , {{0x9b, 0x35, 0xe2, 0xa9, 0x3d, 0x32, 0x1e, 0xbb, 0x16, 0x28, 0x70, 0xe9, 0x45, 0x2f, 0x8f, 0x70, 0x7f, 0x08, 0x7e, 0x53, 0xc4, 0x7a, 0xbf, 0xf7, 0xe1, 0xa4, 0x6a, 0xd8, 0xac, 0x64, 0x1b, 0x11}}}, {{{0xb2, 0xeb, 0x47, 0x46, 0x18, 0x3e, 0x1f, 0x99, 0x0c, 0xcc, 0xf1, 0x2c, 0xe0, 0xe7, 0x8f, 0xe0, 0x01, 0x7e, 0x65, 0xb8, 0x0c, 0xd0, 0xfb, 0xc8, 0xb9, 0x90, 0x98, 0x33, 0x61, 0x3b, 0xd8, 0x27}} , {{0xa0, 0xbe, 0x72, 0x3a, 0x50, 0x4b, 0x74, 0xab, 0x01, 0xc8, 0x93, 0xc5, 0xe4, 0xc7, 0x08, 0x6c, 0xb4, 0xca, 0xee, 0xeb, 0x8e, 0xd7, 0x4e, 0x26, 0xc6, 0x1d, 0xe2, 0x71, 0xaf, 0x89, 0xa0, 0x2a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x98, 0x0b, 0xe4, 0xde, 0xdb, 0xa8, 0xfa, 0x82, 0x74, 0x06, 0x52, 0x6d, 0x08, 0x52, 0x8a, 0xff, 0x62, 0xc5, 0x6a, 0x44, 0x0f, 0x51, 0x8c, 0x1f, 0x6e, 0xb6, 0xc6, 0x2c, 0x81, 0xd3, 0x76, 0x46}} , {{0xf4, 0x29, 0x74, 0x2e, 0x80, 0xa7, 0x1a, 0x8f, 0xf6, 0xbd, 0xd6, 0x8e, 0xbf, 0xc1, 0x95, 0x2a, 0xeb, 0xa0, 0x7f, 0x45, 0xa0, 0x50, 0x14, 0x05, 0xb1, 0x57, 0x4c, 0x74, 0xb7, 0xe2, 0x89, 0x7d}}}, {{{0x07, 0xee, 0xa7, 0xad, 0xb7, 0x09, 0x0b, 0x49, 0x4e, 0xbf, 0xca, 0xe5, 0x21, 0xe6, 0xe6, 0xaf, 0xd5, 0x67, 0xf3, 0xce, 0x7e, 0x7c, 0x93, 0x7b, 0x5a, 0x10, 0x12, 0x0e, 0x6c, 0x06, 0x11, 0x75}} , {{0xd5, 0xfc, 0x86, 0xa3, 0x3b, 0xa3, 0x3e, 0x0a, 0xfb, 0x0b, 0xf7, 0x36, 0xb1, 0x5b, 0xda, 0x70, 0xb7, 0x00, 0xa7, 0xda, 0x88, 0x8f, 0x84, 0xa8, 0xbc, 0x1c, 0x39, 0xb8, 0x65, 0xf3, 0x4d, 0x60}}}, {{{0x96, 0x9d, 0x31, 0xf4, 0xa2, 0xbe, 0x81, 0xb9, 0xa5, 0x59, 0x9e, 0xba, 0x07, 0xbe, 0x74, 0x58, 0xd8, 0xeb, 0xc5, 0x9f, 0x3d, 0xd1, 0xf4, 0xae, 0xce, 0x53, 0xdf, 0x4f, 0xc7, 0x2a, 0x89, 0x4d}} , {{0x29, 0xd8, 0xf2, 0xaa, 0xe9, 0x0e, 0xf7, 0x2e, 0x5f, 0x9d, 0x8a, 0x5b, 0x09, 0xed, 0xc9, 0x24, 0x22, 0xf4, 0x0f, 0x25, 0x8f, 0x1c, 0x84, 0x6e, 0x34, 0x14, 0x6c, 0xea, 0xb3, 0x86, 0x5d, 0x04}}}, {{{0x07, 0x98, 0x61, 0xe8, 0x6a, 0xd2, 0x81, 0x49, 0x25, 0xd5, 0x5b, 0x18, 0xc7, 0x35, 0x52, 0x51, 0xa4, 0x46, 0xad, 0x18, 0x0d, 0xc9, 0x5f, 0x18, 0x91, 0x3b, 0xb4, 0xc0, 0x60, 0x59, 0x8d, 0x66}} , {{0x03, 0x1b, 0x79, 0x53, 0x6e, 0x24, 0xae, 0x57, 0xd9, 0x58, 0x09, 0x85, 0x48, 0xa2, 0xd3, 0xb5, 0xe2, 0x4d, 0x11, 0x82, 0xe6, 0x86, 0x3c, 0xe9, 0xb1, 0x00, 0x19, 0xc2, 0x57, 0xf7, 0x66, 0x7a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x0f, 0xe3, 0x89, 0x03, 0xd7, 0x22, 0x95, 0x9f, 0xca, 0xb4, 0x8d, 0x9e, 0x6d, 0x97, 0xff, 0x8d, 0x21, 0x59, 0x07, 0xef, 0x03, 0x2d, 0x5e, 0xf8, 0x44, 0x46, 0xe7, 0x85, 0x80, 0xc5, 0x89, 0x50}} , {{0x8b, 0xd8, 0x53, 0x86, 0x24, 0x86, 0x29, 0x52, 0x01, 0xfa, 0x20, 0xc3, 0x4e, 0x95, 0xcb, 0xad, 0x7b, 0x34, 0x94, 0x30, 0xb7, 0x7a, 0xfa, 0x96, 0x41, 0x60, 0x2b, 0xcb, 0x59, 0xb9, 0xca, 0x50}}}, {{{0xc2, 0x5b, 0x9b, 0x78, 0x23, 0x1b, 0x3a, 0x88, 0x94, 0x5f, 0x0a, 0x9b, 0x98, 0x2b, 0x6e, 0x53, 0x11, 0xf6, 0xff, 0xc6, 0x7d, 0x42, 0xcc, 0x02, 0x80, 0x40, 0x0d, 0x1e, 0xfb, 0xaf, 0x61, 0x07}} , {{0xb0, 0xe6, 0x2f, 0x81, 0x70, 0xa1, 0x2e, 0x39, 0x04, 0x7c, 0xc4, 0x2c, 0x87, 0x45, 0x4a, 0x5b, 0x69, 0x97, 0xac, 0x6d, 0x2c, 0x10, 0x42, 0x7c, 0x3b, 0x15, 0x70, 0x60, 0x0e, 0x11, 0x6d, 0x3a}}}, {{{0x9b, 0x18, 0x80, 0x5e, 0xdb, 0x05, 0xbd, 0xc6, 0xb7, 0x3c, 0xc2, 0x40, 0x4d, 0x5d, 0xce, 0x97, 0x8a, 0x34, 0x15, 0xab, 0x28, 0x5d, 0x10, 0xf0, 0x37, 0x0c, 0xcc, 0x16, 0xfa, 0x1f, 0x33, 0x0d}} , {{0x19, 0xf9, 0x35, 0xaa, 0x59, 0x1a, 0x0c, 0x5c, 0x06, 0xfc, 0x6a, 0x0b, 0x97, 0x53, 0x36, 0xfc, 0x2a, 0xa5, 0x5a, 0x9b, 0x30, 0xef, 0x23, 0xaf, 0x39, 0x5d, 0x9a, 0x6b, 0x75, 0x57, 0x48, 0x0b}}}, {{{0x26, 0xdc, 0x76, 0x3b, 0xfc, 0xf9, 0x9c, 0x3f, 0x89, 0x0b, 0x62, 0x53, 0xaf, 0x83, 0x01, 0x2e, 0xbc, 0x6a, 0xc6, 0x03, 0x0d, 0x75, 0x2a, 0x0d, 0xe6, 0x94, 0x54, 0xcf, 0xb3, 0xe5, 0x96, 0x25}} , {{0xfe, 0x82, 0xb1, 0x74, 0x31, 0x8a, 0xa7, 0x6f, 0x56, 0xbd, 0x8d, 0xf4, 0xe0, 0x94, 0x51, 0x59, 0xde, 0x2c, 0x5a, 0xf4, 0x84, 0x6b, 0x4a, 0x88, 0x93, 0xc0, 0x0c, 0x9a, 0xac, 0xa7, 0xa0, 0x68}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x25, 0x0d, 0xd6, 0xc7, 0x23, 0x47, 0x10, 0xad, 0xc7, 0x08, 0x5c, 0x87, 0x87, 0x93, 0x98, 0x18, 0xb8, 0xd3, 0x9c, 0xac, 0x5a, 0x3d, 0xc5, 0x75, 0xf8, 0x49, 0x32, 0x14, 0xcc, 0x51, 0x96, 0x24}} , {{0x65, 0x9c, 0x5d, 0xf0, 0x37, 0x04, 0xf0, 0x34, 0x69, 0x2a, 0xf0, 0xa5, 0x64, 0xca, 0xde, 0x2b, 0x5b, 0x15, 0x10, 0xd2, 0xab, 0x06, 0xdd, 0xc4, 0xb0, 0xb6, 0x5b, 0xc1, 0x17, 0xdf, 0x8f, 0x02}}}, {{{0xbd, 0x59, 0x3d, 0xbf, 0x5c, 0x31, 0x44, 0x2c, 0x32, 0x94, 0x04, 0x60, 0x84, 0x0f, 0xad, 0x00, 0xb6, 0x8f, 0xc9, 0x1d, 0xcc, 0x5c, 0xa2, 0x49, 0x0e, 0x50, 0x91, 0x08, 0x9a, 0x43, 0x55, 0x05}} , {{0x5d, 0x93, 0x55, 0xdf, 0x9b, 0x12, 0x19, 0xec, 0x93, 0x85, 0x42, 0x9e, 0x66, 0x0f, 0x9d, 0xaf, 0x99, 0xaf, 0x26, 0x89, 0xbc, 0x61, 0xfd, 0xff, 0xce, 0x4b, 0xf4, 0x33, 0x95, 0xc9, 0x35, 0x58}}}, {{{0x12, 0x55, 0xf9, 0xda, 0xcb, 0x44, 0xa7, 0xdc, 0x57, 0xe2, 0xf9, 0x9a, 0xe6, 0x07, 0x23, 0x60, 0x54, 0xa7, 0x39, 0xa5, 0x9b, 0x84, 0x56, 0x6e, 0xaa, 0x8b, 0x8f, 0xb0, 0x2c, 0x87, 0xaf, 0x67}} , {{0x00, 0xa9, 0x4c, 0xb2, 0x12, 0xf8, 0x32, 0xa8, 0x7a, 0x00, 0x4b, 0x49, 0x32, 0xba, 0x1f, 0x5d, 0x44, 0x8e, 0x44, 0x7a, 0xdc, 0x11, 0xfb, 0x39, 0x08, 0x57, 0x87, 0xa5, 0x12, 0x42, 0x93, 0x0e}}}, {{{0x17, 0xb4, 0xae, 0x72, 0x59, 0xd0, 0xaa, 0xa8, 0x16, 0x8b, 0x63, 0x11, 0xb3, 0x43, 0x04, 0xda, 0x0c, 0xa8, 0xb7, 0x68, 0xdd, 0x4e, 0x54, 0xe7, 0xaf, 0x5d, 0x5d, 0x05, 0x76, 0x36, 0xec, 0x0d}} , {{0x6d, 0x7c, 0x82, 0x32, 0x38, 0x55, 0x57, 0x74, 0x5b, 0x7d, 0xc3, 0xc4, 0xfb, 0x06, 0x29, 0xf0, 0x13, 0x55, 0x54, 0xc6, 0xa7, 0xdc, 0x4c, 0x9f, 0x98, 0x49, 0x20, 0xa8, 0xc3, 0x8d, 0xfa, 0x48}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x87, 0x47, 0x9d, 0xe9, 0x25, 0xd5, 0xe3, 0x47, 0x78, 0xdf, 0x85, 0xa7, 0x85, 0x5e, 0x7a, 0x4c, 0x5f, 0x79, 0x1a, 0xf3, 0xa2, 0xb2, 0x28, 0xa0, 0x9c, 0xdd, 0x30, 0x40, 0xd4, 0x38, 0xbd, 0x28}} , {{0xfc, 0xbb, 0xd5, 0x78, 0x6d, 0x1d, 0xd4, 0x99, 0xb4, 0xaa, 0x44, 0x44, 0x7a, 0x1b, 0xd8, 0xfe, 0xb4, 0x99, 0xb9, 0xcc, 0xe7, 0xc4, 0xd3, 0x3a, 0x73, 0x83, 0x41, 0x5c, 0x40, 0xd7, 0x2d, 0x55}}}, {{{0x26, 0xe1, 0x7b, 0x5f, 0xe5, 0xdc, 0x3f, 0x7d, 0xa1, 0xa7, 0x26, 0x44, 0x22, 0x23, 0xc0, 0x8f, 0x7d, 0xf1, 0xb5, 0x11, 0x47, 0x7b, 0x19, 0xd4, 0x75, 0x6f, 0x1e, 0xa5, 0x27, 0xfe, 0xc8, 0x0e}} , {{0xd3, 0x11, 0x3d, 0xab, 0xef, 0x2c, 0xed, 0xb1, 0x3d, 0x7c, 0x32, 0x81, 0x6b, 0xfe, 0xf8, 0x1c, 0x3c, 0x7b, 0xc0, 0x61, 0xdf, 0xb8, 0x75, 0x76, 0x7f, 0xaa, 0xd8, 0x93, 0xaf, 0x3d, 0xe8, 0x3d}}}, {{{0xfd, 0x5b, 0x4e, 0x8d, 0xb6, 0x7e, 0x82, 0x9b, 0xef, 0xce, 0x04, 0x69, 0x51, 0x52, 0xff, 0xef, 0xa0, 0x52, 0xb5, 0x79, 0x17, 0x5e, 0x2f, 0xde, 0xd6, 0x3c, 0x2d, 0xa0, 0x43, 0xb4, 0x0b, 0x19}} , {{0xc0, 0x61, 0x48, 0x48, 0x17, 0xf4, 0x9e, 0x18, 0x51, 0x2d, 0xea, 0x2f, 0xf2, 0xf2, 0xe0, 0xa3, 0x14, 0xb7, 0x8b, 0x3a, 0x30, 0xf5, 0x81, 0xc1, 0x5d, 0x71, 0x39, 0x62, 0x55, 0x1f, 0x60, 0x5a}}}, {{{0xe5, 0x89, 0x8a, 0x76, 0x6c, 0xdb, 0x4d, 0x0a, 0x5b, 0x72, 0x9d, 0x59, 0x6e, 0x63, 0x63, 0x18, 0x7c, 0xe3, 0xfa, 0xe2, 0xdb, 0xa1, 0x8d, 0xf4, 0xa5, 0xd7, 0x16, 0xb2, 0xd0, 0xb3, 0x3f, 0x39}} , {{0xce, 0x60, 0x09, 0x6c, 0xf5, 0x76, 0x17, 0x24, 0x80, 0x3a, 0x96, 0xc7, 0x94, 0x2e, 0xf7, 0x6b, 0xef, 0xb5, 0x05, 0x96, 0xef, 0xd3, 0x7b, 0x51, 0xda, 0x05, 0x44, 0x67, 0xbc, 0x07, 0x21, 0x4e}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xe9, 0x73, 0x6f, 0x21, 0xb9, 0xde, 0x22, 0x7d, 0xeb, 0x97, 0x31, 0x10, 0xa3, 0xea, 0xe1, 0xc6, 0x37, 0xeb, 0x8f, 0x43, 0x58, 0xde, 0x41, 0x64, 0x0e, 0x3e, 0x07, 0x99, 0x3d, 0xf1, 0xdf, 0x1e}} , {{0xf8, 0xad, 0x43, 0xc2, 0x17, 0x06, 0xe2, 0xe4, 0xa9, 0x86, 0xcd, 0x18, 0xd7, 0x78, 0xc8, 0x74, 0x66, 0xd2, 0x09, 0x18, 0xa5, 0xf1, 0xca, 0xa6, 0x62, 0x92, 0xc1, 0xcb, 0x00, 0xeb, 0x42, 0x2e}}}, {{{0x7b, 0x34, 0x24, 0x4c, 0xcf, 0x38, 0xe5, 0x6c, 0x0a, 0x01, 0x2c, 0x22, 0x0b, 0x24, 0x38, 0xad, 0x24, 0x7e, 0x19, 0xf0, 0x6c, 0xf9, 0x31, 0xf4, 0x35, 0x11, 0xf6, 0x46, 0x33, 0x3a, 0x23, 0x59}} , {{0x20, 0x0b, 0xa1, 0x08, 0x19, 0xad, 0x39, 0x54, 0xea, 0x3e, 0x23, 0x09, 0xb6, 0xe2, 0xd2, 0xbc, 0x4d, 0xfc, 0x9c, 0xf0, 0x13, 0x16, 0x22, 0x3f, 0xb9, 0xd2, 0x11, 0x86, 0x90, 0x55, 0xce, 0x3c}}}, {{{0xc4, 0x0b, 0x4b, 0x62, 0x99, 0x37, 0x84, 0x3f, 0x74, 0xa2, 0xf9, 0xce, 0xe2, 0x0b, 0x0f, 0x2a, 0x3d, 0xa3, 0xe3, 0xdb, 0x5a, 0x9d, 0x93, 0xcc, 0xa5, 0xef, 0x82, 0x91, 0x1d, 0xe6, 0x6c, 0x68}} , {{0xa3, 0x64, 0x17, 0x9b, 0x8b, 0xc8, 0x3a, 0x61, 0xe6, 0x9d, 0xc6, 0xed, 0x7b, 0x03, 0x52, 0x26, 0x9d, 0x3a, 0xb3, 0x13, 0xcc, 0x8a, 0xfd, 0x2c, 0x1a, 0x1d, 0xed, 0x13, 0xd0, 0x55, 0x57, 0x0e}}}, {{{0x1a, 0xea, 0xbf, 0xfd, 0x4a, 0x3c, 0x8e, 0xec, 0x29, 0x7e, 0x77, 0x77, 0x12, 0x99, 0xd7, 0x84, 0xf9, 0x55, 0x7f, 0xf1, 0x8b, 0xb4, 0xd2, 0x95, 0xa3, 0x8d, 0xf0, 0x8a, 0xa7, 0xeb, 0x82, 0x4b}} , {{0x2c, 0x28, 0xf4, 0x3a, 0xf6, 0xde, 0x0a, 0xe0, 0x41, 0x44, 0x23, 0xf8, 0x3f, 0x03, 0x64, 0x9f, 0xc3, 0x55, 0x4c, 0xc6, 0xc1, 0x94, 0x1c, 0x24, 0x5d, 0x5f, 0x92, 0x45, 0x96, 0x57, 0x37, 0x14}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xc1, 0xcd, 0x90, 0x66, 0xb9, 0x76, 0xa0, 0x5b, 0xa5, 0x85, 0x75, 0x23, 0xf9, 0x89, 0xa5, 0x82, 0xb2, 0x6f, 0xb1, 0xeb, 0xc4, 0x69, 0x6f, 0x18, 0x5a, 0xed, 0x94, 0x3d, 0x9d, 0xd9, 0x2c, 0x1a}} , {{0x35, 0xb0, 0xe6, 0x73, 0x06, 0xb7, 0x37, 0xe0, 0xf8, 0xb0, 0x22, 0xe8, 0xd2, 0xed, 0x0b, 0xef, 0xe6, 0xc6, 0x5a, 0x99, 0x9e, 0x1a, 0x9f, 0x04, 0x97, 0xe4, 0x4d, 0x0b, 0xbe, 0xba, 0x44, 0x40}}}, {{{0xc1, 0x56, 0x96, 0x91, 0x5f, 0x1f, 0xbb, 0x54, 0x6f, 0x88, 0x89, 0x0a, 0xb2, 0xd6, 0x41, 0x42, 0x6a, 0x82, 0xee, 0x14, 0xaa, 0x76, 0x30, 0x65, 0x0f, 0x67, 0x39, 0xa6, 0x51, 0x7c, 0x49, 0x24}} , {{0x35, 0xa3, 0x78, 0xd1, 0x11, 0x0f, 0x75, 0xd3, 0x70, 0x46, 0xdb, 0x20, 0x51, 0xcb, 0x92, 0x80, 0x54, 0x10, 0x74, 0x36, 0x86, 0xa9, 0xd7, 0xa3, 0x08, 0x78, 0xf1, 0x01, 0x29, 0xf8, 0x80, 0x3b}}}, {{{0xdb, 0xa7, 0x9d, 0x9d, 0xbf, 0xa0, 0xcc, 0xed, 0x53, 0xa2, 0xa2, 0x19, 0x39, 0x48, 0x83, 0x19, 0x37, 0x58, 0xd1, 0x04, 0x28, 0x40, 0xf7, 0x8a, 0xc2, 0x08, 0xb7, 0xa5, 0x42, 0xcf, 0x53, 0x4c}} , {{0xa7, 0xbb, 0xf6, 0x8e, 0xad, 0xdd, 0xf7, 0x90, 0xdd, 0x5f, 0x93, 0x89, 0xae, 0x04, 0x37, 0xe6, 0x9a, 0xb7, 0xe8, 0xc0, 0xdf, 0x16, 0x2a, 0xbf, 0xc4, 0x3a, 0x3c, 0x41, 0xd5, 0x89, 0x72, 0x5a}}}, {{{0x1f, 0x96, 0xff, 0x34, 0x2c, 0x13, 0x21, 0xcb, 0x0a, 0x89, 0x85, 0xbe, 0xb3, 0x70, 0x9e, 0x1e, 0xde, 0x97, 0xaf, 0x96, 0x30, 0xf7, 0x48, 0x89, 0x40, 0x8d, 0x07, 0xf1, 0x25, 0xf0, 0x30, 0x58}} , {{0x1e, 0xd4, 0x93, 0x57, 0xe2, 0x17, 0xe7, 0x9d, 0xab, 0x3c, 0x55, 0x03, 0x82, 0x2f, 0x2b, 0xdb, 0x56, 0x1e, 0x30, 0x2e, 0x24, 0x47, 0x6e, 0xe6, 0xff, 0x33, 0x24, 0x2c, 0x75, 0x51, 0xd4, 0x67}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x2b, 0x06, 0xd9, 0xa1, 0x5d, 0xe1, 0xf4, 0xd1, 0x1e, 0x3c, 0x9a, 0xc6, 0x29, 0x2b, 0x13, 0x13, 0x78, 0xc0, 0xd8, 0x16, 0x17, 0x2d, 0x9e, 0xa9, 0xc9, 0x79, 0x57, 0xab, 0x24, 0x91, 0x92, 0x19}} , {{0x69, 0xfb, 0xa1, 0x9c, 0xa6, 0x75, 0x49, 0x7d, 0x60, 0x73, 0x40, 0x42, 0xc4, 0x13, 0x0a, 0x95, 0x79, 0x1e, 0x04, 0x83, 0x94, 0x99, 0x9b, 0x1e, 0x0c, 0xe8, 0x1f, 0x54, 0xef, 0xcb, 0xc0, 0x52}}}, {{{0x14, 0x89, 0x73, 0xa1, 0x37, 0x87, 0x6a, 0x7a, 0xcf, 0x1d, 0xd9, 0x2e, 0x1a, 0x67, 0xed, 0x74, 0xc0, 0xf0, 0x9c, 0x33, 0xdd, 0xdf, 0x08, 0xbf, 0x7b, 0xd1, 0x66, 0xda, 0xe6, 0xc9, 0x49, 0x08}} , {{0xe9, 0xdd, 0x5e, 0x55, 0xb0, 0x0a, 0xde, 0x21, 0x4c, 0x5a, 0x2e, 0xd4, 0x80, 0x3a, 0x57, 0x92, 0x7a, 0xf1, 0xc4, 0x2c, 0x40, 0xaf, 0x2f, 0xc9, 0x92, 0x03, 0xe5, 0x5a, 0xbc, 0xdc, 0xf4, 0x09}}}, {{{0xf3, 0xe1, 0x2b, 0x7c, 0x05, 0x86, 0x80, 0x93, 0x4a, 0xad, 0xb4, 0x8f, 0x7e, 0x99, 0x0c, 0xfd, 0xcd, 0xef, 0xd1, 0xff, 0x2c, 0x69, 0x34, 0x13, 0x41, 0x64, 0xcf, 0x3b, 0xd0, 0x90, 0x09, 0x1e}} , {{0x9d, 0x45, 0xd6, 0x80, 0xe6, 0x45, 0xaa, 0xf4, 0x15, 0xaa, 0x5c, 0x34, 0x87, 0x99, 0xa2, 0x8c, 0x26, 0x84, 0x62, 0x7d, 0xb6, 0x29, 0xc0, 0x52, 0xea, 0xf5, 0x81, 0x18, 0x0f, 0x35, 0xa9, 0x0e}}}, {{{0xe7, 0x20, 0x72, 0x7c, 0x6d, 0x94, 0x5f, 0x52, 0x44, 0x54, 0xe3, 0xf1, 0xb2, 0xb0, 0x36, 0x46, 0x0f, 0xae, 0x92, 0xe8, 0x70, 0x9d, 0x6e, 0x79, 0xb1, 0xad, 0x37, 0xa9, 0x5f, 0xc0, 0xde, 0x03}} , {{0x15, 0x55, 0x37, 0xc6, 0x1c, 0x27, 0x1c, 0x6d, 0x14, 0x4f, 0xca, 0xa4, 0xc4, 0x88, 0x25, 0x46, 0x39, 0xfc, 0x5a, 0xe5, 0xfe, 0x29, 0x11, 0x69, 0xf5, 0x72, 0x84, 0x4d, 0x78, 0x9f, 0x94, 0x15}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xec, 0xd3, 0xff, 0x57, 0x0b, 0xb0, 0xb2, 0xdc, 0xf8, 0x4f, 0xe2, 0x12, 0xd5, 0x36, 0xbe, 0x6b, 0x09, 0x43, 0x6d, 0xa3, 0x4d, 0x90, 0x2d, 0xb8, 0x74, 0xe8, 0x71, 0x45, 0x19, 0x8b, 0x0c, 0x6a}} , {{0xb8, 0x42, 0x1c, 0x03, 0xad, 0x2c, 0x03, 0x8e, 0xac, 0xd7, 0x98, 0x29, 0x13, 0xc6, 0x02, 0x29, 0xb5, 0xd4, 0xe7, 0xcf, 0xcc, 0x8b, 0x83, 0xec, 0x35, 0xc7, 0x9c, 0x74, 0xb7, 0xad, 0x85, 0x5f}}}, {{{0x78, 0x84, 0xe1, 0x56, 0x45, 0x69, 0x68, 0x5a, 0x4f, 0xb8, 0xb1, 0x29, 0xff, 0x33, 0x03, 0x31, 0xb7, 0xcb, 0x96, 0x25, 0xe6, 0xe6, 0x41, 0x98, 0x1a, 0xbb, 0x03, 0x56, 0xf2, 0xb2, 0x91, 0x34}} , {{0x2c, 0x6c, 0xf7, 0x66, 0xa4, 0x62, 0x6b, 0x39, 0xb3, 0xba, 0x65, 0xd3, 0x1c, 0xf8, 0x11, 0xaa, 0xbe, 0xdc, 0x80, 0x59, 0x87, 0xf5, 0x7b, 0xe5, 0xe3, 0xb3, 0x3e, 0x39, 0xda, 0xbe, 0x88, 0x09}}}, {{{0x8b, 0xf1, 0xa0, 0xf5, 0xdc, 0x29, 0xb4, 0xe2, 0x07, 0xc6, 0x7a, 0x00, 0xd0, 0x89, 0x17, 0x51, 0xd4, 0xbb, 0xd4, 0x22, 0xea, 0x7e, 0x7d, 0x7c, 0x24, 0xea, 0xf2, 0xe8, 0x22, 0x12, 0x95, 0x06}} , {{0xda, 0x7c, 0xa4, 0x0c, 0xf4, 0xba, 0x6e, 0xe1, 0x89, 0xb5, 0x59, 0xca, 0xf1, 0xc0, 0x29, 0x36, 0x09, 0x44, 0xe2, 0x7f, 0xd1, 0x63, 0x15, 0x99, 0xea, 0x25, 0xcf, 0x0c, 0x9d, 0xc0, 0x44, 0x6f}}}, {{{0x1d, 0x86, 0x4e, 0xcf, 0xf7, 0x37, 0x10, 0x25, 0x8f, 0x12, 0xfb, 0x19, 0xfb, 0xe0, 0xed, 0x10, 0xc8, 0xe2, 0xf5, 0x75, 0xb1, 0x33, 0xc0, 0x96, 0x0d, 0xfb, 0x15, 0x6c, 0x0d, 0x07, 0x5f, 0x05}} , {{0x69, 0x3e, 0x47, 0x97, 0x2c, 0xaf, 0x52, 0x7c, 0x78, 0x83, 0xad, 0x1b, 0x39, 0x82, 0x2f, 0x02, 0x6f, 0x47, 0xdb, 0x2a, 0xb0, 0xe1, 0x91, 0x99, 0x55, 0xb8, 0x99, 0x3a, 0xa0, 0x44, 0x11, 0x51}}} libwebsockets-3.2.1/plugins/ssh-base/crypto/poly1305.c000066400000000000000000000110201357643561300225320ustar00rootroot00000000000000/* * Public Domain poly1305 from Andrew Moon * poly1305-donna-unrolled.c from https://github.com/floodyberry/poly1305-donna */ /* $OpenBSD: poly1305.c,v 1.3 2013/12/19 22:57:13 djm Exp $ */ #include #include "lws-ssh.h" #define mul32x32_64(a,b) ((uint64_t)(a) * (b)) #define U8TO32_LE(p) \ (((uint32_t)((p)[0])) | \ ((uint32_t)((p)[1]) << 8) | \ ((uint32_t)((p)[2]) << 16) | \ ((uint32_t)((p)[3]) << 24)) #define U32TO8_LE(p, v) \ do { \ (p)[0] = (uint8_t)((v)); \ (p)[1] = (uint8_t)((v) >> 8); \ (p)[2] = (uint8_t)((v) >> 16); \ (p)[3] = (uint8_t)((v) >> 24); \ } while (0) void poly1305_auth(unsigned char out[POLY1305_TAGLEN], const unsigned char *m, size_t inlen, const unsigned char key[POLY1305_KEYLEN]) { uint32_t t0,t1,t2,t3; uint32_t h0,h1,h2,h3,h4; uint32_t r0,r1,r2,r3,r4; uint32_t s1,s2,s3,s4; uint32_t b, nb; size_t j; uint64_t t[5]; uint64_t f0,f1,f2,f3; uint32_t g0,g1,g2,g3,g4; uint64_t c; unsigned char mp[16]; /* clamp key */ t0 = U8TO32_LE(key + 0); t1 = U8TO32_LE(key + 4); t2 = U8TO32_LE(key + 8); t3 = U8TO32_LE(key + 12); /* precompute multipliers */ r0 = t0 & 0x3ffffff; t0 >>= 26; t0 |= t1 << 6; r1 = t0 & 0x3ffff03; t1 >>= 20; t1 |= t2 << 12; r2 = t1 & 0x3ffc0ff; t2 >>= 14; t2 |= t3 << 18; r3 = t2 & 0x3f03fff; t3 >>= 8; r4 = t3 & 0x00fffff; s1 = r1 * 5; s2 = r2 * 5; s3 = r3 * 5; s4 = r4 * 5; /* init state */ h0 = 0; h1 = 0; h2 = 0; h3 = 0; h4 = 0; /* full blocks */ if (inlen < 16) goto poly1305_donna_atmost15bytes; poly1305_donna_16bytes: m += 16; inlen -= 16; t0 = U8TO32_LE(m - 16); t1 = U8TO32_LE(m - 12); t2 = U8TO32_LE(m - 8); t3 = U8TO32_LE(m - 4); h0 += t0 & 0x3ffffff; h1 += ((((uint64_t)t1 << 32) | t0) >> 26) & 0x3ffffff; h2 += ((((uint64_t)t2 << 32) | t1) >> 20) & 0x3ffffff; h3 += ((((uint64_t)t3 << 32) | t2) >> 14) & 0x3ffffff; h4 += (t3 >> 8) | (1 << 24); poly1305_donna_mul: t[0] = mul32x32_64(h0,r0) + mul32x32_64(h1,s4) + mul32x32_64(h2,s3) + mul32x32_64(h3,s2) + mul32x32_64(h4,s1); t[1] = mul32x32_64(h0,r1) + mul32x32_64(h1,r0) + mul32x32_64(h2,s4) + mul32x32_64(h3,s3) + mul32x32_64(h4,s2); t[2] = mul32x32_64(h0,r2) + mul32x32_64(h1,r1) + mul32x32_64(h2,r0) + mul32x32_64(h3,s4) + mul32x32_64(h4,s3); t[3] = mul32x32_64(h0,r3) + mul32x32_64(h1,r2) + mul32x32_64(h2,r1) + mul32x32_64(h3,r0) + mul32x32_64(h4,s4); t[4] = mul32x32_64(h0,r4) + mul32x32_64(h1,r3) + mul32x32_64(h2,r2) + mul32x32_64(h3,r1) + mul32x32_64(h4,r0); h0 = (uint32_t)t[0] & 0x3ffffff; c = (t[0] >> 26); t[1] += c; h1 = (uint32_t)t[1] & 0x3ffffff; b = (uint32_t)(t[1] >> 26); t[2] += b; h2 = (uint32_t)t[2] & 0x3ffffff; b = (uint32_t)(t[2] >> 26); t[3] += b; h3 = (uint32_t)t[3] & 0x3ffffff; b = (uint32_t)(t[3] >> 26); t[4] += b; h4 = (uint32_t)t[4] & 0x3ffffff; b = (uint32_t)(t[4] >> 26); h0 += b * 5; if (inlen >= 16) goto poly1305_donna_16bytes; /* final bytes */ poly1305_donna_atmost15bytes: if (!inlen) goto poly1305_donna_finish; for (j = 0; j < inlen; j++) mp[j] = m[j]; mp[j++] = 1; for (; j < 16; j++) mp[j] = 0; inlen = 0; t0 = U8TO32_LE(mp + 0); t1 = U8TO32_LE(mp + 4); t2 = U8TO32_LE(mp + 8); t3 = U8TO32_LE(mp + 12); h0 += t0 & 0x3ffffff; h1 += ((((uint64_t)t1 << 32) | t0) >> 26) & 0x3ffffff; h2 += ((((uint64_t)t2 << 32) | t1) >> 20) & 0x3ffffff; h3 += ((((uint64_t)t3 << 32) | t2) >> 14) & 0x3ffffff; h4 += (t3 >> 8); goto poly1305_donna_mul; poly1305_donna_finish: b = h0 >> 26; h0 = h0 & 0x3ffffff; h1 += b; b = h1 >> 26; h1 = h1 & 0x3ffffff; h2 += b; b = h2 >> 26; h2 = h2 & 0x3ffffff; h3 += b; b = h3 >> 26; h3 = h3 & 0x3ffffff; h4 += b; b = h4 >> 26; h4 = h4 & 0x3ffffff; h0 += b * 5; b = h0 >> 26; h0 = h0 & 0x3ffffff; h1 += b; g0 = h0 + 5; b = g0 >> 26; g0 &= 0x3ffffff; g1 = h1 + b; b = g1 >> 26; g1 &= 0x3ffffff; g2 = h2 + b; b = g2 >> 26; g2 &= 0x3ffffff; g3 = h3 + b; b = g3 >> 26; g3 &= 0x3ffffff; g4 = h4 + b - (1 << 26); b = (g4 >> 31) - 1; nb = ~b; h0 = (h0 & nb) | (g0 & b); h1 = (h1 & nb) | (g1 & b); h2 = (h2 & nb) | (g2 & b); h3 = (h3 & nb) | (g3 & b); h4 = (h4 & nb) | (g4 & b); f0 = ((h0 ) | (h1 << 26)) + (uint64_t)U8TO32_LE(&key[16]); f1 = ((h1 >> 6) | (h2 << 20)) + (uint64_t)U8TO32_LE(&key[20]); f2 = ((h2 >> 12) | (h3 << 14)) + (uint64_t)U8TO32_LE(&key[24]); f3 = ((h3 >> 18) | (h4 << 8)) + (uint64_t)U8TO32_LE(&key[28]); U32TO8_LE(&out[ 0], f0); f1 += (f0 >> 32); U32TO8_LE(&out[ 4], f1); f2 += (f1 >> 32); U32TO8_LE(&out[ 8], f2); f3 += (f2 >> 32); U32TO8_LE(&out[12], f3); } libwebsockets-3.2.1/plugins/ssh-base/crypto/sc25519.c000066400000000000000000000161101357643561300222560ustar00rootroot00000000000000/* $OpenBSD: sc25519.c,v 1.3 2013/12/09 11:03:45 markus Exp $ */ /* * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, * Peter Schwabe, Bo-Yin Yang. * Copied from supercop-20130419/crypto_sign/ed25519/ref/sc25519.c */ #include #include "sc25519.h" /*Arithmetic modulo the group order m = 2^252 + 27742317777372353535851937790883648493 = 7237005577332262213973186563042994240857116359379907606001950938285454250989 */ static const uint32_t m[32] = {0xED, 0xD3, 0xF5, 0x5C, 0x1A, 0x63, 0x12, 0x58, 0xD6, 0x9C, 0xF7, 0xA2, 0xDE, 0xF9, 0xDE, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10}; static const uint32_t mu[33] = {0x1B, 0x13, 0x2C, 0x0A, 0xA3, 0xE5, 0x9C, 0xED, 0xA7, 0x29, 0x63, 0x08, 0x5D, 0x21, 0x06, 0x21, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}; static uint32_t lt(uint32_t a,uint32_t b) /* 16-bit inputs */ { unsigned int x = a; x -= (unsigned int) b; /* 0..65535: no; 4294901761..4294967295: yes */ x >>= 31; /* 0: no; 1: yes */ return x; } /* Reduce coefficients of r before calling sc_reduce_add_sub */ static void sc_reduce_add_sub(sc25519 *r) { uint32_t pb = 0; uint32_t b; uint32_t mask; int i; unsigned char t[32]; for(i=0;i<32;i++) { pb += m[i]; b = lt(r->v[i],pb); t[i] = r->v[i]-pb+(b<<8); pb = b; } mask = b - 1; for(i=0;i<32;i++) r->v[i] ^= mask & (r->v[i] ^ t[i]); } /* Reduce coefficients of x before calling barrett_reduce */ static void barrett_reduce(sc25519 *r, const uint32_t x[64]) { /* See HAC, Alg. 14.42 */ int i,j; uint32_t q2[66]; uint32_t *q3 = q2 + 33; uint32_t r1[33]; uint32_t r2[33]; uint32_t carry; uint32_t pb = 0; uint32_t b; for (i = 0;i < 66;++i) q2[i] = 0; for (i = 0;i < 33;++i) r2[i] = 0; for(i=0;i<33;i++) for(j=0;j<33;j++) if(i+j >= 31) q2[i+j] += mu[i]*x[j+31]; carry = q2[31] >> 8; q2[32] += carry; carry = q2[32] >> 8; q2[33] += carry; for(i=0;i<33;i++)r1[i] = x[i]; for(i=0;i<32;i++) for(j=0;j<33;j++) if(i+j < 33) r2[i+j] += m[i]*q3[j]; for(i=0;i<32;i++) { carry = r2[i] >> 8; r2[i+1] += carry; r2[i] &= 0xff; } for(i=0;i<32;i++) { pb += r2[i]; b = lt(r1[i],pb); r->v[i] = r1[i]-pb+(b<<8); pb = b; } /* XXX: Can it really happen that r<0?, See HAC, Alg 14.42, Step 3 * If so: Handle it here! */ sc_reduce_add_sub(r); sc_reduce_add_sub(r); } void sc25519_from32bytes(sc25519 *r, const unsigned char x[32]) { int i; uint32_t t[64]; for(i=0;i<32;i++) t[i] = x[i]; for(i=32;i<64;++i) t[i] = 0; barrett_reduce(r, t); } void shortsc25519_from16bytes(shortsc25519 *r, const unsigned char x[16]) { int i; for(i=0;i<16;i++) r->v[i] = x[i]; } void sc25519_from64bytes(sc25519 *r, const unsigned char x[64]) { int i; uint32_t t[64]; for(i=0;i<64;i++) t[i] = x[i]; barrett_reduce(r, t); } void sc25519_from_shortsc(sc25519 *r, const shortsc25519 *x) { int i; for(i=0;i<16;i++) r->v[i] = x->v[i]; for(i=0;i<16;i++) r->v[16+i] = 0; } void sc25519_to32bytes(unsigned char r[32], const sc25519 *x) { int i; for(i=0;i<32;i++) r[i] = x->v[i]; } int sc25519_iszero_vartime(const sc25519 *x) { int i; for(i=0;i<32;i++) if(x->v[i] != 0) return 0; return 1; } int sc25519_isshort_vartime(const sc25519 *x) { int i; for(i=31;i>15;i--) if(x->v[i] != 0) return 0; return 1; } int sc25519_lt_vartime(const sc25519 *x, const sc25519 *y) { int i; for(i=31;i>=0;i--) { if(x->v[i] < y->v[i]) return 1; if(x->v[i] > y->v[i]) return 0; } return 0; } void sc25519_add(sc25519 *r, const sc25519 *x, const sc25519 *y) { int i, carry; for(i=0;i<32;i++) r->v[i] = x->v[i] + y->v[i]; for(i=0;i<31;i++) { carry = r->v[i] >> 8; r->v[i+1] += carry; r->v[i] &= 0xff; } sc_reduce_add_sub(r); } void sc25519_sub_nored(sc25519 *r, const sc25519 *x, const sc25519 *y) { uint32_t b = 0; int i; for(i=0;i<32;i++) { uint32_t t = x->v[i] - y->v[i] - b; r->v[i] = t & 255; b = (t >> 8) & 1; } } void sc25519_mul(sc25519 *r, const sc25519 *x, const sc25519 *y) { int i,j,carry; uint32_t t[64]; for(i=0;i<64;i++)t[i] = 0; for(i=0;i<32;i++) for(j=0;j<32;j++) t[i+j] += x->v[i] * y->v[j]; /* Reduce coefficients */ for(i=0;i<63;i++) { carry = t[i] >> 8; t[i+1] += carry; t[i] &= 0xff; } barrett_reduce(r, t); } void sc25519_mul_shortsc(sc25519 *r, const sc25519 *x, const shortsc25519 *y) { sc25519 t; sc25519_from_shortsc(&t, y); sc25519_mul(r, x, &t); } void sc25519_window3(signed char r[85], const sc25519 *s) { char carry; int i; for(i=0;i<10;i++) { r[8*i+0] = s->v[3*i+0] & 7; r[8*i+1] = (s->v[3*i+0] >> 3) & 7; r[8*i+2] = (s->v[3*i+0] >> 6) & 7; r[8*i+2] ^= (s->v[3*i+1] << 2) & 7; r[8*i+3] = (s->v[3*i+1] >> 1) & 7; r[8*i+4] = (s->v[3*i+1] >> 4) & 7; r[8*i+5] = (s->v[3*i+1] >> 7) & 7; r[8*i+5] ^= (s->v[3*i+2] << 1) & 7; r[8*i+6] = (s->v[3*i+2] >> 2) & 7; r[8*i+7] = (s->v[3*i+2] >> 5) & 7; } r[8*i+0] = s->v[3*i+0] & 7; r[8*i+1] = (s->v[3*i+0] >> 3) & 7; r[8*i+2] = (s->v[3*i+0] >> 6) & 7; r[8*i+2] ^= (s->v[3*i+1] << 2) & 7; r[8*i+3] = (s->v[3*i+1] >> 1) & 7; r[8*i+4] = (s->v[3*i+1] >> 4) & 7; /* Making it signed */ carry = 0; for(i=0;i<84;i++) { r[i] += carry; r[i+1] += r[i] >> 3; r[i] &= 7; carry = r[i] >> 2; r[i] -= carry<<3; } r[84] += carry; } void sc25519_window5(signed char r[51], const sc25519 *s) { char carry; int i; for(i=0;i<6;i++) { r[8*i+0] = s->v[5*i+0] & 31; r[8*i+1] = (s->v[5*i+0] >> 5) & 31; r[8*i+1] ^= (s->v[5*i+1] << 3) & 31; r[8*i+2] = (s->v[5*i+1] >> 2) & 31; r[8*i+3] = (s->v[5*i+1] >> 7) & 31; r[8*i+3] ^= (s->v[5*i+2] << 1) & 31; r[8*i+4] = (s->v[5*i+2] >> 4) & 31; r[8*i+4] ^= (s->v[5*i+3] << 4) & 31; r[8*i+5] = (s->v[5*i+3] >> 1) & 31; r[8*i+6] = (s->v[5*i+3] >> 6) & 31; r[8*i+6] ^= (s->v[5*i+4] << 2) & 31; r[8*i+7] = (s->v[5*i+4] >> 3) & 31; } r[8*i+0] = s->v[5*i+0] & 31; r[8*i+1] = (s->v[5*i+0] >> 5) & 31; r[8*i+1] ^= (s->v[5*i+1] << 3) & 31; r[8*i+2] = (s->v[5*i+1] >> 2) & 31; /* Making it signed */ carry = 0; for(i=0;i<50;i++) { r[i] += carry; r[i+1] += r[i] >> 5; r[i] &= 31; carry = r[i] >> 4; r[i] -= carry<<5; } r[50] += carry; } void sc25519_2interleave2(unsigned char r[127], const sc25519 *s1, const sc25519 *s2) { int i; for(i=0;i<31;i++) { r[4*i] = ( s1->v[i] & 3) ^ (( s2->v[i] & 3) << 2); r[4*i+1] = ((s1->v[i] >> 2) & 3) ^ (((s2->v[i] >> 2) & 3) << 2); r[4*i+2] = ((s1->v[i] >> 4) & 3) ^ (((s2->v[i] >> 4) & 3) << 2); r[4*i+3] = ((s1->v[i] >> 6) & 3) ^ (((s2->v[i] >> 6) & 3) << 2); } r[124] = ( s1->v[31] & 3) ^ (( s2->v[31] & 3) << 2); r[125] = ((s1->v[31] >> 2) & 3) ^ (((s2->v[31] >> 2) & 3) << 2); r[126] = ((s1->v[31] >> 4) & 3) ^ (((s2->v[31] >> 4) & 3) << 2); } libwebsockets-3.2.1/plugins/ssh-base/crypto/sc25519.h000066400000000000000000000054501357643561300222700ustar00rootroot00000000000000/* $OpenBSD: sc25519.h,v 1.3 2013/12/09 11:03:45 markus Exp $ */ /* * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, * Peter Schwabe, Bo-Yin Yang. * Copied from supercop-20130419/crypto_sign/ed25519/ref/sc25519.h */ #ifndef SC25519_H #define SC25519_H #define sc25519 crypto_sign_ed25519_ref_sc25519 #define shortsc25519 crypto_sign_ed25519_ref_shortsc25519 #define sc25519_from32bytes crypto_sign_ed25519_ref_sc25519_from32bytes #define shortsc25519_from16bytes crypto_sign_ed25519_ref_shortsc25519_from16bytes #define sc25519_from64bytes crypto_sign_ed25519_ref_sc25519_from64bytes #define sc25519_from_shortsc crypto_sign_ed25519_ref_sc25519_from_shortsc #define sc25519_to32bytes crypto_sign_ed25519_ref_sc25519_to32bytes #define sc25519_iszero_vartime crypto_sign_ed25519_ref_sc25519_iszero_vartime #define sc25519_isshort_vartime crypto_sign_ed25519_ref_sc25519_isshort_vartime #define sc25519_lt_vartime crypto_sign_ed25519_ref_sc25519_lt_vartime #define sc25519_add crypto_sign_ed25519_ref_sc25519_add #define sc25519_sub_nored crypto_sign_ed25519_ref_sc25519_sub_nored #define sc25519_mul crypto_sign_ed25519_ref_sc25519_mul #define sc25519_mul_shortsc crypto_sign_ed25519_ref_sc25519_mul_shortsc #define sc25519_window3 crypto_sign_ed25519_ref_sc25519_window3 #define sc25519_window5 crypto_sign_ed25519_ref_sc25519_window5 #define sc25519_2interleave2 crypto_sign_ed25519_ref_sc25519_2interleave2 typedef struct { uint32_t v[32]; } sc25519; typedef struct { uint32_t v[16]; } shortsc25519; void sc25519_from32bytes(sc25519 *r, const unsigned char x[32]); void shortsc25519_from16bytes(shortsc25519 *r, const unsigned char x[16]); void sc25519_from64bytes(sc25519 *r, const unsigned char x[64]); void sc25519_from_shortsc(sc25519 *r, const shortsc25519 *x); void sc25519_to32bytes(unsigned char r[32], const sc25519 *x); int sc25519_iszero_vartime(const sc25519 *x); int sc25519_isshort_vartime(const sc25519 *x); int sc25519_lt_vartime(const sc25519 *x, const sc25519 *y); void sc25519_add(sc25519 *r, const sc25519 *x, const sc25519 *y); void sc25519_sub_nored(sc25519 *r, const sc25519 *x, const sc25519 *y); void sc25519_mul(sc25519 *r, const sc25519 *x, const sc25519 *y); void sc25519_mul_shortsc(sc25519 *r, const sc25519 *x, const shortsc25519 *y); /* Convert s into a representation of the form \sum_{i=0}^{84}r[i]2^3 * with r[i] in {-4,...,3} */ void sc25519_window3(signed char r[85], const sc25519 *s); /* Convert s into a representation of the form \sum_{i=0}^{50}r[i]2^5 * with r[i] in {-16,...,15} */ void sc25519_window5(signed char r[51], const sc25519 *s); void sc25519_2interleave2(unsigned char r[127], const sc25519 *s1, const sc25519 *s2); #endif libwebsockets-3.2.1/plugins/ssh-base/crypto/smult_curve25519_ref.c000066400000000000000000000152611357643561300250630ustar00rootroot00000000000000/* $OpenBSD: smult_curve25519_ref.c,v 1.2 2013/11/02 22:02:14 markus Exp $ */ /* version 20081011 Matthew Dempsky Public domain. Derived from public domain code by D. J. Bernstein. */ static void add(unsigned int out[32],const unsigned int a[32],const unsigned int b[32]) { unsigned int j; unsigned int u; u = 0; for (j = 0;j < 31;++j) { u += a[j] + b[j]; out[j] = u & 255; u >>= 8; } u += a[31] + b[31]; out[31] = u; } static void sub(unsigned int out[32],const unsigned int a[32],const unsigned int b[32]) { unsigned int j; unsigned int u; u = 218; for (j = 0;j < 31;++j) { u += a[j] + 65280 - b[j]; out[j] = u & 255; u >>= 8; } u += a[31] - b[31]; out[31] = u; } static void squeeze(unsigned int a[32]) { unsigned int j; unsigned int u; u = 0; for (j = 0;j < 31;++j) { u += a[j]; a[j] = u & 255; u >>= 8; } u += a[31]; a[31] = u & 127; u = 19 * (u >> 7); for (j = 0;j < 31;++j) { u += a[j]; a[j] = u & 255; u >>= 8; } u += a[31]; a[31] = u; } static const unsigned int minusp[32] = { 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 } ; static void freeze(unsigned int a[32]) { unsigned int aorig[32]; unsigned int j; unsigned int negative; for (j = 0;j < 32;++j) aorig[j] = a[j]; add(a,a,minusp); negative = -(int)((a[31] >> 7) & 1); for (j = 0;j < 32;++j) a[j] ^= negative & (aorig[j] ^ a[j]); } static void mult(unsigned int out[32],const unsigned int a[32],const unsigned int b[32]) { unsigned int i; for (i = 0;i < 32;++i) { unsigned int j; unsigned int u; u = 0; for (j = 0;j <= i;++j) u += a[j] * b[i - j]; for (j = i + 1;j < 32;++j) u += 38 * a[j] * b[i + 32 - j]; out[i] = u; } squeeze(out); } static void mult121665(unsigned int out[32],const unsigned int a[32]) { unsigned int j; unsigned int u; u = 0; for (j = 0;j < 31;++j) { u += 121665 * a[j]; out[j] = u & 255; u >>= 8; } u += 121665 * a[31]; out[31] = u & 127; u = 19 * (u >> 7); for (j = 0;j < 31;++j) { u += out[j]; out[j] = u & 255; u >>= 8; } u += out[j]; out[j] = u; } static void square(unsigned int out[32],const unsigned int a[32]) { unsigned int i; unsigned int j; unsigned int u; for (i = 0;i < 32;++i) { u = 0; for (j = 0;j < i - j;++j) u += a[j] * a[i - j]; for (j = i + 1;j < i + 32 - j;++j) if (i + 32 - j < 32 && j < 32) u += 38 * a[j] * a[i + 32 - j]; u *= 2; if ((i & 1) == 0) { u += a[i / 2] * a[i / 2]; u += 38 * a[i / 2 + 16] * a[i / 2 + 16]; } out[i] = u; } squeeze(out); } static void smc_select(unsigned int p[64],unsigned int q[64],const unsigned int r[64],const unsigned int s[64],unsigned int b) { unsigned int j; unsigned int t; unsigned int bminus1; bminus1 = b - 1; for (j = 0;j < 64;++j) { t = bminus1 & (r[j] ^ s[j]); p[j] = s[j] ^ t; q[j] = r[j] ^ t; } } static void mainloop(unsigned int work[64],const unsigned char e[32]) { unsigned int xzm1[64]; unsigned int xzm[64]; unsigned int xzmb[64]; unsigned int xzm1b[64]; unsigned int xznb[64]; unsigned int xzn1b[64]; unsigned int a0[64]; unsigned int a1[64]; unsigned int b0[64]; unsigned int b1[64]; unsigned int c1[64]; unsigned int r[32]; unsigned int s[32]; unsigned int t[32]; unsigned int u[32]; unsigned int j; unsigned int b; int pos; for (j = 0;j < 32;++j) xzm1[j] = work[j]; xzm1[32] = 1; for (j = 33;j < 64;++j) xzm1[j] = 0; xzm[0] = 1; for (j = 1;j < 64;++j) xzm[j] = 0; for (pos = 254;pos >= 0;--pos) { b = e[pos / 8] >> (pos & 7); b &= 1; smc_select(xzmb,xzm1b,xzm,xzm1,b); add(a0,xzmb,xzmb + 32); sub(a0 + 32,xzmb,xzmb + 32); add(a1,xzm1b,xzm1b + 32); sub(a1 + 32,xzm1b,xzm1b + 32); square(b0,a0); square(b0 + 32,a0 + 32); mult(b1,a1,a0 + 32); mult(b1 + 32,a1 + 32,a0); add(c1,b1,b1 + 32); sub(c1 + 32,b1,b1 + 32); square(r,c1 + 32); sub(s,b0,b0 + 32); mult121665(t,s); add(u,t,b0); mult(xznb,b0,b0 + 32); mult(xznb + 32,s,u); square(xzn1b,c1); mult(xzn1b + 32,r,work); smc_select(xzm,xzm1,xznb,xzn1b,b); } for (j = 0;j < 64;++j) work[j] = xzm[j]; } static void recip(unsigned int out[32],const unsigned int z[32]) { unsigned int z2[32]; unsigned int z9[32]; unsigned int z11[32]; unsigned int z2_5_0[32]; unsigned int z2_10_0[32]; unsigned int z2_20_0[32]; unsigned int z2_50_0[32]; unsigned int z2_100_0[32]; unsigned int t0[32]; unsigned int t1[32]; int i; /* 2 */ square(z2,z); /* 4 */ square(t1,z2); /* 8 */ square(t0,t1); /* 9 */ mult(z9,t0,z); /* 11 */ mult(z11,z9,z2); /* 22 */ square(t0,z11); /* 2^5 - 2^0 = 31 */ mult(z2_5_0,t0,z9); /* 2^6 - 2^1 */ square(t0,z2_5_0); /* 2^7 - 2^2 */ square(t1,t0); /* 2^8 - 2^3 */ square(t0,t1); /* 2^9 - 2^4 */ square(t1,t0); /* 2^10 - 2^5 */ square(t0,t1); /* 2^10 - 2^0 */ mult(z2_10_0,t0,z2_5_0); /* 2^11 - 2^1 */ square(t0,z2_10_0); /* 2^12 - 2^2 */ square(t1,t0); /* 2^20 - 2^10 */ for (i = 2;i < 10;i += 2) { square(t0,t1); square(t1,t0); } /* 2^20 - 2^0 */ mult(z2_20_0,t1,z2_10_0); /* 2^21 - 2^1 */ square(t0,z2_20_0); /* 2^22 - 2^2 */ square(t1,t0); /* 2^40 - 2^20 */ for (i = 2;i < 20;i += 2) { square(t0,t1); square(t1,t0); } /* 2^40 - 2^0 */ mult(t0,t1,z2_20_0); /* 2^41 - 2^1 */ square(t1,t0); /* 2^42 - 2^2 */ square(t0,t1); /* 2^50 - 2^10 */ for (i = 2;i < 10;i += 2) { square(t1,t0); square(t0,t1); } /* 2^50 - 2^0 */ mult(z2_50_0,t0,z2_10_0); /* 2^51 - 2^1 */ square(t0,z2_50_0); /* 2^52 - 2^2 */ square(t1,t0); /* 2^100 - 2^50 */ for (i = 2;i < 50;i += 2) { square(t0,t1); square(t1,t0); } /* 2^100 - 2^0 */ mult(z2_100_0,t1,z2_50_0); /* 2^101 - 2^1 */ square(t1,z2_100_0); /* 2^102 - 2^2 */ square(t0,t1); /* 2^200 - 2^100 */ for (i = 2;i < 100;i += 2) { square(t1,t0); square(t0,t1); } /* 2^200 - 2^0 */ mult(t1,t0,z2_100_0); /* 2^201 - 2^1 */ square(t0,t1); /* 2^202 - 2^2 */ square(t1,t0); /* 2^250 - 2^50 */ for (i = 2;i < 50;i += 2) { square(t0,t1); square(t1,t0); } /* 2^250 - 2^0 */ mult(t0,t1,z2_50_0); /* 2^251 - 2^1 */ square(t1,t0); /* 2^252 - 2^2 */ square(t0,t1); /* 2^253 - 2^3 */ square(t1,t0); /* 2^254 - 2^4 */ square(t0,t1); /* 2^255 - 2^5 */ square(t1,t0); /* 2^255 - 21 */ mult(out,t1,z11); } int crypto_scalarmult_curve25519(unsigned char *q, const unsigned char *n, const unsigned char *p) { unsigned int work[96]; unsigned char e[32]; unsigned int i; for (i = 0;i < 32;++i) e[i] = n[i]; e[0] &= 248; e[31] &= 127; e[31] |= 64; for (i = 0;i < 32;++i) work[i] = p[i]; mainloop(work,e); recip(work + 32,work + 32); mult(work + 64,work,work + 32); freeze(work + 64); for (i = 0;i < 32;++i) q[i] = work[64 + i]; return 0; } libwebsockets-3.2.1/plugins/ssh-base/include/000077500000000000000000000000001357643561300212035ustar00rootroot00000000000000libwebsockets-3.2.1/plugins/ssh-base/include/lws-plugin-ssh.h000066400000000000000000000333541357643561300242600ustar00rootroot00000000000000/* * libwebsockets - lws-plugin-ssh-base * * Copyright (C) 2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #if !defined(__LWS_PLUGIN_SSH_H__) #define __LWS_PLUGIN_SSH_H__ #define LWS_CALLBACK_SSH_UART_SET_RXFLOW (LWS_CALLBACK_USER + 800) #define LWS_SSH_OPS_VERSION 2 struct lws_ssh_pty { char term[16]; char *modes; uint32_t width_ch; uint32_t height_ch; uint32_t width_px; uint32_t height_px; uint32_t modes_len; }; #define SSHMO_TTY_OP_END 0 /* Indicates end of options. */ #define SSHMO_VINTR 1 /* Interrupt character; 255 if none. Similarly * for the other characters. Not all of these * characters are supported on all systems. */ #define SSHMO_VQUIT 2 /* The quit character (sends SIGQUIT signal on * POSIX systems). */ #define SSHMO_VERASE 3 /* Erase the character to left of the cursor. */ #define SSHMO_VKILL 4 /* Kill the current input line. */ #define SSHMO_VEOF 5 /* End-of-file character (sends EOF from the * terminal). */ #define SSHMO_VEOL 6 /* End-of-line character in addition to * carriage return and/or linefeed. */ #define SSHMO_VEOL2 7 /* Additional end-of-line character. */ #define SSHMO_VSTART 8 /* Continues paused output (normally * control-Q). */ #define SSHMO_VSTOP 9 /* Pauses output (normally control-S). */ #define SSHMO_VSUSP 10 /* Suspends the current program. */ #define SSHMO_VDSUSP 11 /* Another suspend character. */ #define SSHMO_VREPRINT 12 /* Reprints the current input line. */ #define SSHMO_VWERASE 13 /* Erases a word left of cursor. */ #define SSHMO_VLNEXT 14 /* Enter the next character typed literally, * even if it is a special character */ #define SSHMO_VFLUSH 15 /* Character to flush output. */ #define SSHMO_VSWTCH 16 /* Switch to a different shell layer. */ #define SSHMO_VSTATUS 17 /* Prints system status line (load, command, * pid, etc). */ #define SSHMO_VDISCARD 18 /* Toggles the flushing of terminal output. */ #define SSHMO_IGNPAR 30 /* The ignore parity flag. The parameter * SHOULD be 0 if this flag is FALSE, * and 1 if it is TRUE. */ #define SSHMO_PARMRK 31 /* Mark parity and framing errors. */ #define SSHMO_INPCK 32 /* Enable checking of parity errors. */ #define SSHMO_ISTRIP 33 /* Strip 8th bit off characters. */ #define SSHMO_INLCR 34 /* Map NL into CR on input. */ #define SSHMO_IGNCR 35 /* Ignore CR on input. */ #define SSHMO_ICRNL 36 /* Map CR to NL on input. */ #define SSHMO_IUCLC 37 /* Translate uppercase characters to lowercase. */ #define SSHMO_IXON 38 /* Enable output flow control. */ #define SSHMO_IXANY 39 /* Any char will restart after stop. */ #define SSHMO_IXOFF 40 /* Enable input flow control. */ #define SSHMO_IMAXBEL 41 /* Ring bell on input queue full. */ #define SSHMO_ISIG 50 /* Enable signals INTR, QUIT, [D]SUSP. */ #define SSHMO_ICANON 51 /* Canonicalize input lines. */ #define SSHMO_XCASE 52 /* Enable input and output of uppercase * characters by preceding their lowercase * equivalents with "\". */ #define SSHMO_ECHO 53 /* Enable echoing. */ #define SSHMO_ECHOE 54 /* Visually erase chars. */ #define SSHMO_ECHOK 55 /* Kill character discards current line. */ #define SSHMO_ECHONL 56 /* Echo NL even if ECHO is off. */ #define SSHMO_NOFLSH 57 /* Don't flush after interrupt. */ #define SSHMO_TOSTOP 58 /* Stop background jobs from output. */ #define SSHMO_IEXTEN 59 /* Enable extensions. */ #define SSHMO_ECHOCTL 60 /* Echo control characters as ^(Char). */ #define SSHMO_ECHOKE 61 /* Visual erase for line kill. */ #define SSHMO_PENDIN 62 /* Retype pending input. */ #define SSHMO_OPOST 70 /* Enable output processing. */ #define SSHMO_OLCUC 71 /* Convert lowercase to uppercase. */ #define SSHMO_ONLCR 72 /* Map NL to CR-NL. */ #define SSHMO_OCRNL 73 /* Translate carriage return to newline (out). */ #define SSHMO_ONOCR 74 /* Translate newline to CR-newline (out). */ #define SSHMO_ONLRET 75 /* Newline performs a carriage return (out). */ #define SSHMO_CS7 90 /* 7 bit mode. */ #define SSHMO_CS8 91 /* 8 bit mode. */ #define SSHMO_PARENB 92 /* Parity enable. */ #define SSHMO_PARODD 93 /* Odd parity, else even. */ #define SSHMO_TTY_OP_ISPEED 128 /* Specifies the input baud rate in * bits per second. */ #define SSHMO_TTY_OP_OSPEED 129 /* Specifies the output baud rate in * bits per second. */ /*! \defgroup ssh-base plugin: lws-ssh-base * \ingroup Protocols-and-Plugins * * ##Plugin lws-ssh-base * * This is the interface to customize the ssh server per-vhost. A pointer * to your struct lws_ssh_ops with the members initialized is passed in using * pvo when you create the vhost. The pvo is attached to the protocol name * * - "lws-ssh-base" - the ssh serving part * * - "lws-telnetd-base" - the telnet serving part * * This way you can have different instances of ssh servers wired up to * different IO and server keys per-vhost. * * See also ./READMEs/README-plugin-sshd-base.md */ ///@{ typedef void (*lws_ssh_finish_exec)(void *handle, int retcode); struct lws_ssh_ops { /** * channel_create() - Channel created * * \param wsi: raw wsi representing this connection * \param priv: pointer to void * you can allocate and attach to the * channel * * Called when new channel created, *priv should be set to any * allocation your implementation needs * * You probably want to save the wsi inside your priv struct. Calling * lws_callback_on_writable() on this wsi causes your ssh server * instance to call .tx_waiting() next time you can write something * to the client. */ int (*channel_create)(struct lws *wsi, void **priv); /** * channel_destroy() - Channel is being destroyed * * \param priv: void * you set when channel was created (or NULL) * * Called when channel destroyed, priv should be freed if you allocated * into it. */ int (*channel_destroy)(void *priv); /** * rx() - receive payload from peer * * \param priv: void * you set when this channel was created * \param wsi: struct lws * for the ssh connection * \param buf: pointer to start of received data * \param len: bytes of received data available at buf * * len bytes of payload from the peer arrived and is available at buf */ int (*rx)(void *priv, struct lws *wsi, const uint8_t *buf, uint32_t len); /** * tx_waiting() - report if data waiting to transmit on the channel * * \param priv: void * you set when this channel was created * * returns a bitmask of LWS_STDOUT and LWS_STDERR, with the bits set * if they have tx waiting to send, else 0 if nothing to send * * You should use one of the lws_callback_on_writable() family to * trigger the ssh protocol to ask if you have any tx waiting. * * Returning -1 from here will close the tcp connection to the client. */ int (*tx_waiting)(void *priv); /** * tx() - provide data to send on the channel * * \param priv: void * you set when this channel was created * \param stdch: LWS_STDOUT or LWS_STDERR * \param buf: start of the buffer to copy the transmit data into * \param len: max length of the buffer in bytes * * copy and consume up to len bytes into *buf, * return the actual copied count. * * You should use one of the lws_callback_on_writable() family to * trigger the ssh protocol to ask if you have any tx waiting. If you * do you will get calls here to fetch it, for each of LWS_STDOUT or * LWS_STDERR that were reported to be waiting by tx_waiting(). */ size_t (*tx)(void *priv, int stdch, uint8_t *buf, size_t len); /** * get_server_key() - retreive the secret keypair for this server * * \param wsi: the wsi representing the connection to the client * \param buf: start of the buffer to copy the keypair into * \param len: length of the buffer in bytes * * load the server key into buf, max len len. Returns length of buf * set to key, or 0 if no key or other error. If there is no key, * the error isn't fatal... the plugin will generate a random key and * store it using *get_server_key() for subsequent times. */ size_t (*get_server_key)(struct lws *wsi, uint8_t *buf, size_t len); /** * set_server_key() - store the secret keypair of this server * * \param wsi: the wsi representing the connection to the client * \param buf: start of the buffer containing the keypair * \param len: length of the keypair in bytes * * store the server key in buf, length len, to nonvolatile stg. * Return length stored, 0 for fail. */ size_t (*set_server_key)(struct lws *wsi, uint8_t *buf, size_t len); /** * set_env() - Set environment variable * * \param priv: void * you set when this channel was created * \param name: env var name * \param value: value to set env var to * * Client requested to set environment var. Return nonzero to fail. */ int (*set_env)(void *priv, const char *name, const char *value); /** * exec() - spawn command and wire up stdin/out/err to ssh channel * * \param priv: void * you set when this channel was created * \param wsi: the struct lws the connection belongs to * \param command: string containing path to app and arguments * \param finish: function to call to indicate the exec finished * \param finish_handle: opaque handle identifying this exec for use with \p finish * * Client requested to exec something. Return nonzero to fail. */ int (*exec)(void *priv, struct lws *wsi, const char *command, lws_ssh_finish_exec finish, void *finish_handle); /** * shell() - Spawn shell that is appropriate for user * * \param priv: void * you set when this channel was created * \param wsi: the struct lws the connection belongs to * \param finish: function to call to indicate the exec finished * \param finish_handle: opaque handle identifying this exec for use with \p finish * * Spawn the appropriate shell for this user. Return 0 for OK * or nonzero to fail. */ int (*shell)(void *priv, struct lws *wsi, lws_ssh_finish_exec finish, void *finish_handle); /** * pty_req() - Create a Pseudo-TTY as described in pty * * \param priv: void * you set when this channel was created * \param pty: pointer to struct describing the desired pty * * Client requested a pty. Return nonzero to fail. */ int (*pty_req)(void *priv, struct lws_ssh_pty *pty); /** * child_process_io() - Child process has IO * * \param priv: void * you set when this channel was created * \param wsi: the struct lws the connection belongs to * \param args: information related to the cgi IO events * * Child process has IO */ int (*child_process_io)(void *priv, struct lws *wsi, struct lws_cgi_args *args); /** * child_process_io() - Child process has terminated * * \param priv: void * you set when this channel was created * \param wsi: the struct lws the connection belongs to * * Child process has terminated */ int (*child_process_terminated)(void *priv, struct lws *wsi); /** * disconnect_reason() - Optional notification why connection is lost * * \param reason: one of the SSH_DISCONNECT_ constants * \param desc: UTF-8 description of reason * \param desc_lang: RFC3066 language for description * * The remote peer may tell us why it's going to disconnect. Handling * this is optional. */ void (*disconnect_reason)(uint32_t reason, const char *desc, const char *desc_lang); /** * is_pubkey_authorized() - check if auth pubkey is valid for user * * \param username: username the key attempted to authenticate * \param type: "ssh-rsa" * \param peer: start of Public key peer used to authenticate * \param peer_len: length of Public key at peer * * We confirmed the client has the private key for this public key... * but is that keypair something authorized for this username on this * server? 0 = OK, 1 = fail * * Normally this checks for a copy of the same public key stored * somewhere out of band, it's the same procedure as openssh does * when looking in ~/.ssh/authorized_keys */ int (*is_pubkey_authorized)(const char *username, const char *type, const uint8_t *peer, int peer_len); /** * banner() - copy the connection banner to buffer * * \param buf: start of the buffer to copy to * \param max_len: maximum number of bytes the buffer can hold * \param lang: start of the buffer to copy language descriptor to * \param max_lang_len: maximum number of bytes lang can hold * * Copy the text banner to be returned to client on connect, * before auth, into buf. The text should be in UTF-8. * if none wanted then leave .banner as NULL. * * lang should have a RFC3066 language descriptor like "en/US" * copied to it. * * Returns the number of bytes copies to buf. */ size_t (*banner)(char *buf, size_t max_len, char *lang, size_t max_lang_len); /** * SSH version string sent to client (required) * By convention a string like "SSH-2.0-Libwebsockets" */ const char *server_string; /** * set to the API version you support (current is in * LWS_SSH_OPS_VERSION) You should set it to an integer like 1, * that reflects the latest api at the time your code was written. If * the ops api_version is not equal to the LWS_SSH_OPS_VERSION of the * plugin, it will error out at runtime. */ char api_version; }; ///@} #endif libwebsockets-3.2.1/plugins/ssh-base/include/lws-plugin-sshd-static-build-includes.h000066400000000000000000000010621357643561300306010ustar00rootroot00000000000000/* * If you are including the plugin into your code using static build, you * can simplify it by just including this file, which will include all the * related code in one step without you having to get involved in the detail. */ #define LWS_PLUGIN_STATIC #include "../crypto/chacha.c" #include "../crypto/ed25519.c" #include "../crypto/fe25519.c" #include "../crypto/ge25519.c" #include "../crypto/poly1305.c" #include "../crypto/sc25519.c" #include "../crypto/smult_curve25519_ref.c" #include "../kex-25519.c" #include "../sshd.c" #include "../telnet.c" libwebsockets-3.2.1/plugins/ssh-base/include/lws-ssh.h000066400000000000000000000357711357643561300227710ustar00rootroot00000000000000/* * libwebsockets - lws-plugin-ssh-base * * Copyright (C) 2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #if !defined(__LWS_SSH_H__) #define __LWS_SSH_H__ #if defined(LWS_WITH_MBEDTLS) #include "mbedtls/sha1.h" #include "mbedtls/sha256.h" #include "mbedtls/sha512.h" #include "mbedtls/rsa.h" #endif #include "lws-plugin-ssh.h" #define LWS_SIZE_EC25519 32 #define LWS_SIZE_EC25519_PUBKEY 32 #define LWS_SIZE_EC25519_PRIKEY 64 #define LWS_SIZE_SHA256 32 #define LWS_SIZE_SHA512 64 #define LWS_SIZE_AES256_KEY 32 #define LWS_SIZE_AES256_IV 12 #define LWS_SIZE_AES256_MAC 16 #define LWS_SIZE_AES256_BLOCK 16 #define LWS_SIZE_CHACHA256_KEY (2 * 32) #define POLY1305_TAGLEN 16 #define POLY1305_KEYLEN 32 #define crypto_hash_sha512_BYTES 64U #define PEEK_U64(p) \ (((uint64_t)(((const uint8_t *)(p))[0]) << 56) | \ ((uint64_t)(((const uint8_t *)(p))[1]) << 48) | \ ((uint64_t)(((const uint8_t *)(p))[2]) << 40) | \ ((uint64_t)(((const uint8_t *)(p))[3]) << 32) | \ ((uint64_t)(((const uint8_t *)(p))[4]) << 24) | \ ((uint64_t)(((const uint8_t *)(p))[5]) << 16) | \ ((uint64_t)(((const uint8_t *)(p))[6]) << 8) | \ (uint64_t)(((const uint8_t *)(p))[7])) #define PEEK_U32(p) \ (((uint32_t)(((const uint8_t *)(p))[0]) << 24) | \ ((uint32_t)(((const uint8_t *)(p))[1]) << 16) | \ ((uint32_t)(((const uint8_t *)(p))[2]) << 8) | \ (uint32_t)(((const uint8_t *)(p))[3])) #define PEEK_U16(p) \ (((uint16_t)(((const uint8_t *)(p))[0]) << 8) | \ (uint16_t)(((const uint8_t *)(p))[1])) #define POKE_U64(p, v) \ do { \ const uint64_t __v = (v); \ ((uint8_t *)(p))[0] = (__v >> 56) & 0xff; \ ((uint8_t *)(p))[1] = (__v >> 48) & 0xff; \ ((uint8_t *)(p))[2] = (__v >> 40) & 0xff; \ ((uint8_t *)(p))[3] = (__v >> 32) & 0xff; \ ((uint8_t *)(p))[4] = (__v >> 24) & 0xff; \ ((uint8_t *)(p))[5] = (__v >> 16) & 0xff; \ ((uint8_t *)(p))[6] = (__v >> 8) & 0xff; \ ((uint8_t *)(p))[7] = __v & 0xff; \ } while (0) #define POKE_U32(p, v) \ do { \ const uint32_t __v = (v); \ ((uint8_t *)(p))[0] = (__v >> 24) & 0xff; \ ((uint8_t *)(p))[1] = (__v >> 16) & 0xff; \ ((uint8_t *)(p))[2] = (__v >> 8) & 0xff; \ ((uint8_t *)(p))[3] = __v & 0xff; \ } while (0) #define POKE_U16(p, v) \ do { \ const uint16_t __v = (v); \ ((uint8_t *)(p))[0] = (__v >> 8) & 0xff; \ ((uint8_t *)(p))[1] = __v & 0xff; \ } while (0) enum { SSH_MSG_DISCONNECT = 1, SSH_MSG_IGNORE = 2, SSH_MSG_UNIMPLEMENTED = 3, SSH_MSG_DEBUG = 4, SSH_MSG_SERVICE_REQUEST = 5, SSH_MSG_SERVICE_ACCEPT = 6, SSH_MSG_KEXINIT = 20, SSH_MSG_NEWKEYS = 21, /* 30 .. 49: KEX messages specific to KEX protocol */ SSH_MSG_KEX_ECDH_INIT = 30, SSH_MSG_KEX_ECDH_REPLY = 31, /* 50... userauth */ SSH_MSG_USERAUTH_REQUEST = 50, SSH_MSG_USERAUTH_FAILURE = 51, SSH_MSG_USERAUTH_SUCCESS = 52, SSH_MSG_USERAUTH_BANNER = 53, /* 60... publickey */ SSH_MSG_USERAUTH_PK_OK = 60, /* 80... connection */ SSH_MSG_GLOBAL_REQUEST = 80, SSH_MSG_REQUEST_SUCCESS = 81, SSH_MSG_REQUEST_FAILURE = 82, SSH_MSG_CHANNEL_OPEN = 90, SSH_MSG_CHANNEL_OPEN_CONFIRMATION = 91, SSH_MSG_CHANNEL_OPEN_FAILURE = 92, SSH_MSG_CHANNEL_WINDOW_ADJUST = 93, SSH_MSG_CHANNEL_DATA = 94, SSH_MSG_CHANNEL_EXTENDED_DATA = 95, SSH_MSG_CHANNEL_EOF = 96, SSH_MSG_CHANNEL_CLOSE = 97, SSH_MSG_CHANNEL_REQUEST = 98, SSH_MSG_CHANNEL_SUCCESS = 99, SSH_MSG_CHANNEL_FAILURE = 100, SSH_EXTENDED_DATA_STDERR = 1, SSH_CH_TYPE_SESSION = 1, SSH_CH_TYPE_SCP = 2, SSH_CH_TYPE_SFTP = 3, SSH_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT = 1, SSH_DISCONNECT_PROTOCOL_ERROR = 2, SSH_DISCONNECT_KEY_EXCHANGE_FAILED = 3, SSH_DISCONNECT_RESERVED = 4, SSH_DISCONNECT_MAC_ERROR = 5, SSH_DISCONNECT_COMPRESSION_ERROR = 6, SSH_DISCONNECT_SERVICE_NOT_AVAILABLE = 7, SSH_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED = 8, SSH_DISCONNECT_HOST_KEY_NOT_VERIFIABLE = 9, SSH_DISCONNECT_CONNECTION_LOST = 10, SSH_DISCONNECT_BY_APPLICATION = 11, SSH_DISCONNECT_TOO_MANY_CONNECTIONS = 12, SSH_DISCONNECT_AUTH_CANCELLED_BY_USER = 13, SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE = 14, SSH_DISCONNECT_ILLEGAL_USER_NAME = 15, SSH_OPEN_ADMINISTRATIVELY_PROHIBITED = 1, SSH_OPEN_CONNECT_FAILED = 2, SSH_OPEN_UNKNOWN_CHANNEL_TYPE = 3, SSH_OPEN_RESOURCE_SHORTAGE = 4, KEX_STATE_EXPECTING_CLIENT_OFFER = 0, KEX_STATE_REPLIED_TO_OFFER, KEX_STATE_CRYPTO_INITIALIZED, SSH_KEYIDX_IV = 0, SSH_KEYIDX_ENC, SSH_KEYIDX_INTEG, /* things we may write on the connection */ SSH_WT_NONE = 0, SSH_WT_VERSION, SSH_WT_OFFER, SSH_WT_OFFER_REPLY, SSH_WT_SEND_NEWKEYS, SSH_WT_UA_ACCEPT, SSH_WT_UA_FAILURE, SSH_WT_UA_BANNER, SSH_WT_UA_PK_OK, SSH_WT_UA_SUCCESS, SSH_WT_CH_OPEN_CONF, SSH_WT_CH_FAILURE, SSH_WT_CHRQ_SUCC, SSH_WT_CHRQ_FAILURE, SSH_WT_SCP_ACK_OKAY, SSH_WT_SCP_ACK_ERROR, SSH_WT_CH_CLOSE, SSH_WT_CH_EOF, SSH_WT_WINDOW_ADJUST, SSH_WT_EXIT_STATUS, /* RX parser states */ SSH_INITIALIZE_TRANSIENT = 0, SSHS_IDSTRING, SSHS_IDSTRING_CR, SSHS_MSG_LEN, SSHS_MSG_PADDING, SSHS_MSG_ID, SSH_KEX_STATE_COOKIE, SSH_KEX_NL_KEX_ALGS_LEN, SSH_KEX_NL_KEX_ALGS, SSH_KEX_NL_SHK_ALGS_LEN, SSH_KEX_NL_SHK_ALGS, SSH_KEX_NL_EACTS_ALGS_LEN, SSH_KEX_NL_EACTS_ALGS, SSH_KEX_NL_EASTC_ALGS_LEN, SSH_KEX_NL_EASTC_ALGS, SSH_KEX_NL_MACTS_ALGS_LEN, SSH_KEX_NL_MACTS_ALGS, SSH_KEX_NL_MASTC_ALGS_LEN, SSH_KEX_NL_MASTC_ALGS, SSH_KEX_NL_CACTS_ALGS_LEN, SSH_KEX_NL_CACTS_ALGS, SSH_KEX_NL_CASTC_ALGS_LEN, SSH_KEX_NL_CASTC_ALGS, SSH_KEX_NL_LCTS_ALGS_LEN, SSH_KEX_NL_LCTS_ALGS, SSH_KEX_NL_LSTC_ALGS_LEN, SSH_KEX_NL_LSTC_ALGS, SSH_KEX_FIRST_PKT, SSH_KEX_RESERVED, SSH_KEX_STATE_ECDH_KEYLEN, SSH_KEX_STATE_ECDH_Q_C, SSHS_MSG_EAT_PADDING, SSH_KEX_STATE_SKIP, SSHS_GET_STRING_LEN, SSHS_GET_STRING, SSHS_GET_STRING_LEN_ALLOC, SSHS_GET_STRING_ALLOC, SSHS_DO_SERVICE_REQUEST, SSHS_DO_UAR_SVC, SSHS_DO_UAR_PUBLICKEY, SSHS_NVC_DO_UAR_CHECK_PUBLICKEY, SSHS_DO_UAR_SIG_PRESENT, SSHS_NVC_DO_UAR_ALG, SSHS_NVC_DO_UAR_PUBKEY_BLOB, SSHS_NVC_DO_UAR_SIG, SSHS_GET_U32, SSHS_NVC_CHOPEN_TYPE, SSHS_NVC_CHOPEN_SENDER_CH, SSHS_NVC_CHOPEN_WINSIZE, SSHS_NVC_CHOPEN_PKTSIZE, SSHS_NVC_CHRQ_RECIP, SSHS_NVC_CHRQ_TYPE, SSHS_CHRQ_WANT_REPLY, SSHS_NVC_CHRQ_TERM, SSHS_NVC_CHRQ_TW, SSHS_NVC_CHRQ_TH, SSHS_NVC_CHRQ_TWP, SSHS_NVC_CHRQ_THP, SSHS_NVC_CHRQ_MODES, SSHS_NVC_CHRQ_ENV_NAME, SSHS_NVC_CHRQ_ENV_VALUE, SSHS_NVC_CHRQ_EXEC_CMD, SSHS_NVC_CHRQ_SUBSYSTEM, SSHS_NVC_CH_EOF, SSHS_NVC_CH_CLOSE, SSHS_NVC_CD_RECIP, SSHS_NVC_CD_DATA, SSHS_NVC_CD_DATA_ALLOC, SSHS_NVC_WA_RECIP, SSHS_NVC_WA_ADD, SSHS_NVC_DISCONNECT_REASON, SSHS_NVC_DISCONNECT_DESC, SSHS_NVC_DISCONNECT_LANG, SSHS_SCP_COLLECTSTR = 0, SSHS_SCP_PAYLOADIN = 1, /* from https://tools.ietf.org/html/draft-ietf-secsh-filexfer-13 */ SECSH_FILEXFER_VERSION = 6, /* sftp packet types */ SSH_FXP_INIT = 1, SSH_FXP_VERSION = 2, SSH_FXP_OPEN = 3, SSH_FXP_CLOSE = 4, SSH_FXP_READ = 5, SSH_FXP_WRITE = 6, SSH_FXP_LSTAT = 7, SSH_FXP_FSTAT = 8, SSH_FXP_SETSTAT = 9, SSH_FXP_FSETSTAT = 10, SSH_FXP_OPENDIR = 11, SSH_FXP_READDIR = 12, SSH_FXP_REMOVE = 13, SSH_FXP_MKDIR = 14, SSH_FXP_RMDIR = 15, SSH_FXP_REALPATH = 16, SSH_FXP_STAT = 17, SSH_FXP_RENAME = 18, SSH_FXP_READLINK = 19, SSH_FXP_LINK = 21, SSH_FXP_BLOCK = 22, SSH_FXP_UNBLOCK = 23, SSH_FXP_STATUS = 101, SSH_FXP_HANDLE = 102, SSH_FXP_DATA = 103, SSH_FXP_NAME = 104, SSH_FXP_ATTRS = 105, SSH_FXP_EXTENDED = 200, SSH_FXP_EXTENDED_REPLY = 201, /* sftp return codes */ SSH_FX_OK = 0, SSH_FX_EOF = 1, SSH_FX_NO_SUCH_FILE = 2, SSH_FX_PERMISSION_DENIED = 3, SSH_FX_FAILURE = 4, SSH_FX_BAD_MESSAGE = 5, SSH_FX_NO_CONNECTION = 6, SSH_FX_CONNECTION_LOST = 7, SSH_FX_OP_UNSUPPORTED = 8, SSH_FX_INVALID_HANDLE = 9, SSH_FX_NO_SUCH_PATH = 10, SSH_FX_FILE_ALREADY_EXISTS = 11, SSH_FX_WRITE_PROTECT = 12, SSH_FX_NO_MEDIA = 13, SSH_FX_NO_SPACE_ON_FILESYSTEM = 14, SSH_FX_QUOTA_EXCEEDED = 15, SSH_FX_UNKNOWN_PRINCIPAL = 16, SSH_FX_LOCK_CONFLICT = 17, SSH_FX_DIR_NOT_EMPTY = 18, SSH_FX_NOT_A_DIRECTORY = 19, SSH_FX_INVALID_FILENAME = 20, SSH_FX_LINK_LOOP = 21, SSH_FX_CANNOT_DELETE = 22, SSH_FX_INVALID_PARAMETER = 23, SSH_FX_FILE_IS_A_DIRECTORY = 24, SSH_FX_BYTE_RANGE_LOCK_CONFLICT = 25, SSH_FX_BYTE_RANGE_LOCK_REFUSED = 26, SSH_FX_DELETE_PENDING = 27, SSH_FX_FILE_CORRUPT = 28, SSH_FX_OWNER_INVALID = 29, SSH_FX_GROUP_INVALID = 30, SSH_FX_NO_MATCHING_BYTE_RANGE_LOCK = 31, SSH_PENDING_TIMEOUT_CONNECT_TO_SUCCESSFUL_AUTH = PENDING_TIMEOUT_USER_REASON_BASE + 0, SSH_AUTH_STATE_NO_AUTH = 0, SSH_AUTH_STATE_GAVE_AUTH_IGNORE_REQS = 1, }; #define LWS_SSH_INITIAL_WINDOW 16384 struct lws_ssh_userauth { struct lws_genhash_ctx hash_ctx; char *username; char *service; char *alg; uint8_t *pubkey; uint32_t pubkey_len; uint8_t *sig; uint32_t sig_len; char sig_present; }; struct lws_ssh_keys { /* 3 == SSH_KEYIDX_IV (len=4), SSH_KEYIDX_ENC, SSH_KEYIDX_INTEG */ uint8_t key[3][LWS_SIZE_CHACHA256_KEY]; /* opaque allocation made when cipher activated */ void *cipher; uint8_t MAC_length; uint8_t padding_alignment; /* block size */ uint8_t valid:1; uint8_t full_length:1; }; struct lws_kex { uint8_t kex_r[256]; uint8_t Q_C[LWS_SIZE_EC25519]; /* client eph public key aka 'e' */ uint8_t eph_pri_key[LWS_SIZE_EC25519]; /* server eph private key */ uint8_t Q_S[LWS_SIZE_EC25519]; /* server ephemeral public key */ uint8_t kex_cookie[16]; uint8_t *I_C; /* malloc'd copy of client KEXINIT payload */ uint8_t *I_S; /* malloc'd copy of server KEXINIT payload */ uint32_t I_C_payload_len; uint32_t I_C_alloc_len; uint32_t I_S_payload_len; uint32_t kex_r_len; uint8_t match_bitfield; uint8_t newkeys; /* which sides newkeys have been applied */ struct lws_ssh_keys keys_next_cts; struct lws_ssh_keys keys_next_stc; }; struct lws_subprotocol_scp { char fp[128]; uint64_t len; uint32_t attr; char cmd; char ips; }; typedef union { struct lws_subprotocol_scp scp; } lws_subprotocol; struct per_session_data__sshd; struct lws_ssh_channel { struct lws_ssh_channel *next; struct per_session_data__sshd *pss; lws_subprotocol *sub; /* NULL, or allocated subprotocol state */ void *priv; /* owned by user code */ int type; uint32_t server_ch; uint32_t sender_ch; int32_t window; int32_t peer_window_est; uint32_t max_pkt; uint32_t spawn_pid; int retcode; uint8_t scheduled_close:1; uint8_t sent_close:1; uint8_t received_close:1; }; struct per_vhost_data__sshd; struct per_session_data__sshd { struct per_session_data__sshd *next; struct per_vhost_data__sshd *vhd; struct lws *wsi; struct lws_kex *kex; char *disconnect_desc; uint8_t K[LWS_SIZE_EC25519]; /* shared secret */ uint8_t session_id[LWS_SIZE_SHA256]; /* H from first working KEX */ char name[64]; char last_auth_req_username[32]; char last_auth_req_service[32]; struct lws_ssh_keys active_keys_cts; struct lws_ssh_keys active_keys_stc; struct lws_ssh_userauth *ua; struct lws_ssh_channel *ch_list; struct lws_ssh_channel *ch_temp; uint8_t *last_alloc; union { struct lws_ssh_pty pty; char aux[64]; } args; uint32_t ssh_sequence_ctr_cts; uint32_t ssh_sequence_ctr_stc; uint64_t payload_bytes_cts; uint64_t payload_bytes_stc; uint32_t disconnect_reason; char V_C[64]; /* Client version String */ uint8_t packet_assembly[2048]; uint32_t pa_pos; uint32_t msg_len; uint32_t pos; uint32_t len; uint32_t ctr; uint32_t npos; uint32_t reason; uint32_t channel_doing_spawn; int next_ch_num; uint8_t K_S[LWS_SIZE_EC25519]; /* server public key */ uint32_t copy_to_I_C:1; uint32_t okayed_userauth:1; uint32_t sent_banner:1; uint32_t seen_auth_req_before:1; uint32_t serviced_stderr_last:1; uint32_t kex_state; uint32_t chrq_server_port; uint32_t ch_recip; uint32_t count_auth_attempts; char parser_state; char state_after_string; char first_coming; uint8_t rq_want_reply; uint8_t ssh_auth_state; uint8_t msg_id; uint8_t msg_padding; uint8_t write_task[8]; struct lws_ssh_channel *write_channel[8]; uint8_t wt_head, wt_tail; }; struct per_vhost_data__sshd { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__sshd *live_pss_list; const struct lws_ssh_ops *ops; }; struct host_keys { uint8_t *data; uint32_t len; }; extern struct host_keys host_keys[]; extern int crypto_scalarmult_curve25519(unsigned char *q, const unsigned char *n, const unsigned char *p); extern int ed25519_key_parse(uint8_t *p, size_t len, char *type, size_t type_len, uint8_t *pub, uint8_t *pri); extern int kex_ecdh(struct per_session_data__sshd *pss, uint8_t *result, uint32_t *plen); extern uint32_t lws_g32(uint8_t **p); extern uint32_t lws_p32(uint8_t *p, uint32_t v); extern int lws_timingsafe_bcmp(const void *a, const void *b, uint32_t len); extern const char *lws_V_S; extern int lws_chacha_activate(struct lws_ssh_keys *keys); extern void lws_chacha_destroy(struct lws_ssh_keys *keys); extern uint32_t lws_chachapoly_get_length(struct lws_ssh_keys *keys, uint32_t seq, const uint8_t *in4); extern void poly1305_auth(u_char out[POLY1305_TAGLEN], const u_char *m, size_t inlen, const u_char key[POLY1305_KEYLEN]); extern int lws_chacha_decrypt(struct lws_ssh_keys *keys, uint32_t seq, const uint8_t *ct, uint32_t len, uint8_t *pt); extern int lws_chacha_encrypt(struct lws_ssh_keys *keys, uint32_t seq, const uint8_t *ct, uint32_t len, uint8_t *pt); extern void lws_pad_set_length(struct per_session_data__sshd *pss, void *start, uint8_t **p, struct lws_ssh_keys *keys); extern size_t get_gen_server_key_25519(struct per_session_data__sshd *pss, uint8_t *b, size_t len); extern int crypto_sign_ed25519(unsigned char *sm, unsigned long long *smlen, const unsigned char *m, size_t mlen, const unsigned char *sk); extern int crypto_sign_ed25519_keypair(struct lws_context *context, uint8_t *pk, uint8_t *sk); #endif libwebsockets-3.2.1/plugins/ssh-base/kex-25519.c000066400000000000000000000334041357643561300212020ustar00rootroot00000000000000/* * libwebsockets - lws-plugin-ssh-base - kex-25519.c * * Copyright (C) 2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "libwebsockets.h" #include "lws-ssh.h" #include /* * ssh-keygen -t ed25519 * head -n-1 srv-key-25519 | tail -n +2 | base64 -d | hexdump -C */ static void lws_sized_blob(uint8_t **p, void *blob, uint32_t len) { lws_p32((*p), len); *p += 4; memcpy(*p, blob, len); *p += len; } static const char key_leadin[] = "openssh-key-v1\x00\x00\x00\x00\x04none" "\x00\x00\x00\x04none\x00" "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x33" "\x00\x00\x00\x0bssh-ed25519\x00\x00\x00\x20", key_sep[] = "\x00\x00\x00\x90\xb1\x4f\xa7\x28" "\xb1\x4f\xa7\x28\x00\x00\x00\x0bssh-ed25519" "\x00\x00\x00\x20", key_privl[] = "\x00\x00\x00\x40", key_trail[] = "\x00\x00\x00\x0cself-gen@cbl\x01"; static size_t lws_gen_server_key_ed25519(struct lws_context *context, uint8_t *buf256, size_t max_len) { uint8_t *p = buf256 + sizeof(key_leadin) - 1; if (max_len < sizeof(key_leadin) - 1 + 32 + sizeof(key_sep) - 1 + 32 + sizeof(key_privl) - 1 + 64 + sizeof(key_trail) - 1) return 0; memcpy(buf256, key_leadin, sizeof(key_leadin) - 1); crypto_sign_ed25519_keypair(context, p, p + 32 + sizeof(key_sep) - 1 + 32 + sizeof(key_privl) - 1); memcpy(p + 32 + sizeof(key_sep) - 1, p, 32); p += 32; memcpy(p, key_sep, sizeof(key_sep) - 1); p += sizeof(key_sep) - 1 + 32; memcpy(p, key_privl, sizeof(key_privl) - 1); p += sizeof(key_privl) - 1 + 64; memcpy(p, key_trail, sizeof(key_trail) - 1); p += sizeof(key_trail) - 1; lwsl_notice("%s: Generated key len %ld\n", __func__, (long)(p - buf256)); return p - buf256; } static int lws_mpint_rfc4251(uint8_t *dest, const uint8_t *src, int bytes, int uns) { uint8_t *odest = dest; while (!*src && bytes > 1) { src++; bytes--; } if (!*src) { *dest++ = 0; *dest++ = 0; *dest++ = 0; *dest++ = 0; return 4; } if (uns && (*src) & 0x80) bytes++; *dest++ = bytes >> 24; *dest++ = bytes >> 16; *dest++ = bytes >> 8; *dest++ = bytes; if (uns && (*src) & 0x80) { *dest++ = 0; bytes--; } while (bytes--) *dest++ = *src++; return lws_ptr_diff(dest, odest); } int ed25519_key_parse(uint8_t *p, size_t len, char *type, size_t type_len, uint8_t *pub, uint8_t *pri) { uint32_t l, publ, m; uint8_t *op = p; if (len < 180) return 1; if (memcmp(p, "openssh-key-v1", 14)) return 2; p += 15; l = lws_g32(&p); /* ciphername */ if (l != 4 || memcmp(p, "none", 4)) return 3; p += l; l = lws_g32(&p); /* kdfname */ if (l != 4 || memcmp(p, "none", 4)) return 4; p += l; l = lws_g32(&p); /* kdfoptions */ if (l) return 5; l = lws_g32(&p); /* number of keys */ if (l != 1) return 6; publ = lws_g32(&p); /* length of pubkey block */ if ((size_t)((p - op) + publ) >= len) return 7; l = lws_g32(&p); /* key type length */ if (l > 31) return 8; m = l; if (m >= type_len) m = (uint32_t)type_len -1 ; lws_strncpy(type, (const char *)p, m + 1); p += l; l = lws_g32(&p); /* pub key length */ if (l != 32) return 10; p += l; publ = lws_g32(&p); /* length of private key block */ if ((size_t)((p - op) + publ) != len) return 11; l = lws_g32(&p); /* checkint 1 */ if (lws_g32(&p) != l) /* must match checkint 2 */ return 12; l = lws_g32(&p); /* key type length */ p += l; l = lws_g32(&p); /* public key part length */ if (l != LWS_SIZE_EC25519_PUBKEY) return 15; if (pub) memcpy(pub, p, LWS_SIZE_EC25519_PUBKEY); p += l; l = lws_g32(&p); /* private key part length */ if (l != LWS_SIZE_EC25519_PRIKEY) return 16; if (pri) memcpy(pri, p, LWS_SIZE_EC25519_PRIKEY); return 0; } static int _genhash_update_len(struct lws_genhash_ctx *ctx, const void *input, size_t ilen) { uint32_t be; lws_p32((uint8_t *)&be, (uint32_t)ilen); if (lws_genhash_update(ctx, (uint8_t *)&be, 4)) return 1; if (lws_genhash_update(ctx, input, ilen)) return 1; return 0; } static int kex_ecdh_dv(uint8_t *dest, int dest_len, const uint8_t *kbi, int kbi_len, const uint8_t *H, char c, const uint8_t *session_id) { uint8_t pool[LWS_SIZE_SHA256]; struct lws_genhash_ctx ctx; int n = 0, m; /* * Key data MUST be taken from the beginning of the hash output. * As many bytes as needed are taken from the beginning of the hash * value. * * If the key length needed is longer than the output of the HASH, * the key is extended by computing HASH of the concatenation of K * and H and the entire key so far, and appending the resulting * bytes (as many as HASH generates) to the key. This process is * repeated until enough key material is available; the key is taken * from the beginning of this value. In other words: * * K1 = HASH(K || H || X || session_id) (X is e.g., "A") * K2 = HASH(K || H || K1) * K3 = HASH(K || H || K1 || K2) * ... * key = K1 || K2 || K3 || ... */ while (n < dest_len) { if (lws_genhash_init(&ctx, LWS_GENHASH_TYPE_SHA256)) return 1; if (lws_genhash_update(&ctx, kbi, kbi_len)) goto hash_failed; if (lws_genhash_update(&ctx, H, LWS_SIZE_SHA256)) goto hash_failed; if (!n) { if (lws_genhash_update(&ctx, (void *)&c, 1)) goto hash_failed; if (lws_genhash_update(&ctx, session_id, LWS_SIZE_EC25519)) goto hash_failed; } else if (lws_genhash_update(&ctx, pool, LWS_SIZE_EC25519)) goto hash_failed; lws_genhash_destroy(&ctx, pool); m = LWS_SIZE_EC25519; if (m > (dest_len - n)) m = dest_len - n; memcpy(dest, pool, m); n += m; dest += m; } return 0; hash_failed: lws_genhash_destroy(&ctx, NULL); return 1; } static const unsigned char basepoint[32] = { 9 }; size_t get_gen_server_key_25519(struct per_session_data__sshd *pss, uint8_t *b, size_t len) { size_t s, mylen; mylen = pss->vhd->ops->get_server_key(pss->wsi, b, len); if (mylen) return mylen; /* create one then */ lwsl_notice("Generating server hostkey\n"); s = lws_gen_server_key_ed25519(pss->vhd->context, b, len); lwsl_notice(" gen key len %ld\n", (long)s); if (!s) return 0; /* set the key */ if (!pss->vhd->ops->set_server_key(pss->wsi, b, s)) return 0; /* new key stored OK */ return s; } int kex_ecdh(struct per_session_data__sshd *pss, uint8_t *reply, uint32_t *plen) { uint8_t pri_key[64], temp[64], payload_sig[64 + 32], a, *lp, kbi[64]; struct lws_kex *kex = pss->kex; struct lws_genhash_ctx ctx; unsigned long long smlen; uint8_t *p = reply + 5; uint32_t be, kbi_len; uint8_t servkey[256]; char keyt[33]; int r, c; r = (int)get_gen_server_key_25519(pss, servkey, (int)sizeof(servkey)); if (!r) { lwsl_err("%s: Failed to get or gen server key\n", __func__); return 1; } r = ed25519_key_parse(servkey, r, keyt, sizeof(keyt), pss->K_S /* public key */, pri_key); if (r) { lwsl_notice("%s: server key parse failed: %d\n", __func__, r); return 1; } keyt[32] = '\0'; lwsl_info("Server key type: %s\n", keyt); /* * 1) Generate ephemeral key pair [ eph_pri_key | kex->Q_S ] * 2) Compute shared secret. * 3) Generate and sign exchange hash. * * 1) A 32 bytes private key should be generated for each new * connection, using a secure PRNG. The following actions * must be done on the private key: * * mysecret[0] &= 248; * mysecret[31] &= 127; * mysecret[31] |= 64; */ lws_get_random(pss->vhd->context, kex->eph_pri_key, LWS_SIZE_EC25519); kex->eph_pri_key[0] &= 248; kex->eph_pri_key[31] &= 127; kex->eph_pri_key[31] |= 64; /* * 2) The public key is calculated using the cryptographic scalar * multiplication: * * const unsigned char privkey[32]; * unsigned char pubkey[32]; * * crypto_scalarmult (pubkey, privkey, basepoint); */ crypto_scalarmult_curve25519(kex->Q_S, kex->eph_pri_key, basepoint); a = 0; for (r = 0; r < (int)sizeof(kex->Q_S); r++) a |= kex->Q_S[r]; if (!a) { lwsl_notice("all zero pubkey\n"); return SSH_DISCONNECT_KEY_EXCHANGE_FAILED; } /* * The shared secret, k, is defined in SSH specifications to be a big * integer. This number is calculated using the following procedure: * * X is the 32 bytes point obtained by the scalar multiplication of * the other side's public key and the local private key scalar. */ crypto_scalarmult_curve25519(pss->K, kex->eph_pri_key, kex->Q_C); /* * The whole 32 bytes of the number X are then converted into a big * integer k. This conversion follows the network byte order. This * step differs from RFC5656. */ kbi_len = lws_mpint_rfc4251(kbi, pss->K, LWS_SIZE_EC25519, 1); /* * The exchange hash H is computed as the hash of the concatenation of * the following: * * string V_C, the client's identification string (CR and LF * excluded) * string V_S, the server's identification string (CR and LF * excluded) * string I_C, the payload of the client's SSH_MSG_KEXINIT * string I_S, the payload of the server's SSH_MSG_KEXINIT * string K_S, the host key * mpint Q_C, exchange value sent by the client * mpint Q_S, exchange value sent by the server * mpint K, the shared secret * * However there are a lot of unwritten details in the hash * definition... */ if (lws_genhash_init(&ctx, LWS_GENHASH_TYPE_SHA256)) { lwsl_notice("genhash init failed\n"); return 1; } if (_genhash_update_len(&ctx, pss->V_C, strlen(pss->V_C))) goto hash_probs; if (_genhash_update_len(&ctx, pss->vhd->ops->server_string, /* aka V_S */ strlen(pss->vhd->ops->server_string))) goto hash_probs; if (_genhash_update_len(&ctx, kex->I_C, kex->I_C_payload_len)) goto hash_probs; if (_genhash_update_len(&ctx, kex->I_S, kex->I_S_payload_len)) goto hash_probs; /* * K_S (host public key) * * sum of name + key lengths and headers * name length: name * key length: key * ---> */ lws_p32((uint8_t *)&be, 8 + (int)strlen(keyt) + LWS_SIZE_EC25519); if (lws_genhash_update(&ctx, (void *)&be, 4)) goto hash_probs; if (_genhash_update_len(&ctx, keyt, strlen(keyt))) goto hash_probs; if (_genhash_update_len(&ctx, pss->K_S, LWS_SIZE_EC25519)) goto hash_probs; /* <---- */ if (_genhash_update_len(&ctx, kex->Q_C, LWS_SIZE_EC25519)) goto hash_probs; if (_genhash_update_len(&ctx, kex->Q_S, LWS_SIZE_EC25519)) goto hash_probs; if (lws_genhash_update(&ctx, kbi, kbi_len)) goto hash_probs; if (lws_genhash_destroy(&ctx, temp)) goto hash_probs; /* * Sign the 32-byte SHA256 "exchange hash" in temp * The signature is itself 64 bytes */ smlen = LWS_SIZE_EC25519 + 64; if (crypto_sign_ed25519(payload_sig, &smlen, temp, LWS_SIZE_EC25519, pri_key)) return 1; #if 0 l = LWS_SIZE_EC25519; n = crypto_sign_ed25519_open(temp, &l, payload_sig, smlen, pss->K_S); lwsl_notice("own sig sanity check says %d\n", n); #endif /* sig [64] and payload [32] concatenated in payload_sig * * The server then responds with the following * * uint32 packet length (exl self + mac) * byte padding len * byte SSH_MSG_KEX_ECDH_REPLY * string server public host key and certificates (K_S) * string Q_S (exchange value sent by the server) * string signature of H * padding */ *p++ = SSH_MSG_KEX_ECDH_REPLY; /* server public host key and certificates (K_S) */ lp = p; p +=4; lws_sized_blob(&p, keyt, (int)strlen(keyt)); lws_sized_blob(&p, pss->K_S, LWS_SIZE_EC25519); lws_p32(lp, lws_ptr_diff(p, lp) - 4); /* Q_S (exchange value sent by the server) */ lws_sized_blob(&p, kex->Q_S, LWS_SIZE_EC25519); /* signature of H */ lp = p; p +=4; lws_sized_blob(&p, keyt, (int)strlen(keyt)); lws_sized_blob(&p, payload_sig, 64); lws_p32(lp, lws_ptr_diff(p, lp) - 4); /* end of message */ lws_pad_set_length(pss, reply, &p, &pss->active_keys_stc); *plen = lws_ptr_diff(p, reply); if (!pss->active_keys_stc.valid) memcpy(pss->session_id, temp, LWS_SIZE_EC25519); /* RFC4253 7.2: * * The key exchange produces two values: a shared secret K, * and an exchange hash H. Encryption and authentication * keys are derived from these. The exchange hash H from the * first key exchange is additionally used as the session * identifier, which is a unique identifier for this connection. * It is used by authentication methods as a part of the data * that is signed as a proof of possession of a private key. * Once computed, the session identifier is not changed, * even if keys are later re-exchanged. * * The hash alg used in the KEX must be used for key derivation. * * 1) Initial IV client to server: * * HASH(K || H || "A" || session_id) * * (Here K is encoded as mpint and "A" as byte and session_id * as raw data. "A" means the single character A, ASCII 65). * * */ for (c = 0; c < 3; c++) { kex_ecdh_dv(kex->keys_next_cts.key[c], LWS_SIZE_CHACHA256_KEY, kbi, kbi_len, temp, 'A' + (c * 2), pss->session_id); kex_ecdh_dv(kex->keys_next_stc.key[c], LWS_SIZE_CHACHA256_KEY, kbi, kbi_len, temp, 'B' + (c * 2), pss->session_id); } lws_explicit_bzero(temp, sizeof(temp)); return 0; hash_probs: lws_genhash_destroy(&ctx, NULL); return 1; } libwebsockets-3.2.1/plugins/ssh-base/sshd.c000066400000000000000000001720651357643561300207000ustar00rootroot00000000000000/* * libwebsockets - lws-plugin-ssh-base - sshd.c * * Copyright (C) 2017 - 2018 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "libwebsockets.h" #include "lws-ssh.h" #include #include void *sshd_zalloc(size_t s) { void *p = malloc(s); if (p) memset(p, 0, s); return p; } uint32_t lws_g32(uint8_t **p) { uint32_t v = 0; v = (v << 8) | *((*p)++); v = (v << 8) | *((*p)++); v = (v << 8) | *((*p)++); v = (v << 8) | *((*p)++); return v; } uint32_t lws_p32(uint8_t *p, uint32_t v) { *p++ = v >> 24; *p++ = v >> 16; *p++ = v >> 8; *p++ = v; return v; } int lws_cstr(uint8_t **p, const char *s, uint32_t max) { uint32_t n = (uint32_t)strlen(s); if (n > max) return 1; lws_p32(*p, n); *p += 4; strcpy((char *)(*p), s); *p += n; return 0; } int lws_buf(uint8_t **p, void *s, uint32_t len) { lws_p32(*p, len); *p += 4; memcpy((char *)(*p), s, len); *p += len; return 0; } void write_task(struct per_session_data__sshd *pss, struct lws_ssh_channel *ch, int task) { pss->write_task[pss->wt_head] = task; pss->write_channel[pss->wt_head] = ch; pss->wt_head = (pss->wt_head + 1) & 7; lws_callback_on_writable(pss->wsi); } void write_task_insert(struct per_session_data__sshd *pss, struct lws_ssh_channel *ch, int task) { pss->wt_tail = (pss->wt_tail - 1) & 7; pss->write_task[pss->wt_tail] = task; pss->write_channel[pss->wt_tail] = ch; lws_callback_on_writable(pss->wsi); } void lws_pad_set_length(struct per_session_data__sshd *pss, void *start, uint8_t **p, struct lws_ssh_keys *keys) { uint32_t len = lws_ptr_diff(*p, start); uint8_t padc = 4, *bs = start; if (keys->full_length) len -= 4; if ((len + padc) & (keys->padding_alignment - 1)) padc += keys->padding_alignment - ((len + padc) & (keys->padding_alignment - 1)); bs[4] = padc; len += padc; if (!keys->valid) /* no crypto = pad with 00 */ while (padc--) *((*p)++) = 0; else { /* crypto active = pad with random */ lws_get_random(pss->vhd->context, *p, padc); (*p) += padc; } if (keys->full_length) len += 4; lws_p32(start, len - 4); } static uint32_t offer(struct per_session_data__sshd *pss, uint8_t *p, uint32_t len, int first, int *payload_len) { uint8_t *op = p, *lp, *end = p + len - 1; int n, padc = 4, keylen; char keyt[32]; uint8_t keybuf[256]; keylen = (int)get_gen_server_key_25519(pss, keybuf, (int)sizeof(keybuf)); if (!keylen) { lwsl_notice("get_gen_server_key failed\n"); return 1; } lwsl_info("keylen %d\n", keylen); n = ed25519_key_parse(keybuf, keylen, keyt, sizeof(keyt), NULL, NULL); if (n) { lwsl_notice("unable to parse server key: %d\n", n); return 1; } /* * byte SSH_MSG_KEXINIT * byte[16] cookie (random bytes) * name-list kex_algorithms * name-list server_host_key_algorithms * name-list encryption_algorithms_client_to_server * name-list encryption_algorithms_server_to_client * name-list mac_algorithms_client_to_server * name-list mac_algorithms_server_to_client * name-list compression_algorithms_client_to_server * name-list compression_algorithms_server_to_client * name-list langua->es_client_to_server * name-list langua->es_server_to_client * boolean first_kex_packet_follows * uint32 0 (reserved for future extension) */ p += 5; /* msg len + padding */ *p++ = SSH_MSG_KEXINIT; lws_get_random(pss->vhd->context, p, 16); p += 16; /* KEX algorithms */ lp = p; p += 4; n = lws_snprintf((char *)p, end - p, "curve25519-sha256@libssh.org"); p += lws_p32(lp, n); /* Server Host Key Algorithms */ lp = p; p += 4; n = lws_snprintf((char *)p, end - p, "%s", keyt); p += lws_p32(lp, n); /* Encryption Algorithms: C -> S */ lp = p; p += 4; // n = lws_snprintf((char *)p, end - p, "aes256-gcm@openssh.com"); n = lws_snprintf((char *)p, end - p, "chacha20-poly1305@openssh.com"); p += lws_p32(lp, n); /* Encryption Algorithms: S -> C */ lp = p; p += 4; // n = lws_snprintf((char *)p, end - p, "aes256-gcm@openssh.com"); n = lws_snprintf((char *)p, end - p, "chacha20-poly1305@openssh.com"); p += lws_p32(lp, n); /* MAC Algorithms: C -> S */ lp = p; p += 4; /* bogus: chacha20 does not use MACs, but 'none' is not offered */ n = lws_snprintf((char *)p, end - p, "hmac-sha2-256"); p += lws_p32(lp, n); /* MAC Algorithms: S -> C */ lp = p; p += 4; /* bogus: chacha20 does not use MACs, but 'none' is not offered */ n = lws_snprintf((char *)p, end - p, "hmac-sha2-256"); p += lws_p32(lp, n); /* Compression Algorithms: C -> S */ lp = p; p += 4; n = lws_snprintf((char *)p, end - p, "none"); p += lws_p32(lp, n); /* Compression Algorithms: S -> C */ lp = p; p += 4; n = lws_snprintf((char *)p, end - p, "none"); p += lws_p32(lp, n); if (p - op < 13 + padc + 8) return 0; /* Languages: C -> S */ *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 0; /* Languages: S -> C */ *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 0; /* First KEX packet coming */ *p++ = !!first; /* Reserved */ *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 0; len = lws_ptr_diff(p, op); if (payload_len) /* starts at buf + 5 and excludes padding */ *payload_len = len - 5; /* we must give at least 4 bytes of 00 padding */ if ((len + padc) & 7) padc += 8 - ((len + padc) & 7); op[4] = padc; len += padc; while (padc--) *p++ = 0; /* recorded length does not include the uint32_t len itself */ lws_p32(op, len - 4); return len; } static int handle_name(struct per_session_data__sshd *pss) { struct lws_kex *kex = pss->kex; char keyt[32]; uint8_t keybuf[256]; int n = 0, len; switch (pss->parser_state) { case SSH_KEX_NL_KEX_ALGS: if (!strcmp(pss->name, "curve25519-sha256@libssh.org")) kex->match_bitfield |= 1; break; case SSH_KEX_NL_SHK_ALGS: len = (int)get_gen_server_key_25519(pss, keybuf, (int)sizeof(keybuf)); if (!len) break; if (ed25519_key_parse(keybuf, len, keyt, sizeof(keyt), NULL, NULL)) { lwsl_err("Unable to parse host key %d\n", n); } else { if (!strcmp(pss->name, keyt)) { kex->match_bitfield |= 2; break; } } break; case SSH_KEX_NL_EACTS_ALGS: if (!strcmp(pss->name, "chacha20-poly1305@openssh.com")) kex->match_bitfield |= 4; break; case SSH_KEX_NL_EASTC_ALGS: if (!strcmp(pss->name, "chacha20-poly1305@openssh.com")) kex->match_bitfield |= 8; break; case SSH_KEX_NL_MACTS_ALGS: if (!strcmp(pss->name, "hmac-sha2-256")) kex->match_bitfield |= 16; break; case SSH_KEX_NL_MASTC_ALGS: if (!strcmp(pss->name, "hmac-sha2-256")) kex->match_bitfield |= 32; break; case SSH_KEX_NL_CACTS_ALGS: if (!strcmp(pss->name, "none")) kex->match_bitfield |= 64; break; case SSH_KEX_NL_CASTC_ALGS: if (!strcmp(pss->name, "none")) kex->match_bitfield |= 128; break; case SSH_KEX_NL_LCTS_ALGS: case SSH_KEX_NL_LSTC_ALGS: break; default: break; } return 0; } static int lws_kex_create(struct per_session_data__sshd *pss) { pss->kex = sshd_zalloc(sizeof(struct lws_kex)); lwsl_info("%s\n", __func__); return !pss->kex; } static void lws_kex_destroy(struct per_session_data__sshd *pss) { if (!pss->kex) return; lwsl_info("Destroying KEX\n"); if (pss->kex->I_C) { free(pss->kex->I_C); pss->kex->I_C = NULL; } if (pss->kex->I_S) { free(pss->kex->I_S); pss->kex->I_S = NULL; } lws_explicit_bzero(pss->kex, sizeof(*pss->kex)); free(pss->kex); pss->kex = NULL; } static void ssh_free(void *p) { if (!p) return; lwsl_debug("%s: FREE %p\n", __func__, p); free(p); } #define ssh_free_set_NULL(x) if (x) { ssh_free(x); (x) = NULL; } static void lws_ua_destroy(struct per_session_data__sshd *pss) { if (!pss->ua) return; lwsl_info("%s\n", __func__); if (pss->ua->username) ssh_free(pss->ua->username); if (pss->ua->service) ssh_free(pss->ua->service); if (pss->ua->alg) ssh_free(pss->ua->alg); if (pss->ua->pubkey) ssh_free(pss->ua->pubkey); if (pss->ua->sig) { lws_explicit_bzero(pss->ua->sig, pss->ua->sig_len); ssh_free(pss->ua->sig); } lws_explicit_bzero(pss->ua, sizeof(*pss->ua)); free(pss->ua); pss->ua = NULL; } static int rsa_hash_alg_from_ident(const char *ident) { if (strcmp(ident, "ssh-rsa") == 0 || strcmp(ident, "ssh-rsa-cert-v01@openssh.com") == 0) return LWS_GENHASH_TYPE_SHA1; if (strcmp(ident, "rsa-sha2-256") == 0) return LWS_GENHASH_TYPE_SHA256; if (strcmp(ident, "rsa-sha2-512") == 0) return LWS_GENHASH_TYPE_SHA512; return -1; } static void state_get_string_alloc(struct per_session_data__sshd *pss, int next) { pss->parser_state = SSHS_GET_STRING_LEN_ALLOC; pss->state_after_string = next; } static void state_get_string(struct per_session_data__sshd *pss, int next) { pss->parser_state = SSHS_GET_STRING_LEN; pss->state_after_string = next; } static void state_get_u32(struct per_session_data__sshd *pss, int next) { pss->parser_state = SSHS_GET_U32; pss->state_after_string = next; } static struct lws_ssh_channel * ssh_get_server_ch(struct per_session_data__sshd *pss, uint32_t chi) { struct lws_ssh_channel *ch = pss->ch_list; while (ch) { if (ch->server_ch == chi) return ch; ch = ch->next; } return NULL; } #if 0 static struct lws_ssh_channel * ssh_get_peer_ch(struct per_session_data__sshd *pss, uint32_t chi) { struct lws_ssh_channel *ch = pss->ch_list; while (ch) { if (ch->sender_ch == chi) return ch; ch = ch->next; } return NULL; } #endif static void ssh_destroy_channel(struct per_session_data__sshd *pss, struct lws_ssh_channel *ch) { lws_start_foreach_llp(struct lws_ssh_channel **, ppch, pss->ch_list) { if (*ppch == ch) { lwsl_info("Deleting ch %p\n", ch); if (pss->vhd && pss->vhd->ops && pss->vhd->ops->channel_destroy) pss->vhd->ops->channel_destroy(ch->priv); *ppch = ch->next; if (ch->sub) free(ch->sub); free(ch); return; } } lws_end_foreach_llp(ppch, next); lwsl_notice("Failed to delete ch\n"); } static void lws_ssh_exec_finish(void *finish_handle, int retcode) { struct lws_ssh_channel *ch = (struct lws_ssh_channel *)finish_handle; struct per_session_data__sshd *pss = ch->pss; ch->retcode = retcode; write_task(pss, ch, SSH_WT_EXIT_STATUS); ch->scheduled_close = 1; write_task(pss, ch, SSH_WT_CH_CLOSE); } static int lws_ssh_parse_plaintext(struct per_session_data__sshd *pss, uint8_t *p, size_t len) { struct lws_gencrypto_keyelem e[LWS_GENCRYPTO_RSA_KEYEL_COUNT]; struct lws_genrsa_ctx ctx; struct lws_ssh_channel *ch; struct lws_subprotocol_scp *scp; uint8_t *pp, *ps, hash[64], *otmp; uint32_t m; int n; while (len --) { again: switch(pss->parser_state) { case SSH_INITIALIZE_TRANSIENT: pss->parser_state = SSHS_IDSTRING; pss->ctr = 0; pss->copy_to_I_C = 0; /* fallthru */ case SSHS_IDSTRING: if (*p == 0x0d) { pss->V_C[pss->npos] = '\0'; pss->npos = 0; lwsl_info("peer id: %s\n", pss->V_C); p++; pss->parser_state = SSHS_IDSTRING_CR; break; } if (pss->npos < sizeof(pss->V_C) - 1) pss->V_C[pss->npos++] = *p; p++; break; case SSHS_IDSTRING_CR: if (*p++ != 0x0a) { lwsl_notice("mangled id string\n"); return 1; } pss->ssh_sequence_ctr_cts = 0; pss->parser_state = SSHS_MSG_LEN; break; case SSHS_MSG_LEN: pss->msg_len = (pss->msg_len << 8) | *p++; if (++pss->ctr != 4) break; if (pss->active_keys_cts.valid) { uint8_t b[4]; POKE_U32(b, pss->msg_len); pss->msg_len = lws_chachapoly_get_length( &pss->active_keys_cts, pss->ssh_sequence_ctr_cts, b); } else pss->ssh_sequence_ctr_cts++; lwsl_info("msg len %d\n", pss->msg_len); pss->parser_state = SSHS_MSG_PADDING; pss->ctr = 0; pss->pos = 4; if (pss->msg_len < 2 + 4) { lwsl_notice("illegal msg size\n"); goto bail; } break; case SSHS_MSG_PADDING: pss->msg_padding = *p++; pss->parser_state = SSHS_MSG_ID; break; case SSHS_MSG_ID: pss->msg_id = *p++; pss->ctr = 0; switch (pss->msg_id) { case SSH_MSG_DISCONNECT: /* * byte SSH_MSG_DISCONNECT * uint32 reason code * string description in ISO-10646 * UTF-8 encoding [RFC3629] * string language tag [RFC3066] */ lwsl_notice("SSH_MSG_DISCONNECT\n"); state_get_u32(pss, SSHS_NVC_DISCONNECT_REASON); break; case SSH_MSG_IGNORE: lwsl_notice("SSH_MSG_IGNORE\n"); break; case SSH_MSG_UNIMPLEMENTED: lwsl_notice("SSH_MSG_UNIMPLEMENTED\n"); break; case SSH_MSG_DEBUG: lwsl_notice("SSH_MSG_DEBUG\n"); break; case SSH_MSG_SERVICE_REQUEST: lwsl_info("SSH_MSG_SERVICE_REQUEST\n"); /* payload is a string */ state_get_string(pss, SSHS_DO_SERVICE_REQUEST); break; case SSH_MSG_SERVICE_ACCEPT: lwsl_notice("SSH_MSG_ACCEPT\n"); break; case SSH_MSG_KEXINIT: if (pss->kex_state != KEX_STATE_EXPECTING_CLIENT_OFFER) { pss->parser_state = SSH_KEX_STATE_SKIP; break; } if (!pss->kex) { lwsl_notice("%s: SSH_MSG_KEXINIT: NULL pss->kex\n", __func__); goto bail; } pss->parser_state = SSH_KEX_STATE_COOKIE; pss->kex->I_C_payload_len = 0; pss->kex->I_C_alloc_len = pss->msg_len; pss->kex->I_C = sshd_zalloc(pss->kex->I_C_alloc_len); if (!pss->kex->I_C) { lwsl_notice("OOM 3\n"); goto bail; } pss->kex->I_C[pss->kex->I_C_payload_len++] = pss->msg_id; pss->copy_to_I_C = 1; break; case SSH_MSG_KEX_ECDH_INIT: pss->parser_state = SSH_KEX_STATE_ECDH_KEYLEN; break; case SSH_MSG_NEWKEYS: if (pss->kex_state != KEX_STATE_REPLIED_TO_OFFER && pss->kex_state != KEX_STATE_CRYPTO_INITIALIZED) { lwsl_notice("unexpected newkeys\n"); goto bail; } /* * it means we should now use the keys we * agreed on */ lwsl_info("Activating CTS keys\n"); pss->active_keys_cts = pss->kex->keys_next_cts; if (lws_chacha_activate(&pss->active_keys_cts)) goto bail; pss->kex->newkeys |= 2; if (pss->kex->newkeys == 3) lws_kex_destroy(pss); if (pss->msg_padding) { pss->copy_to_I_C = 0; pss->parser_state = SSHS_MSG_EAT_PADDING; break; } else { pss->parser_state = SSHS_MSG_LEN; } break; case SSH_MSG_USERAUTH_REQUEST: /* * byte SSH_MSG_USERAUTH_REQUEST * string user name in UTF-8 * encoding [RFC3629] * string service name in US-ASCII * string "publickey" * boolean FALSE * string public key alg * string public key blob */ lwsl_info("SSH_MSG_USERAUTH_REQUEST\n"); if (pss->ua) { lwsl_notice("pss->ua overwrite\n"); goto bail; } pss->ua = sshd_zalloc(sizeof(*pss->ua)); if (!pss->ua) goto bail; state_get_string_alloc(pss, SSHS_DO_UAR_SVC); /* username is destroyed with userauth struct */ if (!pss->sent_banner) { if (pss->vhd->ops->banner) write_task(pss, NULL, SSH_WT_UA_BANNER); pss->sent_banner = 1; } break; case SSH_MSG_USERAUTH_FAILURE: goto bail; case SSH_MSG_USERAUTH_SUCCESS: goto bail; case SSH_MSG_USERAUTH_BANNER: goto bail; case SSH_MSG_CHANNEL_OPEN: state_get_string(pss, SSHS_NVC_CHOPEN_TYPE); break; case SSH_MSG_CHANNEL_REQUEST: /* RFC4254 * * byte SSH_MSG_CHANNEL_REQUEST * uint32 recipient channel * string "pty-req" * boolean want_reply * string TERM environment variable value * (e.g., vt100) * uint32 terminal width, characters * (e.g., 80) * uint32 terminal height, rows (e.g., 24) * uint32 terminal width, px (e.g., 640) * uint32 terminal height, px (e.g., 480) * string encoded terminal modes */ state_get_u32(pss, SSHS_NVC_CHRQ_RECIP); break; case SSH_MSG_CHANNEL_EOF: /* RFC4254 * When a party will no longer send more data * to a channel, it SHOULD send * SSH_MSG_CHANNEL_EOF. * * byte SSH_MSG_CHANNEL_EOF * uint32 recipient channel */ state_get_u32(pss, SSHS_NVC_CH_EOF); break; case SSH_MSG_CHANNEL_CLOSE: /* RFC4254 * * byte SSH_MSG_CHANNEL_CLOSE * uint32 recipient channel * * This message does not consume window space * and can be sent even if no window space is * available. * * It is RECOMMENDED that all data sent before * this message be delivered to the actual * destination, if possible. */ state_get_u32(pss, SSHS_NVC_CH_CLOSE); break; case SSH_MSG_CHANNEL_DATA: /* RFC4254 * * byte SSH_MSG_CHANNEL_DATA * uint32 recipient channel * string data */ state_get_u32(pss, SSHS_NVC_CD_RECIP); break; case SSH_MSG_CHANNEL_WINDOW_ADJUST: /* RFC452 * * byte SSH_MSG_CHANNEL_WINDOW_ADJUST * uint32 recipient channel * uint32 bytes to add */ if (!pss->ch_list) goto bail; state_get_u32(pss, SSHS_NVC_WA_RECIP); break; default: lwsl_notice("unk msg_id %d\n", pss->msg_id); goto bail; } break; case SSH_KEX_STATE_COOKIE: if (pss->msg_len < 16 + 1 + 1 + (10 * 4) + 5) { lwsl_notice("sanity: kex length failed\n"); goto bail; } pss->kex->kex_cookie[pss->ctr++] = *p++; if (pss->ctr != sizeof(pss->kex->kex_cookie)) break; pss->parser_state = SSH_KEX_NL_KEX_ALGS_LEN; pss->ctr = 0; break; case SSH_KEX_NL_KEX_ALGS_LEN: case SSH_KEX_NL_SHK_ALGS_LEN: case SSH_KEX_NL_EACTS_ALGS_LEN: case SSH_KEX_NL_EASTC_ALGS_LEN: case SSH_KEX_NL_MACTS_ALGS_LEN: case SSH_KEX_NL_MASTC_ALGS_LEN: case SSH_KEX_NL_CACTS_ALGS_LEN: case SSH_KEX_NL_CASTC_ALGS_LEN: case SSH_KEX_NL_LCTS_ALGS_LEN: case SSH_KEX_NL_LSTC_ALGS_LEN: case SSH_KEX_STATE_ECDH_KEYLEN: pss->len = (pss->len << 8) | *p++; if (++pss->ctr != 4) break; switch (pss->parser_state) { case SSH_KEX_STATE_ECDH_KEYLEN: pss->parser_state = SSH_KEX_STATE_ECDH_Q_C; break; default: pss->parser_state++; if (pss->len == 0) pss->parser_state++; break; } pss->ctr = 0; pss->npos = 0; if (pss->msg_len - pss->pos < pss->len) { lwsl_notice("sanity: length %d - %d < %d\n", pss->msg_len, pss->pos, pss->len); goto bail; } break; case SSH_KEX_NL_KEX_ALGS: case SSH_KEX_NL_SHK_ALGS: case SSH_KEX_NL_EACTS_ALGS: case SSH_KEX_NL_EASTC_ALGS: case SSH_KEX_NL_MACTS_ALGS: case SSH_KEX_NL_MASTC_ALGS: case SSH_KEX_NL_CACTS_ALGS: case SSH_KEX_NL_CASTC_ALGS: case SSH_KEX_NL_LCTS_ALGS: case SSH_KEX_NL_LSTC_ALGS: if (*p != ',') { if (pss->npos < sizeof(pss->name) - 1) pss->name[pss->npos++] = *p; } else { pss->name[pss->npos] = '\0'; pss->npos = 0; handle_name(pss); } p++; if (!--pss->len) { pss->name[pss->npos] = '\0'; if (pss->npos) handle_name(pss); pss->parser_state++; break; } break; case SSH_KEX_FIRST_PKT: pss->first_coming = !!*p++; pss->parser_state = SSH_KEX_RESERVED; break; case SSH_KEX_RESERVED: pss->len = (pss->len << 8) | *p++; if (++pss->ctr != 4) break; pss->ctr = 0; if (pss->msg_padding) { pss->copy_to_I_C = 0; pss->parser_state = SSHS_MSG_EAT_PADDING; break; } pss->parser_state = SSHS_MSG_LEN; break; case SSH_KEX_STATE_ECDH_Q_C: if (pss->len != 32) { lwsl_notice("wrong key len\n"); goto bail; } pss->kex->Q_C[pss->ctr++] = *p++; if (pss->ctr != 32) break; lwsl_info("Q_C parsed\n"); pss->parser_state = SSHS_MSG_EAT_PADDING; break; case SSH_KEX_STATE_SKIP: if (pss->pos - 4 < pss->msg_len) { p++; break; } lwsl_debug("skip done pos %d, msg_len %d len=%ld, \n", pss->pos, pss->msg_len, (long)len); pss->parser_state = SSHS_MSG_LEN; pss->ctr = 0; break; case SSHS_MSG_EAT_PADDING: p++; if (--pss->msg_padding) break; if (pss->msg_len + 4 != pss->pos) { lwsl_notice("sanity: kex end mismatch %d %d\n", pss->pos, pss->msg_len); goto bail; } switch (pss->msg_id) { case SSH_MSG_KEX_ECDH_INIT: if (pss->kex->match_bitfield != 0xff) { lwsl_notice("unable to negotiate\n"); goto bail; } if (kex_ecdh(pss, pss->kex->kex_r, &pss->kex->kex_r_len)) { lwsl_notice("hex_ecdh failed\n"); goto bail; } write_task(pss, NULL, SSH_WT_OFFER_REPLY); break; } pss->parser_state = SSHS_MSG_LEN; pss->ctr = 0; break; case SSHS_GET_STRING_LEN: pss->npos = 0; pss->len = (pss->len << 8) | *p++; if (++pss->ctr != 4) break; pss->ctr = 0; pss->parser_state = SSHS_GET_STRING; break; case SSHS_GET_STRING: if (pss->npos >= sizeof(pss->name) - 1) { lwsl_notice("non-alloc string too big\n"); goto bail; } pss->name[pss->npos++] = *p++; if (pss->npos != pss->len) break; pss->name[pss->npos] = '\0'; pss->parser_state = pss->state_after_string; goto again; case SSHS_GET_STRING_LEN_ALLOC: pss->npos = 0; pss->len = (pss->len << 8) | *p++; if (++pss->ctr != 4) break; pss->ctr = 0; pss->last_alloc = sshd_zalloc(pss->len + 1); lwsl_debug("SSHS_GET_STRING_LEN_ALLOC: %p, state %d\n", pss->last_alloc, pss->state_after_string); if (!pss->last_alloc) { lwsl_notice("alloc string too big\n"); goto bail; } pss->parser_state = SSHS_GET_STRING_ALLOC; break; case SSHS_GET_STRING_ALLOC: if (pss->npos >= pss->len) goto bail; pss->last_alloc[pss->npos++] = *p++; if (pss->npos != pss->len) break; pss->last_alloc[pss->npos] = '\0'; pss->parser_state = pss->state_after_string; goto again; /* * User Authentication */ case SSHS_DO_SERVICE_REQUEST: pss->okayed_userauth = 1; pss->parser_state = SSHS_MSG_EAT_PADDING; /* * this only 'accepts' that we can negotiate auth for * this service, not accepts the auth */ write_task(pss, NULL, SSH_WT_UA_ACCEPT); break; case SSHS_DO_UAR_SVC: pss->ua->username = (char *)pss->last_alloc; pss->last_alloc = NULL; /* it was adopted */ state_get_string_alloc(pss, SSHS_DO_UAR_PUBLICKEY); /* destroyed with UA struct */ break; case SSHS_DO_UAR_PUBLICKEY: pss->ua->service = (char *)pss->last_alloc; pss->last_alloc = NULL; /* it was adopted */ /* Sect 5, RFC4252 * * The 'user name' and 'service name' are repeated in * every new authentication attempt, and MAY change. * * The server implementation MUST carefully check them * in every message, and MUST flush any accumulated * authentication states if they change. If it is * unable to flush an authentication state, it MUST * disconnect if the 'user name' or 'service name' * changes. */ if (pss->seen_auth_req_before && ( strcmp(pss->ua->username, pss->last_auth_req_username) || strcmp(pss->ua->service, pss->last_auth_req_service))) { lwsl_notice("username / svc changed\n"); goto bail; } pss->seen_auth_req_before = 1; lws_strncpy(pss->last_auth_req_username, pss->ua->username, sizeof(pss->last_auth_req_username)); lws_strncpy(pss->last_auth_req_service, pss->ua->service, sizeof(pss->last_auth_req_service)); if (strcmp(pss->ua->service, "ssh-connection")) goto ua_fail; state_get_string(pss, SSHS_NVC_DO_UAR_CHECK_PUBLICKEY); break; case SSHS_NVC_DO_UAR_CHECK_PUBLICKEY: if (!strcmp(pss->name, "none")) { /* we must fail it */ lwsl_info("got 'none' req, refusing\n"); goto ua_fail; } if (strcmp(pss->name, "publickey")) { lwsl_notice("expected 'publickey' got '%s'\n", pss->name); goto ua_fail; } pss->parser_state = SSHS_DO_UAR_SIG_PRESENT; break; case SSHS_DO_UAR_SIG_PRESENT: lwsl_info("SSHS_DO_UAR_SIG_PRESENT\n"); pss->ua->sig_present = *p++; state_get_string_alloc(pss, SSHS_NVC_DO_UAR_ALG); /* destroyed with UA struct */ break; case SSHS_NVC_DO_UAR_ALG: pss->ua->alg = (char *)pss->last_alloc; pss->last_alloc = NULL; /* it was adopted */ if (rsa_hash_alg_from_ident(pss->ua->alg) < 0) { lwsl_notice("unknown alg\n"); goto ua_fail; } state_get_string_alloc(pss, SSHS_NVC_DO_UAR_PUBKEY_BLOB); /* destroyed with UA struct */ break; case SSHS_NVC_DO_UAR_PUBKEY_BLOB: pss->ua->pubkey = pss->last_alloc; pss->last_alloc = NULL; /* it was adopted */ pss->ua->pubkey_len = pss->npos; /* * RFC4253 * * ssh-rsa * * The structure inside the blob is * * mpint e * mpint n * * Let's see if this key is authorized */ n = 1; if (pss->vhd->ops && pss->vhd->ops->is_pubkey_authorized) n = pss->vhd->ops->is_pubkey_authorized( pss->ua->username, pss->ua->alg, pss->ua->pubkey, pss->ua->pubkey_len); if (n) { lwsl_info("rejecting peer pubkey\n"); goto ua_fail; } if (pss->ua->sig_present) { state_get_string_alloc(pss, SSHS_NVC_DO_UAR_SIG); /* destroyed with UA struct */ break; } /* * This key is at least one we would be prepared * to accept if he really has it... since no sig * client should resend everything with a sig * appended. OK it and delete this initial UA */ write_task(pss, NULL, SSH_WT_UA_PK_OK); pss->parser_state = SSHS_MSG_EAT_PADDING; break; case SSHS_NVC_DO_UAR_SIG: /* * Now the pubkey is coming with a sig */ /* Sect 5.1 RFC4252 * * SSH_MSG_USERAUTH_SUCCESS MUST be sent only once. * When SSH_MSG_USERAUTH_SUCCESS has been sent, any * further authentication requests received after that * SHOULD be silently ignored. */ if (pss->ssh_auth_state == SSH_AUTH_STATE_GAVE_AUTH_IGNORE_REQS) { lwsl_info("Silently ignoring auth req after accepted\n"); goto ua_fail_silently; } lwsl_info("SSHS_DO_UAR_SIG\n"); pss->ua->sig = pss->last_alloc; pss->last_alloc = NULL; /* it was adopted */ pss->ua->sig_len = pss->npos; pss->parser_state = SSHS_MSG_EAT_PADDING; /* * RFC 4252 p9 * * The value of 'signature' is a signature with * the private host key of the following data, in * this order: * * string session identifier * byte SSH_MSG_USERAUTH_REQUEST * string user name * string service name * string "publickey" * boolean TRUE * string public key algorithm name * string public key to be used for auth * * We reproduce the signature plaintext and the * hash, and then decrypt the incoming signed block. * What comes out is some ASN1, in there is the * hash decrypted. We find it and confirm it * matches the hash we computed ourselves. * * First step is generate the sig plaintext */ n = 4 + 32 + 1 + 4 + (int)strlen(pss->ua->username) + 4 + (int)strlen(pss->ua->service) + 4 + 9 + 1 + 4 + (int)strlen(pss->ua->alg) + 4 + (int)pss->ua->pubkey_len; ps = sshd_zalloc(n); if (!ps) { lwsl_notice("OOM 4\n"); goto ua_fail; } pp = ps; lws_buf(&pp, pss->session_id, 32); *pp++ = SSH_MSG_USERAUTH_REQUEST; lws_cstr(&pp, pss->ua->username, 64); lws_cstr(&pp, pss->ua->service, 64); lws_cstr(&pp, "publickey", 64); *pp++ = 1; lws_cstr(&pp, pss->ua->alg, 64); lws_buf(&pp, pss->ua->pubkey, pss->ua->pubkey_len); /* Next hash the plaintext */ if (lws_genhash_init(&pss->ua->hash_ctx, rsa_hash_alg_from_ident(pss->ua->alg))) { lwsl_notice("genhash init failed\n"); free(ps); goto ua_fail; } if (lws_genhash_update(&pss->ua->hash_ctx, ps, pp - ps)) { lwsl_notice("genhash update failed\n"); free(ps); goto ua_fail; } lws_genhash_destroy(&pss->ua->hash_ctx, hash); free(ps); /* * Prepare the RSA decryption context: load in * the E and N factors */ memset(e, 0, sizeof(e)); pp = pss->ua->pubkey; m = lws_g32(&pp); pp += m; m = lws_g32(&pp); e[LWS_GENCRYPTO_RSA_KEYEL_E].buf = pp; e[LWS_GENCRYPTO_RSA_KEYEL_E].len = m; pp += m; m = lws_g32(&pp); e[LWS_GENCRYPTO_RSA_KEYEL_N].buf = pp; e[LWS_GENCRYPTO_RSA_KEYEL_N].len = m; if (lws_genrsa_create(&ctx, e, pss->vhd->context, LGRSAM_PKCS1_1_5, LWS_GENHASH_TYPE_UNKNOWN)) goto ua_fail; /* * point to the encrypted signature payload we * were sent */ pp = pss->ua->sig; m = lws_g32(&pp); pp += m; m = lws_g32(&pp); /* * decrypt it, resulting in an error, or some ASN1 * including the decrypted signature */ otmp = sshd_zalloc(m); if (!otmp) /* ua_fail1 frees bn_e, bn_n and rsa */ goto ua_fail1; n = lws_genrsa_public_decrypt(&ctx, pp, m, otmp, m); if (n > 0) { /* the decrypted sig is in ASN1 format */ m = 0; while ((int)m < n) { /* sig payload */ if (otmp[m] == 0x04 && otmp[m + 1] == lws_genhash_size( pss->ua->hash_ctx.type)) { m = memcmp(&otmp[m + 2], hash, lws_genhash_size(pss->ua->hash_ctx.type)); break; } /* go into these */ if (otmp[m] == 0x30) { m += 2; continue; } /* otherwise skip payloads */ m += otmp[m + 1] + 2; } } free(otmp); lws_genrsa_destroy(&ctx); /* * if no good, m is nonzero and inform peer */ if (n <= 0) { lwsl_notice("hash sig verify fail: %d\n", m); goto ua_fail; } /* if it checks out, inform peer */ lwsl_info("sig check OK\n"); /* Sect 5.1 RFC4252 * * SSH_MSG_USERAUTH_SUCCESS MUST be sent only once. * When SSH_MSG_USERAUTH_SUCCESS has been sent, any * further authentication requests received after that * SHOULD be silently ignored. */ pss->ssh_auth_state = SSH_AUTH_STATE_GAVE_AUTH_IGNORE_REQS; write_task(pss, NULL, SSH_WT_UA_SUCCESS); lws_ua_destroy(pss); break; /* * Channels */ case SSHS_GET_U32: pss->len = (pss->len << 8) | *p++; if (++pss->ctr != 4) break; pss->ctr = 0; pss->parser_state = pss->state_after_string; goto again; /* * Channel: Disconnect */ case SSHS_NVC_DISCONNECT_REASON: pss->disconnect_reason = pss->len; state_get_string_alloc(pss, SSHS_NVC_DISCONNECT_DESC); break; case SSHS_NVC_DISCONNECT_DESC: pss->disconnect_desc = (char *)pss->last_alloc; pss->last_alloc = NULL; /* it was adopted */ state_get_string(pss, SSHS_NVC_DISCONNECT_LANG); break; case SSHS_NVC_DISCONNECT_LANG: lwsl_notice("SSHS_NVC_DISCONNECT_LANG\n"); if (pss->vhd->ops && pss->vhd->ops->disconnect_reason) pss->vhd->ops->disconnect_reason( pss->disconnect_reason, pss->disconnect_desc, pss->name); ssh_free_set_NULL(pss->last_alloc); break; /* * Channel: Open */ case SSHS_NVC_CHOPEN_TYPE: /* channel open */ if (strcmp(pss->name, "session")) { lwsl_notice("Failing on not session\n"); pss->reason = 3; goto ch_fail; } lwsl_info("SSHS_NVC_CHOPEN_TYPE: creating session\n"); pss->ch_temp = sshd_zalloc(sizeof(*pss->ch_temp)); if (!pss->ch_temp) return -1; pss->ch_temp->type = SSH_CH_TYPE_SESSION; pss->ch_temp->pss = pss; state_get_u32(pss, SSHS_NVC_CHOPEN_SENDER_CH); break; case SSHS_NVC_CHOPEN_SENDER_CH: pss->ch_temp->sender_ch = pss->len; state_get_u32(pss, SSHS_NVC_CHOPEN_WINSIZE); break; case SSHS_NVC_CHOPEN_WINSIZE: lwsl_info("Initial window set to %d\n", pss->len); pss->ch_temp->window = pss->len; state_get_u32(pss, SSHS_NVC_CHOPEN_PKTSIZE); break; case SSHS_NVC_CHOPEN_PKTSIZE: pss->ch_temp->max_pkt = pss->len; pss->ch_temp->peer_window_est = LWS_SSH_INITIAL_WINDOW; pss->ch_temp->server_ch = pss->next_ch_num++; /* * add us to channel list... leave as ch_temp * as write task needs it and will NULL down */ lwsl_info("creating new session ch\n"); pss->ch_temp->next = pss->ch_list; pss->ch_list = pss->ch_temp; if (pss->vhd->ops && pss->vhd->ops->channel_create) pss->vhd->ops->channel_create(pss->wsi, &pss->ch_temp->priv); write_task(pss, pss->ch_temp, SSH_WT_CH_OPEN_CONF); pss->parser_state = SSHS_MSG_EAT_PADDING; break; /* * SSH_MSG_CHANNEL_REQUEST */ case SSHS_NVC_CHRQ_RECIP: pss->ch_recip = pss->len; state_get_string(pss, SSHS_NVC_CHRQ_TYPE); break; case SSHS_NVC_CHRQ_TYPE: pss->parser_state = SSHS_CHRQ_WANT_REPLY; break; case SSHS_CHRQ_WANT_REPLY: pss->rq_want_reply = *p++; lwsl_info("SSHS_CHRQ_WANT_REPLY: %s, wantrep: %d\n", pss->name, pss->rq_want_reply); pss->ch_temp = ssh_get_server_ch(pss, pss->ch_recip); /* after this they differ by the request */ /* * a PTY for a shell */ if (!strcmp(pss->name, "pty-req")) { state_get_string(pss, SSHS_NVC_CHRQ_TERM); break; } /* * a shell */ if (!strcmp(pss->name, "shell")) { pss->channel_doing_spawn = pss->ch_temp->server_ch; if (pss->vhd->ops && pss->vhd->ops->shell && !pss->vhd->ops->shell(pss->ch_temp->priv, pss->wsi, lws_ssh_exec_finish, pss->ch_temp)) { if (pss->rq_want_reply) write_task_insert(pss, pss->ch_temp, SSH_WT_CHRQ_SUCC); pss->parser_state = SSHS_MSG_EAT_PADDING; break; } goto chrq_fail; } /* * env vars to be set in the shell */ if (!strcmp(pss->name, "env")) { state_get_string(pss, SSHS_NVC_CHRQ_ENV_NAME); break; } /* * exec something */ if (!strcmp(pss->name, "exec")) { state_get_string_alloc(pss, SSHS_NVC_CHRQ_EXEC_CMD); break; } /* * spawn a subsystem */ if (!strcmp(pss->name, "subsystem")) { lwsl_notice("subsystem\n"); state_get_string_alloc(pss, SSHS_NVC_CHRQ_SUBSYSTEM); break; } if (pss->rq_want_reply) goto chrq_fail; pss->parser_state = SSH_KEX_STATE_SKIP; break; /* CHRQ pty-req */ case SSHS_NVC_CHRQ_TERM: memcpy(pss->args.pty.term, pss->name, sizeof(pss->args.pty.term) - 1); state_get_u32(pss, SSHS_NVC_CHRQ_TW); break; case SSHS_NVC_CHRQ_TW: pss->args.pty.width_ch = pss->len; state_get_u32(pss, SSHS_NVC_CHRQ_TH); break; case SSHS_NVC_CHRQ_TH: pss->args.pty.height_ch = pss->len; state_get_u32(pss, SSHS_NVC_CHRQ_TWP); break; case SSHS_NVC_CHRQ_TWP: pss->args.pty.width_px = pss->len; state_get_u32(pss, SSHS_NVC_CHRQ_THP); break; case SSHS_NVC_CHRQ_THP: pss->args.pty.height_px = pss->len; state_get_string_alloc(pss, SSHS_NVC_CHRQ_MODES); break; case SSHS_NVC_CHRQ_MODES: /* modes is a stream of byte-pairs, not a string */ pss->args.pty.modes = (char *)pss->last_alloc; pss->last_alloc = NULL; /* it was adopted */ pss->args.pty.modes_len = pss->npos; n = 0; if (pss->vhd->ops && pss->vhd->ops->pty_req) n = pss->vhd->ops->pty_req(pss->ch_temp->priv, &pss->args.pty); ssh_free_set_NULL(pss->args.pty.modes); if (n) goto chrq_fail; if (pss->rq_want_reply) write_task(pss, pss->ch_temp, SSH_WT_CHRQ_SUCC); pss->parser_state = SSHS_MSG_EAT_PADDING; break; /* CHRQ env */ case SSHS_NVC_CHRQ_ENV_NAME: strcpy(pss->args.aux, pss->name); state_get_string(pss, SSHS_NVC_CHRQ_ENV_VALUE); break; case SSHS_NVC_CHRQ_ENV_VALUE: if (pss->vhd->ops && pss->vhd->ops->set_env) if (pss->vhd->ops->set_env(pss->ch_temp->priv, pss->args.aux, pss->name)) goto chrq_fail; pss->parser_state = SSHS_MSG_EAT_PADDING; break; /* CHRQ exec */ case SSHS_NVC_CHRQ_EXEC_CMD: /* * byte SSH_MSG_CHANNEL_REQUEST * uint32 recipient channel * string "exec" * boolean want reply * string command * * This message will request that the server start the * execution of the given command. The 'command' string * may contain a path. Normal precautions MUST be taken * to prevent the execution of unauthorized commands. * * scp sends "scp -t /path/..." */ lwsl_info("exec cmd: %s %02X\n", pss->last_alloc, *p); pss->channel_doing_spawn = pss->ch_temp->server_ch; if (pss->vhd->ops && pss->vhd->ops->exec && !pss->vhd->ops->exec(pss->ch_temp->priv, pss->wsi, (const char *)pss->last_alloc, lws_ssh_exec_finish, pss->ch_temp)) { ssh_free_set_NULL(pss->last_alloc); if (pss->rq_want_reply) write_task_insert(pss, pss->ch_temp, SSH_WT_CHRQ_SUCC); pss->parser_state = SSHS_MSG_EAT_PADDING; break; } /* * even if he doesn't want to exec it, we know how to * fake scp */ /* we only alloc "exec" of scp for scp destination */ n = 1; if (pss->last_alloc[0] != 's' || pss->last_alloc[1] != 'c' || pss->last_alloc[2] != 'p' || pss->last_alloc[3] != ' ') /* disallow it */ n = 0; ssh_free_set_NULL(pss->last_alloc); if (!n) goto chrq_fail; /* our channel speaks SCP protocol now */ scp = sshd_zalloc(sizeof(*scp)); if (!scp) return -1; pss->ch_temp->type = SSH_CH_TYPE_SCP; pss->ch_temp->sub = (lws_subprotocol *)scp; scp->ips = SSHS_SCP_COLLECTSTR; if (pss->rq_want_reply) write_task(pss, pss->ch_temp, SSH_WT_CHRQ_SUCC); /* we start the scp protocol first by sending an ACK */ write_task(pss, pss->ch_temp, SSH_WT_SCP_ACK_OKAY); pss->parser_state = SSHS_MSG_EAT_PADDING; break; case SSHS_NVC_CHRQ_SUBSYSTEM: lwsl_notice("subsystem: %s", pss->last_alloc); n = 0; #if 0 if (!strcmp(pss->name, "sftp")) { lwsl_notice("SFTP session\n"); pss->ch_temp->type = SSH_CH_TYPE_SFTP; n = 1; } #endif ssh_free_set_NULL(pss->last_alloc); // if (!n) goto ch_fail; #if 0 if (pss->rq_want_reply) write_task(pss, ssh_get_server_ch(pss, pss->ch_recip), SSH_WT_CHRQ_SUCC); pss->parser_state = SSHS_MSG_EAT_PADDING; break; #endif /* SSH_MSG_CHANNEL_DATA */ case SSHS_NVC_CD_RECIP: pss->ch_recip = pss->len; ch = ssh_get_server_ch(pss, pss->ch_recip); ch->peer_window_est -= pss->msg_len; if (pss->msg_len < sizeof(pss->name)) state_get_string(pss, SSHS_NVC_CD_DATA); else state_get_string_alloc(pss, SSHS_NVC_CD_DATA_ALLOC); break; case SSHS_NVC_CD_DATA_ALLOC: case SSHS_NVC_CD_DATA: /* * Actual protocol incoming payload */ if (pss->parser_state == SSHS_NVC_CD_DATA_ALLOC) pp = pss->last_alloc; else pp = (uint8_t *)pss->name; lwsl_info("SSHS_NVC_CD_DATA\n"); ch = ssh_get_server_ch(pss, pss->ch_recip); switch (ch->type) { case SSH_CH_TYPE_SCP: scp = &ch->sub->scp; switch (scp->ips) { case SSHS_SCP_COLLECTSTR: /* gather the ascii-coded headers */ for (n = 0; n < (int)pss->npos; n++) lwsl_notice("0x%02X %c\n", pp[n], pp[n]); /* Header triggers the transfer? */ if (pp[0] == 'C' && pp[pss->npos - 1] == '\x0a') { while (*pp != ' ' && *pp != '\x0a') pp++; if (*pp++ != ' ') { write_task(pss, ch, SSH_WT_SCP_ACK_ERROR); pss->parser_state = SSHS_MSG_EAT_PADDING; break; } scp->len = atoll((const char *)pp); lwsl_notice("scp payload %llu expected\n", (unsigned long long)scp->len); scp->ips = SSHS_SCP_PAYLOADIN; } /* ack it */ write_task(pss, pss->ch_temp, SSH_WT_SCP_ACK_OKAY); break; case SSHS_SCP_PAYLOADIN: /* the scp file payload */ if (pss->vhd->ops) pss->vhd->ops->rx(ch->priv, pss->wsi, pp, pss->npos); if (scp->len >= pss->npos) scp->len -= pss->npos; else scp->len = 0; if (!scp->len) { lwsl_notice("scp txfer completed\n"); scp->ips = SSHS_SCP_COLLECTSTR; break; } break; } break; default: /* scp payload */ if (pss->vhd->ops) pss->vhd->ops->rx(ch->priv, pss->wsi, pp, pss->npos); break; } if (pss->parser_state == SSHS_NVC_CD_DATA_ALLOC) ssh_free_set_NULL(pss->last_alloc); if (ch->peer_window_est < 32768) { write_task(pss, ch, SSH_WT_WINDOW_ADJUST); ch->peer_window_est += 32768; lwsl_info("extra peer WINDOW_ADJUST (~ %d)\n", ch->peer_window_est); } pss->parser_state = SSHS_MSG_EAT_PADDING; break; case SSHS_NVC_WA_RECIP: pss->ch_recip = pss->len; state_get_u32(pss, SSHS_NVC_WA_ADD); break; case SSHS_NVC_WA_ADD: ch = ssh_get_server_ch(pss, pss->ch_recip); if (ch) { ch->window += pss->len; lwsl_notice("got additional window %d (now %d)\n", pss->len, ch->window); } pss->parser_state = SSHS_MSG_EAT_PADDING; break; /* * channel close */ case SSHS_NVC_CH_EOF: /* * No explicit response is sent to this * message. However, the application may send * EOF to whatever is at the other end of the * channel. Note that the channel remains open * after this message, and more data may still * be sent in the other direction. This message * does not consume window space and can be sent * even if no window space is available. */ lwsl_notice("SSH_MSG_CHANNEL_EOF: %d\n", pss->ch_recip); ch = ssh_get_server_ch(pss, pss->ch_recip); if (!ch) { lwsl_notice("unknown ch %d\n", pss->ch_recip); return -1; } if (!ch->scheduled_close) { lwsl_notice("scheduling CLOSE\n"); ch->scheduled_close = 1; write_task(pss, ch, SSH_WT_CH_CLOSE); } pss->parser_state = SSHS_MSG_EAT_PADDING; break; case SSHS_NVC_CH_CLOSE: /* * When either party wishes to terminate the * channel, it sends SSH_MSG_CHANNEL_CLOSE. * Upon receiving this message, a party MUST * send back an SSH_MSG_CHANNEL_CLOSE unless it * has already sent this message for the * channel. The channel is considered closed * for a party when it has both sent and * received SSH_MSG_CHANNEL_CLOSE, and the * party may then reuse the channel number. * A party MAY send SSH_MSG_CHANNEL_CLOSE * without having sent or received * SSH_MSG_CHANNEL_EOF. */ lwsl_notice("SSH_MSG_CHANNEL_CLOSE ch %d\n", pss->ch_recip); ch = ssh_get_server_ch(pss, pss->ch_recip); if (!ch) goto bail; pss->parser_state = SSHS_MSG_EAT_PADDING; if (ch->sent_close) { /* * This is acking our sent close... * we can destroy the channel with no * further communication. */ ssh_destroy_channel(pss, ch); break; } ch->received_close = 1; ch->scheduled_close = 1; write_task(pss, ch, SSH_WT_CH_CLOSE); break; default: break; chrq_fail: lwsl_notice("chrq_fail\n"); write_task(pss, pss->ch_temp, SSH_WT_CHRQ_FAILURE); pss->parser_state = SSH_KEX_STATE_SKIP; break; ch_fail: if (pss->ch_temp) { free(pss->ch_temp); pss->ch_temp = NULL; } write_task(pss, pss->ch_temp, SSH_WT_CH_FAILURE); pss->parser_state = SSH_KEX_STATE_SKIP; break; ua_fail1: lws_genrsa_destroy(&ctx); ua_fail: write_task(pss, NULL, SSH_WT_UA_FAILURE); ua_fail_silently: lws_ua_destroy(pss); /* Sect 4, RFC4252 * * Additionally, the implementation SHOULD limit the * number of failed authentication attempts a client * may perform in a single session (the RECOMMENDED * limit is 20 attempts). If the threshold is * exceeded, the server SHOULD disconnect. */ if (pss->count_auth_attempts++ > 20) goto bail; pss->parser_state = SSH_KEX_STATE_SKIP; break; } pss->pos++; } return 0; bail: lws_kex_destroy(pss); lws_ua_destroy(pss); return SSH_DISCONNECT_KEY_EXCHANGE_FAILED; } static int parse(struct per_session_data__sshd *pss, uint8_t *p, size_t len) { while (len--) { if (pss->copy_to_I_C && pss->kex->I_C_payload_len < pss->kex->I_C_alloc_len && pss->parser_state != SSHS_MSG_EAT_PADDING) pss->kex->I_C[pss->kex->I_C_payload_len++] = *p; if (pss->active_keys_cts.valid && pss->parser_state == SSHS_MSG_LEN) /* take a copy for full decrypt */ pss->packet_assembly[pss->pa_pos++] = *p; if (pss->active_keys_cts.valid && pss->parser_state == SSHS_MSG_PADDING && pss->msg_len) { /* we are going to have to decrypt it */ uint32_t cp, l = pss->msg_len + 4 + pss->active_keys_cts.MAC_length; uint8_t pt[2048]; len++; cp = (uint32_t)len; if (cp > l - pss->pa_pos) cp = l - pss->pa_pos; if (cp > sizeof(pss->packet_assembly) - pss->pa_pos) { lwsl_err("Packet is too big to decrypt\n"); goto bail; } if (pss->msg_len < 2 + 4) { lwsl_err("packet too small\n"); goto bail; } memcpy(&pss->packet_assembly[pss->pa_pos], p, cp); pss->pa_pos += cp; len -= cp; p += cp; if (pss->pa_pos != l) return 0; /* decrypt it */ cp = lws_chacha_decrypt(&pss->active_keys_cts, pss->ssh_sequence_ctr_cts++, pss->packet_assembly, pss->pa_pos, pt); if (cp) { lwsl_notice("Decryption failed: %d\n", cp); goto bail; } if (lws_ssh_parse_plaintext(pss, pt + 4, pss->msg_len)) goto bail; pss->pa_pos = 0; pss->ctr = 0; continue; } if (lws_ssh_parse_plaintext(pss, p, 1)) goto bail; p++; } return 0; bail: lws_kex_destroy(pss); lws_ua_destroy(pss); return SSH_DISCONNECT_KEY_EXCHANGE_FAILED; } static uint32_t pad_and_encrypt(uint8_t *dest, void *ps, uint8_t *pp, struct per_session_data__sshd *pss, int skip_pad) { uint32_t n; if (!skip_pad) lws_pad_set_length(pss, ps, &pp, &pss->active_keys_stc); n = lws_ptr_diff(pp, ps); if (!pss->active_keys_stc.valid) { memcpy(dest, ps, n); return n; } lws_chacha_encrypt(&pss->active_keys_stc, pss->ssh_sequence_ctr_stc, ps, n, dest); n += pss->active_keys_stc.MAC_length; return n; } static int lws_callback_raw_sshd(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__sshd *pss = (struct per_session_data__sshd *)user, **p; struct per_vhost_data__sshd *vhd = NULL; uint8_t buf[LWS_PRE + 1024], *pp, *ps = &buf[LWS_PRE + 512], *ps1 = NULL; const struct lws_protocol_vhost_options *pvo; const struct lws_protocols *prot; struct lws_ssh_channel *ch; char lang[10]; int n, m, o; /* * Because we are an abstract protocol plugin, we will get called by * wsi that actually bind to a plugin "on top of us" that calls thru * to our callback. * * Under those circumstances, we can't simply get a pointer to our own * protocol from the wsi. If there's a pss already, we can get it from * there, but the first time for each connection we have to look it up. */ if (pss && pss->vhd) vhd = (struct per_vhost_data__sshd *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), pss->vhd->protocol); else if (lws_get_vhost(wsi)) vhd = (struct per_vhost_data__sshd *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_vhost_name_to_protocol( lws_get_vhost(wsi), "lws-ssh-base")); switch ((int)reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__sshd)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); pvo = (const struct lws_protocol_vhost_options *)in; while (pvo) { /* * the user code passes the ops struct address to us * using a pvo (per-vhost option) */ if (!strcmp(pvo->name, "ops")) vhd->ops = (const struct lws_ssh_ops *)pvo->value; /* * the user code is telling us to get the ops struct * from another protocol's protocol.user pointer */ if (!strcmp(pvo->name, "ops-from")) { prot = lws_vhost_name_to_protocol(vhd->vhost, pvo->value); if (prot) vhd->ops = (const struct lws_ssh_ops *)prot->user; else lwsl_err("%s: can't find protocol %s\n", __func__, pvo->value); } pvo = pvo->next; } if (!vhd->ops) { lwsl_err("ssh pvo \"ops\" is mandatory\n"); return 1; } /* * The user code ops api_version has to be current */ if (vhd->ops->api_version != LWS_SSH_OPS_VERSION) { lwsl_err("FATAL ops is api_version v%d but code is v%d\n", vhd->ops->api_version, LWS_SSH_OPS_VERSION); return 1; } break; case LWS_CALLBACK_RAW_ADOPT: lwsl_info("LWS_CALLBACK_RAW_ADOPT\n"); if (!vhd) return -1; pss->next = vhd->live_pss_list; vhd->live_pss_list = pss; pss->parser_state = SSH_INITIALIZE_TRANSIENT; pss->wsi = wsi; pss->vhd = vhd; pss->kex_state = KEX_STATE_EXPECTING_CLIENT_OFFER; pss->active_keys_cts.padding_alignment = 8; pss->active_keys_stc.padding_alignment = 8; if (lws_kex_create(pss)) return -1; write_task(pss, NULL, SSH_WT_VERSION); /* sect 4 RFC4252 * * The server SHOULD have a timeout for authentication and * disconnect if the authentication has not been accepted * within the timeout period. * * The RECOMMENDED timeout period is 10 minutes. */ lws_set_timeout(wsi, SSH_PENDING_TIMEOUT_CONNECT_TO_SUCCESSFUL_AUTH, 10 * 60); break; case LWS_CALLBACK_RAW_CLOSE: if (!pss) return -1; lwsl_info("LWS_CALLBACK_RAW_CLOSE\n"); lws_kex_destroy(pss); lws_ua_destroy(pss); ssh_free_set_NULL(pss->last_alloc); while (pss->ch_list) ssh_destroy_channel(pss, pss->ch_list); lws_chacha_destroy(&pss->active_keys_cts); lws_chacha_destroy(&pss->active_keys_stc); p = &vhd->live_pss_list; while (*p) { if ((*p) == pss) { *p = pss->next; continue; } p = &((*p)->next); } break; case LWS_CALLBACK_RAW_RX: if (!pss) return -1; if (parse(pss, in, len)) return -1; break; case LWS_CALLBACK_RAW_WRITEABLE: if (!pss) break; n = 0; o = pss->write_task[pss->wt_tail]; ch = pss->write_channel[pss->wt_tail]; if (pss->wt_head == pss->wt_tail) o = SSH_WT_NONE; switch (o) { case SSH_WT_VERSION: if (!pss->vhd) break; n = lws_snprintf((char *)buf + LWS_PRE, sizeof(buf) - LWS_PRE - 1, "%s\r\n", pss->vhd->ops->server_string); write_task(pss, NULL, SSH_WT_OFFER); break; case SSH_WT_OFFER: if (!pss->vhd) break; m = 0; n = offer(pss, buf + LWS_PRE, sizeof(buf) - LWS_PRE, 0, &m); if (n == 0) { lwsl_notice("Too small\n"); return -1; } if (!pss->kex) { lwsl_notice("%s: SSH_WT_OFFER: pss->kex is NULL\n", __func__); return -1; } /* we need a copy of it to generate the hash later */ if (pss->kex->I_S) free(pss->kex->I_S); pss->kex->I_S = sshd_zalloc(m); if (!pss->kex->I_S) { lwsl_notice("OOM 5: %d\n", m); return -1; } /* without length + padcount part */ memcpy(pss->kex->I_S, buf + LWS_PRE + 5, m); pss->kex->I_S_payload_len = m; /* without padding */ break; case SSH_WT_OFFER_REPLY: memcpy(ps, pss->kex->kex_r, pss->kex->kex_r_len); n = pad_and_encrypt(&buf[LWS_PRE], ps, ps + pss->kex->kex_r_len, pss, 1); pss->kex_state = KEX_STATE_REPLIED_TO_OFFER; /* afterwards, must do newkeys */ write_task(pss, NULL, SSH_WT_SEND_NEWKEYS); break; case SSH_WT_SEND_NEWKEYS: pp = ps + 5; *pp++ = SSH_MSG_NEWKEYS; goto pac; case SSH_WT_UA_ACCEPT: /* * If the server supports the service (and permits * the client to use it), it MUST respond with the * following: * * byte SSH_MSG_SERVICE_ACCEPT * string service name */ pp = ps + 5; *pp++ = SSH_MSG_SERVICE_ACCEPT; lws_p32(pp, pss->npos); pp += 4; strcpy((char *)pp, pss->name); pp += pss->npos; goto pac; case SSH_WT_UA_FAILURE: pp = ps + 5; *pp++ = SSH_MSG_USERAUTH_FAILURE; lws_p32(pp, 9); pp += 4; strcpy((char *)pp, "publickey"); pp += 9; *pp++ = 0; goto pac; case SSH_WT_UA_BANNER: pp = ps + 5; *pp++ = SSH_MSG_USERAUTH_BANNER; if (pss->vhd && pss->vhd->ops->banner) n = (int)pss->vhd->ops->banner((char *)&buf[650], 150 - 1, lang, (int)sizeof(lang)); lws_p32(pp, n); pp += 4; strcpy((char *)pp, (char *)&buf[650]); pp += n; if (lws_cstr(&pp, lang, sizeof(lang))) goto bail; goto pac; case SSH_WT_UA_PK_OK: /* * The server MUST respond to this message with * either SSH_MSG_USERAUTH_FAILURE or with the * following: * * byte SSH_MSG_USERAUTH_PK_OK * string public key alg name from the request * string public key blob from the request */ n = 74 + pss->ua->pubkey_len; if (n > (int)sizeof(buf) - LWS_PRE) { lwsl_notice("pubkey too large\n"); goto bail; } ps1 = sshd_zalloc(n); if (!ps1) goto bail; ps = ps1; pp = ps1 + 5; *pp++ = SSH_MSG_USERAUTH_PK_OK; if (lws_cstr(&pp, pss->ua->alg, 64)) { free(ps1); goto bail; } lws_p32(pp, pss->ua->pubkey_len); pp += 4; memcpy(pp, pss->ua->pubkey, pss->ua->pubkey_len); pp += pss->ua->pubkey_len; /* we no longer need the UA now we judged it */ lws_ua_destroy(pss); goto pac; case SSH_WT_UA_SUCCESS: pp = ps + 5; *pp++ = SSH_MSG_USERAUTH_SUCCESS; /* end SSH_PENDING_TIMEOUT_CONNECT_TO_SUCCESSFUL_AUTH */ lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); goto pac; case SSH_WT_CH_OPEN_CONF: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_OPEN_CONFIRMATION; lws_p32(pp, pss->ch_temp->server_ch); pp += 4; lws_p32(pp, pss->ch_temp->sender_ch); pp += 4; /* tx initial window size towards us */ lws_p32(pp, LWS_SSH_INITIAL_WINDOW); pp += 4; /* maximum packet size towards us */ lws_p32(pp, 800); pp += 4; lwsl_info("SSH_WT_CH_OPEN_CONF\n"); /* it's on the linked-list */ pss->ch_temp = NULL; goto pac; case SSH_WT_CH_FAILURE: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_OPEN_FAILURE; lws_p32(pp, ch->server_ch); pp += 4; lws_p32(pp, ch->sender_ch); pp += 4; lws_cstr(&pp, "reason", 64); lws_cstr(&pp, "en/US", 64); lwsl_info("SSH_WT_CH_FAILURE\n"); goto pac; case SSH_WT_CHRQ_SUCC: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_SUCCESS; lws_p32(pp, ch->server_ch); lwsl_info("SSH_WT_CHRQ_SUCC\n"); pp += 4; goto pac; case SSH_WT_CHRQ_FAILURE: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_FAILURE; lws_p32(pp, ch->server_ch); pp += 4; lwsl_info("SSH_WT_CHRQ_FAILURE\n"); goto pac; case SSH_WT_CH_CLOSE: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_CLOSE; lws_p32(pp, ch->server_ch); lwsl_info("SSH_WT_CH_CLOSE\n"); pp += 4; goto pac; case SSH_WT_CH_EOF: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_EOF; lws_p32(pp, ch->server_ch); lwsl_info("SSH_WT_CH_EOF\n"); pp += 4; goto pac; case SSH_WT_SCP_ACK_ERROR: case SSH_WT_SCP_ACK_OKAY: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_DATA; /* ps + 6 */ lws_p32(pp, ch->sender_ch); pp += 4; lws_p32(pp, 1); pp += 4; if (o == SSH_WT_SCP_ACK_ERROR) *pp++ = 2; else *pp++ = 0; lwsl_info("SSH_WT_SCP_ACK_OKAY\n"); goto pac; case SSH_WT_WINDOW_ADJUST: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_WINDOW_ADJUST; /* ps + 6 */ lws_p32(pp, ch->sender_ch); pp += 4; lws_p32(pp, 32768); pp += 4; lwsl_info("send SSH_MSG_CHANNEL_WINDOW_ADJUST\n"); goto pac; case SSH_WT_EXIT_STATUS: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_REQUEST; lws_p32(pp, ch->sender_ch); pp += 4; lws_p32(pp, 11); pp += 4; strcpy((char *)pp, "exit-status"); pp += 11; *pp++ = 0; lws_p32(pp, ch->retcode); pp += 4; lwsl_info("send SSH_MSG_CHANNEL_EXIT_STATUS\n"); goto pac; case SSH_WT_NONE: default: /* sending payload */ ch = ssh_get_server_ch(pss, 0); /* have a channel up to send on? */ if (!ch) break; if (!pss->vhd || !pss->vhd->ops) break; n = pss->vhd->ops->tx_waiting(ch->priv); if (n < 0) return -1; if (!n) /* nothing to send */ break; if (n == (LWS_STDOUT | LWS_STDERR)) { /* pick one using round-robin */ if (pss->serviced_stderr_last) n = LWS_STDOUT; else n = LWS_STDERR; } pss->serviced_stderr_last = !!(n & LWS_STDERR); /* stdout or stderr */ pp = ps + 5; if (n == LWS_STDOUT) *pp++ = SSH_MSG_CHANNEL_DATA; else *pp++ = SSH_MSG_CHANNEL_EXTENDED_DATA; /* ps + 6 */ lws_p32(pp, pss->ch_list->server_ch); m = 14; if (n == LWS_STDERR) { pp += 4; /* data type code... 1 for stderr payload */ lws_p32(pp, SSH_EXTENDED_DATA_STDERR); m = 18; } /* also skip another strlen u32 at + 10 / +14 */ pp += 8; /* ps + 14 / + 18 */ pp += pss->vhd->ops->tx(ch->priv, n, pp, &buf[sizeof(buf) - 1] - pp); lws_p32(ps + m - 4, lws_ptr_diff(pp, (ps + m))); if (pss->vhd->ops->tx_waiting(ch->priv) > 0) lws_callback_on_writable(wsi); ch->window -= lws_ptr_diff(pp, ps) - m; //lwsl_debug("our send window: %d\n", ch->window); /* fallthru */ pac: if (!pss->vhd) break; n = pad_and_encrypt(&buf[LWS_PRE], ps, pp, pss, 0); break; bail: lws_ua_destroy(pss); lws_kex_destroy(pss); return 1; } if (n > 0) { m = lws_write(wsi, (unsigned char *)buf + LWS_PRE, n, LWS_WRITE_HTTP); switch(o) { case SSH_WT_SEND_NEWKEYS: lwsl_info("Activating STC keys\n"); pss->active_keys_stc = pss->kex->keys_next_stc; lws_chacha_activate(&pss->active_keys_stc); pss->kex_state = KEX_STATE_CRYPTO_INITIALIZED; pss->kex->newkeys |= 1; if (pss->kex->newkeys == 3) lws_kex_destroy(pss); break; case SSH_WT_UA_PK_OK: free(ps1); break; case SSH_WT_CH_CLOSE: if (ch->received_close) { /* * We are sending this at the behest of * the remote peer... * we can destroy the channel with no * further communication. */ ssh_destroy_channel(pss, ch); break; } ch->sent_close = 1; break; } if (m < 0) { lwsl_err("ERR %d from write\n", m); goto bail; } if (o != SSH_WT_VERSION) pss->ssh_sequence_ctr_stc++; if (o != SSH_WT_NONE) pss->wt_tail = (pss->wt_tail + 1) & 7; } else if (o == SSH_WT_UA_PK_OK) /* free it either way */ free(ps1); ch = ssh_get_server_ch(pss, 0); if (pss->wt_head != pss->wt_tail || (ch && ch->priv && pss->vhd && pss->vhd->ops->tx_waiting(ch->priv))) lws_callback_on_writable(wsi); break; case LWS_CALLBACK_SSH_UART_SET_RXFLOW: /* * this is sent to set rxflow state on any connections that * sink on a particular sink. The sink index affected is in len * * More than one protocol may sink to the same uart, and the * protocol may select the sink itself, eg, in the URL used * to set up the connection. */ lwsl_notice("sshd LWS_CALLBACK_SSH_UART_SET_RXFLOW: wsi %p, %d\n", wsi, (int)len & 1); lws_rx_flow_control(wsi, len & 1); break; case LWS_CALLBACK_CGI: if (!pss) break; if (pss->vhd && pss->vhd->ops && pss->vhd->ops->child_process_io && pss->vhd->ops->child_process_io(pss->ch_temp->priv, pss->wsi, (struct lws_cgi_args *)in)) return -1; break; case LWS_CALLBACK_CGI_PROCESS_ATTACH: if (!pss) break; ch = ssh_get_server_ch(pss, pss->channel_doing_spawn); if (ch) { ch->spawn_pid = (int)len; /* child process PID */ lwsl_notice("associated PID %d to ch %d\n", (int)len, pss->channel_doing_spawn); } break; case LWS_CALLBACK_CGI_TERMINATED: if (!pss) break; if (pss->vhd && pss->vhd->ops && pss->vhd->ops->child_process_terminated) pss->vhd->ops->child_process_terminated(pss->ch_temp->priv, pss->wsi); /* * we have the child PID in len... we need to match it to a * channel that is on the wsi */ ch = pss->ch_list; while (ch) { if (ch->spawn_pid == len) { lwsl_notice("starting close of ch with PID %d\n", (int)len); ch->scheduled_close = 1; write_task(pss, ch, SSH_WT_CH_CLOSE); break; } ch = ch->next; } break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_LWS_RAW_SSHD { \ "lws-ssh-base", \ lws_callback_raw_sshd, \ sizeof(struct per_session_data__sshd), \ 1024, 0, NULL, 900 \ } LWS_VISIBLE const struct lws_protocols protocols_sshd[] = { LWS_PLUGIN_PROTOCOL_LWS_RAW_SSHD, { NULL, NULL, 0, 0, 0, NULL, 0 } /* terminator */ }; #if !defined (LWS_PLUGIN_STATIC) LWS_VISIBLE int init_protocol_lws_ssh_base(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols_sshd; c->count_protocols = LWS_ARRAY_SIZE(protocols_sshd); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_VISIBLE int destroy_protocol_lws_ssh_base(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/plugins/ssh-base/telnet.c000066400000000000000000000136461357643561300212310ustar00rootroot00000000000000/* * libwebsockets - lws-plugin-ssh-base * * Copyright (C) 2017 Andy Green * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation: * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ #include "libwebsockets.h" #include "lws-ssh.h" #include struct per_vhost_data__telnet { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__telnet *live_pss_list; const struct lws_ssh_ops *ops; }; struct per_session_data__telnet { struct per_session_data__telnet *next; struct per_vhost_data__telnet *vhd; uint32_t rx_tail; void *priv; uint32_t initial:1; char state; uint8_t cmd; }; enum { LTS_BINARY_XMIT, LTS_ECHO, LTS_SUPPRESS_GA, LTSC_SUBOPT_END = 240, LTSC_BREAK = 243, LTSC_SUBOPT_START = 250, LTSC_WILL = 251, LTSC_WONT, LTSC_DO, LTSC_DONT, LTSC_IAC, LTST_WAIT_IAC = 0, LTST_GOT_IAC, LTST_WAIT_OPT, }; static int telnet_ld(struct per_session_data__telnet *pss, uint8_t c) { switch (pss->state) { case LTST_WAIT_IAC: if (c == LTSC_IAC) { pss->state = LTST_GOT_IAC; return 0; } return 1; case LTST_GOT_IAC: pss->state = LTST_WAIT_IAC; switch (c) { case LTSC_BREAK: return 0; case LTSC_WILL: case LTSC_WONT: case LTSC_DO: case LTSC_DONT: pss->cmd = c; pss->state = LTST_WAIT_OPT; return 0; case LTSC_IAC: return 1; /* double IAC */ } return 0; /* ignore unknown */ case LTST_WAIT_OPT: lwsl_notice(" tld: cmd %d: opt %d\n", pss->cmd, c); pss->state = LTST_WAIT_IAC; return 0; } return 0; } static uint8_t init[] = { LTSC_IAC, LTSC_WILL, 3, LTSC_IAC, LTSC_WILL, 1, LTSC_IAC, LTSC_DONT, 1, LTSC_IAC, LTSC_DO, 0 }; static int lws_callback_raw_telnet(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__telnet *pss = (struct per_session_data__telnet *)user, **p; struct per_vhost_data__telnet *vhd = (struct per_vhost_data__telnet *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct lws_protocol_vhost_options *pvo = (const struct lws_protocol_vhost_options *)in; int n, m; uint8_t buf[LWS_PRE + 800], *pu = in; switch ((int)reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__telnet)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); while (pvo) { if (!strcmp(pvo->name, "ops")) vhd->ops = (const struct lws_ssh_ops *)pvo->value; pvo = pvo->next; } if (!vhd->ops) { lwsl_err("telnet pvo \"ops\" is mandatory\n"); return -1; } break; case LWS_CALLBACK_RAW_ADOPT: pss->next = vhd->live_pss_list; vhd->live_pss_list = pss; pss->vhd = vhd; pss->state = LTST_WAIT_IAC; pss->initial = 0; if (vhd->ops->channel_create) vhd->ops->channel_create(wsi, &pss->priv); lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RAW_CLOSE: p = &vhd->live_pss_list; while (*p) { if ((*p) == pss) { if (vhd->ops->channel_destroy) vhd->ops->channel_destroy(pss->priv); *p = pss->next; continue; } p = &((*p)->next); } break; case LWS_CALLBACK_RAW_RX: n = 0; /* this stuff is coming in telnet line discipline, we * have to strip IACs and process IAC repeats */ while (len--) { if (telnet_ld(pss, *pu)) buf[n++] = *pu++; else pu++; if (n > 100 || !len) pss->vhd->ops->rx(pss->priv, wsi, buf, n); } break; case LWS_CALLBACK_RAW_WRITEABLE: n = 0; if (!pss->initial) { memcpy(buf + LWS_PRE, init, sizeof(init)); n = sizeof(init); pss->initial = 1; } else { /* bring any waiting tx into second half of buffer * restrict how much we can send to 1/4 of the buffer, * because we have to apply telnet line discipline... * in the worst case of all 0xff, doubling the size */ pu = buf + LWS_PRE + 400; m = (int)pss->vhd->ops->tx(pss->priv, LWS_STDOUT, pu, ((int)sizeof(buf) - LWS_PRE - n - 401) / 2); /* * apply telnet line discipline and copy into place * in output buffer */ while (m--) { if (*pu == 0xff) buf[LWS_PRE + n++] = 0xff; buf[LWS_PRE + n++] = *pu++; } } if (n > 0) { m = lws_write(wsi, (unsigned char *)buf + LWS_PRE, n, LWS_WRITE_HTTP); if (m < 0) { lwsl_err("ERROR %d writing to di socket\n", m); return -1; } } if (vhd->ops->tx_waiting(&pss->priv)) lws_callback_on_writable(wsi); break; case LWS_CALLBACK_SSH_UART_SET_RXFLOW: /* * this is sent to set rxflow state on any connections that * sink on a particular uart. The uart index affected is in len * * More than one protocol may sink to the same uart, and the * protocol may select the uart itself, eg, in the URL used * to set up the connection. */ lws_rx_flow_control(wsi, len & 1); break; default: break; } return 0; } const struct lws_protocols protocols_telnet[] = { { "lws-telnetd-base", lws_callback_raw_telnet, sizeof(struct per_session_data__telnet), 1024, 0, NULL, 900 }, { NULL, NULL, 0, 0, 0, NULL, 0 } /* terminator */ }; libwebsockets-3.2.1/scripts/000077500000000000000000000000001357643561300160615ustar00rootroot00000000000000libwebsockets-3.2.1/scripts/attack.sh000077500000000000000000000524611357643561300176770ustar00rootroot00000000000000#!/bin/bash # # attack the test server and try to make it fall over # # Requires the library to have been built with # # cmake .. -DCMAKE_BUILD_TYPE=DEBUG -DLWS_WITH_MINIMAL_EXAMPLES=1 # # run it from the build dir echo echo "----------------------------------------------" echo "------- tests: lws attack.sh" echo SERVER=127.0.0.1 PORT=7681 LOG=/tmp/lwslog A=`which libwebsockets-test-server` INSTALLED=`dirname $A` SHAREDIR=$INSTALLED/../share/libwebsockets-test-server CORPUS=$SHAREDIR/test.html LWS_NC=./bin/lws-minimal-raw-netcat CPID= LEN=0 function check { kill -0 $CPID if [ $? -ne 0 ] ; then echo "(killed it) *******" exit 1 fi #dd if=$LOG bs=1 skip=$LEN 2>/dev/null if [ "$1" = "default" ] ; then diff /tmp/lwscap $CORPUS > /dev/null if [ $? -ne 0 ] ; then echo "FAIL: got something other than $CORPUS back" exit 1 fi fi if [ "$1" = "defaultplusforbidden" ] ; then cat $CORPUS > /tmp/plusforb echo -e -n "HTTP/1.0 403 Forbidden\x0d\x0acontent-type: text/html\x0d\x0acontent-length: 173\x0d\x0a\x0d\x0a

403

" >> /tmp/plusforb diff /tmp/lwscap /tmp/plusforb > /dev/null if [ $? -ne 0 ] ; then cat $CORPUS > /tmp/plusforb echo -e -n "HTTP/1.1 403 Forbidden\x0d\x0acontent-type: text/html\x0d\x0acontent-length: 173\x0d\x0a\x0d\x0a

403

" >> /tmp/plusforb diff /tmp/lwscap /tmp/plusforb > /dev/null if [ $? -ne 0 ] ; then echo "FAIL: got something other than $CORPUS + forbidden back" tail -n 10 /tmp/lwscap tail -n 100 $LOG exit 1 fi fi fi if [ "$1" = "forbidden" ] ; then if [ -z "`grep '

403

' /tmp/lwscap`" ] ; then echo "FAIL: should have told forbidden (test server has no dirs)" exit 1 fi fi if [ "$1" = "notfound" ] ; then if [ -z "`grep '

404

' /tmp/lwscap`" ] ; then echo "FAIL: should have told not found" exit 1 fi fi if [ "$1" = "rejected" ] ; then if [ -z "`grep '

404

' /tmp/lwscap`" ] ; then echo "FAIL: should have told forbidden (test server has no dirs)" exit 1 fi fi if [ "$1" = "media" ] ; then if [ -z "`grep '

404

' /tmp/lwscap`" ] ; then echo "FAIL: should have told unknown media type" exit 1 fi fi if [ "$1" == "0" ] ; then a="`dd if=$LOG bs=1 skip=$LEN 2>/dev/null |grep "get\ \ =" | tr -s ' ' | cut -d' ' -f4-`" if [ "$a" != "$2" ] ; then echo "URL path '$a' not $2" exit 1 fi fi if [ "$1" == "1" ] ; then a="`dd if=$LOG bs=1 skip=$LEN 2>/dev/null |grep URI\ Arg\ 1\: | tr -s ' ' | cut -d' ' -f7-`" if [ "$a" != "$2" ] ; then echo "Arg 1 '$a' not $2" exit 1 fi fi if [ "$1" == "2" ] ; then a="`dd if=$LOG bs=1 skip=$LEN 2>/dev/null |grep URI\ Arg\ 2\: | tr -s ' ' | cut -d' ' -f7-`" if [ "$a" != "$2" ] ; then echo "Arg 2 '$a' not $2" exit 1 fi fi if [ "$1" == "3" ] ; then a="`dd if=$LOG bs=1 skip=$LEN 2>/dev/null |grep URI\ Arg\ 3\: | tr -s ' ' | cut -d' ' -f7-`" if [ "$a" != "$2" ] ; then echo "Arg 3 '$a' not $2" exit 1 fi fi if [ -z "$1" ] ; then LEN=`stat $LOG -c %s` fi } rm -rf $LOG killall libwebsockets-test-server 2>/dev/null libwebsockets-test-server -d15 2>> $LOG >/dev/null & CPID=$! echo "Started server on PID $CPID" while [ -z "`grep ort\ 7681 $LOG`" ] ; do sleep 0.5s done check echo echo "---- /cgi-bin/settingsjs?UPDATE_SETTINGS=1&Root_Channels_1_Channel_name_http_post=%3F&Root_Channels_1_Channel_location_http_post=%3F" rm -f /tmp/lwscap echo -n -e "GET /cgi-bin/settingsjs?UPDATE_SETTINGS=1&Root_Channels_1_Channel_name_http_post=%3F&Root_Channels_1_Channel_location_http_post=%3F HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap cat /tmp/lwscap check 1 "UPDATE_SETTINGS=1" check 2 "Root_Channels_1_Channel_name_http_post=?" check 3 "Root_Channels_1_Channel_location_http_post=?" check echo echo "---- ? processing (/cgi-bin/settings.js?key1=value1)" rm -f /tmp/lwscap echo -n -e "GET /cgi-bin/settings.js?key1=value1 HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check 1 "key1=value1" check echo echo "---- ? processing (/t%3dest?key1%3d2=value1)" rm -f /tmp/lwscap echo -n -e "GET /t%3dest?key1%3d2=value1 HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check 0 "/t=est" check 1 "key1_2=value1" check echo echo "---- ? processing (%2f%2e%2e%2f%2e./xxtest.html?arg=1)" rm -f /tmp/lwscap echo -n -e "GET %2f%2e%2e%2f%2e./xxtest.html?arg=1 HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check 1 "arg=1" check echo echo "---- ? processing (%2f%2e%2e%2f%2e./xxtest.html?arg=/../.)" rm -f /tmp/lwscap echo -n -e "GET %2f%2e%2e%2f%2e./xxtest.html?arg=/../. HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check 1 "arg=/../." check echo echo "---- spam enough crap to not be GET" echo "not GET" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null > /tmp/lwscap check echo echo "---- spam more than the name buffer of crap" dd if=/dev/urandom bs=1 count=80 2>/dev/null | $LWS_NC --server $SERVER --port $PORT 2>/dev/null > /tmp/lwscap check echo echo "---- spam 10MB of crap" dd if=/dev/urandom bs=1 count=655360 | $LWS_NC --server $SERVER --port $PORT 2>/dev/null > /tmp/lwscap check echo echo "---- malformed URI" echo "GET nonsense................................................................................................................" \ | $LWS_NC --server $SERVER --port $PORT 2>/dev/null > /tmp/lwscap check echo echo "---- missing URI" echo -n -e "GET HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null >/tmp/lwscap check echo echo "---- repeated method" echo -n -e "GET blah HTTP/1.0\x0d\x0aGET blah HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null >/tmp/lwscap check echo echo "---- crazy header name part" echo -n -e "GET blah HTTP/1.0\x0d\x0a................................................................................................................" \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ | $LWS_NC --server $SERVER --port $PORT 2>/dev/null check echo echo "---- excessive uri content" echo -n -e "GET ................................................................................................................" \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ | $LWS_NC --server $SERVER --port $PORT 2>/dev/null check echo echo "---- good request but http payload coming too (test.html served then forbidden)" echo -n -e "GET /test.html HTTP/1.1\x0d\x0a\x0d\x0aILLEGAL-PAYLOAD........................................" \ | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check defaultplusforbidden check echo echo "---- nonexistent file" rm -f /tmp/lwscap echo -n -e "GET /nope HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap cat /tmp/lwscap check notfound check echo echo "---- relative uri path" rm -f /tmp/lwscap echo -n -e "GET nope HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check forbidden check echo echo "---- directory attack 1 (/../../../../etc/passwd should be /etc/passswd)" rm -f /tmp/lwscap echo -n -e "GET /../../../../etc/passwd HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check notfound check echo echo "---- directory attack 2 (/../ should be /)" rm -f /tmp/lwscap echo -e -n "GET /../ HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check default check echo echo "---- directory attack 3 (/./ should be /)" rm -f /tmp/lwscap echo -e -n "GET /./ HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check default check echo echo "---- directory attack 4 (/blah/.. should be /)" rm -f /tmp/lwscap echo -e -n "GET /blah/.. HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check default check echo echo "---- directory attack 5 (/blah/../ should be /)" rm -f /tmp/lwscap echo -e -n "GET /blah/../ HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check default check echo echo "---- directory attack 6 (/blah/../. should be /)" rm -f /tmp/lwscap echo -e -n "GET /blah/../. HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check default check echo echo "---- directory attack 7 (/%2e%2e%2f../../../etc/passwd should be /etc/passswd)" rm -f /tmp/lwscap echo -e -n "GET /%2e%2e%2f../../../etc/passwd HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check notfound check echo echo "---- directory attack 8 (%2f%2e%2e%2f%2e./.%2e/.%2e%2fetc/passwd should be /etc/passswd)" rm -f /tmp/lwscap echo -e -n "GET %2f%2e%2e%2f%2e./.%2e/.%2e%2fetc/passwd HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check notfound check echo echo "---- http/1.1 pipelining" rm -f /tmp/lwscap wget -O/tmp/lwsdump http://localhost:7681/test.html http://localhost:7681/test.html http://localhost:7681/test.html http://localhost:7681/test.html http://localhost:7681/test.html http://localhost:7681/test.html http://localhost:7681/test.html http://localhost:7681/test.html 2>&1 | grep "Downloaded: 8 files" > /tmp/lwscap good=`cat $CORPUS $CORPUS $CORPUS $CORPUS $CORPUS $CORPUS $CORPUS $CORPUS | md5sum | cut -d' ' -f1` if [ "$good" != "`md5sum /tmp/lwsdump | cut -d' ' -f 1`" ] ; then echo "FAIL: mismatched content good=$good received=`md5sum /tmp/lwsdump`" exit 1 fi echo echo "---- mass testing uri variations" rm -f /tmp/results for i in \ /..../ \ /.../. \ /...// \ /.../a \ /.../w \ "/.../?" \ /.../% \ /../.. \ /.././ \ /../.a \ /../.w \ /../.. \ /../.% \ /..//. \ /../// \ /..//a \ /..//w \ "/..//?" \ /..//% \ /../a. \ /../a/ \ /../aa \ /../aw \ /../a? \ /../a% \ /../w. \ /../w/ \ /../wa \ /../ww \ /../w? \ /../w% \ /../?. \ /../?/ \ /../?a \ /../?w \ /../?? \ /../?% \ /../%. \ /../%/ \ /../%a \ /../%w \ /../%? \ /../%% \ /./... \ /./../ \ /./..a \ /./..w \ /./..? \ /./..% \ /.//.. \ /.a../ \ /.a/.. \ /.w../ \ /.w/.. \ /.?../ \ /../.. \ /.%../ \ /.%/.. \ //.... \ //.../ \ //...a \ //...w \ //...? \ //...% \ //../. \ //..// \ //../a \ //../w \ //../? \ //../% \ //..a. \ //..a/ \ //..aa \ //..aw \ //..a? \ //..a% \ //..w. \ //..w/ \ //..wa \ //..ww \ //..w? \ //..w% \ //..?. \ //..?/ \ //..?a \ //..?w \ //..?? \ //..?% \ //..%. \ //..%/ \ //..%a \ //..%w \ //..%? \ //..%% \ //./.. \ ///... \ ///../ \ ///..a \ ///..w \ ///..? \ ///..% \ ////.. \ //a../ \ //a/.. \ //w../ \ //w/.. \ //?../ \ //?/.. \ //%../ \ //%/.. \ /a.../ \ /a../. \ /a..// \ /a../a \ /a../w \ /a../? \ /a../% \ /a./.. \ /a/... \ /a/../ \ /a/..a \ /a/..w \ /a/..? \ /a/..% \ /a//.. \ /aa../ \ /aa/.. \ /aw../ \ /aw/.. \ /a?../ \ /a?/.. \ /a%../ \ /a%/.. \ /w.../ \ /w../. \ /w..// \ /w../a \ /w../w \ /w../? \ /w../% \ /w./.. \ /w/... \ /w/../ \ /w/..a \ /w/..w \ /w/..? \ /w/..% \ /w//.. \ /wa../ \ /wa/.. \ /ww../ \ /ww/.. \ /w?../ \ /w?/.. \ /w%../ \ /w%/.. \ /?.../ \ /?../. \ /?..// \ /?../a \ /?../w \ /?../? \ /?../% \ /?./.. \ /?/... \ /?/../ \ /?/..a \ /?/..w \ /?/..? \ /?/..% \ /?//.. \ /?a../ \ /?a/.. \ /?w../ \ /?w/.. \ /??../ \ /??/.. \ /?%../ \ /?%/.. \ /%.../ \ /%../. \ /%..// \ /%../a \ /%../w \ /%../? \ /%../% \ /%./.. \ /%/... \ /%/../ \ /%/..a \ /%/..w \ /%/..? \ /%/..% \ /%//.. \ /%a../ \ /%a/.. \ /%w../ \ /%w/.. \ /%?../ \ /%?/.. \ /%%../ \ /%%/.. \ /a/w/../a \ /path/to/dir/../other/dir \ ; do LEN=`stat $LOG -c %s` rm -f /tmp/lwscap1 echo -n -e "GET $i HTTP/1.0\r\n\r\n" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null > /tmp/lwscap1 R=`cat /tmp/lwscap1| head -n 1 | cut -d' ' -f 2` #cat $LOG #echo ==== $R if [ "$R" != "403" ]; then U=`dd if=$LOG bs=1 skip=$LEN 2>/dev/null| grep "Method:" | tr -s ' ' | cut -d"'" -f4` #dd if=$LOG bs=1 skip=$LEN 2>/dev/null echo "- \"$i\" -> $R \"$U\"" >>/tmp/results else echo "- \"$i\" -> $R" >>/tmp/results fi done cat </tmp/lwsresult1 - "/..../" -> 404 "/..../" - "/.../." -> 404 "/.../" - "/...//" -> 404 "/.../" - "/.../a" -> 404 "/.../a" - "/.../w" -> 404 "/.../w" - "/.../?" -> 404 "/.../" - "/.../%" -> 403 - "/../.." -> 200 "/" - "/.././" -> 200 "/" - "/../.a" -> 404 "/.a" - "/../.w" -> 404 "/.w" - "/../.." -> 200 "/" - "/../.%" -> 403 - "/..//." -> 200 "/" - "/..///" -> 200 "/" - "/..//a" -> 404 "/a" - "/..//w" -> 404 "/w" - "/..//?" -> 200 "/" - "/..//%" -> 403 - "/../a." -> 404 "/a." - "/../a/" -> 404 "/a/" - "/../aa" -> 404 "/aa" - "/../aw" -> 404 "/aw" - "/../a?" -> 404 "/a" - "/../a%" -> 403 - "/../w." -> 404 "/w." - "/../w/" -> 404 "/w/" - "/../wa" -> 404 "/wa" - "/../ww" -> 404 "/ww" - "/../w?" -> 404 "/w" - "/../w%" -> 403 - "/../?." -> 200 "/" - "/../?/" -> 200 "/" - "/../?a" -> 200 "/" - "/../?w" -> 200 "/" - "/../??" -> 200 "/" - "/../?%" -> 403 - "/../%." -> 403 - "/../%/" -> 403 - "/../%a" -> 403 - "/../%w" -> 403 - "/../%?" -> 403 - "/../%%" -> 403 - "/./..." -> 404 "/..." - "/./../" -> 200 "/" - "/./..a" -> 404 "/..a" - "/./..w" -> 404 "/..w" - "/./..?" -> 200 "/" - "/./..%" -> 403 - "/.//.." -> 200 "/" - "/.a../" -> 404 "/.a../" - "/.a/.." -> 200 "/" - "/.w../" -> 404 "/.w../" - "/.w/.." -> 200 "/" - "/.?../" -> 404 "/." - "/../.." -> 200 "/" - "/.%../" -> 403 - "/.%/.." -> 403 - "//...." -> 404 "/...." - "//.../" -> 404 "/.../" - "//...a" -> 404 "/...a" - "//...w" -> 404 "/...w" - "//...?" -> 404 "/..." - "//...%" -> 403 - "//../." -> 200 "/" - "//..//" -> 200 "/" - "//../a" -> 404 "/a" - "//../w" -> 404 "/w" - "//../?" -> 200 "/" - "//../%" -> 403 - "//..a." -> 404 "/..a." - "//..a/" -> 404 "/..a/" - "//..aa" -> 404 "/..aa" - "//..aw" -> 404 "/..aw" - "//..a?" -> 404 "/..a" - "//..a%" -> 403 - "//..w." -> 404 "/..w." - "//..w/" -> 404 "/..w/" - "//..wa" -> 404 "/..wa" - "//..ww" -> 404 "/..ww" - "//..w?" -> 404 "/..w" - "//..w%" -> 403 - "//..?." -> 200 "/" - "//..?/" -> 200 "/" - "//..?a" -> 404 "/a" - "//..?w" -> 404 "/w" - "//..??" -> 200 "/" - "//..?%" -> 403 - "//..%." -> 403 - "//..%/" -> 403 - "//..%a" -> 403 - "//..%w" -> 403 - "//..%?" -> 403 - "//..%%" -> 403 - "//./.." -> 200 "/" - "///..." -> 404 "/..." - "///../" -> 200 "/" - "///..a" -> 404 "/..a" - "///..w" -> 404 "/..w" - "///..?" -> 200 "/" - "///..%" -> 403 - "////.." -> 200 "/" - "//a../" -> 404 "/a../" - "//a/.." -> 200 "/" - "//w../" -> 404 "/w../" - "//w/.." -> 200 "/" - "//?../" -> 200 "/" - "//?/.." -> 200 "/" - "//%../" -> 403 - "//%/.." -> 403 - "/a.../" -> 404 "/a.../" - "/a../." -> 404 "/a../" - "/a..//" -> 404 "/a../" - "/a../a" -> 404 "/a../a" - "/a../w" -> 404 "/a../w" - "/a../?" -> 404 "/a../" - "/a../%" -> 403 - "/a./.." -> 200 "/" - "/a/..." -> 404 "/a/..." - "/a/../" -> 200 "/" - "/a/..a" -> 404 "/a/..a" - "/a/..w" -> 404 "/a/..w" - "/a/..?" -> 200 "/" - "/a/..%" -> 403 - "/a//.." -> 200 "/" - "/aa../" -> 404 "/aa../" - "/aa/.." -> 200 "/" - "/aw../" -> 404 "/aw../" - "/aw/.." -> 200 "/" - "/a?../" -> 404 "/a" - "/a?/.." -> 404 "/a" - "/a%../" -> 403 - "/a%/.." -> 403 - "/w.../" -> 404 "/w.../" - "/w../." -> 404 "/w../" - "/w..//" -> 404 "/w../" - "/w../a" -> 404 "/w../a" - "/w../w" -> 404 "/w../w" - "/w../?" -> 404 "/w../" - "/w../%" -> 403 - "/w./.." -> 200 "/" - "/w/..." -> 404 "/w/..." - "/w/../" -> 200 "/" - "/w/..a" -> 404 "/w/..a" - "/w/..w" -> 404 "/w/..w" - "/w/..?" -> 200 "/" - "/w/..%" -> 403 - "/w//.." -> 200 "/" - "/wa../" -> 404 "/wa../" - "/wa/.." -> 200 "/" - "/ww../" -> 404 "/ww../" - "/ww/.." -> 200 "/" - "/w?../" -> 404 "/w" - "/w?/.." -> 404 "/w" - "/w%../" -> 403 - "/w%/.." -> 403 - "/?.../" -> 200 "/" - "/?../." -> 200 "/" - "/?..//" -> 200 "/" - "/?../a" -> 200 "/" - "/?../w" -> 200 "/" - "/?../?" -> 200 "/" - "/?../%" -> 403 - "/?./.." -> 200 "/" - "/?/..." -> 200 "/" - "/?/../" -> 200 "/" - "/?/..a" -> 200 "/" - "/?/..w" -> 200 "/" - "/?/..?" -> 200 "/" - "/?/..%" -> 403 - "/?//.." -> 200 "/" - "/?a../" -> 200 "/" - "/?a/.." -> 200 "/" - "/?w../" -> 200 "/" - "/?w/.." -> 200 "/" - "/??../" -> 200 "/" - "/??/.." -> 200 "/" - "/?%../" -> 403 - "/?%/.." -> 403 - "/%.../" -> 403 - "/%../." -> 403 - "/%..//" -> 403 - "/%../a" -> 403 - "/%../w" -> 403 - "/%../?" -> 403 - "/%../%" -> 403 - "/%./.." -> 403 - "/%/..." -> 403 - "/%/../" -> 403 - "/%/..a" -> 403 - "/%/..w" -> 403 - "/%/..?" -> 403 - "/%/..%" -> 403 - "/%//.." -> 403 - "/%a../" -> 403 - "/%a/.." -> 403 - "/%w../" -> 403 - "/%w/.." -> 403 - "/%?../" -> 403 - "/%?/.." -> 403 - "/%%../" -> 403 - "/%%/.." -> 403 - "/a/w/../a" -> 404 "/a/a" - "/path/to/dir/../other/dir" -> 404 "/path/to/other/dir" EOF if [ "`md5sum /tmp/results | cut -d' ' -f 1`" != "`md5sum /tmp/lwsresult1 | cut -d' ' -f1`" ] ; then echo "Differences..." diff -urN /tmp/lwsresult1 /tmp/results exit 1 else echo "OK" fi echo echo "--- survived OK ---" kill -2 $CPID exit 0 # coverage... # run the test client against mirror for one period and exit killall libwebsockets-test-server 2>/dev/null libwebsockets-test-server -s 2>> $LOG & CPID=$! sleep 1s libwebsockets-test-client 127.0.0.1 -s -O # https://github.com/curl/curl/issues/1587 curl -v -F text=hello -F send=SEND -F upload=@../README.md https://127.0.0.1:7681/formtest -k kill -2 $CPID exit 0 libwebsockets-3.2.1/scripts/autobahn-test-client.sh000077500000000000000000000046671357643561300224670ustar00rootroot00000000000000#!/bin/bash # # Requires pip install autobahntestsuite # # you should run this from ./build, after building with # cmake .. -DLWS_WITH_MINIMAL_EXAMPLES=1 # # It will use the minimal echo client and server to run # autobahn ws tests as both client and server. echo echo "----------------------------------------------" echo "------- tests: autobahn as client" echo set -u PARALLEL=1 N=1 OS=`uname` CLIE=bin/lws-minimal-ws-client-echo SERV=bin/lws-minimal-ws-server-echo RESULT=0 which wstest 2>/dev/null if [ $? -ne 0 ]; then echo "wstest is not installed" exit 8 fi killall wstest 2>/dev/null # # 2.10 / 2.11: There is no requirement to handle multiple PING / PONG # in flight in RFC6455. lws doesn't waste memory on it # since it is useless. # # 12.3.1 / 12.3.2 # 12.4.* / 12.5.*: Autobahn has been broken for these tests since Aug 2017 # https://github.com/crossbario/autobahn-testsuite/issues/71 cat << EOF >fuzzingserver.json { "url": "ws://127.0.0.1:9001", "outdir": "./reports/clients", "cases": ["*"], "exclude-cases": [ "2.10", "2.11", "12.3.1", "12.3.2", "12.4.*", "12.5.*"], "exclude-agent-cases": {} } EOF PYTHONHASHSEED=0 wstest -m fuzzingserver & Q=$! sleep 2s ps -p $Q > /dev/null if [ $? -ne 0 ] ; then echo "Problem with autobahn wstest install" exit 9 fi # 1) lws-as-client tests first ok=1 while [ $ok -eq 1 ] ; do $CLIE -s 127.0.0.1 -p 9001 -u "/runCase?case=$N&agent=libwebsockets" -d3 if [ $? -ne 0 ]; then ok=0 fi N=$(( $N + 1 )) done # generate the report in ./reports # $CLIE -s 127.0.0.1 -p 9001 -u "/updateReports?agent=libwebsockets" -o -d3 sleep 2s killall wstest sleep 1s # this squashes the results into single lines like # # "9.8.4": { "behavior": "OK", "behaviorClose": "OK", "duration": 1312, "remoteCloseCode": 1000, "reportfile": "libwebsockets_case_9_8_4.json" cat reports/clients/index.json | tr '\n' '!' | sed "s|\},\!|\n|g" | tr '!' ' ' | tr -s ' ' > /tmp/ji echo -n "AUTOBAHN SERVER / LWS CLIENT: Total tests: " `cat /tmp/ji | wc -l` " : " R="`cat /tmp/ji | grep -v '"behavior": "OK"' | grep -v '"behavior": "NON-STRICT"' | grep -v '"behavior": "INFORMATIONAL"' | wc -l`" if [ "$R" == "0" ] ; then echo "All pass" else RESULT=1 echo -n "$R FAIL : " cat /tmp/ji | grep -v '"behavior": "OK"' | grep -v '"behavior": "NON-STRICT"' | grep -v '"behavior": "INFORMATIONAL"' | cut -d\" -f2 | tr '\n' ',' echo fi echo $RESULT exit $RESULT libwebsockets-3.2.1/scripts/autobahn-test-server.sh000077500000000000000000000043731357643561300225110ustar00rootroot00000000000000#!/bin/bash # # Requires pip install autobahntestsuite # # you should run this from ./build, after building with # cmake .. -DLWS_WITH_MINIMAL_EXAMPLES=1 # # It will use the minimal echo client and server to run # autobahn ws tests as both client and server. set -u PARALLEL=2 N=1 OS=`uname` CLIE=bin/lws-minimal-ws-client-echo SERV=bin/lws-minimal-ws-server-echo RESULT=0 which wstest 2>/dev/null if [ $? -ne 0 ]; then echo "wstest is not installed" exit 8 fi killall wstest 2>/dev/null # # 2.10 / 2.11: There is no requirement to handle multiple PING / PONG # in flight on a single connection in RFC6455. lws doesn't # waste memory on supporting it since it is useless. cat << EOF >fuzzingclient.json { "outdir": "./reports/servers", "servers": [ { "url": "ws://127.0.0.1:9001" } ], "cases": [ "12.2.13" ], "exclude-cases": ["2.10", "2.11" ], "exclude-agent-cases": {} } EOF echo echo "----------------------------------------------" echo "------- tests: autobahn as server" echo $SERV -p 9001 -d3 & wstest -m fuzzingclient R=$? echo "Autobahn client exit $R" killall lws-minimal-ws-server-echo sleep 1s # repeat the client results R=`cat /tmp/ji | grep -v '"behavior": "OK"' | grep -v '"behavior": "NON-STRICT"' | grep -v '"behavior": "INFORMATIONAL"' | wc -l` echo -n "AUTOBAHN SERVER / LWS CLIENT: Total tests: " `cat /tmp/ji | wc -l` " : " if [ "$R" == "0" ] ;then echo "All pass" else RESULT=1 echo -n "$R FAIL : " cat /tmp/ji | grep -v '"behavior": "OK"' | grep -v '"behavior": "NON-STRICT"' | grep -v '"behavior": "INFORMATIONAL"' | cut -d\" -f2 | tr '\n' ',' echo fi # and then the server results cat reports/servers/index.json | tr '\n' '!' | sed "s|\},\!|\n|g" | tr '!' ' ' | tr -s ' ' > /tmp/jis R=`cat /tmp/jis | grep -v '"behavior": "OK"' | grep -v '"behavior": "NON-STRICT"' | grep -v '"behavior": "INFORMATIONAL"' | wc -l` echo -n "AUTOBAHN CLIENT / LWS SERVER: Total tests: " `cat /tmp/jis | wc -l` " : " if [ "$R" == "0" ] ;then echo "All pass" else RESULT=$(( $RESULT + 2 )) echo -n "$R FAIL : " cat /tmp/jis | grep -v '"behavior": "OK"' | grep -v '"behavior": "NON-STRICT"' | grep -v '"behavior": "INFORMATIONAL"' | cut -d\" -f2 | tr '\n' ',' echo fi echo $RESULT exit $RESULT libwebsockets-3.2.1/scripts/build-gcov.sh000077500000000000000000000002171357643561300204530ustar00rootroot00000000000000#!/bin/sh cmake .. -DLWS_WITH_GCOV=1 && \ make clean && \ rm -f `find . -name "*.gcno" -o -name "*.gcda"` && \ make -j16 && sudo make install libwebsockets-3.2.1/scripts/client-ca/000077500000000000000000000000001357643561300177205ustar00rootroot00000000000000libwebsockets-3.2.1/scripts/client-ca/certindex.txt000066400000000000000000000000001357643561300224340ustar00rootroot00000000000000libwebsockets-3.2.1/scripts/client-ca/create-ca.sh000077500000000000000000000002551357643561300221050ustar00rootroot00000000000000#!/bin/sh openssl genrsa -out ca.key 2048 && \ printf "\\n\\n\\n\\n\\n\\n\\n" | \ openssl req -config tmp.cnf -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.pem libwebsockets-3.2.1/scripts/client-ca/create-client-cert.sh000077500000000000000000000007021357643561300237300ustar00rootroot00000000000000#!/bin/sh if [ -z "$1" ] ; then echo "Usage $0 " exit 1 fi openssl genrsa -out $1.key 4096 && \ printf "\\n\\n\\n\\n\\nlocalhost\\n\\n1234\\n\\n" | \ openssl req -config tmp.cnf -new -key $1.key -out $1.csr && \ openssl ca -config tmp.cnf \ -keyfile ca.key \ -cert ca.pem \ -extensions usr_cert \ -days 375 \ -notext \ -md sha256 \ -in $1.csr \ -out $1.pem && \ openssl pkcs12 -export -in $1.pem -inkey $1.key -out $1.p12 libwebsockets-3.2.1/scripts/client-ca/create-server-cert.sh000077500000000000000000000006041357643561300237610ustar00rootroot00000000000000#!/bin/sh if [ -z "$1" ] ; then echo "Usage $0 " exit 1 fi openssl genrsa -out $1.key 4096 && \ printf "\\n\\n\\n\\n\\nlocalhost\\n\\n1234\\n\\n" | \ openssl req -config tmp.cnf -new -key $1.key -out $1.csr && \ openssl ca -config tmp.cnf \ -keyfile ca.key \ -cert ca.pem \ -extensions server_cert \ -days 375 \ -notext \ -md sha256 \ -in $1.csr \ -out $1.pem libwebsockets-3.2.1/scripts/client-ca/serial000066400000000000000000000000071357643561300211170ustar00rootroot00000000000000100003 libwebsockets-3.2.1/scripts/client-ca/tmp.cnf000066400000000000000000000040211357643561300212050ustar00rootroot00000000000000# # OpenSSL configuration file. # # Establish working directory. dir = . [ ca ] default_ca = CA_default [ CA_default ] serial = $dir/serial database = $dir/certindex.txt new_certs_dir = $dir/certs certificate = $dir/cacert.pem private_key = $dir/private/cakey.pem default_days = 365 default_md = sha256 preserve = no email_in_dn = no nameopt = default_ca certopt = default_ca policy = policy_match [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional [ usr_cert ] [ server_cert ] [ req ] default_bits = 4096 # Size of keys default_keyfile = key.pem # name of generated keys default_md = sha256 # message digest algorithm string_mask = nombstr # permitted characters distinguished_name = req_distinguished_name req_extensions = v3_req [ req_distinguished_name ] # Variable name Prompt string #------------------------- ---------------------------------- 0.organizationName = Organization Name (company) organizationalUnitName = Organizational Unit Name (department, division) emailAddress = Email Address emailAddress_max = 40 localityName = Locality Name (city, district) stateOrProvinceName = State or Province Name (full name) countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 commonName = Common Name (hostname, IP, or your name) commonName_max = 64 # Default values for the above, for consistency and less typing. # Variable name Value #------------------------ ------------------------------ 0.organizationName_default = libwebsockets-test localityName_default = Xiaobitan stateOrProvinceName_default = Taipei countryName_default = TW emailAddress = none@invalid [ v3_ca ] basicConstraints = CA:TRUE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always [ v3_req ] basicConstraints = CA:FALSE subjectKeyIdentifier = hash libwebsockets-3.2.1/scripts/esp32.mk000066400000000000000000000120501357643561300173440ustar00rootroot00000000000000# # LWS-style images are composed like this # # [ OTA or Factory standard xpressif image ] # [ 32-b LE len ] [ ROMFS ] # [ 32-b LE len ] [ Image information JSON ] # SHELL=/bin/bash # check genromfs is available GENROMFS := $(shell command -v genromfs 2> /dev/null) # check xxd is available XXD := $(shell command -v xxd 2> /dev/null) ESPPORT ?= $(CONFIG_ESPTOOLPY_PORT) LWS_BUILD_PATH=$(PROJECT_PATH)/build jbi=$(LWS_BUILD_PATH)/json-buildinfo FAC=$(CONFIG_LWS_IS_FACTORY_APPLICATION) ifeq ($(FAC),) FAC=0 endif export FAC $(LWS_BUILD_PATH)/pack.img: $(APP_BIN) if [ -z "$(GENROMFS)" ]; then \ echo "ERROR: genromfs is unavailable, please install or compile genromfs" ; \ exit 1 ; \ fi; \ if [ -z "$(XXD)" ]; then \ echo "ERROR: xxd is unavailable, please install or compile xxd (usually provided by vim package)" ; \ exit 1 ; \ fi; \ GNUSTAT=stat ;\ if [ `which gstat 2>/dev/null` ] ; then GNUSTAT=gstat ; fi ;\ genromfs -f $(LWS_BUILD_PATH)/romfs.img -d $(PROJECT_PATH)/romfs-files ; \ RLEN=$$($$GNUSTAT -c %s $(LWS_BUILD_PATH)/romfs.img) ;\ LEN=$$($$GNUSTAT -c %s $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin) ;\ printf " Original length: 0x%06x (%8d)\n" $$LEN $$LEN ; \ printf %02x $$(( $$RLEN % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ printf %02x $$(( ( $$RLEN / 256 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ printf %02x $$(( ( $$RLEN / 65536 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ printf %02x $$(( ( $$RLEN / 16777216 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ cat $(LWS_BUILD_PATH)/romfs.img >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ; \ LEN=$$($$GNUSTAT -c %s $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin) ;\ UNIXTIME=$$(date +%s | tr -d '\n') ; \ echo -n -e "{\r\n \"schema\": \"lws1\",\r\n \"model\": \"$(CONFIG_LWS_MODEL_NAME)\",\r\n \"builder\": \"" > $(jbi) ;\ hostname | tr -d '\n' >> $(jbi) ;\ echo -n -e "\",\r\n \"app\": \"" >> $(jbi) ;\ echo -n $(PROJECT_NAME) >> $(jbi) ;\ echo -n -e "\",\r\n \"user\": \"" >> $(jbi) ;\ whoami | tr -d '\n' >>$(jbi) ;\ echo -n -e "\",\r\n \"git\": \"" >> $(jbi) ;\ git describe --dirty --always | tr -d '\n' >> $(jbi) ;\ echo -n -e "\",\r\n \"date\": \"" >> $(jbi) ;\ date | tr -d '\n' >> $(jbi) ;\ echo -n -e "\",\r\n \"unixtime\": \"" >> $(jbi) ;\ echo -n $$UNIXTIME >> $(jbi) ;\ echo -n -e "\",\r\n \"file\": \""$(PROJECT_NAME)-$$UNIXTIME.bin >> $(jbi) ;\ echo -n -e "\",\r\n \"factory\": \"$(FAC)" >> $(jbi) ;\ echo -n -e "\"\r\n}" >> $(jbi) ;\ JLEN=$$($$GNUSTAT -c %s $(jbi)) ;\ printf %02x $$(( $$JLEN % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ printf %02x $$(( ( $$JLEN / 256 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ printf %02x $$(( ( $$JLEN / 65536 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ printf %02x $$(( ( $$JLEN / 16777216 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ cat $(jbi) >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ cp $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin $(LWS_BUILD_PATH)/pack.img ;\ LEN=$$($$GNUSTAT -c %s $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin) ;\ cp $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin $(LWS_BUILD_PATH)/$(PROJECT_NAME)-$$UNIXTIME.bin ;\ printf " After ROMFS + Build info: 0x%06x (%8d)\n" $$LEN $$LEN .PHONY: manifest manifest: ifeq ($F,) echo "Usage make F= A= manifest" exit 1 endif ifeq ($A,) echo "Usage make F= A= manifest" exit 1 endif echo -n -e "{\r\n\"app\": " > build/manifest.json cat $(A)/build/json-buildinfo >> build/manifest.json echo -n -e ", \"factory\": " >> build/manifest.json cat $(F)/build/json-buildinfo >> build/manifest.json echo -n -e "\r\n}\r\n" >> build/manifest.json all: $(LWS_BUILD_PATH)/pack.img flash: $(LWS_BUILD_PATH)/pack.img lws_flash_ota: $(LWS_BUILD_PATH)/pack.img $(IDF_PATH)/components/esptool_py/esptool/esptool.py \ --chip esp32 \ --port $(ESPPORT) \ --baud $(CONFIG_ESPTOOLPY_BAUD) \ write_flash 0x120000 $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin lws_erase_ota: $(IDF_PATH)/components/esptool_py/esptool/esptool.py \ --chip esp32 \ --port $(ESPPORT) \ --baud $(CONFIG_ESPTOOLPY_BAUD) \ erase_region 0x120000 0x2e0000 export A export F .PHONY: upload upload: manifest ifeq ($F,) echo "Usage make F= A= manifest" exit 1 endif ifeq ($A,) echo "Usage make F= A= manifest" exit 1 endif UPL=$(CONFIG_LWS_OTA_SERVER_UPLOAD_USER)@$(CONFIG_LWS_OTA_SERVER_FQDN):$(CONFIG_LWS_OTA_SERVER_UPLOAD_PATH)/$(CONFIG_LWS_OTA_SERVER_BASE_URL)/$(CONFIG_LWS_MODEL_NAME)/ ;\ AFILE=$(A)/build/$$(cat $$A/build/json-buildinfo | grep -- \"file\"\: |cut -d' ' -f3 |cut -d'"' -f2) ;\ echo " Uploading $$AFILE to " $$UPL ;\ scp $$AFILE $$UPL ;\ FFILE=$(F)/build/$$(cat $$F/build/json-buildinfo | grep -- \"file\"\: |cut -d' ' -f3 |cut -d'"' -f2) ;\ echo " Uploading $$FFILE" ;\ scp $$FFILE $$UPL ;\ echo " Uploading manifest" ;\ scp build/manifest.json $$UPL libwebsockets-3.2.1/scripts/gcov.sh000077500000000000000000000001261357643561300173550ustar00rootroot00000000000000#!/bin/sh gcov `find . -name *.c.gcno | grep -v test-apps` -b | sed "/\.h.\$/,/^$/d" libwebsockets-3.2.1/scripts/h2load-smp.sh000077500000000000000000000016571357643561300203770ustar00rootroot00000000000000#!/bin/bash # # run from the build dir echo echo "----------------------------------------------" echo "------- tests: h2load SMP" echo PW=`pwd` cd ../minimal-examples/http-server/minimal-http-server-smp $PW/bin/lws-minimal-http-server-smp -s & R=$! sleep 0.5s # check h1 with various loads h2load -n 10000 -c 1 --h1 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi h2load -n 10000 -c 10 --h1 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi h2load -n 100000 -c 100 --h1 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi # check h2 with various loads h2load -n 10000 -c 1 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi h2load -n 10000 -c 10 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi h2load -n 100000 -c 100 https://127.0.0.1:7681 Q=$? kill $R wait $R exit $Q libwebsockets-3.2.1/scripts/h2load.sh000077500000000000000000000016501357643561300175730ustar00rootroot00000000000000#!/bin/bash # # run from the build dir echo echo "----------------------------------------------" echo "------- tests: h2load" echo PW=`pwd` cd ../minimal-examples/http-server/minimal-http-server-tls $PW/bin/lws-minimal-http-server-tls & R=$! sleep 0.5s # check h1 with various loads h2load -n 10000 -c 1 --h1 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi h2load -n 10000 -c 10 --h1 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi h2load -n 100000 -c 100 --h1 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi # check h2 with various loads h2load -n 10000 -c 1 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi h2load -n 10000 -c 10 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi h2load -n 100000 -c 100 https://127.0.0.1:7681 Q=$? kill $R wait $R exit $Q libwebsockets-3.2.1/scripts/h2spec.sh000077500000000000000000000013701357643561300176050ustar00rootroot00000000000000#!/bin/bash # # run from the build subdir # echo echo "----------------------------------------------" echo "------- tests: h2spec" echo if [ ! -e h2spec ] ; then wget https://github.com/summerwind/h2spec/releases/download/v2.1.0/h2spec_linux_amd64.tar.gz &&\ tar xf h2spec_linux_amd64.tar.gz if [ ! -e h2spec ] ; then echo "Couldn't get h2spec" exit 1 fi fi cd ../minimal-examples/http-server/minimal-http-server-tls ../../../build/bin/lws-minimal-http-server-tls& sleep 1s P=$! ../../../build/h2spec -h 127.0.0.1 -p 7681 -t -k -S > /tmp/hlog kill $P 2>/dev/null wait $P 2>/dev/null if [ ! -z "`cat /tmp/hlog | grep "Failures:"`" ] ; then cat /tmp/hlog | sed '/Failures:/,$!d' exit 1 fi cat /tmp/hlog | sed '/Finished\ in/,$!d' exit 0 libwebsockets-3.2.1/scripts/libwebsockets.spec000066400000000000000000000155721357643561300216070ustar00rootroot00000000000000Name: libwebsockets Version: 3.2.0 Release: 1%{?dist} Summary: Websocket Server and Client Library Group: System Environment/Libraries License: LGPLv2 with exceptions URL: https://libwebsockets.org Source0: %{name}-%{version}.tar.gz BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) BuildRequires: openssl-devel libuv-devel libev-devel cmake Requires: openssl %description Webserver server and client library %package devel Summary: Development files for libwebsockets Group: Development/Libraries Requires: %{name} = %{version}-%{release} Requires: openssl-devel %description devel Development files for libwebsockets %prep %setup -q %build mkdir -p build cd build %cmake .. -DLWS_WITH_DISTRO_RECOMMENDED=1 make %install rm -rf $RPM_BUILD_ROOT cd build make install DESTDIR=$RPM_BUILD_ROOT %post -p /sbin/ldconfig %postun -p /sbin/ldconfig %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,-) %attr(755,root,root) "/usr/bin/libwebsockets-test-client" "/usr/bin/libwebsockets-test-lejp" "/usr/bin/libwebsockets-test-server" "/usr/bin/libwebsockets-test-server-extpoll" "/usr/bin/libwebsockets-test-sshd" "/usr/bin/lwsws" "/%{_libdir}/libwebsockets.so" "/%{_libdir}/libwebsockets.so.15" %dir "/usr/share/libwebsockets-test-server" "/usr/share/libwebsockets-test-server/candide.zip" "/usr/share/libwebsockets-test-server/favicon.ico" %dir "/usr/share/libwebsockets-test-server/generic-table" "/usr/share/libwebsockets-test-server/generic-table/index.html" "/usr/share/libwebsockets-test-server/generic-table/lwsgt.js" "/usr/share/libwebsockets-test-server/http2.png" "/usr/share/libwebsockets-test-server/leaf.jpg" "/usr/share/libwebsockets-test-server/libwebsockets-test-server.key.pem" "/usr/share/libwebsockets-test-server/libwebsockets-test-server.pem" "/usr/share/libwebsockets-test-server/libwebsockets.org-logo.svg" "/usr/share/libwebsockets-test-server/lws-cgi-test.sh" "/usr/share/libwebsockets-test-server/lws-common.js" "/usr/share/libwebsockets-test-server/lws-ssh-test-keys" "/usr/share/libwebsockets-test-server/lws-ssh-test-keys.pub" %dir "/usr/share/libwebsockets-test-server/plugins" "/usr/share/libwebsockets-test-server/plugins/libprotocol_client_loopback_test.so" "/usr/share/libwebsockets-test-server/plugins/libprotocol_dumb_increment.so" "/usr/share/libwebsockets-test-server/plugins/libprotocol_fulltext_demo.so" "/usr/share/libwebsockets-test-server/plugins/libprotocol_lws_acme_client.so" "/usr/share/libwebsockets-test-server/plugins/libprotocol_lws_mirror.so" "/usr/share/libwebsockets-test-server/plugins/libprotocol_lws_raw_test.so" "/usr/share/libwebsockets-test-server/plugins/libprotocol_lws_server_status.so" "/usr/share/libwebsockets-test-server/plugins/libprotocol_lws_ssh_base.so" "/usr/share/libwebsockets-test-server/plugins/libprotocol_lws_sshd_demo.so" "/usr/share/libwebsockets-test-server/plugins/libprotocol_lws_status.so" "/usr/share/libwebsockets-test-server/plugins/libprotocol_lws_table_dirlisting.so" "/usr/share/libwebsockets-test-server/plugins/libprotocol_post_demo.so" %dir "/usr/share/libwebsockets-test-server/private" "/usr/share/libwebsockets-test-server/private/index.html" %dir "/usr/share/libwebsockets-test-server/server-status" "/usr/share/libwebsockets-test-server/server-status/lwsws-logo.png" "/usr/share/libwebsockets-test-server/server-status/server-status.css" "/usr/share/libwebsockets-test-server/server-status/server-status.html" "/usr/share/libwebsockets-test-server/server-status/server-status.js" "/usr/share/libwebsockets-test-server/test.css" "/usr/share/libwebsockets-test-server/test.html" "/usr/share/libwebsockets-test-server/test.js" "/usr/share/libwebsockets-test-server/wss-over-h2.png" %files devel %defattr(-,root,root,-) %dir "/usr/include/libwebsockets" "/usr/include/libwebsockets.h" "/usr/include/libwebsockets/lws-adopt.h" "/usr/include/libwebsockets/lws-callbacks.h" "/usr/include/libwebsockets/lws-cgi.h" "/usr/include/libwebsockets/lws-client.h" "/usr/include/libwebsockets/lws-context-vhost.h" "/usr/include/libwebsockets/lws-dbus.h" "/usr/include/libwebsockets/lws-diskcache.h" "/usr/include/libwebsockets/lws-esp32.h" "/usr/include/libwebsockets/lws-fts.h" "/usr/include/libwebsockets/lws-genhash.h" "/usr/include/libwebsockets/lws-genrsa.h" "/usr/include/libwebsockets/lws-http.h" "/usr/include/libwebsockets/lws-jose.h" "/usr/include/libwebsockets/lws-jwk.h" "/usr/include/libwebsockets/lws-jws.h" "/usr/include/libwebsockets/lws-lejp.h" "/usr/include/libwebsockets/lws-logs.h" "/usr/include/libwebsockets/lws-lwsac.h" "/usr/include/libwebsockets/lws-misc.h" "/usr/include/libwebsockets/lws-network-helper.h" "/usr/include/libwebsockets/lws-plugin-generic-sessions.h" "/usr/include/libwebsockets/lws-protocols-plugins.h" "/usr/include/libwebsockets/lws-purify.h" "/usr/include/libwebsockets/lws-ring.h" "/usr/include/libwebsockets/lws-service.h" "/usr/include/libwebsockets/lws-sha1-base64.h" "/usr/include/libwebsockets/lws-spa.h" "/usr/include/libwebsockets/lws-stats.h" "/usr/include/libwebsockets/lws-threadpool.h" "/usr/include/libwebsockets/lws-timeout-timer.h" "/usr/include/libwebsockets/lws-tokenize.h" "/usr/include/libwebsockets/lws-vfs.h" "/usr/include/libwebsockets/lws-write.h" "/usr/include/libwebsockets/lws-writeable.h" "/usr/include/libwebsockets/lws-ws-close.h" "/usr/include/libwebsockets/lws-ws-ext.h" "/usr/include/libwebsockets/lws-ws-state.h" "/usr/include/libwebsockets/lws-x509.h" "/usr/include/lws-plugin-ssh.h" "/usr/include/lws_config.h" %dir "/usr/lib/pkgconfig" "/%{_libdir}/pkgconfig/libwebsockets.pc" "/usr/lib/pkgconfig/libwebsockets_static.pc" %dir "/usr/lib/cmake" %dir "/usr/lib/cmake/libwebsockets" "/%{_libdir}/cmake/libwebsockets/LibwebsocketsConfig.cmake" "/%{_libdir}/cmake/libwebsockets/LibwebsocketsConfigVersion.cmake" "/%{_libdir}/cmake/libwebsockets/LibwebsocketsTargets-debug.cmake" "/%{_libdir}/cmake/libwebsockets/LibwebsocketsTargets.cmake" %changelog * Fri Aug 14 2019 Andy Green 3.2.0-1 - MAJOR SONAMEBUMP APICHANGES Upstream 3.2.0 release (last LGPLv2.1+SLE) * Fri Nov 23 2018 Andy Green 3.1.0-1 - MAJOR SONAMEBUMP APICHANGES Upstream 3.1.0 release * Fri May 4 2018 Andy Green 3.0.0-1 - MAJOR SONAMEBUMP APICHANGES Upstream 3.0.0 release * Mon Oct 16 2017 Andy Green 2.4.0-1 - MAJOR SONAMEBUMP APICHANGES Upstream 2.4.0 release * Fri Jul 28 2017 Andy Green 2.3.0-1 - MAJOR SONAMEBUMP APICHANGES Upstream 2.3.0 release * Mon Mar 06 2017 Andy Green 2.2.0-1 - MAJOR SONAMEBUMP APICHANGES Upstream 2.2.0 release * Thu Oct 06 2016 Andy Green 2.1.0-1 - MAJOR SONAMEBUMP APICHANGES Upstream 2.1.0 release * Thu May 05 2016 Andy Green 2.0.0-1 - MAJOR SONAMEBUMP APICHANGES Upstream 2.0.0 release * Tue Feb 16 2016 Andy Green 1.7.0-1 - MAJOR SONAMEBUMP APICHANGES Upstream 1.7.0 release * Sun Jan 17 2016 Andrew Cooks 1.6.0-1 - Bump version to 1.6.0 libwebsockets-3.2.1/scripts/test-dbus-proxy.sh000077500000000000000000000007221357643561300215120ustar00rootroot00000000000000#!/bin/sh echo "Starting $0" bin/lws-minimal-dbus-ws-proxy 2> /tmp/dbuss& echo " server starting" sleep 1s PID_PROX=$! echo " client starting" bin/lws-minimal-dbus-ws-proxy-testclient -x 10 2> /tmp/dbusc R=$? kill -2 $PID_PROX if [ $R -ne 0 ] ; then echo "$0 FAILED" cat /tmp/dbuss cat /tmp/dbusc exit 1 fi if [ -z "`cat /tmp/dbusc | grep 'rx: 9, tx: 9'`" ] ; then echo "$0 FAILED" cat /tmp/dbuss cat /tmp/dbusc exit 1 fi echo "$0 PASSED" exit 0 libwebsockets-3.2.1/scripts/travis_control.sh000077500000000000000000000033371357643561300214760ustar00rootroot00000000000000#!/bin/bash if [ "$COVERITY_SCAN_BRANCH" != 1 -a "$TRAVIS_OS_NAME" = "osx" ]; then if [ "$LWS_METHOD" != "mbedtls" ] ; then mkdir build && cd build && cmake -DOPENSSL_ROOT_DIR="/usr/local/opt/openssl" $CMAKE_ARGS .. && cmake --build . fi else if [ "$COVERITY_SCAN_BRANCH" != 1 -a "$TRAVIS_OS_NAME" = "linux" ]; then mkdir build && cd build && if [ "$LWS_METHOD" = "lwsws" ] ; then cmake -DLWS_OPENSSL_LIBRARIES="/usr/local/lib/libssl.so;/usr/local/lib/libcrypto.so" \ -DLWS_OPENSSL_INCLUDE_DIRS="/usr/local/include/openssl" $CMAKE_ARGS .. && cmake --build . && sudo make install && ../minimal-examples/selftests.sh && ../scripts/test-dbus-proxy.sh && ../scripts/h2spec.sh && ../scripts/attack.sh && ../scripts/h2load.sh && ../scripts/autobahn-test-client.sh else if [ "$LWS_METHOD" = "lwsws2" ] ; then cmake -DLWS_OPENSSL_LIBRARIES="/usr/local/lib/libssl.so;/usr/local/lib/libcrypto.so" \ -DLWS_OPENSSL_INCLUDE_DIRS="/usr/local/include/openssl" $CMAKE_ARGS .. && cmake --build . && sudo make install && ../scripts/autobahn-test-server.sh else if [ "$LWS_METHOD" = "smp" ] ; then cmake -DLWS_OPENSSL_LIBRARIES="/usr/local/lib/libssl.so;/usr/local/lib/libcrypto.so" \ -DLWS_OPENSSL_INCLUDE_DIRS="/usr/local/include/openssl" $CMAKE_ARGS .. && cmake --build . && ../scripts/h2load-smp.sh else if [ "$LWS_METHOD" = "mbedtls" ] ; then cmake $CMAKE_ARGS .. && cmake --build . && sudo make install && ../minimal-examples/selftests.sh && ../scripts/h2spec.sh && ../scripts/h2load.sh && ../scripts/attack.sh else cmake $CMAKE_ARGS .. && cmake --build . fi fi fi fi fi fi libwebsockets-3.2.1/scripts/travis_install.sh000077500000000000000000000034471357643561300214660ustar00rootroot00000000000000#!/bin/bash if [ "$COVERITY_SCAN_BRANCH" == 1 ]; then exit; fi if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update -qq if [ "$LWS_METHOD" == "lwsws" -o "$LWS_METHOD" == "lwsws2" ]; then sudo apt-get install -y -qq realpath libjemalloc1 libev4 libuv-dev libdbus-1-dev sudo apt-get remove python-six sudo pip install "six>=1.9" sudo pip install "Twisted==16.0.0" sudo pip install "pyopenssl>=0.14" sudo pip install autobahntestsuite wget https://libwebsockets.org/openssl-1.1.0-trusty.tar.bz2 -O/tmp/openssl.tar.bz2 cd / sudo tar xf /tmp/openssl.tar.bz2 sudo ldconfig sudo update-ca-certificates fi if [ "$LWS_METHOD" == "mbedtls" ]; then sudo apt-get install -y -qq realpath libjemalloc1 libev4 libuv-dev wget https://libwebsockets.org/openssl-1.1.0-trusty.tar.bz2 -O/tmp/openssl.tar.bz2 cd / sudo tar xf /tmp/openssl.tar.bz2 sudo ldconfig sudo update-ca-certificates fi if [ "$LWS_METHOD" == "smp" ]; then sudo apt-get install -y -qq realpath libjemalloc1 libev4 wget https://libwebsockets.org/openssl-1.1.0-trusty.tar.bz2 -O/tmp/openssl.tar.bz2 cd / sudo tar xf /tmp/openssl.tar.bz2 sudo ldconfig sudo update-ca-certificates fi if [ "$LWS_METHOD" == "libev" ]; then sudo apt-get install -y -qq libev-dev; fi if [ "$LWS_METHOD" == "libuv" -o "$LWS_METHOD" == "lwsws" -o "$LWS_METHOD" == "lwsws2" ]; then sudo apt-get install -y -qq libuv-dev; #libuv1 libuv1-dev; fi fi if [ "$TRAVIS_OS_NAME" == "osx" ]; then if [ "$LWS_METHOD" == "lwsws" -o "$LWS_METHOD" == "lwsws2" ]; then brew update; brew install dbus; fi if [ "$LWS_METHOD" == "libev" ]; then brew update; brew install libev; fi if [ "$LWS_METHOD" == "libuv" -o "$LWS_METHOD" == "lwsws" -o "$LWS_METHOD" == "lwsws2" ]; then brew update; brew install libuv; fi fi libwebsockets-3.2.1/test-apps/000077500000000000000000000000001357643561300163125ustar00rootroot00000000000000libwebsockets-3.2.1/test-apps/1.png000066400000000000000000000122011357643561300171540ustar00rootroot00000000000000‰PNG  IHDR0?Ō,–sBIT|dˆ pHYs==¬r.tEXtSoftwarewww.inkscape.org›ī<žIDATxœķyXTåŪĒæ3Ćģ0²‚ (š»"†øįŠ`—-fõŗd¾iRZYZYżZ“²2—Ź–7õu'3Ķ]\qW$1P@Łdd€ŁX‡łż1yf 8Ī sĪĄł\×uī3Ļń|‰ę|Ļs?Ļs?,000t4ĘčDµ ČpėßcgßSØÅ¾pÓ(ž `+EZ¬Ā ŠĶ Z„…\XyFńS¼Øc·\6Š;ŲN‘kł@ŠQÜĄZŠ“XĖ dFńĒŽ¢H‹5Ü0¼É¹5śS ÅZ¾°äßc€9ŌI±ŠŻ ˆĆā`Õ",d€mFńrC)Ņb ߃l |1i±–šÄnĘR!ÄMÄ®T±Gģi08lŖ000008&Œ00000Xc įDµŗĮb± •vƒ·'¼<;C„RC­©ĘŻ»¹••S-Ąß߁ V«QXXhöµ\.D\RR…BńX÷g ¤ŅĆß!ĪčŅY— EŠe5HĻV@^YGµ<‡ 7!œÅ<øJ`±Xąó8 ¹PiźP„ØÅŻ\9źźµTK5 ‘±˜oѵår%u6Vd9”½=Ę¢kßsyłE6Vd‚zH±ą_BlĢ8ųvõ6ŁFVVŽó’šŪęxœædg…džüóO 2pņäIŒ?Žģk„R)īܹCÄÆ¼ņ 6mŚōX÷o3įqėšąTgøˆ”ˆzķN_£÷dœšžB ė+D?~<øuā@ČgAā̆XȆ¦F‡J…wrėp1EƒCg•Č-¬§Z¶Łxøņ°hN0¦GwCÆ.&Ū46źōūOaõo™Øoh“³JógĮ+£įäŌz–U«mÄõ›Å8pü6īJAq©ŅN Ÿ·NĮŠå–ĶšüīꔦX‘å ģŠU+޶čŚė7Ņig |>ļ½»‹ā^ŸĻkµ­—§ž™6%%e”Õ“™Œœ‘žĖŅ<}/eč_ ą‹÷߈Ī/ą‹õēŃ@”ł18>»¶ńQ‘&?W*UhlŌ”S'ņ‹×™³—ģ!Ö“™Lq˜8~jŌ~,Y³ŗ­nE N^}Ī }C;75µōI/óĢ$?ÄÆ‡‡E:ÆÓ%e5Pi ą³įŪE6[ßęŌ%ś¼é>"!Ÿ¾3£‡KńŌĖńPŖj©–ŌaH½•‰źź³ŚVUѧ—čäÄ1iHĄ–māā„kŠüū{ńł<õbdä0̘‹ —’©L+ŚĢ@¢#ŽĒ=üī"Ä?™ł!mu;›"“7`C|då PW7¢®^æ.\ō äcźxŗqˆ¶Ćū ńŃO,_'kå_¤†QĆ<±kŻ0’yäišÅ† ü~ø• C NĄē ¬æ;ž›ģ‡Ä«eTČm•ˆ©‘šQ •Z?FćäĆæo'Œ —āµŁC0t€/ŃvLDžŚ4_ÜFėžČą1ĖP]mޘSžżm¬Ę:^š³·Ņ³Ø–ńŲ,{g!É<”JęĢ[‚„皵­­­CZz&ŅŅ3ńÓ/ۚ}Ži阎 n٤s1‘‡šŻĖr¦ö¦ø¬Ÿn0żu³±yEW<3^Bœ[ō’;Vžņ€V©,>_V ×( tądf½“„*e󱛚Z-Ī%•į\żĢ²rä„y@CC#īåUą^^žw >|s>}g4X,½YŽ€÷^k›?čĀ¬"Ø5L/‰*¤ŻšöāyD\[[‡3ߥŁsW(TåX“É:殇N§’B§“„ŗ/.-DVžįaę,bcrä#ĘOģ̲ł½Š3А³½’RŽ‹Æ˜4GG§>_sq!_ŗ0^Å©b ;q f‘ĢWÆż•1Ē¤M $6ņ Æø;ŅīõD<W—ʶøŻ©«×aC¼œt.DŚśµ=įqŁx}V7hu˜ū^2Ŗkcŗ«„ü“åö'’]œłų`‘éQ†Ž€ĻĒóĻÅqQq)Ö®ßH”"ĒÄęā&©Ą“żõ³nf÷EjV?שĀŪśv”qéF5)ör§Ļ’šŲØ®št7¬7ųæų{ČČ~¼BŽŹāŽA«5¤_œÖSpĢŌŲńps3ԙܶc/1XĪ`>6’fM~ņ(œ8 €Ō¬~„ķ'å•ä·łŚ:śŒ¼ü¬”’ö{5B( ļ~%7,Žņō#|…ŠčHL4yYĮž½GZhÉŠ67c“0ī<üŒĆni”€<-¶ ¤"%døNlŒęIÄ9j\O« P‘żŁõ×-RL‘ŗFē!ćvv+­Z¦Āak1qxßŗūR³ āŃ©ƞøjĖ[RFæ)¾CŁ4żC;A,2¤ÓN\tĢ5Öpžj)~¢—#ī3ĘŠVtńź OO"N½™A”Ēʦ1ą"<:é U(ܐ‘ŠB™/īŽļA“i/i¬™±†ü©¼J‹ók(Tc 4HBŠoŻ©¢H u”ČTČ/4üŽ={x“Қ”£Ų§„gR¤Äń±©›ĆɤqŠ6źÜ»4‰8yȖ·¤„gĘK0i„aŚīŗķrŌÕÓc%ŗŌ—\¼7ĻsŸvĆĆY”iٵ˜¼ ŸVu°$Īä?©RMĮ}{SYEž’é,ęŃĪ@ölYBšrÜĖ>ف“ŪvPd9Ÿ}ü:*+]查į3ųėą);(j‰„\QÕN ÄĖĖ Ó¦M³ė=mf Ę©©ŒœPä—ų±ŗZŒó7"1.ģ$}Ŗ‹ĪņD°ņK=¶¾¤»1ņ*-Öļć›Må“*_.ĪäˆZÓ1 DSM^qļ,¦ĻBχLŠ`V»Æ×ļoc%Ö3mź8³Ś•Rn Īb)VkL÷Ņż|½`ņ³‡”Ź =Ćńj€Ł ›ˆńųGĀå‰Ķ>Oø<‘0±COC,TC]MĻ26ą&į“ų¹PĄĘ>Œ įš9••=głOŖiē«Ļ[¢é^&öķŪgv{WWWĢž=ŪŖ{ŚÄ@ÄB5F >KÄĘ髇½8ß,~ ąÕ jč)87Õ··;B> 1£\3Ź•xqi!TzōDjjɆĮē±”©īx&"’ ʅ鹟7{˜™¢ >[ضĞC§ĶJa]æAż”٦)+±Hh²]yyäņJø»»ŚC–ÕdffāĶ7ß4»}pp0= dBųqxśœsmēRF6k“vÆņKüįļ@ßc”«dÜ«EĢBCĪY(`”«§üxˆķŒ)#]šoŃWĎvĮ¾uŻ0q~ią!Ŗ&)+±Š©CˆPŠt,ˆ~ņŃŹųvS÷ĆOÖ;L9w•šœ² &ŪķŽs»÷‚»»+‚»#(HŖßdD‡ ²‡TŚc“¹Ęé«ó7"[LM§¶bG‹EŸĮgcźźuøwæŽųIˮʼnĖjüśGbć 0vn*•†‡ņøįbĢF·…ŠœūwÓ§F—=éģNĪs+”ķćAĶ`=M{ ŽŽž-“Ō#—W")łģŒßĻV®Ć¦-»ŪRžCaµ°X:L~ņ(›J_=äŲeĆzŸĪÅŲ3ÅŚŪSBā55ę,'ļéüÖ,z,VSŖČ=ī¾ōgjk¤Ż †^TŖDuMū+cĻ`¹y÷IqP ”!ķ«_O‡ž®ž†‡éĒó>Ćūs¾4Ł–Ć!§Rb"įśmĒģ ī?­Äõō ź­ļžöīĮ‡æłÅŌ>Øīß®zõpĮ™+ōŪ-±­16;ŁōY§Ć@=ŁwsQ_ß.W’ų ’R+ȁ±ŗb¼xœE*øI*LžHÄäUю^Öä@"yаi},*H½MŽs„O°¤…–헐@xøRX·a0¢®®Łws‰8lčŅĘR ęc½XQšdHh2¼=J¬•@yE䮆›„śriY hµ†±„I£¼)TC £†KIńŁĖy¦2tX’’N%ŽÅ"!ž L”ĒÅŖ–Oēb źuˆ|ń3’3†“zMh@¶}6Ąf7":ā6˜k ŹØn²ˆ°‘sŖk“HĖR _/}½ŸžĪč,AZVĒ©‰õüS}ˆc­¶'ĪŻ„P Ł·?3_zšˆgLŸŠ3g/SØČ1±ź•9&ņ1“ŖŗVˆmGfāļŒĮ­žģ:öŹ« ĪŽœĘņņ ūƬœ«¾÷%¾1»ćģ‡쉱†ÕƗ’ hWĀ„zN'^DY™a}ĶŒé±\uĪŠ« Äųį&y 45¢VZėŃ6rHÓy'„'jd9Éæon=fśÄŹ'ÅsŸ“"XźÜBėö‹|óŃx°X†Ķ¾V’̼U24§”A‹m; «¶9Ö÷ 1°Ī`ŸW‹Ø”†š6G/N6ūŚ#£‰cg‘ £m„5=ńõrBģhĆC9§°YyōX¬–•«ĀŁ«eDĢubcēŚpˆ„ķ»œGܜ0LBÄ×oćĄńŪ*b 3ß®łȉ8rD6¬_É Ø?ČŲ!§į,2ԁ2^ćń(Ž^œLģ8^‹ĻcaĒ×~ ’łāŠkć¦w¾üFƒ2Cśŗį†7+÷n —śÉĖūoDbż ĆKLc£K>M€ŽćR ōD”PāÓkIē^x~*N'ÄcDÄPROö!Ņnxöéčfē;*÷׌śYłĮČ.2ūZ¹ĀI·Ā0¼Ÿ>½;ņ »ĪR)v„W?÷Į“ é+™¼«6ŅkŖhņĶ lŽ“‹W¦ņŗŃ£}rp<>ųö&ö/Dmy@7–¾ŚażŻ1ģij+¦šƒPĄETdŽ~u8ĘDó×Ėæ:…ÄK¹Ō3“øy“PgF-,H8u™ĢĘG¶fóÖ?€Eq/ēś÷ űƒ[‘““[éY(-•Ļē£Oļ čßl¶ć½`µ61£—ĢO_=äČÅhĀ@ī%’~Æ·„rlJO) æś£Hր² -u8sŠ/„šž"b?@_öä–¢JEƒBXMˆūĻuųz 1i¤a*o@71v­ G„¢iYU()«ŸĒA æ”=$`±šóā~ }Ÿs®.†ģÕ5 ØoŠĀU"€ŸłĖ¬ÓéšÉźD|õĆŠ”šĻŖO^2»ķœJc mÄņæ›ĶF܂Y¤^G@€?ü[¼®¬¬;ćé_jæ-±Č@śŻ„“k.[b ‡/LĮēÆ}DÄ1#ŃĘ@|&<łčAgy•³?(‰Ėōܐ¦¶®Oæv ŪV‡į™I~¤Ļ\%\D īlņ: ˆź‰]óM~Nbž­ē¦‹K•˜æōžøc'U ķN‡÷–…cĒńž»q>ØÕ^FEE¶l߃õ?l†¬ŒŚJÉIIIP(ōSōSRÆ4”F£ĮéÓ§‰øØØØ•Ö¦±Č@ŒV× qīzóź»āFęŹ|įė„«š2ā0¾ŽŗŌ9vGSӈ‡ųĻ2Éč1u·%Ŗk“x6ī2¦MšÅ’y!>ŠlvóÜīCҳXż[f³™\tęFZ ¶’™Š_·’ „о3śŠK*’šcѵårzķ;“|= ‹–|AÄEŎ_.'ńģ$ž½ļ.ž˜ųśō”¬¬œņŠJΟϠ šŠŲņōąčč@yy9ŁŁŁ¾V„R¤óņņ())éŌżeé… paH }ū8ā RRTRCnAIi%h‹k˧ĒĪN‰·§g<ÜQ(ØģpŅØ(«ØįjI5ē3“ŌŌ֋-µC8iŌ8;«Ķŗö攆†F++2ŸaCƒ‰ž=Õ¬k’·e'™Y9VVdB²äOu ~ś™Ģ)(¼ĀĮCń|üéfŠļf…B¾łęʎ ĄO?żÄŒ3:|m`` ēĪÓĒ?ü0ėׯļŌż»Ģ@Tpłgpu‚éĀŽ_»źNÖ!|ä1€,‚ż/įé^‚F]…›KΚJ*Ŗ4—ør.#ˆĆ'GóC\$Ł~bĖī0Ž,]ʽ³2t°«Éœ††Fā×ņŻO9¼ńq µu Ż¬ŅĄ#óĒņŽĖ³±·o旵¾¾§sپūŸl:In~i7)ģ€O_ĆŪ£ż? „RAųhoüū;ńŚĪv“:Ó8iT×4еRĀFł6ŹgŸÄšā•u©Ńüdl GµšMßeĘōI&?/--£””wwį‹×¾ø#Ż!OŅt™Ģ™h8¾#–½ÕUw{»zž|Ļ×Ü8$•i‹ÖSUm^×DWs×L6Æ ĒŽN!8ßŲy…U”UŌįØVā×WƒR©ĖłłˆtŽt;ƒ“FÅKOOeŹ„@īxh3„eÕbKź5$œI”²²ŖC¹WÆJ§•hoogŅ<¾ŻĖg¾įš‘_©hś¹ŌjB2yŅxęŻĶ”#ĒŐ,)ŗĢ@fGŽūƐHÉźŖ»Y—­ļo¾‚+^”WjØ©Uįß7Ÿ”ĮéÜ>u>žZ}ī„‘§x~ÉXõĪ"*6Mäx6½3^`Y9¼ņ~2’ūń"Å%µśóŽj;ʍōāžYžģ’„P ¹ķqū'$$ēSV®£±·WąēNdx >8–°Q†īÄ©A|»~·ŻæAŅ-‘1SWPYٱ1§¬K—»Xe<°p9g’RŖŃiV<ż˜ĄųpC«Ļ{#]b ƃ!d š\Ō$xó‹®ø›õÉ-ōį„÷3ł™«s9Ÿ®^Å]3öčĻ-}`#/ųˆ¤ŗ²ŌJ>\=•Q7ŠöŸrXštųģW¾‹5 ž»ŗØyv©éQ™Ž£ZĶī‰ÖĒ9¹ł¼½īŁ&V7O7ø¹©Īēé4HhźUŁĆ­įÖ¾›x95ZūziŪČģ~¢§ĄĒĖ0Ø’ßĶHNėÜ![å‰ēwQ_o÷øīŲŁÉd„Ü=OOCÉ _lÕ–Ėt«’eĶŗģķtĒ ©žÓp„XX˜µŗF%’’Ö~gć|jj„1č'œ¶šŌKĻ[’q±XąŁ”²(2½/Oį&™™Æ`+#ÄŖ £Œ d·ŃtźŲcsÆīxD(€ iÕRė0Q‘q|±f¹>NHĀė뉨Hˆ»«ŠČ²r*DR".s -•Ź75ŚāJÉH77A\ZV.’ė2bĶnŻŚį|ggĖ×HYĶ@‚čV 7cl {…źh^³3;Ž’ŚZwīzģķź čŸĖŹÅ’eŃŪ°SźÖS$¦…0kɇ’Ŗƒåę"ü•––׉¤D\ŠÆ '9ø8;HĪ@¶|¶L0åø-V¼ų‰g/vƒ"ółĒ ”øųŚ5®¶’øoæ’¹µ››pAZY1___ęĪŪ­÷“šwM%§CVž!.Ƅƒ§ą–¦‰s&JŪ@nMC{D7ĄNŁ€›K™ąsķUwÖ}ńGÖ®_$©ņ%®.ĀHyEļ4ŠJįŠ{ēö+‹ĮĢé£:”÷śŗļŗX‰å̽ż–åeēä‹n .ĪN‚ø¼Āt+ŻßÆ”!ķOŽÉ/øLR²ķÕ³V3ćńŲ£­?=j0iaą¬Ń‹±SÖćéÖö؁Ʊš±×Ÿaźø_ųń@d7*»6.NĀ_iE_}Ž-÷2qPى¤DFjŌÖ _ŖT*Óć—ŃQ3Xūź³ķ~×毶³xÉ «i³„¬¬,¶mŪÖį||šA‹īiqÖ@¤Ń$¤Ż&ŹÉģ< k› Ö::Ąō0Ų.Ż:wķ¢QWGTdßļŸĀżĖ×RVįtķ »Ŗj”aØ”TTö>qŅ ʅ„Ā[üŲźafŠ‹ŁŅŁBµ-¾ūao‡ŗ°NœŹlĖ.+g'É¼+WŠŠj‹ńņņ0ł¹ŌHIIįÉ'Ÿģp~hhØ4 äÖp)€n¬ćĄÉÖ9‰tŻZM»DĪ™(]I¾LŌcčcc| ņĻ&zŹ>ęL>€B”«=e?ŪŽYŹm|DCƒų3}ŹZtY9kģ{„h[ŽIĻ@žys©Ęū܋ėl¦œ{Y¹°ĖJ£1Ż żÕ–ųjĖxyy<ˆ@Ż~ Ē>ž¦ī*y¬b ĘŻWOµŻ5{žŌ4Ę=–¼jØÖ+%jjU\ø$,‘˜¦+NųŃ×÷0%ģW¶­{WŻ×-޲hīV>žęīn׌’’2aßæ«³=…Śžńź }¼„-Ā’ŅŽ÷ß@Ę4-[ żśł“‘©C«-&^[Lüń߸޲4ań+³B”«Ռ©ī«fvō³ōīā°’×0®zEpī©Ÿ‹¤FHi™°2ČÆw–3hčvČÉ/„²Ŗē•±—1ŒĢK‚8$8P!=‹[ c†Į#a1<³Št®]‹qĢØIpBÜ­·Ķ滽Ó8‘4œ›†'0|šyśē’•+nM¬ …oWC»²ļXHjÄĆŲ@Ī„I{7?™ī%ķ|µµuØTŗĒ_HH ø‚l‹[ Q-J“ø8éJŗ›śēÖāeŲÖ˚lß?U·¬% g‹ńõ”nmdö\†{ćķičĀ:+ˆŒ55µ¤ĻŠĒćĀF 6–’é8–ˆ„IĘƒ~6\¦(3g€ ötæīTbj õõ†„™‘żDT#‘qÜŃLӉ2½–ćæ%菝4Ü.Zv¶†E]XżūĄMC ń’Wąų5fé ‚ ’Š+•ŗUéė··T©¬®@ohVeU=‰©%ŒŖ«÷38Ą…ėCŻHLķ=5±žpĒõśćśśö8/¢)²ķ»Xę?p§>žwļķģ‹3±€M¦],zāEMŅ ¢TVƆš[rū’6ķ‚+F/ź¶Üåė-܅°ąŠ—HJ„lŁ)$|üĮ޳ʰP¦EV9~Qr%LdÄgļžĆÖ×Ģ»7śš«ĪeZc‘?ü÷‡ŠģYß \©~kø”F–­1Zøą%#ĒO$%B6’%ˆŻHh KŁ=…Ö>?Eó[ šĘä·J™ÖŌÕÕ³įKĆŖm;;;Ö½ł¢~`]¦c˜m ź¦ÕäĶģ<Üńkwåŗ8A¤ N©öóĶ'zŹ>}œžķOję v®č>R3ʈū„P«ģ•|łv8Nšž]Ī#fį8ęÜ2DŸ8ĖöŻ6:ĶO¦Ėł×[qł²”aŅÄq¼æīey@½˜m ÓĘźžĶģźÄ‹ŽĪƆ½BĄöŗ±Ō5|ńś œŒ¶µŻ¼c–ˆŠZóō«æÓŠ`L{£'_æ7”U¹wS8ØÄĖé,Ļ<>‰u« 惆†F–½+ɅŖ2Ņ ¤¤”—Væ-8wßngoģf&F„ Z²Ķäī;gw—DÉcv{Ķų”ŸšiØ6­-ų30a„.Žž OüĖ\%ŻĖŠ t>łēsÜ<ź”ž\Ö‹5Ÿ<,¢ŖÖ?]ħ[2xų^Cæīģ)ż9łż žż×i¶ķΦŗFXpp`'–’ł:ʍōbüāVLķGÓ'ń×?O`j„°’zÕk?³’H†8Ā:HĢā™Ōt @ģϧHN‘7>²6Ÿ~ž5””A,yHnäˆaģśžsŅÓ³8“”J~~jµšė‡aŌČį(•¶÷‚ÕUXÅ@vi;Æ-v6Hó^"IĢUc]® Ģ ö£?‘SąKa‘ Ü\Ź1äį#ōū€®ģÉW¬įj™k;ß(1?_? 3'¦ņ tfÓ;į—Ō’˜z•¼Ā*Ōv83l° …®¼Œ? —ņ¤3ųœžĖ\.§²ŖŽŚŗz<Üńļļ†š¹±±‘ßŲĻkļj曤ƚčpīĀā2Ł@ŗˆU/¬E©T³d Õ@PP@›×^įĖĶŅ/µß•˜e 7†čvlĘłńüóQC5Q:⨮ęÖ›ÆżCiÆŗóą³Æ²ēčĶ×Ģƒźšī|ōŽĒ]3…µ½<ÜTDŒécņ:…&…ł°éū,“Ÿ‹³“Aķ÷Mēę—ņČņų~ϹnR%ÓhlldåŖ×Ųµ{?Ļü-† į7µŪŹ(*ŗŹg·°ī½O)(·Rr||<%%ŗ)ś'OšØbŪģŻ»Wēät~›X³ Äxń`e58Ńłļ8•Łąē«‹ēL„ׄQNźšTT9ņåQüżß1äųŠ-§]*«ź¹;ę(soõcŁā!LķRŁŗo·™¤“Žų8„ÕL.)s*1ß$šŃĘß(-“nŃÄܼ"N&¤›uķmٵ“ŗ‘ć'YŗĢP.'×öĖåģ;Ęžøcōėėìۦ0h?żūłāą B«-&ėbńĒēäÉ3TUKć’³˜˜³ÆĶĪĪfśōéŻ_tz˜qĘxjš±ZXŪöµŸß·M€AM„£źź:½ p°Į6Ęam%_‹@ælĘŻpš!ųzińń*ĀÅ©G‡jjUhKÜÉ)šåčļ#Ł?ŽāR«uY½ Š„F±/o­/oI_Gn‰čKĄ'śöq¤¾¾‘’²ZĪ](åTR1Ii-8œ Äœ8s¾ČQmĻ <ÜquvĄĶU³“ƒ¾L{yE-¹„œ9[@Įå.Ł’40^Āž*°²+nŌÅ$Ć[œ;ŒA‹„¼ ,k:ī¶“+ef;āł€¼> 1«²ēėÜÜŌĪ…b‘‘ķGF¶4Öqt%¹UlŲ&żŅUÕuœ;/×°’‘‘2ņt³ DFFFFĘ,d‘‘‘‘‘1 ¹š‹ŒŒŒ-Rģ[„™“Ü;Ü'†KéIRHk®cĒhY‚² ųR !V åDņ\ąc1„XŅń·@'ź-H­‰sć°ĶŽćeū%Ą­b ±2™güŁ ’; @c‡uIEND®B`‚libwebsockets-3.2.1/test-apps/3.png000066400000000000000000000120631357643561300171640ustar00rootroot00000000000000‰PNG  IHDR0?Ō,–sBIT|dˆ pHYs==¬r.tEXtSoftwarewww.inkscape.org›ī<°IDATxœķ{\TežĒßĢA+/yńY^ ~ÖÖZż4+w³(«µÕŹ­­Ķī[™µīnæ²_Yé–ej„hyMM21¼€ ·A†ūż2ūĒąĢp˜8gą¼_/_Æó=óœ9TĪē<Ļó}¾™īĘ4 ‡Ų" 8Ń|ģ¼#¢gx8nĻ>I‹SxsÅį ,«ų H$-ĪpÓĻҌ±š‰XbœäYP¤XÅ×+Åć$wz«ųYąq‘“8Ć)`B‹soĆEŠā,oKš5Ąń¤8Åē Ämń։-ĀAęk­āåĄ‘“8Ć; 5/’gy·E\/† µū‹!ÄIܱ§!ć&xˆ-@FFFFĘ=‘ DFFFFĘ!d‘‘‘‘‘q/±ČČČČH …BAxx‚ūŲ›ŠŠJ*«Ŗ9{6}a‘ŲņĢ„……”Ńhج¬$''Ēīk•J%ę8??Ÿ²²²vŻ_6nČ °Gäҧw)*eÅe:ņō¤e„b(ń[žOOzhńŃ©š÷Ó P(P«<ńÖ*©ØŖ£“¬–³™źźŖjŽZ5:Ś”k‹ å45]¬Čq¢‡ $aÖ4‡®żĻ†­deēŗX‘kˆĪ¢?ÜMBü „ōėk³¾°ˆ}?&óž‡ėŁ÷cr'+ņå—_2zōh¾’ž{¦OŸn÷µįįįœ>}Śß’ż¬Y³¦]÷ļ0Q)įāąė qĀΟ;źN®aüp-ć®Õ¦b`؊€žhÕ ü|<Ši=ØŖ1RRÖČéĢ:ö§TńĶžr2sźÅ–m7½üĖY¼`+wĢ:ȐA¶ßRšš$’ɦļĒšĘū Ō7xv²J ĢĶ»/ĪĀĖ«ķQÖĘĘ&ŽĻcóöÓ|°.…¼‚ņNRŲ~h6+–;–59źĪž/p±"Ē9<šWWüÉ”kM“œØÕ*žüóC,N¼µZÕfŪ Ą^Ü6g&łł…¢ˆŲt˜Le2€Ł“¤o y Ł“Æšö¢dd“†¹3żxkYÖ|UĀćÆPUÓŌ9"$!ī>|m5½üŪ~øzx?2Š`Æüė:Im¼µŹ+š˜z)cF„0fDO=Ė«’ų‘—Vķ£”AŚ’&2ŅA£V³ī“w˜kóóņņ ššŒōčį+8ækρΐ'i:Ģ@fO²ß2–¼ÕQw/O¼=€kkøž¾Ljj„3¼`Ķm3±~ÕJ¼<…Ćœļ͘!ę¶Ób"ųzĶ\nŗk­¤{"£¦-£ŗŗĪ®¶Łæ]ģ`5Īq÷‚„œHK[F»YöÄCó(/Æ`ĮĀ%$ķŲ{YŪŚŚ:RÓΐšv†ž{ķeŸwG:Ä@†„ČžĀsń±šę§q7דWŲĄó« m~ę«óąĆżømŗŸłÜā»{ņāæ/Jj(K­Ŗēß+ŽCée1ĶߏfžSZī}YūšZ%{“£Ł›Ż™2ķ&ż¼Įl MœĖ*ę\V1’’y yl Ļ?1…BĄõ“"xņįI¬Xyłƒ@*œNĻ„²Jī%‰EDxžōčBs\[[ĒÜy°gļO"Ŗr/:dˆuļĆŲ<²c=¤åĪ”W6q×Ņҳ,3ofĘJ'{ `Ł›øj e¢ņ§”(ę>ś˜MópwŒFxį­=$>żąü҇bź­kå*™īNā¢ł‚ ó7V¾'›G;éIhīfåAź9ÓqģHš÷mżw¢®ŽČźõĮ¹Įįmgnt&*eĻßfŽ=¹ļɇخ‘ŽĘŽąŸżĢ¦¤SęŲ×GĶӋmOŒŹto4j5ææ=Įēę°rÕ"*rO\n ~0±¹Īēń 8Ö<,Ŗō‚Ē»śnāqąhµ ź)%5 qæŲÓ² č’ÖĒq2#¤+ŗ>³ĘFĖPā]s®ÅÓS.ø #äę„éXźL®żō+ód¹Œżøü7kęDšjžc>–n1č:ĆXE%¬¦Ś:éĢÜū»]‚ųż’ĉ¤¤óÉś­„ĶŪ-‹£{é]؈Šd¤Hü,a‘č _}×JK™¶p¹X›„uäŅg]åeP«Qā ł ")¢ōjdźøTs|žBGR#Śø¢ė±īė‚xV\”HJd¤JlĢXóqö…\NžŹQūāŅǹ§Üdµu͉³pĢźß„WēžK .cŲ` >u^Ł4Ć£3Ńy[“ģŲ?LD5ā°ļP– ¾fˆ;ī3&ÓQō źM``/s|ģųIÕø7.5˜&“(.ƒ“ē!Gg³“é*ĆXó,槆ŅFöżR%¢ ёĀ2%'N÷o„e×%__AvN©9¾jPÆ6ZĖt7 ˆSÓΈ¤Äżq©X›Ć÷Épi.s›ÕŠ’ų.sŪt?fL²¤ķ¾ż‰ŗzi¬D®_IĖčžć’™JĢĒĆģ*‹"Ó=č ܤ1+Ėž ¶2B\š:oe Ū­Ņ©“~‚Ä;LĒĆ¢ ¼dJ«–šŻÄOńåÓW-MĒĪŌšŚé¬īį+ģ eēöI‰ø\ȵō@”JOü|ŌJŖŪøB¦»ąē'\³U^Q)’×2lŲ0¾śź+»ŪėtĪÆ‘r™Dō3­@愵ģüjėąŅšY1°ś WݹćńņT¬äɅ½øļÖs"@jF-3eKŖ–ŸŠ@Ź+[nķŻ=()¦dśčT’3 -¤·Ę²ē>%õŌ…NPä8{öaJJ®\ćjó·»ųzĖ Øuüü„ Ņ*ŗˆ1gΜN½§Ė ÄzhźäyČηĕհļ(ÜŠœų0{’“ äš( †Wąéa*én”“‘UŸx}M‘¤Ź—ųśœ•UŽķ?įīTU Kķū褷ˆrFܻڽ¶jS+qž97ß`W»œÜŃ ÄG'¬ĘPYe{ž24¤/Q‘mg0č/’vŅżj€¹ —ˆõüGŅĮĖ?O:h1ėĒ€Nk2)āé~­ļ…”Õx0śj ÓĘzóķŽŠNTve|¼…RUÓ= ¤¾EE•R¼½Md¤E}½0å^©TŚl—?×_~ŗĶļZ’łf.Zę2mΐĶʍķnļļļĻ=÷ÜćŌ=]b :-Le‰·Ū('³u?¼žØéX£‚ø1°YŗuīŚD«V?ŗų)¾lŁ]Ī]KsØØ’FO¤¦VųĖ VÕSUŻżLÄ[+ü{°.Ä(Žśē·—=Ģlq!G:[Ø¶Ę¦ovŚ5„uäØų)³-‡¬t޶‡y‹ŠŠ1JčŁÓæ3d9Ķ™3gxģ±Ēģn% ¹q¼ÉĄ4×±7åņ6©ēLĆZaĶ»DĪž$]9y®–ų‡,cĪZ‚~^D„ŖH˜źĆģɾ4}%aŖ/ßīĻMdŃ$©Ø®OŃik»„h5Ā’Śå4g^\ßeŖńžå¹UnSν¢R8d„Õjl¶ū|Ć7|¾įzöō'rą"#ĆMūLĖųq×u†TÉć±¾Św“õ”©¤ƒš‡ę9ž„ɰčeKµ^)QWoäÜoĀNjF-PÉ{_3uŒŽ«Bń÷5 ‹Ü0AĒ}süy’ĖßÖ¹”Uߦ|uÕüZiŻuéŻS8Ī]VŽ5Ō2ĪӲҷo`›ķ †’ %$ž€»ęŽ"H3N'Ē+¦śW—°5|u‰mVs#Į½aäUĪŽ]v’\ɂåĀ<äĒēKc±Zy "ćĪ$¼æeŲ!· œź÷Łæ^¦cÉĢśMG GHĄéČØhčgeąĻ.„§ŲnėŁb3>Žœ²ŻVźlŚYĪ‘“®jźž¤&,XIvžøŖsśā!ƒrŲõ“ōvģh¬ ätF÷4QŪdœĶ¤¾¾„Ņōų‹Œ Wćt$¾EioSIw[üZ¬[q÷²&›w ' [ÖĒƒc§ĀńÕQŅ^?Š Ų‹^–!¬S²ČXQWWOĘŁLsėæ™(ˆļ»}'Qįy"©é< xż™é(–;Žų—üV)s9 ¬żĢ²jŪÓӓUo>gžX—±‡ Dݼšü[÷ŪķwVm}¼aЦT‡y‘0ÕRÕó|N=éYŅX¬–žĢžCCͱҫ‘ĻV®Ā[Ūµ×B$.Ėģ›ć#ĒóŲ¼ŻMÓüd:œææõ/Ģq줱¬^õ¢<”Ž6ėG›ž—Ų֎½­ū-{…€ū c©U >}-oåÆożw„m\Ńł<ńņ<šš,o⣯=Ėļ¾yY¹w[ؔŅŠkO=ĖŖ3ĶqS“‘%Ļ'Ir”ŖŒ4(++ēł+ēīüżĶģLZϤ˜1‚žģ%"Āūó»[gu–DÉćpĶś”Ÿž ķČ5”Aņ ˜Š¼ŪjĀdxōļŽ*é\†DØłą…`&ްø§ŽŠĄ«H+UōšńA|øa÷ß±Ó|nÖŌR¶,åéæßÉĘķc©­֋ź\ÄŅ?nbģš ĘŻśRgKn7Z’øŲžōĒ L‹Ž_/åvČG˜$.œAµ°’~8ŹÉ3ņĘG®ęƏæ **‚ʼn÷šĻ Ͷ-sž|6'ŅŅ)(Š£V«¹zč`F Ї‡ųŁ–RĮ%²õ@ėķZ滿¹“—HŚ9GÕø–«ĀÕ$½F®¾ĀāFššŒųłx2l°šńýĶū€©ģÉ’.Ė”“B…°Zų×ū ék`ĘdK*oD=ėŽ~›’2©é”äś£V500¬€čA9(FŒF”}‹ų-_:9Öē=Šžb%Õ5 Ō74āļ§!4ŲOOį/³Ńhä¹7vóŹ»?ФŌ~^}īn»Ū.(© ¤ƒXžģėxxxøh¾ ×FDDX«×ńŁz闦ļH2k#M» ^ĀłöGxįAK?I:¢Q+øq¢ĻŪJ¹ēé\v”ę†4µuJn}š Ö¾ń·Ķ8$ųĢ߯’˜Q§m^§P‰sŠu[b:C¦]č¼UD„µ=6WPĪKæaĖŪ?—ŒŒ-ŒF#O.…mŪwóԟ™0žŗ6{ÅÅ„|ōÉV½ū!śBq+%'''SVV@JŠ*¶mPUUÅĪ–ŠÜÜöo됁X/¬®…½GŚ’GĻ@ŽB‚LńģIšŚĒŽØé|ŖjšųģŪ2žś=¹ziĻTרų]āęÜ˜Ģ’…[˜0ņ ­O ¤e„ņĘū —erI™£©ł|ņå1ŽūäŹ+¤›(—_Lʱó][dÖ¾3‡¤²x‰e˜37O/¢×°{ĻOģŽó}ū2ó¦© Jpß T*%C ŁrI>ü+))'Ø©•Ę’³ÄÄD‡ÆĶÉÉ!..Ī©ū+€vO3NĶŪ‚ĆĘ]ŽŻü¦ 0 ŲtÜŠŠī…óµVq20¦•¶W$€µ'‹-ćŠŌŌ6pś¬“ddd„Čé22222!ˆŒŒŒŒŒCČ"####ćrįw¤Ų!¶i9¹·øS !ĪŅ• ¤V®£}“,AY|&†Š2‘<x_ !. ¼Eü5ąŽ»slœ‹{Ž>XēĢ—7Š%ÄÅd!Ģųsž …Ō“õł¦fIEND®B`‚libwebsockets-3.2.1/test-apps/4.png000066400000000000000000000120631357643561300171650ustar00rootroot00000000000000‰PNG  IHDR0?Ō,–sBIT|dˆ pHYs==¬r.tEXtSoftwarewww.inkscape.org›ī<°IDATxœķy\TåžĒß30Ģ Č"(‚.-.¹aø›ęõ²ķZŻĢŹ{³([ģfå­[7Ū7³n÷Ž~eæ²Ņʲl1µÜ·ČŌTPe1PA†}X‡¹ ĢĢĮ†™sFĪūõāõ:ߙēĢłČČłœēū<Ļ÷Q ##ÓŻ˜ ō[„dG›Žż€·DŌā ÆGlāŪ€DŅāŽĄ\±E8É^ ×&¾I‹+Åüoi¦š±HZ\å)ą 54],KŒ‹Ü ŠB›ų)ą!±ÄøĄq`l‹×ކŠ ÅU^7k€łāIq‰ĻˆĒā ¬[„“ĢVŁÄKQ"iq…·ˆHI‹«¼Ż"¦ˆ!Ä hķābqOģiČxJ±ČČČČČx&²ČČČČČ8…l 22222Nį-¶©”P(ˆŽīKxļPĀB{RYYE•”š“'s(,*[ž…ØØ(4 UUUäēē;|®J„"&&ĘŸ={–ņņņ]_6nH’(?ÄųŃ«§•’’ņ:Ī֐žU޾“Nly¼¼L„šÓÕPƒBjŸ|µõT|(+×p2'ˆŗz/±„:„ÆVN§vźÜb}&7+ržĮƒbIž5Ł©s?[»Ü¼7+rqż£Yų—[INŗŠˆ>½ķ¶),*fē®TŽū` ;w„v±B!_~ł%#GŽয়~bŚ“iŸ͉',ń]wŻÅŹ•+;tżN3œ’ü}aź=°å×Īŗ’{HŖeĢåZā¢|ˆō!؇Zµ‚?%:­C‰Ņr#'rźŲ}ŠĄwŪ+ČÉÆ[¶Ć„ś°h~<7ĶźĖ žžvŪ46šHż]Ļ7?šŚ{Ō74v±J+wßöo?÷ŽŽmk08ĪśMyõœ9ē×E ;ĪC÷ĪfŁRēfĶĒøŸ“ŁēܬČy†ĢKĖvźÜ‡Ņ%g jµżķ^„܁ZķÓfŪ°Š®Ÿ3“³g‹D7±é4™4Āl³ĒIß@ž~w(³'“só‰P1|°†¹3xcI/V~UŹC/ĆP#ŽÖ’§öįƒ—GŲö†R© ax‘į¾¼ųŸć]¤Ī>¾ŚśvĶ̽”QĆ 5¬€ĒļßÅK’Jäłćih‡÷dC£V³ść·˜6u¼Ż÷+**il4Ń£‡šĮkėö=]!OŅtšĢg=¾v",~£³®$Ž^ žzc—Š0åĪjj„“^°åś‘¬Y‘€·—BšŗÉg‹jØ44 Q+‰č„E©4·łytžt;‚ƶžgŁĘ¤±9\{ĒĶTT¶m˜2īćšŃ Ŗ«kj[VVŃÉjĒŪŪĖ®y|½~#®ś’Ż{~ÅŠōļR«}ˆėĶ„ńc˜{S2»öģC²¤č4™•h=ī ¢ #Ƴ®ę^ õ ¼³¦„ĀāŖŖ©«7ŁKÅ X5×Lö'4Țs;TĖ“ CYśfaŸ(Ē„²śĶ1óČ+0šü;ĒųģūӔ–[Spµ£‡sćĢH¶żR$†Ü6I¼ęNėEe•ټ½‰Š(cbB.÷Üž+£†YS"“sųz宾åĻ’ī‰Œ˜¼„źjĒƜņž8ßÉj\ćÖłr4=SlfÉ#÷ Ģ£¢¢’ł ³qóŽ ŚÖÖ֑–žAZz’žļŖ ŽļŽtЁ\ q}…Æ%‡×?錫¹Ÿ3E <óŽż›ØæNÉĖśpż“Ėk‹n ę¹’ž—T*Kķ£äæĖF ņ¶Ž@×’TĄ¼GR)«øp즦ÖȎŌ"v¤JĻ<2³C,ꊊ äTn§rƒų’χņ÷wņĢ#[Q4yå”qŁq“å8ļtĒŽg‰ØĘsqėķÜK WŪl]sō$¶ł^BzĄ˜ĖÜyEń2@#ˆgKc6ĶŠĮ=ŠłZÓi›w{ęšWŲłK” ¾lō¦XˈGưž„††XāĆGމØĘ³q«$3›@I9ˆüB8i“AøXŅX·%[ó§ś2#;3ˆØĘŹąøA|ōD™HJÄćl”yłÖļg`iÆ”éZbcū ā“ō ‘”x>n5[sų)ŒMĆ?ڬųO²_-Ą£ø~Z3ĘY§ķ¾ł±žŗzi ŌFGčqz7€“ĢīSėO×µ 6ļˆm£µLwdŻ7¹ķÖė,ńܛ®aėv; ŲdŚÄ„Gę¤ńX¦³V×ĀŖą·cm’¬žŠm Äzr+,Dčæ…ÅŅXõ½vƒpšžŪćERŅõ Ž?Ļ”DėZ{ö÷•\ ńٲm7EEÖõ5soJnwչ̅ød ¶7’­ūĮąĄŽĘFįJõé ÖYžFāpaI„œqŠ›Yó]ž ¾óĘhā£żZi}ń P˜xåÉM–‡€×žseė'Čt[Œ¬śŌŗjŪĖĖ‹Æ?mX—q § Dݓ𼙠»?÷›¶~¾0ѧTG„y“<ÉzSĪĪÆ'3Wõ–2s*ŁžK‘%Vy+łty¾ŚÖ˳\ ¤Ģ’•ŁWY³8ĪśMDT$#e^}ć]Ο×[āńćFóΊēäõą“Li¾ł7óc҇v[÷ ĻKc©}|ņr$¾ėÆoĶŅŚøé‘~§ŃfPfäåA|ńöŲ Ź½ŪĆG%žd€Žņųż»X±lƒ%nlT°ų™é˜LŠ6Ī’éĪ”—WšĢ²å‚×nžÓ5lŁø†q‰£P(.üæŻ—®›ÕU%Óż5Ū›~fdu Ś“¾RĀŲ!ę8y<šŖ³Jŗ–A1jŽ6œ+‡YݳPߥKļKgO€żGJų`mwŻdĶėΚĪĮo§ńÄ«GX·)ŸŚ:į$€¾į¾<ś×Œ̘ėÄ­˜źZMSǟāįæīerbŽą½„/NaŪžhQt9JŹ‚Ō9P `ćχ8–!o|än>ųč āćcX”r‡åµ”Cóć·‘ĒŃōLĪ+D­Vsé%6ō”JĻ{Ąź,Üb ö“Ž®5~Ųm5ę½DŅO9«Ę½ ŒV³ńŻ( (*1ŅŲh"ĄĻ‹!Ō$ õµģę²'^’OY„ aµ åˆč­eĘėTޘ¾:Væ™@iy=i™eœ-ŖAķćEl”ŽĮżP(Ģåe"{kłć¬tŹ%g’²œĀó:ŖkTŌ7( Ø!2¼//įŌ7“ ž~m/¾-żnķKOßźpŪł„•²tKŸz„RIŹĀy‚^GLL11Q­žWTŢk¤_jæ3qŹ@.3ļ*،3ņż.xökœ4N:¢Q+˜~eūƒĪś2#·?QĄę½Ņܐ¦¶®‘ėīŁĆŖ×FsżŒHĮ{*GŲ_`§PĄųQ”¬ž6Ļīūb ó­'&ŖķZcgĪłq÷£É|»Y÷q“ÉÄcK_äĒMŪxüo)ŒMø¢Ķ^FII~¼–o@a‘ø•’SSS)/7OŃ?xŠNŪ60 lٲÅt|›X§ Ävń`u-ģ8ŠńĻ8”ł…fŽgƒ—?rFM×cØiäÓļĖłĒæ )(”ĘŌŻÖØ®1rCŹ^ęL`ń‚Œ‚RŁśø@zV9ƽ—qĮL.)s(­79„w?AE„t@Ϝ-įąįģöŚ”X/­}göHcŃāē-qĮĻ/—³mū>¶mßGļ^”̼zżśEŽ; z})y§ HŻ’;„¦VJSRRœ>7??Ÿ©S§ŗt}ŠįåoÓĘ@LÓ¶ąE%°n«sæz,ō 774txAį<`•Mœ Œj„m»DGØ}™–Ń>„{ģŸÆ’ŗzśr#… ģżŻĄ¶T„n+‘ž°Č&ιėĆ[¦įŖÄ^Dõń„WO F£‰ņŹzNœŖąPz)éY.-8œl“†¦ Ąvg>H£n _d=jš×Õą_‹Ī·ŽR¦½ŹąĆ™B?Ž£š|§ŒŒ…ķ’ö€Ē:ćBĢ1ą’Æ†Š ÅU^7÷ŠŚh+eflāŪy|āTdó/ī¹ø½ Å"'果|i¬ćčLĪÖ°j]nū E¦¦Ö›'=øĪŒL7@žN ####㲁ČČČČČ8…l 22222N!~‘‘‘ńDź€Ķb‹p’–«Žw7‹!ÄU.&©¤5×Ń1Z– ¬>Cˆh9‘ü šžBÜ@E‹ųk õ$ƒŽĪk£ńĢģƒķœłr`ŗXBÜLnӏĒń?ßćåõž‚IEND®B`‚libwebsockets-3.2.1/test-apps/5.png000066400000000000000000000117721357643561300171740ustar00rootroot00000000000000‰PNG  IHDR0?Ō,–sBIT|dˆ pHYs==¬r.tEXtSoftwarewww.inkscape.org›ī<wIDATxœķyXTeßĒ?3Ćl ‹ (˜¶øä†!©¹” uŁjõVV>eŃ^O›ÕSO¶/–õŌSoé[fZY¦•¹”¹ä™š * Ę"ȀģŪ0ļ3sp€qfąœó¹.®ėüfīĆł²Ģłžūwß÷ļV ##ÓӘō[„ d›ż€wEŌāoģ⛁ĻDŅā>Ąl±EøČN Ē.¾I‹;Äņ³“Š ų\$-īņ,°×.¾x[$-īrPd Ķω%Ę ƒb\«×ĆÄć&o4ė€9āIq‹Æˆ×ā,[„‹Ü,µ‹ē£EŅāļ"4-$’wyÆU\*† wŠ!ÄM¼±§!ć%(Å ####ćČ"####㲁ČČČČČø„Ųdddd¤†B” :ŗ?į}C ķMeeUÕ5=šMQq‰Ųņ¬DEE”Ó騪Ŗ"//ĻésÕj5111Öø°°ņņņ³ŗ¾l =Q~ Šń£Ooµ’Ņņz ŠjIĻ*ĒXV/¶<+*•’ =~ : Z _½šŹźzN—×q4ŪH}ƒIl©Nį«7a04ŗtn‰QCS“ĀÊ\gČą$Ϙäҹ_®ü‰œÜ|+ņ ±£™÷›HNšBDæ¾Ū—°ķ·T>^²‚mæ„v±B!ß|ó £FąēŸfźŌ©NŸĶ‘#G¬ńwÜĮāÅ‹Ļźśf 5œśü}aņݰéĪŗ’gˆ¦gģ…zb£4 ˆŌŌK…^« ĄO‰AƤŗÖLY¹‰#Łõlß[Ķ[*ČĪk[¶Ó„jøN×ĶčĻąžŪ45™IżĖČźŸóyóć ›ŗX„»nÅ{/ĪĄĒ§ż,«ÉŌЬŁp„O–ļ„ądE)<{ŗ'ƒóvÜŠ±#§sōøŸ‡¹ĪˆaCxuĮĆ.»g_ŗä D«ÕšÄ?ļįž”ŪŠj5ķ¶ įźYÓ),,Ż@Ä¦Ó dāH‹yĢ/}yś®Pf^ŅĮ4B͈!:fO`įć}Xüm½z’źZńn“ΐ<¹K^MH`ū „RAüˆ"Ć}y忇»Hc|õźĶ,½”ŃĆ#=<‚'ļKäÕ’üĘK‹¶Ń(¢łÉx:­–åŸæĖŌɉßÆØØ¤©ÉLÆ^ĀÆ_·ģč y’¦Ó dęxŪń•ą‘…u%qšQ)øóŚ .¤ćŅŪ³©­3‹-É!W_ɊEńų؄é³ ‹k©¬nD§UŃGRiióĖŽ“bHu_½šēÄÄqŃ\yŪ **ėĖŌcŲ0ƒššZ§Śž>-^¢Ź”y|·f=Ÿ.ż†ķ;ž ŗłēŅj5ÄŒę’ı̾.™ßvģC²¤č4™‘`; ƒ¢ #·³®ęYŠŒ¼æ¢”¢’FŖjšØo0ŁGĶąZ®˜äOhŹŚvÜ0=ĻĢ ež;Eķ|Gq˜06”åļŒ˜Gn~5/½ˆ/>J¢"z1!>š»oÅčįÖ¶“bųnńl.»q©¤{"#'M”¦FÕqC ÷oßNVć7ĶyŒƒé™bĖ8kōyTTT2gī#¬ßøõŒ¶uuõ¤„g–žĮ.=濞H§Čy ¶æšµ¤DxkYg\Ķó7ņüūŽo¢ž%Kōćź©Ö×īæ)˜?<%©T–V£äĆ#QŪ„ÖüœĻ-¦rŗā̱›Ś:[S‹Łš*=óČ„åĶTT5qćcydęŲnf~¾J¦'Jg€ąń»sī[Īv׎f?°Ė”yx;f3¼°p )O­¼žŲ= „õ6ˆ¤JFź¤Ģ»E0`žęŪÉęq–tЁ$7÷s ķ˜å8q:žüćuŌ7˜y…QšŚ čöØ»Zɽ·ÄZćF“™ŪŸŲMM­wLwu•>żƒÕėmƒ’ž~ZžŗßńĄØLĻF§ÕrżµÉÖ8æą$o/śDDEŽ‰Ē $(.n®óy ö7§EÕ>0-ŽÓWūjqX°tRɓū¬µĘ’»ā‡²Īn·ņĄ3ė0™l©Äg]ˆJ%\rEņT‚‚lu&—.ūÖ:X.ć<’dMæ|šĒ÷gŚ ŗO  ¤Lų4_W/ńŪ®‰Äy\!"ówk6ŲG…†ˆæ(RDE2R$i†°HōŹo×¶ŃR¦=J&Ž µĘĒOT±'­TDE]Ļņļ„‹õfLŽI‰ŒTILc=Ī=‘Ļ”ĆY"Ŗń^Ž6m÷ĻŌ7Hc%zt„pŚjz³®˜āT»¼ü“¢ˆŸAXW¬ŖŚq/=2¢/q±1ßkįdŃ)Ņy_ 0Oį1±’XæóĢ÷×ļ“Č„£Į ·‹Q)!( ķ"wz’Qēė˜4ʗ·Vv”²ŽńóžI«»łźó¶h½—‰Fķ\ŃB™īOCƒš”J­V;l—œ4•×_~ŖŻļµā«5Ģ÷øĒ“¹Cnn.«V­rŗ}`` ·Žz«[×ōˆō0a¤-Žą œĢOŪįõ,Ē: L k¤[ē®]ōZIüIšąĻ÷›+øń±<*«„Ń©­†V£¤ŗ¦ē™ˆÆ^xS°/Ä(~0ˆ††ŽSX'ņ¤]‰`õ›œJaķŁ'ž”ŁÖ)+ƒÆŽa»’’RŒĘ2‚ƒ»B–Ūdddšąƒ:Ż>..N2-Žb `ėŲŗ÷Ģ6iĒ,i­Øę]"gŽ—®:VGŅ='¬±^§ _Ø1‘’'ś1󚋾’<џUļōē²»rh’€‡T¶JYō>=Ņ@ōŗÖcAŅ3g^<æŪTć}ś¹E^Sν²J˜²ŅėuŪ}µņ¾ZłĮĮÄ8‡ŲŲhĖ~ ćĒ?ö¢®*y<ņßkŸ¾Ś¶ÆķŌŌśšę1žäK`ŽĖ¶j½R¢¾Į̱æ…7œ“¬: Š¾.eāh«EčoI‹LgąöY|üM™ƒļÖµ”W s’žŠŅXäŲ•ō>µ—Wō¼ßŒcZ÷@śö m£„£±ŒTc©»’ąĘŁWŹŅŒŪ“ć Kż«„ÆZXg76ŽFHlŠ!›’ØbĪ|į<ä‡n‘ĘbµŠJa䜈žYĪ<ŗæ-퐲‚šŚīWĘ^Ę5²sžı¢ÅŅ p»2rō³3šgēĀ“s·UµĒLJ„=ān½ķ2«7U°'½–‹Ī³tĻØ%*\Mnø7Ŗc'„OWƒśóė.éķ–ŲŁŲȑ,é¬Ó‘Ÿ¬£Ł444¢V[n±±Ńā ņbÜī$µ*Māēk)éīč+ Õư·—5Y³Y8hŲŗ>–ģ?,L£'ķõĮ !„ŁRX‡e‘±£¾¾¬£ŁÖxĢčį‚„dœĒ}q£4ÉØ!ŠW™—ČÉö6‚Ä/—‘–YŽÉdXŗ|B_ÕˆĆ„qтxĖĪĒ ez,»’Üo=6ųź¹8~d;­eŚĀ­Vxoøh°-ž÷ģī`–ސXśo˱RiY•¾x;*Ä£¦Õ"Ā& LØ©5‘–YĪŠĮ–z?£ü8?.€“ĢžSėś+Ļ·›LMlÜzTD52RdÕźõÜ|ÓUÖxöuWšė ŲdŚÅ­Gę¤D¬ÓYkź`éZųóPū_Ė×A‰]XoNc……ż·ØD«¾Wž$$¼ļ֞³ʐøP.M°­ޱū„äJ˜ČˆĻ¦ĶŪ)..±Ę³ÆKīpչ̙øe ö7’_wCµ;Bšš„+Õ§ÅŪjdy #„SE³ó„1ÓgŹ‚ųök£‰‹ök£u÷A”€×Ÿ™ŠBa[œ÷ęå§J™3il4±ō ŪŖm•JÅ¢·ž³¬Ė8‡Ė¢m^MŽĀOŪ?w­][?_˜ą…SŖ#Ā|Hžh»)Ļk 3G‹Õ2³+Łņ{±5Vū(łāķx|õŻ»œGʜ1̜2Čļ9PĄš ^:ĶO¦ÓycįGœ:e“ʉćĒšž¢åõ³Ąe¹t”åęßĀŗ³xŠūi»mÆš¾4–V£`Łk‘ųźlæ¾k„µqÓ£/’E“Ż ĢØ ƒųś½qg”{w„F-žd€³åÉūY“`ŗ5nj2óČóė%¹PUF”—Wšü‚·ÆŻpżlZæ‚ń £=Łb¢ūsĶU3ŗJ¢äq¹æfÓĻĢ…¬m·m±RĀø”–8łxą W•t-ƒc“|ņB8·¹g‘±‘W?‘ÖTŃŻJY²2›;®³åugL gļ÷Syź¬ŚG]½p@’p_»ó\Ę fģUāVLu½NĶäľs“„łėłÆüĀęŁās’”¹G©opάג҇C=oJvg³ä³Æ‰‹‹įž”Ū¬Æ :„ußĘńć¹LĻääÉ"“Z-ēŸ7ˆįĆĪC©ō¾¬ĪĀ#ņӎ¶ŪµÅŚķ6iŁK$ż˜«j<˹ŃZÖE~Q#Å„&ššĢų©:HKü0_ė~ `){ņ?ēqŗR…°Z‘ņÆ=DōÕsł%¶©¼1ż ,'ž²ņŅ2OSX\‹V£b@”!P(,åe"ūźł»P:ƒĻĒ€¢SUŌŌ6ŅŠh"0@Gdx*•šĆl6›yīĶͼņŽo")užWŸŪßq£fꔍ– ¤“˜’ģė(•JRęŻ"čuÄÄDÕęyÅÅ%|±buWH”,.ȅ±–][pÅ@~ü ^øŪ'—Žč“ ¦]Üń ³ń“‰[ŸŹgćNinHSWßÄUwļ`é›cøśņHĮ{jFövxžB‰£CYž}®Ć÷ÅĄą«!&ŖżÜtĮÉ īzģ¾ßx¤‹TÉtĢf3OĢ…u6óä?SQ»½ŒŅŅÓ|śłJ½·„"»™\bššJy¹eŠžŽ½ŖŲ¶Cuu5›6m²ĘłłgæM¬Kbæx°¦¶ī9ūļ±/ņŠ "ĢĻÆ}抚®§ŗ¶‰/~,ē_’)"æHSwŪ¢¦ÖÄ5);™5-‚Gęb܈”ʶKˆ§g•óęĒgĢä’2ūŅ łü›ż|ōłŸTTJ·hbA”޽ū]+ ^bŌzX{ģŽ“Ęż¼dó ¼æ\Īę-»Ų¼e}ū„2ż²‰œsN$į}ĆŠhŌeäžČ'u÷_ģŻ{Ś:iüŸ„¤¤ø|n^^“'Ovėś.Čītø«ł§øŌ¹é»­1›įŽąœpKÜ(ņ}ųŽ ųlµžAŃĀ‚} öĮĻWN£¤¾ĮŒ±ÜD~Q#;’Ŗfsj5eŽU"}ՆDõó„Oo&“™ņŹŽ«`_zéYŅXpųĮ§°ö—L{éš7hš×bšÕXĖ“WU7PPTĮĮĆE’f°5‹—ŰxY÷Xk‘™MFf¶Ų2:…Ā“Å,łLĀ[¦J— dćļž¹ø£ Å";Ɓģæ?f걀0 ē œ÷ėåėuž3ß3ēQä|Ī÷ł>ĻóU ##Ó˰Lśˆķ… dāPĖqš†˜ĪøĮ+ĄAūfą‘|q ?`žŲNøČ. ĒĮ¾Éw8„õļŅJąC‘|q—ǁ}ö%Ąk"łā.ŠģǁūEņÅŽۜ{)‚/īņ °¤åX,Ļ·ų”€ų,~Ąj±p‘łĄ*{0N$_Üį „¢’DņÅ]Žlc—‹įˆŠ;±ƒÄpÄM|q¦!ć#(Åv@FFFFĘ7‘DFFFFĘ%d‘‘‘‘‘q ?±‘‘‘‘ …“i żĆėKeeUÕ5?žMQq‰ŲīŁˆŽŽF§ÓPUUE^^^§ÆU«ÕÄÄÄŲģĀĀBŹĖĖ»tY@z!C¢@æ¾:4j%„åõՒ‘U޹¬^l÷lØTJBƒõ4u( “žz5•Õõœ-Æćx¶™ś†&±]ķžz-ƒÖ„kKĢ47[<ģ‘ė VGņģJ—®żļZ#9¹j{äb‡˜Xōē›HNŗ‚ČżŽ)*.aūOi¼ó޶’”ÖĶ łģ³Ļ;v,ß’=3fĢčōµ&“‰£GŚģŪo杕+Wvéž^Īüž0ż.Ųü‹·īäāGź™p‰žŲh ƒ£4÷Q”×*0(1č•T×Z(+oāhv=;öUóõÖ ²óÄv»Ó„iX¼ Žfdؐ@§cš›-¤żfęĖļóyłc446w³—vī¼y,o>=?掣¬MMĶģ=XĄśGywõ> NWt“‡]ēž»ē°|™kYó±cīįųÉÓöČuF¬åłå®ł³wæNr¢Õjxčow³8åV“ZM‡cĆĆB¹nī, ‹E±ńš€Lc€9“¤/ ŽƜÉŠT3zøŽy³Œ¼ŗ“+?/ćžēOS]+ރ¶3$OĄ{/Œ#4Øć_ „RAüčP¢"üyīßGŗÉ;ēųėÕē°ĪRʍŠdÜØH¾'‘ē’łϬŲN£ˆā'ć[č“ZVų3¦':ż¼¢¢’ęf }ś_¼~Üŗ³;ܓ4^9“ģĒ×L%ÆzėNāą§RpĒõĮ\2TĒå·eS['š‚#×͌b͊xüT Įy‹ ‹k©¬nD§UŁORióĆNé¼év½š'˜ĘŌ‰&®¹u •ub»Ōk8pHGMāü³g„“»ćē§r*_¬OåżUŸ±cē/T×ŌÖYJģ“'0ļ†d~ڹG —%…×dv‚żxH †c¹Žŗ›g)27ņ֚RŠJ©Ŗi¦¾ĮBT?5Ćk¹zZ aĮ*ŪŲ‰#õ<¶(ŒeÆušā0eB«_Ÿ Üüjžyė0’żęeåöœN«büČ®ŸŖŸ‹Åp·C®~—‡OSYe]£ńóSه)ń&īŗe,ćFEŚĘNKˆį‹•óøźĘU’ž‰Œ™¶”ššĪ­9åž~ĘĖŽøĒM "9”įŚśŽ˜,}ąnxTTT²`įR7m;gl]]=éĒHĻ8Ęæž³źœĻ{#^ Cģ@ṤDxå#oÜĶó7ņä[Ī¢%ļ-Ąu3Œ¶s‹o į钜‘T(K«QņŸåcP;„ÖŸĻüŅ8[qīŚMm]ŪŅŠŁ–&=ńČĪUJøŹaėšCĒį€ĆĻ%“LøŲ“wCuūČIidӌŽƒæ=œ¶i‡oÖtøĆöŸsöÅĆ|qŸ1oŃ/¼/aa”6ūĄĮĆ"zćŪxT@FYE “Ÿ„¼"8ž»}LO cݜlŸšĻ6±ż×j½±3<Ö(°=+’'āQXTInžżļ}ĮŠFĖō6$°Ó3މä‰ļćQq‡ļÓ u-sƒCÅRHйn†‘™“ģi»Æh¦¾A•č¦HaŚjF/YQ«U“˜Ėj:øB¦·`4 k¶**«DņijŒ1‚Ļ?’¼Óć ÷k¤<& 1¬č­8 Čę_ ®Zkvf'Ą[ŸzźĪŽĒO„ :BĶC C¹ķŚ`["@zV³åJŖ–1@ų#­Ø’Ęā~wSvV˜’`ŠHN@Ö¾æDrÜKŸųˆō#§ŗĮ#׳ĒćE”•©Ī;nż7|ń•øaF£šž•=D@ĀĆƙ;wn·ŽÓcāš:|r ķvU lßW“$>Ģ™$m¹8N‡yēØ”Ö–īŽ˜Ļ6±ā#3/®,‘Tū€Ąį ¤Ŗŗw Hu°ā>Ą BĻVfNÕ©q/¬ųŅĖžøĻÜ«;×F?/ßOt 0ų ģŖjē³ōØČžÄÅĘ8ż¬•ÓEgČ8œŁį˜žŒĒÄqż#u×¹Ÿ§ī² Čå楠· ‹Q)!ŲŲžŪ”^§dģE:¦÷ē›m®mŖć-ü…?Ņź^}Žm÷2ŃØĻ’v,Ó;hh¾T©ÕĪ÷&INšĮ‹Ļ>Ņįw­łd= -õ˜o›Ėŗuė:=>((ˆ[n¹Å­{zD@ z˜2ĘnotŅN껚ā½Öc¦ƒõŅķs×!z­‚¤)$M ä«-Üų`•ÕҘ‰ŌÖ C«QR]ÓūDÄ_/|(86b” Æžė›sfĪ8•'-TŪćĖÆ;ĀŚ»_ß ŽtLې•Įß¹O%%„˜Ķe„„u‡[nsģŲ1ī»ļ¾N‹‹“†€\o°®ulŪwī˜ōÖ°VtĖ.‘s&IW@ŸØ#én{ĢYÆS0 Ģ˜( ÉS˜39–¦Æ$O dŻė¹źĪš% !•mBV½_ƽ®ķZōä±§×ō˜n¼>ī3ķÜ+«„!+½^ētÜ'kæę“µ_DģąAÄƚ¬ūLOü„K»ĆUÉćq _mßß~h*uü¹e'y2,zÖŽ­WJŌ7X8ń»š“žUTńö§„Lg`݊(‚­o\WL4pŪÜ Žł¬ĢÉ·u/å•ĀŲ ĮbsĻxHu…¾!Ā8wyEļū7qNŪH’ža팓b6—‘f.#mĻoÜ8ļY@Zp;9^”°öæjÅYųŖ• k#}aōīŽ]¶üRłeĀ<äūēK£X­¢R8Ł;Ū™›ŚĆł§+Ø©ķymģe\#;ēw;Ų$Ž#=·g c†Ć|!<¼ĄłXU›iR"ģwėm—łrs{3j¹ōBėō÷Ā!Z¢#Ōäˆū :qJųv5lH ?ī–Žn‰ŽĘQ@ŽfI§NGF|²ŽgÓŠŠˆZm}üÅƚÄuȇq{’Ō¦5I€æµ„»³?Ę6/þŽÖdżaźbŪžXbpąˆ0ŒvQœ±‘=—”ƒC ¶‡°ŽČ"ć@}}Ydzmöųq£KÉt÷čÖ$c‡CiD~\"'_8Ū6Šß.#=³œ¦&ūĀŅĢ)żEōF¦L4 ģ­»rœ”éµģłõ€ķŲąÆē²ų1Œ–i·BX}įŅav{Ń3°ē<-‡ĒĄŖX•JkUśŹõīx!5mŠ›%PSŪDzf9#†Yūż ‰ą¢8#陽§'ÖƹČvÜŌŌ̦mĒEōFFЬū2•›oŗÖfĻ»įj~Üź¤€M¦CÜzeNJĖĪZS«¾…_wügõ(qhėĖa¬šP”ž•H£ź{ķwĀEĀ{né=ūa  ćņ{õšĪ=§$×ĀDF|6oŁAq±½¾fŽ Éē­:—9·Äńį’ćØīϐMĶĀJõ+ćķ=²|„ŃĀTŃģ|idś¬ł:W`ßv½‰8S@;£{ ¼ųŲ  ūf_/’[~«”9—ĘĘ&V}lÆŚV©T¬xå ŪĀŗLēpY@“-Õä­|·£ó×~ė06Ą¦ų`JudøÉSķå“y dęH£X-3»’­?ŪlµŸ’_‹Ē_ß³Ūy¤,Ϝ+†Śģ½ XæŃGÓüd¼ĪKÆ¾Ķ™3f›8iĮe£ģźYdnäłw„•*ŗē`)ļ­ĶęöģqŻŁS#Ų÷Õ yé ė6ęQW/Lįσw\Ąų‘!Løö‡īv¹Ėčuj¦'Ęš×;&2-Aæ^öÜlŁ™-Žc$eįLź;Ń õ‡ż>&o|äiŽūąSāābXœr«ķÜČĆŁšÕœ<™Ė”ŒLNŸ.B«ÕrхC5ņB”Jß{Įņļv¶?®=¾ŻaÖ½D2Nøźg¹Ą¤%õķhņ‹).m¢¹Ł‚1@ň”ZāGśŪökŪ“’YšĒŁJ 4ĀjCŹß÷Ł_ĻĢÉöTޘVæOYyé™g),®E«Q18ŚĄš!F k{™Øžz~/”Īāóɟļ„čL5µ446dŌaD„ž2[,žxy Ͻł“HžvžēŸø©Óc”UŹā%–=ž"J„’”E󳎘˜hbb¢Ū½®øø„×HæÕ¾7qI@.‰µī*؊+ņĶOšŌ]v;i’tD§Upåeē_t6Ÿmā–GņŁ“KšŅŌÕ7sķ];Yõņx®›%ų,ČØ&aL_§×)8.ŒÕ_å:ż\ žb¢;ŽMœ®ąĪæę«MG»É+™ž€Åbį”eϱaćž[ ć/ķp–QZz–÷?\ˊ7ߣØXÜNÉiii”—[Sō÷ķsŅŶŖ««Ł¼y³ĶĪĻļś6±. ˆcń`MlŪŪõļŲ ņŠ 2ÜjĻ™/|ąŠ7ŻOum3SĪß’YD~‘4RwŪ£¦¶‰?¤ģbī•‘,Y8”‰£CQ*Ļķ¶’‘UĪĖļ;'“KŹģO/äĆĻšö‡æRQ)ݦ‰…„ģ;pŅ„kKĢŅŚwfĻ^=‹—Ųg¶ł¾Ÿ½“eėn¶lŻM’~aĢŗj*ƒEŃ?FŁ\Fī©|Ņöüƾ}‡Ø­“Ę’³””—ÆĶĖĖcśōénŻ_ty™qĘˆiټøÖżčŚĶƚƒ"¬Ē].(œ¬r°Ó€qķŒ=/¦H5ć/Ö3Ō¤!<ď°?üč4Jź,˜Ė›Č/jd×oÕlI«¦¬Āc-Ņß;ŲįĄiO}y["Āu\‘Ščžōė«£©ÉByeGOT°?£ŒŒ,· g©öd`«+_¤Óś1(*ˆ >: ŒZ ž[›öŖź Š*8t¤ˆ¢3^™šĒög‡¼q#/søPxʲ)†3nņ (–“÷Š;,afß9Ų7>ņś,Ą׆M?{ęęĪv.‹ģ¼²ó¤QĒįM ŠjYµNś­=jė9z\Z‰ 222Bät—DFFFFĘ%d‘‘‘‘‘q ßO‘‘éŌ›ÄvĀEŚ.īmž$†#īŅ“¤ V®cēhŪ‚²ųX G<@ŪDņą1ńmģ/€.ō[ f'ēĘć›ŃǜłrąJ±ń093ž|†’r„‰<"IEND®B`‚libwebsockets-3.2.1/test-apps/7.png000066400000000000000000000116771357643561300172020ustar00rootroot00000000000000‰PNG  IHDR0?Ō,–sBIT|dˆ pHYs==¬r.tEXtSoftwarewww.inkscape.org›ī<°ųÖ¶Ąę\q‰\ģp”Ą°…i'œäilģeF0ä‹+ü tHeČWł¢•`Žø‰; G\Äg/Ė“@šNˆ€Į)ˆ€Į)ųL;@ lƒĆbbōļ„GXØ \4jøøvME5{n›ŃŃыŀĘĘF”••9|¬@ @ll¬Õ®¬¬„J„źŌłŁó“ xŒ>Ń~čė‡ž=Ä øØUéP”Š"·@eŽi÷¬šx\„Ią'"P.‡ĆHȃT"@ƒF‡zU3®)”Ó™vÕ!¤d2‘SĒÖ(Õ0™ĢnöČyōCŚ“ńNūżÖ=(.)w³Gī!¾ ž·i©jDFģŽQTóqā¤߬ ĉ“R{H租~ĀšįĆĤI“>6&&WÆ^µŚĻ<ó 222:už.”øyš—Ÿ’ŃUgr‰ƒ%5P‚ųh!⢄ ąA"ā@īĒ…LĀ…FkFŹˆ«E:œŹÖą×cj•é™vŪaB…X8'3§õF’>žvǘLfdż„ÄöƒåXõMō“‡½¤˜’Ōp|ńž4šłķGYFĪ]¬ĄŽżWńķ–lTT©=äaēyłłéX±Ģ¹Ŗłųa/āZa•›=rž”ƒ`åŠWœ:öÜł\Ö ˆHdĘk扅éJˆDķ uXØĻP”²’Ļø€0M— Čøań€éÉģ7ē‡bśæöE 0t€³¦Ź±ziOdü\‡—WVA£eīFėi#°ī£ ¶;ŽĖå qh¢Ā„ųš?W<ä}¤A‡āXf)#†DbĐH¼žb Vžū$>Xsŏą]ˆEflŁx“&6Śż\­ęĀdā €>Ó=rĢ·ÅčB™žLm?8X¼ŗ«ĪÄ |Ļ>„}Ř0·Śfö„lyxJ2×$‚ĻćŠö›Ķ@eµ Ä"."{JĄåZĘ:Ķž'ŻĪ •°üÕń7:ž-ź†f¦]ņ.\ŹCS“Ö”±õõģ™%ņłöÅć—žXæ!§NK i²<ȈDfÄ÷ŃaLгfÖćäi" ]& ӒØķ>Q@ßh Ƥ«Īę^JÖfÖBQc@c“ :½Q=č'ĀćżijŽ=X‚·„bŁēŠvžGf;*[>E’r >X{ßļ*EŠ Į‰E<ŒŒG§FįčļÕLøŪ.I|‹ —«ŠŠhÉŃšł\DG`lb ž›=#†DZĒŽOŠÅ/³p’X=6~)ššĖ9•ÜøŁÅŽøĘ“s–ąRn>Óntš„ÆÖŠÄC­ębμģ;p{4¢¹™ƒœ\rrEųņ« OŗÉZŗD@īŒā{Ó÷„¦Ÿnꊳ¹ŸŠj–Ƶõ—q±nEž$·ī[ųd0Ž’ź&«BY"!_­MhĒĮr<żjźÕ·ēn“ĶFĻŖĘń,ö‰ä*­āƒ ׋kq½ø’’C6Ž|i,–æ:ŽE,'$Ēāµ’±ā³ćL¹Ü!WóĖŃØ!³$¦ˆŃć•E5V»¹™ƒYOEįŲq2³p”.Yb;ū0ߊģŲ†“¼u£ O,)C~1u3ó“r15„ƒü‰‡Y:æ?śÅQÉņß²k0kŃovÅĆŪ1›÷VCś»iū—<Ÿ„°2†¼"°ōō„łŖĻBˆxt’.“ĖæÅ@ĪuĖvŹP Š~ń×”ӛ±6SIŪ×7¦żµ' øxįéx«m0š1÷µ³hŅzG¹«³|¹žlßG%’żżDxca ƒ؊XdĘcRkŹ+ųųlM0ƒy'n 9pļ­>Ÿ € ·Ā¢>09ŃŻgcŽÓē›hvX0{–Ō¤MŒ@h0µŽą’2ÆćrAēy+‹ŽŚ £‘ %>1c x<Ņp@ē45‚‚ØŖ ›¬Ér‚ćøż'6õ^€+Ē|!Ÿ ū„± ¦Žž4߬cOžćoÄŠģo¾/dĘ(¾Q‡ū©ÅQ”!2$ŽÅ G6’:^ ¶õgy# ķįv± ŪHĖgŻåaP"¦—Å–VŚ_µźi|.ʍ µŚ…„8—SĖ GžgĖ/—hö“‰ yB`+)IėvI©—Æ8×!Ą×qėķœĒī·yuĶ„kĄ…Ź FŻķĪ32Ē ¾bš}„Õ4ƒ@&„ĀiNyēšW8ń{1;»æ7¾gŒŠUō 3 4”Š \øHÄĆYÜ* IC,"µ*ąr!P¦®Ż Ęt—0ÖSiŌ{z”õFœųSÓĪhĻ1 ž>ætµž!O˜£Rр’2źūī×'„Aol#.Ž^‰˜“KÄYÜ* ¶āp0 hÉeī=MķOķE1O’cJ2U¶ūłF%tzv¬D‰¤—­ęśHņ¼5E„uÖķøč ‡Ś¢|ƒą zž²ø˜=”ކ[K‡Rmd’oŌö¾ß€ō™–ķA @LPÄ®^j“:Ö›VR«ž/äińQ{V ų hvI9;fFž¦“œš<ČżDPÖ5µsĮWĖé¢nčƒ ĀĻ?’ģšx™Ģõ5RnŲĖ ōläš@³ŻśiIĄŚŻuꮇĻć :\€×ę…`īCAÖB€œ‚fL]PĀŖ>Xr?śÆTŻČŽä¾§©«§÷eņ“ Y' [×/¦•·ÅŅw6!ēJ©00³gĻvéœn™;Œ²mĆW-ģ9|¼Č²-G;ŲŪē®]$"RĒś#u¬?vUć‰%ehаc&¢m¦ †Hȅ¦É÷DD*”ßl1²…Õ_ī‚^ßń ±“¬¦Ć1L³ż×Ć…°ĪæģoڧuČJ&µķÖŌš Tņģ×O^^^zé%‡Ē'$$°C@&'ZD°ä:Žgß>&ēŗ%¬ŻĖbOOfƀ\¾ŽŒŌ穘³DĢAD(±QB¤óĆō1žøÕōićü±ķóŽø~1L,А†V!+™„ļ“"·Ī±O@Žz?³Ūtć}ó5^Óν”‘. ‰ż ÷‡­rü°UŽą`#āćtˆ×YŽ’¬Aā(–†O<Œ[²G¶į«ēŪMن¶ŅĘĄzf:½×oč¬_9Ķ8p¦_’X‹“ōRL˜[Œ:5uS¾o“ sg2č1…Ŗū÷—±§G—'éLļŖŖRw5ĮuZĻ@zõjØTņuV‚Ķ™x÷żPd¬gǵĪ\ĒŅ’Ŗ{į«öŚHx`h?WĻĪ G’hĜeō:䗟fĒb5użbø#Ņ7Ū™Ēō¦.ņņ*5š“ŻÆ=Į9ŠŠéįĶų8ņ·į,.?žDP­—šö<ąõ9öĒņZå1SS€s̾zŪi¶Vć\®÷Üiiirg¢Ć(©`öńz)żÕœżūųćČoģ{[bWc+ W Ų³N‡Ą<ׄŠė9,å÷ńTZŚĘåHj«Ö$~RKKw{_ņVĆŽŽÖdĒQzҰu,&øp„Žfߕą{]Fūʅ $ˆ a]!B°A§ć ąUÖ=rDķÅRĒq]@\hM2|Š‹‘§(.§Ļ6‚äĢ/HŹÉWĮh¤.†)c{1č 3ŒC³)¶?ą³œż“zŲ“IMø7Ń7;6øŠK!¬šĄ=ż){ĮĄŁŖōÄ޵ls¹–Ué;\ń‚9šZ-"4±ą!¦IkDN¾ ƒś[š=ö‰öĆ] rääūNO¬Ē¼Ėŗm4špąų5½!°‘mŪåxźIŖŻĶ¬™*9꛳BWpé‘95…Ŗ¤jj6ģž¼Üž×–½@MƒXoc……ŠõWQƎUß[÷Ü Ł/Īö÷a Hń¤X«}śl)ėZ˜˜ēšQ)Ŗ«©¤ģ¬™õ®:'܎Kb{ó?rŠhŪŪ‚ŃD/ēœHõČņ6’†ŅKE‹ŹŁQĶ‘łk Ķžūh büŚŻ}ąp€ßšŽM}ųŖ’Ųi‹@šy 6l¦ -x<`ͧ•ÖÄ:Į1œŃ­Õä-ģ9åų±»mĘśI±÷8ėsD†ń‘6Žŗ)–é‘_ĢŽ'˜ü¢ū½Śj ų\lž,RI÷nē‘>g$¦ß××jŸ»Xū½“ĢŠå|²:7oR×DJ²k×T’„z'pZ@& ·Üü[ŲŪ‰½=§Øw…ŽĘ 9ŲōQ¤bźĒ—¹›]/nzõŸĮd“”>0?~1ś¶vļö ˜/č,Ææ˜‚5+¦Zm“ÉŒÅĖ÷ĮLī„6P©øX¾"”¶ļńĒźqx_1’“4v:ĒĘčńČC¾“Oģ§“č¶7żü  ݦ•* ė0zÅN,śÄYO`Śøpdļœ„7>¹ˆmūĖŠ¬£ō—bɳż0rp0F=ÄlĒTGˆ˜˜‹Wžń6yXöį!=]Čc’>o tōĀ€}‡Īćr^Y{ä{¬ū. :,LWZ÷ ¤ÅŽ%(,ąR®UU<ˆDfÜug3† ւė}ĻW]†[dĻé¶ĒµÅīS”€“¼K$÷ŗ³Žø—~1"ģū:å Ŗk0™Ģūń0ØÆ‰ƒ„Ö÷–¶'’³“ õ ,h„ÕŠōœCd/ ¦Œ”Jyc{˰åóDŌ©ōČÉÆGeµ"!qŃ2 č#‡˜Ķ@T/ nT²'ł\ųū"(n6¢Ik€Ž`D \ŒØp9x<śÕl6›ńĪŖ£ųš‹“ yź8+ßyŅį±sźˆ€tĖŽ— ¤/PŅf±±zÄʶ×¬®ęasf@›ŸūN ČĄxĖ[[pF@vŽ{޲S“Ł# b“ļķ8鬬7böå8p¦±Ć±LЬ3į”ēNcĆŖ‘xxJķ³@¹IĆzŲ=ŽĆRF„bĖĪ»Ÿ3L*DltūÕUjĢ_ņ+vøź!ÆŻ³xmYöī—įõæ×`t¢¦ŻYFm-ė7`ĶĮPT3Ūk.++ *•%¤–m§‹m;h4>|Ųj——wž5±N}÷¶‹›šćē:’œĻŹ@d˜Åžž |ō3ŽxÖ„Ķ»TųĒæ(W°£t·-š“F<’~3&Gbń¼¾=4\nŪ],s TXõMŽm•\lę|N%6žt_oüźö6M¬Ø¬Eö…B§Ž­Q²ė½3gĻå`įā¬vy…÷·Ė9zL†£ĒdčÕӀ©÷7ąŽ;ōļe€Ph†RÉCI©Yg%ČĪCŪĢŽN°éééN[VV†‰'ŗt~§äl.0’ÖßNu­cå»­1›gŽī·Ų†ļĆ/¼_ļ¶KŠ7Fˆ°`>Bƒłš“r r”ӛ”TQ®0ąĢ_ĶŅŠŗńzŪö—aŪž2„‡‰q_RODGHѳ‡F£Ŗ=®^Wć|nr Ų‘ ürżŲ}(bųĖ„ū‹ “ ­mŚ5zT(ŌøtEÅMvĪ[“±é26aŚ ·—_„¼ü"¦Żč*«ųX÷éøėN ȁ߯sr{o.dŠ¢2=ŠŹŲ±Ž£+©Ph±aū[{h› øz]… ©' ‚S!‚S!‚SųęūN ‚·£p€i'œ¤urļ8€Ē™pÄUŗ“€4`W­£c“®aÓŲĢ„#n u!y€o˜pÄ Ø[ŁæčDæÖ “³o$¼3ś`S«ÉQ˜Ģ˜'ī„ų֗×ń_QRdŠsø«IEND®B`‚libwebsockets-3.2.1/test-apps/8.png000066400000000000000000000117751357643561300172020ustar00rootroot00000000000000‰PNG  IHDR0?Ō,–sBIT|dˆ pHYs==¬r.tEXtSoftwarewww.inkscape.org›ī<zIDATxœķyXTeūĒ?3Ćl ‹ ā `Śā’†øf¹@]¶Zż2+ß²([ģĶŹź­7Ūwė­·~eæ²ŅʲlQ“Ģ%—ČŌTp0@Adßē÷ĒĄĢp˜8gą|®Ėė:÷™ē̹9ßóÜĻ}ߏ™īĘ$ ‡ŲNø@&p éŲxKD_Üį5`æĶ4ß |"–3īąĢŪ ŁdŪŁWa"łā°ü]šé|*’/īņ$°ĒξxC$_Üå ĄĪ~x@$_Üį0¶Å¹×”"ųā.Æ ›ŽuĄ\ń\q‹/ˆ÷ā¬Ū ™,·³£DņÅŽB( Z Q$_Üåķv0Y G<€Ž(†#nā3 /A)¶22222މ, 22222.! ˆŒŒŒŒŒKųˆķ€ŒŒŒŒŌP(} ļJXhOŹĖ+ØØ¬āčŃ, ‹ÄvĻJTčt–ćŠ ČĶužZµ¢£möɓPZھūĖŅ åĒĄh?zõŌ”Q+).­%栚ōĢRL%µb»gE„R¤ĒĻ !0@‡B”@«Qį«WS^YĖ™ŅŽf™Ø­kŪU§šÕk1“.][d*£±Ńģa\gš ž$͘äҵ_¬ZKvNž‡=ņ 1ŒĢ’ĒM$%^JDŸŽĒ±õ·T>ųh%[Kķd…|ż5Œi9žłg˜:ÕłkF8|Ųfß~;,[Ö¾ūw˜€hŌpśš÷…)wĮĘ?:źNž!n؞1é‰‰ŅŠ?RCPz­‚?%½’Źj3%„ ĪŖeŪžJ~Ų\FVnŲn;MH †sc¹nF_ šw8¦±ŃLź_&¾ū9W?8B]}c'{ićĪ›Gņö³3šńi;ŹŚŠŠČīżł¬Y˜Wģ!’TY'yŲ~ø{&K»–53ā^Ž?åa\gųŠĮ¼øäA—®Ż½7]r¢ÕjxäŸw³ łV“ZM›cĆBCøzÖtNž,]@ĦĆdā‹xĢ'}yüĪPfŽ÷k{P„šįƒuĢžĄė‹z±ģ›xń•Õā=h!iJ>zi!m’b(• ↇīĖ ’=ŌIŽ9ĘWÆ>§x€e–2jX£†Ešč½ ¼ųŸßxnéVźE?ļB§Õ²āÓ·˜:%Įįēeeå46šéŃCųāõėęķįž¤é0™9Īv|åXųzGŻI|T īø6ˆ‹ź˜|[Õ5Ņ /Ųsõ“HV.ĆG„œ7›įda5å•õč“J"zéQ*-c~Ł.7Żöą«WóōC“˜8Öȕ·®¤¬¼Fl—ŗ ū”ŖŖŚ©±gĪHg–čć£r(ß®Iįćå_³mūT6ż½“Z 1ŒŒOĆģė’ųmū.1\–& 3āmĒ"a`É騻y–S=ļ¬,¦ ØžŠŖFjėĢDöR3Øæ–+&ł¤²Ž;TĻóCYüfAß(ʄ²āĶ1ńČÉ«ä¹wņŏ'()µ…ątZ£‡sķōH6ż^(†»mŇģ;xŠņ Ė’؈Lˆ3r×-#5,Ā:vR|4ß.›Ķå7.—ōLdĤETU9·ę”ó÷éöĘ=nšū0Ņ3Äv£Ż,zčnx”••3wŽBR6l9klMM-iéGHK?Ā»ļ-?ėóīH‡Čłż!¦Æš\b¼öYGÜĶóäÖóō;Ž¢ž%-éĆÕS¬ēÜĢ³ļ–T(K«QņŽ’ØķĀ@k~ĪcĪC©œ);{ķ¦ŗ¦-©…lI•žxd7YÅ ¾¾‘cŁÅĖ.ę’¾ÜĆć÷Oąé‡&¢PXÄrņøh¹gKŽ8ūA gäQQ)Ļ’Ä"ŚŲ—ļ›gµkjj™}ó½l޲SDƼ‹©±Ÿ}˜›";ö!-o¦¬¢‘Ī%#Ūö0óóU2=įė'Ģ¢;q^[Ģvēž"fß·Ó”xx;f3<óśf’ūIpžį»ć ėiÉ+©“<Ž`ĮüÕ7Ž—Å£tˆ€$5ͳó!ķ˜å8a8:Nžń:jė̼³Ņ$87ŠŲöug¢Q+¹gNŒÕ®o0sŪ#»ØŖöŽtWWy÷ć?ų.Ŷųļļ§å±ŽFeŗ7:­–ėÆM²Śył§xcé‡"zäx\@‚ą’¦>Ÿū3a_SXTķ—Åyśnā±}o•Ą –NIMŅ”>„Ūź žwå1f¶³BČK¹ļ‰u44ŲB‰7Īŗ•Jnø #䊤©ŁśL.’ģėb¹Œóxü7kś%ąÓ“Ƽ/Ć& ŠuĀXE%Ā·łšZé¬ÜzQ`šÅqqģæKX³ŽVb īāH=’‘"‰3„M¢W}óS+#eŚĀćb/ö3ęĻŗŹĖ ^'L‹=q²^$O„Ø}”LjµŸØ`wZ±ˆu>+¾= °gL‰É©’?Śzœs"ƒ‡2EōĘ{ńčć\„„Ėķ¶®9pöŁż\BzĄ˜ =yGń2P'°—F6ĶŠĮ=0ųŚĀi¶ygM‡;lż=[`_8Č÷“é(z…õ$44ÄjļŪPDo¼ Hü0‹H—ĀĮć[G’¶é*a¬›“lńSә¶žY)¢76Ēģ‡Ļˆä‰xœ,(''×ö÷>o@H£eŗżū÷ŲiéGDņÄūńØ€Ų‹Ćϩм–¹Ī®ā?± $Å\=5€ićli»o~j¢¶N•čĘaŚjz7Y{ŃVõ¼ļH5/-“N•pµĄĪɓĘĢØ³9‘g›ØÕ*ü“˜JŖŚøB¦» ¬Ł*+ÆÉĻ2d|óóć (‘ņ˜€D÷±T 7c/ ’€šZh®Ł™ļ|å©;w<>*Qįj™ĀmWYŅ2k˜>?GR}°ü„?Ҳ i,īw6%g„)™~ädÕĒ )Ē­±č©ĻH;t¢wm¢×*HœąOā¾ßTʍēR^)™HuP0“%•UŻOD|õ‡‚}#F©šś»?žõ0sĉ\él”Śßż°Ń©Öī½ā§Ģ¶ Y|õĒc2•Ųn¹Ķ‘#p’żĪ•ˆ€\g°¬ulŁsö˜“c–°VTÓ.‘3ĒIW@«!ńn[ĢYÆSŠ'Ō‡čH Iż˜9ޟ¦¦Æ$Mōgõ›}¹üĪl% !å-BV½O·½®åZōä‰gWv™n¼?µŌkڹ—WCVz½Īįø/WżĄ—«~ 88˜žżˆ‰1Zö7šø1w†«’Ē#b¾Śŗ·õŠTŹųGÓ"OŅx˜’¼­[Ɣح3sģoį'-³ØążÆŠ™8ŹĄź„‘ś[Ā"—Ž5pŪ¬@>ųŗÄĮ·u.„åĀŲææĮ‡BS×xHµ‡žĮĀ8wiY÷ū7qLĖHļŽ”­Œ“`2•j*!u×_Ü8ūJY@šp;9^”°ōæjĘQųŖ™uvk#į=aųyīŽ]6żQĮÜÅĀ<äęH£X­¬\8éŃ=Ū™ūŚĀy§ŹØŖīzmģe\#+ūoÓß(Ž#]·g #C;r<:×ńXU‹uĢÄŲ-īÖŪ.óŻĘ2v§Wsńł–éļł“D…«ÉÉ÷Auģ„šķjŠ~Ż)½Ż;{9œ):ńÉ<šE]]=jµåńc×!/ĘķHb‹Ö$~¾––īŽž“xöö¶&k6  [öĒƒ}‡„a“ bZŁuŲ?„ [ė, 2vŌÖ֑y4Ėj5L°±”Œóø/ n“&9zK#ņćŁyĀŁFP€ųķ2Ņ2Jih°-,M›Š[DoÄaĀX£ĄŽ¼#Ūń@™nĖ®?÷Y ¾z.‰ŃĘh™Öp+„Ž.d³ē?»Ī‘„78–’Ūr¬TZŖŅ—­qĒ ńØjQDŲ(„€ŖźŅ2J2ČŅļg@”Đ–Ń}zb]åÖ憆F6l9*¢72Rdõw)Ü|ÓUV{öuWšėfl2māÖ+sbÖtÖŖXžüy°ķ?+ÖA‘]ƒXoc……õ· HUᮙ  dūģ‡186”Éń¶źįķ»NH®…‰ŒųlÜ“ĀB[}Ķģė’ĪYu.s6n ˆżĆ’×]Péϐ ĀJõĖāl=²¼ųįĀTѬkÖ{išŸL‡óŹėļsś“Éj'ŒĶ;KŸ•ŌہĖ2y¤åįßĢŗv¼č­ŻfŪ+¼/Œ„Õ(ųģ„H|u¶¾•?Ik榇ž’‹F»E™‘ńÕŪcĻj÷īZüd€öņč½ ,]2Żj76šYųtŠ$ Ue¤AiiO/yCpī†ėÆ`cŹJĘŏĢd›‰6ö嚫ft–‹’ĒåłšżC?#2ŪŃmŚT ©`ģ‹4ī{ÅUO:—AŃZ>|&œK†ŁŌ³ĄTĻ‹J+Utמb>Z•Åķףāŗ3&†³ēū©<öŹ~VÆĻ„¦V˜Š7ܗ‡ļ8ŃCƒs•øSAÆS3%!šļˤxaüzń æ°i{–8Ž9Iņ¼iŌ:Ń å—½<"o|äi>śä+bc£Y|«õÜŠ!ƒY÷ż'?žĆō N*@«ÕrĮł6ō|”Jļ{Įź(<" k··>®5~Śfę½DŅ¹źg9ĻØ%åż(ņ ź),n ±ŃL€ŸŠ!µÄ õµī–¶'’³(—3åh„Õ‚äķ&¢·žićm©¼Ń} ¬x3Ž’Ņ:Ņ2Īp²°­FE’(ƒ PXŚĖDöÖó÷Ié,>’ż> NWPU]O]}:"ĆP©„æĢf³™§^ŻÄ o’&’§ĪóāS79=vnI¹, Äā'_F©T’<Ž`ÖEttT«×ńłJé·ŚļH\‹b,» 6技üų P?¢§Ćė Hʊļs~._ ŃQmǦóO•qēĆ?šż†Ćä•LWĄl6óČāX·~ž3™±q·9Ė(.>Ćǟ®béŪQP(n§äŌT(mŹŠß栉m[TVĀʍ6;Ļ…]b]ūāĮŖŲ²»żß±÷ä@D˜Åž9^śÄo:ŸŹźF>’±”ż§€¼i¤ī¶FUu×$ļ`Öe,œ7±ĆCP*ĻŽķ6“žYŹ«9+“KŹģM;ɧ_ļćżO’¤¬\ŗMóO³gßq—®-2Ikߙ]»ÓX°š9«—ļżķr6mŽÉ¦Ķ;éŻ+”é—O¤_æHĀ{‡”ŃØ1™JČ9‘GꮿسēÕ5Ņų–œģśµ¹¹0eŠ{÷Wķ^fœ:¢›¶/,†ÕæŗvóĖĒBæpĖq}}» ēĖķģT`T+cω1BĶč õ 4j ö!4Ų?_:’Ś:3¦Ņņ źŁńW%›R+))óX‹ō·€vvpŹS_Ž’š0—Ę÷"Ŗ/½zźhh0SZ^ĒįceģM/!=Ó­‚Ći@Š=ŲģŹé“>ō‹ $°‡ƒ†-_µM{Eełe8T@Įé™ūöēG:āFĢAąüēöCEšÅ]^6÷ Ū+efkm¦łfĄK^Ÿ…ø4Łš»gnīhēB±ČŹ­#+WuI~A5ĖWKæµGuM=‡J+1AFFFˆœN ####ć²€ČČČČČø„, 22222.!7~‘‘‘ńFj b;į"-÷¶7ˆįˆ»t%©¤•ėč-[PVŸ‹įˆh™Iž| †# ¬…ż-ŠŽ~ ’ĮäąÜh¼3ś`Ÿ3_ \&–#žE‘0ćĻkųÕśÆ*#%“IEND®B`‚libwebsockets-3.2.1/test-apps/android/000077500000000000000000000000001357643561300177325ustar00rootroot00000000000000libwebsockets-3.2.1/test-apps/android/README000066400000000000000000000035451357643561300206210ustar00rootroot00000000000000/* * libwebsockets Android client - libwebsockets test application for Android * * Copyright (C) 2016 Alexander Bruines * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ This directory contains an Android Studio (2.1.1) project that builds libwebsockets (+ openssl + zlib) and an Android application that is able to connect to the 'dumb-increment-protocol' of the libwebsockets test server. Building the native libraries requires the Android NDK which can be installed using the SDK manager. The app/src/main/jni/NativeLibs.mk is fully integraded with Gradle but will only work on Linux and requires the following applications to be available in addition to the NDK: awk cmake egrep git tar wget makedepend (makedepend can be installed from (Debian) xutils-dev) To build the project: - Open an 'existing project' with Android Studio and select this directory. (answer yes/ok to the question to integrate with Gradle). - Open the file app/src/main/jni/Application.mk and make sure NDK_ROOT is set correctly and that APP_PLATFORM is set to the appropriate API level. - Build the project with CTRL+F9 (open the gradle console to follow the build progress). - Install APK to device and run. - Connect to libwebsockets test server. libwebsockets-3.2.1/test-apps/android/app/000077500000000000000000000000001357643561300205125ustar00rootroot00000000000000libwebsockets-3.2.1/test-apps/android/app/app.iml000066400000000000000000000223171357643561300220020ustar00rootroot00000000000000 libwebsockets-3.2.1/test-apps/android/app/build.gradle000066400000000000000000000022021357643561300227650ustar00rootroot00000000000000apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { applicationId "org.libwebsockets.client" minSdkVersion 17 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { jni.srcDirs = [] } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.3.0' } task buildNativeLibs(type: Exec, description: "compile the native libraries") { commandLine 'make', '-f', 'NativeLibs.mk', '-C', 'src/main/jni', 'all' } task cleanNativeLibs(type: Exec, description: "clean the native libraries source tree") { commandLine 'make', '-f', 'NativeLibs.mk', '-C', 'src/main/jni', 'clean-ndk' } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn buildNativeLibs } clean.dependsOn 'cleanNativeLibs' libwebsockets-3.2.1/test-apps/android/app/src/000077500000000000000000000000001357643561300213015ustar00rootroot00000000000000libwebsockets-3.2.1/test-apps/android/app/src/main/000077500000000000000000000000001357643561300222255ustar00rootroot00000000000000libwebsockets-3.2.1/test-apps/android/app/src/main/AndroidManifest.xml000066400000000000000000000017771357643561300260320ustar00rootroot00000000000000 libwebsockets-3.2.1/test-apps/android/app/src/main/java/000077500000000000000000000000001357643561300231465ustar00rootroot00000000000000libwebsockets-3.2.1/test-apps/android/app/src/main/java/org/000077500000000000000000000000001357643561300237355ustar00rootroot00000000000000libwebsockets-3.2.1/test-apps/android/app/src/main/java/org/libwebsockets/000077500000000000000000000000001357643561300265755ustar00rootroot00000000000000libwebsockets-3.2.1/test-apps/android/app/src/main/java/org/libwebsockets/client/000077500000000000000000000000001357643561300300535ustar00rootroot00000000000000libwebsockets-3.2.1/test-apps/android/app/src/main/java/org/libwebsockets/client/LwsService.java000066400000000000000000000076121357643561300330120ustar00rootroot00000000000000/* * LwsService.java - libwebsockets test service for Android * * Copyright (C) 2016 Alexander Bruines * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ package org.libwebsockets.client; import android.os.Message; import android.os.RemoteException; import android.util.Log; public class LwsService extends ThreadService { /** * Commands that can be send to this service */ public final static int MSG_SET_CONNECTION_PARAMETERS = 1; /** * Messages that may be send to output Messenger * Clients should handle these messages. **/ public final static int MSG_DUMB_INCREMENT_PROTOCOL_COUNTER = 1; public final static int MSG_LWS_CALLBACK_CLIENT_CONNECTION_ERROR = 2; public final static int MSG_LWS_CALLBACK_CLIENT_ESTABLISHED = 3; public static class ConnectionParameters { String serverAddress; int serverPort; ConnectionParameters( String serverAddress, int serverPort ){ this.serverAddress = serverAddress; this.serverPort = serverPort; } } /** * Handle incoming messages from clients of this service */ @Override public void handleInputMessage(Message msg) { Message m; switch(msg.what) { case MSG_SET_CONNECTION_PARAMETERS: { LwsService.ConnectionParameters parameters = (ConnectionParameters) msg.obj; setConnectionParameters( parameters.serverAddress, parameters.serverPort ); break; } default: super.handleInputMessage(msg); break; } } /** * The run() function for the thread. * For this test we implement a very long lived task * that sends many messages back to the client. * **/ public void workerThreadRun() { initLws(); connectLws(); while(true) { // service the websockets serviceLws(); // Check if we must quit or suspend synchronized (mThreadLock){ while(mMustSuspend) { // We are asked to suspend the thread try { mThreadLock.wait(); } catch (InterruptedException e) {} } if(mMustQuit) { // The signal to quit was given break; } } // Throttle the loop so that it iterates once every 50ms try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } exitLws(); } /** Load the native libwebsockets code */ static { try { System.loadLibrary("lwsservice"); } catch(UnsatisfiedLinkError ule) { Log.e("LwsService", "Warning: Could not load native library: " + ule.getMessage()); } } public native boolean initLws(); public native void exitLws(); public native void serviceLws(); public native void setConnectionParameters(String serverAddress, int serverPort); public native boolean connectLws(); } libwebsockets-3.2.1/test-apps/android/app/src/main/java/org/libwebsockets/client/MainActivity.java000066400000000000000000000213441357643561300333230ustar00rootroot00000000000000/* * MainActivity.java - libwebsockets test service for Android * * Copyright (C) 2016 Alexander Bruines * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ package org.libwebsockets.client; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.ServiceConnection; import android.os.IBinder; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.inputmethod.InputMethodManager; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity implements LwsService.OutputInterface { /** This is the Messenger that handles output from the Service */ private Messenger mMessenger = null; /** The Messenger for sending commands to the Service */ private Messenger mService = null; private ServiceConnection mServiceConnection = null; private boolean mThreadIsRunning = false; private boolean mThreadIsSuspended = false; private TextView tvCounter; private EditText etServer; private EditText etPort; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Get the layout items tvCounter = (TextView) findViewById(R.id.textView_counter); etServer = (EditText) findViewById(R.id.editText_serverLocation); etPort = (EditText) findViewById(R.id.editText_portNumber); // Create the Messenger for handling output from the service mMessenger = new Messenger(new LwsService.OutputHandler(this)); // Restore state from the Bundle when restarting due to a device change. if(savedInstanceState!=null) { mThreadIsRunning = savedInstanceState.getBoolean("mThreadIsRunning"); } mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mService = new Messenger(service); try { // Set the output messenger by starting the thread Message msg = Message.obtain(null, LwsService.MSG_SET_OUTPUT_HANDLER, 0, 0); msg.replyTo = mMessenger; mService.send(msg); if(mThreadIsRunning){ // If the thread is already running at this point it means // that the application was restarted after a device change. // This implies that the thread was suspended by the onStop method. msg = Message.obtain(null, LwsService.MSG_THREAD_RESUME, 0, 0); mService.send(msg); mThreadIsSuspended = false; } } catch(RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { Log.e("MainActivity","onServiceDisconnected !"); mService = null; } }; if(savedInstanceState==null){ startService(new Intent(getBaseContext(), LwsService.class)); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean("mThreadIsRunning", mThreadIsRunning); } @Override protected void onStart() { super.onStart(); bindService(new Intent(getBaseContext(), LwsService.class), mServiceConnection, Context.BIND_AUTO_CREATE); } @Override protected void onStop() { super.onStop(); if(mThreadIsRunning) { if (!mThreadIsSuspended) { try { mService.send(Message.obtain(null, LwsService.MSG_THREAD_SUSPEND, 0, 0)); } catch (RemoteException e) { e.printStackTrace(); } mThreadIsSuspended = true; } } unbindService(mServiceConnection); } @Override protected void onDestroy() { super.onDestroy(); if(isFinishing()){ stopService(new Intent(getBaseContext(), LwsService.class)); } } /** Implement the interface to receive output from the LwsService */ @Override public void handleOutputMessage(Message message) { switch(message.what) { case LwsService.MSG_DUMB_INCREMENT_PROTOCOL_COUNTER: tvCounter.setText((String)message.obj); break; case LwsService.MSG_LWS_CALLBACK_CLIENT_CONNECTION_ERROR: connectErrorListener(); break; case LwsService.MSG_LWS_CALLBACK_CLIENT_ESTABLISHED: break; case LwsService.MSG_THREAD_STARTED: // The thread was started mThreadIsRunning = true; mThreadIsSuspended = false; break; case LwsService.MSG_THREAD_STOPPED: // The thread was stopped mThreadIsRunning = false; mThreadIsSuspended = false; break; case LwsService.MSG_THREAD_SUSPENDED: // The thread is suspended mThreadIsRunning = true; mThreadIsSuspended = true; break; case LwsService.MSG_THREAD_RESUMED: // the thread was resumed mThreadIsRunning = true; mThreadIsSuspended = false; break; default: break; } } private void connectErrorListener(){ try { Message msg; if(mThreadIsRunning) { msg = Message.obtain(null, LwsService.MSG_THREAD_STOP); mService.send(msg); } AlertDialog.Builder adb = new AlertDialog.Builder(this); adb.setTitle("Error"); adb.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }); adb.setMessage("Could not connect to the server."); adb.show(); } catch (RemoteException e){} } /** * Start/Stop Button Handler */ public void clickStart(View v) { if(!mThreadIsRunning) { View view = this.getCurrentFocus(); if (view != null) { InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } mThreadIsRunning = true; mThreadIsSuspended = false; try { Message msg = Message.obtain(null, LwsService.MSG_SET_CONNECTION_PARAMETERS, 0, 0); int port = 0; if(!etPort.getText().toString().equals("")) // prevent NumberformatException port = Integer.parseInt(etPort.getText().toString()); LwsService.ConnectionParameters parameters = new LwsService.ConnectionParameters( etServer.getText().toString(), port ); msg.obj = parameters; mService.send(msg); msg = Message.obtain(null, LwsService.MSG_THREAD_START, 0, 0); mService.send(msg); } catch(RemoteException e) { e.printStackTrace(); } } else { try { mService.send(Message.obtain(null, LwsService.MSG_THREAD_STOP, 0, 0)); } catch(RemoteException e) { e.printStackTrace(); } mThreadIsRunning = false; mThreadIsSuspended = false; } } } libwebsockets-3.2.1/test-apps/android/app/src/main/java/org/libwebsockets/client/ThreadService.java000066400000000000000000000244071357643561300334550ustar00rootroot00000000000000/* * ThreadService.java - libwebsockets test service for Android * * Copyright (C) 2016 Alexander Bruines * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ package org.libwebsockets.client; import android.app.Service; import android.content.Intent; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; import android.util.Log; import java.lang.ref.WeakReference; public abstract class ThreadService extends Service { /** Messages that can be send to the Service: **/ public final static int MSG_SET_OUTPUT_HANDLER = 1001; public final static int MSG_THREAD_START = 1002; public final static int MSG_THREAD_STOP = 1003; public final static int MSG_THREAD_SUSPEND = 1004; public final static int MSG_THREAD_RESUME = 1005; /** * Messages that may be send from the Service * (Clients should handle these messages) **/ public final static int MSG_THREAD_STARTED = 2001; public final static int MSG_THREAD_STOPPED = 2002; public final static int MSG_THREAD_SUSPENDED = 2003; public final static int MSG_THREAD_RESUMED = 2004; /** Data accessed by both worker thread and the UI-thread must be synchronized **/ public final Object mThreadLock = new Object();; public volatile boolean mMustQuit; public volatile boolean mWorkThreadIsRunning; public volatile boolean mMustSuspend; /** Handler for incoming messages **/ public static class InputHandler extends Handler { private final WeakReference mService; InputHandler(ThreadService service) { mService = new WeakReference(service); } @Override public void handleMessage(Message msg) { ThreadService service = mService.get(); if(service != null) { service.handleInputMessage(msg); } } } /** * Interface and Handler for outgoing messages to clients of this service. * (Must be implemented by the client.) */ public interface OutputInterface { void handleOutputMessage(Message message); } public static class OutputHandler extends Handler { // Notice that we do NOT use a WeakReference here // (If we did the service would lose mOutputMessenger the moment // that garbage collection is performed by the Java VM) private final OutputInterface mInterface; OutputHandler(OutputInterface object) { mInterface = object; } @Override public void handleMessage(Message msg) { mInterface.handleOutputMessage(msg); } } /** The Messengers used to communicate with the clients of this service **/ public final Messenger mInputMessenger = new Messenger(new InputHandler(this)); public Messenger mOutputMessenger; /** The worker thread and its runnable **/ public static class WorkerThreadRunnable implements Runnable { private final WeakReference mService; WorkerThreadRunnable(ThreadService service){ mService = new WeakReference(service); } @Override public void run() { ThreadService service = mService.get(); if(service != null) { service.mWorkThreadIsRunning = true; service.workerThreadRun(); service.mWorkThreadIsRunning = false; } } } public Thread mWorkerThread; /** Handle incoming messages from the client **/ public void handleInputMessage(Message msg) { try { Message m; switch(msg.what) { case MSG_SET_OUTPUT_HANDLER: // set the output messenger then // send a message indicating the thread status mOutputMessenger = msg.replyTo; break; case MSG_THREAD_START: try { // reset thread vars synchronized (mThreadLock) { // thread allready running? if(!mWorkThreadIsRunning){ // no, start it mMustQuit = false; mMustSuspend = false; mWorkerThread = new Thread(new WorkerThreadRunnable(this)); mWorkerThread.start(); } else { // yes, resume it mMustQuit = false; mMustSuspend = false; mThreadLock.notifyAll(); } } } catch(NullPointerException e) { e.printStackTrace(); } if(mOutputMessenger != null) { m = Message.obtain(null, MSG_THREAD_STARTED, 0, 0); mOutputMessenger.send(m); } break; case MSG_THREAD_STOP: try { synchronized(mThreadLock) { if(mWorkThreadIsRunning) { mMustQuit = true; mMustSuspend = false; mThreadLock.notifyAll(); } } mWorkerThread.join(); } catch(InterruptedException e) { Log.e("ThreadService","handleInputMessage join() interrupted"); } if(mOutputMessenger != null) { m = Message.obtain(null, MSG_THREAD_STOPPED, 0, 0); mOutputMessenger.send(m); } break; case MSG_THREAD_SUSPEND: synchronized (mThreadLock) { if(mWorkThreadIsRunning) { mMustSuspend = true; } } if(mOutputMessenger != null) { m = Message.obtain(null, MSG_THREAD_SUSPENDED, 0, 0); mOutputMessenger.send(m); } break; case MSG_THREAD_RESUME: synchronized (mThreadLock) { if(mWorkThreadIsRunning) { mMustSuspend = false; mThreadLock.notifyAll(); } } if(mOutputMessenger != null) { m = Message.obtain(null, MSG_THREAD_RESUMED, 0, 0); mOutputMessenger.send(m); } break; default: break; } } catch(RemoteException e) { e.printStackTrace(); } } /** * This can be called from the JNI functions to send output messages to the client */ public void sendMessage(int msg, Object obj){ Message m = Message.obtain(null, msg, 0, 0); m.obj = obj; try { mOutputMessenger.send(m); } catch(RemoteException e) { e.printStackTrace(); } } /** The run() function for the worker thread **/ public abstract void workerThreadRun(); /** * Called when the service is being created. * ie. When the first client calls bindService() or startService(). **/ @Override public void onCreate() { super.onCreate(); // initialize variables mWorkThreadIsRunning = false; mMustQuit = false; mOutputMessenger = null; mWorkerThread = null; } /** * Called when the first client is binding to the service with bindService() * * If the service was started with bindService() it will automatically stop when the last * client unbinds from the service. If you want the service to continue running even if it * is not bound to anything then start the service with startService() before * calling bindService(). In this case stopService() must be called after unbinding * to stop the service. */ @Override public IBinder onBind(Intent intent) { return mInputMessenger.getBinder(); } /** Called if the service is started with startService(). */ @Override public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; } /** Called when the first client is binds to the service with bindService() */ @Override public void onRebind(Intent intent) {} /** Called when all clients have unbound with unbindService() */ @Override public boolean onUnbind(Intent intent) { //mOutputMessenger = null; return false; // do not allow to rebind. } /** Called when the service is no longer used and is being destroyed */ @Override public void onDestroy() { super.onDestroy(); try { if(mWorkThreadIsRunning){ synchronized(mThreadLock) { mMustQuit = true; mMustSuspend = false; mThreadLock.notifyAll(); } mWorkerThread.join(); } } catch(NullPointerException | InterruptedException e) { e.printStackTrace(); } } } libwebsockets-3.2.1/test-apps/android/app/src/main/jni/000077500000000000000000000000001357643561300230055ustar00rootroot00000000000000libwebsockets-3.2.1/test-apps/android/app/src/main/jni/Android.mk000066400000000000000000000017131357643561300247200ustar00rootroot00000000000000# get current directory LOCAL_PATH := $(call my-dir) # libz.a # include $(CLEAR_VARS) LOCAL_MODULE := libz LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/lib/libz.a include $(PREBUILT_STATIC_LIBRARY) # libssl.a # include $(CLEAR_VARS) LOCAL_MODULE := libssl LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/lib/libssl.a include $(PREBUILT_STATIC_LIBRARY) # libcrypto.a # include $(CLEAR_VARS) LOCAL_MODULE := libcrypto LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/lib/libcrypto.a include $(PREBUILT_STATIC_LIBRARY) # libwebsockets.a # include $(CLEAR_VARS) LOCAL_MODULE := libwebsockets LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/lib/libwebsockets.a include $(PREBUILT_STATIC_LIBRARY) # liblwsservice.so # include $(CLEAR_VARS) LOCAL_DISABLE_FATAL_LINKER_WARNINGS := true LOCAL_MODULE := lwsservice LOCAL_SRC_FILES := LwsService.cpp LOCAL_C_INCLUDES := $(LOCAL_PATH) $(TARGET_ARCH_ABI)/include LOCAL_STATIC_LIBRARIES := websockets z ssl crypto LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY) libwebsockets-3.2.1/test-apps/android/app/src/main/jni/Application.mk000066400000000000000000000027761357643561300256150ustar00rootroot00000000000000# # Zlib, OpenSSL and libwebsockets will be downloaded automatically unless you place # their source .tar.gz files in the jni directory... # # The location of the NDK # NDK_ROOT := /opt/Android/Sdk/ndk-bundle # Update these to the latest versions before building # ZLIB_VERSION := 1.2.8 OPENSSL_VERSION := 1.0.2h # This will be executed as 'git clone $(LIBWEBSOCKETS_GIT_URL)' # LIBWEBSOCKETS_GIT_URL := --branch master https://github.com/warmcat/libwebsockets.git # # Note: If you build for API level 21 or higher in APP_PLATFORM, # the resulting application will only run on API 21+ devices. # Even if minSdkVersion has been set to a lower level! # This is the result of API changes for the native signal() function. # The recommended solution is to build two packages, one for API 17+ and the other for API 21+ devices. # http://stackoverflow.com/questions/28740315/android-ndk-getting-java-lang-unsatisfiedlinkerror-dlopen-failed-cannot-loca # # Note: If you change the API level the JNI code must be rebuild completely. # (Run 'make clean' from the app/src/main/jni directory.) # APP_PLATFORM := android-23 # Builds for armeabi armeabi-v7a x86 mips arm64-v8a x86_64 mips64 # #APP_ABI := all # The same as above. # #APP_ABI := armeabi armeabi-v7a x86 mips arm64-v8a x86_64 mips64 # Good enough for most current devices + x86 AVD # APP_ABI := armeabi-v7a x86 # Enable (GNU) c++11 extentions APP_CPPFLAGS += -std=gnu++11 # Use the GNU standard template library APP_STL := gnustl_shared libwebsockets-3.2.1/test-apps/android/app/src/main/jni/LwsService.cpp000066400000000000000000000204571357643561300256070ustar00rootroot00000000000000/* * LwsService.cpp - libwebsockets test service for Android * * Copyright (C) 2016 Alexander Bruines * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #include #include #include #define printf(...) __android_log_print(ANDROID_LOG_VERBOSE, "LwsService", ##__VA_ARGS__) ///////////////////////////////////////////////////////// // Code executed when loading the dynamic link library // ///////////////////////////////////////////////////////// // The Java class the native functions shall be part of #define JNIREG_CLASS "org/libwebsockets/client/LwsService" JavaVM* gJvm = NULL; JNIEnv* gEnv = 0; JNIEXPORT jboolean JNICALL jni_initLws(JNIEnv *env, jobject obj); JNIEXPORT void JNICALL jni_exitLws(JNIEnv *env, jobject obj); JNIEXPORT void JNICALL jni_serviceLws(JNIEnv *env, jobject obj); JNIEXPORT void JNICALL jni_setConnectionParameters(JNIEnv *env, jobject obj, jstring serverAddress, jint serverPort); JNIEXPORT jboolean JNICALL jni_connectLws(JNIEnv *env, jobject obj); static JNINativeMethod gMethods[] = { { "initLws", "()Z", (void*)jni_initLws }, { "exitLws", "()V", (void*)jni_exitLws }, { "serviceLws", "()V", (void*)jni_serviceLws }, { "setConnectionParameters", "(Ljava/lang/String;I)V", (void*)jni_setConnectionParameters }, { "connectLws", "()Z", (void*)jni_connectLws }, }; static int registerNativeMethods(JNIEnv* env, const char* className, JNINativeMethod* gMethods, int numMethods) { jclass cls; cls = env->FindClass(className); if(cls == NULL) { return JNI_FALSE; } if (env->RegisterNatives(cls, gMethods, numMethods) < 0) { return JNI_FALSE; } return JNI_TRUE; } static int registerNatives(JNIEnv* env) { if(!registerNativeMethods(env, JNIREG_CLASS, gMethods, sizeof(gMethods) / sizeof(gMethods[0]))) { return JNI_FALSE; } return JNI_TRUE; } JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void * reserved) { jint result = -1; gJvm = vm; if(vm->GetEnv((void**)&gEnv, JNI_VERSION_1_6) != JNI_OK) goto bail; if(vm->AttachCurrentThread(&gEnv, NULL) < 0) goto bail; if(registerNatives(gEnv) != JNI_TRUE) goto bail; result = JNI_VERSION_1_6; bail: return result; } JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved) { gJvm = NULL; } //////////////////////////////////////////////////// // JNI functions to export: // //////////////////////////////////////////////////// static jclass gLwsServiceCls; static jobject gLwsServiceObj; static jmethodID sendMessageId; static const int MSG_DUMB_INCREMENT_PROTOCOL_COUNTER = 1; static const int MSG_LWS_CALLBACK_CLIENT_CONNECTION_ERROR = 2; static const int MSG_LWS_CALLBACK_CLIENT_ESTABLISHED = 3; #define BUFFER_SIZE 4096 static struct lws_context *context = NULL; static struct lws_context_creation_info info; static struct lws *wsi = NULL; // prevents sending messages after jni_exitLws had been called static int isExit = 0; enum websocket_protocols { PROTOCOL_DUMB_INCREMENT = 0, PROTOCOL_COUNT }; struct per_session_data { ;// no data }; static int callback( struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len ); static struct lws_protocols protocols[] = { { "dumb-increment-protocol", callback, sizeof( struct per_session_data ), BUFFER_SIZE, }, { NULL, NULL, 0, 0 } // end of list }; static const struct lws_extension exts[] = { { "deflate-frame", lws_extension_callback_pm_deflate, "deflate_frame" }, { NULL, NULL, NULL } }; static int port = 0; static int use_ssl = 0; static int use_ssl_client = 0; static char address[8192]; static char ca_cert[8192]; static char client_cert[8192]; static char client_cert_key[8192]; static int deny_deflate = 0; static int deny_mux = 0; // Logging function for libwebsockets static void emit_log(int level, const char *msg) { printf("%s", msg); } JNIEXPORT jboolean JNICALL jni_initLws(JNIEnv *env, jobject obj) { if(context) return JNI_TRUE; // Attach the java virtual machine to this thread gJvm->AttachCurrentThread(&gEnv, NULL); // Set java global references to the class and object jclass cls = env->GetObjectClass(obj); gLwsServiceCls = (jclass) env->NewGlobalRef(cls); gLwsServiceObj = env->NewGlobalRef(obj); // Get the sendMessage method from the LwsService class (inherited from class ThreadService) sendMessageId = gEnv->GetMethodID(gLwsServiceCls, "sendMessage", "(ILjava/lang/Object;)V"); memset(&info, 0, sizeof(info)); info.port = CONTEXT_PORT_NO_LISTEN; info.protocols = protocols; #if !defined(LWS_WITHOUT_EXTENSIONS) info.extensions = exts; #endif info.gid = -1; info.uid = -1; lws_set_log_level( LLL_NOTICE | LLL_INFO | LLL_ERR | LLL_WARN | LLL_CLIENT, emit_log ); context = lws_create_context(&info); if( context == NULL ){ emit_log(LLL_ERR, "Creating libwebsocket context failed"); return JNI_FALSE; } isExit = 0; return JNI_TRUE; } // Send a message to the client of the service // (must call jni_initLws() first) static inline void sendMessage(int id, jobject obj) { if(!isExit) gEnv->CallVoidMethod(gLwsServiceObj, sendMessageId, id, obj); } JNIEXPORT void JNICALL jni_exitLws(JNIEnv *env, jobject obj) { if(context){ isExit = 1; lws_context_destroy(context); context = NULL; env->DeleteGlobalRef(gLwsServiceObj); env->DeleteGlobalRef(gLwsServiceCls); } } static int callback( struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len ) { switch(reason){ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: sendMessage(MSG_LWS_CALLBACK_CLIENT_CONNECTION_ERROR, NULL); break; case LWS_CALLBACK_CLIENT_ESTABLISHED: sendMessage(MSG_LWS_CALLBACK_CLIENT_ESTABLISHED, NULL); break; case LWS_CALLBACK_CLIENT_RECEIVE: ((char *)in)[len] = '\0'; sendMessage(MSG_DUMB_INCREMENT_PROTOCOL_COUNTER, gEnv->NewStringUTF((const char*)in)); break; case LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED: if ((strcmp((const char*)in, "deflate-stream") == 0) && deny_deflate) { emit_log(LLL_ERR, "websocket: denied deflate-stream extension"); return 1; } if ((strcmp((const char*)in, "deflate-frame") == 0) && deny_deflate) { emit_log(LLL_ERR, "websocket: denied deflate-frame extension"); return 1; } if ((strcmp((const char*)in, "x-google-mux") == 0) && deny_mux) { emit_log(LLL_ERR, "websocket: denied x-google-mux extension"); return 1; } break; default: break; } return 0; } JNIEXPORT void JNICALL jni_serviceLws(JNIEnv *env, jobject obj) { if(context){ lws_service( context, 0 ); } } JNIEXPORT void JNICALL jni_setConnectionParameters( JNIEnv *env, jobject obj, jstring serverAddress, jint serverPort ) { address[0] = 0; port = serverPort; use_ssl = 0; use_ssl_client = 0; snprintf(address, sizeof(address), "%s", env->GetStringUTFChars(serverAddress, 0)); } JNIEXPORT jboolean JNICALL jni_connectLws(JNIEnv *env, jobject obj) { struct lws_client_connect_info info_ws; memset(&info_ws, 0, sizeof(info_ws)); info_ws.port = port; info_ws.address = address; info_ws.path = "/"; info_ws.context = context; info_ws.ssl_connection = use_ssl; info_ws.host = address; info_ws.origin = address; info_ws.ietf_version_or_minus_one = -1; info_ws.client_exts = exts; info_ws.protocol = protocols[PROTOCOL_DUMB_INCREMENT].name; // connect wsi = lws_client_connect_via_info(&info_ws); if(wsi == NULL ){ // Error emit_log(LLL_ERR, "Protocol failed to connect."); return JNI_FALSE; } return JNI_TRUE; } libwebsockets-3.2.1/test-apps/android/app/src/main/jni/NativeLibs.mk000066400000000000000000001530031357643561300254000ustar00rootroot00000000000000# # GNU Make makefile for building static libraries for use with the Android NDK # Copyright (C) 2016, Alexander Bruines # # This file is made available under the Creative Commons CC0 1.0 # Universal Public Domain Dedication. # # The person who associated a work with this deed has dedicated # the work to the public domain by waiving all of his or her rights # to the work worldwide under copyright law, including all related # and neighboring rights, to the extent allowed by law. You can copy, # modify, distribute and perform the work, even for commercial purposes, # all without asking permission. # # The test apps are intended to be adapted for use in your code, which # may be proprietary. So unlike the library itself, they are licensed # Public Domain. # # # This makefile is fully intergrated with this Android Studio project and # it will be called automaticaly when you build the project with Gradle. # # The source packages for the libraries will be automaticaly downloaded. # Alternativly you can provide your own sources by placing the following # files in the 'jni' directory: # # zlib-1.2.8.tar.gz # openssl-1.0.2g.tar.gz # libwebsockets.tar.gz # # This makefile was tested with the latest NDK/SDK and Android Studio at the # time of this writing. As these software packages evolve changes to this # makefile may be needed or it may become obselete... # # This makefile was made for use in Linux but you may be able to edit it # and make it work under Windows. # # At least on Debian, building openssl requires package xutils-dev # for makedepend. Ofcourse the standard development packages must also be # installed, but xutils-dev is not that obvious in this case... # # Makedepend will most likely print a lot of warnings during the 'make depend' # stage of building openssl. In this case these warnings can be safely ignored. # # Include Application.mk but do not complain if it is not found # ifeq ($(MAKE_NO_INCLUDES),) -include Application.mk endif # Location of the NDK. # ifeq ($(NDK_ROOT),) NDK_ROOT := /opt/Android/SDK/ndk-bundle endif # Select the ABIs to compile for # NDK_APP_ABI = $(APP_ABI) ifeq ($(NDK_APP_ABI),) # Set to 'all' if APP_ABI is undefined NDK_APP_ABI = all endif ifeq ($(NDK_APP_ABI),all) # Translate 'all' to the individual targets NDK_APP_ABI = armeabi armeabi-v7a arm64-v8a mips mips64 x86 x86_64 else # Use the targets from APP_ABI NDK_APP_ABI = $(APP_ABI) endif # Select the Android platform to compile for # ifeq ($(APP_PLATFORM),) # use a level that supports all specified ABIs if none was specified APP_PLATFORM = android-21 endif NDK_MAKE_TOOLCHAIN := $(NDK_ROOT)/build/tools/make_standalone_toolchain.py # # The source packages we want/need # Zlib and openssl should be defined in Application.mk, libwebsockets is # cloned from github # ifeq ($(ZLIB_VERSION),) ZLIB_VERSION := 1.2.8 endif ifeq ($(OPENSSL_VERSION),) OPENSSL_VERSION := 1.0.2g endif ifeq ($(ZLIB_TGZ_SOURCE),) ZLIB_TGZ_SOURCE := zlib-$(ZLIB_VERSION).tar.gz endif ifeq ($(OPENSSL_TGZ_SOURCE),) OPENSSL_TGZ_SOURCE := openssl-$(OPENSSL_VERSION).tar.gz endif LIBWEBSOCKETS_TGZ_SOURCE := libwebsockets.tar.gz # The names of the directories in the source tgz files ZLIB_DIR := $(basename $(basename $(ZLIB_TGZ_SOURCE))) OPENSSL_DIR := $(basename $(basename $(OPENSSL_TGZ_SOURCE))) LIBWEBSOCKETS_DIR := $(basename $(basename $(LIBWEBSOCKETS_TGZ_SOURCE))) # The URLs used to fetch the source tgz files ZLIB_TGZ_URL := http://prdownloads.sourceforge.net/libpng/$(ZLIB_TGZ_SOURCE) OPENSSL_TGZ_URL := https://openssl.org/source/$(OPENSSL_TGZ_SOURCE) ifeq ($(LIBWEBSOCKETS_GIT_URL),) LIBWEBSOCKETS_GIT_URL := https://github.com/warmcat/libwebsockets.git endif # These values are the same as the values for $TARGET_ARCH_ABI in Android.mk # This way 'make $TARGET_ARCH_ABI' builds libraries for that ABI. # This is also the name for the directory where the libraries are installed to. # TARGET_X86 := x86 TARGET_X86_64 := x86_64 TARGET_ARM := armeabi TARGET_ARM_V7A := armeabi-v7a TARGET_ARM_V7A_HARD := armeabi-v7a-hard TARGET_ARM64_V8A := arm64-v8a TARGET_MIPS := mips TARGET_MIPS64 := mips64 # The Android NDK API version to build the libraries with. # # android-9 ... android-19 support arm mips and x86 # android-21 and higher also support arm64 mips64 and x86_64 # # These should be set to the same value as APP_PLATFORM (Application.mk) # # http://developer.android.com/ndk/guides/stable_apis.html # # If you change these or APP_PLATFORM you must do a 'make clean' # # Note: # libraries compiled for android-21 and upwards are incompatible with devices below that version! # http://stackoverflow.com/questions/28740315/android-ndk-getting-java-lang-unsatisfiedlinkerror-dlopen-failed-cannot-loca # TARGET_X86_NDK_API := $(subst android-,,$(APP_PLATFORM)) TARGET_X86_64_NDK_API := $(subst android-,,$(APP_PLATFORM)) TARGET_ARM_NDK_API := $(subst android-,,$(APP_PLATFORM)) TARGET_ARM_V7A_NDK_API := $(subst android-,,$(APP_PLATFORM)) TARGET_ARM_V7A_HARD_NDK_API := $(subst android-,,$(APP_PLATFORM)) TARGET_ARM64_V8A_NDK_API := $(subst android-,,$(APP_PLATFORM)) TARGET_MIPS_NDK_API := $(subst android-,,$(APP_PLATFORM)) TARGET_MIPS64_NDK_API := $(subst android-,,$(APP_PLATFORM)) # The configure arguments to pass to the OpenSSL Configure script # (--prefix and --openssldir are added automaticaly). # (note: use no-asm on x86 and x86_64 to generate fully position independent code) # # x86 TARGET_X86_OPENSSL_CONFIG_TARGET := android-x86 TARGET_X86_OPENSSL_CONFIG := no-asm no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp # x86_64 TARGET_X86_64_OPENSSL_CONFIG_TARGET := linux-x86_64 TARGET_X86_64_OPENSSL_CONFIG := no-asm no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp enable-ec_nistp_64_gcc_128 # armeabi TARGET_ARM_OPENSSL_CONFIG_TARGET := android TARGET_ARM_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp # armeabi-v7a TARGET_ARM_V7A_OPENSSL_CONFIG_TARGET := android-armv7 TARGET_ARM_V7A_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp # armeabi-v7a-hard TARGET_ARM_V7A_HARD_OPENSSL_CONFIG_TARGET := android-armv7 TARGET_ARM_V7A_HARD_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp # arm64-v8a TARGET_ARM64_V8A_OPENSSL_CONFIG_TARGET := android TARGET_ARM64_V8A_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp # mips TARGET_MIPS_OPENSSL_CONFIG_TARGET := android-mips TARGET_MIPS_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp # mips64 TARGET_MIPS64_OPENSSL_CONFIG_TARGET := android TARGET_MIPS64_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp # The cmake configuration options for libwebsockets per target ABI, # --prefix and openssl library/header paths are set automaticaly and # the location of zlib should be picked up by CMake # x86 TARGET_X86_LWS_OPTIONS = \ -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_X86)/bin/$(TOOLCHAIN_X86_PREFIX)-gcc \ -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_X86)/bin/$(TOOLCHAIN_X86_PREFIX)-ar \ -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_X86)/bin/$(TOOLCHAIN_X86_PREFIX)-ranlib \ -DCMAKE_C_FLAGS="$$CFLAGS" \ -DLWS_WITH_SHARED=OFF \ -DLWS_WITH_STATIC=ON \ -DLWS_WITHOUT_DAEMONIZE=ON \ -DLWS_WITHOUT_TESTAPPS=ON \ -DLWS_IPV6=OFF \ -DLWS_WITH_BUNDLED_ZLIB=OFF \ -DLWS_WITH_SSL=ON \ -DLWS_WITH_HTTP2=ON \ -DCMAKE_BUILD_TYPE=Release # x86_64 TARGET_X86_64_LWS_OPTIONS = \ -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_X86_64)/bin/$(TOOLCHAIN_X86_64_PREFIX)-gcc \ -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_X86_64)/bin/$(TOOLCHAIN_X86_64_PREFIX)-ar \ -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_X86_64)/bin/$(TOOLCHAIN_X86_64_PREFIX)-ranlib \ -DCMAKE_C_FLAGS="$$CFLAGS" \ -DLWS_WITH_SHARED=OFF \ -DLWS_WITH_STATIC=ON \ -DLWS_WITHOUT_DAEMONIZE=ON \ -DLWS_WITHOUT_TESTAPPS=ON \ -DLWS_IPV6=OFF \ -DLWS_WITH_BUNDLED_ZLIB=OFF \ -DLWS_WITH_SSL=ON \ -DLWS_WITH_HTTP2=ON \ -DCMAKE_BUILD_TYPE=Release # armeabi TARGET_ARM_LWS_OPTIONS = \ -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_ARM)/bin/$(TOOLCHAIN_ARM_PREFIX)-gcc \ -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_ARM)/bin/$(TOOLCHAIN_ARM_PREFIX)-ar \ -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_ARM)/bin/$(TOOLCHAIN_ARM_PREFIX)-ranlib \ -DCMAKE_C_FLAGS="$$CFLAGS" \ -DLWS_WITH_SHARED=OFF \ -DLWS_WITH_STATIC=ON \ -DLWS_WITHOUT_DAEMONIZE=ON \ -DLWS_WITHOUT_TESTAPPS=ON \ -DLWS_IPV6=OFF \ -DLWS_WITH_BUNDLED_ZLIB=OFF \ -DLWS_WITH_SSL=ON \ -DLWS_WITH_HTTP2=ON \ -DCMAKE_BUILD_TYPE=Release # armeabi-v7a TARGET_ARM_V7A_LWS_OPTIONS = \ -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin/$(TOOLCHAIN_ARM_V7A_PREFIX)-gcc \ -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin/$(TOOLCHAIN_ARM_V7A_PREFIX)-ar \ -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin/$(TOOLCHAIN_ARM_V7A_PREFIX)-ranlib \ -DCMAKE_C_FLAGS="$$CFLAGS" \ -DLWS_WITH_SHARED=OFF \ -DLWS_WITH_STATIC=ON \ -DLWS_WITHOUT_DAEMONIZE=ON \ -DLWS_WITHOUT_TESTAPPS=ON \ -DLWS_IPV6=OFF \ -DLWS_WITH_BUNDLED_ZLIB=OFF \ -DLWS_WITH_SSL=ON \ -DLWS_WITH_HTTP2=ON \ -DCMAKE_BUILD_TYPE=Release # armeabi-v7a-hard TARGET_ARM_V7A_HARD_LWS_OPTIONS = \ -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin/$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-gcc \ -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin/$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ar \ -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin/$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ranlib \ -DCMAKE_C_FLAGS="$$CFLAGS" \ -DLWS_WITH_SHARED=OFF \ -DLWS_WITH_STATIC=ON \ -DLWS_WITHOUT_DAEMONIZE=ON \ -DLWS_WITHOUT_TESTAPPS=ON \ -DLWS_IPV6=OFF \ -DLWS_WITH_BUNDLED_ZLIB=OFF \ -DLWS_WITH_SSL=ON \ -DLWS_WITH_HTTP2=ON \ -DCMAKE_BUILD_TYPE=Release # arm64-v8a TARGET_ARM64_V8A_LWS_OPTIONS = \ -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin/$(TOOLCHAIN_ARM64_V8A_PREFIX)-gcc \ -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin/$(TOOLCHAIN_ARM64_V8A_PREFIX)-ar \ -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin/$(TOOLCHAIN_ARM64_V8A_PREFIX)-ranlib \ -DCMAKE_C_FLAGS="$$CFLAGS" \ -DLWS_WITH_SHARED=OFF \ -DLWS_WITH_STATIC=ON \ -DLWS_WITHOUT_DAEMONIZE=ON \ -DLWS_WITHOUT_TESTAPPS=ON \ -DLWS_IPV6=OFF \ -DLWS_WITH_BUNDLED_ZLIB=OFF \ -DLWS_WITH_SSL=ON \ -DLWS_WITH_HTTP2=ON \ -DCMAKE_BUILD_TYPE=Release # mips TARGET_MIPS_LWS_OPTIONS = \ -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_MIPS)/bin/$(TOOLCHAIN_MIPS_PREFIX)-gcc \ -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_MIPS)/bin/$(TOOLCHAIN_MIPS_PREFIX)-ar \ -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_MIPS)/bin/$(TOOLCHAIN_MIPS_PREFIX)-ranlib \ -DCMAKE_C_FLAGS="$$CFLAGS" \ -DLWS_WITH_SHARED=OFF \ -DLWS_WITH_STATIC=ON \ -DLWS_WITHOUT_DAEMONIZE=ON \ -DLWS_WITHOUT_TESTAPPS=ON \ -DLWS_IPV6=OFF \ -DLWS_WITH_BUNDLED_ZLIB=OFF \ -DLWS_WITH_SSL=ON \ -DLWS_WITH_HTTP2=ON \ -DCMAKE_BUILD_TYPE=Release # mips64 TARGET_MIPS64_LWS_OPTIONS = \ -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin/$(TOOLCHAIN_MIPS64_PREFIX)-gcc \ -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin/$(TOOLCHAIN_MIPS64_PREFIX)-ar \ -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin/$(TOOLCHAIN_MIPS64_PREFIX)-ranlib \ -DCMAKE_C_FLAGS="$$CFLAGS" \ -DLWS_WITH_SHARED=OFF \ -DLWS_WITH_STATIC=ON \ -DLWS_WITHOUT_DAEMONIZE=ON \ -DLWS_WITHOUT_TESTAPPS=ON \ -DLWS_IPV6=OFF \ -DLWS_WITH_BUNDLED_ZLIB=OFF \ -DLWS_WITH_SSL=ON \ -DLWS_WITH_HTTP2=ON \ -DCMAKE_BUILD_TYPE=Release # # Toolchain configuration # # The directory names for the different toolchains TOOLCHAIN_X86 := toolchains/x86 TOOLCHAIN_X86_64 := toolchains/x86_64 TOOLCHAIN_ARM := toolchains/arm TOOLCHAIN_ARM_V7A := toolchains/arm-v7a TOOLCHAIN_ARM_V7A_HARD := toolchains/arm-v7a-hard TOOLCHAIN_ARM64_V8A := toolchains/arm64-v8a TOOLCHAIN_MIPS := toolchains/mips TOOLCHAIN_MIPS64 := toolchains/mips64 # Use APP_STL to determine what STL to use. # ifeq ($(APP_STL),stlport_static) TOOLCHAIN_STL := stlport else ifeq ($(APP_STL),stlport_shared) TOOLCHAIN_STL := stlport else ifeq ($(APP_STL),gnustl_static) TOOLCHAIN_STL := gnustl else ifeq ($(APP_STL),gnustl_shared) TOOLCHAIN_STL := gnustl else ifeq ($(APP_STL),c++_static) TOOLCHAIN_STL := libc++ else ifeq ($(APP_STL),c++_shared) TOOLCHAIN_STL := libc++ endif # The settings to use for the individual toolchains: # x86 TOOLCHAIN_X86_API := $(TARGET_X86_NDK_API) TOOLCHAIN_X86_PREFIX := i686-linux-android TOOLCHAIN_X86_FLAGS := -march=i686 -msse3 -mstackrealign -mfpmath=sse TOOLCHAIN_X86_LINK := TOOLCHAIN_X86_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_X86)/sysroot/usr/include TOOLCHAIN_X86_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_X86)/sysroot/usr/lib # x86_64 TOOLCHAIN_X86_64_API := $(TARGET_X86_64_NDK_API) TOOLCHAIN_X86_64_PREFIX := x86_64-linux-android TOOLCHAIN_X86_64_FLAGS := TOOLCHAIN_X86_64_LINK := TOOLCHAIN_X86_64_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_X86_64)/sysroot/usr/include TOOLCHAIN_X86_64_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_X86_64)/sysroot/usr/lib # arm TOOLCHAIN_ARM_API := $(TARGET_ARM_NDK_API) TOOLCHAIN_ARM_PREFIX := arm-linux-androideabi TOOLCHAIN_ARM_FLAGS := -mthumb TOOLCHAIN_ARM_LINK := TOOLCHAIN_ARM_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM)/sysroot/usr/include TOOLCHAIN_ARM_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM)/sysroot/usr/lib # arm-v7a TOOLCHAIN_ARM_V7A_API := $(TARGET_ARM_V7A_NDK_API) TOOLCHAIN_ARM_V7A_PREFIX := arm-linux-androideabi TOOLCHAIN_ARM_V7A_FLAGS := -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 TOOLCHAIN_ARM_V7A_LINK := -march=armv7-a -Wl,--fix-cortex-a8 TOOLCHAIN_ARM_V7A_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A)/sysroot/usr/include TOOLCHAIN_ARM_V7A_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A)/sysroot/usr/lib # arm-v7a-hard TOOLCHAIN_ARM_V7A_HARD_API := $(TARGET_ARM_V7A_HARD_NDK_API) TOOLCHAIN_ARM_V7A_HARD_PREFIX := arm-linux-androideabi TOOLCHAIN_ARM_V7A_HARD_FLAGS := -march=armv7-a -mfpu=vfpv3-d16 -mhard-float -mfloat-abi=hard -D_NDK_MATH_NO_SOFTFP=1 TOOLCHAIN_ARM_V7A_HARD_LINK := -march=armv7-a -Wl,--fix-cortex-a8 -Wl,--no-warn-mismatch -lm_hard TOOLCHAIN_ARM_V7A_HARD_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/sysroot/usr/include TOOLCHAIN_ARM_V7A_HARD_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/sysroot/usr/lib # arm64-v8a TOOLCHAIN_ARM64_V8A_API := $(TARGET_ARM64_V8A_NDK_API) TOOLCHAIN_ARM64_V8A_PREFIX := aarch64-linux-android TOOLCHAIN_ARM64_V8A_FLAGS := TOOLCHAIN_ARM64_V8A_LINK := TOOLCHAIN_ARM64_V8A_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/sysroot/usr/include TOOLCHAIN_ARM64_V8A_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/sysroot/usr/lib # mips TOOLCHAIN_MIPS_API := $(TARGET_MIPS_NDK_API) TOOLCHAIN_MIPS_PREFIX := mipsel-linux-android TOOLCHAIN_MIPS_FLAGS := TOOLCHAIN_MIPS_LINK := TOOLCHAIN_MIPS_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_MIPS)/sysroot/usr/include TOOLCHAIN_MIPS_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_MIPS)/sysroot/usr/lib # mips64 TOOLCHAIN_MIPS64_API := $(TARGET_MIPS64_NDK_API) TOOLCHAIN_MIPS64_PREFIX := mips64el-linux-android TOOLCHAIN_MIPS64_FLAGS := TOOLCHAIN_MIPS64_LINK := TOOLCHAIN_MIPS64_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_MIPS64)/sysroot/usr/include TOOLCHAIN_MIPS64_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_MIPS64)/sysroot/usr/lib # Environment variables to set while compiling for each ABI # x86 TOOLCHAIN_X86_ENV = \ ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_X86)/bin" \ CC=$(TOOLCHAIN_X86_PREFIX)-gcc \ CXX=$(TOOLCHAIN_X86_PREFIX)-g++ \ LINK=$(TOOLCHAIN_X86_PREFIX)-g++ \ LD=$(TOOLCHAIN_X86_PREFIX)-ld \ AR=$(TOOLCHAIN_X86_PREFIX)-ar \ RANLIB=$(TOOLCHAIN_X86_PREFIX)-ranlib \ STRIP=$(TOOLCHAIN_X86_PREFIX)-strip \ ARCH_FLAGS="$(TOOLCHAIN_X86_FLAGS)" \ ARCH_LINK="$(TOOLCHAIN_X86_LINK)" \ CPPFLAGS="-I. $(TOOLCHAIN_X86_FLAGS) -I$(TOOLCHAIN_X86_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ CXXFLAGS="-I. $(TOOLCHAIN_X86_FLAGS) -I$(TOOLCHAIN_X86_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \ CFLAGS="-I. $(TOOLCHAIN_X86_FLAGS) -I$(TOOLCHAIN_X86_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ LDFLAGS="$(TOOLCHAIN_X86_LINK)" \ PATH="$(shell pwd)/$(TOOLCHAIN_X86)/bin:$$PATH" # x86_64 TOOLCHAIN_X86_64_ENV = \ ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_X86_64)/bin" \ CC=$(TOOLCHAIN_X86_64_PREFIX)-gcc \ CXX=$(TOOLCHAIN_X86_64_PREFIX)-g++ \ LINK=$(TOOLCHAIN_X86_64_PREFIX)-g++ \ LD=$(TOOLCHAIN_X86_64_PREFIX)-ld \ AR=$(TOOLCHAIN_X86_64_PREFIX)-ar \ RANLIB=$(TOOLCHAIN_X86_64_PREFIX)-ranlib \ STRIP=$(TOOLCHAIN_X86_64_PREFIX)-strip \ ARCH_FLAGS="$(TOOLCHAIN_X86_64_FLAGS)" \ ARCH_LINK="$(TOOLCHAIN_X86_64_LINK)" \ CPPFLAGS="-I. $(TOOLCHAIN_X86_64_FLAGS) -I$(TOOLCHAIN_X86_64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ CXXFLAGS="-I. $(TOOLCHAIN_X86_64_FLAGS) -I$(TOOLCHAIN_X86_64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \ CFLAGS="-I. $(TOOLCHAIN_X86_64_FLAGS) -I$(TOOLCHAIN_X86_64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ LDFLAGS="$(TOOLCHAIN_X86_64_LINK)" \ PATH="$(shell pwd)/$(TOOLCHAIN_X86_64)/bin:$$PATH" # arm TOOLCHAIN_ARM_ENV = \ ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_ARM)/bin" \ CC=$(TOOLCHAIN_ARM_PREFIX)-gcc \ CXX=$(TOOLCHAIN_ARM_PREFIX)-g++ \ LINK=$(TOOLCHAIN_ARM_PREFIX)-g++ \ LD=$(TOOLCHAIN_ARM_PREFIX)-ld \ AR=$(TOOLCHAIN_ARM_PREFIX)-ar \ RANLIB=$(TOOLCHAIN_ARM_PREFIX)-ranlib \ STRIP=$(TOOLCHAIN_ARM_PREFIX)-strip \ ARCH_FLAGS="$(TOOLCHAIN_ARM_FLAGS)" \ ARCH_LINK="$(TOOLCHAIN_ARM_LINK)" \ CPPFLAGS="-I. $(TOOLCHAIN_ARM_FLAGS) -I$(TOOLCHAIN_ARM_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ CXXFLAGS="-I. $(TOOLCHAIN_ARM_FLAGS) -I$(TOOLCHAIN_ARM_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \ CFLAGS="-I. $(TOOLCHAIN_ARM_FLAGS) -I$(TOOLCHAIN_ARM_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ LDFLAGS="$(TOOLCHAIN_ARM_LINK)" \ PATH="$(shell pwd)/$(TOOLCHAIN_ARM)/bin:$$PATH" # arm-v7a TOOLCHAIN_ARM_V7A_ENV = \ ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin" \ CC=$(TOOLCHAIN_ARM_V7A_PREFIX)-gcc \ CXX=$(TOOLCHAIN_ARM_V7A_PREFIX)-g++ \ LINK=$(TOOLCHAIN_ARM_V7A_PREFIX)-g++ \ LD=$(TOOLCHAIN_ARM_V7A_PREFIX)-ld \ AR=$(TOOLCHAIN_ARM_V7A_PREFIX)-ar \ RANLIB=$(TOOLCHAIN_ARM_V7A_PREFIX)-ranlib \ STRIP=$(TOOLCHAIN_ARM_V7A_PREFIX)-strip \ ARCH_FLAGS="$(TOOLCHAIN_ARM_V7A_FLAGS)" \ ARCH_LINK="$(TOOLCHAIN_ARM_V7A_LINK)" \ CPPFLAGS="-I. $(TOOLCHAIN_ARM_V7A_FLAGS) -I$(TOOLCHAIN_ARM_V7A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ CXXFLAGS="-I. $(TOOLCHAIN_ARM_V7A_FLAGS) -I$(TOOLCHAIN_ARM_V7A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \ CFLAGS="-I. $(TOOLCHAIN_ARM_V7A_FLAGS) -I$(TOOLCHAIN_ARM_V7A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ LDFLAGS="$(TOOLCHAIN_ARM_V7A_LINK)" \ PATH="$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin:$$PATH" # arm-v7a-hard TOOLCHAIN_ARM_V7A_HARD_ENV = \ ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin" \ CC=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-gcc \ CXX=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-g++ \ LINK=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-g++ \ LD=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ld \ AR=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ar \ RANLIB=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ranlib \ STRIP=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-strip \ ARCH_FLAGS="$(TOOLCHAIN_ARM_V7A_HARD_FLAGS)" \ ARCH_LINK="$(TOOLCHAIN_ARM_V7A_HARD_LINK)" \ CPPFLAGS="-I. $(TOOLCHAIN_ARM_V7A_HARD_FLAGS) -I$(TOOLCHAIN_ARM_V7A_HARD_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ CXXFLAGS="-I. $(TOOLCHAIN_ARM_V7A_HARD_FLAGS) -I$(TOOLCHAIN_ARM_V7A_HARD_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \ CFLAGS="-I. $(TOOLCHAIN_ARM_V7A_HARD_FLAGS) -I$(TOOLCHAIN_ARM_V7A_HARD_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ LDFLAGS="$(TOOLCHAIN_ARM_V7A_HARD_LINK)" \ PATH="$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin:$$PATH" # arm64-v8a TOOLCHAIN_ARM64_V8A_ENV = \ ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin" \ CC=$(TOOLCHAIN_ARM64_V8A_PREFIX)-gcc \ CXX=$(TOOLCHAIN_ARM64_V8A_PREFIX)-g++ \ LINK=$(TOOLCHAIN_ARM64_V8A_PREFIX)-g++ \ LD=$(TOOLCHAIN_ARM64_V8A_PREFIX)-ld \ AR=$(TOOLCHAIN_ARM64_V8A_PREFIX)-ar \ RANLIB=$(TOOLCHAIN_ARM64_V8A_PREFIX)-ranlib \ STRIP=$(TOOLCHAIN_ARM64_V8A_PREFIX)-strip \ ARCH_FLAGS="$(TOOLCHAIN_ARM64_V8A_FLAGS)" \ ARCH_LINK="$(TOOLCHAIN_ARM64_V8A_LINK)" \ CPPFLAGS="-I. $(TOOLCHAIN_ARM64_V8A_FLAGS) -I$(TOOLCHAIN_ARM64_V8A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ CXXFLAGS="-I. $(TOOLCHAIN_ARM64_V8A_FLAGS) -I$(TOOLCHAIN_ARM64_V8A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \ CFLAGS="-I. $(TOOLCHAIN_ARM64_V8A_FLAGS) -I$(TOOLCHAIN_ARM64_V8A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ LDFLAGS="$(TOOLCHAIN_ARM64_V8A_LINK)" \ PATH="$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin:$$PATH" # mips TOOLCHAIN_MIPS_ENV = \ ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_MIPS)/bin" \ CC=$(TOOLCHAIN_MIPS_PREFIX)-gcc \ CXX=$(TOOLCHAIN_MIPS_PREFIX)-g++ \ LINK=$(TOOLCHAIN_MIPS_PREFIX)-g++ \ LD=$(TOOLCHAIN_MIPS_PREFIX)-ld \ AR=$(TOOLCHAIN_MIPS_PREFIX)-ar \ RANLIB=$(TOOLCHAIN_MIPS_PREFIX)-ranlib \ STRIP=$(TOOLCHAIN_MIPS_PREFIX)-strip \ ARCH_FLAGS="$(TOOLCHAIN_MIPS_FLAGS)" \ ARCH_LINK="$(TOOLCHAIN_MIPS_LINK)" \ CPPFLAGS="-I. $(TOOLCHAIN_MIPS_FLAGS) -I$(TOOLCHAIN_MIPS_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ CXXFLAGS="-I. $(TOOLCHAIN_MIPS_FLAGS) -I$(TOOLCHAIN_MIPS_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \ CFLAGS="-I. $(TOOLCHAIN_MIPS_FLAGS) -I$(TOOLCHAIN_MIPS_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ LDFLAGS="$(TOOLCHAIN_MIPS_LINK)" \ PATH="$(shell pwd)/$(TOOLCHAIN_MIPS)/bin:$$PATH" # mips64 TOOLCHAIN_MIPS64_ENV = \ ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin" \ CC=$(TOOLCHAIN_MIPS64_PREFIX)-gcc \ CXX=$(TOOLCHAIN_MIPS64_PREFIX)-g++ \ LINK=$(TOOLCHAIN_MIPS64_PREFIX)-g++ \ LD=$(TOOLCHAIN_MIPS64_PREFIX)-ld \ AR=$(TOOLCHAIN_MIPS64_PREFIX)-ar \ RANLIB=$(TOOLCHAIN_MIPS64_PREFIX)-ranlib \ STRIP=$(TOOLCHAIN_MIPS64_PREFIX)-strip \ ARCH_FLAGS="$(TOOLCHAIN_MIPS64_FLAGS)" \ ARCH_LINK="$(TOOLCHAIN_MIPS64_LINK)" \ CPPFLAGS="-I. $(TOOLCHAIN_MIPS64_FLAGS) -I$(TOOLCHAIN_MIPS64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ CXXFLAGS="-I. $(TOOLCHAIN_MIPS64_FLAGS) -I$(TOOLCHAIN_MIPS64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \ CFLAGS="-I. $(TOOLCHAIN_MIPS64_FLAGS) -I$(TOOLCHAIN_MIPS64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ LDFLAGS="$(TOOLCHAIN_MIPS64_LINK)" \ PATH="$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin:$$PATH" # # All the external tools we use in this Makefile # AWK := awk CD := cd CMAKE := cmake ECHO := echo EGREP := egrep GIT := git LN := ln MKDIR := mkdir RM := rm SORT := sort TAR := tar WGET := wget # # End of user configurable options. # .PHONY: \ all \ all-x86 \ all-x86_64 \ all-armeabi \ all-armeabi-v7a \ all-armeabi-v7a-hard \ all-arm64-v8a \ all-mips \ all-mips64 \ common \ sources \ toolchains \ toolchain-x86 \ toolchain-x86_64 \ toolchain-armeabi \ toolchain-armeabi-v7a \ toolchain-armeabi-v7a-hard \ toolchain-arm64-v8a \ toolchain-mips \ toolchain-mips64 \ zlib \ zlib-x86 \ zlib-x86_64 \ zlib-armeabi \ zlib-armeabi-v7a \ zlib-armeabi-v7a-hard \ zlib-arm64-v8a \ zlib-mips \ zlib-mips64 \ openssl \ openssl-x86 \ openssl-x86_64 \ openssl-armeabi \ openssl-armeabi-v7a \ openssl-armeabi-v7a-hard \ openssl-arm64-v8a \ openssl-mips \ openssl-mips64 \ libwebsockets \ libwebsockets-x86 \ libwebsockets-x86_64 \ libwebsockets-armeabi \ libwebsockets-armeabi-v7a \ libwebsockets-armeabi-v7a-hard \ libwebsockets-arm64-v8a \ libwebsockets-mips \ libwebsockets-mips64 \ clean-ndk \ clean \ dist-clean \ clean-targets \ clean-target-x86 \ clean-target-x86_64 \ clean-target-armeabi \ clean-target-armeabi-v7a \ clean-target-armeabi-v7a-hard \ clean-target-arm64-v8a \ clean-target-mips \ clean-target-mips64 \ clean-sources \ clean-source-zlib \ clean-source-openssl \ clean-source-libwebsockets \ clean-toolchains \ clean-toolchain-x86 \ clean-toolchain-x86_64 \ clean-toolchain-armeabi \ clean-toolchain-armeabi-v7a \ clean-toolchain-armeabi-v7a-hard \ clean-toolchain-arm64-v8a \ clean-toolchain-mips \ clean-toolchain-mips64 \ list-targets # Default rule: build the libraries for all ABIs defined in NDK_APP_ABI then run ndk-build all: $(NDK_APP_ABI) $(NDK_ROOT)/ndk-build clean $(NDK_ROOT)/ndk-build # Libraries may also be build per ABI all-x86: $(TARGET_X86) all-x86_64: $(TARGET_X86_64) all-armeabi: $(TARGET_ARM) all-armeabi-v7a: $(TARGET_ARM_V7A) all-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD) all-arm64-v8a: $(TARGET_ARM64_V8A) all-mips: $(TARGET_MIPS) all-mips64: $(TARGET_MIPS64) # Common rule all targets depend on common: ../jniLibs # These rules are called from Android.mk when executing ndk-build $(TARGET_X86): common zlib-x86 openssl-x86 libwebsockets-x86 $(TARGET_X86_64): common zlib-x86_64 openssl-x86_64 libwebsockets-x86_64 $(TARGET_ARM): common zlib-armeabi openssl-armeabi libwebsockets-armeabi $(TARGET_ARM_V7A): common zlib-armeabi-v7a openssl-armeabi-v7a libwebsockets-armeabi-v7a $(TARGET_ARM_V7A_HARD): common zlib-armeabi-v7a-hard openssl-armeabi-v7a-hard libwebsockets-armeabi-v7a-hard $(TARGET_ARM64_V8A): common zlib-arm64-v8a openssl-arm64-v8a libwebsockets-arm64-v8a $(TARGET_MIPS): common zlib-mips openssl-mips libwebsockets-mips $(TARGET_MIPS64): common zlib-mips64 openssl-mips64 libwebsockets-mips64 # # A rule to ensure ../jniLibs points to ../libs # (ndk-build creates ../libs but Gradle looks for ../jniLibs) # ../libs: $(MKDIR) ../libs ../jniLibs: ../libs $(CD) .. && $(LN) -s libs jniLibs # # Some rules to download the sources # sources: $(ZLIB_TGZ_SOURCE) $(OPENSSL_TGZ_SOURCE) $(LIBWEBSOCKETS_TGZ_SOURCE) $(ZLIB_TGZ_SOURCE): $(WGET) -q $(ZLIB_TGZ_URL) $(OPENSSL_TGZ_SOURCE): $(WGET) -q $(OPENSSL_TGZ_URL) $(LIBWEBSOCKETS_TGZ_SOURCE): if [ -d $(LIBWEBSOCKETS_DIR) ]; then $(RM) -fr $(LIBWEBSOCKETS_DIR); fi $(GIT) clone $(LIBWEBSOCKETS_GIT_URL) $(TAR) caf $(LIBWEBSOCKETS_TGZ_SOURCE) $(LIBWEBSOCKETS_DIR) $(RM) -fR $(LIBWEBSOCKETS_DIR) # # Some rules to install the required toolchains # toolchains: \ toolchain-x86 \ toolchain-x86_64 \ toolchain-armeabi \ toolchain-armeabi-v7a \ toolchain-armeabi-v7a-hard \ toolchain-arm64-v8a \ toolchain-mips \ toolchain-mips64 toolchain-x86: $(TOOLCHAIN_X86) toolchain-x86_64: $(TOOLCHAIN_X86_64) toolchain-armeabi: $(TOOLCHAIN_ARM) toolchain-armeabi-v7a: $(TOOLCHAIN_ARM_V7A) toolchain-armeabi-v7a-hard: $(TOOLCHAIN_ARM_V7A_HARD) toolchain-arm64-v8a: $(TOOLCHAIN_ARM64_V8A) toolchain-mips: $(TOOLCHAIN_MIPS) toolchain-mips64: $(TOOLCHAIN_MIPS64) $(TOOLCHAIN_X86): ifneq ($(TOOLCHAIN_STL),) $(NDK_MAKE_TOOLCHAIN) \ --stl $(TOOLCHAIN_STL) \ --api $(TOOLCHAIN_X86_API) \ --arch x86 \ --install-dir $(shell pwd)/$(TOOLCHAIN_X86) else $(NDK_MAKE_TOOLCHAIN) \ --api $(TOOLCHAIN_X86_API) \ --arch x86 \ --install-dir $(shell pwd)/$(TOOLCHAIN_X86) endif $(TOOLCHAIN_X86_64): ifneq ($(TOOLCHAIN_STL),) $(NDK_MAKE_TOOLCHAIN) \ --stl $(TOOLCHAIN_STL) \ --api $(TOOLCHAIN_X86_64_API) \ --arch x86_64 \ --install-dir $(shell pwd)/$(TOOLCHAIN_X86_64) else $(NDK_MAKE_TOOLCHAIN) \ --api $(TOOLCHAIN_X86_64_API) \ --arch x86_64 \ --install-dir $(shell pwd)/$(TOOLCHAIN_X86_64) endif $(TOOLCHAIN_ARM): ifneq ($(TOOLCHAIN_STL),) $(NDK_MAKE_TOOLCHAIN) \ --stl $(TOOLCHAIN_STL) \ --api $(TOOLCHAIN_ARM_API) \ --arch arm \ --install-dir $(shell pwd)/$(TOOLCHAIN_ARM) else $(NDK_MAKE_TOOLCHAIN) \ --api $(TOOLCHAIN_ARM_API) \ --arch arm \ --install-dir $(shell pwd)/$(TOOLCHAIN_ARM) endif $(TOOLCHAIN_ARM_V7A): ifneq ($(TOOLCHAIN_STL),) $(NDK_MAKE_TOOLCHAIN) \ --stl $(TOOLCHAIN_STL) \ --api $(TOOLCHAIN_ARM_V7A_API) \ --arch arm \ --install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A) else $(NDK_MAKE_TOOLCHAIN) \ --api $(TOOLCHAIN_ARM_V7A_API) \ --arch arm \ --install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A) endif $(TOOLCHAIN_ARM_V7A_HARD): ifneq ($(TOOLCHAIN_STL),) $(NDK_MAKE_TOOLCHAIN) \ --stl $(TOOLCHAIN_STL) \ --api $(TOOLCHAIN_ARM_V7A_HARD_API) \ --arch arm \ --install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD) else $(NDK_MAKE_TOOLCHAIN) \ --api $(TOOLCHAIN_ARM_V7A_HARD_API) \ --arch arm \ --install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD) endif $(TOOLCHAIN_ARM64_V8A): ifneq ($(TOOLCHAIN_STL),) $(NDK_MAKE_TOOLCHAIN) \ --stl $(TOOLCHAIN_STL) \ --api $(TOOLCHAIN_ARM64_V8A_API) \ --arch arm64 \ --install-dir $(shell pwd)/$(TOOLCHAIN_ARM64_V8A) else $(NDK_MAKE_TOOLCHAIN) \ --api $(TOOLCHAIN_ARM64_V8A_API) \ --arch arm64 \ --install-dir $(shell pwd)/$(TOOLCHAIN_ARM64_V8A) endif $(TOOLCHAIN_MIPS): ifneq ($(TOOLCHAIN_STL),) $(NDK_MAKE_TOOLCHAIN) \ --stl $(TOOLCHAIN_STL) \ --api $(TOOLCHAIN_MIPS_API) \ --arch mips \ --install-dir $(shell pwd)/$(TOOLCHAIN_MIPS) else $(NDK_MAKE_TOOLCHAIN) \ --api $(TOOLCHAIN_MIPS_API) \ --arch mips \ --install-dir $(shell pwd)/$(TOOLCHAIN_MIPS) endif $(TOOLCHAIN_MIPS64): ifneq ($(TOOLCHAIN_STL),) $(NDK_MAKE_TOOLCHAIN) \ --stl $(TOOLCHAIN_STL) \ --api $(TOOLCHAIN_MIPS64_API) \ --arch mips64 \ --install-dir $(shell pwd)/$(TOOLCHAIN_MIPS64) else $(NDK_MAKE_TOOLCHAIN) \ --api $(TOOLCHAIN_MIPS64_API) \ --arch mips64 \ --install-dir $(shell pwd)/$(TOOLCHAIN_MIPS64) endif # # Rules to build zlib # zlib: \ zlib-x86 \ zlib-x86_64 \ zlib-armeabi \ zlib-armeabi-v7a \ zlib-armeabi-v7a-hard \ zlib-arm64-v8a \ zlib-mips \ zlib-mips64 zlib-x86: $(TARGET_X86)/lib/libz.a zlib-x86_64: $(TARGET_X86_64)/lib/libz.a zlib-armeabi: $(TARGET_ARM)/lib/libz.a zlib-armeabi-v7a: $(TARGET_ARM_V7A)/lib/libz.a zlib-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)/lib/libz.a zlib-arm64-v8a: $(TARGET_ARM64_V8A)/lib/libz.a zlib-mips: $(TARGET_MIPS)/lib/libz.a zlib-mips64: $(TARGET_MIPS64)/lib/libz.a # Extracting/configuring sources $(TARGET_X86)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_X86) -$(MKDIR) -p $(TARGET_X86)/src $(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_X86)/src $(CD) $(TARGET_X86)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_ENV) \ ./configure --static --prefix=$(shell pwd)/$(TARGET_X86) $(TARGET_X86_64)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_X86_64) -$(MKDIR) -p $(TARGET_X86_64)/src $(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_X86_64)/src $(CD) $(TARGET_X86_64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_64_ENV) \ ./configure --static --prefix=$(shell pwd)/$(TARGET_X86_64) $(TARGET_ARM)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_ARM) -$(MKDIR) -p $(TARGET_ARM)/src $(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_ARM)/src $(CD) $(TARGET_ARM)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_ENV) \ ./configure --static --prefix=$(shell pwd)/$(TARGET_ARM) $(TARGET_ARM_V7A)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A) -$(MKDIR) -p $(TARGET_ARM_V7A)/src $(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_ARM_V7A)/src $(CD) $(TARGET_ARM_V7A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) \ ./configure --static --prefix=$(shell pwd)/$(TARGET_ARM_V7A) $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A_HARD) -$(MKDIR) -p $(TARGET_ARM_V7A_HARD)/src $(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_ARM_V7A_HARD)/src $(CD) $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) \ ./configure --static --prefix=$(shell pwd)/$(TARGET_ARM_V7A_HARD) $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_ARM64_V8A) -$(MKDIR) -p $(TARGET_ARM64_V8A)/src $(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_ARM64_V8A)/src $(CD) $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) \ ./configure --static --prefix=$(shell pwd)/$(TARGET_ARM64_V8A) $(TARGET_MIPS)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_MIPS) -$(MKDIR) -p $(TARGET_MIPS)/src $(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_MIPS)/src $(CD) $(TARGET_MIPS)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS_ENV) \ ./configure --static --prefix=$(shell pwd)/$(TARGET_MIPS) $(TARGET_MIPS64)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_MIPS64) -$(MKDIR) -p $(TARGET_MIPS64)/src $(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_MIPS64)/src $(CD) $(TARGET_MIPS64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS64_ENV) \ ./configure --static --prefix=$(shell pwd)/$(TARGET_MIPS64) # Build/install library $(TARGET_X86)/lib/libz.a: $(TARGET_X86)/src/$(ZLIB_DIR) $(CD) $(TARGET_X86)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) libz.a $(CD) $(TARGET_X86)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) install $(TARGET_X86_64)/lib/libz.a: $(TARGET_X86_64)/src/$(ZLIB_DIR) $(CD) $(TARGET_X86_64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) libz.a $(CD) $(TARGET_X86_64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) install $(TARGET_ARM)/lib/libz.a: $(TARGET_ARM)/src/$(ZLIB_DIR) $(CD) $(TARGET_ARM)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) libz.a $(CD) $(TARGET_ARM)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) install $(TARGET_ARM_V7A)/lib/libz.a: $(TARGET_ARM_V7A)/src/$(ZLIB_DIR) $(CD) $(TARGET_ARM_V7A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) libz.a $(CD) $(TARGET_ARM_V7A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) install $(TARGET_ARM_V7A_HARD)/lib/libz.a: $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR) $(CD) $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) libz.a $(CD) $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) install $(TARGET_ARM64_V8A)/lib/libz.a: $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR) $(CD) $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) libz.a $(CD) $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) install $(TARGET_MIPS)/lib/libz.a: $(TARGET_MIPS)/src/$(ZLIB_DIR) $(CD) $(TARGET_MIPS)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) libz.a $(CD) $(TARGET_MIPS)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) install $(TARGET_MIPS64)/lib/libz.a: $(TARGET_MIPS64)/src/$(ZLIB_DIR) $(CD) $(TARGET_MIPS64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) libz.a $(CD) $(TARGET_MIPS64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) install # # Rules to build OpenSSL # openssl: \ openssl-x86 \ openssl-x86_64 \ openssl-armeabi \ openssl-armeabi-v7a \ openssl-armeabi-v7a-hard \ openssl-arm64-v8a \ openssl-mips \ openssl-mips64 openssl-x86: $(TARGET_X86)/lib/libssl.a openssl-x86_64: $(TARGET_X86_64)/lib/libssl.a openssl-armeabi: $(TARGET_ARM)/lib/libssl.a openssl-armeabi-v7a: $(TARGET_ARM_V7A)/lib/libssl.a openssl-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)/lib/libssl.a openssl-arm64-v8a: $(TARGET_ARM64_V8A)/lib/libssl.a openssl-mips: $(TARGET_MIPS)/lib/libssl.a openssl-mips64: $(TARGET_MIPS64)/lib/libssl.a # Extracting/configuring sources $(TARGET_X86)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_X86) -$(MKDIR) -p $(TARGET_X86)/src $(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_X86)/src $(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_ENV) \ ./Configure $(TARGET_X86_OPENSSL_CONFIG_TARGET) \ --prefix=$(shell pwd)/$(TARGET_X86) \ --openssldir=$(shell pwd)/$(TARGET_X86)/lib/ssl \ $(TARGET_X86_OPENSSL_CONFIG) $(TARGET_X86_64)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_X86_64) -$(MKDIR) -p $(TARGET_X86_64)/src $(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_X86_64)/src $(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_64_ENV) \ ./Configure $(TARGET_X86_64_OPENSSL_CONFIG_TARGET) \ --prefix=$(shell pwd)/$(TARGET_X86_64) \ --openssldir=$(shell pwd)/$(TARGET_X86_64)/lib/ssl \ $(TARGET_X86_64_OPENSSL_CONFIG) $(TARGET_ARM)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_ARM) -$(MKDIR) -p $(TARGET_ARM)/src $(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_ARM)/src $(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_ENV) \ ./Configure $(TARGET_ARM_OPENSSL_CONFIG_TARGET) \ --prefix=$(shell pwd)/$(TARGET_ARM) \ --openssldir=$(shell pwd)/$(TARGET_ARM)/lib/ssl \ $(TARGET_ARM_OPENSSL_CONFIG) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A) -$(MKDIR) -p $(TARGET_ARM_V7A)/src $(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_ARM_V7A)/src $(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) \ ./Configure $(TARGET_ARM_V7A_OPENSSL_CONFIG_TARGET) \ --prefix=$(shell pwd)/$(TARGET_ARM_V7A) \ --openssldir=$(shell pwd)/$(TARGET_ARM_V7A)/lib/ssl \ $(TARGET_ARM_V7A_OPENSSL_CONFIG) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A_HARD) -$(MKDIR) -p $(TARGET_ARM_V7A_HARD)/src $(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_ARM_V7A_HARD)/src $(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) \ ./Configure $(TARGET_ARM_V7A_HARD_OPENSSL_CONFIG_TARGET) \ --prefix=$(shell pwd)/$(TARGET_ARM_V7A_HARD) \ --openssldir=$(shell pwd)/$(TARGET_ARM_V7A_HARD)/lib/ssl \ $(TARGET_ARM_V7A_HARD_OPENSSL_CONFIG) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_ARM64_V8A) -$(MKDIR) -p $(TARGET_ARM64_V8A)/src $(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_ARM64_V8A)/src $(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) \ ./Configure $(TARGET_ARM64_V8A_OPENSSL_CONFIG_TARGET) \ --prefix=$(shell pwd)/$(TARGET_ARM64_V8A) \ --openssldir=$(shell pwd)/$(TARGET_ARM64_V8A)/lib/ssl \ $(TARGET_ARM64_V8A_OPENSSL_CONFIG) $(TARGET_MIPS)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_MIPS) -$(MKDIR) -p $(TARGET_MIPS)/src $(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_MIPS)/src $(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS_ENV) \ ./Configure $(TARGET_MIPS_OPENSSL_CONFIG_TARGET) \ --prefix=$(shell pwd)/$(TARGET_MIPS) \ --openssldir=$(shell pwd)/$(TARGET_MIPS)/lib/ssl \ $(TARGET_MIPS_OPENSSL_CONFIG) $(TARGET_MIPS64)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_MIPS64) -$(MKDIR) -p $(TARGET_MIPS64)/src $(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_MIPS64)/src $(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS64_ENV) \ ./Configure $(TARGET_MIPS64_OPENSSL_CONFIG_TARGET) \ --prefix=$(shell pwd)/$(TARGET_MIPS64) \ --openssldir=$(shell pwd)/$(TARGET_MIPS64)/lib/ssl \ $(TARGET_MIPS64_OPENSSL_CONFIG) # Build/install library $(TARGET_X86)/lib/libssl.a: $(TARGET_X86)/src/$(OPENSSL_DIR) $(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) depend $(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) build_libs $(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl $(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) install_sw $(TARGET_X86_64)/lib/libssl.a: $(TARGET_X86_64)/src/$(OPENSSL_DIR) $(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) depend $(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) build_libs $(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl $(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) install_sw $(TARGET_ARM)/lib/libssl.a: $(TARGET_ARM)/src/$(OPENSSL_DIR) $(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) depend $(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) build_libs $(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl $(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) install_sw $(TARGET_ARM_V7A)/lib/libssl.a: $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) $(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) depend $(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) build_libs $(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl $(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) install_sw $(TARGET_ARM_V7A_HARD)/lib/libssl.a: $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) $(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) depend $(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) build_libs $(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl $(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) install_sw $(TARGET_ARM64_V8A)/lib/libssl.a: $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) $(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) depend $(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) build_libs $(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl $(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) install_sw $(TARGET_MIPS)/lib/libssl.a: $(TARGET_MIPS)/src/$(OPENSSL_DIR) $(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) depend $(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) build_libs $(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl $(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) install_sw $(TARGET_MIPS64)/lib/libssl.a: $(TARGET_MIPS64)/src/$(OPENSSL_DIR) $(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) depend $(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) build_libs $(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl $(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) install_sw # # Rules to build libwebsockets # libwebsockets: \ libwebsockets-x86 \ libwebsockets-x86_64 \ libwebsockets-armeabi \ libwebsockets-armeabi-v7a \ libwebsockets-armeabi-v7a-hard \ libwebsockets-arm64-v8a \ libwebsockets-mips \ libwebsockets-mips64 \ libwebsockets-x86: $(TARGET_X86)/lib/libwebsockets.a libwebsockets-x86_64: $(TARGET_X86_64)/lib/libwebsockets.a libwebsockets-armeabi: $(TARGET_ARM)/lib/libwebsockets.a libwebsockets-armeabi-v7a: $(TARGET_ARM_V7A)/lib/libwebsockets.a libwebsockets-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)/lib/libwebsockets.a libwebsockets-arm64-v8a: $(TARGET_ARM64_V8A)/lib/libwebsockets.a libwebsockets-mips: $(TARGET_MIPS)/lib/libwebsockets.a libwebsockets-mips64: $(TARGET_MIPS64)/lib/libwebsockets.a # Extracting/configuring sources $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_X86) $(TARGET_X86)/lib/libssl.a $(TARGET_X86)/lib/libz.a -$(MKDIR) -p $(TARGET_X86)/src $(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_X86)/src -$(MKDIR) -p $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)/build $(CD) $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_ENV) \ $(CMAKE) $(TARGET_X86_LWS_OPTIONS) \ -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_X86) \ -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_X86)/lib/libssl.a;$(shell pwd)/$(TARGET_X86)/lib/libcrypto.a" \ -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_X86)/include" \ .. $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_X86_64) $(TARGET_X86_64)/lib/libssl.a $(TARGET_X86_64)/lib/libz.a -$(MKDIR) -p $(TARGET_X86_64)/src $(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_X86_64)/src -$(MKDIR) -p $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)/build $(CD) $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_64_ENV) \ $(CMAKE) $(TARGET_X86_64_LWS_OPTIONS) \ -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_X86_64) \ -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_X86_64)/lib/libssl.a;$(shell pwd)/$(TARGET_X86_64)/lib/libcrypto.a" \ -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_X86_64)/include" \ .. $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_ARM) $(TARGET_ARM)/lib/libssl.a $(TARGET_ARM)/lib/libz.a -$(MKDIR) -p $(TARGET_ARM)/src $(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_ARM)/src -$(MKDIR) -p $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)/build $(CD) $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_ENV) \ $(CMAKE) $(TARGET_ARM_LWS_OPTIONS) \ -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_ARM) \ -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_ARM)/lib/libssl.a;$(shell pwd)/$(TARGET_ARM)/lib/libcrypto.a" \ -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_ARM)/include" \ .. $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A) $(TARGET_ARM_V7A)/lib/libssl.a $(TARGET_ARM_V7A)/lib/libz.a -$(MKDIR) -p $(TARGET_ARM_V7A)/src $(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_ARM_V7A)/src -$(MKDIR) -p $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)/build $(CD) $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_ENV) \ $(CMAKE) $(TARGET_ARM_V7A_LWS_OPTIONS) \ -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_ARM_V7A) \ -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_ARM_V7A)/lib/libssl.a;$(shell pwd)/$(TARGET_ARM_V7A)/lib/libcrypto.a" \ -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_ARM_V7A)/include" \ .. $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A_HARD) $(TARGET_ARM_V7A_HARD)/lib/libssl.a $(TARGET_ARM_V7A_HARD)/lib/libz.a -$(MKDIR) -p $(TARGET_ARM_V7A_HARD)/src $(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_ARM_V7A_HARD)/src -$(MKDIR) -p $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)/build $(CD) $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_HARD_ENV) \ $(CMAKE) $(TARGET_ARM_V7A_HARD_LWS_OPTIONS) \ -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_ARM_V7A_HARD) \ -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_ARM_V7A_HARD)/lib/libssl.a;$(shell pwd)/$(TARGET_ARM_V7A_HARD)/lib/libcrypto.a" \ -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_ARM_V7A_HARD)/include" \ .. $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_ARM64_V8A) $(TARGET_ARM64_V8A)/lib/libssl.a $(TARGET_ARM64_V8A)/lib/libz.a -$(MKDIR) -p $(TARGET_ARM64_V8A)/src $(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_ARM64_V8A)/src -$(MKDIR) -p $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)/build $(CD) $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM64_V8A_ENV) \ $(CMAKE) $(TARGET_ARM64_V8A_LWS_OPTIONS) \ -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_ARM64_V8A) \ -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_ARM64_V8A)/lib/libssl.a;$(shell pwd)/$(TARGET_ARM64_V8A)/lib/libcrypto.a" \ -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_ARM64_V8A)/include" \ .. $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_MIPS) $(TARGET_MIPS)/lib/libssl.a $(TARGET_MIPS)/lib/libz.a -$(MKDIR) -p $(TARGET_MIPS)/src $(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_MIPS)/src -$(MKDIR) -p $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)/build $(CD) $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS_ENV) \ $(CMAKE) $(TARGET_MIPS_LWS_OPTIONS) \ -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_MIPS) \ -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_MIPS)/lib/libssl.a;$(shell pwd)/$(TARGET_MIPS)/lib/libcrypto.a" \ -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_MIPS)/include" \ .. $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_MIPS64) $(TARGET_MIPS64)/lib/libssl.a $(TARGET_MIPS64)/lib/libz.a -$(MKDIR) -p $(TARGET_MIPS64)/src $(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_MIPS64)/src -$(MKDIR) -p $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)/build $(CD) $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS64_ENV) \ $(CMAKE) $(TARGET_MIPS64_LWS_OPTIONS) \ -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_MIPS64) \ -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_MIPS64)/lib/libssl.a;$(shell pwd)/$(TARGET_MIPS64)/lib/libcrypto.a" \ -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_MIPS64)/include" \ .. # Build/install library $(TARGET_X86)/lib/libwebsockets.a: $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR) $(CD) $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_ENV) $(MAKE) $(CD) $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_ENV) $(MAKE) install $(TARGET_X86_64)/lib/libwebsockets.a: $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR) $(CD) $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_64_ENV) $(MAKE) $(CD) $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_64_ENV) $(MAKE) install $(TARGET_ARM)/lib/libwebsockets.a: $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR) $(CD) $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_ENV) $(MAKE) $(CD) $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_ENV) $(MAKE) install $(TARGET_ARM_V7A)/lib/libwebsockets.a: $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR) $(CD) $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) $(CD) $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) install $(TARGET_ARM_V7A_HARD)/lib/libwebsockets.a: $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR) $(CD) $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) $(CD) $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) install $(TARGET_ARM64_V8A)/lib/libwebsockets.a: $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR) $(CD) $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) $(CD) $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) install $(TARGET_MIPS)/lib/libwebsockets.a: $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR) $(CD) $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS_ENV) $(MAKE) $(CD) $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS_ENV) $(MAKE) install $(TARGET_MIPS64)/lib/libwebsockets.a: $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR) $(CD) $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) $(CD) $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) install # # Some rules for housekeeping # clean-ndk: $(NDK_ROOT)/ndk-build clean clean: clean-targets clean-toolchains dist-clean: clean clean-sources clean-targets: \ clean-target-x86 \ clean-target-x86_64 \ clean-target-armeabi \ clean-target-armeabi-v7a \ clean-target-armeabi-v7a-hard \ clean-target-arm64-v8a \ clean-target-mips \ clean-target-mips64 clean-target-x86: -$(RM) -fr $(TARGET_X86) clean-target-x86_64: -$(RM) -fr $(TARGET_X86_64) clean-target-armeabi: -$(RM) -fr $(TARGET_ARM) clean-target-armeabi-v7a: -$(RM) -fr $(TARGET_ARM_V7A) clean-target-armeabi-v7a-hard: -$(RM) -fr $(TARGET_ARM_V7A_HARD) clean-target-arm64-v8a: -$(RM) -fr $(TARGET_ARM64_V8A) clean-target-mips: -$(RM) -fr $(TARGET_MIPS) clean-target-mips64: -$(RM) -fr $(TARGET_MIPS64) clean-sources: \ clean-source-zlib \ clean-source-openssl \ clean-source-libwebsockets clean-source-zlib: -$(RM) $(ZLIB_TGZ_SOURCE) clean-source-openssl: -$(RM) $(OPENSSL_TGZ_SOURCE) clean-source-libwebsockets: -$(RM) $(LIBWEBSOCKETS_TGZ_SOURCE) clean-toolchains: \ clean-toolchain-x86 \ clean-toolchain-x86_64 \ clean-toolchain-armeabi \ clean-toolchain-armeabi-v7a \ clean-toolchain-armeabi-v7a-hard \ clean-toolchain-arm64-v8a \ clean-toolchain-mips \ clean-toolchain-mips64 -$(RM) -fr toolchains clean-toolchain-x86: -$(RM) -fr $(TOOLCHAIN_X86) clean-toolchain-x86_64: -$(RM) -fr $(TOOLCHAIN_X86_64) clean-toolchain-armeabi: -$(RM) -fr $(TOOLCHAIN_ARM) clean-toolchain-armeabi-v7a: -$(RM) -fr $(TOOLCHAIN_ARM_V7A) clean-toolchain-armeabi-v7a-hard: -$(RM) -fr $(TOOLCHAIN_ARM_V7A_HARD) clean-toolchain-arm64-v8a: -$(RM) -fr $(TOOLCHAIN_ARM64_V8A) clean-toolchain-mips: -$(RM) -fr $(TOOLCHAIN_MIPS) clean-toolchain-mips64: -$(RM) -fr $(TOOLCHAIN_MIPS64) # 'make list-targets' prints a list of all targets. # Thanks to: http://stackoverflow.com/questions/4219255/how-do-you-get-the-list-of-targets-in-a-makefile # Modified to allow us to include files in this Makefile. list-targets: MAKE_NO_INCLUDES := 1 export MAKE_NO_INCLUDES list-targets: @$(MAKE) -s list-targets-no-includes list-targets-no-includes: @$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | $(AWK) -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | $(SORT) | $(EGREP) -v -e '^[^[:alnum:]]' -e '^$@$$' libwebsockets-3.2.1/test-apps/android/app/src/main/libs/000077500000000000000000000000001357643561300231565ustar00rootroot00000000000000libwebsockets-3.2.1/test-apps/android/app/src/main/libs/placeholder000066400000000000000000000000001357643561300253510ustar00rootroot00000000000000libwebsockets-3.2.1/test-apps/android/app/src/main/res/000077500000000000000000000000001357643561300230165ustar00rootroot00000000000000libwebsockets-3.2.1/test-apps/android/app/src/main/res/drawable/000077500000000000000000000000001357643561300245775ustar00rootroot00000000000000libwebsockets-3.2.1/test-apps/android/app/src/main/res/drawable/warmcat.png000066400000000000000000000155651357643561300267570ustar00rootroot00000000000000‰PNG  IHDR;CćŚ¢ßsBIT|dˆ pHYs..ż'tEXtSoftwarewww.inkscape.org›ī<ņIDATxœķwøVÅńĒ?CGP@„Ä`C‘ÄJŌÄü,A± ±Å.APŒ »(v£‰(Įc[4ģM¢Ų±ƒA@š Čüž˜=¼{÷=ē-÷^nįī÷yĪóžwgū9gvwvfVT•ˆˆˆˆµj»5Čģ""""³‹ˆˆhˆĢ.""¢A 2»ˆˆˆČģ""""³‹ˆˆhhRŪ("Ņ8č“>žSÕÆjµbuR”ŠE¤pp<°U@^ Üœ­ŖĖjøjõužŁ9Fwp\‘Ø’WÕik¼RõõAfw%łŒn0Ų|ü8æFkQoP§gv"Ņxč.UÕß»8 ®;Ŗź§U(³'ŠSUĒW6ˆˆˆŗ‡ŗ>³;‚|F7øIDZ‹ČĄÕĄm˜ģ®5°}Ė\Ų¼ŠyDDDŌ1”ĘģDī@D«łz‘‘…h™ÖXœˆ1Ć/£€fŽžMiMˆˆhH(Uõä   šój,ū‡Ą ˆģźōŒ8iĢx]`W`‘ū ŠŌŻĻ>©Ę:FDD¬%(Ł©®Dä0ą~`Ć*–ŁŲÉŻw^Dd/T§¤Ä•Œ<öÅTQöqa‹€35=Ÿ5 i\ ŖƒŚo€m€ūTõæ^x_ąHąmU½»«[ķ‘ßyA3TõŚŚŖĻš†ˆüČ z@U_Æ­śD”U­ł †*ØwMUŲ*Œ 4åś8ĘÅŁ8Ų°:ź†½ÄƒĖLÓŚ«›“ń.üŲ üx>¶VžA5^Ą¶Įóy»¶ė“†Ū{WŠŽj°ģ=~ÉUŪ}QŸ®ź³ iģģ>ü¹Ą‹Ø®H«:‘¦Ą.¤36ĆŪÕI^ĢĒ€Ų¦Ą]"²/p“ŗ· "¢ąłąÖź'"@ÕwcE!r ššąAą_Ą4DĢL§z%p‰Ņ “įm›‹¢‹0eį44Įf~ĻV”ö5£€ 0@DDD-”:TOFæOÉ«š0"æČL©:œÜģLų";yaO)柈Ü\zukŖŗDUhÖ,7""¢FPµe¬Hąt/äq`°pfåš7DöEõłŌn׊b†bmß›Łīź‚ž Ü¢ŖodÄß8 č‰ –Ͱöƀ·€7€Uõ»”“½1K›ī@ą;WļIXßQ¤®}]]»¹kĢRē-ąQUż{ķīœEī9(p½VÜ Ś8Õµµ¶q7 xøAēN§4oÉ*"AæUÕ9޶1ö}öĆ¾É 0Åūy®¬7€ńÅś&„Ģ6Ų÷ŚŲ˜åź}—Ŗę­ÄDd Ģj¶Ŗž)"{æÄ¬ž:?Jź "]€s1‘ŲśĄėX’?$"—[bßÅ{åŌØā\ćm2ŒÓ@8Æp•£=_B^7›‹ötāø]0Żŗ“Ķ ’YU!&µ°A\ēīēŸyy½l¤{-hs'¶G@{(Hū@@ļ“R§9św6˜5 ŅåmP'+RņX ü*„/*įł*Š!H× S*’¾@š%Ą…a½]ś€1ĄŖé'i27(0Mƒłż,Žīś2«¼¹Ą‘A™„ō›»ų½)ķ›łm%¾).ķ*`²×–•Ą°”4½ż3Lƒb„ū’{nŻ\¼]±-ÉkƜŒ – ģS©o»JĢžī1§ć2āŒuōv%ä7ÖĖo¹z»MĄ™E^Čäŗ®*m¢ę™ŻRlwy@ņ1[ż© ŻåA{óhĆŚģ ķ 6hģŃöOéĖ„Ąē)įƒ|Cf·¼Č3Zž|”.}Ļ”g; cģSØČ4Cf2žäCI{W†ix®@“ū’˜°#Ż÷ĄÉAŚš)ĘÜfa«€Ż«ĄģŽ Ā`Ģb¦¦•„—Ģģ°Įi.Ż?ö.¼90„; ƒŁ}‹ĶøÆ6r“ 0ćfä˜čĆ@kGoœäžĒRj‘Ł-š˜S/ü…ĒvTāč‹äµ›Āb/æ£R:{x‰üŚzÄģņ>BGߊ½ ģę…ļ“õföLJ_ōt“nAųx/]`z@ ¬ēč{‹=Ś" sf§Ų(¾+°°;05 öŅŠ ś¢ƌGm½šŸéV`˶u°%е} °„—~p@’SRßÄŃ;bƒŠŘöAĻ ź2 H׋ŠLtŠ›ķ5 Ž >š{Ļ _J?÷ ®˜ā½?ÓżkŹūµp)ppļłP—ß@³ś„Žž>ŅŽ^]nĶČū4G’„ōųe^µĀģę{Ģ©‘>SaŒBc…§ęŖ{hłōUXčåua?'偧]×TŖCjgf×*#ß{\œė½°䘠ātŚÜ“0$Ÿ±œźč'ż3ČĖóWķ”vŒ ā öhiĢnļ ż}¹™ģ ķ-Ż_‚t£Sā¼Ä9Ē£…³Ÿ[J|Ž!³»ų:hŪA)é® Ņż%%Ī{Aœ=z…~ĪØ_+*Īl_ÄŪ„”öh÷ .æ³3čķ±™›=¼pŸŁm™‘6łNņ~GļčåQ)fWÕŻŲE«ļTWyįŸGcŻO›P]žšƒČĄSŲĀ5&Ók‰šfžy%Ōķ·9P×ń™šŠM&ŗß-’5„Æxqz‰ČśŲj]vöҁĶüß¼ū“ęĄ8Ÿ\Ų¬„i|,QÕ AŲŲLĘ/cSw’ß ī0`¦ˆ|įŹæXD~œRNĻąš§šGÓ҈HlcĄĒ-)éKĮ@lc lš:PÓ½ę„õķį÷±ėēuƒ8[—[÷>}äķŽ1öł"ņ‚ˆŒ‘#Ä6ĖAW÷›ŗĮ¤Ŗs±ŲFBˆeoHCņŽ˜‘÷,l@©4ŖŖTœc`"āv°eÉŻŲĖ<ŪQ͇H/léå+ p"ĶP“–LUÆv;“—©ß6%“”¶‘e &Sŗö1ŲŪŻ7v£āGń¶Ūµ ¹]lŸŁĶVÕ÷½’Ż‚ü»»«BFįćĖ0@UUDę{Į[SUõ]¹ {W|tqW`øˆLĄfL‹=ōZ=#„.³ƒ’I[7'ē<Š ²e`2łĢ;,;ĮĪ%äWģ9da ¦ŃĀ kƒ½É;1MDØźĖÅ2sƒĆ&īo”wöKģ¹n–B›„nš–‚ä½(tÄĀL ]”zBU™Ż©ŲˆŻ˜ąl\ēbžäv/˜ŅüĘM Wł9ŲĆ9Ū†æ‘ęØž9-¹Ŗ^įŽ„UlCm#“ń±ū„‡³¦Ż1Ē `£ß$lɱ °±ˆüŒŠ 3TÄĀ˜Ą¼>+@k“Ž*ųæz¤VSI-·ū`Œ,TµŲSDOŌ”ęė#Hļ˰̯‚ß‚-ʵ; ߒóŠóCąŸ"²Oʌ}6¹ē¦Ī“5«OP™ś ŖD¤&—Ü “ѵ¢uʈȖZqe––ßJYˆ=ŪBļlņģē„Š •1 ė’öāt(TĒ¢ØŹ^UQ8Ha„“µ½­n‡¦Hš-fx2ŗł Ū;ŚU^ų*…Ó‹Čn$[nwO%ä5-³›U ßD({gŽŪ]KŹ|Żū?ĪÅŁ×£æōˉuI®ŪĖlšĢ®sgĖ€¾ hY Ļõ°tdīM/Ī#ķ‚”|īā\ęŃĀM“£Klo(³;›|łßKĄŗAŗ›‚8'Uāż Ulņ6 2Ņ5Į–Ń'Sq#%SŽ–’G"’<<ƒŽČ{wņĀW«žČ;y–©»Ć¬U™˜l"0o‹Ķ𲧚"›a3‹dŚŗŲÕ·\~ēaj°ŃöVD†ØĮÄ“ś€"²OčĪŽ8ŅżżŸOSÕļ©h#¹3¹5Q\~ū0 §Ō› œŁ½FÅQ÷H§ōšŁZDnu !™y'K «ś[Ŗś­£w‘~®ĶØźbµåÕ„ääPq&÷jē"²zė”{ āųiB%ļ+ÅD+«!"ėŠČ‰©-Ģa>6øųņØŻ€GGœ¬ś‘õŅ2‘=Dä”R8#M5Ét2¹Õ³ZU]©ŖŖź)õhKiH¾µć2čaļįąćóLšŒū=ÅyqZ™łå£22õ‚Aތģ-MÓ«ƒM>óā}«°WF~üxŖp~ĒwņźŪĢN±—h£€žØŁL%e'ųmF›żõ?)ōÉmø&ˆ·›‰œŽ¹oś#¶1’ŠwšŅ¦Ķģ[¦Ż-«CŚ^śŸ»°éŲō°—{8fķ§{ŲK×Ssšés1åéqäō²’k|Šęä+Q‡}xwb¦ŠsĀ>#[Ļ®+&³ņiOā;ČWšŽÉžOÅ6fFįķȦ<§WČļĖy˜¬pœo”k’#Ų9-ƒ1«ŽpWż; …—®¦ļ6§ģėѶ"·Ūzt@ŪSQ`x@+efלÜL{4ެ³lYJNm§TOņŌÅsšØžN”B…<ś µ]«Bł0¼ĆņæIyųõ‰Ł½„}°Ó±%łEŲ¬M1%ĶC3ŹÜ:„½ ©Øß4"%Ī]łµšŹ-å*Äģ>ÅfYiŹžy‰e.ziwĀ×ÅŅ~€gmā„ߏ|‹‡šš¤)dAыüeā#@SGļBŽ)½RźŪæ@ü×¼x K,ćĀ ’^ķ‡)å_āŃĆģā’DnŠx§Ÿé„)Źģ\¼ŸxĻb96 ˜ėžĆV8г¬*ūŪ®2ƒĖgP#=ęō¦B[…ö ļyįŖž M‘ü†xiņ˜łścžU˜ŻXL‡č*Źcf?+Rn8‹­-Lé“2dˆ˜‚õóŲOē3»;15Ž,«£wSRņ.Čģ\œžä,)ü~ŗ9,%2;·»kū'Ų’}īŪ!7óŪ¼2¼©śO³õö(rėś‰˜ģ-<g*°;ŖSKČó Lqó,ToŠ; {°i­ŖĒeŠ2Š’a†É7\Ķp2–ŽĄ—ŖZ«īåEd]lY¶ 6S™ ĢTՕeęÓ Ū TąM1āāwĘģUŪaźL`ŗŖ–t¶ˆŲ¹&«ØjŚ®`”ōØčąCu²Å5ŁŪ¼i1ꙘjPµ|˜N³3֟-12SUóԃ*‘wGrŽ>.÷Ż(³¬õČŁŅ¶T“[—…źsŽ™@U1nką`šĮaÓł ˆģźĢ"yŽŠČ ņ·Īa-r^ئŖšBm×@U—`£’»UĢē;²õĪŅāO#§_X™ņfQIu —~6łŖ8k Ŗ:Ÿ`Ŗšó_€ķ®‰¼«Ō×eā<Œo¼PFkź(E«Ģ‘˜O§‘[v‚ <' Rü\ ŪE•BYk˜]DDC†ˆ ‘‹D¤›ˆ4Ćf"2‚œÕŌ•ĶĶk#śA˜ZĄEØŽ‰.ćkŹ’x›ĪĖsqJh]?ū6""¢4tĀT>ʵc»Āgc2ĮŖśZfź"Øže¬Õ%ˆģœ€źu^ų-˜Lč*²šODöĮsVY"āĢ."bķĄ}˜\nLVÜS©™„9¢Ķ²«- ÕĘģœņd7L˜ż °TUWa2‰ėņØ^ ‡¹>ĄĪ«ńŅrŠ®ZĶ#""źœ šĻīŖvTi ("ū‹Č5"ņ/lüL_l>0[Dī‘lc|Ջ0 v„¢ÖyŃj”_󈈈††J1;é)"Ćt£ĪĮ “}““&ŲVśÉĄ#"2<33Õ!˜~Ī4L·¦„¹pZ]²*æADī‘Nī~“S(]y<ƒÖ4É«šźvØS *ļbłI­c%ÜU å”)"’‘–)įĶE$t-Ujł›ˆČI"r…ˆœ"v&HZ¼§Ć{YODK‹Q f'f§ś2fsXŒŃ,ʘ×Åt؞jT»£ŗ Ŗ—”S„2ā®mčCĪŪĘK˜P·š`³ē4ōÄw« S(Ķ>rkLÆ. 㨄?·*b,=“Āī˜S†É·G. ł?LMgsĢŖfS²U‘üØĘWčł6x”%³s§]‰Ł±•‚fä|†] "MTõÜrŹ,ļwdвΜ]‘Ų,«OŪøŲOUońh]±SĘŽĘNnZŒ9%ŒéN}“Q՗œāė±ĄŸUu±{f©źNłųLiuŒŖ&®Ÿ¾Ē,’27ĆĶßÄ̾ęjĘĪŲ¾-p·ŖĪ;ķ«p”ˆōĆŌ‰æÄ<ˆŁł ¶ŹPĢ,n™£5rķķ…væŖŖˆl ōÅ,Q~½/€"²'&0o‚ ģ›bv®/ æE䗘ĀtźlĪĶžŽĒ,eīUÕ¼AĄÅ¹ųµzŽOEddV›=, ņź‰YĀ<§Ŗ/ø°Ž˜OĆĻ1-‰QŲ·ŁS ~XUßqq×wį1/Ö/bļĀĆ^cĪ&—Pæ:rgvWP:£S*:GųˆäoVTŖś¬Ŗžšq®Ī²ź8ĪljDä>ąģćæ3„JŠŪ0ś3>æČ…ĻĘ̹¦`Zü­0»G0W`gąī›‰HSl–ß ›Å‘Ć\œ=1Wģ8Æ.Oa~ņ~Š£ūž‡ĻÅĪÜxĆy½Xąźó„«SAĖ ģP–æag9tŽ;ZLą} 60$瑸&BŠ1ž¹)en‡1“W0ћ‚roqķ:҉v*Ąy~ys$; øSDŽI©’ŽĄr <<—h2Ā»o‰=ļ€óEäz¾ęD÷B¬–aĻ`Ŗū³ˆēān„½7—c&gÓ=yæZcŒ*y®q”jW†½iĒÕ=‰üu1łĒüe]7Vʶ­&.*a[‹u}čźī'a˟–ćJ ĻwV¹ū6®’“£ė¶žćī·IīŻ’¦˜iQsŒY\\ļņ˜‰žńŅl<āīWŗū;€c¼xļį|¹#<Śæq¾ żūśā1ģ¼Õä’xŒI·Ćf˜ÉIXŻ{Ü3<_‚ēUs“C·`³Ā}O½šEø³&°‰C2H¬|ķĀū/{izO§Ō’הräh.ž²šsŖ©ĄŽŽ’®ž}1ęŻ*ȧ)&9Ł{vŻ]>ž1#“ļ$GÕöū_īUĪ2¶/g‚ ±cāžź…]*"až Ķ9gkśŒˆ•ŗķõź(¶>WÕ伇·śBĶŁŻ~™ķåAUWˆČóß;ÕģIlv÷’ŖŖ˜Ļ»"ņ¼—4ĶóīĪTtĶś ōĶ„¾Ąf!o„Õ«ü³ž‡1śŁ˜ė÷¹`ęh"2›ż9M?‘°<Ń4č("jnIż?—ļ*yóĀņŗ—EW`ó ŅŹ›ęÕ©*X‰{ęŖŗ@D“;ā]õ¼'‹Čļ°Ł÷Ū#ōM;'kE3Ī?Ē“'NœAŌ+”ĆģB¦ńDĀčÄ õ»`Ę‘)˜Ē‹B ļtÖ|‡Ķ‘ŸØjź!k)ŽŗŠHs÷÷ čYę˱QŽĒ³Ų‹=MUēŠŁ'NĪłēĢiAæ"uzcxļø’;SŃqfV–‘/ )„ķ°%rr?›Łt‘õŻĒß“Ė}…)®®ņĖ< 8SU’ķäŽæāoLwKļ­ÉgäS0łdæ"uh+"}Tuµ-±ˆ“Ōņ4Į6XŽvŽ%Zc"‹vxmu“3±£6‰Č!ŲÖ *ō‹Ŗ~$"³DdŠDU}†^/P³ 3 "1$ø’=Tõ4'Eķšsužu ±×Øźw"ņWąI§†°łU>Ś8u‘ÕŪĻbV.əĻb²Įä܏±ŲNūŲNīzŲłĮį)]w‹H{löŠ„lēćE` ˆŒseo UÕTļ¼ĄžnvÕ[‰«ŖKEd,&O¼ [‚qŒ/-—0Ē»2?Å6IZg`N$} vŒnL`æ@DÖńčc‡Ż†ĶŒZ[iąUĒ1œ3±SŻ®Ę6ˆzb›:į€Uß—¹ņNĄm@…mU;Sbp¼ˆĢĄd™Åp;&v\F}ź ŹaD’ĮäB ’åĻ˜`89:ī騶9š ²Qč<'"•=„©.ćVr‡ń܂ón”Ŗƒ0żĒeŲ9‰eäLō’’#\ŝnJīD«‰˜·ą±ī’}ĄÅÉLYm·³¶;S·H–’ÆįAØź«óYąź9•Ü dc2<¼’ÉLüZlPŻcŻ1¹X.Ćä–-€m4g‰s4ĘøÄˆJܬOĘf>®uķMʼĄÅŪۘ†Éłp’Ļʖųƒs‘¾ē†Ž‰~Œ &°›¬£ĄžĮś.n;씸¬¶†÷˰%÷eŲ wÆŖžāhÓÉ·L8ŪŒŲ cäÉfĘ×xĻb+€{3źT·QŽ€Bn“įeLxŻ“±ųƒńŅ$ Ɣ‹5yĶŗ—ŠĘz³AQ  }1YQ/l ŗ­–ėÓÓIė€-‹æĀTŹĶg(ĮA>ķ1

Error " + exception); } }, false); libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/mount-origin/favicon.ico000066400000000000000000000025761357643561300334450ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/mount-origin/index.html000066400000000000000000000010031357643561300333010ustar00rootroot00000000000000
LWS bulk transfer example
.
A large ws message is sent to all browsers open on this page.
The browser js echoes the large ws message back to the server.

Ws closed


libwebsockets.org-logo.svg000066400000000000000000001403321357643561300363430ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/mount-origin strict-csp.svg000066400000000000000000000302361357643561300340530ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/mount-origin protocol_lws_minimal_pmd_bulk.c000066400000000000000000000166621357643561300350740ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/* * ws protocol handler plugin for "lws-minimal-pmd-bulk" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The protocol shows how to send and receive bulk messages over a ws connection * that optionally may have the permessage-deflate extension negotiated on it. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* * We will produce a large ws message either from this text repeated many times, * or from 0x40 + a 6-bit pseudorandom number */ static const char * const redundant_string = "No one would have believed in the last years of the nineteenth " "century that this world was being watched keenly and closely by " "intelligences greater than man's and yet as mortal as his own; that as " "men busied themselves about their various concerns they were " "scrutinised and studied, perhaps almost as narrowly as a man with a " "microscope might scrutinise the transient creatures that swarm and " "multiply in a drop of water. With infinite complacency men went to " "and fro over this globe about their little affairs, serene in their " "assurance of their empire over matter. It is possible that the " "infusoria under the microscope do the same. No one gave a thought to " "the older worlds of space as sources of human danger, or thought of " "them only to dismiss the idea of life upon them as impossible or " "improbable. It is curious to recall some of the mental habits of " "those departed days. At most terrestrial men fancied there might be " "other men upon Mars, perhaps inferior to themselves and ready to " "welcome a missionary enterprise. Yet across the gulf of space, minds " "that are to our minds as ours are to those of the beasts that perish, " "intellects vast and cool and unsympathetic, regarded this earth with " "envious eyes, and slowly and surely drew their plans against us. And " "early in the twentieth century came the great disillusionment. " ; /* this reflects the length of the string above */ #define REPEAT_STRING_LEN 1337 /* this is the total size of the ws message we will send */ #define MESSAGE_SIZE (100 * REPEAT_STRING_LEN) /* this is how much we will send each time the connection is writable */ #define MESSAGE_CHUNK_SIZE (1 * 1024) /* one of these is created for each client connecting to us */ struct per_session_data__minimal_pmd_bulk { int position_tx, position_rx; uint64_t rng_rx, rng_tx; }; struct vhd_minimal_pmd_bulk { int *interrupted; /* * b0 = 1: test compressible text, = 0: test uncompressible binary * b1 = 1: send as a single blob, = 0: send as fragments */ int *options; }; static uint64_t rng(uint64_t *r) { *r ^= *r << 21; *r ^= *r >> 35; *r ^= *r << 4; return *r; } static int callback_minimal_pmd_bulk(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal_pmd_bulk *pss = (struct per_session_data__minimal_pmd_bulk *)user; struct vhd_minimal_pmd_bulk *vhd = (struct vhd_minimal_pmd_bulk *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); uint8_t buf[LWS_PRE + MESSAGE_SIZE], *start = &buf[LWS_PRE], *p; int n, m, flags, olen, amount; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd_minimal_pmd_bulk)); if (!vhd) return -1; /* get the pointer to "interrupted" we were passed in pvo */ vhd->interrupted = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "interrupted")->value; vhd->options = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "options")->value; break; case LWS_CALLBACK_ESTABLISHED: pss->rng_tx = 4; pss->rng_rx = 4; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_SERVER_WRITEABLE: if (pss->position_tx == MESSAGE_SIZE) break; amount = MESSAGE_CHUNK_SIZE; if ((*vhd->options) & 2) { amount = MESSAGE_SIZE; lwsl_user("(writing as one blob of %d)\n", amount); } /* fill up one chunk's worth of message content */ p = start; n = amount; if (n > MESSAGE_SIZE - pss->position_tx) n = MESSAGE_SIZE - pss->position_tx; flags = lws_write_ws_flags(LWS_WRITE_BINARY, !pss->position_tx, pss->position_tx + n == MESSAGE_SIZE); /* * select between producing compressible repeated text, * or uncompressible PRNG output */ if (*vhd->options & 1) { while (n) { size_t s; m = pss->position_tx % REPEAT_STRING_LEN; s = REPEAT_STRING_LEN - m; if (s > (size_t)n) s = n; memcpy(p, &redundant_string[m], s); pss->position_tx += s; p += s; n -= s; } } else { pss->position_tx += n; while (n--) *p++ = rng(&pss->rng_tx); } n = lws_ptr_diff(p, start); m = lws_write(wsi, start, n, flags); lwsl_user("LWS_CALLBACK_SERVER_WRITEABLE: wrote %d\n", n); if (m < n) { lwsl_err("ERROR %d / %d writing ws\n", m, n); return -1; } if (pss->position_tx != MESSAGE_SIZE) /* if more to do... */ lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RECEIVE: lwsl_user("LWS_CALLBACK_RECEIVE: %4d (pss->pos=%d, rpp %5d, last %d)\n", (int)len, (int)pss->position_rx, (int)lws_remaining_packet_payload(wsi), lws_is_final_fragment(wsi)); olen = len; if (*vhd->options & 1) { while (len) { size_t s; m = pss->position_rx % REPEAT_STRING_LEN; s = REPEAT_STRING_LEN - m; if (s > len) s = len; if (memcmp(in, &redundant_string[m], s)) { lwsl_user("echo'd data doesn't match\n"); return -1; } pss->position_rx += s; in = ((char *)in) + s; len -= s; } } else { p = (uint8_t *)in; pss->position_rx += len; while (len--) { if (*p++ != (uint8_t)rng(&pss->rng_rx)) { lwsl_user("echo'd data doesn't match: 0x%02X 0x%02X (%d)\n", *(p - 1), (int)(0x40 + (pss->rng_rx & 0x3f)), (int)((pss->position_rx - olen) + olen - len)); lwsl_hexdump_notice(in, olen); return -1; } } if (pss->position_rx == MESSAGE_SIZE) pss->position_rx = 0; } break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL_PMD_BULK \ { \ "lws-minimal-pmd-bulk", \ callback_minimal_pmd_bulk, \ sizeof(struct per_session_data__minimal_pmd_bulk), \ 4096, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) /* boilerplate needed if we are built as a dynamic plugin */ static const struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL_PMD_BULK }; LWS_EXTERN LWS_VISIBLE int init_protocol_minimal_pmd_bulk(struct lws_context *context, struct lws_plugin_capability *c) { if (c->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_err("Plugin API %d, library API %d", LWS_PLUGIN_API_MAGIC, c->api_magic); return 1; } c->protocols = protocols; c->count_protocols = LWS_ARRAY_SIZE(protocols); c->extensions = NULL; c->count_extensions = 0; return 0; } LWS_EXTERN LWS_VISIBLE int destroy_protocol_minimal_pmd_bulk(struct lws_context *context) { return 0; } #endif libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-corner/000077500000000000000000000000001357643561300272165ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-corner/CMakeLists.txt000066400000000000000000000041211357643561300317540ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8.9) include(CheckCSourceCompiles) set(SAMP lws-minimal-ws-server-pmd-corner) set(SRCS minimal-ws-server-pmd-corner.c) # If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) require_lws_config(LWS_WITHOUT_EXTENSIONS 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() endif() libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-corner/README.md000066400000000000000000000011111357643561300304670ustar00rootroot00000000000000# lws minimal ws server + permessage-deflate corner case tests ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-ws-server-pmd-corner [2018/11/21 16:47:49:0171] USER: LWS minimal ws server + permessage-deflate Corner Cases | visit http://localhost:7681 [2018/11/21 16:47:49:0172] NOTICE: Creating Vhost 'default' port 7681, 2 protocols, IPv6 off ``` Visit http://localhost:7681 5 ws connections are made via permessage-deflate extension. When the ws connection is established, various amounts of data are sent resulting in ciphertext packets of a known size. minimal-ws-server-pmd-corner.c000066400000000000000000000055461357643561300347420ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-corner/* * lws-minimal-ws-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, { NULL, NULL, 0, 0 } /* terminator */ }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; static const struct lws_extension extensions[] = { { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" "; client_no_context_takeover" "; client_max_window_bits" }, { NULL, NULL, NULL /* terminator */ } }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server + permessage-deflate Corner Cases | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.extensions = extensions; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-corner/mount-origin/000077500000000000000000000000001357643561300316455ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/ws-server/minimal-ws-server-pmd-corner/mount-origin/example.js000066400000000000000000000036721357643561300336460ustar00rootroot00000000000000 function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { if (typeof MozWebSocket != "undefined") return new MozWebSocket(urlpath, protocol); return new WebSocket(urlpath, protocol); } var ws = new Array(); function conn(n) { ws[n] = new_ws(get_appropriate_ws_url("/" + (n + 1)), "lws-minimal"); ws[n].n = n; try { ws[n].onopen = function() { document.getElementById("r").disabled = 0; document.getElementById("status").textContent = document.getElementById("status").textContent + " " + "ws open "+ ws[n].extensions; }; ws[n].onmessage = function got_packet(msg) { if (typeof msg.data !== "string") { //console.log(msg.data); document.getElementById("r").value = document.getElementById("r").value + ws[n].n + " " + "blob uncompressed length " + msg.data.size + "\n"; } else document.getElementById("r").value = document.getElementById("r").value + msg.data + "\n"; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws[n].onclose = function(){ document.getElementById("r").disabled = 1; document.getElementById("status").textContent = "ws closed"; }; } catch(exception) { alert("

ŠDā8ņį»b„ģK—B¾§„ŲŻE°š±ČĮśWœk:‡Žķæ³ōØć…J®Ę;°Ćø?^kdĀg7Ŗč/o Ģ™Rs…ĻŻ÷®fĪŅźFŚåvää1ĪjdśrĶźEbńI+y,Zģtķ^ĘåVā Ų£‘T‰8bO„d «wŖ]ČŪ’eI.:`wÆ#ń†æ ŗ$ŖķüE#)įŚŒ²j„$Š6tn=H®n-K;ée¼“ĶE8cćœõ"£œŅ1īAwlń\Ī«$žQ'8l€}«…Öeøpöv3I$Ń bźÆäiFZ—cĪäžÓ‰&RŒ' ń^¦g¼:\«i°sŒśā»o ų7ģ×—÷‹:”ĘaņĮĆf¼¼F%-źRĆw>؃F‚ŅĀ;˜“Ė+ˆ™¾mńqÜg¶kļgšļZ–ī;ķ2Ķ Óœ±]Ļ€9č p{^mČÓ±ĪxOž /RIŪŁ$’ĢXœØ=½+¤ų‰ńößrŁŹ—:ƒĘ7ŗąmlW]!Ÿ3O©jŚ–±<7··°V<¹ē ĄīN+ļ°æŒ|VśG>-źĻš÷Įī|ϳH„\MČ^’Jõ)Ś+C–­K#õĖįĮ嚏€#¶ųą7Ć:”Į®ßøYīĒvĒ®·5Ó_xkĀ~ ¹²iõń_‰ņ‹#ĆóE½ˆčsϵk3ØĪ£Iųwāæźņ]x³P’„[@B%Rœ½ĀžŸ(ķķõÆHšŻĘ‹ ų£OѦŅ/n“€Ū¦o³0VO]Ż3ō5æ1Ÿ9ÓÜIįŻ*ėTŌ|:ķ4»P ĄsĮ÷®'Ćī­õ=CÅ7­m”<›VĢ)K…ø<£6ʧWƒZ½—ĆžŽ=25‚G†ā`[8g黎†¹9u] Ąumn ‰ŃWk‘ź ø9=oR“VŠg²Õu1 Łޱ¬¤9AŌqÓüó\u÷ŠõY“ĖmFÓÖ ¢Ā\Ɯ̾„Žx¼cst™ž.|IųcšL?мEāk=SÄh¢6Ҙ’ūŠä ēšü©ųńū_üBų—<nžĖ ųUcņšŁ$mīzēpąž½tĘIoCāŻFņf3ĪóĻ"9aĻLš¢÷Ą1-øÉčEj‘Œ¤@™”“3¶LöØćņD„ $2=i=59å.„“Š[v{R[[fóKĪīj9ĪiKذ…"tmĄÆ½,6§Ź^KpqJR3sfŗ:®ÖF8ÆEf%‘~MĄµ$]މ}zäAn݃W¼x[ö{ńf¶ś%­˜“®Ą7$Ø=z‰JČč§ļ_‡_³G…¾ŚĮ&æ}i­ų¹˜2Z °Łæ ś'U𶱩}žēX›M²Ńžأ„į•WŒ:W ZØļ„M³ĖšwÄņX‹żG>j;ƒ•#lvą×‰|jń¾”Ŗų[Gš\FŽŅßķh®nIķč8¢Ģ{nu'µgĆ6^7w¶ńGäŹKšXŒŠÓš‡€ģ."ųŅĒÚŪXß}›L‡ī~ķB•ņ+ēĖi_łż+åoü=ńʈŗf»Øųbż4ūä1’}ńé[ĘżHq¾ē#u§Żx^Y„¼¶6ó66;kæŠU®\ÜF¦däŖżįļZ©“Ėbæˆ"¾‰-ŸX»’ę#(ņc`0„r1\–«ćŪ™a»š¦‰ö•¾eę”¶N8cU{ģ\bzēĮļ xÉ>jO­$¶šŠ\G*łĄŒœ“ł×Ö:Ę«šėGš„čę õ8‚›É#'29ńģF(»FŖ,łsLųÕ“ńµķ#O{­<+67Ļ”īkΜų­¢éŒŚgÄĖu¦Ųj°'Ś_2€źß‰ÆŚĻų!—ķˆŸ ¾%x‡ö`ų™«“ąæ8m¦_ŻŪŻm@s…-Ō{اn†œŚXž„$Ó$Óg½7jlšAᇨö ×Óæ †²gXbo)$€A®”Ž:„o›ēKéĶA¹<ŅŅ«.}ė{ĀČńŖ ‰‰ĻB?­1RS™]޽č5ƒč\G@Šń– Óń«°Ēē&֐DyĮ#‘EŽŠfÕ»"¢C½vž¼õÆŠų%ļ큩~Ŷ'ƒ<{qÆÜY|3Ö[ū/ÄvģÄ£Fģ¾ŽūOĶōȧJ£„®ŗŻ}śpgśCųoÄZ”¤iŗ†•©[_h7öÉ{§ĢŽ^'ĄnųžXõ®o\U•šźÜ ÜuęW§gf[ŌłŪć'ĀŪųjćM’łtéT5՜źa•lLćł²ŗnƒuz.µqś}כ¦jŃ“a„d”¹Čį†}x®=™œ£sł‡’‚–žĪ_>"Üų×LŃ1cćFņÉļŪłk3DŁ…Ū“AČ5×JZõ)™óFŃØņ²3Īą* !Ufęī0}j#>h©GfMõ>»ųg¬kzV‚Ž#Ō--n¬b”ˆ‰\« r=N+ŅüYį­ UšŖ\ŚĢŅ £ņžäkĻśž•ÉYŁčkJ×1ō]" ’ A¦jŚ™ķŁŲf.C8öā¼ßĶv>'’-oOY“łmA…Y8ĘҊ3—1¤Ņ±õĒĀˆWZŽ™ik©-Å­ŽŃ 1œ} õ™ŚķeÄļÜpOZ÷c†¢;½×Pŗ‘#S&F9äשŁĮØŚBņĪ “UĖ®‡)Ąųš .dŽśÅ”23aÕøČ£HÓ>Éx5,—Œ»ÓŌ’isj«é:S‹½–GyW,ąžÕē~(²¹¹i"µĻ'Ս#;ĀŌm•ļŗž™¤ĒuiwiiöiUH}Ū­ņ™ž,›F_ۘԮŖó²²“³~µóÜBŚv·ī¹¾E²¾„"=Ɨ“õkE¹>\ ŽČN6ēu½å²˜X°R#Ø­[R—āHg9ŸOZõ­+òZųzmBŚķ%‡>YAÖ¼Žāńę`cņ„œŽµ¬eØ:-Ģŗ”Hm¤°ryv­įĶONÕ5 ˆ‡ļcrbmä«j„={"Ź;ŪhŻŌ“Čēüń\¾ÆijK&ŹdÖRVƆ,§ŌäšQ&N tMa3¬°JK€psҤ„•ü=uƒ­A%“ŅŽ>aڽҒĚD­#_\8.å“cAµ»œ†›ć]#Z¹N”m$†#xć#„pzļ…t[+łäŃ#X—qŚĄ`œÓæ@7|*ŗ¤ĖgŖNn \ķŖēŽ“ļbµ²‘øRp¢‹Šę’…§kĶQ4ō(7šæZµć™žĶ’N„2É(?t <Ēū9£Žą%øW=0:šŹ¶Ń5÷†Hµ;ū$¬ŽCĘN§Öš¹ŗ0u %-"(±PĄžīj¤ĖuķIį3ŚĒ}*I'ŗ¶’ŒaTņHąŌ©X #‰®%i¤cƒéŌד¹å ŲåG­'!\æā JėM:sŚAę[;.9+Įžø­«{rĒn!żēŽ$Ņfޱ%Ę©¤²škŠH%†F>œW#g¢J nŁĪW”¤o‹rŚN7BąlĒJĒ:rBÉņoläsAŖŸs­ū=—öDó²ä®2j­¢4s]“o±PšxĒŒ—sC¬½ūŒR=ÉOž3“ć¾+Ėn^ ZĄĻēäōŖ@ŠŃ"ø…‚|Ņ„<«z{Ö|ėάąZÜܞßJgDdzM„ =Üń³łO^E=ōį§ł—?cVµĘ7ž—jÕYltF}Ž͐źķØ®ä' “tĄ>•č:ŠĒ%Ŗ]Ų€&e;ŌÉ£HÉģ|­ń—Åzŏƒ5‰5IΤĪ`ŒØ;FģŽ~Ÿ~mjėuŖX¼QLÉrʑ¹ŻŽµÉYž³×æcO,ų‹ń{ĆZkK¤Yļ`. ‚6õ„)<ž8ÆÖƊ?³­Ļ†®Æt-Z nŽßäóŃ1Čqź+ĀÅGVĻōĻčå„YgҧSIVrØžvKļŠLłāßĆü2м1ćŁ.ķµŸ Ż»¬Ėžņєž£Õ½šóĘv½ =•ĀÜ\9śŒz׏4IŠŖ„·SŃäF‚FH²TŒņ:W1ć\ųÆĆߣ±ČÉ©[īk7W ä~głŅŒ˜V Ž‡Įš˜ųĖšƒY¶ń&•a©é—°\Ćö¹“ĖęØĖØö=ÅHŸšPŁĀ÷Ą_ >~ўŗ“Öüā[ 5#ošŅņh|đ;aņŸFõƳęLü÷ˆų¶6e€£V-¬UOg~Ļ•µ÷»/śŽš…Ķķ°ßlĮÜgżÓé\ļ…t¶ÕfµŌB|ŁxÕNÉWÜż’esģļ|šg‹¾Ż_„Ō9Žķ•fį‡āk„šoģŃąÆ‰Ÿžų'Äŗ|šh—>6Ómuø|ā‘]Ų¼Į^6ĮNk²žčĪuōhūļž ]’”ųmšCÄ£āēģßkyšēĮ2é/6³`#il!ž3Ąž#,¤g {׹Ój·ŚMäVZøÓ§bvol‰eOCš×A)]hĘ>ž#ā8“‡)ć±m:Ńn2·tōvóV=S@Õg¾g·ŒÜŹNŠIµŌ®¢›–Üž•ĆSCś Rč”]Ē(ŔŌķ`ś“G* PB¶ĄėÉ®vĻHąou~ÓØéé Æ5©o`ք?µÆ|7Ō>$ųzļ4{IŁ/~hq–ĄėÖ°<ĢD)Óæ 7;ĆÄü©•Ņ[ņ zsXŹ=O?›R[8㲓€F akņiYt1»«r„±ŸjŗhĘ®!Åh}©š·Fųać m7Äŗ40Üj6š*Ż[MĪĘīp{_F7Ćļ ^m4˜ķåuÉ`q§+¶Ēf²‰Ÿš÷ᦵަŅ×Kw°UÜn3ĮRz¦+źæü!šśYAyc ÷pÆĪdēŽĀ¶…äńŁō›µĻ9ūvWČņ› ąÖ֊ _E°PĦkŖģ|®30ęm\éüY¢Ė5•ŽæĶ””pkä_éVėcx²dU.øåO„i%”ņ˜™Żžg ź°Ė" dÉ ŒcڽBVøµĄaµ†@ļ\•®~ņGĢ^>š]ޟ}5äH7%‰=Mlü¾¾“ńMŒVė»ĢGFSŹž1ƒł×ŸR6gļYMU<,mŠōČõ ?†¾"ń¦­äŚ^B« ĘyÉž_•zę—z“}•¢1Oeu•X7B{có­iD謯ŒÆxkĢņõĀ@ė‚H­}µūXüQšļ†ü}ūKųĀŹßUżž¼,÷0“8Żu,ńGĢŠ©Ā•ŒæØ9é’+²’mŁŸńžiC”Õ©ˆvR“Wų¦Ōc’“5ņŌüƋĘxóā‚jZ6£*XźŗĘ”ŖÉö—Ż,©$¬PÜ€Ėł ½ć "÷E֖e,m¦,CƒŸóšĪ¤n}ĘYCŲS§E}˜„÷+ėū Ż|7š§ķwšÓ\ų«E„čŗÓ\é:„w0_3ĀDBAÓ!±‚}OÖ¼öųż|)ūžŅzUļĆx$Ó>xĪśżģm%Vū$S ЁōÅ%Fń~GÄf|M‰Āqf “ö5©µ~œŃr—Ž•¾óÅo“½Jė[šž—n!ŽK‡Q"–ĮŒ‚å_c|:š¢.–ž[‰u—#sd—Ļlżjć Ņq9‡“VGĪæ“G„ŅmZKŁÆ^ćXd/0q†:¾Õóo„uŁoā <BĄķdņķłŌMXōšņŗ‹=ʾ[޵Ę_ZāD*­·w§A\s™ķSŽ…id)£Pq“ō"¼łį^J]r@ĢęĶ;£«ÓP# “ Ļ«5š]± É禪4D°‰œ$÷ŗÆ‡® ŗf·®čW¦RÉ%ŪĄź¼ žµF/;R’īćT¾Ōõ›ł¤2Ļuy;M<Ķżē‘‰$żj']ģyóŹésūNU͵śŪµÅ]4p𓀁Čģk¦°€ŖĀ\`ść„g6ˆ&u¶‘:Č«Œś]%¼nķRU³ßŠčßN‘¾ 3£FģH#Jä,ōgŅäŌ-Dš9ȼr¼ō®˜­Bœlu¶qĪcVe˜Å>HŻ£xćnHĘkH­K4“Ū9"·{n+Ѿėž ų^ž3æ‡įnā-wT…Ü1REmĄ’}Ēo’_”J'‰›įe_:1|­«_±ś'ūC’ĮP|{ū@~Ļ7¢šeæĀŲļģņ³=„ߜ÷p€Š>Älr:ćŠü„ŠÖÓI³‡N“żÕ¬JAģ+¦R¹ł…>aųW Z…¹Ī¬Üå'æd½ü[:x'óe ”ūq^sń‹^X™¤ōGŽį” ÷”äĀ¹å¹śeF橜SškĆńoĀŁõĖäŗŹ,ī06 #‚_ųŸĆhš¾ÆįąZ+E–Kg Ł#ÆįXԧќ96hźW©F[ĘĒÅŽ—ū#YÖ4ęY#†ŽéĀoźT±#šÆ­th/¦±qYI$R†Ā+Ė«${õńŌéÆ~VÖʓÜKĘ,£ŠĒÖ“ĒŌo“¤Žgó¤`Ģ£!FŅyōéYÓg—‰Å.‡omįŻ Ā]ÄĶå>”)¤Wž˜­žxj“/Ÿp 2©ĒJģQ¾Ē‘*ėsą›ļx—≼UāÉ}m›ŁSküŸ cŒõ«ZųY„Ćk²'ŠO¹OśŅDTåcޱ©ūx­Ībūąü‘ųmµ­W“Ōį‹ Œą²’²1śW;£Ļs¦]­Œīcš,?”FõÅ(»Üģ§_”ķŚ7ˆ#•ćŠfT^»³ĻÓŚ “T.Ÿ0ĒÆZɳÖĆĢæ„'ŚŲ6iŗ¤›K5 ‚0y¤ztiö,ŖˆVسŠ’I ģ‚+jVKöW p£9Ē5Ÿ„BīUÕ–ÜdŠ ’Ščw±e$ķSÜUI˜ÜyJ”³Šu å؊āŹ—fxPöēµ`kÖ=ę£5Ā[[B2ÄōÉ< Ž”O';ŻšOŞ>ŽÓZ—įüYįK¶Q‹N»hÖąØłKģqŸC_Ø kOųVŅoiÖüwø7‰ ąŽw޽Óč|ż(ӅIUŠJRµßWmÆéŠü€ż²?gż+öqųĮįŸų?+į׋^M¶ćīŲ]*ī*žĢ;zƒ\f‰©ZÜĄ#vīqҰ­K£=ü5[<ńYŻŪij„ćmŹ{©õÉųśćX»Ó­õ?“OØyF#-¹Õ`ošÆ:q;GE¾{‚’Ę࣯ ö­{Øī`(@(Œ2ج]ŚÉóK„I,¬ķ‡889QĘ‘č:|A”`ų9ś× ć/®·fo4­ÖZ¬JTycåsī?ZĘ%ū3'DŌ.¬Ņ =aR°»AćŽ2+ø¼›%¼ņē›°dJ©÷#„UŗJ/y­ŚŻ_ZĀ—P]:!+†ĄĻ’^ŗ»xw}Żø÷§cš¬t6įŽ[Ų/4™‰X® ’ߔΠ)ćėŠüē–ęźsxbfžĖR“ŗky2øo½ĮĒläWU5©ó9¢åZ|$Ö-ußĮ¤Ż]¼šĢęUx#ŒĻüę¾ š‰§ŅÆ-ķą¹’Ó2yąkŁ •«FķÅģĻÓ?|JŅ|=”ŪVņ7†įrx×½«Iø“×į¶Ō[Ow&ä ŠōRGē9”›œ{Ÿ’µgĄ ų®óT½›J°ŗšF-ź ŽkFĻPĄqĶ~oxgAńĀO¶ƒā cŪ3 !ŗ‘8'å9éœb²å³>ļ#©ķ0é³ōįGŒ5-BņÓJ’CpŒ:ēī⾑ń/ŚtĻ j7d–źķ¢)H¹y¤?uPw$ńZō=ܰџ%ĮGž|zų%ū>|’„“O·Ņ“oݤš…¾óēŲKåļX„„AČĻ_—¬Ś}“6l!A·č+ͬڕ™ćšĒįsJ?YĀJšę”}y[WōvŗņhšļŪ `¹ųgąė-)5Ń©J<×|#fXć×­~wčztāö(ā\\.G%½v`uŗ?‘¾”’’…zõķéR>…Ń5Ņ”˜NĖmvŲ0ćüō®ĘŽåµ‹„udõb5īRZÉøˆŲō’†~%’„oÄwŗvµœšō^Y×- ö>Ż}¤x/Kń®n“›ˆ.先ÄĄīæJķ¦}-£XO„iOh żŅØ ĄwØtkæ&īPźĪU¹ę·±ćÕfÅģÆu(t`Øž/­B3ĒĢ}{ 6R¹±™n£OŻ“Ž}}Ŗż¬ķ HߎFh9e±µg«ĮzئD®Ņy8­!j¬åĀ;҃–r'¶µŻ$HŠŖ Ē=«¦HncµÄcrŽžŌÓ±™‘©Y ™Œ‰‡SžV¹)psVBĒęSļ@–Ž,ÕŅuÓõ ŽrGL꤆EŪ#£sƒČ ™15»T]>–@U‡ķ\• ÜįmĮsŪƒ¦Ń¼?ö£hn„ī[ļƒ€§ßڳ|Yąib֒Oķ+]BĶ×;# €sÜõ föik¦©/Ą«ŲWŸų£U“Rø’Ā8‚EømŻüXō ŅņÆx[S{IšÜ42 kÉ,¼=ØÉØ%üdī$8nōœM,už;µŃtŸ ˆļŅKySj”žO’Ŗ¾_óēŸQxYöZdm,O?ZĶĘĀŖO·ŁWN˜ž”Ķ>+ˉ+±—xTŻéĶe ‘#,™ĒēQėVw Mij¦ł&K~4Ȓ¹ēÓł¶R°x¶s‚øē9¬{ėYu Å#£©Ļ 4ł™›GImj¶&Q†[<Ö·V¶÷-“īā“|Ē©ėķ-o/`ŒY6/Ā"‘ÜśšŠ–{½ī-õKQē!(|Ć÷ZšĄįnĻk/ŁŌ©.‡œēzn—ń&ÄŽ [·‘吪NĘŽ“PBå4µ]bõa†{xĢ–Ūö²©Ęļ^{’ F—e¬O¤É{1•ŌĢž`åA=3ż)ņō@•i5Y®@É[ķĄr8®VńœļX'Ł»œŽÕ€ĪSU¾ŗŗm%xÕy·Ø÷Æ<»Õ[L‘į’ź8ęf'ƒ’>‚Æ#¾“ńjv+`B¬D4ŠHwĶs2ŪZEū«™ń †ēó=i3r•śXŲ@ŅBĖ2©É!pҼ®īčO0›Ģ/éÅb+:˜ę†8DŅ7Ģ 'å5Ė]Ūź3 †kHį8#+ŌsB™×4™e‰U÷›@+ҹKOµiOYČĄó“µ²Dė×Pź&śģyƜķ$œżk{ķ«©f`9õŹ“zÅķ2;™®–ņ9`#Šķķ“ĶUD‹nb‘óˆŌńłšĻ™Šęī•k=Ō‘_2y ķ*CķMŌfR‚īĘŻ$7 vīĒAWtc¹…|'­éŖņß>łKŸ-±—°¬ŻOįźŁź3kѹ‚ņäį€}Ėõ#±«ćĆ&?9Öķ®9Ćū¤sŠVl—’ŲÅ?˜Ę8ՍFŠ·c”K˫˅ó†-ŁV'Œ{ÖęŸö{+–yfu ’Ž>Ł®Påg[¦jÜ1œ`õ5©§Ķ]7˜\Cød÷³ēŌMž'¾gŅÖą”cŠŽ£µpZtéö…%ĮĆ į{֝Aæmt‘Ū¤‘( @ŚAę±5]VüŪĶē;ŗvĘ+~bd=ŗ·[¢VPńŒõīk^ĘŠ4@Ŗ˜^ēśÖs—C+„¤–ÓøiX÷?ģż+nśq.Kɐ?Ü|Œį¦•-°ayŻŽjm(‰ƒĘJ<‰Éģ+Df陷7loe„ÆÜäqMg3“łą •O¼8ä÷¬$t%YTVY Œ’:RĮ M#ȒyĮ€P…sT©doN'”xoᦣāY×÷me„%”7AėĘ¾·š‡ĆķA“{³†łęLA,Ōņ18®‡£N63Ś×ÄŽµÖ“–Ó4•{‰ļ#ä˜ńĘO88ō­ |=øŸK“VŌēŠ;—ę$] Äg5äJ£“Ō턬$šä­®®J¤g'Ž=ė×ž hķesnÓK< 0q§ÖŗhRl®{8ų›Ę’čog`ń%Ė0*ĢŲ$Zė~žĶ_ž9ź6ŃhŚléRK¶āöT+ ŽćyöÆn- „3öą/ģżšsąUōqŚi:Wž&_(‰īnuŖ:¼ˆxČõƬµĻŪ‹mÄüM„Ż-³œ|F'@ć>•Ņ•ŽIHMūoĒV7V^”wįß ļv“grØžųĒwźk·š·…<5į«XWEW×uę ÜHyÜAĘFā}éĀē,åŠ÷ĒįŪOĆ}Ø]łärķ{}ć øČĻ ķYś§Š&ń6™”ĶöĚ;xß+§–ƒ ČėĒs]NĘG›xÆSšļ†õ›94 ›ĶCSUNÅå_ß·µNž$‡SMkÅZ„Ę„d铽»`üĄ‘ļ[”¤y®µØiš”Æia#Ūiøb2ŲrO« W–E}cį›[ė YQ¼óK»p‹$÷­éŖ©œ>»ā{ ¼¾)ńN£„[i†2į®e÷cŖ…źzWēĘ?ų(äšnµį†Ś@GŽnŽBĢŹxż×å]pCSņļ[ńŸ‰¼Yw{©xĆVŸ^Õ§™„f”ä ż}8®}FA ‹zģ^Š; ÜŹ¤–ÄÆę:yøuā©FtQhó².Ų|Éē¼WyįæjŚĀ›{]'P{ĘŪ²8£ÜH'b†aHū§ą×쯢ŁĮ©ń6āśŚüĢŅElģw"Ń€ē„~„ų'įµµļ‡5Y|?q”čĮhē‘vW8‡9ā¹*ČŽ0č,ŠlŚĆSfyR×ārX†įÉč3Ś»{M×4ė{[ŻK[³”~Ó_žų‹Sѯ汿жˁ$ ?Žćµ\eØ(!źž ¾×4ķBėĆļ¶ ń4{^P~sß9§s²+CµųĮń–īßYø“šļ†ķÓƓB®|²DIŒ~5ĘüńĻ‚üSć7šīÆ$1]ÜĀćĖ›å'#ń#?ʚ} ¹ųŸįģś?ˆõ=&b™ŅIdĘsĮśW°m•Õ•‚°Q“œā¤™vG²Żč’ŲŗöŖĖmäģk6N+Īķ¢¶×ājIÄü„±ÜWžĒšŖŗ™¹X‚ÓĆv–¾z ;`ņGŸw— eĪ1ŠćŌWXė”ÓN]ĻŹųMō/jZJĀ!’)] ą“‚3Y)‘Yf8fĀšpE`wS–‡Ö_õKoéz§ĀOjE‘½Ö—„ÜAUū ö¬ «ļųo^Ó¼Q <ډō+Ō–)\•pČłcשØnĢŚ(žłæbOz/ķū,xā~­Z_ųšĀÉlõČ#᣸@åzŒOч„}IąKūY·¼u“åk9-KP>¾Õm-„WņćĻÜ|:ńĪ»ąĖµĶÄ3ÄBI#'#h>ėZ/[5”ÉĖ vc“ c¦*«īY' sĒzīƒčp²7—vāHEėĻzŁ|¦”Š®aŪ5bRAĀ5lHĘi®<Å9cžQĆ”r¢*4y'=}ĶEµä`¬ĒŽ:õ­’*%d·ņf"£ÆFć‘[ )1H6ž"»Y4uCsögžÉū`]üųĪß5k«+]'[™oō®ˆā¹_õž1Ić”5żČü9¾šĘ™£xfD@ÕXė:T xŠVɑ¼[„sŌŚēT"zŌ€hmui”c·÷w§•¦¶48Æ,.uw³n#žŃgĻŽB9Sś×–„J7?–ßų8sö(}ZŪ¶7Ć-[Fæ)aāV‰2b”Ż»/ūX(OLė_ɜūŒ‹kwŠąrŃõe>ž•(+5ē’\§«ü%ńeĘØŻxgTÕQ4kĘÖ)yɎqł õŪ߉^—9·}ĄŪ·ļüĐ{ Š”–åEYŻRhś½¦«§i4Ó偬gUT ąFł5āž5¼š¢ų³VøŃmćÓćøŪ/‘ŗŻĻāk t5»±CHÖʑ­XjחźH<Ÿ³Žr0ēóÆ³ķ„—6±\ „Ū¢Y³ŁéĀZ#šhõæK2Ē›óŪ¹#šī|a¬Śéšc¬®X Ą·R;ÖÜĒ#GƒEØÉ}'Žu‹;‘”õŲŁj¬åv(Ybły_¼irėq³¤ų“Gį»;NĶ鄍½v“^Gį?yž šßUÓÕÖ6 9Įc€|՗}X<)÷6·“H¹DEŒ…lކ¼»Z·øšf»sˆµ Ż’y f0GéŅ‚„#Å5Ÿ^źŚŽ$—mŗ6oµjO ]_ Ō"™Ł3ÓiŲČåõ»I4ŁžĻ*•9ļYK4LUW OOjBO[Ē©4Ņ2 fēi«ŠłģL‘nRҜV£g\ž3Õ4Kac‹;€7~éõ®kP¼–éX¢,ūŽ}Ł"})–-’źe#•éĶuwšńŚĒ=Ō‰ęI‚#';‡cQ7гmO˼“FŠD9U­Vµ*{HQ‘ĮS“Ķ@ĢO 4sr³ĢRGÜŃłJٵÕcš å|Ķß+JEA”džžY0üŒ/zö]7ĀRź>»¾dW‰[ęōęƒSŹ|%h·qßjBöWŠHŃ21ūÄ޽kµ…!¼µžu™įGF4>Ø$j”ŠÓÆzgˆīR=8Ü,IUĘ̚ ’źbYIyg ŠÜ1•É!”ņœÖžāéž{+™e•P€Y ļ@āY—Y±[ūm=[¶cq=…u—²jŚn™s§Ś(¹ŽYV@pbĄĮƒ¢/CŒ½Š„ŗBÓ—9ōŖVU­œĢfApTpM\ecxČĪŌ4ˆŅ{Ū›%–lõ•Č[ėQ[‚›\JaĖ Ń'r›o¾öųŹĮՏ#Žŗ3LR":䀱ŃŪ騈Œ?j­ÅœbHafoLu4=Üčŗ®”¬—!÷c•#”®W]TŃī.%Ś&RŲO-9zÓņ*›čXŃ®Öx²źźXdē·Ö·äe°ū4qFķ¹…ĄĻ4Ž˜lWŌ.¾ĖwREµ Ąō5ÉmZK;HÅ\†Ītö ŃFå;żFi…Ź@Ī‘°į{Sü+a”ʙėųƒYXĘ+‰>ÄIm‡×Ö”–óY6&ŽIe6ģrT?WĶŠŚ1čŠK¤ŻDŅ4ŠŒ8Ēj¹oŖ­ŗ%”² ¶9ōØ7§ 3Ąæj«[m+Ą^ŌtŲ¼ū‹Ėż“Gŗ0ÆĪ’ B¾+Ö„ÓģÉ6ˆY¦ĒŌ~†økHś<‡<^*žĪJ+ęģ}?į[¤š?‰< s ^]éaukx÷Fū lÄv5ū¢Įā)>#XÅ©iö÷Ś=ĪÅUŪ“#°č}Æ­x•Ū?Ō†°˜xaéé+/D¬xķC KąˆWß |C¤Ik œŠź)°a<śvćn?:üĻæŅ'ų7ń÷ZšÄ7ģžæźZrĮpł£ćÓęTÜżÆ‡Ņ«‚o3ź›Q/īa™Š¦ģŚž3“žO„GæV•†\YĮ©é׌mĀĄ¶÷4rLļčkŒńĒÄ/ŠÖ¾ šĆ]SāgŒµÆ‡Lé=ž‘y|^ŚŁT”W°ĪkĶcČĒexzīÆ'NJQŗ½¤®“]šMźyŅų—ķ2…ĒŁ$ĘŻ§9ÆgšoĆÉüIu§\CĒrsš0Ż„‘u1Š'Õ_ <-}ą ÆųZSs=”Œ.CܛÉä'·z½ćĻ =†·¦I>Ÿ*L“ bb­Ŗr¬¤r#5čSŠ9%˜.k3ö³įķ5„~Ņ_°÷Ężö†žĻӾɤ^ų~kłµÕ­Łc”ÖPŲäH®M1~>ųā}ą/…¼K¬ų5üCąII³‹^¶ˆ¼–.@ Uć=Å‡īŸ‚ų-Ćįģó9 Ÿ.„JnŸDœ£)8®žļ2ŠōGĮé«ė_õkT—U”ŚJŪlīŌķgĻU"½/ĆZ’ö›2 _äuÆ3śæ Q^ĒŖ5ØcĘ’/Zź“šJ·*3ޱLõc-7·ÖcšwÄŻkNń«Ķ£k֞H“!}JqŒŽ z×ģĖć-;įŽ§ćļų“P²ĄśµĢVņpŒAĄ óœgó§Źpb õ>QŠÓū1~²āŽGUsŻw~˜®…J2 ĄoۜūW;]=«ŲHóoŒoēkŃ|=šīŁ”’źÕ.&•ƒF¬:šŗHåÆ$ՏHŠü cø‘>£ØųZģ°ŽI­‰ūĖÜ~ļŚ·OŒtļč?ü?Ŗ}²h-,nµD1ʬĢē+ŒGłę½:0lłlŠi¶“?Rl’eŚ’įĆIqšžĆāvž-ÖdŌ|7z®$B3“A&$Ü=}«Œā&‘cØ&ć ;^š© ·Ö¬dµ9ōĖ€§§c^”hŲüŸ`qug 5DåfŗÆTn^hžÖŠ&²¹Ž2%ČõęśæĆķcIŽMVÖŽ{‹lyxSéšrŠ–7]ĻCų}®iš‘xfó\°‚’M¬wÉ*ä*AlwĒņæÄÆ iö:ńU–!žÄ]No³ģ9IbF?3PŃĒR¾¶>|ų„ąĶ;ĄŽ;±Mi.4}JÕoā øx‰l掵ŪųNęĢƝo$عSƒŒ×-H®‡Vo›CÅśWÖĻ(ånAōƇNoėz|śkŸ6I•F8Ś}«Ķ«sö¾Ę~å@ė>3階§ŚkH@KˆČćØŸJģ~ͧźšq‹O$ł0ÆŹ }½Ŗ”ŽKÄźž!ßźV~–ŅĪŚźēQœ¬VšĀ…¤™ĻEP9ÆÓŪāʍš+ž š[ąv‰¤˜üWćkK{JÖŁ•e“.æh¹i@ēqbž9=+¾“µŁųߋ9Dó–aiėžÕNR_܂”„ņŃ}čžn#×ļ|āM Q²³-“«0n5`}kō›Åh¾7š½¶­§ĒNš-ŅĒ×Ė$r?Jä”µŌżµh“<»Óī4ßĮO¦Ż„ÜĒD9ü{üwāŽ¹ūX~Ģžń†k„-ׅo-õ?"Ōåѐmäņ†ėUJ³Šiu’‡> Œøuc1˜Ll] _Õ6ÆóŃ~'Ź’jPjzWƒ|gfĮ£ūµŹ~𠓁łWÜ õūŪZx‡C¹·3‰TÉ“Œ”ś~©IX÷jU”bäŗOūXŁÜč’m¬oJ=ŻĘŸԌ6† @#ńƃ,^KOźØD‘¬ŪFßO_ēXTgŚdĻŚaįQu=ab,ˆü笛”i$“*»sŠąŖ}-8écžÕ–W,Ćf;×%veyÜ,j”æZꔭ”Ō—A-®ą„ĆƒÅu°;JŖ‘§šŸxÓŁš—Žyōó-õŗ.ųŚX‡\gœž¼ŠŁJ]ˆ×–©ĮĶ'%ēL-Ā•' w­ŪH@ ®9üéĮź:›ŃGdHcśV¼` ē5ÓOc¦06m¦Ų <µ“ā¶µ“Äŗeö™'Ł%Sћ'?\×LY±”a< ŠĪučäuuČ;s×Ņŗi¢œN‘®#>RĄŽß.\ē€kcķŗshĀ1 XM’łł|¼tśę»©œõ"rĮŽyÄ øƒž+^;$Xš7]ĢzœU6qT£„é– N ĻŁeŲJ“Č$v®+ĘśķĪ“>§¤4WZÜHÉå0Į™yć?ZērŌó«R»±ō‡üZų™/ÅKŁÖ+ Y%ń™6ŸizĮVŲĆ‘Ż_ ćōÆYżægĻžĪß4:K»§5õ»ŽXĪ$pČldsšŹ­Gk®‡å˜®&Įบž])„Z¼.£Ž×Õ}ßՙųŪe<7¾*¾dM­5ߖĄŒt8āæV¾xWƶŗ%­½šyåņĘõcŖGZł\^+–W<ŸsĘp§Öēƒ|P±²Š|S}§iöŪmŁ]ƒ‘Ķa6¹k¤Y«Ļ¹n+ŃĖżč)3črĢŹUppØß¼Ńį÷Ž;Ō|Oć½Āŗe¬²Ż]Ī>xoóŠż:ų{šŖ /NŌ3ųTxÆĄ±Ü4±Į{‘ĘŅäž!žkō[Į?¶ļ†<1šēŶŸ ž |4ŗšIi-­līåņ&@A_øTäpM[§mOÉ8ļ ŠĢy!øÓÓEŽ÷?9ōŁ<|ój:‡ƒ|?n%žI$µ†2‘ĘY‰Śøģ3ŠłæćĆ kOöGµÓ_%ŅT'|gū„jó+Ņ]o āŸ4lw5W¼±Ifr·„}}¤ģ“lČŪ¶¶G<Šõ(ČńU$ģĻg³¼ŌµŲ-ōÓ3NØTvÅ}AšĖ殩šå£šĒm :DŠS9ł£ć’Õ^„#ČĢrØN./©ōgˆü'ŒōÉ/“{ˆÆģn!–R‡q؊ü’ų§šoQ†×RмG¦BtŁHx®ĒśČ0N ·ł§/SĶĖźŖöLÅż—“SMųÆcįMhĻ%£ĘĢ/$k®x#ŠćØÆčŸö1ų'„xŪÅZļÄ?xD'ƒ|9*&%ü{RźõA/p EǶH=*[?"ńĖ‹§—äuŖŠ•¦×,}[¶Ÿ+æ‘üķĮf’lŪ_ڇöøO†žńdŚ×Ām[8ū5ަTł®¬>ž ŪžœqĮÉüÜÓ$ó × W•^w‘éų'•UĖų{ FŖ“Üy÷¼½ķ|ÕģĻ”mēw€ōx#®‘ÖdDfˆŸ˜šłæĄŗr”<šH‘ĆqĪ=kŠĖ֗?~’ųžlöšķJ?śT٧ć4Tŗq”‰#`T ܜZ].ūUŃol`a,«#„?ģ’qŸ§Z÷)=ęjņ>‹į巈„}¢öK„AX M}•ū)i:'†tézֈn¼Ag0ŽYYšĘ6ū­lĶuFGƒŠgÓ1Ži—ÜŲŁł{īøä×0žūѝIēŒÖšg“P֖8#‰CĘw¢Õ4ctźń¾8éVrĖsNāĮ”·ˆ«+ŖŒā±%Ó,µ;¤ŽÕ¾ŹŅ™cĘ~“ĪyDäum5¼5Ŗ[Łź·Č6ĻŽlö?{|Š[Ē& 72ƒĮĪx ęœVÄVöj²°ĻOz–{»«;øī!rpqœR%E"¦±«É«ŻÜ]KĮ'¢ā¼Ķ|(ŗ¦Ø!3­µ»1 Ϝ/¹®Ø­EĢŽ²jš}”ÖĘī!jē(Tq'½_Ó¼3-ŠD·e£›vF8­R±œęYž_*S-÷IZȼ±Šāą\;ŗĪqžx8ö¬ē¹ĖQÜÆ•ŒL"ŽUy˜ī*N+ŖņD‘ĘCɔø'& &dŠ\f‘^_/9<©¬Ė}J鄳\†—ø=±Hm¤‹ö»é4ڹēŖŌWÆöµ‰#F0r;PI­&§ *¤‚1ÜōŖmkP?ŁĀoUgČ=p3@†ƒØĖq6˜Ó!‹c+ų×qt Ģ1Z½°nÅØ¾UÓ­Ö+q³Ž;{VŸt<šī̼ó‘Īh1–ēc³†øYā}ŖüRĮ(9Œ–ČČĶ›“ė‹g Jó“Gtö«ĚN É ÜĒĀuĘhĖėłī-öG+µŗŒ`•‹¢ų’m?R_$`0 ƒõ^.»]rĘg’+C{ø¾ń©lā¼ĻHŅ5“óļmąx õ ”ĶåÓRźņŠßŚĒ>\0|r„sŸŅ½™a-ĆĮ5½ŲH÷mģ8čA '±ę½ŻÅڼ*Tn<`}ŚŹÓ¦±Ó& q(YW¹ É+˜^"ų‡Ąövv)m†#ĪŅ~“žÕ®/œ<²HķœI8 ÕDō]in Ófŗ•ź+Ą5=NK‹ÉĘ!ą€ ‰«Ė©Ū<7ęm,=ŖŸöl6sż¶Aę89ēŠį¾!ßéŚÖ‡s¤„²»ä¹b9ć •ńģ¶bd`DJÄ6 }Ņ;R–ĄO§ {i×ķmøveēmW‡M·ø½•ķHYYøĮ叽`O¦i×6·©k©¤Ø²qۚōÉõ(tĶiĢgɌ žx ™+ž;+Oā$¬PM-¶w«“ųÕ[‹Y£UG³ŗ·Ąß½€Ų÷ ŽF7MśķžKĆ vŗ&‡įɘŻéŚrC09,ą·v鮚&Ę.»ŖßhW {c ;™•p‹ÓžH¬ŸjW#A$Lārņż[Ž®#E‚]&īS{corRĄ§Ö¢’ēKæ½e·ˆ½Ägļ2°śV‚:‹mVā;xtš¦BIĖc…śŌwŸ ļoŻDļaœĒ"m>üśŠ.šŽ³kq6“ynœ¬Zw¼dc­B÷km!ib’XĪŠpMC€Ņ9Ż{Wšģv²N¦hnW®īs_#ų‡Äój:Į¹±HĢ|…|ē'8üŖy:Ę=bš×ˆąa§[^C²q ˆ8sļĶuŗĀÅs¢NųP‹™78掕œ¶åŽ=¶Šg=ņy$ Ą”ß5ĘŽųšŅD­g\u^„{V%( £kH…/eWF,¹ż+¢×u˜µH-“J€Ē|ē,ß|ēü)(•,įYķ–;˜d™'ĢĻoJāō{ %ūl6zpFćØ''5›¬å”‡O„&ģkLą/๕8CĒĻnõKLҌö²‹Ųq(r3Œ vؔbģ\oXźĶ4Q›YŚµČźBiŹŠŻ”yķÜG+Y—ķiAœŖ”cž[޵õ¹ķlā/ glwļYrźfŁČĪ$ø‰g[§=*…¦ŒD®-“l®rvŒn=Ķ\c`;+ '··ū»cqĮsÉ5Œśƒ-ć[øiēØč*ÄŃ=ą¶T”g ƒXr^‹=ā&IzŽzśźe±*6fžŸz×¬Æø_^ų­HoĒĶ"·i¦„I38۟JøŹĀq)¼ĢK Źzńž+®Ń“č$·‘ݰFI=óķD¦gÉ­Œ «É"½EŽ=øČłūVMćČsrī~bW²”¬mJ7Ń’čś Ę«¾hD¬7laé^Żšėįu½żŅMØCw·~Ł`åW=G½y˜Ŗé+µ *ĒÓ#Ą°i¶·6š#ø_õnŪņö,½ėe#q§YE-Ńūj®ˆ0ƽ|õZ·zn6G/ā{Ėė°i¬žŹŅE)™Ėß?ēµyÅnjml˹ød…roāµĆŠoS6ßCĀ|%ѵ­7@ų£ĘH‰ęŒHänŽż«®-ϱųķń/ć‡Ä‰ŚÓųƒÄżĻ©²8¤"8Ē”;ōÆ7r»ł“cwlčŒla*ÆbŒŽdv¶ół Ļņ¤-“īéšmŲĘSīYXßr†ln•`[KŹcÆ­D„ŃJ]ˆąŃjž,8*Ąązu¬ˆ- `bŚH'<:Ō¶MĘ t,3ŸJŻx#䘯¶ß(å«bŅŚ2!Y\ŻEĮiTd+Ų¦RĻÆ>~ĻśĒ‹¬aŌüKh~“å%Ō¤Äßē_|=ų}ąĻŪĮcą]"{½ZÖ{wóČąteģ+)K”²VŠõŲtÅ æ"æÖµ8dmщv¦z\õ#Ģj^+ń.ø—³¶:G„į•¶ŗÆ†°3ķĶgĖ}Ķ Ž=i<3©Oe”]m»”ˆŚV9Ļ'׊ź>ŗoļu&Ōā\ƒnētmĻēŪõ¬*E-ćNēĒ:¬—q˜4;Ys€zūU‘¤ų“JŅSÄ­eŸNø·k½R|°‘Wē g$éß5k(4n Ó7 JI1–ąž¤ÓäeŲ£ć„Óhwŗ]܌•mČ2»³“Ǧk×<ą]&Īm7ķ6ŠåŽrŖ@ģüWįoč15Ę©¢Ūd“‰ämĻoå^im£x{KÓµ§‚Ę#5ĘŁa” ‘ŪņžTĪx÷ˆ®.“ėIµFŅŅöŻš]~Rzą×…ųJ]7Zńʝ©3ū6x®”ļ„cŹbyŌ-ĶT»P|YšÜ³ėškZuŪG  3n,1Ō­yæ‚t{ūMfī{¹šņr<¶*śmŖ‰7Šé’mōµ¶†ÜO#0 Ļü#ø5õ>™ąM#ǟµ/]j·)46Ļ%²@ ’‹õ¬ęģ“‘ų÷āß Eį—m5a’™±É<א\¦ł%1gČü*čŌŗMuÓOIcšąd‰ “ė_”Ÿ³_įÕü;?†µkol˜-ØUX6 ō®®fLiŸ]ĀĆ|gų•jȞxH›+éŽ9¬jj8Ē”ņķįöW9±·IꏿqóF€`0?|G™ŠČ®®¹ĪåäÄč‰Ń隬žŌ“’éO/öĶ«WŚBē‘ōė_Z|L²‹Ä‰gńgL²ŌIŌ­”P[rG0\#·9”£„>§éoüöŹ—ą'ķqšOĘ7ÖPų/Ęó}Š8¤˜Ę¶ŅŖŒ?„—\‘_Ł6½„¦™Ø;یBĄ<,Fy5œÓܾsŚ>ų–¶“Eæna˜É=sڼćö ųu}®ų&MƉ ńv?Ūlš?½4;H’#ź¤dcÜ×4Ž¢lž’ą§4o„W↠Š×į’Ś[¶‰ °ŌĘ|Ųóޤäāæ"ļ`šĪźhŽBčĒå¢}(¤ō0ŖģRŽh¢VŽūœ6;T™Ć2†ų×dN9y’C¤5ÜRN*#m'5}l±ņXqŌ¤gd4ag3öǧ4×¹ä*–ÜÅnobٌ¾Z°cߞõ¢‹o „ĘąG\öśTO±Ń©õWģ]ūNė±Wķ'š·ć·‡Æ6iĖy™¬BŁÜŁHą9r;€Iō"æŅ÷Ą1о%xWCń§…/¬õ/ėöj6ĄĮ£pŹ€GäģEeQ7ö6°kvdrJŸųĪŲ?„üMa%ŗ• 5“äe] čŹĮXpyŽM›_ķū8xĒöMż¦Ō™\ČĀŌ®Y, –ģ«Źü żk·Ņ­õ@TeĪźŹO”­9u<×ć÷Ć«æ|8ŌļmVkOJ‘.¢AlØ?1įļ_x¶sNu [h”‚GÉ1ÆĢ[?6G­pו–§ģ¾ e\ā0Qŗäü¬Ÿžc”ų…£Śés6™xā(å =œ•ŒsėČÆÕŸŁ›ö y~x`ųßEh¼o§Ī–Ś\Ć+æ,†B’‚’žž5ZØ’AieMū²}OTų„ üLżµ¾,é¾6ńŠų{ĄņÅbšJ=”nÉBRŪåfļ“ģ+ņöšųA⿆ŸCńŌ:óéL=NŲ’# Ūø„g‘Śø&®īÕų{ 4!€ZŁ7ŸüĶÆ‹.!¼Óāš#ĘQė×é^„iā›;łą»²ąa؂>»Ś)Dé,īŅęę(¢$–m£šłwāßÄH-~$Zx9ұŹgĮ;É÷‡ėMµ±åc«ØFģĪw[{P!NŠ7§—éķōÆŌĻXˆ<+ᔉ¬ŅPŹ9$äēśS‰ņ˜¬^¶:RŌeńqŃ^/ōqh&óprß1Ļå^µy”ŚŽ[Ęŗ¹0é&EYń“g­wÓg:ķ»œ·Š¼g.‡įŪ߅^ī¼ņMņ<ŅF7^‘ū žŌ:'€„×’g’ŗ޹šY¹Gqq-§LŻŲŹø<ŠŃ»žä“Ę啨Qv©-Wų–«ńVō=oö³’‚O|ųß ų’Ę^šoü":ž“ēé7Z|”¬žćžYĻPĶņå} %Ÿ®µæųŪÅümeu¢|Cе³æ“øŒ£³)Ą|”€ĶqW ­t|ļƒ*W̱1Ėqr½HhūéßĻU÷kéÓ¼C4ź…ß–UĄĒį], EOzóe×Ōćd[ŌtĶ;ĚRiĶ¢ÜĘ­¾ŻķßŌ7Q^7āŸ’b|š\4ˌ‚ĒšĪS0®Ž9¼×!‰$sZ—ĢÖŗpŗ!–<ķVõ5ĪŁįb*?ĀėŪ8µ½ÕmÖžß »źŲāŗéüEugā"¦I`2Č>]¹éŸĀ·¤yU*XūKƾ Śn‡āūO!V{hZM‡ļ£'ōŖ> š*k^%·²’7•‰¢ÉŚKAēŠõ(3ÄÅcS¹÷ÆĀ’Ś+öų3Æ“¾ų‡¬żƒĖ6ņiz¼wh?ŗV7'i¢¾ō‡öņš×Äæ_x7ö…ųeā‹©”{T»³Hę¶fe $)&Z#»Źxć½H;č"ųƒį= V)ftŻé§u¶×õ÷ Ž|4šOĆ/Š:>—­_Żj’.Śm6ļ"bK*ą˜ uöÆNų™ĄÉRĘēąļÄ/ˆ3ŹEī©n•qü%†G>„žN=¹Ā“e4źpšĆMb{iōčÓŚAÜ(•Lo źB䁑ōõėÅxwln,g·kØŸy–ŽR¤-Ą£tl{TJ‘Óķ5Ōłʖw‘źöšŽ¤Ķ4M—1Īŗ?/Ņ·4Ódaќ⸪FĒ©‚i“wŠiq^ĀńĶTƒųבų«Ć±iWPźĄ²Ć‚E„WHō?Nɱ lt<ŌēÖ4ÓīķÕRę&eČÜEKū|#ń_Äj>²‚;K8[™n[l(Éo «-‘ō8Ģz£…©^[E7÷§?ńßģćūxcŚ–©&‹ćļN,¬ōü‰<©Yzķä·^1ĒZüų£ńgƾ!ZųŖžękPø˜ŽG";MĶŹD:¤S­¦‡ÉšŒ«<Ó¬„¤é’?ó=oāO€ü=mö}j÷JA,é™6p„Ø?–Mw^ ńV™g`š9‘<¢»qĘqIÜż^żŪψ4ńc®#šÖąü›[#šęō½^ĒKńmßĮÆh·śŃń„2iZLVƒäYŻpLƒźAϽLbĪLe5ģ›––>Dųog®x2’ÅüfóEāæ _=©ó2Œ’PsŪĒ’^¾Æżœ“}fĆö“ų ą««‰tŸ x£ÄVŚeś“ņ#įßmYZ„)ŹĪ֒t’ł°ķĘ”1Ó#ićĶĪŁœ Ē=+ĻØéj[o”­¼ŒP·įҼ“Uy’éåŽ|¦9éҹš:ą‹ö²A$Ŗ›%čHźk±µ•#†03ėB,īōŪ÷ŗĘģdE]”Ič+ĖõĶ-T»–Ī6ÄīXƒü9ō¦õŗ[¤B„¹`}kR U1‘ŒqŠ żž¦­°óX°±¬ƒiXą÷­¢¬”Nž ­cŒĀ©łˆļXzå“ģ!žŻT"œ6ćĪ+Z{ˆvåHŽKL 5nė}±6S ®˜ĪĮs:ŽīčĢĀŚXz«ńK|×)ahaaĆ3rk¢D×C^ŹD‚C©­&’V,ŠäńļZó]Õ OE\1vĻLčPE„8\ć:Ņ<ÜB6|9wć xóĮŸžkųƒį‰ZėKæˆå)]z22ü¤ ‘޽öĻż«>1~ÕŽštŸßĆ6ž†ī!ŸHµhU•Ą [s[ÅqUØŅq]OŹx‡€š¬ēŸTūNIEłI5gŽ×vķv~Kźv÷v±%Ā\ŖüāD;€äÕś#šŸć z%½Ÿö|j~H·ó ÉĘ1ŸLūׅ[ķ-Ģ?ˆrŊš”ŗ>0†óĆŚ[ųĀ{k9“y,Ņcåb8Ķ|gćĻź77PAkesu=Ă5Œ€Mz˜Z±² 1£e}ō/ģך½t/éæ|g¢K©iS4× ³%#‚2{zwƳōoŽ^ńõ„ŻÆ€µ]Fē¾s²€6pNÕķŅ…‘óĘ`«WQODcüQųCˆü;‰,Æķc¼@Z7Uł”ŽŖG½|…ö«­:o±xÕOĶŲ)ÕZžīIƒ†*‹ŻꇬčöŠ*ė“5¶šHófEÉ@N3ŠżRų}’”šĒÄ«?ųĻĮŸµW†üEšĪźŻfŌ-d†9nC$Ęl(åx8aĶrJ)Ÿšx„™ÖČhGNq“¶ŸÆłŸ žŲŸ ~ü&šgÄķ'CÓ-µfšżŸö{źjCE1l®gčkšbĪńÖhŽĘ钮@­µO Åy˜Ø$϶š?ˆ+ę˜Z•kéĖĖošmƖ‡a¤ųƒ\Ó¤øHŻn`#qĒāk§ŸÅVVInśŒÉ÷ ʽ{WŸcś¦‡Yc¬iśƒ¬ÖQŗlõĶ_‹P»€¾×¤ņ¹ ō£+ž¤j\ŚĒ²µĻ×?S^zŖÖŗµŃt!wœJ o} ‰dåU9ĻojŗŠQc §‘ĶiLĶ®‡Mk O€s]UŒöŚ-†”q%šŽÅ$ +tĆ Õ;}X_Cą[ ]é"»Ō49Ö+I®ŚIįa‘Žx_NÕ÷÷ģįūPčŸõć‹m/u}ģłOk»ÉlpGćĪ+hŌ8>£}RųŻńŹOŒš„w†D·Ė“Ę'ÓÖ¾*øXÓS›Č@ŠĻœ Īuģ> •X鬹aµ±ņśŠé,ąßr‘‡\Ü8Zåg\£cĘ.mįšö½ā+}<½æŚåŻpˆĒc¦qŚ“ģāņāŹŽzō ĘHжÄ3#ó×ņŖž"µX'Žé÷XÉaėQ-‡MtmL2Į {Õ׌2ł’¦”³Ž†~½¢’jŲŻŪĘŅG#/īŁ…»W#„jŗĻ‚m4čuFÓ®,žŃÜĘąØb|Ć·ē]qØpU„sļ??[2ŃŻžŠ’<šWX“·ų#&•ŖüCµĪżŠļˆ)ąä˜®[ÅšTŚÓǟ5?ƒ—ś·„|+kw “ø¼Óa’;”nF )ĪёĒqXTÅ8§×CēsžĆę“”ly”d¤½WéÜü…æš5ŸŚe¼±icŌ ’|äŹĒ«ń]–‘b‚Ä#3}„ŻĒ¼^{³ļ)ął4> ż°oŚ?‹~°Gib‹H„(^v–9®3Ćr‹;UÕ¤Œ„ŠŽ{×±‚ƒåL’=<~ożhÄE½”?ōÜB+{[GQÕ,·AhķŸ-æ„ū~”ŻIŽCl>Ļ%Ā”ĒĪM{“ć”ųUdz/ü-о Ńķ×CM9“éŚęp~µśū8Śj)²×¼s%¼Ń]ÜE WĮߤ€÷uE*'Ń:nqmŖ=ģ®’Cø2Ø\mś×¦Ś[@ß¾xч§µicĘŖĻ>ńMŚéó·ķbpéķK£Ē-ķŖ‰×Ėp3ĒzÕ;œģē5w M;ļžę !d9 ģ+" ęf€Ń°9\š£Ī‹ĆW ®jbĖ[·†å7īRć&ŗ_Ė}įŻFĀ mšWL§}åš %+›t25¢ŻĘĮ;±Ž”_ŲÜÜF.2ß0ČĒ4Œe.Å5Wm‰9  År–„qo~övöĖöu÷„ņO¦+¦ Ģߊõj®É؈”Ņm“lL£$rO?dEāKŻBīž+¬£Āž\Kƒ™ļ[9"&;GW½Õ• 6Cną©«š½„ŚEs5Ŗyė嶜ķĘMdŻĢ*±kŪŻ]Ģ1Ģņn§LW¶čńߌł>v#Ć’½)čW=¶”j¢ ¢YHĖ(x׌xĪÖŪMcŸzĮń™n6·„"&2³×ķė ģc‘ˆP{õSk¦Ēe»ķ!ļO—†yā;Ē‚²ÅhäKv5KCžāŽĄ°]„ūō4ó2OšŅW‘#S+ņOCZqjNp$‘”c©č('™œę”y¾w,wnķķY71ÉĮ…H4Ž“Õä³¶Xīa$1 y8®·M[W™C«õĮ E«ūkYćh¤aß!ĻJęī<:m|¹ıĖ'Ķ@ś]īŌ’ –wŠtv Ź%·PsĶŠ‘ܼÆ$"£)隩{&©lŠż…ŠĮ»œAƒV:­ņŚ;r.xųĻŠŌk®[FfŠÖ9‘œr8 JēūFk©$„‚‹Ų½UcžÉ½ŗ Ŗy–³ OjXƒPÓ“)vŪypNW9æ¤Ggg“EPĘ ņ(+œŲńt³ÅįÉZÜ™w’‡%Wč+Ć|:.5ĖGæ¶bNüu Š+¶wŚ~—Œ*ŲC“·N9a{‰"ø@°Nr(58’č֒ŁÜ›hc)łČĮ?Zł;[ÓR&1ʁ%ƒ“*ĪQ`sćNŅ9of†q–_—#ń犔Œ]ļY•Č äµ˜õ­ņC,ēĪVē­!ÕWSkKy×Ƀv܃ŸĪžå§xSBšĄ9™CÅČl9©ēÓ“MWEžŅóO‰(Š«©ūǜf‚e-–/m’Śå”„*D¬Tƒü8­Ż+W’ŅÕabHIźC~bÕōö€«ŁŻn%RĘøiīƊв4FäŒįŗńžEĄŹ²ńźwč‘«Ź  <ļ[÷2XŚr€<:ž1ŠŻ+ Qģ^¶’6C2 gœz×S¤āĢG$ņ qĀ©n)™4sšŠŚÜĮ$1™Cyü«†Ō/9ʓ<7süĀP>\z}h4†ē5¬čZEå»ŚÉ$°ČA,ēĒÓó‡‹ķ šĶ£éś}µŽsœŒ/åXó0hõƒ:OÄūŻ6÷K’ŹņŹ1$€( 0ģü95»ń[\:V›u ŁÉ½ŒļŹ N?„5H¤ī|ŸŠśŹKif“H‹ŒžĻj.pšEĢ-nźrCŒc”—R oŲÅz#•] Ča‘ĆŽ ¾–žĖP†hžh•¾aßź?Z‚¤ģz%—‰,g*'UĖ1Z+k Č“pl¶Kp2}éņ³S³²¶%D‘‰żä9Į«Z=ģEšGŁŪ=(øy®#ަ’‘†Ur:{ŠćÆ¢’āń&ó =ø¤gPį¼C5ŃlĄóTcÆZÕšŽ»&šŠXj ŗÅ‰s‘ÉϽ¤t¶»¶[Q“ø‘āĪÕPHĒ>•Õ6½jŅ Iä&O›ęĪZ±“6ŒzrŻŖŻ.@npy­5¹Ā2BUūTŽÄ’ėi¦X\(ŒŻ]ķܑ‚>lWŽj“Žė;HĶ 6x<持 µ¶¹ÓščU‰ąćµo¢[_“ęņѤP˜B>ōŸsqQ‹hįPąśɆK”/™ę³`aW°ę€5$՞(KHY{ć­eÅ«é׌>y ČĪp1L Wzœ9”o8qõ®fīŚįņŃĢșģ;Ņ”Ó[kt\³ķ=½M‚ŹJŁķz™-£w+H ŒžH5”„E–ِ*ć<’¬DŃ_Ræ†Ń†åvÉÉ¢ŪWņC"øN7Zc1ēŌ­X;©żįnA=+Ź’āeŸĶ‘GM½‡į\՝·7£n}š›Ć÷×÷˧Kq•“I¼ĪżcŪß5ö$ŸĀ²,6ó¤»×?hW0#’®kē1r»g³Fö žŚž×K$ņ0$;¼ŪÄ^5Gws<rp>aó·`;W-ČŽŚXńO|M×uh,Žo9Qw;I?•|ö²jחWF{©„žrNpq^ö•‘Sō7ög’‚}üHų“5ŸŠ¾"E‚¼öāC-āģiīu>ÕśŻąļƒŽųU¢iŚGĮ-ĻLÕDB 5yÉĪŁūŹŻ‡µz1‰Ė;įco‡žĻwāoģÆėrFVXäq&['©ĮĶgé¶>'ń fśžÖ=3Dv1ĒkæXÉž•ÓN',Ž“ų2ÓÚb'‡4čćfō†a÷2y Ö¼Z'‡­tóØj³ŚźŚ“ ę[źĻ<ūc„ncĶÜĒū?ü&Ō5‹‹Ø“[ų'ĆŚÅ…b™ūŹqōķŽ²o5½oX‹J𦚶z6ūD¬¼æŲzS<0-›VÕ-µ}e(W܃×1Y÷Éā(Æf½»]*…An3ōĒ>“ņėżCWšĘīŪCAu-²rĪŲÜæSÜ×Ͼ/|7ų_„&³ā­F8üVˆY­#LžĆŪÆ5ŃJ ~I|{ż“>(üZøm'Cń֏į՘¹,΃²N•ń%ÕåÕču}<·×o!vvą“ō®čĘĀ‘rŅHĮ¹ČćUģ%œ‘Ūš£Š®ļĻåØ#³Tķę«ćŸØk9œäŠūc;ĄFõĒj‘fp…ƒ~ļަ*ģžt6$ŻČI-ש«ØWełI­9PŌ®kĮh×p@ČĻz铽Y§25¹`£@č=kjqOsŻ>|ńGÄ_Ć„i¶8[¬Ņ”¹ėĻ~+ōCįÆģĒ ųGXŃō;;¼_āiV8ńgū¤Ļ5ŒźXŻÅ%”ķž8š®¹įÖ]7Y²›GD-'ٚ=ø?ģJ¹įk-^āĢ&™au –T\],xņAļŸŅ¹ł™Ž×Äņx;Āzdö3µĪæ{*†ūL’±ż6JņĶ:ŲźZ]ž Śœ6vĄo‰Jœæ·„>f·*.Ē āH,mÖŚélŠ^ļ9?}½æĀŖé-åĆ^ź†į÷gåæµDäuBm<ųļĀÓhšŁŻÕӓóņ>•£ą’KāO _čz¬‘Ū91W<*Ÿ½Ž™5ōµ"–Ē…·'Š<;¤Ųkl’1yd§1“s׌ń†kŻNXŅI5E>D^\cs(<ʹd͹Ž×|EcÕa’ŚMŪH~ Ō’¼ÆŽÅįØōfŗ67ņ˜ķļɎ޽ź =į|Ž)ų_Æ[x+Ę>$Į"NŅĢxY‡Eēµa~Ń^8×.ƅ¼žŒŁ£®ļ³’ ^1‘ÜÓ°XöŁ–ėLŃt}gÅצė@ŠlmĢĘYF3ĒŻQõĶvšŸķ”£WMÓü1e··2¬mŗL±»Ū#šmė”¤Ü`ńæÄy5{ ift’xp?…|óāøķu])ŠĘóJä©ē֑ĶģĻ  Ž™'ŚļDzm¢°Yu}k诀žŃü]©jwvz”—RXĀ'ņg<š}Ŗć#HŞ©ć][QŌZā.Ę `8FF-“ē‘T~ųÖ’JńEØż®äŻ@č>Ońüiøé”Ŗ‚>„‡[Ó¼\ņi^!‚'…¹FŁ’Ž:ū×Ģæ¼WuąĖŪ/$S :VgŽDˆfĆÓ¦?ĻzĪʑŠŲł×^ų›q©ų~ēH“µė&ՒR‡•'æŅ¼«M‡YŠÆ/um:š2ó#°øīM8­Jv>ĄYīüsšćĀž!Šć”źqDÉvv' ņč8ü+Ā×ÅķeØß {ˆ'ö22eoĘ®1±„ڱęö7ž$_j÷±Ia;E–WžøbOÆ5ö6“į]KūkCm>źŻœĶ‚N/«0ē:Œ_t}oā.›”M§5¾”+щ>V*#ņķ]ƒ©i1ģ Hģ9xņHęg„ĒMųG拹‡¾)Ōtż+L½Ō€‰“ ©ŽOŸ„~xč2Ūė¾9gÓąš;[Ū§™äe .H'ÆnMfōa~Ēeń_Ņü«j÷BŹŹMŽ )<ž\Ѿ,’Ā)u”Ei<XĪ|²@ĄōĮż*čO)ńĒķ5š×Ä×[W™ę]źO“&ć““óņ°ėōƕe‰īvĖ ŁčŠŖqcØĶ’©ˆŪŗ Wås¼w½?įߊ¦šæˆ¢æŽłģķ™rØękŖ;©ÕF„䯄Ź]ÄѦĘĻĄē’­]ŚJY\²ŖžJ™DW±“u¢Ųėš†™ØÆŸkqFĄō'n}³ŠüĆń§…ukz¶•ŖY}Žā+‡Ŗ'ŹcÉŚF=«•£HHä–G!”-2Gõ÷Ąéwśn­šĆZžKXõ}Œ“›Ä’BąōēłR7‡cŹ|]c©xc\]CL/¤ųCŌhŻ vø9ü:žū’ąžß“Ż—ķ…ū!|8ń÷ö‚ÜųæIµžĪ× w̱ʘRXuĄo£ÕK—‘§¹©ö.‡Ø3[²Ł"īY`žÕö;_Zźl:µ¼I:…'c ‚Įš$WDó½’ż,~.x7ā7ĻOKŪõ“[š¼ÆZ‚ŪöÜ扟éö“Ü[ź1Åo©ŁĶ%¶” yS!*Ƒȕ-G=Hž}YCHŒ"vĆÆłÅU—;™SēĆq^Ģćrõ…Ē•Ø ļä¶+›žāc3Œ©‹æØ ž[L˜(pœsRģHe°ēėZ@#&_·XęĖ1cꬖć Įą·Z®SŖœ‡ÜHf“{I6m”n\ŽMc_šnGķƏ| ā/ŲĻĒ7?cń…7^ų^Iī{»6bL`p„€ćŒ0žķLbŚq_Վ„Ļé’S€_+^mą®¤røÆ-Öģ>ÓęY’cŚwFO­yµMć.‡Į¼9o¦x®?¶hW8¶Ō|„ĮdaĻęzśūWĀ’“—ĀĻüTųk®ųbĪŽŪūrĆĢžŽI×--»J܎æst°¦ć›āŸĆcįēÄ?ųv÷Nš×MIYģ؟–DÉäWš\FŠ•Hoq]Ōe{6rT]ĢÅc‘e 9Čć?ZU‰„;Ż[$ąs]9Jr—ŠEYĖžƒµ9—i>Q;HėŽEjO7BkwŲŹ’ĻŠ`u§Ļ#~š"ż:Š8»•ć’h® 2a!ż}©­;y͵0Į€Ī:š i›üŠŖĘљ}ĻS_£ŸšJļŚ#PżæiŻA“»M?Ā^"œ5Ó „+e’,åü¤ĮóQŹwSŌžü¾xŽóÄQŪx­µ}:ךākgćģ‚šŲoį p@ōÆ¢ŒQCŅ ūB>ŁŖ× HXé‹.Ü[ŲÉoŒ³“¹ó­$”qĪÆēŪž ½ūĻń§į—†’jŅĶużÜčŽ&Šhųū1oŻÜ+6•sĻlH=+¢ł‘üOŹ5]1īō«ū9Vö L2ŖprzńĪŗŸ‡¾,Ō|7«­ »- Äl—1–’X„ŽŽ•°œĪÆKѼß[ėv¦›iCĒ'µ{shŚģėuut儘ŚOØ5”¢/i©ÄųīŚ÷ƖˆoŅX.  öā“įW5ļ‡śģ:ģ šX¤”-Ģa2²BxŚ@ō§e3ō‹Ań©»¶b{+€p~īyēŽ½ kōŠ,CĒŌWL‡£c­k2e…IČ8n+¼¶ŠšM8B–Č£”|r «$㯠¼ŅRęÖ)Ė8CÖø™|Upņ¼(UłwÖčG6Ÿ—²ÜŲŖ¤9ˁԊÜ{4ņā»±…7(ä±äŠO„Éqpc@P°;¹5wÄ÷W[³uēļp“ęõōÓŪGk¹œ²})-mšķĘNhö ō÷(ĮŠ)ėW“„#ΚPw¹?ć@… Ē¾ņ6x„¤äcnA5ƒā}>mBžįf€ŚŹņ8Ū„6ĻPøŃš'%ēd+–ēŠŃ›ėĀą†ĻėLØīR×Y$f‹  ʍIww–S„'#éHŃĢŁ ĮI;6ę °s^‹įxōĶOG†;{=·;BāE*IϽL¹ać->Ń5YfŠ…ü·Ļ@@õük*ņļūrŽŅX%…„ą?xS(åµ]>(;H¾p%JŽÕ$6,Ö°;Ęk–Čķ@Z|ń2nFŽŖĄc= lkz\“ZĒ}œD#õ¤#„$24SGęädzU붊ŚÅž 1vqĄ?J¹šņIµ z .|„Ӗ $ffŪ—€>ø?„zo‹¼k{lńGf­ke"œ„)Ēš Œ{žs„źnø’Y&R¤änķSŻÉq Ė%“FūĖ“ĆPh£b#«ŽÉg4w™ä_”'ōę¹}KLß.٭䓹b•Ę((Ö³»h’ I',>éÉéļZ—šdR°H‚\JĄ;ÕD鉛wążJŌ[ėśCø¹„00n“ަ½kĄŽ ½Ō4ėuńL0ZެmŸ› ņƒĻҵęGDcs\ńZÉzckpp:ןx’KķkĢÕ«ŗü¢5ą††ąĪNĒUЉuKfŠRÅ3ŽG½z"ŪŚjŚlŠĒ»k&޼óYJ6&ÅšéµŃ(„’>6|Ć%Ŗļ„ü-tš]ķŒó˜¦ø%Idjē#„I¤#Ōąuæ_ųCV·¶•›ęq†ĪķĄ÷Č®ē[ŗxlln-ö³± yéKCh£–[Ė»‹†b§`?8#„-ݳ:Ēq·åSGjNhӛRX5W™62ŗĘsV4ę·’Ģwm<õć5hµ¹ÜŲų‚EŒŗLc‘Xa}Edėž7æøŠ[[+··‘_ļ’)htĮ:ˆ/īŠ æ,Ø$1ļV4iā·½ö›<ĄŠ°»sÖ³žĘń‰»ńÄz•Ÿ†f†Ń^MFFXęˆVˆć#łžB¼CĮžŗŌµv²šīœ…ŹÉ3F€ `bsŌ׋Ž––GöĒŃ3ƒ½¤q9¼­æ³]ÖŅ—ßx–|Uįm7ÄÖĀĖZ·[äC… pPB:w¬}ēxZūO±Ei“‹f gŖ0ć žąĪGö¼r®i&ŗ|xCöžƒNš„ēĆ]+į‹é÷vf+NfūĢ?ˆcœ÷•󒈝<`÷—z™7s—ł³š#±ģå¹G³“ŸVpļĆöš¬z(Ö4ó_Äd²~ŅØĻB8ģxöÆ>øŠZÖķ™f_øEJ'ŗ•¢]±×Æ“żN93yn­;Ÿé_|U»ÖēųĮŖėŸf[jZ¤IgęǰąœTAj|Wć=•/4zåõõ׆īgŃɌŽĀ›J·N+õ³ą…Ō!ų}įm^;ŒÉä¬r@O0žx­éĄł˜īdš>µŠü5”išOöµÄé-ō ķŒcr^ Æųź?ĻŖü6Š®.mīyy”§<§5ŪŠĆTrzžić ‡~%ĆŽ;WnX­•Ė©ŚéÓ$žõī:ēĆŪ]VŅ;ķ1­–åć#»&FA«GŠR—^‡ÕŸæm_|'š<~'K{Ŗü5iR&Ō 'ķšß‘,yĪōRŪķÅ~TĮk~|0±ųĶū1žÕ_~ é?,öųqr|MšĆO2H&PŅF#’ž`ĮżZõ? é/ ˆńŸImäHėĒ’Ø×«AŸ1˜Ī×=Š]1kvQ_-®¤–óLź#cņqŲõÆÆæh‚k¬Į>>ų÷I“†]{Ā §q*¦[)Y£˜1q¾3ß”śŅ‘ł_g5p50R¤ž:šƒóRRN’ŸŖGćļÅ]µ_…Šk֊[PŅõ1+[©łšĻøąžuÉų2ī)ćUŻm™äõ5ĒR'č8¶‘ģšvåČēŚÆĀ.©Ēqfn-™ó’¹½Ė1©hĢ߈¾EŠm‘bŒ\FČ  uÆ+Õ¾3\|µßšļ[K?ł³Ęv›waƒĻКĪU,}ö]N5įČõLųSĘ·Ž*æµ»ńUö±{®^ź7fćP¾ž]ņ1<““õĢč7ˆ.ķœ"ͱÖDśƒœž•Į:Ÿc…ĀFœT ¬–‡čV­ĆńOĆ^}ģVĖ*¢Ć2Æ m…yˆ|}į‰ä’3ĮÕyĄŖŒQ֕“f‡o“­G^šÅƉõ6Óō)oa†āļnļ²£6ŅÄz ×ķÆĮĻŁ_Ąæ ¾=ü<ųāy|5ÆčÖóÄt«Ł‘Lb)×aH ƒĮ·„u?ńӍkåX(įč/ć©Ęż­oĶ6~^’ĮgžZ|.ż¹¼ ń_Ā> mĀ^$²‹HŌ/"‘|‹ėÄĖ,ø!‚į9ė·ß'ę}nś ČmÆ.o%Óͳ‰¬ībm²Y8;•ćn ƒĪiJV;¼ĒĻĆXyWw’R‹łJI~>ė×iߌć‡ģõyšļāĘWńƁļāŽÉćū q:!ó&sd…É<ēæZüŽų·”źŽ ×õ ėÖ’ŪŽŪH¬½²‡•ż+ÕŌū_83-ČUl6YHT››Kk“–‹¢²JĖAš&æq=¬bŪ@5ŃĮ+Ė"ɏ˜8® Œż~ƒŗ&Õåo°˜˜•ó‚G吟$,…]ǹ„+‘’*iĖåŹXņĮö®Ŗ!?ŁćfŪ‚Ēī*#.ęˆļō[YÖÄjĀĘ<€}½(³—QÓ.$“Š5»Qø+Ckm„yIÜŁćėN@ŹąU‰Å|¶gWį©­a¼Œ^Ānm—ļ&qø}k£7p“ģ-Ō¢äŒį¼6ŌŌ¹o3‰>UV_ˆ™¦³ø&)‘qÕC[ņ#)#ššŪł“ ‘ˆaŠžõčmd²bi°č§…'­Uˆ-¼s+[ı'] UŪė?µ[£ĒņÜ(ŹūÖ“öŠåÅĄˆŹœ7Ø®š;„eĪŅ~B·Œ­£"qź^KØI9«š^«Hl֗<ÜD–ßRhł“lČQ€=sÖØų“PŠĻĀ÷֓ g†å£„—PÅX°éɃŠ{Ÿ7ŽVMžó’ųżœ>|jų‡ńJżØ4 ž­*ŪĶ‚iīLĀģe!Ą³Ļ\Wš]ü#š_ĆÆųēJųuq5’€mµ‰’±®–/lå<0{ÓöQI3ńZ™Ö1ēup­~įS‹Nßnīśõŗ¶-ęSų×w¦^xCP²½š+iŒi,+‘µ˜sČÆ•~ųūJ×+ŠžÉi™0Ź8WÉ›éŒńU#£Vnœ¬{/ķqńŽ=ögoü.×tKŸÜ^i&°—;­?ˆ‘€sĻCč}ėógöCų’©ü(ń—‡±?īš"øĀœČÖØĖsĀōGÓå”ķŚžłėZWvČ^9$@§9Ē|Šåczp=KĆsż¶Ż‰ źŠCdąp§ü+ĪMȋPø2…gó€§¶xż+īn޲ŹōHŠ@TĒoZź¬u wSå¼ĒŹNE+ō"¢¹ó׋®× ߙ–ĮČ÷üqZŲĪQ±‹į™e†ŽŽÜń*ąż+ —R·…ĆøŽ$čKõ4Õ÷0”{ ¾Ö“Ćn®·h=W‘YŚo‹ōėi¾Ļ<ѳ³…VĻ$śVń™Ē\ƒāĶŽ—ć ›=^sr²Ę-®CŽĄõÅy‚¼kā/^YY½½Ü¶,<‚ŃTݽˆÆBSä3 J÷>«ƒĘŚ=¾™m­Kéļ°8]߅w’>6x‹Āž8Óķ|7§ßėš#‚5Ö’!īä ^½Ÿ1ˆ©k¦~µžČ?³Ļ†~%üHŌ|[ˆ­ü-šśźÓķ:”ė/üzø?ź—<+O'°'­yĒķßūYü&šŒīžžĢš>um“Ōµč' Ī9yŗäūÖó’ŠŌüÖ9†#ÄĖéÆŻS4ߟEēÓOϧä[E{Ø]ź7¬^ņźC,’HŁ$ŸS\ö½„DĻ„sĒŹkĆÆ#öČÓI%Ų熆é¾@ĶÓ޵Mmb¶3|Ģ„ø®hīsÕÜųöбÓļ”}Em Žiœ·‹lĮó-&tuS•aڼŚ8™wećīęØę›čiųpł:˜—$0Ļn•źz•Ō:ąƒķJPmÜĒ8 Č«±'‡nN‚žŁœ Ąä'’Z»ÄÖVę·ž A^8ÅsS€¾Ž7økrķd0#¾*+€e£yįz[£1÷:Ķ–“4–P¾ĢėėļŠóéWsłģsž˜4ĢZf†ØŚ[‚ZE™ĮĮē„mE­ģs¤7%U!нRČ’č`čŽŌ“‹‹XjęUv±£śVĘ„ØjZTÆs$¢h°?uŽ3뚾A(Ųæį’ZĪnR’ ¾ vojņź·WĶǘ]œ°ł3ĻćC‘æ‡n¤¾³½–H pvšM{Ż„µŒzeŗßińļL0ēęõ›Dæ7Ÿ¼[ųĘōÆ*Ÿķ6ŒÖ!EĪFŚFr:#ó`Œ³~ų’xńQŹ»vĒ•G ĻēA™ŸåĒ9ßåųō©ķ ÆG¹qĻū&€ļMŲąż 1ĻŻö«VWsĀZxPĒs$$R† ĪNŹkNĘŅ[°cIĆ`g$õ V!mē¢`ćpķ[×4ūėŁ“·)vīI὿ϭhųN]2āŽv’'ą ¤ųÖ}ĆC †ff焸Y˜ü¦²ŁĶPŸĢó± *¹8ęƒ9-Mk VeŽ+[SšmµÄIy$‚Īsź(cÜᮓ+[Y„°ßeĮĘĆŽŗ-+ ČdMźŅ)ĮSÜzŠ#²žHą…g1Ę cų…a‡³•ū.;`Šē%P ps@&XHķŻ@‘"ÜÄóŒb¹ Cˆ· uo0p*§Š Nw[³ū>Ÿ8®öF{׏ž"šę”uq%ŃP‹w Ų-ųP óĶRŹĶCÄń®vŪ»šåģŪģģPĪσŒ7G„Dā4?Tžę{VžĻ —# eøc\Å­Ö³n±™ˆK“9!zVEĘ7=oŸo„Qé·Ö‡·ĢVČ?‡ē[Zߎn­męŸM&El•rT`PL”cĪüEŖĻā+õ-.Ō[ĢęMå|ŽbśVü0Ņ-¬w²Ć F"DŽ8Ē”8v= cG¼ņ-&··Žįŗ ל|FšT·bŌ ø‰ŽGĢćŖā8¦sß“Įe~VöĘŽČP9'Ö½‹[š~wäCåĀdWó9ĒćZ–‘ĆMKÄ~ – l“ň,#xˆŒä‘ļ^35ūh:õ߇¼K;Ų"<›†L¬øéĒoJŹKXį»…'„‚ņr$Ä X[KMńĆ*‰ē č~“„°(ŲńĶJBš½ĪónqųW āØ`æ0µŌ`‘ŒpÅ`\QOH¼>ŒÉ”ζ̓½Bņߍv6:õ¶£¤\EØYXÜĪ<Æ.0\qžG<Š[‡cęĻxŠxĪi.o–Žģ¢ ĄĻ_ŌU‰7×^%ńMēüKLJpĀl„qĘ=iI‹’Ę·‡5vÖ|/S·[?³ ˆļé]§¤XŽ]-…€óB…@sÉjĆ%lm&•šFˆL„>8śW›ųŪSxEøŃŻžÜą‡ÖėČE]ęžü„£–`X[ õÆhƒĆ,£˜«ł|Q01ōŪ;«Ū×¶ævuˆü®7/ø®ŪRҬNA²\vŪŽ•Ķ)ö2”O<‡Ć€Ėv’HÄģŽ§©'ҹ{­8Į8†W.ćœćīūV|ÅĮhliN4šÉ,’ķc¹[=*¦­xžß Ųø]ųĻ҃HīeĮŖŽÉt²< ēļdu5×YÉpeŽąÉ˜Łzf‚ī­”³ØĮ±ܱ6Ā7ĶpvģÖņ“/:¹SŌš[ރ"Õꔇze¦£­ah—×7w³„i¼„ĆF —.†¬³Ąó:ģ.ŁēfŅŁ%‘CI`œd¹AE]CģjĘq3ߎµN .ÕfĄE.8;s“@’éńĒp.wI»JŸģ“‚6w“›°#‰B4FE@G~¦F–Gó7ș ‘ڲnąVā~a°ŸĢÖĖXļµāP Žõ s7ыn&&Iyłˆā±ģ-šņķQK3³lSŽ•.H„ĖK„[Į<é+fpüœs]>‡įĆŖŻ,[›żŁĀFyojąÄŌŅĒeō>ĻšV•”xGĆķʕt“Gīiś£ž‡?•?Ä’ü?ˆRĪH pæ*—åˆā¼eĢĻZ’ōŹä<›Wń‰k}m©ź;dՁ1Ęs÷ź3ųV6­ćļ A¦_k>*ֆ™iŹ"7cŠwéBCó öˆż¼Ģ«uįχ0ŲN<±—QƔ:Aå«ņ§Å^/×üYŖ\ź:ö©yŖK8>išRēžq^v܆Žj[Ÿ‘DnQq·ŠVlžb *ęfģjÜĀOR'g*L‹†Č4Ü£¾×br8āƒ'>ıĘå]2¹S‘ĒZ°»Ž29ļšĮībö'1ļ;@›ö\ ƒqjq•Œ ¶V… ܬÄĄ­ż?Jš`ĪĒÉN»[Ö«œiŲōÆ xJē[ŗ“·Ņa÷®žXDBĆw¦GJūæĄ?²mÜs“¾6—ū'}·š±R\ŗqĪMsTŽŗgŪ>ųw&‘ąŃqįm2ĻLŃmåņfø‰7ŒŒŽųś †Łn¼8÷rųjö[½niAK†~aocŲ äēW±ŗź?¼4:‡ö@¼€B v3±”ā}^=vÖźĒĀV—z{?› ”# q\Ō6 į‹HeÕu$¾¼u3yHŸź½Tų®YĖ”Ómžmć=õ­i,mV”»É„õč?y§‡_DŠKk8’Õ‘ž­{ī]›„k3\ńLŽū;L¶Ø9=zÕxóS:©¢Ū5żģTɌścŠtØ^gdbzЇįAy«Ö`S£ŽĀѐ?…ČĄl×ÉžĢķ¤ųĪ}#C¾–śö9Ł-ŻQN§Ś ˱é6~ ń%‹Mizf¹¹@@Č9qŅ šU³čZ؇ÄI=ż¬näy– ō…Z•ĢœO ųÅ”jš“¤Ś}½Ēö[14Rą®?Łī+™ų9ń^o„·Zķ¹ž÷O]…|׌‘0#”=Ąō«Amؾkz]ÜŚŽ½.Ŗiš’sņ¬¤ä°śäW«ü6šU–±ćkķjźī3e҇ĘūšÕK@”¬wš—‰ē“ų‰œ7wB‚¦ćnķøą~ƒłWńO_k:Ųę‘n"bņ4}ö4ÜHCŌ~Aą­vÄÉyoØYßĮ‘…ÉUFÓŠõÆ?ցiā{A}= Ń’uYøĒš ćŸĀƒŚ¤žšÖ™į éŗĶ¾‘ c#Ϭ{³g ńŽü×Å<į=voŚĆ¦i·Q3ÄŖ3™;;žØ ń_ YŪZB.n Üćē…{·ĀĻXĮād‹_WŌ¬³¤DķĒ±ÅŽU±OÄ^EÖćń•Õ¤o<3™Qödķ÷õ®Ļ^ń…•Ę€o“©<ʘīe#?×)¶LbĻ-¼ųƒŖéļo§JŸč×dD­' õĻå^­į]2 ±½˜:;ćiĒ#=ė“4ž$ųV×ė–±ė·)ŖiWs/ĢŹ8ōƛ3ž÷Ɛi7=‰…s“( gŪÖ¾½·/eH×ø­›ūćœ31n|ĖūFxU®ōsāĖ;iļ5 wføŻ ”ö„qMf|Oz¦Ū WƒÓ§²Õõ{ WB“ČŌaøŠT~ź ŸŹ é§3ķO‹ö֞*šī‡ńŹõ ū`·ī°ąpŚ{s_Įæl„żœ’i½GįG/|1ń‰K¤gŪ7€awöłƒüiĮ«Ł1•ĻģÆV°ū.øĘŠ™¬Š‡†\}ō<‚ćüėŽ¾ų®ŚxļōĘ`這ž*ęk”w*|nųqmćÆŽŚEoö;n¬% †G’÷ü+’ĮTdŁ~üG»ųÕ¤iŗt>ńeɵæŽ"Xźqä8aŪ~ ®xé!4~*ŻŁ&’ÕL>ėqŌW;<ņn8ž•ŪLꔣź/mu4L£c® aŽØŻČ«ĶibՈąEX•7ļēę•bEŚ€dd÷Ķn„…ĢWÉV*šYX)u=ĒjI›Ah^\y©¹wóa^ßš懌’f__ ><ųķģ5-Pļ|¼“ZXŪŠn••õ6¦¦7ĮŒŽż”>ų恵dÕ<#ā]6+ø%Qƒ»ånølž¹«Æ¼¶óą`K<ń§=H®DlŁ“7|LmīįežŽPå7STõź(lč§#ū’‚?žÕ6擟ĮWąĻŒµ™¬õ6H“łD“-Ž”ƒ čż·£ßė_џ’_x“Ā!Õ ’i…“jŽDŚė4|#цü+’®ēDesŲ­lć‘^sµ[̃żž:T>"Ń<;ńĆz߃|S£C«x_\“—MŌ-„MÉ*:•!‡ćż{W—AŸē]’9ż’¼Eū/~Ńž5šĘ˜ŠéVNg¶ž/’COr|‰±Ł€;Hõæ6äGW·»>_˜ˆBķėƒźiÅŻÕųgUžyH_9.:*ö&¾”š#”ZčśÓČ»s‚vž&›ˆŒæŠ–÷śl7QÜŻO?˜¢ŸĖšē?…xÕ4‰Ö9ņŲc“ŽÄńłUF#±śū+›Ÿiž ‡Z˜}¢ŁDöN¬?x¹)‰WÖwoūĘ@»€ļŲÖÉHī ŗ2YĆq°5ڜńėļW§Į}irmä€\(Ė+67Z³k„­Õ”–­&œ v ŅÅH¼1ö(Ł2XīĪXē5BśĘźĪ9ĀVQŒQėA¬#Ō­c*ĀĆĪMŹx>Ō°hŃÜ]Ģč­"“ž½Ø:”±NėH¼³¼Yb."vįN=+Żü5¤+YC,ČÆV8ĮõźkĘÅL’N¾‹łd0ü)NŖŽ¬§'ņ—'å^³ŃuOA©ßif&½ $»qĮ g_3’hA{ⓦ¼ä_!ŚéށäJšdŸCśg ‘ß®–ńĻč¾våOjō»]Bh-ĘŃĘŲ±ē1“ZÅ(™ÆxņĻÄ’ <'į›ČŽMJ»–H®p6“mŌ:ó›h ‘•¤„\޵·6šŽ„bĶö™¤Ml’čq¤ pĖĮZüģż¦®uOkÖ¤æŁ^Źö'pÉĒ‚üsWM«Ÿžqę¼2čwŚN™ŖųžūBńf„qml—¶Žt€ü«! ‚{šOć_”Ÿ³·Å}'Ć>†gd‚Y¼Ō»có”\ü€ž'­t«ša¤łģ}­©iZÅ÷‚o|S¤M%źYņĆł•OÅ|•”ų“‹Ś£,qŲZĻ„k™ Ry­j¶>‡ ;­ā] Āßõ?xoU“ż"Ć+erßźŌ’HŚóßų·āĀļh’ |~–wŗd¬Éc|¼—d~˜Ŗ=ŗ2ŗ±ō׋“8ī­ķuĖP›€š>š÷ÆĶÆų(4©mą}–OĒ£éśöųQ!ijHńüäąsĮėõ®j²:Ż(Ԍ\µåiÆT|ŃšūĶWZ-¬*ŅŪƀ£+¢¾’·Ń-ļlwĄŽh 0Ž™õÆ6tϼĮāŸ.‡·|Ń<2śPŠ>!x‚öĘ(ˊhŌ9_”Į?•jüDųgšŖĒĮwļšļĘ·:¹p,Æbɑ 8!»ŌFńX¹ō>•?°gŌµĮIso Źō$œWĢZå䗖÷WŃÜłĻ™?zb¤ōēµsŹ6'+™Ś>čŻp±Éo ō®ŖßtW%łd}ß„tĘ]žÅ=u=Ć6Q\ƾb˜|łkõą=¶‘ńoö]ńĀYYu"ŹļBhœm6ņ¹śœē¶+CłūĒ|4§’!šĘÆhĶsn·:tČ[˜®"Ź’żM|Ńį—ž×Qx]"‹k” œō8żqXÉj~Ɔ«³>‘Ń%’T)wČõöGĀļj:ĢV—omöNå¾Dąu$ū“ųW3V=Ŗyƒ„nd~Õ֟ ~hZĪ•żŖž.ńä–éå‹@6eŽ nyĮ’9ÆĮ-Śų‡Qži$˜M‡bOŽ5Ɉ?bšĘ¬ŖŅ©Z®×I~§¬|.¼ÓSķz¹„Ū_é÷6åUr¾ėčkĻž"ü)ŗš\šųŪĆ_h½š‰“ʹĶlē”ĘzJįęč~©;nFų/ć+]+T™Æau“žłŗzśžżb¹‚Īš¬sYķÜ äk^s‘»žāĒ„_5ģh“č·'æĀÕśYū!üd¶ų•į]Göwų|æŪÅ¼ß ^ČNāPdG»±éųóZĮ»Ÿ–ųĮߌ9T¾*^ś’·oü•»yŲńoų(ݦ»ć/ŁĘ[j s⯠źQ^Z`c)Śģ°QĒmÕłŁemi­i^“s$‹|‘’y;ś U.‘š¾Õö9Dé'’/ž“ėļ x~ŪAҬ“}>¬čAōƚ’iėI·e̊‹øłOń§ĢA»ˆšO<ąūUĻ1B…š+jo ī”f½ÅØŻ/ń/cU4żB0’f˜ˆē¤ō „±·ÄM ˆœ ՅcŠTyŪ‘œzUłĶKĖė•žĘ Ŝ)<ʋ› õm.óOøÓŚčŹ”¢SĘŁOéQf|¶fżÖŸSŗšN£«ų'B—ˆ“ģŗ…Ä+Ā!ą•f¤Õ¾!ŲĻ¢eī VŒ¹ń×„L唚ĮĘRrGēoÄļźž3ń”iiu'ö©±Īe#éÓÓš¬ ‹:U’)e·›»)ę¹gZÅ’f§[8|T³¼šwŒ-ē²’ķ4ĖĻ2P¬6Ä\ņÄÜ×ؓKѲˆŁ·>ÓČāˆÕ¹ó5ņĪY;Q|ųł­|0ń.¤kvÓkž Ÿ†Ć‘%ˆīąśtÆŃ_ų¾¦‹ā jvś¶…$ ę9–>8éŅŗcPör„ģź)£Ū>NóĒØĻ,²ŚŽ©ĄĻśÅé‘ųWŌw>Ņ5Ų#ßk ZІ¹źk­ĖCļ(f)ɳ̾2ųsFšģēńwP×īlŽ”Ŗéņi–IƒęmĆņÆĄé|1u„ZŁŲEl®#U˜ ^v.=Ļ{ ˆēÕtŁPH-Ł€aĘÓ^ƒd›cP č8Æ ¦‡„ÜŁŽUEO—5…ØBÉ3H£hvĪ}3ڱR¶†¼«bõœQ2ØuŽ•ŠhśĻˆ¼=26ƒ­Žé±ƒˆxoc[s™Ź‘ź3ĆŖX˜®.7—o1+“× ńY¾ Sā ę–8mķŻ²J Ś£č;V‰˜ŗaįŃšžĒNÕ#¾QŅüV ya„ē©ōļ\ˆSVæø°žĀhU-ÜIµ‡Žź>“ˌXš«\]ßĖ UÓĖį¼±ŃOµnŁŽN•¼JBœc×”äuBvÜĘųe¢ų÷ĒŽ)Ō¼/·gaØHīl ‘Āy žēŌėŽų›į½zćFÕō ‹kؗsO÷‘¾•’bž&)ٲžŸŖŽŪÄń_¤ÖWØJȌ"¹2ė]Ö|mgįčī×OŗbŽu^?Ž9ćšŅ7q1g£xįēŒü!ØĻ¦ėŗ>«<éŹĖä– ½ˆ#Ö±ōėėĖ;™ģ¦Ś0PŪ]JœüÕø²Õhµt[½¾øH%u0Č£¾9¬‡¶~*ń߉.4]X®/¶–Ku 3c·Z‡°F¼lŪ;kļ†Ÿķ®„“¾š½ķŚ¶ÜJBóļŽ±-ōOų[Åś7‹-ßL‘ܞD¼rA©ŒZ4ućk¦VńōšŚYŁ7†^쐣ܑG`OJ«ØeŽ «+w²‘”Fž9häężFÖ-ģĪj•z–“©Ų[ZDZ³:Ž3Xž&Š=jÜŪ[”Ž"yČĪįVaķnŹ~ŠėK·¼Ó/­-oģgFuĆAčTžuĒėzčķmw™’0“,X’ÄS1©+£Ņt«Ū^ŹŲ]üńäpk¢µšÕ›Āā@ŪzŽz×e-ϚĒSm;°4v–ö—vQj:M¬ĀąZæ !d®}ą’ų(Œ~xb÷þ|5·±–3’ńÉgć£ķåŗ‘Éé^Õ Ŗ(üć?į׌ƒ„)4¼ųĆūV|dų§įKĆZ^›„|-ÓÆmÄzŠh3“ktAžčĘ;×Įś.§'„õ#¦ź—²\LȁiKš¬^5NŽGvQ“¬5ŚÕ¾§øé>'ƒS“SŠm­Œē¶dJ”‹tē$ōÆ"¤īĻ©¦µ0gń¬"krMĆc_᪟»¹µi¶H'ÜÕŅI³*ŌüĶż°ōŲųǤͦß[-ŻĘ“i;*’$ŽAĆś‚:Ąš6Æ}£ZėfZj‚īŁ”ĢĄę‰}żėź²õī.ēł«ō‚Vā¼Wż¹’¦ąg[čsµčø’k¤°b ōƤ4 MNĘ(f@Uļ@n:“ųf½šŖģō†z‹|[mš÷GŌ“SÕZeTĄ żģdÕśē}ą-7ĄšUŽ• ³M©[Ę¢cü,HģxX™t9…–9QŚBa`z5tZ-…¦¤¬Vmƒ'—cę~’穬Õ×.,āĪyäš 7ōżb=Ną$ µøłOQļ^—¦Į¼ˆī&Łž…j šŠĖŌģY„+ Ÿ*ä–5¤]\Xėšuķõ·Ūt¤—÷ńä†eĻcTŒOfŌ|K£ß¦„ż‘£\¾čńå9üüėĄ|W£j0«Mqo=ØnWpĘEl˜Xą£xģHå's¤Ō6ŚÄ–»Ķ±9#µT7"Inwkž³„Ér¢XN8čq\¶”ā;«‹coøHŹ0}~•±“Ā2Į ōʟ½<ć® u×:U¦„s5āCJ­ó”ĘsJNĘ2ŽÆM†“ <ę;xŽącXWž*ÓÆŁį»”¼lSk.3Oʰ$ē'¼†;[½D4’:Œģۚą&–mNńg+ä)—¦h2”z“Oku`ÅI2ō/J]>žY]×$ %N+>m-Ot‘”l=;ŠM9ѲcPww©»kČ&†häēÆ5PLˆžc‚1×)0/Įr%ŒÉćr;WA£Kok0”œ6ō«ƒīķReĘT“.pvZĮµšō\Ķq ¼n­¹}1čjÄŁ6»'ö„vh—~MÖķĄéV]¦‰op«ß¹ Žsó¾Čdh u^HĻJƋRšāįn!Y¹éA ›–7dj„Œ®Ņy5ź§PQ°[}Ī ¹=(6ŠčĻ?Õ|3«ĶæģEī¤ĪT'SV“TŃ­Åü!.Š°ĒŻ 9NÆS‚ ϱ ›$ ņz}*½­…­…²ÅjĶå³rŁĮ&ƒ>[= ZĶķ•°{‰—fyP~cųS“żSH‹MŠāwœE ;F0h v2µ“}jŚ3mp^`Ie•ĒJņx&öā9f²ffPAć’(4Wź|Į©x2ööyāøó„ČÄ®Āpē¶kĪÆ“‹» ną 8;p¦C.YĒ ĘA}²g½u6Ž¢Œn9ČĪW®+˜Ś—Ćéģģ&Ō4/$¬$– qY1¹¹†0äFvįŌõ ¦īmi¾"Š“ 4Ų%¼?iW?7\‚:Xz‡Šoļ,ē[H 6źŁį1Ē­4Mžēųwuļ‰,nn§¹Y£”ņįĻQ^ļ­é3É!13]@[äläuŖžā2õ9ītėXä†1 į€Ćõ©ü}Ŗėö÷ךԬŽ&(›Ū!Ē®:žbāŽĖO»ńUÕüśtĘĪŲ!Mė!o+žŅńõóčf÷H¶œ}¤Ėóżå=ė>r…ŚkÄFIĒ?­{‡…VYŠA%Éŗ‰s“zPęÄÉu½=·žm&1³*°'iÖżŽ¬C}iŖh-‹*ĒļūŅ¤ē:Rf†ćNžE÷NF1Š×š_ųFeņm ·į”·qEĄõ?čRXOkÆļā!žąÖ¼fš'‚į<Ų–BTŠzŸJš’ÓP9Ó$M<åņz U9u$°}åAĪxļ\ŅŲ:é֚½ŌSݹ·nÜP/Ō×9ćm#Ć·+4śEŻĶ®”œH#ł‘€éŒōļY£Dy̚f£Ģ.#a» ˜äZĒÕ­īmķPļłYłÖĆøŗ]ĶōČm€ Š×v„ā"dÄChÅ•µM"†4œĖüG<įćß<ę@ķ“ŲP#Yt«ėĶ‚8Ź·§ ©tŻ!ķÆI 4į”TMō°—L¶“U÷Ē5Ģ_ĘÖÉ$p9ėėŽ³C1¢Y„d8ąŸJ֎tx†äč1Ö·'6ķ‚”ɦ.ķĒå;jĮ'öZŻŗŹ]¼±ųv¬ĮĄó*œ“×=M#Uć!$aū¬Õ­ż®–É–pētśŠĪS4.Äś‡īõ¹į< üFē¦}*巅/mÆ^mŸ-¶™ćŅø*×¶ˆģ§…¹Öų?įżžÆÆČš•«,JAĖoō“šg‚ o[™4ŁŽ ”óƒč+…Õ¾‡t0Ö>oń·ÄļOØÜŚ[ß9Ó¦å·ēӌאßjŗŽŖJĢetS€Tc"ŗiArŲŌŠ|āoŻ[ŲųsI¼Öµ;‰<øąK³ĆÖæU¾’Į8­ķtåńķaarɶžŒł’¹;_ū½kЊF5gcõĀ =¼š€ųĮŠųįķ²ķ$Åänć‡ßŒ¶yļłÕ¹u=į׆õ-;Ć^’„ĻUóX½Ü_½x$=Y³×®sō­“8§!t?Žų—ģ·ß5 Żjõ¶J–ņ’ū+éŒkźżĘĀ'Ž:ÓGцČĻ—,¼uõ==j¢Ģ%3ǵĶ/Ćŗ7Ž-µÆ YĶ©ėåöÉpŃnӃ*Ÿ‰õz h^kŗ£Cgk)īzäzō®„däyę©ā ]nīHt»K»{eRŽnwFĒ=„cXßXi’ŽŸ“°½t“yĒ·āÅZ÷‰51d¹æŁidv˜‡Żw'øūW‡ųÄśŽ±my%¦ŻÉ ŅHĆ, õÉ«Œ;šŸ|\żŖ<7š®kĶ&Kė]Ä|Č"+÷Sļžł”ńOö‡ų‹ń"ź;ORū%²*–ģWrž€nk¶•.¤ŹV>qž÷|Œ2HbYł<“ŽØs1Ą%ćŠč9§Rį#yqģĻLÓH\±ēڃšo ÜJČ>^jkx”]Ło^õęeŌFųć!Hēpźivojc«Ų·m·ÜDO'9éœVø³2yqhī$ Œ/隖`uPi1[¬Xå|²” Ō_c|żüań6ÖéüG§Ėį}Ö9ķ幐+IAÜ e*–5§ēéGĆ’ų'į< …t Ķ}¢­õÄ+•qՕp?z·«Ć5–”y{©–ŌƆ$>AÜ<ōZćN‡u8šv3\ų–ēH½Õ$ŗŠt%‘–āŅ#i@qōēń¬lé:EÓé~ҾŲęF}Ó9Ļ=Xć°¬#ĢnķŠŹø’Ūķ>¾]˜! Š’wéŸq]߃<=Ŗx“^iڶvN‘™A»”D¤~8Ķt©YXĀĶža~·:E̶°É-ÅāŹyFܬsÉҶ­4ż?Uyo^‹Ę^6šwˆŒzLģgbŃātݼäŒ.:ńư|ā_nšž­ws6ҳ©ˆaćŒw¤[GSķ÷ĆŠ–:ŌŽ*†ūĆÓH¼æ™ˆa÷ ģ+Õ>+č/ā‰Wƾ†žāĘ8ŃDĒę,x;On ŌM Ęž“¦k:†­ Ń„–Ž$•v‚9!š1Åw~ųUāĆņų—Å×Čŗ²¾FÓ/?Ā=«Ķ›õ_]\xƒV²ŃµIm\®Čßē>ßZĢÕ5ĖĶ;ƍØßé—k« »¦Ysœ’})Ę:£c‰Ņ§æ×drŪp@ć³ž.ü2‡Oš^™oįé×[ŠķåyU·ĘßĪŗ#Ą7ŗĘ©ą+/[éŃŁŚDĢ­!L>~µÆ¦ĀegĢkWPÜDŪcd~ ćĆփĮ\śÆą~ćx¼Ś÷ŠoSQ™äp²²c<äzö¬6ń“ž3ž9-7Z“Ū`łK2ŸVż+”r+čn|`Ō š¾ƒį’źHŠE~ļolYy,N=±_!čĖ«üIńt¾Ņ¹%ćĪFX9 ^ _!żŠšµī 4Ķ2ĀüŖF–ńÄŹųBć§į^gń»Įš]ļ‡#ń ™¼«55qņŒēģ KFW±łė«ż²Ęõd<»rø'ūÖĻ‚#µÕüŪ‰BÉsąŽ{ā£f4Ś>­ųsm'Ū\šńšė^5„øG/ŻqŠcł}+ɧ°µšĻUŅ[N“I6ņ“&)#Ū÷OB>•7ŻFēéŚ~£“@æ¹²ø¹…¤’Ü’ ä®0+Õ~k—ڶ½ØŪ >Ya%<ęÜš‘ųP’h‰3¤ų§ć‹?ź‹į„Į«Å%ÕI“œōā¾Fń>¬’n]žāāīāSūÆ7 ķ`fŸ"3µĻØægߊ¶÷Śn³šöņ[EYbwHē+¶F#޾!ż¢ü3¬ųWÅģ_O¼µ±˜/äł$ÉūĄŌņZW-SģxO&0Ņ1Ī{Ž‚©}®A)—Łœ}EoŠÕ+µš—Ä÷žń6-£ż£O’ąˆ¦ŅæP“=@ź–0ßYŖ…•|Å@ƏóŠŚÖFsz›–óē‰c8ž,sŠ~§¦ZźÖ²iwpĶop lҌįO®Z©t3Gę'ü3įė޾·‘Rß ²‘•$ōĻQļ\„Öā-čUÖŻ°0:×<ž§DO²æfĶ^/ŽhŸu«Į>‡©ÅqīĘau\”SŲךxėĮśßĆÆė }§Žé-„msÄĢį‹#qĪ~_ʝś”ŃżŚĮ1?i{_Ū ö8š/‰ZöÖˆ: CMÖ­„›¤G@–ē9 #sźŽ•ö½½Ģš&©” ŗ:°FŪĄ<õ5œ÷6>ÉŃÆ ńƒi} 8/ž<~\ž×’²W†’hƇžxOÓ§‹Äz|ڇ‡Ł”+żŸŖF…ƒ«ØŹņ²9°ž"+'ēĆńGĄśļ|Wā_ųšŚśĻÅŚäŗ^„hą†H‰\Žä½kÅe‹;Ų· ņ1Ņ·§±”÷2ībņfi,„īąTO)oŸhŽHķŠVōĪyīZŽ8ŻŃ¢ ;7 ØŁ¼›ŽćĻ$ ЁåāF É'ڟl|†+ŗF''“ڦ%Į—c—2«/ļ’ Ų vbšß ¶E*Į‡U‡õ]’ćžÜ7j>(ż…¾$ėJʰ›ß‰>ģ*2^!ܐŲ鍎µżuŻųvd®9q‰ś×5xõ7ŽēœŽiFX®4łĀæšr¹ģkó÷ćꂚ~¹‹~Åē,Ī-ue ‚č2ÉöĻźkĪ–ęĒÅ?~ĖńĆ·‚¬U&··Ž[Ė|*młē{ž>h†Rü%ų£®ųz;;»M&iä’Õ™ $äØśV”eļ\ųĮ.ŃÕ”„q‚2>õPš?;÷ʧĮ㔯E3Š¢*-¹EWó¼ŻÄ’ pæ*œmE#q8Ŗ‹g-ŚŅ­aøqÅWä”˜ŻK{w§)¢ė·‚9‰ Ć ś}j1Y Œ`^“¹аFIPzŠŅ\Ėņą¬Ž,ś»ö ż¢5ŸŁwö‘š/Š£ńö•įm^õ,õQ»‚XyNGL†Ē5ž‚Žų½„Ū/„~.ß¶ŻUi^'XÕŁNĮ|«‚;+^OØēŠęžØģ¦}ńg%°æK@ŁTQ$nĖ*‘GŌRĮx#æ•AD“pvgūŽÕĆR:›Xüw’‚Ķ~ÅśoķAū:źt½*I>"ų> ÷ģɉµ-+’ń’µ·‰zańŒ×šŖųvėĀŚŽ§į]F+Ø%¶|Ū™KĆü'51]”Æ¢j’ŁzˆøBŃK¼)$äńé^©Ż£Ü-ߌĮ‘ č7wę­E’ŹŚÆÄMėœŠłq:sņŽ2v3³‚v±Ō“yÅÕ¼Öé*‚Ż9Ī;äM ŹĒGš—Ēzφ”¹»–i4żŒ¼^ćśEąķAµ_h¾!Kkz <”¾•WhÄ÷ >8Lä 6Üę¼ļĘŗmÅÖ»=ń·,× ÕL’]l™ŽØÖŃō Jś[ ŚTŠ?¼@ōģk­ųĆÆiv^ŅlÆlŽēU|g=Sh<{Ž+q'…ž©¦Eząe Œpq[š_ ML_ÄB…ł|³Č­ Œęśn5x§7Ř;(ĄĘ}¦mBģL§äĻ9ō§2`ZÕ$‚×O’&¶óQ8z±į‹=śĘ+ԘÉl~S·¢·§éY•ÜŻÕobµ†kpČč{¢¼źćQ¹žųy¬ĪģąE"Ńfī&7(Äe8=æ:†öŚök¤’Žōˆ°€NшV ä,WžæzŸosmgt²6Ģ_ҳWl£ØÕīC­›«¤9ēoµs÷×ķgv“FX Ē#­hdęĢhuČ5 n1p‘@ĪĮAĘz~« Ņōčģńć !‡j Œ®spĻkw“ńĢÜ}Ӛźtżźź#,VĶ9ū”T}ćķNĘŌßCšÓuøę¾vh5‰Ł+‚ ’ņ¬Ż{ĘZlśÄ–Ÿd- æƒ‚=hEŹ7 Ž+W§“1ć"¬ŲZFm$¹’aöųŪŽ1ķHĄÜ±ÓeŌtżFk9!G‰7e¹Ś~•VāM&’I·³ŌķÅŻčm…”pŻøÓNĄ^o Mn†Ņ!<6>^qŒmćŠŃųk§Iį³4v#{ī&N>š>µ¤eÜŽ;¹ā+KU†ŚöÖ.7Jļż+ČõMMÕ®ĘŁõ\*Rz –×^ŅõŽĪ7‚ę8±ó6AoʹMø±»ŌdŌęŠf•·Æ=Ŗ[©W]µž RāŌxĘ8je½¼ŃĄgdoœgéRѤéæ“H&Y﵉ƒ7”¤œ°®‡Å2˜“ū›Ūm<^KČAŒÖGT‡—źzĶō¾BÉ(e8ć\O–’jV9'8nõ©¢•ކ'ū1Žō1ņ‡šä­vś†‘m{cż¹1ĀFšŒy¬>‰£Ąöė,6b•ĪĆźMoiZ5į¼¾¼ģČ1ĮéųW;fčłźõ/SW½‚vy13tĄ­Ļ’hcó‰UĻPkĖSX³gCŅ<ū›¶µšBLyĪqųV¦…e­ł×pÜ¢¤™żÖIžżkRĻJÓt ķCMtŌ Ås±¾aĒĢy jŠfžo8Å!‰‹qČķAŗ3ƧI$A f2Oį]ރj±Bžbć'Æ÷©IčkMō55Ķ1ē[7Šö£oVō’<֖›­E “ÖpÆļ”ąœżÓčkŽ”ÕLšķcĉ^ž…ó­Éaƒœgг®ųīĪÓĄÖ^ »°“ņŽüŻĀč?xXŒ0ć·Æ¹ž“xW…އ0Xx«~ī-śÉs?ųsą÷†Qų‹…mī.m&½ƒķVĒQŽ3°{ž8µäŸ¶Ē€|5įŽžń'†wčœŚQ¶Öbˆm†K„ēq^»~½y“‰ś–ŖEM25k;;¤ž;“$a›TōĮü«¦_ųŪUŃucĆŽń½¦Śƒ%ĆYŪ|„óō?•eŹĻŖĆbU“gįM_OÕąitū12C!įŽ ©ä{Wb÷MQĻQČĻFSM™™‘FN;ū׆übųc}āŲ†æ„X—X!"į˜n@ļņ޾õ“7>S‹()`g~šŸ?ü(ńÜ~7š>£ą÷»··ń>‘$ĘÕƒ2gśTæPĢÉ4—IŚ’~µ“$}8r4™ńGģæńVŽŁ5»OŖj upžH,øą=ŗtöƬ¾(ų!|wąéu­%ćŸ_ŃH½±š3óķōõ=z{ūV‡³XõO„—VŽ2šžgzńK ‘N>ėƒś’*üŅ’‚ü.ńƃ5Ÿųjö}2’Ā×Hš–žmĮŽ]O;Įč=~µĻUtj{ź©ł÷ąŠtōla)$OõńO„Ņīͧµ…VeņZ­įQ ŗ\śešB܃‘Ąā½#ózŲ‹Äóóm>›}"<•s·Ä+rk¤“ģņ!(żžµ”äā%}O 4«+™4›F³‚C<‘åvŒ–śW¾~É)ń§€¾*I—ڧ$qź¶nI$ĘōSїÆéҵOCóī/ĄŃĘeõšõķÉ(“ŪéŁüž«µ’mßĻšĆö¦ų­„iŃłzNµäxšÅvT®ŁÕqŲH­ł×åäés§ų¾ń÷Ŗ_ī’õź%¹ÉĄ˜•‰ÉšµbļxBž©$žęš~gŲōϵۭģ’F‘D„ÉvĘģ•ģw’§Ót›+_ ,ÖZŹ—Yn„„^Ÿ.=«)#ōŒ.OŻgĢ^1¶›^‚ž;£,÷ D“1Ėæ^§ńƋüeįՂQēFĢń¼Šók÷?bį)ū%ģć¢9-?T»Ó5(/l’)&ŒaTšōż+źę½Ńļ¼#oįJKo#\ˆ!F='§æøŚź~“ģ|³āļ jß ®tÓ«G"is»Įo0ĘŸ^kź/„ž&²ń‡$ŃVįeŌ"Y°v€sŠŅq™ĢŽ6±¤ĒØiZ¬Hń ›Ė „ĻėPhڇŠ4}oúׂ.®l¼eg{֔Ц÷iאˆ6#ø®Ø¤F"Œ%+§¹ś×ń;QOŚ×öAų…ćM#@ŠmõŪ½ļI×ōķ›gÓõhAgź28Ę{ƒĶ~x#[¼¹š7†õ ˜į¼··yćą©üTÖÓ]Oęo 0‹ [Œ®©Ō²ō÷’4ŠOx£Gń†ŸSÓī ėÄ5Üy1äœĆõ®KöĘšJ|:ų—ą=;P³ņtķwFƒWµ'88óÆĶRžŒżŸ'Ä{Ęe¼ÆoĢüæ·z_‹õčaY—O®ŃÅH?פk7QŪh’Ž\…Ž@’BÜk™§Ō›g­|%Ö|E ųFų‡ą_Ą—vWk©Ł¬Ÿ;F1Ćߚś£öƒš†>:~Ėž'ųØlģ­ü}§ˆ®­.£\e·(Ś}rņ«Ń-N/n÷G埇on.¬ć&Ölc‘×ÕĄ£;]pÕHś ,“;­3|øR§Ėīkč‹? ųvūį×‰4¹'‡[Óēģ3‚²FÜ جTQŻķ,|Ėń#M„G&ŗ—#ːøYœśÕOx[\Ö7Aed× XlŲr[éV Åķ»6³¢ź¬š…Ķ”ĮŠģ”m ÖĒ…4KÆ^Ūiöņ[Ē4„„i@Ī3ųV±] =Ŗ±~+KØw‰£†(Gø5±ci=ŽŃH^yŃ TQÉĄ­VĒ-J§OńKNŅ'ųA§łz2Įƃū»€ ;·R­ėھyųmÆHlžĀä*Iķp@ėÜUŲŹ5.z4·±X™‡5ydcž÷ó«†ēJŲ£-“Œ©ĪN*ߊ-“}GAŠä“±Ž×_²™·Ü(Įž&ģßNOJŌĒ-i%ŠmE•†»¬iÖWVĆ`gżsG7sįó®iiŠų‰ÆX]-ĀĖż“¾&ßxŸW“šSK§]Yé®» ņøĻ'Ü×ĀWR$˜i6šk‹-ϵĄPåŠ<Æ]Ž+I¢»Œ•¤#hźk{DÕ¾ŃĄ’»˜¹Ķxņzžä`v‘ĒŗŁ]Ÿ2u5%Ͳ\Ū‡i;m8ÅKFœØĄ j)7FŹq’jüDdļėK@äEŒļ=zŌ±€īåŖ‰öfN„d—L™I‡ś×1mŖłWA<”6܎ßZq±ÓĘ`#£¬žąę¬Ęβ6ųž@03P婕E”Ęx›L½±½±Öü;©\izģ'Ķ‚įö"¾ŃųcńāßPš…įų©ė^1žDwü“0 wĻJŚŗžaƒ•KY٧sēŻsŹŌ§žš,~k;19äŒ×ŸMhņ–6³›yƒ©ĮR:żjÓ£4}•š›ö‹Ö­­lü7ńa-¼I§@¦8ÆL`ĖåĀæÆÖ¼’āgŠ4æų’mfĻLƒO·EĘåBŽųØŅę-Õ- tāó& t÷ÆšŸ‰uļ…Ž>Ņ|u é÷Ww§‰IÅŌ‡k£ īv±ūąx_ö‰ÓķuŸéŃ¢]"‹›/÷¶’ć7×Č?“æĆך÷‹&Šo®|DZ0H «dćź3ųV®™ēåø™Aū)t>vŃm Bę=k™ńĪŸ­ ˆD!%A!({zW<ćcé#RėR+‚A żEt’SĖ*śõ‘’-īŅ2™ßŠŌ^%^h&?$;ŪĮ•yĒzi™Ķ#Į·–Ҭ1‡/7ń cڽn;›8"ˆ„±ŚŗbģĻ#>īéHu€–Ę8"øĖŸŁxzņ?µ·É+mū§ ßŅ»cSCĮ©KS·i!šĻĪURŒ26ō5ęš÷†`Ō&Eņ.Ü<ņ+)Jā„łõ_Ėa›bśĶĢįJ–Ś{·å_Eͦ\xBšĻŒo’ų7Sg²¹ņ‰tėžqæņż=ėkźtĘ:ė”ŚŻ‡?/EGsii儼M‰Kšé¢Ģ&Ė’ŚV-:ēćLӅiļ¢ÓcIeōpq…pś£r­£“?.;ŸJśL½Ś'ł©ō„Š|WŠ’·?ōÜįōļA`ŗ–Æiiœ”ņŽx£ÖøżcÅ7¶Ö« …ģ©,ß»‰ŽrxĄģDü±æcæ„>+š¦½wńZ²M?P•U ‰ŽZ$äSœ×ėM޵>±\j ĻpG$Ÿ½[Ę'ƒˆųŽgĘZ,×zr*o³\ł€>ę+ģ+šœšL—+p÷  3ž imĻ6}N–÷Xk ‹&2Eū×ŪøŸŅ» {KQҽXä.›ŌzÕ#’{w‡<n)ŗžµ6‡tēMŗX^@ :šm™Ųėü5ć}3Qµ—K»d[ŅŹ7:÷«¾Ņ¶k$7Ėø•n sŌVLĘJĢļŅŽgčx ā>µN-7NW-åžüwōü)ŃZņĘ7”VÅRŸĆ÷FnƒcēŲŌÉhCĄß$š]4 ČžŒ8Å,-ĄrĻ$Ōr½ŒŚöŽęĪņ9nF¤3éZń,sD6.Æ"­ĄEø-͵»Fά;€éXs}i¶ŽŻ$Ÿ2d0\•ĻcķM+ī:ĖyagēŁ"\żįƒõ­«½°ŗš$!öœ{})‘3ēk’µŚkؒ[Ü\2œŖØėųׄI5»Ū¢2vLœó¶‚9YĄŻŗ’$õīE6 ) !Œl”ó·Ø[é›¶Ėo`gØōÆP·[e°ņ¤d‰ų#ւ¹Ł{GŌæ³õn"ešD ‚zdV¶½­[k¶ŗ½äMėĘEŚ9Īłé@ć#Ģuß·M.šönį!b[žHĮ’«„Ø[™ŅAęG€FF?Z ä֗¶q™ą2ʽIÅaK%ĀŲŖBeņTįr3@x`-”÷3&iä’…z‡Ū²¼ŪŖ|ŘšłŸÅRD¾"¼ŸOø‰ķĖgä[=kŹüO§6„“É̈’{½e(Ų0æŅšHš=Ķīą”ä‚mgRѼøķXeS“>*›CŌµ»į9Ō%’āŃŁĮ#ŒzWŚ-u©¬Ė;#7ŹIČ‚‘Ö^xN Å(Ī@9;€äZč“/Źŗ{,Įgf 3uæ^)—{čyuĢv~×ģńķ®»zu껤ńt³@ŪI•C ä1§?•MŒ%½Œ(ē{·˜FŒrA"›ŚŽĄĢ¾īō¤\oŌķ4}JO**%²M6rłéšĀÖ®Æõ EÄn²hžUœßBˆåxōØh|öÜÄöÉéSŲź-ws ÄA›•ē5˜’6]ę·µŪÜīvČłz`zמI.”aw9“‹IåV £{O‚yeFwłē5WÄ:Z\dÄ;pyē>E¤“Zݬ;ä$qž•č•C Ż!^AśP+W©9ó¼ĻéKm¦Ģó®éAŹ®8cčiIŲJŅąøšÖk©O•2· «Ā(ļŸĀŖ5¼lŒė^¹ć­`ŲÓ*Ēl­ń<ąē#`o˜ ć5$»WhT…OAżhL 6c¹pŹ3ĮĒ40I!¾Kh®›ģŠ‘¦I=ÅvP£}Yv9{8”ß$Ķ·#r–ÉÜ=+ģo‚_±ĒÄŽ×7ŃŪ|:ó6Żźz„Mc…‹¹'Ö½Ʊ…Y$~Óüż–ü+šA6~š’ü$Z½ŌżÄxäō\ōĒ­u~Š kņj¾-ÕŒu›q¾āAqŒēnOlgž•Ńt<Ś“;ŻWZńgĒ Eµ įY²C –ŻžtcƒžO>ĒŚ­^h÷~ øžĒŃü7qj כ>\ąu>ųŌ©3¦Ņ¤²ųw§KØų†ņ}W[‘Đ"…!œ&Üw⻋Ū_’gŚxŪ_ÓćÓ<1>Ł¢ņ¤#ū„:~ĢĪhĀ_hž&øœxwG¹°–9%Čä°l ņ-mbµ½Ō"Õ/?¶ąšPĆ#qB‡#Ņ“ŽĘv8ŻK[:=¼šXģō U†q•Ē5ą’š‘Y¶”r¶­5Żü˜Īw?ø«šEQńWĒ~š…ŠźŽ5×m“„BZ?>NKį ėļ_˜??lżcĘ2Į x2Łl4 `ŠÉ3¹Ų¼§¾k®2™šŻė]j•Üó]ßĢs<’¹bĶź*Œ³ąŗ.Ąt„uœ“} ,@&BFńŠzŌ1ܾŠIķŽƒžSģ'Ļ)''“łV“qFäFąĒ2[Ņ¢fb}ž)Ą(ÅUzńĮ¦Ŗ¦ņ›2}‡Jˆy`ĢA¢bĖÓń«ö¶Ę]¾bķ€ĀŽõ±›×DtVöZ9rÉņŁė_Dü!ż~)|XŌ,`Š“ ōż9Ÿ‹łÓ(Ćż•®yK«.+źĻÓ?†_²gĆÆ…:¾ŸwńŽŪʞ/åāÕžŚōÅ}qe.“ÖOā‚¶¾•b³¶@§ge_n1\R•ö:£Läõ i|_®x†’Į޼Óō›Y6 sĒ—óÉ’&¹ĖY¬|ØÉ{5ĻŪõ["͆ƒ„_ĢŌØšĘČĪ–YƹuŠķ­¬ŃnXāPÆóŌž"¹ŪØīōk»iōŪyŁ%(Č2HRŽ’=ėXĆøsō&ń‚|.ɤų‚?%ö§»Z£7īģAćÓ„O»«\j6ņG–™ –Lm.µ2‰”|gÆųZZ 3Į’hŌå‹ÜI'Ec’+&+Ökļź™•7(åČēÖ¹$mōöŻGZeÓ­ā†É”,Š²ךšŸüCšē…ć#iėr«Fba–AžĒ^õĖ$vÓ¦yē…¼ ¢Üź1ųƒ[¾¶ŽĖ>^ŠćĻ„}ēā/xgß ōHō›«yŪĢ ,jł*GŹ =ŗōƬšź|Äj£Ė5BÓV߬ź÷7!ƒ8É ‚¼£ÄŽ2Õ`³¾m%‰äM¹hėź*…+žeą½Źmn żNŽ?5œ¹ ¹Üś„ü1i}¦A6éŅ*H4sĒ~!蜁u©[ų‹\ŠÖCł† w‘ėłVĆŚ3^Ņō>M¢VŅ{…HoQ[€cŅ“] ‚>©šŽæā;]GEŌmGö}Ü2¤›‚ü¬QłW֟uŸ ‚^6ń„wėZų“& 0J˜_¹5Ļ8ō4?2?fŪŻ#ĆÓź;ńh3”o=#r2Nz{g5ėŽ9ųįˆ·ņEo f†Ī6&‡žsŽkeH”Öu;ßß5ę‹as|¬~ĖłĻun8ĪkÜõŸ‹ń|4:ׄලøˆi¶Ž8ĒjČr8?OcŖčöqZĒ V–q‚[éėTüB,t§I'Hdc–c×é@ŽĀ_ˆŚNąQoµ;Īα¤QrQOSŹ¼ēBńų¾“™ī^"~f?6{äV¹-’Š“ėėז .VšĻrš¤ŒqÉćóƀ~#Üü?ńLš®§¼zØ+ģāSĻę+¢-ģb×Cöösų‹?Å-+Gń„„Od÷jd–6ą/$pZöox7RÖ“ŻSIƒ/lČŪŠ”€9éÓ4¦ŽsówāM¾¢ĘŗmāŹŅ“›`įHõ5—šćTšüó]”š3%¹Ü錬fІ÷>”ųKń3Ošv­q|VŲ¼Ń<+ž>Sßź8Æ?ųæ«Ł[^^Ü½Ü ±‹ė ;³ĻēYšŲłoÄķ”.‡/Š¢Ōo#Ö``±łiĮ źkźæźž ńĆ} ÅöaÓożČ×f]–#Æ_JÖ&2æCį}+ā֙ŖxŅümwwib\=ā€DÜą.;ōæ­ćń{sĀæi³ŅćŪ”$žžƒ¹Ē½_.…(Ł•>xJēZų§įIµĖkųō»Y’pŪ ¹ģ1_„?¾h~$š«{­k¶I}d-b“—(xąśŠĀ³å7cIJĒć/ˆ“ķ>ĒS¼Ómn³·”YˆŌ×5Ō-$*Ÿ8Ż·ÓėN•^d¤ŗ‚ō: ;»%‰byg·\źq_ æükwØi‡O½’#ä(2®”ś\ščrsźrŠ»Ł~v&œū`»Ų§|vō®Y39E:žŠ~McGOéķwvKūķćt³Gƒ |!-ź“Gčč§nĪ d£Ń›S·B_ŽjšVƦųƒMŌ/4ĶJŹS$/ ›FļŹæ@¼UŖĮń_Įš_ĉ^ŚėÄn¶ś™Įx]>Q¹‡b9‘>Ć’‚?žÖ¶Ÿ±‡ķi¤ų:žqišæĘļöKö’ćå‚ōœ#•'ÉĮ>Œkū9ń16w&4!į“Į&8’&å[ü÷¢]͹zžÆšSĘN/.“½JLBķ¶ t'Žæ­z“;£eÆŲ•7Vņ¬±63“ƒĻé‘Y9j§ņ5’~Ę~ųÆąŚūįö —‚üd‹£xŸÉ‹{ńŸ.Vp[IõBzž—-sO“OŌnl?Ō»$„ŒēŽ;äw©ĀU»”»Oó×ņfS‰ÉI4ŽĢƒnqÉØž(D2uäķ<ćčĄā–äŖ* ”ēw¦|ūXnūÜr:UÉ؁pX“ņž“ S*†Ī3Y)XÖ1źjEļ±ƒnqŚÆŪĪźė3–ģOz®~ęŠG¢|0ų·āŁēāρ¾>ų,]Ƌ¼?yģM lĢØĄ˜ŲŖŹ#¦3_é©ū-~՞ ż­ægŸ…ß<yö:å„bö4`M•ŽĮŗ7CŽ?ą?JU&Ż5Ļó·ł1īzżÕ“󬑑‰ć9_q^+ćķŹéšļR²ŗt滞0¾½My5Mkt~sųŖĘ]7]×t &ŽīŚ’Nøó¬„ę{|ļ0GŠWįļüö]ŸÄ?|%j/§xŸT€ÄŸ4sŒ‰##óćéQc7;’fK(^R\mlŽCś×7v]!“.ĮqŠō©œ³AmÖ%Wo`*;ˆŁÜ“g }{VŃÜäš)y2«/ĻĘrp*vFŒ¦ĢnĻZŲŽ[ }²ļ²yö¢‘ŽŲŪx{Ž”#B“2”SŅ§X<©@01·š Ž A—Öpjv/asʃę&Ģt#ÜžŗæąŠŸ¶‡Ę߇š| ų³¬[_kze°šöøšŁ&„jx¶ø\šģ§ [ØėYN=Č.ēō­š‚’b\xoÄrI6·”ŽI§¬„īóķs˜\¤m#ń5ė—Ś]Ҭ–Ó–ņ$ł‘ĮS\M‘æm>™{¤ÜŁź°Aubń[če]Ė,l6ĆøĮ?†kų’‚ŹžĆēöcų묟XkÆą«‚uŻį£ŻŁČNmÖAĘ6%pNq“÷®tżė•Ģ~.Kh3ꬻŽī8ļZ>]ÖµY[»¤ˆ:‚ēüšź…Ģå°Ż Ā÷O<֗Q: 3J>ż{Ÿ€,®¼-}©G KŻ=”1ƌ3°c¹éTĢL3g©\Ć­G%¼pD¹ŲźÜķ=8õÆ{ż¾#ė–2x[V¾FµI‡qĖ8žX¢ÅĮzųoĘڤ%‹:ēÜń^Ć«§źMcp_ Üt4Ȓ=ĀīŅ]6ķķ&·‰bĮqбō®Ē^Ó¼_ac)»]ĀI zGō?‰­ g5ŌįlåžÅŅ£ÓHE†3Ķr¾'¹æŅ`³½`±C<˜Rr3Z'cžqźgiZµī§|–˜P²pFp+¤HƬ§xa6ĒŚ*œ‰Žå]#Ēv6¶×q]iÖś…ʳF ­ĀöĪix6śŚK]Me„GhĶę*©ĄÜO_ŌӍ¬kc£ŲÜ¶ĘźŁłQŠį5I#·ŗxP†*yĒšŌÉ[`.ŁH.lŒ‹Ž„÷Ŗķq›l,ģīž¦¤Ś“9F§3Ć0·š{ք׃ K”ū@a:0n}h(õ kį׆üI¢éZżŽ±6Ÿwdøž"’}ˆĘ@ļ\N³”Åach“Dļ)½G$g½ø£”“Įv‚ķB^bķF2:qW5M u=2m.öź@Źæ)†4Ä“gįiģ5  CF¢ŽŖ8ÆvO ;uX£ņv ÄŅ4FTŚl:­³_Y¤jü¾P¬Ļ­pöž inŽā食ī“L|ŻĪ­|=-²›h@0ä Ąp+HčVšTnåWLēƒė@8ŽśÕn®¤Ó¤) øfäóŚ¤²‰ZźÓõ|ŽqŠECsŲmo<§D¼š9įs»9ÆJŅ-l –$XįE›xī(58ŸŠ÷shP4Ū”¼¶”ć*0Ńń×ā—ŗ›^ Vedw©>ōĘhųv-?Jw²*!œš>cM¾’źęō%ŗ•‡i=éGu™öI†õ’iI ¬8*kīkHå[HŪ¼¶;ŠnjčńĶsŁäh’6Ėcæ±­xtÄxŠ™¼ÅŌ!DŅ"æµÖ“I³ĆŁ]EŠ{««ƒīÖ¹ešŸ7O‰ŖGŠa”ż—BU>j¢ä|ƒ čŗzŽ\:ī"ųżZżż¾/ź_¼Q{ąQyüZ‚Ē{b0ā\Œ2SķןjžT~™R¤„NTļŗ7æą©?²f‹ū?üOųūBųH“EÓ~"ZĻmā-6–µŠ9UØgAĄĒɞ¤ēį™<–Mä¬O»šÓIFVZķł†\_Ó,Uļ~YNļÉ'ų${_Įƒ¾#ų¹=ģzN™y:$ÉnŒƒ†fļģ3ü«©ńĮĶGąŽüAąjźÖ—"amāī&Č ž%xžßHQ§éw“›»5ŒeU[$…ķߠƣg’ˆpx†yü(Ņŗ °#Ģģ@'Jģƒ:§CGä~•žĘ²Ī©­xĻū?Z²»µÓm5Cw0EĀ mŁĘqo©Å~wĮjüSį/ž×pųsĄĖÖšŹéŗ™· Ą·’ÉæĖ8܊} #µ*¶Pw?!Āq=|gŅŹšĪō©S”Ŗz»%÷i÷¾Ēį’öcY\³,„.ćĮ÷ÆAšŽ«ötX!–9"VŚÜŽ xsgōŽ<§³éšĢWPß+8Ē+ŗŅ'"2ąŖē޽h§#ÜRŅĢg‹<;uØÜų~āŃRE’ę=Ąœ†*ĄąžUĢĮAt/Vż„|"|>"P¹še³H9™Āēßü+VżÓņn)RŽaJŪkłIńĀwZO~Ćqm%¾”hZŅG”gsg#’BÆ Į7ŚÅ¢Ź\!Xn?…rĶ™?æŃčśƒÆhńY˜ķļ`ė¹2p? ś£į_‹ī ųŸ¢¬7P¼āÕ¢t –+×õ­(Ōw=¼]8:‘ūąŸŚų³J“\„½āEµĆ7ŽõĢŻXߣ=äŚzłåI-·Ņ½ŠR¹ųn>””9"ρ¼Wą½?ūb×ǾæÕ”‘1ÖóxO|^ā |5×.®%ųo}©J‰§ æ"å¾hŻF]õžvFĶāå>†’ģėńlxCĒ:VÆ©YŪj6ƒž=ēœäz:zW·ü6ų¢č¶Œ?tł®l¼­Jl¬€³’TŲhĻńc§LÖ¾Ģü’ˆņ:ųŸjéĶ®jS…ŗ^[?–æß蟹U߄ļØx[į×Ē]<1—@ŗmT@›·Ł\Ÿ•øč@;ćēÆĮ{ĮÆq®&£i8u>‚””Üłß£ī9bx~śŅ”¢žžoŹHļķåšĒO·“.Ń¢Œ§­kZm $œwļ\•ż…™¹&Œ÷6rĢ@H±ĮĒZłsā?†ž)¤u””‘ÉäóŖģ}ęEQ{K+IÓõņɂOqšļSɶń.€ Ņ^ē$ąž;}2kŠēźō¤£~0éšx«ĆZzßĆĖĒ&ų÷r‘ŌŻ+ć_ jWŸ !µ°Öęß¶1hī8čO&棏ų,_ģĶš×Å’²?ü-}:Ņ=#Ē_b‚^Ū0ĢÖ„’9-Ÿžz#'Ģ;‚§ęléW‹8|rānYÅ\=<%Ōg[–Zn¤įæšČžPnü?{m Ɖ.” a4‚0”H@;~¼Šßø±Ó®ģ†Ÿ}w–.&Œ÷꬝µ?²¹g—ųoDÖ~ėz³hśÄ×^»oŽ[Č Ś¼cėŒ ś³Jų£ØŻ|4ŸĮ–· 4yäß$gŽ@Ąōā°“±½<">oÕ,Mœ­.ĄēųF*kuĀ`× ¤zō)YŽŸ›c°”ŒWTšÅµ¼Ööīė Ÿėź*CiĮXš’Šwל®”įż0«„DÉ%Ł_āĖüĻå^åą§ĀæŪųwP_“ińĒ5Ć»~PØżk¢¹āā¤Ō¹WSōOć7ĄŁ¾7žĖßž)h1%NJüjŗÆŚ!`æh·Ug‘\÷Ā#’ׯÉ_xžibÓµ;9#š5–6S÷r3]²§mO–ąģŚUż¶£¼©Jß'µ’čz͵Ū]”‘‹<ÉļZö>(_ŽXkr:ˆcŽ« ‰ŒÅfŻ±7ŠśWöų5ńÓö1ųKū\xwBó~Žjf}OŹ;å±³‘ŒQĶ"ö]źō%}kó›Ć67Vš„ŻģkŲg“Ī–$*r—įN(ĀęŸXŽ\ĻVt§å8Śėīhō’µ³¶żŖ½«vŃņcV"Ŗ;Ÿl"Ȁ¦Z“ĢŠ%ČŚžŲĶkŌRŲą5‹K­*ķī•ŁL|ĄqÓÖ“ō¹žód€³©_”śR”¬yõÅŌ5 ōn"‘ŅCœ8ą”Æ–Eń³ż¾—zĢśŗ¤źÅ>l—”ē‘\ŒWßkB؍ņuĻzó«×=ŚXt–†uö–5$WV Œą{Öe®-@‘%”H3»wA\F‡Me}*'“!Ü;V¬S²ĘÄ··4\ØĘå;»)f…edēÜU[k— *Uēž“\ÖÅÉ5²Œ˜„Ø;ē„>Ś’ķjÆo9ā·04WPŒ½jΉ‡¼/}Ὲŗ{YkzoŚäÓu.DVņÉąHA>żqļŚ€)|Jš‚x#Ēŗ’č/§†ī–+Č ŽYќdč*¤=Ź ą{ŌJ(‰D­ØXĢö®$]̼äVV‘©AqoBŃĻ ĪjŅ9gØWQŠånüĖ7M„*ē½R–¦|ØŅ·¹•UÜóč{WM„kO§Ļ¼Å ń•deqœ©ĻÖ®"q#–ēĶfpHĪG'õʼ«¤_‰Ģ¹če5¼gmĪ:”®{7Ć/Ž,ųS>­?‚ŪO³¹½P²—QŽ;ō<ŠęüWńSń^«6Æ®jĶ=ģģY‰brkeW”ĻS¹Ī.»ooŻĶ2¬IÉvą(õ®'ÅŽ9Š/md–sLŚ§™: š‡¾3S%sw8Ąć¼9ńĆś„ /[Ņļē;c™K/į^®V4–g&²”L¾²ŗ1k°’Ø$\ūŲkä“b‰7®>lńX^Ģæks”|é:ˆšŁähä`zš¦½3Iæóbẏ„tÓŲ笮uĄHĆ'§JĶÖžóĮ:½ÄgĆ7k·C÷R`1=NkJĘń¦zŻžµ4ÖQ$q“)±÷śq ųóÓūCp­ØK¹”©’’._ųķć=ZŻ ­¹˜Ę›;xQō©<9eŪ-$+(qÖ¾»żŌ‘žZxŁU¾(ĘŹOķŪīIéƒā aķ Ńƒ=¾rį†Wė_dü6ż’ü5ā-/Ćæ|Udҽ•Ų‘-€ŪŗEÉ#µ{P?ÅÕ±öŻ·‡•ķäŅtų-PØRˆ>éō®¢ĀÖ(#{ā¶‹>vµK³Ķ¼¢—V7Zečū>Ņ'ˆAķž}źo 3Ż”K¶fڟ1n3N÷g„} ½z]:ÅÄ0*όWõżsS?Žōæ±Į ·ļc\2Žv[#9DkxęՌ+nĀö'S±ćĻŹ}ė'R¾:ˆXŲo—9ĒqZ)%”Ķ:z”¬džĀD1,ƞ+^}Lɶx-䯆VéõŖęF#d߬JTv’†XĮĆߒhŠĀ9¦Ž·>z0#‚j&ќĶ É‘ņÓŲrµ‚¶a·’ŽX‘Ż['#;ŖĢw^ń-Ņé÷Śm…•¼p0hŲ:OSĶ|ńmxt]Ā9¼Ł·dó·üā·Nä—¬čiŖ\ŪźZf§uj۔ȪxoUǧ&¦×-@¶·¶ū2ĪCęó å.ˆķ¼-%Ž•¦%£[°™X¶zēŚ¹O[ żB{Ā© RT `ūPfĪ'Xš£Īö’aG8łsšēµß ZiŒ‘k ¾\pvP#;K¶¶؁Мäw®Į,˜°gAø”3ZŽ• ]£īŠåćÕ 7†4`ģ­†Įū§=)4s¹XźÆmļžŽ lģ̌ļŲĄéėW`ŠimLwĒp£cō¦R9ė½MjīŽ²s Ü“šŌŌ]/`¶¾¶år½ õŖHN$ž…¦x€Ü¼\*¶#LpµēŚĪ’ŚPČ_CHĪQ±–—$ĘmķŚµģõmD“³ŽÅa¾R|ɃœKĻB;~ˆ;?V{YെÅ^ى2H~žµŁĒÆĒ$‘ŚČHÜJį5D…u,ʽä†Ēj’ÓMŒĮ#NĖźqš.—ėvĮs-ÄJ6«x"µ“kʔ,†8÷(Ą ‰@Ūó­™Ö,'šwīk‹Ōµ Ū;lj&K;ŠåfęØm`Ģū_9äńšėψ4ēT2$œnēļP¬ŚX-.\Ś€2kś4·»y ¶į@čĪĪ‚q%Ł#ķģEzE¤ZLÖsŝFUŠƒœ©#Ø ®vy%ķ¬6NŅ7jźĒ*:ĢŌu•’‡2œ–ÉŽ”&y>§o"‰$¶/\Ņ©ŚkśPS¤_Jéw:”åČĪ;Ņ’(į›OŽĪśKgY£wśÓ.¼?mxńQ6īÉćµ`"†„¦Į¦ Ž ¦öx¹WŽĘĪC©Ę‘ÉMsS'a——ÄÄ;¢łgÆ`+Ö¼ ¬Ć/Ÿe(Y7ńōcŠQŸqÅ'Ä…Z½¤÷]OmĪ¢KfŒdģ= {חi^žÅŲ÷WO;· øśU£cmæ³§cšåRqĄČĒ„iŻŻ¦™bÖęO*ŁW)\cŌŌ<ž=pź—;Rēģ±*³ Õ[›K‹«ø¢ŠźŽ7čŅHŲP|ŠfyN±y3Ż;ŪÜdc‡®;V-Ö§œ·Ū@́¶˜*ĮÕµ [Ą>É!bqĘ3^_ØÉ,Z’Ä’ć* zо›öHP<× ƎŹ+Ö|;¢%Ȋž6Gµč`k>gøģzEĪ•[*DW/ĄUĒŌב_ihś‹ß[ŪÄÓ±ŚłĄ<€ŅŒ„ZŌć³m:{™R7v\ņTūW'ö =äHĪÜ.ӎĪiŹ@QæŗžÅˆ-»K(Ā ä“ŪšŸKKĖøvÜ2E>20µ@ĪŖo$ŗD†fyԀȶkÕ< į›oJÖ5K‹« 6śŌ#…ä;ęAéļXNE(ō8MO\ūD§K1\žōĶ1ģģ!d0Gä¦NŌĄÜjBQ±ƶéw`ĒŒb®ß˜5&ļ8Ž‹Š»õ[“ˆéöńĒē3D§ēu>Ōŗ„0j1>ĘTaĘēęy…åµÅ³Č¬ĄØ$ļŠŽŠÆž`!'dņ}ØĖS¤K=°…Ū§µI ‚Y\Ēq$¤ŖüŪ…e=Ė/½ķ܋$vrlŠ\”ļUÆ/–ŻLŽˆ0>_šØŽy®cG’tfŽĒļ‚j„Ć$ ČĪWssRÕ¶ ‘-d(”KźIéQ—H•B•ĻLb³re(‘ƒ;ŪŹ§9QVģ`‘@ļ.; U°¾·¹ŠFÜHėzšĶwÅśÕÕŽ”„{]»·¬‡å®ģ-ŻCĘuÆĻv±é·¢į šĄ’xĪ2Muß ¾ |Bų·ÆA |5šŽ„«Čć2]Ē t·Q՘ōW·JŽy×¶‡ģĄ?Ų£į·Ć­kĆw?.”ųńZI’;=0‚–Ńer \aˆ"æMm¼āæ źöZļÄiü5§ųfĀ\&…ØVŒwڽ8’&·K”ÅR­Ģ’üE¼ųµ(Š~iŅxSK@Ėöć‘3ĪÖ'ƒ| cąd½‰‘üWćYŌł“FCy ž»O×kH™Žē±ųAoļa’ēÅzŠ–)LkµQŹ“·5»}ć~"KqąXna²[Ä’|„öXõąWT ;ńž>»q”čMcāv4Ūh܉;{õÆIž$ųžņK/›ķC²Y-žĀóvĪ7c?„Z&[ ­xƒQ 4/jOee Øw…2Æu'’®k/Nń‹X“[Xu»‹±ębC¹¢”ć•cÓéŅ„Jä’/V·¼¾ń†·‡,U2Vņ·@xĶ~i|gż±¼5ąA4?†÷vš†­ >c_Hv€ąą×M*f–±ł‡ń ā§>$jŅė~-Ö'ÕeyLJä…[·½y€f%ĶŌŽ˜$`t5ŪŲ‰¾…#‚§G½,h®T©ŽŻ2)œU^ę2® ‘Ųö¤K31P‘•ĮēœŠqͱѦ·*½õ«‚',sÜMƲ4!µ,”©ĮĮąšž m“+į’R»@õ¬li%sرŠoŁĖ 9&‡Ā:ōųóY¹&ĪŪP½Ū‡ »>āN0HtļNSŠøÓ?JgÆŁ--u?Ä_­¢xT¹³³32ē…e’ż;ų¢k~“±‚/ Zų/Ā2Ćū¤·‰błĪrņ+’„K4ŃņŻ“\Ÿi6ZzK¬ź7 Ń[<‡  śæONjĘ«„źŗ>¹<ž1œZĖ Uh„ł0xĒéQ Ķ$ō:…Öuim.橌IhĆ ›UÅsĶ·¾Ė§ŻŪC¬ĒćHä"f’}öģĒ81ZŅżŒīr—ćÄŅ]ÄŽ YmĪŠźŅ\uČõ±Ŗų§U՗K°šÜ6šzʁ.¤Cž°ųõ?Ņ¢Rģ2£Eįæčīײ_źž&gi[å_-W·NsXr^¾¹%ÄÆy¤*™"SĆū£Ž°•FiŁ‘§źīeµšī”f‘˜¤»#É £œqķX—^,Ńü1\Ż^ė Ć"ØR3ŠćĖ*–;hĮž⯈ž9ųvŗn„SĆŚ£1ŽŁ62€}}03PxkĄ–×Ó«_[ĶŖjĜIüH=ó“\5«ŪDzté1©šå<(+½gS½ŅVhćrIϧųWm¤EįoųwQ³mi­b·Ž@ĄĖ <ōķ_yVĒēøy]ZŪźV:Lzk^_ģ y‹Ģ1Üā§šDÉā—LūJ-¬Qs+¶K2ē‚=Gų×)č)v&±ÕķtoŚŲĖe%Ż“¼Š_NÕõ·‡ļķu=.ģY¢žļ“Ÿ¼£Ö‚”ž;ųcž‹˜åGK«ˆÜåœÌćŅŗ_ƒ:U­¦Ÿż”&ņ5^p@ĻŹ—26RgÓŚ×Ä[;½M-^Ć *| ąc?^+Ådż u­sKų~ńĒż—$޼²ZąĒĶÜ RęLW:O|=†ņĄYچ…ÄÜA^sai©h¾*Ó4Ē“6öóqčqĄō£.„r½™ŃėZÉšÅܓ 5]*ჶ" ±A=ų×[Æk1|JŸO“[Ėh4gŠ3øPvąÓÆéVęNµįk-#NŌ,4N%½‚#†Œ ³_?j#V¾ŗŃģÆ4ū‹¹X0yIÉīķ@”Ę]ųjqq§łJųR"ņ†pLā½K@šī“ą‹ ŽK…}FVf’-¹([×µiŠ„.¦SėšĢ•¶kqc’HtŻž8ąń^IØhĻżŖš–Ų~WżāŹv!ķÅmĢ„¹ūū7kšmēƒŚ5“²½“…#†Ł"’Z;ß­zå׈µkĖ{› †6.Į·¦ć“ąųULåhüśÕnl¼e¬Mݤó4SH»ĄĀ>Ö#"¼J? '‡µ=CūYQn%%†~÷5Ķ Z“imØXųzāŚņćż=!aä}ļ^’|Ėā O]æ[tŌ.gy‘Ģ ŒIźoŹ j]ū;•æÓnlä‰]TŒĘ[‚¾õõGĆ(%Ö¼m§®–¶vDŗ” ĘÓĘsī9Ŗµ#µŠæg?XxRĒYŠģmģ落łŹ0[ĢÉĆŽ•ĮiZ#č*č7בLŪĖnp2}3ŠÖ2Šm\µ„>ƒ†°tCØįŌt õÆøŃ2ĮlJå° ĻJŠčqgéχõwæ“¶”üžlAžRQŪśVē–¼…3ē½'—$³²Kß<ŽY[ź°Ø"X¤_•—”ćńÆĢϊ’åš_‹õˆšióÉēA’kŸåŠÅ”RæSĶ-§Ž=9؃ør}«čŁ’Å©”ų–źšŪ'…µ\Zum„ź¦@©’¾‡£Ičl|BšĪ”c©kz]æŁķ|Ggp²A)BJį·+!ėĪŃČÆķ ž sūei_µļģĮ”é>9Õ­t捇ū?TŠęM¦p£ ł'8` äō;³Ö±zĘĒtcsō#C¹øŃo>Ńŗ:|ĖĻ_q_`x^1š„„ūJ¦ā]є'ęR1×óؔAĘĒ•~ѳg…’iŸ€_?gļŚĘÖÅ£› ¶‚ö—@e%ŒžŒ¬Ŗx÷Ķš/LJ¾%ų[ńĘß |{§źšW<7>›~·QąŹˆēd¹ī ć”ėČ沄ZÆ~~_ēĄę–ēͲy2|ü“»ūÕWČĖe‚•ÆF;œ“E„Q“m ĒLŅr?ÖǵˆŖ”Œˆ¤ Ø  zdqQĒĻó.FߘÖf±ģOyY żkU>`l8ē„‘Üٲ˜ÄĢņ9ˆ²mć·l×ō?’ņžŚMš_āęæū üFń ’Āā“öµÓm[ką9Dbq— yi۔Бż­Ä&ŌävŻ[±Š`\wśW+©XĆö×°ŌŪ[€@Ļ uüėĻŖQł’ńćĮZž­Ÿh†ŌōÉ.’Ėh‰9~¾œ{ת4Šįń‡­ų;Q³:”LmYŗC!¾½?*Ā=Š?‘Śæį|>.ė}¾˜,<1©L^Ųŗ“r=‰ė_(_ĉ$hŹ”™Č_s^…®qÕ(|ŃÉ»h ƒ„iĖ4.‘°MÜÅtGs…”ĖłŽ3žĒ5wĄBæzŲv+$lņ8Ę[=Ę­[xŁ‘FKa€<б+DĄäzóSNÓ2,Sˆ6:g҃XK”<F]d ŹWŒ×»žĶ_µĻ٧ć׀ž+iw >ƒ †×X¶øBńMo! Kzc‚lRźvŅ?Ń7öpżŖ<5ńį&•ćÜAöĖ;+xõ&…Ä¢āՔlø :ą`¤q_{AŽ‹böśŠ]Įp‹sm:6C©ä`×ht:c•įŃm,ī®ī‹9k…̹ć uĒjüü’‚žČļūT~ĖZīįųd›āG…ć—WŃ£ ¼źŖ6ūm½Huąz2Æ­pMµ~]Źp?Ī«Ē: ų/ÄzŽ‘!‚!£VĮ$åN{ƒĮĪ ŽŅd–.Œq]1™•Žŗ¤ó[¹e £ØõéNæ£ŻĆŖŪŽ^]Cvb jP 3g M˜ø‡>›w źS:Äņ‡ņYdįŗżą=8Æ7ūV•¢ßÜŽYš„R‡‹cXtŲ’Zq“ø“±ś šĻÄķāOiڲɵՏ;†3Ēć_B蓹@alŽ éõ­ĄģŚżåY-bP#a’Tõ5ĶŪ-ö›­Ęläø’ŅHŻ„‰œ•-ĒONõ¤ –Ǭ¦¹ģ²ĖpĘ ¢Āb­^k^$³²Ņoį†Xķó±½ Y…Žb"śf±fńHÉåÉ»”ö5ÓÉćcķŚ”18X§Rø Ó= ¢ŽHi’K!‘ŹFĢIjŁÓeø²_³¦1Ÿŗy e’ķwI%bNk[ŁēšFxŁĆžZ€:}1üĖRĮL*§zūÕ䓵½G3“ėŒŠ4ģZŃtuŽžIw‰Ą@qŠõ{O–ĖGšņK»åˆøMŻHķš Ó8[MBśā(–iZŻX诮£HŅ Ew©}­E¤hĪA#ęĄĶ–Ē“Zx†ķuĖ›¦e{BHŒČėÖŗ=źyDāfīXg8Ÿ„Re+;;}2õī ł'<ē5Ś}¦ŽóO‘ā*'Ą] uõ Ų‚=JēNO³ĄŒ‹·Ś±nõ÷Ū€ĀF<ć€(oĆ7wözŻ½ģÉsi& `Æś²:äÕ’<··–ķ<Š-öģłz ņŻcJƒO™ą·Ÿ|mŻz ‚Ę9!Łß{dćžqAt÷5ķÆeL’¾ĻÆCė]ö•āK»8”å§ żćŌS:aßČū;nq•üéŲź‚čs>šßŠ.ī@Ļp¼ 3^£įĻ jZʵaŖCŪHŹÉĪ]ćÓ„+›ŲķåŠĪÓOxģģüĶ[pŚĒ£/¦{TŚæ‡“}j-*ßPŅ¢:Œ#vüry©s"R±%ļ„t{ė(įŌģŅź(ĻŹ[Ŗ‘ĶyʵįŌmaNމ øv”ŹåĀLQ„„,¶óÄ^72GOzäe°™ļRß-.ņ~Sޱ”MћÆmµ†Hį‚4@„wV߇¤¾H–1»Fą;UA “W½Ō`Tw0gų»Šæ;Æ~Z|į@ŚFHŖ4ƒčQ¼“ƒOŠY¦Ā*żī;׬ųĪėSxm-žĢ˜ IĘ šGT6:æ “öxĮłū“ȬĻݤó“i!eįŸž£Ž¼ÜL¬Ż>yĘqE•ćMJoäšO’hŻųńQżŸ¼O?žy§PŌ6}Ŗ)lYćzž}słŽŃæį/ųńūKM¬x‡ÄGuā{°.® © c<ąå^=It?Ņ‚ŒfŖ½Ņ·Ččž$ųg^ų?ń9ō8jž»ų·ā VĖÄ:D«u§_ŻŠŁ(Wæ@1YÅ6{˜ŗ5Ż { gm=O¦?঒µ•·ķmš›Lų~tĻųB¼5u&س:·™{rɰŒ _šŌ-t©x`Hn:  ŅzźĻ#ĀĪ–G”ÓĮ7y')?YIĖš½¾G£üżØž!žĻRź2xFŽĘśÖP]ąŸ’Ļźj„㿌^$ų×āi¼uć‹e×äAŖ¾DQē„\ūõ~—Ö>“×½±ĶĻõ¼6ŗ‚Er™éŒć5é’~Ć’³Äļ„w>4Õ5)|'ćĖ Ģžu…ē’÷0B4yĆ3žõQō>Ä <šXŹQŗ½™šwˆ->ųoQ±Ņ>xĢkŗ` EtKM Ąį”’}łōžÓüAįŁŪUŗµŗ·¶ša,nAż D©[cƒ†3yUž"µö>Õ¼ywćŃćø‘®¢±h™²Üē<ž5öĻĀm#Ā·ŽŃõŻĘŁ‹Īą€a˜s»=ēõ§ YٟcVŖTĻŅ[?ŪWĘķš*…ß²÷ƒ'ń'ĘÉŚK=S]hvŁéY$y­!ūĪ €8äóßó;\żƒü7į’ źž%ų™ńļūsā-ōuØŚ[”‘乐ībĝģrzšŅ¤y•Ęų;*§”fx¬c=jņ’ĄaÓžMłįāŁĖĆŚF§ya©AuÜ"$*d¾Õśš?ž åū ühų3šOڅ׊~üp×|J4橣ŻI-č¹É¶e ĄĆאxž¬~ĻĘY¾3 –¬fZ¹¦šmZ÷ŠÕÆV—ōĪóö”’‚žŠt½OĘß³OÄŌųå¤Ł(œųoU·ڤ±¼°:žīVĒ8łIĮIĄ?’:6¹}eÆźžńnŖų3ĘV˜o4F†ęÖ@y ŒąÖ°īŸžų)ćī‹hŹ›²ÄÓų”}×xõjś÷¢M=ÜŠ’Ą²ļC€vž9żp“„Ÿ“ŪÆźZ•¤éńÆ#°’W'˜ęLzÓŠŅčū.3Ä’¶RQóžWĢś‡įļÄMBĻ[°7I„jÓŖJ“’»¹ķ_tŽü?ų}®ų‡Ć¾1š®¦éš„‡ĶÄ?.å?) ?łV“`}6>³åŗ>—Š­Ę…"ÄŠO“ćø5ŃZxĖNŅ.ćMfE·ó²7‡üę½zJĒęēĢŪaā­ ,ŹjÖn“Y̽³Yš£ž·§\ŻµŹŚ_$įŠ÷®øŹĒĻՊ5µģōķZkķ:9mģŻ‹ ǜžkŁt„Ńę›Gø¶æó•¼«’[††d`Ü~+׎·ę<šōś£ö§ā?…¬h?Ł›Å>µ¾Ć]šįŠ9¢;‰¹†^ż|Ä^õü±©’ŽŅŽ[Ȟ;¤ќīIcbŒ§<ē*zŠ~ą å†ÄęY_Ł£WO›”_įR±Õ-u<ŖHʰĪJżk§AŪėé\ÕCś“ PīŸX‰ü5›…ūO›»płqҰ.¾Ā_§Iø|UHūĆóųW$©ŸIĘ*mHüŹų³įūßųĻUҧd•£˜¹É_§ā hČmī<-£ź¶, Õ¬¦ß37FCČĻÓęż+Ī« ;±åµ¹éĘGÓÖó§Œ>Ū]«Ēē¬Aƒ/;š+ä/‹zTśf“gćKH%¹BāŽxĀóž0sų’:Ā2čz“=ēöiÖ“4Ūż&!:”€Nѓß99żjļŠōūvÖõ=2Ļ‹dēśžU¤LYöߌæl n׹w…“ hŗu·ģ-Dj†_+”eļŲ’jüü[ĻžŅŽ"Ń>.ų^ŃtƉ÷ń=§‰l•€Eŗˆ…óg# ¬~]Ćgf53Nīr×NIj—{§m{w–ś…„Åę™}šMŪr R£ ×GŖų×Ē:džęšß‰ž ų÷ÄŽUŚ4ėżVi­ćQŲF[ż£ŽĒé•ņŒ6&PzjNńŗO•®Ŗū?4x–æ|²ųGXšä%Ņ/9.`$’«d‘łŹ¹ķ:ż/,ˆ’ćŽ{×J§ŅR§cXys 3Ųę“-"XFČČ ž€b¹$īz4Ń”ń ĆP¶‡į]OĆś½”é"Éż§nĒēˆ†!vżxÆ?Ņāx~iä ę”:šŲźąivź©p­nZG·¶žŲ5̹­ā„Éį–×4ż>kĒ·pnŅ!‚±Œa’?å\†½ā½;Ę šÜZ“Ņk–2\+`²cå_ĀŗéS²ŌņkҼ®J³e®“šŪž©ć_ųÓSµ½ń—Œ|={m:ŹBŗ¤{h yŹ£n’{fæ›Ż Ɠxy!ŃxīŠ,*Ź0W§V:FĒą^ ā18Œē=­Z-Ab9#’n+;}éüĻY°vDRøŁ­;ˆ­u(ŽŹźŻ%·`A¹e‡ō+ZSŚžŲŸ¼7ūx£ö&M+ĀŚæƒo,ntŪ Jv“YŪK!“c)1‰·łė¶ēA³Óć 1 i'ų°§^æ2Šģ|š$Åc±Xi6ńu]Y'²“I;z»æž‡o¦]éۉF®«OµP…ö³ØüqS~…‹©<dB«ŲÕ nBķVŪžs]Uec¦“Õt&ѵ+-nä1Ē'QŠāü-0ŗæ‡M²U&_”f²«±äV«©OćŌ¶^šæ„’%’‰åܑ»ā\qČ׏ÖļĶģm+ g'=놫×C†^ņ>ÉųQšÆÄś†•Ц“šž«la»ŠCĶŽ0Ć ć½~jžÕ “æ?ÆG…Æ×\š'ˆ‡ö¤‚@ßg›qŽ›‡£ė\“g,°ģ“ĆŗŌrGoĆ20Č5ŽĮ{NŁØĻ5”ŸcZåg]¦J³nóŪŚŗ+©xՊ”<} -l{tˆbF¹Œ‡R?:ŹøŃH;Ž žøäÕ§cwLŽłn¦··¶'|q)ŽŹ+Ҽ’E`Ń>@Ī0}„Rfщ垈‘xĒU“±UžÄyŒŠ€ēkdēóā„ŽÕ"œ¤ģ^„zW$÷7K”xĆnvaTī-w± p1“\ܬĄ‚+HäGFł]zž;IŲ“(FŒ÷­‘¬ +I&ÓU.e·fĆrq\ōi©xŸÄbĻJ³‚)& Šķl!Ś2F{t ³ĀŠX^é妿‘ź™NT`óŸ­[¶Ó-m?ԃŠm˜1ŅDŹć ŸĪ³„±¶³>Lī˜†•{9õ"‹ˆę5ZćQք—2M<«!gbpŖ0£šWSi*lPø¢—r&lDP–\©lqšąµx ÓīŠĀ©aœ(ļG9Ķ3vĀexĘAĮ•Os¦ŚÜŖļ0ĪŽ{ŃœĆA=Œį§&EĻĖŪŽ“üųŒo ńļČ«¬Ó‘īŁžnłė\żŠ ®1½½JŚ9ĶiV$7ÓĖŅɦV|}ĆčkѬ|3ØÜ2Kp’ŗé·®kx@ä­P飚«Gq²S•— —>T§°lvé_ŗ??iæų%æ‹|-ążö”żtÆ|HÓ¬Ņ[ŪM!.,nö€ ¬‘H8Č:d÷õ°Š 5%{­<µž—ĢüOĘÆ=Å`#żƒY¬]Ż®­ß˶Ē’šüĒā'ģż”xÓąĮ-ĮŚĪ­Bmļ“ż54ł'ød‘"ŸCÜ~ž'ųū>Ļš«Ā:ęƒć WBų›4!Æ“å—~Öī žWN*+·ƒš—Ä4rśxl{sœj8Ė›V”nļ]Ÿ‘ņ•ēĀoZ$·ŗ özā‰0`-±öx`šä$½Õōé%µ×lēŅ.öā_ŗ~‡„xUiÓy•®^¾ÕģZĀHäyŪAŹ’ hųwÄ„@%I²R{Öp‹¹Ö{·„”ā{Ųt:–ņU%UO$ŠÄm}į%™õkYķą±}OjźƒŠĮѹĶé‹1K«WY!—ę9{WKę«0Œ-)˜ŗorĻ–ÆøŖØā¹/ų+U×ü?uāM1fŠĀUß!^'’¬k'‹•™>¼ jr‰Cß„vv“I 唑Œ·š¹¼ÖŌ#©?!’h±hŸü}„éč ³ūI”)>½«+Ć~,Ņ“¹ {«ynž'WDE,[=¶Žµöx£ü¤ńĘė‰ń«ūļņGčĒĄæŽj¶ķ®źksknČÆonĄƒĪ>šüėō3ĆWŲx|F’¹³ĘvZö)£šÜd®ģA¤-“7r¼×ĖmƧĖķ]Ō~ Ń#€Į+ȗ dÖŹ ņesĶnz{WwąĶ3ūmoć.»°Pr¤ż(f±‘Ņź¾‚õQTv˜°2óĮ¬MFŅĘq«—9ąÖ6pŗĪ}<"H¦P¼īøÅxÖ£ks§Ü4q:n ŽH’8©”n+żŸ„ģ¼E„“2Jm׏ŚpEtZ|:g…`†H®V…Da›éėXµŠø>„š—ŠĘ¤6GķD€„:²Æµ|įŖų³L›Xø²–pˆ³˜ćēļ{’:43µŚč³mÄųžyĶkĀ]„źv*ˆģ÷[rĮ䐤WV)F矷‰lķ/žÕx¢ŻĘÜ’į].waā$¾=ˆb,BņsŪ>ÜՙŹ69»’ŲčÖ_Ūī±#HŪP|ķUZójRźŃĮ6*ÖŽ^×ćiœ{ŠAŸ¢]höZY¶•'„dmRxŪų×ā-}ķ’yÅ×qĘą9 LØīyŌR]_Jd‰ę6ĪŪ¾a÷}«Ö<¬ß[Ż: å1½··Čßżz–l¼]ŸV½iŲMä¾Ą0Ć95_Ŷ-y¢‹Ø<Ųå !¾mŻńX3Ó•組IøJ2q­ Ē—¢Cē:óµG'éłPc)XääšÓWŸa‚XŁ…— „Vśi7Q*»Šć÷|’ LłūPæ¾Ń¼CwtL’ ų9‡§ė_BiŅ=ՍµÜLČĶģ0=ėŹRgŸk–wėv—6¬#*Ū›+Üt¬›•¾ø0±Jœ¶Ž*BR¹©ån¶ÄŒ(ūŽ•gGŽ)ĪŁŪĻ?ßč1“eVIT“p ڼņzV^Ÿ%äź Äb3’iĶ%q5-4\FŪvē8õj˃M›JĢ”BMŸįąŠj£cwM»šźfI7»A'„Qń>¼#“6ҧŚ;yėJQ¹¤Q‡Æ&‹M…„‡Mh%ßŸę›Ø[Čćk©ļY4lsņH®ņp3Ž’]ę,ØbsņöŻRD˜Š&‚&ĄėĪHžU偹ہ‘ڳ‚O…ō©­’I%ß  žOLā½ÓĮß³Ķž¹ncń…夳åü«ŽTqü 漌N%#Ń”K©ķ—Ā’ų~ņŽßLÓ­®d9ᙀźGąx§­ž‹§3Ķp^@q•éŠń'79Xō#¶µńƶ6Fk ±4!pKz~uņƈ>!^j׌­“±lIņ¶~ų#Øčį0ĮĶWŗ„÷Ku{#ģ^P¾Āµµ­>”m¢xrÖ}KXøo-Q¶I8ĮĒzöéį’2•CōKą/ģ#®[7ÄŚ ÄŽšĀ ”é$…¹øĮćäćóÆÖ†~’ĖĮך/Į/ Ųų+Ā*‹ŗåWd÷ žÆ!Įüė^NĒ$ŖEų§Wųf4ķ@š?ƒ#Öž éń£M{īe—oĶ“ŲMqĄ>3Ōu½+\ńżķķ•Ä2yńڇźOš¾zž4Ō;™żkį-oQÜŲŲŪiz\¹ŽY@īć„oéŅ|jŚž‡ż„«ßĶū—ŗœ–Ć’°sÅtFćµ2_ üUq+$,VX&“Łķ^3{ć“Ō5y¬ü9”ŹśI}Ķ}œ=’h‘<ĘŚjńĻĆ:M”Ņøo“’VVlgļ~_•pŗ®„˜õC^ŌĢSŹƒÉ‘³Ļ9Ķ;īĻÕ|`ś“¢ÖŚŻ-£‰0\& ØźĒükćŸŠßµÆ‚¾=ÅÜÖZ–©ęł1$Ē~$Å“‚ŗ)Ņ£?'hڟāOĒ=nö]\DŠP†ŽŻLqūŠł;Ī–@ČĪOLf»£•Œ„3:ęF,qŠ8e%ƒqšfNDo0f*UŗQnĘ%>P*Aļüč1œŗ!]ą“‹¹³É#­X0"ī‘UTžĀ“v2hO+˜RXōj_nÅ$vļK˜‡CojdVWŅŗż;Ćģb‚So,ˆßtĖnĄY2ā®}ĖšöVńLj|_Z#ĆžņRfiaĮē·#ŽæFüšĻCųs [éžšō·—Äļø¼1ēĶ ä²‚8ĻQö6:ż2āu¼ó–Žā’Yrʶį2YŽzß5W\ń‰üw§^ų†šA§§Łą°ž6B£8ŁļĮü…sذ8;ŸbŅ“=#JµCʳA qżćśśŖÖ„m¦¶ƒq©źŚÓ¶²’ƒ£ÅŸ0{7­l£`lčü;į¹µū6‚å§Ń“ē‡zNä*·nGOjį Ō4ķ%.“t·_N$ öØć9”õĪqßüā¦Lؕļ\˜īoī a“×ė\žłƒ$z=“Gœ;䞤×4ämbĶŌZ[ÜÜ Oķ;ó…xć|†>ÜÕYķ4›‹{ķ_Ä3Į¤ŚDD†"po8ĒSXJ¢Fōéė©ąŽ%ųßu4·šOĆxē¶»ĘĮzƒäS^¼Jóˆ<=Æź §ÆjźzƒåŻ‹ī*}1ڹjM„$zēü7ixvĆĘæ ķ¼jļ@edČ,½@÷ÆGųykiw2ZŚ‹³:ˆ]ą~#Ö¢Rčl‘ēü3yį{ėĶ@i·¤Ķækœ€O±®Ąśƒ_āK8]īƒ0 Œō’õW?>‡D#s1…©ŗ6ąüŖæŻ«»ŌüsµÆ›!KöĖPs’=iøŲęgΚ•ģ—Ś„ŅŁ@"ÉÉŪ€3éYž$ųQ©Ų[Yx”źšĮŹģHA–Ēā+)”rÜä|Kc«Åįū«EšEŌ6o·lpēŸŠ×'eškā'‰ēŃ4« IõųĞb± ĻsėD{6wÖß³†æšóQ¹›Å·ŃOtP‘Ø «éšōĻ_HéØiӁiø|rGēT˜ćĪ>+ų¦ūĀ:™³¼ó§²m8sĻ©äW §Żæ,SR““w€KķąCłSF±‰OY#KŗÓ­oąslÓ Ÿr’güq_AxėJš·ƒu榔©-õ–£m’”ĆšĒćC3q±ó7ğińŽÆ£ivbÓ¦n”Ć1ļҾ~ń‘«¼ńĆq*ł˜ŲGOzĄpzœŖ‘Ē“E½cŪ4‚ī ²łJ3Œņõ­!±Ų™÷7ģõń,ŻÅoįVś?ķ%FhŽCź½óĻ_OZū üĄséZ[Cž”ŚŲéŅ5«Ü€#صxOĒæ‡³xĻĆāź¼JŅ0ń-(^ŠkžZń–§ę„õ¼Ör“s¤–ņDs6ō*U³ėZZŒšŽ™i£oēĘĖ$o°¶0AĻéStwŅ‘ö¾Æw’ įĶ—Ä+;ˆäńž‘ÅzŠ˜kˆ±€ŲźMy·Ć?x«įö£q¬ų'Ś—…®n.U® 3:ƛ$1š¢Ē”N§CūŲųā=Ä?~ź:åĢzŽ”&nMŹ6ļ8l“ßöĄŚŚėįŪ°bYņš’>Pć·¶sYŹ:–Łōg‹ŅįĘęŻäŠXŽå+Ł…'ŸšqģgŽ ż·¼¢Ż AbŠükäE¹ Ē\H:ĮBܹē“uĖ%Ńžz~·ł•äoZŅ®-¦øf·ŖĒČen„`EüīHčJōyvc9\–S‚¾ƒŒUY ¶żžøĶ0;uCŒõaüŖĢaÄ­)?603Å!hµ"eŚĄ±Ś¾¦­6%ŪrFӎ•QŹLԌέ‰šqĒ^µŃč~,×¼ā āƒ®žĮāķTŌl¤ląŲ£z\ß9­ˆ6U-°`õ üĄwe=;Šņ+g” :Ņ34£÷’1qÓ'„”ÉķŠøiĢt«2øµ¹‚MŅĮ*ģd=Å#®”ŗŅ·üGöÄdƒWżŸ<_kouØčq²§™.N­¤Jv¼^Yä“gŽÕż~ü ¹¼Ņ4{†śåå­ÄŚl­>‹$lO§± €ó“0‡5…twB]jÕüč.•Õser» qūU­O½ą}FE–X· 9ūČxäW›8ŁŽLž$æą¼_±3üųę’< ¤éÖ^ ńhøÖ,ŠĘmo››|tĮ'Ģ_fĒl×ó¤¢źāŻ.åGBFv‘ڦ”›Zœó)@å®Dk1Ē_„Iö›ŲohI.bnž[Ś“0r=Ó@±Õõ é%“cļ9śāø­WIŗµo:`ÉĮOz} ū$ų½`ų’<w;CgØC'”Ņ>åßĻ Żė_£&K}ęę ‰}ƎGėx»ŠŚÜµ„j4¦`؈qĶz=Ö-œ/ŁņCÖ¶ƒčg)t3ļ“ūI£?*æSóz×ŗmŽœ.d•¾`¤j²fā2zoa…õŖZvųšī6u zPY¦O¤ÜŻ4WaŌ°ĒŻĄŖŻŲŁŲßÜIĮ‘°»”öŖŠ™€ŠŸl&BcO\d³9O“GlÓ*DH7ķŁlārdCRZĢžŠ–ęż$`rµ!5ĻŚķ”v„’ć$VŒŚõÕÕ³¬ŽUYpŁćCc{ÖiƒE‚q޾ō’źæ*ZneÜq׊Q—ż–žaCĄĻ9⦖å-ÖHmüĢ)üØ 3ŪÜ\éĖ-»sķķ]/‚tBņ[e”*@Īz¶(·ÖŅĘhTD²Ę0@ė^_ŖiV÷ Ü¢¹‰‰ążźŃ²½{4±]Ģ8ló]ÓÅ„””¢4XžXŠšź¹æ4gfQĮ­Kh Y•# $`sž†‚£¹z-&ŽźR8Pqž•-Ģ÷<Źb¶IķÜlf'īŠtĘV6ģ¢RµN §µÖiVGgsf–É R0aĒLz~u§9\ę]·†Æ"k˦xēc)#īĆjęym,ęIœc=0k3#…¼›÷hšRĄ6޼սk réaŽędĄŚĢM4©ž»©ųWGµŅ[P:“vWÉ™²WŪēEµóäŗäĢę¤(‘±Žø4ÜY×Ҽ ńĆæī浓G…„–eaqœŖgØ<ā½óYžĢ½EŌ­#ŁŖ<œäz–%Üē,ķK§Ś˜@Xäw®n/5ę”ˆŃI˜`‚=«–|A®2Ś³ĘøŒqėXŗBŹ7ó9;F”ĪæSŽ+‹Xn=įĒäkĖÆÆ“˜f»O1>Ż åļėY6ĶbŸC³ŅQŗ¼žż·Ę\:’0R““Ēr:3oąšŌµ}Io¤KØŻžE1Ēü$õ®Bc5ÕĖÄź"ĒČz`Pm©»āD¼Õ4–±¶† ²Ģ9\uéžzW yš’P³H.SeÄ.~b½V¦L¶[…¶µµ –AŒc}kĶu;mc]ŸU²Š£[MQ™§©Æ'%k×Dģ¹<ĆŒžH(’ąN’ūaį]A[Ćzœ·±ųƒį׈¾>h:Ɗµ[WÓ5»v ¦ČÉøīSœc0:{××ŗķ†ńž ń«Ąß#±³Ņķ¬nķĢŖŲM+Pˆ‡‡rŽcS*Ęć8Čž!N)Ÿ•ų§ˆ”0«S’—u!/¹éųŲžnægĻźZž“e”(ŗŌ†Ųä!³»Œqųƒ__źjņEi#Ę7*m ŗ}éŃø ÅÓM“ų{Aֵ˸ķ­PCmvھŒŗų%ok„„Ćj÷r„ Ź9Ļć҃Ŗ¦2+Dy¦»šƒĮŚž"c}§–Šä«śé^1⯃"š“Ö“R?člH’’Ā;·AłSHēXäō*ųĪńlzŌś|2,v‡s+tś×¤iśœš|łgĪŲūŹ0Ź’=Ei%mQŏQÄQtf®™š'Ä߅š^¬ź^'Š/n¬®ī. ĖĀŖ6G!l’+ZĒĒzåę™ŸuØ\ܤcbļlŒ{ ĀuŸĆ䐦­gMńõ¼®ń4™<`ōÆ„¾ Żx—Ǿ%Š|aāɼ1cu7™w,rm"%| õĄā¹ż”Ż*Œ[–§ŌækSötѼEšS୧ꀩyµ›¦‚G`\un§>õó§Ą=sĘZÖ½½ć­kR½·-ŗiī]‰`O%‡ē]1«Ń/–ąa μ׽#ķxzXĖ ¤¶ÅĄ3A.8lz~UĻjÖņY|)šN©¦źYx¾ĒQy‰…ŠÉm,dmaŽzä‚+xI=Ļ©¢żÅ~Ć~͟šU;8¼#”h_“&‡©¾­o†mOQ:€óC×=zē;·×ģ/š{ž 9šFŪćÆĄ«Ż7Nųé§Ś=燵ėTmT É±½®q…-ŹŻIYEIr³üėń‚qŽń->#Ė?Ż%;Łikė*o„šæ+ķēł”ų-yā¬LZž›5¶©c;Łź²ņgFĆ#žŽõå·twWtÕÕbk+yō{;›E+‚Ź}xäVĆ»čpfõćVµ*·čĻ(×üaećO…ŚĘu§Źum,+ń*.?ŖžUó߅5×°ŌŪ*wŻ9ąŒWŸ3\’“’]ĻmŅ|Aö[ūåÜ+ąšy5ö'…ük®éŃč–z‡– ¹Œ±üŃīł†?֋>ņ#R.,żaŠAh‰ł[ž¼c‘ż+{ItķJ[9~Ö!Nx5±ąÉšw7ņŻ$6÷)Ź ƒŽŽõÖxvę6ś=ī6ē āµĆUh~ę~ÅŹ‰š+HXYšÜ_ŻĮžߊ{Wį§ķ‡šõ>~Ńü5”i77iÆéŃ”-žp7:óĻ÷Ŗ±üµįŽ7ŁqīaBNŹjV]Ś”_åĢρ“É’±õżF ¤sH\`ōšöØÕ„XĘį·µc=Ļė¬;&x&†å2b>µŚųÅvž»‚śöo.Żx~qÅsɞž‹šå>TżÆ<Æį;ϊ~Dšh%V™£¼‘g'?­|ą©æµ|½4Apœdą2c5ēÖßCõž“Ž’[£č_ų‹KšŽˆžk;‰bRv3“zU/Üų2ćĀŚ÷ŪķnŌ±§v<‰{8ćå·SéÓmwšjöo‡6ŗ­Ż“ŃßI,^ZČĶ‚T÷ė^”į-KIń6«ØKwuw–å‡Ī}*ć‰y›¾*ŠžŅ/lTGo˜œvńü«åļŒ>Ó>xƒįo‰|q{¤\ėŅŻµā&P1RHlŽJ遽8­ęŪYžž./Yžys99$ūš`‘‹’Ź ō>õœõ=:TŃĘųŗŅŪ ŠĒø2ūGAŠņ½M²›xewˆŽŽ•Ķ(Üģ„;,1ŗbǚŠß'”U–QϽdՎų.¦UĢ:“n’H\ĄxČ4–¬!‡ČĪĪčDӆpöŪL‡nānXyŽ‹Œļõ«¦µ±µŽžĀó”tŽxÜtq•qčEyŒ¾ŁĒiwŖh+äĢĒżNNŃōéҧ¦¦¢·;ż7ā׊Æ|-¤x3YÖoBµEņģžįĢøž!vē=ń\lģ—:™ø ³ņH=ėIŌ90łm*ŽŹ*<Ķ·ek·»}ŪīoZ¶Õmģ'ÖµŒń‹.F?Zå”ī³å54Ų-µ sĆZ]ģ2Aܻ怚ōOŽßü!¦ü5½ńN¬É„x Xķo[–ž<§‘S£8ǹ𷁼V&ū`'œŪT@#Ø?‘ÆŖ4ˆĆX“©*yŸwo÷³BV=uQ#Xb#1ߎ+ X®$›ģŹ…œņvµ²–‡>"²8o^żŠī=xl|Ą¦¹ox¢āĖāf‰e½UYž1øš‚?@k9;Ÿ5‹Ę%&}ÅØü Ń>&ų^÷Vń‹^Ųév*fŠā4%DøCŽw2¬Žb ‰Ačz갓čD©6›uw Ȉ‡I3śW”^]Iy¦ĄL‘°^H“IKK4އEEŗŗĻˊź'²ó£X FéN'lY‡&˜±JQ±°ŹÆOtŗf›4¢qćjs˹Få¦q0ęI%¹ĪYŪęcŌÖŹŁÄ Ķ×5Ķ(ķÖ.LœjæŁ£`Ä®OAŽÕ•ŒĢå‰Õœ²įĄ«ń:Œ…Č8Ļ„;S}¢Ęö[»94Ėø£¹“s÷Jä«cØļ^ įķ.ūĀZÅĢ6÷³\X­Ō“D7aÜs“sŅ‘”č¶’yŽĻģ$ēėZš‚3æóLĮīhǵ°0ēŒT£OŠGŌ?~kE[<ūÅ:kĆā¶ŠŃ-lœ+*©é×’­Ke8Āć§4łt±”„svĪŚQ ’zŌ—:TZ„& UDƒ”~ąŌrJ]_MIą‘ķd\Č­Œś×Gä6åcü5J ©yɶsĄ®2īÖx¼Ćl 8äZ°&¶µ¾»HR ߊĒÓnāfmgŒ+ŁF<ŒV°¾Ē z–>®ųscˆī“ߝ- OŲN2S^é«ü·Š;{ķ6FėREl¬fgµł¤yŪĒ#×­QžĪqŗŽp­·å(ėČ5×Ųę—,Œė~ о]č¶ŗ¬—Z4·iŗŹFČSŸ¾£Ū&³<<–•$ÓZ›Ł¤ĘŁy;_7C\6šwŠÜźķ4±Ī>OCŚ“Ā6w]Ņ-õ-‘·ØÜWø ŌV3éŖI2ü~żŸ|/įķCDÕ>j×·2I/“‹—gŚłćkžüōé^”ß\YjgHÕā:f±nq=»Œ2š®y-NzŚŻąßj>ń’Ć’Ł ŗŅ,Ɣ_D¹mŠ1²£°×픳ę‰ń÷ĆŚž«šżķ5Æ \é³^A“„GŪ÷¾OåZS…Ż‘Ē_Qu*;$~%ų;Ż3ķzż‰†āĪźk7VäĘUČÆL{tz·ļ;;RœN…VśnÖįb,ā@8Ē­z?…¼aż›`ᇭn+­…­üóŽZyK>ń®2[‡šēŹ1„¹RB±ā]ŽžL{¤y®«Ć‹k5ņ²‚žI!Ė”zųPYØĖüSG¦H qŗ3ÓŚø čL”¦DŅ7 “S'c3ķrj,ŠHĶ»wwÄŅĤ«ąćҳݜņdZ†Č£3aŽŠOJ±įĒjĘŚxĮf|du“åčó=R–ŹīČĻ)gF?)®b+ė(Y#@łOaM+A¬¼'ģnķ  ėšvŸ„8HŽBģņøéLŹIģh3é–W«opĖē?AžXSµÆ Ś]¬sY6ÉJä®iC¹ĮDRĀVÄ\‚T‚:Ō °¼æifŽxZDŹ6'‚žŪĶe‰•¶ĶŽŽōõŌķdŸ"U =ł4飿†Ś8$ŗO‘ĻīÉćwŅŗõhķŁH¶“ŪǦj%ĮašƒXjDfh®Tći®U±ŽĒē™ā|’T†pü*9XXęć·†éä’I@‰0[ž•£r’_-µÆŚD@p™ēŪkA §ųŸKš½å³Żŗ, ŁbF8Ļ5ŅźŚ—†µŌ{­/Q7VŪ7±˜Ē½ĄpͬųBÖ"j‡ÜARĮžUĖj~.Š"½Ģ&#Č­A£µšŸŒ|5—(IBL® ¢¼;š·'ÄÆ ĪņĀ5±Ż¢“†1Ø3öfEĒÅ? ]Ų½„­ė6øœąaĻCŸjłūžæ…4ż|[k÷PZ[+fcę“ŒŒŠ?fZ“ųĻąjśw†5Ȧ³iéķŽµęZ·ķįß źoa›ŻQ¦ņå$!Qė@”,lKūaųYšę£wo¤¦—wenKHÉ{‘÷#§¶kĢ|ńzēÅÖWŗģ"ÕŚb°…(Oėõö4XŠōYõ_* s{vmŁ’x»›‡jń?|A’ēQKH“"=£są–®Š‡:üm}i§Åy¤ŻBŃŁ*枝+ęω_5=e&Ņ“9®,ÆüŠYŠćÉĒ\Æp­dŃ“ēÖ>9ń„m õ–£u³jī¤+”ƎG„Km}©jż¶ą½c¹Ū99Ķ%t(£/W¾ŌŅxa»¤,8>õÓxvÅīžĻØM°\!dFŻ·pśS2“/ėWOyóų×WįĘŌō±5ŅO5¬X!Ź ōķ¦”¤źz½ŖÜĮu2ځ¾C³īSšń}{Äi:üŚ Öbxc‰dū[ ,›ŗ)£ HŹŌ4ų5F[Ū!;°‡†5 ń¬ź-äŽ|`ägšnF‘—c£*LčW$·N‚°ķō½zŪ[(cd·20nūGcšĘo”Ń\öż €¬¬­*§_J5ūŪ½?L’4O>Žc|¼œՋ½É›9}/XÓulSlš:±śV׈&Óō½6k‡’O“)ąd ŠhĀQ³ń 9¼O¬« ŠŃĘō9čzē¦Óō/ˆž.Õc‰¬m¼ą,ī0”Ųf^œx#z„+œś£Ń|)¦ų;Ć:½Ī‡ąMōėÓɶkł2y³õ>µŅÜ[[č÷žĖųµ½qē-o‰#ėņ‘ĪHĄ­nZ—sUŌ¼O{u£¼×Ma¢‡ß y‘ņ>Qõ„Xøų RŹų[E¹Õ4(®Œž{­ Ļ|VÉ)v#ø‡Ć öŽ!×īmõ›·F3Į#evŌžĒŸŅ¾vń4Ā×B޲Y÷~čŒ"ś{Ó±™.£ń7F¹µ{OxQu]^Į’ęGa—#qĒ^†¾jų¹ń/Ą_ t&×|qŖøń¹Ž+&—hQŌžO_lf“„]Ėö–?!¾>žÜŚÆ‰l®4†Öמ±¹%bL:qßæ:µ-jūXø–ūQ’KĶD“ūéKv'ń®śq²2”ĢßxB“ž½M@Uِ«2Ø=»ūV†ƧTżÓ“&ńÜt©cŸŽaŠQƒš&L«L“éQ=ŗ²3*¹ĮÅ%ø bŖ»F1Z+hĪ„€ŁŽ=qQĖ©÷,Ca!XQŸ9ėŚŗĖM {™7L¦+hĄbåI\Tl:q>’šģēć?O¦Į£éńÅbļ½īłBc« zןĄæŁgƞ²–ėć/Ky8¼Å“ Iē9§jĪRču%Šś_ÄžSš±}O[ņ.Ēś4Kå2 ś~U—7‰)Šį{Õ²³X„łĖv?—įMĄNW<UŠõÆx–Ņļ¤]E`ć~ÅÜ’ž••Ŗüµ³0Žéņ0··‘d—ĖÉR?ŗjUKCŅ ‹JÓā¶X¤”+”ĻÖø/ˆæļuėUÖō›‘ Ō'w–Ģ0Ź:Ę†Éu;ž;k¤\źzeµäVóXĪ:än*Csü«Ō"ń%½Ÿ‚5’ÅåOØĻµ„L™eæéA>Ń 5¹Óu9‘¤¹39.Ū‰Ē'žµ­¬ÜßIdņż’I äØät"·„Å)#č/üOńƒ§²Õ“kh#½[upŽ[”Cė“^Ķyā­GÄóĮāėąök,`ÉüGx[‘Ė-Ķ Ż~}%mg‰‘ā[nļ½ųT¾"ń棩ivāĄŖ¾ŻŪč}+;_Q@ņŸėŽ"¹¶²›K]C•HŒo'ŌŲWÜ_5-¼:g“z6ī2D†®-luÅ»¼=āKż*ś»"#¼0ןßĆYxĖĆ:v .ī;…|®=1ōüėt“±•DŽĒŃÆøhĒcĘ=ė'Ą\ĻņæīśtÅqՍĢu¹šOĒ/‡õ(õ»v™“K÷eŪ°6ø#ÆqśWćæEØxc@Š`€Ę°ŖBų 2:nĻZåiō;a§YšGÄVŽń<Ś^»5»ų{S€ŚJŽü#0ł\sŽćņ©~ hŗ…5OKµžāDÅ3žw N•²īuÄžæ’ą?ģ~<~É6^¼½üDšsłĄŲŻ4'ĖźČ’€WźuŠŻŲŽ%Ō5µĆ6xķŠ™JĘżl}Łą=^ųGOŗ„óØņåÉĖ+Zā~7|š_Ęļ„ž;ųć‹U»šæˆōł¬dĪ3²ü®¹čĮ°AõÖ¹«ŃU!*rŁ«}ćq¹žh“÷ĄO~Ļ_>!|ńNŸ*ėžÕ§µk‰SŹYm‰>DĮOUtĮ¾kćŪĄÉrB¶Ś¬G*qo±…Je!tńņ T=»Æ&Ē“ĶS“÷ęŗĪnDg—`ŹņN2:T¦IŅ1 ųēš å+ g9ū“ń: w>”Ó4Žę°%T38śśÖ­£Ā6£É¹X`ēų‡„S—C¦ Söėž_ūbMū1~Óƒą—‰ąŽćį'Ä .}£Oæćwä©¶÷mlśŚ<³I‰bĀ‚9&>VÄ`ž5vå«:c‡ŸOK;٬®7½¤”•³Ś¾ųįą›©­%ń.—ĒāĶF»¶pf€Ÿ™p:œt’ėW™%©”š’‹māń¶®xlĒ„¶¬”’&dĄ¶¹ä‚¾™?.=ėłKżøž Ž|,ų§ØkéņŚX]˜ķäÜųgŽŁ«„¤®LևĆĻ&'’1µ™Ķ‘ĀÕ– łØ0Jō£#ĪØ‚UŽa…$F8Ę*§Ł”€ nĮéė[F]̊lʈŹĆ÷™ā­nļļV›¤˜vĖp8ģ(o0ŖŃĘ:r(F°%X£óL@łŒœ²žLL›ļփzgqš×ā^±š7āG„>2ųbāāżģLńŪĢb{ˆŲ€ėøuAāæŠÓö/ųŻ„ümų;šćā—„u[½fm"Ņ-Fа"kż:UlMæå6}†ć…MQŲ™ś³³”kšDqʲCyšßōśŽk VÖÜ¼ŅŸķ2ŁĢ±Ü@>öŽ3Ē®9® ±-Ÿ<~ݟ²ö‹ū`~Ķ>3ųm&Ÿa?‹£¶mKƗ ‘mØ"’€7Pf6önųÆóSųĖšóÄ?>"j¾Ō“©¼?±ä†x nņn#bOpAⰌ’—/s9#Ɍ†PxdŠģ“ū›[ėČ&Ž ÖUX÷›Öœ„ŲĄśA‚ž n.­`¾rżøū½?n½¢ļšĪ«yunłXˆˆć1=ż±šžf3ē/ ė:—„ļį×Ö“Õ ČÉąŒóŒW鿀¾(Åćß éŚ„rX=Ä8ÄgēĘ?ˆ~=k®Rz„ Öß,”bŽFkÓ¼4¤˜ |ˆŹńÓŚ·‚źs¶uZÜÉejåļ÷ķ^9,·:œźKŗ.ü“”æŃ.-mWFp>”ĆgYČUQä_zćē[ä`ȍ×/a[ŅĀļ ŒdrMeĘŅ-UY‹ŹĄ`öTé˿ʖ3ęō8ØBĒM®cYhō'šźg𵄌éqjļ"0z{PRó&ņdøŁŒyļ‚7W™Žj«=Ģr„G` בŅĮr—6 ŹpĆŪ„aŻĘģĮBØ9ąśPę›ūŌĶĖóėT/×Q'Ź„īĻ@(>/ź„ķšū3cĖ pxīk°øÖū ®šžF”·;•¹Żķ@ mØO#Ēö­ĢÄĢ{×mc”G=›_o0@Ł9Äh’ŌōÉļĖfecpŲėŠäoµK«yeĖĒ·ēõP5~ń¬Ķµ”ķϵwd– 3žū’=h*+R+hļģoÆ%žä42©³¾¾$‚ę‹klҔɐžHÅéiśŌöQ“VÖé*7U8ÆVšÜÉjˆÖĮ%b 'ųqځņ›~"Õ,“¶Ó¬”UIå’XIąśb¹ĶB{{k Énm–ķŁJ§?tśŌ¹XI)āKyŸII¬Ś7”ɆE<Ęr+Ļb•le7VÓn€#åąŠÖ›:"µ&ŗńV„Ø[$7—rČÉĘK}ļ­G”ØŹŲ'9õÅjtEt;;M°×|;©µ²ĖqŖÅÉVčGĪsĶtž ńGŠlt‰4­VGk;£Y/ōĻ„ Ę6>Ņ¼Q=§†aÖßO]p’¤‹ø1=3łłĢųĘ]O]¹»‰#IŹ2GŠķ\ņA8£Ł”¾VµāGĄ8¹Ķc[NanˆÉ'aœf±”liō6tæ_k66ń%²@#?1a’FyļŠąž$[YC® cL-6!S)DĄcŽF;óš‹u:,eAÆĒ-øŹy[†ź…õÜj‹– Ēv})ˆ”ai}q5Ė3”µ  ’Iē9ż*Ō²Y1xĖ®z/µĆsoHÕŽŻ˜\ź@ČÆ@Óõ»)dDX՟ ģaĆ{VŻIœæŽē¶Ņ–ļSµO"YE>ߝxŒ^ko»·ž[{·oC‚kČÅŽE\®ʱ8ÅńN§/Ź1M~3gŖKuį’*+‡8ø~¾ė7\}kĘ5ƌ’|0ų‡¤xśhµ=-µ(aMåc,2Ų;õÆ9ŅÉI;ÕoģyšÖūć÷Ć+wį…ĶØŃē)wö©Aņ`v^óœć>õźz‡4ļŁ×ć/ķOš_āxƒįƊ~eaĢSˆ·‘V3×&IA~E®„dī8x§ĒŲW ¹[śÄ’käÓK×KŸĒēĀ--ļWŽŽImB]Ļ%»H6±Ķv@G²‘_Nk~7·Ń¼5qØßŽĄņ³nXOĻ<ēėüėŽ¦öGõĪ»§I)v=‹ąĒ|qgeuį­ėZjĶ‹‰!`M ė†Ękģ]zņ 7ū/N½Sa+)Č~7ć­( –17¹“s¤Ē«²Ü[Ē*` c{š„å½ģKnń4,­Ō`ö ąÖńp”_Ž>?ųóū:k~żŸuož»Ö Öü1ŖØ×,™ČKĶ5Ų0(ė·v~½+7į<1e®Ųȗv³F¬’+gx#ÆėEDväųø×sŒ~Ė·ą™ĢųÓĮ÷Q@nī’6Ó§ #lr[œå_źŗn£į­Z8žÉŸL‘ńƒ€¼ō5ēUŗ=¹a¬¬wš\Ovń¬p0‰Ī Āū×'}Æj6šģšhW®‘Ä/:'!Õ½«™Üš±Ė•>뉪üN:6§$—–Qļžį§$¼„7 œs_Ŗz&‰¤]XNŚr KsÜĪGҶ§#ēåQ_”ė~KŖCØźq®¢š–P##-mĒ*N~ŸzĶō–w“AäYDŠæėxś×„Hļ§Y#ŗš‡Įß ųŽ=RKčžÖ-ķdøū-ʝ·°ĻÆ>žÕ÷ļü?ā…šćƾ'ų1Øų…!±×Q5 \ymt™EŒĄī ßµßN=OȼwĖe™p¶3ļF<ėžÜ|Ö^vM|σ?૿ķ>~ÕŽų™į›;m+Ą_ œŽÅQ × Į–BætyŖčŁźĪķéĻåæü ĀÉs£~Ģ’ļn 6WVé€9x¹\Ÿ}§ņ©Ŗ’¹ņžgĻĆ9uZŠĶ.OüšłØß՟ų{&ÖõßłCģ÷śLń¦yĖ…'ł…ÆžSEM*uŒg‰™W=¹Æ›Ä%}Śrõi¶uš`Ōb¹Žśį%{Ea’9Įģ }?įߢE„YeüŻūŽOČćō¬`õ>Ž‹i]”æ(Ņķī0RõX’y_kÖĆIŸ Å4}ŒÓgŠhmūTü,‘£¹±²ųåšćOk˜Š¢‰u›3µĻŒ'¾ūšłūUh5;OÖbf“–$péŪŽõŽ~zėEMÓOUÆßż2ŠĆ`.`ŗŽZМ2w’Ö{ P“#Ų+g‘“ŠŅ›čeĢ~Ń~ğtļ ƚĻ.© ’īÕšž2rTū®?łėž ©šÕeÓ~ücµ€ł¶r¾!U°ĢwFXõūᇧ5©ü}ŽĮ’dxN“Õ”ZW^~Ņ.’Ąļņ?¼[éZ­üQ‡ó$1Č[ų@’Ÿ­z¶vnR™¦Tƒ\ÕYż©†ŻR¶÷ OjńO³HŗŖ}§Ė²wŁ>Ż£ėļÅsIč}öKJ<뛹åZ7ÅI%šWŠžÉÕtX”ŸBkÄ4]čŅŁ€Ģ&LĘŸ™GL⛹ś6* ¤}Iįoh²ź¹•C #īń[’xJ +kČ'‚ CO™LrBéü'ÓŽ±p=xƒĀ"Ņt½\Ōt†±gEč ńśW—ų«J›Įzݶ±¢Ś_ŁhŚ„Į"bw €g÷āˆv;iĶ3ģkčuC} ‹ŹŲ®rć%‡Ę¾Xż¶ž!xWÄ#ögš’…a»ÓüS£Ū\ ]]&Š@ø`޹ }·Vš•%F¤„d„wę¬×ēfehw"{+“åmō®“ĶņåĒɚĪoCܤ¬XŌ4‡M9õk$‘ķgĢsäd)ĒOnxCŚżƒ[U·cø+ĄźŽēYP9Y$—=Ž+©Ńītė)īęĄ^Ūµ…S&Ī«Ļł Ÿ^Õ§e·qFφ¹Ńēć6gŃž Lńƒ|{-¤+­i—2#…ūĄäļŽZÆü{¹øŃŪEšĘ­¦Ē"–ų«pYX/Ź Śēʸ޲‹é©łwŖÉo”üPńUž“ŲōŌ½Y`‰ŹŖĒœ~µõļ…ļDŗz0ū¹ķėB‘īĒDvÖ÷—†7^0Īźō©E¾„ jĖhšj6ŗ{¢¬qm-“}óļß>ŌĻ^Ēę¶Æć‹›»›kß1`™®2Fy5eŽ\’a|BŅoõ+”išd½·+'ßł}ŗõ4“¹ņ8ŹÆ˜ż˜ųCūIŁźž‡Ć1iś=ż¤ŖīŅDčOSŒž½«ø“š7†&ŌEŌ–d[x”ńżÓŽ}«¶œ‘ół}?«Ōœāž" sᆋsöŪĖMNµ¶*pÅĀžyƇ?hO„¶ŗ·/tż.D“Õź2˜;r£Æł÷Ø­„Ņčū|`ķcóĆĮ^Ońž”§ėÓZy±:*+×?Ÿå^ĖńŸąg‰¾ė ©A¤^źž¹U’‹8 ¢Ī oå^%j6>ŠŽ"ūžXńĶy¾[ ӂ¤sųбiŖDIµ– Qˆ'éŠāp±ßMkcŖ²×­4čć¹ycäÖÜ_4čę™ČŽā6j«r“#¢4Ķ[ĻčWöāźŃåĻXßµx·¼^¶ienė4°–$4kŸSMĢב‡oEÜ0”rTsė^œ-āXĘęĻ”³96Š’y!Œz÷Ø¢dF ĒZdĘ}QmD’œ"ŚŲ±’פѪv64õKq$Øæ:ēė^EhšÜų‹P‰ŠĶęcūµŸ#)Ģī­ā·I2UOPz»q >QF<õ«ŒL\Ī›IŃōyü7Ŗ]M©=®µ ŠŠDėņʇƒqÅCĄ…õ¬™ƊÖĮ5]2 £’!4FäšXuüš*­mĪv¢‡aĒ€¦¢C, hŲ©?(5jȬ· ±øÜOzMē©EqoŖ1Ų7†śgšŻyĢØ²0@Ä`…¤T·9ĄĻ½6+O;t™O„Tcr*JČė|į‰õx{H]Ž\÷!žĖž\ż¦<kšćāż‹iśZYéZ„KVgõ&»©RŠšqŲ›M~Ķ>Õ.|amŗŚ;a-³GŹvØ}§'ź+ė"ŌķÆ/tĶfĒÉx$+×!‡­zéŸ#ŠĒZ[—¾Ķ ŹnaO"B6³'ę_|„Üé£_Ņ£ˆ_DēĶPŻWŽq[ū=JĆćό¾(Ś`xkĀzs$w7“—žqĻ’€tĒ®Gė_Bx į׆ü=„ŁčóµÜ;ŹN0}”FڟG‡Å]XƬųi4ū·]ĘD‚Q^ÅąŸC7µ­FņŚŪXA(®æ2{ƒCŠ:–-lĻ#š÷Ć Ē>ńˆō}@Śj‘Nķå¹ĪęQŠsķÓük¼AšOų‚“Zźtß ­­öŽć¢Ė܊ć•3w(Źčųž[Ÿ|=ń5߄Q“Åp¶ś­–§­ŽŲE#y±eˆäžEfDåŠõ¶ZOcmh°Ć ąē’~•k*ź‹y«Ę^"۹ ?ʽ 1Ė)t9&DŌD‰p#Æ'é^ėįß Éf¶×¤{AĘrśü,—"GųóāŽ&Ux›)ļķf¾JM/Į¦DšKCā0Nvćó®bĒU°‚wŅ ›?w§”ł}GŠčlV7Ōmon“ŠŁQœWw­ź©qj"ž8āž0p>j£šmģyÜ·™}ŹKs‚z½ę“,.d@n#5pÜĘO”äž.½Õ›PšĢ­h ®kŒ°Õg°æ_¶łņ[1Ćīķ[›ŗŒöņ϶'f‰¹]ƏZ×Ón [-Ŗ¦łS•ĒSHĘORŌ¶×3y÷0ēŽā­i> ±øI®¢UYx$7ń}(Ė%m¦+„|ć„tŚ{ÜĮf0~MŲ ·4Ó2™ČųæÄŗ•³Å™ŪFY€Īź­”jw·Ņß:¼ųłq޶‹]=#JŌ­Ņ)ŁßĖøE ČūßJį|]Ŗ¦¢Ä±Dq01LxsUH%†Ņ4U”¦ą?%ę‰j.šõ£ŚŁĪEY²ŗ“˜ĖN'9&»M+E“’ݦ7cĶlåp -‹6VVŚ2Īł±’['±®^śż%ŽŠ…fåėYĶŅG›_Į>u”Hrą”'µt¶o5Ģ‹q…!Ż©Žę'UÆxŪUŅЙ-īHķ^'}į«-‚d'$d¤VĮs£“Ō/ʞ¶.ß :T–«…ćwŚĆ¹ļ@ķ/Ņ@Ų¬1ĶtW~,šÖ™qp.nĶ…ÓF ²ĒŽ3š£s•Ÿāƒ>Łb5[•†įŸhfĒŽö«wŸ¼4IµÄor™!·pGj Tūž ć?‰öz|Āx^)>a½KvõÆ Õ¾=hŠĖ­ÕäV0ɝ¬Iś.™©¦|J’ktžr7R~e®WXųĒu¦Ż›½&kyģąFß»©~?śżj¢µ'—[i’ āĻ4r^%½µ® ,OĄśtę«ĒūBų¹./$½ŌõĶRŚ | ¬ ŠwĄćõ­9¢¦wæ’i^]I'Š#–ą,U±ŽĪr*—ˆ~=MsqrÖ÷rĀQˆņ‚±=Eg(Ų—O±ĻŲünńĒiöŒ–ę`¤±äp}i)Ó­oęžH÷‚Gīö“yõåŗæÅ}4[?]iE™_/å2€zļŠ•‚1Ś—Äne±²}Y¾Š~eÜylz{ՋĻŽjvĆK¾½»¤ f7 ćėU‡mmāżWBӂ[_Mrcåw’Üw5å>*ųāY@½·¹™f G"+'’\õ¦)FĒ7ańU–c§%ä°ł`#±9ćŌמxĖ_ƒWŌ-’žf’ēiägԚ ™ģ šmµīmŖY_=©¹’—˜eĘÓŲ+«×>¢ĻQø‹[½UŪöœa›<õķRęmcĖ“_…:öÆŖŽŪé—VieĘä*; ŸJö-3L›GŗK8ƒ x—c)d×Š\įnĒųĻĒŗö—y$ɱX…foø¹ČĄ=kŠøńdš½ĀFdž93°:½ļY°±éŗeܖzĒip÷0ĻĢ£­q¶Ńé3j¶ŗ½‹ŚkŒ„žēĢā³”“* ŃōįxOŽ9Ž>lm#ŸÖ«Ż7‘dóXfė“ŠĻ–å”Ėizˆµ­l^ŻL~ĶŚ æ+{ēµ{dš{ŚŁ[Ū™ā’U\|æĆķT¦Ģe–“ÆI{47’“vĒ„z[G§iv­$˜øTżXœ~¤]Čäg†xŪā.·zé:D¦Å>ėĄŠ7ÉĪ@5cą/ķ Mg\½ s,įV7l•^’…Q# žŸ¤ß=„ÄqĄØ(>R}©E„Rbl†~“2ylaź÷si÷“ŽNxÅOkŖŽ\Ū“p¦Ņæ1Ü:×;e„ŲŽŃuU°24Ńȅ†0:ž5×Xų—M¼³‘å°?.@ó}æĘ‘J'ö—aŖ6«m§B’¬†@±€9ķ\÷Ž$o^Ū_ZŪLŹĻūŲĮįsŌūÕIČ;LŠ­¢„£–‚]æ)”¬{ūFŅ_%ÖI`³p}jYŒĖ{«S!VP®9ö½>ø-£&ÕÓÓ5ƒDˆ54»)$‘”čjÕ½šŻNč…''Ž‘F­Ģoel¢6ĝ=ÅsŚ–¹ä@>Ņ^=¼eŽ>Õ2‰ču(o-w›7äŹä’*£hŪē1(ĀnäzV ]Ōm|Ō)o&$śdēž8”C]¬yI=ˆū£ŽæFž~¾ųŠ>/ł>&×ēø‰-ģ`“rGƒ÷faœšźęčsNÕķ+ĮÅĶķŽ—įE5­„šmT#ŖģĻ'§?_jŅÕ|wmgs§ųoᦇŠHŽ[jS&ļ}zš)ÅņsæŅ|/įo‡öcÅŽ'Õ·u˃»÷ƒ9lüŖFü{ż¶‘y¬iV:ž­Ø‹k9"ܐČFõöŪž+ŖœL$ŽRå¬4ö·ÓtØ½Ģ®Åīš€’?_ē^yć ųSĆ©gÖ¤|māHŸÜ ~Rz†LdćÓ ­¹žĘ9]_ų³F¼×K&kY ;·!äŒ1å8žuŠÉń|;§O‡ōż> ¶Aę ™Ū<ž™ēŠq½ÅsēāķFyīN”f·WĻø}Ÿ9ėۊņĒÓuiZćPÖć°šö˜®ĢóĢįs’N?!]4āĆ?o/ü4¹øšēĀK«k’Œ[\O3FĪF7®xģkńĻāGÅωu‹}KĘ>%žķ`vŪ <“×­wBµ2’<ĀY„ņļw‘¤nKg#éP;L ŽsZ™·a’.õfi>‚¢QĄĀź:Š`LŹpK/Ėž¾“Š]€Q÷IééA2•‰<°ˆ0Ä’…hA•2Švā‚Č4Ł ;ńÓØõ­H4åņĆ:˜ć?/Īz™JĄzļ€~ųĒŗµ¦į}*MNķ¶“®”¶Oļ9~—ü.ż‘ü?ą«q®|D×S[¼Ŗ–P{0?•sŹV6Œl}įŻ­xōQᯠ/ī–[xĄŽpzśöļė]’‚5}WCÕļ|?šŹö ļ޶IšŅ~é'€9{ Ę儊įüE¤x§Įž)Ōgń•ܦrš‰“žĒė˜×ükć=zÖĪÓGÓaBŠGbäa½8恨¶w^ń®/…$Ņo4;[ŻMžAtī½‡Nµä>3šŸŒō;čGˆ [.Éßņ“}Ž=qYJM\ØÓ8O,iȱĮiÜ7;ĒsžEni·šf›„\.©§’kź2J¬&RO–3Œc¦:~UÉ:Œ©Sh·4:­ŹĒqpc±ÓżÉ ŒŽüé^wŖŽXé.4ŻßR½Õ&}Ó¦Q¶ē„csJp8xƒĆ¾ÓŪSńĆKzÄ 6IÆ«Įuųßā …-Žį‚¤Ko4ūT×µg9Ł(XJųwy+Ą±…•ŗ·$‘õ5ķŗ7…n,&¶ŽKUø“`ŁĘBŠįœ›ŲģUV>ŽŃ~ßE§Cuv!HåŒ!?Qų× é~¾’ÜZX[2AĀ ƒļD`gR­Ļ[·ųöśeŽ¢—q߆”ž<œžWVś jŅ|‹Įd®ˆŃ¹ž§ēöµkāŻ:Č3}žuS‘Œ*’yÕņĒÅMAšĮŅŽśż_ją’«óCÅ}w/cąčI–~X¬s[FńMnDE•yĄõÆm¾žŪIˆŪĀ’^36<½¹fēYėÖVße·ø“dČO#wlŻŖö-@»¦üń=žƒāļUM5^U†@œ¹źśšādļˆ^,æų›kįĒŠ“ģwr²I½HXP½ĻįłÕF§AŗHūö¢ųuāCĀĶ.Ÿn—W\©&²¾[JžÜWē\Z>­Øj—0]Ü=ŽœŽōĮ$wČ>õQ‘ŹĘ¦™ąm?N¼‹U}`\_$Å6ēj2ē ŸZ÷­{Āz¶™ Śx‰|ė{{ˆŹ§ Üuü«)T²±NĘÓųkÅv> ƒÄ už”o;I QÅĤśs_tŁ||ń&£šnóDŌtŲīå–ŲŪŗ’ uĄ?O’]C•Õ‰”Vǚüńx»ZVÅcf|“œ=±łW¤üGńE‡Œü”iśµķśÜ¼†wa•D##Nājg®„ŹŸ›^7ų{¬éZ¬ŃźńĖĢķ5°ŲB˜ųĪ¼ƒRŃndIį•|Ē9#`D] yĖ£X]B$GŚrīkč/Ÿ-ü ÆÅĶ›+ c+#,čĀŗ9®7ōĻCŌķõ :ū+ˆ§…ČS’µÓ¬&FŲ`ÖU•ŽoĘž Óüsį‹ķQ¬(‘.U 0•äc§ł¹­éW֗WZ”A&ŠV!H ąóź0kšÓ×CķćWŠ&2į>G ä~¢¾ŗƒW±ų„š¶Ó^“ņ[ÄŚTŸgøÜ74ˆ798éųÓQ;cŚ?ą›ßµMßģmūZų7ʱjŲ|;ÖäZäjĢČčHŒdšTĀæ½½FÓKÕ,ōÆhW1\hśŒ {k4lgLžX§Qh™©Łü ńIšīøśdØ_Oŗb·`#qƒŠśKÅ6Ņ˜ÖźŻe\:°8ŚGB+÷%ČžYąąÆŁEń_„üūbxrĶģµ>a¢xĘ xw ķłLĒmb¼œšągŠž=üS¤6Ÿt‰–wټ2ō`zf²ĆŚ-¤ŗžzžw1œ™Ē<Ÿ»U”Žć­Só"PNhėŠī8ęOŅøå&¬³ ]ēėŅ®1¹“‰›#0q [r(ćDRĶĻ”ź¹ .<„T‚§pśÕø$ʦšöžTłŃ4Y–Kūf·Ō“¹®ķ/ķ§ŠāŽX„ņŁ$FÜn܊’Cļų$ķæ§~Ų_²·ƒc ćlŹ 'ūŹŁäŠäšµ˜ŹT–×+$ńO·½ÜVD’žl0GcÅC¤KqkØ“~hņ»’z”–¦n©t;;Ūɬui'-ś¹Jø>iĄäĆõ®£āv¶žšbéĪŠEwŖ(k_7”E$fˆFīĮ÷>T×µµżū÷“ `z’:ī>xĘOų®ś š#¦ßŒBĒ_Ō}„wӏ@”ÓkK›yV*£(#-Č>†½OJŗh­a”mUS“°ģkc’QčurŽGØZŖ\LŽ “é\ŪKĀC)MŁ^zŠ#»—UƒVŠ;8”lœe@ėīkžæÓ.­]TnĒ‚(½Å·ˆR\‘Ņ‘Y.”7Ž9=(…³āFƝźN*īłΘ‚ŠbI-ÅĀŖI"0 ń]göżÜ 7 ꡀ°Ļ\żh*1¹BŽžO-Åʞ’Asj>qŠķłŠćęÓo-.ŻÄŽs1|°ĪįA¢½:&bAŻ1VeҊ!™¤ŽįˆĄéŠ .é°  g‘ŠōżEŅõ’Ń`I!‘JČĪ=čv9 wBÓģdøÓŁ”ķl)€=q\«„iŒ6\. …éA¶č·oto÷D®€ķĘz5Ž”%æ‡^ɮĻPįqŹ“AŠ¶3 »V“’fFj+ɵkIćŌ.-ē!ꯁ³ū¹ā oȰłøG'ڵ“`¶Åe`$d?.įApZźp¼w7ČŪĪå:b¹-*Ņ9 »ø€Ģev+ 9ąJ ‘č>Ó®5[;Ą±ł’Ć“ņœ£®~•č%ÜÓM›±Ōq“Į4Ņ78_j-wwkåĢ~Ó!¹ü±F‰~'·—³ŒÜRŒzZ}ÕÕÜ/-Āø,˜8ģ+Źī“«‰Ł£e%ŽxéĶT] }?Į_o…™˜ĘĒc“^gą;OÓ^KØŚO,īÜēŖÕ{CŖ½įŪ +kŪit%W·ĆJ™?0’ Wss ł÷“¹¶1n9ĀŽ)s²™Ō\«&ĖJņSÉĻĶørÕēóxSBŃ%›PT['v/ ž śŌ󘌮£©½õ“Z(W“SŗC““ō¬?[Å®_ŁI1–#äaˆśōؚŠŅ2=‹ĆšAœ‘Ā’æeŚŖŽ—w¢<„į’=Ģ}Edm\óķgAƒNxV%$ņ[#>ՙ›öŁķѤ(ąžtznŸ¢i֐\JCB̧·|W˜j‘Ī· Q‰±ō„'”pÜÆghķrMŹ:֍ć9 xĪl‚;W,ßCŗ’9ŸźqŒW’»‡$ó޹ėHšß »ęķ^ewv„ŸF|¢4øZOłū9Ėī|ŸūiŻÜéŗ^§£-„å¤wS <Å.>čĒoÓņ®ƒą×…¾xZĒĒ6ZĒ‚ōĶB÷WŚ|éŠ8\ēėž+–)#öÜ~ S¤ćOIt?O?cßŪc±ǂõļ [čŃkś%üž|i7’-å)äĒlWūE~Ūļķ/kāOŽčśõ MęĆJū+œ‡$²;žpޜŽ)ĪvZ‚ÕšFn#|A‰“mZŃét­ųā…¦YŁiQĶ­5°™ŻŒ—$ēš5åæ%“\Õ,“ūēŠŽLØ|éÖ¹:Ÿ·āėJ1ŌūKž Eń#Y°ųĶć’‡w«m-†ÆŅ[.üyR"ćwŌćł×ģ_ĘO‡zw‰¼3 kö¶)öėFhī6O\gß®˜Dšźę²¹ó/ƒ>ųļLńEą±ho|a‰_2[¹8Ūī+č žĪZ·‹õmOžg>š¬(³=ūƒČm£Ó°üjłL+ē–Ųķž(jæ õ-Ä_t;KM[Ú§‡®l59~IœDĄ>ÓÓ<Ä×óŃū6x–o h¾&š5żŠ[%üÖŠBGć'Üā²žĒµĄxŗ‹įSķ«žŁāĖ‹rĪÉlŲΰN²„nĄÆńV‘¤ė_Aqe$¾¹‰³Ų×cö ”ŗ3ź+]7Ć·¢£I∤k·–Č"¾f‚m[N³žÜuĮ…‹ĶœžµÅn‡Ąq%SŃ÷;’„+k’ }Y D–ęÅĒČ0É’ģ*żDų]Ŗ%‡Ų`ø“ÕJI’6Öō£mψ©Ž~Żv*ų¢īo‚“ˆŃIü!)E1«Ÿ”æ9#łs隶óLÓfæ¼é5Ś2¼¬Ŗ»°IĒą3^'”õt&¹SīV¾\ƧėŃŚĘn-ß “²žÖŖxĻLÓĘķCĆ÷wp-ŗ‹ėYRC֒ÆĶņ0<Œfŗ”¬¬sć9yZ’ŗ>ż»~-Y~ŌßšL |d¼¶¼ŸĒń}‰¼™œ3É$l°»3cųÄŠ±ļøšų;ö‘šŽ‡ń;ž ±eāŪŪ5’„ƒĆŚ«gN¤åĪGę$ÅeUŻŲžlą< Źņŗųh»Ŗx—oFąģ»nĻÅ_j÷V÷žÖYw<÷+ŲąÆŹr?0*ŸÅ]>_ ųĆPŠ¦$ó6x=?„xuÖ¬ž€ĮV÷Ņ5¼%®ZÜŁµ¤‹ūˆ#ŠWÆk΁&·ąäŗŗæ“"YcŒ‚H8®1\ŠÜūŒ<ļŁžü]mĘžæ@«,s¢Ü$UqĻėÅ~Ļų\ŅüAq}ydÉ=” H6töķ^®ō>gŒ©J„%S±ķßųŪSšM֕āmīk]_K¹ŽuŲ@ócēCž0Wu~Ī|š–‹ūHžĖ¾1ӓǵšSEžŅÓeu.!øŒyØF0r6ńźkcł·Ē˜}O—ēJ ū*šōnĪ3Šæż»+v»ī+ž"ÓŪ_ŃŌĻ%Ūm”’²ąąųƒRųLĻe‰AņGµ…HŸÕMZge-įbV"Ż}:×ćĶĒľŌō¹į3Ģ˹Nq“ŽkĪ›gÜeu-cĮ4?£xnižIō½[~Č2_Sś~ućŽ%“ńW…¼B֞#Į“?˜rOpzg½s7Šż#4ž#č?‡¾5EKkKéē;€¹ū¦½¦ūT³¶†ÜM4a„“bóŁ¦uJ +#ʾ#éŃĆsa}ooćc¾+Ō¼aą]cāģ”öŗM†q=ęćp€yÖņØÜ §=}©œµńr„M’2OęķśŸ>ü–ėĘ'iBĖ{¦Üż–ī%Ī[qł~µšÆĒŸģóń÷ÄŃųQžŅŠ£[qjŁĻŁņ>tü aĪ}ŽZžŃą¹ĒöDĢ9b:ż+ŠäņžĻ÷Ōæqަ÷=ŠQ1oļõ{C1Ėq¦Hw:©čFyĒć^/ā=óČnR9Vā½Ļ© źHīt×ZlĒkĘĄWJ֑4+*äqČ Ņ”F[_*"ä³bŖZ]¢åO.'M7ŠŁ–ĮM]ZØ<ß;ĖhIłń½ōŖ1įŸ;B·ZØFĒL†Ģr͵8 ½ tw‰ɂTö®‚$9ų„­±²Ō™—|Č7(Œq“łW§\ZÉh„W#‚= aQvzBĆ7™Ļ8®¢ 5$ÅŲ0tś×:]ŽJ딵ą›ūļ|Lų^ŗ®½gįżQń%…ō’ó[<ʲ9°¤šż"’‚Ź| š·Į?Šž"ų.āžēAד¦±ŗˆ>ų#xˆŲąöÜ~UŠ©{Üü7ŒøŖx+ʰ*7§ˆö±o³ŒSKļ?ųą”ń”ƧÜ6—ØF„£óG\{ā½OįļÅoˆś>ƒƒ5ī›öiü™ā'™¶kˆųQ‘cć-õłĶ¢ĮāxšūĄž:Ón4Z0]² ׳”ī3XŹ’;éÕGÓŃ›āÆˆü!įißū:Ņ ē]ĄvČŸ^üŸóšś;ćGß ü0µ}6ūXµÕ•6ˆŒr*8ŽqڹgdL§­‘šdŽ0‚ŪYŸOŌ!ŁJŪ-ä~g=ˆ®óFš“šēaK¶Ēļ1É«%ŲēŖ¬ĪūįÖ»„xOāw†“ßhśf¹gzĘ8–ᶦž0 'ėŁ’h?†>Ņ“{ŸŠ>²›Āzå½āŪźv 'īfFR2{×£†CĘÆ^Ķ£ä/ƆĒT•ō‰ ÆĶr»‹g ~&¾¤Ńu$°ŽK‰WåO8< śL7Cü—ń¾ßėV5Å[ßżźgĻāØ!Ń#I“•†AÆ?˜„½Į–Š2ŶÆLŸJõį±ł Do&»©ī·f“rƶ+«³Õ\Ż ĆĪåуڨēžĘõ„”ģÓHĮ>aøäż*ŌŹ)ä\ąē­Tw9g¹ĖjW7&B‘DØpFįŌ×öhÆ.Š^#¼ŠyŽ+cš[šŚÄWZŪĒl‘Myc ÷‡×Ö·¼=cåĮ+\²«ƒņ’y “¦‘ ¶·‘ČG|b¹Ķ/Y{k¶›~Xüøć Į£G_ńœ³ µcßĘ1Ōā±ģ5·„¤U`N‘Įö V.Ésm«™ģ£łÉRøéō®gNŃ®ķ/Ä.²Cm!Ā7挓Ÿ/CÓuo Ķ*‹~Öņ²›n0~µåSčSīšĪīq=Éc)ąŸzІßé²Ć#ŚĻ4ŃąZōķOLµ–É Ŗ±æęe>‘o§ĪĮ.<³ĄŖšxĀ[g·Ż#ŒŒI•«HÅv’ÄŚÅ†į2Ķ’®k“¶Ōo–b9eŻČ'åD ŽŖ_ 6²FRMÄœl6O¦]|µłIĻZ咱Ķ(õ;;[ņŹĮ<ĘX› Œö®őĖó[*—BK+zTݘøėsœ’E··ó&¼Ž=˜<žµpŽ ńu½œØ@És|°ŒēzweĀ'ˆė ¹†hģ?ѝœØpw W“ė~6ÖYRŽāw— ]›š¾k ~Ÿn¬ŹŽźź1Fp¬łĮõŁYųšźZlėdR§ßCŌżj˜ŒłdŠń 5Ł”‘[°®ŽŹŚK÷7öŃ]*Čp$éRĘÆ®E§XČØ—\żŅrH‚¼Īūʖµ¼‘[ŪN l£ŻųVАš0ōĶ: :Łg“t #厠Žęŗ}?6W‘BÅ*¶XśÖŖ}ŹNĒ#co©®²ÖӍ«%ĮhJ g€kKÅ|’3$luŹ–'ØļĶ>q7c£šŌśf™öq«Hd‰“nüe“#ÆÖ¼ßĘŽ7>$·Õ]MON`zž5›d_Rķ߉tū+‹ki¦BɅ$(ŪĀ›ć Oė÷Śf„m%„½ÉE3Š‘Ųʲl”šŌ§qco†öGŽtŒ¤EfÜŽ•„].ĀŖp­RA"ų’K˜ŅŅY‚¶1ó ådŃ5sŖS,p£oNį2šqv2”®Vń宲Śtwvčļ@#Œ+˜³š®§ØGm.«p2;ūÓs*1īwŚĆm@Õtę°ń)ŸD•Ä‚4“jÄAĪŹś¢×\DZ^¢I:`ƒéRYWRÕt}:źmSC?g»`Ϝg•ņęµńÅ'Ä”õµ¶3ß;2r§4€öFÓ|āt³ÖeŽžļVPD’HĄ©=ń鎹½kĄŚ|u-&ŚS½AbŁūÕ2•€Īšō²_k֊Yyó1Į8=ėŪµ‹c¹ą>"‰)Žöį$ŽĒœņ£Ž±“øĘ(¢3¹lÖF–ŗ:m3^Ōō[‚¶®’[1ł‘”k„Ón"½šY„‘¼ģīUŒśT©ö3jĒ}„kz¦³H¤/ægķU|7Ŗėx—Kŗh"ūO•%•cŽ |™ŖOe>Ė9a†įNå éÖÆŁ™ŹÅŠZĢ©8ņĆp£­S‰žĪY¹qœ·½sN63-½š~ļ;€¬¦†āh䑀ŲĮ’‚ąĢ6Ō¤ÓŁ &éåÜč6šźvĻrĪ^Óź*g±©Æ|$Ęß\u¬7Jž­lZō¤Ńc'ė\5ēdvŃŻ‘ļŽš ÷q‰cT—hŹł‹ÅzėŁGį6H§Œņ ĘAįbkt=štM7^¹›D0¢¹µ‘„‹•łõ®ÄzŒšdl҆hĪHć!k*Q»EcęļųĆūFāĀ(…Šdb<בXŚ&•{ā[‘ōӗAdeB#·zcšw–ēŖņ:ŠfJ‘<ŽŹU†~•Ŗ–`Ɔ ’qó¢€±*iR+ŒžčšxäÖõ¦”öš¶Čä|ŸJ™JÄø¾•įł®b‚%V–éČUD™‰éÅ}Åšwö%Õ|yckŖųŹāoxr)–gŽę2$ŗŻÕĻ)XØĘĒź_ģńš#Ā~ń47ƒÆ-|§Źæg›R–0X ģsĒē]·Äčžńn§įč Óō†ƒ÷q‰GŹU†TšŽ*Ęn¢,ų„^ĆM{aŒ»¹$”ūµó\^Õnõ¶[č¾ÕfĪeąö±Zū{ 3ńĻĞ/×<5£„h±[ÜJXA/š2"^»‡|וiķŖųšśuņĪ÷Ǝ8ėźģ|ē³Kc¹Ó5’xbžŲhk Ģą1²nÜ={×½xAõĶRŅmxémeu°˜ÖlßĻšć§ųŅåE(Ųńk"ŪS¼‹PdKŲæÖmåGØڽGįf‡Øė~ Õ¼[h²Cm ȎžH?ÄGQĻó©ä„~#šĘ½ā}ćLŗFŗ‘¤gėŠ{Wœ}ŖėįŽ»k”ObÖ°O†4ą°õ«±.™ļ_ ¼māõFcn-ģ™ ĢłĪ{cńöŸ„~)é~Ņ×R×£¶‚(Ƽ°H'”Še(ž ńŸÅ?>%\Cā?éZJCæśHŒ4œŒd{“_O¬ųONŌäÓ“™®ēŅ‹°1ä ōöśSņÅģ}šū][*ŽēJ¶[›F%”g…ėĻ­y‡Ē=CNńÄ©£E+[M y*Ƃ#9¢Ż ć~§˜ų:{ķ;C¼ÓīÆ-Žī8Ö1—Ļ™‚1×č+ė’†ß,¼ąkI51q-ÄR™įø KßĆņ N7<÷ćgķ#?ŋԺ“ZŲĖC$`†%xēŽõäv>'×&’ÓēóøĄóō=©@m*ėĘŠIįØÅ•”ę;Ś»€?7^€×)eįÓn®m –öāĢ†%ÉĀēw…p1cTµ¾šF±§ųoĘšMkÆC:³G"œƒž }=kéßx™õ†śŽ‰„źĘH%—Ŗ°^ƒŅ¦×ŌĪlų_Fń³āŪ†“ūVÕs.å+»œaOƾ¬Ń¼'ā/ ü>Óu»ŅŪ]#*LŒ_ńöŖäŅę™Ć[ų‹Ä茒‡ĪŚ|»„ņžšēzzW¾žĶž Óu’ jQź–Ńź¶¹*ņ“J§*iIļØļŒæõ/xCPÖ|+i©ÆŚ©TƒĢ;߇Jü¹ń®ƒ­ŁīMBĪ}&ķY ‘v“oÜVQVŠŽĻ(Ōm÷Fė“cq5‘ ½“‘……ŻXõ®ŠlÖKCķߣ·āLw7“ų>öī;k’A‚3°0•÷–ōh£+.ą8ėüėY-Y-IRLFÜaO\ó‘_žŠž°Ó/āń6œ.ŅÖfQq€cŒ“Ō~ʹZŌ֔”õ žéL cŒ‚O„zĮ‡¾) ±ļ÷Pø¶’Ļ$uĘW:Ÿ‹~ ‡CÖµ:;–’Śč›­>d=øž_?šDļŪ/ŚöyOž1ÖžŪń3Į°ˆm^ys=ķ¶>S“ņ@.}–“Ńič~øŲ‡¶v‘¤dq t?C_jx?Ä6¾(šģ0‘oõ’­\Ņ] P><ż©žh^9šWŠ|ÆŪ-ׅ5ėgÓuC(WĮī Ļē_ē©ūUžĪŽ4ųńwāĮOڵ}rÖsH¤-ķ‹’ŃH½ń“QfD£ŠųÖźĢ’"ąc¶=k0Ū%[ļ tą×\YĒR6XŽUŪ¹qŅ£Vv ©'$Vf\Ż˘äSn÷Ø&%,JŸŹ«œdŃ4„c ß(9«†\Ä]A}øČµfčŌ†ė`†b’kv9lŒ…ÆŌ/ų$Oķ‚?cŪ;Ā—š…Ī«Ć?N4æF É»ąE3/@ć$ ąž¹ØåŌ릢¼}ALv» Eų(āXeHü8śƒXš‰H‚¬Ń…ņ‘^mtn|aūHųORÕ|?fŗ4f]WHļ“ēQ‚T ėŒgs_ ųĀ[XjĶ4FößW¶—™<™įĘ=ēńś×!nZˇü7ąf©šļĘŃxæM²KXī.žĻ©¶Ž€ūcæŅæ7µ/šD,øį‡B+¾dsUĢ°§÷‹øŽzŽā…† æÓ­tž|Ö¤3)•ĪG¶@ó쉸.h6Œ¬pv_lÓõ6–ĘdŽü ×Gy,·$Guv ®dfKkqÖęgun”T>µ³ØĶ¤ĒŚć mļŽō˜Ź·ń'ɬk“¶J’zÕÆˆģtĶ<ŽŁ²¤Ź»Œdb‚‘ä^ ń.£ājFY£µ3|ƒšŖ—¶?Ł‘Å,ļ²H:ƒČ#փt]šī”o3ż’h’Žrß?xWM$÷V×O[»ĮŠ0čG½J7&µÖ|©•n “ßµA$hŚ‹^O"Ē8#„E«›•uu‹k¶U[ˆć†Ųøfō ønr·s\ŪŪ ¼Ä’ßtšŲѵ)¦‚įbłM÷¶Žō’čלżŒš•¾‹!U˜}żEkéŃźč’KrŽ’)‚9ĶWBÕķ”CUŠęīxŻQŚNćńX–z¬és«Åó«ķäć<Ō—Ü÷%Ófš]ŗ…ŒØaƒŌWŸjóŚ6©,Ąé9EŁ›öÓ o4Bó0eUZoˆ5™Õci#©AĘh:"ģ'‚oźq­ŒŹńą„=’ ÷}>źę`¢ęĒ÷@©O 9\Ö¼Ž6·V <Ąōõę>6—Ķ¶ŽŠ¤~c)÷ü(ę$į¼ kŖP EZŚÜ7—’>ņś× kž°°‘58¼¢ąÜqßÓņ¢×4Å¶¼ŗ+Ē<Ē {We¤xÕ5dZMnhŠīI»Ēō„ģΈDć¼Ov÷i~npŖ7‰šęŻóĘGZĶ£CkP׳m2g½;įķ5q,‹p”•Nõ¬¦iLķ–Ī "ŽźŠFų_Ž)ēĄj’hgv]Ģ”±µGZęØģvR9EKej]£Q!’dⱕ$­}oÜ$x/jńźīģ«žåŅĀš¦œ÷qrłNNkšhō-*ś+«8q»ą×@dµŽŁbHŻn÷ōÅsĮŸ±E#¤į!ųo«ųŽI#0ŲŽ}žH™rĆż¬ztüėŹüĻģŻ6ś(2>FĘ'ŚŖ¤z‘S–ŚŸ/k—qĖ ŹÅz³\Ęr0qžyÅxę«ākĶ3\Ó®`ņX3„;Ó9jęÓ>_7ŒyļŁ÷ÄZĀ?Ś“Ć:ī£ēiöv×[ƒą“nĆ'Üs_×?ƒļ4OhWWÖ3A{įżIw[Ģe*FrčFkŖŸāåĢ®į·¼šÄmOĀ:ć [{ØLÖ2ölvüŽkčų×RŌ¼%eąø!62Y)‘ó7Ż[rhsŠ”•ĻĻ—·»štž"³½‰u+«+ˆć‘˜ļ œ‘ī0E~ü6ŌāÓ¼iā‹[¹eŚ5kŸ-\üŪL‡óé\ÕCōަ¾°Ŗ-ұöœb Šź"†#ŽéķTõ=.ĘņĶŽX£,Čc„qT‘ś…Z—އĶ;°ŗ“µ›P°ĢÖéÄ«ĻČS^u£’eź~ń*<%õ+†VAŽŒółb°±ł‡ÅĖo#—š½Āų[Ěf£w4šŚÄĮ%@¼˜ŲŒćé_¦Ž•“’±ĢŽŽXćšßw# Ž•¬ĻqUmQ1?i˜ī5…Žń Cęµ…ÉXęÜwZ>ARlēł×׳ÅIuO ųoÄŗD–Ņk k˜Łs—ŚU”ƒź2+®›gŲ`+·I¹>Ÿ¤ŻĒ,¢/³Ē+3IŸŗÄ䞦½[ąæĮæ |]Ńž$IećM;G×t[1=­•ģA£»q–ŚÄóƒ“.9ė[sžwfSĮåÕqQ7"½„n’€Žųqū|~ń‚WLš’€5Ļé·×ZD0Ć«™cVø‹<(Ü©w&z×巆¼){āŸŲö‚šeÕõ­ėŁčÖŚŻ¬*@hZäw’–óÅ:‘µēO3yć2œmY+ÉWü¹?#š?RÓÓ@’=69ņdŽö ’¤†{rEu_tė«·šßˆ^å[»hć™Ō€Q¶Ž¾äćóÆ*µ=Z?¢š•=äĻŅd:Tčv2¦kꟃž;›Ćž%ÓoķĆy "“ŖĄį”õś×"½Ėźic»ńO…ü2ßõĻx^åāÓ'”J°§Ə›ŁĶ~‚~ĢŽ3×t©„ZĄŃęV$Óøō’ėW”‡ŃšføeS (³ķkļéĻn!‹O/&3ę»w¦xBų‡YM7Ćö–:“×`gņܱ8AśW§sń¬^ ÓZ³¹ų‰įOˆ —DŃ<šÓÅŽŌu&t±?fó’åŠdŖ: Į•ć×Öŗę€É’ ƒŠ›čĻcń\VŚĻ‡Æ>ˁ*„&#Ö»?ŁāUƇ>"OąŸŪYź>ń »Śłķ7€|ƒø±·ó¤Ż'=ĄŗųŌ”¬œ]½muųŲłĆIų“į„ž3“žŌō K« tŁĘ߲έ†<ĄēÜü¹Óē·ŌŪĮ_4MvŪķ# &—v %£ėĻ×üŠĪ[AįłYdŻ)Q)ÆL†eĘČ ¶9>õ˶Ē-ZlKŪ{msOm7SDšßptÜ(ĆŗžÄWSćų×Å~Ox—Äś’Š4KPŸe]BéīŌ(ĄT,NŃӁT¤ö>s2ʰõŖBµh)N›¼[ZŽ»]*ŽųVīļNģ‚7»YŅćŽ¼šś‡įO…¬ĘDŌK*ä’pŖqÖµ„ē‘ŽÅJÖG£§Ä+O C&¦½æžŃÉdžF?©Æ‘|kć(“”qod’jÕåw%”ą 9’ڤ¬Ÿ§‡|ͽŁįVŗeÜ·Mw8iĒĶæs׃Uļ¼g2yÖ"ŪKbŝvšĒ¹Ē©Æ:¤õ²=ŠX4sņųjņ)Ōۘ]:cžµŻxnīmā Ł‘~Óe0Äm51ŽŚymŻŁõdŸµWÄĻxjĆĮķ†Ÿ¦@«_-*ƒßēĒĻ©!™¤,>c¹«ŃÕ=<611ī®<Ł]€[ųēĆwž%Ó“©<3ā«xK‹xIŪpē³/o„L‘Q©(½”bÓ¬õ9ī3·”1WF^‡5=ēĆĆw§\„œ‰Ll@‚¹'H֓ќ‡Į 3G½ŅüCąÆ鬌ąžĘćvß!ԟ•³ĮÉž•¬ŗTŚt—–wsG‚c;Ē_pk2ću<’Ē^č6ę—9r§~zW{¤ųYÖ< gć½:D{6q½|ÉĘy¤C®µ$Óģ–ėåX³“Ųü«Š‚Ģx_¾Ó@DĢ$rõCś’śéKbe±Üƈ4Ė-²Ü^ĄŠĄ–ÅNŽ)°¼ą_3~xoį©G éYŒ·ÕP]Ad¹ćŽÕė:tÜ¼a\!ĄžµI¾„{3Žų»Ō:VŃ–wK¹Ią&G#õ®SĆ÷Š„…Xyrƒ“Ö©je%”č­0UĢpŪ½ tŗ-­¤wHÄ7œć"‡–Q<{āR®…ā¹!G(uč#ł×!s}#`-'{ŌØœóz×ÖW†1ŖEi#Ģ qÅ{ÆĀĻOāĶŽAģj@wĻ@k· OSēs,_"?A~hZw‡­- ·Ž5øI2\š¾¶ńĒ‹n5_ƒ·ŗUݱ½pĄG&q»ƒĘ õ©ĘĒ꣕i+³ćæ#ŪķŠ0Ȅ’ õĒ„u><šļEšūk–Æ$b#–uÆłę·rŠåĀÓꝎCĮ?T\ŪĮÆ<)ć3ŽOzō‰zYŌōõ‹u3@Øvȼšjöø| އē÷„õ9ōĻ^“H«a Ąo3¾ž7_§šn§cā 'MÕ q2K;½č;6ŽĒ’˜^ŚŻŚė_;ųŖĻUń†ØųbĀUŒ»„$“…ĮҵŒt3š“«~ųZųWHŃ­ÄB( B¼e½Mqu+FK1 fV9aÉĒ„9“Cvģy—āĶ!-uKFöÖÕĢy¤Wvę¾dż”G†¼qį{©u}6?éēĶ“¹÷Ė"ž­Č®*•VČōÕ6·>MÓųqÆžŌö>ń)Žū@XćŽĢĖ·Ī+ĮažųĒł5Ć/yŁJ§.§’~Š’³ž‡ą»ķ;@Ӓęv‰¼Éfs’ķ×#Ӛć|1®MfĻT‚X®#!·‚Gœi3*•łõfϊ4;Mv+iV?.ś$‚ąšĪC/é_Hų×㯂>'ü Ó>뾽Ҽuhń%ÖØ”R+ą˜ł÷Xœt?żjōp«¹āā0ņ“V>jšA Š…P:w®«Ei<Յ”¼DóžŁÆ£Ćt?Čļqr­ÄøéOuVq’Ą_*ü£­čkbś"X÷`/qļ\¤O󜆬±ÆV˜Ō} ;™ŁcŒž™ćµv>™d‘0SĪą:ÕÓ}Śö=ÖR(+—S×µy\Ś:t³!}ŹĒåŖ‹³9dõ5¬ ¾žeb÷{tØ"°ŸNŌ幝ƒĀßt[&s6z7‡¬<7«)]Wßi ­Xŗ¼––bh” ±8ć½;ˆó[{Puaäo¶ÜœŌK4’8Š}Ø1“7ĀkČ¢I2UNW=«„žĮņ¢Yc`Ē•¤e1¶—6ßĀ7€7…Xöż+ J’„Zŗ¹}LŖ@«¶-ĢA`_žµc!ŒŃ¼1c?ˆWSÕmQ™r¢Ä!ō»[•¶ÓīVČ$vČH)?t€T‰²ŻŅ£Č–rJWœ/\}kšŌ5 é }cß× psźeXźŚœr“×Ę"ČICĄżA®Vśī+­BęDUÉ;ŹŖą ֑ܮt\†¶ĘTıœdgė[ś-Ō–.÷b$d0aĆ„)>ĢŽ Äž&vŗ1¬F³”tĮōõ¬y<]4BU2\H£nć¹śõ£˜NHéģd›X°YŠ?“€}ĒÖ¬æ…/¬Høø¾–é&ö7ü³°¦¤čņOiĄźn–³Čųž õ>õf?R·H²eɹ¬ĖG|Ń]-`Hdt–ĘrkÓm¢’ŽāŅ‚…Ż·É“qŌ ÷Ļj %‡){c#±vvķB½¾µŪx~=nĶ#yä7–ūpIč(2P;VŅN£d'øŠx—Ÿ¾3łREgc5¬ö!Lł\§ DĶ qé¶v°AfŒź«•ŽŻ«u"œŚĢĢZ+…LÜŌ)X\Ē7¤4¦ićŌ†f r6Õæų#DkH óLNåŚAņĻæękIJĆ+ųwĆ·>Ó×3“š–,ķĪ­uwRj‰lÉå*lg)\Ģiš š°63\ĢAŒd‘üéŚ¾Æ©ŽjƒH±Kė{‰r6:’»‡\Ö2Ÿ`GćRŅ.ķķnaŗC ,‡ĒJ·į½"K« '@„óøĄ®jŒŽ(Æ$Ieu­ŌČ$'Ņ»Æ“vÓÅušł\Ö m?5»k3<śf”öś±P7/GaėéNšWÄÉ¢Ó{Ųme¹‰ˆ>h8ąō÷­ąō!ÓG“ü@ųÕā­kP_ģ‹›M=#“åŒoOóü«ŌtĖā=ĮīŽfņĀnQ×µŅL©«ś®Č¶ˆņźzUO-`!'øĪEčsŹ6+ÜH.c{v ģ¼ćļ<5ŌėŗDąöXåøņýĘЇø®Xi¦D¦I U ŽæT„re¹~ &øŁötu›ėĄ÷«ö-,·āšÜ¤ˆ6…Ż…o|V} Ū±_Uµ’öī)ņ|øó·“ü«±šn¾š%ķ¬·v±ßi‘J’IŒyŖHš¢ĘG췁¼šŸÅßļ…FżKQ¬Qån= čkj!”Ėˆ§Ó­s¹#xǹĶ\ŁÅrģ²DŖƒų}«øŠŚĆN[y-&EĮeažGcYĪ”¬)Üwˆ/5 v䶍§Ł”Q–XŪßAZ’ķ%°×”øÕ4i'„üŒq¾Žµåāk+XōšŌœugŲæŚ~™µµŠ hH! qļė\…õö£ŖŹĀ°ÜŚžgÆlW…Qs3ՌōŌ‘|a č±Ķk{Å:Ēå…ܼSāÄO ŻŁGck+-’›óū$ctÆG †f3•ϼ»G¹ž-±) ó9ą{šū׹?Į?üMŃ-¢š^ˆ–žw÷[¹e¼`u ·\W¬ØXĘR±śĆš+öųš~qiį'Nń§Ä©ł¹Ö/œ-e#žXƒ÷@Æn»ųE§xsW›Å_~&Łų¦ĪE i¦Z‰B6I­”9JāXÜŻųŸP¾Ó< §.•įH£ßµe*øĄéž¼w®·ĮZ|V’NćHµA8A; Ü ņOųśVŖ™’Lõ OĀw“ėŚ}Ę»yk®éķƒ%œl9Č=äń^ |!5Ÿ‡ī/cŽßIŅ#bW`…½”w­#)Xšķ;Y¹š†®ś†•-ÕÕĶŁ1“Ģ…—€~SĘ1Ö²5sŖO Ę”«jņLŒĢ~ĪXĄ=±]1C6aŲųŖā÷Ć÷Z^“~özJßF~EOæŅ¼ŸU»ū5Ģóhš“ś›D@t<7Ōw­ćOń7uA’ ÄĶsH[X‰x­m…Ō … NM~\~Š’šQ©u—Ā_ ty“fvŠi„åńdóŚŗiÓł{«ųZÖu OZÕļu]FG.Ļ;nę¹é$q!1VĪz×BDNC%;ÕŁļIĘ{Õ%ŒĒ¬3ŸÖƒšo ‹µ]ŠžzœsSģĮ]]Or:Pr9¬x!äRXsŸJю›ę'Ž„t4 t-ŪŪ“hفœf“ “ĢYB>q€)7bĶm>ŅK¹R 8ĶķČ‘¾ózū7ą—ģ»ńWā­Å“£@] AĄinfFżŚƒó;sXĪeĘ=ĻՁ’³Ćźś•„iß~";e' ÄcūŪO\gé_Hk>6S궟µ›ßų‚ CZYʁ¢uS°ńÓÖ¹%#ULä¬üCaŖjņxgūFćĀś|«¶kß!ˆ}T×éTg’„;ĀņßIūOˆ®„oŻź 3ԟš&³ņ4P(]=Ÿ‹t»»^źéļ"Tb0>QÉõ®Ām:ŅétŻ*@÷’0 81žŁ?•+ō5%Ō"}ųĒs©¦­p?ÖÉÕXÕ]KO×õ4kČŚÖĖEPVQ»aq·šFź&%Ž­{„é3ŚéVZlŚ¢åK0Ė)õ-×č.4ķ.Āųk÷fśśe'łQˆēéXÉÜØžw.“­ŻKwuŁŚčĮ|Ļ:I6īö×Ļ~?ų…µEĄŚŚŽė1HˆĢpÜG#łÖnŖ(󔍼{ŖŁßxŪVŸQ›Tœē$µéŚOĀŁaømR"fŻ&,MsT’ŁćcŻ“†“ŚÅYŚ7 ¹¤Ūڽ»Į¾xueY¬Vņeł”:åø¬®a;ō=«ž‰īlDWQɱč'­} šĻþŃ­-®ļŅŚźö<Ø“øēų½±ZF,œv‹P7ŒęŽ(` ņć >•¬čé<#+d|Ų^“Ü żO;ko“]$2#·ĶŒć…ś×aqįż 8e† ŽõS’8¬¬tÓ}ē«\‹Jg×RŅĀŽźYŠįߣP{tÆ™"ŠnŚTxģ•FfŚ?„äc5öĶŠŌš¶ oµ{KŪ6i¦†Q±ē’õ«ļĆÆé~&šģ5t«ļ Fē`\øČ-Ž:Õ5 6|ˬų ĆZEߗ®_“ÉšY‘‡š dóŸsW<'«>ŠF‘gw,ŗ"’ÅY°_°8śRd9žæāK›]CµÕ¶µĆO†Xćtg¹ķŅŗK_ų[ĒV6ÜGjīc ®Wę_”©nĘjocŽ4é:…,læ±l%·RŲ¹)—' öƓ>:ė6Z>ƒy¦Ū:yßĖ9?$cԊ…0‹>@ńOм’ Ųų~Ō[[\,Ū·Ą3qœø:ńŁ-/Æl/#µ[›‹ōaŠXēpĻń­QÕŻŲż~ųeįżĆt;»[z.mŠŹXØ{gļ•ėĶy_Œ|1¤M¾Ź[kד Ģ£”ć½Źy®›ąI­źźœšgīˆœ»{­qŚŗ×¶:žš‘HtĖ1+ƒ»·Æz‘•Œö×·qi6y™ä©„õōŌ6?„Żž$[ęrĢĶ!lAĻJb0,,5WQ³C8²‘œĘĄI޼}ī8Ʋž ü?ŅÓO¶¼²Õb›Ģ- Š‘ĘrHō9­ovg9؟Ē| qØYÜi>‡Et%§xŲ©™Ļńbø/ųWÓo4ķ?ڔVŪ¶ĘdÉĀNG< ÖF\żņŸŒ>x÷Įž00Ų$Śõ€ “±ļsĻ_˜żkõŪąßŒu^Š|_i2ZĆobe–7aµpGsO›K)+wØ’ĮH Hµ½n&½:“é2dŚŽĒŌƾJų3{¬xĖā|Ÿ®.e:ĖÉę4.å1žĒ¾*#Jćå>Āų•ā Mg>øm¹€“‘#Ī=kįĻ üOÕ|!ć[߈ž»m:+fn§oØ=3ZSZŠ1±źž'ńRü[ń"ųņž;iõi­×Ķd]”vŽ›{tÆNÓ4ė/Ś®ƒ5č³Žā/)@$qڵж„Ī+cÅĄĖįÆ2+ČSK.T¹ œõl~&¾«ųyć žĀĒĀž2泓K…'™Ī &8ǧcNę3§sćĶĒ_Ų¾ ń.ˆ/mÄböH×sŻć“óķ^õšßĮ}’‰5_Zźėeo-¹ó8 WŗĖŠRÕĒŲõ?†æl<Ŗk>¹X5}Eāi"iĒ.¼į—™ņOķįŻFöś}|¢AƉ0ĖĆžžłĒ5”£cecóß\µÄŠ]‘”żÜuÅ2ĪH¦Xā–=HÅT”± jsų[İj–ó$?:®OyõÆÕĻjĻ®č¶zŒ2[Ķo墶ĘÉŽ’Zß”Ļ'cŠcU•6Ÿ”®_š²x’Ķ“€Ķē+oēXL˜½n~iųĻĆēĆzÕę5ćIw Œ®`Ž{zöęø[ˆZčAĢĢ®$  ī§ÜūCH’‹ $ūD“'Š“B²ĄDx/Ž™öĶw’±oķQŖžÉ“§ĀļV6p.’nSO× f*ĘÖGŲXć©϶*“ŌŽ1?Š%/“ŸiŚŒ4 «kk6«}k4$4gp…#· ż®æįŠJÖßIœZ»šOJå–ŽĘ–Š÷ƈ¾µń†ī-¾eiPüĖŌ68#Ņæšļų-Ÿģ­wń«öpŅ?iŸéÆÅ?‡†M/Å1ĆgæÓ[åó3œ¶2²ßŽ“¦9äÆW’.O¦æ.恔•µ?K‡Mvx£›ģŽ©$R’WoqŚø©ä‘%YPōé^„^‡%T8»`óH,zƒŅ ‘9Ģ, *£‘čĮb*”ŁFO~Ę£Ÿ Šøóœż)š¢¹@UŻ€kBŌ“`‚ 'ó5¤e”ŗ-Ęó•9…ĀƒŽ)ś…½ģ֍.›ŖŻizœ8’ŽH› $S‘ƒė)9ö:©“?šEŪžėö½ż‘ü=§x·S¹½ųŃą@ŗF¾·<Ķw$»‡Ž@9<å\ŸŁ+Čą¼Fm”’A¹q\ųØŁ›eā==NŁ –0n"Éž%ō?…~e|Aųx<#ā­B(•ąšĪÆ3<˜ķ†ć©R}śžõę4ē'ķÉšrÓĘ_µJēN:Œö÷ÖłR-Ņ(n#ćųGLūWņaā]*ėBń>µįMA@Ō¬ę(@8Ż<6;VŌ%ļ4gScšœ ̊Ņ£R ¢P]ŗż+Ń<ꯨKåœm;‡Z©Fģ \`ćžõq‰Ķ'r)Õ¾u’ÖØ#VØĄŽ śā®ÖF±EÆ=l²+=:~v$·dČiTsĒ©Œ“:"“ՊŻŗķĻ̾Մ+Ŗƒ'š±Œc8ĶZTĻÖļų#—ķ•āOŁŪćŗüń„aØx/Ä3.§¢=ĞRi×ń}蕶(•xĒsų×÷%šsÄśbėfāĀG³šŒ-Ę«¤BĆQOõŃ0Ē1Ē$ūÖ5WSŖ'Ų/ēÜĒalź›~Yņ9"°ģgk]FņĀābĒq–Ó’­ų×Ö¦·üļö3Ņž!|?Ó?jļéĘ-BŃbŃüHĀ÷É*2øb±–'£/Jž0 ½aey£ŽŖĒshŻ åH$qS]4DŽgH¾Ō|;~Ó«*E“g# ŒšśwMńމÆxt\É5ŒWŃA‰TUˆ÷õÅ7L—Ü·«ėzOˆ| £Ź–‘£³©1 HĄ‘ßėšē¼]ąŪ;;>žÅ/#ŠXÖEiGVęĒØĪjob” ļ†Ž#¶š÷Šōże䆶Ņn_õœōż+ō—ĆL×pŪŽÄŅy,7ė[ĘF5"zZܤ"7"·žŗÕŌõ)SN“x¤"$l…ĒRzÖń•ŁÉ4iÉ;Ķ¢‹ö!ŹpGZvŠ>Ū§;FM÷xꬃŸŌü.į‘2sĄę¹»T:cˆn¾L·ØĪ„®VEˆ°š[½,LBJćg\ƒšc4µÄE·Ø?{„Y–/!|°YŌך­eŌŽŹ£|„’p8ŗ+KkęŗłĪSØ ¾C¾ŌQŽŚA £7@Ń5W½Ż<)¹IpŁąŽŻk°:#źĪāųlUČ.~”Eō0“Ć’ŚÜĆrf9{zW­IxÓivéoK(ČŸ­LŚl‹Ą‘pŁ,= I&Ÿ!¹Fœ ' ķAŒ·-Ēok &9=:ÕI’{‰‚²öķ@¢®Jßuh“±ŖŽ*>L“@09õ.ƒam¦B“Mm!vJÆqAŠ‘×é]ÅŌw0Ū5¼[ĪąĖ“©­o·¶·‹DŪ3Ją»øč¾Žō&Œ‹_`W¾Ņ:ż+ˆńm ²Ōōéķģ×÷Ą£>ė`œž”¹‡į-^htę‡VO“.‰žĒÅź:-Ōś¼µUdÜ2 Ē›čmn‹KU•ĻcŠņūˋˉĢ2†MŁ+ŗ›76üŖÄfkÅĘÅ ŒšŽŲü+čE×ÓWŗMZŹuDnv6Ÿ„J]@ß¹ķą]Fk„Éą }ėǼGÆ®źzUņŸ³ĆŹ\s‡Pz :?x—L¶×-¬¬`{(] <å±Čó­ŲĶ­Ś"jr× ĒOz iÄšwN¹]wQ¶–dŸO”(cīÖ¶4}>M=‚įó”ƒŅ„Ģź„M K¤ŃEē•›žµ×įa¶-"ķē½bßS_fr0ŲŚŻĶp‚UåÉĮ5—ymöå²@…”䑎°-+t©dł£2¦įņęŗ±”Ż,^Hc³|œu®j§\7:ų…ąčLØä ōöÆųGāļ|Iō].ĘūÄÕČ]9`HĖI ’@ =kvōaCŚŹ“šę†ė·R×ķ„ū>|Tų'įŃā­wMÓ¬¼;5“Öāź+…,Ģæpć”Įjž¾|7Ń·ĆŽ%Āføo®`gĻM»_Ķh{Z]ųviüŅ™VĪr3Ē5ÖYXNꟻeĒ]Ż pIź~»õ‡ŹO‚¬5_ üS‡RuŽ¢\Ψ˲`€?*łwövšåŸ‹ŊϧŹói¾dQŹFw*ösĒó¤Īų޾®ēĖæµnumsMŽÜY\ĆpŠČŖvķĒLcšÆ­fæŒŹöü}wÜ@|«k– »©Ę9ķŠŽ+”łķysJēß:Mž—ÆŁjŽÖ#[­6ś6·`8ÉčqłWĶ’²'Ž­|/ń‹Åß 'Ō.­įy¦’Ż'Ū$yłżk®š=,æćt~éü[Štˆ¾üńŽƒ§Įó<–Zé€nƒ±ßŠ–ĮĻæµi|ųQucńĖį,÷©§xkÄ";»~Ÿn »äĻøĻå]\ˆąā<ÕC)Ä9khĻO“±ģš[ļĖšćö%·ų1į ;Y.|iā m"Ś7©²‚7§Ø /=˜×āŸģ«ć›ß ėSų[Ånh:Ī…s£^™” ØŪ’xė‘ųšŠŚ4Č>Žł-Z¼3ˆÄUÕÕ©9~ ?Å3ó÷ć—Ɖ|GąmĆO„C¬Cg%²M°ģŗUaÄtć¾²ƒö\š‡>iŗÆÅ?Śx[O{e6ėf’½2F1éŪžŖå© n~§K2”i«jŃł÷ćį~œ·šo…šöņkišw3īóvœzZĆšäWqÜ,P"×¹ńŽά°iÕwä©(Æ+%ś¶}WįČŌX¤ÖøŻ“čkŃm$i‚Nģ`×,¶?h§ēAo˜ä‘Ÿc*–õŖ>™Øi6—p“‘ݐĖpŽ1ō’ ėR5<.xķ<@.˘£ ®?ĖšÆPÓäŻnpYPOCT\„Čåh”‰O|kR‘Kŗm}Ø:i ÓŃ ŠeE<ÕÕmęxįŸkŗAąš JVކĢäœdś×iež\•ōśÖ÷Š™zęŪKŌa~·W8b7ŒłlGŽąā¾[7)į½SP²µžFŽÅ Ÿī\µ%Š­»JŲ 2åĶzm³˜¢@G8¬Œj- ø ūŠr>µ;ŻŪżŠmÄū«žõŠŽB{Ø-“sŖĘ’ʱµ_ˆ×n—&™gr ŒņÄ Ŗö©;_ sē-oā6±mzóApė'vęĪk3Ćśßü$“M{*ˆćŠ×-\A°§¶ZZ$Ȇ=¬¤g•~ūĆZ€Ņ„ÖRŻßJGI( ŲĻ>•Ē)ö=:T‘Å›P$VAņõėҳuĘ-`ČPd0`{Ō©4wB=¤¦(£h…ÆG“¾2ÅŚ5\ē]8–d—Ź*Į‰ĻéL7oµņ™^œT¹\éŒVé¤]ZÜ!Rø»i|ŌCŹ-+@ՎExŻxN¦©˜ŅY6 xź{Š‹å(O¦£¶p„Uķ:ö] ;¶L6ü@¦åŠĀqč;ÅsųVćYÓÆ<;t,¶p›®6…›0ÅOe9ŽÓ\šŒ¼-ż«ąūŌŽf…æylųĘ@öä’ś«XA³­m¬<šįߎģķÆ¼āÉ”¶–37ļFõ#8nr?•|³ń‡įCh^3¹µŗźļk¶!"}Ö\tõ’õUŗEC}ó/“ė’źśf£u›¦}åTļœ7×ļZūųÅzG‡¼[ąäŽÕ®"]Ś"UĻükžP±³“–§'{¦Ü"[IfĒĢŽ²*{ٵ}ašŽņ'Į݃ĶA“!±¹ń?ķµkų’„²E‘ćŒąģć'~•” ųSTÖģu=BÄ@ÉaŸ,lįX®qņƒÖŖ'4Ł=¾¬©$q²J‹·'+÷kkJń^–ś”v‚õgOŻNŖGb;VIĶGsĢ>7xÅuŸ[ˆt+놅ē`JČŲėŸĆōÆ,Š|_Ŗi“DžE­ü ą NV”bpÖÆ®zžŸń"×TžKļ ŲZÜÜ’£„FłY潌×Ū’ LJ¼-”¤L1¬Ÿ¼!ĒĻź+Š”¹ń¹ä—.‡µé¾'²Šhī#ŽajzƒĮ½‰PI¢I¤!o³ČŁŚėĪ„zßCóÜDu04­ŁŌ‰KÉP{}+¢Ōõ=+QŃļtė©“ČpIÉōGn¤™ó®¾²µ¹5]<Ą†El•šÅt?~?xHŃu? ųÄ-u¢Ü!ņĄgūcŪ’­Yķ¹ś\Ń^GĪ3jž·×u}JĖWt†ǏBŁėŒšM}#cūHü5𷆓›M>ž{ŲķĘ%`Īxé‚xā®CÕX6õ8’žÖ’ u‡76v·>j‰ “Æ\~¼wIż§¤šö©{um¢é·Œłb%}ĀėĒzߛȨå½YÓGūM|oń³¾ąOkŚĻ˜éZ\ҤkźYTzŌŚ/Ą’Ū÷ć–£cgį/Ł’ć^©ē’bø»ÓšĘÕĒvĖ…ƒŌ×%XĪODyyŸeYd%dq†'k •#ƒŅø{ρŸtŪ›u>ŗ×Æg‹|+dęgxżä“ģ+Štf¤zlė ‰”NjT䮚ķśz=Qóę¹ēƒ|eö ū}sĀ:ū`Ļo} Į4-Ōf7ģkķŸžŅ<'įm+ĆŚv»dtU*$;]Ÿ˜ńÉ<śńZB-nyÓÄĀzÅčĻ„ŁP¤‘¾I8ĮÆ2ŗń=ā¤ŃK0š=ÜīōĶl˜f•©i×6Šße…$#Ø$\N”4–„Š‘<öĢūøģ)˜6ižīń –Š™TŒģšęÖķ’I¢E*3‚=(ßiV±ŻĄŒä©Q‘“Ž‚°µĖxWLÜņ*\€ŁŪkØZ…bŽećzõüio¬¬>ĮnĢ׏Hb§Ø÷„÷1–ē%«ėv^…f¾hg¶n ™?ˆė_ųūZń'‹¼O­[čZR½“m½_' ¼œV‡™ŗ…ō–/k‘ ņĒūÅ/ÓžŖóļxźĖG0鎄½t/‚x#„LbO Fu»[‰”m°$žō­½~X“Ķ6]JŅ%óąPnÓ>Ÿb+w<æÅ>!½Ó, k#ngw]ĢOAž5ę²\źś”‰-ī ÷Wjß#°ĘŃŲ {P u=—Āv“= šśöŻp€·Ģ޼Uo‰ŅGįØģÆt”}D:+ČxÖƒĻ?77—VQܹXŌĒ^ßZ¤±\éŪwFó–8885Iō3ö‡Q Į-ƗŪ'V9ē4¶š„¬WNæ¾ 2H)Ļ”™ć8“Kū>ŽŻ%¼†E‘F „āõՇ§ų?O氓p“0UŗSR°sœ–£y«ųoS¶‡LøœÄ®¾dG#=ėč{ŻMÕ4T‘­—ķ¦=øE+“’xśŌ”|żyį듪½å¼§c>ę{t­›»ńa"üŠ1ČéķAÆ9Ūųzśā’H,Œ[%×hĒA^m«Ų£^±Sä>ģ?Š“FM“’g¬‚K0$Zé¼7öćµe›RyĄü؊¶†Nlī.©mö‹ąyķĀīĖjó­%¹ÖūG5“)1˜Üøg®)KbOq³hUbó£;yēÓėPM©hw’]Ę·¶–÷v1v{ ČGwfńjó©{G“!LrDłĪzēŠŲ“æµYV`XšEjv7ž ÖÆtI5=*ā·F¼Ö’X;Ŗ\*ņų„Õō»™Bݐ©0ÜAļÅ Ńv; x­#±–y ³¾Ö>a\zc½VŠ~ ŪZųšIõ}>ŅŸ0°˜.ą žŁ®yĄiƒć™ÓĘ×CJŁsnŅ& }GéXŗ‡„šmt٧x“ąōżsŹ™“eŠšŸ’ğ_6÷ŠäĀäŗ·pJsų«J†ś(m"šÖ9( ädö§N= gDš`ŌÜ$Šø=y®WXųjZ_›MZH§tßņŖŻĮĪ==ė¦1čO:õŅź³Ń ¾XķģībK½†eoP+Źuē'cŠ•(E\‡FŌ¬Æ“½B{Kķu¶‘0ó×*]GŹł5źah_sšmÓ_ėS,—s)dĖrxõŸĆ/|EÖmt†ÖƋ¼G!łvīXÉžótļSŠŠ²9„+­?æąž~ųft/žŅZÅ׉5±wųnÅw nĀCüG=@ōÆŅļhš—ˆtl§†āųkšśŻŚ4·1ˆP¢÷ŁŻøōŖl꜎§J×­¼?$/ŸC}}sóGØĶ²D3ĖqĄ?­w2ų'K%5/‰^›ā»µ>kFä”VöäóUĢ™±ą§ž)ƒSžŹ±±ų|ŃyfEd•›8ĘOl­z¹ é>Ņu¼=”^ńŗTvYø'Ó©­/­Œ\Œ/kšn”„éŗgˆ-e‡ÅڌąŲ*1_+©(?*O‹öŸcøÓ“JKķ:ÉT!ŸĶ‰a×?…mMy¶³ćēš÷‡tŸĄĻ{f&’$33c™±‘Ó­yo‰uʒ0g™āHÉŹĘsęc×’­[AÜ”©Ś¼Ś,z†”e¤čā,¹vņö®z±ļ_Ÿ?“§ķĶšļįkųP_xÖa%Ŗ ĆčsŽŗéÄ»$~üQųåćߌ:õĘæćÆj:“-onĆbCž8¼j[”‘yu-Ō’œWRF‘,7Éøīśv”U]r«»·Ņƒ"=ŒŽyéɦ¾öR„N\“Ļq‘ڤlĘ5>aĻzæ±,„.IĮ å{šPŪFŋ+4gųOj¹k§łĖŲēč(4„z›°i··i»£7'(õÆ_šĀ][Å×P[ų{O—TŌ&b‘)ĒRN1YNFšSõóąWģšūĮz^™ć_‰Zœ–¼ŹŚeŗ1P1żźśŁdøÖ ·ŅÜx7ƱHRH|½±Ž›” “õ®:’¹i–<¦xüK>—š¹”×5ę,dtŽ)“µ°†1k݌`žœõ¬½?M¶kxoÅņ%Šb~Cʑں!.†2Hź“Ķ]#¼Hn.¶;sżźō©u ×FUĘ9ŸlV–¹‹ēś®£öDk•€mC¹›<œĒóĻqµ};ģą0)łŗRö]Gcš.ÓR¶žš²jQ å …ĘslU>×Fń<:…ī› źW¤ ¦!ŸįQǾµGMOž…BŽ•į]7į}ęŸ.šÖ—W€dÜ7m<šĄŽ¼W„ź:¾©­ZM{“V¬Ćj„M«:ā³:¢ļ©ą7Śö»«\Ś;Ā‚?‘·’OĻåUld—F×mQ¾w` p¤{ C’>¹šœśˆ4 WJŌ­źtŒIg”C‘ž·ą;K¼’9/­“J…|“ŽUÌwĶaRG7³mž¦æ“ ™Ę„yjR&Ź#$' «ņĆćwÄ-_\Öõkų.m®4Gœģ pQó÷}=ė(ł›{‹_~x§[iŪÉÓĮÜńŸˆūWÉ jÖnpŒ ź+3²”Lų]ńQš?Š-ī<łfÓgqŠʲœŸē^ÅńĀ>›wpŚ&žŹś4š `eŻņż*ønSßšAŸŚé>5| Õ’fjPZų÷ĀmÜĶūū»n{H*Hõ_Jżœ‘g¶æ„Äģ$GÜXzŽÕ8šV’—uż~76>ÅšO‰­¼G”[XJOŪćR“×޼ļÄ~еO\šŸ‰ō«]OĮž(³—HÖ ™G*²RąšGĢT“ŁqNšw‹Ł“-ó¾żæ?eKöQż„>(ü¼Ņd±Ņ,ļ$Ō“+ I[½:W/Ģğ””Wē,–ć3ēF+žĒéZa$ł6ēus*ī9Ń£B8ĘAĪp)°¬˜ä-Œg>•Ör—b “•zÓFȈóKģx  č…ä³ŒœūR£ˆć*Ģģ3ŠUDq™¤’f AnœW¬ä·l+0Žć§øŖ’]ŗr>’’‚f~Ś7_°Ļķeįˆ’jz…ÆĀżbh“æZĘKĒ4nv‰Z>Å Ÿb;āæŃēAÖ“-kFҵ]īKFæ“Kū Q÷+Āć 3œ,ĘŖŗ:c##SŽ·)xˆ6‡įßüįķgIÕt½jŚK«9ŠÜX¼gkŪÜTÄ`’õ«ĶجĖ?8|M„Zßčśµ¤óζ’5–Æ ®w.qœ=Ēį_ˇüūö{¶š'Œķü{įamœŅ­¹‘c+ęDOŽ>üw„MŚI™Tģ~Y¼¹qžm¾•ńŗÉ±ĄVkւŌóź.„RBŠwżxéTÖ)—vē ·2ŠŠzDČø‘A'Ö¤Ų¼ Ź¢[B‰bsžųö© ¶Ņ!:*`9Ń–`J €Mj4+<»LG‚Ū±éZ(ŲŚ2¶‚,7P5œśMŹi÷ö÷ sĮ$`s{W÷Y’{ż­fż¦~ųWEÕ$µ]~’ĘŚO3ĶZŗō9Į%PNSĶ)Ęčģ„ßÆ xŽęėG²¹¼‚$gżĶČ^‘Č5ŃM§#ĮBź&ß#Øś×Qu:.Pń§ƒ|7ńĮ^&š‹l!æšÖ·e.ŸyˆYd]§ƒĘy{_ę¹’ż—<[ū%~Ѿ>ųqÆéј,n^Hn ŒŌ-$;­ę¶P€GØ"°…Ō„ä|!ŖŪIun²¢ŗD@ ÓėV¾ė) ŽźrĮŪɖo3sĮ8ķVägĶŠś£LÓ“yō‰… ˆ§É“`čµx×Ę~Ņ“ 2°_نŹ[ &OC\UjŲŽœnXšWģõs{%“ś·‘ez“¬° ÉRśź=[IŠöé{k ŗ…^8ĄĒó¢–)9r¢ēM4ušcµĢ-VFݹN21]4Lؒ@į\ķ'W­Mźyµ#m ė_(Ķc4>}¬ä. ēaĻjō-&k[ deŒ$,ŁĘ9É­Žc¼†ŚŃāK1DC’ Æńž=ʧe"Ź‘¶Ćźsü_†(ĖiwnĻ˜r3]Ż“3Ü"ˆ°źqÉō  Ūč¼ńīÜŁēž•Ž“Hó˜äQ· ;F™=¦š+ƙ+ŒmītźQO–Ŗ”ĻŻćš c$y§ˆīÆ"¼’K»pöé2qŠ·įįmµ„ŹV=æ(© ££žŹå ˜”ocŗ=ė—Õ¼Q¤Ūż† ;(Ņ?ŗī§%'q  6Z»Źė)Uū?N W[åĖ%©ø·rŖ'Ž“@cÜ;aœäwŖÖŚÄ!cUvĮć„5ęW3Ųl×  ·ŹĒ9É=+jÖõ&„³¶Ż¤~5.]ŒŻKP ŻĮ_»Žō¶Ō.#‘䎱Õ茺ÓŁ]Ėr‚ĘK¶†(åS÷dZźm¾Ć“ęHĀÅĘÖĒŖ: śÕµ Ń&Õ,–œ7*?ŻøėбaØĮqj‹#Äd ”ŁM½†$ؚ|ļWĻ­rž)Õį–ž†Ł…²Ÿŗ9Ś=sRČ:Ķ+ģ·ZJĶĄūI\šk›¹¼›OŽFŗ üpEecx#–µń(¼óVīƒk§œzÕK˃~ńE”‰e8­%ĒIŅDŗŌq”ņĘ¢nģóųÕ½1šŚ9 †b[Č= M˜ģmI}©Ūé-+}¦ķрŲK ö®¦×ÄB=*HŚŽgź . šŠØÄóĖ‹ŻSQÓÆ®$†7ŠO3‘Ü`~uÖkŽuź@”ĢoŌć€qō¬„.†ńÜād\6Ė—Pąõ5~JIp‹ d’ ¬œŽ˜3ĶåѮά“+˟40`ųȽkÄwזv¶Ė5“вĬ>ųĒ_ēY¹\Ōä,£hÓķR7ļIϵ>ņUše•OļĮ©KM0ÄčĢ@žÆR¾ky<2ėn¬— „īĻC¦–­#ēļxjūľ2Ņü8ś’Ć&„wöhŲ‚CHr@ż+;āGµOx×T𦵕ØCŹ·zū~cóÆ ŗŻŸķ^_ Tį 1ŅĖEä“34« R&‹zšF{ŌŗÓāøA²5Un85Ƽ]ĒCæÓ깅Œ—Ž-is»œ“Žx8­ŸŁĆİŚkŽ<¬Uõć,Än²śqŸÖ·§.ē‡§ŗ>ÖųK§čŽ/ŗń©«¦Ÿ&k ų©šßĀvÓ­/Ī›Øµ‹WGĮ@ē©ėDCó¾<Į8ņֆŻO’õ¶MjęćWŗ’9/'a˜$ļœ÷®PŠm=-Æ 3+ī8xĒ;GJ%&ĶŌś į’ķGć’ ŚŁXźW1kZOC!ł¦ˆƒ×>žĀ¾Ū¹×ü ā’ų[ā…4˜ ń¤2Åż¢Ø€nLķc‘ź <śVŌźXŽģč+ą®›£ÜžĶ5ŻyUÅŗĒaeĶq4Įw(Eź['€:€}+½ż›>h2ü?Ѿ=~Ōoš‡Æī‘܏oä9ß,c’2Ėß?P}uecņN2̱ĆW”Gām%ē}ųYūž×ןµgķ#©jZeާsšŸĆ’µÆ‡ —ˆüĶ”dGūXĶ|±sāĶN=65K–Ū±•ž¼ž…ZŖēō‡†ü²ž£”lŌnż^Æńz˜’<^ŚL ōÖŃĪ‘®Ü$“%Ó!īäaŗ’8¬};ĘZÕ“I¢źĀ{»G $2;|ŠOUĘz’žÕĖV„öŖO©ū#š—ÅŠKįßźš{±-K NTI“ÓšÅ}wc<••­ä ¶&}M{xYč~mÅ8NY6Ŗ?d’Ūi? |$Š]SV°°]GG-’Ė4 /“œžńü?ŸŲōÄń<6°]"Ų™O–ė(Ūåø%XģA®*¬ūæčG*Ō—YsąI~©”|9³Õ5 )ž2 r€ÆF÷ŽŪi@ ?JóŖī~ƅ»ZWŽ-Ó4]šī¬¶÷•³[I§ƒž‡Ęæ8õćdh×q<ę­RåpžGK ĀŚ”¦żdīžķ—’=‡ACdéü…±»Ž½&ÖO™bĄ éŠšĪžē×S‰ŌĘ]QJ/=1ķU5ļ GwhŚ­“†;Œo•ctŒWR¦)5±į–Ÿq“ÓŪĀnī#bŹ£«{V„Ü«i2¼LpJƒŅ‡…c^ L ©gg ^—„|2ÖüI„µķ„iµT’ĢŲŽp=źįLŚ5Rv‰8皹FĀ•~ˆū[ąĮļüjŠ|IįmGTƒAń|xšĘRų3œÆł÷Æaö,¼²Š}%õ8nõūÄlcŒt«č~Eľ%TĖ1óĀÖ§xčÓ½“k^÷Ö넼ϑ¾$üń·„ēÖ,®“+ĘņWr:”Ść¶ |wā÷Ņ|Bš4‘YI£ėÖØmo#d¹ƒõćŸĻ½qŌvzŸ”äG‡Ģ(Ŗųy]~+ə>bZypĘū]Ż^„„]¬ŠĒ‘•eĪM#ߔ“F“R©-ry¬‹ŁŹFŃ$k#¶@ļŠņ«½O=ńmÜśeœFV’Ic/8*=kĮ5;ŻFņFgoŻ“ĘJĘr<ŗ­ “š½ć»wNšÕ“7Är\ØsŪFp=ėē’x¢X®n#š åÅ,eæÕø8 žUŹŁĶ­Æt_²£Š7 •z‘ā}F×OÕ“ŪY ²¼@³Ęß2œ=¬wŠG6mö°WbvØ_Z4±H„øō¦ŽčĄä%YādÆĪ7{Šļ“©shAõĆcĢY;śSgw‰ÄEW×>µŲź‚9żkå°$C*ø|’vÆéW ‰ŒČźFsB™Ńcie?.žµkrø6Ø,6)·9Gp=j+þ6ܛS?•4Œ*YēߣOş¾·¼5ńSĄ]É$ĀßM¹8ČŒG”Ģ ǧq^k®j.½{ąŸi×Z'‹¬˜¬É÷_ŖāóéU(Xć„‹Œ„(Y®_ĒN‡t“ĀS ź¬yėUē",ŗ·ĖķŽ³·S­2Ķć’eźa&13DĆųøé_>ŲŁĮyzŃ*ōė“p}ØēŌę©M6}š÷ĺś×Cŗ’ĘĀā?.tSÕ}æJ½©¾”s%Ōģņ3žK“WķNŠ15 2ÓWŽ[køXŪūՋö8<+­…•«ĘNŻ…F±ĄVDKœćʘtÅ~©x{ąoĄ_@µ«Ļ2ŻFÓ%…Ą{u#!;†#"½ucóĪ,Ļńt%j1ęüŃÆ ~Į?šLߊś5•æ~-ų»Ą>-øUc ę“É$NĢČŚzōō®¦_ų#·ĮY'¹Vż„µŅNß# mę(µzPĀ£ł'ćęy­:ģ2ŗnĪĻåÖĻÕÉ’fųwr°.ūKųĘmŖJÄl­eWlpr­œWēwÅÆŲ ö£ųmŖjś]Ÿ€õhÖ²ŗ.”§•aqå\/Q‘Ž9§S Ųśß¾‘”ńx«f°T{K[|ļ{zŽĒēF„šź BßQĪ6•}eø¶‘6J¬ °õĪ*ń„ųgą[]L¾ń…Ÿ‰%šōr…¹ŠĖw˜Øz•ø®OŖ÷?°ņŽ"“t>œŃ¾Į8lõķ_é_5 ČwÜÄ·ģ|`į°lučkō3þ’ƒw5;LÕ®,/ü=q5•ÜŚĄyŃŌnćÆŻ"»(ᢓ?%ńGŠxŚ—%^äqיY_ÉūĻņ#č-oÅßš@—ŃōĻ ĒšóĄz„­²*BŚv‡~³·żt›åy»“\~«ć’ų#÷…bmGįgģńg©jŖ6łRiML8>c7ź9®—J'óžE+KŁāėĻ–]\ķkæ'}:÷_šT?ųµų5ū7xSĆQņä[*ūøXĄ®.Ēž »ū\j)ske/Ć/ Ł`ł"ŪNi]}X抙J+Sō¬·čū,DyóZņœžŗwõwæÜ|żķQń^ńG‹¼Gń~ćžŲuKf·»¶`±ĘŌ .3éėė_1|8ńĘ­ąoųsā„ Šö}:üŽGevē˚3ŸŻ·|qķ\uńڽYū¶MĀŃĖč}[ „4’·¦—õgķGÄ…_±æüūöuń?ö‡€“žÕ:$q©żÅęŸp˜åŽEĻn[”Ū–A?ČēĆłujŚēĆYŻŚx»B¼›HŌb—ļ$Ń9CŸ®+–ŖOTČü"Ģ3&eįÜŹNN‹ę¦ūĮ杷Ž5ź~‡|:Õķ¼MįkĶÅŽ*Ū6›m7x YsŸ/=ėÕⶊķd¶‘åńÉ5ÉR źFPŸsŌōÄŗŽge.ŪN +‘ŅldA(bŹOrkZõ6œżÖĪ»®ć¶9÷ÆHšĘ§ol‰ ŲĮŪ5öTķd‹v[œ|Ņ5I. ›˜ä(­{ķ4ZĀ–š3Bļ yHÅCcr—:²żžé€ ·ē§5ęSčÖ×ņC#0§pĘzŅ9ަĒT¾Š¢kEryÅvzæxѹń»g;Ō‘ŠeŖ}Ķv¾[— &äÉėŲVö喚š00ܰ=Č?…e$ĀQV9»ė©5‹Ė‡UŠ(™·A€*mfˆ§–±¬£ŽGjاŌęØĶ‹c>"Ė"ĒŖž3^bĮōįw,am߃Āšč‹8fŽÄ’m»kh-¤Hķ2w·v•ˆŚO‘K xže|ĶQ‘‡}}%ń0<Ģpsė^Æi_dfgŒ¬§žE2'±6‰mu!…ɐśŸŅŗq¦ż„ŁfR—Ž{QĢdC‘snŅ’F#pEa®‡m#]Mmņ%vžX})Ż“©¹Ƥ69†č”ī§Ž¹FéāŗĀ„.r)XĪIõ,XiÓ¬i}ę8VēhČ«ŽjG—žHćBpI8 õŖQ*0ī~x~Ó^3ūAw„|Ya{Ø^)aW$ äCžó§ĀĻŚÄæf›LætŌć+"¬·±äĻLõ5§/C¢4»ˆZ§‹­›ͦ%aw ĘąyĮØ2”lyŸˆŽĪ+©­Ģ‰2!ĄĪ~•ͭͲćjŒųčh2{,2›M;Ļ…ŁīU‰ŻÆAųāxüE§J|A„ł ū9O/p•s÷=*­”Œ‘ĀxŽŪJ)—M²‚X“•enł"²µā E“±€A4ŅŲŽS‡ÓüU>Ŗ5½üqhč@‘O*Üöü©sg-Ō×ŗ„ÓEn °Ūß„_"+‘¶~+šö³lt»8eivn S$‘Ū5ĘYx«TŃy“·½²^<¹Ad?Ę®Į·Ó¼;¼Q£hļpMp0j~)æÓ’žźŻ>Ü É‰1øƒėA|ˆź4oˆ:”sŲÜŪŚŸ”£Č÷ØOoŹ©i Š|_©ĶŖź7ok$¾<ĀCŠŹI•‰bŃģ`s¤ŁJ“¤€ī2ēå Æ"}rųHc&śdĘKå\ƒœ 8ö>“Š~%ZŚč‹§źq|ó}ücŒw®PM?SÓN»įŪå1ŹŖÆĢTŽ“ģKcĒ5]{[šõÜŖö ^L‘õō ×1 x“Åó™tøŽ{ę&4D9-ž?§éVį”I4}‰ąūGKŅm"Õ¦u(QDWo#¹ėš]Ļ“0Ż^Ę"…öoīĻ8ę¹esŸ ü~Ólü;®éwćW=’ÜBKē£לW›ųr=bū7³Į'Łb'`xöągƒĻÆF‹R=“Ćķt%F•FĘaåóĖ{Wµé޾ńD1¤ ±>ƒø­,ĻŸ|ušÖj&3$ŽŅ²€AŌ×—Ē­‹M€Œ®v“žõ@^o]ŪMlź·!<”?v½I»Ō5–:Œ+;Fß6é‚q×4\ĀDzµµĪ¦®eMöČ'¢øŪæ ZßDÉĻ"g £ÓFj“źŗ&¹ _m†Ęā~ķĄ Ž «hÖśšĒ,’–•YAś@ąz†™w5¤ !C8OįĪ3ŽÕgUÕģu›¤ū.Ÿ{£©Aū™$óą99‰Ø˜£āŻ>XdxĪpFsQŽXOfńC$–Ļƒ·#½dh`>qIö‰a‚}«äȞk‘ŠS>ŚIՋ ĢŲĆyĄ«ŠÄ’Éęåƒg§÷…"į¹ŠX”·ˆÉĀ©?1cK­¾ …˜“ēā¬„.ƒ’1ģo¬^Gšd(W¦OµØkpµ›F itÉ_qYĖĢžVr'Ś…†O/¹uĘkGC}ø¶Ńņń“’ qÖŚĢź£l{v—uŖ»ĀėnńŚB ˆßvsĶz®«s­ė¶½½²^JŠ£½/8É÷ÆG™ŁÅņčtžšm¦‰uqŖkąA{ |ƒĪsč•Wāö›£]Į¢›‡µ“M»‰Ś7šs@čzTPĆ5!Ō©såķg[‹@¬lD_ōÉśė^Vŗ„ö§zÉan÷²Ļ ŽQK<ņ~Uļa鄹ƒš?L’g?ų'Ä_lń§Ę«›Æ†? –—Ź2“]”)“ņ¹Æ×„’ <ą}2ĒĮæ|;mįŻ-Qµf ÓŽœ³Ź}…kĪg)‚AąO…ŚŒ7ÓkZ·ŠüM<¹-zžljķŌ ōū+ӵ߇4ų”c¦ĶāļC¤é‡÷²ŪŪ¶d?uWw޼UGS IÆąæ†ŗ’ŚO‡ō]NC²[‰ŗ"ŽOēUü}āĻ麭Ɓ ÕžÆØ•Ūū€Ļµ†9ą?ZéŒYĻ)¶˜š=åœ÷šķܚ}”L6¢¶ĀŲäӎ+¼“Ęļām;Oæ±¶LEū8~@˜3Z{2[Ō“źŹöÖonćT-æŁ?•sž#ńåµĢęļĘw«§ģːüŖćßµkŪ@LłēSńØÖ¤ø“K“·ASŸµĻÉėšĮųæūKžĖæ¼ g«Ķā =_Åilń½„“÷āŗ)Ó{Ģ~~џ·ÆÄߍ·Ś†‹Ø^xsĄīŪ!“Œ„ĄŽھ–ņY|Ė£!{¶Īł_—~{šīŒlŒ§#&wy\>~•_aYTJ3ĘSTa)“޲€@})cŠ%·uā‚9Ė0ŪJnāĮ?J™cvtĄmž”¶YņŸvŻī¼*Xm•K2®rFh0{MŽ˜Z9“ŁGa]o‡<;7ˆļ­ōŸYĶÆė’Kå-¤™7¢¢f°?A>~Āßuk­#[ń…®Ÿį-#2¼W3|Å{†æA_£žšĒ„žųu<9ą?Ų¬ńGs4@3>9 õ5ÉSČčŠg±é Ń,aѵS  CĖųgĢŁRŽĖĒ·zėeĆ܀t'Ļnµ­:¦rfVŸ§jśœy/J $¬Nсҙ{ā{;O–š[µŃUŽ÷>•Ųˆlõ­ā…ŻĻ…¦‡V±³{ę‰UQHcŒ\WŽų¶śśTó¤“uĮ”ćj¦H'Ū4Lļ£šnÆįŃeuŖ“>“$Jė"0*N3÷‡Ōq]ˆ.,uo [YŁÉŗī4dŽĆ•$ńaAGŽųrŽ×K[½#3’h)ÜĮł½Åv7z4×6śEĻĖ“×#ŚŖ;–åŠē<3ØĻc­ĀXˆōõ%\8į˜‘ŠśÆĆ:>uۈæz€1ŗ¶"ēĻæ>]iŸ­õöV¶!šŃ8cŒd~„yæŒõ?Oń,vĆ涚1Œ¾ļ˜uüO5œ¤šöuŅ~>|qšļ†õswoįdC0Mü¹ųĒB8ÆÜO|1šļ‚¼VŸ’‰Ærų?są6½›Dńl7V–ĢD0ģTūé[Fö3”{ńėĮš¬¾0>¹YįIа$‘"•{ńš¹įł.ŅÖ8¦ĶE*Ģe±_ƾ=²°Ó'ŽžÖĪĘ뢠L3ŒcŽęµ¾kZ5—‚’ĀęĘ$€Źd3+aČ9ć?R“Dū3Ī5ĶN OÄ·hzīøÄ G\Ŗywšé_D~ĪŽ.’„KÄV÷7š¾fÜlĄägÓ<ę±”ŗF—CŹiėēń·ynöŻWĪ^>`ŒN2?ē_ßŲ›f30D‰#¬)é”Qs*ā•Wɹ œ”gŅ»Æ‡¾0¹šæi}ņ„‹qpŖqĒ÷¾µÓth~®ųcQ¶ń•e­CuqucpŠöóH6™8ļŲ껣!ŅŻą MLĢźs#Š-uŻQе|k“1n˜óŽæ3<[ ŽųOYÕ“µyį‚SøĘųńĮĻzĪ꓎8”ČTFcøwĄö€õńļĆėļßÄznęµ@rd„÷SŌć­lQ£ū1||Ö?eÆŚcį—Ę_ Ė<+c{ö]Y’²ĄÄYéĮ<ś×śųkÅ?ÄOxk⯆®`¾š¶½gõ“±@f@JœwÉĻ’Ŗ[ø§ŲÜģ~xŖ]/ÄVļ3-ŁĀūb¾¤ń…»l&åāį·!éčF+šĘrZƒ’š_ŲĪÓć‡ģĻ£~Ó>Ómdų©ą>ŲĮH“RÓįćb>ń\‡ąe±ÉÅ ×zDŃ@×IĒĪĶ›AĘäk $yg8·„ī—k’›»9„–hĀ<ņ„pHūµ”Ńą”fP½ń]ē ōDrČźH ԟJdĖ'Ė… œsT£rŁaÕ悐™üéH[ķ`yÉŖå¶Å¤:ŅR±ø ķ'ÓbŒČT ŽGz\‡TMu{{‹so ¢Ģœ•äśóŽæ·ļų7ūöå’†‚żž5ŁŪĒ:ģzÆÅ?*Ē`Óeg½ÓO ĮūŪ@ŲqżŌĻ'“•Y¦tÅМ¶Q_Y-ÜI¾'R[ڼŪY²IķZŹXó,$¼gיYß“z%ÆÄ6×ZĆģZ&¹ Z_EķAt£®: ܟĄWēķUšGų™š×RÓ®“˜ÆnōŌiü™€&h;†zćł\ĶP?‘_Šž ? |q©ų[R¶k<Ż;Ųuć9;Fz‘Ķyĉ™šO1·޽+×§+«œU`)?:ķś÷„X™ä`>Lø®…-B«“½Sę#®i²ĢDŖJē±Ķ&Љ¶)Ę0øéžōÉM¹ėėJ2čW+)ÜłĄ/<`ō§‰Ś&HĻ$Œ&“6F„L²ģFŜN01_{’Į7æi{öTż¢ō9£Öõ=/Ąž ½†Ņį |-ĘG—&Ćņć<\ÖRÜź„#ż|!ń.;Ł~xšźs’‡Œ`·sˆōżL(*Ē'å|Äsłf¾ŗ³†ż¬>Į#”Ō-X ŸćZ㨺QŲøģčŽVd!’kŅæ ?ąø_²ż æg¹¾:ųcĀÖz‡Ä[Lš DÅÅʙ÷·.>÷–rą7ūx÷ć{‡!ü!µińÜiz—ķhē~įŒ‚Iü1XŚ|֖śœIršĘģŲ«I!83ģ;-ĪļĆ6 jęᤋ™ä/µE„ųj}ĆŚÅī›5żīŖ¾$ĪBšxĒåś×jWFōŻ“:-7ö‚Ö<7¬ųwķvĶtØėI[GCĮė]—Ę«ŻĖHÓÆtżJSQr°³mhīAžUȰ֒’7gæ|ų‡į­sĆz{E:ͬ@|›¤g᛾•īp™ÉTća Ÿ„{”Ī ōśœ& öė;öȹDZ®–Ļ\{‹±~Ī£°ļ]iÜį”M¶ŌXĀљ>\d`×3ØI;#[²—GčGņ¦feiö¤Hp"9ū§łWsĒöEŒ×*„kÓš &)µYä™cņćfąŠķķ<6BC$ˆe$ ¼ŠZK©Ōj~Ó4}:OūG|WŸk6Z3Ü{ ó2ę8ÆĀĖ"ģŻµø “‘ÖkśU­Å“Hņ,‡zć-“é`Tą@Ņ4µ'ŗŠĀH R yśŠän<2æŲ²]ŁF÷W*Ąy s·Öœ¦™ŖÜŪI,7Ž„ ¬?•ze޽uud"HÖ2 ŌS^āņp|—BøåF:×O§éį”ó& ĮQŠ™l"=fŹŽ£k„ۿڪ\@, b(ČĖž;}iEi`1c“¼ŗø˜ĢUćo»ņćmX±aœĆ+³'O©Ŗ B{iäµrć˜t­=.McPÓ'Ņ/$i¬„›•łÖŖ>f°Ų–ęīęĘŹāŹ'/æ+øÅaÅ5Ōڼ²Hb<ąrzčj™Ń®Ææb¤Ķ¹9==Ŗ{KGŌ.Ճq’+)>‚Fäšt‘Ā­ÜöŅ+±?ˆT¾%ŗ‚}¢@~Š‹µŸ=®++ō7õŃźzmÖŪ7…” ‡s޶‹ŠŽ/CŽŚŚmäĶ“®Ć¹ā­ĮqpDfnē9yĘēX%©Óˆ©(ĮøŸkžyą×tk'‘ī"ElĪ7vž õ$~µņ5Ǝµß†ž0Ó|] ÅZż ņu+Į[øł—ĖėMhxxŖĶKS÷söcÖ~~Ō-„Ž{;}FīÜGy¦‡Ł5­Į?ē_žÓ? µßµÆx·J¹Ó®b„_ŚłĄ…»¶,Få'ØŠššFį•ꊎ)aœ½ö®¾_šēēž¹4ƒXKŪ(įk9!<žķė]¶“«\éÆo}e)¶¹ d*Gzåö¢–J鞋¦üMų“§Ś_YXüAńvŸgpžc¤l‹Ÿ÷GÆ*¼›Tma/nõ½jžš>ļ2ā坘uē=kX×v±ž!”Nn¬"”žļ©č¶:”÷VĖ,Ģņõ®wVøóUšFTŚyÉĘ+Ōlś:Tś™Ńź c–*s÷yėZzG‹ē•qAn7vśVksY[©éVŖ^E .ß8ĪE}š»ÅzŽµįxOń/€5+}oųÓū$éž æńV½šsĘžwĆß³›ūk]AY£“äĘÆŌc=ūWČZ"xŽĻJžśņćNŌ-w†ŹpĮķW*GóO×eĖ-=£CųMŏ \j>[ˆž&Å(hQFX]œ}åæ_óÅ~Ć|ż–üKū.žĢ7’¾+YAØx¶źČ왢ÜmC}ŽzłŸŹ”a©ÉŽĪ\b”Ķg-č?±wķ«„x;ĚƊ¾2ųfwŃlLRéŚ}¼„²Nø1RFrŅ9ÕŠžŚæ¶ž·ūNx¢oųD޹įƆFŹ(–Źi@ūKó¹ŻA#=Ņ©Ōč}× ųc,^mG0¬æsM=ś½-ų„åk£ņ«U³ß"Ē ¤*Ēp+^O6ŽAµJķļÜW<¦Hā°ė•£;ć£k><ż›¼?®hėÖ»ąż|E/t¶l Ǿ>oĖé^௮½£A¤^ł ŃČeüHß_CłVr•÷?̰ܮK³=>éōč7޾+4s()äö«ā’xwÄÖ µµ¶ItŲ†V| :ńšē“»80u]™ō_Į’ˆĻį­RĀń$‰€įĻ˃ĮR?ö’Ś7ąŸo”'Ę…³éóųząF×ö1aŒ’=j#eB|Ń^EߣŪ捾įėVŠŹIĀNXcš?ŸJż)ųMń*ā[…ę[9Ÿ%;OØÆGĻ'?ĖUJNHśsOŌ®¬õM'ĚuĖYĖ!d_CšŌ|_½]_UÓu™ŅÖßP»°ŠY|Ž<ĘoĒbq“īkŌ¦ś†ę˜/{c×¾üIŅõß |GšžÆ{>­Ūčr“/¼/ڱČĘzœØāøŸZ¤šņ>ƒāk„†õq%“®~özƒŸóҶR±ńxœ+lū į²ź>ų‘£Ł #ū$·ā+†FŹÉ  ¹Īæ,?kσšĮƏ¾6šūŪ4Z„)ÖtWĒŹšH~uõ*Łv¬Ŗdy„)ę ÷œ_įoóüīŅM#VVW”¾•«'‰"Ņ,®oÆ$TŽ%,YŽ3^}f~ŗkQC»>cń?Žeń%Üś“Q”·Įä+O[–x>ŹŅ{’· LŚÜŗū§’×^dާōW‡P‡Txtvŗ…„ĒŲīÕR~¬ƒœ}+±šģw÷:…Ž•ivöŃ»ŒüŲĻ+õ>‰W‰ėóü+ø‡ÄÄÉz·6„6¤€gs×Ҿwż¢#’…gŽ»ÓXŌ팰lš$'±ėQ'” ŗ¹ņ°žH¬34ŽjČĢ2\Šļl­žŽbN ×$¤īzTjitz~ˆŪe€Ģqe-ōĶ}įąč<ā_ų“CŸMÓ"ŗo-ķÆö‘|ĀkˆĀŸ0HČ?ˆ­KöfWt-€ßJō­ŠĶb.y‰"LŌXaM„Ž~^¢¼åu{3yqk*G«†ąr3žMrLÖU“0“żiī>!x>Ź9¤KøÕ"³øB˜įĪdöæKō{;ļ‡_GĆ©`RšÜńż„— Ќ×M(žm\kNĘ?ü;įW†õŁŅĻć~‰§+ÅŽÕ핦µ »yUÕżF>ŪkįßHN“¼Œ™ąxĆ}1]®’ea±Nzv=JÕoōۃwaØ]és»$µ‡ć_^|+ż¬.x;āO„õ vźžŹŅ#ģ‚[®WćĒ{źZϊo“ˆ#²‰n –ū ×*>ī‡ē^äx¬i^m¢¬ū]“×įsä0$²– O9Æ_Š.PYEJ¬Ą¼ń\‘}ßåTÕTvm‘’%<zōæų ^I Ź@d(O$(ÉžFµ<,f-Dł7āV ¾$ń÷ö4dB•#C˜8ĮÅq7ŗfØ!“Nøą°…°>§ĪŃēŹ½ŻkWŽÖ-u Ģw1øo½÷†yŌ„WĪ“v˜ś?ÄGų‹¢ŲŪZhZć«ÜĮ!`¹½qśÖ‰\ŚšGˆ&øŠpŪ×ųCś'AÕ`h”Ś2ų³Ņ‘čŠ:éa,‚®œÕxćE•‘ńAźĆc޼Ó0g¹YT(9*O<śQ§Ż¬;T·=żi9X£ØK’é“…ČļKqxJ$l@aĘ}k)JęōŹņ.m¤Ž7£.>•‘¤Ø*°DIT8äóN1:ć¹Ųˆ™’5,Q”—}+EŲÕÄ£u+ŁbįYLhpsUƵ[[ĶųÄř¢`˜†§sŽŖ¹‹š‡\’„kį„üŅ—øÕtŻInV4m®ńī%Ī;œq_Y~Ō–ßž2ü/šGÅÆźŚ|ž-³1Ē7”겐W ®:œi:‡')ņ5•ō©¶7V2(5ÖŚIęØ »•¾÷µdäĶ¢“ā$tš ƒn8ė^+„ŲYŌ$ā›r«t_\{g?IÜõ»K¤•ł{WÆNµ8F~%³„‹Ōé̚PŅ”·ņdMQ$$Éæ‡\ zÖ>©b—v2į—Ģ [$ō"“¦lpŽÖ`½{Ÿ&hŪŹb‡ž¤W©Ł`ĒĪCЉ¢Āƶc¼Ló‘ÖŖėö?nŅulŃŁ¹ˆą€?żu£w8ėÄłŚŅ{čÆŖĢ."N2GS_BxWæŅµ3P‰ƒÉ‹œœ“|¾:–¶>ß¾Ņ,Æü)Š.ī-āŽå¶Ŗ±ł™»×‡x²ĆģŲ[1Č@ü+ŗœO–ÄŅ“’9k‡O”ė÷š½«ÅØh—"9į”®±ó)ż+źox›R²€­„ĆˆČ8=1^¦Có^&”ĶQŸGŪkŗwŠ`ŗ¾“o<ä»hćĮź*ŻĻƒōFf·}JÕäł~[¹8ü7b½Js?3Åå4ężåqņ|=Öt‘x†ŽPD‰qi©Ģ²!0Cué^įįoŚ{ö©š –’u=nĒhŒ¦³l.rƒ±bsŸ~µ“¤xX¾˱Qöué'ņ³ūÖ§‡|g)ń{P¼ųaį› +Ē*†ęę=9 Ēxł‰¹ėŸĘ¾ ų‹§j:5ŗ‹ Ž+Ż€²*ØĪ\’§oóšć©.Øżs‡bØR…ļ«/E¢8x5ˆ¤ŗOµYŪĖ cҽHųmąļéŠKewo§ź/!Oą;žUĻķ-”ś'DŁēĮŻKOÓĶå•ķŌK YH@Åt'CÓ4M4­[LXļīĄ–Žé9)ÉČl~=qŅ”ŌeJ½8«Åjy–„ą­ZĀqsØIo%£’Ŗtēp÷©,?ЧRİSÓē”ŁōX:’MN¹3ŚĘö(¤O˜zć|/j-µ3kuīŸ*Ł<zĢė­MXö‡1ńoĆ’č÷„5»Ż[·¹%ˆ®ŒšŃæ÷•†F+įŪæH’„GöĖÕ|zš*i:Œtč/d^ńT ՎOs“O„ˆÅå4–cjVŸ+‹óWM}Ī’yŸąėøīDsüĀ$ć8ÆS“įŪ;zż+žLöéKS#RBµ¼ æ#œW/mļsęP'’±.܇:WÕQÖ(’±ņlōø#ŗ¹Š=Šß(Įō®__·¹‘ķŃO•É\žõŲyõ$cZŻ6“©Z OŻ<ńĶwzåõ ¹‚KyTPÓÜ÷ äœ¬pśŖjHÆ›8.¼½3 ł$’^™<“Aœ]Œ+ż&ę ™åüŖŽž‚Ż€ ĖĘ1š \‘ŅĆs!„Äß_ļV.«}co< ±/˜88ź¤Še9™Öŗ·Ųīdp”Ūµi隼×Ķ3ŹAp~ļ ŖŒnqĶ–īuX‚°09ļXÓxY†6³Ż0ƒ¶ÓĮ®ˆ#Ź^kh­ ’S*Ė#Œ“VōŸ^Ég&ŸzхÜH*3øV¼ØŹ{™ŃĖŗ†čŲØĻ Š§­ł·®ŖH!}ŗūTŹ:MhcŽkVzB’Ż”(€k¬Šõ«MJ${xĖ£€rĖČ©p2:iQgˆ#78ĄĒšÕč­ęņüÓn“ķ]øŪDV”cƒŌ Ńnõ϶jČl”v '”ƒ ßēÖ¬Ieąä¹¢uŠWł9É#ņ­”BĘĆ ­§£ĘR;śWĪßK|ø_#Ēō¬„'±³vGÖ~ƒĆz]֙«ZE§:ī ¬gp_sœó]ĻÅßiŽƒ]ŅlZžö)Jm—q(HäÓ½sJDݽžōū |CyÖ§„]Į4dH7ĘW9½zÖ§Å? k>šŹkEœ—²ÜX¢I`zr;SŒ¬[GȲųCŗI{,““‘ø•ᓇˆž8śÖžž·vˆ±źž\ŒOdŒV·1œM«ųn'h¤™# z7zŁš’Ä[o x®M-mąÕ4ˤņĢR #?2‘Ļ\UE\ēp3¾,š–®—ž¶ŗ¶–ģD³m9`rGėUnģšÓN²±ū_Ś5 cÉÆÓ¢BlyĶŽ™Ŗ[ݬ+g4’ÉŪņõ¬Ÿ[ź:vŸ•%fcœ…Q2æCš§}kāĶ>ēO€ŗC&g8ĪWÓµõž§są’>Ś÷O²–Śr”ę.cśS6füĪgS沜²[øŻ×īō¬_³š‹§Łlg=ėNƒL’Ö€ꓫr®x+PÅwo9€B«wŹ‚¢ģo}žŽę̬ “ŽrJąüS¤éÓ­ø‚%YUvļSó1§LįfѼ¦‹åņŲ™žõzē‚“+]>9>ß&ų¤^?)ž’‡„6­”&‹ųKĖ»k"iu;žō’) źkط֓FŠŽĆģńÜ6*ĄõĻ„HŚĻ„4{N-rĘŁ¬<ąX¢?Źyī? ·=„d0J©,‡ųXe±ź+;šFC#Ń`ՁŁ:£’xfᮓK==ī#’ŚÜĻ,‘œPjM>æ];R‚ņĒTó^_łf°T’?Ź·¾k·¾Õąšń‹~šĶęB’Źģ|ÖѲ4qHōæ‰ į}~nīļM‹0fhQqĪ:uąf¼óą’ˆō{[čāŅ E{„¢.'~T¤Ń›Gońgڤ²Z. Ū]Y²&;š³É#¾ųŁ…ü5©xsÄv×ŃźŹĻŅeĮČ<~µœ­ŠĮž‘šz}3^šYµX—TCtĶ›ˆ°Ć“ņ{s^Įń‡óZY.‘¢Įkpń4r¢…9ąūŅ1ā7Ö÷lūB¦0’˜Ąėœ›ā׌<<—隋¤§$8 qü\ŌĘ=Έ4x¬ž7¼×µ%j—<‡h<žyąšmž—¤ÜL¾Cę%ä1ēéT95Šl­ķ#IÕQ›$q]ę•āĖX- ŅšFū(;‰ŒsļĶc$śœŅZU“)ØZ\Ēi$Ā&'ŗƒĮ®2Ö$ŅU g?)ł@č(Œ¬HjRj “Ģ\¢„ł†HZóx¬äŅ®§+…³ņÆŽ÷5¢škKŌ§i¦ŻXŽ3Ž9¢öåm§y›`˜pNk9=Hl»£_Oz]®bó6źĄ`Ķ[ŌÆ¢…Õęh£V=?Z‘&Ģ»ķgKT?Ī‡ėˆŪŹS"x_AA”̵ĀČ<©Œ«æ OJݵ¶xTł±W“ž ö„-ŠŒ¬u1^ »8­¢·<ēæćN—IŌī£Ct®öćåĪ8ā¹*JʋTr׌Z[\ĒnČ[p½¾æŌöÜJ#0ķĘÜóō®I×±ŃN÷:ßų.Cv¶æŁg4*»€LMlųįĀkv#f”a¦Ż†Ū½Ī{Wė_sŗ¶§u§ųņŚĘŸuČ[^ų»¬iŗMŃó-4ėi ޟŻ+ŒØķŚ»K{_ku·„ü–š>‡ķ‘Ņ<c±īj0±Żź~š‡ƒ“} ßl^(ńuˈR]„XžO_\ō⽿AšÕŠĒ÷×E4ja'Ÿīõ®ŖTĪy˜^8ń& ó\ZŁAž¦-©,jg‘ČÉų>w²š{Ś[ųGF½ńDM,wÄü× z†×ׄt%cœbųcĆW6¶ŗ×ˆu8õ IŪĢøŅY2±ćŠŽ+ Å:żŽŸąGÖ<įö½š’œč©ڰ×9é×õH|§“Ķāk0–’żžāāW`‘¶<÷5äß¼[įoĻØxā‰ō—š“ACēĢŒ>čBrk¢œ.O%ĒĻŚ3ž  ÜĮ©ųছ5†‰$¢5Ōgˆ“£mQÖæ+ußj:Ü÷zę±{ā Ó!‘į‰+ß=wÓ¦9)eyr섹#•M·Ō©"°!ņ?:•&‹T˜2ŠH”1ĮbGCQ[Äł'pÜ8 “FŠ0ŽKóśVŠÄåƒG™3Šv -Ac3Čх;séĻć[ÖökmŸ=~LvźO ¤Ż…Yüż›HŌRąŽK+D “Ł« ›%®‡”XßxOŅ›L³ŃdŌ‹šāŁu-mąh„ŗ( DOpq_1Iiāoź‰y®jZåǘÓdHBF*8=źdśō ‘ģųgö¹ć–öeH(1üėź/‡µÆN-4=.—Ģy_ŗ+š¶}1į߇O…Åż®µį»}OU’–rœķ…‡łzÕ-Ką=Ÿ. ūu›}ˆø!cb Œ{uØöf õ=ūOż™ü3„ųjĘu‘\…C’čLŸĄ ć­ęń?…õ4ū+é#²‘Ö)@ž Ö­+hsKSŚ4ūMN$Žīó1øn<5[Ō.ąÖĖ,°`clj~T’‰ŅéZ}¤h‰3¤0ķćw*µĻxŠś ¦8Ž&Ēo¶Qź(Şf×mŅa½>jö]Ģžy‘Ē”ģj’¶†‡“|Dųlž96§7ļłOĆF¹ÉöĄÆoų}=ŸĆ­4nP„ƾ|årģŲē3—A8Üžlgūu“ØŅp»¼µp¤ī5źz%œ×JZŻ_rę Éīkė„.‡Ī:lśkĄzP©4—„TŹ#/$W¤_x"ŪPŃ®^āx‘Fæ*Mh\cÜł(xZ×ĀÆx‘Įr _ē ”œÖRéztwڰ*Ėvų‘Ž1†\qĻFńCˆ.oõ“{¶ ¤}W5ōχų­Ly™v’Q°½ŗKķvŽŚy„bĻĒ`ƾ=ų…į)n<_zĻg –‘²½»«d—ėœś`ŠĻ•›Ó™õ×ģŻāĖ‚÷Śoõ+k©­ķŪ{  ä śs_N|7ż¼“Œ|_ąļ[Ų¤LM>`Do#(Ė*צ*Z6æcĻ’i‹ŽŌ|'Ø]xwKtx«‰“9ć’žuę?³ß¼ćĻšÜŁYéŚŪĮ#DÖėóKÜ+śņ(H›3Ģ’³uM/[{(VŻ ‰™&eŒöÆ2ń÷Ä}?E»MÓ¬üėä•Y®RL!BqĮéĘę*–Ęlę.<[¬]Ź×ˆ·7l į¾bŽĘ¼źÓāžÆąėėŲu]žŽi?u±ĘżĄœńļV¤5 ›æ÷ +2[±éµńÓ|ąČu+-4Ļ)¶6$pä³.~fś×ähŌ.õ[9„kx·JIOE¦*bž¬ĻŚݘ¼·ū@ +Hœé»éš’ęvy!Y`pEuĀēŲū{öaų…öiąūɵšŻ˜Z«9`Ŗ={…}égt’"ļv U I²ņDétM«ĻJųŪö šś¼šw‹ōI„–ōnIāeڼ vźzW3Z—Ńń“Q4BI$ĢJ0Hq‚µÜ|7ń¾£ąĻhŗż‹Ø€IåÜ!o•Ōń’=Ø¹Õ ŸEüJšm•­ŚźVo ZN¢ź£€ŻN?ž‘’ą…µ©ų‰ąžČ^3ŌÖļ\Šćk’Ļ$€I<ŹöVlqŁ„Dz¦ĪŲ$Ļܘdņn$³»€Įp©dażkė!}O³i×Ÿ«ZNźŪĻĢń’ ÷ćfSŠ7üwį ųšŅļþ/Ó­µoßĘö÷v³ x¤WRæ2ž3š’;æų)—ģuūžŌ~9ųai¦ŻŁü<¼’MkĀ3Ø- ZŹåšē«!$zą~5ĆZ§³ÆoŽźž‰µ¹õŻķ®œ•¹łCq#LŽŃ¤¼±S»‚9ŖUTn#=3^±ĆQŗ"¦ļ¾O銭nĶņ,¤ØīkJfIņÄĮP‰£1ŠUŒg“Ęi¶29•—!·Õ«c7Ł[yŒ1ćœr>”Ō®oökėqŗKĒ'ŽkéŲėö”ń—ģ_ūQü5ų’įøī ȵÖģŃŹ›ĖYGpSøy/{³¦™ž˜ ~#ųsǾ šēŒ¼%y”į]zĀ-JĀH˜Ō Ž8Č8ģ«ŚŌn^+˜īCĪ;×x[Ch»Ÿ;|\ųk¦ųęĪ÷ET·µ[äżĢŅ 'ģĄöęæ>®-ÆbžÓ‹ÄVÉØź: ż‹Q…Ę7Ār¹#ū¤0ē¶}«ˆ¦Ļē?ž {ū5\i:„Ž+šå„» yå¹+-³użę+ń&[ETgŒ—Rr¬OWfzXęØČ<„WSƒ×µä([mvœRÜĪņ7ŗ.X¶N0i›K#Ż9ķZĘ:,“xTBŪ½GjfčŲ¤.Ŝtꟑ­Éjœ±ŒTAŒÄ(,™*D±ŗ‡fpėĘ8­»GÕōŃc žDŪ„Éø©ŽE9V橊™#jlžĢ?ą‹ß¶™ūNü’†|ų•¬jėā­8®™s-Łķī¢ŪÜĄēœ6Įļ€;×ōešCāljō«ėv`ž.ŠežĖÖba† ¼$˜ōaƒų޵ĖR'l=zęÖņé®D,LcĄż«fƒY†ęßY±·æŃobk JŽDܒʡ©Ü§ ŽOė\N›sēļ’ƒż‡õ/Ł öŠń,>ÓåĄ‰žŃФfĢd‘ĻīóŌ˜Ų• ņzü†Õōé§³šāĪŲ^ł|¹QĄÆ5¬"š’=_į_Å<=£Į'U]®ņTv_JśŸĀŽ"‚ÜYj‹4~LøÆ”ź+«°sœÄ]Dń?Ģ–Įļ#-$s!ŚČÕąž*ž)4ż>ŅmU®583ŽBX ĒQś×4^¶4ēgП ¼g£čŸŲ3ŽŗĄ’°†uŒW=kķż3ÄŃ“V÷‘\,ØŹG\‡W}3’¬‹nŁÉēž=+½‡M‚ÖŅA“ŒĄgĆ]QŲć›2­Pū±2°nk¶›Hm6Åüųxćå'µDDo5½ŹČWœõĒzķ“éķīmeŽš«īöā€(Höz>čć1łoŒ(= zwƒu =r+}BE²• s«ŒńĶ`ųļKÓõ Rņζŗ†ß"!åKüpkČbŅ.ķģ́¹'®h7‰±ż¦#y#–g÷n+hĘĘėk±$žSfĒPi“Kos Ń$„nņqÅś6‘³8˜ѰAźjmBę &ø¶ ū1µxÅm”¼V‡–<÷I ?ni5 śĪ8Rܒ„¹Ļ„3X#Fi“õWf$āŗkWĪ• d1q˜}ÓAR•‰$¹gŁę··™Ģ›÷c•śé¬VŚ3ĒĆćęĶ)O‹K{ö½¶˜‰Č8#¶+7ĄM©4·—2<«ܤūöؔt5Œ»ŻĢ——2›»q2Į#Ā¹{ķNxn¢†d„œmĒ‘¬dtpB—Ac™P7gÄjóIw:@§ŹSŪ½e=Ķ©īié7) ¼,ƒĆcč ā k=R¶ŗxŚY!*yõĒUT£©ó÷ƒą_,W ŗ5±žČO•s6žš÷ˆgńžyŖŁéڤ6]ŲŹĻóĆp­ø|¹ī3^%V·xO\Ņų{ā3ŖxoOrG%Źå%‘Gß#Œż2 z,wÓŪC4ÖW—–Œ9>T…7ūu®^fz š.iŚ“×rljŻnF$ņ y—~xsÅwĻ}z~­“ŗXĮ_3Ž’„irb0 ī}E’®ńŸĀ/ŁCöø“ńĘ‚ĆĮwŚ%Ŝ:“ĘĻ÷š9e eC.īďĆģŸų*oķQšöń’‚#ųgqgā?ģ k›Yuøā(·k(Ĭ@,ŠĄzg8Ŗ”’Į³^ ̧ǘ<ڊ’e§JJN’kŽV¶÷|Ń'®‡į4 ²^ŪīĖIŸĖŚ:&xš­ŪˆF±Œ^|čš/Ck͆UsŸ„c_ķ»¹hĮAŠ;”±Żx7F¾Ö|ŌR"pž0{דišŗŻĖ„_ÜŁŻßI–dvź=Ŗ¢®­eb½×Įż=n8ļ­ Öž„H"•Y}*ĶģÕą Fźõ“+WĆŚÄ· ö[%/Ļ O½jł*Ų«lq~8ų[ńCą±¾Ō|]„S@³C>”h„¤;Źe#Ćž%¶¼ŽŚk1Į"õœÕ(ŲąŽ.3Ö,ķl|K}£­ņl·Õ4‹”1Ļaux¤SŌkä_x kÉĀÓül±so|²ć«Ž5^Ö۟žg|%O^UVžUšēā7‹žųūĆž;šķ„¶©i!8™wG"A} }—ńž ūM|^š£x;ÄŗŸ„ģōBūJAjw2ēƒ’kbR<ˆxqBµHJ¦šzeą½5ī}ĻłķDUō?3Ļpü°•KhxOˆ¼ńėąĻ‰Śx+Wū$Oū«ØeŠņ.åYr28ā½Ē>Ó~$ü5Š·–=[‰­ŃÓćƒėųVŠƒ½Ķjf0ŅQgēßk ń*xS^²{+ ”—x J;‘šżCż—>&xBmYųWćńnžÖbł’?1špA>™žU¦ÖēÜäŲ•R7GŒ|`ų«üÕ.t›9$Ō<9t’hÓļ-I>tDēŒą€1“^·š«āģž'MŌ5 Āw|Ųžu­[CŽ«IJ›‹?G<ńBcĆvŖg‚źŌœ†ęLś×«ßx _ϤŽ3yāŚ8ćŽ½*u4?+Ķņ®Yß¹vŹūķÓÜĶʗµ܃čņØō‹Łlµ½>fi­åYŅ5e$XķžµŃŸā°)I£ōĖąŌŗˆ.µM?ZŽ8õ E6EĆ!qõūŲü끒‚ŠxÄ_>ų7慕•Œ×žŌ%ƒP|ņiņķRü aY9÷4Iź~M^µ:9Ö«vQv’Ąō?µØ æÓhĻp€I”Čaķ^qr°j–·uō%ķŁpŹżż«†¹ż3‚£iF]L­?Ú™˜ķōų¼Æī‘Ą©åÕ앤l„F¬J¢€1Ÿ’Uy²?LĖ15%+ɜoÄަ†ž4Ń+Ճ"ź0>x“׎µćž¹ŗ—R²¼· Ć%ĒšūRå>¾ŒŪZŸYųļā—‚¾ų|_Øźš†¼Ė²ßMbE› Ü=+ņ;ʞ7ńOÄoŽų·Åóy—v[Ęēw‘x\×-UmŹTĶ]6¦ER²?#[…%Œ$(Hd=HäŠóå=Ow OKę‹r„Hr{“ė^Ć¢xžśŪN?•“ąĘG½va÷;eEXśį¾¦ų×Ä>ҵķhXBņ+&a“ć€yü+ā§Ć]cį/Äoųü Ūky­/a.”e ±Įģ(^-Ÿ?_1„1Qµ¬“kžŻ¶ŸžGʟāŌR’īį:iO.-£«ŽæŅ¼QŽęOŁjŸ¼ņ„‹ÉpĖņō$W$ćcŅ¼‡ų“Lk;ųüC§=ÉxŌHbPYä2ZśÆįoʝK^Õ>Ÿjö’ŪJŗŚīNƱĻnܚč„$pUĀ6ī~…žŚŚ÷‡m?eļüŅŽāMSUhnšź6C#cŁæw”ÆÉOi·öŗ,6ˆ¾uµ“j~UéĻč+½=‘96T”œ÷“æéśįµŽHĪŌ’^”[ʰ9G\Óڦ]”tō:ŻÅŚž柦j[Y\(Y1Śß‡ą*źx Ğ.ŠõĶWIÓćÖŅ̤—VźąKå¼ź½öŽMrT„s†¤#ä·>yš?€žx›Ćæ¢ń?‰µ ÄvH²ų}Š“ ¾Ü˜™q×p ōoj_i³ŪiQŽź,‰;F āøŻ#‚®.Q¹Šxfę-[ÄVŠe|¤bĢŽ•õVƒįoxŖ[oųjÅÆõ×[;pÕÜü|ĶŠzj‰óž` ›“±ęwŸ²„?5[|D›Žhīķ–wĒä9$ŸĻæ­w>Ó¼Ø\[ŪĶ,Z|¬æ1ž%‘IļE”ŠłŹ9Ģ«GŚQÕt-ųćöIŃü_§’i蚗ƒmu yŽā)’'Nøq„yŒ’ą›µ6©ą?jžšæÄO Ab÷@[Ož`£?ŗOćlĀņsާĶ<3:Wį°±ęĘĖ‘w{ÓZSŖ[£jz…ĆAsmp…^ه ž‡Šö)u8#F¾mŖņĒ©ĒŠW$£cōl%xĪ7‰ģzŒ-]V+»›Ž@ÆA–ĘĖPA>˜É+ŻĒ…gcÕ§'cĘ5ĖļųšO§¢²K LÓ!`ØC°TL®fn[Ž$Ā4fČZŲks*—pAćń¬Īšr3µKä°°x&C“g®jŸ‡ŽDŲyßÜśūV‘‘Łz&ęp . eĢ€HC/#އ$_30|[-¤pi°$SGq&Y¹į€ļķYö+Į˜ pjŹ'Eµ“½¹¹µ‰m䛉tcź:Ā–ŅļC†į-”²‘¼ĒŲ~]ŻÉ‡31hŠŅ‚^b`įē­vPFхOLR-µkqĆ+åp+ƒń‘—$7±Éę™[•'„nsM‰¦źK!ņ3 ކ»«d£M‡i=h$­<.ķ9ō5fS•ubßN 5än™ĘßéæŁŗįt·ŽÕ%šƒzšÓ psž•“PŅČŅŖīŪĮ§aLDXģe*Ś­!c’®Ö<;°Ö. }«'šJƒéÅ{ē†4š4"œ°#œÖńvH„aĀžĆó®ŚrŠłĢm5k­ŃōĀļ ŲkpkžÖ­MIJFÕÉŚb”}ÖÜ\}®”įż^ūNæ¶’Īž šcaŽĄ?ˆÆB“?-āT¹Ū‰ō€/¬å¹Š'vp„śWÆėŚu֘¶R‚³Ų»uŪw?8Å»3gĆ·óĮt,ēŹqņdōö®»Wū=¬ ÖŃĖƒkdtŖ”¬qSØīyEÄšMźÜiĮāAŹ‘ŲwÆń7…ķī'Õ¼ČMχ/T­åØ^=YGÆ9ü>¹ĀlśŒ²¹ń?оjń 嶑vŗļ…g•³¾#Œķ9ééųUØ-¦ƒB›Ä¶ŗ¼ŗn¹a(BŽ“9źQņ×4ä}•ņå³=ƒĄ¾+Õ“łš9µ!o,Å?Żnv„sŗ‡M)¾d‹^#»³A Œ¬²mį0 p·–Ø‘–AóÆ9ö¬łŁõø±wKøóL)"–Pq“Pܽ²ėŪ¬x`ßjjgµ5to_}¶Ļ7ŗHo¶F<ČYFpƐkÅą£žÖu†’²Ē‰µÉā“ÄwFāœ”3ŒõąSķ7>G5Ø£R’}eoü•æŠųĆĀŗö§įč˹āTĆmž*÷'ʧW°YĒ*¹]¤2ćō¬gQXģ„W[½ė)˜Ž2G­]²‘ĀLĢÅuąõ’<=œaćg-•*ŸśDūKsŁĻ5Ņi¶ÉmåXg°Æ±„Ucür¬õg¤éó¼v¤83œÖ^§y§Ć’ż2]Šóé]'Fy~Ŗń¼Ū£ÄQœ†#­Ims$ź—åģ(9jķÆÖPŒ=pEvŚ~·o,%Jģ¹Q€AįØ3)Ž@÷(ÅĄ Ł¬ŻĆŗĶÓ Ļ~WĄö ĪŪĆ7©tš4bĀ’¬ēšąüYį×ÓgIdES(ó ĪIķż)„Š™ģpRJ‘īÉ9ķļZś3ŗĘņ‚F;ÖŃV9fŠ‘ź*Ļ$rØÜ>_÷NkNE#L}ÜnSŒę©5ƒ9°F¾%:Ž•Īkvihé*HĪGV‘—ssQŽŹ®® pÖ“šåī1—ĆJĪē=Īo]¶•"I.Ģ'ī±b­hšĖé‰ @QU}GÕst×ųwÅ@NÖ³¢æšIߎ½FĻ[’ŅUXÕx9āŖ>BlÅÕt„ŌŚKØD"n›s^M©éŚś™RO(02+X‚eæ'Tk†š+“³H—Ģłų8?Ņæ0~6xß\—ļ±ź‹2¼ŽB•Īp0GēIšA(Ē©jŗ·ŁĢ¶ī27ēó­øō©Ū`v+37OjŹfܧµ| “ķRŠõY•ōŪ”ūµ‘’Õ7'p'šā¾€ææŌt˜Æ“Ķń%F>YŚłRŻ…rɏ•ža¦üY²O’ m‚“Væ)š6ŽåFsгāļŚWįžÆįö²š­ŽÆ}vdP|ū}žS.zzP¢L“>\šī¹āĻų¾Kƒ ž\īQ;Xgų½Ķ}$~“ŗGöœ’eY”į£, ĻŽ“Œlc)Mwšööīż§“·“ƒwĢų8$µ‹7ß néŚ£ĻahKOüQJ„Zv&ēk'‰<'2ÓŽŅmRó.2JÖ/ƒõßźž*ŸOÖtɔ˜Ź¤äbnūJ„+r2ų6 ?RŌ®müEż³ ²ƒmm4ALCt°ėĶxž»ąļų’īGÕķüĶ1%ĘŃuŠžjD˜×šļĆķBVŃ'»ø·øPŅłŻQĻZ³s«fĢ”‚„³ę@*%®¢'šĘyrŃ^N!C’ĶŒćŚK£d +%Wö†Ī:ōĮØ*3ßMµšģóéŗ‘w+ņķŽ܊ē÷Ū¤ą7ī£,rƒ95²,½ä‘\A “²ŁČB©D'gūÜÖĪ’Ž›Ä‚FĄ U)Xƒ%ō‹•Fø.‰y?{éT#²Ōonc¶³ķˆž,|µ-õ`z;éqÜiĖ{3B~ö3µˆļŠŖ±>§q%œ˜VS÷ƒuśVR•ŹQ7īļ`Ńō°×ŒM°!K‘§5ā(Ņ’K‡PŃļäH¾fcēwµEĘ¢Ī?D»×%y(åø@Bż_Ö¦ÖōŻZźuuXŌó£S„ų]šĖLń}¶„ÆźIi5ݼ….!3裦*Ķ÷ƍ -B}CI¹ši¢V(7³ėĄµ>Š«žcįŸk×Fé­¤6EĢrC2W’=kŌōÆ x3Ā/āŠ¢“×·lYŃG~ÄRö‚h­¬hWüÆØI!iHÜœćŸJēāšĀBSĻ*Īļląāœe܉FēSy«^h¶Ķ&ƒ"µŚ*’Ģ»Bž“ü?ń -BŅ]UKwŌ‰ų Œ­ ÜlI·|eü¦<^7®[­ĆĢQSĖĮÉs@FV<ęļO¶åņƒiĘ;Ō–nūÜrdQłŠ>vC©[^]ڦšDEĖµ«¤Ł¤hŖ@ŽøśŌÉ.¤t·—Öpg&Āā+š>!šõä,ƒķåĘ:zÄn%ū;éĢź”»ć‘H–‘]\®ē(:{PI׌čöægd …Ļhē‹wšń"xļ"¼šåv±ŲņēøéLJ= u“m;Lę¼ó[šņ;ٌ˜³œ“üØQ„TUĪā˜ŹŽø©Všø ĀÆN)ÜxOD¶ŗIĄžnąŁ;³ļZ÷ZtVnšĢ«…8#¬„.ƒ0~Łmm1T)lp:VäŸŪŗÅ؂±ž.óõĆZgE*Mču~ųi}­ß­Ä÷°Ļ ĘX)\`ŽrOį^×į«Km)åŒ[ė€ ƒ†#½xõŖXõ)ŃŠė§Ž?#Énvßn6äČ`® §u¤O¦ĀŪ¬Ö\cåĘs޹£&ٲƒ9ĖļŲŲŲßE«Ē »A”häĀŸÆ­|§ćOOxÓÜY;˜ä.x ķ^ Ęǚųk¾3ųÆ x Ć׊µĘ(+XwķÜzŸnkö_ör’‚hųCįÕåæŽ’j-sūSßšw‡ łU\ŽøėĻ~µčĘVV0ØĻוš’‹-§šß…­ü'¦ü)ų4±“xš7ŁŽhHū«€9ļļT擱߃ouM#ą/‡.õ’NƒmżĆ4”äõ#Ӛ \ūš÷įŠ|w6™'ÄÉŠėpfū<Ÿ$vR;ćŸó×čæų@ÓDž-"bš]¦årŹæ­i)U8k—šćj÷Ö¶zu¦„ÆZ Œ‡|÷…W¾±Ō¬n,µł|Si{†’o’Ąūeæ¦kŖ9\£¦AØkZÅńń3Yéw2@Pc8#¶­SŸÄZ}¶§eį»GŠ+iäęą/väåTCgńųkįž½i©Żk¶×:¼.#Ϙ¬A Aąöć—ākŪ[ļ^xŽ{˜“ėg m#|(LŪ×·µiź†~Lü{ż¾|)š–mKĀæÆm®µ&‰šhƒ¬]•}:ŠüFų«ńėā_ĘoT×¼i¬5Ļž˜P6öUtÆFœg…Oqē#¬m¶3Ź*ŒŖ‚"¶{ry­Üŗ#)»ŠPŖ2“ĒN½č¶ØłOr>õA”‚HPƒ&2ąēŽ™-r8Čš3ŒR0‘n;YŽą qŌ“Vķ­"@œ/­))fŠ£ķ8ĮĘs]™¢5ī÷„“[[kgšÉĢŽ1w=?ĄŸ¼Sć}wūBŃīõ[Ö9‰„gŹĄÉo­~±|ż‹>ųOŃüWń}N­ā¢›¾Ė D§ųCóŽ:ē©TŽ*ĒŽéVVš=„M– F<ø¢¶!p¾‡¹®ƒE7چ„iaš×KÕm“yŽĖZp YĖĪ[Ģ nĻOJår¹j&w‹<1gį;É ńN½oā½~&Ž·Vļ¼œóĘOj­=¶·ć­:mr}VĀ=!‰c,#‘nGaéUĶŌé„O;Ó¬äŅī® šéŌµ-ŹFģnlcŸ_zćõ¹]¦ŠKĘņI$(~9„Ķ­ĶL7ҵkØ÷E§ÜYŲ« ĪFAĻų•io$²ŪŪź7Ŗr³’w˜š(4ækßu}qĶ÷Sšē5}N[É!“Ńć‚+X²­&Ü3SXJb#ČüOńWĮž „]›;{U‰Łå æQŽ:ł_Ä~:ńÄ{¹ä¹øM;CÉŃa;dŒś‘ŠÖ‘ŁVG¢x+Ąģ‘ {¢˜ ”r¹<×»ųĄVvž]•Ÿr_!öąd÷5ĪŲܙōĶĀm;HŠģļīµ{;QŸ‹xŌü śžŸ…{ĆƦM%¾›#D„gzHĶĢśOĀ^Ö¤ß}8€ZN1‚JśÄW¦ėZ<š6Žŗž™§E1B»Éą'½onˆĪLņ›ļłK$e§ĒƼŽĘŅ]{XY§†E_wS†©äFRĻ¢4MĢé7cP¼6Ų¹Ļ ūWxŗÖm&×4ĶZŚāŚ%/,%y8’ ØĄÉœV‰ń.ļÄ)rŽŪeSĀ(!MuŚMżżÕŽ5+1…eä2’mʶæ?„Å8³³+dDo½É?7ZĄŅž]čW5Ćw¾ÕČå~“”S+Kügy=„ķ•„…”ū)ĖHć 揭fßß$–4„“Bä’}M™'å:w…mm×RŅawŽ³Įz`v¬żOLÓōč‹Xؒßyö5ōŹ7<+¶Gį߉+c­Ū@āø‰Šćåé_\ė~'Šo4h{DŅcQē$½ƒS(ō+ł–e±ń“:üm°oüź®ųī}«äŸźz¦™w%Ča$ū:ÄO óXż{V<¬Ņ+±© Łź—×77‘ĆŠŹ~žK īµżb/ģWNŌ­ZT0…]Łc œŽŻæZŁ#s¹ųkńÄzbAoŖĒVé³l«'Ōć·jķ¾0üZøÓtčᆠ;ˆĪĖ€r°xé8ßBU[;£ćļ h—­yŠ/o®/#IĮpĒ(¾ä}+éæ]Żx—ĀÓé9™Žd$ £ ÷ėG*3s¹ą~ń&«į;č`æĢ6 "yR©ĮF$ ætŗĪ‰¢_üPI//ŽcÄģpdÜ7vļĶ0R±ģ’šĶµūGS湗OžV\-ó"2ņ0Łć=+źĻ…^;‡Įŗl&µŸP“K:qށG_n”ļŠMl¤¼)ńGžŅēQŽßķۃ#–@sĻć_`Ą{Ę–ėßššXŲĖāKŅnc·2“Œ‡q`¤ŒūńMDw>rdUžūmø?»nķŲ×µųwD’ēB¶Õn•¬“Ēq ›ļ`šN,³¶“ƶw-c äzµŗćĖøQņ°5ź> ±¾¶¼ÓĪh^ōLÜ9 €~B•‰”n}9ćŽx¦ŹćIÕ4huK° ²¼jpAcæJü݇į‡uMKÄ -ЁķŽY ·S“¤ƒ<éBv9łO%Õ|*öW7+*•ˆä‚xķ^[ØŪ„ŗŁA Œb¶Œŗ25üā»ļėÖZ“Z~>]‰ģkõĒĮ^#³×“[-BĀdø‚hŅAģH­e²g¦Ęhzg§B+7SŅģõ-;Q±¾·ŚĖ' Ź1¹Oc\sźmĢĢoč’ųO\Õ¼+© ¦x„co<‹ƒqcļŒā¼ŽDŽš0@B ƒŠ˜ī͵>øų+ć(> ų PųuØEisā-?g!\¦y5³šsć6æū*|ųqń—Įļxś†y¾ęä(. $ "vĀĖž)ņės¢2±żóų?ā'†’h?…~ųõą+Čīt-vĪ;†d9ņē+ó+ß!÷VÆnų©¦‹Æi²É4VįĀĻ·ų#­b՝9ō>ĮÖķąÕt³,²ĒźGń ü?’‚É~Ēö©ż”õx[Jš÷ć7òum,Ą™f1ęƏāń×* }ģW.*Ÿ4-ŚĻīwż *Ą÷ˆ,”ŻźwŃŁ+V˜¤üѐCzƒ^s"‚]UH‘ŠļƒŠäšw *‘ĢY*XŒm¹F7/Qč*ŒTl);''<ā©“E²*:šzS* ’ˆ°ŹKqßÖ­ĮpX™YIŽ,“³+ 9>iėƒ[Ē Üki,ΈGĢĄsM¾‡Dż|Į¹¶ü^-šÆū|Fø[ųu仚½ÓŹI¾“,ÄÆĶČ*XätĆvŪĻõ*ńZÜi¢į ÜŁVrø¬±4šJO®æ§čt£ĪõĶ5eÓēÓö”›ļÄär |;ūAü9Ń×Ć÷?!ø{[Ÿ9lučs€ńœģ—ßvO×ŌW™%aņÜüńųŻšcIų“šćÄ求’T²µkĶ=Üe¦ˆ3߂[×­ß>ė ¼ŖųrT‹ūI䒣z4*IĀūŽ ]'nē=H)4R+…B»•†sQI½÷ Pžõź#Ž¢)E=œѼ$åNJtįÕAu鎵­Ģ‡“ Ę©·$œ…c‰·ł}ÓYnĘ,RfĪŲ\äœSĖFĶóæ—Ę~µ¤ ŒE Dį2¦ŽøØ£‘ŽŅĝ§=zS’ŠŽĢśŪö(żØn’eOŚWĄ?īuKGš%õŹéŚūF†XB;’4Cŗ’īÕžß ~.hioįļS_éͧ_Eā“¶?»š91ö[Ą3œĖצ}«ž{q—Cō“Fž“ЦYW`taѐŒ†PGēP4V¶ņH‰µ¼ä‡ĄįZøźnYłƒ’Sż‘,æj’Ł›\[-2ćPų”ąųęŌt¤‚1$·ÖÅ15øOāÜ ;‘qןóĮń}ąŻw\šjµāÅ»G˜„|Õ98#ÕHĮ1– y„ö—VāXņŪ·²×Ńīdŗ³Ó¢—P‰ŪhŒ·Żś’žŌ¤ض™us.ķ7t·a€DĻß>•ą~,šÖ”¢ė·6š­›Ū]‡`į¹+“ŲÖ¹“m2ŁN-dqµ|g=kļ/‚,mkĆSi—VóE=©ƒ®:ēšÕGc‘>ŃVĪ#±AÉ=1šė­µ„2K÷®ŗg4£b›_%„’ö…“)ę©õŌAāēÕὋRĻ»(0:Ո䯻l‰¶ŗž€ÕHīe³Č¶IĻ<Š")Ćj.!˜9O½q^ó¬6ƒ’ īŹļKŅõc1Ž!?2ć£Æō hó¬O$‘ –šVĪ7¹,ē„M}©4F{$o±Ņƒdq¬Ļ,ČķVüė¦Ó–8Š’Ŗ§^“ ×¼·-+&2zŲŠDöŠ ć…e»©Åp+ÓogÖę¹[(­¬®1•Pxq֝ [.č©qøżÜā˜Ņ:K’‹:„”ļ5šŖ^Ä6$LÜ6:zÖ©ń2ćÄģ·„¤Qj3œJŖx«ŁĒ””eifö²=Ć,M·=8¬Ū½2ź;O2ŌžēTµcž·Ōf°'äFŁ :ŒWU’ 5׈nž[§3^6 'ųذāQÕb–Ē/4`3įķNŃ­'Ō·!*ø?„Ét7įh%»‚ĪéU‚œr0MuƒĆĻ©Dä¢ž*ešŖ}ĢsĮ >”c4qķ\²±Ęļaļ^v×W–Æ< IœR²¹v*ŚČ$‰īćgv,rXskFĪī{¶ē`\dqЉv³°ģö«‚C±95„Œ>eśdwŖŒ¬”±Ī\Ė £…@”üdTvš¬PłŸn_“=ėBĪrKß2xĪé-ßtv”ö†œÓ®4Øn~×vßzB˜5} )œć}žŁQ“ Ōc“\•ķä Ź«ó×'v:VFšÜčt=en#K$¬”sŽø­ģm>Ł.ņœtĶe5Ōč†ćG‡#¹¼Œ¬ŽHSø‚8"°ücFx¢ņNČÖ<¢ą:ž•ĆY”„©ę¾–ŅŹż_UAw‰v!ĄŪŪśUM{ĀŚ>„4śŸŁ’;„ —^ Æ÷Iī=«Āƽöė%*Q’٤ĪĀmŸ=݌IV` Ęę½J ”™puĄĘ;×3=ś1ŠÆČ·¼ 8ćéZŚąæ‚ŠlxĮæ½ZE¾¦ó„}N|ŪI 8ŗ“† ¹Č¬jŪPxŠˆ 6äį}¾•n穤`Ū|0Õ5k [Å:֛iŖāāŽGä÷Qų×¶Ę !—¾wv5ŒŠ¢ģKvdˆ!Y<ÄšWĘ ~ÖŽ(ńJjĪ™i”$“é“$ ‚V`±ć%ĪĆĶ~üYųO؞ɞ?šŸ†oƞ÷᷊m?µ<9|Q¾]ŲcnķÓ*~b¶ ŵŠü{‡ø‚t8’¾UQŽ.Ķzņ¹~_”čśeĢwQĄ‘•ń†?Ö¼«^Šnõ‹}U6i‚ŽćĖøÄuOB}½ėĶŖŪżŠlł{ā7‡­ü!yiŖZœhwL2O?u>ƒ ü½k6ĀõHV2¤8ĪAÆ.¤ĪŖcĶ”ŚéóÜŪ\¬ØįGCĒ,=+Ō“ŁĪÅ}åW® c~§ŃįGB²µĖ«nf=9®ŪJ²ŽDbēīƒĻn•ŗ;+ly/&ó¦[%¤gļßJä¼5ā[Ż“A%Ĭ€‚»NG’ŖŗaQ3Ž£lĻg×h“ĶM±ńD:¾»¦¢2….\AōČ8č+ĪōĻ~¾–kĖēKÓÓę+ōŚyć׊ģŽ!f¼-R•ir?u½÷ć~ŸšÆö†šw‡õė:}·‹tŲ¼Ė+É#ņæ4ŽēŠū׏~ Õ/ō hmõūT¶Õ-äŪ*÷H8ĶMJ©žß Ō©‡½:ŗŲū—ąļÄ_ų‡\·Ń¾"@·Žŗģ1’łhY¾ė.zs]·ĘŁ6ēĆĖ„ųŸĆćXŃ#_69ā“˜AžQ×·5”w?G„UIhyŸĀŸˆzĻ‚¼C.›«˜ī,š\F ćr÷zŒWčWƒr$Ażļ^ƒņƾ<-©Ē©h£į7Š ·Ōü'ā2eˆį\‘vd‘Ć9éjÖHü#Œ²ų¦ŽĶ;Ɩæ”üŃüKѵoš·UY-nō-BKLŹ›<ėsĢrPŹG=+Įµ‚„Š_j)żč«„xćž8„µµŁk;!hŁ›3©¬@·S9æ”*1VĮē5ĀāŠšYzź~œ\ZźVWWO ­‰C¾Ź=sōƗ~,x“Ć»Ō4/j°_\łĄ@PåQIūgéÅc)õ:v>jÖ®u\Ļ©k„ŗ•Āą–“ ō?ĮƄ >*ų_›ÄrźvRÉ?Łģµ(¤!-.#‘é=«Ž£»:č³Āt­ūÚž»ąŻZś ^ūN¼{µĄ§ĖŻpzr+Ń52o²J%‚%Ä„GŻźk‰Ę细f6‰z%¾K$o†äŽń^Ė 1@™øä`ƒ]xg©éŹ7ZŽ«\Ł%¼ŠŹė4.²ĘĄą£Įõō-ļÄĶ[ĒöŠ^O©ŽŖ*­Ģ™0:O5ķAū§‰‰ĄĀSU$½å³ķ}Ļńü—Ö:Ż­ä)ØiŅOēA L¼\`ŒŽq’ÖÆ™ˆ‚öx“„…äĶū°s\µI…¢ģ{dČ(āņ\U¾Iµå%ÓūĻĪų*Ā?‡ž’‚‹~Ѷæ .-“ōŗ‹NŌu 8”¢¾’ Ņ€vį‰õs_ EąĶjd—Ź“»µą”$ gšÆB<Ļ—b<Å×­Ć8ø—ļŗqæÉ[ņ±ĻDŚĪ€…5>ÖpŒW1œ¤ńüėSOńH²ņŽžI%²vpkȔl~Õ†Ō”Øß‹Ūé/å‹2ŸŽµ›|÷M{X%ć’½Īsɝ®“įĻOŖm>[[HŚü0 ć~ģVrÉ/ŁņĢT»•&j6Šęµ»‹{R(2ȍsŅ»=ÖF£Većoõ č„ŗRy¬Ņp=ŖSĆ9΃ ąśWL)Üå•KZ|Tų£x»özŠž-|/šci6Ń!Iõ(­ ’KWN¬‹ŌsÖ¾AšÅō×Ö1]2ÉõĪÖƒčk£Ł{s«‘œC½Ę1]ŻßĆ’iæt’‰qÅk}”Īū]bbd„gnŻłÅ/ftB¦‡‘xO“U²±Õ-äņe…Ä™žņžß•mhšŒmld æJ̾fo%ÖĀ ±ęµŚŹ³†f¼XX¾Ņ¤tSŽ„ĪjŅč|µqā¹ń®Æv™må'£ŒłõÆ®žÉž¹¤@Š·-½•ø²3ڵRīx˜Š…ļŠ—0'µ‰4ļ³=e‘Bs‘üذ¾‚ś{h#KrU˜cī‘’×®ŖLš1.÷HūėĮVšx‚ *kc³PņV-Ąą¹ žSā.ƒ;Ž fé.ŃDS1Ü u>½+Ō¢Ļ˳„y4qŽŌ$Ņo/”nUūWÕ°kk«ųiySĶÜŖžę»QłÖ2&cx’Złė” ×a¬ÜĀÖ²µę^pGJĖ•˜:]¼Zۈē’8mŲcs 5åŗ·Ų“½VęÅ.aø(Äd « ™£×Ąc^§‘üJųcØxƒFŌ‰š_/ü3q rŪ1Ā–Vµī²ė>Ōõ[mH\ŁY]\*?$ś:ęæCŁžČjJ}ÆxViŽ3 –sF¼īFĻnƹŠę}2ķ®“v1ĪģQcÕĆĮĄēķ,÷Z“É&ÖS€ƽUUdœĶ*‡r~šŖHõł®MGVæ¶Ņ¦ū l»¢l†ĒĶyķåńSNų£š?öYŌΟgā 6ųĒ}¦ĄąĮęäpφśõĒ-ĻNœm¹źRmA÷ÉÄųĄĄĘkrŚ×ģčČf88öÆ[½ä~oćnq c*=ē’oūæ‚müŽĻJV}§hXÉ{WE}¦ŚŲĆ3 ópń† §85öµ?É:ę߁d>Ł(–O»†ź÷‰tk=jÜ[¬!&‰Ć£€­Ļ>”åŚ¬¦śTp‡˜Ž¤pj…–ŸzøŒƒĮéŒbƒžlÜ:DŅ“xA3Šė­tln£2ŪlłzŽŸ &™$Ź’+€ø ÓŽ¬[ųŖĒĀĆdÆöĶĆm?5E©xūJÖ#?ٳI*+`g‚æ½y5ŌŲ£©*6žsNÄĻc’ø±FO?JŅŅ“‹¤Ć>w¹ŽkXČåØtW:½ŗ6蒞X)ņč²C3)gØöŖ2}Œę¼Ußo8;zƒžµ“©źź?-Օ€ĄČėAŽb y£ŚÄ™éļ]=„¤-< s NR‹1”NĀźĀ;ė84«›Už÷p9Āų·Įކćģ0łö…™^vƒŚÆ—£ ©ąĶ’PøĖŽĮP}kׄöv‹o$b9WŽµIXMF«„äĘ-“8źdUBžŚgWū$q«{gŸĘ™Qާ‹üPÖļ4:kė1P:IČqŠü ńL¦¹ā %h­Żä-ø³'‚=jĪŗq?¾—¬AäVł¾•4V6±²–Q$Ąõ=ż«žs4±«ż%åķµÜ`XE° Tž#ėšž ų«F¾’÷OÕä›LŲL‰œų#œÖDó£Č­`ƒH—]Ó5:ļS[ˆäo5ĻŹ¬ĒÆ’Z¼sLšüZž© ¦ˆŠ¹o,©ąyĶoČś†ÓM½šöóYŠę ®„{‘ō¬Ćńq5hÄžMÄsK&Ö,¤ŁėłÓ9ež…„k³Ž[Į·W“',«œŠ§ŖZÜ_Gwp*ĘPüÅzh3jǟx į­¬ZŪĶ­ÜŹ(Ł$ŠqĄéŠęõ-?HŃüq<1\N×1“‘ņś‘@6v:ζ––+%ŗŸ9ÜO"¼vćāŠ.dšÖĘł,\ʇČP=kX!Ę)ŸCxsĮ/s:—ˆkS2€ad!+÷½}+Īüoą{ ]Ķž²Ae€é»h#˜Æ$—U¹C8²bŅÆqŒūf³˜tŪĖ阆 ŽkZĒūBŚāW•Õ×9B+ķļXĻcHŹŚ淃¼ŠŽ„lš÷÷5­ż®™¦?z§ÜńަqÓS¢6±õĘ”į 8lõöD‰Xä:ŸøO qX>żŸ¬ž(xsÅi}ćYō½BGžĶ…¾:rÆj甐8­Ļ•ąš—‹|vš…õ½żŖNŃļixĆżŚŚ¹»x“łUYSŒćڵC)-O7›VsęBĄīéžę±ģ­ ƒ;É:®ģŒšÕəI ę”$±(3 uĻZĮk²ń<2 ‰éG3Ų‡“»²Œf,ų}ÄzR Ū[I¢B»·zWµP¹&”³Ś3ņ£ö¹Ŗ÷:ˆ±ŽG1ļ^ƒ­L·ģ6+ėė™ K{fø–L(NųØ)#œ°";¹śŌÉšq,JÜ)-ŌäÓ”˜CvZL„nƱvVwѳ[ŗŗ€ ŻŌVŻĪ»Z’7`¦Ņ9Z—+ēÓĻö‡lüą6zVEī‰ż­łlžo?ysļT˜Eæ†õi/gŠńbX8ņšÜŸ­jKįų`"8n$‘±œ?sA\ŒÕšÅĻ‹4׍d€Å§±>`ĘC]uŹ>³½,} ü¤°ązå­Q#zt]õ-é_µ[Ėė$¹ņQAČŁś×¹é^Óō‰Nš|ė¹*ŗł š18¾ˆõ(SHŽš“m“”b -nÖGM€c'<õÖ¾‘Ŗč¶2ܶ±i%ÜGäRiWĻn9Æ&U9™Ö—c«Xō{;hõ¤‘O’m»CüŹ1œ}«Ēž)ü]š~Œ·–:4ņO0ĀłęCĄ#WŚ»š”ļ$†|YÆkś§ˆ%VµšK«Ä$6䱘ƒ½}ļū<~Ą?ž*xzŪXų«ü;ų^åfyī#d¼ø„óņÕļņĘ*Čē«#ö;ąēĀ’‡ß -!š×ģŻšŅŚIYDwzķČżōÄ gĢĮ'×Óé^ļ„xwAŠuŪÅ72k?y<É-_÷© ģG'Ÿņj[ģqŌg§x‡į~æńlõˆ>0^ Š?ÜZĒ8Flu Éģ1ō®cM¶±š¦®ś7ĮŲ`ū$¶ä\Kq&/ö‘±×­8«“z¢|A×¾xMģl4&ńæ.Ł>ĒweZŅLē$Ž€gžÜU{Ł~/xĻNŠõŸx¤xcÄÖ÷QÉyhmĄ†ūŸˆōõ®˜łģĻ¢¼a©ŽéŽ»×“ß i-Ŗµ¢Ē EnŒnēŒ×Ė7+Ót«4žŚ?oÖÜ.Ž%Ė—šæoˆ”lF·ŅŽZ>”©\EadØde•±Żõą×ŗöŽ5!aįt½KYŲĖŌ®C“ĪNxäż1ZF70—cČ~7~оxNõž)ź:WˆõŐK[\™B÷ĘĪkšgöƒżŗ~"üYKß xSY暏žf¶ņāIP”;uĶvQ„՚'sąBżīono®/.µ –^I[$ÖA»®A`Ģ6‘Ų×eˆ›čg¼s‚7T “J» (ēęīHć4a)t!2$d>ļĢT‰äp¹Ę?­I„ŖÕJŹSŖŽOSZVšģ ²*©ćŚ‚yÆ”§i Čf@€öÉ­M?HInģaŽhfCŠōßx†ņßJŃ4ūjłÜ··Œ±lœv«ö‹ön’‚^čƇ“’~ŃŚłŠ`ŽßCƒå32®ē©<ōĘ8®J³±Š£cķKxĮŗž›ąæ‡Ž >ŅjMŖMņŁ3Ō7šQZŽ+ŸĄŗ&—{įė=žŸ‹c½³Œć é×&øŹNĀųOĄ[…s¬E„ų}bŁokŖĘWźA^¹ õĘ+ VųØtk[æ ųÆ“½ą²²(į°{ćéG/CdĻ=ӛKµ¾}zāuŌ59±‰ä,N=W°©5›=kNC©^!Ó“y†B2ķŻļœņ9ō §3Fń¾«” »ĖmŻĀłi! g·„b]ŲK§<מ"¹Z»}Ī©øöĮėÉØ“č.fx§Ä¾+Ņ!Ó÷¶‘£ĀĄĄ Xēė\õŌvĘWŅ“±ż©zĖżÜģcōĶc-"ĪGĘæŲßķžßā’ZÅ;ķXlcK¹ä=ē_xĆć^µć ūŪ/ ipiZ"™‚$p?¼;Ÿzē–Ēu4y¦ŸšóY¾žYdžõši|ÖrsĮļžų},J$͵C ˁ޲rčt9icė’‡Ÿ lMˆÕ.īmįČłb`C:Ó§kŌ<7įČ¤æø²°±1dgĢ##Æ@}jZ9§#é_ü.±v¶Vļ¶!8Į_§éŗf‡į}]BŃ^yHo)•ö”=²1Ķ—DK©§Ÿ6Ö=č¼ģ5čŗŽ£Ŗźž–HĆÄ#,ж;Ö°‹ łĪŪGæŌEÄņX]Łķ;H•qłVĪ‘¦]X˜ćĄ› ÖÆ•ģD„©Ųk±=¦ŠÓ\Ķsonł€8ā¾[ų¹¢xēLÓ”Õ“¶Õ4·Ė[L²}1ü©ŲĶ‘ü(Ņo~Ź&ŗ³–4e–EĮR{WŃ1Ł|€hŚxźj¹¤™Ÿ,šuıÉxV6lŒńéV®®žåŒ–ī$AÉ,j LWsŠńqq$wļrŃ źæĆQŁų~]RÜyp ē·ćUr”^Čü!ø×ļć‚85+Š9P«#}ćķšļ—ā Ÿü#Wz–1ÉvHs)2żÓł×ŅtŠóœóŅź6£Ę‘Ż+ÉöI.rqÓüöÆG½ńõņ ݽ˸ "gÉ qō­īg(Ų³”jŲ·šģÅtł&!XČbOµ}ĖąŸ xĒ~ Ö|;«čŗCłš ^ä gõ8=WŽ•2‡Te9YAń?ß¾ųþօꬠ›a9˜ž~cŪÅ|½Ø_ż§MøæŅmT„œ žĄÖDŗ¬õ}CµæŅaŗ¾c§³"n‡œĪy¬ÆŒŗrj~““Ń­¤»ø¶˜2Hƒ4xéĻ4t>tųoqvū畬¦bY7ōē§ę+é] įœ5¬Ó*2d.ÓėŚ‚¹lģy’l¬“[†°½żŽā®ĒCŌåMšŸ‡ō­K^Óuo;Ģ•H).IūR`£sźŻGĘš±MÄŗØ“Ō®T'Aņæ ūōÆ—ā„“āĀŽE˜łū¼ÉÉĪ v”;›ŖZCxoĒ ©xgXŠāœ’¤ÄŠŲ8QģkēOč/į˦µ:‚]ܝĮP8LÓ2•;öŻāźG–]͇äž=+¢šĢŗ‹j <M8¹(_©ažƒZHŅ‚ŚēC]GR²ŽDøPaĄŻŪwå]&āß xŪįēˆōOéśoöœ;š¶]­¼ŒG^1ZSE[Cż@Yü5⤲à ščGØ÷ā¾”ųqā}WQM\Ād¶›÷e$įāō?ēšéŠčeSk£ÕuO€¾Ö|O}ćŪŁÓūnā$×+—P¹/ēNéś„õ’ o·YHZh˜f%‡š+hi±ł©«N«Ŗj×7Æ<„Ӎłß„ xü+Ų|7ą‹M~ėN¼Ņf‘£Œ¬¾‡5Ÿ37=Wdz½·Ņ„ÖŚkkėb¢Žą|•½xÆN†(¼Aą†ÓķŽ{©®"1,¬pŻ1łÓMŲ—‰ųmį[LŗŌōßŪ ˆcĄA -ŪŸĀ»ßųRź’ĖÕL"cˆ˜…ĀØ~•Or.ŗųēšGĆ’JڼöčĪAŠ8•S×#×§łęŗ;K·ńZMąĻZtˆ5ĢO,¼ånÕAķ;wĆ»[i,“HÕ­ŚĪõ ™Ź‘Œߔɞußh~ÕN±my¤Ļµ¤žfķ’2jL\Ē®Üų‹Sš¼śeÖ„§Ųf—Ė—b‚Ū[ šŸćģł¤ź_ģ>+x.ń£Ö­ µÜ$Lz¾;v¬Į“zn±¦^=¼Œ×»G ?ҾmÖ`PķoHätŖ‹ŌQ¦qļhŃīGUd#M}‘ū7|F6lŽÖO•>\;[ˆˆūøÅosnCōŹęEˆyŠß0é]+ĀģEaTŠłĒöŒš,z։¦xŠ wMNŹB³4i“,epžæÆĪ»Ļ(=ÄaČņŲ”Vź¤ˆ—tß¼W?€üIcā5Ś"(&Tī+źOŠ: …ń±ńꖹŸźŠ‰dM§0ČFĒc“L錏ßų ķZÖŗ‡‰?coŽ»h3†Ō<6’¹">gIäsócėźkśR”ͤźq9ĘĘ)“ŗAĮD“±¬d}Cš³Å¶śÖ‰“xĮ/£ŹŖŸćOóš5Ėt­Ktš½Ę*“7ö–aŽųź=Ą¬u&Q?Oų+ēģJß²ķEā-7A²ŗµųEā”.½įÉĻ0¤ŽŁšn‡a<ĪŅ ė_‹S٬Œ»ŚQÓåĘīhĮ9r(˦Ÿsµž{˜N%Πٌg88lnąs]g4‘F6§ļ0ĒŌÓT嶀KzPc{;łœĘĒ×Қ’yJ±ļNÅĘF˜ņ¶«ćēģ{ÕŲ„Ę0ėĆ±ŖkC®›=ąWĘÆžĖ¾žŃŌu8µMž9®`¶””¹·.D8ź ’N?€_|+ūC|1š/Åß}³Āž$Óį¼Vć0ĪTG9ČĻŽÜ;VuāvGcÓuĖGĮĢČzā¼GǾ²ŌtmjĪuI“ĶRkuƒ*3ŠćėŠój üßŌ|āŽź:hīõ=&’Ęgµöž÷ēŲ_€’šR’Ł ßų~óĘžÓ ›7¶ģ*AĖĘ1Ū‚?*ˆng3šH¦1¤ó«G3g#ū§=*œėņHé^œÅ8™`:Ģr¹^œTRĶ:Ÿ•C°ģOoZŃ ęoP=æÓ>rŒ>lÕØŸ+ķ@IN˜50„™ƒŗoD<օGsA8‰ˆp9ēŅ©ˆŹ»r„ēŠ ‰e…nķf±bÉę ^ŖzƒśWõƒ’@ż³­>(xPų%ńw\Ņuż_C“=OĢ?é:ž–’ńļ?–FŹ8€ČœāŽˆŌ’ĀĻėé×>Ö#iuß¶’L“öŪ#žŖe'ÆÆŅ½®+Ū]:xŁžĖtAŒžB±ķ^}H1ØZK-ݾ­b«+DLsÄzKąŹæ‡ų._ģ//Ą?Ś—ÅO A7ü Ž#iu­) 'oųś¶,+ź?ŗā°‰vGóūk%ģ1ŻŪČ"V™O'ÜV^‘­]i“•ˆČŠŒzՐ}/¤xąAc¦ßHļ¬ųėŽ•×jŽÖž&Ł/‹|=%¦©28—“•'Ž}żė„DšoĆĻi{wozbŠh26“Ī}3^»ū:ųÖßLń V¹© ;idÕ‘åēźk¦’"Qč~…Ś^éŅ>Ė‘$ŠƒŽŽŗč¬üų³ŠN:ē„uS9*!‚Ä¢ā\>:+;Ķ rŃĘ%ŗZ7GŻŁäžõ‘yŠŗGƘAĒŹ(Oµ„Ž “y^Ÿ/†5It]BÓO™_l \ƒŸ”u ÖŽiż‰fŽźÜķėRŻ]¼×ŅɽDLŁź~“H"–ńćņ²N~RJÖøqhįK®ģ@ŗ$Ļz×HwØÜŲ°ļ]^›āOģ‘öi#Wˆ’ķ@+-ž”§>ł2ļóG‚:לiš®ļ%¹FōŲÓ*.Äķą}ļMÕuÉķg–qčēRƞütėXųrŽUÓßLž+Ūö’&ŁĻÆėWĶŠÖ.ē jZél ”Ÿ·?ęc²øŗ‚KV™¼ō*Žõ£rž­į øaY‘Čܘ#Į¬­7Nø°,£÷‡z|½…ģĶ-7@×5½z{Y®m£²ņ÷·šųĆzÓšŁtÖ5-卣*ø}HźēC£¹Šj:Ziņż¬˜ÉĄ®ćGÖ }=”TŽ;–^„£¦ _ćKŻ`iĘ8/y#”6ą··é\<7÷Z„½Ü"KÜa\ŗzRå-ÄÜ·“>Z[2Ŗ¹Į6|5Ņl¼r-M˜}X”Ć梜0Ņ»iĒ”ē<¼`hŚ.¹ąu³ŗŃī9$,Ą|Žb÷xÆlÓõ[ Y>×sq »Jwé]ōŁÄ·Ŗ:O‡2ńĆ]{ÄĆĄś†½kq®Xż‡Pµ·¶i’ś‘Źm<€Ēr3^ļń[ö~šĒķCū j~øÓµSāFŠņźo°ŗ\Z\Cȍ3¾¤wŲV—v±ų‰u0˜MĶYVē…õŻGś·Ü»ˆŸuö«e}o4Z£}–ņ'8xfN7¾AÆJԃÅ%ĶŽœ^!q•4`ü³)žšü+ČÆ±ż#†’©8ģĻ¾!x"][Nø³{–ŃņTu ōż+Ćō j>·iõC½V"£PtČĻZó*S=*4­©æŒĪ »;;¦UŽfٌēÖ¹Ļ[vzUōnU•Ę]į¾+c2ŒNÜzZĘ]¹lqZ³é÷ś«Śµäö։e4Ą# ¶@½ē‘‹„tiźu¾©a-•ä 42)^N6“Š×‰é? ~ i~"³Ņ-|?>§ą»ėõµMD91Z»ŒāV=MŸCå3œ ö~Ńž#]gįߌuÆ ĢĻ£^yÅ59@ĖĘGn„mkWŠkŽŸWŗ»¾’„šŻĀĘŖų)ƒŽü}ėxÉģ|M)+Żß|_ygcd“ÄzļĻŽŲAćśWģģķń¢ĻāēĆĖ ź“„¾­f  ćoŚ#ü?§µvShś<{nsæžų#Tšķ­ö‰nś7Žķ§uYT—q·?7Š’:łOĄ;ńgĆOų‡KÖc–ÕagĮ!“}ėœ~‚·D{jĶr³ė„¶½Õ“{?xbņg¶•C“°6 0uæĻzū‡Eų”©xóö3Ņu­Réµ_xčaxYļģł†Õl÷āDēżƒšč„UÜųn2Ź•Z0©ć(żĶŪõ9†/ ¾MnŽĘŻ­l.•nłĆ!öō5öǃž=ė>!¾šn™£jŚ~‘6—z’C$ɽ^#<ń܏|WG9ų’p“r”Ņŗ_ä|Ż’Ęų+'†|SąOŚ“ĆWwCĆŚ Ńµį- ¤sŪ‡!±žüWą74“Ö|)©§“ķā DčTn^T÷ēśŠó«Ģż?čóšżs†))+J›”ŹMž§_šóW¶“MÓ5¤ "ļVŻž:ƒłō/ų÷þ Õģn/®¬õ)Ū“ $¾sņōÆ:sgīŌ©£ēßüUÕ5­CP‹AKE|¢H|wÆ.“D’āź×ŪĖžY½sNÆC²4 ­:ĪHķŚ6ÜT¬;°÷®‡įŽæ¬|4‡Åu“I>©L pL¹He 䯿ZÅČŽµ7"…J\ŻĻ7o!“~1œŸ’UzļĀ VĪĖĘz™®i6Z‡…5kMOĪ,q²‘æš8©ŒNŗR±Ķk^Š<-ńÄ^‹wmw„Ś^:ŁlHD$ü ŸóŅ»©ō=R:ß[–ÅąŅęÅÄ|¬Ćśņ+ѝF¬”x¦ģūž’«”VŅAøK4LÓ]—3CĘ\ˆĒoJéģrW‘§ā}~ÖĆB™.[ydÉŗńÖ¼m?ģ{?‹-¤/± §rG·“]ĻQŸZAćķI4]I –+ ČU‘‡+•9?PjOŠŸ µļŠŌ|Cįūxn®t»3<ÅHSå(ōļj"ŗ4ńžĪjMč|įEžs ČūĪP”9ŚA9ÆŅ-®M‚GRÄēö®øOCģ0Õ.vš•^_Ziś.©&RŌ9·‰Ļg'ssŽ+»²E϶ö§T—R`L¤(aƒZ’iQCW)8.I;z®z•+RĒ«źśd0Ų]ŽÅó’ēØó—ÄłÅ’ŠćšĪ—¾ēO+‹žs׊å>o[Ŗ=Ėąfµ£ü7ń”M$v±Ž•¶»|…g_^•ś­įŪ)īŹĶ¦³KgĮ ‡!—±®Ś(ų ź’Nvu>"ŅlR8n®#O“·ÜūםŽiöwpIÅ,F3Ü×£ ‰Ź¤Ö‡xƒĆz†™<_¹[u Ž>•Гńoˆ5K+=)õ8^iB:¦i?ļG 4Hś,Ź­­Nž²”$—«LüŒųŻćĶSā§ķńĒāʧ1zĪæ'ŁŪqcöX¾Dī0µÓųkV1Ēó䏆ä7ŌW›ˆµĻO‡rĻ©ąØįWü»Œc÷$æC āāéĆĮš–­l·Ŗń”ņ—Æ^? öŲkąļĄļŚGX¼Šu(.tÅnd·Q Q0 pG<’Zįt9™ōSĢ• RŸT®`|rżˆž0ųāĪ©”xnÓLÖü=<”ģe’]£ž6’:s^3ā߆¾<ų[¬ĘŽŌt¹Ņ1)™#2Ā ÷ŽpVĀ4}Sįń4ć(æ‰\ńˆz-Žw¤ųJ{szā9‘ŒŽąv'üō«Śv¹ióC穽Ę6īė^uH4z5TzQĖ9g™”łĒÖ½HԚ;8Y†ö#ō§ ±;ż;eÄHwģ|gėWš‰,Ģ„¶‚N;ÖŅhµ& “Ō†Æ¬źņ:É—'—··qķ]ż‹"yD“×Ö±”ng*…RXLŅ[Ś#ڳmåxŹ©sĒĶJģƒĘiiztŽSż„Łū¤œ#Pérݬ 3øņńĄļZF=¹ŅXŹYÕ\ą0@Ē5ÉüEš~©Ø_ųgʞŌSIÖtĖ€Æ+1łū~’õÖōŁĆV›Ųū;ąGķ?s”|1ų‘ąo“z†·t¾E“‘ŒG2Ä‚zņkåCÓD®›CņŒu<ń[Jg" Ól½s8žēšÖšĒŒ¼K”ų[[šlWĻsį‹ÖĢ–Ó|ŽY?)ķYJ©ŻN.Ć!….tł¬š²ąƒŠć4h=Z[I!‰øĻe5—9ŠĪĀ6Q)„m|gü*kėéķ£c™ q©pÉrLӌŽDŒ—YÓļ”i2IŖßßLä<$ķLzf#å±I£wP±ƒM·!bŒłOBGZłsĆæ |eŒõm[[מ’ĆW2³@2wDIČō#ރŠ3•“:/č~!Ńt» ł­®¹v’„‡į_žŽ'š‡ž Ż5æģ“I×Pl]NŽ,O ĆgøļėĶrVūßāéÕý}ōyˆü!ńSĄP‰ģ“ūƉžƒ?ép)YŪ„tŽńĮļ :Ę]ųCÄO…h5! “ŒnžʹŌś5Õ“>­’óRųg§Ų róOń‡ ż“ĀP3ŒdÆŌW ŪCm¬hę÷Ohg¶š2čŹAb“H瓱ä¾Ņ>ŻØĻ`XÜX®qĘj¶«¦ 2žHę1Ó”ćŌøĻ”ZāŃÖU„Ŗ{cœWęĒķo⇭Mø‚8ć–R ņ8Ā’:Ꙅ·&š”oP›—Ūņž•ÕČu {…UrœŠē¶¦RvZÕ³·HÕ8ϦtģĄI('¢ńڽܲŸ½v1ż+3˜ŅČi`žÕY§ņŠmž-ÖŒŠ›iƒd±žsV”Š&»æKÓ|M R­ƽ}e3üā­†õœŚ‡u[{I$ ÄÄä/~kbó^±¶’ī&Y„l„ xśÖ‡›V=NŁĒØÜÉ<®mīdg£b“ķ¢IŽ8åp­œt ę;84vŅH¹ø*m åXž†¹{½zŽK¤·ó@‡=i…Œ wģńÜ9†Dž#÷XW$śH×Ό¾tC•fćŌSQī#)ķ§Óeq+2Žƒ„L²‰äF!S?„SµŒęśÖń3O ¬<®Į0O­vo§Ļ¢y°Ž.tbF1PrÉźswŗ¬ó#EøĢĄdVtŸ=ŪĮ¦Ž8ÉLöö­#"lS×mü÷"ŖG\z×;HķåĢ®ž":Vˆ™FęŌ"Y Q¢3!Ļįė]\ŗ"jvčĀib;ÕĮĘ1[˜Kc¦šŪIkē™1q"ōrj?xŪH|6‘\Ŗ^:‘$Xēń7čŒlpžՑl^G-1#®*½ÜóĻ,‘‰|äźsM-D?I·;ŖØļĻSV®RęņAlT})šS>hż¤/ŠčZ~§ł·2|³~SĪsøõƕ“ \źöח‘©’ŚŻŌLå†S=2:ö®i=ØlszĢQjw:0¼Öķ“‘ČlśVd~OkŪŚß}†źšsŌĄĻ}+š<ŸIų‡¬}§NŠ–ŹęūK·/—;3åz“ŒžkźßY]½³-óA42Ø<Žō³<ŪÅ6ŗJŽLĖi`6æķ[ōæE“e¦éiv¤ČZUcŸ­or9=‹„vw²^Gj!ef?:Œ.>•ó’‹“§Ón@†<€NHļL\Ģč>x¦;Yī]d….`BŪ_§Ņ>¼×µ jźidµ6kƒ’@ō„Ģ<ÄV3\̆ —“łĒ(} k٬¶Æf.zėPePōĖ=5$µw.É/q÷«Np²Z¤Hy c” Ģč4-*(­£ŅFĶ€1ަ½KR±‚Ć@†ęėJ-Oś©qŸė@ ¬_C3É"ܫŸØU=„ahŚDŗ„·3ÄjįrAźkøŅéĆMf1ÉØ>]ަ²Śżd™”U½@žUœö¼½‚ņž?1æzž¦½"ęHÆ4Hį³%.€|œ¼šÄg +O¼É;șe v†>ā¾®ųmö›m ¶Ś^©x±ļxĖō=jć+h5}ń4ŗ6¹ā=r÷\ŃĢW|ŠīēhćŒŅø]dyŻl.³ĢrŒ ä~ŌӚČūHńgˆ#³Óu^„į”ąø]«!?Jõķā“ĒØčńųvĪŠm ŅČI`GāŻXž¹®CRҼ»…hˌœŽ•jhĘ[›ši؇Ķfõķ\¶£vVąX»ŚIĒ÷OTI’i CģrŚÉg"yø •žž½E,Ūȑœē$’õĶH–ü¬‹‡RäąsÖ¶`Į ņŸŸŠŠŒ^옠I tĘqZPŚH°nQ&ĘY³X͚F%pÆlķ<‡*§•žõv¾\jb{xö–8eźĒ§ćY{AŖgg¬xkI”łØ ¼ s’z׈xĒF»ŃuKm>įä ó Ę7ƒėķĶ».&¾›Ŗß^éÉg-Ą‰FPłgåā½?Āŗ3Ū[äņß :’žµäbj6wR‡qž#Ōn“;‹I¬måXƒ~ Uü{WŗŪźZ†µ„Į­iöq čD^kēj·=}Ž+ĘØ®uĀ6Q¶[Ūų®Ģ?æc’AźO_­f]ų§BŠćhu;1#”,2pŁķųV”(96|LųÆwƲŁé-o¢Ų&w œu#¹ƒGų-¤Śx~Ī4ł¾Ażč9Ī3ų×[šÓĄĮöڦ«ØZ\x‡Åė™zfB­įō­ ™”@ńw‡ü+ćæŲŚėV—Ś~ %I¶#”qœē’Æ^Lln>Ń&ƒ£G%ƒ*ŠąĒĄķŠéŒnb{ͧtķM‹F¶Št’ķØ-Ē™#‚Ķ+ üĄžŸ‡µaŽiŗ¾’ ?|EńJže­¼rāXxPć?wüāŗa6jxĻāOŽ|Qm§hV1Ł.™ml©Į°øQž?»Ž¾gŗÕüįbėTŅtķCÄ^$dŻ$3¾V±Šņ¾ÜWM:} äĻ#ń7şŚx{WÖ¾>Iqąa$²:@ƒ(B’F8ćŁąÆŁöŔYFŌ$ˆęPF0sŪé]ŌØœņ‰ųåāėŽ-½¹Ö|S}{­ź’»6%²Ē“’‚¹–Ÿ(T'—žp;éä²$F˜*ylɹŗœuØą“ D^ńjH–Ā;;åV=żsJˆ[å ɞśŌĪY¾ö]Ģ®„¦0yźÕÆ"UfĖ|c8ē4ŒÉ^ŏ–Y~n‡Ž·tż*ic8lg9ĒjNEĮju–z ͤ–Ņ4 “ŒW© Æ½’gæŲgāOĒMD„†ßAššŖM=ģļ²FN„BśbøźU;éC¹ś×š{į?ĀĻ€>ƒ¼3o­xĢLѽśFŹĒB éÜóė^ćć+“XtsÄ-]SSøˆmārD'ū¬ƒ”āø¹®īuFŸsŽŌ5?‹>:ӛE½æM#ĄČ¢)7BŹĮ»gó§Yh~³i¬“(¢¹ž8€vßĻ©ļŲõ­”{$y&§ņźyņ\&O—b£ŁÅcĻi(™`,mUŗHĆje"”Ä š…Åę²ŗ€žģÉó—ēpÄ„hßźŗ§!ø›ÅšŌ­įč¢#2ߨä{W<¤kģŠžcɧ¢xvē@ƒ÷änŚ;6k=gµÓķü­RiµXŻĒĪā ©æA:vŲø,īo-%Ō5Ż^ŪĆ: ¾ĄŽvś×Źž9ż¤SM¹Ōt_„PŪj7j 3ߢüģs؟»ž:zTÉč]:GĻvžjŃėž:ÖÆīu9_~&rč$=±Š~ķųoh®—`ŰeŪ’žąWźō:”-©ōķŸĀ­LXŲŽI¦I§Z“a‘¤Ė,ŸJ÷Ÿ‡ś&‹”X ōĖh5¹Gycīž5‡33“=Eųu­_{Łō’:ܹåĘU@ģ+Ó|-¦xgE¼‘u[W|Ą~µ±Ė6vŽ(׬՞m=„°Ą˜d|V_…µ“ŸT&Kˁ’ŹĒ$ńéłÕÅĢķÆõ="_³:Ol»ŽaZŲÓµY­¢h-di vģx5Óõ—C+ÄŗŗŚŲĢ„wVČēÕä¶w2Ė~ņ[M3ŗį‚õփ=–×ZŲĒo©Z“¬0v·L×āė֟cYYŪĄ‘0!Xp„g-óŪmCZ@ Ä6–źÄ±X†r~‚ŗ ©sh.aYv1Ąlqšo`9KľIāyf›9%<ź4‰ŠīGŠ23¼ Œ{ŌĘģgQ§µˆf77‹wiŃą gЊ©uāŪ]“B&ó†×Ā_žµÕ™ŃNó{Ø]OÆßM>§øCmA饭č÷ŗ†±¦Ŗa§²åfĘr>•ō§ŒO¬ų2ŪKÖļŹńnm÷ ‡®±k@š†™ØźĮnnl­nQŅIóČĒ!qėĄ­ć"ZeŸYiś'…&““SA‡˜æLśg¦*æĄ/'Ńngš¬P^ßé“[¼QK³{†Ē'?Żē”ȟg„™‹ć?†ž$»Õ5]RĖB×/t‰bó aIDrNp{f»?‡žÕ|+įmNßQšŅićģä’ĖĮĀÆÓ<Ö$ΠƜ¾*FEŽ%…xŲFyų®ćĆŗ²}ŠG(—płd”?už£Ņ„ģCņ<Ę:]āėöZ–j¶ŗ\ĮŅxĄĄFģV„³šī©”čŌ®¢A%AĄ¬łĖ[›¾"š“š…źµŚ*Ƭ͂ç_ėWü/g/‡!·E¶yį]ŪYHŚH÷£™ģTQä_5¹õ§·ÕuĖ&Ib—d °‚§éXhŅZĒc©ß¬éoń•,§o=?šŃ+huÅh~üÓžĒįŪ[ ż>Ęų\0—y9‘³Šdr=+Ėž'xUŃu۟“}šk4Ģ;‰)ø‚i™ĻsĻtk;Ō xUŁPœ/%š Ą®“Ćž)µ°’śö8ކ-Ł$•@$e*g;Jē‹ųóÄ~9Ō¼]¦hV“}‡MABpżxcÓŅ»=:O üÓµ©~"[Ķu%ż±ņd÷łRœįˆō­ā³Ń4 Aøųc„_xM żŻÉcn±ŒēżžzžžµźŸ¼?Ŗ7ŒG‡¼]§¾:[,ÖČĄī–Lņ3ӎ?:Ū”Ī]™ģ’m.üć½ĀćPŠ >śŠJ¹}ĮXcüOå^qżÆöö’2±y|óŒŸĘ°q¹Qņ>hń—‚¬,õĖ™•1 ų••x\śļšļ<Ö^ņļ,Ś8r€Ž„{TØw7>€·×ćų«g„x/SŅķŒšJ/c@'ž¾Õé—? ­üc5åÜēPÓ¶–ić­Ž01ŽE²2”NA[;«©š˜žž&nµŃüZ³Ņõ?†¦čŚäšFŖĪKŻźž)_ŁŁłŗE%¦s÷ՆėŽj£+—ŹĻBųĆšķ¾•ŗ·ŠI4›–٤ ĀŻĮ÷ÉÆš.¤|1©ź3ż¢āé%”12¶JÆ÷G°ę—q=¤ļ5ķ2ęÖŃÉ*‘øg·jēž#ųšś÷į„΃i¬Ėa¦ß±‚Q9Ęöɬƒ›±š]¦™«é©é–ŗN£ŖAhA’ā;s²DĒßē“^y®Ū”oL »ĮĒ­Tw*2<²ścøweŻßƒŚ«éŽ"½Ņ&“լƧ±šŽQ#yI¹˜Čę·±§9śÅšāE|5mŖEtt›c˱–aڽēJ|Ā¤ćœzʤG&;Y°Šś²™×ģ38WČÜ6ō'~KüTš-÷ų‰ā’€Ÿ4ƈ’};ĘśąXKFŁGł—o|Œ¹Æļēą—Å ö’ų šė柇īĶžÆ§Ā×Ji†ą.7ü0ü+;^ČźQ=;Āž'}Ä;D”•'X¤ĮĘćłā¾××4ču[!*āBr‘Ük)wņOž ³ū&·ķyūxŪÚUÄ’<­Æųq”Œ<×X; üĢw.юvuĘłīxĖN u¼‘¬H •dM§Ī†ÜEMrŌ•–ö§čæ¤`y¬źāRÄ|½ź¹uełÉEÉč:šķ9*Œū5Ņł 8Œyœ… ÷ü©ņŀ„6«/'ü*ć£Œ¢%Ż#d÷ć„äA ¼ø¬b†@„1'œg½O E²#.ÜGqļM­,uÅõ/ĒpdŠU>[©Œ’3Įļ_Ōü‘ūt[ųSRń'ģ?ńZke¾‘ÆüóJΆEÉc÷r@`½>ž95ō; Ļģ>žY®#†IĒr¤¤éčƃ^o­Z„ĢŅ鯁«Į<`×H–|™ńćĆ?Ł>Ņ>"hqIˆōļ/QÄ}¦ĀC‚Ģ:¼žCÖæ>>6|?ѼW¢k¾hEõŌ2j:[°ÉÉBYséŪźsŃGńńūQü—įÅ­jĆ Rżķ§E—$2Æ·złžxR2c„«ŒõĶvŅ•ö9Ŗ¢„ė$;b+Ą<š‡ ) “ø8ė]'ō h¼·C“<÷§¤±ņ2x'¬er#>ćŅ5‘‹…Ē„1UŅFrK'ėTh[£±fßŲԊˆŹØä XPn\‚=Ū6øĻ^õģ³ǽköZųļąĻŽŚ41ŻŚŲø±Õģœ`^YJŪd\ŽąƒŲŠ™Ņ?ŃSö|ų·įü.ų]ńcĮŽ!žŠ·m67¾ 0˜Żéņcc3—÷sŌcÆæōŪ%hVĘįŅīÖT[‹WõdbøŖDź‰Ų[F‘E÷pÄÕńWķńū1ißµ§ģēć/…‚ÓL—Ę–±’jųnkø÷*ŽF žĮ×(qفķ\RÓCcüŚ>(ü<Õ~|Gń/ƒµRŲE{*Ļ‚>Ķ8$xƒ^Šķµ?Ļ$msŁQ!żńÓ>õ ńĶv[‰5›øo„–I2ÅĮ2{žuČZjÆ£ėÖD“·zäó®šZ?Gžx²-_H²–YŁīö…|œqĶ}Gįū…¹PķŒ~µÕLåØĶo·Y¬w0,‘É2’ō÷5Ę5óE|QqœgÖ“1;hWVÖó$g=”ŖwQl“sŖ:’RŸ_…§·‚9s€HčkУծ퓓%Ę\©<äw Ø³ĀµUµčnācµ`(>µŃĻje’(‹żķ½ ĒQ£[yxŒĪqŽqķ]†½¦xrēĀ·7L«oŖĮ 9Ļ2)ķųPhŃĄ„nlg pTąö5Æ6‡Ø_y‘Ćn×*T¶Ōźž—3[iéf¬Źńp”#üā”$00—<Äg«§ųQ¹Ńļ4{GIRtŚ~\ćƒ]G€|?>ōIcSsĻĢF7 ‰Śų¾ŹļNµQulŠ#|ɟā¼WÖÖŪTÓg³øxĢŗM§ļšxaéČü©“l{T‰­YĒw$QĘģ9 s“ė\ܖV±ŻI Č7Œž{SH:a,5æ1ä.ĆŪĀ¹Ču›­+Q¹æ„,ŲAŽTU5є–§Øi÷ĆZÓ¾ŅźbFM̌rAŖ®‹q§j³%õž¢bkw1˜˜`;Č#š§ĖŌŻ; £ųIļ¼Mpu¦ū³oĮ9ņĘž„ž5»/†ō­śēģ²+¢1ÜŻ½flĪ;Um.(å’kĪF:\õ¾Æ~ŒÆ°šO­g1Ž°Ž õ6–įĘ%lČ}MvZʗ¤¦—$֗¬±Ź˜?5f€ą#6ńŽĀÓ·Čäg§ć(ŽŚ×J“aŁ*ī\ćś½®™.ųϘ¬¹#ŸJŪŌ--ZŻ l‚^˜ĒZ—&iN&NŸnÖw(łčr }£k?gӗŹq¹±øūzT›ņ3BēŖŗ~›zCD÷¬˜KqšĘšŠ€Awzc>%IKFB „sĒ?…ÅXš½kXń=γ«Å~÷&¹vE1CZŗ“-цK™ĄlćHõ×M9,ć„[„eēwv®nH7ĢŅŹĘ)"–¦­žŸjJopŒFz÷¬_čfėAÖ§“d[Č”ĪĆɓŠҹ*-ˆčĻ=ųį];ĒŚåχµ —Ša˜LŽk1"©ź õ•%äš)žKĀ©iĆ[łŸĀŲr ē޼ŠČ’h² ZX:_į_’:}NŅuŸxjv’ū7@–ž»øŪøAn_ńÅ{ßķSšFųAq |Oų;ńĆŚģ×Kń²°yÜB“ž’ʹU^y¬”Vœ[R½ßk.¾»j>*¾Ōē“U֖ŽZSūß-@VnųVt0tv¶ņѰpOLV2±ķRÄßC²“Õ ÖįŸ…?„[·¼EŽw zĀhÖU…ām#]²šÓRTv·š3$8ōÉĢńfÖ¾¶ŌŁ’0w)ü+ÄņkŌGw®Ä÷ė†.™ģ;Wišę_µ|IŃl"µ[¤ó|Čd‚Ż0ŠŃcę1؃õ3Ćó,×jˆ4#o*Üąž5źŚĪ·aāė{K?k¤ŒB’··OĘ»)ž\+^IžGŖčśŽ‘<,ÆqfN±3P_i¦•§G«E(wS‡Lr§Ö»a‡ŃPŒ]™ōߥ/ŚO]šĶÆŠn4ź÷HmŒĀ¹ø·8Ü Ęs‚Žõż|#ųÆąĻŽšß‹ü!gż“į·‘‡˜¶įV;¼bX]xĒSõĶt[”ü‡ō£įlEŃĪh·ČŸ$—kŻÅśnŸ»ŸŹ_üoą>©ū<~Ż8'MŠĆĮž4µ Ńę·d3¾vĢøyƒduļüB¾lŠc4$|ØéšąÄFĒōļ‚łāĢø[‹[ņ(»÷ƒpŒIõāŗ¶KtT}ŖT+ŵż4E§ź–·–qČ'£Q×Ė9#ņÆæcõH³ē;C=•ŁÓ®Rbźæ#0ᇹõ®ÖĘ]Ę1#vĒJā=<µ=/Āo£Å&¤šĄøZŻ³ é(éŸjė4™Q&EgXĻJØ£½»{ć?Ė”jWZ]Š[`óD>éQ\õ­ģWd1Ug#łÕ“qŌFäQ£)TQ¹yę½ĀŽ7Õ¼9ę™Ē.•u…ø·t Ž3מćŌsJ)ny˜Ģ7“£*}ĪæĒ|ńKA·¼IƒP×$ćeŪä¶:}½kóŗļA¾š‡ˆµ? kö’ŚÜڶ6;nó?xõŃ-®~58ŗueMō/Įc‘t÷6^`µn@sĒ?ʽsĄŽ>Õžx—G×lnnŅF\B9VVčĻcNŌöšr?V¾üJš‡Å[ōÖd“ń=ŗļ09ș=S߯Cö€ųmŒ¼7¦ėÖ"Źéī!†r¼ĖŁ[Ō`bŗ!#ččŌŗŌą>^k„é7ģ¶SN„®l'ūƐrɟ©?½zļĮŸĆįėÆųvņ+©<#Æ@Ö÷öĀO”æšHńq]15«N3‹LɚŽļC[˜ øœ@ćęūĄt&½ßömšūÅ45֛§Ū_“ŚÆ%ŪmŲĄ“ųVšz%Åīž-Äb„ö!)ą)択ˆüUū\ØÜą©n½8üCüEš7ŠeæŚÅß~%,×M”ݘķŪaEÖ¬ e$\ö)€}+ M-.5}8ŽU±ųÜ¢oI~ņ=•šŒ—«ŗ"?üNšUĒ„õųĮ?šŁMuö“tēēē!OākÄną{Ż“:łĢ¹±Éڼбg÷ķLm½”y+·žłķ] ¤b4S kŠKSŌ„l†4VŠ]J‚Ū”^ÆįhēĄ^*šgˆtuœĖ2\é÷q¾ ;ž{UF%z,śT6:½ž±h.–h A.Hh_9~XükŃ>ŚEØxĶō›ß]xŽŚXŠĘē|MĻ́×é[Eja:Ŗ ¹=ĒÆh> ń“Z®…”źZTr*¦ Ņ[2"J8Ļ=3[Ž:ŌµOŪųHˆ%Ņ#¹j åÕńŲśW]iC‘RƒŗfŽ•y%ķ“zL„į•ˆčOk¬ńWƒĻ…®£“{˜ļRH’h„īø#õ#kėC$ ®X€8+ķĄüėOžĘIŁ“yށāĻ h> ųq«Kr·®’f“v1Ļ uéŪŚæ[’ą›ßž ükšö„.„įķ_HŅ’°.dk»čJ„ź6cO,’9é[aØ9ĶDü’Ä^$Ćå=\Ć+(ƽö^gṄjŽų—ć;9,£“±‡R¹·L2’²œ~Uö&‡gkØųSO[Ė_ʅ®ol~“”^§ėxŖtćR;4™ĀųƒII K†O*ņZ9U>•“ ž|Ķå°R;õJ„D‘ŪxwDŸVqä(ڽ{f“ĘMØųic·IąTÉb3·5„åÜš1Ų•²><›Åśzx‰.uv/cēaż†z ßńŠžØ[ļ߽ƻ…P»@ŪÖ°ę>b¾&ē¢kšj׏/Lr`OĖ¦æ^e_Śvś'‹¦%žÕsÖ vŠŖxŲŖJQhśInō_‰.4ķF9[Œō"›©ų4i×MāF*¬@W§ šv<’³9ļi·Z†Šö°Ą³J¤r>•łĻń²v„Žxq§šŚā7łÄnQńŻNN£ń¬ŖŌ>Ė.’jČłFoŃĀ8Qč+ŠōØc·Œ'n+É«RēŃĘ>퉼Uڟ„u]6Ęßķ—d "Aź ’yÆģŁńzėąēÅM?ā6ƒ%¬z…¬owk!ąó†žuTŖ6:.Ēī_‚ž)x{ö†·Õ|Wg¬Y’m«+’f+‚ź1εvrxvĆZe{ˆbøuŒG øeæŻ!³]r‚’>k YŠ—,4Hüōż±’g?[ŚŚkžŠF…¬ ßµCB"ž<|Ä}H5ł“cąĻ Śx䦮ņh‰v|±#” c‚CÉǽyX¬2Zu—ęsœSeBŹM&īęÄĖ ā#YćŌVœ[5Œ;į•›'½yR“>ŠKźĘYų£ū6EH/ĖåSyݟP+Š\‹Qӝ>yC8 Å#³’ēˆ>ŸØh?m»‚Ņc1}Į‹=k¶Š5;[˜¢ĪØģ¹9ź # ”Ķ+¶Hē $Č<+BĻOūIVĒ™ĮÉō Å»hGćV0ŚŪXČŃī%$ĄäńŒVVžŽ\ÆßĒoZhøČźķ£/ČŗKėSs„ŻF W#5Q•¤xž” „ÕŠˆ2¶pŁVĆ\ģ%Ėž÷Ó49Ź"ŁæœĖ,僓ĒŃG¢–±Ø.•³¬ł‰r\q\Ž»„I¦]-ōn^9ˆ'ņĢŠ‡&¶5<7yhāé.Ķq·ä9ū¦ŗc-«Ūj-qÆ0³Ÿfßļl?żzhó1lü϶¹ }?ČĢęāPAž\ׯ?³Ī¹i£ųƒCwxÖlˆĮsĄW]4|­zöv=ŪĒ—–ö~ x£$nxÜy>ā¶< ńTšĘ©m{¤ß+"ü³EŒ‡±®Ų;ü¼Ś#Šž*ųĒH¾Ń¬’±½¼—‹›˜Ē—żąæõÆDżŒüy|OŖhŚūĮ’½ģ&8‡ńBēøü@żk¶œĻ5ĖčNŪ£ōWRЬ¼GˤĖČ8ćā¾Xń„o“=Mn¬-Ė[~Ń’iĀ»Ļʱ7Ö2Ż>*ŸJ±ū„ŃŁ0ö7{ר|;ń0IšŚāDXݱó”łĻL÷)äav‘U×óĶaŪł7 < Ź»±ŒVéšu³)ųÆJŠóĆz„r[‰Ź'˜09zWČ…¾ƒØŲJ³éŠ\3–B»YO½sĪGÜpę&T_īŻŽRŽį<*ļ&—&ų]B¼2 ŹҾZń_ĆĻųĆĒ.ž*š%ĶĶ½ģ…“øŹ8`Fq\ņ?XĄfmė-ĪæVżœ'šęuĻ€ænµ;“ĻøšÆˆ‘·Æū !ž!ÉĒóÆ.Ńho|,Ō†‹ć‡zö“Ń}ŲGšŒ¤Œ•#ŌĒŽ§˜õć[Cü&ń‡|e«Žk~Öō½A¢¶wš8īĢ…s’O9•Žx’ŅĖX·ŸX²¾±”]VAøēŪ­E’[œ®‰—}Øh¶šę»cį}.[Ø”žžćż]¢³mŽÜŽ™ĻZų öŻų[wšćö‹µÓ­ü{įßhré¢Xo“ŁØSČWP͆ć=yVrZ3ÅŚ¢…ž©ėÓKiźļ§£<£AšvEfa€}+ŌtkUŠSöʔĆŲÖ)jiķ/”ÜŲʄ™#*UFŃÅh KøO°•'=;{WŠåźŹēšļŅė6RĘį0Iü”æš&—žŲuŚ}ɖ“ˆ8ĻqڶōŸķK7hdF‘;5}3ųŹ£čWÖl.漣W#ąnćØÅcĆØŖÜ„«(GkSϙѶ.¢>bŗ¬ZjśŽö·śĶ•Ž¢‘æŻ„į°xō‡=̓ے­GÉܝx@x£"؁ęi€ē$ņ~µŁhZµƒ²Ü11ł°j,*Žź]ŚjXźQŗĘÅp}k&8¼ÉT€Ć$ē§Ņ¢HmrĮcöß2ŽĆ<’9ükŅt{WæICT;&3ĪzV ŲEJżµ+˜ćŠĘ8™¤?2¦µj\Zźv–öÓ '… • Š"īk+ŪĶ9md{«t–Iõ=×5įśž«*ŹŃĆŬLŪCŒż 2Ϧ~i¶"šĢ ī©qulO›ĄpIēµz ‹&©Gqq£.ÜwĶe=Ąó_é²ė7źB&TcåÜčE`馜PŹRłšč@ŻŠ›} -BžÄ:Kgg©Ī[ֳNJΤę;Ūh­¤FŲ­œoQŽ·!kĖÓ6­ŪOm4Źqå±ĪG©®UKq}"ŖG2‚Wųh"Ē4ažg˜¼A ŌQ*F\o'ƒ»µH½†,ylČŻTƒ÷~•Åė‘ĮnĶ/•Ķ#dø±”yoē²øć‡9Ē9śÕų{Ē:<~!Ö~ ŤėFw#ģqĘY|£ž6c#’ÕV©˜ßƒ|Dś„¬Ųé1č>ŽB#O,Ē’” tÆQš¶»uØx‚ļAÓtŲZTUSwøłžć„l£ŃŹ]ÄM>y±{ʼŒ-£B²īŽ~n„ÖWƒ§Ō.§¹>!·›O€»Hł1ŽśÖŃZŹ] 5Ø­l5'K±µń¢Ä“{—÷Ń·${g§5åž.ŅōßčvńųĘFŽŃ˜,–Üm™IŻ=3[Ā$£“æ×µ-:ĖES»Ņ<5XŒ·Rœ"Ęēn½=ÉÆ…j_Ū÷įĄy„Ń|kaāß„¾āŚO1Qśe®ź1)ö?žO‹“gÅÆŒž"ŌõÆųŠīęŚffK4¬hsĮĒŠ×…Ļsö…g(„šAī×|,Œ„$Š­ Ź–ź*¬ŪerT’;ūÓnūŅ}HDQ»Ŗ‡F"§U'$. 8ĄķPs¹w&··"*ę=ŁQķS%¹wDU!:géHĘORÄśqO.\÷÷­++)XƒlėŌń@’:Hō.»’Pģ9ą śąwģÓńsćö„g¢ü5š-ÜV„?ҵVÜzįgRGe+Æ’ ?a?„’¤ŠüMń:įµßˆ–’¹]'x’Œr1’ėöƳąĆžoüSe„ü ßomby‹Ū9ėž}k‚”ŁN]YĖŚüEžŽ½¹š_¼7c&žŪ¦kłWdŃ”Ī0qÉ V—‡ģü5š«V_ÜČŽ(ÖĘZę“óa„soė8ØågJjĒ wń&ųōĻw¤\i^šRg‚4ņŅ4ĻŽN>Õ.‘mįū=vśÓĄV·¾uÄŪ rX«t’õŌ²Œ9ć·ÓüF×zōP13·-·ž{Šå|[Ŗ[Jņ;wµ²vވNvgް”ÉR<{Pq$Žl±““cjœdĀŗŪMĮZ‡„®ī¼]­I¦ź—j „ćŒœóŸJÉĢ®mlsVZ¾„bŗw‡­æ²tõR’ČČŹdQ܏OšÆ(ń7Ē/|4¹Y4+?]ń¢0`øMźż~oaŸZÄ3å?ėŽ8ų±«ĶsāmU¾ĪeóšÖ̘āÉõė¶š÷ĆŲp–škCƒŗIA7×½D儎ˆČśĮ? 'ń ͽµ…”lŹ7•† g½}gš{įw‚“¹…Ö¾nžõe/° xÉĆÉąq\®%9FxOÓµ«fc‚ņPmĄUé€? ƒĀ_ ­m,a¼·Åd·–.LVŃ„Šē“g¤XųbÖ-9å‚Frźr®@õĒ ļ^9©O„ØĶr-]ņĄ±įµS¦aŹś•õ+In¬JÅĀH'iž/zł÷]±ńʗ¬ĶØi²Ś[r< `{°nüv¢1-$“f‚õ=F ęŽ÷WÕ„æē÷w2œž”z~"¾øšž„¬M„1»2Å:ÆĶ‚ĖŠŚ)­ĢZŌŃ×µ ©t¹ä•œ!‘ҼÆĆŸ<1oØG¦]ėšd®”]šdaü#Ž“°¬zŌŚ”ø€Ļžp#Ø5ÄßM%Ä2Jovcœžj\FĢx-n®RīV¾& ›€'jé<1©ėóiņhŪÄśj|ė“ónļŸČS°¬sÜז×Ę)!ži³ş­vś5†©äuŽĘ›ˆ‘pTQb“±›› \ŸģÉ%ø§Īp>•ēšļ‡.ģõ¹uIīļQ€Rˆ\ģ^¼ųŃs²›č~j>#Óōū$’ŽŁī„TP#@2OzQć‹Ū8āó|ČķqŸ™¾T’ śĀLæaā?ķPe…ć¾M§ ­Oµd7ˆµ&Õ –D6n$ ²śS.6ź{?‡ģ¼7āøŪ@ń¤žE•ŅÆl€;ćėķY~Õüū4|k¶šįŽDöÄÉ·00O½+™l~†é~0š”ž’ KŲ“Ā×Q“ØUäp}zöƋO6į;ę]fł•¦}°—°$żß„tŅxćX!ÓÆV2„pSŖ÷ ˜Ć¹OWøæŸÉŌL†4Q€B=qųV֛®išŽĻ.”}C¤£°P95<ˆµLĢŅ<7&øF«k4ķjČv©9Ü;6:×­xĮzä÷‘Ś]^%ř%‘ä]‹q€ƚ‹I[S‡ųē%–‡¬xWĀŚę’·śž'Ąä®GxÆeńV—ąļx>m/BŅ4·LfP7BĖ“ŒŽzž”ĖrŠā4_гü*Ō-­.£[’ $ÉrĪ£ųA’=kŠų—ńŸ_ų—āÓwg¤O„čÓāA 99”4M•4ĖĖ­2Żd“·k[Ē”erAžfŸį›‰®o/3ż”°žń¹Œžn“ģܳ–jdd…ŗØĻéXæüsā6ł”]8±•V:ēҶ¦ĄĘż–’¶4ÆD“Ķ%ʃ¹Œš£’`›# ķŠń_“¾Õ<+Økz>¦ZĖå“ašįtĄ³Ÿ^k~s½lxēķEyį_ųŖŹóM»µH­‹ XŲ<`ØükÄ<į-a§»I I4ę\Ā䜅ž]k+Šų½$^ÕWEæečS$e‡QõÆ&æÖµ Ķ.1lŒd…rį8ĻćDV‡RØz'€>"Oec$Ö³ŪŲߤ{~Nī˜Jśgį_Žõ-_ƋoÆėMcu¼LĻ`¼_Ź‡Ļ”Ģi¾Ō4ū«»›+©åŅƒ7tQžŽÜÖWī­[–&ČśŒŽ‡¬ŌŃ.ēÄśĆˆ ¤]ÜMƒZ,v²Ĺõ5śKū0jzރšŻō;¶µƒU¶›t1ē;‹ø“łSOAM#¶ųÕⵯ½Ÿˆ8g2y{U6įrxļŠųgR·ŸDÆŒÖ”²ß)'o֚Ō䙼ų¢5Š”»žAöu@IĄj¦½ą?źµ/č×OdŖņ1Ž@Ķ 'Ó·$U{4DVŗļģ—ńNĘūOŃžxūAŅgÕ¼ęžā1¹¢cŒŸ^½źßķCšĮš[ßYxn Šq,mĻ(Žxö¬Ŗµs[’¾ ·K{Ł#HŻ#PF;ā/a‘¢äóǶ„yt=ūö|ńõ߃āĘęā9Ó匀±8ķY( ē3+“ɮƊ²\ eYpqUfÄlQ6BsĮéZĮv+£,y2,Ačj5žYP“ņÄ8ėWcrĀ£°bz¾«»nģ—ļŠ™3hl_ŠKx•™÷6Ӎ gšģ<ńÅæ>"xć_ĆŻFļMńw‡µÆątĘ ”Ė)ԁƒYßS®Ēś\~Ćß“ę‡ūd~Ī? ž]‘ä<Š¢Ō“{ˆŽ0mg­īøČ ’xWēoğ…Ś×… >Ōē[Éc„ŽhwiĄ–Õ3܎ŸÓ9®]F~ĮJ?g+ˆ~Oéŗ#}¶$&)Qv˜n|ącׯć_͜ö“ZÜ\XŻĆsk{nĘ9ca•ī=뢊¶‡4µ “„øłśk0.ēb¤l©®äŽ:‘+;Č1»,J¦6 ˜ĒųÖŹ+”‹‰`²²VŪųT>]Ģ’+FŽ\J77Ņ™Q,/ŹŹŁuĒ­YĘąYJī“Į–-Ż”•ŠŠśRbĄ\$s[¹ C©“:iŸŠ’ü·öĢ“įö­«~Ķ^-ŌīJÓ[)œČ—ŗ\­™ą#ÆÉĆ•żžųFś[ż#Ć^³Õ£šž–ūM¹Œåo¬Ļ8ņp2=« ØķŠ=Ö=NŻmŅāY1Ā·ūՙ<·3܉@ŁqlŽddt‘{ƒõÅ%f)=OćĆž ż„þ=²ż¦>čóŁų[Äūžél*[ėa~c2ß(-‘üJŁõ?Ģ|r­Ż£ĆpŒ®£c!*Ƃ9÷ĶDYžM,śóÜ"J¤±bĻNŲÆlšž­ØirčĶóŪ] ‘²»p=Ļ”Åd×Q3­ńeåĢ0kv°B–²9B óųד_ŁGē(C¦NĘ kNFNGŖü&ń,śmņ[Ė,ŅŚ±yɏ$Wčo…uŸ’a,Ü s’k²2±•C×,죹F—f õÉļJŗIo+;‚łļü>õ§22+xgPž×S’Žį!ŗ°ä(䮋Ęt®R“";głBūć’ÆL:Ót‰dZ6MĖóó]½Żüv6 ꍠ ¼Š3h§Sø2¤8Œ63Ūš­+،Hń¬ ŗsA¼v#³ŌŽÓ}Ž]čGb)#¾ŸYš8¹F9ĒA@Ī›DŠ †nQ±–Æõ­Ė}b 6P6˜1œuē÷eÕŌŅ€ dēŽÆĆ}žBź˜Ę{Šß 5®Ÿ:Ģ|µČGJõ=#ā@ȋ ŖŁbĆ it7Œzž/üQ¶ń.Ÿ¤čŽ“µķ˜“Ó-ęŒé_=iöļ,³Jń£‚Nw:§ŲōÆkvzzOm5ÉUU=ĶY¹–{©Õā/ĘAäԁĪjķŌóV~Ƥ]Dńło„Ē\ōü(.ÖÓßȳØĻēĪvm)ē·Ó$³›ģw .ēŲq»ėZ)#S£Ó5 ¬Ė%ä¾eĄÉ œn®oYŌÆÆ.g3ŖävcS.åĘ=Nj„,ÅdĻB3ÓėR6-“,0ŖqĶe'cR;9!i±®ą}jĪ©sx'Œy…#nVqv`^m)„±,©—K ęyĻł©ŖF/:8Ę08ƒX˱ČOØHŲŽŚ6y\ōRiļ…µÜ/02ŗn<}+Ž”Ó ßCÅtkdž[³ń‡K”=¾ššÅæ…üWšĒÄ~¼m*g”5źČĒŖ·Ģ;ä:ņ*½Oõū‚ńn¾O„®Õ¹©ĮżńLł“įÖ«|ˆŚf«2ÜÜG,‘y½„PÄ+Ņuš÷°·•Ņ2lRB ®YK¢>Ž™äž•©²Ķ-„gF'šHV#œn+ģŒ?°Ö™ū9h_“֏ń3Ćŗ^©uem=ʆ„yR3•Y g<ŒuҰålņs¾ XGš7ö“Pßkß_ųĘśUÅŹC ^§;Få88­«”G…‰š;’„/<Ž+Vqb^ĒÖ¶öŽńWĀĻ.£c§ųĖJ“0_ŪMņņÇ”ė_ųēLŃ®_VŗmN;V‰Š¢Ÿłhā“{óS%ўV+»0<į-#P°Ö%¼Ģ+jé „Ÿ’^Ä× ąń>%xgS™>Õ¦ĮrڰHQ>‡„(ĘēÉc1wŌż~Ńu;)ī’źŽUørĆų· ŸŌׄxĖĀļm Yk–71d_13±”ō?vRŒpõu» šżĢ~/šüŽ$®6ņ°ūĆŅ™įłą_iZŖo•NÖV싱õ˜*ŚXåµmō]RQhŪ,eĄ<}+īŁĒö»Ōž|$O…ś•”‘Ć’ 4:„w„ö˜­Že+ŽøŪžj„4|扼)żæ’UĖbŅ›³‹}āÓüRjż/s½’‚ļÅįżCĆß²'Ь āė·±Ū^Ē mÖ³[†##‚§bœūZü%‚öÖkl˜ć”1Źē Æ7RģłĻ¢ÕyŖ4éOxN¢’ɛüŪ/iŹ“8ti †ļüU±­hÉŖXˆįD[„ĒŽ•ęTWzŃŠł‹Å¾:]¼×2®ÉUš>÷ҽ+ĮOƈ,¬m|]i؍nį7Ūø!T”¬żŸSŸėĪ-¤zeļĀ«OM7~ž[ĖÄVvµĒĢT åO~3łWYÅ¢Št ^Óu{½.+␈呗޾µā·~ńƄµ‰?³.ķÆ,bČņnć Æ Ü:ž"“UmŌæķs8Üčķ¾"Łźet’i/įۘĘÓ8‚fō Śæb?ąšž ż—õi¼MØxƒ\šĒмw5Ä76ŗ‹Øū•“‚ÄćßŪB¤n®~=ćÖ;ø[|Ķ$ķü¼Ė›šŃł3ōsö–ż°~žĪ~Ōćń†±e=āĒ妝 a˜ķéĒOjžD?ą ?“Eķ‰ńŸĀŸtCįĶ3L±–Ź‚ĄĻvŒr”‘õ5¶"²·)ü’ōHšūż±ö¢q„MI‰Ź-}Ź÷õ>*ÓńŸt««vŠtčhä“å.Træ\sXŸhöɊ׊Ķkp²‹xʁ²Cՙń(ō]N×_ųqż‘ØF!s=¼wq‘óVčå^ńGĒśŪŻÜŻ«mÆ"9)éĒękš¢<D¹µ>+×ķµ„¼{Kyn$1üF¼m®n­®mĶńŗÓ5GXNŒ€ć® ąžÅ+£Čtµ=ƒĮž 63£:EpŒ@Īsü«ź_ xÖ&Ų<+·c šO­kJvØ6}-šĖāv«¤N iŻģ•÷.[$ŠżųyÆŻ|D€O~R=Ņ®rcõźÓØr×Įż£;āwÅ/|&µ{8ļ¬o|^rQŗø·c'ż® üĮń^§’ >µ©k7¼»Ė3±ĪźŠõOw&ĮJĪLó[›U™† ē *;B¢B„¶c×µy•'v}e<=•‹Ń^efµfšExOÄÆ„Æ>¦Ć„RH+«bū^+•įŲäńž¼õ«›ńēģćć…ŚŌ_hš¤v$ 4@Ȅc®=>•£Ćö:š™œ>nϽҧK©”·“½’SĄImsłŒW—kžń}”ŗ†« ųR’Sµ“+ż£%¼g ćæļ”\ÓĆ3®®&¹bŁ/p²²Ģą€ŽµŪŁźp …\“gž;W;¦ŃęTÄÅź™Ģų“R[ĶU^ßĀ MŁč>Ÿ…_°’w#·­M‚5³N¹ŽIž8€ŒćĻ5ŲXĘ\I’la€2x5kB”Ļ"Ō§K-RöI$Ų]ÉėUą‰ļŸÉÓ=ź™=¼.v«ØOOjҟ1Bcv^zk)n4ūōėˆćœ|Ā Rz×IrŠ^!µ•C§÷ŗÕĘ=³›“žČÓuH¬ƒµFC2œņł5éfę͵xåŃ Œ$ŠcD›ī©eĮń&¶„O+#ó7Äp®—ćFŚęŹ8ķŅļnńe²Oę¾»ų1g¢j>!²ŒH–ķ#b=ߥkŖł MKH÷ļ‰>øIaŌķ®MŌvƝĆõöÆ:Ń"Ōōł ’<`‚zŗQXj„kw†»e9G‚Ś Ę:1ļ^­į_D 2Z]n$Õ~•“$zI«>§ÜŸž=jŚl‘č%kiįŪ„œš[ėļ_o_Įeć}1/¬į‡ĶĘхw×ßNWGā\]•}_Ļ™ņGÄ?jžžM^ŹĘhtĄwĻc! 9.?^*†ā§h„`?!¾¾õgĆՁõ•āˆ.4 ne‘Dč»6±ö­_źowb’H›ĪO+ߚÖ'“V =FŚHĮĻŪÄéŗxŌmā ’L ‚~‡ŠĻ•^Ēč¹­YÓĄŗŌ“ŗÓīć?YjŽ+{Ć›ÓĀZ{x*īéć^q?ōÄZ%굄Yź–1‘†ā"”x@|IŠu|`ųz%”ŻeČė`œ‰"o¼~œ×,ćŲśéf0„˽]¾fĆÆŚ Ā—¾$šžæ6‘ŗŚ6ÆiØßhwč«öČb"!øÉ€Œć5å·Ä€æiūƊŸ¼ ©|7Ņ&Ņc‹W°’ÜA·Į˜XŌ•nܕĄ$Ō’puRƒ‹Z»k÷éóż=N~]Z¦6…zS“"¦¤µ×™+i¶uīķŌńŻ$“(‘Ü L©1QŒć…7Šö9,ĪŗX„ŠÕ6‹×Šō Nś²&Ÿ~’«µXpAÆ­Ė¢½ž§ł}ćözó%ÄÉmMņ/ūsG÷»ÕžŽš$ĘhŚ)S<ō$ ښ['xƟæaQ»?Žļ^ŗŠü2¦‡9®EŖZ@ņEŹĄå½«É“xŅēS-pqø’„lŽYģzp‚bĀ'$2ŠĖkqyHĖäēęSŠÕ–µ3K°-öCm.1‡AĮć„póŻ"ŹźČ¬W3"S1Ż·–ø÷Ēzݲ‚=>²®ę9ł±Mə¶dßjsp³ŸJČūKČĆr°9Čā«–äKcSAÖfÓ5X%‰X2°8ۚõķO\:¬¢īćœäŒcš\ˆęœzœuݯڦĖœć< Ć×4ĖĖkv½ÓĶ•W-ÆŅŖĘ2GAą[=FņÆnŠ ĘF ę—ÅVv—X Ūenύ3Ž4#%ڱf\` ½w+kØY8³†¼µ+Ė+dō­”°ŽBā¢]Iq5« ”Ęß„TmJėWø·³ŽŠDīp=MQeĖ2t«ćØ 3Ž»{-JÖG[xf‰ā’dūFuW—ŗ[٬¢¼ųłŽ:ņ k[¹Óęm’7äŸJ4Œ®|gń’ņYīZQ4°DX“ŠGŽÆ…5ł]a—/,–Lƒ” śÖfńGKįżfĪŲN‰sp³±_<-};ą/ˆ·qŁŽčz­å³ZĪ„¢‘Ī ²SłW IČihšõ¦©Ēw{®\[CpćåīR ō®7ā|?­j71L–Öņ§™DAYöćךˆČ‡ą[½BćQ×D‹ æd–Bۘ}Źķu‹ēŅFš®©ęšUŌņ½uĮ™0‚ęĆP»IöḱQ€ąū~•Zś[­AÕ®¤iV,ĘŖĒ ö±ĪßS³³•ō½lēV+Ќ’Jān/fyČN_(1¾¦å­ÕōńŃ Žk[QšŽ±£<–²Śžv(Ć{Pkc$š†Čš; Ę?„PŚ]_ėz™µ¾šŅŻ„‘Šó“7^cئ¢-^x˜lÜBżkWÄ>¾°FŽ@7ŖĮæ•+˜ÉźröÖ󌱶ņŁxµ \ĪGš6VčŖŻV—*2•śŻģZ„ģ§ģ¶ qo»iqėSĮ~öÄ$6į×ŖŒõŖ±¬–ĖĒX^LÖóĖ bŻ÷j‹SńīµtQŃBóŹō"‹«żŠcs4Š‘Čć» •“ÖPX:8%IĘ}Ø+KµĀÜÜ8"QĪvŸÄŌw—×v¶yü¼ćŽNkœMÜ„kg¬¶•.„o —#Ą‡ßŅ»Æ ŻkVz9¼ †w,’(`H_qō5‹Z‚‹4`Ō’Ō%éhPC{֏Ä/ŒjŽ‚×KšÄzuäļ—ƒø€qŲ:„LŽ18ļjŗģ*šż¼²Y·Ģų<ßź¼ ąŁ4x/ō;Ū…‡j(€³v ·cҾų?ž)ī~ŪuygpQ&`vŸEōŖß5K‹Ū÷»“¹H-W%·üĒÆ’®°–ęR’¹Ą^Ņę2¾[<Ŗ@· ŸjóļŹ‘…ŠXēźø=M\QÅŁ˜:6”ā ½<Ė}·øBT(č@čkÆo–Ui!‘ŽF ą}Ļ~kxĄ¾~Å»K¹#vtf`ǽV乑¤”ģć• XͱmīąXŚv朌öÅd™åĖB[ļŲ¤båsv5!.ćę`W­Ļ³`Š‹×'ŠŅ™9ķŪjsü_/qIfәP1甄06äDżŲ ŸZĖ»ŌēÓ„Ć›€Ę3œœqXĪ=@čä†āų ¤(ŖņŪųµv“®–Ļ,QĖŽgó®JŽÅE\ŻŌlī4Ė©­­ŹķĒĪŹ~R Ņšē†bŌąøÕ5›”óŃ „G ō#<םZ”éa©ugkįĶilm2=&öF›å7œ NźĆæjõčō»M.Ņ×ģ¶w©œ0į³ĪGµyŖßC×§k‹öXļ$Šb˜īĮė¶£Ō¼aį/ėQź—†ÜM4EVWrt=3ģkŠ4Ūcš8[’Œø¶XŗY«€ƒ×5óGÅ?‰÷:¾­iž³Ü“¶+xI/+ņ€95źįšĶj`ćŌūwöZ’‚vü_ųń§éž-ų“u?Āļ‡o#}¢K¤ņ¦¹Œ*†隿žš/Įo žĶžŃ|ū1|1¶½½]‹sÆHg‘–v,2yĒ„wÅtF]Ł5 x†oų–KŻ_Å3(ŽH¤żäG‚Iņņ@Øļō/|Z½¹·Õµ;Ÿ x,·8ąĢppŒøćšżkh¦fä>…šĘŽ–¶~2ŧÅ"$†u&W\ņŪ½zœś IŌ‡’ źx5߈’w2csFG(Ɍ¼k¦1čc7Šēu]"Ę?xƒÄž4½Ņ4ļĀå§¶’]’ĝIuéŪśf³<ń³ĮFšßƏ_iöÖ Ū.­5«GŲ ™0ėÖ“å0“ćNŃõ«+ZóIæž)GŁŚ9ƒ|žŽõ›Ŗx‚}gYkRā=CŲ]ebX)%@ōéłÖ‘F|¦$Ž”ā{Sįķ½™0“ ߖ“²rÜwé’ׯŒ¾1|uųEš_Ʀ”ń?Ę6÷>&…²––Ó©g ņ­×æ„vSƒoCh«€?“×üāŸĘ»ė'ĆSæ‚ü ¹ņ ‰šL[ÜvÆĻŪżJO“Ž_¢™īgbóŹłg‘żrkŅ„9Uˆ©”Ž—,`¾CžX¢› ‡Bœ7ņ«±Å)g‘ƒŗ‘‚¤\ŅŪ–7\“LĒzÖö0”ŗ²Ü6Š©$n¦ž±)v‰.9Ļ„dĢ ’@öxÕ?yĻ9į«ZŪI”ØŹß^*[°ć¢ƒ@’ńQXŒē§„v^š]Öævt½ooµ1,1P3Č$V.F¤~£žĻŸšO+‹Ė»o|aæ{O Å“Å`O7NB‘Ōōż+÷ JšßˆüšgP¹š¤ųWĮ6ĖäĮ*F±Čć >¤tÉҹ*LčŒl|¹įßųO¾6’e²ń^±rŽR™āĻļ§\~µ×ųŸįĀ\xZÓĘ^*ńŎ“ybmtŻ‚ddŽ*c¹Ń?YŌ§])u}A¶Hv¤~}ŗVõéļ\t:æĖs-¼‚źźAūČ]wmĻ9’"›™W6­ü5öo\ų–÷YŅ’e˜F¶ H•õ ŸńāęńĄ—Q¾Š¼¤Ķ„Ć.GĪU_KńėśÖŲfKZiŚ+¶§Ŗź_ėä#vPnqŌW%Øjw¾%ŗføi6Hę5.”TØļÅsČøźīAm<(²i:VŸ³s;ˆ…Į^Ÿį'„q^'×ü+šÕūā>”#Ź)gjŹ]Ļn2qP•µf‘ZŲųāOķGćæ]>‹ąk+hkˆĖ€ęŒńĻ­rŽų_©Ž\6Æ}y>”$”wŽē_”„)YBϧ|š—Y×eK X¤ś‹qó‚qīq_|3ż˜ć³¶[^‘9…¼Č{|¶ zqėŪŚ¹ē3XŲŌšļ€ęÓ5F°†`š+RM}-¢|,ŗ“LūD®±@¹!›‚O ØæBģˆ “šĀź=>H<ā’*±ķļY>"·Öt›¹,$žāČQŅŗ#%s6`Ž43ŻĄ!˜Hż2ü}qV%°æ†Żo·Żµ\ ąÖŽG9GYŌę[ki¾ŻŚvlqŹūWęA©jŖ—£xÉĘĪ+6ģK‰Õ_ųcOŌOģ­e’0 Č ¤t껿öęēŽ+ dXӎā­xĒC×$ń‚!†_)ķö4Š3·¦1ļĒéUŹD„cŪl<¬ė^ÓķÖI>Łió^>µŚų’įŻß<3gįŪ+k _E°›‰˜‘‡ ‘Rgķ)ų}­ŽxīŪĮ'ÕȒ"V;y=?Ź»wU²Ó®^VhŌ–, žŲP5-O/ńśg‰,Z÷QŃą%‹‰Xs\n™$ q RFŲ 4ĘG­kö3E¤[ŗ[ČŠ¬AI<€+ͼįųć[]E³­Äņ–Ł;‰ązŠ 9‘ś+¦üš÷Ā}.ŚÜ[č~#»ņü½=Ÿ%\ćÆaŸjČń©m Ķu ŖZĒŲ$-‘ÓØ94®c*š\”xCńŪi·Z•ÜksŽDĪįŽ€ć­yßĝf×¶öśN¶ź±FĪÉ'œ÷>¼)]™J±óˆü;ń9-¼C§C›Ø*¬r™2¬v3¶½Ę׹F½įI“{ ^ņßPŪ„ÄĄIÜgžż*…ķo”%·‡D7“F Y•AXgõĖkdŠ-Į“WŻ“ķ Ō oBÖ›©č1[_=¤’8偒õ×{”źÜĮq ¶É~†°<:o‡ŚĘƒć=^ĒS·tµ)įČĮÉĻæ½}[gā(Ć:w‡ō”š¢Fcy#Q”ō$zżiĘGG.‡Y7ÅHüąy<)­ż”M}*„ŽŁ ąØžußžĪ­¼ś½·‰Œ7īŪžĢĪ>vVsų֑±Lēž+Xi> Ö ¼V ĪS#ę9­­;/A‹]³·ņ­·\p3Š–C—C‚ų³©Śx«Āw¢žü„ם ‡i9ڧ''šā^$ֆ“įūh9.KW<’sŽ?*[Čē|#¬^kWÖś>©š”`m'”Æ·ōæ‡Éį Ü]Ü:ęŲ››Y& 2}3Ž:ńéSĶ”:Z†Šž(jČ]An„¢7E#~µ÷ßÄ/ Ūxæąä¾ †ź{ßq‰Q·ī杯óŠVWŽ„“~5|Fšfæ¤__\ź–—Pi²Ŗµ¼Ž„ÉČāw,6*ŖQ“ĮéųVŠ5б›4¶sĆ{†711’%ĻL{ן_ĄĻÅćo [CŪO $d|ˌ ēė])čecčų€0 Ļę’1M“NŠż V)¢™Š1šćŖ©ÄłćRżšt?j!īī—WŅŚF’˜Ÿ”ó€NzÕ7×¼šī9ķšųŚŽ”)·°$Æx‰Ź|©ŠVrŸ üWl|iš÷ŗBéoei, lČśÕĶYx“Ē?¾%ųkā—ĆĖēŠü_ ŻĒs ‡ŹŽ>VĻP@9éÅ4Ńv±żżžĶ?ōOŚ«ö}ųqńÓĆ×6“ŻŻŚGo©¤}aŗQµ”Ž£Hē¶ßZ÷’ųŽ]Åuä¶ŽeŗI‰q„Vv Ÿaź–Ńų—G·¾³ĪęPĖī;Šüę’‚€žĘGķ”ū#üRų1wef|ogźž¹2mÆcĖŖ†žÄ'ŅCĮ®j«š-u’#)ŸēYāļ ź:Dk¬'Łõ{[‰l/­H0Ļ`§ēÖ¼‚īÜ žwt^Ć벜ł•ĪZˆĪœƒøØ`⨢įžFó×5Ór“L"܄ąćßµ"ķ—;yĪjŠ,ģQ÷ˆ>£‘V#¦a“ 6E)+šGBxĪ$B_ĒZوļvŹ˜Ź“lB bŃŃ@ßšoŸķ¹{š/ćę”ū)üBÖ¬ķ~xŽ=ś)‘ö­¦ ƒPž2欫CżŅYĄ÷–¹ŌURī1±†r”ЌƳŖo©ĄųƒNVźÜaRe*Aģ}k䎚±Øx”Õō76|®„ŸsŌä’}JóŖųėĄ_ššųCP·±†ĪóĆŚņˆķ‹VĪėÆŻ'8ścäSöćų}š«āõ޼Yi7īmē˜Xå@p}³ŒV”„ļ&Ģfµ>¹óDŒoCŠŽ˜ŖĆbĘAåˆą Ē=†żŠ„ŠqśÓB–Q &zŠŚ‘K°e?1„EóJsۚ°ŃČĪĄqaQƝŁcøŽĀ‹—©wlŒÅ€mŽ T±Č¤ rw!Ąā±’:iĖ”×x3Ę#ųoćo |PšeŻÅ‡‰“[Ÿ{­qÕŠŪ—¹å?“§Ą_ ~Ōæµ‡ć XŲBšÄWŃ5ÉĮ@y ;Y)‰@ĄšeĶ”·Ė1åŌČ=÷æ†kļo†‘l“ŅÅÕō7sÉóFō{We:†s¦}i,į$”ŖŽ5Ō%e.1Ó„t#•«mŪøŃP,ŁĄĄĘkoP{¶·7†A>Užéõ­`ÄrJš]MĆ9Ēn®ÆVÓWRŅŽK`„AÉā¬;Gŗ},“Ąę6ŚkrĪŠKŗyĪšIėA¬d]é°Fń4Q”=Ŗ¼ńżŽ$`F¤``v ²²k[FŠ7š”ĒPp+žŗŌ$G†xdflōĻŽōŁy|šŒ×ąœ÷#ņÆ\Ć×z¦Šś½¤ÉG¾l)ĀūŠ8»žam«}šąIi(krH#•)RŹe±Ņ¼öXpf sŒśW9čŅ}ŒłZ{YUąÆńZė¼9«Įs ÖĪ&$sI2„f\[ŽE{#4Œ«ī:×Ką«k›Ÿ$ĮÆ-ąņŹ3‚væį]w8Ś:]oĆVT’ńS}Ńe$ƒ×£w‚xø%fĻ[ų}’ųż¦~8xA|eš¶÷įN¹j×O ZŽ\IØčq:t'<×1ńöIųįą>ülųWāæ hāÖś•“Æw„8ŹN‡j{0y®…EŚēĀŌń*YŒ²ŗµ9jĘŪč›jś>öōņ¹ņ·„’d‹ž;ń†üš›XŠüA®\Źńł7ó,a•T“‚2x¼«[Åæ ~&x£ą÷Ę? ĖąOˆŗ,āģēpVįHŹĖ td ©ģEe:zh}śĮ…Xµężė:_ݽÆŪ~››×:„ņ†Hä-Ēcھpż”ZóIųyo®ZY&!Ōā’źf÷I‘‚H鎱Q×S,ę«3—ųG㛽GĮ¾6Ņ.7FDšJ~š»ßGņÆnšŠ“» i#OKĖÖĆ@rvū ÕE\ų(ā¹–ēŚ?¬/µ= kŚ*łö08Ž`9ņßѽ:~•ō®™mŖk»Ó£†iķ#ˆŲŽ¢µ†ēv–ēĢžńß Ź“5¬tÆ·\-„ķØ[¦į޾ÆŌ’dŃūFü;šO‹¾ˆm¼Sų—G·yHŁ+÷2O88Ēz™Fē‰Äœa ¶ÆQū—³ō³żl~x~ߚ~£įƒ’>xÓ_ÕtļŠńöÓč×S“ÆöWV "ņA]»0Ś8Ƃlü#ā]JŹēPŅtŪCȈĻ*…9TĶyu÷²=_ ŖQ–U°öösœä­·¼īuž ń®«ö{O2$øA‰¼g<‚:×§G×rOogūēLž%}«‘ŸŖJZEń:+ ĄÓ¬pź+6b•¦8ż+ŌüEį/ā—Į üBųqhž-Š­’RĮ~÷1Ē_Ē’ÆBG‰Œ›Œ”–×*žĻ.m¼s£č³Ź’móQ‚@*~¹5oö§š¼ æh?ųn'A¤ŽŪŪj–°~fC(ĒmŹj%±¶|˜„’Oš±ē’Ķs᫈#®ß3Ōf¼6Ķ_3†Ū“t÷®y£č©TÜӑå‚q/%=1Ž»}F‡ZŅõ„—PŠÓT‰CĮ ƒż*qŌuq*1–d’śźĖ,HŹĄćÆŖ>|H‘n|Sį/xNĻQųW­i­c}¤4›Ž~`:wõ÷Æ[ ”ev®~}Å5£^ÕĻ9ų1šóğ³Å/ |LŠ5«-±ń¶$xNą ”Œķć5™ńƒā„>(üiń‡Œ~ü:’„?SæŁsq¼@}ŖńsęJQxÜß.Or <šÖTŅV?4ÅBK O3÷bćnŽī.žŖŚz³ÚO‰µ;¹õ[)«JęI<”±‘ū䇌½—ąƒŠ|GžóĒwŗäóG˜c¼ w :„Ļ ŠtõükĖ«Œ±œG(hß?„·>Ņ<#§ižŅtĖX bIĄ~`Ołüj’…|1šæĒŽ0ńƒüu CøˆĶe|„*Ż—į\Ž«Z <’ ņ«jĻž5~Ēį«d×¼ÆŲj¾øœ$É0ɳBŲf÷sŌ×Ī^<šFŸū7üDšo‰>|L±ÖõĖM·2ÉlWnÓü,ŠJž™éĘ»ZŸG,•z.…exÉ4ż ų³Ŗų‡ö×5 CĒ:Ōõ«™‚ŪH¢Ā8ĄĒNµņŠ¼=­xR¹šļŠ4÷°ŗ°’uV¦N«Iā]ī~‰įŽ;B Er­ŃĘż²(īę.Ŗ~fõ®²šÅskɲB7ndTsßC÷Ģ5K3»³ų_āMOį‰ž)hÖSź–Ś/ļu eOž+|ŸŽ߀N=y®šŠ_Gmy€öņ(’>:‚2 7Ö„U=ŗ’ŚEp®Ž‰·°Åssčž¹ę¹ kĮ6ŚŻ½Õīœm“ķKļ,˜Ÿ³B•4ō5iVz’ü0Ōåšu¹­ęYóXŽĶéZĪń|§^CRÜ-š·ˆÅ•„ö·Š<Ų”sĒF÷ļ^½W> ˜N2„āö>Fń?ĮŻ?IŽ––šeՎąčķn„—¾2FkåoŠśõĒĆĻų’Гӣ—ģRA<-ņn”ØÜƒŒŽyĒõ­*aŅW=|.g*Ŗ×?7ü+rŚž—lnÖÜ]”…:b“Źéßnņfµˆ7ŻĪ:׏Z™Ż Ž×F|Ž °k¹ī!‚XŠÜ7õÅrś…‡Ł—É—vѓ€ßJā© ž Æ©¼Ž’­xH̬½qō­ė?[KŚžHOō'޹„hz©s˵ķ [V{˜ņ zkŗÓ'H”‰–”šw‘1wēŚ“P•£ņ]²įĪ!¦T@—<ęŗ½"å<Å@U†xĻjŅnW1¼S ’„‡O-䤓ep ĒNŸēšé4鬔b@u`FzqZžv3k#üwŃm4ˆb[%d†ļ'’˜É§éVžj—:f£gpåšʾxQŽŗ`ūŸŽ§cōIńV•āÄ÷ē)†ˆžCzŹ¼ēQKp² 1‚6īć5³zaŖ“õ8ĻA<¶kŖŲF®źw:þ* jé ČłAĪ*T~”¹£cŪlõgŒF “÷ ‡”Æ„ž žŅ~%š-ĄŅ|EfśöŠĶ°H«ŗH”žæ†z×u*‡äėIĮī~”é¾*š’‹ōøn“ŲāÕ4™Ąó#ƒøtć„|{ńĮ?õɵ-%>Óዉ|Ęł‰kLöĒ„zQšgąX¼4©MŅžč؃ÄqOc…¬Dnåß=}æ{7€uū+(ĘfŲ‡ö«<¶—3·Ÿ?eēē^ĻąĶ_įu§Ā·““ķ'ÄmE¾ŠÖu>’2©ZYe(ĆÆé”ä*ŚX9wÜŻ£’?$¦r}³]ž¹aa¬ųRME! w¹·÷}1ųVlś J©t9ļMs§2Ė Źź9ōÆFšēõ]ҵ«8nu>ø®5 %nJG©Ā'#8'ø¬d¦sSNēĢæ·ģéĶēÄ‚’Ķį½RąłŅŁÉ‰į¾ōdt<śgÆZųĆW9KD$’9ÜåF7å­t2ŹŖWT"±:ĶomŸŸĻsŲ,b¶0ł DėsF‰n/”B§j6sŽ“ØCS՝t¢äśśĮ4Óą!’.˜»>āŪJ“Ų°¢Ėܑ_g„§īh<]˜Ė™×Æ-\ē)?›lźt†:ܓ¼N ÆēoįXn÷zōs.跐»{ŠōaäfPŠÓHń¦ƒpö—r呐åHd#‚:ņKoÜhAķīgk¹ˆYz;fµ1’¹aĶµæxŌKm3Ę÷ĪćÜ”Ņv9›ėlÜrG&°4ļņåŽzw­ “1lד¶•%1°1°ųć”ŪAūĒÜVę£m}>›%͹• ƒēFŲeæ­pøÜé¹ēśÆ‹5ŻjŹ;+©D ¬ˆža?÷k˜¹¼Ö.PCysrŖęG,xāŖŌ囚D#”`«c„fjöz˜¾Śo0”ÜI9Żź+¦œ³} żŲ_Đ[É0ŌüĆø3»{ļÖØĖoxv¬0b“Ćb¶0’=ń†®ō%!øõyØz)ĒAXRéšf›>öŽ?³‘ón_»A‘~Ł †Pö§nī8ō«:¦«Ø\İB±–SƎߍ”Īm+V$y—*і,8ķéW`Ņ )•?~®vwéśÖSÜŠō}%PØ2GŒ~SŠ·¦+Æ»±ylÅįdĢ. r=ńéP`Ļ%»–!$¤üŖÄžjĪ”„¬ĶĮ”õB†·‹ŠEK;…·…öI!Ÿ8”=ėgeœ é÷‹jŽ` =éęzž ŒĻ RĘųb^ąĪ·ßco5ך ‹œ \īŅ‚g°Ķ+[¹Ōu -ē`ällōö"»94ɶēi@qŅ“ŲÄåīō[ˆ·›pŹēĶQmłŅJ²óńҰ:*Ón›Jæ‚_²Ü'ČmSŪ"ŗØ¼ö-ź·3ŻXæĶ¼`irėsh£[Ņ-b¤3Éå†Ė‚?Ju®¦É˜ÖÉĢ Ęć9¦Zv:kk #K¹±ŠĀ8Ņ"8aŸJõ;Ÿ Ųkvv7įēx !ˆEł7ĘkÄŁČ_|_{ ZßĀ—Vń©SqœĒčHkĶüg⤶r©%ȆC• ü;Vn=ŸSĀŗŻ­äź.ĖĮ‡ōėĻZģ5M> ršĪ±ģ Ü`õ÷«ZV:H<;kk Sīą’ }ŚĮ¼ŅģFį$a_w_AZūDäu-N¶e¾XU_–ÜŽ’8¬fšŹļ(pŖ=)9…©t…’)¾öGERӜÄ5,Ą dņsPe4[7€–,ģJēnmŅi啁'#Ž“M#2ż½š wfyČæŹGұ–ąG?”€»„TIÜ~GQc‘Œ’/˜Ėü'µl¶•X_j:± r9ZĀr/C¶‰tåĶ{§oÜ¢0TķĒæņ„Š“Ø×[‰U q4„7Č0>ž•ĮZf”ŃčRųe£I'9Ō1ęĪqķéW }3ū1ZÄØ™Å,`cęć֑źŃzXź“­3÷є2&æ5×’mėzM„Ė[^Ÿ²°Td\‚žžÕĒģīĪčĖ©‡ā?Š^Ņģ`²¼·ÓžfRžbɗ$vžUńĻÅĻ‹V~2»… ÓbÓōŪKePģrp;Ÿzō0ųp•d3öwż›>4žÖŚ«č?¼)6œdŁs­ß@ŃYŪ&y"CŌć< žŽ’gų'_ģ×ū&ŁųŸMoŽ-āI˜¾dvN1…9Ļ''§JōłNJ“>–—Ā~3ų•¦ų‡ĒŚō>šd^Ū÷nqŠ‘žĀŗµńæŒҬ£ŗˆ’īģ?Zóļx‹Xń…ĆĶØ4Ŗ6ƍßguī§ėŽ=«F¬ŒĻ5ńv­Ŗ|AŌīÅqŗšī~Ó~źLwcŃė>*¶ų_ą}þ Óuš“2,VūbčåĘ?xÜuę“LV3uų}t‰N‹ÄšQ"lr }kČ|SāŸĒąøüUć?…m¬åÜb•ĄŽ˜ēåĻ#Æć]4éų»ūU’ĮIķ4”¾š_Ą5ŌŁžs—ęlFąu#æ|eć?xŚņ}gÅÅī©v䝳Éęlē$)ÆRœlŒœŽIUѕJēvzÖzpĒĶä‘Čō­nsĪwapĮć@ųÉł»ŌbāHįʆfä¶ŃŅŖ-#–sml$fó õjHˆ’P9ĘI=éIÜꔙv+o0ægõfŅŚO=s½Bī$Š–…tŚV–óÜGĄ^Vē…åEzT:£A%¼ŃŻ·Ė;Éč8ļQ3¢1?B?eæų'ÄŽ‹7‰~!j7? ü jD„ęµ;ļ—ø‘śó_؞ųš'ąv—q¤ü+šķæ‰učÉYµ SꉱŁ[ńė\ӗDt_¢=…o< „i¶śžÆāyuOŹŖ·TńķHńŠ&łćҰ'ńo~%ģšĘ±Øæ„ü‡p“P@œvŻ·§óėĶeĖŌŚ6f–±'€“m,¼õų夙‡Ķ 4Ö®5G„KÆĢ·¶’1eG{žłźjd‹0c›Äzꧤx~ĖS‡ĀŽv>|“6#`?‡ŪŽ’Jԗƾš;k~šö‘¢ų»V˜Ŗ„łŒī śÖ-_WÓ.›KƒPńS°µ»RĀ(ä Uz}k"Ń®µ(“įČ-v‘¶2ŖܓXÜ®VyLj%MęA™5{ų›k[ĒóüߝsŚ•ĶƒŁO«ų·Y·šķˆQ+ŪÉņøNŠ:žuꐉó_æk$X—Bų;§›¼—½cĖ`rĒÓæJł¶ĖĆž&ń&¬5OMā=rźRĪżµėōė9Lč„”<-ą[[ qę— ód(~ėśĮ_4»ŃŌ`’Õ ä¢}Śē”®]|𦁒 ’TŸQšÅŻĒ—“·zŲ>øÆØ“ŸĒ}R\†šr¹cźqĪk)Fā1/.-cÖ./£‡±Šś~5Üé¾"潓ņ`iž!Ōc€+=€m°\\Ž\$ŒÜ.z ü³–ęņo:Fž¹nkZs€×5ļųy­Zźüšę0Ɛ ü2+“Ōügnņ ty®b€IČ'¾jŻLĶ@āµ]fs%“‰³™dĮP Ē}«Š¬ü:']2ņX%F᳜uģj$õ%ĘĒ Į,šMÄpĖkśK˜öłg•<’*ŃÕl’°—J¹-o*J7„rœžü*S³3žĒŅžÕō6Ń!’{Ūd—hłTsŸCY ½°‰ ÅÓģøÜĻž•Ó 3ęļj0^Ėqö&Gf'zW„iZu¶©c©ß\›vĪķņ¤P+q8ō:mr{k›„^)”<$‹ŠŠĒ暎žV #ø /L*ŗpŚ,sÅ»HĄ„tŁšŪŹŒ“ųśÕ&%ę‡qc–,-§ĮņIV]¾¹·–(ćvąīī=k9 h5ÖęĻL°ƒV““ūV3yyÉöÆmŅģu¤:ärGi&0d$±•ōĒ“&ΓĖ:uŒQ®“j¶öµģnČ$šóżk]žÅø†}2ā ™|Ė"giĒ8łÕ©ŅlǶų·yā wAŅc²‡D»W+$±ÄĒn½ ė¬=}é4n‰āšEæˆü(šu¤Ņ[ė®šcłÄōśvÆ6ŽļĀ:5õ·öéó­į—¢}õ`E] GŚ—~"ųuŖxz;“iWVjŹ®æ¼Iv÷?Zį?gķžω5ƈ·SJ֖¬f–M™1/8ĄõĮ«Œ{—QųūAiæhÖ/nټ2ÖŃżŁrĘE’ ŖQxŃ5jvÓ[ŹV»\! ĄŽĘœaё(5ψ5x¢im’x×nŲV‘é—&9µ‹ĒŽödłc=Ū®3łÕr£’TŁĄüKƒÄ>±µ¹šĄ’Ü]8Vcņ½öŽē8ÆIš7|Qƈn¼Lņjz•ˆ “ƒ,±vąūcŠžUԘÜvƒ®ßkzŒŅĒĀÄ‘ēŠÖUŅÆ.ļķ”WvųwW<óŠ`VnĒLQĮų£Å:„¾'Ń,.a?ŁŃ(‰ŹÆŽøžµķ1čč4˜.ō1o=Ė'Ļ'tcÜR][ƒģ” Ӕ\ņ Ą†ś„垢ŗ›kpҰPŒABsœlSB·DzÆāI¾xOG_^HśUżĮ‚1-‡żæ•yf¹įrŹH¼Gqo%LJ.#i ”.JóÓµn½Ī’Fšķ¶½ µŸ˜šO°3ņķm,a%”ÅišĪ©ßŁŚjBhlfu(dį¾;ų/XšŽR-9ęÖ¼!Ķew#ŒćęAźE¤jbų#M“-Ąv™÷‰8ō‡å^„㯊>#Ō…¶“§Ūź©³łÜ•Cާ=ŖōŲØDę5m~]" mmmnc¼Åw$w8ƽc¹¹ą~ĻÄöĒūVĶVÖ`JÜGƒŹžę”»&łt>ż”uŻ'Ä-®iźĀÖš>ģ,9ćóÆĶ=BÖ2čÄ lä’9üė› )[ŽÜ‹™1 mp[ŽßZśGö{ń²h>,·ŅßQ–;+¶*Ųb@ĮÉ\óÅzwV%Ė[§Z2Ky}FE+/'§”ÆQ›C“G…„t%@Ėd*Ā¢7§3Į~8\ė·^tŃ.f†ö Źõd=WŪæē_§ƒÆµ}ü]l­woŪdi,äšv·¶+ŽÉ\ėC.ž cĮŗ·‡µŻ>ŪgŽę9£’4u•'Ҿˆų“–>&Ņ“/Š6.­m{ Šé#L(”0O@?śõ¬g ÜĻ׏ų Ēķ€ß ~+jß²ÄH§…wS€{ÅlŽqČ֎W'oqėSm0“e†äėõ§øv±Ų]O”¦oƒI„ ņÅd%}æ¼j€ó73¼kŁĄžGL75ģ&Ž]ńČĄĘFdWķ_üGöŃńoģŻń¹~ źšå½Ļ†u©ŽēƑ^ńHd·ßü†Hķ‘BGm6tžšŅęĘfÓg‘“ YWҁpE«°HA‡wōÆI½²ū]“‡;žäČGzä©©Ś<¦XĶcd쮣|YäcŠWóO’÷żˆÓĒžŃi’BöRĪbŅüQ‡tQÜ("Śé˜sČņ‰čr^M˜™ücÉõ³Ļ¤jé³TŒS 9ĒÜSąŃ”„ •UtW Ć=óYŌv1hõ› N Ķ5VWĶ¹e<üžUīV‘įĻxn; ^ĢµŽ ‰)=0>µĖ)ŪCH#‡“ų9ogaā »»˜bøˆ<– /¾xļÓ&°ü-ć‡šķż›\źRĀčĮ“ē+½TüĆŲWU*šŲ&~¢Yźšn¹”č ÓäB. įNB·Næ†kj ėiag…‚Ȥ c“ė]Ōö8Ŗ"¢¬ĒS¶øšOōumĒŽµčæŪšœk—HńŌVŌ÷9Īb{+€ńūĘü­›rl܅ę\05Ø7VPOze`Bp«h‘Ék$)„uRrzš ŒO7“R¾†õķG—4›€RŁ“ҽ~ēĮœ¶6=Ģvdį™ÜepFp(56õ ŲĒ£Ē(n]kõÆā¼‘Æn%ؐDZ¹+Š$z…¦“ó­Ū,aQƒ Ž }:ŗś7…5u¶·“ŠI"ņY6`#z;^Z­­ūÅ1ī,8ć9éW"B>ląćņ Ž[°‡lgÜBš3]Ü#ĒdĶ">ī ćƒLŁO¹ˆ\$ź7Ū„mĻ9‚ÄĻ `zdR:8’ķūØ'8;Ā’/\ž5-½œņź±\*¶Ē8<ÖR{CŅļfl”Š4ڧ#Ų®˜ž!šų·»¼X„XÉBN6LTß sŸ?jśNÆ¢ļGIo ‘—†2AėŠm°žęĖūKO;”Āąć,)½ Sg©i² ‚Ņ{¹–XÄŗkĻÖżœ¼YįmoX±Š4Ūe—UE!ŚNåČĮēŠżAńī³ā½oį:xXK OĀöR„ģH¶ąMŽp}Oņ„N'™˜ĘŽOiöZ’õ[*ĒŖėŽ øÓ˜³ó/ø–gƒž* –¼Ó[»t}ōŲÖųšWą'ķ}ńÄŗ–æ¾ x?ų-Ž­¤N#m»ÉF`ĒiSĄ#’Æ_?’ĮC’ei¾$ü>ńö©ńOĮ–æĘņ¼)ć+P‰vˆĮ<‰Āē' ńóū ēØĆiq6;šPž&mŌ§Ź¢Žü­'ošlžvü1.¬—מ×ģ_OńĖY^[–ÜRPqŪ±ė_DĆšKÅæ>ü`š z<©qØųvsfÓGņµŹŒ 9éõ÷® „cū;>ĢØĖ.sŒ·Ųü¾ż5H.µ {Ą"‚+-zęŬå#DŃŒ ŸužUō†¼3¬|-ųc5ŌM6š’cnW¦¦üéyŸ™`±|ŹĒŃß¾%j>ų °Ū Ō7Ē©[ŸŗŠGr+ōį’‹tæķ §jŃ=ˆ9V<+Ó"®2=źrŠļ~-x?ĮŸ¼+gk«h–óŻ©m·®„zķėŚ¾pųušćĘæ üC µż®”šžxݤ2dIn㐣=sŽÕÕs¾Ž5Ę,żŸż›b}Cāē„4‰~+×ī¼£^Gēi¶Öń,“̙Ǚ n¼tÆ»ž ~Ļ?æfÆų³Ä¶¾8‘ü]®ĒwCSŌ"Œ2®1²ŽN:óč:šßŁw?|fńj¶3W%ĮĒ܃³zݵŗ]’z|·±üØ~ß>3Š~7~Ü?µ¬žÄE¾& YOÓÆćŚø«ÓGöw„ŽXL‡ B¢“”#uٵwó×SÉæiƆš¤|]¦|@“°»·ŠŽeY¦U>TŹŲąćŒ’…X¶Ō-ļ×ūVĘo³Ū7Ī9ūŖk‚t×ØcT£©źž2ų}ćMMŃģ'I.ʹČųĘ:å5’ŁĆćŸģ­®ā—s§ŚjŠVĻT“Śź ·% ģŽĒšÉŠgŸŒĶšŌźB…Y%*—å]ķ«<Ž ’·­ĒČćÖ‡čŠ<ū/ü`ŌuOŠßž)hžń|ÖI<śī-”–`ø<6'8Ļ<ēšś›ö<‹ąķIš3ā‡Ą’Ś]“Ėį똤ӵh.R›Ą°š98ĆzšC`ŌŹ”e=“׹~1Ęģm<-ISźCUżėkošŠęÆ~k ¼Æjß>9|5ų…¢xqY„{iĆO©Z)Ϙv±į3ņääƒĻJłOĒ?µv‡į½9Æ|8ś†±ā¼ "X*T׋^‡.„`«N¤§Y=×o#į_žŲæ.Æ­“ŻwXŌ¼1įū§;!;æxĒ·5čŽ žÕńE³Ī%‚ūQxĢ­&³/æ­y•%cé0”ŃŲiZ¦į)ī-¼Mp–Nēr÷‹Ą*/ź~ųÆkØIemr×¶Ø,‡ ŲŸ„•ō>»$Ä:ˆVŁg͚ŽŸc[4k© Æz±£éÓj¶æcBķR¹>µßB'õ&_Œö‘ē[3īĻŁļć–·š×Ą’~ŽxĆĘf½¦= ™H„”P$ļ 1ś×璊4/| ƒJµń®…Øéz ØŪP–"#<zŒ}«»ŁŻ$ueøKWĶi˧nT×ājéŗ”щ ™1Ųę¶L$ą|Üf¹jĘĒҽQ±dŽ_ x›Ć¾$°R·Ō żÓØżå¼Ė÷HnŻNq_(Yü)ŌĒZ.”ˆ¢ÓōčÆb•§t&T£ĆÆTρęwgōūžŠææfxē\ńF£7Šā¾Ņ#Ó ø³Q$qņ[,AĖ}æü¬ų”Ņjæ¼[āĹ{«;ė¹ø`†F(öSŠõ~²½Š§Ł·÷Ūü„É8CCˆ«ęµ%ū©Ó„"ŗ¦›nżźgXĪč€ćZč­d™¼²Y˜ŽF;V)Ÿ«\ģģtÉļ~Ē4­äĆ$ĖóŠdĻę+·ńĒĆĻü0×.<+ć=>+;—‹ķVSÅ&čļ-Éł]OóҶ8kć! Ŗmźöł}ØxBÓ]Š.-g_:åIć«ä…|ÅāHR{4bQ³ü \µt4…{ž]ą=J÷NŌļtĮ3³yžT¹9šöG…µ)Ķ0Aƒ‘Ō}k•OSŸRńhö/ Ēk,Ķ©j×ŁŁ āIqŅ©źæ4'ø¼Ņ4ۘ^õ>RrŃ[ūK#äėĘR‘ņ'şĻfĀÕŅe‘Ź;%xŤöt»Ÿ›×J§”‚¢zŒ+ ¼iŖ8ēµjż¤[FĄ7n}ė‘ŌŌśJTō!·•nŽ(‹¦÷pæ7lšń_ųJõ ć8—J×'Óõ._³OöyŒxBzäuė]”äsbāœyeŖ?yī’ÓHųEįÜī=ėµżŸVm |µ­kxŹ‹ęīćiķ\U§ŠŠWF¤S 1–EķQ’iZŁź:Lz“ˆ¶’ŽC ÜŪwĄc?(n]Mtż°< ąok_³Æ“Ć6ķįMGPM>ų<œ< É'”ē®kęڃöu_ŁļĘ-÷…®/5/„¾'CåC#ł‹§Üv«LmG§źzéé¹óXŚ—ŃšŽ»’„/åšķį[kš9ķ‹d‚ ņ·A’ׯŽŲ—ö¦·Ń<Ÿ•ėP©cį1”Ś?Iō«ŪO">œ£i/ʦ>sšųgöÅųV~»éÓj0ÜŚjü—ĒīɆ_ÄžµŻ/z"Ė'ÉS‘Ÿ—šŻ¶›ā;mźģø˜Œō³Ēó•}§|Ѿ!ü<ńV”cʛń/H2=“ĮČ ēk/~‡óÆ&„=OÆĆ„±ć~¼:”épˆfˆ“.¤œŌėõMKŸl­gŹøéƒõ¬„IńŠčr·zU‹äeŻ1€¤ Wuąo*Žīņ4µK¼Įp'½qŌ¤}N~ŪƖN¢8XF1ެÜųE“2Ē8ŻÓo­yó‚EF£G-y¦^ĀóAꧦJ|ņ_‚Īåd,£jūÖ¶Õ”F”"y±ˆŪr6ĘēīÖ¶ƒ©Ć¢<łL*8ĆqŸzŽš9øŚm޽ez N6†SÓ …8_AĘČßäĶl™Å‹wFw|-„ųĆCÓÆE“oŖXČe27J§Œ~5óģ:U߇5¹ķcIˆuČągµtSZšIFw=g@¼šÖ`ļØĒÆR‹Äo©Ą¶:„‘“y˜~5\Ģį£5sGKUä…HšŻ••ƒrÆ?žŅ×A×ī­cŗŽąpą(ĘØ>ƒ #ŃtkøŻWaĮ#&½7Jæū&V-ėĪOzŚ”µ;ŸsŲžüjń/…µuMlŚVą,ž}łāæ@­¼KįÆčc«$*nb8)‚„±Ē$×§J]Ģ8Ć!ę©ķéīĻ–ü; ėV³ø³†fQøējöķŚ nt#ŠrEt\üĖ„iźDĘƧ\IcožÕFüŹkŽń5- XoŽŪķž ČŠ<6-ź|»ńšČxŚ{~ņG čP:pPūzWʐiŗžā[ G=ģa¶”¹Vėļ~ŸsTŠż7/ĀFxXĆłO„üScc [$ßiSKkpņÉń`dķõ«š‰4=[ĀÖZ†šŅKcq•1@īAü*Ā⬹b­Šå]²·’KhķŻ#ĒQ^Éą|?Öü9y¬kŻłÕ¦­¢˜Ē䯏§Ņ“åMź(b_Cówö¢½šÓxŚĆĮž¼›R±üÉd~vČ;޼·NšÄB ŠĻ( öļ\Õ ‘źŠ©}ĪŚĻL¹µ,W%чĢjōMĶmąß"äõõ­štÆ4šń;žĪČq8»ŚJ /ń=#ų“zģ¬ūI^:Wca¤ŪÜ»%ć’Ķ‘’×öTā–Ēł9_VŪÜōÆųLŃ`»ŠŅßĶ’\–v9$śž•ęž(Ó|Dŗ¹I,Å„Æū¹gĖś×TO6hjšv†nķn–Õ”([øōÆ#½ń’X?6GJ%- £±šļķ=Æ\kšīq=ŻŹ™cB~Pq€>kć۟jŅŗ$Į¾ū'ę±’čmyŻĘ¹7„u[Ų$“3³”h?1īz§‡o¼Wą»rĘQmq‚c…²¾w’Oι=K<ÓF·J–SGŒųū§ųMRÖ#¹“Ō.€ĘsøŽFhP±GŠŪ±“€[‰óżš:{«Øxyõ+Č6\ˆO©<6}kh.§‘©ü:Öt½;P×4ŁŚy"p˜\„`z¶ĻZ©įųģu8#7Žęõ9Ę:b“tšģcWžśŅśh¦·}ŽłFēĮČēŅ»ßx›HžŃ‚ŽGD¹–=īŖ>]Žßēփ«(ż¶ĪŚŽI„f!°įؓQ‰­Ż£¹‰“ūŻh`“+ŪŽIm4rż¦)•¹uŽ«6”«Ūß$J钌ąõŻŲŠē”­¹®čö _Į³¾™į«č5ū[ņĻ,(rÉßi=°kfīŽžźĒlL‘ø?0łł*WŠÄņ %ńˆµ.Ś”)™›āŽ$>"ŃüW“šYĆ JVXƒ’Ä’³[ĆbzķµßīD’!\ó“ŗ+•½IÖżõee%vŒžqéV2 Vø–Y–I›9Ļ„M,w ¹å@ēž„Pg7ŠÉŖÓ$FpqņńĶz†…« LmĘćÅg9t35ĪŁQŻā c W=ØO0GŲ¹÷ā³l¤Œė¹umNźĶ—*®³g)Šöo¶ėo }$‹ĖøćTX `0Ļ"°6H”&™ŠŽ[ŲŚĮƒ$`åTś{Ö¼×>2Ū,p˜»Tä·­`EāÆź:MšźöØ÷É4bX°F}:óļ üFÖ<#ē„Ķ…åՓŹx|ŻĒ€ąœR*6ź{Ž« h3ŚŚų’Ź ­ī$Œ²¾2yĮ5󒏬§ÖƒiŚ=Š!GŽÅL‹R8­3N 8Bʱ)ĄĒš×“é b–V¬”ŒŖ ¹‚}jĀo”%ÕėČĒČ-S€zq^y«Č·oęHņūę®2¹™…}<³±PĢĖŠ)5ĮܽėO"*:"ó×Ŗ­„ŁĮsęµåĮB Ž>• ¶É ’¤,vē=h1–ä¶6‘ŻM,V<ž[œuę‡4s™ «[?š#š n¶ģ$Š“…@\•Ńi¶D7sB»s1śÖNföFāI§Ćę„„°–@§vŃĪk?O³¹Õ•e‚)a$ä)'š®:µlk\õ xVęęčÜjښ¦ČYcćČĻlžUsNŅøƒĖ3*¾*½žµēU©seE#¢¶óŒķ.C¢īśc’ÕT4‹ibŗ¹˜žYefbü«õü«źo²ļÅŃxbɚt°—+Ÿ›“甯šüUń–ūY“R1Ć%¬eY”mVÕGŅ·§HÕTčx—‡ōĻųó\µšē“-GŞ&|m­Õ™†ćŽ}?żż–æą—¾ѧӞ+žŲš—ön˜Į%·šŚ?ʲ)3×ÓŁĶʬf÷?l¾]ų{Ęŗ]’Ć߆ŗ,’>D†uxšAt#Ļ­?ĀŽšĮ‹ūČ| ž2ńž½$¤ĶØ^9˜Ķ“ĪįĪ:śÓŒīIŌź?µo귟üMćū›}80ž=%L‘ŽĆ·Zś—įw…ÕĆś“Ń«x•Öį”p’¹ą‚? õö÷­įgG«Ļj-īχē{ż>)ŒcĢź¼ž½y–«kŚF½ā gQÓo|;°ōł”‚Œ:ĄäjéP2q8?ųÓVń ²j>±°±’vŹģB/Øļ\N‘¬Ēm}gį}OYF×YwF§Ÿ=ż=iM1"ńv‘smp.õ»£¤jqa ³ĪEŹž2@ōÅpš¶¹ń+Äŗ=ē†Õ¬tM7ó<÷ŒĀC;?.iŅŽ¢’]ĻoŚ7ööųū9Ē{aįķBĆĒ“żómƒ€]ŗ1_Ļ’Ē?ŚæāÆĒ½jśóÄŚ½Ķ‡‡å”±†ą„EĪvąvÆj-51œ‘órČb‚4bRĢ8隯¼LŒūž_ÖŗyT ·-ņūŒšéõ¢QøżóļAĶ9tLHŲžj–Üy¾M¼õõ å©!bāl¬L[žõ„{‚•F<ö pge¤hĘņQ–Yˆ¾Ž‚½w@š&nĘ[ ×<+ŚėŽ”ŽŖq>–ų)ū6üIųóÆü4šĖŚ€ŹgÕnā+ ē–¹ÆŲ߄_±ÆĄŁŽź ¼wyÅ/ŠÓŠĮ ‡ŽÕĄąķ‚?ĘøjÖ7P>ÄŌ¼ż[ĆŚ—ü%ž"ŸĮæd^ŪOņ‚‡?ÜŲ8¹ē­x—‡×Qń—²čVWpi«ņK{³j²śśćė\ŹW-R&±×¼ šćFÖį×4OųNoīŠ]Ź{lO÷pŹ8®OJÕ®ŪÄßź)xbx„ąņ$üŖ”™¼iŁŲźoēšÖ·®\i>“ø” †+‘Ļ99V<^[­é©aŖ­Ēˆ.$ŗX1Ūäa_Ÿń„)÷+—]6Õļ¼AāMZDµ±]'ĆéņĘĮ‰Ą­k@“}:×M°ŗ½o˜Ģs½}ų5Œ„Ų³9;ūä–G:ÄŒ¬[#˜¬čdÖõŌŗ‡Gō-4Śņ‰8QŌo׌ Ł#Ć&js^x‹Z¹¹µy<Čķā]8ū¾ć­dān¢v^ųaåĖmVž\¬»~@lūWŲ ž ė·6-§Ł¬°¦•¹„c%rī}[Ŗüµš®œWĖ“»ø6ōł†qŲśÖƒ¼}<[ …z¦xČō>õŸ³¹;[« |?§ÜŻj/ǃÕsŒWĻ7ō»»‹k6–āū^š¦Čw{ׄ¾!Ūkó\G™˜HĪB©ļüėčm7Ę>²k‹.=L`sl÷„ģŠWāßjŁ^¦&Ÿ–Ė#ÆŻöé\ö©ć]rĪ ·µ+名“t#æiĀ—R¬x-Śź~)‰ŲĘĖrą²:öŖŚ?üU @gŌÕœÉׯĘh’°eŃō.('øŽ%P2ćė^Ńgā=:}m:m>ŲĘF™ä#ø={R2Øģp²Ćwpg–ŚŚFesŠĒ°»ŗŗ™W…[ĖqœZӃ9\»ÕµģʦWV@C&:)¬ķUu››•“ŗœż†UåFyŪ cR0ļ<5ies׌naŒµøwõ® ī n[¹#6V×V›öœ6NÓ܌UøŠēo¢hö±[,A*ÕžļŅ ń‰ØÜYI6—#Ćrø ć ć±ˆęDކōéšMŖÉ źżg—Ŗ}³[ģÖ·r“K;%Ā ąwĶ(篼1ŗāÖFg#hüź…óKi ĖgaĒN“ ēāoĆū];ÄŌõ›]8¼Č:6’Hł‡Öŗ½öt‚[9ķ‰ŒüØW”{jl„¾US‚I<łŠśOĆśÕ½­¢ŚŽŪ°Ÿ9;ŗŸ”©”¬YÜ[xĘŹ[k[ī"M®ĮUĒ#ŲU=rćNŌÆ¬•ä3]£Üō*O§ēR„©ĻV:œę¹§ź¶š”–W÷†÷O,‘«|Ā6Ē8ż?*ßŅīa¶øeøƒĪ…æÖ!į\zNFżžÆ’ŚĆ œqG÷TEŽŁ"¹ėķ6ßķWšĢJ–ײ„‚Ÿõ˜éųņjJM˜žŌüE|ŗĪū‰ę¶Ä©“×Ö½7OńH±æ·‚hƟ#ÖėųP‰’ģių³L]oZ†Ź‰'…ČÜÅ6†x®æĀ׌ ń¶–š“¼q¬BDP~™8­ā¬(ŹīČōOŚįö›ā?ųoQ°¹°Ķ…ĆČŠ1\3ō_”LW[.…įx¾9“5n,’OĢQĮĮ+ĒÅN×5OCóśĆĘwZSĶadóź7p0F™Ó`'=½}]šŪPŌµė ÆØķ,ń†}ŖdĘŃĒjĀj^.[”x‹€ä?<7Żż+Ł>/|S}į’…4‹dM§<‡Ģ·ZS÷Éėҳq¹¬bxĮėéµ-b ÆÜy–óN¬+—hÉõ=ń_Mü`°šg€$H“@©¦Id’7ł÷0ē`sL$€õXķ§ńVœ©©'‘rž\ŽłĀœń·ėšļž#ü:_†—–1O©¾”g{Im#pčAéWŹbåÜÉšģöēÄV{smĀ„ĻQüėźˆß ķž(hzˆ$Ō4µ·Cµ—$Œ‚wĢT“k 3į×Əų Ņ -F6ŗ»QäĘó· O½zži:öŒļ¤ż£MÓäŚL‘°![Üö©r±­ŽĄ/-"ŌV÷Z“]¹¶RņŒmĪ˜Ø-<_Ŗ|;ų‘„hŗEٵYёŃĒĖ0ī£ŌśŠ\Ėaœ‡Ē€š÷Ć±Õž@¶··,ĆP¶ ¹™Ąį׊ņzWå÷ğ‡'š&¾|=āėc¬2ŠšÉž É;ąyßö ń“œĀ9<|¢ÆXNtė«K=­ģļ"}ČĢ8Ēz郊‡Lż]ųāŲüSįmPŸQ¶–ōHmŹDłŲAėō5öψ£ūnƒ$uö©1“ž3õ¬k»}b—1½©Q$O•aźó'Ä- TųmŖjE»Ūxvā5½²w'Qšņń/SŠĆØ­Ļžü_­]fŚiW÷k™ņŹc€zŠō_€õ–§o­ü+ÕÄ'HŌ”2ZyģXC äąvĻO|ÕŃ×FkʬZÖoõ_‡õ®»į™eŠüaįūŲÆtėČ£ŪåģląC“Šžęc_ŚNż±æf?…’,ī¬ÄbŃ,õĖxXµ¹Q‚$G š¼+Ŗ7åŌ®d}ŸįĶRmžŹö7d’6®q‘_^Ė{eā 5;@Ņ&3Žź{ŠŹHĘ[žß·ĒģѤ~Ö?³Äσš¢Eż¬Ö‡Qšå̊ °Ō"”£FN:v/ėĻłŹxćFÕ4+ĶcHÖ¬®¬ Šå/­aó'Yī˜ŹøjĄŚč|Wū@|.ŌõŻ6×ZšĪļųN“2×ZfÉ }¦,åā'éĻ’Ŗ¾ńVŸ¢xšöā-BĘćCŅõ[_³ź±ķĆ[\ķūį‡ężOjä4?–ų(7ģ’}š×ĘrųÆKÓīģāóü­KĪ8s…`+ó®KiÉd}ŖNIk®–ĒDc—&`ŠAVĮÉéLņ6#±a°{WaČÉŚķı¹äd†õĶUY¤+#8'µT{“avƒ!ē§zø¶kä,Žbœc46i„%†0Į˜sģAė>Ię,Xœ„I±S°!btĪ:Vż…ÖÆ„ź~דۨćÖ4Ū“¾µ˜9WŽD9#·"«C¦ŸŽ§ügö«“ö•żœ“imum6OŚnø"›ŁÆbš œ²«¹Gr+öėþ(²Öt}+U!Å„šŚū†<¹G۟ēXÕZv;+[Č-¼Ū&Q%ä#vR¾¢¹ˆ^š§Åų»įæ‹lV’Ā~!°›OŗŒØm”Ō®įžA±¼łG[Ģ›Æü/ö\ń7ģ¹ńóĘÖķ-įkHŁN`Œķš­ī€ž‘1Ļ®kį­ĀX×ģ²ü²¹jtŌ™3Oƍq£ėWڤeŁĮ\Æ qüėķ…ž ń/‹/-›AÓ&æ†Ųy— |”Į<R rN%&®{WÅ’‡šv³įi§š¬s[xšŽ“ģęm¢B8õ?ZųGIų/ń;^³Q›Ć󾚁ĢóÜŠ3ózqަœµŌrĻ¬¾ųģķWFŌ£illĄDmÉObkč»˜„žEŒ¹Ź×«Jw8źÄźå’ ¬ˆA±Ōm÷5…¢]ReVżįcžzW]3™«hY¹{¹Š4ŽŅ89żŚžÓWøŅ)7»(Śp+AvZuń»“÷ā[yFBćīÓu™SL²IjĖ»nAź(4ƒčs«`“Om6Ł77;Hėļ]ł}OY³‡M·½ŚcqžWރC¬ūMy„‘Ąä°ĪźńVŅŽg»šŌ"Ė+}£©  öšŒšiėE"ŗN€’zw†®/oŌĒpĮķ%=s‚¦€±ē¾;šüˆ¦²“¼Žö”Õ»s\Äi;’#Mʃx픵 i²¾¢“;7’§ øļ^§Ŗ4ŃŪĘ 6Ņ8ćµę<³]¼KkØķČo1Ō° tś×K Ē”måM">å9Ļsō؛'œŃŸĆśrŽźŻdz`c‰|?d~×n7½w-Y;=»Nšń?‡HŅļ­“żqTJ¦~V_öqė\÷ōżOCŠéĀŠź<»&kž©×E7$‘äž.ńŸ…|7āvž_*Œ¤hA>d„Œ/ē„|­»/µ ˆķ/&;ƒtĖc sé^mUŲ’Q19—¹Õ«šN]J Ä·y(ś€Łąē#Śæy 8±ŌmČWÄ2FĖėņŅ„ztqmµsāķJŹŽņŚęĘŅÜb'pF1“ƒĪ*„öš†—ć½&÷E“ģڬ^cĀłåH‘šŽ1±ģūNhJ/fk|;ų—āĻ…>;ń&µcv_KÕ$ķ+v9órs» €kś*ų āß |\ųG¤ųGÅŚkZ”VQĒcwóā?rAžqŽź1YNó?Ņ+†T01ĶpŹŅƒ5»j“ł6—§”üė’Į]?a]öaųƒąĻŚÓąö™yašĖXŌ¢Ó¼_¦Ē—ŠĀč’Ŗø\œ…pĄ®:øÆÓ¾%j¾»ń¾ŸŖ‹iŚdV7 ¤sĒLcŒWZ Hö¼0ā¹ē *MŽP|’õV·žJÓõgć÷ķĶšWÄ|{iūEü8·Y|ā ±=Åŗ’Č>ń¾ün£¢±ńĻ„C |v¼ųƒ¦č7z»¬ņÄ$”޵HXūzqv>‘šµŒw>$µ“cž,§©##šģ ÷Š|7=ŻŽŠ.ä©-Öڱę±ö9$×¼ģ}ū ų—āwķńzļįg†4GŌē:y¼ø_¹’ĘłY°É’ ž…£żŸ?g/Ł£Į’š²¾;ŽiŗžÆm \üгą~īŽß«¾xĻæ8ė^•~1āß×ĖźŅŹ²ķq¶ņ»²ł·t½=‚tŚæć÷`øšēĆ vēį×‚Śśc¢X-¬bębĒĖ„<ØĮĪ+ņƒöžńŸ‰tkZ—_×|EqćˆK-ÅÅŻōŽĢłė’HėéZĪvGŽpw‡X,¶rÄĘ ×ŸÅ'«o®Æk½]Ķi¼CŖ[Zė°[I0”N·ˆ[‰‰;‰o\‘\ļߌ~<ųgo£[ɦC®ųwI¹7 Ÿ•Ņ.® £żkĪ©RēźT0ņ½Ļߌ×ā/€ümūųsĮ¶zv¬§Š¬­ļ쮫$ė×Ū‚Ī×P»“ŌV[›‰†ötUeIčpÄÕ9Ļ Ē[Z¦ŽŒ¹—ł}év_ažįnē&|°W’|@š}•ŻåĶŠ-%”ŗņ1\uiÜūHŌhĄšßĆĖ-;įūXč:Ąŗ‚)%øUo™£,Ēpć·OĄU]WƉ£ü8¶ų’5™-uoģ¹ā•$›ó$W ‚¦6ȗLÕ$æxćWUWćµ} į’‡Si>¾ń-廽¤1łņ‘Ćm'æ…Rš[=™ęVĪK²’ūĶԘĖ-¤Ł1øŚ;S½¼:BÅ{wmæOūķ§•ZµTų¼VaĢģOāeÓ“øģļt©[yæ¼A €ćæJå“­5<]«Į£‰”²¹‘[Ėwį€${g„tĘ”äÕ«tcXhpC|ŃImōÆ 9ēÖ¬x»Į·~%Ö“č|'«jv>0ņ ÜŪŪHŹ/-—’® üŻ3U);”µ1¼ö }héHķ —› hL¬ʜ0 yź GįķSXń/ĒÉ~čD‘Ūę$GPĢ£;GįÖ¼źņ>^¼cd~¢x+ömš‡ĒOüGŅģ/“łģ%ÓŤślź8`śõłõū9x6ź|Jų/Æų„]x«Ć:„Ž“ź«z‘9ē=ČÆ"¢9©c­7É~æä{‡Ä^i¾Õ|Qā \\č±4ķ„Ćä“ß§ł×~ČÖp|Xų}«g„@"ŸQh‹ÅĖFGš7įƒQJ׊ö)ęVŽē™~Ś£ųū@Żč7 ‰ā .-WG–dÄnĖ•– G‡ŹqןzłßĀzō^»$…³½Ič;׫IٟŅü™ŖŁU)ßŗū›G±žĢ^5¹ń·ÅżĆš 5ņ-^{xŌŅØ‘źzń_­šXéü~xæA³ń7†ļākIŅhĮxCp “é×ŪµzqĻƧ˜ulž,|’’h‰’/®>Õ§ijÖ7 ŁĶ»å‘[ż 8ü+Ųµ;U†y£Œyj¬F; ʵ°ĄUē‰É]!Iš 9ńY—nū_Ś>n3Åp§©ėƚdŚ-¬6»ŪF°<§œgŠ‘^½į Lń ÷ę lbh\Ē1 ”.TbF?Ś›×]„£cČt«ųŠĢ¦xhfx\+’ņĻć^‰§Ż2Į ț•¹®Ø>†5¶=—ĄŽÖ>#\ xwPŠÓWxŚXc€%*7ē¦@ė^ń»ā<’µŸµķ§Ų®4;ū"Elīw^ qčkŖ/K5ĆĘUc7¼u_5c“š»Ė£m, "‘· Ÿ„y'ʍ{ jęņ{l`Ÿ÷ˆ#\(cķ\•āU*–gŹ–žˆų®EE‘6¾¹ÆoÓbø²ó7d·Q¹Ž{{×ŪE¹\å¼uć©ę¶‹KŠeū"FŽ >õć¶>9ƒOŗž}T¼Iœš”͜ŽĆSž×ÄWeŚUņ‹– Nq^am¤"ąsõ®yJē§BŽĘ” ’Żė_Ćśt^!ŌbŠĢšĮ<ī"BēIõŖ…;źz.J+S­ųÆū2üsųKį÷ų…¢É¤üNš…ø\’d÷`’Wų€žłćā ^[o‰oāiŽ+7_·Į>Ī<Į÷‘³Šƒė]ō©Xń1˜•k®_³ĒĒøüo čŽ×õ“xŪĖ“I˜mn1· ÷žµõ߂5-2ĻWÕō6‹ģw‰.&8ÉõµŲ“§§§‰5ķ£Cou&Z7qłtö®+ŚG©*\Ń>ŖŃ¾*üMż–¾%ķw²x³įeł'ŁŽV4?ÅĒnZķ?l_ŚGKż¦¾ü)Š|!&£e”čzØŌŽŁ,°Ė„'ž7æēZ*Ś4ŒŽU ’Œ¤ÆŹī½v>LŃ„Ā[ ¤&®j1ÜC*ČY0ćę¹g+ŸIF‘£¦\ķĀ»d\·Ä _xĆ³­ŒsO5³‹”šĄÆp~™„W¤{½ńŸMųļū!_xÄ «ń¾Tś|ÆĖ]qŒĒ~½3ćşübųšć°0›Q‚(&•BaķdDĒŽéœóÅtsžņ÷·™ńÅē€ō_YM¤k¶föŻFų¤ē…‡q]§Ā?ųsĄŽ.šž«āČ®õ_ Śäacę0ćö=žŗŽ-±å׏®~‘ų{ž yš×ą>‹«xSĄŸõ _Q‘¤k-Bi#A ‘ĄmĆ#ž?śõšŸÄ_^(ų£©\xßĘz“RźNϵ§żÜ*OŻ8ķ]_ZŃ#ĀĆ䎍iU“½’ĵ‰į3Ņä»šĻˆtĖnńŖÉ0,H=1ż+ģ’Ł»ć¶…¤I­CāĖ‘‹>˹c¹p0XJ¦¶gÆN›<{P†ĪokZ¦—v¶×w-.ÅU'©µmŻCg.wkws,“gĖuēü∳ŗ ­É¼ šēľ6K˜|?c&©uv«`¾=3Ö³ōūѦŽė¾ń’śn·mŃÜŁ]G‰";N¶GZĀHŚS[6ĒØIi­µµ»ł°—Č¢ņkŲķ#ŠåyhƎ†øjDpĘÜxnĪPL£ø<ēu-"Ś £+łųČ$żÓY:fžČāĻ„¤žŅŸQS!óNdNp}ńųVž”įĶ>ęĶm„%9Źõ5jŒj&ŽkWµ‹H+ūÕr;ŽR&}} šÅŒ‘‚2Äą­4ŽÕ,u&ĒÄ|aŹž,|ĮNF+ŌtĆ«,oAo†HČ彫¢}ĢŚ‘Ę FĢ<†Ÿ5ƒ–*‹ŒūƒV“ė™į›(ĪKtÜx­%,xōåĖ#Żünn6LģÓoR6ē€kĶu(_Rń=ģqģoŲ žŖ++ö±Žh¶3[¢y£Ū8é]ģ6·-å¬D•laJø#ŁK£B/\‹Če±žgŸ;Lj8ü+ė߄å֟ąŸCā?²ŪĻ-±˜ģc„8ßżjļ„(ٟŸæ ¾5ųÆ@ń-ķŻ– 5=漣Hę%łÜ~Qź+ōįWķąėĻé°ųŗŹ]āźSkīŪ{„tʧsóœć•äkń=Ķ‹źĘ’Mž9ķåĆ*•ĻįX¾+±±ń_‡m¤ŽļČÕ­É ŖÜ1Į÷ė[-v>>…h¦¤ŗPš¬śŽśę+ČJ‚æ. łÓā?Ć @±Ń¼a¦ŻŲ\“pÖóEøīEć“ļұ©LūLæ3åM4{ԊĪī-V#pJ¹=ź 8ļ-6Ū‡±µ‰€Ā®Jä;§]MŅ“=ūZMyɼ„sĮǽXńƌ4/…žń½õŹ?‰e„‹8T† œaQłŠeN'ēNš.8Č®ø®‡ŸRZ”µø^āĘēģó7aŲ¤šM|ßkįŪ»ūė’ķ$x%RG=’³ķV£Üē“g«ų.8“G…@AŒćõÆ]g·¼G•ęW'Ü*“&y>·Ūj/ūõh  YĮv€F£ĶĒŽ? øn`ŁORŅĢTĖņc¼ĆPšģvņÉöGwpxSZŲĘ{˜Ö’^ZL i‚†ĮćŠī<7Ŗ¢ź3Ku"Ŗ² Ö<¬’]g[‚ā;„µČ+œm=+Ļōįqu{&X¹ūŁĪ0+Eø»įi-¢ŽK{˳[XÜüÜą~5v]VĪŚ9 ŅGžĖtĶ7 ¤ŽśįDÆ,OŗÜóėĶkŚLn”UĪ8Ą©Œ,bnAo›[y² V |Ż3[7ŅŪ‰ćŠčBŒĘ ü+KĘųóEÕ.ŬŚ9髝ń1ē8’õבŧ^Ć0y-ŻOqżŚ×—BdŽ’;¹Ö·*…HéJ„żäE£A‚Oń*YŸ+'‰§øŽåLŠ%ĘB断+]%±†žśŚéŅB„EI“WCį/Žś÷ŽÆå²Ńµ¬Ž\E!äĒjš‹}e<$aŃüC ·iG“$®ø\śūf¢O”Ówqü1Š|E>Ÿ«Y\Śż¦o,8&R9<÷ć„EØi¤B4˜.Öä&vm Ż€Åc!¶|½ā}:čx‰šā1k$kžF7ƒéłU;ę‡QµiĀłcn;ńSõ0žēi>£z—VMpc“bF3ŒŽ™ÆOšfƒā›ńym%—Ūc‚0ŠÉ»?»ē½oLę’Ōė£Ō|ˆęŃļäšŚŻæÖ«’"³ĖĆŃĻYZŪY°<ŗälвNÆM¶Ń–ĀēNžĻ„]䱓w,=+Ķõ?ż§T¶ŸcŖ+„FqĒjęW"× 6öMj`üǽy•œw±A$d•Ig€3Ł«Ӯɉ%×1®šÖ_·ˆŅ9v?d}ӚƤJgŠŚUÄuœ6·^T揌ÄWŸ­qž"ńµ¬ ©h?*•ĄĒµsē5ą/Gs­ź ¼»hĢcw”¤ķ˜?#žÖ|B‡Ć¾Ÿ Ūé5 Ūuülfõś×Ld>{·ūU¬÷Ž)ņ7|„‚­łBęAFŪŪŽµ§::-H[+“4ŠY˜ēęõ¬æ¤V6‹Æ¤’0ŪĻ­>d`xՌP\®ĒV„øI݇ÆņÆlÓ“GŗR‘ń‘€IĮ©šź–™ww§ÜO¦j*ĘŁB¼D7_­fė3Ą÷±›9J¤³ÄĪOóķ\õ ā“: .;kˆ‹ĘćĻyN>†­Hßf¹ūDw3Ē>Ģ ®p1ķÓ5Ģ{żrņņt“C4ć&F9ŻĻj4I'“•–{‡žnX3”ՏKÓ¼aye4rI3ĖĻ-‘ˆĮ_LńMJŚ_ķ™/ąø”*ÉęS†>õj “æŌ~5)Ņm4=:Ś;‹‰6¤›˜Ž3ČĻoj§{o{«éńJ­µĘÜņµN˜Ī:;y-/&I"\ć#iėļVķõ[ĖB^bī:ÖNs:ó_Ō^yÓ¤ŠĄŚ0EpZŻŽ¦gµ’Ź}ø“23øzRQ°»˦+#Ÿ8蒮G¬±•,ŪAÅ2$Ćū0Y‡V >NNMgĖ,i)PWe¬œĢĖq\ 0y“[‚Äķä}Ć^•eį]OÅz÷z@-qłƒ ¹qSqØ÷ńŸńćē…F»įK±ŗm›¾:ķKīØšĻ‹æ<ū7&·ćæ‹mµ«ÕĶöӉ®õF{qé_†µ7üĻāĒĘóu”ųKæų%åĀ4cšxz|žäv®ü>nĪz“GęMķĢĶē=ÅĶĘ ņ±y ιĪyļT<Äfƍ¬{b»ģqNdrģb‚WłŌ®Öuć'§µ,ŖM”#l„Ž:U›u2|īHdÉļAe¤ŲHB#°­­–eģēŒŽy Éź[¶Ó ¹'šęŗ½HH©å² 9Å)JĮN™īß üāźŃč~šÖ§ć M埰ÄdO©™ÆŪ__šLų[Ćpų÷ö°ń|öń́įŠmß`„prĒÆ×ł×Z½čFŹĒÜz^­ é–vžųAie ų6&9!Ų’JƒūĪ:÷ļ\bė6>ŗidņ|žSs¼ƒŽƒśW+:–„į=OŗųŸā®_½tŲŻü²88Ą1×ü*†»ā]GI’ćIӓū?Lp 8VĒcłR±j]"ń.„¤^<2ZZJoŲįÓp&Gö­ +ÚUĆŲĖć‹ū Hłäp<Šl„ræˆ|o,ņi~ŠķģķŒöįŁ3œ;w¦æŽŅĘGūuĢ:ŻĖ)mÉ&vŸzĪh£“¹ū\–åŁÖÖŁNqžÕĒjW×ŗ‹%—†ō§¾».#iqŒķōk+‹–ē™xūÅæžZ\K«ų®Ū\ńCEh§ zÆæ5ń抾/|Nų•Ŗ½†Ÿ,¾š¾Š‰°²¦yĻpH¬Ü‘¼)Šž˜IkmstO&G˜ż{×Óų7«;[5¶‘ws+K,Źæ,#ÜżMa*Ęü¶G¶é_ =¼—^pĮĘŻöā¾¹ų{qql–ŚMę™Ų£³‚r_Ź”da)u=¢ļO“æQˆż› 01ė]²ųkĆfŚÖ ŹD•W2± ‚}ø®ŖHēs³>xż„ąųuØź ²R¼‹œ³pĀæ$¼+§ų—Ƽ†ŽŹĻūŹ&V߃øōõā¶’V¹¢Ŗ}æąöš÷Ć»;)µŃ,VļĘŪFā~‡šśßQ“Ö­,õMhī“éGīĘõŽŻzƒŅøg}lW::čÆ.[J{ ¢’XĖ  Ž‡Ś¹ÅÓ­åŌ W³ ĘBšĪåF]Ž“P“Ņķ#ÓŅ7dŹØēė^wØxrćXY é4ūĆk)†ßs±²šźŲiv°Üźm¹\p;ūŠƒPÓļŅd‹{ZĄFÆĻzø»=jŒÖÓ|Mmį€o#7Š6y?•bYź6—÷r™B±'8ėšŲä“;84äEňVFģÕ“écq3<’"”Ė’8SžÕ¬fhŽWÄŚUĖĄ²Ūؖ07 “\ׇą{™d1vRC])ܗRęå턄ÆCŽkŸoAc¾Žõ]UųĄõ¬„*fϊķžc¤q>[ęŚpE:×Uf™\ŗÜč= M‡ČzZłŚŒcc¬@ ęørā[k¦‰įׂؼ° Ķ»Ļ‚õoĆŗ3éČķ¬­ę*§Ė…ō>øÆ < ć=.ļNÕtūø WQ2#ōl’śėč9Dóļ‹1A¬8—Jt°FņEņ“ŽœŠĮś­Ä:lvW·W.ŲŹŽŸØōWń¬Ń^ZY-¼3Ū#†+'qžÜ~•ÓE¦Ķr?“,­šŁL ćhėŠQ²<÷QH¦wFdŪ“ƒÅmxt-†–4‹9䒯]ßūłėA“‰ĄxĪ{½"{› ³k#¦|Õ ²‚:Ż’Ļ5峞āģN‰-ķę †=X}:WL-ģ^Öu'Šęęˆ#GĆ)]Ē®1_aülų/¤ühš7„õ]:ķ­5  #“ĖĘ_Q޵RŽƒKšļölšĻĆ­F×QÖÆLIuVW$凷ְ>5hį{«+1”“O‘¬‘w''Ó’Æ\óÜŃTG‘č)©M4·““š8]Šż^:œÖę”oZŽØE4‘ɼ }¹ągÆ„@łŃīŚÖŚ­Ü0jA’cµA<ōļŠōgĮś9µ‚ź Rx’Ö18VöÅV8@Ö:j¾ ū"0;Ē«ašŻ|#y§ŲIÄŃ’ XdTśÓrV4äīyo†D±j°iś§ˆG‘ņg|qĒ'Öæ0’m x‹Nų™w¬k·v×1Ē3Ū c œ˜ö5£4“ģg)OŖ½¬šz–x„aøÓ9®:vŗóüÄp«ž2¹Ą®Śhq‘õĒģĆć¶śL·ÖPL?z‘²ląq‘ėšż„Ó/cÕt4s"yĶå\d6’Z¢¼n‹<ĪęX„‰Ėņ„ AnƒÆ„yĘ-*ټq­Eŗ†­’LxʼŚń¹Q‘łŁ Õā<#+³d«ƒŅŖ›»­ėHń ŖŻĒØX¾ņżīyĘ=Ŗ©.ŒŽ3v>Ö×āÓ>#xJń¾ŸĘūøqv‘’Ė6 ?^µś’2ż¬¬~žÕ“üńķ¶—ą[Xīī–·ˆ0gĶÓrx®ŹQ÷¹Y„7ŠžĮ¼Ug&‘~Š‘‚6QŌń*U‡ŌW¶üńj\}£Ć÷D†A˜÷ōŻXĖ`’īuŽ5Šg“Nšć@wĘŲĻ#„š\ļŁ |GÓi’é6š_ƒ|Béaā[xH-õ%ĪŁYBĆæ|dõ磹‹§®§óÆ­iķk-ĢrĄÉ°žŖŁō®BENĢW§5ŪOcŽq³˜ŃpU#É„I”‰A“‘óg­ łŗŸ1 †œŠ‰‰VČo ­#.rC¾łņøäŅ ī\¦Uz÷ÅYIŲµęw«³ éÖ®_iÜZ,–×WœL—ņĘv”•å ż@©‘½3żæąŽŸ¶Ž„ū`žČšƈu›ć'ƒ‘4_G0>lńķżÜŁēp*d÷ßųž¦ŁŲźZkϧ^Ė%ß%–Br<Ž䭹БĶxŗ ˆlPH$’{gå;sĶ~yüy²žŠ7 m#Ć>,Ó‚ŚŻ łc»Œä©žé$uö5ēKseņ’öøų5¢üXųq|ŗšdń<9±Ō¢u%jį%ē‘Šuö=ėłFń—…ux“Ľ½ūM̈́Ө$¾>Ģ??µ¤õ±œį”Å“ŖdU).ļO½IĢQFŹĆ,ąŽ„wĮhpĶxŪŽ>½j³nPBć=Ķ[FeˆŃ]Q³Ņ›Ģ³@3HÕLrK-³”(_'©ī*Vgl¦ĻAé@łµSx‰Ü=k[ŖŹüÆōĻ”T™śS’§żÆ.?dŸŚ‹GÓo4ųæįń%ĢjŅ=ɏģw€aYGL7Ż#¾kż¾xĖDń–‡ kś:7ü"Śčó  [;‘÷£`:sœtĒ„EC®'Š‘ix–Źī6 ĘOżDZ5•śb+»µƒW“Ō„ŅĪ©Ļ=Ļ©ÆŠæŁ{āŪxKYŌc’h”“Õtćf¤œ2;Č÷é\ӈā®}ńgą? é‚ ūūk_›I$ŸĖ}Æž˜ć¾żėėmi"“Č•@Ē=s]ųj½ ŖÓ±źVøŖ®ÄuŖ"ÕUäČŚNyō5ėB]N īdÜÅ4N_øļV,ŠZng'¾z×ASaā{dvV,ć€{ ·„„ž»3“Œ’[÷ēŠP4Aā2Ī×[¦ŻÜ \ØXW°x>ēFŽ[}>īŚÕnew˜HĒÆnō&aųŚ{yŽęÖĀ/Œ„xģvp¤nč„2ʁˆt÷½ŒGl”äĻŹsŽk³Š'¼Ó,’-Kj²ä3@>$’ĻSø†į ŹĒ°°‘X6Ū­Ō…‘Éō ¤śjĻcžIżé`W'Šō]?Ä2kv«4qĀQpŲēš ŒU-ńKĶy%Cµ\… rkAŌļā»ŽxWäS† N1ķS.år£Ł“_Zjos ŲßpøĀŠWMy y÷Pvū Ä=™ÕxkÅDĘɤøŹ‚N9Éų®ĪžļT’ś;ū™­Ģ"8Ūžż©—v7bŃ…Ž•§Ļr¤lC†#Ÿ§ó®*ņM&E’Ź a“ ¤÷ōę“3hĒ¢8ŻR“jé 0 d ę³tĖ8lÆ®ńHw‘Õ…RŠFńV; lt™”øEG·ĪHnõÜčšõ¬×Én xøÅ1œ‡ŒÆ¢ß:F̬Fę<ķ\Oöœ—„ĒŪī L€#“T.’Ę61äē©­8ģ p’Eą;¼V IghŃMē,`’HŪŽ•čvāźŚg’%…óĄĒQAŃs÷zdEZXePœÆ÷«•ū)øœB«ä°Ī Ph§Üķā³µ·ŅfŻ$M{€#‘gmgtĮĘÓ4gÓŠĀ£¶¦šĪĘßJ·̌0ķX’ŪK¦\·ŲQ³Āäį½aĪΈÓ8{o2j𑿅dBdš¤Ž rĶŻ’Ų/eÓmÖyUIŚ{ż+9HŚž’Mń&[xBÓĆö°m¼kõĻl ¼ÄłÆ^ųw©ßüńˆå³µ’ö×SVY±ó¢«Ą{+Ž{Ÿč½Jīē»Į7¾!?†ž$źš’ņŚēŹ7HX€ŠĖčŽüq_Ó…|geā ;[čē„K4¾ō|sǽU3ŠĀדńT–ŗOŽÆt8%?æ%¢`09Č•oųĆkcć­k3O¤éw2Ń\2>ń>™”õxZ÷Vg—xßóŚßźŠÅyČI¤A,g!—' ÷_‚“ŸÅ’üGųmŖiRĀH¶m•5¹h³f£Ó8=©HYŽQC0ĮTĀWWŒāāżkļģ~ä~ן 4ĻŚ§öEųŃš×NŽ‹½WE”Ś%Į1żžś-³Dū¤xėTų=±qąó³]£łš•Żä®9Šėo¼g'Št[ŌÖ5Ōp§8'ҵŽ$ö#ƒF µļ“n[ĢäGØ­ YÓQŒĘą<ņ‘ėDŖŻXŠLó’‰_ #ųtŗg‰¼ā)’įŌä"źŚ@AµŸŲq^a§ų³ų„šēÅD¬WŖ5:T/œ?ą]Jå©=˜ĘŹÉ³ˆų{ā ļ|?mt×gTŪ'(Žžõś[}®xĘ/ų7I×RŚ-7R€ZyČ ;ar ńōĒįÖøåWSį3|[µ‹‡H°ŠōØ­<’#’0IeČgņ¬X“{=SBŌmc“IõŲČä–_L~UPØ|›Äź|Ŭź6wŗeÖ Włcažß”­M’qŪJJ9<„zTdW¶Šģģ“’-Ė2żsėRŲiZ懾,|?ų \+ŪŪ$–š±é< Ą¼ē5­IYXó±54<‹ÄzuæÅi5Ģk©=ķ *F՗-ņ~%æ:Ńšf‘ż›ńQ>(©¹¶Öbq#ćī—žö=kŹÆS”ó•ćv}f浖‹ą‰ŸXŅŪQ}i„ˆ«bģÉ8äsҾ ųs'‹lüsāÆż²eŌõ-BKɋ>pĢŁČ?yµ'Šć#ķm[Ş/ńg„õ-[Õ?“4»ū3kq •Ļ”ź:WŃ?±WÅÆƒæ²Üsč/įķbćKœ,ŅÄɶąu‘sģ={ÖŖ“5†µc ö§ųŃķń_@·ŗ†=#ĄŚR”Ņd•0āG3’€Ž=«óļĞ›ĆśżöŒčå&0qüC "½*.ĻÖ8 1–'ī½~g˜čŚÄÆŁ“ćw‚üg„õ¹“ėbd$ÄvĶdŗ69#­\æ±ßĀžŠ?ōŸŠ~¼EÕ効¶YV8ś”aŒš•{øi÷=ī/āé`0 RvūŁų’ųY†’nƉ:œ6Qé›ķķ$e[²ØśÜWŠjż„VT_MŁīj«O”ūļbÖ+,£Š_n)œėZ4ņ³*żqŽ”•Qahņ*ó™öšZiöƒ`·L×UjʰI¹™ņŽąQb%deüJų?uį߇žųńįĀ÷փGr‘Ęsk6├g¹SĶičö2iZ›Cy— /NO ®Ø£…baRī/f×Ķ^ ń„„jvŽ$šö š_ZœÅ‡&šz‘©.›p¬Ė†VÆńsoŽ4M?0y7JT^ųĄō©œVĒ‹Uņž‚¢Ńć‚Öą‹«ĶŲŻŽ„Ó|y~ Ņ#·’d“PøL”čĮH®ŃF0®|•¬ŻÜŻ2ła+Ģ~!ų*ćXšæw¦^Ü[ėv€\€²`ȃØ_zó¦õ:)ŌŌń?…ž:žG‰äPłA‡fÉ=õæ‡5·*±uėŲÖWŌõ(Ō=GOœW'œóRüų£ ųSö›Ņ4?YŪ'…/Qģ^W’—yX|Ž}9$f»Øö.¼½ŻŁ/„Ž:øŠ5ļx X†)4„”ī#Ć­Ģl>VĒÓńäWäGķ»ū2’Ā ńgĘ:…d‚ _­X\-…ĢŸ~1č ł°=MvĘiX·+|:¹ńg„/"Ņ5ėK:ž9K,ĘS’ŁćgéŽæN~üNŌF£o}ā H^•Œ<­™=iŹ©TpRocģMgö«ŠtŸ†šīįŻ6=WÄw“ٰHĮĮükņ’ŲAww4væg’IŽiS?vBrq\Õjžī ÖęÜ1y§Ģ\©C\¾«ą=5o¶,ŅK ׳^X\© õé\r™ķB…iÓ~(ŽéžĀŗÅ¬~&Óüæ.'ŗłž;ņ_³kŗŃmÚPį q¶5Į ŌōōÅK™“!Ųv˜Ŗš3…"em’)<« ×Gµg‡l‡sÆOjƒ¾š­¾$³£„ Ź…*Ę3Ö£Ś8£ W¶“µ³½žŅKUŁū͘]äś×„Ż}ŠÜA \ŽÕ\Żz‘HŚ“Öį†é#Ģķœ <æ°Æ”¼1šē^¾šĒü%7 Ö-/–aSóĒ‘žEuŅMčy8‰¤zßĆļ üÕ|1®hž-ųg¢j^2¶™¤ŠāēžZ© ƒŒŽŁ«~ųyš[žƒ|Cā’Yæ„“‹čļKŒīŽr¼ą”ū˜|§ƒŅ½Ó[Ÿ7Ž©+5ś/ķ± |.ńēÅ Ÿ~Ļ?ćšvtäŽymŃaP”A ƒŒćœWęļ†#ұµ˜§8†@Įœ~©āye7(«'Šłž„‹”ƒ§G>z‘ŃĖæo=¾żĻ¬t-VŅż#•+ÆFד;tTū5ÜWŠš‡> 1tūŠĀś)Vģ{OģQÆX^xÅśv§0Óü_§ß‰A(ķl®sŸĪ¶o];@ü+ńn›5Ÿü%Ę9lµ6O•ēˆ§ÉęzyēŽŖQ9ŻGsņ—ūD&·åVe<žŻkŻtŁ€Ž Kaøs\U#cŅĀK”։Zē*Vč+žŌķeūDs“Ÿ(ąSYŻXō”t¹$ˆČŪ÷ŗu„ŠH$7ˆŸq —.Ē=XœēÄ)m?²-§øQē–hĮĘrÅų7S·½D‰VO7#<늸ŲņkĀē“ŪÄ'GQ1VŪĘ÷Ŗįk¹gY­„†4 »%{×D6< fūĻu=ī‰uį’ŁéŚ„ŗ±ņ%āHAōlē×ō®xSFįµŅ¬Ģ/žw¶rkil|Õl4 }]įŁßÄšÄßN¤öæŁ®Ļsi5³&Čś ?~æĻq_ éśV½kŖĻ«ź“I!cŹ”<Ę¦Tŗœ˜Ö””¬]ŸÜŸź{&ƒŖ:¼p›ČĪkßmļō*§į‘“Ēõ¢>ŽŸtßšę·YŅoģuX„ĄÆ|ÕōēĘh|iū&|UńDśī üLŽ_2ĪŽWŻ Ūņ¢÷Ż—éČĄü{aM}¦y¹–2J)Ē{£š{į–«5½śBR8ŲHdĻ÷ĆsҾōš¾£c&§į©RĢĀt=›ę®j²qV>C3®äšGčv‘h“ųS[Ōõ‹¦†ę [c€ĶÓņ•ÆÄĻč—ņkK«3–Ū(*ÄöJT± •ąå9I=hš÷ĘčÆtY’I– Ÿć²żÜVŸˆ£¶ń—ģ’­|HšķņČÖzÆŁ.m% 48ÜĆ£¬jšō‹r·["²‰ĒŹyØqks» YI)GTϬ?cؼ'ćcUŅuˆ,­äµ‰®aó‘7Ü: “×89Ō~Ҿš©Õ•Üč—išł®±O@mŲ$ dõ.źŅKI Æø£›K•“$Ó`¹¶wŚ¤²Å26ÖčĖžyśf¾ŗńg|5yš÷PÓmōū'Ł‚”įĄ#ę]ćœŅ“5Œ®~CųīāĻJ¹Õ.’E…RFs»­|…ń ēEńDfoķ3g²=A¬¤™jMg†ę½Óō»x­X›tŒˆ$ńR5ćµÜ7R<‰0ē$õ¬Įəž?еoiQų–ÖĶ™`W#-׿½|ä¶×ėy󚏿ėĻ5=ą·qb@ł›ø>•2•„Ž^ >Ft7O"ē=Etv°ŚŪ\y‘Čé ō9¬YNgu¤x«OŌŽkk<°¬€›ėZ({øę–ÕžÕT€89éYņ2ls¶zȰS䌱\«Ćņ*…ę¼` ó(U'רõ«Š°Œ­UķļRŲĘčŁĶAezքDy·cę G =3LĪO”ŅkšŌvś LŗtŠ^9Źķ9+ģ+ˆ²“›ÄŗjO~$t)ÖOåLĢʱšĀCzėņ„»ĘIĪ+Ž<1’š’\“åĢDnńߎŸ7B”Læųv-6S{$óYŰ>aĄ޼ń~Ē._&W`‘zŸO±›čkż+Mŗņ_ŌĒĮ?ŻźEji™ŸĪmģN6ć”õ¬Ękėvv6æc޼Čń‡|`ēœ×nŒ-9wC’3·‘LfV”ytØY Ż‘€r3ģOœ«0ŚWҶ‹ŠÓ•XŠĆįžo{oy‰†s»n<³é^Å¢”+ü=„+#Łŗ„¬*±ū¦³¼SöHš°‚²c!dŁŹÓe¤$?§„fIoµžqóu Ŗ… …#­h fU ć­c/Q{×·ĆŸ3ł×œł·Ļ+Ė*¶ųĻĢ@ćƒYŹ$ø…Ÿž/iZ5ģ‘mÉĖ–Ē^?ūÓCń†ģZ [[[ˆÖ,­·zsŠ~UĖVv.1čy˜ųµqØjW`¦¢ģVƒ ņ+Ö|5į +LµŽ‚ÖŁAÉŲ½ėÉÆ\ļ„Lķ—A†4!JēżžōŌšżÄ„KĪS'’NÓ^\ź]Ųé±=¦’ņĒp³£RpÄ|ßJį¼mām;ĄŚ[ÜYŪĮØ]`IĪC/Ø”­ØÓmóļ‹~4ź½ —Ģ[D†ĄŪč+/ąĄŸß“’‹¤šĒĆ_ ŻėQ;•ŸQø…ÖÖ̟ć2ō{sҽœ=>]@żŁżŸąŸßæekżTų¹ØŒæfŪ°H7ŪYääģŒ/Ģ©ōÆ×|-ŅõŻ/FŌ¼Gā gĀž x<…ÓōęT‰†#1õŽÕOrć3óƒįÆĮoƒü|ń~‘ą-Ä)h“ī’÷Pü¶`~|1€}+Ömo€ĻńĆ^šēĆ(lµ=fVi 䪟ļģMr:Z~ܛž åū(xĖöqńĻÄ_ųŌG§č÷–PŪO¦‡)#qˌńœœ×éż„Ź^ź6‹¦Ėö]'y%ä<ˆž½ kF“G zœĒšxŚ[ Æīćõ»­äŚŖ°ŻJč|-q„[h–ś®±4śn >g“+÷‡ o^¢½*kMNKėcŌ¾•!“f ƒęp8XÓ<7k.Ÿ֛7†4o;-mģĻ#Ž˜é^§©æ‡nģ~iŪĢłīä31ĒR1Å;—ŹxØÖ.¼?©Xkw·Ąß ĘÖņ£P+ų\ųQ»¾{ŪKM5G™å4sׁžOj@ārwz„~»7ŗn˜×ņ‡ÜśóX“]ėל»źŗö óDŅ -ćo”?ŗ}GµK‘¤/ˆ<µ›Ģ•÷øöž}+•–‡’č’®üAŖ&µØÜĶØ^<ÉāŲļŠśWĀß ŽāEŠ hnf$`mĮÅaPÕT]|Š>’gJސD%F£,qŽāæ@| ŗsųrēOŃ4ū-:£T’%\–äöĶsJżI”Œ};įÄ×o‘Ž\){W¤ŲųkĆZ%ˆ·øžäjx;‹( ģ+jhĘm¶K”"Ēo\FHÉSڧŌV9Ķzʃ¤Y(HäFņ@ūżėCœéā–{)-Ų}ŗ×Im:\Ł4F6ē'żé›Åhli6Ö:™šÖźö HÕ |ł9Ēa\6£ö ń¤Ņ’v„Ī@ēw½oö4ކe름ę;F8ć&¾~ń†«ß_CSÉ ÉĖāńĻįZ9ĢXŅ“ō²VY8=HĘMwW†Ä \“K<ܶģ}ŃY™6tŚqŌ#ŗ†%0B£,ŲąJē~$͚EĶī—,ĘE*\”23šč§I=ĪIŻč~x“ĆWZ$÷¶ĪŃÜ4$(ņĮ9ź+„šō³ų¢ĒNŠŅāøF2–RW¦kŲ Ē©ė±émw,žd Č0įĄ5•¬x^;{ˆÆķłQ’Ģ€ēn}kfsó…’ƒōļ]Yjbv²uDFŪv•čOóükŁĮśī›į˜gŌnāÕ,QLK2H0£éž*£.ār<ēPš~™¬x[W½ÓŒŃź „ŽHžaŽrqķ^M„]̈́۸ŻÕHp§#¹«LŹNĒ•ų‡ūRiŚé®äŗµr_p\퀭Ÿ ¤–·p…HŲpÅXpŽÕÓŌ‡-M¾»‹M&KO"#('f~^yÆŗ~ ėškŗe¤A ‚,eƒsŽ8Ŗ”ŒĖ?“µė½†™įķ[‹+OšS!÷ĒsĻé_ ź~"ÖõV’Nä¶%v$° Ū؊ēr.1eŪf–ĖKŽīX^d,”—oĖkSxŸPƒLÓ£¶šÖ9ĮbūĄhOcŽō¢O žŁĖŁĶ®Ü›?˜ą±õÆRÖu{››Ūģf’ÅT9“ØŚŖQgÕ >Iyš‚7Õü/aØčW+3-̱nqŸŗ7õ’š+_€‹¤jVŚźøģ.'‘mÖAņGƒĪĪ=*Z4Sč7柅t Lšō77S“wa!ƒœ}8Ɩ5Ā–ŲɾĻ4 “f2>\ūg½"“(<š$Śn¢ó]]‹ł18~ūš­ų¼3©ė>g³ŽMńF÷Ą€XzŠ3#Įž!ńŚ/ōĶQR[;wP7.I=Ę}?ĘŗķOāÅ„·‹,t÷·ŽŁj„EįˆĘʁJ'²ß^čŚ½Ž­-¤m^݆×~AŪŌ~=«ę?…Śn³'Šo¦‘>Õ£¤Ģ»$BCćœõā•…Źīv_ü!¦x^ƒĶÕb½ƒR‰LQĘ1ä1ĪCҽ;į­ī„ąók§ŽŽĒugåļŒJ2»Xd~”X~§%ń3S—ÄšŽ”į‘v.n]DŖŹĖĪįU¼£ĄŚ”ŠÆŲK0P©ĻVĪMO+±ZÖü Z@«­[y2I;‡Ņ¾zŌWĆŽ×ōżYFČn.•b?ČĶŠZ$MĻ~ų‹šóHų‘§Ų]ģ“m] C4D.r3Éjł‡Į?¼[šSĒ–öZ¶“©jž’o,< ¶Pu ŽÅ>SXj~Ķų-“Ÿhz~”į–s£ĶøŽGo–,ŽA?‡ņŖ7šÅLJVļTÕ,ŅśĪŻIHŲn1ļ\ÓњŲōæŁ’Äž ųe,ŗlö6²Ŗ²“sašy_­wžųoXŃ5[†Sw!-Ž0 wČü:QÉŠGŹ ų9*ź0$ZÜĶjЦ-ƒaܜ_3~Ų_f’„kNń<Ņ\jˆf|`ä Ž’żj6fHü„ń/†žĪI¶¦ĢęøČĄh¹ ×5Ó •ĖÜךˆfš’Št]b;˜ķ`ŠB²±MŁCü¹ūš·ā,·ŗ&™®XN&‰ķ;AU>Ćń¤•Ö„3®žŌ‚ķŠČŖ\’sŒb®N–:Ž™>“u’…XBH<*ā­Åt??ńjėš5Żę™u¤ŻCJø,0Ł,;ē#µuC{•k3ū¦ż€j=3öŌż”|ćČ.’ļƚMŖéŚå¾üĢ®œoaœņFī¼}+īO_K„j\)ĆÄĄą÷ĮŖÆ4¶ŸCėČ5Č|O¦  U~ö;üŪż¹?g |tųEńįļ‹4x/4½bŪt2YŽ &)öł±ü½k†kAIźžæÅĻųŸĄ¾ ń?ƒµż2īĒYŃõ±ž;µˆ …lzcššyātČb7t>Õ×IčpÕZ”|—l;ąc½Hńż™O”ē×™ĘTIXøŪŹÆ\œfū˜‡ž©Ø›(–¼“ŽØld :S£TYĘąŻé”šQ4)“-&qÓ„^Žį–9“ƒĘ@äTKczlż’‚U~Ś—°ķqįßėzöÆĮƘōÆŪē|*ģvĒ;§ū$õą‘ßžŽŚ%Ž›©č6ZŽ4¦™ul—–7(C ”q‘ČėŽŸ­aQqÜÅŌ."’&a…9WR8"¾BųūšŅŪā‚õŻ*}?ÄŗdښźN<Õ;Š~ ×Ö¼ś‘±±š…żęŸāæ é¾=>•üų•ā{$7• Ā uåČ÷ÆęWž gū=ųž#hė[²Ēqå”ŪslLJĒOCŸzšzI3 ŽĒäōńK+ļ}©œœ)ū³Ā2:ļØķŽ•źEčqN]ƒ*®Ņģw'šYWŹ@Y Ķo¦ęewłB2Œ¹<ūTų&åcœõō¬‡a#Ł¶³Čö«RBɆŽM"¢µŌjŚ\«y€.3ŒÕ˜Ņa**†cœ`”e›Ų¦‘#x–5øŒ‡G'rō Ķm’šCoŪ«NųŻš†/„>8Ō—ā[uŽÖÜO8a”ĄecČ æØžFÆ”×Ńǃõ¹µ;9fŗŻŌm®¢üŃČ=Gn•ŃÜŚ, Gb@wĘkЬt4O”Īėš&•©éšŽ•ā>×Ršī§鶝¬č9įu*C)Č#õģMžü‡ö3ŌdÆŚgÄŽ²Ńõ•šĶĢæŚ-öKÅw§9%1ļżŁģū×25HüĖŽŹI¢óm€‘óćµvŽÕā·žĶUu;ā 7Ø<’Ÿ„D—A¤}ĒāŸŽž"k-#^ŃŚ=4qĆ+ą••@ĮükįĶ_Ē÷z拵‹¹ēY š\}Ž ž¹®9R×SHĖ”öĮc—F}V}6źĖN.<«øF r+Żć]3ȽԗRµp²ŃIĆ?ŠTŃŃŁWTtŗ¬$‘#ŽOŻ?Jź ¶7Žū‘‚ŽrG_„{4v<Ś‘īW¹°@ØpĆõ®cS³īB\.>čõõ®äg(Ų~ŸbįŚ9ˆ OÆ_­zE•„°†dHŪķĶ˜šżæ—,f5yåėšĢ“Ōõ›–ņcu@ļƒA”™&”­Iu%ÅŌ…!c¹Ašźtż·–„‚|ą|Žō§ & 2ǵ—•~ś ONhąO”sŽ“0<ęį„“ŗ1HĆƒ“VLʌ…2ž¼u¤™QÜ׃H]A>ī&žŽ•ŽųSC{xļķ§D•å_“?ĀŁź)—r~;š×ˆ-“Ū·ž8ŽĘgļ9źN9Ø O iZLš›™õ —›š#a׎¹¬?E=ŌŖēī·QķėTāt0]OsnEĀ€3Š*[MB}6i…²;żŖDŸC£Ö/m5‹XēÄŠĮ¾\Œżk"'‚ÖbŠĘ”:cŁč’a¼¶½ÄńŽGŻ>¢»ŁŲźBēĢo'Ė8š²™ÕÆ-“żxB‘ĘЇ*pzb“nuŪXąQMģ={ŠkrŃj;L1$g©^^CåHč_„±v-hŗ4>"Šk8ļ§²‘ѱ"Œ•`¤’Jó&ņķuģÅóß“Lc’La˜ƒŽqS5”ŃŲ÷Ė}NXķ#B§å\¬©oŲGró³ œ/#ļW,£Ōź„ūœ6›įē¾{‰®æs3Ąö©ģ¬¢·„Ä¢9š@aŃø¬&ŗ›Gsä?Oq¦HĖēynn\ ¼W˜ų7Åל—ƒ>!|?»¾ūB†£2”Ÿ§óü«†¤¬Ļō;ļĀ3[4ŒĻƒžÕ|ć3ÄVŗˆ°ĪL®7ĀX®9ÆéįV‰·¢iŗÖ©XĶiqoöˆŁ&>££Ņ¦2=1³:ų*žęĢųŠŪO‡R¾³u•A8#ج/ü\ńwŽfŠ4› F±† Be‹(ķĄ2ć®GozŠö°õ-¹ŌĖū>ü`×u m?CŅt ÆL&ēŹøŌ6xńۃĶr fųą›ßŁź^Ņ|;ā(œłOw6Z&GĘW§qŪµ&Ķ%šA§NśŸ²Ÿ²Ģ?ž&?ü&~9ń$oą·UC›!Hµ&‘6åšył#óė_Ģ/ķ{š[žŪöÄųńš§IÓ.­üŚ„Zīę6B[Ż(rŖO;U‰äšzõ©³?š®Tpj1®Nż8®3I“Õõ„A¬N©q ņü+āÕϰɱŖ E›/į{>FšŅŪł‘öć>ę§ŃōØuM3_Ÿ[įXNčóє¼ū*­.ēŲSĶcĖcĢl¬“«’Śé¶q^ÜXO’-cˆ²¦{ēCF߯aėW·Ś£ÜPĆ9ź*\µ>·,Ģc-.w–z„¬±Ć pŹÜuę»ĶŃÆ$"&śūŠÖēÓƬu/ᛩ®g† ā¢y„glõ®ÆĆ½‚ŽkĆk(µļĮ>µŃžn.ŗZŸAh:v…ć‡Z–ā= u Oq³ķ2 t܍_übųG&‹Øųj8ī"Ō-”Üiņƒ•ŗ‹‚G±HÜų¼Ćŗ*|1ÕŃÆu ž3mtg "ŠĮ±ĢWīŽ“ąāO€“N۟¶ii ł(~ć¢żćĻCŠą”l~cœāķŖ9ļAceį­Bž÷S°¶–¤nėūĪŻ3‘ė^3šÆįĒĘ/ų6ćĒžń–ž’Kvöņ[…ø?QS«Œ³;æ ~ĒĻńoĮŸ5S»OŪŁĖ-°š-īd23“޾µšĻ>&jŸš[ź'HP¹“‘⹆!¹‹FÅ[ė÷zWe:¤¬sī}Owd.o“ży„vś6”iŌ0Æ 9Ź·ŠŅŗż:=Ī8æŅc,s“’)TÄ+UÄ\šŚvļHµ×<ć­>DŽżcv”µ6™yłY~1Uģ5ė] ģ7sZ5…ü ±;I<)÷ā¼Ś•ŃēNW7õ}O–8'Ło$ yR?\W!yo§é—8ŲC+r01\k¢é+šCłĪXĄ\:Øś­gƊ®<Éē7I†'·JójāŌu=l=#¢šŻų‰%Ž-VŹXm§/,ŪĄ1Œ÷Ҽ·öŽ“ų‘ x÷Qń€.Sƾ‡OŽęY­‚ČlŲ|āā“ĆęńRHś¬uG½é’ō/‹~ų[®KhdÕ,ŠéšÄ,¹(ľsŌ×ķĀķG_ųCąŸÉąķgPŅtƒh.ÖŅlFr¹åGLdžuõŲLMõ7Ī0ī¾ Q©³gäOĒæˆMń7ā‡ˆW>Ä{ -jĖNXŹWō[žQń÷ögÕ?c’Śā?Ā-Ņ?õ >č+!ßöxefW[øY€ļ€+ÄĮņēgŻóg±®ĪNWfxÜ!Äō3Œ®Žg†w…XŻ=ÆŃļŖÕ2м2Ėŗg%żZŪ»ÖäÓķcfbīFU Ī+ ;ø¹Fƒk¶'T¾€Kq#dŲWğ|M©xā¶µŪīkWH`@yĄ^Ćčü+Š©ęQšē³gkįŸŁĆÅ9šŌōZ“ŚCČŲü£ó:nŪÖømwį/ˆü(šGŖBŗ•¢±I‹0ŒrqÜW©ž•*šr²>ń?ƙ¼-ćŪø45ģ·.ÓZ£œ„ņG~‡ń®ėĆśå֍u õ¬–WLÜ«uaėY:]OWśA蚼sÅ›…T<{V'ü„ųšś=Zɍ½ž2nł›ÜQXõ!G›CģoŁ×ćuļĀzŪŻųĆA[U¶_0ī•0ść¤ų¹ń&Š"ŌõōĻ!hća÷W²žU²ŖZĖ—1će½ŚB$±·Ü‡!¶ Ēźj„¶“ZÄĘÜJžƒŠRØwÓĀ(Å-Õ“"Ž6“däž~µ‘m<£Q–=æ1øā²r¹Ńi…ŗ¬°® žõnī'( ŗõ6,ęā¶óęqå”Pp ~•RžćľŌō’č— jŃ’īčč{R•„£b­®¬÷חwŽ#Y¦É&ь±źkvŻ„ ģxę³s;i”Ņ]2gƒøž”£ĢeG<µŅG/ā £øtłn£µU);•NH?\W„ü}ų{§ųWZš/Ä?F‘ųS_Ó×ķV¾c†uPwŖö0®ˆ™åŚ-ķ’ź°^ĻŠaN3“×égģÆg?ŪÄ:U¼o5ŒEčį3‚?^…ęńø…9=‘Oö¢š„§ĄĻųCXC/öuōAVE?#ŸF’Ē«n’ĀPx›ĆZŒ<9$R,’zĻś¦«Ó§čy0¬§>ēgöŸ:IÄö·Ą§ī‘ķ_9žÓ_³ķ‡¼)qńGŽźŪLø¹ŠP‹/R8Ļ­/d͹ó—Ą?I¬jsųWYµ6õ¤ku Ī rǶ;×Ö+’OŗxĮ¬$¬\`šMl¤æšżģŗ¶‡ztżGŽ äąē‘Ž·~*ź=ų¦Į«_hš‡ˆ|˜ƒM(½¶ø·’Źõ%$ŪKņ¹P~ö5ōo‡µTøE•CźFzf¹&™ŃF)lz•ŒńJ¤ :šmŹ‘ü¶]Łā²·SŠRŅÅ[»8āˆ"§–qł× y©Aj]ź86rĮ˜|æZ|ŒäÆ+;ń,ž³ŽŚ8%ŽŻå1™ūžUćžń‡SxĆ:LøłOp*r»>£Ņµx䎯ņ›ļ ļn55x–$XŽŻ§ž¾õ“ecš{Ųå4Ō—ģ,S`ņÆÓņŖ¤ĢĮāŹ‘ŲāÆU0jI£čūŪć/ƒžkß ÷Ć^)šv©nlÖŪQµ&[8Š•>\Šyąō`qŠš[“MGN[;•ŗ @Ŗ½8’ėWD%}ÅšŠĆŌ©ˆĆ/znļÕG†ü§źÓ­­õ“o·vŁ'ćė_Aųą±ćėŪKK-F(|Ļ-ä™Å8ć&»)ѾĒĻ×ā9aÆ›£Ö|[ūžŠ? ÉńU¾›£ųĒĀQĘ2tłHš=Ēļ<+Äo™$š×Ć?†Ž ÓUO‰ö.atYYr8õķZ:M‡āŹ”¹ĻĢ/ü=ų-Ü2Éąßü»Œši2„Qé’9ü+ź]"ÓSÓō脾ŃõĶ'PˆVāĪXŲ0ķŹā¹źQ{›,M9½ßh>4ńŸŠe‡ĆŚ1Öµ]ewc leL ä®9+½ń©6©¢IįĶGĮ~*³ń*Cåtk„&O÷¶cń¬ÖF‘öQzXś7ąßģ;ūax·ū=;ą^¹ŖiÖĖrŗ•åŅYŪÄʇó9éĪæfžĮ6ģ<5ū*|SšOÅßé֟5ynīĢŗmļŚwį3R8 ŒÜ¼G‚³÷ēŸ|iĮa(¬.[UJ·4om’RMė¶¶·Ž~ižĻšL½CÅž/ų…mń‡Å:÷‚¾謿*Ģ]HYŌČxE@0~µė擟üŸąģƒį=ąĒģ«šžĖĒ:Ž›i6ŗŒēń*Œ`Č~y'#'šß•E]œY¦w‰ā|\2Üš’R“ž»mcłēų±ńŸĒæ“WÄMā§Ä”¦ĆāKéTˆ-#·‰F®=jʝ+( *nPs\j&īNä¹lpųzxxķ—Ż”©¤hŗ†‘®Łk¾žM7P·L¬¤ą§½v,ń¦»ć+㿦ZŁ”#- |³0ž,zę±§½”„ft¶ŠĘĆk ‰ĮĒzčt}>[6óNwu Ž•ļ`£²?ĪOųƒėüCV į„h/–Æ’&lō“¹kT˜ŚM‡ū„GūŌŚ~›"’§33șÅ{0Słž®å¹ É eVrqœVQŽ>YŠ' ‘ҶŽē ™ŪųsÄ6åŻf“!G<ŲKéon[l …÷­Œ ·Žl0J‘/PGB*Ć\[ż’+ŅÅ%鎆¹Äs:ŹĢUn"ā9‡<ßCŅīƒŚ‡čj™Ü(Ö4$‚ĪŻį)?*žĆó«šŌW¶ŠŪ½Äŗļ‹"±qhfĪćī4”]Ć,qī;ŒŲ ~UĖxšÖĀĒIš@,ƒĢÄ$n\Ņ•Œe”óöż¢ŗ°Ī d±é*©<õ½ž-JÖxaŠqŅ!\õ_jŁD“ŌmŌ[ŖŹ‘XŹT9ėĒZóčb77QČ.müĀ_ö±Óõ§bdyū[+™cu'-žõ§įZnžŲÉK|­×ڱoSĪ»āØ.§—SC嬧ĢĀöö®bMT]Xäo˜}Ž™¢Ćåg9|5.ŗŌ5“µi{R[^ιž g¹zUr Eš’ ¬“ūÆ%Ā]ŪiÓ4¼o^W'ŸÖ½ĻÄ~“ĆĻwqć+¤ŅōAh®1‘Ó©·J\£ägĪ·:†…{Ŗ¼v¹”f¹Ļü,>•vĆN–IĖ_;KjĒ’;{~4œl:«‹RŚ®čŸ¦ńŌW„xSĆZ\¶ńIwœƒ·#q8õ&o¹CQšāI,óŻ–[h ·äśžµĆĖ$1E=†åHI$*œ`Še}2{‹ūYA³Š9Ż_ķŒÆzźōĻ›1›TpĮq’1A²]L¼×įń~™pŚžŸüoĢŚzztÆ HŅĀńm-m§Učtf£. rźŽw“ūAX\a”= iiėqäs[ÜĶ1ēŽ@:˹ÖTf”|¹ģk–ßQ·œ“OjŁłłĻįŚ¢Q°œ¬Q»būcTIä‘ȬɣžŽu\/”Ė–łzŲ©3^ŚžśŲč(tĘaĮ÷©žõšŪå’=§Œ“2)Üj1„,óT`ē§¹YˆeŻŠśPG“īā*/ĢNI©Zh°Ag-…ōóŽ-20ū§ŲŠ%3Qū.ę {“M³·øÕĮ“°›‰'éYŹfэĻJO ŻAjÉp“Ē pļ\#xvŪKi ½•Å«ęÜķźy5Ķ:©ĆÜé¼3šśO¶Ųźzl#ÉE"2G<ćßA_ExGþ.Ō.¦{Ż@]ŚĆ+å€÷9ķ^uj÷:į†7ʏß} >Ć÷LC€}žµf;Gŗ»4(+Ė©+1„c¢Ó¾Õo° xī™ųżįĘįź+”³ńęį½7VŃļ&±‚'Fm·į»ķ÷اBģ¶“üOńÖĘõÆ-ōKgĀåQÜp’īšł“U׊téüIƶ 6Ģ^IFģa@øÆo †QՙÉō?ddĻų$n­®¦‘āæŚrśėÚd±-Ŷ‡o2ż¦y’W!ä qĒ­~ÖųWąēŠük¤|>ųEį ü?ųeo KŃtĀ+§NŒūĪ2}*ė0s=u¾)ųį z'„4 Zx»Ę:ƒ˜mu‰müĆ uÜAĀŽ½yÆ<¶ųeā]_V‹Ä“_Ä}BĖmēŚtōӛmŗ’ŁE“zұgŃ!šnµ­ųX?…×Ćś+Ųø–I>ĪŖ×Į'Ļ„r>Ń ÓäŃõ ¼ŚĪŖó†ó÷|±’{6œi™:½§o-ü ¦č*5‹ķŸ݆ó-ܐaaļü}+Ļ– õ"ćtPčvP«/Ģ@fķĄ¬abyĻŗÕģtß:ŽÉ ń& °Jå¹ķW¼G}o£éÖz®³«[^Å!ČY†ųųū¤ŸZčŒęy»ų¦]x\-‡—§XD‡Īg™cÄyūŁ$gšÆĢoŚöõų%ū:źZͧ€ĢŽ:ńĢŖdĶG Ż7¹ęŗ©Ń¹„åŠüųżū]üiż¤|Kq«xćÄwv:"¹XY9H¶öwZłpĖ “³ƒ‘¼äć£Wl –ĒŠÅ”n`æ.iŠwE7æj³H›,cd!}ięŲ¹G1æ„¶)„;%•—ŠföpŽHH÷ RŸcN ffžf‘@Ę}ŃWmōń*FpvČõ „ŽÓMŠäqmu°_;ą¶=+ķļŁ‹öųŻūLj‘·†ü;{į 6ėS¾VŽ8Ęydćę>ÕĖVVZ›Ó‡sś żŸ?cŸŁ»öX‚,4M7ā—ĘFĶ}u¶b²>Lē=‡>ā½Kǚψ/5K=oÅϦiz<,Piöæ."Žī;õĻć\3Ōģ§”³²Öž&Xßx‹į°ŠōĖBĶ42ˇtRA ž{ēu_x+ĄźĒH][^ßžģ†GFĻOq҃©@Š ż/āŽ›ŖėW~.½š®­jD–ö·)r;ąœūq\ ¦µ©Ē¬mŪɓ\/GėN“rśŽ”įølģÆ5e–÷[Œ”ĘģDĒéŪ85Äyx‚Žā{«”ŃķĪq†ĮQķY9Šč¦ś’$ e§8Ōx{g5WW’ŪK'æo¶±]ź‘|åO”œÖ\裓ŸMÕ5ømē¼™to ¾LęFŲģĀŒē?­x‡ž$ųwĆdčžŃ.5i˜ÅŹ«āĪqž=ĶL¤ilł3P‹Ä>4Ōļµßė:“²¶Å‚YŃo”ū^›ąļ„ŚĶ\Ćö#ęŪĮükžs°åLś§Bų^tåŠxÖ8ōüq#.ӏa^õį="ĖI½³“KŅ`ŗ˜™å]ąē¾+nĘM4}”ų4j÷ķp¶Ö)+&J`.}…{“¤čz ‰ķ…µĒć¹­”Nāę;­wÄ;4¼čokrń‚ĆŽ¢¼ŠMAµ ūKdŃ˜jŌQ“č_Ń57Ó„DY”tē ® jÕvÅ0·¼ø^Z yśWDQ‰u#”Ļ ±±‹O•FŁōoC\¶µ0¾ŗ¶†{h&h@@Č eG©j‰æCk[Ölʂś{č֑a~]©ó¶©Æ›&ÕQļd¶žŁįŚ Ę=3YO±µ7„űkG™ö#D¹ōéōÆU:Ü’Ųėl±¬ē` ĜŠŹK±gž\X»»7ōČéWæįĄ—6ė \Ę„•ϧ‰É-ēˆoµ{:m#W†Ł\rŠb"¾~¼×§cGĀJĒ>į•ŻŠ®FL¢hZųāÖ_ķ‹Łś{· Œ9<ż1E棧½Ź-„0„éņ>µœ“čf折Ī!%‘v õģ*Hu;C4S~šē¾4FżGŹĢÄæu’cžš‚3Y7w‘¤[w•Ėš®kŒ%×ć¶‘bŗY™°„P‘ZqĶkré,ŠŒ2%y«$Ÿ_Ņ“ļŪ+6"‘Ā ‘ČČü+¦Ņģį‡L Ė*Ģ8(zV™—6§ā}] ³hlcŹI §'ńÆ ¼½ńV²ŅkO.fR8ܕ`Rq]ŌäkCņ[Ąś¼¾+ƒJÖüOw›Œ<¬FÓß<×oØ\ųb=`G`ūxe|“Ž7gJöjE­>¤ŒŁ®H‚ź;GŲY¾ótĄō®zŅę{‘5‚LČ%$ē;°{ž5Œbr9ö=£į§Ā];XŌgѵĶJ[4oŽ“ž„z<¾šĶē‡|=«µė®V4|‚ē±­U…Ī|ŻšWūĀž,Ö<%Æ?ö”…`aĘüä{Öw|c”ŽėV?dIbVq±Ūī–õ«ž§e¦Awį;Č ‰ «)  ūyčzםܤ¶Ku„#\"€ł*JķļČļZF]Ɋģ}/šĒE²ń‘:Kċ} Žœ\x?OҾ¢ų[©h’ f¾Y—“$‹ę ”`08ĻŠR™p¾ĒŅ^(ŅtÆxVK!­Ņ[Ō|yˆ/+ś×䧎ńŌ÷$֏{ž¶=ܐ öéÖ¾æŸā2kZm“-…²„–D' ŌŹ²–ę¾ĻSÉž č?¼+¾²Öڵ”ąŚ‘Ź`:ł“Å?³£&žf†£Øjqī …nųöøĘǘkśn‘įM/LÕ5ā#ҁņ’xŒĻJż^ųeįæ ^ü1ŅuČĆT“¾P„6Œ:•©ė‘“śS°Ļ†>'x& xĻ^Ń­Æbø°lĻhB”`­É××ĻrxbM7Rµ¹ÖQݜ—‰ŹŸ»ßüō¢Äsžõg™£éÖ÷­©Ć-µŚn€1čcļÖÆų"{¹5-Eķ^ӝĮŽåN;ž94ęx‡Äx†½Ø_źĀīa9šÜ‡Ļ–2pśV¶‘āMk\Ņ“ÕŌses b° …_z ¹Ži:-Œéu{q4²źB Čē0Ļń«¤Åż‘ā½3[iŚ[x˜ł‘ķČ`}’ dŹV;OˆŚö§ńģü? Ķö+-ĄÉūĢ=üėĮ>0ü.ńTz߆4õ‡Q:5øFaę ‰ ēz‘ϲÓA&BmCÄfćOš{ä¹·K)Óų‰ż{÷ƒO“ńÕæ†&×ō½&{­6źŠÅ,L<˜ūܾõźŸ ’kfŒx_Oń=č¹ÖīäW}ĀCŠčMl…(ŸyßŻŲź:v¬%¤Ö–óF|ĆłśW|IšŻ’t6ŃōĄo&ł¼Ø dĮüjfŒ‡įĻƟJ×µ]U·“OŌŅį‘””a—‘ī+ĄµŪ;x˜J¬ŪO;AļD€™ŹÆŹVĆ<ąWÜ’²ļÄČģķļ|{m Ü61Ļ—~ųģ3Óš®ŲĘčśŸqŁģbĆ8ĻZé4ō‰É:«Æ÷sҹė.…Į_ńÆĀ6>2Šc¼AoīŸd]…ƒŽzśŸ›ōƀdŌķÆ<»(mę ŽÉ»a"¼ī[=ŹsčT’Kū+ū »)d²»†U‘]Tn »Ļ­}Ėāc¢|bųucÆi%ljģ-BLąÉٲćžEn$śŸK’Į?k‰ædĻŚ¾?†ž%Ō,ģ~ųø‹Æ:\. ŪŒ1’T’¼}+ūdÕto쉒h§K˜§A<§üµˆō?_ź kQŻ&L·=?ą÷ˆ i.ln%ņћi ü&½/Ēž³ń‡«čņöŻE„cŃXr?Zä”5Š–šYļŁ/KšÅö‡ūDéUÜ÷O„x§Č€¼VļŅ)äĒŻ¹éšžmuĶ5ģīgVky`ĻČńœ†¦“¢­”…Dr ®ŒģA9į})ųŚ €½+Ŗ,ć—qŹØ2ņ®łŌ%‘ ©-nŠ+ʲ¦Õ2mÜc©Õg°–WĘrl ®Īā~ å[Īc’rKF”ßB{‹#yiwdI•XM’Į'š{s_Ž_ü'öŻ’†žżš4Ƃ?5Čįz|=…l.!wƬpR/÷†ÕU'±^~õbīÓG\^‡ī=ö’ėpźŲh_‘\.­„K‡‚ā?™23•ōÆ6Ŗ:#±šŽ|9yšēāœś¦P|:ń:}—Q·#1Ū\ćŠćŒ“Įõæ:?lo€v^4šŒ<9}g§źzŽ–Žóē“qdłŚŌ.#YĘV"Q?’‰^›Ą>5Õü,öRZŖH^Üć!£śūtÆ2–Śg64YČ÷ÆBœŽJ”Č™Ø‘ōØdYˆ8)ž1ÜzVčǐ­•Āī$‘ßҵ“č"»†ä²“oÉČąŸoĪ‘N6ŲĻ”ÜēŒēš¬o ,Ć"F9Ž”kbģ:„²F@RŠ:ēÖ§¶ŗupŲl‘Į¼‰āžT,d¹Ź×Ōæ±Ē­SąĒ’ųŠ-VāĒƗ“-¾”cin\ĶŪ {śLķ¦Ļōgųń’Ćāǁ<3ń&Ń¢F¾Xōżf8ŽDs…&®ōé“Ö¾“WilćœK‹~ ×%C¦™Zk‡æxĀ2ÜX\.2?„×å_ü«ö9OŚ£ögŌu{ ÷VųÆąq.„„Åh©Łżõ¾?‹*9܃{ž6õ,’?mOG›Ćåē†ŅāĢ+WĶR¤’O<ät>ā¹żJ°J²Ēó\ćaēIŚéŽ9Ön<:4[·ŁcåVŲ}ršŒŗe“ö‰ŗńƒyŃē|õ‡ņ5”Š&}µąķsÄZēĀĀ:»“N×TįćP¼ēł×‹'‰üE k7–3Ž4„HŖģI' W5$¹µ¤}›šóÄGP““Š|ࣵ}'¤ź’4hĢlĮąŠõéīpÕbė·>LM#'ĶÉĪ+M•̲6ŲŁqĻn+¦čsÜ;ŗT2yNCƒÖšy5³bWēīóĶhntšjĻŗ‹_)'­n@¶Rl;•³Ćīó@>"k#|`‰Z '±ÅjiŚj["•™d†O˜mōØē·¶[6€Āū c5”ēYi–±˜B8Św޹ØlŌtåŌ&¼ÓĖĖn^k"{i­Ź6rƞ=(ęčK£ėŠ1GåŗüŇS]ׇõļ¶,Ęx^)1—{ÜU) ō+‹÷Õt-RŹQlĀxü¦,€…ēØōé_8Ēi&<¶[IņHMŹ0zÕ)ĪĪŚŚxT”c‰q€kšøšĪ›Øėk¬Ü§:ĘSs ćœńM³h˱ŪÅż–Iŗą$Ń0Ų }įKm4ś…ŵå±Ä1Ą#­dū›E÷;Ė1.¤ńĮ,Ņ"7ČÅ{ łė\Šī­µŻF gŽī%˜„•ˆ•²c)=¶­§]x6BpPŸOQZ—QhŚ••Ū걞’ZŪ īTdžĪµdD2) ?Ī«iҼĪŅ"ł€6ӃŠVL.uāÉ"š0’«uēīÖf„d#Ė*‘ƒ‘YĶčm&;ė½=¤H™öæ”®—Cń Ż’\DˆūŠ“»ŠÖFZœü‹{s{ē\ ĢNG=źģėͼŒ„6¾ōŲÜøh'±…¢Ē™Žp:×!5Æųm-£—W¾Ó'–9ž•į’ōķ6/Go2Åg«·¹™ł·š‘ųŸŅ¼Ŗ¬’EķÉN+Čņ’ˆŚ·ˆ<Æ]x{P’X!ŽZ “?½Aל5ū žŃßbŅķüÆėŹ~˜åó”ć*Ü’œ}i@ŁU÷¬Żæ‡Ž#“ń>ž"Q­,{@ĘsōÆųĮ§Ł|<¹³Önaµ¹˜ nĄś×dUĻBäʇÄZŻõ½¦Æ„ė7ö÷IŲfŽR ‚OČU_Š>>¾ńBxhK n³²’\‰&õsÜÕø£¾¹)v/~Ļæ“/Åæ‚'PѼ'Æź3xDßCØI„¹ßø+†q?w tõä’šQŸx/ā÷ķ‚|qįÆZż’÷Į‰±œa'ŽG%ż »8õ$W<“>OżL§K=§›ŅŃŚJK»i$’;ü‚„¬ü7ųua©‰ƒ› ØĀBŹ:ķ'¹Ą®ü>1½Ļ­Ėó©FĶ3ćé| u”xŖOI5ĮńRČE¼p.1żĀ85µ£k3i"ńMį­Uw|—_ }£­ÜWŠaźÜūl»Y›~Õtˆ^*Óģ`ńķ“ż£ģ®ŠĪ˱³ŽGįśWźF§š‹žæ¦‘|×v)j18lŠGŽĻē^½8ÜĒ›ŹKFwž1ų™įļ|‡ąÖ™ąė_$v©:•±„Ŗ0$®{ó_|Gš†„=ŽŖIsėšLQĒt’ „ķĒßZšŠ>]Ŗ‘n\×»¹łqń/Āö>ųĮy©iw_bŅļ’[6žó‚@ĒLWŁæ~(xęćU“ĀśĻ•Ä"9FāZAČćӌדWCēó:o[ž½āæ‡7!±Ö¼>·÷—WÓł‘²yŒģ89+ģ*ēüÓWńŸĮOjŽ ńŪŁŽx^īč –W'Vlēī°ż+ŹĒÄā£f~šxŗīĒöų§ń6[„K’ėŚ–ÉįpĀ 9]{gfæ ¼0š_ĆĻ^éšéķ{ÅŌכ‚ŒŽłĘ}~n•…Jé+©ž½q¬\kŁYŲX\ÅkÉQ»!G¦jōś=Ģ‘žv‰²6²™+ÉÄf::CĀ~ń|a¦ė6÷ŗÓäky:”‘Fr3ō®öXš&‡ćż?B¶¾ź,-ęł¼½ “õW“<Ćws)Äō_x ĆŚ©ØĆ®^Ļiuś˜ćpĖǶģW‹ųƒžHÆ%–źį¤•bżŲ2ErTĒisj;ž7«k֗·Ų@^ː9­ż "öXtėčYZem 2ŲćŪ­x8Ģ{>ƒn¦¾‹į«m=īŪJ…`žA‰ Ÿ½’Y¬_ ‰> xŹļā†—yÆisžē[ӚVxēµ?|¬gĆļ;W,{]OØĀ>‡;ńoƖ¾,Ś^x?PkŸ…^4“ʑ,CŪHŁfŒ7N7)Øg„~øžĒ’l5jzGõ«?'N¶ß“øhćńōõÆÕøwķiFhõeGš“‹šĀOŁ×ö™ńŸÅOøøš‡ˆ^%ŠĪļĖ#!ČČ=ĪpFqĘyé_?üćo‚_üAšsĒĀĪóSµŒ]XßĀq„jĒåuĆ”¢¾·Ł.U%¹ś—‡YåHb~”ˆ~ė^ļ˧Ķ~E?1”Ąßü«>ēĶICŗšk'ŗÓÓaba$Ø#z×IŹBBÅźHąÕEו‰Ž¾šGĆMćVšÉk5–£7vn9š3’-ééķųW„~Ā<'šCöšųońcĘčtßßZ\Ś]K {’ŁęŒ…—p8ϱ®Śo•£ó®4ĮTĢ2¬^ƒ“źÓœūŹ-/Şå’ ųķ„|uż²ü[āĻ źqk¾Ót-Kž0B°É/^æ;7?į_Ü436y®¹TNW>_Ā.«“šĘ -ÆZ”ą¹–ö“÷¤¾M²ż³ÄØĢ7‡ę'·µp¾0ד·Ō­ļōŁåĆķŚ2ßÄHć§Rk–ZŸU˜Uč}¦—Hģ-PK;ŗĘر©$’aWWöAÖ&ńĆ”©¢)b]Ļv†ń”‚Ī zŽõč X5ĶfĒMžHŅId ŠXÕĻe{ÓĘņ£ėx>č‘"Bö_½ž=Ć<×ymš_įŽ·įŪ½Všf“s,ƒožAŸ~ÕÕ'±ćbs-5>Ių”ū$ųņĘm"Å®¼­ļ>EÜņWެėócĘ ž!üńŖxwĘvļ©i3`éśå¼gģ÷żöätlv¢t‘Tź©.dz熵¤”BKm\€=«Ö-µń4%ƒ.}k’Q±»Ž·7,!ŒDķ×*|EšO‡¾#ĢrŁĘŌ„c  ^ÕŌ±)č|')Ē™Ņm6³tæų*~¤–×6śĻĆ{ZċäIeJ®wÓŪō‚æą¤æ³’‰Y4‰~3m?Nž5a5ʁ!“Üķ=żæ*ź§(³ņ~ š’7§zøió5ŁŁž'Õß æą©_³f•ā‹ ŽźæN£ł6ž#ŸJxw§8Üćī’8Ę@ÉōÆ¢üY’RųįæŻh ń·Ā«ķ ķšź4>”Ē8Ėd®zqĻZī‡)ųnkį¦^æļ!)J][ŗō½ģ½³’‚ß|š…Żī‰¬xŪÄ?t—B-WCӒ;›lō9Ī9ź{ןųĻž µį[įwŠü/šæĆ’ōƈo#GaØźVé&ĀOÉą ˜īy«œŅŌ¼Æčē˜Wœjb\aÕÕļ+uŁ5{yŸ‹ŚĒķQūWx×PńińĘoZčŗŅÉö» Y6DKšŲ¦G„yųoĆśĶŖiŚÜr̈>K†łtlבˆ¬ž‡ö/p®.‚§ƒ‚ŽÉ÷vŃ]īžg^xWZš„±^ŻÄ—Z)f0Ż+d`Œ=k¾š¶”§źĢ«iqČĢ3Ņø$ϵ£JĒ«éń[DĀ7|ī8$Wć;Ė- õ&āēŹ`t2Ģ ĘqśÓ§¹£V¹‘­ĮŖŪĆydū‡øäc¶+Öü«ĆØ_ÅkØĮ䓣‡ŽÅ};åˆX˜ŌĪń• ļVv}żē©ōUŸŸäŪCy8Īč1Q_čārÖöšØĘqÉÆV”łķiqŖhOm)™­ńóī+‘ńĪ³RA$ :øĘ Ž;œfw†4­·Į.dmRzu5ŲÜjfĀā'WDŠ<īūÕ±”£Ō·’ Eް‹ ČļœäW/ŖėŃEtbŒ1IčkFijj=e'Ņ^5†•ø8l“ųW'ik$Ņ›”ŻnqėRsIõ7eĢάų w®K*ńy&-’)ūŲŖŽę ™šŌO ĈJƒŒY¶÷6‘Ģå2¤å8ź+b%±—}g§ I•”ryŚpk±Ņ,]ķ÷2qĄ›·Śæö•$7Q‰Ęļr+ŒmB×U'sõ¦`Ź·ķģB?&%eéĶrēJó ¤mŽ‹±N›kn0 Ļ>Õ-žš&lŸ™Iü…"yNŽĻH°WS9TDlēÓŽ»[}oML2üļ‚«&:ŒqLŽC€Õ.g¼†u™ė\„ę§<¾Ļ÷qĪįA<ŗ…ō·++³F>īEY»šÕöµŗt»—yCFA늨ǩqĻ€~.x{[š—‰õ ÆÖĪki›Ė;Fp0q‘Ū­|”ošūÄSėĘņĒPTČΊ£k0'€Ny­ŲŚ4ūƒą’]0Ōü'ā«-BmR×qŠvć#=½GJįu_ė‰ā²ļOĻ–Có ā±bk”čVV«{<Ä<‘ŲšĀųƧÜéZµŻ¢\\LņŲWtüźLœO šµ¶§vO•eĒ·zĶ­u%£›Ó¾ź6ŗTŃß]DdŠlBNÅśšęåÓcŅīKHęFĘ*•Ī¢]j÷WŠĆ·„’JĘń©(Ž”ŗ×%§Y ¤}ž”LŽ õļM2]¶<·RŌ/tŻYµmO²ŽīK”Śø9é]o‰ž,ų—ĘCNҧ"źśx“ ¬®U¼eāMJx÷?Łī:0äJ)S»Ö~9ŚFRŪM„ā,  ņäu5󷋾!ßkM#OpŸhy’sy'ūøœ×·C hŻœÓ’[ižĢŸšM’Śö¢‚ßÅŚī›Į’…-›ūSQłn.7>\|Ļ'æk~ ~Ļ_ fē°šGĄÆ[xߌ°ŠļÄW‘‰dI;ŲŹsœž±®©>ˆåœ³u{ ųVÓuÆ‰×śŌśŅ6å³F!V\ŒēƧé_šxóć–ŗ„āŽŲxKåņ]X¤„zć¶3Ņ„#&zo>č– &žtGŽEVH¤˜p®ˆ\׍­āš¬÷ŚO‹,ķuż*ą*¤P~ń‡¾yVŠĢfzEµ¾£«xrĀQ5„ƇQ<—·q¶_,Œś÷Ķr—ž©įķć±³K0A·™”WhĪ0nøw«ŒzØ÷6JZĖįĶj±“ž,·ÜL§ #``Øź;ń^ey®ėw:œ§QdŅģ"9H²ž¾õ¬V—5„O-ń·ÄO ųw\‹Jšß…®ķåæ ÜJ°’9mŲĄä{šł[ö™ż ~ü&šäW¾5×üżBDO›ģQĶtSƒl%€?µķē®üf’Ę×į¤÷~Š“åG+FįFFҹē=kóV{™“&¼ŗ˜]j1f•ņ[žø'šōa õŸs+ɖVe9ĄÅSdw>k’ŲłpjŅ8fÉĒž¬`ā”‚ÅŽĻœńœcRIhc~„ČĆ2³>9Ēz•0в±ŚG?…@¤ō-„£˜Õlg·õ­[]=d˜6OįJFqĶ›m0#«Hv'RO„{ļĮĻ‚_ž4ė¶^ųQį[Æx‚į€ß% µOļČż­sŌÆcŖ•#ś!ż’ą– >Xčž7ż«¼CećƒŚčvˆ|˜\Žp¹Ė£°Čļ_ Éö”įŌÓ“Hģ|š¾ŠyyH|¦XĄłq’}G’®ø§Rģķ#ē­^äų.äY|2ŠÆ|W¬¼†[}f8œ‚sŸ™ūr;ŌžÖĀźŚˆ¾*é:†„«œ RŪ•%ŒŒōõ©¹|¶3lü]k©jSŁhņų~Ą’DJ<° ėņē„pšŻö†Ļwko§}®īLæ˜9ÜūÕ9t4Lā-­­ēŠHu‡ņ Ńr_±’“uZö? ųRŻą°`TÜœӃüśqPäŠQ¹$w‘į›ĶļG»ÖüE$Œžsø;p„~'Ž+‘»Ńb¼°†§xŗ~ž§/`é¶¹j1ŖgŸ[kڌ’ź¾šŽ"écę[įYrN§½rŅüKŃ< r—±Żx“_‹"Q¹UĒv\cż+3HÓ8 sXń_Œd:‡‰5V·“gó!¶‰Š•³cłt®ZźĀk˜c¶Ó O½°c­7ŲŽöG¶ų3ą=ī©oi8Ņą€^V+^Īæ ”šf¦-Į³Õ™UXŗrć ¬$ŒÜ¤|į cĘÖ:vŠt›{'PHuPN= öõÆh³ųC„hIi7Ÿo4ĢJŗ"Ė^)B=lėõĶqn£@%½ Ā¢ć䌦ƒćõփ¾“,Śtj£s{’Jꦈv±ÖŲéOØ$–śŽōēåµ6ßƶ֜„É4ėpƒYUŪcėŽ‰DĢÓ½š›X]4ÖX𐠣ųMjhžū(šY­ķ’\|ēUąśdÓęŠ9O4ŌŁ%¾ø·.4b–„Óķf J· ‚ĶĶ/he(Ųϼš{ÉšKMĻ'=+•×"·ŽnÖ,€W•żjģŽn 5ēhīģ^Ąz{×qg (‰X~čČļE‡} oiÜÜŚÅ Eköp 4Œqµøźć[žƒS7‘ŲŻŌ¼CńšßHŌ-ģßAœO5ŁźBõēµģĻ™u­sĘPükń?‹āÓiÉäÄ`p|¼o>܊ŁńKjś³Üź÷±‰Ó÷™č÷‰ „O±äŚ>Ŗé^#døÕ"{9‚©?)R>¾õōŽ”ųCJšž©iåĆ>”ęe€ $āŠKSgĄ¶n•|Ś•ŚÜ[Ū)%zķ’9Ƭü]”ųKXų?.£ iŅ D†)pļ–”Ÿ—¶y1»\ń‡^2ń՞>•¬jņ2ĀÄD² ”^Ł5ćĖ„jxšėZŌ-—T‰g,.FŌ'ųpzp?V!Åt9XXxŸR¹ƒĆ7Q³ z:… {©±~&hŗß†|#cc`ŠĒ~¬7ĘĢ€LØ„Ōźī<£ųļį6Ÿ{¬½ö‘ā&„“wclŒŻ$ž"°žü ¶šÖ·‹5ķoūFS6ŲbHųF9lńéNåÜūĒ‘ųkP‡QŅļķāmbEDL. ]†Ó\wĀ=ZßSńN§ąYÆ­„Aäi› Ƀœ×"ęE ]‡ĆŪFÓnü É6y哓ĻčxƱ|]ćĖH¾Ö¼=ŖŪ\LQq¶0BłR=i¤~Mjś…ĒˆÆµ*}&]CO¹„r yxg$š}+ōēöuѤŅ|§é)«Å-½£–’·ļv:{…PŸ“ÕģÕņn½—vęś L¢yIņböÅ"d*דe,ģaYŒIŠ*ē#øökƞ.’„nõaBYKˆÉģ„š8śš ä=NūPŅ4čĪ«vŠk6j *™`.kŵ_ŲŁż éė˜ŽYxéŸJ q±JŅļWŸJ‡\·½¹ˆµc'ƒß‘łW”|*Öµ}NY“­~Ņ;Ø|Āöņ‚ąöż5„3)­ 5׿įÖÅävq¤pČҲžw€yÆA]Õüu& c–XKDłJćłŏpEz"ČĄ Ūzē?Ī•T%ŲדµKˆēcK—qĪļ¾ų„įėßųÖę ŃŚĘ`na”ÄQOU?LõÆ>«¶†°}3ūÖ§+“QI7–BTt_Zõo€?,¼'ćY4bĪIō;õņ¤~ęxÉś‘Q t7[ ń§Ą‡ĆŽ)»Õtū9-ŸzÜi’••ƒł›šÆķ_ž 3ū\Gūa~Ēśń$b×⇄ū*ż7‡71ĘŌ‚ {†õ®““‹æAßCō6Źķōė±-«ܰcļĶ}o¢^ÅÆh‘ĢŅ+¶Ą{ā°ģ|#ūBüš‡Ä+Æü/ń¾”/<ć.ćHø˜ž‰y“łL2Ģr@=›mž'ķš?Äß³×Åļ‹?üfņŸxWSh£˜!m°oš€=™ ŸĘ³…6Ŗó_Fæ'’æM:œÓ>b¹ˆUchŠuē­R(͒ņ:c½vÆ3†jĀ\*‘Ś”Œ aÜ~•¹IŒóVI0ļĶ(VŒ‰ eā_½ŽI” ¢V‘[hXūdō« )óŃēxؔ»Ķu–93 3!Wٟ°GķY¬~ƵēĀoŚ8–ćĆ7®ÆŪļķ$ 4ī™ ;dR¦×2ęŪ©ŪOĢ’KĻ x«Gń΁”kŚ妣įķ^Õ56ā'²Fź ƂF=ˆ¤Ö,žĪ‰pĄ™üŲōÆ>¬„xOğŁė°_[™?ŠļāŪ#żD£”Ļnq_œ>2šę«¢ÜÜ?ˆģR}KNf³Ōķ¤Įóa9]Ųō#ņĶs(źóo’?ż›/ü/||eį»HŒ0?Ū7Ē÷®¬ßœp9öĮÆÅ×2§ŠFx[žNv×VEfeQ-ŒėŻČYH+€2)“Ī/”’½ė¬å+ĘV%Sæ*sŪ½hŲM¹ędŽÕĖ`qzё7Ļ)u-JkźÄĘ’ZÖ˜p"*zóKó0Ģ|éY²¢ģH“‚Hś÷­ķ·Ū=µÅŪC ŖČ²/މB§±R;i3śĒ’‚ ~Śö~%°ƒąOuĖ»½^Üej-y I&ŒǽĀēА~¾¼’T¾ń,zķö…£ x§C‘SP·"[vūĻbņ÷¬jqÜé.5&Ņ5km6(L6÷™x(qÉζę»ó¢Žš%Ä£ŗˆš$ŒŒ0#üöÆ>[š(ŸĀgüöŁŪćäž8šu„ķē€5ć.½£É3–Tw|Ü[#Ļ–X0®:ć5ų‘}k§§=ģ2"J„ēŽ q‘H«÷†¦Uø’Āõ„‘VĪ1^Ļ?€l!¹³A41¼nūī+õ…IŲ‹YžÅąé<)Ø½Ķ¤¬Ąc1“•ĮĻ8ü•tųĮŽ*¼ŌüA­ ‹[§³vI]»d\•÷>•ęν„̉q9’„ž(mtЧ¾\ 0\䁞Ó„}×įmpI ,¬²°œ×½BwI˜T‰Ś›æķ(.¼“ŪĄĻqY2ÄÆ„SµG×dw0ä3~ĄūČ+œr:ÖŖZ˜ąQ±€SŲV×-!’ń2ŗt< ĘGa]-„‚Ūé%\Ƙ¶ćÕ³YŹWŲ ½sHKĶ-§I†ō`xļķVō;24ՙX‰ŌV`sSź7×7M¤å%Y°$ņ=+øÓc½š2ĪB¢™OzĶÕ]¢ d§<Į¬H£’sōŻ)ąüTĄæ ÜYˆnD&4nN1\§öä¶2Ķo?ŽĄ­Ņ)ĘĒqążNžī9ā’āV`å†OķWoMą†pK9Į8 qܵ.“xĮšv0ŽA•Ćjž!‰ øK)Ńīacˆ1ŸCéYĢŁ#3OŌ®u³8\©Ć`שxzž6·0Dūp~ī9ĶL|Ķ#[_¾Ö4;>˜ä\61pžõįϬźĢw]±»¹YŲ.7sé["ĪÖ SūRŹ$6QOtŒu *Ø9§~€#øŗŹ8>ü½i?öJI Ø 2ģ Ž’•DŸA¤jŚJ²ĄÉįN:UZy­”%‰u v¬ßch«ó=ŪŖŖfR*ŽQ,dć÷æĪ¤”ŹĒĢóIč: «q+\īäax"ƒHČ®.Z8¼µ,"$ †īåNÖ@ŽP Ž(5ŠŌ©-ģ¦"ŠåPöõŖÖ3Ü ²££Ń“ŲŁ%+Ązt«}Œi žfĒŻµŒ·4‹: ™#»Ónā<©zņ½CGA(å[āøźģm‰Xćl4÷¹Ō*¦|±VP~ņžüs_-ünųQØ|2ń-߇ī/':}ņWD»īœīh‰Ōž™Æ*¬Oōׇ‡²ŒVčᵫłhO…לé-’ #E+ui$<µŅ??p_-¶ėŻOrŚ]ō2GaWÕ¹\v؁ęŗ>ņ±żüż„“;{½ĮqZ¬ŠŪʑŻBøbÜgqīz××üŸžģŪ͚„¾ėØ[VP9~&»a¹ģa©ņ»žEąĶ=ōŸXé·ń¼|§Čć Voˆ<wóßEóĘG§AU=NTYĄ.­§xYŃ|C®Ü=ŽįīB¹Pƒ®}«ņ‡\ńķÆˆ>1üRŌ,o×T𬺬§I»Ūörsµ{ątü+Ž­Kj*ĘēÖæ|cc«ųužj—šV± ‹Įp7°ó >‰ķW¼u”ĮšßŖ_ڳZŽųBõĒŁīķÜ3[©8 ųõ=ėĒÆVē…‹ÄźŚ6¾&]ü;šdŸ üńā×Ä^ ńtŅ[Į Ācɑ—ƒŪ’;Šü¢ų­į?Š?°_Åyt‰¬µ;ź·/‡nÆ#co:““¦ģ0'Ҽ:žöĻ…ĒāżėŸ³Ÿ²·ķą/Žz^… kZUœš¤ČįžhŸŽ1žĘ½Ÿ\żŸō7UÖu+»–ÓķL· ##AßłWŹb®®28§sēOÜųcÅź«£Ž2^Ł]˜Ė)<`õ½}©š6ÓJŃü[©Éyaåµō+o&G$ē†ś×‰R³źmOFvqü$ń'‹ĻÄJ»˜Ļ÷!~ąŁ’>µāų¾MD¹½µ—Ggó˜ø_Lg8Ī8®u;ž–¹ĄčW3ź¾ń&‡y<–wX³x†Ł"Čä{ōżsÖz6£—%­ÅÓ^)ł–G3zö0Ņ>«;£Ė“k¹~üTš?ÄŌšv‡āˆ“KĻ>īŽxŌÉwlxtV €Ų$ƒŲ€kģOų*Ēģ{šŸĒß|/ūh|Óæ²4iī„ °łS(Č#);¶įų×׹UļsĄāÜö¦_[ ˆęµ9O’KüIŁüš?—ķ/ıųóE×-ÆRÓPOµ¹2Ø<G±T³^¦’~ Zx Åiy &“– ³e~é’k½}Ļ»„Ž÷ugĖ~,š¹ąū—0ŪÜK£“Ļöw ƒ$ķĻ·Č߬zݦµ>„$ v-e”nŽBēUcÜö#5(Üü|ųż{™šg5#ūB×Z½»ńe«Ām_ķs–{n00{cŠć-<;įė˜Ę«{ŖĮ$LåŪ8x€čztƉvÜąGSc¦X‹Å‹MēgŹ ē)šŹŹāi<ØQČ ‰žGÆ=֓Ń+mų?BūF“öž'tŗ²˜ezƒŠżq_xėJ°M~ęį­ēV³¹xĢy!Ysߌ±©Y¤tRHó K‚Õ„MÉķ¬gżąŁČF<šęōĶKWžo~\Ąģ"t$gŠń±Yķį¢zǃuQ!łäUn‡Ö½&śĪ9•n#hŁ\a—±ü+’Oxś<Ō󉾸׾jŽ ‰Ų ¶·¤)åÓ L§¢ÄązņųĮ’į)¢ź3F ”us‘_«š.&š”GłŸgƒ„{#ź_ŁĘRk_~é~„źž+æv²Ō­!lPsē0ģO­}’ųGc¢ųĻį—‰|GŖŚ_ųÖ i,›Él±ŒäŁē ÆŅ£'cépœ°ĘŃQųžćį³D0rĖõ5•3•—ģĢC§ššČżŪ Qņ«–¬- rwØ`q_zū«ą§ģéeń/Ā–Ž!‡R‚m²<71#|ČGØü’*ŖZŹĒĪń–{,»,SWJߎšŸ\|KųįŻCį¦¦źŗ…­¬fćIdźvļŌ×ć÷ˆü {meŖź¤5Å­„’*gģܐ¤ć  p}+zŠŪ˜x}ŒĘʧµé+ßü]?®ēąMAīīÜo‹FÉn}k±ŌīŚŁ&;6¾Hę¦2gźNKb¾™w{ŖéڤMim ÜJ®ų võ5ń®¹ć[‹\›d–;„UR§kÜžŃTć –ĆHIl|ĶńoįOÅļü*מ.ų)/µ„V°Łźöƒ.-‹ ¤gī®õÉ÷Ææ²_xvvӑSP™x?+.3^n*””Źš“c)F®ž¶ļdõ󵟔Ęųį·‰<]§xƒWҤ’uÓ’×AŽĒšėڳ­l­u$Żm¤©ŚŹĄąƒéōÆ­>ĒŻą×K—l'ŸEøšÖTG §Ė#œq]ׅ/-9£ž|ĪĶ’¤zŌÅ[C؆ǢĘČėŌ8ž•u! ˜<ÕF}ĄjånÆ$1–Ś=Å\¶¶r„؁ŒbƒCWlLõĖǵ?ģźŪYIēō ™;ž5ŗMĀzά¬3  :±9éłS?g…Z׋¼5āŒf±s6³¦Ż,2[«r7o¾ēķ]”©Üņėā9Yū1į#Žt K_éÖZ–Ÿy Į{e:+FĄ® šzü2ųĆš¦ćö`ż”üiš¢Ü\·…&aŖč„˜‘¼„ę,ž»NGįZŗ&ńwvGwctĘ yQ„ŠĄ7ŌłM“&Z@~€WŸZ6Šö)NčńĻx½fŌ—Lh<‘ĘæÜzÖ_‹Ļą/1]Bh¼¤„ōaœŸéś×9ęb§kžsū?Éj×zęØĀóÜĒf$¶|ą'röžbæJžkQiZ’£½ø°»Gńģ„āq5u’?]“O éŽ7š“č÷Oå[ŻAµ×°xÅ~|Jš7ˆž |JÖ ‚;Č4yŗŅu\¹Šzõ!|īI_ߔv~ƒüų™§xĒFM:K•}NU'!Ō½U>:xfūKŅ®`Ó¦·²Ŗ‹{f”`6ö qłšr½RU=œœd|ķ’¤š_‹ž KūxZšķ­ŅbÕĄÜ³2B”Ż×ŖH’hWĒ_ u{·µ†;ˆCÄYN6ćŌ欬ģxŽgńŁtq]Ō„/ż)wÄ­;Äooį?ibęŅŽYįĻ2©Ļ?†ļóŠūĆąÅ“sįˆ4+ׁŽ%Y!,dJ×M'd}jMÜś×Åŗ‡īžüCŌõ[Ż<3ér$1Hćs6Öū×óą+G“³‘)Zīi'¦B@„VVG,"Ó=ŽŚņ(ī”·ŠźY!eœt8äW”ųwKÖ"ד˭%źL²F͜c<ō®8½B½M5?Tü7}>© č÷­œ6ŗÆ—¶įcū¬Ć7ć]žš„Ų R ń^ĢłŹó¹ŸćĻĆ«éĪHóa\Æ×Ć~_|_ųi­ųeHµ‹wŗTŽ>䩓·×Ÿń­ē{UUģ„~FXų¹¼-āą’‡Óõč„hˆ9 +)Į OSĒJś7BŌ¤¼…D{Š©ž¦¼Śŗ*ŹHõ >IƒÆĢŪ;Œõ­+™å„ØNWż+œōi„c Ćśf·®jńčś>•w¬źs—uŠŽģ$ćŲU™&m'Tm2žŚ[+ōlå]¬§čj”YĻWc~Īģ<¤`­Ņ¼“āMž‰«ųƒI²ŌVdÓę ku*§‚B†>ߕk”åVµĶ?üŌ~^ŚZŽ]5ž—töW€ü’)XšZ‰U¤^W„ éœU)¢µĶŒ@õ4łDeB~o­CØĖ£Ew)ÖĀ QdAČSҼÆPš•Ī•&«āoZÜA|Š„œØö©ēg”N’:ļxŠĖTÓ­nm/~Ó+&e^讆¼ēćWÄ]Cį’‚uŚi£R›!6\‡\Ż}3šė ®ĪlĀŌčN£ū)æ¹2—ģŻćwų’ö¶³ĒingHˆŲĒųIÆøG‡dŅÜ;[}Ę1_UIģ‘ž;biźł·:ė c]øƒ0˜ī`‚q‘õ®»G—Tl¼ģwķäē„t-xXeŻą¹†}2ąG¹²}ńė^O¬Ś[é®ęÖv3/śščL⓱…įłā7“¾„ę6ä#*z7c]mę™k4CpER:śŠŪ™9\§ƒmb­ž¤ćåķ\ŠtĖĖ[˜åĖ“G5•Čl„§ŻIOĶņņi4Kw:‹o _3N¶„J#`įpT‘\Šu/ė“ZAutĖl’åP¹ķśS3”ŗ©¦kÖ_Ł eg¦GŲ„`csz¼ļÄc÷귐:7<ēփ#%GP’łÅuŗfØŗ{F$Ź•9ē Œt?ZV“Ń­[23D9œcéWfÖ~ɵ+ŹBNš½Le¹·į{Ę×ī-6ū̉ÉGCŌŌWŸųßĀ3éziÕŚå@@\‘ÜŌ8 ö<ņ V(<GŹ;“Öŗ9V-F($ļõ4 +œęÆį·[ŖGns ½\^Õ«o%Ä+x¤ s’;Zōޟ©ŚŚŁĄ–aęeQæ#Ć®?*åõ]V=OSŸQbėpü0rqļłÖS`j鶖·ˆź×'<‚~é®gRžūĶ’ŽŃ®5`]¶’Vo@$°øµŗ+’Œ0KŒ:ĀÕ<0¢I^ŌīŚŁ&š`r³čŅMs — ­å¶@Ī šō1E…“(ӆøĘF=)‰³©³½·‘Do"$ĶĄÜĄų×-«]¬sH²“sĀQĘ+­LÜĪGS·µšxļ f@ŻØŖ-pd³”łCļ†Ōj[JŹT7ŹųéŲŌæl1Čb‘s3œt4ģfÆ¢¼¹P»=U±åŗßÄ? čńOw}IsÉDFĮē¦+äxņmsXøŗK”†Żr Į?‰®ŹmøN”«š{öuųįūUx³LšæĮĻ ß=¬Å…Ī·2•²³€ÄɌ=&æ”ĻŁ—ž „š?ög:v¹ćˆōæŒßāĮŒÜĒŗŚÅńŌ)Č${óōė]³©„Ži\ż6‹ĆÓźöÖś‡Ä?莊m”i¢Ó¬å_*HĒŻMy’ėÕ õˆ> h‚Ēö~‹JšżóĖöfŌ¹ł@ 1>ükŸS>FIą’j>Õ$oˆZ•ÆÄO™r†įw"æ@Us^•”ėšMļ'š£üLŠü9ā›·'@ITIr™ū¾^?–+¦$ø“}ćjĒį{=/Į÷rŚŻ?—wwcl,|õėĘ|c'‡|;5Ę”¬õ­ÄĀĢ@ŚO”8ⷊ2”{ω4Ė;_xz’ū{OŽŽtYe>ь’xäs^ā?ˆZƒų†-?Ću“Ŗ‘(ó•$ĖŠüŲūÄVÉ"yĻź1Ó<9u5ķ½ķķÖ„2ł’YOó,$«“ŠśWųƒā†Ÿ5ŗxŪĒ~.Ҽ7įx·e.,’mäģ_Ƥ!}Óhüyż®ą°:GŚ.|ū9i2/“!‚ļX‘kØܙō5ų)ćω8ų‘¬źŽ ń߈µźWSŻ;Ŗ=…zthŁ)w8Hœ#ę%¾źŽ W–)¾i]2 =+YnrT•ō W9†«”÷#©ŒtéPrKr“ĘÜøß½Õ“®ŠŹ¹ĘqAŒ„©~(C€7õé֝¬²Ż„x\g8ėķA„ŗM¶–ä)‰?xH­iŚéWRŻ›-.ĀļZÖߐ““q…P9ėYŌ’±“(Ÿ°æ³ücā'Ä«]7āķyĆ?F«*i²0I§Œ€xsņśWīĄĶ/Dų_ą}SĮŸ³_‚t(ģtŃä=źĘF?ŽßÜņNN ó*juB“<¾ˆĻ§ųŅćHńrŽk¾2v% ²y«ƒż¢Ē;׭麟ü'’jVŸīītC0łŲ䂫€gģ΃OĀ?ģo4k|6¹M7O4ĪĖ"ō·æ׆źņĶ ėz„ÅäzĄrYف!Ŗ”@óy/“ÄŚÅēö椺CHęUČl “}5ä÷zö±§Ķ>į`Śö ’²Ž„wzńŪ46Tbw:­Ž™§“ZżĢ‘ė/µ£ņŲ»®Öęž"ń½n!“±²Ó¼+ƒ2¬Üu®y%ŲÅÓ5k›KżšĘ’PuĄ-óĻ\V?ŽzžA¬„2Z±õ‡|%=•…¾gmŗÉ܁€½kź_ ¼4·6:ƒoK–'ĶGē'Ō{{T™K¹ŃéńZč÷,‘`*R¼VüFŹ[˜ä»¹Ü?Å39HōmŚÖŚę)§+…Ļńéuo°ŽŪH"1¼ƒåŻź+Ŗš2ēg’Æ…įū|³nm„qZē¼Sį«}6Õ®å¼ņÜšį¾R=Į®ŽN„F]Ī;Fų•įū(ļa»o¶,kµ L‡µĘx›Äś~¼­$3N®Æ)å\ņ‹:UŽ6yåfŒ–oāē5ßi&„©Xß(‘mö)#œØ1“G%½žxeIšI94^A%ÜOs#;HēĄązmÄĒŅl翘 qņ±ŚŽõŌ˦\ikg}nfGGēH|Č˾kHäŽ;v·v ūēé\ó\^E8øŽFĪF1Įė[AčC™ßé¾0•¼»ifpˆŲ<šj޳:ėp–±†i:Æ8ĒzŃ»ŠRźxģśv£u~Öį.#UnÅk[i·R1µc2ä7PG½g(lš@ dŗA–r•‡©­ćĀaµ@Ģ8v‹] "ˆ4kmEmž]NŁĘ×#$c#¹µø²—]³k;e$$Ņ'Ž Zō­Gšī³*é×óĮ˜Gc<œlL˜ž•ō¼ē“>wŠh<5ŖjŃŁGöØćˆ&ŒąØJĶŅuNīćP¹°†+U1n<7ēӚ²”‘õׅ|qw«ŪYA£NŚv­4 Ŗœ|ącóÖøY<7uš’čęfæŌæz²%ćdŁČ殂¼Ÿīüuā;W¾·Ś-Zy dąc Ļ§kź_ŁĻUмI5‡¦¾•šƒtæhćI—Ä·܃%¤’žq$œ±üqPk®|³­źZƒµ}^ ņõīÜīļ7'„gx«ā®»§EišŽĢPĒę;Ģq€zö”#hÄą%ÕÕė ¾*ÜYĢ/쐻,øEcĮ*{žU¢])åćæźž!ųkā_ķ;-`¹MäÄ *Ź==ńšų‹JńW,ōo ź:v F¬›Ķȓ*7†Ą$VrźJ}’Å:§ˆō›KŻ*ŅuŒ‰dˆa\ŸaҾQŌ­µc}x—{mćĖÜ-ļŠ‚āś3Æš®±k¦hלfØn%_*CAü}@śW§ų‚ÓU3E{“›‘ć-‘ė@LōÄײ]é²¼,Kžź"y#żjēõßj^ńz~‹¦Ļ46Ų¢ĘFPœeMT70{ŸzĆą‡>%ųi¢xŸEÖWÖf€<± <ĻāB;cŽ½Ćą‡tCį-Euyæ±u‡ˆE’OUĄēU9ō!į¾1š÷Ć{[½ó{9¤óqn\ŠŌ`WĪ’¬|#ā8ųÆKÓ'¶æW;JŒēóÖ³¹Iö8’†Ž%Ö4‰®įÓō¤ŚĪ ¬ß.įžq_Dxsö”±šļˆF‰4 öß%ā’4 |Åxݟ|Ā™¬_Cē/i:Ä?Šp]Kg ™ć-(RŹPĆ qÖ½ĖÄÓWNÓ#ŗ…–hįX¤iż*ļ`r<ÆG‘<©jWŗ \[<±•dƒ#ĪėĘZōĻ„÷zF«ńG»ų„·Ś7”/ļs»k/=xüź\‰ęgŠW0xGʞ'[-=Kh†C‚w2‚0 üq_š~ųŸįg‹õ}_PÉsq%Ķ®"XŲ’0}ŖI>yŌlEµÅÄF ŒFzv¬Y`óB!Uڧqµ¼ m”õĻģéń8i:Œž½xęYń1·F8 ōÆæō’;ēŖ±ø8äöõ«© G]a*C±Ń·N9R; ó’‹ž·ńŸ†£[‹k‡¼¶&HŻ?0IūW—_sjkSāÆģ«ż.&yR‹³€WŠó^qįĖ[0AXšyńĀzŒōK½.mˆ®„”“Ē  c9Æä?ž yū5jŚ‚/ķ%a`ÖŚęZ/ŠæŃK™­·“;Ę2sšĶŌź‰•3łwń&–ö7·d5“¤< ¼«!5Čy{^?1šGA]Qw8ŖS#.Ģ퐬AĘ7f×,Įź1WĶŠćÕh9a‡Ķ,N8>“א*ƒ† žqCw)2ŪjĘĄąÕØ%RĆpH=OCHÖ;š:.ēĮ,§Ž«×°6­¦Éhž`™¾dRq‚=éøŲź¦f’šnĻķĆuńGį>­ū$xėTÓĻÄ*ĶįĀó>žÅ‰%pŻBœ.G§„Jך‚Ķ,S¶ęŠQ‚céXUch½NsT±‚īĪh~č-±ńWķ IØ„§ÄM*Ņ[™ā ¦k±"ł:$Ä{gŸųÆ:[—Ēęķšz/ˆ¾ń…/ōO·ßŚZ½ĪŸ"/7p°ĖFs×'z×ņńĒįÄ’ ~!jž]6[ .ęO6× ģQŸ˜ ÷Ļō­(Īұ”—CĒ.R0‰ē„P’'ĆŖg=ėы9dČ\>dąĻožšąēéV’2ę+ķ~?ZŠb…c‘K§”ķļHĶϱkk‚#$>øā¬¹"PrO)5¤i@ę®Y£‹a ;Ü÷ ģ¦ĻkżŸ¾6j?³ŸĘļ|_Óc…ō›;µƒV·“pK‹g 6qÜ`}«ż æeOžų½ąo |nŠg7ŗÕ…”:gˆŒlķöRåKøŸoÆ^OŌēQŃ>å³e»¼]-ē[ÄŻiīĆ“ŌVĪ©i{euoŖ…Żo*łwqc©ž÷ó® ‘4¹ńgķńū,'ķeū/ųŪᾕmd|„+k^šxĮS:‚L$õ "—CĻńJ’9/x_XųyćKĀŚ‰¶hŽiYWD;[kǓԫdb²(óżkĖÓ.$ŗUe ?„džļ ń­”ŚöuĢkö†apĒē猊ę«JźĄz“khĘ;¹[(3^‹¢iGıjz=¼ń%ףŽXC6 Ś=ńšóźŃåz•ÜłW—SмQh„fŚņF8UĻ9ÆŠ_…+Óu½6ÜFŅ‹•B²z:^Ī^éœā{=·ŪdܱɅ݁‘[Ń­Śm­»<ŒW qÉj:ŪRv•_nH8‡„tK=܋,[™ŽvŒf­Č“F5ķŽFŠĒØO¶—“§,sŠč?jpŲivÖq4‰#‚O \õ—‰®ŹęSĒ TUņ!ŲÓ±Ž+›ģŽkA}†“m“ ˜äiŁw7m¦¼ŪW0­ÉBP{PĄŅŅ¢ NųĖ/by›,Wß4+!ʰéÜVOq£Ø‰—41\øX‚Nz ō;½3E½@ŽxTǃ’ćėō§(ŪS”jéwÄZMē ēŚ})oąó žAžü b”šņ£?NO.p3†Ķk\éö(ZaµKv­ Œldɦ yq²+s“ÓéU›:)kÉ ķŽ”2āεŹgķ!ˆņČč?Īk·š6“HKyHžI>SĪ†ĻYÓ<u'Ū “żćm?.:םźŗDŗ=µÄ2Kž“%•5”£bā=‹Ä–ÓÉ'=«"-wķÖó) #'Ž‚¹jG”ķd˜9b1”ØCG)E/›±©¬x7XšjxǚF±i«i×h—j©ĢØoŒēńZöOŚĪ†__Ā×~ŃSEŠUóŌG°ĆqŒdŽƒÆ­yӇCż<žY:Y‰śüž=żœ¾.趖£i&—yį’R§ģךgæmÄg#޽Ėö²ųTž _‡ßµ7…“{³š“IJA±%†^=>õžėČŻF#ŗn㌊Ź4÷>{ R—,¶?f™“ē›IÖļŽŲŪ,‘Ņ0ߌuüõÆÕūo6°żƒC𚘘Jzʧ«¢ō©©4ŪOų×ā;ßÅąŻ;RÕu{uk†·³Œ»6pTsĪ+ģļŁßą‰>9|чƒ˜f-j| ü ų'ūLŸ|*ńu[ QIü1y3lžÜ†Ÿ½ó uļŽ¾Ģų™š·Ć?“§ģĆćæŁ;ć…Ğ!ÓģŻ4M| gó¢Ba˜7ŽI€7 zœų8—gcįs Ņ©dŸ[ŸĢĀx—öPųū”čŗū\ŁjŚ]ȳŸĢVCŲ޽:×ķßķEūHAń›Ą¾šļ€ulõ«„WÕfµ—9€ŽPūäžkĆĒÅ7uŌƜå}O2ųšĖRšĻƒŻžÉ'—vŖę&$Æ=śžµöץĖ@k:¶‰Øj-;Ę#–Žå—‚~ļLv5óįfĻBœ²¾!G,%ŲE&$NÜ ųkēķ+_æń„š÷„Y"{gŚ!‘šYvä:žæ•aMj{xMχĮŗ·Ć’iŚų–Kķ6i\ŽYŹ»ĮĻōǵč7z¬SDńA LwģE{xe©ö9|t9y“»y"’K‚Æł‡\öƶ?d‰‰©h>1żŽPŠ|µōTdvå˜ĻmBŚIŸ«<ā½?Ć:V§e ­ĘŸq('-¹HĒ8ĒzųÅzō²\’gĄ7¦ęx³ĆėŽ®PŠśĢ5_tü–ųļ§ŁhV“éQ"¦;‰–CŸ-ĮcĒėłÖ’ģa¤ZŻ|@ń;ė ŠévV>}“¹.AŽżq^2<­£ĻĢ«{§Ś7ņAs©\­¹óķ1{޽3ąÖ½“¬éś~³ok źuŒ‰£$§šƜÄČųLUSĻõ/ŚĻāæk—Āžī[„Œ -¾å棊ł¶ŚįgžīĀaÕvŽAĮ8?–+ęń“9£+E®©s¦,lņȓņ¾y•ƒc{6§ā…ÓnfѤĮ~w6īxü|ķIjuŸjĻż›bͧ©pæ»ŁÆ4ń>‘=–³e}käMdĄnźsWLēr=ŚĻV7ŗu” ~l#†{ó_3üYŠb–ī{ųS7wYiĄé×­qbtŠėĆČš]RĘīŻ"…w­²ą0ĒÆz«m”„ŗ9dY7Ž1^&®§Ńae”tū­/V‚åQ~Ęä—¹S^›m©Ąæg…eD…ø»W=]Ųś $µ±›ćVśŽĮ.¬!‚ēČ܎dK ż0M|‡šz[XŖäE‹!!'”}8ÆŲ¶ˆż;)Č`± /‰+#Ģć¹Ž`ÅÅ:ķ$ž(Ö!lźHēœŃś-8Łjkč¶‘ŽO;¶Éƒ“_f~Éž, ¼e{u­k ]ą4%°±‚ßʳ£~kŸ1ĘŲ­å•°É]Ź.Ž«Uų£ģ_ŚĘ~½š]Ž‹„kśįž;äxeJšG õWēdļ|9ićkk+Ø5›So:Ģ788  ī”uŠüsƬ’®/”1哕õŃéoÕ9h~–;ŪH­£Ū{€~Oā=éæķµ ŪYKyhz ž•œōGź Üń_ ėėżž“=ĀG$°X‘|Šä®{Wu:Ö>‚†ó)w>/ų£ń{Ǿųić…¾׬”šžæG©Ū“>ŽT£©ļŽż—.¾8ü4Ö“$ø@×#Œ\鶂½gQÜ©ļ_ ü=“æÕ,õ_ ųŒ}‡Åv3\ióĀOü½#”Įö;ZĮŅg›‹ÅFö<#į6­?„ž-\ŁųšŠZŖĖ6—t$l·õļÅ}Į¤=öŖI ė*įÕŃøĒPŹ*ģ£ēĒW—¼Ó?hf_‰7^!šō#Ä÷v±žö0rĶŌgčųńį]3ĒRĶ$Śe¬wƒrˆĄ ŽæZö)BēĢŗng$|_ ü6Ō¼#ć[-wĆ-e$l#ŗ“eĀÜ <cčkśż‘ž|5ųßįö:÷„į՟G–Īź ®ćÜ!X3!Sų‘߃]0Ć+–ųēĬ'×Åį%iÅ%V—ź~WĮƟü!ā~Ķæ4¹ķõh÷—:Ī®SģJŠ‘£7bŪXķōÅ~x#P(±HL@|¾ā¼ģd6‡gŃ3.­CƒpźŗjRs–½S“³łī{2jŻ@ŠÉ (¼…ĻJ¤ŗ•ŻŒ¦]>åķ§SœÆlz×=“GōģpÉ¢oüMÖ5ß_x_YŌļ®^V-„Ø$gåćšÆš|qšĖĞŃ<1ć»kŪGĄŚĄ†P€«éļžU½ŽšRĻ/AGc¾ń/‰<­źś}cŠ+H-bóå‹䱜ę½Ļönń~’ ö©a}§ŪźVŪ"…•šc~I#æ@?ZŅõ>C]ģ~²Ÿ 蚷…‡‰<+x»ć@nm˜ݱĻCŽœW—Żųɼ/oö‹ŪtR«–Įā½*P¶§›I:ŽĒ?Ę« ėkˆŅÉ]™qÜó\EƊķĢÓ8·šŁH,_8ŪųÖžĪ翆ĮN'čwĒ?Ų;Ąß’ą’ų»Ä ,¼3ń×DŃ.¬™ņ–‹zŽŠÓHųęø[ŻčZˆÖ·ö¦‰s Yv ˜ĘzŸÖ«™Xā³gµė?“æü š·‡//£—]²˜"»&dņ×|Ž±ķķ^E§‡d1ćö¦SnKm¬|ČóUaÓdw8P‰Ī:ŠBøŗtinøsß֝b"ĒwLb“ņ"t[?i~4œZjŅilņäTÜ Ą>ŁÆ¾Ńo|ā JŚ/™ķäņŻ—Ō_¹ĒV‚±ėžńž¹c4M3}©$#e<ŒsŅ»w‚8³Ÿ›¦Žof“&]6iŚä9ķ[6ŗrĮ‹&ö%H>ć҃xhpšn›m¦Ļy$V¶Ńƒ!č€õƘ’k˟#Ą_ŚÆ#‚Įī&L(č¤1īkŠĀ½Qåńćw'd”-{hõ<ēö]ž;;½2]$ܵ˜;ćlŖ¶żjżŽšž­māK"ŗ„Ń™£@ Ė}ké(l8Ŗžó; -·ˆ&*X÷=t–Ś5Å„»Jd9Ēq]‡‹^GŸx†ņßC¹}N( ³ķŪ #5ę <Ž+ÖĄ·Xs‘Ą­!#†hķ/<=ŒŪÜZ\Äź*~e8čkŌ„ŌmoŹķZT\<Õóbėū3KšłŌ0Ī+ Å&“U±·ģ0[2ØŚČ1æėLŹQ±ÅŁJģĮĄe8=«¤ŅbSGŽ'D¹•>•pG=Cz}*Ņ8 ÜšęDĒL–/3ēĖuĻjr‡c»šZ§ˆe{u6“¼½éSé—w:͚8—Ķ›9럄=ˆ6“ķ2=A œÓ}ŅK)<×'©č‘ŁŻČ–ļ…Ī1œÕ”5ŠĒ’ ā';€=ą×¤hž?×§šĢ>k‘-¬m“ā ö5¬%ŠÉĘÅ£Ģ$‘‰c ~u^M6X¤ŒTņėļS6CFj@|ń)Ā ē§źP<žT„ŽŠzĀ ĄØ–±[Ę. g|äJŒź²Ē6Tōö ,lłKxŸh3+ÜŖķ \×)ml‰|VńŒHI@ž4¶ÕKGw Īś×HŚ‚-•Ć\J!!ź(łÓńjöėž+™–ń.-‹ėŒm«åŸk¦9ŽŽ%?7ń҃tpÉ$Ž…䐓XäŠŃÓxö§,›žVŚ}ńßŅ“R4öe «G˜ķ\ž¾•Ö³@ļ†>ąÓS³$ف€ČF: h²œ,’Ččń†ąwؓ¹Q‹Ń[«Ę6–.z€:RB…f ć§ó©¦÷(„šB|±ĮöÆ-×õx˜·œŅ3FJØ«³:‡š_jW3#Ćlģ9ÉĻZ4ū†ŠX„˜gsD×AAžŁįmA0¬”ĒØ‘é^»=֜g’Öė®ģšO¦+‚”ŁM–l-5}M2ļūQ-,„“Ė2(į¹zā½k]ńŪE¤Ki]ޤf/2܌L=Oų×2·S¾-lń/õE±šß†5?xŒ°Kk :žC#vŽ+õĆöT’‚Aj·qŪ|Jż°•—[ńuåõ×Ųķļ4ķ3sFÖĆ#Č$ćiæ ü·’‚¬~оųš$ų ¬ž!ńæˆ/>˳u‘ŪŌ·Uęŗ!øéĀģü€ż„’nļ|ńƤüa‡Å>/šŽ§Ły;ŁÆ¢1ą"æn< ū@ų;ćv‰-ŽĖĆv-›éo£X]sœeŽNĆßҰUķ±U©øź|aūV’ĮC~ žĻ»ōoŽi_ž $c}ČŠ©ģ+ł¹ųŪūV|Sųķ«^źŽ&½¹Ń4©nwƦZ\²ĆČ#¾kßĀSŅģóźU¶ēĶ’Ü"łØ‘¤Hē<Žõ Ÿ| –^™ļ]œ½IÕ+«l€6;Ն_9&FUėŠĄĀR‘Ā;ČĒJ–(~vR2zPc'”im]3ˆÕ˜Žz{Óⓘܧi8=(9łµ±±oi+"Å·88łkoM‚;K‰¾Õ".=ܞ[<ō™ÕIŸ¢²§ü{ö„żØuQ“šŽ«šóį|ĶŗēX» ÓÖ yl×ļ'ĀļŁßöTż‡lfƒĀvüRų¾±mónŠNĀUäį€ł3ģó*Ō»·CÓ¦ÖČś3ÄZփćYėž2ń,׹Dś’²&šG–¼cہ^ąæßĆ>µ¤A©jß ü%&Yy~ič@ē8’„b¤jrZž č¦£q§ßŸÜĘū ģ1“ē捯+Š<-©ŚhzxæńÅÄd;o‰YĘ×N@ō¢hāā+ķfśćĮśM¶‹ ±%öP1Ōż«–×5½ Ę{8ąy5/2fćapⓉĀkŚn£{$÷ŠŚdRpSnkM€é¾E¦›Œ0ŲXqīk9WU“Jѧx†iõ `8ŽņĻŲ f¹æˆ:^·{amāķWU·šž‚…€·O5pp1Œā²4‹¹ņƍ’iK½ĘŪĆ? |!`5˜Ę¦ņg ńœ~uóއćkćÄ>9Õī|A«`|›‰TĻ·­gRI#¢œzžēą’8Ž •¶ke*Ź ¼÷õ§ĀO…śeī½hŚķųŅģ-Źå[ėü«Ī©2å$}Ē©x7Ć'KŅķōŻ:ĪŹSähŠRĶŌ×¹x KŽēM[;„…V>•g<¤z†•s’ŻÅķƒZPŽXgpöĶO®ßi³ģ·-ā™Œ WTcs;œȂ5œ]HɁ”Ąźk¹ń¶‹ĀXŻjö_ē÷P¼]ž•“iö'Čļ¬|T²i…ŃŽw ‰“@ńS[I4³åŸ8ÜI­£ņˆ|U/éģĄ…v‹½yljü[wyk%½ā “oö5r—rұó+źznØ\™ŚŚŁe›6äŸė]”)Ŗkcū²qœu¬e#I=NŗŅ+]"9<ų#gŚOĶĮéÖ¹{=sU‡PøøŽšĖlxXĻŻ4s;¦tW~&Óå‚pń%Ų8`}ėM^ŚY<øŲł1x«’$åÆ®Æ“—[!ŒĶę ¦ģpO'ņĶz¾3šęĘŚ=ł’1ņ’9Sޱ1mœ}ę¬/¤gęb:śš¹¤©Į‘ Æ;nŖƒ$»xåø‰ö”$ŽzóśV¦čĖŌõ­DŻ-ܖŲvmējšjÄśŗ„Iä[häPGSK6ųūU»É;]s·¬ŚZxw7¦Ųœ|ēī śÖ76‹לĶ’ŚŁ®£npW#8Æo źŖjsŽ9ņÜcbń·éYɝ \č<”Į¤XÉmm5Üv†G!&-¹9éĻ8®ŽłĢ Ī[Ģ#'ƒśTĘZ™ĻbœZߘ³‡sDtEr }3ź2›v{ˆĄŽ =@®ˆ#†lÅŌõ;ŻFńćhDd ®Ehi6ח;R5ņ‰ ģüBńo¼CÆ­¦(iōČ\É?ßnæ^‚¼×Äöś®ekāŌ/RĄ‰¢ó3·w·Zś5n‹š ¼Ļg åõÄWŠģI#ŖóŃæ ÜHōū-rŹŚÖŁįk‰’Ć ōĶQæCīļč~·°“ÕoŅ×P…~]±IĄź{WĪ|Lu߉ڂXź6óCQ,Ÿ—'<ēŲb‰jī\[¹ä“¹ąÕ ”©klæ(Ś}Ēė^'ākVp¦š!– ĆdŖų|ułqļHӓ¹·ąėķcÅŚIāIµ}24E]ą™#ZśŹKX!ѦÖt+@šbm‹h9!±ĻćĒėIĖ”„sVĒƚgƒ¼3ŖkSFŗ±•·ødu&¾h¾ųįć]RźņKDÆīöĒlŒ~QīŽœōŖ¹ĆŲī¾ xcGųĖØÜxKĘóZé Ä©x°äīėךÆlų³šēÅ_ „Ó%Ó5Inōx”Ø•;øćžĒ©Č©.]Ļķs_¾ń£6£s$ĀA3ķVlī K~“¶W°C=™™Dq†ĖsĒ֎mA>‡Öz¶³šēǾŅ<˜āŗ×-|»} łĪ=k;Ą:„VŅ\Gg¦›Ø­œ‰.ŃŌjذg1¬G,ŚÅĶōv‹l%œ\ēÆUųjśm¬‘9Xīä`sœ`c֗9“‹8ŻjŪ]°Ō/u"DĖM— ĀČ=Ļ_zķō+mG[Ó£¢x0w¾ÓĮĒj‹š®ĒYØ\iÖ0Icd.2a åVć?‡Zå’gĻjŽ#ńākńµ’}”`C•Ī9$ō­yµ¹Æ.‡ÆüLŌõ»mI·‚öčŁC1/“åĒÆ5ć~.ų'¦kžh_øæŽÆä@>½:žUŠj'+ą]OYšī½įŸCt÷V—÷¢ œüÄöĻAÖ¾ļųżū?ßx‡@¹ŗšÕ„ž$Ņ-7_4ü—½ ±ęŚüŅh7ÖZīžĮ—xW°>‡·ķśf‡ećkÆX@·?č£t™ąŒõ«H±h^е+懶śŖĮ¶×NĢ"V+—öüWé7ĆSOńĆė²Esi©L„åIWk†ćƵ).¦2i?,®nō ‹ŅņNb<’믇5Ųme³ø±½Ō>ĖO+$ŽŽõ—S+ŪDpš+M¢jVņCĀʁK?ī׊^ų xėÅ:f„®é,š›ČŽĘ0Qäō8śÕ~ˆŁ~̾ šę­7ˆōG³¹¼·VXå]ŹĆļ_>üqšīŸ›¦­žŽŠÜļ\Iüņ•śRęģUś Žgx{Är\m3\E“rd”C‘ž®ĀēÅ-®j–¾!悝#œ/śĄ9ōč*”n#/Bńöā(-!†ā%—"X…Sž÷Æaų•šßāW“k/߭ά-aiŒ’” ±`ōĻqÅ hüÉńœq5ć[Ęó]ĀÄHˆ9<Œzń^I~·-<7)ĒĘvž8÷PzŲŅ2čĶ \čwvśŻ“‰ Ŭ‚|°į€ƒ_«? üYeā’ Yj?iK©„\ēĄ’ŸÖ®[‘ķš~ö yWÆ ®œŚżŖŽ8&Qp…NpH>õęāM!£>ų¹cØxsÅāÖīբќ˜C€sŹ–õÆńƒ"ß ,”1Z¶÷ĒŌ×$^¶:āō=öxų¤žńu¾‰©i֐ųrōy„/÷ōlWKūDü8æŠõ“w¢Ļ47j/¬. ~`øŽ{rOJõ9mfKzܞʹŽ?¶}æķ_ū6éŸ ÅĒsH9I¤R¦֜7›B U‡÷jocŖžßū:~Š>+ż“?hĻ…_“ƃbžņūC»Š;»d”Ę&µfŪ(|u…¦ĒĮļŠž ųóš×Ą_|©CØxcÅZtz…£±ŹPSדłäv¬¦“7‰Üj3-Œó2²4C?ļ^U*ż†źęė`“@Ōą’Öł|ĖŲöąž¼ź«ScóÅŚ~«įŻV÷NK­OCŗyarr.­‹ waŒƒō>µų1’)ż›­üS ź~2𽁛ļź6Zį£lå¢ō9üĶhīg(ŸĻķšĆuyāŗ\¤ń°ĆFć‚ķČØ¤E™ąšÕéS‘ÉR õ‚5,¢L®Aõ<Ń} Gvėéõ­NW…$ iÉéŅ“¼ø„+“üųĖqŠūP.DXDłdD8čMgłŽÄlfaķAeų™(bv“ĻŃ*™ńķ9ĄČĘh:©š±Č)­ä. qµōjž†?ą‚’¶Lž ń”’¼axÉ E+Ų¤1ܗūmœ¤Œ<ę6n£8š:į±ż–ųfŪĢ–ĖG–ö8üQ JĶfūų»°™G^x śžUķff•VYC{±—²µqÕFńr.āžEÜĀāÜņ1ÕżUüsĮ|æa[OüD“ć|7Ÿ ų·7–’aŒ"Zė+ĶÄn½?z£Ķķoā¹£¹MĶ$qĮtŒnKČø(ĄŒ`1‚;`×9§[ͧ\46ŅŹ[=Ī{ńU+ Ł¢ų‹Ä+oē6™%õ” ¶F…2Ź+Łō+Ń&”g ńŻ>÷‡낼Qµ3Ķ®|9y,śÄó+yŹZD7-ĻlżkGįxSĶr=Į·Ó䌤Š[’ĖÖµĆhģ)­Oæ|9Ø„Ķ»­Ēœ¶āzפXæŪ-̊OĖŪkÕŽĒ DWŠŲ34ˆ˜ž•!Ō„ދԁģ*¬du–—“ÉĻ-·=+OLŃ Ö­¤ø¹·īQÕz„ Ųg™xŖ×Qńõ¾˜¶ DĖŽ@œ0Éży5^½ŠE“‘oĀ£ī֊eĘ'§h^’ŚP'Y:ūĀ·Æ¼'­ŁŻéś¦”č+įĆJż*"ŽĀīy“ūtšģ¬r·5ęk­i×z”÷ģ”D¹Č8*sÅLd;·mˆšā"8 ći®jĀÅõ©V7­“åˆRpÜūPfēŲõ›m<7épO9UPćĢrŻGNMtšV«å£Ė Q".Kmž"€S8_ÜZśK…Ž[œ½õ¬h<;w}•€oļŒw¦‘ŃLō¬.“½Ä;…ī (NļJĢ‚źyg¼‡ĖqŒēš”ŅXjI2‘ 6eŗ]"Ī ˜Óķažqŗ‹t:7QšŌś]ūS ,w·<±©g³‚ā20k€ęå†ĪĮßįńü#Ÿg#Üܙ¼Óäg”ģ)Ae“±KŒ.#\öļY­ZÅ+FĖņØąbƒh=L»›½]PĒō=1_Cų`izZĢįc1žZ ŽĻIÕ¬\²Ŗ1|ZņśE¶Ÿ¦O­YMķ: éųPŃp>L±“yĒ”YŃ ®›VѬtmāāŽńYåO˜IņķoLśWCļ|9¦„žą£’Oi’éhõ;‡:‡„åš-—īY<+ŖiÆ=„Ü/øĄŪrŖĖéČ<{×=ķqc ĢR"nŚŁĄp;óģ+‚„õZ4ՓGńĀ~ ų•£æ„<}o-ޜ\mŗ[lqņ“Ī=®ĻöAń…<įļ~Źć‡Ę?uv{[ Éćłm£|Œ>yą†źsQYÜłŽ#ɽ­78nsZ÷ģėāÆŁ«Äī•qršÆĀq?‡µ”?˜³Śæ*ŽŻ™GųČąŠū·öš’ƒ>:||Ó¬ü]ćNš¦§‰ķÖģ /ŽT’Ą'’ÆAłģó7õ:•`½č§§šGļfń«öż“,5Ķj’āēĆū-RįŸĢ1\«Ü:Øį“œžzž`ų‹ž ³ńcāæ¼/ū$ųšo‚®µ#ҵ6„½Ņ<¼»łåÜĢXā5œŁų7p6;>ĒĖ›§Zy^Ż—sš ƾ3Õ¼WćŸ[xčßIćŪ=NDվܻgKž§*y_Zę/“Ū _N½Ó®c&)c!YOÜnĘ¼ŁŻČž™ž]MEF:"ļģašoā™ńkÄśö‘ć½/HÕM±’ 9r±źezdvlÕżb铏€4ĻŁ®ūĀž*ńf—āßX¢Ē“”䰕-Į9\Ļž½Ōb·gēH÷? 5Ļ ų{QńĪÆwįĖÉ“}f;‘xĶ ĆÅ»žž‡ŸĪ¾ĒųKy¬x#ZƒÄ:·Šę½³»‰@ÜąłDńϹ=¾•ņłjϘ«†“¬|­’"ż•ōšYxēįāYé’ ³`cŽ §PęŻøÆĻ†>›ĮVŚF“å¼Ś”Qˆ§rKŽƾ_Pä”,}ŪšÓŞ+ŠĻ#…ĘÉG<żrÜż*ØŅčk=NĒO»×lõ¬²Ž Nw.NåŠįĆ^éou¦Ė;ÜmcĆÕéR„cī²É]†“°ŲÜŚ^¹)Õ[ūµÆą?‰ŗgĆ/x_Ē’^¤ßŁ—pT“*~ ā¾‹ µ^­6āŃłē’ń†~2üq“ÄQųnūšĶõ˜æ·¾“ —+·fxėŲōƄæg_‰#ą‡Åm'ƚ„––³Żanąbr§ųˆÆ~„“1““Ōmē’įōėŌSƒ$lx?ĖóÆ+źxxĢjz-ōśn«qan‘ĪØę7WąµčOa1³–Õ^ …\°ģOµ|¦%Ÿ1ˆŁgā-÷›šÆĘ j3u hų‚2qųā¾šŚŻ¬§ĢBdÉ$ļ_7ŒģŽÓĒ sį˽:ĆĢ·ŗ3Z%Ć`óą\ņ«Ÿ=•ĢW¬ę ¢u}ĢÜ9ü«Āœu;Š}6ī×Ä>‹®F‘™g·GČčǦJҼ“ūU”2rFAžé®ˆ@åØRš¦¦ö{m§øJöōŖŽ5šķī»o,–(<ŌÉž!\øŗ]Q¾gÉާ©hZŒśf§d#oļcšĶlXųƒK4æ…^0>VīŸzłL]6™ōY×ōūmF$»µš5Œ—Ęhö©q2éśŗČ#óAVSĪą×9µ#ßĀŌ³=Ś Ó#[”Ī݌æx+āėļ Śč_µ4ŁęūIž¶^9W‘ŸØ&¾ē‚q1Xč©u>ó!ÅņŌW>§Šõ i“X¢‘Ł.¢\”Ī "¾–żž?gŁ’h­Ā?ć č×6×+l±ßK“#ćī€;ęæ œO×čēŌØįŻykʾgĻĪÉ4”ŚSŠÖ¶½£x›Ą”џ¬Ź²yŒrĪ 7§Oóšśį‹ßZ{UÖoćß½bŽ{/cé[AØ]]Ÿ”:.ŸāĻj6z߅µi •UdŽ[i3ĆÆ#ü‘_yü:ų{ć&ŅėÅśDVšÖvČŹsæßҽZLš1”ś­Čü}į«Ė¹į×t*óQh¤ "ŪDXóÓ8Ævųić|8ųEń ā€~%[xCÄĀĀćĆZŠe¹e_õŠI>˜šĶtŹ£[Å8L>3š8˜óĘvM|×å¹üńüsń‹¾"ų’]ń‡Ž5×5Ė»Ņ\NŽcm²}+šž”-Õ@$\:(Æ W[Ÿ·pžQK …… å„RIvHķ­KE)Ł'ĖžżėZM:śęÖėP“…¤¶‡qĀ p¹ö>š²9 KNMFČĮÄ֓« EžŠ×/ćķgĘVß õ _4¾™¦é ŒŸž½(ŒūžV::\šÆƒ+ö™õ‹·šŽ"³YN21Œ~kźoŁāŪD’…fd¹ŽŅ{šŃw ķż+ŗłŽ:Ŗ»Gėēƒõ Ķ+ĪŠ¢ŗ‘"•|©TtlUŸxBßR±žĻ½PšČ9`y"½JhåĮā9duO…Ói—ĒģŽ^Ū_oc\ķž™{6—¬X6ó>Ķ"Æ»m8żk­G±÷|tgOģCö~Õ“æˆ_³ŸĀkö³Ę•ØųVŹmäńöuŠö=Włź|[ųaš›ö®ż¢¾é1Ęś>‘āėčlvŒ”?Q\Ųåī£üüś2ŹT8’8ĮĖ£«’’Ö·źz^…m#[eÄyõ§qaåb茨?•x3ZŸč-ō%¶ń:uͽōvÖ·’ÄĮˆa€Ąv®æāĒĘ+ļ‰? ¢šd60ézU·Ī‘"ņŒr^žµ'-Z'ĪN¢ė,ģyĒJõ=/P‚ęĪ{ˆ’xvz}je+žĢšŪėķ#ʧiė ŚŹ0§T>Ąz’Jģ4ū‘ķk;„ø§ļœXrhtė ĢūĖ€dU‰&Œ@#vū§Ž:V±“2(Y\½ąueT*ģvŒ7™sŹ©]‘=+S—O™ “…f¼‘Ö8”¶b@ō5ö'ķ#’Šż”¼?šĖDų¦ußjž ¹‰ģl¬¦hČČSæļ°öē“]4°r”\—Cē³lźŽt©Õ½źK•i×ĻśżOŹč„ń¼SsįĶ_DæŠÄÜŽž‡ń˜Š›*r_9.T¾m”ßžé_ “K]ĻķŽ]„Éł‰<šśā94}:ßT·½f2.5žśjP²?Éj³ęw:;Ęī¦ŲM$„AüÅvæÅd4Øle‹~ŁĆ!ČŲü+£ŁžuHœ’‰õį«%ĻŲŹ˜ņ1÷kĮśfؗĪČńˆ—ć™FĒ D{Ä©xągŻųõ5%÷…“«¦†V+•9ÜÊHČń=~īõ­>ņņU¶ Ecxķ„¦ooÄ䲯'ń­c±/c–Z£’ŒćŅØ[N`ŌU”V\äg­"ģsŹ'e-ģÆLŹ×ųŗā¹ąÖ÷÷+ t­ŲŽŁ­‘‰č6Z~Ÿ¦DŠöŠHF1½A‘¬ Q’ĻT-k0+łp śPe'ŠÆ !Õ Ī Žź½ź¬·Ÿl¾™ü°‰“œŠf݊·iö£ū· Ž#­^Ņ4äI4KÜ ÜDZŖŠ¾†R‘­«ų—ū.ه’AŽ+/Cń×ŪŹ¤śqI¢lM­ ,”ģ\®p2:šĶK{»˜<ę…Óć=j[±ƒEū+Yø22>]æ­O©éö Äp2¾~ēf4ɹƒ¦ ģ|Ԝ‡ė‚z”8‘×!yÉĒJ DT3[9čkÖ“©ĆŗyxSČ8NqPj –Ę®›®Kutfņ“ĖS§īÉ^māmKS»Õ. †ŅÉķd$É^P›h19—šźK’%Į†A‡Æhég3–9ĘŠpséC3ē;ļ ųu.ģķ.Q<§źŹżEhx»MK(·Ł©–A“Čäąwƒ!³Į“Kéµ-V{[ĖR±ÆĶŌrxÆ ō½ĘkUKxį•~c»kéBv‘Ēź¶péņ‰£wņ3œbÆĒs ز4ˆžµ\ģL©;As U*Č{ö«öš5³H?hĻU_OcG;V÷F[cH—e¾0"±m-l[QKā‡r‚¾Ō›øćįÉģąŽ4†t“v¼ÓĘξ•Čź^/M*{ģiÅ®c—rOœ‡P;R4rr|UÖüCw"jš5¼*:HQÓÜU†ŗ‡XĄY-eN¤qŗ“ĶTE„ÖšBqœdę¢Ó¦Õ-RHµk“wsäø"?CśÖ-ūĶ=ƒźS[ٶüa±żÜö¤»Ó'ÖeŠĘĘĪG”…I¢Ä4qi©éŗ…Ö—©ŁĖiqme' V¤q?~ҾŠ<]¬h¶æ >ʾs^jsØ@OX}ĄĆ[k†Iž…=µ?k¾~Ź’æf:ćHż>>»ć9XGZ¾‡{³ĄćAģ?śõļ>»æšŽŸØėŸõ+MWÄČŪ ¢ŗäcŒö±Ž±åf—&“ƒā§™vč:7’Ńä¶;©Œä€­`éz“’Äś¦ąķ+Ę6,q(ŗ%‰ģŻćėWŹÕ<]Ŗė^6šĒÅox—Zų©Yę;›HesˆO*ѓŒ ŸZüU’‚ž~ןuÆƄmu­GGÓć"_·Ų³Ą.px*WŒēÖ·„JQ?mæą—z§‹¾"~Źžń_ÄĶKZńŬ²YŽ­ļü|ł8żŪ)aČæä}¬ų żæˆ|=©kv7¶3‹›VóITaœn\ćņ®˜£=™ć>>ńķń&ŪUŸ Mp”7&ćģ~PčÆĒŽ?į_ĻĘĻŁ+öŠń§Äm[Gń'‰5?ė‘L×mČ»3Ūȇ9äš1ėŚ©łR©sŽ ų;ąŸ€wž'ż£¼EiĤ.–%S!÷ąŒƒķ_ üSż­5ä×|O¦|×(üLU%ŠĒęA ,s‚1“łāÆ[죪-”ś}¬ėŚ’„R]=3įĒĆxSżÖÖDŠGAü89éĘ1ōƖ„Ü×7ĒJ–ĮŁĮŲFXĆ?•{®‰šÄ÷ā U%6¶+Š¤Æ¹Æ9īšG†|! ßdšźĶtåBĢӅ' ’:tÆ}š—Ā«BX®ÜÉ łNkNū™¶{żī§éŗuŗBb  ¦>荮£%³Ij†Žī8éėZF™Ķ9dŌ®×s]j u6āFAé]f“,7Ģ·ĻžDĄÜ:é]pZ˜¹w(k÷ęķdŠÖŃüÜr3Ķ|Ļć?‚zļ Ö®ļļ,5Ūå¶ŅĶõ®˜¤5#Ō|' _é:d0ŖĖuå ]Į²NS[I:ČāŹuŚ9śraó3i5„Łq均Œ7jÉ×ģ­e±øź‰.q\óEF}Ļ—|cįK]I™§›'ļ•oQ^‰šāŹóI²±³æø™Čźää1ØQ4ę¹ÜxĒIæÖm¼»wš8ˆĄtąż*­§‡n/4ٚ3 «Įņ…Ī?™ę¶JČĘlółĶ“²°`ŽĄģcźkmt/ōa°•US·ič*g±“–‡>7Cz±Jīc)ĒŅŽŻĆ[ŖrK9cWĪŹ±Fåb šĄ.0OŖÉal°}©§NŻĻZ®kčö¾$±Dā3$˜8~Ā æ¾Ņ5ė ģ¦¦VĆæµC‰p'Ń!¶Óķš9•ć‡i•8Åd3A5ě%FqšĀQ±²•ŒvÕVŃŚHJOƒ†ĒAV®u.ģ’P«Žæżj µ2©3ŽÖĮ-gk‡æ;AõÆ=†9tĶC?n.§ä;ī§Ņŗ Ž)²mT„ÅŹ˜&fķV<>•Ņi·ņéVČé Ėr¬:ŽįVsNM+£šŽĢ ą|6i¶]ĪTś‘^#ā/Ūź‘ė63[­¼Ė«æ!°zūgōÅßB—†WŻ,aśP'zÆĀ Ļg)ŖX\ `ƒõĄĶzVqk¦Ė}kacm$3nƒg*Ąūw¦fk[ųbūÅæÕ“k[UŠc—,|.N3»øUOü1ńv…©-νwo}m$a¼˜“ī7×?JB)x‹EÖ,u[f¶U’r’+?ßō­km“=.ī0-ČL®9×4F'–Łx£ÄŽ$Öa[ƒźĆ;°;~Uļ’ µČt}GYŗ»øM.[Ų|›†‹Xp@Ŗ±«g{µ¦¹y3Ūܦ£¤ZŗÉq–Œd`ćņÆC =ĀM†ā eŁnŚÅ+J„ųmš—S—ÅÖ^#’føø°Õı$€d Ł'~˜|aų‰ö}'ÄWD÷󣈞ę\’˜*1ųŠ%럚į©ģ4Ė»‹Ki c+>9$õükĢ|y£Ķć= ī’)V3å™ Ąnzā‘\āxGĀi¤¶™ż¤–ś‘‘<¶F\”l`œóŅ·-µ»ļōŻ:É,¬ŃČU…_oÖ“§Ir9ėłģüE¬i]ćyö’Ü!`œq‘īÆÓŻ{ohŗe‹i×A䬈™ŽÅHöśUøhg#WĘŠ%ǃu-By ·ņ²d Ąė×ņÆĶA3©Ōī‘63F6ä0„`½®?c’ü;ńĒ‡īüOzneV‘Je·|¤öė_^üSš^™įŠ–^#šÖ„ x ķÖE9eqŽŸJ™ƵŻvUŗ¶·ŠoŪS•XĄln$t>õSĞ]sLŽ×Z · ”Żü-M!Xü²ųŽM½Ö¢Ņ,ؖœ ĒĖė“Ēq^y.­}=¶–„FTČĮ źkh"»-toé>š«CseuØN™¹pDžžÕļ^ń–ž Õ¼;Æs£‹wcĻ}1Å)DĘGä7Ē߆ŅhŽ+ŌuėY¶é7#t[P)b Ī~•ņ®§H¤”˜q‚:Öhqzœ;£²²‚¬§#‘śWŌ³‡Ä)<3©Cį}BņŃl”Ä|ų'§ęx®ƒ¢é„“dFņ"Ś–!ĄSœ©ē^ŸįŻ>ęx„øEbUOø¼ĢT)˹ętÆųJü+«ŁÅ¢Å>æoIŠ˜@8§å_Ÿŗü6Öś%‡Ū‘ā¾uİJ›L-é^kN÷gb}Ļ)æŅnZx–&Œc9ĘŅ^+ōįž­mń«į&”¤›G_i1ŚÉ—l.rŸ†ą+ׄ?vĀ’6?ą_“ä’±§ķ£ąź—ז޹»fø¤±Å+.Ź:•bšÆļ’Äńh×ė¦x—Ć3ŪŻx{S/,䅃!Vœī"+J‰r¦;jhųċ¤kbĘäIöIˆŹkŚż«’Q ĢĒü öhć'Ą½3öžšž‡l’¾Kż—ād;–[Ż%Ū÷–Ę哟Y?ć›Zѧ²y„‹–Ģ-Ź2GēNŠåŗ2šŠį'†he,J˜»}~•—;¾QŒž5ߎKPVFbĄ†lšH©ņ$y…”ē=ÅjCeŒµ¼ FŹÄŒųžA%†Onż)X\č–&V˱Ė)īz֜?:«/ÜĻ$u„-éČŌņ šĪ{yĘäu(I÷Æźsž Īż· žŁ×æ`ļėZ–ĘŻŖų*YeiaByQ’[oLčMd£}Čģ^:©‘mĀ·Ė0&9G\Į®ĒC@.ōėŁ#k9wÜøOÆć^}X›Ÿ"|mš‘l<{l"}[FS ģ>[Ė6#$ŽäcłzšüļųÆšóĮŽ-²ń?…­tŁÅ„üB÷Gu;HA-qŠäóģ+˜gņ-ūYü¹ų9ńc\ŠŽŁcŠõ9D–ņF0ˆ’Ĥ‡&¾^ņå+!1—ŪĻÖ»ilsU‰]T)ŽE‰#,y¦Gū @V ŲžŗĪ)"œĮĢŽ  €óž£éQFĖ.®NZßėLØŅ6r@ėF(žA%Ā*c€z~Eneūē{ēҬŖŠĪ=sA½4K "EÆ'yĶwß>!j?ž"x+āĒ…VXuķłnc;Ģ$üčHŅ)[S²™žˆ_±Ē}ö›żŸ>|hš_ˆ?¶µ>Q2&–ÕŽžvżx9ÆŅŻWŽŚ]Ēļl¦UžŚPz‚3Šå«6nu6élx±(|¢¾Zż©gļ~Ō~!|×ŅuFŗŠ/ĆiŗŒ`“R#ą•!±œ a޼ł-DĻó~ż”~kß~2ų§Į~$е ģ^Ėm=“ĄälVQī kÅ5Ėy¬– N×aCœćœzTEŻ\ĪG©xÅ×6ķø“YŅā3óŒCė]‚—£ėś,ڶ–RŚxŲā0~gR?†+äŁo7_H—éåÄymՀ54„fl}Åš[U“ń>–-ōĘ‹]ĀPœ•·¶+ß øžČ„å{z^„*—9źÄėō›˜%u£o˜rGjÉÕ¬ÜMžŠ“žżė„Hę=ĀńĘöƒĢP’qĘ{ÖĒŒfŠå{;khŽŻ¹qżćš.>»£ė:X»·“ŸL¾óBm`0=N}ĻóŖśö…®A§i:ö’ŃÜH'źĒÆ?ˆ4ʊ=ēE.¬ęņ8Łš2Ē©=ėœųāOģČķ'…­ā(˜Ś Ą}+Hģ\Yóf«ā/ų§Ä¶ŃŲZ}¦Ćnóå®pGb>•Oū}gY–óȎ&Pæ)^zš§ŹYŌ>½„Z,ö—SHc™ >[½žN+ĘåҦŽöD0˜­—;9ķķL‰H»a”›Ā"”±MŻIą×µxjĘĆĀÓÅu6š„Œķ‘~SģE3;œf³tž"ń ŹŁĄ<‘•= ¦*_x{Q¾Ņ®‚em„OV÷śPT¦¶¤¤Ę6‘ÕwŻ÷5ÜųE›ķ[DkĄbqŗ³”žĘÖ:‹ÄÓnģę³Ų$—ņĮĘ.•«}gk4‚U¶»*ó·×õ©Mģl—sžńš†o.4•øccµˆ'>õĒÜė’ZĢV™ā%€£•Œōū/ų_Iš¬‚h Õõ«€aņŁ2 R>ö}kĶlüGåĢۈD“ŒlR)ĀrÖZ’˜É`ŻxQõÆ«4ĻŚ^ųnĻT¶’ Wnr'>•§.†±•ĪÄŗĆźį’<‚ķéUįŒG—˜‚¬eĆ9=ZÕåÄR.O8®l_C„+,Ćˈ÷?­fTw7-.Ænķ_ū*Eß"į2:ęø4MR+§µŌķ®-õbެ„}Gµ&n¢[³Sor$V`Ū¹$×­ŁkæhŠ$Pܧé›EäŽ%[=fCŗF_iĮ<žµć]}Æā~÷–ņÅ,9ÅL„c¢“K·Mżģhv޽I­Ū®·į[ø®!-£$ķź9ķ\5d~Ÿąüā\ĪŽ£ZńæŠ|Wį ÉØ%ŻĘ‰¤D,­§¬Ųē~•ĻiŗģSIJÄģ}y5åUØ©“魅Ō]Bįx`88ė^srņ"H„* ķ5ĻķW…āŃÉųÆā/Ž ĮSxfėŸĀ韬ū5ÄBHķ®Có*“Ū8ÆšĆiV÷‘]ZĶqi~kĢÓČIpŅČŅ1'øf$×½~Ć:÷‰<ń+Hńfƒcö«K“}OOžm‚ą$€‰žⓨr<ŗ1¢t’šP|9ų±ūgjžhsčv7¾·µń"”Ś“ź1¶ŌdüĀ0ØqĒĖõ'ę››±©Gf–m3>UG÷›Ņ³­WšNOvy”°s£F4äīҵżBųk=켩ˆ§ÓE½ļļ_q O½ŽĒükģŪZŪ|ešßÄÆƒ¶ćOÓļü>°ų† >P±5Ča¶eQŸopRIć›ŅĢł<ꄜ“=+ć7Š<į]'ąGˆü7_x‹ģBÓ\¹†,—…q.,­»žµé:'ü5s¦és[ŻÅqo&GpĆg§µó9œ;ˆ¤ļ©ļzW‡&ń»į¤ń™*iR(xnW€F9ü«łųż¢ßūIåLöČ©Ć0üy5õeŖ^ųĒÄžń…­Ś‰“õax¹ęXX`ō;k‘DĄśÆNń=֞‘Y<ĀėO~[·cśŅ^j{ōķEE¼sŚ„-ƒ楟+²‚=\ņģ~#‚MA^Ʉö“¶"aß؊ćž)]Żé—¶0GdaŌŻ@—ją ē‡_OνZQ>ó*–Č󦶼½„É~ĪYĘŽ˜Ø“xZŚōĶuc…°gŽ7ėŠõpēÓĘĒ’Ņ>ÅćļŁŠßi·¶7Ķ•ÄQ0ŻeY“Æ'pśƒ_,\žĶ?¼E`ž"ń^™q¦ź¶öķūų¤* ś°üzשŲņeYņ]­n’1Ÿ¼aašsĘvoe夵²Ū må;Ónv~5~Õü!’‚ŠŽxķtĻß|>Ót[“mżš÷Ó®ł.ā V0@’k¹‡.ˆłœĆŚ4?hų¹šĒĒęćĮšŚkŠĒõƒĘ6Ygr÷÷ĒNkłpńTēĄ#ՆĒÓļd*Ēqg°zżå^5|eϜ«ˆg诂/4æĆ¢ųš YޤčXƒs Ōž‡ł×ŗYéÅ$m1ņą,2żvÆs^6"zūKīqzī±y’’‹ōĶLĮ±X­¼±ž%Œ3žüŸŹ¼įŲo¼Qź“3iė yćxĒžGµ|ž%4Žæöšu¶…ń HÕtiĘ‡}„G%«dØ[߯å_8źöv÷^h–NAļ^Lڹč#ķŁŪW¾ń„C¼Žm/"ßūŅBOQō’ś=¼5qä3Ć €+zRL²<›ÄV3iWpݘĢA[$Ž+øšŸˆ„ˆwķóWOsONėCS³±ä?ž]k×>#³°ņnœŗē«āét­Rhn ļSµ½|Ę:—SÜĆTg}«Y¬V7s2n>l†_Jō->b^;ĘTČ ł÷xś 5Cæ‹S†ā!x!_9T`©čE|uūCßjzdŗoÄX­ūZŽķ]„UŪæ'ϾkėøF±q›Ż4}ŽUW–ZžÉ§¬÷ߣZ™hŅ+ÕI››Øüó__žĢ–7>ńĒŽ“铳aŅc†-B B›rG©ÆčøĖ©ö41 ÅÅõ=7öσXųÅą Hķ.’·“Äit·(|Ė`ø8Üy9 ƒžÕńn™õę™göØV“…<ĘŸÖŖroV~Į8˜Ā“¦¶E© ŽCł`É(ć+.Žč–Śą—=ė+w)ŻXõÆ h7zŽ.Rݚ!ĪƤü9įėH­a»»·Š+”RC7jŃm©ł—ękŚ{8=$ųÅÆ¼6QéBšCl_y!±»õš_Ä?Å«Į6›e™į@C† ī5”äyų r• Ń4]*š„¾˜rŖqštæ“–Žę} žóOe¬\:œõź+³ė(`žäZwƒµ+;«4–{9,W‚ķ÷ĖząWŠŽ Ń“ĶÓR‡ÅÖ+#9¶Tmź}ŖP=J8{Ö^)øŅ&ģąŠģ)82ÄVe¦›£jņŻyö6)ēi#Dn'“ŠŹW=ģ4VĒ ®xZūĄ·EŅęŁü)$fHäF ĀsŹ·ł’’?Ē¢ĢŅ£Z $ݐWÖ¹$ŽĒ”ģ®ké:­¾¦‚D`ņ9ūÕ£u0R6Œc¬ĆŁGvc;^3ų«ØsåīŲŁķCv„ ]ŪĮ{j±©(ü0u8e>¢½gĆßõkˆ,“oXŲxÆ@‚&&œ,ī¶2;wü=PĀPg ©Åc żĢŗTf6bQU•Įė,¶W6§'—÷išÓNåė™õ{(µė+½'ķ1‰md ¬Ėź­Š×{ xĀ8§¶³Ōftfl+ØČaZŲź·5„ų?ńOƾŅuæéŚŌćƗ/’zGĒ#ńęŖų•RÉ4~dĄīŻžõ|ęSLä®ōm^ŅÆ¼5ÆiŃßi7+µŌš#żå=|õš_ųkx&š²¶»£» -äsl3Ń󎵦pā0h±>üIÖᓱ±Õ"•¢Ż†Œ¶qė_„§ŗń֕£č67:†©pŽ\0 囮+Ö”ę|Ę?.“nĻŻ_xį×ģuū3x“Ę_“ęe=śµĘ¢D„™ņ­ā’ßNųŸ$WqßŲĒ ź>ėd`dł’Äŗ½ŖßipŲZEg ŖĀdTp02}MW0sžĖš’įCiZ¬M{qfóŪå̰ü„øė]ü ÷W·DP˜ķ¦Mé8 †Ļõ¬%+)t<§OšćéZ¢iĖt“® d`mé‘[zƄōÅŌ “†å±½>\śV|ęg=}¦¶Ÿ č-Õ­åēv9ö®źŽŅåŅFä;ŽžĘ¦ę\…†ńŠxzK{9 ņ–OHW…5§=µļˆĆ­Üį!a…tĄ«ŒU„ćc ßį…ÖˆK{k*ČK£†T=7c½tÖŃZصyXÄz:šńŖqBf6”§ŗQ{uä†É'ń®>žžŚh­•ƒv¬˜ŠZF™©\;@į¢`¹äōÆC°Y“‰•Ÿš0GZ@s¾1Ōµ+ۘn7µŚ× qX^ŗ–ÖvŽqö„ݐ\v„'`=$Ž®Ń嘊ōŸ¦i­o#Ė’¹-ŽųéSķņµ‰#»ņŹ”‹w_Zź¬-Lϲ¼¼ō’jhi)v-_C=¬J®õĒZĀßö‡_5› Šē®k"!‚ŚhnüŲcGŒ“ŒY·ŗ¾«o}å„Ͳ+g(pGµk„S»Ōµ FīKŪéźķŪ,Ē©śÖŚA(‰ ¬2Ą1Ҭ—x­Ÿ{*ńž=kś9–pHö¬¹ŒłY˜ČĶņņ¢³eg‰öŽō¤ī8Ä蓨tUBŅp0;×Q%‹Ä‰1ŽEĮõĄ"¤Ōćµ ås$2å;YVĶöpāg0ūĆŽ®0¹Œ·3õOŁišČ‘J'a“·é^O®ßkWgtq ¤u®…JÄ\¹e¢„™P;ÖŠ“s v’>|ö„%a“Ł@² FpsĻqļZZZ“jQFŽNk™²ć œżŻĀinג¼PŚ!,O¶+ź?ŁŪözųķūTų¦ĒĆæ¼}öi$iÕo")gd¹ä—=p;k*š+ŌéŲž˜?eĻų&ģóū0Y6¹ć}?KųūńžńJN×0£ŪŪÕ3•O‡ ]‘¼Ap.01Ēų÷® ³„37Tų“ā?¢xKį5¢Śi#.¤Ć–ĒbĄr}«¢šļĮļ²jK­k&ļ\ÖēU+911’s8¦¢„Ļ„,ō=ēI“KŌaMxѶ:żĒ8įJöƓ~2ųEī|®éžžŚŠ‰Š†$ cø“łółÕX•#Š_h> ‡Ā~*Ńmʶ×F+Kėk„ßs1Ę}äW§x«öhųmćkw›ā‡ĀÅŗAsIb9Ųs“œģiņ—ĪĪ×Oš½„4³„x H¶š¶—· 0Äq€BśJ³«üJŅ|1ioaqmż”®0Ė"Kū¹õżzé§ Hłā7ģ-ō}_ğ—ž_ la0Œ„’g'5ųiūH’ĮN4æ Łjžżšma·ž&1›ėÄó~`0['ŒnõŪO žę.vч^9ńĻ‹¾"k7š÷Ž š'„üIćoLā%·ÓķšLĄ,Gfæzædæų#U•ņi?’m›č4æ ŚÅē’Ā-ę”cŸß9o÷EqÖ«mē§N?^ąų•šėĄ^ƒį÷ģĶąk/ųnŽ1æ[!Uf1“Žł'޼ŹļÅk>ßYń'Ä"§ĶGo2±ēo8⸜»Źrŗ‘©źiæųĶ Ę±‚ĻO&?)Ćq¹s‚>ž•ŠkśĶĶՅ¾Ÿį»=>ÖŤņ$Ad‘G÷Æs"O×,`¹ž6v7מPFpj ’_]ŲĮ„^ĢR( Tƒ=©)kØÕī‰ĆŪßŲŁķ» µd=?J›Ćš_‚|Ƨ‹|\ėā`&#¶'+¶ÜsšÆ0±KÄž5ŸÄ&ö+EFˆņ™<¢vœĖ„p¶7v÷‡|'^ŻHųūQŽ÷9õ÷ü©ó!ū; Ī—¢|9¾’óĒ„‡‰õÕ`Ńäǒ9Źņ?µį~2ų‹¬ź+ymĖ„éfF1Ć >ŻŗRv‰ā“\Ż?˜R_³ŪÉ÷øĮrxĪkæų}šśß^’+KļS8™†ā¤÷ĶsMšDūƒĀß tߣE&­*j˜ŒeOœwҤ“ųm­ųšöqqb‘Ł“®Ü/oƹ¹5™čž ų9eąĶIęÕtŲfŸĶ,ć#,>µō5ŌqĶki–QY@(T¹ļZØv3”»œ\æ`Eøū\ąG&BxŪļU’ŹĖP·¬ļ|‹IpDƒ¦ŚŃC¹„Ļ<Ö ƒGÕŅĀ&ŸQIŸć…ć«z ī49G… ’Kؒ“”'½R‰*É=®«q-ĢW0£c €ŽÕ-¬r$…‰ŽsƒœU©Xķ5ė­6ÉģēLõŚ@ÉjÉotĮć™<¢¹äóš|ģÉɝUę}i”{Żü;m īņy൓vÅTˆs‘ŽOnq^š×B›OŗŌ[ÄF[Aø€S€­œ}Ŗ±.c|Qš£ĆŗN°śĻ†5[†ŅŁ^;)—& Žśf¼cQ’#™®ŲdtĘH=ė)nEīĻ:Ōü+āOT·‡G·†źŅo”#„ž+ķ‹O‡Z_Āxwū[²Ä“ɁūĘĒżG„Tcb¹l‰ioź+ńE’6öŚ;u!B’­ņŒ‘Ž3ļZ:oĮ?‰_¼Ž|)aq²i<ŸŽķBƓžCLqŁė¢ųSšiSĖ„I«½Ä‚;ˆäˆ”AŒeŖ‡~i²kŗ?‰.“ß±ŁĶ»ģūĒŹ¹?6Ž?Ī(,‡Z>ųfēR“‚ĖQhīdcņć×=1É®3EńŽ“­ėjp$r$ڈ6+{JØ£cģļŽčoąėčķä‡ķģū¾ņō8šÆž¼~TŠŒŗEƒ©éחZ¬MŸ•ø”cžµCOÕu;©Æ –ØłŽ¹łF;śsU~ęŃwÜѱ¾Õō›MJ ū»Hē¤*Ė>µŲų旊üš¬²ź|ņFa9„–ĄļÓ„i̬W"=‡öqų٦Xhž2Õgč>ń3ĀŽ6Ńķü ŖĖ&„ņFc›p ĒVZń/xM.į¶Ń£‚-B(‰†ł—=Ķa%©¤Zd“,˜`ąϹń.ŸhÖn±A2"FB*£ ¹é_ 4ok¾%†+ŪŲēÓŅé&ł›Sūøžµś!ØAig¤ßŒŸp¬`ņGćJrģLū)xŸį‰~+ų'Ä?m·M7F“ŽKĖk£“œ`cźp8ÆĪ_xV-"īKvW˜F9bx$v®~k;Čń{°‹ę„M¤ŪOšŌvĀĘę ķĢ’ŪŗŹN `ēi®ØK£+˜żgų3ńž/é7rŹ—·±f™;FßėłWŃzGŠļltū:ŁĀ,~^:Ā­$ōeGsKĒ7Mq#eŻĪOJųćö‘šU«xŪNÕāO/H¾EA žGcĻé^mXņ½Ś](µš•Åń{;1ūˆā,¾Ą šæšgĘ鹟āus~āĪāo³]µĆ,ƒŠ²Ž¾•tŖkŹtržÓūJxŚĘź?é7v¶śFŖ„’t¤„r?ĆŪōÆźožqūpEūJžĶP~Ļž0æ’_‹Ž  h®N&¼±j:’~a—ī­wŅIĘIō’2‘ū+½­n̊¤2žż«éŸė1ėT¹9dłNNk’W{ž'ń_Ā~ŗ]cMńF•g{ą-~Õō}n bß±H ėŠŒ¶±5ž{_·÷ģÆžĒ’“_ĂڪE‡-Üź^¹Ė7Śl&v(œó”ū§Š©Į#š˜KR$~tźPęŠ£Žõ’ŹĶlœ×t)ą`fBŹ`xē­[Ž%9Y$#œż+¤ĀQ¹™ó2¦·Ņ£Är.h3åbF„KÄēšŠ·‘—‡Ś•#¦™½‹ņ©9®ļįļÅüųšėćwĆKūż'Ę^Ō£¾‚K`Ÿ`]ÕJäx= dĪųé»ū0žŠžż­¾|.ųńą»čn“ÆiŃ5ڃ“kvĻ 2žß/½{&§„\ŪˆäŹžĘ¹+#c˼g§Gwi2Üm.#6×XPr‡üž•ł³¬|6Ōlu»‘Įé\Ubicłr’ƒ‚’aˆ.ęŅj_éR­¦©,zˆĢI”²½T>EÉī¢@¦6=2«žM!“G;Y%½ÄXuJōŪ‚F1ųV63”M/ ŻĻ„¼Ÿh'ģ„mćœW·ZOkp#†Č‰FÕlÉĻjä«g³ÓĶ弃 „];Ø÷öÆńrivŹ„Ö8®_8ć“YCs”2§Ąļˆ÷¾ńĢZŒ|ś Ó}šxc «3n>ƒś×čŠėo©\‰fA¹ˆnPzōč¢&v7€1Üp+rźõ$sņ²š@k¬ä’Ōæ§źöėnv–YB{Vuüßjy%•Ź8~¾ā‚NļBņŪĆhŃĄ³H2ČŲĪź“Ćž.Ō¦Ņļm5«h£E‘¼¦ō÷Ęx Ö1:ĻųÅ.īO’pūF3ŲÖ'Ä-&ßÅ7¶–¬ŗ„"1“yN@Ü~ŹQH·„éŗ‚vėšcī–4*É·'ō®C]ŌnēÓ®µe·ū,’eĪ1ų ØČgŁjڬWM¾ä±*ĆæZ–Ź$ƒ}ŻĻĪ®Œ=+Ŗ“KŃļķ “¼Häå²¹5‹’čRv:æ éš8FŽeVQōŖ~7Ńu•ńe¤«½Ę“< µ‡-Ķų*ĖS*\ų2Ń ŠīX;xąUķ×Au’0ˆŪH†z‚3H脺#a7ŚüY„Ü”ciOĪFpsĄÆhń'…Ž]!ē¶ø3O‚U /Š’žk*†š‘Į-„ÅäJ²ZŸ)NGSµGŽ"†DńÅpUŲż'ĀlW±ā<ßZ‘_ųåżNUų·ugš¢’įŽ‘„i¹.Z9$¹źN>ƒšłyõķSI¶K»ø$…¶ŗĘ¹ž8öÆ"Ŗ±žØR÷we³ńCCļ¼ø’<(2 ĖæŃš×5w⣫]iÖVo ~}Ņ[‰zą±Ą&¹$Ā­ucģūĻ…Ž"Óžų—Ć—Ś źÖ/g¹X2#*2[=†+ņvņšĒˆgŅ&„«L=G'ŒŸ„+ö<ØĻ™6{ī‰e ä“ Œ|ÕÜn}<« ݳ!Į'š„Ķ©ŻN‚åŌę®Z8f–ą¾ł$;œõ$Öē‡cÓļo­žńŹ[¤Qó(Ļ8¦pbč¤wZ¬7†µŪć£jSj4»^ełĄĒCļ]}¶«„j šG%—Œ·QXTGÄftV¶=gĮŗŽœf·ƒ]µ’ļOB¹ä/µhßXßčž"ŸMųm”^x»Hō‹|üžS£§'ł×‡ŽŠgēł;=§Q_Ū{ĘŽ²šg‡ ›ĮJ¬ŹžsćjöŚżæüßż©~ ų³įģZ?‰¾ ź/sÆ$Ļ Ł.ŪĪ>}Ž™5óµØFźēČb ?ŁÄm­ü9ńģ,­®5}:į®āieåóżGå_ü)ńŸü?„÷Cż!āŪ$|²ģ=G½yÕh(É£ž2ź~ƒx.H¼E§ …‚ ī3£žkŠ<#āĀŲ¶7-ŖØ•Ō?˜Ē³E*zž–ź|Kń;0i¾1¶æšæ†ō}@šAsmtń’óŹ‘Ÿ\WĻ÷¾>ųÓįĻkāׅģ¼C Éßu§¹@6ß@jöčÓŅĒŁåµ,}O ÉįļˆZ zē…/⻳”n+šĻ µĻŻx[Tµ2Fń<˱ؐøĄœ×„J–‡ÓƬ~!ųūʗ>!ųö‰{}{Ø6™v-m ?,q9ÆŃ}zMFūū*ŽęŽŃ/¬ŅŽTīŒto^ŸØ«Æt®y˜ŗŗhq:ĒĄ]>{›ż;C•ć·Ḛ¹ Ø<å^­šĒĀz•Ć錵­¼„`»Œ °9ī:WĶbj»Ÿ#ŽŸCõWJń¾„j5=złąņ-ŠMo)!nfŅæ•;_¶ĒĀŻ:ĆTń<¾Ó'ŗŃMŁæÓöÆĶ’K ż3\ ­ō< ’öM:V·¢j±]Kg«X81C#ąÉ“óc鞕ö߉|]`¶’4rM*lŒĪ{ćņ4Ŗ+ ¦ś¢GŖxŅ’VŅ.ŁÅę~äęLżkŠŃo-“­sQÓ„€A}žKqėł×‡‰G}'©ķße]wį·‡µ[©¾›#DHżŃēōł«ēOF²{^ŹŪ“uƞ«&™ģSކļ€|QØx'SÓõ*Cö$ō„'żdDr+ō‡Ā>1Ó¼M¤YźśVfµ˜nRyڵ”[¹•jzńW‡­5ہ" r¼ pMxŒSi÷óŁÄY$±Čąā½H4Տ:֑éŽ#ńF­õ±XŬM䩓Éž=Ę+ó’Qń,wR†:sgŪ*2ąĘŁä}+ĀĒRݾāž!ŻŲ,zcéÅvø2+ž sÓŚÆx_Y[»Y!ø]—Cˆńœ5|Ō©ūĒæ‡fŒśķī—ēy2 čĄćurŸ55ń/ĀĶoK¾˜=ø)p—īæåłWÕePjKsźš-žcąĻß]x"Ļ7D¶ĖöpäżĘ?–kõGöBųÄ|GšĆ\ŃÆ“_±xŹźīvW|rǼ(8śąāænĮV“Šģ} 7.]Ń/ŚÓĀŽ!ų]į-÷ĘgG“ŹŃÖŚ+›5ڳØ\`ƒĪ~l}1_‹Q\¤™­•£‰˜øĻPēś×©6}’†_kUė¾zܹ "H|Īk«š—Ćįā ^Śģ–†Ż\³c£zf”#ōœŪ0XjŖĻ«ō-!Љ`u¬Ÿx¦ĻOŅ®d‰Ō".Ī3NiŸ‡Ŗ³­UĶõgēĘĶC[Ö\ž?„y%–öW’$mܳ3É®9ĶŽĒéłF*”_Vhæ‡&µ?o¶VŻ·'ÆŅ­iś“¢\Ę! 恟†”eÜśøRV6SM’źĘmT*y(Į8$߁®FēR(ę0ß(ąAVåÜŁ"Ķ•ÜO›ŠÆÖ®ŚN¶÷ "¼ēā¬e3¶Ž‡KŖźėZ§¤Ķe ©:lÜ敶}s^q£Ēįļ \ióßčQx‡C–¶¼³f+äē#rū×3g„”Ęéwi„ŻOoɘff¶D'īäzW~—ipćĖ$§LžžõČe™Ģi„flžyķX÷°¹Vh¾uQøŌŹ] y‹śc}·N‚ö›%3ŹćŌž•ÆĘ”Ģ;zVaĶrüH³ķ¾cļXZķ³™Ń³ęKĪ:žUÕHĪrkcč/ünѼIįį_ÄÆ ŚėOlā+;óYcģ¤ąćŠV—ăöÓō]_MøÓžĪēsĒn GŽĒóŚ2Uēnē—}ŸOŻ=ņIjč„£ÅyŻžµ%Ō—ŅŁŪÉö[mÜVsG^¼žŒŻƒ[18?›2Nsšļ¼?ÆE,QɆX‰ūÄÖ<碈õæ_hÆ©®œ-nķn»…+\Ž‹ éf°|ø,_ā¶…Ašk%­œŹ!'„t3\¤Śq˜YGSšŅ24¦Q¶ĢĆ&\‘šŌkgž‡pNłļ]#œnŠĻa-¤&{<[Ƚ0µ›ØüQų™ąėXšO5Ļ ųŽŹeø·ŗµo™Hėx#tŖ–<¼F3N2WLōßžŅæ><.ĘŠ^%ńęyööwR\ŒdF /éUD&āŁäłLcŽ“ŖbÜń²Įåxu…ĄSTé§{.ļÆvgA”Ņ4Z€xal€ąd©Ē‡œr ʿʤć±5Į'sé ¬Šöć.ŃõŪĻ>•É­åķ¦£«AÜß`—ŹĪU}Gņ5Œ·{; hb²üģrVŗMė^Õō»ķ:E‚ś –X˜®B°9­QĻRŠ’p{{ūJübńgĒ ūˆ5Ó¦Zźžpö¶ÖĖ·c’|“żģ öė_9ZėV¶ŽU£Łjh ĖīĄ×”Qü¹_-–:ģ¶¾GٳßÄĖĻ K#]¼‰i6ß3…÷ÆÖļx¼kžŽm>hīķŌ;N@Čė]”Ö‡Ōa©ū×*K§]#™ZGx›d°–ö’Ǭ“M4W¶wė2 ēn>€WõškÄŚ?ÄÆ>ńŸsŻõ½øµŸh” `+cæ­ztĘV••ŗ3ē?žŗŌü!ćķō4Ė­9ćø Œ°Ü1Œ÷ęæ+|oāyüKą/‡>ŸU™µō„æ˜V<(Ę{“ĶUIŲõh;¤k bīV§mĢ© ub”¾Õ"Td†r =«‚Nņ:gœžīÖĘŌ®īb‚ŃŻ€×U¦Du X/b’)ķŸīI }E{™|nŁüiōæ­(įpT’ŃŹoīQKó:xtłQŠ}›ļCŠō]$=µ”RqĻ׊@ž ©”$–ŠĖ:<©½˜ćĶ7Ğ„Ć Ä‰–TŽs],Īf×CŽģ³ŖHĄäߎ¾ų;¤XÉróN1$NB«toóŠj’±źŗę‘£]„ÅŻ”*ŒpXEx_‰ō)ü Īś3Eql[|lSG$Ŗt0/!"‚½B5óęś~5ēś½½ĢWg·ÜØ0O„hšlJW54­*ž4øܰ0ą×Qć/ Ca ½ōm¼ń† ęGĪjģ<ĻĆVZĻŚ’XÕą‰IbČÅ]Õ“¶›Uø˜0óg*øŅ{OS&m2ņĄ}­Ł—§Z‚Žłå•ÖF$žõ“‰ĪŃæĖżšXa]äņ=s±Į©‰ĆKnaSž sZE[s‰EÖł ĶĪ:Sī£}€"½…QQ•Œ «kœ HŁ”źŠ„UĘDxēŽ¹©”¬A×G ¼ÄH»óĘi@’5Ū§–®@ RŒŗ—sšŪ@Ō¬ooÆ.Ś*B°ūŁėŠń=†oäU™Ž1ņ咊µRŅĄzF™©[ji`©‚Fk6ŗ‚ź’f„›x<ę“dŹV4ē źQ„cx›Q–Ö×~žél›0ū›$qĻõ¦˜œĻĻoˆńĆyuŖµÄóŖIæ.I!ŗńķ^'k©jóčļaØ^ĄŪ%%6 2ē=;ŅHĶ+›šMę©l#Œ\OĀą>ī[ė]f…©kÓjńŲĒs$ń?ŹÉ!åOcüé5Š [kp=„ķŪ@’F8#’‚¹ %½æ¶·ø²„˜z¹šę’ģ35mBét+ĢŚA,ܕ.HĘ=+Āc·ŗæŽIŁÄr±Žyż(ĘĀ;o ü7»ń=›_ßĖc=ŠČĖ–@¬ū õÆJŸĀÆ„A,V¼˜†ŽGŃ ;7ˆæ¶¦‚̬`ŲŚ1ś×²üš’ƒ5;7‹ĘpQ"uOG>£Æ¦ČqFWÄO č^»™“˘^ĮłŠ5ӫʬ-¢ŗ¾ø&Ņ{rĆh^Gėž5‹!Ä֋HE¹&»œŽ9WT ‡øWlœ9¬œÉ2ī ¼°˜¤Œ2Ÿ»Ē5ÅCö÷‰Ū2‚IéÅCeDģ!¹²ƒp»µY÷ œl>µ‰qt&’Kxę@£Žޤ¬Ģņć\³nij¹Œ6H$ŚW  Mš·­rö”ž Ć×½d[Ś™€;J?µ$ĶŪ!*½µPžŽ £)‘¹*4ģE§1å° ć4Ēūp¼C‚sĪ*œžĄl±kxāĆ×ÕŅį”Ź×C{Mŗ΁÷…'€Ķt“Éö»‹H"h¶ä®Gśõ®zˆÖŸc^k8"xc’ ·8ĮlvcNŃ|AÆkv~š†…sāÜÖ|¼÷lgÅ)$z4©ŸÆ±§üĻŸ¬õŸˆŸüuož‡p¦ßĆńĘPČéÉYsó2“ņü¢æ|¾ųj]CĀĖįŸ‚ś>‰š_Ćzīžxģüµ¹ Į짜p~¹ĶqŌĪ›‚ßü!šŽĶ<;£iZ—Ä_Ü9 %“FC÷$@÷ⶇà ĘöųĻāGˆu[+ų€šßHhĖFÉŌ+~łÖ.:Œé~k×7—Öz†<§Śųf<‰®aifTä×wćϊzĆč-.fŅļ//QED·¹LՉ¢—Å‰ģ“ CćĶb÷PµŃÖ1} Z6]œ ”dĪOpG5óF›ńNųēą½_QѼ0öŚz¦eņ‹Ęķ ąg?ʝ…g•ÉńGĀŽš/Šü ¦hWھ”–×sfŚQĪńž½zƒW>üW—āē„4ļ]ųę$øŅ­n“¶ø>zĄÉCü5¬esOfĻxŌü_®kšsCģ~Š›Ø**ś±<7Ņæ4æiæų(Ā3h:7ďGĻŪ¢>b¤ƒ¶ŽƒčP„s#łčųńūc|_ųÕØEØx×_–öŞP4år‘čÓåµ|aw©M,O ŖĒĪvžzś×£Ųį«.ˆČŽ=±¹=OQC„Upǵi՜M܈*+0—Ž£½5cŽU€#<ūÕ¹X‰Jń‰÷."T{v«‘Śļft”§×”>õ“d)3Z=:[l¦<ÖĪINEjƦy»J§ļO_Ę¢NĮm›‘hāĘśŲJķ<²:F¶Š ņČĒ D’N+õ[öK’‚NžŃæ“£Ųx—ĒB’ąĮīw½eķä9ź€żĮŽēŠā­RĒ”JčėąĀļŁļö)š•Æƒ¾|;ƒĘ> aå\ėrĘ$’I?½$¤e†Gn=3NńƌÓQ¹¶Ö|g{āBbĄi’£ųBÓšćŪ5Ąå©čĀ'£\Üxž ­„xr ĢL˜ĢcģÄpŻéQYhś%Ÿö„ ..µ©, Wœ Ļļæ=čŒnYę·Ś¾æm­ĒØjZ‹MqgŹ™C«ąō õśWāO‰³k×eM2 ņŅćŁtą‡µkŹe2¢j¶¶QŪƦ·ŽJAW{ćük2^ÜźS^xóQøŠķČڈņL«Ūv1ן„D’3æB§‰|{Ŗ®™o é6Œ#äŗŪ¶Vēų›ń^E6”„Ļz¢iM޼Ąłq& ž·Z‚ćämĮįļt»oā'a¦® ¶r'L)čņ®/[ų–-ķąÓü#¤[h:|»[…”żćĘOåHŁM©ź‚ęį2ź7Gęi¤;ˆc×·įPiŚ·šŒ+uiw| ¢)84œ‰r±õ—?g]7ÄØ.µ¦H,#ž=ųŻ!?Żė]Ē‚~?ü^4Ķ7Kž XˆåŁĪx&±µĢåUOĮįXī ŽUPÅO…V Ó.@ŠŁlņW¶*ćžUźÉu4)s؁ĮäżįéZ¶?¼¢é«¤ėĪöŚ“ø &rŖ= j‘å™-4$Ō~ۦ̗Ö3•‰čł“Æ“Ż"öĢĒ„ØGPNÅ ž(ņ™ćńŻCyŹ<ČA ńĻZ×Õõ«FŅ8&H–RŻ)yT·—Ž{Cm‚`pŗ„¼6ļ—w®OŅ€0WYƒP¹„l Nw)śU;ymņIå•aLōĻZŲ É#ÓŚAq Ŗņ·uĒ„L÷ŁU[uo1NįÖ³leY./näXg+č«:ćMĻFqĮ"ƒPšęµ¤[É­Kɦ Ÿ°ĪM®-ī>ČD­Ž R3Weƒyw0“wR2>Üš8S\ÕµĖK3CwŁ/f8c€yż+x»ČĶß x§Ć©t`½¾¶…ŃŽCž[ŲWKs{hØ·¶ļ–Ņ1VRGŌGjrF±ƒEH®­Ā™RB;Œ|wvڜŅ:Į,.§nHĘ’zēĖš,–l<§“ŹõÅtk©;Œ)Ü:Ō٧ggiyjo„¤ˆĢaĶpzĶSĶ, …”gč2MÜ„°ū7dż+ž”Š_*0’ēh$rō čŒnyFæāh4żĻ5†F ēҳl|jņ*KjŒĆw]ŻE ßŲčw7Āķ¢ŗšMūŽJ±®¾ ±°^īć„`rզхØ+__žy&‰ˆ+ū¢·Ž’/"[2w6ڸ˹€ž¶Ó·=ÅҰo˜ˆĘvžõĶĻf¦ņ),®P@_÷źœ‘Hh~/üdŠÆ“mF7µ¹ón.­ć™Fū Ž’Nk„:~™ØfŚź±“ «‡u=Hģ­}YĻ©ĻýĆŽ"•4Ó7ŁīUL;Ē#ņÆfų}ąĖ›‹¹mn§Ū)ʌ0Lę·‹4qC|X£ĆšĻ„Žl{’|±#żąG§nÕäƒWŗŃ䆮&•ć“ä.ĢsĻ­2%¹š_ᦧā_š½ŻĶ¦—„:C, ž ć=8Ę:יj’š ģ¤_ķžīW%9ž“)g‡»oż™2£g v9õot‰nuK"–ķŸ<I\7Ē'ń¦†Ŗ0ŅŪÅBĪKøgŗDTV8,ßÓ’­]Ä·š6-¦ĢŽV³mū§4®D¤KńRŅSĆādƒķFĄA2· ĒLWƟ®—S±nÅo$•˜ĒīØķMLʇG}+N³‘¦kXIUóG” q_\X|.޵Ι«Iq©Ćmē#²|ótõµś“ŪüJń/†|m kW0O3„Į†ä Ż¤`ó¼tĶ}ķ¤|XŅüM#&ƒh]4dØiŗv?DٲLłŪāŽtĶ[iüFa’ćĪ`óøƒÓ5ļń_AÕµ?éZy±Óm.p‡1;zŌ& żšž­„xcķ—p- øb@,ļĻjö ųųų¢y’(ŠM€žRއNF~Ģą¾"iz]Ŗ^ŲŻ™-Æ®§A“õČļ_“?ü-mšžźVÖf•ŽbV8x%}Ź „t«=aķüWmrÜ€m§SÓÖ¾øāO†|Qį}NÓM½ū©šZa³ ¹ū¤õ5L&sš'ķ„Ūų>÷Įś¢Im,‘JAϧėĻć_–üIyiā•Š-ąv‰ó2:ÆB~øØäÖäņØI¶ēqGŽänĻzȓ+p šH=1]‡AĘ:SžĻ?“GÕʑ{Chź[ķĄó$čĻ\wÆŅK ­ÓDšĢe…‘[v1É)N,Õ’IņDZ^eńĮæš™hŗ|M0»d! Gē^;WZ•Īˆ=OŒ,¼UŖųņóFŒÅw0ŒĆ(¹¼„tČÆ>ŌoŻÓ«¹+"¹Py=Ҳ+;ŖW>÷ų7ā_ŒŸõĻk^kI H‡M»r‡'”=?Źżh’~Ćæµg‚ž0ŪĀŅxz9SLÖlÕžy-žM…ˆģ µvÓV’"1JL’A©5]/Åŗƒćæ Ü[źÖ­£¾·š æ:† õČö"µü­Ė„ź lghćsó ’:Ęqi“Tļ^"šä:-ęŪ4r®}ž~ą“?²MĒķ#ū(ź|!¢EyńēįlĀkĘā}CJfB@ł—gĻ‚N oŽ[žZĻ–MŚŚżŚæĄ™;;ŸÄWŒ4Éāø³ÕlcWÓ.#2rx>›?Źø)¼“p%÷‡Ž½(ģrĪ#YKHeńŚ–O,¶ķžVZčŠ9I6£m Ćg9­9„[Ų)8ėƒL Ņ;›ac»µKå–£;õā¢eÓÜæm:ø–ĆmćŌÖŌ+ęE%“™1²ķ5‘ŪMŸŃ—üÅūuź~2]~Åß’OzĘŗźtꧦĘčŃČ»m®kgųO­|{ńgįp×­g×m&Œtyće}æk·čS>øēšć„yņZ#óĆĒ^Ó¼Y£.•·ø²Õ÷k†?ńķrJūéųŠžP’oƃW ü{oćSgö^Ż5…Ź*ķņf†#°Ä‘ßšžš?ąœ’µU÷ķ!ū:xrēĀśœrųēI¶MkJÅĒ2:ŸßŁH½‰ēĻ'WBz:° ¼uæĶ§öŽżœ|Sū0žŠ^2ųqā{IßRÓoæ³$uM‘]/ߊåAč²FUæåś.HĖwm%؍”—o@q·§ą’.—ŖĆouw'”ŽWĻ­e(ch^-Kč-픓>[ŖżŅ1÷¾½źsšū¾7Ńēžłēgˆ•h#$šårQf“ö<Ė]ųak£ųk\:Qķ¢/Ü1ųāŗ’‚Ÿ.u;[M^ŽXµØ »s*0å^†Ŗ’-®‡ŁVKŅ[]G1UpćØö­ł¢i?-†»Ž:…Ūk2±»s’:t÷«RXNØ»·Iœö Ģō…Ž$šžŸ› B! Ō3m†ĮWķ~Ÿz‰<=eyo4ZÅgę±+“p}Ø5‚ŠóKMÜ“Ķ:ī-‘“Ž•“ué®uFLF²¹ ’Č ³×4{_·č“<i$Ŗ…eŪĪ9źkĢ/µ ;9§µkK[«r Ż~Rzd¹«čVV×¢kV(7īĀšµU’öķ.$Ģäcz֑‘“+¾„t]"wq óÓ§Ö³5 $»XÓcƎXw?J±ÖqEc%ŒÖģźOŹAązę“­lį+•Č#īńŅ”£—ČŌ|۵٠Žõé:µäš\‘ińł›X6üdéŠĪLŚ*ĒUa©ż¬Ū‹ŲŅŻ³ŒØ©|E§ėś}Šm:įf… $ēxe’iEšĆsĶōļ Myc2ß.ĖŠÅ˜Hzjįn|?ŖiדڋMšrĀPzżj¢l‘ŸqįżM-¢–XVēp;ŗ®śÕrņĘ(,Ą²;÷½*ā0m=jŚ?ˆ#‚ŅP{o1‰ņµ+B’)>æ.+õ÷ćōańF†mõdŻ%“Œ¤mŽG^•…ZüĶ\ä2Ē…ž#|Dų™ØŪźz±£9 ¶LÆūµ÷ĆĖ–Ņ®”¶ÕNnüĖ!?+ż*”#ŠĆĘĢöϊšIāOéZ}ø0ÉoPz•ā66V'ɵÖ좙 uĻÕķaO¢ĆT±į·_’ų{ńūĮZßöŽ¬Yų‡Ā÷ĀŻPĮ=¹Ļu·µōĀ|³Ōõ_iŚdSŸŽ,‹ƒ¼tČĻ°ÆĘQ×CĀÅV¹ōgˆļ¼«iWڟƒ¼Uįļéīp!Šą Ō<÷Ɠž4ü%еļx»MÖ|3S6M©iW ź~`§åż1ķ^SM3ɔ™ų³š–ūžŸÄ˜ æšx4«Ų„±Ėœęlį—>¼×ź×…| ”ųņėGŽÆ µ¼‘‘’ˆ v÷ķųŅöŒÖ›5Õµ;ķ9nł—Qķd~»C ’:ų/ㆯ!ńkųĒL)§K;<`œ9õžuēWĻJ‹=;į“ųÅ^ ×īdmBo ģå¤ĒCķĒóÆŸPŗ²Ō[ĆŽ"ŗ†;ŲF@\9;6 xŗ]O{īŽ“OÕ4ń‘Ęė½9Ūė_O|"ńŗų~Ö+'›ÉÓ\ƒåö\÷®siź]Jg× yęĀ®§Ļ¶u܎9WÕć>/‚]2ž×T1²[ŹåXć…=«ŁĆU2Ó4˜ ɹnp€†;}q}éÓnad@P6åoCé_=R–§Ńa*V„«Ūźń¼·4b’tp3W®~ė)š‰$Ӎ˜ŒŪ:)y@%±Ųu5ōYM&ä‘õ8:É#Īg &?ˆ¾ń½—Ÿqw§›ČõrFOn+źo†uƅ¾·Š|3£é7Pż©nāžeżāznōÆŪ²ŲÆe÷GŽeøOhµŲūĘß“7Œhļ Yi~0ošŅ&Ń“ē8äš9öƗµ? \hÖķq,IŽśW„(§©÷¼=‡Ž›§KfīsOӈ¦XõĶ}ąEŒ¶ńĻhVßi‡­b Ķø‡ėŅt‘×x§^…£¤Īø$vƀž1üaÖ­.'šī™ ±vg?AłVr—sę²ģædx’xŽóTxä»l²®2G+^© čPkęĪĪ+ė{K™TāY~TŻčMsM]Ÿ¢åø~X¤@֒XO=Œą}¢(܃‚­q¾3MD%åž‹³ź>^Vkq“73<~bŪ6ć¶EļŒ9kxnqÖ¼bķ¹ķšßĄæ 6”wqšļPPš¤ģeµ™eŻ–ÜÆ=·W“c®ƒØxPŠHšĄprčjœ9©ę2jĶjC{…­“—h…ķŌäŠē"ń=Š“öiK§vYņXō©TęŌ­ģŞč>šI#½t~&ļfRBFI¬ų#©ÓnĘQgÜt®ŹĆœ—N==kØs} ±ga)˜Ļš_ź_fń ÄPC ¶›¶…aČģML„c²ī‡+.SbqÓ„z-•ūŖ5¹l)ė&Į#āY„œ”;W< ÓvTu8=k9K”øļ“Eå»#Ÿ˜ō'Ņø[;µ–[€įw³šČ¶ ”XÜnŚ>SŽk"h$yĖŹĻ·Ó°®Š}ˆ–Œ”/<7«kö~*Ōļo4ė«[i#’;dķą‚@—=pqŠńOü5KoĻń Ćŗn„$€Ģ„X+”8ÜGn9ÆS“±ųæą}–)VKI…š—W³øÓtū'ņ óY›*žĀæA> xŁōš ŹZĖ3žķz«÷ägžµÕm|*N“ksōĆįʇā?‰Ś†›ąż?ĆĻØx†TVQ 'b!ć{0Wß¾’‚_ųFĆĘ~ń§ˆ¼e«jSiŚ”Z®££²’¢ŹÉó,jĆØĪ3ŪÆÖ»#MČžyńæĘČšåƒĆ®lEXŹŚü+e'ē}—[=t³ņų,ßķ3¢xcį³_…5TŸĘž –&Õąµ°ÓW²cīł‡z/”Æå]-4ūŅÄ ˆ ®;י˜5Ķ”čżøb®…žµ]ZX‰¹«­yU£“³’}T”g–"õ'Ņø¦ńōŽ ×“ķH9žņŹe›Č'‰cĻ<~ęAŸÓŅM#ļσ>2šŒ|g¦x·Ą—Ę9õ‚ÜY‘‚“r»qĪ;{^Łū|č:_ŠžhZeż³GāŲīLńFFŠ{ē’A­Ģ\ĻÉ}&ŽX’2ˆßhÜ£³b»M?ätwtō¬f“;貟ą†m8”Œ›Ö'°OĪø_@ś|Kē",­Œćµec¤ō‹i,Z8ŁXy’Ę3ÅUÖt=;Z°¹²*-¼Õ+¾> “ß5QģCč_¾*ų·ąī„¢č^%Ó¤Ö¼,Šö×2Į“™"naüDqž5ę~)Õ|'{ńÅ2ų6ŲŲųz{Ó$1•*UŽśÖ±g"‰į’¼'Æxoşš”xjOµé7Ģ…ŃW&ŽÕś%ū |aÖ<n“c$³hŚ„ąVÅ·&O ķż3]plš+P|ĶXž‡¼5ū č’¾x×Ēž/Õ§šĢFĀąéīUNŌ'̐°įsųžKü[d¶šōš­ŹßK†VœūĢ1Į•tb)ø¤ßSćų3#™c±˜(FßV”c~÷ZżĶ5ē¹ÓÅ|ÜŽ gŽ“¢ÖęvwhómŻ y©;Ÿ§­µ<+ö„ŌʅšėU°–Ž&†ēz·ĻӚā’bƉ÷wW‹|­ naÓŻnl9o)ń÷‰üké2ŚmÜžśaćSÄ`š’ĖKļi~‡éŒ`»„3(éņÖŁŅÆDĮdŁūĆ Ær*Ēń„՝fƒ„[„¼»å郌¤ń*Z5¢Į0Œ2¶åozŽ/C 3ĄŽŗ¾ŌžW»k„ä„e(öǵ{ŖŁ.ˆŠĶgŸ—Žiœ•$gjšäӣ®L‡½qz½öTAq ‘x äØaH×6ö…”·ó”Q»n0~•Ó鉄ų‚öˆÖA”Ó°”ģcÉ ¬Z°T¶ó£FŹ695§āŧYGnń˜ “ų”"ÆŚ›9}8ĘöjÉå01€Mb,;.Q~sŸj$݈:Iü?¬čėnāŻ/1°ņĢõóżĶ²Ū<¶čą”c‚;ÓĢ„ęié’HŖ7°ßéėļ]ę›d5'%]y9«3•ŗ‰’½šŹŅ“mÜ䞆³µ$¢† ~CŪ҃)>Ć­tÕhb›AĄ'ʽ7F¶hķTC"ć ö¤ÕÉe[ĻķhÆ H„·¹.yoóÅO©-¾«k%Œņ¼'ĄyĶ )ó3—¼–ēM³Kty$(»Fžw}k‡¹±[GŽXā‚]Ą–ŪL–a’aĶc Ž ²ź­×ڶŠŗ™µ‰‘bHĮöÆ1ń€ĆtQ$÷‡qLŗl®ŸĶ\[į±Ķuśg‰ –õ •%1m.85””ž£u}NĘT–Ż$HŪĘ3Ī+—š×Š%šŽ ßg’Y ©$õV>ō ēń?āö·©Ć£Ś½Üiøē§ßlųsY¶¼°†He¦#ĖqŽŒ:’*Źcr;MśĘhīöžTbŒTņ§ė•ÖķułdK©V/ģķÅT– ōģ+š[’GŒmc¶ņ“rœļļšV“–šCøņP’]eIõ5 aŻYłdc0R@|W)©hzÜ€Z“Ń6Ü©ŒdŠ Œ¬T€ßć·¹ńĮ=Ål]@ö»eF޽°=;Ó±,µmØ-Ōn% 3Ē½XÓf‰ŻŌN»Óõ¤ˆ/L2²"äp;Smdˆ t60~“½ż«m oĶ*qß=?I£ßĮsxL‘_ė@·dlĀYĒg­s{cvd…@ ŠĪ–Ę8HčĒN+^óģqŚ,²—ŠiU·ˆŻd½ņ‚d•ĻŽ®?Tų’'øūĮā—c0|ä6+®#DՏ-Ōµ­BRĮäO›¦O5¶ć&>•mf5$\†Ļ~H@“ÅB°¢īDQ¼óÅSG$Ö¦µ„[fQ·ē ćŽõnI ²ņŚy ®Lc,{÷5Ķ8›Š¦ī~ŽžĶ?šM/ŚöGńoŠü)ųG4&čj·É²ęį³…DCČ 2s_ŅWģĶū-|ż“-;Ćž麟‹äP×/aód¹`0HrsŒēŒĒCÖ¼ŒD»¬#ecéxĀ? >ZųQ<;įė/ƒÖŗę¹0ū=Ö”Ęc#ir@ėĪ¾_Šæ³Æģ‡ć_xÆāw‹ģ4ļź±’hA¢ĘAóįžė `óŪŚ»hŠ“b•TČĻŚĆž ©ń#ćÅĘ­į/†6’ų#įÜS…"; éź}2; üýń0™'H$Ÿķɑ¤rĢģz’M} ¢’GJØć'–Fc!$·#éU%VÄ;ZFč[޵GŸRD’G+ƒ %0~ļ­=Q•”łeqź3M˜2hą‘7+vF9ł,¤•ˆŽ Šsž õ¤e"ÄV·Gb€£·^OµNöd˜QÄ¢CČŚ§·­ Š;K 4ŽĖķ"_ bŲĒõ_ģåūžŅ_“߉“;…¾Ō4’ĖqwŗŽ© Go?ÄČ‹NkšµC¶Œ{ŸŅæģŻ’ŚżŽ’cؓĒ(ŽO`ŒLÆ)óŚŚAü1ŒØ3ĘNOҾ¹ńēŠõωø»Ōµųü „C€Ś4-仦xéķלכRW=(źy†oüq/†ą-6=#G•>Żtv…¹<Ÿ^HĻćZžŌ"ųq :ʧ~%ń•¹-¢z/=c§ćYXŲćŸĘZĻ5ķWÄzåŻŽ”źÄ}¢ņžÖ=x*įķµ'Kń…ä^ ¤j 3Ē …C§=qĮļłÓNÄMō9Ÿź0#Cy·3ģĖČŖ„ŠžxćÆjʱšv½ćGÓõi›BѶy\s"Āž8č:sMĶœŅ‘ŅłŅ“Ų4żOŽK˜¤%.œģĘ6ś{חxŪÄsłigØ]Ē‚5v彀¬¹īÉźeųoĄ)ųƒē-ę§ƒ4ˆßs)ĀŽćėųֆ·ā?ƒæ g…¼+”Łk~/Lrj2±tūœ}•h‘µõ>Rń‡ÄķcÅW!¤’kģī1‡Ä`öņÆ>LÖļ­ģó““9 }©J= \š€gæžŚ “–8>wČ"æC~ü2ŃllZÖ=>ŚžL`Ė"–#>•Œc} *LśKšv“¢]Į p˜ć8pĪZŗķgE±ūÜż‘^`3€€`~ŃrĻ=³Õ¶ż_åS׎©źVPżšÜGÉ'#Ø­93s§½Ś5¤«ŌązV—ĆŻ;ģés¬ĘŽŒĒc0Ÿ*#¾µ¹Ń'¶ŠĘŚ9ģUšĒ?q}…SÕ5”·å@šg”±{›(£¶Ō"՚Hā ½N2zš”{Ø[éöӭ˃ļćœ˜ĪJŽīŽK”™Š– ķ]N›~ŗe쮉ģO\ŗēī=„tšÕ§2Ż9°‚!¼óŽk7^ųy«jjßZ^CĀį7żā{Ž®×Ōč6—ŗsĀ.ΟyvēšōIKn.<„Ē$ć©•09kɕ.ž;yŁ:Vž‰uä“Ė8Er¹…d#CUÖ­ZĀy³lć%AČÆ6ø†ŚÕd–ŅėžČŖÕ ­„jšŪEru{ecņsĘ=ėŹõŻJź®ŽĶ”c±č+bćn§ĻVŃŪė#ŗ_čó[(r"œÉĆÕHé^µ„ųŠÖÖį4›C,¶Į@™É$\ę†_1čv:”ņˆ-UcRr7“‚=wś}ü66Im­·`’4ńäœ`óް2lźc¾€Ć¼Ķ;3aK é¬t÷(ŗ‘BńœÖr–¢gC«EŸk.ųY#‘r†¼ŗń#žuĀHy#MG3%G[Y,3F–Łxäa×ߎ„Ō-`²/o$`ÉżętĶc+$|Vš'öŠÉ{cż”nł¶¹ŲF{ÆLU_ [čN[mRņ{]N ,žŽÕn'J©Üu‰F{4 ¼DÄ*o<~ō?ƒµ;ÅŅne’ i ›÷y‘Čõʦ»‡” %gļn#½OŖDXžd“†*ŲĄ¦”c›•6‰ąĖ;2`×”ŽĘ‰ØėŠä šżµšKB’*"Ż53‰ŒŚ±üķxŸPÕ|Cāk+;—GQarä–^zJč|y›iØų_LšśÉtm[§Ļ/!W†q_M©ĶŌśĮžŸÄĘÄŻXęh¶¶@éۚś[Ā -müE® mģŅqóŹĒg@O&µJŚ‘óÅ?…,Śō³_^}„D­å¹•rxĘ?p׿ ,µøÖ}E-^ŽA*HdÆl÷§s7-  kŗēƒuĮw§_KjšM‡V•Ą=«?ćgĘŻsā³e} lŽŻv¶ņAgĘŃų“@£¹Į|ŌõŻcĒŅjt}ÆÅŸč÷O„“ z7> jpź/¢k1¬›Łö’čB“ļڃ¢*ģ]3U°žĢķ•ąņGŹŪŽĀ=?ĻJčžųvĆāę•®¤—†Žā)m#•NKn)[©R‰ģ·ƒnt_ Xµ­ņ¼0·ļ–BsåōŹūę¾~×5åŅ56{6yņć¹4āõŠĖCÓ|ń+X×5Ė i6yī±FÄm ž6zżøųJžš­ż’‰M˜‰¬·™ł摼E hD¢~RxśņĪßXŌ Ņ„*įÉÜ:÷®Védū ļ‘äP2'?JQVb}Wš>ė[Ņ/Zˆ°Ūjž`<æ0ļĀc$żF{ž‘ćƒßä“Ćž¹+k 2BcLłc8!‡\f™gČ_æg»ļ ų¶oųwW:‡‡bp×lGoóڼ[[šī„~Å|ö›+µpr ŹNä^ŅÆķ¬ŅļlwŠBøąžųļ^õą»(mn¬ˆ ·]Ŗ~\w ‚ĻčWĀŗĶÄŚnlˆ!bG˜Aēś łGÅZv¼ 2xPaŲŠj hü>–ńšÕŚ9ĪąĮ}…}yįĻßčÖŗ”B8‘' %V@ƒœgµ83ĘõOŲčßē½·¶»šžōŹ,e”c¦A_aéz ¼ŗ>«ų Kekt FX`*ćļĊ’>Tń6•āSYæKmxO¦E6aŠ96£ćŌõŖś‡€ļµB“źsCē@É8ŒŸ¼8½iĉ"޹ayØI¤X٤1=Ē5”Ŗ#åPJ«Č_Zō©Jö±ÅV%YełA°±įTtŖ…ä2čļüU¹Č6A,rČ|ü¾ų©žÅ¾ō[”ŪNW?¼’kžŗžĢ—MŌL^ńj}»MŽBŖ4ūį‚ń.8ē§žN+é{kū…¶T•Aū?īē䎙®Z‘6µŃ—46bįōõP!™|ŪsÓ ķ_Ÿš]ŲāĒćĮkŚ'CŅlŠ|9 Ó|A˜öĖöf8Šą0ē1¹6¹ēå®6¬g$·uö•{Øčzō×\²>TğæĘC zŒ~uČ-äš^Ęķ «rQļEH‰£é_…*[Œ7.”)Ā1ĮƧ¼+­ź³ĮucmgE+r ź+Ļ­NĪę“Ń?Ä] [x?Tם\ĖjŖdp‡9,?ł×ĆśG-,’€«„M£±ĒųĀūÄŻŃøµ–"ŹøT ĮĒBqōżiÖZµż„”Ÿk†6˜'VČŚkQž„į-[Q³µY ŗ•PD‹“‚=+U•ąŗy%ż9¤ćÜRv8Ū™ĶąÕ%^™õ¬¹#ƒ±iØ‚ŌĄM¶’åY®•£ˆŸc'›q +Ø:DĮ£ź9­ŻÓī!u˜G§ ‘Ąā­XLĪź6¾9=8Åg{—©Ō5½­Ō)¬FIĒZ×ŃÆį°fF‰¼žž‚’µˆ¼Kā ŗeŚčj%½:īąé[0ų«ÄSYh÷L¾\ –:{f«Ś1±mćŌõē†ł”Jņ`zęŗOųwT°¼¶¼¶‘Nū0’EŪĻ8ĮĻēPŃŖ±ĆK¬ŲĻ“D…eĘź3V¬ōøfxb’6`qøT§aó#©O†:mĆ„ō„`•FB0ĒØÆŠRxä@bĻˁĒåOŚ Źś#—Ņ.ķWWžŅņB¦ąJķĘkŁīü`ĘŃĘkXāołfOĀŖ×ÜØĒMLY,|Ciވ̫Ī?½\>§„_.8åu\ü Žõ”‘G5éit J(ź3Ķkj7—Ś°X@x<ķ©6ŽĘ~‘„I}¦Ķ6¬N—0%yäz’ZētĖyōC«[Ü“Gņ¬ŸŽ\’õ…3¢,öOėĶqy2ß!šū­zd’iŗ B×3ĮęI‡XĆź+ˆ£Ģ®Æ`Yī'ƒ{`+ĪļßuŪĻ7Ó°®)ǹ½-Ļ@š÷Ä_ųoSšŽ‘ćy×FŅ/„X>҈6©}z’:ś[ZšxŅ|Ek§éڜ:¬w±$ö÷Ÿ–HŪ£ ü÷6„8ÖvŲž³ąŽ,–#S⊷ݧčs?tĖ’xßÅ>“RmJ(Ž8‘S“œtük’ż”æeÅkc«|-Óµ}VńOśe…Śį‰ĒŹē=śg`·Ōż+ ž«Ē±óMˆž:|Õm.Ÿ6…wl~Ļ„ßC¼m=yŽ;×ē’Ę=KĻx‡ā^—V2ß^›ėˆ‘>AøŲÆ~;č~—f’ē‹Šśgį“&ųs¢j֖уqę.riĮćń­Iü1dß»¹_1WØ'†®čŃGŌSÄŻY1ņiįR8- m `*)b1ķK¶Siڌƒķ2”ķ|K-O?’‚‡üń‹žų7Q²Öoˆee­ć’Øń„‡9ǹś×įĒĆæˆŗ–s?…|Ko5ƒYĢ-ž .œ暔tŻĪPżSż|eŒ7öŗmŚĖm¬‰Ų0?Æ5÷rź#\Ņļ..+–ˆI ѾdĻź:ҊhōhH÷ ųĻQÖ4½6×Scw{!P~łėBķ^ö{WX@ĆrOjöš5;ž¬*¤aš'ĮßxūVŠģģģš×@½2+jRÆī"e]Ų÷$Šü’‚Ąjü/i£ų{ĮˇōöZ¤Öv݌Kžy<ąŒćµ}.‘S©«ū|Gńf‹š«Įėįū¹ü]ążBɤŌw˜öo''Ŗ’õĒ„yĻķ♼uńņĒĒZ%„Ž•Ø¶‘ö$v"i÷ ä{“ų Ś«÷9„RśŸfy¾ųæcšļ\žĶ²Ń~ Ł@`Õ£Ž0«6ęć#9?§jۼоjš¶Œ<alĀeŠ{‹p²qĶ|n5źpÖG1ńį'ƒ¾xŠę=ÖĘ}²[K̬ёrķ^c{įĮsub°ßė:Ŗļß@÷ ĀEīrkœÕĪt>=ż žhĶ>¤ž ²“H³•ö‹+sgr98#±>³ė_BžĒß<3ńįµŽ—®-­·ō)ŁĖ9Ėm$·Æ>¾õĻĶshEģ}+Øx’R¼°ž{i4¤›ķ~IĄc>µņOķC¦YŻźA§[G„[KS/’rŖŪTœ}NxśÖR…ĻB”OŽtMVūĮZ„ĶøūL¢\ĖžŽ‡ƒšõ?ŁųwʖV±k5®¶Šz·Ź}«ĶÄŅV=ü"g‘5Ž”có]aQrNa^£įżfY“›AŚOPTķķčkę+hō;ē £é†Ž‚!š’‰HŸLø”"ĖB¼æēükėZ×Gń߇eÓ“›Čeó#>LßwkcƒĻC]4*lŃćāiOšó]¹®ō}Z3£g1†PĖ‚qч±ė[?‹ VĒi¤Ģ«ā» Ūm„đY&čBƒŸĢ×KįPżŠ’B¼2ęŚįČ$tBx–?*żO V\©øp¾K ¦tšˆåŃęŠ Ź–Lą¾{׊?/¼6Žšźč—–ś„SFdtR7Ć/œ õ©Ė¹ōu“…¬x‡|¾é5-Wy‡~ōóÆLń±q¦,ŌD–J>l•¤¬‘äŌ“”µ>pų…ńōūƒ й,1ź3_)k–¾"ńޤ·VńŻ\³äØ8®*¢=,˜×n5_˜?į(Ń5m*-'hĘĒżą1ł×mąßXź)ž…yŪAčrq6}†É”¢ļ3©ĖøÉÆ2ńÆŒćšżż•š¤Ķ l†8ąńŸĀŗ©³®­K#õ ölÓīuæƒN¬ŗŻóGo–Āf"?U žƒ·jõĖ-(ėŁźŠ^N÷v®Čas˜ä’y ļ+£ē«B-¶3ųćū>h?“ƂõxĆN·‡Äk²hzØā[ ŒevŸN:wé_€¾>.šV¹ā߆¾8‚8|YįėÖ°½Œ0Ģ„}×Ģ?gR®„“GÖ?'Öcµā6„ķ:=üFņÜI–ņņyĒLńŸŹ¾õż“|'ąĻŒæ|ńĆĮÖv¶^2Ó]sua^H0wÅ!W ž‡ė\2‚Ų÷h×wHüöеiģµœŪŻ \c"©ųöŅĀ]ūT†8­õF2Ź€ üXéė\ŅG±JLŲšgüQš›DšOÅ? ܟčŠĪR“) ˜g±#üńOż¢>!x'ć·įŠž Ón“Ÿ=©·Ōķ]Ž:”$u`sĻ„bķaÉQ„„C+ŻLRaÓ?Ź®B²E6åėÓ„a&ckŃ^čĄ/Źyāŗ$æ·Ön¢·Œęå°”TsRmŲŽŸĄæ¼ōH𮫩ǓČBÆĢWŌµÅÜxĶ|##Åć]+\šĢ;Œi-å«Ē7 r1]1‹:#]3­Ņuė ]c–ĀęćnU‘ *ߊ!“Ōō¤·æ“†qewØ'žÕI“L „”«ąŸė~ŠolõŖŒ\9^GPO:;HćMĖ•3ϵ6KDWn/Æ­oMN]K6ö‘¶A\­uŠj2Ē¢źŚ)xæ²ļmžÖhŻ 0Ą8=ĮĮĶwR•™ņœAŽ"³č|_įļė’ õ­CGŌn!”Įq2>į"śN1_Sų[gŃī,ŚĶF;ø¤Ž4#?Ķ‚2xīkÓ„%Ōü’“ŲŽ,ž¶žžŲ±ģ’šŸĆך–„ƒüFö0µż˜²y/f—wĪFsĻŽ«Ąž7’ĮfžƆµ}?ö}šž©®xā1ĆŖźh±[ٹćw—’\Ž gčĪŖQџēÄ|Ļø§Šqœw¹‡u%y½Ü“TWųl•ōõ?œˆs_;‰•Łž›eYU&Lńõ|­*~Öė¤]ü'‹Liōū]mÆÖ4o3l›8<ŽõńŸĄ-nüTŅ‘„—zuņ k¬œ`pGė_G—JŹŻĻóĻémUĻ=£N’ %ųŹšŚŪlŁFĮSj0 žźzUā “Ę$}˜ŲrkŪ‡cłQŠė¼-v÷Pyr1C÷ŖŽ0‹v1ģPy­,rĻbĒ€¼A&:4љņpŁ5ģŗŽ±o©ĘؒF ņ¹lNĒ,āyn·ÆXé—SZż¤=Ś Åsڰģüomy{ ܲ‹lē°§ģŁŸ!ķ‡>Š·”gFŽ „s4zrīŒĆm>Ffą9üD¶W ;2“„²»Ēڼßā7ˆ&ńżš8#²$” §Ó‰¢1 ć4Eŗ†ękHn™ķ›$ ńšōļ ųkRūeĶĶÕŪ\ŪJ ,xū•|ŗXFŠü>Ś~¤Ļko!Ž^Æ·zó{ė Ø§ņ¼¹'®(Œl`ŁoM±¹K€eS±N zŖFrŲG÷WēUķÉ5FÜŪ²žÖžĶ̱p¶ y¦”ā*å­%! üʂI`¼ƕ:¼g ÖŗĶ;Txp¼ĒØ kW˜Ż¼w0)I‡M¼`W=cöćw#ݶ6œ‚2(¹ƒ¬ÜŪ`ųä×#Šyäƒū£?ZH"yYŸv1ŅŖź×Ė 5¬/8.…ź­Ki„ī„©­÷† ńõ®+Yµ¹·Ņļaŗx¦bUŠńŒblüīń­ĶœW’Ajźß; Ę擜ž5ó׊UČó{6zr=©õ±V$K›HįauQĒŹ?ršĶōpM§’.bS• ~ī=>”Ź4?įtxŸKÓN‘§XŪI$r(i^cæoė±Ó|c©ų†Ü\JJI÷÷)$·Ö āĶ^ Ę]:ł7oÕĘF3‚+[WEÕģD·³»ä–#ųŗńHRfU®©źq-…¤ĻŁ_”äd~|WQ£ItńIa2oæµ[°Lgø ĘǩǪ鷷 +C4Ą*śĘjōĪĘE›x™Oό`f¦L oOŅõbm^ŚĀމӰdķWķō4Ń “ÕŚ,JĆte±“dg5„–‚±é––«\Mq„ŪĒ`œf49zÓõ ›-C[¶šŅ ­·ÄĢ“īŽqŸjÅ«Ż cš!°Ó^{›šŃ Ź372cұ¬ DĮLeTēwj@gkTj²3*0ŻŽ™5Ćj·7Z}Å»[‡Ƒž>“ŽŚHf&RˆÆÜć“Z70¤ég ÉĘjāĄĖø¶E`ŚÄyØ!ˆD]üåy©UŽF yß×'½A§yŖ|²p[ؤśž™tĪ’¢łõcÓéVtĘͰ2©=h¶]ēp|ĶŪzZжµŽąŸ1pqŲris-„`xILēs0ČõåWž,šE1pįIRŒxĶtŃBr±Ą5ÅĶŹ3e£Ż‘õ¬É­Y¤2ķ *Œ=q]ŠZĪkGh «7¦1W- ŸhÉŽē‚MQ¹‡jL†čF>õ)°± ¹€ŲŻĒŻ¢S°*\Ēø| ż™>;žŅ~)µšēĮ’jŚ­‘‘VćS‘|«[xÉĮc)ć®J³?üKį—ģŃ|Pų›nß¼xŠØŽŻŠMg§Aܐąäē‘žµęWÆŃōéXżN“Āw^$šæöu-3Fųv#TK…|† 8½²yY¬uų“;mąŸ„Ķ֜ĆĖ’į„ ¶Üøéé^dŻĪƒsį÷Įż;ĮqÆėĒWÖµ¹%|łZCā:{_UiŚ^•5‘“T qc”¶ŲSQg’j0ÓµMZ{ME沊Žc”ōR;ƒÖ²“Ēmö”rdŌ5[ٟx29a°­y•Ī×ÄÖVŚÆ‡Œ·z¼_‚“Īé:ƒ_>BŅZI.™c'•Nw/z•©hS»ńĒĮhڇ‡ē×,<]¬\ÄCé÷@†Fn ‚r ó_²Ń|{āŽAąŸ Ę€Ā‚e@\Ø'Ēć]T°÷3•F~~Ó_šVčt‹mwįĒģ÷¢ŚßC›nŗģģļRžż}ŗWą’¼uāψśżĒˆüw«’ojrŻÉ1óuÉķōÆZ u$qĘiˆģP0eI‰YĪO8<×Z…ŽYO±ec Īć’yö©!RĒb®@''KbI|¬įĆ䍾žōö‰—ēœž½bg6_ŽģŽX²ŒĘ=jģVĄ€“Ņ‚bÆ”¹m Ż |Gų³ā?Ā ¼5yāĶji’*ŁIņ ĖGl` ¬ŖT¶‡U*7?”ļŁĒž±ąĻYi~7ż­üS¦x¶ń@’ŻJ§ØVĮȵ}p¾}­•Æ kŽHtĒųž•ƒ:a¾ ń>•ńG§iZÜZ~— >`a·ĖÆŹqĻó¬/-®žmm'Ūv¾7ØūŸ/BχQ²}yˆÄVš2ĒĄŹĆ§^=9¬ļé·wÆ””i©dA‚@īOėBĢe¹æ >“¢Ų‹«ķš† ČÅć’=Čø=Oʏ%ä0^\˜“õl•Gaō”Ó#”>Ż©ų¾śÓIš¶’šZcē½hĪÄ’hś§½«?Āo…6­wāmJĆĒ~1xæÕ¤dŖćūæ‰ō„ģķ©NēÉ^=ų­ų¼ß$k/…ō“ ņįĄž•įÓĮ{|ĄDņĪłĪrMW5Ч{ž©ą†1kŗµ…Żå¾™¶MÄź@_Æõž—šSGÓtiL6֗ŗ'ķDn/Ž€VNwf’™Æą’‡ŗÄ· >£g“q° Täc߁_YųE­“M·—@GšńĪ=j£’¤‰u/Ču[[X,ēÉ$¬€e@÷=«¤:–§¬-ĆH\ā<ƒÖ·Œl`p:ZXU!ł¢MÅ[­z5ōš V³8¦ŚxĪśÓ**ēĻŗÖ¶śté—*Äå”żßLÖM½Ī©xB„䀓ĀēC5QHŗ÷%·¹xgķbq†–cī1Y·Œ.£h¦'# =+UŽ+ ¹oŽŽ Ā1ź0j¶Æó¼Öƒ‡nQ³üB²”X¾šÖ²!ó–¢»)d‹rŹ)Żž””l²Ś ršķyÅB×·ė ˜‘žQžkTŗęéć_µėˤ<Bģeœ›īŽłōÆU¶¾¾¼…”‚ŅH-Źmł×Ó½\£ŲĪOS*]4­ĖbEóĘ1ĀšŌ¾Ó †„š¹¶žį²† pąūŠĶĒ”<lj˜µ“xeŁ!Ę7Qų×QcrÖŹ«„ŚĶÉnā…¹Ź:żĪœŠCojĖö†Č ’{5ƍ:hŽO¶m„õÉSlµ2õ Nø³š;ˆ¢S‚PƒųVg†~hń¬fGyŪ i $AY9ŸIZxjѬ-„0F‡„zÖ¶©¢XŚŚ«#y ‚yäšŲąx-ļce¶’9ŗƒžn½ę«m $¦x>‚‹õc^Ō/Ew$ÓćxöéV¼±:aю+9CQJÄĮ"A‰¤fR2O±õ‰®dŲQćf峂)Ó įµęūR•QŅ šk‚³š®ŸŖ1d¶H¦N·}źŽ1ŠŅč˶ŽҚźE•–p2Z2>č®ÓO“kąŠĻzŁ®r¤ē?J%Į)Õgpó<2ƒÓ$})eŌH¼–‡;yā¢Ę—Du6-<*¦^6šk±šŽc#)ø|ŪTņ+ELęœģ4÷Į¾¶~É5ģŹ€Ķ°ŪŗćÖ°5‡ōŪ›pY\YK āF%]ý}¬`¦Ŗ>ütæ+³_xž IāŁŗ5>YqĒtĶzNÆćo?‹®u%”šėĢs"@øć ē5=Iv¹ę^6ń#,óIsq¾Ü¶py \ڬz¶–Öń\JRV/,ćńņ¦ŠŒQä~ »¾Ń#š#ö–”.[žxÆ:ņ..c7Sy²/-Įł¾‚™v=æį‚ōŸķ”ń¤:õžØÅˆ–2Ž śz×ÓŽ8“žÕšÕŹÉ¦Yjw„r.˜|č}3éÅ‹F|'āk=Zѳļ•tõšUŁœń‘ś×¤xmOįõäśķ¬× ¦]Ƒ8c„\r[ł~”XōŒ“‰<7„[h—³]Ų́rcćažźŸ­põ¦±­éQ_Ū+Z¼d»Ę×ō ŽEk•§ųjóCžĖPm>ā/Ž ­ĆóO*{ÕŻoć_ÄæjčW^%øøŃį˜Ę!bIĻB§4Ģž†,æuY|E5¾·pšCpæ)ِ‹źėÖ”¾ųq£xN ŻSWÕ[ĶTܒ8ł›ŃWŅ‘7QŗGÄUÕ“­:ĘĀā&¶Ź21Ė`’;×csį…ųoā½'āgĆMLŻ[\[ˆo-Y€ŲŲĖ|˜ėļA•J¶=#ʞ6,šN¤Ö’Ak5ŌA$Š@x“ūÄvę¾o°¹qr‘ŽČQ€ßżćź*Vę^Öś>*V»ń“i·×ĀÆæ…Ęó’ė­ż?ÅW2i3i—sZżŗŁ7«µ™I鎿’Zq}ΘI_Ą3Fńļě_köńͧßČRk6WhÕõŠ?f /Ąz%ŠÓѵ8LÉ!v·öcķž(”¬lŻŒü;ą Ķ3ÄŗŒ Ę,Aß +É'9ż+Ó"šī·ućŻ KyąŸĆŅGūū’Ē;ųćšĶ WŒˆ~ “Ā·KØ%”RŹrų®Ūßīž"|5ń›ŖŪŻZŽĒn`€¬€łh§QŲÓ"QźrŸ gšä~ ¶‡TŽįudžEžYUŚ^Aā‰ˆž,ŸJÓķŽ+tLFł8lUEkc'ē6¹ādÕm>ĆwÕūū3|@—Rų,4æŚÉ§ų«Mīd?4ÜīńO£č~lüh›ž_ŻjW7cķ©q#»F0X#žĪ š~…ŖZkFåøĪGŹ}åQhņ£HöfGĘķ?ź:?“Ø^Ėn –0äm#Ó:W§C¢i«š’C’āį”»ŽVˆ“—ŒZŃ=4,õŸkvś*_ĶØi¶Š-­æwpČH-·ƒ“ÅsŸ¼]{ećļ_hbey±&’>IpsRĘ}½yćnęŗ»ø2-ÜxĪrp Ēį^ ń•f¼°šõ„ޱ}¢ŽĢ噓ųÉĘ~˜©&QŠõ…žŸIµ·×®/£Õ`]ƒ ¤ā¬Ś"ĻVÖ“Ō”µŅW0łź9Æ Õ[”ĖV:žWš+ū-e“Āš®æeomuŠne vœgūS>xĮšž›ńĄzµÄW·–ĪÓXHĶ»IaĻSŸJr–¤Ø=ω~3 šĒŠ&Ҥ±š „/åmEśćҾ^×gŽķ"”v „XŪ“S ĘmÉ?žä²°ČƒØ”ga° =kčĻXŚėś;9Dž9" Œg Šćš/ٟĢ×üßöOÕ¾$|4—Vš’‡_SńƄV}GIū0łęµndˆÆń×ümxŽÕ€·Õ­­„¶²“ė·AĮķ‚¢ƒµŅ&TŽį™"ē`äóM·±YcfmŁf»N‘Š,NĆvXu8ėL2»:ƒÆSŠU©ŅßQ.ĘZ4—*rO*3 >F<Ć»8ŚkNTiŗ­"Ųģ²6!>ę“]ceV·©ČĒjgLM->G‰˶*żØ’‚~Śū!žÕ¶æ¼g©µ—‰r ó."Óu!ÄmϾżæRjŹ[tĻļĮՍ•s2]\ÄóüµŒņ¬=ˆÅr—V”]¶6ėw0õČ® Ń5>vųÕįėwįw‹|%V涌źZCt0ʜ§®ķķ_—rhwv…–µbÆįķzox?čóޱث?:ć/’šQw_¼fĒ –?­Įō,oņāĘ:w«ŃÜĶ –7Ń7vŽ.`cĮYWHn£„3¶‹±ż­’Į%j_~ן š.„¬&‹ńŹHd±‹ĪóĘž «WĢĄČčyÆč®Ė^•#Óuūy^„K[²ܘ }9ēń¬fŽČČŪøŅēŽĘh!gi-ɖŽFä‘éšĀžĢš÷4]wMń%„¦§į­^ŹM3V²øPŃLŒ„]O‚G>¦øg£9ž{?šUOŲūXż’i/ųv h<&dYōūøƒ:]é²±ņdó¹y‰‡ŖžµłyØŁĀ±° ±7@zŠ—»f.iÓé¶3Ü[Ÿ6ę¼*õ|võ÷¼jćNÓoå·xaA,¬юõĻR ­MV‡l˜ŖĆS“™NGŅæ³Ä_°k3ųZīķ¢ŠoŽYAŸūėńĻozż5šž·nö±•f?&yźkÓäg5C»ÓµxŅ1qå¶ō9äcŠŸUń*jq0DĆcåÅ+Ē5å  Zqó×±¬w‚’čp9o­8¶‡Xéæ±ęµDøņdĄ8ąU;»sŠk‹Ż}ģcاĪĶŽĖW¾Ó’³Ņ}2¶c^’ٟ×5å:ćÜ+Ś»““’)s2fŽridSęqŪÆ5§„ŹGĢOėUt1.I¾;g)¹>^:āØŲųvśāź6fŽucūĪ cœZ44Ž›žĶfÓB:¾›l÷łŒ“@HVĄG­kiŗ$ÆeéŠdw@v²ą©=$¬iŲŠ6éyYŸqŽ ąöŖMq½°";–8ōÅ2Ä1DϐeéŽ3YvšŽ·`÷ZrŪIqé’śPh§ÜęL† Y5}’†Žø8ÉÆE¾ńV£Ŗ[fø”Ć“)ēŚ³‘ižumisszū EÜvć½z7…ÆęŠu[iõ}>ćR„Œ0-…Ąõ#„EŠ=EüEo«ŗ-”oī–Ī+ŹüZnī8\ōÉl*¹KŠŌ„£Įŗ6Ü v•š¶®c ĒgRzåš:'ųšėNų§šßžæ“-–µi(¹°—a!\‡ē­q >#üeų$ešOŒ“+čėū6¤Ä“?*·\W…™ą”ÕŃöÜ#Ļ UÓ¾Œõ_ŲoāŽƒķi5ŧ\ėŠ÷6ŃČų-0ÉUõ9ģ=«ś&Šń–¦jžÕ4x„·ŗŁ™##€Iõۊųoā_Į¤K‹Óa$RéŅ£Ie2qڽ<=cõŒ‡2µ.[žū8xęÓĆ1x‹į6£k\Śj‹0 ń£ņ==ėŁµ;)EŌš±ĆœƒÅ{䙶Ģ“ Å^%ųi­č4Ż2ĖXŃlīÄWŠ8`㮠物µ®³ć’x®ĒNK BėĻ‚ßłŽTc€=…)ģvN£z-°A0ĖelüøģkŅt­)īg“·›b4„ õóøēcÄÅUµĻF> °ÓŚh‘¶į†s„u~ųzśWˆn|E®ź©e¢5”O&|쐒y}łÆĒHł,u]ŠŁüPš>—¦ų‹ĆvZ=Ö»Ŗ22E+ G“÷H>ō|*ųu¬x‹NÖļõdA„2˜Å®xµźGOßjšj»3å12»;»ßė:l2Žj-ā[1åŪ¹—ĢŚæŻĘ}ėóóöĢżü1ćļ Šæ 4H4ˆ6.$Ō-asš?ļūóDjœQÜüŪš'ŽžŠšGˆü_}s„¦ļŃŅU'ģn"pU1Ō–d?…xWåńvÆ>‡{¬•”(rćīOø®‰ŻŻƒĆ[F}½į]rĖ„ ÄĶd©ŻY—ńwöV¹£éŸü6-ÖXĄT@pąą‘žy‰u½[Óć‹R˜Hź3<ś×¦—4dxF± &`»ŗŌWā=FÖÖ8Q <»~é=ź)įīĪŗNČņēšŽ§ā¦‘r‘}ą€ą5z'~ŪjŽŸeõy„Hv¹²O{ׯe4R:>¹ecāv‡wįOK„Ģ‚ė[„ŠUl®Ņœ„fOz‹ćū†­­Æ (S”b:ÆĢkģ°ś;ўÖēĖc7Żž ÷7[Č$ ė^™ąOÜkz‚É9‘“č[,½³^Ż-«ÄM3øų¹ć¼”ZE Ū©¼ĮÜ ¾g×>9XŽX½»X<7…fÉ;d8ź*źJĒ™NƒzŸ3¦“ž!ŌēYV/œ’ƒ=9ƤæeM}wć™”Åog0u$y܍ĖĪqō®{\ō©EÄżIŃ“Ķ)n/ōĶcCҵ1å.momÖTSžŁ~ł›ūvžŹ/ĆŻ,~Ó_“˜¼=£[K·ÅZDł% æG FyĄōąÖ fz4q <ü?ŸÄ,š¬ž#Š,n/ōųŽŁ<Ÿc9 sŽ+Į~%j—w_|-(Ó ŠŠĀå°?Œ |Ąō&”S±µ\N‡ź÷ü·ā‰ōļų&kˉ˨™r¤c’>•ö&‰ńę/ųSzēĀĶCMóģglÅ2œĮ9#•ćÕ©©ōxZMŸ=Bb‰ƒ[…ņŅŗ;;˜eól®”Ž{9ŠĘźć9øå=¢ĆÓ9«}%Ķž™pćIøl4ŽĀ>*üšE®£„ŖŁ­oĘā¹RlV—C¦TŽļ@ŌtyāāņGńņ‘[°hŚŻŽ‹}­izmÖ¢–Ńy²,Kø„ė3–­6Žuu_“[‹ČÕ`;t­_ųŖ]#İ][X}ŗņę p1)Ļ ~BŗiDņ+ÕhżUżžęsõéčké fĒúމ©č?¼9§ųĒ@žEq’=Ćc5éS”}hćgäķ'ū0Ēū=čÖ>kWĻą&¾ڦ‘u–j¹Č’6³Ękč/Łį’ģķū@xōŸŽ_u…¾æŅdUå­Ā[¤×YĮ&YØ `€zó郼p1sQ›“o©Ė›gõpų:µ°ńę©·Ż„¢ž·>xųĆšoƟ³§‹u’ Żxæ@ų«į›iæā[ÆiƋūCŹČĄ”Ąź<ާ­eųgTÓõŻ.ßP±¼[–f9Ę®į¹]k Ļ?O£ĖĻķŁõ_'”ŠJ©ó r:WØi:½¶­e©i×"Ł­å²F0ńH3śt„tāióDż,ųAńkÅ’[GÓ¼MŖxŸN·A%ź0Qrƒ»dņGõÆ7ż«|%šßIÕ¬&ŃõM WŌõKŽĒ ©Ū0?6@ķĶt¦ŗŸ0ØŗU9`“>EÓē‹ID‚ĶBFæq{--ę½4šÅ±Öǟ„°Ł …@hżż*F•Iu2Ÿ]Ó¼?|¦{“žĪi6+ŽÜWGsį˼Éo{hļ‘÷q$ōąsE>µĖ¹Ļ®z֚ž‡āæ € $·śdŠĒ ŃŹąõÆzél|Y¦ji 馅•Ź?ÜŪ ;Ó­SƒF“3(KTĪ¢ŹūjmvƒüXą×Ic .žCŸ^•„¢ĻB8”ög“ų’īŚóP48ķ ’ v>ø²_ͧMjPI€ūĖżŚ‹Ę©£ `|ĶŠT¶ėę†IŽćۊŚ*šöÖŽYĀ©9枕„uik=¶y%½­ŻŠ)oę>Šķķ]1—cÉĘ]ģy_ď ßx]“_¶ŗ•ÖZX󐯞‰£A*l•6Ēt£!—†Op{Ž2Šłjłte.fŽĪūĚöÆŁõ½cSÕP"-ěÄkŒ`TzMĢĖvQČÉn@­%WK8\ ōF–£o”wÜ|Õ*“Rļ$+īqĮĮé\U'©ķS…ļ)˜Ą'ėW~kštæ“ öt‚6¹³8ĄRqŽZS‘Ć^V?F~k‰ ųŪо“ÉšŚEVž{!ĄÜ£øėłWĶĀM7įļĒm?ĘŚ ˜°Ó5ČĪ‘G¶6”ō“ŽpkY#ĻsW±ÄiI‚‚>@q+§ŌmžĒhņ."r¼:šä©3ŗœ®‚Įę¹vŚ$bŁ9£>š«·hq“Y³CŸyRÜÉPķČĮķYÖéż³m­ē×>\Ü<–„ī0qåK»\ł×Ķ:gŚ’ ŚĢŗŽŒ½ 3Œæ»LøV|üÄuŖ6÷—·+ö3\@ŲåF>aéAŒ–„»=bä<±Ģ“[m8õ‘iŃ„Ŗö`gŒś{Vœ—²%Ä|‹€x”£3²ūSʑ®VfŚ“`H.cdb˜½Ö1Z’yźŚ]Gs)Óo ·øh–&ŹēœÖL‡”łń&ś{_jŗtńØd˜ąƒĻ¤W˜jÖŃÜø”Éęī>ØsHWW0näDµ‘CŖ@ū¹hažöoš7ąnā‚ŻĄ2źś”/$pŪ0ē)É÷Ķ{lšŸÆ¬ķķ®mļ u@²ąN:PS±ĻėŸ mtżVĖĚ~Ø·±^öØ>ļĄuō«pZ“SIn®E§PśŠe3NĆEš :(Ü ļ zŸžµvś’†n«‹xN$ł°ĒßłŠJ¾Ē”xŹņĶī„6s³Vg9+^estƒ~ĄJc;ż*'±N&öˆHP„yJĄ7?Ź®ėóÜM ŚĘ±¾RTńY*ÜĒše£C<©˜JӃœsžkøŌ5[[i#–h±r†r9lōœŁ2܍õKĖˆŌ†•“<.x›.Æ·t!Gźk2D¶¼›Źuŗ“̐1ŚOeģ+Ro4‘väīĻ©  ȬfL`“ō­Ø­Øó +«OjɾEV‘PćöĶP‚Œ—/æ=s@‰'>fFY8ČéU,­‘®ć1ćˆĒz™JĄvęĖ̉QwsĄ®FöŽ+y ( Œ’õ«9JąOiokk£pķŸ› 1ŠÅŗ=„ŠRVFS÷@9aųsRTcs”ŌķŅōĻüš_†|šņÕR¬l-ꣷĻFøé’ź­lfätŲ­Ö²$ž4ūyPīR6©?Zäb5]M"æøņŲ›6Ė0 t JłæÅ!Õf’(ÖŻ4`pĒŌÓZ+jŖ#ȧҺŌlpJW+=Ų.ń²•lõ?Ź fuRdM¼ćėL’ķŗ€ZLƒŒp*Ņ£ĪU‘O`:TÉō•‡,Nw_œ=źĢ6ķ2̳.ķ­Ž:ÄĶ£SLŅ$ø[ĘYF1Šė“ķgœézv“}«ė­"Ķ֪d™˜œ.A<’+:“¶‡E*7?xcŸų!§Äæ‹Śn™ń;ö‹ÕßįwĆŁY'›MgxÆf€`įÉįōėĻJżūųmšĖąĄż5üū/xFÓ/`ŒCs«5®ęv Œļn[¦I'šļ^eZžµ8%¢<_Ęw—ń,~-ń‡ÄgńŽ“¬OŁ£F1 žē—ŒžµŠųgEҾ. CQ×üX½©ótB8§ŠķoŻųRr&Äg§=jÖ±Æ>­ö¶Q;ko’4lŽ¼ō'՘³ÅßÄŚ¢^ m&ĪśöšH~ĻŻ.{–µÖh4›œ Z4ʧ‚qėÅ5&Ģż§CŲl’g‚$¶k]Ę6zĆź§K•hI€*:Źø#ąD¶Ī¶ ^[•2ņĒnqǾ*†«7¹ķšī‹«h?®4ŪŲ§Õ&·‹W ēŸĆłŪż¹«izµģķ"Gp× NŃ÷qĒśSæB\īzĘ£ń—S‹H·š8„¾»„( ŖÆå^żæį_Šž»šĘ„Æ²!3³[sŪŸĀ‚9o±ó߇¾xĻEń"Ūé–Įį·?#—Ūē©<†‡ZśwU“Ä>’źŽī8->@Ņ&ŠĄ3Śƒ”ÆŖ<ę/hö–z•¶­n×QĶū“t|a³Óę®·Ē”6ń¦WÆėü©ņ˜r3F»Ö„»…®oę–Ė.23Åt܍›‹Ks4ĮHڃ$ūSågM=4:’ŚGŽōæxWĘמŗ³šü—$-ą‰ƒDŁćp=śõś­ā’]^xc[å[Ø."o4Ęšsżj'«¹›š‰”­éŚE²ÉäīUž@=čńW5/ ][n¦}Å6Ę>ćē?J• ä6_u‰6Ś¾£$;,™Wk¢£2‘×±=jœZ“:4M¼%É8N3VU‰m5ĖWKi­#i,7cvÜdśW%Øh6śĶėKin] ,cGĘHōւq0£ž9ą›X¶žŽā"Mŗc'w’«?„}‰š×ĒŽ$Ö¼+5œŽkI›w—xŖĮ®cŪǁЇ)ęŚ:ŠlüOįŸGw¢k˜w“œ0!R=kĖ“O ¶ŸØjVµķŪ–Ū31 ‘ß2pJ›†ˆõ%šüz~‹”“_\$gr¹qč?*ō€> d×ō "Ö6ćü×Ū\—#čĖĻXų[H›ĮzžžoÅ$ŅYp@>‡¹Æž|5§éæ ¼a®ųzĘdŌt¶"h$•9³ĄoAPŖ+—z&‡Æx§IńĀźz֓u©xį”ŪÉ&Cz©Ē^Aę½»ćŸ‰| y¢č÷)=„7Š[™¢‹n×Vé·ėŒžuŖ–šųUń—žķ'V¶×ķķB2;‰łńņtś×į‹:ĻŽĻŒ4 ~āO줹o² äåĪkTÓd8ućŸzRZŌŠT•¤E•Ą<޵ņoķąI’ÖÓĘQkˆ$‘Ö÷a£8ąńļĻڰ5„¹ń]“GĖFņ[ę\ä÷®£Ą¾,ųū@ń*¹†+\“ –U=U‡„lvEpüwš­æüį¶2܄73“R±!^˜Æčž#ūc§<5«~Å~/ÕZz_VŠ%•(n‰Ač$ńٚ”Uī!Ųžƒu}:ėK/—YT”U"½÷į‰ÓW±›Gø5Ģ# ÉĖ$Yę’“oĆ’ķM ėÄ6}§Q²łĢ8’]eżHśž ?ࣿ²½Ļģżū@x‘t{ Ⱦų–Ųk:#́R9X–š#‚Ą°ć­b“z‘)t?(õ+Ya»¹"&؜: ß<%!žUüÄvā»”#†”ÜÄræ½÷ļI("ĀWGń}jĪw”ņ\»‘(^뚊 å£.ą+ e™ ‹s’3ƒķW­dh” ‘*’Aõü(5ƒčY±’Vœ†@¶5ŃjGPkęŅ.ĶŽ­m"\ZLĶŹĄ«)ź9ktä ’ü’öć¶ż³æd jŽ!žé~*ųB4šļŠ"ømļq"*>ģåƒ 6HźĻŲTć“ə sę¹jDč9i†źŹKˆ…õæ ÷—øÆĢŒ> Š|9ć}FÖņÉ­<āilÜ(’D¼äæˆéģHä×VŠgęķƒšI>)|&Õõ‹«ķKŪžĪÕ ‘yŃc÷S7č?*žNS³“»³œ¼‹$A±ņ“ĮÆ[š–°öȶqżĶ£ ü+9-l†z=¦©moØ®“ØAq3O‘FH  ö?ˆÆœž&čw>$Ō%[Ai§³²†Īā9Č'Ö·” īy–Ÿyq¤jś^¹cröš¤¢H¤^æīž5ś©š·ĒšxHŅõØg[‡š³)#÷rČĄü wĶFYj«ql,ĄuóW—ĆZvyŠ@pÖ²›9dµ5¢%y-žõ±k8‰Ä7ĪÕQ‰#¢ų†šÜM¤]ŚNņ0ܲĀu鞙®¢uŖÉ`Å#tĪAēÜQ¤%Šėõ?ż¶Õ­?{m÷HŒcšš/iöŚ>¤ÖšO½›“žŖÕ -‰’Å6 Ēų«¦±ƒ|Eå× Ē ÕDĶƱßZxjQįÉüCx#ņ°~a–ś ź|ŖųSÄŗké·ŗ\&ę‹ĮvÄę6”a“uŒ¶Öæ*²dŠäµ¦žó[µ¼Są`)ü(.ĢĻ[ᩤsLŖĮ@‚£oŻ_ÜĒ=«ąxÆģ«į7ķ=ū%iæ|⯈_tKļĖeŹå™ לēŽx>õįc07¼»c„Īźr(EūĒóiūk|lÓüOūRų£āLÖŚŒ~ 5¦šn!†<‚۷Ҷü/ycā iz¬ŒWvs!uł#_Æ"¾Śr³ś…sҊ—d|»ńėąö±įĶFO^Ń嬶TF€"÷õ=Į¬m?ĒZF»”Yė6Ÿj/ιłāoF÷Æ[ ‰Gź™v;K4O}š×VIDSY^G²h¤Įt`q[:[[Ė Ķ.6åqŽŗjWŠś8āļ©ŠÖ;¹šŗŸÖ» »»›̶3Ä7ń׊š1õQįć1;ž™šĖYOˆ_‹nā[›gI“ņfPŲ*9ź95„ ņŽßG=ūÜj;Ē“Ęsß•|†.„Łņ˜ŗ×ÜŁŅ4ŻJdł ¶ź{Vŗé5†šæ‰ōż[@ÕŚėĀwv3Śź6 vŗ».Ēn ’=kĘŖxÕō9’‡>!ŗŃ“»?P»ŸPX¦pÉ%±*IõĘ+ŗÕuĖų.¬Æķc‡ģŽ˜aŒ‡Œ;Šāę1Œu>,ż±¾xcÅ~Ņ>/x+KµµÕ“¼ZÖÖ0Œ±÷uØÆ”¾Žż³TÓ-4oiš\ ’¤68ö=ŖéĻ©ŁŸÆ? æn­kąO€µ‹?ųWķŽ,ž2±ź.0>SŌµó§Šž8|ųåā“ńÄߎiéw`š¬zfūXN:,Š9ɝ{˜I««4©„©Ć~Ī_ üń«āÄ_†_-džᵱĀkiöMēžL€‘ÉĘ Šó7ĀžŸXšĘµØŪėWZuģÖ_n„ü—hŽBČ=7. }^Z&R…[;ńž©.ŸįŁō«kH/nīW÷Q±ł„®Ńų’*÷ ĀēĀö3čŠKw«Ē§ż­­ŃAe#;—š5u禆Õ+]j\šl–Ž,šģś„‹˜§öM ‡ ÓŖŗ,°ź3ź:^© ‰`›€ĖĆ)éž}«ćqņzœ's„Öīµ(RҽCµVµ¬ļ¶rŁ\­ŌErFJ±µņõna”ē_Žļ[±³±ø>g’vĒ 1=ĄÆ–¼_šŻķ¬&ž9&łńł½aŠSzržĻ>-¾A”Eō–[‘7ĢŪOŻ<öżE}]gį7žHõū=LÉØ[Ż‹K‹˜1”,€ē§¶¹Š©©ą?üm®é–P5¬&ī$/ĮA GćĶ|W{¢Ēaw—s4s\¾Jü½q޹qŪG§†ŖK£EÆųk_ŠdŒ-€Q oSŸJņļ^KwāML‹u04»·Œ“׊š18fž§ŠŠ­”R9„Ų‡<šķSéP]iś„ś”•“x ŒœÉqÓ§Źu8¦{„>2ßčwĶdĶm{c2”žŁŪ*ō žuóæĘĶKā€5Fń†•§Ūj?®œI+³>›'c’³^…6ö1•#Śį':’„4’\›d“‘T+®ó·œcé^_¤hŗŸŒµÖ½±S=ŒG!£Ė;ƒ^¦•ŁÉUŪCŽ|„ijŗ†¬[]Ą©i¾ŽTéēó…aéĒė^„š³ĆśÅæÅm'Ǿ—ÄZlN>Ē{ .Šü  $ƒŒę¾æ.¬yu*hyĒķUą’ŚxźėÅ?ü"ž½ÖĶk–Ż`tR;ūuƞbŠ5;ū­ź%ˆ Bø0kėhĮójDxg’„”»7łž×žĻ·VÉóēh=ń_d|6±†ĖĀö2yHóØs“ÉÆj”t>ŽUł¢|£ūFk–RųĪm2Ęa0!Tķļłę¾IńM“k¤_ͬ·f2ʽ>oLÖ5äzxKZĢł×ĆŽ*Õ-&Xu8ZŽō’w€×½{OĮÆ×æ¾*x'āß3iv—ā-Bó!…$gÓŪµcNz—4ö?” [Ę^ÕÆ“ĶkFŌ¬ĒUo"1żÕ 3Æ·lכüFń>…wšūĒ~Õ“Ł5=ZÓ„²pF@r¤)ē·5čB¢4£±ųõū:kw?µmkĀ—–ךĄ/ˁóƖĒÓæ¹ŚĄW^)Õ¼Mć/‹Y®,§7k>Ór™9ņ×õĒæåĶ9£Šś«zaš3ā&±įÆŁų×@vÓ5ø%DwUŌÆŽVēŅæYtæŚĖān©o©ė‘ŪhŃ(c·īÉ ‘_ėNģ`ņöä}qąĻX]xžK™#D;²ää3ø÷āæ3æh ›oˆ#Ō|ErŃĻp”£‡ ¹č?!łR©]µcŃĆ`¬|Ļš›į“æµ½gĆśLöÜĆøBķ ć/ėXĪ‘­ų#ÅĒ„|U§I¤ėÆ·ÉsžµGSÜQ^]wŲś =.UfkčöæŚ[ŲŪ yåpˆ¹ĘI5vXBēLŌ,ē°æˆh¤ v?q¶śž7mŠz¬så3y{WŒ ±„^*›xĻēHģŽŗDŗzų‚Ś]1§Ka:˜·?E'¹ż+šG‰|yš®y4[½Śę+hŚĻķCęK˜’¼F}õŖ‰–!Xšoj3hĖ|ń(1Ė+HšŒœćł×QšOP²Õ>%čz„­ŪC:VEłU‰’ė~•ŪBωĶkrI£īļ[x‡ĄŚž‰ćÆ L’gM½Ā—rÆL×Ü’ ¼{Œō :{ųŌØĮ €A㱯Z”Ow%ĢTųĖą½7Å’ <ą)dk½3Q±–#qĮIR÷QĶ~<ü/ŗm+ąOƒģm,`øń†u««Kūi@/,;Ź‚sĮ®¦ZwŠū[ą÷Äoųŗūžßiśmķ“p™ „Ū±qŹ×é_(k7zćoŚxoKm?@ūKż8 !$€>•ĆYž®QNtę×C:oY ę‚k»8ųČS łWC§ź |T#Éā¼Ł;[¦Ž•/Æm`¹†Źę{IJ–‰Ź°üEyUĶŪ5ä×–7}I .~¤óŚ…PĀ„؟ķфYžn€U/JńŠīŚĖš§ā[ 7:Ś!}«źH®Šwg•Œ©N”J’QŒumč’ó?VæąŸŸšN«ļ‹ŗž‹ń£ā”š Ē„t»×ŠćEohY0Gš„wĻCė_Ŗ“’ģMš?įv””ükšg‚¼¤xGW€iśÅōÖ»"Ӧ鎀mPO½GøĻ»†Ā®Sų/ÄÆg<åa0³jÜU›×³}łæיł½ńOößų©š¦ėSųS©čæ ž/ųrÕ(ļ%±%f…ŗ+H‡kq܎kģ?ų'ļģū~Ł~ų„ń—Å |®iźŃŪ­„…ÜöŅh²¤#ĢCl¢"\–į‡QÅwżI3ä8§Œ3,‹&©Ė¤ąåĖŽŚµ®ēŠ^)’‚žÅś†5愼YńĒįüąČŃIg®£¤dō>UxąOs޾*ń/ü{ć… hž~ŌžńL²JR }{N0å?„‹zā¢yZ}^śdfPŸ³ĶčŖ‘ļu’‘ńŸˆ’ąŽæšPæ ėfŽ}7į'‹¦•ŻmR×U15įŸ/x¹ē„y—‰?aOŪļįĢ&ožÉ^=½±‰Ā¼ŗ±źDƒŠ„‹q?yõ2·Šž”Ⱦ”<1Š”a*Ī’ž6üU’ČškMų‰į­BóOń?ĮŸŒ^»¶•o¼?2“`uÜ$cŸŹ¹Ķ'ā…^ą$ś”–nĒ][K”. Īø§‚”Oܲ®,ĮccĶ„«‹ū²Oņ=NĘśŠĀ&A-³ ĮՃÄW|Lń ŗķ¼(§|YņŽFbĒqļQģŚ=˜ø½‹mĘ«ā;{Sā ¹µ ķć"&”ņ«č?:Ły…Ę:V}9V»!— €Žõ”ņE7™““‘Ōu©–ęŌęv/: üfŸAń¶•'ŽÆ¦Ö-'É{§–6aqÓņÆnż ~ YüQūŒ‘yś]§ĖjYyۜó]Mčr<½Ļž¬bņ²!M“xæS…lmRwXW’Ć=ĒJĀnēM:M+—‡īąrX•$ÕķM¢“vÜ£ż:×9Mõ”q4—žvnę³ā™7¤>wr9ä֑Šf2њ?g–̉ŲL¶Ģr éł×C¤k0“¦łŽ'€hpģ5QlĖß§ń7ĆĘšžæåYjeÓ«‚’eGP}1X¾-׹ńfØuO‰n“ł@}±‚Éc,»‡ŌX~Ń|«é÷—:®‘Ø‹“®&žćuöė]Üŗvµ„LÜĒg» °ņ¢·L̰5»xK”$!x9Z5©æ`,g¶kz/[Ļ€æl[×·ńž•įäņ l3¼C+œsėĶ|Éi<€Ęm˜£īĄČÆ£Ąü7?ͤ¶#ŸŠ«Głc’’§śŸ¬Ÿ².©~ß ­lnG ’:|Üļ xžŸ}gaØ]x{NŌmā[f‚äsÉēJõ‘ü߉F„üÉu$ĪĢü€v5ß®«§ŻZāးć’zVёä=ĪgÅĻåé¶P§–šfŽ3»§CłWžŚ^}©ŚĄ·Ģ:c”G1«o¢ŚD¬ņ&[vģśWM§Ś:ÄŅ[§Mm”}cS’ī;Ć#ģĻŽ•Ōčz„¶hģ· ³š£#ĢüIu¬Ü_Ģgø~o•čE&‘u#ŹRUVHÉč2™±sŲ  V­Mg}{o(‹+åzõ&”Œ¤“;«[…š(¤iAŪŌVeÜ;Ƈ“Ź'œqIHÉłī· Ż9šXäYaÉłs’7Ćö7ØóSĒ<ž5F3z|öv2!w1£±É>ōž°Äæö¹Oµ,›ŽĒæJ: ŲXƒm4H$9ēvr}«ø“·µFŒdSņ†ėA”ĖzmÕ¶”h!FĒyn­TÆuG±wĖ/~  ó½_W¾¼ŽeHdO˜œØÉ[JÓ/oš\HźĆz֐CLŌ“Ā£¤s¬ƒæ<ڱšü}»Ź‡}ŻIåjŪ%ÓZŌ5+‹xb_³"—C»’ēłWćżjēMŃõ9’U.¤’bL¶?(|O®KY˜ß›O“<ŒŃŽī¹ąóķ\¹§Ü[½¬Ń„HŁ·1õ”Œš0.ōµiL›·†#,:~–v*…š ¼ĒĻŠ\~Ļ_Ō“iÄö§ģŪĻ‘œjéķõI|Rļ U¾P;TĻcC ’Ęśeœ³/ö®[ķōQļū8µŁś1¬Ō˜XéęÕgŽ-Ņtym3GµyoˆluĢśŹ½Õ…̇c(å”ÅZŸq?"8ķŽęܰĻŅ”¶Ń³1‹{š™Jä¹±EŖ(z–Ś?2揘ł‘“‘ģk)lG7CFK8-eW²d‚bAm¼nśÕFŠĻ/—9äļYŅŁ” ŹĮ°2psšå/ļ,nnks,kņøäB)%ō2«• {R5Ōr)łwmę€ =BŽ"š9Ģ3ŠÓäŸĢ!L”;žil2Ć$€mēŖ6Š_Ÿ“åĪqÉź(LGCæśŠīóŒcŒ}k3M‚k{ņ̜ƒž•”„p;ƒ7• \Į@ČǾ+Œ¾Ō“S¤ŽE©ŁI%ć7ČVLl>µ#HóųēÖµšöz1Ė l ćś} z×ĆæƒZ“·‹Ŗj¬‹frŠW%zܧ\#ŌśöŪĆóx>Ö5ÓęK»s†@®K^ÖuļŁüˆVܯ̓Énćå˩ԠŒ»’ Zx‡Fž Čå—qBŸ»_$ųÆąæ“«Éæ²tw¾²e@I““É$õÆC ¶Œ‰Q<©µ M>ö=:że[ę%MŅŚ9Ķ~‹~ŹæšL_Žß“ę£eā¶”šƒąéAr÷÷°˜ī/#ĻŻ‰‘“šõ^)Ŗ6?¦æŁö^ż˜fūI¼)š+Āśuē‰JŌ5ŪĄf¹’^ū™²GӁķÅ}}āx$.½ā}bsS2€¶ÄīTcÓęžĖ)Ü£‰—MųĖńoR²›K»’„cĮ°)|Õ(å{cwćZ÷ė?i¾µ±Ž+Ō5 »%žpszŠPˆGÓ5½;Į¾Ō$×~Ļy1#vĮLƒÄCāÆķ‹ u)ķŸKÓnŁ.‘}zńZŲ‰VŚl)u&ŸouåÖį²ĮĻ®MdX °Ņį‹W»·ÕÆā˜Ėģ€H­“Óš8¦MŒæxßĚ¾§}♬ģō«fŽą: ø‹6ń†5ÅųļāRŻŚ.™į}1$bp·2Χ܌ WDbit|ńūö”ų!ū?č$ų‰āėYüx’ĪŹĪQ/ ó€~Łüėł×ż§ą¤ß¾7jxoĀw³ų+įżŌ‡ĶHNÉ.Tgļ(čßFŒå3ónęśG’wšIfiTvl’sŌūÕ „>Z°!³Ó&»"ś5%rŒR ķ|ōØ]1+$jĘLć‘Į­6@–Ū¤—ĪĢI.õĀü rO9©‘D{ZUÉ^sĒõ­h {…9 ȕ愾œĮ%cLõėšģ-4 Žīīå#‰²>aƒ3Q'c¦3ļļŲūž ‡ūSžŁßٚŸ†<#’ ³įƝēÄZØe7ē†,n,@8=­Qß²ģAū)žĀ[“ßi°|Kų½:uŖßF²ø‘W®ņќš¶kĪÆ;čz4éžūńWĘwŚĘ‡,ßüSe é°¶b°…ŒK³Óå>œąžœ×ĻpüHÖKcÉĪx –rŚĪŸ¬n.¼ĖÉ•Ć¢ĒŠ7øļUļ¼5%¤Ś×‰£]7F˜ä1loQźµqRO*ų«ūHų_Ćz\~šF“¤Cµ =ߖžļzs_ė_uO]IēM4·#9`NÕĻ„jR‹ kzĮ¶ó"’ę`§qPp­z÷„žŪyŗ}Ķķ»N‘ŗ’„pH9®J–eĘĻŠ BŠo¼ć%‰öąWÕ:½®„aćiÕO‰¬uŲĢ‚“'•'§åUmQ Ųśö‡·¹šo‡SĀŗ–4Ą·y¬²2 •SėŅæ5ŻSPŌļļg’Śź*WY¤0U9Ę=«('ĢŁtÕō=[ą—ĆŪ’ˆšģZM܍sgĖpŲ@= ś2׹˜ųwā;Ę·ŗ‘“é£F„s¹ˆĻÆåZŲéHō ķwĆŽµ·“Q’(µ9d…+ócż+Bćƍń*ęŹīa¶µyć¦ßR}Ŗ” jI[CÅ~9žĻĄĖd xbž)g—PU„Ļ6ČŲ÷_óšęQŌØŹĒušóāw‡~čžń6æj®‡póÜ3Iœc N*ü ^ų’āė“Ä’éŸd28° 'ŚĆæN•ŃN=GĪxÄæ‡Ś†ü]qį¹µ…m;qXīķ›žz¾ßν3öZų0öŚē‰ ńrjW6Rķ1LdłŸ<·ZŽ,j¢ ųĻ&—š’Ēŗ€ä•ä“iJĮ{+ŠĆ‘’OҾūų—®hĒ^óm§»³1(eūÆŪČVq•āåŲØŹęĒĘļ‚Ž ų¹lŗžæc<÷ń!DņF3Ąäóģ+ńköŸų1§|9¾Ó哞į!v n<² ńČ?NkĢVŖi³6‹LųŠS*Ļ;H²pzŠ{RGpąå¶’Jöi™Čö’ƒ^2 kV7‰r,¬ŅRģXš īs_Ø:Uņ][ŚMa:JŽŠŽ`čr3ĒēZœēn»ą•J–(@Ō÷Ŗ:ö§ėZ%åā$‘Éü 9lē‘ōžµĢō4§¹ł­ńĀŃųCX»ŅÅ»Ć*1XŃų8ĻS^!«E4’FTDØ~Ix$°=… IÜūÆödń¢źŗE÷ĀZŻgŽā?*ŌłœģćØ>„t«ž ų£ć_Ųēö‹š7Ę źgÖ4œČd+ēŚ– "3H*H#ø«„­.cH;čEą?‰¾ż ¾xćw„µ;-CL×,a’q»œ§?ȃī§Ö²>ź÷…|ivŅĢÆjņaū©ĶsIji}­$ėŚCøDŗY‘׳0kńCž !ūCūQ~Īæ¼ §ŪOÄÆ <¾'šµÄ@³ŹW,ÖųĒŻnWźŹ{V!£¶äĶĮ6¹¦Čó^½ģÓZÜż¢Hg‡f׊T%Yv Šįī”H§>HpƒŽNzW\bsN=Jž`Ćä9Pxö©žŠ2 Šx8Ę YĖ%m ^˜å[…<繦J C•Oz-`C J†$YV#ÆaWm,øb.#V#)Šcµ4ŗRN“\†š«ö—ŽŃs.×q¤oLż/’‚F~Ś_°æķ“”źzżĪ ß¼pˤųŠ8ܼ6ó,SÉLH$tRŻsƒž‹ś%ݵžŒ‹g$7VĻÜŁN§>l ʜžŸPk:‘:#.†ų™BĶi&ٲU…|½ńwĮ1xĖĆZ·ƒ5x“P}æI˜Æ1܏īŸ|ČzןQjYšǧC¦Ļs¬YLtŗWˆ¬™0BąwĮĆ ēšžh’ą¤_³UցŖßxB?Śš[¼ł1ö›WåN'ŒPÜ,~LÅņĀØXa†x9是$lU”8®Č=Z‘/A)ą¬=ł«0Om42łdłŖįXÖŗQ‰:^“k".ЬFr?•.¤­&›<ģåąÜŠ Ųó™u YVcĆŗ‘[{¤”œsŽó Źī勖ŽS#ʁ lŁi7ŚwÆ4ŁnöĪ×ZŃīm%7V÷jDĻmt#œÆæJžææą†æ¶ķŸÅZžĻŸõ…¾Õ#1Ł\„įā“żDć=wmP}é5uc¾žØž•4­zŅMZēĘvÄjZQ]_·É-“‘ŹōčsŸsė^ŃuØZĪÖŚmæÉmq™ƒ >™®:«CRŠ &]F5Ļ6×ńĻHˆä0ļĒ<ךo’½ż‰!ż™?h;Ļų?M™<āYWѤe 3nžŁ}ļ)ˆ B°ėÖ¹āõ'˜üU…WX±š gĢ»~B„åO±®ÓĮVsĄVĘų³\·1>Üo>ō_R\ś¦½©źšZj¬Ø÷¶G@ĄyZķ|]”iŸ-#ūžm59bóC9Ü ›IĄ²iĀm1(Ÿ_Ś5åŜń4wpJc–6m`•{×ģõń xō‹+c§_©ß©!Ą'ėĘk¾ā’?FtĶr{XŃ$ˆœ‚šö-2ĻRÕ­šžyY@' „ŹĪw¹e&x„ņf “œ6EZÓĢfA?„ō)ibL[mFdh~ßló1€§5ėśh‚(–åo|™• mčµ+Dõ}#ZŅ®tÖ»“P….|Ɣ›s1ķ^3/… ×/®nļ.U–l°ćč(:#x§dµAµ9äõßiz*[ʒ5“kpG’³„Ćåmł‹Ž”t59«Ū’ś£¼ “ äcŠh²nÕ ŽTŻŽk£Žé”ą2D['¢Šāl#xuk›+«ˆ1æĢ#ålē„ =;+{8>Ż(įe sķ\LZÅĆÜ$H<„ÉŻÜPiŠēå‚eøYœ“"œŒÕŪ&³ŗ{¤øČ[Žk9Ä錺)‘£%]š¼ ö­]2El’Ø Ō‚;Vf¼ŚX³©Ē§*ĒŖÅ2żœpĄœ`×ie®CØéööź(z“ĖqEc#\Yąµø‚Ų/$1Æ2žŅĻQ §(† ćņ¤Ŗ6“dō`zŽk*”ī­c¶ŒķŖčÆcuįŪ77@ł£+–lyą’Jų<Ó*s²?sąüņ.šēŽĘÆķ3ńĻKųuākƒ~¶Ó|E©ß ūR䫌ńĒ8ōƘ¾ü×>:x‹Åķš¢ĖKƒÄšFEօ”óäQĆ ģO5ÉJ£Ž¬żw/ĶbÕīxĪ©‹>üE„æ<ā_†ž1hÄööŗ­³B/!$ń1į× ņ3ŠśöH“»­%#†Ī® ČS匁]51k—SéšłŒ\os×t m&;[ŻE$d$HĖżįé]7‡õ3ćmKÄwńŚ"‚@ĆŒ`Ą…|ö3F'šŠō}D³Ž‚ĀŌióJ6Hź0dē½v0°Ņ| įaŖ^źØÜ_Ģ^:äuäōƞ­W”ó؊… ź^抔֭u{]Cķ1ī@Ź’ź+BĻAŃīä’;ū‰Ķ?/8ŹøjHó„3˜K #XøŃ¬®LŠq€Ē'­zBéĖp"ɔUäÕĆ)źO9št©ē»ƒVÓæ“t¹Ć4ʇR0AÅ~6~ҳ֣š£Ä:–”ąę¾³x®šśĆ&·c»bž‡ӄõ:#RĒÕßīģ>,|5²ń&Ÿuj÷Öi¾©l:Ć&1’;f½OÄZšÆ„nõ•‚9ÓO1Ÿ˜d*–’õ׳„™¼kٟŖsžĀ’’iÆŁM~)ü?ų7ćCčrO§jśl¦3,ˆ¤ŖJĆ+#<ęæ">ų^ź÷įʗ©jįåׇ™Ų‘yy‘Š3rTšś|-{"£‰ÖČÜŌ~é¾2MŲŁCo«XĶē[Ė§w”>‡ņ§|8ń¾­š›āU²ųā8t‹ˆ‹ˆVRLWP0Ū•=ČĻJҦ-EÜŁUlŽšĢśoöžÆ}£Ć iutó•ŒaI'„vŅhj·³MZ?œ›”b½=«ę1u/re#Ķ|Ø^ßxÓY³Ō¦—zr‡™gšzWÕ3^ų{ĘZ’©“²×ķć&HpäAÜc­xU`dēŲš‹Æź:¬ŹšŪ“–둸øŻ«™ń§†.Ć7pjQĒmó#Ę@Žž‡ŽMsøu¦Qż““’ ųļ\Ž ˜­ü/«BEÄrü© p}3‘×é_Wjś­Š:½Š‹œ|§å“õpŁ’‘óæÄŸ‰Ž-³X,¼-f.¤bU¤aŠxŖß<-¦&£}©ų½#Ö5W–"`!<ķ#Ņŗ• ›Ņ«fz­’ĀųĶõkķĄéy„ŚC—[wŚå1÷•śõšŠ<;­xWāU—€fŅÆŽęöøµ†ę9Ļ*¤šÜzTTĄ_s×”ŒHą|S¤x“ĆOq6£e-­Ŗžctł¢’xÖmŸ‹SȊ+˜|Ėv8`:•ö5åŌŹOn†)2½–æ”i×Sµ¬“˜üŖćqQõ®ę?iśĶŗi×Ē«éŽ»$‚Cņ²÷Ȭć—4Žæk”óæ‹mx*kĢōĻ¾&Š=>Ī[‹h<Üķē„z–²¹ś~§2¹Ļx‹ĘzŸ$’żōŪ{ĶB•Š/Cķ^Uāų¦Żį7¾Õą·9̾Q(£ßĮ[SŻ£5楶7{­?ķE‡Čą`©õÆ$Õ~ŻZ\ŪĻ Zߣ}牉ބ{W&Øī§%-^ųkńŖ?ų–7ľ%¾“Š`„į øĀqü9žYÆÆ-’iėx#ž­+P²»$fiĀī;ų֊©ģač&xV«=½äŒģ}܏ėYŚl¦2\HTœf²©P÷ØąÓG ā/…^Õ5%Öō›ō-Mä2Oöy ¤­ė¶µ“Č.¼1v‰,—®Žw÷&”U±ŻOZš§ÄM~ļKŸM7sYŁ““†>øĶs1k«[šÖ]¬°“€“Š’“TŖßC_«(žCš„S]šŽ“ā½ĒųkĶw¢ˆ£|?|ēĀ¾¤żÆ|!yŖißüc.©gs®4\ņĆĖŠ~b:žj&Œœl|µ­Ż‘¶½µĆ26Ééė]&„4śŻÄ•żä³ĢŖ#Üē-“v&¹¦‹†å+½/¼š;:ƒČĒj£Ś»ˆĘӞ+.n‡M7Šč¬.Įu‘HJķ,uKq ń^B—qŗ‘‡˜ĄóĻ„u²«L×Z‡%[¢lĖĢ›@?7ś*õ!.§ƒJ<©¦}7ąŪ„‡Ęž7šśŹŪX‡Oµ>ŠøŽ©“äķ=žjü6×tHü9ńÄ:†‚.ģōkĖ©§ŽŻŗ"³īēŌņ{R©3ŻĆSŗ¹ÕŲ*™…šŪ7/zŠéüÆųAńõŖx’ĀSxŸA½Qf†7 Į9l«`~"¹$ÖĒ­h­Š蟱GÄ=6ūį>[Įć«„aar°²N¹ū˜”CĖŚæ>¾>|Ö?f oG¹_Ļāj¼ż©vO¦Č:#ā†²Ø“ŲĆ [³sw‹·*ķ¦æ{1ōķe.-LH’«( ©®oYŠYƒ\"—”rqÜW·=eVėPŅtČ®ŚßķgåÜ NćžõśÆū/ų£Gųeić«-MÕ¬ÆŁŽ&ĄÓ†Ļ៦}+æ ń#äxĖ*†c–ÖĄĪ\¾ŃZżŸGņv=³ĆŸ,¾ü]ń—ˆt/Żų/Ā>$³ņ§’Ļ%a˜‚ŃćoBGē_ӇĆKOübżž|1aŖ®ćOėŗ†ėz†Šö7_\ēčG+ėp|­KSü¹ńóqy&Ž2¢³rµ×{7śÉ/ķūųögńĒĈ/tĶoÄß 4ėČg³¼ƒ-ŗĪS¹CŽĢ”¶Ÿqé^‡ūüfŅæc‰|VųCy}ć/ž%Š+_h>wļģJŸõįē¢ÄrĒs]Q•“?vĮåx~(įHSņöš’·gdü¾/ė&ŪYÓ¾*ųIń?Ćļ[\hŗ•ŗ]Z^ĄC¬ˆF1Č#±vŖš†jj6+ØÜ-Ķ”*¬¬¤ƒ¼zהܒ:qtźajĻUrĪ Å®Ķ;5÷œgĘO†7Ž(ń7ĮohWbßXš¶ŗ“:HÄ-Ŝ $ŹŚĄś·­} ĻĶÉėZŹ’źsĖ'ƱÄÜi·“kāKčģõ 8«~īKXÉŒ±©ØB;·¢?J>ĮlæŠóƋśæ‚æg?g2*̚¦ ćłV61ƦIuĮ®;āßģ7ū?~ĻŽ=šĻ‚µßŒ0ńŻ„w‚ĻÄ…¤K$Śnõ!ˆĮCcp3ׄzĮ¤®~ …ń× ™fo”Óu!ܧ²Ņū/[jĻż¢ædO|1‡SÓ¾x†ĻāF‡Ūp„4²ZpźAĮaÜWēƒ«G«D¦%#P¶cįN 8ąä~u…J.ö?FĄqÆJ5\\nÆgŗņ~‡Øx{R’„ч…õ³-ķ²œKgO$Õū%š÷ö{ų5sšVĖKšæ‚·ØCĖr“¼š[ŸSō؍ ńĒ–’µģßńöfÖ,~&Ä%מj2$s^Ą2l&cęśŁ£Ć^+¶Ō“˜‚¾d$IūĄŠ%BĒ£‡Å]źk½¬ä팱ē‘Ö²Kœ]¦$‰X>YöŒkkS¾2¹ł!ńĒ\›Uųā˹- --Ąn€€v®?J›ģ¶ĘöH^T_›2@ƦĮEŁX’+|nĘū~&ĘN÷“Ś’ĄmŅĒė§ģŃe>™š§@¶e“¬f‰Ÿļ)npOā?*śóNÖ'qęĘægĘQ”uÆV+Cń,L‰ ² ”'WB>özÖeåČ·GxσŲÕÅ\ņžęæö•®·b¶7ńĖm*ŒžõĢŪxfę V !“Ī;¶Žć޶2”z›WWĆ{6±^Få8?J»÷°«B§‚E;N%™.möæŸ÷ež/į5Ą^j is¶2Ć8µQ‘Œ¶:k¤īŠ4‡„dóߚåµxEœ’µ¼|·šē„js·c>×PŗÖ[fz]}½¢Ääqŗƒ'+–lÆ „ŹŹÆŠōĻŚ’óY{‰Š²lBÜcµL“0”vBŌI™ø*98śW>ö—Žy9…‰Ē#„4īAÓßiŅ !ŚI10LÆMy׆Æoģ5?¶¬ŅÅ4MœōĒ4Ąö?ķ„Õü¹Ž]ņēwĖĘ y‡Œ“ūēŌmµ [éaL|Č `óßõ¬łŃm4–†+ˆĮ)Ęü\æŗY¼³zM\]Ģ [hā¤ÖčXg9ūĢW–ŚF0,AĘ*“°—™&£ęJ–SÅvŅŹ_÷‹ž‚ŗÆÜA¦”v^¾ō635o­4ų$ælC8Lc<äüC©ŚxƒĆ·pŚŁGr².ŠdĒō=©łĖńDš_‡õ$¼½±‚łŌ–*£G„|ŸØŁkš¤ÓhגÉb,ŗ3Üu(&Hż„Ć@źv' ÅEmf”£ĢeŒPBvŹĘMafiĢhۈw«ŗ_‡ßĀZ©»™öÉ“7Ž”¤‹Œ®zµæ¼4É®^}‹9XĒ”1ĒNµĒźņčž ³ø¹³·Ū`ø,½OØüź=˜Iõ9ß_źvśüwZm—Śnmó·ĢMź}Čī*Aā_x…āź$“ÜZKu@’:TøŲžnä·1&™sČddČ\b¹łnįWgcļķRG‘^ V} %Śy.; č#Xw{Kæ“ǁŪ¬dĀĆ<Ę)Ė f³µYo®^3nQ9É$óRW/s§±¶ÓßK’K‹ŁłUHłXc§Ö¼ćWdYŪó’qŚ‚ 0†`gŸz¾Š<“s×Ņ€3 ™ IĮ8źkNc$eƒn$ó“@”ÓbU6÷Ī1ž•!ƒĖbĢŲĒLR°4’*3wœ×ż£ØŽIq-£md zćƒK‘ćVµ³š%@IaČ5SšÆć=Q¤xV]<6ƒćć·ćYV“csHDśĆĀß ōO Ą[OCĮPpć9Ļl×s§ż²=čŹw©ēÓó8Ŗ×Ōļ£NēMl·w¦Eb²1łw¶®q|/ŖC­]M|’lӘ“ yM^o“¹ŪN™ÖĶ{„éšj«“S“!`6z±šÓĮ?hĻÉį‚¾Ō|GsøÕ›÷Vv}·4ŒżwQ}3õös’‚vžĻ’õ¹|ańLҾ1üoiVg_$½½‹łę˜9ĮļŽ¾•śŃįŻ7U½»Ó5/Ł’`čó-ģp¬£Œmķõēė^„)3žhźõOé¾ Õ¢ŅžxFĒI’Ńvj3˜J$I=O­wV4k§×uÄ_ßĶ?˜ e¾6‘Ō’]vEŒ÷Ųō׋FӒIķ¦“q&7 ÷{W {/ˆ,¦‚Ä,iÆ8;JHē?C])X‰JĒ!ŖYŲǐ½’ßR|• ß6Ā;Ÿ~)ŅŁZź«i©éo€Šēå‘cš I>ŪØĢöž²[ĶĀĖ"ķv`aŒzcéķ\ÄOxgĄ—÷6ö#Jń–£ Q¾Ē§ēž=+XӸϊ¼}ńūMøŃõoüSæŃ| ¦DXIbgHåb½B§N&æk/ų+ÕՇˆ~~Ī(öZOŚ|™uRNł”}ć‘^…*:źDåcń;ľ6ńwuė½Åśåž¹väe¶=2:W5,Ķ;fU]ĄäW|iœU*ĢLŠ’Ź1Ąę«B¢Fex›oLšŅĒ;l|F0jdƒnĶĢwP"G¶‹›8'“ŸåOC d±}ąćn:V2Ü Hmį6‚Xd 暼­4ij³w•Ö(• ,Ž• Ų#©ķ’ >üMų߬hžųAąkÅM<«ęŽEnĶmh;3¾1Öæ„ߣžļšgąī¦ü]ż«õ³ńDZŖ\Į¢B?Ń­ "_¾sŻøČĒ5åā1ßN?Nu_ųĻжŃ|%euškĄQ¶Śˆ„’Hčćķҹ7ā,—6 šßĮVŗgˆµyfZņķA¹„śŽžē„ssL‡PšWƒü=cŖAń¶ī×Å>$“sqlmN`@G/9+…Ö¼Y©ŻE¢Zčpéŗ~ƒyŽĘ=„Šć¦;ć֚±©W^æšĶµÄ7¾ŸSi]š' €ųēi³žÕä~)š9ŁMū3ÅĹFō9ēJMKDŃ5mu šuÄzN…"`\LŒ3&xϵ©u­xoĆF Mk_ ²Y”‰čF:tīiX mVŅēQæ·¼Ōī%GŅ،t#½tzw†u ¤ŽöM/Is±īemŠ§ÜšBęÖĒ’|Cų­šĖįՆ­ †²Ž)×UZ?."6Ē/ÆŸjüņń/ʉ.øŠ+뻄Š~.ŠĖøDįü«^kĒeį=oZ¹XmŃäFÉXä é^Ķ”ü#ÕtJČjš$ėgp74ʹU=æsTŖŹ•ŗIŚų*m8SJ†FŠTĮ¦ÜŽāŗĮsĖ2“å¢lē qŠĆœ“Śtż-t[6÷ɓϖ ŸĘ¬YÜXĻp‡^€MnĄÆ\}kxĻ”3,K„Ą¦fҵ öN6łxĮük„Ö4&²-t²~ļ«:Vѕ„uų¶’ūlÄ«å¢ģł@ēń®ŃÆ®n®ęuxā-ėĆ}kX™Ķ_kś–—t¶"ŅmŁ7æĢ>‚ŗķ*½°jēcs‘Õiœ²ZÜ–Ö:ž‘ws$“Ā8'ŠtÆ*Ōõ;«MBēͽKˆć,L>蠂m?ÄŠ–1yėĢ U< ꔦ>ŸsiØ@’M.6Č(}؍°Óōļ¶ł|»rŁf;ŖŸ‹ķ,td²u– dŸJ^FńZ<āŻWŠęŚĖVļb%ZŁe>ž+”Ō-®®d…Ż'+ŸāśŃt3”Õ„ÖlĖCpæg»#•ō«6“éÅõKÄ‚ŻˆĖ;m¬Yœ¤z"FŠ]E$rŌ†ļW7½ęĶ;O9IYøŃĻn{­Mćń( ē6}몟Y0ZŗµĢ(Ŗ„X‘œU¤#Źļµ+cxå ķ<õ­›H-eµvf‘n3•½;śŗf”} Õỳ[I7mMĒ;Ōt5f[ÉČvgPO#¤×A§b„ŻżÕŅƊøpē<·i¦]G€ć5…„ås—hīōLGdŹPdIƒėSM3N&IV<\¤“’l"H±¬w ĘN:V»<7ņéķmę6vs“śŌØŲ¤Ī×Nń õµ«BņnmøÜy5}®ė3ܹŒĄćł†p„QjDŗ­ŪŻZ$ś“ēĶT±ÅyEƲļtó©h-‘ŌÖ±Z6oiņG,¤ćtxĪGz©©…iV8•™‰ķéļTc)×:lńó#–Œƒ“Ö­ž˜¢$IåVlē8Ę)“IŌi­-Ŗ ¶äć9ęØ\źf;…2†kpŲŹŒ‘ųP‰•¶góŁš_[ŸĀś„÷§N»€Ūd,W óżj‡ĒĒ> ń‘-„ĢW–¦ÜMFGß?1õ5ō ”Īķ±µšĒāwÄhõ4– ­?N ŖÉ,|HqÓ>kÄž AćxŻuÕ±ģwÉ ć+^d%™é¤ź“ ĢÆo4¤I¶Až=æZČŠōėķOS‰#³’fvĄ5“fŠhŃńēĀ[ę:²^]Śj1Ę€XŽr=+ß~|Pŗš—‚-tĶNóRø°¶-|Ē;éļSäitŃäæ“/Š’ņ’HÕtŪymtć?›±]Ž8#o¹¬’‡·RŧN—V²Ś$’$2r@'ļ~U:J©Āy?›ee„Ė%č‡>L‹e}8Æ,Ōļ//µ+]OZY­ī^Rƒr• ēŠŅęfrŽĒV»¼šĢ¶š%Ō%š#"<XØō>õKþ#ńׄ|UšpŠ”šåÕŲ‡ÄR•ćdGlZÕ;Ź/cźßų`k¾±Ēž³Ęā܌0o÷:ų’ŪągŽ[Äréž1ŅLĀwHn ĘōĻBæJŹ ”¦ŒīüAū?ųD³†ÓĆ֗oŠŁw3Ķ õĮükÉ“Ż ĄŸ ¼pÖrź¶ŚÕčq ܧ¶+ _”ŃNŪ3Ż|rtÉ|?ms±Ći7ÜhXnŒõā>2–}fŹĘĪņ{eĮµ’‹*Lć&š¦›qc-”‰-فw݌Ö°!“äøDwTŚPćœńŅ“¦qɌŃmѤøiäiPs÷Gҽ›Ćöņ6ķBķnBƙĮ|ē“ėҶŒnf™ÜėšĒŚ“a5¶Į:ŖG"ž œ{`V‚¤š¶ØńjŠDmī×}ćןĖōŖ”;ĘFķ×Įß /“‹9’āIŚBčܜśzWØNŽšī…c«?‡m®5[8ĀȞRƜ s×ufĪ„īĻ_ˆ·zw‹|C6©ąĖk]'RBä‚3µĻ^ßJõ߅—śÆŠü†5Ū;7׬åóęeˆ†“'×øć4%m ±õü=ńOŠ|l¼>ĒO»ncŒ ś~5×|ųY&„j6Śż—曑^č.Z~2=qœRdKb}/ć~ ųøx āĮŌtI—tč>zs߀8®kćēğ[ź)”hŚÕž„t‘¬±”`_ę\ē±Q¹š‹?>ümųæĀ×0ó"¶ń „Ā+@Ҍ ß·zū_įwĀ]cSų{£ü@šĻˆmģ|YfÉ,4˜Žż Ó©ėFńM#ļ/‡ZŽā‰oĻ€ećžõń‡üץ‡Uš†õßč&{{+’ō‰ „¾Ō=§’\×5Jv³FØü'ń?…oģ^.ģå„HŚS<Œį½+Ķ.āņČ3Ę»é0*FāXł[Ā6vn+–µśSū9ųņ×XÓMŌ®c3¤Kå0“pVīøüė©+£ŸZ‰‘X|ZT’I‰Éņ®y®„EŸ>üwš|¾%Ņ®xėX]CćgĆvM:õg;g¾Ó±ū¹OĢvÆ'“”ē–ęe ć±ū­}gīī F6ŅØu#łWėŚdz¦wo$euwómÜqÜ/Ö¼śØč†Ēü%>©~ž5†­,LKg«m@¶Łzä~µłcūLü,;ų©Ł4V·^'Ša“͕缱rBœs»n/„eg©£gņIńKĄ:ĒĆėŽš泞c5œĢ1ņ±É_ĄęøIēņņ Ž vÄę¬e-óy…šO-FFSJš‰På Æ^µŅqJ]>«ƒµ‹+õē°¤ø×e¹ƒģÅäš»3$q,@°żčąQQłs«§—ĻŠ8»ā¹UĄüM"±t ‘žN(:)³NÖTƒk9g ČöÆ æfĻŚZżœ¾˜Øŗ„2łĖ"}ņ%~‡¢OBKچØ[[ŻĒ¬Ś›k‹”²ī÷ż+øš[ĖźĻģrYj2G į©šÜŽ/ éÖÓÅ.Ÿ‰£sœ±ĻÖ½M4Ń_ x ”=9ā‚’čSŌ5‹/aq rBœķÆ9æń.­}­[Görc ®Bą`3޽j Q:ł`ž[Y¢iĄ=O„rpßC„j+ Œ†Ņ² +ŽEö¶wóxČÄŽŽ6œņ|0%xģh*čt^šāöÕ¤xHEį‰źģ²Ģ»”eˌņ=+tĘCcŌc„Gc:Ń»c”­ķöĻosnĶ«d€p:R4‹±¹yØZÜZ¤[U$äOZó[›U[©&Œ Äc#҃®”„³ŸI¹»źÖVx˜A)Œo vŻ\&£šö=ā=ƌ¼%®jŚ~™q"-Ē—3!8ŻÓ‚y˜Ü"œuč{łf>T¤¬ō>ń·‹ēųoūSŪųƒ[{æŲé¾ ó\Ķ.A·—N`kś¤ż—~źśe³~ПžĢ./4©-Ę«kn%Bäe\Ä:€@ēWÉāšŽ.Čż/-ĪåĖļ=…?ą ?n?io…ĄµĆ+~Ń^ŗI<#ć6%'lƒö{•ą¦ą c9Ī7Ā’²×Ęæ Å>§į‰7Qjk µøó1ŗ3Ʀ‡ššqRgŽd˜™S‡/5Õ’=OÕßüš•Ļ‚c×ō“Ōl¼€ŠMܲ¾y+āŲ<’ßź -%ÓCūÅŪ·$cóč+ē+¶Ļ¬†&čč쵋i^!)ӂFŅ .2M|¬Žx«āĒÄ­SĮŗFÆsy„Ś#rAwõĻå\ 9\ū“įĆõµøŠ4)·ŗp°¹SŒŒõĒć^¹ćŸ‡ŚÆŪ5­/Įw×:ÆöZł¤³óŽłźqĶsŌ}NvŃēZ~…¬Łų¢ĒT½Żģ lē×§ē^ŗŽ Ó®īf¶I¢,æ)P܃^tŸc;„‘[ĪKƒ°õØž/h>ńĆVĆ^%¤f[K†;^z€}éA³kŸZn·āŁkā$>3Šk‡ŚąhÆ 1“ õōĻzż._ č’¾Ūė–·iuįĶjĶāßk/Ķ måO”Æk +-Ļ“coڷųĀKæ„:å§tkhåŠŃ¤—dŠ)'õČ•óցāoé—Z­ž¬“YZÜ]ɬ}©ęŚ—„m4Æźõ…ū½ŻÄ+Œ3ė‘]†ŸeœßŚWɛŚ'‘8pń\Rfr‘sMńDz>½©i–z¬:‡†/īgqŒzĒłęŗ’ųZŹĖ@yšņĆPi"ó1ŠūqR¢)j|k}­kž±Õģ¼>ŪJī½Hš@¾rÆĢŹ <nüÅzĄ?‰z7Ēæ ėePióY0)üÉ Īzpkjf2Šō‰_x1¼G§Gß[·–Ń…ÜĢ:äA\G‰~#¬žŅ/“-żDÆŚZŽ@«&łöö8ė^$rN£GģO„bĆ„rJcن5l{.‘š¾ūāGLĢv1Ė‘ ņ ˜r¤~ W |%ńĶÕ·‰ī¼®Ü¤^7Ó4Į×U^€zƒY*%z÷Ųś-'NøÕŚ’X@-ä%Ż”yąt®{W†Īīā &łćµ“Ķ…T#”SŲ×µƒŽØĘ…>wc‘¾–’āŠn.-桖vbsėōÆ}³¶µšę–Yʉ“åz±õƵĮŁY³öl–ōčĀ’<ā_‰­f²½±‘üŐč['ņƊA¼–żlģ™¾Čƒ#'8ē¹®—-Ņ0²G¼ųHM0)øEo˜“ļōÆ©ü9ćø"·:n¦‘ŻXģŲe§š5É*w=•Œ>xÅZ4:ö–šhZ³Į!Ź`BĪłqźxƃ5ļÜŪGsqweqåĀŽY•PįÆ„č3Æ )_SēmOHŃ5‰g°¾[X”ČUeą8>¢¹żĮś‚/Æīm®#›OŌ ¹U÷ē­rJ6>Ē­Žź_G GĪ›cćųŗ×C źQŻF’;+äćŠĘR>¢‚ŠōŪeŒĄ!øĘŖŅiI>ņÄéȬäū”ĪM„cpLg {W;Øk77ń¶Ÿl”"裞#U:‡ž±³–k›E–ÉåmĻå¹ OÓ„zN±¬jzę™¦éśä÷Ij»c,ÄķĒ„S™Ė(œ¤ķöVI ē½’Ćę±¼©ŲĮńPų[ŗ©n±Ģ¬$?2.[åu=łžU’ž„b"”]qų÷>©ąĶfĒÅśōO­éĶš\Ąx™F8ČõÖ¾žń—ü"“÷ģ»ā|YsjsiźŽuŒy¶÷r7®@5²g˜Ŗ^)ŸžÓõĀ=PV6ÄDĻ’=6ń»ń®šóķ7˜ģFéĻ ėX³®ē+„k3ǬMkt’Ū^Ąž\ѰĒøÆ·>üE}.Ā})ü›ķėjϓބzk¦ēāb›±õ—Į-STŅ“ķv"“h7 —F!ŽÓۃĒzż’‚|~ŠgĮˆō’€>3Ō„ƒĀww &‰sr’-”ĪFaÜz#7A؟sŸ„Įµ¹üÅō†įõä°µØ½č’Š:„óŪę~~Ł’o¼cškÅŗ‡‡¼3е»{B.4šķFŠŗGĢŹ2Ź=ˆšžF|ią [įĘ„'¾)__gΰ “ĪW±‚>µŻ&=żshĻ+ƃ”Æ*s½æ»%§ā¤}Iš#ö›ų»ąż+M‡į÷Ä_ųČ8–ę¾ŚFČņ`dē¦+śsż™¾;ų7ćÆĆ?ėš“x•-BźšFV;‹[‘Ɖ ĪPp0xõ®Źé?įöžÖ•ŖsZ£Iźšv”­§ÅeĢõwJūµć'R×|1«čŚ.ŗŽ×'…–Źó`a ć•%Ogćæ³gÅüLš¶ŗ>(x=|#āĶ+P}:FDd‡Sóā ؜ō$zzōīris鹤XÕŠØœ’SS$Eģ~ |lųŃŖ~ĶæšP_ų7U±‡\ų%ćx­&Ö4ŪĖu–÷„yŽ#”Ļ=«Ņc߂?~ ~Ū~.·ųIć¹u‡ƅnלּ?%ć0Ńīź"ńEB€n õsŒœ%ŌżŹ¦IUeÅQ֜é6ü„æ§ę~Ģ\ł­É ˜”Ś}+å?‹ŅųŹŹßĮśśé—‘ßFŅYÜŻFū£Eå—ĢSĮ\ŒdЇA3ņŒ»éĖGcņÆöLų’ń ļöŠń7ī|saįķVīxµ k6™ƒPx—å6ī0ŃČĖ‚6šp 8ÆŁˆß³×ĄÆ‰–²ßüBųšĆā„1UŌt[YåcŽBČéžp9ĶbšŖÖ>ó;Äć²Śō«SØÓ”#$Ó¶ž łń ž ’ōųÕoxśĆ?žĪ>:yZ5›I¾’Ł£“§Ė³ÄS÷vē'žõłqūZ’Į¾,žĶŸ üAńKįßĒ];āgƒtÉל~±¦żšęŅĻ I՘9\Œƒ·€~•Ć_­sś+Ā?„c‡ÄŅĖsÆŽŅœ”TžŌnķwæ2Wׯ›Ųü‡š†ƒć~i4’ ųS[ńV©½”[éщ^@½J.rxę¶£ń•Ɔ•łWūS|*“ĄtŸŠž ¶6žń^`Ō-cGkxƒ…7dŸĘ¹+Å=»„Õ®4ųWqżń'J»Ō"²ĢßfeĒŻ;³“ś×īēĄ_M§Žė^Ō®cŸG—kZłžē§\žuĻŲRÄYŸSźš×ÄÆxėį‹-cŌtKO™Dl ķp3ø{Œgź3'„/|'Ŗkz=ōš…•…Ōö±‚Ÿ¼UG džU‰ź`qNśŽ›xn'F’å£Aن>ł«ŚŲū~“­F7”÷“c<¢īžJk‚Ōśš5ÅŁu)õė­CÄ’ńńw;M“’ƒ“üv“±§Zé×0]Cū£Ęō8+šśŒ&‰#üć¬ÅbólN**Źu'/¾MŸÆ %ņ<įøģēūM”Ö‘Ģ»„ņ+Ł4mBłX+˘»)5Ž~y]ōf”Ś„÷3̲aLŠńČØŖĢĒøļZĀǚÉ'Ńķ¼„šź2²1čq]N‚ŠA¶YįI1Š¢ŗa±Œ¦nźw:Z²ŻÅ K.ŃøU8µ-žDRēļ†œ£sK”ĮjÖr^H±ŗģĘ=jĒü#^Z ‚Å'#>¢¦0±Ķ7ŠĆ¼±¼³` BŹ_JĢø†{ŒI=Ę3š³šR4“Ÿ“WšĖuņqĻÆR_Zėv®śt¢RHą~י ó ĖQ¦ji¦ź+5ŗ“ÉQŪŚ°īoŅ9ځڭĖÉ©”{˜3æŠõ$ŽŲ“’*ńŌÕƚ©LĮ9ęˆĘĀ.]\Å5ø„’ücéX‘éVlŽ>ļj&0"½ÓƁ’Ń0p1ĪźÆ>øŽŪ.„9ۜVfr—b’Ś`’c Œvõ©Æå±:|/j»ļLt­ā“1”­”ēŗĘ®6°‘˜ź .›¬_ŻŻ£ŗ9-ŠÓ3æC«š–³juE’źÕ¦PNc'ļ^ŸsØi÷s­Ä g Œ†ĘBU¢éž ć+ŁĘ£&Ēqb£ Œņsé]‚µĖ[;mBŽźĶČ^GŹüTŲŚ*ēĀ“†“{™Ī­dŌä&K€OBF;ŠłLš„֞gŌa·ł'; (ą÷ž“‡8„£ø(X€A_åX2[ĖlĀv3€>nĄŠrŹ6£ĄĶsĆ5“āĶFxŒ;$Ė*įӹDŽŽē¦łzžeŗ¼1.Ņč„™‡@_¼ńM֝§_ŚĒĪ›BļUĪGqĒŠPkČgč>$Ōō¹,ī– įwļ‚2­v6÷SOtׂVYIĖ š? ‰¢eʍö„oqµņ±+ qķŽøėż>[{w`ū™ŽG?Ҳ³‚ą£5ĀŖø=G­(gžŚD™W'#Ö²š-®§Z'†ę—=ł¬ŪłD1œOf žb¬7`£¬ŒUó÷ŖZ„I*īŻóz…Eł™Y ńžµ;DŃąžĒõ  mŒū¹ćžµ±g™2Ā€£tĻj—0: ›V²…Ćʤcż`= q‹ØĖē$[ÕĘH>¦§ŚÜŪ“Uµ°¶‘®^'ˆY{ō®RkŌ{I£²‚`aæå^j'VČŅγĄ_ ļ5ÕmNéwÄŲģ3_Ué ōæ é×P, ½¶Œ3‘ÜŠńq˜§±ŻN—CVŹ<\ iaSĶté1Kó†=0kĮ©S™Ųź„,l£ųEøŌõø•a¾n¹Æ*“ų“Ŗų»WĀ?|3©ų÷Ån,ō茒E“»(ē½]7:v?I¾’Į)õ»Čōļž×$·ŃōŅ Åæ†“ˆó%'%= R+õ§įļĆł“]Kš_Āo čŸüÉqr#1K2ć3q“žyÆV•+õ*Ļ¦ĶąĻ…ŠĒ¤hZń?‹ļeÆ/5·N28ę»ū’\ų‹SŠõoßMm$Ņ+Ērģ$ē€TcÓ„wÓ¦qŹw>†°ųM­o#ŪŻŁų:t@Ńܲ—‚NQžjć]izZ6‰¦“:…Ś|­*ÆįÅuĮ·bœ¶ŗ‰Ōä’årĘ­øוé\mߌUP8Zˆę«>…6”nŚ –' #(ŹT†zŅ·8dÉÜ*‚ĢŪśqÓń©ć”‰Qžäņqڳ”»ĖČø¶bE ÕĒ*Å¹o/f@SÉõ§ŗ2lÕ±™•І\÷k¤²Ńłä“ģĖĮ’ žµ‘µ8›žŃnuķsMšĒ…-W[ń=ŌėV‰’ʼnĒ$ }kś$żŠ?ą„ŗ’‰>Ńń[öŃÖ“Ļ xKÉV“Šmīv1@3ū÷éĻ÷FOŅøńČōiP±ū-įÆų+ĄfąĻٯšO†ü „m{fŖ®Ø8ݜdžüœū×įmSĆ_µżZĒĆŚŚ|P×.ќAØÄH§Ż_įēł×›5©×v89į/ń'Čų¼‰§ų)ˆtŪ)0ź3Š‚1č+ćŒ43ĮŸŁß ¼5k¢Ż[G¶Śč YAēļéÖ¤Ōš/|C–ĒNžóĘVŠųĆY(cv(|õĒ·„s^%æÖ5]³[µ­žŸø“ćo¢ó@ĻØ]Yék§éŚj˜fhi—!Hﻨō­’ ŸxsG½Õ>!%ę©p"bG"{”ķNä9ö3Ä7ŗåŽ;y¬4vČ ¹=HžŗęŪJ‡ĶŲZo¼gūĄrƜcs0ń'ˆ< ą (uoėźŚĒ™fß) éžG5ńŸÅŸŚ“^ń°W…걊|3ę|Фg.B9=jī‘ŃN™ńnÆÕö¶fEɒ_9Ź‚›Ōš÷_ü5ÕüKž‘³µŖ!f=×McREÉYÆįķ/JŅüKmiiØF5T,ˆrA`2*ż—Ą:ιo£ø±Łä” Āü£õś×,£vc)¤Y>‚ŅŚK;©Œ’§šöĶVŠ­4éoÉb)œ®HĪ1N01•CwUšõŒ¶®¶n‘̽T½ļ^K'µ»ūµŽ)„/ęL¾Ēšž5¼a܎sAķīlg6³³Lƒ cN»ŌŽÕķo’)an·’*Ė<½“łŪRg‹@Ŋ„WU6”ogk=¼ŪHÄa‡qōŖR±”„Šņ{» Åį»ūt²LO~о•ÖŁėWZd,€gjžµ¢‘Œ£rŽ™ćfŌ®ŅO)Ķ®Ht‚1õ¬xÆK72H,¦}¼nuėģj‰ög>ŗ­ī©qfśu‚¢;g…ŪåŒuż+Ņb·šę¾× ĒÜ×ւżŸRÕŗĒĀ L‚ pH+ĒöŚ<6ūt­]µpUÕŠ©‰v<įׂķ4 õk«⓼—īœŸEżkŌ4MWÄP‡¶×nķī%ŽV12)i›½²Ņž(yŃY½“÷8/ķ¹^ž„WGĀŻ*ŽÖćĆ÷ńÉŸ(¦9 Ž2=i$k ;Įżv3ŖZų«LmCEµ-öYÕ·ƒŁz č~h> Öc“G’oq1M’X`AéÅ”ūžƒ¤|;Ń<7$séöčŃ.+ĻS^uńĻĆ~Ōt£­h0-żŅøŸh ($žT®a*‡‡h¦§kāĖ VĖķ ƒĢ3Ą żĄ+±ńƹ¦.‹}m š‹‹Œ˜ō’w?CTó<ÆągĘŻWįĖx§Ćš“Ļ%„ĀØŠÅ =0OæjśOׯ5mCDԚēĢhēß%¼ƒ)*žÄw ¹yCj<)%³µĪ„ŗ^­“F欔c;q_žŸō×ū-Ž£¦é÷'$y+’ÜōÅgšČś“š%…Äv²¤Ź’7$\s€Q]ĀĻŲųškZ}ķ֟­DūäA¹\ÆrŽ‚¶Œ¢ō>įųwńWĀ’ l4o x‡Ä—ĶĢN"&›†b{Ü’Jś<{ućĒ[X,bŽķTłc#-ß­7 ™Ķv9O x·XÓgÖ¬|Uį»@]¢v]Ćj‚yyÆĪ隔ń>·āē_ÜĻw#D@ʢށ}ź}š&2³9«żc_×”‡Ė¼¼}>܄p†ÜHćn9Æŗ~|9¾’ßD»Õķ¦½·1d‡ęćŌŅ”lnĒ|Aų[`lgÖtX/ķ¦Œ1hd> Ļńlž+“tšӚŽéžų;ˆr:VfSĄ3]ėZ‘sdÖVƒ ęČø%‰ģ>˜ę½®ļD¾Ńnf *½—‡<0ö5pg/³hįuß:«i–2D’¹łKzśėØųuįmR$‡V×ÕīՏPQéüźœĖŠ{Lhz—öEŌrĆq[‘‡ €}ŖjŚ6©i}§ŻČcµ$¤rŖ€FGZČė†Ēòų&/źwie®-šc!É?z'†üy§x{Z³²²²¹žŌ•¶¾ŽI “v7å¾§ź_Ž/K–[øŃŽ5™„desėī+Ź~,źŗßƒ|l4Š{{4ņĢ#MžY ×wį^£[$śĘŸ}„p.ā”)‘šY¶ń“ē·tŠ8écŲ„ąŸÄ——6Ŗŗ…ŠF–g£Œr*ū_ągĀ=zÕ¼%ā]+W¼·-öķ>~cĄŚ=9?„h`Ńčµ_ģżāĆć/ųūĀśmåց5ŗÅw ™]±c”ĪqX_ “&6ŗ¼°xŠåž9‡F÷Øz+vŌ»ńėą×ŏnš„µŽ©n<ģA„2Ēå?—ėXŽš—įš%׆ą’ćKńT6b8a““ūĻ|Ō'„Š;߁¾ų‡ą¦ŅƵ’=ĘØ—,×PmŻ‘žƒŸē_§žÕ|'ÆĶ} ėščŗžynKĮ)K$cÜΦØ|§óżū`hÓ|w©Ā;cqHī."IXö’į_™š¬Iö»ˆāW „ƒ‘Óń„ƒŗZƒF,`žc!—ØĒzõo…( x†ŚęKHZUy3ĘęĻéĀFŌ­Äė–:~”n"œĻš°<Šķā e“ļg&‰+™_[ ˆ!›7‹rJĖĒ„`Źæ;¾;|:“Āŗ…Ę«„X…Ń®ēw·ņœ|œņž5ĪtR—CĆ,g–Ū­}£ū0xö]žO†ś“ >–Žß+IüEOšŸń ė‚ŗ-źZŒ?fožų‘ąKCO×ģu(ļķ#YDeÕ[{ ō`@Įó_߯ĄļŚ7ķ;ū;ü0ųéį‘Ē«éŃAóĄP °õ2ēż‘ėPõ‰ŗZ‡¼Cż•ÆY›yL3d~ ó_wé÷–ŗĪ›Ō$42 >øā¹ę‰–ĒęgüöWšēķ›ū'üEųX؋ńCõļ J"!¹€±;üßp榹yŝ_‹t;¹l­ÆžŠŚŽĒ,–×qø?»d;Xgź½ė1jrģģž{?Į#–gŽ[„¼„1 ć@Ü&_\W”s‚bM¶Dnż)”^Ŗę<9Ąę“čf˜ā¤:įöóžÕ ‘dRä ‡õ5-›GbҾQIQSĄ±³b]’éųPŽˆ­ K)[ ˜Ą+¹Ʊ?`æŚļğ°§ķiš’斓<ƒĮWr+Å6åĪĖ»YFāń.qéÅ#¢č„߃üK ų«Įŗ/‰¼+{k¬x[W²RŅ®!HØl+wŒ{\ī§u?›ŌjC)+ Ē8®*±7‰ćž/š¾—ŖßźŽÖ§øµš—ˆmž"a—ś~Fæ3ļķu^}‹TŃŅēÄŚT³Y_ł«‘jrŖĢ;‚¤œśēҹ ?Ÿ’ų)ģ¶ŗDķāˆo- BÉ£B|č[$¢žÄtö"æ do6c Ā€rOÖŗØ;œÕ]іÖҟ”…$ē=Ŗ’‰™ČBpö®ćŽJģ/¹d”†9ēž¢®łPH=Ŗ1Ļ#­ø²IÖL11Ś®ĒåJĄÉ.qķ@”Hīa6Ļ'Ź ī~•~bĢ03ūŌĒCIeEĢŻĒ„]Kk{Ė­å&…³•~h;)Hžœąƒ_¶ĆFóöjńѵS“_&!Ģm}bųņŪaįŒMƒ‘ČÆźjĆā>»āK/A&‡{eń+Ą³$ÆnˆĒūWMo»4'0)ž=}kˆčŒĻ¬ü?w„j޲Ö4—‰,5–ę"Xgłę¹=;ÄSKq{opŽŗŽ˜äłgķ÷Ūõż}+‚{“-ĻćCž Łū[ü2ųÆĒļx{ž(M&¤±Ś  ÕĢš8é‡āAī\vÆēÆĀŚŻī—qŻ“‹K€`WŌ~6øl]ńGÄ;Ķ^꾉ZęŁ ØĒī‘ĪGāk“ųqāĖØĒgšoā.©ąßY[OoįĖé/T6Ó»ųX~‚æZ¾ŽOop‹wóHh÷0Įōę»lc9u=~MCē ®#9Į¬atĻzčT3ųéHĄõ_ ėö~ó&žH¹äī»qń'Møf‘ģ”uvǘ€ v.2±ĀÉp·2ĢĖXŁĖ{V†Ÿh­*\€:¢÷¤_:=6ÕŅĪĶ•#?h ~‚¼£Äŗ„Ī”Q$m«“ꎙeĶ.¢ax&/±Hąqõ®ź-nXģĖ£'˜Aøü)ó2[<{Wю„t÷77łGZ§“*ƗÜÆŚ‹$H—§JÖšż¤2”q9Čć-ü«63rU6Ó0 ³0=ŗV^§sö{i‰RŠŻsėHÜó&¼‘^e]•ĻĢIąW_m„Ķ6œ³(,Ąs“tŒÅdH§cæ¢ē¾+Õü-⨼?©iĶöbp cŚ®/”q‰sľ%K™īšŻÓģģr × ¦xŽŚĪvŽHŻĄ9&µ5)Oā )neew_Žć#µs÷oö@9Ķņäõ Ķ}6]GO¹‘ ÄĘ×våÜx_a][źw×ŅM-Ź<8xēéLčƒŌéģ4ėHl&a‚dÉmĒł®ŸJƒM‹ģr¬)s:ņć g)œæ‰µoØK-øŚĆ„ä ņĒ777ž~ąņ¹ÉĒšŠČĪo”Ūé0%ĀIŲxF@Võ¬ĶGĀ2Ė#É,¬s’:‘ަA›zJO¤Y5»®õn«Ž¤Vź2Ć„µżŻ²Å¹NāŻR±7sƒģ·śŗ4r°…y㜊źmåµÜńČ$Ų=;PjcÉÜI)E(8śÖL…­¦Qå†LüĄžŌӗB)c²’)ä*c+óg8ėEž”įęŃ®ÅŽ³§‚•W±ĮķXT™čS•Õ‘ń?‰|„ü_ńf·©ŽÉq§0"ÖB˜Ū6ĢOóϽe?šM/ˆ:‡‡~ų+į«xĖĀZ~m„G4 q*“&8+»×‚O„|¶:ŗę²>ĆNR„˾„šT߆_~6|×õ‹+ÆjŸ4×·½Ūcpß*H2·–ČĻ8$p3_Ég>6·āmwÄ^ š~«iØE kĖ5ˆ™TgĶN2zW…Z1½ĻŠ2m)TŻßģĮū[x—įŹx+Ęz”ś·‚.5°»B$żÖćōƲ~$ė³|cӟÄ~Óc°Ó ƒva#÷#©ÆžÅįR“å>ū [Esбų•į«OjzeöˆźŸŁ·āxÉÜŁŒ•éœ÷ÆĻļŲėĘžš_ķąŁüOqk†u˜ntė™ī ³o;K1õĪ9Æ"Xy]¤u{Sö»Å’ąšÕĮń֗snś,[ŅŽHÜ0bH ‚=…iü ³ŗæ‹_¹ńŸ=ŒwŽ`‚ģ’=r8כVŒ˜½”ćŸ“Ē‹bšwĒ›? ZĖ§ŚŻŻč÷8‰”Ē4ƒƒ"ÆIÉ$~5ämį‹ZĻć ĆgĘ\Q‹¹.ldĀD Ęן3ķšĮa˜{ThYüFńž¹ ZšĶ¾—"¹Y!cļZž!Ҽ_ćź·÷ŗ-Õæƒv˜.õ+pZ;gčCą|½zÖŹ‚Bö§!ń»ög×­~ųa.­ķu\ŚłÖĘ)šŒwčkäĻŁ“ćE÷ĄæĆļ[Ļ}ą{ł¤0‡Sˆä9~éöŖR±|ŻŚ’|!ųūC~Ī>)ńw„­ŸÄĶvśpr+Ū|AšoÅl"Ī{öP7 ^£hėB•Ī„UŸ^|%šog^xŅ = Åö¹ ”įYsŌJüĮż„|©xg^Š>8čeöÄ»H7ö½łčHÖš„vm 9h{Ē€nõˆß uųrņŹćM“d’&“ę Žqōļ^¬ųžMBō›m«;…”ó^¾‡+»>»!ŹjŹ$>'ń×ĆoGolµ;œonHĒõõÆæż§·ęHfM„qśī*֍§¼E•ģÅ+ ˜—޼ŠŌ>ß^-+ʙā #X­oŻĄW Yźó†l‚ dõ®{„fp>+×£{˜-Ų“‘‚b°4ė524Š\ÄOėA2w5]|¶Ū‚bĻSO[dņŽŽ†„’щ®Ū<–QB«,üg©Åsg‡ę³ÕīI®\ca?/דÜĘHķ§ŒĄÉ°c=:Ņ=Śł!v•ŻĮć­KEAō1®"0č7£u• i²·„–¦ź] ōe@7ƒųRłÆpŁŪ“ޕҪŲē©NēK¢x§ZŅ!–ĘÖöQdć˜]C'ąäŽ2ń‡ŽtļĒ5¶±¬ń–A "ƒóėŸoJ·XĘ4Ņ:/ųHļÆą]Źd*G ’:«!žs’ŪĄėYó\éŗ š6į‚¶EyŽ<=y{ymā=!‡öœ‘æå²)ĒŽµF”}[ń'Žļ.¼£VÉŪdj‚Bńž{÷Æ”žüK‹JųW©xJŚīć÷Ņnˆ7 F„Ź“U˜],xŸŠķšŅyƑF’6@ė\÷†f’ļY±ƒh\)§sé¹č_<Ÿćm3^šć›Ķ.źĄ5Ąe £ņjo ŁŚ\N!MMąV%p[Ø5ÕI}JšŸ„¾!ź–^“Ņgø¹æ†cvo˜0ģHü+é­CO·×“ˆ^ಆ"H¦Œį¢aŠ©ģE{Ų=¬~/ÅønLK’źĻÕĻŲæöæžÜƒJų3ńoQH¼Y4ZW5H‡ ’ŅP03޾e’‚…~Ė6ß u+ļŽ^ ќü4Ōn7x–ŅŻ>]åĪŅ ,.ÄĒ Ē¶Ez»£ų«/Ė× qģy.u““ųU•®Ŗ$’×–WÜüŠ[4]U…“ĀŖ§trG÷%SŅŗ]>Oü,ń—ÅŸ‡®» źöņ)ž}6fFPĄpŁČ=EgN\§özėŅ•*Ńꄕšz¦ž–gķĒģ{’šgʉ ųQń«\Ҽ;ńŲ&•)GŖńž­ÉłRqųö=}/Ę?¶k|ż”­¾ üKŃō¹¾^‹y4Ż~ Ęėd”ć|«ŻUņF23^EÕĻóē‹üĢ(ēµ0|\ØŹ2œ$öÓģ7·2zo³Rņ?G­.­om ¼±ø‚ņĪUE,N$R2Hąƒź*|Zés¾Ēóv"œ©ÉӚ“–=Ó? ?ą³>Ō“‹?‚_4Ūo“éś^ Ś.Ŗ0Ԑł¹=~ņČ?ė_œ’h‹ÆƒŸ“Āļx“ųiOöf­ CŲĪ6»;®wź+)TIٟŻ ät3~X}Śö”ååĢŪ·ž$S~9mÅ’/u?…~,²Ó5{›%½Ņu ,)]źNx(ŹG>õņ§ĀļŽŸ“N¦Śƒ¾*ü›ÅÉv–w^ Ńī£6“ū׃€^ƒƒĘqZF]OäLOFPÆK.J“ß]“ŗiüĻ”ænßų'§‹+ų}?s.Æon-õ8T2mĘPŒ¹üóāÖI3żMX g™~6ĆÉӬ৺sFö}ÖŗŸžŁ_²ļĆŁcWš÷ž xĘ’]ųāF&ŚŹńŚY“ČĖ2|¾p7r:z×Å1\µŻŃŗ·f“h8ŚrłÅyõ Æ”÷\#šćŖą!,rå­Ŗ’óN×łŚ’‘å~&ńgŠ.õoģ½%ü§Sƒę·øÖķ,õdX$eQ*®pĒŌUÓG­‰Ę÷gé7ģ©~u÷Ņd\Œpr[5ś/ć½ ¦•5¢ Vˆmb?µßN6>C1Æz‡–gĢ&<•`qō­V~Ź‘ČĮņ#­ś`ēļGćKfīŅdRx×Éü3Ŗx‹ą‡ēµ³ÜhĻ®ˆ£•Có•ś+ Øś¬&ŖĒåž¶Ś„ČÓ|gį{łe¶b’"Ø ±Ń‡_’QÆ»~~Ń×7iį}7Q?ٚÜ!LcĪÆ5Χm™aŪŲżÄš„k¬ü/ń„˜iv±éŅż™÷pól#’žµüńčsÜÆ‰üM5ó«<—×9 ¹ąŅ”®ua ŃŃjzu„Ģ«0HÓ<įEyGŽõx<9įÆĢ×- †3l`óģE`£v}–ĻŹ·Žė̼Xü€Īķ³=bkGĀ~¾ń戭¼3ikū‚VK–ŪŃ3ŠS_C…Gł œÕŒńœtM¶~Éx+ĆŠhŅ“ø§/䥃•ĘŽ: ķ㉢ˆĻµĒO£Zi6ńZ@ņģ$‘ź 'ükS&r×ŗ&؊ÓŪ¤s®ńŌćzģ ¹¢FųVRęG,¶+jŗż°Xć`”‡Ź1ßėK„^ĄH!šŒt¦bušŪŻŻ+É eõĄėLÓ®.“™Y!2x NF¾«}¢ź¶&Æc¼Q˜„[޾iÖTĒ©0‚(Ž2¹Ēz OL±±±¾ŒB·ihÅ3ó{ŠU’ģū})YŚBĄń’xc@Šv÷O5ćĖm=*މ;\Ļr'ŒÄ«÷rzÖs@ŃKÄZ„­²TŒ©,£;s’x®]µŁ™üÅ$ēoLĢĮ«°Ś²‘hĪŽ;V¼šCŁĄn†×M¼äō­ć±”¢Īu¼[¦½Ø†÷LB©“¹zœzÕxž ŪA<F?tŒ`S'”‚ŹÅ,oVå†ÕnŌW &¢ˆ“‘Œž£é[FWŠøÅ£œƒM°Ō5Vi\£õäJē~4|AšĒĆ}Ųj0D-Ś>j-·ėЁZr³¢™ł7’ Ä^3×5»Ėżv}_GsŗŻ$PBAž>ÕĻėŚÕޟkš\žXóŽģ¾€T8ź[&¶½¾ÖbF„›h;sÉü+2śÓZyeˆ*ŒÄą‚=«’”5œÓÄÓA4,ø\ĄłµaxŠŃ.`v6ń½Š_•śFf‰„$¾L—l‘×ėķ^†ōÓĢfk–Ō<Šė(#aR9×üūŠmĢ‹>*šŽ•—¦ŻŲ^§d*ńœ|¬ ķĶy±µ™JˆŠ†SĶDŽĢTŁ@óGSPßÄfQå©éŠō5“!ĢØlT“iFĒ+޽TūWFH÷„eē§Ž¬'™–ą‹ČF‰¾čéī*µĀŽĖ·īē֐ŒO-ä}Å_ėŽ”±©šćan ļV£ “/2[…oSķVm‹Į½åłį`FäVrŲD¤”X§ļ7„Xšx4ųK¤LĪ£8CĖÄdWš¼²ŁæŚR8‡±µyåĒH“[¦ęfŚ0#h#V×Ć:Ö³r#K"°¶s¾öǵ})௃ŁCm¬ė0ģ<Ą³Æ½qb± *Čė„HśIÓ4›h¦¶ŠmÖ+T8)Į#Ž+b 5pöŅüŒĢA<öƚÆZģė„l68įšżŹE} kg;Yˆįkƒń’ÄxB‰Ø/g;maD.Ó?e ¼ę¢&Ķłz3ß’gÆŲö‘ż«ÓNńgÄ0’~ ™ÜĖ †ęžŒłq¶6ē³+öĻąæĀæ³­”>ż•~Ųźž)µk²AęÉ#¬óIēœtėĒzõ©R3©S±ōšV…£Y·Š>.ėśĘµāĖ*A Ÿ³ŪJOØĪG=0Mzŗčž,ńF“e&·OšÜ‹µĀøĻu÷®Śp8„.‡Ŗų[įʑ¢Ąš=ž™wazWķl”ÜēęĒSĒé[·²Ņõ/Sŗ¹’žę)|ÅFžĘ8żk¦ ōo뚌BßTŸQµ·š§’Zhä8x»gėŚ¼źmZŽKO [Ų\ł‚\¹O$ä~uŠ—c)7ŌѱńöMķ½ž™xÉ«ŖlpPŽxēÆS\εytĻwØź÷v‘Ć#īD6ć¦;śöėWܓĒüKā‰ÖĀiō]MneuC°|Š~÷Ņæ4?iŚėįoģżæZų*ų“Wˆ±·²“œ; ;#sÅvR¤D„cš[öØ’‚–üXųīé„čvšėĮŹX=¼s ģ§ x ļ_—·Z„—Ś…Ķńyd¹‘Žē•·3{äó]š…ŽyUčbÜ­v«““ļU9TĒ…dcŸjŽ0īsJ„ÄŹpbUĄüźXSŹßö– ܶj¤Ģ$˱€īT³6qœÕ’‰Į!nN8ˆœŗ"śÄB¬Į=*d“•¶/ŁĖÄż—ėAĖ±Ėma,vņ-܇lF¹yXvP;×ģ?ģ%’ųķū_ŪXųĻĒRßü$ųA)i'ˆÅ{u<ł`ćā÷Ćz±˜M©!UdœõśWšO„}Už+if‚eÉ=ETcb\BŁ\^–ą£d ±Ęk~ķÆm'Ót+ ©ėV‘&Š“(SU‡ÄCQŌdå€!3źO|ׇk¾'I7C9ŲåSӊ©G ķŠęmµ _4¼s¬6Ÿ½TSM–īżnD‰¼ŲĻÖ¦ŻĘĶ•­Ž©ö;²Ąm?0éVoōhüiĮ$قދõ­c¾­įŌš©[›IšxÜuC÷Ozņ=_Vׯļ‹A¢jŖß6ōĀŗö9«±]O§|+ŻhÖ0M”Åk ‰O˜£žzŸĒłWO+\ĀœčC}Ģä`Rg7®i—zL`Ķ6õ—ę ¤ė\±4V«$FU;‹g“Xɾ‡+/Œ4=e“·Vé|z!` Ā»m óOÕķDžlŸjb ąeqļXŹ„„ć„β8ļ­ä‰VŲµŗ‘ędńŠļWÅZJéojÖ”n°ć}Ē֚W!Ņ8ŪĻų[LU¾¾dµ)ƒjģ>)šŸŠŅÉ“Y!(ĆcÓ>½kf/fY“F°¶‘bpHʜƒ[ِĖī™I|¹ŖH™£źŹ]3d·-¾Ż²Ź1ӚӇR}] U@ĪsӌUžsāYķā’8ä·(Ū°~µĶǬ­­»Ś¼‰nv’"³”]Ąlw(­qwq¾Ü~l*•·‰t!{ yoĮ?»Wp¹śVq¦W+=oL¹·ņö\ķøē;ä~•¼ę+ø µĖCń‚)“£Ī58®Öf6ž~[z¹I/ļ4ūæ6ܼrą®s޼b‘|ēKjćP¶ĻXLŠø/LŌ¶“¶„et8ÜGQb%&QæÕf77†å—Z>:©¦Ü\_\I4Øcøs’pšķJP&2,Ż[ŗĢęXŁN{× ¬›‹›Ø­"X—Æ5”£cXČŻ¹Ņ#t “q÷H+”Żv·„(„ œō4ąµ+˜t÷Q­Ć:³<@c”>µgCńeżæ”āß ŒīĻ­¬g’o½Ķń€ŲN2rŒVV¬o'»·ņKĮČÉ= ȉĖą©m`žŻ®ēG‘Wi W®j:–žÖĶ–sBBRgņEŖź7Ńż¢Ņ٤]F&Św®g¾GsT/üE©Éįi“Ø-ą¾ódU)"ä^Ÿį^Ż3†0=ļįߍõ_\čœĀHó<}qé^ļń3āU¦©e{ā?³²pćGÜI­ģϟ/¼A‹ c¦‰$ Ł`Ü„q1xP·Õ¬ī-­žVóW*HAß?…ømų\Ńķ® —S²†–- Ę6€Eo|3¶ń‰|u­Łė·±Żé"Q5˜PĖCĘĻsĘ™2¹5=įž•į™.µÆčö²ƒ·Ės£ĒŽ•šļÄ}HŃuŸ‰kģł™.­øRƒ¢ūžŸs¹Ų™6pļńNńßĆmB-3V»Óµ…@eĮ”g{wŖ_ næ·ō£j!dHĆ@DŖqĘFOÆÖš} ®sŽ<Ņ“Ļ ¤šā&U+'!GōƲų·m~÷žńFa5Œsiq•Žp z~5qģn6‡Ć²ų¾ēQxŪE` }Õ°r?ś7ĮśÕĪžėuoj“ÜĘ؊99Yõ­c±·)õļŽuĻŻ’hŪAo`bEĖ;óŪÓjÖwÖś\·SĒŅD7Ū‚Äz fLóVńĢvŠhshi×̧÷¾Ję@NsķéZž ²ÖōOé«„ĘŖ·±ŗI'zņüĻéV£©7ÖĒ'āŁ'ā^…ā‹{ĒWv·Ń\Ī·Vė1AĪdż3_jųKK×ōxl.-#ž+…·ĄP„nĄėŸ¦kTō±NW<‡\ųŸāU51į–Õć‘Õn1ĆuOņÆ·ń%毪h¾Õ-~Ósq#F"rŽķĒjvCäģ}Żą/…Z—ö?ųH-m#TU‘²ƒpī?˜ÆŅ3PųA¦iŻM„ŻŚEh¦‹*Ģ{‚:g9¬¦#ĆüIq„\jw_ؐE„O¾4 ”ČVćóÆŹohš ~$Ō#™bkŌ™Õ[hy鶊Ē[‡1™įK:óT†Ņßnō—gŽ•čŗåČŌķ&¹*ķEöŖ竘³ÆČÖ²Cpˆ@<ćņÆR?µ½#ĀséŽ#ūš£h IĄēźh4V7|%sØ]lšįe‚Yy(͐„jųÕg¶šĪæt·‰ ŚÅ˜ćpOĢ=(e9Xāžéś’µŪ [Ćq§Ļ'’Ļå[2{׌~ żš|?ØK>°šĒoŖ[neb>b9ÅEDB­Ųōéž ųÓHŅ“ŸĖØ¢i1É$ry@ä’wpĻ?|‘ń\”j-„®ļUĮ‰¶|Ā6€ŽœV.] #Rģä>x[Ćž1ńž”¦ų²ö{ ;8ʲ!_1Hžž÷Zł×öƒų©ü8ų}¢x_W2č—?hÓ„³ū¦䶌ÖіȮżØ>ų SŃmlSÄ®$Õ|øĀ±IӒkō›ĮŃźw޾Ńō[kķ;|É–č¤œćØąU˜½ĻEŠ|a©ė o4ßہØLByIœĀĄžF+ŒŃ~ėAåž–ÓYn!š3Į³ųVŒ›Ōā¼Mäx īĶåäv–ˆĆå•Ā„ĄL×Ęß“?Åųj]'ÄZMą‚ĪīS–3†!GEķŚ°[›B'Gš›ā÷ˆ¼_¤čwŗĢŚķŌ©Sč ä÷ēƒT>$|Pų“įŸ‰:GˆtFWš¢(†ā(\’ŽN72śtżkNØŚÖŠłŸć’…µļ x—Mų€óÜkžæ"y"š3˜ĆtR»‘ŠųĻÅÖ2¾£y{ ”¶[™SEŒOŹ“¦ŅŠŹGinå]£‹…8ūøÅjŚX3(™›@#”Šźƒ3µĻ±>|LDņō bī9•Oļdn;Šū~-—v—ŠÜÅwo'Ģd7­hg8õ,“ŖČćÓė\<g㯠ź>½Š0²©xdTY@ąg¶k-H†‡åž„”źÕ/t½F-.m&0²ŗąœwÕŁčzĢÖnmŻB4oœ}½#¾Œģ}£ć[¾;|Ņüi¦$W^'Ņ•ęÆ-“.GSŽæTąƒ’·E灼Ysū'|Aæ»’„c]žDŃ&œ~īŽåG1Ʀā8¢”%kÅu:鏟Ēõ«čóŁź,·1lŸŠØÆ¦žųŗŽMūķŹNŒ|¦=Ē„s5 „ 5Ķ+>+šÖ¶VDū-Ūł„GBźQŠö †ż+ų’‚ĆžŹ¶³/ķæć[=Īā/‡~?ˆųŸIP€¤7ŽĒķĄ0sŽĆoÖ¹ž’‹^kšæčrĪ'៌|?6xŹw˜™ĖW±ķ^rßė$\Pp1ė]ōĪ ”õ",ąœ\tō«QÅęĪA~žÕ§Kā4;KméžĆµ9¦·hÖ0›qĒJF‘—F9X–B™ÆR{Õš`}­ƒ“F)›Įō%YPŹL`ķĪ9«óŪŪj“é—Ŗ—Ģ0ĮĘWüō¢ĒU9Ł/ü³ūqj~ų—ö-ńåģüBšIūW‡nšņĮ›!<ås·Óę^›s_ŅĶå¼2ŪĆŖ&>Ķ0łžī+ž²:c+œ&«ao} Ō±†p ÄŲū­ķ_žŠžŗ›AŅ>#ivöŠk:@:~¹ ¦īŃņ¾åqƒžĆŽø$µ(üĪųŪšyüįM[Ā×ä]jv–ļ}£Ŗœł°°Ż"(īpsŽŲ5ü”~Š’ ƾxēQL:č7—Lš†S˜ŸųÜÖŌ¤¶!Ó[ $nJŖĄėÅPXćÜmłˆīkŗ,å”lFöäē'„VXŽ=»šŒœÕFfp›AĻZWĢĀ•+ƒž;Šķx”· õ©ŚA+«HJČNJI”Ē|ŒX’0pÜuü*ō/0E#<Ś™½>Ǧ|"ų™­üų”įOŒ¾–A©hÓ-Ċ­µ„„:žīOŌ ’EŸŲö£šĻĒ߂> ųÕbńźZšéqĆŖl½Ż“żÖ8ūŪIärrjd“;©Ęźēß>“µŃī#šõ”2xvåMīœéü NJ{ŸóŠčuæ¬ŗ¦¹oˆī#% rėļ\bhā|óū[~Ļžż«~x׹gŠ-­ÓQ¼¶7zć&M–”/ ØqC uVaŽæĶ[ćOĆ|ų›āMĘ6č­–£ueuk:m’ •ČdaӁA®pQ<×YÓ,ꎦęÖBģ@2.Īśę·| ŅGؤ؎ņFŁČōö¬ē¹ Yź}ÓąŸi“ǤÜ%ÄŒ‘nŒ…;Yŗ}īŸ…yÅ…ńõī³qZ_² Ė* Žī^õ¬Ó+•'Āøū?˜×7P\:7˵J‚;śWč_ĄĶj-_A²³šFmOO‰#m­ø•Éå»ē‘]Ōėßr'é˜#ži×ĖVfn9ō®Ę (b $Œ†k¢2¹Ļ(Ųęx;QÕä°»}NIo$leŠt'źkģéžxČhZŽ£įżZĪŻ§ÓŽ)ž4lrS ˆ WēŲģRu]Õ²| TQŹų‡öŽo¾Ņõ=cJķŪȖri—mšEč[spŲÉü«°ų_ń;Fų‹§j>9šWƒē‚śÄ±¼‰å㔯R1ž™Æ>5Ū>¶%Ī?~Ī~-ų˜Ž>×|qįķZÖ{§ø—EŽbø“sˇŌōõƎ<ń§āĄOą®»„é[ ­ļĮDZ<0¢rOs¾ŅČżš&µįĻiśo‰l5 <ʜK“ē#’=0q_ ~Ó¼OąmE|G¤[Sį~©1š ‹>$Ó®d†ī9ę¹›Šw:a&zÆĆßŪoǾų=}š·]ņüU£ĀźRw„Ņ ķ’pHÅ~ŗ~Ģ_ōß~Ļś_Y“ģ–·2A$sœÉ`7Ō÷Æ>Q‰£Ųųėö¦š_ˆ~!|PšĒĒļźP^kzpū ֑'x1÷£=+ķo€æµŒæ f-CąōŸ­Ē‹/ęøig»Ię ąä€OéZań„>fÆ’ ןaV“’±ĆųÖ]źDžŌ-ļl®ģ’y×M¬ż3ėĪyōÅu’~(jß n¼oąæYŁų“᾿ ‚āŹQóE#.ÖŚza‡Q^]W‹TŁĪŁųŸ[šĪ›¤ųZ-V[ļ Ł],ķēłŗē„ ×ćńwķEškJŗ¹ųJķSM»C9·U’k¾G ö®E OģĆūB^ æ]|;ńF Ä25»4Ś1cˆĪ’^½sĒž*–Ż£ŅuŪ¶Ņ­ĶĮłœażĀŗiŠ4ē.ųwTųką}cM7ŗ„ާ¢Ģ7K2æĪ€÷=G„vZķąĶ.åķžGŖk—°ä„Ģ?)ŒŸį<ćņ®øŅ0”Ķń·³ĆŖy¾\-ic+ó×ük8~Š~Óe“†ć\šŽŪķSķ…Ž9źjÕ#'3¬Šž$XųĘ\C”Ųjžµø $•1öØĻ\žEx/Ę»MDų‹}6…owįż2šyöžL…Ō^µ”é#¢”ś3—ÓüyńÜĆii®ŁjČ0†HČu>äg?ÆlŅ>8|Cm>ŚĻÅ:.‹Ŗ¤r“Ū JŽ£ńė\3§ŲźQģ}E¤ü^šeīvŗ†®šźkm¶äĢ ·€=¾µłĆńĻĮQų«Ćŗ†²ˆ–:Ž›x5:pøÉVū<~µ’¦T®z÷ĆÜ|S ėW“[Isnb¶›sżŁķĆwķÖ¾ÄńŸżŸjžÖō›O;p” ķqƒÜt«I˜Ź§CiPź:Y²G[)¢}É&9#Š’žõĖxŸKÕ5Y¼7kÅ Ł_8& !$Ŗw®cų«Ā‹°¹2”ŗ* W1’®¬:}A®›Ćž*Õ|g¦j: FÖļbE‚{‹ƒ¾EĄź÷āŖ4٤qą¼Sš'PŃü5q®č³ /­ŪĶ0«ȹÉ$×øüŠo¾"µŻ„ŚśŚMk„żŖĶä9óå˜$ńÅuŅ£ØŽ šß‰^ ’Oü3šĪÆpŃhŚ–æm§]˶ēƹ?•~š~ܟ|£~É?>Üi:UÖŖÖč²Ą–7Ų¤>īÄņ:ōÆcJĒE:ķŹ]Z?œ’:o‹žų;Qšö£®ÜK ŠPmԐŠėł×Š’ō)ļ/›Q½;FS#ƽzTÕō?£²Œ¢4#u¹ą_¼h·ZćÅ$č!‡÷i·ŪŠVgĮŸŁ3ö„ż¤`ń>æš÷ĀĮįķ52.õmšGvżqĒ'€®˜AŸ”a1t°Ō9¦ģ‘‰ūH~Ēæ¾ü#²ųŁ3čZ–™„ĶÕģ-$i%“˜)“pąą‘Ē”«_³wĘėĶfk5M6ī ·å³ę&0Ų÷®Ŗq³Ōõ°ł•:«Ż;ü]Ót/³–y,ą‘ƒ¬ ¹-Üż+÷Å^Óµ_xW\°Ky4ŪŪu•^3‘Ÿ­zųfŗšŗŗžo¦hZ†›x_Nżé`Uć#"D#•Ē~+šöƒšõ憞-|XšU’i÷1ŻiCM¼¹ÉŚ:@üėz­rÜJņvGŃ’°÷ķ”'Į}}¼ ā9Ž_]ō‘žil&<Až•śo/Ž4ūƈ6‹<Ś~æ ŻĄnmęæw"°8éŠóÓŲÖGE*õĪsĘ’>xņÓÄ>;Ólg³ko¶ÄvĖfųŹø#®6×ä„>æ°µ¹Š ‹Ę“žKhnŹf[ Äzqćpé+£čšU&Œ ų–ŹāĻNfŽ·ĪŅēļŚ¢Óļµ$­šßyž"Jš*ĀĢś|5fÖ§1®ŪK6¢’Å#żąH>µŠ[]ĶoqI/8ö¬‘ŁĪĖGQŒBav@ʦ³»Lcē©ķ@9t+x‚HÄI­ynģ“G„ zAĮż+Ģü āČLzŹ¦Qå‰nT‚3ŸÖŗ`ŸÅÕ³±ś‹ń«Į’jÓ~kÖwVŗFŖi>I—T—gOŌ~uł{ą½KT²¾¹“ŗŗ¼¹¹†ņHŽVlƐ=Ēē]t‘įāźõ?W?foŲŚż·FÕ)!¼^¤üŃ7f~‘x_Ź]2ŽŲ”–2¤rÆ[ +›qŸÅĢŗŲ—\Š ¾Hg“šK-N[ĶĆDąäGҾōųūiŚ^hßš§i>ÓSÓ.£:rźrĒęCu ž]Źž ƒ×Ó=xėĘ¢?žĀzsW‘ļ? æj/ŚGöwŗųKĘ·š† }>ķLš:(Ę œķćøé_¶ß³ÆüÆį?Åū­#ĀŽ=³›įwŽ®‚¤ItI³»s’<å?w<`7ÆZō)V}OęO|£™Š–o•F؈«Ź+ķ„éö—NėNĒ«’Į@|§|@żž/Ų\Ä.žĶ§®©j@ ±0`ĆŌ`·ē_Éw†ā‚]&óĀŗ“ ^ŻvőĊy~ō­*=Iś!ÕēŹqxFµ…E/ü )ķ§ėŸģūkZ·ƒ£ż’~-ų«ž“M懵•l3[³ōw=¹nĀæb¾ü1ńĆ_ź+ić·ńGƒoōՕ ˜eÕĮłdWŒ}ļ^ęŗi;Ÿ‹ż!x2Y6uV¬#ū¬MꟛwšõRÖŚŚ2‰õõ5ųU’ų3į’ŁŪć—ĆŪ[Ćßmńu¾™«v4«Łµ»a”f?ĀžœŽæZņq1Ōž“ś1qĘpāĀKćĆÉĒ}āżčæ-ÜRžéķ¾-ŽõtķOįßÄKt×Ābp«ƒÖŗŪo_ź+yj$‰ĀD¢<.1ŠŅž‡ĢcfłĻ¤g?‹Ņ|?ń’‡uy%óģ]Ö ÅĻŹØO$ƒĒsł×ļ5¾§gā½+Ķź-[Go…Ą³Ž†»©½{¦|õ­jI„k·w¶Ķ§Ü3ŖÜĒ„kÅsöƒ7š·CZa›R'6öŁąDRAā¾FųÓ©ÅįŸ†ß~Ņ<‹†Ó##łĪ@5ĶVLū»V‘ųÅš’ęŁ4жŅ#ĄŲ‘r23ž˜ų'9üź]MŹxtä¹ž0”äžµóļķįÆėž’ĒĆŚT:ƒJ¤’’a÷ńĮ…uaįvŒńM.™WqļŽ’ŚqhĘ PJøąš£‰ītn¢„…«yhŪ§<(„:åTw9Ė·vזVjb/(=æŗ+’¾–y|ĄĄÅlg)"½pfŽPĖėči‚+Gs:™~ī0}k/fa'”…vāO.H@Qߟ%āé/ēNå-²}>µŖ0k”ėžÖbū4%äo(®Cvę„Ō¦†VZ¾ā'#Šv1<ēY»¹øŸhqŒó^wŖÅro–ęl@?7ćHG¢č¾¬cžśIRå\2 ŲµØÜZµ«[ŹĒ×¾iĢéó¤LŽ\›”psĶvmām-ląŅš [ĢĖÜoČa鶋Īéļż©xæh–ßĘ/¼žĶ ļĘŖH^xØp"}O Ł}¶/7h—!½gųžÖ’N°˜G#L0OĖŚØÅČó+ (ÜY4Ķ ‰±–ŻÖµ4¤ŗdX„ÕN~eƚWÓĮi˜Ś)2BœGJĄ¹³xÆć¹x”ąc×Ö¶Hv:X¬Ģøø·Sę.H*z}kįæŪų‡GŃį{h.“xē10ęŸsČ­\ģ“7Œz#ą(ü44k>ŠCqmœ”U!p;Ws.Œ­å«ĘYBē'šē”Ē(³2;CiuƒĢŽ`)ķF§ćR÷P}5ķ `gtxW÷ŻÜÖJ]9•ą–āć"F\d÷ū£Ö²nīć˜ČZF€})™šM“ł’cņÆ źkVŚ}(ßĆ \¼!xäšOÓ½+ź—ŃČä p< ęwšĢfxė÷«9” ¼+FFżēMøę› cµ™Ōą:V`j¶ŲĄVćœµœŃFņAåó錱p`DÅ9Ėe½*“Gæ*AĻÖ¤ömWHØĶŗ–ŽM…Ł}:ÓL ‰•Į*³dŠź%EŽÅsŌ÷¤—Wb?•S'ĪÉ⟳¤‘}Ž;§÷?wéRą4Žvī-oÄ~m½Ž™©Č[Z‹*ŸL×øų#į]ü²i÷:•µåŒ $||W*²‚²;)@ś{Ć^ ŅmZEµÉe-CJõķ.ŹIlćŠ;ܓóz„|®#Ū²=ZpīMsge”E<°C”ģr’.2Hļ^i«xāÓA¶šöņKvP¤łŠĆ#ڱ„MÉܹ;ž~Ņæ¶ŒęšĒĮ :xI[ɽÖļr–Ö…ø.¬~ń?(ÉÆÜ€šOļŁö;›Fń7Ä;™><|{XR0Ó§Ś#·—=b‹ #''ŽÕėR„c Ō¶‡éŻæ‡¼KāĶę’āréŚĆ颒G±ŽQ†"0ANĒ§įŽø«‹Ż:-?Įß|3u£ZJ›"Õ# Ŗq–|óėś×}83žr=wį÷Į{ļ ^K'ŒuķGž#— ŽhH$d;×®ßiI¤@·Sųt»[dfūL¤ŸN ņ¼aÜÄѳų‡7‰ō Oģóovˆ„aø ÷@ĻۊŒk6ŚĀŚŅL:œHVr$ܓü@v­v-Į7~“µƒUy师Guk4x1± „uƾšŗŁĆ¢ésÜhj§3)%bpzśÖńDņ÷8msǚ?†5 &K†:€l'!M|ėńKćļ…|9 š’¾#ŲxsJLń#²šrGšń]T©”~~ÕæšTßųŠĒZšģż%¶Ÿ¢ŹM¼ŗŠVŽIœ:žęæ « ŽŚ>@&%<悱­W•TØw?Ø_ŁWž ;ū+~Ć:u¾½ń>4ųļńšsöˆŽś˜[I·ęX¢ä"ē¾ éŅæ@õYųĻįÖ­eā=V_ƒZDm¼©å吭ķŠuéšóŖTźĪčÓīxę‡āßźśt:OĆĶĆS„~ģė‹)IzcŠō®LŃžų.©ćĖ÷ńŒ®„ņÖ‰CDw^Ÿ€¬¹ĪˆÄę¼auØiķo¶§MŠē_:ѾUSč°Æ–Ę®ßõ-CUšźÜŽCu99%U›‚{…ÖU$tS<ćć…o|yįÖhwŽjēī!>‡<Ī©|#·ń-Ž„–>"²Kµs+±QĒ?•yéĖŚ©#uSݱź×>.³‚‹]/Jūmįä©ĆG÷sұ—[ŗ)ŗĀŹb “n§;Iģ1Ö»éźr½Ķ›M}f×ūJeEŃęi¤*:}ė€ų™ūAü9ųg§Üi^ HuĶ}T)iö°\šXZź%¾<ųæāŸj÷’źZåŌØŃģ†ß*Sļ^Q¢xoUńNÆ’Õ¤*Ćc8ēұKhj„d}OįOŚ=”örų„MÄM2ČŃFFTҾʱš†#X|?df?—`kŸ™T©sŅ|/e•y:ęŸ3#!)‘ž@ćšō-)巗Č1Ļm# p޶L攟SgV°øÓe‚D–ŽUpUŲ×§ü9ŽĶę–)’&aøłœkr æ]éĖi”‚ŪņŒg޼vŹÖ jSwfŠNzåGQ@\óOˆQéŠĪZŃQ®b9ŚÕĘĀM©\Ū„“j#ČMGrœ ;G#M,i. żįĘO„|­ńā„4żRęĖZÖįŅį^$mąķ?:#Lą¼ńCĀ^!×äŠ4IęDm‹3gkŸ­{“mJĀ ŚjŃmø$‡ęŒƒŌū\Ö ^Õ¬“ō–-rćŹø@B¾A ĆŌ×Sk­5Ļ,K ćåqÖ®31”z”µ·•·‚ņĪį!™]—†ŗ» ”–Å­1ol Ą P? |솬kŁjĒO…ķH/hXøūøō?CØjĶ ’ŻŽ÷»QĪÄyĻŒÆµ }>źķüł-c]Ćjü«ĒtżWūNč• KÓ“o„¾ńŪĶ^·å€”ōQƒŌżk Šü'cį¹Ņ =×åķ;k)Å)-ŽżoÄ6’A2‰†9ƽqŅŚČ&²°<ż}Ŗ£™ęŽ>ųaā/[Ei£Ź4©Œ·ØČ8õÆ7‚ßĞh“›·ŽĖVP~xĪCüCėé[%a³Ņ¼«ų¦ –mNńļ-˜ą ¼©=OҾ‚Ņ4ŻGV¹ŒXÉr)ÜŏG­Rg,Ń·āæ j-„Ś]E4L„'óćń¬];GMĪMI£. ąœšĒŚ©§ŖŚŽ¤ūķW`$+ƹ»Ÿ ŲĻ„IxšŒIpyX±ĻųPiMu83£Ž˜…Ó !$ēpź=+Ī|IšŌj7öZ“Ļ1I½<µĮĄ>¾œV-ės§‘õ OŸaiW!ĀŽ¤œ×oo}qąČg›Ėœü ē½y¦§ē3Īցn–2WpĶdŃ&v‹ØŪĮŸ·Bģ°@ķō®Ž{-:õd’XŒżž”X\Ēqg¬ågpÜćź>•·m¤iŃŲhÄ m„:⣟QœüVowØ­Óvzī%šbC£MØFÖGR ›-ų Šdx¼~b²ö=*Õõōw/öwŒīŽ‹ˆžct_ źž,ńčšĻöµ­®”u?ĶŗA’}ˆžuķ:ßĆ%šo¦ź »PKGĪį?Пνä¬B²<ūÄvz”Ō®!’4„«²©Ė&yĒ=wī„ńo‡58Ē o@Xgr‚FS&REk_Ųhߌ:ļj]³4lŸ+}x®ŸO»Öbt³‚ĢÜŪĖ6Ńņ’œPdäŗ–|I®źŗMØžĻ·_µnłŃĒQĶsOķ­ų}7VŌ“‰<ÖøUr§!F{zŌH6='ǟtƋVŚõ¾»©i÷n“…ŠFÄūf±>"x‹Oš×Įķ#ĮŠ_ČÕł•āŸj—_> ޵ŒérܳYĘNX õ…fޤć];[š^öż4Dŗ²Éņ#Ļ$śuØ4’Šž(šī™nš6Z¤jŠŻĖ8võ¢#Rčtß~j’·†›öˆļ”B¬7|ŹG~>µļz'ƒ<)įļ k³¦Įs|‘VW%аōĻćžE1“s¹ŅµTY¤æŠĮGł™Ϧ+wÄŗ%Ÿ‰¼-«iĖ}²ūzYļŽwsłRnĘsNĒ|)oxāw…¼¦Ų_Gc5ן%Öp‘·©>ęæQo~"xcሸ]Jī .˜,ł\ó×ņ¬jĖEbówŒ?n÷ŠdÓ¼=–Ÿ/†u)²× Ć1}sŠZć¾>x³Ą:‚ÄZ5Ī“ró8’'ŽCcųˆćƵgŹŽ¦ÉŲė~jzWÄÆ…³ųóUŽĖJŽk˜6Ä `ޤōƖž$„Önģ¼Aa©-Ż„4RyöĮü?C[r4Ķ£PƒOų¹ć2lō«±qäįbW㯫~üUń=­ąžiŒW»N1ł‹·QøœĻ}¶ų”y£³¼ÓZ4Iå° :×5ķZgĒĒń/ˆįŠ|- /ŁŃ1u°ļņĪ?Z‰Ć£2*|GŠ<-ń*ŚM'^Ö³HŖ Ī0Æ#?Jü‰ųĖ%×ü&Wŗ·¹¹³“ Ė.~P§ ’ėW/±¶Ęš›Ųś#öpšÅŸ‰ąm:ŽD‚ęĆĖ'-‚܁Ö¾«ńÆģźŚ=üŽ"Óµ}:ę ™Ō,Ü Ü/åžEccNq¾ š&›ńįĪ­„jövSŚYıƤЮqłz×äOĘ’…ÖžńDžŃÆŸWø ęÄb>fь•8śŌĮź+Ÿ;gŚĶgs¹X®įČeĘ ņ1ėY׌fµ¢YŁŽßé—ie3G1>µ× qMrŠŻ<¢y"pßysҾ±ųAńęóĆz3x{TH.-O3Īc½‘9éżß„u3īP“Õ,mē“c-“Ŗ[#œ’ZźI’Ś$hwķŚ{ŌŌ‰‘ņķšāśā×Kń>žĖw*¼†ź(W20ĮĆ߅|†¶“YmóŒŽnyō‰½;ŸQžĢæģ|5āóįė©6Łź“’a€ĘõéZ-ŌSßÕMuak)ĮMlÕžó–¬ ĻmĀ1ł>“äŁl1'ė]G   Ą w2Ģ<²}sN’ Ķ»bģčĢ{}(ˆÄā$LĘ8’ėӛĖfNX ćé@Ńf9CļE øū¢®Ć>Ü„H<ńAÓč_٧ćwŠ’eŚ#įoķ1ąĻ4_hWČŚ„ŗÜ˜Eķ‡IP‘ź¤Š’L’¼ńļįw‚>)xJõuxŖĘRŅe`D2ŗhŪ€rzv9eSTvEhz«„ĀØŃ#Ɵ$Q^1ń+¶zöŸ4·¤&ögxš§Ż×Ž¼łīi©łĮ¬ųE<+©ė>×näOh1ż«D½F.ķ[„‡=ųõÆĀ’ų(ßģƤųA°ńw†"–hn•ļm¹Ē—r¹Ź#'ņ51va%©üčĒ©mö» fٔԠ‘¢˜*ńø’U1£,ø+·¢½3’Ŗ±REx“ūär;UVW( 8ÜOn¶9„+“dMт ÷4²H"`Š  ł˜€–]®Ä©éQF“4ŹŽŹBē'c@oĻŽźyć­L¬]øčqÅE9]–¬ŪqžŚxc’ŃĮFå×ļOüÓöԃą—Ä;O€Ž.Ōu%šqiVÉ%mŃKœI°'pŅ“Ųō)3ūiųg{$Ś>„ A©}ŗ+ ¾Ū£Ķø3Kf’0\ō8tō5ķÉŖĶ©išOhƒ“9C\•V†ęX“Aµ–`/`OnHĪFs_Źü5ū Į¤ßč¶WĆķņēJÕę‹Ońm¤K˜mļB‚ķ‡šļU(ǁ¹GvēŒ‡3łqšäBęYb»ŠųŁ"p ]‰®¼'®[]ŲĄˆ²“ŽƒŪõ¬ęŒ™õGĮ =oĘž"²šå„ :Üļ›p¼źŁģz±āĻĖį/ˆ>+ųoć›Ė ³>VįYx`H㨮[j4ģy»įØ®!ŽņŃ^2Ažjó’x‡Tų}­C«ZĢėb²ęā%3ÆOŠs]4ĮŸ©ŃųĻKÕH½ŅaH-ZŽ/˜dīły'ß9…zNŽ"¾bŅ0ū¼ąō®śFÜęu{{ҊĶ&ӌēŠč“™“m:(¬.$O“2śó“[rŗ¬anœ¢…^ONE[Ó!€3¶ōĻÆ9Ŗ`nŬ«IĀĘé»8ü+gS‘§µeJ>oz8m[R:|[m<£Nx®3MŌõs4Oq+Ä_+žĆŅ®#Lī“õšqr]8IūµŽ.˜ļnDk¼Jā8æŪ\¬m%XöœW™¦œė8Ž2Ź™9 w¤Wi~4­ŖX+&8®āKłµČāŚc>eĻŽ eĒ,3Ķs‚xäĪHūĆ5ė^,¹]JĘ8ō÷ß;ŽØqƒļHvg‹ZÅāk6^£KÜn8Ö“tõ½¹¢x‰oj®Vj¼Ź×óζ÷!co5hĻ€šó˜ķ¦·Ź@uÅ=PĖgm£Ēc2yA¹r0ŗ…Ń”}6HĆ+`äq¶œdŪ6‚ŠĄÖ¼?qŖ Y\’Ą^½k؂Åb±Dp’JS 1ķÖ®ę°9Ż6Ņ4¼ łĖ“ru76ŸŁģ²FT;۟ƦR±£:½- ž?ß,l gé\EÉŅΧsūď Ę+!˜ž"’ŖŪ 6Y˜”\œē +vŽūP’&·•‹FĆ“C4¦Škmó¶åöēŅŗ+ÅĻ”$0Ų^l+'Ī™ĒœŃÓ£ øńTz‚`‡äž¢øNŅŁ“ «+rp+2”R9O²v`ĶøœškPF’g>JyÓʦ@¾øž•ƒ:)JĒę'‰ »ńgŽų#«Ükš7šÆ‡z#õ^łÖ¾°š/ĘO ų÷Ć6šEég°i³-“˜-Øe=ų®IUg\Yé7?³·ĀjƒQšēƒōöcóždo¾§©eõÆ]Ņ>ü<Ó~ų‹J°Öõo j¶r‹ƒl.·Ō£žīўFOæįČä©Y£xDó]CĒš‰%²YŽ-ģ•Ā·!±Ų÷5ÉjumCW—Q—C³ƒ `Ę’/°y®W_£:ćI½…š§Ęū§ŌaÖtmA#ßū²½Wž£ÆÜ謵”ØYf°æ³›}晅óĘ3Œ’œQ‰„°ģ÷ļˆ^(š&§ąß ų·Āś„Äģ#½±˜Š8,§ŗäšć4ѧxÆD—GÕŁ…³¹!£<ØĮĒō­éœÓ‹GÄśļĀķ#ą?Ę}ā.»sw& ­/ä|Å2vų~5÷~„/ĮŸŚL²×“MB’&’,:ÄÄs‘Ö»éÄå©;6xƒöf²šī¤e]V{ͱڮՓŲć­sځ<- Ö ·š-¤—nžb3 į‰ä✢‘“®ĻEŅ<7ak+“q¬ ’tt®‡Ę’|ńAŅgæy¬üI„+½³ÆŻ¹üé’Ö®*¦Ōė$Ü|8ø‚[Ūė ®-.ĖÜČ2 Ž8Ēҧšü'¼ŗ‡I¹Ņü›¤`Ļ,`ģ+ž ‘׌ø§K±ßKcŽōß ŲnŠāH·Ģ„˜dƒ\ķ%yg«ü:›ĀvĀßJ¾*&‚xN×vįæĻJŹ0īv*©Ÿ|ń/‰|5āmV ™ü÷œ”i Ų+ė]_āļĒ/ė-ēˆ!ŁA²š&ÓåѽłĪkXÓ3Ø×sź ų¶ę(­"ŗigŽL˜dŠō„ÕlŽćö…ßżĀ9Ʊ8jNÅS%ķ³Y]Cö…vĄĻl×i”hŗ'…äŠ-.Å-šly„(;›ŌÖŹŽhÖw*üLšā–JŁŹ”˜Ž= |¹-ʧgw‡†uYl“¶cer­<ć[ҧ®‡us¾Ó~Ū‹ ųŹņķŗ‹SÓÆL…dµ•ńówäõž•”ūFžŃž,ńäV~Õg‚äŪ[ f‘F7Øī}ėŲĆÓ±ö\/”żg ­¹ńī…£&½ØĘ’(xU“Ž1^é©"hśeĄÓ-Cø„„ŽIĒjōØRŠž…uķż‹?ą›^4ųĖÆ’ĀĻųͧ[i¾†čŻĒŽ|™ČP;ž°Æsż ’l}SįĶē‹>ü Ņt­Nˆ6žÓĒ"¬ÉާłWliY\ńŸ\Å<,uPI³Äægƌ^Õr@qŸfk^'ųK4ļŌ­īgDW(dkt&@™Vēd0iÓĄŹnŃGÄTīŸa؛y!žt¾m»…uE[C展•ģ~įüUŅ®o?c[i,T_É¢ĖÜeNć`żÜ×ćv­uöÅuļök” QOŹHē'ߎŗ)½uY5£ģĻ襞šˆ~7‡|!āüOšėTÓ^ŅÖføūNŪy#)€ķÉĄnČļ_ÅĒÆx«ą—ÅOxÅi6ā’źŅYȹŲ%²Żŗ)‡b¬…H"г²ŗ?ś*c'‡ĻóÆ­Q®f¼į'ųČčÆō+xoCų‡¤¹qxų0ȧ9ĻæZżż—?ą„ž:ųŃ~%xV_Š~tX¢ŗµ˜%ķŖÆ@7pWŌ{ (ā,ŃżM⧆xn&ʧ€©hŌZĀVÖ/üšŃżū¤~¾|2’‚”žĖ_ŪN¶ŗńuρ5iĄĢĢ^JĒ!ž&H'ōÆUż®.4O~ʟĪéņčŲŪJ²£ĖŒ£«.FQ¶æį^Œ+&šY·…×fŌ>µ %8µ%¬t’ü»ŹgģÓƌž&Śč—Ž:“š?ˆŸO+a=ä Ū]]”’S#qŒõõąõ|™qĀ.AĮčqķ\µØč~Gą‡į²ž/Ƅ ķ†Å?wei^ń^[Ź -ļž‰«Ėń#įםzŃ\j:pļ|ǃ·w­3ĆCĮšē‡µß†ß“ųu__ĘUć‘h&ĘD=A¢¼Ś”ģīvb`ķ(£ņ_ÅZ·Ćæk fœšdS²éww1[øIł@cĮ ęu-SZš¦£,-b‹:œ¦ć‘"Ćҹ„”ņųØJꟆü]9ŌX x>mĶ5śõū.~Š×¾]:-ZįbŅÕBžń¾Sž Šč§#Ķö¦•„}ā 2ćT{s i0įJ®×Ģāk¶ĻB#oLÓng&‚ŁpĪrGµhk~7šē£‚}_R†Ž)IMØ7Ū°"¹)RęgJVŠńk┿uįiŚß‹üA4žTQiöĻ#<=»Wé‡ģ§’›¾ŌęŃž(žÖĮÓō“1ŽŚųNŁöČī@Ÿž}Ō{äŠõčŃIX¤ĻŪųBūĆžø¼¦|.šE›żŸ÷6Ā1)<*äœu­ū|7š,×ĆŽ>2ųtJėbŲœä`cæõ®źtŽ9O”Ńéæ ~#xŗļž/ŒŃ\čóøx4Øօ:Äsųcõ Ž ±‡ĆśvŸ£¬ZE¤0ĈМs]™ĒxƒZ»Ņ¢Ób[ ÆnA˜uŒsÉöé\oˆe„ÓēŌõŽibÄģ?xOaZņ’äIcØŁIf4ł,m4§|.ŅŁōüĶmiš]ī› j¶ĻysĮ[ÓõØP(Ēń‰ōū WkóĪ60kęß|bÕSķš_ö‹xwE O4Ū`@É#ßµtӀ?µüįē5ǵųK}'Œ¼X®ńĢ‘0I=8ÆĀ“?޾"źZާćnK¤•ŁžÉā4ė^…*dNV>cÖ x]ų‹ć$u°‹|6ˆN7M'D2•·;ØĒ¹ż~ĘšCoxOŅ~(žŽ^+Óu „e¼ƒĀńŹ|żŁ@’[Žõū\<įŪ}ėįæĄķŪį…--Ä6—æd,ŠL`cŽß™ēU—3»=G”å֟,|6ĘĒ@ŠdńļÄėPY"pā0q‚AČ œ}*­ē‡tX_ų›āēˆ&±’5óL „ž öćņśV‰¢‡rŸ…uØż’Ų>¹?Z‰ ;ųįš€¶Ōa™5}MFń+¾µåž ž÷ZŗøÕnģąÓšvó<øĘŠұqī;˜Z6©ź&+ 9Ņ1÷ē ĄĻcĘ:ųaš~Łn|AØZkZäq“‚2źQ²¶•oXLüąų—ūNk~5øæƒNŌgÓōĮü«FĘ’m½…xŲ&¶ąyŽŒņ9$³7_ÄńNR±šCŁōOš¾µ£K­Ų·‰y’@ģōÆOżŸ¾’iŽkPkZ’Yk÷ «”dŁŽ ø®I»‹Sģ[_„ö·f(®nŠ>I€Ćߌ½ŅĘ]lÓMÓćŠxŌ)ĮČļŠØÄ†^Ō.o5«ˆäŗh\ Ę=}Ŗ¶ø×VZ%Ķõ›¢Ļ –‡Ē„kČbن/Ƶ‹k;‹†i(Ō®6Jō½>ä£ņŁ”@­ErmRźĪę ׎¦>ąžkÉī|Ae§ŖŪé0Kk$nHdlJŃD—×ÖME^öi‘ŚNHĒ$׋jź]ĘśZŹĢ­œ”åjc—©‡ćgÅ-įėė«K{ūŻV8]¼˜Ó/1 ÆĘ3āUŒ¾%]iž>ÓßO½Šėž<§Œ‚ķŸā'«`b­S:bśhųzĖM²ófŠlą·FĖ*Ŗ=­wŚī½­é¾]gP[Ÿ²E*­×ŠĶĄ·įßÄ Æ^ß[j©e žDł_>•ō=¤sŪĮŁÉĮ9_cP£ŠĀ¢¶‡¤’ĀM©ėvZ}ž§r'ū:yq!Ą`iŠi—X„‰¹Lō¦‘…ś™¦ų*ęśĢŻł‘&Āy'é^aćkßI$S[’`cŅ1øyqńői—ŚMŽ‘§Ļ£F³Ķ†ŽF0q_-Ł^k¾–āMQEõŪĪŅȑt<ĻįUģĶc{ׄ<_«jF8¼¶²“š-Ė–åŠöÆn‚Żā¶ŽākŊVMČĒųń’×”£Š¦Ń˜š”–SÄ»{µu©ybö6‘‹DŠU<™Īź [7ōŻzĪĮ#Y\Hœća«ē«źzŁæ[eŽŲÉĘÜ|¢«•i©¹£źV–Į#ĘIĄ#Šōm#U™d‚Fxs· VŠ$”/¼ey;Él·?7=śUXo¼Q˜ŅIœŗqXÜģ7īÓę1¹8N0?ĘŗH,/¬4`±És>ģć{ŻZsŒ7TÖ`{”ø"ŲĀŽĀ®Ü\³ylƽĻoO­PęĻĮ¬< ń#Nų‰ØĒ<‹‘ķp œ ķÆ·¾5xŪĄ_ļ|7/…g5h¶ČżÉ\mzś ś)#Ģč×ēĪ@#ž”§kPŪL^Ń2±¹PuaĒ÷gƒu/ |AŃm¦i൚Ņ×lČŹÖQĒOSĢŠĶ9‘ć’<{gdÖS-“²Čæh…£ĘJž™Å|ēąŁ`Š|G–Ʀ\ŻX4‡‚ųÜO'>˜ØŒ®>sļ_„ņų\éćI՗eŠFŽHS€¹ėĻ\ń_/ųĆĮļąj×vzµĪ”§Ż°¹&9eϧ&­Źgc¦k^!×¼5Øų~ć]‡ģÄŠŽFڇއ0|Lń‘ńKĄ6zĪ•.›„Y•{Yš3‹¤n»I3XĄ©ńĒāmē‹<] ×;ŚF‘˜ŚŚ2Qx饹ūÖʍįō×4t×'ŸL‹n’‹ōŽ™^ĢÖšwƏ{ūCVūUõŅó›øõ+ė/ų¶ęĘéʝmup°”ĘÕ?2ć? %Ó9’üQų3ńߥś-„Ŗhž,³æ(b›™aPNI÷ČćŚ½ŸįīįMĒĆŗ„r\Ū,W%ų+ĄČ’ėŠL£c×¼kń'DöšØA¬HĄK,ń¶zŽӟņ+ɼ įh¤pKØĄ?OJŹQ%Äł+ā>œdÖļofˆŖ“æ0Eō”ż;WŌuƅ%M–Ѱ/!†*£Ø¹īw’ ž(ß|?ų{↗°¶J|¬¹R¹9Čģ{Ö,²\ŽZƤ[ÜŻZĤ1ušR=kB\5=§Ā^ qb/ŌܙD±åå›ŌŒńھ‰×¢_éÖZ•в¾ŠYxV'8üčl†ŠŗWĘmQӚėT[˜®”&CĖč?Ļ„yĻ‚~(x»Į_„¾Ö£Ó<3®9ó·1ūątœUGpGč½—‰cÖ“WyīD—c…ķ»ß5ńĘ ‰ügŖ,~“ˆjź~Ė#‘¼u÷ķRŃpgŅ’³WĆ?x3GŸYńšm§GTrŠp[y¾½kėOxžš&­ā84KR¾²…å›Čłņ£øP3YM~ų×yćżQ¼=į]M­£æf·ø ę6„ēaõ5Ā]~Ģ’<ń:Ūž ›­j;×i£ŽZœĻ~EG³ź;žeńsöm?{[‡eRŒ¹ œäwÆŹļˆ>£į{UÓµŠ(–å¾Īws2Zå4]ŽĪ]Iµ[KĶ2a ķ» Uż9č}~ŽźÓ]|nųUaŖEo>#ŃŌ%Ź™Cy‰· sėÅWCh¾§Ü?šEŸŚ’o€ß“’ĄoėwgįĒ‹`¶[‰6¤7=Lœ⿯=NŃō}UၙāČx_®ō<«~X¬Ŗ.§U§> ųšgi÷,ŪĪčč+мmÆ_h^MŽn³ŻÄ„Ń[īÉź¦¹äģ ÅWüö}’„_ö›Ō~2i¾šĒ4ė{ęŗĘ ¹»DĊłD˜Ū‘Ōõļ_ε¤HĶ=Ü–Ūw$w>’•Um §ē"\®ķčz=ź ŁĘļŚŗN9ıK7™īįxĄźj †Ef…&“hśP`ṴIø’Z±ö†wv1mĶ4-ö½_Į«ˆĢ €§É·vGz ©“K*ßŪ<m…”©ē€ōÆź»ž Čż·ē°æńwģńÄH-vjx Wåy V<‚īĒ”“ŲRk”ŁŸ×š9q{#0`LS/÷\k"ņÖ ķnté•ŅpG#īžĘ¼ź‘5GÄ_~jŗĀĖāĶ OZö‰ˆŃž{›n’\ }0=ėąÆ|?Ņ-|&šēĒ…>=ųGć{Q?…µż6K' öīĆå‘2Ģ­µĮõZį”lCžnŸ¶wģķāŸŁkćߌü¬ˆÖņĻS—Nž=†&™f9ĀrHŹø#ƒššK««]rŅĆ2¤D|³‘דĶc5”.nż–~.^xāŻŸŸmoqqm Ķ Ņ +#6żz~Uė1š„׌ž ź^:Ö-œĻy!f”?\œćÉR ”ܓā_†Ūį–¦Ē|-ļ¬ļKˆ~c “Įlū×Ļ?ü5e-µ…īŽ—†ÜÄŲ#;ˆēš§Nve8·šÄŚ„ē†įšn®ˆŗÅ®é#yŻ4C²ć®?ĻZūAø’ŅŻč9϶+Ó„>§=H—ļ10Å&É‰ŹœW?{¢MBxĢŅ ÜO Šź9¤ģT²½ūlĖirĢ[5«qcuh¦8OļG =i–Kkir›e "óƒė[’ÜŻKkä¢ī`yæJ@szœ3ŽĒ w Ń:0 »ÓŠVž›£XIäĆØ³9,£ę¦¦éz¼Ŗ­k&š:gų«Ņ4żęd‘QgĒĢć®­!œ?‹O¹–?²²+޽dŲxFĪč3ĮŠ–š‚”‘ĆxóĆ ¤ź(Q‚,€ ¤÷ÅgxU¤“Õ!VPÖŲł²hŃķqčŗdWw:“7,¢HĮh³ņ”ē„sQj©noAņA<žĘ®-#S£Ńo“ŻWN7"E’>›{]©Š”·y<±īFlVŠ]ņ’ĮLõŻßšéVÆē•|·Š87Ņ­JĘŠZzUźCxĪąń®¾ßPŅõ:Ž‚ õ%Ż­ģś,ófk˜ņ@ ÜVZڶ„Ŗ½ĮA“÷ėH §}šń„Ѳó‘ZŪ$„1Ų»1֔ȸģ›+vÓóҼ{ķ³$ķ ŅƒĖā©‘× ŽóEŌdxÖŻŪ ~æy0XÉw%ā‘ŃG„fö(į­õgūKB£xĪ+¾‘„&§;m‰–ŃÉ'؏ėXSÜüēÕ4Ķ.hu‹Ż_3Ķ¤gč7gžæJš˜¼āĻų®)mćh.chä6ųĮäJĀP=üµµR'ļ÷†ē­yæķƒąßųeļŚ^ÓĮ¤Ķ„|(ńnž/“6Īb³¹C‰`ēź¬=ˆ©rw*iŽ—Äžń%®Ÿ‘|–2(ŽBœü¹õļ_xćövÕ.nēńW€õųE¼_nZ²Hv-Īß¼čsĻÖ£šēdŪąĒŪ;;}GNń•ļö¹o“‚DŒ2>_lƒ]÷űāµŚéĒ1dīr>šö®:ģōčBē^Ē}y}ę31³`æ/e5Ó¾„‰e(½sšņ*Õ±ėQ¦S:‚ ń$Ż1޵hWĖ \[[ŗ^&HćśšŠuĶ„ŗŠu~ŪĀŚĘ«”x‘ńdØ^y”®+Ā?gŠ5{)5Ě[°ło€„z˜z‡^š>ŽńļŽ~x’ĄŽ$±kk{ų.!ŤRĀ FĻ5łWąox£ąßĘmßO½ŸMŃī.6_Ł©Ģ3”ž%Zö©HńėR?n­ļ“ŸévwZ\†{y# 4]x5‘oą«Ū[Åøŗ™0Į/qčkŗ3<Šš±ī§†[I“h-ĢW>^ÉNü‚ž v®6K-ȾbD¬ł‡ÆÖ¦MœœģŽĀ÷w[O Ąrri©ą­m„yĮŻź9ØöW«c6 É7nēÓ9Øāšß–ęEŒłžB¶ c §wń/ĘIg§ŚY 3w + ‘G'ä~UńŠuĮ5Ć9—Ģ—«döÆn…3śņeCŚĖvz?ĆĘ6:ls$Kstā1ņŅx _£? žizN™>(ÜI§¬qyši„å¤ dqłs’ėÆV•3č±’äõzßĘŚ×āGÄ #Oš/‚„ŽšŒ*c®b–EōöƜōO‹ķ3t¹½‘·É<æ3Čē’ĢĒ©&ŗ¢®}VA“FŠęź÷7²l¤”^khīTmł# ü«Cş<-ńgĮw^ń­¢jš$’ź²p֒žŽ‡ØĮĮÅLé#ļ(ŠV±łāO‡ž.żœ~#ÆĆ_Ą×š$²«éZ³.ŲīķŁ°O—<ż+ģ]_Ú‚¤²Ö|yjé:bUG»±œŒzē„cģśÉFžĻŗī«ć§½²ńžµØ&™nļ¼vćEĒūW£ėŸü3{¬µõž‘”€ gĮŻ^+eKCjM&|“ń’ö@×mtĶCā—ĄöLŌ-•§Õt&č®FL‘ƒŹ’;WĢ~ ńć++k©Ž5/løģć‚?:ćÆJĒŅąjō=.iŽĪŽ8Ėī„}ӊēnuXe‚a½1ČåŗWzٟIAčhéP¬C+M ³9āŗ¤“rņūŽ•qv6Ŗ’$¼—OŃōėĖūčŅ(Ÿh9Ą8ėÅ{üSž ‰ńwöwŌ5æ…­ÅŸˆ¾Ü^É-”wqļc9,Ā6Č; 9ŚzOs^Ī]‹t§Ļ ĻĒy“Ļ-ŖģŪR‹ķ(ķśÆG¹ū³ąŪ7āvmˆ¼†µ 3Is&”Ł(c»ŖŸŻņ{cƒ\OŠæn€æ£ø‡ćOģåā/x„2YŅDW"CÜŗŽ?ˆ6+·8ņŸÄ4ü ĘPÄ}gS’¤įo޾żŽ¼mhŗŸ†4ķUŌnē’Ź3cwaƒ¹Į`q÷kóĻÄß²;ź·W_¼G{«L¹’; ČĄ‘µŌćė^V' Ŗ?¦8sl #„Ī"ē§7UėŻ~'Å>9Ņ<]ššņųL“Ż2ŹIĆr²8õ>ƒ­néž*Ó®ōØo ¹,Ņ.Œ~<ׅ^…čL·5„‰‚'tĖ:&µ½p7Ę<Žø®‡SµøÕ7ź0ŪģĀÅ]€į[ŅøĻjžĒóĮat"ó<ÄĒnßZéōؖ\ĪäļĻé[Eܳ£»wÓ¬ZćÉ< ś×orš…š— T7~µIŅŹ¶ńį¦8\Čé]¾Ļń.ĖZO ėŗMæŠ,J“¦]·–nPŽ 1ī*µO¹ŸµGœ@ņGsye©ZKcØŪĢŠ\[Ė÷¢‘N’>µÓ[;F²į÷9§ģĢŖb¬Išć^½e‡ĒnBŚé·o"bb#'ī“_VüpųI£Ž|6°ųĶį{ėXķę4Ń©ŹŹ¤grćń­©Óī|ī?0jKČüōų§öŸƒŅŁTĢ"”ĶņÆ8ćü+ē EioÆ[K©J-¤ŽL@äcwĻ5¢†‡ĻćqŚŖ^ų‡”|ń®“uØK|’Ūķņ%9-’yé_čšv›Ŗ]Aż­8'i„Péźģ{6  6x/ōhdG…„˜9Ē­zæƒ~-x§Iń5Ŷ“MĪ…,€®_'8Ļįšč„#Ÿ†ę„cōGį÷‹¼æ³Ü@|äWŲŚf„ž Š+·nボW§Mō?'ĶØ8Īē{ā-6ē]“Ņ3łæ&āyßéüėŽń„­]–o"oõMć«CĮ”NOĄ^7›Iń‡]‘g…WkapAéĮÆpm[M½˜ŽXÜ,‰æ'=Å\cŌĮ«ڦ˜ŗŽž@(ŅØ%r:ūW} A}”$¦Å-ÆW+*0ūćŽŗ#.†N«‹¹ļŸ²wķyū<ųŠ=Yŗ½†·×1Gqņé`IĘō^ÜūW•’Įk>Xė~7ųwūAųKW–īÓZÓÓIŌ҆4ł¢”}C`抚« G*ś‡a³z ŃÆB~Ŗ7_}—ž|š˜ü8¹šv­nn…¼Ķµń·žƒ¦+—ń…ŽynöW&X[#cuC\Øž±„Œ„‹žšğß.ą’kž4æUó!ŒSÓ;‰āæEץ¶?Ā/€š­ę±šėÄ>šµĢH·qŚźbpŃ‚I^ Ļ׎»é6µ>±yDć 6a(ūņVOæOųsņ’\Šļü=ŖÉE¬åŸķ(į1å7\ƒŌs_”ß°ĻĒGÄ.Ö>xĖĒ^!†ŅöŚK‹K9dŻmq"— ÷Ī;āŗéŌ±äx‹Ć0̲z°Qę”bÜĕտ#ō/į÷ü į«k7~:ųTšDzmĀéƒ_²żõŖćXš!Į$€Ąg„}!ń/ᒁ>3|;ńŸĮ_аXkŸ£ŸĪø'+ŒĮœdrŻhW1Éå·'uĄ5ķZf¹Økŗ@ÓģĶŅ\ƒĒ”äqŽÕē­TŠśŸąÅ]ĮÉi£›ł^ā#¹ā$Ąą×é’‡šķ߈4­GWŌd³¶Ņl՚ye“ąvSܜvÆĘĻŪk^°ń”“iŚ –ēN±˜™mć9‚x’>•c¦‚÷¬ĪżęŌ»yH‘ĘnÕķjö]Z`²Ū’z׏]ŸS‘”Ŗ1TņZįWpĒłÕĖ,żˆ„øGłA pMa{”Ž–/Y¬Kŗ9$ŁĘnk~ĖGŠā7y.˜Č:)Æ{/½āÆ„ękQ<&|>ōŸ›Ń/»_¼Ū³·XÜ=k¹Ņį ­ ź ćœ_ILž©¾„ZŻĮøŁ3ĒĢzē­ģøUŌv­Inw gX«°ØĻ^õˆŗ¢[;[\y{Ą9aŽ“FR—D7ĶČ7PJ”zņ+Š4ēI,a¹GFrøači™•Ö$¹$‡ęcłW;ā=2ūMŗ°ū/˜ź\9łq]R‘cR°ūlQ[łłČ©Årŗ†‚Ö…DS3/|ž .ųnšĆ+ZłŠĄ˜c^‹.ˆśÜ––qŗ݇ĪNϽg®x2’ĮZŻīÉ"źH`yČ4ŃuX›il­ä]Ūą~`zc>”$$SŪŚfxĄˆ[“[ójŗeĢM$yē#ڃ&Ži‘„Ė9n½łÅMöä%Źŗµz\ńŪ$ĪÉóqßd2[s4‘™"Qø©kŚ[ʤR¤‡xĒzø=NRōrKop\ŚīnWē¶“ū]g/Į»óW)Ó_OcšĒ 2J ƒŌW9+ĘÕ8ėXW>[Œ6ĶĆ·zÆ«y³DŖÉ¹g5—`!Ń4‡ž}ćwĻŠz~Ößémen‹$ˆ°ž¦³Bk“…dڽs֙¦ÜÅ-Ā-Ó¬y$óXŹZč#ZęŽĶ$˜ÄŹńäóžÕ‹6±m§@ó‰æx¬ŒdļWõ5„Qēŗß‹on–Qģ'øҹK(^ņäNģefły=O„)Ķ$vS…Ļ«>|:Ó¼A„AØJ!€‡Ū%¼Čwpy ōė_Dj~‹K± ` " Į¾w]³¾8ķQÖ滽±¼ ¶P Y9-]®“h’¶§Ø”U!°FkĢP»:,pß¾2Śč·PxCSŌoµf+Godw'$šū/öh’‚]|rż„ąŅ¼}ńŅmOą÷Ć eżŗ!öūŌ<ŖOīĮäžµčѢєźŠĮ_ŲóįĮ/ ?‡æe…:}ž«Š.õ›„<ĶŽ\»A8öśW©čŽšļ‚oµ=Cāž­©ė~.wŻil„”ū£(äćq^„!ќs™éz†ń;āg¦Ås<X,l«ó\óŌĒ“Ļ$W³x?ąO‡|)dmąÓķīµfQ›²āC/|īI®ˆĄÄŌŽ8¼?s,—^kØ![«cޱ¼A«ź7Ž‚ÅŹ;JŁFij€Š|o„x«XÕ¼-%ɆęĻ d’=«¼öĶU¹žĒÖnl4ĖŲt­BöŅmö÷@–<öo^i™ņ²oZßiOk®é ¢ä¦Žē׌ź-,d»Ņü'«^iöS‘Éæ®8ĖĄē?JØ-MOĻŚ öÅšwĄČ/mµæ[xĒĘ%Łb¶EBŁčÄÆņ5ųūG~ھ6ßĶ0Ö­žųXJģ„äĘ8ć²ēŪÖ»)!7”šž„āķ2 [³„³;v?Ęǹ=kŵ]RīāåZgdVtržµßM5dP•ZL¦qžµI°T¹#׊ޚ8e"šŒ2F4LJžæZæšF¦`KńŅ”Æ±“—@h›?»Ÿ„ZŽÕߗūP \ѲÓVI^$ŽO4‘ĪzWSi§ŹuHō}>Ę÷]Öē`µµMī_°ĄõĻZR•iŅ?kæd_ų"ĘĻŚG±ń’ķÆ’Āųl Ī4ųĄ{ĖŲ É3q#^kś&ų'š_ąģ¹£'’e_‡öjm¤śČ·÷.£³žX’õųk‚­[čwS¦vŗŸŠ¼>Ņwāuäž"ńrʰEdČe„IźŖF:p=;W™|A“ų««kZüZvįÆ±Żµ#*n=Ō×3’:éÄ|ŗŻƒī_Sš†¾²Ńķy€ł„`:;~uĆkŚ„ŸŠtįuāĶ̃7ū² wõ””ĀŚéč°,Z06ŗ{9fQĘ2zTwŗ;Zuh’ofČnI÷¬Ąėl,lģģąŗÕ.~×zć ­RŌožuh-HH»{PD¤rl·ŽW³Óm?“Æä`…ś…=Į÷ę ¼øÓ< nuŸ‰ŗ’€ł6QŒ;Ænz8§w'™Ÿ ühż±®¬ŽM'į儽ŠĒ#nh\‰2y½kóük^/ų…©^_xŖėķ¾eĆIå’O<`õż+^TQī ž x‡ĘŚ”YŁŪZéE¶<³årßēŠś[įĻĀæxWā­¦¹n5 Ųä,B¾AĒpn+š¢"GÜWŅuåsmgk G!V8Ā }Cįo‡šv,ćL³† drŅ|ø,j# ™ó3ŚtŸßj6,b8Ju,ŲĶgj~Ō“ŲŽHĪüusĶmFs—C”³Ō/¬µū]‹ķČ$yģsŸßi€I „d!£ļœ{ÖŖ™Ļ&ś;eāøüyØŚÉi Õ¤±‘0ę<žÕ'†¼xŠź—3^iņĖ«mŲż»fŸ*C™ŹxÆÅzœŚŸg§Ż%‚åĖW>˜ė\µ—ŠRš™|³»c©˜?J͚$e’ĀU­ź7V÷M½¬ •FFĪGØ«™»·žÖu’ ¦IrIŒÆ ųӃ-Å£ ¼J·»ŌŅ k÷³“…ķ_üażš¼ć/iŽ6“šśG®E)+$mó 8ĪŽ;Uó¢”õ:ųVzG†tū`m®¬īWå#Œz“]9šEÄ?Žč~šxņYT“Ō{™H~Ōg|+Ć1§ļ¶ŌœŒņ¢¶įō®ÆP¶øŌ­äū H$<Ø Ę{t¬Ģå3“†超¼:•œf'PK«½ōÅ{7‡|5Ø^³ŽI©‹` ŒóĶBd4ŗWŗŻÖ‰9 8f+pƹM[ÄÆ«]$·VńJ åƒtük¢2°Ž/W¾šŻ…£ż¦!y0ĄxĒ¢“ęEs3†šŽ®÷WvśMŻĖĆoŹĆƒ†õ8Æ£“2ī-āžŠ’ņŪ8>iåjfĢ„&vóųfŹŽ.­®÷ݲ‚Ė»"”Ō­„{2lŌÄɀÉÉÜՙ*g!¦Ś\µÄ‰uē[ķÉŗs\åūj\\Ao ÜH2ØŃR4ę1¼7”|IR·ŌµĶ}R’¾d©Ž1^—uØšŁĢ«‚»ŗjÜĢåsÉĮŌ€‘÷/’gšś7AŌķģm^“ēÅå°@§$użis’yļˆ5+hnĢv;ĮŪóg‘ščt‹„½¶[wUN:Õs䯓’°^OŅ!}ŻHč*DŌįSØ<›QƒØÓr±JMĶ¤ńĮ„Ļ9“C…I–?S]§ƒļ ³–ŽKųD ŹēØśÖrg£źŽ*T‚ģōā Écž+ʵYg•ŽHß;0PÆćPh"P‚F`db?*ėn¼=¢ŻYHķ,ŖĪ›[ż“ŽŌ\šMRĻū&÷u«yWĪ﨨ō?Ē:·Ÿż–#ŗeS)ˆ’ Ž UDI£‹ń&±­Ū> Ģßé* nAōÆ.ÓüS6¢ŃŚ“Ģ%ČyQ›{ę­ģYŲÜiRźh/4~o–B¹Ēø®«CÕO’(fwvP<ę¹ęśG Ė~ķ˜Ąģ'#„r²ßXŻŻ³¼ēݱ‚·+Zȉ#¢ƒJ•”y ¢`só żqE¦”y+h ^08\ŠŅ1Dr驹>8Õ¼sį’ŲMoįū‹Ū˜}„““żŚõ;]—° ˜-®<ņ9Ü8ZŽ4Ę⺟zĒĮKiś‡.õ+;)—o›+Ÿ/ šāµƒzwƝR4+ÉuvYdŽRRząž¢½ĪcĮ„^[欅÷‡,ķ/µ‰žYLĀ=ŻĒMýx.gwk;ˆ'“p\ŗīąjgLesŅü¦\Łė«¬\ŪI©[³`«Fõ‘ń+Hńe‹m.4$ø†ŚTŻ–C”9čż»œÕ\Ž)‰öÆ-…Œ7o÷ŪJ„y¹żk„¹Ń4čŅĶŽ…åĖŠŸQķRQ×E?öŗZ‹(-"XćĀ…ąw¤Š¼¬ųŽ}NĻW †WhÓĖ9Ā’IļE‰ęG Æ~Ļ–†Ś KK›]Xœ!>`Ļ\w®+žńļ¶[+m^vŌ $IxĮ§oʁĀi]åę½šž ]kŹ×w²~Ļpß¼O—ų³^m¬’cėŚÅ¶­km‘ŽIˆ6@>“¹Fģ{N‰aØŪčēT±ūx­-~Ķe9WĘAžx¢Ćö‡š“J“Qń¦‘q}#\Ż»}• ńĄč ÆÓ…>µšö± j:ŠĆżˆĒ˚f8XAłNOājdT®p~üšĒŽ[Ęž½²w½Į¹ņ\y łĘģžõ©ń³Ą0xGĮń_ƒ¢Ō5]¢CqC{BÄvĘ8’QÅ%”ņ—ˆęš…ūĆ}"=³0h§nXdōjū£ą~·™¦ź>:ƒPÓÆ>ĀOnOͱøĪ;õ­§Ģß“·Ę}ĘŽ(Õµ-ęHģ”,Qģl€Ź ž5ńƒ~"Śč¾4“Ōõ;G¼øµ6 ŚĮ½åG)”t9ļŽŸüUćæĶāmnŅ} V‚E’ĪM˜3Ŏ=Į.‹ā$ÓƟ®4&Źā\9|å‡géN1:#.†Ō ėŸkŠyžō°tŒ³ĄW5į··]:¬ŽźjeX$?20?{9ÅW!©õ½Ÿ‚“ļ|5Ōõ¦ń¶•¬$ŻQ™”`«×uyWŠ†“ķ#IžĪšŌ7óT·,ĄńŸJ†ŗ ēÉŽ*ŌķęŌ|«čĆĄŻp{žŁÆCųcšžĪö?“DŒb‰Ō“æ#ŸZIX\Ē©źŽšüJš%Ž ¬!AHeģJÕ«{š? ßŲjm3%”yqŽČ£»¢ŽėVÕ“Ÿ XĆ`«\Ģ”£ ņGłÅy%÷‰u=Eoį&!TbäńėHN+©Ÿöt†7š5/¤}āz’„¾éŚļ„-µaq7¶—+s'œŹ7„żGćAGd{—õ=2×FŠ›A¼{XڳÜļä§JųŖćāwŠ> ųžę-E$–{ł‹Ć3ŹØ=8ĄĒī8ĄśOŪ›Ēš~”i„iö:¤wć‰ŸF:†ģkļŲ×ⵇüuŖźóA÷Ŗ#āA!ĻRō”F鄕‘ń7Ē(<'įO‹śµē4X¬&–ą¼žY«nœ‘^ūąO‰7ńׇn5/ŪEvŚj¢E'EN€ߜóN0÷nc)écĢjŸŸü;]E¬å?`X®ģ°9źOįšóO‡–Ķuą}inŽt™7HŪ³“qSb9Ļ~<ü.Õldøń¶™e*č!Ģ3ø_½č}käiaxäÄ«# ;8*+JfŹ”ŠhzĘ©¢ė:Wˆ4ØĆ\Į Ž02ńädWģ‚üF¾1šę®ZŪÕTŖž„(Ī+kh'#ŗ.$·1‚Ob}+äߌsį«k¶ńf–‹-õ­ŅļVź}? f¹å¹¬WSäĶ?Ćņف,‹²`»¤ x㨯iųć»OxŠé³”:‚,3,„ķläśʤźŒNŪć…5oų×Nń‚b/¬[^-ę›ub7«!?Ō{×öŃ’õż„­ælŁsĀ~>ž1kć-.•­Ū—ˬ‰…ŻŽ¼’>§Ņ”•ŃҶ>āŠõ› U·–9”=6׌‘ǦųĒB‚YtuūĄ`«cšējąÕĢų*ŸĮ_|Oż…ž7ų;SŠĘ³¬č_ۚ4‚-ŅĄČwŒ|Ąū9Æóģe®” ß=¬r\A‚Å‚ķ@Ä2śšAĻN­źŹŸdŸßuśŹ]Ō Ž'P’ÆJÉ\z2œwÆB',˜õŸŹÜŽÅ} $n6ćsė“ßėLĘLLC*ŗ°d›¾{šEMrTŒzŠA2DŃØ•­^Šå|@bpO„_)p} ¢ŚBˆˆ šōļ‡ß|]š?ā'€>:ü=Ō•ćŸ _Åk$lCH2=½:†O<ŅjĒd$¦ģūHx'ö©ųšć旄/ėĆŽ%Ó£7 žĘō.v`ŹĄś•'øÆ .“¹āā”ĖČõ5ĒV&ńzUā(L ŖĀĪŠĮt ćzAČś_>.š ŽńÅēƙn »†uŸ Ž“±ćcĖB=ņŲĒøō®"Åų(·ģāŽ:šī”Ó³™ü¤ĆXŻ©ē+Ū8ĻāGc_ĢužŸØi·z¶Ŗ­c;Į0pT°±čq[Š}YģSņ›ĖVl<üµ ~lŅVłQ]ńŲĮ“M÷t†ļs÷jŒmm)‘˜ÉŃ­39G©Wˆnryę’'S¹Š‘“ć‘A(,ē ÉéÓ©«ƒņqœ÷ č§!Ń7›"ō¬N@ō«qĒßcЊŹrč~Ä’Į?lūŸŁÆć꛹ĆÄóŚ’Ā!ÆÜŗińÜ<©Č•\żÕaž:fæø†"ßIŌµ/…ŅŖŽx+]µļ ܂»"”aŽ ē‚‚=JŠ‘źŽ“}-ąĻĮÆh"i-eµŌm„6—pøĆ#©Ę~‡ø ÷®•PFn,¾Šź\‚ qԈĪ÷ü§ö0ƒāGĆ 'ö”šīŚžˆ«„x©a€–ÉŽ"ŗ 0s°ż—ź6×ń+—ŚV£}”ė %®§o#$ ńøg‡QŠēh³ĀÆ2xŖĮįg,Ēh8Ęyą_ti^3·Ōtø_ST²»OÜį1“Ą$cÆ×-H‰3}f×ǚ]ö¬y’O4{鏊ÖĪ›żąķ'MæÖ‘u=\ CFXØĻCÅr=ĪgāŸ§[x³FńŸōųbdŗ†(ś@܇õÆ«t-fOˆ~“ńfµ†_ŻČØ ‘F«¶…Cž ±Ė*8ƒné[JĪC7b½:r¹É4U‹F±Y⹌yR«}ėn{ŲīR-¤oAŒƒŸZŠ"bģŌ^čŸ1īŽƒ¶k¾šóY„ŽTĆÕŗPY'ŽōŪ ŻFĘöĮ…؍3,j8võö®.WŪ­±ŗqL ż#_ŗ±O- ²€vŒŽ3]†”ā]FāŠ›Pöņ*ņø#pļHg˜č—·ZŽŖŅ9˜Åæęē=³^ó.fĮ&Tl“ujxŠµ+›ĖÖO&Iv¾rFjœv÷B‘ xŪ®(.Śß\łĘ6yp~R¹5»Ÿw%¼ĻÉå1Įp åķ?H›J·yå\ä…éšĖ¹ń 6·±ŚŹĢ²y hŻŻI©ČbPeˆ‡\ķ®jķ&¶™(ĮIĮōŠHŻD·–ŚĪģmi°Kv9ĶoŚé§j©Cר ŻZŒI Üß¼^#­yµę§(o!—Üu4¢=!Rń§}ę ‡еmm2Ė3Dļ³>¹ĶY|¤;Ć+uärMW‘¦’8ä‰šŻĄź;ŸzétĶKĻ·C~|ɔm$µzęņÖXš"2˜Ē¦)r¢£¹R;ø1²/B qśīš^ęŽkk5\¾[ǵ)ģtĘV;ĶĆjCp#ą€qŽEbxŚĀ{C ²£²³ü ÄŃHį“»ic¼"d+“ņœtÆlÓšŚ}ž™«©ø·xA É~ V2)ī~cüGŌßĮėØé÷ZzŚi&b±HØyĮćé_;ÜxėĚP¼}2ņ-<¼dĒ&ܕäuü+ŽŃlś¬G›]Ļß߃n£’ ÓĄZüz£Ķ=īŚÉüTų€>&$ ų™gę-–§¾Ń,ˆÄ¬Aaņ²ł«‡*Üģ„#ńWʞń’_$ņŻŲĖ39rĶķ^ėš’OŠmdÓĻļķŲä›}•yŲ™hzųsÜ~xkPńD–śRu ›`Uąj÷ +ąV· Ę„§]\%“j '˜ūĖ{-x¢Ū=VHŻƒÖvÖ¶‚ięK…mŕ¾÷į]·Ć­ŹĻ{µÄóäĮ®ƒ"¦(Äń„Ēc5¬pĘ"dŲĄó łÅ Éøi“[(å·wݶ1‚ŸQ^åv±Ģź£Ī®ąń_ƒnVŃō{‹»Gu ĮļéÅz-—Ā]?āÅā Ż2+=Z܈ĖŅvÖ½(lq֜lz÷Ćķ~ėĀ÷e8x£Żå8n6ūŠś’)$Ō¬Vķ%;sĘӐEvĀ-&&HŖęź’=ģT‘ß”«öqÉ,en†ö8=ėCȜdšL¦Y£·yöžöÆ~‚Ö;kU!18Ļ#­h„d`åŲ£y é𕳪«Š5Ź\xK<¢XQ—Œõ3˜*‡ØÄ!g‚U1ŒŠć.ķ!†%•vīĻ$Žh§-M”Łćž1Ōå«ŲĖ ĢU·£Č°Æzųį?Oš³ĆŚĪ‘ćõ-Fō±žÅŁKŪ>yR3N•Ó )3žjpų®ŅŃ- [)SzĪ[6Füėńf§a ŻÜYÜ3R&*čæēڰŖĪŖtŪ8+‰¶–Ś”6wš5µ³ĖĪÓļé_Ghzߒ°ŗH%·sŽŒ+‚sģvŅÚóźMskylĢ%¶s‰Pž |łāmQ<9ØH,š0„eF:]˜Usėøc*x¬\(„»<\ńMœ·=ü‚o˜¹ėķ_2kŽ%±:£»dœEØĪrp+č°ŌZµĻź¼Yģā”’?U’g†cG·šÆ¼I§Å>‘ƒds +0ĮäžõöÄļX|A»³ŗø‰ōų!‡ŹU…ŽĆǧć^Ķ8ŁŒŖābÖŃg翉“y4żfń“lķc›a#E"—ŹcƒĻJӖĒėyl“§édŲ2“Ūµ_²»hP6åϦ£s߁Ļ|YųC žŠ~ Ō¼āĆ Ō’3.‰vŅ`ŲÜØłJŸBp1_—¾Õ¼AįłµÆ‡ž$2ĆāMv¶ø…˜ī$tp8"’VI£ōö#Ö’į(Öʑ$ŗ¬wDźO~qĮõÆŃßh‹¤j |›‡JÖ:-L£W[tĖuōbŚĖ*“rŠ” ūb柭sJ¾š?Ę_ˆ:es4-ؖ‚#nēłŽa’kŸNūīŗ[Ÿbx3Ąz®½s‰āĖgŠ™ćŻŗQ‚8éĖó…ńOöXń­­¶©šāömuP²ÜXŗ.;0=æ•y5(³é(c’>Fмq®xÄŅx#≨x?đžńaŗĘÉ£Ļ wÆŖ“`j6Š]Bńʌ;•Ķ(“vJæ6‡?ńkÄöžųŖxR…/,]ZŁ£#%Y€|šų+įµõõ”f…+)ēFǶNp~•½)žMs¤Ļčöińčš®›qmrŪ<‘‹’véé^ówįķ:[©õģĆłĆ=8ÆRœŠœ#ĢĻ'ńOý7ßYY¢K»z…^‡×ł×’’Ā54~%Ņ|G¦źšķ–„j Ū¤›a”ļ/~Õ¤ćttSĮB¬m$\ńo†•łćŸiūN ėÉā½ŽwŠŚä»Ā”1õć¼ĢE+­O[%ĀK ˆ÷~{§ˆ¾ŲIš“Ćß¼7mˆ±…» &NīēōžUÄčo}indU<ą÷åŌ¢~™€Äó§sĶ~#é×Ö>"ҾŹń½•ž÷1‚ I×·­kxZęāÜ¢I#²ē'qż+[īü{­»XŁĮh'žMįXd¹=k[į·.·6ŻŠż¢%is…Ģe±ź~ųĻGųg/‰ō 15‰ŽHĆ,¹ŗä~ųŽłõ’źz†6•zģ–ó¤ŠQ“iąŸēZu¹É:or‡Å[1kńwÄ „.\9 ‘¼ćüGåS­×öf•<’i] ØaŲ‚3ZBģąÆ±Éü8š¬W¾&€x½“(ęÜŽKG¹&$ž־ŚēÅ+3öq¶ų/Ø„–¼ö2·“wŠ”ÜHR?}+¢žš3ĒĹܯ™óSxnļÅ?mšžž±­ķņb ĻN½+äŸč:‹uļ‡~)m¼G¦³+™†•=Aü_+±įfTł%v}UąķN-GNŌōė€gX“§Ąžb¾yM7Sšž½wc},žZÉę[üŻc'ųTņœ±‰O”śSĀŚ»Ēi4Ū"8śWOāk{»:+ż.nLgpdõ¢2±ōjQ=_įĘĶSĆ Łj eŠxwyg¦å5śéšÆSŃüYąyõĶP“šĪ;vvĖąŒ ņ+¾CóĪ*ĄZ>Ņ‚iśŲ>0¹ŌRö«s•żĘWÖ­Ÿ®čĄČ`›(YH<“]±•ĻĻ«FĢł“PšŹM®HˆFģ®8®›O±Ö4&q$ØĆ(ŲČjŃ#–¤’ÜõŸ xŽBÖk{³]D>a»Æē^įą/…·?4]sPÓn+;c²GD,U¹ŠÖŪ=œfTšŌeZ«“Qó7Šō}SĄzŽ” j¶Ļw,o•óT2¾›ā7…ž,~Ļž%ųqāØ'²Ö µó4©¦A(‚epx'ō tŖ¬E(VƒŗM4’Æ#ąÆO£’b]Įż™ö]nŒ3mĘŁČ$~ C柅7ž+ŠįøÓīāŅua$3c# ō#½Gß`ó)ŧs–Ѿ<~ԟ6Å M ¤PĘ#Ić°ó ėłwÆxšWügć~™ |`±Ņ¼oą{øĢ7i9įS×u‘ƒZŖÖŠYĻį3wķj/ylūXć<{”ü<ų‚·~:ųSØĻ­x"ó›­1Ę'Ņåī õ ×Ūśüus±ąišē†ļ.ōŻBĀč\[\”—Ā}ŽqŠ™Õ×Cī²,ŗ¤h*5õiXŠń拵?źš–»©,f[ćŗčF»C¹źÄzžµ÷—ģ=ūQü@ųcį½sąę»tž4ų#,n°i׏™ō‡c“äHrBnł¶v<ŒjUgsĮć’čg9EL ×½kÅö’ų^ĻŃł6Ž’öŖų§~ҟ|[s&‡ü-O§ö΃{¹’āāĻio‘Ļß Īü’8>~Ń~ńW„“æ ųßR±±ńuŒfŚā)š@3Ļ^jg#ó/£īa7–TĖj=hMŪM£+»ąJ[ķ¢=“Wųh%¼A᫁pņNą£×Ž•łłū\xP隖™ń£OVŠĘv‡MÖ¢#…› }k–qź~śés+?omaā%Žhm_t{U¶Œä®|ńĮZ€×<.Ń5Œ`}žki1H?¼xéé\ńG_-ŃśGūųgöbż©/„~4Ÿ|ųڰy¶śŻ½ēŁķodä`ņĒiö5×Zk0~Ę’“æƒ4ŽŚ_ü,ļéwŌtFÜ·ö²!X¦hsT‘¹3ŌpHĮ>“af¦ž·³_-Ļ_KyŸœ,v2źø:÷mx˧§©ś[ū@žŌß³×ğé­šžh|šģZ²Ź¦?³É+ž>ą ōć'ń7‡<1š‡Ē~Ō4ż#@2B |%ÜA$ąœõżj*µ±ŃĀXLdh[ļ$õó>3ų«ūųbKQŌ“ŸOąĶQĢ‚å€ū5ĆõŲź[æ°Æ†®|e®|:¾m/Äž|ė1†9£’Uv ćr~8Æ.¤;Ÿ§a(it}”~Ėæü¤Żų’J¹±“šāY‹ø¢“–øĄ$…÷ė^[¢ E»Dģ<ÄcƒŃĮ˜¬ćOSÓRKCfM _CŚ« ‘Hąäžµl£4V"Ē ÷5ōY|,žßJüī8Œņžų0Wõ–æ—+:Ė].BŒõ•Ńéš{ įnvąW·łJEV‚Xn›Ķłā®ŸJÓķn\*ˆÜõ,5g3.ź‘[[*Z¬Į\ū:óMkLø‡$®sʐ:ŠaaŽyŽ ’£|Ķ¤zzVģSźQ]‹HĆÅpsÓÉō:įŖ•ƒ¾{ĻŌ’µ¤ŁjÉ3 `zf®T¹ŠkQāźĖśÕ–[©…“„‚Üō­LčOƒc`³ÜFJ»rH=MRŅüey§]I`²6Äl«2ō¢Ā="÷ĒWž)µÆ.cŗ¹i½Fģzg½`5‘dfHĄĻ<÷©åÖąaźM$;Klc…z¶ŚāßPi0°Ŗs÷jŒJUøŹ™r8n„}kNņKØÄj­)Bu^Žō)X»qb–ŠC4d“'×µ@śĶŗ$(>T`œõ Ļ™‹kzdŗWEĮČĮ=뼚.mJ?īx óš 8yüūRU™ž2qšĻ2*ĪģŽY[ŠQoØŃ)d)øžÜ”ö“h€U$f˜Åe:²“[Üul |¶“H"ĒÓØčE01uky-tł'to%ĘӞŒ;Šü˜ųļi§čŽ)žūģ(%žbˆ§LšEFV9ĖäPåFzcčZ®·Ii”yS ĘkĒ)t8[½7}­ĶĒŁüĒU8;yÆ2iĖąĒ,yĘr=ų©F35¦·šöĖ|,er;¢øįs§Ė“FWŽi™ւ‰¬£Ż“ęÄyÜrk®ŽŅ+p¼.@zē'M÷’¤)ć œŃ²6ŅüzzŠW™1øh\®s’+n4’vE%Yŗsұ–ąw–pÅƒŁ€Ą$c"™ŖĒȆ, ź;ŽŌK`8ĶRÖhp“Ē÷Nk>ßNóŽw eRĆ'œbF©«Ć§Ęń«ƒ/NłW•]ŻŽŽ\9mŽOPøč=ėSZi›^šõÖØÉ;$±Zop3…õÆ©45š7…īćFn«'ČŅĀCß#Ō^v*NŚ­žõįųKUKH4[%†XI•Ī$ē·„ušŒĘE›bb%³ŁF{׃V ³ŠIXłŪʞ2µŅƝ­Æ¢ŁśĄƒęn:W[šGąWķ%ū_x‚-įe¤™.5[„)oj¹ē.xcƒŠV”)w9źHžæeOų&÷ģÕū!źZ^½ā‹ž,üuæQÕϊÖP2V$č˜=ńŸqŅæBüKąOź“É}ćohśOƒp ¾fvʟ@ŗņ}}:gēpӕæ¬ė:ŌÓ[hW3éwvĘŲĪßq[DW3m.u‰,"}Va©ź†”&7÷Ļźš^X\,Ҽ¶¬8SŠ¢TĪZėM²½™ä±ÓŠ^7śŁc_½īkĒõĶKĆ^Õ.Æ-f¶Õü@FĶdĘ3ӊØĘåžńö‡š§Ā» |bń>iįåĖÅh³u' „śõÆēöĀ’‚“_xĒPÖ<ū=č+¢čM1[‹¦aÜ}z×U:D¹#ņŚėćv«­Ķq}®ßźwŗŒĆēóN㻾¦kɼAć}FļpņÄŠ“ŠuÅvB•Žj•O?–ósīMéyČźiņœ'–~Ę·ŒlqTØ$1·˜‹!Ų½y’³ LŠß2ē:ÖŠģrJ] ķ6FØcQ·Ó½Ik"d™Ź³}Ńפўåė8H±“½±ČĻ"ŗŲ“čm”7W-*m§«;VR•Žŗtī}×ūĮ8’hĻŪsÅB CkšūįÜmŻėw±åšÄY°=+śŠżž`oŁöD‹OҬ¾2ü\˜5åźG,џQĮ ģ9ąņ;łµ«9;-B4^ĒÖ7’ü7āIģ~.jńxW¬ø·ŠŁŁ"R:)ĻćTõ=W]ÕķFŸš£ĆvŚ„bR“ßĀß>Ü}ń×ņąuśÖĒLamĪkNŅü ą˜!i’Ū^2–C‹Ł_~ēźIwūW=}ā]o^ž™ćĘ:–ĢĘĢ#F^øĒsĻnՋež%©j’jóįŃXHĀJyRkŅ't·’ŸQŽ6:ēŌĖP:;}>īŽóÉÕ!’c9Įć?…iŻź‘]ļ‹K·U‰RHČzUĘ qzĶŻ¦ƒ7r=ģ¤d*dąŸjā`’ęō½ī±­Į”iˆLøv ¾03ZĘĢ­vx_ŏŚÓĮ>“’ĖĀ är\,{åRĖŪ„~pxėāÆ>(Ķ#[kš™‚bĮšlŖs¹š·¢ŠŃEĻ„üu¬ßA¤-ä“ßoc±‰õ5õīƒš*ÓĀ–2jöäŻL0ωóļĻ„ä3ß~ kšóź/ai ŖirĘcU>VĻ'Ēj÷yživ-Ó¼KtåŲÄœ *ƒ×Ī’Žŗ™HõMBŅŪL(šUŽŻ(`ńžĒśÕH/&[ˆŻ R0NGZµ”œ–‡ukÆŽ[,mn÷«7Ś“’J€qÓwzµRF^±uŠÄ'vy•vÆØ•ĖM©%µ©Q;oī„õ§~¢¹—Ŗ]ųzóK1Ź¢KÖłJ²ō> Ō6žæÓōųõ1“[8;[VNWRć^³‚ĪKgQęyéų׿“'ˆœIkpöCqŠGåYJVŲĶNĀ} Œw)>õLīWö=jöź+ĖGŒĀ‡,$ī„8°¹Ūź~)“—D“i2&¢ŻĆ£ vŹiWlm5ģ,ń#ēĖõ·.‚4•č0\źs$wĆŪšd!6ƒźj¢Œ‡O’ęŽ?˜q“ҹKė¶B¬ŠyŹņ+[ŅŚ]¢iāĶ卐ØsļXréZ W =ņ³ @5Œ·{&ŗK«0ødĪrk£‡\Ž[f·ū#Ē*»³€MMś "„¤&ęį„©—>)ĖēŁź(ė$±…`1éM}]£ŗMóŗ“­Él’:Ė‚Ā+˜ÓĶņŻŹ‚3CśŹ/“CPĘIć“]ķ¶iŸo.SĶaœÉX ÷ŅŪßEŠ÷Vūæµ­āQ¦Jń“J”Ąē$ š„iw<ŅKÄŽē ½Īx­˜õ+ė”kXdM­ņßćK•‘$yī½oy¦%äa²‡„ei¾2—IµŠgĻ9Ēt”ĘĀ9KŁ#Õ&ycŚåŽ_=ėÉ-|)ž©ØÜŻF¬<Ƶä)ķYJFŃŲö/Ü[hėk§…wUÉ~¤qŽøŻ)e¼æhݹ²>SļY¶\™ėė±,„K!8ą‚:V٭њ{Hc.Ē żM"NŽ+]BęÖ7 žČsǽdŲ’miڐv“/d£s18!³Ę+X1\ļ/n ×ķ¼’³0u8‘Ļ%¾µŠ.ą°YmKłe†Ī‡½tA™Iō?¾5xŽćTńę›sŖ©‰¶eIPń‘ėÓ°Æ^ų5ā ÅŽŌŅSq>¹^)€"$óõÆ”pG—õd–‡‡üpÓģu’ié¦-Żī”lå.eWŲ±)ŲżjĢÓ¾]ßY^Żiљo–g!Kdvä}k ŲóQā{Ż&å4Éę–)–m­ž¤3ōÆIŅļµMB9žÖņxˆ]źŖų9ś÷¤Z‘ŸećCCŗšgNo:L€īIĻ_jō‹D»Ō-Öź\°uįAÉ›)Čė“sug ńķÜ#,xĄś~UōO‹”›Į>ƒZ²±[‰–##aó`g$öĄ5Q]NJ’}›“ĻŽ×/Ö4ĶY]$ŗ¶ Æ@ņFzq_Hų»ā~ć›Ÿ ^ x B¼¶Ü±žO§AłÕøt"2åwGˆ~ÓžÕ¼f#ń_‡/-M„”K‰†Y” dœWę姌åҵ5ҵ8J]ż [²Ę’7-ĆŚ„ĄŻU?Z|Wąż+CųQįSĆ×±]^ŽŚĘ²Ū?sĄÉĻ­~o|JƒQ“Õ“Ż6āndY “·žœzŒÖbRobģw–śC¾éVe°1ė^©šćāFž4¦šµåæŁ“ū¶EfvįĒ`ćN*śŽgćēĮōšĘ”„jŽI!Šź-Ū9ĮFn…GÓÆ„g?‰ŠæäŌ¼‹‰üWįčLmo1ßö¢A ?Ļ5¬;µ”ķ>/\žŠėž‡Ń\nū‰EēīśöĻ­bŹGÅ’ ~%jŽ$Ó4ÄÓß]k¦uĮ,¼e‡õÆŃųŽāļƇIk§ko-±üČĪ”ńž4ä—)R}5-7Ę^*ńĪ„¢]Adm®¦0Ś©9ĻõėĒē^Uą_Š>'š/‹¼qį^ŽźŽhęū+ĄŅˆB9öØņ0”u±Óźś¾™y¦O<ˆ·Hȃ•oSھdńˆ ™äŸHø„\ąłsmĪ>Ÿ•ZD(\ō­gĐxĖĮ~Ž¢/ux cr0Cž0 ćüB„“m+M·»#|±)É#ļ3!¹'Ō¦RG£GØx³KŃ-"Ҧ¹“°w—ŚOŌ×+„xŽ’U·®ūcR^HݰĒŽ=i4'wlņI3Nc‘3ŽGO­z†Æ§Ņ¼:ēN×.lŃŸĖ•°0:ŅPŠV>€ųįm:’]Ō.5mjkŻfX‹Z‰FžüōÆ®fųāx“‰tķbęŚa!) ‰Œc¶OLÖr%Ķ#į/Œˆ|®éļā†0 Vh¢fĪēŅųāėYŃåƒG•®ĢSćĖŽ>ś=jTư¹ĪßĆ_Ūw6vŚ~ج’‘“‘›Ö½jm^} GŒ<ӈåwĻ•)!és­µŅ.|}į-?ūś(.ē!aWłź}+’ųćš/āį]'Y׬­ī#o³·˜wČć8Ļ4BGĪŗ7…õy4»7Ō¬V;I²0yPĆŖóéšõ„šß‰žj7מצ·Ó2Y-U3å¶yĒųU¦Tģх«üE¹Ö¼oÆ]źĶr··SÉB01Ō~9ÆŖ~kÖŚn‰āYČģ>0Ųų§_ų}qį½ŹŽęŻŽd 1#ßßWåˆ-OJžĀF91»'€;?ę©ć+œ^1¾Ō|jńģańWÄ)Ćļī»šÉø“ cØLHĒ…ó8 we ·?ŪTRM©Y™w«OnĘ ž¤¾ć޹«.§TĆźŚlkq ‘Uķ§’t×ǟ“/|G­ųzĀmkk_h›ė XaåŒLaŗąŒžf¼énYń×Ęß<iāū5ŠĆ[ͦ«Ą6ŗŠ7gųA9’Ē«ł?ż½?g‰~xŚOŪi÷ˆ–ŗ¢7Ep~FǧlūÕŅ•™„£ŠüéeøŲ¦eŗØ”WUo-U˜dä•č@ĮĘÄ!B¶IlMQ™#ó¢üĒŽ¬ĘcęČPwŒS<°Ģ‡>½č34bUf•ęx£‰G@9?JƒķccBcܝÅ“ĒFÓd±¢ sÉ©3# , œćŠŹFŽΧ¦%†­ ]‹OéŅ-՜ī ‘Nx={ žķ’ą“¶ž•ūažĻšd·ś~Ÿń“Ćvé=±ł[ˆ€˜?0ķŌjm{§tūcįcž84Oiȉi|¾F§o·iŠįÖĻrłķRCŽ[0©šįŖ3ˆńʋ¢kś^©įXŚjžÖ­¤Ņõ;YŠ2IˆP†ŒŲ>Ēé_ēe’Pż’õŁ;ö‡ńw†īōėŲ4Xī‘ōū”xnō©żžPŲČ+ž­īµĖrbī|qi4vpźĆęMW;[Šö \Óoō%ćŌB5ĀęH߃ģ3\•XŚ:MśŚėT6ö÷ a?æŪĪī8Ƥ“vĮ|5&•ØiÖv[ņŅŹ™u€× ŲĶčZ Ś&£”@±YEn¤FOCŽN>¹­æ5ŃąÓÆ>XŁŚżŗk£1@cœƓZQ©©S×üQąė­ę3tĀ)›ē ź+˜¹“­÷6vü=k×£;œ“SķQdvÉ5ėKÖ-õ Ń,7˜&^E!öˆbB]`ńé[_}&w7_j £+œ•Ö¤ój%łhs·Ņ¹_ż–īé®4Æ2Ü«m+œMĮō#±ŽUĄYvœ|ßķW_m åG|u4K’é‹|ńžü$Łz5[+§[łV÷1ī~WŽķŠ. Z˜ē T<Ž*äXbaxxĘwĮö¤Ż†P¹¶ū,Ÿ»Ž„óĄ®ĘŅÓķvŠ;%Ś9aY9\Ż3»³閬Š7ų©)ń.—y¢„„¼źóŽWq…»×Ęæ¼8Ś<+„Ew¾|*żī:W-]¬}&Q^1’O«?sæeÆZĮš_AŃ£Ö¬u`Ńb  ęQÜqĪ+C[ń•Χ°ÕtńŖxm¤)5³U”šxõ÷ÆČqQµI#öœ²WŠ?>¾)Są×‰±ąĒææš,÷­3Ł”Ć[)ąŽĆ󽟌l¾"ų¢]CN„-ė܍ƒ ·WŸnĪGŅ@ū[Į¶:³™4;ū?ķI†)š2oÖ½—ĆzĢćĘžš–£sy„ŁO:ZĢņ!1@Xą3W] ¶§Ö¾ ń—‰cƍ·^ńŠŪų£į¶±i&§esü֎NYOlŠł ānįÆx×Ę>)°…m¼!w}5ōvńŖ…Rēæn½‡½qN„ŽŖP>Eńæ€ģ.“Zö‘£G©œœsŹžUĆxÄ×vÜ®‘ ŗ„ö’»žźS¹?Ją«TõéSŠś{෈āÖ|o YCwq§Ļę7Ģ«­čqõĶ}ā°kjÅ }§8%øĶrīĒ4ŃOTÓõńn!ŖåIĮśW+ ö¹ ‡?Ö»"i­Šß‰?õÆiz]ʰ"”Onf·xŪ<tūōüėóĆĘzCė:䚋Ėü¹'‘Ļq\8‰¶žcyቭēh%ŅeÉ’Œu®—ĄZ¦±­jßŲÖ¾Ól„šų9üŗWŸ7#č0t/©ėŚĒŠmōfāGŌNå•ĄčsžzWĢś†©yÆŽČKH]Ͼ—-§„Łū‡†Ł'#x¹/CĄ~"jpéͧŪĪÆ9\äzžµä¾øƒū{HŌ5rŚøŸiķ†šöčŌī~ÉWÉAĖ«?}ü-ć{ųCĆÖÖ6ŠŁŪDŖ›Žąr}ųÆ@‹N)*끁ŌW§NW?>„fיåü$j/ŅŲ€3ųW„E¦ˆ¤Q$.7ō®‡ī²lO»cZ .KiĶ»3‘šŹŸUŠŪQņb@Ē»õ«P>Ɣԕѵ”tlXÅąséĶ|3ūhü>øš·‹4_ŚF‰…ܐ錥VȐūƒœÖSEN7<æįÄך/Åm#[[”§iW±Ēń¾~ļ”ēŌŽ+÷|x¾5ŃōØ„ƒSņÕ·ö•q€Aü Jg2¦Ó¹“u©[iŽĶ}q®Ėy6Č[m¤ŸĘæünŚ7…¼[«|AńĢB)/U£ž˜lg?CNODwŃŗŠżLҼ æ>ĶćĖ ZėYµˆIos ³ā8Q·“³¶Õķb;^Łē•ńßߌ‡ ÓĮÅ«£Å“Ķvć\™5MLIößŗūś†G>ā¬ųÄö@6ķ µ1ŸSē±4¬Ė¾ šcY×ī9#ų…zœÆj®”ŁQ‰8&·ŒĪ6‹šf”,WŃ_Y¹‚XX:øźÆ'ųŃ£}—ÄP|K“ķs]źQ&GĖęē”¹Ēź+jo”ó™ęōœĢū KĄĶ¢kڜ¾ƒw'—pąó”oAļī+Ü’įYéßmt½_Fh.õm®öķēa]q÷}2qü«g~]UÉVSG™C%īŸ=å•ķ»é—Ҙ§Ža„~Uė>³Õ/-égws£Čę6ž1”_ʰ•}– •Ł~ĖPŃ“G»²–ńn9'ƒ^’š‡ā†±įė©ķ¼7vmtūø<™!#) ōŚ}kZQgN+±qgÆxsĒz=ʶś^¢~ĮØ9.ØćOuõÆŗ~Źgš}åģOEl„Ć1ąŽ˜ÆB‘łFu€tŪ<PÖī.5ū‰cĀ…|€+čÆ ėėv6‘“\ĘŲŹźė‹±ņōvā_ Ä{ķ4‹[²rȋ€ÕÕ|ż£ŻĪÆ|Õ4ŖŚ| ų­?ļbıi¾&G)*މ–ŠƵxLJ“ė-OĀ’|¤jŚ6”lĻʐĮķŚ\d8w‘®*ŌŚŲž‚ąOØfmańQöuæŽŻµčžMŸšÕn-d‹N»ŠkY ‘ą’)k)SŽGŠf½„e7VeīBsÖ¹nĻÕ'Ջŗ}ŗ=“­ż”A>Ē­mųŠi$ŅfG™É0 9$~'šæjö8Ŗ`”»GŠ\Ž\h²ŻÉ&ƤĘā9#@U?ÄW88ƦŚĒā&‡„X\ųÄßš£®Ł#Į(ĆÆ tėVŖ7”Tšō”²=ŸĀŸ¼_ń IŽ’Å~5Ե˅‘QąmC‘Ų ÅżØæf[]CözÕõ]/L†ŪÄ~˜j0JÜ¢#ęR:ÓŁ÷:cR;#Ą>|wų™§xÓĆSx‘ī“VŒł°ķ՗¢°ķ×ó5<:dFyŚ „ČŪGŽ$äšjž¦R’Õš2 HPŠč,4u•ā•›Ÿ½×­{XgĖ¢?Ź_óæķ!Åbc³“KŅ>źüÆ$ŽŽaŽĒńäUė7K|¼³1RsČÆRåÓó4õ gžÜ}·Ę=«LµÖ­n8˜õėœćšŁ+œĘž«$öū.§ipæ‰#µC¬ųŸĆŗ®›c°»¶ŗ,‘¼xĆUū3)jf[OåÉe1ÅŠq]Lbι"ĒåRćcFäślryī¬JóÅv±ŪÜø’d¤Ų¼ąsRg(Ųį®ÕÆnXȊ0zÓmd°–ęH'*Ž ~™śÓO±ŒŃ_Z hŽPł‘gZņūēar·’![EÜĶ®“.i»ŌeŠæ1˜¶ÕZō{cg,±¤sEsdŲżźzS!6mjiBŃᵕ&„©ró^\4å1Ķ[ W$/æj Ł›gbYXĮ…Č­ł4Ųīl&]Ø%žކƒ)œ-āĪ {q"‡ ŒvĶfXāP÷*”OŽj Ęéž[Ż#¤…¢éĮč+z]~vYłĀ""€"¹\ĄļŲsĶcéŅy³:ÉUÆ© —#©Žāaņ ūtüjģo²0’Eœ‚MJFµ¦£mk¼,šäyäż+ÕuČåŅ)€bpx #&pŸ¼Uƒ“"29Ųnj±Ēü«ókĘןš‘ŻJ/aIćeĄ$äJM£ŹÖąč²4j¬‘g”‚=(»ń®²æŗ…c–ŃˆÜ§ļ`¢°° ·ń„ōF­ˆ²GŹ0@®sVg½`ń*0yP}i(ŲMzÖրĄÓ~ĻaļY·–é:nP7ŌS0=/Ć«c¦Y>Ż ”Öf§qŽŽD§ž1ކ²rŪÜGo$ę)JnĘīÕĢ=ĮY×{³(84¹˜Ķø,$™>Š”^?nµ«ż“s$6×zQrœČč=ŗŅlF½ĘŗķŪD#° KfcŗLI Œē<÷¤;ā KFµY„×"fŲpØqŠń[^āᤲ:F2ØŖåhčŠ3ZÅŚ6d*ü äs’xžuéö¾“JŽ+‹ø­„Ib=šj%+ntFʘ^$’ĘŹü©nöŗi~ŻmƒQ[ō)sĻ–Cßč+Ļ«.‡U7m«ĆńĶš–m?U7–×–r+8Y_rsjX|OćĻ¾)¶šļĮļųÅ:ōßŗ)¦ĀņĮnKŗLgė\gR™ū_ū/Į“I¼Ņ¾#~×¾%V\%Ä^ÓX…‘Ļiŗ 8÷ÆŚ?üń&icąļ…t’…ŸmFČļ"eŒJæ_\ē9żjćLĀ£=M°š‡„ēøŅthęńŗ[-=Ō†MŒ8Ź žåķYÓ|-ŗÖīįńŒļg¹ä°W! 9Ēʵ±ĘĻKŅå{č#I·ŗ³ÓVNa`AB8'ŗ C\Ņō;ėm<éūFē"9„‹(qŪ$`Ž;ė$½“Ó--īe‹É½=6U«†Õæ“5­³ĮqĄŠEłŁ­ É±˜on-īŚn@ĖnYž,ń?‡ōĶ9$Ōn “PpvBĒļ`V±W·>5ų—ń]¼šõęŻEü #~śō6'~½N?.+ńSö’‚šü(żŸ4GĆ –ˆŸå‘ćžōĢHFõfē?ēŪJÉ”ūĻĒÅ’æ~:ėóė^:ń&£4k)’;FbU7 õöé^5<0… 7‡,H-õ®ųĀʝŠŅšEiOvض•rŁłzÕs‘ZTŲźźŪ¹ł†:U˜£2ŗŽvĖ©lĶ2›£ĻcÅiM‰|”PŲPՎrŝ¼ŽB•Aąā¶mtųacqt‹]Y˜uśRnĒM(Üś/ąwģ½ńæö¢ń§†žü7Ō5ŁZAڼčRĪŠ‚Ņ9ćæJžŒægOų#oĮŁĆĆÉāĻŚ³Ä_ĉw€¬d”‹hXōXŠćń“éŽøkÕčVœ,~‹ü*š#ųlź:VØ„žŠU0 SņÜ@ q€9ī9ō®·ĘŸt«[ M+Ą WÄ7²¹Šć\—äq»=1ŸĀ¼Ōtš2xį±Hń—Š5ń­kJ˜mxXEÉĻ”‚µ%@óÆ ų6mbiŽiīµ{õLJ¤–ÉõŪŚ¾ųšź)om¶ū?O(Ų낽Žk)L«w?Fü-š‡ĮzdG¦éśtŹU]nHrHĻē_C[ü*ó,m§ŠĒķ9rEąŠˆźC™fĖĄ^[kHl,aŅuKyæ’6ļéŠō=sĆv’ųvidņ„Ž(Ć>Gݧ³0s<»Ć0éׁcµĻ9Wk®xVK·[»c{w+2/sĆļ|]ŖYŹ©l`–ÕN=[Ö®ŲxŸQÖu`ą*ņŽÜP+Z®æ,2¤ó@%*ýP·üLV;Łć‘7;Z¶åŠ’SJµg†@QNDƒ'i¬ŪĻŻiökcē‚«ƒœĮ²¢µ<ĖQ‚ū[¶ž[;¶Ąźz“ĄVzä6āņ}iLń»$0ܹƏaް5å;ŪČŚ0֎£ŌĮŹ< Ÿ3uŅø}6MFāĀ+Ū&HЌģqĻŠŠø²$‘—o©j„̐Mh±\#j:’ZŻŗŅu‰-$m>Ž)®ćŒ%šÅ{ā¶3*Zk—6“Ć8Ž"’)$töĶImØź7a’/!×éŸÖ¢R&LŅÓ"ŗ[ä?ĀŁõ­ %T’ę>…Oj˜źĢäīdj[ę‘cŽŻ­÷sņƒ…• mlnte:̳t,®AĒŌt­RŽOF¼ŌÓ]»Ņf³™-Ōb Ū,äė]ę›t’#e„ ms[F6 ¬īćņž×S¶øiWppι§Žj_Ś–-am¤Y_łqBńżŽNyõėL -7KŅ­•į6³”xĒćY[\]I-µØk”,@$ōؐ­ĆwwJVī4IĖÜ‘]{ ų-$°µeŽ=»FyĮ÷¬Ą~ƒ¢ßZĘæ;ĻpĆē ;ūUNĻŹžaq˜ ?8~¹§ĢĄäīn­b-… ĄŽzqX÷z¼33I9TG=ŖKP,iékĆE0xÉŻ€k©°Ž+›Ō·Śžµ‹Üµ”¹²*ĄJ§µUm:’Wøg–ā0øĄ\nÅiŒå¹RźĄ[aE“œuėO†ĘIĢ)nŪ…­\w$ÅŌ'½³ŗ?i„é޲U›P”Ģ÷”0rN8ķ[—÷%µŌongŚFŅ`g f«źŗĶĆę%Ę:bƒS.Ę5q4—W ¹xUMeŲkSŪJŽXó>~ }jy‘2F~æØ„ĶÜbņtņNO^°µ-+϶y”Y%Œ.Ąā¢lĻ•œ“všÖ—+³}¢ŁŲ`ĒŌ sšŽXķÆU—s¦ēĮ=9®W¹¤SF¶‘öJĶ ss q󎕫ƒ„¼¦ś’ĪE}ųSĘOµ!JV/’i42ˆ¤‡Ū~8­ié–Ķ“SvāćŌÓHͳ²Ó&²“”,s‡ŒĮ­VūN—HžĶcŠŽćļyČā·JŚņ {Ė”Įas"£eXõȧ¬mrńĘćs.F[©§p?%—JÕ¬ÖyI\ÄäW³žĢžšÖ‹”ų£ÄBŲÜß=ė#Ū‰0QGŻfõ¾‚ē$„Šō}įźj–:·¬“Ø¢ÓĖ:ČYxC_ÆJņĻėÉ”iŚīi4ŚBŠÅ°ą(’8¤ĪY;Ÿ7č~ ]^¹Õ#ų;įķsG‹XRÓnīV=ņ\׏„v~ ųœŽ:Ž„Ś „¹›ĶIŚ=ėäńķZ{F_°¼tų_ńĒ\žŪҼgØģ°fm«ƒ·iūƒŠłgā'4¹Ł_ę1 }"¾ińĆė^0¹Ōēži^åOŚf0ŗ@z“Üżź"ŽW!¦źę{½(<ĖpFŲĻcjņ¹ō+¤‘ķēI ©ČćIŲØ3­šŽ•<öO<m ¼dŪł$u›šī/Ę-“]Fya²Q"ØlįÜvć[Wź?<eśW9ń+žż]tØī¤æÕt›Ė‰’a'źzf‹¦\emFŠg«/ųz;+›«.HafIĮ2§JłÅ_ uO…ž!½Ńµ}@ź »Y$-÷ē„Y£’9=J÷AŌ,ćĶ„0ŽĘÄ3‘ó8µ’ õ’ Ķa„ c‘ć"?/®{b«c'S[į/ĮŸYüÓÆķ%kbXw“w•QĮŌWĘž¼×žų¶īā[MD3}Ŗ9bŪ“sŒ‡­ŌJ{ŸLųs㯆µŪÄ“æ¼Óti˘Łe}§?NÕĢžŅōhńüLų}Ŗi‹©ZB>Łkæ‹ŌīÉĻ&Ž`nŪ—ś’ĖņG-ŒŠÜ+cĖnsÖ½ĻąO‹†ƒć½)ƶęX€Į*Ū±’~ŸÖ» g'ŠżCHü…dIm¤÷ķN‘>Ņ®6ā½G­)$ŌųĆö—š5Ä©gćč-%™į]ćFøśėھRµŽf‘XĢI 8ä ĀJ輆ĒÓ’³ÆŽn¼ ć›}6+«›MP$\ʄ…vī[šÆ`ųūą­SÚ„‡ˆ“å¹Ņa’Dŗ°ŗU;Ö@ūĮ{ŠÅé©ÓZHžĪæą—?µ-‡ķaū&xgTÖīc‰¾…4Ż^ įŻöŒnų nēżŖūj{ū žŽņßx;¾ņöö¬e¹Š}—į­N×Å~³œJ³NŃüėüJ}ėįŪėö)š×ķ±š+Tųq|m“oŠŗLr^xGWaóCp£"&=v6œg͈„Ļ-Ö«ÕŌ‰ü~Ń ¼SąÆk~ńLJõoųēBŗk]BŹtĆ4Š0X|Ń·Ž 8 ‚+ć½WL™X˜w–Ą 8ÅtŠ©ĶœU`bĖg…hå‘@ĘN{ÖtpeJīĮĻõÕ tg'³/¬Y‘0§§9¤mѾ„ŠRw5Cäœ(޽ŖĘļ‘J61éÖ Ö*ĆcfÜžzUØn]]T“”}©£X#¤“Õµ Üi0š«}“ĘZF”§ar¤‡I"`ĆsŪÆō‡’‚sžŁžż·dO†_t«Ū+$)¤ų¦Ņ–³½Œo1zÆ;H®¼š™ĒŻ:ć±ö”ö󇹱šO5G(ýyŒÖI4±|-äø–ŻĒ˜Ŗ„ŽĢą’;÷Æ2¢Ō£į’ųCĆ^Öuo ½Ģzw‡|Kqö›iMČ=r~¦æ#’m?ƒæš³<'ÆŽė¶& Š[LŌĒŹ²Œ$¤vÜ?…dÆq4+)š½’…|E­xWTŽD¼“™ć9ęxĮł\Lb±4Ų–,Ē!qĆsŠW”NlʤLۈŃ.%XꎠœzT,ʹBŠņć•ŅqMu3Üŗ ¼ŸĘµ•CģłIąž”‹óÉæäŲ3×Ö„X<°`¹õ4Ó ž\ŒvsĪ*Śŗ—T {⃪œ‹VĢ‘NIvŪÓ毻ą“Lj’eŸŚĆ:ž•rm4]JķmīvČÉ*ß!Ļ}Ł*Aąęƒ¾ ’B_†?ü+āDšˆt‰~ĖąoĀ_,04żMW,é»śÖ¾ŽÓ/æ“ ūćūZĀm²Gœ–O¹gMKOŗ» ¹3N˜Ӕjü„’‚»žĘ¶æ“Æģ×yāż?IøÕ~%ų6n¶ĻŌtĀ?} Ę@Eœ”Ē'ž9FĄš–—Ŗx'Äś·…/nĢļ†ŒÉøˆŸ— ÷Ēņ¬Ėéē‹÷d–ŹH;•¶Ž½3ļXՈ«ą­_ģÉ7ŪžIˆ;68ϵw£ÄŗÜFŪq]ٵRļM¾²r’[¼H8®hŠńŪ\.]§O<AØ&‚fd`ęFĪ ō E–k;„—Ė;[å'ףŪĢZŽ[‡GņxČīŠŲ.ē%ńŖ}x5OWń Õ̰E~ҳo “w’8 «ébKtøFwAˆ€ČĻ\V^æv­dń«H“7^ŌÄŃ.åhfŠIĖ©Z±&™fiāWĒ@~õ(źEg UKdsßėjŪ6¬(Ü9É ŌßŅęŠäČfqšŽ{Óo øŽdr‡īŸZ †ę–ҽģÉ$`©„½’ĻBÜŚüÓĪqZ N[J»MFęyb2"n .Üc«Ń-“¶Ō![øn ŗ1¦kܬb¼ƒä™žoZŁīöÜ6Ödl('œŌ8•~Ę„ā[«i^Å“ņ…Xģ1{Šō Ʊi”Y„݆ōœlųŸĀwV6°]Da(Ć8ó#šķY°\łVØdeČĄvؒ¶†ŠqŖĢ–Ģt„ެ BĘUµ²@bcČ,1ŗ¤£‹Ó|Is¦ß±hĮŒž€ōÆH­ļ.­.eņn¼Ņ¤!9 sЊĪhø=O–?hmcĀ’ 5Z(!¶ŽS++« ģ:’õż«ćū5“ńĶ‚j—Q@“#’„Œ²ēŠ×!³ŁĀAč}ššh~"Õ|/Ł$ŗƒķV‡$q€Ėųąqļ_oč¾3ŅÆ’&Õmī“Ė„"H¶· c®yÆĪ3hņMÜż»#•āš ńoĆ­SÅ06›t¶2XØ;#©õõÆŹo’ügū6xćOń¶s\J.`ø·Żīī¹ZłéVåŗ>Ę1>ĢųCć“ń6…‹tAgÖ܄ņĆ“Œę¾²¶šdś…Õē#ŽĖsipēkŒœC’Jó«ĻChĆS#Ē~$ńˆ'NՍåģÖ6āe”īŪ8P}æĀøöÓÆ5_ Ä4~`żŁQČ8Ē5āW­cŃĆÓ>}Ō,u]&ķtmVóž\Š9ÜגųūE…^,Ņ ń·….Õaņõ[CĮUlŒ”÷ź? ż]²øKų ŌāŠ%¶ŗ_6=§#žßžE:U3©7W‰™ĀĆĶĮė\›JßjY-ŹI’¤Ö½|<&©‡r3ę@Ź£=WĄkzl¼s¤dRG­{t¤q̹¦ÜŖ¤l‘ōźzģōū¤yćņaŻĮö®ØŹĒ4÷;¶Ņķ5+)-oU] ‘ĒS_:źśOü#¤fŌyG;“œ€é]4ēŠäŖzׇ¼CqÆłv¹r«’3ŌĶ~ĻP‡aOŽł€<Š%+œ“SGC¹šI¾pƎ:šś{Įś€šŚ’`Ż7y®fĢ%Ó#a:īĒAR ƒ;P¤ŃŠīØw;'>¼ļĐE.Uvž?ZŅ. SÄ5x ¦—w~U󟊵=c]ų”jv•s­[č÷P]Üd†5a–ć°®ØĖCjqŌż ųéń'D»ųm6©e­QžĀ.4üŽS‘‡ožµ~hxSÕ>!ŚŁųĘķ®m­® @väD¬?>+š¼^dzƒ¦uŽ3š½Óé7ęśv˜FDW+ׁĘ?Jń…^ń_„|Kyāż_Qę{3Œ ’rOlóüź°xni¤ĻŗŹ0ŠmD陭ky4m7CÕn "āhąf³‚«źUD’?£rJ~ĒHüźń׊.§ÕoŠ$LåW9ä×§ųŗĪęž5ó“x!G8Į§ žž'XŲżŽż‹¾ ·‹?Ė©Yi@Œš™0†a€v~?~Ž”š17Š”Ą9"½*Ķbi%;™>"Óįד«ˆ¢œyŹĀOzłżmī4æ驪X-ę—żā“‚Ų=>kՂ¹Ń‚¬āģw¾6Ō¼/Ŗ;6‹¢&ßĖĄMå°@õ5ćZ_„aÕāøÕ6$N€szõüj}ž]^J:•äX”4Lƒå;kÅ^ Ń~%|8ų…ą?Č>Å>—4öĻ‘˜nr¬¹ąw®j§ŅQ÷ÉéššxąŌ h.-ē{C>ŽĘÅCÆæĖšū;įgĘųK±Šõūā;[8„vĻ&sŒ÷÷é^}JÖ=ZX 'Œž:ė9¬ßO21*ŃĒ!ĆQÉÆ’¾1閶•†‡gql'Ó¤ŽC#ā±ĒÓ‡Öŗ#i`łbĻŃĻų&oĘ};QŅuOƒ<Öć[{xĢvé+ —±ą{ Ņ¹ĻŚ3|;ųĶŖé±Ģŗ{G9—N¹ŚBÜBOŻ=ÓÜVŖµŃɅƒfŗ3ķƒ²ĻāĶŻJö°²Ię«‘¶@T‚3ų×óü<:Žų©ńHóŃģSW™į>\; Ʋ«-nœnŽ’Ē6skŽń½”ѬĖfķä7Iŗńś×Ć’ ¼O¤ė1źÖ×ģWGäĆ;6TH½¦ErCsĄā 3qRGŽæ~ ßx\Ҧ³….E0WĒīĻ>£ÆŲĻ„ƌ4•ŌōžÓfÜ`]3‚ć^)1:v|ĢÕšōҵŪ\Fńł2“dHø'޳'ѼTuĮpāˆCäƒĒ^µŽž‡e'g”ź^ŃRśśŅŁBg&C¼eFў*žx¾9ŲÉ«žŅ?µ†øInö| s“‘×ҹź3Ś£+čv> ³Öļ/—Ošģ1É«“.cV8Ŗ–ėųWŠæi߉ZfƒmįĖ«»{at-°yŠ3‚7}s\“Ø{4pÜŹĢn„­Ļ«¤÷·}ŖI»nĪkČ|Wmjś«-­‚,” ĒĖŽ’„s³Õ…U”ó'‚5› 2ēšĆM9ļbIrÜ(bAĻÓ5ū»ćĻŁćįÄO čŗ|>*»‹Uøµ†ęĪE!‚·”#üóZBž—g>+7•„{=O‰üū/ė¾¾z7ˆ¬õXІaÄl;Ē„y©š·ĒVŃ]Q—zĶZ9Ø5…j ś&{N¬UŗŸ1[h7ŗÖ·­ųūL7¼„ōLöśÖoˆ¼5uiź1Ź ²O÷kĻ•&ŒŖÖŒ¤ŃÖxzŚżt5×­­ŚļGY<¹%^BBGJןRŲ¾bļśõv9Ż;¦\Óļ’_łh‘ŖõŗÖī³>*šŻß…®g·wI”*yŠU<0®ŹR¹āf‘żÄ¢A揼ž š¤0Ēv–ķ²7•a.££ ć<ÖgĄ­Åų“Oše戬t!ÉźfĢqF9śõ)Ęēćęį-Ļ­õ?ü;OŠžāƉb‡I’éd¾æ°Dž¹!±Ū;sĮ#žµīæ¼Cš÷B³×m¾kZeē…D‚å0*89AļÅuūކg54–ĒĒĀˆ~"°ŌÕ¤¶—Ž}1™seu€’Ɂųö¬½ö8<ę2v¹÷Ć 'įψüA ųŸÅśgö¦†…Š€{iˆ?2śõōoĒoþźŽ7ųqā_x§K••%ӑĀɰ·UÉĪį’pēWŪCęsŁNuRJńgČ_~%ų[ā\?k[åŅõåķīF§ŗ“_Ih—ŸŁ—0\[ÉĀŖr­OŠÅįZ•™ō.‘®>”h$ d÷Ē^+/Wšż–®ĘF+øĘ@é[n »åzµ‡ģńń2÷ĄÉćm" ė¾ ›ķF+’.m•zīČė×§jł‡āŒ4놅„.Q†Ł¼i8jrPĘĀ£”"õ‹³õ²“FW/äŃõ8®c%š­žŠōƦŅŅ×RŒ¬įe…—ØķG!čŃgŠxćĆĒNŌ“Ż.źKy¤R-ē^ mŲ×Ķ:7‰üEa}sῈr7Ū”ł`»ž †xÅhį”õ9e®z(“ŠEŠåUXØįū¼ūŞŃu8åŗEH/IVAĒŠÖRśVW]„”óuäFĪw·”;°HķXŗCkĪæ›`.mķ‘ŽédöżJĘP}Æ”Q5©ė—?üD»5$y/¢ˆo;IG¦EPŠ|Sā ź†÷JÕµ}ī'|©XĆŌ+HĮõ2ÅŠ„ZT¤ŸGŖ>’’…³āoŠædÓ¼W=–„©€±Cp°¬rNGSŸZÜš’€> G®ĆuØųęŽēKÓŲ0Óõpd%¾āH0sß󭼙üćÅžPĀĪUššG·có;öÅųh’ h½R8¬£Ó“^Ņ=FŻ<Ąį$ččv5Čųvud…™ŌuõēWVv?Rįllė`©Ź«¼­©ŲyAnŖ‚§šŸW„Üé³Ę©¹œ``u>•Ī} mų1ńgLš’ÅX4/Į¦Į¢“ÆnVEĪsĄ$N }’āė=3M±ž+kø-Š:r’©­é£ĒÄUhõÆŁkĘzvÆŚ[ƒV†u†h›£q÷–¾Ćųż”h)šāĘ«ŖA=¬ĆJ’Žžœ©ćĻJėG*®ī9æ"‚ .ÅNädB€ ‚{WŃVņ=“,ٛޙ­cĻ–ć>#yvSˆĘ^Ī1v’Ņ?ł3Dā'–!"®ć× Tp_ŽŚHV!”Ī:W­…Ž—?ʼ]KɳZŽEšviŽOo„m T@ĪŐsĶwÓ<Ŗ©Ó’kZ­­øDXŗėW-µ mė4e^AƒŅ¶Žę#õ·EXš¹Čō¬ķCBÓå“7_geuäx­ŒdgĖö(鎱-žO6S ’nhh‰=æKŌ<؉¹‘QņF„u·3ʆāŚI nõąšē13µIe{Ż-@7¬ 4gŌmRāDt¹ :Pg7ŠÖ½³ak ®ŅŽww®ÄĀöīŠĢųĖlńZÓŲČŖśB_iņŚBF~qœV”ŗż¼É§éI$’7El`AZ$RG®xVĒÄ7Ņu8Ž4Cžł#Ž» M`··al‘>VĄämXŹhó»ÉÆä»Hķ ‚HTņŁĮĒÓÖYa`uDģøcŒā¤åžē›jŚMŻž„4²¬Éį‡Oz«wl.”,g1Ž}ĶBÜ@H\ąVTöĻ$†hĒ ‘ŠÖŅžčœĻMhxć®kfķ-ķQV(›8ėļAœ£Ō–Ł7@UNIż+]t8ļ£Ā>%A¼ƒA™›}¢Ėl‹pH+žJŽ@§ż‹@–ͼŲYÆ•|żßĀ‚£¹ņĒĒ]Z /I[I¦‰ņUsČo_ŠWĄ–ŚåÅĪ£5…Õ¼žPū²ØąŅfƵ«%¤ó#œŸZäāÓšū™QæØ¬[ŗŁF·D“·¹ŽµrKŒœ•!€ļҐ1$Ņ–(Öa†SĒø¬™VńU ÆNڃœ×[°*n`Hł¹ę¬i«ö×H Cq(|`ƒ<ž\ŌJ=ŠQ=SÄś¦—„h¶¶µóYC» ’=kÄu &T…%€ī>¾Õ<¬ŅKA‘^\éöÄ” –QŽ“4ŻlÜB/Ņo!’‰HĒ„Söf&oˆõėŠ ¢Ž •¾’5Ä\xÆP—tp’€qņž@«ŁB&|Z}ö£,’•–RO$õ5Ųh~ Źe‡ 7 ö5ĖR­ŽśtĻL¼Ņ¬nģ ÓŚĘ’7VŽS–ĒN §«Ż=Ķ”Vķn±%øŚX)Ļ'©Æ>­s¢0īvŽšdvC­źq‰‘ļrUĪĮÖgŠ|_ż…x!²¼†÷Oø$± ŗF“ż‘É>•ΧrłśūĮ'ž2žÖ–gÄo‹Ś›ü+ų/4¢hmnx¼»€H ĀŒdöķ_Š’Ć/†æ?eļĆą_ŁGąå¤ššoyØ Qó²’ČŻO~!ZF= œŗCZų—Ā_¤o|FŌ¢Ō5K…Ž,Joa€=}jÕÓōžŠ–2no>ųSĶ-ь/"EžūfµäG<§Šõ‰žŲųU4mK3ܔa»“,䎅‰­KŪMUtÄ·¼¹[«›q„}ø$QČf7Į·–Vmw>æ ¶÷$,”Ź“ī*’Šuin>Ėig2&)p­ŲõIfa\Ēwā 66ø†õvŪg$dŁ® źsjŚt¤ZżĒ†5»7ŽRā ĀEHēō®ˆĒ ĪG\ń’‹u„Š{[ķ/V•NÖ¹Š5@€zŸń5łŸū^žŻ~ iWv¾8Õ­5æ"¼Vf˜2ĘąrœŽkŗ•#Hž`ioų(ĒŚ2é“[j^šD7£µŽV ,xĄfaś ×Į±Ē>k<Ķupģd’i³9'©ĶzPŠZ³™ZGvg;øĻ Ŗņłc ¬_<ā“ä9„PVYWc8dfäń֟"«Ū˜P)9R屌„ܚX>Ńäy@[ĶĄl †Ś®‹4,ØØG­&¬bäiĮ§9B"ĄĖ ±ļ]H©“e²zg½)2£Līüążƾ!“šĆOjž?ńĖŽĒNłŻ Ģ3޵ż žÉŸšB_^ŲiŸælæŁųwĆÖž]ĝ6^Nū.ŒŪ œ×%j¶Ń…*vŌž<9šĆĮŚw‚f߇'†<-"}BtA8ÜBާžIĘsXZߊt½ÖęēÄ^?uņ£fp%õ<ć÷Æ:GdnŒc×5Ö²Ö|fśf„1ū6,nņūۊŚ×|y“¦]i³]/@ķŲPd/äž„gch£ęĻkic{'ˆu]M§(Łōšø:źĢIös ‘ć óģj[XĒ*“ń¤‘gē8čkŗ³wāģńö>å· …ēÓұ'ÓoµėVÕ„‰¾ŹIł‰Ī½<ßX±0Nц Ź8W”kz^øĪJ©]=œo,26ś |¬čHėü9e„·eŒGyų<‘N™‹»9]GSµžāo°NĻbWw\{Öē‡ln¦Gŗ ćhĖdš+[1r²¦Æ&—~²IqzæhVیó^YŖ\„±qm2‹}Ē’yj»ČŅ ¢Šų–ėEķŚl’Hź¹Ä}[#µ?Mńž$¹h&Qo6Ņͽq“õ©ę:4 vŅūKkGüMŅüu j’4į ¦”-“¶‚ ”ł‘Ōąēņƚ‡5OkśÆ‡ZH§¹·Ÿc„xõͬ{æ‡|Qž•s ·n#+¼ōĶkų;ĄŚOÄFkK•‡R.\ʏ“LG#8 |ēŲ_µ;=*ßWšgŠ-µYP)ņ³ž¶kāļķ֙ń@š=2i¼6’<„mōĮ'µ+“mO'ńGŽ­µA£,vŗ<@Eh„†ĻÓßÖ»xvĪ_ Į«%½¼Ęm‹–Ē˜8Éüõ©ē'‘-‡ēŗ¹•cŒŪLAŲŁĪkKJšÜV·QZxą†Vr#ó8%{š“$’>½ńģŃįoü)†÷Į×cF…Õ®ķ¦ž§”Æhżš’b’ų7Ą“k¾!oųIõ›™dø7‹Ż÷CvāIĪ2pjć]®a®.Ŗģ-o(ÜvČ? §}50K­Ī_ų™ Óž#Ųų[Wń-¤ś~±is¾TII t»U) ˜ūÓÅŅx'Jų®ųB6^ņßɎi#=)ģkóWLż‘æ²ō­bjæjŃŻŚźŽqņ…'¤ƒ“ĶE‰)ų#įw€/_SŃ|L!Ō#ķ¶°čŁćҾĖų}©j?¼1meį+q9•+ķ Äg¹ü)ĪŸĘ~.ŸÅśF‹«ėŗOö^¶ˆĀF#hœdąćóÆbųšßDńŸĆɖŽĶ„|“£ė"‚xö=+7 Śļƒ’\éšĻ…ü_$VV,ÄlAąäōąWęŸķƒ¦xĪĻ┺ż‘‡YŠH) Ć&ž g·„;l3å DÖ5=:ęūĖhfA½ćq‚µļ_¼Qk§Ų¤¦;[ć偖Ęžšµ®»éŸ[xz/i?fÖķu#?ζăę¦zWžŌ³ŚŚ^č’.l­ćK›o.ćģ°mŽį±ƒŽćõØcQ±łłØŻéŗŽ£y*ˆ«–L(ÉQõėšĘ½ńæ‹ü-§§…’µuĶ”t¹m‡°ć¶(/CĪÆµ¬ø½æ ׁ’¾ÜSōMWū#XŅu/2XćŠt%ń‚@ęŗ£øåõÓĮ×±kZUāO%Ęč”±ĒCŠīaŠ£*Yœ’:ö¢”%ć/ Yx»I¼ŃļŅf²™#c·’^æ<æį\Ť]ßhśŠÜYŚ#“hņr äõé\®VGe8ÜľZ_mnc[ul\ƒxĮÆŅM^³ųÅšM–ī??QÓaņ-$ĆŒœóŽ>Õ3ŲčTĻR’‚[žÖ°žĘŸ¶FŸcāIfѾų­¢Óuu’LC øŚ’=~cƒģMmŗŻ¼SÉՔšßi¢ÜŚH‡!¢nAžŸ…D¶¹”é_ |K•ŖGk1’GݶBké][NKČH†Ė”`ńøą‚;Š€?™_ų8+ö"‹Å^ šēķ­ą-= ń„Ńé¾0Š%’›`‹9QŌ£6y!‡„Ž%Ó.­/o,-j_}“ČŁYŌW6Ż” ś;ÆGÆēsž§cĶēEÉIĶŻŽ¢Ŗ(3znĘGQ^‰Ē4=\° £€zśŠÓ1|ķ qŽGJ ČäĀ“Œž4ČĮ•KņĒ4ĘDބЂX(9ąąę¬½ÉC1|½ Ķ\Q“‹{¶M KäČySźkö;ž‘ūjĒū!~ÖŅü2ńž£kcšKāliŅ+¾Õ²ÕH"9xPİ>äŌ¼Ž˜>‡÷ćmwŗr_~§lāEÄDe$PGéTSČ“økŁ!Yb‘|¹ŠŽOÅR&§Ī_ü įæųkÄžÕ­–¼¶Ō4[¼aķ.,»HõĘ8ö÷ÆĻß7‡¾$ų Hń®„e·S†C¢xŖŁ~ńź©8ņ6ŽIģ+nič.ßšQŁŽļšåߍ4+hŽęĀF3‚v ‹fčĆר"æ.­m^ė°ČŪwuP@äfŗé=,cQv3$¶Ī[äŁøīĄūÕNģ¤.0™Vx9ŠvŅ‘ż“’Į’lo |eų!Ŗ| ńĶäŠxŪM¾‡ģ/w6š/@ŠEcŹļĄćŌµF5)uoć »&ÓučXézŌō‘IĆćŠóƒõõ¬¦µ:O¢DŠ?–›×ēQżļ„S“MYoĪŪķŽ6†h˜edR1ƒ\’Byą;ž GūŽ~Ģ“ˆuŻ=BokNśĻ†™¢ŹĒ±3Z+’…Ū€y T÷ÆĒ—ūJÖ™Vt 0¤t¬§”¬z׃t’“ZŒšŃiĆ>•č~kY5WLÕ-¼ß)ĖA!~Y<nŸ…qM·©æā˜¦“QŃīl'ū*Båßļ Š×ÖWNń†“ėi[=@»‡ĆįN1“ƒłŌӕŠēŠó’‡jļ'Šāļ,u}å9®%·RچŽŠqŌó’Š õoˆf½¬^ŁYę¶2ķu{šü¦¾×<_ąBóDŗ“¹Óń—·R§>ż03\ņ‚ź{˜=>ųc¬x²ś|EÓŅŚēSÓ/fPÜŗg ĒøÆŪĻ|@ų7ā ż+Rńƹ‡l®­É“mTœ.0§š\M„ēŖœz-OŌøv·,,ußį š7Ɔń†‹¬¶³ Ļ ū=Ź ÉĘ vź+ęjńŠ|a–—pJ¢\ ķjHūéžšµšņLż…KÄüŪ¶—Qż™~*č>!)ż¹ą).?‡RÖ<ćVšvænį­.L–²H¹\ĮCŲąWźŸĄÆŒ¶w–‘ųwY¾u¶dßnår#oLśģƓV'Ņ_k…å`½ŗńČÅfź³ļSöx×ĶQĪ;ׯCsĒÄDį–č]Ī{8ąęŖ^X%įūŲ#µ{ŸCĪ–ęWöKB@ݱ9qаKlĮć'<+µ3™š¶zĄb’Ķ+ÆJžūGU‰ Ą2æ*OPkxģaR'ŸĆ=χu]Ė'‘q*þ•ģVŚ„¾±§År€y„ķniKc˜Ņ¶ŅdņüäUyė]—†uFŅn’6v1±Įt¬L„Žt[ļ5 0m‡šģ Ž9T2O„ œņR»„mąąJó,v˘Ō)+×<ęŖ;…=ĻÖ.grČØ&%JüŽõš–™ćŸüųÓāõ·“†ūMŌmM¬–÷œ+“ó`k¾ƒ¶§”£č߆­ÆIØ 7Yy.’łZx­¤;•U¹Ā{r+Ńõ;üąĖE£ZÅ ]]µōķŚš¹ĪąøĄĒ5Õģ¢z˜y$ģĪ=5FžĆtŌęó-¢s±ˆäŲךĶömOQ·† Ăݛ­w`p¼Æ™Ÿ²pnQ:Ÿ½¶ˆµ¬xR;9¦·šā!_1(łzę¼ĪļÄ0Y,ĶÜ-%YIė^¬ā~ˁ§6•ŃóOʏ…Gü=yošūÄVŽ"Ti’ĪO”1žęć_Ÿ¶kŽŌntY¶‰­@ā7æŻ[”¬9Vē¶©¶¬Ļ„žüBÕ|7¬i·Ö7sZj²yŃJ²*Žų<jżóżj? ü_š„†“ārŅĖĘä[©| »õ9>’ĪŗčHń±tłex[Āzu“ĶKUM&ŚS†—•sŠńŪük恠ļōŪŲµD?4Ŗ>R1^µ9#ʆ1FŖƒ[Ÿ$ė—"XZŽ6+'#Æ5>ˆęĘĢANĪrYsĆU¹y—lŽ:kk¤¾ŻTŸ»éTndŠĪi„é0·– U°:‚„ē\ՙõųD~]G{uąox£Ā&.™3›»~6ˆÕ›8üó^³ix“é«2įœöļ^Esė0Ø©iĆ\‹†ˆķĪ9ļVEš ’‹’g抮»fóC)Xō%ŠW2†čż—ųāŸüKšĪć>óHń•z¼ߘ،œÆPkŗ×4[-Ąšļˆm-“Ū›K}¢[[„ ½[ƒžµz1Šhń(Քed~Ix·ĮZx†ū_ŃąžĖk†gš(¾īģšĻ­qŅéV÷pĶix¦{r„HĒZįÆAt>Ė 6sžšŸˆ|:uK h_ĆÓ.f¶żīs‘žx©ęš¬×h39*Gjóå‡=>VŠƒąį½Óāš5OõŃœZIÓuH®Å֟4d a—8‘{®{Ņ-O NR‹Hż‘żžæg/…擇Ć-WEųń¦‡_%·swįķnU’+™1Č @`™Ļ)œg‘Kš+öEšO…­~!ü0ż¢ō[ųņ[.ģ‹} ćżl8t8 s‘_GN‚ŠŒ¢÷?™3Ī+PÄUĮÖV©§šæé×Õw9Ļ|š’…õžųĆR|E|‹q” ~d U—9ėéļĶx§‡ü ž&’…ą}{Ą1čvIpö¬1K£Źøą^¾ÕÓt<9f÷³GŅ ¾ėß žZkڶ„.æšåbs,F"nm{¾ÓĻl{f¾V_ ųæćWŠ5+Ć3‹.2Ļo:”~ŸĆƒß‘Å7Aģz<ņäē&{ļģÕū ~Ó~/ųŸ¦ųn×ĆKÓ„Y<Ū©_ż§g1Ԝ ć’ą ?²W‹<ń‡ĀßŲų’ÕįžŚ'Ż– x5²ZXöp8ŽY&x®įĶsĀė&‘«Ļ$öčĒȕÉūž„śŠ©«ŲꚜRYh:|··8É`x_Ƶa7cō\§”|Yk>ŸØ\iŗŒČšŠ±2*œķę½'ą^‹cyk®ŲNńÅ)”Č“¾KÉĄüė>v}}C­0OҵLu+3‡»Ógšę·ŁČÅPP‘ČõW„~ 艦Üé^%“MSEŗB—10Ė:©=Ķc;ž~/«ĘŅ??kPt’‹–’hśö·ā/)e䅦Ö.2¹<ń‘XžæŒ$‡$÷é^mFÉ”ƒäŲõØņw8!¾•NņiaPŃž£ė(˹ß*wGξ5š Ōoęד:Ö[ć“"³cqõōׄ|GØkæ³ę£į½fG±ń¦š<Ū+… ČŃē9ĪGzč§#†¾ū_ģŁń iŗž›©kÓ¢I;7 ó;ń_Zž×_“Æ‰üžšDחš0Mķ+”ł†÷Ē5Óčy•pm;™žŃ¢µ’Ž ŲŁ$c'½{*ŚŻ”cė]4YųҰ¼?*=jŹ1ūŸ7žŪo™·nń[“j£ŪÕbé-PŒ)”óšö°č’=kīU·µDĪŠI'=+”–ŠE –pAćé]qg™=Š^JÅ0<ūŃó¤Ą¼b8ņ?ŲČļō厒żpe všĄÕīnō嚎BĘ0yZŚ2č`ĪIµ_88a&NXąt§ŁŽ10°p{ÆZ£ ;Œ¼¼‘¶®Ē­_Óõ¹ōŌvYG“ŻOj\ØĪR:ė ×Łī ’9ās»ƒšļ ø“²døH¾`r[ ¬œY‘“uw¦]JŅIu‡°ō®wY‚9m)w/Ulā®)”S®jWZnęU n3½ŗÆrųGį›[Ū?ķéNĶ‚ÆŒšŃ0=3V4±#Ź<“c‚ŲÅxÆāxt;˃§Y‰-"n ŸPsMwfsDÖŃͬicW° pVQŠéZZ¢ńĮrĻĒuīą‘Ž©ĄĀQźyö¹¬ź·ˆāśGrpŲĘÕĻš¬ķ sĢ©ę*ć,j ‡jö“ZNĮ ʇ‘“ńŠ„J6²Ū¾ Š@w6Va-Qõź ˜ķdgŹ£(Ļ#‘@Zd«śÅ Ź1ćŠW¦Ć¦„¾f ެø ¦‚&Œ]RŻåe†!œŒ}Mr7Ö’Łń;\Dģ°āƒ4|ńĻRMgVx®sm nF ž˜ąžžõó”Oö¢ĄFböŅ{”u;}Į¢Rđ§µyŪnŅž(’Šƒ`¶ī1ļXŲv6neø‡ęŗ·1» źHĘGØŖLgĆylĒß½!X³ö™Ö7ŲŠy\gVņę)!Š8øqĄŌŹV0jÅQq£Ø8 ÕŌć 銿¦Ą>ŅŹ&ić<š^Šc5—†Ęi†Ąc|ąŽ˜ö®Bē]µµ·{{hćĖ}㊮tb¢Ī2ęøÄĢ’.ć…'žkBŪJvņ[9ē'ė•4:©@÷ h6“@€ ĖźG½g@Šķō©&žŲ€½“ė€'s^Mi3Ō„bī™®ųo.4ĶE.ĶņüŹģ‡ĖĒ”8žµē—ž?šo†u]NņH­^6=ÆuĻaŠ×/³‘½Ńģ?³wĄĻŚsö¢Ö.tOƒŌ šĖ$/­j6ķ•®O2#ęĄÉĄÉÆč{öJ’‚]~ϟ³UźxæĒćKųńńQŌ6xAŠĀ`>o.#¹@Éė׎յ:F3™ś“uš×L¹Ó-µ’źWz„W?e³Ó¤ņĢ!z(PF§×꧆ĻÜ6¶1õ¢-JČ£½¾?֎‹ījćrżO%ŗų ųböā×LŌäÕn „FÉROOjł×ćÆķšĒįŸ…®üwń ÄpųbƒZ½ĄW¹8ąc9B+¾•+üŪžÖ_šWŸų’wĮ_…ʁ§JĢ‚ń×ęué¹XWāˆ¼AāŽ®©ā½sQń.©ę<žmąŽ[ÆZõiŃåG=V‘ĻG4Šņn@PšŖ;UY­T6Xpyčj>¤„S:#Ž08u¦AūÉ jœÆRiÜęnÅēV;÷ml˜éUķ¬Īąå²; WźbmEo‰c*œÆµlĒ`Ł6ą{֐/"ÉšŽŽāQžęķš±ŪÄ„žf'īØM~±~Ē’šJ插“·öGˆ>!ikšwį)tøžėP‡W°ŹŖ»Ąźx¬jNŚ•ugōļū>| żæc-"ĒDųšļGńęe[Ķ`ڇ™ĻŻi$”€ŲŻ^žåā­>=Fé|QćO\ėäyÖZ}¤æ*÷ńƒŽ9ćōÆ9īv(™#¶ųć’ Ću¦įē‡÷n.ÉdQžvƒ÷Æ5‘©kŽ š–‚¾šę6£Æ,j'¹wŻ“ź©õ<Ös.(ņ­O½Ō.“px‘āXŁ‹ŁŪk‚?ŠĖń©=ǘ–Ā+6ŪŽŸ-flyDö‰ØN•ŗč‡pČjķü?ą›{.[Å÷ŁjČ$··‡%}ävÅW8™æ©j7—vϧŲ²Łć‡ĻÅā]ĻŹÓ-ō}K[ׂoIH÷˜ć­;ܞCžń”‹Āztś’Žu‹ .ŪŖBd›¾ŒūWĄæmWM°»šĻ€lķ ‰ƒ†š2Ź{ž”œt.1ģ~]ųēĘ>.–mCU‚źöäįębIlüŲŗWoįo‡~0ńÅČmĆę«ofPųõ¬*Hßcķ/„ß³žm:]ź:_Ło ė&wgŠ×Ū:/…ŽŚ­­#Xķ“Õśā¹–¬ĘR;«›k}Ļ2FexėG‡5GævH7%±ė€@$WM4qŌg©E¦#Į“«)8Ć ēułßĆv/qssåۃä}ß­v:müב‰„øĆÖ¼“\Ö$æ¹¼’E•Š'ÆŅ¦[ åķ$»‰Z[`ńČZÆ}o©³$¢cAĮę±¤xGT[łµ+öó­26°8Ą÷ķOńy-Ż“š<‘eOļ©ĪßAŠ Q¹Fm7Uņf[,©\qڹĶĮŚ‘=Ę”2ŹYH\a3Ą5½Ķb¬um¦Ū®õyĘō9'<X:b\Jųš)!Ęx#š¤†f]ZܬĀ{ä6źšk_ĆóŲ_¹HeY.A!‘z­KŽ„ó—ĘFJégŽĢĘ×OöŒąg©–†/c" >ņY÷#łņ’3ĻÖ»_ź‡CĆßZł’dšė‘Šč09?j°ß\ĪööĀ#`/Ұ]žĪŽ4ņŗJv“¦©Ä _=‘3G˜Tzu¬][Wŗ¹Ūyˆ%^vb Ś B¦¬ŗƒ8”nø6åę“.4—¾{KČ5g·)ČƒŽ{žµpzŠhܕ®Vå`iŃl`sƒ]¦Ÿi;ʞK…aŽ}jfvi}§%ŖCvāÖeBØŹ2ū׋ųÅ]ŹysłœnČīhkEŌ¢ŠŃ"¹„3‘ĆbØ_,B}Ńƀz pk)—=ÕŚĆ=»ģņØŖö2=…ƒÜ.”<›Ū; į}…I¤¬–÷éę£$ņŚXrA®‚} ?±%Y¢",ä?ɞ_vÓŁĮ-•¼ ŞL ŃŠõ;€›/&“xĘŠz ™l#°ŽE¹…%*|ąHš§©ŁAynāņ„čĒ=hŽĀ2|1šŽŲėj0x†žY0šĶ&c'ÕAč~•ź¦“išŽ„mø)Ą'WBacē»O jz~±©]KØĶ+3hٲē·„cėHś|ņÅhˆź„tü*e5äp3ų–ŠŹŃ­ą‰Pį‡eōĶu<ßkHēRģŹ8dć>õ›V7 {M×oī-5(õ¦{(ĮYa`>oL£ÕųÄdø’8¤ į~mė‘lŌ¶DßC»ÕuŪ¶ž!å„q“ ō¬Il­RÅ.a%•žm˜äV ČÉx'»P°«g”ĒzÓµšŌv‘-Õõ‘hˆĪīā‚£‹ÕomlīYAW€žzRhĶtŽ-¬įŖļ9˜J¢ŸŪjRkXéö¶ļ!)"Č[+ž0ÆMPŽbĶ£Åéž­ŗ3–¬-”Ži[•…+ ō±¼GŖ1—™ŚC€ˆ¹ēš­/ŠĀĘdkź°¼/ää6T`\—‹t+6µ‹Č™­Ź’Ė@Ą°?C\ÕN¼5;ŹĒó“’®ķōūMz[‹‘§æŹLlOĶéĒ"¶ō]JĻDń&žŗ|³ÜO±dČRPœō=‰Æ«”{O:=nĻą„ŸĘ\j: Żéś¬^Y¹xq×§½z'Äφö ü7g«ė¶öz•ˆaŃ·K?‰ēÆ~jēˆkŸ5MWĀwŗ%œwióŖĘş#fIō× į„qX6Ÿā{jeWŸ’Āą—†ƒHĄśīß[šV£įńlž[NTĒ2ļÜ8āøļ |=±Õ)‡ĘZF¤ś=ä1ĀŽŲÉÜ£<¹<×Ė_õŻė÷:‰‡V½»Tvż±°sIŹę\ŻĪCKńö½ _ƦkVīĪ@d"<ˆģƾ­šÆ‰ōˆž¾mcNŒjź|ƒFĢ`7Ż«73KHų£éŗ-ģ:| o;IęØ_»ŽsŸŅ°4Ɔ)āYÓW°š+k«y°ŠŃüÓÜØćŽERFźZžÓ¤²ĄÉvZK˜£Ś{ą(ļłWwšSÅ“Õ$×5 -”ki|¶ćØ=GNæ+ōc‹ųłšĻKÓ|g7Å߂Z“6ńNāAD&Łq†8€yÆ4øÓ¬õXaÕ5Mˆœ•Š’]©51—C)LęuŸźVŗ>ÆjgyžT?g’Ļ—õ9ś×šü0Õ¼Gį/é—vŚ…ģŠ«•%ąÜÜÕ©\#SSģOˆßęŃ#ŅųÅyÕĻĘ _‰:uõ”ŸfŽ .Ķ.qߑōض†‘™ēvśq_;\…ø ū×rēf:Vę·sŖ^gŁÉq4VѾõüµ™©Š»ć;„iŽń&’!’ę<čOšNG${ƒ]ļĒ«O|Aš§…Ņ}NMÅHŠįĄ†łFFGQZÓew”ó÷ďų[MÓ<#įߌŚyؒ łR¹ōü+ö7ą_µūA§_^]_Ū=¦TżÕĘā:WbZ¢%õƒŽź^ZĀå³øŽ {gӓ^ń;„šwŠMŅ&“r-œŖ0Üd ōR?:ĀR0å±łO}0°‘-ļēåÉo”ć ž3^»ąūmUõŻ""xMŪ6ōźMI±ė¾Õyą {”ø¶ÖZEµFB“j¤1Ļjņßx³Ę~Ն‰®J·¶³A˜.W„8Ąo~h] V;½TŌu8’k™<Õ|ąóÆŅŲņĒQÖ¼/³v&’YĮC €Ä2ö?•)l5—āŒdѵylļ4ūĻ(3(2)c§5į^)ńöæ©ŪG¦hŗ„-§I.ˈVLģ#ךŹ1øł¾ źƀ%·ńNŸ¤>©x²m»Œ² ĻOół×Ż_~$Ćā½@¹»¶ŽTˆhHÉLą•&¶±:Śwāœ1/…,į³{{uH£œ…ś©¬»Oė¾i:ꋭYE5Ć)ū1›qI3Óh9ļśÓč;¹ž%źŽ"²½Ö5}ąæ0©—`ĀŹBņF=qł×Ė3xÓEų„Iż› Ė:L`x„+ƒŒH„ķæć[ūxō‰­Ū:»ģŪøķ'†?Jł›Ā^ Õtæj0Įx$CÄpöAøņO|ńZFE¹Xö’ˆzƈ“/ é6ZµÅµŅøx¼¼³¹•üv×Ä [[ŅēѼWaƦMÖ y11ž {$¬s½N;Ę?²Ž¹įŻQų…¤jĖ’õĢbā b›Šdp:wé_ŚŽ[ėׄ26ĢxP~µ˜)¶·cqgØ“ŗIl2„”äU –(#ø„lĒĢ ącœ×E7ŌŅēčģĻć‹m_A“Cžā4øtŹKüŅŽĆیŸĪ¾°‰cŒ&Üż¬ā¶’'SjĘ3:²ø!q޽kåoŚsĆö…£AāXģāXä#JO8Ī8ż+Šq:©Ė©ńŒ ł€ó›;¾ZścąÄY¼ā2 īŅ-ęM—˜üŁ=éŠĶŝ—CŃæio‡:u®­māķ$BšmŹ Ąņ%0hĻLƒ_Ö7ü’ö²µż§gK/ų“ÄFė⟃mžÉt’®źÜ/Č䞼.8ī=éGį±géš]OoŖCöv# śWŽń-æ‰4{K•e[€Hžć½c% fōÆŌ GOmņfŚO™jåÄ-nŽˆ³Ė¼oįĖķ_D’;A¾žŌļŒ÷GåŸĪæ<¾0ižš7lī4{ŪO x–³ė6„3 wƒ£Ų’2=ńļ\ŸŸµĮĶ#⇀u=>źŽŅ}[O‚KIāĒĶ«gcƒßnģ}1_Ģ_ĝ%¾hś·ĮxnÉõgø7vq®8˜œ|Ē®Gų×U)t&['ŗĶ4²bč§ŅŖMŸco^Łķ]±8dŒÉ×kį_zŸŠŅ˜›nL›ojb%I_Ė1‚ē4ńnĀHd’B™ąxĻŅ€-Ļf]É!˜Œū{U$·#ƒ·œuė@¦Ó),‡\ZŃÄš8Ķ3®™ōWģ£ńā÷ömųŻįˆ0j—vZ&”y –¦ŽÕ]ĆĖ—ģ¶2} ÆōNų#ńsMųąßüc·æ“ŸI×māÓ5¤¶|¤7@b7Ē$dĒÓ'”Ø©±Ót>ŁÓe‚kHōķĄźPr${VÓŻO Ū¹Vdo–@OŻ5ÉPvŌų3ž eū(ŪžÕ³Wˆ4Ż3N†ūā'‡šļ‡Õ£ö™R6[Ō‰P²ŒĆ_ē?ćĶ PšW‹o“+«kh¹xü¶ēœ«єäŪ”»ZX§į_xCV»-§G{gpæ:ŹäƒGį^­ ÜÅsæ`Ó«“xtcĀäņ;×%H’ąz®„}oyg~A‰¶’Xž•ĻxJ+ĶR{Ķiā–ķėvĘ89Ę}ų5É'mÄ¢K6ÆųŒź> KŲ8’2S\Æ~6×ŗ|,×åÕō{{=^ÖćOÖm ‚ę9Č š~‡šŽ”ŹöWW=ĀŽ(Ė«ŗ©NÕŃi’ĮjĶē/˜¹ķĘEz‘„é˜Śõõœ·*m”q†ę­hęI$Vu݌uļ]&GØĄöæŁļ0Q”²sW:Ŗź tå„ĄĖqԁ@|Ųµv'w^8ĘMT³{Č® /=śP&ģiYŁ–˜J±’ŹpG÷«A I=“˲3€„#ÓR} tŽYķĘHŽsŸĪØiĶ ž(k»ˆ ÜHfģ3@Ó;ŻOÄśf…&m—źÜČĮćś× ?†Ž§swq–}Ą²Š{S±¹ĶŦIgz±OŠO<Šõ»o [Co ój2pv®r:Q`<(Ś”źö #yZéģ|7iį™.n'„ŗuĮÜÜ3ŒQ`2īīģļP¬S"æ89žuĆ[ź/ms<ņPå—=hŠ|1¬Ś[Ķ5ģ«}¬›\qČĒõÆ8×VźMviķ±ä7šćĀ‘¬M’X”RMąŒ-wśĶŸ•”¬V7ŒZx‹‚:£zUÅ®¦Šg…é–Ś²Č·Ņ9Éõ«bģJļ\抖jkéŗd—‰4‘1łHŅ·±½“‘å 4kއš‰l3­2ŚOd¢mæhĪ0}+”¾ŽhŻĶӎ՜csnS•»Hlš”¶gž*ޘMv„Ą2cåoJ„3Ól/ĄösŪ%ͱĮ z©¤ÖŅÅķ#‡ĖEP௄)>‡E)WńŒų¦ßįŻż’ÅĀ}‡÷·1§&Hš2ž†æ#>,kZ׋›Ć·ÓF·+ä”r@Vˆś^ā¹Ŗ¾Ē·†’ŗg £ų›Ä¾K{M£†3‘ |ąŒtÅ}}š›ā·†uųCĀ’õ§ųn[„w ¹ū:“Œō隳œĘżćō>©öYū#ń_įīߣÓÅ žßč^$šķķ¬wZœv†$† ĪJüõ“šĻÄ߇šn›Äæ ßYik’+øƒMŒā`8ƍÅŅJēźxHŽ(ź!Šü1ńFŻt„M+PGżå·˜W“*ē¶k¤Š’hķoā]­·Āų~-3UšĢ†Č¢Œ §Ÿeó5ė8)%ÕXōcHõĶ:9-€–(öĻĢ Šé<yāŸų‡Äšn­uy5¢ĄŸfM˜Ucœį»’õ«ä1µ߇¤qÖ°\xB;Ķ7XøKĶPI*…=^2N2>„ ņ+›ūdŅ‘öx™ÉP£ łéUIž½žSń‡įGü%f›įöS­Ū±tć꓃ņž?į^įæj~f³ÕVāßQ²;g…†Ö®šŽ©R?Hž|QM[KŅī/fŠ[IŌy2nēčké;»T–xīģ†ŪynČ'{Ō*>&Ģėšd†+˜Wbw`w®męŲKŽZ½ŗē…V6cįŸi?{֐»ł€ē*xćµzŲće«‹x†É"??~{Õ«·?$„+/#žkzfs0|Uō‰}g¹ĒZ”į]Uaø¹“ 2‘•ÉāŖ[’VgŗčĘźāȕ°29ĄŖk|-/¢ŠRT–Ęqҹ§±'·hzžč#ČY”`óŚ»ū CtCsžĒ„M3žJŚHŽ£wŽžuĖų—Nk˜U×{ŠŚ;™ÓÜł«XŁ“E‚NƟ¾"|76¼ƒP²Ģ$ )G‡”õŻ@ōčŽ Äž&ńĮm{ÚÅóCxmŌ$š¹TcÆ|t<{ÕÆ~ŠśĻÄūézō é÷YŲņČĆ·éÅ{Ųe”ōYnKSQBžćµ-V{ĖŚŹĘĆ`pqė^W«^M ±‚uŠē ‚GzõT’Ń×ü)‘Ć …j·8’ų’_ŠŹKI.fĄP„ē–⼫G¶¾ń]ęŃs*”ūų$łW=YŲūŒ>]ŠéžŚ7z-Ä>ųϧŽ$öŖ¾N§Ü|”ŲśöÆÕæ üFŃü_ą+õŃÆ“æųwS€Æ™‡x±Š9S^Ÿ1_)NWGēŠ¢¼š—Ä+äĖ5¬ƒĢ÷ī}ę?:ō«+·ˆ[˜“ śŽÕÕčšqjÄ÷Ģś„ķ(cLqė\—‰<› #QŌoŻmģ­ y|Ö ŲłGāq\õO©ĀnÉåń,ž=ńf£ÆźV–Ö÷1Ė%°u9 nÆbŃŚ4‹d`"’85ēUHśĢ!茒ö źXÜ齜Ę5Yį+ņ†SļÖ¹}­nŪ¹ė\õ"·G½N:XŽū%Ė„½ÜÜ į Š9ĻœÕŻOVńž— ¶ŸįwPŃVo‘•3‰+zę’} }’>Y_‰0|<ńšžÆż•ÅĪX‹ˆŁ7·÷næ…zõƋō½RÕ|§“t9õö®ym©ÕJµm-Ćn1«Mź1Y7ŗu‡‰ķo¼?ā}2-KJ‘ ˆ¦oøOF_B gY޾™XłæÅ_³ßŽ|/*ßųK?hQ/Ś/3یņ ½·öųāŸ \ĄļaØéįŹÜĆõÆF•cäńy®Ėsõą’Ę­Å7WÖzžµk¤\†% ä*æŠ×iā/>šŪĻo§ĪŚ­ņ±Pc9AļžõޱZXā„’5+5”ņ?ğj>?ԟSŌ&nI†8ūtÆ×,7&ä ³q\µj\ś,.EXó]L&m¼ÜWO¢J­·ń3\mźzQ„cø‚ćØŪӁZ–ŒQĆ:ć>õ¤]ŃR„texēį߄~'č‡Iń rŚj‘¶ė=Fõ–ĒżE|ć?‚ž3ųa¦E¬Žéšę–ķµ.S9™sŻr}Ŗć”āc0\ēҟ²ŸĒ?į ī«iÆŲOw¢Č¹ņC±7ØķÓõƱ|]ūCŻ|AӖ-*ģĶ)Ę|°~f³ė]QÆec‚žP¹ł™įW×kY‘A ē5ÄĒ*o »’jż­ŃļPĆXŲ‚Wˆ¤œÖ½µŁE;€9ō¬[:}‰ĶŽ]:źJэ¤ą0ķųՆ6l­ ‚8„<’ƒćŲāÄŠģu~ų{ā/ųŠ;ßų®ūĀ2µÆ,/-ęhdYc†yϵöׅą„ōżŪĄ’µ/‚“OŠ:5Ŗ˜#ń=‘Xu @0ŗ‘†n+Œńœ÷ōpõœtgä\sĄ3;T‡»V;>žOśŠõ»A§|Rų#ćĶæõSY]L°Ļ¹ŸÅŽ„}ŠK"‘\j2"īņĀ™ĒsÓҽjuGóOą'–Pž#īØ;?ó7’güMń³įŌŚ“įJēÅŠ8±×4 „eƒŹ·n§šÆÕŁ÷ąG^Ҽ9żįŪĶBźoµÅq-°[«+‚rČŁ0tÆB 3ł’8Ę­l>z½n»Y~gӖ-y |I†k¼7.šé&©§ ņ£mį¶¼CžqœŪ„.Ÿ¶_ˆ¾;žŅæšQi_ DZv›YhKpā8eXr2Ż›y­ŌzįĘ!Ļ2©Œ­7īĀĶ·©śqū!|HżØ<¬üqżŸ¬“xd¶"×ZX#– 3œWŪŽ;šö”ĪÆįßź~מÜīHXl›pē‘ž}øŖögæšg4©bUz/™~Gēwƒ’gčßµ?k'Āæ~źq1ÓõyU¢øÓī7dy¬„¼·#ł׿†ß >|šN•®ü>Ń<9¤xWLÓäžŪRŽ@ūmŠ–góIä:ę¹jŃ>{ųćVŒ(į„jsŃśķo™ü›~Ó?·‡>?ürńmåĮ“GŅŅųŚXnŗ•Š©ĻA­/G¬š„„Õ¶”h¬»ŒnÜōČė^lā[šžK<.•jć¾ä{‚&š&ŠHŸå—¦ ^Óī§:“6¶ń8‹#(ĆØö¬‘ļ*mnt^7Õį†mc£‘“äŠė4KÉ5]ŻÜ¬“ŖćzńŅ“ē*›±®­„¤–‘Æé:¶Ÿ:bČ<ČŚFź·Jüęų™ńUųsÆkž šõćĮeqņ®’J“ŠgœŠå«#ļ8r›NKīyg€ü µŻü-Ō®å ā·­-ęŽFi IŁHĶsĘŠe߇å’$’8ö0ĄļX"Īķ`¾6óIŅ”Ā(ĘļjøŌ²9ķSĀ>-ų].…ńł„ŸĄ×÷"ŚsgģŅžžg >¾õź×ڵ•Å“%Ģ7I'͊ė…Ļ.¼ÕģTÓ4å„µŪŒ`äqÖŗEt`ļĒ5źP§ŌžśLqÖ3:x|4£Æų„g’¤Øżģ"It#Tł”dčæ³$™DžIÜGÓ5ģRGņ•t^¶¶(ŠÓ ‰óŽM]øŸg°sĄ®ˆ»eRŜQKø°Ī1L½±·•Ä*YsĻ\Vɘ4[Óķ}·PōĻjĄ×¬ļƌo:}M4Œ3®ßé†'“gņAā03Āŗ­_\ń=ōK öīlŲnNv’“[Ah>T`Zi÷Ś…é1-ʱ]‡q`ƒšé]’…“ū%ÄWj’¦āp§!yā‰Y ŲźõOéZÄl³ŖGŠC.ަ–(õ é¢- R“ģØįž,ąqč>•œZźdüŽkÅ^0ŗÖlŅ7¼Ū2äøĻS^{¦ŲĖŖ³Įqy˜ 2}«T×B$“;] KŌ|6—SZÜ<–2Ž#ŒØ=8’©u©ĖäGærĄš=v1fŽ•d59BL­ČÉćŠō-Āz,^s˜Rfé¶³R2ę<ėĘ[隁hŽ&åIžU‹q§Żmˆ“@@=MI&Üvml¼ƒŲt§?Ł…¬ęh#yvķ ԊD³ĻĖ,s‰#B@OœgØ40±łGÆk—ś¾£zŗ•²–ŽFÕn3YŁØ±3Åpé09Ć1M”sz¼0:IĄ98ķÅYŠļ4›ėg{°ęl²(øqĻćXIęŗÅ榩5“— 4yĀ©tgµhŲŖ “{T®ņ 0w1īJó­a|‰äæHœN …ć5€¤­/dŠĮx²9œśŠč®§ŗw‚9„ßnnÜgOÖ³±“¹™ułˆeTj¤卄D˵d{ž5J ØÄä¼Gā©u˜ķWE+c~UĄÄά¦@zÕ{3Kńøx¼¶Ū’:×£hšEķĆΰƳĀ>@č+š©“$z‘Ʀ„²Ē4 ūŹ»kOI®“ Ōį” 6Žź=ė‚g\$Gį‡~)ų­āįąß…:¹ńÅÓ¶ŅĀémŅHźk÷ö\’‚hžµŃ¾#~ÖŽ+Ž ]ÅįkĒ7]²0åūŠ{Ń–źŗš6‹†ķ<)ąė;?†ž‚(,qT õły?|Yųéā-KYų™ā J’ķ„2ڬ‡É„©ćå'ҽJ²1©;3v¢+É·Ž{ØÅR¹œ8‘Ę+²'V©B9§f£e`¬Ŗ¼€–!—95It9ŪÖŅ;‹ęƒŒz~v8Œq’Bęć­dćc_©<b@$rBžJžø­X¬At$©b# sRJō7VŹŹĀ!}{s 1OĪąnśWײēģIūH~לģ:OĀ/]i^™|Éi·ś/Āč,5{²ķÕäŠzœ‡üūÕY QŌüšų§ń«ĘæµŻCYÕ§æŒĪUį9ą’õ»W/į?ßxĒS†ź{™¼øŽŹPŁ?ŽŒ§Ń%cōCżœķü) ŲDÓŚźśœ J$2ļė_cü.џGšņŚ>›•öB3D7(ś žÕ—)œ™Üµ­…¢OtåčI9#5ęŚÆÄC§ŻŃd–]Ä£Ŗ”;˜v­>ęr}Hм3āŸXŪj×r\é{vG\†ö5ģVZv¤A2¤HåFģ/zč„zœ³4­üoįŻ6u³øxīž_rŸįYŸ5M/UŃ­ °Hä†EŚį—“2lłÖōŽŚY½¼ļ0qéK«j–ZäŃĄ°„›ˆÄ~p +SļҲ”l3›ŗŌ†p4łÆŅę!Œąä1ü*łÖ¬t£­mę“ õĻŅ”®…ĮŲŽ[Ūż¾J¼,ŁČqŒ×w|ˆ&€¹Y@8ĄĮ5Ž2-f(„6ׁš2ĆęĒAļ]}’čŅN„$>@<žųśV‘w¶.ė–z"ĒXO6 Ż÷~«’“Ņ!·Ō¾ŻnZ9qŒƒŒÕĖsŖŗ½Ōå/-𸽐“[6>Šu›ˆuN'ul‚pŖ6÷¢Ā9ų4x¬ķšŽĪįm"UڧųG„q¦·ŃĖ-ļŚĀd6ÕĘļz,"®§āķO@Ōt٬`I\±ĶŠ t®|y­kŚ•·Ū¬ķ^Ų[… ą nõZ8ŲŪ¹ÓmfTr#ŽO eü  p"gīäu”Ė”6čqŸkø²ūB˜ƒĄ'µsƒķSŻKö…­Čą(ĮĶI²ŲW‰tø^A„^IŚ9Cþ"²¾?jÓįøø…ŽÜF1ߘģz•ŖĮs‰į@­Óµźz„µšņžT°mø™­c#9£#Äz=Ŗ¢öžl7Ŗ¤,gƒÅrΚöÖkspÆ,,Ū~:U`Ėwc$$[ŚĖ§qź}©#æKų$·H¶2„ūÖSÜF=֝ul#{«pøĒaRŲibīu†Ż÷}Š{Ō•_Ćļ”Į FµfĆļÕtń-ģŗ|šxehÉ' Ą'ėųPjqžTk#M8ÜXćä …¢Š)ƒØo/?e-Ąź“łēd0»łUĖęE–+}†Ls‘Ų֑Ų׉B…‚fV=€¬««k„µ–źK™ā‘sņ–'8®ˆ«"”¹ó‡ˆ|Wć-^†[·’Ģ‚_Ģ'ЌŒV=Ķö­¬Ī’ŽM:K)ōąsLčŒLyō4×¹-LóœĖƒ÷›„Z“ń”£­Å­Ø’Ł|¼CÖ²žājŚ6Ņ]j»P_\$€ƒŒąWT4©$HīŁ%Ą(Į¹¤īa'©Ōé¶ÓH ÜHÓ.@Åußš_j6néē[DƒhdćmWb,élšlźG¹ŚrAēŪjśå¤z;ZM§“2;}öžBÆŁšF]Õ<āø.ķ­-n#•„uŒ×?i”ųŸĀ÷6:nØŠĻūņ1ŪĒ°ēŚ”¢ō±Ņė/féJ‹#`Œ‘Yś|ŽŒ"”“d·FļR™ĻV'”é^(žÅ‚xžĪ)aQ“¼u­H5½:ęŲMf—Ü­vAu9¹59Ū_ˆ¶ ØXŦ˨[3y,€ciģsǵp¹½qåƒjĪą”gŽąsJt“;)i±łą=?N¹ŠŸOŌdEß ¤dqßėŚ±Ā¶ųÓAŌ|=”]iŚr;«e F1Ōž}«čyĻ›QŌż_^ĒØi·yw¤Æ9‚7}1_%~ÕœzN”¶ś—P·š1łCĢČlüÜVMŲÖ'Ī>šzIį5y®J¶Č·‚€d“śW¾%Ō”n—KgdlŒƒŸ_ĀĪØ3GŌ§’õŽf¹cJĄžIĶ}„į_Ēš÷A›^š;;…K?ŗTŸ˜Ą÷ķLlļ,¾$Ų|Iš}ŽØŗ_Ł &ŪŸīąž3ž5Ąx«öyųgńÖĖPҌŗź# ³ØÄ®O-ÓÓ4ĢetĻ·¾i_üšśGāxäH¬¼‹‘vĆsœpB÷‡‹x’Āŗ4ŗę­qi1Ü»›i\×½{?ģĶį üJš/Šu-XŽŪZÓēXšŸ4Ż»ÓQ. ³Óo4ģ).-oævė÷՛W€|CńĪ›į]gI³Šu&‚EäO€Kö+ķž4‘f¶‡ńvĆI²¹ŠęŃõNčˆŌ÷Œ2?_ʼwĘ:å÷†/'Ö4(&š ćūīw \g–­Š7Šīü#āČķ|†Ō®n£±Śķś•Ķ_xŽm_ÅXŹŅZw.{Qc7LźmµĻ“A5¤Ņ•*øa»·¤iš£ŚM#ŚżŖT! ńƒŸ^ż+'tĪg“(|Gšæ‰nŹ;wKõl”‚”Ē·s_:xI5ķ3\æmNĖģQœ)I?Ö+ü،„©³éßhš‰u'Mxn"°ø}u’Ÿxśs\·ķoćo„>'“C½Ó$Õ,N4JXLädƒķßó©qeʓź{ĒĀļZųŪĀŅk>,ƒUÓķēHŠŖZ##<ćµt’’g[x)!Ņo®åø³«ČB§éÖ¶JŚʙņ/ĄoŁ—ĒzĻµż/YŅ'}<ŗ­¤×9R2ų×ļ‚žiÖ?“Ķ#Yū.‡sk Ćö’`3ó~&ƙģT‘ą¼»š¾µxN?k~*š¾”ŖĮovZI쉓<ćN*6a'cĖō‹ćϊ/᯶ĢtTŒłńEćpsų ÷oł_ ¼e©D–ö·ZL¶Ę5†N2FpÄœcņ«ƒźs½Ÿ>2ųŅ×≭“ļ=ͬI)Žv8 §+ĀŽ°}bŚkķbå#‰•Ģ3ČJ+ sŠ·±¤Cōēį\Z=ž‡ j¶:?öY’(“¦źłCVŅ~ß|P–ėĀ· øŁ(`7ueqžµõ±}O`ųÆØšĒÄŁ’gMwel[pb˜ģ?üøųcćč×[“ūEC)r±8äžäšŗo[śŸL\xßĮ·—vv:ŒöR«‚Ć”Ę>•ņoʉFāŲ~Ā÷G‡Æm„Š€ĪŹ~fĻ”ž”2Opų-ń¦ļÄž½šę½ss}„Ų+Bf’“Fß­|r,ŪÄ^$‚ŌG2;*”©cŽ?*’-©Ėjīņ¼{[`źzWw‘JŹ#$žē¦*į+›G”|3ń2x/[}WČ•ķŻ£ˆĢŲ8Ą:fæ[<+§xƒHҵK$’8n#*¶'lg× Öīz–‡RĮōéÖdQ#ä ;ÖÆÄH|B𬾽“‚Dx¼ØĻ–N;ō¬%+šSGä4š3čŽ#¹Š5%†Īh%1¬yϘƒ½nkz3iš„”°ĖäŁ9Y"|’«qŠ~æ„sĪ¢Šō)AŸ~ü<½Ņ¾0ü-Ö<-|bŌ5-6ńnäĀŻxük;öż¤ń¶£ā{Ķ+Įw3­†»jÜCu ø_»ź§ µŽĢģ>‡÷].«a­&—ā] ›CŌm㼓–&Ż£Ø<’"+ݾxž ?UŠŽč•‚U+’z5D—C9@śÅQ_^éāŽĮ¦äH£”=?Ÿš^OŲÆTųĻš;EżŖ|¦Y^|Oš ³.·B²ź:FrŲaĘc;ŸŒ3ó‘ƒĆˆV?ņ»’Ÿįs9.§š’ć=;É»WŠ$W‹˜ŁGŹŖ{Üיȭ4Ą®ÜkӁĒU 'j…uķö>µ[¶KÆ Ę;ÖŖV8ʾk³1ĮŻėV¢!,Üć"ŌJl¾[•hĆ”ć>•jL2Xcåō¤mŲ»vĘŅOcųUųä}ŒŠz‚æZvźicōÓž ūt?ģūXZjŚÜ,’|`#ѼMn‡å“rŲŽėĖčŲ,A’e›½£f“}¦jś4 cyę™-ŗ^ŲĢ< 20G§O²«.nŽ[YŗšÕ`ŌlĘÄRRAŽŻ9ÆųÆį[=KĀ^'ŅęŅ,§:·™k9QŗŽe9OnćņōÆ:[›Ÿ–>&¼IWĆ^#–ŌĢ"2i~!Ó¶üėŻß‘żÜž@ŸJü8’‚®~Ļó¬¶~,šå»_K¢D'·š4Ź^ZøŻƒōš!+37&~Eyäb[hŻbnĪ8ҳęPœ…łó­zP}Yn@cēv9Ķ2m€‚­VI]£kg'i'Æ­^¶“ĢtŒ²®A#=Eh-ܖ›„#‘ĄĒĶŽ±MÜR>˜ąƒŲūP4XŪo•`Š{T«ņmÜvt é‚Ō¼±ż²Ī{F%RŖĄr§±üėś¦’‚~Ū–Ž#šö±ū.|\¾ÓÆFõÓŃ„¤‚1ņĆ(Üyl€æPæB„‡Lcsśŗ²šH_N`³’ohƒĖ¼äĻn~ėŸļ ƒč+Ö ŽēQy®”ž94Łć:©®i¢œK-ō—ˆšŻ‚źŻŹøģĖė_Å7üö—įOĘ}KāļƝÕžųĖĶÕm#¶L5†¤£7P(ōõ«Ó« |¹<ķŁ“Šžs‡™©XAtdø•ķŠØ˜c‚ užńŹéī!Ÿ1+2÷Ļ’Z°”KhśwKš ZĄ¹»" ąœq\äPČi"įŌ-ßp0žXžErU§aB6=Oį÷“’jxŠI„·ÖD€4€l!—Œ0Ƥ­õź^ mwÄ2A¤,›c–Ke 3ŒW§_ėYĒM"i\]YŪĪŃŲ܋ū"IŽ@$j©uw%£*‡fĻ'5čŅfu L,Vmŕ¹"·¬œZ UsŒēžÕŁŠā:uÕ¢šĘk$_µœÉśRhöö¶š„ķčQ2 ¼ń»8Č?•X?l“M&k)āx¦@dŪ’,Üö’>µē:|ū¦"4ó7 c­u>°Ō®¾™ļŖ8Tņ3ėZ~'ńˆ¹ŃŚį€%W·.c8½!JŚŸ1•ŽX)Ī[½"*OpÓČ61žčäÖl„—’Ū)1d§OLÖΟs¶ńĶ.U³Šö¤kęŌķe =A«óx•Œq|½9¦mõ*‹ķ:m=ÄѰœ± ƒŚøx„s]Iµ *¶2;Ņ,ß²ŗ{c<6„ĘG~õM¼a=„ėÅ©ņ‹mÜ})85iSOoäø –=Z“P–}ER%ŒŽĀ£Żŗ¶“>ȋLÅ@°9šĻŁķĖO~Mfe„ĻØG#'œÉ rkFᮤĪVENrzÓ·Cj}ĢGø’kYķb™ĀMC"ƒŌ‚ƀ~8|8M öźxDrĘY× .īłżkšk”źP‰ļŅą\1bP滟…sųZćĘś.—āłZ-:Y™[€¤öÆćcķr3Žxį¼Ž‘mõ'“ŒÉa3œ‡·Ę@SÜp+ō?ö^ųĆįOˆ¬¼'ā­+FÖtMj,F’ģ‘Tž&’ėō5ó؜Ļܰ“łlĪ_Œæ›ąĒkŸųWļq7€ļfūM½¦Ó’ģœą@sjĒųńąΟ¢~ŠžÓV×_Ņī#OXŪĒ“Ø[œ~÷Üę¾34ĮøÜö)Ąöo kPxĪ8|MkCosƒ)ĄĶz’†/ķ¼1اö…±H%\$ƒ¢·l×곚¶†ńÓAž<ųgm≔ńMµˆµŌ"‹g˜Ćéߨ5ņ÷Š4 ćŗ@äīA·hĒÖ¾V¬Żīz&rʒłvČŲ”3ž†¼Gā÷Ā„¼ˆźöSĒs©6ęø€&]—œ“ÅmF½R:£Č¾ųŹūįżõ·…¦¶–I0eŻ'6ņŪ=}÷š’āÖ„¢j)o®\}»Ā’²øł­A|⾃\įÄÓ=ėRŌķµČ…Å…Ś^鄓ńŒ,ƒŌ~ɅłŽö(Gµ}>]šÅŅ;ƖĒŪŪҬÅžœWÆ”ć½ČĪķģsŽ«]\•ķÅmLĀR «dhĒĖs‘é\<¶Ói×+5°fQȹō­ōNŻvĻØ< ØĒ­ųjŅāŚŽH.£.A<©'ÆōŖ^#³HJ»Œ‚¹%ƒqŠ»į?„­ŚŪČīØŲŗ×¹ŚO£rź}Ŗ! ®§BuéĘpĮ÷„Ō/öŲČąU¶;VˆˆĒSę½j5ŸQ’US&ęĻZł»āGŽ&Šž;=gŒÄļBćAÆK mĻ ĄanĻ%Õ­5ŠĻx“IØ+[ö‰%Œķ•qŌ1ė×µA x*ÓNTŠōUG» ™dn­éšś¬68-Ū¼<Ėc ŗ’GŌžš=“ZaÓom!ŲUݘõ)ÉüłÆ…¼Q)ƒVŗ²ó‘‚žu×*vGļy[wnē–jRĶsrńĪ@zg¹®ĒĆ:jX–žÅ+ Åy•ϵĆBēaÆk×3éńi—®g²ÉĀ0ąZńKæĶ©]2éfC“±ŽßȚć; œ4¶:÷…ļjĶfčŻrŲ×Ҿųē ZV•cā}‰‘ĪėėaĆ/_Ž/~kŖ“81M±|7ńąŒ¼wįĻhZ&£q!!omÕcž.?¼?*ŸĆ’ƒž6š{ŻxĆągŒn|C¦XĢ“Żčęm²¼$üūS” g„zt„ŌłŹ”¾Ē)ūBžÓžŅ~-x5ļ4 “ūSf<é~W8}Ēé_Ič^:ŠüUocudM“Ź«$Hćo˜„}åßhiI„d{”– °b(¦w;qžõš÷ķ£ń +§ĄŚ3.ļ'Ż$o–‘Ž;:竵Ļ -O„ü„-„Vš†ņÆoÓāF­ļĻ$zW‘RlśÜ#;H|©¢oہÓMWøŠYÕŅ¢/]Ov2²9ŻVšmöØtKX† Õ „wścČÆ§tÆ?ˆuķ*ĀģD-į`QqŒV¼‡=LZZMüIųšßö€š,’>"čIp±lÓuXP$ö3…eaÓ}{׹>„į| ų·ā‚~=qy{¦°67Ūvż¾Ųņ’`ūuśV5iu5”‹»±ō¾‰/™ktT,”øļZqC‘3/Ļź+Ļ”lĻ¢ĆII ³&Õ\°GN;żj…Ś#oŒĒŠ Ź…6މR‹ÜóMgO½¶æ¶Ö"žC,$•Trø…uÕę¼łZy·–Ģ„ī?m—0–;žœņ—ķ뚭w4rA,LŠŲņ 2}¶<«Äv»āYA µ‰#ūĄS“WĢ ¹‹&r8éķYókc;Ø»uņ™Ś1šæeØO$„L”cĪZŽ Xߎvć·„3Ä~‡Åš Z‰a»¶c,KŒ‰uś÷­ĒRŸ.ŽxrćKŌŽRŸ#įYOo­{oõ -mŽ9Ö6‰H tŸĪ³sf|ˆģ®§ŠVf&GJĢ6ŃØóTæ$ńUP$pJŪl©ź+F,.AĻĖÖ“‹5åG1xŵt'kųVōVѲØī=}ėhĖŖ9*Ąéōin4Ł’ī ¤¶u<2±kCU··Õō]kϚ"ĀŅ~šdIķõ5Ń ‡™[™ó÷†¼o=–«'…„ņŁC"rœē.ś[ū+~Ūæ’eĒŖųYģ¼oį;°‘źŗō»ŅÆFŽ^vH;7#×5čį¦|p&;Ėke˜#QZėt÷Mz?æcöąGü+öLųŸńŹßÅ^/šĪ©šā©fm„¾»™#µšE9_6ułrAo˜õć=ėō›Ąf©ćæų‹ĒmāOų«įüeaŅī,eūa(œ²£Ķ{ŲvšŠ’)瀱*¶"wū)Ńš•ļ™<äK†M gaŚ»ļپ•ā ųƒN·†+«¦÷Īu’ Ö1ģ~™9ٟAXYFöp4ŖągųÆMXōyŲ錷Œŗ*§†yE}§­Ć(F”*ē×ҽ_Å0Ć'ƒõk™RŽ X"i’6Ф)ĄÜŅ”ĪśUÉKJ]{TŌ.ešošwŚ ī ǵ{†—āwøš=ē‚5;]GNugy/lŁ(ݲ3ł×ätŖ‡!cēh÷is†Kbæ»~Ųąsļ^“¦£Å4dõ÷®Y¢•C±‘f•p vćW>!Ö<9ćŻ%äÓ>Ż¢LŪfeņ2Xzõź¢Ž*­½ŃƋ_>Ü~Ļ«¢ų~ĒĆ!›S³EšŻpŚ`Ž=óžs_Ÿ¶š\RżD‚2ØēĒj&!KVuL|¤T-ņ­héę’é½½zöiG”ž^x…}{7Äb¹ÆMŁł'hžE‹‹¤Y†3 ō}*a>JW akъ?8ÄŹś×6ńŻ»ŖČÕøÉäŌ÷1¬!Q!”c#Ļ*£ĢInĒgļG8Ŗś¹ŗø sHUĒ\{ÖŠZ7c[QO.’ŽDŻ‚HµrvqŻ›”<³Ź‰=Qœ„s«…·˜×~ēčkŠō«K˜#!€qœa[GcžNęgŒōĶ\{&K*ķć#>ø¦i^ÓNqķCd˰‘jņéLĄFJ}Ž:UĮć+­27h•%FmŲn3A”£cšńMā4k̳~īxJåō÷k ˜aŽ3ŽŲéH“ßōŁ­×KÜĮ%ÆĢAé\Ž£å›iŒk°Ųw ]NŻĖI“¦įźj’›-“Šˆ[üƵ7 š(b–WMē“ŠłćgŽ–×N}2ŅāHŪ$)ĪhæBąu­z'»‘€Ģ›²XuZʛTšEAęO'Žjdō¢ŗP\źęśPˆÓ[ć–§įNCG;Nę^ģvSX™3VŠå»¼Šņ IeHūĀŗ?Ix!Y$ öœ‘•ÉR gøxŅhć›>µČx‹Oŗø¹ž"ˆūN[°JaĢĢż:)£’GĪŌ"­j© #°łj9u¹V¹ĮŽx‚v‘ü¢ū½Aā±ZŌšŅgc·‚y5f‘CZßĆó[“’Ū€Ļ\Õ¦š¶”.&K[€ v\Š £I²ƒč·–›TĮ2°$Šōm[ķ$ Źē ĻÓŽ¹*#hŠdŚ®¼šåвӓļ;Q*» ‹,Ó„rIöÆ×ßŲßž ńSćę›”ųļćć|ųU#‡*᣿Ō"ė­€½O8ē¹%(Ųž–ægŸ€g½?‡³·ĆĶ3JŹ”ŸVHD“\2Œf#$šO>ü ōét=ĆÄ āOǬėÓ9Äóµ‡ŪĒ?™©2“6ļ|1揈:¾›«iö~Š¢R”u sz¦ŸsÖ¤ųšŖo‹˜<%gmoꩯ%ĄŻ¹«6OćA¤ĻŚQW+ÕxVPĒĖ'¾+„mIęÓXĻ+[:|Ür1L6:Ņo/., 2n‹ļ’>Wś¹˽6vIͤĀ=æ2nAö  ų,Š£6£©ŁŁ6‘4ĮK}ä׈xĆāž—P²šńyįŲ—(Ä*jҚóWö¤żµžü²Ō®µĻ®«ć‹h‹ŁÅg cŲąÆÆ”Æē«ö’żø>?~ŠvƒMń.æo£ųNf-%“+I_› ć5éP¦LŻ‘łÓy2°š'"čį™G 3ėŠĀI'Y™‹3ĄōÆA+}Y–䔲 üłīGJ”%ŗČ„Édżkx=!#j™]Nß§JXTĪĖžļlžD²ävų ąĒšŗlM„NXTMō&׊č,4v™Q݊€2Ģz(õÆoųAš§Ē?¼EgąĻ„ž Õü}ā]Fb¶vPœiĘsŌ•–§M(ŃWģy’=š×‚.¬¾,ž×šÕ†±t­ö~smS‘ņõcź:{×īnæ°ÓĮ’ōMį‡-U™"Xöƹą“.qŪ×½yu*_S¶ĄŌ|gs¤fĮį­ ÷W׃ō܇Xˆī{ō®2ę=Yҵkļ÷×zÕźøXmI]¤…ĮÉą ÅK«5(xkڟ‹­_Ašü~š›”ņžŃ)Uc‘Ē Æ9Õō]/Ā:üŗŒO§«2yRÜ#oYņ­бOž%T1Ž\ŗn"ź3ķTWEæÕu[k-–Es$¤ćmL¼„•ΆxgĆ»®dõ h1Ū ĮōĻÄž"¹ā<±Ū žøÉā“Ń~m|Zż„¼wńbś}2ćY{+(\8·ųućµx•Ÿƒµ{ķK$/2LwāļoqXŌ©Ų“¬}išsönšžīk½jŅuŃÄj»6äoĮėĒÓņƱ¬> ųm­’ĄhŠĖüņį™OjĄĪSī{ׅü£č|°E2[§ Œ_hōÜ}+„Õä{8`]?÷…œ)Tź½³šŅÅŌ8µų}zŗ„Ž«Ŗų‚ī<†‡Ź¢ć¦:f¶ō‹]MøYRŚ)ö·7×"ŗ#¦.gŃŗf§nŚ$RE=ŖĘŻ1Œ~ć^5Öd›i“‘¢t<•5Ŗ‹0s<(Ś_^jØęākrņ_w½{R:žhŻ]E@ šŁō4IX–ū{=ā$­0v‘󏥬Hµ;»IĶ͊N~•%F6fܓiz…‹]]4Æ ūŹ+”’KKµ 7yÕ—bŹ:¦•h–ŠĶmv“?$äņ1Hn¦ø²CŖü£żšĢgam£%ę™oq3'NO–x?ZĆńµ°ÓŒŃÅĪvƒŠB<’yęo·Įū°pŲ=kjĖs#˦^,VźIĮp ö¢ĘŠ,‡Lµń ½ćCØģhNH uāµ¢n”&Ė“’­ėķX¶)Détæ>ęą#͈ĮĪńZR/–īØūw™¦¤ĢŻś'¶¾L¹6±”fŹ”=×/¦Æ‘ój”lóīkMD‘“®ųzĒTö;€ŠÆņØėųVuś“Q»ž0rŌĖQ¹LjtĶTīŒ=‚Ø œē5§{}©Ė¦āēldœ)Ēē@åO§jsŲ½ż„ųŚFGšŒFćōĶb[.ķŅ+ĄżŠ8¤Ł&^©&§äČm“Ł.¶ƒ•R’nx­] Ā;|ĮhdĄZŹģēFņK"š‰;[©>•ŅKyyˆķ#8ć­\:? •›»kŗÅž³å ā…#Uē zśW-‹?–^ƒ½J™q&ŠŹ`¦E,ņ¬)fŗ±·š5ŠŁIĖo9©w(—j[N^&DÜ20xü+ŸÓŚųėrwęFX›ųĻ5“#ŌNG“O¢éāÄÜŚ\Ē3–É©gŠń’ėóŚ@ŚŹāķŒ›n?væŽ?żj±ž9ć]śŌ6ÅŚT ¢0c ūsŽ­ŚŅŚÖ(§6Į¼“ĪqA¤gÜę®ō«›«®Y•įł×@<—pÜM:$Œw$szĪV"UM{-‡Čq#“ƒČö5·ö£$0Ż/PqXø#=ljXŻ̗¢±ź+µø»kM:Rņ. “£ L„”£ŽN&,¾\œÕ/\ˉ‘“ėÕNxZ¶LĻŃõIĪFd^É·€+ ^³]ZऒDś€łŠ9ēĻłõ®i&j„Ųć®tK唖Ń½Mn\ŻŚĘ–Ņ•ī3²µ“}*ķŅūO ¢åyRˆPht^ Ōę½¾ŗšÖ›“¦N£‚ų F{ÕKĘ9ń’ƍZo éöÖŅńD~g•æŁćž½O0r¦|åāˆ¾6×R¹ū^”£^ŹT•·Č0ćIb;’_ƨДޯA:«\]M5ō³@Ä(\}ĆĻóҼĘŽ)æš·Ä;MLG~ņ+…wbJÉč£ńQ9\u=Kā…u’xqõŪ;7‹LkEžā%ĪįŲę¼Óö`ÖSĀZŽædĶq§LŅ:¾ē%$=@?iĢ\mŠökÆź7Óźrė÷Žeם˜™ ł×=žÕå¾9]ÄÖģ$hÅŲŹ£måX÷¬‹ę„Ł2ŚŪŹäL±ąoīøījÄś½­Żž”l®®’(†<šÄR5ŒŽ{CÓu‡Õnl䓸}$¦RUéŸLU "[«/Ģג’Ä­ĄŠ‡xlzŠR:#„Ø],6F=„žHå±Ś½'Hšž”s Ķ{=äW&ÜżŅ~hÉģµe1yšĒˆ5énuežŚėģQ*¤3©WõæJóƈźēS}M#hŲÉöl@ź}ź”ĒŁ? <_įĶ Ą3Üjwyøœ ¶AóńĻ>µģ&šü,ļ†:W‹åu9„0¼‰ø©^pOé[r’Ż/Óļu=>ā}ÓTY„­×£Üžµģz‰į·64ŅyŒB…#‚Ž•-XK§mā»ļ ]EŖXiHīų>\j; rÆZūƒNųXß~É­jz„½¤ØŅĢsŗ29ąõ'ަäJ§cą‹}2ö’@Žén2F%«åˆŽ4×ō-`xFeC„’¬‰Tä–#?„3mO»ÓķoŻ.U×iČt|ʰ§X|7=µĢÜIfņ¬eā\ˆĮž#ķA¤eŌśKĮV:v¹tŚ|7y"Įäd;WYāļ‡ŽE¹ŌRk[å ynœĶžĆõ „3į/ųMķn/VXgrŅ! •8ć'Ҽ£HÓg±¾:Ś0:šJ—X†:’ö¦h¬¼ń–ņóÅ·Ś©7ÓŻO p\ؐ„ ļc '=«Ń4’‹Śē‚“ųyāYu½=­®\I< Łå…fxŚŚĻRµÕ“mwN·Õ¼1ØĆ&ŸØŁĢćš ©Ü¤FLr2;Ö ja&óÄ’‚~Éŗßģ‹ūOx’ąÅ՛Zx&źGÖ<%#)“ZJ弰篖w)Ļ÷kņÆZ³xåd+…RsF¢’ŗó_vń9jŲĖļ¢Č« 즔š_-¤Ugć°9®³Ž[•“ęrT¾}ĒZlŪ8;qŌęƒH°W–v,˜ĒćI€ÄžT ×µ†6q!v@Tņ*ŪČ D\š:ÓæA ¹ÓķµH$“”>8*ČåYXt!‡Nkū­’ƒ?n¤żØ’gųg߈ŚĀĀėųu‹8ןSÓ8ĖĻ. 0™9lTÉhn~łjv¶†ƒo Ę= pRjn”¤¹Q$*ŅD[¾qśój­M汳ēńƒĆń_…ž"¾‹ļ„/­uūxć" ķÜqМõ÷öƎæiĻ„ŗGм1āļ 鏠¶»Óf1äÜY:³2dĪ8ķĶdUćÆćæĆ»†æõ-5žĶ‘vļ%§–*yM½3޼:`ĶÅIĮ'µwӖ—9ꢣÄØgi>՛)rź­•<ē é9Ł.wmB¤0ć9Ŗr+#ƒ–=GQ@ī$$ø¹éżižZŗ™ U# š‰DØČdGg=óV·+ڧč7ŒŗšPøu!0*ōļƒõĻ‚_<;ńK9·†U[ø€å¢Ü aŽćÆįWĢvAėcż’eš'Åæ? ~?Xj1ź¶“i‘iśē•'™¾2¬®G9õ$ń‘_{ų^ꌎÜi°ød?¼·ōt##ĶWs[µ8åµøVv®<¹Ōwµó‡ķ_ū8h_“ߥ|)¾‚ufµ\ŹplõRceaŹ‚ISģķ\°ó}ųėš¦ėąwÅcĮ𮕨ų~åī®"žÖä’līŃȖ'n™Ü=ˆÆõŪ2“%—Ź ķö4¤;@xVMWK·Š'ĢŃ §ė^™ąŪ6±Öu+ē¹kƒ¼Fń² *‘Ó§”®Z¢3m~ĻįėZZF¦Āēp1~2O8ż?:čt’Ē©Ž]čRĄ÷wƒĘoŅøąĶVĒÓæ īLjn5 į6j–šīņ›ƒ“£ņ?•v6–ŠKs,ŗÉ“ż ķ„.‡=C“ŠŃYļTR8ö¬ėØ<„‘²\Žqž+¶.ēfŹĪęęĘŪxEµŲ;ŽīĀŗ«KO¶ŚD.Ažąœü½ˆ®ˆlgĻŠæć :Ö}pk•@v·b+„Ņ­68”*£©ØŃ3Óō[Ÿ²²\TlV®³¬[ąŗ½|c<’hę6öVk‹«Y¶«Ćڤ³™ķƝw£ÄĒŖ‹Ō.vöŗ“Ŗ\E 6܀{ćҼ£S»ń׋5 fņ2øłs’Ź1’ ֜čŚ>g²éśe®“˧IĘA2“ōÅkź6 §X¦·k"eīBpyؔŗ ńĖūkvųŻ;”@HŪžrūC„éé7™Ÿ½ķR3[•“Łn‘Ń.ŻĒާŅmZåžG\7@(°&&¤¦ŚP’Cźø"£·;¢0šĖż(±¬dPµŚNTŖķœ]TzRj¶ŒLĘJ’7­zsU»µŃå—2` Ļµu–ö:~±įGń…=ŃŒƒ$`ĆÜŌŲ®frQŽl‚K»ä@FZĖžŅēPO6hČåsĪ)œü–m ŅG !Aź~ -üÉP¶9üjdśXn»ø xĆłL6ŸJę4ų<‰Ī×ĻZĪ.ƊW;x šõŲ~ķ†ą:W[wįøōż) Ń{†r­Ēž½93XŹĒŸ®…©Nņ=¼G ĪE|õń¦Ž}BÖŅāźsm‹ćÓ±5ĖPī¤Łłßć/ ż–GšÅQ¬‡zžŁļ\N¢Ķ­ėg6ždQ°`Ē#sC^m]w 'Ģ„ŲśóĀ^*ŗ½]?Į:Ö”qsqĶ’<Éū¤÷Æ~ųž ų[ćx/ō jōxpJfū+¹*’–ĻŹA^}[lĻé’n½OČūļÄz†”ńWkŲ¦}Võć Ž§8čCšóā‹ąė_IńmŒ3č·*֗ŃN¹3Ćd{JųüŽĪ:I z5ü3ų™įÆ üAńOĆ="k[½ ®¦}!ł{vbT”=ԜWÕSź"ęņĆI‘£ø·,Ė‚Ź}?é_•f“5hN'¢ųsÅŖŗ“či%Ɯ°ł‘Ź[6Ī1ś į~3ųLjö©xJŲ5ųˆ».ļ–R=+ć1µ7¤|i„_éńI}}Į#īēĖ>•Ģj2 ‹Ń+»ĶÉ5ÅŖgÆEō<āŸĆūwWŌ“ōG‰‚±(:63Y üYqsöŸź¦źI­ć ‘÷ϧóÆS^Ģu)č}[šóĘÆį;yō­Ve?ΛޱöÆwŒĒw7v³-Ķ“ŖA¾Ē‰V±óųŚC„H *±*ÆJlRČcņÆ¢£;Ÿ1^6e·Śæ5G4Ö»$!fķŽõ×Lā›čGqbą³NÕĻ߯ŚZ—äąü¼óƒ]:_”©ąOĆįĶdī‘šŹą¤ ųU' ×ōī:¬>e¬s3‰#pϧ­a4iyÜ×d¹ c=ėŲ<ā³sZĢ«’p¤šĢNU¶˜6Ž ÅsŽ!×ā°I­ź4Ō»Ē"šŹ£A·”āZõüzUō¬\˳ä#×ėā#Jæ¹Ōµ‰õGo±¼ĢŃ«>ģ‚Oä+ŅĀSwHū<—)ÉE#Š“’²ż›ĆöØČ|“Ś sĻR?µßŚxF_ <ś†Ŗoc§5÷یOčL—.XxØõfg‹¾#Kc¦É˜mŌ)L§õšĪ¹w>„©K89Üß)ōę¹+Tgé™U$OacJTW q‘^…§Ł…E.g‘^lŁ÷X8čjj¾ŗŌ4{‰ą†ćj®CŖ““ג\ų{ā6”‰?ü"šķ‘é$C$żF8Øölō£ŌĶńW†ē½G‹ žĖS #k{’ct'§Ƶk\x6Žēlz”ĀI?0ĪŃéĶ\Uˆ©Fū:ż³x6śĪĪ6„kug’Ž2­ńœć°$ó^“šļćŒ~źpėžÕu¬ĘW;²āD•+Ó”#„vÓØxŲ¬ ģ}?ķ!šćĘ~8ŅõoˆōRäČÆ ø¶Ł†źI=9=ėō‹Ā’?ą›æ-,|-ń‚¾źZ~ŽīÖg€¤`c‰#ś÷zT«Ē©šœK—ęP£ķrū9­lśłN|UńWüĄ_³ę¹Į択O‰ś5„ŗ¾$š§™w©\"’"”1łÕø\‘Įģkł{ńŸŠ§ń׋õ?ĖÅ£¶q$¬$Œ°ūŌc'T¢ĻĀ N}‰śĆĪąįļ{—VŃ­—’¶ž{›z©iµØČ=Ez„Œ‰*+ÄxśöƽOč5;#¤¶™ćA"*ōÉ8ę½/ŞńW€¼?¢ų§X±ŠćĆ„D[ŽFr±ŹĄķG‰ź=qDbŪ:źÖQGĮ®§x¢ßÄwæeYźyø“8Ų ÷÷­~ÜxkN°›Gš·Žķę‚h.£+ĘŁqĮķ]Ōc¦§‰ÅٟAŲŪZŻY„ĪšČNw©ūµły’dųy¦[ėß³ēÅk;Ÿ'^dm>ęDA™Q”_łė[T£ī\xLSs±ó/‚tSTšl¾(¶žÉį·¹6³Cæ÷‰čŪ}:×G$¢K}…óÆ {—Uŗ(EČ;”ä~•ŸĘ+6x•ČŻdĒ»±`« ¬A^¼Wh÷:EŅióZČcūÄ+g¾hęź©Ų\‡DĖīą½č»tP3OŚÉj]Ńü§ųÉī4»Ż^=!LlÉ+x}ėĻāµ:EķĪ•%ĢWM˜÷ÆFĒzžcžHģmaß Ļ-ķŚ {Øm¬¬CzWE9^ҵ5¹vQœQÖŗ›[–Žč29Qõé] FGšųūLŪó_Ā®ö2…Ą<ąŽµ“¦Éå ¹E ‚3ҳ–är„¢»[åĘ~cĶl[Ŗ dvŹ0ü©Ó,.Å`#%{SY$W š1Ö·EœŻō-ŁuSƒŸZܶ Ø[sć4Ó±•HšbīER’“Žõ„§“72}‚P’A?ČrqŒūÖ“äpŌGĖ>0Óįń)™įxŒs1Żvg·é^¹ xŽ7Hfßņą‘Š×} ‡ õŻS¶Ö"†ĒQŽŁķęqł€$œæZūūöŸöŌżŽõ}CÄ’³żī•ć/ŽĘ²^ųgP˜Ķip:«G`UĘp •?…{+3óxceu2Ģr¼*-Öń}æT’Č÷_‰š]«‰ō=oą’şŁ×Uųwć+Ø~ĒyęÜ3@A8bŖŹ‹}M{'ģū’jųšóĀz‡µO…×GIˆ&Ōō„ŠG?‰üĶL×­Nŗ?ĻüĖčĒĀŠ,%u+½.­·}^§ėwĀ’Ścöcż”t O|5ų·į ŲåŚĶt–÷00ź…YHüG”5īśMžŸ©i“G„jŗ¹lŽBȆ9Ö7ō$dӊźS?—󜧗֞Įźšž“ģśžā/ŽŗĒĀ©¼]£ų·į½ūµ³^iRhńļYLtD"LšWÆäßö‡ż‚ą µ÷ĒsāO‚¾xšĻĮ¦āk-|EŖĒiöT‘‹|«) ĻLGJĘjčżOĮ¼ó“ę2̱ļÜäiiwwmWŹėēŁžāŸŁGö®żŸģåÓ¾3~Ī’|=(g}JĀŪūBĄÆÆŸåuČÆ/ŠüK>Æwm§ų{Lń>ÆØ+|« ¤–-œ–*£*½yõ)3ūˇ8£-Ķh{|U8õī½SÕ|Ļ„<ūXü[·ŗÓü+ińxOø[­…ä+4±› ˜zsMż­uŸé÷~šVÆ”_ų;\’ļ'‹ķ1ŸāPxüaÆSŽÆ„†–gUš›ÅZʙj֑yÓ“qS1źGæį_v|(ų×iāšv“ćH/4[{½F=>_²fFŒĮuü³Aó9žOĶwé?ŪļÅŗwĄų'įī—5Ę…©JžUŲp%|€J̓ÉĮāæ"m¾ųOÄŃĆ{må—ĘmĄRĜžź*%cē<7ĒՖcmŹē}=FÆĀé—zjŻižUĀȧvö!|ד~Š? æ°"š˜{ ńIå]A#Œļ¹Oć\҇cõ_ķi;\æ”YŸ°[Wzmā=BĀęĘėKheH‰(IJ‘éPō;hbī|ÕāųÖĖū!R–/¶FYÉ"†ŸŅ¹/ŚĒć….ü/§|5šmŚĶ}$*n¦ŗŒ`“ł‘ų×<äzō+Ÿ ų[L.öśm§2µžI5ėÖÖ³i²Ég{–·1¶ĘG*G\×+}ĻJ3&×-ķļģ-¼Ģ»GĀó‚9ĶhŁxƒO“°„ŻŽˆ§C‚­ŠļYø»ŲéRŠ€ųŵ;i—@_?#äläśdt®·Ć2ŪŽĄdŌ,Iq±Ć6µiŲĪNäל%¹Nœc‚É0ć{LÓ£#pŻ+Əć<ŹxL§Фķ(BmzضærD¤+Œö„Tø\…ļįā“8Ŗ¼Ķ¶2Ž7¹¾"D1€3œõ®Ž{“‹AkŒ%Č|¤ŠyĒ„z ."ZčqVW·ŃLó3™Bõ÷"½?JŌ“żRÕ^/™¶ņŒpĄ÷«äīy³‘Ü×NĮV(C|¹ŖriŽ·RįŒēÖ“HēlÉyu0!FźGįW-–i],¹4)XōM/GV)^eߏ™OØ®ÖÖWKw/•ŪĄluŖMō0”¬gHÖ³†‘Ś=Ć®OS]®ˆś"ē`Šåv7Eiõ19˽=-oe»ˆŽ>”õń=»]”8ĮpÕMˆÓ³“ø@“ĄÅfėŠy9— ųØļX6g3Ļu-`Į°VEéO­r’jńJńüĮĆcVFeŻJšŌ@œ)Į•‰cm»^įö9`i]Gm‘‡Żā›ckq0!ƵRZ“I¤ŒĒ/ž3Ś«Kk§*ŖÜCøą3S4е¦Ēn¤[,ō«xOŃläŽQ3@=蹜ščgŁėŽg…māDļGjéµWómI…>lsī)Ź]6Ū3,æ1sÅM±±,ųėĮĻjęeźvi7SK'—äĘz67WęÄ&¹¬ÜŚĄņnYš3Īi›Dņ]TÄpĆäa×=M`Āņ±rī7Ļ5œŠE‹MiWHŖĒŒĶ6MCķ2¼ ‚ø-ž„šĀNĮaŠÆ•pÅŠķČ­ūjŠŚ-ŸŁ"߂„łĻÖ²F2‰ĮÜé¶Ļr&ŠfÜŹGŸyöRĄīČ8;‡ZŻ"N7P՟ķM “īÜÖUŻŻÖ„xrĆ0܈5zź&ŠŹćvĢņģ98Ēõ–k$¬I?²üŸöżōĘ×d~14 5;ÄI£I27”ˆGč1ĻæZżDøŅ­u]Ÿ$m¬Ÿ.Ņ Q} о{œµę–ž·āe†Ēįv„éV1Źcš`XQՇ|óźvZĮ=Įڵ§‹ā•¼I­Ü°’i$}ĮūøčųŅ9¤ĪćXų‰i&©§ų`ųoRŅ5r»™Ē0L¹žO¦k¦Ō|A}c§Aoš®9ƆOsIȓˮüKki©Ū[]Ü ŗČżü œWO5䟲ęć•'†”ć+ćw0[G©ŻČ,ŸNŽxĀæ½rśÅšō—o‡ßSŌÕC 0VśÅoNĘ|KūI|zųmą}.Ūğ¼E‡m”ÜĮmmtD»ĄČÓ<`×įwķ’Eń_ĝ9ü5švdš·…„sow19œŖ’<’G_­wŅ”q3ņʞ9½Ö/ļ/umVmfłŲękŽr}³šņ;ķRźvTi¦—+‚Mz0§cž¬Œ¢K"Č č{TlpAĒN*Ļ6¤ˆå,Ū€ćŻjX•Jnt8#J KQĂ0øb;{ÓÖĻĶeĒÜ÷nL‹]›–ŗKż©”Œšźō’jŚŽ£m¢ųgCÕ¼SāIœ$Z}œ ņ;zp8ük9Jڳ¢;Ÿ·æ±’üóāwŋ;ā7ķHŚ·Ć/†.‘Ü-„Š—ÄH")vō=:×ō»šÆį—ĮĻŁó¶~ż¼„h‘ŪF!{dz€Ąž[×'ņÆ6µ[°¦3Ä^4ƒC±»ÜIāM||ń¬>灳“ßEsƒCÖ|gfŗī©Ø éqķeģixūÜż+’NęÉĻāh“+$‹ĀPĒo!‰Ž69æŅ¼÷LŌąvŌ.|EŗŅɼĶ‚ ÷qRi÷8«}^ÓPKÄ“oģė ́TmBĢ™]Ų’ė×ϟ> Ųx]š÷Ľœ×Ä–Ń>[?Ż#lēœgņؓFp0YOw1X[÷ē½…=½«¶Ŗ«)į±Įؓ5HÆa.—nn²&ݬpĒ„sPZé%īOœŠd€ćņ¬£ęk&ŠĘ—Ŗ[Ü„åŌŹŒ-dŒ•ĒLJłŗx›ĀśĢ¶—VżäF ꯓĖ{t­t6ŒQķŗ/ŠuŸ°)Gž(å°y–MrhüųoŒ—Č+“}Ś™46Œū«ynlMŻ +ąŽ‚¶4mc¶ ģģä¶jČĪR,ß[^[ż‘ˆ ļ›ŌńX]Cö•ņ&_5¾`=qYøjŁĒwsrä ŽHéĘk”މ$ŒVuÉ»Õ(X "Õķn-&‰•’ģcz­sW—C7 õ"Ø7PóōųX(&.O³tżKäI0ež#Ķ ŁC©ŚßŲ²ŻB”@•Ǻ»ŠāŚŻšN€ćƽaé³Ü}Ø5ÉxcŽ[ię­é5-pųźžā‰įŃ!šĪĘ+¦6Ą>żŁĻq^m£x#Uń\,t[ūˆuˆņb·"`99AJ MLŚ;ĻxŠo_ÜŽėšŗyp¼k*ØŻcœ×Ī~6ńļˆü{ć-×D¾–[å»_.åĻDĻ?žŖØĒ Ņ-#ąĘ“«k:]„ŗT2j3ŪD&nžvd–»×­ŻžĪ7–~Öōļ}?[ž ¬qĘy ĘėRäc*‡Ē%ń߄ļ|Sań ³ių>P[““‡ä·OÖ¼ņņ ;ÄŚģ‚õŒÖ+1§-Œ’½č“Ņī ž©Åuž ų?kāŻCJŌ­ 恕Œ¶ń.Yˆän=…&kŲö™ü!kį[[ėčŒvÓ±ĪDn;Ó±ā¾kų‡įÆL§g¢Kis&e;ć ö€s‚˜¬årŌ®w~š·Łō{FÕžŽŚńŌ'¢p~ńśā¼ākŽńtš'ŁtėķyYe–Ü’dćØėļ’ź©(ōĻ…ß<'Øx‡Pš«iog;+4 'śŁcōĪÖøļŪź)ā ĶÄ`·™ĢEcøH™Č?–+t=JųXž:šZĻm­išmœ'ysņ­}sńcIšWĮ;ŚŻAĀwĖoõøĻ>ŻmŠŹi½6ųq5ŸēÖ5Æ),<؉iĮłHĮĄüN?ČÆLųwćߎCā?ėzŶ³g'ś5÷>\«ž=³S2#Zń‹¼S©ß@ŗlЬP±Äėņ·fü7ż¤ž*ųCSńǁüQ«„‡‡/Ö&U]Ž\X÷ģN?fu*FwŽ~/hŚVØ_ŲĘ5=BR»,ÆÓŽ~käöŌ5ėVśżÕŲ”3˜rģh¤zU·„uDĆ ƒHÜ)m€;šõ_|/ŸDŃķ®..mµ­36%\G9DZ ŽDy_ˆ¾(ĮąKø(ż™ēŌōķjĶõÓ5"`„łóˆ…>§łåžšv÷WšßŒōĶ÷så!’į ĘĄœb?QP¢Ó)¼5į«ß „ī±§ŚĶuirū‚"Ų1ž?*ć|E¬ų£X¼/%¤Ö°‚RH¤ąCÅh_9ĶÉ£ź7"q™ ĄēłWkyšžźŽßĆś¼FOģę—.øv:ŒūqłŠL§ŠśņßZҬ|Œ½ĢöĘՒP „ŒŠłžjžŽh4²Š#®v/ ēūÄ %Óōo¶$1_[†Ō%a‰•;ē·JƒZŃõÄk”IęEw,bHŽŃ"ū×­zĆ]h‹ØYź\,…FW‡ķžüŸŹ“|Eā]G÷·ŚiŹ6óŠö 2Ō¾=ü@ųmćüB“ŃcÕ-ĘbČĒ #ęė¾ńιķ ćY|g¢éĶbg²Š ­Łw,L N=ų­;KÄß²Ē¾ŲiüŻź6Ŗ“ÜZÄHß ?y°Ļō/Ā?‹zĒō½J)a½"`ncvėĻR>§½‚µŒj=.ż¤ķuūMkI–=3v’ńļ’HćPŖ§§#ҾK擲™„‚?õ«÷×=3\v±1Z#‚Ō,ąO“$­.įņäō5 ė“ų?\¶Õ,¢Ś¢Uóq=EoŽ„Ö/x·Nń·†tĶrÉJÅ4(e‹9ņßłõÆCYSĢ.Ģ cn,\ŗ™>"Šķ|E§Ėi4-$NøœųW†Iį÷šÅ£hķ$Q9*§ę 3ß5āf^ķ™źeÉ6ŃņĻ“ĖXµMVāŽÖ8!™šTZś’ökń”¼ā/„śź ‹Ėp6<»exĘ{Īž |єYéU„„їū4ülńŸģ=ūSxWāφį0ŁY^Ée­éŅĶ›0\īė•9ģE~z‹ō߈¾šĻÄo ÉφõŪoķ儂™eŒŽ3ĪōÆx's‚¢±ŽxW]ŗŠ%Y#Č,8ØĶ}Uw`š¾ÖÖżģK!śā²™Ļ;ŸŠšZ’Ų¢ėöØż—Ūⷁt՟ćĆ&©hČ?yØXĢšžļ•RĄuČ`>õ^-ÓEÕå½ķ£ksfH1H[Ѓ‘ųVxrŹK¾æüwźrĪ'—\ÄÉ((Ä’O»U|­‚G ¼äkŅ9\lO¬Č»IߓŪŅ™:¤{į!zžt "#@¬ˆ£ięƒ3o|–ĘéAQ-ŪŹČp¤qĒ=źŅ¤·’®éĒńPY§c»,ŒÅJŽ2:×Ō_±ŸķCāŸŲ£ö¢ųcūIųi­§Ņ,ÆĆÄD°7Z|¤#°Ēu°ĻCĻ<ŠØn¦O¼aᯊžšļŒü+ØCŖxc^°VŅīa}Čźź…>œ‚=ˆ«7Śtk5Üdż¢$©ÅZ&Ē”ų›Ćśf”¤_XÉm Ī©DŃH¬TsѾ¹9üėóWYŅõ’jxWT±iu’N^ ż/ģ‰č1׏÷¹®AŸ‚ßšR_نĆ]ŅÆ¼MšžĪ M:ą®§bĪ›Šī‘„ĆņÆēŲp.£#•9Žø®ŗ/KõLåUøgÉ]ü”¦#ĶśÅIHĘ?ˆWiĢ6L] ×Gs[‚Oj˜Š˜Ąx‹Xż˜<{4w¾™T›sMm#÷O?.ąxÆķĮ÷w‹„6ƒiv·z¶±Żé³)u Į>ĄśœséYTßS©w>гŗƒV²Yv|Ž0Č„śUižÓķq•ybę0GUō® ­H?•æų/Oģ1ˆ.mæhčq¦Ÿ®#.ŖcO’ÓY‰É_wĪEŲ[”uēÆ?ȶ”Ęķ¦‚š/Śc\ńŖćĖ“ŗž›D¹hnxP_ j¶ēĶņķ]Ą9wž3_Yé^&±dž{0ĪģLŒ«…W-DŚŲēž#Ųx{\ÓcÕįŒŲų†‹ccrūžCó®ÆE›NŽ-X±Š+}f4Pīłˆ?žÆĘøš5RŅÄ·~/×|ć½7⦔DŲ†ā'_•Տ9üėéM2ķļå¶Ō#+¶Ž§Œ×^Ź{•k+;ƌAojŻŗX¢‚I¤ˆH„‚@ÆB™Ē-Źž¼Ś”G¦F–š¬AXŖćq­Ļ\M³ĮtŽd/÷wuSė]PZģĻń˜5Oōy%xYpŹF}kœ[™“Ėľ2ˆ ­żÜzāØŅ;­3xj#O?ŪöŒ!Ō’9*ü|Į{ ņ*¾‡ļ^ę T)næÆėŠõ|0ń/ĀxόüāżJĻB…[Åtgū#ö! ž’>|AŠ~*ųŹ=cÄžÓõ_+ꯓ ĖŌø^•óXåŗ?DDÕĻ ¾ųwaā_®ÆįmJ}ā6—"¼ x-žĻ®zdzµšoö†ų—/ÅŪx¾5ÓüYnŒŒæĮtFlQŪÜ×Ćę8Nkµ¹Ÿ>§Ś©ń8µxSQ¹91:ēŸé_ChŚ•‡‡¼=§ŽXėqŻ[¹l)³ =Ž{vƃĢ0Ī,č§#Wš„*Ņ/Æ“SĢź#Dƒ–^ę¾Tń†$Køŗ†6¶˜õr „HķŠłŹŖĪĒ„JG9ᕇXŽM2õ ŅmŲŃ©äż+ĮOOsD©»•aŒIćŃiśŽ‚‘¤r«˜dd•čS øÓoEŌlŸĖGfłŁG?”ük)#h@möŸ4ū„Ū"²ž2:ŠęOŒ­|.É5ĶĀ$Źßw¾+–NĒ„‡Ć\ē|OūEx•­äµ°»‚;Uå >¼WĢ÷><ń,×fķ¼A{wsę3ī/ĀäōŅ”*j}/»GŅ:'ÄØõæ‡W‘_˜S^P±žs½9ł‡æóÆ3Ņ­ooeKKPó³ŖrIükźrŹ\Ž÷Cō>ʹ*s#Ū|ąökĶjÜæ:g·‘ńʰ@e„ŗ `žøÆ”•Gk³õ¬²‡=EsāßųžMfōŪ[»@ŲǵPŃ Ģ] ®{ןVGź˜ŒQīß >IńGQŌ¼;„ų†ĒDÖć·76±JśIĻėXŗø¼šŗ|7ć=0iŗµ“”^OĖ:ē_Ph§M=Ļei”śoąč¾/š’ͤhöv–Ł|ĘĘC83ųןkö²iØŚ–¶Š“ øÜ+ÆŲ£Zu[Šń|š7ƽRš’ˆōčlµņ”,õ˜!ęžfīĒZüĖŃ®ügšāfµšwā^å׬–ŚįžQkœ$£ÜŠĀ„ lzøe͹ōīÆcc{¢hš„ Ģł%°8_C\§—gixÓEFÅqņŽ sÉ[cŠŽv4.4ė=JŲD˜‘†R ę¼äų'H[»€öpm—qSĪĢją#ŲŽĆįw†ōŻ\źėa ƀ~÷%G Ķv÷:V“5ŗAoĮ&ß»Q*ŒÅaRŲä³RÖV ”£ÓŁŻŻYن†}ńŽ0{Ö\ŚŌaйm©żŖŚH„,€år:ŒśWҚWķŖIšVūį?Œ“ŪMfŅ܃§ß»žņ5#pĒQÓ>ęŗ)Vp•×õ}†mh~]|N‡QÓu]{TŅ­§Ō4;¾dŒĖ6Ę7c銿7ż†’j]Ļį½÷Ā_ˆĶks„ƒ‹;ņŪžÕČąaŠģ”VĒĪāp2oCīŸ xæģ÷sé ~’éŅ –)£l¬ƒŚ¾Rż­o­> YYéÓÜ FŽČ~ä·Ķ°ƒĘ>•¼«.V‘Ł‚Į“ѹ߅­ī“%¼LȑGF¤z×r³E1;NÆī}®_M¤RŒM,³Æ˜Ŗƒ§½W8v æ7Ņø&včXņ@Ć{ÖÆØóbK“† P7ZĄˆ@ € „nI4;Å#7™±1ŠL!|zŠółķn“}~hfĖÅ+D‡sĪ?ZøJ6=ŹO*1.įō>•‘ŖH—9-VŹā·‹ŌĶÓĮöm ®1]:\4*„[=ėsÓ Ėoķ‹9­;˜ps‚¦¼’śuŪ,§ī¹ µL¤f鞛a½šēĆ}V/ éž%’Ļv˜²¤ńešƒžž™ś;šļĘÓjž°¾A%•ģ*"rŽA$dœ^…93å1ÓSћž|:ż§¼uąoˆÖvGX’6}7ZBŻY܏øw޼ö=zoēāÓIńWĀ‹;ųIćkø›_ŃÆp“ÄH–Ķž®P;1ÅuĘ«ZŸ=WĢī{ž ·ń-Ź_éśÅ’‡5,–Ó4y'¹½Dų‰ū_~ĪŃĶāŸ‡’|Aii” å_¹Ė›Ō1ģ9Ļa]0ÅŪCęó¾ Āc©:XŖJqóW>…—ž Aū|Z Ūkš’ēŲL$k‡²Ä—`™Xē HīÆÕļ‚Ÿš_?Ł×ĘŚv‰¦|š/ÄĻ„Ž+TnolC\ŁB悼Q²3×ī“Žę»iāāō?˜|@ś3R–Śä–¤oī·¤¼“{>×Ó½·?F|’ż¼etl<%ūHxıĖ1YźN-äž#ć'¶f½wĄ_~ųĒĘV’>h µÖ„F‡Q“EšŽHīFs‰£PcĒĢ9鎻"“?“3Žβ)N8ŖS¤¤¹^ü­vŗŃś\ėģ­ū3ĖŖjڽ·Ąļ†zoˆīݦ›P‡E‚;”)9ó@¹ “œƒÉėšüĒż¼?ą›?æjmSĆSx/āo4ĶoB‰„±ÖM˜ĄIeEcŲt²©‡V;øCŬv2”‹ĒNUaJźĶ·hµf•ßnžHüøńÆģūwüŅ–ēÄ’ķüw£B‡u÷„®Öń“ŌµøĢ€wĪ0?:żż—bæxĖą÷Ć?š֏Ć„Ōņhz¼/Ė”‘£ŹŹ¹ å‘ųa‚ēšį{#śæ5ń÷#žĶXŚ3ę»QåŚJżZ}uuŃ3šöŻųÅć|qń>ćĖKEžÅ»{­īnA…I NN+½ųMāEŃtļj²ŻßŁé„ż’ātxā›odŒ’x®&ĻŁņšta†‚„š“¬}?7“˜ZŽīÖį›÷€†Üz’2Ļs\OĒO"×­“->]BÖeÓ£BŸ|ć@’ŸZ®R9ŗ5³ßĶi}{h‰y…WĒO„fßj—w :Ÿ(©ž#ĘEdā3ČÆõ ĻQ·óOŚęV$ń“ø5µ­ėްӭ5½–2:[S¤ŹHł«ā'Äł4Ū;ßkž,ÓtĖ3\ŹœgŖzż+ńköÆ’‚¼h>ÓµÆü VńN©F9/.ćŗ®:ż+Ō”D–ĻęßāēĘωßüK{āOx’÷QŽāS#Xo>T~8åks=£‰ćša’H]Ų `+ҌlsT«mŹó^° üĒ·±¦“DŗČņ9uÕ5*w"$ņOŻ'½FŃo9ć4Ķ÷'1 AKzóWb±2® ć„jeŲ4÷Ō&õŚ{ n­6‚ßNx«wke$­¶4l–vģŽI©”’5„o”ś?ū’Į7>?žÖWŚ_ˆ¬­æįYü2mé6Æy2ÕĻjžŖæe_Ųóö`ż“k-7Āŗ>ńāĀFæiÕ§…]ŚBĢNIQģæyÕ«·”čR§Šś‹Ä>+Ō5 ÓųĖS‚ŅĘPXĘB"Ą.8=æõÅź÷‹u]NÓKšÖ“e£č)×ør7æ’_Ü×#w;1,µOxrõķm ±ŌüQ*’¤}؉Å*å¼SØß­ĢŅj*ĪN|”ĘĮÓ ’¹O9Š[­M®¢·ā…~ūtzž“–ń§†®!ø±øMNG'tØtķƒŚ˜xEīo’śśėģ1oó<ØĄłżµtwwvÖĢŃé6ŃŚa>mƒÆ¾hĶu/A¦K,’Č×lŁŪœćü+Šń‹t{«]Bū^Õ­ōčc@V,rĒ=¬dÉæ?jL±ŸMšœ¶"÷¤ī’N0yķŽæ<5O^xžęóPƒSøŗžc€ņīÉćZR—cX3Cųq®ėémņÉ8$rJąśāæH>ü³š=®—Ø³ĒØĖ#ļo4oeu®yK „PśćYš]Ÿ‰.…ģVq‘»qB3…ōę¶“?éŚQy”·KeS–P¼ÕŜņŖuz|NņZĀū§Åcx„µFŒŲ-&µ$-ÕM3 HŁšśĒ„éüØŽŽõ&¹]OY»7SBŲAŹąńZ)X‹³Ģ&²±³ŌęæRńĖ+~óćėŽ•‡3Į6£åʍ"HozŠ’ģ­m sC%¾dļĒZē­ķžē’†5ĮJ —™yd‹OFTf.>aĄ5BPš˜ŽKÜÅ:ø!“Į’ėTĶŲMhkŪźśv—©[ŻĶmŗĄ6Ž]ö½ć jā‚ĪK{'c»ćX…Łē­aįŁ>Ó%½ĆB»rŖĄa^qØ]¤wÜ2ły9 ŠŻÉlu4“Ͳi¾r0ł\O’ĻNæ–dŌ4˜$ ¹f)Ą¤ŻŽ˜Źå[ưipmˆHz ŽžĀ¦Ń“Ń«Ü$2Ŗ±n ŌÖNEŚž†<ģQ¾R˜č}*֜4ė$TŠåšvåé°śVŠZ˜=ÄŌ¤»•@›c¦ŃÖ«Į„iövļ5ۗrå>“åę#Ļī¼GØé·ąXŁEpĮĘŠķĆ<ś×u©Žéóé¦ė|‰tGĢøą­LXykƽ“²ü]EjŸiwŠC2łq©Äy§b¹M­£Õ4·Łōe8.0s^w ųGÄŗoöœš”p]ifP!(Id'„"NŹm3ż8cS$ Ŗd½¶øXP$ĢøŲU)֟4× q2ģ‘›°­ż-:Õ§IķķīNĀ€ŗ“ƒėTfü\šꇧÜ2)Š)Ą%W`95?o“ꓞāÅĀ®N0Ÿ„1kcēėfśł"k»ybl‘½Z»{i¤ Ø”‡ō%Š‚}#MÄåŌI}«×ąŌ.ķ¬ö©Ē+qžy{ā(ę’x„ÓäŠRvļeėī+:8D¹eSŽƒÖ€dŅG$±, œŠēļ5 FĮŌ<˜ć4¹P$QÓ5­6ęņM*iāŠģ¦ąĮ#Ś®G!Ņn¦gŌ${b Œā™\ŒV‘.]M¤ŠĒ?x©,@ĒzocĮ=Mg(‰6Œoģč®Ų\-«8cŽW­w~šŪCvedĮXuČĘēYš©jVVڤrE2gv®vŪĮójpH‹ L9\gšv(óĶKĮµœ§ģ/BīÜpŲŖfĘęŌ`õļ#ā}ļ‰tæ Ū\Ći¦M&8ف%ųīIō„¹Qė¾Ņ,sŹ~7|.°šĻ†tķgįŽ˜5+%lcą.?‡ŸjųSĘz5ŅE+\čw–Öķµ„’1Ā18Į9ā³°āō¹“ki¦_[“ŒöȰL{ŽõŃ]ŻŖč²Ŗ0y ˜9 Žø•"\ĖÆįf÷ĀzOˆ¬ćŗ{—–.UIś×wį_ ų—Ęö·0hŚD÷·¶Q“*œķ4 ˜Åų}¢ė·^#՝¬Lv–ņż˜¬ƒvéAēµQųēk®xŸÄė¤]iWf½¤ZŖŪ9L(VÉõ j”ćšM戒īoķ3¹ŃFņO%ś.§/ļū°Ć‡čEö‡²æĮŻ?āƒ58ķN·•#3Ä]ŽÅ‘y ķž?*ņßiļĆm9¼S«(’e$IonsĮč?:×B3•CōļįgÄļü\šF³ź ;V6l™˜*( ‚{f¾ Ҭn|­ų†ūImn®&håPw S~“tĢÕCŽ­|sćöĖÄ6SjS*¤O’?oē_ž> jžńŽŖśڃŲķłwł-ź{Ÿj䨔t7…‚č„6z¬37,ķÜś‘\WŠtĆ„źaŁ] eݐxĘ:cń©NŪņŸK~Ģ?N™u7†õFŁlĶū…Ļ(¤ńü«ō+—Œ”ˆ‚}ĒPk£”,Ó°Wž`Ģ|ć¼óāōbßN]VILQEÄŇŽ\cü+ŹĒÓ慑ہvŁń·«ZyåćhŲš@Īį\'|GØü?ń®ā»É-ā71‰‘IĆĒßwø®l>V{’jĢū3ö‰ŃōÆų@ų—¢ŪBŅģmøhĄĄĻ÷Ąé’Ö5ż ’Į’lų©š£Å²·uSāO;Ļ 1šŠ7@u'o›Ś½(ĆGĪ”Æ¹ūæ,^LLT•AķҾ™ųWć'Ö-“F¹`ļ x»;V2އ9ŅėPiz…ĻŪmDŚLŃ“W‘÷ćaƒ_ē’’fżaż’kųWƑĖĀ_Fž$š™ ūøZF-5²Č8;Np¼„IĪsYƉ5éż]Ny.‡ā޳o-½ėü¬ ’N;Ā īÄä ŸĪ»¢ĪIč¼·;[jŃ¤#ęģM2yĒȦ ƒŒuĒz©.öĀ®c<Š.v6)&-¤°?…i%ĪĀø-¼zvŖŠÖʑw.[ÜĢŹ„ĄósžEiĮioؤö³—) !‡­čtEŸŲü•ūnŸ|3Ö’c/ėÖoć?Ho|*Ķ6'»Óى1•<±RŲČģĖĒĖĻõ fņ¼H ­žż¾•ŠåĀ6[šé^Œes’k Ķė›”.½=j“D y¶å*‰åčD¬»0„Ą'µZc“Iu8 e/2u³&}*üPy‘“‚\ tÅEŲHrß?N*uŗuÜ oU>œŠŗLź#ųIīań‘0 nc/9d$ud`ś×śĮ;æj…ż£g/üYXĆkqŪĢxKfUrJŸÓ4¤“;ą“GėV©ŲČm.tū„“Jæ„MnĄšI3ėÖ„y.¶-äP“ĄåeR9d®*&P8_Œ<9ńÓį/Ä…~!y Ń5ū'&‡²øĘRd’i\#ĄqŽæĪöĶųāŸŁ’揌t}kH]U‹S–ĆQµ™|ØÅĢņŁ01¶UŚąŽk;jG'Cä­^3ŌP…ėĘs^ńąŻM5[X,·;Mꥮi”r"¾½,w:ÉŅo6D«2Vž¬$ü9»ŅÆ­ā²¾‚ ū¢Y‚ć$žõŒ·:iŸ?¼=cˆmķžā+›Y£Āī,F:~uĄÜxoN³hōŌŌ£‹ĢR£]p×Z…#ØŅ4>+K.qö»ž$ŽcĘģu⾁żœ>"k>-i~(·²fšž¤ƒOÖaB0ł8WĮļļōÆ ”śf2§_ČżųŁūZų¾ųÓƞµūZź!Ź»ÖX’–sé]?ģŲŗtŻx\“¼×š%ŽóM72ó3‚1×Ół|¦6Lż§Œ½Ńä?“‡Ā’ x/ćQÕ“Ky“cz€j6sop[†q_~Ö’ õx›įļÅ’ߌĖ%¼K<Œ% ‘¹Xޤ`×ĶיЪdųcCŃ|CąMĒ2YźvZ’$Ļ~l‘ósۜžuąŽ(ńž­škÄ·VwĆT½ų}u:µ…ÄĒwِ’ł<}>c¾ƒ>·š·Å­ĆqZx“@×,'±– dŒLY‚;÷ę¶<}įßųMō oxn{MB$żģĖWR:~½}«ä1XcŌ¤|uiØ“ZŻõ”Ł\A)FR ¼l§æz—ŰĶćbu)āOķ¬€`†Øü«ŹöNēd7<¼|Y‡Į6W‰ām>ćķó. ēīēkÕ¢ńē†5­ŪTÓ®®.nf°«€€ōĮõÆcsā)ž×šßďāłäŃuIķā»ZHÜ4ŹłIõūߐé’i²E‰£ŻµN Ķ}ž”RgĢćh‡4ˆī]Æ3Øłp+¢—OŽšf„›u$ōĶzŽŠš=ld[ŻA>Ł…œJ™Ē(>jŠ· ņ7‘ōFnęžÉĪ™k«iÖŠ w)\źOJłÓįwĆo/Œ¼_aag,2Xó<°åzƒƒĻzŪŠ4õ=n’^·Ņ!1źŖ‘KAFtģkᒌĢ!ń‰ÕtØĶ„£†žąĒ§ėXŹG³„¤q¶2\’¢¹Ä-Ąö®’?…ŗŽ„„Ģnu-Ē%‘( ž/Jß †ēv>»[}- y’ĒœŽ‡Š×՟ <,ŗm“z„Ņfw]Č}+īpXeF~‘•FŌģŽ§Ę)I²›ĪĪYz÷æ>~%xĶõ[ē³ŒÆ”Xä±§^³HżC†0<ņMU§Ų¤ģNĘažŻėŌtØ#Š(Ė&Žżyr«f~„‡”}MÄ·ŗÓõ]+Ä^Ō&Ņõ«7ߊqøg•`;*ę’j‹ŗ§¼yšŽļP“‚ŪUNxŽPß-Źī‚=OZé£TUéŪSõ[öń—‡|Kš[SO;ķfĘųŪ]Ę_t–҆kŌ|aį+Y¤¹I]Šg|nr+×£k4ėŚV2Šī“k¼”ÜDA'±SŠģ`Öķu—°Ķo,2sņ·Ję’¶ēr©ƙ ‚>÷ śŠ˜ZĘTy€lõM`Ų:H£{¤[H„āf=ūWØŽµƒ-‹¼q)$‡=*¢®U:i3¶Ō|;ØxoĆZˆļ‚I„_sÉČ-œ`žŸs×ė«fmļ°łv¶9Ŗq:ćN-ĶŽ“<Ś.« sD䤈ą"ē©®óEšÖ§Ż„×‡ķ­“ųŽ T@2qĶiv"xHļcŪl1Œd‚¹ō«Ś¾³„i; ±ĒSßÖ©ĖBéa’<ā;h%wČļĖb±ļbK{œDĢc黌¹'©źŃ…=:Ü(\ą óZ²DŅlsĢ;Šēhī¦eL¬3øõéXØUE e,8ؔ ±cQŚĘ„ŁÉĶt÷wŠŽé¶VQĆ IFõg³zā§—CœĄŲįsŸJēüSlŅAc+”aężįĮ©"DÖ¬’£Ēœąsķ[0[DQ²»›o=+U.Œ‰3:āZ2Oō«P\nEÉļŠŁI™ÉhnŁŖļĖeSŚøOxZņŪċ{µ?²ē„@l–äõķŚ§”Äj_µ‹ŪŁø1ŒągŅŗ» ”bvøĪ}h‹³7§•v``uõ¬Ū;….ܕŲŚĘäMå#gwڱdEu4jq“Ą«Œµ9g±£a­ĖaęfĄu*Ć<0÷¤PieŒsœ×D7<śń7gŠ“ļi—½N/!ó"žtÜb`Ż>õšŽ‡ÆOgćŸč7é²{;“åq½;WM7ŠłLŹÆ*»?cfé"ųšŚĪÕo¢0ĘY?ź°=?:źü!­'‡õYōe’(7HP )ū×”Lłj•/+Ixrā!r‘,ё»Œö5ł]’šD^ż¤|āūX"Yu=5£˜…É™cR[óŖ“ŠŚŒO1šįņ œ8ä2zę½c[¶—Uš¾”ai w7LREŒŸæ“ē\µ'c±Qŗ>*ń*;^m®¬%Ųˆ¤\2‘Įśz›O“¶Ōķ– Ģ˜ó“īj#‰’818+ī‰ī|1erIK+W¹år‡åśr+ŠžüRųįš/Äpųƒį'Ä?x>ż~铺pŠ}ԜŌr+Š”˜In|¾sĆø|eańPS„“iŸ«æ ’ąŗ_¶'ōó¦xßĆ>ų®#…V9ī-ŚŚēpź]£![?OĒ­~Ž|’‚ų~Ļ^0Ó-#ų׹ü4ń_Ü»žĀ×ķ–dƒŌwģAś×¹GžēńˆæEZV•|Ž|Æł$ōł=÷ī}ŽąÆ°ĆOgk§|O½Õ„™~ęĮ׏Ļgó ąż3_;žÕšW?…> šNæ üūWĶƾ§&9dēX×9a’zõķ]N¢gć;ōvĻjāį |=&żētŻ—k_WŅž§Č?šMߣ“öųĶØėæhmOĆ??hCS7ŠŪxŠų¤qĒŽ6ĄYRbXœļŻŠqėżźæžų«ĮvuO†æ5@”mtŸģĖsklpbŒ.##'•ĮäŌŗQhģńÓ<ā 6uģÜē ł];]+Ø«Źėv›{ź–›#šēöż˜¾x³YńWĆ’‡ńhcQ‚Kkż5ęk‹)ā~«åKøÆ8#i+ēŻ#ž %ū&ųs⦔ńvļžéP]Ė]&KõO±ē;HŪ¹”s€X=k:˜ecåp~>q')Ō«ĪÜRÕ+iÖŹŚėÆ~»"Æķ9ā/Ł ąW€õ}[Ā2ų{įŪüöš^›wŌ—2Ęf`{ēŚæšŸ’šP/ŚoĒ·Z„ƃ”ń‡¢ØņnOÓåhĒˆUĒLžuåb“?Ø<Ąf™¦㳋źżÖ՜–÷ōķÜüź›ā“x›XŌ«ŖŽŽėŽŪ¦ūR2;0š@ÅYѼAcvξYž ŪN;ńŖ7Ōž—ĮąÜ‘ķZ>”i“ „¬(²†$0ćŅ“|9ā’µ^K§ź1„@ÅTƒ’ÖØGµJ ²Śjj:l’ZŖ: ņ+²š-A„WWĘzr+tzŌC”ń „ŚŒGS³Ž7½ļœ{Um_Ķ“q¼ “§ øäR’=­ %/ēF%D™ąÖ­ŻŖ  Åwa·?śHfKĆR£kūYF>–|÷’Émó$‚8Ėco|Õ”ķ½œģ“¦åC”õÆ~–×?ĶüLģĪīŲÄŠ įdŁŽé#0܉ ˆ²0čGQ]4ßCÉ©#ļQ¶‚ź$–5}¤s·•®ŹĖY ¶!;Ó½hrKråö‘isūĘRxŻøW•jzdPźĢ<čĶŽžŌҹŒ¤nǢ闰Ÿ“†hŪø<®}Ŗ”ŗT™ąĖłww"¶QFm®§5y©En’$€”‚k¢šį¾™J–‘­Ys‚ 3βĒPū1hQJsŒÖ®IŖN¬¬™iAėœPa&Y·Õ^+ø…äģŠ“–^¤W„Eq°g!/҃3ÉüY6”¦Ī^ÖŠĻm÷œgéšf§©lėū&Gs>ęĒUŠW¶1ī€Œ«ŽõÄßY>vą±<“ŽƒNDmųwJø×włhY”šs޽3GšŻĪp·7;Ž9ŲƆÅJ6(jŗm£ł’ÅĮ&{W¤Č¤H’HäsA”ž†m½•ŌNžfģuŖ·‘:2JĄ|§° Äµi!p[vUĄ« r#œ,ĒÜõā6iĖ<6ć|$(öéRYź·(įToR~lō²mZłH*mĀ©ĄĪ8øūķBÓM¶žźśO.Ž%,FyoaM#H@ų/āĘ£ā]RėKCi5¾čv‘’¬”Ɲo`ŠåŌ"Œ!‘Ļ cš©+hk(Ųć58f¹2X±äāØYŻÜĀ&Ü rk)­nÅ©õ»“mSÜK2®HŽ}+œ¹io'3Ė€r8Ķb.sFŅź[w-÷F~µÕ/ˆuėˆŽ Ž_]Jæ*ģ g×waK•żLšOģÆć½ž”ć{˜ō»IAÄį”v>õśUšcösųqவkc¤^ź0D}ĄŃc 9ē?…qž6ńĪ—¤}ŸL¶YõFfņ-ķ MŅĢē°QĶq®6>½ż—æąœ?hķKMńĒ(|Mš7ąüé¾ ‹¶ėSU ²¶Fct8ü+ś…żš~žĻü+‡>ųKµ²ksiqŖ“?é w4‡,Ē#<ž½…u҃9Ŗ³Æ›Ćžų/Ø_ź>,ø½ńOˆ^bÖŃ«™,rBžśÖĶ’ƒž |^HeÖÆĀ>t,‘F w-č=ź{W\cŠą“=jĖƶ~Ņķt’'¾Š5Cē·2c¾H'8ļPÜjZMĢ/Ŗß 7ÄjžRŽ‚“ä1œŗÖnRÅŚīy¢ŗ²Ł¼cŖWyāĆ©éj>½ŠźĘW*Ū•Ē©hˆĘå7\Ó`ū4ްRø nqÓė\·ˆ5ķ:źÖ’K•£°° ÆŚS!€õļBFńCĄ ŗŅ4ĻźSiž'“Ö%“É/|ĆsG“üG«œ×åOķ#ū|żŸķõQ§ė:æüI—/b¤M‘ĄQ“…Ļn+²…#kYh:_“?ķĒń»ö‚æ»±ńFØžšē˜e]6Ѷ« ü¹ż:WÅ7:½ÜŹĖ4ķ,¬ŪŻĄĘ’Ā½ztģqŌ•ŽrMģöČų9ĻsD˜*w9 =kCĶ©2[hć;‰NÕ2*6Q»ۚpxŠĀīõ ŗĪH%ō ĪMliZŁy’øĘsóÕ°,Ā£ŹÓŪĄŠŲ˜(¤Ų”NēŌ³Ēģ§ńßö”Ö-4o>›_G“dśŻŌl–6x8$’9#µL²güĒįwģŻ‡ž žŅ7ŚwÅļˆvŽ·pX%ŗŗE)ÜnvŽŁüpUž¶=t­”śąŚĶ–§„ŪĆ i^šÄHģ1•ĒFéÓ®KŌ4]_Uø³š.Šņ_,›.Æöķ;ĒÆÓńś× ĪØ«“šõ·†u›Łą zqłVgˆµ«‹Ö3[ā±EĒČ6ķ  VnFń•Ļń ¤-õ‚½ NüņN}j-+Ä cy>„āć&¤Œ…|‘!ø9õéI;čQŅxOÕüRnoŅŽ]ƋĖ3œ6=’ĪjŽ 4}>!œEÓ'Ź®Z²NNēY†G»˜īĪē­p¾#Öo™D¹IÓŌ3¼Žū|ÅĒb„\`(ÄłāĒxnK› Ȟ$æ‘>i$\O~äq_ųūāöµā ™óØHzŖĀ­ņ©õ§ĖcEĒ–ųSĄ¾;ńōÖ±yg’\HÜķOÆ5÷ĆÆŲßBŃŅßQńeŻĄ•bóŽqƒĒĄ5›frmķ¢|,Ó§ø[-6’Ń\»–ßõ®•į–Ń,!ģģĀ0}ŚžTĢe&uš-Ļ‘ xšU†ÓžÕŚIņ“r#M­Į uŖ±‘“yŖ=żj®Æ ń¼EĪ×ÄŽsZFÄrö~>ø¹»‡IžāMŪ ˜į½ĶwjŠ- ]Ż#J灌‚j¹QV¾ĒœjWö—ӔR¶ēøÜTZv—§,öó¶§ä#>s'>“ZĀ*x‹d7i"]Ć{¼g(ŁÉ¬kMK^е=Ŗ[ģeŻūņœYˆC5Ö«uūä…%l–Ų8'éZwŚŁ»Ev®ī “d¶²”®QŸ>žžI}‘³Äžµ ,1ަŲ3’Ėڤj76u}_ᄆ›w¾'±MM"/ä!żą=²ćšeÕ„Öė°óĻd.õĘE*GWö‘¶mŹÄ;sŅŗĶ2ā M$ÓĄŠYIĄaĮśŹfŽ'_šĪ­§6 ÷ęmń.Ķ„Óߔ渟 |@Ōo§ž;{)¬ÖÖc•†ÖČÅAg¦’n.¬Y®Yę›vX±É-OuӋ«4y”q¹x"Ŗ™ĶmpŸo˜y“„ąrN‚ŗ›K(õw]> AaŹņHūµ«Č9ų.MqŖ =°m¬čr2yµĘ«=ĖȾfW¶ZJ(z\ÓÓõM ģo ‘Ź—¼”S€øõ”,ķ'Ų)»Ó½4‡=Ė:šėZ~•sl${{ݹE(plŠģ¼+s}ˆ¶ŗ¼±O+Ģ`ghfĶK‰ōč­ŽFˆ»m+ĄļõÆ/¶ø¹:³1G1ć× §aE;źz,łŗy2ڇŪCw‰w%¼i#¤‘ÄäŖN*¢µ°KMŽMÆ® Ķq,Ey)Ē5Īų‹Äŗ¢h2ŽŚĒs©Ėcū£ó>=3ZØ™ŻÆĀmlxĒƋ4šuż„ņŗ ”Ść׏š­­_KĮ¤f źL’B°±ß>(å qֵγ<`N'eoāö§Ģ\"Mw}kuf Ć!^M%¤gģ*\Å#žī8’C4ePœgÓš¬ö€ŽXß}–Ķn¦ŲJø”“FVЬ|‰=§‹ßāuŒrÉq‰leČĘČo©Ēå_PjZ>«ŗG4>mĆ`^¹Ŗs51ģōćk6ĘY rv2kN[b.Å\õɬ›£skū^;h-¢D ėĘ `\_É$ģņ¹É<{R1·@[©`¹2I+též+ŗšļˆ“8Ƶ(-nPyŒ˜Ėcڶ[GmN?RÖąÕnīEŪ$fN?\]Ļ…u5®ö[†lńņi{0ę,čVŠ]É \Ɛ:ōÆH—FJę"‹ø°›…„ęr·:…„і# etƒZ:0{†ū<äµŗs{R&Rģuŗ¼UÄZډP†õ5pĘaåD‡÷Ēz[‘j°iņBbVvĘvÆcY³isł·ˆ•ČėS)XŚ*Ś—+Ø­”ė£%æ›ü>`;sųsNµŌ„(±_ķ®ś3Sķ`Ō,n® Yć»°$ĻA\Ģ©Ø@›T\mQ‚ĄqZ&K¹jĢŪ¤‘5į\ ‘ĒSļ[ęM9Q¦TPqŠt4 ģōO xƒK{DŽ”Œņ~ī*§Š*ų›ā‡6Ņa‚Ä›8dY%ŠŃÉ+ė_]ųgö“ų}eįė›żRŗŠīå";›CIČ#’ÆW(Ż“Cē‰ß‹5żhm{>œóƒ¾BAR=»gžµōĆ«ĖE¹Ō§H~Ķ)t 9ūŁć ĒįY8“¬/fĪKĒ^)ŠüYā!ƒa¤€yŠ"#ĒnõęWŚN”¬\¾›%½Ü01Ż~@?Ś:©“õ>Āų š“M×mo`Óā°MJ8™JŪLŸ) 3õÆŌ'µųIw«]XČšß%ū}¦—|Ų8'¶3Å9G”¬WCŅ|gąÆėńYėŗ?•-­Ģ .sž®B2W>Ę¼Ś ķļN¼šK„hŹ…ģ¤t®IĒSæ6–¢¦yw¢%õ‚4²Į2ļB§+×ę_~?•MāYRYWøū]ĀVW?:ŽƒÆÓōŖ‚č&Ś2¼oć½>ĻLŅ’?2āgĀ+';xč}1ƒXŽ‘|OäźŠ£Œ’+Øó%”_Ä^³²·šļ a³'ĖĪkĻꚎ­sāķ:=#Nø“Nø@%p>H°>÷’Z™œS;Ķn ü†ĻYŌļ~Õuq"‘Bƒ‚pqž čj«O†~)šĻ€¼Wąčl¢ŌŁfƹ˜įr?w:U÷4>|1Ó¼mæ‡Æ4‹ć>6š¦¼äŻėҾ"ų >ā +agÄ D`A•ĀŒdΊ’ÖƓčt¾×<'į/ i֞"Ō?³µĀÉ#oӞ}kČ~;üCŽßF›DkkK›Y¶É萬zmėėYrŻź(ĘēĄöµ¹ž]vēkōÓž sń‡KFńĮÆų²ĪÖiÓĆł{.IÉ\žµ§-˱ś.«įų°Ś~”ā:āöY65 Ÿa`3’£8ĘM|ńĒö:Ÿ@ńķߍ¼3,^ŌoI$YC›yIsÅ# K¹ęņxTxz- [Ś*8…™¾PTœ õ—ų¹¬|<ŗ¶Š ²“Sz»īEØßŠV2ģTu=ėSųįéShj–iqY$lĘ=łÆš<įm[ÆZä__K+XĻ ę˜y5ź^—Qļl^ęöf}Ū&l‚¤ŒŸĄfæV-WKŃ>C4M½ö-)‰·ŽL˜Ü—p·“å‹hĀ«ŗ±šWĆ߈VŽ(ŅķõčB«H0xŒ†#„w–Ž#ū-ŠT¹-Ī«g?ZļŽ§DÓ65’Œ7×šĒ„üohńŪ»I#ŗ­Žæ^Ņ“.” Ó8V³M:ńģęC<„ó‡]>¹ążFūšŽ‘ØŪŁźŖ²GęaܓŪ׎ƒRO ^xÖĪÉ4>;Ā“(0o–CŽĆźkڼįķmžėŗˆmaÖ5­p.BąĄĄ“ųü¼VœśhD¢ģy?Įł—NŅ5ĶU¦)%čBŅ|ŹŁ#å^Ż+³æŠõū…·‡OhIP0ūŹ$Āŗ=”›ę>īšc;č–v÷”€ Ŗ0IĘć_žµE¶Æįæė»ŻĖyį›ÉTZł«°Br īy®:¦°>ń«$·ÓŻÄēaĪį\”wuØ"¹Œ”^0Gjˆ#¦,ÉÓ/ntbĖQ“é)*į‹ćjēšżmųs☼eįm+\Šh„rHC‚ĢćŌ{×BŲg„Ł\mø+—ósŹćõ©Ć¼Š/ipj6Ÿæ†Dčz×åGücö —öĒż‘|I¤ųjŽTųĆąį&·įyć@ŅĪUI{qÜļ]ĖŽ9 čEqb!x;+µÆŻ©E©ž~¾,šÄ–ęćW½I­®$"ęŲ®>Ķ2e]HźAÆøXRfH·ąī§+źŽZ±#hŌØĻß=é"F‰ ŽĒŠÖĘ5$žŽóO—(ÄćnČ®~P¤³)ąžĘ Y ŻĄę¬ĄģŽnõsŒć„4ģiB$ņ„pŅ(=…jŁÜ}ĆÆ,;Ś†tĄõ’€ß¼Aū2üwų[ūDųd¶ń'‡58﮼·1żŗĖ!fČģČX×לˆüųĮąŸŚ'ą÷Ć’Œ_Æ­õ? ų‹N†ž c#(ī”™@`Iv ŌTWGYÕj¶›ĆFēlˆkļiįM/P7ęü}·D¾„ŪŽC“¹ćrēŒō?…yµ#aŸ›÷¾ ‡Ą^,ńĀ›Øć’žŅ1ØhW„åĢæ7~ÜQ_ˆšQĻŁŖßÄś-ϊt»XmtĶH3Ā!\‹KōęEĒ;A##ŲŃŌ©@žmõ Kķ2āēM¾¶’ėyL«ó†g>źžĆ"¶B¬ńŽ»ąrŌ§Ų 22ģįME>卛åÉ8Ą­NfQ įĻ9©ä7ŠŲw  /…7ĖGQŅ’1,p˜Ć‚qĪh1‚Ķ•ĮļZEQ6Ž£“žÕōŁb+Œ #.¤ąŒWķOüöą›ökż”ēųAćŻ}ćų[āRvA9-¼­Į<Aéõ„ŹwS‘żĪ|)šĖĆļ7ƒ~Ų5Ļ\«xZķ>ėg1¤ć銶ū{‹xÆāI0NÉF9ōę¹*¹Ū³Df°Y¶?Ž…»ā杏ų.÷ģKsń+ĄÖŸ“?‡–vC‘āøJ|‘Ø$[Ž©*Uȍ‰8Ć/”5Éq&S«é·:Ƈ/‘­ļ-'{f#oǽšæÄRųcÅĘīhŁģY n„ 0 Ž{ÖU7%ŹĒØźzUµŻō:ÓDėhĒh•WPjo¬Ž#ŗ“Ps.•#„yećśWDi©ėŽžm/ÄSDĶö‡'*$ÄIÆGńĻ…lt[+?ųv²2²„זr#ēōҹ½£OCc¶šÖ®śŒś„½Čŗ‰€mćk×tļÅ5ŒP\¤k"¶7ąü¾‚œ®Ž±čK¬iz~” Eø_½“}ź†ŹāÖM:[+Ųī­ū¬õO”®ø»œ„Ķ#Mø¹•¢…[bó“é]©isk§+»Hź«Üć4Įl.Õ¤Iw>ŅEOā…ѳ“ ßڃØō Ś+Bō~)žŅFņ x‰ēo„eŁj² ‡·•×Ģē¶8 f…µ¤SLÄ·ąŽŹjö„gö !pźĢ„žt ½¦}†ź+t”ŹFTŽMt~$ńe†•k…‹”,ž˜>’΃dĪ";±:$›™÷ņ ušV³l‘-”īlr;ŠK‰&³¦µ¼Ou`RhBJ_ »ŚZ¤’°‰[9RŁŚhbfE„Zßk:€kx»å˜(Ę}IÆÖbūvņĪĻbŚ,›ę#Ž™¼6;­Ƃ y.ĆÄQq»ę­«ėŪW‚“‚‡ŽzR,© šŒ¾Œ¬vļéX7qĘÆ8ēiĄė@Ėk4 ČĮ]ŽpkŠü5oå"łjĻĻLw”›āČć71·”©# 6¦=k?Ć÷/atņ¹ˆ£`Ć„`T§“ŲhĻāåk->{{W*Xjd ć'¹®ēĮŽ"xe ɐ6üĄÕrĪŪĄ6‘éŅ!æĀ³Tö?žŗź|kāū .a§Ļ pÜ…Ļ”pך›µ—Tm`‚f#oS¹éޕߦµ :r̶(ģŹČ|Į•*FGćYJ=Mi³óĒā7…-dń-ōŅKš$†Hr1°¾eų—m¤čŚƒ¦Ø F’0YF=Wó®*ń=:cÕ¼9į˟³[kR\$Öxćē`8ĻÆzõk½.ÖļAžKé_—wsėššqp¾§ÓåUÕ:©yļĆé| āƒq¤x–äY]µ¹‰XøĆæ¾kŅ~G«žĻ<мqš›TC<[žŃkØŃ\#‚HćøÆŽĒóEÜż«,Ŗ¤·='ā^©«üfń÷ŒüGv4żeŁ%’ŽŌm@G÷AŻł®ĘēĄ:?ÄO†Ś„µż®ÖŅKcpWp ”#Š€łšē¼b«»Ė GāĮŸ&”©YŲĪn¬ēŒ1ŽÕrC)Ļć_eėŗGƒ5 >ūĆ>5Ņ Ö4˜Ś%säēų…yupķŖō?/üCg©|ų‰y¦ŪĒwā™TŪL䚤ä/§ś…š;ć¢E Cd"Šļ¢EšŚa»Źtōļ^3ŌōčÖ.ü\ųSįŻJóUńßĆŁy®"ó'µQž³hżĶ|½gp—‰½ŒN'/å”nŠQ_;V…™éÓ©sʾ>x}:ĒJń§n—:cŗGx»3·‘‚ŽZ~›¦čßŲvŗĒ†cC„D«Č(ŸaŚ“£;ĶŻ }ÆźŗŁõ "VŽņŻÄńˆžõ~†|;×,~#xO×ķä·K‰ćźŻ˜dŸóõƧĀKcĀÅĀē³čz,ZZH¬Å €Oa>Ć=µå‹ĪI=+Ž„=ž« HćM•&čąEœn§ź0[hāY5 ė[h#ĒĢĪ>o§­iķReS¢äq_“Æ\Įsg ž¢źźĄAƒĪx$WĖæ“ķ{©x ⧆|„hņDš½²Ū\*JT³Æ#¦>õÄ+Ųōh`ŗ³˜Ō¾/j:'TæyY@}¤ņ=«œŽiõŃ`S,¬ŲøØ§7'”ėŠĆXöæ†>›ūF÷YńMŗC¤Ū€c¹ūƒžx§kž,xu[›} BZ6TGҾ§&§ļÜū^Ė=½Dŗw5ÜńNÓĢHmŁ ŸzśÓćƒ4½Ķ'Ō¼Ź€H§¼WŌŹ]Ö°¹/5¢ŗ柉6Ž"Žķt½A%ˆšSjłcÅŚ6„®Ą[Ipo£9ŚXžÕęāś>E„ö*Égˆõ^E§ė-ŗ朖ī:WøéWŃßZĒ47ĆmÆ6MŽĒÜa£īŲ×K։ÄR2n§šš?ö“ĆuąĻZBoa“sk:®rņ®š# Į£×æbļƒįGĽgNv/į-h)ø„œm~ł¹ē=«÷ŗkŻ ÄŽ_隅­ĪŸYoĀ’»^Å Ÿ+R ;žEąæģ_xžāMc,ĘO³üĆHõüėēŪ·O>$Št’=µ™Ōm[ĢVFįŪ9ł±ō®«¦®zjµ”šĻĮ=+N¶ńŎ‘Ģ2xŠņ0};}źż~{ļ¤6v¾"½’į’4 ƒ® ŽÕ:£]œGÄ ?hŪK ā6Ž¢žXŠZź6­äĖo.>V¼{WąŌŽńļģ÷ńkÄ’>$ĆēŻZ<“éw«Ąæ³b|¹>øėī®Z““¹ģa1 ÷Ox‚³ż†äŗą3ė]„WšÉņFŁåT\§ŃQ•Ńa¦  ¤ēœ×‰ųĘś“ŲŻĮęÅ4%Ń»oÆ51’1ÅUå‹hūköpńo„üešŃ| ćÓP±‚@”söy—®č?‘®£āĄo ŧÜkž +,*č墈®£årĢνõ#QŽ-Żx³ĆW0޽+3¾IovŪĒ“vT\cˆŸ)>ŁĒį]1ZŹ] O¬ž»ŌōsģÖņ¼čĪV@2įXp=ÄÆ īyĒNvż(fF…Öœš‚ŃǼqœsXé—v >ŽŁļX•-‡ˆüšö˜/c'(ć’=Et&;”‘ĆŒt5jfʄ•‚ø>X™ų/®Cā=¤²ø2Ž@vŹ„ó9Ƙænm>"x›Ā1ڼ,ŗD-Č£ēĄĮēßśUŗ§§…¢Ļ’“%ņŠFTZõŻ:ųŖa[sy=+žr¹źÓ„”ÅüKŃ[W‚Žž("ócŒ‰_g-žxƞ-ķM”ņF ^_Р̊”ītÖqɅŽEmŽü]¼0 ŠUĮÅ4ģyÕh övŅcu“lA늦4ĖY|ō6Ńlc’u®šx†“8ją“ŻŅų'Mæ4lÖRž—Šv”’ųAķ„H­EĆ*©¤µtĆĻ6¶U ģhI§Üx!®iójŻ£įņålÄOӐ*ž‰ūIübе½*/ų“B‰%/ ·ŌnFĆŠ–ā»)f 7šäT«E¬T“ī®}”m’2ż¹4x ƒIųéÆ<@…S)Iš¾ž`9Æ#ńĒ_Ś·ö‚×µ+Ļ|\ų•Ŗh3ŗh¬wϲć¦#LŸŹ»V7›CņL7ƒ™ńt0ŃSōæ[螉ŻtG۟³~ŸąģøO Ųk·‰÷„æS33ć©fäż+ė}Wć®Ÿ©YO&›įm&ŻĒ”#ŽŹ5CķČĻ?ZŹ£¾§ŻSĮM=Ļ—~5|ų]ńšžćT¹šk©] \ĻjžT’ƒÜǾkņ³ćWģEāŸ‡’nńĄū«ŻNĀĄ½šĶ˳Ļ*ÆwĒ„yÕiM„¦Üm-Ļ#š7Š`Õ#xĀ“PIäĻ šń8ꬽAҽoÅ: ¶ii¬ŲKņ8 Ą ąg5ÉČĻFŚ\÷ߣpč>/›VŃu‹#RIATvǘ§<ÓõŖ?“‡Įßü)ŗé֑k’fIZ|?å§ÓŌU؝4Ŗoƒ|Cż£g—¶tuÜ„Nr>µSRŃ&·y.įV‡q9ĒjSŌģMY3Eó ŹĆ“ė[,Ņl7X®s^žžPśWfĪ,. }©J_ų ·žÜłģO”A׃‘÷k~ 6†9d’YŹå½=kߤ½ÓųCžä¶—olEŖ·īs“õÆ@Óm‡Łƒ*®ņsļ[Įu<ŗr…ށ-żŹ<0WųøļYś›5‰ƒlOß½ŸQZµ +}Uę·TYŃĻÖ³žŠĢ”7r}Ŗ¢ģc-ˆ&–HCVÜ{v5,Z„KjŃOßėé[ÄĄ¢-¬žX¦XĮčEz—©ŁF‘5œpy‹€¼ ō5¹œ§Ų姖S|ķ RNp8ü*GŸnŲšŪó„c%c&Œķaī­cWŒÜ³”ųĻR[čEŪE%ŠØA©śŅ2héµ]Hßä|Ę#Ī+/O“ņęI#!ž@~“‚2±ÖE©Z€a•Õ˜t®oÅVßZ¦bD—vCŒŠLź|²ßM6I1ܓÄ|Ü{×os 세¨ÉŶyž¬`Ÿ(±ź1ŚøG¾ŽĪģ[Ü9u'ŖōQAœ“c5oéM3ĒiŠČm·vźŃæĢĄā™­n-Ą6ę÷éRĖ sY ×'µ#—#@P¦KĮ>¢®Å²08ävö Ø­K·2A-øY¶ć®kå_Žž4žĘÓ.ōŲĒ3oƚv: ĻĢM}=Ļ’#ø.X>öz’kNKdø³ŠhŽAžŌ k©Ļ2ø•‚+&:“Ęk UĀ$JOR{R±“G0‘<ĪтŁ/Š×]„xGÄŻÄ6:&•uy?Żf §°ĻĀ„E)ōg‚æf IÅļ‹õ£)†K`„qœsśWŽ’ > ų9D-ŠīB p2Ą~tEEßāĶ7Ā~‰māɔ?”Ē÷ŠqŲć„|„ń'Å~"k°ųRg³°wkŃ}q^6*ÆDz4)w<®ĻF‡ÄXÜÜ魩ޤB`–ŅÆųŸĆCM„ŻkWšh–1|å$l3cœs^S‹lģŁ™šą?ķ ūTė ῃ~O„āu[jŠ2ZD§Æ—ĘXJżńż—ąŸ?eŃe©¾›oń«ć”|ĶSPŒJ°7ńTš£>œūö;B’F5+©÷v6÷Ś%¾›ć *ĄĀ¤”Ey'·AüėĪ|Mgń¹c“EųW„čV>øM·7Ņ>݇L?­tF'$ŖÜŠš’ĆįÆĮ®ŻÜ^ųÓʈĮęžww“ĄÕōö™­KØéŠšŹØ• §+¢˜JG'wmg-ō7ml©r™ '±ķZ2Ćž›“³ŽBH3Ķjd4Õt›­béP]>Ÿj¤š¼†ā¼zyītoKįč“Č_AQ»ķø›<į1éĪk.Cs#Ä"š·‡Ü^¹“YŌę8œõń_üeż©|%š² KRų‘ā]2×ÉEcm0fi3¶+zt‹Œ­”ų7ūOžß’>'kھąQoą‘凷oVŪۃ_—Zēˆ4Ų4Ķ@Žß\źž ’]Ķs1 X“’IėÖ½:Q±+Xš[R×M3,€pŲż+ćwgvĻZė8*Ō¾‚D¹v!äōؙ<ā@ ¹9±ŃÄQļӊ{Ū9bźHĒ8õ Ķ²ż­»Ė€ÅpNMkŲéÆņ“q·ļvśŠLc}N÷į×ĆÆ|Wńe§‚¾ų?Yń߉dußOŒ¾ĀO@3_ŅOģu’™“ ;āgퟮŁŲ:H/ šķœ€lQȎGž6鐜×5j¶Ńōé4~éųN |5Š!šĀ?h’¼;&¶·Tb£?.0ÄO'޵õÆx#Ctåx¼GāÉ]6É0ē®įéīkĢ”µ;!‡-©xsY–žßÄzžÆo’¬ŠŅŻĘŁPćæåMÕüN-‰}K‹NC„‘£b?Zͳ~Tq6:Äz”y¬¤Ėw}r64r¶åb\Lr]ź«qqØēHRģZ<ēåĻ=­`Ēc9ßZŠK*&%ņŽfą©VóCÓ“ÜKs$ww‹ŹķäR ļ]Š\Łß_M¤Ūē§h>ą ó/ųUŠžß”Ł*źZhģ™Ī^4'=MkŠ Ļ|Pš?…ōKĶFū^“Ōõe*[E’ŹyÉn?•~||UųÓāæ_Ü,šŒŚF†œ„öī Ż+Ŗ; cĄd‚ūY—Ȱlī9ĪyÆBųošŖĒWmJ a{­U »+/ŽßēÖ±«>ˆµ+ Ÿ ¼ƒav:µ¬Ī‘‚rG¾ śBŪBķŽāō ŲĆĒŒc®¤²Ē‡bŅōĖéŪMÓaø,øÜ£©Ę9§y>$¾ÕåO%†#+ĒŽŗcē,ĪŪNŽ++ømfUłø9é^ƒsMŽ‚@=iØw0’<Ļ\ńž›£]-ÅµŃmĮOČpLWųÉ4Ncw§5Ä/Ÿļf·TĮ#ŠÓTĖ~š÷ĒR:Õ/kĆH‰cb9!P0ąõźd­”¬é7R Dšév†éÅPՋ>ęi3jĪNÅ8¢žŸ©[I$vļćē“]„šÅ;„Ōn^/īµbbC“RH ‚—;²£=+¼·ÓąxÅÖ£&ėÜ žŸrzöåeū:F­Œ½ė‘Ōī ”Y!ŽU<ķ'ö©”ŗAŸ+ųßįƒų§[µ×t×mŲ}ē`ĪģvĒzō…ŌN›¤Śé÷ įP(} sY\ÕĖ”³ąū»u8Ó[W6ĢIŻZļuDŅtŪ·Ÿ@˜G/C›ńÅ#'"qŖŻx…š=Bqēl –lf±ģ4ż1EÄN"Nø g'ÜŠW7Fg_éńŁČķi$’)Ēx¬ų źøy¤;Oš÷h2l»$Ōtxg’xādÜÉĘ>µĄź/Óµ™ć·.šJĻ‚Ąą}Yj:X5[x#‚`Æ®[<‚EHĖ§ÜŁ<ÖB™·mcš¦ź³,i×sŚ9„ ¾9®ĪĒQ¹ł øß4Dp\g5Ÿ96-I“±‘äFĆ9ēµX±[K˜›ĶU*­Šž†š•ÄdŻjP6ųßa?2’5¹„ź–÷5ŗJć’N 39™z„Ź—»Hė\&¢÷ŠĒ"Ų9ŽL¤ŒŠü…ČĪsĆZfæŖ\M{«EÜFŁÜ¬OOsĶzZjJ¬e„e9V<šÅ¶j£b“[Os8¾]Æ ķė[iį›ķ~"F¶·ĄcЊҜGc‘Ō¼ā"śhõ mZßh126@śÓ£Š*hƒ6Üooį>¢·öhž]nsŗœńŁČĖ5ōR¶ģQŅ©Śnwą™°-»ŒI£k“KˆŲ(#’+©–śźfŽŻ$V·Ąēv§ĢÄ×BœWĘé%&%-Ó±®UŌäńRC"‚J„łG`1ż* Z9(­&röÄé æ­lir=‹lžq’pHiH%µ™¤9*Ų©«Ńj±Ėl"$3cńNĆNĀéŃ^Ir”-‰ŒsžĀ·eŅTy·EįÉł°Ēč+)DÕHēęøµ³’X#rź„Žk™–-FO“] Źž>¾µ˜ĖŚ|šŲĢ#¶-(ō?ʬźšÜr³Ūą@޹«Œ­£‘æ²¹ĀŹcGZÆa"HB ¹#ڵ&{ ś†Ÿ¢ŚÅ+B.enT}ļóĶ.“­Śjš“Cqu „a79`N=…W30gó%ćω÷Éį[½äk6XÄŻ0§¤wÆ‹āg5]bĒS†ÓS{ˆČ]‰Ń±Ął½øÆw•Ź'øxQoügā«[Äv¾”‚QĪāŹ8ĆzŽ*/Ž>µŠ>"ĢÖ}֓oéÆ¾<źW>+ńķķׇµ±w”ŽRfĄ”dóōĒéVoXö/„ßbŃü-wįļj·³_Łŗ VL+Ū>øĒOJś‡Hšó_ųYüKsc$±J8\üŃŽO=9¬j.¦©•¬čWķØX\\­²/ĢŖzõ¹Æ ńżü’x‚MbÜ]ÉęFX›gõĻēY¢&ʈcńœVŖLL‹÷Ļ5ß|šg‹u?ÜŚx{U]FęÖW‘aEĪxČSĒZ苩óŁ‰ÆµŲ|Wy¤kW) ŹVMČFÉ;‚;Wm”Ȗw|·ū0ļ$~•. E[CŸń‡üU ˆ­!æ‡ĶibGūåū”½3Ž+†šÜ>»~ÕՊYžP˜o9ēó¤¤ĶŗNüń·€›Å÷ž±ŗŒj łŽnzeŗf½oÅ:w†ęń4vwŽ!°Ņo "É;a;< Õø±ø3ó§Ē&Öž•ĘĒš%ü3ćm+Å֚„öŅŪÜ?Ÿ ¬£wb+X«jS‘ö®šĘĆYųūšßÄś~¤.ŽXPģy‹ĢFyēµ}»ū]ų7VųAą-Nā6ŗO™cxH*$#×±5gdrĻSó›MųØuż6ÖĆY%Ż»ƒ™ Į?īśŠśļĆZW…Óū~(3Ģ›Lœuķcµc(źT!mĪi2ź’fÓŽūQŃt¹×ȑ#B@:ØüėŸ±Öµļ‡ž;}Ö{»›s7”åĪG”TŪ”Ł[Cö»ąG-n“®źvIs{q ­æž‘³ģxé\WÄü?įŻD$ §½Š«# Ļ Øw¾„¹³įOŠž Õ>|L荦}ÜO%חĀGĒW½s~ųņŽ,‚óPøÓ¦ $År˰ńžzUEč.{œÆ¾*Žéž$Óo4+‰ ŅD©[³ ®½ņzäó_¦’ üm¤Žü=:Ü0¬6oÉ gįŠ®ļεŽĀ¶‡ĒZēĆK憎.²Ö¼!$ś×€µ9ZY#Ą[]ĒT{ĻźZ&Ÿc5ɗĶX‡\rÕÕNwDJ§æĆKĆ6‹ÆŁŚŪO*8’ D£päntČāæK|%ą=+ÄŽ³¹Ōķ]EcX×$cīćņżiTw'–ĒŸ¾hQx¢xn“‹EŗBbTaÉ+ļ_x‹ą­µ§u arŚ™æpŸ,Rp?Ļnµ*’/¼1ā_k×Wš6£tĪC,`įĄ8;½kŌü9š’ßYWš-ŚÉŒęmÖ¢G ē  ÷ČÖ°FÜŻ¶|’ōo é>ųö„öˆ RŅŲ‹ŠqڼŸāž•ā-7]itų¢}YH›h#œēŅ¢Mt}Ļ-Ōü­čŽ-²µ(ļ­ž0ᓤ™Į•wš=ŗŚĪ’:­ĀŒżćRes„Ńu”Ņ--ģ*±®B²œ~µĪųāŽ”į½;QM/Pū/ڳ ®üoR0Gåš QGʚv©Øh·ĻØD÷·W/*N°‰i!ūė_~Ł|Nµń­–©¬Ę4ķ^1²ķ š§.ƒhūkĄ‘Ķā:`¦į~ö:ųÓöŸ¹†śĆľņ-ļÆ­ÕŻmŻw29zræ„g98Ÿ“¢ĆQ=¾„“pƒk€9ßҹ»‰%“f]QOÖˆ«hk½Ž^GŽY-»”ü¤zśĖöpń…ļ‡5a ­Ķ¼š\ųTi>ōdcŽxZŚgč=¼ŽrGpYD„ć#½h5²HĮ„ž[u¬äŗēcē/’“_šį×4ū}چ!ø™÷ą²į’ÖÆĻ“Ÿt’HŪä®AūߍB‰ŃN£hģü ā‰üā=7ÅZYhµ Y;Tžń åHkķĻŽ6—ńĄö>5Ó“Ęø·{p×.ƒ…l~|*¦oĢ~źĮ¾¶Ŗkś½ūüK¾_ķ-;̽šÄ³Hrńd–ŒÓi9ćŒ3WōKsbaŌn^ W CÆøØØµ¹gŠ’üYēĮ†¦ĆmĖBŽŽ•ķ2Ėķö•UTž5Ē ½ė.U¹?„oų-æģPŸ³gķCÆų÷ĆÖ6–æ>#¬šµ†Łj‹ƒ49(%·fQŚæžĶSK{y®H|‰ƒAī3€k,$R"ŅŚ}Ū~9ęŽ}­žV$¦ź­rĄ©¶śäšī9¦T@Ź­“¶3łŅG!e äA™:“aÄc#”5^6h˜²Fq@Ń”‘ŚFĮq‘ƒéZ°DbĻÉß81±ö§Ņæ9>"čzO‹tmCĀŠŪÄVķ.›vĄy0]/<7E-ӊęNʒzÉæķ»š‡Wų]ćŁ5xģZ×Hø¢½}¹ ążŽkāV§ ’××NG=FPXä_1ÕŹ’²GZBŖŪ ·jź‹¹ÄŁZén zméųÓC"+Įź:SFvpŲg½T„*FåŪ®é@RåˆäzŠœ3Ńć A¤%ŠzÉ·lj zśUųļ5]=ģµ=ō鶕¤ét&Aó(Cø`ūćPg÷‰’żÆ`żŖæfĻč/yeeń+ĀgϵHåłŁTāXš<ē$0?»Óœžõi­­ŌH”RŅķré÷SųÖ‰Ō=>'i–·ĶŌķoļ-füBšĒ…¼wąĻųʖś§…u«Y4ĖŲe«G"•9Ļ×9ģ@5Ē*`ÆüĆöAń'ģ«ń—Å֗mqi§]„“óĄ™K‹2Ö×> ²`0ģĄ×ē «Ć%Ģf)™VLÄśÖ3Ž„Čöæ]Ż–¼ŠµSuw§m2C+ ŖŽącæŠjŗu¶=֐ń„ÄR)[—¾1\5E |Sa«Kosq¶ ,s“čqÅ}V]oH¾±IŚćH”ˆäDo¼1Ęq^mMŃ֏@ų\|ąćBæb&ö’ś}ė¶¶m:Wg„.Ę\W„‚”ŗ˜U‰¬uE€„Œ'#šĒš9Ė£FbnõėÓ×sŠeĶ+Å–›$¹¶Ź*Wš·/‰u]iŅŚä……WhŠ.eŲ³c¢Į“óŹNŃÓ­bĒįĖ]Zā@ŃĪہU®h4R[“=}0Ž ēYLlY8ĘŠŌvN—ŗėM$q®OŠP3Š%ŠĀßlьdsĒz”­Ż’hiČÖŃČźƒ•ž“›ąĖ)µKŌgąNĪŁĄgÄ6Ś|óK '±•=h)&µ-č\c"YQQ›ų½Ŗ“ńn¹‘v„AŠé@9Zœöšh‡x0õ•ĖĖāžĘ°Ŗ$Dwē“@FV; yoŽĖ6×ZēüQąĶ:”¬i°2\°ÜąžśÓLéƒŌÅkŸ.Ų;攀a³ÅW3$‰2¹{v9 µ#S¢¶KUādźO„s‚;Tŗ`­Īz½¬’ʰ¬nŹÜƒŚŗ_?†®žKŲ°dÖr‡‰ī¬õ3yx…3On{×÷Ķo‰2³» .ŃŅ”V£G¤ų/^žÖĪāŚ'‘Ļ'œōżÅW0é·"ņhŒ„ŽAČķÖµ±ŃĪ ÅÕÕĢxÓm›r¶GH9ĻéNń‰¬¼[k£]ßiÖé­ZEäµĮ9i‡b ŹhÜÖš‚'ńµŠÓš+i”b7ņēÓō®į<5q 5ʙ­Cm;ŖķR#8¬¤“. ųŸöšF”e”kīƒO<|„AĪ=kóSū/PÖ'5ūKˆ.!a1ó9 Nx®Z‘ŗ=2¹źńÜ>™kivŽ[& +qŒ×_gćłŪĆCµ’Ä.H<–č3ųW—^š=ü o$ŁĮéQjśŽ³{„ŚßImy,=¹L†.œœsģ8ÆVųońCÄŗž 4ZC*FV•É0ć”éҾs1Ć)GŠż?&Ä5mO»<9ØĖ©_iÖwž‘:€éĄ~Uõ…%}6óMb»1~šŖį$~@×ÄÖ”cķ#]ŲšO„’4ķCÅß<š’Į1_k÷WLńc`BpĮO  ’õėźOžĪń_†ux›Ę§…~ Ü,²Ū )x[Æ'§ÉZā}OĶ’x(ė¶¾üX»7>*ŃÆ&ÓÉ8o1X„˜{ƒļ^'āko‰?³†µmįĖ7ü#ŅG鶉£¹„ōł½G„yxĢ:=l=sźO…Ÿg)igizo-.\’Ćź+ÖüGšmnn-­~/ŅtĻ:`¦Ņi2ļļż+ÓĀ×čsVWW>®“ĀwŃj—šsźpŻ[G‘½I ćҳ4Ż;JÓīäY G†7’Z÷čU‰¦ŲA42€RI\żŃœkļ[ i~Ńō†Õl,.µ8ś^Äł pyļ`h»źoN›{¼Uć©/³Ÿ•o€HCŽÆxKį„ī®ķ©jŒl­2žg÷sŠžu÷9v’7?^į\,hRę{³Ą<_qse«j|¦6H%(¬§;‡­yĶŪiŹØŲgčMč~³–ŅZXԇ·ÓH²@Ī Œp3¶·ōm=#Qµ='ūBÉņ²ŗK±ĮĮĮé\QõųZ:¾%ŅtŽhļōųu ;˜¬ź‘żåÖöIįę#ĆśŒ×:{±&^LY=ŽÕĒ${ō)ō:ńØÉ,š¶­eā­Ź}GHIBHŠ®ö|õłzš1_qųWć…Ķƃ“B¶Z_ÄGĪŪ‘‘0x*zżk¾KRĖoŠōĻ…ŸSĆW7rŚÜÖw/ņ’ļ+/ā/Œ.¼eoÆj“Ļ3ź jóDY¾bAĒįøžÓM•eVw±łłšCÄšŽüašŒ5cČÓ§¼0Ėpüˆ÷ļÄ~•ūÅwoŖŲĖe,š€½Ó¦Œ4lį ģŹ~•ŪJ„Ļ­.YXōŪ->8ķ-§Y—ĶĘz~•ło’FšÕ×ü,Ÿm­ ŗ•“ł4ū§Œ|Ģ[‘ŸĒ'Ÿzŗŗgn½·<›ą/Ć_ŒwŚv‡wā(|q3„ŅF:ńÜu­’޳—ĘŸ€—Ęł,ĒÄ?˜Ģ¢÷LŒ™! ×znxƽ#čØclyƉńmÜo˜½Ē0'kD}Ē·ō­_éfź}JÕ/bš4-öY—ūæē5Ģ”gq̬֭y¦āü9ŌćÖ4+×·Ōpq‘ū¹[}}ėõö@Ō„¦‰|Įy•ĖLžY…?žG”ÆĢkł£³In!R$Į8Öµi¤ģ…į¾k_0ĖÖ+Y7%ź“Óü½Q©š×ĀIńXÕ“Ø5+k=r;Fø…%l qĪäk›Õü9«Ų5ÄZ֍y QZ]™Œąć9?ę”OŌØTKFrT2[ÜÜ[;±“`Jŗsś~U5†›ueö²“Š’Ć'šę©”źBičjéś¼ŃoŠįB•=ė¼Óļ"¹ę}+s¦č^Ō-­ŲF’3 zW?cnī†U8Ļ5e› >īQĪ:w­$“܀6ån¹«ŒŠK`  R¼öļX> ŒÉkł¾`: % ęU„£ļ ÷ąg½j’`Čń<ŖƒåąŌəpA2±ß‘Äø–ʆB„Ł»œŃ[a!Č~5‡8F69Ż_AŽ÷|ĮŹNŖ@eżkœH/“h‹ŹĘH‚ņĖžs”v}ĻŚ,tS&Óұ Ömuy."ØŪvćøžµjW9„n¦“’9E2HķŃ7ć隫·ØaóVŠ—sšjč²±˜¶ī]ĢzVÖ£¦xwĘžoųŗÄ_i-(‘fė­½ķō®šg‰Ž¢„;š×ĄĶHx¦ėCšß‹“Ķ_Cņ÷Ę/œE(’géļ^„’>±š”  ½Ó ·`dˆĮ*˜ĀģO5ŪŌł«ØĖ‘§Ćæ‹óųmu)ü==­Ąœ uštī. ׌±ę»=E!5C„ėžŃ59=žU†ęBx„3 üM'ˆ¼5/ģåńŅŹßÄšYėž¹@ĄĖažŁĮž!ŸĀ¬ä«O[×Ē?†Z7Ćļéž$šlūü­CöØ_)o!9(£°¬ĶxåµĮ9ą{ŅnĒ éÜӖā(AvöØm”ŗš 4Ģ=™²(U  ¶kzÉ` F8öéAJ$×+ct­jī§pĮć§½yo|%O² ”Ż˜Ę’óŠŃLńqT¬yf™ØŻŁČ¶Ó,j»‚”ŻÉ'Ö¾ŹšN§}įĖ ,_MžŃē…YšJ‰äw®ŹS>k¬ģ~„žĻ¾¾mKėČ̚}Ū—GsלÖgĒ8ķm,mķ.•ķ®"øVI‡;NF8’=kŗ äR\Ö=gĮ¦ŅlŽi ­“|Łē„Rńµœ–·ź6$Å2œī9ö>Ō䎶VÜü§ż²¾oż¢žéVÖVĖ:銩Q“’-Õ}9ę¹ĻOkāæčž$¹’4¶sŠN@ r?ĻJę©Tµŗ=«ā÷ĮŸü#š·‚¾<ųŪ’e’M4#!cnB¾+īŸ€ü)ū@xo ų…-īņ6·ø‚@0]‡QĒ\ā±&/FĻŹXjńĻjd[źSŁÜ¼–ģ#|¼õŪ&¹«ˆ!ü²ÄcĘ(9šķ„¾öY¦k‚pĢ͐~ƒµrž)šüH8­78Ü$įØĀÆ ž ¶„–§=ė¶šō_čl²R¼Žh0f”ę7DD`AōŖfÜīŲHŁėރ-HB̳$qŻŽ¢„žš@Åe¦qփXĒ”Ēx—Äļalķj}æ0$p+āˆi«x¾īöźW[øIuĘJUm„ę±¹¹Ž-ÖLēoĶĮėZ Յ¢¶BɒGū>õ dŻÉ=Ģ+ ņö刃ō®³Cųmā½z{ib±hķĖ¼„3%čĻžĪ:ף%ÕķēWÜÜcņ5ōƅ~Ųč„“Ņą·ˆ°Ŗr1ß4œŅV-SŌõ«OO,q“VĢIQ¶±õ/Ż| kŪūż"[‘—Uvī3Ąļ\8ŠŚYčž?sńwĀæg³ń’÷rźę†@Ań‚1ųV±š½~tūÖ©§ĖŸ0–ÆqmźuĘV=AšÅå坏…¼ į‡ń‹%}±,“±Ī.ƅ÷÷ĀÆų&‹6µ¢ųćö°Ō¢ń„Ń Eu#¦“nPD6–ƒ£cŒā¾Vńω£š½­’‰|eā o ųr!ęIróŖ°?ŻŚNsĶm›$~~ÕßšSOZ뷁¾źFīėiŽćW$žč÷”ōĪGJüińoÅ ¼O©>©ć/źž'ՙYüÉHĘāzķéÖ»éQīLŸSēüHŗŗøšŚTcyž,דĻ3ÜŻÉu(o4šHī3é]‘Ž*®Ę{/Īp[­ ¼–‹kĻ~’J³‚rčYHÕHó0ŁķļF7•TóŠŽŌ4f_ŽŁ$g‰^õ£i§»m…T“zgņ¤4®Y»‡ģ3髺†£q7•œ(ZiŲōUæJż¤ż‰’ąŠæ“Wķ*m|sńJæ„? ~łŽčbīāgp^Š0zšę­VĒu*Gōķū9~Ģß³?ģ/į{/ ü)š=®­āYT$ŗŌ–ŪŽi{³¾3ČW±j¾:±7‚ēÅZ­Ę„upĘ8-TüĶ‘Ę0q’ÖÆ:¤ĪČÓ8]zĻÅzÜņ¬“ŪųwH1ā2 _OŠÖ.”¶4oameawsž˜ėóHqÜōż++%c"ŪX’g‘µ€mÆP#·+‚{tžUŹźš­äŗ“ZĒlm¬±’äć?…bŲĢo>=ÆcgM)9ÜA \֔ŗCŁŲÅ.±ym>ń’ØĆī?„1–{;8d{g-Ž3\©«ż©ŽßKŒŻÜ¶N1Ž©Dhš?x¦ĒĆv7·śõ肶21n“_|Sż„JK‘¤ŪĻūüįā<®ńsZĘ6)Dł„|Iā]wR¹¼™å'uUÜNAéĒ­{Ļ…¼ā)§·—Äz9šÅˆß“Ź‘Ēj§48ŲõĻü Ö§»_ģĶ6ŚŽŲ«¹ē†¾“šßĮķsĮ²ÅŖ­“rJFbģ¤q““\ņÜ–ĻÆ~i–še̊āa…øäśž•O[±×uPme€XE’›”ŽF{ńW;7‡tķ;ĆŠ <†•ńÉõ?J«'Š“÷»iÉ0©|ˁœō®˜lc(²ĘµŖŁYĀ—’ĻĖŌ`ó\„—Å»Ū[åŪFˆ łŠō÷¼cÜÉ#ŒÖ|IqØOqu©Alö®łY r>¢¹‹ūc{åÜiJaĒLäU7aœ£{ucsąHaSXŻĆ©…ū@26rKzŔŽĖRø±–Ņ h« ĒAÉÆ2Վ±dÖĘćLø:|¤„˜•Hõ’>•W-ģ'†^Ź’V:z:żÆ!qžyÆań†Ž›o[•ß\į„dՌģs¶¬naø†D Øčk~śöxPĘ@2c“ž)ßC‰ž[„ŗI<’Żū„u>¹¬;ł$ŌŁĢ«ó)b¦Q8?ÜĖįĶ9§X%’ElŒäĀ²ü=ā8õ dÕō×"SˆäņÉ#ܜ:ČÖč.|5m‰ŌtĶNmų6ą‘"Ÿ_„%°–W¶kÉŁ$Ę3ŻŖ[.ĘŖÜGęUĖMŲ÷­;(-¬ĖJĒdmó9nƒÜÓ1’Ōķ.--šŹ9l›Ģ.Y±÷«Ģęø–9‹ŻFŃüŲōS¹ÕSķ(‚ L>ųžXwvśŒ2Ķ5¼É7R7©äthuʵ–āõbóK1™ńśbŖł“”\_;†R…5E$&ƒe œ¾k gv~sÜWo§Ķc.®Ģ¶3Y"±æ$ž53Ų§c»Ömmī-!cy g+Ųן[Ǥ.ƹŽxK±ääŒö¬H]TrūŹmą[ZU䶓ĒidĪ®ąņN1]4‡|łń‹į÷ĦŅ.5 āćIæy¹Ī×SŪ×5ņæ…m<_·SµŽ£ Üym&<¾¹ ś ÜŻ`XųRöś¤¼¶žL68®²ŪIÓ­R5“ķ t'½gP—+±YÜĖsö±¶ÕĮ$ަ»8ōi∻²ƒŒ•=j0l§onģ Ļ#=*8VH/]!Ū³©UĀ!s*źKUŌQ,\ł?zµ³mfh¤…ćˆ±ŪrkxD–ō-^ųS[i$W6Ļi’$Č;±ŪĶėšhÓŃ7L³œąē‚[¦P–³K ³›XC\95›l³O‚+ēę®ySRŻ^dqµAz慛tjć*«ógµiMĶųęźČøPń’®{ē&¼–śé ÕŠ<ƒŌ„l.dr7ˆ“ī»Ś›‹$÷Ø“¶K{æ9OĶ»®*%až„Ś/öÖ ÜŒ¬ÜīėŸzÄ»¼µÓ­—J’Ž6œ1ÄėĄc”ē)¢e#‡øŌ Y ^h–!Ļ5¹¦k’G4Ń]‡×‚* NČźØm„1+2žC,BE—²Ž¦€8褚ÖčÉx]Ų>ßZæc­ĒēHÆ*8Ī{ÓÕō=wJ“E6óķĒ>õµ¬4½«Ag";õ[Š®F4y%č›D6¹hŅ®ļ½\zÖeķõ•Ć™ō覂܀ņ8ļYJ•"ʐźšiØŅU’QĘābÜźQj%ä-ĘsŽÕ‘gYc#ÜŲ“†CĒbk"ŽŅī{•‰mžnŖ;Vń@]Ö`[[vIĮM‡°Ę*Ÿ‡ō]I–ń¦Œ®Ił{Ÿzn f~.žŠæ²Ī™āOk3šåģ‘^\Ū¤č¾i®!—8Ī{W˾šī±į‹H,õ(U5¾P£ēooĄWÆ*½ł\ü:ųEØŪéÖž-¾¶†4,²)lU'¾}ÅTż ü5uØź:Næp±Ė„Äæ(ŠwĻÆJˆĪģ™/o¢šĪ­i©ApmķaPZ<ä×é]¶‹ćūĻéW>•%ז$ §<zC[AŠH÷/iž-šc“«Å{< ī‰Ü6°ą{óW¼Kń ĀŚ“W&§w– ˜ä;}³Œ÷éZ¦Rņ>4ųŸ«^Ļ5¾•”ŽZͧ«ķŒęB{õÆ)šA/‰"‹Urø;”/gśŠ }漏ųcĮŽ%˜O¤ČšĮx䬀CG?Zś«DŌn<=įHōmNo:Õ ŽĄ—xõ¾ĀēfÄŪŪ › "ēĀö,°\[*ĪXōqŸėĪ¾"×µCQń$š2i²Ę±ü†SĘęö¬©Ć”2‘Ņx;=]Ѭu†³Ü€źĖĖ+7„}©­ųÓį÷ģÉā«mSĆQ®Æ{~¢YÅø’VqČoLµ¼v9¹[Šł§āĘ}Ē^1ŸÄÖM¦—eu o.L«3zūē­lIā{=BĘŽŻŽŹO—i† õ$÷ķSģÖĮģŚ2į¼r¾biņŽ„`Fßæ×§Zńo‹ |I¤k÷ž/Ņ!ŠÕnbYēU¾e =ńÅ 64Q±äßj2i®€“A¬y±;®Ü<о±ųķćĻ źž Óģ­īõ|qi+Ģ«“doīr1TĶUŗžUą;ÄÖō+h®Š6¦„.š?y&}~•ōš—UńÄzģBif‚ÓŹ’ŲBƒ£õqvš9ėO€śĪÆlkÉÆ£1yŠū|’qĮöŹų⯩j…®­0uÅŃ1³ŁBrźkdsõŌé|_āk’xæF×| ā[ŃØéī’wŁ‘ĪŽ+ķ‹ß“ghÆŁęŪK×,¬ŪR²)4ļ’g)ķļŠĀ¤9£fJƒµĻ„¼¬¾»Źė6)¤˜äĒsꔹńüėī+ gXšmæ‡üw¤^XÜi¬„Ž^™zұvÖĒŹ“ēŽtOxĻDńo…ō ČüÉn-ć?ņÜõŚ};׀xnćXńÖÆog§É=Ž”<¦2ģz8÷ėŌTņ£X­5?ræfŻ_Ä:aš·®ęƒSā($ NŃŠć=żėóėöŒš‡ŽžźśĪ„cāCV“ū[K ’d!÷³Ī=*%GcĆožžŠümŖiH.tć†f‘Š“džŒā¾«ųSū5x–oO{āĶҾÉo›’ cŽų„%hæ#6σµOkæŽo¼=ɧ%Öaq&LŠ®Nkō‚? j¾ųIØĻg½··!݁ŽÄp1O—÷w} Ÿ³¦ŖųĀĀūĆ7’M{©­±–šP Tvõ®Ęü šĒķśWŠ,5Xuūyš/Ģ ™Sōė[ĘėBļŠźžžŅ÷æeæš•Š§iZ_²–9 €>läõĶzĢ žZ$¹Ō`ć½)£EŽæĆi÷k½œ°M Į*J¹Hęæ)ž$ųR/ų²}-b“Ÿ3Ā6«“ŠgĀ³.'™5“ŠŠ†l{ׯ_²‡ķÆķõo†~%‘“/gøī^˜ŚAļœ~”XŽŠę¼+ć?~ʟ“愾/čSŻYj~ŌRiDÖīųd8ž¹ž€_¾2xsöƒųOą_Ž f›CÖģisŒÅ60Cc¾AüA¬åŖ:"ō=WHÕnt]FßP±}³ĘŁśJūĘóžOAuŖ¼©“ŽÄVRvó?;æą£ß²ßķ‘ū+x׹ōV ć­9FµįėĖ” !øˆżŽyRŹY2;nĪĆ⯇eŅż²’f_‡?¼'ŖŪ^C©Xŧ·Ķex£l‰"õRĻQƒŠŠõ]r}2ļYŌ4˜¦ h˜#œ#\ÕbnŽCÅ6_ŚŚiŌVŅ+Ս µŌ}wFĄŽõłIć/ GįS\ųI«Ł±ŅnM_@ŗņų…³’ŠŽ½8śg„pÉYł•ūtüOŠ nüci§ŽhŚĆT1˜.p%>›°}s_Źõևu᫽CĆś•¼°źS=»‰9,;OЌWM39ö2ēV!N8Ī VŲčĒp½xķõ®Ŗ{؊F/ænЃµUtņWlCbž¾õdĘ]ʼnZ%;É·jxŽbģQöお El[+¹bW铚µ‰y.w{w Øn>ā4Wdłœq“R†„"«Į×k‚{PuAō?@?ą™µv«ū'~ÓŽ>rAį]cSŽ)\ČQ£9čLJ{Wś,ųÄŚ.µ¦č·ZUŌųo_u *ą8Ū„dĒžƒ’? TT:ÓŠō[Mm®"7/Õ¦§a1†ue’X£½wͦ«d™ą|8ÅrĶjL„cńóž ū%Yüpų7Å=Ć+®ų‡ĆÖŅĮ¬Ć žžóG`w•ĒŽh\‰@?Ā_×üüüEįėĻų‹Ršī§i-”öSł~dĆi–2NĘõ®inEī} šĒÅ>²‡QÓõĄŃ»ZČ!”Ž” ė^s”źS[­ĢäĶnf“lŁČ< śó\"8Äė­¼=pžÖ|S§]Ē/‘ G“-Ė8*>µč?ü|–K œ–srvH™ē>„W †§]8čr>7ųÆ®_ėeļU­ŽŚa*°q6ŽyĒn™Æ±ü!āōń&¦k6·vW\D®ĖnŁ„}xżkŠĀĀČ*-@’O5`®ąÄWW„ki"4i4 ä©=õižmDSmSNøŗh&$Øę£æ‰“æ%ąmźĖĆ„lfIm­½ąpƃĘ9ÆTšĢq[[,ķū»…l–cĪ}Ø*;źŗ•ńŌ%ūCZĪź]³zW‡‘}¤k^D‘’U€9{ÜPle:{ź:\PE)ä֕—‡žĻ`±V}¼œżć@ŃfÖęßCAŪ¢¾q‘^mām)$ÕĘ”oq$ŃŹ7īJf¼Ā@-„&r˜čzS®/ PŖēxε###S¼k‹† :“’}Ŗ…œ@@<ń¹: śPʞÓ̇O±»ņ$HĪџJõksv±Ś]J›Qqšˆ¾§ Ŗé­­ 8ē¦ĢyH„EčzŌ¦2+ŪYeņ|Ą’ÅS—E×bt½ū/Ś4ĀOļsŠś~“ŚŁźOņV$7*8$ņ+•¼{»„5s鎵—+”¼{Ų‘ pĪ=1S&—q}cö¹ø_LÕĘ6.ž“௠j65ŻÄh¦X²ØzƒXZü·VwF)IŽ,œóToĢkĮv³FcKÓ·Ö¢øB" #mĻÆzN76:] ÄšĪ‚3£j2Ś»2ä! f½>ć_[M2鵣®®µ9ˆƒŒgŌsšÄŅ1Æ$Ó|GįØģ.Õ>ŲW\cĢSß5łĖūBü2Ö<<uįø¢–}įxÉAŌg±®j‡}ęĖHŅźźŽĆvB9 €{ćҺϳ$E,”§›²ˆx5ä×Lś, µD)µ¦j°_ŁYĻõ©…Hęŗ?KÖµPžų}ń VЦ¶ø¹²†õķŲÜ1%†9WŅŚWķei³ŪéZžŸŖDī$s !Ԍ` ņÕą®}µ¶‘ćß¾'j? ž7Gā;{+yoŒ°G!M¹ÜÄüłć©'5ō§ĮoŠ:÷Ē’Ū4æˆs 5ō«inG(Ķ(@Øé\2vŽ‡‡iÜ~©ųN_Ś«ć6§eįøo­ē½ņī%vÜ­* ~}’ öŽ_ü-ńgĮćBž@Ö nŅ’¤ō‰ˆT=@Ņø+Ęčė””ųžמ ųĻQšÓ_“ŗLR‡“˜¶ąėżŻŻ+ōKąwĘ ;ķ&A­;µ‚ŹbZ,w¾sD÷0ņ>Œńæ†a#Ō“ƒ%ī•"‡Y1€ąóÅy?ĆķgKųoā«ŻOT–Ht P­Ź(ąõēšćņƒÄRiŲō<’ö¼šæÅ kĄ¾=ųkā>[»$0OXŽć<†ņ®Ćś,.»&”ŖXėÅÕJ¤¬øŪČ<~•TA(č~ü2ńUÕ÷…m.%ŗŽśō'•9īœśėJžĪćPxd`ńH½vœnö5ļŠŖqŌ‰ ‘^Ēnļ䳆5,G ņ׍5ÅÕõėł£˜H¶§…ĒjUź8xžCØ^=­ėŪżœØałā¾ ż°¤†oųFm$v‚fm›°e^¤ŅµĮūÓHõéĆ”ōwĮhŚĆĻkVūCN»Īć’Ćė]¾¹āI®,£™ŚŁ8 OæAĖé&ļcߏ°Ŗu.ų[E¾ÖgWµWkul1Ē潋Ä~3¼²Ņΐ Za§ĄĘOė_Y 4~§—ŃNIv>Bń‹›ł$Y ģķ–'ÖÆhZJ¤Ŗį3TĻcōÜŖžšž±gcö8¼ÜČķD±BŪ¤1«sÖ¹e§Łį©črž4šÕ¾»ąļ=¤ķgŖÅx×oČć89üÅyŸĀ§Œķõ{k·[}cģže¬*IsōļXJ‘ķįą„·Ń^Łī,¦ą–97V‚=«ĶÓŹ Ė}hLėT8–ß„J—±]öƒ©E3Āó&mŲåÉź¬ ·čMZÜēÆd>0x3YšWе Z"ßxzęčOg&xT-»ó_¦ßiéõ‡^š&¶©ż«„'g•æzČ:{Šī§RĒĄāšO“}ĖšÓā~…¬Ś‹+ŻJĘՐe¤•°8Ə’lč7–MŖj72iŠĢa·Lī†1·Æ=9®˜V9)Óqv9?ٟĄzo‹< Ä][†=B/É‚¤ŽŁėÅ}Õįßėŗd¶¶w2Mu ü…dł‘‡u"ŖinwR©mĻŹÆŪ›ą\~,xSāρ­āҼ ćW"śŲ|±Ś^ŽK"oę qš. ÷ĀŅ’źŖ $WŸZ6Šō©JęĢŠXßā)!‡=C0ąTŽųĖń“ątŗ¤ |^žÓo2ó Œ2³ō,=1ĶrĘÆ+4Ƃ§Z›§U^/tr±xū\×õyµÆx‹Pń±4…žęé÷{/ ®®ņģOH ‘ĻjØÖŌ֍Ҧ©ÓVŠŃ%²į­~ūĀŗœ:½Ś’9ćz’tšżWż‘ÓQżŖ.µMF𕵄“öTŻB<˜Æ, ōź9ė]4’“±åē9ĆĀᧈ{E\ųććģĆ®ü ųńā†Ņj6zŻ“l·Vb!•–Üäķžä~ėPųQą’Œ1_ė_³ß‹ķ ń~š<½WĆģDŠėœ˜‰Į=>Ÿž+IįVĒ>Œ¹ØRĘr¾I¤ŚźÆžGÉ÷ͬh·—ŗŠōĶGHÖasÄ3ÄT«ƒŽ;Į­ ]h÷ņL¬tö`ćīŒõÆ2„;3ō¬:"„£=]ÕöćOŸO’+Ūƒ½O^+¤±ņć‹ytR…MU.<±4LW–SŸzµkpf“žŃu{šmÆĢė‘Šā¼E"–·XwwŻĒz–IgOŠ7Ž&ߊgõ±ó…%­c5`2o`(æŗoŽwŖńł–šÉ6Āv¦ćš€8 K‰%ŗ’į.\+„[Ą\`Še)k”Æj®^!Éā“!i!”4‡pÅLc”Ŗ*\jf{†DA·ā’ā8® RvŽG­؉»Æš7ĆŽų‹įˆZ×ŗ7‹ģgól$iēSŌ+Įü{6±mpš0ŃüGż›U„G;ƒ*Äõ’8c†¤Ł” ź_D®Uw„Jr\de@Ŗ¶¦<ÄņHźæ7ŻÕ£§É‘2µÕOs’¼NSÄŖšeŪj—@C±q*¶ŻøĻSž+žKÆéO4v~"Õ­*RÖ{ŲōĄjźśžZI3μ)ā­+Nńւ.’ M$9µ•}v0½ĪßT‡h‘Š!>•“Ųքm”+<7Ž]²FsŸJé,dŪ“)=?:ƒŗJėC•ųįMoÅLčPĮs©Ä¤$lqę ē“ėÓņļś¶©kńļąf‰£xÓI:_ÅD.nāQƒ†xĮDZõ­9Žz“¶gŹ)·ń2hÖ6itnķķ$ ™Ž{ģōؼ;s!$*õØlć”u:É[ķ )=GÖ·ķ!+1󊝎sV8IEVžūū>+„€ņ}ģV‘—Be˜ŗVµ§Żź)j÷Q„ĘOŹ_ž:ר½…ާ‚ź8ä@:±éō­#¹äbé#咏>µšŽ ž™ĀBÅԌŒ‘ś×_š÷āgˆ5ŻEXøyc·Č‰ęp£“]ōŠĢä”¬ĻŚļŁ#Äöz§ōżīTIBår{Œ­_ż„<5Ö¶J«ę,ņŖäJńœ{Šī‚Šš}§¾Gįaqa„Zœę(×`®/p³"²Ž ÷­==m+ĘŽÓPŪ V#؊üOżž.t­./ˆ|K©.•ŖZßH¶¹! ”`Pē¦AĪ~•7;)ĻTŃś—ū3üYŃķ|!}š#ā„qė>»ķ”iČd» ōōąū×Ģŗ$ž.ż‘>:ź«abš‡†w“¶Źs‘·B§±ńō˜®iŦܜ^Ģńo‹>(Ō¾ ü^ń?­­…ŪVņĖdnļģ­{KūŁbT˜ī ‚¹Æ­Žµ„²±ͦ£©kØ+’¢²€ĖÜZéd}ŃUŽ}ėŚĮģœ?H¼Å×āj“ŗRŒb¾īoĪMmŒo)żßĖžx®†V‰”Ŗ®;ā½x-ēšĘeÅÓ¦Ļ+žßZ«ks,c!9®ˆ-6¦ē°Łė?iŅ£w’&e&ØGu<“æī›¶zUobŪYł4į· œņ+ź~dÆ «m^äP`Å“æK{ŌŚ”ć<k”¾7„$6q‚ ­`Œ\™’-ŠŻGĖEv°M)NYpA¦„ŻĪy|Ms+½›@‹>ƲÆ,%™Ģ!!÷ˆ= 14Eŗ¬E%%Üō5Ÿ=‹Ū8”—NqŅ‹ō0·Aāł®D°ķ9čJČ]>Öę褅•·dqŒŠ4ģzUµÜ VÆOJĶ»’ßPcP ®:³:©īzµŗĘžSoīƒšĘń/‚tŁ5µņłŁģFA•ęŹ}Īäō±ā°|šƒ.}7CuäĢbŽ<ŹĪ{s_}žĪšO‹ßī“ßüBKχ A2‡Q‹›”ې~č4¬e9t?b>üšOĮ{dš’ĀĻĒužźņŻdø—®’Ć5Ųź~.ų}į[»{“ƒLńˆÕK˦·'ųFF~“łNg3“Ōü1ńāŒl'Õ-µü9¼ˆ¼–Č0ū³ĀnƎ8?ξŠü ”x%#ĀÖ)e#,§ē'ԟZŅ0īC5µ½j æö“I«8ā=źjóMCĘŚN‘)“X¤[oĀ; (śž€V–1—™ŅEā;mB8ä°th£ĆZ»5»%”i¦ŠqżŅĄœRhV8½[Ęś†-}Y¼`³"]G õƑėļكž ×ūM~Ų#²‡į§†.ü9ą4u&¾8 „KŒ³éYTŖ¢vR¤Q²/ü›öSż‘Ƭ|cć[Ko‹ßcmŻäk2ŪIßåWœóÉÆÕ/ų«M‹Ć ~śÖ•¤hˆ6„„N#Šļõ5ęNWŌķŒ™ÆüOā_NŚG†a“Ņt²Ąż¶å,§=¹ļ‘Yzœ~š¼©qāy¬o5Ea7 FŠä ōĶstB’P‚yüMp#².ĀŌ®Y^!ŠsŽøm_P·³»1é±bŲ“=1XĖp0žń>ÓöņŒŅ)hõ«š]Āay5ψ®[Iį€vAóӁėHz}I4ųgLX§lćq=«‚Õu¼eęJąćfzŅ+\Õg·“›QÖo ŃtÄĪß3+ę`g źkā_Š“ęy%ƁOīŻvÉ4¬•ļŽ¹5Ō£`??üuńsÄ(Õ>Ē-ÅķõŪK°Ē[–õö®‹įĻĄųŠś)ung²’bĀwʧųzVrVģ~x7öfšF…įhbŗƒP—\ȓ`0ŻŲó^‘į†B’ń1ŁW#¾;šĒŁö2•KGųcĆ~Ó†ł­‰(YsŒę“|Ww¢KföF.&yl¤`VŠ™;z•¾x'[¼ūeå¤cę *‡ū߅v×q½»½Ō{'#j½™EÆ*4K£ó®JS„ŪI?Ūc8Ü:Ņ*Ś&Ļń?ˆbŠO³łŠO–ĀŖž¢³-¦“¼F«Į*šæ7s3*č-Čx$b±gŸ=“2Z\²)ķėY·q³­Äš›$Ńɂsøž1W ·š+¢c“(y57čkar°-óŪ5ӝB+č ѵ•“švģĒÜõ#ރX³į>¼š/Ē/ ėµ}}ś5”ĒNĒ`@ī+ė…ńf·¬Śiö^ G°’Ā# W×4 e½WO‹OÓ-§ÓnĆÉ),cG?Ö¹«żA" ĢųaŽE`ŃĶ=ĢøZl3±ķĶGĀ—f;¹%b69ū “€>µ-\”ģjGįm6āš\_Ģo¢é䱥śŠÅń=”v–2'L“Źqå@2N=*\NˆČąŒšŒL« ”Å‹ĄšWė^…¤h—±„šöĢ\[‘FH©äcęc”šķ­µĖÜfį]ŲķÜĒRŠkćó£ ŸaQaŚn§AĘUČ'žƒŅ²¼Cc”q±£@£’«ŠŠ#’¼ŅdHft·‘"NKv­‹[} QŃVT¾‚ivœ€zŪ"‹_NŌōh­ZɆɡ!C7ŽĄk6–·’ģŽV±„l=Ŗb¬QįĶ51o5Č>ZąūĶ[—ŚUߙŃĖ·Č^æ0§$oķ‰ķĄ„1“iÅ2ź(ęį$ żHĻ Ń`9 OķĶ#?Ė1ų×Eąė™Ļ—}"źaH9Č­© :ÆųŖėWŅfŠd±x!2‡ČL`…Åx߇ü64że/Ž)™øÜūÕHӘėüSćDšķ¬KlDX"B½ÆxTÓuūxļį±I&deNædĢ¦ŻŽŠĘā;«’^9męĪ0Ćb·õ„žb‘Ķ]½AļZF60lĮ“”m;—Ōžę –ņ5øŚPÅ+z÷ŖRėIÓf”ݐŸhی㯵2Śā cyšsĄéZÓ‘Ō]ų¶IąT†ˆtöÆ5ÖĮÕ/mīŒĢŖ£ē\šEX½ūĮ±é70ĖIłq³O$śVU²Øøx•#É)±ŠäDm"ur|ĀØ_N+Ģ4Żz}:ĶŅĀŽ8›8*Čģ×m8ŻŲŸh|ā{jŚdgĆŃGo¹”)Įd’"¾UńļĆ}SĶ›®é7ŠAqg ’xäQ†ķ€ē§ė[6p+"?ŠŽ5Õü3ą»Ó.#µŌmˆ/ę1++q·Óx‹ūIė=H4oEml¹Ģ1[E„QŽOõükHFģždr>4–Źh®.R9LH•·½}1ū#ü/µń~&§„=½¦ö`rI/Ž·µŌO¤<®h¾Ńļ-¼čnus D²C/ØōƉüy®Ūź’‹eÓlķīgżąm˜ÉĆ鎳*'„Éį=NĆZK«É$¶…“+ę9YźqķžĘx’ÉtŻfŚóM½lA2•<»qśu­Ó6SīTÖµķIąVµ¼ŗ¶d*Wd…xļŅÆŪxēĒMc,1ųŠłÜ/īZfÜPöööŖ±V¹č>7ųLž•¬ŽĒ4/¦ö*Żr?ŪŃõIµŲ¼¬ÓAęy…ūąśšBäGŠ>2šV…iØYų% wå‡@_”>˜W›*ėĒwZœRNķØA“|vSŠ *µųwāg^Ņ4}KMŗÓb2öŒäŲõōwˆ>·‚&·“5µųe·_4ćq=0*\Œå$z/ĆŲʒ.eÖtĖkØžé}¹E£Ž¾„ń‹~ų‹Ćvŗé†;ϳµ³ŹJ¶ÅģĆŒę³”›1u~ü ŃÅWpX 58å_4īdĪ@ėœEpŸ“ÆĆ½ŹźÓJ {ÉcicPĒę(pÜŃĢĆŪkcęjZ¶¬xrćL‘l傞%•HݹKc­~¢jž#Óüks3^>}<ģńĖ3 žŻė[“Ļv|7ń6łļ¢Ānåyr}{œÖO‡²[„»nd%ˆqŚŖę‰3­¹šÖ—ŖĘK—|I8,xÆ„¾ éŸŲŚī‡+JŃÜ[ČeB{’:.Ķ’Š©wąk ļÖ| g åŒdīäóģj§Ćķz=£šNæ5żÅ„²<«ŸŻ©ä¤š>”‹å<ļāĻĄj0¶»šÖ™&«”M·eŚĘÕO]ć”ōÆNųū;ė^Õ&ÕüU0³ĶČņŁA+Įå¾§?„ŸnėŗōzÆd-5»ä ­£Æ5ņÆķ?ńA2ųgFŌībY’a5̌Ē*­ÜžbŽ[‰ŸW|ų™ąĶ#Ą‘ųvŪ]SOž5+ƒ,õČnż«'āÆĒżB_‡ŚÆ‚<Wv3³„滑TtUĄõ¢qŻāĻĶχ¾ÖÓPMpż¢ĘxžI[sœčkÕ4’ˆśüwWŗ£xOČe_0žäŽØkKŹÉü©|@Ó:Ņ<[4ö׏žQ·Žv/?2śo„~ŸüPń‡|ią&O ޤZĆŚ˜å¶~Z1÷›SZó!µsä}įžā=6÷EÕ/## fÓ3äžyśW»xBļĄžš¼ ŃtĶJ.%ˆłŪŸĘ¦Sģ>Pų³į’[ųņ-zYģīpdh×åo#>ÕŁxV¹ńuÖ©”AoäŻF£q‹‚r9 •Kcźo‚ž0ńĀ«‹ļ =żōö·ęE4ŒKÄ£)ϾkÕķõūOkŚ„ģÖ·ŗäŃ“—"†—üĶY7­ĪiĀēĻśÆÅ;_ų_ÄŽŸJņnķn^0|°H*H 8ä*ĒĆ…šŒ w·r0»H÷¬j¤¬Œ¼€śõKMLŻ2_‰Ÿ,|-Ø·…¢žĻŗ¹Šįķž:÷Å|—ā½{žˆ¬’āh/KƗ僕$ą~hŅ=ßĀ>ń~ƒy„ė7Ś•’D>\«9•upØ ‡‹'×µe$]ŽĒĒbž;Ō4i„‚Ęū†ć”ØöÆāsž ‡ū·Āo‹ŚķąķĀßį·ÄI•ļdp4ķ`&]_°ó0NGV ĒBqœł,üŅūōüģe(ĪFµ§Og{$7¶‹nz§5Ė\E“™•9éŠļŽĒZd°/“™ˆ ŁÉĶ6į̉óČOåLęQh®…rŠÄōéŅ»yIśw Ö2°ö—nĶ œō•+ĪŖČĄg§” ŃJåȦ‰Ü!łœ֜7–枤g‚)›@żą’ƒ’m‰¾~Ņ7²µ=:/„Ÿ’eĖ$ÅĒRUČ?/Ī~P;°\wūØkdLĶŖŚD×ń åAŸ1;6{‚+§\Q‘ż—³ÉOų6ņ 8ĀW¦Éż„¤\*üŅØūńP@?ųõyóÜgęGˆV-sū[JÖ-ųGÄvŸd»Llkµ?+·¦^ƞµü¾ĮA~j <]qāKKGF·ø6·ÅF‹»½ž¾õT„fe%©łŹŃHĶ(~~lŲŖßź W,TŽÜŠō`qŹ= ?ff!Ń[ŪҜ&‚Tī*Œl>IT䂬ĄśSRWG™™>sŠ/E Ś+B»1Į%ūóN‚ēfNą¤P2Į’Iš@ŪųŅC«ä`šö Ś™„%¶¢~Ļ6•s¶©‹5½Ćõl=? ž×’ą‰æ¶F“ńćą ~Ļ%ø¹ƒā‰3I¤Ė,ÅĀĖͳ9Źäyąäśr¤“±ßOcś!𧈬üG„iz唑]ŁßĘæz”ķ`ĆšėõÆR‡M{kIm`™‚ŻŖūW%HčS‰f[kMKOŗ°Ōą‚īŹxZ ˜¤I†X ‚Gć_Ą'ü;ö!¼ż›¾4ėZ­•ę” åļ“‹†_–ćK–Cµ7t/åė§”®wTOĘ«).%†6ŠxYŌ`ģ;–¾šž™§ųį®½”ÄöSjf=›I›Œóō+–¬l8£Ä4ĶQ²™¾Ņ °¹‚xweNP+é_„эzž[]-bšöAū“^¤‘ڼśšjuÓŠŻoą.”āyōĶB?³¢—fšeä~\žxś×½žĖ>šńž¹šĖUi4h¢‹|v3)é“Ņ•IķŌ~5šŒŸžŹ¾ńµµż“Ēm,°*”,£œsŽ•åö? ōæŻ; :5ø…ˆb¹jQ¾‡§B»[Å=Äpjr¬±²¬Œ&åōąV÷Įˆ^ šf±«čڬ0ŻxgXŅĘ„ln@ĘļĜœWƒšį?våϱČ16v¹é·Ž šĘ­C©ė©soįM@~īāĶ€ ē?6}ųōƦ4oŁJóĘŅxF_ų¾Ī(ÆU¤ņ.cĖ:Ū½xƁÄMŸ«åõ4"Ó ŌtÉĖkÓ0ī¹ö5ĀŁź¹h{ÆĄæ&•-߈§ yŖ];IteS»Ģn¤ƒŽ¾ļOYų²ÖŚŹņKm"· •w§õ“ųu%§…ŁI2ŪéÓŗłłõģkč9ķįGTĶGSĆZŽ5¬qԈčšbyä/ õSھÕt{MX×X3†šīI@cĄÉĻT«sl‡ ‡rZCųZ¾³šv¤&#ŽŻ6 zv®ĆĮžŌ|S}–‘³ŲƒóĖž+ö\· Ęļsķr|+¹õ —‡žéĻmr Ie}ølu5ņGÄļkTøžŹąeÜą!ąf»Ŗ4Šņ\-åĢĪJ¶”‘!iē$“šõ ż5÷iĄŽøl‹ęĘ:ōś䓾Ēé¹u#±²Ō„ž ­œ!^‡ŽE'ü{!F'eK‰õ”)ō,F Į4c˜„R¬u5ĄŚjWß üI¦ė:<y֎$Ja&žy·×5 ŌÕ“g³Ž^|.ųļ¬.³įk†šOŒˆ+{§Ī`ž_UnŻ’>µć¾>šn¹į‹Kū VĀ⠌eÓ+Ä t+ź8¬gK±čŠ­męz&¢'kxÄ„C Tā¶–ūV·œaı0Fx®wNĒg·ŗ6nZ «f.­ŪxĻ­q–ž(:|óiÓ·–€n G H櫪)k¾·qmؘ“māL@dą÷ŻĀ3h÷ļØŁ!H˜óø`Æ·éJ2g<5ާ¦éś¦©¦LóZ\²#‘½IąŠā¾;Ųźŗæ£Ö¬a†ś+ ŌŠžwAąūWE9ō8*ąŅM•æbߏ~š'‰µ ėļ=·„µ€ ˜ ,%=XéõÆ×O x‹BŸPū3ŽYßY4ƒŹ¹ļ¦x"ŗÜūž²—3hłėž )e¤x³ĄŽŃt‹ø5DÓ.žŠ#fł±ś×ēŸ(·EÜYMsā&›ŠõšŃijtrNV’YÓ8ü+ģ†ß²?ļō­āŸ‰ī|„ßŲ‹Ż6ęÉŌłīG_89Ē=ėRmń1§œÅÆų'Wм) Ō>|N³ńuÜD–ĒT3 -ŗq_ÉńWŃüJžńŽ•{įŸŪ’’[]©VfĪ CїŽ ÕŖŌćXŽkAųfŚ÷WS6œ‚tEÜŹN>_\W¼|;ųēńoąŖj/šėÅÓųZyŌ¬ĖJĀCźsÜzö«„œYXŒ$+Ņtź+ÅīŽ7UųćOź·¾9×üGŖė>4™{w<¤Č@čŖ{ ä¾ėč?#æk™4ėŻD4¢ėvݲƒÓpéž+Ŗ3¹ććp0§KŁÅikXżÖ|ąh8‚WŌ„P Ō£!g¶|}ā߼|CńąĒ‹~éÖwŽ-Ó/µ†ņźqŲ zŠH”cŅcīœf‰Ņ¾¦y&k:ör{:§ƒ¼ ąŻBč&msC–ŗÓīMķå0k‘ÜgŪč+3Q{>"ęž^‹—k N mSÖ7ŠūŒlås–³ńž™ ىõ;2ųūŽĄ]M‡ˆ£iȍā ׯjĒ–ĒæK™éś[ĒwŹćičzW”x¾S¶dŒ)s֑هQ£,"Õ#$źxĘ*żÜ²©1*GZĪLŌ,£3‚…Fzgj iŅĒM¼9PSĒ_jͲ&Ļ-µ@y’=k§@>Pƒ51‘§hī›ó÷?•-ķÉū+¶Üu­c±Ń?Nœ¹'“œ×OU`ężźdŽĀhę[ĆóE®æˆ4}_ūõ1ęĹ’IąŽńÖ­’ „•Ķķ„śĀ<Ŗ>i=Ļ©÷©R{²Š9]'0@@@å{āµÖį¶āĄéZ˜ņ¢©‘¦ČČ÷5½a˜€Œ¦IōÅvSÜ䯓ńvÆįežŚĆ_‰ļü©QšÕO3dżŅ;Šż”żžh/†ĒGšē†0ŖæC¦{Ž!Ó¤Ō,fš-Žb`š ćÖ¼ŠW¼ÓgT…‘’:Ōžmdwzc4‰“Cœw®ŅFāpŪZµ&žõ-ђL=++y2$#~N@4Ž/ i²ź1ź_bˆ]ƒŲĘ zMœJb‡­£.‡&=ųõwŚ&“īʶŽ-ÕąCŸ×5ā¾¹ŌMŗ°™ŅtŠv12˜!éšķ¢ō?=Ļ£iÜżDż™~"Į”ż›I’ń#»Łŗ3«z_ Ś}õē]ü&ń–P ļŠōį±ņrŸ¾Nŗj[X«vr ”Ļ žžµw:hU±©­hWQ^é“ĀĶeónÜ{Œ’Zžs<}a.‹ūM|F\ŪÜLډ›j R1œśÖU'cßĀNēŅöĶŹAnö̱Ü($Ęvū×Ećßx‹ÄśžŽ%½½Å„%"F¶śŌōīk‚„F}=lxv‹®EŖ‘Q¶·r:{WloįÓķg¼¹’Hm”C,§ £¹Ø„©Ōätn§m®éÖZ½„ŸhÓ%¤‹ōč} kž^×cĒLWŅai=žGų˜¼^qŠÆüÕ'÷s;}͊ź$Źžģ÷Ē5­mf÷؊—œ ŻėӊŌü÷V½Ó®-”ÄɰōĻ­e.žŅ•]Äząu­Ļ:£:‹aÓį6Ģ™br=«a“ł^·Z’‹žż3ķAĢ4Ż]KUĆk"O"\3&Ó÷±ŌŠs“Zū ²C8”“ŠzŅ Ł &ąt­ “1”lX±ūD—0²± Ē®kŃ—uudņ8皔r³„]T[³8Œł ć=Ö®ß%Õ¢GĪzŽÕ2V+2ݳG¶—¾{T·^lˆ”«wĶ%ne'fdI”£Lā²ļ$™vĪ‹óƒ‘š²m^9,dhYČ Ø=EswœĘ¶—ÄįQžŌŠŽ…cæ»B­! żīµ»§[ÜA°LsƒŌ÷«Œ˜Ā„ÜpˆĄœ‘Y×+ nÜ %°6sWŠC; ²”¬fÓ’Łƒ,€÷’v Ąµ²"€±łæ„>+g‘ȍIŌP`āO-‹Ė ÷½EeO¤_CTœŸJ "ŸDm/­–`ÄäĒҼūQųqąÉžkøü/aŸ)\ ķlņÜ÷ėWŗ•ĢĶķ:;]*†Öķ‹.Ę*1ø{Ō°YŽß3¼0–\ńźŌ„dTnĪ»@š“÷„±’ŻKƒĪ3ŠõėĻ2£Éaw’xé\UkPƒ9kļ ]jERK2·Œ¬…sĶa[xvwŗ¶–āIbxeÜ0p`ūW IÜé„Iæ¼l"rUAlž zæĀ/„ß~=$‰šļĮš¾†®]^ö"°GĻ;?¼kFĶ„+Ɵ³ßģ¤| dń~”ień#ā$qbIoG™ žźē‚:tā¾¹Ō¦ŸĮkźŽ+××OÓcd“2aPvć ōJ,ēœ:Õ|Eń'āÓ&—šĪѼ  _3[š,–RyŲ§®GsÅz?„žųgĮ^v§ØĮ‹FqJ}ˆ#ŸqĒ9ļVÖŠ ˜=Ęj”Ų†ĖG»cœr:ÕŲōŠģXߜą &śEń§¾ęRŖ‘Ŗ’ĪĒkŌ¾|ų”ńėÄŽ ųEąM{Ęz̧o™³“)īŅ/Zå©;©u?ØĻŲ‡ž]௅£üFż®õĶ7Ś’—žŽ2ŠĆ1äīīųééžęælo.­<#įŪ/ |"ŃōoxRÕVj±*†‹¾6ćŠÖ¼źµnõ= tĪ1uūķBŚöĖCŅćŌoŌ€žb²•’t‘Ķs7:_د쯵™æ“‰YČ Ó­bäĪ†×QŠmI-/ģķ“-oÉ$cĖƧs^;ćżKū:Ä]_¦ęŲņ!+×¹éųVfnL§¢Ļ$ZsĮؾõRLH‡…ü).lÆÆķźÖŽO³/å~č¬e¹QŲÆ£x£Kš­­ōrCi©ÜN†5 }¤÷‡Ž¹CYāy$+¢ƒż*•2ŒĖķWi‰’ĒLėgn=Ķ|Ńń“ć7‚>Ē{„h·Vž3ńH—j¤-ņ žńēŸå]€_¾0ųÓÄ+y&§Æń7ĽJŃtk{«ė$ČĶ»d)’hzt­p|=ż—WAŸNÖµŪ;{©X°N?„}·įŻ ?GƒM‚ŠZŪ'Ķåą}źĄ‰¾…MĚW†¢ŒŻ•BĒn®KTų—bö"ņĪ&Ž2ĶĪG­kŲƗ©2ųV’Ēv–Ś‡‰Æ¬T4^K`œśń^—ąĻ‡÷šREˆu95iTœČƏ„QV=ęoiŽӑ¬-¤T® ķŽłā^-ń”Śę«5ķ‘•ēĘ~AޚĖi¾%֚åŅł§‚VmŠH85Šx³K¾†Ę/†õ–0Ą2Ź{Ӓ° !Ōh„‡$¶‰Ś}³Z:“šDP9Bp}ޤŹHČż¹ŌE3ł¹Ī?¼*ó@‰,QLń—ļĻ"£œ‚öÆ mŁ5ŗ]š#9®¤Ö4{¹-õū„°!?:ö8ķśÖc¹ū\¢ęŚyƒtŚćņ®’Ē[¹€ØwB3‘[EÜjV5üIŖZx•,āÕ4Ė9ē¶Į·˜Ę””Ē÷N>µÅj:n£Ŗ¶7²[Χ;ČÜ?Óf½¤±ŪĒė™'N7.p~”\Ę%I£¹I€Q”ō5”ŃŒ‘ÉܵŲ»*“ż†:šŻƒRµƒO{˜u9'Ö ƒ}Bā^@Ė*ƒ„ńSŚkw;ćr søsA¬.RÕ]®nŅ(‡8Ę}kfĻÄZŻŖiré3ŻĒ’,ē†Ļų ²IÆ5 Ųü›µ*ŖNĀ?†±­¬ŽÄO·WjģX+¾ā¹=µKˆ®[ŃōŁ`ó0ĢKä)=+¢¹¶ŗµ…ä–0Ž ¦¢%-5 Iž+Ib˜Å,2 ¬µĀO”ŚYĻqsd­Ė÷€éŸ„(w%“Ń­•ÄŅÅæ'?Ņ“o“]6ŚĒlÄŹĆļsŲÖRV‰öČ#Ÿl֮꧂u÷2Įsb<–J8'­H*¢-ó»”vēpõØ/tČŃ“ūŌҕޔesh%+6å;q·Ø®ĆĮś’Äæc‘Q¹xĘ3ėšŚ*ĆHĖńwŽžŅęŽ³Śˆóå–nėQXŻŪß<2ØHdĄä’w5å²5†#ń,k|ń“@q¼u£kjžO²ŲĒśqO”ē©Ų®×rĻuēNˆ’ÉĄĄ«³ź81m£„3WӊyÉ$ąķ œÕ§®Ē¦MsÕŗ@Ī{žō 3ķąhüČ!!ĮǵQI<ā"1ŗ¹ēU)XfÄ~½»±™’ Tæ-ڹX“÷µB³)R½;Ŗ½ Ś}—ŲõĖū9$ÄÄe .?ŗ;W éŚ•“~a擐ČFўÖ®2¹g1Ŗ_ąĢmŌH¼įHĶIįƽóÜ*ł²°920i™Ÿ¼?­Ē$—BŁ‚øü+‘ŒMcI£ŚēœĻ֛E-ƒL¶†hŁžFņėUn"¶¶ø•ū(cĒ„O*6=G…žœó¬©q B“Š€3ųזų“SÕ5 ÅĘ'©]ĢqO•Øėb¶“įū}fęīŠ³ē¦{×{ØxUōKpšÜ¬‘ƒŹp+)$‹Š°šLV÷éķ•ÜN„”uSÓéq²°]")^ƒRŠ¹Āėś Oęŗø‘H<Óš®ONÓģ4¹$˜iźŽ vc“v„׌­-XŪ\±MłłĄįk—Õ5%¼ŒˆŠļaĆ Zab-h¬ę{Y”Ow©ī+°Œ@OĢvÆN«)”ŚŽ›og½­ƒŻE ątĻZĒŅ4TŅhIĻ'ō¬;Aō5Żš¹HŻ€M܅?„wzoˆM1É Š·“¼ć&µ‚čT¼ŽÄŽ&»ÖÖI÷]ēęldĆÓ (–å‘¢ öąšė§¹‘ł#„|hńµÜÖ6ŗi’Ü1ˆüū„y$”Ŗ~6mÄėś-ķ¬‰ęHĄ@zīT.Ģčõļ†ZÄ{ø¼ŗ–Z9 ¶Õy¤`ی×Ä-żœüQšnīćPŌīęÖ£‘²Ž±óōćÆjؤŠŒm£2u-_NŽÖŚū4hXl‘dH}Å{‡„ž1j>šÕœ>Ņ­4‹ÄI8 ʿܰĄ«Q6Q<‚o_ų‡X¼Ōµ 9ŚrŽPrUz{Öü×’ŪEgl·2ŒēxŲ¹¤’8Ż_RžŌOģē7 vØ@‰9#tü+ēŲīē–y,¼‰d9į߂@ąńT8ÉģO=œī²>¾µÓčrjŒ,¢²ß6äDļÜL릺 ĻĮčv0ė÷¾Ō-$ĢȘ ƒÓßҾ‹ų1¤hóčĻq­Śn”Ź lćTĮ\~T†ĻVų‰ Żj¶‘¶“3 r»/ltŖß<Ŗxz÷V¾Öo¼ō˜af6uĻćśPĪIČöūŻI<]ą»ėF·ŗŠāøó/U£ēŽ@śē½zĒķ?į’üH‡GÖ'žŚ°ń÷‰t;p'ÓZE‘ -ū“ć1ųכė1^‹ētPģ: ņ}©©¢Ļfų+’ “zÜösh²ŚZLČeGc—\ķŲWÖ:ÓézRE;ˆ ŗ>ŒŲ£™ Hóϊ>ń]õæ‚ü_į»Ķ54pįo,§āFłŗ¦z s^żŖųsĄ–¶×až;kÓ|¦åyÜzśÕ) I]xoAŌ>(j·ŠīmuŹÖĪ®Ts^õį€š§ž é±¾µu{xóEµ¢“ä,?‹<ńU{‡9ōļLJ~ųkį=5¼C®ĮĆ1†C6sćī/æZł{į+ųCĮŗŒšĘ—soy,Óaü²9Px¤ĪķčnüPńsj~*“Äļ­¹CĒƾæ^•ó]׎n|={wk6£m “—GĶbŪ9%Wü)F%F'yÄ}ĆSŁų¢ 4ŚYŽÄ&håPY¾^r^žõÄ_u+Ļ]x§į^Ųk°[›Ÿ.1óppxś:|ƒ·Sē^ų’ć‰5;ÆģŃy©Ū[y²ģą—=x’=kGĆz¾±i©j6z¦‡½Üx(fC¾&RAē¦)ŲĶĒSģ_ üińоĆ„¾›§ßj:lĻ$*ŻĒL7N+įÆč’5Š­¤koy„\M'ŸnÄ.¦ÕńĢ-ŌŽÉ ]ŲVƒ^og2Ü -ŚAäņĒĘ·†ÅřŠNö7ŃŽA3[Ü!łN~éƒ_¤ž&ĮćĻ%¤ś…¹ŌlQbtn ōżė”+­HØÆ”ōh›B­Šś‚2µntÅv?æŸŁ枝ūSžĖ ž7iņ[>©ugŗG÷£ŗQµ²;a””ļZ%ģš~© Ė“łĪJĪʇŁ6?fńg‡l¤ŽR„ī°׏¶Æģ}£~Ö?²ÆÄ/€—ļjŗœŠµęw(?č7閉 nČ8ģƹkFRƒŒwéśt“?ĶŪćGĆO|;Ō|AįßŁĖ¤ųÓ@Ԧҵ{ikA29\Ÿb?|ė4NŠ$ĢNy5ÓFŖ’MlĪ:†[˱‰]¤÷„v’Hvœ+s‘•Ü:–L‘·§Μ±Ėņ³³¾E0Jś“Č › m¼g$»ö¾×æŅ†ŹŒM(ö|£=OZæ„ėÉŽƒHŽ rJѬ5æ^K„ųžĀx®“»Øņ²[M‡ „sŸ”Wś=’Į)?m»ŪoöNųoń/TŌ4ė’éÖßšų¾Ö9k{øŽŻåz®ć‡Ē`ąv53ZP—CōP¶K6–(÷G”Aē~*^Yé×¶ĢÉ©XI§ńœšG~§Šą«ī~b|^š4~ńÕŽ…x7†•õ§ģ=ūO벯ķ/ąæYź¶šĶĢ1ßłYąć8čzóģMTžŸ ¾.xĘ^š_ş³Ā=ā–ķmd-­ė(ęQü%°:õ9õõU­ō÷QMōŪvĻ$Ļ5ŗ6/'™w!h²m&L>?…«óĖž Sū"Y~Ņ’³V³v3ė>?š“7žŒ±¦÷¾‹Ė>m«!ūŪŠp;‘qļĖ' ‘žw>:šqųqńÄ>xįŠÅšĮ”ÄŁ8 ’œ‚;b½ ĄŅŁ%ޟe$ii1ŚĢ‡īŠćÆ3E½ń'ĀÜ5ŚčGĻy³!iӻܞ+ę 7PÕü ÆŽišv£&Ÿ}yš2±<8śgł×Ÿ)¦šfšv>Šš‡ķ Ŗ\éŚKÜi6ަ؊ńŪ±Y{ūW»ųJ};Ä77ŚĘ‰b¶wĆĶŪü'µęūZ5—c²·Ń5«˜¤Õ]³E)Œ¦s½}!śÓÕ"ŗüĘŲėś‘_E„«īٜ5×R’ȁŹīŽ3čkrÕä·\ćę5źĒcϰõ¼–ŁŻÕœ–ź¬ÄÓcÖK–Œē„0Gm£É½ƒ–‘Ž ń.µkn²Å¶RŽ£½É£‘Óļ5.Vņ,ķ.yJ÷ż#āä7XŚ]ibĘņ(y‘š$#»zžj”nQ`üE°½škyē…˜_* /_ž½p“Ś[ŽĻ*" ¢”žzc&‡āŽ#‹›ŠÄūOĪj«YʅŒb³r äT™ˆÖo‘¹]čyŗØm¢»·&ļ<š}ØC¢ŃÆžĮq)ö©TńĒ$W?įŻ#Ä:­ĢŒÖņŪ<2°óņ€i¤ožÆq©ßh$R,eqóœ^ys«Ew~±¬)¢†t#qg6ŽJ†DbÜŌ×·+m4a¦8=k9¶5īŖ×;`>RDŒX0^sõ«ŠG¢_[L—‚f”Ē•#³…gqž©ßĖc*Å(Eō8ęµōĖ‘qhnąÜŽOzØĖ æwįc›na+s Ą`ü§Ņ¹Ó£¼“»k…{YS…V\r=*Ō¢“8»(䷖hžU,XķĮĒÖ.ƒk=“wW.‚N»óMǹ­1š†¦’eÜ(† ņį‡_zät-HZmI€sӚţhŹĘ¾Ø‘ŻŖ:Ī ŖßOƹč’{=I^gŁ×p*>é¤krvų…«i¬°é—ÄܕĒ84¶:„^$¹šmQķ-’åF™FęŃ©bÄš¾³ę“ā+¼Ńē‘ö}ōČį—ÜłOÄ?²‰”Ģ·zŒ|G6Ÿ,ĢŅĮ!åAń ¹“N“ä·‘†ĒšūŸJżšÅ+­ ?ĆņźicĶlŁTaé_3‰ģŅ—SćŪĒąŸńŅĻćWĆÕKø0ź6ćfučN:}kÕædæZkŸš)ŠŲų¦Č¬WŠHB•Ś0@Ͼ+Ā­{©é”ģ–š§Ś¤žŹö(M«”Īļb+Õ<ć;ķšäæé‘Ø6Ē<2ōĮ?•aīgĖsŅ&¶¹øŽV%[Ž+äߏ> ńΟ$šåÅ“ņn"KiHĢź;©ķé^– ĢĶč%sĘtż_[Ō4Øļ§Ņot»€6OČWo®;ņŸip]H·Ž Łädƒ_mĆł=«©Ėcģ²Ųö2ģtŻZņx ·µšt’@(©ü«ģ ×Ešf‚–¶ĘŁ&Š!ę!”n,zńœœWé‘vŲūģD‘ógƽRĻQķqM!LķSœŲׁh¶SĖ%»”ĮĶße”ZI#ŅtWPšĪ³£ź°[ĆqgĀI<2Ęeˆ™N}E}mńN×įē…£„Äį‘fć'`į ø4‘÷XĖKuā]kFÕµ«ODÓF˜—%d–5?(||Ųöö®n[å36é\(ć5õXX¾„ŲuH7¢«|¹Ē®*ˆ<‹«PÓ#JŖĄV'©W(čv6:DĒPÓ [)\ļvQ‚ĶźkŠ5źž)ŠĘßVļc¶ŒĒn@_JNF¾Ė±ĮÜŁ[[“²D‹¶Ą V?ĮĒńÄx<3ā:ŽźĀź)|£$™Ą^Gäkž£3»Héüiį³¢ųTŃīm§±ŗ…ń²Q·#ŲWxĆĮ“źšd·ČÖא ń¢¢ačq\ī= ©ĘźĒą}Zī%÷°5„ė!FB~ī=ū׊Mü±‘&|sŒš±£¤ajx·uvvÅeźi&™=«Hä8ŲW³ g<Ø\šĒų% Žjqźśf£}§\ÆĪm‘…ŪŌ‘_Fxž šŁķ{‰Ņ,d<}8­”Ž9`V§SćæTšåvŖ3Ų^„ąŁ'Į_¼«GaāSßbRm™yÕr½Į'ÆŁœÕŅ„mŲüéń|ž?ų_ā_ü2ńĪ„ŚГˑƒ-ÜDeeŒ’u—šż0żŽü[Æųóą³®„¬\j°é·ģt“•A{Q’s×fµ§HłÜf*-Ųū*ĆT{ÄWæ‰DŻ?;|įūhžĶžųåšOÄŽ(Ó4¤Ń¾-xvŅM[L»“ˆGēyc%Œ’¤ ī­tF™ę™Š(W­)žßšƒć߈ŸÅ~š“śx×fø‘m~ŃĆÓsa_¹^:“š÷ĆļŁWĘMń1ōmSFæ€ĘÖ²:¹·.0R[88™®Ŗ}‘Ī%R *šÕ“~źŗ&•«hƒMÓ®^ĀĘq¼wŠDXAķ…ĶA’?ą’_üeū"ųÅ’²=ž˜ž6Ņōų5$žīēĻžŚżŲ,LœI»±ąóŅ»)aŌÆ}ĻϼZń3ĆĖ WĀugžŸß±łłū.xoąÆķ‰ń/Ć_³Ēŏ‡Žų[ń† k.ś’ÉU[»ˆG Œa-‚Iźé\'ķ‹’‰ż©’f]Äž=š>‘cńĄŗxkŚMĆ4¢sŸ%†üœžŸ\šIĮøī·>r^<ār ś Ł·F²RMōęogåŪnšn~nų ĒŚ£’fRŚóNŠčŠSŃdčcFČE½Šå• 8ü{P»Ēc?K6=² ¾œWCeņÜĘ@łUĮ9ī3LgIāYtBö+ė ²‘ P®įÜ{W;<Ļ«‚iŽōXę–Ē ĢöRµœ®<ńÕ3‡g-Ō [(óƒ»ę«}©D‰Š9ƒ8q3>i×/ā¶µ"żš Ō¶żÕdŸÄšż¼“žČš÷€¼u”˜äuĆ»‘»÷eDZ‘ÆF”n|Ne‰QšOĢżšV±{­Yi—e¢ß*܇õāæ>’ąØ?tæė? ~<ÓtPM z”qm½…p”ˆį°8ā½JSŠü÷NĢūżmng2E@N@a^Oń*ßÅKįżboM ZüQ€?*ÄvÅl*G;ą‹>/ńĆ/‰ā±Ņõū+iĆ„Ä;v²ä Ļ5ų)s©Ķ¬|fń¦”}“qxįYyŻ“ąsļÖ¹«3č02>—°’,  Rōõ„ÖY“·H$Qœ†Ž•ĮQU†ž‡%į­ ³±±|čMr|dŽÓ¤wmke{Bų;D™ĻņXu©–u™Ēƒ«‹’ŗ§I’Ū©æŠšŁóā>»ąoCį-RģźžÕX 2?üxŹĆ{Jż;^2Ą:0ʲœ«PkźpÆCü}Ē֔Ŗ9ÉŻ¶u\×I¶ƒFŽÕףé0X@ ɞżĶwGsÄÆ-J÷¶¢ņ3Į¼ō®BH„3ˆŻBóŽ;VǟS©”żŸ“-ĄĪ@Įtń“PŚ”tĪjvrrź;'uXĮĒ<޵]f†ü™ F&ļÅ9:X#BĻlūe_lYSĆ+ ŻņČ:ZøŹĘ2c¬/>Ģź’0|{“}ęŲ)FĄ žÜū JĘōPB°$€+ŒŠęu˜ ŽÅ€‰³Ōtع2e9;S"ŖL8Į¬ rā“ūM»‘“šØĖ¹„ĪkKøkņń '9ĒZ¹wa+K…ćĶjIĘ^é²Å“–aÓo­eƇ ŖPqŸJģō¹L”Ę>ńķ]ŹŅĘĢą¼ u¦e)ŲO‹с&%˜`ĢÓ"z/Š›ō9é%$#lā™ä9Źä¶E! =Ɠ- IĮāŸm%ŌJ¬š¾wdŠ¢¶ŌmL%‡b ϽOqsd‘H(½Ah'‘Ę£©[¬o¹÷s·ÉŽ^ ¬ eĀpģĢ„±ø”źN^•ī?¼3usd÷WVė«®Aõ…j–VFŽÜč‹k: ąž rkø³ŚŚ4!ZCĒ&¼ŠÕ„C7v²a×Čaœcø®nOÜxæSšf™Øų‡Äwźį²Mā?ö™ŗ(؆¦ÜĒéWģń’āšÅįѼ_ūFx‘5¹¾I­4;)ČH9ÄĄu$އśWźƒ¢ŁųGN“ĆŚ=¦į…“tń(@qė]&ne=sā&«”Kk¦ų7IÕuVpcWsŸöŪ Żį–©¬iś†³ń&ś?ĶpĮĶ“&#‡Ć“ē?SLƒÖt« {k xģs§YĘ y$`(śSīuōIgbÉpĆåĻ”¢Ę2g×2[\É$÷HógsČöÅsz½ŽæwØCĄ–Ś;)(l1$ń§‰5}vśāPå%˜ģ@ (žÖ^#·ųcą÷ 8Š-ŽŁŽ>»&vądväūWōšką÷ĄßŁgĆž żžüįżĘņĶ÷“™¤nķ’2N{œży•źÜō©ĄÜ¾ńDÆ©\®”w&©«LŪ‚“ŸĄć·ČźŗN©āźwW^h厩¼L ń“އҹ Ž¢ūÄ7gĆd† ¶Ą/šŖČĆŻ‡&¼"źśf½iÅ̳\g8ŻÓžā2būSŠńui$‚uɏļ’…pŚ;²ŻĶ ˜ä›w8>ŌŪS¦¾]I®dø•ļĮĒ–ætרxŽi¬ęieū,²œ }(±”ę·7§P`Ó<Łą±Ęć\>½ćķ;įdļ©ųžm?U™+h²†e=”ŸŹ¶ŒlƟ?jųźź’Iš½¼š¼ŖT¬\MžütüėĄ4ĖGY¾G ×.Į|Ł›÷,}j›±2•Ž»Mųu6¹®-ž„¦ĢƆ8L¬œō¾żųGš£Lše…“š6žĄ†+ķ#=xŒ¦fäĻ¢m“u`Bzć [RŪiv67s5Ģ6·…£ßѱڜƒ“>FńĘ·Ær/­­ę·#o?*ó‹=U£¾Ū§¶$¬:sŠŌQ‘õ®®­"‡ģöQ:1ĻÉŲW¤ź•œŠ?™<–÷K–UØ/›CŹ|Eć7ø·kvŃȝTõśšķ|1oeƒ§kā ć7¶łyļM2™ˆnm!“YˆLČ tē÷śµõŹĒq Éø¶ ¤ēéCĖ]ė×@ażŪ…ŠÉńŚž«eŲŅ?r3øćō„b’2¼7 г¶:¤ mØ"ņPžæįK~‘Kz&…źŒdžÕƒ]ĪŌ¢{ės¾ø²¼O œŠ­quuØĮŚ'yī#~cž” - ]Ī(ŃdŖ’pqŚ·%ņ✘ˆ${u­ Čew»ŠYrT&Ž:UČ»[!čG«3œŗ=«léöHēcŒ0źak ©`ȹŠĘOS2 «³Ä…¢ @®;Q2^²¤n²Ø8 uؓ±QĢĶ6Āy<Č“ŒHćŠÖņé°@Ø7˜§„5-Ååķh¤DŪ×-Ę*Xu(“Ō“±ߜS w©A-œ7””:żk2ŽŽ{©–ź3Œaˆ>ŌžśH'’\?œ $ā5Õ^x”5 :Ź1§$L‰µ÷ŒļWÜežĻp$·caĮ*0°²¢2Ä:ąÓ” ŠfE;@]„’§…/õéY“ǐÉō݈:2ŒäqÖ±n.ŻīE¬ ½×ļ/ ¬e ™ŹńFF„s“ĄČ4ŻbāćÄV–śi’$Tį<øŌūąsųÕĮ\‡įʱ§¤SŻ\[=«(Ū~aõ®CÄFM)Ł“ū™f4$}sZŲhĀN¶×-fƒV»H%#(¤IōČļZŽŠ”ŅÄv–ņŻ\†ļ‹nĻÖ¦Ćr:Øui ĖĀ"hŁO~8«ÓJÓe¦2`ōź)\ʔǒißmx£;Üd®žõč–rEw£Ę#µe½ óääfØČȎŚyUŪĪ+ ƒO¹‚žX#šøäŅœf¶Š%0Ć=1]߃lle]÷ˆ\Ÿ½Ž*‹ē‚ĪO"Ér§ƒ\—Mš'in|·(ģ~¦­DŽR{ Ē,ė-›I( œĄ­· 2L|§÷v #ēNŪ9b‹ŽæJ” źŚÜs/„|§K“5Whīzœ}ć\§‰ō„¶™µĖ…ąS*ĒkØ,³É£tĒpG­lź²ŚŻi©o5“,Cnó1óoĀ‘¢g¾&æŅ † —ņ•ec÷…iZ_YÜø•d`Kz@Ī—M†ÖŅU¹I£ OɓҺdÕ&(ļ8†ś3‘“ŽŲÅe=Ąā,•ģē"ÖÜĀ­1“jÆSšõ?V±Š5:œO?xs’*R›Õu˜Zuūó՝rĻ>^KfuĘHĒ&¶Š²°ö8ĖĻ č> ‚U»6šÅ÷ŠMĘqŪė\v„i§i7śT#'fä*7^ÅZhm½±…‘%k›Ø&_˜\īöŖvwŁ"ļ0x9äzŹo ’;(5±…¾Żk+±\Ępi"×lŌŹ-Ś'䏓YEŽž×W×ņF£ęČl ŽŌōBĻŗi#’/™vśÖ°]F2ŚŚŚędāP |Ē×ėZ—ŚZ b#“̇¾Ż¬]ŠŒn~x/ǾžŲ¹ÓÆl^-o?¼†a±²=kŠńüŗīÆć5ÖĮS£¶ŲVžRFq“Žҽke‘õ?€;QŌīm‰h”óKqõėŠź¼Eū<ųnĻÄŗ“²ÜĮ¤ĢT³<¶ć<tÅg)“Tt>qńĆŅ/å]"e¹µµb£Č\¬ƒņ®cÄQ'‚/“]vĘūTeš)0w{ū•Q‘æ1ö’ĀŸŚƒĀŽ5šFÆąOL°ƒVŠGŚÅŹīēLń_?xēÄWž¼°:V•#YM9ˆĮ9Č­"Æ”„äĻ@šOÄYÆLöŗ…±žCO›ŖÄĆė½¹¾½uŅŪ 'āqɽŽ?ā7ʛļ‡VóŁÉ'˜^č&ŲNąfüÆDųCūQĮ%Œ_ŪāŽśŅMŠ•HĮi²1Œ·?…rņčLb|Kń«Åšńń,ŗQŅfµ·g“ÉŪT’@'†¼gĆ~Ö¼Ko«Eej.Ł ’EɌtĮ®—ĀuÓ¦zv‡š–[Kæ ż¢IÓP2,Ā,ą±<`ęæB~ė¾ št–Zvīž!Œ3u€ńæ‘ę“:lŒļŚ’÷ÅŗēÄÆ‡öńźZ­„ʐ«FĶUw=³Ķ}Æū,cź? #xbŽY#dł’ć¶zZł+MŌ`·W–Ą,Q/Ó’ėŃämö9ųļUM6öž{yÖ «ĘßSŸĪø†V2ė¾$ŗ†id‚ŚńŁ·JIŒńsüé Ąū'Mšē…µŻ6ćĀ~#Ó¼Ėræ#“†M Ŗ{d×ĶŗĢ ńõ§‡š{}1ŁaXY¹ō`}F1M3K”ķ Ėü8ń^5³{ˆ!øR’(dĆæóŖwž:PńG‰ģ.|7 öäy‘\ŖaFīqŸ^M]NnĆÅV~zvÉ_q“Ės¼ś­\ų‹ńe|}'‡|Qq¢¦“­Y®E\8ćұq‰™ę‰ā„æŌVŽßX‰U‚c™Œn¹­=^Uš…ī‹ėg—“±Ģœ’Jv5ņ)| ń'Ćż+ĘzOĆo^¶‘„^9@ņ`‚yć'§ZśæćŸĄ+FŠ$Õ¾ߣųĮ¼¢šĆ˜žŲ=*&žęsGäW‹¼g óųkÄZ<ś·®“A0łķž}ėĖē¹–Ų‰V"įŪųO }jā…ÉŽ6•Zļs>xõÅz‡Ā7‚|YnŗŻi“ØŽLœŲ“Ļ暼‚?SōVŚžĀŅźĪķ.RT ­¾ĒÜWIßqäĮävjĪq埼Œüz4ńo=ż¬^t"TQ»ķē­~oIrń@bó2Č|·ća×>õ…ŗŸBŽ…āMSĆ×ÖŚ¾™"-Ä$ĖŁœb¾ņń暿¾ h’<;§Ś®§l²GŖ£ÜűÓüōؔNŲ®§ź'üWöжų?ńv’öQńåģ«šß؟Hk—ł`Ō É<(l /÷€÷Æė#ĚeĘ‰ØŻÄč7”Ź0čŹy}Ań©·5höƂ¾#·’Ņ}2f\;ī@NGҽ³VøžÖ٧·Ąu9äVљĻcų풃…?d(ü-ćO~ךōrxĘ ‹āš€ģ±Ō—åŠéĒmŹ6“ĀåI<°Ļņ¬č2隔öBRƬl:1ĻQķYįmąģ’=RłņZ“ĄÉ)É8RA"¤BY‚”ąõčĪ*Ȭ6‚¼õ#­Sggv‹Ģ;ŗąw #aYd‘£HXįIĪ:TQBŹŪ•Į\ćw „R-ģŒ07uŠ›|ŒĮT.Įķ@Ėö¬äĀYb‘[?)ś’’Jżø-?cŪ<%āūõ“ų3ń£ŅuD/µ-ÆXķ†b2%™Xö OjvčĪ”ō ‘m›H˜[Ī·Ę5Y`‘OśŲ›Oä<×­X„Ķŗ]Cŗ7<8ö® ±6‰ņļĘ[ė¾Õō}hĻi*fēK¾‹“«Ļ§|ż½Ķ~wÜźR_źŚÖ®°jŗcĘlutĄa2cnćźF3Ķs'b¹n:æšS?Ła>ė÷ž0ѬŁķ£”]$ń ­Ķ³œī÷āægłŽ9a]š°É'µuRĢźR(Ļ&JŒ*"õŖ²ĄÜJķG£ÜT LŻ~µ÷ƒqqļķ@åTyِ céQØÜĖó…ĒoZ“²łFEĒόtĪ(zĘHŸÆÖƒXK”j7ņH‡ĪsŠ­6ņŁuK3nŅŻ›"EūÉī=č:©Čžøąæ¶ķÄßx—öBų£ā؟X¶ŒCbó²Å"å21źp£ńļ_Õ§ĆMrm_M0ݲG®ér;Sˆć9^ˆō#†+)£¤ō¤g±¾x‚i71‘ŃZ—ĶžQā9G‰¶Ė>ś÷®«P?‰ų.ēģM¬|,ų³ń3Įz=×ƒ¼G4šŽ’E‡‚@»¶ąc˜ sµ½«š‹ĮŚõµõ”RÅq€Ū•pA=2Oq^}e£čĻ ų FŃŁj¶±^Eެv–ķŌWĻßtÕµÖåŌ-āłcv2Töż+ĖØ»EX<«Å§ß[źšÅ"`†YŽžµ÷g‡ž"xKĀ:w†ę2kØL°J«ĘĘ'ŸOzĪiŽēQõŻ–Æaįż{Oķmu eÜAM®¼6zærž)Ńå±ŌÆ ktµRېöu=®ģ š•™ĖV:5Ž•ę^`ēóķ[Z½«YN#PFĀŻ×„{ō™ęŌZ˜w—ÄLq“§8ć±Ŗńiw/i.¬æu0 1Įü»ÖĘaiŖßZŗ‹yšĘ;ŠÜŗ…Æ¢WySŒgŽśjĒN-†.AžīSPjMė-ž W5¶7ŽÅķ7K–t˜ł’œ ‘Ō{×y”K6“$0‰Ż‘RŲĢoÉp÷Fꎌ"Ó?˜ģø~‚¹[øVķmī•”žA"7w“$ņŽœt«ŗ;Į$ŠŃIņw>“ Ī«D×#ŃõT¹Ś·H*­Óń®’ūĒZ}µüš„Ö6ł™ĢQŒ)ü+HÄéŒLWÅŚ'‰-gH4ųģB®Xž}«ĖȊ)ÄŖFąs:PįŲ|†Œ—É R’|ąõÅg]™ä Ą˜ņ>lžµ“Z¬šĀŅylЧŽ™Ŗö×~d°„eFĻĶžćҲåsģ—Jķ#FƂF}}+CD±ŠŁįšUP·#GÆ’oF¶‚UY@e?…qsź–šŖĪ%%RGūŽō£?KŠ­/.Ķč·`1āŗxwģɤĆ4Š g­W7CX“x¼zn·+Ģ.Gńø g\hņĖ1†":õcœz—.ęŖ:ŲŚšÕ“GÄ:v™ŖÜæŲ¤q„‘žćš½O[šķ…“·6Ķö‹`ÄFĢ:­3HĘĘ5ÆĀq©ŚČb{{'ūåäĄU¦¼š=>k=NK“"9LÆÓv(õŻĄ,ѕī£9<µrß¼E>…”\Ļun–ń…8|}ęķXN'M5sņOÅœž-ńÅłk+Ļķ’čŖfRA\õ鎾ŁųućiõIš'¬ķµ(¬gVµ•‰,‘į`}’Ļ5ó™Ķ(¦ŗ”šķ~YXż5Ö¼šæÄžš^„ą¤>ń&Õ{‹˜XØČćkŽćŠü­ż„tXüJ“¼ń5äl–w‰kƅ|·ß ļ_b)3õlÆō«įž“āOųMńņ·¦Ż„ōAM“‘ēF:nPk‡ńOˆÓXÖē]»žxnbņј’bo_zóå#ŗ1čŽO āÖMvśŪķvöĶ“JGŻÆ?Õ“;›MwJń„…Ģߣ„ĪC>W }Ņ;v5…HŻt“9ˆéמīœ-§øŽģ„H›-÷öćQü=ų‡c“Ÿ,ōæĒ­ź¾¼Œæfŗ@HŚGf”ƶZG„IŸBŪ$š.Ž égŌ^BØ«ŠŅ ÓļWM¼MSi:‚°e|œŠńœlĪ•Mlzī‰ńwVøøPšBļ“ąūā»->ĀėʓŽė^(ø[o YF&`OśĀŻߦ+érŗw±ÕN‡S忉’ģ5=RėGŠōøģ,#%ĪFL§ŠņÆ ųvź’[M"%“CĢ|’ōÆÓš9!Sķņ\#„yŁō„¶zo†4“0Ū[ę(;_zł;Ä×īŗµõū\3ĢģBķc€¾˜ÆnĒŻepŌņéb“WŌ3$†EŻĪyÆCŅtH­”ł‘ØĄ¬å.‡éł^kĶ†‡„_Ś]‰åX®üƒ5pŗ§…L*ZŹwƒĖĻīÓåšØWŁm†£ާą÷ĀߊŸž%xwįŸ€4ż}KRyØÜ˜ąµUå‹óĀ¾Åż£?ąŸ?“'ģõ¤¦«ā½OĄZżĄĢgN‘ÓŹ§'ÉÅkM¦Ļ4ćœC.¬ß“­~]4Ó»óé¾Īö?=üeįßŠß  ‡^ńG„ļ…$e#T“V’ 2 8÷«ÄkM^įf†źü`€k&¬}… ʜ¶=Ź'ŗ€InžjūvŖĒPOŗ{gœE2 ²ē 5„™čF¢{Ē}Ģ“oue ŽN+Īļ¬uæ^iśę޲ŁĖĄ¹“¼G8ŠMĄą‘ė“YĒ]ĪZÓ±ön‘ńŸĄ’“ć­8i_"„ž8v Ąć;ūŸóÅ`ųŪąŸˆ|7¤7ˆ“+–Ōō#„ˬ‰½ĘOōÜLhc%Źö>T‹Ā)j'k€ęģČŅn'Ōō­’ i:Ę„Ŗ¦“¤$MrĒ€¦PģzÅ©htŽ7š‹ō8m¦»“Éżäg+^ ®źmgp-‹•į·tü+"ć$ĪēĀRCqK—ł6–\uĶtóĒ`Ø꣸TZhyÄm?[ŸG{0GēŚ‘"ķo\zū›ö>ųó¢jÓxDڽ¶—­ū« ĒĖPŻ€ŸĄćŪšÆBĖęNZŲįæą«0x?PńĆßų[R€źŹÉ®Ń `ńŽ‹IÉ"¾xż‡ž4iŽń’ˆžxŸV‡LŃ5fY¬'—4”ö·qŠźŠW±šŲ©I=OŲvŅb:H沓˜§ˆåd Š÷_‡i]Zém­Ż…ĄhnČdˆ©Ü§> SÆ”åĪ»¾§ą÷‚uĻX’ĮEŪų’ū1k:Ēm~2x6;?xžåÄÓĻgpby‰ā*rqĶK­’ĮFą”ß“+ xŗÖŽæ<æ!®.¬ šˆ@>ćŗXą}ꯞõu*Éj|ųi—q41‘Ö –Ą}Wź~sk_“Ąßų³ĘZž—į+Ÿ¶§Ė&“<?³ļ’‰€ĄŪ–ź×iā oXĘl'¤Fd1œ\׍ˆ©{“~ŃĀ8:Ųl,0õeĶŹ’OÉh‹šf––ęKø‚sׄT»½C˜b›d£€3ڹ#+ī~ƒBnĒS x‡\š½ÖŸ®ZÜ}–hŽUūĆҳ¼}āoųLnę¹)<ø/ąߊӛKŌås;Md¶DŹT°DaĮ侕”Ś:©³NÜT£µ…ā7h­Wr®żłõ™Õ ż%a6Ż2 tƒdpķå=č°å+ ©Ēu¢Oeo«[ÜY5Ō^u¹‘Y“ÕOCQʰ“?(äShęØĻ?ń ŖŚĒ’$™T0ĮĮ­xŽŚhÓĖ$6~“Žyl_³V ø]Ų5·‚+øäš?6<ĖœdzV”Ļ;Ÿ%üJŠM#YŌōk½6[}:ö'’)ämŖGN­}1ū:|GÖļ<mšĻĖ:ާa°½Š2ź äcŽžµźPLüū9§ļYŸ±ß±æĀ‰>=ńUŽ…i¤Ū¾“«Iq$»Ucø=;~µ£’ŁįŽ§įæ“m: _iZ¬\}œįÕP†F#®NÜz~5ķB”U J{»[õ?*Ģ3:“ϰø<<“\ҟ£V_ÆŽĀM+Hū,ĘHVDĻbkŃōõ’HHĻæzń&ģ~ŻF "÷~8ų”lõ Ė{£żŖ&[˜W/ Ļ$ūWuūKjŚ'Äč¾2šņĀoaƒlŒ2' ÷Ę)s£ŗ<ǚhzƒ*C¹‰?Ö»EæyŲ,‹µ:Œ•‘¬Sźs…¬nīŌ°JIŽW£R=kΚIa½øµøCæ™å'…'”©9ź›ēé:ŒšeóŪČūw#£†;QĪŗūI 2¶UCIK”°Ä@?v:Ö<óī™v(Ś>õ¤c»£±Ńļæ³ī,Æ£‰ ‘ør§£ŲC_0üšŸcā–ų‡š’@žĖĆ×±“©ŁBr–Óē™vÆć[AŸ5˜ŠŗlńŻ5-o|±uµ­_qž­} šæÄZ·Ā­zßRŃ5yžĆĶŽÆa>„ķ§RĒĮf{;Ÿ³¾?éæm£“ńĢŚb0Ų…Éč{×ŃpiOy#¬H¬Œzē Wlfš.ŅmõKm¦]Bß' IūĆŽ¢„ެ6)£źŽ_õ-&ń7ĆĶkŸ €n 41Žøś`ׁų~ž=_O‚čne>£q\3‰õXUā™Õȱ•†Ó'§š'ķ9ā½;Ræ:>‡ČŃGVmę&?‡JŪ O‹ń>X.ÅNźó"óē÷]¼Ō[+Ÿ>x:žā÷TK}JkX‚2{śėõ—ąlŗ­Ļ„ķt­fcta$Į3u({łWŃaՏņ÷Ļ¢ōyą¶ŹyĮ_ū¾“ķkSKxĤ;z]ŃZž<ŻŁAüć=«¼Ó<öūčłŗć„g9ظùÖYųFŚGU™BĆęĶzTĆį}8Ĉ$·$ļšąŖīh‘ Ž«jKy«žąg„sŽ ų…ż“ØéÖe“—×RHC —‘‰čŽk‘ÓlŅūÓą‡ģ…ń'ćXÓüCń,ß|0ų|ć H¤]ß/p«ü"æ_ž|/ųošoKBų]ąĶ/F>_–÷³F$¹œåB{ŠŅ1±2ņ:ų»Įž°¼f°Õ¼g/”c÷Æōß»× ųkĒæ•®µxŪõi†ĀŁ<Šb¬ų›\Ņō*ģx™šĖO…w$Š Ÿ\‘šJ77ŽĒÅž:ų£«ŽŁĪ¾ŌMŃžb÷÷#cmĘHĒn?~~ŃšSß üńF±¦ų_LŃ~ x„ĘŃ5Ʊd‚aĄŗEvR„s£”ž}¾=~ŌhmWQŌüaā+›+9&!--Ė$hŸŻ+œ­|Ł9‚}‚E·€OZõapםв2mUSµF@÷Ø÷l¤×5¢<ŗ’-€%ĮNyā§–ÜŽ ĒQLČ®ū$tšQŚÆÉc¾_–Ģ1Ąō4~ŽĒvŌ ŽŻ+”:m®™Żź$mrB|Ģäōz×<„ŌҚ>łżšąœ’’hM_ĆśÖ³¤ė’¾Ī®·”–¬I#Ž2:Wõ[ū$~Įß³Gģ…§čzæ‚4~7qė^owŖG’CČąņÄb‚S±ēš§ŠŒ&LH.¤ąœ^W¬xĻK.n¼CÆ%ˆ˜įPI#•¼Q²>Ių…ūLÜ[E=—ƒ™, $ĘóH»¤uĝĘĪkäÆų’V՞]FKĆu łŒ³‚p{oĀ« ģjųBąųPŽĶDŃŹĖŽY{ņ+ķ |&µæÓ@yf;ÓHN œuĶaRbqč}Aąo†¶ŗF•iÓĖu< ņøżM{-­Ī—bŠŒQ[…ĘrMfÕ̜NQń–ækā/°Ūč­q¦˜‹ Ąćv~éŠ[E}āHe[›&Ć)µic.Dxēˆ~ėŚ½āÆ‡õ«khZSęGw€O”’ė×āO…rü>Ō-’“gŽyĀ< ½>ćčkdƕ¶›­G„Ū[ɧ“pJŌśV–«żØńĪҘe'$Ž0h(ŻKĀąŪŚ_-åµŅʤ²™å#±éž Õ4Ÿh·:v§¦ļ¶–=2½~” ٣̸悹F¶¹„ųŠü ā=ŃYQĘÖ_ØķTžOķ Óhä#“åŚ乊R‰īæ [J×a³ø‡Sµ¹±•L‘¼n1ė]W‹<>÷Ј¬īć{` `N9ØmÜN'ŽÅX^42Bw+mvĒQWõ!Ž1ʒ Õ"R±ā¾ K¶Šā¬öAB8§ü;Šn`ŽöK½Jw)uŽVā?aķIK”Wčz\PˆĒ’ä䯫OO¶ŗ³ø —‚xēn>ąōĶD˜ŽžÓI2!T*šT\—_T–$Ž!n!~šNō¢?#˜‚Ż­TJĘT›±ž¢­ĆāŽ5øøy%,µj}ŹQ¹‡Æ^A,OŗŒ`qŠą ø¶ 9Ś”{Aū>†öµŖĒl…PA; *3ņÕO źėĆ5ÄØ"lØ'ŒjĶ»‹•£WW× Ų„»““Ö’Rµ†[xXFĖĘŽ÷¤%&ié:h¶/zŹāaņ„Au«ā÷ģóHØļĀäÖŃZĪ<±øĮĀ0ĪG­VÕµu¶€˜„g©P:‘Tm Ÿ•>$ų~uÕt-SHŌn ÓuYmöČü>½øé\å׌¼EØjkBצ!‡)ƒ—±š|åĀ Žē—k–~$¶ńcj:„“ØlļUī>¦·/ēÖ§Ó”ŽāõźņæĆZ#hĀۘ¶Zvœ`7h†IŪ+"œ|£ü棋⼾ø¹šŠ…×NŗT‰łįyą„_”Š[x~ā]UŽćT¶IVQ"¾ ƒ‘ķ_E|tń¾æąo Kį¹]F8£7XJWh=Ļz™ Lóx«Iš¶Œ÷·—ń)_Ż:2nĀć?{o‹¾x+ć_Ć#ÄZ6”mi­ŹĪ,ēēĒn•Ž»•tš öwŌ~Ė{ucu¦ėۈ‘¾Éjēå'×ėXڒІŖź×6ņŚŚ!*<Į€§=«¦,‰Č©įÆ>oŁéŚm³^O,m%ŗr¢bæĆŸĘ»āŽ·¤j ݚiz”l"<öē½S‘š…ŁÉüUš¼>0ӣׄ3£E)w”7ČO^Z“ą…¼-« oI½ŌÖęåA»Œ³d«ŽˆŸ€¬møćNĒµÅšĪ/xš+Xµ»6Ч›ų;qČĘģc>ŽõÖxCįNū>xŸÄ2VøŌü-x¤ÜŖ€\)#¾9žT(Ł­ó’Ä C^ń7‰ōŻcįü §Äāyq+ž1Yæ <5ńĘō)®,.ō֎u’åŽ#"]F?‡<Œäę®(q©ÜżQńʝb÷Lš½­¶£Ø[1d,˜hĻ9üėąŸĒχ¾ ń/‰tĖ āĘ7Œ¼š¬cHƀŽā§Č/sĖjæxā.…§ź^Õį¹¾9+øe£pˆ~8Å|Uįź y%ĄŌ- »8ß_LJˆAõ2pŠč¼Uż©„¶`!ŽźŹI61-,uŻĆõ«:Ņķ¼Aą»m6°ur ėӟĄŠz¤LccÄüeįßYév“čŪnL‰̤*ēųÉœu­ĶOĄz–§įkQÕ ³ń¤м«č=³B™¢‘Źi°&T¾ūTw0DœqĪJśĒąķEį+HäŅZöĪÖåk‹˜‚°ē.īŽõmt+V~€x~é'ųuą ¼msā;=rź[KŻŽVဂĄžµąśėŪĒćĶ7JøždÓ[|dF\ö'ŲS-lW9©ā= ĀöIvڱµŗæµdƒų‡\óĒä-iž&š‹Mo{¦Lšž—q 3£‡ĮǾ+ū˜ż‰k’ žŪ³ƒ>)ZĖ>+²‰t½rŻ[˜.c°aŌrr3Ł…'¬li{ŸZč:“éWP›YLr+d0⾬ŠōBł¤ÓŅ„ŠW ą¶;Š"uBü3 °±bč’/@z į#מünńģļńŸĮ?<.–ę[ Øæ“crUeƒp›Żėš’G_Ł·ćž‡ńoĮż„¼5%­ä:­…¾™āx¬ī|Č@ywé2q€WÆxžĒl÷5ŽæŗÜžœŸ·Eݜ„|·źzÜvČ®Č$±²ĢĄy‹ļ\u‘”ņķ­ū4ŚžÓ_³’мi —ü&6”µ/Ļ:!¼E8LöY¼gٽ«üäž1ü%æų9ńŖēĆŗ¦§§Ś\Ķ9ƒĻ9̉”b8ʰ#Jó+ī3Ō4’ ŻI§E{Os EæĶŒd(IÆńĖŽ‡–ļĢ’ö՛ ųąóÆ­™¬@¹FÄĀäķÆdŠī!ń=Æö]Ŗl`«–ĘÖ<זēTsŚõæü`м9˜¶-¬ip"ł3²ąĮīOzśoį÷ĘKŸŠŸtGŌ,×^Ó­nœ4‹Ę śżEoF éŠv±ŌCxęV®Ćü«/Xæ¹2ƒ;6Xćuzō™åUEŪ nMćéR<Ņ*“*>SŲv®ƒ™£&{:żĪō¶°Koø )9äŠ5~;‰£„2ī†õ<óLČ‘•Ś?#A²:o˱—AqœœSüO~¶ń¬Ÿ{ŲfœęŸØjי&Ü“gžÕfžÖ5Ģ”“rƒ?©J؃źs[z‘-“’H’‡…‰ć=3ApFĢ>óī$•nš4vŪ‚p޹mOIÖ-^ā×R‹īŸ‘אĖ؊Ö2:`śtØī,ī(ąį±ČØŻķ‰PĘEńD„”gA£iæi·óĄ Ž”¾ZHŃŖ¶TsYʂź[3*)1ž žõö›}Ļ*ĪsÅfŠw™y"ǵóĄÆL°Ó§³±1ź(xår1ÅEŠŠŌēļāū|āXexŗ_jĻ[imīÄhŅ)'ęć„#cŪ<5 ¢@ŽŪrr:é§Ó¦¼BŁ’GcxĪ[hĻē\@»³m5ŻUR ćżk3¢,ƒDš¼ņOotŃČegޤöśWeāū ķ{‹ØęŲčm’¾Ō™ƒÄ‘&Žš=ÄūŹq^IēZß\O'˜étÜÆO½iÜaų]£č‘ź‰u­NŃ;²Ż»:ē¾6Üi~'±Ō<"t¦¶Ņ‘žŅŖIgĄõō©™×NGädڼś/oobß@ŪWĶ^‚~l×G¦x«X›ÄkQÜ"‡åTą7Æ’Z¼|j\­3ģ²yZIŸ­æ²ļā/‚­c¾{Xõ(F2ƒh`žuó÷ķĻwiØxŒ[Y“ ©*ŪÜÕ°K(eÆĻńt½ę~æ–;Åćū8kŗˆü¦/‹uK“šŽßlE‰ Ģ?„śsšńO‰ž!¼¶ńŲm„Ž[@Ū£xœ60zW(ģi÷>5Ō­t…·’s%”ģŖŃć=9\“Ą^%ń—€¼X4 VßE×, ūe¼r)+(AōČļļYJ*ʑG†ŚéWś.ƒn¾)ÓĪØL¦V rĻ$zō¦ųN+muµ+}>X¾ŅĮĄÉėƒ\5`wRØtś7‡uA5Æ Fæj¹šŻ…›ĖĮ‘’¹ŸĆõ«’±„¾š~™ńgĀןŗwŒŽB“Ū·ßR?‡’^¼jō^¶;éU>ÄoM¬i6š¼Ó‹d.I ®ĒŸĮFŻx›{¤Øw†ćüW‹ZĻ>”u N¢@äĒjŁČśü·f’G£.‹§Y³żŒE4ydüźäķuÉĻ9¬œĻŅ2ŹE°$Šf`~Bzg­\’ÖāD4,Ē'ēš)Čś;Y3 |^×t‹²š~¦ŚF·ʘg·¬¶Ī,¤øĻż¶µā/ų3MѾ(źś‡‹Ś{+%äĢ̪öxJī…ŽˆųŒē/£^¼*Ԋsƒ÷_UŽĒ€ųĆį§į’ Žižńsź>¹ą¹Óo¢$hĆ&sÓד_‡ß“'Ā~ĶŽ9³æŗ†9ü©Ö“Į»ŹĻ;O`i{ĒB¤ ī™ōģÓā?ų—Ē^Ó<_¢ž§ØĶ ܎å>f€;ē¾Ś¾'iZ”–i&ųĮbv«äm”I˜ŗ›`Ÿj>–ēFńf‡oā;ąČ¼²{Žųś~•óĒ?xGÄN£ā?H°\@ŖāÜ®sœķäē’ÆPѵ v<7@’ćL‚ Æ+DøõÆF]FÖKv™åĄr Å”scLŌ­®”da §Ū€r?ė<#ši|{¢xßU𮱇|S¤CöŲ—n>׎JœsŒqžyÅtĘnĒ‹¦„üo©\xŪN]V•å\)pߥGėĮƟ5?xĆŚŗŽÅįču[xĄ’…?+r1W÷>g—s“Ńś1š;ö‚ń^™ei¤k—ķ/‡Ūd†Ža“ 杧µ}cāļŚ7KÓtȁµQ•˜ĖІ±éĶkögu5ŗ&Rh„čöŚ€civØĄ÷ķ\ī„m.ā)džiJ”ėō.iZŌ2²G»8&™āƒ#ŽéiÉ-d·y ŪśÖ-:¦¶™m¹! »€½oźPG |ÄÉqV¤­cSØÖüy?Š< į_ėZu¬÷zS“×ń²‘Óü’Jä#,QSoµL™ēŚü’mKˆJ¶–śV¤E†Ū‘š“3¤µPBģØėZ‚Ō6%PKV“ĪJØČŗøÓ%¼‚ĻW±“Õ¬€(ŠĢ¹Ź‘ČØ­ĻŽéžXWĀÖe„£f8·nŚ3žMztf’±ņŁ–Yķev}šĒöīųąGŌtĻ ­¦ Ś:p£p •8į«ęŠŽ6ńÄ]{Qń‰u‹ŻoPžMĘK‰ =zW]LS”T^Čłģ ačbeŠŒ}÷„ü‚!` PjęÆvæŲ—©Œjh¹Ž2~żyózŸS vÜćōų¼ęIJ/™Ńøļ]\pJQįbDG Ø±Ŗ*X‡¶˜ĒÄjķ¢—÷*Ģy Ń­ ‹%FX2ä×ā6wĒ Äs® }ÓAĆYYŖé·¾’+ķX˜-†Gc€éĻå]¶=õžœśŻ½“ĻdŒäPJ”ķ“Ū„6yµ%®‡uo«$ÖDȱy`Č<“YQKø’ąšCj9愘q[“"ł‰=“w–Ģ„%†O»"‘ŠÕ©3›Bčł³Vųważ§s7‡­cµ¶–Gv„1ł}—5É]³ųsm­ü/bĒ'|g ĻÆJčƒ>C0Į^蜃Ąmā=CŠüg¢µ¶µį»§mße“3Z8 aĒl’ZżāżŽuļx»Ą%øń®Æke®ZAžŠ—2…„–öĄÕŻMŸŽ”(AŹ*ķŽ_’iM[Ē>4Ö<-k}4–—2þYYTćƒŅ¼Cąoü#įOŽ6w_5±šŻÕ«Į(””špG§QĶŖuQĖZjx³ö„ƒGø“G𕹾фl«)mĖ"ćŸé_ųrē{j<2ęI¶ę'ŠĮŌÖĒÓįržX£+āo‹ķü% Ü4j'¾’Ż2ų*=G?ZüåԚ}CUøÖµ²O.<Ѓ ō0‹KŸĢJ,ķSĆįņŲŁŻ¹¾źŽģ~ūĖī6ü)į;ÆźPi::^@UY”PryĒp1ų×ė'†|?/…tėM<†GU\©ėœW½B:Āų³øÓķ®uWPŃŗr:×^ž}BŁą—)é]p]O"rźpéQÜMbėŹ«ž×½oŚx.HdIēe<ō?Ź“9\mKOŠŃjBd åwłNčźK×µ‘z Ć4e[éX—÷Į²¬„NpxÅ Ž…‹`”*Ž¢šÖ²4”•‰ÆQĢꉦYįŪ…ĢxéŽ~µ„įĖė]bĪćX±}KMW̐†+¼zdtŖä2:?Ē£ŻŽĢt1=¶šNč㑲Ź= ŖŗihDj$b×½Ct_lœyŠØuŖŽ“¬#xĄŁŽ‘ŒˆśXą*ƒŲūV ƘģĻĖ{ŠI~ŅN}E:ņŃ.ķ °1@„±Ī,‘FZ70ćžõ(ٱ™[söµ“60(}›Ģ;&HéĘqT„RBĪdN܊ 4ķŚT@cĀÆ9­&Ÿŗ=ń»$ƒŒcļPJ7@QäU“5ĻO©El‹s¼u¬ēŲøźŹOę»4qąńĒ' ®×Ćž ¹ŠvyDž®+O”¼csØ:"YÜ£¤ ¹8,£ÆCÓōņ,&YdŒÄGN⹄PŃ@Ļ–Ö;;`cH¦z­pz޲źI¼¹Z‚XÖBpģ{§Įoكć§Ē+›õš&!š¤h$—[™ ¤*zģVūēÆOJż„żž?b„æōķ7_“Óķ|wń ūF§©Åælž±©ūøĪ)ŲĶłiß&‹c¦īńžÆii<@˜æx£ī€:WščŗŽ©āmRx4‹o”Dux_żhöց®“įˆl5[½bćLÓõ+‰a•×5Ö5tcˆ żŃŠP‘Œ™Ÿ¦ń{qŃ“rīąē†«w÷‘Ų䈌Iz`v«ŒU‰2¾Ó­M“NSģł%8ō5^O[Åjbˆ³ņ—#\ˆøĘēĪ’¾(h¾‚ņŅÖõ†“”aSß9ÆÉŚ»öėš×Į:ļRń/¢×5čöʖVŒ&F-ю ązŚ;›¤<_“æüoö‚ųńi}¢Śkƒį’„UüؗN%'ø¾ēĘ}+ó'Pæ“Ļ4†I'—I‹¼„wbzšōiĀȚ“±€fg±•ŽNzÓä±®=kO#Ģ«=Jėj²ʜ±ĶH`R…@Ē©­ŃÄŲAI½Ą«77Z¾ÓśPJl½e¦ 6©ąķŻ·½oŚi˜ $ސ[',ĻĄ³œŗB>–żœæeŒßµ/‰”š·ĀĻų€Ųł¢95¹ģœŁĆźKc÷ÆźŪöJ’‚1üż›ō‹ˆ_gƒć_ŒLQ‘i"«Į ŻK,|ŒqŒ‘ųW zßN‘św§Ų&–LÓaš—„Q1ŁFcڽøۊä#Ō]ā66šŁ’ r äJņź;‘…ˆc·Mćķ¦gŌ®›ęÉēoū?JÄæń%ę¤ņK3%¤ ’T £ŠĀ;–r÷’õk "H“ˆć–ŹWĆĄ÷šóIõMī,÷ Ś”|ˆĮ럭j”&Léć‚1YÖŽ%;LÖa<÷R‡#Ø4ģL¢rŚĻā‰d3Ī>яŗ§©Æ(ń?Šm¬,SUń£m¢iO–3»cZF |‹āÆŚ#OÓ¢žÓĆQA؉Ćķ¹˜dģWØĶ|w⯊Rܹ›R¾{ūĢP2}…YiƏŽ;ųŃØGØŚĮżƒh›¶›•ĆŹ¦xƵ¾žĖŚ“¶> †ęžī2|¶Ą9“Õ«=J”‘ōī™š+O…-#:]¤J„~ōF0ō8Æ]Ҽa¤[•HUNq…^ cŹĢœ‘jK+ØŠ×Ė'­Y“š–“Ķ0g»-»ÆJÖ1č'3zĒI³IJĻ @vb:TśįŅü9Yj\JćųA>•Ŗ…ŒīyµæŽ® ¼*ÖŠĢĢĒ׆Z~·ØZų ÜXC ‡‘ųUń»½ĖķBX±†ž• ŕŅ"ę0Ńēļ r³ ’ŅāHU’tÜd7+^ÆgÆi˦Zhś„ö揳GœūŠQČź’ ¼9yØÉāXuĖ«I¼¢<Ÿ31¹õŚ;ōÆ;¾Y-cp®QGʧց¶sŲė÷s8ņaū6x‘_$żEZ·šķĶ“ķöčŹõ­Üé_J“ˆ%Ā*Äq‚Ź0H÷¬&汊ŽęŽņ7ŗĄbIJœÖ2Üw1ć" ` '=1[76Ś·6Έ†H˜0 ēŸZę­ń=Ü—Ś ¼7É:|”_fxKư4‹·rĶ“…l|Ų  ²Ł%…ĆÜ Į¹N1ž¢¬=ń—ęY(ģ+p8mfē^ó#ŽĀ{Anī<ŅźKcŚ·“ė鬹F’a/ ƒÓÉÜõaźZ#jV—v·Ā 4E¾`=p{s^c«h7:¬ėtRXf'3ėŠhēeŠÆt™#ڦ_PA«fX¦‚yI·ƒ’ÜšjœlTBIļ¬,B“r‚YøĄ84čuŻFŽęXšŻ2Č `Š‚Ó9K•ŽišŻI3g+ĒAR-²Į…IQŗ’>é ŹH߂v“…²Qß 8«Ś ]]]æŚL l”V<Æøõė@‘čæjh‘`Wóa³Ņ–ņĻFšÕķ šfR #{ÕĘ=Q²K”ę÷z “o‚Ś|±÷rĄb°ā[»GXüß²H®Ļ~y- VźMć ^{]6/³YNO0“Œ*÷5ē±ŻÅxwŹ¢#½1ŠÉĄÄŲ‚ •hš|'O”šįu]>źßT“Łx³–Ļń§ŲŅ™Õ'–,sŪ‰†0Ć֛įĶ!ģµ ö:l.¬Ąŗćӊ³h«čnėz”/ž«L}6er3šGµxOž![čWH·OvŃČJŖ§;qėXUŽŗTo±ÕxwÄ×zĶØ i&QA ف­u½Õ/o£Š;hĮPCOO„eßc*°¶‡X’čö±+ź¦H®r«•ā­ź6&Ü1¢™W<ćæ Ū•ž|—atŁ­ī£ nƒĪ<x"ŗ8ķŻB£3«įģiņ٘O¦¼p%Źė×±ö®'[ÜÅå²(x’"µ…²=¤ #ųĮėĶqچ¶·w­ ©”ō=«ƒ±q;_}”:Gp r3Šæā±³.–ģŒœÆsZš–ßa–ݤ–ę(< ׬ü)³ų—s4·W’\Ä$ Vē‚zŽŻč:£‚šœ·’µÕÓ£(4ŐDŖæŻNsėšśZ Ø”}:8n¦Ž ¤ŒBćõ¬ÜIš¬±ŻÜ=ܑŖČNX Ąüs÷ŠFÄŗE#åØ9Nö šv\’8<ö¾•÷f•ą/ė^×m ū<ŚĻŲ–1——YGP?,ēŅ“‘pgågÅæ‚ž1š…ŌķeģP©2K ‚UƒóģE{‡ģĻ©jf€|<šėŚZ¼lļ”w MsicéųsSŽ[ū§¹¹¹°†;yT=HükÉ~5|ŠaÓ4’čŗ‹ y$‘g·xĮ,Ąg:óŅ“±”Łƒš›Ćś%ėéĖĆ©Zƒ$r8įŒzń]ŸÄ‡öŗ…¹Ō¬­`{į؁ó3ŽēėIŠ3īdé~7~½·Ō­m›NUó&ˆv}ė俇Z%¶“ńmŚŽĘō"\“#.V-¹ū“§Šż0ń‹“+?ģ'ŃāY"uā0Ų0ućß·ē\Å_¤¾Öm-L±äŖœäcæēA”µŌģ¾ų?Įž!żšÄ-wggā-.ęYdøw€āAĒŅ»ÆŁŸāO„5Ų|YāHę6“i-µą20ī;ć§ēU-ŲrźŁäž0ųĖ©x“ĒœQiźŚ|’·(ü)ÉČĒZó¹¾-x[ĀŽ5wP%üM˜ÄĘåĮź>* ²<+Xń•ž„ńKI­­,n>uŒ(Ė}ćļ^ß .mmx¶®³ŻńĢc*ųļšv&RŅĮ.nķļY_-cÉ`*?¼SRńkCā+³]2Śp†ōĻŽ”ǹ“}Æ|ā'WҤŠgø€ĪÄpȤ0õéž’Ī¹ų?Lńž—ā-> ¹tóåIĻā9Lž_­a(ŲqŒŗžąļ…Ś}Ģ:Ž…ā=Zā„3,€‚yćµ|Ÿā/€Ž'ƒRÓ`Óäŗū5Ōå#™œ‡Eą©ōéWji ĻŌ¾ń·Į+[5kZÕķbP³1}æ}%ńCāW‰tĖ}>×ZŠŅo‡×ƒ1łėóE'|1č’×ZJ×-“x÷Ž| įOxWMÕōMI“TLččß,nÜćÆƏ>!ܤ>K J^A“/Ė–Įź{Ō¾ĆåFo†Ä¾&Q+K+J yĖėZž9ų?æ‚gÕ“›Ų/5?{-»å\xUõ©€¤Sųž«ŪŁk—mÜȬSū®•÷Œ,/Ļ„õ}VŌĻŖ‹X¾bĄ/oéZEÆ[źÅÅÜfH5„••oÄW·µĖXčÖŗøW–łņsžrJŅOBāŁõgĆω–w ]1“x`Ör•SÓ õÆGų¹šJ/Œ³ž„ŖųRK8|ei2Ļn„Čiqóß„g/"¤Ļ’gŽPxVqį/G&āė’īÖG‹>QŽGz÷OüšÄėēń·„ŲĒ«r×ģWtŁōčhŹ[Ÿ||ų}¬2Ū^č׍m”ćp·8#žwĻL×)­ĆńQšdö׎čüņ‡…ģW9„ Ē‚Aͦ£?ö‹DøĖ,zĒ½u:/µ="źŚ ’ŚM&i#Æ ‡§>µŗŲ—%±ļŽ­`¶ń^ń2ca?3qĮĻ\WĪŽ=ÕµĖKė-s@ń Ō"’ŽFIöSł~µ2]JCnuĆāøVöżŽKąņ:ąu'×ŠŌŽÅī`‚x“x?+mŪR˜łnŠz‡¼MÆų•ü3§\ZīžOōY_‚1Ų×„éŸ üSą‰f‡Ęm1½7‰+€ˆzłŠ„aÅ#Õdų+į…žÓÄ0*źs+f7š7°čGLŌß¼i§iž;Ōü9ŖypN—\{˜œǵ'"’ī}£ā;O ųNž-WX±µšTżŹnćÜ×ä§ķKššk#Xšž„³įŪ¬ł-l¾pNš~™Øl«t>I[³l.»X¤ōō’iA(‘üĀGN¦µ¦%±Ü|*ńUׂ¼Wo©/™%“²*øiŒäŁōÅ~»i—V7Z}Õ›¢–58čr;V„7­ĶxwŒ!ČSó^{ńcĮqxóĀ·:\Ņ •“l•±œīx®i¤~\źö—V7÷QÜ[L²ŹJ»NAĘ@ō®·Ćšßƒć±ńTVRÜD—”G÷˜(ļėŌV,źŽ§čEż÷†¾6ü-²ńw‡-u5hY…Ü>v×ĘyÆ©æą‹?µżœ?jĮšKÄŅųmćŪϲMo/ݵ½Ūū§N>nT\zP`ŗŚ棍#S–I„°Œ4mŸ¼„eOäEußüDtĶLŚK3—³YIō,÷?Ū›Ė(ļ-‰[ˆ˜I/H9ČÆå7ž żŽŚÖēĆæ·_€ģoŽ…wZ'Žm­ķċnV+‡#‘Ī?ī÷np©>UĢś?ų&>)Ņ$Ņ®ēg†E·Č(Ąps\ĪönÖĻßMóB'óāß*¶N=j ą+H¬¤śŠŠēP±øPĶŽ}Ŗ“`ĢūXķP÷÷ I–wØŚ§ęaü^Õl&ķ®­°śśŠ2Ä/²uVfUnž• ]„äh]Üv Ö™÷wü7öŹŌæ`Śūį’Äčõ‹ė_…šķŚhž/²91IŒNPwBCgÆt$ō°Ń|GįßhöWzÜzMķ¤z†q Ņh]AXuGŠVuÕŽJņŽe¹I6clė^GńOįæ‡ÜØ©‹³™ųé,‚¤‰bR Ū»;XpAüsYĶĪŅ+•ńė^>Ē H‹<‘6Š«‘Œ=«:Iv,'CéZ™¢<ø# «vĻ„ ßf%›łP9 mˆŹ |Ż~µi!°#°'9b‚BŁYČbT÷'„Kē¦HÜM“öäĒs Ķ“B²¬Čc`Ēå ŒWō×’ö~×öŒµßŁ{ā=ģCAŌ ūž'øHqµ8śR’= hžĄ¤±¹¹].ŪK»gńw†'G–®­#©ä©RH'Žž•ī¶—Ķ3¤ā7KYGByFō5ÉQhYÆē*yœ Éµü“Įx’a[†Ō”ųķšęŚK}]ŗ’žXįOŻŚėI_Ģ–uRܵyõct?‚_5{kyšÖźĘDh.-fl+c!—=ˆę¹Ÿźz%®£®ézrĻ6™s)–ŲOĆ[ēUĮĒ\שjW3<§Pš™ŗŠnÆ4©GöŁó¶HŲūL]Ą÷k'D՚²\¤­7ၒ„ĀgŲoķ“č0x3SŅbŁ4&Ł®ÉĪįģ¹ą×Gš·Å2xVŸN†Y씹&\Ē»zśõż)ĒM‚LśLÕ`¾ø’āUµpJs‚kRīŅ;»9ƒzsé^•)iQˆ"ټč7µyŖIėĀźgķLē:K;V¾A9™``;HūßJ»{am1“ndėLŚ:/Y®=»#S“ū×I—倪=č(æ+Ģ&Fłv‚yü*ƒ:Źčņ§Ģ8lŽ“ŠR:Ś%“h‘T§^jµĄµ:t’I<^rg©µ]Sš“°’k¹7! AēŽ½“ÄśÅŽ”g $åN÷QĮ'ҳv<ŪN· ,ѳU9R{J醝ŅyėŽ£ę=É¢ĘŃw8Ż/ĒWŚOŒ‡ę· jĄłN_®•{žć gŽö Č|˜™HAŽAģjłŗåõKćiYFf]ųo„yĶ‚I"å8'Ó ®yG±£‰ź¾]M ·K‹Ļ“"1 ž03^©Æ=†¹„Į„ßĶŚ-ća<óŚ„& M wą}BŽ+‰ćņTdļé^c©ųržĪčM1\„ķõ­Š‹čuzŸ=ÕĶ›Źņ*«s†#óÆoÕōßXŪĒØČÖ©°‡˜sŪøØš;h3ń·öˆšö?…„œö7z\Ņ:īŒõĘH’Āø-Īk ²]n; Ōg„xųķ“>“_EcģĻŁÄś_ƒu?C©ĶeūLQƒĆätĒl*Öż¤u/ĘzņųŹ?²< µ_9 ¤Iü«äń{źGpf^±8xÖ v>¶ż›|%įx ēM–Źq$Ęįø‚]›Xēł×Ģ’“Ā~Ģ>,ų“FÖo|tÄŪźSI'#‰+Ę©…=ü^WČŻҼp¾:Ō.­5}"݈ŗ`ÉŠū£ą'Š<=įoƈŽć]†[#hŪ›Ź#¹ģ}ėĢ­FĒRŸüUgāmZ{-ĪļĆń¬†ÅŁžuˆ’B߯\óųÕ/éŸŲī#ŠŁmevņŹ(Ēzį”Iއ³ųūĀ^7šn“įŠ ¤[Cį§ņĶŒ£tR@钧?ZųćĆŗV·ąŸŒŚ÷Ä{-YcÓ®ä¼W+ŃH@`{ĻøŖÓ±čŅ‘ść’Žh–Š“Y†§kwåJAb†0Ė’WœUŻvŃō zöIu %‡t°¹ß·ÜW-:}o ³†Ö¼ImŖé,ś{‹[uŒ\škēǜÜ_³ĪÄńܱƱĖ)(«Ÿ ä­+¾‡Ų:„£Üų/OŅüE”ZøpŅm ąvł€Ļzų_āƒk’ ģZ3˜"ÜDc®kŻŽĒčys¾§ %¾)†žHÄĶĪzd×O¦Gl’'ćŲš*fĻŠ²Ź=N÷Ož)”séŒt®‚Ś(ĮłĖc§³>ėJŹĆ6]:’IĪGµm F¹µ¹OŽČłrŸéWŻ]i”łćo¬iz?ŠtŚ3°× ĪŲūÉę•lžæ£ųŻ5ÆxsÄŒš<‘ęŚčømŹ@;IĻcšõ0Ö??Ēb½ūv=rŽž×S±HäŁ"0#œŠņŸŸ³¶‘ńĒąŸ|?«E›]2ŚMZÖ_,‘Įs×čņFĒqZŸ…²Ē†/õˆŖi¬×¦Ī9¢€e£ żą;Ž+ō‡į_Ē kĆ>%—Āž,øxķŪ!•”ēaän=ˆ® =L=Nir£ōOžæ~ŠÕ¾ų’O±ń‡u[vŒAdl|¤7\’*žr£šÖ«šsāGŽž_».[3“Ń­õ•§gŸ.Fq^¹¢k“ińÜ5­åŅı”gBFąF0qۚ…&J1M(kš÷†õv0Ē žu“eU§cń†,ÆĶ¶­å¼!”‰Š¼5ē^3żžé8čs[×L–v/u1ĮčkaR'™E#j„“ü„w`{ ļ,m Ø©“HOOzģŒŽ9Få+ķ<Ų\”ņLŽŖGJ”$²>#Ć>O4ܞĒՇKF-‹/ŹĻ“œą-vŽ ų,¾1ųsØx×MŌ$ŅüQ¦¾ó|-Ģ\|¤zu5'$§©ćŗ N¾BĪ~2G ×t¶fY88ÉśP•Ł-šEuęŖ€;ć½t6¾SĒåŗ(SėB:%±<Ņ®Ÿ‘IŻža=Ģ’ČŽŹvē84usĒŗ<ž&𮩧©Y¤b®«ŽN=3ųW%įOź_\Ēl`¼ŠnWÉŌ,eĘŽzĆ4ϫԖĖZFĀ`Z¼™U<ć&½ŃVX•€ČZ r4Ņ(X€ļ=:ņśh&mŒ {śÖēNčೌF%VWbsœt­+ ųü«Ø œ“¹ĶT§•Ф™Ē^i—:-…ī›”Ž\čvŽKü&š>ąæ[§—C§LƒŒļU“Vę'k}*x§ø'l‘ä¹õęŌĪ¢Kū=‹’iŽŚūŒ@ąýr~¾ŃõĖ­CM†åt灶³² }ø®yö5ƒčd_źv¾Öʋc©C«]ɖTĪćļ×ėY^(Ó4ĖĶ2ā]KQ:MŹ0mbBLgĄŸ¾$ųæL†xcUDÓł2†ÉŠÆæā:|Ac5¼Śµō—7±gsć‡į]1‡p>”Ó|q'‰48µ;ĖČw Śź_ę 8Æ0ńO­c‘Œ[ą…ŒœŅÅ$xˆž2ųsHɰŗ“U¼%•ïȧÓ9ƈ¾'üdŗŌn%]Jkélß.Ü|ńēéŠĻ?Šlü_ń*īŪOŠt»»{fęY]1ötśwÆŗ¾žĒśF™oe«ėā<£$JwłmžļcQ9t"S±÷‡|§iv––VZl6°Ä8 2}kæ³Ń’0fŽ<<ńYJ”ŪéĖń§HeIf@~é8ö§čž%ÓuøÆ†ŸsĶå°>d@üĄõ¤ccEs2ųĖUŲ°Ćs–a‚ו©jWO·ˆ†.1“ē@Չ¬tū‹‹xnēD“vq*zo‹4˜“wŅųĻŽVCŪŽƒ9JĒŽ]_Ę%2ŚŻøŪ’OOLUŃ­Ļ Ę{‡WIŌe>„ö Ķ³9°ÖņMēl#ØĻjŹ’hc5ź™_€8 ®vvzm…ć4~c€ņ'¶|A¦i—Ś|ŪŪ-­ĀŒ3)ėõ ČĄŠć‹BŗŽ=HŖ/$2ksÅz–—«,?Ųģ³I° • Ļį@¬röpK96óØ·`§†q\Ōöp4ņG"Fõõ5”÷*7čG«é¶'NAk½öyććåž’„„kWŠėV3[Ē0]Ė€ėŸ—†+G±I>§¤ ·c1ķ1ÅYKĖĖIŹ«ü…±DamÅ$Ėv’ZŽÜˆ%@ žŠE½²łPĄąīP$ūÖÉw ņæZxoGŃ-¦ūt1ÜHxø<ל鵩MĀTrBqšŹŁ­l¶WבÜĻņé`Ö¤šM£_$–³HÖYĮI=»ÖN6]Ī£TÓ4[:­(nF2Fr eišsĘé˜ó0źW©«„z°tK˲ęĀ]³—óX׌Gˆ“wūVćĢ€ńœmŪõ«—s[Ū”™& {å³łW#s©C<²8?ŽķJ[e„üĢ$Y””ż+˜šŚŁZE+#•'€M`G£ivw6.ŠIźŖ­g&‘=¦ ¦āXc‹ +£ÜŠ8’k”¦čŚUčQƒųŠĻVm;cyóŒUɝó*Ü$—ždłicŽkœńƒtĶNÅĢÖ s7\Ļ•ĆWVwS‘“„K>’c·Ó£*į ǵt <ķ(–@-„ä’;ż*iĘĀŖÓ9żNļĶÕ®Ī/“Ęj–”š¤2£<ŅÉ9ĖžŸJķ8gĒ©é² Z?.…Ą$°<šéa”Ć1šiNĢ$ž”ņFuM]ZŪŦܫĪųĄźÆ4ÕEż­Ģ©w0H?Zv-Œ¤….­ēŸĪņ°1Ž„Ö>Ÿ„[ßßB“’æū½(čŃč֖WGŸ2<½OzĢ×­4ż2±tĮ7­TecHnylöQČG“&ÄĪqž? ‚ļOøˆ“°_Ij õ=h”®uAčAe`7,·«ē†8Żž•čBAjĆ,y泓3œ‹7É“O'Ž•J?2dDg2Ž£š"ō9H?³¼łf·ø·h€ž":ŒW4tK‹Käi#t¶UĄĆńW`;&]1 \£ņϽž4œ¬.ģŒxÉ«S@I·šKE ߎyĘkSķ7J†`É(ŌR›čċV·æ2-Ր„䃓œŽÕĪźy28‹÷VųČČļXJ=JŒ¬pšĢÆØ~é\ œžõąž'šŚ™¦¹‚ݬĆsć–©Œ¬uĮ™ö~Ō®ŠĪ±ŹĒŒæ#­z·„ģ„ŃLi²IQŽwc8£œ©DśkśŗZŚ g]L¶C•ąLżj­œqM4q4Ó@¬ŻźjāqĪ'¤Æ„ŅV ęr ć>õ‹Ŗéw–rG+Āź6†#ļWR ĮԚÖ;U2«y£žøÉ®ZŚSqtP³ˆ·éŅ‚9ęŗŅĒūU¹ŠĪHŻf£‘޽sšNJāń®„„][I„ĮnVā\ī‚ ćńÆf¤Æ«4p±ļ?¼ŖßųŪĚÕźAį{ø|äEb|·°Q`÷Æ7ńO‡ķ5én-„»Æw’ĘĄ2ąö¦Œ¦Ž?P²¶Š%²†čL÷ÅD~cÆĪ[Ó?…{oĆĻXC/™y,É |˃Ī=kNtdÕō6¼iā½ā=…žą;’.ģF#ŚA &s Æžķ“’ųH– .]IR‰ÄS)}§ ó–$cėQ'r¢“>‘ŠžÕ£čfķ•$淌ą#Ģ\~UŻųBź’Ęq {{ Nå –Lo gŸ~?J›µŌņ§Š¬RhēD‘$>[I’CgŸJ\“ńÕʕ£ĘZ{„·$ĀU8Éü *3t?ŠŸ|1ćķ|A%Ž·įd·Ü#óŽŲ=M}/ń[YńĒĒĆžšž…wwm: –%żŅ[“Ž~½?*™v/ٟYųköc×¾ü=оݧNšC(c$„·˜HĖkóWć&…a©üUŌ,ōØ&žÅ–5wŹ«īĘ*9½āOj¶šż§…~%õø±]bĖ患łWĪŗ†«ćKčdŌ.­ļ'øfżņĘwąząUDĶźqńųÖ?kŠĆ«[NŸuƒƒŒņ żŌż›’įń‡ƒ'{ķ4ĖįķRŠZ™˜ąaW9Ļ© V“¹ųĻń{Ho|iń…„½ó¾³oƒäĀŖgė]Ÿ†’šģ~³¶Õ§™ü°UZc’Ųžńõ®vÓJŅ®'ÖĢ7‘6'“0+ü?•W1Ń÷<2ööśĪ%XnĀHŖC„^’Jō’‡z½Õż±“ļ(qƒ†>Õ*%=~ŠōŲtk­;Åp-æö­¤ŹŃ‚Ųüż«é_6Ņ„W—|TųYį‹^ ń÷ĄßˆIØxÅVéÓ£Ė)H pŁĘ\…ō®jRNك?Ķ÷ö«ż›¼Mū2|mų½ū?x¹Ænõ’ ß³[LA `ē0HõB½ųČÆ†īįx]¼Ņ7ƒŲō®¬4ł’lē©2³:®wa—”ĒjbĖ»8]‰Ū=«¤ćžö*•‡ĢW<°<{ÕyšFČ_79 qA ®v+uÉ­ 䔌Łē4B]2n}¬žÕ “,[A9|tō Ś„Š„š’+øüÕøEŚ$ŽæQ_ŪOüÕūoź?~j³oÄ-j 扒BG£4’ķ¹Ōō’0™Œœ¶Ż”2=#U%”ÕLž‡īįynķ¾ļ²KĻұõ ķ‘ÜZJ[ 7GģÕĮV&ØųWö£šę“k§ųkāiĶ£o#izć¢`½¹’VļߑĻū'Öæ=<ąńƒ©ü3¹XÆoa¶k­ —‘u ¼\śÓ±śÖÜRgņMūV|'—ąļōsIū ²šĪ£#^X0RR"OĶn99Å|Ó¶Y²Fé]ō¦ŽjŒ”*FØZF;½+<©V/ŪŽŗr6rA~`qŸJcEr„_s$mŪ׎€VQ€A;ĒŽ“õp’}±Žēµ nåā-µ \ՖŠ#kČķļA“6/F…Čė]‚¼_Ŗü/ń÷ƒž)x_ĶžÜŃļ’ńXHW(ܼ{ ŲéūžŅ>ż¦~|0ż¢ō "¹ń ¤V:ļ–ą¼‘ –ē§‰äŽÕś_ę—wkl-ęEŠåw½XN= Hb’\9xŸd¾ė^QūDüšgķšÅ_|VR+}^ݾĆpĪń~h¦ŒöeaŸqøwÅyņ“ ēūV|ńģēńēÄF«§b3^M§_ŁķĒŁ5ŲīltŁ Շ6kē^A+Ś\̲!ēfĒÆ5Ć2¹MižĄ·šLˆJdlaœW™Ų4ķf.ŅnõĶMʊ³Ōīģü9}<«ŃøbC!éŸB+Ü|ā/xoƞ!šĪ£ijٓ̂w’X§ŠŠwŅŶz—Į/ßųŠŅļFŌf‰µK§]Č6‡SŠ~õw2(Ećæ½wÓg5D‡y8yTąqŠ­‘4—hœFɑ€G5Ū”Ē(ŲėÆ'† d‚&]Ć8ŪķR[s‘€ßT8ngß[Ē$°y!U³ó{փ[¼kĘR üŽō–¤ŽWM­»go„]ŃŲŁN” œ(ĪāÓĉ£\‡y"pxĆ7CXšÖ·e¬źW^LQĘUOZA,¶Öˆ.,ĘvŒœō®BćÄŻ#žåQšpʽč`÷!2‘ ź@źjhźĀ{{²ĢŖ¼īƒx³¼²ÕS\·0ÜHUĖc>µĻėž}3X‡l“į”TšiŒķ4ĖXŚŽ%øq*/~ā±5»5€5ĀČ|£Š’"£¹™§ŻĶrķełŅ60+kūXõįŌѕ¼¶§Ņƒc^ĻVµÓ]®‘<åc‘šėęń=…ݬŒˆžxb„ūŠ©¦RĪwDń=•“÷1jq:HĄ2¶>éōÆPÓõĶ6E‰­›,ąg¤iŲ«©ŪŲiģź]AĮ+\Ķ߉®nl–öŻP#üĄś ‰'ŌéŽĒ,ž+¾»Żg0Yan„ŒjiZH!v*wĮT›ĘDšö©m’cødb„AĒŻ5”ąŻJķµ‘&”zņćsJŁķŲv £čŻ~ćH›D†Ų\$s?̲+pćüę¼¹ōĻ$łrÜ>RÄRnĀhéō? :Śņ[éXīvB—žŸŅ¼×U†ļūBxßP˜Ų7 ‡¦=k)Ję“·> ż§|«=Ō6ŗTń‹‘"ÜnGÜ]}ˆÆŽõ=jźĪSc32\ +{W›^'³…Ø–‡ŗü¶³½ƒPńdwwlö9pŻ0 ž•÷f„ą;Yų®ų®é¤bÖFH±‚œ*ńźÓW±ż«į_‘Ęoy9?Ęß”į>ų’©|)šO„ķü-$©Ø„Ā“‘¼˜W1éĻē_Š?Įˆ>ż”ži^ų•„iŗ®“oö-FŽé¤Ė ä×Œž™ė^|©+ٟq›eŠJńZŸƒ?æf«Ł«öń‡Ā{©ī‚%ź~šF-‹G?źĆwŲNßĀæI?f†> ń—€¼Oį-JC}zS?hGŸzŒś`×Īć£Źģ~kĀr¶™ėæąž~ ³ų5wāļ…ž)’„—SÓ¢7ĪdFQĪŠŻæüŗš‹#ŗńeφiläv+ėšŌ9RCō< drßž(hz<GeŚ»Ł#·vÆ t½WX±ÖcŌLˆWĖxĮåA#œzń]ņ…»ŹØ=oāOĀk_\‡\šŸˆVx–5ŒĆp Żryśó\N™‰t®,õŲ£Įį£É Šēš?LĖihŽĻK×:«><•ėz%źÜ‚ą«œ €kK”ö˜Hćh–źPA.z{W[¦Ü‹‹yemøoŽ ž%<0ü‰«;*ùłėńƒĀƒįLj|Iav|’ j×R]X8\€É|׳~Īæµ‰>xv÷į猠ox:hŹYķbŲćƒų ī£RĒē–^ŌŪGėwĄÆˆ¶0ŃōČ4 ƒz ‘ä³ųó_LüLńÜæüāžĻ%ꫦK#> oR1Zō#ˆÓSĘxIsXž`<ń3Åæž%·Šü)ķ®æ¦j’Ē}¦?"ö× ƒź:_„’ŪĀ_“‡l¾<ü»Q¬2¤ž$šōĒlŲ QFēx¬gY¾_Bpئ„’dŽŽÓō©“ķbI"–ÉüĖw92@TQ×®sŹ¾"ż„—Nń_ÅOxēLHāöē{•Č2zž•Å:ŠĒŽåō?xåmĪJ»xįJä~»ŚŗœójĢśŖ4ģ†äīQ•ö¬k›ƒqp¶ó¦%õķYFv܊“9“.YÅgismØEk4N7”>£Ņ»½gĒ>%ń”ŗ†±ywØHäń[Ŗ‡ š0½ģaDńI"¹ ͜ą÷¬oI{.†M”Ā7YUˆ' œž£›¹›Ć(ģ}ū6ų7Jń¶‹ā/ ėĒż¤ėö˜§‰7>?»·ńż+Čõ Üų{Äŗ†õ6ņo┄G¦x8?J$¬®M:¶•™Ö|Cż”<[ā’…÷Ž&ŅēŅēžŽÖKØA“2¼ć‡Jų³Ąž”g•¦Ŗ¬÷!JKņ±‡>•„§czXØKn‡¾„ģÖ9Lč®Ē7W!«i×Qoæ~蜟jĶJēu&Œ» ƒ4ŠŖĮT•čq@2ßJŚ;ŠµŠWmŃŹ|śWm~ž{–ū»Ļ>•+‘ÜLĢpY…jEn%FĄķPaV%+ų[”,Ą'ņ¬ų›XšÜæhŅ5 ‹É-±ˆ õ*”¬x˜¼*“Ō»q¦j÷7چ«”闷w'2J!Ž~\ҹI`µI $F"¼®ŅTÆŠŠÓڳĢYtŲ«Ŗź h–7d¤ ŒY³ė“ĶuśSŖAYŹ•ĮĶc*Ļc ‡QŁqd~ž˜ķWÕ·FP’w¢„ ēZģzgŚu[;;«ĖX˜HĀ!–sŌ×K”ų’ŪZŽ8Ņ1YMoԃØ\,eTqš„Fó\$1.]«@HŻ‚ĀāĘSÄ  ė\߉āūš ‡1J¹õĮ”£fiÉŲä“ö–xˆŽī…q]^—mn° {ŲB_īŌŒŒ$ŚÜš4SÅbķ“ČŪC’ž*[+ĶKO¾ŽjéA^юÕ4Éå/„r3ć„„:@Ȓ‚=é¢eXīą•ńņū bų®ł£X-ćFŲOĢO„očĖŚZDp”gĀó0:We{x|ĢwČ®„fŁ›©]Ž_\¤× $œ’sĄ÷«6ö’˱# õ ć؎cĘööŸŁ3édČ.X‚ >Ҥ‘Zžų‰āM7Ā—~ŗ1ÜŪIņ‰ßÜŅŌć”5Ōē"bdx;±Ą­Ć{,QŖŪų”ĒNš6±¬Ņ¦ü‘Ųzՙķ–gŒ•nć4Kc—½Ōv[xGļĮ9āµģ¢IBÄĢķŽ3Mec§ø“±¶Ku·›ĻGP\ĘÖī ršÆ‡ģo#¹˜XĄŹrNh¤*¬O=Ń4Ė ^q+n…`š¬;ųWk¦¼öČw€vŅs&å¶łÉtOMŽ•ĢjQÉē²ĪY_±ŖŒ®h„b֏ŖmŤ’n`N01ł×”Y|čŽIŚ9«9ė2Õ·‡gńĶŻµ…»ÜKM+*  ŸŅ¼ƒOŌ`ÓuY“ūØLR$»U±Ćž?JŅ×G™8žÓl¶ņ²®60ČĻZåõĶ'ķ/ĀF¾rp[ā³HŹ*Ūióg0‚[gĖŅø’‰¾%ń„49õ= ƽP6˜ANzäW^…ä|÷ē°Ė2Źųźą‹zõ}ĶŁ|Ϙ4½7ĒæÆ­ Ńō‹‘ØÜL7Hć䔞 õÆ·~ü»ų:ߌZżZ¼ ™‰Į䎜vėÅ}&…µ?ɬē:õ„Z¤¹„&Ū}Ūėó=_OdtG·żÖļ”c„kxƒK‚9#ø¶Č¾ņŽõč/Q™šĒ,1)W|Ś“ģīeI#޽3AŹh\źlŪv€_ŌÖ Ž®īįC”`zē­sFŒX½³Ł,*Øž#šŁšÆ†æ“§MĪā r~•j=ĪyŲōmWĆ֚FŸ;¤Šņ`ķ^rkÅv¹øxd$GZŃ#6b 4ZI>]ŲĻĢzToĀīSœqJ¤a%c5ī²wźqƒ[V(.£ĆŸ“§­kʈr°ł-£‹%¤Aō©Ł™ƒē=čåKSĢ­FĪŻņX޵,•Ö²¹ć‘š†ō2¶ün`ėÓ=*¹Œ«²¦=2*æĆudź Ć&Ų™ł”Pg2µėł`cå=3].›cź4lĢ­ī0 iMu3,[ŚCddƒ ÷4˽eV&oǽ7<ūPŌ7ĢJ–ŻĻJĪhäø%¤‰Į§Ų\Ā( ÄBŽ3Z4¶„6ķ–&9;»TTˆÓ=kĮ6fń&f‘v)‘Ņŗ=[H\ŪN—9ĻĢ€ņ­pԉЙFMH[ŽCaoi}¬ßLā8­lā2Ķ#Į5÷ēĄŲ?Ęß/#Ö~6cįwƒr³CjĖ‰ļ£ąķ>™¬T,;ō?dž |*šWĀ}.óAųmą[mI` ¼Ēļøć%Ę95č7’‡|1<0^\\ÉØĪūcP…ÉoĆ„VÄ9ž#Ņ“’Ü ?½ŁšūŽA•Ž:Ž ÕŠ ųw¹š†‡”e[Ā€+IŹĄś6Ļ^”†™½ xcGšŠ]ĆŻ1ł>žÕiu.Œ–žpņ—ųsĪ)™ŹW3&uŗŻĶ[]2 …Žāą­Įź;ąŅ%#—¾×n“ {ĒžH–q·”é_2x»ćg—¤ź&y!ŃtؙŒ÷2įZ5g“[ÄŚ1±ų}ūW’ĮR|%ą—Õ<%šŗę÷ÅŚū,–·7Q¶QPńӜöé_ĻēÅ‹Ž%ų‘©7ˆtĒˆ/[@Ņlī§ŗ•˜Dˆ§ G<•ōæĆ?Ł'UÕīc×|S7ŲU ڳ—F}ā1œŅblūƒĮ?°’fCm} 7^éįŻ 8˜œ5O8aŖp­®Éž+hģsHą56ŹW?ŲŠO*ŻŲķu<)Ķyēö¹lę+åK ‡1Ķ#q@ŌnuśG‰ļū°Wˆģ HĮ­;ļK‰¼ŃņćØ=hS5ķµBŌ^ټrC?+žqY6×3­Ēšƒd«ĘŃėJLl:ēV¼¹F$ņ„ē'Ö¬µ‹I]4ł—#”ėõ¬EsVėPŃāÓŠĢ_nÓJ-Kķ’¬³‘ŌņĆҁó33RÓ­µ Ų%£Ä Ż•vÆ[DöȑdŪüL¼ŠĢ]Ab€‰”¦ā26ńĻ„,z䱬iŗdp1ÉäŅ/u%—Tå%ŒI4½Ą®ŹÖXÆō’ń#%ĀõČä{PL’čsQš&•ć°$EsWšŻ‹\­’[ę|ć#ü*£¹ŒĪ®ŚĻTÓ-aŌ-V|·#iėųRź:ƒÜ4WƒČĘw|µ¼_S4Ļ0ųÅį= Åśn™<7Ā9`łŃ’\2±ģGįü«›ÓōHć¶“r “ØZ©J걑§«¦©m„O Åq'Żą·Ņ½vĻĆׯl“ØŁœõ¬f…4b^°b²›=ūÓ4żoģ:”3B$*óS ĢŅ=ļÄJ ź0[¤nFpџ„yŸ‰õ»że Ä9ē½j-ži@ŠWL6ēƒYzœW¶¬±˜Żzį†MD„ŠF®™#O«ČbŲgēnę+_“H¬#ažHčk•ŹĒŲŦؠŽĀ"WbIQ€Õ¤m­u(ÖšīfĄävśÓ*09[ļ ]hńģę>[9o-É ­Im¦^O§]Ż<ˆœ·*?fØ”¤Ųß@²Å%ĒČpOĖĮ?JÉńNć2֗ś/ˆ£µ·ŽĮä†Čž•›Ž¦¼ē[iö6²'W·_µ€rźēŌÕk»Ø[yVę@ĘT?FnLÉÖt›³[ŖYCö“lļĘw~“ĖM.G‡ēM‰ĒQвĖŗ|;ljdŽOlcŠj°HÖ¦ÜE1cĻ‘År•ō0ķ.5-1GšeH@ćEf_ųī²R6žbIbŻMtX‘ösĒ%¼īČĮøąŠ‹ģ­;„ÄSy¼ćūՌ•„^»Õä‚ߕ?/P{×'yØK"3Ȅäc½I¬Į`Ģ <,Óč+oū¦¶ źūŽõ>ō;Lš¼R"ødĮ¹ō­ū­ŪO“|d°‚x؛&[UŻó¤Ņ*åS8śŠ†ÓQ÷PŹ`,sŃzv§dYĖØßĒvā$ä³zsŅŗė >ŽöH¼łĪÜį³ŠÖź°kš’4Ö+;daOB„p4H·E`øŒdŸ„D·wFŌb¶–?¶ uŖžÖµüE/Ś­–KuWoŹqÖ¤(’Y,ätvd~¤āŸ —€ —å š)01µ³iņ›ˆćdpFF 5:†Æ­”œ¾ūÆłi9ĻQĘ+”¼'cj[.ķ ¤QEgŒÆ Žä÷5Ć­£éo·š'$¶zŅ6Sīl[JĪ0z*ķtö–£˜IŖ8ĘrEkMĖSŖ“Ę—ÖÖåoEĄ8äŌ1xŅó^„ģR‰Wifś]f2I¼G¤é×:Z_C°IødÉ#é\µ„“&՛Ė}ßĀŒŠŁóaį«ŪŪ™®¬›ięüŻ? Ėԁż~8 ¼WākÆac¤Ż–Ņ©ĖAАGÖ¾Ćń®½ą‹ Ćo®[Xk6Ņ©{Yä81? Ŗ;µ<œF«ąJĮuķŒIņø ĮĮ5Ąų«āuµ„réz^žgiˆfź?:S³2³¹‰ā)õĻ ĪLOwj”åF]Ą1é_2ĶŖ|Eš–»ŒōĶ;Tņ’č;ØGÓ½UµøłUī}Ēą’޾ų‰uįūäŅć›\bcŗY›pó1ĒņÆÆ ųm©x‡E²ńEŒ––„nņ›łģĆæZĀPdK±ä“‚uCą>õō˜õ›ĶņĖ©9Čüš+ä_ųNĘ}Q’ūGm*Õ‘Ń#®Ņ÷ĒėJčMĪþ,šĢwŗĒ‡µk$ŌĀFѐp3œa½k­ųqš—TeŸS±¶·µÓü¾Xl<ˆrp¼ż+¢%„Š÷’ ų:†±Üx¶ÖŅč$Re;‰<ņr ņ?Ś#ƾ#ń-։¬xŹī"Œ²FC?ˆžē'Šc¶„„~$Õ¼s¢A<Ė‹˜XÄÅŌ,ŠćØ«Zē‰VŽõąø»ó$Vņß{a‹{Š5½‹Š|+Š|xaƒQ¼·µYpőw2žĒ>µē~j_e²ŠžŻż”¦j fŽbū¼³øßķø©æAŖ6“Å73ŲŪÄ`ŽEŁøŒę¶4Yiö:…‡Ų˜j¬C-Ė.qŪ5E6vŽ”ų·Ä©i«N±G°Ė3oįX õØü}„Yųz’NŌt½@ŻL䆍Pü«žłļA-WO^KR6ФX^X7Lć®z×Q ųZ=+]yęĖv •Ūƒœ÷čh'ŁžK¬ųĘĆįæÄ%£¹·{”ēnŠ"É ū‡Å¼+ń/K°ń_‡.!š¦µ%š<Ł1ėµ€?xŌ9ipögÉw׎+šgˆÆ<;ćEµóbżÜE]•Ēpk¢šÅ‡‹›X“Õt ®Ó8 $¶Ači{NÅŲõéņŽ_ėv%½æšŃ„ó29żk»Ōm®§ŗ“Ņō¤VeUĻ8qśÖN]ŁĢxÓĀ7ŗ„߇ļ4hįø&ś [°zƒ×Ø÷Į«ļ čwv/©—³±‚ VüEO“‘÷/Œ’h‡zO‹˽sHÕn.æŌYLŁ*GN:Ž•üūüIń¾£kzę±§Ggu,×FI-–Lł$‘žs‘Bz•ģŁēsüIÕkŗ.§{u”©i¾PŹp9Qžē§•I5BŽšæ‹~Ēń«Āž*¼Ņķ,†¾®Ćc¶Ł” ü濜ąõÆĶ/ü;Ō~iVVž!¹2KūĆļbŪ½:ÖTōI"ֆc\ŚŁéī#/l…v ļś×Æü:ż¬¼_š*xW@²øÖü7ŖŪÅŁ`”·ŽÜžµŅ^čśŖ/?#Ā~!šž•m¢«8»-³8ļž¼×¦’ĀeŖėŚĀź7ŖÓ‘ęÆ@I?„!£óOćv³ x‹ā?Œ Ėöē+¦ü§Éżß¦kĀcŗ›DÅęVˆgĖŽ~ačI­# œ;›ić;½[NŠÕd+±GČOÜśWØxfļC_ģųc²…µą³u-ķĘ‡Z°Ÿ/ ²šõÅփq„HĄOłć?Ҽ›Į:/ö֕"Įz‹0‰„;+Ó8Õ Ųq• Ÿź²iWėdn!O™„U8Aļ\^‡¹”N«hĘQ,œ6q僊æhh•ϧu-ķü1}M¼Ącyl7Fs‘ėķė^/ć»NÖŅŅ{MFyf(kHp NüT¹hxfMQō{Ż^Ō\ܼqHĒ8Įč? Ųšßķ%ć K -ŚŽhŪ($$8šØ)#č߃žńߊ-ļüwā DžŪóVuq ŻGsұ?h‚üI¬hž#šüv©wh䯻ĘAEŚ;ĘqQ)Č|Ļ⯅ŗŲŅīõw·Ž[č€i•xć<‘ōƚ/-ŽŚā@Ź»rzsN2øœQ4r2¢ł™/Žõ®³Ą¾2½šwŠ4­R;µŽ$“’ÜĻÆ¦{WD„¬šFµaā-OŌģ'3«Ä¦QœķsŌ[0NQa^#Š™D‰+™7š®‡ā’ kz.£os'Ÿäć‡PqÅ~]kÖwZUõʞ-¦·$hÜČ>nę9Ķf(v1ī¢Ģ,‘ĢŃ: źłĘÖäžUścįłÓć‡ĮK8-ŚŚOi±L89*¼\qśTTWGTO`’‚F~ŲśŸģuūaZųoÅW#Oųaāņ4ķb"Åc·»'jJTšy$×kžŪ5ķ29u«‹›WUžŽB8’6ś}EsՋvgIŻüńƟ¬C”Or'89é_Ex«M…¹hČ2(ĪEb÷]ęCž żū%ź¾6š„?m/i/qā ķŃ|c 1įītöa¶bTs±›?š>Ūkųßń™oŪ\[ĻęŪ¾eV*Aē„„÷e(łßs @ć'»FŠyÅU™įEQŽ?JōŽy+2Ł ¦CĮō§ĪģĮr»ĮĄĒ\{Šc+t!`’1*~“żĢ3o<Š$ŗŪČpØA 5³¶ ¹Ļn“ŃvŽKxÉ@Įå€OčkčoŁCöńģuūSü+ż¤<.&k{˜ķ5ĖQ)Ž;»m²=ˆRH$Ī)°?ӓąĻŽ|ńoį’…¾"ų3U¶Õ¼#ā8õ=>h¤ £z†*1ŪęĻćŽÕ±¬#Ū¤įIi”lńÜ ć­†±W<Ļā†4_h¬×‘ż«DŌ 6×Ń'\ל×åÅÆ‡šŸ‚"ń±qā;‘¦0šŁ¤Ėdć‘V ;]ךņi|;ā3\H-£\ØøVIƒĻ}Ļ}¬čš•⿇Ć\é§ $#dr?‘ųVŌ劇 V%@ 7^x=źü0Ļåy³ü]ōĪiĆR„ö÷)Ż *CÖ¬@³Ē [—TBp=«bTlm®ƒēĖ ė!AĪ+@[yW1Į8f‰ˆäv fżŲ·Kv‚8Õ¶Œžk:«¦čž…O§4ĢjOsq ŽJ³d“Ī+¬³µ[].7»L²˜ā€^+•‚ MĮĻ„:ūƱŚZIuĘū€;ئ4Ž^Ī&2¦‰–Ę1ŌWas 4¶±GßpryJFÉXŠ×N‡K‰Õ ‰Aē=ė§Q]JĪ8®Š™Ó€Ēųq@ŹVv·Ö·m +-¼Ÿ2F©§]ž5B†6ć„EjbųG~Ÿ®Ćpš@pvŸ0dcé\‰üūjžé¬D %'åčWŌVjZ›tōyQ™S »'­t:-“Q^‰wį²W=khŹĘ°RŸŠ­®¦økŲlLvū±ņŒksĆŚ¤¶»bxć ŽWSf–:½sÄÖwŗX³ L§ ƒČ>õĀŁ\ł–rZ}œÅ–ć5ĻPøš:g‡Ł„L£fąŁž•æ©ÉbZkUTPƒc­fhŽ,¼V¦HÓåS‘ƒVtĖ#9gŽįc“©ĒZ  Ī±„¹Š,KpeGśÓ$‘5M:9eŗxfG]ŻpśÕœĶ"åńSA¦Ėj¬Ä·³œćµy愪Ļs”§~ŅyĒJĢŽœu>kų»u&š\o›{”ŚJ““ÓŚæ?¼KżQ®Ų“ĘFłĆuSė^}sÓĀĘśŸSü¼Ńģ|+©XĪ7“¼…É豑ŸĘæG¾6‘®|,Õ¼8D³Į–ĶМˆŃ”ą‘ģV¼šĻ[ŸŻ¾B+#¤”ē÷ݟ•Ÿ¼%Øų6žßJ±d66Ұćęē€ē_°šOŠĖāü­Einc‚ä/@{ō5É$~RÓ:Ÿų+•¦iģéńkB¾SµY4ėČYøš Œ÷`:ė’b­oĀZ։¬ź–7bĆÄlĖ« ² |ČqĪyÆ+1ĆŽWGå9öKß±ūš"ĘĀ}y ōz–Ÿ{·¼²ßó =šzއŠü{’‚“~̇Ć~Ņž>ü9°“мo”_®ŸØ€)¾±ä1ģJ×ĢU Ó?>©'ķYņwģēń¤ų†Ķ¼{f5Ä·Vw'ŠżGJė š¶±āoj1^ŚÖ8œ…‘p7('$ś`\Ń…Łźåń»>SńO‹MŻÕÄV³øņex‰giĮĒå\6›¤jž)æ0Ū®öfĆ1<z÷²ü=µ?KČp֏;>šš_ĆĖ_ Āv[‹āpņ? Źń—ĽĆw¢M1K³qŹž•ļĘØū< 7d|QÆE’ '‹..’aō?ć^›ąO‡¶ö—f[fżō¹™˜œšUś¶Qƒ“R=Å×4…†t²iōÖūҧE8Æ-±Ó.|X5‰,Z'øµ]ļĪģĄļ\Ӊ÷,=‘‡y¢Föą«:Jšj’†n§²ai™†ł›²>—“;侎+č$O–ÜdW ZĻcs ŗ²³ł ˆHļ•>mk\ÓtH»Š|G¤[ėZ<ŹT+šŠ·÷‘»łĶ~čš-÷öžØ»ŪĘ?uĪĢČĒÓŪV‘“G|©T=§į‰¼ešV]kĆwĀ&yh~źśńļĶ{ž½ńgÄ ®³wēĪw}Öś~uj£1’Wc{Ÿ5ųóᇅüur5Év>'L‘p8óWu°9?Zę¾éś÷ĆĶfKĖ9ŅÓ' !téžyŖ¾‡],š1g§ŪÜŪ7ˆu=rĘßū/Q½;ęecfē'9ɬ½Nź;Ē’)£ÄĄē“ɬ%±ėŠĆņœßŁ$ĖłsZ¶R:¬ƒhśžõĒ6zIXŗ%hį!>Fė\l³n¹§Ü’īĮķXĘ] ”{–²«&ĶĮ×г˜gņ\ ¤e}ėX»JĶ6dR…÷˜Ó„·¶ļkrĢŃ>CVŠG-ho-׏<©i~#š‰u /Äz{™-Ł$*³(?u×£qĒ5÷‡>7|>żØ4 ×Ęžm/⽫,-q @%Ž0 Ļ^xⵌģš>säÖčś 5ė_‡~Ōtk«ō–g ū<„īE#®kā]kĆ^æKė˜;+¢ZO”øŸZēözŸ?*•£.x­Ļ’ĘóRŗ{K[gŗū3oŹ®qŠė¬ ÷šC ŁŁ‘†F©÷ļQ;ŲūL"ė]Ļ.×ā¾š×ˆŹžÓĖŽBZ T’’/=į^Æį›µ¾“%•|ÅdŚÖG± hEāĶNä„-‚Ąi°¤ŹA?γlŚ3īwlqE²'`ёłVĪčćšDµoōnŪ‡J’'¹JOŽ!%½Ep°F‘\H¤‚»Nō3ެ ŌĘŽ}:Ui”GIŸĖTu÷¬å.‡7³88ĻŚ5@ګЬmaoŽĘŲ=Jƒj{M£A«ĘÄ Ļ#šUprČūŁ­i.…JVŃ’ū%~Ź?l_Œ­šĻĀŽ?Šžųz Qw«^Ī·ĄN<ø!' I“Ą÷8ćü»āoĄ‰Ž,šLō}wT·„ź!ž/*=RՉ ŒĆ…2°#čzōᇼyČó?éįųŠž@©6åg+õ¾ŠŽ‰·ż_ā±ā§Ńuˆ¼/āM>÷@ń<,ažÖę208Ź7FŻÜĢČšÜ%¹·`Œ ĀQ±ś®Ī®ŽŠ÷ėś¢[Ét"YnU¶;ŸSXśĢQŽiÓėö„Aœnö®yHōŌ{‘&ː»HßĘc^‘i mÉ©'•ź^Ó5ŪuŠęģM¾)Q¶²ž5QtI,Õ|É ņżĶRĢ*ĶĻz-LqF×'‘ɬuKĖŁÕ h/x1ŌūU(^"|¦øŠśĆO™ä¹– Ż&ą~_Æ„r÷“߯v(čz0<[*r<řĀö¹”cuGcvFrk¬mZŪŹ1o æJŚÖ:©ć#-„±ŗŽć1ļĢ@×gcmvÆp­‚„Yā åŌ5‹×Ś"UŽ•r×dH”—9…L™“‘µq Čäē8«;^G „rGZ!±¤žŅ̆ ©óŽ>•&£i%µ¬ĪåL›IĘzUGŠó½2?“?˜€±nzŠźmŹ`oėAēŌEøē7ę=ūÖÕ Qø±G8=霕)œĪ·įT¼¾[ż&4µr0P1Ķė^+2Ų<{¢ø]’®Aē<ƒUkœueŹŽ»Ā°Ey¬ZXŹ A#Øqź3_”ś÷ģš§Ē¾”č¾&Õ¼-¬, É+/˜ ×Œqšč+tėŸ‘Ÿ¼;ć߁>4“@ų…`Hž}ŗf­n§Čæ@:B}+Õō-A/,QŅEŚT¤ņ*„NĀ^gcŚg?čžń_Ä;}zt±v°ĶÄē÷lJżĻĢμ7^o ėGˆÆn¢)ÆÅxņŁ“I…#-’ T©4]·:/ ŽZŻųkIøštKݟ¼‹Ó€Fājń¹Ł!ą0ĮėéZEÜēžĆtūE–šO k·vJ×l,Ņr°Ė rDÜać 1ųŠöšp?>•œIģča²ČKānr]tIGäļ/šņ:ĻxSKŅv]E§ŚĘwnG¶+°Öl_“'xūJŲžõ{”Ö‡šĶZ·24ķ20#Ģ«ź+^IĶĀ©ĢqÆ$g­QĮ66&¶[mҟ-—¶{TP]ĮržXesķA‰-ķ„Ė3[ź/ŚųŹō­ &?Wń—‡ŚŲĘ$™īs‚Ģ~Jņ‹ķBÖK•šTĪ)ŲĪĆ$.1*pj£óep¦œWC)ī`ŽB«ČŒē8­ĶØĆęœń[$sĻrūÅ#’€sśSćŻ ĻĖŪ&¦L—1 NZ óIĢ`óü« 'īāeǵYä(9ź}©&ˬ^ IzVmą71(sŸĪš3"‡O ›‰aėW›QŠŅBÅ[±­ŠŽB÷W·ŖHĪ3ŒÖ$²Ļ‰Š)=Ļzæm“$å¼üäēø«gy±“ŽzŠ.Ru²D($\®~aŚÆ]ģ¹qäĄ"_»…AŲļō WŅ­„·sż™ĢŲ ķ_C|ż•ž4žŅŗī”4Yģü)U¹Ö®ĮŽ$Rp|²~ńžUĻ(u7‰ūaū3~É_ ?gkH4-×āćmóė7‘ļ’9O]€ōµ}µw¢hĀæń1šīVĆĖōĒ ž•›chńč>8č~(ń}ßĆ R³šŽ³BA©!®wBŪw ö]ĀĪĢ‹‰-­īļFVBHpOج['”æ®ųZŹśņßVøy# ¼D­…?Q޹½WJµŌōė»0$²aeˆģe÷œI–ŒćZū5¤¶–šźZģŒ–{źĒżjʝ¦Ć©AŖO%ńʮ6 HSģW84Iö ķ„tŠŽgĄHÕIf=…xęæń&ĻIŠk}*ź gc!‘¹4F&±ĖÆŚÆž šsą]ø"ń¤Z׌fV’-:ŚErĻ»ŸĪæoŚGöėųĻńćVKŪ­uüą†lĒm‡2/mģ9čz{×e*NęŹĖSó‡Ä^60Op-3³–irłļ^C©ė—ŅŸ“Ļ$äņsü«ŠŒ,qWØcLljß^x¦ĘU‘qņ7§©­ćuJƒ£ˆ”bĢsļWŲ)BØ\¶r=*ŒK[¼d”R¹${‘[6ŚwŸ³ž:ZŹRW5›MŽĢ·Sł’qÉöµ÷Wģ‰ū|}ż¬¼K·t9t© >­wlź©õČžUĶR„ŽŗtźĻöP’‚V~͟²=–ā[Ż:Ļā‡Å|ošīń¤.G%F\€sōÆŠmBś{·µSŸ„ĆÄvŠ®ČÓ辿ZójTléŒlWxē»·'I -Ć|Üsj±}ż•„éÆ)OµLył‡C\扢x—K¾ŅīMźMk{Õ|S4ś‹ż©Dq‚ ¾x>Õ¶—"m.į³łTņ"9QÜ¦Æż„¤[mŒ#cF1\F£plā› ę8®O²{’ qńx’oō‚ö(ŽG˵±ƒR%ŻÕŌ < ‡=Ŗ%+ †Ē<[Ė[īÜŅ­Č'¼eŲļwĄėY\£”²Ó§hT)rTńšéntKØ-Rķ‘Ä8É5ŗÖou«3l®aCuÆ9‚o)Kxo®”·RXĆæ*ßZŻ =L7ZĀ·elą²×QsåZĮgI€\ŌJ=Œå-LiŠ\6×DU`rWŃ,'² j—ķ-°Ī#aŠ}k2 :Čø·¹ˆ’6ĘGõ¬›¹o&·`ŒĖ7N¼P5™é^-Ō,¾×§Gmöµ!@‘ˆŽĒ×£hZ†£ijŃėVėox~\‡Ü)Ü®Bfxn-Ņ5CīūćŽ¹–Ņķ­’Y§’÷†kdīA«bŚ]ś(ø„8ūŻ+Ķļ|Pt™ļmą“ŠżUo¹ĻQĶEF=Ī:óÄ·×Ģ!’ßc’Ėœ`v5·¤kšļxL!BaX‘ŒjÅłćmOaŅ¢‚ņČ]$öĪAǃø×yÆ£}•mdŠn6Č^Z)œ…œö†öo±äpXŒnö«©w8™‚įxõƒŚż²Ķ6čĄĪ1Ąė\ä°\C„l'§z “¹zÅcWLęzWe b1aŽ­JĚmgĘdk–/Œœæ×|ŪK#„8',sR÷7Ȳ1I qµ€%z„>¼ÉnöØą1/= <ų_j rŃ^“Ns‚„A:ź+o4—VmohOČŁūŽõ”¤h””ĢĻ$ĘāmÄĶ(ēīšét‹*óAÜ:Ԛ$zč.4ēŽĪĆå®ŚóéōFyµ®ŪŽ00Ļ€®eHąI ŽĄw®O™ “yH%ėĄąŸzÖ R±ß<«"n*y8é[š\;ĪöMŒPĄõ>•¼eŠÄY]GOBÄćpĒLÖ÷‡d–ā4[øöĀ7žĒҦL™ųżšCĆkį‹h®ģĀ\MµĘåiČäß9ƞ>2ü=ŗMBņ)¬¾Lę[lņńŽyä×½}lsŸ>ųwAŌcÕ.&·“–;ˆ?xfD;ŒõÆ_ź_4{RoÆ_U¶bė‡ĮSŒ`ÆēJį̌ļ ųCĘšZÅc%ĘĖIŲ"Ø$‘ėšö­sį/Ų|wā. ī¼Edqy ^<õs8…6KM/Ä?jÓ&°¾œķŪ1ūūGP:r?•S“ĒVš×‡5]! µåŌrl pĮé޽©“D”sǾéŗ¦‹­†žÜ”¼Ķ˜Īן+ōJ_Ś'Ēŗ?„nøų©%Ƅ,<7«¬iŸg½$Ä >Œ;“ŸóŠ€i^Õ<)=—Ś,RśŻ’xŹŹ»ÕN2»:śS-Dń­__Š~6µ«hZT2ŚĒJ«å„}ī:ó“_śŸ‹§Õ5™„ŗ’y湚GĻ9FĪ@J cMIxĘw:~—o ¼Ņ}Ƅ‘ŲóĒp+Æń§ˆĘ©įÖŌµ# Ż„»‚<Ļ™ƒc·åEˆ”ē„k:‡ļōū»‹;6“˜‘åƒĪß\×7¢Ķ WÖr^ėŲėœp( ś3F³Ņ/%²Ō“yZa“ē\`¶AąÕ_‰’ŲĖwhš5ĀØy“„ĻP¾“sÉ]nlµ8įÓĢe#†ś×U᛽FāāšE%Ėe?Ņ¢)ž_ā{m/PÕ>×uåṲ̈« d®+ģŸ„Ö„ā FŅ-5 Z°P$“īó×48ō/˜µńwąoˆ<_ć­MʤŗĖĶbøQ“ ʟ^•Gጳ|9¹Ņ“mZāV[9·Ėꦹž‚‹X¤}Uż«šs[Ō|@t»ė¼›e¹ˆ!ĮßĘG¶yÆńžƒhŠėzZJÓÄņ4‡ĖGķšå•ī ›{”ķƒU³[ ÅóD~d¬ 1’Ļ„tĢ}”ü>ŃG†µW“OŽ[XL`ɑŠ×”[iŚu•Č‘F‡=G‚9ĻĪæ^šó|GŌuĶ(£’YKL„žņœņn•ćįųõ­Eć°U·¶ #Ü­Ó$ÓLŽgQšßü#7ŅX½×™t `ŁŻ^‡ą+½.Žin.ēŽ £"ˆœ·ź~µ~оRž·©Żk1x¦ļW“YģV)"øž5hĄūŲ‡5ĀųśĘŪNhq–·e(„0* PŠöOü[Õü9e¬ųCSŠģÆōķNUšAóF=>¼Ömž‰„ǧĶoSĘē˜šłņÅ!X’×OŸR¶›N·»ŗó2 Śy u®oTš­Ī»{m„DҵŌy;prG֚ˆM¶½Ŗ|=ń±’›d©#€Ŗ¹ĮČī1šū3Ąžš~µć= [Ó’±§ŅnĢnFAUcƒ†ī9””ŽĒŌß5č:j]|9±ū,±˜£āc;G×5ŁųEüIŖxaµo^¤zĶIJōĀR1œö®ŽĪå)Yų“¬ž$Ō4Jh“}äh¾Ņė…lŽAöÆĪ’h±éŚÖ­m–—vérĀ9`9¾µ4®¬ĀLóPK" „Ÿ61éV$µŁūĖ„HŚO÷kÓ¦ś}›ū5üIøUŌ|'ŖOkw—Y¢|ķd²ś’õėķäq²6;€=+FŒłµ5-‘ŻUŽügƒČƎiχĶg-lRD†w[+•PĘżDŸõ®wŲp–§Č+:,˶EfÉxÆųćdšo‹ģ-]˜é—Å”¹%ń·9ĮńØrÖĒ\Yź_“ĒĆŁ“½cNń^Œ¾D/"\E"r`‘Aćןq_Ųü?öͰż°?dŻ7Iń ²ĒńOĮŖŗn£œÉ<`a=Ć*ēź§Ö„j ō?C“ō»Óõg½…›fxĻōƬ<¬Éā 9Ć9kˆĄ ?ʱœJ-ų‡Ą~ńæ‡}?S)Ė”łÓŖFŃO0Ś šĢ1ógŲWŖ™Ē)w ؊Olóõ¤ɞH\ē4Ģ£Žū;Ę÷/>“’0… æ$véAŖV»Da‘·±=…J¬īį@éÉĄ ¤^ˆ)ÌčH­UūŻ­Å…äi“•v5T7?«Æų7;öŪ¹ŸBń?ģ-ńXuÖt§“XšUĖŹvĶk»/n9YN0ģ„gśßxņŅßW„y«Ž‡¾EgV&ÉŲćoģķå[›4M¼ ąv¾&ų’šĖ^6ĻńĀĶęx«CU’{pėū0y¹ cŽ{vĶyŅZˆüĢųį#Åz¾Ÿö[iķu8Z{C¦#!FqŒć•,_¶Įi~|IÄŚ[iś>©/“ņżŌŗ}†E]ī t>9¹…÷+ĢĄąqֳ欀DTćÉķ^„C’¤GDÉ Į¹ēŽŖÉmæˆõē½Q‘SvˆóˆĄĮąbœ’e¶`õü>o“ä#rō§Å"BąŒP2xŒhVFl`wüŖh§g*[vxÜ(:)ČÖŃ5-_Bń†¼aį»ū½\Ņ®EŌ3ŪĢb~¹ŽE”ēü'öŃŅ?kæŁ«ĀšÖ‘©ńē…’8®!fIJ WČĮ?‡½Lö;”±śĮ£±’įīķŻ+Q]ą‘9ź?ZķöŲ¬¤ ļ=ż©Č’XµĒXg=ćĻųs⁼Gš÷ÅöŸkšŸ‰,&ÓÆ"a“‘q¹sсĮ±öÆó¬’‚ŠžÉ¾#ż—>qļĒnxüjiÅÜÕŲśW@ø{˜Ė1ČSÅu±ÜƒĄ9kѦĪ:†®ƒ²ęłķ¤,ˆųėČÕų«DҼ-$>v£c©ŪČ¢E1·Żö9čkØĮŹś#ŚxomĢÖņ'—ÉĄ=©¶2%ÕĖFāB££PZ7ĀŚž©g{{§#ŻGo–M§£©Æ4Žę›_NG#ė@ģ[7v6ĢCĤ޹õ”u‡¼‰āa¹ī(‘o!‰†ĄvƒĄ«B-BDŸĖi›cprh]X%K‰ŹÄ‡~l×_-¼ ;8Mƒ?5ѕĪ®~Ū$bAörŁZŁžģĮĀ ŸĪšzkøČļ‡ĪG5ÜĻyiqnÆpęp _J™ģ\7<ŪķŚ0ŌncrčĒ;6ž~µĒOÆG6©w§]Ę|¢>WĘr½djPIc‘Ž4+ø68®»Hµ’I¶uV“iĖsÖ·6‹čzt“[Ēc>z‘e!× |­^Z<¾#ŖŖä/™”sNåĘ”į½O{µ»’–S°\F>óv#ÖøĖ 8Ēz–ĘVĮpϽc)\Ņ,õ©4į„Ś/˜«&F+ŽŌ““4jń)2ąÖ2‘”ēcto䲙X¶xĒSZD™KŒKŽAžµĶ`lÅ©Åyn‘:Hx*3[zW„kø’īśkxßܟ(¢ĘŠZ•¼U£&€Ž%2ø$īNw{צMęĶ#“CČ+Ńø ūŌ½Žˆny/Ē+”mMŽ$˜ķtœ’Ē<ĢWĮ’xYoµ+{ėY7BxqżįŪņÆ;z8wc迃še—„Žč¼fīŽYLø‘‰±ķö’÷ųź/ź:…ż‹H–3n“†ųśW“VGö§Xæo”ŗÉ&æ_Ōę’j=7Ćæ¹Ķa~ÄĆ?ü5įķI|Ė;©š"Ź0°õČ'æ_ҹ¤ś·*”ūŸööÖķ~#ųSHšķ­Š’ßLg— >öŅNßÓ­|Qū|a‡Į.Ōt=WQ6ś„‹„˜ Į8ĮōĘõ¬ŖĀļSęs¬Ī XżčųEūL®ā-O2Aŗņ8mŒdÜ}«ß’ą¢?üńą]׃®`ųšvI ??0nIäõÆ*¾ ģüĖĆsöŖĖSš³Ą>!šß<1lņčvėāČēeøŗ·83 8~æwzĒĒ}BāĀłō8 µ¼øŒĆ$»~}¤`óė\ŌšŻžĪ[Ɠæ4‘ņ¶ƒ\¹KK€.wm8Énæ™Æ¦¾xBm!&øžvl1lēµzŌhZĒÜa0\±±Oā·ÅGĄ°,Ś\0\W•ƒģ |©ė§Šu¹nåϚģ]ÉžB¶œ»Ÿ¢pŽV¤ĻWš‡…āņ^ķŲĄ8oāöÆdŃf[V\DZ‡±nēź,!čwž%ŗ“E»ÓķŁ%€€$FćךńkO?W›_ŠīMœóJŲ`ėC‰ōt(YRxfŹäI żÜĢrr85ę3xrx¼D¶7‘˜Ī ›?!ü{V.™éĀ6E}f GB½ū.„"d. ūƒŅµ“ĶNöŽŁä“W–Fpk'NĢéDLŽ(HīŅ©@ņ7p+Mõėš4š ĆĶCŸC®DtmkÄJ±ˆäB7¤ēć“ģ—;”1õ«Nējw-įĖŲŪśŌrA:±Ü@£®z×ÉŽų”Ž.Št¤æho.`biąō„R‘öymkõ= O³Éó£^:ńL#/#łWŸR>²„ŽwQ“¶Ó'Ū—evßČū§æŅŗ E$…YSęī1YøšŠ\3@mݽŖ×˜ĢKJNķ[ÅÕ"Z_!“%>r{¢øŠwwz‡Štł~Ļ,jŪF å†N~™ü«¦š>s5²„)6z÷Ą_Ś3GÓļnm¼K”izöwŽRŃ«“Ÿ^=y§xóLŅ5ZKæĆhś|®B¦Ć“Óo·?•wÅFÖGóĘ.®65½²½™½ą† |g¬[xkĘ>"ń„u9—ŻŁœ®ŚéÅ{–’Ēųėć‡ń,_|wąļGbŽe“wģbšņ3ČĮÄąf©PęŲĆā,²Õ*˜Ķ •ļżnq>#’‚t’ĮC|į›Mū=Kć]ņd‡A¼óīąõ6Ų26qü ūā¾Nń—Šj”±,¾4,½‰8Œ÷5L#GæĮŽ3ä™Ģ,!9§nW£ŗģž’#†Ń5½Z’K+R±Ō"Żóyr*}ĒQų×m+ĘŹ<½›śq\ҦÖēė4ńJE»6_ć qÜŌśd’½Ó(9PqYŌź„cxƒūĻS\§‹®V4{0ąŹ88 ©Ģåtø ņģR=ė£X0 mĖbƒ–l«+…t†ļOO­mińœ3“ņžōKb—‰^ēLµ·½·y^AĘ?‡Ü~„y–»®GcäƌęgˆļWOsĒĘT±õĮÆ ¾½ą“ń²5¼‰¾O,² ūūąē‰&Õ“8£žįZą.HńŹ0ćéB'ĪŌÄ«œßķ/šĻFų‰š—Ę~Ō–ŻdĘóO–EÜö“FwnCŪ ükų_®ĘŹYŌńŹabŒŒÖ²s§Vģö’Yé÷pŪ5 nš0ÆÆ”«–vO¦µ¤–ß66– ą”lĻM2“ū[hŅ4 Šę-ŌÓFn¤ v—#õ5t qāf£&ōGy£i¢āųę—q€ß+}Ez~m —!f(möē&¾ #üŖń{eŸgÅÆ{°’ ½¾nķæ6mjś<>L7mÅÜJ¹Żr¦³'Õ³ŃXHĖ6Ütä×®•“?$Ÿaš^½Ą2FX?|V.æ"$ź]÷ž”²zœé™äŒ<ƒL³o"PČ0;ŠIÕI|gKaxē+3S»š;bņ9äńZF&2܋EńüņĆo „ŪĮƒĶhŻiŚŚ]j]Ķvń°9é[F= <Žõ¤W‘dŗ-ŠśśUČ¢im÷ƒåÆŻę“åG;fŽ›7£9 ō«W1œ0ĒJ«³‘ [m &åknŻķ`„28UĒ9ļYs³ %VmčOĶ‘š®ƒxe$±__ēRŲ !ŽØį‡|Sc„Łœöźij+(•ćņŸ¼»QµŖF¤Ē#)dh†ä*Į‰$})0F2(=sҚF-t*’jŪĘļõŚ?ńźēÆ/’yŒq#l#<ę·”!]Īīß1=ø—Ė€åd‹yžjÖ“¶ĪBN•ŻéŽ·¼Ó¦øŠā1zŽ–ĶŒQJNĆC Šewgœ…Lcmv~šEļŽµ+ #įī‰sćbāq Ē Fs™ČĄĮ¬[5Œl~ĮžĻšN/ éŅi^$ż”o¦ń6®ęƇķß÷VÄ·{t?C_®Ś&‡¢x/ưé~“ƒĆ~EŚ–°aT cžę²œŗfŪ_”—ĖŃ“ŌŽiא īk£_ßĖ ×—ŁžēD'”¬d‰‹>kųłū=ź<+„i„ižų£ Iö­Qˆm{ œˆ—é]ĄOŒžų‡įéü7ˆŚWÄ-%ÓZ³[Ė•šyĮĮ5…µ(ö©§yl“oŚx\ō®jäIråYĢ0;S&H©4IRĆg&ēaŲÆ,ń_Š-OųõūXčß¼&Ž-ų‡ā}?DИƒö?8otŽŁüėł¦ż³?ą°:׏ŸPšēģķ„Ā5erŅ[Ė©I!ł€ą•CŪŪF•õ©ųā/k¾/ŌfÖ¼[©ŻkšŌ©µē•Łˆ’w'ŠĻžŚŌ#“‹MūdĻd¼ˆŁÉ­z¦’9jV2¦™¤egȧ”ū¤UV˜1p½xĄéWn§ Jƒ¾ĪĀ"GݦÅ\FW=qLē4RĻvćÜĄćÆZюŃö™#B{ŹRčTc} [1EÄóˆ•ĢĪpµ{WĮo€æ?h?CįOßõ/\ ”¶øæŁžćÉ/Ó°œŗ4éŌwģo’ųošā žÕZÄ~7ńK¹‹D…Łį#0y<śąWīo‡t]Ā:%æ‡|įķ'Įŗ1˜¼‹X•7®1† zzWŸV„ĪØ«„Hā…¢±BŁ?xņ¬øō&•Śāīsxq÷ĄøĖ*h¾"ÓaŌ'³f²·Œ•!Š€qé\O¢j&{M&įfŚÅŸŗ}ė9(QhŸcŌo..®@Ųł@Ŗzµśµ¼ékrmN š{ŸJ„hyÅę³ż—%ŗĢĄÜŻżĶq:Ə-¢Õź³Hē­n—CHÄņĶOŗZq-ĀYŁ/Ī]›o©$×ĶæiĀpéŽ‡ķš˜9KųņB0õŅ·Q°åĒŸž,k~6Ō/5wV—T¾vē “(ōÅaxkĮ:ń :ʔ#ū*3*1ÓjIOx?Ą>=Kyl4ĖK«Äaę†r3ÉZśĖĮžvh®ÆmĘĢęD#”¬ŻB&śčŸaŃ A łQ3Š×²¼¶,’[˜¦cČÖ¦29fĪUg…\”Gn£µaÜ1·;fĀK“†č+C4ĪPšņ]N̊płąškŃŅÖ{Ao4+’0Ĝž”‘ęچ—«É ¤™layā«éś×Š“u׌ŠŻiYG“Ø Üģ5 2ĒÄ,Ļ]Ą!€ēńÆ6³¹—BŌntŪĖIL  ¬ø=ū*Īc0×D›^֜é÷É1ē ÕkŻ2]"ą[źP]E Ļ%HÅE„Ź‚śKIąœGēĮœœsZŚö” ÅVČꁎGÖŃŲĀē=o¦­ĆؔĘcĪNOJÖŌl,¬ÕŁQå֙§7R?ų‡ģwĀŽéÕ!•‚!vĄVzŽÓIoMo¬ģtł®£Ü~uŒō6ʚƄŽ-ü]FÜqEœ®‰§2\—–C½½Zŗń–-md>V>hĻLŌņ¢d®Pšž#_™.™–-‡iNĶŚ¶//„‚[›øVž»AaȧĢgŹīP°Ō,¬¦1,i tģ}*•ž•,š¤w°ß!?z0h¹&^”YݘŻä|7¦+{KńV»,+¤\Ē öŖX”Ē#>“\Қ9­btØŖ"ē,ݱ[ßšŽéóXG:j›ž„銉$YĀŽA+9®×ŸŁ·sŗ™|¹#R ƒŲŃe&rśļŒķm5ōYnāŽō©"2pXtā»mßNæ±3]ONLä挓 Ϲ_)ęk‹Ęīõ{JÕnāxņ Gpū§‚h4§Ųõæ ų±×W“°Õ­ćžŅBK7Nż?Łų‹”h÷štń 29ąŚIIīqŇƺޖÓXb)³'oaŽÕ×xzęāęĶm^–59č2øā“v3{Ń\ŪFŲŗ/8q^G┾Œ¤«s ”ĻŹ~µ¢-xr}&ł :źNł‘hń4Ś.ƒ„ÜŽEØ\,KĪŒź*ĪfÜŗXć¼1ćholdĢÖņn9 ½6ēé^—¦jK,M™;c·½O.¶FM½¼­ioĖ‘Č ZķÓÄöśŽ–Ö¾C*” AÅtE\ÅĖ”ęzŲ¶µ “°“ĘOZ¶҆Ł.mĄ,Ł=y5¤¢?hoE§ŻKnŖ°.Fīz֔Ö3Ī‘$j®łīqY2/­;‰¶dœvŖÉs¦ŁßaS08`Ģń$RßB«b4Ž#Ұā±uŒ³£qHiŲŲŃuGŃå -£•yPdgj{—›Pqq-¾Ō98ķš 9ŹööP^™!y^3śv®Y“Ņ•gg‡sšøŹĘmžg©ėx~I<Øā7eRQ°FOCš¢Ń-ģźÖq¹«Œ†Ń^}ēO¾"öĶį¶sžGŽ„ÖQ2ˆG”ŠŁĒjŽ.Ärƒii¢x£M–ĖW·Ü”ƒpūN{ß°®kSū›éÖnZ5'9<ńėI²Ņč~*|ų¤ė¾¼šö ‘{tR–ĄcĪTžUäµéÅņ[Ė2ĻbUŗīükßg UŲói>!h:@ø·R’Ś/ Y½½j§ĆĘ’‰ŁÕQӒN&{ąÖ rŸ^ʶyģ y¶°'j”Ÿ„u¶o¬Éį½sM·¶?épyr8#ŒūV|Śjk~ēē樺ޅÆ^[ź—­åÜŪ PĄ×mą(</Œ¬uxA™8b9g^ąVŹOdc*¶>©eųo”Ė|ŗ`µžį×u»1„^Ē‚+COš~“āH'7rÅk>Żń»/Źx§vG“ī|Ćć?…Ž%Ō Ż†Ÿām„Yˆ1|›—ūµčžšÄCĀw:}ÕĢ×W"T˜Œm zwķUĻ”ŖØÕuĻA<šF­¶KČ&Ū$Dŗdgڽ¦ŹėWŃü?¢,0›G “›TؐyØulW?cęļ^%Ō|A2ŚjÖś˜ŠŁ–HäPĮY³ėķ[æįÖᓿń·——V3°H䑎@¹ŖŒū–ŖXūĄÖ–Ś„½¬:€¶»˜ł‰*ƒęÆ ė^Kń3ą—ĆĻüDŅų i>-ҧ·ŽÓPF†s1Ø_āĻPyżkėÆŁėą7†aųfu]ņņóQ’¶e“åww~}ED„d$hųQįż[Ä: sĖ;™Lļ ¬ÉĢ%XŒd łwö™ųaÆhZ¶¹®ÅwwunŹRX”Įų‡ēYŹFńgŹŗn®Akeu )“HūŠOFēčkŃ“ó{u0jSK5¶[pĒ>œRhםlS×¼Kgį\%ŃŹ2’1Ō„t~—aāK8u‹YfŽ!+@*¹ĒJ>¤JMžæąM3Dæ3̵Ō'‰*\|Ó‘UõŸ kÖzŠėŗdˆm2“#œä7æJŃC¹Œ“ź|ó<ŗŸ‰|O«É«@’ÄŒWĢa»«čoŁėą…ž«aØjz¶.¦3Ęé$Į„)×xÉģ;STŠGMOńƇ¬4Żé~Ægk‚#W;r¹öĶ}aū5ųrī÷Ē–wÆ,ƒIX„wøg#¦zžUJ(ÕR~Ų>4ąÆ‚ō%²²“Pžū+™Ä.Ē…Įž•ēß³ķ'ńC'‡üe¢ŪévŖ…ą™Ń•$R9QŸóĶE/"lmĀæš÷‹üWŖųŅˆvz-†sö $U›žōÆgšÆˆü3oįÓe£É§#A(Fņ±ƒųÖ©ib#.Œå~&^Ļ é÷FIm‘×xŲß+ w®7FÖž)3Sć凎4‡umO’¾!ų"Į¼YāJ÷W‚)”Vū±ą±ė^šÓĀ6ž-šĻ‹nläøžłY•0w0 ĖłĪ•Čr<Ś_„>#¶²ŌP‚ņÖų–ū8¾oœLÅhü<ųćmkĆŚ”Ž"Ų–™r¾OŽRæ0sŽ4ĶT‘ī’³¢ü7ńu÷Š|-ØßĒk+ZĖnĪģ`ēéśWOšöÓĄZ¦­£Ū›[Č>Ņž[¬ćŲ„Ō~ŅĘ.§g;mŗž8·G­!õÆIÓ<%ā ’ŻxH²}bŃ"ŽāĻēu_\ ”)ÜäōVx­īš =X,=„w ×ō? jöwŚķȵHäq,͆Č<`ߚŃČ£Įž<Ā/ÆųŹ-cE›ķ6 Ż€Ž:•õĶ/Ć/jÕ.Ęó‰ “hĶ€¬8€¬Ūõgįæ«ųĒ@¶Åpµyą¼ņ½óō5ļK„ņÓį!!6•łxļ\ӏ@>Bż­| ÷ƝCSŅžՐłžTq’ŃžrO߅~béæ ¼Q˜R¶xo$„ŒIRŲč3N”t°ģx–£g5ōš\ĘmēRwóUVq†G‘ŻXņ3]PÜ ļj×z^»¤]Ł“q˜®T±ĪÜsż+õcĄ"¶ń‹cp©r]ūbµ3”[ŅvĆt“wŽEVń§…įńnƒŖh—[Ć,dǹz?cķ\u¹lĻČĻų2ėĮī£į›Œ\ŻYK÷Š}ķÄž*£!ó¬ä˜æŁī#ÆPƑÓÜtØHź‹?C¾ų²ĆāÆĆH¼=Ŗ“sÆŪ Rū>aŽ3ŪŚ½ž éūCOū~Öń.„ØßŪü7×.†ŸÆƒ'īJ;mWdé•b³Z-éocūŸÕ—N»‚Ē^Š.ļ@Ō KŪ)£!‘цp¤pqŸĖµÕü5×_J×ģŽmę>\Éė\ņÓF]Ŗõ-;ķČ6(ü­~ ’Įz’c;oŽ_³•—ķį]ŽėāĆŅn/Z5Ä·ŚI’]`|Ū Ž2p|s\˜ˆ7ćŗiž:żźčʤOąēŚ#ÅŖ^ŽŪFĶ ĖĶlŲČpƞ;ŠóŁw"nT<Šō śó™M·\cŹ;NwÓ5 vļ掓1ZhYŠ|ō²cfoĻ4UTt}§w—Ļõb)$Mī†Ņ€$€ŗDā1“¹Ė{ū֌#‡|`<¹ŪŠfŌĻEųań?Å’~,ü3ų’šźęźÓ޼KÅņ„Ś×‡dGÕYw‚½ĮÅØģ§ūCųö˜ųšßćwƒu8ī|9ā[¦‘N¶ŗŪóĘć³nVŻMEE”Ōz¶§iŅ\Å*ń’Ć’­^Wā{&¼µKõ·7 Š]&q”e*LםV6cŠ?'>%ü8ŗŠ|_­ų2m6H V[ŻtĪ&‰Ž~B= éčE~X~ÜōæŠ^×µ;M Ņ"<¦—fE­ś\Ū°_JĶ?˜k½6ūK¼¼Ńµ–QŖZM$2 ņv¶3YŅyA·œäν g=BœMĢZt€Ėõ­Īb¾Ų‘@eį#µUH•œ©$óĻրUf/.öĪxōŖ‹Įa“óĮ  1¶Õ#`ńV”Źø÷ąŠkLŠ@’C)#ŚæXąß¶÷ģ­ūVxSĮ÷ŗėYü=×ę p².Ų£”¤>£‘ī)IhzŁž‚ž×,4Ķz;½Iü'¬Ä5 `w"’2уĻĒõøĢ7— g2™ä™Aź=ÅrŌŃd—† q§ŹB«aāaź+ń?ž Mū!čß>]|fÓōxށ­µ×Š/ō›$¶K)LL|Ąš—ōēŒą‹\Ń/ü7āoB’Im&1ĘĢó£ź®3ķ]FŖ}œĒfŻÓƒÖ¢VG\ß -5ø&ÖŅK˜3‘„ś×žéŚ“>Æ>™+I’pĄ¤ĪV¬t×^#}Fņ“•ŚTzżGį\ķīæįļéZ؂å&‚PĢńŽUG'=ńķ[Ā”¬~š|9ńœ>'š¾•āĖ9¢žŹļ(Ļ$ƒŖ‘ŲׄGsrøuiXdjéŒu±ĻRFö™zö·QĶ;óĄ?ŹŗiM­-„ŹIę3|Ū:…­Œć8%ÓaH¶c>•«a¬ZŁłR:™ė‚Å‹4«¼ŗ#ÜĮpń“3nj ¼śWŒÅ¶źåv«äÅqēMŗøŗ0ŗÅĆ"·mtńn$!K¹#š¹Ÿ¶C’sž•Ķźaįøm’:qŅ€;’ h”¶ø¼•v°%‰ĒŹj“Ė›h£³»†XŸ*vžTZj%Ę,āŽ;{†2@ćnŚO·J„žńqøäŃcS¬ŠnģRéķÆ"y~Cą÷Ø“ŻZt½Õ­ŲIĢjdc”ČØ’ŠønyĶŽ“Ø“—·vń1drˆ ĄaQ’d\˶YTŪHGŽ©ŒMK:V•—Hҳ§@q޽:-> 9£'ęk@)jš½ŒŖ 3=ńĶfŪL2ŻŚ•@­ƒ»šŹo”¬.lO>”ØČ±>$aŹmV…Ž›H“LŽTčrAć5 š‰g-¾¤²Ś]ćWcžĘ¹-jÓģ(é ĒĢÅ`Ł“|ĪĆLækń}#‡t;†;ėLÖ“ó¬Ż;¹a.~`:š,tEhvŽšÕ„œO$Q·÷qü5é—z…¤šM ¼ÆaP}óM2®s’Įģ;Ż7•ć$føĖÕŠŽĘóN:tځęU—śT›Ņ–§Žü@šlś„Ž_°¬ådŚ9$jųĶx29"‚Ńš)%ŲBõy=kƒSŲ‹GńTöč>f 8Īz×”ŁI®>€|Kimrtc!‰¤(JīkĀ­»Ō?GLÉĒ[¶”y¾ķ?Sƒ¾ŌÆÆ`»³ŠF (#øÆcų ąS¢k‘xƒ_’5mĆŪEȅĻrsŌśūW/+?²šŲ5#źʚęĮrĶp¢2Œ;²+ćk‚Wś‰WĞž(­„‡Ļ“ĘARrvö¬btÕÉŌ“gڲwķ5į_Łæö‡šg>!xOPńo‡!†H|ĘÓ§lm™QŽ=G¶xÆoż°’i]öŒų£qć_ Xßčž1··œbą`¹@N:U{5cå*šŒ¾¼±N^ā‹/›ißš±ńM›\Üź-ģŠg©īkŲ¼7įČ$™ī Ń`ž¼ęœh£Ŗ®1Z#°–ßM²‰ÖXāD^ÄU¼o„ܲ6Š ć :ӕ‘ 3±ņoŠżmnĪ d,ƒŠUēÕķ›ÄrFže™“1v„c¾•C­T#ŪXg8ėL,Ŗ„±ZQ•ŹI¼„œ•5·gsj±ŗÜĮäx#c tķ\ķt4Žē˜iN4ū«‹£Xķ–V1摂sĢšķHå!P…|W9±ZH&V,HŻķUį,ĪŽ»ŲAļA¢––25?³ŪĢ·D œc5ŗ”ö÷n£¦²<šKŹÆČlAąö§)ņ‘Śü@Öü?ābhścéó[ؽˆ0ņĢ£« Æ>Yd_šĪ””µ:]'T¦Š2åvņ¦Ö®ų×[æ×.­µ‹—Y.į‰ayHł¤“ßųRS4Q9X/ķ±HÆ&qkmdo-Dƒ~=kXČĘ„+˜wšd¤76…#žĮĻjśkąGĘOü;ßįßź2ų·ĄżŻĮŽöēÕ$<ŠŽ6<йo3eϊßtĶrI"šŒw¶š$„ ķŹųń÷u›«™ķŅÜie'¢¦yoŹ›Ht2ī_‘Öų‹Į÷: Dče:uŌ+$NŁł²;~ מx—HytŲī¬XGs%±’§ŌVR‰ėѧcWĆ:„±A½ÄäMŒņz×jf@Į‘žR9śŅ“:Z6āŽÖ8{‘!‰Q›å?Ŏ?\Wšy.»|¹‰äu¬Ģ,mCBgē’=kņåīgF¤ äÖs Dæol¤ŹXŠŁÓōĒ•Äń3ĪĒ€£“MFį`–Õ”™ć‘XŻE]µó!wū4ā"ŹWv>ęA®Ŗ:3‹Jńhųn÷Åž0ų{ńNĒSÉ?‹t‹ŅńK,‡ż"ŪvN;Ž+÷÷į/Ę_üqšÖ‹ā_jń PŌl§!&„Ō{”ÆbV?$šœkN/£>ńV—£k~ KŖź “ÉdöńÄґޅO©5üäčś&„šē^ŸO»†H­EĢŹ2® ąqҦ¬ōŠśœ–¤š»č{ę•{ś+Fģ;ē=kaZGpHé×ėŹŖõ>’Ż‹WGufö¬ˆįś’:W'„É%Ōör±.hĶaĶŠļLķ-īb #mFči×/ E1Ÿ˜żėX3–«źŪ§™s,p/,Ų®3Ē?`²³¼š ʗky„m¼™—pw×­vR>_3I«3Ī>iɦź66Ģ#ņÕ³Āć"¾čÓüss7šyøū;Ø+¼p+®œO­B)•ķōQ`ŗ¶ÜÄĆ'ū#į—Ē?|5ń‰­é·:厉%¬‘Ķq„ĢE֘ų 8ļUĮżk¶‹čĻĶüDįŹœāć}Šż_ž ”ńįg€|7„ŚxCNń÷ˆeAökŻPÉ]§Sæa_Ÿµ?ü[Gń7†­ģž2~É1ų¶Źį1s½Ōp*Ę£bx'Œ×£‹cųąŽ-NXœ-NW}==Qę:’ģĖ’ożµm-o,ō›/ŁĆāUė,0›ʉqŲĪŃ-jy$pvƇ¾:’Į?jŸ„×Rj’³ĒÄ |oųxŃ,‘E­ŹmÆ †ąJøĘ>}Ē9č+øhĖT~Ÿį’×b!•ń:u(ģ§¼£óūK×UŻģ~LüB“ų‹š3ÅPų/ćÆĆĶkį¾¾ĮŠ<̳Z\p|©Ó(ߝMįmz Bņi“«»{»}Łlq^5ZVv?æ2Lņ†6„q8isBZ¦`Ņ5{ye%åU” ąž p~#–{½P°Såzā¹qU¹zŹd†%óĻJŲmJŻ]|©#dĒZ sģsśģ+*Č”CtēŅŗŻ"ö9m‘½±Ę;R±Jš¼O{éi÷>pś(Æńżž‡$¾BBå?‹9ėłž•µ4|¾e^Ēџ³‡ŽäŃ-µ/ ß\Āŗ=ÜĆĖ^ēw×ļ~u÷OĄ„×µ_ZOĆļ ÅoØ>Ŗ²M I EgA–!Ē5źŅGÄā1Ī2?Y?hŲOÄGötńŠā™įoŪŲK;[ČŖm°WīIėŒóӚžK<-£ė:X¼WHžķ'’5xFUČn¹śÖóŠ>o€¼@§œ{gF *råMż„ßĖÓ§ĢśŽĖą’Ä ’…¶“ż6ßXÓ"Ro!·—3A·ļń×éXšV­¦Üų~Kt“I䔫Ē>HdöĒų×H«QÅ]E§½Ī’)CøV8Čąg×+įOųCĘwš·…ōėŪyuĖV"k)€Ąu µÓ…”v~EćǼæ‡+8;J­ æķķ’ņ[žĖ¦Yµ¼*†6‰1÷qŅ»+FА.sÜę½Ź±ždוõ:»}F/²ŗ³Ų÷®WU’Śhć›hĪćģs^„v<Ŗ»™z—Ų®B—B¤tĻj×Õ%µ¼°ó¢|æ÷zb™Ē#‡¶}ĪP󊳵Ödeh4я;:KkU1‰&8BzƒXŚÜˆŃb#ž>µ½ˆ*i—6š K‹¤å˜n&½†MB »;{‹y™¹Ę;VDĖcŌ“;[·Y™ž€pՃ­ŲAa‹D,„‚zŌē“3¬~hĄņק͊ŃX®@%³ži“Ü̹‘Ą'p<}*[x÷ {ÖN=H#ÜÜƹSÓéWm-YšāAč}źµ2„ŗTø'Ør wm”"f>£µ_m5į ę ©Z§s¦+Zə¼œsÖ€9ČŁ­3:”éȬ=OVo1¢—a÷Ŗ†ę »˜±e*ŻxėVą‹*ŽG”­„Z‚ĻĪ“oʜąÓ5{ū'nF°ćėļ@-¢ua¹`ć‘]•‹AÄń#Üj"·…wK)' ±–ꐏSļ/_±‡‰¼o{‰¾/A«xSĀq‘l#R²Ż!ē,ON+÷į€>ųWĀŗVš›Į:„۟’į S3øźūČźNkĖ””ė·ŲZT‘+@÷zĢ™!“Ž“Ūo^kWAµiIÓĖ D¤Œ}y¬Ģ܏EŪb±\AŌgØ4ė½OSŅ05Śä)ŚsŠR5-JWw3µøÜŠzWĪZæĆ’ŁüIŸāƃü=.‹ÆÜĀ`Ō.-e*—`’ 敯F•÷ęūćǟ‹_5{½WāWµŻ^%œI ”›÷+ŽŸ(ōĪ+Äē–5*LP©Ļ+Յ4‘ĻV}I‰p Ų`u¬ö…ŽT,B/~*Ļ:¤ÉZŲä߇­/’ńcŠõėAĪ;c|ʈBńŌqVb¶BĮ%ńšMŒčm“÷Tó$ā 9$ćŁųOĆ÷~ Ōķ¼?į›IüSā äXą“³‰¤bĢxŻ“W;Ųź„÷—ö'’‚xēā5ʙ撌Žõ< ह0č6ņ|÷‹Ōy§Ø’w×ōłšcąēĀ€‡Į< ¤ųSM‹åūR@«$‡ūŻ:ūœŸ„pUŸC±+¬ņyq<³Čo/{±l’kœŸķZ“; hĮåqŒ× · ‘¶—»Ēš«Į¹ÆŌīŁõÆńÆÅxZĄ$“6”¬1*£ļĒC]0‰\Ö>)ųƒńŞ)‚āŹöö]?N_–‚b;śb¼«ĆZ'ˆž jCJŅŁR5łZb 1ĮėZ·`s>‰šēģÅā?ź:M޲֚ö–ćtČNœń€:­}Ćį?YXZ­–˜¶p’ üżk&Č=“Gšµ…Šy øćīć5¬Ž’a žŹ#\ņ2:šqŒĻ$Ó¼{©ź7Śˆmc†s±r¬=½z’†µ[”H-äC(Ļ5§*9äµ>ĆšeŽ›©č–qD¶RŹ«ŗFP sĘå^YńwĮÆdöš‚±†Įó¹T÷’Ļ­2OŸ…ōrö½Ē+zU{Æź‚&»Ņįi> n=;VœĶc§)¬ų—Se”62ŪĖæwīśPi·Ū’öGUn¹j‚ģz¶‰ā[},%œć*ŲŚG8­ų«BžÖ’¼Łƒ AśŅhͶ|ŁÆ„نļž½AŅē;ćdnAėƒķÅmh~3ńϊ“ø,üKmk-äH#b±ä€:`ć?­CŽ…ł ©­ž‹¾Ś['E8Č)ŠIJ–i§ņĢsqŲ©ÅF«B ž+:¾Ÿ5³ ;ø•˜`¢qSZH׳YA3ŚĢ0~fĻėB•‹P,Iä:D·āVܧ¦yĶz|~+ńŽ–ŃĻżĄĘžŖw Ež«uq]Aqū°„P0~•™āŸi’XĆéW7Ā{˹lgPĄ0·{©¦?ćM{ø#¾†dĄt“ōČ®Īųé“2Kiq+g%gÆJĘhR‘¤¤j× ·6ž`9Ēó­8“č­".³¼yv®wl@Ķ[Ä?čљ&HTåĄĒēXšgŽ<7fކ`ܳ”GØ'­„ErYCun.l&ŠéXFCś×įf¹°‘f¾V,ägøĒZV5Ōµā’Z_éĖee»V$¶yĒ@? į“{Ä»Īö]ć“ZĘ6"RčjKÆA„Ēqp^;}Šw¹<;šĻÓukO#\[ŻĒ:ÉČdēu6ŗsłŃš‡ü$š\ ®Ēl~Ėęā=ūל ­®xØkŚ×qM ­Ļ‘²n*I=ėčN94y„:CŹņźM)•£ĄbǦsŠUĶXyÆd‹JiķoV@Ny.”¢Ćŗž\ųŽ=/L2\~ķ·©އé^‡ńļX°šŒ—(:£ę'·BCČģzw®fL·?0µ]cVŽū\ŃõH T9‘UÉ ĻėéS|6Ó¼Eāūæ²Ä©<Šou ųl ‚IⶦsJfļÄQkÄiŚė"bįĘą£Ō{×Ö¾ ńv±†l­Æ$6³¤xœņ+K:}ŽCFńF¹'ˆµļ5‹ØRA°4XTö÷ķ_Kü&ńŻ£źwŗLÉ,óE˜Ŗ‡1éü«)G±>Ģłwö…š?ÄKæŽxžĖB¾·šģ×EÅÄ*Xųnżr8«žń׉|w{£hZ¤CQ†4ˆĘ§ !^}N+ž1¹“t=ƒāi'F‡I±ÓąžÓ…‡œJ §±ķœ×įŻm#S`š|_cŚ£+…,;ńŽjįĀńĪ»Ŗéއy”Msouk wŽ6H=?•{ˆ“Ū‹~Œ5æ•q×3ņccŌ“ė[_AÜĆŃü%į“Ó俚ķ㠀ǂ@Ę@®;\ųg”éugr’Ž¢fXČĮźFą++”£sÓžųEń…u/-ō·²ø !%— ’0ē§N•ēśå¾Ÿdŗ™“·7caŽĖŸZ phńĖ-«­¼p ¹G9Ų~å} šoāķŻ¹“M¾Ņ¦ÓwHbŽżg‚į[‘)[Cßž&h~ńŽŽ¾eœvŚŹB%Žķ2Ą9ĪxƔ>ؚļ‡äš^æu'†õĢø‚ė`Ųżŗ÷āi>Ę|ē†ŚÉāo jZäZ®“b_7ęœŽŁ­ÆųK‡čģ}ń{Ę0]ßišī…cu£“ŻÉ’9#Ó9ÆÆæh Ųė¶qe-¤ńüĖɌć£zVUb9DüuƒĆž:ŃüOwg-½‰“I¶Å²BLØOäu•ģéą~ĻmØĒ"H¬[*qA:¦y·ÄÆ čž&“°Ž+k˜ƒ)dłY—ßüöóõŻī©į=÷Š=ģ–jā„@±eénµŗf°©Ńžļšē@ŅćÓ”ńæ†dÕ-RRkYīcߏ®kīO‡Ž[‹Y "ćeŽĆżVTóõŪ4vgéŸķ>_x§M×ćŌÆōÄwtø˜9,IēŠWĻž ųļÆxX×ōæ‡ģ_ŁÆY¢SÉ|ŌŠ™6×CĮ“}W^Ö|Ga©Å5ĢŚ¢‘=Ģjw–$ńéÖæ{?b$šgŽüŖ¼ztŲQ#•R˜p9 sÅ ]ŁŻžŌž—Ē?tļ jv–W1Į*›i$ą©ó8?ēµyoŒ|geąļ -óC··dF>x“ż£Ž¹āķ”ĻĢo‹S¶‡s©h:væ#,€I¬¤sßž?*ļæf/źŖņx{UՆ”‘“0Ė—ē'Ž·ŽĘŠ=϶5Ė;Ķj d°Yõ k3¶s,±Ž~÷„cųsJŻ °;¦/•RxĶ2%|yšŸ‹SÅ÷ŗ­­•Ūhrgk$‡g˜3|ćįˆ¾9šTCCKfÓļ ŽSŖīä Ž£ń«ŠLĘGŲ֞:»ńLJ“ŻVŅĪK…ˆ;̊G˜xī}+Ż<7ć ¼)¦ŽßXé¶W F© Č_OZrŽ…ÓŌų«Ā¾šż‹µ/C՝ÅüęYįßĀ<ķ^ƒšōļ|:¾&ҵ+ ‰o4Ł`2Kū¢zõéĶAŃŹiß|;i$öĀHYP®å ś×Ś?4m7Ošuö—aÅt1hšØŃąåöā‘œ™ó7Ē­ūXŃ¦Ū 1åhfP Ę=ņ+ćо ¾²ńM„ݵä—Z‘,Ø ~łęe˜¾k7Z<šäż«LVT“%IæZāäš}Ż…ä&+K“ J½×9 Ś:ŸM|3ųńMÕ“ āŚåģ–O.pĀØN7/<}+õgK’?i:Oö„Ż«ŪŽ¢Ź„H2ĆėI£tŗ_ˆ¬ōĶQ$x¦Š|¾É"bWé^ ńŸįģσļ4;[ø4kĻ(ÉnŃI?NüŅå2—cņĒ~ń&‡¬Üé¾ U}B7tĻĶĒR yuĶ ³ffRĶ’ ĒZ²I¾ÄmŦ¤U¼³‘œt>•ö/ģ±ć«xõ½OĆŗ¶ ó=ĄĄm¶“ļWĶ  :|‰ņ$„]Ą+ŠÕŁē™¾R;`+!4|eūMxɂx’N3Å,j¶×ˆ‹øøģ~™$ēė_Ei#Ļ#ɂ˓gwֈli”źž"ėüagŖé©ķ°u†ęŚcņ*1ĮcōėųWŁßü oāķ Oń6!nJϲ¾H¤lėJ}ĶąģĻ鏞ŸūgßžŠ’³üæ>%]ŪĖńOĮq­½»“‡}ķ įgÆŹœz-~¼M-Ž‘:^Y(Č;‡¦„cVZŻGŁžńD’‡ģŽFŁ{”ŌśÕ­Kšļ‰ō@ń„¶£įŻFŅKBŚ`%‰Ō«+)ģA#ń¬čg#üęæą£ß²«ū)žÓŸ> ĒlŃų&y&ń„īĮ,$Ó„rDaR‡+ųzbæ)u;FWY0R:ƒFRtā¦ī֍ķv“oęĪZˆÅU1–ć žµ]Ѧ’ic\ąÖ½]n-³wœ†,[ #īӖ!²YYĆgpFŅł„+ayģ*3µ]WvXö  qÉČQœƒÅi4ć͌©“Ę(*.ʆč„GŽd&qŒć#Ņæ”Ļų7ĻöՓįÆÅ_~ľ8ń-ÕÆ„īīĖ“‘č9ś×2vü“~Ž’®¾ųāūÅVš¾™,ZŒg*[' Ć·ųäWēcųŠ,H£å Zļ”3)ÄÆ%½Ź€ڒ¦„‹Ī¢ā0ļžŻė ē”H¤Q4££ žĒe·Įdżę}:ŠM‰QŽUŹ¢īžxĶT’„.ߜœē° CÖ(¶yĻÆ8§&Bį‹mĻj †ä­>ŠvĘĢ:1RϳiÆyhžN³lÉqhźH1ʌp(;)=OīēžēūeŪ~Ö’³‘šļ[ń›'ŏ"Ihžš²™6žyļ‘ŲW÷-­h$²™āÓÆ-¼F ŁpćpSųJʬ{°GsfŽgšĀõčß́Ļń/Ö³|DŚl‹,•¦Æį}EOŌķåMčQĘÓ½z A‚k†kR?€?ų+ĻģU«~Źæ¼I.™„ßĆąčēkĶ|†}f%S÷įbќó€;_”žÓ’µEŚ#·ĶČäõĘ}ė DG§ųGĘk£źŁZ‹=$· ®•vž)ųKįŸK©·”䆖L`«ą¼)F |ń£xoĘ-£]Ż„ņĆĀŹ£ä“ļļMń=ÉÕuIāū2³q€ĄśWU18žēū4ųŻō-VėįõõÄŲ˜#sƒĒb¤öēł×č6‰tcGµ•hŪkóščŠĪQ±ÜÜŚĆ‘xŖ: ²ŗ„’ŗĒG ĻJ—-LÅ׌ĘÕSiY1×kŽ³ÓŚoܹ,„ē' Åh„÷5tÉu+G–(ŠÜĀIG9«ÖQÉūÜĖk4/½}h—ē½²gżŁyéÅeO©¤RƒĀØ8„'b‰’¶-®oc²w%uŹūūŠĶÕģ&c‹.ģ(Œ®Tw0”°»7!yĻū98æ£iöĖĀć'jÕ\Ų—UŠŁ-„!æyœŒž•‡Ä‰ŗF¶ī `ĢóŪ«$Œrųž,V†³{=®s{ —ŚfQŠIō„ch-;Eń“Ė,Ķfd;ŠŹøū‡ó^įi Śk¶&ź?*0¶`:}h(ĮŌ<;Bź2°J¼ģõę7—:½Ķų€¬†8V'Œz t76m¦¬ń“ēÆßu¬mQä|F>b źk)īn•“= M¾“‡TqśšĖÕē¹Õī]į?g—8ć€ÕŒßCH#Ć’Ś2Ī‘:³7 [ūµcÅÖ×j²‰ Gß5š] VV2¶å+€}ÅqņÜM Ó¶ ’r iČmt:}?[˜Ę°u<ēŠĪ¼Ōī-‹¬r„…nk6­”¬Mķ]v¶Xfm͜äŌ¾!ßs:^D°ī+‚BćŸzLŽ S:kōĀŚÜ7MW ‘lĄtł7ć-^ćS×52ļP’{t—w”WY9ēłWcŠ ĻÕÆõmī ī"öÓ0x™Ißé_yüńŻ®‘¤Oį}R8/4ˈ¶ŪĆ" 7¾Ā¼źW?jš_8śž}EÉŚ3¼ż½·žMk˜æ“6ßQž÷OÓŅŅ"OŹ£…®³įŽ O“Üž`7)ČaڹœQžŠąVĢõū« Ž0aߌ°R[wpVī{ŠĶGSé#yĻŽ”_(ėń2,Įfp <ē­ZŅ/$¼µ†6ÄŃĶ%¹ęćd’g”hŗ&£=Ķ•µ©“{ŽHū£Ö¾ĶŠ|ż—”Ā·Š[Ėq€Ē™F+cāqø„{?ń>=Īņ%ņąŗ“Ž}«ä]e®.M͵„ܾK™AČĶrŌ‘×”ūņ3ō 5³³Č|ӜœžMzĶ“0$*‚2ø”®&ĻŅņź;ŽĘńĻk—p?‹ėO²o9Šą#‚AÖ¶„Yõ“!cÓ<-šžOZź/©•øIHÉRz``’*ā|}šæĘ’ n“oj2ŁxƒĄZ€®£k’.÷į$²+og”ėÓhĪŽ÷*#Œ|ƒÖ£,7={×=Em˜źfk3ŹĖ sóTīéµH*‚¹Üūé›]ʰa4ƒŒąW;sw1>ČÓę=qŹÖRŌē©NĘJčńĄÄyk.xc·Ÿ­sšŽ†Ö6Ęõ%ev9Ļ”–§ėņʑāÉcXÆRź%Y2+ŗ±ń}•ńHIDovĘis3Z8ŻlmO¬Z£łQ89ܧ"¦Žź×hĮr˜9>ų¤zŌ«Üęlnmfø–B@Lž‚·lŚ %S¼ēµs³ÆŚ{YHIJĄø¹ÓmüGeapĖ$Ą Œ`ą²fŽR]Qæ5Åt§€•ƒ] -*° €WFš£{„ܯĦXQ€| ķĻLžTXŚ/CŹģ”ųsRu–_ōyŸ€Ćõź¶ā įóÄū‡ĖƒšiŲ¢‘“Č•˜.qWĢāaĪ9ō­£ 幙n¾A`ē ē•{¤ÉwmŲ+ķ#׊č‰>ĻSҾükšÖæįOƒ“{ˆ1é:Ä1öą±Ā·|{’õŖü/“ĀŗbŻYkšn¹¢]©,Rn+Ž@aŲ֜ŗóržIż†R刪܁Ų4É'•g‰Š‰‘°FsƒXN$ū],vo<#Hø†ipÄcos\½»,ؤŠČ‡>ÅM{RM;NšEVrē¬]ń.¤YČ]¹äg­e(™Üļm£„xśžÕ§gs%Ģ7Q†VFČ#֜ €żrņ}^ö}Fč"ŹēsmP Ÿ\+UXø©­ć+Չć¾?šN‰ćKčo§·6ŗœ Ēń|Œ=Ļ­uæ$Ō~ ųž×Å:5Ćkq¦)ÉT|žAÅt*ŻœÆ•Fsęhś÷\ųć®x÷J–9Ņ­årĻ gÆAķ_2xĪ(.bct”ŽHśŠ%Vēn/5dex~O.8ŅĀÆšīä+(`} ŹŁļS…•ć’® ®sSҧ¹ ©ÄȗpŲŻ÷ŗńScKō >ķõ,lu2/Ž Ī>µŃÄó (źXZҚŌę«.‡æ~ĒŪöšż®>ü%¼§š‚<ŗÖ»ņ’¼ •F=ƒ>ÕükŁ?ą¦ß³§Ćļ~њׁ<aoaugaā:įDlüč8éļ^~ķŁųońmxqEžŸĄéJrūģ¾ī_ü›ŠüĢųmŚŹWÖ­’÷NhķŲ$¹ÜҬņjHņŁ žŁ$ŒģŽĶmŪ]ŖĀ±;co÷ ä’Š·-“GĶnæ9 ‘Š«+J®ŠĖĀ©hb_·øø•ÄXĢ~Ę“k&ļ“ĻJŲ ś¦§„Nš¤0ĀģæN•ŅŲ&ėšIĘøćpČ­£ĖsćQ»Žb™,æJŠźgŗ‹iŚØē“+ŪZÅYÜJI'f•Ō,8©i˜OsÄĢīäqœā¬-ä‹EEŪō©µ“ ‡ĢubÅ dä֔I!ڱ†õØ`iI~ģ×ō®›OF¶E3(“€f”µ¾B w•Éßź bf9 qzPq|ó+Ø9\žU“ +"¼éøgšØīc%cu`•¦įIū£ŖE€ć(›—w­lI³$ėˆPoėķ[QŲGd†ćQž;8ĒcŌśõ‘qō’ĄOŁā’ĒūÅ:>…qįoƒę>·x›ćóĢÉ5ūQū4~Ć_~ywŚ~‰iāo,†IuMF!! čŠF¬[±©÷ΤŚ^™j’š‘CgØہöčŠętķóÄģą=›šą}+$nM§ZhLŒˆnęĘ7žjżŖL“.”;yq’w¤ō3gLŚ›\ā5Ū vląÖ”Ŗ}žA F×[øČüėWčd]iČc[½H3Ć×a®vļS¶™cD³³a“†8Ķ5~†±O©óĒÅXxGD»ƒĀvé4ČŪ䝗ä·Ļ9ćńÆĢ?Ś3ž Éšką?….ģüQā]?ÅæŃŪŪ@Ć8‡OĘŗiRoCXÄžS’hĻŪoā·ķ ćm_Xūuē…|#’”[ŹŹ~ö½|gŽÖ‰U]Į,ķźIäę½ZT¹Q*$Sž]ŽK+;g#­VŁē²±śc„[‘ęՕÉü¶ĘÖ'ķÖ¤A¼cżEģä™" q½‡5r+2éÉ;»VœČ‚ķŽ–īZ92Ҍp+_ʰ·#»ņÖ8Š»³ń€rMg)S¦~°žĒ?šKOŚ+ö„ŸIŌ/ōÉ>ü1iøŌuB²ÜĆĮ;C}Óž5żO~ĖšOߣ£ö9Ń’ĻĄ~ÓĢŹ~tŒgšMtĻ«ō #®¼‡$żŚļ¬4‹[wŖ; cކ…JF½Ģ–²Å‰ćG?NE|ĮńóPMfĘ1d×Zq.V;£Ž;Šfi”5æ čé¤ÉwÄ0ŹxÜqŸQõ®įĒ‹,ޱ4:Uō77;#DpĮˆź¦'é ųėÄ>¾M^ŅåE±<%xjé|_ń“ž= [Üiė ¦pĄ`µ!ū3ēČ&žI”FƒÅvžŽ;ų.Gŗcņ‘Žžōī\iŒ¾FÓm®RXQįŚTxś×†ÉāK>łć”"@Ģp1ŠRéń+’ˆņ䍤vęŗ8ćŗŌ wŽą9ŻĪŚ ¦ŠxvśĘö9Đlcóbŗ‹˜u,$ÖPyŖü7°õ •¾…MG^»¾ņ-gQ#*‚9ĄéšŸĀ¾,²Ńõ um6‹sņ²Č:ēøō5ƒ:!¹ÜųļÄUö— Db`­ņŒ ČæZįtĻi7:\ńJ‚BA …ļQŹīhŁĖÅq+Ė#[ÄgU# Ī+©Ō¼Aq=ŠÅxŽl*:ĪŽÜU§cM.aöW….!#•'W"ŦŻIå"“ø’9N{׍x³MÖ%Öģõ éeӓ"āī=Aõ gI§XyؒŪ3;.7)<­}įεKųܕ°~é÷§ŹÉ‘ČųēNÓ„ŗW…ÄS)9Ą7Ö¼õm 3$ā3µNXŽ”Jęlџ]’ŁSʟĖRyę±uhķēŠK©'…€\˜sRIäQ¶Ū†‘n ž0w b­µļŪ®!`Tŗ6üé“=‘įŸCTžÉHu5l¼ŹŲ϶ŚålʞŽĖ nN1Ų ŌūCds^0Ō“GŒ]Śięņ"ŲĀņTzÖĆ߉> Õõɼ9ؽü:Įā›7zSķUģkģ›W=JūRŽ‘-ć;†Ž®'Pŗ°žõŅŒ2’2qĶh„s–P±¶Ś<©o Ģ38ugŠÅ¼˜Ć„‚äž*› ĒŚ·Š©ņ7DĆ©^•U¬ķ,Lrcü8ŒÖ¦ŹE{›vĮh”ī7µAaifÓ“—6ń#1ūäu5e-Š €qĄėSZé°(o-Ā+VŠŲĪOSFÓO·ūK™½øVäVöŹ$!c‘Ž•„śBX#µ†k‹x£sÉۊåōŁbæ»Ā ž@ !¦‰u„·¹hӖN1\śŻķ¼;ž3 899÷®vfٽ“DĆ0ĒWō®~}AšFX·z#øµķ”,(8ĪīµŠBŽR‚õÖķzÕÜhņ©5é.5C§™ŒŖ€`¹äšŌ¶-®\8Ž]ē½e)ģė]1¤2K§³6īN†¤‘/#ŚƒĪŻĒµd§©›g2Öø2æŠ5}-|¹ߑū’xƖģ’hķæ^äx­€‡G<ž5Šæ1Hė|q¢č^/°±×ö$ś“Yv{tė^ įĖWEńœĶ @ķv b" ņ0=sĒ^µ¬%Ż½–„ā+‰µ;­!ōoŽd(fHö5×jŽÖöʆB3 zÕ·c¬sö¶÷+nu?“³¤x?u½ėŠü ām/E×aÖnVxdcVˆ Ÿ@}³Y{ü-ÄÖ­ē°vÉoøA‘ån¹õ<טų_Āv:f·®^\YAa;§›gꐞ@öėšQVĪü|ž$š¦·gØÜĻ,ö·ĮP”ä $üß­t¶ŗ=óO„ŚĀ°Ćē²±•ÉłTśWXƒÄ? µ€Ķu}%ر:œķ8ē<ūūW°h2µšwĆ)ü1õ)d³…8üiJWŠŸ¦“Õ|Cā;vžÕnŪPÜגx×Ɨ/āWŅākYåȌ…l†=ˆÅ FKc§ų"v¹Ó'¶‡ķö𹑦»&ü°öśV†š.µ ±‘7˜xĒ5LźŒl~˜~Ą>µ—Uń>5Ō„³YAP·*§FOCßņÆŃ+Ÿx3įķŻĒ…|OāØąŃo"’KS4€™[i(Ŗ9®zĢÖżĢÆčķwń-”Ӓ3§Ø._iēž+#Ēž-}Ņ-&yćE݁Šr}*Źvø¤yžf³ĒĪ>f[k’ÆĻ#óÅ{†—š+Rµƒ\ŠM>ŹļIš4™ćĄČć×<žk²&NF4-„ü,±Ó-5mäiRČR5 K=óÉÅz’€<Æ]kÖŚw…¼=q&‘9ę劍{ąśŅ‘¤f}EsšæVńw†|@|C”Ig£Č¾Iŗ+øōķžų‡ńoįL? ütśj‘<§i(LĖ’p[Ž•œ¶6„®ģŒ‡^+Ņ>üEū?t©­ŹyQ“I/nēŠżŪż‘“[ķ N’šŁĖiiØ~żwGµŽyŃ̬)Ó={ö—ųd¾µšōśT£Q°ŗW7ppėį•Ē~kåüeš~«įm6-"ÓP[‹xX]y§~’p1ĒzåīĢĶŠ:-ŗ¼ń—0¼¼EŽ…:ćėĻé_6č>2×>ų’ŅśŚņhZ;•‘nŒąŒwėh++EŸmxWö·¾šĪ¹st¶Ķ‡5٩Ǹ|ćGėī+é |išF©„ßjś=ż¤‹¼I+ķ`ÄōĻNµ¢Éœ.|›ā’‰ŚÜzIMRhõA$ģźÉ„dž½ø_xŁ|E£éWÖƝ ‚Z%0wõ§ĖmĢŻœ—Ęw·ž{k‹­%„˜‡ ¼ó‚:t®Ļį’Ä-R&“N¼ø–DI)Üz¾m T¬hxƒÄś„,­é¢Ž?!mBŠZÆļ5<ē[²Ž_ä]ąr~Vļž ¼gl$¹R‚‚ŅXÖN:#ōda؃Į­){Ö9'±å³3!>h$ŠØrrWvļOė]f Ų]äsĶWŪ– ų۟JĢ*Ćę;mb0x FAr>śü½:ÓHiЉ&ę`SĻ®Ŗ¼‰“÷”šOZŁFĆ4! C1p;ō­Ķ/Ä~,ųā? üNš%ųŅ<_ ßĆ©é×P€%ŠhÜ0Éō8Ę*$µ7¦¦üŪö¹šßķū.|/ųńįū˵Ė(ģŽ’‚vžÕŗ§ģūXųÅös<~ŌŌ`¶ć ōÉÉz’Fo…Ž7Ńüwo£ų£ĆWF_xšŲ]Ū3>ÉuĘäĘxäż953;¢Ļošö²÷v÷ŗ}ņ”Öld(ŹŻY;ųZŗ–öė} Ęė+Õł‘¹ޣҼśĖP?9æą¦Ÿ²½Ÿķ'ū5ųžFÓdŌ•ģ66Meš˜Ć8#Ž)(Ų Kµ’Śwub¤q‘Ž£³‘ēēŸā©—XēuŁē$¶Öµ½Õ…¼røhĢŠirģ#X Ė[?1ļųW_mā(ķ­ČøŽ;«iåV\äŠUŹSG¢M<×±ŁEk,Ŗ>@:IµÉ*—>ļ(Āņ¤Ž°Eš܇ĮäÅi$€*;ÖksōL¾Ke „œŽÕJXü‰Ėä+5vRßSź(SøĻüP½ųićMR?i’_ų/U¶ķ,@³[ĖŁˆüü+Óüć9u†ŗ§‡“­NBŁīāŗŠŻ—±üYģqŠźUNÅ£,>ƒ±«+2‡+!8śW^JĒU:VŲĒÕ®6\¦`F4Ńpd@é\&ŽĢ×Ņä·óįŖĶoøĮäj‚ūģÖ×÷ §æ›mø˜÷«ļK™ls֎…I/£B<ÖHyü+Óōß|8‹K“oŻi:‚ڰó¬‚|ņÄ9=$ōõ­)„}OĪųÖ„xa×Õęßōžóčx’fßų&gĒ é·~ń^»šŸĘó¤€Ļgq-¼©;ĻXÜ8<ōZł'ĒßšMOŚoį•»Žų?ĚoĒ=,ŹF›s§Ū…–źį, 6:ņGk¢xu-b~?—qī?UŠĶc¢Ś_ēÜł Ęķń#௉ķ<-ń§įē‹žj—yöļ©[ŅŽ— ʜzf»ļx×IŌō™ī¢ŌmĻ ;ž•Å:..ĢżĻ"ā 8ŗj­ sE”ō»ŻęXüÕ+’AϽzĄä”wSĻ\Ö‰öTk\źoŠZŚ„ŲĒ=~µäž#Ž}[X°Ö¬ęk}FŲŽ@21čGqŠĶIض}/į?6–ķ”%žIććN1NBęihb^hķ¤ź—śUÅÕµŪ[Źń "l¬ Z»g}=ƒH-f’-źQ€<0÷„n†°™ĄųĖJ:‚[żŪŹ [ų~•Ež=>Ų[N …ę¹ŽēJŲŅ–e¹ÜŃ)$zwŖ–÷8s¹žõ šĮō4/ „«ž!­Ch·)j‘Ę0l×M&=oąĆ ühńķĻĆżOĘ~ ń$–o6–ņʬ.eS÷9Ē×MyļĘ‡æ¾ź2iž;¼Ó¦‚+–µ2Ł–X÷† c^œh/gķׯé÷ė÷Œā:4ńė5fÕÓł½<¶žŗćčŸhkEI—Ī…É ŸJܲ¶†Īge… ž£k–Q±źs\ĆńĘ£„éö‘ŗ!ĘKä’*ŵ·»·‚‹«vŠ9dČąŠĀq:"™Ģų×NŌµm8Ia"ĘźŹ]@ūŹ;V…ēņ”t Źū=fkģĻV“ž$L!ż+[ĢŪ‚ mśŃ`ŒlĶUŒI~c½bĶlģ­P’±Ś8 Ź§SĻ`7GR’)®ĀAČźs]ƒYG4* ŲķI³œ·§«Ś†‰WjLÖ­ »±˜³ʤę„Ķi÷8ż™h_20ļ]œ2Jžh¦u7bŪŹ"‘Pž3ė[¶RF’Ę^5žĆž!A.}Ž%’/ų’õ,D¢ÕĖ2¹0&ŗÅ»ūDK“n•½#мģ~’Į/¾ MšÓö•ń‰SÉY®|9ö8T¶ !÷’?ļ‘\ĻķāŻ_āgĘĻxÆÄ· s­ŻŹ68X—€£Ó•éF~āGāŁ–BæÖ)fĻž}(/ü ¶|Ā’ õFų”ųćĀöv·Ć'üL` ž²2xōĒå_WčļżŸ­¬Ś|³’gŹ*}łü+ŖœøšéMŸai­eÆh‘@[]BńyRE ĪWĶ|[ćφš—…5‹‰ō³o.žXÉ–ßtÓĀ“q8šx…ĪÓŲ‚ĻÄw!Ņ/ü3®\¢ŗm8Ś@Ą?^j‡Ć’?ĆĶVŽĻ[“‹Äzˉ!7 üqÜV•F¦źP‰ō/ōįÖ¦žń'Āt[# F¹²”-ņĆpø’ ōĻŁžcĀßµOĄ/iri1źļqqg$ '°KV‹ ü_Ä=­éĖß²?8ā—’ Õ©Wė'čÓG…žÜzT>żÆ>(é6ŃĻ‘©yZĢ1N9Y„¾ ģE±ŌYčÉØĶ|«ō/Ó§­b¶štFęŽ8Ų>Žõ­-ÅŹ®|cūLIaā_YĮ¤Ü%ō„…9'åą‘õÆŠōåŌõ[O„s=ŽQ@ŚøĮjś"v±žrż!³?mÄÕ”ĶuÆ/u6æš&žgźĆ­ųĆ^Ńf‘ęöėĢ:ąuÆd¶»ŽŽ5ąm§„{V?ž+KVgŽjžY&3¼ žõJ=`R7ŹĆЌņ(<šJŗŠX ’Żp{Ö4^I*ņ•Ą= ­#šnĒm¦ÜG4;FŅG¬]R ą8śō­ NŸKÓģÕ.±²^AÉŖļoȚrčN nf(šµˆ•åŚµhZ­łl6FÓŽµS3l”=ÄlL¹Ś§Øō„gU„mqŽ Ō„.Ę2܎Žįbg|ĄŹ¢iwn Ļī)óœņ܋Ģņó‘‘VV8ēĆmǰ©”®I2Y|»±øƒśUøŁ£2ŒTé®6ąą`VU߉šhšķ=i…6ŗķ*°gĖq‘ŲSn£»’Ž)šA4R1ĘŻĒ­#>qŠZV S§ōó`‹!2…Ūņ‘ėļL‚ŚĘɍ“³Z–vÆ iX(rr8֟34ŒONųmą|Xń•įĻ…žŌµżNāqœ!"ŚS$„`Öæ`æg’ų'…‚.ģ¼Wń¦ļIųāUI‘"чfź8üsYJ]v?Nü3”ź:*.›ŖiÖ~šź8k{X×j"śżk±ń7‰uϱ6“ąM9Vf\ ‚0±öÉĒ_„d Ĺ׆„°“FńvøŚŽŗĖ—“nÕ.{č=+½Óōū«„ņVi-­ŽzqŠ ™nDµ±·0nóe«Uv¹Ž$J­Ųv¬ęśŒ •žźUGs ƒŽ*Ā\›\Åj<ĀxÜŽµ™¬{œ_о!A£iÓFń®©sƒ”ŒēĖ=>lWĄŸæiļ|1ŃīüMńCĒś.‘¢Į— cęāB€ņŌ“]ąZ?™?Ūž %揋²źžųc'…ü&Øßø)-äyŪōCė_ŠZœóė³ŻĻ®^Ļ­ŻÜČÓO4ģK3“ōÆR•5ɕK#{‚¬#‰6ʃhöŖØĘUpkw#‚„AébIĘZw•„m Æ=ŖiH’ŁKHžaī{Uę·ŽĒqžŌ–£³2Ø@3ž+¢²Ó¼iwÅÓ‚Ķ‚M ›R…Ļ®fo؟ö„ż­ü]‡¾ųPƒCUjÖļPÅŒōF#“_Õ7ģu’`ųū2­‡~/ĆańOāčŁ:­ŅīŠŃńŁ@ük’­^‡t)Ÿ±’*ik„Ėca¤iQ`$F>µ‹s‡·³ƒ88ÉĮ9b‰±IJüČMrš„ō¶ņ”‹¦A®YK Ņ¹ƒyāˆmŚŅ?1•戎+‚S<7É=ń½Ī৬~ÕĶ)\ŁFÅŪh$!®'Tˆqjņ/xÅu3Ł( Ÿ¾A§N=J±å^*ųcgg&e[»Ņ§äśWÉ>'ų¼āuYŪģH ¶ŅqŠķ§L>bńĻĒ„†)aÓ#·’ąBXä>•|·yq®xŽźMNU¹–_EbŹæA]*=LfśŚWĆķ{ƚĆ[AÕ½ŗ&É !‰éƒ_f|&żž’±^ ;5&™€&_¼G~“™ښĮuKsó*ĘHgu®ļEŠl|8ķl‘Ę«ž„pi ČźmmģīÆIVņ7géW®mŤ¾L¬Ź®M3'"Ōŗj4Ał*wW©GįĖɄo48Īõ#‘B§ āi:¦uf“‘ƒ‚~•šī‹šr x¾ohś®„ir®XĀļņ8=A\čģ7^(»†xāŌēņ!rŠO„v: č×_dšā6žįĻ=©7acÖżÓiź‹åī9śÕ>źņÓQI#Ÿuøå‚œf¢RčG9ÖxŖūE¹ŠŒ°\I=ęį˜Ąū£üā¾zÕķ/µmFĆNø¹XŪk)Lg™©RdŲĘKmnęHÖф†62cŸĪ­xsĒvæŚ×žŅTŌć|dķ&“L‰#Ż-óŚ³-“_ _鶓^jz­ž°łNčdĄū¤g‚~•”ž¢P>o½¼6wש™7#hĄWY¦OzēŽhßŗuœ¶/”ō{}}%DV>l’®ģ™6;£Ē¹AĆzē•ś:=M-/D°ÕŁ]æČŽæĆ^1®|0Nń…¦«§:¼JłŚ€†gĻłā¹^ēTgcŃæµģ5©$°·Ž ˜—k)'$×“Qé\E}$2Ū„Ć3 6:WU&ķcžlźõWæ°TG€¬Gö5Čj&W0Č«…ĪĶu¦cȈ¾Ś±Ä Bˆ£®F3\dśu¶æ«ŪEix"rĮ@IqÉ«öwÜ„ĒCā‡ś•°ˆźq¤Œ0„Ćš®?Jšę”¤[ÉaØ^I©³Ū!`J‚sŽ=)JŠč„¶«é±Ę<ło,Ćd»ņWŚ»}2Ļķš²‰”ŽU9ŚĻ‚jmm ¦ČēˆŪł›\G§SY6z…ĢņÜB©q‰ƒ¾E![č{ŠHĖ›ū÷+^KH[œž1[:TMeø«(rC‘@Ž_RƒĶžāQ3ŗ±įaEcg+“Eˆ}ĮˆĻzĮŽĘÕ֐óĀÆ²+#½sŗ…õ†—2„ņžčõƒ‡ŽŌOFŠ,ōė»HiDķ÷·:v¦I0†āH’UņIć·D•®Ś&'U“#8=ė›–I-óöe;s÷AĘ)—\ē®üg-½Š²‘š)\ķOŽü+wķÖ«fϼn§cÖ¢hčŒL+‹˜o¢ņRņkI•ącw·5ČźVó5Ē•ē’=zĀK°Mō54{‘bā…Ž<}Ü÷ÆB‰HcŻv1#nī3M# ¾†”—“" _0J¬r2;zŚ“‡ĪJ#«h#2K­*Ę™į’åĮo<ę¹Ų‘gVP{ŒVšS>sY ÓcUeŗĆœ2ō5Ęk›Ō)Š@é»õ5”Ŗ9%–ĆF»–īaŠķḖĖÖī‘­Ļ-Č{aĢ9þԤ”IüO®ź76·'ģń;Ź)ĮWĪŗ®§s.ł’ŅīR¹;rHģg/!ņŒÓ“KkØ-õV}.ņQ»2Æ)ģ*Ä»R¶ÖVž ‹mæ)\īŻXJ]āH«ā-*ģ\-ģńĀŲłAü¾•Üi·:†£2Ngłˆ±ąŅR%ĄėuĶ ZŪ[¶‘qn%łY²>÷جŃ{9d–ŪåVé[%ŠQq/5;člęŒI%»ķ$€~ļį\ʍw«]j;/ōōžĒ?,¤ä±śV’cKŸ%¤[¢ŪʱHLqō­ŻM¶{`&6é#uzŹĄŁJd}>ö8­n•pŲyÅt—“­ÕŖs,„|Üz֑Ķ'Ōžküy-–§Ø[Ē„1“KøU%L2g!F;q]&‡尊9ķ™fĘcÜ}kŻ<ŲFۜŸŲu›Ū\-”cĪ Ī9ķLśƒX¾HVÖu KJ…“ķBG·ø—{߀äu®ÆBø¾ŗŠ“Ūčć« ,ääRh\§Im¬ÜYČŃApöw摟¼? ģ4’jK„źSjwMsŖE$Æ×żė"Y埈üaćKė ci>Ė ĄČ× w,`ņÆyŻDšTŃĆlŁV5vÜLŽ•\€‘’ OZ—U–×\¾Oģéē6q‚qŠtļXž8ÕgÓŹ\馄—DØ)_O”«P-Sīy¼^0Öo.ÅĀ DŚKķ$^sŖė:õ†³k­iә®V\üņP¹üyit*1±ōžƒ¬4qZų‡Oŗś¢ÄĀIļeŗąūŅÜźV$‚īėZyŸW]ÜłŗöéRь×DyLZ&Æ)¼æŽ‚)‹åq–_ņkļKm¬xc_¼µĢZc7“ĆŽ©)«™ŠxšūūRŹł¤ŠÉ¤U?/ŽŻÓéĶ}3.…­Åį9l­ķå½Ó5łSKœ©ūrj®Ž˜Óč Õ­µżSm"*łm®OĖA^ŪšsZ:Ō÷šNl æņ˜0œd”ą’œ4=‹įOķ>ń4{øÅ…Į”$Q€Hŗą‚+ōÖÅ_ćv•ž½”ź6-¦9h®0Xś©ĻNæäVsõ2žšžaā{įŸĆĶrŽĖÅģzl³”xärv«ēFńWÿВä°æ·¶H×h•™r„{ ŠqOR-}Ohń¼šŁ#Õ|3KhćĄ0ĘH³ż*ē†>%Zj°]ź3ikÖ5HÜątż+dgĖ©ņķ Æü@ŠĘYį‚iōd3ł±Ē½“'œ{qҾے‚_i~!ń÷†u&ÖķŻ­““<%󐤚HõēōoshDżXų£ØYx+ĀsߌģąS0“„åœF@īxÆĪH4æ|SŗŌ¼_u„„¶¬ŽAG„yŠ“ČķĒ?qß[•nĒ‹źß’d}gdžÓǧFŅ|EbæfäC…#“Å}¹gū\~Ģ:ĆĶ%“éW÷šp˜,ØzõćҵŠm܈uæüCŌ­u„æ²Ötūųƒ+Ä~š ņ>„šų{ćöGĆßjŚmø…Ž"JÄÄ|ČGčE)EģgcćV_é÷چ“$mn²’=Ö¼—ā¶« ^i6Kż–ŚĢRćķ/T’}żėX¦”hĪ{įǃī¼eÆéš Ü÷†Ą‘$²yGk żÜōϵ}“ćĻŁ$Ūź:ü ŗ»^ZI4±Ķ/zŒ/Njļc]e³ų©xsįŬ:ģvŚŌ¹Ś²D?w·²œœWx›Āž’am¤\XiœlGw>ųż©sĻ<Ó¼5cyw:Ģ’ŪĘäœććŠ×µ|6ų)£_Kc;j–‘Y“ēēr·ūTĢÜśgų+öeš-ꄦZi‘Ām„™PÜ<[Ęļ_ņknūįG†Ž£Æ|?Ö,“éī왤†]€Įć§cŠLņɼm§EāM;Įó°µŌ ÷&Šź ć#æZ÷½ÄĀ×bŪéX˜'/ƒó‘žEqīxgčFęÖĪśÕ®$·š@Ē “““œążkęOų‚ ½BļNŗ·[äPß#§õśŠdŃjtŅ5PŚH¶·q0(€Ą:ī 2[YŤϋ”"ģłĻw j7=ƒĆž&Ņ>諯jvV’Łöˆ0®Ōś įhų[āLZ&„o`ŗvžš,‰åp„€ūß­ F,ā|®·ƒšö=COÖl,R5’¦LFģ{n5ŌKć)u„Öµ].źēķ1ʚ.Är=8Ÿ2ų²óÅ<±Éˆ“–d–Ż“wnƒÓØē޾~Ō¼1«ŪG"jZmż›pKH˜ ķš eǐźZ?Ł%›le" ~lēuduĢ‘øĘp}«X>…CcģŸŁ»āŌx[PÕŽāĶ„-oŽ„œp§ų×腤ņ[ģ £ m ƒĘ=jfй½{ ²Z‰š >SؚłćēĆū­sĆcÄ|“¾”§±y`Ē 뛨”-Oƒ-ętyD'*~o^ v¾ń®©šūŚ?‹ō’=ŽņęŽ<|ńūż1ZrźvÓ}ŗ’hM.ÓĘžšßÄ-ŌāŠvRG'Ž ?_Ń'ü§öĮƒā§Į~ʾ9ńŸ}㟠b}!‹bK‹2N^ūySQéSģōhź‹ŠżČ‰ŅŽUņœ¬‹÷H<ƒ_Yü>ńU¾Æ ÅÕŚ’h@6¾ž¤c­s8±Iuxąļķ ā«/ 5×ü+?3x‹CżÖĶåbŅ[«Ž0®[ØE(Ė[8Ÿ“:’ÅÓĘčŽjLɂäzVOšČXˆĆ; ¼ń]Ų䨖Ā+?ļs6=z}*¢ļgT!·fØĀĶhi7īöŒ™ę”!ćf †žTFŒĀPČĖĒ<ō©mn<ōfŲČw‚=Zµ&2āĪNX”ĘsÅhŲ1Y¤›rmŚc'ƒųUKc¢ żĆ’‚žŚŃ~Źßµ”<}mkš‡āLg·)H4ŻI3åõćt™ŪŲī*sÅ}Ņ_=õŒÖ°5ݹ0é$de\{Aükž“nŽ‹œT¶2ټ· Į *ŹGLŠł7ćĒĀč|kįMKKŠO±k6²®£„\ōjvč@ž~µęIY”·?=u[Ä[Čõ}sż"+Äm?Xµ8 ŗŁ^äsßü×’ĮK’gŸ‡ž,oiViy2ļ¹{qŸōFYļ€GÓš­)0qč~IĖ$2¬v8ŽæīÕiĢjĖ%†9ņ<Ō'8&µHΤluž»³2O=ƔBøAļWÆä³”'w<ڶHĘĘ,WŸdȇi稫vśė™@v`ÜzÓFmÜ(fą~õ]4£"ؘg8ķ@ɗ°9GP>^O×Id—Ń[ż™XķLį@ Ń@NJk¢ĪÓ&åĪĒJÜÓ“Ų5„I]-Վ c  \‡+”Żizō¾x7éŹ:ƒ“Ņß]M4b1Dgž{ShjLlcŪsŒ{WŖčV[éĖxÖ’j‰FyŪH³›Õn-noQ­Åż+b{!„Ć|·±Hē†Nā‚ąõ8ĶA p7Åėžžõ±¦N÷ŠŅR%ĪzōØØjzcÄnt™ ²;mUls^vŚuĖM!ņ FķY γNօ®Ÿs€dĒĖĒz擎ޢ%ŽįäV`¢ :ĮŖ‰Ós\Ōž÷Oh˜ŗJAčqÖ¹+Iu {dŽišT^2MSJŚ„˜ŻH"aóĶnŁĀ"EŠdżŁ8ļnõÉPąĄįZ²;½#A¶ÓģȆ(žÕŠ‚=k™ÕtŪvi£6³g#®CļņŹf.}&ü"³‡Ošö«©5“Kŗ‘ĆĮnßīZé£_–ZŸĒ<- ĻéEŚkT’Æ#čm7öėŃ>'éxGö¼ųOįˆi<¶Ō-¬Õ¤²Vćy‰³œÕpFkĶü_’sųQń‹H~ĮŸ-t›‹Ó.‡Ø\›B“µAd]†?…z)Ę¢Ōžsuó.ĘŚüŌe®»?ņkšō?=~>~Å?¶§ģs§ükų3qØ|8I–:ńŸ‡ķ4„Ō-×Ķ“Œw®^,uhf 'ŚWīZę=OŠ0qs‡14(½“µū°Ü‡jpqé^Õšā$>ųÕš›ā>«c6«‡õøÆ&TnD$|’)éķ[Ņ™ĖžäÅa*ŃŪž-}é£īæų,7€tAšö”ųvŚ^µį»żŚN©5®Ņņ¤‹ŗ Nx!Ō÷`×ēWĮ»1µ‹=/RĆlģBv§z쮯''Ōü7ĮZU§ĀQĮāŖRs¦Óņn߃GßV³‡†’iρße?ˆ3i×ZEōsj> Ōg~™|78ŚßƵŽģ eKÆń_ĪĻ‚müqš{ĒŽ/ųńFŚćKńæ†ÆŸN½Š@@™ĀJ ĘäeĆAbø«Āč3ūęšf¹—ÉŁžkī>œI|„.¬®ž£k*vHoa˜¬mŽA®NDN©ŚčśĀ~ šg‹žųŠž5‹ōŲ之ęf@¹#šéė\GģaāK_ų—Ē’ ¼FdVŌmŚXÖC÷±‘€?Ł ÖüØę«_Żg%‘Āų³į·ō4½šv %FrڬN<÷æĪkĘ|? „üOŖxwNæŗ½Ń”ō9f?3FIĒåŠĶ®†r~ź’ź}§N’Ś£ĖcŸzói'O½‡VIµ™°Üp‡ŽZ[ŁźAæŽÕ—w Ļ¦H$“’i ģ:ā”ÄgCa-Ģ‘søŹxŖm}4½Hčń.$B2N=1]Xz-³Åā ó–`źc±Rå§v’®­č¼Ļ,Š’fūļŲI«kž"‚6÷Ė .Łžļ'’×^©įƄ> š„–—zm’5ņ!BιŪō&¾› JČ’&8£<–aŽ­Œ—ü¼”„÷¶ĻU¶A€Ī1 ÅjŲ†¼»ŽŁ²TZō;Ÿ'ZgQsą[Ö·³+äœy®+T±’ŹCńāaĒLsV•Ž ˜77 Ės ®nk—»‰Jj‡E£jļk$NĒ|dąŒō÷®ŽīQyūĄÓŠŠf\¶ł )8?­A,[‹e’AĒJ ×w/>¼Ör4®Nģm<Ž("{ÉjŅ0vż)c·0©.ƒ2WiY .œ~q­¦‘”œūō«“ģc-Ķ;-6idŽ)pGZ¹&œÖ#I÷Ī}* ; ŹŹśŽHä+ø ę°µ( ±¬ÅU‡#ЊÉ'p<óPŌß+GŒ‘Ó ¬³ię$’|½xļZ€ß°ż £BFEj k‹hvļ;1ŒUŹ63”;ōčēXJž=« ›@œŹ7—8ėP8ǹ£o¤Ī/ģ“;MŌş²žųsąÆųB|9šfŸį6Oaf$rY˜w&»8­ķ|9n"²…õ L”śšČ™H‡Nšo‰|O,zŽ5ŠĶ_tV±Ą^ĮĻŠW®¬vŗ=¬QXZFaM|Ē1%Ž—=ÄŖ ’Hą­Gs؋@\܈Ōq“ńI½ Q(Ix/ā(ŖŃäżćŽ„+£|žlć°ķX ĄąüAā}?DCw«Žy0”łUFXżxWŽ~:ųb×G¾ŸTŌaŠ4EĻśD󙾌xėjp6Œē7öÅ’‚ĮiźREÄĄŪÖlvIj€&{d×,„Ō"īcßėVŚc¤m"‰_€Bk‡»ŗū[Oü‹$˜Čć5É7ŠÖźqśĘ¤- Fį‘Iłˆė^}sā;xó"2y£ƒķY„} R<«Å¾.&vpĶ»!Aé^Øųśy¾×:¬ZjØ,ŽcmČ™®ŗp5Œ{Ÿ|GųĒi”ź&}żŲ|<§Š×Ąæ>4ź—Zō10ŗ½y„ Į ĄžĆŚ»#†rŽ¦Īą_x£ģļ XDŃ0Žļ8aōÆ“~|·Ń#KŪ»¹ī®ä!žŽAŗ4=ĄŖrčdą}Sį„Ö‘KöØ#·„īŻ“ÆZ÷mĆKŃ°ŅĄ²øžąĘ I›‹Fž“©\\Ļqh‘Ę¶äøėÖ®ė>¼ū,—"2AČ\u Ā^g–ź‘ŻEqi2Ē*2šH=kæŅ¤ŲŽ+ɐÜ6Īy&‚YŠźÖėmjmKÄ`ڼ£Ių}j÷śž¼Ŗn^5ąēęDŅ€<ÓŖ“a.4yNŠyeųoÆå^{«Ēs}nņ]Yŧźƒ*Y9SééJR±ŗfM„¢^irĮ©ŪĮwt|ÜķR;Td†¶Få'_»Žõ”„rÆŠ’ĀĀīTūbFf˜“żJr6‰­a;3óqŠ‘h:n·©źI“gę±^橋’éÓ[AŗÅŒLūę©!ót>Wń妔¬éžV™w6Ÿ$ry†Hś°ō>Õēž ŠōėO-žŗ>Õ/;_ĮˆĒZÖö*/¹ėbłņOO 0ĄÜs^Eā?„ß|C­EŖčž!X¢¶KiŠ•ĒQÅfźV=ĒĆöwÓ-u öļ€ ŽA#½wéŁÄR[ļLõĒZƒ2ŌĖnmVa`ąa²+š}/RŠī‹g"5įŠ÷Ōy¢žĶÕŻFķƒņō”õ >k‡‰ʝ×ėT–¤ŹV:4Ėo°ZĖ øĪ[>µę> šÖCEhģĄ1ŹśƒUČ;é–of *Ļ1c޽>•y,Zāł-nÄńģ勩ö”C¹”™­¬éÉkqi÷É*0Rß'Ż=ĒóÆYÓRkū’›hQĪ3Zq~0ƒÅv6ė„ ĢĢ üKķ^xŗ‰“Õ·(‰˜{(\]]^1uŒI/z×·²Ā²Ø<žk9ˆ“MÓµŒ÷1Ęd“݃žŽāŗc‘Ś5äēÆ.ąCö;»2Ķ'h鷑V£šģ÷62ė`,£i±“ŸQųQfÉæC‚mJÖ Ło¦ &HĘrMsŚŻęmm$Š\ż–V!cŸšŽVZņ<‚Öī;›‡“Pø‚źč1mŪqŗ½2=R ż2ĒNk‰ćŹłˆ9lž†³’е>åŁt€¶2Goø=Ošn›y©Hf¶øŽtTmŖ¬ 8¬¬'+ģtVŹ-¶Nnž™Ę).’y„EyT»‰čk>A6Ī9|>lui&2£LĆqtž!ļ]*J)!¹ÓŹnIżĆ··½\#Ńs mV÷X1ŪėWBU±ĀōĀ«j:Uŗ`Ś_%ä+Ą=Ÿ„uÓZ’¤Œ[‹ +» ĖKĆ0-)Į Ū>ÕņŅµoė3ĖõŌH®pX’Ųõ©g³xcZ»»“Dž{«ę-œ‘Źzķ¢–(ܱ ’Lö%ģ\ūR2¼^de[ų}jÕ®u?{h7C–e•÷¬L -$jÆ .åz€2jgIn!ވ̘ĻN”Ņ%m|¤7ƒ.ģm5Ÿ6£*Ü2€S=GjÖQŚqz“lŒīBAČąż*ŗiW]+ɍüƒŽŁ®yDīĶ-–ī—ČÆ;×ķ-ļošŚŅš2pĮ‡œb#Ó4ß Dš"ę<€1ǵĘV8½nk[ Ā’²3|‚NÖ{źŅ #Ky a@'?ÅķJFźL©<š³I#O `«Ž„b³­õ¦Šö9eˆ\*ē*̓X•Ės“¹ų…£½źM—e§¾d^£pF•m&ŗš„ŌĖyā/±z{ńZ«:g¦ÜźMš}†ÜG»vćÜ?ą]k"ŽīI&UFŪ u«G,¶6nŚE+ĢwžÕĪ_G42²O'ļ>½ėe$`g4ŠcpeƎ„×-}ė±’ŽD1ŽX1ēš”ŹĘńŲH,-ī­¼é”łŁĘ č*­Ÿ†ķį»ūdw@łŽćƒjĶĖ”¼^†½Ö… äW2-ōĘčńŽõ®]]:āEŽ"%Ī2ŻAf•Õ‰ž…­ŅMøēėŽŌ¼#.„ØĘŖói‡?ėOB `×qīv“ųFĀ=s4Ķ)R ŒG${~UēoŖ‚-ŅʈrLŅ y™v×&‘c‘ząµvšo‡Ś`g>¹Ē÷«¢œÉ­Z[$nĢ‘³cošä­Eܳ›8#Źļ^„Ÿjč«ŅįžÉgaÉ ĪŚĻ’wk±-¼Ģį[š„ŹÄJ]‡ķ6ķ4‘–Ÿ¹Å>גģ˜ņ—±šĶĶ™4+vkāOu>¤e’%¹}NzWŖx?⩪ŻÅ$ÖóĀB…f<€=×Ńs£‰Ét>šī™6­ }Ž8ī„ŁS‰9čkćj·Zo‰5 ģļn,n VAę1!Žs¦®Č;ēŪ_ž/§XŚ]jJŗ“B‹$p!Ē^+nēāʃ'ŽüEcØčsŪ¬-©Ūž³qä Ž+:‘×C%Ģ"š¶³sku§j–±/ēHF°5ų¶wÓaˆÜ,LŁ`䃚v°”§O³øÖRĘ(`’HĖé×=:ĪńķÜzćé·©$CĖeĻ$ØŠ Dšļ…¬u=9Ģē®Ā™>µēŽ3ų_­Z^“:vƒwØé“((ÉĄŸ™F{ŠĢYš‡4S„ZĮyØ\YJa!beƒĒ sžq]ŽžŚųKĀė« Ėiš« xäøaéųźbåsåßĖyw¦””d!7śÅ>¢ŗ+Ÿ 7‰m¤†ķŃÜ …tĪåī? ®q^?š—‡Ū@Š/`in„Åy $ ķaéŪņÆ”~h~)×|9hŗe„׈t;Ie [ŹʃU+Wń¢ÓN°×tö‚\IqęBŁ ŻOҹ_†¾ÕµmNā*Ś[˹ؐb8’A¤dz†¼ §xÓLŌuifHtāeÜĆ Ģ:ƒłWėGĆOŚļį_ü!3hzߊ“)å“iܒ'œqD•Õˆœnxʇ¾ż”|ü'vŗÖ³£I)ŠFL °Ēqļ_é6qh6·:֎?²5ĘłdŠUå„VT©ņ¦‰·Cčāʃy¦iVŗ”“4īwM` ~µäæ~ h‚öA“TKŁń³ų|³Ÿļ€Ö²Z™µ©öĀė;­CĮš~™ā[;-NŹź!E0.~¾½’ūSįe¾™ū?xRļPŃ.ćŃ“©“uĢ0pqœįæ.••Ir¶.k3OÅß4ŠŲ—śĢéqĘbø\ń ē“Ē\‘^1ā­ĮŸõKĶU5{Iå~ŌcW Ķ‘Ó˜®]njČ?ŚgĮ6’¾%ź¾6šf˜o„AķĄŹ*>ųŸĪh’õM/F“ŌVų’ÕFAĀćŚ¾yųĆń6ćĒž3øæ¼Ōn•”™¤“h*`ŸīóҶNęr‰ė~Ó<;Æų[Mø¶ž+Ić;ʦIy&¼_Äõ–tøæøY“»€į>üc8sśÓ2“hś«ö|ÕüšėĆ7> Öō{[żJCŗŽśEżąl{×Õß ®tx¼Qī±36Ÿp¾[ļūˆ9ä{ó×éPÓ#™ž­«lŌµ“°cy¤Gƒk•ųįÆkŗUµĘ•{hŚŹBMÅø1,£¦ŽÕ<¬Z³ąļIec„_źFÖ=–Ŗ@ņĻ=qׄx7€~"xˆ¾”²Ėkb÷¢Žq…ķšŁ!śžŻš—ö”ńgĆߌVZˆõ5o :6dēī殏?u5ń^æć]ēT’ŽėE’R®Š3ČśÖžĢØčŹ?µŪÆų·KńŠä–śŅ2fB’ė['IǧóÆŁÅąKķ2ŅóN Ąaö†Č<~U‹>!ż“õĖ]L²×¼3i$· p©)_˜„ȏ ā¾8ųaā%ųc©j𬶒FĖdÜ ļ:õĻf“%C¹ī¾ ų x»ć…ž±'‰g‹JīdŽ »‰\|¾ŸC’ÖÆ]ńW€|7šŪĒ:Ę³āh.ü!1HķZR”ķpwsźEl#‡æ…>ńo…cŅĒŁ5(®7†YóÓµxwĒÆ¾ šĻ†m‚tHµÆ²BŽ‘Fr‡;[ņ ØŹÅo|A·ńĻĆušÄ_ Ūxkʋ”a–!‰T aGŠvśW?”h–:‡µ 4Hē¼Ć-€Oś€ Źu:#š§‚ot˜5kżüūx„z  [=;Œā¼æö‚×m¦ÓÆEƊöRüWjJćėQ&`äŽ§ēÆ‰bs”GGŁęy}Ą®Ö×ķbŽ63ɍŖ:ēéU®Ū?YšģÉxNŁ#0`‡#<ōÆÓ߃¾3¹ń‡a»bžtÅĄ0ĄćƒļҶNč§v} ø§LsĖ!V””r`ź°Į#¼#š9£eqņȤc±qŌ„ģ~]üWšD’üMq„B‘ż’ēż*ٱ€PžTzć5ēivbUܝép™ö÷ģĶć=\šī„šĆW–ś;Y®ćønĮ sĶw²×Œõ?٧öØųmńWB™ķdÓu/"śŲ¹O“BĶ‚¬GŖ“׌Ņr³:”#ūŻš·Š“_ŠžѾ&xMü’j–ńϽGH̶r ėė]æ…õ6±Õs <xzäØ[gŠeä0Žī5žĪt1JŹČ„`ƒėÖæžų*—ģā?оńī‡šēB¾Öxc¾/}ZK™,ü=®&ˢ˅²ŗ€GloAŽæ;æh’„Ö’>ėŗ­oc©x‡C¶tóbPśĶ‰>”xü ؋Ōr•Ļä+◁o~ų’Wšuż¼ÖöQ1k'dŚ$B~č=Č®h4,ūvØ5čSg<÷ łŽÅĻcĶ@2¬Łm£·½lr2bÜĢ$Õ7‚O5xltõ ÅŽUY7`üŁüŖE"u(å÷pqŃh*.Ś l™BŒ²ŽžõcpÜqśPtĀ] ­§dp2r8éÅ}+ū#žŅŗßģŸūFü;ųĆįÕ¼‚Ž+ŋS1KµZܰ Jō=ųō4”ä„WĄŠ>ų½ą’üešeģž ńU”MtAā;¼–^Ģvūņµ{–‡seÆuį‰ćk›b'µģLgÓŌq\u"nzĮn<Ę`©¼mcÓ5šwķĻū-OūP~ĶŽ0ųse¬ž?Ņėøø†øE?¹'ū²)xÉ’iOjä°ē)ńæįN±šsDzxvūJ6WÉ%¼/Ē’Į™oU`ÜVF™¦éśƒAu寙qŌ’ź¬j(#ŻVļAńƒ.,µ \źŠīXäLģHõā¾~€Żxdł7l'ø,06ł£éšĖœNóCÖķ/ģī¬Ķ¤SłĆ' õ®[šbY˜īną8g*%ۃœšõŃNA(Üū“özńĪ—«iöŗ>±-Åʧho?9­×’×_OßérŁ^Ļkp„2ąƒž#Œ~֙„Šŗ|(’ ‘ŲĄ ėW® GL JæN½El™Ē-Ź–Ö&&h̊ü1Zv±ˆäA=Éõ¦—C'\›yM$pē‘ź~µ§¦Ž, D8č}č: õ%—QX¦{d‘Kē«C¹Ł!óœ4ŲĘ(5:K«9";”łßxąā°#Š;U…Ū“éŽh —,õ$ÕmnĮxY€)–=q^yŖEē#¤xŌą50kIköG”ƒÖŗ(ļ®ķ,e¶Va˜†€8™•`†I’VpXüÅEmy9>C)XŽ1žō†hŻéÆ5Ŗ‘ GQ“ņńYÖ>vš‚To²8ļS-”®tö:Ԍ%y ¦½6Xʎ„3‚#ÆÖ±..ĒŖiÆm(+Źøc ¬9žĶmoĆq˜O*”Y±¼ŗ¤,Ą6WŚ™¼²ZÉ ņ®H©4r”¤só -åYŸ1°8a]†œ×Ļl| ޵&Č£āJX£[#+ü®e>•k«)Ś“³<Žµ2‰¼v#½¹‚DGŽyĻ’ZØŪź•vĪ…dĶc>ēd—P}ž!°‡Ē9ž*ło㟃m„H択kš°¾½…Uƒų×w’ ņÖ XRŅĪXXŽzžäUB=OÓp9³’VgS>“¤Ć£¦,%،īyUŽ§šŪY¹ŌōP^Ęā6†Q!Čd”žUu6>ĆS›sŹ|_āmsÄWńYéĶnģN÷Fē5{@Ņžīč$šž6ł÷­y³>»‡MHŗšV9bø=oi×6K}׊Eqo²+ äTĘ7>» JŻūž?ĀmsĀśÆŠt½B_ ųĀ-1HL7KÜõ>¼×Ķ—Ė«i×xŽ(ž$±ē$JÕҹōxz–ŃžŪąƒŸ“.ģģü3š‹Ä÷ŠŻAö‹k©JÅĀ„]øćŅø?ˆśæą??ƒ|g¤]xwĊ›žĻ8ä{ƒYĖ%©Õ…ϰӪčFiĶn»e-Üöņ!Iį×­hi¾,UwŠr6ļErM4} Le³:”ÖlÉXąmå€#Ÿ»ZŽč’7%qŸ­s˱źSĢ¹ćIQš£>•Ģ=ģqFc`Čū±Č®r¤ĖÖćķ*IÉoå]_…m ¹‘e\Žv±õœnxxŹ–7®ü9©ź·”į„CĄuÅz…>KyĖ«°Œ®  ū߁­įDłŹø¤“:ųM’ĘŹhÄ#`ČĻõåZŽ‘ws¤É¬&WC–Ąå}ź•+ŗüŃŠĘšå¼QHÖś™ A w®ėCļ€<_įæü9ń6±ąļXĢ&ŠāŅį>:«FŅć隦qg‡ÄY0”ģ1PRõŖ?YžĮW¾+ŪCyąßŚsį‡>2ü2¼O"Iģ¢D¹Š3Įóa`RUĘr0>µ·ńĖž ūžÜžŌ|sūźŗ/Āļ‹ŃB/Ķ®›žŒNģ’Ūše×(›xy=Wēt³žµW?˜_æ³ķū&xĖVŠ~6ųkP’ŚŽ]‘źqFĘ)#†'§Nõ‹į?Ū_BŸ4W0Ą×ŠĆ8¶¤ģĻxļ ą£‹ĆæUÕ>Ē¤éś›GBŻĮ+^YwąōZņå«Q©t(ƒvNJ<‡j%x\œ‚œ b”ģvĘW5bŗTÜULń®_Å6–złŚ\Ėę·=qĶO“¶Å$tś>­ØC”A£Ü_\ŻZ!ąHäÖµ¬qœ>ŅjÕVĶŃbēMKōh™ŃS§Ģ:WIŖ¾…ātėĘS’õķ#˜NUā'h< Ų³–mŅpż9­©³šŗ*ųž×ū^޵Ž8µ(ū=Ą8e>ŸJż żžžŁŽ ż›<ńĻįü,ų³§\Å5Õ÷†ć»”j”Ź•ˆą«81Œąžƒ$€}LNVfžåsń’s<6_€öø¤łe(ĒN—{ü¬~?č~:»“Ä7zŸ‰,'šėO{#ŻĒ4e †|“l§¦Ņq_L[\Ū^@fžjąœŽõ„“ź}ĪIÅ[Tf\ĆŅI ‰÷—oć\UŸƒÆ ÖķÆmuūķ"U8ĄŪJóŠńČö©ŒŽš”®}gį‹Ń|;°øfæ“[øx R<Ć’xc½x‹ų£DÖæµmžĪGÜI ™ĘŅI'ź9­#.ē3¦ć±sM[įX^Źž: µ}į+Čä’ĶÖ9UYĄcĘÉžU2hč…V·H¾v §m[“QŠĪ€yˆwGCRĢZ*x·Ä·w—m ķ-‚Ų^õ=õ­Æ†µ «‰¶ų0yż(„ĶÄĢą¼ŖOØxGkC›®‚‡ĪJÆ95ūć}^=#į7†µ(-’]RŹ’« sœĒóÆR„OšĘTčrŗ –½įŻ#ā…¦ó¢Ÿę– 0c‘pqÅAæšOŸŠ¾ų«šcžģ4ķ^žŚ7?b¾E–»g9Ų‡Pw^OLWŃ᩟̒I,š®7‡'[ ķWÕDÓ³÷wŪ]Æo;~Ū_±•ĻģƬ?ÅÆ„:}Ģæof+ØŁ(iĀ÷.ß+ƒ×ģĢHŸŗHSÕIå|xŗ–c5ä‹>čĮ-žÅuŹ–‡Āx]Ęļ;É©āä’{vā]­ļ&„¦Šö¾‡–ü^ųs¢jŚEÅ՚ij Éņąśćµ|#=„ׅ¤’ēkd’zøjÓŌž”į\ĶJ“§SsĪēHŌõŻ&ßÄŖųkIŗŗŽ ‹óõ³V822÷­}«žÉ?~Ühæ<-ć߇’>]7ĶØiŅyw‡ć”ƒÓ žzā¢ōlō³|śYÓ„8¾Yéu²}/ėÜæć_j,š/ü+ų5{ˆŅq©f‰wE!Lne8#’×ņĶ“Æ¦j֚–Ÿž©ˆ‘YO S93ĮĖhP ēJ’·3r~ÆžśĪćāv­­xSPš/®|ā9'GÓ¦šR–’\'"6=nėČæą¢|_ńĆż°ķōģ|_įÖ]ā™@Č0ÅĄŪ÷•Kg'ųXzoUcłćŁĆ$āXU‡Ćü–Z?¹3ä’köZΉe"NŽ’&ōlēršģ.mXFÜ:t®EŸ×ń•ŅgQ¦]K”HŠå g#?|Ē©źŽ6ų9ńEų“į"ń¤²‘\<|Gr›ņČŲžuQ¹ĖV č~›|GŅü+ūS|+Ó¾"čZčž8±‹ķŚI ĆnJÖæ>ōo ¶Æ­ŻĮ§§«*ķ)Œ·ŹOĪ“±ĪŖ5CIń[Ųj“č„’bŌc- ”mn=ź+ŅÆ¬n5]:K9e lG˜¹é;VRVŠ×Śv<ĻNól® lGČpkÕt]6ß\Ó59MŚĆqn”ÕJń 'g·QI-J•DŽulČ/Ś0q:Ō‘Ś9@Į”ÆW łéGĒ^ĻO"¢õ§?š«ņƛW~‹¹©¹6ŒŒÆ”ķQC²i¼‰zā½śJŃ?†*H½ue"hpFqĮ­--^іycżąę¶ēŠąØzŸć k‰9rŒĘ1\·ˆ¶]O¹™;ćԜ¬ć@Ņ­Ąķņūęukkp£a;‡_„\[ŲĮ³?N·RČņ+ōÆF±/UeܘązV†3} rč„l#š«sØJ6¦ļƒ2Œ¬²2Źą ’ÕwJyĄ9 ‰K”³¤gØ?…fߜ³"&ĮŅ™‘‹o Īļ3Œ1Ž˜«÷Ņ@¬#ūݳ҄®`÷"Šńķ@gœ©«W2[ˆ&³[8–'Qó„W ˆ4Ży-#pŒ>n1ÓĖźš¤ŗ•Ģ…ÉqŒ ž• dĮn bĒ)ŌŌāŚ@ā-ŹaqėH Ø4ß³!Ś£q[vŚd÷ ‹…i:Š`Iö+k ŅMBhģĘāP7WĒ źkģoŁūöTų½ūBjP“Z;ųCįÓĒ™µ{øŹ;GėŸ_„e)jķoĄĻŁ#įßĮ 2ʇ\ ńdGĢøŌÆ#ÜģŲLJōŌ±!ėWø†[ŻŁņ±÷O°éY±Kc¢Ń®5 ZÜ„µ˜Ó­Äc½źPéS>Ÿkh÷ZäI· ~5<č…ęī—©qØ2–Ēśŗ”oā ‹énlŚŻ­V3•Ž:Ń̊Q9½CY\”“@nG‘Ą4‰ä\ķŸThžpr1YŹW*Äךµ¤ĢnŽ %ūŅ1ĄS^)āĻŒĶ”Ē >Ó Ōķ•{¹xH‡ØĻP‰q‰ųŁū`ĮRž|Öµ;a<>4ń,Qn6Vó‰ r>čć×ó/ūOžÜ??j-X¶»­Ļį’+»A¦@ģ˜SÓv1“žčaé]ź\„cāH–×Mi„0£c’y%rIęœ÷¾ģŽøÆJ*ŚuZ×*•,–Ϧ;Ņ8ÉfŽqQ(œr‘0‰Ų*”;}}jŌV’'TB™Čē‘PKģYŠŃƖUĀēÖµ®ęl$3>q8ĶgA£h×:ž±o”hÖھ±,‚4‚Ö3±=°9ÆŪ_؃ž±ń§öŠÕ!ńwĒIįųsš ŗŪŃ]Żæ6xQҲ©RĒ]:vŌžŖž~Ė’eĻ éžų9š÷þmŗ,sjRŪ†žfĒ“ĪxĪOå_CN‰+}£R’K‹†īĒ${jóē+³VģXx„ˆ “äć5^3kl<øeV3—C&īsśÕüc“ō®]zįoÖ}ŸgŪ”bzą×%I›B=Sx®õĖ>ōĻC\/ˆžŌ.’HõTC÷9®fΘ®ĒŸų‹ÄĖin~ÕYõ$õ5ōĻ‚?eŸ^iÖמ#ķMq]Y¢Ć)ɧ'ŃŸ`ųCįŻÖeœ¦9tųņFģ3×µ{ʇįkYa!­ŒrØōļXŹV!ÉfēX4š, ą|¹Ē#ŠŃ“š…Õšžę‡ŽUBäĘ>”ć+˜Ī}Ī^ĪĪīßXW7rĄĖĮ\ü­ļ^µŒ-į‚KAJäļU3˜¼µµÕ”w†-“‘ŽÕęž6šeä©„_Ųk—śDŠJ² a[ˆļ@Oŗæ±ŌōKFMJ9Æü€>QŹcŽsß„y…·¬ &ŗ·Õ®RM²FæĒõ g›}¹“½e­ļįiYr~aŌ{W;¬Ž5åūI~\}vžko©“L—ŌVŹÖź4HÖW Ś0?¼²įõ „ž8›ŹlįI©ĪūĆZäöšd֒ĘRV’XūŲ®ÓOńu•Ī-”· .ģ$x\L7`zÕ=~³‘®¢I$ˆõā­L®S’Ҥ“S•ŽŽHćecÉķŠŪŌ&Ōīfw»),ŋoQÉ£œ•O?ń>±«h‘Cu5…Ü–åöoXÉŚ?¼qŚŗOųĀāh¢¼‚ķĘ žŖ%(Ųöm+Ęö°’ĪśČKt£!Č#z•Ęų›I:äŠĖnV221ŒÓ‡c–“Jæ³mēMø†Ąb8j‡ĢkY ‘÷ž„EC›V;8|D¦Å,vG%vœI÷Æ;Ō.o¢¾ZÉęD N1±½ŽŅ×[2}M³A!9S.ļT4¶¬Ķ‘Ļ”F=YĮkžš×‰-#»žIVīܦ9 ėČģk“ńēm|Aį±ŠgZģ,ҬĘN8 żēA¢>OŠu;ķ;^‹A½²øøøEƱŽĘ¾“šī,ŗd3K‚SĮ Ōb±©łYÕmKH m’VļŚ­hŚĶ“³ŗŹ’@Ēw å&M˜Śõ¹PŒÅqåDxŚ1†Ŗ“ϵ'޽("NĀ­»H¤ł¹pr8„KŸ*»6xµ„lbŻĶ—(2 ¾yõĶPkkĖIÜČ€~\Ņ·„X­+ʾūJĪR<•Os^uć-ļT‘~Ė ¼”ߕ@?­h5!|3„½“4rBYĖ•Ö½ķ¼ ķ‘Gāje™”/„µÓ¶JČ7öµ—&·s#‰-ę‘"#iŗÖN6rŽåĀ+o>æZ׳ձˆ]Š‚GŅ„_*+¬ÖóM•»Lю1Yś“C$d˹ü¬?ˆ§vC‰-„šVż™ģĖČ­ /ā|¢É¾UąƒÕjH%“¹CFĒ¢/±C#É$a»“Ž’·AX”yā PĆ5ƒ~åŗy¬¤—V“7óÜ`Hz«ébįū|R$M¾CōéYoؤWJdC„éŽ*dģkG˜xļāFƒż§kjÖR,ĢJģćßWwćŻLŠāgŸb…ČYXdW5Jń:ᆹÉŪ~Ņ·vĶs¤h––šŒo…i0Ūxč ėXš7‰æølRŁaøa“)ua“€2+Ö¼a®]x‹ĮšrY-Å­ÜĄņbå9łųļŠ £#Ńž|:Mq.†±„YjņĀP“€–T¦½†ēö9šåī«_č:ŌZśŚ™’Œ݁č­Ö-ÉšĘšÓĀQhdˆn 'Ļ]Ɵ}ąĖMRT²bd–ą1<Æ\zsK™#éų—O¹šƒéZʘ·÷*¤ĄóÅ[9ćņO‰¼;öÅŪŲY&žŅKęQņryv¦Aō?ģóą­KÅwSiÓ¢A,Q5˜ąD¤ą7ʰ¾ | ńƒ|Qw¬jŚhÕt _dńg!sÓ×­+ō&]M+Å:w†ōį«ŁY4ßeO1£ĘD˜ēłW7ćÆ:ĶŻ†‹ā-=—O‰ČŻl2Dj»ĻjÓ±›¦xŒ’o4Ķf'“N¾¹²a“å €3Ķ}Ēįł4Œ>]GO²ī·üÖ'wĆĒ‰ŁŁÅšćQ‚óT°ÕmZ)įā æę`­Įöķ^…„£čŗXŽŽīI/yR ąŽ:ŌŲ–>'jļżÆieöµ¹µxK±FŹ©ąįæ3]—Į‰ß|įÆxkĀz¢É¤].ļ%Ÿ…ēų{֑ˆātzē€$_/üEāµł§døˆguø$ソ'önÕķü!q¬—±RĪ Ö‡ |µĘ3» Ļ\Sz+ĒČõm+I’„Ó\Ö­.”/nŅ_›œäWĘ_~ė? o§‰x“Bŗ>m­õ¤łmŸøē±¬Šrč}­ū$j?¼×¶śUĪ›įéįČ·ā, Čnøę›āčÓx“S–O ź,ٓːci>Ēčo["%'r¦±šį4ė`öѳ<1‰I•ųõē]¶‘­ßĶ}}8–XĀ”tĄ=>œVnfjēÓśÄYlt=2’AŌ“č瓉c©ē+¤~CšńĻ~Ń~4Ö­RŅź8dW‘¾ŠSĀūÜÖfŠšh?õūD–=2ö}(ngTWrO§„s^.ńv¹āiójķ,Öé>’ʬ3WģĖGeįÆĀ+äźi×é >E23 ōĒ„{§ÅƊv_t ·†¬Ņ}¢9RT*£=vØčE)SźĪ÷:/„»·³ÕaiÖā)ņ&'y$!Šä>*üŅÓJ“[Y¢µ²ŸĶ „9/8Čy(‘ĪyOĆ;ėćĮ¶5Ę« c'p÷>µķ–šwŠ“ˆ£µń‹4i#ķĪ2=9<ÖÖ%ög'ćk-BÓPŅ/l¶Ą¢t\"g>½½+Ū<ńŅŅĢé:Ģš#©ŽŽoµQŠöųņäĶy>™qż”§#²9Ā€:ļöāæ;¾%xźk߈ś¾µ ^]XƳ:°‚rŸ?ŻqÅ›śGˆīu];[ĘóŽOõ„ĒŽ5s[š.œ4>īĘā;måÖXcżsŪ­iІ®Ļ&×tk ]+ū&/ļšLn‘Éd?ÄνļĆ:Ī«£ˆ5ė »+·A).„sžzō«r°ŌO§¾ i<śojö“K ģ„u½ ćęš‡¼-«čŚ“,“1Žkeq½XqĶc&Y›š×ŚwÄmTXkŃŪÜŚĪ R‹„ܤc¶zq^-㿀+š’ÅZ„Vry “I4*~č Ī@ōéXU•˜ögŗųoÅ~°šds«<^#¶#ķMg\`}+ńĀ'ńö©ŽĆÆ]ĢŅBgņ$%‚sŲYĘ«øõ;Ož0oMa¤5攨ĮdFDķ’@ķŸJś*Ó⭇ޯ§µŒyźŅøÜ+{Öö¹”—C·ńĀ’ x“F·ŗ¼†]B $†źµ÷Ä׍Aą[Ķ {äń ©ss-€łŒķ{õ¢F 6źšĶ÷ƒ|\o“©$ŗŠ®īw8ڇŒÄ õŸųcDńV—§SEƒRŠ#ælć;‡^~•chÄų§öš—ƒŅE¾¶Š`šõŹ[¬Q¤Y "’xśōƃ5;S§^¬«9 …>ƒÖŖźjŽ›Wńlŗ–‡o§Iš˜¾óŖüŅqŽMt_>$ĮąO[ĮŖ\Ég”O ވ b@J邜guosiiØZÜ,ŠŹ7”<ŁŻē…,7cŒ™FĒ;G”|_ųegćŸI9øqŖZĘŁJīĄ@?Ņæ7.,㓸xO•Ł_¶ÖҲRÖĘōٹį½bēĮśž‹āK&’f²bģ€ćĢŒē•÷÷č.æxW懧“ńĻĖļ(d Ū÷ĻēųsRŁŻ~īĮæm ļÜxļöVńÖ¢0-ī‚.„ĖŁŹ©īæ”ŻJĀļN¹™7ŽāéŽTŠŠŠīꉣóšūS²ńVŠtkĀ‚ö“r¼=t‘ųNH5ė rś.ŚŽ'¶ÜÜī…†qžz ĀÖ`‘ü*ĮnbųeæŚ«Vńׅ“щ×GV²–°–§hŽ0僝@ķšü׬e“¹’)UįtźėS„ŗŸF’=? %”Ź»go=±LhŁÕ•Ž9=zŃ}•"‚=äõ’fÜīV@#'Š „Iµ³±AązŅ"l`čpŁģbigpN*Š.ĮX9Ś1ųÖ±‡szlæĪŁ‚!Ó#ƒ_¦_šI_ŪFėöż°|'¬_jö憲eŚd/Ż9ļ]‘zr]łe±‡mÄśÕFS’æ1—±=Å3¢hbe,}{ŅH6±@Ütā‚£+żÜ<Št;²ĢIj ‘yŌI.6¶zÖ­\Ū,¶²Ä!‘”Ø,2(;iŸÕü½ūm¤Ņų—ö6ų”¬%²\¹Ń^yyVć91œ{c½[ŗm”ś‚éZĪ£o-‡‹4ŚŚvSǺžpFŸĄrk ‘;OT»P)Jßdøåe9ŲjżØ–ĀĮ>ŌĘybS–XW –¤ŸČļü‡öyuKæŒ“Č¢Ó³ YKsm!¾ÓŚ@ß»\šz’ZöƒW!»×3l±Ū”XKŹ>”š7ŽÄuÜš€äĮŽĪ1ÅZµ³U»#gœV ¤Ž§ģĢ€JU¶wā³ui­n­žŃ­į™YH`Ɔ†¹źŌO‹¼mš‡GŅ5‹½OĆ:Œ+cµĖV©ś¦O6ģ?NŃEt»€‡›Æ=SŌn仙˜"£gµĄę~”•PŗEĖ1ĄLķ¹‡NŁ©ÅΉ.p1U –>ė†ŠŲ“Ō%Š"±—ŲZČŌ5½7K_µėSZEi§Ķ ö®Ŗu5Ōģ©¶~ŹžÉ’µ5ų]įķ/¶‚ŪN"Ż h<Ȥ\‚uĘ+…żŖ¼įo‰Ńźž<šņj:Ƨ–nĻĖ O@@ćÆjīi5cņL—+öXź•dżé7÷6~oė³·†4ėmj÷Į7:ÄzƒĒ¶ĪĀG2£7ŌōƜt7ĀśŠėžų‘½š×Ē0LZĪęt?e•”Ż–8Æ*½±śe:ģq·~ ’„[RÓģoµIšB<‰ĻÜøĮŚĆŒJ÷M2ž„TvOŗ{„yņ‹G×eųÅ8ŻRŪĒ G?ń}+ÕŚ4¼0•/¼ē qQĖsŅ©WCÕ¾ųIumj )¢Ė… yÅzGŠžŻxVčÉ™-œšÄco±­©SGĖfX›;µš;X4ķbéöś”3“œ$vĒękŪ5M:ČšĮ#X@Qü>ÕŪZh|E|[ę±Ęų—A“VŃīķysģ;Š×š|,Ņē¶ń\vz­±ø²`É!9:TĪ"Ž;Gv'Å?ƒś®‡ŖSI¶{ĶįL‰*Œ#ŖŸšÆ²ŗžŽöKkØ‹Ā¼`öśW$ūž¾ Ō®™õoĆ‚>,ųi)Š µœ»wAēdn8é]Ä_æhŸ„źž;šFæ©hŽ%ÓĪŽ[1²ąņĢpx­iEŚēē|SÅ9c”²ģZęRŃ®Ÿ3ėż7öēšOķ+įż+ąßķkš:ÓQ×fA„Üköė*ŹÄc2ĀFų³Ōķ$g8ōÆĀ’ŚĆž »ć…?5Fż˜ŪŞøF¼ƒEk³B„gdy8$zWM[Ō¼„¹ųoĀ\3œŹzœŲzŸ‚éóGĞń­eÆk ń¶ƒ¬ų?Ēŗ[y:†“ŖĄŠ]Bxłö62¤C0GØÆ@]Y%ŗeFĢ{±œš+ĒÄPiŁŸŁŁ6qN½(Õ¦ļuö÷[„a~pqZĖó²®ÕČ®FĒÖQ©}EŸlPĪŲł«^ęåY‡ī@=łĶsIōѵM (€zk±²łķFĮóŽ¹Ŗ¦ć<łŽÕĮō>õÅxūGŽ{M?SŠ%[¤™A rFFsõ­ ś ōftq"ÜīĘ1Ēē[LĮ°…Hlē­kLē®ĢėRhÖ+uؘ’Ŗ”8Ʀ’d?Œ^-ųE­Zx‹Ć>*×|;a¬:EØŲE3}žg’iOĖžqČļ^¦ŁÜüƒÅ,$1x?ŖOTŚg”žŅ²5ÆÅ­KÅ?üŃś sS­±ńcĖåŗ ‘ØsĪ8ķW«GU).k£Éõ]ėZ³$'r°#Žk SŅĀź«ß›=h¶;­'Y­c 2™ƒé\­äŃß^;ģCą*±õŠÜ±ŗņSĖS»×ڵ£Ģ  9 §"ߣóĻSéUīŚ+(Œ„_wZ™'Ōį ćPŌŚāXw)ėŽ¦—ā”Zo†§uW‹ĶB\püõź””įć$|ćįļ³_Ų»HöņFįÓkmŚß…~§ÉńGRÓ>é:ˆ>ĻqŧĶ<ŽåöōÆO .‡Éc*]\öOŁÄzUļ….ü%kp’&dēŒ’@?ē„}ƒąsXš6æk}įū™tĶRŽAqm*’0Ąä©Ēc_E†ž‡ÉęŌćRœ£-™żųCÄ^ż­ægŻkGæø‹ŹÖ4¹“^(Čg³©`¼rgŒjüš·‡n¼ā?üń6µm’ ‡õ tÉ%ķß‘Ļ^£Ż'”ü1ąÖäłöeĆņ½¢Ō£wöS²~²Œį÷yz÷ƒuŪt“Ėŗk蟆“<ÆźŽKĶ"ÓSæƒF•÷›UˆŃ½BōĶe~‡,"­ LżP’‚wŁ|.½ųqqćż3OÕå¾·{;yn‚°„æØ<`ć÷Æż²’f žübń^‘”ĮfßõdžŁŠv>ZŲ1żä$z+tö­œ/‚ę¹Ķ|,%Kū“×/ų¢Ūü®Pż˜ŻCŧO9bŖ»rƾ’šl:~?ųCćŁSö†ńÆĄO[J–vRÜč—]éņ6謞ūA śŠōK{‘p pJįŖĻč® Īć˜etqpwęŠ×ĻÆāt–ȪЬ=麜I.™q ƒ,\¤äg×*VŠś¹ģp‡W½šµķä2ŚŚ…&AĘįj̶‡_š\ųē£\“š ó칌 ̜ōqŲóŅŽcĪ­dĻØæhÆéŸ>iß¼ge’ ~‹Ü\¤1„ūLdüĮ€źśÕįńUę§ XßOk,*ĆqŹ{UµsĖ šœv³źs][ĀØī~f©§¼ń LĖ c~?Šœ`sā±1§NS›²Z¶üIe€Æ‘½Ŗ¢īˆ–NNqZö°°KCü®ń3Š„›ē5ń·¼[“|¢“_ēźŹ.ņE(tpyĒjæm.ĶÓcy&½hģ~u)śv āxībķ8+‘Ÿ”©/u ć*B±ē„t(ō0lšŹĀ2ļs“)<’Z·tŠ43 暞Cš”ĖŽFó Ē®:Ö;éW%Š³“Ļֈ£—¢“ūjĶ$óÅl[\);÷Ļ#ŠU˜6Z’éLøzÕ+Œ Į~qß„Kb„rīUY>DĻ­_·ˆł›WvzŠ MØŪŹeóWzƒó{RJŽ`Å0qĄęƒ9¾ƒmį[]Ģ2qśÕƼóp²Žž”Ó±™©IĄbeÜ;W+;K6vD«ēŗŪŻ8`Ą£ē½Y¶“‘dMń³ēŠ™05WM°…0„ńĒSRǤ\‰‘ R¼œ ;˜, KQęžļjīÉćZõ† ¼uń_]·šĒĀ’ Üų—Sr·[H¶“»?N:ńS)XŲ€’šN/ü9:Ož/Iďo “Gu„–:œóŸå_„öz[-•“ŚŲéŗL@,CĘ#@8P+ mNxM7@“h™øó±ņ“ļ]Ž‘ąŪXÜ^źŽ—ś¦ÜäŽįIĘąn¼¶\r‹×ŠĪÜsƒĄ?Jć/üK¦É+Ē£Ūo ›8?bEÆ<`ż±KŹ;Փw{,Ó^X-ŠŽ;@fŲ¦ˆ#WļĢäŌž‚¼ƒĒ9Ó|1z¶Ś5ż¶½Ŗ1ńźžb)ō'”ü*ć—Üų7öŒżµ¼šsJŗæųÉā8irīH“øęk6:y`ēÖæšoŚ£ž ŻńsāĢ~ųC·ĮßZS™ "åÓ–B_W¾FDd׌ŸĀ²›±Óõ?©Łž šöBƒJ¹]Mń§Ä…%īõ9ǘ<ĆĮžą’*ż7ŠÖm°™®ŠBŸv5PŖ¾Ą+†¤ĶÓźt6¬Ļ(¾ø­2ÖkņČGķžÕƒv ʾ}ĮV'łAč+źqīv ¾¦¹jLŽ3ęߌ4/č÷Z­åŹŹŃ#0XŲõóļĀļŚ_Å­4ė–7 gęPŒrr9ü«†s=PŠōMGÄń¤O"2F dø5į~,ų«m <ž\ń_LN28Ŗ„Ō·l|Æń/ć ¬V³ź:Ž«j‘¾@‰[ēQōƃ¼_ń.āēT¹žĢQ»rO¹ż+Ó§ Żń÷ˆõķCū'HÆ5/ĢŚŁĒ'‚N8čkŚžžĪ>%ÕĆRńEĢSŪ¶Ŗ0 ’?ĢV·č`Ł÷ƒ¾GįĖv³Ņt͉Ō!؜ć=>•ō§†¾Gcc”},(®qåó/½&Ģ%.ęĮ¢ŪIĀwĘ1^_āki¬iS=Ķ“G3Ä£;Ē·æZĻ—©“Ÿc×|3ā#]ŅSQ†ā(nƒ$Ly9ī+§“»iUžd­Zˆ3NŽ’Ż<ҳe$Ō³h:<¦ćyPq‘Ņ™<ŚŲē“Yļa¾ø¶gŻ?'*¾§=©†Ńć=qŠxžāƤų§MÓe·–ęy[kĘD|õaé_L¢éoʹÜzņŸųN__Ś\iķ>Hvc‚ߏå_=ųŠŹ’M¹šeYP•Ąć‘SČkŠń?x‡Qµóm„²ĆŸ›,85ĖųGʗ×ļqeā-"ø‰˜Å<żāēĄ÷r"ģz*x›Ć6I:źś¼:uųP` ÷f’džĘŗ’ÜŲk—öžMõŖdąl)>™éG)G«OØéśI6ņ˜#ĖX÷ük šęƤZ_ u=4ßi²+(’7ĘÓź=qéTgaÖöś&­­łix‹fN įļ\OÄļ‡Z&›s/•ØŲ_#¦į±÷éķLø†ŅĖ?cD@xļ]V‹xöŅFnŃ<æŗI^•”ŃRŲķuYmµQł|mŹ÷ĆÜĮ*…ę/ž=+3“ÓuĘœšL’bUÉĪӀ3ėŅ»}Qģe†RQĀpĆ ž©ÖG„ŽÜ6©[¤ĶĆķ¬ķnŚümDŻļĮÅĘ]„žÆmę\ZA4Ž8½'EÖ`:4šjvŃĻ#©t¦ šŁģ–ŚžģŁĀ֑»—;Iśž•źžOlb‘RįšGĪ>aļNķĶ©OWÓuéā-2ÉoŽŅ"ƒ{`ƒ^i{}-ÕĀ\č·L©!›\ē·µi ‹¹ėze¬¶)wóĒp¼‘ŒW®ųuŪ)'·ł[aCŌ㠜zqTK‘Ńxž'µÓM£¬l!W­x„”H—)<‘Ķ?##Š „.äņŲZŪZ«‰‘åö=+ϵļć½[ˆXˆŌžā†f¦toØÜ_CāK`LzUĖ*öža²lLIéQ™“.‰u£÷³, łp Ʃ֎§į;_±mīX» wĒ­YQ‘ēš…é1Ü5ŠUaŸ\ÖÄS5¼Éļ)éķYL§6u1ŚĀmŽX%‰Ée'••rŗu²¬ņ”V^NZĮĆR[,ź÷:N§¢ĒöFˆN gpł³ė\v‰¢Ų߉Ež£.į“ņõĪ8JšźL‘¹lÖvÆ$łź95Š“z{쑁׶:Ö°F#åŽŌ"0B09éRėZ~mķļ<čÉ'{ž5©,ó}O»µf™ GŹń·?­mĆ÷²éĶqĮ™|įĻĶ@$hč:••ļŲoŠGæ/·„UÖ-4ó},–²ļ‡>ŸŹœęµk Ń*°GqĀē­x’‰üO”x6“S•-Qø Ną*ešĘ6&šgŒt4-¦Ż³ÄŁ ä~…zM֓M ŠJŪö€GÆįB‹8ßXĻgk<śbo¹ī橬_Śk0µŚH—'–‹&Eć½]=4ŻI,hqŲ×5I>‡m4Ō~x“Uņ˜_4d–,9aģ{V~Ÿš).uI§Ŗ\Ȇ1ópøeŌļt–‡¤éæģP·‘/&YG—”`vÆK·ŅāŠī¾Ļ>‘oFĮ‰c;kjtŽzŲ†vx~×T¶^Yˆ’Ūć>Ÿąļi’Ļ6Ÿf y$/ŸZļ§ nyu*±/ķõx_ɍ–{^.ŽPzƒAøžĖN¹eŠIe·U®Ž].sœē†µ oÄw6Ńi÷ŠŖ1Ĭ…sųkŅ`“0ƑpøĻ#­\S ‰³²ƒ 85—}mę’c`ÆĢx¬  č\ŻĶŻÄöń: Ķhė–‘irČö‚{«pą Ž“ģN±,:…“‹Lrmū¹Éé^©éŗ¬—2MåHLĘiøŲj'EcwqA%UŚ0jõę­}ödŽd„ 8éɬ*šĘ6ŅœIp›å鵖¹ū2iŠ€L[¾ę:Šć–ĘrÜźü9`š(hõ ÷~^ bIśUŪČ HÖå<Ģó·½8² Ģū‘¬n ²9#vjŲéŗ:£\É2²õĻzč.ę&³f×HƧ«É¾qĪ*¦…ā/ųGu PÖźžd~hņ9ēÓ„2$Ļpo›„~ĻqrźBž†¼_Å~$¾S·‚$ū4®ĀG^Ą’"„ŠŒWCņĄbOOnt ĖmQbŒÉ Ć®W>Õ埼SįżkW±“Sci=‘ÜdUłTƒń⾂Nīē™ÉŠņ‰ž7Šeµ²»šĪ¦ś¾Ż‹# ĒĪNÅoxb}2QgØŻyƒP‰ĮM޾¢ł æ|Qwkö5{‡*ΤąĄÉ¼wIń?Šåń-ض‰„GmĮAĘŽG'Ś™6>éšėZ±‰ĮŻA`’Äq^ŸćßY[|7šŪD½Ž×S‰J2žµŽīséŠb“ZXĘqgʐYŲųŖF»eŽ}­µü¼ ·¾+Ż<+šæNŌ-`ø·‚Kr¤"Ā˜{ÖR¾ĆŒ»˜_<;ćO„Ž›ā-'M–’J<³“,)üÖoĆOŚ_Rńą¹š÷ˆ”“šŻÜ*ļ ‚FęćÆsŪtĻź?šƒŲėŚeœš…ĘŅJ…'ĶøķėłW—ų—JæKuŌÆlŚfłˆ|§šōŖŌNG7š+ĘŗŸ†¼{wŖĪ÷inģmnryt Ó¹Æ„>6|f·Ń|"¼Ęōj čńrbėĻ­jSW>>ųw®j3ßOosomw¤¢—$3g<ö×|IŠķµ+}=<§^Ż“÷ØŲ‰ō±Å2Ņ9Żįī©q¤I+X™5%‚H8ŒŽõč~Õn|$a„\e\ 8 ģĖz ³Ł„²Óå“’„€Om<ļž¼¹Üõą’¾xu¬%ńV—©$WŽrÖ„žYńpQJę2g‰é:‹'‡üY&¾-ŽF‹e¢3e÷ś‚:b¼cDƒ[Ń5 ³]äK„PÄł€É?LÕ©^§é/Į\jz_‹4«ÖŠZ ‹4C#yg>õķŚŸ‚<-ą›½?Ć)gžT¬ąīqÉöéI³EŲ«įļ„3’kź:Ɔõ8#7#2mˆ=9ļŸÖ³~ xā.›«xÓĆß<4°iÓĖęŚĻ+oC†å@=įRĘŚ>ƒńÖ½}įØķ'Ņō:źÖ(E©Ę7,xĒŹ1ÉÆĻļŠž×<1ńI×ćŌ&²Ń5XĆ¦Žžbœģ|ō$f„ŗ‡2;Ķ[āōZFœ§[µZyC1š1Ü×ĻŗĶÕ¬:½ōŚ$Ó¦Ÿpū•X‚@<H„(ŠÖgi5ÅŖĆkq,6łĻīŪó£ńƒ{oģ3¼—ćžY r±Żü,šd~*ŗ¼³+e-ĢQ™[qįGZX“kyu»Ķ2žŁķ|—+ ī_QZ)‰Ģģ>ƦGÆŻčÆ ’gʆ Ę>H’¼=;s^ƒį}µ® Ž[8ę1Ę ‡į֔ɓ{³Žģ<3sįi-®By2ȃ©ćJć’i/éŗ7…cšÕ­¢źÜĄ³7•&L•äć¶zĀ®/ ł¾ü-Õ,üMįļŻ<ėc @Ąv=Cv8Å~Ük~ń­¶sco¶6Sę}é[|ÄÕ—Ė©ĄüB𾁤č—³Ł+\—  ŻżqłWē|+ā»ĻK£Ų©O³I¾ĘćzóŒTFįŌ÷/ü'ńˆ<#čŚ…ĪpƒA'‚qžzׄxÓą>·šķ⼿բŗ·łęu@|ž ÕŒēt‹œ\¤qÓ©ĢwÜezŽGCҾŗŌ¼C xĪÓYi¤{G’ Č鎇"²å³7Ōtįõ=^-KPGe’ 9ģ=:Րéžem ‡¹‚óN†{MŁ’6ŪĪké;Ķ+ĆÓx;MÖ¬£_ģòmą•|g·oš”™m±ł½ūJü3ųy®Ü]ųvÖŪÅ^†āĻ–™äķĒłęæ:ƒūC|šʏ ÜÅ{„ėZ|2HUƒyrmädučF}A©q÷nlz†ä`ōØfŻŽŠ„Ųõ4Ó°r’¤Ø£wd~µb9CģM„qŚ“Œ#ńa]0p;sõ„æ³žŌ³øÓܼGļ#!Ć ƒŲäTŹG]#ūĄ’ƒ}æą Væ“gģÅwš7Ēž):ŸĘ_‡Īm%[©1q}§õRņūWä$usĖd’@•ć¢MÖr/'·5Ķ]\čG›k6 umqe4yełāöa_ü~ųb–Źßō¹„ż‹ÄpĘŲv²¢m½ńßń‚¼ę¬RzXüąųךš_ų#Ä~ Öl¢žŅ¶†MSBøAĘ”hć-ś3DZÆćūć×ĀēųQń?ĚE½“öZUŌŽ}Ŗ²üØOŽAųÖōLfś+4l˜Xž•\9PG– ē®čģrKpDŚŪČŹnō‰‰Yņ7dt#„Qœ‘J}ūJĘ3nõ rnVó>ųé@¹ £dhŪržó·µ,mCO›?{ŠiÉüĶ™C’< ½ 1f󣌎h;©3®ųń]ų!ńCĄü%q4®‰}Ó¤/µ¦‡ ‘‘éŒāæŅÆö=ż­<1ūFüųkńŪKšßQ³Ō­bÓõČa}ķ ˜9”sžƒoÖ³šŠė¾‡Łž‹TŠu;ķśXÆ“œO¤ÜĖ,l3±¾§ÓžĪžk˜Ł%µhŁ"w®*ؓÄ?hO€ŗ_ĒÆ‚¾1ų]ØĶ 7·Q›­åĒ:}ņŃHPpqü,޵žqß¶ēĄ}gą'ĘĖĶ.óI½Ń­µ gūTG°j(äMōüĄ÷5ĪŠ2hž/Õ,ģŽ‚.cø“™æxLcė^“į;ē†`­+o“†Č¬,3µń„Æõ=*ļ\²²ˆ¤—S÷°9ĄÆš¶æ<:“ź²Z±ł ĒJ™¬V–=‚ö+mfåō½MWū!ø7'šū;įo‰ō9t8>¤Šźv@IƒĘt#õ«NÄ:g”;²ƒµ‹(8éZšSĒ»'³×+ŖœĪY@čƒK+]Ę7{UŲą|nV(hf£Ø[CėēˆoQŽ©YŻŗŗ‹‚›AéOœū,=˜ÜDŃŒQĻ^+åļŚWuMĆbÜ[ŽÜ#|<щĻDŸTć$ķŅŽ¦†œŚ®Æ¤iśŽÆØ8. †2ķ“rO«ŹnüGż«Ŗ\ŚŖµ½õ¤Ę)mÜ‘8ĮSĶym[Sś®>? ōWĀ ^ņÖń¤ØųV?Ā3_cj¶rųÓƁKŽd kJGŹęx„܃į6‰w¦iś­…ż¬…Üm9謂?/Ö½NŪLø@ Ø=«¾ ųŖų„Ģõ:EŅ’{V|!=ƞ¤»Õ¼ćū;䷉ķŚ`Å$åXg„D•“9iT»hė¼OńBĒCŌ#ҵųµģ+¹<ķŠĄˆąjō‡_~|Nė½yļķ\\K ³Æ©°Īk†„E±įf8üF ų…uć/ xĒĆćĮ>:“¶ q5¬„p„ŪO;pF9®Č×Ņčś~×±”čÉßɟlÆģŸšOž 1ū+hž.¶Ō¬~~ŪŽ¶ū#k–pˆĢŽ:%Ād¶ä޾[1Ą ²æóWńįĒoŲßāå’Į_ڃĀrųcÄūó¦jń‚tż~ąIæw'Ž8ē‚ȶr戦±qųž’Zom’ķķöŽśŸgįgVĄē•øcķ(ÉøtŗzŁ~[&ƒ­[Ķ M Ńŗ· ō>ÕčŚT«0g#ÆzųśČžĢĄVŅĢ©©]īŗh@8ļQĮ!HE-ž¦¹ečé ”cĮÉ|õ©ą¹dP©øēN*ĒQ“»”!ÅQŌŹĶcq£+”ć„2dģyµ¢Ė’Iāŗ¹}‰/݇ē·£F¢Gē¹žÖgō{ūxĻį/ÅĻŁēĘ~'ńÅĪ’lÆ,¤³žĀi½«*Å³ÓÆė_ĻdÖ:^āæYųPMq ®±t–fSóyB'½oQ¦‘óY:°ĘVSVŠå·žšž‰£EØj³Śé¶6SźŒņ,QCÉw<_kų'öų”āoų£^ńOŠtŸėVŠ™,“ƒ »É…Ż™GéYĆv}^7;…]Ÿ,Ž|2Ö~ĆØé&½h$ˆłO÷›łs_ÓģŁū’Į6æh_Ł«Įž!šwĄÆų«ĒZŸ jö”ž ™ļÖ?ž;¬rūŽā‚ ÜW„„ĮžV·?ž¾¼oœe¹L1™LÜygfæ•ß+Łz“~E~ݱļģ§š#ć/ƍOĀśn»š’Ą,²–/±ZĪÉ›~‡‘±ŗpG·E|cā’Ł£Ę~ ’OŠ5ż+Äž”ļ“™ŽĮä śwÅcS Æ”÷~ńv+6ȰųģS¼äšoæ,œoųjr¾¼ųѧ^x‡AŃ>kŽ šŚÉÆ5 x„Å-ŌżüĻįĶvŽ ż²4h4‹ųf-CŹņ½ėģv©ecßN•²±ś®0R“§yj×[;Łžī,蚭¶©ŗAo žēŻå÷sŲWWwims”$M°sš™$zōė¶x÷ˆ<1†š{YŽ&c¹ }+†M+UµĘŠŲۚę3xÕŌÆoys“rņ¹É®ÓNŌć’HćRUń×5ĪՎøŌ:å”x~¢¹_ź+¾ŽŽ2ÅvŁģi4‘CO“/µŠlóX’Uī|cæ›dĢå `žtŅ< t“gĖööM§_éŃ\,±)`źĢ;gżkļO‰V‘Y|.š²[²_ā4ˆŒ +€ŲžußJ6>®-Y«õ6’gßĶįMwNŗ€*Y†ĖĀŻ7QüėõæĆŗ–±m¦ŽDcŲź Śs·Ś½Ü+±āāŖ6}išć}ļĄ®±k"]x>łć‹Vµ'®qęF\ē?εą¦_ō­Ē^ż£| †ĖĈ®ŠŒ,“Ŗ‚|c‚ÉĮ=I\šõŠžać ³ź<]‚Ģé{«§J¦Öv\Šł¶·ķ»žšóĘ?Ūi±ŌŚö>±źg|Qšdž%±Ć vć(=ZŹ¢?UĖ«ŗ8ˆĶl|ā? ėz$ļotžežć‡QÓė\ ANÅäO¹¶gī˜Ld'8žķššßÄŚN±eāO ܼ÷Ņ©’&Nõ÷ķań_Cń‡‚¾Žź:Uģ~)²F°‘°N芾¼‚kXTVŌüļ‹ņˆbq˜|L~*mżĢųĆ#>ńe¦³§K,Ężcr¤{āæ[’dÆŚEų«x“k+ż« ė —‘; Žj)P܎r=sG2>/Åy¶]RŒ>6“õM?Šų#ž £š×XųšĮß¶ƒļlµ”įė¶³“ģē.–M.ĆĒķ8ėČČõÆĖĻėÉ«Am7–IH2x&źų{ÆųJh¤–)­ĪĘ%Hēƒź0jO x“E—ĮGK½ŅŽ›®C!U1ReĻSW÷0•;jCohnže®I„hł°ŚƒĒõÆF„o©ųŅ‹_“K Mžņ·»ēĖÕžŸ3Ž<ć”Ļ­ūiIp>n™Æf”,œU[re»}>;‰^0Ąprzõ©-t‡YY"+ŸųwĒc’Mõ4ģtÖ2•ŚUTóéI«‘lń– Ž•¢™,ŸO¼„lAVĒcYZĉėp 94łĪi²[r€yo_ZŅßFiÖ8­(£žOC?1ŹX…ʑީKl‘0ta°öÅj`29FĪqƒŽjܐ‰ĄF8 ŹR¹j-¹ĒJÖ·¶n^Oj*¼© ¾—ėYM<Ź~UsœśŠc-ĘAā,ĢƧzʟWüˆ { "·ŽāaL™5Óiŗw”¢IĮąīĘ(åćŚĢ@Xדt+(®ÜFP(n™2…m¤ZĄ#U‹.įVībŽ)ml¬4É5=^y-mćÜóHz.;f£śš#ž ·ćM¤ų³ö€‚ūĮ^‘ƒĆ¤ZĖūŁ—?vb:g„~ĆųįGƒ>iÖžųm¢GįŻ(ü­üy³.?‰ŗŌßŪ^Yéė½œ2OxŁ‘Vlü7}ÆÜÕļ&†8ŪrČWóĒņ¤¾”„jAq§i)”»HŽį—p+CńV©¤Ū.›Æ%¾©­Ēņ¼ÖčT?¾qłŌJ]€¹«é«āŪc5ā’£“ ē>ÄW'©-Ö§¦K„hŃK¢øżŲø7)õā²Ī™¦&ƒµ¶«yuŖÜĪąe›Ōąb¼Ūāõ’‡¼%–½®=üWq1x ‹vę»AēńŖ1¹QĻ‘~'ü}¹ŗšnÆqći>ųt‘&>bĒ3Fń 'ėōÆēæö”’‚¹h}Wį÷ģÉ£j÷fßķ™dĢQ6ޘźzšģ£NģŁ#š‡ā/Ä?üWń-nj¾'xš’Ş"lóf‘°ƒ'Fxė\P‚p6d䁎½ŠP²0«;ē"\ź«#JÄ)_›ŒSr<Ś“%#„qźqOŠ<²©Č9Ö§ģ±ņĢc!³Å\··ó_j©9ąąTJW2[ ½”Ņ#Ü}w7>™Æ”~~Ļ?’hļé¾ų3šóY×̲ˆ§¾xŠCm“äōĒ|ŌJV:!śżæą… ~Łi~2ż§/­|wćxŸĪ‹MߘS<Œ/©ōÆÜæxW@šm”xCÓ¼'įØSĖK[thõĪ?•pŌØtE‡bˆ}©c³"LŹwĒž‡µsEųć6Ą®uŌzŠÉ¾ŗTq’@=ĒjĀr#ŌĒøŌ%¦CīMyGŽJÕ|U}ā½^Ųźo ;6cA×8ÆJ±ųā_ŧŽĒy¶ˆĢKłL ø”ō…uKM >½ųmš³LŅ”.,"žųĘK±I8ü+čoųBHÜeŪČP1P×Cī{/†¬d·!Tua€jģu“C…Õ’<`ŅQ±ŹūF”j÷šĶiø”a·wZš+’‡¾#ŅõĒö„+‚B1;”’…¦‘¶Ę†ƒą©tĶAuKmBį«ÄŹĒéžō•¬iö¶@Źy8Ü;ÓB–» ¼ÖRoųōŚĆ?ĆĮ©­µ){yS Ē8§c6‡»] ¤æ+ØŪä@2Ä{séQx¦ūJ¾Hī4‹iķce•›vzr9?FšŃœ_Żé‹&ÆüŽŠńÓ­uP%Äé&!(qÅ!)÷2§šX!žŠįK}ÖĘÆńG‚/„ūF¢×R?6t浑©cÅÆ>Ļćib± mŲ3ķȵć)š›Å>ŌŻ5BčäīNC!•”Ģ„¹m4ұG0˜…ĮHļTķ4ų§ø1Ķ"žr …ęEĢ{’ Y=ŌÓYGå»XÉ®|¬$“ŚĪčväzӓS³ŽöݤP²B¼ńWē—Q` Ü TČóĶI\Ģ÷ xŗmD½Šn#µøŠäŽ²dŒzę59 I2Ž1טs3‰»¼‚IJ¢0uõ§Į=±ŽX£|ŽsŠrwč·z†¹¦išjŠ$eXYņ§×ޕ㗗/«Ž3Ķ,‰;’Īzī9źM :żkMÓ욄į¹gÜQ°č K¦xŅßEŌ–[yŒJß!Śx"¶˜ā=[IÕ“x®“S+t™ĮÆ?Ō|E=ķ“6²ĪnK…Ü~ąō¦Dö8±xRe&Põ_ZµtŠ6¶Wßҳ›1&Óķ`Ū3‰ž@8ĒjيéÄ.„ƀÕ\“Óń ŗVÜäüĄõ«ö†?µ eF‹#‚kq§cÄvi-īųVŽaĄ^¦³`ŃRī|˜ā³™¢©ÜēÆbKbóĀÄæM§°¬©nŽī†KveüŻ«1óheG%²);U8ą÷­k=KOˆģ‘Rˆˆ «CBiģŁh29Č5~(Ap—AŌąl?ĆļZĮXĻ•’\ĻŗŽ2&$u^ ūW/s©jqĀĘčĻ5ø?\„Y žŃYķćQ R2yhƒVžĖŪ8 ցœlŚ…ČŌ'žēĶˆĮ#åü+{ūEŻ]¢y Ę6Š1<ÓpŖĪ†¹ĘįŠó/xSEńCŪ’kéö÷qFzģł€ö5.v6l‹Ć> Ńü9®ŽÆjʧ`ź9ÆSŃ­u"Š»(œU˜ž†§Śó‰«č׋‰Œ*NyĻ¢ĘėO‚Żć0Ąœ3 śPę.f^[IīĒ›ń,“·¦qY2ŻHaŪ†Ī>ZĢLÆ4žc¬nwqŠVōś%©·Žq2–eų„a­š8W)å†ÉćÖ£ŗf½TFƒ$īé8£X6w!Š.ßģuo]čūrj§p–ž"K³©¬’ĻžwrXÖ‰¼fqŗījˆˆa’$B6ąõŸaį‹÷Hg“Cź;ĘE™q3 `÷±ZʝŒjK”ŽéwĶØY­‹Y,CåpŻMP•“O˜Ew² NgščŽē$·4rK±ķ_(FOŸg}zŅŪfŲFNyP üOņ­‰;dÓäÓ¬šź TcŒącšČ»Tøżė Žž†ƒ9LāõR"2 ić–LüŸZĆ“ÕL©o?ŹH`€ēš8 ØŹę„'’Žxg¶ ±†ĒĢ?˜­łµ–·"o5giæOJĄ‰®„čķÆed–D’Ūćļg>µ”«%„ÓÄŠœc‚{ŠØīfՍy®4BÅŲ™ŪŒ‚+cĆQY\\[[IsåZ}Öbrl+®§e„Z@žD‘ķĘƒÉ5ē±X[}ŖIo$P~\œ‘ļUŹ÷ŠĪ„öH’(£yWv S«ķXÖķ§ Rē‘ž¢¤é§ń;ąn”gį=(ų†’[ÓŲ„GɲB{mQY×_ ķ5ļųHnÆņā ēw„F£1³słwÆ~GĢŖģó-gą§ą{m;W¶kÉ4ł-ē +œ÷ō4f ī-žŹRŽī0nząqJ2¾†°¬fŲč÷zē‹bĪĢąŒē>˜”¢$ō><ńwŒÕ–KP$øŠ9Ż<^ońKTÓüwą ō ķ–KŪvŪLęR:‚{t)•čĻ“$“]^Ę;BĪ>QŽŻ±Z–uVHU")Ą~G!O§įA¶«C×tO é:vœ¶×E„Į~IqŠ’“+žńW‡PéR&a¹¶›)”ģ„g(ŃéŸ³Ē‡4}Ā’T½œŚų‚å?ņ8õü2+/ć” ų{ĆW:źY¼Z·˜cW^U—ÜuźEfĒŸ=xg[ŗÖÓ öW„ģu Æ?Ö¾ųrŗ×‡üGiؾ¦ZŚĘr›FŠ6>¾ÓßÅšIdåY°?)ō÷Ɩuoų§ĶÖµéÅ.V#°DqZqÜ\Ē›æÄ«ŻWŃü?#źm R‘†ĀØ'ŸĒ­}™š§ÄŚ>”gg=Śig Ü2°’õ×BĆ™æµ]Š¾čś4»Ė=GĮĶ"}”[–U#ŽüŽ•ą~ń焵ģķSPIu+)‰‰ cOåõ¬ļøÓ>ųK«Łčm©^iqĮØE8)äHrwą}+Īæikh|J-ŠZ-«]Fѕ·įb¾ŸżzĶĶ‘&|]ąß…W7¾ :M„Ä1ø bß'-…č}jƁ|eįo‡ ¾šŒę›O2FŽåS+nʼnž§ŠøŹģ‹©ÆĖcć[8ķté öčJ¬Œp2{ž•ęŸ>éž&Õu/‡zˆ-ō«±1Š$—9—'†ńŖĘ£Ō÷ŪO‚מ#é6Z†qØi-#,ņmŽ«œäńĻó®'ćHŃģüArśtvö0H €‡…?NßJ›Y ›é“żFāāÅ͌åĢ‹2™ßßŌWŠ|izŗ>¢ś¾Ÿk{w*ybI£ Ēr’jŗ¹Iė Õ"ūئҀ¾µßLę©k•ŲĪ>ó™įGzS$įŌ,{>\zŠĢsĘ;XSDqģbX3“ĒJlQ$c›<‘ޤ1…ŗ@ŠÅ™Wh#>õa%V³Vągڃ¦ź='ffŁJƦīŒ}ėś2’ƒ~æmoųV_5?ŁSāTöŸšŠkĘCa+¾Ą²œ#t×µ'±×NGö_¤źŚüžÖ4/“¤ž(ИOmå‚~ŁlNå#ź1łŸJöm7]¶øÓō­o ¶÷h”÷ś7§5ĖQXŌ¼I,Ö·p0‘æœ/ų.‡ģ]’ φ?įnų7J‡É×JZjĪSäÓõ$\Ćq>_4)‰r«żīxĄž* “¹¶{½Q±nÆi+[Ü@zÅ"±~bŗŻźėOH’t/ ·Żج¦Š= xŅīÓĀņ@ęĄČŃÄOHÉēšÆœ“\IŖĶ ōqĘŪš]:qXN=Jƒč{E¬é©€$%™†Ģ‚H§į‹ßü?ń6Ÿ«ŲéķB7 \īó‘sōļQbŁśI|–÷šž»„Č.­®ąGvQ²cęZ‚Šŗ@²…lõ®ŖlåØY›U–Łę`Ē &Ļ#Ö“FŠ—FC§ŽßŲźŗe݇”gIƒ0~˜ļų×Ö^'Ó#ų³ą[»s Zw‹•ģ÷ ĘģńŖ,ųŗ?ėö³ĶoŖŲ\ŁĖ †6ŽŽėģk¤ÓmŅŽćÉÜ̼žŌ£Üō%ƒD[Yğh#ƒņzű¼’GóXgҐXģ —ķ( {Uˆ/R7’ĪémXgØĶ5ėņó0‡—,;×,Ņ6õu'åS=`_mUdĻĖĻ9„µ¶“Qr۟Æ>žÕ‰ÓŽŌK.› ĪŹĖ6ą f¦µŌ¬nAQõšĘ©źP£s‘Õž2ųæZ󆧫4)]€üø®JѼOć-Fm7OŽī5dĻ喁3U,ڶ’J½Ö3ƒ"€2{“ļ^eIŁXņqõåĪż _öVńŽ8Ó¼ā­/]G@mįłsńŌ1õ­o…÷‹¼ā-KĮ9Ń.ō;Ÿ1V»ÄW:›Ųųƈ#Gé×Āż#įüѼ>)‚¢2·žY^+•Ō<„¾„xŚ4ķ5Ŗ»mēpÆ[+ŸŽÆ3ęŲåntIģdrѲÄÜätØnžĖā}Qń DAeµĆ0Īńž•“įsßĀfź×gČ?tŲµżö’āßP“ŹWz{s\ļĮ?źß |kmć‹;{¶¶·&öĻ Ė/| žÆ NĢūŠT)b°s”Si&¾õf~øi^4ŗÕ“+ųā¾ŅēO4Ł9Ąą+’_ń®ūĀßü=ćŪs•iØi—š—¶wcC'qÓüžµÉĢęy|šŲ‰įē¼Oäģvčis²xóä|ÄšæZüż¹ą~*ź:¬–šœ@]yaq¾6ČÜ;b» żÓī¼%×=„)é,į’f_ž-żŸ|a~jcIŌž#ĢR Ć0õečĀæhtKߣóž ;ū?xÓąOķą« üXц幷ŒyÖrˆļ¬%a 4yļÜ=¼²ŗÖŒß»=čžOš¹źż#ø ¶—ŠņłrÖ ć”—,—šm^ś[Ó_äļćWģgń×ö4ż ļ’fƉŪßŁÉŗēĆ> P~Ļ®Łg†é(ćr“sŪ uŸĆzǃķ. Ō’HēLīܽy8Ģ,©ÉĀJĶÓų‡‡Ī²ŚÄķ*‘Õv’ŅKäÓ<ŽĒWžŃŌ.'<…r¹ĻP?śõčöb6S"c$ הĻŪpÕī®iĶ"4q—‹…䕟 ōü=Ó,ü%ą’ˆÖVöŅął7öRć|O¼øē^ÕqбުÜā[`+ž?:ęžŌJÖÖ÷@ ŻČśšŚ›g‹Vœ[4|7sØxY/-t+Ė*Ź`DŠĄåLŽź8¬½Į·~/ń„¼)¦jÖ~‹TÕ ²žžtܶQČŲi1=ĶuAžUzi&Ņ?Pßöų•ū8B9xĮ ų…r²żƒ_·ņōķBA(ŃÜ ѓ²e[ƒœV4굋9|w£›ąšŠĪņ95Z“^WŗÓ³Õ;»j“?ŸŚ3ögųµūųā x§\°ų£š½ļžßFń^žą™-ń˜žŃIV#Œä÷庚:Š-®t±$3‡ »x9ĶrT+³?pš’‹)ēYe,t,š\ŃfI+Æņņó"҄׬Čģ%MŁĘ+¢].bMķĘk'©÷g:ž Ó.'».~lē}ļa\~£į)ąĢ–āT ×éQ( UdšV¤±Gqoq#G*”jóżGPg½’īųn©®gF­ĪĖH“ČE}ݹ­Ą5 ėś{,nn !3ü,;’:Öó±zĀHņ˜t{Ÿ|š’‰ œrź–&kÜ œ€[Ū9껇Z”~.šŒšN¢wńFb 9<ž?Ö½Zp?ƎµY«ķ&\Š!¹šżĀXļ}ØvŻxé_o|!ų«§2YO80Ø+7»Ø»G ~ŅŃ÷/…|W§ų‹LAÅ«ü’Ʀkģo‰ßõ’‰_³]ŸĆ+ūmRm&ęÖāÖ÷ļBpŖĄ÷ć>œW§NwŠüē‹ųnŽ3ŁJŗÖ”ć8łJ;~ Ÿ%ų9mdÕD‘Ź-īIQĘkŲõKQŅŚ5š&’ß”>•mœ“ąŌµ0Š ™µß]YĻlĖ­ eYŗdc§CĮ®:Œżī™ÜčņMf’I:y‹ņķ=« \–;ėǘŻŠ5ŒoŌ©EX³įųm­üČå$G+|ŽÕŅÉ [[\ˆ“ėƒqn~mĒ®}+¦;³ĢĘW8óOduQŪCmnR"Uˆę°¾Ēūē‘ŪēéŸjöčSģš^0ń—öŽmR¤īįīĒŃ=žz³J+#…w~ÓŚiS ˆĄöÆJš?ÄI%dkĒ„Gn‹‡?­5m&yĒGgŗ#+hyMõ; 7NŽ(Ÿlœ“ŽEpz彫ŻĻ°’ `qZ˜ŹCm4ų"ņČpĶ×­Ś|7n’<:š fW–ĢA±ŒzzTLŠq“ēłÖg5A¦Ų®ęL²÷ÅV¹Ų±óŲֆF2±‹?.iÖ×lnJå¶ś‘ĶGkg , +ƒĮć„kJ-¤¤‚TŻéé@ŚF»ß8cÉÅg›ąŹ_Žć@œG錩ŖµĮ·…‚rŻž•ŃZxś(×ķ+ŗLdö „@ź4ƒe$-ŗąž7ŒēéPĖ`P“Nެå>ĀtlU‹HŽåµuÖ––ÖęY¶[ąķ\rXśÜÖfR‡cź/ƒ_²ßĘް<śfž š‡˜źś‚gē’ŠqŽ;ū×ė’Į/Ł+į7ĄŻ.+o éxÅ2H'ŗÕµß9—ž™ē ŠAö-Ø|M}¬Ż Ū“Č\ēō«ri“ų²ŹO¦Ūēļ©Į"‚$ΊĆIÓ<<‘Į,ǬŒ2IśÕd„iś“ßÜ^–‰ś ć…óė7“^ h$–ŽՀķ\„:®š©*é„õöā²?÷O„acH»–ōéģ%øvK†F:W9ŖųŅ×O“øŗńöŸ éé–ó¤;wc°õ4ŠŠ¹ń‡Ž’j/xŠĻRŠžiķ”iĶÖ¹~ €£ų¢×§ėņƒöœ’‚ü:ųA”K”Žėś‡ÄlgYbbė^Äą/Z駇DaŠžtæi/Śßā—ķ%Øł¾1ń6”k¦#·ÓįŹD‘öWįŽ |•ĻŁ×lQĮŃS×­FŒŖT±AäóK9Ļ·„DūŁ£`ß(O딳ͫTrÆN¤*yP: Ü#5‰ĢŁv+dĮu'wB=*āYM)Yr8ćč)ѧo¦«ae*ŖN9=ėµš?„uÆx™|ą/ ėŽ0ńl’,ŪŲŪ—±čĢGR“±q‰żžÄ’šBų×ū'āGķo|ŗ…Ö$x4NÖsßĶć$Ÿjž’>üųIšĆ¼¤xKMUn#ˆ _ĻQų“\UjŅ†HŻ„™äšė©$ņMC£©Ķ#łģ±ĄŹ£ø®Vś³NRķ”óĢA™ąśfŗ(µ$Tźž‡k)H9Q,Ļŗź~^žÕęš÷ˆ–ū&…Ž6ä5a7ŠÖźxw§y!md>nFīkåĻxń ›Ļ»0ķĻŹĒŸĀ¹åNēdU˜§ęés]źd¤~ģ7ĶĻQķA²höo ČĀ–īSēcõŌJг²‹”9<ŠDŲF’6߄޵n=?Ė…•ĪčŽyī“JF*KœžZ܇\ż×Ź»±āaÓŠF‘ø0'­gŖŹ5Y­O•ĻŻžķ'ŸēY5„Äk #a$P4yUēƒk9§ĪI#=ŖĒ…¼.šµģ–·SűŪūćĮ Üō#¢Ż^G Äm Če`Šę­µitŪ¹×O“Ė‘ÜØ1ø{Šdót9}{MÓ|QēA«Į÷|¤ Īkå|1ӣ֐ŁĮ¤‘Ėŗ96ĄśŠm÷=sJ²Ō!Žo1Ø"¶­­5īĻŪbc8(Ėüc)åŠöĶ6Ķ—IŠdu;”db¹iĆŚŻIČUĻĖÅ'.¦&uåĶÅ“dą˜óųf¹eÖŅYĢnV[nāi˜¼ģĘÉ#óžAĪk]6x/„*Ēķr3ĮĘiņ²"]Ō“mLZ‰bŒłˆpry5›kB'TYW‚÷JĖ:}{Q:ĮØĻ——ꫜÜb\F¶°ŹĢ8o»IÄ;UŅ®­.”†p0w!Ķ[·dˆŗ&?€*]^O{Cc;żŸ8 ž*厒öö--ĆŪHĢq€~e ¤ūšvž°ń H“\¤ G Šóhė£j&ÉäibF]NAüEZ˜äŃ2Ļ#Bc•Ł”cڬy€%ó!ZÆhg%r£l•U bE{š†Hē’5‘ŌŒsėYģĻIšę›öH§†+½ŹG͚ĮøŌ|»©R4Ś€ąŠ ±ŅAŖī…Lq”!{wõ=Ā37qėO˜ÉÄĀ[Äk––bķ _jė¬õ‹-AV•āU!NWŠIĢų’ŅÕog[I·Āå'ø®~ŽäF $héō¤³Ås;īŽ#s“Ž•_RŠ]ń%™ŽVUÉķ¶µŒMąīq:…–¢Øeå”Ō×=”ė?,o&³Ö.,otR–Č1 ēĆ”āŸ27åG[i¬ŻĮpāš²BĒåē„tŅßBŃn3‚¼ SĪsԊča“)•w|Ü »2Ź ³s˜Ž’8ˆī{gsM¶ņåY% ¦x\QĶ}ī.-ķ'“m‘ÄF:Ņ¼Ńķ¦h·łļŽ””¤Ė—:SY@%d#ŒŽ)t»÷ó#esČ"²”]Ävź¶×“FĪ}}+™»Ó-„µcGĆg郞ā9ĆŖÜY'Ł6Ė¹ĒŻéMeuuŗN=*€²³ 6ŖØŻŠę­Iq"Ä`’hĢCėЧ¦Ņ٠ÁŠœji•Mņąüč4Œ»šŗ†„jö±E‰˜Į®~Ō¼N|č<“nėI¤h˜ķJņ³: XfučÄs\…µö¤Ė²9!Ü~L`SĖ7­s=¢4ĒN{śÖUŒ:Ę «cÜsņ@õ•Jż×BgеåŗĶbwõÅ/Šēѵ¹”š;h ¹Œއ$gą(!ĀKā+ 1ūJ“ ³LÄa½[Ӝš‰G©Q<ÆR‡PŃuV·…Zęåy9­tŪ’¾UŌ-µ¾l7lÖM§s:ūĀ—.ĖäĢoŠ™Ø'šåƟ Ė3«¶Ą¬ż˜4ā y}Ą9Ē@+Į>$x—U³ņdÓżļ·†Į}kjtõ0ØģGšĻSÖ.åXõ»‰.ŹŹŒ0½³_J[A› ’&WV?ĆÜÖĘq‘ “žÕøŽIļ'‡Ėžį4³B†QlXü½ó’•$Nŗ^Ÿr’é!ŗv5„«£hŗ“aUę$ƒ·Ś…N䏵ę›ĘüQamjśV«åµĖ#,K'Ķ=}ŗWŌõŸ"WfŸWHoˆ|!.ŸÆ,)©]YæŹ1œsÅzˆ>'Œ¾Ł?QŅåń<$ÜEę9S!įBśš:#±“6>)š޼qš—űjŗl.€¾µ˜Ÿ, l6Gžµ~¬éž?š/Œ4”ŌžŃ§Ż-Ģk–ńa“œśÓ”MóļÄm7NšÓł–3Ūy21d]įŠē $W’Y®„£“ž*ŗ³G„7Ļ$c•_Rk&l”4~Öü«[[jw×ΆŹH¤¶Ä‘ńżć޵å ×¼=eįßC6%“ŅMµTPOĢrsĮ÷¬ļ©.'ń DŅõĻ Ėk¢3čśŲ1ĘU—ø#±Æzż“¼V–w©¢źOäµøņ¼É°rļĻ5½5¹‹z±ńśĒÅž"æn­œ¢HcĄ`8 ü«ąŸx3ʖ7Wįō_>Ł® %ŲOŻąžUšVЈČõĻ|sŅž>Ÿ§ė0yˆ¤±pŹ{ąŽĒ5ö+ŲųR=zÓZ“Ņ4č4ėՆįĀєœw«Q4G„üI×µ{ßé1ŪŹm|°öÓ*ąpp~˜¬} Ćśō²źŠųĆN]SI‘įLq×5½ ·šī“ ė“é_芭ĮtT9ņ¦k¢¶Ó­ēŅ®FŒl$ź Ā”'%¾£š¤ŪŲht^/ųQąūżMń}¾„}ˆģ¶Ż¤26cŗ“ŪėĻZś·Ćńü1ų½šRÖÆ!óüP h䕎:pOæ§įS+ŪAIÜųnŅŪķWÖ¢X’Ńw,œķ)Ēņ®Ā~±øŃ-õx5 k‹ ‰ 2ąķ>ęH:’ų/ĀÖśōžį{ p$:“ß÷Æ?ųµšfźĘėČ>Kį[Ė|ą ą>”Ó{Œńƅšå®‰āk_¼‘‹¶ŸxP>V ńėÅ}YūAüKńƅ¬_ĆÓÉ%ФM#>ϳą`ć×µlR‡š^ļĖšbj¾,½{©VWy?7 ž‰ŸóĶyMĒdzńFæ£>•¶r8 Ÿ7”;.GrišØō3­ģu‰wjzU©»!L˜ F}+é‡°źš¶œ‘źv0[j»3婞é@Hć>#¦·įUs.Ÿsä°fWĘW'ą­_ūBĘ7×RH7‘–a’¾åh&čĘÕuĻßKwŸi0Å&ä’ÜŅ ėņž+WFń·„½ÉŖßtéĒPŗ’ŽTÓŚ «,@žæĀ‘¢3g’ -~OjŽ'ŽīXī·‘¾}Ė‚HĪ /Łkć߯ÜxkS{k˜dĖŚ Æ5ЄϪfŻG_š‡ÆtKÉcdb äĖÓ×5ō,ž ²“Ōģg–aråUšHCŽē·J §¹ō•ąĶ?ZŠ;©c–éü’ä!ł±Ų’*ųö”Ö ox[Į×^–{»\“wQş9d#°õ®yocxŪ©ńŒæf-kĞ/¾»šUü¤æ¾ņ*68=xōöÆŠ? ėZ޽į= Ć^2Ņ,5Cekœ‘O*0»w.{ūŌ©‰ŚĒåĘæ‡Šhž0ń$6E£ņ¦*Ńąœ_.]ł¶R}™‘ög±Ž¶§#9D­}kö„T‘¼Õ8=kėŸŁ‡āY“Õ­|#ā+@֌¾\Ee ÄĮyāŗb“±‹>žŽm©¹FN9ÅNÆ+˜V5!3ówÉ©”lcͭφ’jKaāX>ü'Ņõ˜§ń¬2Aā«Œw¹%…ķ¾x zŽ?OzüŁńļ€ķüGį[Ą“éĻwk*=֐ČsåJGĶŒćŌ Ę ™Fēņū]ü„?5 »=.źĻE¼”—ķMĪå±=käK±(Ź®x®ŚRÓSšp*…r|Ģ’Oj6“ø9b8#=kc"ƃ”eĘ Wbß2Æ,;g  O0CtØĀFc6zā€,F»°ĶĻJ1+ŗŗ.Ō'ųØ4¦hDé†=¾•±¤xÆ]šG‹|+ń#Ā2¼S¢Ü%ĢL®T²ƒ’½{ąŅg}#ż æaĻŪbڃömš'Ēæ Y¼Ž=šŻ¼vž%Ó’ņÓn$8ī@ÜĆæ ;W駇¼G¤IØiśe­Ąøš_‰-†£¢]dį%#sFz€śż1\ÓF͵”j_kó­fF·½¶&9T¼C\oÅ_…śĘ?x×į_Š i¼+®Ų=»Iß·“ŖČ‡³+aī£ŽøšŌGłā’ĮFæe’žĪŸ“Ž”mā½" {{©žÉ¦“‡ŹŽęD?,ÅO÷×k8ę¾DŅtŲ’“ Šź!$2¤?#YTfėc©ńēĆē³Ņ̾Šļģģ»ęI_˜śōĒįé_(¤Mk©IˆČźŲ,°r u=WĀ›Å,ą.ąG }IfŠėövیr–żŽĪOÓŽ¹e¾ƒ=7į·­ō˜Ūįī«©Acn·%¬ŅvĮg#3õĒį_FŻĒpl”Ō!·d“R8Ī=k²…ĢŖDē®·J¦KŒ…č3[Zn„·iĘčó—qÅzP}NID†ī%“ŗ/ %T…<śV¾›uż ķpü«ÓėFōø”luKįń|Š·™ĪõŖå‡€-døøŒ© ˜ŹĘGcį’‡ŗ'öĘ¢%WhʶׯJõ¶–Ā×Ķ’ĶvI€vŸjn}Ž~vÓµˆ‰žŻP§rĖŽ Ɲõm=-5Č¢P6±ą RēĢøg2åŠŖ˜{Ts}ŽÖé%Œńǵh„qN™ŖĀSi@Ī9ėU.ļ.oRāĪ,‰NL`øÄÆŌņ xÆ&¾™/cv˜1$wšÕø³ŖÅ;zóėCFŌĢįg(1ēæ=kOLÕ£³}¬<°k”¼em‹WÕ®om#‚XG•œ£ŒWkö»)¤,Ėź­a±”„$É,'Ī9OŌÖ;K‡`™e<})MĮ’Įčf1 ńõ'ŠÖYńŽįˈ`Õdevł› 0ՑÕJ8„ų£įé/īäEP…ȏ̶ pŽ0ńÓėQGr:Ē…lYI*GĶŽ+]nņy/ vxHUłOŻė\ŌCVŪĒok-äĪŽ^Čśę¹jĖ”ģąč7+#ź†³Ī±ā%±Ö‹†”Ć[¢‘“pw^ńV–ڤ¶mw ķłIŻĄ?ēÅQŸm†ĀrčŒ/x‹ķ×Ļo§©LžҼOĒ:µ®‰jõÄ{ŌćŸóé\“ŸCźrÜ>§ē׏|sż„{{”ÓI$ 7W!įļ_k6·w:½āAŒcæ~ƒĒ6¶gźü9–ŗ“H÷/ŁĶaöW±ŗx!µX+oP𦇫„ä×v–ŗ>¦łssn˜·mą~51§ÜżÆ.ĖÕ6¬y«į¹m,¼¹Ł.ÕF Ø1»ßÅÅ,śtāXŽFˆq޵œéŸ eņ;½[!ĢÅŠ‘Ą$SļuH“éä)(ņG­sŸWAč&‘¬}±ņ§z±År_< ’ „ˆmķ®|Ż#2³FrÄq×¹ż*©é+œyŽŚį*SīŒ¼GŖC¬¦Ÿo:„ę”n‚0Cm, ōoóŚæxæąžŸµpxIš/‹ī™,“ök{O8īņ½½×šö(NĒą“hr§ŗ?HµµŅõ‹‰5 &žĪīŁŪ?»łGą+"ŪF·bė 2ĘrŲģrŠśœ¾½•ˆ’i [Ÿ Ķ*Ü-Ī—:FÖF#”üĶ~\Gįu²½{M06Ł&U\’Ē{7$žyÆ7Ųśzx‹Ęčūrļį±įŪūĪóU½kT‘¤XĪŲłé_]|=šÅę›&›ā[ŻkYķaU™Šø¤žB¼ŗ±[)šf“åMĘżĪ;Åw—śĒ‰/-tŻR}>÷>m³#ķ(=}ł­üSÕ,‚ųcć^‘oā=&+Շ2¤Žß×?˜éQJ•Ļ‹«‚Ji-Ļ£|scka¤é—ß 5ŌÖ<74BAŁAĒŻ?ć^¢|C¼ÓÆBÜß ĶŲņ¦Źīē¶zׯBšG‡<µ„©õ„õ”ńҦ™²o™€€é]—‹õūiÆąhgŠ ÉŁ!VĪöĒA]RZJƒ·)ó.¹occo{iā=o÷)ņfW…»0=Ē±Æžķ“:Ōf‰Ņ5•É Ÿ½ŪŸŅ¼¬LSģp5åٟmžĪŅĶ‚!ÓU„VqHÉēŒf¾ØŃ“kkšś(bYeĘ÷P2HõÆQŌžnń’†q[—«OļJ’‰éz1óć $€)ķėļ_‘ŸšQŻ*ĒLż¤“Éā»3És¢ÄœõeUō®ČGÜ=#’.?ļ’é¹iåį¹ĄNµõŸĮŠŽ-ų]{/ˆ¼ؾ™­G`č9}£ ų½9rŸŁ|W’ŃĢ00u•ć4Ółœķå’!šķUąŸ…_šµ’‡>8x[V yo=Ø 0Ūµå†N» qĘ2G8ųž‰ā Ēā©ĒfL‹‡ >÷½źó c«.iod½l~ ĮW%Į}VœŪp”š~MÜņ_žĪ’éž©ąŪ²cI£ ī=pÆ ‚ę÷Mŗm>ś­„RVƒ^mīčŽĻ>³O’ZIå…Ż„ä%ē”ām{p#kd³)ągĻ„(IŸ Ń’hŅūG‘y ĘóY¹żöa-ĻCT\ĶĖy<±ČVņ>P2gwP}ź£n§™‰o”ĀjIzŽ šöįZåī;¼ .µéd1‹xĢ‘œsÖ·¹ć{6¦å}Ź·–¦ūp śWż°Ņ]łVīö÷pJƈŲ(ąäŚŽ*ņŠżHų;ńs^ų§į?ųFüW¬»kV–ÅĢ‘¶J€ ūąSdųU'‰“ū«…½žĶÕģ¦ßŽ×'O~Ü{ūW©J7>'”I¾Ekžżą] 5ķ ōP™uøļ“ׯć_=üXšUŽ‘ØÜZ_éņ½¼ØĄø ģözmZU9YśÕ’Äż¤ü'ń'į–³ūüg3\›K‹}KĀRĪ@wZ°oć\’ń) `Ÿē?ö—żš¼wū~Ö:‡Įč²i~æŌ’“<1{?g¼“ó7b6õ€GQłS©Oš7]Č8E’cńž7/ƒV.’i7̽o)JŻ#cļvĘų:ÄKqnuxć$Ę_¦ŸĖõÆŃoük„Iy®‹.²ÖĄ¤ū qÉĻ r+?Ŗ7Ŗ?kƊ…HJ•Ex³ļ’žĀ?“§Ę~kžéZæĮ«©!¹¹–ĖU[–øÓ™3“Ā0ąąšGqŌWę'ķŸūOūųļÄ~ š7ˆeń§ģ’~Žm¾×3\xfåŽ ½ĒVu›‘Šņ2n¾\·‘ų/x©€Įń$ņŒ;żÜ„Č×iŽĖńÓĶząqnbŠx¦RŽ6ž¹Æm·±ūVSrł‡€IĘkɔ,aĮœwˆž×įė—7 Š"7ĻžŁļō­ĖE[ŪtņĄ™dPriø”į+°÷ø…'·|¶ÕūŹ}k†‹Ć×|¢źŲ¢”łK f±•'aE4E:Mlė ’ƒ²k'Ä myh.ČłŠŒ Ćø5ÖĄ§M¶‚KW!²C)=ke#ķrøžé#č߃;¹Ń¾•tˆ-§Ś[!XōĮÆŖ”ų«xx^X¬…ōū„ł½‡µtSŖNc—©\ē“_Ō’śŽv‘VL¶Ń÷E}“įĶrĒ_±%TŠmu=kƟCįqX7§CĶ~$Åmįū ‹Ø#ŻfĒ=«ę}]·0¶tkF?:ŖO„D™źeš÷[ć‹[Ėd½H‚\1&1“^Łš‹GŅ> |8ńŽ™«é¢÷V²·óąx܇!{żÖ,÷cQŖ|Ė”óŻĘ‰¬\im-ń_“DÄ©Ŗäć„aĖåŽÅgmꐼI¬YٽQśšān»ū?~Ķ’üK4#Sk¢ņĻi;–&Ų@Ų;ƒé_ˆž՛W¼×5É-–Ø^Ü^’ø]É"³žÖ?/ąl/?f8ī­Ę?%§žŚ‹^(šżŽÆö+­'T}R·ø[ˆ¤UĻ#<cšūöÓLż™> ~Ķ .ü]©ų_ć}¬GķŠ °½øą”Ź”n™#š¬¹SÜż[…IūŃęæņģķŖÕoś&‰i¦ÜÉØ2zqŸzŗŚm»6ēœę„A“¦Ķ3Ibcu»ŗ‚®jT•߇¤&}"“²Y°r ¹ź+Ö„ Ć5±M¶mŲŖZ€ä(÷®ŗm'€JX†äŠė‚Šņź»ŚŽ[³ä:8SĶkE Ærg·bįn+hDā™·4īŃ?”c‘ńČÆ)Öć{k†V!rwV†•ˆ`żÜM<ŒsŽ1Ҧ·¼Ž¬XńŽ3A“w(É+ĖęnnńļM„|¤īĖӎęs} 5;1‘ĮkP rۊ(ę·2ŚŚ #;pzVĒŁ- ,=3A”ž£ŽĀČ|Æz|wÖØc ßõ¤Żˆ‡5ūīČ®p+¶Ń>D×P­äĮA G÷¬åPø$z,Özo‡ÉāYxܙĆūЬŗę–PNķ²cēkPŌ™ąŅåÅÅ”@Ī”Ģ_ŁÄŅK8Œ*ž„/h)=Ēᯀ|gń“Z·šŸĆ- }FńŲ,·r)X-ūLkõ£ąOģ;š’į-ŧ‰ž+Äßüs,(3mfƞg'=…W29äģ~†hzm„śGtZFŒpŃŪF„Gl/jō(Ģ·ŃżF¶D 1ęć­5$s³ Ņ<3ikµļ¦k»¶ä‡=? ėc!@Šq/zS1"ūU»īPw`ąń^AćoŁh7ĶĘ”+øHŅ%Ür{J"ʛwØź±,·H¶6gLņ>µ Ž–r^œ "Žøg\œÕķ«8¤ś—¼¹€•Wqō­Dµ*—={Vr"-³ZÓH{•2b@ź~cŽ­?LŒI“"[ū™Ü$0ĆóČäōG5-šĘ7?[b’ų$Oķ ūT„–¹ā½ūįgĆw”I-åģ;&–yŲ§žpyÆė?öQż‚’gŁ#Ć1Ųü4šĪ™®xɕ~Ó¬]@W`=HÉž\÷®j•ˆĄśītvŸķŒŽdųĮAŠ} éҹŪŪ›»™Lča„ø®)JęŖ$-gĶ$^lžµ‡sg$Ąķ˜Ą}@®y=Fs3躐»®ŁS#w^}뤱”*4Sc+Ó=«9JÅ(˜zψ¬R¤3ß­|įćß]aåV4Č*[ƒX›Įt>Jń§”ŠCäɱŗ3“÷kä§¼ųą·%ĢĶ܂6Š@ųˆä7¦źżš—ķc±¶D³ŠŽįP+²ƒóŸSDŽiK¹ķ~šļŲī#šhā(½@šśĪļMŽÄYa}»YMDe©39y#ē܀1ĪjMGÅZ¶‹hėij¬ d£Œ­ /ų+Ē:‹ģnmī­æ²õEo,«šśŠ„āĘŗ†ĪęÖŅķėi17\ŌĖ©į3Łx‹RM÷—ÆspĪXcufO=ī’†Śõ ·ėøŒā8³­šōšF³¦ /PŠč䫤mœė] B™~tÅi׌Zéī#»×#ØÆųńĻƞ¼ŻŁIs&ଖü°ü:ā‹ČzĻĆ__ üį՛J¼š-R<Ē$R Łķžk¼[ūkˆĢf䢶BążŚDŹ‘ĢŽ[3>Ō)$€ü¾õ”¦T„ŌĀ÷Ś:PfгYŖŹķg6čz®zÕy£ŗ8Øz¹cgt ŻĘ»ļŠņoč÷ćSó“›÷FR”Ę%QćA²ļzÜtÜ{Öö5ę›t·‹ŸzüŲē4ČeźTŅ|EkØ.™ –FAźéé\Ä&ҼGrn|; ŗ]ņøi×*§ŪŌM{2֝wiž]ü+öå!wØąź?*Yn™yUVö#­bŃM.„±ÆjÖvl;Gį# V.›ć]^Ł5•[—ŚģøGØŅ3Óc­ńŃādŃo$»³`Ž0sŽF+„’„~Žpģш×vyļCV$Æ„nĻW†Ę;Qs¤±ūį¾hŲ³é^›}b÷1$Ø»EĄ.;śVdsXė4-"ļQŅ“ķxI,Pī¹OųdÉŲm#µtūĢ/õŖ-;xĖMń“vČ|7 §˜ór0=±G‚Śåķī_ÄwB" ēŗ|¾Õ2O”j=ŽÉ|Gm81FŽdČ{tÅOś›,ødĻCڲ‰_S»Š&YtŌ ‘øŖžõÉh><ĶÕĶ»G5½ĀHced#ę©ÅcŠģŅīāŁÄĶ$°FAŚĆ”Æ.ŌÕ@ü?ÜM©[^\¤’6éF,Œ=³Ņµ«Šō.oķd‘vö=+ē/|IƒĆž':i:‰µeŹŹ£r{ć„0:­:ī+ø¢øPʌ7 ŠæM,Œ"/“Ē„"eX[ &•ęĀ“Ÿ›’iŗĒƒµK;8µk9ī-•ų_“*ē5¤cŌÄāµIÆ­Ń|øüŁė]$~×[K[ÖSä°ĄĮĘģUrö4¦O¢GfV>9F^•į‰/KM4 !'å^ä{Vv±©Ėų³ĆŽŽĘŻ%²6@~G¼Cʶ>6‚Ņ<3Øl½WČĆä”į9U¢$ųmąų£N†K›»_ķžd§8Qœ éµM3ģBhę™c¹Aʁ÷©hdĪ%–ą>öa·Ž®G<¬UēÜv¢:uÖ«=”-¼ĮČ“\Ś]I$­4ČŲćÆU6€čģ5ęÕ ’ÖāDP„ŖsФńė°?Ę dü€”Ü昛#zµā–l#­°ąu€›UµFö3ćŽ:ÖROgÜ[ī·lšG"˜1Z³\‰c%į­Int¬½½ĶƝĒ#āĀÖ0ĀcPŸŹ +j®Ņ‡a@Óß[ČģmōļM[Ń#„”±‹±'2‰¬nn­c˜”tv#zĘø•ćwhAEēµU‹$ŽžiĪøĻ+Žhézś¤Æ Cä÷_„cOT¼ß‰’+“śÖQEGĒ9ĪA¦O@9­{I¹¶µ1^©‘$9ĶdųsAMÉą·_" ŕsÓ'<~5ŚfFšL ·D<{VŌ-lo– .ęĀ`żźØĖ£1–ęāĖ=ä¢ķ„ÜFG§\xjā+sv©:KÜg“Z\“”Šļ'’5óc”…ąījĪ«v¢VžøącśÖŠc³8éīåĖHēw ļLƒYžŹtˆ3Gžø¦ź§¹5‹‘BJHQŸ~õÓŲͦé±Ke«#ĶĘÅpH(EJ×r¢yö¼÷PŽ$¶n,—-å‘ŌśÖu¾­Ŗ^¼–³Ź¦'ŖÕØ£S.ķMž'Š¶xöÆ,Ö¼+ż²ŽL±;·ŹĶĪŚ{THėü-ąõŠ ā]LGR>õzU¤G† ē’6ĄėL#MŋĘįŹ˜ČĻń®v}1ēg¹¶•!eūūŸ“ōŠ×‘/ö«V1ĒģvŽ}+‚i/õ-i§m6HŖG ßēQŸcž£čĀ/‡ŠxƒSWŚē™-¤mµŚdĒNŪjO<>šž­és(·» c‚%€ü«ŁzŖ|”ąM6ćVńšKi%H$Ž`Ä}įž +õćCŅ.µÆ‡z…·ōĶ…aŻĮ!™€ž/lŠ™­ žØüŽŗų¬Łk:¾™ÆŪŹ—öSę=NsĘ=kŽ<+ńV cAÓAP&ųÉĮVcčGØę›]Ć±Ģ·“»ø„šÄ­V»[7œĶ©’AĪäĪ }3ö}TŅQ>Ó®ISäŒv­l8Ē©łóń#ĮŚ~©ć9­ln7Ś%Ą#hČ Iž/¾ļÓäš¾›ą&K»½@kbÕRŽ(]HŒķūĢOojž],_1ņåߏµõ/7SšG•?u’˜ßއņīń-ƉtʆŽtūAłg8ö„ģĢ$Łęž(ųqs”ŻLü~UįiUŻOŽō ō®£įo€u+ŲīZūL/aš<ØOJ9m±Ÿ9Ü|CÓļü(4Ū=NÉ-쮑­ŁJ'9'#ÆŸ„|‡įĖxb÷[𶃮\CįI$m»ó‚¤äqõķR‹R'±•|8ŗŽ—}%½Ü÷üī0Ćœä ¹¦ų+Ėś~£s¤G"h3§žÅ\€§=@éłUs ¹NŚļXŃo“ķI.Zå"r³HN zwäWŅvž Óüiį«‹ Bw×pä’5ć$pź=A©oݲ*ś'Aš^Ēį¾½§xŽźKė«)&ĒŪgäžx»śĖRš·¼.²ŪŲĆ5˜mÉ ƒÓ”õ§)irœŽWPŠōėI¢ÜŪ=ŠćjLĶ’f¾,>œų†õą•„Lł’óøōĻåŠ9õdī{ę—āŌųiā]DÖn![kˆAĢD0Įƒž˜ę½+R¼Ō5Iõ¼o Ų¬¾ŸJŠ·„Ø ÷‹¬.ou靣]Ć;÷Ŗžs\¢ź‘k“Ć*­Ę˜ä¢aFzśēÆåG‘›V8ÆŲ[i"–ÓL½ŠHš l÷æ:āü3šśī+ū­FŠĻ«źD‹*Įź@ĄéŠf\ĒŃ?³WĘ{ų¾"M§ź:&¦·ö¢Hć <…#}k²ń_¼Eń7Ēć^éōŲ”iY”;KJmlʹō/ŒĖ$1ž"ŚVĻÖ¦Ö“cÄ67–¶šzÜé—#dŖćvV³’.2ī|Oć€rx_S{›[#&‚C4Ā5;­Čē ŻxķPÅąx¼=bŗĶł’]%@rq³ŠųW5FRš>ćųGÆųÅŗD#PŠ#ŗh Ų$ˆ.Uzšóˆ~-‡ž§Ät—Lx&Ž[5)•Ź·Žn8ąVE'ŠüĶų){ŖxĒĘŹMNaQɘŖīfūĒŌWҾ3ųCŖ|9ŌuY^Mq8Uø2m? éR²F­ųńƒÅŽ*Žk˽*Y®‹˜›bģ*+ļ߇VO|Qkį«ēšÕĮtuū¼gó­ö:æųÆÄ?üXŽÓõ+««p«Dvā3Œśq^yń§ž­'KŠü[¤h­^ÜG²< $6z’Aöż+ ‰ŚįĪŽ+ąG„¼wyżæā_Zeß/N6ąīĘ¶|Qāż/Ćz¤V7¤%äÄü Œ¶=gŹ®L§Ń|~ń…lp=@ÆėSÄ4VzāG…E9t*yņ5•XßS©Hö’ž ¶šŚ÷Cøp÷ŖwĘÄ}ą;ŸC^·Æ\¾Ÿ5­Õŗ(9é÷€ģkĘĀ“?ų8öAµšGÄ?~Ų¾Š7x ÅŃ Ę$U„ņŒC<€}Żć*OL©ÉÉēłJń†ŚEÜÖń,o–Wīmķ¶Ŗ›[.‡$Ī.O"ŻLc œ÷Ŗ‹ Ąr»]‡4‘(‘W²>”²)LŪ±ž('Ł•šŅ·–ģčGCļSĀĖųš¤Ž˜Ļ½Å ČQ Ēz²ŖŲg@„‡&™“]‹pÉūøŠ±ŻžŽ•ėŸ¾3x«öhż ¾~Ń~ V—[šÕÜ2É ŹŃ}²Ų¾&‰˜vd,?ėLꦨģŻūAxö—ų-šļć/‚µ/µųÄVÜ(8Ģ3ł•±üY ŗžµč:äRL²Gn§ĪŒóŸJå«SĶŽøÆŖt?ˆ>[ķķm%±™†’½–ÜnŸćWWю'ˆx«Wkżiu>yī`”K a£`G|ūWčæĄĻŒz‰¼4ž»&rÉ!¼¼t`k®œz £Ųu•į ŖÄuĘ+KB¾C“¼s‹‚œWAĒ5Ōėį‚ņgĖø’sč+ÕWEœ˜QJ1۟īÖŃŲĢėōūŁągå=ńÖŗx¼K5³ģT[ü„4r£Xv2¬üUØi²«įķ‹`0½éÉć[¶¾ää?Z|ØÕ£SöWŠH±Ģ§ī÷…p××ow$’ķž޳”lSއ0¶“ērc#õ­…¶ÓgƒČtar£;‰ėķRŒŹ cˆ°Vś{Ö~©­½„ŗ¢ĘŽpčćµl„p8Ė{éõ ¦wVŸ~µŌYĒ;¢ĢŒrp¹ķLØ»šh)u*Å<¾T£§5­7ĆČnāYĘĘSŌsĶ.Sc4hoŁļŽB«[?­fėw:X‚o†@SŽōģkLāģ7™ømü:Vbź1Bę å œŽŽę”¼ĪŚTĻ$ńwʈ<+©£Ōn§Ź ĒŻ=ņy”ÆńŒÅ¾»`™“żH'Œwō®yJĒ«F‘Å?‹mō¶—xLāFŪø8źO^ÕÜ[Čļ¤“Bf?(ÉÉĪ+’­KlzT©x7¾'×ļ›J·I/Ā&éåņHXż+ī_ƒæ³Ā%Õ¾”ud$¹\̼’ś«Ķ«Tū¬‡*ę÷Ł÷ļ†|¦čČ”ķjž=2+;ĘŚ®Ÿ„ ą²ćPŪ½cēšō®9U?KĄąłcsÉ|'Ŗź~/žŃ‹_µm!Q–ØēęæĒJSāM?Ā·Ś…“Æ1čĄō>µÅR”ļR¤aĀʞåē“J¼ķA*ŻpkńTś·Œ<7sŖj1ź6Ń“žSɵ›®vē­qĪ„ĻwīŁŸųnĀMRźfŒ¼Ń‰›§8;¹ńĶ{ߣ>ͧD° ÖZŸŗų}Qó3{ĆŅM  lƒ]¬-¹B0Żž:VńŸs÷ UŹQńŸ§…õMäD «Œuōü«Å|ąĖÆŲųžśĪuyl3ÄHć? 9¬äĻg IDē¬,Ė>V\`ćīć5ĻųīŚél^åeH—.Ź>š®IHś,™Æ4ųeć/ųWXžĆS¶½Ńõ4”ßFbņ™GBQÅzj÷?4ĢxyƳ”6gķĄŚ&×V·Ń4Æ4šUĢхi™žFo^½+īķ+ć‚~źĻāy-õh•wcpĀAŽ+±U2”’Ō‹²GĮ’~,Ś|@ń%åՌF=9å,ØF ©Īå_3hśMŖųŽĘź$4›ĢPOSļ^>:³³’č}],µRĆ>nĒźĀļ‹ =„¦“{¦ŪK$h#MČ Ų×Õ~$ńV€ß µø “Ł}5¾Ņ8ź§,šé×t&1ź6Öžy øąc#5ĮŚŻŚźįmõkU[ŗé Čėå“ēv?FįŒĘU©8Kxž’¤čŒŚ¼ŗLŽåA_ÓҰ5§‹,ę‡UŅõåĒ‚­ė‘_A vGŠN¢kSĻķ­|gą¹&¼ÓEĻ‘ŏ<¾ÕōśV…·ŸYŗ‡R¼ø7S± øŸóĶG4%Ļ£'Ó4ļųnŚźą[”_-ŌžS_+xėįÄöq\Ūéķ$7ŖwĒčŲ®*Šŗ;šųøĀVg¾~ČZܞ#šæˆt »9bÖt‰XĢ:’ƒ7ł÷Æ®ōÆhŗ……Ģ:}ōW1†ł”ŽÄW›*gäŚü1Š>ź^(šµ†ā%Łź–nŖ/ ½˜f_šś×Ė &µJr_->Āš÷u 2Ł. Äź0ńұļ|įß u8Dqßžńp}ć\Ž ©ź<ĀUśÅ/™į*š~·į[É-„~x= c9ü«–ŃŽś+IJŗ‚Håvć#Æ5¬}ö[›ŖM³kÄcģ—?d–O-ŗ ž Æ&¾F·¾2G‡pyŠižÜkßc¬±e捆R>öEtP„ ¢ƒ*š’Ķoéņ‚¬½½jå”r(ČTtā™Ē^‡ÄRļAšüóYO’° ę ü¹äÖ¼ėĄŅNń<ńÅtWw}+Ŗ”›ĒNŚVųĘŗ—ĆŻb+Č¢†KxĘdG^Ŗ>õ~µų.ĆHń·ōĻŲO Ķr…Ē—Ą°5ģŠ—CóÜęÆ*ęg8#Öü3¬C«ŁĄĀ4%.Y9éž{×Uć«k?ųrßV’ÜĖ08ū£ßóÆF'ĶJ澙šę·įĶgĮž%³ń‡µ+Ż&źŚu¹“»·r’@ąäaܵūsžŠæ¾:ü/ųkÆų®ņÓÅ^ šĪ§}¶{e[ŒtČa܁Ϯ9¬ż§.‡ŅUÉhbjŃĘJ7©Jö}®¬žōPš\ŗĒÅĻ Ēā_köšjVņ¼±‘6•p9ėŲ֞»ćæAŖ*jŚM¦…«“>EĶĄāńGnƒō­iāŚŠōV[wf}Ēū"’ĮA>1~Κ~›ąŻu£ų…šĘ)w§ĢŅ,#'‘ UG$)ȵ~½ųćąģńū}|&ńÄÆ‡_dŅ|MÆiņY]Ļ·÷w’SłXƒœa¹ĪOJź§UKF ż#ü8žGŠeśFr“Ņé'Ŗ—¤­ÆizéüSų§įƎe揞4żŸ¾$h—ˆ“«†čģZ;ˆĢÆó!R¤؊ś#IŌ-õ+c¶fŽB0ø<ƒ^&&•ž‡÷÷‡ÜOO9É°Ł'uV üķi/“M5ќ淪Ż\K5†„fdvRŸ0ĪåŅÆx]ēH ,<„\_A\v>ņŗ:Č %™łŗšĀ×`€Ä'ĻĘī9'4ģLćdqSxkķ.4 mĄžÕ£©hö6–aķį9ĄŻÖ®<¾˜÷ģŚ-¾±„ĄÖÓE1h·ĘĄõą{UÄõź¾d~lx—ĒŽ=ųkńvśMkƳ³&ūIŽa`Hå=ųÆŅŸ„_¼?─^}ÆĆ:Āņņd` łxć·­uĆcåqŲdŻŃõ-õ¶‘āļĶܖ÷jźAĮkäŪ‡°é—WisĻ+d†9\vāµv<Ź•;£Ŗ›Āž«įɤ”ZŗŖ3.8Ī+ųGć į>±«^[Ģū•ÕÓr2•ĮSłV2īz4«)EŌ_&­m©É{Ćl'% ÖņņM’_‰čģ}ĀBwvēņ­Ü“l7ƒėXŸ®SHŹ‚Śio\YXäqŠWO—kß#nć”=+¢…Ÿ āįņL ńUŸ½Æ*īķ”ķ»*œDzćµjF`‚ÕÉ㨯b+h—|EžWĢ1u1ø‡yIÜ»§ÄŅβyxĻ\b­ŽČ»£XäüÕŁNĪTiźĒLHˆ®N¾€Ūł2(/ŸĆÓœUŠžD6÷nĢāÉįO¬O®yaS•śV‰ “­O©{w“Vś×'w¬]ܲ4ē{ē#„kȎY>‡O±Ķ ‰ØÜ(ŠŹ“c&<žt„ bUI挦X¼µ ry‘”÷%JŲo,œ‡µU»¶ŽxH ¬žōł™Ļ7б¤YÉd4cy½jMNöŻć l²ōlt¦™7öĒ]Ź$'ŹŗļųVMp «™ŠD¾ųČļI•ž”p4=,C«¬PY³Č«mā=2"0ÜĀē<óŠå©s¢4Ķ!¬Yj‘Ā%’Žb8‘‘Š„ŖXŲŹČm’RUNFk8эŠš;ź6Ś^‘ky­źīĀ8ģ­|ŒONA_zü*’‚züCńw‡Oо)ų¢ßĄŚuÖR-%4ģ¾ģ#޵HęœĻÕoƒæō? ųwJšõށ§hš}Š*}¢8‚IsžÓ¦¾…n $HżjҚ:!§óõūLĮW5k‡‡Ā_³¼—ŃIjóYϮ܂MĄĒ8#–Ē<“_Ž-ń‡‰|m«źz·Œ|AÆ]ŻIēJŅĢÄļī'}«Ņ”H%+¤­˜Édž?ĆÅg*¾Ę&L× •ŽJµx‚į˜ńެB‘ŒĖŽļS>ĒŁ:Eę…X•īź}=*I,ÖWH‚żk3jÖĒkŖ‘÷@āŗ;}5Dģ<ØsÄąķS'b£ ģ}Yū0~ǟ“7ķ7«%ŸĆ_źvžŠhćøÕn-‹CµŽ2=x×õ­ū’Į ’f?ŁNĪĆÅž7ŃtļŠ?· ÅŌaÅ»ć8Prι*T:£NĒėÜ#[ĒŖĮ¦é1®Õµ„Eōć.–Ēøk•ČŠCcę³M+±˜ED©l„£n{ÖS—DmÜK:Č:V6ß9Īą8ī+ "»ó"Œ‹BżąEpZÅņéI$÷O²,r}*%šB=O›§fP0¹ŒŻEšXå>Żiš?Œol F°ŗ¹"FFČI9 tĻ­}\o 6ŽL©ēvįŽ‚m©ęŽ9×ßOÓn.`µ–ćŹS&Õb1ھńĶ6°o¢w ‘Źe#żŖÉÄ9ŗ›ØAa4ėb 1\žŒf¹_x7ĮV‰b÷7w¶ē”Ę0_óģg}NB I ĀłĢFzē­w6+#XŸōs ĪĶL£r ļ0[LY”†Ī:еØx‚{D>Ry±uź*`ˆ’źz‚ü>Š4*¢Bprž3ƒ]G‹fŗÕ {ČSs±É  b“*'•]­“w p~Ņ śWĀž;ńŚ\x¾×KŠīÕÆaķććp›ŒPtÅt>…¶Ō`ÖmlīÓG“ŅnJ(‘#Č Žų4^För#¼&āĒÜķõ ,I¼_3ĘN=Īq[ڇ4½Mī2HķĮyĻ­LmŠćkmJŪA¹ÓķįēU>Wcķ_•ž#ńÆÄ½ā<¬āāęČ2ļCŹ0FąXÕ4kŹ‘öĪ€ÖŽ+Š b+(¢›Ė &Ä{WY‡cŌWö×Ņ‹’› ;ŽŽ½ĒLÖ"bö:As|UVL”ļĒJĶ’9ZuT¼÷®{E”²Äšžń£ šGj÷źPĆjÉ­[Ü]@9_½ŒvŃōо"ńƧ± ”j…„ł;^¢ĘļpxžUó7‹­5BgšĪŹ;Ä`s“|Łśb­Ó>‡&¦ ŠĀń”Åąæ2ućł×]k £©œÖ`?R¶žŃ’Tveźv«ākƲ$7r»Ę£h\šµ¤Cš7–²O²sŒuģ×>$Ńī<,`³±"ą(PXēip=źŪ*Ž6³u·/qd“DŒä„wž¾³{ĖiŽ |°Ąa5‰©gĒ:5ÅÄ©v‹(„œdŅ¼ķķlĢrC5¼OŌŽiĒqXf›āgŃdhķČ_Lpkš»Ö5żAåŗ@뼑Ž›im r£QīąņĀmĒLt¢Śtƒs*œóĻjBpFcj›˜÷ČCW¼AwcrŸč©óm¶zSĶé¶Ž\ė4B@ŁčFsWµ‰Ö$ƒģĆtĒżf{s’źØrč)C°ČēžK]€l«GC¹m>a-ď Ż’sÅčžVzÆÆ[źš[±1Äū«°®UŽż”v™”Ž=jÅ”,äŽ+u>IMć<ŽEQ½)k€ß÷ ’KH^įkxV>0Üp)—0nܛ3Čf€9uŅQn„mŒźNpĒ85|éą9!{ō„Ģ€Šm!ķå%ą epIü««Ót;yQUĀ<$`‚iš)t(ßx_G±ŒKnīū²oį>ÕŹMa NƝ¬ĆŅ46”HhžNz~5ŻiÖŽMŠ]ˆ ņ›£€2)ņō’Ō£‹Ri"nŠł޹›ØŚÖ4Y —ČŻ“2®q’ÖØ”;äsÓ\Ł)+伀“Īxü«2 M>WŽtB%Sņ†ēń¬ģd÷=F#ž%ŗ‚#ņŸ™N3]\Ž&E„[\ŲĒqiČ]€_ǽt$5 šK[«D{8BÆU~µēņĄn$»ŠW“{ ŒVœš-”“ż8nX XÆRXŅkö~P…R8 ść“Y©“SZؔ‚YFx=)†śk• ²8œķć½E×6÷n$ 70äŻ}ÅeĒ ęžńŻLQ²~}¼ąP;›†VӖķ!YƒÆ‡·A\M։e­äć•Gn”Ģd‡čÖ+wu¹·“ƒ€HÅvśƒiÖ6Š'œžj±pēóŖŒXāģEhšźKå4›@ć;øÅ$žfg¶¾B»Š9 ęčĪYk»9į·LØĪ@¬oc €¤ ēv)Ę=Ny£ńgƗvḣĶD.A8į±ßł×!ńĮŅ|AЬ“č“ķIm9™B± œzūWøyб…įoĮįč`·Ku XŲć,’}‰ą]sXŃ4ęÓt‹£k#¦Ēä FџCāŒ¾ ×/‰s)xīą›÷˜Ž?Ļ5E]^Ä%šLŽ ŅÖćL’kŪ§€Ī‰"‘óŁ=y}ėĢtųĀ[ū»[łīZFQˆUr#ך q‰.„u%żĮÓuA2\)Įnü^±šŠ}#Ćņ]źvšužą³”ÉŹ1Œ~ٜ÷Ę’‹Züž;°k-" ĶŅ-Ń“gn '8æ^=ėč߃“D÷÷M#hšJ¶öé,ģ ē°0r1I¢%@ĆųŃń+_ńLęY4Ę““oøwgŹ$sŒē½xļƍ>{Ųµ]SS¼‚/-‡ś<­ó“÷OqŠā§Ļ’ŚŪĄSɧųĀ(4Ūæ+}“rQžĪ<Ń™96x‹üŚÖ¦ž(ӞO³:ķČA“|ŁėTž|Fоüdš›|AƒĶšTŪćžU’–Œ}FHĶmÉqč}«į’…~šŸÄ»Œæ®#¹Óg/"Ś»†FVž >™üė¶ŗńn®Ē7Ų™upŽÅÄX-ī7Š›Iģ|qć oTÖ§øŁi~8ūŸaāI :ŠĀŖł—åSÓ„|ūBų£KÕ<%}ą’ķHŽFrf̐087½cĪZgĀZU¼ŖšĀÆ4ūFÄÜrHĻæźšw‡ćūM“ØÆö¾O@}é{B¼g¬ų§NŅ/ģ-oĢ„œśĶw?gIįMPŃüG‡ŠŃY&µ•7^Ą`qMT”ę u/ü8‹OšÖŸ-ę“$”ę³ TŻ–ægž|UšŌŅ›eå^½†}’6Ö=N®+Vō&w9oźšĮ},GOx­¦Āɽr­“ßōÆ'ńfŃīōŪūdŽĪDgr IĮĒ5ĒV:G°Ÿ³G†4ż Mę6ńČļKŽ[Į+ۊśoÄ’š‚ižÕa¾Óģ.įœģ ŒĪ1X4ŃłÖ֟ |G§]ųŸį.›oˆ!9qmGŚNN:Œ+Ǭ>8Ļāy¼Uį_“¬%P<ĄH—oCłń]pó:l̽"ļXšååö„ąxą‚į”|ŸĀ®=ėܾ üFų•į/‰–ž-×'“¹ūJåzGRSŪń­ā®DqńgмC{ā«{U†O”Ewģ÷ķŲWhŸtO„čZ„Ā€,@³üŖzgؕ37#Ųu?j67qéžU¹U‰‚°(GO„|„ń3Ą!‡ÅxļVŠ$›BI"—i!K¼{cŸŹ°•=neĻcȾ#ü]Cʗ~*°Ō#ķØÆq ‘µøć±ēłÉńGĀšĒ„|SŖéš”IdĻlö4’cU;l”ć[wĆmūąŽ©ļ.&‘ –M™ĮĮė[£XŹē³|ų­}ąŲŲ\—Mį r«.=žæį_©ŽžĀņkkŲ$I#u =Åi43©Ō¬<Ŗā0SŁGJųOö£ųpś†—cć"Žö&1\ĘŖI‘GqļŽ²*;ŸŁ».öøN ^ĆŽ¾ˆżœ> Xų;Ę·žÕĆ:ķø¶1¹"$”tĄčO֝Ž„wž=·Õ~xēD×ü3såźŚMŅjzmźg‚Œ€:Åræ°·ķQ„žŲ_³¾,Ū\Ś?ˆć„iśä1“˜īS r§‘ŪšaY[Żō6>½°Ō.¼+2jöLÉ,GŹyaé__é„^/š†•ÆÄāS4^fGzä*JĒĖ?“/Į?~Ń? ¾"žĪž8‡ķ~ńU„BäÖWj7FČIĘw*=@õÆóųēšoÅæ ¼sń ą’Žō×Ó|sįFM>īh—*ÉVPn‡·AŚ^æ§ü9Ķ%ŠłFžŅ(œ#ĒÆQ# Ś~oZīŽĒ,ž„‘¤a՚?1zö÷¦É8G;«™ŖHĪR+®×v’E'čy«28ĮļŌÕ([і,yĪ3éNŻ) näœgŚŽ^„ĘV-¼ÉĮ»vĻaZ±uC$»baŃ‘¤Ń×NGō½’éžÜÓü<ųā_؟āF½ö-YŚ~ ’ņ@ÉČ?¼·R~īx`=˜MlņˆīmVąMÜ»—aćpėYTGQē·pMԑȁ­$¾7żØ4+ßųBSŅ,ä—_Ņ.Vī'UĪū\üčG^™ĒÖ¼łč3ąÆh~ńu®f𯉭ĢC-Å„źØĮļ·’}€5üšžŻ³õēĀO‰—z½¾–aµ–iaŌv. m»‡<ō÷Ŗ§#)6|v”…Œt=j”ĖĒ“īi‡8īwSŲć’īP™~`QJƒŅ”YLC Øąq֬˘zɱĮ Tē§„OēąmŪö½h5"’S.\ Uv]ŁS Ü9‚ć+Žź½Ś­[JńJ]‰ēåĮķA×JEŁ%øÓę±×4ūŁģļģē[Ø%Œą«/jžģæą•æµ>„ūMžÉ>–Śž)~*ų h® $Ż<öŹųŲՓ#ž=jg±ßŠž„üāMĘŽÓüWįū˜ēÓļć|‡>[㠧Ѓž*™ŸT€^é¾bO3[äķŽæŻ5ĆY=Ź7’é«Ļ«Ś#ųRģڌ.äRĆi =qō&æ€?ų,Oģ—­~Čߵƈoü5£ OkņlŲĖ"6RēäųpG"¹œJłį­xŠCo«‹©,µØyæ7Ė(ąr3ĻjįµÓtf#m×Ćś¤‘YI޾bēŗÕKYm&½&oŗNę_ZŁIœēw(³¹¶ j£bĒ½:ĆĆēR“Ų×]Ź“Œ¶6ÕF]“b`jžn…³ŗ1\7BW‘ŸZŽŅü?>„bÖ8ēš@F22*ł‘ŗŽX隅³=¶vrW3ww=“«ø]Ųćµ;ž„M®Ģ˜ń÷¾”¶eEkcĻ®ü.Œįü֐«§“ZŚ|2]”ĄŲąóĻZjZ—ģĶĖŲžŠpC×EZ°»¹Ś¼‹‚ŁpŁéķV8ĘĚŗÜÜi·aćżźņ§ĮĪJš˜®Y%¹FG™A8# ÷©r5¦`ßx‹GӋż¶hÕĒšäd׏ßüyŖjšŒś~‘4–Ö;ƒ £qÖ±”ŗ³Ö x>£~l 1ØmŹNr}O½qW:äó†;œ¶q“ēo«=JL»„ŪBźŅźłG$’~č÷ķ_Mx;Įš—‹/4ė&7xٲ\vQ\Yō9NU¦¢ÕŸ€æ WĆŚ5äwÖŁ–pŪ-ŠśŖßE·ŠmŌŪ ņ€ÅyõŲ2ü¦”WC5µøīå6ŖLcŌכxĻNŅZAtŠ%ÜYT“<ąõ®ī}|Į«|\o Ļ©iö&ÖšN­ā™Łī§µ|—ćųēY»Ÿģ­‚\(rÜ õ¬%ĻJœ•®ĻAųMü#‰s”ss{q)Üņ»dš»ńĀŽ&ń~±aż‰¬K¦i‡ 0L†#Š•…“6žŅ„i1ķšK_š9į]jÓRIg†`r¤żāõ’8­–‹Qˆˆ®#Ėzʦ£śĀl}*ŖPėż#ØÓŽÕ£UXD øgļ݆DT|łÉõ¬ŚčBa¶*ųŽŪū[AŌ“Ķ„’DÜT¼GAśšņŸ…ß-~xεxā“ĆZŽ-5ø!Īćź?Ā•ŽčÉ%cčŸ~ĪzōrGāßϦųŸĀ7ėē[Éo&ģŲćæį_=x’ĘśĘÓSšī„¤²O€%ŠXöFyēźk’piŸA•āįRŁ£ŹWA‚×k@²[N=»P»²Ćķ›m÷śÖ{›³GQgāo*x‚–¶ŗĒšf“õ‹kOåÕ,¬nī3#Ā7¾:nnõÕLęxxĖKķĢ Eø€0»‡•„”KzZ$½ŌļļX‡žRÄ{ §PŅ8h.‡s"‰c܍bŻß„ÕЬ‹ļŹć«sŠóqµZ§+ ¢©I½¬}CįŁµ ³æÓf t@?7b+Ö[ÄŽ,Ö4«{+ūč­®šQŹ”ƒŽ¾nµK6÷5ĪƒąÆ‰5_ ųĒw‰ćK©`ó#…¢o•ćaņ¶=²?*ēü5£jšŌwŗż¶/¢YaB®ćšÆk(ÅrM6}gć')¾§½ųZx¤[ŅÖ¬øĀ3^ó}&?ÜQŠ2ńŒ×ÜP؜n£–2’ <ŚfÕ󬃰<ōąÖ’DF»8_xŚļĀ“Č×¶²O§p®ąp¹8$ż+čmV ÅöÜé„IĘGÖøź¢ź×{œĻĀuÖž|F»ń.•¦Ć6Ÿr¾Mōl8qÓ8śW£x³ĆZž=6šµåĪ•±‚öĄaNįßø&ÕεÓئūXłÄ_ |qń/ųa4»µYņĢąīeĻ WŸ~Ųz¬Ž(ųš[Ćßd»Åzh@Įߤ`’Ų„‘PžŸ¢pę*…|VĆā‚‘Ć|UÓ$:…¶²čöņŗ™1ü``ŸŅ²~܄ń—#»C²PIØĻzN?\ĀŌ½4~ˆĮF¾ųā§üZóā‰<;>ø46Žkū"L¶@H˜ŲķŲ„5ßµØ.4ėxЁ%Iŗš20?,Õb ¬Ēü Ę)b±ų%’.ź}ßż®-õMœ½½IÅdxkÄÖW3­£ĶŻžæZņ¦Ü*į”®™éžń.›o¬Åwā‚Ļbķµå#>^xĻ?\Ö÷ÅÆ ųföĘ oĆŽuŖ[/˜’D›RU=ˆėŸ_žµdā|ÕJhÕN? ń/ċ ZŅķ.t¹$:œ3 Qƒ¹±ŪüśV%–¤‘Z5ėY“»½›X\)B[§ėYņ3é°ŲN“Ć· s„…ĆČēŠķ–\ī;@<ąŌžÕ9Üc‡ycŹ®qÅv6×1ĄÆŽØļM!ՍՏ–~=\ÜrćB²¾‘“Ą0ĒĢš—įužŪ„æø¶™U#`dĒ_OÖ»hŅ?:Ī1œµ\_CźŸ źž֍¾•®ŪFĖ/ī¼šHeÉź}kõÆöyš“ŽšZi¶šÄZfeTōėQ…¬|{ˆ½6jŗ¶Ó®nL ±}”†0@ę¼ļY““D‚ćNh¤KWbŪ‡>Õč5e”ņt*9I#ƕ&åŌćp;H.xĮĪ},xVKÄįƒĶ¬^2iŪŗ ó_NO”G§+_]°»»$¹dŠ•Ž Ču•ƉŽ/ŻjSĢ÷qüŹ”ø‘±Āė~)‡Ćv:†§¬źÖZv™n»$ažČźkįOŠ?“’Ħ”įχ–ś„¼ Ń3ˬ_(óĖ&~č÷>½zQ¹“b~|~żæžü“QŃ|,?¾!3¼ĶtϾ=įˆåžæžŖü>ųåūBüYż¢u»Wā/Œu[«%3G§Āå-ķĒ ½ zŽNČń–hM¬¢F9掩¾nz×”ŪSФČםźCJjnjć–āŽfrŹ]Y׎ ®Xžõ„£¾8ž!׊M™JW5£³ ņÅ>OZŌ³Ņ%’W.Uļ“üæZAÜōĻ|:ńWÄOh¾ųįķ_Ğ!¼øŽŽŽŁŒ{Ųćēp8ż~ŹæšA_ixOāķć #ž‹p.'Š Œ³»īČPŻż+ µ:PčoĮ?| š“G³š×ĀoŚų?CŽ!‰`{dśqļ^…„Ćå‰/6{ם9–o®›=é̑'嚎[Co؈Ž;Ö\ģĄKI&Iō<õ¬M[|*ļµäU<…5V³»KŒŪ¾ļl޵ˆÖW6Ś„ČĢ~ŹŲ*IéJR±QĢoėŚ~‹m<:“ˆ>č99Ɠ¾$ųĻXÖ4ó=ĪŪ-ƒÄmɳT‘ŗ]ω_“ē…žŚŻYčP$ŗÜH^9RL*09Ņæ$ž,žŌ:÷Å jźßSKÉę|° w¤Œ=~•¼cŠzÕÖ±k6½eycm*nó|нŽkōoįĆoŻi÷^ ×tßjļĖs ļy8¦c)t>»š×†¬”…Ük įqŒc½[HїdfŽd=¹Œ¦ŽĪČź6Аš¹PvąŽ1ė]®‹:\¼“„@x<ˆÅž…qįĖ+XŅķB`ŽO­y~³ A{”ĘĀÜ:Õ¶A‘¬Š®’ēS^²L7Ŗl|~t HÅŌōiīōYµŽĘläg„yåž‡ØŚĄ»ī‹Ü!Ć61øūŠ Ļxź}¼ĀyÉqc\7…Žę-Lšnä€)st(ōūK- jš\Ėj±N0|t5ģ:†Ó <%@£‘Ž˜9w8ŻVŹ;»YŁ‹J~\˜ÆńOĀż W“™^Ņ{;…9 ½Õ9F],Ē»™%…±œpĆŽ½£Ć±É,”-ī`ŽWł~g Ōž+)C±Nf›=źMƒ"åOU9żjI.ŻåVtÉčŽõ)\Ķ–å¼{2·6般0AļWm®VąƒŲ֎$C±£1“”BŃę!åkWī/"’ ±ąSŪŚ¬ŠÕÓ®!µó`ŗ¶GB…H=ų®"ßKŠŚ[‘¢ÄX±™«†ą\·ŽŽŁ&ģ‘\ŒtÆ*Ōå‰.ē·–ŁmŪļ+c_:ö8Æn R”ż—8'<W|SšēG²~”¤źāF ęf&Į_ØØŗdŗlš]܉ö»¤IWųÉ刭6y“R$rĮqĶ+ó­OJ“7DéĮ®P^GįTWW¼ÓŠ[ĆņDIĻŖš‘r[’¦„ĄøyŽęÉāµ./¬V6Wv9Ķђ·‘c `ėƒ‘Ę+Ų|ā(õ7·¼*“ĒœßxP8ļ¾›vŅ[įķœä3(ę¾t¹ųmą{;Öń„²6±»÷Ó3żāO§­ŠfÄlŖQ•6üøS]>dś«$ &š[Īe)­ß„ī4k)'hI‰¹$®qō®KĆ·ņiśĖ•*ČĆż[ f„;l;„gØėW ńY3+7˃Å|»ńWąĪ¹}¬ŪŻM¦˜-',Ł6ÓŌ’õéó±Üī|'šóPš=¾Ķ>āg²š1.HĘ:WQšĀeŽąpk9\ĪRčk^ĻäD‘‘ŲćŒuö¦Ćūå'ģĖƒŒc“Dcc2“Ö·:‰ņ¬ÕUÕH N0}k§šdŗ•°·Õõ¶”l)# ŠśÖ‘bU;_4kIą·ŗ²6ņ«(såą‘õō®E×,4ķ@ÄIØ8'×õ­„Ģ Vhcæ’įY»’xõ4ĖFŻ!eYT³p6žµ€©a­\^?.L)+™;֕“Ųź³Ć{l’OĢ;P‘”ž¤o—¦ķhšWUĮł‡J‚Ły=vśÕŸc˜Ō¬„lÉnD`{}ź§s£A}jL·%éķX ·qmlĻ2CÓvzÖ’ø02ƒ tä FŲæm¦‹€v£ŗŽ3ŠžO ZŻCŽō¬ ‹¹ĶŽkśot»›ż.ź7“Źi$ˌ§¾kęų“żuln¦¹o*ķ2ć©Å#hFĒĖ~#ÓukŪŪ™ī”[É¢bńlÉ=~¼WÓ®ll4|±[›ŁbŁ–Lēž~ črŠūæF³ÓdÓ”›Ģ6—-r'"¼YЬ“łīęŠXā‰Ÿ,ć®{+)īc)Q|-.lµāšŪå›|ū~ÄųbņÉÆnt—™ƒ¢ł˜`B‘č IĻ*‡³ųWU@øŸQ¶`$*‡%ż«‰Öō +ā©sØĖgö6W;<Üu=Ę+{óßĀŻ'Ä_ÆļG›P°·˜°’ę96‡\ōĄź+ß4߈vš†„ š­é·”‘Žyī;óź}CqįæüEžĆ½ŅQ/mŽ"„F’źĮź=8?ʾVń-„žų†õļü%q{›ˆÆ ‰cqž„rN{V2ÜŚščŽ“I‹Į߯4ó§č_Ųö÷ĪŚÉūÅSĒ~Ÿżzņ’Šæµ/†W°¾‡§—Ńīš6Œ}ÖÉĪįŠēUu±ÕÉĖ£>`ńdśÕä#SŌLQ%zŻŗÖĀ?>‘ćøR)įšX"ʬą$žAü…uS•Ä×Cķˆ8µÖķ“«Ai„Ū4iå&3ė“Ž¾{Ō¼_iįŻR>I-ģ¦bwÆ(§=ŖĪw¦šģ“ųēþ"м3|ö·-Śbm§c6Iź;ņ:ą,|1ń ×ÉmnŹž‚M„¤Ć—\õć 4£Ž⟊o5=KO·æmķ¢ĆøtēóÆZų}šę’Ē^Õ_G½·²Ō-Ō<`¾Ó)ō•R4>„ż™žųĻWŃüG?Œ­$šŪēHwpē·½YŠt/| ƒVšóĄ>Ē$ĪźŽÄ›‰P6 ćõĻ«āiŃ~RĄÆE˜®gKŌ’“_P‚ŚÓ@»Żpƒ4Œ§øļü@ŗ¾Ōgš­”ÖŚ…Äy‘b-Č=0!Åyž›ā?‰ŚÄŲ&·±Õ ÓŽńCłc…8éģ;“Zr„¹\Ŗē鿃5wŌŽ}I.d)‘}kāoų)Ž•®éŚßĀĶ^p’aø¶ ob$Į.G®+›«Ö¶=£ąg†|)ā߁–:z­±×-(·ü¶ĄÄg=xƀ~)ųEnļļ¼;Ŗ\GēA9GĄ’AJžń6=«ą×‹Æü5¤¦€·×³ŚD†-…É;zcłWÕ’la¶ńāź ¦[KopP$&CĪr=óDž„«n}įā/†Ž»½Ō¼E‘m¤:Ĭ Q·Ķǧ§Ņæ2~+ü*µÕ5łµŻŪ&wł£Ėą6yēœcµÄęŌ¬5dxyųYqąÖŌ;ŠĪa®bŚ8žźŅeœ„®B±ø’ėVsZ:M;Ÿ xk↙į}hھ·ŗ]å<°ą‡Į<ā½ž'ÜkŚ“•-ī•,üĒ œcõØöeĮ5¹åžŅm|7q¬kŚlńŪ³ ŗ‚‡p=3Ķ|Ń©]ųkĒ^*ŌõŻM¶g1²1ĆDAēqśÖ©XŁK©½m j–vw~ŻŽ(  w‘ŪōÆ*ų«ń÷QŌōL¹±›Dń."¤aóyąž™ļUgŽ? üPž:šeŌ鑿•Cį·I`rĒÓ&¾lųƒ¤xĘĶ•Čą9žĻā­Ź“$R+ b‘x1°9ž^ąąŁÖēOšŸķßį-bāįļĮoåXÉ+ Ė㑆’Łį£ß¬Ģ$ägÅz‚īęį"ёLL£!ļŸŹ¼ŌűĢ*~U8®Śo”É8–<ä±lPGwśŌ7–ė½wǵjŽ~^„ 2l Ø<µ8@%BQ•Ī{f5Š @#e—Æ'½]h@“9cHD8s• –ÕŽ7˜“üŽšr:MĒ>$ų_ć? üZš.„}¢ųėĆŚ„„ƒĀ2Ņ“Lf;‚āæÓæž żūVx7öĢż™¾üušµå¤’jtpk6Č~{+ÕP$\䥎z§½DևdõF®°¬’X§ĪąW–ų—Nŗ¹“k«{{{Ō‰LwH3¾& ū`×HźYłcāŸKįæų«įݛ¾Ō„7ś+L»VÖLc Ą'§N}«óößųÅ’^k“é­¦ųžŽÖ]?TGŌa$ ÷luö횘Gøʿм9?‚µżCĀŗƒÉż«j0Ń2ąŲQ\»K-ŌĶ4ģ^SĘqÉ•ßLę© U²XŖ6×Ųīlö­9ī@’3œĻ¹Ø¦WÜp8Z b8Ö8Jīq–ĻÖ«ĻedTmŁėė@ÉVBūA\0< Ōźą“»;zqڃ¢›±zŚåd&īƒÜ×č?ü öĆńģ]ūOųs^“S…üŖ\Gk©Į)*جvēwOجÜu±čAŸč1šŸĒÖ~ń^™i¦\Ų?ĀæFu_]@ćĖ“½d$āŗ£¦3L†ŚPĢŅmӚµO+ŗ*ø,Č+HĘē6Ä?Śsų~fFi®ądż+Ø“ń’Iä¾5ĘßL‘Zņõ7‰™ÆjVWād‘¾\®Ž¤{Öę“āŲt1.!•_'Qģīn‹v^%ÓµÅ.äŹŽõ—ØčFRķĻ­W-“2”ls·6p.m„ņß¾HķX×:gŁĀ¤#Ž€t¤d婟A#Į9q ń^£O+[„„£W…ŌŹ76†ē ­ėśŸŪ'“»P ĻqSč—öņE4ė(—„ČjnĮ__Ł“2žį²²|ÜUżvŽ]»X¤Śzn ō§Ź3ÉcŖRåMö>{ųGećŸkڵΣ ģ6JŁI7c>ߍ}6¾ŸNŗhīāŻ9×U<%χĻxŸ•ŗ4™Öiŗe²:ŒFWŽk»ÓÄJĶ‚8É®Æed|%L法ܶ6ņźŚRT©ķœg"¼oĒśÅ·†ļޱw«,r•VĒʬO__’Uy؊JڳxYāZĖń‰ā_¹-—™„äyæaø‚x.`ž!,sĀŪ‘”ņ)‘ź7v·mšĖ³h*Ąä1ƬZ?Šā Xŗj„)s/éžZ®¦ŖUĖęüÕå¾"šŽ•®j776L–fA¹ÓfąĶŒt9ō¬®}äi©+žĮū5źŽ"ųoÆj$ń¦ž `­°lŖ?vQŠvā½/ćGŽ|;ńXYŲmhSÉūHi™GBN9¢HŚŽ ʧ:>PæšõÄwĄ“¾Ü}Ü„%¤Ø$ū+ˆ§‡ę*ėćŪ=k DõčŻ y¦’iYĒ9¶0Ü’‘§ōéZšEŌé$VĪr0–<ā™× jš¤1^IhĢ:U» ƒ¶óeY3ĶDŁŅ„s®[†lœes\7‰¬EååŒčJO¶Ł`ØĒ?Č~Ućā]Վ ÅsaēŚéŸ¤’ <wØųsĀņj6ėåKķ•?‹±ĶzŽ>6ƒØZiØ¼w hŻ==Ę+ĢÄŠ?ĪÆi­/ų±m‚uk¹k°Ä›_)3H?‘Ēć]÷Ā=a#šÕę¶›(L‘»ę{m„†M;#ŪĄ7c–3Ö|uāį/…®lķīaœ ©.*qČāæDG…üyą½;_‹D’öŌG"#d¦N??jū,¶£µ„Æ'‡åMĖFź6W6·‘ƒ»1²:ąŒuČ5ē÷‡5F„önŲPFF=Æq;źmOœ“1Ÿ”™4ūŠĄ™ŚĒ zg5”ąˆ¬”²Ž-i’r6d$oLk*‘;£IĶYļž%kžžÖ7Z-½ķŌˆ‰Ž ˜ķžĘø«’Žŗ§Š“e}Ā×H¼‘>Wm‡ŠŒ×£©ėaųbUm+Ÿ8\üsų±į]j$Ō®m q>ó–q2äG?Jū ž 1ą? ų“ö]ų+ū^ų[Ɨš_Ä] {hīļ4Ö^ܝ²-ĄA {gꮕ-g»™e‘Ė1X,Nüu#’o]5Y\AńĮ6Z¦ČßķQ Éčäg“ė^9§‹ R ,a$ČąńÖ«Łh~džƒŠpgģ‡ģ¹ūGųCWżš~8~ĻßtK;=ōŪÉ#šŻ[I\ƒłó_ČēĀČntĶ;ģ Ö¹“½¹ƒ÷\‚¢V+ƒō"–1·ߦ‡åžä?Qā<ѧīŌtä¾jMž,śrīų¦eLĢ3’zUrÆ)lńł×‰R>õŽ)Ęē]o/šŠ…:GQHV~a€ł1@ĄØzõšœ×Hė> YhšŽ Ó|B±Ē¹~SŒąōĻņÆŠ_ |5ųMā–Ō~|_šŽ™{ ß+@·^@Z1čė ±ųśc1gąükļ1RŒ­et~M|sų}ū/|lמiš³ų“ĮL¢÷GĪéc¹ņŻ»‘ėްu z+k6ZŹe“Żł¬$õgģ\#š¼fž*[ĖōvŠ/i 4β9łIöÆTҬ„–ēOŽ1æ.8¹«‚>¦RGĮ’&¼¾ųĒāuø,»Yv:(ÜrOē^ėįY,_Į—¤ ģyq =WŠž¼×”Kcņ\ö uä—C'ĆņĪĮ6¤¶sŪŚæL’cŸŒ–¶ś ųaāK§°y63ČNٱŽ2O^¢½*/Sęó,?5”öæÅn4MKAÖ-īĘ0²“|ątĒA^‘§.ā}.¶˜īPÆŽ^¹ÆE źø$ÖčńOˆßļ-¬äøÓH–Oŗ×ēŸĘŲuQįʖXŚāKy•%ūļ“’ė®:Š¶Ēź\/‹jWź˜nōmkĀ:ŒzŲŅ54…Õd`#8ē&æA¾ üpŠüW„Śų[Ä–ś~µmŽ!+ąJ§ųsłÖP‡F}LVšāĻ Ūy?h…¤ p}+ƒŠ¼C¬ü>ń.•ā’³A­iR›»Fō`3ƒõ®Śh‰SR‹„ÕÓŗ~gėēķ—g排±/„~*xfł“įι —ńM’J vę2€H® ĘJž`t+J[höŌŪEū‚Čß/Vł…¤“]>æ‰üūōpĆRĄc³L¶›æ²Ø—ÜēŃęÆEb^&3pXc¦1T<«¬±Ę†tĖ}솼y-OėŠs==BĘ@v½{U Z?0DWļÖ¤ŅOBž‘wäqĮé[±$qœćęXó«nxgŽtŲ“½p\Ū¶Qˆo”c5éžøK»e˜C|¤1ėÅvŅŠņŖĒ©öļģēū[|yżœī!µšgˆäÕ|#ę śMģ…‘W<…,N+÷wąü öxųe„xkāG‰l>ųžįÅ·Łu@VŽéY~č§Ģ@÷ÆsUu?‡~‘ŽŌĘNyöIÕzŌ‚ėżčł÷]wß«ģ¹ū+k3Ķā–ų š7Wŗ¼āKųü9g'Ś·r_xC»=s“šųļć?ģ=ū|^šĘ£¬|(_†Ÿ ¾!éŽeÕ¦­į©a·ņäļEsl„+FHŚAPĄņcßģć#łƒüCĻņ|T~Æ9øS~õ6ß-ÆŖqwµö½®žĒó{wū~жĒķ§|6ų}­éš2išÉw«ė²2ĪŽ“j”#;™ˆįśęæ_~’Į ü)£é"~Õ<Ō|XÄ[L²‚+toīŖ6O_zĻźič^ų‘ōŽEZ8Z49źJ*Z»$›k¢½ōgӚü'įÕ¦“k ų‹ćWÄmsIIwH-­į²šTĻŻ2&HśāŗßĮ;>ü1ų)ńV[x£R»{cyo>„zn®,Ł»€võ$T< µ±ųÖeō§ĶkĶC JāŚ¾ķļŖ»ŅĻmÆmµŌųĒž ;ńż¼m®Y|LųquŢݒgēG1ŗīǜ~]ŪOÓ9Ægń®ƒ’ÜųwšDé$“šöń6ĘĀ8.¼®ŚŪQ@f1ęž<×J*'čŸó pĄätåŠk›ÆŗŸąŸW„‘üčųóĒzŻļŠo'Ń|M¬Ė”É#ŁĪÜG„g¬rjR„Żį7W@`<œ¶>µĮ7ŠžĀĄ`”#÷±ym–ܤˆ1Ļ8ķ[ČA ėė\Ī7=ŲÉE%ž™°—•óō?v·ģą}‹Gä3]Ō)õ?¾‘#ĘIdųg¬]äüķ¢üuó·f^ņV±õ¬ŁeŁ+į>Jõ©ÓV?Muč&Į!~Qցi$§n@¾•ŁXē”ķ”i­ĒåĒ>½«¬°±Ž=¾•g I-‡ÉJX©ČęŖ@ŃO'–¤méƒŲŠqŹ]K“D R nZĶ–Ö&˜ķ<Õ)XäžÅ[k&WiyhŪE<’(`7w£™œņv;M7GūK³‘ōą÷¦ėÖŚ]»Č&·œT™…ž£ĻĖzóÅjo)…ĀIµM$I-śJ®Ó¹{õĪĆ-»^±’Šć'E738Ē[3§Óü-æp‘FJÄFwŚŗū†ęŒi¦ŠeÌVRŖŽˆŲéķ¼;„ŚF–SĻM\_é­ ¹‚ÖęÄ ‘[Ź¾@źŁ8üėSĮńĻÅßAįŸ†¾Ōu¹^A·¾Qū5æ«3ō8«R9źLż‚ż›a?†æīō’|K7?>!”&8Ī ©ō Šāæ@.¼)%½²G«_Ek” żÕ¼`"Ę=Œ+mĪŹę®‘sG§‡-$Q;ozę»-!4õ‘ļ_ķ·]zē’D}«ųÆU¶Ō>̐5¶ŅH#£ ×m¢x‹TŌ>ÓTĒ'­KŸar£bóUŽŹ#>ć°5•eeŖj[ę½qcÉĆ63ųV@£ŲžęöūGµ|['ŲĀļ AM¾»ŗ~uó~?iŗ “ŁéwŻź;~W+ņ#z{ÕF75P?%’jļŪįĀ“q«|GńŒZž·,lWN‚Q¹YGŻĘkł½ż§æą¢’¾?µĒ†ō-FėĮ? ę_*;[äČŃg¤œœć·­wŠ Ū-É#ą3²=̤™›r–łŠžW–lc«ÕŒ,sŌ«Ų­qZ6P2E"å3½¹Ī좦o”Å&Xč¤rIā—ģćå%ˆaßŅóWÖf?%­“ ,æ]«Ķ~ŗžĻ?šG/Ūć¾…įačšōé-ŅŽÜ“7B×wĢĆ ē„aRv:éĀĒõū-žĒæeO Yčæ |§¾øńÆŚµ;¤L\ ˜ŒŸåõƧ51ؒāf’[ž§myõ*Xē­m¦ŌŁ™#ĀvČÅjišoŲ¦dø FzśW;`unŠ ’­G=ÜeYŠnĻjB9‰ud…Ųc$ÕÄ/Ļp3ÅtĀ÷Gä’ňŚĘ·}.™¤He‘ŪĖ;å9Ūėž¹­ß†žŽŌĀu0—_xæ{ė[Y$bĻwŌü/ā^;(ō’ŽŽé ‹ĢŒå" ūs^ÕšSąĒˆžx¦×Ä>¾—Mwuóņ ½p=5œŸc£ō›EŃ/µ&K»‡&Vl¹#©õ®ŚßJ{)Q¢øuĆ“Ž I„ßCŠ ×ģn,¤°]žnō+ŸĒ5•nÉa&į'‹zPf^¹ńeó-.H~ZÆö¤½RŁłoJ«˜ĖsSįˆK…Xm½Ü÷{›hįi *śjIö)?ä2¶’.B88'Ó„yÜ·^%æ½{]ŃŹ…Ī 'vā‘Ó u9æ隵Q©½ĮĘv°ķXŗ%ķŒŠc‡zƒŠŠĖv\¶:KßXÜl{|™Ē\÷ĶtŚg޵āŽ=fĶŪFŒółb¶ŠčsMjvÖZ֝v¾lŒ#‡¾īøÆ0ń‹/ōĖó‹ wVĪŪW=žµ£Š ⤜Ėö‰/¬ä³”Œ‚£å&¶<um©Ž=ŖHŪćõR1žpk#dW¹ŅŒxHœFį{ņ 9mQT±Āø„ KĖD–Įœ& ³tk½*’:|™·½S“–nžųŖHÉyŗæŠtæ NńjŅJˆrMµ…ŽtķL‹•ŗ¶Īw©č*ż˜Y³ ±ńnpźZBNļNtsIm6]0‡=höeYŚÅm”)r¹ēҼćĘgöœŅZXŠÆŹéڳ4G Ų]ĒiØČ0LžG×5³©5–›ĆŸhFįøü(Ģm“ū[ĶA K¹m¤cŒ ā“&²Ōōė…·y¾ÓmÉŻŽ“NźĢ #ÕµMGŗŅę :®J8Č>ÕϦ”ż”<’\A¶V9#ŠŌ5Š ū–¾[Ų`ŽxX€[8Ą®Å<;l`I”ulÖ2– pŗĘ™oØ­Ż”‰øc5ģ¾ Ń]>9œĮsr;Ž}ńB˜ĢXĪ!ēF²”Ē*2Ex˜±ŠGä˜Ųäąw­n#WžČVÅo7¦ķĘqśV‡†,£Ó/Ķäøaó`ž?śÕœ„Šiģž.±Ō4ę“–8üż˜9ćWŚdwwSIMjŁ;p1|Öeņ3ŖŃõiķ-¾Ėynóˆ×!ē5£-Ģž ™døx—Œ¹ĪŚ(ųŽD°Ó€µłŌīW`Ü chõN61‘Š…I„rīĖšßŽ Ūc,=꤃lćRW·Ż™ł€ōį°ßźq”ÜĶ žXVēoF­=*ź(]-§`ŠēÆ„lŒš±±­Śé¢Õ%‚MŁĻ~®/Ī‚6 l죁źi“cJ÷Ä-=ŠZLc$žkŸµ¼xC»Ē»=zP2k­.j#ö©„dõĪMr’a†ÖäZĶ$’I G*;Rå)"(õ²]GīŪTœf½hźŗ6­įųķ]a^§Ģ óg «Q6G‡Ķą›ķy5hYr»²üŪsŅ“b†ķ§Ą«¶@­,QŖųsT†Į^X]deŹīSó}+'O±¹h˜“n®9ۊvåŸ5æx:ĀóUšå‘BĢć(ƒÜuʔßAšĢŲnā¾µœ ūJ I÷s޳47`°Ōķ Eb&‰A95ĶR–y.ąŪ2œ–ĄäJ †ēS¢kQX˜`ŗ¶‚ R§ =źmrńŻLö¶į’IUć¶5HóļėѵüĀō£Ŗ2§æ½{f„©č­§F„īȹڿwÖ…"œOŌ$·YåfłQ³Z儸‹Ļ+!y” /#ńŖ0“čz†‰cwwrZ€\œxā¤ń‚RŚIÖŻ^å@8Ī1HžcÉu:hĢY#=sŠŠŪO1ÄĻņóӚŁüįų‡Į¾ ųpšd¶ZšÜŲ́–!+>žłŠåōOė(ÕßIxct˜ ć 8ĄĻć_S-ŁĮ·=“ĮzE÷Ąķ/TMbŚK‹{ˆåxę' ¬{dppMp~ń|IæŌ4żjx­.%|ęČ źO§ZÉźl„sŅüšÆ@Ńį½ėĻ<ĢŲ·*Ą Šä|k„_xgÅm„^\˜ŅH1œcofdŲŹ× ³»åŽ9ąuŗ#ĆĻoxkįu÷öšėŚ µäVPåå]¤ńŽž•—34I[SŁü1ā› éꄯĘׄ”‘Œō WĪž=ń7‹µ;­cKŠŃ †œÄŃäd‡ōü(ŗ‘(ž¤iž4ÓiõŸ=ōRŪ•öYūC^’§x6}SĀOā=%毃·-Ó=*äф ·<’DŌ.‹Ę·Žm™³®īąā½ŪBš¼ÖP÷Ń],Œ0Qzóė֎sCŻķ4y!¶·‚-ņ.ѳ+Š^Uā)“Ǿ²u†ß;å ‡Süźī8Ē©ō?Įƌšą·Y哎Ü8ĀƃÉÅ} āłü+ń4Léac=³"ü™EP; ©ӫeØĀ ąÄŸRӉBPG) ĘqǾtųńSQŸK·“½¹†āÖ ‹yĀ…-ܞ§šćŒ åZOVx’Šl ×`‡ģ·¤są²ĀøŪķ^«hžń|)n’“¹ĶŪÓ؟ƻ©+"™īQÉż± KHŖ ŒēžųÆ(“L×|I{«h÷V‚8“p^ū€ļ[ÅjCZæĮ§Āo,z‰itü_l{†x#ņÆŠ‡ž0š·Ä›Ii“³dwFĘćĮĘ{Ž•N*ē;į¾0š_ƒµĖų~+%t8U ÉbyĒįĶ|µį?ķ†ž'³†iģ#‡PA4W#‡ƒv6ŒōćæÖ¦Ż)·Ōž”¾x_Ą!ųKįĖ_ėšXŌēµĀė0iHĆ üÅż®nn| ā=95‰®'cnDd˜Ÿųė\õ[½†ę|“„j¼šŹ}jś { ¦ņĪѹä ‘õ5ķ~"Š<į†^5Ö?Ń’·¶ėN“g¹ۚ|ĪÄZē~É>šÆī“;•ל¹½™Æš5;,>÷ęxÆ„kĶÓą­į?č–ŚśV”8A‹ļJ/Ē×?iRv²fܽŽwą§Ēo xēāh6šCY˱Q­²UˆäĒšöߌ[@š'ć𧆼@–£+Ū·™“ 󝃦³«č)AŸ•žŗÕ<·¶¾Õoķ܈ƒ9 ‘Ó„zƒąšÄ] ]×5ŻBŽßā”…ZóW?ƞsךŌ͜_‡u»i¾%&”D±éččÓĻ»¦== ~”hZļ†|)ŖXi×W6Vڤ’©Œ«ņN3€jdžžž<›[4™Ł IŒną·’^¹9|.Ÿ«,·PÄöņ1Żęøź%{’|“ūO|(ń ŗėO¢źYhNØ·6¢@B±\†L}M|eą­_Ā:ōŚ™šRćęvĻ<šŗu*.Ēџ > h¾9‡SŅuU›NŌlŠmb’»Čź§Žāø_x3Ā>.ń óŪ¢ŚÜ¹U8ĮČ#Ņŗy»{KhzWŠž/…² NyĆĒoo€YĆ}}ņ?:ł;UŌ®ÓQx5X$ĄyYČÅeՙÉÜ·įKi%Ö©K`x ŒWŅ>"ńōƆ²?‡“qŖĻbr¬aa±÷«ŒtŌØÄč?c’Ū÷_š‹-<ā_ź÷·Y’26ē°ĶzßķĆį_üKųlž+†Öh,^åī B“’ vŸŹ¦»²LŃčxgĆæx®óįfį­B ø“4‡Ė0Nœ®?ˆg‘œW±|.:^‹mĮqJ‘°sļU*žöƒ±äæ“f„§źŚę™g¦hŗtM—¹•Ęęb9ĮĻÆé^/ kšFˆž!²Ÿ_}>ž[lŪŚ‡;d$F:UAč'.‡žųGįÄ?źš‹;ĖMģZSpņåGEBzWéĄĶST–{ĶRŅĮcEµ·Ż÷¤‘G/“Ų’]Œå=mÖ|'ā]6ŽMCW¶†=œ« łY}ĻJł›Ä <'{ąĶwĚńEܖ™¢pBīĪKcŽ‘Ģó_‡ZMę–Œ—’ØI IĮ8Ūž3]WÄ€°ümšV½y &•ućm1„Ń¹Ā«ĒŽU€Ēx¶x¢ŚkĻ0YÜÜʤG÷³œfµĻÕŻ;S·Ōma¾±•¤·uS’0O­cuē+ĄD~F=óż+ !)ō>aż„|-<~ “Ę:U‚ÜIoū«“Q÷Į<9śå_łÆnČ*§ŒĄ¤uSØ{—Ąo·‚¼u¦‰@M2żšÖć.<±øc,¾¼ž•źŸüØxCÄńkś-Å堂ā;ż:śĆ[ȇxąuu¹Õ źlšNŚŚŚóöFšO‰µ¹Ņļā>‡éśÜ!Ć0 c{cž@VöĖzWŚ‚ī+y¬nķ@āpźW‚¦±Øµ7‰÷†nķü]į .ųÉę<‘[ŗ·æéł×|Eų9įĻ‹Ÿ~!üńķ’ßųCĚlŚ}ҐŻčT:ē 0ĪAĘrrΚ’q{2?ĶŪö“żœ|Yū7|mųŸū>ų§Oø¶Õ2xEŽ’@w,m”*IČ<ķ#ŠūWō·šóĒV7š¦­Dņ£+č÷e”x`Ćš®zŃÖĒg)v ;[ ßH5²2ŪČõ®žĻÉŌce™”¹Z „#!Ԍ`Šąk”6?…?ų-OģE’ +āž£Ŗų^ĘX¼<#—\Š““ua#“5Ø~ę$yŚT÷ÆēÕɉ!ø¶i?zKį‡@}EJģUŗ›¶~sF NqہZŃŚ3@e‚SĮł—ŌVR•ĖŠīhŲHgRqßĀØkŚdr«OmaqómMf±Ļ2k”‚š”‘ąćČ=ˆÆŌ’Łkć>ŸńE‡įęŗņŁ©ŽŅ訒I‰ēš®ŗdŹ=¦V o257œŽ†¶ķo¢ÓęT•X# +CŠ¢ FśĮœłŖ#F{ÖMāŚÜC·XĢ«“ĒzŚ$'c’¾†šFŅȬ‘޹®~[–°gSŪ?­3Ns„𽱂S$s: ėčO­z„ 0H·l’ƒpėķAW9+›ū}Jį£+³“š¾"fHÓkģʬå'rTu¹,šclBŹHķŌU8Ņ{ ČäK§F8Ļ֒™¢DśŗYyQ•ć.>i våZߍ<¦Fµ»t™Ę^˜9éV¤tĘ œ„ßƟ xuģÖ=L“’65<“\‡Ä/~.×E¢C3­,rƒ…L§Ųč…&|Ćā}{Sæše¾œÜBÜ`õĘMIŒ“l‚;{ÖNGm8ŪCĖØ_[µżÄ‰ć8ᇸ®×LšÖŸįY–k;É%Ś2›Ę@˜5”Ŗ°‰}cØėipŗ{Ėg+H“i»q' ė_T| ż•õ[›“×eųėń: ZĀŗD²Gt WßѳĒöÆĖß|DƒKÕÆµTō÷$—_½Ļjęīwr£Čuoź¾-ŗÜ]Ż5£&ĶŽ}kwCšäóĮ¤L”¦GlōÆS §Åq^w=?eļ3ė’†¾ Ó|=m,ÓŪ²ÜȀ P'Õ«ÄF Ū$ ļ·¹õÆ^Hün¦2RØå#—O*9ÕłzU“ž8Ų`ēŅ”©Ü^טÕҤūLķģB’qŠWń·įt^*Ó¬gÓ”Ÿ’…Ž4,¬¼rzs\“”}š8—OTs_4„м<-®døwD7č¤œ}+ÖMĻ€,ĪńåŽ›¦¾#IķÓqŽF8RWÓÖ¼œNŹčż§Ā’19>6*nōed×mµ^i|gą{Ż.ķ.-µ½&e-ݳē+ŪpźµxōŻ[±•CĖ“įŽyÆ„¶?Ņ܇8z1­xÉ&šó:Ūkė,£™Æ.ņwDÜWQ>­„Żé±A¹[…źŽõ1o©÷8zŠJę r”%š2$CĮ?Ņ™{mi~±,šC+Ø;[o#5Gc††TV·Z~Ń#¹‡9*Ē­djM§Žæ“qé—;YńĒcCŲäNR‹x'QŌ¦{˜ķ…ķŖ ‰£$ą’Ję~Ć©i×Sł‹rŃU—śWG”Tń‘ŁTśÄ–Śh•WŹ— ečZŌ5KOµ•tią9W—ZĪĒ&g‰’f©Źõ³ü™ś¹ą;™4oi:Į™Š&3ԃ×ō¤ń_Œo¼fö×v¬“U1NõŌčE³ųß)įOi.i->DųĒć]kNÓķ“Pž)ībµæ?wœyā¼}>&k—r[£Él„mŹ?„`•ī~į $Ń.|-u æ‰-ͬ˓‡7Ó5ģRŸCāųwˆD©MŽkCTšĘņĢßieDמ‘ā"Ēā†ßĘ>±‹DńĪ›ŪĖ{vŲ—ˆ:¾ŃĄ>柱śv]UčĻu-aµ]<<„žļ‘!''=ĮÆ:ūś{µķ¬--¶pčNzÖ5#mŌ2y{¦?Ä kśWŚ£1Ē}DG!Š×Õß³ēÄ=7Ē?³Å€ž<Õ ö7šl©aąŖīUOįłį YžŽ}–¼V ’?e'žžm]|Ļ‚?g]E×Į—u ųģu‹[™8Üą—¦J_čŚöƒ«Ļk©<ērøčĀ—=•¼¦×6§ėWü’ćĒĆ’č’¾üLų_ \…Šdxõe7Ż[œ©ŠLŒ±ēµ+÷6Ś&‡ńGć&‡į‹y¬|5kā­B=2Žf;ā¶óŽĄŁē8¬q‚?0ČrÜN‹±sœÆJ„8Éy>kYżĪŽGqxu ›{)m1ó6Üäu­u޽dt†ģ}žU%X÷Æ&¤µ?oĆŌG¤ĄGøŽFkJŃ¢“!”„)G©×>ä’H4[»mjŽ·hą^2=+č/žŅžÖmLåĖ®„jĀćļ¦Ž9õ¬Ü7Gå\uĀ‹8Õ§ńGO‘äüQ¢üN×W–óķŗ„CĖŽVXØćņƜüWążRŅxÖÓĒnFQˆłMsŹ–¬ōųFŒš8hįg²’‡2t V{.ÖuŒĘz¶zWµiZ¼vĀ B)ćŹy=qķZF6>ŚT“gĘZƽe¦~ŠŽ ø×ķ’mU"8dnAü {÷„“«Cā{]5Öī8D<†1ģ~•čŅŽˆüŸ4«leKlp™¬o›H»O"ī.OQųžuōæƒŲYÜéz¢…ŚÜ,±¹ź¤uĒė]QŠŗ•DāĻŅÉ~"ŚxĻOŃ®e"b©¼/F`9>Õļ°µ¶Óģµ "ńŹ?- ^Œ$~e™Pä›Go}k&³¤ŻYł_¾‘ §ūŲāæ)iɎ£éś}͌¶Zż•Ųū@C(ßĆ~§ņĻ ąŹÜ³q¹źß ¼Y üMšM¤:֗¦^ź–'ģ®Ž;c'„s~3ų=ąłāžk]5lnKnV)ōaX'©ś5:»oµ‹čtį£ų‚D¾Hp!øsĖ/£Uæhk-ŗjö ķ*įz0®Šz«ķu?x’ą˜Ž5°ųĒū!j ¼BcšūA–ļĆ÷‘’6X…¦,rÅöžsšģ„±ł…rčWž&(©Ļāioźzģ½ūJ|Tż‘ž!|2šĖTŅē‡ģš®‹~I†ņ,ä2·Uu$Gė_®Ś_ü»ĶŃä–OŁūN‹Äi'ĢŃŽ%‡v.ģ×£O¦§į)żigŲŲćiVt¤—+÷y“Kgŗiėg½ōķ­m{ž Åeį6†göwŌ5 ž0ĀK=]Uō;ŸšÆ5ń/üĒā—Ž“=[Bš’ĮOxn Ų%¶2]_É<‘FźFz'ö§QZ j‡j©ł« ‡±'ˆüžžÕrU"& Ųdm=(9fś¶’æžņźr _ū*Ē `zć„4ßBܑ³£«0GN”Ū;rĄ‰åõ;!ƒŹ¹R#gŒž1Ś»›mD» ddńČØœŗóŁŁŚ|“<ŽkÄö‘ݼr+–*9“B] Ģ=#H„i&)^•.½„¼@EpVnĄƒVL™…£iϬ\Gl¤¾ģ‚Ž•ģŗĀż<@~ŠĶĒõ¬źJČz•¶Ÿc¤²$I²š3ŌÕ{żA+&qÅpŌ‘Eg[†ņåR¬½Ö£›\/—CŃģļuŻušĪŅ#$ŽO°éNœXœ½~Į?Æź’ŃžÕśy©G5œJnf‚;÷ ŒlEEpĪ„ĶģaŪßOxé›nÉBEt£AxKr<ę<‘é\ņZŅŚ[YŪĄŽ"Dcķ\ÖÆf„üČE5ˆP““m0Ž=źVŗ*ŒŒGŹhC2Ļ)ϵO>²#ˆĮcŗfn9śPiŌšæ|AšĻ‚1uńÄč6Åw“ļ‘ėŽß~^üżøō»Xµį mWs4KƤ;[˜.$FrĆ*­;ĆŚ~™iŪµ‰’b0Œ‡åH^Eķ)™„‰Õ‹)ž!‚O§ź±Ū\)™d'jFs:).ķo’@‚5ķ°bø ß[Ūj/«[£-Čr­Ę>•Qv&1<ƒāeœž'Ńo¼?yvśMĆ«y7 į‡|ך›Eń…u›ŻÅ>#—Rµ‘ń €±§¾:š×Ų÷f–+Y&i ģAÅ{—‚Wv1­Ć4w'’*\ū ÄĻń>±sgu ijžK|Ŗėڹ=[VxmŲ“Ź’‘ņ–8?JČik&£ö‰üŁ[|ę­Mw•I7˜-žĖå7Øźi¶v—śFżĻq$E²7œćŚ©A™_›øå±(&į€#Šōo>ūW¶hu8#Šļ¶ŚÖĀ9ėėė+-.ēO¼²Y%' ('rcŪŽø«KÆ-®ķY7š°E0‰©¬ßźI½Žcž?žŗņ’źńč™e™wŒh±¤by¦—ńbŅžwŅ”m$»Čņœ€łśW£ų‚;­Ć«®^i7" có"-¾qź¾µÆ*ŲŻG¹šwĘ/‰Ž1¼w±ŠLW6©óyR„[ڼ3ž_é·¶—÷pßß@Ī‹$0Å3ÜgŠģkt~€|-×l/“³#9łFʎEĆ+WKŖŽ/ۚ(Iņ”‚ 5Ķ)t2“ģJ/d 9ĘFįµŲé^ ·Ā7xć˜÷ŠĢ‘ ž×T•ÖPŹwą1ļZėmsk‰mŒ2ÆBf¢°žpķ ńŁ\U¶ššÆ ń.¹ńHń.™a Œ®$Ū^Tl2{‘éNĄz¬fćP† dY ˜rB·śQ+ kvdÜs‘żŚĪq'• g 2[“ąbpr+Šń=äVŠ]=£‹–A’t#µdkN'‹Åā}[Ä6“Ś›‹ @lHŽr§&·¼;ā}FµŠ«™o™ļ7Žb)sXźög²ZųœŽYB’mtb7=³]&™)š'šiJœ3kHĢĀ­"ļśPB$fn§éT$’ąÖąm^§Ö·935õD§,½±ÖŖĆ{c;ŗ*Éņv •loC©C³7Ÿ*ń“ŽME©ß:éĘśŽĢ]6@ł}3A\‡‡ų’ęę'’{f–ŻłcžFjׄ¼Wy0‚72̱īdŒzž”ī]X²[ėæ2X Ą÷§ióÉgv'»LJ9}ÚØČ@øńR]Ī÷B4ĄÜ2³ķµ(§A$ …ņ­Lܵ:x<-kāK;ˆÆ!ąuĮĻ#Śø{ĮŚw‡š8“ØR8Z,€£nÖŖ–Ćē95šäDUQCĘGzuŗĻ-«Į9ł:œt¬ŁŒ‘‰sh`”Gmn!A÷Jž¢“m„,°Ī©ŸN ™8²[Xai\ČÅaæaV/ 1Ŗ8Ÿ4s» ¤є.äRA1LƒŌv¬Ż.Ļ[žxŚŅh [·6%}½śVi›s«]ZĄĪ nrAÅ3J×lšD«‘×÷­ !ęņŁ®—ˆĻOZõ‹9“†ÓM¼¶Ķ"4xČćiõ¬ä¢ģxĶžiöĒxŃ=ÄńÅoi6_l&)IņŌe@i(2„2ž»į‰-wK4lń°Źc°÷¬-ĆDʚ¢HbaƒŒ7jŌå–ē \ŻĆ§Ŗ„›ģLGjć¼K®^ÜG‰å2FÉ·ŠńļLĪQ<žūV¾ˆ" ŖG͟ғģõÄ(~ŃlPä ’v¹Ąˆ^0ž×šq²ŽŠG|£rīęeģæ?Ҽg@šģw‰kØ·™ōN āL2“üė蜮Ū<ŚtŅ=?ā·ÄwžØ|©hÖÓŚD¢Hī>`ąäĢWŹžÕ!Še¼¼’åŁ[+33’1œķÉō”lΘ­­žOöҳŲH–š9 ē枕Ęü|Ӝ°ĖtĶĢqŒŌą}(ŠŌĘU<Ę~'æŌ<‹£µvq“żāOOÆ_ν'į—ˆĢŽŅ“9läŠī7A:\‚¤÷ķO˜§m2ńF…$ž,‘4˜gƒHŽMņ“ŠĶcŌõļ^§į)µ;›¶k¶1ÅŖpŁŹż:AvgŠś÷Œ4M#I“RŠõ»–(Ā” ó£mä>•ē· uāŻ%.¢ :ŗ Č5JM JǬų} CˆøKGFiS×ņö®§įĒ=gCŌum V{xb“ģgwQƒŅšõ4U/”×µāź)«Zź·fźĘņF`„#·Ó­y·l<:t_³ĆuģØ6łl˜P?„?flä|½cć}gIškeŒ,6īV-ːć¶3YŗĒˆ¼KāvĘžĘĪ;1—ĢR0 sĒJŃ˜÷H-®ōų”Vv·øuÜ=ķRé^ńDŗŌڼ‘^ݱÓ>`##„3+“’ōs»ų…,¼_92]ŚĶņƒ»ī•=~ugąĆ=gþ3ń5ƽeyo Ļ‘svJpü9śŠ•Ī…~&x{Eń«KŖZŻŪ¼3”øP˜Ėdķ9ōé_*|FŌ¦ńļʝHŪB/“‹œÄķĪ Œtź([ÜŁGcģO€Ÿļüukāa&²ŒÉy˜Ŗć¢z}+Ē’h]gāwŒ¼Y­kŗž·5Ž‚ŅĘ`ˆ?śŒ’OZr¶ćå<ÆVš'ޤšõŒ4½]¤ŅĶå•Ą8ē¾{ŠśĻHŗ’„ĻĮ:}›]¬wb1Ø&CƒóRķkŠń…ˆ>üQ½Õ”ń%Õ¾€īDKбbIĪ?O­}Å揎z/Ä]Iƒ\T¾²·#ĖI@rF*OBiTWV.§…ĶĆļ ųĆOńž™zń”5»ņĪqĪyę·’h/ xĆ\šFń3ĆMØ\ŪY {Ų c™ž§Õ{Ō½7õ±ņVāż:žŚŻõ4!_o^zŒśÕĖŃ4ķ~q¢é÷·RÉūņ±DYä<䊲yu ū]/‰К퐀dmt®v?Ļōf‰šĖā½ue/ŽÆK½ŅåŻdOŚ#<©Żź3@Ņ>ŽšĒ‡¢O Śjz.µHfɇ« 4—’5Oܾ’Ѥ/mˆ_xŚĄ˜õ¬jS¹2‰ē~/·¾Õ즘ܟ4r7Ųׁxįt!ń]ūj·2‘p†18ēuĄĶģõ"Ē­x+ögšµ…–©u¤B¶·R‚®W,AČēŽÕš>³c}¢ųÓU·±’’;²!b[õ•ÕL†µ¹é>1ńjėŽ >ŌēKi#"HÉĻ™» ĒŠ×‡ÜYj2¾ovćTš$łduĮ#°ü+K©ź{Āķ«K½nkbͶO,ó€{„}ßāIü”x/U–Ęi&%¢Ÿ90yež•Œ›JÅŖcÄæfŸü?ń‰­üU£Åb ’B©$X.ŁźõĄÆŃA§xÆCIø»°“J12ł ”D 8Įā°«>ƒöŒł_Ęö~š’„nķ$6¶WC÷vņ!o ü?Züś¶ų”©h×WśóHĻlÄŪÜ”wæCpē9 oź>5ŸVUa™°'øĻį^iń3įļöiĄ¾d»ŗvŠ5G$§|ƵvĮ¤zĀė׎ƒį›xž[ѐ†4Į#= Æ­µ]kʞ×4ĶjŃ,RS™%†ćūĆŪߨ­®‘¤b} ”~Óńx—į_Œ<ć­.ĢŪ¼/¼«ŃśžUšæĆm'ā-׋WĮzÉü#w8Y„„³‚x Ļ5Ź'ŪzĻĮ}_Į„’}‚KKD&š¦XőÓŸé_žŚ—|[š⿈'³×\hZĢÅ$Ļī£ōŪӜõ§O}CÉ’$ńgŒüAįßųzAāCkSĶžŖ£>ÕõßĄÆŚNćŭ燵© Ņ/¦‡ĖBFęĘ0? j–‚iō4¾,kž%š5립¦Ł>›rŠŗrO`æZć4ˆ÷3čŅŲj6‘iģņ“NŃÓ'ޱh$ō,Ęės¬hM®éW:æ†d¬įW<ńĻÓךÆG‹Nµŗń Š“Įoq”Å ÉŃó©ō#Ų#PļŠēØĻŸ’kH ųW¶±Ér<É ¾aBrGÓüką4Ÿ!WĢS“wĻ_ƜdĢ’5¬ī4†ÓÆ“ūØ’Ó2 .ąŠēd‰ÖźUxŲ2dą+†¶Œ»ś[ū:xś×ž [Æ2=rČ3‚ä ǧ¦+čŒ($ŒRš+ŁźGØhšxƒIŗŠõ c:į¾éwÆŹæx/Pš×ŠÆō²I ­¹9q*žA¦+"ć‚İÉóŒ°pTē”ēŠżų]®Ųüvų.<|ń?ޓس#*å”Ćgø#RgL6>Œ’‚MžÕšŸģūkųį—ŠÖ _†~6é—ū˜ŖĒt[JŁ;@'å>Ķ_ŚĪ½ee¬Ė¦K¾Č4 :ų™£x'ö„šĘ†ŚwÄĻ Iż•ādū+—¼Ó;e 8e†Fyˆ=’iĒØ­å˜3XH„ƒØĄnkJ2KDsNž„÷;ć»Ė]ÄIlō®Ć’¤A”Ø%‰ĒŅ•PŹ Ž=Š£œŠgäA#< yēó&Jȁvu9žTB]Éā˜åT’£?÷ĶZŽ7ÜxĆA¢v ,ĪŽŻzŃö›ŪmC@Õō-§‰tĖŲļģ.ć8’ŚHĪąŹ}xóŖi0‘ž“ŸšJŸŪsNżµæd_†’o.ģßǚ}øŃ|OrdÅq˹—ØÉĆcŃūāæD/leˆO©x¹d8®zČŲóŻRĪ×T“‘ 2źv͹÷׊×ē7ĘĻ…³x{]Ōu +L ą3F̘+§Żą“øćå-Ē?OZąžą~u~Ņß ī~'ü&ÖmõŪ8n<_„Ū=„Ģr(ŻsmŃ$Sßķ‘_Č×ÄĻjŸ|{®xvℇĢßšł1ü>½ėzOSžG_DTm!ģk"h„aåā»bīrÉ Žåīs“œōėQČrł€¹ĒĒŲV;P9$!ąsQ¦Öځ‘ĪŽfÕü½żMK÷€,ĶŽüPiOø°²ļ©ź+DæĖø°”ϦcÆŚÄ_²×ķąoŠZģ±‹Ø£ŗÉå SpÜ®{‚21ļ_čgš/⧁õKĮ¼1=Čųyń&Ś1s!“Ųj»r¬Ąœ!“Š•5XŻŠ––?@µ=:kŪ$²‚u‡Pƒ)ĒŽüEskĒ…5qØM>čŖĢĮ²#|c&¼śˆnGĘ_šQÆŁŖĻö›żüIgkćĻ ¤ŗŽŽc{]Ä#>m¹XH™ī ļ_ē5ńsįģ’ ü{ØxYŚāM!ŃÆ“łX|6Jg®å9JĢ3†źb­÷”ł{äWw£XÉ|’-»3̊ /\g¹®i)„ĢÅā‘eŠą6g«9#¼_“Zą×Īw’ęŌ5ū=O]BKVR\ CÜŠuS¦dėß¼E¬xjūlH—L‘®2yĘ?ZłOQђ÷[:µó]Ŗ1̱“‡a#”Å„J™Ņx–ĻKÖHū,o·U+$`d7”Øõ-tKö]6[…ņŠ6ō±mģĶŽĒ~]­Œ6¶ęŹķfįž9 (9üy÷Z†•cik)•ķŁ‚ē–Õ,ØīzVŸāw–ÖĀ&—ē ‡Æē]e†‡­ųĪ{X“(¾Ś"§›ølžOį\³=Œ«.©‰Ŗ©SÜżųū5:˜?“#I‚’ZgząWé_‡¼£iu­¬vŖ¬«óēq®:ˆžŹņˆa©F•5¶ējś·†“ē¼T‹ģńžƒėłW扜ré2Jnm`sæv„pĪ,ö”9QųéūA|vžŌŌļ¬ķµ8fāøčŲ5ó-€¹×„7³“ķ;Œ÷4B‘ęęXųa©9Ķž©¢ikŁÅ,,Źéėļ_Bij‰h#‚Æ[KCłŪ6ĢgˆŖē&{eµŃ[D,ƧՇØĮ4‚2@ c>¦»);WdĆ*§$F*8‰‘Ā*·„]9°\]YŻ#B›”÷ōÆN¶•nlĢu Ą4X§S”ĖcŪEtźK*?_jĆÕ4H¼÷³cĢ$€„ Ł®Z“Æ£4£9_CŖ¶Ņgū*E ņ•WnÜpF:bŗŸ|*šļāÖ”ŌÆ‡…¼G?gY%+„ģ}Ę5—)Ÿ¬xŠ/Ś®”-›^™F` }O〾ų³įŸųM¾9ÓuĮfd–Ņ3ņ¬9ھ‡ž1C]+^ĒÉ>»ÕōÅ os5„ü%’ā5=I 1ų÷=ūĀ^0‚M+[ø°Ņü@ųh%”a$8åO§Ö¼œ\ZÕ™āźGZ{žc㯶žJĻA±AžUżĮōÆ%øš½’‡¢ŠśŽ>ĢŚA⼨Jņ<Ųg5'Iž½įƌÜž»š°¼1D¼®üqŠõ_Ł÷āׇonōmvķęŃ%•ŽöłŠ)ź2νŹ’LóØ`©Ę-EYūRFś÷‹ąøš„Ģi£Į“2ļ,epĆõ®CĮvv×ö0€ĒŽ }į]2‰ģŅ‚IE|$Õģ¼ āż'Q²“Ė‹–c+ĘYŗžµū+ąmś²YŽl>K®š3ĮÕ4„m柤& G…ÄÅė(Ź?ų MéOš>¢š·ˆVßMģ  nŠąžŸģ×Ļæµw‰télü7¦Ć=­ōń€”śœä~5ŁFzč~'Ā“ęó:Mm}OŸžÜĮsgwe3¦Å$`ŸZæ§\ź>ń2É`į-ķ‘īȇ‚ŌW„K`┬yĻďGą“š{C>¬D/­vžŸ¼æ\“łćõ?²Ł…€Mć#=9£ļrj»#‡Ōnģmį“ķ%<¦yčs^qįiü⑪ZĪ—|™Č“ē·ć\“ÓSō\ ń²öž;MBŽ4¼µ¾Wš4ą“,yśšsųWŚQ6‰ć-*Ū‰­n–e+Ę~ļ°¬e+h{.źgÉß|]¬|,Ńõ½wĆZÕī…¬ĘZŽĪxeŲįˆ8éŌv#Žæ8 ’{B÷UÕgūVµ{3\]ÜĢұĖ1żkަŗ¾XĖ™žĆšæįWĘ/Œ2“šoĮĶ×ÅZĄ“–žH&ŗXDq”QøŌå€Ås,ƒāoƒµK÷ń’uļ ^Ł\5µ’›E“ŖpwŲśō9®YP•¹Š£œPUž®åļŚöņŲō/ xĀ BĪ.cņń»šō;;µ!-²/±éB‹KSčéÕRZ āĶVq¤Z/ś“.õā¶Ó°že‹ĖņŽ“øšiš²]ĪŖÅ÷p3ŸJߗÅ÷wŗi/tÓŪłFģŖū’:*TÕīyäėäƳA†āĶtm«I’$+óK÷—³¹\W#ŗ8Ox/ŚŽŽßŁäGjŽDÄdćėÅl~Īž#²:•Ę‹quka琓dįCØĄĻä+®0Ńœfuo‰šGCń'E—Ć^&ši#Qm)ȗ)=¹÷Ķw>ń¼:t¶÷Źß(*į¾ė`ž•±če•“»=cąßÄæ²j£OÖõAq¤“ŲR:ĆĻOĀæNŗ¶ ­i>fß9U²²”ģĖĻąM~V~ŁSć§Ē|pÓ<2tÅ·–×Ó[¼ŚØØYLœgń¦Ŗ7”łĶ^Ćƈ?ÖiRT½œ—F¹”“õV·„»Ø…’ĆżMDGÓ”· T¼qšł£ć§€,ō»o-¼Ķö¦mš? éłV3?Kįģg4łZ>š]iz–§¢\Ē0ņ|¦ģźIdž+č›Ä"žšóĻq\óGÜŅ¶ØŚ…Š£QųՐĻ$Xr* ’Šį|Y¦Gsjęč²ø9 W–h—ši·M>#-ßJ„+ņZż¤Ü¼öń±!—¹»%‰¹UņŲ$½³OœUóļŠ|+6‘¬É€–īrFNÜūzWW¦J¬äń€ ]õ<ŹŠ=ĆLÓotėš÷¦ÓPQ¾,–AÜŲÕ 2'‹s+¢œŽ ”Qƒā½*Öę¶L>dėž†Øéƒ±€ŽµwfĮ³éēPŠhŠ‚ĶĄ8żk“YßK¾ ąĆćƒųÖScT¬wŖš\ŲlW OĻ =Vr‰œŸJŗjū˜ÕŠōŃmL©–8ź+®³¶3²įr£žœ õhĘĒłÕć×Ė1ĶēB›½:>źõūOļūŅD׌qG)'œ ¹æ—, qķ]ōā~ )+ SEs ±²0ć4Hö×įY³łVŃܙæ{B“Ū•Šyć­1 • ½†+sĻ”$„ĒŒåø§¬ąÄūmsAĘßS6\“*l!øĒq]-³ w«ĒJy2­÷œ įANō°Nc6U³Žƒžrź_’źxdˆł-“ž t­ŪMf}įHvŒšp~ķDĪrŌ«Šķö€¾ēµq·Z«ŚHŹfKŒ850‹wqy4FXE‹ļ½¾µ·¢ųKY×ī%@9'ØśU¹ =cĆzRéY’ÜA0}£#ļW ßźsŚ( ±~\ä ꜀ó»ėĖ»‰;²’O"˜o¬¬aiļg Ź3·?3aŌÖV•§ž~ɟ~<]iśƒi3ü7ųjģ]błvÉ4ōÉ=ėö?ąæģĒšÆą-°ĄŽ±ń7‰%®5Ėų¼É]ńü9ū WDcŲĘS=¢ĒĆ:~ƒ­¾±|æiž_½ 9ŚÄó÷zf½ “ŻCXHŚ—HÓń“Ķl£c»›vŃŁYD!·‹ķē—9«ļyon±›·mDzŠä"ńÕŃb‹õėŠåõJ}E×ū. ć8/ŲVnW c±ŽÖ?¶]OēÜÆ;OA_žÕ>ż„¾!ŁĒįxHš‚ę\Ir²m–qŽ™ćÆÖ°i¶uQ²?4“ŸŲą“z«wń{Q½’ā72\Ź×Åe˜‚X³¹<(5šÆĒßų)oĮ٧K¼ųYū6Ųéž,Õ­£hZ\±Qš@2ķ]Th6Ī™Õ?¾/|pų›ńļRŸXų™ā›ķDĖpg[DfH ČP™ĒõårΉ H EV²®Å{tØņž}z„ę! +œa…U÷ó~Õ“„c͜Åa.輨Ā(Ļ©õśÖˆ€²4ŽrżżMdŁĪS[føoš6P¦·m ä1oRqÓ½ :»[(bA,’¬hæ4žĆÖ¾ż’f‹?“’ŒSĮß ü'zóJ»ŪPø‰–Lõ Ó?DźXė„÷ēö{’‚0ų3Ąze¼æžĶāÅ8š8!9e“ Ż±ģz×ōš»DÓ|į[/ éÓü3„Eh†Õv3䎹Åyµ*Üė²G§ĀM¦YmÓ­įg¹a€ĄVÆ‡õeÄ·SČÖż”ž•”X¦ušNƒ&œŅFŠ>0s]R”ٵČzS19­WRŠÕü™HTźøėō®>ėP¹½i–/ZČ WÓdY Ž’7æ—w}±‚2^Qčj$ŽÅF72.£¼×ŗ•äZE„H\Ėpv+éė_”ßµü_įĮm/[šēĆŲį×üil<±,¹‹8^Õ„8¶uBäµńæāĒ-Boų’^Ō5(®h­‹”ēn*”Q– ØłW+¶²5jĒž|AÖbŅ4Ė»a4e°@ėĒJųĘā[ĶBńŚq$Į¤ ä€Mv}‡š—Ā~RéÆ%ü°ŚŹŪDD÷õļ_tx7Ā)¤ų†Ž}ö«O1Hž.I_a\SWfs>ĀŽŽņO&%yg·^Ž9Ūļ^æ¢ióK§†“VßåųČ4‘Ė=ʽ·Ūįž7ŚfŹqƒXŚ®£gÅwq$ŪO¹ĶRģA„sؼH­¬œxØnn$ņŅFF‰xęŖ1ī;}©Įbā;™ćF=2ŻiÖ2„ƋˆĪš§=kKŏxSIń†‘nęāĪśIŹé '5ĮG¤k0"Ł^_­ÜØv¬¤aÖX÷"S“ «Ÿŗ g5ēśę†o&”łŖ`c‘ó)¤ÕĘC¦i_Ų®~ŃwV’ a†sYŗŸ‡, [›‹HŠ[»nĒu5“CdŃäzΟ€;mFFł\ŠÕ(o K®<ĮѽéD øõFÖå~ĶsņtĄåL€@ĮõąZ÷Ć ]nāŌ-µ+ƳEĢ Łćš±Ņxs@»ŌÆį†ŽåŚVĒ#JśSNŃļ“ ‘Ź ¦Š¹#‚MķfĒO–Å%FŹ:Œcšł·ĒzŗšĘŃÜKh°’YŠõü(Ļmō¦'—!+}ģć5éҧV†yPĻ$Œā”€õ‹muĖU± ±[Œ°ą}}«›×<o¦[°x–h—* -gĪĶiž/Øx~Aö¹„šr»¶ūÖMī‘’*CmqýeQ²īGccŲŌBجs€+±²ÓēŅī-īĶŽČۜćļVV2s,ź×֌ęCĄēž;רkj‚H ¤żģõ¢%ó";MBĪāŁĆ?]ŻÅs×:„ysiy§jB†MĻłƒÓõ­ĆUxnĀ’ B.āģĘsŲדxŒYišŗE żŁ~6 ŠR5ÅŌ³Ū ·RŠžžÕµ¤h1Ž–ļ Ēō”Ś»¶Ń“ĖŌ±³Ć›ię¹r <ż°\ä«wŖŠ%Źę6Ÿ­ŻŚøEdSœ|Ć­vW‹wņ\Uˆ#ŠŃFĘS35KMVĘ@lķEĘpTÖŗ Ē&µ+}dš:œ28­c#GSÓ¬4é³onĄä…ė\ŽæÆÖ²¬–ņƒónźjä“‹æÖ>֋ēĘK­ÜW1<·…Ņ8nJ.ģŒV@=n%(Ńźv®¶Hś2×ā’ i&ÓēŽv īĮĮāƒHĖ”ńµ÷ƒt½/ÅLÖģo$·˜;\+ł®8Æ»oõėż_įÜZ7‘ŻZy ±dŒmßo§įCf‡ē¼5©čŗ•Ó†öfłÉAĪ>žÕ•¤ųWÄŗ†£§}‹Ć÷³Ā]KŹ@Wß½bęÕ±hfĖD¶ņķ[NŌžń£GżzŪÓt«;čå’ź{Ÿ¶)ŽõŸ7B¬ÅŸu”oˆ¹7j§e¤l¢7qĄŽqMätŚ”½ä[ķ‹ä8ÆKnćĒˆŖ;P"¼õXÅ“d6{U5Ńģ§¹y%Ü®26ž™«ē ‰?Łm6£OJ¬öZuŌn“+H„psŽ  ;9lō˲“,Ļ`3ņ«`ŸēXś…­īóa %¹ĪķĄd“ŌńRąŽŠr9ų<imūÅg K9ŁŌ籯/ń‡õ kydÓ®¦Š@IĄ•ü=+š¤u;c- ĻiŚÕΈĘīįn®żķ›xśWsįۆҔq{­Å;“±˜ }k"'.ĒQk¬‹µV†ķH$ÆŹx5Ń[o6·ČŪ—åeķ]4ęr3‰ZŚs¾FŲ§©k.āńt±H>‚·’¹Õ§ó¶™ž!Š“Ūš®ĪŻXXI¦ŪˆĢ2.Łó‘×§åHÕDó]VKŻI.P9[<ŠÅš6ƒ”k:Œ‹3[L«ĶŁ=?:Žrģ}§ųģ6”fŒž»~ķXæŌ ÕŹÜ3#JĒkąążqV„s «®”ńŪ+ك8źĮŖī^)ĘmŠØ<…č+XĒC‹.l„‚Ņē쉓ņGݬKTź3 dœJŲć­L€ ×V¢^mŹĖ .MfĮ©$ąfvŽ9śš#øMÓ¬AŪĘAĶM.§m $H”ž c„rGÄŚ[Ż5†äódąõę®ŪK×pŪX\Fņ61ä­)&)D·}i<*B͹\`Œw£JŌN1‹p€Ęq‘ō5ŒŅw{¬Ü]nB"*xZę•očK±g äŠ:iF—§Ł^^#Op”}Zō•‚f-ķ¤Ž:ž•¬]ĶOVŠe±¶[„wdfėėŠĪ‹RŗÓŽ”„ܧEP›±fśņ}jŁT»±U$`ō®BŅÖģϲåaŽ·Q±ƒfŌč"u>g'ŒÓ޲µ“#@Ré„t VsV‘ę:¦›-¢I{—®Ģu4ķ>}§ÄóĘŠLy † ¤®~,ųÓĮ÷¾"Ņļ5ķ éģĄ)D µŁé_&xŒź¾Ō-#’9A’O”¢žkŽSOCŽ0&ńˆÆ%†Ō”<Ģžø®q¾]ųĀ+S”ZBØŁYP•źĄzÕi#ėm?ĄZv‰į .8ŁōķE`Q°ž#Œšć¾'ų_Ě čŸiµ”›µ ²>ä+ŒäšžcžWč}ƒū<ü!»>¶æœW³Ė)šd˜Į<§„}ā_ G£ķ#|ߢs‘Ą8éXĶ®k¢ŪŌüż×<5ć-=[Y€K5Ś»¼‚Ą?(Ļé_)x‹Åž0×n®-/ēūFƒƒcŽ iMąŽ“įŌ°Ū_ĻmāVO±J«ņ‘¼ē¹É’)žßÅZuÕ²\āiAU˜¶x'±ÆAń–±­ųSĆöž!Š vÓ „mŻņ抐1éDeŌŽ]NBųØün°’„rM>É58˃ Ø,ŅsĮ5­šĒį–Æ£ĻāA­iRčó±-Jr¤/©ķŽ·ę[ FĒIą}n gÄžøxeø•ŃĄ'®;ō¬Ļxöė\Ōnå†YōóQ“Ōg“ך«cĄõļŚÅŖ%”ÆämeܾŽõé ¼9cįĻYK­éķy _ĄR9Ÿ˜ćolt?ZB: ł4Y%Ć„Łß.+Xį0’”~וēēŠcŸ“Ō/>$x—Jׯļ¾Ķ} Ž$Y6ē›ŌqҾųšˆ“ą‡IiĪuĘįŒžŁ ¤Žā'‡<¤ų’öĖÅ+a䑞7>zżMxƁ¾]Ā~æŲvPÜųFOŽ .O|”ĶÖŚžłńörńµå—‹~mKUEk˜d\ē=‰ĮÆ'ńŸƒu M}āMÖWnG˜®¹Uõ9„ĪD¦sאƃēšīŸ:Ć0p±īåFF8ż+Óžxōō“—UŌZ=¤ČĪ‘õ>˜©R"20ž=x6ūXćŃo. ’Ióņ חxOY²ŅumĆŗ¤·r±ņ•Č$±ĒRGN”łĶ“ģzŠl|ćKŃą;ėh£ÖøŒHJŗ‚3ĮüĒx§āŒüÓü(–yN™ xI“‰c<ļųŌ„}±óŽ…yążF?\ŠHÅӓЇŒØ#©ė_a|ńG‡“D›Zæ±·½hą*£Ü'ō­ŒīC§ųkā?Ź5 „®‹¬BĶ%Ŗ°Ų%`::œ ~5÷Ÿ‚|+Øx² k¹žåŅŻ9|§¦>”ów=vĖĆßšˆ_‰ī>Ķui,' ćøę¾]ųĖŽÕ[Åv¶3EauŗF‘FV 3Čņ©“¤<š—Š'ńt’Ł›ÖņĄąÖV«ā+ X»“ŌÆOø·ĢWs€ŻqϹ:če)? ž+ė~9ŗšõĻ—­ØwDłÜ¼Œīō f¼cĘ? uŻ+ʆ¼ŅL·ņE°|ÆźįWŲē•MO;ń^‚nÆ“©ćg{ß4$™^@ž. ō‹IŁ÷Ūż¢3† ·•S{ÅÜõ$ųć9|9'ˆ“ķFŪū8Ÿ’$p²*ē©ōÆ×5_Zj¶ļt«ųneœC¼Œ¾Āqæ¾kžF±>üų/šjćĀŚ6Ÿoi ڃK#:äüŪ$cÆzóŪbĻāG€¼įķ[Į_Śvz¤7įļ£LĄGV_Nc%­Ķ£ę|ó”ų~#ų MĘ+óĒ8¾Sx_ńƖ¼AąI4½] Ło'|ŒēM|jņé7:-Ä~Xø‰ÉOOéHŹT®vü'įEaeż­c?ŚQ<. EžĶéÖæ;ü{ąŃį[¹“£xcsʧ#Ž¢Är[Fx^§vŽ ¬Ķ€@ėQļy"MĢĄć½4iX÷oŁĆÅæšųŚ(ļīĖŲ\‰>čqŲūWé­³-Źo ņ;×8­^ا#_ĶO)„!dU9ņ’Ēļ _Ļ”§ˆķb’k{\$¤z{V!Ÿ Ż‚³¶ą'©ļ^‘šcĒ×ß ž"čŗ“ņ ŗo±ŽÄ·r7Bʃ¦2>–ż„ž¦§uać_Mo<…nŅH¤ā —ę]Ž:ć§­XæšJOŪ×ö§ż–ō]+ÄS_ĶńSĮŃĒ„ė ,ä•aeĻVs× ŌŹ7L릓?H&¹‰®¬ę…ž7‰ÖEō5öĒ„u·ńʇö„On«ćæĻé\CV¬)ų…šćĮž;mW@ų„YźÕleŅo¼ČĘ<¹oQœdśWłķ~޲gŠ?cŚāgĄ}zµé6O&©įˬń„ĢäĘA<īBtN ’œw8ē#ó®tXĢ‘ļĘW„g6\qķ]ńg å}“…ó÷G`1I™>ķÅ:…=*ŒĘHĻ c‚±ŸŅ ŽcCņ†ŻĘ?­ičxE9<ö9«1H¬˜ÉÜzūÕr¤\BäaT”`ō«/˜Ļ¹<ćjr:`ś®ŸšEŪrĆö6ż“,ü1ć;é-¾ xžÖRŒ;,V7¶Å; ąä’¹ź7“_蓲Ų^ivĆOŗ[ø¼„–'Č%£# žUĖUQ‘ęZŌ1[\Ē{‚„ķ^ ńĄŗĒ‹ü-®xoK»Ov¾}™'“(;GלWQ~okšm˨jŚl–ŗµ€:~µrŖ>īIģ#ōÆē{ž iū,Å£Mt[F¹x3qĢ{±ulNp~Ÿ”Täe(XüR‘¢’(nmŗ?Uīµ–é—)‚<ńÖ»iœŅˆ|¼3€å»b«<^X`Ē>Ž•©&rČįĻŹ]:éVó{Ÿ§Jˆøi 6׌¤óį)œćŒf‚“°!ˆV;qėVņĶ“g‘A“$>ęn­Z ģ0ć#;Hī=ėś±’‚~ÕV_ü®~Ē’|C%ī§m Üi"fĆŪ°mČčŻx8ü½é5Šķ¦Xß›er‘Ļ#’¤ó~õrNvfń] §š–‘«i±˜d’=Hēt/Œ0ģT’JłĖÅž {xē]„0'#¦Fk£_[Ęź¾ |Sń€58'q§enį<‚¼<}ĮøÆŅ ü]š·Œķķ§°ø6w²¹V“› åŸbkׄūT¦jµŌb{[vŠKyŌ|¤#‚Ąż:ŌÓźvē6īžIÉs‚Ņ©Čēöz•4oŁi×S É-š<w¶6ā¼ļÅ?žŸ$6ś…ƒĖ cŠOŗ@ēühęeŖ&n·ń§ĆZ4vš¬35ÄĮ‚6~Uć ę¼Rż£¼BĶyi“jȲŽdłœƁRŻ£DóŸųūVń”me4wCP1P=FEv¾ńŻö¤Öv2L¬BK}Jš+• ńżŽ^ŚånkūHźq^_Ž×Į×W:­¤3oP“ļL†’×T\Q=ŸÄė­Jžhōų_O·†1ĒŚÆųŽń5+V>BˇĒ52ŠŻ3Ļ"Y“H$ˆNū{dń“ڰŌßĻq&KŌÖ&ēSob÷6ŃĖtøĆpWŌü96»$Iä”·pŸ.1č*Ņ:)Bś#Ż~|žŅqCjŽN38äWźĄOŁĖĀz‡uNūO‚Y „lR6®õĪēŲżćþT©¤ąńUu‡ŸŚś“Æi±ŪŽé×I¾2ƹ•O?0+ĖÄŅ?џ£ß‰s ĖėĻ÷ščśÅmnöė׮ǓjZī‰n„eɈ^ÓďkowČmī‡Źrr>¹Æ"¬lQÓÅūŗ—® ²ńNqhg‰Ł†/Ž'ڽĒįOŗų7im=Œś…ÕŌIäMˆŅ$‰ž?JĮĖ[ošĀ>vōG…x³XMkĘž&ńu•‚éźłžLY £$ōüMY¶ø“ŸŹŻ$i.A†1\õWÜ|ŠpųšīŠz—ļõ ŁāK_“4č§ų˜>•qµ™ķt{Ū;øb–Ń”rćīŸQļž5ē,>§µ:Q·į_xOŎ׵Ķņ ?Ē4¶¼»@>™Æ1×u+ÆxwQÕĄxn”PĶpC‘ަ½:+3–5Zv<ŸĮŸÆüKØMåOą ‡G`½Å}gy„,ÜŲFÖČ8xŲņsŠVµčÓ«”„įs&½ā]'MŽēģ›īÄłźĄē”ÆßƆ–wŚfƒ¦[ŻĄÉ*ʧÓEqĘ[Ÿ€ųżļ}Sžß’ŪRÕ|Gc¤XŽ__¶ŠĘdPķ_Ž9ż«luߌ7Ś&£’Ā"’¢¼Wį_Š’*č„;ųu”J¾"UųWõży[x'ū*i øÓ5®ķåŒ:•8ę½+Ä˦ Ž’!pėŠõčĖMOŲ驔efyWŠ”ŽŲŁŹłškF2EøżŽ::Åń©įßčšR„²ŪjŃ(ąž¾µŠö>Ÿ-“RV<ĖTšå–£nö7£!ü&¾hÕ|;>‹ā˜4kłœŪłĄøį–øjÄżC)Ä­™£ūHų[ĀŽ’„Ē’gŽŽįĄ¶Ö­<»wÆ9ÆLš®ƒ.‡£Y<)L±”ć Ļó®zŽĒ·žįšķGÆiŚū.ŽĪH۱ߦ É#ۚł P½ū%¼’«*…ćs•Œ^§—Œ«”öŸģ™ā­{į·Ä‡|9u%­ä2­œ€y±I÷”śŽœWėGĘÆ hŸõxŪM6ŻŖŚźÖ—€2^}hö+cĪÅb]¬Ļfų7…|Wt>ų§VƒKÓµ¹ 0Ž2ƒöIq…pĒ€9ē'ę“ŸģKń³ö*ŗÓü{«Ži~ jĮNæ¦FR])œüsĪōŽ ć8Čΰ†‡ę9īu 6aN_ły³3įń<^6šüvŗ’’kŚłaaœ>F=Aļ^mÆų’ ®aĘ1“[š¬š>«R.7GyąvWXäŲŖIÉŪĒZżVųŖ<śœW ŗ8œ’1ÓśVŌśXœĘ1•}ĻŃ«ļéö? .¼QŖĒ$pŁk4g@É&¾ øŌ`Ö5)gŗß|Ŗs‰y.jļoKŸ…“svčĻ‹”—%ąČŲWć ŅĀśŅäYōł2å*HäĒ4F]›]AšEõĖÆkqQ6z×ŖĄę$GnXõ­£œU"Tń‰½£Ü[3FƓ·›?Zš[ķ éģī¢ĘĄg?zµåGR'o©ŪJŖ¬Ūöŗ+r~SŅ®.Ē+] /4ō»I!-½Æ9†ŻtĶQģd`ó£nĒŖūSē!AŻÜj^ĆŅ«j0YźVņ™!ˆóéĶ.¤TV2tŪyš³ŪFHĻ8®īŽŅ;p¬ŃęQ×5ŁF=ĻŹüTāµ”å5+ÅŚoŻ«ėņW#NYAjļt‡Ū”eMæ­z“¢™Y„G)ÉźĖw2Įµ‰??ņŖV:†4S­×˜’(łą1®ŲĒ”ćÉXýXīw“ ógzĖ„›Vđœö­c na'©ø³#Fr™8Ŗ±Ķ,ņ³}jĪiHŠH¤—BŹ+NŽŁcƒ"ŸĆ„<¦cjš—CŁn†¶ō[gæ&ŽÕ|ɽzWča)5M.źÉŚŠ©æj„ ø ½†õ/ašĖ™œņ‘Å}!¹P1éüB¬­äꐽ¹„~†wčs:ž”yrLV $¼ć]n‰ą/ķį¼ŌCA?Œši7až­¤č:^žŖ‹n77?8Č5Žé¶Z|I/‘nˆĶčqšēAHĀŌnČć'źMGKŌ4Ń[męUĘs‚My¬’Æ~_¢ˆnu{GEq’ĶkL\ ÷æl5sčš"‡lģvłZģōOˆ‘D²›LµšĶ‡ß*7gÜć?­oʈögGv‰slŲØć'Šåļ?“Š5œ“~ēųN:T»"lq:·…µī,®ņ›lŹܾ˜ō®ļĆśEͬjĀqī‘Ś”ɆŪܙYŹ&pq[v:m³Ģ­•œ÷Č„qLPiĢ’$±° W·„q¦†ćņg9õ­Š‡ßF—J€’›[pJīŚŃā(Ū‚€<ÄŽ‚TøūxSÓ€kČÓH¹“¹_µŖ“'’„Ź1/“Ė[Uy‘¹ź@ō®XŠmb²K‰”ÆŹŃ¶{ŌĢ,÷:ĻŽ<tĶ]ŒžR|ŒG,q޽óĮ‹™ądv;F{R€Ž›U½M=ƒFŪzv®\ų•­ŪBߣ—mgvøŚē ­@„¦|A]V)Nµfb»V#~7÷üjĶž±§j0M(ˆéC+•ž£§Ÿ źz2Ģ·Š/ķd8ĪļP}+Ć5ėĶF+Ū›=:f™X•ņĄūĆ56Öā*x'FŌīµ)ƾĒubčvœœcߊśķģL÷r¹D–=@¦a&ś•’Ņ «=ĢwJF~Sڱ~Åk L×qøļ¹s‘@“<śėQšä"šC¢C‚ šā±|xöśą5“¾@'85ŠÖ7=®ż`ŅČwftb~aĘ+‚ń ī©%¤é3)„‚TóX4Zv8_ų“I“Ԛ-rx™ īP8ü+Öm“żOYš--äH łŗŅ±M3œ½Óµ‹9GÅæ‹øö­w» ŽinwR¹éA-¦©y,®Šŗ+’woQ\•åŅ[«,±!ÉĘZ’„K¦6ź9!Uq62~+ “³KXo5÷’Nč)é>ńD‘+[#Č­Ą8éƒ]ėxJ×\Īž%—¹ć½Y‡ĀIl‚ÜƔĻŹ+e4kH +Ķ˜?.8&„» ó-ZĘęŻåŽTós‘øó¶¹h–ĢŻ}žīV¶ČźGÄeßh-wzVĪXvØČ=½\·µ’"„²īS‚khģTuKĖć’ łz“Č5ĖÉā»ėüų&BŻz֑•ˆ”B×\}GuÄ-#MÉ`}k#Z¼žš4Ņ*—Aƒ“u§)4aĮym":Ļ ŽqśĘ£g¢ŖÜ_\Gklc…\œrĢ ««KĶ<[ŹnDŃÉŹ›$ „OÓłW™kŚ&±5ū]Ć5Ū@ćꎚ Ö1įχVš³j3ˆäøi76S–ś×zŚrZį<“1rŖ0)5”gā+J‰ÅõՄ!7ŽH™ ķZV^‚ Hn­ęŒ£÷F1XŲėš££ÜÅ,W¶Åw6Žp=Ēį\ׅœY܆0Csµ‰Ł!4¹RŲŹ{›7vŗˆn¤&8ą•L{ø"›zl“Đ鰕]ø`y?…2NĒP‘ļY|œr8é^æ¤Ü}Ŗ$ŒŖ«ž2;RؑA‡Ėu~^ f¹k¹.,d’ØÕd^‡4Ē?w*]˜’xSx$n–üi¶Ź‘?•’Tq@ŗ…§œåUIēÜVց` ŚŖˆūŗ†Mō3µū]BĘw "nĒN s®Ž÷(®#W |Ž•Œ·:#.„ö¤ZtŲ½ŠÖP‡S_;|@ųk}®ČnQŗ„+ū¹X~€×-^ų-ą›Ķ M²Óõ;Éļc “ļ„zģģ¶…Ė#ČŅŖ.Ē<о^“ØŚŗÜŖ;8# yåµ®›{5Ŗ#ĒÆĖņä~uÓXŹ2čyĪ„vóŻ5«Y?†Aұå»Ō¬>ś‰~cߊRw:iV—x÷(ŠČ™ĻGó­yfkW>R>Aī0 I”ŪipĶm³G¼ŽG§įZ±Z‹g7q•ŚX÷… C:ˆŁÄ/)Šį1Ę;‘R]xƒO$ešČ:šŽ.ē,–£lō۟G/ŁUüŅ2WÖ6©„k>ė²,.r„’=jŌGÜˊ÷ūQ.%k£k"6Ÿā9«ģĶklāI¤Ū€qÜ÷¤IwJ¶¾hWķ"pOpEC«éF1# + åsޚB<‡PšlŚ‘źŃC²ōš®ŒÆ„wz‘}gp³Ü+g*‘Ī=iXfö¤ŅĶ XIEĒ~kMb'‘sćæµc5؉$U–fŠŌ€7sYó[j¶ļp&Ą¶ŚsŪŽ Ö™”˾\R±bŲ#5ŪÅ®ÜiŸgĮ,‘»…8\Ö“Ė,jŽ#w¶ŒÉop6ģ ŒćńoŹČū—#ūµ¼R2™ŠčQKogõÜ ļSj7?/˜³Ņ“0™ĀjzŽ£#'—”ŚÜńœŠĶ½øÖāhćrĘ7śā¢Rč(ŗß\ĘŹĄ¼lyĶF«…nז‘\oĘŠ£0śr+Ć< n¼=ÕŖĪt’5'å*sŅ»aS”ƒ‰öĮ‰_ā«żšaóoPķqÄ€3§JóŪ3Ē.śž‘į‹Hœ֘Œ}Ā‘ŪhĒš«¶©*9¾'| æ†źk™Æ|q,ķ7Ķ,g.3čM{e÷Ę9mo‰ć»Ō5(.Š0WbTŸ÷I¢QÖā”Q™¦ųĻÅ!ń5ĪØmm¬4 ØĘūP)Ļ<ńščü_į x®+ FĆOŠĖ^Ž"·R°8ķ“qķS n|Į®ųgQ²ŌŒvś{:D¹iūņ®ƒĮ¾%ŅtŁķ¬ÆoB½ĪčāMß1qķZ6EĻÆ|¶’a?Łš+ʧ!£õŸzõĻ ųhųBśļV[x>Ķr<Čū…=ČükŠ£f†OŒ¾GńSQóµh¬%hĄ™f™‚¬|`góÆ ńŽ<#šęĘĒį—Š<3‰“»Ūƒ’‘č7×=j!w üŒ? |-Š> k׿4kg‰E.v•, äś…EńOö€Š¼Q„ėZ‡ōȬµI±ē\+¹qŪ¦+x¦Ķ.ωt’x§G½h×&¢S’3Óu}ąĻhś×ƒļīµķ^8µųY÷>6®?uĘZ{3Ēž5|;¼»š}·Ä߇Ļs®[ŗlø– )\»yõ®ƒą‡į`| øÖ®õ)¢ŌķžŠ…xØz;A¤ådsĶŸƒ®l9±Ón¬ä“mfŁK,†˜7¦})sv3¹ę^ š~­cea­E4Ļp¹Tń¦Ÿk©Ķ:Hök/"DPqׁҭFęܧŸč¶mŽÆń[Zš6æ£YĮiöÖKäłÜœ®ģqŪ¾+¾ųÅń[µ’Ä‚'— ģäŠÄŅö^ķĢjh“9‚śz]Į$žW”Ē#k}ąkŲu‡:G‹.žģųēY"ņīĄp1ßó4¹,c)ėcŹž| _‡śĪ»āėQ[Ė8d Źs“6?ĘŗjųFćPՓϱޓ›|ԟ>QÉ>¹ĘhO”E}O˜ž%EqąŸŲč÷2Ū]AuÜ[ĢŽT’†k醱éw:Üx†ęŻ5«»`HŁĘ=)īŠ…#~+ė_ |{©xcÅ&óĄ7öį–ī8Ė4=lt ūרx$ŲĻńK}WĆūD‘+Øb@ēŪʔǩЩĒĒæŚCFšƒéŗĒ‡!6ĀF@ ‡»n‡”㔯 ńGķÅß @—”ōżBvhŒ%·y›x9öĶ`įŠØĮģ|­ÆYė> hƧ¼€«FGLŽė^vž%MAŹÜA/ŪA!øćÕi–Ś„ņÉwzDpN™Ī3^—ą/@³žŃW“Š“F@”œ”n€óé[(Ų„äwžÓōŸ 뚭Քø¾‘‘‚)}Į‡N?2kē/ˆŃ’oj7b×ģŠ¼„£|å€=CÖƱԗĮZ³ØLÓųv+‡øD24Hd^’Ž+é_†’|?ćæųVOŻĶ¦ŲO0‚ī٧ƶ[·SSĪiČyoĘƒv’ >/ėžŅdŗŌ“ÄSä;æ8!N=ˆÆ –éćóāTx¶³.ĆĮ$Ņ2døž¹į WAŗšę„gyöxu5+±AłŽsÖŗżį6§­čŖi76įÄŪV5#{Ą}9§ĢĮDĀŅωü!¬ZXøžaē’äŪ¶śdqšś—į’Åź1Óü5yö;kŁ›Ėū0_Ÿ$c’½™źæ“/į‰ō¶Å4Ś}é2DŲåp~ėcZĄųė⯅¾8š½¼ž:m‡‰Œ"9ķb!YˆxĒZ”K”<§[ų_X°I}g2¹iDnrź{ķÖķŅš9¹QĻq\tWRĒø6sŪ<āŖ;‘sSEÕ~ĻykØENšK¼ob”Hė_©ŸgågÄźńž«įū‰ęÄ3\ZĢć bc•üśW(©gy ¶—1–Ž›r+ļPtGsō ąOŠm¾!|/Ÿį׈;[OFE•2H1Į?†?:öų&æķ'ģcūrųR\ÜX|=ń(} _ O•$fuéĒ>„ÓGmūuń¶‰s{oy ¼ré—0„ÕœČĄ¬±0ČĮGQųW©üń Ž՞ĀF?dø!\ך®YDéhś3Äž·¼YX…’vū×óē’ÓżŠuo‹¼#ūP|?ÓĪ©ćO+ĮÆŖ§śEʎ~÷ūŽ_ Ļ«ēƒƒØ¢œžČå©Lž&¼W£.ęŗ/³ĶūČ]z=?ó9įiĄ8=ė]”ßC‚„;’!VÄyī9¦HIQø•ö÷­ ŒfE,NSÓ½5žPŒ/aLØĘćä Tn•*DĒć»#·Z #ŌŖJå<}qV#›É.įIėķEĶ#¹”mż±e¶ŽF·Ō”uø€†*VD;”ä{ćņÆō ’‚#~ݳ~ן³•§x“Róž0xCń21-u ÆÉ0'®T“ĪCūTIhuÓ?`ī%'Y–Ķāqo'Ģ„”ę©jšs\Dö™dš3¾";į©ĻĻ’»š—‰nŁåžĄóķAŻJGś;žŹ’“€¾6|5ų{ūRxW·µŅüC§A„ųŠ%|¢N0ØļĻWœq·ÖæEķ-Ž+õ˜”e9 ;\ÕC{ž}®,Š]Śköw2 'ģבg§£cŲ’Zó_’“o_üYš›ÄŪ_\O ¼Ń„ķ0Ż &3ørx8ģĶ\-t.ł»žÕŸļ>üiÖ¼3u£źZ47ŗ…ҵ­Ēޱ»±$>˜=Aó5ć][j)|„/zē©c²śv¹ge#[G üRYå'؊ōō½F[{«9Œ±r’)dō9®”Ū.A«j:$­Üs»¦rq­ax_Óu8P$ʃø1Īļ„:tQįWÆy§j‰ØiŃīe}ĶxoJ÷ˆļmeŅ>Żky5…ĄQ—Q“Ę}›5źĀV&o©Ńxkʞ5Ņ-ÖĀĆÄ·ņ”Ėn”īl}iā—Äk-f3XYtöłeW_™OŖšæhBjē¶čž&øÖģc½ø¾I «†W“°9ÉÆ‘.Ōõ >3mqå?*׹٢v;‹onlaµÕn˜J‹…vĻQZ¾šŁ½žy&™K·Ź¾õ#ęŅĀ6-¶¤mī."Xó“” ×”č6vö{™ĢbhĻ'¦r•‹ś­„ŠÆ¢†Ÿ³É'Ėqó}EG?€t–2Ąā+éšó…8ž”:–dxž‘įH4^ł®%øŲ2a9Č-žžĀ®Ž<óLĶm#nŚqüė'P茮R`ŅBßh„‚‡iR+R;8åŠŁÜ,r«ü«Ž¢„ŹēDN¢ŪE¹Õ¶ZiÖŅM$¬cXČCŽõõĮ_Ł‹_ֆ›yā›IšÜ0ūŖpN~÷’Z°›?@ąģ…ÖØŖTZ¦~ų3 éś7ö}­¤iŽw RĖėœ×GąĻYųK^×üā:S`S14]XGčk3śC(ĮZ*Z#’³Ō,ü/Øźz€øDY¤ō*:×Ē’’iO K{{¦Įgž[“”!Čē­$Õõ>ŚŽ½ł‡ćŸŠWž&‹}§žńŗ„¹=kČåR½žI^K‰® ū§æµiÜücÅ.%ś»śµ'ļu>«ųEą]CDµ³ńæ§ŪŻYJ„Z'?tƾŸµ²µ›N6ÖžҦ€Į6ąœė]TįcłŚ„võl_ xDŠ7Ė£éCHüÓăåfõĒjķ(£85ŗ9§P” @į=kØŅ`…·*„Iš:ō&·F•Š×sJŅÕrŹvē„iŁłҬ„&ī„֓F”ęfźŗl 3Ėjū'„eé“^Au,W%YŻ$ć>ՋV:a#،‰‘•B‡<öŖ2,Č„·ē·jGBo”ÕĆwj-m„Žżæ:²ąƒMwfIŲö¬"•Faj¾µÕ£dŌ K«|‘Ą#ņŖóčśģi²xc[ūŸ_“[*® żßn=+šµéųKŠqyN:ü,­8?ųļM¢6‚ó-•ōöŠK0%QÜ}½³^_®x6at«ŪĻlpY‘ĆqźÆC”’PøsÄ:®[ ~E%{u]ł4ĪSĒ>ńgtX¼c£:źś?śÉć‰͉{ž#žÕkĄž›āūKKĖ[Ńt²6ÖRyCč}ėĖ©j~SÅw,Jt"ķfz6½įø`“IķÜ0$‚1Š×‘źbņĘ»¶Ue‰IQźjT9·?=É3ŗ‘ÄĘ¢ æÆ¼÷?Š?|cšÓį_‚¾5馌^=ųsŖEöŒÖhmBFC®NTä®ī0G=E}Įā_ƒ?³_оųĘ’ µ{›w s:}ęŽŖ3ęg”Éäzō®˜agōÖˆž³N’Ѷ™ó§Ē?‡Ļ…ģüoą *=3ÄŚL%ļŚÕv‹čQ"śąuƘu憗æ|ׇ|m„xkU•ŠIŹäH„r28äV’ zõbž#Ā<;ū:üHšŠ.ĀŪƬÜZå¤{7Ž$\>‚»tń}½“ɦßÅug~£s$ƒiOØ®z”N\65m&uŽŌÄś|ńŽMe¶ę7I”9hĪī£õÆčĒᯌtĒš†„¼ÕmļgūJ Č QŽčy®8Ņ՟–ų½—OJ„é+ø¹~6’#Ąm/Ś'ĀšχōėmOÄ÷€G¶Ž@䎃žżUų{¤MĀH·#Ė;™&ÉĪ\œšn6i—ƒœ;*8jµjƊJß%’ū_ą/ÅĘš„š~‘ØŁ½Ęš$¬Œä˜Īxļžõś}mā YŃņŹī) dł”Ÿ™ •čQ©”÷¹ęL”SšE{#ł7*ēql€ź+ē½kIńŗ¶s£]›y”•Œ“ņLž‡ō®£ƒ O–Z­­ŻÕŲd’ŁÖį8| ń߉pg³¼ŲæhLüݬju—ŚŚO㻹u ^iófH6‚ģ«– :×»xbā /įškWS‰¬mģ’w(~rA ż+Šk”ģ¹Ś'äŠüA.»ānöāéy8ÜƼ«ĘćģvŽÄÆå+Ąž؊)ĒS峜_$.~”~ÉI„ų‡į÷„õ¬¢żŽå˜Ė+€å_¢z&,JI‹®ČŅgĢĆ0¾§…žŌ²Ģ~x’tøµ &ŹkŪ&a†V!sԌ×ē×ģkū:ų†÷Į~%Öü{$1j !KhÖQˆz=N?Zs¢{1ń?Aæšßü{%•«$"E“õ€v?€?•}U£ė>ńŝˆÓ| £„ȉQĖ+a›GLVQŠGSÄJor½„„Õ%EÓm-Ł  Ą×OsāęÕ,­ō›Ų,žĖ—ŒykņŸ®+hö;0ōdŻŁĪźėS¬Ö±łøč:ķ~éž—Ē}·Š<9cā=š›k«I”2ʌéĻ#9J~ĢīĢ0nxYؽlķ÷_¶ēüs[ųOš­?jOŁ.ms]šf—s-ēˆ<7)ß6Ÿ;škvūĄGŒ•9łyĻ“?fŚæĀæ¾é–šč¶ŗžkU°Ō4ķ@y¶ZŖŒ“lpŒ3ŽGõŃ Vgņģø¢9īóŒ¬ßõų‘|Gż<«&ÆšōĻšāĒQ“2Aa ż¢Ģ]c<3É£ō%ŽUiY‘’żŖto…^š÷€<·Vzź$_kµørß^:ų‡įgĒø5øR}nČiwƒŒ«ļV?Z茺n.j7ź}©¤xĀ’<)y„j:U¾¢„K$Ź~hŽ ĄxKàq£@īŠ¤ĢY·)¶ŗŸG…Rг:ķbŌÅg4«1†]„Œ¦±ž’«é¬†kŝ£Ė. ĮĘqXOČõiÕŗ³>1żŗuŻ0xĻBšR[}Ÿ\±\§U(¹Ć®käK ;{˜ĢwvŻBŻUĒ +–m£¦Lҵš”0ŻXźŗk Y­ncøˆ„ČR§;qé_Cź’5OŻŁĒcvFeXĻīäoļŪ5š—CŪĀŠF ŚgŚKI€¬Ē$ōę“4†¹€ę9Ū•^{TsCB:$‘¹ĒOÖøŸ^KyžŽ€łYĒįYČܽ”ĀšĘco„ž†±ę¹“é†+’*&‚1±ķ𭦑Ģ \\©äæ?”­ęŽs1XŲ²ĮĘ1\U$kŹm‰ĢPG¦dõõŖęऄÄō®r%±‰«_ŽŽ][i:™wāK„‚ŅÜnv9źqŠsÖæAžžĮ7ŌnōÆüx²ƒKŠ?w9Šįß\:;Ž˜ī+¢”L?`¼ą=ĀŚ §†<įūOų^5Ē•æ©v®ēNµÓōłVŽŽŲßÜō.W8®„Jē]˜’²¶ØĆn~Tķ[Ih"GŽĪ4·ˆńĄėO”‡+•ZŪtL­pż‰ēS̀ȢęM€œm>µnF”Q³‘ ‰:d †šŚZÄĪÅaŠćœŠkŠóoāz\w ēÅq}sŸ˜_›“GķŸįƇZ~§®ų×ÄÖŽ°·Fp’> Ąg…É5½8ō7Œl7µOü£āGŽßQš’Ā+fŅ4™īkē9v‹”(æĀ5ųć¬_Üėŗ­ž½Æ_O¬ė;Hf¹‘ˆc’OÖ½zm©5gĖ£2žTw^ųńÓŠS\¹&Kfŗ2­[rĮYp}ju…·Ä•1Iw9Y$hą‘ƒ!Ņ®@¦SūÅŪ’8éQ05aÓ]gRŹpzq[ÖŠAėm\^źmķā2;“Ą™½:gź—ģ½’žų÷ūBĮgāæE/Ÿ2Ē:\\BĀ[øÉł²?‡Šž•æf_ų&wģÕū<ųQtßÉyāķnå½¹¾…d[ƒœąäø=1ӊį­>‡l }éįiŽ “ƒLXŃl£Ļ–‹ŃģzgŁĪ¢Ā©@@Ę+‚l½»¦ų^e.ådR+fßI‚)¼ęT,:qҤŚrOHY›jŅøŻKÄ1Äqł¬Qޟ3T¹ÕŹJY£ū¹éWVŚŚŃDŒĄ‘ėR٬†LŚŖŻOö;tżéćrkČ~/|ZųcšDŸÄæ|M§GåÄÓ5ˆ”y¬ö< "›6;ŸĻķ„’“ń^»cyူŽi^’„Čß-Š«Žs_ƒ.ńw‹>!jņk6Ö5mfżG¾IŁų'•ęŗa‡\ccß>ü+—ÅŠ-ŻÅ€m.6D”0¾™Æ¾tĻYxgL“¶³KgÓŌb6@ Æ±„‘„ś–˜H’/”™\ąŸjĒńć[ųzõ#Sæœr+–„C8@ų®óJפžāņåb0fĄyžõōš“»­ŁcUĪw˜}=«’S¹¤©h}EšWŃ®|_}į­V„”ķ+b»•°7”Ķ}½ąßi>ų„ēNšx¬ī]WdĒīĒõ§Ē,ōџWjŽ}6Öā¤0\¢ņĄu÷ƚ_J #ćRń'‚iV\ąÖmꕧ^$w¶¹·½Œķ,§ļJĪh¾SŖšÅ…£NēŽµ{®œ’AÉy 3éQ)y2ēU˜5Ń%sÕk’ńW„Ō)‰ ĀćœÖ䔊ćÕ ĘB^œ3yĮ튳ÆxoSµš3o‰£$\ćŽę€ä)8m·+F¢_qČØ,5 ໊;xę•XÄtLzŠ8ǹ‰ć(cÕ½Ŗ¤“Ć©(Ši†ćĘA¤ ‹Œ¬kŚųM·† Mø–é[;ĒR+¢Ņ£¹pŅ]éŽMøc±³ž=}«Hǰs²VįbF1Mʧī0ĻĶų×–~kµŌp•Ž>l¦“LND֖÷‘<ˆ'W‡–ŚN0* øPؑŁ—¶ió3žL¹įż"MRM—+BūG­z­ĻĆĶ=-g’Yd™öüæ/ˊ–Ē̦Š=҉KłšĒŌõ;9„ &ąÜ9؊ęĪŗhžl>$üRÖ,|?c­Mo/öĀ.Õ¹8g'±÷žµĒ|9ųĻÆŪk©'ˆJ=“Œ)\n1Œs×ōJ‚9u='Å_¼E©[CčĢqŃö.§¹ÆoÉeØė˜ā»Emę'.=*Õ2eķąź>š?ųFQgvŃ•ąŽ‡éšńi|=ń/Ē7>.¾øŌüØf_“99G9Īzr)Ø„©Ÿ)ś¹šóį…5?ZĻŖh±\ZĻĢ@PvĻż+É~+xÚ ÕŽ§¬Z¤rG‡¢ćØōž•›z™āÜx7IHą’+}²oeõįĻß̊Żjr®ŸęS†Č+وŌČĻm³ń€“W6zõÄV[OĻ'\šź ¤źVšŽ§ą#øŸ.UŻŠUXÖéšUę£.ƒbd3LJsBN>Ÿē„EsšóHń¶„Ŗh³ĖŹÄßh‹{™‡P@ōŖē±£ŸcźŲ—ĒśxkPųk{§é÷rĄŅ»‹ƒø2žÜöÅh|2ųW‡üQ榉¤“Ņ/Łüø•ˆsœƒļžžÕIZę2‹»¹óg‹4½SĆ^-‚ßN¶ø–Ėķ,Ó®Ńū„<ģ3“]˜šĮžŚīģĶęĶ ѱ'*GQōāœ$ķsSš£^ŅåÖļ“ĖÄfHĢ‚X›:`Ź¼³ā¾ā’€^,Ó¼mį‚"šķŪ‹›ŹvCóeõĶtslij~²ü(ųŁ.·ąĶ#V×n¬ŽŚ[a$’Ɔ*Ü=źæ…K¼ńj¢ĀÖV`®é€š®jŖÓ¹¼iŒųĒsąßŁ·„īõČn„Ń™?åØĻŻ+Ēž ü>ńO‚õŪ‹Ō×.õĻdĊźXßįÉ$t¬)ŌŻP±Ņų“Ązʋć-{S:UµĒ„ļbVO-™m&søĖ§§ć_=üHš’Šl~Ļā=4Ģtœ)(œ©Ļ$śńž5¼^‡<†/Ž ¶QyŒwIˆł·V’ƒüyāQįĖčõķ^kŌø%U ķGr?ZÖ‹ž%ńoÄ~ńŽ–<5u¦ŹŚęœr²÷Ѳsųą~ėš‡Ū¤_\ŁĄį•Ptēų@­ēGÆjvšīµ¦«+ĪȫϾkČītĒŠ¾#K£“ŠęW³qōĄėE‹ŒQõŸƒ5}+Xš?ˆmü\mģ¼Oo*-¶ŅIeé·ßŒ~uį^ Ōylzē‹,u­SĀ•½Ęƒ  ķÄēŌJŅ;?D~j>Ö“¹ōß„žÆn…ó1øĒO^8®ęŚ?xĀ÷ŗwƒļÖH’g\ńdž3éĻJĘ{Ģ…¼O§ßK¬A”ė"āśĀęB ’"9źOl“[¾1ųāo‡–ÕŠäüątnkc\ų,Wöž+ŌmāŌ“÷A)HŲņyĪ1R„cNt|±®i˧ų¢i¬ldµF”ŒÜ„ĻÆzöŸųšīŠZŁé·ÆbŹs•$WĪčū“ą…m¼g$ėĢ©pģ¹2ž5Ā~Ņ? ō xæHųąĖT“Õ“«øeuCóM“ŒƒĘœˆuo¹žŪā֏£ų§X9ÓŸ¼ŠąüŹĢ2BÆa“^k®žĪ~Õõkočגé÷Č†#„gæåLĶŌ9/Ś MŃō] I× £}¾Š¬S¶>g\ÜO~õį> ńļö«ax~į­į扭ęŻ÷[æS#–ēĻß~ųIÕ¦²ŗÓHøÉ“ĢQņ0ėž¾õāWV“ ŁqmäĢ®F ūĆÖ®Ž0±Nko™xxļõÆ”’gˆ_šŒxÆMŃo^å4÷$ÄÜn~ī{w­Jå?NlēŠhažŽv’>£åZD%E ’!3ŲĶ-Ńó×Ēφé⟠¶¹j²¾³amČK4уœmļŒWēŗ‹™BĻnūéņć8¬Miž¹š—ÅĶąŸiZµŠ·Śß rö«¦@!‡Ó5õķ?ą{}s@³ńžƒ¶ŹŹī4Ė’b›\8éĻ4™ßLž”ąŒµĘŸūI~ĢŗĆź|cš5ŗŁŻDĶŗK‹`?w'ū@ØŲƽ~ø¹Ky“Ūė Ģl’8=@ķYŌZ'Ł_µ'ńž÷Œ%’0x5Ųkžšī»¢k>×ģlÆtMRŽK+»i”2\FźU•ąä1Œ¢žŒŹ¤ó{’‚•~ȧģcūL|@ųC5œēĀo<šß„®e.ōɜ°;ć$”÷SۚüĀÖ!I–&‰ćŒT`å7ź|]}N¬ęe]s† Ŗņ$„‘’@õ®ć‘ļRBšk6™-ŲūÓĘ0•’5FņÉ<éV·yd“swć„#dī1%ņåŽŗ“ŒŽÕ¤…\fLc4Ė0R$ĪŁ26óŌWŽ’šLŪYż…æl/|B›Ræƒį>»:é^,č6՚E’aˆlŽq‘ŠœŌUō;)£ż'4MsGńv¦ėš<¶·ŗEåŗ_i×08xꁔµ‡\U»ÜK ݌ł©ĆWXō,ńO‰^ ±ń“©X]8“MŌƒņäĀųąū}}ėó¢ńØŻYO—_šė‘$rÆ5”8É=H+œ­qŚĢM†_šSŸŁCKÕlgńw„mŚźu-6fN-¤ĻĻ#Š‚?žs§Žü—–ŲŁ„‘į(ƝŹpQ]Tö0”LYPMŸ›ęĻåYsÅ$oævą8śWbGŠŌR2ŹIsŸzknFR£*zūPĢs9'*XŃQ›ĒƒA¬b"«ČĢŖ³8朰c‚¦(4Œ,9¤ĆéƒV2$€¬€L¬„õūŅ'üūū_ĖiāŸ~Ę_õ‹{ŸkvŅƦ¬¬Äų$mĻSżUkūųć­b- WųućšxY¾Ė;ßń0²Ļīnž¹M摬*nuž¼.m.¤R6wck†uŖÜ¶7±iˆwo¾µpŃ0ī® -Jµåļž Żū隵„—ķ!į6X“½bD‡Sņ‡É¦jŹøŽ~9P„ōÜ£?zæ+˜gŠ)­/-ŽöŽCĆ–qPćsU$bZŻKĄ 6*į‡5éŚ_ˆ5ēµ1éå.%,øŒž1Ÿ’]sø®„ĘV=źŽ{›{X„FøøsŠ/*}ėμA„ÉixŠ]Ł\ZÜ&v“‹“f¦6/u¦ČÄÜļ@æy—µwž–8 ‚%Y`”ØO’®·Œō"R¹» =E„¶fxsĄaœ~­©hńMdnC—‘¹Ś8ÅZ’v9»oķ]+O b—`Bx„õĶ/‚5§‡Vyµp »–]¬2qėĻzŅ1¹\ģŠń$W"śHtēó‘\7†Ņŗ/Üx†Ų(…R‡x ½)øsÄV~+¶½mr}2źą³5ĮXPüŖ{ÜV&™ā_VՌ—,Ņ0==ˆõ©q±¢Ķ–K’ėCQūr[Ü9o†cŻkŗŌõ漂9ln9‚rAćwÓұ›*1īQ¾¾‚M=LɲģsørkߣŖó¬~lÉČd“ėŠĢŚ1ÖĆtkķwÅś„ÅÓZD¶īą`.Ņ=š+é?|-Ō”]Å sˆÖąmFøv‡¬Np¾‡ōÆ3‡÷[Gź<ǘ¼Ŗ£Iū­ŽĒ׎ šĘ“wįémR 'TÓŹįā˜+p}³šł×Å’²f˜ņź7ß “+칕’9č1Œ{WŹŌ½Śg×. ö²ö—ÖēĘZŸˆu’k/į/±Šń$*7FW¾0sŽ£Öaūvw4o†SÉ9¦œ{,Ę~ś3čŚ= Ć’uč’f’ü#ך;¤œ¹IPą08ĘWŪh®³öųõ£\x#Xų#ā)“Ÿķ‹k3I•ˆå^ėĶuF„Ļģl“-*1å>óŸĄÖŚ÷† |3ńõ¬Z¶™g„Žź¶És*ł‘źæ1æߚūŸg ÅGš[#ÆÕµo|4ń;éZ—Łn”ă ƒŪ„qß<5š—ćw–śžµqšĖāBšŻpmoĀ’ƒÜ÷„£Šų¼÷ (EbØģś9ZxsĒŽy,®4—Ōm$øŠŻŚI˜¤ŻĄ*GAĶ~Žų~ƒŸdxåń~¹{¢|X³²iī>Ń3n»™*ī ć1ŠŹX{ž Lo4Zź~ź?¼KńĘŚ—‹®nŅ[y%1Ćr~AĄśW¦é—³As “Ē,MŒ‘ކøźS±śGV1,t>Šų_ØŚ^k֟iøX3Œō÷Å}’ Żę‹²}>ą%“d1ą€zR„¬}-z>Ņ&GÄ_Ū @Õ$^k±F!†$“2ĀYŽŽœ×Įž#ė^}CįU„ć[Bļ$MĢą§JĀp²¹+:„ėOÖ6üO¾Čaf‘›{¬G,}Ms~0Ö“ÖŃßH¾²i·0a  ŽĒü}Ŗ!¹ółŻ^jV;OŁö†›ąŒī4­h‹ß‡ŚČ;–ki¦sķŅætü+ńCĀ>$šÓūQ‚ź…GƒČ9ū§Ž»©ČłZRg“xĆā?…¼ šĒĘ7ŗąI¼ūG¶Ž0’2§$N•łÕū x–žēYń6•5„Z åå„1?$¬I~có§9žž­–…ĻŚgLŽóĘŽŃķžøXŁÜ§fĪp_Q| š~Š<=m;[(¼VĘG°®vĪŲć,r’ōEoIhv€ ÆĘ šÅĶ„qFŒz²ä7>«H.§±‚Ķ"ŖF“źtŅŽĘÖéo:#ʝ1Ō×EąķAü/āĻųŗĒNžÖ];Wµ½šŪuÓn3Qłė™ś‡ū5~Ū‘ųMü!ÄĻ ÉāżŚtˆj6ä­į9(x|~?Ņæzüū`žŹž$6:„–æš›Äŗ&§‚źĒ\ÓQf„wFÜø=X|ĄÆZŗsG_Œ>ęŌćõœ§šTŻł”~(æ+jצǤüm’‚u~Āæ¼(æaųg¤|>½Š¼_|=Ło4jr]ž8lŲūĒ÷lÜ ž#xįwÄĻŲĆā-ƅ¼qsoć ]!Ō¼#āĖX¶E¬ZŒߣe©eϧ'‚J°G‡ąˆŖŲ§’frr“O’N÷ŗÕÅü®ÓvµšÖčü·żµ~(Oń{āĮńĮ·HŲEqü8ž•Čü/–ŚĪŠ„ė“ķ)܇‚¼ŚžGö- + æ³Ę„©[j:–{qŹÅŹ—8 Ž@uڹ;|G½Ņļ.Zh|Ņ c÷Ҧ-\‘LśWŃ“ģŲ#D¹É›œ„|ńāT_ Ō‡u«k{&8–’XǾ}2iLŹ›²?“Œ`C€»vMø†óUÓµaÓī<øĄ&b‡n}\79j[¢k¶6Z€µ’ā8®ˆŪŠäJśWIū3ŁŪܖó±ŗ·‹±ęUfģ²Eå2£‚§Ÿ„s×V‚ź)"uŒ õ«rŠä<YšīƧ©d1łqRD'8ģ*¦ Ń:ķ‘•˜å½ĶKlāH®‰UdłzdׄA j·ŅµŒzµj[QbŅÕ¹VŽJė¢[{XLp¦¦q^†…Łü¹ōƒń`p«-ĆĖ÷•oĶåų/šO¹ų"™‡¦:U[ʆR·SŒTrT‘YTCŹg*XÜČź7’“Œ¼nŽ8é@Ē©\N”6MŅ”äØ õĶZ:–ģBģ1ŪÓń ē“2õ ²¤ĘŲŚcYQŻŹīšcyÜ{Ša'©NāłÖO.p `ąZÕ±·ó$-nénpoZMŲ›Ūį’[é‘ (“mē.s]K\Ćh†8ķą‡=J§5ÅR«Ųh͊’욌E¢ßdēęĮĮµq=¬8hääw?sźĒ)š†­o øøŠ$ąwo`½IÆ¢ž~É_¾?]Ēq{öŸ‡ŽŻŗmFź2’Č™’–jzdVФsĪgģ§ĀŁą_Ā{`š/†%½ń6ϫޱy&#0ĻL‘Ҿ£·ŅįӂMŚśą( ēÕņ•Ķ›M2’PłŖ,ģqĄ“]ežŸg§ H#U'¹źkc)K¢%ø[bČf°< ‘¤Łsņ(9¢Ęg7ż³ē»Ee7bųéNƒJ‚āöąI)ēÖģT#s;SńU®—Ļp|Øg#śWĆ?j ?Ú^Æ*jZv™ÄÉ<” ż3Ņ“„NŚtĻēö“’‚³éŚ{ŽčßšćXńŠŠYcøĶŗĒ?žŗü.ųÉńÆāwĒq¼Iń;Ä×ŗ”¼¬6ØĒɅO`3ƒõÆS G©U=ŌyOα.ÉPĪ=+>aęTēÆĶ^‹ģyu§ØĻ(ŒīaĶM`ŲŹż;ÖsŲāl¬ŽūÉŹōǵ\[S@sÓŚ£›°š4ķld°q<ZŅŁŪéÖĘīšˆć,O¼Ē¢SSr¢µ>Ėż•aŚöĄń%–•šÓĆŚ¦… #uŖŽĒåĒ “ĖaócŠWõSū%’Įæg?ŁTiž,ńKÜüKųšUMŪÜ"½ølr”Œž>ՅJ–; Ó‹="hfÓķ‚é^vŽ–qŸŻ ģvÕ©§„¶”YiöÄć\•Ķ9F·Š­ŅY‹M1Ē„niŚ’2é³¶+•īI¶.Ę*)4 ¹ zRž×&I`+'§½rÖÖP©ieuŪß4œ‘QW3‹šŲ…˜g"²ęÕģtż>÷Yńn­cįĶ2 ’ŻJ#žĄQn§Lųåūh’ĮW¾|(ŗ¹šwĀØąÖüW5„Ž7t' ×ócńŪö—ų£ūBx¢ēZńŸˆu»g›+öh%&&ėķ‘Ž+h#¦ ń‹-āh[ ī™ėŽ‚»Ÿų Rń©ŁŚ}Ŗuó>oŗ3Ö­»§Ųż'šg† šFikmL (ĒSĮõ®ÖQĀ т~ąą ę©#2H-Ž-¹¼¶õ¬/ˆ6|/ØŽĒÆ'ļ ÷Æ:„CjHłŖŹ8šŁ2ć~B°ź+‘Ö-¬ōmF £ĢŲ'Ź “\ŹwgW ė½N÷ĀŻÆ‰“ ŽDW ­$e†F{W韄äń7‰4ė/ŁĮ$ɵl`@Ą’ėWm&qV„m īüe©¾˜°ź$®T0“œŅø ÄdŚ÷ösÜfa“‘żk¾' ā}§ųq7‰&`Tp1ßÜWyoį¢ÖĀ[f‹~`EksMō9Yü=}¾i­įn‚fĖ$ša‘®ĄĆļsĮ„=ŒĪKPńLo3Rģ琪zÕŪk“q¼ŃģfäƒŲŌ%­™\¬ćüGć­/ƛm/8dķL–>ÕĄiŸ5«m6{’VF>Qī­†©ŸEiž ‹RH$b›¶…'ūÕ®7„ć4x!OZl— qĖs$NŽĪ¦3Ҝ&™!)ę3ćŽiĶŠIō+lŚį–lŒ…žµóÄƒqx®õ5 SŅn£^‘ņ²{09č5Œ‘ČX|:Ōm¦[ ą÷6²äZ‹Ä> Õ “ž/ [ÄŲ6ķ’ä†ĒØJM\¾deųn=Rßl×¶ļizŒˆÜŽÕō¾‘ö‰tå’õJ†äZQƒF¤æhŠŁÖČg=1ڹ6¤Ū†«£+gœQUbīĪ–+XSO70„Ć^I«6ޱÖm›ķģŹĆ•b8ZØĄ³Į¼Eg®čzĆ[ŚĶo=žž½Ą­ ®‹©kYė’X£¦]»‚Ÿzµ¾³ą­L×äKKøµAfGŹ·”µzž-mģ‚y§ćę§Ģ€“4ŲīŠŸ0qļÖ³V-]Նé3…ČéX°©Y ūw%¹žŽ pžŸŹ°ot½2öĒę…]Fn¤R4Sń&ƒ)JĘ6Ÿe"ŻK¹Ą#C]“ ’FÆĢ:b¦[ ›Rž„“fčA‘śŒv®I|²H m݇jij©³»ŪYŲ2/PN«zļŲīŒŚlĻĄ ©=kX“«Ŗjšœ¤Ż–Wfłp¼(Æ¢<öč4ųŒ”„kѱVK‰ŻÜżžž# ĪŖÄc5Č[č×ZmĖIg$_3rĘh14ü]„ėŲźÖѧ#צEyž”ŚÉ ×WnŃ»Ą# JŹĻvW.—<ŪQšĒūj]5ŹD»ĄŽĶtWZKčöź‘4w*’20`wؤ®ƒ•Ųēnmļ§Ž<ĄBgõ‘qi5ø_µmٌ{š|ģ$ŸR¬–0[¤Äķ=½kOKŌc2e]ą÷Ǥ]É%ŌcŽÅ¦–ÕĻĢ3\SÜŽ\Jń‡ĀŽ€i%®—x…šF%Ać'ŠmŹ2fb„÷RnĄnéž"Ehüȝ£,5×§ˆ-#¹c qČÅeĢĄ®ÓG~L¢?-²{gŖisȁį;öœåGó§Üfå³xj]ā–P F3ŠdW”O¦ŚK:ł…Ž0ß/zr‰²fmĢw:uĢé×2DTēåć&½ĆŃïƧRŌTsęt÷¬Å)Xå5½:ļ$Tat7cpĮ{b©-½ˆ2yq‡«v„&G9„PęŽb§ÆŹqš”©ŁK{ ”Č Ć”5ę©•ÖĪęÉ¢’r»Xr}~•°®©ljÓ¼ČēŪ4mü%}Ŗ;k±m¼NCŌžžŌĢl$ķs)Żh³śŠåļ­ ˆ£ecŸĘ†kœ¶¹«ŚŁé×RMy=¾ĮŠ ©#¹ęøæ xŠ mŻ“‹ĻķżcFÄģ>†°.Ǧ-¼ļhÆv¤)ģGZ[UŽŪ?dzņ t÷ Asgä\;DpF@ė\ŽÆ¤ArĢm`T›<69 …>åŻLŒ“2HH<޵·5ķ«”·’ķ¤”ƒšE’Cc„Ķ";Ģ”‰_jčåµ±XĄ…×a쾕¤d%„«_Én·)O-ׁU®“{”‡‰CF­ĆŠŃ²u#¹SŽ#±˜8½sOš^§Ŗkw×wŚ}ķ›DÅCKĒb§„c`ä;=t¾˜ŖÜ`sY'TImVIŲ§= ę¤O(ń~»„ésĮs5ļ—š¤ē€IĄÆVš÷ŚģüKÕ¼@ŪǬÜĒĖ”%ŽÆg4²>ōݻŹÕ.ō[„Ö?*/ā©nõ¤*Óźf=ķœj,{ÉŖH—r‘˜ēŃO~5ŗw‹:ŪM6öFE¾HĪ3Ņ ¾k»weó¤Ž89ķō©’`Ո-V X”” Xģkr×@Š  kĮݜUD“RcŸ1U`Ų öJ¾5ķ=왢ŗGl`GŽõµ08Kš×įɈ…÷čkĄ|yāoųwP“±Ńć†ī8 UĆe”ö­Xģz­ź¶š]\Ą!v+žvŃ\\žX!aEŗŹķ ¾‹0šd?Pā»ŪŸ§öL«$ö…ŒģŚ3Ͻ.T]8#óļāWĒ/i¾"·Óģō„æ¶ņĪT®Ę9lpO\f½ĆZ»ź–k$šK ÄnŪžžŌ„M3¦é+#ņāĮÅžŃuMguŌvHŠˆĪ Ē‘Ļ\WÉZŸĀŲ³‘“+·}R Q ࢌ’Ē>Ż+Öęg!wOÓoõ(˜H<Ą ®ēŽß”Æ.Õ­āø¾’+ė3hČĘ4'‚GŌ}*āīe'sŚü1ćO éšHµxįµóA#Ć*®0vē”>µōƅ>i3šģz’ƒµ»{m%'-v³T$c=óJI™³čæéŗwĀ oĆŽÖć‡T“f ˜‘ĮTēÆOʼįę”āiė Ż”Ė«+±•z–ēŌĘ=X¢|]ńāÓĘž:¾Šg²øFµCŪ’2Å»ćé]ĆĶ'Ršī‰q=ͼŽÆwHĒ||ēüŠø½.Zg ć/]ėÖęź+‰ī.TķO3‘ĒʦšÆŒīģžĪó^’;Ē…pŪßjÆÓéLr‰õ-–„ŖkÖZf·į„’=0²ł±³–R1Ī8ė\‡Å}ųņź=k)dĀ%“ÜōÉžtXĀV8/čß¼a«ZxO_1jqK‚˜Ģ­Ū ƒƒŒjvÖ¾&Ÿhš½üĻŖ\3ˆnZāB'ś+ąĒeįķ÷–÷ń²6͇6;śŽEyߏBŠo.5k‹ht}6śō<Œ3•‘“é_]h¾¶Ņ|·ŗl¶ŚäźĖt²'Źćß“m+VHē~|![/ŽjśuęžóIœÜöÆf½ų‡„iš‰šÄ®śeśŹP+œ™ Z[čLŸC…ńœŚR®£Øź+o3¤1pG˜ξx“ń֕wgØ[…øäÄ®¼#ėZĀ6V2hšßĒ}”\^kŗiµµXmž¢°5ˆŚ÷Ä-Nšī£{¦öƶye;‰äż+”- ŒO®¾ų_Åv ±}RK˜õs°ķENŹ=E}šņö :ĄKk˜›,Ų9łsՒ»øÜūWÄ[ĒąłüEŗTńTq°†5 `öÉ#½|kš/öń†ŸńīĪK© Khä!]YųwKµŗŗņ•@*ģĶßéœW¢XųÅžšźisiæŁŚØŒĆ Ź W#±?•(ĆKāp^'ųcć .}OXŠ"ø±• rÜDrˆēžæzņ}GæX‘d‡l*8²;fµŗ¤xrŪWŅ/UŲ„ĪĮä‚v–ēšė¼¢éŚeżžŸ}&&‘Āœó¦–„GMõ'ʁz>µą’kqŽŪXAåmY«™Ał‰łÜ÷>5š_mīań…Ī©m˜ŠĘŲ £Æ=óIy—ŠŚ¹ų—¬’lL³Ä.¢i<ųĘÜn`3ÕéÖ_“wˆ¼TƒJŃōçۈDR«®ЌzžzR±J=>$ųRx[DÖ,<½?S‰Č%|uŻł×ĶQ­š³©#|•ß#ėJÅ”³ĻÄdŃōčü-āõm<΀Ū[ĘX¦!øĻ'DäӇöv­Oųų¶nߝø€>µēOqümšD^!ųu­ųKTwuwmCCr2<4_ˆĪŖ×ņ)ūS|'ÕžüJŌµ4¶hō ĒgeŚvĀ㯉5µ&C‰ņ¼Š1ÕFZĀ?x˜wē½vAœ²‰W÷)œ‡ńŽ0i¬S•FfRŁķVAšc}Ä }ˆėLó÷ģ(Ż(*2±ų·÷ž×­ į­ęź’”žņ²£÷küä’n’Ł«^żž>2xŠĻTK‹EŌeŅļķdZŽåIŪ'¦É+‚8 Ö`|¬[4Fqnkdg9*+©š·—VÓĖ:+ĘŹU˜zvÅsŌź;ŸCZų‚ŚT™žŻMĻ™»pld{~5Ķų¶k½nÖ)§‰„h˜a˜’vžÄžuĢŻ##Ļ"Ӗ8&‰ŠyO‘Éā±E”HDŲA\\d]ŽæJ/4K# Øć’×]ūĄŽƒWšÆ…müI¤ |‰U&Āž¹õ’ėśßÓ|i<3„ųĶf—O‹żfה™>õqŸsõ¬£(is4üSż “Å"©·žįwØr~`qŪł‰ńć>¹®=ÜĖwq-£vd€5g蓜0“]ZŽÉ1GØėZę£{uqop‘7lWÓó®ÓO»™’=&g…Kų*3ĒæćU mź&ń’Ļ0ÄøÅū‹eż_‘č> ųOŖkڧڵ "ŸK.6ĘGģM~‚xCĄZnkP=«”Pw)Ę}«Ó§ #óZ“±ļŚfŸc6…q_ghŌo`nėÖ¼ż+I†A1©ĪėZ®W'øE»ŸjF{W-©ŪE,ė‘”½TV¦r•Ž‚Ś {{bp Ž:ƒ\ģ O¹‘»ņµ©‰"‚tŠO,ž™Ś\΁fŹöČ4„±¼w=AÕ^(³«ožÕ©©¶›©ƒ;@"»@#ŒūÖ76^G'œ>Ų ńēZō]>ĀŃcŠ<–󎑼dY涆Īu„\īB»Oחiw³É«żB‘Ŗ·*zŠfœģõ‰ZŌZ›Ÿž'oāöÆ„¾Øś|6ŅQlņ|Nųqū[]Łė1hVžńlQüĖžš•ņ_‰m¼Qąį{ݬ÷ÖJ̐œ”QŠ‘ė^,”gcōLŸyršn½c«"Ąū”2/PÄŌæš«4x3üa¾ńŽ»¤^x‚h®µFÄ1Œdøģ=k#OҬMx‰ æ©bN^żœž/|IüCńįoˆüa‹ŗš…¹±8Rf ORZĮńæÄ-3þø¶™-ēæ•wG6žŲķŠņ«Š³?xį¾&Ććč{\<¹—åź|c©]jw&āg&vlõāæB?f^„¾«į¦¼E‰”-mĮ$dµĶĢÓ>­(µ©'ōPµń™ā"īT¶vņ®¢nœ«ļҽ:ćÄvWś‹g<š–DÉė×½k§&. Fŗx×ö­³åŒ6’ļ4oźv@\ c˜3Ūßµ~@kŽ!ÖéżkNB}lĖ_dŅī'¶Ö# īŒŹyĻōÆёo.f•™Ų±#šØé”ō9ZŒ¤„Õ×z{Ū8ó …ĪzÕ»4» 9²øxd ¾&|Ɛä+h P©īŲżżų”ńž—ü‹Xń^Ŗ¶V:Āųv$™Tü±Onź9Č%P~fæžo|,ž ź:E®kØźæd ĖĒ&Īv÷ķ]5ĒóĒ‚9lpUól$U£Lķčöüł”šoWš›ļ j°Éc¬ŲN`šŽPU© ńųWŁVŚ~©DUķądoā+ƒÓŌW“³? iį£%n‡Yšgö²ųĶū#kąš÷<[oįÖę+x®ŚHSćt/•"¾›ų©’-½żŖž é~ųąŻ×Q²¾ŠK NĀ2¾PC÷Š’ #ØĻ½<_F~?Äą+ę”ózQä« )i„Śī"ŠæąœŽ ųæcqńtžÓž°ŠļaSżžm"’D”»8'x WĪļĀGįw‹nü'©ėžńUœ<Į©éäys)éņ䱎˜Ķe*ˆ÷)cŖūYSqk—O_CÕ~üI¶ųyć]3UÕ“‰µ] Šanį]Aą8Ļ\uÅ~‡|ŗżš|_ń®öūÅz…Æ„5]<Å·RySZܒ>fģ1’3ōĶ:rS‹7ĒācJR Æ+;zō>µų³ā_Ł“ąÆĆ_xWOń’†•üÜÉį-KĘ^7×¼AāIę±Ńę¹bˆsF„’ASZŻ+qŁ©ÖĒ'+hś&§šēĄ^µ[ŻóR–RpŁÜĄ’xĄėÅbĖs„BćIæ¼M3P Gv¦&`}˜µēTnśµ`püŠ»ÜāõžĀ½DøcövĻļ•Öī‘yg4Ł‚ćψ‘ųĄōćMĒCŌ!XŽ%a2cĮę«Zj±&¦,Ė® ŚzŠvÓgI¬A‹I' y{I8Æ ²¾QŖ¤lń€Ü žżØ4rīzDņEkn ä{śj÷9üEsšÓĄVš„)mu„j R‰§ ÷ę“‚2œ‘ę~ų§|j{ķj-NÓĀײG#ŚÜ˜Ę^Ź{Ķ`x~MsĀ’\ųGÅSZMŖŁLŠK,'))qŠß—Kž}YĘöGJš”Aœn’늻op²īT;“Iö8¹Ń[U”Ėg$ČĢxēšä¬ 6Ņ>čbxć„kŲŹsītšŪŻŻ6OSŠÓ·Ó–»žgĒzė”FļSńßbŃČĄ å˜ŪY"žHüēP£Ø'“Z“Ł%܅lŠ`ō+A‹æB֕ąĖ™ī ߑ·9Ž{&•”ŁĮnŖ@GĄĖb¹źĻ Ķ?õHvƒøĪØĶŅ:¤¾:ᓸÖÄĄĶ0TŒ}āĒk§ųgš÷āĘ=dč |+ā9•ĀĶu,l–šŒąÄsjŅ”Hœŗ«?æ`Ļü3Öm0{šłKāoĒĶĀšH±ź-=ŲuĄ\zR‚Ōķ§LüCż±ࢾš £Üi¾4¾Ö½ż«łŽųėūa|pųš÷šk—z'‡¤!RŚ.$)“ņ½wP„s§d|„+F»Ņ$¶ęĄå©=é†O Ż+Ö§TpÕ¬E#)ĆśQ ŒV0ĶۊR‘åŌ•ō"Ćł€2|­€qW–ÜĘw+\óšRfFœ6ŒŪLiŸPzVĀé»eIDŽßųĖtw¬JŒnzĒĀ’ƒæ>8xŠ×Ā? |Ŗų»\˜ˆįhc>AcŻ„ {×ō¹ūĮ <+į};Bų“ū__®·āŌ™/!šō3‚^€’ßµeRV:”NĒō+įo xkĀZM¾‡ąŸ i^ŠcPžU¬j…€ć’ķŠŽ»ŠĪŽ1’„#ė^|åsSœŗÓ&¹Śfi#`s]¦‡įż‰ Ņ.Pzžā°›č#¼Ü±ØÉéY·zŠ@›Õ€Q×=ė14`Ēā;‹‰üø`ł:Š·-ŲWStŲē½C™IĶͬ‘‘Üć¦+š+׊[Ł®#“ÓćūņŹūQY›ÓłńūEĮJ~ žĻö𾓔2x§ĘŃ)Ž3÷ćI;?~|yż¬hߌZ=EüWāį£ųfpD6vźA Ūyā®”Ū GåōÆRœ‘ćց÷ŸĆ-7P×ōx£Ō ÄÉņ†aŌWgØi7Ś ¼kz.­ŁŽ7ÕÓ†q9KO^Ū\\ZĮ qk ÄO£o7Ū …Ć)Šm\ƒēk:ßĆג}…[–łrIĘOJķģ,&×m“̽6 œÜĒzĶĆSH˹ŸÆü5“Õ­Ākvaå#÷S(ĪGb yoü)xP±Ō%»œĶlū‘‡‡”­Q\ČöM:Ę;x–fYAēł×£é¾dPŸ>/ŸłŠa9 }^ā)™B*®éš[ļ˳̪ńĮ&ƒœŻ“Tµ_“%O„fGußč²FyčŌóXӒ[tbĘŽ<öŒŠŹ—K·ŌY®y2ēøäżją‹!±š†‘Ø]»¶{’ m\čVö¬»Iēź)ϰĖ¢„#`5»u ­ž'ŹK„$a}«0_»Ū²Õ®/²Dy`{v¤E˶ńNŖé1d¤õ§]¾˜Iū>Aw>“)œK[Ęe1³Sа®…t˽:k{«UyN ÉżŠ3š®Vē—ėš§c8š)#“OĪ d}ßq^e©isĖt» żÓ{{Ō‘&\Ó¼9§:&õŽEąÕ4“Ō°ŪČZ@HTMģRšĪH˜¬•żMKw,2XG· ŃŌ`µdir¤śg‡õ ä˜Ėm«(Č šŲķŠńOPÖ4ĶJĶ4Ūx¾ĪŅ~õœüĄ{ Ϝ³×ōio.Œa(ķœņžõ~ƒpŃéŃĘ¢#ڧSZFba#ˆå ĆkS øåĒL Ž,ē:‹OĻ.›5ĀĀšćœÆ-ģMxiŚ[̌Ė9GCLÖ+CĮÆ4‹KRŸV“øV¶'”a×ÜW_¢ŁāßiK ū¬sRā7+“”˜.-BŻŚC½Nxzšä|]į…øw’Éeņ³Ą8śQČdŁę7Ś}ŅF ˆ–˜ŗŻ«Mķ–×uść±§Ų,Y°¼›P¾Hä*‘w$u®Ź’Āķlbš†ut`c4Äs7VwöĢo°¶ōØgŠ9`Ūv›ÜƒŒńŠč-įVŸ*ē ŠŸSh¬Ńd‚rŃqĖ sé\ąV‹Vžö[ɹ#޵‰uŻ>‘ŲĆk+(Ū÷}źć$cœ»øŻ'˜ÉŻÉfŹŪūFŻŽš©;®~éÉĶ9O±f;Ęä Ņ±™ĒEåYa<Ņ®IjŪ '§µgģĖS±VāŅfĢŻ°p“ė[G.±/ŽWhq÷ŗŠ„o§&Øā9 !˜ą’?• ̊šßĆy–SĮ"`~CŒr5«ąĻxJµŗWŅc³¹vĮh”ß^(åKaūCÄž\4PÉ»ųzW=g>Õ ģs‘Z—H”ū H$¼ŅČ6'Č„ ×¹RœēéY‰9v” ß U(tx–õ®„csœ})ŲŽ}Ž`›c"\óŽōMį«»HÖķ]ÕU²GbėķZE4€±’ŅˆQŽyėfŚąŁÄ$—=0;Ö`bj·×W«4„›ˆQŽ•ä¾%_Įis6™¦›ĖxŲ0X×,ėßŲ“¤Ķ#†o^kšļÕ#{V %Ō1ÜW?{yyą .åR{‰-ć˜·$zW+•“7TŹ>+ZųŹv-®ķnŒĶūGƒŌ{WŌ³éIlW͉óĪsŠÖ”ßaJł’[š_‹‹ōżCNÕo^ÄL²aU~œē5ō$~“ģöSJķoz„Ē’}«¶0‘ÜŪNövd‰flc­s›Y.c–h,IQŽ­Ē©Ļ6U¶&żā¶C ńµ}kŖžŅ·†Š¤›¼ÓĮć­AŖÅ-Ū;ŪÜ1\ב\坵ŌNį°ÅRv„‚ _3l}šēg“µūc^ܧ`~mĄĘ“öƒ šŚÕb kÅlö?….­\łŠ²)†58=O9œŽ†;õ¹RŽ­ø½8¬ĖVŽ @p»;‚zūQĪĖR8oxGÖnŽń4{xćb 63³é\ŻŽ™©i—Č F!ŻĘj™§“?<)ćŪ„š±Iu[*ŻL ćįGńΰ’ömLĘw1‰ÉźsŠ~uåēN}^āéü±,Ū†Ür¦™“9[F¹±Ćy °Bż0p ö«æµOˆŚć#Y¾‡Oˆ²¤nåÕĮõśV†ž§ŌZ?±Ü RžBŅJķ<Œp3ƒĄōéYŽńŻ÷‚üOŖŽXŽHŗrøņĀ6Hē$ʓd>Ē&”©üQų›ŖxœŪ[^¬ÄFŽ`*źĄņ}Ę1^ń©xU'š½ķ¼ńYŲ,\‚2$”1ōļFȞ‡Ķ×~šę‹„ßÄ-²f•ŗ?=s_5ŽéWŚ…ė(…ŽœgŚ~ńĻqLŌō}ā.»į}%ģ,Śłaˆ‹ęĄ+č½R±ųŖ·‹-oo./ÆļeBdŁIŖŠŌ™Bē°xGā>—„ųĪy¼RϦZ\KņņALIüśWAńORŅõkYo¼1p4Ų"• 1“™ˆēv#„T‘É—š—āž«ńH—Įįöå²lL/Ż\1ķĘkī?~Źcòåߏ5kŁļ5Ŷ7 „ēƒœo­rb„Ė'±Æ-“>sż¼CąB{ kO¶Ž ’AüĮBIŃ·+éļŠI ²kQYŪЉD±LńŽĒ9¬ŖAÜS•·<ēį׏āŃģ“T¼½¶µµµ$É! "óƒ‚jÆĒ=Cį‡Š4+ßxBx_ā$1¤–×0C”›Ō7łļMA˜Ź„ˆ>&žŠ‹ekmį-SĆ,u –1=ĆGņĖī=;ę¼ö=K‚Īö%£p?˜”žÓ­o÷&5ĢxĆ^kÉÖ8BÉk IK+?į’†ķõ emīķā)§VÜÖ|ń·L:eåʕ§ŚŸßJ‰¾)[?usŽi`ą•īgĖsķ_Ū/üŗš|׃]]G¾kp‡÷kžōĶvš'ʝƾK+żVņßSŽĢ,‘¤‡ż!±‚OųVōŻŠ*zų.Āץ^*½ų†—VšKŪ,e_ ³~B·©ąŠė¾'üq¹Öuy5 † Ó#Ī”O§łā¶ņE^Ē)?Å=e,dX6Bd+ .dNµÄxJŪ^ńf½yż”fæh…̉•*ĮqĮĮõ„bTµ=ćKŃt›«„ž×¶Y'< Gpj·Œ<;›n,f[‹b€œŽc>Ÿ…ø»/xŽŚŅĪįä Ļ2Čv…^ż2q^ĖšOā‰tˆ/t{ŌCYCGĻŻćļfƒSōH¶»o [k7śäĆW¹1³>F~Sś×ēOÅ]DxāÖ„āG…5ŻøŽ’DƒœwĻ­C“ęH–µ>ŌųAįŸxóĀ:n³x#MBX± xėĶy'ÅMoÅæ³Ņ¼Mk‚~ŅŽvsžÕjZŲ—ĒĆ_‰VZDD“sOhŅeÜOįYņx’ĮŸšžióÜ\Žķ·Å…Ź)'ŅŗŒåIÜśĀŪRI,o…õƓ«m ˜M¢¾ųļń‡Zšö£•cpéūµ9lg’*%$ōC…=u<‡į·ÅtŸ}¤ˆ.%øuĪń¹rz‘Ūś/ćx"Ö¾ŗĻyĢņ²[:0-s•?g(«µ”š‹Cy§Į­Ųų¦Ņ du‰£ł²GŻ'#JĻšµž…Øė–70馌nž\NFeSœž\~uŸS&očž&žĢÕmõŌ'T ž€(ĄśWuØxÓÄ~=ńf…•(].žy#»@$‰Ō²qÕ[éüém¹'Ŗé_¤o†Ś>«kuØ[ExݜŒ9GųWĒŗnyØj’2°ČĘDAÉ^sƒP\bv—žŌ,öČŚ]ĊWzį 8>•ĄK«&•~ @Š*#،‚{`ńHŠś/Ā:>¬t+^ŌŪOŅä“tŒģ©ÆųÓ£xĄŽ&³—Āŗˆ×“›—-(Sž¤ƒĄśš Lļ4Z_ųWO¼Žś\ȾZ!+œzć=knŽÓL²ŃmüIw¬^Ż­Ń>oš@`ąķĪETcr’<“Cų…ƒ¼i6æf×¾T2l‘Už_]ŪkõOą÷Ä(¾1ųqgÓm6ΐģFQķŚ“QA(—dFŠōD$ņ×vŅO÷ŖėmR0ĢómĶL’µĢd¬{¬5{/ėi–šĪ%·0²¾pXƒäkńßĒßõXu-cÄ:a·{c+Iqo™žqłŠĢJ'Ėŗ÷†.“ū‰ļs3Ō”!9ęøżGqµó"Œ«Ŗ•>­ļWchĘĒaš«ĘŗĆ­sMՒīX¬›jLŽŲß?ż+õŸB׹×4Ū}OOo: eĄĄcœ~5£v¹ƙ²nˆ¶…y’Åχž;š¶”n؉­Ę¦āÖwĻɰµp;֙ł‹©Z >`’·—sŒKBŒ õĶu¼[ØųÅŚgˆ¬®’Æœ„ķóPšr}©_”ÕOsļŸ>Ó¼eį}␐ź6ā9³žļ^;‚?Jžƒ’ą‰?¶0ųÅšwÄ?³Wˆu„ŸĒž ņÓOY2’\ٶqŃŠąŒj›ßCŖøÖpŽiŹnYŁœ?= }gš“Å̶×SE=Å«ł|œ’=’ĻzĀKB„£Õå]ģČŠ,ŗd Ēq܇CĮćóÆą«ž ūūi?²ĻķKāķ#GÓī­>xī×<-,iū«{–bÓŪ+ŽÖ9²•Īs“ƒn2‹]tżOÄ稑ųI©é·sīÖA2±BÄcv:~…*¦ģ)!zc„wĆc†§R¼ ąŖ·=*Ž@‹–]ĄóTsWeŚBüĄę¢:w(ĄļoA֘\žŪ`ŪÆ©õ©Š »ĪzP ÉˆŽį×ÓÖ®E;¦v|£łS[Tä}ū"žŅ¾&żŒ’i?†?“ށ¬Egi¦ß„¾µhå•otÉ,ØqÜ)$p@8āæÓcįgÅĻ ü[š…üąŻb×Yš‡ˆl#Õ4ŪČ\4lC}AÄ Ź¢Šč;yę3@BLń÷öÆųŸ¦>®­ķ„×^Ō£k;Ł#1pHüłĶpT޶ącĆŚŸ…Ƶ†ŗ™·Ö®,\j5ÉLĢa=6žćĆńüt’‚‹| м}į‰|Q Y}’źņŽC<"=¢ Åė@Nōį`?˜mKO¾ŃoÆ“=P*ź–dC1XśŸŹ².-³õ$¹ęŗąõ9Ŗ"ˆ2Ø*»×’ ėM¼Ž3 ˜ŠFßNµ±Īё{ß'īcó©· !UyØ~fłšH×a?(aęóPBUr:c½EEŽ7c“:t©’VRW,˟ʃ¢%ÆõŃä?ŗ ©ćÖæuą‚?¶żŸĄo:·ģÓńR‚×៌“ȱYŽÄ‚ó @Śš8ō¤×Cŗ—cūxų{¢_XEįĻķ¹/5Å֚ģŁ6gę>Į±ė×½}i©ZßŪĒŖ+ļ¶|»„až­ūžµĒU8čZŅtÉb‚k9g’DWó ~ź3‘ϵ~’Įn’bm/ā’Ćóń·I²²­ŗé#>īś-Ų#ī”ݱ?Āéé\†Gš½­čš†}­ųsXˆŚk¶7ę0­Œē”}ėN•ÄŠ VSœć…T YėßcžŚ&øW”‘œō5ōY_C< $ĻZ%9ŻOS\U64¦ygƒgƒVÖJÕ ūŗĖµ—oĢź?Ļ­}Ŗ|Ÿ\š~«¬xNŽ;ĶRŃI-ŪågA鳏imÖ£m™¬Ö÷Oóķēµ’Ų‡IҳF±q é @±FÉéé]Tår% š•ÄŃNewąāŸ„źwšŒ(č6…ėÓŗį±ŒU™×ų‚ūRŃ“µ[…ŽHQĘsOš‹īŪPŠŅę3 JŪ2HĆVŽ=NŠg½¦€mo4­OXš{}.gŪ¹H c®Eu·~Š|U© -7Wø³‚1’|Ą/©_Ź£• #žÖ4[o‡×W˜ErTPrŁ^+Ću]B¹˜Ø;ep(Īö'€­c;#XS¾ĒŃ ¾x‹ÅóĆż”ŗ~ž®’Aó‡R§ŠW遞h>“XŸM³B0U”}Śńń5u±ś'圖ovzĻöE•„¼pŚŪؑO«źPCseö;łŚ‘†ČÅpĀZŸ°äŌRI Æh^Ńl5KOźņ29@ ¹ėĮn+äO|U¾šå…źREeŹCĆÓOsõüžä“ĻüA­jŽ&ŗŠi'‘ąųĒ&³ķ“/ķåˁƒ]“£}ļ[ćĖNY^ķngēŪü’«zD~²³Ņ ¶@®œ×į_ jz߉R(lnŅ"Gt+»>™ėҽ:tŃüļ:×Üū“ĮžƒLµh¢GÜq‚G§„z4R²DDdīk¦4ģsJ]Ī—ĮzÕ֛©\ČĒķóDb1øįO<~JÕ¾²„y¶a Wn†.lĖ–÷Ė8#§õ©Ī£bš\¤ˆ¦0 j2Ģ1ƒPǤCē‡ÜɟNōĄŪĢrZ“AT:­Q†Ā_)„aœvF±•ɬ]ZFe\HjҹFŽ?™zņėYšEŲϓԅ™>r–SǺשi—–ZŽ›m<_› äņĒ>•QFɖį+-ā¼ŖÆzz×9ā=. /XkzA·Ž1s®IlŸˆļZ(Žē]©]ŲėVāé8eQ ČA#čč„:éJHØĖ¹Zu†Ö`@$×®īŠ4hŌ¤„aˆž*‡¢V¶9».ļ ą¹HRĄW ū@čwž$ųY©ųKޚ“R ķåŒįĆÓ>™²•$ާ«„ÄZIČüóųYńc^ųoć(#×,®lu8—4Ņ9†¾ŃŌ¾ ŪxŠK}+χH[Õ ™Ž\÷Ļā+å±ų[LżS‡+)“+}ūJŌ ±ä’'m­ü­łW”ųÄWŪĒp!)­“Źs^DØ{ģ’F&Ɂ­®Q£šÕśą”ü«Š„)-Ͻ„ŸakMѧR2’čšo{mė”ńdŗ…M{ØJļq+rzŠVÜzb³$€`ŽõĢäö7”SV!æVU6qŖČ[ƒĒŻC“GX^Į¦±d;”ÄHĮ§ĢĻ3ƒŒÕ¤~‹žĻ“œÖz#ųKā5Õ¼2ÆŁnPį•qŌ…;öøń·€5ŸŅķ£ø¼;’€7Cųšģ„®~9‰į™ŠĘūZ_ >:š‡oeŃ4 fĮ”W…į”ē}łÆØ¾/üVŌ¼7šćGšŠ»†ĻİĀ#FĖĘIʶ:ū{VōĻn„ŖG~ē1ū-A¦ų‡Ē“>¾žtRA™/Źļóõ«ķĻ|=Ó“iGˆ<6Ö$O ä”÷éR‚hó3,l©Ė™_šxcā'†ŅóSÖ“mFDaš°Ū;‘_!ZŪü@ųQ¬ßé¾&¾ƒÄZ 4bś<ī)٘č:ÕŹŠč{\+žóÉşGiOńV•Ģ7 …°ēļqÖ“=„ ® LžAéQŲż{ ŒMYŸ£ ¤ŗńļüć_ĆÆk挓‰ÆKG}ŒŠēzķĻPP}+óŪöXńe®ÆšžĪ8üė?ژü“)ŹI“`ƒõČżkiĒD~wĆųiQĒcŅV½E+÷N1žw?9æhķ"ožÓ÷šģśCé‡Ys,éåā0Ē?2Ÿ|/ē^Ÿ§j- ’\īFŒ1ҼšūŸ®å®é¦r4łoģŅžhäA:įCÆ š‹Žč÷§I CnŒB)ļĻ\×/;G®šń–ē¾iwod·žH”o™āF!]½H«‘$—,|Ę äć'„Tj7”ĆS-§½ŒĆtöś‹YČx'©= tb$÷1’Ņ4~Y<ēÕ¢›<ŗł]>Ē'g=½ž¬Ļ#¤€Ū˜±Ū=+„Ņ5õÕīµ/€Stdäœv<~ myµ0‘ŠŃB|<“ļ5?ģXµy¬ˆ™ŹØc“g€­}żš§ćĀ±Š>#|ųuń‹@¦ ʱjL­ņüų8ŪČłJžzõĻE(ĮI9+£ŹĢ*VœTa7Ó_Ö«ŗ<«Ę²싯hŚ®įūoü+r“27ŚĶĢvį¹–Üp§§°ė_•Wžŗųo«k>ŌużÅ/cpŃŪj–N­ō”r¶0ģA¬jįÖńŠö°y„}=«».ŁŻ] °FŁĮ ūÕ×ųoįĒüKk&«£xcUÖe·'͆Ś=Ģ£ūÄzq\~ĮŸKGŗ—åҼZŃMky¢jÖ £k$ńŸē^¬čڟ‡üGhšärŁ eͱuŪ¼€xēėKŲČŽµxņŻ3æÖbŌWĆRkM ŅĄFčŲž:ŸčkÜægųSā…ÆĆĻź:U­Ņ\“dÓ®Q˜ć#ŲWE:]žÅcō?H¼;šŖĒĀ^ÕuŲō‹)<;¼ˆQ>^«Ć.:sŽkņ"ĪAyćŸŪ_³OeöÉ&v$…Ī1ŸlV܇1³®¼Ń<¬›6Œ?ˆō‘Ė&Ąć­a(ÜėöŖ×gCi§ß\š¹ėŽ•ÕŪh‹jRiŠ»ŽĒÖŗčŠrv> Žxß “į'ˆÆ-RŃul°|Įœ(@=5“xłAW÷ėį©õ?Ķ^0ā¼NiŒž'+¶’.ĖČ­±ćpņ‘śV²©h¼ÅRXvÆVœ,®|\ėéd_ŽŚIøćŒÕq čćåcŸSZÕ+_B¼V«,ŒĢĀ4ēŸSVÖŻČ,F:ōļAĖ9ōŹńƒ>Õ%²³™p1Ÿ­S‘Ķ)t/ć%6ōāŖN‚I‘ŃÜ <Ø©1lÓˆ•ƒČāØ}˜yĀDĒž‚ƒ)3¢†%HX:ØP3Éė\µķÄZ5RķœqüØ2q¹.‡į«éVņPR܎†½·IŠģmÖ(Ž>¹Ü cR§aØ!—7QjOCuæ\śÖÄ2ˆŠĒ!ŪŽ+†£&Pģ>E)±TĻ9õØ”»yõ4MO¼×“9›ŻN; €‚Y Ē#õÆń‡Å]?BŹÜL.&9 ‘øĪļOåS£:©S?,ißŪ†ÓįU­Ī§ā/憓ēG ?ėHģS99Æē?ö˜’‚—ųóāŪ x ®4Ye-©²l—#äćŽõÓF•ĪŪXü½Ö/µ ūļ¶źZ¾„©ź÷ĢY˜ž¤ēÖ±ŚweŲ²±ē$ž¦½jQåGZŻ Ź„1§Ö”Č_›Ļ“g›Re,#+¹ĻJž2nœuČÅa'©Ģ\ū3ä¤h½A9ī+wOÓ>Ņ ębzb‘J7: EŌõżu|%į]Rńo‰‹(61v'± q_¹±Ēü÷ćĘ_ģļžŃW'įAY×HUĢÓ'¤™ė‘ŪŽ¢R±“ Ļźą—ģõšƒözš„‡…~ |?Ń<;*ī…ŗ‰f#ų³źqžkŻ ²‡d—z5ĖœõĶpU©ŠŻ"Õ„”×’4R9†Ī+Ut•“‰š'.ćžEsJV*Ę=ŽÆj· ·`§"½Ņ{{ˆUą#g ķY)•y#ÅtĆvPĒ„aKkē\“#„ōĶg)t~1e`æ)@ż=k'Q{Ż_÷6¶lüõQÓėYS‰óĘOڃą7ģŻ¢_j?üYdśü?²c‘Zb{?/ž½;?µüėć?ķ śŸ‡žAqą’‡Ū GĀ9lć>üꃊ”HüÄŠÖóN–mOÄ÷w:ξģZy®„2;Lž”ż{āŃŚ½¼q­ c“ąē?.c³c…ŃtmGĘĢ6vQ‹‰d ½kéĻü ū4öÓkčy+OŅØŹR±õ›e§h³·ŽŻ°¤ķēzŁH,•TbŲc­9„.‚™õ\¬dńÖ¶UnŹIŽõaTÖ3-Ē+A*–\®iŗ”Ö·(hŲÄŁVŪŪ5ĮPė¤Ļ‹üyfś„%³Īv<¤C‘ŒAXŗwˆ§ÓŠŚ5½¼œüŪ‡'5Å'c¾,Õ»ø‚ś&œŪ$ ē¼ŪP··±½™Ķ‰Ē\t­éHĪŖ?FgŠŗ«¦[éšĢ[Žp±Ī’p£žWŪc蚜ō‹Ū{ŠXØUźöÆVŒĻ*ŗģu>ų‹wį«ļģŪø 6A¹$óž+©ń'ŒRņņäVÜ2ŖJļŒūĘiS\\†–9Ō7}Õ®÷Œ {ŠæLŽ•¬esF_Ó< }}`n§KISŠœdķÖ¹Ÿųz4ƒe…̰:°;„Q¢ˆx*=A-–ĪżŻ¤RH· g×é]n«ŁŹ4ŃS׎¢‚e¦2YXŗł y=+F×Q’Ü*\'˜ƒ…ĻaA‹EĖŲ§ŹŖx¬čåžŻˆ‚屟»ž“ņkcŖŃ“Ųõ5’Ie:‚Ģ žT“Ki”67šķI;”Ń£ݾP2ē9ķSȇrŗ¦q:Õ'b‘Ø\kl·~¾6wQ°$÷®[PńŒ­§S¹_“[ē÷£ĖåŖłŹ7#ńe®¶ź"²K6}A=}³]žā3mjÖLŸB{T £‡ń…żį½XbIAŻČņ¦XkÜŅuĘҬxqčhYąļåię†;-—q(ח*Ķ8ģ;ĒZC=wįœ÷ŅĀésd6ÕĒQ^å‚‚Ü”+Ó„2Ü„,]ēj¶ĢćJŌµ’‰chZHūć­“]jvSĢ-8Žs’3šē|Kgg}`\Hń3•8?„4ŠMć}Ā÷PZź÷„Ó8łŽJz÷ė>ń ”wF„Ō 2kq›3iÜ¬Ź")“üŲĶx÷ˆ¼+'ļ¬N€°¬łQpó>rÕoļ4ė’RWI•ŹäƒW4ŻZāf7r;ož ?f]–Ā^jŻŹŃ‰v€? žŅd`°HåæŽ¬eøČo£µ‰<¬±$ē ēČ<6’]ž4sŸĖ޹äµjŽń4G y¢fčzžōƒµøntūr³°R;’ \Re±Ö5Š»,Ń:Ė·ŒŠYÆV•‚Æ®9ŃĘV93¬źÖ·hbxīlŪ óÓņ® \š;żEšńJF[ųŖĖå ’É-·nH©);\żŽč‡TG^§ŠeŒŅX¼±ZC"«÷Q҃DĢ›ķ:X‹Ččīäē5œc7^Ć„ŹKbÜ6ļ&ō ė޵ÜŻ){WEŁŃx ĪÅ;X¦F+å”u<ÕfņY÷)rQėŒP¹uXē‰!#$ Ö¬][±ŠX§døsÓ?­rė –ßn…ć{ØZhHĪęč}«+PŅ|‹‘y 6ń–Éł{šļԘ«ĶPļJßšńÓmm®įŌꐻ&ĄĮSA™VŪBÕ, ¹6ś„ś…| ‘·2ēŌÖZœö*ßB»·ē@Żź„ó³XŠ“‘éTŪOld”€¾‚€9ŻOPkbh˜õ!J‡H¹3\HŅ2ķŽqŠĮ•ĪĖ0ƱÄÉéĮĪj¹Wū®©ƒė֑[ƒ”Ǧęö4’I^Vē…>•œu +—*fD—8Į5ŗå°“€Ī“#GĻŻ5…iēܳ²ĢuŪžŌŌXģ<=Øß^LŃ]¬0•ä3`gŲę“WÓķķY„h„ż”Äg7>ØbQ˜„c§j§o©Įqpƒs#ē“Ć‘Xźdŗą* ¬«Œā¹ÉlžŅūä0äb€&ŠķģĆBé$ėœp8¢f †ŻŠÕĘ,Öź8?|=­éś—‰¼-4bÖźĪw¶iU ŽŸ{ß½dx&9tKc"4UĒČ8Ļzõc>‡¬Ž7ʗ—rės%¤Ą[,{£Vē÷#ņØ4=fņɉ”™²›}>ø­£±‘,÷7חVp\YĢÖķ!o3‚ {żkź_ Iį{O Ćv-!Y¼Ļ*MĢ2~^Ŗ)Éh7äy…ŽÆö)Æa[ĘNI ŠĻ?^kįž›?ŠuBŹ]F;«v•€ÄeJ±ļ۟z\ˆŽ~‡»xjO|/ŌD~!¼ŸO„Ŗ[˜Ž gÆC]/‰ü{”ėVņĶįē’M, dŻ‚ēŽõ|½LÜŗŸ>ź6WĪØ:Ė:ĄU¤Ś6ązuÆŠo%¹ŌaŠ“čŅėS”°UEź}„"ŌΚūĀÓI~ߌ6GM”|<©ļ^‹qšž{=ĒPÓ“‹‰Fę(™+Žwgé@s³Će’]!k¤ĶóŒ  ż?ZÕX®œIe3;D>]ǵUō³-Jē¹| šf«ąéķ|K¹H$ņķšźpłźqšżEŅ?kĻüWųy«ü>“Ņ“’°ÜĀö2FS”l`ćœW>*<Šiźhä|qą€%š·…u+GsģņJĒäĮ½·éŠśŠKā ^Éms,ŗ•°I—3(~”:ØĪ¬®yĻĮo hž;ҼCįrŃī‘U ž&]~š_QÅjųCöz_…6o$·Óź–Æs#Åö©7¹įBśZ+nrMź|żūR|+š-ļ…-/ģngOnó©tä`r~sų;ķ/X¶”`Łżß³ī$*w o©ļ÷fßĐ&œśeš`P¤`7ājǃl'Š5ˆćæ[[[evķ ÷©M½ølzŒüaāD²±ÖęFł”$ȅ{ا÷ģ›ćQ“‰G†a|ĀčŅ’VIĄbHėIC{„¶0hų@|e®Fž%·]9nĖiąe»d‘^Ÿškįö‰šKį棨ųSIÓ/nåŲcf•™?{± Ÿ„adĢÆŠš’ŚZĻş5 ė)§Šģ•2·hć’­U¾ ü ‹AŠ|UØx÷PYļī¶ū9āŽہÅT%„‡Ģ¬|łń¾]ĒO:, oyNü¹Ąć×½y>ƒįŁ|eik¦\K/ ¼Įć§Ņ¶§{jIŹųś-_įoŠtI/lnšŅŁ‘²‘–+8ĒĘ+öĘśnoš|@šē‡téõytŲŲ<1Ø,ŪĒéZ[B^×??|3āc_“šźćJ’ɲpøÉČėU5’]ĆäĮ+4 ĪqŒśŌč“6¶8Čtū Ė€ŲI<Ć»äśÖĢ—6Z"̚t\aˆ` dw-3Õ>!üBÓ"¹šŠÕībšĢ’#ؑIņA?uOAĪ:öļ…žšēǹ`ŃuIPßĘ Ay»÷ŠTśŗzQatŸ>"žÉŻ’Ćæh—æ…V_*Āķ!É)ƒĪīÕĆx—ā/…ž7h:Ž”x-”¾¶Č¶b ’R}3ҚT/3Į|-ńĻĆÓ6“rådł­ž`Tžßį_XųcᯃßāæųDµ(.ōÅ$£łƒ éœ~5šŽ¤–Æ¢i>³ŠĆķ­«[ŗ“Q²ē1¶p3[Ÿo“æ‡~'Õ­üEm4śEģ! øĘēŠ\óžĆ‡Ó¾?ųĒŗ&¹šćJ·ŗv„bcc"“Z“~‡mš«Ć°/Ā ĖOZ47RŁ’Ē–Ž0W9’=kĪ> ü5µń%ĶĢš^EīXE‡ ÄUGįSģĮKsź­2ŪD6¶ÖZ†›i=ķ¦cVu œŗZšļˆ’“’Ayqc¦<Č%ą00zōž• ¤|ˆö:„±›ĆŚ›½ž©)${ń·æ—Jéü!š«Kńœ:†™«j·iØ9&ŽS(żÉģp{ T›Åž=ā=+Xšķö‹¬Cqv¶ĄfV\,€“Čü‡ē_Xü‹Ā~,š.”¦ė7v­o|ÖēœĖčETY§7CÄæ|%ØÜź¶V÷1Ūpє8f\÷=ų½ėą’Ž“jŽš„±¬Ööź&·-œćØ|vČéNąä{'…~ č~?ų™§ų(E$z¬ļ±Ö 1¹¹Gć^yń‰ž/žĻŸ-ā/‚õ_†7Ŗ>ĖŖĘ2‘öĻ8ėWuŌ“éŸ |@¶¹Ņģn­6jHćf•øōé^7Æx}R’R–Õā]ēäŚV=ė&€üÉų•¤jž×µmā ›oŽ*ćĒf£5óµņ½¤Ļۀτ!™÷g| „|āN˜öoģŁńrIįĶVąĒny,ģ+X­}ŃŠG“Ē2<]U—ÕÕé×ją”` `ŒńYŹ=| ūNų /ÅÖŽ)°“E½\HV0 9ćń’ łŁyWkę†d$.ÓŠV-ÅŪcļŁĆÄzn±§_|×fI“ūø‰±i&Śa’=:~usį/ƟžĆŸµ·Ć’‹:`6ŗ5į³ÖmŪżUÕ«„Ž9ĮśP–¦±ž§÷ĶįĻxKāļĀ’|YšV” ׇuūī¢ņšTPx#Ž’žk§ųqā ü#­C–ßo#ķqŠ~5 ۘūNņ85},KFGMč}+ņ·ž ‰ūŪžŁ?²7‹|)„Āā߃‰ń….wHóD Gńė•ĄĄaē¬*EI4’«je$ŸGÄ=-Æ-`ՖĪ;yäc Ōqõ®C‚:Œ?„xÄ>GČŪ²+®™ÉR%e.Øū”(n„Ž•oąūtėZ’]Œ ܤī`xõ¦pĘU+·§Žäw&1±“óaĒP*A½Ųć< õč6ƒčZ‚=æ|§ƒW#ņƒ² Īh:)š,°ŽXŻŪĖmä F@9ČĒ­XšmĒķ­iØųkʰ§õ_ųœi{µoĖ=Ϙܜ¼ øü„Xžxw=¹Ok0}ėKøŠAp"h\’« #‚¬«Čm›Ī·“žöš7„ŪWŅį:®™äÄcŚÜs޵ŪGąŪ],4piźw¾«‚+тg™* Vńµ‰-±–01ČéZ6¶£3XKpŒ“])3ttz'‡/b¼38•9Ć•Ü^Åynę ’"Ļ„ [Aó#Ļ.­˜ɒzUū-=Į1“’zŅdd\ZIitÓļĢ~Õ£iy™f'Ž:PȞW“ÜLnG÷ŖĄ¼·ū3ĘźTĪ(h¤Ģķ:/(JģwĪÜwØķõ/µł‡x!X©ēŽÕŸ³6‹¹cČIn1’FkOAXį2(pЧ=p TcbŽöŚu’& zt*kĪ®ļµ+»«ˆwˆ_öj®tös½Žže·c;‰©cԭⲚõ•Y äs×Ņ”˜Ģ;UmM¦”„ĪTā“R±™«¦ńėYó= &o=“Š6§qėOÖlķB\\ˆ9ä „T¤–ēĪŽ-ųCąjöś­ž‹lÓ+fUĮėü½«®ńGĮO xĻĮwVśYž[E¾ŻcĀä®>éėžµ…|2’=ü»:©‡©ÅģĻ–ü=ā“y<1ؙ£Õ­žY"”ü䁃õ­’ é‡Äśī£ah¢(@’Zś¹9ąž•ó5pR¹žŠąų× ņśxØ=M}ŽN÷Ş Ō”Š|b—RéC d;6ē‚:óŅŗwńęƒÆųal£ŗ·3ˌ5š|¶>5ųo­^“ŗĶa;ÆÉ £ų ķ’O>õõE’x[Åń†~"Eo£kVš²é¤k£!_rqĻóŪsįVcV}„7«w>VŠüO5Ür[źʗÖņ4;”’¬ćwćÖ»­ģ:–·§YjwædŽźQ‘¾ź“ź{t5ęVŁżƒ€Äóaį'»Kņ;ߌ߬|įųgÓ|A”#©Y lnčĖ‚r¼WĘŽ“ūeń—1K-–<Œ’…rµmUÕØ®zŵƒ¬Öś…„Ö”„j0xī,ēhdVĮR+쟃¶ļķešuŃ4߉óųÓGL§Ų5ĄgF‹ū”žš#sSM“<'šÓ/Ķé:xČ_³Z5čĻŅķ7öńųÉąÆƒ>ųĮ®ü?ѕƊ«ė<ąģfQ˜Ė~ļ+KÕµś\ł;ƾ ńƝZĀÓ[¶·}>įwŪŻĆ&ōqļéŽŗYD¶†h€ņČĻJńjĻ[ÖŲLDjE4s*šĶxųpvĻZģlŒr±“™iĀG£*\ČՀ:ƒ°a»Ž•‘ćy'ŗŠ'K›‡ŹŒ)-Ź‘ÓÓuG‡‰Į«ģx’„|}«xpŲŁG<—vāeŪ¹óå±#‘ž{WæxęÓUńµÜ„äģ÷¦!ņöĘŃŚŗ)Ļ”óÕšQZ’ģ÷«?„œä×U9+=HŸ®Z­£ų—įw‰uŪxD—ŁžķŠę';¾¼Wā]އie«jŹ-{¹$ņ˜`Ę„ø\~uŃ)éa©YŚXŪjZ%ķƒ-½äR@Ē+žqųb¾Üųoń2’Āö3ų‡Ā×±[ޤ`ʈ0$Ē;X\TØŻœõqŽ=O­“kŸükšÓx–  }Bh|ÖVL:·ńĢā¾2žÄž5ų±ūų§āĻĆé4cĒÕMžIiĢ|™>fŅÆ s×Ob|ī}Ę˰ÆVī*QOŅRQæŹ÷ł•?µųH|-l×¶…ZnfĒ#ØĮ¢™®|5²Šµ-'Ä~ ™­/"s,øŹ«ƒĮ•Ė-7>Ź•75sī~Łž0æų]ØxZ“Ócˆ¤–M!]ĒnćükäŃ!žŃø»±VW–Fsƒ×$ŸėY¹\Ła9nĪÉ4ūē<ĄPz“ڦµHmH žcęµ§I¶~Uā?‰ø\’ƒŠ—5^‹üΚ9ńå"¢qÓ­_ŽB8|½½zTamOóļŒ8ē›WsÆ+ö(» 8 ŌŠläōĶz•†Øß5™–‚Ä‚„ö©-‡”DE‹&{ö®Ų£ ĆŽ:HÄf,+ ŁØ]P}ę÷¦dĢłÓr}ßoZ–'uIĪ{iKØešUP§Õ=Üm £&å_q÷©Ųēo¹2]„ČH%HĀśŠUdĘō$u¢Ę2•É $”K×ŲVoŪDJųŗż)W—RžķŅ-ĒoLõŽč~I „‰$걩 =ŒYŚ‹PcŠ8Ž˜ÅVA$XĀ©^¢øē0,I"\›éҹ‹ķRĘä|Ā~U^] źa&Ļ”ž ~Ź_~8:ß„«x Į %żāį®?ß»’ׯŲ߂_³Ə‚\[ų#A³Ö5›¤O¶j7pļ0 „ō×Ųę©#čļģŻ/FÅöµ –įH+“’ up[ź> UX¤ū™į'é[ĒC‘³«¶³‡F· oŸ*ŽXõ5aÆą»·Ü¬ ōŚ:ƒTc)\trN‘¼˜‡8«–Wö×ČĶ›šp}u)mQCHĆĶ^‚¼“Äž3·Ņ M{r¶ŖēĘqōėI­M©Ąųėā·ķa£é0ÜAeŖiŗu“*Ī÷Ī|“ü«łóż§æą¬6ŚmŽ·į/„QŁxēV,鿤ņKé¹@?75ŃJ•ŁŪcšæāwÄ|Wń<ž ų‡āķWÄzƒ0uY%"†:*ž]kĻē”JŖ¤ģe9q^½ V “±NąÉ#HĄćÄl’~qśÖÓG›YÜzF]°ę>Õ, #4Š#كƒ‘Ö²–ĒBcmꑵpćµ”k§¼­µaŲ Ž@ļX„s¹Ņ4µn‹.ĪW„AŗFōڽyÆŌ_Ł ž [ūDžŌKm¬Yh—’ ü ®‰-ö¤¢9gņČøČžuŽŠp?©_Ł#ž Ėū7~ČŚ]ŗxkƶž2ų‚Ą5Ī­|‚BŅ÷ ‘łbæF-¬^āMBA&8Ø «ōŠć©Tܧu¦yLVÕQÖC­Ō'a_š®YH [ y%–6B:ńSź7i °ž¤v¬ ś{=¢I)›$9ōõ®‡IøøI4ū5DŻ‹å6u–'y$ņœs’kƒŗÖļÆevhfœ£`徕(Ž~)|8ųA§\jŸ‹žÄ›H+w§Ż%ö•( ®§9ł}*õöƘÖå%”q·<×D#Ōäžę¶„Ŗi›wQ°95&§¢Ķ®[É}fNU›j¼v«3>mšæÄ]GNńµē„õ=8ÄUžI˜˜WŅŚ•ĒŪ­`‘a‰X(÷Č Z³˜ŸÄ:%ĆŪh׆Īū$ y ćłT6R²¦½‹Ā:}¬ R0Æ ņēīրtPéč×7rZĶv±JŪ¶±%Aö«?Ĉ÷ŗ-ŪDÓ<ŠB¶ yV‚æņÉ5-BŁŹŸ¼Å°×C6Ÿ}2†{tČz°äŅ^eE\¬ŗūéM$pĀ&P0Ū—#ŸJµgā7Lˆ®=+xlfąz]‹@†6»øF@ėÖ½ GŌģõM™‘Z#Éu5F|Œē|]&›¦Ē2MŖĮ G 9čE|Į«Ļ„ĖØIqe©Ū_Ū Är1ī)IŲ„M‰į› ^{ė_ķ4Kø‡B>ŌķN9­%x‹¬±«mČ55ĮŅkqšw•<ŠŒp ņHÆuM?G‹(źPu­TÄ¢īy«£ió1ÄĮ‰N8śTV–Ā“r^ šziÜr‰w,Ah‰ÉĪ1Ö±“ż&vU8`qõ5”ˆ±^k˜Ó¼]q©™,õ=&źĀX䥐Œ£Äeøš—3Č t<öäÕ¹ømĢŞ2Gp)J65ķ|OuaŠ®ļ)Ę܎¢ø½KRY%}²nläīļI²J°_²,€ ŒtĻ>µ_P¾c "ŗ’x52}˱‹O¹”ł„<Õē½]¼°‰‘”µ‡ČwļŠYJV šöƒā0߯Ś!Üv‘ééü«”ŸGƒĖs4Xäķ< uŌnE²®,üĖk¹§ˆŸ¹Ś²ķ/5F˜„ü ŖŒv°ä2öĒ„Y&Żäé„n1X?Ł‹t±ŖĢšøa†„:Łōß±YĒm#Ä’&wĆfø›—7¢7Ź:P=k¦Ā—QŻI¤¹ūćÆ5ŠO#ĀģVIw®vkku:N'eŪČ v~šo#UY€'•f©÷6ēfŠAż¦a0ŠįAėéY³ŽO, O ČåYŽś×M4D„Ü|÷O$©}ĪGž!Yö¶ÓŻĻ(”Č‘q“źŽĘ.F·ö Y‘ ŽŁĮĻZ¹į˜4»8o ˜}„Ė ›ŗń×ģCv1"µ¶Õķä‰&Hnžī ļ^3qØX’h\éÖ÷Ń5Ä-–SĆ Ķ­ŒkS¾µ¶yR`@\±éļPųgXŗž¼³•ć' Ó(ź›Ęڶœ‹Į"܁‘Į>µāŽ.ńēŠõ ]ķåc¹BČÆĄQŒäTŹV4†×$ƒÄóL"ó!š'Ē;¹½3GK[»ēVQz[ ö¬ęKż¤W6²9³ŒēƒļZŃ^EYDѹĘ9=i‰[q‘k0Äįī£pøéŸē\Ž§Ø„śŹmœ"v²ń[¦>kŠß|cįżWÄZĪ£²9%œ«ĪĶ×$wöėÖ¼ļA²°Ō,dt’ŚPB«6ÜҽҲ<(Ölä§šä÷6··ņ$.ˆv—UČQžę¼ām)'øx­rw§iĘćź+X«htEOˆķoģōkDÓķd¹¹‰Ę9oóšäļ5ŻSO† I-„‹oĢ7ƒ‚HėM3¢Ć/'Ōµ-!omўį ’Ö½_ök›O³ńn®ž!øH„Œ$…ZMŖ…F3“Ē8?„RdÉĖń7įę›ńY¤ŽųŽĶćČ1īĄäœł³[æÓü'©/‡t‰’ŅTŠČŲlŸAĻ„m”ŹōV=·į4#RŌFŸ­@ėŃ:<XÉ©¾|,·ųCńVĆĘ:°Š]/ķ.Ó¬«½KpTūzTKB“:/gĄ׌.uŸ ®®åfpq±ū8éŒÖ¶½©ų{Ć,Žt0ų$n8żk2’ ×®5­6ö ‰.\Ÿœ`„=õé]g‰~: OE–ļRŗרI$žsŲV‘‹°żŸSēė»ūßėp]­äZQ‹vé}Gn•CĘ 4(¬ęńž"ŠTĀ ŲO˜qóśÖ‘DņŲłn??†üD«ę2²É÷Ÿ¶=8ę»/‰Ž)›Ä^gN†-Bެń ‡ŽsVk AųąķĘ?üw¬jŗÜÖśĢM _3”‘W9?^ŸŅµf‹ļŠ·^×ķ“MZkK uó6©ūź0ĆߊF­-O¬|£x³U±Ōķ~)EhUšXžb§$ż*)~/>…{&į­Nņ[(˜Č ‡åoldóÅbsŹžŗ«ąĻŚ›ĮwV¶:/‹–ĘĻTgį(‚YgWĻ:—ĒMWLųŪ«hZ£ZĀ«'śį·sg8tžt”=ķTż„~^kZž“ā=o„ѧ”6ļ \väs_?Śųē[ų_ØZĒ„ŻO1a•²Ī£¾?ZŽ•¶eĘŽ_ ž&hŸ„Ó¬õ*Ķ/b rEĖÆ©Ļæ5śāė^še¢,}KtżŽŽ5#Ó§­k(ŁT‹GČž!Ó<;£Żé„Ķmc,Ół% $Œ ūó^ūBčšh o„öétAfP™(}±®Y&M;õ>ežŁ"ŚÄŹńĆv@ÜQˆäö®óį• ńvzö§'ö}杁ĻĢ\x=ūqķJĒ]3Ó#±K»"…ęQ»ĢuūŁõiŲæf}-š£ānńŸĀr#O·µ¹±Å„īÅŪ‡?_/ü}›Ē_õX„Ńtń Ÿ–Ņ4Źv•fäsžł5³•¬O³>„ż‚|u„|^}VĖā‡4š¢#}…Ģ˜Čž"}z×Ń^>ŅēŠ|I>Ÿ§#¬hß}OŻśUŌÜ<™łĆūIų6mĒ1x­”“OkõŽ]›żnOńę¼"Ū]»³»K‹}B{)ŠA¬]·4‹:‰ļ%ńqi/īEķĮR ’ī押¾ ų}ō]FK‹©0ĻqŗHƂŖP*d¬Qö§‰õ }"ĘāēCÓlõ{wµņˆ‚P‘É\÷÷ś×Ä_ | ā«‰7ŗōö2iķ)—%łdĖg, ¤Ń?#žĻćķ·ŠŚ1eØh7hĒ$…¹$uĻp?„~ė|Aų„š×ćßĮÆx/Å>·»ŌÖŲĒ/üŹ@Ć#œœąPõVĘ‡’]xGPÕ| 4wq 2ą¬*ē'Ź'*Šq^’āßZčž:½„²K8 0'N)Éu3“>hż„<'¢kžšŸÄ6h‘“÷o±‡Īų<ŸóŚæ2¼e-¦¤Y­dO“v#8õüŖHę<öX§Žó³Ģ#ęēōŖŚl“éŗ…Ž£kssowÕ„„U¹äÆJŚCsõæį/Œōļx7G¾Ó-;±7Ÿ»·‚~œWÆŚ\Ä /½D÷;ÅžŅ|e jś ģÉ ø‚LFļ%Ą$Wå'‰ģµŸ ^Ϧų‚Ś[kŪiLyn˟•Ąō#ŚŌqÜw†µ‹Ķ/TÓµėeū}œ¾txo™ųĮśWŻ_|9§üRšg…¼y„ŁI=«Įäźi?,§f7õÅ9DéŠ?wæą€’µ¼ž0šo‹æc?jm6­£sį¶s…h9>Z“żÓŲvc_Š9µŗYöĖŗ9#l< ō5£©×÷>ĒųSā8=üÕ¼om£„ī±¢ŚÉ²° :y«)ļå9Ž”ltÆóņń–ƒ}ąĻkžÕm RĀćĖĆ)S$Gī?ā1RkĪdG¬“0¼x.+†»Ō.žž”ćœįjd‚2¹Ūh~#Öl§I£VnĮAėų׎? •Šä]8js,ńļ‰eWs[(Ź¢®ū ļ¾üÖ~ ĮåÄwVsņćŸåŠņń˜ŽHÜöņŚ<õQśƒš÷ও¦[[Cm µĀĘ³Ćś{FšŌD"8aPŖ9ĄÆž&ģż?.Ąņ»vØ]ķCo\äņ?­s—wćO³šīķŠĄ‹Ė{śVŌĻŠ²|73±ņ§Ä/Ž6öļs§YŖ>]Ą×ē×Å_‰:wˆžŌÉ-Ę” øÓłW«N™śVżžr菔5Nō„Äv·r'r$Tŗ­uy“HĮN=ĶvR„słsø®®cŠ|Ļ܎‰٧ųWYŌVŚćChe»•TĘĢK!Ⱦ ųmšNqugŖk¶1ApX¹NŽ‚½*T­©š5*a\żŸNxā²²Xń„!O­Is*OšŻJ£ū½k¢0ģqŹ]O2¹K«‹»6?‘›¢Šč¼;i×QĻ ˜±ĒJÜƙž†—,eY“ņyźkVļU‚kCh,ž|g$`ż+1ó³Ģåķ䕃6Ęl…?ĆķVQBŪ0‹!Ļ~õ#ö†CŲČŠ3Čśœī<ŠŠŅÓŹ“ĢčĒ?+ µĖFI#±ö­‰"B†,c  Ö [‰ā!¶īE<:Ō’ŲŠ^ŪŽĒk’Ņ,:n'­±•Œm?JøŅķ ®‰‘—|œz¹Į‡!ś÷ Õ3BÕõ`",!# “Öž…¦ŗ\4²„—ęąAGOŖh7RG ±Ŗ" ö?…cx“BŒŁ[[-ä6œ ą‘äšUՎ™¦kPÉ™œcŽ} oŲĖnöop‘<„²r(q4NÅČÕU’±°qXF4—|m&åęęƒdĪm­!I¤ˆ‚N+kK¬nāž7 ŽŌB] æü!š_‰ģÅך>›‰bPæhH€iAīxėÅxö™į[=āi-,”ŽBŪ™•qøśšę©M=Ļ»ČųŽŗ£õg/ut.ė~•®Fšź6ŃNX`GjłƒĒŸüC§Bמ±}VŽ2Z[pß>ĆŻO·”®yR¶ĒėY_9%ĢĻž“Ķ{QÓ5%xʛz’bX\mnĖ­}™ąˆ~!ųo§x\¬Rź‰øĎŖ9ēøāø+¶¶?kšó‡­Œjģb‹8-5·ąķpČ„w–0Ę裗Ć3Ī= y’™żaB¤^Åķ~[™tÉ¢øy']¤(''§Jłėįf¢­©ź¶QĶĖŅn†<昜V3b”æ~™ō4QGµ›9č;ÖÄ"ØHŁÅqN'½Ļ}ińƍõķį֋ą=;V™4gŒ4–åɍIģ§LWˆŲźW–’¤šĢė(ōā²iģxœ¾šSI|[–¾3iü!ąćį’µiSīŽźęыł(•GAžżæņ=ć%Lj'“Ō`kkˈö«)čq؊™RgĒUÉą¶5µŁ’į,»Ž{ØŌ[Œžģ}ÕĻ„lhŸ īµ}6K-ąū/›å[•b;Ö/ tᩪkCʵo…^/šž±v’é¶ó*1Ģ‘±$ØéŪśÖ=½É†]—QÉ ŖJ€ŹTƒųŅöVŠ÷hŌMS¼„0R{Ō^(³KŸ]1 ģ2qœA§і&Ölł!®#·›JK]©ÜF$®7sųWޚ•ÄZašž¢2é÷+  ž Ž’^+Ŗœ{Ÿ[œš(ėsŪZk3jZd2‹)6°€œķaĻōÆŲÆŁ—Ęzwğƒš"jƒRŒEp ŌõõÆSģxAMVĆņ¾‡ž|gšę”ąļÅ©YŪ[¾w"eÕłCž’‡ņÆC‹Įv:–‹§ė\“Ā?ßő·Oõ|b¬ŗjŠÖ"87Āw/W1ā] /#7Q) Ī@Ø?mĮ椏ŅļŲśÖŲÓö“šš¹ŌōŻbĪ÷P2ł.p¢,„WЌƒ_‡ß³v­Øź‘kZU¤0Żj6—W±ĄC"8Ļ_jšK!ĮT—śÉ›Kæ°’ÓgšžÜ5½Ötßx;YŅšĪźĪä›w·<÷’=kÄ|'8‡KŠŅfvUĄPO_s^V#söģ=4ŁnOŻæŪntké,üõżō@ü’s’=k†ŌtŪ$ĄÄDŅFć9ī+‚qī{tacŃ“E-Ģ{YvƒĒc]Hß2)ĮZ˜G”u]‘Åų·RM"ÖK“ó2ē׊ū“ö%ń†§įŃ«[ÅÓ)Ł,iŹØ'‚kŗ”šĒVµĻƾ>xsEų‰į'Š<9„k›ch£ó#•œ›>Ųé_„ž0šL’ sź¼śdŪŁ+­vU¾šž»”żžóM³THq"ŗÜtėžcÅZŸˆµAe{$ÓyŠ:ŗ‡BūYOŸĘ³å±¼(ó¢ŗ_Ēżmü¤hČĀ[a yg†0sś×ĢZ¬ >§=Ź€^SœćœÓęeTĮčrž7šV©©ikz ¶:Ķ€ŻåœęXÉēŽõä¾ ų½ā źWw:\pĖ?—uer˜2ćØōō錷…[jxXÜ+[°Ÿ±ļtO½ķ¦”ž[ÜŖŽl ’3Œū’ZöæŪcÄæe µ…%’„{ÄvĘŅžŚ6B˜ß³~÷ ÖµuūL¾5uV7‹?ü Ļgj šEŽäI)QÕĻZō–,I ó/ó®*²¾ĒŪ`¤ć-”ż¢įż("-œĘ töGöiV/ŗCŠzV”©Üłxē “`%ˆ­-u²īĶ9®&uhĪҽ? ­kg+™Ą yÆZ•#üĮāN$Äf™ākŹīLڈ¤@!šY¤,ƒņö5ŁtGĖŹ¶ŗÖź6¾ćŸ­=NÖ’½«ŖœöŽ÷eää³–ō©ÄFzšÜNe‚"¤ ޼ō« HrČ7õ Ārčb5ɆvFBF3Öµ,Ł&Ur\÷ėAĶ6umž\ʊ­ƒœZZŽ’·p ¢#Ø'ĖPsJW8l¶L›{šß‘F ¢2öĶœ–”Ŗ>ꊩ‘ƒ†¦hśN£{q4×+ĆĮQŒ`z{ŠDßCŠm<'“h7ŹBxč¶3}ŽŌĆ$ %Ē ŽõÉP•#f žßˆ€“p8ļV®īķtčŗ(ŖI8Ą®~MJö…ļų7āʝ}|-š£Ć—ĶŌåµäŖRŽÜŸļ60qšżcų’ųųmšßČńÄŪ›ŸüMG "żŅA×õęŗ!Ī”÷册°ŖŪÜG–žŸź­ā@ˆƒŠ(é]­Ø•ćz=§”½ c­oģĪIŹćåšdņȗāęnøcĄ5Śi–³Ćn# :”ĄĘR.^F ‚zó©ī-ōĖä’Õ¤yóó Ō$kK¬Gz€¼1Ö"pEf.¦ÖŠÜIŚX¼;I* _©$SRgD)Ÿ&üużØt†#ŽZßJCy—qL[ u=??„~~ŠšSų;»‰¼GŽõ[Œ½µµ“Ētc¶š tSWzq§cšć·ķSń[斧Ø&­©¶į©$&+§?"ē»OҾkY ¶Ž-Ubc÷ˆ·ŌׯB‰ؖˆØÓyŒ(=i²G!Šåzu®ĖŪC†„Q£ļn%»TͶMĆjē|øŅQ#D‘āEļŠŃŽŁÄ¬]‰Q÷k”mŲ’āŁn)f\w« 0 AQŻŖe“Ī„•—a(ČW§ČāežUü„ńŠÄ“sÓ ¬®j,°±Ļ=Ŗ¦³ć ]3Oy¼©DRNќV2w:bµ<ś/‰zmż­ŻŽ¹«ŁXXB71w Ųö^ęæ>~?žßś…ŚļĀ?t(µFXäŠkūƒµ­ūeXTt韔:®‰«|RחğüW«ųµ™Ģ¦+©7,99Ājń’Ś/įŸĆÄ隷†.ķtļĄ¤˜Œyó—¶[ śVSV;”āŲŲ” qł½ Ö›o Ē0*»Xž•ŹŁ”K^‚ŚŲ$Ņ"Œö>ÕPZŻŻ2OkmqĄĻ#Ā‘‹=?Ąųq¼E„Yų†īm6éŪ÷M³#”ę¾śµ¶[Kx6G ½zÖŠŲē©"”•ÅR'” #‡¹Ań-¤ö騶›­Ā 5½ĒU’dśńėYZF«s§Z\iwÖėŽŠ¼A%“,W .Ÿœģ'ÅtŽń-­ć‹U…71-Ž„šģ†Ē ātzČK™’įēĢ-É„ Ž hā»°ømĄŚ$8?…iĖ„ĢŅ8_xZĖ^Õ ×­mµD?1'†®ĒM[émŞ7ÜŖńƒĆb¤Ņ'“xŠśšź-FŁ¢”ØĮā»Ļ jPNŃ:OĀNÖV=+)'r.t7ŗ0Šā9läAnÜø5‘ql¶²¬‰²UĻJÆ|š}µĻŚ-ÄÖ»Nģuڃ)FĒĪÖ®gØŻ­¢“ÖĄ¶ŌcČō¤“Ä) Ź¦ŃŽ)÷2ŲÓ*ĄÖ¾Ćó]E4JÅæÕžįW4Ėķ6[VŽēģĘféøśzW;4Qf ōŽ]ĘĢ©ķŠ Ń’Źę+o-ćŠXøičk9Čo‹Č~C“pppAÆQš©7gK¬1ÉįO½lgPś(–ņó#8=8®WXŃd†)ł·lņ;UE\˜Ė”å·WTRA-›Lå¾Ią(÷Øc×>Ž«°>*½™¤d,Q>Ÿ3=Ģ) <ņ‘sx-īĢšDķĘ¢Cīī+Ͳ[”Æ•{JŌÆ”aÓŪ>1ņ7} Ņ*ųŅŚ_h³h—RĖ+ʤ AüėĮž|6ńg†Žk SĖbĪ@Å†ŽŁČ×<®ĪždaÓü*ŗUŌ·WʚN”h²“«i,“ŗŒ…Ļz…Œ*ĶÓī®oc“ŗ<·=½kŚīt5ŠŹQ€QIć°“csĶQ(·œČ’0FäŒWØk–PæŁ„*9Ī9ŖV \Äø‘/¶O äz`šEt:n•½Q¤¹TõlŽk)­F£b†®·v¦u·šŻå^„ĄÖ%¶±<Äż®Ż u8ą 0ź¢ŽŽĒYH$ŠM‡=łgTń,·ū ;ŌįOQJö!Äēn5l2²{OÓļČx˜d“Ś’dömĪéEŽdSĘZĻæ³,ā32 čKtZj#NĒ<×KoŹ)IĻėY6ŗŒždW’&įŽĀ™¢˜Łõ aj·&ĻžMlŁh]YĄ™{“AWŅå«łģ¤BĶķȬčįTŽVAåŅ’če)\ŒC,³4BFŽ#¬-JĘPåd¶Ųz:5B§Ü‰;ųšŹĘš%Ģ…Aćü*ž¬Ž~Īć?QĄ5¢‰“‘cCҦV2\$.W–č‹6Ū¾Tg±=©ŲH¬5“!&R”ާ¶<ü±9ĮéI³X³D£Ēn=§ āŖŽG¾’G}ÄõĒjĒ™”r’Ēo&L…č~j‚×~ lę<ń[«*ꐲ7›l2ČŖRjö”–S#qĻjēÓYµk°ŠHld ó]\ą_Ckäē*:}k)« ƒūmˆ–6ōČō«1M~K5°®ń€jäȵYoZ ×*Žc|§8Æ8Ō¼am <6—S(W?)Č­é”$w6³„ßĒŅmp«¹²{z č¤Ö4–0Å Ģ$aÓn6ÖŃ]г‹Q¹ud!`$ ć­T×,f‘]<éRB00z{ՙJ=N¬¤µ0`y#śšąu}O·ÕRĢip#®(%#;ZŠ&Ōć?dˆŗ· ĻJ㬔ԓ[LJ̷Š`„U1€jdģo“Żßźnų™bGG!øČ5Ģjv“É:!e%‡ z甬[‘§\Į¾։ßų[yļ]ݤVjܳŪĪGOŹjbŽĘc§Š­>ĢžIy.T–Īņj{>JTw5¢ zŅĪgß–03Kįūo^ZH?“)dŲNWÆ<ÕĮŲאücųÆą7ŸLģŲŅāYbū̼n?*ó߅ßō{m7[’„ćÄļ§^½£øTp ’…{ V>b„šÄ&šŻĻ‹¼#}%¶³§] •˜åzžŁāŗ?hi)¹¾ˆm„|ɁĮ­lzP4uK‹©-c6÷ˉŽäÆ<ŠÅmVÓÄ&ßO½Ž/>UXŽ\Z”Ļ\š}§‡<,V-bĘbŗ„„I“‰ī+†ńĆk‰Ž”5¬wvzt§1ģL`g³ …'Ōé>mhmœ×““(vÄŅ“[śļĆß kŚųŽKX\B”„śƒÓ½;˜JZčwšޑ᫓MAbˆŗ…RŖģjuk/ǦI#[Ų°o,©ŁŪ×52dE1ĒąŸÜÜŪE”@Ś£yłÄJ¹Ē©Ļ>õō/ÄO]h¾Ó4½KB–ßPX¶0ņĻ8_~ CŖ‘¼b|×c{5£Ūźö7&Īl|Ń(öõ«Zēˆīõ}1#Ül3‘ŸjŃ2ģyŸ=ö‹ā]>žŃåŽ`\ʲƒÓ=~«ü=Š¢ńʏ„K$–°µˆƒäŁ›Ņ¢¢ŗ&GųĖĄvæ³Ä"Õ/—OńƒÆ%Ł9øMā'?)>’•|3®ėš\śåŻöŽ¢]F JsŪŚ³Œuøć±Ūč“Üjxź)#o¢ųføßx—Pŗ‘“X¦»Šv^fŒŸ”ZÜ«߉÷ŗ}¾…{§h2¦bH8ĒėĪ+ ×¾']²Od./ ÓĄÜźŹrzžć­ĪÓĆ “æŲŲxūBk›²7 Bģö#½tƒĮp«-¼ķå„pmpˆ¦ĒtŽŠ×į.„Æ^kRü0»“ŅÆī-ü©tö%cŸŌńėYÕ|gū2ų>öMgN²‹T2MöØåƒrp£Ž{~Uœ„m Üė“|bńē…×܄€ė€=±_4āwŒm¤»¼žėP0ķČūŠFć’­Y™$sŽ+šVµ jE½ķƒĖ$²(Ė ©,:Ó’Õ_k|8ų-£ė>±ææ¼–Ęī7 ±gŹ8Įcé֝’25OkzUÖ¹c¤ot)v‚1ó.yƘ¼WāżG@×-®.’hš Ep¬TĘ@ĄžtX|Čå¤ń#ųŃEĶĘ”pĶø—_0üÄšwzõƦ~ųsĆ^¶³Ō®žfŠÄ%p\oLއÓśUE Ūc_ā?‚ōļčRj1[Ūµ›7Xł1śŌžš…{š¢ćBYoW ń£,caQ€”†{“UĖ £®‡ĻśmŸgÓ-Æm’Ė[Yķ1!öŚ*­Ł×OŹcē‘JŹIĘ6>‚ų“ąkĘ2xŪĄś$BęM`~õG]¾Ŗ/ üNńń‚  ¤VĶ*ysAq óž‡"’}Ź>iųµćh¾)ŅüI>Ÿ¶—"+ż±b@Ēų²:׊ŗv…‰tä†@>Ķ*/Ź’09ę“qV0ł> ŁĒ§Éįj)y¢»‰±‘ļoAż+ņ?öŠųKušSĒ÷DIu/…ī% §Ü1’Yž£éčkĘ'‰\:Ü0QóŲp*„±F‰FG”«ƒ6=æąWÄåš/‰“Ķ:{ūŌŠę*Kl“½IöÆŌ}:KYąK«pD12rv‘‘śUĖ`/ŪŻĄ…¤C™9]§ņƍæjoŻMŸńJ‚ęöŻ[ź ~b˜ū­Až5K±ń哘n²JüÜc ׌³‡Ž]ŪÄ5[ęŸBŌ-ŁÄFć€uÓ8 źƒŗ,ü1ų«ćŁ öžš7Ž Ÿ¶ųwU Š|ϽӃZPł¬Ke+“óŚ­ģtĮŸŃŸü•ūtŪüų±āŲwāŖl¼!ā9$Ō|+=Ō Ē ŁĘbV'‚ŲČ_UĄūÕż¼4Oyd³ÜGåj|’€xlwՅxésc„æģWBpq.R@zWĘ“ĀūŻ^ŅmSHņŽ’MŻye·¬¼sö ž;W›-ĄųX}VŃu ‹‹I›©[=¦£o³>KōÜfVņ5üĶ~ߟ³Öµį}Bėā5“žžÕał§·=}Ą9«¤ęMēĆosä4ǶEēń)߁ŚŁÉķ]ōĪZ‘3%l ü™ę©4{Šm'žufņ~RŠF !b­žŽ“ Æ(üʝ“óH¼ŠT„č—Ģź9\а‘€›øƒ¦žä:šÉźV­.ų ‹Kūv“÷³@£ƒŒżŅƒŽ¼”õ©œNčĒK¶:ŒōĖČ“ķRĀe¹šĪ¢»xŚ`—8Ē>ü~^õŪŚ^Y¶°žø’(µˆP\Ū‚y’,õ_Qü«†Ŗ¬tŗĢZ}͜śf«a”„Ž£ZŻFé¹^6HaÜH?Zžæą²_±®·š3āߊu1”]I££½.īŻ2—ŗS¹1ƒ÷āl£Ųō ×8#š„œJL‰øÄzZĮ–)¤øQf8_Zv.ig+[Ą¢UfņĘx•ō/€õv“¹ÓK»„¤„OĻÓÉ^Ÿ2hé§±õÖ¹į k–vš‹ÜŚ OģN!l­ĒŻ'׊ų \×µB$Ń®g½H”£Tŗ¬U•ęR†¶e”“Ó·>i,[Øé[–Ž·yĢ·P ŚĒ2śW£`Ϭ> i‡U·½Ōš+Ń?tĮĢ{MWųōm¼gćY¬”MŃ8†5€ä:ć8üźjUI\ŗqm¤ŽÓą÷ģö5‹«KĻFY2!UłG¦}M~ŸųGįŽgggŸ§Įdbn~lw>õņŲģbœ»Čšń†¶Ōõ;JÓōDŒ£nyĄėQźśŻœŁ[BQǦk–’»¹ś7²G•ėŽ#Ńü'`÷÷÷‘;œeś}kóÓć'ķs¬^ŻiŗMÅĢ[¶ā"D`zž•ķP„d~ÅĆ9_ü¼–ČųkÅ?õ’{ >IęNł‰Ė+qĄÆzįL›G¼øGI\ībŲÜä÷5čĘ=Īųc­ų›Sµ“Óä{gĮ™$pkŠ”łī“Ūw?Cžü3“²·›}̰(˜dŸz÷+­BśY!ū3Śū¼~UܗDyõ&z½ķ¾”§Įo,„Ā. õ®3V¹OœFąąś oŽ{˜’kB»¢g“V"»bčŌŌKaĪ™,$€rŲ•vCN·ŗ±2Ū•óP°ÕtWšę„ÕÅęžR+•/īĆų«O¹Õ’‘„ECڤøŹūZDzʖEŗÜÜĶ7 ·ŅĻm{nRpąĘy Ö3菷7Ėæ)Č×=k>Ęx™Ī÷ągø¤isFņÅbD–óŽ3L–YUķGf³ÜPTdzóßZéš`Žįæw匌õČÆ9¼¹Ņn`šeŪ>KzćŅ¢Q:iͧtpvZ}ŻĪ¢!ąö®®}&ėHBĢc®ĻQéYXūl³9{=ńĒĀ? xÜ“³#i:ŹåM øś61Å|Ū’/Åæ…š•ŸˆōRÓ¬2ü×6ģw¤9ēSÓĖVĻŲx?Šc «é$QÕ¾+MāM}Ƶ„MbBKĒ"l$Ž2Gn•ķß|O.¢5øŌģbž%WŠHĒ|Į5ęÕĆŅü9ĒsPrŗ;ZoµhÓŽ$±šĒ ŗNĀ¼Óąw†t’xėÄn©yo£ČŃ -åaņ¼™Ę ÷Ēė\)[sö<6i³R‹=ŻōØnu 9'® fƒĆéłUXRhŅ9ĢnŃŪ»¶EpŌ‰ōŲ|Mō4ńNo£ˆgµd{yŌ< ­•aģk’6÷ZœÖįaF!sĪ*¢‰¬Ÿ+ę>UŌōKˆmļ­±I"cøäą’#_Lü!ń½—üžæ•muķ1ŠFq¼sœĒl×]5©łåU%Qśšž#–óLŠ LaÖ'/"·ń(ėŠū;öPųæ‡öĻg,M¤Ź»e·`ŅO?J龜ÄCš)¤^9Ń4ƈ¾—VÓaö)‰ÉOöN=1\ĮżM ±Ōt›½×-ē~陳µF~R?ĻJķG”°öv9iZ¦ƒāk‹ūk ˜ōūŸ™ ĪÖĘ}ko4s¬P2@Ź‚G^õgŃąjmcķ?ŲO^×ō/Ņč:}·Ū|ā="ā ^ĢøņÜ dŚx$Ēø&æ5ž/xGJżšæm戾šÅÄļį[§–QȤ MijEī ’ō؜½Ūžn·²ā ØY*”“~n2i?¹Ūī>rż²¹&½ ü’>ÅJ2±ścx¶7—Ś~ æ¹(ćŻ{Wä'ķU”ā×@Kčį»Õ-.™ øv¼ØĶœ=?„vĒc“ W™œO…e”ZE Į 2{āÆkLs“`ŽBłfE_»ļŠŹ¦ēŅPŲäSSžĢµ{H·ü€§µM£ė0źJŽk1×5ĢuI¦zĶ“†‘÷¾Ÿ”Æ?ų‘ąŸ Ż Mj ĘĖWE"IŠćĶ'”#֑ÅW„”7Ā_źž¾¶}_²å¹ @Ś+ß>*xŚūĒZ5½¶­pn十1ģh9Ö)ž §i‹­$D…b ŚŚŚÜˆļ½UŻŲĒ0ÅŅĆQ•j²åŒUŪgAkF¤(!qVD`æĻ–=2{W„F™žlxĒĒŅγ6ą’u "æ_WżlW’ŁQ‹©Ž½ŖÄ[e‰‰ŹvÆJœOÅg+»2e‹j$¾GåKknē;ϙϧA]p¦gW.Ėą |ŸŅ˜`<½=«t¬\é«h*@Ńåś¾ļÄVŗ±$ōĻJ $ģ1ePÄ0ēéVCDN3AĻ'c™hÖY™7~÷ėL€ÜĒ2Ą*–ĪqAĶ9œW2Ū!h‹gėSEŖOs&ß~“ņvG;}y/$¦A¼Źū]Ķ捓?–ēA•Ī‹FŃIJ<³.Hnž¾õé1č ¦ųTD€~&³›č6ɬōłķKå¤uĻ~յ笐œ“æq\Ķ6É2.#ׯﭓÆi׎!×$u ¢ī#'ų½~ƒžĻßšO|Jø²ńGķ ©?…|9čĒBT’I˜ēŽŲžu¬)™Ź}Ś?|šOĆ»TÓ>[AįŸQå Į8wuõ®Į"±?eӂ^]ŽńŠÖź)²‘Ńižq(øŌdYOd«®Ž”P؋AZĘĪw!ē½Vžź+hĢŽĄć°=iIX”Ī>īóRæ B‹{Lõõ—4š}½³łd<æßn‚¹ē¹µ8ž揈^ŃtūÓż«ow­G Amó|Ž+óCö‘ż„|ą ÆüAńģžņAņģVėꟑ„’zr)Ā ōćcł·ż©?oķ_ćn«Øh>±»Š“WŠ[©$e’uēų}żkó²įüéĶģĖ4·B³»dšöpŲ~¬'+#łŽĄĀÆZ…D’)`Ąm8>µÜōŃUIt/å²§©Č­EPTnSŽŲØ0±āB¦2sÓŽ¶-lP‚v®ŽłīhŠŚč,ą4ƒŹ‹=[ųEzOĆ’†^,ųā]7Ą’ ¼){ćO]¾<»H‹Ąž'aĄ”٬aÜžŠæc?ų!,÷3i’j½F(ŃdK›}×8‰qœ?¹=¾µż#|8ųOą†žƒĀŸ |'¤ųKBD|˜BČųć$Šā©"Ņ= 1tš¹ódĻ~µ{ģóÜķ37—ĻA\rwv4#c*c¶ju\u©1lwįPI±VƒĒ=źdōĖŻ¬0<¬›‚ē‘žµuŖY[ĀNšÄöō®i¾‡TV§©ź¬”ī®fŠŚĖœ¼Œ@śšųóćgķšĒᮣidlü]«„(ĮHtū=źcpGć‡Ä_^$ų­É{„Øčšk’’f‚RŖÄö>ŽÕęPn”ÆĢĪył˜äš×Ł4ätš4q"ÅӏZńŸŒ¾¶Õō&ńDz…ķµķ£lņ£n&R3ƒėҹjĒ”ÓNgòź°Ė†’“ BsĮ©ą‘fŗ“`#mĪŒż+‰š¹ŸP7ĀųE“Mb;ŪhEs£c܎ā¼;^mSĄ)sį6¼ÓõŻ0e­ī6€ż{ń‘Ūü)ŁĘŁ2\9[DøŒłĮSż+šKCHJÅI#ŗ™ć6įCŸB+Ćž-é—zm•ÖÆqo-ÄaBɰg“ް”o”ŁŸ*4+}r’½¬¶ŽבEę™sfO"²9+Ć Q‹re9EÓŚī{`럘“\”æjÓõ]?V°ŪÜ@ł½@ī?*ź„# ‡čGģłń&īžV²×`k«*+e™qÉöÆ¢µ-\ČśŽ•ŖĒŖū„R‚r¾•ŻNGSs×|!$–§N¼}ƀø­zG†<-oeęYĘfę,›É?©®ČHäØŽoāÄxźĒK‹ĄšĒ‰lf)šȋ'=ėŠ4 IµHgki줐n1Č0A5½Ģ,t×ZN£Ix‘į~½Ec_Ü˜ģ¦‘””8Å!u¦²x¢W“ĖKt¤ō;‰­kķ2]!‘ ”&~é÷ —ĆŽ']D&m’§wV½yO˜śŃ`ņ#Ó/>Ķ3³ö§ŽzŠģć¼µˆcø¬āµ*>–šĖĀ~ķ¹éŽŗ¬-#‘VėZ^Ūŗ­żž ‹5¼~[Ž äūW›ŻGŗwy|͟„‘—B BņöŠŽrˆ8ĮéYڽuhńŚŽG”'ƒŒPLŁŁŻīqČ ©Į$wšžUū"ņOb£ƒA™ąž=Švß$žC‚¬c©Ģf; 7!Ö‡"“gB!]7ģ©ēYD$ˆz Śšö¼öw± T·,šĖ™ķĀļķ)–ĢLxėėRĶiØ\G‘Ā^<‘y榜[ŲĪH†ūJ{»ˆł«¹qӔƟü] ZŁéא_#ĢŹ~V=sT孍”¹ņm޽¢Ė¬Źln-īž)LrŖžA”ō·„®f’a40‹t*LRē.oCŲ­/ aÓ=Ŗ oÄ«g4 >f;VˆČł3ĘM©ų{UÓ沆Ż2vo5²CGž†½ĆzŒ3iKÅGRH 85} )£Ķ¼Y£6©qÅ5ŌĢ]‡ūÄ[/µI^e(NX‚ rŹFƒuĖė»eŽŽŌI.;±ĶtÖ”vJŽlž^ܕ>µ)Ų‰—ōä‚’{“ŃC/§LšŻ°ŽźŅIDnåøćŗf.7=—Gń^»iakorL–jŲĒAŽÕ©­ų¹”gU]܆ķė[D9QįÓźņ_»±Ž9`-Ę&ŗ-ĘßÉ’ŽŻĻAT„żSģóŪļŠåU×åŚOjóöi3.ę}+'63CDhŃĢ’¹h·r=+OQ“¶[Øī,\ć:T¶;Ķ&‚)EĀł«Ī3ƒŸzé¼3¤]^^+‰€¼ŸJø$#°×ģ-!Š6¹.0>š5嚝µ›ČNœŒ1‚;Õņ£9k”J858–ä•Čք¾<øū–Ó.ŠFĀsĶQJ™ßŻÜ]»42<-½’q\wö ­r×S^y’.sĻįH”×›E0Ä@CĒ^•­§Ģ걦ł8ĒŽ=+9¾‚r±Ń%ŖM½€f”õS޳õE‚(ü‰­Ż=‡JĶ‘ÄčŃF|°Y»sŅŖh–z“Ż\7œH$nļX»š\Ų±Õm¢œŁß“qĢ~Q‘ĘjÖÆ=„Éŗ37ŻĀÓJÄMŗõ¬ˆ¾dŠ’ąē„K®øŠ dGĮąwō¦äֆG•“w7cΈ›Yfō¬=Bęk/ž4C*ŽtcK—ÜȽ“²Ö&µŌ&¶ū=ÜXĆ)ä~>•ÕŁxdńŚ¢)ląääcŽ—;#±č6ŚZź ŃĪAC&œĶ"BÆņ)Įźhęfe‹ė½>4,abł’H@?µ±”™‹«čR^I°“JłĆe‡Ś¹«‹DÓ'0°kc ē&­H”‰±2ŗ%Ŗ˜•¾WõÅh¦¤€«܋Ē=je.ę±Kf†g†u—=«¢t“h¹ >:zÖ•Ź)ĮsåČĄv«)¬Ä›U$RąT¬źØ»¢²Šé‚īPer֗WCķŪÉiqœ˜ū©ōⷈj“ĶnZf.„rG]µĢO„JęKwX–ŻŽ˜ž±ŠO+ļ¶š«Ū_%“‡9üŌŹ v„ ¼ŚØ'#VJžŠ*˜J”ÉąVj,Ø«ššŒ[ź¶“ķķ)u$©ó/Œ<§j%¶”wE””TōŹÖń²5Q+h6Šųzfži¶\(ļŅŗė8ģÆ$KŐ¼”v…ßŅ®-!8ŗųÉtȒ š\gSÜc±«å3lō’ųź×Ɛx„nV`tgóŠūW旃¾üpżŸŒš£¢Cā˜ĻŪmü¶ÜĶ…Ė£·_\f°Æ.eŠ«½Ļ?eIń3Ho…żō.»£Ļ4‚–‡Ÿ”žā¼³ÅŚŸ‡¼{«xf8!“e,±Ę˜ļķ'Ö¢O–^¦©œźi·^ń‘qp޼Ū*ˆõėß?Ņ“¼IšwEI Öśäé²»M¤½XüĆ·jæh\ŖŲ·”¼Öā{ ‰ąRxœ};Tŗø×­õé­å½Ō-acœuQÜż1W\ĮÕ±ē> Ö?Me"Ŗ–ņÜoČ Nžµļqül] mOP‹LP[F"‘"]īIģ9Ķi#)ŌgŠ_> xā§€üSr4ŪV“KĻņ²œg ~5ń~”ńūĀž,2C©Ėk¤K ŒF0ś–śŌXÉß©õ_ĀĶ ĖĒśĘŸmpc¼ä'˜7aĪG§’Z¾ŠÕlāšų¼³Ņ®ćĒÜhó†lzĀ™›R>Jų«ćŃįńg2[Ü<,[2Žq Ń“fą1Ź·|ՑGŹ}2{ŠŹ‹ksĄäšm®‚Īšx=ȎIō®’ĆśÄ40“Ī–¬Bɟ动·Š¾v{N™l“˜.ŽŪMÆśĆ“ ÷żkŠtæj6Ś.”6xģa9ą–Y=˜*ŅŚŖ(|G‰õ«ŪkMCL†=N YXÜīlśŸZōųMmōŌ¤¾‹}ŗ †pNsÜu¬Z6Mcų{ūAx³į.«½ąėāŽ2—,³ ōŚ~“趆>"|*¹¹½Ó’×ĒH¶ŽbPĀżœȬŖFåøv>x±“Ęž+ųyāÆÜŪ&­wh|é™É8\’ž•ņ·ÄѤėš8·:E²_•ŁøļÅsUa„cā½GI·“Ō¢²ŗD€ 7äąÖ½1|;…“ė»×E‘T+‹”>õ×s•~ x‹Bń7ĆO µ¬×Õ„Ć,ø|:šĘ§}=Š"µ-a9m«pp~QŲžŸ­;éc7.ĒĢ_ ~|Mš½qāķvņčiāgފIN21Ž•īž(ń“ā QqØ]ĀŽHņ¶8Į+œb‡"e.ĒĖßé7lžhķó$D†ć”üæJĢÕž Üh~‡ćß źķ‹ „ž˜ŹHø :f©TdņŸMxāfńKĆŗž±,rŲźpژęŠdk•ĮłGnŸ|%f‘jŗžb’u™žāąrr?¹,Ģ­nō-NŽļtŹ€ļ8š®š+Ė}yÅĆLf$īĆ ųRēcNĘŌžMv+$±Ž—*wØ Į’9Æ£~ h—ž ¹µŌ5I/å·óCMe€'É Üż]šĪø·ŗ%µ¶d ع&0I‘1Ča_?jäčZ¤·"W†)Ę6äÖQ–ŗčšÆ|!ć?‡‚[]JĮu•$åCīśĆņ®sĀ>Ōt=īf’ßŲżÖ>Õ°„š÷ž%“ŗ’ŻK#!;[ڼ‹ö•ų„ü[šNrl×bżĮpFrž£ńR݁FĒ䗊~ź~±ji$š‚1I ]¹9žķyMŻ”$Ń1Āēńйv11mo,RØUĘĒ$‚·"æL’f‰ŪŽ“ĆśÅõŒś…;KŸ›ĘJŽ;ü„V8Õ‹Ø 3œš«©čšvæ¦źZ.«sX^Fa7`{ÖrZ“Ė©łwć \ų_Å:¾‘w@ŗÓ÷]¤š×ˆ$š¾£o¬[£–'”‘‘šĪLź„ŁfxŽÓCų­šŸGń®“ FŁ ZŽcĒĶž•~Ę’Į k;ū]kı×ĝjKM熄ģsnĄå£F<ćœćėźk.Ō„mż#ÜŁ=¬‚-¦ bpxž__üų“³¦Aįż]Ł5x?vŽĆ‰W·ł’ ē¾–4“¹éśżćér[_D eozo^ćņÆāÆž ±ūÆĄ‹‘žŅ>³“¹ų7ńńĪ¢ˆ›JÕŹī$1¶O™½r`fmļ&qMj4ž!Ņīmn®ą¼xÄńæü²ČR½{×#°³Œ{śW|)­ŹīĪ€Fs»®*Xъ³v±ćŪDó’?īö,ĆbõśÖ\ŒMąōū§½Œ‡īs±@ sĶ[T“Ą­iö(HČAaž¦¬D©9=zЦģkM›z7ˆüKą}oþ?šn£u¦ųßBŌ Õ4»ˆ@d‰ĆķĻĖĮÆō¶’‚nžŁŗķĒū%|<ųÉ„^iņxž;TÓ|Gmn俖ö5 "•<ŽpF…—­sÉ]‡ŁZ…œr£ŚŹŲČą^{Øi³Eʬ$¹¼Är¢¼Ś«Q™ß­¬|=ńbēHŸCk\żģelQĻüA};WµOĮ ÄžÕõ[…ßØŲŹŠ^ŚĶɞ0„¶?…Lea³ł'ų£šßUųYń[šŽ” ż‘ŁÆ,‹ķ… ų ņ}AJ£ ®Ī„z„taTČe>PB¤¶NHTXŪFAĪ+SŠR*œÆ,Ą±=Ŗ6e-ūƁéœV¾čć"P į_Z3’ „2ÉŽ2NJ§”EY[œī6®FÜĢ脋Ń9ue9ŚG5÷‡üKöÅŌ’aÆŚĖĮ^=Qø_kĶ‘ÆZ;dRćśn҆ūōä¢×„5?xŽŅŹßJ{]KĮ~&°ž‹wØģ»¶ÓÆLv öÆQ²Ńī57Ćzʤ’čĢšCIBzøśzW NĆg­A2ŻGØįeĻÆ5łé’+ż˜Gķ'š_:šĶćŻ ®­D®×–̤M\¼ļ'k ’9OŠ õ„¾=ń€õXŒ& OŁg ŖÜ£sņƒÜƒļ^Hń½¼›°`zžžōękŌõéé¬č÷&ĮbmRŽ2ąłoĻCĶlGqu¦Y ‰ŅH”‹–RԊę©;ĻršæÆn“K¤ üÅmųūįO…[@ƒĘV^&dÖęęŹR61= śWšŚRŗ4±ņüš½„ńgb¶źs»5эJx’6ņŽPĢŖ u98ā©U'‘Qi×nāѬm-®T”’ĄÆŖ¼šĒE³uŠź3yvH+#õV÷öÆ 8ĒØ®Dzø*]Ļ®|-įø“ńldQ“ø«Ö’¶£³¶ np8=š¾V59¤}¾]NĒ%s®Oز$ņ,1×=+É>'|Yšļ‚“ŁV;čg» ySĘkčpĖd~‰Ć˜'VŖk”łĖćߌĒ‹Lļu{1±RUcS‚pkåżWQÕo.nŻTŧ©ĄÜ2\śēµ{4ĻÖsĢīŽY€ę–öŪ»9p’XʧæNj]oV„é)åĒdʰO„z¢곜ń5„V{²ĆKvńV¬E„wJ¤,ŸŻĄ=»WčæĆķ×C²·”Āæhą±+ČÆRœO„CŪ¼ōpŽ×(ĒążŃļ[vRĮ°6åČõ®øG©ÅRDķ©,;¶  u®OҚц_˜c‘ެČę­ļ'E;ĪyĻN•µe}+cĢ#ļ~” ŹĒo¤ŻŹÓ0V;¹ÆeŃ%³xÖę!p1ņµ»ę^½}Ÿ±‡Mż¼¢Öź).nŽæ=Ŗ@f”Õ__ҔԬH¶i"—†Vā‚¢ģ-“7WšsŪÜH]ĻŹ•ĒŸI¹0Ģ®łž/jØ3„Ҥh„“±×ėWĖs„HŁÉLgŽ¢„Å•·‘å²M ĆxķŽj½Ė4`®Ņr: N°Ėń‰isɼKšæĮ>+¶§¢Ą·å Guč{•åW_³½Õ›Cżā‰V„1łö#ĶR‘śŽIÄ®’JLõmļ@ų{öMFO·źŠ]ן5NJóßx³@¹&h.cŽVvLØä6zWŠ¦ö?Øü1āHćT¢Ž±=–;©Ś2žsī'©źkB-JhtÕ±ŽZłžĢ{ž•āVLżŪ 4rŪ®ĢžamGŅÆ”Yc Ą²`ƒ\²ņ:jHē,ō;ĶīĀāai3x»6}h¾ųSć«›­%txŸS‡Pę·³göHā”Aõ<źµ#dģyēˆSÄ_ üFžųƒįx] éڼ;‡l0kÕmõ˜58 ¾ł1ŻD©Łźuą+S«:rROfµGE X$NsZ7ޱÖōŪ;P³Žxf·@+hĻnŃćśĘ·}ąķ!¼-vÉ{£Į1†MĶn:pŻq[¾Ö£ŁÄ­Ų€qZBG›ĆsFĢą~%ų[½x‡Ā‰h×ĪŪ®-LxóGb+¼/ā(tŻJ8eµ{ V6Ż=¼ˆQ•æ­uS}OĢ0^ĪwgŠī±·į£'œ‚lūĄÓü©› d‚Öw±·ƒ]tåfr{>ŒżFż™>#x¦Ę }ĢT²pc–>ģ€š3ŸjKų—”[|JÕ|9¤j–ś~“·¤²vr9z4Ļ7‡÷Æėx‚oųL“Ų±j.$\ žÉŲÆŸõ]2KlĖ,'“éÅS·S|%>]HųKćmGĮž¬é·Ļi©ZČ'SƒŽėīćėäÆų(wŠ›YųĒį’ĮŖB†śÄ5ŅąIĀØ?ē­rT•^†_Mā#ˆkŽIƓ³?8oÆf×µ9.n„•ēO“säW¢hvĪ»% 1‘Ÿzį©#ķ2ų¤z¶šŃüŖ£,}ėsTŅ­u­=ķn!‹r© …³õ©Œ§”±är[&Ž’.FCŠGŌVփ$ƒ$ŠIīr:P鮅WwGkyįŻÄUö‘­Ā’ŲÜ!O7ÄŲį‡Šā¾tų}¤xĻąÄūoZjڜiĖGØYƒ€ƒī‡=ų­©-ŽĶšÜĪčżÉų]ćė薞$×u#ÉmÆrę@­ =H_Zų›ö·½šœ’ ¶š–¹o­h&%‘"ŪóA.Nyü룛K5(8³Āō8š˜+ēt©ü3ā(-¾/ųgLÕfŒi2ę ’R|ä$ž±Ø{øjš?ü1oš³ā„ž!·‚ćG™š†RT>‡čxÆ—IŅ|/ńU: —~ŗOo÷ öĻćX¹X®}“@±¤– ?Mµ$¶–ŚĘ4łĢl_˜g¹Ź<öĖĆóųkZŗÓ&emÜŖ‘éž+°–?µ…Ū–jiÜä­RĖRĪ¤ÜÉ#é]ķ &Ćü«Š”JēńļŅĆƒaŸœßā£śæ—fA”²Ģ]3ĘMn#'-°o^˜źŅ„Šž1ÄĀī÷ŌØ0f®łVÆŲ0 Fė¾3ƒķX<“`Ż©Öī-ÓĒjŲ®[hh!‰†Ž*•Ä‘©e?*Ž”ĪdšµøMÅ²Õ ²$²)Œ£Æ4Ņ—VN<§•z”«‰ņę<§æ­;‘Li–»ŚL²ĖœäVŒHA‘—-ŒZbĢélŽ„–lņ+/ĆJ`l©'¦zÓ±”ČÆķbŸŽu9ÆįŲ{Ø («ówi{ZTzeČĢ@£¦§žųĀū1”ģGCX02ī|Scf7˜ēlC–sŪ¾­ųū|bųću¦ų‡ZŠćįwĆéóu{&¹LņPŅŖźc9²Ÿf†_ÕĀŚ ®©¬Rڜń‚ņ‘üXĒ®O^+čŻU³ÆöéķŪćvNkS JēCg§źšÓ«^«YٕǾµŚiŚ=Žœ ¶‰wž­ŽM\csžR4ńÖ”‘šV ֍Ųē½Ł<ķ,,aøŻéY°ŚĒ§@ó]Hn%cÜš+ūĪ;ÄŽ ]•ÅõÓǤi»ĖŽ0öM~xüjżØ¬­t½Alµ7Ć:d ƒsrŖÄö$“õéQė©ŻNŸSš'ö—’‚¤i>ø¹šOĀh-<]āiÕć›V L0åsĮ#׳WāÄ/ųĒāWŠī%›+śwØlį”®$pīe*®Nk^ EŽ»÷70¾¦åžš²Ü*1U×W[u¢Ec-”+÷śŒä x-ćifō  ŠäŽˆ±_±‡üƒć×ķö^1ųŗņü/ų[rÄ~~EŻÄD“Ź?twÉÆźö_ż‰žžÉž¶š’ĀĻirk+[Zkuó„`1Ż}{×%J—5>©²Ņoź[‹ū–¹ Ųž•~X.Ūl1ƒÓ=EpT–¶ä6ė-–ÜzÕą@¬ŒøÅSšēh;»{RnĀ ŽóåżļØj°E }„+žU !„ŌµY®ĮŽŹ?S_7|Jż£ž|&·¹>-Õ”©F -œY€čqĻåQ}YŁNäĻĘæŪSĒß »ŃtµxoĆo&ŗųģFWĘĶ·óIspwpüČīrO×5Ńõ:TK±i¶øżäk>nN1UOŠ|!¦%Ā]źvšJŸLƒJ„Kʞ§ uń_C“ĪŖŅ•8 šņ_|QŌÆ¬e‚ŃŅ;gly GØÆ:­S®ϚõŖR³L±,¤åŹŽ*­½¤Én—pČ%18Āē‘ļ\Jeū3čæ ük±Óü?›āhnc»PŃĒ·ų”t#ńƗ†¾£Šüo° Šm8P3]PŲā”S¼¼Ō®tˆķn­­®!ĄĖ°:s\Ƅ‰pŁ··LWLv9šh·iā2óŪéҵi[@<»ÄW–÷–­gq™ČĮė+ĆVVŚ|+cž‰łUÉ dūÖsÜØŹĒ§XYZC“^F“*‚pćלjń[Yܻʆ ĢNŠ:s\¬ÆhC„–ŸwēN²’ąŻ%Å«ĒŻó;DŹW7µ/ ¦Čę¶ W€ĖѽĶz·ƒü./4ų¾ÖĀi ¶:šŚ,ź]Ų,¤H’ž Šå5ø"–Ä<7*öķÌ}ÓZĘĀ2“Ķģķd’+B 9<ÆėYQ^U­Å¤ö²+“ņŗæœ š8‰‘F­¶™2‘µ£Aą­rŽł_SˆŽĀ6•IĞŒ;V«iΦЉ¶)JČ,č^"žu+5ēļ)侕ŅO©[k—RDVvĪē˜'Œ“ĶFՄšGČį•_qČQßĪ¹ɵØ-–A&ÖĪr£­D”a•t«‹Jł³pŠ²óøŽ§µuŗ­µÆž?³īé7`øÜ=jM9]‡ZY<;¤k9©® ‡;ܓśVqJ& ³Bļ,W°«’iśuŻ }žaÜ8qȤTL¦šā\ĶŽå”9ä€jÓx1-gi`VI[ćĘ—*(Ղ[9Ķgul?‡}}s[šdŹŅ„ŗQūn=ź’3”{ĶäÖ÷šp³æšõéé\%åŗ’6Į#8įp:VčĖ•W“ßZ¢©FŚŅ¼śębn[ĻĪKwčF®›gö‡€·ńŠÓū5“›—ģĢüpk9öfŪKQ moVē«’-ŖOn6ىįMLUĄķķ“--Ńå(ŽÜƒkĶ52+©Bē-—µkŹ#f2ĪŹfŖŹ}ģ×Eqįx#gó<¹ĄÉĒz¤QĒ]ųøičĘ4ߜeO_­`[ų‚I®‘į„ćvIģ“ō SV:Iu+‹Ł9ĘĮŒ «-擇žxć­IŒ£bœZö¢5huū:ŽGńg5éZ·‰į“O¶ÜŽK§Žb~ń "ģĢ!usä3Å4„s’3ŲמźrłÓ\;y‹Œ›½ÄZf—Ņ|ŲĻį‘[ö¶‚F6¤D¹Ī Øs¶…su_é÷š,·(²ĖĶųūW0u)­® hTŪޠЦe9t6¢‚9aYd䑶U;Ė8[T…dĪ'åÅY‹G0ŃÜ6-  š{āuĖGA¾`ģēųCC`‘—¦j[›˜'µŠa“lõ’ZŃÓ$ x „œćV2e…gx‘lŽXä0ść\‰o6ÜĪaIdU8RńUM›”’Ņ4d^!e?(Ö»{*ĪhIJېŪH\p~µÆ+[–“4 Ģ–ņ4#øžÕ¶¶sŲˆČē5.&Ēó½ąæiz‡ēš½ń–×s!…³•ćīœt5ōˆüįųCWŅÖĘa­ĪŲ¶hS,‡ß=sž•ō2©ŠłŲÓ±ł«iööņ_xr}>TÕ-ēhAtŚēo‘Šõķ_<;Z”°^I¬ĒÉqݛڗ::¢ģRšī‹Ž­­*Cl·r¾1Ųćø”®F]fį59ķlī$Y"m¬=æĀ™²w=ŪĀwś,֖ķ®y m²EߎAé^O­ųŪT“ńlcE¶“ks„ó_ČļŸJcč=wÄŚv“öŗŌwpI4ń/™ \yd×õŖŚ/Ä;Æ Ż[Židłjū™F~:;†/Mų¾ž(ų…ā„×–įe‘P C=K½ōƤ¼š;’ Ük\i÷°G¼–L)\gę?…BŽ‚„ĻҼ}įß|J³Ņu('šŻ™‘Ż>^GŠö;iZ6³¬ŻZŽĆ,7EG™Ż#ŻķÅW#5ę1n¦‹W’ėMµ‚ÖX¤#qۜäž=«Õ|;ą‹[+Bl¶ú ˜QIŒęĻų‘į?ź~%žĘšŽ„Č“?(Ąśßė^m6ćæÉsż½au§Ķ|¹6$Ē\‘ĒjŃ=5%yžŪš?ć-‡Å¼⟠Ʒ!^9† Gź*ˆ_t/‡sg"Īp£hÉ9õ¢R±¢GĢśF‰wm­C©ĢĻop¬Ą…|ž§Ö½Žóāšé÷:b^iÖ× %!n׏jwč?#‰ń¾Æ¤ėZ…Ę­¦Y4MóŖˆ}yˆńń‚+Z<— o%w wÅ4­”›ģ;Āŗ–„¤ų²ĒXӄ;Ȥ«’;ć½z7Œ-oššß4(³JĘG9īj®JÜȋÄ4G°ÕaŽ{’ ąr„g¦ uųµĆóu¤„ŻūXŽFń•v%bČĮÅK×sX»‘Ųé3é7“ńׇ5.‹ŖŸ±=Éײj7²xļPÓµŻ^Õ£Õģ×kø¼}~µ2Ė1ücć}/TÓ&Ņd†Ž+Čeņ`ŒŸAĘ įį)y­¢ŠĶŹ›‡q°“‚ĆŠV|Œ—čuś“ā]2ś) ŅīU†[njŌ•Õ·Ž‘ć I-tłpŽv–öĒ^õŖV1•.¦޾7ƒ5įŖč6wé— ę¢*’¬ČĻJś ąĒ€¼ā’ ė‘kڤŠfd©MĮ€;ĻÆJR¹<‡ŠKął>7‰ķƳgqć3ÄčÅŌ7B;ōōÆÖ µÖ.š9f‡pRŒ2f‘öĄ’é_/¼/«ĢįlREŃN~\žœWŌ_¼EąĖ­nhW±osęDX|ђ?śęØ%Dų‡ĒŽ1Ń5–× —I1”# ŽŸÖ¼ę’Ę ³€…ū8|« ūŸJFR„c¬·ø²ÖtéV7ī 8>˜®V’KĆM=Ķ²ĀŹź#ćĢ9č}«X3+t­>„žó@†xČę|mÆ¢~ |Qń]Ć۟ŽF’?Īa“;ŒOŲ“ß„j8Äł‡Ä±ų»Äl½½Imõdŗ,d;Ō~­Ÿ‡–~)¹¾T¹½[Ķ bV@ ܤz~]ė)K”“OVń5֟ąŌ†īźį H7cå’•^³ń.‘ā *×]ÓīRÖv;¢|8ĻėYKc¦Šõ’|Rńf‰į]CĆŗn§rtŪģG$H3¼ž2kW7žš›ė^$²ø{DÄm:FpOcü« Üłó^Ō|ć+­;ū=…ÜĘ`„•²„}+蒈ŽšīšėĆw.ö¦ęDĶÜfL–bŃ·Ū?Ø¢ĶµŲń½ įF©«xz÷Å^·ŗ}±>|pX£ēś×ĖözdW:żó]iÓ[,S20d#kXĖ£ÕkVŗjŻC.“ Ä>Zƒäy˜óN=kéMSÖąŠ<*|=j†ä,Ńē>bdwķ’Ö«lŌk±ŻxN×I¾†Ž[vˆB‹–õ䎹ļ_Ÿ’< „ÉāĶNHu©“M"hŒJ±Ļ$®+.mEmO’„GÄ6öwvOØK­[Ū hŽWŠ ņ 4+k»ŪĮ5¬¶’ŹŪdÉ ’8Ķk}MšKG<)­h:‘6”i&’$,̤w=śz֐ųö«§źz„Mi9 †Њm…Ž®ėö}“V‚ś &{[ėŲįi#F\½|é£|3–ŪU_ķ>{MĄYb~qĒ·…d},|k᎗J…%Š7ł3ĆWøųsĆŠ]$sJ7ŹųĪEDŲĻ@ńe)įdÖüi=ü¶® Ü*H>WØ?ēõƄ~<žŠ^ŌōĶ;KŸūš–t,ŪŽ ¼tĪMBFGŃ>Š|E®ų^CĒėšüįÖąŗ[ˁqo$¬C«Aō„^Čgš½Ä‘n@ʧwĢ;צü;ń’ƒ|Me©ZāŲ,ürĖŪj銩Gė…µ˜µ­OŌQ‹Bń‚r03Žŗ„‘w …~`Ł'°@|­ūSxēTÓ¬¾#ŲZŽČ}’õcćŗĶų’Zų‰g))¬°śƒœŹKCz{H~ϟaŠ5˟ė°™ü/Ŗ!Gó8TsÓiõļ]¾·7’fߍ ų‰į VM3UŅÆ”¹µrüĖ`ÅF8#µ L즵?»ŁļćfūG|ųoń³Ćļ ‘jvh—č§˜nĮ ;r¬?ė^į”źo£j–·öÓT‘IŚG5Ļ(ėcSīė˜ćד+k«s¾dK*ēœr8ƍ’iļŁĒĆ_µ‡ģńń_ösńm­“£R²–}y“q°¾PZ7CŌašp:‚ý(ö0ŖóųÕš»ÄŽ ×¼QįŁ]XxĖĆ×réZÕ“ńłm‘9PĄ{€=«ę)ah÷ØWÜqƒ]4ŃĆUuFo !Ž7!żMI·Ėp Į5”ĢāPøq#¶ Š6I¹aÅD‹¹Nāž ZŠL»Ż=;ÕEŗ#’ˆĪćøē=½©Šø‹ pJhŚčhA2«)Źł­Ž½Öæh’ą‡·$ß±ßķ|~xŚśŚ‚?Ł- i&Ÿ©Œ…~x ūŠŸršó'Tž€ 1“2Ŗ¬‘H1ūŲˆŹž=«œ¾¶o1&UŹøŖ@£Ā>+ü?ƒÄŗMī–ś|7Ēc]YÉ“a•F~CךÆĶŻIlõKv–’OūmŗHö:µ±ŠŒąäg‚: 5Ė`?Ļų)ģרxf{ŸhÖ©uu `š$fµnF? qŚæīķ¢ BÅŲzƒļ]”ŁHča2¼HČĆ>‚³ęINęT' é]gāE±‚…*9äUf€¶YĘ@éÅ$5c-“Į9Ē\b¬0åT&ӎh‡’–cŠ»h»ŠļPØ£­Ō‹š}åž¹«[xOĮZÆćŸL1 Ž™ šPĒwhē©Æéƒž Į’ń§ŠõĻ|qż¶nʙ”٘o“’ Å ņ]±»ż!‡$ŽŃYT•R”4»?Ø­Ąŗ?Ā%Ņžx7SkO "›ļ ±.0d·ēnzLōÆ®4É-Ž›ā”Yķ.dū%ųžXÉÓwēż}+ŠS£cŃ­-ŽŚŽę+Vż×߈~j„Z»Mj·ųɁĢwśÆCÅdњ?Œ?ų/ģ“gšĖĒzOÄķ#NdŃÆf’’I¼ŽDØ’ė­]‡)Ć.yŚkł©»µ‚xo3ę<åy…L–†Š}ƒįö¹q¤ź…PĒaˆź+č©cŠu­:ś[ÕTV‰UŽŽÕĒ[ch»ZĀĪźX-Ūbnܘ<7ҽ{U¶“Õ K-U„ŠÉ×ƒŹžĶłā¼é³S¦Ńī {Ķ?Ģkē·ĮĘ Lšk±ųq¦Æˆg†…¼Å”r2FA\µń rģoJĻÕßx>āO „ŲYfž(ń‚>ļ\®ńBš~±%ƌ|Ė{‰$"Ü ō÷ƇÅb\åwŌ÷0“¬|7ā‹hšk\‹%£ńÅE©k©ń„ˆv­0ŠGŌ`iĶĶ$xŽ~(ŹęIQ@W~ĪGÓ5ł»ć/K.­y%ĶķÕŌr9;ņäō§Zśl,OŪxr”hŚ]Ō|F±y€ŒńŽ•Ī\ė×W¦8Ą…Ā÷ś×·Bä¾ ń Åāł÷a§ł˜ś…ÜéyŠäjŽ„©©Éobc3ÜO2Ǝœ“ńÆZ•3ó:‰¢? ~ézmV+ ę8Éõ$÷ÆU—F[FhÉŹ2z0‰ęM•|©ćŪå± g×ė]&rŖYÉlóšŠĄŌ¼µ2Ā­Ÿ=~ļ<äµ'šc•HŚ9'±  QĄ' ! ’:ėōM0ŽK†ha•õLļ‚ŚEle‰DoڱtĶRh/®n`••ŁB¶\śč%hAws{©ŻŸĶhŽśTWVqE*[ä`?: c+”µ8Z8cŽÄ9ū¹¤Ņõ”£ŗ5ē’„Ž7ŠV “ģwڵŒzކ5›[˜Ž =뚵±Iōćk+.žJ¶sĶ#hŹę[KęQŽ)šéE¦XåR ¾“ģ3č G£Į£ÉÕ·˜ül}æw’UdßiVńM4‘Ŗł-ž ­ŠłžÅ/ Įi¤%ÜW £30fペ᯵»X®.Ņ6 ‚sŠ Sīd­Ė]åƒōéŽÕrŚöh¬ä³’N¤įˆÉ Ö2&²X%›}Ćõ÷čZMŽ–öGS°ž)²xõ¬ęj¤Ea©ģŌ w(Āß=½iŽ ¾°y•”¾zā°›čQĄŅ[ͱŁ»©ÆPšĘ˜-UŒē«7†qJ/Q\źn4XŃļ PrWkēĻź–ŃkÖX61$8ģkC¢œŠ-yu Ž;S­+‹@ń5³łZ¬%lä-“GŽéĮÅp^+šG‰> ųŹŪĆ>!RÖįL¶r©Č)ž„śęˆ”V§ĢI¶ŌŽFw3‚ °č*‡Šü į@÷Z¾æŚ€ ®£ßŗč£åó¬¾S„Ķ{æĮöŌ4×±šÆŠtA”lXę|H‘zƤ|ų„ąõ½gNÓõ! Ö³oŪ‡<ׄ gęUqŅ‹“·>žżšõH#ž;kėG··‘“$e]\t>ųƄæh»]N×ćõ÷‰4å²Ō¾Ś®įH.AxÅm6:(āŻŅ†īī“7M՞ĖØ-Āy˜Įlzšö}3ÄŚ_ˆķnķ$€gnOCJMžŒijUƒA¹±»¶¼“Q>$\pF{׏ŸšP+ļĻ’u¼:|ŗn¼Š¤—,@1’?ŗOJ娙éѝ™š¾§@¬²:ē8ÆE±Š8“Ė*ƒžkšhś|͈ļ#³’ŻZAO5ÜŁ3JAŻ”<õėR»CNvF‰ō“±gnæn›Œ’_ųū>~Šæü ¤|bńĆĖĶcąõ┸Ōō©>ŅŚAŗnc*‡#ęé’Į šT'%&ŗ+æ½/͜XüŽ_k+s>Uźö_×”‹įßŲėvqͧÜĆwlŹ:0 ƒRx‚ö -¼«¢æeU*»śp‰ęb± čĻŗ?eü$ńwĆ-{ĄŽ2“½³Öā »Y ¼;²A§ÆZüūż >x§özųkįŻ[S›^š­ņ¬–“ 1Ė|±æ«`֌ņyõ; ĀÖ±ī9ōČą×ńKĮ^"Ömm•ŠdŃ}”>iŠŪĮČaĮ49’MĮµ‘\ÅōéTnįŹ”›×(8ŖLĻg·egņ¤ß•o$a»ęµPG,ęMČS–c‚MjĒ< ‘“' G³1”»Šį³™7G“ŠŽēÄńY†ŽS1`ćŌSŒldäq—7÷—S ˜|'°čÕ%„½ÄŅnŪ‰ćŚØ†Īś-"[ūhŌ$Ŗ0{ėZŚF˜šjł›FŽIĒ{V ķéz…õ“6›e*TbÆ|5š/޾4ų†ĻŸ |1Øx†śiDR])mmŸāiĒDŹ”ūū/’Į?| šßV—Å,ćńæÄH¤ 2®ėkqÜČ$zŠż)øš×“cl³˜­4ŲWdɽ€G4„rꖗW‰öm:8ŅŠpĻŽEt¶žµKž“qźŌJB_Ē©¬dÅ:ŃņŒu•«§JĻj­/ŹćļzV‘’HŹĆ„æ‚7©ŽžŻ)’KēķU= L„qF™Źėž%Ó4Ø$d¶‰z‘ھNų“ūCŁh¶—¶Z” ®ń²»Ź Ē$dž“”nz©ŸŠµ/ü“ĄŸmu;ńØńwŽÖ&1é֒olŸŗ Zžxž8žÕ’>;źF÷YÖī“].RŽm„CųOEcߊīĆa[z›·d|Ś’ŗ—M«Ļ9õ¬÷?30Üė^’§Ź>­NāåC ž3Ó„I <«ŗD^§Ž9Jåˆć]ßs³Žµ8·UbQ=ł4jAg$(Ū}„kµœVļœ®‹—>‚“d(d~α_Ęߌ—XÓō/ų^ėKšŻÓyrjwQ•X0zāæ­Ų§ž KšSöYŃōŪļéšÅˆaVSust¶“¾3žõĖ9t4±śĆ§é÷^\Iv#ŠĘŲāBŖ@oķŚQō®Y2ł¬."ž w°™.W…5Ręę+e&G č ėY7bLŲÆÖą1¦;g­UmN›ŁWė\Õ$k gØxš2ķ ¾HÆ%ń×Äļ ü=±“Vń–Ægkh2JyĖę{gĘ³ŒnuB™łyńßž q-ʃš’9,¬Õ¼·•‰1šßŠŽŪSūG™q§Ģ’»ny*3É?äW c¦›<ēO–hwļl ćÖŖź1É,O.ÜGœńڼŖ›źuĮčrš”žeØŪ ō5Ē-šÓgV›% ŲرFߏ|y‹-tc“£Ų_[į&’(öł½³Ę}ė§Q™¤Ū½ž”iqę I¢‘AecčżiøŒÄÕ_YA*t†æŅ÷nrˆ–>Õ_ÚåėıX°K90į׊~B¤Ņ/KĢZ„ˆAqd¹FŽ.¬'ś}k鏄?ķnķaŃ|DÖŅc—łœg‚}kHõcÜś3ÄCuoĪ,M*NīÜsŠākø' 3LzÖܧ™Z&Ŗ,ņœ™: •­¤;· 0=ŗŅ9®BˆĖ&%2cŽ·¬BĶ$NqéėHč§#Č>4xWRń–ˆ×E܃S¶żįÜ»”(ķōƌ®cŌ4ˆŹõ3?$²gh¬„²čf}‘5{3(ITżå=«>CöX¤€]‰by¢QÉécĖuķ)nKMĖ ‘·£Ę~hŪŌWé’ģWń@ń‡€.<5ā)Å߈ōÓµ–ä#G<ēßńś×}6a/3°ų•šŸQÕu[x|Ł,¬„‘%RCÜöź~øKQŗ{×Ȏ ‹ī=†G·ņ®˜ŹĒŚč}ŃąūėėżŽźgfĘ ēŖÜ^Į{q%¹F·`qó½[BG%MJ0i0}µd €ŽA®į`ž5%ŠūÖ襩=Š·';ćnFkņęĒG¶ūT_ee?ĄĖ~TĖP87ų“åHŃZ” ŁYz}*œgŁäÄǁµÓµ!:g¢i^*±×mP@Ā9r¤ō®†Ė̊FÉ˜z`Ž”“ŲĘPģt–Ž$ó ĖŽ+&īTI‚£%3#ĻüeąČuŁōĶAÆ$I£o04NC)é‚k²Ńš;K$†Dy'S÷Ļ9­a hCd„‘°ż85ę^3Ä3—µHēŠq— >ļÖ¬,exBņųĪ-¼ŌŻĄĒ*+Õµ +»(žčģ·ĻCļ@’1Õ ŌŻX:3޵™ć WDm8H‚””VżŖdkŠł.e›Fæ6WJNO\`é­&Ć ó£›#±éXšu v)­ŚŻ"txZķ|ćeUK©‚8łNF5œeЇŅ#×ķ'½q±]Bčy5m×N¹v’DŽ –=OjŠ\n§oÓ ēź+9tŁcfŚÉQŽ‚¹¬„Ž C>A#éY×%…ėĀ—²¼<õSČ £ńēĆKm*mOĆ÷‘ŻĻgĖr±ģ@ōÆ(‰®!p^ېFįz~5Qž©ž—}lžUĆG08Ļį\¶»¦Ąbņ•ai—'pąšęœzˆĆŃ-ģē±½v¹‚ŲČ>CuaӊlQ¼Æ"8éPŒbQū¹&Vą ōoėWjÜĀę$V.žõ¬„̽kQ›P¼ÄBŒz(ėOÓeÓl­f†ā łø ßéWu/ZėÖĶ)³”[¤$ķ9=¾•“āM+N·C-‘F”å°\bhxõĪ·0œŪČ?v=æ­Mg¬+Į!·q€ōĒZR],u»æ1į3[¼¤ō+[eg‚༉äöØõʇi©G4¶¤;ó!ē5ŸįłŸH½TEūŠ…Ęjąµčƒćž ĀeŽč66ńė_üIųl@e€=x­ sJV9;o ųm¤›ÄZuāŚĶpw‘HÜ}Ojä÷–‘Ŗ“ČĶ·Œ’ ¹I•Ėˆxńy[<’1ŹąÖ¬ÖZƒ9gYTä8ā¹ęģPŪĖYõåo.!brJõżk3[“’+XćKĀč6²ņ fäĄņäæA؋7 äü§‘^½”ÄŃIыĢAƒ‚85%ó]õÕĶ““Ą‹ŸīƒŠē”µ˜@žxĄśÖ2ÄK;ˆ0q»Ö³ģ,µOµO¶²,*AW†QƒatÉÅŖŖŽBŖŹŁ^0H«)©Ģ$G–œŽ¹«Œ{š¦Nś|īr«27Ćüė2ä˜Jł³®y#µ>Rg±čž¹µH„RMÓĪ_·µqŽ&šžbҼ™į.U×<Ž£ńÅ3Χ¦_˧¤ķl·“ƒ yćhŃ\I34S `g„kAc¼cn’RžO!Œ€†ē‘Q(ź•ÕŚŚ!$-¹?Œg ®[]ÕM²µõžéäłsT£`6ü;ć_·ŚĆ‰­ä<:ČŻį]•žbīS“Ōō4Ęe_Ķ$RH" żąk ļÄ:ܶĖiīŪp„rFI¦āĪ|=ØĻ3^Mr’®üģn§ÜWM£Ų„“Ī0w¼HąP7.ē{q\F#Ų»łHKoc,‰"ģĀēƒĪGؤa)\ē/4ė/“ƒ±#|ą‘ŌTģÖŃĄŠJHżūPI’śœĘQ ćk@<ōō®óYyÆ<ƒHŽ~ö8ōŽ’Cø‰!…dHŠ/N;Vņ\FeÄCr©ķQ(š¶h>£iR,Ė׏„pW–vLļ-¤™|ņ6`B††”¶»;B|ўŻĮ­ »#»¼Ŗ6cęÓÖ­"9µ8ÖŌ-ʶ’qÓ5Ģėr„ä‚8­Ļ”ĒīćÖ³™¢9ė]Ås<ĀOL)®€Ū?—»!r5™Mhvņ÷ywn0AųÕ­atKK‚ń"2“‘‘šŚœŒŁ”×v·ĒvŽ æ•u֚dO`÷N"nØ=ke1ĘZÜå4sUÓõ‹ėKėxn4Ņ›SÜ­Ļ'·§ėWo5F7R¬%UqžĶGD$.ZĶ‚h×#ĘÖ÷2Xß[Łō'éżkī?€>,¹×<Œõ%Ž)’S™!'sd|ÜtõõÆRĒ—Č’Šų÷愚\¾>Ō¼K¤Éo —!¤ĘÓ$™ē#ėšóæė:Ž­öŪ{éķķŽ#Ąžć„(ģC.xĘ{ e°Ō“]Bāw‘ĢŪDgÕæ*ć<m­źś¬P]ZČžbüņģĄ_©§ā]3Či­/¢†3‡.¬67¦1V„s{tg |,ų•Ŗ®»oe‚åä˜wN²E}~ßm­QV[ye»BL‰‘Ź“ŌZņξü?ń—„üCöw˜X •rÆ#ōҽÅ>Ń|_įė> 8^ŁŸ0(fv=?ē„g:} ¤š>ųMį „_59nÕ5H‰-&eN9śf»_Ž Ō|u«¾«įė¹’°ąpT2 ŸAųV2Z¦\[>|ńŸŽŲ[\éq\É4|Š„Ēš>¾Ü׆ŽCŖ.µ¾£Ū¬lVDaŌgżiFkšČ·}Ļ~Ņ“āKdH..“€Ę7·¦@ģkń‚<5=ōhŽŻęQ¹00ĖZĘW)jUšß„t}oÄw„]-¼öe”t”…Żł×eā’kkµ“ŠŖ˜i0‚9ć#„PłćńÄaIŻ³K.}Ņ3U­t&¼vš(>ÖAČ\}ÓźM• tūU“šž”’i–ßi‰’El¶Oō®Ēƞ5Y­õ]ā;5ócy:qŠ5X~ųZwŠ}Bģ^,¬Rwe—ž8ĮÆ+Ōü'gkā( ½Äe Ÿ(äm,?  kŸĒvZM•­­„ŪJT‡]­›ćńƓ>!üCŌ¼[ÆĆb°“:³É ū¾daźqėA“‰śmšsĆ·_¾Yj­öŗJŃģa…ÉÜzć¦+ęŸ éƒLńdśåĘZŚ<9¦ķ¶µ°?cH’ÖÅ"‚ŌNj·Œ“»żĆŗŒ2M!“uU‰ƒci8;AķT_7Sć[ĶÄ$—· uuc,‡q“ęuēæµoĖqx}-V%ó•‰ Ē„1|ā9t-XOvĘKb>hńŒŒöō®‹Åž%ÓųŖŠŌÉĄŠ‡ˆ“tÆ2{9*’laŌēµ}šZĀį|«é2i±ÉØE¾W1¶B ĻĶĻ'ŽæZŅF6³8¤ń4~#dö†ī9ēhŪ‚§ŖäwØ Ķ„kMā8“É!°øR ˜ ’~cļG=ŁēČ’>\]ZĻ­ųJŚõf@AĖqłqW>Żx§EŽīņü-äp($0Ąˆ}}k¢ “}'ąĻŚP“Ū!‡c6ā­žÕ±ńēĮž?ÓVS£TNb“w‡ŖŌŹ=E'cĢ|=Ø$6¬u(ŚÖę+“®Cć”ƼĒ’·ü$²ė:|Ś]¬€»³č?!¹œŖŖæ°N„šóVŃÆu; oG·ńŠ0K›©•D±ų<öžU±ūIiæe’ī’Ā2h° ”ˆå$ēäuėZ‹Ś3ĮōæŒ~±¶“ŽŽįQ ćxoJįž$źßŚVQx‹Bxå½VĢŠŗżń×9 §Üņ Kćõ¶‡goc¤¼·Ép™A8Ļ*A㱯“>|Yšw4ó“šwˆķÕKFkcxöę¦Q,ö%¾Ö÷LÓęūN†>:tźÕä?ü+ž$ŽūĒŗ·‹mµKŁc.°ĘYĮ'åQŪµf‡X»š§ąļÅ_jÕįx“X%ŁräAĒO¦+Ü®~jŗ'ˆģ|I£[ˆ£ū³BĆrMėøV‘h|Ģł§ćg‚.m^_-ęž¶“$‘īĆņ¹ČųńŚŚĒž"·³ŗŗš6ŗ•¶¾NߘēšĀ7ößKᄱŖ3ļPƅėYńjMq!Ū' ÉĮĶvÓ}ż żš|sī&‹ŖĖ²^¶ä>į‘Į{ā¾»µŽydÄ)“ŠŽĀœöU“DŌaŸMÕa[­t1]DFCÆŠū×å·Ä? M”xÓPѤÓ^Ź8åoŗ²!ū¤ć·įX_[TՎsQ[5-®-ī„‰…,>æJūnęM3ćēĮķ3\·¼Cā <³lS2ĪøĘӚ—µĪ…+§šCßŪ)¾ų×ğ²?Å-N{?ksyŽ{Ž#·Ÿ¼`ž'iĒØÆźżo,/®,o#L”ŚrHČ#Ų‚ *‹Ŗ6Lś7ą×Ĥ²»·š„üł“— ęū§Ś¾ŽŌtıø:¼åÄ '_9J‘Į÷«k³mć Rh#+šŸŁņ:‚°³Éėģ/Łöż¤nˆsx#įv™gįoŚŖ’jk—€–@ż$XŒąŸLŌÉŲķ”O[³ū‘’‚~’Į)?eĻŲ;ĄŚ~—aąM7Å_å‰dÕ5›Čė73ć’Ņ6H\’ÆŃ¦±øXEŖÉ˜¢•=…yõdĻJ21|Gą©üG”Ķæ½©ūeī³/<p#øČļYß ¼S§{ų'Ó“ĶYŚÖöŚąō[„%NGLä~=ŗÖ6}į;É/4+«‘qwk!Toļ&N>¼qšæygŌ—ģsü³.:Zfq‘ņÆķÆū1é_“’ģŁć/…×6z–½/¢‹…Zį‘>Œ OÄzWł¼üqųMyšKāFµąmMn£“gyķŸņĮwń“žÉ~$x­ņµ²-å“F_Sž+Ó4æyŚ>Ÿ Å䯅Ū1Cß…rŌChłŠŗ„“‡płŹäu®ūÅ:ż„ĆéŃŪø„8U|ŽU»Ÿ„yąś@ś;ĆZgĄ×~+Š=?QæŠ?.x ēĶ\`óŪ­y7Į¹¼?‰ī?±ińłķ'ŁŻ²Ńn=0{WĶc!9)y®=ĻŪ†0é+į-M„W0eī>SÓń5ą~*ż–$ų“ÆŪÜ^M*épJfVQ‡WĻ@+å„}Ow8­ĻWįķ‡Ć “›+Śß!øRø8÷üšł’Ę~6Ó4{[‰nn‚c<{׫]÷™ 56¦‘łłń ć/ö€¼‚Š>7BA䊳ķõ;«į4“JņŹXœ‘Ö¾» NēńÕ0ī•7i4bÜZ ęe9&³fžĪ{2#,äü§Ņw„M”īĀäp+µ³čfVEøH` Źž„VīŸą?ZÓ£ŗ¶»kwY6¶ÓŠż=:֜ˆq<»ÄžŗŠµ‡ÓRī䔐‚Pk~ŹĢ*F³ óAØåEyĀėŚf‰¤(»!ŻŽ:rµć9óį¶Õt顔ū¶źŁĻųU¤jž×ÕÆ¼»a!|œ7°®ŗ?‡÷fĶļŅY$M€¶y+Z8®¦ŠŸsœ1›i8Ų–Qo~–Ó»PźsĆČŃ+hmÅwDl/|•ŁųNāŅĮ&ÓodX£$˜vŽ[ŲÖ2`hj°[G4,@~I^¢³õM=2Ȭ€õ'“ķXĢŅ?§ˆŒ‚Go—v8ķ^“¦j ‚Č6ž1Š)¢Ōldė:ĶäķŠlńŲõś×ƒk_i¼»2ŹLŒsųV«Ģ¤ģzƒl ń¬6s¢$č„K±ĘqY>.š=ß‡Ž ßõ–®vŒUhuB”„į«KTt— Ɛ3Š×°ióAØZĶbĄ\ŸĀ޵DfsPéšiw7!£‡ķ½^C{āV[«ķ?U±“%K9 „p?*ŗUYĮĶws¬Ö>ddŽAąWAldĀˌƒk Øś¬Ÿ2‹iOGry“_ķļ.ÄŲ%Ńy3€°osÖŗ/~Ģ ŸBÄšE¾£i5¶$GˆœnĀŻĄ5ąāćܿӄxÖ¦J ūźŌžŽųŪėV—P^I—<śąÖ¤0Ÿ.9†B21_9]YŲžŽŹńTkP…j2ę‹WLÅńłSéöwö‘HBz±ēśf¾ģżŠ\^2šåģf2~W6łĖÜń[J'Óx]NL-ŗĶÜü÷š-į¾ŅćgSŖĪG9 wÆQø‘Æ4-ATnø ‚3»Æ?ʹē÷kźsZ–½¢ųƒįņZŪ“–_tKĮ5²2`N€ēÆnŸųõuŸü} ügš—‡onōŪ›_Ś Šćx) üsłŌ¤z\Ś}e¦åR+²Ń§Ū•`£$ōļ['b^ŚśßĆė]›T±»}RœĄÅ7Ÿ|WœEńā/ƒīM„×jŚp8Ł·,1ߞ uÓŖ|.wĆōź¾h«ŁįŚĆJŃ4™“_xbĀ)W˜.¶”‘O¹šó‘qąox†bū˶¹—Ģ•³»vzd{WTgsāŖe’ ŪGŌ^šž‰g{~ńއ«ŁÉåc8•æŗCt5öæĄĻ‚ZNJ$·2ėś=¤2K²{—1l ć+“ÓŠŃ#ž®o*kSģ~ųCū)|7_jßō-kP·C(«‹®3±#RI9 zŠžb~+|UÖ>)üLÖ¼O}o<Ć-!nR!»9™ĻJē«”1œÖĘ^„H8ėk2Ž™y#ŲQųĒĖŚ»ū³A”!³ĘkŠgźXm æŁ¢hǜU×8äó]†‘Ō¬r8Ęj£{ž¼§dpšī½0ų‡”čæŲd!`qƒƒĮÆŽOŁ{ć6½ąO kö6~*š5Ü&ŪSе[ŽĄĖ†]¬ƒCÜė¤łuGÄńfž7 <-MŸąūŸžŚæ²Ÿ Ēķū"_ XļTń€äŸåY±ēŚ©?+ßt|¬:c͉–óÉ É4†@A8Īy®Ŗń‡;töü¼¾[3”c±PĆ*x·z‘ѾżŸŻųŸ~~Ę~8šē‹õ_閶¾Ÿ§Ės,v””ķū4§ų†O@=}ėÜæą­_ 4ohŽ †-~nŚā@ö_0óa•dėų×;[qͤ«Ó„ŹŚ•õķk~gē€-µ=_E{˜ģī. ¶ĀÉ*”!~§µu6׌³ŖĒ!ßӃĶrV‰ö˜:Čäšœu¬YźĘŖ±ŠĆ ’@Ux>‚ÆYč—.vÉ’¹ō­éRlņs\«^J1Zėå©ŚéśM„˜+ %žTÉAvp #9ڽz8sü÷ńŸÄēŸWTpśPƒÓĻĶž—ĢĪ<ņԞ9ÅtȐ\ ¶:õčÓ¤=ÉK[ kBY #×ZKgˆą©=»Wlcc>cNÖŠF*S[Š[ĄPˆr3TØA)€(#å­U·øß  ć4ņ•Ķ)'@nr½³ėYīŪ0¤üæĪƒžlg’o •ce?ʳVŌĘHVśńW ĪinE-±Į/ņūŠĪūRFY\Žjs3=īer' S‘ĆdŽGĒJŅm|ȑ)ݐ]=šÉš¬°:«ž:RšŌŠSŒ ­ā[qĄĄ­ķ"Éļ/ąÓ4«;sX•‚­“ ““Óqč£>µĶ%©‘ś7š'ž į©ųŗāĻÅ_å›BŅAY Š!;¼ńŒ#ØÆŁ†<#ąæ[ųsĀ~Ó<¦@p>ĖV”“ŻOZ“ĪßϱÓåHtų ŻŁćxēŸs[hó]²Ķ©ĢŅ÷ņĒAAŒ¤m[YAiø[ʰ©<V¶š®].däŒé6[’×4¹< SeĈC2Ån Š’–§3{=’ęŻüÜdœķÆ%ųƒń:ĻĮV6” öä(~JŹTÉ’’·÷ĆχüBք:aVE ‚Ņ8PĶ<Ÿ“ēü—ā'Åłu? |1Š’Ąfhä¹` ÷Š7P9®Ü5 z$~f]_]M{w}=Ä×·SŅĻ?Īģ{üĒšĻŽŅø±ę½ŗqQ8Ŗ× 7&w’«=3ŌŅÅöVsņž•gRWgērŚĘĢēdcŠtyS“Ÿ”ā³2ēEūk2ų<æ|Vż¾”F%•VŽÜug4{Į‚’><ų¦|š&§āŻM˜øU&Ž÷˜tõÆé?ö<’‚hžŸOųƒūOźšųÓSdIF†b·~»@®z• ұūåšŪį—†<¢[ųoĀŅU LŹs>Įųqć3>&Ŗéf;”] ļĪqß5Öy†ģ–īųļŽ•Ń}Y\‰¢{GŽUl6sZqk1ŗ˜H¦朊Ī1—o½ČÄŻ4KknÉꑡ'ų¾“‹ƒčf]LåŻyIĆ_$üMšö”g©\<Ŗ²[ø FrōśŌJ'TCĆĶI$–RÜ}’ļp ¹±»ŚØ]éķģgņĖd†ük4hsmjń]JŹēh[Ž®xcĘ?š®¼i¦ų—L&%•ÖŽ÷oīÉįÓś×}#)ö?i|āÅų‹ą+vŽößP·Ēp2EĄĄ#®?śõ‘Ŗ'ŲŲj6¾d×1¶ą‡”®¤Ž9.‡·ü<ųÉ6“čWzH±–.š»wÆzöõ\ķh.`yĻ!7rkkJ&½¬3$‰*£ F2zī¬ęK”n˜ŖR±Ÿ)·£[źZ{Å&QĮŹ•89õåzÆĆÉ5 ¤“Ō.mnb!°NA^ć*½ Ļ0ø¹­‰+2673X_4‹G]WFig¹ˆ|ńĆśā—3Ųv8æ‡t‹ķa4Ė™×OæBćcv{ ÷ÆµĢ°\Ū)¶ŗEfPxE4ŗ˜Ź޳ĆösKdąĶn̤|»€&±õh¶LCŠąć w­V¬P\¤ˆ“ūV¼ń$0eP[ĒaĶŗ\qśÕĒjtČŻęQµˆŸz`xŌ7:†yö«w‘6å`8޽Kā eҵy-ćB0vŒg64XtĖ+kˆå“¹/· 6ž kĖ=Ž Eäā ĒhķYĢ|¬łĆāƒŚõu.ćŗTŽ2?óŻ"ęÖŻö(Äóøē5”–†±ŲŅ3ŁĘHy985]” ¤(Į£Ļ@:Ö6(ŪÓ5+[HŚy ø,H#±«×>5Õ B›āŗ ķłų8­Ń§³-hŽ3“ø½K ¦oŸœöģ aµŽź “˜uš å›ŌÆŽV =:ÕYeŠśŁŹL¹ĪECń4±Z4¶—{%ĻÜ$ž+„µæ‘£ap”Īģē*dģirūĶå[4ČŪXņ1PAŻ#ܼė(Uł²y‰L妳†+Ł.` ›ĄO|UūM’ŹFā3Į#½L¢#¢ĆÖs2HśŒ–®0C€1Ķ\›WµX<µX§¹C·#øŖ—c« §%¢`Ą÷«:‡™w·ČhüĶÜZSDÄ©sį«‹››a%ÜE‹įAÅwϦYĒm‹Ū¤•2 tjŌ£Ęõė;y®ęƒO•›ld©'„u{{FøUėļS(ÜŗŌ|M„ė+¢¶Šł łĘzōÆVŃuGŹÜ“”Ź‘Č‹å±č: Ø3•KŽüncRų“J›Mt–G³Ēƈ+Ėi„O¦C-®”ņ7śČ;žUį})f7÷6:|·œ °ō­cS‘³u¬w-µ¬6äŽUWå¬ÉoVĆz¦“öh ~ Žęż!øMū•@É=qQieAŌ@8'ē­ea©3ÜtĻģ±bČXČ;wÆ-Öķ#ŠźHVņ›qPĻc-ģyL.Š1ŠHfPė4H®›³¶ŽŖÅƒĘ¶ !ŚK/Æ«Ļ.5;Q(,¾R±ł¹Ęß­6„Ńv Ō6›Y#œrFŃÖ±õ=1%‡Ė„J® 9ZĆŗĖfVČs˜sQĖaqꇐ+ÄŻ‡jLø"O.ÖŹX•aŚķ×·§¼T…]¦P:ҳö…ø”'Ō_ČuĒ5‡¦H÷žbĆo:D¬AøēŪ4¹ŁGSż”²Å ‡śĻJÓ¶¶µTĢCIŒzŌĘW4ģJXхńy½Ļ­nZ\[ŪŹāXCG“€W·½žmā)|«‡1$Œ ź:­r—ÓI,|Hséš8»¹/!ڶī% łrxŚ=«ZÅćmžx “ō¬T˜å¹ßŁ%µĢ(іNƵt¶¶ĻV…A`Ł!‡j®rLMNvžķmŚŻ¢u=‡Z«qlÕUŹ1Ąē ­dÖŃź–ļˆ£cęĻQPźw$9Ł£bqJµęF.•įū{ÉŚź[a"Ęxē„E­hMk§#£;wiøt7ŽĒ8ŗDńČŃ3“RŽĶŽŗŲü%<–©2Ī7mĪ+DmĖ„™… 3é÷[gŚøqZw3éW®‹A˜';‡9¢1±$+”Ļxš-D<įˆ\’+®I§Ś˜ēšēĶe »Ž6V±Ģ¹ ȊŚ3Ip…ķʜ>2sļ\õž„¤“ķūäVĒqšŃJ'ó‡»į=F»Š5-v€Ę¤’sÉüqR|_čžńn‰ęKmefĶöfgłIĪq^ē)ēÉ3ÅüR“ßĮq,+%ģ¬Ä8åŻœf°ü;Ø[ųtHšę÷² äv“Ļ=±ėSČE™éZW‚¬µ«{I¬®dšŹRx0 yė_Cų3įž•įķcLūXµŌą·2Ć&9‘‡n9éVŠWGi¶>%šÖīĒY·ŗÖ„ŽwXĘ8 Ė“géYé¤õI̐øĄT4‹-_h×ÖČ׆(xj­ƒnµ›'™ĖŒ’G˜żh6¦ŒŪ k~Õ4ńe =³6Ē\'Ø+ėVŅĶüiåÜ=¾­ Ä\tż?Z™D©[”³šūĮ¶¶7~&×!U“oį,`rqļÅxʏųsʗW1ųgL‚ŹÄ́·#pą–>½hQ±Ķ7®‡Ī·›AÖ$ó4¶ŽÜJpĪ9ÆqńW€ī5{{=cĆĢ÷ł`4,ÄöėšÕJʋS’šž•ā?‡ś“ņܼāŽvó@|ģU=@ĻNkōgąÖ£­ŲĀnµ牄a³xŹ©NKūxe¹‚$o-dwćw½|ē{āļŚųE>Ź·VÓ4ß*yd6ģ×-į ZßMfóCg:ńo—Ģ8ĻƒXĖK•µ [Äz»iÜĘk[™°# š+&:ŽŸ$pG<¹8aū¼œ`ʽCĮ¾:›Į3ܦ¦īö·vęBB–V_į5|ĘvXgć„I¤Uµ=#öZųoįMSAŌ4½oQƒS³“g&@®$n õ#¼3āg„u ďŲäµŌ4ų¤ łcx9'+)>†ŠÜ³ üBš‘ҵ¤u4Ń£%°ŠČõöäדüż¦ąų[įėŸ}†]wT’l&9“'åėŲÖV5å=Ćį|I×ī|Kā? b£Éq*)—„~]kŌ§šŽ„¢źOw{$é’8x6crŒt<śÖ~ɳž„3Ń5æčzV•§Ė¢ÉrČ7£ńµś`Öø½cÄć^ŅßTž²UĄqŸLÖ°„Üå”>ońæĀy/4Éī¼—°j Hņ®üÅ2ķĪ8äwż+ćĆZōšvƧźÖĆK–vhZ<‘žqĪj­bāĪü/ ŽäNźįĮBFqӐkҼ#ā+u³g©Ėž±Ē¼’¬qN÷ŠÜnæā9®¼E.Ė –Ó*˜Ś1ņ śv5gÄz]³éj³ZE ŖęqøžõQˆP>Sń^‰Ŗi:”ńgƒuŪż ŗY-ߐvć½{Ä^2ń&›įkĆā CÅ\ÆŁī,žL“#`yėĶj¶±|ØóRm:źę+łCieĢ;[k)jś_U¾¶ŅüouūŌß“ŽÄ‘õžT„Łņ/ˆ5¹mõÖdgPĖ8 3Ō{ׯ|ų>…ćm<…Ģ¢A§ĒēHŚYŲĖ£ NņŹT’HNĘ^F8?xūLx«įGŽbšµę«{-~ßf†i %ā±čƒ Ę@©ėb’>ĪńĻķ9ąm: ßųćG»nP/›į‹wb»õ­koų;_Óķ¦Ó5‹±‘ƒ¦óĪŠQʧĖß/õ½;Ŷ3.“ īUQ§F#L ¬}xÅ|ūń'VŠbÓōĖÓi÷$v‚^¾Õ”£a8ŲŪ_xZßįŽ¶tĶr;ÅÕ“ ƒ"‘ĪZüÕń~Œ<]Äśz©¾ŲĪå0Kų©‚w2åw>h’Ł¢ycp>VŪī¦&”¼ˆća=ėŖ.̵ęz7ĆoKąļhģ„Ä­8³•Sō‰[ĮcŖé𕼋Ū\G+œtPß7é_£zžÆo©ųvĒU³•^ŽåVE`xät®fŸPœzŸ üWż–ž~Š’ ¾9|ń‚¶‰āųHœ/üz]„Āʃ `Źõ^sš’:ļæ¼Oš£Ē>=ųAćm=¬ü}ąķZ]6s,f2öĮˆIūŹŹ¼0ąšGQNœ’•»œsņÜ ²;¤a—wŽ=ꯙy9ü«“暼[š*‰ZL„d>”īf)ĖŒqĒ’^«H²īņŌå#ښ•†]·UUČīOZ™ ³tvČŖr6‹Šž!¹²@ō«pŠC¹#OCY›Ćcōž =ūh_~Āæ¶oƒ¼U«źw:gĀLš'Š"W-ocˆ®1ü,FHē‡|ō‘Ņļlµ:Ö÷EæŠ÷Kø/,åFI ŒzŽ¢¢¦ĒQ…¬E³6:żī:׋|IšŸü%^Õ“‚M:żv²IGŻoc’y÷Æ:hĶ]_MÕ<)q%Ę„is'Š49d³½aМ•’huśāæą„?²µ–żOľ·—ȼu7Ÿ$"·ß#ŠīSz‰ŸĻƒŚ.÷XՐ#Č`F88‰yn1*“Œ§(ĒÆB”ÅU/nĖ€[žĖžæZ{*y!~ī9>Ę·R±Ī¢ĘĒd÷ƜaŽ }!šÆįu·ˆžŃŪ¼šŪ”–R.Åł©:)ÄŹ×|=…5™¬µ8Ń-$o–@r»OžÕż0’Į»Ÿ“ńŪā7Ć=KRŅÕµļƤäžń¤·-Ę{ā@ Ę”čQGõi§OpęYK›„8}ŁČ#®k¢“MŒ(;FÖō yóÜŲÄ»G³utb0*šÆhŗ?‰@†7‹Ć~"ł‹),õ/ū»€ōČĻ0DK±ń”oįķ?ĒŁ“ś†–āÓY·ˆåŚǘ| uĄ÷ÆužkkGŽH.A¶ŗˆ<2)두A ˜ndxzāęH ¶ø'ūFÕ¼¹üō__ÄWņ?’ēżŠoü/ć9ž1xF°_ėŖ×Šlž=/כ˜°;H{–Ø:!¹ü“Ėk§Ż¢)“aĒ–T .{ńõŖŚ i6šģAĘEĪ+šž£{o{ąbĀŅ+ø5 ö<'H[ŗ°õėłVŽ”-½ūBä* lvÆ2»6¦z§…—ū@¹ÓÆ/$k1qž‡×½I¤ųMÕĶω¼®ŪŚėö4Ńć^łņ+ĄÅM«čz¤ĻÖߣ_āu†µą€āø»¶?f¾YŻ pņ9Æ»ōU,ģå»±‚% ‰N ķĮė_-V„®z4“lų[ö…ų­$Ģ—0!‹·Æjü„ųńPń£2łó-”vØŻķō÷ÆW.Ć]Ÿ£e„(C•v<žźŃnį.Å~S†Nųõ§Ū kxŚ8PpæÅĶ}Ž—*³?=ā K­ˆs{lSµh&ŸČ¾Y98£Åž·žÕ.įQŠ>\pq^Œ‡‡Źy¬–³}–ä˜ĖȈHyõÕ Žfś²?µĻ* goJ  ż®)$R‘õFrŸc½†ŹĘņŻ@“ÉøPHŽϲÜi©6Å2üŻ» r(#yĪÆ"gqłxė] „­¬‘0da†ü™Öé:¶•ilaŸA” GJʾž73Ię£&z֙nZuÜčŅ`ŻżŖĶ“Æūµr[ėŲT·a=YŌ,BDVPU‡•ĶRĢżĒ.„hŁ”ļ<;¤ßĖsv`Ż:ćĶA‚~¾ÕępH<=Ŗ*S˜X–ÜN2sXŲ÷#MXō­1ćżęe#œv«ń® ; ĻŅ“§dvGūµ8;½+Ą¼}+Yźķ½»I"tą’N9Jiœµ0ŹD¶Éo©•ҵm1pцdX޾ ō=E^“į–†ŹŃGl`V^R1··„Łäb²ØKtspųĒNø_±ŻŽÄɐ£Ģ d÷ć½iÜÆŒō[ØŸŽ¼Uog2Ž ¼uDZÅmķOœÄä4޶.Xųrīł'·ńõ÷ˆaÜ9/®^r=¾bjŽ„į;‹ "·‰Qöœ `Ū„ęeC+„4Hē“­$Łi‰$č±Ü` Ÿŗ{ā„Šå¼·¼d‰Z{}łėŒV=ģ=.SæūcŹ0#µmYj_'ėW Ίõ,9ų—įæ OMń_†ō{Z&aę tĖĮ 9 ĘæT’eoÜųÓM:Ä;cąĻŚ¢˜žå|„¾Lpž t®ŲT>[¹™ąæµO‹¢Õž!Ćiįķjā;RŃŻĆ œJG@Ųź2ē^;ig„kĀ ZĪŽ{wa¼0ėķš×t9)ąīĪóHÓ|%šWÄ÷zd>“½Ņå‹|3!Ć£‘ŁqŸ¹Šž#’…£soupÓ |øCĢĶ·ÜxĶg&u, Z›?³^æ£x;ÅÉįÆßI‡4,·(ŹJL§#Ÿ^k ℿįńī·i jÖś÷‡e“ķ³DÕ+s°ūóX½ął x4«‹«€Ņ†Œ޵Ó[hØä\m‘¾•té]ŸĘŽ į²l?“¬ļ'{/딨±ŪŲ”# ON*vbĪ $ØōÆRŽĒš·xĶęŻYZ d¶4a 4k†ßļSĖ`Œ~5éÓ§cņéb4ŗÜĪŗ·ņ¶ÆU&¶-m ¬r1éŒq]‡sš„[æS\Enb9=±UZŁ`x«9„!ŠĀ™˜œvĮ„óĪXq҃žR¹’Ņ<›Ų€O½2Įe‰Ų Äö ‰;!¤eŒT×0©Ź;zÕE÷9¦Č-­f‰Ė1Źā«Ż¼Pļä {ćµTZ¹Ķ)t9«›ł]²YĄÅQø’)mXŪó×Ņ“24|?³“Ā äćšč/ōŪXcbˆC[ÅXNV9Øāf”l$€sō®„uå„BfŌa.ćŁG&³’2“¹öŸģļūübųń{§Mwæ¼\“—×p²Ė*ȧ‘Ÿź+÷/ąwģĶšÓąĘ…&…įOXꚤŹ÷R¾‹{ŹGń)<ZĘf2—cé½Ā–ZkؒA4‹ČNÕÓK¦\ß°WcomŠØźEda)v5 Ó--v˜aTaßjܒ¬xÜsŽk˜JB:»2}©ß½RīćÆ2—C$®Qž[E;‘ÜtÆ*ńļ“Æ[5Ö£} §Hƒ€ķōu*gēGĘļŚĖKÓ4{’+W‹ĆŚ8Üi% ČŲćņÆē³ö‘’‚£jb-oĀ ®/5ŻZ'ū;ź3ɔŒ­ēęĒ<ÖōiŻŃVGćæ‹¼sāÆź÷όā3śóҰ9'.…ų a”¾;bµl4“w;*ÄŹŻrg6AÜx[ڟˆuŃ០hƈ¼BüEgg –I¶:Wī?쁒Aų³ńr’GńŸķ([ĄŸ¼„ønńēHsäk9Ō7‰ż@üż™~~Ķ^¶š§Įæi:øϾ5ĆćļŠś&HbGĶÄĒגkŠ„KhmĢķ:āźK·I#x#śu®œ(õę°u Ł&W֐¶sƒJRøŒ[½LG#AäpN+:{3ļ¹/\ó‘¬#Ōęõ]F"*$ļƒ^}{¬’]ÜAej>ōŽvŖ­sīuSšĻÅŪCĀ_弊“WÓõxīQę Į}Ę3­~Zü\ż§>'üXŌ!ƒWÖŪDGdĄJ£8ēÓ­uS¦t%cĄžXٟĖ,ŅārXŸÄÖͬhc]Ą!ƽu„m”ŗ!^Ґ‹øę›·Ź#Hr­ßҲ›čfv:F‡©ŻÜE Q1FĮĪ: ÷ įÅ“H—°‰_½Ękš[•X½Øü*Ńu=ŅEe²ńyVQҹ%šķē†īTÉhŹŹp¬S#ėŒV<…ūCÅZŠ}¦K{w›ī°U ¹¼‰¼1h—©µXÜŽĖŒTXC×¾Ųj¶³DšĄ— Ąf~µš¼9į­fā ‹-֬dzœzšŖ‡ĻŚÄŅ}²IPĒ* P_ŁHc<Ö£Č§‡½sN&±Øv‘_yékp’Ä÷ļzē”Ūü/ń¾ ńLśü–’Ż2ØĢ@CŒek'Z“:żWÅÖ~,ńTš„Ō?`¹ø“ ąuś×O„Ēą¹c¾³»Ō’³õµ>u¼äįį8ēž)FŸ`“īsŽųŃāO ųŻ4Ż^ĀÓQŠ]™T^‰źs޾śšž„a¬Į„„^[Ńī8;Jūc×é[*g<ĶFĆHĮūćÖØĶmjβ$~S/ØjĒ5˜­ķo Ū0sŽA%œVķˆäĆ py¤öŃĢĪš¢ķWīøõ®s{[Z)•šFŽLžAćšÆ:ń_‡ī–yķī-³a2R:~bŗi3‡×_±'Å»Æ x²ćįæˆŅŹmT[Ķ#óęv\v5ś?©i¶Ńjļ›©m¤Æ`{×tNY>§K¢iz^‡u%äFKūe$‡’+Óü¬ųOĒwiq¤^"ß[9UĪÖSÜsJŻŹG¹iŪ£‘cŸ?ÅZWKujį­#Ž@}ńLĮ̘ŽÉ*Œyą1ŖĖö›F–7u‘rzŠ(ČľɀŹ÷ ŠŽNp>1’ĘŚŽö¹¶'ę\ćŠß•\ųŗōčü[}xŗTPŪ$»£8Īqéōƶ>kv¾5Ņ-ŚÅ2„‚8”"fĻCK9“ūÅvóRTłH qłVÜÅ®—|jĶĘM3Ž{™­.Ü, Œw5l<ļRÅćĒŅ®2īAM和 śf“®-­ŪO¶G»²V‰ß`8kJ“͐^£Ūø?+vöĀųĄQY¬ŚĘ“żd9zYņō7ŠģMįŻPĶ£K½ĮĘ}q] 1ä±'®qéK•‡2Ųó/ŲŻė åY“Žź~č<:×ĶŚ„Ł3«·L­œŌŽ(ę%æ[»§šĪCit[*ޜW_k}ŖĆ=ˆ’ā-¹N8š¤ŹŠgŖ^iV¾Dw°ŻÆšĖø*ōĶp³Ī†ł 2ŸąšH„)XŲŠ±±†;ØIüƒ»µ{µĄÓģa"u–6vsTe+•’·“iVxoF`pŻĮ®SWזŚ-„ŠK÷Čüh1q<ĻPń†·­†1é]2œ0·8!|w“¤¤94ż5›ÉŚŃä`c¦k—’Ō[É-¢¤‰žŠn¬ęf3i÷¦éPHægfƒuü ui°ZHČ ·(bżŗX Š dKt$zšēįÓ嵌.ĒpŜŶÓoŅ#4ʾ8bĄM”ŗ?8d„³gļcҲ›’8­GĮśv¢Röé®ķ[(ŹÄ ’0+Øū_™lmVBač* ¹—kc7Ś0ĆtgŽ{WAw¤eć §ŒŠ+X“ŲŃ|»—IQŽ•Z’Zx¤ĒpĘsœā® ØĘŗ×ÅŠp8#ÜUMF}-"fž8ćøŚpŻ5N`Oįżen-„ˆę‹i ‘Y×*ŪU|°y T\ ”„ ’±¹0¦ĘzŠēļõ‰-ƒy…'ÉīzRæ@3ćÕą½@*G sĮ­› ›xÄŖ®­Ą«‹č„—!Į „§¦+”Ö4¾·žWÜĀŖ[厚_Ä? ^Į¾žѼĀ#’vżN¾µėš_El®×pĖ6iļėQQ›$yĘ»qm«Ż}–Īxķœ›ūŹk¤²ÓžĻg—2yƒśŸzŹRčUŽ^éÖśvH *ŅEqņ–<œ¶kū5ŅL™REĻ5¶ÆÅ8ĻcژAYĖĶ»<`÷Ŗŗœ³ŚB8SÜ܉°Ń&³lBņģ\p}ė“»Ky£uĒ<żź ŽR¼t„™TyĢ{×,²‹Œģ܄€r(—62An· 1³c‘×ŗt¾|ī ¢(8ū¼ ĄLō0[AŌWÉ`LLć(AźĪ„^¢=×ö|ųcć"ēI¼„4VēĖRȰŒaÖ»nž? kŅYN;KÉ3Ł&}(źCzčQ×<]‚lcÖ-ī-ćžEÜ$Č`@źHƜ4‰6Ÿ|y+]kÖr¼rH‡#`:=x}hQ*)õ=oįļŽluk­WAÖ¬ęO%ó ‘"ć =³śW«Ēsi¢Į Egs`żyé_@i:'‡t [j–Z…øņchå|Č͌ā•ĒxļÄæŲųŹŅč֟iŌƔó!Œ%O’_<{TŸļüEš§RÓu»ēōĄĖ PWąž(H³ŠæhƊŚÄφšt:væo|#pĖm’<¶ļø÷ĒJü݇Äz¦‹=ѰŌīžR ҐŲz hGÕæ üQöv“\Ēuv„2±Č$’!ł×‘N-µˆÖ^ŪŚ4R¢I8eb{~TŲĻŠĶ{į~šŚ‘u£źV6„Q¶GøLøź+Ė›[Ó<1"Ø1ĖåÉóyDgzI‰HųēĘ^9ńf«ć™—6×ÖŅĢ"ƒz±d÷jūwö}ń†į­Xé·ÓŪ^źˆ0ŒĘTäd~“żĘē{ūCų~=Ć3x—Jqŗ§—wYUƒŽõĪ3ł×ę¬R,)—WYS匏˜ž“‰öf߉µ-#ÄŚõ—„µI“MfŻURi…ÜŒżjõ†›®ųSÓ„Hsz`›–CžĶTQÖV=Ž OćmsJ½×4‹Æ²DA+…qŽkéIž é֚ ×¼³ˆüömą3(Ęi= %VĒĮŽ(Ņ“^ž_E3ĮuŽ’ÄO ’Ÿē^_/¬üA,zV›yŖ[Ū)’ęHN<œ2;ŌÜŖuRæų¹įĶrü]\ųwO’Y-U\…Ū čHėģæ‚~?Ńõo Baø³Ón,į2,ev–ē?ZgL^‡ĻŸ“ÅMS@ų…§-µ³„Ō¶å̱ČWŒå€ā¾]»ų«x—ļvÖę`łęīo^“#_g æüsζŚeō‰kbī »©$+–-č+Ų¼k㦾šŒŚ|x+÷XtēßŅ€p>p:ķÕÕÄsMq#óĻÉĒzéü5ćĶGĆŗÄ2›K}SJa™¢a× ~44W"ź}Kį’ü?ńŽ«o¬I¢Ųų\”ü³ĒźĆ·’_ė_lAį/ x×į½ćZx J¾±)åµĢäĘÄuŻŌzPֆ2?7~*üÕ<ÆAœŗ¶ ó#ÉČn”9ōž•—®XĪŗ¬š•Ģ’Ü@WÉFēgłō©¹Ÿ-ö>­żšž-hqh²xgŰXŚĄŖU¾@ęGĻŹÜś×»kŚ¤­ßNŠŃ—… …”śŠ$ŸAŖfo‚“ ĖSTŠŃ¬ļ&l\žšģvĀōĻZ©ūGŲK čZO‰|3m&³č’;č"½µ cvŽąēŠÉł›ÅėsꏇŸ 5+o‘2ŻÜ*É,īW9#Æa_¢æd…ßuMS­ŌĢ Ķ!w!•€€čy ŃĢūPš?‡t-ōx.ōĶ>åXG ³üÓöč3Ž}ėó·ö¢ż£ō’‚‰m¦’£ėhłx¢ł™æĪE]2%.†Ā?Ę„²»“±ŗ³Č Ńŗśóǵ}Ać/„·Ėįéļ4ŗ:"™¦€ŸŻÆū^•«F2‰Ęxi®õ;küj Ś~`Ź*óÆŚĀ:™¼ƒÄ>ÓbČÄÜyk€¾§Z‰#&|K«„˜A©N ³ č4Ƅ^ńæ‡t’Zź÷VsL8XÜ) 9ēž‡"’Ž·;Dž!šu¦…„ŚČ5KkĶMr„ ūøļĒĢųŸJńTŚ5„vZx¾Óī“r6ü‚ ąńß”«±‹«©懓åšõīu¤ÄĶć*cułb\wÖ¼—Dųy«xjÕå:ŒWČĢßgŒg'ŸåLF:Ńlž!ŻG¢j¶+§½©łžŻB³`ż×#­}ĻāM'ĮśĄ)ķ[8>éFIbr<{å*IŁög,Ńü‘x»BžÄŗ66öņ=›)tp29žµēS["d,S=ė]ČćœEņ÷€ü w AGĄł:ąÓ¹…ŗµ³¾X9Dm=©6Œ‚Ł~‡Ž‘J${¶1BNŅjŽąvcĄüź¹M47•łƒžN{ÕÓ(%VB8⑽6M$6ZŹčŹČćz¼o“ÄĆ”ŌžėąßۚūöŒżfųń?ÄŠź|ęĪßϐ-Ö”¦"vļą …‡÷W'$’œn¬u#śŌćŠńC '_¼ākR֗+¤ę6® Č…æh}"ēš֟ń6g’]!Ūū;]‰¹YżÉń'Ÿ­|_ńį¶ń¾$ųypń‰„…õ gL‡s}ōī+ćūö£ų?qš³ā5åÄV×Vŗeōϐŗ±L ł—ŠxƔļ“s”žIW£EŻ\Ā¢źcL°œKv9ģk*p…öÄ䃥ęŗcœĒO£Āģöņ¢üń°'ž8ư>j³čZĒö§—ōÄf˜_“ścüō©eĮju_|=¤kpI{ilļjńŃ”ūæNõÕ~Į“Ž“ū1~Õ³’Sė^Uā]žū@7-Ś‘qhŹ~äéŹųõ®NmA£”ųićTó©ØZIŹĶ„ėÖ sĆåߏB0sÜڽ»ĮwĖ£ėæõ·dę—"ŸõÖǰ’w§ā=kB#™č GxŗŒGj·É #āµģ’”žŅæ¼UšĖYHMäŠ.ō›–ėmv™(sŲ”>Ģ}(4?ĶóöĄų'ĄßŽ'Ń&·›MÓ仚“‘J5…Ś1Y¢`Śƾ]KgŠV“ ~\u¬jG°'c×Ļ•āļ[›}GåŒųŠ#ŹP}įśę.®d†Ōc ¼)gšÆ>¬Nŗl÷OF¾%šŌVrĀ÷ÆEČÉCÓńĶqš–Ÿć? ė7–zd2ŚČēo'idn™Æ*­5±éŅ}Cš½ć_…WŅxæMÖ.źP¢śŽC˜„Œu}kź½3öØ×®-Béׄ^TıļĮ ōÆ6xNg”éSšHłļā·uĻy×DĻ2Œł‘GüJ+ę‹»«³*"[ČØ½AžUź`0ܧE\Så²: FŌÆå$§’ޤ–'Ņ—Ä:_“¶Ņ¤r¼–õļ^Ģ!ŠņŖTŗį ŲŁÄ­Ø<óĪF“÷~•„āų øžĻŒ™m å$#‚=>µÓŠē‘ē:“Ś-ī›öXn§G‘c“åĀ®OSķž5ś}šęČi~Ńl!Ūŗ4łNÜĄąžUÓq֑ŪÜXÜ“`ȓī\§§±¤ŠŚą‹ p:ćµuÓ8ęmŚŲÄŃ4B3ę’*sĖū"x3ógqż*ĢĶ bė$„© FG"“|·–TUvp:Š h†ĢXŗ±Ź¤ü¤TĘ²ļPęÅXĪæÓž #”¶ēŽGST/Ē•jŠłƒ·­XDz‚L3H¬\žy­­2ßķ“ˆŚEWŻ‚1ŠVSF±‰čwv‹¦Ū,čEqÖ°^HoćC°öØ,éWSG±6’Ā›1†>¢¹©<6<潁¦Ś~nø}+”+h;éŚKØ ‰ d$+Ī+®ŗ0J£Ėbƒū 8‰õ*é‹Č¬ĄōŖā9-nƬl7žĀ‚į¹čØh£“Ö¢YtꔫÉ%³Ś ¦šzƒA©Éź‘Ky”Y¾NO=ėEšęŅń’D( `Rc=5ūktSv8Ē|t«Ņ_Śß„–Ō”L„G²hkMLMCPŗHZ4Rč É…yćĻĪf,O8pģšČ6œ”§cĻ/4Ė=ėĖI²Ąć$ö®ĀÖk±tŹoփE3–‹īBM¼Æ=«sN±šņøƎ:ōÅK“dtėG‘³†ā±Vūū2Qę”tŻĒū5E9Y.SPe)*dÆåY2?Ł!•^]ļ’+9C¹ŁN«ZŌśEŻĶķ Xåa²2ÆnĶpž*ŃąŌē’é”D™$ ųW‘‹Ć§sõæ :v4”Ųõć#CĀzŒ^I…Üł‹Ęq^‰ÄĮ$VÅhj¦iĮvčFĆĄć‘\ŠnģōĶRÆ£V±¹|É8N0łķAf£xõ˜“ŲÜ[IöP#G Ś;dVüŽŽ¦evśÕ)3:‘G+,_i¹!Pžu.„bæaemžhåO”Ŗē<Šō̽6ó1ˆ¤]x<×CG±˜ŒöśÖg¤®cÜCҷȰéEµ„»±xyŽ8„R5M¤&٧#qNx©tÖÓnˆ—v[‚§Ņ“‚ŌåÄĻK¤ųŗūI“–ŹŻ[Ėvź8'ń¦ė>#ń.³µk§Ž<˱Ź@{WD`ŽĒĪā«B”‘ÉĮ”ŽÜŻ\É9dg;ىÉcīk©Ó“+ˆųyÓglu®øa¤|v3Ä|£ Ś©Yió-\xvćPrņźČągµ4^·€‚×;øēėe…ī|ęeć†OB„¹Ÿ‘bOŽā6ŲZ`x'æöx]ƒƒ°īhśŖ½ĻČø‡éR\ōšTŅģŽæ1%“WłUv8Ø”³1nĖ1=²+¶•±üßÅaŒĶ+ū|dłŸą½įŅÆ5« j”€$séVšŅ{7x.lŖpkŗ4,||Ŗs;āŹ)ŚyǧJ‰§rŪ_qō­ćüŻK®äWr1śÖœN¬¼@Ŗ/šėRP®ĖøžĮŖR¹RŁ;ņ ęØśŚH­…T7hĢL¤åF1AĻ)v2¼ČŹĖŲõ4ėFd|–+A‹™ŅC4X²õbāī)!cA‹f ÜÉj¶XäóX2܉ꐟ¼xĒqLĀOS.Hd‹8rėœō©,”`=ktC/[YŗĀŅ䅮…&2@ėtꊃ;˜ąīkX¾ęÆüżš>2~ŃȰų]”Ņ‘öÜź×q¶ƒ?ķ½+÷7öu’‚fü;ųAkmāæźÖß>'N!Ś¢)Ī™HŹRč~”é–‘iöźŚ”viµBĒqŖ,` `M’ņ÷Pmģm Äį¤+ŠĘO”Œ„ŠéģtČm9y„žóŌ 8Øå9ē.‚3'Фg…³µƒšˆŠ¹}Ø$(ĘāTU^p&ø sÅKAĪ”„˜8%ä PļŠģ„Lł£āOķ!£ųV ‹}7SY„BAøŻĄäż=ėń#ö·’‚–|?štŗ…¶¶ž2ń£)’KW܊÷Ļō«Œo”čʝ‘üö|rż§>.|tæ‚ėc£¤­$9ņĀŃŌpN+ĄÖxßvŲöēļ^µ f5„m “ÄeĄ’I™‰RQG•ÓsĢ©;č\ņĪĄ½‡4yl±ŪöŸĪ‘Ķ7Šæœ²CŒ¬Ąt­tŚwņG»TĖČĶ#e-mm|¬?pĒ ‘®łś*IÆŅÆŁ?ž ūK~Õw"ö×Āw’ žHŖ?µo—d³/rŖFG’^°”¬iw?ŖŲßž ÅšöIŃ-æ°ü/§xŸā#*½Ī±swYĮŚĒÜgŽ+ō2M>i°nf/“|Ŗ£}€W%Iv,³n%`Ń(ƒŽ•v+T‹q\±>½«‘•Ķm­©ć½)²8(ųb¬8¤"ƒÜ̐œu¬Xu)£vS7CÜńYŹf±…ŒżKU‚,M#&ļQ\&ÆāÉv8¶)^ Ēć\ķßDuBšoˆæüš×KŗŌµŃN™Š‘ń}ÓĖyx×Ws=Õń4®r[ŠĪšÄ¾ÖČ ķŚ»éÓīg)ō&ŠĆĖČIA«‹ŽBŌOsšR7­-š.5üÖćÖ½;Fš²É÷ŪĄ ēo¹„ø”™ōO†¼1pĒ[Eę1ä•ĮÆF±Ń#L‹„Ž:b”›¦[$ėj“éÖ¦Ō¼) ü”|ˆål䂽E.DģįüKą Qc‚Ķ4¹Č€$ņ;ׄė>ūŪŪŗÆšÜøūĀ¢P*2čĪKÅŗ²ŃåÕ ьŒć¾;WĮō1©Ķ$w£³¤‘Ö°š4>ńV‡‘ā 6ņ,©9]Üq\ī§k¦Ą¦HYwŽį÷kžq7C|-k©4’^lķCģvAœz#^äžŗŽĶo%Ō)m‡īē¦kškShl`^YZÅ8•<Ä ēļ\®„ēĒt²E7/Ą$t„X¢ų°øžĶ¤™š2Üź+ė_€¾ ŗæį›é-bÕįS,O»į;=x?įZ©Éź}NXŖ+Įżź„ŪĢŁT^1Š$ŗņܽ¦Iu$E^sÜŌ×҉v€¤wļR I“”we•qi©éSŸķY[wWŚQĻ_Ćśū>üqÖ>5xQmõ;ėGW²ģ÷ļčWĄ÷Ē×”qŹ:ŁšóÄ÷śv·Øč:¬>’öņ9Īģ’>Ż+Ū48“hµT½Óm#²¼fĖŗ.>õÆ30”O„l!Y“²ńŽK½@+ŽwWC¢_%ōKå—*sŌUĘWŠē”z—n!ŽU2ŁćŠO%#C–CTfT6Wr#K©±O!»×āÆGŖ—˜š@ō­c&myŌ’ō{->mNĀi¢½>Sdƒž„šŪÄŽ½–ÄJ¶³y˜#nU“4{Ķā›Ē7PL¾cū½åµ¼— >ņx+Ž”“Eæj\±¢8ī;Ō’+Ć Aœ™‡ĆĪĪ]6©=ŗVŽĘŪi­_˚'ૌńķZÓ-[ā=B=ymg²ÖPJ°ž]ĆoŲ\YŽŚĶ ³;±łTs‘ƒV37WŠōkkŁo,ąKId9|w>µ¶ž'‰'րlĢדćlˆŃ²G)Źń޾ ųįį«ķÄj/ذ²(Īa#ƒžąŌ“tĆsČ4=oN½øT“i®'GĮŚx½[łīRŻ92óž•„xŃnćŽĻNŽūćņ›'’­].©6‹=¼ k 8Ė~•š²XĖsŃĒZ ęQµ¶¹F`šü«ŽüÖFÆ,ńø’Ž&Łü@µR3l®ī¾Šņ=O­zŸ}tČ"XŌ†į°9¬dµ1H­©ŚN¦MūĒOLśU1÷¤&ö'ŒŒw©6‰rūģ!Ė[6p½ÅS»Ōē{QL˜ągµ1ž{©2“lUóTfÓu;n#™“$p}+NsXµkZ ėK„ņäī„s[RŹ×jhćdĻ Š‰JäĪŻ I# Žƒ ­›}ZĀī(¼Å8!— *H0fÖlõ 8n\„r„G>•ĶkzDū øŠąI¹HņÉĖ“»y¦ģs³wZ»iŖJ䤋$r’oʒ`töšół‘ÅøÓ9ė]tĻt«$ļ—éL ÷—аNęä}+:9c]Å£HĘqJKAœ„üQ»“Š[(rxły5 ¶¢ņG%½ÄrĄĄc ?QX”ó3 [gge€:0o¼?Ч t“„„įŽĢG^ø«ŒJö‡Aż›w,čLš ĪEV–Ų—v‘Ų6z”¬¶-2%Ū«)äV<—†źSńޤÕÅÜĪEų“ØaŻuĒi’–g„^Xµ mķåó EÉeėTEŽPßs4pĆ!OĢ6żź©k$–7hnmĖD[:ŠÅ²ć+ėzÜ7y”R-ü+‡=+’Ėk(e8F<‘ĶIœI±ŗ…Hn7:cG ļZ/Ø}²é®# ™ŽNх#śVģb×BGŲŅ!uó[øō«–7 lģA Č"ŗ)¾‚)xŠxDé ;ƒĒozā?“£ÓRxŃĶ#åĻcZ\Ļ»ńÆö}¤·€’VOŽ5įPüSÕt[ė‹č#‰·±vŒ€ą”⃮1±Óé5_Ė%ĚoŁ®Aå Ē÷°8®ĒMūLĢFgēb3ŒsҹƓMFéVŁBAćvBĒE6~#]üB·ń’ZŚZX/-#]’+ēķ-ß¹9ö„ŃjOµ­ÜvņŽ^8R#-…uĒųÖĘ©ąū«{WԚ46Ę-Ģčw•’{+@”¬zƒ’±l|&»fžĒQŽ3ūįœĒē)ā[{™¤¾Õ Su ˜WĪÖ${f™ gŁś'ē¼Š¬_ķķöw…Uq&p:`žUćž Ä·ś…µō÷v^a'‚Ēæ?JϘ“XšTžŌµk˜uč.ŻļĪIķÖØųRO„_“A”’ćG*ŖŹĄ±PćåļõŖ¹j'Ž–ž!šæ‹žjzZjPČ'@ådmÆ»ū¼{WŹV>M?ÅZ|¶pIöCĄį”`špyĻ^h¾¶2“w±Č~ÕzŠÜųLŌ¬¼-Øiœiļ'r 1śē|9ńjĻX²ŃtķFŃ­„…‚O}1ėž5q•Œ#mϳ"ńφWĄ—éÖņĮ¬"©fa½e<šé^ošŪć¶¹=̚V»m„Ŗ³¤ § ™ĘަL#G{—†4߆0ųŽšjĶg-ÅŠ-E×`'$÷ąšóŸ Yx"x•l£ŅßĖŽxˆSę!?wžżė M#HłwĒ ąĶ Ä ö= +Q,͇ĪķĒ9Jś_Į¾“ĘŚL:֍my¦M(a›ŠŽćŠnö¹²Šā~,ü,ńOŒü»½?3j–i‘¹wŒq·łWź_³'Äė-&}Jķ­V9™D2#nUČēpģ}Ŗć u‹ZēģŁćæ hš7ŒtÉķfšóĘ]®YAø>Õē:eę­Ŗj¶ž q,’>ĘĻ?0éV/m} ’xGVšV½o£xŽŁ-gVKg ̧§ćY÷Ö-a>É øœ‚c ;•pZ”¤XŅÕ3!ūC§ņoēµ~¢|ńēˆ>ų?Iņ`‘tµŲöü²HĒāsZIhg)t'ųńj5ÆŁź¶‹S$åšćœć?€ĒšżÖŖś“×lƒ s*K @v=/ιŅ!JĒuąo„š„ź·­4‘H«ę[¹ūŽ šÓ“Åk5³xÅPj1ÜĄŪVk¤ĄcĻÜ=1LŚēuį?ėš'†50/ķš5”½¼®¹dNĄžæäWŠ>øŌüqįŁnµRkmę-ć$ ® Lš7SÓōķ XšžœÖ¶rK5“ŠcćŠöę«~ĻZöæš“ćėh~#Ōž;[ÓęZ“§ >p‡ƒńÆĮļŠw—^1¾æÖ/#šźXU™żįĮē TŠ©­‡cCölż”|MšßĘp\ :Yō%ŚąMĻ–¤}ąJż@±żøtM×<5ŌWŚv”ß.D$¶į€wkь“³)ñ忳ßˆ<9ć_ėqŻ›ō’–źÅšē < {Wwńāõ®‘©ŻŪ]jpgĢEgŪ¼Ēó„.†n=ƒ~&\§ˆ5fG‚A§³)E€=s^Ėąf6ga„źVÓĆåo1£ī)ž ŅHÉÓ9ļųgÄĻq ÷–öķŁøpOØ5cöpŌfć<āø½Kį-ķģ$‹V—QÓµQ‘Ą#s‡ N܌ńH“­”šę‘į’h>+Ń4­V9Śą©ŗ•ICשõÆŠ;ƒšž©ą÷×eA=ŽÅbå€'†8č9¦ŻĀZly5ŽŸkį-bĖC²7Šj·%£ŠqüGę¾Ė³ŅÆuχz…µį#ż®ŪŹ3ļ/ūCŽ“š"żYóL’!ż‰æjæ†?“‡qż–/¢Ó|EnwåÓd`%$„ 0=Š÷éGS¶’č§ŸĆßxGā/‚|5ć ß[jžÖ,bæ²øĆĀŹźäaŲ‚ö"Ŗź¶Ļ(3D14g#ÜWX›{3ĢrŒ‚į>ņ‘Ų“Čö5üĪźśuĶ„ś†—söZ…¼†)b“ļ.?śÕŁI™T9Ÿ² ¼g“š£<^t@,cŗÓ±Ź÷5tY„·¹VuGCƒś×Ń>ń—gs" ę@tzšLŅźwŽńźė6¶ŗ}Äp=Äd²€€†_ö³Ö¼÷āęÕķõŅ- sšė…לäÄ ӕnvS‰ż~Į?ą¦:_ķš²Ūö@ųŃ®ZY|pš…°·Ņ.®„ŚśĶšš¤Éd)Ęxśšž‹l5‰ķä›KŌ#x.ķĆv® L-±Ų AŖļøF’2JJń’kŚw‚ęÓ5’Ü&—¢yŹåĪ3Ļå^k‡PögȚßķ³ū+Ü~ŌP|#šßďO«xŠĖģwŠĆ"·—v2b`G8Qƒ×ŌtƦ>ųŽk÷š‹ä·ˆ>ø6ØČ6ł¶M÷$_b1žqWaŗgÕfń„øŽ&Œ‹÷Čć5¶Š`€²ÅG»Ó2jĒņĶ’濆ķuĢ~ŃŅ„všĄHµ2‰”µÕ|’°åŖķ-Ż×ŽæŽŁ"–ĢŽŚĶ#„ģ22ĶĻī›=9ķÅ7 ±«į_.ī6’įćQ ōł«¼ń5ŠÜ¦·„æüKnTø‡9ŚAĒ>†ø«ÓŅēE5b߁µ Zwmł”’WĀģ<WѾ²¾æ½ė²,ś’ä³JI!‡jń+A©Yž7ŠÜńn” ź‹v›ĘHeīŻkį»zKMAę‚īuxŲĘń>N:Ū E6Ńæ;=+KńĢŽLīœrO_j‚ž)§¼Šā8€‰fć½hŃKc%&õf¬šĢŚ|ꌯßJęÄY2a˜ĖõQ“É«Œ;Ź]ĻFŅ5Æ Djwą¹#€§­cėŚŸ‚o'š/WµŗT^¤ąVЦ÷9§Tęķō¤šęēD¶,jwžī?•~Ÿų~ŽÖ×H²H¦Gå©ŹžŹ+xÄēCY£‘–5Wh”żßQZé*Z¬j\ ÷®Šhŝf”Ź²…P?ńź~±=„(Z8^I;ąt«’&I-ÄŖ»‡nyX˜ī£ufP{v4&”į]Nīu’Ė;[Œ)9'ŚÆiZ%坫Åz²$ѝ»˜ņŌśĀ=MŌwv„ ł“/ ¦¼ßRv{¦…SŒŌ‹,E ’Zȑ§󎦚Ć4Z‚¼čɀAćÆjõ{ĶZĖPÓŪMxķāĀ’w“ų×"tųķŠŖ)/Ž0jlŠąDL`°ąēœÓ[Xš4uXɋžQÅ4ĄÅÓfŽ{“GģīߎąVÆu²@ŃÉiCcvzS&ćɼ¶Ę#ū@ė]F‘ą9x##ŲPŃ”—«]¾›pūdT ½ūՍ4«s#·Šü©Čõ Ā‘¶$ĆŁŪž”šFoß” äć>¢¹CFKFWF$žqļšĄčFœÆ ”JÄS†¼õšćķr3H’+ Œń@‹mØ!„Ją.HēŠŽmi-§„Ę›Ō?­^¹Ō­µ[a\ߏ±,®Ę‡:’ιrv¶Nh4ŒūĪƇ|I¦A5öųu ©EĄ#ßėĶ~Ņś]ä±g²^)¦Zw:2āÖubB«9ĪOaL½Õ’Ą…³$œp*ćHĖ ķ3ÄWwb]Gś=źåĮwey—å>£Ø§Čć2)äo•lå)Ųć­EµŪ+ż„üĘķXøÜŽ2ź‹ y€Åņł©Ęk˜—TŽöā=:M©)$Ž9®J”īŽšUlk錒Ģ.JH„`g½eźžŃ%‰öĄ”Īy¼Š“ŌxÄÜvKZ>ŹW¦÷‹Łüŗ?5óŗŠąSįēŚć™“¹ö>IŚEULń?„/­®æ³,õ{7;&‚Pd< yµp}ķžńƒ*ƸӜ½GŃķ÷ķ÷ŲäĒLIœdŻ)Ł–ē·jŌX‘L‘ü«zp9gVćĢrZ2ÉnĢķÜRĻœ‡œn“9ĶtŽ55½õ(ČŪKFēĪjX¢ łż{Š-ģXū&6䟬§€rN™ R—`–ēŹl “}Ļ­UlJĄä…4óč–(ä8ÉÅ\ņ—c®’“° ę”ūæaP¬Ņ0ć¦+2Y)Ą)··­M’iČŖP;†„X³Ō·/ vĪ{ ØÄŰŗ¹åšX­f ±°ŠóķÖ“ŒlK•X™hŽzt¤[grHv/_aTL¤kč––»«Łč¾ÓīõĖł×1ÅīĻnqŅæ`æfļų&¤»é;ųł«Y+jÜ[hVć-)ź¾ßįI»JV?cü7į?ĀŚ>šŽcį "€ ·Œ n;‘Éé^ƒ¤n³±[<™åĒSĪ*ūīEĖf”^js3ɟ¹žuj”pھ…žr&Č\MA4ā$fĆzR“čbsņ\Kråeo"ß¶k6ļW¶³ĢīO^ÕM*gxßā‡ü=ky5ī„n÷j…„AņIōÆĒæŚƒöŌš„4_P×}IZܾš»GNõ궎ø±HŃ@„¤'õ®iJ꩏SŹüsń'DšFq©x®šŁEįX…$ž=+ó/ćWķĒ£quįæ[\ĆlWlӐԷō½(›ģ~kų—ÄŚ–µ¬]źz„ååōņIæ3JĢ ’²¤WF–VL>Škŗš]Ir4#·i7 p3š"‚pēy<śV®}ˆę¹4±J„"ĆymŠWAį’ M©]*ŹĻŽk O±<Œś;þ °³X’t'”ćÆJöķN¶“…EÓ„båbZ7äk[HĐąóķ]6ƒożµ ’6!AĮ`Ó&R±ŁC¤ĮhČX؟JÕ]:Hē’«ńÅq–ŗžGć› d¹ŠóķŁ^BŁR‡ łģG~•įšõÖ±~ĆĶu{…nN9"³Ÿc¢œ¾©«kéf–WĻjŁq>µów‹¼ż”<“.4ĪqY5ÜéŠGĄæ>Y܉±ŌcĆ!€ŲēśWÉZm”–i!æt'qᇵsĖcC®Ńū"ōµŖÄm‰;Œü+Š-5Y笒E&yYćĆRFŠ6DŽé%ŗ+ÅŠäņ=뇼°’ÉmŲf؜§ÉĪ>µ‡3(׉+xU!(錵ōMRźÖåo4ŌūśeUä0zc[F]Lę¾¼9ā=/ÄZFŸ,N!ŗņL īĄäƒļ[0Ś£6lĒ’wč9ęŗ–[[U>d„8#µBū.Y I‘ß•¦‰Cį\隯öde;³G֋b­¢½†āŹā*8Śčㆯ„~#ü3Õ¼3­I.™°é3;HRG'hÉū‡ė\ŅG\C Ā Y­e`ÉĢgkĘż[ÜVv§ce5©fB³!łH50A7ŠóMsJ»øA,qˆqŌÖ7uCĀ/°Õ“Ėé¬-'‘a¼ (xĪ{WldsMŸ®^ Oķ;kėkµø_”† ŸĪ¾ŖŃ¬ šŅ9 yl Ųęµg4™ō7‚Į¶Ó73I&q‚殏ÓKŁpז{›†ō5¤§<ŸCj«xfŻ"³ōĘqVnåµXٶŖŒ~Óԃ˯¾+hžŗ¹·½¶[‹e#vsƒī®qüs§jw).•2:–Ø”q‹=7Nµ›Z±`ĪŠ©ć8Ą>õā~(šeö­Ć:2¬›žõHõ śRˆ$Šc£vśWM½¾g²Ż· äżźi¢ ļ lē*ž3PµĖ_Į$&M®GēA™VŅÓWhĪ§„_¼†A–ePz­\Xuā}=õ žMÄhįpε|'įŁ“»xī­fLóø­Fh^j4Z…»3c÷}ź„¢Ås’S’£ŒŌ¹ŖŚ“łEĢĪ*ļDšńC‹tó‚Øto ^\ź14¶ģ‘'VaN*ŚüĻ”t]źŅŚ)D‘bØjāewҵā*͊fn&EĒ‚ōÆģ÷h–F¼^žÆ$›L}>ńó#©ąN#V6įń*϶ĖČß*`޵<Ją=Å·•#uG³&h᯵c§Ü,ń³uĒ5ŌŁ.o`×płq±=€õ«åD_é–zZjš=ĀĶ SErgRŗ0›B‘‚‡#ךREĘFUßö‘AņoPAąqR‘©]ŪłVļņ°ĆØžŹå)£>}ąā÷l±Ī*[=,+•Xd 8$Ž“Š:i“īm’eód ńŠÕud‚1¼ļĒäh"R(\ā¦P„׆ÉÉ!bī§Mr¦›$(|¤ƒž?*Q……&Cgg=Ŗ­Ņ\4±P~ķu·«&Ԋ6G$Ų<Š»²‹ė2ZŻ"4‘yŠHĆwvIī ĮXš0zSLEłu•¶šĖ sŽ•ĀMeuu9`ąĒī95“]ŃpzžQń'L¹’Źmī¶‚pa',}ń^iimqŚ1»Žr›™dÉp=Ķ)³²,õ’i6;.!22‘Ė÷°{ś/JŽl<ӁŸzę›hŽé2Ån³Cn 1äā¼ÖīŚånC«±UϱśQŠĄø·< ,eZU@‘V Ōµ[k²÷6ć »^ʶŒ­”Ÿ!eäK­Ķ$ŖŽF0: ē•/4ėÜH‘=¹äąņ}*½­"ģ5“C©.„£†kerŁv'`õē5ė^¤ĀćuĆI;1%Ļēµ{²hęęG“xæĆ3ųPx§!¢Żŗ2„²äóšåŽźóT€Ēö)ČŁä{ ”Āē­ü:°°‡Q³¼žIQU²¬ŁO„}‰ć˜4 ’ Zjv°¤Ä °Š>C(^[Ū‘J^@ŁņŽ•ćHįš”š‰“Xo|ÉZ9Ė‘¹ Ć­|»āŸ…óŽjÓG”Ū;Z2y„¢>yĮ„³4ƒ=į&›¬ģ'ń“żŒH bĒZōŸˆš’\.”į›ƒypƵ¾BQW9&„ČŚĒiąĻXų%$_h×ÖÖę*³CƓüC·c_7|nńׁ¾!ĢŠhz4oØ@»£š(³.1óqɧ’Ńó>“v‰-ʛēCå(f‡å¦}+°šß‰—įĒ‹lnõ#Z ”2Dc$”#ÓėVf韭_æi/Gš­Ę‘"Ü]»˜ČfĄäq‘Ü{WϚֶ.ō |ŲarŁøcąHūžś&™—³>G×/u«‰4ėŻ~+ŪY¼ń±o½Ļzļ5ÉtĶ;H7^E*ts»#?„#N^‡’Ć$3ß—rT6õōõéZf» Ģkéņ؉øį†{ŠĢŖ#Ū4/iz‡†®U¢Iā‘ŠĒ*šGų×ć„V³ŪM§Ėwk ²ŗ˜ĪŽWøćŸ“3G‘ Õü2­ą=@]XŻ«°±ŁĘx*OŌVMÕž©‹K«Ė›‡¶“Ė“;’ļž Y¬g©Ś·ˆ-|:,5&“øŗv+ņF>aČĶ}y®źžńž‰¦x‰ōE“W·3,ˆ pøĒŌt¦häqš=ŹŪł÷ŗi–Ū<²•+œ{ō?ėOqŚŹ¬“źqĮb#i4KītŚgˆ4Ž:>¶¾(†(µ;9c‰ćpŖģ3ŒƒéҾKńf£xsÄś¾‘ehv$˜W8=’„޵›Rę²ŲĶG”7ü$ŗe‚$NeÉŚQN¦¹©5G»‚käVµ»I6®~y÷­M£ojÓ¾Ÿm3‰¦’ÖF6“īyż*¶ “ĆØĒØŲ\ÜŪæĢŅ8’?‹Ö—*)ĘĘ]Ž£÷¶GT¶ūNmCÉcģ+ō“į3-æ…§ca/!GźÜmĒÆJŽ] ¤“>rueń†„¤)6”nFÖ`NčsÉČ’=+ß5/½Œ.‘Ÿy ÆĒ z““3•#ÅnüE®ŽxCÄ^‚)„‚Bf‰n>÷±ņ'…”Õü3ā((x'į֕u¦é[¾’5S`1²õēłžtœEŹĻ_š·Ä«Oé:\ĖgĄ©¹ˆ'ē'½xķ ńcK]W@½h#‡[Œ­µ»Ą0cĄįŲ“ģ9®yŠ»ŗbŃĻÜų×āĒüŖiśĶĶʱ ·!ÕC"ūóĻo„|cż„>ŸÆ Ū<ʘ’ #žœ)Y›'c»³šĶ­ōkŖčńYYɹYį‘HĪĻõ>ašPŃ,īu?iK®:ł*Ź::ż+tTŽKÅŗF»„ŁÉØxST’ĪhžeŠĮ•H Æå\ö^µ¬ųu/uhāyp|øåo18aėLR•Ž_ÕgÕ’³c¹‰m.!Ź`£ćŠāg¹ń†ļcŌōkÖKDmņF©ĖƒŌgõ Ķ£ź=?āžœ<9…ÆFæb¹P ŪĒ“ pq“÷kŪžźV°_Ck¦Ū£ŪŹ@–C÷]M4…cźļŠ÷?¼?į ¾ųĪžĶ,uČCA<@(ųĆ«jš|O–-ɧ‹O™%1Bw<Šx;?:żų]ā-\“CMFFfņŃfY_ēĘ9ŠKWÜöųDń7Ś4;}:&ĖC#Ņ“d(–ŪÉM™!G¦kģ3ąw…¼cį+ė4'MyŠĶь<’ćĒŅ™M.‡Ė~ųUćß\GāŸ‹­źķ¬¤…DįĻQīkōįu¶“į‹];IŒĖØŪĮT·ół;`õć4ÜÆ£1Ŗķ±ķ~GӟRŌīmĶķ…Īä’)—q_PśWåʇv>ńö·®iÓiÖ7—2\G!TŠ×§®¦Iō<ZŠŽå˜8ü c‘Šó)Ö8.@äzõ®ŠjČÖ>åż˜¾!,žg„..®„Xš"ŒĒ=±ś×č>ŸŖ4µµg‘B’@cĻćU5s~Qņ\Gq§Oiv¦krl®F+óö…šĀx/Å*Š[{{°nØøŽI$ūw‡)¢}š6UĮeūŲ09÷—ĮķKž‡Ā]GG×. zī•#b#sʘź*’Šß”õ‡üöœøż”k[Oė·ŠĒš«ĘŅ‹£#ķŽŹõGČŲĪą“ė_ŲÖŖÆi~ŽC‰ķŲ a †AēÖ¦¢ŅēB‘ī’µńßķąŪ}--<]£čl]ī ]Ļ=¶GoāĄĪ>ƒŅ¼łˆųŪĒ~šgÄ?PŠB[G k–ĘkYfį-®Ā|¬š‚Ü}=+ł$ż¹’gĶ_įoÄŁõ‹ųKÓÖG·¾ ŸņÓų[>œ[S‘2Ļ‚Æ-3mSé\ģ°øķPŹG~ÕŪs’hÆxŲ€BF č¼5xĒSkwŲFJēļéLØlz}ŠŽxgYŅ5½ā+ØzĻČzōŪŽ¾‚Ńõķ*žTi­®~ņ9+ĒŻ?kŠé¦Ļ!ń ųėį|7ń»į¹y x×K¼KĖK›\¬‘²ķluSŽEwæšKæų)o€æą”_t…Öµm'Ā’“‡­ÖŪÄ4²ĶÉ\:0y(ŻAžH=‰Ī¬y£nĒu7”õ×ĘļŪ[ö~ż™t}r’ā_‹ōč¼AgœŚ[Ģ¢Iććęˆ$Ęzjž9’ą _šXæˆæ“÷‹üO |½×¼šŁ‡ŁG˜ĮYż]—#½yń”s¢-ˆśŽ<[ą?iō­BóTń}ōwŸišf2H‡\Wś,žÅæüūFüųMūQx]ō¹5ōÓ¢Óf?ŗŻĻf¤©;YōĻÕ»[Ų"J4R ’2½#µ-Ūŗ$RŪŹI‰‚Čq\ӉĶ-Īā·Ć |hųać†~$Š9ōMjĶķņW>DøŹHæķ+…aōÆó”’‚Š~Ķŗ·ģļńė_Ńu›)tˆc”Ž|µiłŚČ£Ŗŗķ`G4D“óÆRģĶ Tēžø®»HÖļŻmĆo·aĄ#§5¢­bć3cHÖF’A”¶ć…īĻQ_Gü?ńUĪ©«²\Č@‰#,ŁõÆĒ”NgµÜAęū9®ĄĄõ±Ēq_śīœllõ„čMxĘ+uO+ŽqĪ+¢1čŽY¾‡ ų.ßUøń.‰bˆ“)˜3nēh«ōśĀŅ{ gQÄJJć„i(ō9e¹Õ_k2hvš-Ŗ¦£–3ÕOoēY~uƲKŪĀxŌc­+hC•VÓtõ–Ń$Ć$›A SŸB’ų¤žpŠ`vģĻ õ žr•īŸ&Š÷“¬be<ķ Š„mØDģĘĮƒķց©\õż#U²:z‰! >6ƒžžõĖųƒQXī­mćĖ3rN:ŠZv0®o…”²ę ¹Ē&¹‹Ö°¾‘¦‚B“c,6õ5<ŗÜŁ;šZL.Ÿŗw qйx!µI .d=³ƒT3& Nt ·JDł=±Ś“āÕö–óÉŲäHė5Ųżā‚ż+{M6Ff·b’9ČĮ8Ķ29ĶKNKi˜Ä­³q ƒŅ±uŠ.d?Ć÷ žUĢxfčHā½cūsģŽQ³ÄX\^3ĒjeLj4ķ^ÖßMÕ9Z2Y¾}k$Īm‹®ž‹“åT‘Ņ™\Ģó=Vžęźķa½·,„ö–!{VŽŸ?†ī“Łn'…lęĘÜI="Nü¶™< ©ßĆqSGek2(‰•›øœĖŒ¬B¶ÉŽÜ2ø;H&®ė:ObŅG0ITt²6S±Ćrl¼™YĖärińh˜ä yĘ9 Æh%­“×aa‘A>ÕY¬f$eXqĻzķ @ɧ\.рyąō5ŽÉØ}™dQę!u Šķ­ķ.ÆģähvŽ@ļķUl4)ēDcmDZé@"ī„§&‘leXü§črzjói.¼łX—`Iɵi¦śf—ÕĄF‚b >oZÜÖē)o,6\ ćŸ9“em‹±I•.ī€Ąćki“ȝ™Ō:t#Ö²7Œ»ŻžåĪĻģG9ā©Ü[éą,÷ ©:}ÖW9ÓN­¶+Žż»P…FžäLŹŹ3ŠŌƒAÖ.t š‹āł@č1ŗ²•#hU³O±sưI§ $ø“hŌž=®[\ՒóQņĘŠźqĒ„a:±‚Ķg ó'Ø×cažŚ9"fĪJX—^Ņ®J°·1d“¹xÅrĻ ™ū×xĶŽĖmJüŠģöłvž“9Ż_Ā7–ńĶ6ŽÉ4æĀ’qøWĻž&о%%ŌRĮ¦²»X°+ėŠV_Łź÷Gō|qĀU¦µ³9ū¹¼tĻ “@ŌgqøķUé’k¾”k‹3æ†oąŖ–X"޽Ŗ~¢śįXöOśż]5ü³#ÉĒ\śVDŒšä AąÖń¤~i_3œ›m›VqĻ* £6FsV¬_pn‡=ėHӶDZM»³nÅā‘WéVÆ46’3*HėéZF‘Œė·©zdvА’œw5XZ£@Ąõ­=™“osbb‘wGŒz”Ø[­Ŗ*“Œ1ÅC‹.œy›±ŠY]<–š²°ćŒU@¬¤õ§ČĢꬌG5a) 0?QZš>k·5qŒŌ{—2;€»»g³ī#o|ŽõF”āVł[‚®zƒxŹƒÉ<ŠS}źŠŽA9Ŗf`½9Ī=č9åRÅP¤DĪģ0N6ę£K“юĩsŹW,C³‘¼lšEIx²Yą6O½R•ŒYn~W`Ž@Ŗ±#ߕū)f`zc­\bdŁcūEšDŪ!<ńY‰§H²ŗ„ ~µ©”„Š– v‘å•ó{T3oNælU(™–t÷ņž@‘ĄÜQycģzū«örż‹¾)üsŌ-5?i×>|’µōё5ŌdņPJM)·’’cŸ‚ßō“OųljśŪ°2ź·,~€ōÕõL6:Mœqó/mU^Ռž¦-—ģ“}RżƒNĶmg‘ņ÷"»ūK{DĀ›{ÜÓP9„+YGJĪ̱`UlŒ[ø‰"H FÜ+2’V“±GbźņŽ6ƒüėZtŁā¾7ńō:]ŗŻŹŁ‹?v3ČšĻĘŚūLų¦ŽŽ ]t(Ā·śD¬8s×­4R#łČż§ąØ^"ńuŽÆ£|0»ŠmM%ażØ•ƒ”ļĶ~CxŸÅž'ńꬎ&ń®«y«ź²2 ¤Ž7œŽŲöÆK DźjĒ4fdWģŪ»8Ŗ…Š’OĖøöļ^¤UŽ õ:xŠķr `jeµ%üŠNޘ¬¤īyu&hCl˜Čæ§µYŠŃ °į‰ėŽjL¹Ń[hØĻ))ņÅøZōĻųÄ^9Ō"šēƍ÷Ę^!rŖ-ķ#i³t,ƀ9¤ŁŃŸŠWģU’0¼ÕÓJų‹ūVj— k#¤ßŲQ‚›€ä)žæČ×ōæšĖįo~xnĖĀß ü+¦x?@…B,pDČĒĢz×IŻ’–±£UĖzžI« ¤õŹŁ“•É6JZĪlĻ›[¾‘Ö³®¦xšØޜ÷¬%.…¤d][Y_Æzįõ›ˆ¬ć/‰ęƒŹ×,„Šź§̵Æ„½ę”wØ[YĆ –o2Pæ† ~zübż¶ģ|?ę•į+4Ō5UVS&ļŗĆ<ƒNīuĮ˜ž;ųÆćŸ‰QĶ'ŒuūĖő÷ˆČUąē·Zņø‰’vUž=ėŗ;3Aģ“åÆĶüėVÖÕIFī’ž+SžKSEYVBż:WK£é¦öą#¬[ØÅc)•aŃü%„Øģi¼wÅwśoƒą–ę! (=1Ö±›čK™ė'ĀšiŃFė2˜ŲsĻŻ5\Ęw“±ADbfŁŅi°ŁŖ„¼D„tq]֗e Žć0dgŽę“0“¹J[żJ-DŔ–ŲądõÕ[k6Q I¤Ł/`i¤I‘®ŁéŗīDͳpĘAéļ^1āļ ’c»˜ČšßŖŹ‡8śŌ“m džžH<Ēž7‹+Ōµ³ÓÆ­c[tos·ęø?ķł¬5gm;+t+ź3éZÓ1“=*muQ±¼³ppyąƒIy§ŻĒA\ų“§¾™s=Õ¾Ÿu}müKeæ޼ĖĮZ=Ī»āˆc„ź:b†Ī$Œ lżEQÆ2>ܕļ<7 „äĶ ˆäŪČ"¹Ÿj—śÕŒö^ ÓO»)!B {A”ęč­’$_-ąņa^*}øIµą#ރžR4Ō%āf=zÕų᷈ Ł* 4-į²ø·;•šElŒÕ[»Ū‰1¦!!Hō cÄ: å¼;]$FeūÉĮ±Ŗz|ÖÖÉsŹé· »©¦ų“«Kĝ®¤t.SÜ×.Š2iŅFŠCĘsĮ5p}Ņ·¾Ō¤C,Ī’!Ā•'Ā³¼So¬k^Ōl4¶y#*c߁ ō­ €t źśU§ĆəøAœ ’:÷’ Ųiś•Ø“ņ<»°%ņ”·,ģt’‡÷opŅIØJab6Ę8Zö+? Ckd«&c|c„@Ģ(“®œDĖ#–ł”Šé¢šģRøž#߀ĒĄę/ō¹lu?šŁĶÓ­hZ[Ū±"l“' ŠAsv Ł„%]}+Ļ5=ėRÖVōźSFŸŻŗŽę€;>ĘTDI‹:õā¹ifå HŃdĪģr„k±‰gšņGˆŽ„Ņ#g8bJĶݲµĪƒØ„I—•`GĶVāg5©ęž"Óįµ¼†īŁĘwuā»ĖNŃ­ķ#¾³ģÅFOaPAÜj7„­“HÓH¼·f‘7ӅOlW‚_YÜZ°•P=¹b Øo˜DFļ”šsް5O]±·hVāņDåācĆڱ’ŌØ£øš4wŽ%³KĶJݬ®Ļ/ēhś×e?†šA<,æķqłTš7c*ņūģļk:”\„¢¼ņåüłŹĒÅ'Ži™b³ø‚rŪĀĪ9ėVī.§0l’¬:‘Ž¶ŽĄsÖ³’„/SwB=ėź_†Ķ jö2ŪĻql·*Ā6×Óµ3h³Ķ¾#Zi–×RG VžpbĄ2qߊšŪ²g+ø·lÆZÉÅܾf2Ņ·‘L+ƒœš+Ń »±m<ĘļåJOSK•ģg&r·ÖķE@Ī2;Ö5µœW7HÖ0xÉ8Å'~¦%ū„[0ź„\t¬4ž)$“ŹVLA¤’Ŗŗ“ķĻZ|ŚÅ±ćŹMŠ÷ @J²I–HŚQœTŃXåw4C*AéŅ€:{X픳`¬ĮéėXؕd‰”•'Ņ€9{ū5B””*Ķ»Įo?ĶŽ9¬¤õ‡ŪķŽe۳̭Éķ[Ž#DŒcĮē„i€§ vÓ;‰œ”ćŪ2э±ŒøóÅ)-āŽ“ĮŽ ag^Wå®ė^"ÓüSmššæŃå'tŽn >‡ozĶ.…$z½½Ģ±cŹ3ĻJ·-ėŽŗÄŹūŗe­ig%”bÖŃąód Ēø5Jś'•(_ķ'µFq9=6M`Jaš8Šc)ź}ėŠt½ķQ©‘væyč Ęv»¢Ū,‹ ļG!ŌāŖÆ‡cÓ¬EÄw\…8ūū±Ÿ|Ōū1¤gŗłł*„™OJĽ×VŲ6ĢS'ę4F6/ٜ>­«ŗ—x ŗ‘“ĻCé\¼=ń )•µÄĖę|Ė»…ėZÅ¢•3Õ4»ė{˜·.E°łsÉ®Åõ$APŖ~éiI«ąY³–ęCFĮĄžšĶkEwqz\æ—ī裄I…ź[Ę«4^o<+ʵ‰Ö¹¹’@,Įž#‚? „g+œmŸ|$²MbšÕš^ļ¢-–Ē®+„‡U—ĪŒZÜo»÷n3Té±r3;WŃį¾øŽ[·‘\8drśćØ«šŻ›h&XÖŸ ĻQī?*Ģ’Õ¶£=Ģc*K8%xōĘhŗIģ‘„wU…OnIŲØnfK©Ścę!;ø— q\\śFš·KtÖѹaĮ+ŲŌŹLźƒčvŚRŁEŪʰ¢» ńϫЬ-¢‚"•xÉōƒcžĘ£xDŁIj#÷Ē_~ż+žŌ“Ķ*īĶnŅx””ņń†Į_Ā“ŒyJĒ"Įopdw?+`cŽ=ė­žīÖźÉ@)"*ąnõō«g)pŃʬ±Ę¤÷ŪU„gÅĀ~ģt&³›čQüŌx'ā³j£A6ę9•Ģ™C÷ķ^÷krņŻŖŪ#$rPŒķę¾ŽIō9\ns/šÕÆü%–Vš¦¤ņŁ; Œ…$€qžżėĒ{ų‹šŁ²¬.Ń„łłN ĪN?ĻzŌų:s4vž"Óįˆ›fŠ XœP?Ī}©óź©©č~$Št‰ķo¼?ØŪ$ŃK HŽ1‚ŲƒõƟ4’[üŗÖ,oķ§¹æIoøóŽžęŹ«>ŠƒāĒĆOų]u§m}ĘŲ®T|±z2’Jł²_ hv^"hķc}j’åYP*±Ļ?…hµ3[Ä~³ŸQ†ź×LµKµĀŅ »Ęģ‘ŪÆ„>9č’¼IąĶ7ĀŚw…¬“Ä·47©V„mź„āu4>aøųuįO „ģ~$ŽUFc—G;‡JčžĒu¬éēKŌ%‚śūĢ q£Ó?•?h'TÓńփkŖŁ¶ƒu§Åo,dcO˜nć;æ šÉ¾i:tqéZ…äöÓeĶ™[⧜J©ŌŚ|»žĪš]YVē‡ć“Vü1š‡\»’5’Ńಈrz’GRsV§Ü½ŗŽ:“AųY×Ė·‘Uvń&=ėĶ<{ćŲųƒJ½2<–k y9%}æ BäGŠśÆ‚tŠöVśĢvK,Ä £ųŠ‘Ļėü«wOżŽāń€śæ…N£ż»±¹2vŽ„w…;Õ¶</x¢ękĶRšü֚œį^E+…O7”Åz’ƒ'Ō¬ģīō-OGŽĮ0›¤^T°ĻJÖ2¹7;ŻƶšŠJŒöę,„;Ū'’Õ\ˆžxėįĘŗ|OąĖė]oĆ.Z)­ŚBZ,‚>Qӊe(žįÉõ-ĒW7Q^MŌĢą‘š„ŌööÆ\‹HĘ×Óź"=š–ę޲ žē×åÄ}OÓō›{Ż/Yµ{°ŲxŻö“gÜzW)įQÕ,–Į{†ĪļqT˜އ£hvw×0źe`øYdeł²?†¹mr8WPiU ŚŽƒ°¹Šnēiį¦©§Ż^[iŃ_„ŹŒ“yļÖ¼ōj^9š—ŠbšśĆso¢Ź1Vł—æähRÖğBjzmį|cc=ÅÜ©‹ØüĄeė·Ņø?§‰ŅÖ}@ź\ihG‰†ķăČF(r[ŹOcO_ŌļŌ4;[&[‰A,®rF1Ó"”K[ÕĻĶĖĶ'TÄSI`ŗˆ•˜·īähŁŪq?x*ścĀžŌõ½Cā9.Ņ/īfóY{䚯l3鏃Å֎©¦\n¹¶F®×łŠžÆż°tOi>&Q»Šu;KU mfŽ6ŲCuĻbx„$“ŌgŃ’>+éZm;MÕfm^Žßģ÷0Įr?:©ń/Gšńų…ąĻÜč2Y®ŅąD Y $f¦JÄ³Łž6|“ĮrhŽ)š‡oćŠ5e+•28'ӟēōÆ  ¾#xoĀóßæ‡ē›PPÓG?åžI ĶČ«w‚.S±[­zÜé÷ˆø6ņ ^Wā©o4’>—£@ĒOrIl9}i)†ź’ Ƥ³øÕ#“yēˆeUÉĒs^©Hesok›ÕĄucŠśb¬pšW‡ōßčRŁk”-`–… qžõķžńNšūĀwo«łyZ/šEuĒłéUb%Ųä¬üykń÷CÕŚ;ē†āÅĀŪ£Œ‰FzC’ׯ’µµĢ¶gџ­ŸV¾±šNœ² ¹£!p„¢×'­ÆžĪ0YŽ_ßµµ“L$¢ÜäųVszš)£oāƛżįž£kŚŪź6˜–);åģTžę½ŸöEń†üišßPų}©]=ߌt=Žg˜6ćĻÜpk;•čw7æ üØx†ćPKeÓõö€£Īæ0“üߕ|]©YüLо£øY¬įø "Ŗķ ½¹öS·AÅ3#¾šö„=µŻœŪ\ÆĢwäÕō։ØĻ§ź^U±… (š?”Ž˜¤Éē°ĶrāÖę NĪą¾y×ēUPH=ˆō5„šĄŃéśCĶØĪ÷šŒe•]ĘJ)9?—åYów%˹Ų_ŪOd.­ćnēŽ‡šÆ‚æikMR*ŪPŽĘꟌŸŽÓqEĒSS¾„¤|)«Ź·øˆnæ0ĒĮ\ĆūĘ—ĖłŽ:l lxW\¹šĻ‰4mGO•ķ„r•ƒķĒūYüėõĆ᷈l|] ®¤—ĘI8R7䳜ŸÖ‚ĻP‹Ķ‰ŠJ2Ę1ś×‰üxš>=š“ę=Ój¶PęŃO÷¹<µœ–”{™·°‘ķWÜĒņN£žYøąŠ×Ŗ|,ń×ü ž$ŅuČŽā+_=b½‰yDx9Õ6gL%Š÷?޾Ó4ĖŪoųråŅ©öÓ*J+›‚:/ņÆģKž «ūMé’µ§ģą}nāH“ā'‡­×LÕ­»œłCא”¹õj},tÅ\ū‡EæŌō-VŪW°•į–)Cąō8ķ_x;ĘŃųÓL“¼²… øŚ Ā0ūæJĀIQźUńn¢x·Nń€¼k¦ŚźŽÖ­%Óļ G4R)R¬b?j’9ŸŪĒöBńģ›ūF|Jų¬Y”Ņįyu ޱ%u 6W%6眯Ż#±t¬\”gßŧÆ_Į\åžēåöÆřa"ø—%ŒžµsQŽ©ČV˃ϵz1Ųę’čiĶ1¹ īłaÓŅ«“ѼŒƒƒŠäu¦B‰ Ėį|œšÆ‡BƒĻ½¢›qpSh'Ž Ų ĢT w4ĄŠ†A¼u© ŗEdeĪŽŻŖ–ʰ—CѾühńŸģåń‹įĒĒ’[]M­ųsU†öE·£yķ·$gQ— ŒŒ×ś~žĪ¼ūTü ųyń«ĮZœś»§C2« ²Į6ߙxA÷³šŗ:"Łķ3ŁŹö2YM'ÜlsŠó?YGq§‰§fۘ„}ä<ZóŖ£D~jųŸįėųGÄŽ-šŗ!}ōWĆ·@ćhū̃ńĻćŅæ9’ą ?4 cńŽŸl/'1’gźč@o&e\$½;€9õ”#NCł@ń?…õ jzŸ‡u+iSP“‘•ŁæsĆb+Īī •œ*N=kŗœŽj‘2'‰ć}»v…85=„ÓŁ\C4j ųÖ¦IXõ•ń]Ž—?Ł-⹜°ŚĄ’ØaŌ­t¾×Lļgwr¢Īąž)9ē 4FV>°±×4[m6ŚęēM±¾…×ꎠ“gčN+ä]/ā?Ž~|d?~ų—Qš‰­¤|}†ŁćnŖŽŖ}„R–·fѬŒ’“ŸĘĻŚ3ÅGÅæüiwā;ˆ€ŽŽ †Ē#o¹ę¼j ʀR£,[åć5JHŃWģV¹y'I!IŽ7pFGUÆŽ?ų Ļķ…gšWö½żœ|qzWįæaVŠNłHī’‡Æ9 R=*$c#ūųyؽ¤ķšūUԐjšXŲ¹?5å™åXųėėÖ½Öēȁ ń£²{×T ˜vvó ¼ÓĢŽ§p–ŁóŹæ æąø±æĘŸ…ŗwĘ­+L¶—U³4l491Ę[0Ż(Ić µŹIü)x‹Ć׌6±©ųU¶’ŪY“āš6$– qø{žåæū4¬«n1“ž9éü«9ÜØ­N’W}.ĒÄ1ŲÜ,1C"į[ €ųąf½‹Ąr=ʤcŒĘ«÷ŠvuÆ;ŹuÓŲö]WMŻØ.„’!1ˆŁCpĆÜWĢ’~ź3j7ž0е;āu§—‘øgkŠ•K3¦'ŽxoÄ7‚×% ¹C·ŽrAÅwšn½ؓA{t­µX{×±MčLŁŃir=œ›bOŻ~•­&„§ŻE†&By$WZv0”Žz7K·6ļȅøļŸ­Oq¢¾›½³‚V99XÓ8®˜ČČėg+x—/Śķ8ęxņ‘čER‰ŚĮā5ū¶’ĄīܽżŖ„Śäw'€²\.C.x ĢĪ–åī% )c“×Ö”ŗ‹ģn$„d“Ap±ŃxcSŠkˆ-īUŠ’ž‚ŗĶrĀŌDnŒqÆĢ\ōQźh4µŒKsO]’Ēķ‰5³/˜ü·½szä×2Ś¢[Ģ@°īՁ&,Rä],‘`ž¾ÕŪ]ėbѶÕĮĄĪkU )ö1ōūų!ftŒ>ī0Õµ$vbŻåœyDóĻj|†ŃÜņ na%éˆķ•sĖŠQc‚TcæZ‰FʎHģ"Ō$³‰­āR¹ę¶t­qm ” [_Z‚yĶ?@/4į"ȍ‘¹NzŽõćÖV‘O~c•ĀŽ¼M‡ŖŚżƒLӐC$¾vySÓš¬MR·"NīĒaW§”ŻG7œuLĢŌ“‹kb+p\k“–Ńw,…H9Ē"“‚;cŸVåÖLźl4¤øµv`*¤š9Ķ`DĶoxė"0}j9QęŌĢ„%©Ö£mZ[t ”I8č+Š]v“4 NīsڳöG L]ŁÕé÷WH#P7ēŠŅ›CøiÕ¤‰žŌr²¬V¾µÅ;ĒPxĖŻĘ"gsÓ­h¢‘—.—5tihe%—ėRĶm;:ƒ’zg„1“m¾ĆµŠE4©©$ŠŹö#”ŹT€’?Z§f˜É!P¤ņh.4YŠż¦ŽŠ˜ÉFĆļX·Ņ ›€‚ƒJtuW,®,ą% ā¹ė»ł/ *+ ŗqԚÉø|¶į¶=YIēšf.ælŃŪeŽz„©BĀd•t$gƒŽƒ9yē°€ĶŪŚ³ŒĪWi-HĘRčkFļ$F2ļjBųH`ąāƒŽr-¾Š+qšŠ³°WW, cŠPbäČb“쓺dōŖš­ŚNŠ”Nį׌‚Lx-^äE~µŪxkLŸO&,”`y„W3rż#)½ø~„zÖ×ĆØ<m®‹Æ!{$ĀķČöMTfĢ9ßƆnu)õ/ ĮżŸ`äę&l¬BMYųSš/āĒĒ­cū į…Æļ2¬ŗŒ±ķµ‡ž~cßæ;1–ēķßģó’ģš7ĀKūM{ā ½Ÿ<\Ū%Ī7CĀGN=«õ.8“M3J¶Šī;[[8”`B¤j;:V2Ø@æiøŌ¢Ž-Ż ·n7•č+Hšä6KpĀźė»Y„s)HźBSMo@x­ĪVŹņNˆpI-ķTnµ Kucq*@k)¾†”ąygˆ|{m`ę5”Z@:¾q_>xĻ残bn‡‡õk 또“É3Ŗŗ‘Ō…'‘Pz4©‰µÆüėAųaØźzFØnx˜®>ÉjD ?\dp+łęųļūH|Yż µėSĒüé£ ĢöÖ1EŒŠ€qžMvP”­ŁŚ–‡‹’Ŗ 'ŻĄķU¦A >özW±NŽZµFEÄøžŽµmUW°\·<’ 9¾‡Vw&Ž `0Ü3Šø-›!b ĒłVG,•ĶŪ-/t@ģżįčs[Ö¶‘DšBc–śłßĖŠŚŻ É3ž…Š8ÄżvżŠ?ąi»Ż+ÅæßSųSš”[ʐ­ÅŚ“˜=½kś£żšaĻŁĆö\Ó ƒį€4ȵŸ,G>§$y’R;óļšå©PŅö>Čt‹p•—Ģ“«1óŒ®=«ŽR¹7' żj%+Ģø»’ŚA½uėQĆ«ZĪžZHw{ŠĀRb¾Ż1ˆĘTƒ€Ć”ØoīmgĶ›l«Ļ¹g#XS8Ėæ‚DNė]7ÓÜ×Éß’h’…æģŽ[ļZjŗ« yQ>V7ģŽO~•0§s²?>1~Ō>8ų‡­\„®„akįüÅnöĻLž?ł]d–ź`Ą“‡$ŒóŒõÆB•3W+µŒ€+°ĀēÖ®ŪiŪeĖe@üėG”‹fāF„F6‘Ó„_±Ón.% 22§ŠŹRøŽļJšKÜO–?,ČF ī^ų_O ¾C³“·x¬Śč«Aಓ#®ÓÓ½héÖ+²¬Mē©Śr?•'3~Xķ­ĄP n:ō«ŗgö:¼‹iq#ƒ’9Ŗ1”ŗž“ ŚoŲ™ĻMYHāŠåģ„!%qA™Ÿ:G Č é\żž‰6§ŗKg’2:0>•qp.Å£_EI·8§­§Łl·Ēo%ī8tĒO„'AXņ Ł›<,-āŻ÷ōÆ0ńt^pY˜E ^›G"³žĒE3ƼC§EŖé÷E€Y ĄxWĄß¼_01Ém"–Ć/C\U:š§cć„×µ_ ß\ŁMy9„±Ćņ²Ā‘ķ]ׇ~#č·1ÜŪ²Z—fŸøĒa^}H1eKŻzĖécÓī=æĀO‹-Kķs›'$N8ė\҉±Š¼ĀÖ2i8Į=ėŚ£¼w 6ŲĮ%”ōjŚT²·’;ė0ŖFTž>¢¾µų}ćhüq„[XŽĢÆyf¦laŠÆųWM9M± “–ń”VĖāĻ_­[ŗ»eÉ- $ Üå±Vøb=ņ+^ŽĢ9H„­ŽāŻ:Ŗ%L­g yųĒį„Ō’óÅ«h#‘¤ćĖ“ėüėā»ėq};Cm$²Į¼ƒ">JÖR67lķ5K8%Š „ŗŹ‘óœœ{Ööī?ÖØÜ;ūҌŒ§ˆŌü;­é¾(Šn–ĖU·mĖ6Ģąz~•ū šcć^æńoįΟ¬ZĶg%՚ˆnš1‡b:±œķ§3žP>šwŽ®µ{i,%*ĄÖŗ¦$‘ݹaŃū×\9jDč“zä_DŸ),p­žs^Ć ×ĶnĀģ³ÄGŹH­Ī[uī™mØJ>Ņ€xā•4+KvIc¶U˜te8§ÜĢńv­s%¤vóM+ĆŒēÕ±į{K;5Äw1yĒR0Ā‚$īJ±½”޲)hsŠć|j5ģMʂ‘ÜŽmā6$P$Œæų’ėVŅŁu"ļJŌŠ28Ęćź=«·†FŒ†`z-”ŚuÓĆ :Ś\t,ǃõØ.Ł\ĘѳŽ7/zbHĢÕµļ2/ōÓJ‹Ž­ŠĒ‹S†āŽF€ˆ˜}õ" ŠņŽeŲą”'#„ejŚT¬‡Ė%Ēby e 6ŹśÓČĀU_lÖv·āXl’UņÄ2ąd­;›ž]} –„!Ō $źÅz·Ö°ō֎ŪQY!cĒūÕ`}qįŪYŃą¾‰X2Œ’:V…āyceēŽœXc©Ś§¦ ³:•(8U[]oX°Õ#hmÖM1”†bŻŅ™œ¤mÜ_™0;OcĪ*e$ä‰ūŲ ‹ŽÓēŽ žj ƒ‚Ec=‹ÉrÓG#Ŗ†Ļč+šQĪéD-œśu±Š]*µÄOėŠh§1o£‚ĘŻć²óÕņŸģą¹Öį¼³Ūmv„*²ōažA­Ś!³£³š|š–”·óŹ«Œ§¬vµ‚;Oy„Č£'‚+äRŠf,÷dKä1ŒįvśUųā*ĘŅ4Ł<ī4‰¶¶gM¤i:uŤ†hšĢp3Ņ _ ßi³½ĢP»\“ĻU•;³M.:]VēL`öŠyFX(żk›ŗÕµ»ęiŚ½ø9(&šDI®‡5«ź¦¬jGćļ ų‡M¹pł¶źÄļ•ōÆ<žD’K¦bS8ć„ĪsńźĖ8F’5cÓ'ėŁļ„™RŠ$„pŻ½Ø ‘Č­+FŃȹęµ\y!¶1˜¤ĢƒœZĪl ¢f p×<ÕūĖ!Kun©$l{v¬Ą±nš}äDó}žm‡ę°bµ02«;I€Fā:Š”SMn¹€‡ļ‚:š‰žxå’dņ%')ą pūLQ©˜³ Éw­=×(A ķģ(ĖG!ņd@$\Œšęu ,`1ē4ł@K6Kub3T·$ŖBƒĶ#f‚ŹŲI<-1Dø9āµuų,æ³®#‚r³ •<Š G„č’źv—»¤q4{ĪwŽq]ģńÉ9‘TƒŌć„ňt»õs*³ˆp}jĢvHękI8ē‘ščoŽŻ ÄJŒß‡åTü…‰·N“ ”K].ŲÉ$¦F‰?^kĖķ=ŹńūŒU+u.>gƒ|O¼ń‰bŗ]ōšS ī’1É€ö«Ÿīu?J†ĖQ–{é@ĘY2XśÕI锬NĀņčF…”‹w=…prO$“Kβ±2ɞ¾õ²¶°J‹Ä|ž„w„(ÜŌž3ŸW¼Šu±©é &  ¢0 ņ¼’:żų}ā«dņ¶U!½1 7J~÷ÆÖ¾…rčvqxĒĮś—‰t­CS±.m†"pŁLŽ70śvÆ:ż | ų‹Ę6—^ŌbÕō©-bf1«)ų?˜©’1؎ĆĀ~,ƒĆÓķtųēŌąuv}ŲÜ1ŠÖ‡Œ>#ŪėĶjb²ÕKyQ‚¤”ØözÜē”ƒž£6Ö„v×±…ÜAlģÉä{tÆ"’…Ć£xs[Wņåœ$øŲ§;¶õ{>„ƕϨ~x§Āß&ūTz°C<€²·÷Ič?ĻZł“ö“Š4ż7ÅŚ6±iqcŖX‹1rrœe‡ÆiØŁ›(ŁŲń? Ū’£Ä‰w8Ż6ģg’ŁĪߔƫ~ųeõ«‹³«i“Įn(OhžüS{0¾ę’…¼M…|qoįÆiÓjK–¾~ņ÷1ėŽõõŚüSų¬Ć§éģ$ū|»yćDĢ<ó»Ōc½böŠo]ƒ>=ÜėO©ŻųÄs¤“ƒ0l$?8=»U’~ńÄw\Ō-/ķQ0|.O­;w!ė’5oųF„v[¶Āč7“x,§ҼĒŁzŸ†­šgƒV›ĪÜr éĒjØĄÉŝׄ~4XéÓ ÖģtČg…JČwŒœkøĒ7Ž)µ:ŽŒ†ŚŚxžH’=»€ć‘ųU{3E|Óćkģė#·ŗr·ÆØÆ;ń½Ž±qįų¦–ŅIf1²€HäuśÓäϲ’e™|Dt1Ā\Ļ5¬*'µĘę—©ĻÓõÆÕļ…4i%m[ĀÓŁ^*.EEųēp9暉D‰Hųsā‹“ėגiŹ-ę󙐹τyO‹u+ļ ųjņ16Ÿ,{øf•r8>£„ Hšļ xŸW”=Ō÷ Y·;*įBś}+ź›ōæĮÖZŹ7»”9HĄlzŅRčl|āė{”wØŽĮZ»Kģū£øžuGń¼6±FѱISlQ‚OLÖ@rŚßĆłµūķCVžžŲl©Ļ r8y5Žü?Žź %uk«+›x‘¤Dćną3Œw¦’ų‡NŌļ<^š…•ģ§$ł±$c·«Ø[Ėol­42ļčs҉l\Ws逌<óŁźqJ‹in§Ģ8ą”ąłšōŠ~žēGk]'NµkėhŒāTMŅ:c9<ōę²”‹mlϐ.ģg{Ė8 ŗ– y¾Iw>Пš­vū®¼ “ŻĒ%Ͷ7 _śUĘW9¦ZŌ<{¢xĆO»æ»² ī>A¤Ą<}+ęMW^5 Ė[8±r‰ø~÷Ņŗ"/RĻƏŒ¾0ƒÅ+„Å¢ RņN-pw1=Ӑkėł|yąķg@›EÖō}BĻQø³t’ 1ävĮ÷ŖhŽē’xĀŚ-œ–vĪĖ <øŁ²_&¼—ƾ±²ńÕ,aø„…tfČ\ć$ūu¤>c£‰<šīėJÕcÓ Ōd•ˆaqōƳ~ųęŪTK+ß%Ģ7[ŚŁŪ XvČėŅŗˆūĆHż¢-¾ x&o^höIØÄ¢”įäesś×å÷Š­“_üXÓi¢Tŗ|ć_ģ'ĖŚyÖqŗ—‘y ÜłWéw‡’hĻ„|-kąßŁi–W« \HŲĮ}½FqDµV-‘Rų_ńæĘŚ\} 3¼q"©*œćÓū%šN_xfŪÅŚ§†ą½Ņ-å†i!+–^ųōéü©}›³G{Ÿ¤“·‚|qąØ4§Ó-ŪFœG·/ĒŽ•ó×Å_ YxOĆVHÉ01–‰Ų‚JŠūÖņb~SxÖāĘ×PŌ^ŽAhģŁŚÜtĻJó; JŅ{±us"OvÆņóČö„`’Šö’ x¼™d%«Ū$ddGC_-üJŠĻLń{jśm”1Į)ó(ĒŹHõĶnbe/ŒÆĆRMT½.c}̓ƒĒó®ßDųāo h6^%ŸÄ1\i÷¶ĪĻL]Ē~yĄėŒSÉxwÄśĆ+Oi¶p“­ĘÓ\”‰ėķœóKźšĘ­-ö³o ä˜Ųžšw##Šø»čD”sѾüp×¾ü@›P‹C7Š(&U”Œbqƒ_„>ń’ü-­.÷P»¶K ÅčqˆóĘÆ8¤Ģœ,Oylń$ślŠØĪą|Źü?:ņ懟¾!ų⿉µĶ7Ć×·šō}¢4“Šc®9¬e£¹¤7±¹ńė\Õ~E¤x‚”ÉpĘķdłJprA<“_ųCā/ˆüKń.Ń'‰ŚŽfłdlp”› ļUNGJ‰śUāOĮ¦¦²ą•³×„|GńŖ85]nņXEpÖtb„ŒŒōśVŃ1fguŪ[iĄ“PņfB«“žµō.ŸØ_]Ķ$‘¹¶lÉŪŽŽFsɞ­ąĻ‡zŽ©‰nåOģ¹žFł>V#Ÿ˜śą×¬ĻćN“Ōģl4ø-ƔO%ĶŽÄŅtğCĮ|_ńŖĪėLÓu»½]?Q·,—}ָÛӧōÆ ¹ųÕ§ź¾#›MMŗ$ä5Ģ^_˜ ^q»×ڣٚE#įoŠzTv^;֗Nlō[–-k8$zŚ¼n÷Nŗ‚B˜9-A¤QŸ$^T’C0ŚÄrIžUõgģĒńCžĶr jR@ö7Ī¢Nc .§Z Hż*KŸ5;ÕĒŽR0sPݳʈ€„Cc„&®&ĪĻæ oüā—ÖZ>Øe‘ OŻ‡ī ŽžÕąMĀBѕĖēē–ѵ5©÷‡Ā Įńsᆫš’YžnOJī§#š¢-ɄŒ4;‹ćøØ d's ŸZŌĢd‘łLSvyéLI#a†RLP¼Å,ʵ, ūŽ“=¹uA9Ļym"¹-æģ§‚=ōÆé‹ž ÓżµeųyńÄ’±OÄ’jh •õ_=Ö6Y\Œ™ V<Œą0·-+čvĀ=ķX]\_Z%ĘŲžņ1NŖGPp•sÄ;4É›yF{^md;4|Zų[į’i/§ź·ré:ŀk½*ņ>±H¹;Oū-Čǽ~}x›Ć-y„ŽéwEĻ…õµk+Łaø_øēÓ×¶k˜Ńjęöóżž¢³|aįĶʞ×<ā{%Ō4^Ö[ ؙAWŌ©ߞ=ÅpµfłŻ’ĮLædļžĪ_|qg&=ݾ—/Łē˜‚{Vł­īõł€{dü¾‰@h˜)›³SmW¾‘Ösē~š”Ē=«¹š6µØŲ_Ć-µüßfe*ÉĘĮĻ5Ķ^6ŽšlūĀ2]jѧŪJF§,žqŚŗ©,Ė|$§–E7±óR«fzW>4ųąĖM;XøÕt(ķ­äy \Z żå’ ó;f†čĒ$~l7gżbtŪōÆ[ Vń±]ĻNšŽ¤Ör}šła’y Ü}kRk}%äŗ¹‚ą*œš=kӃčqĻrMŠ’i[Ģū ßwk×WÓ|4Vęé#†7dtė]3”¬}!šĒį߇¬-ī‡Um„ĻzUJ:vņ:ż+gX“Āö’\"•'8źjMGč6ś”‘ßGóDOnŸJę~"čæŲ·¶×v“°œy\:Å­M!#’Ѥ“‚ä^ģ<‘“޽šA5¢.VxĒSüčåfѕ“8ū½FĖWÖ †c5¹FČ(qĶw·Ž*ÓtöŽŚąKqĀ‚£&ŽSNcĪ|]-µÜó$\ż•ŽT1ł‡åOš¦†5{tūtnA<ꕉęGS«Å“ķŖń?Nõå7Ļyró[6čżjFŌźZĶ?­&Õ5qjąĘłŪÉć5ō=ē‚<0lĄŌÆ­Č>2 Įž“Š„Tņm_Ćꯈ¶Ł8ĮĘZ­¢CöUf1˜ÜŽōŌ¬\*½ų"†ž9 [įŗ1ķ\޽¤ÅĆnæSZIhoķ¬K£Ē±·ghŚC Äæ‚Īķš;DļqµŸ+%ɖlm/l­g‹lˆO×sgt×Lå1¹‰>Ō¬C—Dw: r:”,ŲĄ uÆVÓmćxA¼mħ½#=LNŽ"īń€TuW)=¬7*ń²ĘzŠŠqīV‚ĀĪÓåŪ¶LcåØ%ĖFlĻ&½LēŹŽ\™ėŠÜŅcŲ3 āĮõ4ēH„PĄ²‘ßÖ”†ÜČ­?P}h6R°“XŲfÜYx=)Ź‘‰äć×*„Ī…HB«qõ%µ„ IHĘh!Ō6O¶HB*Ž SnWŹMØĆiōh3”Ģ™H`m¤UkՕR0€”üÓoo¼UćBÓAi Ū§”ŽŹƒź+łż£?mˆ?uėŻKĆ wį_Ģ’øXīäŽgŒ÷r¾¾ŸZé”K˜ķJĒʒJņ\»ė‰Æ/}#|ū±ėTd”Ģd““ž;W±J’HŹ„NˆŽ8ÕJīnJ˜Śš2AœōėZŹV<ś’, WR0Ā6?•Oå g±9e#b×MóF9Į®¦ßKŽ _µĢ@PpźßARä$śmžŹ°wķ!ūZkßgš'…ŸĀ¾ˆ§¬ź»O]€õ8ÉÆź£öF’‚LžĶ’³_öv»®hńüKųŽ#Vžöõ‘E ĮŹ©ąsšēœū~¬Åeo D‹P[Ę1H6¢„LŪ™q€:tÅrJWÉ`ˆØłŽ[¾*Št„U–į#Ą9ėŪµc&>£0u~tč}ė4­ö€æ»ō®iČč§ļÄ~Yo²©vō#ššß‰ü-ąkGÄZģVR¢—ņ7ķQž?Ī:éÄü„ų×ūsų³Å¢ų%†€Ģßé 6³vĪzšüūÕå¾Ö®ēŌuJēW¹”åüęÜ7zŒ×e:eÉŲŹ6xu*ø|t­jCŪĘ7!ŗćšė’1-%ÕĀ"]ŠŽ¹ź+^ŅĀyÕ`D%Ēąk  ”ąß†÷ó4·ģ<£‚A_I莓ÓķL1YĀÜc%:ÖBlč“ Ų\X.Ņp­“`õ .-ą)‚ƒ)HžIY= O™ΆŻPMÓŸā ›šM„C6亁|Åčļ^cā­īĢ–K2¢ä•˜ŗ›> ńEėIs§\Ē2ˆHęD#?C]'ˆ,®õkˆõ;4fž>ŅFA«Ņę,‚(åKq#3H™ĆdżÓé]f©$PµcRŻĒ«é4ĶfŅ$ø²•ł½ĒJ浘…›\ĶnČß)`r dŪ7ŽĒŹž*“:„ī¾l±)lŒWśŠēfÓŻ¬ä‹—u^õ”åФģymĆ+– Ø­ž×CųWƒų’Ćėx—…ģ‘Õ²C(ą Āq7GęÆÅĶ]T[‹8R{xÉiL‚?Ī+ę©­üżT^X[4vó>Ć÷y®yĆ©²‘Ų4p,–÷ퟬ‡z·åŌĖu­ĮdŠā©e>ēvÓŽ]Aɐ¼‚:œTń,b“Ģ…æ‡×9¢d]ןxÖw,tü’¤6+»šÅ޳”ßG{„ź)Č’źŲ’.y½kLN'臅5­ŞÓī¬ąk 7‘„†­%½ŌŠČL@žk¦,婚Y`˜Q“ÅMRŁ® æ!n ķD„c"ĢV² ŲNDÖł ž•5ŔhŪV#°ōõØs7„ŽcP‚Öh&³»Œ4\‚Č?Zųćāƒašö¢÷z}ŗ„“īä^繬fś0g•µ£I •ƒĘĖĒ«KT:£ļøf…ĄU q“Ö@XÕōū­:Z²C89£š/āŽ½škĒ˶ķ$šV¦į.mČā"zz`×U)øŸ¦æš³ĮśµŸ‰ü;eˆt›’„ƒ±ćo^üdŠś“Nń忈m–ņd’L`ä'ҽ*g4āz†5:;Øäy°+įO {W³I«ŲŹ"K¼’x ä£uSé]qŲāœz‘‡Ib õ­%Y§D7*ŽŌĪyhrś¾˜—Å#sÕ9ĒsT¢ÓŻŃķdh& 2TżģzŠfk‰bÉĶcj2ŗy–Sr*„S†9•¼ÉÓyģ{šŚµG¹™UŽÅČ=h}BŃ-šDV…ī?„sž|ђŃēwaŅ€’KŁ:.M6[/-›+å¹<ā€mjüĒØ“ØŻŽ·|¹”·f Šż*ćēsųžćIøg“ĄAŚG9?Jńæˆچ³¾āÕŚÕvēåf›ŗŲłŹļā/Š“ĶGOŃ”³[ėy˜£>pĮ¾˜éÖ½§LŸl1Épī®qž:Več}ąæÜé°Ēf&—Čč0xjö»)Sµy^7n śPg)Xć/ōų.™ü“æa8½rM¬ +®ĆÜu¦bŁnßČi{HøąŒVģÖa¢"фń”2¤š:ØÜ‹čĀ­#I ’=}Ø+Kn™\ü¹ä]ĖŻÅ©(¹^æJę.õhÆ`’ŽK5_ö‰9Åx^¹%Œ—2ZˆeFČćœÖąE³ØŁŁIe ĖyN0ɞ+JĒĮz~©„Ü_Žj†ŽųŽ•"±7K”ē³éK3Ŗ¬Ž‹Ą˜ ę“­4Ū†Ū ź™c?Ä*:™ŹŻTšĶ„‡`ŽHŽUćÜW[}wö}:KO² ÉVæ½Qƒj’¼ė>VkY0w+Ģõ-pxzŌ.nćŽĶz“Å&kOiśü8’IĢ ÷Ø$±Ōe’?³Ę~eÄ*d¬B!HÖ$weew¹„»ņd¶xĖ<‡ŚœU¹It9õb°ļ/†ĄfÆ@žĘŌ4[Wš+°›GLÕ“±ęZ׍õ—i¬'økŲwc;³Č®^YgyRTPčFXҁr£RŠmµ,#-S2FHe>Õ.•„]é«-ģ·1(Ū¹ĪXżhGAg„µĀČö’!ēØźk īŁķīCLĆpČ<ÖSDJV,Ūn ®~µØŅ3!d0ĄķP%PÅyJ°`ūdUūA=Ęe’ š NēYoįĖė”/pŹ3Ó©­(-/D؛€Į¦);|é½dŠ'žšæ Z5Žde·„¹ĮĻÖŃZĪĪ+Äŗ]ŸŪöR™Üpz“\äštW%cŲ'lw4Ɲ‘M„ZÄ”¦ū€qĻzɒ Ȍ>…}«!ā?Ż$ …ŒV„&VFywü½x¤Ę¢s–z}ͽĄY£3©'t®c>XMŪpzŅ”Ė[—ķ¦ŗµŽ«'šŒ>ļQKó­ĮvEAē5dó·ZŻ“,oļ^3šē¾Õ²’7+:ēf‹[¬ŃƒŗX_ƒZĢÕn•#ņœ•ŒqͧÜķ¹ž>Ī>Õ­o„Ēm"ĻĮ-žTP2„ärÜĢš ĒĖ\ž§e5¦X”i‡įÅc%©±Ļż¾h3ŗF+ÜmµēŪ‹7–!Pz‘÷ŖJ5 ¹BJ€H_ČWGcckhĀ:!36Ԝņsšé“ĻÅ8xŽŽY"oĻĘ1Ufæˆ]°·cnÜ3&{{žU¬#ŌŹhčā¹…­„,±™ÉÜõśV¶RK!ž4x‰ć>µ¼eŠQ•Ÿõļ†ńUŌņÉg,r¼~IxdŚAõŗļ ü*Ó¼%¢Å„Æ3ǐVUäÜ÷­ ē6ć‚ūOŅé&ŠA†CÕ„MöĶGČV¶¼{S»īÆz,f`K5˹kęi_©śT‘› “3Äx œ`Š ²Z²· ¶š~AqßÖ³“‹ŁVŹęcnłĄrsĒ©¢ĀRč_—ģŹńĻ"nõśW'<щ••ä‹~ x'ڳ’¶”ĢZūLūD ":ē<•„œ†5 G$ℽGrš“yć³ķVć¶CJ·3RZ×C`ŌÖżbŠŁĶ»ūĮÉ\•æ$7v$x\+Ī:RLædśÉׄ|#¢źšxT€ŲĖ,‘’;ŻX껯oJµ¹k+™ā1łˆäd9ę½µ&c' ŗ€³ŽŻ_OūOBōÅu?|w„Į*ŁźŖ›Ł„pł‹÷°y#ŽiĶ¹ā¶šŽ¦ŠÜč6Ņ[°_ŽłW>¢¼–ćL’į¦b’Ī‘“‚FHēŠ.sŌ‰„§Ż>“¢OdØ&·pĪr£­x žÓõķFI,G›ž”dV'-ÉéśÖœåAź}/¢|Õ½zļc|Óå¢Ś7vż+Ę>.Ēss©\ZŲ^ÜjZtźžZ"ķĒ®~+9-l5}į«-JĪÕōĖéü‹g;Ō¦Wƒ­vžÖ5ŪAt›żNņāĢp$ü9č@ć„R³aĢtći—śtwŻC?ÜŹå”zW„ų_į„—ƒ[Ä÷֖ӤŒVœA9Ē_J®TC™ƒī-5%”†hn‹÷€>•čž,Ņæ²ōČę–ÖŚ;|ołWĮńI¤O3>(ŌļuM;[KĖX¬žĢ¹ pK0ĻÖ®x¾īėZŠ »8|Ž č­ĆdzzwÅL”ŲÕK±ī’<]įūoéZ7ˆn Ó%²<…cŠū*ūĄŅßĖ©Ÿ jģ"Śńƙ.óŌ~µ…Zo 9!h .ļüMŖézՁøµüĶŅõažxÆ­üGįKšž=:’M¹ÕncO݉å޹īŅ"K©ł}āŲōĶćPÓ¬'2²’# £=1č+Étć7öµž”g—J¦D'9\ņ+Ŗ5{Õ§|eįČ5]kĀæ¾éś(tVæ…Ī’Øq &=–„ā+É%¼Ž&XĮžµÆ8ł»œž®ŗ„ƬnäS=£†óü³¼ÅčOłļ^¹ čŽ ńĻ„ui/­ēkˆŃœJ‡k#åR>æĪŖ.åsž)¬h–ņŚ¢½“³B¬€0åHō®į.³ż…tŸŁ`E{csÖ®å)#ėy/5šõ÷Ž-āŠ®å#PIąsśWĒśĒˆ®ummo„1ŁM ǘŸ¼źOj ē:ĻI­x‚]*āŅēūZ+ˆ—;°<ę¾{ń^“ÆAØĖcŖi“ĄbqŻ õzŠ jzgƒnRēDšÖźŁmQČ9u}? m…¾‰į-bm_LFeA† °ėŽō‹G{ń'žń^‰¤ŻxsM[O,-ö—Nw±ąž‡­}Įū&~Łś7ĆĻč <_įŪĖŪ˃å5ĀÄ>lń–õÅ%}S)HūwMų™„čW7péwóM ÄJc#…'œc<qµCÅ’5+Ų5 ,n­¶Éęoķ‘€n„ȋö‡åOŽüT÷vžbZH³/Ėęn:ę¼Ūįv¬ų‹ÄŃŪ¶¤šŚĶ0bņsž„5 ³ō/éś.•s%ņ˜ļš0öī¤lqļė_xņŪXŌµMZÖ7`źåc‰FJÜżi™K¢Śx˜źś‘=¶Æ§Ś=Źłóy`€7c‰āæD¾'Ooąļ‡ž°tøIg ‘“÷]ėAgĒ^$šäšć­ŌLŌeNķ”žµĖi!šŅś°ü‹°ƒŽē½2N„il źÅnž|…ĘÕ'’kč_‡,ń€uµKė?ō’3Ę=ˆ­Sŗ©õ֍ćŌń–”vŠ$ņKWrČq“š5õĻĄ’_[CØhZ¦Ŗś–‚ņ–†HĄ-jßÜü bĶ–‡’~Ó¾Ö~*ézʇwWÖ#±Ņ?ŽDGpG# ÆĻ’‚? 'šfØ·śÅĖ]D²äž‹±ˆĮ={T)"ł©>x.={I“ųįČŻÖfY!ŗIYBøłĄčsżk¢=Τ¬R_šHڶoڳö[²šĒßć„ģ©#–źŁI '«£óSė_©¶°KisĄģ ąŽÕ5ķĶ å¹õ÷‡¼H|Eį+d½ģj‹Ü;×Οµ7Ć«/x*Ļā„„2ßi*Šj€.ņÉų*ŲūĆõĻjäoSš”ü ~Żæ³d’³×ƟųrĀ ˆü«Ė.µįÉdyr±o(6>š$ŒWēN§i%»”œ“Ž=k¦‹Ń••µBƒ’X•,­°‘Ūµu˜2³¶÷äw'½gJQ$*ŽN{„‰ę8}¾ZķĘ3ėN^d –Ą=é4iw4# ’ҵ£q ''¢Ņ6†äö3ė¶Ø¾š†āČPy°4‹ę ʌ(ÉÆėGž a’Ö“_Ā_µ7ķ+ćBĖÄĶå_éŚ~–ģ‹§ć ‹øŒ“Ą'JR•ŽśZnTžü=ØK£Ļy,ńČHY«S]-äf).tė†Usó'=k‚¬Š“čqzމ„§Nģ Ž@¤ŒļĮÆĪų]|'āŻOOš)_ĆŠi – 2Sæ?Zē%v?>?lo…–’<5m’ohqÉmØī/-”$ōągé_Č÷޼+ąk~Ō£’7Žw{s· ŃĘŚŚ‘Ųó[˜Ż‰F\)ą+–øām›w)äW}3Š[•'V$Ž@0sĒQP\jƒšygD#Ū§=«xG©%ķCPūThR@§6;{W?ę*»1Óö`Gū·e˜$ u©ö‚–ēßµfŠÓ±gk|»FāzÕ«UuĖ ņ¤v źƒ?\æą‹_¶Ÿ²ķ_¢xkXń Yü5ń\‹¦ßĒu>!ó$8RAą`ŸČŸZžü“;ϳX\h¶—pO"”Ōō‰œäMäGäqŻqSV7Ōķ[\öŸx”¼m¢izķ±ū=Ź1‚śÜ‘ŗ)ąƒųŠīdø&ŽŻŪ·*ė\!Ø“æšV?Ł Iż >ÜxŚĖE“»×t»Y,õB\iĪ9ībr¹Ć7LWłóųĻĮæĆ’x‹Įóõ>į¢E1”ó!ž\õV,v9øL&łc½„ r@w'ü)¶ŅK¢j7:bM Ī›/¼mž?„sŌ{£¢š>ųuā§ÓmMåķÅå¹aå#·(=ü+Ś“ÅK€ŹÓpJŒōƞÄS÷®zTl|Ļć[Ė­BöIŠ7–Ąä“Źā¼ŖDM'PY§vO5FŲŲpŽõх•“5­NĒKe>Ÿ}¾ ±CéVm XG"į¤%‰š+٤Ļ"eķ7^s›©›l9ÜŪøĘ+±Ņ¼e¢ų«_Ņ4[ĖøbIn¢Vf’13ŠśgÖ»”³õ–×LÓ­¼;¦E¦4j‘ RGWø¬K½8[£Ha¹VяS³&Ō1Ø*a]½†Ÿ–Įa;­Pˆ§¶šāE‰b1ǜd÷™ÆĮo`¦D¹ļ@UŗĢ·±‘øFä)Ē®kÜ€R}ķķywJŹUwa˜õééL ¤Óu[EKYć¶{˜AhöÆ9탌×4Ž#¾žĶ“J½øžĆQŒJ*(Ź“ńܤ°O*ܝ3^g§x‚ęśĮDq4Ū”°åGjf¼ČīõŻźŃČ.nČ#Ÿžk ¾1¬‘ąĘHū§*ÆØł‘,!÷ĘŅŹĆkg#ŒVŌŚŒ—Kœ±>§“Z1‡u9¬īÕQƒZtņŲt÷ÆXž{Xķ¤šŅń:üĮ‡Cް—K{=ZŽåBœƒEyF”lD“[°ŹŗAļYOr\Ž+y£Õ‘¼%N[=1^ĮfŁ“ øŽsėSb…}&{땺‚g ¼`åLÖ,ī5“‚O*ģ§qī(”µŃå²FŠč dčŲõ«‹)µO%Pzō·Š”¤Ęåfu܅Žk£¼[EKqå€ēŒõJ=ÄS’ŚVx$>IļŽ•jėF{imēl`śR’Ż%œ7öJy`'P9œ°ķP&öo^ƒŅ¤Ņ2čĪßÚmœVŅOv±0byZĶų‘£Ć¬é<&)ŃAed®(:#.ŒłzĖ_Ōü7𤳲‡gŪ·ī×I‡«ųŪJkū¹ ćĖ"Hq¼{v¦¼Ķc.ĘeƇ&(Ž@;ņ3Z–śf„ |¦ąx”¢ÕCWžõdŅ©+ʶ+.žI× PKó~U-‡“-Ł ić2Żdu®²]Je k–ć²÷¬™kTb^5ʬ’Ć#į_®O­{?Ćč‚{»OōæąeÆā*łKc6óĮ© źŚc“ĢÌcwøü+§ń]®•/†­®ĖĢnŌ’üdL~µf|njŪj®Y”cę‘W-­īīēy;ēŠHŽ4"‰ķ™+Rķ,XūNź՟³×ģńƒö‡–Ū[ŗ¶ŸĮ Ošāāšl3ÆūóČÆŻ/Ÿ²×Ā?„:•oąo ĆņÜźr€Ļ1īA9"“±œåŠū ĪŹ ;eŸQ/{|2Ibjͽ„õüŪ„_³ŁžŻńA„„c„µ°¶µaŒ)īqĶ]Ś'5J=Ģ%"œ× ŖŹ ©ž#ŠUhͰwX{»‘RŲ£vfźō1³‰.1ÓҼcĘ“­ŻēÕoÅŖ ü«×ŽŹTĶƏ’¶‡Ć}.ņęźóģ~0ūi#ålš>¾Õų?ń÷ž „ā‹ÖÕ|=𭤿·˜¤Õ¤p6õū©×ń®Š4o¹Ü•Ē’x×Ę>?Õ¦ńuf×u·l’ņg<ßJę'iŻC3no„{Th¤µ9ŖÕ¶…8ŌJÅK•ž”ō‰Ōŗ‚zv­e+ØOo˜Ćr£ƒĒZÕXņųr=1Y9\ĘR¹r xKfUfˆ6:gŗ»- ębŅÅg8wP~µ$ž£šæąĒďŒ(µš7ĀO j¾0ń)Ś-¼$ĮxŻ»bæ¤ÆŲĒž‘kąĖĶ Ēæ“’ˆ-µ½L˜h°Ø(×ē\óŠ×…üįoh6žš^gį †Ś0›Ę?ˆŽµ×ŚZGh‚4śē½qĶōf‰\®ā>µ8@+2e+éŚšĶŒŽsYĪ]Rm•÷ē=Ģæ¾‚ŁKH_ZĀrčopמ%‚=é Ēō®3[ń,ZN›w¬ŽŚéV±©}óČ>p õ5ĢÕŁŁŲüŠųŁūphöV:®‰ą°ņjŹŽ_Ÿ$«sß łcć/ųĆĘŚŠ\ų—Z¹ŌbWw`ĢpÄūzWM8ó[C;T}«ŪŪŅ‘ķÄxl­u%m å+Yʞx•* oM »H­ü”gRpʼš%+9?‡<-{zčŠ ÄO\WŠžš­š¬²[E)*3ĘH¬źĖę=oGšāZ²Ź#]§p:W”Xčļ((Uqō¬ovfŁ<ŗd¶Ģ؁šyéļZ±A džqޚlĪL‰ ƒpĻ<Õö³X|¹£r~‡„jd:YĮerēw|õØdD‘ÕÜüØĘÉk DJ‘£ž¼(Ķ^ ,V²=¢¬¹d'Äy—‹,5ę±{½-fµ|žW¦qU|/¬ĪŚE¼ZܾEź€æĒ¹_”¬c”čq$Mo‘NžF s¾"Ō/ㄼK2‚7yĒ­"Ļ>ńŸŪ-ą‰·ƒó:W-o™o#ķȗćM5Ķ)ŽÖ}›ēµķ’Ąöķ]qÕõ"?Q³Čn"œ¢sĻ–±’‘‡o;ß=iøĶXÜK“XŻŽ@Ŗ«ØInĮ¶‰ŗŽ; ĪQ±µ1óŚ˜EĻ—ņ·Cž5ć_¼/ż¹„ÜŪ!h®6§ÓéļXMjuF=nģēµI-n&…ꉶ3¦øÉ!…gĶÖJīź;Ö|ŗÜÕĆK£šĘ)d¶ŌµŚdܖūŽPśWžź3Gq4¶¶²G,C")½tR3”l}ƒšāÉÕ|?€|Aq¦-õ˜Ż*wŲ+w÷Ÿ€f>½*ōxq—ł{šŽēPó.¾ąv½ėKŁ«“‰tVū²/cLŠÖ;2Įpņ`å~•—ØjÆ-°…‹ KóDeSóöē„Y³Ōb’ą<‡üiŁĻė)Ć(™ĻR:ןźž¼™. J’BŹF1Č5¤!.‡Ģڦq£x™ŚęĆĢ…@Ś6ņzż+ŗŠąß[H–3·#“F©\›KŸTÓ¼ˆć'b°8ϾŅ¼kŖG ;Økw ĘHxPD¢xä^!»^ŠkböŚo4’°Œ=1^Š|U¦ŽÅ’džģĒ?ne(vÖ6·3!Żūģēõ½6šöH’Ū“·Ÿ“®+ŹbĶēŻ)żŲÜqPµœˆ ’ĻĖÉ© T÷nYR§®‚X„µķä Æ;ØĶ`˜H©_Zå5Łj’e—©õI÷0aš óVu½Ü¹åtŽ»Ńm.lšŻ.W~Ų#;tśe§Eį‹ÅŽ[™žÖQówǵR—]±…`T›#å'­G(¬u^ ’ßPøgSSŽN 5é71Go#BĘ9§ŸĀ˜ńV‘}oŖ¤«%±“l÷k‚ń_‡ķlķOŚĪźŽA»h!° 0ņ<ŅĒN¶“bö¤gŲ`ZændlNŲ␮6-UįœIuėŸJMsL“šÕeŒbQĮ½e$ś—Ģ'øŅ,šGĖŁ“ŽOz|v6¶¶ņD! Ih©éš›<{࿈µ {ā%φtd†ŚĘ×rܼø€ ;ę¾äŗÖ„šĒ„5)`Ksl’#ņ?LżZå©IšJZ |GšÕ‰¼;qāŻ'U·‚ņ+‚UĘee³_=ė:^&•=ԐłīŠ—_™rzśVŌāÓ"qlĪŅõ»› —ŅdS"y€/•õƅn“]OAžĀém¤Ä%Bz±ž!üė¤žSĀüEšÓįž‰oä^ŽŪ$R†Ģ®Į£n¤żEx5ՌÉ/,Ą„᳐TPØ|,ń&”ųž>Śga`pPį€8śÅO+f¶8ė½bóQŌ®mįR-ß¹äŖąu®“DÓ5I ‰)tĪ6ĖŽ£Ś“ŒlL Thoōoˆ¾ŽūQ{HQo$-І9?—ē_i_]é­4m2t’$EBˆłPŲ樅" ”y%6ņ[łdüÅ0+ʼUń$‰Gk§øFŗ PW"<ŲO¦j0Ļq4) ĆÖ¹Mqo¬ÆP٣˦2}ą:6EȌKøZ}s@ÕZāK%“˜K¹zƒ_axƒā;ƒįė-jßR› T²āHˆĒ$~“—Kz7Åɦž-N”2¹ē˜ŲŖŗßķl¾ńˆ²¾Š®5­ iV $†0OŽ+éÅK‚SŹž#É”xŪÅw—v™i§E!¤aō5ĒiŸ5M/RY­­ ’Į˜ł¬:–õ¬eJĮ(čz­­ž­į(ę·— jÄ‹i†°ęń$ÅÅżŖˆŻ‰-ótÅTbcc‹Ō”ģG=ž‡ÉV„siķ-¤2DŠ ²nFī VVĒ ‘Õäk&yĮé¤sŗ]މ§k©a+ eoœ)čz½µŽ«ŖŚ=¾„.™ĆāmJśõKŒÉp¤bvć'œšj„ rgĻæ5ū†ž6“E¾ø»HÉ3.zć¦0E|ÉńŲØÓļō1£ūUĆ#ŖBsœžžµĻ(2c.Øē!šWöäVWŚĘŸv’C)ņĆ©^Gqķ\­ß…õOÅ«i“v–°®ęø)…ač=hŠ6‹g'ńŸąŽ‡¦ńG†¬¢—Pš0WhĈąt'·?„{ĀĻxŽóįž›įŸAöM~ßżMŅ}õNĆwåÅm /„šē‰®žŃ,õk§æ‘#([8$悯š„燼]}®xh@$Ւ=ń–8ÉĮązõż+Ec7Šųoö†š•žp³ŽŚ5µõ³>J :ńž}|æ¤xōėėO*5ž×~dSĆ{b—.†gč§ĆŸ‰^ÜŲæ‡b•nĖ–"ł.ä1ķųWćŸĘ_ ė~ń¦¬—ztŠhWևfR0N@Ļ_j,4Ļ»I’xŌ‡F<ńüŖ{k§‚źŚ«ĄžqT¶5‹}OØgÆG¢ų°i’\F–„ĄyLąn;{ćüęæQ,§WlL ’Ö©”z3HŹĒY¦ųßUŃFŪkŁc…ˆÜ±ŗ¾1ż­tH|m%–”įkUŃoƒ‡•IŹŹŻ’:įÆKfŽŹSč|5wįŻSM‘lµˆ†ećö'ģóā‰üS”jß µOķDZK ĀŖķčų{×LlՎ…Ŗ=£ö7ż¢µæŲKö³š§Ä8uøüØĪ4ßYņ#h™¶¬Œ;<ēŚæ»]/RѾ•ürx³JŽK™µRā ]ķ‚Q“«©ĮōĮ·¤ō9¤ŗi=·“;“*ŽõJhń”É_źk².ē,Łƒs”cĄļėUēŠ8S€qĻZč1$mŠ€*åŗZ”Ń‘ėApE–ø³Óģ./Ƨ†cS'ĪŲ' ÷ÆŠ_Ųsž gū[ĮC5*ćĀž¾ųQšJ{µ·ˆµkvP\ą usĻ'Ž+³ŗ”:ŸŚģW’ ųū č ¤i~љjVęĘķ #ķzd¬J'BŃѰö®In4ĻÄŁ¬WRÓZśŃwBÆ·x9?Č5ÉÄŪå‘#$²`õŒŃq‘ŁųWš+˜ćV €wÕō<šŹŚXĆØéŠ¤ŹźC#rW·5åbéė”ŻFgy+Ż`”ŗŸ„qŽ Ņe¼±i"9•9ēŖ­rÓV‘ģ_žœG†5xģ„{ Ā6–88äW§Z[Ar`u•v1ćšöéKSĮŖ¬ĖŚē…H°[ēdū1m¬ńßō‡ģÕš»ĀÓYßų×W³Šö9AK}ąW_»ļ€rkфŽ6ϵ4ÉĀŪ­·…^éZņDRža”±8ē5²9Ū9Ųģ.ÖG<"ŸN¦ŗ6k„™! ²0Ą6ī¤PM­ĮäŪE‹‚%ĪFŽĀ¹”ū.£ŗ+“˜+æ‚h.tļŽ7¶0ÄT…F3„zW†“MVłZ)‹ŖŖć9éŽōč–VæŁK Č]ŁH O®7ʞŃõ ‘©B‚Śē8 Ž’„4Ź‹±Ć®ƒœ$v^•„oį[ žĻØG3ca·ŒŠ¼ĶŽļJ—O±t¶gHXšww¬ŸGmĀKSī{RĢ®īåŗW ¦ŻĆ8¬›‹ł-fDČ|ž”bĘžG˜ļŲļKy+’é3dćŽŌ‰%µÄnĪX“][’­VIøkvŗHÕӎ½[A¶v›_.p}+ŖŽi!Œ¤iĆų “HžA$®¦00j€T[…Ā”|õ4īRv;­d3Æļ"E”ē?Jõ‹v c”ā9PœŒœŠlu¶ŗ•¤kx­g¤ćė^GØéqFāR¬ŒĶÓ?Ņ•ŒŚf¾–Ö1Å{õ6ö—­Ć+Ü[1d÷5F÷Đ铛9īXąóœ{b‘Šrھ—£j×l±£×= ,:ÆŁQ4± £“7õ¦m†”g4RBłŽĪųļ]”¦jvQéĻ œo ?69֓*ĘUŪŻK*¬Ł‡ŽEgjŚy‚rĮü¬ą“ڳQv° cæ‚„9Ę}ė°½š¬öÖ¢y š¼{Ōņō*3ģsŚDp-ā„įXŲ7cŌWŠ:FÆo¤Z†·^5\ü)ņƒ“gšų‹ÅWšµų{Dt„œę“ Õd–Ō[\+1=xā›Zp¦™ö}M_Oš3Č<ŽŽŸZõ[;kXtĐĮå\€76zŠ„ŗ ;õåÕ¼PÉt”\cØē5ÄGāŌ2øl«‘šĘW;=:m;QLr…bF ļSEūx…Č\p*Z-»4ž “±ŒEr’É"ó¹yĻįXšŽ¬—š0Œa $9¤Z—C‡ņLS ‹žézń]M®µb֙‰÷H8Ę:ŠŃ¼gÜÄŌ5{KČĢ~SĀć ó×ßÅ<ķ#ŃzŠ?hH²Įq˜óóēņ­ˆŌZʄ€‰ź("S+›{G#+Ē¹ØŒNųRŪ£Ķ5¹e³§ŪBX†IūR}£c2{b·“,A ˁž¼r+V47¢˜sҁ{Bœ±˜öǜ篵S—÷{vŸ­DÉrd¶Ī“£FŽYæ•J¬éŸ—q¢²0”Č­b¤2Ź‹æ'#É«ń@]Ł@ŚIąPfŻK;{xŃ¢%!”I5Æe{öTŸ(^€ƒÖ“@¤r7ś‹Ü\²pǵł3ńGö…ų‹ńoRyļõY¬“>v[Ē#<ć’1Ę*įLŽJlj"½¾#óÓ<zV嵩–Ģ  ×Tcc)JجZ ²ƒ1ÓnŁ@”ß،U6e¹„¦ųbśü¶…—sĄė^Ńᯆs ā•ąmįrr+ĀĒŅŽš}ŖIķau#Œ~5évžŠŅU–ÜFŃ÷CQ-„i6Ÿ! CRCŗ¤0+Óš„K‘Š$Ö+ödsŠ®y™söY™Ä*c­Y•ś §Ļu>UŚ=§'ž h,B3½OZ6ęŅHˆłĆ{ŠÉ/0fŠF8č=Ø.×tķRL¢ŻiĢ£fIĪkæµg–Ęb|UY°(Ėē“OlęA=;W=©xsAŌķ^B ó©Ü§8ĮéXƒGÓ2––Īći õõæ>˜ŽvÉHYzóŅ„šœg‰‘į…­°`œq^Ak=Ī›<–€ ԜÖæB†¹§ÅŖŚ½«Ā±ČČÆž|S¢\Ś9 Lˆ¤ õ”ŃHńļųėħ,Q¶ÅĖ“ü>ųÆĶ߉_ŸČ¾Ž`‘‹/tŌ“n•tŲ$ÓuY­e ×Ćž*ö¬Pŗkõļ\u;Dģ&}2V‚0B÷5›'ŁVxāYĀ!įY†9®7¹Ń”ŌĮe}„łSŗGqɎ9ø¬įc§É}_A+[M£¾Žō#n] ūæĮ rĻ k©0ÜŠ« ÷żz¹cā_hRE6—©J—Į`N/u"·…C)G”öĻĆoˆ³ų§Jū£emśĒĢ’yŁõ5ßA²|ŗ «Óé] Üäš"•ž6œ²“Ę* Ī®„(tĪ1I«ŠSvŽ[,ǰ"Տ©[%Ä`;o\p+–¤NźR>gų§ą];ʇVÓŁ œ–ūFĄ$t?|įy„‡ŒĘŒ$Įå‡ZČérŗ8‹Ż%c…Õ„iXämĒjå`‚ÖF&Ž`Į[ =Ējŗ{˜Ķō*¦«sįMwLńVœZ9­X‡Œ–eb3Ÿ¦3_©ž»žūĆŚŒķš+.ā5'ģĶæaGęq]Ń}N:¬ū§įÕż¾­ ŁŻéw <˜Ć!Ø®óĻŌUÄy{gVąƒ‚Õ×LąŖz^‹āo[Ą-µ/lŪ||É’Öé]QŌ ,Ź_æZėŽĒ?-Ļ5×¼aįż%īdŌļmō’-IÜĒ„c[ųŽĻ[šŌŗĪ—-®£`°ÜBį°Ż³Ę“ŒnĄäm>#éÓ]›ŻF#åżć`×}kØŪ )ČŃ8łpxśŠ·J™Ék×wöwPĶks"[^ĒŁč÷PEĮMÄgؚĻmäīt mgÅŚ›€ĄļĻaŚŗµ¼Ń/ąDū4pĶˆxśÕ©”ņ™w1iĪŹUYzq޹»›Ä±PéĒ&³dMj28ą œö­ "±KP@*é£ KS5l`¼* ø#ž+§]*ŚŽĢČį ĪOZŠøČłā©’Y$›O²Šāā2ē‡Ö¹/ ītä–öŁ-$Ęv¹SéYMfˆ…n6Ēnź²łWu§ŪLŚa¶ŽōłĆī†šžu©iśŸŪ„XČec÷¶œ~usūP“ņ.nĢčŠC®jć+„¦ėŚ”7ŃKew#mls‘ļ^õkā õ{8Ł$HäQ†Į5\ęRH·og©-·Ś· @yägņ«–—W¦FwF8īzVDöšŽ˜ 2ĀbfžéõŖROst•žNÜŠŗ]õ›±•Łŗē×1Tlvē½C:Nš’lĘ9Ęźė脤‘X‘ÜkE Š@TSÉ9ļ^Õ”ų³L¾ņ`’u†ėnNćĮ4E_Beg^»ŅĖĶ™ą*9'®|Yń+ā֏įżFµ’kwb”Č_šŖåīgģŁ«į«7^‚ŽņŅźU†EÜG÷jMNĘKy”£$‡9ü+6ģO-… ˆ©t GŠõrĶ-mL ²©ēÖ¦2øSÜĒu$;ƒ¹2•ėŸzģķX¶I55’Obo¼QĪ)MsŖ‰4eCūńZ¶Z.§x°](Ž9õ­!qšz…³ŚĄbø‡ēĘyŠęü Bŗž¹=kAl“g»ŸĖFóĪ3[m§Ēm G)ŲÜ÷äšćµ É"‚p£z`ąZókVõYąš÷‘ž9¬{źqIūŠŽ9 ܊qŠH7A&[œõ¤LŒ{頕Õ|€ =ź}6ķīŅDǁŽ” ĆZÅ+˜@y0=ż« šOzdģ軹®?•©_CiwV”±6żŁcī×]¦j­ˆ6ׄ„/ń •śTÉ”øó ĀrTg•=ŖšĪ¶×Mń3mėB–¶&Ēu5šK P„u5€¶ļØG#)Dœ Ą7V>‚ØE[}?T¶Żē¶ÅīŽÕ·vwCqˆŻŽ"©ĄCYšģv—Mqó-³ĄĒó®fėJiW1®›JĖŁHŽŃ&>Z…‘Ēp½Ŗž›¤yL„Ŗø$¤`ęˆĀĆrgw§iO‘8o)F2W}{5ƒib6–Ż„䍣•>õŖ‹å²[=ɑ]Ą@HÜæÖ³ŅčiccL7vĮ䊊r³'S½–ņ"ļ+§*£Æå\¶”y+#Yɤq¹]p*$ģRÉ®™g•Fš 7öö®›FµƒHņŪSi\¤ńCųRƒ¹|…=oQA"<1ćä?ó­[Ę7PŁ›V¶ˆČ¬y^ õ“cÜ\ˆ»£^ÉŖ[6Åū>H “ē5ÜŲé7ŅÉsLĒ·œ{Ō1øéc¢¼ŠžX„ŹŹ6據ę“ĖKĖ]öśYX’7ć×ėHÄź®t‰b°Yō‰"y·õ‡Æ­eC¦ÜI+4ĄĒ6į–Ī@ØåÖčV±×Ā<øŚb²)9/Œf±n®,ķSµ¤Uł³×„h†rvWhܘÉ$mćŅ“ā×m£µ’NżŅF½p9Ń7”IŲž`l¼‰e”ˆŠ’ū•ĮžڽFŚŽ×UžĢ’kVic!rROjģŒQZœĘˆń5†•­ 2ī¬c\üĻŽŲüæ:č¾|bń•®Fö^~qi1xw™½9ōö­cœ®*ē=ń'āļļƒšŁ T‘ꌕŒ4æŽYj’"_[HµōgÆŽi^'Ö5™ą“Wic BYH=p8üŖŠŃvü šaÖtmoA»šéPæ–ø8ł¹šČƟīgń€/u}9ķ„¶¶’ģʤ Įćč8ķXOs)KS­±ø¹ŽŅŅü«Ł#=‡¾+Ń|+ń>ŚßQ³³šD†Ü­$cųėėJ+Rcs3YÕ½Æj2ZG%ż“O¼:‡ÉÆž¼gńU“»¹“Ņå¹Ó¬ o)D‘#»G„mcx£Ņf/ꚦ§«¦é²¾¤UšK™p žuļ>/¾ńM¾­ŖhzŽūaål Č ą÷äPh­Ōų»ÅVkiż§g¦źÖ©3ķI˜ ćükĖ4ﯧEū\{U ƱÜO  µk}ÓMlSĻI"Ī#zW{ąĖ’,’OipȱŸ¼Ī(&M#™ńų¾×ōėĖKɋØ%щ'kśżkē;ĖĶwH¶°µµÕ£’U!NW‰=æg:{Ÿz|5ž Ÿ…×óŗ[GØŖ—|£/Ē!Gž½`|#ųńyąĖżJŹóKkĖWVI”¼Ē<`„!řŗ_…üSā/j>1`–¾ŗøtŽ4CūŽrG3^cā=JÄ„õmAķ”Ō9'bīPk–Šś®MĆwŽ“Õō 2!*å–Dł—ŒÆÆ½ač6qjBk‚KKĢeK¦ŻÜō©k©Čį~"hsZiw>!IĆŻŪÓąnh±Č>õ‰šā0Öķ“T2ŚĢn%ŽpūIūį2ONjŅ+Ÿ¤^$ŅóöXō9įŌ£*§±,1č+ä‰ßī5[‹ļŪZ^[ĪÉåĢv"€z8©m‘ē]a{Ė­9 3Ū>Ē#­é^›¾Ö-1įžŽ‚|ćÖ„IõlęüG„­ž‘˧Ē>tå €nuü¹«¶š/ĆĶ+PÓ®’į5Yī“)v›y$ņēۚ®cBŽ­šĶɽ“šyƒTÓ O•­˜9edž¾mOŁćć-ŻĖk"É`ѾчūSāhŌū~t&>ĪšFŸąÆ ĀØŪiW^,²`Aē{ä{Ö’ ¾ iz÷Ūtōš}Čß ±üŃŒē ŒgµL—q6ĪcāU¾¹zŽÖŻxRdl‘éž}+ęI,õ?ķ0ÄęÅŁ‰ćœ~u3qg[„hwW6230»øU.H `zšä§Y 9Ģn8÷²&ĒMŽõHtčtĖÖū\q1ČĆęU=>•‡¬Ės«j6wp˜„Č”H+Į^’Ņ‚¹Jµ§ŒmäŒÉ:O¦DĘK`Ż d —Ć:ȚņžĆSwK…Œ0.æ+óšd[”ļī¼,|kqbö“›¹¶Ó‘½Ēå_WxĒBµš6®š®cFž@¦¹VČ?)ģxĶUÅÉmϘŠlüw=ĘżNyW”žuõfŸįŪ+:ßēé0\Ļp‚Qqī%@äqߑÅēŠś‡ą<ė3™ĪwŃ.ßŃ|ėƒŪ#Ž•óēķ imā]H] L[iļ.{ʲ–äŸ'xwĆśtmsw“ „8½k^O¦j4fõć“h/×µŗŪź†ēĀWö²$²Ę ļčĒÆ­|ƒ­jšMī•©jēpćś“ū+žŚ~(¾æ¾š]ē“¢Ü8ĘL 0IłG§Ų—BżŸcźk:_ÄIldÖŠB&- ĄÉu?ZēF²Ó®“Ö¾ŗŠā n½zÖ2€(Ÿ@ų§Tѵˆl<õŽ€Ē$hm“qŒ+»Ō—KŌ“ØģķEĤˆ÷y  _SĘ+žÖe\ł/öїǾ ŌćŸįõ•¾Æį©ŃÄVโcėŽŻxÆ8ų=ńĀęĖMH>(ŁŲ”C¶2£a8ąÜqZÓ ŸUi5ų[«Ü\M jāĪęD3I „ĒNyņĢ’®ü7ń»NÕ“ĶJoōrJrŒ’éé](Å£æųo揍zč”\ZNó®ÕUŒ+śā¾6ų…šWāwĆ{éEīåĬS3–Cģq֍:šžń·‹¼-k&š$¶Ō,&`ļ¶ $F’džŻkݼ_ØųÄ? õM_Äņ}£XŒ¶C’‘ćØDĶyOĢæŲč¬f—AOōnrT{’…q,øuUFyœįF9"³E­QøÓu‹y ¹WČźćä€AĒņÆ×/„¾6_ųHÖ.$YÆ\“sģĄ äv«’Ņć=7)1\ŹyśVˆō5=*ź7ˆKq嗌y’­\Õ~ )č~nx§WŌ/µ[‹=ZÉl/`ł$Lēč+™Šü]sį ~ĖÅ6Qł³X¾ōödgę϶*iŌä}·ńwĆŚGü ećĶ5…ż…õ²¹1˜„#'žł=ėś-’‚$žŲŗÅ‚×?³wõ›}oā?ƒm³³b[›ąŚ?ˆØ!r=_F‹§+­OŪiÆī-nb»‰a—Žõõ„e_xnŽžŻäūtcÄzŲ’?ʹg’9?ųCOńÆįŻkQ“K››76ó«¦L¶Ī ²żpxś ž ?ą®ß°įż•jŸiŚNuĀļE&Æį‹+6šĢXµÅ¾ī™Rr`Ėž¢¦.Ķ#žHü?ÖmĪå h¼¹˜ŲpGĻOm$ޤŹ@tĒzī†ĒTRq“ǹĒÉąĘɔcœÕŃt9Œł¬»w9¤½—ɱøžŽI•~DvĄf<Oל¤tRGīģ]’¤Õ@Žie ķ_¹üė)nklX¶KG€:ōƽ?ą™?µ>”ū~׿ |]-՝‡5{“§k,wąFģ»ó€FAĻØ£˜ī„ٟčyįĶfÉo“Ė=-ą»švÆźŗ-ÜrnEvĆ2néÜĻ#ėõ&™«[]X%ģ€ł°€ŽµÉQŲŪyģž÷²yR=Ķ~uĮL?e};ö“żŸõK‹-0_ųŪĆQĖ{i@Mż”B&·lõ~qčÉĒZįd¤ž_žź»†[ VwžÉ¹Ł4%Ž=ņ:WŒj–ŸaøyįóėQ$U‡iźži$“¶÷Æfšö­cż™wķĶŹ>G’;yĶrW§Ģ¬vR‘rśņÖßd–W , ¹|® µQŽ_00e=~•ĆģŚg±B±ęž#Ń °ŌWŽŖÜ Xѵ+‡•2y*ŃŻkŗ‘ēāįfĻdÓM^m7N•ĆŪI(łTüŁ÷ü«ōĆZEŽƒįŻ?M¶€eW{61ŒŽ˜ü+Ҧ£:dš‰ `ņ+¤²ŸvĘÉŲ:ź‰ŹåsæÓķ,®c†TU>¼u5ÓA”[LR&< 1LŃJē)ā{Y“ŌE—ꋱ®¤Ż'˜…Y‡v «ā×ļ¬ŻThІĮkŃ4‹Qiā<éqĢÅJŗ9 ~ _#.0¹éž ń6›ń o4•ž Mb4 ±ž2O@ yžŗ5K mķd;Ś*{Rq°ż™Y®&™ņ鞹Ļj|ZĖZøŒ0HĒPEH“±›{āY#aņ&‡‚¬%śÓ°‡ē# Gż*¦ÆŖ_i×čÖī%‹®kg µ„xŽč8–U’9AłN~õiĒāėBō¤Ą 3ĆgƵ O®­ŻŻ YT“ó»śUK=2X­ćżóĻn•¬GÅÅæ“ĪĢ1Ī+[U‚+ˆWuą÷¬„ 9ČlžĻūłd<6TžĘŗī%• ˆąŹzŌ äõmHŻ Į””§Œg‹6˜čķ4.¬¹ćŽNēOņi¶!ĖøÆzČm{Qžg‘\¤Dmć°­G£\ÜĮÆ –ŻžÕ—ļöŻé^µ8%›äĒCü«#Ó¬NłRO"R2kŹüX“%Ū3»3 鎃x½iڜ6‘"-)ž÷cUPŽ]k+4šĮĒ Ņ7=–ĪćJ6hBÅ 9äVu_E>›š q±² ö”£S“‹UµÄ’J7ē?2Ž•ĢźŗŗĪŠŁ€v;X»¢e±ŠčŗoŁ½Į1łdƒJõm^}.źĘw;pGūTŒ¢ģĻ×4×{Ć=“łn¤3ZRß\A±tB6¶i›MŗŚ½„?f¶:®?z“"A"?݉ö9®1%ŹĒ˜]=ŌZ°“Ī؊ćŒpq^榗VH© —z|Ų8¦–¢ƒ8«‹;«Hœ0Ż Ļ½céž[ė™ē—ä\nQÓF‰Ų§h²i73[É.q&G=+»¶ÜĘҐ8k)sv8KFę{é!ós€+Zјī†Ve`jM3"ī‡q!»U84ÖPÅ žżØ-NĘMĶ»łćå “ėZ–Ö“K²7\ö\QvF6><§•ēŻs$ŒģY‹’}ĶY‚Śā9˜aŒx{WDcc9nmĆmc$3Ž0kJ*$hžéäÓnĒ1zĘŪQæu‚ŚŽG9ūŪkŚü9šĘKŊ}I2łiz±lÕY@hŽ“ÄqEc¾1‚z%–‹› #n9ā³”ŗ&v6¶Ö°²•„nąt®ŠāĻģ© –ī ö5W1r1oѦSäoZÅX§Tel_֜;6ršĪ¬tōq–šxīkĆŽ(žöčD{ dg®kQ¦ę\£Ä»}½h˜“°Œ†‘žŌ-­­Ōöļ#”u_~kņĪyƒ<$.;Šm;ZņāWFÓ)ąž¦¶Xvŗ0a鎵‚źWń>žń„¼‡Ėœަ©¶ne$9*zb¦kPgqµŃR­¹qœ ×½øQ \„¼Ź~SŽ•œ¶+m;_ŅīšŃšiŃ@ ōÆø‘ģnLĄe<zÖŹņk"kŪSĮ>•ĶųL‚č,±²–Ē;{Ply|Ź–Óyw·ŲŪå“oń-|}ńsįÄ_kŗŸI/$2“ŒŒōĶe&it?6ž!ų>’K֚{«±ø%dB9cžæ”üź-Ņ   6†äŒō®:Ń:”±u­¾ĘÄrč3““VćŻÄ`ŗC¹H’ōÅ%©Ń }>÷Q…a³idū4j-ē'Zķ4;E¾Ō ‚žöl ų~µ'Lv:}sĀóh×Ń{ĖmNU!ą;€®wSŠ^؟µ£C#d©6?gs£ÓµRĀ4²¼ņ¤€,…į½ÆZś3į×ÅŪ]Vį<3Æ,Vŗ±Mé*ēœt­aPĘt:ąaIGš™sޓؕtR‡]Ä~¼eќҧbć]-¦T’Žž¢²Śõ'b#^Œ5*‘*S*īÉ.mµ Kż. ­ęBŖē$Ę}F+ćÆų.ćĆZĶź4ˆ,ämŃqŒ÷®gŖ2čymĆ6—ŖGu eŻ‘¼dcÜzVOöDw÷s\XŲǐYÕGZŗO]IœN7Ä3E‘¬QÜÄN6ŒŸzöŁWā¹ųqń ŪĀ(u±ųØ „,ā˜œØĻn’wÓG×Cö#M據Uō7ŚUģz\ KDA>ŻėŲu fß]…/­ %·?­uĘ68*ö¾4“…m“y&‰.\|»Ž JÕÕu[ƒ¤ÜĘ'[YƒsÉĒJטTŃłm~|Sāėv^>Õõ)“$œĒߑ$BN=2@Åw–0X|.Šžėײhw &kw‘Šˆ=’JŃ3Ŗė”Éx›Ćö’.¬ökKŌb•^Xą}ŒÄóŽ:W±ÅāĻx%“mW¹Õm £œ»‚=HśUó²$z“Ä#ÄZ &HZŽą'85_ĆŚķę— 1†øˆ = IƒßĒćĆs:YłqĆv@bÓ„uÖÆŖ³”ā'®iŹ6:KI#—–O›©ā™w<°“eiĘ;j &Œ¶ŽB€cqŌõ•,ņĘŃĒ *„ąg½T]ŒezĪĘŁĶŽFĖż«Ä•Õ½“šEsņmū¦¶CŒl|ł{¬ÜŲŻĖu:C=¦åqšäVüźé:”%° DūĘV4mō¹ÕÖń ØŃö=1^…¤¤±-„ćŻĀŹĶ÷w ŠĪĮĪ{‡MÕ4ø¬>Ų„ä3Ŗ’?ƼGĬŖ ¶Åóv<h±qw9«ci„ ¾µ¹Ī'%IėļZŒŠj0bŒ†äē­"œOeY§æˆKo4ˆ§uŗÕ­>iķfy„‘r8ĻJfR¹Ė %iŽy<ŠuæšŅ$0Bļ!<`t¤e&ZŗÕ/­Õķ$ŒōĒ=ź;I4ū˜\[œdŒž˜ŌŠŗƒ@ŖÕGŽ{ņßéMsHE×ŗ./SÅŅĢܼᤁ<㟽ōØ!µ“ĻĮG”Ķ#b­ō[̦TŻaĒz·i-²1f 0sžćéB}€f³}©Ņ¤•ķŗ6Np+Čõ?‡Ś‰hÆNų±ĢmŽ€7“]6ßĮĶic¦ĆžŠ šzWY}©Ev«å@ń¾3ׄe3H,ģĶįŚÉ“×=Ŗ¬“­£ŗ®\ņ¬:Ō¢L™5+¦łć6SżĪ“ˉµMZµœćŒté]—R£¹ ¢MgK";KƒŒu5Ėų‹P×õˬīīv˜ņF jŪ™Ÿ ɤ¹—Xŗ‹ĶĮ̌xĄÆa¾¾³żäPNŽTqŠÅ‘3œŽc+ķc†_½Oø¼żŁ·’EņĻ=«)\ĀJę$RŻZ•zśÕ»;oP½e[XžÓ³©;÷¢;XQާCżƒu¦\}"21vöõŅKįūkˆ#šŃ³"ö­Rg;y<ķö[ˆŠ(AW?o-ÜFŌ 3»ū޵#”ж ³Ć Ōītß&¤c|¤ˆlxӎå4.¹bŗDl‚$\·š;Ö=”‰ŹźCt?JÜĪHčÆu[µhŻ·žI©®3ķHfV\£ąĶi}{¾Ł¦Žhŗ ’įUīļ4“åż‹N[@F-ĶėO”Ģ+ø$gWµeFI&®ŁZŪ΃ķyb¼īŌl>dAw©ĶiuŪČ §BµS»¹’UŻÆ\=jŠ0Ņk֑’X c’GO­G5“R©fF“œē+n\dgÅ×ĶI~cź TÕlļF˜—›+ŒžŽ•Œ–¦§Ö÷1žšĆó)ĻŹpk–ÕƵJĘāIBš ¾Õ¢CM{ŪĖ)"0IĪĀźErš‡‡.ÆndŻo3ķ88=j¹“°ķŠč¼?c>™lā{cņ‚9қ˦pčĒq÷Z‘4t–Āo³©3³Ź9ĒéT¢·ŗ»i/%—ĖĮŚTśōĪv:W¼°…„¶—|\’85VÓ\¹‘ćY×,Ķó`c^ē·h>µÖ-×Ļ/åÆ|ćµgųĮGNgˆ”ŽA“=zPjxžœöŅIū©Š)ēņmCi£k6¢-ƒƒÜśÖōź[QŲžb-4ū.ymnÓɒ7(Ńćī‘Ų×]į”­iéhŠ„æš„²Nā Ą®ˆK©ĖR'ŲŚ÷ĄOź’ųÅZI½³Ö6‘p0¹#ļźsé^ā/éš‹lĖÜŹŒ¤¬Ø·×ėÅokc’SeŒŠd²Ņ¼UįtŒŒ–½+ ž¼ÕO„÷Æ,EŲ­žO6Te£ŚzŸ×ŠŽ$ūFr~.“CŌZcž?:ĒŚ+•c‘×5ß“jZłÜ:ØDńžĆ?…~‚|ų&?†¼_£źzf¬–ó;Ä]r¹rĒ?Lę¾ųŸą=_Ą^/—Ä ÓēœüŃζć9”QėWĶ#¹ķ_³ßĒĻhƼC¢^ĖØ‰Ä½B»c'ļź+īߏž*Ń#ųY„x·ĆJØLīn#wūœtŁß©­¤–į)t>#ų{­½ī¦aO)ɒ@ØT™=yü++ĘwsĮu%µøŒG’7éXĖAókcGĄ%³ŗ½ĆšüI26D$ńÉĻ’Z»ßz‡¾x_Ć×:V—Æą;Ȥ‰®-ā'ĒOb+õ(ņٟĮ>&ń·Ä ėWń[;˜šĖy Ī;“yž•ś£„ėó];L×4]=5ęWŪ·œĻnõ­õ°œO˜üišcGšæŽ?į`Śźe¶yVVcæ*+ķ üDųs¬[h’š‡““„ÄB;ø®|0ąį½4œn%¹óŸķ+ą|)Æhŗī‰m=ļ‡ī¶?ŻÅė–OÖ¾ų„h—WpĒ“\”j Ž~µ*™ 3¤jƇ¤Ž>Y÷;),3µ<ÕŌ {ŲRhY—nwSõ­FŽˆ4»ĒHnćó0(ąā·ō=M½ń¬~tÉe±?|{ŠMĻUń“d-D‡ģšŖąˆóĻJš-JŹŅĶ.¦‚Źž{Š |4ńµ¶āHoÆ­üäÜŖ©sżźū§Ēæō߉޵ӓɓų&²tŁ2s,@xōēF¼ˆ³ü#ŗĒĆø-lu+}GQU2ͦZ`Ÿ~µłŻńÄ3iŽ0ø²²ĒiŌhŽwHĮ öÅŌnŸCŅ ų£w•¬ 0ŲŖ<°pŒc]x»TÕf1%āŻ”fćnhŠ9{ĆšžĘÖĘÖkß_ńߑęŁĀ·ū#?į^Ūkń6óEs§ųŖūėd¶-ˆŲS!õ­Hy¤|UŠnu†ÓļćžÖ˜ØÜøßĻoJMzŅĻT½– y䵄7īņüā™œŻGCŗM:ęĘJ€ˆrFp1ŸzõƄæļō­6ĒĆŚä”u Sņŗ¤gߎ߭Z€(w>ēų]ńēĮɦ]$šUÄX >@Wc׌tÅxĒķo®x'_ń¶™ŖhZ‚o[Tżä3|­€ōā„Ē ½ž§Åz½¾%ŠŽvšFļ½T›Āwš…æŚīćŗ‚ŹŽT'Ļ0śĪ“½C^ń·Ćėš7‰¤ø,rĀģ1ē#c’;ć#5įæ<;¤hW’M§Ż"é÷a.L–Ņnˆł=¹Ķ.cHČńųGPŠuž+fQ*)Lä† 89ķ^‡š÷Ļš§ÄoxŸ[²ŚĪEœÓHŲXl†ĒsšÖ2čh‘ūU£ŚŁA H—°ßĄčź0Ų~5ē_¼ią’ ZA©Üė .`“ Ćo’g׊rģM‹¾ń„·Åo[A¢źriļ*ä1oøŽøķҽ~ļÅ?`Ńm¬Y~Õ«F›Z]æ{¬%‚q>lńo‹5ƒRūMŹ%ĄC&Ö8Šüü¼×õkIöčå‚#pMĖšW$śŌ%ga${„ō7Ś(³:CĢń‰øń•ļ\­äšÖ£½šVVģėõ5”V=ūFų›«iŗE“zCŹ ČIV#+»¼ų£ońgAeńu”V:ō‹²`˜Ū¹AŽ®\ˆłö_Aįǹœ\Ķs ŒJ«Ÿ•Oū5ƒ¢Xė^+’„ÆĆ¶‘Ļ*Ćę¤[rdP3…Ŗ’źQó„õåäm&Ÿö+Ų™¢–&*Ƃć^[}jŃŹźØĮ³€qšČŌ|3«ÅjsX^Gbqūņ„{ké’Ł—ʶ:>¶ŗÆu'öeĮ)”ę6#©üMR––ō&Ūå_ݰuģsœÖ‹¬“Bč­KC>ż”ü?‡ü@ž2¶gøŃu °Ė“am„^™³_/H¾c½»…ŲĒo^€ŌņŲŽ>µżšüojV’į‰'‡ģ"ŻžÖįԐ8ŚGƽz'ĄßŒ>4żŠ?k_‡Ÿ“‚ZŽ›]J8ŁM€Ū›°ČĻJvŌé§¹żųé)Šž'x'ĀŽ>š”¶—>Õģ"¼‚hd ŽYwcźć]wĆĻź> ׄw ¾™8¶yēÆņ¬Zčmä}”%†„ S“1²ŗ‡z_ßšToŲĘĒöÉż“|]ą­.×āf…k^»Cw“ånźŌĒLķ=«Oš %vµKĶjæ’”žr>-šō±y×:ŒNµŅXßăĢg ‡ŽæJņKĄvHˆ„xĄćœ×u)]]uSčfAlJ)rK J’½,EŚ01Ž·‰ĪQ’ŃZ'’ 7޼u¬‰ģ­Æ-n`¹btƧ?Ņ,tÓGö3’Cż“|=ńŪöx¼ų9ń.ĪĶ<ąÕžĪh]p÷Ś`P±J9'jć#ŗŽęæLž xŸÄ¾ųÅØxWšŒém+L–rrLyĪčØķųÖ5#Ōģ‚?Ym®#Õ¬āøu ]G˜½”×’ė†G;QŠ×BĶ]3]óP›īæųÕżqeæ“eó •FPūV@w~¹‡Ä€‰D—Šø'ęõ‘ŖĆ2 ŗuu`Hojvēߊž²ń–Ŗč÷±DÖ·cäb9ŠAʐ{sŠüÜńŸö„Ī—5õö“ž/šĖ7R·q‡¼µŻ€ųž/—ō {Š·~’ĮMæfA©h³ų“A·Y4¹_ŲČvH*HīTŠž{g_;-˜Ŗ¬U—n6‘Ś»©3>¦C®’1bc¹NNEUó‘š« +ēæ½]'<ˆ^/˜‚vćÖØÉpū±śÕ¶Éo#[D’4 “øžEO-ä—8óI_ż£ž*JŒ¬6"2>žµŁZ[x| +˹ŅxVhW*Č}GjFŠWŠēēXb¼qg)xó”ĻŠ’}95‹­%’X›!ću8ŲĄä;ŠgU)ŚüĒö×½ż¢æg=wö|ń¦©c­|Vš;†Ņnp’źŃq³ünj§”ŹśWōsšėĚgЬ­µ[Fh'qä^ĮœŖŹ¼7ź cZ'fŒō›Fµ’Ņ)Tļ„žÜ֍ŸšÖ±Ķ}™”å™qĪEyŅZ“?‹ßų.wģaĆoĻć iŽ–jŅk:$ЧkĄĶ™­³üF69ēkłĒAe«Y“²¤©ēĘ=3Ū5œ¶79K[›é…üʶlpĆo}Mz}÷„Ž=5ķ"[mCM˜äēMŸN¶el6qŸ\VÖ†”oēĄ¢6ÉõoŚq)cĻé@¶·Ų‘\Zķt«’ķw†ĪŚh¾ÓŸŗOŽÕQ–5[•–6‚&Ū2švž¦¹³cöäW“äuēęEgcdqŅ4Ÿm‘ClŲ:Ü]IĀ uD õĒ&œebć+b[‹­·%ņGńcƒU'Ź9X±ėšLŚäśdį”~S_J©åŸµ!‹×©ģ)4)=Ö8Ż­ÓtŸ"óĮĘ+J-SɈG+ļéY8딁0¹ŃÖhŪ|n²ąOJջҠŌ-ĖŚ…—š#r¹™R Nœ²ŚČ„·Ņ¹ūķBüČ©jĶĆœVØ.UžŠ·—<Ē.}G ]÷†"†TtĀ£xT4ļ”pfα§½Å±Š6Ą|µē²ėW:\ — †SŒć‘JW,ä®o®ęœBģ§ŲėW໾¶gŁÖ&< ‹qśU’6¢ŅŹźÅ Ž•ß^6okUĒ$Žis£˜¹|:LŖd‡=‡½uQÅ“W·^ē'­ö‡3pēØd*GCŠč¬Š$,Ķ“`c„m™ZŒŻFŹH<õõ®_ŹKv;rHĒJvŃi²[EĖ"łOćY×rn”ĻėZĘ6mÓeY±ƒĮ¤Ł:ķ䱄P\¾%‘%‰)‡›ć<ę±åoqœ/ˆ¼vž~ ˜ $ ;’ ÷Ɓ_±oÅ_Ś I5¦²—Ą>&'“Q»M­p„’zWRŒ*3÷ąOģ›š»ąœ į H¼A­Ÿ-ęŌīį Ė %AéҾ”6ztR ‰ˆšķŽN?ˆÓ9$ō:6ŚņįA‘M½·a܊é!#@ˆøõ ē”¬Noz†y–g œzw¦bclig–Ņ_ĢtĖÉ4÷QīEĒN˜5ł7¬ėwśõųŌµŪėķgPź%¹¹Cķž•źa؛¹¤bĖ/˜ÅĒŽ=OsU<ųžTŒ£ī'Ó­zŌāsTĖfrĶ·éOh_j|Ż«9œ8TVp8ĒZŃ“·y jˆCÉ5ƒW;MÉI™RæŠG8 =k菃?³_ĘŚ Ä°ųOąēõ]]Œ‘Ē&£$$[ĆøżģžøėI»B'ōĖūĮ>üÕōŸ|rÕā·‰ć‹ĻsÄ PÜ78 Šļ_»šę‘į½2ĒHšö‘aįŻŚ–¶±„P=ńņkŠ„CC”ą)ŲaY‰cp×BwŸåĆ\Ķ™I›‹Ąb–²”ŗc?Q¹ū%³Ļ‚XyęŸć¦ŌšĪfAī:×|ZƒIõ6§Bē£5ĢK ™¤]€g9®ūĘ8i µ ņ©ąƒTŖ£xPź|ūćļ~š+CÅŚœ¦~į”+ż+ņūćĒķß«xÆv‹ššżƒHIž6”‹Šįæ‹„l•ĪˆĀĒēĘ­ÆjZž£>„{}uuu)'2I€öµb2Ż ’ź7Õ¼)„„гmh_kžµ±Œ„‡V=ØnĘF„µ…Õüń‹Kf‘˜•«Ū<1š¹ę s|w·M˜¬%1X÷mĄś}„ŗ$0 e㕯EÓt/*ĘEćgåR+0‘ÖxvImļ,Ķ»…prŗY4ųĢÅ×,¾õ';ÄĄ%(GŹ nÜÜ!d%Jš„õŽ‘o}§Ķqē¤W Ó=ė’š6µ”¬čvg‡ó­#Źėše†¦«¼,ĮOpqé\Οį}?M™ī,žmäēę=·5@z ”S¼I+g ńļUn5Ėk[•Šö?- ŚŽ€7¬nķēܰ·ČWŒU«‰¬’³n-āKœ|§ĄłūRµx5«}ĀYāf'pž+Ó4Øć½Õ]ŌwŠjVŠ ‹ż/7AŒk»#'½¦-°cŗ‚={@5•Zģni?z¦øÓwŹØŒ÷":–—r¶ÓŚ;’§%}ėÄ!Š^g¹[Üę6c“õ¬g!qf±\ŗDŻŻ*Ķī…p¶kyć >dn’J–‘å'K£ŻņNģŽ3‘^S{ ’kFĀFĝNOLV} iŸ"|mųX5=*īāRż Uld;×ēwZdžco ĪŠĪ’&@±µnQ#K_Ž”Č'ųO·ē\µ=Ź6×ŅG4jdłW†·Ņ½N†ē“IōŽ0GQX9Xź¦zĖŪK¢ŪÅ5Źj™Č/Õ”Ņų6Ā_\Zų€4vČĮD±ņĒšā²lčĻ|Dšš]ńҬķ5;Å<¹Ö2v©īO’^¼Ā=qt-BĪžģ9‘%U9'²ņ™śįmB-CI“»ŠffhĮ*G*q] »·gXćEmL䪊W&‘’ £:žŒcŚŖŲŚĶ„%pźOę“gÆœWvĶåÉH Ū=Gę×eüŪ5»§T-ŒŅB™‘©\Nė ̣ïSŗØßiv×io4s ×īõ;tŲ“*üĶųg‘Å}³įū=HĆö$½Va››nEvBgHī•įˉÆķN« O·k!<ąśę¾‡o Gżšākwøˆ.ぜ.=k¢>G-ķ”š÷tmžY“øōłMĹt&3ƒqPxcį$¬dPK«Dn8\šÜ|ģĶńWģż«é:¤~3š½Ķ­ßXrYf >ŸZõ/ ųjŅöÖ õ«3oØ¢“†nüÓ°Ōūž…‰jŖ"("VłAĘ6×udšŖČķęŪ»|£µ#D&½}£"%턤ŠĢœ7͜×Iį}zöž8Ś)$0ćæZ ęz–ö•––Ž#ēø÷­ø•äĢ‘Hˆąäp*v9ēø÷ķä Ć|G©©ķ¤ÓĖč“"śŽ‡Śƒ2FK6ghĀŪ¶sõÆ7ńfœ5 iré20'oF•¬O®EhF²Ā”ĮĮ÷¬½>ĆG‘ݐ9Ć `ƒéYÜi—Ś,ӄ@<ˆT;öƛµĖˆ>ńMõµźĀśL«ę[*¾‡Ü֑‘Æ*FŽ—¬ė²Ģ¢K’‘ŠNF+ؚĖPŌķ§•Yī)r äNNÅ=y©ÜX\¼·RÜwŁŌ ģ¼<ŚMė%՝Ēļ‹ućŽĘ±Ļ£ō »čķa‹zĻ8=«Ń“˜–ęęŸZ¶O’^‘•CŠ5-NžČ\ŚĪŃĢ?øŲ×/ŚÓ8ń*’3Ž“‡™Øß½x£`ŸĀ¢±„ԁ”–F…ƒ`Œb€÷ €Éój~”ቼA¦0µE#)µÕčFWŽ.AxČĄČĪ+ DEė»KeŹĒ |Öe¢‹o9%—pn7šJ sś„‚ĢÄ[Ż“ž{f¹m"ŅT¹ū> Ėz •ߌn«äEÅŲéÆ-“k4Äd'o)œ`×.¹4wqŚYŚM"ĆnēƒÜ9›¹ÖZŪ$2doóÅ{‡ƒµµ²Ūk${:(biū4+›ž)ŗŽX73Ǽ”nā¼Ag–ŚW€ƒ’kHĘąsš—ˆ¦ŽtbāĻ#8üŖ]?Uū}ÓyźDzdāµJ°ŗŗ4¾ZÄēŃHĻį]siVĆOÓĢ[œĖ'AĒjfR0ä‘"u[Õ!¾S°vö¬mNkŲ 2xzķ©8YS©÷ #ē#=īŖÉ4ś”P«ē$GŠŃ x¾Õ.‹I]Qćø¦ĶR;fÖģī®›¤HŲ8éśV“÷¶–’5æŁę2.ćééұ’ĖĮh—’%Ś“j¹ĮRqŠéÆ-,§ÓĄf1ć#œ×4˜ć¹ÄM %ĖÆ“p°ė\żīm&™śd]ŃĪź7:†š‘.ھpX0ą~†“¼ļÜż¦kiS=dĘ[øÜ”i”,ŒŅÄ8ž[e©•ńš¤c9t:„-”«:“čkUø‰¼““2©#9#Ó2’Źt·„‹ØC’1“ÓņŖó,rNĘ5$Ą=8\Äö? ÜźÖV¬n¢O%±µTvõ5Æ©xžÅŠXŗ˜śsAŃ u8ŻnkH”Ų¬“Čżv •®ŲéÉw/€ĄĘ>“žĒBĻęÄWņj~,½ŗ³²’Rɓ’sóVčž ¬µåžŽ R@±¼‚¹ĄüŗW„ z$yŅ×sķ/üeŅna¶Š|G,’, )’2ąż+Åž;iŠėZ£ųæĮW7‰gn®¢r3·<Ÿ~æ­u(ZW9jS×A¾ŠnuŻŪS±o·–IÅ@Ē8üJņψz§‰~jKZŲ\Yéó1óĖąūgµkaĖmęÕõ÷еå×TAĆaYU1ÉĒ>Õ¹ÆųÄWÖZm孌׍ē•ć;WēJÕ%kĮžĆū<é·ŗŒ÷T{uӛä%Ó-#…zæÅė­SūfĀ ZøåČŁ®zā¦V/šå?ünńƒ“=“·–ŪˆŽL1“Ī}ėę=KĘp|HK½EŠĮ~Ņ1Ł*me>ŽÕQ-ųHŌ<7oØėe&[hŌ†ŪłKgœ~5ù—ÅŚÕī«kmu ¬V%Aü@g¢ž&•ĶŅ=·ąäŗ;źņiš¬Ļdń8IZE )ō#­}ĮįĻŁūĆŽ$kĻiÆ-Ä`y²…sµ€č@ĶrŌ“ÜÖl‹¤hŗ„Ī”$µøŠ!‰"qø śvÆSkƇĆqiwMmØh÷` āŲ+ć=1šć“šę-ǹł×įÖ:ßĘ["ćQš×O‡PūEø’@U£Ļöé_Æz‚§Ņ<%{¦iqķ6šČ±˜Žl ž•Õ5Žj½ÉĻ?‹cæ¼'™¤ŗWr •°HĻ抳ŚMwQ–ūdƹUŠ™¹ąķZ)ݲgØxGĆZ^””®ŻFŽ[¤±Ęą Ų ć>ŲĶ}xKÅ>HdH^å[dn„€cØļWĢŹ„ńŽ„į;äMFŽ[]9Ī䐵ÓÜWQ>…•”YųĪŹī Ēqµ¢Ułņ2vŠ÷:5±±ąæXų¢ö9tŪ©muku =»mSŲóķ_PųąŒ’ßXYŅĀį^˜ O9¢{÷Åif¤ƒ>7ų[Å’> éz…ö tß0ł²o!eLņ„vĄĪ+ڵĆ­iŚg‰4+Awi2FęĘPńĒש¢„ł „ܕµĪæĀöžńuŌ—Ž6«|®<Ėv¼WęśÖŒ>ßxēK³1ėv‚ĀŅ|Ļj’mŒuŚ;U¶&y.¹¦^x$‹O+¦<·ŻķÓłW¤ŻN‘Ķz.Żw.9= c)V„mCįõ(tŻsĆZޤѣI$r`¤}3_OžĢæUÕÓįgÅM5oōD@Sķk½rŻ'šƒŖ ¢>ų%ąo†¤ś§‡ķ--4Ė¢n!Tu!N:€; óĶbKāū=.Y`Žę剅w€eśg­8ī]»Ÿ(~Ž> ńļƒÓCń> Ķ׃å-n-ąl²HWę2^Oū”ÕbÖ­.o®ģ®RńĢQJĒ¹ėŽŻė¦‘“Z¢:æÅ]6ĻÅÖß ¼Si³c}[TŪ’I0ō<Šüćųķš‚ėJų”.l„¼ƒM‰He™øRz¾?*“9yŸ>ź~ŗmAńnNõ!GŽ#ұm ]>‹X‰ōьŗ9ū§ÜŌ7cuÖÖ:t`¹²H„2d+"Łśž5Ī%Ī©gu åø–ŽXåm¼‘T˜&tVWšŸ‰5y£A%ĖæB?ØuŸźĶoss$j£mda†É’&™¬‡šČŽEØI<Ń[J4æ:¼‚½›ąķ·†­­.ōۘ#[U†įöm ņGó ³Ā61čŸÆķō-NF²;Š$‡"TĻp}«čO‹_²‡~/ü>>$šó®™ćŪ>Ń"*a.£ĒŻĄäŅnŹåJgƍšßÄŗe³ŻjĖgg ¼ŽT‰Ÿ™¾œūV¹©XéqĒkaĒ0;±żįžsLŽ}OkųKążGÅvvzŌŗ¶Ÿ§Aó;/ŚMĄž×xŠŁāŌ²oŚ;ųüĄ¾d'r|ŠJg?āƒ—vvzņ„k¦ÜC"H”ŽL‰øgå«?ķ-n,|? ^ ńŗĆ4HĒ÷Š`ty£›©œ¤®zׂ<¬xƒ~4„ꋵXm9#„yÆÅφ>3šåõ曨ųQÓ%ˆo‚ą÷U{Bż¦¦Æƒ4MnŪA‡\æ–9&·‹÷̲eŠēļųWŒų·Ę©¬ė-¦¶¢žz?ī×Z¾sDĶļxLi?tÅ«yzĆ8dC'sļž5÷Ļģ‹©ü'ų£įm3IŌuÉ“^8Łž+•ƒœż+9-Čq:oړ࿉ąÓu[ Zo4Åżą‹$Č£==±Šü°ń?śŖmo$Žę×yHĀ¹µčfz§„|Są«Ū[O ėqF×29® éč¼t¬ĻŠ×6¶”ēšŻĢžŽUżõ¤`¬#±-×¶kxß©“n}AąļŽžįžŸ„Yė)}}h[&$īē׊ł§ĒŚķ·|_§ź#ιµ’V±G–Rųźz’õ«KjZ5žü@ńĀOAįŪżY|-{•‘ü¶ÖL’ ~é_¦? 5Æ xūķŠĻ­ŪZŻÅųŲbVžé>½jX;kńƒĮśMÅǟa¬ZŻ „¤7äm5óöįm*Īy³cg"ÜĮW©5”Œ¹ŃŻjæŁXĆ`2«T78ocŲW”ł0Üjapšˆpćń4£+Īohž±æąŽķD‘Ÿ”/9ÆlšĻĀ©ķ¬n|Fl±oĄżįėZFCö‡Ī?5 FŪÄZM®Šó’g;rйĄō'„{?Ć[sc¢^i–k¬[Ėę=Ä}\z7¶;U\q™ūM|šåż“ü1yo§ŽĪĒūBĪ<*oÉ :WēŠbŽÕB! t CėRZbj^5Öī4+}k†žŃ@[·łā¹j«§jÖŚä LšČWhl9šŗqõ“į·‰müSąķ/S¶æ„ČŃÆŸd’Ó©õÆ\·q)P­µėU(™É³ų“ąūų[UšżģAŅL:²œ2ŗ‚GלWåf„my„ėšĘ‘wesmyi3FŽbÜ8 {ŠĢұ§įmvćĀ:Ō(ĖߎVBŪł„}ßć.ŪāĻƛ?é­gż”*§ŸnUĘܽ;PuĀGļoüŸö›ÕµÆŻžÉ?®RŽūKV¼šŻÓÜng‡qĢEIćnONÄśWō:=-äPģƒĒB+)­MÓgŌ_ ü\šõ…ī˜ŅŸ·Ząyo÷±ŽŽÕĶxĻVńB“:§†µCiŖŚ_"ÜYĢ„„ݾNōoĆõÅsĖFMāWž iū.iß?kŌų‡”ŁG ü:ų›nu”“qÅŖ(ižīē,¬Or’Lžź–3ZO2\ ū]—vÜgŸJX$ćV­m>]?@ε±,²09ä{Ōr酙L_#£ŽsJš#– 0Č@,£Œ×'7› ŅĘŃ2²ąFśPT7>‹ż>;_žĪæ“߀~&_źš–—ąéfF¶mĻČö²ü”œHF žż~ÉæeŌ~:Żj¾*½Ö$ÓJųƒF‘®r×Ö(Żö`§==*f“:¢ĻŻ­R“¶hŅ#‹W+TVæ‰ģQÓĄX’x Wæ½yõ‘g”Ų^>õVämu;zŽĘ½.}kĆś>yāŻnĒĆvöŃyāK†Ą™p~īzōżk |éū4žŌ >3|Iųį߆ž+ƒRÖ4'PÓŻ¾,šdLpĄcŸN+ķ­ręņž=²[J½@żkOf7Ló ż6i ŗ°lę6Ļå_|nšōŽ‘|xū;ˆ5Ś=Ž|MĘęõŸĆ>µ<¶fMüOųk„ųļĮ¾.šÜŚŻC$M¢ŹO˼Œ¼Gź;tČÆäö¬ų-'Ā?ˆš”ŠZŻZčÓČŽhcūø¤Ļš|WM37å ā)+¤/‡#v"±äŽTĀ”dQē]ˆē”F>YIb7wŖ¤Įꯄˆ"Ŗ» EĆqļQD@ńēšVcµŲ$ņœō©¾vUTžµ£Ść&Rr̵~Ż®—aĄļYTĻÆæaæŚŸÄŸ±ĻķSšĒāʄīś÷1iśå mæi¶fŽīŪG<÷æŃŪį·< ŚĻ†üSįŁ­|kf—–÷b†č lē8ø9ąsQ4v£ź [ūYŌln }ŗÕŠČŖzZÜ{Øq“™Xäć‘\c`gɶģó§~Šæ|IįVÓmÆüE§Fś†d„HdeS¾Į?:åp;ķōÆó˜żØ> ź?~*k66 <^ÕIŗŅRA†…‡śČłčU²1ž‰.gĪ3¤Oo<—«3¶Ü rk©š†»yak.ˆ­i1±—}iKaĀEsKņ•dŠ`öä|øéŸJ½ąøå—R²¶ŗ‰>Ē“¹·r=«‚®‡©B[#Ō¼Wį¹t;+{öĻc6pŹr#>’§ē^­Øßģ0©˜>IaĘŚŠO[•GxŸJžĪz“ų¹e·’5˜Åµ”7$döüM~‹łļ‹y>Bå^½$|Ž#rĢöā8Éq¹HėUķbµ}k²Ēž÷:õ(䀣‘‚*ܳ$­ę/ŻČõ F<‘ŚĻ#n*²]F¦ZĪę9N”Ѥ"iŽxRŽņ) }°{u5ęĶmuc3E»ĶUb1ŠÖźĘńv7£æ€[@YH‹“Ēz¹¦ėÆj䤌ˆNpk¹ö6ļ¼PO3<ęŚ4†ęH`o—­l«ĮŚĪ«{Ņ;ŚtPŪMx›Y?…p’ŽŻGzÓ3H”O®3M'}ļųM¤¢Ż.ōŪµqÖ¹­zžĻWd+$ˆAJæf.Dk'e•˜y–}éGŽQļP&”Nč–e,©jÅ^dzü?’>ÕR)ī č=Ęj¬2Ćq²Ń<ݹP«Ž—3+™ž1öo'|ŪÉ=æuT·e˲gŒž3Q)[ŌŚī9ĶĢ31ˆx®gÄ~}żˆe`ģ§ī“É؏™¬eŠóĖxn溁cP6Č&½Ā°Ų#œÖ¶,–;YĢĖ$-\äüŲŖ¾!‡ķV‰4LīčpFxōĘ@źw0n¦i’·Ś "Œր#ŽŻ¢”mran¼Weg¢i×RŻZI$:‚Œ ž•}†fXO47šĒ)ł ņǽuś•ŤP»Ä>L`b£™ˆą¼‹[וį‘Rp:w5U¤[fdĄŽÕ&±—CÓ¼?¬é’é×:|«(Čx’k\ĢvBņį×Ķ ‹‘øŠisžŌY­.ZRW?.;ŃĪĢ6ü†ó¬(²ŁĮߎõ€!½I¶:°‰G9ŠIhé¢ļq޼®+µųys*źķ¦]\É)ķļ@Ė­xNĢŻÉ-«3®ŃĮäg½yē†®Ž Œ¬‹kČeĒ9’9 \ȋYŃļ·ZYĒėuł¼ĮŚ«Ū5Ī“…˜1ĮĻAļ@ć.Ēo§¼W ęK0łFMyOnt÷ÕIŒ•·\|¤c'½žŠė¼o¦Ļk‰8Ī9bų£CĶÄÆiņŖäØĒ‚”ŽGNø;J\Še8ä`×Eoum{²ŽV8Ķc'©GIö{(,¶Ć†@:›KM,.FĄIČ©U,ērŪ>µR’†0씓ʭn¹`Ģ@õ¬kąŠŪhd=ėt€ŽŚųK„$ ­Yšq„Äxlć5V3”ŗFP» Vī*ō{"øRHļCFb7٤^:qU–}Ÿ"Žō†Tžä6O—Īqšµc3“Ä~e>ßv„³ž\H»8"·b¹{m<,lzrfķ°m#³»·zśÖÕ¶q/*„‘Z–z%„®M/\°¦sJ]ĶućJ\zńOCŹ7:‚@v€eną•ĻjZ¼ågšPŖ žEI­:zœ>­ćčā·‘„™,­€Īģā¾ų»ūOxKĆsjzx‚ŅŚé%¤8ēÓ=»óM.‡£J‘ų{ūU’ĮI,¼1%އįVēÄ^&SŒZ¶čÕO©ü’Ļ5ųwńWćÅ/×ś®§ńÄWÓŪM'™ ”Gdq}@ėų×~©“Ż–‡“1ŚĒn˜UQ…_īŠĢM®7ŲÆZ±Į:ĘŃŒ›G,qmEįY׎hē1ę¹,0“›•~nǚ׷¶ņÕA_˜VnFR‘©i”Itģģ6ÆlŠģ<#ąż[Åzķæ…üį½sÅž$•°–Öp™9Ē,K/SśżŽ’ą†ž,ńÄ:7’iĶjėÚ0¹ĆŃćv8!d#ÆŅæ¦?ƒ’ž|šå§†>ųOLŠ4ųŃQ„H@–r2Ē­qÕØ+ž­…µ»3EV''ާ’'b»[jż+‘»2ĘéRޤfętļXĖqÅܧsä“l²‘åū׈ųž[ iݬˆyĆ|øäā£}ĻJ‚īskāń5Ģ:¶µe¢¬HK}¢P€jüģųĖūaXxBēPŅü.ńÜźI½~Š’dqŽø§A]–V?3|ońÄæ5Xu]Ü\ĘrŽK9*¬zgø©4ļ3FܓŒtü+Ö§);ŧƃ=«B+D8‡Ö¶¹‹e±ba#Ļ „w~š-Ī„4ms pqĻ« Jā=ēHš5–“j²i¶Ū§”“^»į­3́L±“ Ģt>•Ė;°55»Č4”å'§ĶI£jļ ɼÕGAYĘ.ś“&z&˜ń¹—9ļ]ņ]WcóÓŽµ9ē±ĶNæa¼f,X0åIÅ"Ė,ĪĖ€JA*§½n‘‰MŌnµ­ä2ŪÜ)Ē#†÷6£;GoRTŒdŠ)ƚó"¼S #Ć<ūPQ¦ĘļŪ—==+;Äztŗ|Å<P“õŠ_Ŗ1µ‡zd×6WGå8 M˜ÓiqyÉ:Øx‡ÆsIÅØ˜µ¼ :?ˆŠeĢĖ7 $Šģ·½r0i—qź­~nnBćo–~é÷Ē­¹ŅOŪ#ł[=kVÕĄ†%8›9=h‹—6‹ xˆņHļ\ˆ4±gm=Đ-†o_ҦQ¹¹ē^ø[«Ū ö›öĻ?JåŚłŁd³ÜÆĘ9=+#X6ø„!xžŁ'咞h`”ĒņīėĮéYŹ=Mąyot[›Ėŗh&EŒ{×ęwĘχ¢vžųFéå±u ¬d“: śMį=vf·ŽĮå–p„Ŗī8 ś×¦ivÉØł‰wNęĒBĄWŸUQhĄ×|?§É~e“ŚĘĒ%7d]_‡-åµ@ØĖ* ćœ×I1;˜õ6²¤¬ģ˜<7š½ąO¢jBg·‘Uę# 3Ö±ö†GŲ°ź~ųƒ§LöŚ“O1 ¾)288ģqĶ|_āĶ:Ęm{Sҧ‰.R)öĀ@cŽ÷®ˆT.Q>©šRŽiŗm’™åHöØł‡é^‡<ŃŻ ½ė]0‘ÉQŲ­¹lēFƒląœž1[÷lk8Ņ"zäÖ§<œ×V×Öķ/ļzm‘\żÕŌSM4Ź``B>éö©”NØ>‡‡|NšAŗ¶›[ŅLŸiT &s“ū‘õƘµ :ŠDŅL»¹G³hoTq×ń]˧½»/”FdeĘŒ[»Ų6šÖ™Ķ8‡Ćßk_ ¼qįļéótč'ī ›·GÜāæiü9āo üBŠl|gą½J ķ&č«Ć[H…‡ns^…8œu {nŸėĆ« ^ĀfSņ’æŅ‹ R=¦[›µSfķøŽTõĘĮhæŚŃŻĀĘ+žSxś÷ü©Iö;i'½ˆĒ ń™A8.½*•ĘŸrӉmē1 äZØŹÄ2÷•$»Y÷^?ŽÆ8ŌĪ©¤źĢ"ßui+e—žyūŠ®q#ńV‡sr‹{Ŗm†K&>`kŹD­k.Ūp9ćƒY—,ś­Ń*mä%Įä‘Үɨ\^G_K½õIö9IąX/$ø“¼Ū±šŌ]J"H²9SŅ‚#+U­°™NŅs¹»Ó|5=½·­“ŖęMū€ć&³sģi\ś_Ą·“łf;ÉÆPzę½vĀc>MĮhĻ„:dĢģlõwÓķ¤‰™ī"np£šOķ8Č€ļōaҶŒL‰…ņ,¤a¾Ž®Fö?µČÜ範_*&'”ų;G°ņÜB. {{Ö'/ćš¦Ū‹{•¶³ ūĄOēüh”{E\łƒ]ńMŽÆ©¤VÆ b~nzf±5Mu4vm6įķÜ·+œqō5œ•“4ä34ļ ^hTĘ9ĄÉ¬=D}®vĢĖŒŻeģĢö%²ÓnVBVåO<J³ØĒ+ŖČÄHąöļŠČW9mBFdȌ^㩪śF™c®¶Ł/d²ó‘DZ@Ķi…"'·SŒŒžū©VdŸAŅ€2×PKy#“YWĶčØO'é]gx#dRĒ7(o¢hX”OsČ­»6ŽęĻĢ‘ŽžNAūæZ ‹ŌČøŅ.DQq†>jĮgŗr­+×ւ›%¤ņ£ø` uŠāļģ ÅŅfłzځĢ-ojRēsBO\sXZ“a³Č…»”Õxnńķ­d“Ō¤Ü0¾€Óīō‰.dSgw5“ÄżåĒ>Ü귈Ö6z–—q;O ž#Ž*ļ,üEq݆õ#·Zd9œ„ņźW“—ņ%ņ‹į ä«+źZk§ŁŁ"`~mĆ9ĮĢ®5]N.ķāܧä(~šõ5wLŠtŪ—–+ø\j ō žaś·‡E¼/qo;“ĮČ[·®+Ķ%’Hfo5pAéÓ5.7“E=Bø)$ Ģē€ōś×[¤E‰p|¶Ł’G=«)FÅ©÷9ķYņÅc™ŽÓœJēäÕ,žÅ$I!!°µIf Ņ# ±Ķ÷†zćJŹh®­¼ĘŠs,cŽ”r™ĶØ_M;oY'Bät­+[b’¬‘0 xÅg_—EČā^2:×Sa)IPJYTūt ĶĢéä„]BĀQ¹:ryĆė2%˜c,cŠf®””üq_LųA·ÜV„Zyņ[ģɽנ­FaŻOumqŻ$r+gŠļ-|M}sc7¬³QŠ€qéAŒŒYõE@ń¹óļjædm®°Ń2žę‚ šŌ6bĘmKä/>õęöŗ|1ݰŚüÄPŁŗfäqÅe!;zõŖ÷KrÄ}Ž2¹8=+žRź2ž™ ‹sĪ·n<žkKķHüĀéŠ}+œqŠŽöč:€Į&xĄį«lW8K†Dą‘ĻZØnnGltōaö‡ę»ė?ģŪĄmtĮ ō)““”ĒB+{[[š‡Ł”{‹dŽą³0śWžÅmxˆŃ3m{«ģ_ _ųa|6¶z¢½ŅĢ˜Uæx:šAķ]U$uš”kį‹t¼Ņį}>Ėh@q“ōĻNß„s_µŻ7Ƕš„¼v’Ob=ĆęĮõozF6ÖčņK‡iØŗ¹žYy;F7Žœ אָ.“Él.ŁćČMó0÷õӍŒM'İŁĪŽčÜoĖ.;ē½z5§ˆ4x×J¶‘žĻ¬±`69ļłŠkg ūV|=ŗš“RŪ:Gƍ,Ed CD[ĒéÅ|Łį!nZŅ;KƒŖrda÷ńż+8Źé²Ö‡Śæ tČßQK}z;]V–;—*ēĮōÆf²ųįK›ÓØéŗXžŌUy3nĮrO8±µ<½…ĻcåoiVZ/‹n‘¬ŠJļŗY ņÄqóēšśįWÄ[’ H’f¾ø†Ķ¢TD sŌ}(qč\'ў+ūRüGš§ƒ|o§jžµšĻR½†%¾2K„;—;€—é^QįÆjšö«g„7št¼³±ā#Œō„Édt)č}ĖšcEšļ‰4éµK›«  扩8'#§üEzÅ_ˆŗĒ¼)wżƒ1ŸRhžR€Ÿ,`‚±‘ĶSsó&/jž&ŌogŌÜ:³:‡=@éŌ×'©xrÅŻL¢»ƒŽśŅŠ1q"²Ó.®Rm8HŃdŒN7Ž›įļ k^ ģ×TyģŻ÷(;—<šÕŁU5cܵm?^ń… ¢Éo>aņ£2 ;Oo˜ōÆŠ-l“}F]Ę:é“xć‘Y‹įN=8ĻNjŽ”ģKš—Zš®ā­pFÖģŹ”9Ć7µ~˜|ń›ųmĖ®ŪÄóL©"õPsĒӚLM×ķgą»OŒ>xEؗ-8”»˃_ŽśŽæāo†¾ øšī©{yA2DZ3†ąW^µ… .‚č{ǃ[³ŗ‡ÄZB“0»6@å\œuÆ[°ńmƌɨ5Üq+·Ī²IéĶtr#Õt{ĮQŲk6Ÿ,įM>tC2ÉĪČÉĒžį/©x[ÄŚŪŁxZń5 ;ĶŁļaƒĄ5›§ŲŹTī}…'Œ šOĆ{Ųōō²³Õ>Ģ]‹$“NõńĻĆ­Ä_Ū^ńF­§0_%¦ BÄwrr;ęf(i¹ö—ƒ“Ļx7Ā6Śˆ¼IØźBVF2šśWĖ>"K«üFš?Š<}5īkuK>Ó ē zņ3M/xŻ;Ÿex»ćŪkŠĆÅ:®·§]Žx–=ņ޹ķÓ­|æąČ<šŪāŒ>8š4×ÖŚ]ō~]ķ¼Ņ‚-ŽyڟOóÅ\UÉ”O ż„¾'kQ|EÓ|į}FtÕ,\-¹ƼcŽż+±šæĒmc⌲j~*Ӓ[Ԉ£#.<Ń·ćĻįA‹CFÕōĶKPŪ”žkiYpŹvšyJĘńœ6¾ k¹BZyĀȠvö¬¤a5cĀWVžó!šf„†Ūƒ gŠj¾»wÜa…¼—|ķ^٤¤d›'šż¼Z§4–o'Ÿ*Īģ…(ķÖ½;Hž×W·ø³ž7žUĖ`ļG35ŠĮŖ>—u1Š p_9Čō­ķ7Ą·ŗ ÕÆ­dšM:óüż:ē)ł йŚ|ų]x–[ĶjKk©ī–²O’”³×ńÆ“¤ń?‡|kØiz„Ų““øąŽmƒzœpV•ŽĆJēć/‰|eāYü]ā ¹‚ī½g¶“$–BrøÆ5ųkØ[źQ}³G»Ó5Ąr…v©Ļ =ˆķ[Gb¹M85r- —K¼’Ņle6¶0}µ{Ā]bīöÅÅaę›ióeŒ:„RW]§[ųŻį­'QƒIŽŹ[˜$0ļĪ' q\Ÿć Ć>%“Ä nÓi‚Atc-øīp+Of)@ż]ųāχ’¢ƒ[ŗū-¤×1ļFUŲ‡÷©’ ø?ۚPÓtŪØM©ņ]¾rī“ӁYŹ$ŖV?'uÆI§ŲŻZŁÜKoÉIbf ©Ī6ćź yOü#ŗžū­BX$f ^&A—ś{óHÖ*Ēq«hž.{M® »ŗŒ¼3(ŒsœWMsāėKmoK [Żč7DS@ąmUź;zS,żcųQć­ʞ±ž”ŗŌ0b”Īsüøł‡ćŅæ:ž+ü›Mń^æŖ-Ęż>I¢Xų‰9?KdŁ mįėGN•­¤¼H.3/tĪ1łWź„“Ÿ†ZoĆ’ģ­zŅķ …mĄ;$zcŚ˜Ļ‰¼oš’Ćžžņ’Ćö6Öépűn~S’føŸ…WSéšö™©.гGö”ēĒ3ķŚ3ÉŖ‹ī3ōOĘ+”ųĒĆ7³i:vŸ©F åGĻ!ģ3ŠłĆI՛G†öŹŹ%7ü‚#m¤·Ö­¤“0rgi7†|P<1oŖXG$sFŖóĀd,0HÉ9=k‡Ōõł“D·»ŹĀóźżu™qs˜ń‹Æ ŅN¬ķ-Ņ ÆÉü&„šN“śÅŅ2ė™ˆČĄ ķÉōÅ"¹Qö—ĀƆ¾½Ó.5{j)ļŽ&še‘€‘ž&ŗ+赑įżVīĻPTŅa'ķ–ōćæ’^“‰œ |#ńĻXńķ‹xjńn5É+ū²€{÷ÆŖ~ü]Ó¼ąóįŸų;ČÕ¼Ö?lą0=‰ōā˜F™ÖxĄųā?Ćm~;Ma"ŌŌHš"Ģ71ß½~]x³ĮSŁķcV„iŻČ  “¬x¾­²9$A F“žk”ƒd2±Œm78ī}kJe^~Ī>?k fėĀ·R-µ¤Ŗ«Ł‘¼sŒž5śit YÉqŒńW-…af8 $Ė?׌×Ėß>ĻŖŪæ4tk{˜£õXóĮ$ī\zb°ĒSā˜ī)ͱmšū޵ōßģŁćč4Ļk>ń ą’„j’gŲ”?v9F3ō ė‚=šOˆŸ?eŽžų„į ‰-›OŌįĢ$ŖĻoĘå'ø"æ¹ß„ģ~7|&šĘM īÖ÷NÖl¢ä…²¢M£+łƒł‰k¦ ©ģžńT¾Õ?·­É…Š~ńGńØķü’:śOHń_†>'hpxŸ@†Sfū‘ŻŠ©?B sŹĆ”Oˆą ß²†æmOŁkĒõŃ`ų‹c Ō¼#zƒu­Ō2„|d“©#$+ƒŒWłóxĒĮsh’ˆü'āķ;PšēŠt›¹tżNÖS»ŹøŒ•;OpJžµęēk§õÓń9ębx į³ųž{ßųžiś\Q£*$¼nHžX®#RŠļō›ĖĖ;äo6,żŅ’§å]Ē4»øæüQ¤ü,šĒ-GHM{įżåŃ]KÉ,$“@åNńŲeHĻÓŌWūC|%šŸīP®:&+@ź‚>;żŠmo~Ä_µO„¾6Yj7ēĮ÷7«cāXe•„–r°ÜĶčĄ€ąśÖæŅWᒌ4/ˆŸ|7ć/ ]ŚėÕģāŌtŪØ_zņć¶O#ŲŃ ŃüæßiZ¦}{£ėVĻm©ŁI䬄į°:®+6äym•¾¾•ŻN]j‹”•!wĪzw¦4%ńžžÕ”ĪWš\8ē8^X‘eFŒģ^üõŖR° Öņm,ŖJn“…ÕĻ'MĖ Ē!O~&eüͧūµō˜^}šāŹā° 2•Œ”$uÅ[šAŪJļāOĆ}KöLų¬Z¾½”Ä&šäó\vž‘Ž=x'҆®¬wÓŲžŖ¼ā+hŚWŒm 6ŗ„ń.ÕbÉe8ÜGæ<Ÿė^Ū,0^[ØŪ• t®*‘(šŁ˜ WūĖņŸzžS’ą·ß°ĘØ’ĀAćčPپ§Dø¶`žN§ü|Ūķé¶@C€8łĻ„r‹•Ēķį{{‰,frn°u+‚¬ŲƒŚŖŲŻ<,[#vzgµ9¤;ŒšŅKn¶īDŠH9ī×[ Ćk$Kuoqóķ;vōÆ6¼NŚ2>‰š^«„xßĆZ‡‚µ‰¦¬TyL©Č<Œ_9x£ĀZօy¦ėvļnöE+®Ń7^ƒš¬i«3ÓK æę—Ćæt›é­šźÅ¢hv†Ęę' Wė֕%­ęļµĒ2Mž7Žsčkڦīt4§h‘£‰ņŁ8Įō¬©,÷H “śšģ<ɓĒĘ mknĶQ;Ēź¢‚ ĻkÉ!9ÓķµtõxŲ¹ÉĒƒXÆį+‹gżK•‚äćj·ńV?ˆ¼?™tū v-ž™šf‡1}„$ÖÆ$jŠĮsÖø%™d,NxĻjB5l.ŃœŚŽF6666kŅķ“bŃ)ł#Šę×R½…ĀA{ Lļ“€Źq­Xń ’ųzEŗ“š;Ø„šÜmĻ4ģYlx5^Å„ÜF—ŪIU?Ā@®/ūwSøš’öf§2ŹĄn tnų§(Ų æJŗT§É [s`cq÷ÆY¼ńfœ¶‹f’vaóom>޵ q1j0É>6ģf=ϵ5{s ū#Œ3“@ĢÉõ}NuµŲŸ Ąążk™{§¹IKvŠ@p@éŸj ҶƒaÓB²»üÕ͈dhˆÜOw«ę¦šōMsŁĢvȧ Łķ]-ʝ ¢ķ%nēÜŅ“øč×:„†­ ¶nŽ3ūĶĆ /Ņ»™üE×Ȳ’Į5<]ā‡Ņ¼AńŹćžŻ-fIŽ–?×O Ēšź+öæį×ĀæųEO x7Úo…ōO-|ØĄyWż¦ž”Ģ[=cGŠŽÅZŅŃVLqøv®¦ŽŚFRnŪĢoéA„ä_Ž$\… —*(9›!yg-Y÷—ĀŚ##"ŸZ „nyę³āx”ŠCh£żćھ{ńļÅ]Ā–ņŽj÷?0\qéI3Š„Lüpż°æą >šn™qa7‰ü‹Ü ņŲ€xģ+łšųļū\|OųŃ-ķ¬ŗˆŅōi3HöŹTuóėœ ķĆQ¾¬źŲł6{·RJždŒē,ē$žuPĶ#nhČĻ\ö©Óå8źŌ `_’@üzŌ°¦\ŖąØą“NR8§#B•7 l#Ó„O%²7r9mNŚya’t“k2ń‘Z33ŻH §sf€7ć6ņX½²¼I2'‡Ž®SOV±½‘®ćėƒÅŃ©qØiĘ2<Ų ą7Ōuƒ¼āX’9¹ąƒÅ;ņ²ī„½]!ņB°éļT.,ēM¬Wjœu¤"(ņdBņßtzV°“•ŃåĘ@ō ¶ś„ĮCg#ŒŽEbjÖ²Oo!ēć= DĶŃóźxæW±¼Ō4˜…½«øĘąy’õVkčsµ×Ś­€(Ē-õ¬Ė‹ŌČń­Õ¤Ag·a»©"¼#]Ńä’fø‹äcź)˜—mźŚø(ū0AĒØÆ™> ųVÖö ø n8bp+īt#ņ§āʃ¬xOÄæl²H…œŒ‘†ˆt9źGLW[įżsPxćuc+ĖᮺŽĒTgžä®UĖIµ¬.×*ķ“g5äÖ;éÄķ­­£¦\Ik©Z„ĘīÜņŲī*;»/ļ/téµ#O˜Ę +ļ^|›;©@ķ¼88ZźÉäPÄ·'¦{Rźyŗ…„̶q5ĀČ 0ä·Rkjmޤl}§g¤Z^xnŅŲj0ļņ÷ŗ`‚­Ž€ÖWŲo­téi#ŗ‰OŹGP=ėŌ¦yՑ»ci`¼cƱ§ē#Z-¾1Ē_å]š¦qićõ]-äø±£ČÜ<T<'ćĶjä,7ņDŅ«ü  žuæ²V6Œ‘ÖM%ńkKÄqœJź=«äŸčI£j·V (·ÜĻć5ĶR‘\Żń”qXÜ]éó#:‘x,{ŒWŠY_ėwzóŪX•’Eį¢)ĻåJœAž§ß9Śß$–÷ N9⾬ż—~,]xÄ>žõbŠ/$ å§ŻŻž:ńž3]ōĪil~²hŽ1Ó„xćžX匌+ŽžÕŚÉ’)ł‡½jrTGoį3 wQö:Õ6WfR Bč}{VÖw³Ļ`Ķså¹ĮjvŁē~,Šļ<3t±¢ĶdŅK”ł_9ż8®ßĀ+$Ö-żÆinņdģdĪH­n·ĖÓŚYŪÜę˜dä«•£„ģ·•žXA·<īۜT;tµ~”āó- OĻCÜV-¦£\,3FčĄć§éS`¹æ7–‰•Ū“óŅøk™`¹¼eq󎔀ĶÕćҤ¶’\˜&q…B>÷ć_/xŸOk;ŁžŲ»üųąēp  ˜¤•nQ~aŒÕY÷¼­;lĒ)é@ĒGjņ3Il|åĘx<ŠdŅĪŖRHåsڳ”ŗĆŌ'Ęéwd—GĄćšĄŠu+(u3¦Ė ֗Äåcd<ūƒŅ³.(õė=ZėJŗ·‚ī;ˆ-ä\‡(võõķ^łįĘO²£F!ē ꮉܟ6H]XķX»xŸaX7ĄoC[ĘV$· ]ł@“ŗ <×XĀ€~šō¦ęĀĒEm}5šŖ[.W¦\Tšļ…ō?Ų½¦¾³½“ƒkl<֑•Ė‹HšMWą×…ü7ö™4{‹Ø£#zX±cčrN;×…ź¶–ŗćŁk–0Ü[!t’ėŅq[³Nd2[]X.ĀéQOoE»Ł*l“ČÖ²3•ŗšt0Ok[ˆåõĮļY”ŗ²f™¢h£‘¬źrfš¶ÕxČ9' R•EE– “×t5…¾ŠĮfV¾ćÖ·­l!k|FFĮĪ   ŪĻčח¶3ĪBĶ‚m5Õ¶›¶ųmäyTާø KR³†ÅŚw—ÆéT­uuG¬Ä«pFh*.Ęģ”®AhŠŖ‘­k.«hé@›'»½’śÕPĆmŹØż}k’[„ćtåXņjgks¬Qī]‚*®Ÿco.HMŪŽrO"€=k¾}FĄķ.ćĶm]|?¹²rҹŒ‘Ē_Ę“ŒS@yę³s>›tŃĖ6Į°9«¶÷vZ…ŗMc:ȧ‚AĪŅ;Ń#)G©cū^źĀ1b[vH=*¦£s4° –MÜžtc?MÖ×{ˆĮ(nÖ“ŗąlÕRU÷ q3ožēSo“ ¤Ź pk»r³(š3r¹łČź(¹nĖIm,Xį_•zW!sØåžŁŽHĘÕēTJD8–ģā pN’.1œõ÷¬żKKµŲä8Ļ^sĶdks‘Ųż£÷l»Šdza± –ņ4ā#ČĒo­„Š– „²‡Źkh]°B1ĻÖ°RB×N “l}:RøœNĖLµ••[Ķ|Łć5ŻEc;ņ€‘{śž¹‘‰Ņ’gjYh*ś÷®T°rö6ńÕ=*ŃV¶‡-Ā:¢4?e~œõĶušEķ¤āGh’EźkNm Qīek×W÷ pžD‘xę²¢Mm¶0‹“Įb„͇/CZ+L`-&öl„znį9’Å «=XēŽjAR8ßC-ˆšŽEÉNO¹Æ"‡UžŁÖ¤Óā[XćŚw‚N~ļč?:9Šögm<3Ś k™Ö`zœŌ0ŻŻ4‚XdX­ći ēÖ±”„”Ü«w-īö{Vpp¬Ū+›ŅL—–`FGo ØQÕ¬£R€E*n€ŪĒńW«ŚĶ`ęāv—ĖˆsWŌŠŠ¶±·Ö#mIJ69ś×°xV(“F†{„dł†ć¼k¦šŅüEā k;,syš˜"6ä.;Šł®FŽRhāS€Äuź+C:†üzœžDŽ€ļé\ˆ¤QrĘ«q‚zÖ2ŒfĶ=ŁßCs>ҧ’k¼OiŅZČqp×åČ"šFIŲęnmu "Coöd–Ģ&CĪ}1Ņ–Ēū5µ÷$‹pŖ6äü ūv­@ōȵK_²ł,ˆ²…8ė\v„2\‘õ4œ¬oŌž[µ]Lń&±ęiV°ŪŻ£•‹s|±ūp÷æ‡1ü3{ k}–”eŻ(Ł€\ޜō•M,x¾Ōšæč“iž(æŃōż>7°æ²Īѐz}kŌ|Ką©ąXžŹ²é÷ČŖū¢łK€>ėćšÓœøÉ½O5ŸÅ:øŃ¦ÓÆee¬7džµ5%±·½v½ņęmĄÄē™ Ļ#łÕšøžæąĖ„–Yluū€ė"Č”Ō`EĮŚ1Ļzīü;į§Oj–VŠC}(‹ĖŠW“#wvōŸųź?ųSIJYkFyšGŪ EaMŲąVļ5+ķ/X‹]Ļ5Å“€†bHŒ{zPt«S_|b±ńĪk}imŖBąĒ1‘ %±Œ®}?­x[če|­WIGµ É'OJ˜Į+Ū©:—Ćæź=üpkAįłĀ«»­Ī21ėé_ni>-ÓŁ¤K+¹Ränj©ąŸQVsĶks䒌:Œó,Œe]ķ(q€}ūכ|8ÕüC©„‰ ÷šYø+(ó0Bpy”®JџZ|eš/ĆMOƱĻć tKćf©F L‡īcÓ·JųæįÄ·^ ń$ńĖp°éĢčۘžī5 óŠV4¹¹š–ĘŹLżuų5sąŸi–µ¤^iŚV±F[ˆ`L  2śż+‹ńŌ–¾!–k?µ[¬%JaĒ׊¹Rfr“?:ŸM»Ņ>"ÜYj–ŅM¢9vB˜5ÅÖzv¹u“ FóJ™iRG꿀ąŅåč-JšF˜mõ kH\G(É'€=’*ō?‰>Ó¼YąČ,t}Oģ:„+B9iĻ Ļ„kĢiy”©xĀ¾’Ķ...nbF'?ųƗÓŠ›72œuĻcMź„{/ÅvÕÆō™Ć:‘³”œćsŗį#·jüūÖü%wÆkw1x§Lšk„ŚĖtА²zsź1Xģõ&2;ßč~†m/Ze„øŪe7 €ķYšß†4xzņóĆ·Ėõ¹2Ū¬€”'ŗ;’,U©#E#AŃ/>+x:{]_R[]FĀUŽ(ŃĘf#§æ§¼’įž†Žńeī•§3]Į?ś;Ė'“ĻAéLn}°G‹¼ ­ßŲéŽ1¼±ÓmĪlŅqĻÖ¾»ųuyšŸį÷ýE¼!ć I„-%ŞÜš9ėA<§æž[iZæ‡üI­õœÉ“G€ūÉź=8ÆĪßźŽ¶ńm“č×+‰=ŁY7ō‹:qŪ­+kr­f}²¾3šn·šÖNM&}bŁLr2°GuĒßõ5ńm·‡µßųŹĀćM’{"āhć¹ßr¢ŌgėAē®|@ųw„jZ܁a_³yŠ?}óĒń W1£xcFšģ÷G™łæ>jyɹĘėqŻé~%½—D¼0éņ®uĮ®»įļ‡ąŌ/nļ®Ér&üž™üŖŒFųćĆĮßm\[>zņłķOžµy¼K.Æķm w‰ö¶ī1ō…c“šņ<(o¢h•ņ+äg‚1ųt­8n.-ĻB¾FŃĘOØ«ŒŪKżj]RG» –2Æø–Ļ„R×~.7‡u k OūCģ ąq”ÅW"-Dż<żž<§I”č~ »¼Ž÷M¾UņŪ2F ĻĢnk°ųßįĻ źwńĒZĖ,8Ać“ŌóÅa$Č?6<[į/ÅńÄŚ\K¤x…eŻß .OĖĮ«/ć7Įė¾*Ó'ÕīüébAµĒܝqKzW—3Į%š~±…̱)˜ÄX2Ä2;‘^rś¾µ£ĄĘ9„·[€P#9­ĶlEį‡~)ń~½śtń¼Ą ŹÄį†yP=M}x?gŻhśÖ™gŌmķÉdułĘ{Ōō­]“öUų„¤išüß õ]JM3Ävó²"H>ł§śućĖHµ-]wWŗƒIŗHr„”)ƽLåq3ņoĆŗ%‹>%^h·Ė$fvmć\nĻżõĶ}7ń+ąMʏ} XxjęÓEÖn0c»ž0pr½‰#R™™ń³Ē?ģ|3”xßM¶·ńZ/ŁVhį%F #ś×Źś•ž›§ų—Ć~&¶ŗ…“›ł+»fp<†Ī7}E2”ĻÖ†šŸ‚Ī—0–)ģ5ĮĄŚ dćš®'öųu}ÆxöćJšMÜļ Č©$r¼8UÜ9_~xü3YĢrĻ¾x> xēRš‰“Čg“’Ó1ŚD¹čםtŸLc~µņĘ ėūIF—feÓˉ76sĪGēH“ēmjśh–{A#Gµ~ćg j„ž ‹Ių… & ļ™q'—~Ūš‚?āĄõ9­b„ä~”ųƒąéžŌ>!ü)ń ĶęŸ ,ÓiÆ7;9Ś;W–ŽOoć±Óüā6ūMŌKØ[7FPæZĶö‘Źé’~(x3ĘzuŽÆ'‘§H¦d‘ŌÜżß­zOÅ认²Ņīe[6¹(c•T…dpvžU<Åł~%Š ¼” ^BĘBTķĀ^C'…lõ‰Ņ@¬Ģ'‡9!¾Ÿ0gĻŗķœZƒM=°%FryŽv¶<£®Fjiؘģ\Ń5-GGÕ"Õt’žrüžIČćņś»š·Ē¶>7šf—¬!Ž+ଠXØ$~kMŃG±Åmk5«I+“)8 Ū5›$n`¼²’¹‚hšQєö¬ŒyĢæŒī¾x‘eˆ¢ųzņVk6Ž¢õFōÆ-Ó®fMB;»Łwo(’2O…e)v?Hīļ ųÅšSI½ÓĖ®µiŪKĪą¹>™āæc?ąƒŸµ īƒuā’Ų§āuä[ IØxViIŚ Œ².NF$ž×­M·Gm%„čW^¹ŸOšm5įt¼S¶EīµõßģüÖVƒĀź@<“)b2Krk’{—4?ā€ī|[į}ZÓLøm?Ä6źnlnįµ}ČÆįŸž —šGQšŸÄćńn;GžŹńņǬ4q|¶w‘1łŸÓu8K”Ļ(Üü\XjÖ÷r§C•<0ķZz”æŚĮtó*LĻ…åÅuĘW9åŗš_ķń῀|WšŗÖk_ųVY#ū śļAĮÜa=¹$ąēžzׅj+wgmlXD‘dDƒ¢Õ+\Ļ’Ē}lęFˆƒr8?­zĄ’‹š÷ģåń›Ą’“:śŚĘąCŖŁqwf’,ƒźäz*ŌŗĒĢžŠük›Aż¤~ ųIŸąēˆ`ƒT–ÖŻUé!˜u”ōlƒŽ3sćoüJóį÷ƒŪĮtXSėq²_Ūy›`“ŸoB:täSŁŃ ßæhĻüGs㋾;ÕüQxóŽÖyŚHa\}ÅŒWÉ¬ÜÜ>ߔ*pķW­ćPFū£–śœF{VRÆāæ®’ų6ūö÷ńwŒ<®žÅ’Æģ®u @·™¦ -õ†ņ<² É(H£Ņ”££E¹ŸÕōŻ47J› įĘ9±/¬āQ4,””•qÓ¦kŹŖŒ¤Ļ‰>>|3Õµ;aćiækń>‹ó]@˜G»³ž ń>½½ėäßų[Ć/Óµ ¢?Fń%·Ś4’0ī[+Ą3°žŪŽANEsÅŁ™ČžC?n€š§ĆO‰—Ž$ÓōąžuĆ[jŖO0ķČ _^ƒĄEū§ŒŽüWm&sUf4ń•wŚUøéQĒ3Āŗ¶įé]'$ˆ$‰;\Ó ~aabL`|ǵSE!K:ˆĒg„G"²€įóļ֐ ”…2‚=Ŗx÷yƒw¹¤\BŌkƜē×°|ų欞Ļ_~ü^š¼×v·ŗmōfäBĮx™€`޼fƒ¾”ō0ż’hļ ųŻ|3ćm\ŽūĄ/‚(®`ąY^÷‰č 'ü=kõDYōşK»Čb$ÄĒų—µrŌGBˆj> ¶±‚;Ż»ķ·łr‘Õ=Ķ|ńūF|ŅhŸ…~1ųQ«"=Äš’hč7™ŚÖ×h ]­Ū9*}™³šāŗē{ūxžĶŗļģńń¦žX”ž? ź7“FѼD=•ź’²Fżł šųvļżŠ8mÄću1øŲžŚįdóm½N:“[ŗf±sc%·Łįł†p?cRM7©ōׇ–Fūˆōų’G(lcīł?­} ć /Ć_| š^£n¶¢ ’+Ęl»JĄ>€šņ„>Wdwsõ>.§įMjÖīŽó7Ö7B]źs¹Aä}+õcĀ:ēö¾•¢ŽČeóe·;?ńœœŸŅ½¬5Dć”Į‰Ōō+ķ˜ąĄ«q°ƒ V§Ūļ]ŃŲņj"v‰äQ"€Ąń:Ó¢d@Č@ėÉ5Fe輆V*™Į¬ŪŻ6RĶrÄm Ö™ŸaØÉa{‘ WęĮ#Ņ»{»ū‹ØŚBĢšŅƒUŲ́‰p®’)ćŚ²µ} ŪÜ3ğ)¾“\¶²¶šÜ !Ē śWC§ŽŚŚĮ-…Źį”OLŠ`ĢV¹ŒÜżžU[8#µjK¤µż‰µšI%¶Ūµ[w#ń¦8ŹĘfį«ż"źCpD0żčŲńø{Ó5É¢ČĀķ|ą‘ŠŃsc„’į÷ÉäæČxéSF÷Y@ŽŲļĘsHÓDG¹uY-Ć =ĒŻ5×\Åöc’}EUv±0 ƒĢ^HĻQYn˜QćvQĘO=3A“v3ķ-‹‘Čv稩RK „wī8ńA›‘¢Ŗ³FFžö1ƒJŗĢqFĻ3fCŒc­¹© \By’HŽr¶8"­jLm2N„Ą#ęÅ[Dµ>ę芼+h™Ł†ŠIĮė\ꔩÜö}{ÖL9ūéśÄjń¤˜PĢOÜ\éqź«" p8ėHØČåoōs,®qēt®5¤žŁ‘"…VąƒAA.»ö¤e1˜®3ž+>V”põśšŠ IÄB2ł8®Łt1$K*ƼPmS[KK)Ȓ?Žc³o™REĒoJŽBÉÓ_»ŅŃY|ljøĄ Öu“Ó^] ab¹bNi7m€öMM¶{7 LG~¹®_P»‚Śy-Y/j†ÄWŅ<½BżmßbAКīo4[+U nT*Œd÷¤os ŪQHf©ł³ėV®¬#øtøgąąÖjZƒ] wk#Ų‹cģ'ƒŠĶŃ|©ės}—NbˁŌóŠfš—qŲōķOĮGĆĻ ½ōrC*‘ŒsŠĘÕļŒIp8«L9õī i.$V™8ĮŖ2ėl¶„`™6gk.iŲ ŗWn,'·¶»W6Œpė^·c©éͦ³žĆ,C©Łź·ŒÖä£łqšf»%½²n„=« 9»Ė»`C+y°’ÖgŚģZTm›zšÖƒŹeb Ż=j,ē!"€ DUÉąœÕ)"e9ĢĒҚó U‘Kņ cÖ°”½Ė9ed ķǦ+p,,{0;Ž~µaQŚ@Ąw   –';¶½+(¦Pļ4¤xš% ͆ļWg¹ŽÜüÅgn©“Šiœ„ēK(Ę]ėW­­ī¼²_/x# ¬†z‚mŠź!ī1Īzž© Śź{”ž%CēYOsDāp2Įoỳ #KŒÆŹ~÷½r:õ弙eŠ W•šĶōź£6¤>~Ⱦ:Ogy~—^šd’×Ó!Ż,Yēhõ5ż|ż”~üŅ­ÓĄŚ3źšÓF}RńC6š9dqßéTa)t>”–; 2Ų%ōæn¼2rßJ’ĀĘ÷V"I¶µĻ”"ƒ K”×Łé¶ŗzn„7rOZŠYƒ“‚h9ęJØ„¶Øõ®Z’YŸqKl"Žēø Q‡sœ—Å0Z»(Ä×^õē¾*ń宙`uZö+[2åH2ƒōĶ'Ųķ„HüŪż¢?mæųIŌŲjzU’µŽP„¹ģ}kłāż¤ą¤^7ų‡u©č_§’ĪÅ’w.¦ēęS耶Vō)\īŒRŲü¹Öu}OW½:޵ŖŽjڃę\\HY¤$ūōü+/ĻWgĘź÷(ĀČʬ­”«6cļĒJ‹h.x8tė[Ng›9“[@™ÉēZ6¶ĪT€cźsX6s¹PŚn}Š„”tõ®ŠĒK‰æ}3 yŪ€) ś‹ą?ģ™ńoöń@šĻĀŻęœŖĶØI dE?Ä? žŖcų#ēĄO€COńÆÄ:ĻāgÄĢFļ%҇ŽŅ@v©éĻjĘ„Nˆµ+±¶Śm­„¼6vöšYŁG T@µQ*årīHś+31‘ŠRŌ²R°k:óP·“å–E{Ö}NštĻńÄV·Žā(y‹8Ļq_"|Wųżįßéę’RÕ łŻāHųéXnĻJœO̟‰Ÿµ7ŠüP÷vžˆhZkI#9.éźük囻ŻSX§¾¾»½“'1Ės×šŚ3iKA±Ų’!‘V¢­±žuŃc»ši,S(ĘōÅ_ŅōmCR˜Gn„Óv cķXÉźIėŗƉ#a-ŲVnćŌ×µh>“6īČNų©.‡æxwĆ6–«¬w¶:}jķž˜×JŃ$HéĻŹG‹Ź©ęZ‚“Ūmb]B6÷bL° Šõ×¹ŽÖÕRL·ČļSȈu)Ūi–·8øRYzõ­#¶³@0®½żED£b\ŹĆS†$xĄG„ž•4SYLR¤téZGc3šĪ©Ūź#jq§’v«żå9õōÆHū¶Dމ)9Č皔wr\ßE¾¤ŃČŹ6¬€sJāļ’f{U ©=i #Č4 :Ī‚UÉO'óƜ~3ėæ4˽.ćĄzgŚ>aē‰TŒ|śŠk™į}OW¼±“øŌ­žĶzŹ ÆūX®ĶēbV]ø óŽō K%ń`k@ w«q[›¼…}¹ŪA‰£įKĶ:ā+øŒŖĆ;{YŽ{Ÿ Iö& < J®IČNÚ`z„:‹­Ż˜ņ›Óҳ.ļó‹ČėŌHĪhäŸĆęWKč.gŽlœĒ»å­›īķ÷C¼²ž—ŅĪ É()ßpź+:ęā"%ˆ2:¼ ĘE ĒcąüDÕ<9ń:ßLū Ka+&Eūü’õķ¶ž9±KyŚĢÅ c*Üążir£ušÕµ_·Jd™ĖŚuĮ9Å-΃„ŽiāöŁć‘HĪŚžTŠźõåZķ¢j>"µŌl$’—ŒŒU\B¾+©čÉg©FgDū„ŗ©ö5—r–°$#^Ś›‘RÓBżÅÕ¤Å|ĘėĄaėZ1^K ŚHŅX@į‡o­#);¬‚a“»šŠŗ›NŽŚJ óėĶjćs"¬RI2…“ ī e]XĒ ÉeÆ\õ¬åv9?ésµ©½µž1ņWw"¼{R»Fuą…ę^¹ĒJ“sžÕ½Õ»H®üuZćķI’v“Ś6·$ā€6ķ-›J£:*1Ż’qTM>Ōl’0Ļ‚£øėX5aż½µÜĶ øb9<抦žX­ć1­É‰Ųćš@A¦ŪÜȱ¤ģ“ä 1Ÿzļōķ6čs,rˆ 9éNĄaėB<č„aב‚:W”\hrMt«°@Ł_b‹éZ~ƒ}µ¼Ū Vł©.ģ¤Ó”Ćū¶8?Z@T’śī(ɶi‰É¦=+2;ūK„ŽIQ”“ū§‚)I;Ę唶30p¤‰¹ak¢—CÓm灭Y!Œą]Ķl‘ļ~²·‚Õä‰ŌČ1Į®³Qī­„ŽB¬ ā·ŽĘGÉ^=±†/¶Bņ4-‚{é^)į ?įŗkø`ņHd*NC{’*”ö„ö’å]KwąÓžŲŚ¬s³c±ō¤Ż¢…ŗĻ$Ķhģüóģjäјcu9Ī+9IŠ*Ś Ū `cxüƒŠɬ{†ž[‰H€ķϦ*gI«Mc:ÅöbčW;CųQ'Ų¦‘%x”Č܌ކ€±Öi:$Z¶Ņ;Æ@9ĒjŹ»ŃTLŃ?īŪ'8ė@ö<6бI_ØV\–°¦wås׎VƒJft–ß8•’[|øę—¢Ä }:Y'Æļ7®ŸAĶ`Ł©§a§»@Ū%)ۊīt–žĶ"As*@L Ņ3œNŹēÅoc%­ń%T%JŽõäz†²"žį$$ĘH9ĒjčJÄģrSŁ_>ݘppqߎ”HĢ”¢PžQļ@¹+M"ÜA$B7U=rŁęžšm½¬lw!]Aä Š.c.F€HfŽ6Ų\v®ćNÖg·²hc”ł\6ÓÓ42ć>ē'ŖN—Æ;Jč śŅ¼bēĄ°ėć_²fK§eBž]+73CŃ4ų'¹Ł ŌćéøŽV×,¢µ^)Fy 8˜3O ŚÉ"ĻąyŖZ}Ą‘1"»»1 A…ĪHšŚÅŽI‹Æk;RæŠ{ĆŁ%šŻP+hlm±×xsHū<¦{d»G޵źķ¦=Ō«÷cŒ s]1Ų8[ŻI¤ŗEö¼,¼føKōņgó‘¹^ć½3)35ÆZėµsœc, ĪńĪ»æ»ŽÕŒž¦r] [4lö²4,Ī3ŽžÕī¾ńWmŸwdĪŃ®ę’"11¼K}u$ÄŪĆäĘAąs\mÜÖó©xU›©ę·ޤ^=Ś®Oʧ ¬ĶF;Ł#+•łĪŠy5‹L®dĄ7š¾™įżRęź7xYƒTągŽi­ć- õmä\E;ŪŚzv®Ŗrlņ)„#Ėõy_Ćŗ¼šūDB_ßŪ“œ=į^ĖšK⇆¼{Æ[č~'–Ž UdZ|©ltėļœWu8 ŸcĶ’hÆ[hWŠ’aiŅA„›ŸŽJx°}łÅ|¹§­żåÓ)˜Į+gˆŪœÅlRZj{”Sėiāą2¬‘‰īčGQ^Õąo½Ŗ=”›+7ŹęS€Fr0Š5ž)ź^ Õō¾×s§vq~ņć©ojłOÕōkZXŻ^4÷` 'cÆćHŅњG¬mmu@j(ÖJ7ÆĢ0ügƒļ^ awØIā=BŹ#< 2››‚Ēų@ō jg;曝^K½=ā&·uč1ĻóÆŖ>üVšŪé:凊ę=kĖ lvń#ąēö’ åecμC£IŖk—K5ÄņŹI~ąTĄŌč“Į-‚čŽ †`Ė"²ų„L¶%ċā^»tŽ·Óousö;i#v(ŁyJž2}8¬ķ_Fѹ©ip\vń¼ƒyē×ų>=L𩱶”ŗ29cŒOµg(ŲQę>1Z .ķ¬čĆå=ƼźļYŌcH/į¼x-Šī+Ųżk9-I™z‡ˆWY…OŚń°!†xb{Ö~½ łm¬šŪĘńł@®ÓדśŅSčtBG5¤_G ͳ]Ād“Y‘Y98Ėœ}kļØ<-į»8¬u;M6(/B,”ś•AĘiĶ•&%·ˆõ+Ż^åm„K‹T0£ęWJĀųā=SÄ:Lɧ¤ś²H›@ÜŖ0OÖ°–ä3ę+„Õ5ė[xµHĪ‹©Œp9õ®æĄµ¾‹ā m &{f™ĘÖ# »ŌžÕq‹5—‘õļƒ~iÖ÷ė~¶ˆgyLÓĒh¼·ūE‡‡qį/jž0m>āi,üߕ[;‹8?ĪÆ]‘Œ¦Ļš’ioƒ0ų^Ž]oG‘ēŃög÷ Wäąz+äé ÖoYtæźdÓBŖ6Āž^™¦„ÜŽ5{ŸL_|ÖüGįU–žītÕķ2ĢFĀļčMx½æĆ[jŲų–->(X•XI!†{ē½>d9VL÷Ż'᩹Ӥ—B¹xo’"źGVQŲœēš®óڕ½”FŌ-m“Xfž#¹˜Ćņ„ĶŲä•CŁ5«ķ6Ž )5½.K‰B¢mB$``šņü?[]7Pń<7ŗŒq[¾õXĘ|óżßžµG#esšų¤čŚ—‹¼7y«[&ź]›ę?źĘ;ÆįŚæRuļŁ‹ĆZg“ßųgLm>ęįG™¶,%ĄÊRVW7‹Šüļż£~ėŠ"×$Ś‹‰CGƒœ…<ƒś×š‰žŚE%Ÿ‹&IJ.åfl2ąsŸŅ¦2½ķŠ™y^*Óü1äÖ^š-šBĮ£n 'ƒŚ‹½ī$²Ģ„Č€:÷$Ō~uŗÕf[Ō*ÜÅąo ]čWsxsT°V·•qņø2ž}ż+“ń׌¾(xæÅź>ÕÖöäˆĖė.[ę#Ż©Éźh©ōg©|MŠl_ʵL“¾ż‹5\É{ j·†MrDߏ7ĒøļĒjś#ā‡µŸx†ĪÓĀw62Kl¦Y eKź?U4dāļc[Ä?³ƒ`ŸĆŸ“žm‘ØOn·7¢GĮ‘†dšµĀ|`ż”õ‹żĻĀö·vŅY2čwy uõč(ņ4‰į¶:ž™įƒoā; āŠ8¹ !™±Š×ÕĻńÄ“’,|9§Ścxć@u¼Ž\mšQŗO~?­&S‚ÜłļÅQxā^© ńŌi<¶ePļL°)Į9ō©ž6üšfµą]/ÅŌV-JŚ–jJł­ŽN|óI²Õ;ėū6kž)×ü7„ųWĘźģÖ0ƒ®ü²Ó?€Æ»µļˆƒō- ū]²–ęÖ& ĪØ ž„ĻaQ2d‘¾;Éį?kšgˆü⠈%•…Ä.³)ÜżŌćµxĘmPųZĒFÕµ‡sy2ŁĪrOöÅgŹś’z|žŃ|šėĆ’/Lg¹@Ņ4_7=¾QĻ>µÓųsŶA„xĶ>Ģś9o;рēv­ćŲŃHöŻCǶ’mć“F„AdX:ď¹IĒQY¾ń¼Öuq}¦Śłd$HfQłĪG¾)„„Šč¼S©Ēā+“©X[­¼Rs¶>@ƛ¾#Ē5™ę…|‰Vb{ž4³ęļéŗ5ö—†!oØĮœ‡NŲ­/…?ü9«ųĒƶśŚŻ˜–ä3I†=OLV‘fwŌżjÓ“k/ Ū6Īę+½;nĀžü}0GŅæ(üS=×ĮŸŽ0źBŅXō÷»7 u<£Ž„ļqAj~Ÿx›ā_‡üš®ŹļH½’‰øł¢Ó•y$õĪqłWĮzō÷:“’ŚW~L„|²uŒOj…E[A—št:ݵ½”mžUHG½rśµKÄ'ĄŗõŒ–zuÄ»ķde;$Ąlž==©ŽĒńƒą­æĆ J 7O’ ›Y!.|·-ŗCƒ€{÷Ə†šµć’x‡Į3ńw€<_¤Ķ”xÓĆ÷²iŚ„Œœ“NŒ@`{«{ל2¾ę«qŒš+²œŗ™Os]®žZDÜ@Ēnk"ļ÷„8łH­Ģe+S,ßgv1‘ŌĄ»\£=Įō­`gM |Gų™įO jŽš’Äoéž½2M4Ź^Ļ}ŠN éé\|qG GxÕēX|ķīMX*†šČ\n.B’w°§ĄĒß;±łŌÉŲŅ5/ī*„äü«Ö¾|~ńgģŸńóįķąÕ[_@Ō“ūJÕK)¾ÓŪå•2)>½k6Ķc3ż9>|ZšĻĒļ…ųĻąMEu/ ų‹O†žHß ²ČĄƒž£±Čķ^„ŖłĻk…]“®OJä«pž#¶˜ŲÅŖ[FTŹL§£” ū‘_”śö…uaćOų*ņ-o>Ń%žŒŹ~Y²w”<ZįhgęēķÕū=Gń[ĄzŸÄ»{x’“ēĆ\żK€@—§õéœ×ņ¹ćO k^ ń«į­rō‹iŠ[Ź81v`?餭”…S‘–e9p×§Z”–\²O­w#”d²wīńÓÖŖ·!q@‘—jį@ĘGzT;€óź;PŸĢxæˆ9¦$¹—?!ķž” ¹·ĖPAb:żkF8"¼…ą›ęĆ`ō ė¤õ?¤æų7’ö–ѵĻųĆö1ų©©KżŸ~{įŁ®Ļm:Ļ&ć‘ĆĄHļ_Ł”SėÖÓ/!¾‹SæŅm®¢só²)ĮÉõ÷öÅaV'zž‡¤$vš­”Ł żŠņ<ōČ•įݶ÷h·sgS²lĘOWŒōĒį\Z‰½n=Ÿš]?ŲĀÓÄÖž5ųcC湓æxßVqū ōkņÜą<ÅP÷*sןāƒSTó$‹i”ĀLEÜ`»Ž¼RĶ“°Äc1®Éw|Ąw©žŠ‘MI6«@>µœö*=»Į>$›KŠ8¢‘Ņ2Ąž ĻZś{LńLJ5żņĪīH-ucĄp]½MyµiŻÜźē>yÕōŲ®šåŒį$Rz¾?żUõģēā–Õü:Ś>«sq-ö—!„düĘ,ä~?3]xDö2ŖĻ°læ}Åpr ėZÅęļU°ėS8$iErö±˜\)õ +>h‘÷Ķ ½+CKV’”ōčÖ°­’pükvχ†;ŲČ ÷iÓ]ĒhĄĘS÷l8#Ҽ“Ä~–7vĢÆlź~“€ä<ŌfVŽ6gRČ>õėZ¤‚Ł"ŗbÆÜśPŪÉm„‚X—lŠĄŒāø+R/ݳcŠŠm ŽņŁķ„$€žµ$“\«ǧZ 'Ž5‰į–1¹wóq]鼂ÖÓ…Fä#īš ‹1®¦†éŁ‹bB{×' \0÷ćÜPlt:Lpj›yWä$Ņ½oĆ^Ņ^ń]¢įŽ9Å'd;åē„tŪ+[µ·½tE]ɹ9Ļ„|óؤ÷¼°l=«)>ĄĪ÷ĆŚNAp#żīFģŽ•Ųjŗt:” +‘ņóІ‰Żi÷6Wó[Īķ Ŗ ±Zģ“KiõYm­kī»dVqÜ„+Zk?įŠ¼#euåZĻ*ł€ ß#¦kĒķŚ=ś;Čn ĄO>•‹ę9+=:yÜĀr§'|vńhžšÕīÆ Ź!7ģ‡ģšœņY¾†æmægoų'Ćæ‡Wž#ų•§Ä?'1ŪȹŽ=ĒaśÖ†R—CōgFšF—įōM–ŃXéĖÄvéĀD=®õ£ymV--ĻńcĢ%.ˆÆc ŪA?›xāęčŽ3ŅŗUm@AŠ3¹GS‘ą„”‚}+žSKe"Ņ9ėõ¤ĄŹ¾ÖZ Ļ{(U=®Wńt  uEģäµe«:)Ó>4ųńūCAšŪK½žŽ÷Q®öpßźĘ:žĆµ?Ÿ“üæĻŗŌōß]gXĮ#—÷q>z6 tS„ŲėŒyQųßńāŒ~*ŽĶ©xēW¼ŗc7œ¶©10ĒųW›yččV2Żx½Š¬L«XcĘĄe—'>)©oG6’>> ×]ģŽ:•nI³s9Ōļ"Q"L®}+‚¤Xķ_(BŽųé] ¦1Håüųmš—K}įׂōÆ Ųœ–Ą’P=Mzõµ“ØD('$ć­rŹ`[PN ā„VdĶŲ(éHŹĆĄĪ5Ÿu}²“$ƒó¬„.‡E:gØųŗ Vø–BqÖ¼SĒž2‡EÓn5m[UƒO“LüÆ ÜĒŠ/ZĀNś#ŗ;h~`|fż°Ņytoµ½ĖČJ<Ŗßt`õėŠüģńG‰5ŸjwśõÅĢ®IŲ$%ϤcŠ×šŚ#ŽŹIYK)^;žkZ<‘ŗį—‚@®„Œå.äŒ^§q'ć­-ī®č±DņåŠī“v§³ųgį„ĢÖ’Ż“óWō6‘ą+KdŽ;H@q蕃™ŪZč©m"‰āć#évÖa”1 FéPÖ¦2‘Õ[²Z偳ų‡½hłP“fxĪ©«02dŅ^źA4Pēœi“éT ˆžžTzŪGoX G« ꯯ŻdAē„<ŸRŅüIs®‹{‰ķģś—L}z.“mw§Ū¤7̳°Y±÷Øin‚ÕĖBSg =k:ļYkBg“ĢXAÉ#œ kZė¬Z&fi"<ż*]VŚŽžé'·‘āVĘhĢųˆ]i‹‚Hī!<äu_­e&Ėū`Ņ/=rEg)¦LÖryĮHUąއHžēOiŠ ÷źŠœ†iÖ2“,’Y—œtŻQ]ŹėfŒŚJ fū-NeD†āRńž‰Ķ:ó@[†‚ņ+¤¹ČƱ  žmʘD~ipƃėUÆ.£–O<ßčÕ„Ģw‘"e<ƒŽ·“ˆ!žfūHhČżh3”Kś„vvAŲ8d<jā® “ŗŻ%¬€IŠęĮŸ3|CšNķU/nm¢o˜²ÉvēҳbšŌĘŠHŖŪ5ŹfdzJDr“ÉÓņ*”5¤O “ƒŽ•”„ŠÆhr¦ƒ%ų>óv„ņ@ē5ƶ‡tۘE*…픸t_±™‹‚½\1ćbUµ:› Iµ&e,@č=U°–[Ł&’’/qÖ½jg“-ĶŁ#]EŃ$e½N2-2]ǐ’äd©£$Ē»¶·ĐEäIž85zžÉ%µeŖJƐS!…e6Ā’üu¤^N 1×N’M…Šdžµóö N›wŚÆ’4Čē€sĄ©4ŒN³Ė“×4•F”ŽK•ׅĒń5ć×Z}„…ģŃż˜ŚŲ.ŸÅZĮéc3菣“ㄿütļóI ź8Š{yĘčĮõō&æR“?Šqźz¼wØė ¤øuä ū֐dJ=®¼) iZĶ‚ėZv¦«#‚ņĘO ßēė×,4ū˜ģ.ŲÉrø Aą}Eos–hõQb·H%Icó µg\ÄÖš»Kndķ¹­Ņ9lq·6->Ė›rŹ{ĘF*“Ś(’Hä[|ȼņ(*›vZCÅÜK€>é”™½ p¢­Ėbå»Ā ĘŒˆ+>(.#‘6ų1ųŠy­ m$WŠ6óĘÓRɧøź=*”š1!k§Œ„FävØ®Q—t‘Ģ£€i6ʑĪ_ĒtČ^eeCĆÕįšäRŚĻrą' žqHŁv8{[ˆµ–子±Ą9⦵Ónmµ†Xq3zšE ”‘³­h^$ń­ŖĆ˜‘…Aģ2kČį_ųĻĆĒP“ń*l‘¶:HĻø{“ŸēAÆ.–<»AҜó_MéVW>JĪ÷²Į7L.0G½™•äfFWø^:ą×Kį»ķjŅķMĂ{v#€qÅI$}§jMöf1+®1×ĶŚč·sß¼±²ļfą“Š ŽŻźvn±4‡rńƒÓó­„¼F1K"¢ĶĒ8  K­Mn¢ jāĢå.„š„ō ¤g«‚מĖs;[n#?.=»VœØ”õ>wÖ54Óu†Õ'…aŌזxéumV}2±^ĘŽb2Œ śzRŗGDV¦ö‘¬źņŲĄÓ+%ąP²r ÆAšĘ·¤· æ †Ömō5hŸĒ'LÕöOk ŚĪnĀ€ zŒtÆ(šŅedWęķœž+)˜³ØŅķ|[7š½'½uk£hśsķŌpŃć9qšĶŸ{y„™ƒXCäĒŻō®śĆ[Ó®4|.Ų§Į%qŌ}kXÄVę}źč­Ū„«Ÿā<óXZ–™¤Ot‘ib1æ±=’ i³7ö–‘h –BxĄō"³WY™­Z Ø#øCŪü)Ihž—©i±Y€šHŒŁłé\ĆéQ^Żī7Qǐʳ‰-¤2œƒŌ ꓦyŽ8ŁÕ‹4$7#č?[Ļœ’`Ļp^Līčį¶ō=kr9‘Ēx‹Ćv:ŚIķ“sČWŒė¾ šŽĘāŅTŌ@%V`÷žµMX|Śiٱh§kˆ µ\¹·±ŗ)$S2``+zŌŲŹSģhhVÉlĻć{.Ž5ŃÜZ]j@VᇠĒ8„ʇ©Ģ_[O§L‘Io(SĒL¬édxX,g"³”;w—¶¤Ŗ`™~«ie,¢4,”¹ķЁ9Xé4­r+‘ćŸ{C ćmjE«-ōāNgw ‡3ZõĀ›\I®6vóf҇¦IČ øČ„¹ f·’ĮūĄšĀŖ9ı„ƒ 7cÓėXņ½c'± ×w~abØ;Z¹mā_źĻo¤k3Kex§Ģ[ ‘ÓhõükHĘÅū6Ź:İ]G4v÷»ĪŽz‘XÖļ¾e­Ė#Ē§wz¢&e_Ēkgy1‡`Løl֖’ńÜ1‰ęU;‡½ņ3¦a ŒS<²…Lć“Ņøė«Kiä–āĪńaó.ćƒųS±.›)C=ݼŪ[ m­ę¹X£$¶:õ-t ³ŅN©$R,ėl²ū‡ ģj[!ÄĪź±§8R '¢ģĶ 7F"eó®[i8Ł©<_įn‚HTDrŪæ—œĻ’Õ²Q`fV<ŸžµtžhaÜŪŇĪK žVfOŖč÷ŻB–‚) u%¶œģ>ŸĪ™kcu“}cIżd\ō<ńZG°ĪŪMYaš,‡9lŽ®čO¾"b˜£ŒóZÅōēŗ©žęv»HCg§zåu-šF^4glgŠNLiuåµĶˆghÜą é\v±ÆYYm¹ŗ‚t·ĒDnIõĶEĘāĢ 3Ęśuž Ö©s‰\ó^å ^Ļn‰‰ńĘIĒćT‘„£bõž„-ģŗErÄōč*¦‹}+ż¦[wŠšs‘õ­ÉHŚHeˆ…ڽzŽõzˆ ‘åC³¶éõŖŽś‘(Üü©Ö|įßéQ²»½–5 Nšų3Å: ų†XtĶNŚń¾ŃĘąBAĮQłS¤õŗ8(BĒ_āJŌ4ż:ÓV†iuø¢>P` ķĪ¾u_ jźE§ĮyeŖ¼ƒĖ*¹8}ß­z4Īė¤z®‹­ų³A›CŌŽcsl6ŗl1`q”óėY>ų«Y__ßj$ŅEV›„*>øĻ=+C7.ęoŽ^HćÓ­¬n&†U“; ēŸĘ»+Ļß.“¢źÖV}§ČM͹»UX śžGń/IøÓüe¢½µä–śt°„»ó ;Ÿ¦:W?ć_4[-ō„ü°Æ 28Č#ō¤Ń½Ķķ"Oź>m,ŻŻCņ‡x‰å›§éWü;¢ßéńµÄņ8»U-Š“‘č}i=ęršģŅj䉞ē˜a‹{ē½iĮļ…b‚źöĻĻ…¹Žćąƒ@r¢ē‹µy¦hō£ŸcĪIąō®ČŬĻö]I˜ŪŗüŅē¾GJn:\v2u+kÆ;ĒĖĘŅŖ2ŗ=:×PšĪŽ‹x]· x ŸžŖ,'ŸÖm%šę­3t“l•Ęļ,’E}„šĆÄzæĀÓ¤ź–R>³l²"˜qĮ'ӃA<‡Čž5“ծͧ3)„¢—@1‚ qK•ٵįŚOą6”gĘ©m§M6žč!"¼÷ÅÖÖ7^'xZk·°u!mŚL‡‘žŻ)r å0|;Ø3Y‘.8åaæÉpåéҰµż_ųÖŽśĘī{9'FD\ ’\}PˇāēĘų¾ĻOŗÖµ¹|?2łP ˆŌēҹæüAÖ¼-ćĖ™õŻVmSOøøym•ŸiŒž<榕Ń.ößkZŸÄ-3ģÜ·ZK’§qłW=Oå_7`ŚųsRś\Œ°FŪA$’?NÄJ'øųGāõõ¤ń ĀɶŽåĄŹNæ½ušŸ†urĀėKX.'šš*œ—Ą=”Df|·¦üPųįyµ-*kUŅ5 yš) š#‡éŠōOxĪóÅ~<7gK’Öv‰<ĮåT÷#õ?…; R=ēĘ’§ń¦™cąė[‘ö9Ę ƒēĻØüyę¬x×\Õ šŚĢ"I ¬ƒī ÷#šÅ"Õ>‡Ņ>ųB¾$Õō2ž-š³)Śsœšż˜‹VŠü9šžO k·Ś}”²²ć<ŸBMcQt'„ÅŚ£ćŸ†˜Æ¢| $Ž+š­½ģį-Æķādg ¹~¼žõŅlxߌ“‹„ÓÆ…åźÉs““/¼ż+‹żŸµ_Ū|H6Ś:I;,CĢFJ?8#ß+@Ńść{oh_ õø“Ūh-üou346ń¦6Œdœ{šņŲ£A×Ūƚ¼ŚōķŽc üØIĒ'šF:źZzµoą?jś–±é‘Įs°&Y2ĮĮ8#<×ę7ķ|cŠōyķ4­2āĆÄö[.%]°ÜGžGŹ1œ~<יˆNņ#›”ł±Œük­j:f©¤+Ł]Z»B2³Øė–üėļ’éŚ'Ēo„·:ˆ4> Rdņā‘Ąg—ačr:z×¢£ Ü‰>ü-Õ~üF³ńäzž––W8t’2„ŽznōÆŠ?‰^.ųāNŌ5čZĆIJ2Ēö€LlœćtMS3uuŠå>)ü@ń†ü ?“{'Ä~–he†Pķ?Āż~†æ:üQ¢jŚn–×QMtmŽa·wR³ Ž~¦•Āŗ>µ±š>kįIsø‚܏5ƒ¢·ĆÓóÆW²Õt x²?xcP¶Åģ¼āU3އ”ŹLłßRńw‰5æźø›ū>Ō1ĮˆüƓĪ{ō5ėŸ|5ŖI§Ü¼ŗ…­Õ„2įß%²sĄö ®f}% ysE»MO-¢Œ(Ž­|ēćOŒ>&’śēĆs”ԓ̲ƒ#åTgī愞 Æ­E%æŚ”¶ĢłŠ N"琣׭zƈ5™õķ.ŪGń4ĖqoJĄP= W(„”ųÕ9Ó|5ń.Āķt+Ø7Ä[ŹLīĀó’HļŚ‹“ī|/”č§FńmĻ…|K}pŃH’čņĢFŸ»Ś¾Ķų]ąŻKĆĢś¼ś]ż‚1UłcœÓ·Q8Ÿ@ųZ7Öµ0$šku9OÆ„tæfŸųūĆ6:ŹĮv Öõ½R‚hfŽįÖ'üóĻō®i+htSeT»šž©¦j¶j×3C:¶ŠqžzžYƵž0É>”„ųkĒŚ5“QÅ5™Šq·%w~œ¶;¢~±’Į’l«mā‹žĢæŠéš«<Ī„c’ć®ā<ąz×õa’Ę÷:mŹ+4V:QV=ģĻqš ĢśĖ.‘$…d B1>•ŅxƒĮ·ŗ“é‹éĒ2–‘9…Q’$bJmąąõ­`õ%»dM²"Ŗ¾Ē»M/ĄŽ"Ōd±Yģ$ÓÖé –†ąlŽq“ōēVĮs”¹¶¾±¹šŅśŻķnŹ4gŖqĶ]XŹÄ”:ējd2Äl§b¹lŲu«åRź)ķY˜Å 1œį¬ŽˆźOŸšnķŻ'uĻžÄß!¹‹TÖ¶§µ‚ā%O908ąŸCL‡2„ŗ”‘cnH<ńÖ¶5”…t¶'ū¤q@)÷<žĀfŠVu©ąē­lŪj(·09č=č&R6ą’ f 8 ßµR•bk—± ;Ņ‚NÆĀ3DŗˆY °Įėü>õčšÜ¶—–°©‘Cƒ‚1É b=-|«“du]Ķ’~‚¹‰.d+2MĒPy @ėWÖÓģVŽ…ŗgõ­» d4 ŹHöļA“”ŖŪĒs ·ŹS¾+Ž'…•ƒŖõõśŠQµØk2ܬVŅæ™\ ĒJ¢·²Į“c÷c”ĘwPķ)Lå•UF@귐.¢@.ßLŠe׌bø†Õ‰ņĻ ®†ĖN;ŅfWČÉ=ž”×iö¦Ūi°nEvöņĮ~&#fA€GzäüE©źZlŹ‘:=«dœGŅøüGØÜĢ©oøīĒ4§YŪ–rˆdbE@uøį¾V ĆŠØģhGSm"Ü%ˆģŽ0}jγg,Vķq±‰OĢEé]xāźRА@8"‹6XŅŽH”8'»‡0ŗ³ ŽõožŪķŽé–ˆóÅ4†™Ī\'–ķꩥ#·Ö³fēCø“/jF±‘ÕųužĒJĖó7Ł[xÆģ/ē×µgyˆfæ“cq$ĘHב^1]FI|ąń–=F*%G9q5“ÄČČ9ėŚ»m^ŁĖŖĘKBć±Ļė±Ć;ÄR@ņcš—Ā—·v ’ŪŒ“L dv¬¢µ4Œn{Šž4jŸŲāĘ(-öŹ@pG§q^©x’óRŒ™A ¼ü½Ålo«ēƒnbÕ R?.yŠÕÖ4ū{”hD`KČē½·c3F±]/ĶwP…z¹¬ f{k¹ę-;–uĶNFE‹ŁyB‚Ąśu®’bkŒĀÄą ™JÄ’ÜĄŸ$ū·tĄĻ_“ˆŽzÖMNpP`£gÖ¶.TʘbKtėÖ®2ī38+Gę2±W隊IÖh‚»ūւ1Ž2…XnJY݈Źķ8ī(hØ» K’‹·vŸĪ®G²“»kzf£ŃHѶFU¹*( I*:Öa)-cżāę0źxŗĶöbĄdĘ0GCHɲ“D“H订2 k’»“Ct©#<õÜ·c§ŹĪĢb,˜ūĄt®āĻG‚ö8ęƒ2ŗ€ÅĒz™JĘ©Xélo"ń3ƒå¬åO½YMv;31†äG.Ž ž™¬ā®“j^*֣Г KĶ_ZøcĮœōŽ•śyū7Į.õæ}›Åßu ›HGM&žõz€Ć­mŲ‰K±ū7ąŸ…>š™g¢ų;CÓü1£@”6CF—ż¦=IÆH†ęk]:3<޸ν2‘§i§O|‚]Iä<š«¢Ž5‰4Pp)œķŲ¶–xöŖ’ź6pJ!{…Y}=(lÉ+’\Ż[GäM„t=Åx®³ā«;©¾ŹĖēō©}Žŗtš|kńūĀŗ,×֗25õśƒū”|31č1õÆĒߌ3ž #¢|=7¶7ŗĢ–śŠ;łVÖŅ48·nź”³ŃŒ,~üżµ¾8|wšēIŌµÓįÆʤ-œ2¤Iļ#޹ō÷Ƌ®cy<ØĀŜ–Ē,}Iļ^Ī‚G=z–øU#ļƶ;`J)@[ ļ]oMŽ Ō%BĶ».ĮOėVmchU¹9<}k3 K¹z,ļ.©¹—Ž•ŃZXĖ;PKdĒJFI_S¬°Ńdŗøm:ŽŹóS¾b-­ć,īO§ē_Ɵ±ēü/āßķ&āŸ‰/©|:ų{ £“2 \ĘO]½A¬jŹŚF™ż;žĻ±æĄŸŁŸF“Ó>xNž×Š=«MódnļõƬō¦–fe¹6UõÆ:­W²4öféŠrć;JæmP5‚z™’Tq1F`޶3”IՆAā”žeIfĄØ”ŗ^³ā8ķ2c“'¦;Wx“Ę w÷bĘÕ-!ά$śŌćcóėćGķo§ų=ž/ źr\_£’/ńé_š:ų½ć‰ŗ‹]k^"Õžö?gIJ†>¤Žµp»vŠóŸ±ČŅ6Cn>§$żM[“µ»\5l•ŒœČŚ+Ÿ ”I<Įc]ĆõĶ)JĘ6g¦xoĄw:»,÷ʱ:ńšśKĀ~ÓōŌLŁG!ķ‘Œ{ÖMÜ¦Łź:_…|é᷌¬ [‚z ī[DøŅ\FLrIÓrœ‚)N– ;ƒ2Ąä5kbŁ+Ž„w Źexgy÷lm¬;ъ÷`*ĪsÜśPe'ckNÕĢ* E$ō#šmž„öœČd™É­©™ņ]f3 ˆźZµa¶³"t‰×± §!ƒH‚г¤č÷鞢øķvźāܱˆ4g¦=h œü .”å&ź½^±¼’'x.2Ć÷y\恚Į`,Į@öéQOr#"fŪµdŪÅww3G"äg×­[:kžń#ü&“ˆīA„sRZM 08äUynīŒ –’<~£¶*¶ā/é=“~r¹ßž•±ä]^DŅĖųÉĮĀō­Č}=¢ČYqƒ­[v2³B#rL¢€)_[NÄ?—$‰ŲšēüČ[®ōlćP+’ٳ%ģB8݆ō5Ōjz”–B9RŪĢF=Pō —>ĘF­x÷¶«8,Žk–·Šky “›įėĶÄę ·[HĢär1żdõ;)Ÿ•~1°Ö~ xŁ4ŻBŽ1„dłO"B¹śb„ø×-57VŽhåVł°œ`Wz]QźP±Ūh:Ćé—pÉlVte*Į‡ 1ŠŌź×wśø’Īm19P8Įöƽ+½'ŲŁ‹ķ…äµŌ§ž)Āī皜iSČYZ`eå|ćZåFņ•Ķķ/Uµņ'µŗf†ź3€łČjöļ…Æ]ŸM$®ŹZ$€XJōhHņėÄ÷č<9żšņZĖŚeČłˆ`@ĒQÅAx.2,W^µ9ž5Xźg©·x‘\õÅZk„@’Ē$‹€CsŅ·ÜČʗZn£IUŒ¹ČöµÓB9Qb™|ÅŪ€IéIĮŹk>_A.€ÆŪ”y·czƒŚæ3¾#ü*Õō]QÓu€ŠābcŠNAąēæj^ĢØ»žšģö:4—–ŗ•›"óBĪ7 šk̼SscsʇT˜7$pAõ„ģÉ8øōĖ»‹Pš„Ÿwܑ€;HļŠ÷Ÿ†?5ŃŠõF»¶kY6Ę„øuĒÖµŒHsģ}żš?ö’yõY¼-u®ŁYL\yP¼ \wϾkōĀŽ"Ņõ įžy£€Ą Ž­Ģ$ØtJŠAå(ėžwW„[ŽŪĖ’PŠ ņ+x»œ“Üć.g¶†åŁ8‡=*Ž«ŖiĘĮžÖD[Ąæ.ŒūÓ%;Qe¬kw^bėeiƒ¶0FFN3ŸlV‰æ·ł!”ŸāĶŻĶĖ8ŌÄœÆvõ«kcŖ‡U!sžŌ&f̱¤¾djÆźj¢ÜĆ$ėd\œ})˜–¢šäķe–häOU­Mz×KŅ­”%B¤|Ų4†rv6ŗ•¢łW-Ē öäŽ1Š-bÓēBĢ“¦čŪØõ¦8»6Ūi—ÖwWkæ¶Åøķ%pŹ=:քbęŚī“¹-GĢøéļHŻ#¹±ńńĻ Ģ’4č½ĻZ©¬üIµŌM-¬š†Xy«ž·č{ŠnrVټŗ#±Ųąī;W­tžJÄź&&$'œö”vūA±‹ČæµŲ×6—Ē$TͧźvqŚßG oČéÅeī ރāX ·kI‘Dø#µvŗŖķ„•¾•©”£cRM@^F2¹”t5J åóÖŽX™‰8Č ƒufHs ąėéM’–?2ß±«œ·2ēÓ./Ż\ŹŽ¹ā¢:|ŃĄ^FYÖ¢‹Rł RŪWšōĖŃĮso±Htlõõ«z‰§ŅõŅF¦&ū»Ą8õĄ¤5·Ōõ3Xƒo•ŚN6ĄÆ(¹žx„’#Ø,@ōÅ&Ė2ŪM‚M²<±«ēń5BņŠĒ< ›†qźM`÷&Hęm¬µɚ—`aŸ÷®»JŅī,‹%Ū±ĮüéXŪž|ī~x¹ėڲլžŠ«;?t #ӝ:h$«KŸ”ŠĢ—Nf‡Ė€ ”•8>ōCsń-Ž£§éó]ēJ§iE(½ŃuJŽ{y<µó#MŲ®Ź#·G‘ÖäŒq“ŪŽæ%üįoj>;»šóųbk H¦('Ęp¹į×؁Qėv’¹ķZG‡u7±m"ŚōG#u8ĮĒZßŅ>ź÷^Õõ;ōmCP³Ģ­ä·ČŹäūš+DŒ¹Ļ>Š/xæĄZÕĶ ·µÖcżŠC‘#08ĮśVæĆŒ¾“Ć:oˆ§€ŲŪ±†(ś0õē¾pkWm&cüZÖõ?ųšųƒB±“‹L‘”J޹g\c9ųč’ü0ŗJ6§=»X]3d’>šgņ¬IÕWÅż"óĆž)“ń†“ ÷śۈ‘£Lnå±Ś·¼#āųWĘŽńŁEw„²øœ0%±Œd΁©3ģ_Š'Š“æų§Ā–%4ę‰MÓ$ŽpTŸ^•{ā—ĒkOĮ°h¦śęŽīęÜe¤”Ø™qÓŽ¢“‰j'ēĪ•įØSp“Ot²ČĪwœąŚ»»­ÓFŠī+ųā “ćyĘ=1@Ź>Ń|s{Ø]Ås»Źń¼‡=>ÕŚ]KökK_ …ĄėSbŗžā[}v}:āKµD»›"2z/< ³ū0ėoįŒŗn•āk;建FPŪ1øļČō­„‘ōĻƟxcĀæ¼D%¶³ø˜ņķV=w€äW ų£ÅŗĆ’ ?Š|"–×÷‘E‚BėÉ#žę„‰¶Ē¾üż„t{ßKØ]Yż˜ wyꄎŖ?•{~§ćļ„ß~ųĘ,¼={Ø%¦Āivr8)žsėXbax4•Ģä~Ż[GšŪÅ÷–Kww„“ķ”t!”By]Ē‚+Jx“F»TšD±Å!7•0%0Ē5tŸŗ…#ģ?†Ž(“ų»¢[ĒńO·°Ö™·‰€ĻšąšĒOóõóļˆöž¹ńsų']Ó ¶‰Š“1ǃ߿bx§&rIY˜6ŽÓ¬¼Ii¤é¾%³¾¶p<ø-Īåaž»qŸJ»ńc@ƒC‚=2öŹŽ{iŸĖŒĒ‘܃\īZš@ńĶBĒF·Ó#Ón$µµY Åq^ °ń²źw6·3Gq”Ä3lėĖ8÷ö­!PźŒDń:]ŁÜīŒÉ ĪNņ7{Uχž)ń-­Ķͤwneŗ±šŁ S:Ķ'āļ<6yˆK’Ŗ˜žćšķQĢtE˜¼ā½;Ę·7¦‘²Ś9ÕāKoõœŸ¼§·zūkąęi/„,\½üwlēē9ē4āō±£Ž‡Ga=öćsń>ŽWHå\Z÷OüIž×D‚Ī i¼ł!0ĢsĮSÜQ(ča( ^iš%ޱ­_ĮzłX“¶ģžŽ•ó§ˆ$kæ¶]čW±C4G”ĶĒ^žµšBJĒ}ā§Ó$±ŗ×ē‚Ixń”ĪNįŅæF¼ ā Śuµ»Ćp²)Eˆpæ.–A)hax×]—Ć^,šÕģK'†®w­Üģ„ł]€ĻA^QńNI›K¼ŗŃĪƒs›y\ É ėĒæJĀqŠGę?‹¼5&—vķckh]Ł|ö®KéÜŪ:„qÜuĶiLN7=į/‰ļ<ā :āŌ±‰Ü#³6 īnGė_«Ś}ōW0E=”‹um2,‰ƒ™Į>ŁÅuÜĮ£ØµnwQ_#~՞ ·60ŃdRīÆĮĪóܟNk’k]šGĆqĖę „›ŹéņšūąŽ¹mć_‡śŸĀRź[ĶBÖ7ø±i_k9?Ą~µ›GldpžńWŒžx’ƞ%Ņ.o4ų{Sū^éJ”9ČöĄ5ž€Ÿ²?ķįĻŚ£ögšĘ ^ŲŽź-iZ“HpńN0§rõŽżˆ©šŠīƒŗ¹õ7†|Yż{opmęFńšūFÖ`Ö4“½†DwŪ—čq\³ DųŸöæŅ¼;ńSąē¾ üJŠN©šļÅVŅér¤°ø#1Č ąŪH'”ĮõĻłŁ|_ų]āŸ…ž2ń—ĆZ][ųŸĆ·RY œm–ęŌ1ņ„ųƒ(SšˆüFZŹŠ’ew™³‘‘‚*„Ķߚ„€H=ĶuS8źEŹ4ÓpPdž+>@Ä®œdzWDĢŁ7–pX¶ā8ė]mĻÄoÉįėN–÷0[͘&`|ČūŖŽžÕ©Ŗ‰ÄÜß߯ÜIqw ø‘›;Ļ_Ę“ Äl؁JH”@Ē+ļVmŁ·øW%sžEcn†ŌŁŲų[Ǿ-ų[āæüQš5żŽŸā źźÖ3[¼ŽõŠv%ŸĖæÅO]|;ń®£ 9ŲI+ÉdYH $ąéĶy›@FóŸ÷@ōÅwŅ–ĢęØĢŅØ“‚¬é“žsK²IĖy„śu®ƒ“‘ļEVrŒ9ϵC7*7Ž` iM. œw©K*ƒ`T÷#„ ="‰H*ŁžUjuą‡C׎”Žšl°ŽSf)”“M‘Œć5żĮ?jč<+ń_Ē?±ßÄmim|ć yFKK…P6+2W$wʊ<BCūų®k–z~·šÆÄ·Ė㟠˶ŚpÜź:i9ŽN@'óÆ«tżĘ醬Š\ óÓ³ć©ŽORżõˆ6é ƒłᣒ ü)’‚åžČ°žŠ?ōŠš~”§ÄZ,‹mzŪ 0FIŁ/€“ĘW$•¶?†MŌtķORŠöŽuµGemĒó :-n{;įø1“†$ņ*c]gcQ }hó8XäūDämb3€q]­·”¬dąƒß­·Hى„ø‡äł”qÅTæÓ6¢É¤\a‡­T˜¹Œ(¦t™Q€§Ņ½ŹŪG½± <#yx śŌ–qļįÉ£ŻO™§zŻ[UÓķPVLgŽŌ£q¾y¼@ķiĒš§*ÜDļŠ8ĒŅGCįmJžąĶi«œżålUōÕžĮxŃĄĆbē#ŠŠC2u{™Æe!Ž8ē5É­¾r…&“Šk=»­€šD}œÕĻ2•”īičEŃGg ]ĻnńE12Z÷Iļ^·q§Ia2f0„G Š <ņß@“–ākØÖ%Ę[“Ć}=ėÆŅāŅŽ[pėū°@až‚e#Ŗńö=¾žĶvtŪÅpZV½¼Ķ‘v±ą0 iėśm»aÖ8·œąu®utč÷G¹{uÅ2“±»m¦Ś“üÅR§Ž:×5āxRXīį…ŸŹ6;šF7”½įÆCa$^j¤Ń0†éō¬H’jRÉŻ»Ž‚”–„ņĒmlȬˆĘ9ĶY£¶Qrcė€k 4.H›‘gŠ@cČ={WIaqEg‰Š’9_ń¤£cE+š„¤Ś¤¢D;<ā¹ĶBŚóI!CĘIśÓ4ēFļ„fŗ¶œŹI…›†Įķ^ƒ¬źŸbˆ\ĪL€ÜPDßC> ^-^ŹA ›Ļ&øčā‘ę’7ūÜõļNÄ÷r5¬ēhƎuž|Ż4Œ[äҰZ£2°@˜P3œ÷®Gķ2GtU‹*1Ē'„féöN[æ$„fÜŁėV“ąh/‰ĒŌRä`Rž+™Ū1ÉĘ{•LZÜĄĢd}Ą“łV¶ó@­to_Z£=³!£<ę€ {$`ø9犲–’  æ„g)ö)¶ź“:G»øĻ±­ł|:é¶@įānx¬ÄŹR*iŒ­µr8ō«mīŖźl­Ė)lr}j\¬5otņ‹z„]†z×w¦1Ō¤·‰¢'*\TóšF6=?ĆśBڬ -¹™#h<×AŚų~ł.–5’Šœ˜ĮūĆ= JM‡?CĶüI­ip\]^ŁFlć’A¹q’ÄńŽæżj÷’’²GÄÆŽ·KwØZĀ+ą•"C5Ņ”k…ōē„j•‰”ŗµ’³gģēšćąžö/ ų~ÖėY2n{ū˜ƒś®sŠūŠ×U·ŅmŹÜČפqĘIöŖ¹˜±ŪjśŁJĀĪŲō«WGk„ŪéŪžŻ æ|ž“Iš\ĘŁ†ļOJYīb‰KHꢑ›sŒŌ•šķ¾·®Üßė ŌfÕõ«¹L·s1'±5éįpėvkRVF¶F ƒ·=³éTdV1ؑČ9ĮēŠõtG‘^Z’%¬§” ;g½XłłX–#ō¬N"h¬Ÿcä’{Ö¼6[öĒļb@#=ŁÓE¦Śéče¹ž8įź2Ī}‡Zū[öXżˆ>;žÕŚÄį÷õĶ/Ąé‡øÖ.”ņć—ÕP6zÖr©cD¬Rß±ÆüÆą?Ąk_xƒĆŠxÆāĄĢ÷Š]ab:sÅ~ÆŲéPŪZĮjmķm ˆŽ(Wj(߅pՙjV4€DIŪģ8¦żš(3,QüŻxļ\E9’Ć:Č[¦=*Ö’jFc fØßeau6÷žīęń‰Éi'5fÕ½ŗWli£3v5É8ÅO$Pģ]ņzVrv3Ķ}Įś®­:‰cx!ō=Iž•ōW„žéöŠžŻq€>\×;f‰ē„xnŅĀŽ!óÉĒZō;EµdG €’Ķ#9›āĘÖ4ņćŌu|ųfT’F`4JV:8ķÓ…Ę3ÅbźvSğhµW©ÉLć4—-Ö³+„0Ė·'#”ŖŃZÉ8'­2•Ė6Š-£‡äĻ@+vÓ¤'Ķ,§¦3A%g¶„ĢcønMa_éóhr‚NĢĆiįØ(ĢÄˆ—Å6į»8b:zŅŌķ£æµ†t”s׆ gy «(ņ n;Ö£ŽŽep ²¼Šji+ŗl]Ü÷÷®¢;hf†9^%vńŅ€0oÆŚä5ŗ”`9ō®r]^ł®Ćłnń±§8÷5—;“¶ķp†Mæ?R}jhōÉLK! ÉóSź"Ø2@ +|ŁčkŗŃµ’³[‹VHŽ6<Œ žuøµ§†ķ,œäsYinb‰$ vóAŒ‰×R’8¶Ē&Üäm5&•qx“MnŸ8öė@‡h–ČŃN<¹†y>“—ŅʘIPŌĘ7ļ uĻB)×J»~ņśP\Y…Øhé'Ÿ=Ęk£““CnŒ’ĒLt Õ3䟦3AųĮ7ön”ą^­y5’¹¤Ö6RÄÓ“ #/^z~É^,¹x?ÕäīC]ŠŲā#’’žL(„øÆćX—²]FéŽTqķU~€Mź6$óNńŌ7Wüc“±ń— ÜCpn`S‰õ\tĻ^9¦6~nėZü—ŅO§hrĻē³ĖåO^„öĶz‰ŽĮ®µm*k}§Ź.¹?6:Zņ£+œöƒ§xĆ͚-%RKfŹį‰=s].•m}eÆXÉ«[Ok#:‰J·yē>”9X“éĖÆėu«ųÅŻ42]ÄĘķį‘}OÆJż…ųeį[“2śĒžRŖ²~锥ś×Ć2.ž©Ź$Źći9ü«æŠIēb'ō­éö9fW}2čBä2HĄ<×—ģņÉm2ģ”»ģ+CóÅĘĘćPEmE Łć'­:ōĶF±€ĻZÓ²¹Ō …ø‘„Æ=© ±”G$‚"ĶėÅx7Å+OiÅ5 \FņÄåĢdgū5µ‰q:xŸ\ÕtKfÖ­Ž×PŪūÅĀs]­ć%Ü";¦,sƒÖ¦V2hϱø¶Ž&é‘ĻE5ę3‘ÄŅ)cøˆ¬™pG”¦=Ō­(U@zÓ’n] ŽCžF; ĀęŃ]N£Lš•ģ²G ·y£ć+Šįõ…Ķ£,ÖŠ™qŲ|¶‰µĢ-?Ć6z-˲G»‚9ź+ˆńµÜü<ųy©Éw%ģS^.wÄgėŹve؟ĺvÆįBŽ;2ė중”yč{}iž ńgt«Yų‹U} %ČÅK4yčŌF¢fÜŹŚžyį?xŠśå Ę·©ź$Ū·ŹsŸo„zäöŠų“^:Œb+;—v Āp:}kdģg(\ōSįF”o¢>®óĄ·1¶Óƒ‡ 3ÅeéŽ>ń–āĪé#ŠĻ`¢eō¤ŻĢżš£|Jń†tķGĆZ,Ūōy÷HŁcŗ"s=Žk–Óµ++&’ō£ł™%Ā·ŽÆõ¤Cަż—‹““m}öĆ;Ź…¶ć…Ē”ü r¾ųµ§iŗŅizĀ\Äne|¶Ič=ź”M#ÜŗRxĻƚwˆ­/”“ŗ_’(H …»ŅæAž4ųZéļ^×ū^åHØr¤F@ī8żjZ5kCē‰ž]Üų¦óU¹Óm“ĖĀÄū—ē8¹ļYž9ųqaq¤Ėu䊯6TÉ÷QEŽz•,|ł­é–zTÖöØdx¢ŪøąąvÆU»ųqļƒķõ„‚éQÉŚĮ3Šuń ēU5<Š„¼ ž÷r»•ŚA3zē|¢OųĆCøŸČØxžl¼Ž„śv Õųw­iŗõΰZęx‘ŁÖ_ø”±ė^œŗ¬ö÷š^-”.ŲvzzŠkģŹ×> ń7†¼e¦$:•ā„ÄĄ4[‡ WīŒz×Ö1xkA×öź:¬ii'Łņ»xĀš×š¹…HžOÆxbĪßcł‘¼d”[%O”Æ+ų³¦éŗ…“½[Gń q a4` ”¹Ø”v±¬ņOŸük’ £§ŁŽ‹­.UU1„ÜŁ<Ķ{wˆžĒNń-²¾™ «:ÅÉłO{÷Ķ>[3Fķ¹‹kšŁüyāŻ"Ę)!`Žg#`a.pńė_Zé'Ćļ;x{VžĖ¶¾2¦ė‰¹ œri¶öBöŻ~šĀ‹9u;Ļųy#“Ź€©“åĄēpĻėY¾'»±¶Ņob[“gØHÆ•8elu?SÅ%"•FĻĄßėŽ,‹ĒšÅäzåÕ®­o|bÉł–B§!±ŌWėWģĒ ĮńWJŽūÄŚĆZkņ[,vņŗaXć‘Ļ?O­k„ĖØżŻųĆą’üńö„‰“ ©ˆ„ĘäāLœ’;f½sJÕuĮ«i—ĢÖ÷qbcēęĮłH>ÕKc'cę[O„—ZÜŗ—ŠōKł“Ÿ9ŸlėIJ×øĪjOüYōż łå,Ņ¢nĘ?‡$T3£˜öŻ#BųmwįČ-ͬ¶zĘł±æŹķźGQųVOŏŚx;ĆŃim·’Ž–ģIėŒž”…+lxųŽmMģt{4‘;ę8šL䎧ŁųŸO×ōĖ-§šĆĮ ­k†›„k‚Œ{—Ģįb=G>ę½WKš×ˆ“–– ~pŒʇ+`õ¬Üµŗ¾“ļÓo­s/@{äV|;*čž9šeĢ‘XG ÜŁ„Qóa@õ5.„™™śńWöBšOĘŲķ<]­ZŚ]ŪY ’"ųūCc8ąWüCż“<=į…ŗtž ńTØ2O•3—+/uaŸ»é\žŻ­ Œō>Yųc”ŚųÄ÷Ńx„­„ŅīāhJ|ŽTLs—Ēć]GƏųSĄ’ēÓu=A­¼5|ÅO”~P:ŗ£Q=ŁßžÖßlt»OüGšGˆŪZšĆ·{0Ą1Iʾ6µ²¾±ßp–ęźÖ0˜ŖŒ®eĢz&ŸćҰXŪib(.7(äƒĪsłTZŠŅņż`ń¤³F[sĖ‘½—¾ Ŗ±š/ėņéž#³¾š½åŻ„v²ę3¼oŪžyµÆ|Pń·ˆ#ŃōŎ+ ŒĢ»Üļ—”ĪćÓ“pD~0ŗžóD„­,—ˆŹdU?wėß4OŪxf=Aķ.R)¢)ŗdČu‚ ćҤŽ/C‘ń%Ͷ­u}g4sAvå°8Ī•q¶ś$¶3„ŅÉūčrČŻąkX r/ŪŚ.³ŪĻpR}§iīO”®cM“Ö“'¹’ižd-…`øćŽØƒŅ<3ā·ŗ¶žŅ;µó~šĘ=ŖÕÖ£l`x”*ÜļPy¦g2ž„ؽ…ŒI ŽŅH±€G<]€l5vń1…EŒöäg8`žŸ­ ŲŽSŌ¼ ąÜüV·„ßZĒ!x6ˆäÆėŲ>&~ŃŽ>ųAØx‹į‡Š<+©É¤Ž¢4Õž*|Vų¹ż§ų—L–+č‰Hg†%;»÷ķŽ¾»ųkÆßŚC—p’-ņ/•"c¦F8ōļZŚM®¹iØi4‘˜Ęw(#“޶“oų~[äń k9T»ĒŲąJ¹y“y¶·ą+Ok-ām–ĶIĆ5ł[?Jł+Ēæ µkšŒ’Ü³ŁŽĻˆŽv‚}¾µ˜Xģ¼-šĒĮW~™¼Murŗ„@¤nŠ׎ēŽ»ß†ķsm¶‘yy”$'lrÄ6–PxŻųVŌęe$zÆĒØšļąž¬¶čļw§7ʈeŌrNWČ’²ēŠćų—’ 7ĀæȐ@U§²Ÿs&;Ēš©ŸR¢“<æā‡Ā»żRŌ|<Ę)Œ*Frä䏛ņ‘ÆŽ5ż"ūH¹’)ćX˜HWpķYEõ5PÓC*źe’(H”r½ˆ9āæHfω’ųæF>ŗ¹·[ĖhLŹŽvtSŒœółVń•ĢåϧķnĀŖ¶wAU5.h·Ž¾XŽĀõJČAćƒĻNj'{„Qł-āO Žų;WŌ“=IV9m§‘#–MĒi’>•'ƒõūŻ WµÖ“›—‚śß-7gØ?•AÕOCķ=zÓDųĆą½#ā7‡5ń¤~^”PgčA^’ZżW’‚žÕśwĀߍ:ץ?ėöCĮž);;ƒ±ą»@FܒF=…Žö;i++ÕŽ» „“Ægv®"$ļ)äG¶+Ż~kÉgēY<Ģmä`,{ćŠóäŗΟÄ^Ó¼įxQE+{ }Ž3ąŒcž3_Ē'üösń,)¦žŃŚfŠŅė­ ų¤˜Č‘­÷b9›¹ėŌÖqG<ē£ÄE ćĻ ‡·eY#aс®u"§r+g'źk®U#ÜĀŌa_˜¢ńĻÖ¹’+r"\G±³“ƒ]&ŗŲĒ–IŒ c°ę³»H@ 7\Vɚa-¹ 8ķBĀv*™*ć”äżi‰3J‘bō«ńnM¢6AŌ6O5ŌŅ—ķ$C ŪŹ Är>•ū¹’żžÜ ū7žÓW_²—ÄMj;o…^?->n$Ś-5A±¦d¬†eŲėƒŠžųįQ}`Rā,`’xc ž#šóķ~œOšxa^}X”|™ńįMƌ4ۈ¤P/£{X¤Ÿńƀ|eąĶ'Ş ’MmäÕ`•ģo”+÷—nüĮż+MĪßüöo½šžŸ.Ø,Mcę\XO"HI==±šüg¹/Ń“l¬øažEvŠg4攘QĢ|üƧµAęI°…$ć­u˜2œžd‡ymǧ„UĆ»ķ`sߌµ¦'!’e_¤ņ°Ccž‡­[Eę,ƒŠÓ‹ŗ(—ĒåYIXҜŗDŪ–4”–­ż Ä~%šGŠ|7ć’ß /Ě-Ōz…¼ć «#ĪGҤķ§#żæcŚMżŖžüż®|ś|¾-±‚=/ÅńIŒÆį»­‚ēk żl𮦗P˜ąĒ٦_6Ļ@GJęØģģtV“Ź^x®ś\Dżj—ˆ|?”xūĀž!š‡ˆ,ā¾Š5;Y,ī¢`eu šr3Ü{\2ÜGłż’Į[æcgą?ĘMKÄO”[µ©„£©±¦i©t± n'­t±ų)šV-4±Æ)ÜPMŽUšę•&„öS.&ØĆś×ˆŻiiä£ōäė@š*ˆ]R0IĻøėSŲ\%¬ Č£Æ>Ā€7ķ¤·\ÄAē‚jՏR¾„(īaż s…«™äff<ē„dĻš‰ČWŪÓ±  ­5­c‰RHU¶ņ8äŠéßF“Ä‘Dŗ=ÄPßæCķ@žŃÆōŻö:’,“`†*„°dTU•œ‚MnM}pńķ‘Ż½1ĶeK©_ÄØ’G/—ŽŅ‚ąµ+E©\¬”„ĢПį'„l©Ą¤Ķū¢0A=)š™3č/.bbœ©>µ>™cw4GĻey?Ņ®Yņå}Č21Ę1ŠŹ‘ņޤæAŅ¢qź Yļ·Ģr1Ū“€hŠķģļšIūn8¬†nZ % HØ:.:Ó¤æK¬)RÄr:Røģ6,$›¢Ź/|Vī£ŌlQcuÜ8>ōĮ£ {«@į ß±gŌī­ī rX·oOzŅ2nKdæ)&Nüöļ]‘éžrÉŖžžõ˜ÕęuA&Įé\¾ß“‘µˆlõ  māC»ķ÷ķXņH-fx÷ļ=hjŹīX£^B;Õ±pŅ©$¹ļŽ€,”HĢ=‰ā¤–!:8!y“ūAlb‘+7·j|‘† :÷¬a€ÄåĘpOå]„ƒ]\D‰oćŅ¢NÅF76#šŌ÷ó+H®9SŠ×ii”E¤Ä²[y%ĻP+–S6HS“ŠņÕe˜|ĖŠČ®j=2ĄKö†£Œ}*T˜nüMŒN’I ŁĮ5”šóįÅŸŚÉѾh·WV…JĖØŹ„mā9äīļŠģ†Ęr‰śåš+ž éšćį¼6Zߌ¦›āŽ]AuęŚ Žü×虹;} L²K¹™"Œ|°mŚØ= £6ĪŅŅ+«¤DŅ“ż±§n+Ń4M>ŌĒÄŠoŗÜķ4¹\ė €Dä±1‚F{śPIƒ5;žī”¼Ł»W=}ī’ņ\÷FqĶL„bį³É¼O∢Ži‰1)-Ļ@=kć?ˆßµ-·†mÆL61EnNf”€ŖŚcÅ(Ō韅ߵÆüł.”½Šü)ż‘ā­h9|—*–ĢOŽąż+ńĒ?ųgąķWÅ×·Wζ…ž8ņy,G@zĪRčicśFż‹?ą‰>šäŚwæi ļųH|Aæ|zR)!X{WōąĻųwįž•eįļčŗo‡4"ĮmRĆż¢+–r,īB…UšcbźĮ°½ÅrĖmDJW``9ĪF+#…“z¾µ#0^§64®d_źšŚ#1uR=kĘ|OńvOm)qĄÅeĶ}ŗtχ>!žŠŗg„oäžÜŌZpēr+|ŻyĄÆ¾)~ŲŚ–³ęŲųKĖk-—īœcƽkNZVGĜʧÆk³ĆØkZÖ­rŒq#öÉéQ.ž'Q s‘Ö»a NE”VūC(烊ŒsÓ8äģs6oZč··®«j™sĒĶŽ½‡Ć ®Č3#\s‘¤#cÜ4Ėß"(öŪÖ½7LšåÕ¼q—#+Ōc„s¹\³±‚Ō˜‚0P=1ZZČQL/µūŒÕĮ˜J]MømĖĮ«:Q ®™Rx5g;fżŒ‰n„¢@Jŗ{×1©kW·- (·—?sü©™ĢĄ¾™ķ#,»OsŲWKlń}¶ģdūŅ21#q-É@JœžŁŚKKnj«ćŅ€&Ž÷É`§'ž¾•nõ“PŒ²@ĄĶŠ:_z¾]ŹĮ“ŗē­vvŻEkY”s† V±/’·€08Ą¬ĶNĪöß ˆ^yÅ³,Čā<ćspkŅü3Ŗéré-篗>hÜ ß•‡ ŖiÜĢÖx’Čé\üK6*œźŁĆ*\1ėĢYŠ*6~e€ię’~į)^r©ö` G™”c éėNÄč”Aź*ā¬'+„a,śižŽu.œ×*†šBŁ•ĒU¦dŲł·˜Š /QžõrĖÄW¼-ĄŒ?±ž/É,łd$äƒVgæ“x?{’ų ,qz„¬čķ`G„G¦j3Đŗ“Ür(.17gĶŲc(ĻJf›;Ęā)mĻ\ö RŽ¦źąÉj°ą<9Ī‘T®VĀęŲ*ŚĮ £®Õ'é@”š9oź¤:,֖Ä̃ uƚļP]ż”ī­‚8'rø„±“O3¾’nY-Č$p*•Ō’j·xe:c‘\“:””óĒ‹ōԘÉn`ˆ£å~o»_–“ĆĮ”źÓxŽŅ9-€mޱ9ėV£Šź„¬|å¤źņ$ļ)™C“óרi~7MLˆCm/O݌\u©]°­cŖ“ÅV‘IkospRąü ‘ÉśÖ›ėÉē&n7P~lą^MZ éX„hŚj"¤é©Ē·q%XójōO_­Ż…ŅÜÉå°„O;qQ LS¬Ø¾ ųßBŌ…’†gŌL·šH£ēv{{ŒW¹]Ų™ešŪ½ŽxäW”J6<śµ.X±–>zł§$ ć<5dßAįw‘D zącŗT“±É)XŹ>^Aóü^“ō°bĢŅīdõōŖNīäsœ¶¦RĪp M³9bojmżõ¬ŗl±Ø†ŽLØ7)Ē>õŃLƒāŽē‡NOˆ^ Š{k‰JjKnqäØĪŗŠł~Ē\ŌžĘkŌoü#µˆö§)X«E¶¾¶…īćdxåxÉūßJIb³Ö<ńņōņŻ éģ `åÜÖ1ŠśgöaųŻaš’Ä+į/ ēūSšŒņi2 ‘'÷yēn3Ū4ć.Ø%Ē«|<ųŽś¦©%Ó5h€q+ĀBH3Ų×Õ¶ŚŚ#2AµcÕW$Īŗ!3–­2·öŒšČŪ\°čW4٬l®o:Ü·qŠčG+E ĖŚ%„ģŚ9\}ź­hЬ£6Ō’ūmĪåP7(ėéVtĻ>™TƒĘO44ŽL¤1]Æź+2}ķ*6ŹżģóZ©Ź] –Ń…£Ib3ņńTĶdĆ»{w¬Č±©¢ŪFžsKldŒžü5ŹxæĀ×Wņ³ž/)HįˆĪ)Ā68|7«éĪßgBäżįŽ1ZŚ7‚%Ō.’ņA=¼z`~5ĢŚ:§ ‡§ ¤ ŗŗ¹mSUåŁw–;.ZĘ%s#Õōų•ܰǼ;Ęv66s6 ³ł[Gļ8ŽVD·8ė]B(gŽX¦ŽxĒ#iÆT›ÅŚuž‡œŠŹ“&J°9Į>߀ؔ{‹‘œ-„ŻÄZ>vӎž•ŅŁųžļĻKY =vīĻ™-t=ODŌ¼pĻ"+0Ęk”ŌŻB“3«·± ĪPģeEz¾j­ČŹē5jźTv[³»UG³ ɕ§hŪĢFxĘ{tØ£,Ŗ¦5d"¶/W– ˜¾ ‘·c­x>¹icfŅ„Ŗķ䐹éĶD¢nq²Ż:Ÿ/ «ŲśššÕn¤ĖCÉā±’«ŃāI®×|2œ–żkŌm¬mcxä¶Ż("°³ŅI€ŗŻ@c8ķS]“bo,)’,}ģt¦€”H¶šĒ§ćµO¦erćj†Ęl™­=!:sŗ“É!|óŽ)śdwv×L‘ĻęĀ„ö¤ę‹-ÜŪ¼ī’ŒißhFP…FļZɳ)īmiŗl×°ŹU°‹×qō®/SÓåŠą,L™äć‘H‚H®ķÄA¼@Ź;VgŚÜ9Ć3+rzU©»ej×»¤%żĻjÓ/mi 9)Īz`U©"曚_Œµ;d†t’ž÷8śW¤hž.¾¾Ż·Æ›²ÕŁšŚ•­ŻœĪŃłÓ·tÆÕ { ×(7[«`®zPCF&µieöI®¬äĢŖžc#œÉžμOR²Ōoīmīlµ;1׌(VWśäRnĄ}Kį[M:÷H“Så=ņ¦c’}k“×ĀŚ\“‘³qäv¬F“+iņ¤nHäƒ×5”{«&J†>`œqųŌ„ŌF&”’s»Jēøćń¬ż&ĘKIę•&Ł‘·äą`{S^Ab=N÷M½œĀ5(…Ņ. ĻåY?‘"(;“Ōw |¬čKD‚7T—~>ozÉ·¼Ó®^D$[…¼Sü#µ¤rkq[F hāū9lgJćL±Õl]–/˜ƒ…=M6O±Čhz}–“tSc-¶e‰,Ō×aŖŻZŻŗµ½±Œc§­O"-ĢÕŃ5g±*³Ę›GŻø&—[ń›$jB$§•JJÜęnŠZ iŃŸę =é’iS^Z›“tAÓü)ØŲ›ō9H •.d‚W&<`z ŁÓmmČ“z §°äÕ NĒk"ZĘ#’%XbłIėYķ{‰Ļ–æ)=» å#rŹŸńøžõ”{įū{”ŗÉü©^r TWBL+ƦR—iN1]^¦éßeŽ<*÷äsZr"\¬qž+ۣ҇KŌ`n'§½V“M–ÖÕÖvĆ(ĪsĮ©p9^Įļž9b]€ps÷©×ŃłH7B¾µ™g1ܒ<†+UD<®{ÕŁd{•10dĄĒ×éJQø䊐ę!ęæ/zé4[4aŃĻN§ŠŸfZzX¾öš4‚Ęöņ5Fźķȹż_ĀÖh¹‚õsü•¬b…(œ­½“öNéŒP‘Œpq]›ż£y<ĀTXŌ·żįާޯDeģĶõ¶1į&˜æ#šµŁŚŻC°Ż42I·iĀ©2b»ŸŹœš®œ Th¢Ā®ī9=z śÆ…|įGPÓµ€5H!%”ćr·±šō§š(ń+?źž7µ[›éRdĻŽ tvž)K[iti!ŠēOœŒĆ"¤ōĪ+Ó³62učŚ*\_iöigk÷›hą{×1&‰ā¶ŁŻčLĪ«2JqєA®˜Iģf¤ī} ć<(,-l­ü+²éJä’GŽó§‡õ×Öļ®!†Džõye@~\ō­ AxŚĘ„×RFʤ”󆆱­µ[éo­Śo“ļpćŽ{ć½4ģżF9[ķŠĆ)€1¶³ü3¤i2_ļ,÷J„7#9lšE>f.ml{ō޽¾‡GŌü7pmf˜īĖa½€ĒjōĖ?ų«ĀĮkv[Q č¬b|÷8ļR7$}ašĻW¾ńD¦C„ÉäDŠĶ)\ē?ä~uĘüvšŽ¶·ŗuʙv¶Qļńŗ%\ū~4ŅčrTGˆj~‹P·»½ŗøņb‰åtp ®Gųףæ<%¤xŪĄ6žµGŌćŽ)NÆŹ‚8$}GėJZ&cŗ”ß“ƅ)šd¾?XÜkcLņ~s»£óÓæżz ÜlzG‡žųĄś »šä‘j{†ņ óYńŌJń oĘrk:¼y}<Ö¬ńKo3dķž”Ź7=cįē¬ļ“IõK9žĶØ[±XC)PHõü«Ž¼ÖįńwŒt‰umNKdk…K•Œƒē(=yąóT·&4ģ~ņ|šĒƒ­4 }Ŗ:€1čīEŪüJNkįļŚ3JÖtūæYiR,g‡Ė<œW5Gf]Éh×^+ų‡ygā+e¬£“yńŪ–ūĆŲ€+õ_ąv§eiö}?L–Ń5 YFō_¼ žå]vŲśGöšųkāļ‚—ņE-¬šŗL.b2’W±ü+ņ?Į^!ń^‰c…®ź7b(A+żÕĻeNéÉw3Ō÷kė›ķ+DµÕōVK!ŲBž‡ø#čZä|}āĶy<0šŚŚ<)&>@qŌ×DvŌš x¢óFin5;×X¢mÅŻ‰ zś“Ę^²ų‹įMÄ^k}i_“–“s,ŸŽĒn CE\ó’ ü5Óō=NŪūdI"Üv– “ćœŅ„ńŒĪån˜Ė˜ŽēåG8„•©·yń @¼·žĒšI罚?:L¦Š}‡nõ󟊠·¶ń z¶‰Į2\#$nÉäQLčGÜæęŠm4¤Öõ¶K‹ēĮņČĘĻRsĒįZ:¾³įf°ń<0Éey a„g±Ŗ·`¹š]櫪ų3YøŗŠ6Ģ~hہ8Q„zģ_¦½‡O’X1P§$ŸSC…cø³½o^ĄŃFģю_9*VńV‡7ü$ŽK+Ö:rĪ’y”ŚüœūńYN7%FĒčÜķ“ ßĀŽ"ņ¬ Ćó”†>>_›>†¼‡Å~,[ÜAĘ-2XłoĮ®*°wŗ*Ć.ńV‡7ĆūżĒHҼ†¾ńųż“ć’i“i·š\<ØĄ…pC㜟R1Z$Lž‡Ó*šÓ ėś_ŒĻYе[[k„ó-KF@o\žÕQvĆCŲ/~)x§OׄI¬  ]&Ł#”üŁĘ}Głö®WCM7Ć>/“ńęŠßŁ÷r–¶‰@B»ŗ’“Ś“b±õ§Ä«_‡_ōŁõĶ2ņĻFמŹ%@óŚNr{×åæÅµ¢ŻYkZÉv„£<`€=GZV)K”ó\–7–@¾£µz?Įj> ń¾‰­E%¹ˆfi qé[C±z­vsĒ,³£ó?ĖČÅjI$l¢'śUJQ•”i’†+} Ætę¹¼·E7iŌõ=?õšōcuŗKn¬„ŒŒŒČė§.‡³|ų—©x#ĘŠ&”p†odX."‘»9ž_•{?Ę-Ä? üoᯊ¢¶Ń5hµõ˜å»ŒtĪ9­<ĪČ3ūż…?iĶ+öŃż›<ń*ŅöŪž»[ae®[+€ŠĪƒ+Ōr śjū'J¹øŃČh\)žõē׎·6{FYĆ$śmˆt×7*W3"ņȼāŸģćąoŽzō/Ūšæ‹4Y4żJ؁²+Œ²€F7ry÷ĶÉŠĀGłšžŲ?²÷e’Œæ¾xŖ¼¾šÅź›i‘v’hé²|ńLžæ)\ŽĒŠųĪvłCmqųrµŃus–e%Œ«$ūÖ$Ė˳}s]1ŪS&b €‹¹5Pe›Ė’„śV“Ą{·$ŁéNPw1+ÅhDGķņˆ3ąņ8ėO†S+1*Žē½šOå  ’:*šóSÖ- ²ń†īOń^•AÉląg?$æ~Oą/jĖ4±Ł^LÓZ¢Į°&>ņśāŗ(³)ÄņŒGņį§µe\¼Š«²ŖzńÖ»`śrD 1„…t;ˆć¶iļ"¾ŠŁI{Õ”)&WŲ’>yÜ§Ņ$`.öĘĒÖ«™ģQrŽŁY·2šN}*«!S# éRTwõĮŪøóõ«ÖĘć$FB|§–äcÜR:©Ÿ»?š@ĻŪM?fĻšļģßń (ųM晒+ –„“¼`US“ĄmŲö8Æī+į|ŗ—†.µæ Ž]¶§ohęēOœŽf¶pcÆ@OŠ ēŖŗ±=³ūjĀkXõKp“G»d…z§ni–Šéw=³šÜ:ƹ¢ÄÖŚŌH6Éu¦rŻyņكśą¶:WšāļŽx'Ę~$šuČ?h³œŖ‚Oś£ŹõöÅAN:¹f:ȍ»wQU v«bś”$¹ƒ Tœ÷ż+'gcčļųŪN›N6 J‚²1?#z\·ˆ.MĪ£v¬ ş揽YņŁ4¢gĆ„Ėo%½Õ®˜×Ā#ē/͌8ä*żGų_ćŻÅ’ t-f3³_·?g½ŠB2Ū‘­ØĪåTI+ž“g¬Gw 6ŌĄ#5uāĒ5»(ł¾lõ®³ĻØĪ† Æ“F[©¬ĖÉ]X.~SӞµ¼V†FŽ“zŃBe=Mz;k¦;_5I݌sL é[ŸŅ±’³eÆrR8_cÆNš„Łą”>|ēžÕĻU”Ž®Ÿw'n8㊹$Ą0²ķõŹĶĪ[ÄZż½»¾ŽW®s^Y·ājvś'ƒ“;ækS¶Ä·“±“üDt­©Ó&R±śkū;’Į5õ?]iž+ų’=Å “>^‡nĒ13¶_ĻÆóÆŚü"м į;Ā>šö—į=Żv·Œ)›ŻS]It2”»žˆt}+NaÓcóo”›«¶žkņ³źłf„¢¦c)m½¤‘ #AĘ©hČPҟ*DŚž­›į¤cŠ ę&Ögø}ūžĶyēŠČøĘē/«xŠ,mŠĖ·†ēšłgāĒæ x66š’QGb÷aĘå#×Ņ—-ĪźTĻÅOŚ{ž 7”ų\ėÅy$×ŪHŽÖŚPKz µųcńÓö¦ųńĪīź×XŌ/¼?į#ĢV0JTL}_žuŪCw©³vGĖžeŖĢDq 1Ó©õĶTĪ%;Õ÷ĆgŠõéÓQZœUgbFg2)e!@ąŽ*ߏĖcŠŽŌÜĪITs1 W>•« ®†MźyüjŒµ5-“瘼J£yéĪ1õ®ßBš­Ę­%µŽ…ou­krøŠ{XŚRĻŲ½+ XĶC¹ūkūĮž"|\kOüvI<-ą”h“ŌfW™ORŻó_Óļģķū/üżœ¼)c ü/š}މ¶%Y.0ev®zŠĀs,ś9m£Wiv/˜NIīMXŪéĮ®VĄ…÷Žy©WČĘ*%°¹–Ā–Šˆ÷¬±V1o5xķ–Mؽy_Š|n-łSēo”¬NŗTĻ›¾ |h³Ņ-–ćWŌ–ŽŪ8'pČ?~z|Tż­Ģ’gųvŽ[ĘÜÅēWØ=3Ļ5„8\ėQ±šO‹ĘŠē©"O¤ń§„Ķ3oŽŅÄ­ĒĖžF=sz>³}¤ß[jv—<‘J$e`lv«t…ķīž/ń&āM'YŅķRÖõ׿%FÜä/`sSh֚ˆģnÄŚ˜“¹‰AT#>aīpÕ 8×2¤æŗÓ/ę¶nc@õ&½ĀĖO’ĆG±Ō,obĶę@Ü”Ļq\.65ę¹×ü3–ŽÓÅQź—+scØĘUį_å”Óć_„ö÷ĀöĀ+†@ĪŹ KZqv wŠ|MØxi"Ōæ²®µM0‚²“$oŒśąõ­‘}iŖiÉ}jŅÅ"·Ī9­„āR·Ō-ī Ś«2Ü(Čć‚+BĪfE1Ī>\œ7­kL‡gM¦éw—Œ³™Īz:Ÿ»ųW?Øh Įo2ć' Ž¢ŗa± ,åļ“ķcK°žŠśUژę\äH§Ø"¾ ńēĀ”į]F’ģ:¤Rh-.mņœÄlŸņ)Ź7+ó6k}ku›RHāF ¼œ”$ć&µüUgqnæoi÷¹Ͷ`8ō?*ęœKHēķ>kfV¬ø8lAü+õCöAų‡į?xBVÖ>ĶÆB6~«”ćœōó¬J?H~ųŪBŠļ%Ņē‡NÕ-Č+–PHŗžµė²ųžŁ.UtęŪüüŽ•½?3 Øź>֗#¹;8×kcakueę żżkŗ™Į5©‘wFģ…†ÜąVy…-ža“Œžuf|ĆfT\J‘ącœwŖĮØIåż€.ĘąĒŌ Ūø°žŅÄKs "­Ž+†–š<ķ*1掆‚eɊXāO7Ģ,9÷§­¼ņ0–8·(9éAœ]™»ˆŃ|ĮCTŌ4”ž–3ėĮ¦sė¾ŠĢąö­ %• Ōu’ÅuņĄ»ĀØŻźWPŗ½£łL:ZŚ1°ĪSÅ7׳ZMŽ«‚¶żš+zM"ŚUŽ`ʲØõķY 2¹ĶźvĶ9bqUeŽåv¢Ž¤3UŅļµ¶Ł4ŃN£ œšĢ“ŸT³WŽń7ʬą€G°§bŁZęńŚF‘WĖ}Ü v®ĒG¾ŪČöäńŲsA”„Š–ėQ:‘0Ť€|¼`­]²Ņ/R×|ņ .ŸāśV‘‡sģ+Ÿ“.£®é֟©Įhė§^\Czżzę¾uÕ5ké^7†å£²ų}kŚLPŲ÷‡ŗdŅh&eH‚Ŗ“ˆ@ūŹ< ߊ“M[ÄŗŽžl“„“PTiBȧ0yäø+9n]µ>ž°ųp|C§4« Ś\„»<ńÜ (Œ\ĻĀæhńŽń։k<·DĒ É‡R~č=z‹ėc)Ęū~xĆ>»ńW†5­é·,Ģńożä{½ į€öƌ~źSx[ÅŚMÕN$ 7ędēÅ5>‚QgŗüEÕ“oj7O§Ęb†g, ®øē?y6Ʀ’f[„­²}ŠéSÄ}ßCŠØK j8»“VĄ³>äpÄō?…{…¢_Eg ĘŻRF‹ĢĖ g½jK=“įŒum_R‡B›CŠŽRł hÜē=ėééžxBóR¶Õõ-Jņ-AWå€0ņŪÜ õę“ī'sŻü==Ɔty‡^?“ÉŽHŁ—ß ÆŒ~"üiń6­¬ÜĖ­ŁĮk5± ˆÆ‘åŽ:¦’™ƒ‹źy§¾!Ģž·Ō4ł¾Żop14j„|°{’*śkö$ų®ųoį§ļķæŚ|£,2Ź€żÄüéJ„£&O%‘ņ޵ĖĻ‹Śž¹wƄ“¹k‡H e™÷ÆoZxCR¹‚śe·ø€Ty'8“éZ B&‘m6Ž£Ćž?}PÓåk{‘bPŪ¼æLׄx³QƒÄ #Oqöœ üćļjѳŖ2čXųQšXń ójŚJ#XKŚI d÷ž•īV?|Q§>£ew%¬0Ź>B™]¼c®jKęŌó»Ķ\ųLÓiŗŻŻĶśØÜčö{fø‹ķoĪž{>ܤCę*£'ó –Ö¶;’ ų„,"čH|ŃņÆLœq\—ÄæxcĘ×k¶źś>¦öķĄµ;Ł ĀNĒ1į;? i£NԚk§o‘6v« ėƶ~#[†+'“7›<ŸB)Š'Ņ>ų“ć ]A®ŪĻ;é„,BՔ^qœž5ź)ų¹{¬n–ż^čåĒógŽ“E­Ī Åxb{Ū?i–lš“Ą žSŒČĄs\uˆ.¬õk[N¹¹¶»Ī¾LńóÖ²’±qģ}1āļśŠ|ké¶KČÓĖß mi Ž­’źÆĻżcSŸÅ·ķØßZ}†ā%8 Œ~ZqÜOš?Ä ;ķ'JÕ5Œ-:Ä@č¹8ęŗļŒś.¶Śmģ^Š+”bJŗæČƱśUĘFNž§Ź³Ég¤i—_Š»ņ×ĢaĄÉ8ēŚ½?ą×‹¦šĖŻéi5śh“)ČQש÷Ŗ³:ˆ“»˜õX,Ņy­Š”$;lwÆvš·ü ¤ü½Ō<]-ęØoż™¤ }˜qÓ„!ņŲłßĀZ7ˆ|E>­wkbn¼?LS$d±^䞯)_Ć w~n¢”418 øļM#U#¼ÕnįƒJ['Il‘[ϵf­åķĶ©²A,°JćžWzÖ>c8MKĮW×OošIv‘“¹³īMtmą­NŹ;dŽ8܀ z zzōؔŗč:’„RÕ„»“ȹŚX±_¼lU†¹}j÷N3“6"e*cœœtéPTQ§©h?®Æ¤ŅĢf’L]Ł‘2ĘAŽ1éõ® ųĖĀ72hś¾…wØŚ/ʆŽ2呸äö=8©’LŻ|3OųÄ·zŻ®=ž—z<łd F1Ąō­Ļė0x“WOoHõebé<,T±#‘ש©ä‰Ÿ2<Ä~'DĖ5IJ\!äøåæęü9āČZ±‡Qy Ņ^eYeQŸ,w5<ŗŁO¤¾"Łipi°^C%µĶŒƒr¼†Hżk‘ųUąÜėöŒmūv\Ÿ~ōā‰’ŠŻÖ|%į=sā¤z…Œ°±EŚ;į•ųĖ`Æē_«? >gĮRj¶vśl6H»$bĄa‚ś/ēYÉ;h)h‘łēńĻŚæĆYŁjńÜM¤»ŗ1•RóÅ|åń‹ÅWZ޵dtÉ?²'E‘Žpčq÷qŠsš"“’<»Rš¤öټ¾Y‘ÜĖ“ódqÖøöÕl<ę°ē<ź½mŠÉ³²šWµ_kšV¹j“^é¦B$„©Ū"÷ēŽ¾ŌÖį]žŃQiZ§:čž!Ž-öĻl‹ÆĘz‘Ūń«±ćŚGĄmwCÖnō{«—æHä'ĪĘ;b¾€·šŽ—ąH­õmZÜłmFÅXn ‚2>ōĢdŃņę±āģ&ń,z}ģóŲ]&ŸīśtÆ ÓµGR½•m|ūŒ¾ŃžvšV*,ōāx^ķ-õė2Ö¹Ł3 ĆÅ÷ćO‰oM„½ŗŪź:ā41<ćL³ń_ŠüE„i>ŌÆÖńgČs,`ēß|všĮš—öe¶³ļqu‘Œ˜ūųč?Z ’GČ:®•jŸheٌ2·c\Ś$H© !ølgõ­ Ģšč~üń³ųæĀDr¬?h¶b` žzWµ‡É`Į‡Ō{Vī72”l[–Ī+Ū Ė[ėDø¶’6Šh¤ ¤žæ,ž(ü>Ō¼āŻOKø &›!ó,]#*»NÓō®n]u5Œ»U-£5“ģ$x²A ¼`Šżų]Ŗ§Ę/…2ųKZŌĶę±aX¤‰0WŒŸŹ§”՝±’ąæµī«ū%~Ö šÅå®~ųĪģŲæ;E•Šįdlž¹jŚÓĆžT,ķo"‰ ļ”Ź”ŗg«|9ÖåH#°Žń–g`˜Ļō|Ecjnp‰H\dūW;ZƒGó›’śż‘æįl|Š?kļ‡WŽ>šA6ž#†1‰ots’w{Ė' z1?Êž(üKin—QŽéźńé·kē£÷˜óŒTŠ,œ|ļ÷’Į¹Ļ(;=Ē™ lÜ{⹫Ęi$pŒŅF½‡­vœķjgńääģ?˜ØYŸämĢĒÜV°F.E•`^?”ĘÉK–lņńVU4Ev’ ćŒö©6ŖÆR{šŹR¹”nŁSh$żxÅk[ÜQĮućūÕM3õ§žĻūkOū~Ś:&ÆźĒšKĒę=WµWżŻ„é;bøeéÉ;Op=+ż ’[[Ż1MœŽ|aDÖī?å¤L2§ņ?˜ØØŗ›œķČi`7 „²šĆøÆž¾1ü;±ń¾‰}¦Ü µÖČ0IŁæĶyÕ#fēߋ¼1āŽjZˆÖÖ’TÓ×fųČe»·a€œ×ą?ķēū;®µ„ź—Pi÷S<y„O³ˆöēåĪ9„ Y“$~ Ķg=»Movī.#sn$QYņ¢6"r[oJī§.§DfH H 'ʧ•”ÜVES€}+s™y‘J&ĪÖ z÷Ķ#H¬P¶~AA²'ŽDlKDÚ%ĖHv/Ė’Ņ‚“± œ>åõĶKĘIE¹œdŠˆH·ž“„źŚĶ•ķ֕¬ŁJ—÷åL2”Ź‘čr}šL?Ū[Wż°?exÖÖöņ‹¾ x“ż}Hęś00Ĝ|ĄÆĶ׃»5ZŌåŠż—š¬zL×wšŽ•y#čšÜk!·'ä‚la¶zsēÜ×§h¶×Vš›[å,š±Tn̽«†¬M¹ŹZōVy’ÓR“‚÷D¾­/!•r §pčF ėؚž’ą³_²%×Į‹ŚĘ·¦h³Zizc­Ż¤±Ćņ_éS”ī¢l”ōĮ¬EĪ~ßŖ][¬ö®·žsžpÓK¤Ā7Æ­KfI›š5ä¶²Ąbaלœ`W¾Ųé¶ś…€™\ČÄpfø+ŹĒMŚü¤ish†+ˆŹ]ˆś‘üYi~j—> ńÖ£§j)ooįkÓÄĻ÷ųż²”[ŽŌŚjźĒל3 Į\dĆ£f»˜äe …v®8’j½ØJē—^6ōÜĢvÆ@j¼Īņ(BŪŹ÷õ®˜lr"3H _åRŻk˜ž;p…ķżF­ ułYāNĪ1ÅqšĀ֒i%wĻsEÄmŪź®&D»A5£²{šØ%Óln]™s°) £CKŅ¢HŻd×vŖĶŖ^čņ Wū1É#œb‚‘«4vļf—ēĻa»§ėV“moK0BĆõ”¢Ō:•µ[$Šn–÷M’H'CČQÄU‹håń$\];” šM2ż…åʘĻcä3ĄOŽ#½h鮍zn¢2œ…=(5SG«’hł–ń’±¢‘Įõ¬F&˜µ°ņę^ø=h(į5j‘½ä2@±Ā22£,߅jh÷w f$fŹõ(3”NK[ńM„rĖoä8eī!«®ŅrĄ`’ oź6klą2‘ŒśŠ'„E4·2;rōéZ·×!d1ĘG^(3Ņg ”Ęs‘ī+Ѽ9ö˘„«ž_\Ó„Õl­¶vą6ząż>fµ’E3) ŸZĪL²«^O,±»=)ņąHI@‡ŪŠĢزgø>ZŖ€ žµI¤rćųæĀ¦Q6-G·'wlzU7ŗ–Śbc'Ö±6ŽĒ¤xjźėRˆ4™&O¼ v®¹ā‰Ń|ōx$źAü« •cæµ·K‚ļMü õŖŒŽSŹ;VŠŌĘQ±dp„Y˜œÕóo L²2üݳںL\Ķ*ȁ‚øĄĻj$Óćcź1ČØr±7hÅ»°šß{F„c¦C§I-ÉU+–ĪF)ĘWfo.@K˜ŪčGfį‰6(÷Ŗø'©ƒ)ö!lšvž’\L€»= c'sHi ˜ŒWeŁJó·k³Ņøgp_'$q\³Ō”ھ¦– ūžTź„pZ÷Ž`µŽ+!šSµcEÜĶō”LŅ2IE|ż~2~Š—ztśüü;š ²d¼Ō"+%ĢżŌSŽæs> ~ʟ >éK„ü7Š-ßU`Ę„s2LŲź¹éŽŗ"¬D„Ōś›EŅ-ō”[«¶ūUß^y9®¢KkķP!.m`ėŽę­ŹF嵔6Č4P@ĘqÉ«vēž•±Ļ)t)Ėyo Ē>żėWŌgŚĢķNķYN] !…¾Ōā‚Y3q?<“ҼÅ>9“Ņķd¼¾Ō­­aO”–l5e8Ÿ™æm? |=²Ō/u?Ca§Ę\yė(œasĻjžv’hæŪėÄæu ėO\jšVęY5—iÉūŖy®ŚN¤ģĻ]BöėPŌfÕµ åŌ5 gņ~olōØ%•Ż–,ĒŽ{WÆJŸ*0«WKĘ  qߌQäēq#kŒ%.‡›R”}¾Õ³Š•bŽĶåĘ;óÅfaĪm[Eæ|kćŽzéķōŸ*%Ža8•Ū$hYänøUėS-‹?C?dæų&ÆĒŚŪ[ŅÆ,4 Æü7ēS¼…”—ÄŲÆź×öP’‚f~Ī²ĶŒhŚ ^0ńĘūėå ŃæræŽ>•Ė9tōb8Ņ b”@ģ*ŲP+–L¢¤Į»‰:ÓwŸJŹR*©$ŽY;”ā¹ŪļXŁeYĘļC\ņge(ćĮ)-āÜKc޾ų­ūHų7Ćv—zTz“wZÓdFøūsJ+Sŗ Ēå÷~&xĆĒ~÷sÜĮ¤³lŚ„ōś×˜ŚXdŽdœmł‰<~5ŪH%3B 2³øÕļ³ŚŖqŁü«„Č唆EÉ'——ēµuŚ?ƒoµ ™U’6Įt¬'2l{O‡ü–~O™ ė^»¦čq@TR’÷ō®iK¹|‡Æi E} öĄ­ĖöN (Ūž3X6fwk¦¤‰ę«ŸJŲ²Ó~ĶĶ»y§3«[Ļ ĀX$ł[ŖžÕŹRM>žģīĪpǚŲÆ|EēŹˆņ«»{֝Œų@*ĖAƒ-ÜMū–LsY“‘/ E{Łįfł ¢ćM%Ž4)qR&wō4 •ßjĪ… °,ƒŒōÅ[ҵ+Źg–i>ĢÜmĻŠ¦ÄĶ}āźĪįĘz”čj)/ī3Č$KŽłéõ v+IØ3H‹2cĘå¾āp#;•Ņƒ9ÄĻÕm•‘'ŚĖƒ“čkϼG½ŚŪł³O˜œ2ķr1õ’ ŽŒé<7ØłQ’$¹L`:TW–ųŚ ±ĶĘ„ž‹<ń‹µ õ¢ī yā)ėĆ{ŠØxj×Åė6oz,µū¤¶0kͬü āŸ_6Æķŗ†2.¬ŸUķNĄzÄŚŚĮ%øuwWs¤“—–źķ; s­#)Ō`ŽH\ ĶČēČ"ŗČp™Ą4twWvoŪ4n9ąŒę“Py[l #ūPi},7BĄĻL×zĮČņ(&ś˜“]Ķfą…FSśW=ØŁ›°Ļ*1ē#ցó’ŲC(ˆ HóćŽōٵ³T#9śu –ĪŗĪäțÓ÷h@ł}+¢²w˜¹SĒEŪEŗc†]†¼ēZš¾éW˚WfźcA¹Āj¾ø³tŠā†T°ķ\>Ʀˆ£qÜąõÅD„Šø#Ē5kVyYP2œžµāž0š}Ź0Ō‘dŽNŽõ©†ę·??i/„ßXOā+;+9/ćBĮ@ĆäsÖæ7o-ݤx”P³ ­ĮSč}ė¢śõ$Ķ{‰mćU”Ŗ6õĘk»šÖ¢œĢb—8Un†°©”Ēs«¼»¶æœ\[\gą°Ūѽ+·Šõ»°öŃÜ«¬ »w޼ꔺŃŲō’ ĖugØAvdO(ń‚~WĮļ_£Ž ńf—Æčé*ł•PFpŽÕ‡²f°FīŪkŅ-H'Œœ`°ĒćU/4ŁĮ62Į8ŚéZ%m+õ(Ƥɦ“%ʰlą1Vn|ńžUć^ dr)ÅŲĪOA XHž`b9¤TŸ{”®ŗdĀ]³Gqn#b‘Ü(#dzłŪā…lµ½7U“ŗ¶G.¤&Ž€śÖ‚”µ?8µ NuGIIšĀHg0”‹)Ąć=+COš®fæūN¹j…P XĒ)”v&¢e'©žÅ“Ė•²¾‘#r=¾•Ū|;ń–³ąO[xL¹7Vķø·ņų)܌rMa$†~¢ų7āā]GDń“4Ś,މĮ— śŽ{fæK| ¢ßx£E]J†įBb¬9śSŠ0›Šė¬u8ō‡]:T+*¶9+¼³Ōدc'šė¦qĢ‚{‡¹¶C{V¶ž¬Ī‘Ļqӑ[Y§éś#Ūµ¼šÅpāøsN]*uņŃÕ¦3/Y×Eę%“ĢQq×wė^Of“Ē3ŹĪ%\šqڐ¤ģtŸióXo`3śUÄŌŁ?.Üć ńAr>ņsˆÉĻÖ®n„¢ää‹‘Ž)„}™Ģ^^%ĦX®G~+>_·,y…˜óÓe‰Ć*I–a „Nņ”+ī3šó]gĄvZΦ5clϜ°jćrŌģzG‡ü3£č–ĄŪi‘Ł\¶*1»ßµķZņd5®Q‚pzŽ(”Jö‡Ē< ¦k>$]cū:9oQЉT|˜ēŸĘØiZŌ‰ ’Ż8Ž:­E‰s=SM³ŽXHT]߯­«[O!‰č“HĪMō25ay4ĄĀūćōō‘>dĀ9Œ‘“ĒJ MHķįč@“+NĀ2÷”‚®qĻj Œ¬z-φąūa”f$Čėī+ȼE ŁŽ4±‰367c§ćAŖg“_ü5ņšk‘t'µćzŖéū®ąX Ļį‘:“S=n¶&Ń,m&’?(Ém Ęæ½{ļ†e6ń$SĶęmČē5‰‘ŃŸ¼S. )ĒLę»+_2ź!pé…ōĘ9÷«‚"_Ž0Ų6ū՛ķNĖN…„hÓi\rzšŌgĻ>,Öķ..®šĘĪ@īRų׍­źźL›rHcn{Š>VV–+˜¦‘”•ÓŽ}+¦ŅÆ®’#ÉB§–ŲĶCó¬swŠ+Źv²‘ŠŸZϹ±KĖv·–i”Į(åHĮĻQY°"ŸĆ·Ś¤L čƒ#ž ®³MšĪ£mo ŻŪ¶Ņ2=é¹uc§įŸÉ•/s…{UoģŲeŒłd‰Į v1īŁY‘ŸēĶ-“WW ūT|£9ĻZfŃV8?é¾"»·Ū¢_=µĀJēļJ·įE׬,V JigŸųŒ„Ö±hgG!ø—c” Ī=*tŠ)–LļķMŹĘS&‡N]¬ M¤p*ņé7É<`ĻÜūT¹-ˆ¹‹qiyę)Ś žŽ1nĻmn$Ÿ8v5&O”ŻźįÓR“Es•ł[µiźÖž}—Ś!³WĮķ@Īn$¼…D‰‰”ėL’ś”JņmrpsNĮbķµų”ąH®r+;SæeŒ .Žō•œ<šŹŚŹG0\ę½'LԐiŹöĻo½ÉꐬsZę”-ŃI$sĄŚH<jäR)–`CcöKš4Œ»–ZšNĶkmhļ"Žø­ųķą›Mv•¼¹UrV”Ķ–yŌ÷2[ŗ¬Sb=ÜäcмśœéČ®¶Ä;žG;)›s®»:Ø–^§k³Óõ 9£µ;„nW%O5WŅČĀQ±Ųh­kpÄĶ"”_˜z ź„vÆ2+HoŽ8å¦ģj½ŖčĀ#’!TņūĀ©"“1žÜš~#.:’Ņ«jz|š¼&x®?¼0M7ę/oiw#ßŲĶŹHÆ»pścŠė,„–Ä"…r23FĘ Ię“}³Ā¾Lżˆn×ÄąCöY„™N2N8÷­c+‰ŸĢ'Š<Æ|NŠķ䳌\¼, 98ŽqZóŸ ~Ļ-ń=œW0ÜAe}m/“5¹9Į ‚Üö W„sČśÓĀæÕņ§Åz=S_øŠœ™Į+ĻįYĖr”Ł|)Ņģ|NtŻ:ż#fg*U±‚AÅ~ˆų³L°ų?ąD²“HÓķtėūU_9“IĘ@==++čC]ĢĖķ,¼o©§\I6™%ĆLaĪ‚:ŸĒ·½væ|’ ĆŗCxr]7QYBĪz^µq‹Ńö%hxĶ—‡/¼'ŖI¢ėzn ³@ꊌ€ż Ÿīšū+Ɵ³ķž±š³EńG‡ōõ‰Š4ŌeÕĒš· ’ŽÅyžqū/xƒÄ¾ń|ž×Ę”ö,DR”F{§­~„ź·Š]iļ*Fʘū®Fē>ŌŁ£µĻ–>1ü5ńOŒ¼1«x‹Ć·sĮ{§ÅēÉh3Oźn+Ėgė ųŅė_šŠ£4¢%xf.é¹kHÅæ#Šų‡¦j~ńE–›¦+ŽiĻ6Ż3å©ļ| ē|9¦IØź”'ž%Ӊū„cėYß[1ž‡£Ł|šÅĒċx­5GÓĶזcg(}¹<}M}S©’aųDŅ<ćĮm&Øģc“ŌvżØ’pŽ†Ø¦xOď€ŗŒu½#P‚ąŲÜH˜»Ž L3ņtąVüæ 4Ļxjź4Įu3G峑ĀaT¦a)>‡Ę.ˆ4’ˆęņņeŃā“>[s'ū>ėé_Ś3PšÜ>Óešž¤‡ÆQ=Œ“fX˜˜€=źł‘“9ߣ«ā„Ē„`Õ¼/-”wś4¹ŹČŁ}„F}źąµKmrö÷LWņ&™œĮ$¼(äń[)Zœv§āĖ-bõ­”)k,±±žOć^šēÄz×_dŌdµ€rÆ0Ę~f”‹M™·ž3Ńu_Ķ”° O$šÆéŽÕė±ųgRøŽŽŻcŁrJœŽæZ‚”ž>6xź$2h<é«F„JU°Ŗ½3‘ų×°|¹±Ó|`×-¦ßē±'ž§œk9'cKžĒićū] Å&×ziė 2Åęz’tÄ~uĀ|Bń-慼Iį[‹k*ęķc¾·# åæAŽj—3“?Peµš7‹žŁcM³æŃŽ$Ū €+G ‘ŪØńgÄ߃z Ī/¼#o‘qo#lµ9(TöU8ŲĘģł?āwĀÉH¦ŻĮ§“‰3’a ÷ėē]+ĮŚ„•ŝœ÷¦öI.1æÉĘߥvā•ģĶį&}ļ㯁ŸŪæ³Čń7†5&Ō ×Š^Ōõj¬š¢YE®é‚a_9äąu­išÉŲķ$Ō< ௉^žÜÕmV…üĖ9 —€Ž[ńĒ=ėķiu»MNśE‡XŠKBŸ»œ±Ł’22qŸAU-ŒŒ?‡¾×¼YØėz?ˆžĻor„Ėi2Č6Ožļ¾3^!Æų‹Qš'£»·KŪ­ę(®§“Žp*ŹNįŠĖųńƒXų§ćokmµä kt–²Č䕑Ił˜Ī¾ś¾š»Üčlš.§œö{ćł±ę1NTcńā¤r‰¦šÆ‡4-kūOYҤŃüdWeÉgdPzcėŽ¬|Iųqećæ Č4-&ĘĒ[XÄѓĀ9œśƒĒó W>HŠlFŌc3Ė—ˆćal“öļŠŅų£¬źŽ3šę–/,üŁ-äŲ—\–až„ž8ę.j2I„^Ū"Fį‹Äžāø-f+‹;ƒ ŠÖ® ŪįWÄ­KĄŚõŠŪ–+2‡(ÉķėŌWźg‡õ[sK³×l.<ŪiNyźuüEt©Tgi-ŚKr\“׹?</Šütö’k_ßŪ°?3z§ł÷¬&d§©łÖ±Üö÷6óĮp§kĘė‚ zGĀoÜü5ń<:Ž÷¶Ó]‚\"Œ)\õ"³;)³é?Ž‚ā}3āo‚Ś5ÖĢ1^Ē$Y_Ną21ƒĒė_ŲļüöĢŅ?lߣ'¾$¼{Dų•įčSLÖķ•÷:2 rzóß÷ÕD¶;©ĘčżŅ5ģŪ¤¹…Š€ĮæūĀ:µ×Šō9®upøB:óXHߕyā½FÕ“æx[Åŗd:æƒuĖ9t­bŅTܒE"•Ė/qÉؚ’<ŪcöcÕeÆŚ?āĒģ÷s¦C™kw.Æį‹‰†LŚs¶äRIĖiĒLJÉĶ)§ßO×üĢd~{j…’HܔeŹ•ō5ĒH!ó"a·æ=ėµlqTEVTĮ'p>µŁČ  ūÖš9^B)ghŠ«€Hą §7™?!$dåTBž£ŲŹ…¾qÉ­X¤‰ö+es×£Ö2čĖZF” Ŗh$ņIRGćQmltÓcµ=µ['“†Y!•1q £mdNQ•ŗ‚Æļsž[’OŚæö]Šüć½nā_ŒŽ ¦źŃ_ō‹ŪP6Ē>O.óz©Ļ'™jźĒTOŻm^+]‰wbĆĖ”e€čk‚汎u–ŚLŖæ#=«Ļ¬†|AūCų(Z’aüH·‘'ŽŹSc¬[²Ū7Żų?Cė_ |gųIoć ź> ¹Č®‡SŅgb0Ēi%vČ=EsŽŻOäö®ų9wš×Ēwš®šĻ£^IūŁ ĒŁęcų×ĒרńĪŲĪ»čt9źĄ¬¦WVŽŖ¤ć€?Z<ŌVŲTīśu®“ŠQŌ©)2Ģ]žęxØåPwm=[?J †Ä°"Jš}ź[fĖ+3ś“AB33æē§z *œ~ļüh.žę¢„“Bœw{Wź‡üÓöݟö2żŖmtß\Ü'ĮĻÜG¦jŸ÷VW.p’²tŚ9śRßC¾“?¼O…ˆõ ZkŚ:&”cĆӗ '™ŽJś’N¹i­TĢ@™ükŠ”°Ū›t¼ImŻ<Č]x?Ż5łŃ’żmž:| ŌµDÓ£ć G&c‡kķ9†%‰†>l¼T>¦¹‡cü÷>6|9¾ų1ńC[ų5­Āč¦V¹Ó&až¶%‡Ō ćšÆ ń b)üĶ„§ņ„(čB†—(óC’†įé_Ix>X£–ŚŅ ˆ¼¹ŲĢŲ=æZįÅF覑ōN‘”j6· u"f7]Œ²½zŧ„t÷ÓĶÅäpK‡”Į9ėҼˆŹĒK=oDƒOøŃZīĪa2Ū°IA8hĪ8$Våµßœ©2ŗ©Ē^•ļa*^7ghš¬Ø"¹É?€¬éžPĶ9ÆZ{] ¶—Ó­³ vUĘ UŠh啰]×”5B5Śy#Uw§j[čFĝ¢#wv rīäÅ*Ē l{f„³»øRń€6ć‘éA<ē[£L‘[ž:ɾ¼óē0(ų…ń¶4Jć6¶g®B’z·ŠŠŅū[Kh­m-o^ŽŚĘÕ6Chc€„_ƒĢŌ·[éqyQÆB8ǵ39¾‡c¦i)my’½¹īÄä„n ŚŖ*ē4åŠFp¹&°Æµx”ü†ŹJ¹K ¢®pśŽ³ #O|Ėæœ ó\»ćke%ÄĢ!³Nzö÷¬ŽŹq>ųĻūhųWįõµćX^Ć<č­øÉŒ~5ų5ūP’ĮNƵߓéžiµ}NBc.¼[B}r:ž½*W:Ę|Eń‡õ9µ_ź×ŗŪ±‘¢y3٧JāRet#Œ£½Ŗ4ģe:yČ ņżzÓÄ[¢Īģ·ó»‘ĒR Cą(E^†ĢŹå³ņ{Ö4ö5`Ó÷“±·`õŗ½HŠF’9ę©Ń]šϽ Š>‡ų-ū9|GųĻāk ü7šēˆęiŃ&ø ESüYWōńū’Į¾|"†ĒĒ’ĄńæÄ)\M¶ņŃX‚ĖŽ™’ Ā­Nˆ³öŪFŠ4 iŠi>§h*(T¶ Ē®+¢†Hd@`txś|§Šį”ÄIČ3¹²•YØ&{H^“¾œŅ–ĘI lqĶP¼¾¶°ˆÉpįėX4©Ÿ>|Bż |įV–ĘćU5>H‹[õĶ|wćÆŚĆv77ŅjØ.@;#R żkęi®gÕē–žåI½”īy®1ųV°¦\ßC×¼!«čśo„ļü;ŖčŻĻ$†xn•°čųč}WŚøi"YžH„G'ÕŠ‘Ķ7Š„pŽkµ«¦ųnīžtD%Aö©rD¤{†<%«ł²D­Ę0“^Į„ųzXT·Ž¾€t¬Ü®kž” ųn}B7P‹/fWs£xwOg+uē/Z††ŻK§k[1‰šē5bÖ'ÓwZŻ@UńŒć„dābX’öT]ØųEä{V”zĢ’g\z÷©"R±Jkų»œē§„|éćĶ[Q“YE³¾Ī¼N¤ūŠč"[–4÷”GŌD“ “Šö ‡ōč^Ńžpw©r$ĻŽęuŲ$c}yw’Gt,{b…+ˆ£$že¹2ÄL§œT–¬Ÿe8s»ŗµPĒLÅpįVķ¬'W g@}h­xŪģØb“l‰ÕOS\ę„ws"ļbĶž>“•§ź†6 <.6žC ~UŌ[jö7R­ø‘bsĄō¦•ĀÄś•­Ä ˆA\&„¢Ė!•„ŠŻiŁÜf–Ķ§Ü Œ $mŚG¬jņI+…·e\ś Kiō«SjĻcŠ?ō¬(ehu#u™ĖŹNA ĀX­¦ž+Člį¶øŚ2PwŖ’<čƒęf€3#I¼’6piUī,s,22Lō ĘDŃ_=Ź:ČĒueĻl’oI@aŪŚ€QøČšā6Td&.*’›!vŸį=(6HI.cT(ä’?•aj²ŚŪۙ×9éļA”·<³PńJAxŃŹø¶$.G8÷®ĒLŁ4m$,&·?tćµJŪ)+,‰`‘ž+ÉüQ®>”e»5õ¼x,#9oĄPTcs§š·‹4ŻjÜ<lÉŚUĮVSčAÆH†į’/)YH#­ū25‘ĘGĪ­gEmxnĘēóbfļÕh,«ā«&–Ž6hä;3Ÿa^­É¦ņ]W?ެeøŃ䚽ū‚š˜¤”6 ’Ōōš²A`Wø¬nīkĖ”ó/Ä/A4ŚOd²Dr=Å~9üiųsqįOØŁ :dņø“'H)P}q]0—C&ŗ-sg#.d_•yéŅŗ’fµ¢& VXS'sžŲ5bZG-ž‘ؤv’G>ćęü­Ó>¾õļv²ųjēKŽöxo`”®Ń·*øõ•ĢćÜź„Ģk‰µ[hŸWŃoZžŁFŅ„øQėŽµōĮŒŚCĖo ė‘eŻ\·• ńÉū°Ą’#Œ’JŸfn„ŲūF "ūM½b吱÷²#Øö®ŪūGģź’Ü0d^¹<Ō:w¤Z¹ń”7zi°–ĀĘę’²²žńĀ¶æ°ž bw6÷£<ĻŁ£žNåhoŁäóĘ1ŒexÅ?XÖ5 DŽŅŃbø¶–ŪĪ}+jh“źųäO#Ü’aY«Alķ|©Ń)É.å?Q[Å\¾=ų_ƒėŗwŽ“­>h$ˆ“t‘ƒåäē¢žF¼ĻUų…ąŁ“&ę×S cWPT=ˆØ•2“±å:_‹“mzöāŽžŚO ©9P6ø=Įō­mHÜZ<ö°ŻĮ7$,š«Ś¹å”ŗ3鯃֝«i—6„Au§•!“‡’õWé7Į‰Ś÷†¦m3PšāM'īG"1ĀÆL7=}éĒs)-³„½³Ō’;«+Įv ¬™Ē#æ5Śiśģf³®07ÖŗéœuQŚiVor#–2uėŚŗ[mJ vdšĒ½ėS™K¹`x‰ `¦t £æ½Gys>¤„É#“ž×j5¹ēZ”w{ŽÜ¢4M•8¬Ś–ˆ+”'”ķō¤DŁuēŒĀĒߊĶ[˜|ÖłYWū§š Ķļµ”v•lōŖ:…Ŗl[±ĀNŠzrxžtb-)'„Oo"Ė~zV’ŲĒ”>zļ;q֛eF7d§Ģb$)ČĘ*ķķÄŠ>㙣Ę8Ņ5Jʶ™%Œįu§ 笋«(¬ē‘įUäž+hģ1Ć %•Ąäq]µŻ¬6b9'Ž9źqšr`xž½iöé'ts›² węØi°b­Ł÷™½cp%“·šĪu‘%mø#®ĀŹķŽI  ĆøėHe±ŽĶ:¤s·KģÉ.ęĢjĆ׊ ¤ŹšX؜•<ž:÷­TŅ'†RARÉÅh A“ŅŻĖnPĒló^i|·ŃŻ #—uøo™r?54„ŗßŪkl-®Ö–ĄĻµx_‰4ķŅāvH bł”Œž8¤įŲŌāķ%“!‚*$Œƒ]ž“ńDĻą®3€zV2‰.Fż–¢Č讪ͻęõézfŗ“*Ä\!nĄć4B$©kc”T±’Ūs OזĘ}«ÄœÖ&ƆīÉ»šūŪK €į¢6FM4ęG)$K¶BĢG^•ĪŻR!ŗ7ómŌ—½&ĢęVÓī#’EŠed~¼ō®‚}2|#eZ6ī;V z„Rڰ][Ē$#×½zn”¦EyoXm§*;})žG­é’Ś;C~’"6@#ŠĒŃ쮚K‹[Tó˜·ńµ\½ }įKę/$ÖĘĪI5ĻH²X–‰Uü±ÜZ„OøstŻ­ī ¬óć#"µķtŪFUM·vG‘UĖØ”‘KPXąUB«©8=ĻÖ°ŅC:°_—µfĢäõ%±]J7“ȹżÉå—Ś·cÖ8Žī>n„w©$i’ń‘¤UFēž+ +–. ē²śŅlIXӒkc8,Ļ\•——ČĮe>I8=©3_£–I”7^ėĄž+¦­<ō[‰­n2‘Ŗ·ĻB*Ö)Ą­š÷ÅZé°6zÄ鱐‘€X£Ś½7ŌµyU‹£ļQ&Y&± ÜŪLby!¹ Ć`Ö­•ˆ‚Ł&Év‚9ĪźÅŌ"Ldl²¹…Ąnżźi„²µWC±ł@銋” Gp·7Ģ3Ą8ĻÖ³ļ%iEFŲĶ×)Óg‡ųĀ j!;"ĢÖĄ|å jēm{ÅGĢĢ£;«šO””R)-^41»ŽqóuÆ@ŃÆÆl!„Ū~ö.…[œŌŻČęńćiÕ:k -±,!śÖ°FNE ­d e†(ĖvdÓ,u9ī óĶ(L“—5½4+³&ńžĆ#J|^żMki(µŚac…Bś}ćW(Ü®s›ń¶×;dŒ`—ÉĄćÕĶ5ÉIƒ“Ņ,``)čk)FÄ Õ#–rr\Ł©UkŲŅķ£³YśĢ}ŃYŹV[ŸŠmā/ ų[Āļ‚4M<rŅ4˜‘*żÜõϵ|ļšćā¾£#½ĶŅ$W>d”؜0Ž2=qÖ½é@•‡ź}/„üTÓ5ū(ĖÜ­»nŲÉČŹōČüyŠ&ŅańX¾Ń®%ŠUe%Ō’¬Qü-ėX:Cä±Ņxļā}Õ煔ү'–ę0p Œz×ʓČóėѵŸą„0qœńśÖ”鉻- O x›Pųqń;»fŗh§eWü˜ēńÅ{ŠńlōÆGńĒŻzūXšļĆÆ§Ų/£œĄ_pżó±Ą,Ē­.U±œ—Cč|#Šō? ÜĮāżZÕµM«*²„O\äv­?£M»i­cŗXÉSŗā/ū°}æ WÜÅ@š_Ś;Ę:߇uėæh?n²Ō„ķ²˜š“s÷CtĻń.½§ųó]Õ©gu ĮvŲ~ówĻ·J“vӍ·>ƒųcūCŻO”·…ÆķīµŲ°Ą@ ük™ń†RćP:ć\”iŪ'-ø/įŚ‹u-Äé×ü!ØXźK ŗE±’ē‘žœ~uÕi ØųŽy'¶óK €1ŽG±­Iq3n|$‘ »Ėõ6“}įørO½y|·¾)’ņ[Hūhß±.3ņ'®q[G`Œ{žŃį_„ZŽq‹¦’ĒUGO6[HŽŅ噱É=kčŸųŗ-^Įm®(­¶ē‚œōĻ^:Vr,×> Gć-kQŌd„Ć©!?fu’DĒFśā¹3Gń†‡gÆé6’KdžW˜ØpŚĢō¤'†N—ńėPŅģ"×.R÷Yˆ˜ŽF9čpŌb½ĆĮm/?Ńo ŗdyn¹P5JŲæž ZYŲĒįū»„‰˜ĄVūøć§Ö½GĮž½×õ+›wĶjĢ^2ŲĮć8üh’!ǹóWķ!įwšœz¼…m>RņEČōaų_¢§uėMCPń²ø$.ņß(äśW]ńóį¶‹„č/Ø^źKqtAĒ–Ać'ęÜ M†~jėzŖčŚŠ„Ȋhę®Œś××ö?^ųkko¬šˆĒ& `Ū'ßŅ·[Xo±åö^9¶k†·æ„iģĒuį[¶TšåüKįæ[_Ķ=”Ńė–ĘmÉ-ƒĪ>•CSŌśKö{“ńĻ‚µõ- +§Ń/”G{¦Ü7īĒ?yG®kÓž"x‘ģ~ ¾“®iWś]ĆmC:\}ÓÜb“cęFʝ_Āś‡‡Z=.:×QdÉd,iŒc¼uƝ|ć{ķ.ĪļG±ø¹ƒM‘2Źs“ļJÅ$n[ųŠ "āé<ŁķK«f5Üyźk£×¼Qh×QjŻ}‡nšĶÓźi6C²7|'vśØ“SeI­\|¬ŸĒõ¬ļEkmŚ (̲üåČäčhRčkĘ4ķGV¼ÖÖĻN““SĀKå '¹éė_uxĘźÓp’³³(R­Ļsš¤ģTųÓ§éz7Œķ5åŠż¾\nȹ*Żö$×ÕŚŸćmkįŻÕļ‡ģާg5°;¢éĒŽöā©ŹźÄžæ~0|8µŽĖP½cmnæŗyca$kžĪ:ōŖŚgÅ ļ£KÆ[¾L¬ĘyN]³Ž w¶§æ|1Ńąŗ»øŠ;š‚ž^>¹÷U”3Xčń°fņ¢8<`ŠL„v|ūNźÓų‡HŠnŽmīmX nUv’¹ą±ļŽ+oĄ­g­ųB‹}G÷Ž^Ī'¦(1óƈ~x͵-C_±†Žü¤äG.ŽR2yS_IčŽÓ'šzZŻh¶Łm”Ė/%½G§½)- ēPā¼oį ŪhčŗĒƒ4}J>"¼­²(=Įżėóæć?…ąŠEŸLµ0¢’?ŻōĶDw#Śj|Šń£:Ē.ŽĢ§ØÆ®æg?‰Ļ©§ų"üO7Ÿ6ĖR8UōÉ?…uA–ŻĻæGŽCūŹÅYOJæj±ƒ—Ö±Ķl­æŽ„=ˆ²?>¾=ų>_ xĘćW‚ĶąŠ5 YķøūżßLW‚Č©pLs‘åæOJČė¦}”š'ʐ|Cš½ēĆ ¹”ŠśĮŪģžbą‘šėÅw‡NÕ”WÄ 9ā9ŠōžhŠŌō)ĖVmZ‰·‚ā¬å§\Øø¶pr6éĻé^õšKÄSiz£é3ÉÓ.@Į'”óżkŗóāĶeŠKø‡Žūćś×ą÷ü’ö6öŽżœ`ż¢¾hQ\ütųrßh¼0.gŌt  –6QĖ€ qŸI1Éē)rŽ4ׯ}~õtsĢž¼ggnēOń6˜Ŗśņ—Į8h_øeź9Ē­yĢ ¬ųXńŅ»éĖ”ÅU”?¼JŻ)a]Ī Ž§šŽĒˆ„‰ŻŽGäėž)ŒŖ‚3Zs#;¶:Hǂƕ†ŅŖ®AĻ4ĶāģhD<ĄwĶӓ֭¬ØyēÖRÜźƒŌŅ·/GdŠÄqČä~öGüßöø¾ż†k‡ęŌļm¼ u“āhžgŽKI)vAŻ VJ”uÓ}ōÆš‡Š“ŸxkI×ü7se{”j6±ßéÓĆ xē‰×wŹFF9ü±[Ļjn¬˜Id1©¶m8oz¹/– å˜÷õ©:'^r8¤Tw&Ė«‘°õüŖ Ė7–!q}lŽl*§wbcI“™żŅ’Į’ik/ŚĻöAšž‘Ŗk—ü]ųmt,ِ²L!@6“Ÿ¼ ®Ćė_ŠFÆ¤‘Ś_\ŹČ #…ūż+–¬5:O@¶‰aŒ*±tĪE`k`XĖ„䬶§÷WQķĪųĻ\ŽõÉ(Ųü€Įk’bÓZóĞ ³z¦’_Ä,„?{w§;~ś?Åå’qĒAļ_Ģ5͵ž£§Įt7Ķ•Īā:’­;hDŸcƒ‹t$eXn<õķž¹óģ­%XA• ĻLjŠå5§#ė/ųÉgQg{m`”ˆąń×5Ń|BńMö‹§ŚcŸ1Žd\ēÉÆŸqŌķ‹8ķā ö‹ćm[‚ߣWĶäjrĀqÓ9ćņÆ­“ūŲż‘˜‰ćž”ī`_ŗsÕ=£hÕHVÜ=zUg‘œĢWµO±ęMĆŅT,|ĻJĒ“žEŗkT…Aäa…Y™Š­½Ō1}¢H‚»źGw}ēZ4l«×h2”Šp[$؄‘øwĶX[A¼œ =E„q°L#ŸÉŒ;/'u6{3-ĖIīÉęƒOfZÓånc[…ž3Ž­k&k ˜šŽH|™p yūPTUˆŚŽ+ȖYXÉ&ģ‚„Ō°8o3,­Śž•¤xƒKæÓ"³¼Qo©©Ć1?,ƒéPĒm \yĒŠqĒC@Ėw–­qjČØ7A\l¬É¾ Ą’ėPRŸC—¹²/:²–;Ił‡v(nTˆKNąŠ\eÜæ¦ė7Ræ\ŗžõߣųš+‰Š"ÓŒę‚‡jvrjˆŅ*—Āö^GÖøųlDrfeuąPD¢K8‹a*ĆĢōŖv–Q;™%B§Æ'„0QźvŃč¢ę„‘ä°äõ;V&„įÓ¬EŌ !b܂zR,ā­a7·½ Ć5ß?„ožÅŹ¢Ē8$šeÅŲå'ÓÜyƒ“śÕXģQ‘¤dß(8ķA©µ¤GĀČPŸQŲ×s”k…lˆņąśŅ&Iō2/āÓoܵ›|żY3\„ż¢&ÖA…ĻĢ1Ö§”ĻašCŚ»…< dT1!6āBŒŒć­PŌČāåÉŪ€; ŪÓ!h%Y°w”{PʞÆ]2eO^•gD‚{F`ŹŪ#'Š bźSlœ›ˆėŸJĪm^TFU|Ņ~PM Aō+Ͼ`Eג+>UN>zĪQģYjŠ”b¶ ‰5u2õ¬ĄĆū Eq8ŒŒ)ķŽŗƒ‹uI ŪļŚ¦X’k7‚Ž_ß&H#ų…Yņ¢ŗ‘ļ@6;Ķ„ Ģeqżi$SELć‚sS'aµ‰¶Ŗ„+“š­©iÓDĄČ›ƒĻ÷©{@3"ŃZDŽIT¤„qšŅҼ<—³ū–l“ŒńéS*†‘‡sÓ­¼)‘ŸźéŸŗJµ“¬ƒå>Q8éҹ§3D¬l[[F$3HåXąaŽ+‚Öå°[É$ƒ“É=j" ¦³Æų‚ń<;ą½2ļ]Ö^Q†Ö3!L¼Ųč+ō«ągüÅZüž&ųū­>¢9 ŅmŽéĮ;ż+xĘĄ~Ģ|4ųuąŸ‡~±šĒ„<;„hV0¾zĀ¢gķ×Ö½Y|ˆvö1łŅć€ĻēTCŸcbĖĆ^{™µAę7@¾µŲŪŚAl‹1¬h;UÜĀR,d.j”·öń1ęEJ¹;hŒ’0õ ēxÜHĖ=łź+ĒüGāČ4ĘDŲ?ėjČź„Hłā7ķ#įoźNu[ėmRŁTł‹ ć×ÖææjĻų)5—…ķµ›=#SŗžYIŽŅĀ 7<ށˆćõ½(\ģQ±ųEńcöˆų„ń‰Œ$Õ‘”nßöy 2óȑ½1é^ļPīŠŲ’B~_„zōhŁjEIX„ĀN=ėOżŠĀcŻ+^k3‚s‹cĄ€?AZK²?„AĪēŲ½md»Ņ@7.:{Ö宑#”l|€óŪ 7;ßxOZńv½eįxwTń&¶ģ7Åm`ŠxÜÄWī×ģo’cńõK/~ŃWųgC…TŦøĆMĪs·ŽÕ”źYhhKŸgļ…’ōĖ- įg…tŸXEŠK„·Q4ųīO^kŽ£¶†„TW åŠ ŚŽ™mŖŚÉivŒń0 ąā¹’x:×Į°Ķ§é×7³éå̈³Źd)“ŠĪ+ ;|c4zŠ).…y7nč:ŃęØīśÖ2éÓ8æųēĆž€^jŚ”v6Ŗ~y[ī ÷ƍ¼]ū]|(Óü`4_ksZh›”Ō# ĘĒ<†ćŽjnwĀĶŪ3āēĆx·O¼ųG}=ߓ Ž[µČWĪyRzŽ}ėįµßŻ·rKpĢyϽk®„É“ūG’f2*z ģ­­ą x”°Ę1ZÉ.†2™£ō1« ‡-õéUZŚmAKCćv:t¬§.„%}ÓDšd³„.±°ĻńW¹č³ˆĄ#cĮ8ę²6ŒlzmŸ‡ŒS iTądŠģtż+ģß+Ęgóؔū ėm¬o bš©LŽčjž–Æכ"üłäSQ}LdĪŽ;»TŌ ¹h'dw®“^ŅŪT°[ū9"ó”gaÅĪO”å÷6f4ø ˆs†Ŗ»2øbTū\†W"‘cįPœ÷ĶrZ–›m,…‚b`s’*Ąž-1ļ­JH‹ņš=ŖEŠKH #¶={Ę[ˆĶ7󤎮­ž5æŗķ­ī‘#=š¤ y·Ī?pJŒŅŚĀł)rŲLV°—@4¼…6 ŸzŖšõ…čC˜Ų€0;UÖO~²¤{#ef}„G›ŗ·˜WŌ{ŠUŌ+:øņĆ0ąćƒ\ ¶“åjßiY¦Ūø ‡8Ż «µhŹ»¶;J±s3ÜWcõ Z¼Byīź"fĒ&øŪæĢea;æˆqŠŽFZ{y„›Ķć8u6Śk)RŠņĘ=(¤]Öū6—]£$øóĆq łq'O„J]^h¶@»ĻlēŅØ4Šü·ej Œųžf>B(9©®ü¶€+®ÉGėAq•“1ąŗ¹]« ʃÜVč'P$QéA©^ēJeA,YŲ{ ä5="{̬qķ'µÜó»æĻ4įdęīģ2Ö½+CÓ~ĮŽA”Ę8 ItØiö÷ ąģØąŠšx;T±Öd—G×ķµ=e ad!£oLŠtB+cƶ2X»Fa++6xõÆtŃžÖŠ)”ē§qK”¹C±ŌŲŹ„öČŖŁćžę¶|¬°Ł N{S3-źVØ`łÕ%łyėēO‰~“ÕģŪģ‚{zeJ !$l>kZMõģ÷šøæ-!xó•Āśœ~5¾|蕖OŻČ8$²š4ęGć->Y­š\#±éģkāļŠ~Oi:„ok ÄčÆ aN@©3’?,Æ„¹Šµ żT±/sµ‰9ć<öļX~–²üPņ>µ¼cŠē“f:7—q%ŚFĢĒ‚EtZ‰u 3tPČęČäłMČ$÷Ŗ•0Œūž—¤kšī˜’Ēqq¢Ū²įY³ĄR=½jŌzq²„ń6ģ€ĢØŁ*ƞō®y@éU»’fŒšˆģnü-®LŚæŁĻś,Ņ®_håӊśjč„ȜĖq¢•/–éō¬å{C‹Y.ķx Syl‚Ējřtyąøź?Ā…%Pźt« «Čę“pr§pŪ×Ū™öaYøĪ9Ŗ/3ŚżØ¬a—{gs— o @ȅ†TŒq[„b]C“Öģ|=¬i—VWV“<’!PQšõĘ9ƀ¼m„Ćį}RK+”Ą qš%°ć+č7žČ|K W@¾Ó£»…¼Éį“åóWø^y5™š“Ÿ&_En3é\•Cx>‡E¦Ūk޾ƒP“b·.Ē †˜ž+öcąŸ†ž-|._ųR÷Éń Ķ“°8`0X½A¬Å&{µÉō»øōŪÄ(Źį[ŽWÕvö–7q$©‰HČęŗi³Š«:›k“°· ŒĢƒŽ*ÄZ­£#yŃČЧ°­Ī9nuślŚ+@Y¾Wņ3šĖ‡Y±k瓐2Dz§ń ’—ˆģ­œłö2¢øģ9ē“›ØÉŻ e ~\w¦Ątńƒh'Žŗ8Ķ`X$—÷-•Gä“H¦ļĆW61­ģ7Hå@,¹®vś5¼ˆ†QøȊ I\±¦jw±D`ePAćÅ[Öļs4”?•¹Ļj #dXžģ¤ ƒ’§”­äQ}n¢E „—vfŚUŒL­ćµH’oŚéZ„  ėfŚąŖŻij0hw– LŃLųÜ©¢`qKomeÜäcæjĘŽ¶²JP¤Ö@=]šEČĀ’ā½[GŃŃm•Ł„øĮ÷ Ī{”5ėH`G’<£Žz×µn˜ =Ø36“Ż3ĻŗKü¹éžµÓÜ2éäyØ_œqN.ĄR•’ĢĪNØ®SQ[9XĻi(mŁČō­Ę‘į¾5žÓ‚c c•Ėtņ?Ä­KĘVS«é—QIµ7 `ö¤ŁÕō:XųšóJ†žįēøb–xśW©é÷׌Aófd `©ē5‹fŽö’Ķ£kJ&··E± sšÅń±Ó/Yģ·A.‡„8»øŲāģQ’>µ¬]„qś«3#n*łQšóėó%¶Ę‰eݜ§„[ōi.5 ZŻ£y0C*ŠéÆtōG’[kˆpyldĀ³”®;gqf°ŹŽKćœīéM:ƒ!UšO1¾čöØq¹p‰š.©šēM¼ńt>'[H.59- ё…ŒśöĶ~ožŃ m¾xöGš~«>µiz<é’" µ‘Ģ»{œƒ_BrÓ«ŠMKĄ·Vž ·×“»ŁQE 䕦Y@Éõ®[Į±jŚą°žćP{—'ĢČ抜š łīt~!²× »tųĪ« D<ģUSŌōĶ Ć0ųēøÓR/bO“TaĀwlR·b[Šź4m>Ö']RóNj›ķ2½²AÆQ›Ą>ń–g \0‰īdŻmśöĪÓSwŠIYÖtƒÉķųW¦čæüag¢•KÓy¦H 2Čķ’¹Ål¢D£c«ųińĒĀvZę|ŃÜé÷LÜø%mœŸ˜äśół×«?‹¬ķv¤WóĆ žõÜi\ä|uŖŲA”keģ–Iw-§Ÿn ķaӁī}+ąė]WĘztšĪ’ńl‰A1ŗdØļŽ’IqŽš?Ā’]kž {ļOu‘a»äN9}«Õ¼C«ųĆ^%ÓoļļādiH‚s±Üś~4ŽžT}g¦xĒĄśæ‡nlµO§\ˆŠ4N °#’G¶E|æš’WŠ>ü@ÖōMnI†™ce:q$LIĮĪzƒPÖ¤rœ×ĒAāĶ]nü8±É§Ø >LĒükēł$Y–ö+rBūąVfR¹„Ū_HŠ^Ü©…±¤r½w ©ż’ĀK›r,ČKĘäķ žēšõäų?¦x{@µńF™sļo({ĉrĄć°ō>“67#ķ‡ü+ų»ą [HŅÆ¬“oŚ[›³© 3H9#¹ÆĪ `×>ü@Õü9㔺M,J)rłē#ŸqSÖ̬aųļM¼mBÖāĢI=œĪĀńZļ<1ć­Wį՝—ˆdÓæ“9‡ŹŲ>uļŸĄÓ.RV>ƒŅ|qšóāęƒw«EöF“Œ"6Ģø'YÓ<כźž#š_…5ć Aā;_“4ƒČ+’%nų>ŌģdсāŁnu;‹».ÄśNŠĘD'y>Ē·Zū ölÓ>YŁ·‡u;k]R+øÕ…ÅŹķx$ĒĢ3ŸZ„-,f¢Ļ›¾-ŽxĆįēÄךļ‚%ŠėD½–HÕg;øcĄLvÅz:ü2ń䎈› md™ FTŖžæŹ“•ĖK¹—āåńWĆč÷z¤rO4Łr[Ÿå^[}ć˜/ģ-õhnłĪUśż·Z”Ę™óŽ„uĪÆ{t‹),¦@Ŗ ōƽ’c« OūOLÕ ŗ™å…„ē™Äg–ŌŹ~DĆĮ?|ń;S³·Ō4żrŲ;\dÜNõęæL“æ_xkĄŽÖWĆͧ»ߙ6[ŽŸ• ā™ąō?āƒ5H&Fõ-!fOæ)õæ \io{w¤ž8dmŃØĒ™Ōz{R¬zGĀ2Ėe”^ĆGĢ8 ø ĻJōļŻÜų^] ÜlćĘÕcŒ(ī1ķŠb”ŗõąÅŃ>!h+wį½~·8%Ēīˆ“Ļ­m>•®ŲxGÄ:GŠžoY,E`Ÿ,ĮǨ憉Œ{Ÿų/ū;OŌZ÷JšźÖOõ*NW*’ē]OÅ oxfźŪP»øžįG™«!Uē ėŚ•Ķ•3å;?…éāż&'eŌ$ó½A8ē®z×U”é²x6KkF5Hā}›\ńĒØ S§ÜźõĶ/Ć>,ø‚Hć°·½g8ćV`;-{ꅱ"ĖĆv‚īH-ęgIQaŠ‚s“õŅF{¼¦ižÓµ-.e慔²ćådsõė\æĘψžńę“e}u¦ćÅ6ˆcivUqĄZVč|‹ā- u²Ķi¹5ÉM„9[m2/Ž^øĶĢKMc@–‘Ē$øĀ¦xcé^ÕįM2ĒÅ~{;ū5“Ō%2øĖF9䔄±›ņ=ŚĒĮv/Ć钩Āב•ņŌ€<žUĄYéQßéŹ/!a(ÜFįŠśŏŚZ‹įķq"·ÓRāTæ°õĶ}Gįė½óKÕ’µŒ¶Woh% ’²`ącZĮ”„v|yāź:®§Ø.„gŖKŅ„IbBv <ŽkōßöbÖ|=௠Ēį]HÉ,S[ł H3øc”=¾µ„“¢TųÕą‹Mv N{=&?ģūrØ&q'©ÆŒ`šę—į‡xÅĀN$rrąpǰ„aÅw=ĒąWÄÓŗŽÕxŚX7ŪO³«zǵ}«®^„±H¬äŠė ™66@ ~ĪēŒų»ĄĆā…µ ‚ęXXFXgęĮąžÕć~ų§Įŗ4Ö^"ŅäNĆål‚£€@ķœR'Łžæ¬kö³•Æl„¹8ČÆ¾ż£ō»æéŚG‡le›L˜lVu* 0¹źIĶTcr}‘ļMaŒ“!okeo1‡*xƌæh?‚ŗö›o{āM&T¾·‚×t¶ŚŪó÷ƒTŲecówX“ī„Ym¬‹×$śóXÖŗœ¶Ī“@ĻÄ •‘\”R9ź>‚¶¦Ėö}Ö/ƒ^4‹Ēž ÓuQwś¢D¢į遀s޽¦ <ĀĪįŠQ=ˆå±ĢüNš†›ćŸ]č7J>Ż'³c€2HØ?į_–*–šŽ”„Ü[›[‹yJÉlœzž5‰ÕHŚšÖ¶žń¦‡ā}>IaxdČrNźĄuö'Ēh><Ń4ļųnŽYŽŅ7iclķ‘FAtlŽ“ĪŲ³ś¤’‚=žŌÆūY~˚ƒ¼OzⷁĀéw~s‚÷q…łO©łT~+ļ_Ŗž¾’ŹžKXēXnŹnģՌք¶}©įqüKį ąTŌ¢P“(<;jšŒŗF¹£ŚOāæ §Ÿ­5‹)2bæ“lƒ‘¼§<‚k•‘$ŸOķš&_|}ąH4Ū‹oj×:ʈū?vRY ”Š.qŽŲÆĻ{čR\ZĪ®bąąw­hģŽZ“Īi•–E8œ­_1}ąž˜®³’P°©)›tcdHNj¬  ĢĆ ¾”ō$”l$‘U 'p>¾•°Åū—eÉf:˜÷…É^õ¬n&Ū.P²ēƽYøjPMcuž)p>\w¤vSgö}’ļžŻ7æ¾ė沟ÄĶZŅļā'‚6K¢Ÿ÷چšäķO]œ!#Õ+ś|¼š;”‡TµĮµqĶeZ=ĪP·ä–'AäJ229Ƅ?i?…śĶސŽ)šå ¹ń6„āčBœ=Õ©?8¾žUēIjĒt-3ā_§·³ŗ-e©B%„Iƒä]*óōĪHüFzWņ‰ūi|»šo‹®m ŽēŚ ŌlµØĀyqÅücžkŽcŅō=[C¹‚öB&@ i³vćõķ_;Wݕ޸ āļ]ė)wef^D)“dtśW·ü$ÕµK½ †³§k.ć»|cīøż:ׄ—×ū$ÕZFi³)…žfŁü9+B‘œ&C±«ŻƒŠņ«-Kń[Io2äer:Ö„’IØłĶ ±5мĢ$uzœMöV¶W  žuēQč—0nY&i9ĪqLÉīYŗ…m­¢xßżź„ÜH¶ļ·2q(4ˆÅŒĶmqŲ ¦‚päĖ·ƒš .H¢dBĆ,½„dĻpųTs—ż(ÜÓ,kŒö\ q—,¬üń×€"Ż"ȞS30<Ż‹W½µYB£ģQ× eūN–Ø·J6±łŠWY6Ÿm{„[źŠ:K®W=źš…žķ!ćd 銳 +e|„ HŒ «ƒö”E©m§]N¼sĒ!l ó@Ó±č2kņé“–ŠÆ‚ō"øU½’ńnć’ŒąTĒĢa“²ÜŻ„¼glø=OZčm¢–(ŒSÆĻŒž)dk«ĖfįįĘLšk­Ó|T—ń› Ia۟•ūńڃHĒMKśw…ō•ŌÖī)Ź;°<Ž+«ń£p-¹\ņ’¼~”p–Ö03Ÿ0åIž#T ŽG“dg I ށ§c›Ģ±¾}č-tˆ$BŪ?­žŠÉ¶æ–;£—#ę ÖŗÖ·†ņŸĶ U ŪŽ¦ƒ6Ģč”D… (õéIīP€AšXÓW|„¬l¤žx­č®­¦L.Q¹łGJAöŁh9ŚąĻzīTä/Ģ6śc­05YaDc)ųāø÷ŒÜJÆP4i$²¬l„Nß»‘ŌU=Žnw˜“MėDRvlн¤MņńøšĮŒ|¶ŠGŗT#y8" (ŽU[•÷¤\ZDÉmŗ€UĪ t-Gd€sŅ‚ ©Ēo#¤Ö€ĆžüTvRż¦} l÷„(Ü„GŲö4…|°7}k¬“Ōtżb8ąŠķŪó/ZĄ o4˜žŃ͊HćV—ā˜“É#ÓIW‰ ĶŲ×<™“WsæŒO}f]@#ć£VhÖ,¬"hf ĶøwéQwzš(³Œń?‹XDĶ ‘¤c–ś}kŻgļŲēāēķ>¬^Yųäh½¼|<ÉžĀöĻõ®˜Ęğŗ’dlć¶š†­/uņŖ.5y€i$#Ó=ŗžuōĶ͵‹ķūY3]ć’­Te)ŁxkR¾Ęęk{`xsŠō 7OƒL!HÕÜuj5ā8՘·NŻź«jöIŹ÷ ŖzsZs™ņ;œī”®M81iē`žłļ\ÅęÆmiHņ,—¹ē'”Ø6§Lńˆ?tæ Ś.§ā}E¬“̟Ÿ=zü£ż¦’ą žŠlÆm¼7ŖEe‰—Ķ•Ąi§„T#wc¶1±üėüvż²üKń*÷VÓ<5Ɵ§¹)sy>ķņ×]¹ćŸJ•ĪžŚŚM­œ–²ÜÜLĄA 1—‘ĻNÆÓļŁž …ńsö‡ˆ|Q¤źžšš§iˆ‰®cīŁ>՝IŲŽ1gõū,žÄ?gŻŹÓĀ>³¹ń“īŠ4Äūśó_y[éī³Å.¤DĻ€ķĄ®’4čtØņįqÖ¬ŽÕ‰ŃAƒ©,éC½e9t7§ō9cÅZvš‡Īš4cźk埊’“=Ÿ„-®a³»…®pyČŚG±®fīwŅ„cóßĘ·N©&­ųhizŠ ø…¢-r™1gŒ)ėó—PŌ„ŌµI/Æ F¤fX3ņF čJҜYŌ’Ø^Ł]l@bU@öجąˆäć>•Óda6hCdcŸĢ‰½šG¤–×.R=ÅWƒ“S9ž¬ļ4?Ż]0ƒ‡Óģ:'‚įH™V!źr:Ö2f‘ŽūJš”Q6ģćŒ†½ IšüqȂ@<}k J乞‘m”D¶²ø`GV#Čbs˜Ō’äĶĖKéDXF8÷ķW 2Ķ‚8ļ[\‘ś†§kkg ‘Ź Ü5Ąčß“+łĪ“i©““œ•P8Ęis!¤kÉu<€ŗ¹d'ž)±a™„™SŽ=źÉqFĶċtŃ,¾XS÷³Ås°ź·j†Śņѧ“`q"ž‡Ž“‹¹‹Fü·‹„åtāŗ94Ō}>+Æ8<‡ŖžÕĶ5“2>ƹŖŸš‡Āś’]™„LŒl=3SÜfÕõŒŗlq̐±‡”8ĶeK#Ü Ėcßø­#µai,ё¼—LsŸ½Z—6÷ 4Vd?7EPNķ £„ˆ­;æ:ŌčķźVHßō¬½WLM=ĒŚ8߃œń@:mÕ‡ŁŒS$NųłN3šĘø–ÓķO>Ē?ĄiČx«A“×4Ł 7:Ź=ī+Éļ¼(/­« 2Œu¤·…t‹ķ5–s*/'ŸŹ½‹H»FÆsĢĒ­ɝ ĻkpĒ~Š1LÖ{Ū¤lŻŁ‡éA‰4Œŗ—SĮā¹K«IŒłˆesĄ€ -® Ū*+ž,pV–%Œ©ófÜ:üōÅhgµžy!ŽhĢ‹ü%¹©¤Ią(ū CÜPl‰dÖom‚¬! z0ėRy±H9_.sŪ™ E eĮż=j(ĪĀŁ!TŠfV”[©żó‹­rŗ®‡ipdū'ɝŲĒz Ó¹‹o ›i1å³ĮÅwZm¬Q._*G\Ņh¢Ž„‰V{BC ĀÖĪ™©¢Ŗ}ŖĒ4ÄŻ‹śƒŪ](hcŒzW­ŁĖslöź‹ęÆ:ŠgĪxę§£i’ŚJZ1ot¤œ‘ĮÆ×4GtiķŪbŽ¢¢f±}O-Õ!¹1¼¹m§æõÆń Ćč:š\H‘½ŗČwdƵfŽ”†?j_†ŗVÆ ¼/£'ö°ŒEr"ļg§Ó&¾’(˜Ē#”8ļ]P’1©ŗQ…oŌI"ä6G ķF½„ĻnŽl0ī…†Fßį­NF†hNm»RŲ'wJļ­µOµ¼…UČčO…c(ˆļ| ā;_k6—V×ogv„ ”±¹3Ļśį-sHńĻ…!Ō­Y.(I{•o\~—+µ‹Pf„–vń[Oäߥ%Ž2Ź$źēÓė\‡õėė›ĶCMÕt&“ ;„o•}Ŗ9z¢ŃµÆįĖĖ{øK‰ĪTżŚšóRŠ.ōK–É#ޟ+ŲĘķ]CN’ā ˜÷©Ē•œ7Ō~UĆϤ\Ž[ÜUeē$āµ#™œ½‰ø¶–9˜ēVČ$tĮ®+ādž„ųƒd· §XÉ«BżÜ!L£N:ššgÅZsku­“ŚV£ Ģ® šGØ«z„W̐ީ*ł‡öÅYt:į±±¤x«QXZĆRŒÜ:ķA+ŸœW¹žĪŸu€ŸįŌõRóųöB²,R`@ĶĘęœ×(ÜOÕ?ų\ϧų‡F‚E²#øĮŹŗ°ĪsųžõĆÆĻ©éÖŠČĀ\ ŲWD&sTsŲŅļķp4p«+ų⵬tÉÖwuƒø®ŗr8jFĒEie qƒš†ņ·‹`°÷éZęjj¬n’©+ōé\½åĀĒs¹Whj’[-aóqY뤮4—±”*GĢ=čļöõµĢ/bD”€¼®+]&łgv`ė9Ę)ŒŅŽÖٶŖ&čqÖŗ"+edČŗŅ“%ģ×G:o_R1UķÆ RÉ/·œdō µ{ 4ó3†gÜæZ¹RKbFŹŚ,”g]h³˜¤’W“Ļj‚+؄j’Œ2ŽŻéOcX˹ŌčQ]FӞs޳fTu2(÷•‘C ĢDĄńžÕÕč~-ŗ³±ŽŚG°p²gļP)ėž –īBD\¶ASŽ(°M­Ė k…Hߎ¶®–ŌŁż”EŒ:2/9śŌ8Ź +ČfŸ1-Ī@ćƒ[:~˜/%_1DŖxĘzÕE[@Äz֏d‘8%AĄ’śė“XīŲó]`&i±Ūi6bt æpąƒ_2hŽ9¾Óäøx®>Ńn‡ gœ{šč²GŠ~ńdzݬ3 ¼Üšµ{=µÕ¤V~UܘO#ŽœV q·ņĪ’‚“…®›F¶¾–ČŹ żBžµƒdŹV#µ»Č³D7żß™sĪ±Æ®– ÓÄ«žøķXĻrČ“«įyt|ū1:²_ć½hĢ!Q¾›RAB~į^¹÷ŽŪAģAŃ<ģsÖ¦fČĀ“żfŽHŚ9PƵ-Ü7(–ņ,›Ū2ń­a(ܤA„ģ¦Ä‘Ģ|ąqŒõĖk¶sélĀŻ^S·§æ„ˆnŻ >Ō¦²v‘ōø¤` Ÿ13Į룃[Ņ¼Ń 1D7óŅ“Qče$ö7®o­ļ“˜?aX·bęmä*½Ōg“I¢TY«f²˜L·©#Šb¹[­E<ż±‹ˆ¦BĒŽŌR4HĮŸ[ĪŃ(kuĮč*±Jźc‘Ž":¦„ČPķ"śßK½Ł“ĄøĪq]µńŹ<±Ā× 7’}MQpę²Ž&£;eV?1¢ŖĖ¦Ü’Ļł­ÜgµžĖ±ł5šćā׌-no|1ā…·Š;e¤ņ.UæóÆųĖā_^xæIšģi­‰’W3`Č Ęlf¾†NļCÉå=®ĒĒæ5+MŅģ.ģŸY’—:|‡ mĄu>õå1š]憭€Ń!h¤ŁęF“eAõśuØå{ ŽG£ŽĻ™’UG,›IēÖŗhŚ‹x›ūGO‚(ē\/”#ÓÜ{Tr½#{Ųś“ā/„¼%ĆŁļ¬#Qā;Ėa ģ+nĆøQŠ×Ē_ gńµž¹gįV³Ōu˜­$1Įp‘£=Bjios¢=³|9§ė­Ģv2<ņJ¤–Õ@Æ#żÆōĻģ’*.˜źb"Ŗ#ƒ qøpHļYJöI RGÅ?üoØéžOėvӣćtj\dńŒńÓé^Ém§Œl`µÕ,c¹ŽÕĮó u@÷­šŌÅĖSÖ¢Ń|#£Ågs`–C:«TśŒWq ųę+kķ>ÖĪ;ք³Ż(Éby =; —¹ē…źz§™­Į„k޾›ČłżÜ€gŽGOēZŗĻ‡4éģ”}x·DūD:OŽ„ś„Øhó"„ŽŖ:ēłR)T¹é_¾-ų&ßįˆ“='@‹Z¹‘B†R$`Ć8nœc5łŚĢV¢ņ;ylxP¦ŅN{VŌѬQŲxr=GųD¶¤¹^ņõż+čO hĒLšŽ‘sq5ŅH<æ3$A­£+ kA‚Öß¶k™ ń"ē.Ł$zšź ūŒ“moĆZ°¶½ˆ”zs‘OœĖ’ēŪŚkWž/•¼Ln„ (żäŠIUčY3ŌxÆ}ų{š³BŌõo¦¾ø6Ņ-ƒ‘F{• ®^Ē­jZĀŲ““įū=ĆEæŒķóŌdõaļ_*|@‚Āy®|?w%ĖC!UA9ž÷®8©zŸså©eÖ< ¬6…ż„q<8T˳*c'°ā»‹ėŌ’i'giü°7»d¶)'rÖ¦@ń¶”§ŲH¶ §  ‘óaZ>“—^¾·žŅI+å“hc؁NșXö’h1iöŠĒ„ßĮ+ŖįŌ”pśÕä‹pš} ³I]YR Č4¬·3lM/GK¶3GŪ6Xp¾õ›¬\[h·3iŒĮY°©“õÉǹŖ+Śt=wĆŚ~®ŗm½äÓ}”ą*@Ē|×ks¬K”i3Åw²1y'$’śé6.{čqŚ śn­iw‰e~d č²Xć©Qüé±Óī-ÖYmŽÕ—¦å®[Ä:œzAƒģĘi9o¾:c¦*QĒxkÄWS^Im”ZOo<°ķ“ääē9ķVü!š·[ńo“ˆ¼C ZŲ­Ų>x9 ļ·­;Œś‹Ę³ēŠ|1qØų–ĒU’’Ā­ā ‰Ę_±ö­_…štwŗv“<Gµ& äߕ+ō%ŠśÅ’ üćĖżÄ`šĒ[°@RßĪ$¹P cłVŽńrŚk›oJe{äM©*©#·Ö„vdŹ7ŠŝÓĒ~Ó<;ŖŪK.÷¶˜.Š 󎵚ÅĻĀū„{!t»Ė)ʆ ņ2śŠÉĖ[ G¹ę^"ųai”^½æŚSrĘ7ĪP~5õ’ģAf²ų·ZŠiŚßE¤E„b>^AĄśāˆTč>‡Ōæn4Ok·:ōsŪ\O)Ø9ŪčįX¾ż¦“čńéšōWVV(»¤# 䝡Łj…¾§9ćļˆ›ĀŚćxoP‡XæX÷D£ĆƒļŅæ=ü1sāOkĘš\Ū;LĄ£ l<ŸėL£“ųnž%ŅÆnīžĆ)ŗ·r‘Ü|±ńgĆ^2ų‘m·e}jš­Ø?,Ē źG P&ĻWż>x–ĒÄ~$ŽkK™B’X¤mŃÆŸĢ×éļŽ„ŃÅ8ĒøäÖÅ ~Ģ^,Õō'Ēq]ż’KvI#‹vY¢K¹Ēz±ćķSÄŗ1ÓōؑäP®Æpėų“TbŅ9ĻxĻĒzF¬h׬·ĪĮmžU,ģĪXö®ĒĒV©©xCNÕģ,’jÜh’L’y$©ķŠ åŌ÷†Zm捞źzv”¢?Å•$d£ Éņ?xēƏézԧH¬eތ“æ2䥑ӎ‚Ņ2ümš/ĆŚ‰!¾šöµ<ń^H1õōö­ 3Ć÷Ś{Ūź-3GĆ}i q= jŁķމ<·L)@FI>Ճ-ķµæö…¼¦āŻš¬?Ч’ūJ61“­^ąjo¦RÅ{…Q– }=ė©’…‡ źbYōŲ¤°NCA)Éśž5Q‚'„ü3ų±šž= S¶›%¾©<Č&`éwŽ…N8äwŸ“‰mā‡Śņi:{͈Ą Ų·„mõ*Ēן„Ōō™4ū«Ė{Ūkؗ„aóqņ“ļĶxōæ !ńøŗ5õį²²™‡“)'÷sĪ~ø«±1•‡ųsĄoąŌ”ń5ā^źŠM²)ŌŽĘIĮžUķś‰n “ ļ"ĒźO›‰Ń…<’„7ĘPéRé-ū蛐€ž£ü=«õÉķ„hĶ­ĄšŻ¾uqÜÕ¢dģoĖxK°IåU¹{WĄ“ρ­“ŁųŚÖŽE¶Ö”hŁŲį™sĄ³Šē.±óCÜł3łLŽźÜd•öGģłćk-[Eøųo®G¼AäŠR>iSiĄQź)ŸcÜ`’ŚO[ż‰?mÆkśžµ>‹šć\¾ūÆ ƒå:ČĮQöŽŒ¤Ž}«ū¹Õ²ī–ĻZŅęŠk;øRźŚaŽC ąč„gQu7NēcšĻĒoi¬&|$‰RGŻjś^wÓµ%kB5žĀe) õR1żk’QŌ®^Ēó?’vż‹ux7^½Ń£øoų\¶­¤K’ĒĶ”;¤Lcęģqī}+ų’×­ćŌüĶRŻZ92cpUׂ U 4fu"p}š‘I“‚‘+A$€ēdxƮÊQčFĘ åbvõ+¦åčGįA)RD!Y®ß~µ q€eqĒ9Ŗņ$"dĢøŁŠzŅ„Ė"ō÷¢JÅÓ} p6픇?Ī®A(‚ā2ƞ8éRvRg¹žĻ_õ’Ł[ö‡ų[ūIųF .µ-Poķć˜Ēöė;eŒćż–n¹Æōēųń—Ā_žų/āg‚®ķ®¼-Æéšß[ɝ ąO#±Ķ)««±I£ÓäÓ$SBåZhže>¢¼ēÅzDZ•‡öŖĘ†öhꅇCųWV$Ź6?+ļ<mšßĘś…µ+kįą­j)o4Iݾ[I·’ȧøUbĄēŽõčÓg4ācgt˜`U‡J¹öUWq’ƒ'>µ©ŹŹŅĻĶ ·˜ Wó€e'$tõ Ķå, ©?—¦€FåŁÓi8ēŅ€&ˆ– 8J·!€›ĒLśPtÓčH¶IØ#FŅÜ@źs©ę6õż„Į?kŲž=žĪ÷æ³·ŽõXõ‰¾›v”ņ6n&“åNSŽSŅ”–‡ddL^»¾Ķ^Ņķ'±”lž2FQū‚?:ėn“k+›V· Žw”ĻŻ>¢øjÄ¢żŖˆ’3&<Õ]¬kł’‚Ó~Ąv;šī±ā Ū¬~&¶Iµß >V#&ę˧qó“Ę;šę*(ž8dķĖuĘRī ½Ā0’U*šGó®Sū=ķnžLl œrh{–£©ōĆĻEfbYw/ń }‘įĶnĘīĘ+Ūh[.„X1ńÆ Nś/5žŸ¦Ä÷—!MŗŸ˜×5ąvķ<;ń_MxRäi7ķökŽ»Hź N]Ž&Ā¢>ė¶¼XÕRH™C#tܤVͬóJčw^™õÆ„†Ē™^'_˜ˆ«*‘ļė]χ-Sd„¼P¾7r=ėxÉXä”ni\Ś")³fW;‰'֫Ƨ£1m1«LČćüCa JKū¬`Œt5ĀŪŻ%“¢³!üĄ „&Ž»HšŠ:NĄœēŒŌš„;>ÓOQėAŖ0£MøXsŸjŠ:-¼ČX·ĶĒł4ӧǁ#"ø=»Uį‰XōN:P;ūZŁć•IĄ<œW£i÷֗–žA(ѕb¹Į÷ FzŲZĒ;“ˆÆLcŠŻuH-"²€ć ņØ==Øž¹ÓŸ2Æ^¾µ—w@³,c{cP‘pŲ”/ć§zŲ³”§īŁ›ƒžOJs¶Ó-į¾ Ņ…Īzb»éü9oœ°Ę‰Ą$0ī=隨Ł;ič’$Æü­Ąb“īd¶6ą(łśtäżi7ŠóNÖQ;ŗėŅ ³g YĆ£ƒĒz‘­»„YXn^2ʝ­kˆcŻē!`q·4-®¢²ZA»“ž•J×QUyQĻ9ž#@/.†ó"€Š×ØÖč›yč(¶mDOr#óf$mŒŁÓį1$ŃÜ@Ė"ńķ@ę„Ń]1ŗČµX³¶yQäV ņ3@&™qjń<,„=zs]}œ°Ü€ŒRIæµ*Ė ŁĒ8»ŚŪ±ų ‡U‘`D’)ŠJā.ę{—(X±=3E²2łjHGõ Fżµ¬3 3cÜ÷¬»ėE¶bЇwCļA¤eŠe¼¾XŲ͜zv«{¦•KØ ©Ķc$h26ŗgłĮ’„w5̹'ƒœŌŅXOęĘ ®xǽtvńO)Xp% üÄŽŌ Ō¼6' į~~¹²³^̤Š9Ē=ŖĘ&”öͶė•čŗ”vö7–LnĶa6TV¤÷OurņĘūžøėŅø»Æ/7,Xģ9²HčŠŌbų®ēNS“ŖBŖq“zŚųušėā7Ēķ`č’ ¼;«Žķ—d·ņ@EŖśĪ‡­uBÕŁ²’æą›ž ų{ ĒÄ}v/ks*I%¢ eµ”sĘF0+ōDš}މkikvÖ:d*«0 UP ļVāŽy3«Š‹ęśZ7‘Ą®ÓKšä”%¼’H¹äōŒĄź0Ŗ3ŻCnŽīŃŽ¤Ł5̐Ś+Ž ōĻNÖ±y·RmBƒż)Ę=NRńĢzJM-ľFœ¤īlpæSھ-ųßū^ųkĮ6’a¼—§?<¬<“śśÓJś0ųūM’Į@µæO­čŚˆ±©²³I0@ŁĘ;ūWäÄ/źž0¾‡Q×õk‹ķAFŃŁqÜҽ<-”)Xó‘wlEaڬŚ-¬[¼ĢŻxÆNÖV8*TøĄˆYŠ ā”ŪšĢQIĪ}+rĶō4#µo9p¶ć“Ķ[OIe īÉčy¤du¶šOŁ"{©Ļ–Š3‚:ż+ėŁ»ö;ųķūMų’ÓMųsį=BĻF'2߯[‘L`²“Ö¢R±¼#mĻé’ö2’‚Hüż~Éā߬~#„B¢tŻ :Œ7Jż°Šģą¶ŽĪ×O³Ņ­v¬čz`W Z§MŽŠĪ`ˆ,H¼U²ŠHČŹƒžEqó]™Ź] ĒZuja)t¼sHŽEL…•no­ķ#i'•cĄčMxo‹|{ļ’Ęā8¦—„bĪśQ±ł]ń§ö¤Õ“-rūLvkŽULr):ųGĒ’5’—žęīīŽÕŪżP~§Ų茬y¼Zf-Ք&3»ņ C+6ć/Š×B…)‹lĄ†5³`p„2ĄŽŻ(2s;m3Dø¾x‰„DõÆ^šē…ā“)!‰ōŚGŽØ™šv=kHŃæ{ „¹HĻ§Æ„zmÆ†Ķ“+3FŹ­c-‡ĢĪžĻMŠI „ŗō«°ixź-Ėy¹ĘŚĄ“zEū&Öč²9ɬ&³I%.O>£Ņ‚e+‚"DĮFz õ©"¹š4&&*ʂµ9ŪŁ_{¬ŹĢĶž½®RŪĀ: jk©ŁXÅm{Īā:dõ#ėAjhėķ<ė;Ćͼ¦#ĪģqZҽ‹(Ąļ@łŽsRÓÓŹkˆNóŌćµyÕ¾«Ó\C*¼r)={āƒ&ĖvŚŗĘ’I:8Ēqé]^›pu²,ŹŃ?  “²¹ŃĶ‘Š7T—pĪąjIÖD·@ɇQkh« ,ŲkV—–-hš—*y8äWwi—%ć‘“ŅØ x4Č¢ Å#.H®’ŽĀg1® Sßeķ[Ćj$ĮĆ© ŠąZYm(Ę:P$īiYjŪĢ.!`Œ:ƒŽ¼Ó⯉ćxÕcøV8aßėT`‘ó]ēüqgj·ZEŅĻ4.)nõĘ }įk—ń>ƒe¬M8‹P QĻ̽7 š=ßL–[o˜«žĢ;×7©hŒŹFRR9#¹Ø1”¬RÓōb›c”¾;¶yĶtńĒŗ,cēÅsō"X½Éō¤Cuo2" š±ē'īŠI­smwo"Dx;AØģåŒ^ŻKŠA}43ę8Ē”GPGZć.mó) ¹B* Lćo|³V]†āāÖģ 1B@zėōĶj[ˆZÖąØ*ų#śÓ5ę5„KVX?>¤Tń^ZĮoä̱L¼ą‘ȤbɖKŒüŗ`ŽÕ4gFŲéy÷q€ŁÅ9+ĖqŗHķXMp{T–šeҕܿU&ƒHK ·K“ƒĢĀCO–ī ŖR=»ŠhY·¹£e-š“ x Ē„SeIēh,æJ‹„ŪĶqāĶ24óÆĒ•×n1ŠšĖĖ»4É5£ósÅ7ŽĒā]2ŚžŽc¦Ē›Ą PN7¾Zńwq<ö×p}Ånx'^Ó“ē»¶Ö4«mQe )a‡ˆīŅ‹jgj֓’hŪxmĮįX|Ź3ė_D|ųŲŽ ń(ŅuAö<鵤vįŽ3Ę°K”Æ*?Eoķ­µ [+ū+ˆ.­¦Ė,±6UĒ×ń¦ĒnśxF“½iĖcS3:ŹjĀ‚_'H6ƒœA~FX"Ą`†r½1T“Ć©%Ģ‘XĢēw8ĻŽ§`+ŽŚ^“ē]ZIrv`Vrہ  ¾$ōĻQD£c¢>mų—mfšõ¼×ųUĒ-³ ŽĒ5ćŽ)Ņģ–ļf—©\Kl܉6œŸZć«ēD&yģ¬4˲&øIŪ©!³œõŪ‹ĶÄz3ŲŻŪƒ!˜Œcҹœ ęgß_³ķā[Ļ/ĀߣhśŗŪ ‚ĘeĢU'åü«ōĀ+ŖųfśĘ[ĖW13ū[¦*£R×ZŠō}jŃ™ŃIƒ½dź'ŲVŽ›ā8"¾{K¹ IŲ‘Ō×d§įc°óķUƒĮ3nzb³ÆŻ^s[{3j;),¼— Mß&¹ gA,ŽŠ””cĀŚ²Ærfæó 6†#*?­tśŒö¢økØX‡8«åź å%•ÖRė×ō­7Õ„ø‰G\~5"%ÓŁ^C,É “¶Gó­+Ū(<‘(ĒR4ŒLČÆ ĘąńžEfŻ«DīŃ«2{š ·B„µÅĶĘčŚé»å#Ø«§,Åf‰¦fˆńׄkbŃ,Ó\Y«[¼…żßqčkh[$¤Õ4G€ČĻ„ĻZ[rFv¾š}kŌĢ’ķ‚ż ¹ 8ĻaZrßĀ€#qėŠĶrż¦„=¤FH#Žę>»CÖ¢“Ö"fmĮmŪ®;S&Qeųµ2ä£"J§łWUomo=¢ó·½" NpŠ<ˆKF$•ĪŹĘ|«:ž:ӊœÕm¢¾‚HC'‚1ŠĒ·šķ†‘h.^d]ĻČc[r›ÄއJŠīt¹˜Ēm0#ęV\šłėÅ:F©$ցm›•QŠYKs¤óżEnƒ±LFéĄ#½kŁźs,0­ŚķĄ c5&SÜŪÉ”Ū½Ō¦(Ōä±=+ŗ»øŅ®4.+˜īĮ §• ƒOŁkĄāłķēå¬ķoĀ ¤K ³³ §ƒI¢ō ƒEže%¹dļŅ­¶“é'¬¤ĮĤ.|™FWŽEiÜųš4xåźM'•WŠ“«żFĶ  ’¬‘“‚~ķ|ÉŖų/P²–e‚Ę[ˆpY¶® Vč“QųsŽŹ6™<½øŲ}ėßEäßg‘RŽ (\0éōŖrbbZ*N­ŠT䎒…i®·iįŃ#®%·?&ĒŒśT˜åƲš„žj©‹=½j“ØņRǧj‰DEsżœ]c%c“č wZ—78ķQĄƒ–<­@fj7:č•eŠhµGŽē®k«·ńFėU“a‘ Į9Ę+¢˜īFž!³µ $ˆĀžAŖ-c/›<ņrz²œĪRż ÉϽ^±Ō)B›[Ž©äīA$ņ̤\BĪ„r{V ö·qēGy&åĪ‘Ī*’&Ē7iɸͲł[[*Gzč,õ Ķ.ņ39WRÜūVs} Œz|E­ż«Q„Ćd¾NĻ™Įē4–×hĻåŗ¦ÖĒ͟»Y–”ÜŽć‡ \zõŖ’¶Ÿzļ “ø=8ŖŽį%Ōčc‹Jŗµ[h­ÜtyĪļ ®;Pš„«‰ÖśŁM°é1ŸzŲ–Ķ K¶²HR'O(žuQ[z‡ś<ÓCia#8ę±oS7#”Ōuv‚'q\ć=kI˜ÜĖ#^ې1Į=óRʙ—®éŗl’"[‚.œēUō:[R§ĻY ĻÖņßcGQ¶“Ė™Ōó¹†1ō¬Ö“eˆ»€É‘QG35Hʶ·Ł©Ćē*21Ē ‚+ƟNŗ‚x&ÓąIÕČw ŚeĘ¢Gó©ć_kzŽ™oā}EŌ,˜ “xÜGmÜšOkē­vk­mٵüĢ|˜ŸJś­±Įdx{YIlµÄµĆƒ÷Åõ R=ėļ/kŽń®›q§ųĘņeŌVŻb·g= …( ¶O kæd“»T°iLQKågĖĒ'ß5õ?€ķ“ĖķµMFšÅĪŁ c‡ēšŸ™ČųŖ÷ū"Mv-S’m.ą”evĪōÉ9ō9År~5hŽ ¼–-{IšĘ&ޱIIĘbEMśEœæhį/‰߇M垣m#C•FRrrF7q^­įė“1ѬSĖü5ć9¼u>£į½bĘŻ&XˆI’\zō?–+Õžčž.šŚmnķaūąķó#ķ'9Óź'ėé£į­3R·³“ūZ§—++†ŻĒLW įŻV-M¹¶ŅÖ2Ģēõ0’gŸźś¦©źF[Ė»‹-`ŃB­ņJ]Ćńć~,Ó!Ōµc¬YÜga²ćåyĘ*uŸSÉ|K£. ń@ļ*N®aĖ ķŪįŎ­į[ ś“Yźq«bB>ojq‰s±[Oų/ØXĮ"É3ß&åÜŁeöśVΧ ėZ]¬ ¦Āš8t ŒøśÕän]ÅyyaķŪIŗbB¹Ėcšåāš]ģÖßhŪ$ńØĪBüĒņ¬å!Y²{Ė(ž &6…§\Ŗœä±ōż+7WŅnįÕī8#kč› ØŻļÅ }ŹI£Ż4{ūķgĆŚuōś~Ÿsj‚e ½:ćsÉ’"¾{Õ¼A{iqwi#ÜČ »ŗ=*[bļsÉ/A·~qIćaóE&OŽ=ŗō،ueÓģqÓŚų—[Šü#ćM Ińc#Ćo6ߎ9’õ×ÅŽųåćO…äѾ"čń] kćĆB›¼°ļnī¤UĀ'LŽ›Æ‰?ž*xBŌ<;¬xry_aņŠ¢Mj6ņ šN |“Æx‡ĆŚeŌöÖwŗ3ŽK+E ’¤H¾ƒ5ęāéϚŃŲ› üUÉ×5sXµ[ą,r0 Eū¦½į§Ē}Ą:"NŗLzĶÄČĄOl2OŹxĄČėŽŒ4Xńēķāk įŁNZŽā<®ķÄm*zc)Ž ŗ×üG{m ķ‚y’¶ć­é^ŒUÆcčæ ü5ń[Źņé6Ö³ŚFwĖiómĻŽą’JŪÖü;”iVMŖiņ}Žō» ˆ‚ćsc’?•UŽyŌ9/x³E_·ŽK#Ų(Ź‡Ē _c\ī¹āØgŌ,åŃnÕķüĮēØQŽĪjŌ “gўųÅeš;KXŪ/“”™'…+^i‰ī˜¹ŹIĮu'„iųsĆŠź>gī>Ԭۊ‘;Õ'a¦ĻØ>4:õœ]‡×|26ą1ÜĄā¾‰ų›öŠŗ>§§ŻE5¼±‰ Æ#ļłVŠ`|Ēgć™|q’ -ō÷7^pE•‰CķõÆ­µ]gĮ>$šVŸ¦h×”u…ķäų՛#ŅŚŽĘśĮ¤ŗŒź-Ÿ,/Vǵz#xžźCO“1ä֝†yļŒę›,v0Ż£%¬»‚™ ē#5ś¹š‡ÄoāXM$žl‘"Å#§łö­äĻk“ž$V‰ĒšsĶr’<2|sį+ß ˆ$ŗ%ā 9VĮć=«) ŒÉkč'³ŌÆtŪĖ{›]JŻŹM©Äg5ŌxOÄx{Zѵx.ćƒQµ™d‰°ćžG>ÕŌϰž7xz‰¾Ó<[¢ŅźDGya<2ž·#?…PæšEæŚ”æi_ŁŹēį|Gw}ńGĮģmWķd4ŅĄäĆ c?JOfŽŖ{Øv—–WšÉę<[_’E}³šöYüI¢“«p²\[ĖŠŹ¹*)hræ¼§xšĪŽēYÓ`Ō~Ķž*:$ §>Äך‘’TżŽ&ż‘j/xoOµø¶ųqć3\šÄĮ?ŃĆ·2Ą²tŹž@ō+ź*#£1œČ;Ļ6o6ŽxŚÖdrŒŒzå l£ø$=vĮž|Žå‹ey‡Ķ”AĒ’^®—EŽ€ŪśÕóŸ8äbDļßéUg˜Ī22{ž•pZ m¤¾g=)ń ³°÷”«B@ī8éYTŁdyĘŠKšūŹ{Šž„?ąÜŪ’}Ä!żˆU¾“O¶Ų¬aĮ Bzp:õĶ|gā+Aų„įū]KX¶‘"–±ß2& m*‡Ø#ńŚk”µ¢?–ßų(/ģł¬ü6ń=޽ż“q±ø0Nā?–ę'# =¹5ł›?’#YD²Ä½3]“›±…MN~ā=ĢzŌūi·FīŁźø֎)ngĻ˼¢«1'ŠŖŖ¤0Ƕ($ŠEWQŽ YŅ$?8ąrzKWČU \䊓™Bõäā‚į.…õ"bØIŚ73‘_H~Č“—ˆ’cļŚ_į‡Ęļ ^^ǧéųe Ūö»'`$ ޘ9¦ŽŹmŸé-š›āƒć­Ć>4šĘ” ~ń]’j6Ó£‘NČk`œd°>œūW½xWRÖn-o4ĶT©ZHT1ćĶ_Qžzę¹j&“:N”Æ<Ć…żŌ€£Ÿīššæ āæĆæx"źŚŅēÄ6Ŗo“)„¬ŹČÆĢ \{óӎT]óĖż½¾ŽžĻ’5-J=M#Į^(øšé$XɎÄlIFpsĻ>µńN±i ‚‹EóÕžė™¬ŽÅ¹jahšÖŸvŃ\xõĻĢųW՟ u$‘lÓÆœHPĢpæ†k’¼}Ójlō/ÅuŒŠ»Jr=zׂk9D0ϐÄgiĒPk›e"¤ō>Éų7ćøüSį‹ 2ćRŗžn!~>l’©Æ¢t)VR¢M®3Ē5īĆc̬ĪĖ 1Ļś¾ĆŅ®ŁźWv޲Dē õØå:95eœ¤Œž^1øgšźķ§‰¢B„µiM$yļŒ"\”P¾[dGņÆ=h¶\ŚIcŒē„hbtžZ,QĖ@­"qz§Ė.å*Hä ĢŪ›Óe;›Ļł‰éŒ Ó`Ō¢;Ń@4™×lŅs·5VK€č ä5Ńw%L2ån=ė{E&+j$\ćŽh&hԂŲČšƒ’Ié\²Ž[ßMA"īĪ܃Å;’ź÷"Ż ļqß×éNÓ¬…ęŪ’Ć+ĻÓė@2ZZŃ€ öėŌ,JŻ*ĄčŠŽqHÖ ©ŠiŃIoåŪqü«Ņ?¶c{B‘ä®9Ķ–ÅxĶ£"~„ćµs·°,>t8x³ė҃#“øš)w?0żj¤T˜)ėŒō¦ ŲŽå…Ŗ?“½Ų‚;ÖzĄd€I"°—śŅ-O¹Ń[GŲā R޽M–]X“–9ļAJW3ę 3ĀŁQœg®iĀ&,A½Ü–°ŖE“6{vØ'Ōīćø—t,æ1>“)X¢<ŪÄĀUsß½t=Ÿ”’6ĶʁFWŠę59®-§ÜT/õ®§ĆšŖŹį ® 8ūŌv×čÖ®T}Ńł×TŽ 3uĪäžšö³£‚®*ņĆ šĘA@ŠyCłR++sŽ•“£z7œ ¶8&“vˆŠŗĪ§hU'§Ø®²ŹŠ€BöĒØ¬F¤ö6£Ņb’ TĒ»¦ę°õ}=Fց±Į„±ó³*8I"bŒā» nĪÜø_.ąōĻńVR•˳źt2_I%˜øµ€Ī„ćåėV.4ń-’ĖĘd#$c„K4Q¹“}i=͜*§Źŗ½Hö‰o2a”t#šĮ³HĘÄw—–¶3—Œœ‘‚yÆ<Ÿ\Ōµ;čōŸé÷Zżō«ū»{E.īsŒqļZA~ˆžĪšMkÅ×zoŽž?-χ“}”āŅ"m걞Ī;q_·>ų_įŸųrĒĀžŃm¼#įȆß*Ā =؊Ž2ĪśßD[ ²Ø»sĄ`?Zmx®QÆćsj>^•Q•ĢdĪśĪ X!Qi¤gžZt—¶Ń±F‘ŁŖ$ä.üY µóZ“ ?š®:×)©ź³Žļóę[ž•ƒf‘¦p÷Śķ…ŠĖå²ńÖLóa_2|gż”|5šėH:Œš¾£#£m“2ćŌv¤vS¦~-ü}żøõ½@ŽXXźz•“±°ū,·p>¼õZü„ų§ń×ĘśŌ÷ź:Ŀټ¢Ć¼ī*zn¹®š4ĶdŅGĒŚ–Æ3¾Ūwhā^1ןzĆ{—’A$›œń^½?uXókÖč,Š»óĻ„KāŖ0r S‘Į)ö-Å4Éī÷«’aßærwĘ=*LĪ—LŅüĢķ;FŅĻW¤|6ųm揊Ž%Ņ<'šĻĀ×ZÖÆ;ąÉ䱍Wź;ÖseĘ'ōUūĮōļ/MųƒūKė—w—3”š=DiŽpAśµż|;ųkąļ‡>¶š’¼9§xWM‰%ń…fP1óZå©PŁ#ŠbµHI#–õ#“VIĘ}«‚R¹ncć]¹Ȥ•¶†äę¤ĢX[*>mʧ­\¬B†ŗHŹ ³rW¾ ’ŚvˆF6v5“—s¦•3Ęž-|Ošwō{»Æk–ŚpŁ•A"ļé׌æ~.~ÓŚ¦æŖ^Śx*õ’²Ä­ø‘ŻĻaßĀ‘ÕcäėķBćQ¼øæ¼š[«‰%˜õ©?å€EžŽ•Ńbe+0ŽGåS°œ Uµ™=ō†I€LńĻZÜYŽļNŽĪ0’Üā¹Łģ„LŃŹ­nžøėNƱ…yā /MŚ5[ŵ‰ŗ tw–÷ؓŁÜ­Õ»}ҽéņ0±u®ž ¼7§£TŒMåĪ@Bp7 B±rŚņŹŽą0ee<ą+³½»¶h{u ÄjC9-N3t¾cŒI×5ĢĀγ:“ßõ z¢ü¢ŗ8cå‘Ķw:zÄČ 0eļžŌ}Ä0®1ĶdĒ“ĢY8€9ßZ܋d[{(n×8‘ć+ė_=k‹f&Į-‹†ĄLasŌćó¦tEžAā:V½œŽ’Įė^wqó$^Zm“$óĪ}ė9³®‘ų‹HHģĄ½»@v¾?ųÓš¹|G¢ßŽéꯄ‰IGĢE(˹Rhü’Ņlą“Ō.tŪÅS{@_īŠž•Š<édK76R)ČĪźč„ŗ“zœtSŻmBŗ.“>¤é2ļƒh;W<’jķõMKĆŗ†¤“ƇćŃ/—!„\dśąÖ„C]µ“TŠŅį öl6ż+ļĆÖz†½7ös_GhųbsóĻ==k9IģŽ¼Gm¢­‡‡.u»˜ądTŪtÄģéśq_\ßI؂Mčń2Ÿ™NA¢³"h˾’9mć1³:r"°īaI-UvG8VĻ#‘A‘F!Š1öą©?Ź­Z[Kn©cpVe#‚~ī+HÄhīįaéŗ–ż©é’Ć|±˜ĆąosłžõäÓYƟ$8CŲfƔŁ>ĒńDŅüUį‹­.’Oł9Žå ”üyƇn¦ÕttŸOøoV ®©#æåŠę©Üó»{[»ūŁ®8Œž„gqōčž°»†įb‘Į üB¹%t7‹Šō ź÷ ń]ˆ,=ä2#īó œČÆŪOüQ°ųƒ YkŪ¼7-n_ŸvęĒ_o„8ù¤„sŲ~ų'Ō>Ī&1ev澑ń/† [Ē{c}ó  ˜ĘC~u¼79*”š6¢ŃFŽŸŽ¤×mJń‰!eÜkS™wryn¦fh\T7:„w0$K6öżj¢µ02dÕ&ÓķĖD»®@8ā§ŃõĶKY‰žå±0$` q[X¤ŠĖø§’Ń8éÖ²ē·žŅD! FßÄ;Vs·CyAXвœśÕėXXTvnsYNÄW;bŻåŖ†=«%U›%Ē‚¹ĘZķŻ‚(RZ‰ą’ŽC,R¹_¼@ģj¢ģCe+©šģ”ĻĻģk:駈l³­kĢIFŹr7ɳŒż*ÜŽ_Ė ķlēėYH éŠLÅ®¾OZ²±[\ĘGœČWEHÓ±b M n“|ųĮ«¶ŃŚL$yļ?v€re«(–ٶ†m¹'$ō®‡ķó,ečNhzŪ]hĀĮ™{œÕ[m@Čī0Šsœ7q@W1;HĢH$œš:S.tXõ‘å÷qV¦\7<ÆYkß<‰ęd'Ļ¼Ņžī]A÷Č ¹9É'T )˜ČagĻ ƒŅ£’CØ`Č£¦źDIjl„ÄZ'ŹR>`j®—MxÅ'Ł£qP0ėA'øéš+o ¬„ĻŒ+#XҲĀ€f r\PżšŻ–I# z+ØÓ“»f™·Īr3ĄĶse-[O‰Vy5cĻt5āšŽ¹=„ą·{yJūt‚[Ōēg»I„U+ŸNՕqhŁŻ•Ó9ł‡"“v5‹9{Ų÷Fā¦LšMf .mhIm<^[ņ².sŽ£Ś4/æš|Ö“Ķ R†;Ž+SHŅ^XÄå"ø\“Ū#.GC4ķüū Ą,‰œtė]~Ÿ*6ēe~=ø©0lč­¼•–Żäb±nœvÆpŃ ±šZQ‡ŹĶS(„]&ń®— ½ÜņDŹüērvƞüKq¬¬%“Ń‘>l8’YžČōśÖ/Ct.‡5ķŻŖKØŚ ;‚良ƒõÖŚŪǼł‚D‹æ5šŸC¬X¼Ó<ŲÖHĘõ“Ҷ‡Ī¾ˆų+įMI?¶l”MéR6’5—%Ų `SO±Ņ«÷>¬¾1źf1$i.FÕ.š£Ą¾@ń’ĄdÓ¼SgćŪ »+É$Ča]ŖĢIĆqĶj¶&O”ÓĻ„ųPš•ÜZψ”ŌµWŒī`Oš­ųqĻ­|“7ĀMRĖVµøÓ`øŌ4—fHn6«pĘ­JĘinzŽƒąiō×I$„ß;īŪŅÆźž!Š<=$©›{k&™T–\džßJ‘Et:ĻiŽ’ -SAm9VéCļµrĄńĘsĪk©š‡ļ€D¼»¬‰ūĄ`ąVm3UēEāMI…µiLźG-‘T~[č‹®ŚHĒ%¬@ƓŠ:łS°Kc޾$ųitĻ xÄŽŃ”½‰„"ņ+`Ir@8üøöƛ>,ųQ›Ć—¾#m-"³P«!XĪXž§žk&ÉR>šļ†žŪÅņk ×- Éø¼G£ŠĄWßßšœųGÄ%³\O †·mEŽĆX=kXŹę«]|Ońs_·ńzi–×–ĆG‘I881Ÿį^±įßK¤@ŗ”éŌ mŒĖż>µf®šßėĒX֓Qˆ5¤Šķ“+ņ“Ҷ<#~o­oaø¹If°  *DŚ}ĶæŽ=ĄrsĪ*ƈü_6›{¢¤:oŪ<² Ī9EČą}M÷>±Ńl„ƒMKĆeŃw+Æ ‘‘ŠÅ2O%Ś\[NfÜ ēųŠ!2Ɗ-šßĆ6Š$V[`œąJ¼)o×µ}šēį„ņųźvvöĒL‘ e'6}øļ\ķõ7‹ŠšĻ‹ ü£ź°x£H[/ų˜ĒŹ]«ĖĮĄģIōƛ|FŚ•¾¤“ĖxKi{B,äµ@×pŝ3’:·łā±u«Į«\ZĶz–š#ć,ÜZĘ%%Üō½ąĻ…µ ūÅvڌM¦B ¬nf|sŸ®hšÖ§į-;W†Õ'ŽŽA󌍬Ä{}qV·±¢gY®Ļ Yj¢ącQ¶ž!‡•ŲHä”®Y9O^+ćošÅkßųvŅŅÓF»ŒÉ…ČŠWĻߣėAt£ŠłÓŚ—‰`ńāųćĆ–f_0ĖĮŒ÷;*õ+/üeā;Ę:ŽKórüŒŲźĒŌÓ¹×£“Ō¼Ŗ.Šüq$7š|E%g˜Ićšš›Kæˆ:ķņ 6mjćZ“¦e‘äPy’/zEJČö/‰?“ĒŸäŠõķśĒQޱH¬Ÿ|(ĮŚzóÅs_ ķ,t} ĪMn&µŲ¤$#åŚ3Ęh…4“G$¼ˆž%XidYx›Įm‘ŚķŹ€OPGµzW|Aeoįµm@‹ ŲÓĪ›åfćųVэŒł¦~üEÕķ„¤šÅ*ē$ «/”õć?oāҵƚ-a„·øc&Ös€ŻŌT5M\ó¹ÕRį-ÆV®8żŲį yž™įÆųXŌ“­RH^É˜ī‘·æ_„&ģ.MĻo¾ŃßÄ?ĀĶŖ}¶UE“{³Ļõ<^=ą‡ņ^ėzŸ„Ł>o³D­åde—=Aōę±³[&ÉžČIx/o`mF&;—”eķzöżh-¶ČŅ&×_‘˜š+a“Ļ3ńƍ.¼ém.fc `tĄéĻį^Rš…õ ĖkŁÖ9ļQˆpļ/¦?>“łBĒ¢ßxĖįĒ…ü4l&“ŗ²Õ‚Ÿ#c®}1\ļƒž/čWŚĪ’¤¬rµŠ <ĪŽUcfĘsŚŗUˆ²|’bHÜ Lö5‚> żØ~É¤ė¶ž,Š ?e¹ØĪ2ēƒųūśŠł^(Ž9Apˆąądg‰ŁģŁĒā ÅķēĆ?[:čÓ'™k)‘Ÿ#ŪžÕė²÷ĘÆ~Į’¶‡¼uas©YųNņł`Õ#ó †ę7qĪ;aMRZŲź§¹żåÜźń憼5ńĆŪŻčšĶ¤wŠIŹ’Ź Įwń®ŪįwŠēš¦·i™&{Y˜E*v žõĢ×CSģ=oD†śŻīa¹ežš5łc’KżŒ“ĻŪ;ö<ń„¬“Öŗų«į}{Ɖŗid‰Xł#ųˆeܛFvzWneā®Öާ5HŸēæć#‘«Ć§µ•Źiw‡ Øv°ĒŌҼrņĶŅmūJ.kŗ”Æ©ĆV#¤ņØ8#± Ęė‹„óņœń[’ŠŽRYwŻĒؖB™ 7fµ¦(/,£ÓŠ•>WmŸ*weš‡1¢Ź£ä'‚(c”fAÜžõ”­Šé†…ˆ#iB‚U@c­z¾!ųĖąÆÄülų~÷PųćĆZ„¾£nŠ>֒49xČčC ‚^•(즦gģEūTxKö®ų šóćw‚ļ-ļ4MjĘ$Ō­²ŗ}ų\I‹Łƒ©ž!Ÿ„üIh'·†G…Č,‡Ž¹j£dķ”åŗ„ßiź\$—ž„d0ī1é_›Ž.Ńįų—«ŲOfƒ†¬Éąķm.ö Q%ó€Ģ/Żz¼k“õ)³Ä<1ā%ųmńŪZ‚'O…„wjĆ÷sDx óÖæH“»ˆ'ū.­a0“MDÖåC!č?„{ŲKø&rUčfšÉʜc5~ŅõZÓa/šķŒt8åĘ&Ģ!~Qó}jÕ¦£öu*»Xć§rj’±!}¾ļ]ĶŌgµcj4Y½Ć2¬«ČļL„µ0­–7K²¶3‚{ÕPķot­ °c“»Ņ‚Ėóß<껁Ī1ž¹ŖĀŽ™Ā:Žā īGéUž#“ĒjŠŒpK‚ģ~ī; ź<1{®£ ŽFŠŁ!ŗ54„z®»āĶ/TYŽ p"ōę‚+8®’壑Ą|€œb¬ĘĪQ°“¼[{øĖīĘvzUK™#³·‹É!YæJ‘¬õXĆęQĪvēŽ©jW,dó|ąš}h.2žł`Y>vĻū•˜Ć« If1;“¤­“m5ÄņO09Ćšģ“§ø¼“Č’†Ū¦vąÓ3rgeœŖģTއÓä1”`ū\zqv$Ąæ×,m£x™Ģ,N™śWjŽ"»šš-ŖŗCŻCI»—õ9ŻCWµÓ\5Ä©<½x~•åŽ;ų³¢xzĶo5=J- ŚNń•»sĶ#®œŹoŚöå±Ńā»Óü-­­¤Į™ZmÜŹ¾Ćµ~+üWż©¼eāMGPGŌ§¶Œšļ;äö=­iÓm±ńߋ~'^^M+I34Ŗ6‰ e‰÷Ƽ×.µcu,“xf5éѧcнr€Ģ›‘NóŸĪ§ņNĢäš;šč<Ŗ’»&…C“ŠŽ†ÆGnį_rmcėA™±¦éļ3†T!³]>›£Ż_^%–c}¬źNūVŅŅ#$®Ž€ MšA±_±wüćgĘó¤x·ćŌß¼ CC²Y#'„9ļŠž¤ægŁą§ģē”G¦|8šv™ozA¾šd$X3“\µj\ŠśĀ $LOœłąžÕ ØNqÉܾnˆvĮėPĖä+»gø5ĢA¬Ū£&Frjy1"؊"QŽ*F‘HZ „.yĒ‹¼k„ų~Īk­[P·Ó-I)Ąo§©ÆĖߎ’·¦™¦¼žųo ¾×™^v]Ɏœö ī„:–ž6ńw<ŖŻj-×/oĢ­½`Y•ö¹km=ĘŲĀ—t­cåLŲ]&'\ąmėŒc«Écåŗ•<՜³¹ŅXé—¤k:“^“įφp]<č탟\RlĒ‘žė ų'L“‰Q-}¼šź š‘ĮÕžé<å(w7ģü%m*—(LĮ®ŅĘĒģH {t¬Ū.Ę܁®­Č…„r:w¬­>Y¢”G(d|õõ¤`ŃÕÅc$ų‘ćÜ9©®žĢŠĖ öĒց6ņĶo?˜Ŗ5«*%ÖwŖ¦ļNŌ_ģĮr™Īp=ź¬ń^Ų³¤…¶žœP¤3€ø“,sŪŹ$ˆ`ūwؘd»ūB(š6Lt⫆ެØOSÓ5ī·q{d¶‘<`ŠÆwŖŲOį×µ¹Ó”‡QL²ÜFpHōoZÖ)XłšxJž}auM ¼bwm2ؚ÷ Śj–‚1{Ń\– Ō³G-.zM¶¶‘Ī-̈²Ķ×5ŅEwŽa½s҃"ŌLQäēœu5„ĆŪå£#ėé@Œ Błīēhę“Ė#ŽÆXžī&|Üćp ‡4M©\[Il„ßcŸzęnW'b„ņ§½&‹Ųΰ‰^U= lxrHa­ÜbX‰äJe|Cc³ĢöˆL]Eqmb³”ó[¾;P)>§K”ʓ8,rT«•.”Žy°œō)ĀÖźf¦<}źµ›˜²²ySƒŸ÷ØŌ[ßt…ŠzsZWŚĖhnjWéĶsB–˜9Ūq÷·j“0…ĢˆOJĒ–ķįacpG5‘=³ź\°1…l£Č ØīužGÓ®-ŚReˆ}ąĒ“]G‰ļģn­¢EdpHåi›/­ųSūU¼õøXTŸ˜HjŅŠ“ģ{uFhŻXä9ć錩Ė@hŽi9mŖzŒƒF÷ÅAŒ–§?c >s'˜Ņg=Ż®®9ē¢Yć^†GrŒ÷r²,m&{rzVxŠRąŸOz yQ¬–nˆ²mf|r+nŅõ#‡ĖcśPdŃža‘¤Iēž”Ė½I ŒĖ"ķõlžµQÜB鶝– Œ(|p sž6Ь®t°Ńī¶‚Ż>體‹ƒč|Ϭ鍕ķˆuÆ5ń “¶°,ļ4Dcx+ ģuB]%­­õ i-]T«zkēļųi4;ėČ-ŚY”pĆēÉĄ=kCók槄4ż7IJkŗU©ŽBɁƒõ8ō®;@KÉįŠņź;U •‘— œp?*Öča;˜7’Žxijė:|ЉeMŒr’ėXę½oāŚę+H æźžZį[Žŗ ŗœśœ¢i·7· <<‘ó€v•ķšōéZ„ŗŠZĶØXŚ].Y$2ŽėœTŹ&±•ĻkPŌ”ŗÓog’ŽęįTeńė_Zx ā5ђŌčķc©[?’üŌ©ē'Ö m±iįżß$vĒjŲÓ4Ģ“ĄŅ"rxėAƒVŠęaq‘šÜkČŅ̓ڤĪQ±…d*Źł 錄DC†g>bō$ŠIeÜÆ.ŪĻN“±Čķ…ĘÜūŠ4eėöl“*±Ępr}My®„o„ŪŚČ¤Į HõÉ č¹ę"IćhQd·głÉ<„Kā Vʳ¶Ipß6Aė@Œ}=tdLn)žq]E”F¬G ržŌĻGšÓėĶmžĶœ{×ŗĒį–ŌO"+9\ōū“ ć.4ƲÜ9I€<ŒńNIŪ Ė™; 8]­Ć6ō Éź8Æ1ń–ƒe>/dI"l•Źž¢41ŌĻNZ9’E#”®ūW”BĢ uĘ=Ŗd“2NÅ;{˜eeó$Uąšģ4”=“S}™aø wŽÕ‘ŃNG–kn—T–(­Źé č§ŅŖe¼ŖJ«,Ūp[ĶMĶłžĆ ±™ŻS ͜č-ĖŪČ “ztķÖ„Ģ„.Åß¶:3(łÓ×Ņŗ-+^Ō“ČŌZ?ČNJ°ėL#'rž„­ÜÜyßvIł@ĒįX{Ą‰1Ē”×4ä®mĪp“PÜģhÕ žH­IuĖ;BķsɜärX•ŹŁV-føCŚ«ßxĘÓQÉ«OnѐĒ{œ`vµÕLĶ”fÕĮŲ'fuõ=ŖīŸv­“B~Gl“[#ŗƒ¦XZŽŖćĢČR;šą|QįĢ]o”(ČU#šrZ•“Šō汃,ÓFe^>cÉ÷®Š|]±hHÜ0¬g¦œČʒ+ˆ]²x«Å[ĖfEWlsÅfKŸ`†ä‚ß8w*Źė—QŽŽC98VšŲNW1ļ·_2Č÷~c z{ÕՎķQ# Ķ8é[ĘD4W{yęܳ™F8<‘śŌ²Ł¤€|īˆ£Æ©¬˜ńmCB×7ūgµhjö½Ķ4‘`| ƒŚž·cmAķ¤zęø{»xīJCpĢŽzœąėA²‘Ąkš+¤d,²5¾~śžõ/†ō³å‘ĮÉ,{ŠŹ:Ū½ hēu Ŗwƒžžāµ,­~Õ¹”Ś¹ĀśŠ>möŸ ‘¼«žŖźź7·Ø«vaĪFß»A•‹6ö6Ӑѳ+އoŽśÕĶAeŽÉć‰ŲąvpÜzVSCRG›Zź×‘“žbI"‚F ł‡5ŌXÉ<¬Ć&zm=Ŗ Nåė¹ÄK“īySÅbX\tYK&#=i™³CWMŠ”FøcūµSFµš=³¬Ä‘•Įn‡é[™×,-ī<‰zg&¹¦’A‹2žJ.Fģc&®2°ĻOü_ć;=?UҧÖĢv6čŅŪÉøé÷1īkŠ|}ā}jÖūIń{öi°0Į‹Š/·½zĒ5HrģO­Ą,#$²)Ż“ŸĆĀź+w}{§nxŠ“·kœnöPÜĖ™õ9żJŚöņöhōčęQ¶4L>÷°8ÆØž7ˆ<'£­®gÓ āA÷9?˜ļZ‰³ŠuæŻ6£eq£Ķ·īīlķzƒė‘ś×xē[ń‰%·†āśIōčĄ  {ŸĀ‹bÆü#övś-Ć^źŠĆ0Œ•aݻӦ+Eń‹xVēLÕō똮@";•,B¢īĮ8čN;ūŃaŸjĀq„A”Ūjvg̹e µŠń‹ßu_hJŅtė£’åĄŽ&ēęĒ\ó’×§bćŸµĶöƒö°dŗ{–ŹĢw°ēµ{/ĆļˆWŚtZM½ŚI=£aelu@õā†kcč¦×ōĖԊ/.+`Ÿ0äå’,¼-­iÖ6¶±Ć;Ę|ƟyĆ1žŁ4(ęķ.ßįȵ·ŌĖYƒA“šŽēńźæž*ėWŚ”gāsG)ŠŻÕ2 Ėgސ¹­”®5™®õxŃä‘Ė0zkˆńTšų Åņ_ŪMv3ȂW–Lm<䞡v £4?Œ?ŲŚ%¦ū——E”y²<@²0Ē=Ē5µØ|Nš†”į^įõk{Ūf„ā @ęĻL÷Ōø”黯xŪĀž8ń«įż.ķUXɾ2päćé_<üešŽ”ąI„NéĻ–cfł3ÜŌŌloŲó[k-D\‡CžÓÖāÕMóEåœČŖr§Ųkėˆ#ŽÕl¼† åę·h©÷āØrÜś'ąŽ‘”[é7Ž»æū<Q2ļž­ĻŻÉ=yƜ5ĻßiZÅŻ¤fźK+§exŪ†Pz{Цõŗ“³;‹}r=BĪā+ŁÕdŽ"S#ŽĆõÆŌÆ­™ē|»™$/ŌüĢ;ÕG±·1čš®§«ŁG<Īā"Ošš2}kī‚I‡q£Į4m“«ŗ“’ūzf”‘)v<Ÿö³Ōu½:]mŲŅåŻä{rPu<’;…yv‘x£LnnĢŹˆ9.§Å" śœ“&£ąßZ-ŅZßé/ūĢČ灶¾¦Ņ¼SšŚóL¶7öš­ó‚ÄŖHčWøØ–Ź3{Ą—>łÓåŗ&ĪbvŖ7{uƲü' ųKĮāßW»Ņ4ém9wi# G'5–ØŹRģ|ĆńRóƒųŃō«O X^h×éQÜ$!vóʃŪWĖ’ml­ge€hķ™÷¢•ĪĮŽ3ZE½ŒļŠó­'Įś½ōIhˆŅŚääHÅnIdtōkÜ«’ķ[©#Ó>|Dµµ¶nķ͐,Dß÷€Ø¼&Ÿ«,(Ö²4ęFó°jnCgį«‹ˆoķķe²¹pĻ×.>µ÷ļĀ’ƒ¾ń†™qqØjégØÉXŅOŗž„äć5”äķs)=O”“-8Y|LŌ“kI¤Ž[+†LŲlgéĄÅ}F<3įtÕ­µ©ķmŸUA°¹\½fåtG{„hž,Šõ(¼A”Ü5ފĢ]įÉ- Õ}«ŌEć]#\ųƒc«éŠŖcKČc,³Ä÷µÜiźšē„-õkWmGRtWņ$%dlćž{Öōę­”.ž¢XŻßŲųröūÅ 4ł"¼–` Œćå<öę¼cÄ~;†Ī(/¬—|p¾ęÉÉŁžG抝Ķ#3īö^ų“”Z.Žń6±)Ūö]ą3ü¼Ÿjõ­böoM§čwó%Gū2FćæaS(•~Œģ”½ń§†u-óK$ÓēR'Ÿ5HćŲŽ£ńÆń„¬|Yā/čž““ŠüK‡l·`;cœļžzVV3{·‡ž\čžņõkHā׳3*’pO=łē5ęWÓųĆÖš{ŪŹŃy˜YAݱr.š.2<:}\Ż\^Ć<·¶ģęrœ÷®ćį†ė[ƒPŌ/D–%É+³ ·=3Mɚ#Š?hσŚ'ˆ-4½Ąķ}=ÅŗĖ‹v#ldÆńÉĮüÅ¾±Ō沤[D–ŻNKIŒ0õ4…Ė”ÖŲųŸ[ÖµŪĻéś|Ö¾&oż\ž‚³|IcćßLÖzΉy„źlćloõ¤?gØūŸkśX“–źŃŁa!œ¶A_§ō¶—.•ć iƒJŽŠ^Źž\‘ !½ū~T ĘĒ“xóC»š„Æiņé×$ 6NWäšį|Eć'_¦‡wŲ&ę@S$g©¢äœ^™ā[Ķ"#§éÉ#Ū’Iˆ·Lśf»/Å^4Ó>ĒØh·ė[·Ģ²}=«HĻø§Ÿo­õ ŻCQk]`;KRēü+č S^Óę’85£Uƒ·Ž“å»9ē+hrō¾Ō%Ó®¬ķa‚ź4Ų\/śĀ ēłW#{y¦Ć3-ć­ÉĮÅ)S2sgœųŽįt› ‰ōKifxŲĆ.ļł×ęÅ( ^$½»ŗŒŲDåb "•ó$<ńžZĘŒśŸ=ė6øø“ ··µ3ĀŗÉš¾»§j¶·3Z¼rmŸÄéŠÜčŽ×?X¼ā‹očVäÅ;Ė“&Ę ōÆM“ß/–COžŌ™²Fo‰ü%¤x»KŌü;®F‘Ū]@ń,¬2c“+Ēł3āóĆ Ō|;Ŗ[Éķ¬¦"OIt|ūÖŠc4[Ét½cNÕ-3@ł6/q_hü@°¶ųš®ŪÄzqݭLŠ9‰»cÓ’ÆLéS?£Ļų!Wķ”ań»ą}’ģĒć-DųA],|Ł>{‹Pß+^øüG„~ÖŻ^6wg&1q’;VU77Œ®}ßš×Ŗ~!Š,ą7;ļ¢M¬ų—¶*ƹ Ń5Hõ8”ó$CĄt<ž}a³3’?‡ų._ģ?mū;~Ōöß¼¢%ÆĮ_‰1™I·a°ÕGĢźW¢ÜtÉcÅ>śö“%‹Ė <‹+ŽOEÉĒ銌=G$ļŗm—įcš„3˜‘>E%׏NÕ]#’Pń€3ų×qĒ8d¤O‚Ć®}*¢¦ģm\ć„iLŹĆ„RlĘNÜžT݃c’v0ģGŽśU±­Écg+€öō«L‡ĖŒ­e's¢#ābÆéŒw®ŽŽķDn’åāpP‚~š#𓲙ūŻ’ū~ܶ³Æķ©žÉž8Õ¦“ųYćY„šŚŻˆƒTĄŹ#ēxõe\wĻ÷mqZžž²ßh‡ ükŲūƒĮ¬ėGC„XįīōŲmäMBł¾µó?Ē/‡ āż QŅ¬ĀŚźÄ‹­>p¹Ū2ņćŠó¦µާēÜs\^ŚĢś‘µŌ`-eØŚČ™ć  ‚ü+łį’‚•žĢ÷¾Ō5h0Ēwt#ÄĮ~I c’TzćĪŖœķ¹œ£cń>Yą™‘‡©+’¤r:ŽkVfbU0;?wSg%DF±¬‰ ó6Øź äÓc ø2²‚ī+S%h 6§µ@®#8‚» Ļq@8ć'ü)C“HÆO„E˜Dqļde«JŪhŒ³:.…Ē4T÷=‹ąĘļ~Ģæ<ńėĮŗĪŸŖh÷k$Ȭ@ø€$ŒŌ2’5ž”>&xćWƏü]šģ‘'†|]§Ćqpą±]2æŽõ÷VØ©±Ł¦|Ø_Aq­xSX·1_éī 2“‘q •”žŸ­‹«Ł /mŽ’›dČ?yõŃÉ|Jš‹ńĄŽ+ųcć]6-CAÕ¬ä‰ br§ b ’›§ķ—ū7럳ķćßÜZ}–Ź Vh–9d-41Élõ`‚+$€ł?S³¹d_!—Ź'“Ü×1ę¾—t“ ‚HØv>¦š ­cōWq8ĻĻ‘īE{|7–Ö·h”Ä6|§nyÆ'OŽfѕϖ¼yf·wctI3Ō¦DžÄ{×Ōæ²·Äķß MąŁ$›X²‘¤·Wą¬`Ŗū ʽ, żĖ ]±4BÜ:Ćr‡¦ē€}뤆8ܰ‰~a^Š–‡ Õđ¤mɹ×žŁ«öŹaĻ^ųéB™Īm¤ā8²ä1VīŅ=GI¹Uu õblóxtłmŖ®Ū[œT—VŅŁ±2ėž9 ˜²Vū9‰]_n}Zq…$UĖ‚£ī絕īPCµ~ņēNPB+ŗS1Ęh‚:@łdŹg„ki¶­{rdµŒ˜Ē$ȧp;żcĆÖ6öq][•ž]Š\¹ļX° dŽ,ƒ„ ‰ķīįŚŒpļ\ę¶"_-2™ć= (iń=ƈB8 kŲX\OtŠ4,Ģ­ŽGJõ}ļD†“}N+]Ū«ø9VĒ®+Ēu2–śÓĖj6@Ē Ź?%ĶŖ_%Ōvē5ĢĒ©£ŻĪ\ą‘śÓĢQĶ9h›qœŠ“–Ű7Ō@jI[lV`źFö­H-£šŌ†`ž”€Źc›e:UŠYpzśŠ4[&+„ż÷Ļ 9Ī9©-äCĄ@8 “ō%y¢P6ø'9ā°5T ń·š:ż(3 ³š8³†Y§5¹™0@ *ąhQt”‘ÖWbż*Y~Ķm˜0®  ŠīgYŗ,§3Z·PErGPÅģ’v—2ŸC&hó»vzUS¤«:vØs5‰möD);󎕷”A·=9¬äśŒŻÓ¬aøš<²ŗćæņ®†ķ4Č4Ł­ŽĒNkž{q}¦ŪĮ$dؕŹsŒW›^_\¼ņ*JäéZAŒ”i¼Óęć~{Ž+vŽŲO¹Ć…#œU4k ŽĆĆгÕ)r"<zWŖjš4dœlĒé\ņ‡sjd~š·Ä?‹ŗ­Ÿ‡>é^!Ō%0DŽT+žXžųōÆŲ٧ž åąO j:ž/›x¶& –@†ŽOp}čQ±£?Se°”ZYYģ¶²ŅķĄHmį@ŠŠĄ­­8Mr>Ėinļb™ƒfÄ:Ciņ¤³ī*ģmŹ:)/­#–įcp§~µĒjzš@ī±9w<}(„Ōµ(wFą3Tµā:—4Ł®§³[Č,ķŌĘF €;’h:iÄüåż ?jŻĮĘßKÖÖėT]Ū[÷eG©ļ_Ÿ?mļxŹīōi«Ŗcc)$qŽ8?…mNĪ„+›^(ų‡}Ŗjŗ®Æyp÷Ņ|ø/¾Ź=+Čujī²5ĆšIć5éҤ‘ĶZ­Œ<›•“Ļm¬9õ4Ļ,ķĘpnę·<©Īå‹8`]ͼ«g<Žjō|6pæÖZkˉēå®’ 6Ų"„ưf “’~‚³”ś"£Ÿr~Ėß°7ķ ūMjö1x?Į÷žšsć~±v6ØRyŪčq_ŌWģo’˜ųū4YĒÆźśe~!óZņéĢ‚'#œē”ĶTm”ś±e£Cl‰Hā0Ę#@:a{VŚÆeśW4„qņńėšUW“ÅCv$$¦ t܅AĘkœ‘QlŃ8,Å»ū՜*&3€*e+r¤×~\M$1<ūz…ģ+āOßµļ‚>DVĖP¶¼ ±·Œ‚įĘy4FżNŚp¶‡ćwĘ_Ś{āWĘŻFoķIfÓ“4˜mĖą•÷ĒJłūI“1ÜHÄe‹1É?Ī·„z;lvŹĪ»ĘF*²-]¾Ź»Ō ŸZ¦ģbŁ1Ķq0@­¼¶Üc½z‡‡~µŌė=ӆLghk'&G!ėö^ XŹF-‚(QĪ+Š“_ Ü+F°Ęy8ļRD¢{>‡ą›ķ=EĪ£n 'Óµhź¶6ĘĘŽ2~ƒ„˜PDH<|×Qi¤”gv ųĶ·c6ī)ķĆDØæ­dļņHóĄ žōš1j2”qÖ·¬t+­FĪk؃x ÜŠ#“¾Y­K$ŹŹĖœ„VÓõQ9hRE'%Ojކ什FĒSłÖ¦§tnmć€Hčqց\óėø¤f&‡„D±Ė”iåōØ˜Ė mv°›ҳ¤·K“ak‡u==« ›$‘“rĮåĶāī+ž¼ŅŅ&`gø  kŲ†ŚÖ2‘ZFN;zšī­4é C%ā|ŻŲzՌŹÖ|+k&±i;ĢŽQ!‡ĖŠÕ©,^Īź&YXū‚{P#¢šÓĆčņÖv[’>t=öŖk©Ū6b݆č=č&håuĮŗhē,N9ļ]&‡z`FFå ÉČąŠbnŽZĮ$"xĀØžķs‹.ų‰š÷ū~ĀęĘ[8­.Ü:eš žyōÆĢéρēÉ©Į%ÄģózŠ”EŲõHļē³¹‚ūLŌ[ķ Ę$?(>ā¾”ųiń_Nm{OÓµX“Ūk«€)Į”ÆRNk t6>ĆŌ5ķ7Ć÷v·3鉮i“’rłņ”ē#Ó²µ-BÖśum nŁ×,²uZFUΦåŹI—&ÆĶiu-œłŠ®ˑַ‰“•Ž^Ś F5k{‚¾`ėōōŖėm¶V.Nąqō¦QÖhVvcPŒjK$–dÅ>öqĘ+޳æ†÷L“hõYGłyĒæNµ‰µ4|'ĆżGĆ:Ž„köŅģÄĀRMĮ×¹Ēnõjß@Ō^Žę=\Žč‚XĆ#…vpėųWV÷±ßsB{č'Ž5?¾Ļ1·õ®’ęęšZŪŻ[̶ŗ¬ ²GށĮČ’ Ę õ,śŸĆŸ“>°Ś&™A4ŒoܬŽÕöwĮߌ^Ōm4Ż:÷HI™›2|ć žŠ®˜ĘÄĢūŽŪ_ūFœ$ RĮ„wŌ¤–x“÷[ö°ĒNqLóźÉv¶į °O K» óķYģHŲJćĶSŌ Vé[C’M•°³0Y@u÷©ŹŽŅtaUaóeMQžÆ}iyhń:å`Ęk‘ƒķp@ЉĄ8ē­j䀆(ZFiٽ€³§ŪĒ4‚5~܎՜˜”! ™ōĶźš|‰9E„¢ƒÉqŲ éļ8ŻŁ³•ĻJĢ”— „Å6s‘T¤ŗŠŲźl -Ą2‘ĘAÅaųŽyeŒM ^ā›fŠ<Äś…ÄqČń>ąp0qĻ­yF–Ś£“ƒTD3u.£ƒō¬œĶąvšV³6•ĮˆĖä ō5>½ŖOØ[6Ń:Žy?v zd×/m$»nąu“Ā^'ø]OU±Õ,„°…pap“>ŻŗPgcÕ¬uŌŠ÷"XCžEz^«YŹŖ$ž9pJ 儵ø¶“•mœd”euōģgbµäģØ<bzU‹ VÕ atIü'= i‚ó<ļĘ>,ø€=„ØŽ˜ĪT׏~.»×^öĪś ¹•V`ŅDĻ€Éßń§#s»šēˆģu p޲Ē2psÓ5ŁAy§<ģ2ēkfʙ‡nīĄÅ Ø#Œ× i¶V0”€CØzqLÉČŠŚŹy=µz.—āI¢¶ū9Hǃ“҆ƒœĪŸĶšG˜·ŹOjĀ’x☠8ēŒŽ“…ͽKČm9$¶‰ ć'iē„xŠõma`ņ^)C§Ķøóēøf}łķøō¬ė«9dÉŽž0Ž“‚ĘC@–īévį$ž.ĄWYk}%µŗĮĄ”ĒJĄŠÄ›†ŗi™ŌžŽ•©-™øÜ-cńĒV|¬ÓŸCĻd‡^°Öö³+€T¾æŅ»KėČ. ]˲|6֊ ˜ėfūCĄ†LœŌėö’ŖPl?ķVS*—į“ł|ÉmĆ©sė\WˆtŻZia:eĄ·PŁuŪ’ĆŠW FĪźhęJ_)uyKē†Č©^ĶŹ*!MĶבXĮ³YEXŠĀŃąpLŔ‘•=tŽ\Y‘OvÆF‘ĒSČĆŌc…·(qÉģpEYӗģć6īŽY=OQ]p9ĶŲāŌK%Ü7;#VĪC`ƒōü*ķŌ7× 2LIÜ~µm 8bŅņŽąf9¹ń[Ś BH–0ā°IÜx®jŒ o­ēBX¾6õ'°­m6Śsł‰ēÉJÄF>¤'³ŗŃŲ#t¦†RìGgLȤm*­n; U¶¶¶fø&oCšåo¤‚įq)É=t¬§pågņŻÆOu ź o%ĆŚBĻóѽ¦j•¾‹h|@×b×ĢĒ8ü+݊čg6Žˆx£ūnŽÖŁv¬“jķǹā»_ \ų~āxŽöŌKwlŹujŃE™4tiwį©õ1aŖĮ¶óę!HųV7Ś“t­_LńEž„£iŗ“ s +“ē Ē “ߌ“^d8Ÿ†¼į½Kŗ»ŗÕ®fŒ«Üė¹_©Ąō÷Æń³*¤Éc: 7ČsŪ4ćbŽƒy¬ųoķnåšE_•CżŅ=A®c^Ó5½/>ęȹl±R0»3×ņ¦K=ŸĆ^-}CĆ0¬Āę+X‚Ą¬« bźń5=P°[k•”„Ś~p@Oé2<_Ƕö¶ŗ ¾æ}’Čß{8É÷)<ŖŲŽ^ZC5·Ū[ĶįqČĮćBGÓZĻ„µ+Ķ&ŪUµµ¹‚9]„aG @äéĶx¾… ½Ö„uįß„ƒĢr¶¬_<õä~tϦ¦Ŗų+A¼¹»Ń/ļZ(ŠŁ0¬GjēōOŁčŗŗčw7"ÖŅ)6†wčæŽ=艄„}~Ó.ōÕŗ‡R±ž×THdt' čFy¬išÄŻö V÷k'&N ē©śu”‘©öÆĄß|;Ō<q ųĘĀĪåbó$de`l#޵ł“ń«įOˆžx‡XšŹIuØųB[†kySņå÷uŽ*9µ±Ł wģń¤[é·÷ ™…ÅÖĻÜķŒSč}{׊ŗēĮk‰Zž‘āĖ‹Øä¾V05¼nń·‡ķ®ōčķą•wŒóµ×<פ|CÓ5 Żö{-7ķŠÅ‘>NŪŲŽ‚Žc JēÅ–ŃŽi·k{q[\ī%•Gūצ[x¾ĖČ»†(ÕN*ėŠ’²Õ”›ĪkW±ųĢ²’ģĆ9ĖóņĘGQų×£Ūxb×SŌlõ-AÄ;Éq³€s× PD£cč?[b²·–ȏ•³łf½ļģļ¦j¶÷IÄhĶ‚¹ēėŠv2”µ??×ÄŗŌß’=gK™Ö9óoŗćQ–gūDo‰6ńøc¦*Yg‹Üxj :Äźv©|›‰óKŸ—wlZ©į½N%øg ±"±ķŠŽ`=ŅĀKR†™j`2¶ŲČ9Éī+Č|{¦k> ŌßYēH„m³ČĄ²FĄcŸØFMkcĻÆo5 ūW»‚20)ŠūÖ,‘>§p¦$‰§‹n2˜ĻÆćZ©÷)3过¾46/¦ųsV†;]!äc€rGOzś=—Oš†£o}oØC©Ū˵üĖc» ž3ļķP×RŽū^Ņī¼Mkoo›sØYH»#w",ąŸ§5ó׉~ų§Ā—ė{k§ ,‘"ŚO¦zÉ»nR‘[_Ń-uķ 9?²’Öś0ž¹?•|ļ®[JęK-Õ»DćåW*[±§ Üź<ysż„h×^é«lźwŒm#Ōēµ~¤ųkVƒÄ:Ÿ“ķŅ RĖü\Q#9³“½ųeχ\i–f[ųŌ²£€€gæ3¾&Ü\j÷Ó]Ė£Ėoq‚Žā8;JœgéļQ×S$ĪæĀ:_‰†•öż*)cT\•N§½xļ‰Ó>ĖØj–°$‘v†éĻJśßHųW©M„­Żę™#ċņŹcā<ō¦nэ¬ų~"-$ņķpWŌ ōmĒŗ¾›ą=Lo*ȧĖ!įįņzśŠg$-żš ×õļŠ—‹Æ“÷ŸA”Hó¼2Ÿ”v=M}MńĻFŸĮRé¾.Ņõ Ÿģ āņŽ6źÜ\’1SŹW.·:OüIń^šōk:•¤,Ēgń”čN{ćTæ¾5h8¼k¤š-pš“vp¤Žr*eNä=Ż­üs xÅ~Iå]'TŌŹy"pȃ?*üĄ×tŪ­'ÅŲvŖ¶°³·ĪPķ*AŽõ„abS9oŚ᷌tßGÆ[Īi°0; †WĘZ~.±`m$YŠHéĶuә¤d}ū(ų"Ē@Ö5o\ų’ŹÉŠł±”˜«DWŒūŸĘš†>#éšß UuWG’H$żä;ŸĒ5æ5Å(ėt3G¹ū Ķ–‘ux ¤<žµēænōh¼qˆ¾Ń&Æ[€˜‹åóHd÷>æSQ(v!E³2ėā-ÕÕÄ×÷ģef <¬>ö3^iwā+jŗ¦‡k=“r,Bp²}پžżj,Zę’|"¼»±Õõoģ÷“pw1V<š@ėT4FŸĆ­§ZNņÅrū€$ʑ“N÷Eų‰©ų ÄÖśö”÷ŗ5ćķ‰Ż2ąG9Ē'šßń—ˆ¼¢ė– §ŽŲhńHC“¦EŚXóĘhG°ų#NŠoÆ4_Z½Ž”Ø© ·ˆ9~˜!ŗ’‘]ļĒŻBmfĻE¹»¶C5¼`E#Œ1lz÷¤ŁŒ¤Ļœm§±ńqŽĒY[h®Ņȼ‘Ӑ;qW¬¼;ŖxiŅK’8˜§HNæżjĶɍLļu’XüCŌō›?Mˬb٦U‡”cߚłÆĒ>Õ4VīĀx¼ū6įcOĢʓ)ŪcĀžїR7ײ€vć"Lv•³¦Iy?‰Ņ=Hiį[ÄI" pŖNsō«Œŗ7CōćĘ©¦ųį.ƒā,,5½©—mYIǧ5äžń¶¹ā?ģĶNYZ[YaVfßĀW]9J)ŸJŚĮrmķ§$é³;G¾*§ˆ< ¤ėŸŁž ³ń¤ļEÕŖ¹ø>ųꊓ1PŠŻÖ¼ §źZ=»hS\—x>h,Ą>•šGŽ-ż¼’e7öĘż‘>)ü k;KÆŚŪ6«į™%ąĆ}Z=­ü99B}æĪcĒ~¹Š.u«-sM»ŅüG¦Ż¾Ÿ©[H›M½Ā±VzŽGz…(©ņuzśŚÉæĖš9ęś%p#·f„ŠÄœŽ©·ž±”I5'ųĶąm_LÖ&ų‘ ¤7>Ō$ڳĘ6óņ™Gb{’Æƒæj/†oÅ?…h7¶Ń7‰ō‰éīTīŗ·c–OroN‚°L?Ž†2|'¶ż <- OÄM|»»«(ž{Ø@łV`9aŌŪjŹąZ3„šżƒQ¶Ķݼ­šH(Ač{×9ā=Łf6sż’™A+Z °¾ń ޾[U•¼ĘR¼š{Zś×ÄW¶¢kVltŻŽFķXW¦iœÕ-|Ę3% ļė]·ĆXn“oh~ ÓŽ+wŠQŸ!̈HĻ"¹ć4¶.O¹ś«gšö=BŹRĪõdIbYŠĄ\óØ¬+-ń]\Z“ĆĶGŚÜżŚķ„Ī †¬ˆė‚Ł#±Ø|Ė…#Ė9_āö­‘©¬š9p7vō4Ķ&īDóEdMŻūÖęrzčgĶ©%µō«Z6o˜‘Š—RTŌķU¬É]‰’­ĮfĻj ĢÆ²Ā+)ćœ’[yĘĢeG„}Č78 żūSwHē ³·” ³F×OIšSņēó­ż铹٣*ba“ŒucPń R\ŖĒ®[„¦l¼‘Zßå—= ÕX “˾9\¬ČNQ‡"™i¦ŚjŻ €Ÿ'_j@0Ci¦J›0dõĘҟ„mö§b©ĆsœR+_š9ńt†$øSĪ+˜»ŅšśŻī0—89ĪO½_³¶–ŹÅķĢqŗ·!±ČśW9%»µČdpJ¶°  #‘ÅŃĆ}sŽ»k4K¤UįHühśąŚ]Tõć­iiڀƮ~RqČ  ėč­F\ ąqҹvīį s„tkoŪ¬±6į›>µŽņ5‘H=OåĢT`ē'KQƒl'$)ß4dƗrsƒŒWS¦OµŌHÅ89ķ@łÕ­Ś*’WjŸOzį5I|ń#¤¬Ü‚Ż fE³]DĖ#«,MŒqÖ» 6f·$|¬{Ö§‘ĢS„Ė$qĄžt°ĮŗHwČ3ß#§µ/fh„sF{$ÜĻ«Z>c9÷­d3¢-qckŚĪEr:Ɖgŗŗ³€8Įi(öĻĻz—;7'ĢEf¬XžM€²ƒŌŠÖ0īTMe¶Ū†įڵ,āņوRĆø«qF—čjAcss:®‡¦Üėz“ÖÕwJÄś(ÆŌŁ×ž ½ćO‰ZF™āŸŒZ¬žšš"FŃÓ丘aIģ5”£mŹ?f¾ü&šĀM'JŠ< įĶ;Ćzu¬&*¦YźYń’NMzĒ—žåķcR89õ®yn:m3E—Q‰./ÉEž~uŲEioo¤H#øąŌˆlÓ@Ń?*ą~•Äqōū—2ĢJgŲūPN©ÆK93åB§Ö¼³Å^<Ó“ČNg1©ąIļA¤#Ōų÷ā‡ķ”ųRŌŻßjö.$E³#c¹…~JžŠß·Ÿāė;ķ Kh4‹•ŒŸ&ѱ#‘Żœóõ§c¦:#ņ'āwÄOko©ėZØ]<3ģņ؜öĮ&¾\Õ<_r±Ķ¬Ļå¶Iē”®ź3©VŪw%Ļ,Ū¤'?CPĀŇļ8®čmJ·,ł?(({žUa`;Į –ÅYĻĢXŽŁ™‚ķ;OVÅuV:’¹ņ~hG'<`c’­I»Yī’~üOųł­Ćįæ…ŽŌõÜłmå‘Y8$uż1žÅßšF|5:gŒž?j­ć˜.žFyĮ®YČč‰ūkąo†š7Ćż%|-į-.ßCšŖ¶VŽ4{×µzķ“QAÅJą©>ˆÕč‰<œ»3łU„”“vЦĢF°Ļ­0ŗĘ }kH@‰åNpw· źkęŒ<š¦Öęok°é÷&`w·”ēŠ›ks¶”,~?ü^żŗ¾'xĪ;½+Įŗ¤žуŗłŃŗT?Żśó×5šÓĶØźw }«ß]ź×īÅĢÓ1-“ü«XDŻŅŪ.ŽqłšŲh„"&#ƒĻEh݆ähF0).ĒŅ»ĶĆ·š–ĘŲŠķn1šÅ²ONŃü!ȀʦU>kÖ¬tF³…•…)Xõ ĪŽXāK¤]€c„u’YŚŪ6q£éĒCTdäoÜųĖQ‹MOeŽ8ć©OO¹ó“Ļ•O’{Ōr)’ 7ł@)<ŒqŠĻ]JņŻ–J®ph0lŠc¾ ]Ė1õ¬É-C±†ŽŁķ@ˆE»«®0ģ4’Üh±4Lˆėčx ^÷R½Ō’Ėäkģ’Žķ\FöaŽ€5Q6`¾wgƒšŁ¶‰¦F¤Wć#u8%‚ v’:礂A÷0©’ŠqV2n(w®OÖ©é7+§ź;„,°¶ ńYņ²Žß[¼ķ’K¢ßėžk…‡U+źæ§‰²ß0ōļ@ŚŻÅ4»””gw#4ūé‘BHØŪ3É„93[K:Fn<į×iķ]lkk²ł,Ąc •>mŽĻōŖĀY£į‹nĻ4[¹<ŲüČÜyƒŌó^)ćŪ½VÖ!$2‰ąēpźV™¼^‡Ķڵ¶«¬ĻjS¦Üćg­}{”ÜMakknÓ UT\R„cGW¹…Ÿ0’N1Ó½A¦} ä:gփ#“¾{«‹5 ą/P+ƒ‘÷nSߊCg£” ιĻJ’īIö7فŽ=:ŠĶ³¼Ō$Ÿt”üīłąāŗ™A*zśŠ1²IŃ„wņČäV=ķ”ķör<³Ę½LŠŠŌĶMKw«ź®²ŅEH‘¾k#k›-“Œ Ą1Z½¦›5³˜Õb”Ś·"RčsqĄ¶ąI•tQ޲fÖc‚ā3jĖ» 3Å4®f—c+Ä:¦…©yv7vāŽI?+cҼ¾ēĮ®·’øˆKd8zµQ5ŌöÄ#²—čpG„y§Ž>C|Óź³ģ¹^p >•œ–„?ŻéKęC,€äŽø¬Ä†o*I-Äö8¬&‹ó·Žü7u8ø–vĮ,xä×ē·Ē…WZ®Œśµšž e,©’žĘˆ"„óęÕ]ž[¢Ó[ĪŠ™éƒZQÜLŁČY‡NFq]4ūņ‹µ …M–šĒbxĶ-£4®įŌG8ō5m™£sL¾”xÆć™.`·PĆŚ»Ćöŗœ©©iīce?#ņ zƒX9w7±śšƒĘŗŃģ|#ā۟³źŹ¹ŽćnCtūߑÆ]]#u[ȞSó炵<č‰Į—¦°œ £늷£ŽgĆW£éŚĢ÷Vѐģ¤tē ŌØX”¾mõÅĀøbxTø]§’_“MžŅęĖĘ{Õf&”5K„– īՓĢ-ŽųķÅM©Yź:kDBĒppĄī4iĢ82x~×S·»‚äĆvˆž\ˆFJÕx2ż×AYµH_ē…ĘC&@żkŚŽē›ķA٤7NžR26zÕ{4éfÖüöł÷"98EŠ~U±|Čķtż3QŌRŚą|ŁĶ÷Z¼3ģž!š§Ä¦!;7½Ęųźä(4Mu=3Rń}½¬óŁŻ^Ķ N‡sHÅWš=;ÖOöUՔ‰`ˆÆm",Łį¹ž4%sŲžxCÄ:–«„ÖÆo4ƒ)ĮōéS|Y7ń£ų/ÅM+¼AĖØł@a(1pÖĒį­bĆĆśœOo֟ >LlOo|ż?ZīeųÖ23’¶Ē£üK­N³Ōµ“Ī”^h`gŽ wŸ5čõ¶\[Ś[ڬī–‹ĀŸjlŸ#Ą5{ż~ƾĶl—3āNA\@Įšā,ēhÆąĒłϕῠ‡ĄwžÕn“‡“[dsRy‘p³Ķz·|aoā>Ÿq¦ŪĶŗm£>qõ?­>P±óD{b76±+$##fxŖ66ÓĮ:ør’nį‚ōöŖCŠčwZµÆŪąÓļb×qŸ•”e„‡Œćń­ķÅ:’‡nķÖõn®¶:°Qļ0A[¤h¢¶?P< ńūĆ7zvŸ„ėś|ZX@™d"5c½Œu®ėQÖ< āøʽŠņt›ēPFā<õ„陨³ē‹RųoJū=Ž—nńĶ*”Ü9nHĪ:p+ć?ųjy-ouˆŠŌįܽqšÅ&ibæĆ óXMAŁm®bĘɬC¾ké’„>2ƒĀÖņh:– —N’”D#•RŁG°VĆäG×·?µ=ĆZ¾‹µģ`œJæ,ƒ œq_š¾#ÕÆµoĶŖGaöē}×,€ r…}sIÅi£Ń-|OÆųWE»1钯+&3ņąg®}ŖķŸ„.~*é:ķ¤W÷џ?ĢVūɌm?„LlŠGÉ­¢]ŁźęI,¤¶–Öš‘Ęr 7Lōģ:żšoĒxäQį­RĄL×1+8–<œt#¾i© ję/Å-CmBŚ’Nó¬Äļ“ žž5ē·:·v­§Į3½¼«µˆj™L‡Ū’gź?dÕōi¢µŸDŌ+·sD ƒ÷»澐ų’¢éßšƒXßépż¾ā6uhėøł‡cÜžŌ™'sĮµx“oųPųI¹6× –•[hCŽ„~U›į?‚–Iį"DBά®éĘ’>µ§8“&Ѽ#ā/ZĆfu‰®ķ¬tY%<Æ£sóuÆ/ų¹®LLń €Oµ™IžÓoZNC“G’ ¾±āSŃÆļÆ/4”ˆ[»’«ĪzWhžšŻÄ·]„ŸŁśŸšLqÄŲĖg©ī~žõq]ˆę°Ļü)ńe–’÷Ś7ˆa±šę2d€1RįxĘ{Ļ5sąoüIį «/Åļ{Jńʗ%÷QżüWDQ“esčo‰>,»Öķ,ŪB»O*ŁĖł±3+Ī3Ó9ā¼®|kÆjvŗĖ¢[#mĖHI š¬iÜõ GU¼oŗ A1É_ā {×  ŻŻYų›G¼Öō‹»{|™OžŠ[ˆÜ;WkcQ¶æ³ĢÖī?ĮŸ’]yn©s¢XŁ }Nhķflłläg$Žł„rQĶx“Įž%°šõ†»ØC{{”†%Į}£żœ;W’ ½ćoųvoéŚĀ,Ū¦ę@ĶžƒŸ”{ —#G#Ł’goŠV:~yš§Å6‹Š4ūµKyÓHč;㨯¾õ/ é>0šķ„¾„Ļ:Œܐ1ĘQŒ£Šų÷Yš¦“­ßi—©5¼˜1‰ķxĘNŖŸōƈųv|G Ė{«č* WrJ·,:Si£ēx¶“O—RøŠ)ĮTb„GU9ī+Ų<éż«hŚiDmćĶćæĻ”•ÅŹ~¼|;ųUšŸö‹ųi?¼e?Ūp3Bbp“üG=z×åå’ĮĻžĻŸõæ‡:„÷:§…„‘åÓ'‘OĖP»ŗ§½i©<½ <%5å“¶Įœ«&ĮžĄśW‰ųŻ5ļŽ_ßŚŽø‚o›s±®„dՏ`ųńMüW¢I¦Ķ}”{fŲ![ī‚»łWMń";}& üvŃæjχ:$ņ|(ńÜ_fńv©ˆōķ\p³Čƒīļä3–W$ņ3„įyFkuł?é?‘Ķ8ŸĶ7ˆ4Ó¦ß^[¦÷T»ŪÖ¹iY‰,X•`v®č½J‘%”pŹ Š“ļ8 _CLć”Fm%äłŲzqQHAFŒ.yļZÉč4SU*ąµGjµ–`¦jTŽ„‹5@/ŻĪY·Xo;O śRR±p} öņ4xw#gž„+õkžĆūgŲÆöČŅ4Ļ_Ļiš“ā ®ØH&Ł …é?ø›nvņICžĢOµ^‡m>Ēś(éé­éhŃ]Gzź‚HåʄdČ×/Ø[˜Ü^ylÅNJóźÄŅŚ}­hŠnÕt[¢ƒĆÜ ŅŗeQ±ĆcŲó’ėÆĪ?xNy?¶<#Ø”¹×“ do5›źß'n=p3łā*1Šü’‚œ~ĖZy“>6šÖo5½Å³][IŌ£’dw#ņÆē«OķäŒNŽŸ1V ƒƒŅµ§+hDā¬?ÄV6ryĀŽVW/ƒĒŸžµqRŪ#a+]ŌäyÕ#Øõ‚TڤīĻsĄØŻ>fĄ—G9śV¦JėF*ŪšŅį¹Čźjǚ£>XŽFF –ćEw©śV’%øcåēʃ¢ŁJ.v䌊é¾|TńoĄ_Œ?ž:ųJćģś·†õ[{é,‡ø¶ <Ä8źČ#҃¶™ž‰_³×ķcąĻŒ~ųYūOü3Ōķµ_ų’Ś-;ÄVĮ€k9HĘę\Œ2¶ąßLóšż&ŃŌ:Kfdjų–ŽEčźy}EqՁ·)Š;•8?…ržēü›ö=ÕægƉZߋ“6å|9 ėŲkkXū5Ö쬤vG‡ē_›Ė ¾”`$óš9]wGž˜Ęy”TŅĄymķ³Å3ø”1üF½“Įŗ—Él/%n '­eVwŠ†ē»ĮccāööÖŹf@ ¹$Ö«ŁŻh°Ģ–7+*÷X‰ś+ĒshčQ¹ößģéńŗĒZŅęš_ˆ¬ć“Ō!K9sĢ‹ÜcŪüūzæ‰ģ-™Ę©,IŸŸµŪB©Ķ^‘…ę‰cTV 5-¤č¤łŲšMzgžŠ¹…7üÄ©üŖeXZÖhā;’£ŅŗŃĻsž†ĘR’;‚łźkF¬€qĀž£æÖ ,\¼f7T÷5[[gR<ĢõšŃxoķ ¼@ļźsYZŽō ĒIiēE×|‚{ö„’Å·ł‚€-C„…sĶgj‰ Ė7„G¦éß8 Y†rsŽ“.ąQ+m‹Š€;Š–Dn“ŸŅ¤’Ł.ĆHĒdć„_±“ø…™›héĒņ­ø¢H¶,€īh¬—-ҌłŗõvāŁ°%…]Pž©•-ōŹ^6;F{µ{¬¬'÷nļQÉ©ŗó0n5Éī£K!B0W< d@ģ±IŸ, <ā®Å¹!ŽR“L<šzqZ±G»;—?ŌŠEĖ«äZŪ™īrЦO=«źO‚æ²WÅĻŽ·ŗLZf™/‚ü1pCkŽF@uą«JNĘČż­ų'ūü3ų,lK±njau’MaŌ5ūŒÓ>•÷n™peõ ²ūp+šsølīu #Ų<›|ąWkc£YXĘŖ±‡“,{Ö Nņ„ˆ!‹ķ\ķö¾ØvČŽRśf€9é5²ūŅÜ|¬zšó½Z·³Wi„å{“Ą÷4ÜńüSŃt­:ņā÷X†ŹŻP‘#Ÿ—>ƒŌ×äĒßŪŗĻ@ŽėMŅ5kH-ƒ8y§PZohĮéųUF7:ĒOŠß“ƈ> O{m#]höņ(eø2āIzq÷kä­_Ē1éq\E ‹u3Ēē˶{äõ®ŗT{„åm*Öü_Øź %¬“ī·ĻÉ-qYŌ«Ł®čĒ”ęÖ©ŃM±Ł\·=*ŌP’ż1ÖµHį”8­°K*ķC[Özl²)$åČ”»źtž𦣯j°xsĆśeē‰u—Ā‹KPL™=9ū·ū’Į|gćķGLń?Ēėé¼5į•T&Ą!F!¹ž¤ćĘ°©3¢0īNŸ?f_„_³’†­“œ®8ĄĪ¹Ōķ-øšu_Ozņ’xēHŠ 7¶Æe¤Z….¦Y—ǧéłŌ“éõgę/Ēų($¶÷ųKqŚģe¢øŗf,‹ĻfńŲWåļŠ|i⒈šŌśæŒu{½VåłŲÄģR}»ŸzqW:,c 5ڱ t «–ń$E_—õ¶ČBy„I¤{WU£čwš”D ß1ī:VRwŲt/†ļ ©$¤Č8#¾ {žįx­‚)‡ Ԝu©%ŹĒg…”Ž%Ü#ojßÓō īĖ©uĀóŸj,dŁŌŲiĖ[eØā“^ŅŽ$F·˜n>‡§Ö‚%+>Köņ™ŗšzքšÜ6ļä6äµ3&bŲyö³w" gźZ£j"ŻyŚzžXF²l؟?ĖQ\Eöˆ$En}»R¼w[Čg•NϘ1=k.ņvŌ"ó‰ÅTÓć–Ęåö©üs]:ά›r¬Gē@%Ü212Čō®wķĢ%RŒwŅ€/Oz³ĀbŽ?ZĖH\!K󯿀25-œaG9«:%Š,xfˆČŸ/ßė@Ž fфö×!#ēÆć\kw%­ģĀuåć„tšEœW6ÜvCҽ3N»X–9‰d' Ųé@ÄDŠńņņ¬oG"Ąõ —#BŻģć…ä‘¢‘@8ćk"+Č5w·Ś&N ćƒ92ŽŸØ½¬¢D'Ć+æJ×ø…o69 ³Ž‚H¾Å `”•]G­eNķ4Næ!õ€3Z×ĢŹ«Čö¬½CLøŲBIū²:śP£xs[Óļs.£$ź]›'”œōé^”kŻķŪ®+ųPŗlš\GĶ›c(<õ«:ƒiÅÅÅŖ&ņ: c9»ä7d“IĻŹHؕÕwsņŅw2//VŁ$ ó§ņ®n]~Ķo!d> ņµ²Fsx’ĪĀP²\†R{žµķZLzv©¢ŪInŹĪC qˆģkG„%¶°gīAā›?er³€ėӚŲĘHć$ŗ”G ” œsÖ¼²ļĶÖˆŠńöDĒÉąŠ(³«¾±µ¾‚ŚH„IHĆĘąÖ²ŁE%”hgdŚG~j”˜s2ō:€ †Ē֝341Ęõ=ˆ¤Ć™œV”ż–²IēYB²ŽAĘ2kƒžŽĶn]šŻ6ēӊEĮ³ÉŻ ®#œj73ĒqaMü?8Ą­e”Öŗ-ꞠōØ®Čc(OՑrtfAĖA]‘¦»BŹżē^œŅ36˜O ¼*ĪĶršƒo‰ą’Xa©¶T]üaįI,ä7q±Xevżzóm²ŲLd‚~rēɤj™,ö÷7%„ņ™†@ÅV†+ż5š" †dę³’w6ƒčr©Ŗß=üĘņÖX¬eNIćVĶž« ČUў3éėK³:ņSö’ń¦bbz†°.!»ŗ¼M­ņ)ąw¤V€Ł×’g:YF勳Ź”‚ĖtToĪ=ˆŖ¹”™ŃXĒ=ćĒ›Ķk/9u=kŗ·Ń|KƘ—>9ś°œ‡aߝgQY"Ōm-™½ŽO׊ϓšœ’Č xĄžAvEó©\h–āB™Ę=EX¹ń_(…ąŠxIÉ8 Ī]ŽćƖ‘«Ē4p„lØÆW– V]®GnōOb¶y0įČädbŗ{;;'µÅÄy—#'æįLJņZézt$Čσ•cҼśßĒ6#X]/vąĪT „5{U0ķi2ƒŒž•Ćx‚+)ō™į‘Ō7ߥļSœPā‹õ1#±»ˆķŁö‘ŒuniĻ.có£Žw)źj%£Š“ØE•€ą!ꄍY•T¾įÉē«Œ®L„cdZ4x1ĢÆ€ ““Ū‹Č].V8Ęī“ĮŖ1.Žź°km4wńÅ Ó1!{V-„„÷ØĢ©±:(°Eüšd–…b'ǹ®"yę¶yH_-śRå@>ŚK»‰—c…“ž6śé¢bSĄ$qLŅ1ī_Ѽqqn<·š= r‡”Ŗ:†“—.÷)³a€CĄ­¬_"!‹]Uµ©#%s֞šĶŒ˜c!Gß“qĮ„)\—O±RóP™ÉWL )ĻJĶ–÷÷G„¤ņj Œz¬ž){;™#óƒŗōÉż*-7\—U¾{i '׫})©ōF¼‡ou Üéźg·.s†™ŠådøÖb• –¤·ļ-žPöĪ­;čĪi¢DŃ„›c 3œuĄ®óMŠc½†Ž\2šFzżM+Ž‹Įö¶ÓĆö`m¶±aƒĘ{ę»(Æ#Ó T|Č:tĪ+EäDŃSRµÓµ+¤3“hńœl<ēWĶ֚Uö‰®»„Ō—Ńy…¶ÉŒéÅQ™Śė“[\¢Ü (`ą±œķ5å:•łmč u泚7FL–6—1°»·ó_Ŗ69V’9­ķ6Ś(ŠC†ćļt¬‚Ē®ŁE£V²N€oUĮük’×4ū›9$…$lb8 )SCÓ­^9&æk»fb2čNpLÖÖ„bč”b˜˜O·\V©"&ģ8’šN 7‘JАä/G8Ē?„p÷ל}ķķŒĶ¾Õ¢ņÕ ĘĒ“ļ^“ZG™ŌÆī­n-¤—a9e+ĘG„zo€$“ā•öč®l."vFŽQ…eõǽ[fēØuæ x^łu(Q4ųœŖ“K» ŪŒŽyŻå¶©ØCIQ1µĻ'ō¹µ4‹ŌŅ×<=kā}*{² ¾… +ćåļĖ~Ÿ•mü?ńnØĖe„ėĶęŪ›¶ć~ßCé‘MJę±Ļ¤4?¾š§Ž4ė3·¢Taµ€ep8žq\7ķŖĖćļZx¾Ś4™äĀ…R¶tł±Üt¦Kšg<ž°—Ć0Ł\ŚyZÜs¬ńĖžĘ3¶³|'|śgŒtųµ›kˆōrŹ­"/RN0jm©)j{—ŽuŪÉØ]ŪŚNłM²C‚Ēƌ|EćCIŪ¬čšh@X*ar}iØŲ“°¾ünÖ)ńt’¼ØYÅØY"[)}쟼•€ĒŽĘN1_jšÜµµÄ7Kq8Čg‘1Z•¾ŲߣJllÖk…•„j‘¹mƒŚ½Žņ×ā?ƒo^}.ęhƒ*°Ę:rE3[>¹ńC^Ō¼$_Y²µžķīa˜ŪĻOJäüįøüy–ļ ČŁ?!ū¬;f‘— ūĻ…/įmm¦‚Ōķe«łƒq½S_ ėŗ§ˆcÖomRK8£Ń2p8럄É_¼v|M§j^²žHŠGęÄd'iČ'hŗŠżCż|SįŻś _ß’cĢö„ü©ÓœŒAķ֓)£Ā?hż6ĻĮ’5Y|'qmØčŗƒ½Āł%³žv`tƈ|c§k:Œ†ōŗĻvƔÜxōojQdI®§Ó޼¶’„=ŚķĒ.ü³‘#ĖßtöÆ ›ÄZÓŽé²µ£DÄ'8ÉĻ’XUœrvg§ųvŪK›Bø¹žā0bē.ąĒŠW‡kzF£.­+éÖb[ äČ£ī÷‚œČµ˜uĪ×Qµ„ßÄβJˆ€źXՕń.š2© dƒŽƒxīaŽ*†’ęĪ4g'-ĒZĒXóg{UŽ Ū€8µøčz߃ą6—V×VęāؐpĆ©Æ~³šūė²RĘÉ„BHVņšF8ŖŒ¬(¦xļÄŌób»ÓSR–ĖPA°Ø8ĮģxśVĀO_|/¾Z¼×züSL¦Q#œg¦@ĶUÓ5>Žń׃üy¢ĒāO_Ü}£h[›7\vž3žzWƒj^6µŌt»ō¤“hCnp¼ČcsēQĖŲG)ąXų{Xņe³ó,ömC÷׃Ļā+č_ųĆįUĪ©q.³%–­„ŻŽŚašŻ•ā_ ü+Żõü9ØAŗ”Hķ¼½Æf!{ā¹%Ģčϊ¼Q©i]I#·µµĻ—…ąƒœQū;|}ÓuŻkÄŽÕ“a=ɑÜŗ$„}¹®Ś ėQ{>§¢üGķ:õö“ecq§—Ņ6Ÿ ’=ėāoŻĶ£s§ß:˽ųęŖų«āwƒą±]&śMÓe³™pŠįq»>ōĖŌüŖ»ńŌā'ø²0r j¤īē =Ž+ļ]?Ę^ š÷ĀĶ'ČńļŒ+Ūܮ׉¾yĶ]Łį·ŚJ_YÜų‡Ćs+Ž]ÕÕaėžżź‡ĆÆż“ÅrĶÅv²ŃŹÄoē°ļҲ“čRöžńV÷Į^&±ń>—ØMkåH€Ę²afčĆӓ_|ų“YҾ.hś>­$ŚeÕĢH%UDĻ–ĒØÉėł÷§ t&Q;“ńīgÆi±’[•Ļ(ĆŌvĶzDłŃpĖļS4LU“o4=rĀäLr•ä|‚ŗšōļx¢ŪHÕm ŽŃ••qł×-Ek¤n}£ā†źŽĻR·ežŚDpčkņkž -ū:ĀįųIā6žĒ×,¤’Ļ÷„-„ś £Æ`K?é\ļČĀhž>$ųÄ^Ōµ}ÅŠOgā}.w²ŌSo%•ˆSp3^WŻČ 0GŌWe9Uä?™$Ģ«&sĄćJA:#³ģŽŻhr2/ŻCcėU¤n[ń@ąõ{›$ƒĻJ»å ƒA±l`¶~½Ŗx]Ėž{f­Ėž^6ŖeØõ;Yļ4ł#µžęŽęc¹‰ćūŃŗ†SŲäuö¦uÓÜžžą†·wü5Ļģ±£ų{ĚŌ’< G×ķīiīa ū«Œ’dÉē*žÄžąÜZA‡÷Źöó ‚zW5do”Öl ¹µŗÓe”ę6•5ł§ń’E×ü ćā<6ÓÜ訒cԘr#V<3ūu϶k•ęĻ‹? t’ųoWšÕž£¦jpżÆIøŪ¹Vb>ē¶ySōü|žÖĮĒk–Ÿw+†LåL§Ÿ`§ÖŖ„“V>W»ba&.ć&±Õ²ÅT0ä`õŁOc‚Ŗ#S!ó730č3Ś£Ž?³øņß÷„ä‚3šé1Ķ}ķ»4ĒdY;ČėŲPŸ50‚A¹{Üā§“˜ĀŹX¶0Fj ŒarķnS·žHŖ1́ćø]‰'īł=A⃲œč?ž5ūOŁč~2ńģEń"ņ×MšWˆ {NÓ–ōš5ä`Ü®;×ö=ū<ų³Q›F×~xšąÉć/ Ļö}ÄŽYžc”r÷õ¬*£Øś"Xļ®nmÆ-2Ö®6ʇ·Ņ·,-Mš:%7esŚøfµųŪ’zż™n¾$ü(ńü;£Å®[\ŲcųŠÉp$d’–7*Ē€Č~Sӂµüźś.”į=wRšN£”iwc<–»gŒ‚”zsÜc”®~¶\ŅŅ8„Ńd¶I C¢\Ļg2`å¹'·Ņ³“ŠÓoŁwEŃõøĘ¤ĘŹīźŁDĘå¤QÉÆæ“æ xwX±“ČŅōųóęīˆĄœńžŸ…yµŽˆ³GĆß~ŁŻ¦§ƒe”›ć•ž šśvĻį„otµ¹KE·ŠQµŃ3t÷­( o¹ńļÄ_7ƒ|Ow”Ü**2…ĄĘå<ćź2+ĶŽŲ¤…3ƒÓšö)ž}Xˆ²“»%AüźiYUŅ[ŽĀ»£±Čį©ž%~C.@«šMœ–$(4Ę X/»"!Ÿä*ݜęB" ߏ‚ģz‘w Ķe+ŲŽ­æģ÷œßŸ¼F(É|:ńĻŝNšĒĆ? \ųÆSŗ•c.ŖD6ć»3ćzP8¦~ŻžĻšMo|9‰|Kń’ųJ¼e4{Ā& «ß·„~¢ųKL:6‡gįß²YĮ Ś€°Gj»tč+ ’:±Ņż•n±ŸyėėTNŸ&›uŪ#i[=«˜śŽxÜo@õZ„u­*FLm Ē=čŗń†’2<×é»É^\½ĮiēŸ2/!I ØĘē™ųƒā>Ÿ¦ŪŻ[Ė=¼ŠO/Ž•šĒoŚŪĀž ŽuW³Õ.U :>R®A&Ŗ1¹ŃŸĻßĒßų(Ž­©ėž‘ąI5Kµ›cȈwĘ:×ĖŚÅ«_h‘x“]šŽÓĊv¼ 3Ÿt®źT e+ā?K©`‘U‡…y”²ŹŅ“ŅH cÆ„wF8jĢ–Y ¶wīēź*F†<åI4ģyŅe‘jņŗ0?(qÖµ­-¦f*ŖsŒr:ÓlĘ*ģč-ķą‰ ™K€"A–lōąWéģ™’ßųķūIjVœŚļƒ|3ęĻ,g2FG|ōĻjēœū”āN²ģšOöfŅ K𮕮ų§xi// sė“ß5śigfn%N±ī ap œWJ½ŃŹųĢØ„Y2J²øm¼}+˜Č“åZu2c¶*"0O4crnb‰KHįqļ\¹ā»{Pę[˜mķsĖ»`/ŌŠvR‡Sįo޶ŸĆ߇k²ŃÆÅZ²£Š2#~ŲłõÆĒ/ŠŸ~#|e¾7~#Õ®­tv9['Ą'éŠi\ģ‚<óL·ŽÄjŖˆI8µma4¼Ęæ7^x­“C”ŗŹ@‚RČyåsȧ,!āY1åÆrk)Jęf~Ÿ©ŚXźŃŁ\ˆēIŸbÉĶ}Ką9šl"nsŠŽn€} kį©¢²ds“‘]^…a"”kͩޣ½4bćcbH‘3$2÷µĆE1t=1A Ų¾ŅĢ‘HpŪHō®?]CØ\XM Čý-v•®¼®`f ćŒō'޽NÖ¼øŽŽį†Ā>÷ZhDP<3É$nc‘IČČ®cTŃ4óØ •Ž3"ō=Å92Źóæ” …9éI  ē5$óėęĀé!,§ƒTm4ø-¼‰‹Ę[;Iū“΋֐$— ~G%ݼVdéŖŚV›Œ×iqż•¤łW£{␋—:Tś“nnŌ”aŽøÅqÓx öŽī7YŠŪc8#'óŖŠÖhšoŲŹÆ”ß{b»F·ū> ŖČ§qҤor½„ÉņŪ7µcFāęᢜ”ŽōŠś‘–Ė-“ķĪ+ §†Qp¬Å[ƒŠ”M˜åWİĢ\–SÅmAs!RŸó Ķ”†wRĪƒ·~9RX̓7bhZē}°ŽFŲQøSę=Ę)“L3“ü4 ‰:…#nx5z[HՊqهjŽSWy#·’V¶‚Z¾{ÕŽēU» j¦Eäy ÜōÆčŗ­„,³$ˆ¬A GA^ ¾|* ÜŠDĖ[ Š/“\É’ėÖM̰ϳZāx}ƒ#‘2’F@lté]O™ņ~¼ś’itĢ]YŸD–ĘāŚ{=BłäĻü³čGÆ­u ā‘ :¶ˆ b ÖPš¤t#ó§hŃū_šāwü.…p=ä±?‰ģb’"ć~ėļŪōÆ[šÆŠžÖči×s†Tm£œ‘[E˜Ī=zˆAqs„Ā͜tō®—A¾š{hSĶ'•ö«‹9&“;­AõD±‘^Łs“'©®_K’āźé„–Ģs’0+s–gJī–²Ī×ķķXڦ« ņÄJī3†"Ŗ,Ģē/5D¶’_œ śŌ -ÜS-ĮD“Ne;ĮėŸo֜™|­ju©m¤ß¤3iņˆ!½js¶Į©gĪōØ™a4ć lØ?JŪ¶Õ>Ė(į(ĘqMŽ»–Œ¼E·ś×u“‰µšłē=ż«U+]čŚe弐ݑ½°U{ēŪį¦-ŒĘ[xͼ™ †ęŽCX_ˆ¼3żhMƒ¬Ž$ łśīēXŽšyCåC`ņ>•‘Ńyl”ø„³ĒåJĄuė ŻHčČwÄN8iz^šķ."…ŽHwīĮŒ©Ī=jmGąč7Z…•ȉÜUŽ?#„ŸMŸN™m/D؊;Œ ÜĆ ye Ę1փ&Œå¹kKƒwb*ŁĒjö=/ĘV’éš¾ą.pC/³öeF7<÷\×.–é§“1²£Uģ¼qn²‰ģ”—·ėV£cD¬r÷Ś“śÓ“ŃĮ‰p¾µ%Ģ(Q&-  ņ; f2ÜśĀ‚ņĪ9%™ÉĄ"»;ȼ—²3ķ㭐خXēqĪ8­8§vfÜxą;SNÌŗ¼ęĀ8.„`ūŠąĒĆżŪZżŗŗ\·kĀ·ƒÓSd;ű˜“§k{…ó’Wvį_&ųŸĒŽŠéö”¼–.•ć=ųķTā>S’ƒĘžy*M¤ņÆÉā dˆGję ‚>V;}ń\óCä!]_Q¾ø¶]YÅģ+Ć60I®āŚŪj,®Å=½ė.DMŠ:Õü¦Ū?“" mϽrĒQø•šMŽ9äuŖJĀ5m.#¾P’0·ńWÓ@ŗ•U£ø„°Ļ'Šc:(“Ņ–ųŲškgĆÖ«q!Y›y=Ŗ%Ę¢uŗŽ½i„łpÜĒŽ¢³5›Ķ3TÓVDkx™{S˄ѤSĄ=īī`°xĆ*½I`’0nĖĀü£ėY¹w.š<ŗęÖyõO6Cū°ł#b½>-"²M…œ&āÅø4£.ʇ i҉ķ×ĢeÜČ­nX[éM3»Ų­Ź@\ō5ŃŲå›"ø6qÜʍ”ŠÜ t©JL²3Ū±€/§q] Ų|·‚5l”dÉŖjqKūƒ$eæŚ8 ŹNęeĢ¢8™2v‘Ųō®P–;9ą22„rqž¤Š uäOoŗŲdtÆ%Õl¦‚`ŪĪÖ$šy”–‡DFZIy4ERį.>c…+ŹćŽ·¬ŚRĘKˆżĄäVÉi”Łč×K ʉVn;V‰ó"-Ē›²Ev:b‚}™Ļhž ’Ų½¼ÖæiˆŒ•¹=ä7źęxT`2³gIƒ¦>z0ūF§>…R¼±zœžkšńē‚7݉­-d¶–ß.Źü—c½Ez©Ÿ=|é«ŲłdEqyū²}«¼š¾ˆŃĶõ¬­Ž |§®;gdYļ—ך%ׁ5ķ7WøŁwņH##;š#ńĶxĀÆÅy”ųšņīŽhlLÆöuaóXŸÄA¤]އĄśē‡"Ō­•åÜ!ŚHÜ) ‚N0ßJ¤Ś4O•hx§Šµ -O_²-¢Üé÷šM°0ΐrßLžµģ~ Ö®.`–ŅīDĀ…@ĒNsŸŹµ^fŠZjz2ßj×Séß蚥›ĀHĖóQĄĪ{ōÆYžĻšż½¬ {"£¾ĄĮ™2Üó/xw^Õ4mpč’ ˆ-¢Q»vćæZĒųEąŪnŗ‰4”·™‰a$·˜1Ōf‚9 „šÖ—2 >ŠÄź?uĄ_BśWŠ\Ę£XD3Åo¶SøuŻķA]ΟW’ ā!–EłA=Mxˆā½Ņ=El$¼‰eÜHč¼õ=N{;Ųī|Gā 'Qš—āM*FūJ1†ęÜ)->ń’8Ɨļ=A§“‘ ”cœćµ{›¬é1ZÉbā$™“nē9?ēփEٚ>“½’ćP³²»ø{[‡# ĪÕ=Gó­ü±šęŸu§ö٤>`‰Ū1Óoj.]ŅÖt+żGK¾’9„ˆāćɓŒ —™R×Qu³Ž -ŌÉ*NĪO<ä÷ŖMąkū•oÅqq˜¤%ęn½ūŠNV-Hõż O}„Cf-äKčtx9%sĒ’ÖæHžųjń<5 Śäik0ä,˜VČä~U%~Ō^³±ńī«{į†Ż+D²£VēŌtÆ‚)ķ,i­Ģ끜/*}jŃwV: Ę0^iŅC¦źŚŹƒņļĒq^Żš—JÓ5ėēŽ{˜R_œm“`ē$żkDAĄ·ĆėŻ+Å7VqŽĮö%”²E‚œīōē„q?¼#wˆt‹ōšÓZŠ"ŗIąr}ˆ«H¹~ų»ĮŚ<ŗ}ʋ‰`ź¶ŲŚ ‘‚¤÷®Žūā]¬Z•Ö›„čwJ¤łŹ¤CÜz֍÷]’i|CųĒ¢[ų‡ĆóKT¶ A‡Žø;@ļ_x"Ē[š>¹į½ZCū/[³¹ßlŒ`ą‡ĻzƞĪČŅéh~›Kāoā{śÆįŽ•ą½TXźI-ö‘24aćÖ2G^{V±ģsnŹž0“šõ”Õ×A½F„ęS#ķ$œ“_%Ćye}«Ķ3XŚy Ź}įČÉÅR:!Ōć|Gš×Y²×ÅŻ­±OŻaĮ9QĻ^•źŗ'¾Ń„øŹaŽįĻņ źŒO„<ą_ųLl.lžÕiDsŗ\ģ-žÖ¹ˆ¼BŃi÷śCĮ*Y\)‘Ōķ(sÕh%X_üzń‡®¾“ćÉn./­TĮkq d‘øuµ÷/Ą_…¾ų»”xcāUž•e„5­Ē’›’½É$óķYŹ=KO±śU7ģįKķLŌō¹ģ/sQdLy¤ŽĄž\יź^ń_ĀŪ‰ž_Ż&›o5łŲØIōĀōOŒž ń^æy§łęL¹Q}³Y'Š_įÕžŸ %„,ń€AU®~µŗ1’ŌųcE“›ÅZn±įöĖŲĖ2S”QŠź=«ģļ_ōm7C²ŌµĶZŹėVff.īWo@Gš“@ŸcѾ$ų—Ćw coŖ½­ÉA"øÜŖInļÖæ&?h_‡·ĆßÜź·3Å{į=IÕģ¤'±ģzŠMžõ=2 h”GĮĻ5Ėż‘"@ø%3Œū֐—A¤{ēĄ‰Vžń…¾©ŽÜI„j0˜„DšŅĒ#æOŹæOmīP[[\Ę7¤ˆxćUIhKvŌč’āS ‘0ū‘”‚;ƒ_˜¾Åąæjz͊Ē.‡rŽzŗ¾K½»'Ö²ĢšÖ&B 2+ä2ŸLWŽ>ÕWā×Ās„ޘWÄkä˜ŃCe6õĻįOdtĘgģĻüGöŗ¼šg‹$ų*h<”ėvˤ\łÖJN&„6FŠłtÆĶų(Ēģ÷ańWĮ-ćūÕn®ae™L_źļyuĒ©9¬£2ęžĪ{ KTŅnmĶ…å”ßg–6ö“qMĢŹ`s]Ō¤rÕ#ke( ;uĪ)žK’ņ/®Ć Ü0ȐHžļ»R¶|±µ=¾“ #£]År0?J°Œ<Åw˜žżč-ŻNŃØE$qœö¢Ö4r²Hр§<󺃶’čtžńϊžų³Āæ¾\ŻYųć@Ō Ōģäå&7 Aõącž‡æ±æķ) žŌžžÖšŹŪċe—ā{8ČĄ8 é ź6·ByĮ_Z™­ÓõIדԽ[»£D–䟼1œĪŗ ļ^ß"üŖ~lzWŸU ĘVæ xĘ~×|9¬G֍ŖŪ=Ģgr²‘‘žŒ3‘īšVOŲŪWųAāk’„„oy _›m^x·f[7$Įqƒ‚A]¹8ļ\³Üǘ'MZĄœ]AِpErWĶö ćXĖŻ„f\ģ_ ¾(k¾ŸKŌ¬‚łI&ɂ>>SÅ~Źü)ų³ ų¢ŹŻå½¶³Õ){pĮzā¹å‡Bõ]†¹G“3|Ć;5ļ>ńVŸp“iˆaøČh9Żķž}*!OR'‡Ļ’“„„÷~³"¦ūV9sĮ‚1ś×ÉS4īČ©“āčRŃQ/obįĘģžµJKĄģSÆJō śs\4jWėLY !Šš²yŁ­,^Zæ¹"–ŹźUe†eīozšŚ•ŚI:;Fćī…=éšeĶüö³‹ÉvK—¾(54ōĶCÉ‰ÅŚ-Éö›¬ź±\4c_.Eį¶ńšŽÕu9"gvg‡ū¹éVēp¶{c ·?^(&Ó..dóXöĒ ōFŌmd‚(ÉXäP"³Įa©N‘^F% 1øŽk XŅmmeo/nĮŠzSм1Jß1,źÜqÖ“¬¦eˆ;ūRח°¶$Žk”¼B\3Ļå@ ¼mŌ''ҽcJŠo,±IŽžō›¬é°3µĮmþMqÓŚ“D˜Ąe-ÓŅ€&U .\ZŠoqøą*·6š m,o“‚qX°_“G7|b€;«xķX*•ķĶeßi©"r ”‘”6źŽX ݱĶW’XŃĘę;ūꆡšÜA,\Yėæī5?‡ŽFÜlŚ=·‚`=@5ūoš{ąæ„>h¶šĆ­ĖDŃ"ĮG1©œś–|gž:‰JĒDv=†āx1ÅIsÕøĪćė]F‹ Ż],w7åÅ×g­rJWŻĮo  )*/®1\¾±ŖCē„…G^2EH„޶"Ž’Č<ķ„qڦøv~śO& ņsŒŠTcs–Ō|E¦iö¦eø‹œüÅø5ņOşŚ[ĮŽÓīeÖuČąu$£3‘^ÕQō6? ?ių(„¦‘u{a¤ŽMØĻq!Xm­Īē źĶŚæ>(|oń÷ÅoßVŌo4­9ä- 0ČCż’JōØPÓRe+¾q*Ž’‰÷54sȅƒÉ¹‡Ų“Ųęaé™&`‡ęčx©Ä² sŠyT-ĒŅ8onõ§˜Æ»Ė3uäš(lŹĘÅ®–ń³“ްĮ€2ǽ}+šKöeų·ńöšh’ ü)ŖźŅŗĆ.„%»,vƒ8,?½jĀS.?¦_ŲÓž š“įUŻ·Š~,ÜÆŽüQäÅęC*†e<ŠWķ®ƒį-3Ć:L:Nƒeg¢čé’.öčqŪ„pUØuF6: MĘož%ņœrp+ ¶·ū>vüJęBųP}i¤ą¤c'aĖóuž™ Ī1¹ ³¤C.ĮG½qŗÆ‹ķ,Ļ—s·$ž“téŸ4|Qż¢|š’O½ŌuŸŚÉ4@“Iöė_‘’n?üRI“/ ĘŽš²HFõOžągÆ­Tcs­+h|rŽ×2¼²fi™‹3æ%‰ėW×Nv Ų!¾µŖ†hA(Ł Ż+bŻ&”¤6ŖīäćYŹWNūHšUōЬ²”Žy+²’„"K‹7µŽu#p¬fś]…~\Ųx²STø7vĢäʎ˜ņ³é_kų{ĆVr[ĆcŽ‹™É®‡©Ś ;xü–ŒcŽ•™$O$ģ°‚éż(‹±„ŁŅXé(lŒ%ē=čm5㠘Ôō+Nda25`ßšü‡½s­”īeDA0ōÕ˜š„³]Ƴ–Øć5Ų¬mĮ‰÷Ä{cš®†mÓ]Ū¹o1‘3ŽŖÉ©ø`XœōŹ6.­ÄWŃ`3œVÅ­—žč‘ČA"ėšS鼌“+FÜć5Ė4ŽSĢ9=»ŠŻ–”mDĢ;㊊öįÉR]Ičhv3b¾¶.ŹĄĆŽÄqX𬑩 ­×žj £±ņGÅ ŗŗĀj:Nž·–;ˆ}²|Ų=ńŠŽųaą›ķ1绹m«!ŽTØMœŗ\ö֎H™PWŌVF»«ßivž}Œbi@Ē>ōtń-ϊ4˜f{4“™IY#ƒ×5܆٬ۛŠā›W1žńU[ßVņō© ć€åõ[™Uܾ¼ęBā×VŽQ}uӀ¹łXP¦¾¤ś„1ŪÜIļÓ5vŸc<£½T†ķĄYē[¶ZĻ’ģŽŠަƒ —%¾ŽĀ`»“„[³ķ0ĘBL<œp(Ä]ųģēK;¹3óäWGi<7ˆm:șüE_ ģnZ¾Ąžpr:×B.‹[4E~\õÅKVŹźś{Ż©ˆ‚"a‚Gó¬AÓōYäK‹døŽŁĘvż(LŻ=N†kk˜‘YŹ £=‡„sZ„¢ĀĒó- “2/. @UŌ„?‘®bŌ5—˜m‰En  %{ˆ@˜ĻQY Š+ vRǵĶĖiJ…!7&{ÕÕÅ$pĆęĄ8Ķ3®u(ĮifQ“Œ•‰…ŗcugs¹ ƒÅ‡ķ1“ØČźx8ē5µ›’ē‚3Ņ€-/śó• ĒPZ|S%ÜĄ®słTĖ`}i¹W?±ķY¶÷Imu ;:qXšA›‹nd‘J¦Õ«‹)@éZAZžŃ– %·[…™r½®\†)wݤ~[ØäŽõ )ā}KN¼Cr÷Q¾ž•ĄŚŁOxį!mŽOh)¾‡§xnūģ˜īćx$ŒOū×®Åż—¬Į%Üiv£pł¹4-“&[h ‘&>ktqV,ž8YāV8”ķA’e©¤;7lWxėD¶ŽTŌ4ųĢ-“łŠ9śŠitæā¦Ņ¬¢k„R iĘG©¬^öfē‚XźsŪ&PšŹ#Ś@9<šApZę«£ŪjQMsn#Õ]¢eūÄ~5tāö2©éŚjĘ.ōŪèڶ7pÉģ}ėĒÖŚßsŹ9=+¶Ę<š-†ž]—;Ä@$¢½ŪĮq\ŁĻnkv…Jŗ4ā})į’Ÿ^%Ó“§I Wnčr=+ģ­?RµÖ“UŌ-o•£ ‡?{=«ĢÖPŠąXm™ąb®±ėĶGq§]ŲAŁn6¢šsŸ„vCsŽjĒ=7M|~ԳĐIąÓµ}"YÜF%ƒó:Vö0*[ŚŻX;y“GZųĖšæÄžxŽh.n¼0ĢŅ4Ńr!ćų€ēón³ÆEsl’é×1;ćŠį«Hé§3:Ń?µb jFĆ÷½mŲAö š«™ Ą$Ņ±;bī{_Į/‹:·ĀŁO%ÜĻįķFAѩǒÄcņ8ÆŲ;ōé ÓüQ§_%ŌSʧ®J1Į÷­Ā[Vü:“K×!‚ÖöšéģP ”®AnŁö÷®öŅäéz‚YģYåFHø!ÅipŌ‰č°Ė-äd¼2'©­;h-ķé¢]½yŅ•ĪY.‡ā-wCÓŠÜÉp…ž\ńĮś–« ›jv±]*!yēĒ «öaw65ż5õ ¾[DĆ+ƒŅŸc[Ū&bqŲ÷©”lkŹķcCm­¤Btv s»=ZŅ¢¼½’Y–H‡ ČśT™J'G¼YY®ćŽG«,D īQŽ“ f‰–3ϵt7šV™"DĘ8¤ztük hå5 6ŽfŁA=8éYĀ]FĆl/hĻ qŠ Ņ8’<7e£Š&Įgƚ5=/ʾ•ÖV[8ģkœŚĻ½U„nąUĘ?3^Ėį­7ż4{eG(“ž‡”iZnŪ„YöB p?wė]&”o'—ä,”ü»Ŗć™ó_‰ü9§\iommīī„@B{ē½|«­ų~ėM3/˜žB’P“ŚÆ••ĪI$ŗ}įÜ:Yóź÷±œ?ašĪJĄ¤Ė6ś“ŅķY䥶S[ŪtūČ~ā‰3ž¼š’”ū”牣Ś!kJĄŌ Ą€Ó”÷÷ †{wƝrā;w¶¼ž)TgW°Gu ļßŲŠg(v5­ [i`‡¦zUݱ[˶U,œc (–b¹*’ õ­‹¹ ŗµ/åĒr½æ Ž;£Ä|S¦¶”»,ɰü„N8ÆńƇnŸG»‰­…āŸ”ƽ6Ź>b6—V·+)Ü:īØõ®óK‚igø€ĀŲۚĄŅ,ŲvKmŁ¢śt÷¤“U™āV°¹`ąv=~“‹±-Ö«s-Ä7sæŁŪ`}ÓõŖræ”łŒŠ=óš.L­c¦Ń”ĢOå0CׯS]M­äŠČ!’Iœ†ķō„sbūU¼XwF䍠ŸOjĀŃ'Õģå3C7³†ē4ˌ¬tZ­åĪ¢"ó3cåµE‡uKˆAć$ż(53žĶģī6J„Ÿ>iČ©%ŅĆ(?Oœc”÷3”ŗ"Ķę‚«˜€Œö«Ču.w1&ēXMrK Øį,’@y$+Bū1Į$źĘdź0~ķAj7<āĆ$†ĀXÄw v†Ē_Ęŗ=+|Ó[É+ŗĀ[ G„nÄąvŅG LĘCćߨŖ1-¬²Č»ŌćéA-Ė)Ž3ćn2FqUā¾Žźé­Vh̊£ŒąŪśŠ#_ģwVˆ³“©'åÅqZĆźˆbES×#‘Ap}Ī6ęŁķĖ–'9=źÅ™Ÿs‘ž€ ‰¾†¦œ1 óįu :üøaʟ„V+'Ģ |¹éY©qcDĪ tĶf‹›S#}  ĮĮ ėQPŲɚ(ꔄ…%^~ą«¶‘*…Yc*0J˜nLž‡o¢Å1ULsŽ•ÕM„\ʉ-œĘ4$wĪk®™ĖQ”„äźIÜß+!ĻōIØķU[f§ŽG\WQ„“g+y>”=Ā~ļɇwżõWÆ|8×At.>ln+Ž” Ł™\IbļĒęD1Ęk+W¼¶æ…!{x€\ąž¦‚”2ņįÓdhŽję¦åYoļFHĪ )l\QʄMÄvW7P—"]ƒ…_Zō?ķø·Œ¤JŒf¹å±Ńa#ÖÖĢ$øĖ1łÕėMm5TŁt8ĒN++Ų,\“ÓąIćŲžkFīĮ­•Zß۱ڵNäɟοŒüU’‡ÅU.æŠ_Ļ |’Wtd›žŻj׋¾4Åvń³iÖŗ…ŠcūHr7œq‘ž£Ÿ{pćS¦™õO«jw#ģĆb€ēgPN½Ć]{HtK( ‘%¾YW°ō ’žk^U±ÓģÕ“:ŻVĆU×D—'Śāķd æ«žÖæįŠ®-d±>Fāå% ž¼zć“IFĀåŅǃjZ}æ‰5ē×ō«­Æ–q"ÉČēų•~Œü.»ń,ŚE‹ŽĆm®čE|»3ēń÷H5V6å÷OŸ>2ü8ӓ߈:V£a`]{ˆ”sB¤šõö­ą›ź`Ōō¹ ˜BģĮq†c„°Iécæ_†W–ö{sE¬S<×ńé\Œ.¼ć¹t=7L¼‡M×,–åVPb8¼V|ęREm Dń_‚yļoƒéw 'ĪuŻĻӃ]dŗ•„Ō ŖŪȱŻą•J~ŠĻāµ‹Z某iš”pĮzPģž6×®+‰ń4öŠOe«K;ļs†R˜ĖsÓņ­ąfi:“Ōµ;{'F1,8 CłW½x·ĀUŸƒ#jš…ģÄe™ųVĘx_ėS-Œ”l|ćąōtŌ&°6йžä×šóÆčŠZ]b“AČrŪwmj¬R=ĄzhÖ¬īķĒ,Ń©U^½« /ų®Ėķ·×öW© 2°IYVŒōäVŠH„š’‹oš„¾†=G@Ņ£½Ó%t±Ā„™±ŪŸ„;Ŗm—Ä[įćėiĀ]:8LŖyl¤w{ę¼ēƖtwrŁŻ:µäHsÆōüØ\½šż¤0Xź ņŪČ˼¢üŃgŠWcš{Pš²źŚÆ‡/n¤¼‰—0ł€œdńŒōž•J%(2żāK”©é¶ŖQ#$¤˜Ś\ąž䚆µā‹}F×PŌ®.õø`“܂vŒįi5уŗ:ŻVßGńCØY”…<Ģlڰ~\µ¤¦ķRÓE‘eū<ēc:ü+ŸČp}ŖĄŗg4{}Bū}É_Ż'Łxkö¢ŌąŅæ²dŅ# æ—ž’Ÿ<'¦ēŽ+nSDyg‰¼]„k÷té“eœ6N=+Ēlõ»)'’Ē›­Ģd`ägüźā»‰…­tłnī£U‰KćƒÉģ+CƓź:Eõ’ömÓĶo"p÷õō¢żĄ’Ū[1—µžöki±f•Ģzć'­qųžę+Ūį;\%Š£v0Ē®Eh¬ųš_čVŃų£ĀBök1 ź­¹Q?¼įĶ}_šwÅ÷Ž/°°§–Ōn-ÉłŻlu•&Фwæ |wā Äś„¬©i$Ję-€|ądä¼ĻćĮ?ÜAØjśT÷V±ŻĢe‘'ÉX\œœsŠšĖ„ÄŁšg]Ö|?ØĢĶpn­Õ‚@ .ź+Ž5ĶN×ÄņIkq“Ēd˜<.{Æė@łOõ…ŗTž"ńƒęyn#•Š`~fĻLī+øšļ‰> kpK ķå’‡’1—Ą>A#N#śÕ)sŖŅ|sćŌ×4YŒśļ‡gøIc‰×˜Ł$1ķƒ_gxkķŗOƒŽ§”µ¦”ZńŸSĒėX2¹t³1ŒÓÄ6ƒĢ¶ŲBI7\_œ6šæŠ¼?sį “Ōt½n714-[‚@;±Žj“Z9Ē€ü3qāØ5üA¼šģI!ˆƒĒ_Ļ$žµä–ßKIōē·c.J0€¹µ±jf„t=SÚڶŸČļ dęń_\žĖt7Ćž!Šļ“}WJŗcņ¹;BĢNq·øĶQÆ1õē…¾5x—Wµ¼Š×RÖ‡Ųæu Ž0Gq·Œcš®Ü|`ń¶§=ŗź×©{m >O–ėø:ōĆ ŻĻ„¾0ų/DoéŽ)šŹ}–õKIuQćēÉ=ĻZĄ¼ÕuéPZźÄĘBģŲy zśŠ7"¾ąūhōżFöŚų%Ū6`ēķķ^K¬ųÆÄŽŠöŹÖęV³w- vēč¾”•÷9_ėWśÖ‹¤Ļo}yurŖIF…2gŽqĒē^ćmą]'ć§ĀgŅ5ĶhZĢ ŒH&Ż—ŸēAœ•“¼]š®ėĀcūP¹[©ömY‚ķćøóĪ”¦Kc+Eø»–+Œp)ˆ„fL7¶wŖ«ēŪɽ3ź+õ ą/Žį5š¤sLF„fJĶ č9©­É’Š÷«K…‡‘ˆ+·ojóƒĘžŌ¬”··“T‡÷¶Ā^AĆū‰w& ©łD,/,&žĘ퀻I@1ąWÆ|ų„>xĀŚī];ķvWd[]9“ •ˆśžµ2‘ÓN'Ņ?õ][ąWÅ_üiš÷šnµ„Ž[źÖ÷§h‘ChĻbČ÷Æīoą×Ęo ~Ö?³ÆĆæ~WI®ģāP±¾ BૌõłVU#učwS;Oų‹Tšē‹,īķ%(AĮ<ōžuśtńź¶6ž ±u3hĄÕĮ8ßsF‰’j/Ł/įĻķAąü.ńm¤––ž"±d·øŒį­oT’!ģŁéźp;׳䞊?¼Yšcā§Äo„.æŠü9«Écs)Œ«ÜĘ SÕY@9«¦ģķÜę©œ$·•T&Õ\1óŖ†-ŒƒžÕŪĻ© N@rF)#Pe‡Ö™‘bUcµśńüŖŗķÜ!yėA²,©wĄl†Z±ęgt`pjłĘ9¾m®‡T‹;„P»žIč©ō.2±jK;-^“¼€˜Ūåź¼õż¬Į»¶ā|[ųO«~Ė|CkyńKĮ@"WßjY8 żķ‡ä8’cܕm× icśf½6“[ĘńccŒtēz½)5¤Ä<÷Myµ¢k'sćĻŽšÕē†V›O’éR“°ÜFqöˆJQ’Ēü+įŁtķ#Ä^«ą=^Ÿ@ÖÓl3ÜmgĮŚWÓ'’ÕĻ$V¤ŲžQoŁćSųEńKęѝ§Ė<¢ķ¶}ł$;ą×Ąw)Ś“ƒåe÷ūÕßGc ØĮą¼rn“i꽇½,ұÜWžżė¹R—B‡q]­ŽsMT•AS ažĆ„;ĢĶŃHÜ\Ņ£1ŒŽ~qNQ±ØłŲģŲFööń±U?2C_’šP_ŚÅĻ„š‡Š/¼5gÆ-µ¤ŗgˆ#Q‰¤³q„“űˆ<ś÷Ž*„ÅjŸæÄo‡7’>%x³įʤZ¦’ÕĄ!^ݲPōżk͵ )n$wwĘA9ĒJŹRŅęńJäž’/’ŅuŻ0#޵õD0=žkq£jSYkVć÷mH÷Øā³›±Š{Ā/ŚßÄ^Õģ¼7āk5)]`{’2Źż0sĻ5öf½ūPhžžŪUÓOŲ Ę%‰„?xŽ“FZŽpčv>"ųߢ|[šm–„¦-qū@o¼Ž:ńŲWĆ©`8$īdŽMvÓ<śŃ"{—˜åmZURŹ0ĢXuć­vĆsĶØ‹Q°&śŌ±ĀZhQ÷'’zV§9¬²ˆóę€PqƒŚ­Įy@<ōÅD;į Ū•|ÆcSµÄ>YEÜĆŲPnF“²Fpqœ`U«;k+‡o“‚ ē#µh6”’ØéļYRŻy²—n{PœŠØ„?­_“|Õ–č¾ž†€:m#_±ŠģÄöėx:Ÿ»łRj°Ēw¹”Ź+zö gy¦łm¹¬ĆtŃ«ĀœśŠVIüĢ©R=©e©ē$śt  ¬īŃĖßéøWDu/65ņch[©ļłP)JĆTø0ˆ%9ĮĻÖ³ŒūņČ(±GˆVMĀ\įG©­ČģåH†@^9ķADn"fE”„ Ž{Ölś9‰SPRd‚}j% ;?­œŃ…wÜOJ·©ŪķVÜ„ĘxÅ(Ėø•ÜŖ“¤*ŽĒżš³qb®!9`ź}i\ žĒ8¶śŒõØnõÜH±6ØėPT¦4ś¬n®‹sŸJŹŗ»“hesČģ+HG©­ŹI¹\– ­ā SÓø­ ÷v4“ė6ø”6\ćė]UŌÖq¬÷2, +÷ģ=č6H÷߃²wŏ:Ā/†“ōŸE¶iu+˜Īͽš§ōÆŪߣ’öų[švĀĻSÓģ·üdvÉqurÄrg?.sžIŲŻ#īŪ¢'1M~±ż„@P€€t­Ė+ķJ1åF"ˆc Ęk•Źąv:f‹ah»Ä*óē–aČ5jīī+dv„T‰6»ĢN…¼‘^uØjäĪā%9n „žoÆx—L҃Ü]N@yĒo­|õćĻLvķycmld(ąv÷„$~XžŅŸ·ą­"h-õX,¢h˜£ļɓąĀæ¾0žÖ~%ų©$Ńiz–„„Yɖ]ŽyĘxĘ+Š”H*I#äÉļ$yf’@ņ;6]Ų城ž×¬ńUVϵzVŠóźUčSĖ0;@ݚ‰y`3ž§ėLē¹~Ś=³&Ļ8®‡ģ®B•wõ¤Ż€ÖƒFžh^q`rÜtµÜxĮŽ%ńę³m x+ĀŚæ‰u`‡Č…Š)'’c)æ±÷ü[_¾Ō“üy$·WūL:y]ŠŸ.B2ēęükś6ų#š[Įæ ü7§hšž¢Å āWŠ „ĶqÕØtFÆjŚMŗī»²P—@ä°ž*m»™.ī9Å)u5:[fcÖ­)GpŹĒpź+?he2Ąź)Jć®jԈ°…‚ƒĪsæ‰ķtĶĆ!Ų{Ó4§LšÆ|gšē…ķ.5 [³°U›Ė2 ĶŽŲķ_•æ’n«ZYōƆšG%‹)C8~A«<;„ŹG÷Nsš7¤Õ£¼Üc·õ¬KµA½ćbÉļAœĪ~8µ $+g!u' f½ OžŃ³Š¢p9ŻŠŠf^Ōļe’ óŒ“ĘąW3p±±] ž=(nĪ9$R›O„mC¦ČŹw Ī;P4Œ+ŲāŽI?v Ž1\Ž”cyvÆöUŽGšęƒc.Ž-BżÆ)¾ėV3̱HT|¬Ż@⁚zao1QĖĶ9ķ] ʍä[¤„4~”ÕŠ¬ ÓņB<²N@ę¶Æ§H¢ ńŽ(+x÷B_ ĘzūU+ø£v h掁's“»‰nb#yˆƒ×„p÷6Š\ĢmŻš­•#¾(« Ł’¶ ęU8÷Ŗ×ŚŌ±Ä,åaøćÆZ“(IctŪn”žT†ŚO5£ż§ņŠ£g8r†ƒ#„Ó'·¹†Hċ¹~ļ=k[„0;Xb”dä äS5„O*>×ļļŽ®$X †#Šó×ģ¾ ³®å.Ō呩ó2Īī#'Ÿå°ēł×E‘Ē‹j³˜R0h„FŠįcŌõ¬mBŚćN÷¤"ŗź'KpÓFī­śU=®¤qµYĻJc_Ž0”ÕG~ÕĪFŅO#,HN=ØJņōX‘öR>›±Q=„„ĀvČyÜ méŃˆĘČŲõÅl鶓—•cˆO ¾ąŠ©ĒŖi÷·–7ZsĻbɕa÷ĻLU ŁĻk;½¼I-©'1H8\¬ ‰EµŒ®-ŌD„’BōÉ®_[ńŃ¢’õācņÅjGb¦ć Mj8®­ć•"ÉuĮ挻µ*ßsŻJ"B>VQœŸz-} åģcOÆY}øAēÄČ~éŗķP¼sƻԀGŠNŠŠhڊāßxˆ¦É{qÖ¹ķsPšĶ™¼­ńūsL³ŸÓ'žŲ˜FŅż•˜żā:Vö„„ZŚŁjÕ4.©&#|3ŲŗßųnĘ;øÅŁ“ČģŹ:īī“M>!䲇ˆņ ujÄøŃ-DˆŠ#+©Ā‘Õ~” eœL`X¤ŽīßĻ5ki2É|ŠbŹŚlÓ]K6c`7A<āŖų¦Ņ·IB“8=Øó¹¦[Eu$9 ĞOJó{ż<¬ŪųbOŽõ¬'ŌŽ;7Œ¼=w{bgX¼Ę^§¦į_,k:4Å©iŗŒr®TĘIōJĆĢč¹š'“Sį-~ėP†6·ŠBĘļÖ¹7LŠĆ{$¶ź…ˆŪßßéZ:„(÷6ü-¦Żnµf¾(89^ƒŠõÆ„4Õ¶FƒV·‚($'-@+Ž„CXDōĖŻ"ŪV…nÖ?,€6õS^·šćYš×K“FŌaŽŚŚ6ņįe8]½Ŗi̹#¢ŸFæ¶Õ#˜HMc¹&Cšī­4”æÓīg}J4ˆżés^­9õ8Ŗ#%fAŽdY8Ę: °³Å$$Xaƒsšß™Ēul$yLgĖņ«ŽøĖø®¼ā»›g~qš%¾…-NóW“DŌt>w±^ )'žµł×«ų2ūūkU“·)¦I‡Ė†e!g±ō®YÄé„-N—I—K³ō­VČŚjŁ£ē=øķ‚kbĘÖ+Ē*Yƒƒ‘‘ÕĮQšŲÆŖ[Ap …¤Įé·Ž¾ßżž>/_\hÖ> Ō”kk»Hc•ŸwŚW³ėYĒq³ōóĄ·ņŪ}–YZm˜xĶ{ę“%ēŚķoQ šuĻ­uÓ8ź@i·6×VŹ „#¦z­«Č±[:īlŽ» ĪCć?‰:Ž­żÆ%¤>Ø,¶äL‘–_ŅøOü$Õ5ŻF=FU¹cę –TZķÅoĶ„‹S±ö>ƒ§\Gi„ćČīø]ärk³¶½·gūD¾hł†8¬¤ÖĢR™JM6Ń`h6«61ĶbYéwV“‡ŠWT>õ‘Œ§Ń„¦–Bö«ß¼Ž<]qÓҚFf`ŗ…d‘rTō4æŚv°N’gn3ļ[67RČćĻķżksP{7¶ ģB€yŖdō7<ŶīšHÉ.ČVÆŅ­-u6ø‚ęį ąœnlg•‰“v7“]"-EC5 㜠÷KO²Äy榒fr‘r6’Y<ŌThÉ轫J[„”ßV“̜ŽFńīnŒ°’ž"¾ińÄw0ŻOa}®3µć­hR<ń#“@еŽī+–ÕTA#2n“Ž•Œž£3£YāˆŹLō­½7TņRI%BŁĻŻ©bÖśK–I "\‡šv½œ±Ü­¶×€ÅXš–„"ŽCłTžU½kčż)Ģģ$d!@Ēւe+‹EŒ08«¶öšŹ#™K 8Ōnf™©ŖZŚ£Ź#ĻŹĆāż>bc‚ś$Ÿ%H&·QģiŠ—Šß9,sŒ‘Ö°õ‰`°·•ā)ø«nV\†sśTObšõ=2Čź†{ktņ– k\éVÖ¢X6Ū€k2ć+>„l‘ÄŹKĘ8EqŃOžĄ1Ļ= ėX¶irŪj–÷Āđ)Ϭļ°O4‚x•DJ2ŲŒYÖé”`åŹäⓤ:uģŃGöß&]ų› 5nā‚_&Y<Ä^šŠ[ČĪ֊EŚŻ=ź”˜Ņ64ČŃå71TSĮ#©ōÆaÓ刧›(_™G±¹ä_¬õ ½ćŅ/~Į« “n<×Č~ ńĒÄK=R÷MńµˆDW ѐ/®@äRoø¹O„,üC¬ŽYĘ­sę[ Ź'eĻņ¬…ƒķņĢ„ L6ć9>µĻ9#g-¼Ņ6m$Ć­f_‰ŽŲĻ Ąø3‡¹šF—5ŅźˆÅ%īĮė]EŒÆl‹ €ÉŠqŲS45­.Ņy¼Œ˜)#=żŖŹŁ»\‰Ü֋˜ĖrÕü2ٽ¤¾\īŽv±K¹£a*'Ķō«ē$é—Vø’ŠBĮ‡Šēü’56f zŽMh=}¼ŠévŠųÆc$Q¶ŪrѰ5Œ·4S*źŹņ ą8z·÷Ŗ²2©‘ƒ7§­g)XŠŽ°ø‡É1ĻO9Ē”¬½CN±Ÿ2KĖgolÖnEĮ™piSÄZę'9Ś¢·“Ū.\ ‡ņ¢Īv·­ “„s·¶Ņ,,–)’S%É7'ž•ŲĮz‹dźmÓqž/JéŠ9&ĪzņęĻs}¬Éč85—>pä¹Y”ĮS®k¤ˆ1é–öĖ…Cßę?v¼ī_n»{V ‘ ż1A”Ļk“µŗ‰b&X›ĻJē#¼ g\*Ÿ”ŅnĄg_O–i]@~žĄ 礓Īs*„ Ļl’œqÜÕßxŸÅZl0ŁĀ÷¶6®| ĮHĒĪqje^“­ėŚ”©{qtó[@Ę#~ń=kź_|\¹ŅYŚ\¼…”1a” Œw ĪMl KT“M.ņĪćN‰$wi•ź1ҼmÖīēT“Ųīż^}ūPsójaų·N“Uņo€/,Ŗ+cĄÖ61D³É<°ja†pƒ”Ļ_Ā®23:ÆkS[ÄśØø’įT*¾@ĻÆ)Š/ļuūęŽybŽŁNBēļ“ėRĢå'±ė/¦Ē§ŲɃn遰šI>µ™¤>§ūč­n\ć,~éõØQ¶ÅFż·Vń9ÓR %Ō~ŽŖ¹+ļēė^=«|F¼Õ|BĖ%“¶³³ķiv+™¹­#šĘżGų“JÖįšŹśÖųIńn~æ)Ī1õ¬½Fń²Üß+ł°®Š¤g(ßÖµ²Ewˆ„–²¹šõā įˆØ|q©^«µŖyÓ`23ƒčk&Ģ߈MØź‚ÖGµ[-f9ƒĻĀŽ=‡½XÓōĻķ›_ōčāvXĘą£ńH—#µš†£y„Z^ÄlęūØ·+"ü¬§Ųż+ŗšŒ§Óu9nü0D70)ŲJdĒOCAEo‚ž!¾ńÄ÷›Ę“Ręō$[ U¹“œ‡:s_£¾&šG‡üį}{OŠu›-d?̹Ü}ž5vо[Ÿ5Żų Zš­īŸØčķš_.g§?„yæØųžŁį—O†Y.UĀ…# »ŌūRU 9:žW«Ē{Š?¶uŝ/§Éćj„}WšOĀŗwŒÄńėzxæÓ• Īhu dō=»Å? | šßCԚŽkY¢!Vßs‡$u wĘ+åeųĒ„hÓÉil·P[ł„6ˆĪŽj9™mžćŠæ ¤še„šu‰²×P1XxŸ=~oóÖøÉ4ńu„ŚųOš)ćxĖyqąäzżzÓ».19ßųŠāöł®4Ł&“É™Vx$81 Üä~uķž&|9°Öģ,Ķ–‰,ŃÆĪ€®ęn'čMhāÅ*mčz®Ÿń^ĻNšcĀ:śdÆCŽBų[•#€Ćæµ~büCń–µgāūÖ·³‚I“ƒæ,}ŗSQ± ŸsŠ|ńEŌŹ^ŁŚ< ?yĄnAĘE{·ķ’ ¼s‹©ų>ņĪśåćŽK€ŠF@Ęߏ˜ł_Cēmņ÷Oø·h‹[¼gs#/l’õ«ŚaŅtĻ Dź7:•øĄ¤‚ćѰzRaĪy?Ä-X‡_†*hµ ?6ē!—Ž”JóŸģżÆ“ÆĖ Źø#*zŠhŅ3Šō­* łé1ß0ūÄwÆh“ńR$¹·C?“č>ėR–ĘŃ"ńgŒ–ĪÓM…“[²_ĻY1ä{õŖöesžuń·Pøųyń8Ų¼²^h·Ōf=ż’˜ēSźŚuŹĆŪE“ņs¾”œtøīģ_Ņ.'žI“’8¼ŲżŪź=ėɼscØÉ¦ė3^X™E¹gu;ƒPW5 ÓN©y¢GEÄöčĒå“+Ó9ü+é€:”šö™qtÖĘGŁp±õVéó~T)õńFšf±įe×,ģģļ-¢fŽéŽFkņóĘ°ŪŻI4֍ ”'c ‘ڀĻ-»ÓM­¢Žn'ųM{Æģūć»/ x‚ŚĘ[‰`³™ƒ8wł[œ*Ö”~G鲘.dƒkBß4læĘ;Vāž8™ —=éN{óÓö‹š\^ńV—ØévÉö õ‘ö!8Ē$ŸČ×ĪPi]£¹m…øŪœ3XTä}ĖšļV¶ų±š³Vš~§u5Ę»aÅjņ w)Ų\ ~•śē’ ż“ąųCćmoö&ų«<ŃhśŻĢ÷z ĶÓd4ĒćĻoŗ£Ž“ģtB]ż!xžĪ}/[ŗŽ7ł¢“!”pĆØ#ł×Ö³ĻF¹,š©6ļ22{1ƒFūž×®h76—Ö×Q ±æ÷H9üĘ’ĮÄ?±…Œś/…’nŸ‡śk3Įz'‹ķķā80’|«¦`8ŚĒĖbzå@÷Ę„;ņ¾Ļžźc8ō? {NK[ž`xŻwĄŃ±+"‘žzįä—y<ėņņ1ł×lV‡V-ö;, ėŠr –eݜŒtÅ3Žķn>EŽĮr}½ź«ę5 ĻN{PtĘVѓ°u‰H7Ni±“¹6’8ėA”qPŖ’ŪiŪ¶“»ÓژŸ,/†’j½ĻöWż¢ü_ū!~Ѿż£| 7K¢Ü„Ötó!V汔…“±’> ;Xź†ēśuüų—įoŽæ üń3ĮZ½’‡5Ż:FÜ”fō TąŸ^¹«µ¼ÓŁ”x²]Šö® ń6<»āƒm2ŅģŅĆÄÄHš) ":‘†°yĆ)é_©¾Ō-vżīĖ+Ą’…ˆéž}+’¬M¹®wŁäJ>.c=}ECy¢i×ŗ…Ž© W]ō ky żŁSŸĄ‘ųן8²¢ģ ?šYĻŁĘž0j¾ ]: ’YL^Ęśq/Ų$Xę8ä”8Żķ_‹z|ÖOg$r7šīƒœұtō±±Ę\ł]y‘4ˆĮøĒzś7įĘÆHQ]¢” “œĀŖŠŽ,īµnø—YÓHÜpHDČfõÆ<ńžāͼ5ā(—Rtpœ‚G ē„a©¤Ļ¤?eķµøüŖHm¢¹ŹHG–łļšśĆİX m„Šć/`Ü3äąökÓ„±ēb.ZŽÕ&Eh3œ½źČŹ(xĮČ8éŒ×u4y•!iU”qŒāˆeÄc8ąs[Öū ĀDī¾Y8CJÕrņō)×ļރCęväI8¬ĖinĶ’A-É*$.“œ@ßÓäŠŅwĻ8ķSĒā9.„ŃĒn«ĘIĪ Ÿf?vŃDdøq–'?CUŸ] £\{ōł3źĶ{;¢ŗx÷¦Äæhp²ŗĒדG*–Ų£øŁæ#<š°¬bGš‡€=*†Oo<ĮHOjėķ4+™#óˆwQč)7b飮ųuį sĒŗÄ:ƒ4MSZŌ¤F`o&N2ļŚæbžĮ:“;-{ć&”iā½a™%M:’q ?©Ķg*‡TśĻįoZxFƒMŅ“ż3FŅ£@žU¬a?‹ÖŗĖO-É·Ó£>cøā¹„+”]ŸĆ}²p&pyA]MĶ­µ˜|£ī÷ aŽės#ļ²QågęȬKŻjŽ™Č2Ź{g”¤ŲķŠąµYķ‘īžmœń^Aāߊ~›erŖ%öžvśšiÜÖ1±ł»ń£ö¼š—„­u»½·Ō.J7jÅ×ļzöāææh/ŪĆYń śž•įk×ŗqę7É õ_Zģ”H¦ĻĶ=gÄŽ&ńQ}OŽ޵~X•H|øłž=+ ĢŚŹĮćW£Ųį­P!ČĒɜԔ”ŚĮwžµ¢G äī_Ž8Āp2Ǧ:ՋX3!,§o¦:R77ģtʑ£*W9Tńœ6šŒˆ”ŃOsȬy4#-›J68Żž†²šŌÖ{ÆKs§LŽĄ LŒ Œ×É~>Ń"±iīÄ ×qŽ Žųļānƒgć-"RF—qFT…NAĶ|K¤Ąś™es*=Ģd«ńƒ‘Q(čhāto C¼ƒŪ"ØI¦i-6ā €B‘ÓĻ2£¹ŅxoFÓ-”Ilīm]@,ŠŽ«Ļ\ömĪ čć‚Õ#’å˜) p1\³}ĶŽęīÓSŃ“÷±K|ąšXwōĮiŽ ńź –·H¶œ'÷Z9XOČõxėūNųxUApŠJ>r$# §ē^Ŗ×˜“tĮ•@Ś0:W©JgH;›Zięr—ńHй>3“{UMrݲY·īK‡§Jé05|'c¤ĄģŽ-†įōÖR”8t8ąŒśqÅdųÆBŠį»Oģ öŌ­ fhöOjÖ2čg%”Ģ]£Å§-Œ¶q¼.ŪĆĮu8=q_+|[šMǔھšy×:ŒōśÖswŠÖ›ŌłŽņv6²Å:C ĄĒ Ö>›©źr+yĄŸ”Æą©lĪśR:ŪMF”s"ł¬2~õ3CńÅ÷ƒ|Qk®ŲŽ!¶ŠĻnėŹo~j#Y>‡īæĆϊśŽüa­YiͦÜķQ(I@ķÓ„{ēߢN֓Ī^Ū€Tō­ćµ"}c­YŽ1kŪŹtź o³„üa Ėžy®”ŽF¬R]"9#’)"…ŃŗåsW“ ŽŽQå?”‡ØĄĘ+HÜÉ̹w§‹W;&(>”C,Ń#‘“·įTāK•ĢK‰<é «|Ć®;֜ (‰SŖž+7JWhÖĒFIķQĆtZ6ŽĮBūŅ@`Ė2™˜ŒrO5Ré®Ūä€NAėZsz ‹ū0©,ŠŹ{ć„to–‡9f©“5§±åž4ŗÓ”·cur`į«ęėųæÓŠ1GĻŹAėXLééž ”:;¹øs޽VY$UĮŚ8¢”Fµė…PVJ‘õ?*S#Ēǧ„oXĘQśīŽńV{AåH'Ō×Ėæļn%¾į>qøuŌŃ)t-+gølĪÉĻøėU/–Ē€#“9#±¬„+£rķ¦Ž²[aź8"ØÅ£“W%fdh ĘHąVWbh¼ŚzŲ•–qŒŒt¦ęśhZ%¹ˆF½›©­”„s²iZ]Böźs’Ą×Š^֞[_³Ü\vøĀŸJ`ŃźšJÓŖŽÕ)³0».0=kJf ?‹Śd¢lģē”é^ęŪErāe“vNCZÉ É9µWĖmöŖš®Æk<[æśĪF[ŒVs} r<‡P–(™£LSŽ+)ą–ą3Cę^NćYKbŒKČgŗJ‡q嚊øµŗU6spr_XÄģ7[%³Hå<]Œ³ÄUŸģügš¤Ģē¹ŠF’jw|‚ŲēŠęõ;f^PTä`t4Ī~fA¦3½ŠYęw\`ƒŅ½ŪOŽ8‚ÄT ®h..åtŌļcŪożŁ~Hź+Śü ādƒ[W‰‡Ģō=«Xģot4¼}o”ŻŁż*źÖtÜp7 ąā¾4ńéz•äŃBSķ°F~鬙f¾ˆś…ŒŽdŒš¼tÕÓD×Łį’¼cĪD­bWŽõ\n $-’XžT’œÖ;XµÜĢe&1œŽ¢€ŒGK„8Œ"lUŠŖ-ž-±Ė{’(,zXFł;Q_8ņ+­ŠtČZU"ą3ēĒŅ¢R±Œ·:-sM‰­wDąNq\†ćhP‡ƒ–„ō$Ńóa‚ 6®’\Õ:öÖęķŌ ›'=„m`3uø-¤,¦?$ÆĶé\ņĄ]”ېTŒī®qź턲-rpøAīk’E–KĻ4I"ŖńņžsĶu6‹-Zi&Ķ$įęnøaŅ£ŗ¶æe‡l4LҲ4Š-Ūß_iöMnźŸUäV,zŪŻ»}Ŗ'…÷lłO„mLNęĘWd¤¢q[nū2›<šėŠ1•>ĒŽųėĘö>t’śķ­"$  “Pų7ĘśĄŠk µžĻ$y€u>õ¹>ĪĒ©KyŌ- ģ>n9®&ņÕ#øŽ$įIĻҳ”žĀjÄĖwirŖ‰‘vćę}ėāo!f…6qPŲŒÖ—OŸĢŽHeŽ\įN2¦²g±ÓŃ:„˜š?SYĢŅĶ“ńĖY aXĮ{Š­%µ¾ W„K’xÅ8lhw¾’ŅÅS µwwEv—:äf0:m\Œ*†cÜkĢ ŠŒ©ėžMsw÷MØEmƒm/!¶Ÿ½K™Īēó£ā;DÕ|(·—鬺.0­óózóĻ>Õäšō6zf“o&‘$S8'Ģ$=«é%+ž-(›|ee{bØwP”˜Ū¦®w_ÓgMbąB“Ȥ“»~BóŠŌj'Ŗų7ÅZ¾“a&ƒ4'ū2ૉX”ōĄÆ_ųAš‡Ę0µńu՝µĘ½h]›tŽ6@„äc?ˆ¬„6ŽÄŽńąµøŃ[Ižécrįb]ģ€{śtÆ-Ń“sI¾0ܖ™G<09čE.{XŅń,WĘ[ȇ˜H“”$z¦:ś®=gū[HšÕłĆkоY2ČGwJ¾sm-sǼZ„«Zx®ÕćW†#ÄĖźG·ōŖ±!ņü §„Ė£[ø·Hd,ŠTd‘Ž?Jš?ßź^Kh–Īwøµ‘d‹1’ÆzøF™ź:oĘ_k–6Ę÷Ļžmó #å'ƒŠtÆP’…Ń4z-ö€m­ÅœŸ+ó`ū÷śU[K"e|ßį?Š:¶‘s«č:ĢRd\\‰€X ķš¬ū«·žYīm^a9i9Ȭ†‘Ä+ķń< ŅŲ€ĀE' g޾Źų]ń8¼>¬Å’ˆĒ’±u>‚“5ökcƒųÆ\ŽŻAq§k«yXŹł®N z× $–ÓfIŹ­ĪŅ'ļÉłɦ…Æ x>?]½µÕāŚZ a¹Ž3Ēżjž™d< 9³Ōā¾b̧q+ŪÆ„?hTbhų§Å—Ž Łbn'ž1….»J·|bø‰¬<›ū1ŖĆ;m ±Fč’Wh“7¼5įŻ÷ŰČĀ9¢¾_5ŽśZÆń¢ŚŹD¶“°™ī, üńgnŅ{ķT76kü.šž|9„oslĀč»$ūŅųJūKP> _Yėŗ†ƒg5¢Ąš»ĢMųą«v¤ĪyŌ—Cć A᯵_< ·c!UĘąĒ&ø Zā]XĄ­å³ˆŠĘøŚ{b»źzd^5Ž},®ØĖ-ĘĄW­axTŅ/µF…īŚ$“”ĒŹ?ŃŪÅiex<‘ĻŽ¬ļxxé¬d²xKl ŗ>‡ŚXŠ ėŗC£If‹°ļ3mĄÆ*š®’÷WĶ „y¹ó ×88ĻōŸhö›b_Uµ–1³?Żč ƙuĶ^[Ėé“’“4/‘°ćžÄZ #+hvžšĻŠ­ō)õFįõDŽe\¢ģČ>£Ś½SJš}Ɖ4›bŁ­#»‹,Ž’÷ke$S—c“¼žß³’‰}Å»µ†żåŌåG„zG€|Gn¶riÓŲĆpŽį°ė¬õ©”ŗ"Y_Ē֑Cs"i3²NŹ>R~ń#=¹Æ6ųićaįŗźš|W¬„ŗ«r1^õ˜¹YÜųĆÄń޵µn‹g/SmŻĮõ®—AŠ®ķJ¼04ń³ Łź° YļŚmĻ„„ž梋{ē„”xŠœ`a:g޼nŚ}ĄÖ·7±–U…‹ąnl’I¦zž•š*ÓĮ~-ńMüŅ߈õFQynŹ °>¤öć<×Ó?|;šś&æąķa¬u“peó;ĀT†³ØuEėcŃuˆ_Ƴ—Äŗ•¶‘Øó"óNÕ-·žł×Ę^%Õt=6ęźĘņņx5x¤W;Wäe$óŸĀ¹e{ŲŠņ_ˆśĪāŁtČc–&Ÿgóa8ČĻóÆoų1®ų§G·Ō“{@Ń@Ļ“4gżjćŒ’z’F3F_ÄŪmnöqźs± %Į9Čōņωln⾚7·›rœ©ć5¼‰ę±³”hzŽÆ –ĢG““/ĪÕķ m%¶ÕĒ„µ‰NÓ>äpKg‚>µ²©ŠöK_†v’ §-¾”H)l8AĘ:~5sUŅāŽ^ŻÜC<ä)%}:ćšĶ5 ¹Žsƞ‹ÄśĢvévö»œ*z_Ijž»š=©‘š{WP"¦ć¦hl“É5ķNį£Q›® ^ jü:ńÆöfØŸ-‰Ė&}}éØÜ—Ø×¼Kc„xš=OR“¹{k­¾eĘĢ §óÆGŌ—Ā֙ö‚‰©¦HĘUĒlŒŠāRG™k»ćµ}ĮćuČV÷ŖV!ŗ’ĄB¼\r:Ż*+™÷Ā϶“>©guc ·%”¤1žI­}sš’[šę»©G”m%”ȬÆ$ćČyĄ§–kü<ń¶ƒ‹õ 5±¾(Z2ägšÆ¢õJĖRK4€ł’§ŹLÄkKI4Wń¦ŻxsVÓµLĪ“BXō^:ųā¾ų·«ĆįŸ²Ų<~R+˜(ż(hĮɟ8h×i¢CÆŹ<ķ:E#ĻžéwzŪ‹^¶Ņ$²ŗ›L]oH|“Ū_ų¦ÜŗµŸųRxķÆ“ĖYląs»Ėsƒ¶ÆēV£TÕ“»ø$)“Ļ U¦¶.·.ŲkZ%Ż­¾…é ˆĀŻ£c€OnµöĄm.ļĆoo3O‘„ !‡·j$h‹æ“æ…[_ššėŗU·Ś5;I·ķŁÉN¤یń_čƬigŌmĪöł1‚85™]£žųkKń ]Į&§ic©¦Ō‰e÷žæ7jó/Œ>Ö|=āq¦‹Ø„IøKå¾C†/ŌsśŅ ć“}#X—Lø±‹J¹—22AĒO½ō©>}ÆĮŽ"}_O/#Ə¼¦\‹„7¶CģÓ[ˆ¶˜€éĻzöKv2nŽ6FN~µmÓ±ĖųļĮV^5š¶„”“pµėDĻi1L“OƒĄö9ÆŹ W@¾Š5K?RšīՄNŪ03ž£ō¬ £¹čŸ> j|O¦ė։Ä&AÄn݇ŒœzWŠ?ÆąŻkĀæ| %Ī—©ŁĻm«éۜ¤RՈžŒbŽ·:!¹ż©žĖ?“…ū]žĶžų» \Z?‰ÖĀ8u«hß")•@aėĮĻąG„}šßÄ£Ań.›{ę5”ŃČąéXÉYŲ鉶u&·k¬ųTkčń†e%Ozł ā_‚,<}aā„¾1üGš«ĒŗtŚl¶Ó€écwå•88Ž=˜)¬§$į-˜¤ž'ķ9ūVki88ō5šļķą[żSĆŅjHŻ«hóFÕvŅ ūČ? ńīkĢ–åØź|]ÆųKńćŚkŗ¦—ms„źāÖõ„aY6ī#ūĄēńÆę7ž Cū3·ĆŸˆ—~0Ó­ļ'·’M¬På^÷dņ§J¦¢”OĖ2‰½Č$FÜⳤ‹`,„;nƒÖ½J{}X•. ‚K’qĮā” ŠAPvc­Y‚ģI+…\ą°źzRFŁY œc·­ÄXŁ·Žг!ts»•ģ=h4Œ­ ÷Ž"ó]\Ŗņ@Ą«¶"ŗ¼lø čƒč~ĮĮlł’d?ډ>x·WsškĘūlīRWÄVwmĀ9ē9*{į³_Ż7„/ĪÆ'ˆ¼ p…n`Ū©čW`’ĒŌg‚:‘ŽžŽõ•eŌčŠ=÷Āw±źŗu­üÆäßF<©Ōž„qƒ[Z‚Ė?™l@0Hæ+Š×SCSąæŪwövо>|¼:öˆŗ®±££År‚÷ ī1ĪŽ£Óę5ž~>j³ßƟü(×ÕZÓķ^h÷ ·NrƒŻ”pEsŹFю‡›źś ·’׉vĶ× į=n÷G×-³Āt²į$;²Ojē“čtCcģkڬ3Ķ*²X• Én}+⮟įŻOnµgook}"Ÿj†öžuĮQóv™įł“]SNÕtȧµœKf$·9äżköĄ?<+ń3įw‡üC§§ŲœjžlŃTÅ`9^ż1ҧ[5øņŁBąż+s™­INžŹWkżĻZڵšXQaMĮÉ ~õ±%äńÉ™¶4$õ"ŗĘ­ƒŒśõ ŅV\øbĘ?·os¶įA\ń×½‡Usʙh·Ą™Cö=Esér.å&9*h†QvZĖ瀵ŅŪE5‘…q˜Ié@J“»Ņķ¬üčbĶUäõ›1ƒWVł¼l94ęzŖ[y‘G8˜dŠÉŽ$ØQ ØūƼ*ņŹ”ƒ"Æ5%üŅĘĄĘ@Eżh -Ņ0I ­»‚S“ņˆĘAė@Ņ x¦m̧ž2?)ŗ°GUfRŁ#hģ}hĢw°Å,lś‘޳ēpL¢ć F1@™{O†HŌ„ÄbeŚzö÷¬›»G.dˆņ½½h1¹Ī®„q³@›±«–Ę[b@R{Pk,·įšA*^Ä÷¬×µŽpĢ2†ƒE‘żŽʼIóg9÷§wJ '§'4ģɅŠķfW>µ~ŹŅ'PŒćßҁr3M“i {4·†KŪ©fX₺IōG5ś%šöń÷Ä[{}{āܾ š±`ĀŃ×܏ę8Ęk)ÉF™ūcšĖąĒƒ¾iPi>Ņ Ó“ö"ŚęLëֽźŅĘĘÉT¢ļøüł®yJęÉ[CvĻH›P‘’įÄ Ž•Æįū!£™­fŒįNUĻ<}jMŖė¾Cˆ U“łēŽł$VČ6÷QŲŌót@qš¶¼Ń†Aˆ#“œgė\V£ć- O³¹–ļQ‚ŖOĶŌż*y_ShFĒÅæiĆvó]j֖Ńf‰7åœūÓ>õųūG’ĮG'ŗ²Ō¬ģtÆ"öܲyVlIœpĪFqšģ£Fģ£ńĖāOĘ?üOžņć^»ŗÓl&;–Ę6Ź Ļn¦¼©nc–6Y6üæ*ńŠõa •j˜ŅȰ¬YAģ3H»esĻŻķVpNdŠYņŒÖ…µ§›ŒÆ5¤edbjZiŅùš#.į}«ØŽ;->8ī5H²Źø<œ“ĄÅe9SGŲß³Ÿģeń«öŸ×#Ҽ įcGŃu†mUķÉ@§«.}zž£’cÆų$ÆĮŁŹ5[Ś|AńŗĘ‡}ĪJ£ń“üų®:•ØEŸ­öz½ŖF¶¶vöVhŠ©oacqZ£O_0łQ„O\uÆ>r¹Óm O"6Œ#®ģVüIdžb§•ć„r±“Z^C,l“|„ńŠĻ¶°K ć5“dĘĒ$Ņ ±Žķ˜Å8Ūž†§žöŚfy“Žzõ …Hć/¼a$Ŗ¢5UĪāNS_|qż¬¾ü6±Ō~É®Śjšź©ņķB{ńž~µ“cc¦1±ł ńWöŒńēś·{V]/Btłmān\ĢqĄēµxŚEhUW@­į„ķ Ń·*·¦j½Ķ¢Eµ×#?Jčē"dö–Ø0ņ“{Žųé^·įO†××M¹O|ł>•.fGŠZƒ HÕVŚ-ĄmĘÜWuiįlQö<•Ļ&­x{EKo.Fīk«»ŠŌŽFS‘PL݌]=mć¹h'|§;s[l–¶wß0 ‡Œś{Šeq/ē…ļ]— ŸN‡Ž®i¢t2Ź&PƒØ FmĶ夓ŁÕœŁŖ²Éc^ʱQæŚ|ŁU‡LVFØgD Qó“Åk`2›F‹Qxī.!D¹NŽ¢µՓb®0¾”Į›–Ń#Ŗ,€Ž“¼ö“GĢŸJ ĢÜĪ–Ņ™“ŌĮ•¶Ü›Øw®ī¼õ Ø#MstĻėNłąe.ģŠ‰G±©£)‘£KˆHŲæy}jłŽÖKT‘e ädÆ„Z>U¢Vę²nµ ܘH!³“@e$BC öŖNb|®7ž“°”Üm’2ŠéšmՌÖ-Ģq–Ēć@bŅ vœĀKŒœ{T+ĶH™?•J}ŒÉ xĒĢjŁ0Ū^GÉĖ.3ĶD3[[yGc ~k–»v”#Üć­A[ÉnTČREģG&« %…O”†OlPZ•‹Ö’ٚ°Vu?Ä1ĶU»Ņfø¶['Ź=;Pjr‡I’ĪXž@Ž[>µŌĖk±Ęȅx:ėAŗ—ōĖIzÖ¶ąŠXŻ÷ °ö ‹—?“‘v«Ÿ(tĻjK­O쨰™pĖւFC­¼Öķ ż²zŠå®ŻŪ%•³ė@}²ņ¶E:˜’ŗFk†¼ŅžK³<.‰ÉRx4ŠŚŪ¼ ¬š®¢‹ybHŖŌŠV‚!0¾`zö§»I„ś{'Ón% īĻńY4ß*ĮÄe¼ügžō…”Ķs4­Ō o8$|ÜēÆć]¶˜²¼@»Æš§éœP"[ėĔFĶéペ‚;E»ß°$.?1©JĆ0āóšS ¦5u$px4\ŚĻ3üłęĢ†ÜpqüŖX¬žÖL" = ķH¦Ę5ŖŁAöYČ2)8`~õ\Ņu±I$fž&Éēi ƒ^īĪiķ[Pӂćų‡õ¬kK»•g@ē=3ĶKu£ß2›‹xZU ¶ŚĀ$S”2?¦)^ŽĶ×äĶZ‚Ö՝w <śr)£"퉕ĄėÅSŽök'YmĄb;œPw--܂āH„nŻp85r3s"FvU ĆOÆlń"‘Žī+ņ+4WHī:ž“å:’†’WY#&‰‰%{Šóūķ#ģ©< |ž ڲ›Ōč¦!“Xń“ŖI̅£„ `§øÆ4ųÆįfėMkė[)pH過³O”Ō‘š¾§£k®·ŠY™l\³Lˆ>œWĒæ¼&c¼“Å–ViófDˆœcԁSøłzWey4Ė[ié†ÅuŸŁé²Ü`±nµŒ–†lāa×`ÓuXćŌ3`ŗœmõīz«2ø·¹We¾sļ\³]M)ö=ŠĒƲ\i‘ŲßJÅŌ°ÉVĘ:ö®rćČæ¹V‰āzņk4t{3×4MN]RĒSŠī§±×­d F#x%O®q_eųJźM{D¶žłd]C`+ćp>µŻFG5H¤VšŚ@ø•^?B9ZĢ»•bŁ"©ž>§Ž•čGcŠq:{ CMŌl^9”!łXdq\ĶńÓķäņmo ˜»ĪGŅ™„‘Ķ‹·#ķ øąä łqM»Ņ<=©Åä\»y3q‘É_z ƒ>/ųµš¾ĻĄŚ…ܳźv¾ šżė“o°üš·ūCØ=+Å­#Ó-ŁÜK<6}B»ˆśó\učR‘2X¤7Æq„ĶØo‘€ĘģUÖŃ-ęy.#ˆ.šH ļļPwF7>—ż™ž9ź¾ń;xÄ[ßéĄWē’–ƒĪģ0劄lś7JŽ Jg }±Vp©'Ėӎ†Ŗ]IxŅā‘™OLv5Ó”Ć(’Ūë۱Ć3B‰…Yv’@#†Ī©£7äG§Ē•yļ#ņĢR)ŪüéŲSdś"ˆžIMš1ązVµŁBĢ3æ9ęƒ HĶU±×ć Ü^ʗVÆŚTŒņŌDšKÅr2§öq…÷“œ†Ę£:%Ķ£Ÿµ[K äć +9Ē©N,BĶšmiĪr„Bšk æÓźÅLĒuŒŌVdVŁģĒy!_›ž «‹a”øI® Ś[5RīC`暓ķMlĀźŽmˆ§8SĶm5zdž> ŚŽĒµŪĢ'€+×ķõ{k‡1¤ČųĄČ9­U‰•3 ĚjźhŠī8z×9¢üŃ5Ś…åÅŹN®NĘ•Ģš±ŁĮ ŚčŹŠŪHīŖxĶy’Ž­,b¶i”‡lŲ?0ījCCå+’kf­$WgŚō¶C/Ž žæJōKh„–ŠĶeVĒ„3k™³Ķ9EYéÅpœ÷RĪö“=óņōĶ(ōŹG@{Ą5„l˰DÄdóŠ•ė,Vj®ģ”bŖĻČVXļßéTÅŹŠÓéAŃåBĪpWŠßšę‰}zéoÆ$§…BŻM ØŻŁvķ“ŌzŌm$­ū¹FšFÜ„{ÓLŽ; y*ŗ5¬rbøbøx“ń˜CŹ %æ¼}ź%Ųga¦Émīm‹ a’֮ѓX­Óķ6čÓ=ĶDbbĵ±‚šˆ\؆Į¬ķSE·²ó9—ĀŁĪ*łDāļf»¶ę[€ ĶV¶×īŌ .ź!zēÜRäFÖ&Ģz…Öęķšzc­Č|«—ĖmÆėžMe(ōˆ³jół+c/8éŅ›§ŹŽl”ćó‘Ē­e©œ£bŽ”lņyĖ ŲNx=Ŗ¶fö­p ”?{Ō×DO©6•: dO0ąu"¼źšiš|­å²ZŪ߀¢µ47aŻ mŃÆ\Õ³%Ž™,eTČ&ź ¬gX™ĘīÖ9’™ĖpŲĪ}«©‚ž;kR#µóĮ=V°”lZŠćīćū\óFDŠżąœ§jιѾLJaēFNwŒÕ@nLÕŅīŹČ<˜žP WI;]M‘¢Q ō+xĪĞoā/Eāø.P»† Ч/ŸJćü5ą‹/ ĻŁäøņ‘Ļī·¤ÖŖwEic»æŗIqHŃŗA<y°˜ē×œy§ø¤e4cÜBm®TŠ¢‘ƒŽ Rŗŗ10±ģEL™‘„ķ¢:«„g<…'ÅM-µā»łhåŽĻJ›£x³:?čń¬Ė ¶čˆägć5?xĀóĶn¦ą2® ŲöĻē[Ā!Ōćļ~&£#:ĪpŁćkė]o„u¶Ō<ļ·<ŹĒ ĶŠ);–“ĆŲ·]D nĒ’^“ä‚iģL$Ÿ‘€ūõĻ4=äŖļǚ“·z^س“óąŒä}k鏣§āĒ‹¾YHš‚ĒŖč—aņ²]ąź*eģō/xßö‚ćė·1éQŚČą¬n¼ėŌ/óļ_/ź^-Õ.Hwm£*SŠß“×®lōs{nϰMņ&vąJqZ±ińJßÅibnt–µŌ`QnņŖß÷yĒZō»oÅć¶“V·ŒģĢ‘tćÖ­JÅęųM­Łųš Ø.Ž’ŲņQźGų×Īß~ ßx/ĒNžń)6QlYQœį˜0ČŚ;äõ­¹Q³g½ų_ÄV¾;K{Ø'†Y›—mŲƁógńĶYń‚dŗoy XuĻŻĻ˜”Ŗ42tƇoį5ĶŖ«[H»kūg½yķLJņ[ՒŚ[KÅ˜uø§reœäžŽhāé}„°ŖŸ2‘Žø `—JøÅŽęR_=»V.f,äīōT¾eudBppz׎æ²ķēƒ,<;«ųŲZŻI~Ŗ±&Ńŗ@hŌjĪOö‚ųE7€.“Äž{ĶG>m”mž£€W•j3꾇VŅ­ÆNØ£YļĻ­g¹P“±ęZWмI¦éwÖPGp’‡1ó–9 ±“ń«{_-ŅŹšP…aų*„ęuEw=ŠēJ‚ĆNMe\É,*QŅCßQłW•\x“VÕī®!¶’8c. 7gŠØŹĘœˆśąŸĆXµ ć$y×ü".«sē[O–*›łēŃ[„ŃhUŠń؃ƒJåó.āōė„ie‘`<­{-½ŚjŚÕģ[dĮŚxĪļšc½Ļ Õ5}^ā+ ä²·?)q ōŖæĘ”eāVņkym!RJ°9ŚGįC1kCß¼ou«ėh‹5ĆH›$ޤåG„yo†>ÅÆ\µ¶­pŠ#;:¼c ¦9ķY)X•Ń­üāßhš¶‹n°kPŽ4.ŁÜ1Ō’µŽõęæ ,/<=a}eŖį"2»¦ö9-ӟƩO¹¢ŲōCÄŗ6µmy¢Ū­œ—ŠS®F{ž5į3Żj­w‰‚ķ#rńĒŠÕ— Ojæˆōė¶šķe” ÷W½{ĶæĮż+OŌį#Ÿzh×»#©Č]ŽŌµįĖÄŠĖ§\‘*čżįļ‘Ž»Øü_kksJépÄ“Į?ćAœŃŠuź³[˦ź $ĘAœ©'hķśT~>ƒXŌōŌO·ł"UUH @äŸsA9ƒĆOˆš>¶śZŻŚ•0]nBAé_U|`ų£c}ā- Wš½¤ßŲ—2¹åO>“0Zž?ć/Ž+ŸL†ŅßKŽķV?/d„‚ ž¹Į’ ń‹mSU½ž8„{››r 3É!fÜOžĆšĪQ7Q/Łų[’KÆģ ¤ReIAł‰źAükŽ|;āķZÖhöM:ā>_9Į<~U*rGńćxø×“ėYdh.A (1\ņ3Ÿ\óWbń\ ‹wz©&S¤·ĒzÖ4ūŅcRŻģõ+T“Fø *æĪcēiōžuŃJŗÕ³Ūß]«ĶsŁ)łŠö?Ź“ädņ»ž›/‹Æ|A„ĖH÷³Ø cʜwż+žŅā-0ŚŹ%~9õØ-+āßßžŠIRKŪ‘Hå—ŠW›bb5 I¢¹‡‰ceĮ” Ɲ{N·¾Š+øīa‘&MŁ>¾œWé„–įļxJßEø·]ZĀU- ĪŒ`ĄV–ŅąŃšž©šź'YŌt«ēŗ…ģŖd<ŖēŠń+ÆjPj—PĮŅ"6ås›éG5¶=WLk ļ› ]ä’hĀģóOø5»šėC޵{ik+@Ŗ įI!Āīö5.C±čē„ōķA'²æĪĘ^29ĻcŠó$š± nŌ¤ 42;Gņķ޼ŠĪRčD˜š6½ogtĒĖs"6ŽAÆW¶ńŠ&‹4Øyc”( ņXƒĒéSDĻ;ųy§x‡žö¾—ku-•Ó3ŹŃēž/å_¬~ŚEe-õ³yŻńŽ“ Łž‰āķ6ŚļKž{i<ˆWhҾń’„ģõm;U7³}†h’B‚DįˆĻŽ*\¬rJžš Āėā)µ/ėšł3f9^/ŗ\ēväĪ¤ŸĆ·ßüg«xbņŁo“¹2‘Ē2«Ē"õł^8’9©U;‹“±Āk֞²‚y.ŃmāŻŗ8ßīŖäŃqć .ĆD†m&ī6øčsłć¦+DieØųęßO—ķz^Żļ’]~øžĻšĻ‡¾#ü2šĪŗ—l·Vź-ÜnĮlyŽ? ŅHהśęĀ&“¹µ{Xī x¤VIxR ‘łŒ×ęG‰|k£ėš½›Å­öētǐ’F?ęÖM>éŚ³A1Ś:`‚kĪgŖ¶«gPZI#GŹØ'µ_!,ś£ĮšiŽ•”źö¶Ö¶³@Ŗ]ćǘĢ9Żü«ę’Žž ŅüX÷Äv2.µ™ē¶9•zƒśTX®n‡ēµ£[)œDЧq-·×޼ĘKHćøŽ#Ģ™#>“‘ķ_~ ĀÆ+j7gŅęøDtc€ĻņÆŌ[6‡PX%Šā†HÄČPä2•neršrB¬¬¤ ģ­|IūXü:ūʗńÚ,¶¶—PmÅ£Ü?ˆ(éõ¬Å©ņ+(;бVĒ@q_`ü׬¼qąmKįėR“Cö?“ø#’÷ć·’®”¶7ŒŗŸz’Į(?i=_öfųłĄĻź7Q|6ńk5­˜Ż¶;K¶n=3ž•żO^E%¼÷6RæžŹÜ7÷‡PĆō5•Nēdöģ½ń å¹¾š¹;]E*n†I[ØēŒžŸ•}1?ƋYRkkƒöhäócG?ź›9Č5Ļ.ć”n=ŸšpGģT’~č¶ĆM8j~+šŒFĻÄö–ąfóLn²ąrZ2ğöNz ž&|Gb¶w éeäӘy‘ʬJyźy©Ć+^6Ņ’žæĪZīqĮÕ¾PIą‚*eR6'k^ĮR6+IW-Ó>ܚ¢§tıł#ėA<źß1FĄąJafŚ]F=E"E%¶±?Ź­Ę<ČĀņ¼’h5E‘&Ż«ŲxÕ~9?|Ÿqé’Ö¦tSgią_‰^,ų%ńĄæ>ܶ›ć ßÅØŪ¼yāoŽB}U”° õͧ?ģ5ūAųGöØżž¼ ń»Ā‚ÜiśĶŒ3ŻŚ1ģnJ 辌 ūŒō4ŖCŻ:OŖµ› f“xU@—ŖW†ų«KMSMŸĖUpĮ_¼?­y5c©I˜~-šü>ń·ˆt­NÅO‡ušn,wˆāœpB·c‘œwę¾ż¬ž Ł|^ųi«X>žā .)F{nÄz•&²Š±sGņIćæ]xÅś’„5O8\[ŹĶ:m2”<~•ēw_! ¤§żžÆF”Ž ś)ŸŲ¼DēŽßZg’ŗ<į×5Ōq1»Qt‘d‘Qåfp “ʃhģH²ØĖœ§õ«bÉóÓt c$ŁĢŪIüźŌ2łn!+õ Ž µv—R,vrĖķ¤‰um±¶āTmĄœsŚæŗŸų&7ķµsūQ~Ź~ńõ—’’<‰a¬X‰³5Ä1ą=žeĄn0iŗæ‡5+YĀŪ“s”P@ցjji:A²xn¦+øšAė]œ‹Ā"śŌ åē76EÕŻŁKuĒjÓ±šKŻÖ±¾d’*ä.ģ."æ–&bœœ~5%½¬Š£åø'9ō ‡1eø+ E;{dÓ®J®˜š:“9’‘» €FrBžõ^|©Ź°ĒĆŚÅÜÜD3Ø,¬ĖQɦ¦Ēp¬u PQTŚĮ3oŪ…_sŠPn—B"do(F›?¼;՘,ĻĪ@ßĪh4TČÆnŗøÄ1Øėަ¾’ųū)übųń~!š¾&›įÖQ$ڤŹBDI_Ö¢f‘¦·?n~~Å?ž Ūé×ÖDx£Åź©,×W,Š$ļ³>ŸJūĖMѬ ÷ńA Ąī!Fџ`+’rŃM 2Ě}»,$ćv:WA§YŚZŪ‰&Ś÷óŲÖ.}€ø×i€ū‚ŗœ½ź½Ī©ęFL¤(óØ‚Ōµ”Iďå^māXč`ŽÉv’Ui÷<Ē? ‡L½Ō$Ōm-l¢¤i^@6ØōÉ5ų’ńļöżŠ4->īŅ «(ēÅܒČ?ŗ‹œ~•ŁJ•ĶÄ?Ÿµßğź—6śD±iŚ;’ ²9i“œxā¾G‡P¹[©ī>Ów<Ó>éZI o?z“ą’0«VĀ_Ģ]b‚ųķŽ²¤*FkCĪ©PXŌ \.FsŅ“ćŽ=Ŗ €żiœĶš6öfi,g=«”³³xī6„2¦žŸĆÜž2v.1¹ģß >üDųÓ®éŽųeį]KÄZ•́C,M²<¹Ę G’²Oü7AšüzoŽ~<µ·ˆõåø†ōXĶņ¤8ØO­rT©c²?~>ü?š‡“ė}Įž±šÅŒG! @„øļŠōv¶·‰Ūģą+ēžÕēŌ©s¢1±­o*aĪZ¬*ē9Ķd™„@Vf¢Č!żk94 NåH“ȤU‘Ī>•%ÕÜ6)åå6tę³nĘŃÜću-E®ƒ-«~ÅO5óÄŽžųx\ųŸS„ø$wŒ··éM]Ģ¶§ˆü_֋š’ķ6—$„dĮĆ 8!yÉÆ…å·ŸS¼¼½Ō® żüĪY„”–<öé]1ó£bkäe\gÜV„"sZ¹"-Śi÷2Héo >yā½@ųu©ß)’ė䃯#šĶɋN§­hŠ/)RŽ'n™Ē½ÓHš¼¶ŽL¢1³”ē‘RD™ßŚh•އkÆU=뢂(JŖL¼n”Y›}¼L!$ ń›ox–Üé·Ŗ·i‘‰ĮOoz”‘źQ¦dGulē?JÖkĄ\$ŸZ Š’²+†ž8¤œČØ_ćƒÅ&ģ%āöI²„Ün`ž}ø©\Éqøø=TŠĮtKiV3“zzPC™×Ś_C p¢“-ØķNæ[yó=¤éę óA18oš)ĄŚOU "ņŁy¹>½(!meėŚ£l»€OZ˜Ś®Ł@8ĖW? R}©É|#ß”  ^[¶÷Ē”ķJ#”üĄņ(äQ¶TČÄ{ÕūI¢’ź yŻ!f`·zõķ F7ßč—d=ø®wX҆—w%‹1u®Gj å.‡ ~°G8ØR88aЊóiNŅ„Ę.60Ü[¶k9£H®i/ö³4SČ&ą)«Ųģµ/ x—Ā0x^htŪčŖĻ·–>õŽøj~üašĒŲ&øū ŃĻHSĪ@ļ_-Ühz‹ģī¼7}–²ĻEęFvĒ8ćü(5”u?<õ’ ŻxGÄŗ–ŠšæŲa.[%€źq]¦‡¦¶„dĮ™‘€[ŒÖrHŽN‡-7ĆéeŌfŌZīŽKuX1‚O®k±Ń.įÓwYĖW3Œ2W4ķŠŽŃkTÕ絓›ģQ ząµIį‹ĘæÓķõ¤2\n;ŽĀ£ƒĶr³¦1;˜[VŌ\ÜiOjJĮ“#æµmxkā§ÄMĘ:OŠōØķlˆdiÕ0{`7׎·§#:KsķKylõT‚ā(6‚ŠY{t©®mtŃkŗ&g ”žō)LóźBĻCŠkØmÖEĻė:ī;KųL{]'ļź+ ć–å}"ęÖÅ抳ø$ķŻŽ­^[ł„ŽŃ@Ī[§j,d£Ōń’ˆ ŗń†=„1OqĖ q“3ż+ā?±ź~v£§źÖ‚ ›w pĶķŸĀ¹jD3¬ÓPÓē‘&RŠ3å?vŗ)nļ Ź–‹Ź¶+€sŠ×/5™Żb+źī{=ZĖUK-RŅO2)—ę+ųwÆæ¾|J·ń‡ōė-~õē×įA ¶0=»UĘ`ŻĻ³>x‘ ¾M?{˜‡Ķ’Ü0ōę¾ĘŅ.,n#‰ąÉŹäW\$qŌ=³JŃ0ė,“‡…€<Ž•ŅĶ ˆČ– …棊ād·:¤Ķllę;ʟ¼;×ēOmØÉę‰&9ŖŽs„¼ŗ³XDˆ'g§rku°‘‚cÜĒCS=‰åÖęeö°gB*¼ä{W4¾Z™rŽĆµbQƵ¤ 1ö35Ę~FĻśšµm·[䈳 ōĶ2¬m\X“q«8ĘxĘ3U ³±ńż‘ æŽE;—b9‘J²²{śW5rmVW\«·Æ½IfKEĢŪzĪØ3#ķ##Š›6"(“fU95”#eKB Ŗ£¹R+©#pÅ0¹ōØīīs^qD‹„ŗ­¼ŹžbŖ2óČé^cćĖȖh,ŒAÕ2CėRjq'Cv­ućŽ³bšž¤”™®¤XÕ³Čē2ĄĒ×ķXZ“r8`9äg5ÉiIHČ&Ų ą®x¬ŚsRӚ"1&čĮÉ*1XRJÄŃĘĢ[’GR*©›CbKä—{,ŽŽ•ŌxWÄ·:-Ō6×OqslĻ“’GŌÕó"ÜO¢ōżNŚśń:‘׎ŗ[¹įɔ¶=ńLå©FøiĆRł×›ų»H¼»‚]®ä’WØ Ąń‰ōϳwX„眊é¬ēŽ =ķZœäq‚)3½d‘g &7Luƒ=˜‘ «łĆųqXKss>f’DkpTŗ÷ÅfĮ£Ž—6ž1ŌTŒ×:l×vķщ#ļĒJ‚ PÓŌ$“-Ädåx?(=)4 ]6ąL«,Å8Ę;WQ}4”€–`x ÓÅī™u2Avē Ą¼¬b5U §9śŠZ‘‡öT»‘‹ł£”éĶhŁčm6āĢÉļ@ÜĶh4;°#[{ˆ„›$1]\:¬ ŲĶē2vž4ˆ1#•­ŚE0²œyļUīmī§Śą˜Ć~48“#ēHš5(¤6OÆ5Ź^i·VņyŹ>äu¤tŚC»`N‚]£žj¶¤ęeUmģz ŹKPd6fiU‰VP§5Żi\†*žłˆČĄéP`ŁVžĻĶI uI:|¢¹BYlWÉŻ¹A‡$šŽ*Ā0b™ļHxœ‡^k}Äś„±H„Šö#ÆŅ¶äfŅ9¢%'·d‰³»"ƒc—F’ cұ’ŠiŲč“ė*“Ń@&Ł’r: čnn­b±M‹ĶĘAćÖ°±“es…øÖ›ķSŒģAø¼ķYŗ”×WĀmH½p{{RJĮĢŻ&Äy{,mŒaz“]T]*.L2 ŽäÕØÜ®`źÖ“£«“ū¶ōžåڳĪŅ;¶Šr3޵Œl2ķµ®Æq dH‚ń¹N§Ö·tėK9u ©;A# ŖG9Æ[ŲČĶ•™vē#ł×Śk¬RI1#×ø¬åH²9ū؄2«Čv±ūµÆ¦…1†BĻĪįéģiØŲŠĶÕfŌbßöw’<Ž^3ā ųž\ÜŽŪ[j„wI$MŠŲēŌw®ˆĘĘŹ=Ļ<‰U$o,:cå*Ą‚æPk«Ó¼G-œ‘Įwcž¦›DŹ'UįåÕ¦ŗ{ÕÖ.# c·éœf¾Ŗ¶×­įӐIä³ķąŌJŒŗČö·¢YćY[sdpßZģµ’ŲéŽÓōėukkųÉŁ'PÄ’ś«ŲPīyÓgK­A©Ä—zŒ‚IĄäÆtų©iĘé ń՝²łų†7 wägJЁæ“…-ļŠō‹ż* ‘`%U/n„«m^ 'µfŚj—zVœ#ó£tn/ó-ęŠę„‘®Æši6zŲÖ¬AgłŻz‘޳™ŒŒ–½±Šé-¦’+•ä‘Ūč‘éöŗŽš4ł`»Isž±_pG\ÖKĢV:ŸųOž=E5ń^Ū«ł‹č ōé~)i¾u¢ :€³!’>½M0±µįmzĻÅZ„ʖ/bT™ŪŸå_|vųeā$ńF„įėÖlɧ€Ue9ĘćĒ5q•‡³¹ķ?±ß€uĖ=_Z¾ń\(lę+äF °wŪżIūW­ų—Ęś\Zūi2L(&1ƒ!Ū†F?/Ī“rW-ĻROųś×Ćšiw’øÓū£\ŖväW–ĖńK@ń®”%žd°Ė …m‘•ŪõĻRjdś"˜õ}7OšöØn”Į*FͼBńß·JłZćÄzr_]ˆ£>Yc°>sĶDcqXČmVĘk—ŒNłf?€Æ£ü#šžmZßNŌį7¶ŅÄźŃÉŚĘ“а{3ڵėo¦č“ißhUoߤ«ž“/r}Nk¦šļ¾ü5”Eā½%³īęc`{.=Ķ(žI'xæ]š ¾6ŌgšĢO‡q+OmęcęĻ`?„iMā(„³·‰å<  :Tū>ʱR{¬ŪųIM1£·I‘ņĘø=Ž:×+į’hŠėĒ{‘ĘøśŅpd{W±śį?é ks¢Ļ•¬J‚Ć263’©®ĒÄ~)µÖma°¹Óf“P ˜Ž8ÉsÓb¹ē}E6|ÕńRÓĘó¬piÖ,"ŒmŽ&3œž#=ėį z’ÄZ'‰ķćŌ#]‰Ź©ČąšHśV”Q¢ģś_c¹¹‚+É”-ĎĄõõ®xÖébž8Ł“Ģą1ūąt$WMS±ōŸ€M­ö‰:^éV—muĆm Č}TöƔ¾ ü>ń#¹¼‚Ó̱a…†4Ć{ŸCXŹ6aČxö©„K,óŁ>ÖźŻ‡˜¤m+õõ«:Œ5=5”Š^ł–K$epY¾½śSƒčTcc×¼?„XųŗÖx§¾“Óę »Ģa€µ7Əa ]M§ź“ĘO›5Ą6µfŅmüł„%•ćp’&³“φ׺g‹žÖóÉä¦a{pr£ż¬zÖ2zŠČōßÉ ģŃŲy+tHŽ$‘A½Nxüėä_|>ńN›­jöšõŒ°FģZ9T’z•Ē„g\ĮœOĆÆŚčŚźµ²}²2ĢĢ’ņ9ĪrkÉ|OmżµāMKNŅ¢ßDĒ÷*2d¾:ⶌŗ0‰Ś|#¼Ń4»Éģµ= d½lšhÉ;Įä©ōĄ?„{’Œńž—-ž±Žš+Ė6ŹåŹÜżį]~ļMC»“ø‹aŹnÉö Ž2±Żų{H¹`—T¶Ęóę@ym¹®†? h6ŚŽ”u§Cįš ”ūV…miØĖ6käÅ3ģ3éšįüY§®‰ż¤š„—²ØŚ1ĄSėžŌĶŠņū?źŽ5ŗķlŽśtl2\c®k”ŌüŖŁĒ …ū=¤Ž”—ęćż:PR«įM_ “‘Ā@G,äg!˜÷­o xƒÄŅx’śÓZ“…tt?'—Ģ>§Š§&W!ėz-äŗ~ “ŪŃ? øążk¶Ō¼;ā\.±„ÜÜi°ĄU„ dNĄŸj’%Ÿžj¶Ÿ |=ā8ø»Üs:š  pÄtļÅy%ŌńĻĀ=KPŗøMųh”#’2ÜĘŒžō“ šoŲż ĪĶ,^fĶĮ9lwÕśWš«ĆWZG‚ōɚhē·Ć¼J£ę\sƒļW},3ä?xŖ kĒÄL×HČ,ŁłsžŸZŚāĪ#gŖ<ŖĮ[¾=}jF‘ä¾*Ō¼ū·HXīĢ|sX ¼wÆųāEµÖ%Ģ’ ›wė)cÓéƒÖƒ{­:wĄ»’čv:Ķ–£k”k3E¼ĮvÅB“Šuł«Å<š»ā瀒ēNŌō>öĮ‘dF;Gøē5<§4—sę›Ō”Ę×°‹9˜Ćn6°ćłÕĘųµŪÜø‚`ɁćhŒlgwŠō7…ž„öā(ŻyīTM¾Y@9[WéG¼C£ųÆMµ¼·ŗh­üšŅü„€\ńļZņv,ņ ¾6éqüJµšŽ§¬ŚXCp£ŹÜCdŽOLW[ńSóhĶs<<[ČÆŻ–²”AÄńæ艤x“OÕ|=5œ÷K(óā'"N˜Čõ®÷āēĀtńN“i¬:µøYš0Āńõż+'ŚÜüßńLk¹¹Ņ5øgµ{I„nd;CóĮĒČųĆI›ĖŒivŪrƒĖå±Ūœf¶ŽÅ.|āYtėKūĶ)ēÓL‰1!õ?į_ožČšżæƒnõ[=JāčiWåłlˆ[ŒķœU6#ō{ڽŽ‘įØu»‚ņŽ@‘Ił8÷Ɨn5ļ jŗŚE­Goyg)1³ŒQź # S})ńēģłöK&Ō|)>§rĢKĒlõ‘p$Ž•ńČóķµż.TšŚī LrE ŚĖjq•‚)õ2fńöZ½µ“®-Š”ĪdŠöĻ^=ŻĘŸŻĒüIā8q)ČśWDZź\“±ökč“ $7…5¢Xö˜äŒī\™c=+M,Ƶ :o·ĶėFQš¼ŒĪdŁģ|}ńöpńŃüAā]P³i4«mĮr;ńé_Ÿ×V—ŃNš]Āāįd˜ŚĆ®+#Ŗ ©å¢Å-·Łī w|Ć<ū׎æ³WÄĖwL›@ՌQŻYTĻVLgņ=©Ų©l}T“¼¤Į`xɦėŚæ4}KĀӒc»R½p”€8’ ,`ĻČ_ųj÷Į¾ Ōté’K»yZ6R~eŒ“Ÿz±įx³EńAŁn£kŒēīt<Ā‘½3뿊sgĆæ¼-ØF%†å5IķŠ‘m(pĄcŌ`WõĻūžŌoķoū9xwĘÆieoć, -`ÄćędŻŽ£$dҦQŠķ¤ī}§š’Đųg[µÕ˜nep¹z×é%ߏtżWĆÖ·rbi@øū§Ķ=©šļķ§xĆĄvķā‹YīŹĪJ®}@©ŒÕģaR'Ęŗ…“šH|Ō /ń€z†vˆĻ"±8°5×]\óŖ“36Ō`\s޳Ž%BKqßńŖ9Č6¦ā”·dóR(;HĄŚ;Š8ī"K÷£Ęcķõ©¶³ TrŸ6Iõ Ł2wŖp7rxįj[|’©“m9ō¦`śam® –ŅF"÷ż ’Į¾·]÷ĄoZ’ģ£ć[Ł|?ńT_jšŲ¼›äŠüpЦNńĪ;ėTŻō;#$r2j2ŽŲĒp𔙯*}Į®NöŪlĶu€aq†ā¼Śč¾m,|ēń«Ą6ž#šÖ§”NŖØĆķ–(­å^x=³Ļłæ®+5¶ŖćÖ-ä6—š80`Cü±\·čK‘üūĮP?f ‹ zÓā'†­U`dŒŪĘhĻ'Ąöķ_‰OQŻ~eb¤{ƒ‚+ŖŒŗU‰FīV !>B>o­E ŗļŪēźG­wGc‘琔99@AÅDV=Š¢0Ū†AøÖ'ŗƒįĻ‹³¤k‘C [x¤b6Ķ"ž 3ķš‰#¶™żśü0½šž›:ü5Ónb6WHu}qāTo™–6īyĒŌ śBŚ7kH.šĖŚŁėzį© lV¾¾fcŗˆ‹y†7vƗækĻ‚ŗWƟ„­¼Ömń7‡ą–ę†ūm”_ŽB}¶€}ŠZē’ŠøŸēµūJü#›ö~ųŁāO A§j įMJFæŅ ūæ1%āō+Ļ•ę—Q²8HŲ|įł?…rÕz^ÖŪMÕ7”G†ĀķČ=}ą?&£hš½³ZŻ$ƒž$\W•ˆZÜŚœĻ^–žź 9®ć|įą:WĶżÕ¶¬uK7†Źõ¤ ²ŒžøÅgKs„ģ}ą’ŪųƒĀ–S·[ČWĖ•ņĶżśÕé¹¶„—Iüœōėߤ“<ŹēŖheīćxl/FŪ÷Ŗ—ˆn]Z æĖŠģŠŠņ䜘QźS¬J$ó=­Sh¼ĖŸ“•ʼō®“.vh%ŗß\ŖF£Ź;WRś@Z)•.Tcļj #+™6†«¦Ļ4OņIĘ1Ņ·ē›ūI#Vc¼õö bC¤­™m›U½øę”]]Ć HYW‘“Ö€2u;ɧBČä)<€yØōū©’@…¤Ų “Ö€:?·õˆ¤7;R$L³¤°ŖøļŠé.ćÓ® hXüü`Ō~5Č_l UNŅ( ÅŁcĪp=j”Nīå\–P8Ē —N&Ū†oŗ;š[Ă(Zé6Ž2ÜP8ĘĆ4ĶMv²²“ĻķųVĢ—ČŁdž¢–ŵ¬ÖģŽaWĘp{W3%¬įĪJgØh Zٚ&tMߚƟ/ĶüčõDK „g=@ėT Žg"BĆw|gō #®Ņ4Ėā±Ćʙ·ÓÖ“5Ķ-ō°Ģ„ŒPtÅ“0\;ø*vŽ™ō®—ĄŽ ńŸÄĶNĒAų{¢]ėŚ¤³slRĪ2ʧ™ĻŲ’€šM=7B~"ųėyi®ėżŌÓ"OÜĘ!ÖæWüį ŲƦivš£f·]ˆGøļÅsŌō*RčuÅo¢=:Ēøé]~‰įō—3_‚ßģW,ßC3NķćŅXĒ–õ¹GXIŌż”oāĶf8ŗ¢A½ZLæ§­rŚæ‰#Ļ2Ŗ/#œNʐSĮųNĒJņāT’G‰w©pݳ־¤¶·¶X—›$œę¼ŹµŲÄXķn ĮĆžėÓŅ·V(Ę9Ē>õŹŲäō&Āž*8DŹ’7'§½#}ŻNkń·oj »•¶{ŠkN8ŪK²HRrģ:sҼÓĒmü-kqÆŽ„„Ŗ)b\ąž8™×Ÿ™æoi—Z_Ć%iPŃ<Ņ&1ė’9ü+óÓÄ^5ńgu6ÖäĆĖ9ņXbøżGF`L‘3ī;Š#–Ž[ŹU•–?_ZÕÓē-p‚rvä“@™Šė1Ś4)"¬#Ø5ę’} ČŹN=}Ø'œœ@,$'=TՋu—k Ž”[ŗˆ¼o²ąBų=‹Ś°tŁīķ'a9RüēżŖŌkؚM΁õÅf\Ip—µ¹ĶžpŁź(ye”(NÖõ5rŚÖ+‘óŖ¶Ž™ žÉą‹ˆPٲąķĮ=ŖÆa1x ŹG‰Ž~ņV ½Ŗ8²!?/lt V/é’Gæä­Ųīn4¹ °¶S”}ź ¢¬ˆēÖą¹“ĢŖĆ®z±. ÓZHc‘wĄĻzeEUÆxĖ_µZęāŚęr¹äc½nYÜÉ.AĒPG€:]6ę(åč1ŻOqZ7[ÄåāaäõśP±-¤„]$SÓ<ÖģŃ闶mŔG$¬›˜}ÓėAQ••¼Yįé4ĖŁS.cź éųWž¤o;<,9黌·;)Čóæxm^ !a( Ƈ¼W¢Ļ¢j±źČūVNJƒœē­ä́ޔīxļÅ’‡ŗ_‹t8üQ¦A/ü$–Œ]•8ó†2”‘•CŲžüA“’Š%“ŗSˆ“vȽćÆų׳X^YĪåušąķaŽkŃ¢yõ7ŠćgŠmMōĶespš.¾g;~ž•ģ/m¼Ė“šā»Ž9>¤:}é-yæ?Ā}*Œ×ęĶ絆fuéרō¦‘} ö·>Mʆ›Ė,0:W€ü_šżµ„‡U²ŠBҲ—s“ß…X”ŸCēŻ*;}JüK؈­Č|§Ģƒ<ąīu?Gg§Fmõ'Õt»‰[yŹį”Ültõ±*>y×ō ż#QeņRāŻœœćŒVV­sgöVŹxēLP>Ty•äs4’:8 Œž5ƒöAft«ĆŽG„sŒŠ)įFfäńšŅM\ē`„IŲ7LP†tŽŌl/ –ŪP­¤mĮ0[r=:īŻ×2Ū(ćŽE2/müė"·æ5-ĶšĀĪŽ$ sĒ­Y‹^Ü£AĻL(ā±.R{…SĖCĻ4¶:4Ä;“‘ <Ž™-ļ؁„˜ĢyėžhÖ×s+¬±¹ q]ݧˆ®ć‰‘ŠøøėL:ūQ3Žxžb2vŒ ‘®"³ tļ@_l̤‡cŪ“ŻUžśÖ4‰6„<ń֑§9•§ÅsmN¼;VŠXŁd3*»c­)lK‘‡>č¤A,䊳qdŒ#‘ŠzˆŲj&4^!“Ļdyŗž„õ«·rÉØBčW zö­Q|ØēRõ“WFKrł$r:Õ«^×V¾A pvۜÕMóĆ}½A¹—Žõ4é-Ō,®ÅÉn•£ūĖuV“bńp;Öv «q'–Gąp0+DiŲ‹ģ–ŅÄUēRÄćä{ÖMŻĪ›£#E-Ā*ī=Ŗ£Hj-°ń>Ÿ°˜™“ų5µ>¹ku u‘¼×B¢o G=w«j2A*$Ļ$@ĻQ^'ŖxŅēO½0Ķ<ķ ²Ąķ#ŅŽTl¢užń‡ö‹¢"„rŲ<õÆFøŅ’śīNAōؒDJ':śEģ·§ē3õ¬ĶA¦€ŗÅ’pć„Ģ¹Qä÷ŗ•ü:’ÅqŻĀd¶"@ēŚ½›CЧ»“C1n#ØĮ5|ˆŅ1Ō¹©xrxĪL-Ē­b5€h¤±§cSĢ|Cą»k×fhįµŗŻžµS‘Ÿ„qcįuĖ\C#LģPĮĆƒžmŸIxkĀŚ~™jEݬ3|øéŸĘ›}įM.ź6»‚īęŚēs ųQéĒJ)ģęæĆŚØh’"\ŁEzæ+”o©ó^āæ­īrøę‚@«“ŁĻAų~µėsz8?|1Õu BFfżÓ gś×}yį[–ŽČ߯ŪjöÖŲCś7~•DMŲķ›; \„GmJŽóćūE֞_ķ Æ"Ÿ½Zéį}sHŃ®ųÉrŅæļ#gĀHč=…!øō>ėżžuƇóų.ŽĶšĖKŽw¹2ŒÉ! ż1_šß­-$ńÖŖÖ>"Šm<Ż<Š\ ܃ųRmŽäø3źƒ’?į9š‘ѼnßmӚŽH¢ŗ\ØF<©ö<+Źą…ļĀn}Y.ēŗ¶”2ĀĶĢxüz‘B›½Œ¹^§+« GZ·ŗ†ĆĢy¤ł0ČpHā¾eńĒĀψZ¼-Ć×öń8e;dL2µÖ­.“éõ ›@Ŗ…×ę|u+ž{RqøłQ½āß‹Ž šņk1ßi­uŖZ1łp§ŗĆÅ~~ų«Å>ńĘ»ØI‘kkØ:ŽP+Žxėéżjc ¢`xoĮšn£ā;Zx­d“.?™ōÆp—į~Ÿ¤],÷Wßi]‡ä9õ«„cµ“Ō£Še¶].ģIœ0)Žƒ ę½ƒįģ-ń?Q‡dyX K #ŹĖgµc"ŗßæg{›õ/OcsāxŸlXķš_„~rjžÕķÆZ4ÓęŠl;£8Œś~µF©ßC×~érjM§Ķg¶ä|Õą:āŪOŗƒÅVqNжļ|\ä•tƒ?B~xŅ×ƓZ.{h²”3©čkŚu;|ÖzĢ –Øź\Ž$ČČĮüæZĪTȑå?|Y’ ęßK×gš ķåR~T.¹łzpkē/|j¶ń-”ŗQÓ"į6šØ1ҳTŒœJ’üq¦ė„¼Z†“okó¢}ķ6sœĖó®gö€ųjžų‰¢üIš“–£^40^ģłVŽ6ć;Õņ;Ž:3Öüi§|7š’€ü5ÆŲA šäMåŻO nŽńĒ^õĀK‡«é>/—DM5’³¦—+"±azmģ?Nkß¼Cįßų'OÓµmCK½Ō-5ešÜš8V‘Ē4š+”ė>¾•ā[;CXK=Ś&0žļę'ä}‹T ö’"ø½CĀ~!× ’VšÖ+µķéņLži\KÕ¼ši÷v„®HœœÆ­vņé2é‹$ĶoFKc;}©Ō¹ČŚųĀ×LŌ‰d[“ŽOOʽ.×āö©¢“ך< gYŠA•ĒøĒ4 żMĻüU»ń‡ĆY|!fóŪŽ™šIqĢm‘Œb©h’üŖü1åŽÆwk­Å)C¶#“Œ6qŌņ(°¹¬yŸĆoųH#ø{MGA‘‰Štńéõ+×¢ų󒗃Ƽ){„];#—†čeB@õ4čłņK»Z÷]±IÖ©<éVSÓ#·½W×6¬”Ģ@d…źi7b”¬bčģ²Éę%£ÜlĻ#?ZõĻ ŪųffÓWžÉŽĖV@&"KŸ]ßŅ©"„>ĒčæĆ掶B4»ū<Ü[[ł‹ęøµAą×’­^ƒ¤xĖß®$·¼Ō¬-eyJ4’€銮Cž}ĻoŚįźxSÄ#PšõĢZ–”ęD‘ ?"rNćž{זųÄwqhŸŁwĻ ¤7,Wæ¦zōØ"ż óxKńUĢĪØéq’£žäWÖß¼E«hh¾ń“›ōū8³¹Q€ĄžŒ•¤gm cęxĻķš_ZšēŽ“ÆiWņŻųQ>uƕ/ĻS“’zcÓŽŗ»Ž’Eį /ź%§øĮa#¶HĄ¦„u©ŖGšÓć]‡…üy¦E­@ßŲ—S*Ė3« g–éĻū)äé~'Ńmnt“‹ģf RD;„£žĻ„O.„³āß|1Óį6’ĆÄŽc¦] ßlŽ0ĮG”÷ļ_üKš-×Ć?¤6ĒSÓ§fxÕ×ę:ŒŸCĒ$Ž“ų°÷¾Ō|9©éV0™YFš£+Ńą}h.ę9>i#L–LpG¾kžĶō&’×MŌ…Ä;vG,y—·^ō'`=kąÖ¹ńĻ\@ogøŃŖM‡‰é€1Īkķ³} b>‘ĘHĶ v)OotDńŪÅöĒthŃÉmĆżkņOāuå·‰µč/t«½2HnYxö䌞†¦ŚšS”›ćŪX`ßho󊱿kįżæėį~Τ•ē#Ņ‘½3ꯀ¾%“\šīÆšŅļģĢŪó Ź’3 ,WŻ?šLŚ2Łwö²¾ų[ā—ĆM½ČžB;£­Ļ©vVŌģ§£?®ėķŚŹį’ŻĀĻ ASČ ūW“x+[žīĘ;.Ī™8Ī3Šā؍OØt‹m;ā‚5æj"Žx®`hŠ?;ežķČü’ĮS’b­N-7şü3”›xNćž'ђ ¶mœ8Ē\u®G¤”‰”OęgÅZaW‚īŽÜż’Qøœä)ōϵp¾D‰.ĀI@^…7Šą« I¦TŸæō¬É33ˆĢƒpõ=jqņōTßI,e‚G sŒc?z‚ žr‚W,޽±ŽÆ[żŃęcüM±4Di0ŚXĻ#Ņ– e›~”[óŖ~ø8«v7ś®‹Ŗh¾.šÅŪiž,ҧKė Š¤›gƒõ÷Ę(: Ļōu’‚ZžŲ²žŁ_³üzķ„Ļ­Gd¶ZäPĶ™mo#Id=ąćЊż%—O™`x'Fū¤w®LDN”Ž_ŅN”e5“¦gPLykņ’ć…®ü-āń®ÜYI?†uū5ć!Į·œgktśāø$‡|­ńkĄ:'ğ‡Ś·„5Xć{»Hf–ĘI—9C’ÉĒ$÷">]|$ų“¬h*¦—;“֘M Ē"µ§Ų‰-–ŁŻŲ‚ĮäŠĪYŠ»$yČldśW£Lā’ŌÆ4;|֐Æ×ž”±¤‹į–ÉķZ݇I¶F"VPģx=3ķU‰ū>÷@ŲN£Ø£nŹé˜$qŠl»c&4\œēėA¬BÜ 07„G«Ų6„„ŻŚÅ,]®$·ž3‰!u ‚‡×ŠČK©żžĮ0’jžŌ_±—„n“Z»ŸćĆ)bŽIāKøā±×|iĻŗŸZž…¼5ńJĖÄ>šÄŲ`šö©G|’€¦Ņč ¬Œ:žŽõĻV'B=[Rˆjšz-‹C"ščAŖ–Bę×ģŚƒ!w÷s¦>ņ÷ā¼ź†±‰ü²Įg?b$»¾Öõ XĪ]`}ĆņmįĮ?¾¶Sźx<ą­1¹ž×ÓΘaŽ;øŲÅ2g˜ŲpAü«’j颎Z‚; L—÷č¹ŚˆÖ½Æį§ZŻ#·¾TIŻČź?É®z“Ę²¼#se®i·6ofó»!åÜĻzš‰ŸfŅl¤½±Gŗ²ˆīT wļ\t£®¦Žg#š³Ē2č.ÓtĖ×_ģ¶į² ?Ø’=kī}6UŽTž ČeÜs‘^ż(hqWgµč~"•¢¬6”ō­SMœ øE’[vņ8Zé<Ł#œŽĆęf‘ŌĘ:c­Wš Ś’#“ŲÖ±—C>VkčšY&B¬ŹĢkrāIģö“¹ŃIźz՚A$vńk¶Ép!Kyv€ĮNAĄžu¾—{ž2‡aźĒ„Z…įó÷OŠScfkvWe=ĒhtżćF’'9"µąbnC÷~”v%kß³®ö;[=+ė—lKDä’zc  žthĆ©É, wÄó“ŹŌ‘:Ė;—ʁs•&ŒČbžøŌųķŒa‚śP EŻ”°F}1ĮØeGh¤M„möéAf]¬2 ĘEĮwµnŻŲ9I>Żh"R¶„āāFŸc!#×XźZLZ^A¾0A|˜}(-ž³©@ҿ٠I žĆ޹é&Å{ūP€‚uć>YĖūÕŻĪk˜™Ł>é<ā¦[ ĻXšŖĻm!”Lęŗ]nŃ5T‚ĢFnµ9Ūe“h2ó?eQłV‘ÕLśŸöh’‚zx’↧‰>.ŽGąÆC 2i­Ÿ“Ü!ä? żæųsš‡į÷Ā‹;=;ῆ4ż­Å³Ī!]óz±=A5›™·1ė–Ö–š+ęY½Ļ&“ķģ.Æä.J†I£ö+u‰Õ2—ŠzśŃ©<*ŸŽ©õėXĖp*jڼ7+K ó”dŌז^kr<ģŹĘŁüŁ4‹Œ{ž[ćoŠ:o‡Ńü©ķē˜!9-Óč+įožÖ¾šÜZ³x—Q¾“d•`œŸīķĶoN OĘOŚSž ꎎ[x~Ҳł$ ·9iNz>Oæ!üuńkÅ_nļ&ŌõBÖĘWóßw ĒFÆN…+Ō•‘ęX1"›Ģ`»zSat³·”Éė]Øó*ĢÖ0F!·–‹ĖĒĢøäж4rHŠƒÉ ē$KWŚ0Ąwõ­ōéŻä·Ó½Q¹ÓŪiRH‘Ś$W„„,D›¤•÷E~‚~ĖšNo“‡ˆtŪ|;«xGĀŅF<뻨ŹČžŹ=ė• ”HžŖ?e?ų'_Ā_Ł_ĆVIiį­]ń‹(ŽÉ˜clrCIÆŠM?DŠ`@U#»@p¼ŹÕø@tV·k)Ē“č{WEeŒ©9čkŠR¹©°‚DÜsŽ„S‘žRŲ#±©3™2m)МÕ{¶TEfQ€s“Ś‚bµ8o^hæu óģ|ććėŻnYaiī%µ³Ż»ĢŻŽ‡×ӊˆ¶ĪŗkCåOŒµg‡> Ó-/bÖµÉP‹sk0l69ĻŅæ/>!üfńæÅ[ū¹¼C®źiŅ>čķ·chōcŽŗiÓ,ąāeT…Č8śRŪX¤NTr&ŗTl.ɐ…Ō+?aÖ“4Ż6÷S8ŽŅbrā²”®'¹ķ^ų}ƳĶ‘śa^Éaą8£dH6Ų•“™3=+FšŒ–ńĀŪ|¼Œō®öÖĻģjŪJwQĢö2 žäģ¶ł”ōĒjŌŃ“ č®Ō_£ cüyćŖLĀüDŗv‹s²IA¶9Ćā¹4ńNœŒi/8Įo»V¢ÄuśN£ÜdeqŒƒŌS.tčęßå ·‡z9Y2‘Ž4Ėū ækmüšqŌUƒ3#ĘRV\öĶIœŽžŪÉ–Ųž÷÷§°©[l01sćó IWāų˜Ģ¾j‡ŪĘé\śĄļ ŁĢ«$'‚uÄ“Ŗöp‘-žŌVuõę ķg&˜±KnĬčĒę_„G9Eø×n%=Ez“ć,­“NB;įU±Ž’—p.“Ó£‰ZVTaÓgŌŃŲé^#zÜZ:|½+cW›PÕ6ŒŒnĻZ”Y暘k9Z9‘—©ÅGm$ņ”1’ńžN:PTb(’H „J¹&£ŗ5]ĢOj 2™eFķבėV¤¼¶’ūę‚qü'ųØĢj“Į4FŲg`@ā¼m<1vڤ7·6ņ}‘ž¼ižŗŸ@ēĆŃi6©§ZIo"¦\ƒĮ'Æ^Ļģ·! ¹Į’dŅ™Ų[]JśóŽ“ł.1ó{ŠI‡ŖĄÖéēA1’wĒČkoa£ÜI§9žÖ 6ģ}s×½|Eń7ƶ¾ńdšĘ›ŚA} ódØ`8śf³åeūC’Ōµ”’ßĖVe™Fw‡ŚøļźlzÄ·„ .WĆ¹śÕFuF|A‡Āz6£‰|ŖłöÄ6¹lžø÷Ļ’]zG…5‹«Ė.’īBłdüĄ‘ŲTT§”q«}ĻPšĶ–—q ķ»ji—Ū<äI7ŽąSą?Ł÷2 ®Ć.F+‚K[AŖųŽūGŌmļķaY‘ēhˆ^3’믭¼#¬Ūx§H°ÕģŚįį&õūƎEwŠ9Ŗ£­»Å²•EäŒ×-|Ęó÷L¬G>•ŽpÉt-[ڈ”P²pÜį»WjŽs¼l ‚r@ė[F'>Ć­a&EiX`s[šæ‡lõŪ £µDŻ·9ĪÖ±š:éLųÅ^ń‡õĖūGNš(Q‡”Į9#Mr7ڜ–϶µ-¬`!nŽzt"¼ź°Öē§”Āź_¼Ø®|Š~SĶo¬HŚO“qeŗ]Œ1œg>µ¬„ŃV~Ē>?M[ÄŠ|/ńĖŪ^ŲXĶ.aü+žüąWź Æö‡†54±Õm%č>•Ń•Yõ÷†oōĖŪ[j©ę2Gs^“n[ČEŅ!€®˜īpOr½„®®ÓČd!ā'8#œR^i/(ݐžõ¹ƒ“–ŅĀ#\«(ćµKojn™į(”zh$ČŌ¼?u§†ø÷±#„pWRʒĢĮöd÷č(6KBŖĶg0?é“‹ü9ęµō­SĪfʆĄ>¢ƒ7w&ÄÉ‡Ļź·’C0ˆ\¶ŻĆ©āŖ2±kė£ ³‹€Ž›x ōÆ×/<õ’8I‡Zæh ŪĪo&bĒ® zŻ­Ä[E¼®ŃKŲĶ»ŒŲŽ iA+)R:sަn(™:{RŁ,Ó~É  ėŗ«FSŸ‘‚F†¦…ą!Ē8ąāø6×yŽéQŲ60FA Ł$pz¾‡gĢļms’éQi‘Y•Wē0¬¤µ£ØK§MTY@ÉČÆ?Ō§DYÜ*ĘN~µrG ÖšīEä U7qjį0Ģ3éŅŖ gŽ!Č|æ(ÉĻ­_H“ē¼f3āSŚ…cE>ē;¶…Q˜Ō8äWŖų[Ä÷dB/ ÄxŚÜńZØŲĻwŅÆŅh敯:dó[/©ż$’'ĄčOjfg–ų«X–f;˜mĪAėĵ}JśīedP€Hje°“].küÅ'̃ųaWnü-›Čįä01Ę®y ;mʘ…ßdr3Œm¬™ō¹ćEķūĄr½€ķ<įcZ»³{äHeRPmįp{ä׊ö^Š(Œ3IČ8µä*ČómoĮ·šušE%»1ŻĻ85ÄųJŗŃ-žvv–7å9Ż14Ž/M¾Tl™fFüóō®µgŗ‚Łķf·SĘ‘Č<¬F ¾¼[$cgœt•«˜'tpé¹:ķ=MH‰¬/aRØį{gžÕ¼u+VEXßv}?„PL„bY?³Ž7+&zuÖ$±¬ØLl=Ļ„Œ‰ō"źF%Q\ 1\äWTž¹…›“‚2i–Asaon”®”'*;cŠāļUÄ1¹F0J@r÷Ņ­‹2ÜL‹Ē­PlN„ī܇ø=«)n4ʉ¤AspƵ•“ŸL×S$[c‘€lwž*Ņ;ó¢KūkU&XŅFē­kh֚o’#xó?­Z¹:õ-2 ›¢“½r·W7±‡·VW@=9"«KjC+Śß\@» oǧZĪøŌ 6ę/rKńƒSml#ut”Č‘¶÷ģ3ҼēÅ×(ļŒZ"2s[Ņ•ŽCF]IļLé8ŽüʆZö}å¢EÜķ°Œö¤ŁÆ“;ėHm!*ldÉ zņO‰žµŌģą¹Ņ'–ÓPbG 2ž^•*Jįķ_Ą×4ķA[Vx£r­}1§MP6ÉQ˜60O-NI)™:ÓĘ$j¼5Hiö·ÖģˆQ]T’Oz…+ciڲ<’]3 vńŠ×Wöõµd'k¢qĄķUķ £+šÆ¬ĮØĀ–ß»hĪķ¼ŸĘøiZٚHJ1ČĮ’9Ēs“kyµw•8Č×čŗdiŪ” œąc“)™JW4µ3mņføēž1\tŽRBcIeœšjĶiōGó?„hšv‚mī>׌Źģg ą{žµ…ćŪ™T¼š,ĪīūZtaƒŽåOį^ŏöįø¼_„ų“Āڜ0^ŻiRIµÜ łDsĪĻÜW¾xŹóNŌęI%Ó ·ÕS$²mĆH08śPaV”įŽ9Š“]fhęgŸNÓc@²Ē×ę8Ī?JśĘĘKü-ÓõhÆĒö2Į£±ū­ŽŸĪ†rž6ž,‡Ē·ki ĢM4ĆYł<ēė]®‹&›£_‹˜¬od\ ʶÉßżjŹP:©_c•šż€µ? jĖ0m³Ēq’Tł#=²kēŻĮWŽ’/Gķśf֋Ėfsß•vŠź‚Fæ‡ĆQū6­e!ń=Ž£j°ø²³™”Ž,ž£æaĪEeĖ­ĆMĪSĀ>*‹I·‚īę$¶`ūä2™GņģkÕ¼wūNųāŅŽÓNÓ,5›Ä yŒäćęhŻbžBT£ š}:Tš咁¬ī4Ķh›Ł•<łŻŸqłS’Ų«a£Ūų¢i§Ł Ń7Häå÷Ƽ>jš~œ5µ¶§łldFd}Š0M ę;‰Vž ų©āK}cP°Ó~č‚G‰B ufź3ļ_üPų¢ų{Äé/†U_Km庐õ*ŹņLh`ŚxFņāKvÖę{+”;JœH;‚?*ō+é|Eyn¢HäņŹŖ’@*ąś§Šóūm^Xõs§É< ØłUßœõ öÆUųqń3Tš^¾ŗ|&—fbźäķeĻ|uėMÄøłž‰ć_PkŚę• Ķų±æł1[ÅĀ>;żÄÖOˆ¼=ŖŁķC ÜyІu`ö>õ64nĒ‚x6üÜų“XŃ2ŗ\Ęb?¼ć§­Qń…ŽÆ§x™,®ŹEęįā‹Ė9y÷ĶZ ėc2ļĒ:®…4ZŪ\yp f}Œ,}+Š<ūUė:“0ų+_²…œøki;Ń čŁ«Œn3Ó~6Üė·>ŅBj—Z4rīø@„Œe‡Jų‡^„iž\ŗ5ūV 7u»ÓQŠQųp=ž„„<© Jq‘éƒÅ~ƒ6™oØųZɼKioØiÓØŠdd1ō>żźZGÄ߬ōĻxøhÖWwWž¹@а²[{6zzW]į»GŒ#4rHŲۊęi’zWŠt_\é0ĻŖÆŁļŠŖĒ"Ę=ŗz×Ğ,Š„Z•ōvš”ŒČJnī¾ō&Å[FsPZ$O$PHe`ōā½Āz«[ŻIayb’<ƅ9ėõ­`Ķ£#K_3x[K«{Įyn¤IęņC gž•Xż¦'¾æ²Ņµ}BI—hF£Ś„@źzUšŲī<ā­#TÕ$µ³š?/h Æ@§æčkØÕüQąmBxō”ńžŸ®<¢$µą²š ķUŹĢdtś÷Ć|įĘ׌įšŪrŽ7g#Ø<ńÅyŸĆvK?YĒab.œÜ$A`FxśT8źrIö>Ōų½i¦F-$|:‡Q½fÆēnø8SŒ`v4—CĄ¾,ųN×Įś½®•§[Ū]i³Ø’9#`B'lžęØh>ŃÆt[ÉĪq#ąLņą¦MæÖ±+”COų]§ųfŚćPµ*ņĶ!FŁ;OÆ„t6:Ż'Ł&µ2†ŚÉ€z’kHĢhłó[ҵ›Oˆ“;Ż4^YĢ„ąī±«ÆƒĒž!šmÄ3KŻÜ;‹–VĄPzčSī+ŸCŲųЉŗ}¢ŸN–1ę€yLń“éÖ¹?‹ ī¼šś/hś0}22‹;ĘłeÉĘģz Ķ®ÄI-ų_ć­Hkr„Њm2Wۜsǧ^kģŁüO§iV’l{I!ÓQFżćsmījJRčbüGų»įæü?F‘q,Ó[Ī~Ļós?xīkåfēūz4ū^Kʦ<Ä0ČäŸ~æ•TcsXŹĒ›kVW›Ūč–žI› ę ?\Wōū źW6_,¼%ā·“ŗšÖĖ$¼qÉēҶŒt¤zGÅK.ņŽ ONh2„īDū¬GךÆĶOŚZöI4;Wū4×7&B—c…Aź1׊‰GBoŠųŹ9Wf*ćÕōĀ/ Ķ«_µ»¬RÄ”vē§JČqÜģüO¢x¾ā[ļi#sŸ–93“uėӊ׏~!šV·¢MŖF,nVų>LL¤ąžø”®l ?d +\×õ gE×no¬m-ä>_™ ¼vö⾆ųó£i6š5­•ü¶×–ƈņ«÷Nz=i¹#9#ü;šš kĆ^ q©]Ep°“¶ė÷™ż‡į_+\źSiw2éSŻłÓA&Āūpqž2)}išU ~-5'„8e8ćõļ~1ńDVŽ(КĪ5Mw3ʄ€Ųć#ž¾“ä¬[I2Éoqfc€Į—­~žŅś&©mā)µ;»O&[ĘpŽ`Ļ©’ĪR±pÜųžŪJŽóQū1X>Åē†ĻzŸĒŽ ŗš«ĮsŹŅ¾rTć’>”)Ih}Eū1ųŹ ™āšeżåÄ2mqmęž”gõā¾Ī†YŲīQ•VĄ õŖ1hПN“ÖōķGFŌ>ĖuBĢɼFHį±ź+ņCǾ¾š/ˆ&Š5ŽXäņnAāc»„S—BƒõÖŠ5‹jbšÖ]ģsŒÆqšśwā֛wāJųį›¹#Ōös@£1ܧ*2=ēI»QžÖ?²Ÿų'7ķ!cūT~ĒžÖ$¹†ćĒŽ±OÖķƇ•]cĪFvīēŌ×Õz]ōśn¦“ÄĘ'“ī+šŖ:¢¬}{ąŪ›ŪĖuń_„ą(Q{6 ü@ŸŅ„Õ¾h~!j:®»¤FŚ&·„6•Ŗ[Oe›#å;HĒRAĻc\­ėØŁüĮJ’csöDż¦~ |»µ»‡Āś– śļ„.Y—ye&[ÉVĒ&>Töü°Ō”k[©‡ļc#Ѓ[įŻŃÉV,ČidW%ˆ *š’OF®ÓΚԱ a”°;}ļzMŹT•g½fuŌL̦6ŲŻņ:ŅØ¶ $ĄqÅLÜ øŃ—ø4É ¢¹CæØ7'Iv !rnjb¶lZ6GF Cd0=Ē„U$ÖŸų"§ķ—ŖžČ¶—‡|ā=jāÓą×Ä…Ó5,›mģļˆŪņp3Ā“īkżą†+Ķ9D3‰ķŁD¶óC”5e”Ś»œv§n'nSé_3ücšĮÕ“=RĪ +{»;µłÕ—£‡ėÉüėĢhĪ[Ÿš·Zv„mqoäKaŖé®c–9 ·œ7#FkńOž _ū0GÆ„§|-§@°yFt”±*d9ܧæžÕPz>-»eÄR±Yą•”—T;)ĘF{VBE¾Bć§=»×”Mœ• ŃK8hQU›ē½7÷ŃŖFŠÅsšŌĀHŽWnPAōØ$r$SÉcڃ8ŹÅĻ<īX†ė“Óī2¬„o<ŠkĆ&Ö$Œ6jš,ąo™NH?ÅAŪLū“ž æū[ų‹ö0żŖ¼ā#Tx>ų–ś7ÅZl§6ļ|«8ĻŻd$œżGBkūõųMkį¹—Vš·ö®”šćĘ®§ :¾ųįœ®āŠł#9rA޲«ŗ(śĀ··ŚnŽŚyŽSyfĘ9ŒĒ®öĪō<šÜćm¬ć Ÿį5åÕEß[;ūL|µųÆš§SÓĪ ķJߨižbd’īŒ¼¹üBŠ’>ÆŪöw½ż˜æh [SÓl.ķ<ā9¾ŻepØvGpē÷°ē§ŹŁ®w½‹>lÖ|7g­i·—«=½ōh ^%õZó2ęk+¶·yÕ;F85Ļ'ŠØŸt|×DW•žM²ā3¹ųÅ}IāŻ:ąXNĶeo,%Xź ø ōĶynM;XüÉńĘŸÆ_G„…'wMĒ8bIĄükļO†\kŅ`‘üūŲSuĆ÷sŽ?Ļ­{øj—йĖZŗXY}Ž8æx\ŽFkÕ,ü[=֖tĖØįv@d9⻢īy²ŽBi§fĄUµ_°o1ĀlV ō#Š“ŒĪ¶Ę%G-Lśv¬-RļlØa×é[­įK爺•>^ļĄŌž ¾ńÉöh€V<®qP¢8[–y I÷!<Jt¤š¹LˆnÕdI“^{¶2O’›ŗŒr)c»@BJ¤Ž™#­6 m īѹBsU¬ģm­§-Ÿ0uĮØ$–źKYI„…ŪŚØE ,‡s¾ę€,å• 3Uˆķ'fŲąsŽŌy6 ÉašYgŚÅūĢr}és"¢Œhn{‘•V'„j½™ƒH|gØ8Ķ;›X­s|'ebŲwīkŸ¾Vi„²”éƒŅ€±b(åx Ę7‘Ē#“ō”,nR $•IēGZ QīuŽš«ė³•1¶3“õÅu_ŁVŗbĖ'œD™Ż»æ’^¢fЉī?žü@ų£©éÖśœ<;įė„ ś­ō{UœeõõÆŲσ?±?ĆĻ„²¦§{wŽüW”^Ź””WĄ'jö®i1· “gŻ=ɌHĄpp8éKW>xXŌ¤Yę³LÕ}Š&@ŽĆš°·WB&šhŲΓأ/ūRģ—{ŸÜgŒś×7s«\K#ŶģzÖ)©ēŗæŒ“Ķ)¦ūuņµĀnkåO‰ŸŽĻNÕµ8®m”²·]ļŗ@ƒč2y>Õ“ l~>|żæ¼k`Ö:ŻĀx‹žžF܄.xQŽ+ń_ā—ķć/Üßܦ­ØAĖ—23üĆ=‡µzxl6ŗ“)XłĘ÷Sšī9 „īn[åcó1īMSŽ9d‹rk¹+5Ŗt-$1Ŗ¶IßÕsR,00%Õ7“Œ=KĘČ”«jŅK…ģŻ­±§mgĢęXÕ[Ÿ›×Ҿ•ųū3|Lż u{=+Ąś”œgA.©%³dLüÜ÷ćµa9TāNæ±ēüįæĮX¾$߯óšßˆ%µuµR®¬6稒īEs*Š‘Ąhö¬2 §7;Ōģō+JīöuB¤®qցĒsŒ—}ÄĢJķ—§&ØÜ•“LŹ6ī{ŌN] Ģ »ē”Œ6Œ+9krL2bBsĒ9¬€³¢n$ )ć ńŒā» [Ķéy°qˆ  ÓÜČģŁŁ•N…liöŽpU2onĀ€-ŚŲ>Ÿp|·imŲōcҤŌļ-’eM»ŒŒ Ö-‡q~YÕs‡_J–;‹‰ŲnbH§ve&ö4ķeu|K÷Jæqa˜Ü:õŖ$®–Nź„GÕ3XČź<°ĶŲńҁ lægm„nējģ{f2Ā» <ŠI^V+“ēןqyrG \’1@ §Żm)įƵn$ŹŅ4JŁjŠįŠįHĆuõF.|æ:Ė/Żlt VÖåń§ī€>óŪÖ²–Õ·«œ@Ė껵(ćęsŚØEnÖäģo˜P˜µ}RĖ1«JŠz•ąęä¾½—Q2I#§=ā˜I;Mź\tȤ‹O 6;[Ґ©k-²B1ҹ-Bِ¹EmŁü3@š0ĶŅLbvĀ甫’[ż­ 4ƞ9ģh!@ēn-§°»:‰#ź5{QÖvAĖŗ }Ś  9īöKĘŠNyā­jQŃ#‘@ tė@XʑĀT0AĻZd–ÄŹŗ·„niևOA2«:gņ®[ÄFŃåi‰˜=MexfM³4 ­\ü¾µź–Śävń‹K†!O ĒJåu‰ydfĊO^¼U=/Q·Ó²±B“ ¦hŻWT‚ē7Ū‹|ń“z×?isö‰ˆ}Č3ļ@Ķ›ˆŅŲoĢOP+žžž+‚„Pn Q+•‰Īā9ļķVY]b?*b;SÜŽŁ„D+‘åA[V‘Å1ˆ|­Ķ!ŽS ‚x؏8Ü žt—×H f.ŗÕ“r°Ŗ§É‡ō  «-N ®¤· ,n§aŽøŻō®šÉ ŠfdĢYėļ@õ(ģö«Ę0ķ×ÜÖ'öiøŹœlĪ9ķ@Ėą’*Łę2¬Ŗ£<śW 5œ0ܰI¾lņ¤ó@›4­ –7W³Ć±ćžÕÓ[Śe¤šGH.)ĻĶ@£.†ī“cs<įѶ`ņz]ˆ'ž;hć#F((ńßX‹»g•öœž9ÆŸĆf+†Ōģ’[bĒ$n;\j™&md_[,€Ė"/ŸÜš¤Ö1Ķ„ŻŁø€ %ŃńŤŽĶgn„Ōü»xĶ|Ēā/ Oā&mdU› · »3ųSå[›XųóK¼šž«7‡uY|Ė AI)»äÖ&«įčå”ÜC8ƒhĪŅ24ŌlK‡cÕ4ye"K|¢X)Ą<Öփ«j:%ՅÖ&xć”HłÜ½:Vuv°S>Ē“ń_‚5ż Äó„—’6¼mŻNL×yr›35Õ·@܊óē§LN–ÖöŅ{³6aŪó9Ź×¢|ŌŽ—­Ķa¬ĶxšT’å c„ōśÕŅ•ˆœYõtšEĪ­ ­e,WØŻønQߚʗHžĘ4“rŗž€öÆF9'å Ó®s灰.ӁČ÷ƒ«é 0- N÷TpEoĶ”Ļ(ōg5>›yl’)}qłV¶•Ø5”r®XœÖLŅ<ĆāŌz–”£^ėZr=Ö§mbN[ v#Ҿń^·>¦ācmh’¤`:Ą›v·rzs\µbwĀGŸi÷—-©$ҼČČū¢½ģŃ4V©_%¤l@ÜW8ü+‰­MN{eXx‹A¾U»³—ĢGL‚Ć<ćņÆÓO†ŸµÆ‰ӗUļ„„~kÆļ>c×µk#)S>ŠųaćÉ­„ƒi{ˆƒ€Ć8+_zi>&ķ¶ÄET]£ŽµÓu"nY]¼S„-…<}*żŻŒĢT–(9•ŗw8¤¬gN%x˜‡`zƒTb¾ū,ČŹŹ¤ą÷¦I»y­ZŽ[<;vČFM|ńćiĘ9ęŒ Ł8R(6‹Šł·CŌ5 üNņ>¢,ŒœaĮĒė_PiV©i7³;c‹gئi¹­Øü@‰m’Ż Ęc4L:m8Ū}ėŽt?ÅćoišŃ³·ßlLŠĮ€Ė/sžķd–†—‰4ĖhaÓķęyŒnT€@U>’‘Ŗšb_ų¦;›ų,Č·ƒĢWmł ‘œū⃚„3"ĀŅŽćT„» eŹ«”9ˆ{ÆJļ¼iāĻź^Ōü0Ó_Y\Ė1¶ i čPõäńČ Ī4{Ÿų*×Åv·“ŽM©A²)XįcĮaŠJś_Ÿ.¢óģnć™ēņY… ¬HĮČ=8ĶB‘©š+Å6ŚWŒµ"’ĆöśĘ•päˆ$^©ĻjŌż¤üį›]?ū[ĮIŖX[1Üö’Ė #†j%G×Cę ÄmķīķÖÖćN’1ÆśĻ”’ha¼ŗ˜—‘nGŹv÷ļŒU$hKҼ?i%‚3†79 ¬‘®JI,­õi¤švBT•^E2TšU“šÄ.“$Ōō#‘čkŽõŸėzχ/ešÕĖY( ’#†eĮ8ō’ §¹OĮ÷ŚĒ‡ōč-”2Så(ĮĒ©ÅG†ų[Ä£B¹¾·?c[˜§(rpO×u®źi²ž[{™¬§‘K >1Ī ŠmšÅ]ji|3ų‚ŚU”š£{s­¹Ü‚āYy…_ʽ:!¢Ć¦Üj:•ÜW³d÷?{ZC”{MÆ|K¶/=¦ŒŠ&/\ų?ҽ—Į’¬ōqk„kśGŚ­®€†P «^3B¦eÉ©„ā{/†’4šµī™µž9Ą .ß|׉ĄśQÖEÜ/.Ķų]ĒæJv+9?6ēĽ…ō°O>l1¢½ėĆ>7žĖšĶ¦¢u4½™r ł˜ w¤RWV$šVœtķaUKs„Q‘ė֜eŌ‡ĢLž/ÖüC¦Įa©M8ŗPA’ 0ćŸZĄ¹Ń"0Ī—¢YŌ¶ą3æOʶēDß”Ś|#ŒčŗūIqq½ŒÄ_$+_һü{§j‚ĖEž4°;¤k˜\²”ĒFE)4iĪŸLńž§m„ėWr]j¶÷S3<€oņyž/NkŃe»M#JIRīx/#8ŚŖ>ī;Ÿ­@łŃŅYų×GńVmm{qq§hą„éęē'é‘Y¾0ŠĄųVćT‚;y/¢q†/ó:m©q"R<óĀW~×5dø…"ŗ’Vē… }Mv^&šĶ¬_f»Š®ŌŪ„,ĜäŒńķŅ’‹@›HÄK××ō»[k†GHÕ¢VUźzžõ‡„ü&ÓüWµÖ d¶ŌķīĪʈ²Ē’0ŁéŚØøŌč}/­ü!š¦įŻž;Ųt}B2<Ł£“ļg€Čķ_%|Cš“2ų‚īīĪņW™b „pOpćÓµR“*ē¢ųoću»¼ā™nÆtˆc‚~©…Į=ˆ®ŠĖĘ~š±£Üé‚9¤yC³‘“g‘Ī‰1{#ļ߈ŗų«į|—:L%Ym£ūė’Ł KQšüņÕtżcEÕtĘÓä‡ģ±Jd”;°}?:Ļ—[‡%h×­§Õ4(Æ'[˜dŲ&fŚöś× ą?iZ½ķę—Įóą!ń·”wdJ'§ėŚ:֑rš|Ńż°ę4Ų;ūבZhxv@.UÕŌāBxĶ+ŪS2=M4kķzŪP¶øh®B»°Ųļė]BŪ]4 ±\]YØ9ĘJóģkCh#/āNŸwŖųY„tכYUŚS½äUĒŻĻ~+£š©š„Ļ‚mƒļ§°ÖCķ¼µ”Łõ#ÓÆĶ-„ĪŪÅæüoć//ˆ“‹9õVӊ‚TļNMy¦‘’ 2éęŽļN»ÓēUĆCƒō5:~‡gc¼ś$Ÿlŗß ¶öv!F;T­>­ÄpĮ2^Fģ g!Šqøb’‘1}Ī_QÕ`¶ÖÖźwo¹µrXŽ¢©ŽÅu© ģĪ‘)Gą~ļ#€ÕF'įø¼_ M=µš]Cjepbßü9Čéü«ßāńēŽdšn”ąKØRŠ.0’/2@qĻ'§j8Ÿ.ŪXj'‰“GŌ-ŸGŽŁŒ“E0 šAéҽģxƒX\ö’Ck©+ęź©Ē śA›±ęŅZ:_“¬‰ 8Ų€cœ~½k®‹ģdpÉ5…Ū1“§īäēŸjiŲg§|6ń‡‰@]SŅ56²½ˆĶ Q*Ÿ–^¼ć±ā¾žųsŒŚ„¼- cnH䏔®v7+/Å/ŠŚsEhNņ5XŌž—Ķźē§ć^"EŚņdBżóījÅcė/üŌžč6Ž$šŚ¤öņĒM6ŁS;€š“Åöŗę„s¦ė*I“łM']ޟ˜4ŅõʅöҬ2Ś»@G9ø?ެüuį9”Óa’ėÅšĆ$°“²b&ƒß8Ę™ųˆŗ†”żÅĖęĢĆ+F霔u8#ō®ÆWń=׉ķ-U_:Č\Xzš,mÓSCńē†u}7U³‘ŚĪÆ(^ wĄükõCĄž.³ń&™§]Bąot˜*±ōŖ1="/”ƒ8Ļ_ZłcöŖš*k$>7ū2łöŒ£1ę ?N~”­Ļƒ Š…O$śŠś{ą>·¦_i·Ÿ 5–K;i¼Ū‹k†9¹ćŲ t: }»’Ģż§'żŒ?j«MÄ3]§ĆO3iśƒF H&'÷rŲÉ ŸC_Ųf®¶ĖsķĢ7v3*Ķ”ź¤dÖ²­¤zŲ÷æzźéZ¢Ā.YŹß½]ŲĒ>ž•õ߉n"ŸĖ·Ó¼ØnīIŠz„pĪ&£łŲ’‚»ü/ń_ķCšĘ6:χ`’…ćš¾ōkZ]Ī óÆģyŽŖ§;² ‚;•ńwāĖ(īÕµ{•ą‘˜ø`#wR;sÅ]=ĖQŻo!—øśŌI 2*a#®čHóźG ²Åµš"ĮŠšJœƒōŖˆNęP¶Õķ &IW-üŖ…øĖ6Ś ä-E)U`Æõ6ćˆÉŽPļA¤{¬™mæÆ„jŚ2Lnä)ļĘh7¦Ėś‹]\iņAlŖ.£"x<¬‹Ź²žÄkżą‡’šP3ö·ż•|7įo]Ü[üUšu¼:6¹Ɨi0 $ĮĻ,(9<ē9÷%£¶2±ūv/™0ķm łOPAī+—Ōt›y”»°ŗ‡BGCŲיR6%³āŽĒū Ņ×Å7š%¹ø°&ÖņXāÜ[1#÷ƒ¹žząuā¾ų³šæKń®}įø †k+ØŚźÄ‡FŪIŚHõ~UšSłżŖ¾ Mš—ā~µäŪ­¦ƒtĘb­œ,¹9Ēašłt@Ņæ’«ēŌÖ»)»£ ±*Jņļ2wNJ®ĪpJ±Üx<õ®“qĖb›G¹•9+œņ:R7—ˆ®Ļ!H– "÷³õ¦Ē‡$õč(*–6»”‘¹F~µv<įKŸėAŻNBÜAmym ˜HÓG—Œ'PąžĮąŒŸµV”ūF~Ė·ßµmVپ0|<™_H28I®ąQ¹0:ć¬dŽ8PzŌĻįgl%ŠžŽ¾|DŅücįoxźŹDe”}X‚A‰lƉAƒOē^č–vFŲ­øW·oR§Œ×—Q"¼Z‚C¶S¹ęˆķeīE5š]Ł‹]Õ~M®ųJŹĘļĀ7RVŁZ0M»\ŲŽqŪ=ń\“Fēņ—į¶Ōģ-ķn™„FyąąõśWŸx«@°Ņµ­Aōńs-¶ķŹ\a‚ūÖ2ÜŅ1;?†æbšĪ”n—’Ē~ļyĄ>ƾām¼U¦Ł„…ä“ķPÆģ…cčk–„-nh|Éć}ŪkŠŃFØŅf@„ryžu»š×ā,ž ńʃqŖI~šŒ`¼pØ8ĆåųÖō§m‰śi„Śé^"Ņ Ž•ØĄ.oņݱ¹zäĶҦ-4±Ź»$‰ˆ?Zōa3Ķ­”æ=ŗK›ž‹TķnSćå~‡­tEÜ┬tvŗ“l…ųȝs*^\–Nā~ļ„j¦•ĪŸCX"aĆnOÓ‰āØfa™LõƒZq¬®ļ ø‚§¶‰§ĀBę‚e~†Ż“ibd䤹ŠĢŌ7¬QóĄģ“™šI>ņĪß\õ­(ǘٌŲĒį@­„ÖŻŃ#88›]‡_0Éņąm"€;>WcŽyéV-n|ŁLNpēŠŹR,=žēfU;OzĪ0}›-#2Œćšƒrŗµ·šŅ,h­]2Ė},į±łA·½ ”¢ŁæƒŽÕ ņDÜćÕ&Ó"ŽćDŠu饬åRĘѦvVްhÖń”‚0:U՚ūĪóŸJjR§Ż…|'ŖkZ¤Z?†mQÖ%;"‚>yéĻ ÆÓƀ°“gu¦xļć):Ī·ė$:8$CĒi§=ź½”ŖŠGė÷„|3Ŗč6ŠižŃ“Xm$ĆAś Vv™XŜp‘*µ-ŒŲŪ%”Ø—•ō5$óČNäŪ³©ķHĘRŌ® ŹóķYsx•,J‰u𔺒kŗ¤sźˆ Xăi?ķ0?Źæ’jŪ^ńž«›įmZę9Vb_Ėv6š§”Į³ÆźÕżÅżķĆČģ2ĆÉõ®y„‰¢;Ć0zW •Ž*µ č Ā©ćŽ•4E—‹+ōĪ Ė”zÜQÅNm¼ķĒōęƒ&ū–zsķ] p9ē„z'ƒ<ć_ˆZŌ^ų}į‹Ż\o›jFJ*ē,8Åe9šB:Ÿ·²'ü1¼C拞7ßj)"ɍiŠĒū ć8ż<|żŸžü$šm†~hśu–š"Q+ˆBł‡Ę:÷®µśp=~ >8ÅüĆåö­{-ÄĘI1°ö®ČŲŻū7 F Ę:Œt„k ”/·5œ„Ų“ĢvA–Ǜ۳‘8¶x QŹ·zŒ²«¬n9šÄŗ×§hŚ;vĪ?…FIü)¤tB'‚xūāׄü/¤j·ˆ5ė-&[vĆĀņ#}~Z|cż»¼A©&„¤ü9a£łMpP ?CŽMm f§ēöÆāļx§T“Tń.§uŖjyi_;{v¢ Tl1?Ž+²;Ķō&ø@Œ6|Ų©m­ēœ8·V“č3Nrčfw¾š+źr!»YŒc5ōF‰ąg C¬NČ-Ō×4˜ĻJѼ9ą¬ö "6ߘ`W Yč–Ö»JEL •Œ„ŠW6–ŃԃæNõæ£ĄĶ¹%ܼõA’äub;p›v+8ļžkZ­³5控½Y‘ĘéĪØÓ›kÕQ±Ī+¢{Æ;ķ:I 9ėŅ­HF¹]"hRęš‚y$Ž>8ǽtŗ—$j‰…qĄē”¦– VvI”†'©­HćøÓŻd<Øōī*” 6¬Ņ0+”>՜ė<× ņ–qŃMh•€»ØŲ¤K Üj­·LöśVmž©a ŖČ³G v’Ja`Ń5µBÉvA^v°­V½ž-ŖÆ¹Ī;PKŅhóż„¶g–8 é]“I§Ü/Ś‘ž;ŠO*)źÉ¦Ķr%µ }ŚĄ¼³HĮŹQéæeڼĮž¾Õ6„¤ŚĖn&·aęó@ŽCū6włą 8üiZ[˜Ā“ĆlĄvR9ÅRžż­åi6™q銽µo$Ä®OB;V]śC ާpGc@ärŽÅt9vOĢ3]­œ“(ŽW9äu N]KN—MG(žh1\·ØŁżöĘØż2;ę‚$ķ”å“Ė),ß3x5 ßÉŌ†FW,$ælŚIäVѰ‚hB2Œž£Ņƒ@±žŚ×uøb1ÓŖ Bę9œ,¤sĶ9"Sˆ!+šX”pź£ļg„t©łĀ …?C\äaŌ7ż¦Ų»ƒX}ŚY¶¶±¶•e„™N¦ßø}É“04d¶²-²²E½‡\u5•0E,ŒÉ°õ#·0/§Äę0›ŠŸŹ®Ą¶ź¤ćkg+Ž”:MZÜļ¶ SßŅøøQRńÖ]Kw4jŽi“¶×S“R‚7))ėR{‹i!1É< /B ĘiŲ©D£¢2n9Č8ĶtšUؑ•X£®)cؖ8”E*@Å`< HNqĻd³ÜH„ƒ¼ŽĘ±Ģ‰3,% f€±e\yR:óœr)ŃŹŒŅFdR:qM”'szĻģ²F°Ī«Į㊟R²z‰ćpёœ“T 3‹Ą²µ•Šp¤`ÕēZżņGz%‚tf,Hē$Š%©†‰ kQ[;š6:ŻÅ‚¦mÆ×½nh5ĖyŽKŽĄö Š‚]?Īg™T¬L0ĆźTŒ®™äL‹ø€gė\Õ.#¶M!aӢ޲Žß_„mųb4¶·k[˜ŁŃų{ WŸRFńŲī,ģ Uo³ČŖģpC*$ö‹$śt‰oxœ”'å&•9 śGįWeń–šjSGk«[&EP@o§Oν ä¼¢A$„“ŠƒŅ½*G=Td[X»ołŪnsķRßi÷Q?˜n¾ę “mź;×AĶa$ŌćŌlÓO¼¹ §`Ļē\Mķø†ay¬¼r(nĀķģ¦A Ą Wk®ąAäWÅß“€ļ4#UŅa‘,nĶ,‘õ}xņ*f“±½3Ąü9 °¬2NwOø‚kŠ&—ūZÄq•–#€ ļ^dÖ§Dv(eźQ8ŠöŅK&#p.8"»…ž?¾ųyā„Ld³ŗ`f<ƒƒĒNA©ˆŚč~”x[ĒÖS<”+0RūIۜ ŸĻ5śšoā%Ķزž]ćq©õŃcštĻnń“éņĒqi:ÉŠĄĒČ鎓|=āi5“ä„PNkŖ ā©z’KKwuŻÉ=Aė\ģś-¬ģ³ $I‡=ėS”³™`>a޹ķoCµÕćh.£Rąą1Ø)JĒ™Ż|Ńåø‰ņ•‘÷ØčÄ×c/‡ą:QKįFŻ€ēŠØ»F]˜5½K zāxno#WĀłlä¦ōéš×ŃąEŸ2!óAĪ}hę6ę=2]IķōŅ̤Æ^½+œŅüN—fHЉ œa…I.F£źVr/•,8”ž ¬‹›|2øeĻBzŠfmXˆāq"±/Œ7”®ŽĪO6"Jo\ńŽ“Ō/­¶Žķ¹ķŚŗM"7eņ—ę@xƒ3›ńV¬t¼[H܂ ńRŅ+ē’W|3Ŗ0EVŗ–źĖMh’įvµKwÆ,Hļ侕”å ĮÅ i‹”ŹBÉö©#,IŚ8Ą­ż>Õ,°d"RéXó3Ež½ŖŁJ'…·ķ+Ūė^_Ŗ•ŗ¶ž8§*å ƒŸŗh±iįūiZ„ßöõĀ_[’Bķ!ŚÆaµÕŌÄŠ¬ŒIhē5VŌl謵ˆ§’ę9 tŲ@ė`×%¦NØ×jīƝ˜ź((ˇShÕ|Ō`Tć §ŠČń-;”`įń]t>ī(.1¹ņž³ŠćÕ\XÜE%’傜ļߞŽŌż_ǚø:ŗ¹} ™sÓ·5<ˆčŒQ»¤ė—0,ŅČŅ[œWUcwe čUȑŽ{cœ¢–ˆÉĮ|7‘Čńˆ%±ü«×<; Aqhg™$voĒ5&'7qxt+¹įŠ6¶9ĆqĮØĪ”ö†3˰ī>µq€›±$¶P^D0©ŻéXvȶ'dŹbĻ@*ł{Ļ©ŃĶÆC5‰·w\“ŠŽµĖYĶg6ł#eGVĒ'ÆŅ±,Ų3O3IŹ»ĻJŽS)+ž3×ė@īQ¤Å”sŠē­ThļLķū•k03ycŽ€ø†ŽŽpä7”{†5›=Š1G‡ļc Gzå”i4Ŗ0™L­6[Yāqę ^3sĶ.¢2mī!k­†eó±[")£½óDĪŹ: qLiŲŪ‘n££0PĆ#Ö±µWI”cV•zĮ¦kĢpóM“łlŒ­Ń”Œf¬[ZBšńüYXŠ•nzr*¦„R¶óį2C„™y#„gKbń’€1$’¬ĒŌę³åf±z/,gXĆĘ­ĆÓ½khˆ¶Žp1Ō¶pM%ĪśŚ fUN«ŠV£įk uļ0øČÜ7åZ("yĶk’ée¶ė·jņO<ūW Ś]ŌnPĪ„+ĄÅ9G±•ŹM †GŽRc— Ü{V4³ÉĄāG!¹$œÉ«/ZG_MÕ$·¾šAbŒØeĪ~=ké?¶—kšę]CĆ7é÷V¦äīĢŽ+ŽäÖ½ĪnĒ—ĢĻ›~=ψ|Vg¼‚ę=8Ģš“b1øē£}E}Ģl-|ąO&‹ok-ĢŪѱēyĮĻ"ÄõÜų/B½ń¶Ÿā]FĀb$ÓļdóŪ ņ®8Ā×Uć_ź–ö’J¶»hƒįĻGóŖ¹R޶įö‹m„h×ou}”,źc"iÉ r=ŗó]æƒ<ęėR^XøQ“;ī9,£’%.…Üā>2ųĘĆĮŚżĶļ‡m„sb=‹…æõÆJÄkŽ ÓŽ”{.¢eƒä]Ąˆ;äŽÄЈhįtķ"Į§hXŹ–Sļčk Pšõ“É$ŲXeWŽ£$"†ģR‘Üųķ ķµHV8Š¶ĘĄ,OlūqZæ¼ =…GķO¦»¬-ĪI­)JĮĢy'Ć©nZź]FŲ™tØÕ•Ügå|ō&¾ĆҵĶBßL†m2õ^5LI8ĮĒ'ŌPķŌNIīyG‹Ō4/ü@Ņ瑤µÓä!¤‚n…`GØ®7įw‚uxć×u˜ķāŹ?’£lœšÄ}(ź—^š„Ÿm4ż7PMSLŪ比ŁŲkÖ·ź%ĀFķŁåHõÆ»ü šgGÕ¼+s§ų›Hk9gˆ(•āĖBĆø9 (ź’³~«į}rśöŽmKPÓ)%Œ…Æ\æ ×;ćÅZ5µ½Żƒ ūRhXą ^¬ā(2*ü?±Ņī/dšžŗR†B™Ę}ėŻ-4H5©ćH²ÄŹūĀØÜ@ō§ryÕģs<¬jŚ=Ο4ĄʧœßņÆ:šķƒŚź6Ö‚H²H6”\0=hS±\ČŃńG€?“ī„Ž)<¹‚”)ä ņĖM3Sšš:}Ī£=ļ–Ä3tŚ>”“g²xĀŽ{–¹[wš3T6vō<zö}kk-VŹź öѕ2”8Żź3łŠčĮųҧĘ]œ–Vŗ}µĀJLØØtŒūē½y‡Rx-6ĘĻ © r­•VĒ©ķQĖŠÉ³Ī-5H-u’"ķ¼Łˆw`óŠŽ×u5Żg”“lį‰łŖŠX­§ß¼’Éd±łG­_“V¾AskpĢUIIż h”įÆjš-ą’Žöi­žŠ” G¾HM{ļÅ’°Ó|cįÅYt›čŃn”ˆńi/Lcµ4Cs瘓ńƒ“Msį®āmJ“FŌUȔmڌvņX~5óóxņźtžĀŻepį”°Üž?­%-loō’įęŖAąČ-õkFøA ¬R*į@Aś×ĢtmWƶćÅŗ]’]i«"„āØĮ€Ćųk°Ś(ųOĒz'‰|7s¤^\„­ćAåĮ$Ē ō!sŪ„|Õ”¾ńN”Ø¢JŃĶ(b7š=érźfą} įŻ~{«O“[e$æŹ0>µŸā}CI½Óg’āᢹNv²d7ŠŌIncČkųGĄvW‰¦/‰ĒŁā»LŚÜ .zµCĒ×2ų [ÆÉØ‹»6’RRL†n’ˆÅ\64…¶>~æńżŹ%‘ŸķMŹØvūĒłW¦ų–9ęēĮoz£{[éæįšŻņĻ:Ś%Ö,Ų ŸIń…ÆŠīt÷øHÖŠär’ZĪQ1œlRų£„ oż«@ŗ·™å’–{@8röƟ|;įĻßj–‰§¶–l v«Žų÷§™ĒĢõTšž“Ø$Zä ź¬īFSÖ»oéž±Ó”¹šÕł½ØiFšH>Ųž]ŖĖLņ+Łl&ņī,ĪÉśJó[Z^ öņC,EC!6ńϽ)m „#ā—‰®¾$ß[ŚÜZéöZ«ņā3CłqV|;į×°¶ņ¼ČäfM¤:ĒÓ5’LĮ³.ĖĀ7>&øøX^{L›øXŲpqõĶ}įĻxCV4ėųćūZ°y œ®;qõĶj•^ųį%Šm×ūDŚŻ©e \Ŗćå śgµ|żńÆĀž3ųaض½awöR!qs Ÿ4¤¹śzā…p¹ńˆüH|_ęf2V’­ĮlĻēĶkų*„yŗZ¼v@āDBzUAŸQĖš'Kńw5hsiāKTGó÷ĀĆ?t§cמk–Ņ4/J·ÓR7“¹Œ²HqŒ··µc9ėa8ßB†½įŁltųćÖm–ę)G–§ßķ\NJ~C’|z®ŸnŪ ”ÜApJ•.ÅØž“šaåŗŠ|±qĢŹŽr1ė]n‘ā}^ļÅxsU“‘-¶’»›*ą§Ņ¶R4åÖĒŁž’„sMųq«Ėq¢Z£ÅępœĘ6œĢ×āķ ćŸJŚ…Ó#†óņ‚p~”u‰ś©šūW‹Ęæ <3Øųƒ?lū"Aq&FܽĘ+ó—ā΁©|9ńcjŃI«C”µÉ’Žį dņ„RvdŪSōSöqų—gćéSŽ[0‘C"‰Ŗē©śą×«ų“LÓī®ą½¶µuēkŒÆćŽŌå¹+±łńÓĄšAń~æ©[ŲEÜH^O³įaB;ļ_6é² ė‹ūh”\üńēzŸLŌ–¤ķcY»³ø¼Ł[Ŗ#rW=}3ū2ü@Š×\oźW~]¼ø[,Œ‚}óÓ§_zb?@¢vó .pqĒFśTŚ­®”es§jG=”±“n„A‚ĒäēÄ_\|?ńNµ¢“ٵY™įS×c1éģ+ŽÓõ}GGæÓµ:P“Å(Čc€ŹzäŠo f|YŠķ~ ų7Ćž(šķŻŗkmIöy „‘F1ŃøÆź?ž GūHŁžÓ³%·…µMZ;ƋccØA,¹žXPaX瓐8’wÅ)j¬tĀgéŖĶ¢ź+$R˜åR&¾Ūš’‹$ńƒc«,°Ė<bøU<ØģHžµÅPךē›ü}š“*ŗGʝ#N7÷6°µ¦·Œż®Õ†}Ē{zž?ą¦_³Ž‰šGö•×m|+?ƏēÄz7“Ų­&bL°äq‚r@ģ*c¹“]Źūė†I¢ePvņ+?åXmą We4qĪ% Ŗƒ³( IÄFdEć;sŠŠĘBĪĻ®Ųöē’ÕaåĆh÷ =DŠ!²ÄŸ§J›d±¬q«gš DŠŖ”ÜłĻ\¢®ĒB>nœŒ“S5-å%›ę%AĄöƽ?ą˜ßµÖ«ūžŁ>ųƒ6§4 õłāŃń§į½&śymącqb\|ŽQ'jžžUČhö?ࣿ4‰¾¹×¬,¤²æ–-Ņ“iµuģ¾ükł–¾Ņ/“«ŻSMŌ¢ ©ŚĶäL€ō#æć]T_C–®Ę °żģ⣶C$øüøļė]‘zŲW܁T¼äŒsNʾa_/=śš£„¤Ų¤÷ļRE¾5` Ęź ˆńŗ`CŒzŌķ'#mA×4Ė­oņƒŒ­Ē+޽ūöAż”uŁö£ųMń›Eøŗ³Ņ“Q[}}°Iģä¾{gœūbš;i­ōUųOāÆźéŚöŽösxĒÖikqżĻŚ™onß6Aś_Tų"óPOŌt‹ėo*ņŹFUē9Px?•yõ¢n\¾øÅŌ:ØŻü’īšóĻ “o |gšŸ\·²’K«V{•A (橉ō®*‘5ƒ?Īćö„ų3©~Ģ“.æį-RĘēB‰åšH-²J•ˆĪ~¢¼“[{]_JI­’n\d1źąÖ\ˆŽ ń}gD{VS&Ł`n¹ŚkG¾ Õ|'(’ßR¹]£<†oZÕŅLÕAųWć/…µ Čbń„Ėoņm/"ē<㠟“¼y.‘}ēFH®¬Tå$ŒrŻĮ#·JŹTĻŖ’gĻE®čmÜÉg©Aˆöcżf8ė^÷ȗPŁmŁéŠÖ°‹GˆG_å  .s‘Tb€.ļ”īÓLó¤ŗ˜ö(‘ˆǽ^Óī-£Ć2o~üÖŖ7V-K;–ŽŠÜŸ^ Y¦ūB”‘·°õ°3€Ė>éāž“łoæn;`zŠ!„¼÷ß#²ri’ł.xMD-ŗ§Lc®)m$]Ķ(\c ”ˆčVXeEWE_QW-ķķü²ŖØKp ŠĮ°)Én"p€üÄąZmݜzyIXÕ»Z@\±Õm€Œ°.ž¹¬UĶÜģö¾c&x_Z„4ī7KŠ..Ųłä@ g<פxwƗ~£óDŅÄķĘ+ “;”OCŌõ kiā0±8ō®Eō5ĢaU'ž:f¹e=MR¶† ¾¦t†ĪÓI3‘vȦI]‰čŖ95õĮĻŁ7ā’ÅÉ-5GLŸĮŽš_%ęø9Ųæīä~5qÅ¶¬żųUū7ü<ų_gimį]}±7^N7HĢ:œż{×ұ[}‹l²ƒtēļÉĶlV5cv¹a ƒgŠž Ó§;[y œ“Ö‚\Œķbö)fG@“ō ?»X7Ó„¼JāR ž„&ÉQ¹‡sā8Ö&ŒŒ€sļ^ āŠŗe¼·VJJA ģŲŚ}…w:£§ÉŸ>6iž±¼}_ÄpŲ[* ģwHqŃGõé_æ“WķŻ„Ü[.“§8³ŗV‘HgėG°<ž«¶>ꍟ~/ųßā-Äņź×ņ&ž$ ¶ääÆūĶžkÉ.'¹øS3uׄŲā«W±V9\ŖĻ“ߨ«rĆjņsTpʧbü ÅKćŖo²ōläŠ ]>Åē w<‚tVZC\ź6ŗU¾ŸyØjżČaRĢĒŲ —$‹3õ‡öC’‚N|_ųüė­üD³>šĄd+l„‰nbĪw?§«śwżŸb_<7kcįo X\kŃCå·L—źsõ®:µŖtĻŖō›+K8#“ńÅ|DõėŌtėd0ĒöP>øÆ>R¹Ö‘ø4ŌG§¹«Å£[ XI ¾·Ƴīu+eä”Ö”™ņ>„a®ŚhŅP­ļ\ī³¶VEøV'Ž’7TĻ>ń/ŽōĒs.¹«Śé el€z×ęĻĒ_ŪĒF“¾M3įétŌ ”kˆŲ² q’kzp5JĒå猼iāė7Ÿ‰uKZG—z+±ƒżÜąž5Τ,ķ ÉĄź}k¾ģLŁ< ‰A 1隮€yeP)fģ=h›čbvŗg…oõgL ‘än8č {ē‡~>t$vė€+–Rč°iމ”Œ…LZõ#D·ŽÜ4ųy×¹5nŹf·¶ßQ®ORhČŅ^"]ŽÜ·Z™Fęrzžƒs§Ł,`ĘŪ¶śµšÖpŻ,R²„n9¢1±żB8me ”ƒĒ„_‚->ėOŹĢ’öļz ę˜†öÄȇžā¤“ÓĪ—ČRLŒŽ¶Ml)ŚĮŃ+ČŠžÕFķ¶ØehIÅ3;Ų榸6—J¾H’2qŚ¶Ł×¼@ t Ń1nss ŗćxķ_5ųėĆ~:Ńu#ye§ŻjZ+Ÿ½’VN:ƒM;bš]čŅ!ūbŸ4€r=}+Ŗ:lĶ»õ‰¹-ŒrĆrŒ°Ź§Œfŗ«JįįĪęÅAŸ7C”›Y&r™lśÕöŌaxÕĖ—#š –A.·Dmb’CV¢¼KÄo$¾:c(³” Au^mO9«¾-“Ó#HåÓŲ#ĪÓŌP3‚cwYzu­†UX̐˜u“Óµh„“‘e‰ģGc\żĢa˜ ½Ø68¼«ƒó¾•¼#[3-»ž÷ų“Č K¼ŗ¶i É‘1ĄrµŃÉp&‰•ĪÕ>żč•”BŽ`óČī¹­ū«Ćå˜ķę(Ž®<©t¢[|m({{ŠĶÖ$ŽK¢°1ņ±¾” Ęē7$ė„€żyļYī·k©2¢A6Ü)õ4 ę¼/®ß_ź"×ģS½³r²6Šö;čŚ(ĀØ#=żi”a¶Ģ«c÷ƒø«ŃĒgrØ$ ęŽ>“€Ł“‡bÉ*ģ?w#šĶ0¼W@äģÓ­lŻĒeun¾K)>޾õĖĒgw– ĮsŌŌܲł”WnqVmÉß¼żh(|Oż›ØŪŚ^YČŹßņŌ)*«ā=Z '7Bč¬@éßėLJ6yT€Ē9Åh|ɁƒŠ@Wh£–PĢøLžUÓāŠq%ŗ‡9õé@ĶŪ6ĒĖwy}ōÆ0ńoĆŻoQŌ Ō|?~|•“|±7qź=;ÕÄי~‡c}`Ššš±lądõ®Ī.ŻL‘œÉę„”J] §2£9#µe],Rød_)‡\w¤dQ’9ś·Ę*¤RnÄs&[Ś‚* ·°¶¶–Y~r‡9š*8ķōŪļ1m5 hf^Š\.O§5\½ˆś:l bø‘Uō ꙩŽBĘ]½^©ÅŲšæčk½ o#Ŗ‡%Ooʰ®t9ä0E,贈øw¬Ė”ŗ§£XĻij‘1Ž0AäŅBś…Ž¢ĄĄņĀĒ2ē‘Œ‘ŲŚÅŒ G÷kVK%\mŚŽœō „Ś.ysE@‡§„rś‹NÉ"–ĘAJ O ×,'ƒ4® =1X!†Ę!–'Ł!_ŽĒ>ŌS<Ź+įē8ˆŁ8ē5óGʍ\ß-śż¦)GO©§Έ3åhģaŽŚćĆWŃł‘D<µSņśWĆ_ō=GĄž)ø†åbžČøłYncnąÕ_””™>—wßi—(`\U žÄVšń”5Ģm{,Ņ2…˜ēw¶k–°#ŗŸW‚ hq P»SÖŗė6’Ś4†XćqõS^]Ft$mŪͧ¤[ ĖErŒ:ž5GR×^ÖĶ…Ÿ–īÜ0tĪ=Į؎å8Ųg‚¼[©Xźbᤃʐaē5ön“©&­g»ćŽ#u5čQ‘ĻYģB3łmŌę±Ģ)Ń#”cŠž w#‚ekĖD:Ū™OUŽWxŗ;H3š~‚Rh§§ŽŪŪ^š<ŽsĒ™ć}I×­äkT{ˆŒg0åIōؒ7§3óÆĒ2ŚųCÄW6SYŻZįP=~µVÓQóįY­äc#į=kĻ©§tes”›S×īąK=A§;FÅÜ2@® \Óõ$3 ”\ü®ŸĀ}iGF[géģsńOBń^Žžń†’©ŖŚ~ģ\F~i‰é‘ß5ś% Č¾¾ĄUPœ…ŖŅ2ØĻ©¼'āļķŪ¶’ä3Ŗį—ūĀŗū=:+”š8–;‘Ü t­ć±ĆTźžÖ÷G˜Ģzrio5³óauP>š®…±Ā÷3£Õ^\łM¹;qLšęH•Ł”·•1ŸQފL|u'ŠKhŚĻ$‹.H#5—/;r_§4å pJ§ČŻÅtÖjKw>Vr:ԁĶėõ$‰ędrk”šn”tk©…Ņ«G½ˆuO\Ręč4eÓ5ų,& ĪóŜŽ*ޱ®é7ˆ'±E‚éļcöwÜė|ćHÄQŪjĆ1Šīµ]JÖāĄł#”äz₽™óÖ«ŖMm{uš¾^:Ц¾%)ŲŻ°C ŠK‰ŹŻė‚öé–čʐ’ŃYļå^+ǐ;š;õęŪ:‚“©8~ā¼ņóĆö·^gŚ”ŹąįTõϽ‘ž¤¶žÕa„«Ū7ŁŌ€;zɟĮŚŻö©eż™rb·F>j²ä‘ڱe£Łt 5Œ åL8#^×įKČtūxā¹ø]Čq·©Ź60“ŻNņ)²c ńqÖ³s,̵–uRļįö® 2˜Wl‹÷{•w”ŌZä‘e| ~sŽMjčW–w ŠĢŽ…@^œ“ėK”sG1ū+“½f\Ž\“F #”dR9Šn”»3Ś«Iøīlž•ėšDPż•Rńä<ī&¬„’BĶX$īk’»Ņµk¤ó#€G(ž3ZA2”lqwŚn¦¢Y“c]…#šĘµ4ˆ„‚ŚŪūQcyQ9ŁŁ«B\ s±ßœŪ=MI,ĪģLe‰<ć”Œ’¬ź ŚÄgŽ“PĀF.UѰ<7„D„Šh.%YČŚø× ā.ķD·vߜćŪŚ—9ŖGKg«j6|KÉ7zb®Æ‹<×ĶĮUlõ#„W:ŻÖ¢Ņ[ą¹óbsƒČ¬õŌļ,U_ĖgEčz9‘›‹wö·¦{‰L ėü©Ŗ:“élˆ`dø$–v<7ҲwźIüłüNš^›qįbM7U‰/Šo[y†7©žįĻ&¾(—Lń_ŁaYf¼ž“dŠ«Ą=įÅ{ęqEō;O x‹Ęøyģ4»Ó (ž<Č@ījwо7ųŚēĢŅ4gŽ++Ē ¼ˆĶ¹OūC‘Ö·¹µ\šmŌVVW#„ ˆ®ģ<ü¤Ōž'ń&-Ń]gPcd~RÄeˆ€3S$Chņ]SĮö7×I­hŚ…ēœ™Ż“į6}3Œó]&‘ćwĀµ”ÓøøĶ¼ŒyÉķSŠ|§xĆJÖ5mnK-bxīmÜ¬£‚s‘ƒšōŸ[G8M£ ›¹+ėŠŠ§§ø’ĀÖ-£}cMKw²V*B‘ŸåžÕ_Ę~ ŗšž—e«ł+sjń‡ßŒķ<ä~ L¶"VŲņĻ ŲŚŽų„=ĶÄöQ¼ĮYŽvēÕW„{÷Œføšæ….4éćƒÄ:MĢežĻ*ņŻFvlVM™»šēľšójŽ‚ĢXŲ] >T¹āē${T£QæÓÆÆ®-e¼¹¶r>‘@ō”ƒgEą}>ĆŚüvņ¬.F_Ģ8P;’ß@kŽ5ųcLŃo,,-­&™‘£g'rĻP);ō$ņ? č0i¾!ƒQKIRÅǾ2V1]OÄÆé^"³·Õījin6Ę'ĆIŽćž4ʏž|K§D–‚=X䜠$cIäÕ]µ«t†ĖPškˆ łjV°fœĒy„ųBćVc™a܌SĖ\n5ŁxĆmį¹ć‡Q™—{Ķ'e5j73öÖ=§Ć¾šf‹­ĀOiøÉ$c{0?7ĶČÜ|Uų׹KÆ YÜźč/‘»x8ķ‘ż*¹ KŸųē\Ō|oö{ė›6‘„\ć{Wƒjš]圐ÅæīTį²T{Õ*}ĶCųāĻųn{kżøĪĪ«»nĀoŹæG|#ūNé~!ŃęŅõļŽiś†2%*ł€c’zŽüTøŒ7ǚ=Ī£%–¤źÕÉÉ9Æ­|ŻńÅ“«½[OѼ9Ø;Ā#2N„ˆ øš§·åY“sXóŌų:ęH%»·Ÿ|AĖ`ß)®ūĀzÅåµņßŪM$Ž6ÆSNĮmnz‰tŌ½M?VŠżāŠ‰¢a’[ė\×önėzŹ®čŒ zĶĒBe+•ĒŠ`ƒT·6qĄū27g;½y—†µuļŠ’hwf¼ÉqĆėUŽ2w>Ąų§į5šo†“ŻoHjea°! ņp>µįńŌŚ…Į±Õ–ڤnØ0¬½Rģ\uŠŌ×µbŽzĻ“ł'ڹ˜ą³“K™oģł’6Ć?ü“#§JM…›@žśt¾i­īœ?U ōéEęžöń†~bVŪו51—@F-¾—}}–7O qēpĒß>ę½ĆžŚ™žöńąeMŅFć"Cӏz®e±„‘źš§Ćm,iPjś”ܤ‹%Ä c>ų>’”Æ0ńOŒ¼I#ivśV“xŚ]Č ,aˆ*ĖĘJōõ4s#6$¶> °·VŌ斮gRĀ7ČĀv®-w‹ō ĪO¦itvJ$¼†YI¢ †Ē'žÕßųŠ-:o²Żi·L®ĆΌ©Ü掞“¤#¹ŁųzĆƓĮl!¹Ś ųŚzb½ćĆ^‚ K‹«$:‚wG‘ļ޲qfČņŻ4CZ²Ō¬ĶĀiSę^ł×Ē:¾·§[ź†éRģäŸ1…É/„Rj'č÷ĆĻ’/~ Ļįčķmī|Aå4ݶHz:Ųb¼_O×,“½cMŽ+blžP›×SÓ5Jw*özŸ§_<-6£įčn"(Å×% äķõÅq;šT›ķ3SŽÜésā9ƒĒœ\Påb]Ģ’ųRĆᒊuM2Y č%f·*›@F'…yž„ žL.ģ’&”Ķ“)žąéįÓ¼?"} CęFpĻäN+M>śāKˆēŸĻŲ²°*=(R×Rm©<śŽµk¦A„=õĐŪÜn<§ćųW–kחz‹ˆ/.åŗ•>čc“ƒŽ®2¹qŠĘŃ“v¹wvUŃsƒŸ§½vš\^!mB”øŻl$SµAyļMĖ[9t=ēU±ŌüGmoeŖ»Ļ8P®¼/¶+“µńV”šļ^]"ż IŒÄ­˰ćļŠ\ä9ō=SW¼›^…u-īG·XÖI"~Ćų€Ö¼ŽóĘ÷öSéRé25£Ē8o˜ņ€rqłSNäŲ¹ń'ā^„©\h¦7“Røŗ \L‘`)ĒB;żj9Ž£¢ųbēP°³ŗv'Ģ‘"\ć=xŖø(ö<›Eų©Ky#ßŲ‹"ńŸ˜óčkŲ<;āĖ>1ŽöRÅwöż)Č˾%™§ń Ž­¦:ÉhĆ3D‰ĶõģĶwz¢Y[¤Ė0ĄVR§¾:Pc(v8«æŒšxH‰¼ŗ”±,p=ś×UĒMĪŽŲ¬hø]é#}õĻ8śsÅkȄ£”ś3š3āN—ā/ŪėA–r”@ąēi®;ö˜Ōā¹š”uŽņFNǐ¹¬Ś±\ˆü¹“Óu GĪ–5upwgÜWuą›sĆŚų‡ģķu®īcÜŪž=zŅ*Ėcīļ {Gš†„ā įŅÖh„w¶īüÕŌi_tTńFŸ¦jķ%Ī™u£ĘĶžĀ™'Ļ4ź~9Õ,£Ōnōøob3Y%ĒÜążßc_ ųūB½°ŌnōŪöŽŹ–}lRćįDGkŅŽ+_AÖ„šę³gŖiĶŪac ŌŽā‚śŸ®¼O‹|'§k19v¢ŹĢ~d|}Ņ+·,­ņ¶_š –˜?i/wLÄ֖öŅ]ŪĀb*|ģ£łöęæ>-žƒtm ŒėAp>£ųā}2Ņ Gįī«%½Ó‹izł,;®z{×Ö±æĒŻcö2ż®¼;āł§M/ĄŚä˦k±ˆĪÓ¶WśP÷Ōé§½ģo“W¼†žĪx/l/"[ĖY£9Icqø^Ńš{XŸL×o,ä‘ͽĢe¾\c×š®YIXū+Į÷v§¦ź~×_Oŗ¢l’tōÆēŪž Wūźž>š?ÄočŚæńĻ…Ļü$>š/›ķv„s{’³×ŸSX·mIš?X„”Ž)kkl2ÜDćĮˆmĆ· ןC0e}Š$Rq]“ęŽJšnV•UBļÜ9㊠T."VHW“Éć5±Ź,›¤*§%OZŠHDū½½Ø%ÄER±#†,C/p)Ļ&ęQµ—sŲPRE²_·9ėķKĪå\½xA­n|Į÷}ZžmšÅÅ„¬Ę7ä ;X‘Č!»sŠ ć.‡öĻ’ó~ߗ’>ŽžĪž?ń]¶¹ń_ĄÓ}c¹$Mq§t‰²~ńåČé…Æ?ŅF¢Ŗ&‰óg§cX×FÉŲóūČ-Żę°¼OÜJ¤”Ɗž;|?kØ’¶t™£ĘZ)óቆśŲŸ™sß/Jó¤ƾ?Šü)āč/“[ėkt°Ö-ŹĆ”‚ä ūgtÉ讕J7xR+øŲ}¾ŲüÜćrכ8²¢ģ~’Įt?bX>-|"¹ż”žčöķā«Y®¼ØwHįsæ>Ų^}MžÕ ¹aŗS±Ā®ĢŽDZĶgcd^ń‰-ö™{o*4…ß”8 W›ųaģ/„{IĮŲ’yg< ÖčZ›=XųU$šĒŖųj[mFŹO”ŚČź$‹šļĪ+‚Ō›\Š'‚;¶“O“qŒĘĮˆqźå[ĘI—)ō=į÷ÅĖßk6ZČ•$ڟ(QŌ‘_«ŸvQ7’Ė–)y©­ļ¦MćĖGėցs1Ņ;ē8n*›M/d‘ā++(ägŸŹ‚I/,Ė8ƶAéҶt?všTl8½ė9¾€j]hėk0U“p5WHŠ“‘E2‡Ü:ö¬ŪBŻR_¶•m¼ēv+UYuYŠ[»<vš‰NÅF7Šč¼;š’S¹I /9n„W£iŽÓ-Żddi_«+ńó{W-Zē}*v4ƱG&ų#ŁŽJÖŗ;i”ņŠ8Up W/“¾‡_6š÷÷VŖ„‡Ł ē$ńZ ~üQųéāŁü#š×DLŒ<ķFcˆ!^ų=Č­`ŒĻŲ?€°Æ¾ źÖ>-ń|‡Ęß bāi47 üū×Üém¼©Ū£Če1(Ā=Ą+„+62K¹JØ“„tšŪL¦KŠ|Åź¾žōĢĒŽ-¬²³Ć. žļ\¾³y~±Œ:F½HšÜóū?@.̬N=×ė\Ļü_i¦h—·Öš“š”'‹g$oļvØå×S¢œ–¼Qńeõćæ•[M³ ³‚|Ø[ż¦łSūK~ŁOĆ[«Ō†īŅžqŗ5Ÿ»žŅŽų®š4ījŻÄo‹Ÿµ7Žž$]܋mVHō·,ęINd|ōŚ:_,ŗ¤¾dģļ4ŹIVv$œõė^:v9ŖÕ+ŪĶ<"™$Ųć'ا4s—9č{VÉÜ᜺†ĒĘõP\=+F1‰ĪiœåĖh$‘PgÆ­mŚY ‘VfŚ”‚¶}OJ™;Bڳ‡ģcńsö‹¾KME»š‡MŸŚRĘwŹæģ.;ś×ō³ū’Į0¾ü·MOÄ-āM|Śńu{ā&Ā3ŚøŖŌ¶ˆģ„×M“Ó,m¬­tė]8Ă0aM»€ąf®Ü£Ŗ3Ęvøöė\2Ķ¢¬SIe%/ĮÆWŃd†ŽÖ?1Ę01XĶō(×¹gu å;ā¹™õ$Ģ3«©īk0(‹›Ģļ+¾JóÆüJŅ}ƒŻźž"PBʃ*Oįżq[B=K?/~0|}ńĻĘ}T_j:…Ž•l°@žµ;Åx“v9ĻŹ»éFÄ·bÄVŠ qųU…¶Ś„¶ƒŽÆ·sVĆF–ōƒ .ŅĄÆgŃ>w0H®yLG½ųkĮņGj‘Æ–N~Q^»e”ł ˜§ŒZÄžŽÉ0 9éķMN”jĀŞvÕ\ēåĻZčb¶Š'Č7õ=źČq.ČÉVĪ}ė£f•v`śRSīDŁŚXÉBy=ĶCö‹ÅN&# hHÅø G˜åS½œ2®ą»÷ vę#ip¹S’qœ~µØ’ŹHRšģ'%½kB ą‡`ŪĒZ»©Įc}hĄ ?C^[¬ėļį˜äžjŸõ›pG’Z»;e>B†‘„‹ėކ‡$Kżó‚9ōŖ3i¦wbiĻŽ¬ I^GJīį>@p%s’=)¦'¹h<Ų>É#mlg#īšŚ¾YÅ’Ē BHČ=3ī)™É•l [t Ø<¶ź*YģļL_i²‘ 2éķA™ÓĮ¢®”b·”±p8¬ė)aQ’1ķ@2Ćc4B6@%Şk"ęŻ\dŽF(­äó#S•ķė[ŗ-ף곔•=½(kĪ?jŲJuā‹vó»Óր9*ź'‰ĖĻāP)N§#š‚å. ¾r•Ą<ƒ@ņ,2Ī‘|ŠqÓ„`x›J“¼HķēDrć žĘ€-ų[B}cņÕÉ'¦8ÆEŌdVÓѶ•`1õ gĀāVUa¾‘ŌS¤ˆŞE_[dwžz#"°ĄüŖućüß΁¦>+,īF)įĶt6ä‹s (ōzPOg©Ēœ‘Kl’Č8éU-ęŠč7o(nąUÓÜNF®DH®Č šk"āi g( žsJŚ'T!eAėR[XyӘå/Ī:PRw/ÜčšZØ ģłĻ&°¾Ä¦äD¬›IēŌSK Ś7ī<sc9ÓO(RĄt-ķ_ųźMbŚļS·Xī“Ūį¹x8!†y·4ŒKįW‹ü[a¬Ūéŗ¾«ØÜ‡ŹźXuĻ-ž5öĆŪ®©f²H™b3Ó­&h‘ĒGgå]•‘•¢”ļXזi5ś!F±Ļ½``ĻE²[HbŒ”eĀ½×5bż¢–UO˜{÷ C4M2äN‚ęčNƒ‘ø`×W©X‹]®ŒŪ€@¤g¶±¶,IƒéҹS̼F{p›žx ĶM „Ņ+jHŌ›WxOi¼ČŌ¤»sŒzPkŠóHt7ŗČÄĀW=+7Ä>kŪAāI×%xėÅŃ>ų„įūĖN;Čc)z¬Iį”ł—āׇģ|k å4øąŌćLī,N÷õē” Ńź|‰į©ÅĪ“|Ņ«FŽ\ˆ_%MzŌŗrN±H®!ą«‘ČÅcUŽŅĻGŅå–;ėvH%?+’>õØó6œł”$°ć9Æ.Ŗ:c¹ vśœūm£d|g üÅK"æ1ĖhŠ78cČaXš½Œ…¹Šķµ[xµ‰ÖĘ‘U]›hb{zśĒĮŸ‚ōKŲlāÖž×r–;J·ćšō(£’”é÷7v¾xxŲM÷żŖĢ“Ū˜MҘåUąąt®ų£Ī“"·»<ČĀįŽ@õ¬{ø–ID;3ėLƒ±ÓęāXb_9‰ūøęŗŪ}ÕXyć”1œf‚į~‡€üzųQįßgė–W·Ś1K¾é$A±ČļŸóҼēįm†“ii©Įām*9än`PO•QŠå¬uÓl†x6ÅåMt·qŒāeõõ값Žx-g“šhõ w&N}÷®”ÜåńN›āo^¶›, ņ…ćx«õ›Ąæ!ń–—§ŽÜ[/Łs#ņ·éÖŗbś‘QIųGÄo,öŅZÉ$$`61Ķ}i§^O-”sG:Īsœó[s-Ž9¢{jęčķäYSspqĮÆH[–¼Eg?.nµ¤ec’Qź ’ŅԌ„C銹$Ö÷퀾ǵLĢćīą‘rJü¾ž”Ģ0P“ŽÜŠē2;e—wŖźQJ¢4ėŸŹ€3®TĶ)ƧO„b6‘G÷ņqĒJޫëcf S²¦F2FkĒ‹§¼mµ"*H#ļ ˜œĘ„Ų†D#ć8ęØ5Ū鶒ū#Čć¶h=—H×ęŃVĄĘAõ¬Ok%³µ“üųēž¦™Ļ%©į7š­ęšĘ+…DCÉR:ŠębŌ,Ƥu&īp{sCb*ż¢5y"b§Žā­Ūj@ĮŲćŌu¬¦śGb¾„¬=ŠUšV*§©ķ[vƒe¬[-ŹJ„Ļ<ÕDNgœjĖ„ź2ŚC)ķT–ƹ§„?”#īšn!\é Vo»µHźµ%¼ŽØŠģŅćq¬å£,×¶¶óŌŹå¾^+ģRĻS/e‘NŃļUōf쾑LįĒńzՋµE“j)öŖ“±*D66SŻ0{WIÓ½lŚÜ]D³[ź¾XĻOQPęZó9L"9mū5ŒĀāAóĄĻBj ‹³-“+ ‘67g£–5‘O’ą1?6'±BĪ®3[:N·-ƒvĢŪn²“ÓÓ+Eä!‘#R¤ćéZŅŌÅŗŠk—łUśv*­¶›*…9=›‹3ä7aøÓģc1K²ōŻżŚ£ā *źĘŃŽ'äģĻ*j,oœĘŸ*ČŃ,é°ēęRz~5­s=¤ "H±~÷ZĘHŌĢw°óH_{cę±®“M·¶Ō8BˆĖr ΤĘźEź gf·eū©Īź4²ģ’\+Ą:rø¢Ć±Ś,žj©(ī=+ę{‹‰ȟ(łI‘¤U‹Öé'“#«UĄ+ÜÖµ³¬–ŪCĄ’q[Åh7+ŪuwiŁ7£ǁVbÖo#Ž’¶łxäWDvcH‰ņžn¹ÅWF…UˌRr°Ļ2ń-ٱæai"Čc= t .ą‚iĘ<č+7&g4uÆaķwn„u é ķåĖ?ˆ5$ņ•ąÓębqæ=H©.ģgŒ‰L[› lu„'cdŽfūSŠDh]q2 t¬Eä·īrO ”0/Xhšˆø·ø‚{ˆŅ2xź¬=ė£Ō%‰b”*ątdśÕ#)Jē5¤\!†āhdē8ćó­ų·­”‡ež"ĆŸĀ‚WcłœńŽ·āoźŗtšnÄ"¤„Īp tÅzķKš·NµŌu ·ÖĢ–ł£Ī3čq‚856:%u©ė*ń”&x4v¼W€D#…į}‡zšßˆ„ b¹ŒįՆsō¦d™ź“ė{PÓc1n+½Ap›HśćŽŖ'„õkØ/'–·†OžD ¹ć5‹ÜøHą56K™DPIöŸ²ĪKäćiĘLWmšņõ_Ä!'Ó£Śēå8ōē>ĖÖu9lt`,“fžń‚UŲ1Ē_Zš™[X¼Ó.mF„-ŒJ̉,¹ņĮ=Un“"Ś’žÜjšÜŗŒÖ¬¹™¤yĘĒB}+æų§rś/„ļ­u/< æ+pcł€¢šž@±ń6›”éך¾§ew$—Ęü¦d•s“Ņ½[²½³šŖĆ¦‰dx·G!±œdÕÅ>£Qw>G_Š~ Óµ -õ†M:å$ņŹ(+…>žµōŸ‚>%ė—–0čח_·”DNWFr7{ó׌Ø×”ścĆ%σµXŚ'kÕŪ p@¼~5ąšÖ橬sOpÓŚĄ›£` ć’ÆS$Nˆ¹į_źśź›Č¬īäË>@æķ}ƽWVšlz—‡ŸĢŠ "öÓdŠ”HišGĪ)ÅXŹR6¼-i}§Ų¶”s €J>_c^uć_‰žŌ^öŽxcKųŸ,čųU¶? ¤ģeĖ©…ańÄóX͆¢ļ¤ÆšīÉ'°‘®£@ń„ĪÆ§jŚtįTyÉ$„.x?‡zŅ×5„zo“č­a‚¦äŒäädqķ\-Ŋkd¶A<2ó…^Xż+;šJVEO ˜“ÆOa{a4öi%8*I# {ܞÓoā“I£VB±œrĀŁĻ)²] įōĖgāi™wŚeρ‘ōÆńω|7y«ŪŻ[YK9Ÿ9 Iż8„bc'Ōņæj^y/ ]ź[?y”u{—¤¹Õ-m¼Ūr7>ī©ųwėMš)t=WškHžÅrŅĄzõϵ8\ŲYčJ‰ä ēÆćR'®ˆłóž kZ½ÕuĆväČpø;Ų\WžiZ™ĒZ4šŌW&·ŗĀķœś‚)£XŅ>ōųėńSCÕ| ¤BŠĒgq䟓:¾ŒG/ėųמńGö†„Ū6Żä2ņ£ßŚ•‚4÷>›ųkāŸ‡÷wBĖÄŅ[Ė©¢ķ6ä%$vü+ā–ƒ„Er.“—¶Ó §rH¼ī?J‰»•ŚĒšĒį˜-žśĶXÉÜĮ}»ŸĀ¹«Ķ6ćU­- {ŅĄłYēø™J‘gKÓ¦šÕȆņŽ7•³÷Įäū}+©½»ū“W×pɝŹp?*v=’įĘ·¶ ¼ĖSaNr§ŌW]ńĆFšf—ąĶ3\³4½BÕYd@—9ĒćO‘˜ÉŲų¾’ÅwšģāžyXń8Į#9®N;\HĒ*„ĘŽ9“б -ŽĆWšg‰o4ˆ5]Åqv¬C[ēē#ž•ĒčÆYkk¦k6óE_x «GE;Z®”g§ėzk2\<įXåŚg—Ļ ÆŅ?ƒóčūlļ ĖAŸ1‹eGÆ­#QŸl|ā)/’°Y`ʈĢdüģHå½G#„|-āæ„ŗtŠ uk™ŠMŪNG⢠õ%U±ą^%ųisį‰ģļnžgł^FĄŻŪ‘ŪükÕ~i>+ml\jkq{hī¾XgŹ;ėœV‚ö·?q~ėpXŲčķzĮŁ(<~ļcł×wń{HŃ㚠K@¾ŽśŹUc¹OpΤuŠÉÉ=O€>;ü4ŗńf–Ž"°€ĖŖZ½c@7 čļÓōń\š4Ös˜ļćXNģO^;žµŠVŠÖ:£¦Ņ -dµX–e•w#¬| zāµWFŗ†;ČŽX|Š>öRi—cæƒĮŚĪ¶³_ŚA ¶ ,m–é“ß=+ʵ}*M2ł¾Żš'”*ĒŻž/Ē?„4 Rxrö³ynĻshü¢ åOךÆIšZ¾¶·»Škk£ ź½÷õ§)\Īg×~,“Ҭt[^Ü\ŽŽĒ ³7³cž;ó_|V¹“Å7šs,"õŌ!šÄöķRLÆįų‹Ćö Æ¢K<8(æ1ĘHīF+āÖMST·ū*‹{ž|µ'=Oōżžķ/“+Ó“ųÄŚOŁų‰żÖÓŌżĻZÓų¹ć‹­eSE²Œ\ ]Œ¦8jlś Õ„­Ķ·ŁfvQó £•v×zEģhÓiR(øq€Č:ŸjĪR"Hė| ćķbO kž ń}›éś¢ŃĪ Ćć Zł?W›Ä¶ŗĖÜZ¹Žt˜¬*Đł?xõéQĢR>ųųGቇmīµGµ]KęŚĮw“č z¹į›ff’ŽĘ6,¼¶9ĶKāZę‘oo$ÖM1]7\{×ĪÖśWöæĘ]#Āž {›,Ī"ŠHŸG÷³Ÿ­\eØļcßµ/ kž Õ5-6ĻP}_ƒå`ū—Šā±<ń‚楎6²óķ£²]Ū.×+#ų‡„mq\ū7Ā’|+rņź0Ü[Ķ+HKlĮ‰‡°ķ^ƦüUҼA’†ļl£³‡Č ›IV9žž Z'Ī_5’x—ĀŚę’·Öļ©ŚÉå4 0,$v5ņ‡…~xĚtZö™Æyھ“tģņń$ŠO8õĒ-XqO©Ń|nŅ>Ūį¦Ö­ķl¦‰I“¾Ėæ#!Ņ¾(“LÅ¹æ²ĒlŽYWić#ņ©ax3ÅM-ʾĄÄb8©%¶†Wj”2»CČ Ś0>ńż’åŌõ«]WĆŚZÉv±Ģąœt+žæ…}o-½Õ³ [xĪh†¤‹ek«Ć6“v‰%­Ź˜ä%A+‘Œ§Zü®ųŸąŲ¼āĶK@ņ~ĢWh·°-(É„}l8«hpZmÜśn©k«Ū4ŽĀĄäs;b¾Āńdš±>§ˆōšŅޘeć $ź ^3S4tCcś+’‚CžÕ·_>\ü"ń•õ½’Ä Ķń—ō‰` õ+õ¦ŹīźĪśŚöuhß'Åģkš³¹Łī/‡ęxNM[C¹{_X“#@’rxĘ3Ēłķō¬O‹śü$žÓ~'ihŸWŃÖžŻļ&ƒĖŽćö®6¬Ģę“?ˆų*ģć¦üųš¾9š¾›mešĆĒ‘’hX,0ķ[KĄ3* £$ē¦kńŖīY.žĢŪĀ»! c‘]‡ SuerCŌŌØåĘāCsŽ8®Ó’E–gE*ģĘZر’0\ƒĄ‚®9`Vp7f¢’M²1† &‚PÄČ皸nžB ƒéÅ‘•‹¬Ń«)łŗąTŠH×`ĆätķAŖ>ż“æiožĒŸ“ÆĀ’ž›Čµ·¾^"·…¾Ó¤ >ģ«ĖzWśc|ų‹ą’Ÿ <'ńĮ:ŶÆį½bĪ;ŪI”2°u ĮüzvéQV7‰Ō£„Ī‹SÓw”T—÷ў+Ģ|a”GŖX„Ԑ+ÜĀ H1Ė!ź+͚Ō$Ģx:o ųæSšMƈ­õuW9R£ 9ķļķ_šß¶’Įˆ>'x SŌ.“åƒVH~Ézź™Ū"ż×õĒę*PåĆ^Š/|5«jzµ Cuo;EČĄe>āø»²€aˆĮā»)ģsUD ę2«3&:ŽÕ F¦9®“s8¢)`EAåżŃĮē­ ŽŪ~NŸA@ģLŠ×å_—9’'y2ŪŽžō nh[°l1,Ųõ*äe—1‚AĶ]3Ü?fƏž'ż—hƇ?üywm5•āE©Ā1²k6 H¤ż2 ’E†_<+ć£ąé—Ń?†<]¦E4w!ŌĘÓdŽų*O¹5UŃ×}in©&—>Šń·‡„PÖć–Ņ[+Ūug‰•/=½ėĖ©M-mĢ«Gńf‹ā_†~"…gŅukY"E|2¤~cņž|šQ/ŁÆZż‘æjųfźÉm¼1rŅĶ`у“ŁĄüW:Z›#ęķWßg$wp‡ŠxĀ Œ2Šó WC6s]@»9Ę?­.kkžÓš²ā ¢c‘Ÿh䟽_PkšƒāżßNÖ4«inš\* P1Œ×5Jü„¤|óāOŁŖÉ dŅõ;¹-•·“rĄ;wĒ^•ź³7ĆĻx7Ä÷:eę£ęé—C|QĘN€ī=’„iO0[1TŃś=±ŁFāAøć’kWŅŅP­²?;¦q÷«Š§W˜ņėDĶ·µŗ¶Ė€ŒŠ§äķIWĘfv6=zź¦ś’ZäĢ€1QVķ”Sø_5f!6žį”ć Œżjķ^Iˆ p}MX’7”°éƒŅ§Ó­+ˆäŠ%µ‘ł}£ļcÖ¦O œ¶ö3ĘØYŌp޵Ÿc$–Ó”h÷)ɦ+@·vłUwć?7C\mͼņź%¦<Ö;”Ą®rŌÕXųZėP€¬é'ŽFq]6‰įų“ÉL’Ø‘»:W5Z‡M*G±čŗ½­“‚KxäĮĻJēg×mÄŖ;cŠįnēl`S]vuį#ēŽ{Öß_]j1é¶Ņ_ź“ ¶€åÜścµiJ%8e|ż‡üwćŪ'Xų«e}įxø†Ģ4Ź;9ļŸn+öįŸĀ |=Ҭōß hvšŗc-ŚŅ’½]Ō×C6ģzģź‘mŠ?ĻśUXō›‰dIå™ü pPt5©‰±ukDŠĘ£#µd\j?c™#¶"ea‚A G=sØ}™žTV_Bj¦£āk’īhķć ÷³Į¦m”š÷޾-č­®jZ?…õ‹_ķ»wżü .ŻśvČÆ‹~7~ÕŽš›yˆng—Tū©l„e˜÷-[Ó„ÜéŁŒoæė7Z·‡4YnŸN_š4G+Iƒ÷±_šž)ńŸŠ|su„āżAõ Š0XĻ(™=½ļ§ lqÕ«ŠäQć.¾S£ cÕ2Čc,޹µŅŽ)T%H÷),£EO¹ž0ˆ8ėŚ§[™¶hŪX6 2õąVͦŽXČ×-1ŽłäzŠćē¶ü1ų1㟊śŽ• x#Ćw›\Ķä™äŒ¬j:9ÅA²wü÷KšĪ†æ~-“~'Õ#ˆÓå„ķcŽĻ§­rÕ«Šģ§Lż®ųąoxzĀż=ᘓ mĮ…įx@+Ž:ś×ŌŅéöÓ[y£±Æ:r¹Š•ŒµmŖ±Hæ0ąX_iŌ`ÕĢĘÖ,>W}ė)JĆ:e¶ņŹ£ØT# Šé“cĢFŻŽŁõ¬€ŻŽE³„Ņ WāBÅŃĀ•żED£qžs©x®ŚĮÜJ-ćė¹ņÆĘ’~š•œ’Ļ­i·ó")žwö«§O©¹ł‘ńöŒń£›ū"ģ« ²  ŖA_1GõĶÕĢÓH×.ķøŹĶ–cļ]…)Xµ“ĄN¼œ±žń­h÷,jX€ŻėG- ›¹©ea6 ćģ±aĮ"½'@š%ÅÓĆ%Śł*NNFF+ å±ļz'€mV8ŽŚ0®:q^£¤xf[r‘Ė zäqQr=3CŅWOŗä $$aøč+ƹ‚ÖņUŠĪ2’gõ¦eĢĖšx}ćMóÅ 8늘iM­eŌgÆó i³›‚ēĖ»!£1²¶3޵£ØŹ—ˆ¬ pGzÉÄ9ŁY!„$ ŁėŽÕzńV(•¶ õŌ;‰Źē+yw+īĢL£=qY­|ģø'ojŠ’ķ¢4Č\°lzvśÖ³^Ē4lsÆZȕžWƒŲńV¼’ˆ ƒŽ€3¦D B“ži^DĘ Ļ  0˽6©Ü¹ę¹ox)u›18ŽéžŠ:PTmŌĀšßĆ[? ŻOyg<’Ķ*‚ū’„ś éeĖ”©lŠzކ¦WčS—c©¶uŐB’§CV#ŽĶ”xTøéÅdfgż–{gfG?-ʦ„1*œ0#„m  µ»ū^VEPŽ u¬»Ā‘\°Xņ¹éļLÉĖRåµŃ|.Ņ…dų›O¹¾²’ Y.>ņ’8>՜¤.frŗ ¦”`š]4B Q¾t<ī®ćR¾ūY. BĶŌ™ö„©¤[f]›ŻG I$,™łN9Ō%ōóƒm<‡#kS9"5¹¾¶™ Ūö‹nyī*Ģ7FM€H’yķA&Äz–£§•ˆŹE¹lā—SÕįvĘŽiĆZźK33ɵįXā„»ŠćĶIa Q½i±¤Ą%™cfEv8ē ­-OGūĮŠ©Ę3ƒŪŚ€ø”# łĒ<Ó&UĻ'ęō  ‰™ł@wGßŖ[HO,?Ī€,JūŠøV+Ō ć’P”lžt»¦]\}”Apåł<žõ^uņ˜¶čoC@N¹jĮÕ¢žy¬ØŌj0½”źÆČ“ ½¹Žv‘ņW%|Ģ»š aĖyl7­Å¹ōjŒ³iȈlmŻh£gmm8”œķb³‡RBlĶŌyn-.E¼bņ0—`8jĪŽ%`õéA—.¶5"Xܑŗē±ŖŖ‘r |õ¦I³g¦‰ab$ņŽN«2dŁ0ˆ²ūńH|¦½µŗ²H“œšzW}£č‘j“”GÉļŌÓ5‰­āoĻalņÄÅųĒN•ä’Ų¬25Ā,£ų±V­rk/^ŪĄé天«Ō~5ó‡Ä_]x¦ökŪ;Ł,n–ć šŠŃIß¾_é2<ś½äøm%ńé_ED¶Š¢ĄŠ©ü©2\Žn÷I“ø˜ģ|6sœā±O²Žg,|ɗŒŠÅ¢ ń"1%›qZ³ęA_N”„ČćVµ™^7•”tā¶źk¤ŲIcčh2ęeH£‚6e1å{ƒVÖ i2c_-== ¤ČoįƒČ‘%\®1ŸJńoh)nņ\Z3qŌÆqY­-ŹHÖķ#]A·Čź}kž17ŽĘ~”įKj—öń]Å÷€eĪÖō4±ĶkköK7³ŗóapc™ś¼WU9õcsźßxŠÓÄ6Vń$ĀYģeaŽžµė“čP#$_×lj}Jd3é¶¶ī­g;Ą;ƽ:K•’·ņcŚF7Č÷«RDryÓfµ. øyfź q]“ŌX%Å̈.W<‘LøDēļ“˜ļ ž£ū\OźOQ_üAšŻ‡µ[yķē»·Ó>hü—l 9ĻZęŖŽŚhˆ’Ćqiņ[\DņÜoīłėœÕo“ŁE„ŻIi66Ė÷«…«ņž}­@n#’ åō†5č>)^x3QLŌ|×ӌžR|…‚nÆēĮŖŒŗÉ©?|_eØD&µ¼fC‚ õĶ}Éš«ÅV2M …õÜ'äóJŃ;œĪ›>‹¼$‘¤źöĮŗ‚zŽŅž”ó¢Żœz×LUĪiÅõ,5¢ČģeNJ± Tƌ8ēŠ‘Ķ-ĢFF*ė’—PEJÆņ ’į˜ÉŹw©čk–9U÷pA M”’q³Ģ Fqõ¤74‰ƒ»ę¶5+ėRół“£į#ųO+VqÓ2\Ć.sžjøÓä)!V17$B±XĖv„ŌAW<09ŻZśe³½†[®=)GĢŅŗš;UŒ¹<zäļ55YXFŽćŌv f]åą|©‘ČĮ>•VŹł ¹\  ŠĪ­qäO7ČŅ9ē„qöv!K2 ¦ćA”£cUžŃ³»2ŪĢŅC‘”'õŚiPĒpc•>B Z:[ķ*«DQĆry…d )¢(’|ńŽG ¦ę›ckö…£®yī+Ō¬tĻAbĀź­or ¹pTžĶn€ņM{PїV0Y]D̹)ąŅŪ\³) ĢSéA‹‹-nņpŠ)Żż+*żfœņÆZcKb±½I&Œ0zĮ‰vJ®xĮķYLŽÄÖŠ¤ēiłķŽŗk}?*±ŻG"Ą:ćÆēYMRĆ™=’ļUä‡nO5© Ų¹—jLŃd:ąÓK°Ķ[A’8c¹[ˆ.†6N@õ®n-"7żXaĪ3÷i€ųć6+ŻąūÓµ+ėXŌI°9'wj,95†W c–Øēh­x5[ąÓ@ļ;sŽETcqķ|N~ky¬‰ĘHmżŖ„÷’\Éæ ē -i!²ä:­ć-Ż“b’Į¶óųśÖķŖ““Źr ¬KŒ»źś^x‡m¬IpżŚøy£ŸM! Ąćb Ż+Zš¾į<’”åīŌ±jāż¤³„42c*XqųQ`±ÓŚéWńDeh%ž2ݜsY÷Žt)œ®27┣ŠVžÖŚčĒ#Ū¬3*ķŽ:žzÓ-¬%eF-·‘žŃ”#=MØ®>Ź U»JšśŽŪPŅŽRg·ŗR[ź?„obO7• 3ļ†A*‘× >7øyŅE¾’š7( NÅÄž^d×uÆkPF'ŗ^’&<Ā]ˆ99ĶuWz&‹āYīn­ī.,å#Wi9ņ½ńųšõ=”ęS‘œæ Ļ„žKŲä‚’|Ū²Æøņ8o”ŽxNæž×ūFĪĢ­ņńĄē=’<ֆ²×BļŒžź3ź~³ä^l>\_8bĖĪON:W…xÆGŌ“­LÅ#¹Vl`Æś²3œŠeĖ„‡_5õ·‡N”¢Ķ*ŻĄ ³ąn`­{ǁ¼e%æƒ.lµ›ĖÜ"Čø1Ÿ_„e G²Ų½õżĀ Ė)ūĆ»Jģ|+z–’ʱ$¦#¼er¤Ō#ŲµŁxæ@}Xī‚•œ©#!ŗk„Óķ5 kZ]ܵäMƒūĀŲėZSŲŚ1±ßxkÄ7c[[+=NO%䀁Ž?Ļ­{õ÷Ä=#ÄEφ|U§A©ŚH’ø’B$)µ{ōĪ Xü…µ>Īf°½žDˆX¶`^xĮ®÷Ąæ4hšiW×±G¾F)SӒ{PRZ_ń?CųvÖėŲÓTµø!'ŁÅĄ'Æ5ė ¼ ģ³ µŗ»vV2ī œŗ~•Ļ©R-x»R‡>(FæŽi~Õ6ÄT9XĒqŚ·üAį’į•ź@3Źį|ĄĆØ^¤SŽĒTÓ¹é ®4ųt‰ōX”™fܧlgåhĘq^©¦•ģQ;2ł‡IŒŠ%œĪNä’t=Hš}ĀĒ{k.­,BX#ņvąõĒ…~Hė×QÉÆź’Ŗ³Īd"@2q‘WėaĘLé¼'©jvQ$RZ¹æxƜŒśWŌæ õMN²ėšt7ŽpźĶ‚£ŌŲčS=ĒVž¶äŃf­>ś€łOcļ^ Ćiö«½ nņ\¤rsž˜•“‰Ÿ3=Ć’ õ‰/-n/ÅŗK2„ĄÜŲ*:ķ>żkč˜tĻ²ŚŚ[G2·*£‘WĖde)—¾&|(šĒŠ•*żJ»<Ä:zi~#ø»°IDūcĄ°§­z„Ż÷Ž4DЧ–eGL.ÅÉ Žæ„; ĖCė?‚ tŻNĀļFń5ōм–ž\n}ü}ā?_|ošRüų¹źet¹<¹I>īē¶ĮėÅg(ėdkŪC֍ö©ķķ.„°-É^:zWÖß³GÄ­#]šeޘfÓį×ģՆY‚±SxōĘj͊~7ÓlęŌ”×ģ®ßķČJÆĆ._μ~ė[ø³]åĘüž€ŠdÖ¤ž%Ó“ßųJ'ŗø‹r³$C?0Ļ|U/…×Z·†,Ēö¼7vp 1?3{ćņŖŒ¬Tilųć^‰.ž–’_G¦]Åž>ä€HīzW”|Pż„.ŅõmoK–ꏶ^[œĘ%,¤ņĒR†ĘqM•~ÜŁiš¶•«Ļ érV0yÉ< ×מ9ųG}©čŗgl,įŗKu’H ˱<õļV\cc Ą¾)Ō“—[M*åķn]ĄŒń’źÆ-’„£ÄŗwˆV=Jõę¾’ggGÆLPUßßźŽ+–Éļęghœ2ärŽßJöoż±ōE¹¾Ś³«Äd|Ćż+žlFä։®j)4oĮ†=3õ®rx~;jné=¹ČĆēšĪ3ė0Y>§į•Š+É-®Č+ŗŲČBłé]ÆĆ\żtßė0Ü\F>WĘ ‘ŃOųÖ¶ógÄÄæ®<-uo r²ł””šė“>•Sāǃ×G—Ć^5±“Ļ“łqXƒņ7ҵŒsŗÄß馕¶µ k%Ę2vūēķ¶·? ~564½8|I3bźĘXćžėšŅ1Ō,y£¢ÆĆK½kĀ3Ž_Y^Ȯ自g _¦E{_ĄųƒĆæļ5Æ—¾Ō,™Ś5‘ŚX²NN}øę“OK°<‹Ēš·‚¼Oń ~#x]ZÖĖXPu+}ßź]F2£„vŸ `Ņ<3āī¤ņī­„e}ĢüIķōØ“Š–Ļońę…/‰4K‹§@ś}Ņ8ŽD\…'”SŚæ1tmbĒĄž"ń.ƒā ™āv…Ć©ć†}‡ó¬åž§Žk–¶Ņ^(G ±v`»{ę¹ū/>I’Š*uŪĻ•ö: ĻcųiāĻ|6ń•Ž¢‹s%ؑ ¶Œņqߊż‚Ń5ĻxŹĮļcužŅāé"ŽaŒąž5›•Ī‹£—kH4›™£YK ą?^+åĻŚįģ'šrėśTZĘpłHžg^¤–ü:R1“W?="Kn’Ēø‘Čō⾆ųāč4}`x;Z“šēKæ2«°HGpÖ[A~Ģ’uæŲßö®šÅ{[øķ|"÷Mo¬ł¹¼6Ž1Üg"æµŁgÓüC£h^>š„å¾§įm^%¹‚h_r‚Ź ®G’Z±Ŗ½ŌĪŹrŠö+¾š×Œaw”2\G,EsŸ_ҾǟģžńŚ«{į=V&WB8!Ü§õü½ėžPźQłūo~Ⱦųõš‹ā—ģł.žŸš“YE6»ą»‰N Č2ā5|ä œ?…„ ^.Šn¬u]_Iæ°]7_Óī$“Ōm”`C:1Vuź U-)É8žQ<@FFI5Õ‡CłWlv8gFb‡ŒčxėP]JD\t¦bA±mį™b*9ŹK )œqAPQ‘Ųü¬½*VG?ƒG­„µbI+Ųži“<Čńŗķ݌8¦‘Qv5ć.,®ķ%mxʶޣŠžÆ’ąÜÆŪuG×?b_ˆš³ŲėZYžŅšuÄ×!Õ³ež‘“’p;3zr[”Õ t?®;½4“QܼŽTĢ>aė\„Ż †]³Ä$žV÷Æ:¬M.|«ńæįmŸŠōMcK†{}?Ävķś=܃‡Ē&.zd_ZüßńW‡æ·l/-õ4Łop>ĻxŠw”„sŽĒóu’ż˜u‡>&o[č syņ4xhūÜūWäėŹ—ŃÜEøŪøÜ¹ė]T„”…R#€™béŚ£˜¢‚"Vv'Ö»bīŽ)JŚv܈ŹyÕa± †,sÓŽ˜¹É|ÉWĖ zńSG"#nĄĪqŠ Œ‹ŃK;”öĶHŅHīĮHߌńڃŖ4ĪŪR²»°˜ŠXʶ{ū×ōŪ’*żØąńĆcö4ų‡¬lד­÷¾ŗ‘Č`ØŪ¶'‚§œÄśTÉ]4vәżHųSāś§Ćūź3M’ 'ŁueŲA ¼n#Æ@Jöē¼¶¼ƒOžY¬nāŽ€‘^eKšJW2­ƒÜÉ$mõk'ƒ‚Ėķ_ŽŸš[_ŲīŚąMæĘ čÉ?Œt(™ī1ó^y“žGå\’4ƒčš õõ½Üśf© ‰{o!VV9č}Ę+¤ń:Å&Šd†’é[!waqܚʧrÓ±Kį~­ZÄ’¼,Ģ8G·­~€x~>ēK@®_!»×—‹løĖø×‘ ¼3ø‘G;VēĆŲļü!āHµų—ķö˜*É!UO/”ÅqBZ•'”ö³ŪĆ©éÖך}±Häräē?yÕÓĖk4‘Ķ«©åXtÆ¢Į·k3ĶÄ^l³eķŁXzÕ±“ņÅ÷é^Œ%Šó§ŲĪžĶc#+ĪzŅ}”ŌåsZ©4@­såŹ®sżŽ™,;¤.šĆ¹‡aU_IåBĮąŁ ¬‹}YY|¶GĪ>¾Ō¤€ŌK¹™‘ĄčkA®yd‚[¶+9;S…ĶķJ½Õę’ā<ąqÖ½Mš4:eŹ^\FĪĄ dēĆV­“;éŠ5„hb¹Sī©—Q)‹Ļ܃=yę¼ź• •;üÄdX‘T®c±²Qys8D' õō©¤l‘ė? ægæücæÓī4›Yt/ KłAé…Ē×­~Ąüż¾ü-·Cöń&¹³-©O÷‹ŸīŒvž•ßJ$ŹGÖÖÖö¶6ńÄņ½ĖĘ0ŽJƵhG|oBG–ƒŽz×TccžR¹·oBTżóŻhÓõ9'x&øO;ž“ÉJś_‰\‚KpOµ|įńö”šĘŸ¤jɬė?ŲŠŖFfÉlv ļZSŁÓŲü0ż”m Śk×ļįū{{}i²‚Hsē\ö˜Wå/ÄÆ‹Ž5ųƒ®MwŖź×6ŗLM˜b’ēÜ×£N•Œ+HņO=Ć:ēxbX’rI§JĢÉ\/R}ė¦1±åŌ‘M#ĒļWŌÕŃä½ŗģqÜUš6‘?8ćµlA¦4Ģ¢$ł¾(GO”č:¦µ}“įķ"÷XÕ¤•aņ!·ĒA_“²WücĘ“NńWňo4«u;ķķ#]°ĪvČĘøźTQ:”ś4ų9ū'|1ųY£čŽ𕆛=š„#b²1O#©ė_` Z8’µFŌP0Ŗ=é^tēs¦g-ä:­ą›Oū*ł]q‰G\ūW£Zʗ0Ą?ʳnʅ˜¬Ų~ķ”6O\Vn„lŃłwŒśV-€ųd’ā,JH¹Ś­üUĢi¾!–ßSš'o,ä© i +‰­xŅ0^“žG'Ɵ¼ońĖĆ^·ø>%¹xāŚĶFĄž;ųUF76Œl~f|[ż°uOC}¦xō“l”ŒĘńżļ_zmÜwN¹vfā€hmŒ’Ø*ꔹĶW¹Ć—-»ÓŚ‚yY5®œķ’£®oZĆeø·‘÷åqĒJ“.J£Č]ø“'šzŖ4`ŖƒģED/Ś[ ŒćÆJĀŌf Ø#óė@5ā]Fč;(ü½ÓŽÆų:[®$øuaž ž“čŅga¹čqŽ­.;C8ǦsŠ•VH„QŲ£µWæiŪ,~t n  –“Ööåbt,·C\ўųÜ4󠍘ö4jYW 9R„sQIcn MĄŒ«ö[øĀKģm2Ė/„mĆ3³pžZŸA@@–į³ZFEŒŽqė@š~øė ƒŒŽ•ÉŻÅ²öāušVp[ }DΉ•‘†Ņ p:†³3:) ĆÆ4 #ĶŖj’Š×•Xė灬nÄćĻ„uZéćxåe“5&Lō§ˆŽŁfGF|m®bK9”:ķĘqփ)=MK xž6G(00+˜øżÅƄĮö WF¬z“½ŗÄÉ߃Œq·įА3Ž”š4m¬`n…@Euš-ŌŚTźčŪ™OÆZøĀå#[ńµÕĶ£Į&ÅĻŠņ›«•œ0v<ē§*“LØ +sTīćSē§J™JĢ Q±ˆF8«¹‘Y³ĻåMH.\ņ śÖæ§½¤qßY—7 Ć=©-EĶ­‹pČ 4€#-ķUQžģ”·_3w©’&{.¢ĘC*H5 «yĮåėŽ† ČЉšīR qŠ U÷ņ­öĆ(ä‘ó ÕK;›}ĢåŲqĻJĻŗšķœvā\¤‘‚:♬›¼q¢éŗMżÅ֙iXœž†¼éuiįG‘›#ZGLYĘjZŌRēO¾Xī-œµæ‡#Ö¾;ų‹įIl/—ģȲEżäéŠ\ČÕAž-Æh¶ŗĪ™6—|H¾PGozųÅŽŌ|®]h7ĪŃ«;I ūźNGó2™¤bs÷z-ōÄ7W8āSørvžG"½oĀ"ŽźĶR ¬Üc ø}kާ‘¼67'Óļ!淑#”žĢ3Ļ5Õ]ŁČˆĶ ¹UPFÓ÷MqŹV:bĶm3YV·h *¤`±ļY:®­RL`ަUĪ1ƒŠŚ™…Iüć-&ĒT²{™¤Ó ówĪĻ­}•„j){n’Ēy˜² `żąkŠ„O>rg@ķ½YBoļu¦ƒ2 0$F&ua×éI‰1šDĀPńĘ6t"¶o¦µ’Õ!Š#œpŁči&Rv9ėĶ2H­ŒŠ«~Ķxē¼$ž#ŠÆaūr*ƒœ§,{Š™³®œŗŚi:]Ž©«Hl&1ĘL- ø`0ź+˜ÕLžk-”¹źxåMqMźtFZźEc§ż¶ņ($P…żz}j®±¢ėŽž;µ¶ŽņŻŪzóŽN{Ō¦LŅŁ MŃ~)éé£ź"ĆX‚9%ŗYOŹ\‹Ę}+ź–½ŗšž¢"˜‡±±ŪÖ“ƒ1‘ōo†5ÉõK T3"a—®+ÓtˆÅ¾ŌÜä0sƒ]}J¬ź® ¾Ģ܇ĖĪ2)öבžń‰p1šģLįžęMę®°‰#Žs€k:ŌRČį88ę‚¹ĢčŚuŸ–Ń"ŪIČ įśżĒŲtū‹øä°ņ“ėAw¹Ģų3ÅZ¶± ­*¢ŽVy}kŌ“‹Čn Ū–_4rFph&r4n4›i¾ąä“‘ž”Z[¬…FŁ‘Šž“Jn• ŲśTŃ!£<ĢŖ ć³µ+ĆĘvø#)žd÷į w,Ź8ÉēŠŸ‡°éšŻę©k;™]ŚB²9źqœW°xzūO»³†ŽīŚSr™Rq€ĄPg)tDšŒ‘"fŒ'ļt‚—ÓK„xĄpqĄ „ĘE92“rĀĮsƒ‘ĆUFј³°A;gƒYŌ5Œ®I‰4n'ÜL{øĒµ,ŃĒhŃņĢŽż+ ²ŒŲ<É7ĆēżœÕf¾žŹso$ČlҌŗ06ģo̰:ĢͼśŽ s×»ķ–O-Ź©=sއ>Ć^f/™}4!^yQ·d f²®Æ%””įW×­.vƇ#·yń4k ''Շ„oßŲi°a L#gåō­# ņ8ŻJ8QŌĘQćFÕ$ī惂 PłYQ®ļģļŽpDˆsÓÆÖ½@ÕįhÕomYĖ1< @āĆVžŌČLL¬ĖŌg‘õ®NåÖéeQūæ\š+H. „cÓķ0;ł‡t#“ļ[šu®ķ÷P‚„ō±­,>vwcY¾XV4!6øc"¹Łźźfk‚I<ś ‰‡;qf…$ A×­d$rC‚’W°¤„c7$Nŗš>ę¹µ Ou<z”q­wˆHR#Ą8ķéG8¹‘ĻÉ(‘$P§nk”Ō5G²r»…[;Ąč1SĢƙĢ£x¹äK‹=n8§¼ņŁOńddā·4‹łµH×OµT䝄…{Ņ‚<ų3Ńü? ¶zM妤nZįPˆŲ’Ųē¹5ÄxsĞ-š·‰īō«Awy£ŽøQ2ØģpOį׌ƒ§—©ō…¼iā/ Ķ©čŽ+Ņ–ćGU±ČØ Hž„½;Wʾ8Ō›Tń.§Ø„Ź}˜ÉĢ*xėłŠfānxr[Kd¾“ņälģĘ:ęī|Vb—PŅą!Ędaņć?Āk‚ęŅą"ČŹž­zæƒ<9}«]M¤Ūˆ¦†įWkn mĒ„!sæ„x0Ų$Š 9Ré‰9p>½+‚ńæ€gø×4nŪÄh"ĘsŸÆ¬Bć+Ÿ†“żRóY˜Ā¬žR3|­ŌÉ?—ė^™דŪHĻbĻ$dü‰ÕĄļVh„­']zĘņś÷Jפ،¬±ī\ˆĪG_Ö¼ĄéVś.§4ŗY‚HŽLch¤ibóÅ£k¢m2åŚŌU'ÆZõ]kz˜exēÓŚA‚ĆkFøč8ę²zhhäg×bŅ|B–³ŻGĶĢD2“Ļ8Æ1ų&„ā+&ÖŚŚāĘkVŲfœJ˜Ęн©ĘV1hå|ńŠ_‡“ŽYų³N’ßĢŚÜ‡"+Ķõ«~;Üx”.o|6āѓ:Œ^„śĮ­āŃ.ńļüM¾ŗ¾’ŪQÕu=RŃqĆIóöéŅ“µß h2“š”›{™$ÜÄ±ĆCļ[Ź ‡tOķ$H|@NzŒJö ? ;Zݤ- ʊ[‘Ųu¬å.†N×Ōódŗ¹‚īÅ#žŻ’FCø’zjóķ?J½š¾±Økr3Kę¹’ē„(˹7GÖ>"Žj0CoŖL¶KɎYĻ‚HēŠōgSĘž’„›Fø‘…ě󓄨«rŌ‡ŸS|kŌümą»;…½¹¹EŸ «“–}kņÆāƒt½KNŸÄÖ5ķč]ˆŽ6`žt®NmnT(k©ńŽ‘½÷ˆ>ČĖ/–¤²Ŗ.q‚Aēńƹ<šļĀqYÉŖyk˜†Łg#vütöķZDź4ˆõż4C"ŹĪÆåvé’*ׄ¼A§yŅé3ż„.†š¬ č=Å1ø£»}+EĶĄ’7˜üŲĘ8¬Ł¬‡œśµ’ˆ/bA±Ša›¦jvܤ¬x›ā”«ŽźZ•µÄß¼-†mĄÆ°9Æ”tŒižšŹĮć]BHv˜åsÜ_š¦¤“QžŃÖāk`ęņ°'­}«š·C¶h ՘Å:”$ž 3 ¾‡Ņ:.—-³„ŒžżŌ„@„|—ń_Ā~ųŪāĖoų²īīĖYÓ¦±dÖ>@ą’&„{æƒ>/Į½1lģ5ķļ ĻG"Ē.T)\moO§Ö¾9ų‘ąĖȵ{ĖĶE¼¶mļr€6õ8Č’ėÓL|Ē’čŽ(¼·µšŅžiŸÜŗżĘļ·ŌWŃ ¼a„é¶ĘKłnE±R Ę'ó­b“dµŠš‰Z‚Ļpś¢\ÜÄĢI9#>•ĖXų‹ģšÉēĻä‹-Ī OzŽ] ­coIń¦¤’Ū[ø™Š&@zU]CĆŅŻµ£•™€$uĄ£—”¼]™Šü5ŅN±ŖC§jw?ŁįŠNcö?nx³ąĘ¹šŸĒQÜhQŽźÕŠH·av@ź¼Qc^e{åī£meÖžtÉd±ļ^AØx‹Qy%’ę"Wō_ZCM„×õK›hc…ēšĶNJ§@=Oé^ĒąĶp_ųfūNšŚ1sĖĒ‘’ v Żlqlš§ö”ęIL›°2~ŸŹ±ÅWWöŗ…Ž„Mb¤<‹÷ÕĄĻcŽ“ƒ£sļŸŁsāv‰c¤¢ź:“z}„‹‚eĪA"æQģo oSķÖz¦†įV+˜Žčä'·ŌzV“•Ö§š÷7¼7įøn±}–Öų'›µĄ—¹ kņ#ö‡±ųońSV°½Ņ¬ķeCę,±Ø(8$gœńŅøjS¼“Šhń/ų\š„Éѵ«‹“bÉ"[ȑäF2+ȼGćCv#¾Š¤2[³€®T±<ątŖöfŠ›>“šĄ_ˆ¾5š”ń嶙Ö1FŅI± ;±ÜqÓ­xŽ„©Ś*\Xė¶Ļ±2²žł£“±œ•‰tO’ĀDDnvl;J°Ą` }£_E+p‘( ½æĢF-LJąń%茮µ¬«¹ŹīŪæŖŸˆo%Ņm¾ĒpĻ ŃG“äcå÷«‹‚š­–‹ā&žŚ„ó̤#nĪN8ž?:ōO…ŗvÆać KDŗšŌ$M'ī‰ĮvĄż>µ£e»ģu’t‹M^ĒRW•BЧęVƓ“(¬”×Õua?ٟYu>¼Önčj]ĻRńĶŸˆ“›vÓ5;Ż=Ōü…Ž»¾æĪ“~HA½šž½žńrUē#”cŒō§X#"„æ —Yׄmkp÷1‘"ćnӜ×ѹńEžt»«©`ʐń‡%\{ž\Č“ĻńĶ÷€|Oo¤_5“gęš.Ó¹ .śßĒ7ļ©Ąbŗž$eFŽ”Ł}[šīk¬ź:~› ‘/Wļ`mæĻ„{ÆŁ4Qi}¦CŖ,W*„¾•Ė4h¢¬WšGĆ’k7Z•²{$ŒČ6}å¹5¹}ššEÖZ¬RLŅ ‘ŹjĘR±j’g½hŸ tĖÆ_^Śß[y°&ŃĻ-žZųkā§4›öŌ<-½6»üėm‡s õ_Ź“§Qó ÓHńÆxŸIń^³į­KĘŚjxkĐ G‘d*[¶I}ėŠ5_оšœSųSÄ·Ä~ŗŪl“[¾óGßļšļV'”č~čŚ~‘=Üž‘õ»Xw7Ģ7ääzsŠłūćOŽ‘£”ŹāA’Æ“'’1ž‚¼·JˆßxR™ŻĘ˜7¶pĆøżkm ĻCųā?u /ķ_CYH·F%Č#©ż+ęŚH‹XńåĪØ%Kml’$B6ł€śœsIÉ-ĒĻ·:&Æa"‹ˆęHŪep `ŽĀ֒-Ģ™ŽU98ā¢R*:Ū„Ō-⹐8`›r§Æ®?d_^xƒ]…ÓK ­ĖÖŪßh`2,{ŸėP$ϾĮńµÅŸ…÷WpAŌģķÓĪB7™[<­@_šDæŚ{Hų«š³Ä?²’‹u)l¼{įÖ <¤µÄq°ĆćÖ„ĒFŽšiŸ²š}åę‘ ‰Ą‘_”öƹ< āK_ų,ŚĢļÆfKŖ±ź½ńųŠę™¹ÉüCŅ!Ö&🊭huĶ*įCJŒrš±ŚčĆŗ•'#Śæ“Oų.÷ģAeš ćv“ūAųJĪųV_ÜŪŻÉl› ž§·v÷’®s×9ć„dę£fūŪļ’‚c=üäjŚ\ÖsĻģ|čŽ Ī°nULü¾Õß 6Ø»żć¹{UvŠVžļ†8<ņ*Žr“‘,xŗżsM Ę TcĪMŠŌžI >~ž•$|¹-»§=1A¹y°XŌ–dńŅ”“s H[‚=(5`TŽ4\“Č=kÓ>|JńGĄßŠžųķąWŽ,šŻŚ]G"Æ4A†ųÉī äcޚ: µ?ÓöSż¤¼3ūTü ųń?ƒyś~«§C1`൓Ų£|t ä}AÆ”®”»ˆ;•Ž£”jäÆSĖ<{¢¾©§¬č§ķvłŚqŌzWę—Ä?Žų/ÅWšĆ0ŸĀšÓzZŻR=ų’&øXļŠų“ö­ųOwńwĄŸŪ”Ž÷QÓa6ĢĢ€–¶ Ÿ\tükł1ų·šā‡5Ö¼.-mģ¬V@֛3‰W7ŠńZS‘•HÜń²¦)]]²‡ŒPUŽēÖ½ gŸ8ŲHį/.2#Œõ&«ŗ!pIŚ{ō5”˜Ŗ›å%]‘3÷OaV„J*˜’yž£ÆćAp܍¼Čä… ÷LJ½^ŽźŹŃ’pIō č§¹n)Ü“zó·ž zŸĀ_ŒZļģóńį_Ęļ Õ¹Šõx缊ß9žÜąHčFÜŃ~ēm6 gĮŽžńf—šļ揄õEÕ>xęĘ851·1Ē3€Ųcåläsø{WŽ> ŸPIuŸźŚ{[Édźöcäš26ŸóÓŽ¼śØč;gū9x/ĪĆqīäńļSźV¾ÕōķCĀZͼSéZ¬-Ęć+&įŒcüō®IŽ.Ēłō’ĮO’d½Gö@ż«u½68¤·šnµ<—zdę6ņßs9nœ=«ążIÆ%…Ü–ū7l g%”rzœœiś¬S1łĄČ8ćØćłWŪ?ørgY7F]°6ąš?—į^‡ćkIžńmܶpēEzųIŲó±Ž;J³B<Ō]ŹNx+vāę4„°]…F0Zõ¢ūTąsbeøœ’  ō«ķ䑕 t#ŠQµ»Jš•ŹgÆ„hŚÄ–Ķ!Db„’4ÄEzŽĀą«68ąs\&§is§MG 4lp Å7&Tc}»8/Æ–+i‚šqÉöėžšŻūĒ&„Ł£ČŚĶÜz×"ŖG£Bƒ=ÆKšŌZc˜TFįIĆØ­HĮHv…ć#­y*Żž‡!ę—Qƒ#8R9ķU¼éŻ~Lć8„N7frŲ»”č>$ńŽ”‰ą])µŻMß`۟.?RXzz ż ųūÄ™ćo‰óZxžż_riįŹ¬-īŸŌž•ßN‘śUį’iž“†+[kk+déjGµu²]ķˆÅeLqœfŗć9ö6ōm>ŽöŁäšek¬V[A"]ŗŹU$NŸķUM-܆6¶Æė\-åå¬dØŪ%ĻSڃZhł·ö¦·Ō|]š¶ÉtmGOžŚ²¹óįD“0rHķ×óƗķāūiŚgõ;Cs§Ć·*ģē¹éWŻ+D|'ń›öūųwąč/ķćæóõįń4ąĘø½ĻłÅ~&ücż©<]ń VÕFŸ}sk¦ĪŁß!ńģ§§ć]Ō©ŲĪuR>h7+|ņK}s$×-ϘĒ'v:ūt¬kŪ„DHˆīō®ČU*ÜĪIīĄ$礄 –PĄē­YÅ&\Š20PHĻCҵ”ÓŚ|Ä©†Ąā“vė-=b’FŠIīOŻH—%ž˜Æ½?fĻŲćĘŻJŚś[MKĆ>šį#i2$’3é‘ĒÖ¹ŖO¹ŃӒ죒äų_ū9höŒś=žÆ®•V[©@–@x;˜œóÖæIltĖ{+8ģąŻ9XŌ`/į^uIÜŻ+–äČV8Ó8Ę+^M=ü•%pĄõÅsJ]Ž‚amŖ”Y±Ž•••å­čUeņÉūµtå”įć!‡4ł/,ćLFž¼ō©¹qĪ#Z¾xĆÄʒ…. °õƆüGńĪŅŪT»’źDµøIY][ƒĮź>µqĶR>vų—ūd-œ—–Ž “Y5hP9Icł‘Šüõń—ÄļųćS{ķwP/ Ÿ3Ūć„céś×]:Blę­"BŖźüøĘ=éŹ7Cók¢ÖFr‘r) Ą®_ż‘]&‰¢ŽjrˆćŽQūģJę›čAķ^šXɹS2s×óÆsҼ,‘81Į²7Ą8+ K Æ¢xn(‘Hł†p01Šęücįz=cH½Ņ¤ l¼Č ćŒ÷õļY„qst=ĢŽ“ ó1Šī ‹m”rnńėBLĶĻ”ģ³’¼ŠÓ·ÕŚ ØŻœ£/¢‘'S7'–3h%\ÉĶr×&x‹]Į9Ü9 š° MnŁŠ}„Ž~`Żjed¬.ģä ĪqŽ”§©¤3eĆ#)8®\BPČU˜§N”Ģų®ĆPŌ4ö†ŅfVąŽ}+›Š“mNŚ(̼‘÷”” ī Šćģ\÷ĶZž"»_*kn"ö#ū:<.®OozēõI¤‚H‘ĘøśUE09ū¶h™ę2©ćƒĒÖ¹oķµ[··’mėœx5 FŸ|f;W “öļ]EČ•—q) čhØ·žiV'‚3OŌģąŽ?õ·sŽø  zDØ#X„Q“ i·ÓB»£\’…dāg+6Ń0œČ ōØ.„é.wt9õ¤UŒÉ…Ȑƒ+ŖöśVŽmŚŁäŠE 󞓥Į·ÕŽ Ž»g×­m…Ø÷.¦29Ńa„s——İ[_­›ßšéü^¶Ģq‘Sȍ;œĶģŽSn,˜.-刪ēv1Å>T7 7·‘7:HJś]ØC#°@źq‘ü©˜›šž”5ģl‡ sō®ĪöŅņęEµŗ„ÜÄŲeŻŠścƎIī¼°ēl©ĮĮą×U¦ķ¶cö¤õķ@ļ¦Ūp£f{Ō<Ī€3ŸĒµ ŠDĖ,·¶E>=’–E~h—Śļ-ŚH¢\śqĮŖoyē«Å*ĆļŚ€ ·#•'„]V ”'·½Q¹‚RŒČĒäg„sIę#ŒąĀ€9›½2Źy‡Śc$ƒ€qÖ®YX[Äbņā_n(‡µ-CuŒ‚¬Ż=ŖÆŚU“ŗūŠ ŁŃAdp;VdZ­½äRF$bźp3ւd„.‘§SKÓ²˜ żŃō eYŚīß2@†ue@ēŲ闞M©óŃwąŠS‚ņ7¹u%:ąjģōų ø‰“Ļ‹pžŽ€3nćū4į@ź3‘^7ćÆ?‡”’E…ž@@ę&šóFæƒ|e§xM2Kk4sU÷”LŠįuųXźrĖh¤AœœzŠüŠp2­„øYD$nˆõuÆEÓü9¢ļŠń"h&ČlM Ų›© LŒŹ±ĘĒ ŠĶÓ­¼·Ż&TöėHGgģ+ r¬;f­XźQćŒÅŌąPc-Ę^5“ūšŽe„öć­sņʼnƒ½Gzi6ęźH wU ŽzVƁŸ4sÅ##n\žzÖžĢøÄéīną‹žģ}+>ŚFóŌE mǟz“ŠnĘܚL×X‘@t=@Źė:=ޚķ#DĘķĶēfCO#Œ«Q3™ĮČ'šŹH„"š4|ш³ĪEhMc•.-% uµACŻ£>bœ©ż+˜¾Õ˜\­±µ‘Šœ=1r•ß;ŖÓµié««y˜ŗåxĮ ‰““pŃH$‹< t§¤HŹÄ #2[3N#pP„ ÕÕaŒŲ4r!Čź()°\å\„'ŽjܗŵK?–y”ÅvµÓĻ©‡ŠmńŚJŖœć©ėVŪRŽD‡gįWĖŌĮ;æ“RGS ˜~˜„K‰d¼ÉNįŚ Ņ.ę…Üó‹Uh[{ōĮ=}ź Mn)c[I¬ąx†w2­Ÿ­L•ĪŖgŹ|w™®čĻ4·ĖDdzłvі{łģåŗXęeÜ#aƒ\Õ tgŽćOqs&Zsé]‡¦iŸ4[Ė[?ǧėq¾Ųģ®ĘŐī¹ćžx¬€Ėų[ń dz·Ž­jČŃ3 ¶škL„`~¾µ-ĪŖ'1Ś=ŸĻŌŹZÖŹ]Ȓrxö÷Ē®¼‘¢xu«1lÓÓµ£f®¢øŒÆCQĻ4÷n»aĪJšcF¢_CĖwnŖ üŒZĻ’„ˆé²6ÖPć=zVŠŸqœfæ©Ķ­Üd€žĄ×-yį5µ…^åO•(,¼’:Rcs…‹OŸGŌXŚķū;’1]Œ ‚=Aķ‚\#q%k1KĢӊģ“F0@ī hŪ\Ū›¤lƒŌŽEĶ­äk8c¶hy½ęXĻj7BRLäb€0.®šÖU„Bvc$åPIēg€l~øĒQ[Ē`fķž¢÷Ķ-˜fĪc­o„żĄa‹äې1LĀĆ- Ā£} łˆzõ»¤i0j“2† "óÉĘhWÄtś$fY‘åē•NŖk* @<`ŪzF1Q5ŌÖÓ¶ ,,ca· ĻcX֗J&eßo,GaY4XĖ!4~Sŗür*Õģo{4j iČš•: M>(bW”©ˆœnóķTūĶäŗ›óĮ©ö}†fŻŁрŻõÅaÜųQVŚ[ø„aĄŪźy’ žR”Ól-­”.ā³n'­l\h·7,¶ņFīp1šØÄ|š\óķNÓR]šÄQÓ8`ֱ݇ ūU£²*(^™Ļ?•SģhO“÷R¬Ž7·|œq_DxgO°m=$Xc ĄÉ_j„äDŸcŸń:e“²*Ŗ3“ņó^}:ÄJ•GŲĒ+x»™`W›ä¼TžF¢ń -ž#Ž)ŒŽŅe‰MłG>”ĶYü“‘ÄGiĄąPŠ3Ļ„Öę sWTĪܑګZĻ Ć4¬Įŗę”ĄĶĄŽęņ`苬/wØŚę[¢¤Ūł[xĄi{1FĖĒˊ8‹FRoāĄćJó?źńiė%Ä{AĮܹ µ5Oøłüæų·XŃψ..-ŸĢ…ąv…Ü8ż+®Ó绸ŅįÕtd’hŠ;B—_AĻS^į„(čz½‡†<[ń#Į0kv³AįķF”ŪI!Yņ8䣚õmĮ÷^³Ń.õŁ“ŪĖŲć_3”f$u#µ"Ķ_ŻŁkŌ/tżZĪĖZ€2 †S×ņ¦éo ·Wém'28\ōĶ)3ś8{ˆ@]b `Ø«š~gwv‘<Š«œ¹nxśV&NF…Īgo2…“Č•³·žté^”ą{k::^:*ʰ䖤.[ź{¾™ćļŚ^i×Ļfńŗ~³tŅŁÉŚf ’ŗu¬½.ݤ†ļ(&čCõ4„!” ņ4½}.’8 #Ļ€r?­vW~<¶¾¶‚ HŒSpL3õ©nć='į,—Zž”pÓ4 Įȱ$§mŁčz×Ŗxõl<{eeu½Y±"²&å韛łT6 ž'‡ōæßµ“Ń-Ķ‹’wya¶ū Ģń—ĆmDš›Ļ„ĮÕͼ…&ŠFŚ ž˜=ūÕĘVĮ>xQ.µ™@_!„!†sŽ{WŌ%š‚é0Ś“ń¢¤~b•\‘!ķ[˜3Ątļų—Ā‘‚'Śgcļ]­ŒŽ•čĆā­żŌW‹&C±i3ōéCd8£ŸƒĒŸŪ7_Y¶¤ĢDųAžō+ōxՀʓņQAp‰ō,:”~;°[Ū[ĖKʎ1”Č>SČĒé^iāķ3FŌu-XÓo,”ˆČÆŠäJ ņR²©‡BVŠŅ>Š|Y+xÆĮŗ’Įcįq”_P? óßčšŻŽ“oqįŪ«ūk„/• õ’sĮ„mīyÜ6Ž,IĶ–«x÷o !Ųäś+Ż~xF+ūĘ[ÉÖŽŒæ™!įæ×k̉r5īģßķJuņAćÓ9Ŗš’ˆtW’ŽĀ®ć|,›XsĒ~•œ÷*:™«é–ŗżĖ鏜Šä–aŃz}+ęõÖķ5m[XŽŚĪ{Q `>>W'ҤŃÄė|?ṯ£’e™|Åł÷Hz×Ųß­®,4²‚€į‰-nsMAč~"““™äVK‰ĪĆÓó÷Ē .Ųų¢ĻāN—¦J5dŁ¢ŻIĢyä7sš „zœ'Žüws&—¤ÜxWÄ[Ū\8óķęTaŲzšOźW:ķ„6z½šĻr i$L€EŠ Dńų:Ąźwņø|ĄźTōükgĆśV‘k§Ad—1ŪF‘Ÿ™Ų’ǰļNęu;¤«'ŚK^CZņ‡LטųļL“²»Ó”³+k3…ep>cŠüV‹mLÖǧų ĮČEÄÓÉdąęSŽ‚½£KšÖ›kmŗĆ,äg;Ū$ś wE&G>„„č:‹%«-„Į”SŒ„dxŸā®³,pi“_K-œ$ķÜzŪéC±Ijfė:¶‘}”Ū^C GxŁf1Ÿ®?žs^5żŸyu©N‚;u²eČĪKžœ–¦œ½Ž ūMÖ<=āKÉŚĒL*r˜ūŻ’*ö”Ļ…ōkOi1ėz;[ƒp-Ąfˆ“Ń…IG®x Yš·Šl®l5­4A¦]D¢ĒĮŌ¼/§^Ć„k¶JĢšMĖrĘĮėōÆĻx–ēÅZę««\ƝÄŅ–x‘v…ēŅ©£šJŚ’évAu»ö«`ńĒź6,ū µžčåN£#ėšŹi DŽ ėŪvĒQK鼟0E8sÖ½­¼cćŪčn5Č`µ‘ZGĻ­gsEē=Wą?m¾%¾£]:¤fÕ¢;JńÕ}k×|gāļųŹņ/Ć-Ž:÷Į>hc;o’]mrĻEń4.K£qWVMw±wÆ#x{Ä2ŪźÖpB²° ę¬Jfr]lšw„<'-õ‹ųŠā(“¢Į„äņ=±U~,’ĀÆš¤7uE½vmŒ›NÉądŌJŒü‡ųvż’]²VM§q]–šŠLxgŽES“Œņ+6¬$Ėź¢„i ±Øf+"VąŽ‡ƒÖ¾BµŅm“?^kŚ@PĖÄŃc䗒@Ūۚi÷)Iņj1›‹ū9Ī''f¢Ó5{­kWˆKmž–ĢQ—ÅiŹāŚ>óų{ŖKe¤„’ŲŚĪŖ&~ųō5Ķx‹Ęź÷÷Ś+œŽ=†+)QčkŗG‹k¢†yā·Q‡HŪ®{ÕĶ6ń†±ssŒŒė±½JŃģģQógĒ’ƒéā“ī…#éś“ ³hIóó~Uń½ÆĆĻćkm&+øó”‹xĖąNŻųöĒZŚ/°Sü2°ų‡šgāW‡īµ „šõŚ“ėÓcŒWeūHüҼAāń.‚Ö¶Š]@&…mŪåW#qß9ā©»’ō>3Óō=GĀ××0ŹŹ‘ø 3©ĄØÆ”~ ų[MšvŖ|a„jĢ—S‚»R\l#žGõŖ‰7ŗgÆxÆöŽń^·­ŲŚj6׊ŪÉöwĄex±Ńūž nčV~fšėB¶iÓąÉ;•¾?Sˆrčuöž ³š&4¶:B\ÅæyŽ×Ō©ćŌ×Ļ?“zŲüBš~‹ń3ĄZtĒPWņļ™#Ė[Ø<—^żł¬eO©÷¹ę^ õĻ…ś=üŠ}–[we·•—i÷ {ćĪ¼Äö·6µJĢä¼ECAÜå4­Js·ćełJ·ZŌšę·}įOčž%µGe¶˜B1W#ŲūzUĀ&ēź’‡|lŽ:Ó­µO“M#ŗļdv%~5ŌyŒ„TbƕKsþ>|:_x:MSO‚Ųź–¬įˆåWæó“_œRŻ#»„'ĖĪӑŽzG‘TĻcųā» ų†Oź3£éŚ‹2ąä܌.N}k过_u_ŲÓö¤ųkńļNb-`ø[MO÷‡ĖkpƐ8εgŌī¦Ļķ»Oń…ńĀ^ų§į Ė]KúͬwpÉ Ae“^”ąoĶ£ŻBcĒĄg“ō¬¦µ²5>׃F°Ōü9iÆŪ±F›ŖÅ|µū[~Ļ’æm?€^=ż–ü{¦²ėŅXKØųvźE)ä]¢’Dć?2–äu*Ä}p5$ā’§Óń2؏ó£ų£ąoü?ńOŒ~ųĻL¾Ó¼eį½Fm'S†tĂTm”½Ćœ×‚O˜¬B\ē‘ŒWU ©FēX•%Pą¼}i¾s<ż®F2:[œ®6Š…J+2"}óPĢ ’Q•½(*1"łŲ•Įć­?ķ>^a8ĻOZĢ»Ҭi>ēˆõēµMĆČįĻŽ'ւ¢ō4Ōs’„G#Ŗż“QO¾+'µu(ɜf™ŁMŸŃ'üŻūk'Ąæ‹śģ“ćOI…źāÖKŸ jŽ\wq0GPzz­a)t-GA÷zåÕ£hœ åųŠ‡ĀŗÕŻ®©mm;&ņWŒØ=+Ž£¹×MŸ{é’C©ųUuĶ&ā8fOo#įĒŽҼ āGÄ+ėkŁļ^1µ#†sšćݑ֫#®ųńBžāż%m>X¦…Ā3nēµścż„y«iŃÜ:m„MŁ#­uҤāģĪ,Dļ”…įĶM­/ļ,®”I"cū¼Š5)^26DĒ שO±äÕFV›O0Ź0|ć=+fēO0€UĻų×\v9å¢@–ņ‰ēø>µ1Ō ń¼!U½³LĖ•™S! ³3œw­żڗ‰¶Įy[>ń°õf¹źĪČķ”IŸWxwįŌe‚1K{‰T|Ä'Żö©µ8ŸKuņ”m#£•ąā*6ĻZœ,rrxŠ÷H»‚I!Ym_åÜz)ĶMŖjlłŁ“ĻŠŹœn9¾‡ ~ŠO •¼ß^ŹŪc†,ī~‚¾ųSū-xĻā)†ėĘé儉l„†™ŗĶļšōØĄĀGźļĀOŁ÷Įß4½*ÓGŃ×G’,–fł™‰ļŗ¾ŠiāŅ-¤ū dʤ€£ļā»ąa-‡č†}~Ž;Ł’KenLOĮSčEl”h7(OcT`9,ŌO ry5wØĒq;;IūåķŽ„}[Wń60Ln&·'5ņ׎~3Į¶£g¦^éAʃ—AUsŖ1?:ž-~ŌÖ>¶½›PÕ¬¤Õ£až!ÉĮīžŻ+ńÆöŠż¶uļjwiįč4ūw+åĖ RōéŌ×e*fugcóÆÄZÕ÷Š'žē^ŗ7RČۈ$ķCžĻ ®Ri[œ6[§^‚»”Ķ©P­o#‡"Wb:u©cÜD ±ĪG=+CŸŚw&ŠŁĄRAē„_·µW™ƒ§© ³¹Š4C’Y”·LņIżq_L|żš¾*|pÖģt_iS”ĖØÉhqÜS\Õ*0‰żžČßšI’ |;¼Ņ¼oćŌÓ¼QŖĆp$r§$ŽFŒc5ū…¦ųcĆzv• –•į½'CŲA?g„&āJójÕ;!¤ŅćWŹ ŗÆJé”±Rä,ūō®YHµHm^ĪģJä4~¢ŗÓ5¼±€ģ09ā ŌēīŚf nŲSļžkļ^ÖčI,£ź=ØFV»āHķ”ŹdM g­|³ń_ö‡Ó<7eqmb}ATœnä{VĶĻĶĻžÕ¾2žąŽŪj³ŁźQ‚#]ېz_&ųƒā?‹žÓ»7RĻ*l›;wƒĖ ožŅĢ$u9'üę·HēuÓY΁Wy “]žw~Um#28W=I\ōļü3ŗó3~…Ęr@Æ]м*ŗ|Į–üJ唬QļśG„m¤‚5b ē9"»‹]*ÖŌ,nT…d ڱŽ;s€»ā=„_¼tĘ„Aō5p‰būN#„SgŒŽ+£žĪŗ†ÄłČ?ķ ŅÄÉŲ†kUfĆķ^O&ø~ņkvR|¬g=č9Ū^{āŅG#G“õĻZźģµĖߖÖFYÕøäs@žˆŚ•Ļ’]!”ōÉĘ}Ŗy“C„ĢmĖå‰Ī}h ķ6ébMŹžSJ!Ód0¾*;÷  —¶%_,éPč׊Ł_ōć+ŃVHÓęFį©« iˆoēZ’WžÄ?ž®c“ÆnCulŖ&åéA¤$‘ÅźzŪīŅ}åwō­µ“žŚ%ŒĶ—QŌ“\¤š™Q™äĖē<ŌV“Ek"“ŖJg/j7V†P`Œ,e‡åR_Łi×c$lRfäąćƒ)2£Ķ“'›ó“óšęō’ -®£q©Ē;+ŹĮŲc®8ė@@õķŹ „ŚŻ'ŌI KF\>?J ‘Ŗ‰ĘHpOCWµ­¢¶ qĒ,h2<śęń””cµ…K§_“¤”$?lśPĖܤ;UĪĆī)~Åöåf€4 ńŽ€2QDaя“(Æ­S[Ēe)*«“(må‘dgó”Ą"²µFh̵ćiļ@ŠĻ&£+,č!pp1Ҷ?²ą2Øäu4M ņ\yĄ2ż+Nyb’5ŲAĒĖhÜAŹ1„[Žćļ¦h–Ö­5™|”ū‚N?Ā©Ūi>QY„*ŒÜå{żhFęŁ «‰u$¾KüŻĶŒlAöFU䂱š‡¦+"ŽKHēx3nĢ~SA¤em Ķ•½ģsĘŹB°ŲʽÅ|“ńĀŚ'‡ēy˼,pQŻ•'µcQäx¶¬—2*3 źćę9ēņ®Mō؍ÜbCöyTƒ½®fĶN†H՘«H'ˆ dŽžõō?ģÕćė;_Ćą_Żż’ĘXÜYÜ6tįOø¤g)t>łŚž ¾·x¦‰ōłåpF=kßō_I5ŒQA,x‘C.{Ö°‰”£s¢Ń5[ä¹UŒåķ^ł£j%°YT$œ`×])•#bõŠ–\r˜ķ\±–ĘÖVgUWĶt܌åõŸéÖ·0Ź'šå®üE»žÖ4*÷ŗS+ٜÕĒ‹ĀHā9”ąž•Żųvā=Odé">֑Žšå–ĮkŽ"·–¹ ŪŚ‹KoxšHīŅ4ŠHŚUÕ[Ļ€w4X“jŚźOjł/łŠēµ½mbĖĘė·=ūPlńַҼ‰FFć×Ö¹ūM:Ü6Y7=08©–ĘɛѬ¶±xķž¼Ó‘cg$Ąć/\ÖI\ŽdojžÓī”–źĪd˜ē©5ąŽ›}¢Ī×eĆ(Ī1éZ(ww-µój:tW{Ø®OPø2¹Š6’ėŃģĢå±É]AĆ”F½xج#ŌQD¾drD ‘ƒPćc(³Bāę+¤T‘*ägÜÕ{m6Y„¹ ’3»Ņ„£cM“‹0§óBMÖvłO‘ a÷N2k.F;µ’ÉŅ'tnpyēńØŅT‘ņü«H«hŪ™ŽŽÜĘ28®#Lńgöōö¦ĘžÜ£ģDłzƒZŖdņž£¦i¶W0Kqöæ³ĪøŚŃ«.ćPŽĀeflóŌ ę«‘ūÆNQ"X"E#©ė„p7·W—LI „ō«FŹ(&°Ō'ņ'0NTąžßZņI[āD:¼Ņ5Ā]iłłWńļMŪ”G[gwę¼qź‰5“¬FXé^sÆ]M²Åwoˆć}˜ĀŽƒ=k¢$Ž^fCp¼•gEµÖ/%›|0~RZĢÄģį³žÉąYą]¹Éö®š#na*".Ķ÷I?vš]ļōG«é×:€h6Äŗ³ Ä{S/%še“im,i2}ēa»wųVå'ŠóŸ¶š®’bdks“^¤W#%ČĀ•“`ļļ@r2)õ×ųr9bKIcc˜88 zFšŲõX`½}1€„yd™ Ą#øżkĆu鵙5µŽ[Éd¶U,Š sAцœbm{Oki!‰®a8Œ2`–õ÷®ŸJš¶•ŖF4]fęņŽÕP³Ŗ»‰ķšÖ0ī?hdų‹ąÆü#ś ¦³į‹ÕuY¤åÜ(ž&q_4ėŗŻŻ“@ŃoRŒG8l’śźģ55ŌÄŅ’µZéŻī­šĒw§±õÆGŠm­ī7É"5zŌŹ%X÷‡~6“ŠG'®kޱ‰"f…v›O-Ū śā‚āŠzˆü[¢C¬ 5KY$ ²dGńÜGaiö[c‰;śqQÉ©œ£ŌłCāž‹ éw0:īŻµČĖ(…—īūēóüŖ/ėvÆmSI¬ŸqŃOĢęŸ ”OFšēƒ!ńį¾Ņģdóngbƒ‘Yš„”ŽK­.ā$yŌlmƔ"¢Hč„-¹äMō³ŻCpåį~Å`ßxnŹÅ–]=)sĄćŚ ¶užÓµ&y ¹Š~šžļÆ£-ī¤š§†ę}#SmL*y€?ßbsĮžUŃ $yt’5«™ķīįi-n |ĄšBū€kŌüńA ø/­ÄŗĶ²ø/ ŖHaļśŠ&Ž“āoĆ’…?4Ō“-Zßڌ³+­¬3AÉ#8Ē~¹¦ų{Ą7:n/öuģsŗĘbŽqu$qڱwźK¹ņ/Äm'ĘŽń5•®³”ÜÜĆx¦D¹‰óŲĻNr:…Żö“|¶{ŚUgUżŪõĶTgÜĘR*ė0źŅŻYÜAy$eQ÷\z5küP²Ņµé6Ń#Ƭ@Āo“ßĻń­Häø|+ųĮoįė(üāż5õ¶‘™ķļb ėŚōOˆšMŻéŠ[Mvŗ Ē鑾4XŻS-ŽŪLs’Śå¾īF{Q–Ž#įŸÄķ}~!]iŽ%˜Ć&ąmīČĪõĻ"æ@<1¤Xų¦Ž}?R†øeŹ»ČÄłd¼0jҰ?#ä/|<Õ<=}youŻÖ•<®±Kœ OAō®5tł¼3eŪĮ5Ź`¤'&1ėLLn”ā]i#†ęeIČZ¼—Y›Ī¼:…ĶķŌR ©sÉŽ:Uów%Ąśįw4]WR¶Š5­RŅĄ 4­ąōņÆ£/4='G½žļOÖ”¹± 3ĒøÓłż g%r=•>Õ|]Ÿq=½«‰Į “nĄÆ×µ”k–”ĀQFOֳ峁ĮŁųĪś «˜¢…&„žģ«ņN{×Ņ_³ä¶—^%Ō“_³…äXĆŪy\ō'ņ5¢f§½_üQ²ŠµĖĖi_%•ƒ„įłéšłOāWÅßx”ĶmqŪO6é%sµNø=ižń«kØĒ}yw7ŲÜ}Ćå'×?}S”é÷ZLś¾œ²ŻĀFéA!M&+³–¾×‘o„¹įųé^)ć›=;Y“E›AŌo-5;i„žv@ڤņ«ųf‹ē>“Óü1cā/[^ßźVńOmŹĘQĻ|Ųõ®FÖĆJÖ4½WJ¼ŌŻ’6xåWĪxūø÷ā’"R>AšļĀė}nóÄžńn„{¦DžcĮt\Ÿ3'åĮü+{į§‚ ŠŒžŗŌĻŚ‹³ĀŅ.ĪÜ’žµHIō>Õ¾hiąŲ¼_ Ž’iŻFÓķČĮŒēØõ+Œš‹<5c~šeÕŅŚBŹfO— y$ō ~GæüHšdś’­¼OąK› M-Š‹ø¢8lķĄ8÷ā¾Eųiń7Rš%żŻ—‰tĻ&Āf1ŻŲÜDe=@żsėHG£ųŸįÕ·Œ~jæŲz…†g>ū›wū¬9ŪģNGé_Kį½zĀÖh5u‚š I³•Č'§éS-‡y«G.ŸŖbb6ŸQ]§£_Ų%½éżõŒčtl§Ö“–§Aō’ģĒćÉ!×n¼-ذŠč‘ŹŖĶņŽŠ}2E}Ų»h;dsެĪh׳Ž*ŻĘ²ŚH|¹U†C)ąäWåÆĒ_YųKĘŚÜvvkc-Ó“XC‚ ?ēń¬ć¹ ¾‡’é×Ó铿„—Cøc«WŲNÖžéķ`×2[ĘĄa–Š*©#e6­c÷‡ž[ūR·ŠtļžČõŪq{¦?@iŪiņ²~E^ūI;fæyļ“[Żż“„•uVļs²2>ĄųC©ßx§ĀŚŽ‘kw ßĀ7ĒæēŠėntżUo¼=©^é&KO“1J¦zŒśž+¢™ü°’ĮĀ’±ä^ń÷†ælÆéh<)āaā˜ā‡ˆnŌ~źį±ĄŹü§żŚžVõĶ&ņŅöņ&·>Q'Ėbr}F+,¾(+żżlsT‰ŹH!Ų_‘ĻÆZĶņÖŻZ(ݜW£w8ē” ®Iו”Xü¶\ēš f€ß…ÜTØ«°„gF/ššŒ Pv&łcgiå#ų'VmĘ^Ō"Õ-gFŚrŒ ō Š’Ių'ķąæŪcögš?ş^éójén¶šķŒm—³ŗQ‡Ü#žyģE)ü>‡Yöõķ’3IjĄF­Źąµ­2im^ßs‹ø[Ģ…ä^]U­‚Ēē_ĒĶ2ŅŪÅĖā/-m¢Ōˆ¶ŗ†4ĄtŽŽäēóƉ>;|%ŸĒ> Öü!t Ōl!k« ėŸ:&e\õą†ėXFBhžG¾:|6½ųećĶjĀk?³é—NŠHxĖžXŲW„I .šq·?™®źr0©”“Éņō¦‰]™vķ.;ć׎aī'l }č¹Ž[bˆČŽĢłH=j€‘Å*ē4²HDaP–ķApÜn@ŪŽī3W `¤†lēxéAŃ ĪĒĮ:×~|Dš?ÅÆ ›Ū]{DŌ ŗŽ[6(å@ΧCŠ’AĻŁ“ćo‚ž*x/įßķGąŻ@Å¢ų—L†Ć^·VŹ x”ćrž¬*+Äė†Ēčī™i§ZĄŽ€Å’1-¢€°##oę)g}FÉ#¹ņŲMĘw óŖD¢œ闆ūDÖmąŗšī­ [ÜĘą!ƒŪ“ł×š§’rżäż“æhmWQÓm¤‡ĀzÕ軓’8’Õ+H¦®)­KŒ“±š¶–ŠjŚ@™Ł„R˜VĒ_C^v,R SĪ2$ņ¤»£ćAXF›¾„sžļsā‘„Ų­Öž·Ģšˆę…ŗnĒ${ń KW:›\-Ą`łÜ+¶•/hu_¼Qżā ‹[×"Ęw ©Oė_¬æ |mkuooį{½W퐂Ķož¬`?*u);Ü»]§ÆxnŌtęhäFÉéÉ®=üAk-Œ‰u KØ_kĘz·ø­)ÅģcVš1tŻn)e )“ĄļZjs,ŹÆ1dČ’ v(3†hī“’ģįf—@” …qڳ_OŗÕ$T³·ycϬŖNÅÓ§vzF…ą6ļgŒE2ŪÆÖ½ĪŅ*[Ē©eń^&'ļcŅ„NĒooā)`·)# ÷÷®SÄ:ņLĢ&;W¶į^~¬č<—Ä>"³[GŽI£Žß$ņ}+£ųiš÷āÅE·‡O±—DŠĮKɃeųW޾µ×B™„·?S¾~ĖZ€bŅuĖ[[oźŪ–[‹‰SvÓĘGĶŪŪŚ¾ä°¶Óģ-xbˆ±Ė 2§ŠW£”ŒåŠŅ³¾»Ö]"ņŗōŚÜWfl„JČVR,{WDQŒ„”&šŠžņTuVĪ0„eźÆ Ć““~čžyŖ!Fę>­ā KM4̳/”OŽĻJłŪÅō½ äœIĮcM#XDų{ć/ķ-k§Ś^ź×ś’X騌ū™ńĄžčļŅæ¾?žŽ–V3²ų1®'žDņžx¤ł„¹ē]T©Ź¢GåW~)x—Ęš¤××z­źäA|‡_BHĶyµĶö9UTņ} ®śp<śõne½Ė»2īĆMWŽO$0=k«Łž|ßBxć ČĆB:V¤‹+ŖY—Ø±WŠŻ·°S¶MŖ d ļ|ą_ųū^šg‡n5Ūš'ÉmŸLć•IXéŒÜ/Łž āOĄž6ųÓ”ŖDL`ŲyD¬c9q„Ggo…ßt(m¼!į­>Śī5Ū¢0<¼õć5ęÕ«sŖ=n\8’ ²g‚ąčm¢2¢«¢óķ\w:¢ŽĒMÓąŠ2Å÷ØīīYœ‘m…`* 3Jɦ`Ź|čōŖ·WČØN®3y®,@lÆė\Ī§ā ¬Ņ ņ"÷ĘH¢)²¢•¾&~Ń^še­ģzÄÉ+ÄoœŸB+ņ£ć/ʗńö¼/4ūc§Ū£c䬉ė¶3I­ ¹’[ęi ·\óPA§ī›ĢG)ž£Ö»9'ø“Ū2ī >j³§é—Sø ’sŲRnĘJ÷=Ā ļµ)ļ"1[·$±ä~õ…~éÖØ©yAŹń\sež”‡Õ‚yP/˜\u­{="–=Ŗ Žs\Ņz™m›…Q°tÅiObķÜ„øČÅH›,či*»E,2mĻ­F(4Éžē„odg) ifmŽ”›čG9­}CYKø’$O)—ƒL͜¶óÄĢŹˆx¬Ū½>xleķ$pqš ē<ĀĘĖP²WIÓ nõŚio *HXnŠ ¹Öż°M4& ¶Ü)ĪAĘk¢7:ƒF'ŚdÅA—B[›ÉŚ!hH!zZĪi]¢(Ēc{PAåH™. SéUŚŚ&c! 7j c~„imbB%IcĆb‰B\"–?½NØ ¢«Ęų_żqšĢń>™ż„¦˜%ƒxć<Ÿj”¬y:-՚Ies¼“9*I’­V­| °F©č­ĮR¼(ö«å+˜ź4?Į„J|“²<ń^ƒ m#“Ÿ~*hZiÓE'Ī RzēŠŚ‰’Ņt}Ųć&”Ą ]ģ®l’XĒś_Øō®OķŽhTd”V°ÖBܧšĮķ]§ˆīģõk+t¶+µPžąäšŽ®Ń›™ŹÄ1”ĻFük‚³ńaŅüDŚ©¦Ż[\uŠF÷rfõ§błĘ’\¶›`t /Ozµ¤lfA'—žp)V¹¾·¼ŸheĖvŖŚéį!‘ÜP-y؝:ī?“)žę¬Ļ-­ā,”¶æ„RЉ>\ē]-ŒūĆG·JŃe½Ąx„QĻBOJŞŁmeXF:P…ÆŲ”2±ĮŠzŚĘ_|7Ø õEGµņŽ(ųčqŅø%ž(äkyĮxIėé@²I3“]ķÉŹ°QKŽsW¶h3”Tcw° ēłÕ‘XŚERļžx \ģ• 2Į\v=«oL¼’/õ¶ŒZ›7:”… Uzk9bÜ᣼MŪŠÖžÄ›ö«FՏ©]Ckr^Ś5WެŅ2čR7öóÄĢaŹ}:”¬ÖlÉ"…_„&‹1uiå•$šŃW°®vĪķ$•Œī“ÓėXK}r‰å½‹ēp=Ŗś^<ŹF»AV4¬ī‘O(7й=§Ū„¤=24D„bhmd¶Ä€æē5ÕģņøŠH˜…ą“ĪĢ«» -³+Jģ‡$ūS4ģŹ<ŲŁ]TćĮ”;\»uåČN*XķŸR%¼łhģxĶnQyE֛ņ±ITWKk ·š,ĄsS-€„©G$p8o‘‡oZå- †KčĶĖ€õ=«>‡šÕžœÖFŻ 2š["¼ŪŐÅev±[©ĮcČč1NąqӘتJßSPÜŪ ‰@Ł(ė·Ņ€hĢIvƔ{­Cö“e)¼«:F.--.®”R *ĄškNM]åŒG2)=Īh$ 6v,85į÷włScćdwņä@ź}{W7āż")”Y”Š@£8¤n|ł¬’C“n“v>^ÕĮźZv«m:Ż]Ū™Sŗ²‘¬"`ėZėx¾GeĀ‚p3_%xĻF¼Ńä’ĘH÷lėŗ¤éŒl|ŃńĀVž(ŅļßüFś¶:×ēõ½¢ųVź]>E>RH@ó ł¹č:Ū• £„7Z-ä/ھĶpŠxģO„sÖńn•„S)=}+‘ÓÅgc±č ŌJžŖGzļt[‰ e’ŁŠ¹n0k†[›¦k]j‰{rZąī™Xē'šÜŠśžāČŪ[ÜyˆåF9•U4L„ŠŽųać_x#ÄŃi÷ö’Ų×Dī OĖ)Ļ8ōžµö­“ŸŚģŒ˜ū;Žż+²10”“:ų4-_MuŸģ”“åMÉ2Œī5Ņi:ūjŠO¦jpAø¶RE*=čq±›F>£ö uūcß»÷Æ=Õō<“4*¬IÉe꓉(ŚŚ\EµĖ3Ø=ł&¹_ŠšfćM>ļLī•RLr Žæ„g8õ7ƒŠųKPÓ!Ńļž9¦e ¶KńŒzV,ŚŪ"7bThr žÕČćfo-V‚\¼6śyū8Šy3É óå »¹¶Ō-µIaq$gŗQZĮhf–¶>šÓž;ź×š5¾Ÿ}s5ĀŪįSĢź9ķ_bžĪ?[ǵ®­ĀK¦4,„#ūŽÕFŒżŠdµW Vcƒ¼^ØŲ[E’"”TvźEmHāŖŽ-¼s-­ĖXĖlĶžŽŌŪ¶{µ3‚ćzķŠ]L,x7Ä+›­8…R³$“…ā¼J‰k§ŻĶeØ®Õq“&~ļT(šv¤ŚÅܞLé+(Ąuś×Ó¾i¢³1˜× ‚ ¤Ż“2œz}õłRŃ4l1鎹k댐*iœĘ†‘©CĢs*nżMOÆėϧŪ+FJē§*¢µ5ŒO!Ń>+xŽūYšĘHcm>71£‘Ė`’śėŠ5ķ^“¼‰½ųڽi(‰ĒiV|Į‰`€ē × iŽ{å%&u“#V-t+bxw[ŃJŪŽé’/ūC})<3Ŗ’eĪųP¾„Lacż§łöī°Éü9ś×˜ų§Ćó]Mņ$’s†ō­9zć.ü'yilņÅ8HŹżĆü5ē—Vs[4²ĒfķŠšˆž>’„h,2ƒ¼ąQ÷Fzš<ńóRĀȳ”9®A.4Ńčŗ}¤ŗ† …%01žŲžuč7öŗ|q0x ē#”­Š™FĘkzŒjā)ˆćŽÕžÆ,˜’Vł³ž*|‰2umŽ«:» ½{~Uo4šĖy¶äõ<~4łEmM”}öČĢ*É*ēœcŠKm="żņœæ\zV©éØĖ&ž!•i Ex8Øķ®­Y¤F*݆E4Ęek1>dióm# t¬Ø ņ D‘Ü2¼Ēš ēfŖŹ²Ū˜$„œņ=+:ĻķwjÓ$w6ĄäIśPģ‡Ä?fŗĢ”߁‚”†å’׏I·ėQ)hK}ĒĆ©ß9“Š[+iѤŚdkŒz× hQ²Ź '”åøļœT$L¶;¢K©2Ź—Ń¢ƒ‚Ś¬*[}ö³"ł™į×ÓŚ“ŒlJ–”.“­Ų žĪžå \īÉį¾µä^#Õļ>Ōl¦yܜ³”гhJÄ6PŽJ “Š«»ŠVn”ö˜œÄ¬G¦E#xŪ©Ÿig)œ„ĆŻÜ×D|+©Įueqm­¼zz¾Ü(!É÷ź1A|ČŅ’K[Mė"ļn>nƒń­{ ė3°ˆ9Ę; ‘µš}Ō« F…ä‘Ҷu/ųimfš-B+[…\Ø"SéķX'ɾ:“ՖłžŹ’jµU9EĘ9üėįż¼ö7Ņ$Ń\*6H xROZ±ŖK”īogouøŒ6sT!µ‘fa0łsĮµmrfYŌtx%O¶G02…t>µę÷ž%žĆxmnŻZ3nę‚{S ļ“»ČõKe6s+Ƨ„Kq„kŪĆ(2Ś0ł;{ŌJ=Dq¾'±Ō4Q4“ȉQ“ø¦øŻ3Uqw ^K°cĆ¾ę²Š­ö©3 ZTąžõ»£¤vģ«’p„akŗ=öÉ5eČĪļƲ4«ieKŁY$x¦˜gµŌ#¼…ģ„…‘²[Ŗć”Ś[j7VöŖ³,{ʌ… ŃL™Fē˜x²ę|I"™ųę¼÷@Õ[HÕ!3Įö¦žL¶ŌōOä)»ō%Ä÷Ū{ŪJĪmY”m§x?ŽÉéśT0i÷iI ™dĪģļSÉ©”Ń«i{!Į˜˜¤ä¼Uīfx²\Čę“&4īZ‡Äv¶čÖ×F€Ÿ6ZäuŸč·wŠŲ+ĮopAa°÷4™Õ©ų§ŁųsPū'ö=¶™MAø;ĪsšoŽ|ļčPkw:y@ŪüŲcĮ8ĮĮ#Ž?­zņģyQ„¶d^&ų›”|Uš5™¼K¹µe5¤ø9 6ŒļĄę¾lŌ籆Īå>Čń˜¹ ¼ļĒ|V^E{3°ųc{b—vÄBQ²»X×­}sį6¬–—övÓę³oS×ėBFN'Ē’~#ź^ ńMׇ®,eŠ8§ā`v–Œ©=¹õ®#Ć:õŌŚĆjfh`8čäßSßéZ( ÓDŽ#Õ¼My©OKóE‰>O”#&=Ē©Ą’"½_ĮsėŠ\é×:•µ“:tX/!9-Ļ÷HŖå[1ģzwē£_k_Ł© Ó@ÖąØŚq·qõ‡§üW²ńˆ!Ńõ ;Ķ=ŻÓ÷€Œ`ząō8«±={]ńœZ>–óiŚĶ¤į”*rTtä{×Ć~&Õ!Ō5)ec¾C€üń@½–‡uį›4 g4Œ“ĘH.˜#ÕčM§é–ó™ōövvV>€zPiOM5Õuf²¾š2­ągåTžŌc(`CzŒŒSȎyG”[ū"t†FŁów{Ŗī·įßėšѵ’ĀB¬<ų¾özŽ?*č²>x’…OŖhZ‰ŗó®n­51‡läg®GO„zo…ßNŃ/P͹¹b £XQVkĶŲč¾ Ž[x‚[ƒįå[U*nB69ćÓ5×üųUāŸź—0ėóA ¾Bʃī:“œŅh¶ē¬üSŅĀö:õ½±¶Ga¼¦@Ē—JšŻ­š1ød®~QŠĶĄØž›³ā+5¹[Ÿ“Y¢”ĆŒ² zśWĶ—Znj~.ų|·›’&uI]ĒĪĄg#¾*ŌRĻæuæ ė6–ÖWbęāŽYQd Ąn:zWųĒĮŗ®±“ŚnÆwa;©Weč§×ßµsJJö&275O źÖīü=«jmt»#Ż“Œ;óß5ņO‰ŅĖJÓ.¾ÜTķ!wØ? ü؋,ĢšµŌŗ½œ–w¾M’ŹUaŌ“_jü@šęi£Y›+ė{©ü½Ļ$r/Ģ1隹=,)NĒÅśøV»y`™^=ű]›i¢_iĖܶŠ6āK‘’øź]Į3€ńžd–öĘźØOļ£ŌZf«q”\YßłŪį·•$uaŹ#Ģå¹÷®¹e‰“½/ÄŗؚĪHŃŻ#`LG śsšąļō ]†M:ŻVÓÄ” MĄlĄĒ\’*UČ<ĻᮽįßxĘćþ7aex&ŗÜDUU±čzÆėš‡…tÅŖŻh Äöņ„#żōē!EmM2•ś1nśŸ«½ģ1)ŌѕdQóŹÉÆŌ‚ķ¤ų—ĀZn±i$\‡Ėøä¬qļĻėW-7Üł7ā—ÄwšżöµįŲįÓµC¹‰ŽA–‡‚¾‡Ž¾o¹ńf”yŹšy*źN•žŚ”¢ŒMx‹€·JŽ…ŗśz‹ÅŚV{"¦œŅĪŽŲłA qž~•Ŗ6Ž„:ĆoķG·gŪ°;c !χÖ¾“ŗ³ž(¤šGFLÓ­ĪHĆŅ<-k fS±ÜģD–BBr~µÅėš>  Ō“]Æ#j0=ELö0s<äč·2Os-œ}„26ćØėé?€¶ņjž“P½‘ōeCFūć* 0}ź"ō. “x¦‘ńh×Ć^#†ćPÓ®®2æĆõļ_züPųmį¹ü¦ėį…‚Ż̲œ§XĒ­i}.jéœF¢č×¾‘­§¶ŗTc&ĄčsĒ ąwZ×Ć·S¦« ōĪKźåqŲc„!ŲĮńF„O%óŽß#sĘ’®¼·Mńeī·%½ÅÓ+«<‘ķķ@Xū£įźŪź:RŚLā #)/–s¹OØé]€’fx† cĆטüŠļ  “““œf€<ĒÄ:‰žĻ>“q|£GYLRd„:(惌¼wŚ–½ 7‘“¤œņ{ŅLNFēƝBŚćL¼š±‘ŃüÅ.N}=½½«Ź¾>|5Õxż ~ xKöšų'ń/ö|ń՜7~µ§Ķ ³:nkyĀ’Ž™čŹĄ0ś’6_Ž|Iš‡Ę¾6ų=ć+{½?Ę^æšŹA*•i¢W;žĢ ÷Ļ”9•Mōkń_ēśÉ*źP,S—™ōćw§µRūŪĄįOQ]iUb6ęG<ķ²Tżi¤vAŸč%ęŲßXŪ_ĄEŬØ%‚@s•5Ķź{fņē€ĖĆdWZ%(||ųgmā}ļ͉œ’6ųĪ n9ōēł’r|A œ{ ˬésˆœ\!ĢуŪÕJ’:äpģćwüwöpƒUUń.¦Ŗé÷č÷ŚuĄłsó'±ć•üźIo,sĻņČ·0ā)aŚŁZé¤ģLö2%¶W–L©+Ųf,FĮrpNxķ]ŌßC‰–·ķl7҉C*>fp9­6@čͽr}*-ū~P”Yøē½N؃²J|¤ōō©|§ć+ƒš į#FŚL£ĄNQ—kdqŠżó’‚~Öæšƒx÷Ęß±ēÄ-tMąŸīøšį˜ü°\•Ėƹ8Ļ€õQėJ[Xģżpü>Ö5æxgRšÜ—«Žü/p« “œż®Ü{‚23ī}+é+M[ķö°\LøŽ»dĪÖĒ5ēUF‡=wi~m‹sęDÕłū’Lż”ģ’koŁOY–ĒM“½ųįńö‹wq—eQłņ1É÷®9Dį/N³Ö¼/}Ŗų;ÄV÷:F³cq$3[¹åppT‰>É©ZLå]VPrŻ:ŌĘ:ƒ=ĒĒ:v žÓ5;K{{»I£2,Ń˜óČnł5ąńF·QīŚ3Č> ś聯Sb/N1k--Ō’ZĀŚ?Ö}}+»ox‹Bń/‡|AįķYŅöĮņŃ3’“'qZ·rįQŪCõĖĀ^5ÓüQįWŅ®ÖC4 — æęY€ē#Š× ć 6öĻS˜Sµ©3„w łPz³Jģ£@ĶČżżŸ’b6ŚłµļЇöÖ¤@Ź vHĪ­~‰ųsįö•”|ĖkdÓ­~X@@CŠī;ɝt^(†ņīēIѬ› Ćø_’ŗķKݼĆOžcVc$Y×d–Ā×ūBŅŁžTējqøzT¶^"—T±†cöŃøä?}kh³U¼µ±ŠYĆĢ÷=kȕ Ū9Fe\/ZįlÕ.…»=6˜œä8Åh[Z¬näœf¹Ķ’¶…¦ŗšÕŚ"GēX’ß\‘•3×øØ˜Ču=FQ ó§Ņ¼śļĖ‘3[½Ģk7esƒD)»”£sÄ|ońĆ> ų‰ä“µC—*ą=³_Ÿæld—ūGGųyu©ŪY\~ķdœņ½óœČWe*fš#óćUŌõmkP—SÕµKķNõ‡I*æAP[Ā÷ ®čĘĘr™Ń®ž«ČćR R$Ģ°9¢R±‹Õ‡į[½vņ;y!ē‚üõƤ¼1šņĒOPg¶Yd8QĀ×4ęšé¤xzŽŽ8ŌC1Žu¶‘ŚĖ÷(j¾.ŃūE×ē7° XĄī‡ükÖķ£Šõ˜†U—©ō«”Hr0|AoęZ© w£qŽ3Xö8`źźpAėYo+ķˆ$XÄŖ:ż)K²ŠŽ=NÅ(-"YS.Øć½u±[¤pŖø÷ F$·Mē”Į-Ņ®¤•IāeoQ@ÅsšŃL»øćµA{dŠdT˜©õ©”¬o3—ŗK„RV6uœzS”t6ć;Ééč*c-GsJĀéāŽ“Ę„ę›öĄó²,¤ā“1–ć.ģ gŽXĀ dv&µ·DÖĖF¹Åh¦IĘjJŖńDǃøu¬Ųd¹gW2r; ‚£+žŸsyĶmńxžŁ–ņ0¬™Å!ó Ā•ĖJ$-äŒ08>ōŲ²ŁÄöļę.ŁLęŅāāÕŪ)ž2:Š"k‰Ä'‚®+6X„ņĮŒķ`qĶXµ¹dQ€ź+MeI ,¤•.[{G·ešKl`ƒ÷GĪŻĶn%ūDQ°d²ö«”nD¢f4¶ó°q:6Ņ 3L¹Ūq5“Øl`µ”£c2²Dń ݵ=r:VV£kiså¼§bŒžzMt4ņĘ/ŁI-Ī©młH>ī}zšł³Mh¤S ­Ā pJ©'c‚?JĘhÖē=ŖĻw§ŻDøį¾īΌ3Ö“gX²¾ģ\g®{b³nÅCs&ŪR[w†)ncŽ_ųxĻ=+ķŸ‚>1ƒĆrDo˜}“z·#-“éK˜©DżVųqńBÕā…#Wc# ŪžĘ½žėĖv„O˜°G'‘]ĪJ°<žmNĒZ¾‘¬äVĮŪ€k­¶»ŗŽ°8`÷®£ž)¦pž&³M^9-ļmŅ{s÷ƒtaé^[uš³ĆڄѾ[XčĆóÓ4žƒį "Ī5 X&UĘā>ń®’)ʕ2*¶#^4Ō:×ģ^)b±HāĻ_̲H†3ę+r΃–Q¦Ś¹ŗY¹nƒ•艣[^[‘x7Ę:SF±gŽėŚ—gy1±Y<ŠŁéÅq7?és$7W/o±øĮążi¹{C²šµŌ²¤ qę¹sĘ+č-+PŠ87*¬d8éH—+œ_Œ|Uy;­Ŗ1aŪ'õÆ?ŠĶ5Ehļ.Jø`G®}jāŠhŃ$»Šōė{“(øUwd]5¾ÆżŖĖ.Į¾¦B.]ŁĆtf…Y:cҼćı’Žch²£ć<ž=Ę*F|Ćāļ hŗĆŹ—©‹ …9ō5ĢųOAŅü:$··Kf.å‰ŪŹPZ™‘ā{éŚüSi±ż§MņĪŁGō’ ö'Y¼ŗÓDwß3łVMé`”“3Œ ;a³Æ?Ņž÷0-³#©Ś8Čõ„fqŗ„ķ;4véøō$–Ėgœ4’Ŗä³[ÄYM{g{6å“Ģn™b¶WR淞+Hóƒ€*e:»O O®ø?h0 9ąÕ¹Øx>’H‚1ęEtĮrppxõ¬ĄĻŒ²"~įLēšĖšŃgÄrFQ;ŸJŃK£źZA ķcۊĒ}²2¶: ™¾€pśņŻĄ$øŻ¹ƒs“{Qᨧ”»LdŪĮ«žSģmH}6Ņh-fX‘ļ÷OØ­;vŲØA~øõQ•Ģäŗ ēŁĻŹĢ¤œēҬ¾¹t“#£G/Ģ< WLLÜOUžŅÓ®tyŌ œlķļ^!©YŪŻ\É –‚ź,žLqó-[Įź2ųGĻaUµ-6 Õ®cVŽZ‚Ōš0$kQ…­bY”ć ņ~“©q*åC±P1ĻJ•.ƒēg#ö»‹–Y&;ģĒ×Zh—ŠX­ŅĮ+Ūp(čj…ĢÉ4Ųn„øŃ\ ŁĪ\…ć=ĻJ±«[]0š;x;Nsō"¦KB Ī.ćGróŒüŁō®‚ĒD²Ky$‚hmäQŒ0徕‰Ŗf<÷’[³‡dĮėŽ1QĆw†-q¶p6ŸZØ»ķÅŌ 6e”'>µćŽ'š¶§Æ$ļ§LšČ›œdnɦēŲ,m|,¾¼šÓG§x®Żä17óō¶”¬č—6Ūąg‚#ó(, Eō©`×Cµ‹“½¹ž)dXƒĄ#;Ŗ5“Ó„›&…”@9¤bäīu:}Œ%¤EŚ:w5-ޟuŚĖ‚1@)\_\EFņ:n\:ėX‰k©Ģ:Œ±ĪTgŠ sīmŁ‘|¶ū¬OńÖ«Kµ[lbxöšGb(%Ģį5ēKį¶āŽ Į~U8łŖš&˜|Ļļ‚°ÕŻ¢œ™ŁéšR[ŗyS…‡Ę1“]ĆĘÖ¶«$2,¹Ē­.ffpZ†”s Ä{Ķ]ŻŖmKTā‹jĒBi\Ņ–ē%3<©$ø>Y8ķ\|šŚ.MÖ`„mĒ?ZNGb?ži_Ūzą±²»Ō,5;M³,*0“©nGJś×QÖ'Óō}Sƞ%Š ½¶ŗB­éņĘŲūĆÓ"½ö2S¶‡XxcI—ķšm­˜ÉŪ©øōü+Ģõ/ ’g ¾×?3ŻóŠ9Q0’†¾ø¹ń åøHŅŚr¬»ŗ1čF?*ż4šO‡e±šņ © ¶Te‰Ōķ{śsBG,„d|?ń?ĀŚW‰õŻJ×ā O)1J‹¹uĒq^%®ü+øŅģ’ēEFÕ”-±P.Ņõü(ø£>ä¾x¼;¹Õb—%Œ? ÆēXž#ųˆ]tż&ņ­<ćæ—Ó>™žt\ź…‹:׊tŻm­ģ£»“:ŒP„*‹‚ūCüō¬k G –A2±åŌąėF¦»"难«a µ¬i4PüĶø’ŪF8„yŒ{ Bn®VG¹B~āąćń4ʉĶO¬ß]Ėsqg|-­)Ÿqč©­{PŌ^ŚźŠłŃ7>`’ėŠ9#Ö%“M#NÓķ¤øŽ)˜į×_¾k”“ńM×Ūb…Fš¬TȤ ž‹ÆXI«”™n6ˌž9oj±ąØīl^rLs·laA=i1©Xõˆµ›;āmMBĶ ˜ßÓåīk×ēĆŗœIw§_Ć +¶ 稕ˆŽ² čRZÜŽO¶īŹķ<„V ’h{Šłāoiś>„­Åcrę$gŽĄ öśę²ęb±ĒE^sĢĮ7¶rŒnÕ[i³\ƒ3Z¹¶A»p^\er–¦ø×:‚;D‘Z6źŽµSLšŽ¶š{Ž^A(nrŪHŹö­į± ©Ź®¤žeĢ0H²Ķ`«u޽CįĻĘĖ ėCDŌžŁnZ%.!Œ”eĻB}x­9JŒī}c7č+Äövš†›¾yŠymœŽóڼŚkė«{‰˜O, qӚ’’č|’ńjĘūSÓęŒĒ5ÓK&ļ0üŵq^ ¶Ö4Ä“•V{?i‰ßp ē8żhŻX“×āšž»§YkK!Kœl'ŽßŽkŖųšŪþ;Õü7=üVbAxćr˜f<ē€iIŲŽg¹×_|&°šV‡Ä)k=Ū0ćV +2C\ŪųoP¾:–£¦K³ĘꄟīŸLtĶs:—4D:ž‰ge£Ķ«>čŠ~ģŁõ,sšńk} R×#ŌMƒĆrŹ78 €Ŗ*āĢåęI x]Įq¢e–įœ¼NW˜ż¾•ŅŲŪÅ”\Į¦ŽŻJbj»ōĻÖ·%;Shž³ń²ŠŽHę²džP0^k×tĶ;Ć7ŅiwSŖ#¶Č2B†öśPj„} ¾šMżÖ½qöY'žŠø1łjFß”ō5Ć|I]š“AĆMq‘čĪÕn˜jit(ż8żü!­xc¶’^F­ådgņŹ£IŒœf¾·ų„šę/ųO](gmn4ژ£ĢAÉV8ē’Ö(šŌŹGåv¹i&‰$ļ©¢Ćä1d’«#ØÆńˆ®¦™dµø“ģ[IC޾õ<„F*÷EoxĪƗO½ŗ[Ÿ4L§>ĆŚ½ʞ“×RŽ÷Aū_˜‘ļrRķŽpGje„b‡Ćū8‘n,µ6 6d>Z6Ēߚ÷σZƋ|-q&’.ī¤DœŗJF]”ēŒū acŅ>-i¶¾0±³µyŚŽI%Žr~o¦k„Ó>ZéóŪÅu:É ISøcŲ÷©r°ŽkÅ>Õ­.µŠDM-TÉ8i9ēŠēü=¢č–—–4ÖFöFĀH§˜yļéҔ˰4} ”£9ŹĀ“ĒÆ g5õv“ą=Äqiž%[ćd“(oąÄx${€ „¦O¹óŸÅĻ h—ž>¼ŽėÄ3\_,b™Āę\q“Ÿ§Zā-īügšņ&¾š½ń’Ņ4)a AśÖ»ŸßxqīõĒĖ’śÕĖK ¹nxż ec¦±ņljü1¢7ķįÆŹÖéo$Ė+Ąģ7ē z߅~“x¬Śźz µƒū9 H– ې æ×5V÷Q¬„”łėāūį·‹õ(”D67ĶNW Ū8°5żFń~–Öy¬’FĢžS'œ’:RØD¤Y¶š+é: yĄ¼X q’=ė‡ƒK€,°™Ģžļ¶īzSUŒµ1į×{Étc?—ØA†A#}āzq^õ„ėŠŁi6ķ wd^O÷ĶhŹ<Tž÷S¼¼mÜX±ß€}IĶq·z)p#1%Ŗ˜2 ÜsL“—SŁ>YųĪU@×J]Ū2I}M}'š÷āŽ·šßTMSÅŌŚš“‰_yäÕ«\R:/Ś£ĘPxćĀÖ7VZ擨éWÄMlmŲ|˜#<śńҼŪįĻĀ­?Ä?ī5ĖøŪR²Y<§®ąēÓ„+ õ|3š ivWZl1Śk¹ƒäJ:zz{ö¦jž³ŸNŌ4ĖŪDÕ“éAS@nĢ=ė¦U‘łyń§į•ßĆ’[’hĆåi÷ł–Ń”p}T‘^ö’é÷v÷‘”0£‚čż õ¬ć;=M"PÖ< i©xgNńŽy ·2ql9+ĒnkÕ?g_ 3Yo ŻßŪĆe9ÄJy* žƒ‘[ÅÜcļ8Zdģ9‰NģxVÅĒ•u–ÓBŅC*ķqģxĒėLÄüĘųÕąÉ<ćvŹīœ_́¤]æx’Wšąž5äv³=¬ęd™ć”`‚£‘ī(7„ŗŸ\ؘ>&ü?œ]»]j6Ä)fåÕpz÷ÆŲļų!’ķc?„Ā­,¹ĢA‚{ŠʑHO-›Žéba›IäŽōBF™’%fķl§ŖóPź6²Ż[Ēum2Į©Ś°øµ™Tļ†PAqߊČH’Bų"gķÆķ™ū/hö^ »[/Š~Q£kV-6öp€“Fš}s_²Å¢["Ź‘€Œ9ć„sb"ly‰-$½‚{9‰łN;ׁ|Fš–Æųj;čō«Tד¶1Üķxvžńį\¶ĻĢæ‹Ÿ 4Ÿh¾$ųd×h™{Ż'yD§%ćoØN&ßµ‡Ā cįĒÄ=BāK1Ÿ,ķĮŁ“Ē ńĮüėJ{ŲÉī|q€³’ ÄšGLT,7K€ą)ć8®č-Ll5™FŅp@?€Jłm–ėÉ­‰ĖóA=©ÖETkc®{PD„m ±(±‘Œ~¦!ŲG–ä·R(.2źX ą)ČLsĒ5³ xŸÄ>ń'…<{įŪ;Ě-ņj’Bv¾õ`~Sź@Å)#®?Šö9ż«ü%ń÷ą‡Ā’Ś'A÷²“iŽ)‚9’ĪEXJBzōkōkO46Ÿos5÷†uXEęŸ1ä/ØĻōõ \Ui Lźu•• K“ˆĖ,‘Ż–®éļ§\ļ[„¢j5½Ā›Xcō’įŸcH»ŸÄŸü/ö=¾żŸ’hMGĘžÓn$ŠļÜĪņ"¦6äĒnŁõÆÉ÷Åżˆ¼·L€ü½©U:ĘßĆĻ_ڼūķ•Œ{CrIĪ1éÅvz¾‹¤[¬āŽ7Y÷FĮpļŸ~•~ÜĶSŌwƒ¼qć‹ō°{›{f ‘‡Ż>⹿ˆ_ ;½·ÕĪŽ žńˆ,(]ŲžĄ ŗnW3>’ųqū+xūāTzgˆücoØųsĮņL[<žÅæ§ņÆŅ’†ß<'ąż:ŅĆĆŗLv'[‚øyū_•zp…ŒłŃō¾…¦Łi¶ÄĮĻr¼§ƒ[šxGVńØ[UM2ŻžL7Üē½Y‘ä tŽų—ćZ·Ń®| Į•%;L2Hd=†;}1ļķ׌ŁŃļŖ[M’>šP}  |ž"µ6®nc—Łė\½Ļެ#±pĆl pĮśÖ±BQŌń|hÓ“TžÕZ9ZE;rĄś×ēwÅoŚsEŠ!»¶¦³Å#±kXę8žūrµ„nUČƏ’¶.³ā9“J“Ō„QīĮ!"Ļ÷›<Ÿ­~]ų³Äמ Ōf¼¾ø7_3RĒ`ŠgŚ»é#Ž”ÄłĘ@Ęń“bš’†eSŒ{÷®Ŗg,ŁaÕaNćÓéN¶·f$1Źù­Nw«5­­”Čf\WAo`¾e¹He‘ٶŖ¢’*‰ĢŅ3쯁Ÿ±gÅ’ŚÄ~Ńt kŚ'‡¤>mÕųLNŲ^øÆéĆöU’‚`|+ų š&¹®i¶Zž£•WdsĶpV«Ųļ…;¬ś.¤i2iš%”V:vp#E :ŠŅdŽQLÄxÅ)\ÕÄÕkM„|Œ3Ī X·w¶f‡ŒPöbF„”œĢ±I9_Z–kčn[t@”‡wRƒ,‡Šd×/¬ųŽŚŚ32]¢2žA ØĘē›ų×ĘO”é'[“P·€€[xĘq_›Ÿ’iµ–īk]Į»Pq"ń5ŃNŪ xćā'‰|t-νzä†ĖØ;ƒć ēšÆ>‘ÖFŽqĘOQ]эŽyH½lØČː āÆA46±ßuyõ"©˜7sŠ|;įwÄ*[Ū…°UˆķōÆ¢“…–Śd1ÉtDóČ)ҹ§3sŠ“_Ś-Įžć,«Ö½¢ĒĀ*!†L€{ūÖ$Iō4¢Š|¬¬dŸ›<Ón“;ĖiĆ“n‰ŒœŅ±‘Ńh–ŃKÄOūĪėé] šeÄ¢De»Ōņ"e+:†•io§Gqo&FkiŽ`ąwĮõŖJĘr•Į59Ā›,žU”4ČIeĘ3UbJFĀ9§RĆ,}:Šæö·Ż<2IøA=¾•°w-<’ĢLDćžĘŗ=+@k§]…G®kø“'Hŗx<ĄžFzÕ»«·[¼°ŻķR›Ī®\‡?¼Bs“Z¶w°rTPˆä‚W- (ąÕå»ū; +ž“ ’éałeS“×8¬ē¹œļeŻÓŃa¹Š]ŖŻ4lwsŅ–D“y–<”ߎ’‰ēGhĖ+ÜŃo§Ļ#DOcL ė{x%! ż1T5č§Ņ!!Ss½Nq@Żķ¼q£n]Łļ޲¢móy«ž¬õ¼ĪŠ)ńU|ƒÓڵ4é7Č”¾pC@ŻŽŠs ķŁ Ę3NŽ5墎qž“cŻßĮq'Ł–o.n„AėT%“rŠ1f‰£Ū&>SśT8Ycb 9⁨žy}āI4­VŽŹh^T•ń¹ƒė]²ź! W•0„g4D77+tŽ ©ķ­Æ!Vڽph$‚ūHœ·Ś6>HŗÓ4ū]ņyS#"ŠÓn÷ETŒ“@HséŒS4ÄD JWŽ9f\Ö[hRQ,[8Č®’¹-ķĀ™;ńҁ®©y1Žö²yr‚+;ĻždW‘FåļŽh„ØŪ²Yyęµ,mm.örL£Ž§b[«h¶“E·†ē4$&įŅEVF^¾†ó3¦€B±—EĪ:ÖD’f‘šx£ &sŒu “*+µæ•ćFxOŻ#“n ‘”‡jÉR£ØµŌ&Ų!’3nƎ{Ō«(v ĆgZ£œ«+ŁķdRxö¬§Ō®™ā$3ĘN(5๕‡īä,§ŒV’öz]ŪIWĪčTœPnyĶż–®tĀ-Ųpk¢¹‚éāGˆnĒŽ÷ …sš¼’ā5;C±ōĪ+ŠÕµ‡·š8^<)>ōr{VD3c+×į©Æ%·¹·G/ˆG=h·V«°’TƒĘ;×Ui6¦¾]Å”-S¹Iäjé­ 3”ó[cć?SZš|†ĪpŃø{śPDßCzžõī#+±‘ń÷”ń\Ü\Üļ‚w8ĻŽ«hlEĪOTŠź’f*ŸŽ­WŃtØķī^šŗ‘Č$sTTYæ©\Ž]¹WN›‡„sa’3‡FGnA#¬äʹNo¶Ū>å}Šž¤wØ1!‘$W!{Æ­f8‘\Oc*Ļ*£1ʌó]ž‘q„}˜ ;ī1ĪįŠ{P6‹É=¢#«FO÷‡ņ®^ę’±ˆ„äU8³¬=¼„Ū%F‡(ć»Ņ¤CdŌ”9—ę ›榖h˜ŖśuƒXÉlUžżÆÉ Ćp`c5Ģźw¢5KkÕ~šīh,‚ŽāX>d|ĒŲę½Ćwö×I šćȔ{Šż­"¼e2+EŲęŗ›]jŲ~ģ†\" tw–*γ[›$ŸJóĶZļģZ„Żā–łbN6jÖĘ\Œō?ĒZeµ˜·›ĢYį~\©ükŽ’„ŽŚēRi¶ćZ%āq4uvĀāÕQ"”’rMp,Lć1‚¹ć5Œ£bKr/ŁÕķƒR“QŻ"°m­‘Šõ©¢‹Ķ“²%JKŌmō®rKķ¬ Rsր)IØ£ČČCGģkZÖźTŒŖ9`}ų4cͼ]ჩH5 ed¼Lēiį³\dĮ[źv²F~éž~µ2Ųé‰Ćź`,ģ# GœtäŠĖ1&ĘyāY" Æ#®kdϐ>+ųBŽÖźāźÉR(œnĘ;šł+[¶ólo4{ō·ø…ņIŁóŽ9ė[F=FäĻĻh·ŌīHµ[>|I|üŲž•œš“ńĘf9bl`õϽZzo†µ6kÖ°•nCg•®Ž[üłVź$|£–¦øŖu7ŽĘõ…ƒ\BĀ[ˆŸI«„$0•VGŒ»”óšĀ.Ģ£Œ{)m5#>é’>ē9š®óNńbY¼71Ęāßk€ ĄZō(‘)XūÆį·ŽōkĆŚ}õ‚½į‘’#‘×øÆRmWDÖ"“ģšeʙ2’$ŽG žļ’ŽĘR‘ęz»Dæi;Łōā©ŁßŁÄPµć”Ąč(qčG::k}Y. äœt÷Ģ^jqÄŅ  ŌJ)÷6–zÕ¤Ń]ŪĒ0'ī7qõƆ~$ųvÓĀZ„ĀŹģģšcņ‚0„ō®iš©Ÿ<Ž6«4É3#yaˆgµY™Æ5B²g”8ÅsŌF‘ņ+Z#Ę„¢  ĖĘy÷Ƨ~ėiŖ^Ce$Ž]dÕ™¹÷’ƒui¼;åZÜ]‚­Ļ?ʾƒÄZ¦£b»ŸąnĶoNfUGYįs3Ż.”į²ÜuÆhd͐³ŒtŪ t9cS‘^7mĶÓ¦+š·W‚RŹF Ę*Ā꟏²Ø9 ĆŽ²u ÕAÉäżč3›čc5Å½ćą¤ĄńĻJź4©XFC*zséėA›F’]"±epŒ;W×X¾hž®øo¦E1XäŚŅcpļ,Žč{7A\Lj¬lmńx ä608 g?cz`øŚ”ó=xÆkš¶·ż ©Óý ±7‹­ķVfTh®wdW›G«Ćk9ÜA?ÅĻ4¦¾*øĢP[ß·Ł7e£=+ß|˦­ŽšdfĘ=1@¶ŠŖpļ§Zǽy66éČėA.VŠł³ĘzLPO,Ādvo˜/­y¶•”Ē-̌Ķå>āyīje°Ō®n]i°[ģŠį³Īv‘Óޟi4ĆČxIVln^±©6•Ņf1ņg®kœ½ŅYPnŠų +hĖø„zÖĖ™ó¦7$ƒ»§5f_Į Ł)»Ö”ßCHŽŖ·(ļhīŃ` č=ė.-ZbLrFŚćļ ĀR±”Y5e¼;ĒŽsDśM°Ż-œ²[ļ8ņĒo|Ōū@5TŹØa˜ Œb¶ōˆ­ŅU6Œš=E\]Ą·ā=?JxŚQ.ųßø`^t×6&戶üœŽõWĢ›:I9UŹŒņ hč:x…Ł„ »;Žy¤e(źz„Lf_&Óløźyɦϧ s2³bzŠO)Īź»8³y"Iœšē¤10cŖ ¶lÓB±­§XZĪÉ Ī³ĄœŠļ×ĀQŪÆœŒ|¢3÷²kh•Š÷ki‹+w6å”p}ExŻĶēŁonµM„ņŽžōKcFģhŁŻ¤‘ ‘‰9 {V¤ŗµĢVā9Ūżīx¬L¤õ0'ŌŠ[`Q’jŗŽgwš|ČŲƒÓ‘HŖlŠIć–Gņ¢_ŻéYwXp]mńó÷€: Ļē6ĆĒæš‰ųå “Įv¾$EŌ#hd&b ·Ø ūžTł4Ž/ńÕīzhi#.„C,cÆÖøŪoż¢X¼«†Ÿ+å±s’Üw4½ž„}—‡?“ Pˆ›Iģ1Ī+²ø¼Hšŗ4mŹ­å\f©^½čödM—ƒu‘Øjӓ§-Ó2Ÿ”/)ß#Õõφg“æŠn“ł,㸁 x Œ(ʹĪz÷żj”L%4??¾!ųbóĀž”s$qŁiü6AĖo$õrzDSk¾jœ•ŻŅ“,śŸĄ:5ʗ§^y- ųܞ6»]‰ć¼¾Ó'¾¶š& īē‘Šgˆ¤\eÜńKżcQƒP·µÕŚ §oŠzś#įĶĒƝGOM\ŅžÕu,„ P…žĪjy‹4üQū=iŽ!±ŗ×ō½Fåīķ$2ÅąÅc%—±Ę9Æ?Ńa¾Ō­$Ž…䉶'<°ģqėJNč—œ®›ā/ź¾/Ć÷³[ŁŪĄvīy=²; ķ|yńfŁ[ųg]±Xž1ęCŗ-¤«v_Æ£ŁÜµ‡ŽĻńĖXÓ§k_Ś]e•\`jį>x–ēDń]Ō²]O,S„U~U攫P1©ė&MFŽćXå“/»j㟩Ŗ¾Xéś}ķž˜>Ūi0[˜ŠĢBĒ)ĮČęµG%ŸSŸš7Å?ųGōhģ5eH/"Ē– .p:ōā“-µ½;āeåÖ„–¬²n·ĀņIģÜ’œV¾ĪģŚ1=ŗĻĆ+įk„¹<ČŠė€HśW”xüAā}F}fžÜĻm†X×tƒ1…c¹é¾ż§ü=£ZižOŚ„ÜDH'±=+ė|nÕžĒ~—'z2ł‘:œ”ćų½;ÕÉ£ÜüŅų•ńWGń‹u{&X øI›Ģ@“×¼’Z‚Õ“脉–Xß:ŒÖ.6-FĒ“Ühe½P3…ąmÆvšĒŒ'µŅćK‚±ČØU£uķR3Ń|e=ė5Ō‡'£?}āėæéš=¾æ§ŪłÅéÄyłˆ g–/ˆ£ńUµ¶¦·) جĮZ]£ĻBFj·‚üylś·Ł/åIŌ>"łł’=h°XśĖÄŗ>ƒ®ų.ź=±ż©¢FŽPčŽ9_züĆŌ"ń€¼SØ[ŽI5֕-Ć5³²ć`Į$~•1‰JHõļ xŸLŌķcyn|ÉĒĶņöōÆSY˜i¢FC%›‚„ŗĘŽ],7>ˆ_‡Ś'†-5+ē[«kŹĄ!čĢOaų×ać’_é›!ŃŽ=RŁ¢e3œŪéĶsĻA[]Oˆ5ż ųĆX»³Šµ{Ķ[ń)RTżÖėŽēÅZp–Āö[ƒ$Ć9ɔ~tłr14·k,±±f!p:µnxĆ2XŽŲė6 /ö[įKŒ¬€>kNc9čuu½¦§fšK hŲĘš6•5ĆIoµį–Öé„T%‘pXgŪéN ˆ=M]B)oį²™‹Nćå?ž+ÜtĻj>ŃaŃ㹟ū8DdēfG&“-Å1āŪĻkgRœy”ZP°(\Ÿ­uv:ž‰§Ļa}uķĆĀ€vŠT™†a4P1+Y\bxNčb]Bö+•@ؘķföÅ+˜­72üQį%šō™(²“æSī+Ę­5µ}RK&T’Ō‚¹ž,ō2v4ęź'ˆmāŠ¶ŗ…y*Xōęø{VŠŁ’Ö)<÷ŠˆÉCé—ŅD#Cŗ¼p5NßĀ×ŗ”Ž ęYavłĮ?tUó!r£é߇_gŃķ­šŅkƒ ƒģ vž :-¤ų“ż \§žøÜ{ķ'ń?…1Ųōæ\Łk>‹WŠQ_K+<t°õ>½kĻ5 ]3JŌoµWŽn$9—ŒĘ{ž5Ÿ. y¹šrēā‰ōļh·,žCī]®J°ĻCNkōkĄ÷6šwƒMŌį‚śh‚żŃūČČ<愎–>SńģÖ'ń†a(‚ŅŅIgv8U­æ~ĻÖZn•'Š<1ؾ®»CH¬Jł`qsYrŪB\O.ŽņH“é!;¦ņ‰Q؊šŸ_Łź7rK§%Ģ1±V^pˆ¢ymŖ=ƒönšÕ–Æā-^ėĶv7wp£6É™Ž0O~JÓųæi„éž&’ ŒzsF(An{=+x« ɞWdÓŪ»EpŒŒ§9Ø­{ūkn šø)…Ē'ņŖeܧ¢ų£Ä^ā·R»•ó Ük„ųĶćĖķwNøŠń!²†D*ĪOJhÖ.ĒŽų ų’Yt­ņāźļ¤’1*Ņ÷@ĻGJż`ų=ÆhžšNŸį=Vś[8Œ€*æI\ćߊ[Ųmō:?Mg¦0]d1¹ł  k–ųmćękżWĆ+5ĀKę!bĢ|ąĻ#”>5i^Ö< ­¦„ii'”Vk¦9x9ōųķā‹tw½†92" ‚3Ö¹¹5Ź]ß%²ĀøHÜvŸĀ¦Ņµ=GGÕ,oģ /:Hƒnq•,3ƒŪŠŠmŸ­? ¼]£ų«ĆqK»QØŪ±“›™›«»Šįņc•PqĶhń?ŚWĄų›Ąė¬Āė5ż #D‡w—’C}²+óŽś(”sån'éĶø£š“dzx__ŽÕę‰m.~F>Vnƒ=³žė~#ƒWųYćæ|ZšŖ\AŖiw‘_§Łóūͤ Ó6ƒŌžŚ’eŽž ż«’gŸübš|ĮƞµÕb ł‘Ü*€ĮżĮ~"¾²šĘÆq”][J6²£‚kš¤u:#+qh÷¶>2ŠąŌaFū»[=AÅy7ÄÆƒŽ ųæąüų‡¦ĒŖx;ĶRYȏŃ”€Ėčzs×!k’tŌ“‹Łƒ‘žp_µ?ģŁā_Ł{ćgÄļŁĻÅŃ“—^æ‘t¹†Qļlļ‰Ą?ģ°ńĶżšŪ»Ęžg|ūÓĀNR‚rŃõ[ėŌĘ”žcDĈ…łęž±¬¹ŪĀž¢» Ž9FśyWš[w–F>ZŖŹNĆĄ+Cœj°łrM66Śģ’Ø\~’’‚`žŲśĻģū`ų{āeÅĶēü*O²i^(¶Œ’@Ž}£Ž öͤ7ƒ|yį?‰š¶±į½V;«+‹hÆ"SĮ1ŗ†}G5XŻv2u[8X4ŃóōÆ'ń–™ öÓ^Ł­,f)—ŲĻė^t՘4~cų§@Ō¬¼S¬čfīoųH4ūŸ“Ą1ĢšœP:~łm’ų „üHšÅߌtŪI’öéķ› ĀZ܎8ē©EŲ|¬žaõķ+QŃļn“»Äw¼¶ œ°ĘĻ8÷ā°¶ĘźC vĀ]QĖV#<„•L{½}½źø…cÜ—cĄ®“œ“äUyp:b’ 1Ś1äŠ å$ł°ē#Žjaæõj£bhCHźX/sž•wd3H"eł:ą÷ ź§Šż”’‚'ž×V?¾6ź?³§Äfžųƒ#Ak•Ś-ƕvØē#ēż µżü ×µ7G×¾ xĀī+{ò ­ó«^Ų9Č÷#? ¬+®§\WSźµo:Ī„¶ó—%P? Õh ³„=¬NR hóŃIÆ*¢4?>æą„_4ļŒ_ęń̚y½Ö<7 Į©"©cqbĄó·¾Ņsł×šŁā ĶšĻǾ!š¬×[šźÉ›‚š1$céœ~É=q‰ĻiV¾»ŲŅ6Ż’OZśÆĆ~]_Nó%·‚qÓ ~`}Eyõźō:©SŌōæ xū-…ݼ~K)9(:żkŠu] jö±ĖsncR ‘“^=\N§ÆJŠ<öĪĪķnM„›ĶjØp­Q^–5ČäKM+[p×ˈā–L.įžÕwa+ŽH*RčŽĘ_ަ–·žZŻY9;;±Üb»/…śŻ¾Ŗ¤­*C1ÄuQ^ÄnĪįϦu[»+t2ŚĢ«nFī;dלźß¬mmžÖźś(QAf!ŗZå”lWš’€~ |UŌķbšåĶ®‰.Æä*§ŖSė_¦’’f|>[kčķ£ń/‹$„-ĶŻŅy€{ ŽÕ¬)ŲĢūWM³MLˆ\Ü¢XÆ>K7ʾąt³maŖMpÆb %Ą.OP=«C¬z·‡4ĘĪo,)žS»“Ž˜/ „ÓŪŹB~_zøĀ䜾„āW°/w*™ŚCšó¹ükgq=ĆŹēo'waWŲ;ń4VDy'T\•2nłSŠųÓĒ?“$>“¾±Õ/”‡Fi[ʹ‘~}£®Žõ¤bŲĻŹĻŽ_¶(ž+č|3Ø5“&B±Ü '‘Ųó_˜>0j:ĒŚ&“QšO1÷² MuÓ¦aR„¶>mÖ|A=é!6Ŗśb¹©Św *ŒõĮėųWLUŽIĢeøel32ÆlUŲ¬Ė9umźæ7ĶĘk¢+C łMŹĘ¬6œōć­tvÖ™#Yć#%˜ąR”¬8S>„ų'ū8üUųżŖŪč? |5wpļ"Ä÷Ņ! Ļ,zž‹æeßų"ŗ„.ō’|MדŻgÄ-¶QkrŪc^ :føźŌ:éÄż²šĆ |0H!šĪƒ§č÷ʱł‘Œ³ļõÆO–9µg@D¤’Žęø%+›EŲŪÓģ.-Ė ʜgڶVĻqI‘ńź*%+£]搳e‚²ŽõRāHhÓˆżk'+ŒägŗŹĮßkņ1Y:ŖYo|ŒŌŒņ?ųņŹŅÖāO8UÉ żŚų3āĻķ=¤čŠM Ż–½ˆgwAĻjŽĶod|%ńćg|kjś}žæu§h’üĶsēńćŠń¤Ō®R#ļ$¼ä–;˜ž5Ż v1•AĮüÜHī8ėOņ6āŖ3Ö¬Į³bĆFŌ/8ģ¢ó2zJõü6ŗK…ŸYE’~\m‡Ö²©.…Ę=O“üį[K+HåŽ%BTcŽÕéŚ>‰mu9Žp»}H®VĖęFŸöDz}Š ėéŠė£‹l*ĖĀśR2lŁ5%d½³&T9d"µ'½ƒWDöꌹšWf‰"?ŲX\©ć®*Äś¼Žž\¬N:gšB‘—=ÅÄŠ”Go/= cĖ 4-œ1‘Ś,N­ -ļZNĶeČŃZ?nŌŠĘåįA•Ļ>ĀŗMBKi ¼Ę;°0 Œ$¬ŅG¾"qĻj|…ŻČky“Ÿ»@µ+Ćs)¼õ#Ö³æ“f³‰‚>&ķÅÄWæ¾ĘÉ·uĻ_­(¼ū2¢€v–䊔Ö6’-Ä'Ģ\óĒZéīn-.ķVHTŒēÅ(ći`r­’CX·V’œ6ÖÜ=;Š/i"FžYF\ ‘UÆR÷m »Ū½8© Ļ+d2óĘ+µŃ.„O.9>`q‘ځŲōłtķ.ęe·—É›½Mr~!Ó&’ ›÷mꂳO2ŸIšōµ£ ‰³Hā· ÓWG…r³£®Ń °·w"1ņśzVÜzz¾ĒŠCŌw G ŁG§Ļb²ŖN\uŖséāŠīõ ŌōIÓUk©$`:©SĪ·-nß ’äqŸZŁk˜’/0•+ЃX/lņ3ÉjJÄNvśPR•Ž?XŠ­Æo”•ŅO5zsŒšŲ‚ĪéZLøOįĻ„lš;+›Q²HĆśzV¾ŸušÜŲÉ"‚Ax؜céZs”Ųī“-zŪQ,dI ŗŪæę^5Šų‚Ł„³•, +ĒŅ¢Rø±Å+Ūł.į›·¦kĢõKĖėY¤‰ƒC‚zµ”„cHùȽ¼:¶«d÷o¹®Z‰“Ńń¦”ga§jnµÖ2ĒĀ`øqĶqŚ„ÖWM Ńµ × C{°éččéŪE!łFGZߊõĶWĆ7¶×¶lRę9ĄČ5’*ĒŁ~ų‡qÆÅi)p%@71ėÜ××^ńšŁ ,VuĒ9éłWL72œOršē‹“†æGYÆŻ'šśf V±O³²²”É=q]T×SޤĘźWpNŒ1óžFøW¹ó$(ƀ3šŠĒ•ģKöØŌmóBą~uré*īēž™ ’¬dBLŖ†@=뢃\ŽKR­hĆų€äP&e-Ų[•‘ݶ0xā­O©ĀŒŅŪ•Æ¦4rĒn—"ĘīŅé]› G \Ņj„čUŽī½HoZr·CUs°µ“c,€ž8ęŗ+kĆÖņ¤’BčūՑˆž]EI\ØźļCĀ®ž'±ń¶„š“óJå>WĻ•ŽķĻģšMų Ȭ@ć¦qYø"łNĘŌ‘_Ź<ēÅsZ»žb±£$Žk&†G-æYŒg*”ŸŁÓ@r:]‚W'”4€ā¼Oq-’"I:p QšååÕoÅ«µšUcŒŸOjÓœĖ‘F•!aFńŗŒóļÖ»›i …#24ż”¤U‰®ÖĀK”šÕ!ō=ėJĒĀņź +ļX‰ $UF!Ō|+ØéÓłƒ¦Wš–ūĆQĒfe7‘¼»sÓ>•2R”3žŚöĪņI†ÄnžÕ¹£ė³éwļFš`$ żŃY–v·ž3°Õ£QI¢’¹éƒčk‹Ōōį¦h ½ø ‰C±Óhś„¾@ŽHŌŹæÅŸ½]Ž“pņČ!L)$˜qU©Ļ4o^ųrą}ŠŒü§ś×s§mr#ojŌĶhm%œ] ÷ļ\&·¦s%§Ģ9ܽ(5ę9¹-ቔnæˆ¬Ė=ī#e`Ŗž¤r c%bŒYt›DŗŠą¼¢į8p1žEVæĖūµšTRߕv“IäʐNžd<Ģrk™Ō¬Æd„n‹š1ÕŖg.¦”Ń£¦ŻĮ¤Ėi-āHńn×<°­«É“}Nwf¦6ģĮ¹e#xÄåā+ ŌŖ#!!‡„tÖ6ņÜ!‘$rIĘŅz}4Z–Ixœ(Ļ©j ¹VhłŽ:VšŲĘo”„?ņłŒ|ž¢¹F’Łƒ“līń¶Fƌӓ&/SnĶ,oāB&xfčTœs]¶›įšh.ndy·¹a“õ¬MMˆ X%Df:ąö©Æ„įb›Č|~ó” ®‡‘ėö×3żõ’įN~÷ėX0ĒngKI&—r·§c[£…meä@&Ž@Sƒļ]E¦øņ …®ó:Õ­0FUÕōŻÖY3Ąķ\ĶĄŪēy±'ĶĄłz{ÕŲ3-–ĢķE #8Å]–īĶąņ9·äķā³–ā2.m£ …ūQ˜LA¢*ķÓ•NĘeō²ZAę gŲēI9õ¬¶¶ŗegŽåøęŽ[ęĒQ·µˆØ·qå•$äÖ\ķ՜[Įp±Ä§{ ‘‚1ķ^łåB&“NóĆ,× ·(Tœ†é’×› ‘}2ZZ¤°Kø®Óž ÖJV6‰¹Æx~{‚ćQD(üĢź„č‡É·(2JtQėÅir÷1åÕ®®nīGŚXQ‚qĘ>¾•Üé4oŲ.”u䦲¬cŽ9 źsӚÖ$?#ڼ ū6ųĮwāxźˆAŃ²·ė^ŸńŪYšv‹6ųć”\[`ß%Aõ__j™nfę~wK¤źŚļ‹īleøŸŹžuHd”ü©Ąćƒšģ|CįoxnŹŲŲĶŒ¼J‡«× äoųjź{ķ=&™dv_õ˜źø„ø³ÓN°Ęźņ+Ķ.P_ŗcćß§åA<ē̾0ŃWIń喞ålHĘŁPÄö+Ü|汣Co=źŲ–R˜`F’\b‚āīYńˆ“ķHŚn¼‘'UĆĒnk™Öd“Ō,bÓř|ŹŖ¦4äƒÜ·ė@Ϭ>xĆÖz{Å©ir#0šv9ł1ŽIéŽ+Ś€ųq.¢¶<Ń/ŌØōČķ@)xĖ⿊ü}¬ĒķŹź2ĘÄĮĢL‘ØīkōįŽ5»æ‡zU棦¾ŸžŒ±~ļ8Č䶑@Ič|ēć{[}Bīķ¦e’b@<”öÆ1Ó%K}UmĆeUˆPcĢĻh³ń¼:M©±¹±G£ļG°üė͵MAu[ĖŚy”UĻīĆü¤ž¹Ŗ²*,_ [kÖZŻĘŸ}sm/Źė“pøō>ā¾”š‡Šo¬tčc½iRģ.]‹cżz‘¾Ģóæė6>-žk8ķķc(]ąå˜ZóŲt¦X™‡9ł{ÓCĪõOųĆ@ńN(”{Y bDłøõčkļ ā«Ļ _Iw~Ó+ŠōÉQ.tü\x݃Ūé\n“įk­Vķ …ś’8ǵIĢōż>ĘO J—3yņ²6gĒõÆkńÄ/x§ĄŚ‰šģöšź‘ŪŖĻl‹„2sރhģ|yāķym·Ÿ+J“äbŪ“ŽÕö‰ū:k׿¤ųį’Y½Šswå‡`ĦÕnĒŽ”8Łš‹ö…ÓÓAŅķüM§yŪę6ņ†uqņćۑ޳¾.ųcNńµ­ĖX„ŇńĒ"€Gņ’õŠaRéŸ%Xź·½Oū#NärOšśóąĻŠ“ļ_j¾¾…d‰-L›YNŅppõā‚¢ō<+@½–ĆÅŚõ¼’åį¹v$ķĖzŠś†ŪUdÓcŗ³ŌŁ„ I7Żć*g«9)mį”sā[j)\K;‰ū‚:`W)ńĻC±µMBŁõ”‰@čĆÖ°”å”āÖŽ%³K†xį‹c6Ÿ»U¾"ų¶éģmĪ½!]„£’Ūˆźx­#&Šńä—vŹå©Į HÕjvŪø uMćīēƒļZr™uŠõæ xnĆO·‹QŗŽ ņxčq\?õ½8 ±ÓYā»_›Ze«õ<ßĮ>)ńź×Ze»5夈VMĆ# ōžUźvZŸŚ.RĘé݉'-Ą · uR=;Ź–ÄŚÉtĆ ‚ŁāæB4‹Ū±šßĆś¶»įİH¢Tk‹klonä‘Ö†Ģ\ÆUÖ¼;Øü6ÖōOM‡P»’čnč3'ęēÆJüģCŽßW‚mA&Ótß4Hź6 '½e'ŠøĆ”ļ_|įŻ3JҵmžSDø·WÉmĶ»?LWŹ2iö«&į3l?*žĀ ŅĒS§ėvŗ,–ńŸ:';N'ė]„ņźw.˜ļr]P[Ų{֊ ”é|ńęo ų—IÓ¼Iv°Ś¼ā8‹·ĖF§9ƊƏ¾ š7Ä?…–r\ {mPĘ%ÓõhüÖĆć’9x·ĀvŚ4ņŁhzü³•Œ“čŁļ_;ü]ńī£gā Ļų@õĀö‹;Gp© Ū"ž£ƒJQ‚šg‰õoźēH½Óˁø\œ`÷÷Æø<f—I›J–i ¹ņˆ„±öč ŹKBœŽĀ:6-Ļ‹ķ5Ū(/Ÿ{˜&c°BqžqżkēmvĀŹŅśčżž˜J`u÷¬āµ €™„³ź:-ōv—æ0.üGc^?ćCQ“Xi®$Ė&×!±ģ+QHH£ŌēóēÓc—PĮņö®XO­y¶ā;ė]Ų»’gĻ 2œ•ē‘óւ9m±īšæˆ,u»īČj™\ {+ĶÆģ4?éf£H¼¦cźĒ<ēņ jē;­Åā ŁčCĆŚyŌō¤“ż[)!#ī_hĮį]wāŸĆ}9ē“mÄöķD’U„ߘüj”¬3„»æńG‰ĖC›ūCJ½³dĄ`Æpjöµ®ź¶^-Ó-µX-%¼†5ŒŽÅŒČƒžTJW• uĶ?Dńgõ; >īŪT·ø·ćaūŲX­~RxćĆž½}>I›Ź\łk&*ƒPŲ&y*ÜĘ·Ź!_2=Ųö¦·ē½Žø„+  u4Ń“u=³įŠ.“żoF¼ˆŗ[Ipéc!w)ć'ōÆÓµ‹tom4r£ Ć,ŃŪ&Mj:|…•ž™rSɞ#c=’Jü£ų£į›ļx³XŠÆ£d"MöĒ,‘‘ŃO|TF]€ƒķ!I°·K‹•!ÕIsœ×ŪžŌ ńēĆŁ-¼æ7P³8r½÷}å#xÄż;’‚&žÕŸž:kæ³O޵O#Įž/šFѤ‘žHn±ó ōĻozž¬õķ7ū"ök"\ƌ6J½k9ķs¦)ŪšgĒO¦Źš5ź±¶s€sÓŽ¾Žń–óĄ.ķ‰VL8Ē{äW<ƒ”žk?࿟±­ĻÄß‡Ž ż³¼ ¢ŪĻā_ †²ńLq.$ŸO'ĪĶ“Ųōojž3|o¤]AؗŽkd·—÷ŹG;ōĒé\øgĖ)C³æß’ęR‰Å푼ȕ~| óÅ6ŚĶąv‘ŲdóŒń^”%c–¢YY³µÜÕ)mnNēwś ŲÉÄ®±†' œōėQ6ę°!äPgŠ—ÅQ€8Ļ­iÅåa#yĻ„¶€G˜$lē§$UėG;lIÉĮģh:)2ŌÖÆn¶åßĶÉ*ŪČ{1Ē”ÅfšBÆŪ&ēćWĮ½?į&§ÆĻØ|`š­•č»lIØiē”e'— >_ĆÕØ—Ćc®2?„¶X.V;ųJ½¼ƒw†ø[LŒ™ąDß £ŽzW›T$ī|ńėĄz…¦«eń#ĆPݧ‰t|‹”^Lö¹č|vśWČŽ.¶‡Äz±”Igo>‘­D)$V)’…±Ū­bh,?·_ĄŁžxžļÄZn•q™ß˾@>PŹOĢ=ń_ŸrE*I!Ų‚Pk¢›9j‘*Ńk(8üź›óˆ)­wCc‚HH¦ucø)N™Ē4ö–9¤<Ÿ›Ž•B„»“Fé įJČøĄ>•$ŒņaBļ‘AcąfR~ą^žę¬åY·)ć”8 Ņč<ŽjŚ\śVæ”ÜIcÆéw‘ź3ĘÄ:ĖnĒøżąĮ:’loŚŪöwųgń~ęKTų… cHńJ0É"ąĒe' ŒuojŠŠčėƒgģu¶”gr-¦²š› ØÖTxĪT‚3śJ£)ŗ"īŐ„ĢgtDÆ*¬lt/2Յż„ͼÖ:õ ŸG½…¬ļ¢‘r6NGćüėł’‚“žĘp|*ń£©xwNæKĶ,¾£§ÜĒ +{bģHŒ0ķvÅyµ„Ōé¤~(čW0Źm®Ź•r#C_lųGX²›M‚[K!e:Ę»”† cæ©Æ>§„AĶį½Z=JĮŠA$Z€m®‡īŽÕ×ŪyN¦ ؚ-ĄĒzłŹõu=ŠV4“JŃ„†÷ȶ,NNü`ŸĘ¼?ö¦š–æāæ GājvKŖYžņęŚU–E—ė·/¬łīÅU¤|łū9~ÖŽ,š%Ż·ƒ>'Ł}ÆJ›Ė’użź«lą’Ÿ\׊^:ųżš®-^Wŗ³F\²H€4m×·jż Z4y5¦tŗ_ĒGĒŸŁŽš=Ž£ā­RUņ„pĘX+c‚ĶŠ ż ųū#źšÖ“gāϊ1ĒuŖJĮVČ.cDįżqTՏ>{ŸØ ųy„čŗsE¦Ak¤Ū$j†ų `? õ .ī'M/KÓÖyŸŲ¬%¹œ™ź>’Āå[YS0ČżŪrśWØJ,EšĀ‘Ć -Zivry1'Vuw {“Włćń£ö£Ó“‹{ń§ŽHn2yWJūZü–ų·ūPź^'v?ošį³µ’BMµ×N͟jž3žä\żŁ‹;>I<{ÕÅ5Ō×JņÜÄ{×JŽ*’*yŒŻʦPZ>X>õ¬cŌēl¹o™ņ§„jŲZą6ŸĪœ¤ …ąĻx£Å>"ƒĆžšģśž£)ØŚ¹æqcų$7ŠtGz};S&Lē÷\¬Ā’,żüōŖóĻå]šŖćŗŅ#œß²‚ ĄbŪ ~”&Š-ŹÉ ÷ Ōxµū1`Wt'§Šš!‚°fŽ“&Ŗ±Ėj~Ź£rŽŻė ]ƒ°e†€-Ēq’,CGōéIs²Ņ#$n®¾Ē„q¶š»jsM ”h#b žyśVż¼HUv|‡®;PMĖ»Ejńž>”čą•C:3ĶI’HŽ[|¬1Éķ]F™§­Ė®öČ“ķ[Ekcū™oqžk€”fį‘‹74ɖę‚hć qč)lü‰äŻ€«ÓŸZ:’KŸKX/lU'ˆŸ˜ž*¼· 6]GĮ'B `š FaęRĪēwø«¶‘O³‚qŚ€±dʌ§Ģ8Ļ«Į%‰f·Ēq҃Pŗ²…w2ČJöj#ŃŽęš\#žźM9YžÕk<Ü&Aކ©żŽ)‡cąž4¶H@+׎ÕhĆ DJīFĘļAŖīAlÓ+·™Ā;żkvŁ–VPĖ–č(liļ€źF*ĒŚ,ĀŪJŽx Įp„|Žżź„ŗŖ£ŹŃļl`s@̲[ÄįāSøqÓÆžl`;n ø£*XŠŹY7 žuē~&Di| T>āqÜVó6Š14,ßźqĄ®Øx<÷Æ[ĶcjRb6Ø<J)!MżóOtŃ«eCqĪ8®¾ėLŠõ»µ¹E/C’Ö®č­G.‡i>B»c¤ĢT+”’r¤×bŽjā7gśg„g8õ3“"’e99ÅSå‰Uu_JĮĶä|0@\uȬJćķ¤ŖÅ· ŌĮžĶmÄŖåŗäŌq bøU*BŠ÷Ū!@#ĢN*żž§i:¶Z4uąŒõ­)Jśą[nu#mxOŒÆnÆe–6Ś0q·kA£‘ŃīŹå67Ķ»=>ī+BŪĄv>#^[hķ®É9•x-Ÿ_ž½DŖ_©īV{ķBuĘ Kt·+"Č<|}+6fßSNĘéFÅU8n:w­I’VUd®) ęMĢ·IµŹĮüMhµ›\Ądå€ÉØ M”`¶—Ė.&ÉĪvśVµ•äš²°w¹h2–å‰īZéŌ‘åŸ§ZImмN· tėA¬$yŠ|%ǹˆ,sĒc^Guį_¶‡YvqĻ^µ”‘Õ u8SAYVŽ$ŲZšĻˆžP‚KŲ4čüå wŖņGłēÉņłės<7–ķ·§Ļ_|lšRŲėÓėzdńĻi$aåW\0_ēZEŲ‹t>}eWu Į0Ā» -īĀ*Hāąć«ģYÖŁŁßFQ„ĖȽ+ Ótøµq¾«t`łlŽ€×%Ft$wśO„4Ķ+x 2_Y#¶Ns]żå®Ÿ§[Awe}näÆļ"a‡Cō©„µ£sÅ5=>(õE¹YVß{™\’z½Ēą’Œ4ėKģ‹ķj;¦ywG Ɇś śf½ 2črN™ōµäMuqˆŻ™1’›¬»Ż “÷[¼ĻCŚ»ŌŽgŃi‘Ä„™Œ2ōĒ­vZ3[ŚÄź·« ¬qš™2 ^“Ō“ČĖEt†ęŁŽY‡P=«—Ōķl®ó9†&'Æjꚩčƒ>0ųõšņ}&KmViŅxēĘÖI3€OŠłŚ)ģƒ0ʽp8?•qT‰ŃC©]Z\$k y˜',Gpk*-q.ŹĆ’Šqó.>õĪYėæ üas¤Ļ6“# aø˜‚F;_eh½ē– jD,銦“G®čŚ­Ü?éP²¼£īīōg…¾%2Ū.ęū0ŪĪxwS} \{¬šœ×`:ī*ƂŽśW9u$Č[½h`ćaöӛ“ "•SśÓęCĄf<ągµ3Cķī‚īIPdńK$꛹ڣ­`·q\l*ÜšsVßO£FTŒdŽōÉėPۓĦĮĄöŖļȕ_iĄä­©õåćŁ.Łgß–ZžēE,ē¶é@JW='H»µ»…­]ƒ+F:dS>—w(µqÕzPMΟNÖš—_(ŻĆwĻ­{÷‡|E5݌ 5Ā·÷qԊwzz °Å&vÜóVdY£aē'j¢ģ.e±‰e‰ĮĻ>ÕĒkŽÓµ;y–ęŗī‘[S>pÕ~ųėk­Ę-µį_3~ÕŃ*ĄĶńķ\ŒØ¬ÆAśf‰ Naäāõ­CF³·¶Yć¹Hå=TŒf°±E®‡‘źņ;Īė Œ) ÅŽĶŻĢ’³éޤĢĪńžŸ¤Ł“ڐ-0©¬H$Ó®!ŽM>{{—8. gn{ž~ƒ4“©„†ęTšÖ?'fśó]M›Y;ŖJ~B{œUµ©Ę°ĀDJ¬GB=(š’‹ēÓåž›w–5®õ®‹HŲ¾ńjn«²HÜ䜞+åå‘ Q͑ޙéQ6#uo0ęIæ‚Ł$ØäžU®ŽSåĀ„sœę¶"¹‘&Œŗā„K[f½ŖG/–œV•žÆslITwqZCsžHī-5•’!¹°īÕ$xG’H‰ēę9&¶2åeķĖ,5¼Gę ąuż+ž½¼2“³ŽI­1Ø3Œ»•ēŸ,…W=øÉĻ4€…%›¼Ö3} R0.滯øĆ,Ģ:źŽŌŁbfˆN`’"G õØ)GC’–śńīŌFÓ[©JõĻ|ÖŌ:}ä›dŽł9lŽƒÖ¦[Å[BęŸö•Y1½s·p¬čæp̬˜ˆ~†¹å”ˆ®THŅIsŽŻ*ž©›]„ą ć&ØGO§ĖeqpāX¼ĀPšŻ2EWÕ¦³“Ā¢į»c ­“0“īpژ–᣷w 8O„o­•ŚĀ²ż—#nY—ØB3$‰ā*Č 6sŒWSmāB8”…]•~õ\i­Ź‹±ŠYųå•čēƒŽ«ėŅY\#“ÜeˆćqOįNI"āĻ-Õ!ž)a33Wvī‡O¹ŗ­½ÜŃn-ĄdƱ5˜Ihz‚Ė:2ģ\c­FŠ]Ł\²J’¹_āļUĮ™ķÖ9Ć!œsžāŖź2y19ŽR1‘Zē·SÜFŪćµ™åv,6Ž‚„°Ö/ a-ŅHČp60„(”¢Ķ«żFŚņ"°!ŠqĮµµĢö °§·zĪ2¶…(f›-«¤‰*BjŪ\ZBŠU ħ%@Ķj‰zh,ŚĄŠZXIŠ¢.>ózŸžµpŗv˜Ś•õģ,¬7 qµGaž{×”sɧRūž±įż6Ś2tE¹ÜE»ÆĮē©®/L†ņŹybšĘęˆ…$ōõ§c®2%ÕüLŚ¬ž¾¶z“R“‰njńʗVŠõ¤³½¶žMf ČÄ¶ćŁkc],z$w~DJ5’Œs^ŪšļĖ3Ćoܵ„Ć6JķČżkDˆk”ź_¼gÆh:,7ŗj¼2G“9 IQėXŠ|@>#šö’ŗ„’Ī„$ź˜u?„!h‘ÉhžńMī²OÓ#æxåJFH)œ“ų ę>+Łkņź³Čŗ„° @G ’=©Čä¾ųsÄ·~ šÉŽčé× ūĀķ_`}kæų«š×ž«č"¹bm²G o¼w¤åb-©ą:ž›$ŃłŖĒ ±ē4—ś|ņĖŗE±ipZ6U-掜w”B]Ö½{¦j— -£¢eįäĘqÓߚÅŅü1v1-«`_øOńzńVe피&tū+W¶Ōtų]åP©;äż[Šę|]©\ŚGpŗrå–8Žh*2<ŸJÕ%KŌ–hc†éˆvĄĄ-ÜW}.³>­ŗ(cPŃ®Ņ@Ą_óżh(™§ƒMŃŅmZÖ™ wlÜ=>•Ėl[ŻĄńŚD88Ę0(ŃxzšŹX„·f#$}ėŌü¤é‘j@½Ģéēl†r>ø¬fĶa.ēŠzŻ·üa¢ŲkVSÜiÄĒ įFÜś7¦k̾3žĪ{Øk°Döŗ‰i7o$ĻØ¬UK;šsŲņo†Ÿ <'£M1×īv[łĘS2šėށqÓ ®’āÆ"æŠ/4_ źæn²·bö >\°ƒĒ·ó­£Rä9¶|½mā ńܦ« æiCō;dsUt?¦™ŖÅ+Z=ŹĪ>N½ė^Qņ÷>ŽŠ¼[mu$qG)Š7qĪϵ}«Gk¦jśf­·l–0Ą–P;~UVŠžCWÅŽ<Ōļ|!}įŪök˜šęŹ‹ZæńGÄ=* *ciK±œ–WfĻ@G#Ņ»Ķ7Äž6Ó|"žń",—°!XĪņw}r9?ZdJ'Óćućüą>nzWĻÆźGÄöśpK—…˜ć(Ųaķō ēw½nŌ|?{7†Äö"Tœį7°łU½?,×_ą 2ÕĮ¶š? L‰$’ėš¢xæÅOx§Eńd+.ž[J Ry$<©Ļ/ҳåšķ®Æ¦>µaÆŽi÷&öŠß…pHåĻ~“Ēc¬šv™¢cźZeÕÄbņą2NŻßƒŪšöæŁĒ\ń„l¼CįK«³wį»ł’sĀ u*§łRņ4æB‹Ÿ 4‹t’xfO±źóĢ­4jøYšCbŗ8uHŅŚūN[Ņ쁟oEĒÆ„s¦ö!ĀśŸ3|U¹h.nµ{=>?$s\`qž:öƄæt’NÖ"Ó”{so³÷X*§Éõ'šÖžĆŒ{iń[Ņeń®¹­éZdÖ q'™€3»×é]„Ƅ֓›yó"łøcĻ^õ} -”ī> š>£ā3T¼“Q°Ę^Ÿ4£_ʾdų©ą’B’ÜFvŲģ;¢aūÄlć'ڲnā™ņ³Gw&·ŠŲ;ĒžN+Ņģō«}cOdG3Ørœ w¢2±Ļ)jcŻč·<šÜà ̰‡ ģMÜW¢Gwµm`.¬aImųVę=85±šgqg©[KŁmēW”€Æēo„p^,Ѧ¶ŗ‚}Ia6īįC)äsŒŸJ āĻF±šŽ‡„ŲŹÉ4¶‡ŽqߎkÕ“-]ģ®u¦³Ā¬Tȼż2iĢĻ#šĮžŻńqšī§xšĻ‹1lķ³Œ~ūĖšÓYŅõƅ­įżJK[¶žD{“Ļ֔–†sosäxGšĘ”?‡üŪ§TŲ„·s£Æ5KÅŽŃ|IšśīKFTŌ-ŠKÓĆ=ćY8ér9ŁÉ|Ņ_ÄZ5dž¼K|×Mpb†č‡8Ēé^kń—į•ļ€žĆ.ŸŗŅ·8ošß'«sõ§kĘgĪ/wu,ŒČY|¦Įb>šöÆ¢>x÷ĆZ‹m4ķ]¦Žéȝ’śĘ¶6Z­K_ži>3ų§į‰cŃl®>#\ĒĒRG`NkŠ|sāM{Į>ƒĆ}uunŖ±ĀŹ Œz~TĘįŠā¾隷ÄĶ"F¹¶};RY q™—÷Ƥ~|ńoĆ{ ŻJöCĪĒĢ ½[ūßQHĘVFN„šG¹¾ÕõĶ.·Ō$’H†$[vsž –{{뤾ˆDT†]ą09ō¬ß|:ń ­øń|O߆nˆŲGĢU»ŒÓ[#ŸšoŒĒ†®dHķ£›dćółs^ß⯀Z?Ä}$xėL‚ŽĆ\1×PžŒŒņŁā˜qa}¤#Łß$©*±²0N8Ļć×ńØ,4„Y­.­.DEY¼ŲČ8#’ÕK[‘&Ļ]Šlm. Qr©åC†ś5{®‡ń IŅōčlu Ų 16Šē({T¢.WŌōęŠō¦Łų ›{›yQ„Ż]AžµńÄOŪk±'ˆtĶzK{»yŁŚŻ[£źæ¦*łm©v:߇žŗ·¶¶ń}ƈ&’Śę o•OCŪ©_ćæ‚žų‹ĀiywimoÆÄKGr×`AłzōØchü¼Õtų“˦<Ņ`‘×*=1Vģ}JĘįķB³…!XŒóHfļ…šńž×a»ż!Aps·sJżPųgŖ5ļ…“Ļ2²“!ĪHąw nW=„Śī :ż+ęŚWĄsėŽÅ–,no,ņ$ŹŒÄ„õƒĻ€l@LĪ…ß9\×¢ü9ńxš—ˆZ1sqka(†es$`f®×5„®{—Œ¦Ö<%Æų{Ē^š(5"āFŹčaYdBņ8Įö5ż¾žĘ_“f•ū]~Ģžų«fŠ7Š#“KmjŽLRؒ=‘ö”ĒŻ:”©ō¶ŸzŚMõ¼ØÄ*°Įöƒ<`šõ„6óę(œšĀ¹eŚÅų/ĆŽ4Ń|WšļÄÖvŚ…x®Ö‡Ó.šćCš8Čūf!,Œ ć{r+ r©¦÷z~æębĻ‚/³ķޟ6~˜ŖC@|ž ]Ét9jlVņYQQ@ĒõŁ@3ø”ąąÖö1l ŅE½¶ŸÖ dƒ—ł3Ž‚9É@Bϰ|jvÜČ¢3‘9ģ(-;— tŽ@°Ų8&–&Tw!÷8 Ś™v)z„c»<ąōƤ’cÆŚwÄß±Ēķ'šļćn‹­M™čµ×a`LwVR0Vu0=±LźŠŠ’K‚ō?Šžš×Œ¼3}a«x_V³KŪ+«GŻ×Ąü’Zī®m3[°>jr§Öø«Dg˜xŪH:†%Ņ`²”†lJŽkóoQš«\šÄšk‡kė8Ųz˜Čś?é\2eÅō?5n ń/įŽ„}¤#\Ū£CusÉ.3µŲvą}«ł]ńO„5 kLJ5 q öóū²!'V“Ģ毱Ę5²Ēµ†=*µŠFÓėŗźpTЬ"3·5$Q«ļ*H Véœāʬ±Œ  :āœÓƔ¼7'ē„$’*",qM!f Å?‡Ž¬ŪÄUķ£ßšŖfœ<(\Ps“ŌWė’ükö¹³ēķuš‡Ę §§Ć?ĪmüÉn‹[’CƒŁÉ+ķĮķM.‡u3ūVųK«*ēUųoynķ³{„Ü/ݚ3“uģø÷Æ|Óīķµh–é”Įw(Ū† Æ.“u:5)mćak8$čG­|ūp| ›ćēĄ-m|?kļÄ?[É%œ,2omqóFGsŽžųõÆ.“4.ŸĮ߈¼sቾŸ« 4ł„ŗI ¹ ŹöĶ{ž‰§źŚ\öÓŚŗĻ§ąžŒ{f¼dt=: śūį÷‘}c,é ØøIPpGøÓųĆMÖ.ōŪĶ*HćŌį\Ā­ĘóžE|õZZž½)čy„Ī©āO™ŽÖ{MBŃøƒ$²‘Ōż:WĶž#ųŒŗsÜČ5m2ńĖAÆKA˜Ö—Sä/xĀ fģyPĮ}«“»cŲ›žGcč9ė_ æ³wü“ā§ĒmNńwōm_Ą^’p×LT‰gŒp:ņƱ£W–*(ó*Čžƒ’fĻŁĄ t7Ó¼#¤C£,eYn&Śerό×Üz‡ōķ Ń|«x5;‚6ģ;}ńWĻs‘¾ę¤ŸÆõ[‹MFyīt‹ m±š±öÆy±šö•„ZXĖ„!†ī!óČ?ŒśŠøĘę‘&”ؗž „_?³ńĶ`kv±©—Ķņ“xükT¬IĄj¾-µm.ór„Dćx5ņ/‹>8éŚ4—·ÓyöŁ)&ņIQź¾õQˆģ|ń3ö„šž„/uõ¦ņ„Ēe“<ĢWŌöæ+~7~Ų޵sc Ō–ö [£‡O˜Šź„ŻĻÆüV¾ńń,—Ķ%ŗžżÕĘ1^5}ØKw1Ģ̹=:WTcc–„C?rĆ,^Z– Ք«+ķĻ„iÜ䔮I;œī«Ń[3°–5m؃kJ±ŸPx-4čWP¾v -Q²ģsŽ~—~ĪšOo‰µĶļǚ`š·†.!ŽŃ:2Č»¾é-ߏJ¤ģkŸÓ'ģµ’łųMšŻmŔ7·±[‚—%4²Å5ś;”ŪZčÖPéöˆ–ŠÆA€Ę¼Ś’»:#rg¹( īōéšÕŽŃUÕŁ"³,ÖBU°GnōAx±Ül‘ŠÄݽ`Ųچ®öҼ r¹Åg}­lŒäūśR4‚+Oā8#uµwDcĄ9ĘkĒüsń'Lš\w/¬:Ū[ŗóuaź3UÜźŠ±ł“ń+ö¶k»KFšåœWQ³óÜ{5ń–»Æjśķɾæ™g³Čū śWT#Ōrv8‡Ķft#ĢÉ$zՈķ7óŌ¤¬rĶō,-¶])ÜxéÖ»żĮŗ¶­•Ž6XĒ\­'1Ałį_†ńYDĶ{m½ŲŒmνR-Ģ…!0Åc)÷4;GN“s4sÄv®öŅHī]-ŽĘ*{ö¬L§¹ėZM¦šlŚĄćJÄŌķ­ šO±8d ŹWčR“¶»r\r¾Ćšė“ۘÄ:€ddćqĶ8ÄŹÅĶTŪłgČmĖüėĪõk¹- ™¢o›„l#āK©õ +›I$o5”€cōÆšĆ]zo~+čžx§#ØĻ×­;š)ŸWč?kŻ2+#t9ļ^€ÖČŹ#ՔßB%+™ægņ_’²üG„Å©Ųł2€š0Įt¬ÄahšDšr-¬RŸ!pšŚÕ °Ä„Œš„+ę.ožX·"ŗČ:ŅĆxdh]ĪįTꆦåķZXäQĀžõ “Ļ 7ķ±\pk0.ÜZFÖ@ĀL2ā„f7š®«#ü ć>Ō¢µ“O¶[2’Tć ō0%·„Iåc:ŠE{›”x HƒrńœU[I–9Āel‹»fß ]†#­eK§„Ā:+aŗż(5 k!¶UI5Vå‚we@Ńvā€.›Ō•eżÜL}*˜ÖÄżžBanĄŠUÓ fyIŚĒ·jµc <2 }„[‚ĻĪ.¦5 ōéZmŖi·"c!~F}ØgP»‚ń‚Ę2ē¾:×1wa$[˜čÜć(‘VT "‡×Ņ I-ŁĢ  ņvK3å€ūcÕ»<²ß‘ UЦšŹįōŁ‘.6LÖ/…|WØŚ[6•ā;(RE%”ūĆÖ“ŒD×C§Šīٲ"ņäē§qV5 µ[e»6HŸ0aĒOZRˆög5)ģ§kfÜpFk{OœĻ4lĢź ēęļPht÷Ėm-©Ä±¦Ü˜•ŅXc˜tÉļ@‘jņ)]ČŁĄÅsW°I+4‚h%É’³ˆßęł½+<Ė1‰Ä„¶ö 2īV³Ł­€“ĻščŠWƒAfę•*b$.OR+£WHa*ŁäūŠ&Ź“ŒŃ€¼ō­E[Ūh„زmØķA“‘y«]»„y*²AÉę3 ßJ>in>TńJ„s*4ø{PZ‡rÕ¦­µ¼(ÅWÕ-§¹Ūqj@źE‰ÖVˆ~ż{d×E¤ĻkrŖ„ĘĪ” »oōŌIDFDxĪ0A¬4㮣#҃^ŠÉ&„‚ą0+›Šyģn-ĆS’}P!o%Ņ<³Ć²^œ ē._ĖŹ–: !¬{$äõoĖYP»Oó Šd¶nTy{wgšŻŅ-ZGX‚ÆœzP½Jżģ­.Ē.p+"9ĬX¶ģž“Ŗ¶²¶Ł šŹ»½\”Xšhš£Hzb¤Ž:!ÜGÆ„Į—cŲņ²1Ś>cé^EāĶB n ‹£ƽc-ĶŒÆ É\ ŖŒŚ{ĢÉģ“ž@ėZ@Ļ™˜^#¾ŌVĶā°…]ĒMÜWžIą’Ü!Ōķ€ł°½Ļ½]“±¬YvĆĀ×&T2oGĒqĘkŃķ¼;r-£I6 £ƒœÅ”—m4ۘw*Vŗ 2Å.d1…ŽOQH‰š÷ž}=>ŃcĖļžÉ¬Um¹ˆ“Éō ĢÆ=­Ēœ€šNµ­„Ź»öŹ~\ąż(5Ž•3¬Ńå·#śUø¬ķZ&Y2²gŽ84]tŕŁ#cæ< ō­ü5­*,хxŽFÓÕh6„Oų‰u«iźČĮē€õcØ’8Æ([Ž1‚=AķS$tF69/jIęły“Œéõ®źŠĪ›]?w‚9sX1—~"xWū:ę{…ŒķÓåÅ|ŪāżJÕō­BūhggB UŹĘ~rxĖIŌ¼+Ŗµ¬VßhÓŚB׏-sß׫𸶸Y¾wCėéķJqčµi°·E™ŽęĪ>•ĪźŽ3¶Óī‚˜Ey^Ų÷¬%HŅ3īlé~,¤öZ r$(цĪÖ÷®¢{żGP@īÄ\gØčMO²±\ČåÆ&½–᣽·“ĢN QĮ­=;KŅō˯톶tq—S†^;zV“ŁMO®~xĻNÖķE½­Śžļ2Hąø#õÆw²·Šé挣8ķŽŗ£#š¢Š—SŃ"S…oų żkū>5†]ć!FFi™Ēsž™UĖG‚"?*•Š"F’7™Ēn«CGM4yēˆōk_i³éw‡yĖs š™ Ø G9=럼ŽA –8Ü9÷Ą®9-M9YbĪéą¹²žPÄĘūžSŽp{×čļĮ?č¾+šų“¹’ī0(¤ŠRZ÷kq6D‹ŗ^GÉK&«m91Dsp;ŅS2;½?Vó˜'#ę>ęŗ›ioJžųī9ļT¦Œ•Ī‚Ūk€g-=OéžŌmDÉn³†E'ląÓęAv}§jB¢ N‡Öµ®uŸēVŲ½9¦@ė{‘–@ܽMlĻw¦ÜZ8Oš|w¤ecXϹņ÷ˆ4ū«ZdHž)įX š_ōķ.Ż!žMėќŽõ ›Ŗ…{–{¤ˆ3°9;±ÅtŗŽ{sd­n>ИÜG„c-ģMīy5Ɵn yŖŃĢHĒ5^Ł"‚ķ!ŗ„Ŗ° 09C­lʅa©ŖÅ¼WENHqYh¶±Jme±6œnTč*9^ƚl>ēF{8hŻLYļĮ&³<øZ7ރ}8«?#{›ė9‰F oŒž˜¬ōńžČļ=ż¤ cĖÓViu/“̬—lŖ:s]E¼ĪWiq1?ÅI”0–ÜĢā njēĖ="T«²ķ-„g3k‹0ŽT…*U5f©ŁµżéGp–ā3'”}=>•B+¹ÖRń¹'• ō­S°YŲø'÷øØ“¹.b•Œ³¹źļįnMgėz0“e{_$ž~l‘S(Ü «thäįŽ£œē„%÷Ų&ł—¦+>F ]*k}>ŚķR‰#«ĻŽ8’ėWQ¦i÷C̚ŅGd n¢”®srĻĆ’Śs•²~ls>(šÄ¶pHmÄL¾øć?ZĖ—”j}Ļ2ŽŚqr©*­Žü 酮ž…UŽģ›Ž”¬'6Nö–ļ5¤ån1UęÓ®%‰ć*¤×ҚDMļ‚§©} éµÕˆFć±®ŗ9š$w|žø­ķŲ­ØÆŁĻŽN lt¬ł%T@äN£ÕsĻKé ĖllĘTśU϶Ü[dIõa•Ļ­#HÄņj:ÄF­2āK&IIR=åӁõ8¬ėŚõĆ ĀÆß%J·^ąÖn] TO”4«Ø×‰å^§=*ž«®Ųżā‰]äo—‘ŪÖŖ,™C¹›ĖX&Śē‡֍F č7) wFp2Ł­ć+‚†Āź`p9ՙآ”ņW©9ÅL¤öds$B@ÅCs…ĒZSØmRnu9<­f.tmXŻ Ė0y»w5æg,Q†UN6į»V}›?–›‹M:āƧžHbĄƒŪµli–ŚDZkIi i¤lmĻĶõĶz4ŃįĀ/c¢šŻµī›wwŖN³›0¦1€Yv‘ÉĘ>µī^šžƒ®Ł-ōwvł±‡Śģ”gūūW]“i]ć Ł¶§(‚Ž³ÅˆŠ¢ņݳšw‡t *čEamöˆł‹ņŇlžFg;ć­Ęy‘¬¢·“ž7’VŖ>qé€+†²ŽĪĘUkē’Š%\¹ō¦å”Æ”ō‡¼IįĶ_M›Ć¾!’ŽąÉ›vęŚxW/«ųVóĆÖ¢ĪÉM֙yYS=~•ŒäĢÜeŌé’gWź޽©ł·ŲŠZ%sŒēÓė-<7ā‡ķ¶ńJ ³:@’ēš\ĢĖ”óļx£KšŻųŅF•$–JØó(gøžYŖ“.‹sāļ Ćwįf¼{˜ՎD A•śŽĒĶĖąRćBFø°/ØĒé ćsb¶ž“śKA<ń„“v—;‚:ǧéZEźTOOų’šēĮž?:ŒōM6ÓĆŅØ;Ō.e=r@ĘG^µKĆó ŪųgSŽŽqh—:šĢI䟹ö§wŌg ńĄ?mšĪ„ŖŪƳF óm'ņƛüįŻ{U’ź[=vÓI|äTć!Ać4ć+š§”īIŖ_Ųķ·Šę_)@]ņ3ŽµŚŁĖ«Ii”ØÜGįrzÆAüØ’Š‰Hč…F©¤_j)%·šŠ03ćھjń'ö­¬†ÉąžR7GŠÓ5œV§<Ū8 l]éÖ«tŽä+sĘOćŠķ¼9ā››ūkmƒ,[v³öcōķZ‰@śKĆę=GAøF†éīĻ /Óõė˵żzėQ¼‡KD&ŻńŽd9¤Ż‡m KM*Ņk™„d’ŽXĄ’YÜż+øšöŸ<ņ(ņÖė6Ähę&Me%ģwÜ/—l3·Ś¼ĆUÓ„Ņ&ÄGĢ&@(Ī=éÜi½Ž£J—PŽU,Žē޵.“­ėŠĘ·V 7ķõĘ:ŅåF‘Ļ»žG7Šü3imƤWļg±óĘ@ˆć¾>ų”ØkĒĮ·P½ÆŲ”ޜäē¹īqXJ åĘ60ašųń=•īi~–7H…‘ŁNX×~x‹@ÓoeŠyqp›7 õ?ŸėS‘„“<ĻÄ<‘Ē?Ūc\éŒ×–ŪiaŻü¶|†'ę=kxĪåHö?¬z~–ņ^–•‚¤ŽŸZõ†ŗßŠõK«‹=-Ń­&ußÉlHöā¬RV;&³u “Ŗ¦w‰eY6sķĶx;x‹P×ķą“øTŻØ _˽Lö”ęńČmo'·•vģĖž™'šm¦«&„u>›k<Ėt¬æ ą•=ĒėM#^cī_‡–ö6vv'ģKøR’0wõżi>)¾Ÿ§ėØęŽH>ŠØŹJœ:~&™ĻR”ē> :”,°Ü}™Ū “ŹcZzGƒll&½¹ƒ*q–ģh±ƒ©©ŚI ŁĒ<3®w.ĘȬynnl/£g¤h–¶2~" gF‚źā f¾g' YqՎ}E|æöŪ+Ī“Ed“~ / փH=I/n`Õ,P[ŻÜZjēNßóōØlo|rŃĒö9ķ»ˑ–ē ™Õ}% ų’QŌ¼>Ė®^ Fā†pĒ*>•ŚųkÅ·:“ōwśt›¶y˜n„fāSŲóoJš„ÅÕ¤hŖŒv‘Ž1^Q„éž*š†±n¢Hµ/»³1T*GįŒ{UF6!H××u8ŸRf(Ń9 œÕōgm`·Ņķ”ƒģÅp1ߎ‰- MXūąn¹ čM¦Éa ՕÄ-Ų cč~½kå’ŚĆ·–+«źńŁ\ÅhŒŹļsĮ¬lD¤~lĶdf¾’IYœó–Ę:œōÆSš7…ļīdSm4—d| gš­#ē<V}h²Ü,Ņż”ŠČ3ųYi·&Yį“ū:nĪĪąÕc[XŻiŗĀ7ŲŃŠ°'<Ę»Æé–zʉŒ¶6’j±’3’}©9XøĖ”åŗ&«qŪH][ÉŪ‡ʾƒšŒ^%“]ū4۵ɻ9ī=óP„©§7SēO~Ģ^4ÓSÖ|{pśÅ›y̲8:Čq_|~Ļ>5×/>-ˆtCoā;y›|Žøv@øĘ;Ž+TȔ•Ž2ēOÅō——6ʼn¤Œ£×ڳ¼umuįĖk‹k{³snĄ.c8\ʦÄŲšĻ‚Ž5_|N½’ėN½Õ4K±Ė"±ĢNŸĘ¾ŪńZŚ|B±Ō”Ó!‚āŚ\†V݌Ń(ÜŃ@üłńŸƒgŅ/.ٌ;e挬ü(ŃōŪŪjšwŚ]ćl€9 : öØŲŚčzoÄi5cz‹į“øI ü°Œoē®Üśf¼¬k^&±Ō’³|Z·sŹŲ’0ĖļŪZŠ¶Æ”÷_Ā{ķGxÖ6Ų>e#Ÿ§į]ˆ¾'‹ 6žĻIŸķvüy‰Œa€éšfŽŗže¦üfšāĶmD1¬ŹŪw,yĮī7WĻß>[x²ņŲė ¤j‘J²‡ŒķwgŠŚżIQ±ś įcĒ’£Ö£oØÜi¶Īń&Œ ĒÖ¹„^=šg…uĖ›ˆģ|ąC]*…ego=ǵG[bωüs¦j¾9ū^‘ØĆq””gY—ļoĻōÆųŸāGÄ6m>–Ęņ;y|…²Ė·ćŠ‹ .‡‡>yn“é꣮‡D,Ż3õ®—HńŒt]&ėĮz¦”w=ˆ ¾Lƒqķė‘HøŪ©Ē_x"m]¦“Kg1ē|dü§×ōwĮųƒĮś ߆fĪ­ ‘ģ2²|°ćŗžTe=KĮz—ŒäÖ5>åg ųČŹūśšĆš×ƒ"•×Pš'ŗmb§h$zóL‹-‹¾Ō| į(¼_įżF“÷P»AŽ]ĒUĄ>Żkē(ÆoüIe;4rĪN<Ą¹ē§JŅ2ÓQ¦{Ćæ‰)šž¦\G߆¦P’Įq’ź¼ {tśVĻĘß[évöŽ#°½’ĪĘä™ jß*碶? nHLéžM‡į»žņ6ŅäĮżļlóœ~5ä_“ŽÆcs é§F½mBńŻāņć%6/cļŽ²c¹š­ä’A„ʱpøäcŠ“ĆŚĶōŃņ]•øĀ÷¤4Æ”µ ģ–zµ¶¦ Ŗ$¢I°: äą żRųY«éśĻ„4­_M)öiI3–N:΁ņésŌ$u&n¤śU;«k;Ė-FĒRˆ=•Ä-ٱķYJ=I±ł-㯠^ųÅWz;^ؖIRVį•IČōĢ™’HŁČ (Ć+Ģ9iSŠśĖĆz͟޼`»[HÆ-UP¬|ŌšsōÅ~žĮ?ii¾~Ó÷|Iā{}/įljPGoÄøAwŒ Šg8¦ū}ė»[Óąµæ’Ž2Ævt# Ā½ᧈ­¬uH,'qvņ×&øå#I+ŸMźz\ņŁˆ,q‘Ž¢æą»?±ę„ń×ö°ż¤>h­ØüOš\Lŗ¬0EŗkĶ7«ōäģ?>@[Ņøqn1‡“›²Ž»_Eæį}µ1’?‡ßŲn6wpG"‰aóv•éėŸÄóŔȒJvl@sĻ|ćé£ ‘2īõ‹s” £šØ·­.ąA®ƒ™®…tŒ®÷Unµf<ɓӎ“µblģŚń¬8 *q”ī æ/Ø qv,¦\±Ļ™œ{Tš)BŽnĀc é¦^ŠXćr@Į©žĻ”mqję1«†$r(:āĻźėž Śż“/.t~ĒŽ7Öę²Õ4™ćĀÆur »·9-SżŅ{v&æ«[»ĖĚ9eCēƒ‰Žõ…hšHϾ¶IdfQˆ&\2ū×Č~ł¬nģŠÅ­YæŚ-'QŒŽćńĮ(źAņOŒ­ģļl¦øøXfŃõ^Ņö2Ÿtōɠ󳊞\?ࢿ³ūų+Ę_š’é6¬a[$øƒ„1só0ōĒ~ŌEك?+gLĖ:ĖēĘzéĒ„1ZDŠe2 ’Ę=+®”ĆV$L&֌•Ļ#։–‡ÉGRqŒWZG3V*Fń®ä%˜ę¢_¹2"vn9ū¢bcĆ+ō«q\C»s1T Śœ‹LĮT²!+ĒCUe²ŌLöš¾‡sżŸÆŁ0¹³øRA†T;”ńī)ōŁżĻ’Į6lż¬æeßüMŠäMń£ĮŠ„§ˆ¬Ń¶¼Ŗ€‡%NK ¼tēw ÆŁĻų“Bń'‡txzņŽėĆŗ¢oŃ²"}äoB pā#©Ō‹ZŒ wo5¾ż—ꉿ*$”[ż›SG}ѝ·§ļÆń)ö#5åUZXØī+šYßŲĘ?xˆ|nų{[éoęjMAņN$?7#ų–æ#žxßI³¶ŗœĶlź“É&¼,JŻ• ķąČļōĶf]nĻT½ūMžV~T÷õģßšL,ŽŽęE› &¼Ļg}ALę'ń~›}sO˜ẌDɍ»”u8ōƎ“_ŁūāĻķ9ń9ģ~čĒ„É'™q dfx Õė`┩Z‡ļwģĮ’­š?Įä“ńVµ¤Ųx§āŌ(Ņ4šł‘[‘ŌØ„K1‘éš<˜`&01ųUÓ%¼¢2=k‰„°ū\~|L`½N„VµæŸ-“n`.TwļXŹ@qš†°öāE’P’Æ;Ҭ,ä¹¹½·Kv\*¢®tF=φ¾5~Ōz&—ęŁųkQkżF5Ļ–½G>¹Æ|wńgĘ^=ß]ÕnŚ G—ŹH+Į®˜Ą³ĢćµøøŻ#˜ēšŃĀ„Q°zń­LźrE±™]½ŪŅ·4’ŽźF&¶Veaކ³sģa(Üö? |.™’;Ū“ŽrL׊žš3A,QC 1ēü*\™VŠ÷Ż7Į¢8£1˜·Ž šĢ×ō©“ˆåtھ£Ž¤Ø¦|ß«ų—QÓo_“¼{Ÿ…ĻÜųkĘ7Ķ<N¢\0ēh-Äś[L՗U“‰ŁH9#×5fM:āLÉnė׊fR…“Ōž[#;yŚÕ„āh.UvØI=\]‰±„˜vļNRģBĆźirŽqŒyŠyĒ×Iįåū -*DZ‰äc­C“"Q±ßŲ] UČŒ9äs[’\‹˜Į‰Ą‘zŒŌ’j¼vĻ£Gs³ečąć½aZ\Å~Æ”V^ šŠx”“%œ€Ż¹Ås:U«)äœö  =2häs$€ķā¬źāŪ~ėU1§\wĻ‹¹NbrY Ē=«©Ó5$µ·’ÖxD=9jÆšĖČG·“»&qō=Ŗ°Óˆ~*gŒž“ÜxbuIZŚņŚ3gō®ņņāÖ S"—#½<ķ5[o^Ż$\īĮļŠŅx!†mČūŌ÷ĒZFę×ĶY™Wx)§É&Wr·ĶŪGĶūHĒ?Zq‹hłFGNœŠ$€ $¦F=+>E„r„Pƒžhę$”³ī!ŖŖ«Y§Ś-ß'?0€;O ß%Ōń¬Ų ¶"»½cA³lńŖŲų =­l D‘šeĄuN¹'ր0ä–d—É‘ VöėT®->Ģ(Ki&•pŪ3łWAĪÉ> ō44·ėm1hJ“]ÅaźZßH—±™FĒJÖ(M-”’Śmąć޵ÓYx¹mwŲĖły銗kź2„Ś,Z•ÓŽŪȃ'8ĒZ|½¾"t!ž•dÉ$Ģ줶ĄxŖÕ¶©o 43ēĶģh"QeǾ³ž&Š«ōĶe\ƕŪ'Čh22c¶Žäw 3޹’Ó¬ä&E$Ž”Ęy®“ā ŚfY%3ÄNG5ģś4kq»”WĻJ Œŗp›\©äVߣp‰ĻŹy‡(Ü©=ÄV» ›‡Ķ‚@é]UƊmÓO6Ģ‘ŗ7ńōט•>ē%{nš‚“š„TėŒÕh”ĒR~n†Ō87†t y«QŪG"9Ų/N(,åZĻP†ü½¹ūE¹ r>čõ®’k—¶S<JϹ–Śö?$>ŁO·JŠŅ„˜pĆ”č3›čl@¬Č#’Y:{Uł÷m“䁌Õř•tł‘®@€+FņĘŚWgTø%aœ^§'”ę6 =`On×2ž£µA¬Y$65 Ó5¶,Ö$S"dö#½ kF%H AW­•ƒØN”¶M{0ŽBŽsŌÕ7Ņ$¶}‹µyķ@,0#ĖŻ•ŪŌu¹ŁmœŹŃI¶V?˜  Ł­žŃłŹƒŲŃü µf„«ŒƒŽ€(jÖś‹DE¼ę(\zu®O \\I¾ą†p~R¦³pŌ®fOcŚČbĀ=ŗUŪŌžN#hħ Ą§K>‡1¶26Ž0MyÜž¶×ŗy6ČĮ\ƒV4vŽšU·…!ŽŽ ¢ØŹņkŅ4»HīUL®ƒžę6tW:l6‘,–ģ”}rŚ­Æœ«ę¦r9éAĆģcH®xq‘Y÷,ŹéAObØy1’HÅgÜØøc½>øėAŒIģćIw §¶*ŌM€m~E<Zø1³ŚŪ¤łŠ(™HēÖ“¢.mZ(Ē*ö'ƒZ™.™å» “ÉqŻjKhå’@¢UŁÓšĪhزÅģ- ą0e¤Ėöicø‰HĮÉ÷¬Ź›:k«¦ŗg$žķ»vĪ_A¶&,§±õ Ģʊrz”ķéVZßĖĢѦP¹.‘ŠyĦ8­­1­fżĶŪ•ō÷  ¹tūhTMnēå5NėX•rŖ¼}h:<£ĘpŪźv#ŒŹOÆņ޽§_Z\ø¶Gdņ9ؚčt'Ōć7\Ø>r’£'‘W-õ;\ÜŖ±=CP“z›ĒĢęüs§éڶ– 0/$€Üœ×ēŸ“«Č&»HK6Ōcµl…)v>;ń¼Ś?h°¾‚KKÕł°ćŒ}kÉōˇÓŌZNĘUBJƒŒž{TN&rf…ī»{qęŪ[ۈb$l`rAō®R²h|››ģąņX’ g'ÜIŲé¼?į«[ėukk€²É g q‘ėšö;?źÖ0ŹŃIk=¼lå|³P=8®YŌŌŚ¾·ŗ¹œžęo4.wÅUµž9 ¼ŽWŽŌ”=K”Hü5—‡5ōÕ4©•.÷žņ2äŽM~‰ü4ń½ķ¬w‹o+|›[t®ČŹĒ4—Fzvµ:Žyr 5¶!Bp>ńė…žŁ!·RÕ"»“cŖ”×<’…gšš…!KŽr;ākSk”÷ˆ¤Źlķļ]|c{į?icpĢ92†låNsZӐš?@¬5„Ö!]RŠI W?tõŪ鿣ŒĘ&nĻjéŒĪyG”ף_I]Ņdõė]†™ŖĢ²(Ī9śÖŠlĮ®‡¦Yß}”T«ünjT¶q°žBąķ^sėō¤äsKcpDŠŹĄąŃ"ŒI‚SÆ>õq‰0SĖ|AāWNģĆ”Ą½=kŽ»óļvyš‘»$gš©- •Šp:ZJ©+»MĮ+ź+³†XÕD$ē`ŠĄĪ[–Ģ͇«±$ā¶m­RTbŃØēŗÓ03õ ēV(#s÷jž•i©Enī »Å GII*¼rķ/Œé<'•¾©šD±wĪœ= ‡é{;R-”+0l®A5§žW*ō<Ö°d8±ś¤ ¹UsøĄSEøžL„Ń8­Y']o¦ŚĢžk¢z`לųæOKyü˜āócfĮ#ųh-IœzŲO„łwL§Ź' ŠŪƒÅŠEi";ČŚpsYū2“<ÆPXµ[ו\ĀKt?įYMm,lŃLźņFåž”8hTY{MÓļ¢ öÄJłĒĢzVn£}s sp0wm$VeSÉ}q …'GņŖvŒT $(9ĮR:UEj"Å֙⁢ž½ xާšÖ{‹éeI¢wd+.qĻ8­‹‹±ŅĒį×ÓćD.„—Ž•­kēÄU[ćœw¬å.…¹÷»|¹6r*śŽJŖC€Äw¬›"VčEöĀHłüćŲÖõ¼F„×åÉĪ1Å ¦@,Č-)ēéšé­¼—vĪŃŗĒ9;³žRó*'7©Ų&”ķm;F6Äkx"}ćó­ce°ŌJ²CęʰL0=Aėõ؛OžȊo•‡AT[ZI”ėyéOq³|ĮsõÆA“ŠõŲ”YļZG„ž ¦gŹ=­Ģ{ćhĖōä ¬ŗUĮV“‡ĻP9‰)Oįõi Ō…<3‡ÖÆGdÖp“)*ܱĶe4¤ m”3™Tį‰ź*­ē•©Ū“rM±H$/įP‡ÄRČīķ*ž?ĆōŖ‰‰‡īÉēłŠvę£ĢˆNĄz·ō®žŪP²–ÖO4˜d«ÜPR‰Ė^énņM&‘>č‰TžŽ¢°µõ{+‹ežŚPŒ GQBAŹvvzuķ¬jtVnO5Āßi­¤ŽŽµ¼ŠŚyo—'–ü;v«P$ŸO‹ĻA8˜cŁŽ•=ōwŅA¾£eQė‘RՍ rW:%ŻóŸŻŖ8į·+›·Ņ×Eŗ&[xՋ|Ä ē:¬z¦‚š]Ü¢IŻ‘˜ąŖžūŌ×ŗ$VR·’‚HĖėśUÓ"gGea°ŪNŠ aĪŠŻżė”·’Åchīā$ –*0Oć]0‰„ž‡Ø@žāŅL(€{W'5ö”4Ķń£‚1:Õ4bE¬;7ˆvœžµ“mjg¾¹iLˆT}Üu¬œli§iń,B[dFōķŠ–ī ,ŌĶ$l2GNõ¤cb%+h7~ђĘ-źGk†Ź™Ā”ģ}H®¼7‡o’+Ėė«•cędpéžģ4Æsd–ĒÓńĻ‡„ģŅ;·s…•”o­y‹iž/š§ŖéŚŌbšCshĆī4MĻūмŹövcµ„ęÖq­”˜HÆæœ„×1¦|SÓ<5š_>õ$HŠdŸz”Ø„”ē'ų‘‰5“ØčkobŽža¶?y×ŅøĻ^ų¦ģEu©Ć-›!Łå©;ņzœ­;Į$zGĮŸ‡Ńk/±ŗŠĒó32²“žIéėzśžė\ŠßLøÓon¦²ķU«qS%Ń’8’ ėŚŽö…Ņc¶’ßĶ2»ŖeŹž6ē°ē§J‚isÉzuū›˜oĀ;GsĘąOJĻ“”2‚čx„ļÅ;-2śA ¬öŃĢ m䓟A_Y[|JŅ|Kį}-ÖD[Ÿ$y…£ ōz n‘ĻR“čiYų4_égSPĪ’9L) ÆāśĻƍ_NŸPū ŹłÅˆTg1=1ėMFĘmXųóSųćæ ų‡PŃõ]ZęāāÜE${Źč{vÆXšŽ¹Ø]XŻK5Ėiņ•óG¢ūU7bŪ>ĪѼ'į/xzćJŌ5 ģšā9#¶hß&7åŽpM~wų’Ī’Ą~8Ō|#ØÜIkØZ°Y6yą’õā¦KZ†Æ}§ŻŪÉvßčīŒŽ¾kf]jõ¬d·¶}šČ›1žöō­U¬SZšžńv·u£¾™} öņ¤‡gĻ’TqÉ÷ÅT×ZžķĖm4÷CųQõ©3;o é¶7z[C­iˆ—ŒŖw÷O¦+\ų[AÓĶ¢}“k1MŲĮ#“łóXóē#iāmNĀK›}6ąĒą¦Ń’-²|/’ =“ŽAWyN=0kc{t>“oŚÜĆƳg&ęeLeHėÉē­yöUæ‡5 Ū=>į%o‘•ĖnZ™Fä8ō$’:>åłHõäŸzäF›“ČģĒvżą·; ĶdB=JšTš¦ å¦ēm§ĢŪ“č=kœ“7fĪėtn/µ†:zSrčjdšę½oįmŪ[݈‰vÉ?)9’^]Æ|<—SƒWń^‘ÆŁķŽO6XŸ;„ć?/¢Š{.§‹ĀŁŌ|‰Ŗ^E#慎‡ '”Ææ4Š?|{š¾Ė_Óe6w-@²İ9?Z‰Ņ¾Ćå{Ÿ |LÖ//µĮuå–`»K©ąŽÜ~¼ĪÖw¤)•¢ģū’Žj·0Y5ÄņmnNxWeš[Å:…õÖ·µ›:uÉ+<™,čXŒc?ƁZ=u>ĀŌmģši!ø¾F¶l čŽā¼kX¶Ņ–īcoL@Ą`É\ģŃHšĻFšį{öüĮ”äcÓ"„š@ŠF¼—x’^‚?¼7‘׌ÕS‘œ®{—ń.oėzn“Ū“ÉXĒ,NĒ#ļnzoˆ\w1#ŒŖ‚8ükĮ¼…ewŒĻŽUzn P•ŒŪKø˜KpU$Ī3ƒųVÜVņ9žą‘gŸ½Ō{PuĘFĻ„ģ/ iēy${y\æ^1Ś½ŽŚŚŅĖD·žÖé Č; J9Z r<ŹūU×4żuÄ֏,¢DgSó)냊ļõ-^TÓ-Õķ hÄ{°O9=Ͻ.Z˜6ā‰6ߋĆEPŲ9=:W§Ė/Gc£jŪ ŒjŪ `‚G@(.7=Ÿį߈ęIŰ3ņ%ŒūS¼Ińü[^źžńš·³D[Ė”Žž™Ø ā—*Ų®N‡Ć>(Ņ‚źwשlw“°źäEu¾׬“+\ŚÜ4npr >”Éå6oüe+°ŗ7Ģ}įĘ)4’XĻy æ– |:ēé™ZÕĶź^,¾rÅēłčtŁļŚŌȤO’„Ōņ•‹‹3qg9­YA<ŹæŚ%‰ļ[6~%>ŽŚK•”ą€ļV iž…wńŪM°MkžŅRŪf_Ž+­Šž-¦ˆXéšG“Ć.ĄĒ”ĻÖ¬3Ó<+ć«]Ļl,Ń.nX*4qįqč8Ęzęž Eƒivדń+t~w{ ŠL£bēĆĻų{ĘŚAדŻ1ōłcU™£”pA qļ“ҽRŌ.¼£Żźv3£)‚ É'°ØrčG3>_ÕÆ”×ćŸQ›O–0ņ2”~H#é[~>ŠtĆ{uóQø* Ą=sDƱ¼=būCŠbžĢń²Ė¶ˆm•Y€øĻį^ń:ēDń©±)„¤Ń'īŚŒdr¹ėI&tEw<»Mń=ę‹htŠ­“9]£œö®ĖJÖąÕ,äkM÷ł›ŌքL”i­hź·:\ jn“° Iœžx®ľ R.ō˟2Öu6xłyķų ĻTų £x¾ĻFžŁšO‰õƒÉf’ hgą”=MqŚõŻÖ»ā«ķXB)<ÉU£*CuŹ­T^ Ee:B÷Zu½Ś@PÉęmŪĒ„;Ā·š“ZõĖP‹« „ȬKyĮś ŌüOi6‹¤ ¾Ca3.ܔĘ×?ΟswįæųjĘöęęŌxŠÓ1ÜyhCL=’Īj@įuŽ—©ų×I³‚ņD…e¹_‘½˜Ӛū£Įž Ńģ1ų»Ŗé>"ŻÉcØ“ZcŹY"‰¾ė‚{<ŽŃüWįŪmSĀn×3Y™¦ö“i$ PĒ? ćæ×µo|'Õµ d»IŁ 2ĢĻ~};Œ{×MiąĶKĄWWvz†ž|·–cV”±6}¢ųCųįĖHĪ—¾±oŒcLg“ī8­k-FÓā¼š?-¼Ķč!–YT3Ä÷OcĻ„gĪO5Īg[š§…õ­“? źv‹mlqo 9uĒ@}{W€|bų<ēĀ:wŠVāIo“é·Ī»ö£'cØ£œi$ųžÜė)ŽÜ ¬}«÷¾‚¼šhāÓꌡY$AœõśÓŒūšDéĪłlēp(ČC•9"¾¶żœ~(ŲhŪ|'4ö脆H±–Ü}?Z³ksŪ³ź;›)ē­\ņų0»åńĄõXł‹ö•ų{c«čŃųĀŅ9g×-0ŒņČF?ÆŚŚhįĶŽ””$Ķ!±č? |Rt vżœŪ:·tÉööÆTńĪ—q¤ŽCā &Iķ¼AhŃŽŲźƒēŌ‡OįŠ‰tgTQż­Į;i‹_ŚēöOš7ŒĆÜxóE·]7WĢŻ.ōćÆūY÷5ö…•̐ŻGp«äŽĘłRĆ”¬*ĘĪĒGK3ļ?‡Ž&>%Šće Ś(FŪŃøėSĻ¢ŁŻ¶Æ ė6ßhš„/ks Š K šz‘ųÖ‚’q’ŗf,’<Æų)ßģiyū žÓŽ;ųW µõ§Ć}IŸZšœä1o+1 OR¬X׏zü“¾V“yķŚŻŃƒ}Ņ9>õX7Ms;µ¦žZĆ®›T1ē³Ą( øgśÖ¤ń³ž÷å^Ė-Ķ*.UĻ’^„Ż‘®FßaŚ‚ø“  #!S?7]Am­»+ķŽƒ.FhE;¤2D«{1ż*DW*Ä·8ō Ł1Ņ•A}ù~zŁŃÅ £†(:!.§„ü/ųĆćŁßā’ĆožøK}Ć×ŃÜHœāę Ć|gŽRE„‡ģ«ūCx[ö¦ų)ąŸ‹Ž¼¶ŗÓµ+HZT¶˜ ÜīGÖ¢¢ŗ7‹¹ōŁQ–kBwFµĀų‹O¹¾±C’īYA+ΚŌgę×ċ(t’O£jÖŸŁ–’¼–ŅćäI¹łzqŲžušķ[šs@ų«šæT³›LWń˜ ĪŲóö˜?1ģ篽fņWńĮś¼GŖxvāŚdŽ ‡Ks/£ćč+Ī%P“µT˜×]&rÕzŲ©„ŖģÅäd}ßlŌO?Cę&ÜķĘy®Ōq1¤2Ÿŗ6µ=¶"†V9§z”GFŅJ£g8Éģ=(’-ŒÅ~ēµ°ÜҊFR ĄsĶhĒpŹūŌm r„u&~ƒĮ/kX’dOŚßJŌõ‹›Čžų¦8“­m āņp’ķéĮ#=ńšžįžĀ;į­OQųq¦źŚų/Å(ڦŠĀLÅ ¬ *BäśuÉ5Ķ^:\}į¶ŸMm6łŚ]Nż™K€čĒü÷§Ž[]Zź&x‚5ŒÉ‡CٽkɬTwŌčóv·S^gyń&-[:Y£·²u#k¦všŲø¶|ÅāŸ„+B‰BEreģ>µź? žųė⮫q„ų;ڝՓN<ŻDGū }ÆjĪr²¹µ:gīWģO’²ƒZÕ$מ!j1ĶŖH˜ĢOÜĘAČP§½~×üų.~ų²(‡…¬n¬QLR|€©Ęk‚­[ģuĀŁ ©ĶbtøVfӛ•ŽvcŠv­½@g‰a»P@ķķ\®”r¶ĒV,bŅ—€Ń:UY&‰d %C‘™^i>|DQPGÆD»‘ʤø#ń¬–÷śuĮ…Ńnś*ć“ļ_*ź¾ K;v‡Q™m§ŽB¼žø¢06HóŸ~Šz„4¶øIaŗ½@TĘyŻųwƈ¼sń’ÄŽ1y—Nµlžä®^•×N™„ģŽK‹ÉŒ×3§9©„T!\Jæ­o%m3ī: ĢnPĆwAW”¶ŗ¼UKX^Y ĒJē”®9jzƅžj7¶¦[øcEÜ>S޾‹š×€įµTG…QF00jLYźVz (hĀķü1Šģ“˜ĮĄHńQփ3¹ŽIü°b\sŅ“V“‹XÓ¤K°©!_¼89 q•”|[ą5ø3Eęa”™źkĄz/ˆ•ŪKøX.¤I>F9+ī=h4¹ō–iØY¢+”ŽEė“^Łį»É µfžxOś äĪ7Å_go%Ŗ(ß×榚ĖÉdw=½č ĢÓ.Ænod†P—æs]y™Ś%\8ėÅLĪ»ŽFĢ›¶‘׎–ĪńžXēģ2­@¤Ž‚ćņ”|>p}«Mn%GYŒ‡ŸCA“:Xµ9ŽŒ÷®£A|ĪĶ:"MŽżč—ā;[)ÖX‘ĘG מg,éåÜ@88ćBĆKšŹāxŅq=»”ŹÖ•Ķ›JG÷}ė@Ģ BĻo†GæŪ¢A“m=1ځ `‚7)ę“”i%Qv gC¦łQcsēŽÕĒųŸVÖcžā VQ Qå=é§`¹įh.¤‘„½U3}ęeū¤ūW£Ņ•Œchš2 äTi2Eµ7`ōę'g%żŖÜWžXU¼:ā€7įŽŽį,ČźG…{a –u|„zŠ3ڶY0J“ŒśÖ¾ˆdłł@čJ,_f6Ī ’Œ§9øśģ÷1¬EĀńČé@·æŲNą[<*ķä’9 e‘X}ßC@\Į•›Ķ1°9ĮVÕŘ»¶Ö5ėŽ1lm¢„oQ»ÜÖŲA#GæŹ€5¬““¹‹&@™ė{ ģfc+¦sMIēg‘Xäiŗ„6ņĘóĘWpž4äĄ×ŠÆ®b¶S$h銳}u-ßĪßR9¹ptQÖ¹k©§cŒs@:}“SĖ];yEæ*ź5;H-ģŁāŠc­qG+ę „ŽŻ«*ęŃo’˜ŽEäG8¾X®įžĘFņCeĒjõŻ6Ż-ą@Ę{ÓcåEӑÆćm¬O­=/.`¹ņ^Mė“†lGdn·dnĻ_zÄÖtdzU0›j˱ŗ¼ˆ°VĪzƒ]eķ¼‘øƒŹ`p}č±Ķ ĢĖü暙Z"įNp{PK‘-µõ®›1d=r3\ÖµuĢŪ Qå“ō ŗb;\+ėZP^¤H<ņr½3@„Eu[)T)![ŌS£•($Z Ś!2³‡SœÖ†¾–Ķžp™ļށz„ń_Ī]o§ )%¶^¬ßŻaĘh.2±‹vd_2ŪÉs‚qÓš®ŚĀŽÖ{0“æ{¾h4ęE -"RV ŒŸŹŖ$»äm‘zēŠåŅź7Ō~§i;!"éƒÄÜz­\cre ’ķ­‰X@xóV6ż«k¬Jśš~ĢŒ{Ń4Œa’7_QXzµ¼‰ŠHJ—dW³Ōå†ot«2Æ;Ui.mŁ‹Ąųē§„Ii™ÓB’Č0Ÿ¼=꾯 ½ķ™bŅ#ōVRAüčŅ-µ->Ł¢¼vŗLšĒ®=ėrŚ?³{m2Œēе-źjJ£c ČĒjé4ÖöÕÕ„)&sĮĘ(&[H`ĀÕęiĀ÷'$ÕƳ\ykę~µVsD<æ/äĒ<Öh†RĒ‚E#V=I“ęœā²ī4泑ó†öÅFĘmؔ‰R0pp(·ŗņɏśÕĆqJÅö‡ĶŚŅG`GJžŒ$¼{9÷äV¦e»˜”"¼ mnł®zļMž9#¹†`Pķ”X ÅŗŻF<Éæ>”óf–Źsš{ÕĪ[SX`0;‡s÷}k!īŻœÄI|ž„ō eæŽĶ„²)Ūģ8©ģ|kįŪÉN˜n6^Æ!YqŸĘ­DµFłbd9_ܟֲķw”,’HFxÉéP ģ#¹øHw>ŚĢ’å Œ„æ t05=;ķ0žéDĻ~ÕÉ\ų>ī€2U‡CE£+M­é^%X¢T|zWˆźž=„]’!ÜėųVs]Mc#£±Ņtūč~Ėwr9npp8ļŠł«āæĀļģļµĻd«yn:/»Ķf‘¶ĢüŅųæį×·w¹óHŹ„šzŸzłŠö+YH™\łĖĮĮéC“‹Üč4m7ķq+ĘJ aø’õė±ŠÕ•J<×KŒe XTc„M+8-!+zy†^ ØĄ\Wa¤œŗa9?zø¤śTŃønŅ Y¤ņgå÷ę6™¤ß<’@­µ³ŒeO=éJż Jē;ā‰4ėūƿҭ„37ŽŪĄÉ=ģ+ž-“'œ¼H¬äŸSd8§eŒy%ļXś„jŚĢ»Ÿ©źcIbÅ3 ŒH b›m§Ėw,–’(äœuŖ‹°Ae tŽ5)ČėŠ »ā=>ś9ī-ąV™ tüė`8 B’Q’{KŪxatp±²œīwüsłVÜ0=¤0ŽŲ³Éœ¬¹éō”£m€µ„Ēk,Ośń“[,Ió!Ę{W<Ņé2*¬Ø”°q·Ŗ÷3Ė©]Œœ£ÅT"\QČhž/ЦŌgÓ„Ōį‡R¹n¤õķšf£/ŲTŚß©ŻQO#ė[r1øh`Ž\ é$ŽįWœŽ¦°¾ÄLØB <ūRqdlj’e”BŪY×=…c\DÖūŲ«³į””>‘¬½«†Š@³ŒWmŠ [Kˆbxp~uģ}ėb/Ü”ķ®÷.Įį'rńÅUŌ¬ź­ l<Ÿ—Šg..īćܰĢB¶G'“P™n”1UļŠĶJś2y‘ŌnyŠ`ȇ#~µ§/.#Y³“->Bˆ!'s¢–ÉäÖ>¦ŅZžm‹{ö©”le¼bš;@ˆ ūšEU’Ņkvmńl Ōć­fŁ“v1Śs§Ü ©å0ūĆųEmßźvŚ¬CĪiäUÓ”eq8Ųµ»‰ĖĒ;łG ķPŗĶ9&VW^œō·9™%Ž™u£ŪĪ|¢ćp1šķ%ŅāxQܝ™ĮÖsw6ŽĒÉ%äwo–±Bwg©®wSĶĆ+,žløä7„s(†ÜÜĘÄĪG=+Ņt˶X “RIdN‡­ śŌ5g¼X£"•—# "¶cž b(łĮģs6`ko›{IŠ{žÕĶGĒ"$J>īć&˜‹h°É0…öķCŽ+؊×D$S(øŪóēƒS+ōb+"R,ņŌÖ&¦ga%¼8é‘R¦D‘üŃéńĆ|K»Ņļ,n×O] Čń‘HĪCw¬‹Ž*’ &žĆNXŸR¶FƓŽ9Æm”Hāg/j—ZżŠßż¦5fS ÉĮó äļ_nüeŌ¤Ó†Ÿk{c ŌmįSģ-ęwē<Ÿ“aRWgĀś¶£u=äń˜– ZBpźs7ŽMUA7m6NW8 ķT¤g;†›š‡[淞m&K«—·łå(Błg°£ŠūGƞ ³×|c„k’Y٘a*7 2=˜­3OicŠü/w”ųCĆažŃŚ8˜2üŃ@kµŠõų// “ŪŲ՟™7$˜?Ā:ŠŖ•¼ÆZŚŪź·Z>·ŪadElaOÆéU›įŌõYµėZizĀdæņš3ČĄéõ ÕLłŸāĮxOÄŗ…¾©ukę3™a0>ķ°õäōĻķŸ|=cćĶ&’ĀrŻOŅm…\>#‘óZ&Sŗ¹õ'ƒ“«ÆĪś¹©ĻØŲå„Ę0*æ‰&{ĖŲd–O*ŁHŚvņ ń¦[؎ō­ķۈī—Ėlõ=Ŗ{ .ęāņLZ\4iĻ°ķ?CPēŲŽk–®ü,Ž!³š;Xåć+÷ ‘ėŌfŗÆxCMŃ5khę¼–MŖÄ©łqž<ĶčŌ>*š5Ō¾‡RÓõ›K„·`SĪŅQÖ¼R&æv$7iöˆˌķĶAQ‰ŹųĆĆÖMöMPµ¹bX3ōüšņkŸ „„Æ}i©Ā'Ü'R ōµ]4^‡M 5»Ģby€1ķī u*÷¶ęŻIiaÜU¶ž˜•©”£Šõ?ŚBŃĒ(‚Ió1 ƒŸzļ,<kāF—»#E.9$Pa%ŲĆÕåŌžÉ3\˜_FC¹Yr°õńtßŲzuüŪÜŽŪœ.3óмėĘw“ųÓÄź×vĖo~…‡¦?Żöā€r<ę9µ­B}6S<~Ļ ü)ąØ5ż/SņīTyE ¹YWļ\0xƆ<#/‹üC Z>ŠĀśż„ņ‘ĢxU]ŲÜGŅ®2īS‘ūū.|šĆHžÓijG®²,Æę {ģģėX?µ…&šükįö¶½Dc+[ĶņŲsŒō¬źU±Ōųēį_ķ3mį/ÜxOQÓgƒK¹CHc‚AČś×Ećo‹:ާŖL$·‚]"B[$ķŲßīŽÕ¢³Ō=–¶<ļĮ¾3ŠÆüQmįéµ+%[‰ˆŁŸ½Ļ?CĶvŗ÷…µ x‹P²]VÓRŅÉZĘAŚO'$UĘ6.ėvśÆƒ¾ÉäQĄŽŁ_ęl€:uĒņꍿµį]M¬?µoļm7ˆAo,ēūŌ‡})Icó˜Ļęw·ń’ėÆjųW{§izƒX§nhū<‘‚rOĆP±¶‚(@ÜÜNBØėĻ5åæ>]jž'‡Åž½ŗōlDČ>ElŲė@”õŌłwW»ŌUŠ-BtÕ„`’30=?νĀŚŽ”¢Ėky»:© œ©÷ĶØś?āļĽ+Ēōx?³"‡Å6ä»NXČĄ=Éā¾¹ńF££jÖ7Kqmåī 2ņ±>™ µO¹ėqx_ű˄x¢Ņ8ąÓ¤˜;ÉłøēÕõ׃õé7:'‹ÓU†śÄ>Écc¹ścšŲłļöšF„āOYųƒO+{¢\H’Hņa=IöĘq_aü#³Ó¼3įm:Ź;ˆ˜¼-“†S‚9’ ¾Bdģx%Ÿ€t{Ÿˆ7ŚœÓ*÷ķ[¼čŌ qčŲź9®‹ćōšF™”˜Łu/³ƒ¹•Nģ÷ļŚ“]Ļü*ų“oo%¶”4"Ö Ž\£ß=q_Uė¾Š~"iŌ­äUwY|äR ĒŠŌ8ź?fyĪ“ū<Łč°_kZn¶]eøĻ•v•ę_’3°¼ˆÉ@—Fė„Óčh~oj×ķp­qb†6 @ żßʼ‹Q€ŻČīąü™Ż•Ą5œ§béīu^ŠÖtk[é&ŠĖ3 ÉQ^įį?‡ŗ½MGNŌY`ņå‚C•vaōžµ”ńv:c Ÿ”? Æ“æZ+ūCoˆ­ö±‡ėTēŸĢWm¬é7ŚLĪeƒ†ĒLÓX”÷&®¦lZ|2ń‡¼'­j:N‹>”¢F wE0̧võ÷ĻjüµÕžų–’Ęŗß…“ū;›¹¢¼Cgn=±WķÖÄÓ¤śž;©č—ŚF”s„źāĻQ…¶¼l3“ƒÜ~ō‡ƒ5fńO…!“šįgŌ,ɍ€$Ožø­cR輍3ōž QūTIū#~Ӛ_†Æo.Ūįļ‹®~Ēøāy±ņ:g’3ļ_ŁN„H\Zö“Ę&‚^Ī„dsU'{3k£š/Ē«£ź×ŗ¬ź–²ćÉ,9ėžzףs¤ …ŚA®y.¤rŠšZŸŁ>Ėö­ż˜gń7…-a½ų§ą™ŪS“H˜ ę¶Įó"Ī@ r0+ųńF‰r..u %SlҘ„ŲŪ—† Ck- Nßißš³ü®a8žw4ÉånqTf14ØQ±<}kӎĒ·3$ ’1b¬ė1Ś–'̌…•IĄ¦Cv5b$‘OļBq޳]2‰Ūč̇¤„°0G9_z¾²Źc!€\Ć­©Y‘Ē"ƒ¹Õ‚ēīžõ£įvå6/n:Šo pŹ—^t$,lĆj± ļŠž†ąßoŪ~?‚õĻŁāˆ$—Ćž'-}į·™’v.@żäC?w<źE4ŗP?·x,Rņļōł 0ž"sjē5Žoš«äÉŠūó«G©”ņ_Ǿæ„8ŃĖwżŖĶ€ū’O­|/4Ļ©[^īŁRį ±Ō­\ ŲĘÖwćæŠ÷®W+2¬÷?Æų)’ģŹš»7Ä&Äi°¹Y¬ŚęPŸČpNs_‹Žām’gRįX£gŌu®Ŗ¹Hh:XÕ±’¤žīÖtöЇj•Ē~õßsŠTČŪä`0U~”|ŹĢ ōĢ„…ŹB…<œŽõ+H²ä)½(.źHčUŻ–me”ģ;PtSbźVĆQ°ø‚,%ĪĀmåĻ1IهøÆķGžńūNi浗ģĖ¢ü<ń]äĘˆm„.~yÕWéžyQŒśzΦĶq?e¼;ŖZėWqxŸH˜%ÜnlõĮå˜gļĢž'Ö»YõEu›2tū*XĖóį~r§ōżkĘÄho˜ś•ö„k%½ŌŪķŪp 8`;{Šžlą±³“kŗGş čöŚv­Dļ$źH6׋÷£Ąč šņź³Ŗ.ĒĄ_°÷Ćߊæ“L—‚õ{›½ ĀŚDĀŽēXņĪ蔟øø±ĮÅHaŸ†_ t=KĮWQ^^n_:źź<]Čć«yĘ}ź!OSIO”÷•½¤Z~—iesæ–•d+¹Ē·Ņ¶4Ū)n°'S$cußN™É9›RiY…keLwŖČ¶ę@' ꐟk¦1īs¹\Įń. ÖVOsjŃ÷Oš®&×Ę]x~ńŽm> ćīśfµK E\ł;Ę?ķcøŸOøŌvźß»¾Ā¾Eų³ūAŚčÖSŽxZ‚#jåg3Ź}6õü’ZŽ7Hü°ż ælū=E$Š|9mö+Ył_.B$݁÷Ÿ‚3é_™ž,ńgŠ5©e¾Ö ‰šBABt˜÷źk¦Ģ&tŌ­§•ęd8ŪŽqšåŽ.G';IēėtŽ:½Œė‰d„žźF Ó9ŖŹū§Ūscw^“Ī6^ŠŃ¦mŪg ®—Āžń‹u»ų_D»×u‰[Ė‚uÜ wÜG@*e+~Ī~É’šGß|F}/Xų±«Ķa¦I,wQX£ģ*s±ŪÓØ"æ„߁Ÿ²§Ć†Ž›C“Āŗ-–¢!1A-¬JxĘ[ūÜ÷Æ/UÉYtāw¾ų_sį=jimęI,·’ŒmśW¶¶š²:žøµČļs„"o±ya]¤ śb¶­ī\ŖLēA} or—1²øĆW)3”Ś[ļ@£=õˆķ£T‘Óõ®Yń.‘ЌΰČG94-v73Ą>&ü\Ņ|µ®®ķ³³Ģ|ēŲ×ę÷ÅĻ’ų£S”é ZĀ7Ż®ÜēææZč§L¶¬“>\ŗÕ.uyć{Ö{æt·;O®kvŚ(„%ßqĮī>õvĘ63āę&‰DKå0qüUk-ĖÜ“,ć<`Ee)u ‹ |>Ōu{„qÅł°AÅ}į?ZYˆ¢ņD’‚1ĒzĄuÓōI-!Mšy^ĄW]cCh ī„"dĶØ$ņF…j[\Ć-Ąæ„ YŪģ€L@+ž~”—1ZŻ‚±axīh”æŃķnÕįxciF@ls\ö™”cŽ¼É Į“Ąu  Ö¹i 7ųzJh£0£œśŠLŒłņge‘U“ąsX—Ś4·(Ҳ€ź8 Źģēʉ#.åŽaĒNµzŪO¼_ßÄ)Į4 I”·–ž{ŽßÖ³›Oņbel‡ūb€r,Ų‹IQā‘ĢWĄGLūÕx§–)ŠÜL¢ÜńA&õ¶”Ē• p88ļ]Ž–ŽwļŽŽō ėĆöŗ¤ !œ œõ¼īśĪK[‰aČŪü'ր9™nnģ.–C–,óķZsź+yŅ€2dT4õ8©@Øæ.ōv½ JˆŖīYVŗ¹ģUၿ±ö«‹ømlU@)ņö«V²ł2!c…Ļ9ļT—‹k!ß MĒØ¬č¦¶³|É?Øõ ͆c¾žÅlĆŅĀDŪOķL—e"E’{©4¶X^éHiźh“Ū¬±°,F[«ŒB‘»ł¹mE3¤;Q°ü*“®Ź…³Šē°dŽéČSžVóT†B ö  6·sĘŻvćÖÆ@Ļmķæ=h—Öõ'¶øTHä’"G>•oO¶ų8$uĪ:PF4±«ĘKėWāŌ-ÖŚH.£i ōé@Ģ‹oó4C#µXµŠŚ\,©ź8Å\»š 6 ŹĮ½s¶ŚÄļxˆĪ‹qhŖ–ĪtˆĪŹzb±ą2(łÕŗūŠKgؤLYūŽÕbņg¹Vwƒė@‘G M$ŽŖU¹ZÖīŌµ°%Ąąśē—|nۘīėÖÆéņH÷3»ń —jžŹāÄŖŽ=k›¹“r¤ćfƒ4SĀ #q’8ȧ4bløä: ę°Af7ó­˜+t+0Į w[Ēvšī—\ž*¼÷‰u„)ųé@łJ2Ŗ.ŃĒ֎f‹ĶŒėփ7 ¼ó„TšRć­j–™„a›čh¦d[j“Yܬ²#²†ł½…tš†©źA=‰Q#pF0 ä0ī®/ 0ŲßN¢¤‰f™ Ū“ēó¦D”bā[2-Њ§&„ykp-ŽŚP¼mp8¤$M9š{øÉ1Ągpļ\½ÄjĒ)aüź„G™Ü¦¦Ó̰‰¼†%jmKÕ,ZSq3ĻIĆu‰²æS¹†ćO’Ūh]“¹ėRŪ]™6FČ3Hf쩉KF‹ŲńÖ®Z½š[ŗ¤¾r8åc4AŽLI†>ƒ­MŸjŽpĮ杹t0nnݧ;†2jHįGĆ|Ļz6£µi"$Y}j€"’«p9ĻzE£snßģE`ŻjrČąJ>”kL»·Yķ,ģ'µM©éVšJg·š)al2€sŠhe9. &e`¤}Ś'gn"“ ŽGc[”Ė'ŽŽŽµ·›8xŌ”  W m”™Šmė‘ֳ縁¢Az†@PõŒ·”}StĄƒ¹sÜUŁoŌD&V_7銑™7÷V²Z³5ā£¼¤×–’f,Ś”ŗK’\7 ݦnzŻ©ŌÖ8敞Xųžk¤³vR"pZ†ӛŪaÅ)Ū××&¤š{¹äR­–Ņ1QecĘG 8<õ«ŅĒfÖą Žüa;ų²ĶŅźCy<Œć­qicö˜ 󃚉²ąswš|ŠŽĄ€A®+Ä|:ž›yg4ŅDå t516NĒē׎<+Ī«{eq0ņć“ »:ƒ_?ųĆąåŒ–3iP”tĖ9ē֛ŸcH˹óŖK¢\6Ÿ4{3·õŃi÷į§o,>Ō8ϽrT‘gim,†5–0›śōūÕ_R»+<j€Ś»rWWĶć±~Ī ­ŗBąœęœtł£y¤Ń[~yܧ½fŠŌµX­'T¶e‹x8ÉopjžŸ©Č.¢–uN¬ģZŽ2ģg7Šū7įŸōIŽßQInbå “šśI Ōā…¤Ē6Ą¤ōŻ]1}L%±Ąź–si÷FU܊>cƒĆ ęu Ao•łØŲ9ÜČę.'Œ€·…·±8v©eŹH&²œ¤xĮ:„Ļų”„ZkzmĖ4_eŌQĉ,ghćØ#ėįż^śęŹźāÖśŻ¶£ą8$zÖ] “9FćKiÜéóĶ:ń¼ŗmŚqœc4±N.m¶cņՏ!Fī}OSXEٚ.Ä:T·Z©ĀĶ#Eę1Ś¾×š_ŠmõK(ü‘ūޤČ­S%£éoj¦–o0°“Ķ{ģöÓ[†‘>lmČ”Ģ$µ2¤¼>Ky9'åõ®óD»”¤+8ŗ~5²‘Ģε˜d1€čxéPłk3°9Ŗ1ŠĖ»Ņa•ć3!Ļ8čk.öŹ6›Ģfč½8 q—B›hĶå‰Y\ńėY’I$3„¹_1Ī3Åe(„„ŠÓks0#ŲĶÕsü«GžūÅh¶¦Óœīź>””ne#OJÖ4ė9E¼ÅZnüõÆk:uė°‚5·F?uIĒŅŗT ł Ø$HĒĪK·ņ­+)īh^"dPÜäö„(Ų»5±ōWƒ/ ŗHmŚ \rOJõ?&kpˆKl?­\bŒÆ©~4H‚¬‘–fē§JH¢H_t_/9ÅXs+f7Ҳ.a·dsq²Žäv ØīpZń¶µÄśmŅ S’­^y„oØj>LņFƼ+cü(5FΧ``…ę¶‹zāQڹG¼Ž5Ć®SäQbyŗtkķ6ęį­ē"'ä®į€ÕŸāĖEø &“rŠŹæ3éŸJƕ–ŽON{‹raŗWrNKt®źŽļN[hŚ+˜·°Ę3ŹūSQcHĒ—X·²XĀgU=Žy¬­kĘÉ4&³YöĄ­£‚9}2OgŽ4VĪāņ®šūVY@"Ü#Ó'Ščv•ą~SŒ’…a8ō)cØjś|w «øā·ū¬ĒŽżŖöŸmūݶ—QŻBNwÆ„b¢Ć™Lv׊zƒū¾’…eĻ„Ɲū2Łät¬Vš’tšT0.ēv|ōö…\¼·ćb—œsņō榔¶v99¬Ó$–n½k}C0“gœ„īÜ1X›ĘLÖŽ5-™3œpi±E<³2īV>ōÆr)œjģŲŠ¾&›§[Ķį¹c°½¶™g„J›•±Ī+[ā/Ęx¦ßN‹ÅGM: 0JŽ€ńU`öhń{VŅļŃÖŚ{Ō\åXõ÷ĻÖ¼śóYūI oņ\,‡qė»éJÄJ6=/įēŽ®4PF@øŽ€I;s“_K&¹¤ė*’M•Ģ‹Ÿ%ŸŽ€Ó±—³g;)ų‰ö ­CG»œ“ˆūˆŻĄĻ5Ēx[Ä;uFeģŲ‘¹ĪQsķķAQ…vÓ,ōżfāāŹćcLTČcl,žäW¹ųOƒé³j242É$A•WØ\gØüčVZžūF_k/©Ū]Ų\]3Ɩ¢˜m qĻÖ§żšµ “ĻźŚ’]%Ųdn±ą³ć€Oé@ł}Óļ_iPüSŠ­āX.ō&1PG„Ųü’ńɚĻS¹‡Ģ.Œ7.éü«•³šV¹o ¾#H.eҜYT¶H÷©r:#©ėŚT3ź^‚ćL·€Üm]ø#Õ4žń…­»ź¬­üĄ<—|Hƒ¾£4r²ZOØ]Ś_”–+„•Oļ-Įż;×½I¤Zk^žÖī;$±d6rPūQtrĢį¾ėZĻĆė]vĀīyÖŽC"EęĘÄsĮśūŃā={XÕŠ_@Ķ{l?ŽĆ{ÓŠžcu_*Ż' eŠ9a]lM>­„•Ū#!Ļčj&6cčž#¼‚ņ{ ›;›hQ¶ļlĒ掔ų‘£YÅ4wS\$ŠĶK±†O5“ņ4¾¶;Ƃ7ś6sč:ݜZĢ’PeQ˜ĆtUōĘ:ūS]ĖŹÆŅ„†gŽ|Lų‡”^Ų̶— j2ø u5śą/Šz>©ą°ó‹½AGCĖHO©5|¬‡M'üKÖt?x¦uš-ķę<”9Vä~µóŽ£ąUš¦±s{¤+ż‰˜¼ ĄaS®@ō4­mfsšž£©]f/-†_sŖ­tŠć“ ØĖib¤œŽųؓv‡Š’³ēĀüX×5i–śŚYao+d•9ąWæü]šŽą\O‰cg©Y[łe @`£©’hśŅi«"dķ”ńD^2Óõ(,µ;}6uœšøóÓӚƒā&‘kw­ų{^šĶŌ¶ŗ{J[f™:g$vĻA[ØŁ‰LśSMO A-¾¦Zåy‘¹Ļ=ń^E«^ŁųZś}BČĒ=”9Š‚wzńJKSU.ĘO޵Ę^ŽŅŚå`–Oō––EÉlø;Ž•óŻ“ZŚ+[ŻLŹ€cv3D{č<;©Ų„żWĘ]äīĪ03žźVŗ†aŖŪ•x/mwnN7Z‰ß”čZn«eyØ5­±‚Ū;»Ļ`}x®²KƦiR]¬ŃDČqÉå›Óh2g‹ßü@Õn^x5‘¦\DĢŲ@œōēæ½sv~“ŗvD6ö÷ 0Ŗ\禑=+į¤śCE¦kāK™@92_\Wń²ķto%ž˜Ł‡y),9d+Ž™öž”/Ž]jö±Ū^&čI]ąŽOZæ{ąŌš¦«6§b>٧ĢDžB¦OøĒ© N]Ęj66wR½¼?e”®šd\`ē9"¹»=bE")ē @Į$`ķJē<åŲŪžÖ{QšŅF™öyŠ€g8Ļ9Æ#šŽž|UpoV ńFĶž“cfÓŌgéK˜"ĪļQšī©«[Ćk§LÆvŪ”ČałŌ?|”j~6ŸLńµ«i÷±DJ‹…;&P~ņĘsż*®t\ū'Mš/„“­+[a}ų’Gdćk{~+ē;KU_žŽź¦Oó‚8Į9Įü*Éw*jś%›j³M`«óėaķÖ¼³Å“j ‰EkŌpČ_OĀ…>ęwg”x?ĄÓųÓįńń Å¼×öO” ›x!}kÅg|śuÜf6G)“Æ#Ņ©ŠśĆ஑ Lķ”j ķö½ ą’ƒ/5OjšŒ®$–0ŁV ~f²’}JÕńĆD¶æŌ"Ņ‚O§«„ł€ÜGrqü«Ņ.Ón4ūyŚ9BmÜzZņĻŽ2x_ÄņŚÜXĶ$·š|ܦ:`ŽõĶ1XüŠų·„[ų ęŪÄ6ŗ w6ģĒ͚4Ƀ>æ—ņÆ ×¼e'‰ģRóF†F…WfÄl²œs“UÓ9 Y S[·{ ±kHĮvó.żUõĶĶåµ²ĆxŪ€Y‡#Ņ]Ī»OŽ äx>ҼŒīšąĒ†“ßų°XėN÷vóĶ÷ćmŹ ē†=(!ϱčZ¤^ŃĻKm_KeŚ¢^°œuČĒOņ*σ†ā‚'Ņę‰Fw)Lē}zRF¹•ńŽŌčZĶ“V“IØiī„]Po(yü«Ź¼;c*Ų|÷’ " Ļ¼ō4Š”tŌĄ³Ö¼}ą?G%½Żī—¦JĮcž<˜wvsłbæF“?č/šls\\@<@Ž•‰Įė‘ėļL$¬ŽWÄæü¬7†¼emØKk«Ū;}¢-ąy‡Õ½½«®”|.Ö5]#J–[m?Q•q:acWĒU¢Ę~ќ'ÅŁīņĻZ²ƒKŌSPš“Ļę~čW>¤uäōÆųū%¦™bßaÕN§•œ"s$] \öēŽ‹ʱ5‡ÅżoĆ~ŸįŻž„³¬h‘C*FK žK;zŌŽńę­£Åy­uöhˆv0Œ1ŌPUŽĻFń焼_„\ ]j¹1¼cqŌ7į^%Åé|/ćĶńE I2ŁĶkĮ ĢŲ§ÆS[u)ś?ā馎‹ēŁĢ–ŗ°U–ŚtĢgæėćÆĖćX-5-/ÄØJE.?Ö č}O8ć’?į9×¼7›)#‰RŽYq?Q’ׯŗ>~×z?ö&•ąŻlČņ*·Ÿ¼aåć†ō¢É—n§×žńV‘Ŗį¢»B“)d¼ńˆWzWˆōGDtHīŌ?—ņd»tĮü«Ć”6?;¼7šsĮēzūWŽź:%Ź]]Ū“*b ·yø+DÖ0Ō££ZIćéūc,øÆ¢¼¢A§A łņDg œļöÉÆ&¼šŠōØGSÖ¾xž×Į_ō=kU½-”\\Ćo?m‰ž¹ģ?ĘæR>4Zų÷BŃ|Aą=JĪį&@gA.óרž™„JīÖčΊŠĒŽx3ā7‹ž\<žÕZ i†&…šŃŹŖž=:ł_ć`Ö-ugų 8‡]G’YÖ(ČIĻ{×§ģVē3š>/ų‘­^ų›T&¾µe»™;$xŻĒSŠē¼āÖš—‹-®­Ż#†O’\ōw$‘ZÓ§m¤{'Š4é ¼‡VÓŻ’ś'[ČŚ&ūƌ§×„bæšJ’ŚēKż©f 7I×n%OxeVĘé÷ŹUF7|`~•Ó£C?Bā²H.’bǃ¹[”ń_\xOÄŚ†£įEY$i–3³”®y; <ö‰šÕōŽ“ĒŽŗŗ‹UÓC‹ø—°Ęw_jž mĻƒŚ—Ćæ¾4²æŃ|VQ­iżŚČł.«é×§jĪ559ē‡ę¦„c$DM!Wn¤ÕA ;(ĒŹwSgE©N[9ČQ…lņMEo’ĢøŻźßJŠåq±¬’±‘I¶7 u¬ęwrŃ PƒŽ™Ą ‘bP”F\f®yˆø nqÜPžjÆQóv4ČŁ˜“ĢK!= Å—ģ™ƒ–Ś:ńķ]›āŸųÄ~ų‘ą‰ę³ń¾…wż„±œŹĄ•ĻøŠgm6¤ĻüCöČšķŸū0ų'⿆5 ]C\ŽÕ,õŪdl=½Ņ(¬ˆ9üƲo¦YnäB»rׇC¦ĒÆh“źV÷ńœ\ .™īE~züYŃģ“=n巆Ś+Įå_';;TÆŸµy҉¤%ŠłćoĀ‹Š^ń„oģmeŌ ·y­ Ē—‘0IAõĪ:ž?~9|.ŗų7ńVš­ÅµĢži6Ž`Ę'+ŸPx­iīL™äf&`łź«I¹OŹ č +¾™ĮSr)‘L,ŹÜņqŅ”gHPŸ™ŲóŒf¶9„+Š›NEھ)‹"‰[äpÅ—Óc°Ūó0<{‘—Ļ\v éƒŌ¹  Ā×Õ?±ķKāŸŲÓöšoĘ Ph4 ‹eÆŲ+6ŪūBĄaŠ2šAõYu;i³ūĮšÄæ é~%š_ŋ-N5ųSćŌ…f¼S¾ K‡@P·P»³ĒN@«ėNĘxf{ Lr:ńŗ•ŌŒ‚=ˆę¼\Lm”לÕć[«o5B™W‡ÕņĒĒ/ņž$ų[}og}mØDͧ¼Ų͵Čō,xü~µāŌÜŲüIżŽ¾4iŸ°§ĒÆh¼7w’ ĆT¾K=r«`Ϥ^'Ź“m=cn’ķ_ÓĖ.…ÆŁi¾+š\¶7~Õ [Ė ›P<©"q‘Œp:ō®ģ=;ĘäĻc¢Ņ“KKkTšSÕĮėžĶI5„r|\ö®ČĘĒ·“$Hš0Rzs^o¬ŽŚ+Éķ³+sĄŖ$łćāWŽ„ѓً\Į$$dżß­|A揦’FŅu-.Öȝ’»ŸÜŸÆ©­į†ŃŹÆŠ’¶™¦ė †ä†’Wwa5ŚømŒ½6ÆjüĻųńƾ7Öu]NMfņ¹bdg$łĒÜŸ…uB±SČ®šų[GŃK‹…ĄŽ{‘Ž>¤.#"@© å€[%Š$ś¦µ&•‰Ŗ[ĀŃ\:,s =Hć8ük‹»¾Y7mØ>iœ¦jĄó¹F[ƵoéZ&„Øźv:„\ėšģĢvŠFY™IöĪ(1Q»Ōż(żŸ?ą™ß~0]CÅZ”į ³ ‰d 9ĻfōÆé#öc’‚uü'ų‡u?ģK Ā›®Ļ9č[µp׫Šč…3ōf=+K¶$iV‘XE€(0£éWį†č0pÅQk‚R¹Ņ£c¦°“+7_„mĶ 2‰P3’Ō¤xŲy’#޽jµŻŪ}fŽuŽ£<‡1Ųē—Åk7›:.޹nõĢėß4øą`fÜķĄ ÷؊¹¤aÜń/üCžĢ°„׊Ēm‚T3Œ¶=+āoˆ’“}üāDŃU¤w(‘OFµŁJŸų§ĒZ׉/}BöīåČĮ,Üčs=įXŲ»/O„zŒ„¹Æ˜ B¤†_į÷«Ź¤FQ›ŒōØ©;hC: +Ā—z RQü¢3¹kŻ|#šÖĘ3o5Ä{§ī»q“ļ\³˜@i ł ķ]n›¢[ŁĢ³Ćdž€Ö~Š »ŪĖku_2dN{šŖšµ¹ŲQN{i©4jéņy÷%LÉļŃEv#KŽY|ä‘G9F,ŅŪoŠĄHCŪśÕKalåk€äń“T£s'tLבŻÅ4ʦōļ] å±{V™Wå#Ņ“]œ¼h"|©Ÿ&ŲÜ8P9Ķ"[#ŸĻ B®*;ˉ‘1cž«ė@Œ»kčƏ5`qбöēI2yDņ ’;U–+¤unģø¦ź+fč²Å“+uĮąPŸß]EipͰł}rjåu-f+—0+4HĀŌĘ+s©Ń£[kuC3JäĻZģtŻqlÉA,y'ŠD·= -U®-·Dū£W1;©’xÅ@<{ŠI—©ŁłĄØ^Żs\„«u„NÉęƒ\ć=(—Ō¼D¶¬ŖĒéļK‹ hŠm–7SĪZ Q6SY‚āŻYfd8XŌ ¦]É4E&‰†pO_„8čuv°n‰b`Šö®ćEŠ)-Ś Ēz Ž;Äėz^„¶F,܅*r{ƒż+©“žīęŹ1,l®E1ēy [iĄģEY’ę+–BķŚ¦HFŠX#D%Ü zՙ Ź pŽzŽAšZe”«ę;\ćÕßų~8äŽHīĘz•¢V_Z¶ER- €q\“»›‚2G„03̟¼!xz„}ęE†`qž“5šVFaĻåŠō­YŽ+o²\Ʋ‚˜ś“ńD$–Ł0Ąä(ļYZF„o¬o‚e0L äŌŅŲŅī(Ł3Чs¤łd“Ń~8 c[“Ō”Žōõ/?0ĘqY~|ÓĄ‚ą”|aø  lʇh‘ŽäŒ“O!†|n €qŠIckrx'Öµ RČłų  +˜7Nhö&}*ŚL¶$Īń˽ ÉļŠ ¤õ2.t÷Ī1·9ćŅ©NĮ$øķA¤]Ģ[™~ھDå¹ī g‹O#jüƆ g”iwŅKl–Ņ?œļR^éPī3Ɯ£=hŸŽd‚}Ŗ§'ƒé[ķØDš…d(zq@³ čĘ&ēŌ[ŗ¤D”#śŠ¤PGwfXüĮŲŽ¢±Æ-¤ImÕ¢ppFhūˆŚķŻŅī$> UėK˜'„E8Ržā˜“LäÆķŒS”‹!sņZ¹bžZ›*})+t:}5we@ ŽæJn£kdHZ 1ZóŹ›‰Ņ¬żŽ «i$ÄN ŒŒ4ł]Y…%SŁėRC©IhķĄIb<(4±bé4ÉcūU¼ŠŒCT­5˜ŚCŹ‘ŗūõ £JīņĀāCGp§–SĆ~ Ļ ŖńœńšjŻjŹń‰°ĻÓqŠYĢ’F”P)ļŽ”čķnÖpīæ¹'z½y*4&) VĒćšiŲĪg/u<ń({y c·„dŹ—š„{ü¶fĘŃZóv Ɋ8`wó[sĮć’jzsøÜĀI7słTr³H6HšZ6%Œ p9Į„ŽMøŲ?*›mŚI-Ģ,’G»½ź¤E)D8ē¤e&uŚ$Jә.DćV¾½d‰ūyøŻŠ<åmåž|yE½}Ŗõ²ä‘YŌgÆj:Žņxfą–Lć“5 x/‘e†`&åOČdE¹T£(ÅrŚĶ“"9ČÉ"ņ=č".Ģät­X=į²šŁŹćļŽqķ]՝ŠE—ƒĪ·bāųv §"äš{J”$ājµ“ŪDŃģ ½€ē¤%Ё¶FŪĪ_4¹äbµÆŚĀÕkY‘ œŃ)É^źš}ź…c‘óĆk‹Ō-R™Į§<ā³*ÓJūLŒb™zän5Vų5š”Ąē A„3Īu{ ĖqB8>µĒxbīņMIķŃĻßäńA”õM„‰Œ"TąŌR™Ė@YWµm[&«ǟž,rOz³=̐#ūGzš3¢½‘Łˆ!É= Q]J_6h„€Bw»=hĶVŅ;Ū7&4.9Ī9Æ Ō­„†w¬rC?„)- ŒŗÕå“Č’:¶lW5«iacY²vķYršŸ9ųū¶÷Ksv°™ŚPrE|į1—Nŗš 1䱏CJĄ|qńĆk©®©g[äī;OĢ=«Ėōi‡š F lrAžuĻU2ŌBÓnGšU4ē¶+Óō‰|+«"é:µÄVwd¦B?Zįš}ØĢ­y¢%¤K-”2[n(t$śÅr—žqfX‰;[ė4ŸRŹM{$Q“RŻļŚŖo¶•Y¦Ó"·†Ęn,ķ~źZ6‰­Į«<čŪPØ$õÆŠ½>ūKÕōkk½(Å3” °Pęŗ!°½›0õ6šRQņW§=«œ¼µX-žExƁ»ė]G<£cČumYšé ‘åN@ p>µ-“ī#lŹÉN ŒūœŽµOńļR§ƒ‘_0üBšl„ēŗ³Xår9Āž5”Ö¦Šzžq„ÄDšŽB‚¬Ą¬ł~Éq>m¬¹Ļ#ø®C¢,ę¤ÕœŹŃ±ó€O­{?Ā_O¤ßż†ńšXg˜BēhĒzø=G)t>č²¾[i-Æ-f)•ĪŃĶ{‡õ©%Œņdń×&µ9dvÖ·[y²eH÷®ÆIÕ ņ© YŪ½,¶=VĘQsĮļš.lš6ŠR_nī ’:Ž;īg†.]•XsÉÆ0Öu9$”4BMĄįpzSżŽ¹<"—ć ź fĖp'øČx6ŻŁėļYJ@kˆī÷GŗS'mćƒ]®oy¢‹–v|mÜĆÆFV¦$%ƒ_“ņ‚—›H:c=+SUÓmķķ¾Ōm2Ą Ž’JŁHg’IāIōū÷ܞ| ü)ī+½“ÕUćKØ·F½v÷6T‘ķ>Õ&žö.b8#“_Sۭ̱[„ä{tlVŃV1œz’˱€Ėc„fyČĪ%9éŽi™š2A/–Ž +Ԛēu­e,ķd܅‘†=h5ŒO¹Ō–āWĀ‘“­sÓŚ~ōͰ«ē9Só ֆ÷™użž‚Ö첨ł·ĮGóŲFń‰Hķ@”;•®–;L2Ūłmī*”¹Ā—fmżG’^‚ģ@׋#˜>H$Ÿjån„ņ®Ā~läsAŠ>āyv(ņd}Ē–īÓ?³Vé2—ĻCÜU'c9–"²{(ĀŹ¤(ąÅGę<ƒņdźE#2ĶÕż³0©Ēņ«z|ö¼³K*·B½©vFžą‘ŗžU”‰nāF¶œ‰ #<h¹¢ŸCĶbbn e^k0.čŽ2s¹ ÅK»¬é/ӎ‚™2‡Foiś¬²•m£ĶL™ēéW„7W2,±1 [žŁ­c#žÄę@Æ4ĶČܧµU‚µø $å5iŲØÄŚŽžWģsHī»·(žļT„±ŪĖ0™’Däš¹HŁ.…Ļģ÷¹g,č@ū§ĻĶuoī‚B½qķõ®y¾†°‰ų¢ų×TŸFvƒA YrÜ:śkĪą ÓtÆxÅįu{;Ų,c@0ģ0ĻžĒ­}a¢xDŅŅßRÓ­–ŁČß&NK8õ?•YMicÆŌüyiabšAt–ŗ§—’€žÆ(mųźĆZšm߇uiÅĪšŒłc®6R5£h½_Ć2}7Z¹šŅĻöKø%ڤ®Ņłī½ėėÆ éŗĒˆtM^4,²øaœzśTµaÉé©äš§ƒWNÖńd]±ČA²Ļå^”µ„¼–ķ¤ŅŗøšÖĒY©x+]՜fæT/”°ų‰¤^X]N·{ģóƒķņlĪ>¹5u„x•:gå׍<9?ƒ5MOKk_²Z+‰ˆ “‘jóˆ†r¹‡6§ė7ĆAŽį%YxßĪŠG$b¾}ń§‚µļ źųÜ%ʏę“eĘ~⟼ó¬ķÜĘĢ÷iŽéHėx‹Ē€3Ė9z]DšĘėYą³¶²”.ĄśóJåĘ㓿 ivvö—z\īöń’s0ĻJܓY’[óēi°7ꕳ”c±ėŠ.mĒźšž²³“7—»ļņh^;ūSßxkCYē^e“$y‡×>ø¤ä¢léŗ ż¦s­jÖ7pH6sŖĒ¶:į|*Ś'Å[\šęŸ­iŗF¹I]qö‰ųWֈŹū¦qń/‰~üBŌ<ćŲ͵³HcŽ0 ‘uüė·ų¤ĖŒ.V0­Ź+Ū¹åė߯ó®”ĔԛE»ń?…ķŽā_“@ёóūĖĒZś;ąēÅ«_Å8žéD ”>C”ŻŗČsæ×L𒋦7:}®…tóĆaUŪ±õ8?˜Æ ń*iz.±ęEuŒ6ÕøCŹzJ‰G@q!¹ÓēŌch­${ˆ_ī‚:T¢_ŹŽĪč²(żŅ§Žō«#Zp?AžüOšž»įqakzözٶĮ†GQ¶õ’ėWŒh—> oėsŽÜC{o!0==zÖ ź>T“5ž"XŁĻįMGK¾h“—jä©Ēø÷5ó߄žčjöZt‘Ą6±CÄŽäw§e(Łe”xÄZċ[Ÿ ėVqGvv]Ā»£”ģ}}ń3įż÷‡“ż7W²ž;ķXw“ŖČżŌŠŁK±™įśī¦ģ@ūdf߂0zVĘ„¬éڬPĆ{mŅĘąœ½SųV‘•ÅmNāźęŃ­ŚŽ?:E˜*ņ1ƒ×ņÆŃükØźš”6F-'Q†b„“€HĄ«h8§ŽŌÆ „&[‰ś’ąoĖŖiV~¼)oq jb.~b1Œgӊč5_ _xŠĢŪK ^Zä˜ŪnyļƒłRd7©ņ> ŁC­¶—4kjĪ»”ŽB$sóW)šŸö{¾“ń™ʔ÷Š XIø²ŒœžßžŖ›‚—F}šēIÓmüY‡ā”ŁZ;‘撄ū~5ŽxÆį¼śŗŽ ‘f‰‡ļ`¶CķC–—.&~»V:f¤ŗu„×ÓĘ#y£;;Œ{ńłWęŽōWIńN„­„›+fv’Ś@I׿>¾ÕĶ4iOVxµĆFŗ¬“C"Į‚3šöM#Q{Ø-dUMč01Ų⼜E;£Ó ŗœŸŠÆÆRKh¦’ē`}į‚äļ_Gü8ųĻwkk„é£Ć= m’'Œbŗ²č'K®®“>©ˆ—Hef#r†Įō"ÆI¦Ųkv£g|UķŹåOŻ÷÷éŅ»ŚčyrNēꏏ"Ō¼/¬ź¾ :Ų”V !r˜Ææxžõ­æs=qHŚ2i\ś»ĮW'ÅŽ Ōķx­u;–DÜēRqłŒ×ҟšNڟPż‘æjĶ’Qæi< ÆĻ¬y¬8wĘņ½2 Ŗ†öfžÓ”żĒjŗž—yo§źŚ Ģ:-ō+qi*8e Œ1Ę?Ź·< ćMKF¹:l¬$³Ąž?*å’čZ™ōvƒy¦]Ū^éZ¼ y£ŽÄŠ\DŻæš’ų)?ģe©ųĻNń„†ķ„¾(ŃV[ż&0?y4 ’QCĒjēĻäæÅVŠņLņ[µ•Älcøˆ-ƒ‚9¼ßČH™Ą “¾µ×NG%RRR…?—8ŖhėxöīĆzõ®Č»œ¬ ȱę%* żj3l«˜?½oNŌĢFƌē-޾‚’6X\pĢĢzęŲos"üŪXdcƵK†%Ö1‚xJtݳhSß8ÅhŚŹ£›‘ÜÓ±ŁMŸ°ßšDŸŪŸžö„±ųUā ‹{O„><ž;w91Ēc©żÕbIĄWææĘŠ×W³‚žĮÖh˜ "qĄ‘HĻgQu:£.Ę-ā3 ™K$ČpŽõó_ĘļiĪ›& c”3ŁąNq^tŠ#į=y.¬ˆ®©bę"ĶÖXČź=æĒŚææą„ß³·ˆ4;ÆčŪÜĖ>Łbdᔓ«#6:Žj"Ź”Oē†KbĪé,‘›„,Œ śJĶ•Jk—Ļz×}9ubU’ ±!uك‚})©ĘÜ ųć$u®ƒŽQ°öF<…wzg„H»6Ø A#ҁE ‰6;ǧJŗ¤Č¦6`Ž}h7DšÉ°‘éÓéWįh7†a DாE]7Šž—æą‡¶—ć-[ż†~6^ÉØiŽŒŽŗŒŠ€ģVoŗŹÜź­O~Ōµ(t¹¼%ÆÜ¼ž!Ņ $c–¹NļĒõÆ; kÜė„Žę(ķo {Ĉ”q‰1×>õåZĪ•7Ź,¶Œs{WĪŌÜŽ,ü–’‚¦žĪ70šŅ|ošŸo5üP ?鮤‹„å™OLŠķ?ą‰ß“©®ü9ń’ģ½ńVµ ²ßčMq–afł;CĄńĒ÷v`ēm ?n‚Ē…¾nų=k*ēY‰-¤&ą~_ZļZģsJ7<ƒZńƒ½E2—c©¶Ō?»ea„E©j6’ĀH@=6ņh%;ŌwvåĖ*ķü:TŃÜĮ+• FF„öÓHƒÉ …xNJ`øŅY§tį°x ³ŽƒV}]JK®ÓĮÅs尃zR<œō¢ĘŠŲłö’ƚö£ifņ—w–Fz5yŸŽü;%µ«źqFe·Ż‡ĄéšĶŝ§©ņļ‹ō/ķ‹I-Œ(ūA#wÆŅ¾4ÖtŪÆjs*)>ݤ`„sŹ%ū3^ĪGĒ,iå±ĄeĻŽ·ĶĘ×‹Ļˆ,Ć6Žø5Ķ4Z¦v¶ŚĀĖŲYv#夒J¼Āync’cŒŗš¾«jbœ$Į×qĘįŪėVāŃŅęÕ‘;žNxŖŽĄQKk)¤ó­‘”p?­} šsĒśvœßŁWz’ōV-ĄĶvSˆHŽ™%)5µā\DüąuükŸÕ¬ŅāŚó Nįž1]‡5CĪēÓfbčXõéÅ0ĒNĮ£ßøco÷jŌ {Q‚%ŽY#b ē ķ^w©Ēõ¼ö mpĎ~µŒé›ĒcäųWU“Ö5|¦‹NĘŲՈłæŚžuę:¤SŁ\ŪĆf©&\w·Eļzäœ,t”.tå›2*ģ“ō¦ŚŚ4Å9¹’ŽxŪ*Q±ŸĀ³‹±\¬ū7įnj#»Ņm,§œ}µqø±ūÕō‡†õČ ŁŒ„wf·2•3Ż4[›ką§cK;’w¶–¶ÖH|¶ Ą8ƒ’Hģ’²Ü@®ČŃļ¹é_XXų?BøŠķ£š'h,AżUqeEŲłļÄŗ¾{p¶ņeø9Ą®r’Ä(šrZEo¬22ėœ}+ Ņ)'®éWSŗOF•įśĪ£kgØ5ä5Ććl„Æ*7sŒVN ŹMž‡ńĆžńēĀkK½)¤½Õm›ż•ņ ~įؚųśĒĄwÖ”¦…¤µæPP”ĪĘ}śUÅ[AŖÉģ|«ėŗ”ź–Ļ6­hLčīq¹”z÷śWŅ~.ėv~ ŸĆzĪ›=¶Øb6ķ;@Ćõ\UZå{DōÖ]¹Ļ'ŸÖ˜|u{ØiČ4$d³ģĮ’~øšdžń k”$r¼9é_Ių*ĀI“ųžI'yUžzŸzŪ›±Œ­Šō=6ź[żBM!!¹’tLīŲ_Ē„yߏ>Žx†ĖX·›J½HV2~Ōąō4GÄVŽw‡ēHd¶½ŽÖŽC™N”«ŒõÉÅ~›~Ļž#mOAŅf¾ŒŁCł” Œ©ķŗ­l)GKžķūDXŚųĻį֍«YkV1źP]·ž Æ˜ĆŒ£ü×Į†¶Ö–2éWŗ{„ĪŠ±¹ūŁćœśQŠĆ•ž{kØ<·Ū:«•ūÄqõō®žĻOÓ5YąžćŹr?R6‰Ģé>³Ó®„ÓH0KńŸ¼{ Ź·,5Yōkø-¦›}±b oü^ŌŽƒ×4Ėķż–źÄż‹ ©a€{š*ƊuÆģ勒Q³–=0()G”ÅéÜŠė–zös¶ćī:‡łZ3ĮćÖ½Rx“æC%­ī±kgyęl’ŻŸk#Ž“AÉ®§yq¢Gąķ:Įāu±wĘĮZė¼}š·P×>Iā&Łõ{tM÷1c&ĮȬ*;&ĆCåųŠ ="Kk÷ˆĘK4¹,?w‰ÆJš‹“Ż~i¼õAwŸŒŽ¢”¢ķ łNĖÅr¶™¦I©@OČFKj±šźMk]Ō ­”k[‰¹ųn:ĀQc„O©<5Øų_DųāÆüJ“¶MRź%{h¤ŪIÉõ鎾ųšÓį/¼_­Žxj /\²ŗ2Į*\ ē-łŃ$īŠ“²<Ēö­Š¼¶z­œ?mńEšģgO–F½ś× šßāģwz]æ†õą÷Öŗ’ƒµÕ²½Ž(-‰WŻæ!ō§>f}šÓPŃoī“««³õˆ*ƒĢ?pūóķ_küQųką½Įš®˜öWlńU‡īĀ„rp;óUŹ+ˆ^'Ńu/ ėwś{oŠ8ę*$$å†x® Žkū½Z}>c+»cÉ Ļģ}ėH»¹×5o ŲĖ¤æŚ¬ę(`ŲAĪĘ y儝å®d“tYU·;ļÉžu¹löŸx‡ū[Ć^#Ņõ`%™œI|’€u’ėW€Xj+gā-BĀ`4ęf,0G—Ī2ON„=›Ć†ĒĆW³}ždžŃŁ]6ެq_MŁßéŽ/šü¶ohķs·ĢØØ9¬%āśœ†•į9ī!Ytõ{;ˆŲ“€YŗŽŽµ“‹> iž'‹Ć¾ е`o•.Q‰— ģqUšŲ“Gń—ƒõ ;ū+\²ø0ŪOłē{qž}¹­†÷ŅhšĶµżŌ)%Øs»wPjć4ö3•ŒÆŽ«¦^kÖ7Ói1¢:©Yc^~æx7Ä Xķt}NĘÓķc¹ŽNrWŲćøāØJVŠĮ¶ƒOÓ~Åq ”¶Ō`sŽkŽŗ¼×tæiڵšµ«6餍°PēŅ‚¹¼ü--½ž¹nĢ®±Œ¹_ŗŲäųWAšsć%Ž“ćmWIÕ®ģ5­ā&!#`[6pGćÆÖ€å2¾4]/Ĉļęšūµ®©båÕķŚzŒŌ|Ջš³Åói÷t^%øHƂ,ćŲĘ8 jļˆŪ_mcO™-nUĈń0AĻå^Įš’āZk—‹¢x¾ņÕnd'mŚ_Ž9\ó@ ż­æ‰®ōuŌ–ōd°ČĄŪķY^6š§„¼E£ų·J·¼„FĶ ź1-¹ĘrB+ ‘č‚5,~FüNšn›ążjņ×Oøó­ĖoLŗ8Ķeü7Ōeŗ¾[¤ŽŻD€+JĮAÆ:ŖŅ竆©Ü÷=n ŽxzłļšźQŻ4X(}wWĶśF£\Ic4ģÖNĄŪ2¶1ōō„‚“Rw:kI£? ¼GsāifčH·ÖńylYņYG>’żjõ$A,Į”ćØžµéIźy“Üł_ö£š“Ļ¢xƒGŠŻ,'³ pĻĖyŁćü÷šĢRA8lģ:ŅQéń,^ÕỸ…LrŗĒ!¹ĀēčMvætÓ zžž‘ß %Y” qAķŽ:S)īY?šFOŚbßöˆż˜ᧈµĒ½ų‡įbcŽ)N$xz®3Éąc>øÆÓ{Ū»ėf`‹"2œdŗ}ė:É_B¤¾kņjŗ%¼Žę[ˆ¾I0yć¾+旄‡‹|?eā½6Óķ:ž’…NÅęāČ!żG8ü«—ØÅļü7öIŗżŸ>374 /‡>3Hī4ł,$Wgꑇęæ5].T‘’Hßę<®š+KõĢģčŖX²œńŽ©IJņ޼WZV8ēŲ’%Š0¦}Ę2qņŠ­*å”Ū–-ž‡ø¦fV”©TnĻ_ń§@ˆX30ėķ@Ė»Qwŗ·¹½b$f%»v ±*».Ö`'rŚˆ¹c#)1Wc„y w§‹ėxŽ2RŚXī¬äG*a•ĆJ’@ļų"ŸķÓķiū+hŗ/‹f†?‰^Læ€K™>O”9œ2€S-™Óś­ŗĢĮ>ąĄż’»\īŸ żĪ›v‰$.2;חWsdĪ_šN£į]RĆ[··“:i—ģ×Aś€Hæ ×Ķž*šŸńĀ&š=źŪO-ĢjÓÕńƒ(ģH?„s)YŲÜžH’j߁w_>'ėZ/öqŅķ&-0N»\±ČE|:žńXRœē½vŅ‘ÅWb¤Žó9UpĄõžtŖøeˆēaē Ś»Ī’Nƒj)=U,ė"’sŪŲŠ±vŻ™K3 Įć§JhB³3*øŒœäš $ bcøšxUȕ_cŁ=LKųWć’üų“į?Š> Ōī4­ZĀā2­°Ū¹śžž’f’ŚSAż¤~ųCć÷‚Ż5?XZĒ»gß}Ŗ7½N9ś€= eˆ‡4=Č#ė Äz^„tŗ×†Æ š”Ėä°ā7#?ĻaļSkö±Ki"Ķ’ā\ś×Ėā©źtĘ68(.4_MÖtkN‹UŠīį{[»iS†RļŽæŸŻGEń·üƒöĢҾ)hšm’Š>݇Gó “é-ś“yČścÖ± ģ]ékĮŸ¼ń—ᾓńgįV­iÆx7P„J 'ę³āŽE®A•ą>9ųcmo}iöå·ø@pżµ{tČä?5>9~Õz7ƒō{ƒØj¢ĀõI;a§оµų”ń§öŠŌ¼{5ķÆ…a½ÓģC˜·Ÿõóē8ąW\¦‘¦|ń1õĻĮuqu<³…RŲS‚X÷cų×Ķ÷?#EnHTræ{8 ’uGD)«Sü1jz92Ü$РФ}öœWaāĻéöZ–€$ŹpXu'„&›9'=Ou_Ot-£™Āg<‚C Ą™R(žIdXį-Œ±Ą,}*d¬dz/Ć„Ž=ų©x֞šę©ŖŗƒČ„ˆĘ:屏^ż«śNż†ą? mü%¦|Ių§©AāMję$k‹WjĮ(9Ś šMrVŸD4ģ~Ųxį—Ćļ…©ccį Łh1#Pƒł±×½zÄjį÷Zå??/E® «ČӎŻöļ—ēĮ䊩šČż™g‰²š:RJÄń;©Ųõ§Żµ²Ø‘ ļQ)tEF71g¼‚DŲX‚ sŗęæöb©)i@ʐrBGT"xv½ń:ā70\…AМć#Ö¾aų£ńļLšä–—† [ ļü…uS‰”ńg‹¾.x£Åmwół6īĒåŽB2¾ż1^«Čņ͵zsšō©ĀÄ:…{kĀķ@Euśe¢Ū"łĪ%f\•ĻŻ­ỷM¼ļ:Ēn’H ć½Ā_ļ/¤S)‚CµqŌØ\cÜõgšbčh^Ż3“óqRŪ5ż”ń¹ˆĶĄaŽ•Ē9 Lśš¬)d±Ią×{g:Jė½v‚qŠ’$ģz›į«{˜DxĮ<ó֒kkŻ?byaāĪ2 kMs3QtŻ>śÖo<ā\qŚø»Ÿ YM Ž~{­XœŠzo‡t.ā3oaŗē‘Ž væ`ó7p™ōāƒ/hrzŠū-ųeā#€@īkZŽę xćøFź3Ņ“‚%Źę‹jr+æzēÆm>Ż6ūˆ ēŠUˆÕ³‘ģĢp eŒ­ł'FŖĻ½éKaΦŖ’»,ē"¹µ3¬…p=k+® >@ŹU²2;š‚X·ĀĻ»ęʐ ¶¼•¼øg¾OqZrŚŠ(Čöķ@ŹēĆˆŹŽ{øäW$<2¶“²)I!ĻŹ}(6Šźl ¶Ó¶¶;Ś“™\NgŠ0ČzPL£ŲŲÓõ{ #Ęń+¤ćŒÖ…Ōö’JdASĶņ3ź8n’&]ŁĘŚ«>ž­lą ”ę.4ųeŒüŪĒCŠß³Ņ"ƒNBsŠb;5HfeŽ%›=AØīu(“ėµßg&Ņq”Cך GMÖ׈2§Ź#„dŽéOĀÜZŹ6deO„4K/k}F:×+-ˆŗ¹Y194Ų[\D±%žįj©= -"=ķqv<Ö³ P;Ō*ÖQMĀƷ­$ó“Ø0Äć½g\G§_ڽ®£wQ~VQɬ]>ĘŅĶüˆ#"żŠANż},iŻŻŻ[#4Ū€õėK¦O> §|L$Ī3ėHEém$ŠF܌ėėM¶š®R‰%ŽOZ~±‰qXö€Ÿ”ƒL qCĒØŖļ“L ±ßø¤2;ŃdEnE¦\˜Ö|å;ūPᬔ°w³.ķķÆć3[ŗ#ŪЇG-ŌQLQeéŸS^‡Øč–Éb&R²qœdS°iwkŹ»]Cҵž×kö‰Ń׌Ń`2„é³bœ®jF»#D¹XĀ»»8uRZ -:“±2”ćh#¤ŅāåLÓé]²µŒPHIĒ­n®¶·(ÄF±8é·µrM¤}²Žy gŒŠ);ŪFöÄØä{ ‚_8‘”a׌Pg ĪĀĘd F$łūā¶ƒCw÷4ŲԌĶs@In•ĀÜF’A*4RĮ4 uāMļg$lļnā¼Ń$µŗ’4žQ± đłÕ©³d\šĶŹCm$q…Uėõ®ŅÓP{Øä€’˜=hs2œz–āāU0;īn˜­ 6#"¤õéPsXŅ•¶11’¬:Tz…ÅÄöŠ®s"wĒQ@Śo¹)VŖ Å! ÄqéAŗd7īŠĘZ"TēøéEŗČ $`ś‘@÷1Āū–įV“ƒģĪU”Ē€4Mżė(‡~c­tMc%žÖ\Źs“Ž€€Ž{Ջ«hƆa·éŽ·Dø€¢’ØBŽõ:źWöqłHĻQL¤ŽCÄ6PŹŻ@…ˆąČ®%ü;ofźė)^›†yśŌŹV5ŒŽ¦Į#½ā2“©\v³ą(.'kż>SØClfŸqJGQ¢I5¼0Ćt?|£œW}mŖ?’ł;ˆ=Ŗ ĢdŒK«łXīfr½qéQÉ{jc¼ÕńÉčkC[O<Źöó½»)ė“ŠŚ‚[«PDņłŁī;ŅnĄ=oę.„”gµ[»»˜Ę¾d~`=ż+9nŒ¬‡Œwę©ę æU€ås¹†ņŽ cK˜1óm9ŪRéŗÜ·\Ų"͵Ćģ“•ačk.] ēG=ć½}õ‰®Æ†—żŸ2åü«aµ~Š*/ ŽŽŻ®‘掟¾Ę’'›S©{o™oį$üŲV«a&Ž¢ėI’geĻ1õ5×NBåŅē¼ü!ńõÖ­oW‘ŻBźÅ$Y{׿ŻĘ% "10üVŗŌ“3’0ncHĆ¢üs‘\n”+BūX(^øqT`sZÜKöo69"tŻÓ<Šį–žaé€*g±¤gÜóÆhqź6Āh@G'½|¬ŚIkzVź1½z€?­qՉ¼&`½źĻ+BÅ"{vØZw· ģEśg?Jå:#=ĖĀ~%žÉŌą‘Z5śoČe=ų5÷†5xoŅĪU"FxĆdtü*”É”£|7ØŽ8ę;F1ĮĒėF9cI£Éall= \cvdŁĶģ½³ŸĢÆ ķł×ØhŽ6×tū@‹ ‘x;EuBqv8oÄ_Nā=…ŽNŽ‚¹Ū‰ćTEĘ@óU(čmrZæŚÖ ŃcūBō”5Āi²ųŠĒ]†k‹{Y¬:ŹyÜl b¹e„ē„^[øY-YC°ÉžÕī~׊fŚįcĆc“Ō@Ę[Ų÷»;u häMŻŽīYŗŃ5;»FŠįbšÓīﮈ#-N.o¶Š|šŠŖõėœVö›} ÖŲ{ֆ°Üåõķ+Dhī.%“ŒO“üĄą×ĶŽ.Ó“É , '–9(yĶO7ŒO¢$‰ŚäxĒ„z7‡ć¶˜ „,$\ZW¶/jR˜ŻTĀX“Ē *½¬®Y€ī0k)LĄmÕ¼–ó,r8’"2„zb«ˆQI^09õ(¤Q5ČrłĘ vh°Jˆčģ`āõ £—jē,@ķ\śĻ&D1ČJdō FōZ,7:{Ķē/L1ÅrŅiń¤ 'óÖ³›č1dW‹dQH<Č×A¦5ꪘĒ•§L 6—>`ø‘F sXw:l–©ęFIF9śWL6®u3!P‘›ps‘Ö©ŽźŃŪD’iXņFĻššRc7=mmš^'ó čzjėōżnŹšģ]qÉ=ftB,n§5—”e¶øĖg_­qÓŻYÜīĆyÜńŲÖS} łÄ­Ź-ÕÅ„ŗįĮÉčZN¦éŒ”įNOz̆ŗ›„Nf…ĢŒ‡8ĻlV­©Z²ģŻ§ø ˆČϊ1.ąĢNąšXōy„Yī-nį†X†ķ¬Ų ķļ[FW+”ēÅZ¤WŽXcˆØŠ­uŗ­ćķ—ĢŽqœv­£+ä>ćT–ļd·‘¹88ŖOs{JØ-ĄśŌ »å¼µ`$T‡\w¬ĖŪæµXM¶(ä yņ)ĪĶæ M L ”IĻJŌńoŠ|G¤¤“ŠŽ”¤†Ś#ó!÷Z„FŻEÓÆ“Ż~Öö…ķn7!<«zKķŽķ³ó.y Š–\"r· ŠøŲ'F89 Šēo.Qn£³+(vČR@śö®sDģ`ŻhŚeŌĪ.läy—[tƒÖ®ŚŁĮhØI£=I.HĄ»ęŚArUöɐCžW©ų3ÄZU½ŌQ±µšłYū Ņf2Lõ‹Ų<5Ŗ[Ģšé«"’@bzׂź¾Óģ›ķB ī?0^žÕŗŗ1w9å¹6ĪŃķ=s֞±=ķ҆FĪČč~µ,ØģTæÓÜ»¾lē'œūW-w§Īȳ‚Ėc ~µ›Ķ”Ļę{OńŽØiŗ\$xåŽ ōk—>%Ń­.ģćo0Ā v"8äūõükč:œ»žKciw¦M Ī—\尜&°ž&ų£_¼Ō4™”Óm¢DŠI• =PtŻ\ō x3Jń$†źōĪĆv¤ŲµÓ|gų5 Ļ„4ßųRI-Ƭ>IɍÜrMdÕŁœ–¶<ĆśäžÓį»Ķµóycx”üŃƒÕ‡æZśūĀ—žńw…ZŹE³‹YeÉie&!±Ž•^ĢžCǬ¼uØ_ŽMą}SX‚ā ž#°„jéz]Ļ‚ļ£Žžę+˜WJ­Ÿ4łŖåFsÜėļüg,³§ŲƤ’Äłl3·éŠó/xŗqy=Õ²ÜG!\¦ā0Ē×éšR#’침x‚ēÅ 3½øł<²źø.O_zómćó­ Fe•¶ļ#“T™“cc³š^›mż°ņŚÜ–ydłŒp§ś īµ½A“Vø›Ė˜Ę§ Aäœō¦årŽoÄ:„ÜVz„¢ŹŗŠ¶pˆB·ćŒ}kD¾ŸÄWS٬‘-ŽJ¹cĀ6{Ō™ŹEż=n¼«^é’O,;ßĢäĒ0=vöÆU]1üa§­¾ ˜š5ėįĪ{ŸZ „}Ķ­@‡B™n5› ·J@~ONõä><ÕtX5©×Lxžg&8ŗ*yµ2mÜMĀPjŠŁßZ]¤7r31p##޼÷RÓ.4ŻdÜ,Hą†żóB˜ł]PÖ5øš;|ü ±=ūēłWn“ćT‚k•ioV"T÷#žµ;–•ŃĢų»Ęo G ZfÄøčrŽgL•ē’š’Ž[ł–vPÄ~Š’;œī¾Wō”+t4“›ź—p„ÜĪģ¹@ēėņń×Ҿ”ŃęÕ¬“q¦Ž ™2ZDLzS6Š9ķĀ7°Ł)¼–)Ņh‰Āō f¼dźó[$\Hc!ˆ\ń»Į—ü!ā­Lžķńī“ɏļĪvlöā» ßŹ&H^ČŻE'ńぁނģxę±Ŗ@÷ņÄał‹nŚGojÖŅÕmnašŻL7)ē#ŪVF¶7tMcw{%1ėųŌŚ~”ā-3Ä网ĮP˜c±©‡™œpŅõ;MZ$€’1'`č+Fę+-3}ķÅ“rm?,>µrfš‰óķæ‰t]GėKxxŁ”…8$Ēר¦Kć­µ$†évļ$ŌŌņ>¢ögŖx–Ž9Ń£ĶŌSŗRIĒÓńÆ[š'ÄdY^Ņk³†żŲ!dLu5J62tĻŃÆ‡ž)𒆼4ž&›MÓõ8ŪĶ”˜·yCŌqéRƈ¼-ńČOfģŗSF[¢ÆN=*C'•5o ųEń=ėŽčŚv³”Ż ŽédäBs÷{ް“ßųGĮ~tZhhģ 4…Cdž?„iź[Ō¼Cs¬”»‚rm܍°÷÷Ŗ:‘mā-Vh5Ł<‹dMŹį7dąüæ„2Z!¾šƒ”‰O²¶)ŽåWęĪ{חx‡ĄW?iMwO»»µte8ŪŽ†—0ć+ž{ØxCĘz"Ūx‹Kø…­–Rę6O½ļ»ė[V×SjŠł×ńÄ·qŽU”õĶŃ'†&ŗ¶ńI“ó¤KyFņ®ÜĄČōÆAńΟs(M.ęH&·ełv¶N=Eów£h×¶wVńŚĢOĻ»œ/ ®óĒ––ģ6z’ŪOÜ š†| Ē>ōßS„ųo„x£KŌ¬/ļµŪ]_B–[I\–ĒCĻć_zhž'Z£„ŲŻ”]Ącžxq‚NßJZ37>Ēē߅llé'łÖ±WLrŲųėānµgāo‰¾ ŅŚāĪŪQ„-ÆüĒ;—Ōā¹ĶK³Óīģõ‹UŽkČ%ÜceåpG5)[s'#®ųÅo„k°YźØÖāfDi^Żv’H{ć„p^š¾–-–'Ū:2œ»Ÿ˜œw5I“ ‡¼įØõQxŅKl$;&‘ą wŪŅ”¹ųu¢C.§3CģRćŽqĮÅi\ÕtåšżÜŅ©<Ɣ,dżŅ+Ł~ųÖÖó]};Rxäș}G52€%Ń[é‰įėyäŅWåaÉćėų×_r-oõÓ§Ž+Łß/Źäąz~uĢ黏–Ä_üŚoĆā­Ł-Ę ,rŃ;éžó'„õ×ü4B»fE €Üu­©®äJ:õ׊.õ;[Ū2MĶÄ#y‹Ÿ+ń5äšßˆõ >Śki9$€ą6:f·RĻ„§Ä/  ²Ž?Ėņ7Sųשė?u ŖM©ŪŹ"|ČŪ9Ęx4æėÖzm¶§jŗš$ ›L-ĪHćŠó7P±Ņ¼K©]YÜĤ!łh<Ÿē@ĻyŅCK5¦Ø ŚČ6²‡Īī}+WTšž„¾"²‚G–Ź ƒŸ1¹ņŪ@ļŽ¦MŖo ;ÅØĆuG'b+ĻuitĻķ+MvŚF‰­Ē˜…sŌŠ„u𷙯éóÜ-Ƣޣ ;›ŽEzŒķ5‰¾—R𧈄ѵøQ¤ū<ą©—Ā/­²Üü¾ńUωeEā+vKų\Ē&WśZą-ex¤C˜äģ{­pג±ÕEžĆm«Ż>œ-%>qqŒŽ’ZĆ>ŽÕ’ź¶’lļŲē…öƶgO3ŲśWąŽæ>«\x}Z  ²`NÖĻ8=‡·¹Æ®ÕŚyM®`ó×čFz\ē–ēńD·ńO…5KG†K§Ž2öč£;[#‘_—7śmģw‹l¶ŅWĮĪ }}ė6˧±¹į­[JŽOµYNc¶yėÅ{_ƒ%Oų-ü?1¾Š« ž¬qĒéŸĪ“§.…Ź/t}ū ||øż–’h x…//t[9µ4ÓõhQų’#GJžē~Į ų»ĆZGRi£¦śIéŗ¶‘ć h¾(Š„Ž]3P¶KØ±Ī ńł×ØYĢTˆĪ:óėÄŠšæ‹Ÿ“æxb÷GÖ ÖÉ*F9VģOŠāæ<—į÷‰¼%÷†üWqęjöŒ$ÓÆbK˜{ölbø%¹j}ĻĢų(×ģńińĄ÷~5µ€©WŹžxÓtĪ£'\Wó«é—ZUäöwwŸh»ŽFV&=§ƒŒ]XwŠē©±$i ’ī5OĖkw ’3žéCcĻØM$ž{+” ni—)#BńĒ _—9ōŖ!;o…¶XpqėWK»"ŒŲōėA¬eqŃĘ­·Ģ?¼źyWŹUd¹ėAŃMš‘NėĀą68öÆŁų#Æķƒ«|ų§§ü5ÖuǟDŌAahĄ˜g…›‡=XA’õSQ¾‡t%ŠžĒ| h:kGĆ7~g‚5–ū]‘Żŗ;9e“=¹'zōi€rśmĆŗALŽ$_c_7Š…™Õ\åõH,m”˜l‘ ōś×É_“ß |Lš<š^®ŠŪ] 7Ųܞ>Ė8čCv”äšEjkšoĄµşų'æÅŻb? ßj:Ļù䙼Cįv˜y+“ÅŲōRqŠu­Ž_šU/ė·Öśļ³z'ž/6ā Ųņ$$ä Ž3ļ^Ö©/CEó'Ē%ŗƒNŠ4Ė­kUwĀ[Å.OųWģ'쉒«ń_Å GIń?ÅvžĢšüį|‹ˆ$åČ?‡5É^ÆDkŃ'Ā_Ł3Ąß“øōŸéZ~—x€Å,Ą„&CŒćė_]č:U–Ÿ¦łjŪĊså ĄČé^|åŠMX±żš5'_66†E=ŗµK‹LUź=½k! Ģl¦hÜMjĒi ē҇ԒÉYYƒAīqC-Aœ•ļˆōՔ·²¶p¬h¼Gd­$wr²”Pk'n©œü—×7o"Z8ŸŒWĢ’~7xcĀ?o±ÕēhļķP®0~µp¦Ķ’¶‡Ąž8ųéØxŅęx,GŁmæÕ¤ˆĄn¼WĻŚĪ”vó’åę•N fĪ}kŗ39œ­åŻŃ‘˜•'Ó,^įÉi[hģē­uŽĒ,ž¦ÜP¼RÉ-ž03]ʉąŻKX–9^89Ējē©3Hģ}ᯇVv\® ĢĄg‘^Ć£ųvĮH#‡hĄ®*Œß™ވ“Bń"äćŽ9Æ2Ō&Ņžę!-²m™9*Šøū ÉCq°>ī„ńZĄĪĘĀIbOŠ|*†I-%[tV4ŪŌKiC˜ÉÜ3ŌzTŅBń(mÄÆņؓöŅIeIņJĻµU%¼© IžĪ*¹+¤±žķ~oAڧŃķa¹sŲłIĘ(Ųš×öl²2Ń1ŹÕčR8ŗ Sc%iRE(ź2:bømN;»9‚Ä ńzž”„1UŻŌø*ž•ŁŪğfīD p )2¤„ߙÄź{‘Ņ·4Ż5[åYTw4‘©ińA0’ܰ$ōĶC ūL%œ6śŠ"’‡4 #Løn„HüėcR{k;W†8ćxqµxäSJįs‘Ó%„³3ʑĢ?QZW©mq²Tsž(jĀ Ž-Œ¹}ŖK„–8›צ@éH {©Ž ’Åß­Xó”–0ńŒöéҁ2ģZgRddļŸJւŁ!Ę]ŗ|ŌåbK˜ŃĮQµ—”„·‰mŠØZ øĖ‰ LpŪļNWF °Dmó–Ŗæ›r|ĒkgÆ­:r³#|Ź®)ŚEŻÕ¤™EGĄ'§Z`hÜk?m¤€ĘąśRķƒj<ŠÆƒÜUr t–Ó@Æ‹‘Ōg‘Yš@#UŚsļÖ h6±%_Ź„ū+»1¶€±€ŲV»ÓåÖn¬£h[- g-ØĻ=Ų”;z*[Imįk3lSLC#XPŪĄlńŽÕ“÷Ó@«L]鞂“ö€c\$weŠæĪ8āańĪž`÷ķQ)\ ·Q„³ŗŖžySž••/Ś%Œ.ŃĻMIœŃJ»J°;³Ž„2Ée"’]¢4ŽÆOoµDĻ T“½ź{V¾Y@˜gÜPnGØH!bOn•ÅŻĶ$ ÆŽ«Ļõ LĖó Œ\[8«W-l ,ŻČĶi”¢yāmńŌw®ļMÕądn 0‘ĘGCA©ÖŪ\هF¼;ÕŻJkIć 6±Ęę:õ¢ŻFź…G^qÉÆÕ|;¾ą¾ć>‡­74]6xD‚FfČłMlŲÜ]Ū;,Ŗ7tśŠEgvĮÕå>£Šģ-ÆķädÜ8ĻQAĪ÷vUå o!ŪŽAØ ń‡÷s'Ėüčļ>ŅV-Øc׎Ø]ŪG̱¶N{ Vd]‚9Š:Õ„°€ h˜*c”ļA”Ēź?4Æ@Jޤ ź([o-Žey:óĻ„kAh .įŪր- S*ąĒŪ54Ztčŗv”tõŖR±.V#Š'¶}p $RŻ[ß$©bž3WĪQjóRŽę7ŠHŌ·^œ­r×sĘ`”J›˜g ķY…eLRźÕ¦ˆOQœśŠéķ,äfI<Į§S®+BµÄSǶI‘V\ /JśGą’<©ÓO•P¢¦ŅĪ8Ū=ė†Ļø|-+IåøI2@+Ē5īŚ_4hŒ{ g„i µ8jČļ›Bŗ#øŠ7ݐw+æšŌ1Éffš<šHĘŽ QĢup€é…P*ćčé2Ļ LÅmŲF†›”čŽdmq†lņ­MKĄöw‘™tÉ£IĆd"޵Õ€ó­_A»°SņȝNqĮükJŃĘ!nxü+¢ĄC=ˆøŲUųéÓ­gĒmn’ż–ōˆū‚½éKcXČåµ»]>ņHY„ńīćŽ¢°Æ!½»øFÓ¦¶XI!Į<ć«Xż'OŌb‘>Ó4ī8ēÖ½—N³¾@Ä«?÷ėI2łOTŠałV<Ūńż+īæj¾ŗ“Žˆķ”Č«,`ó’zūę„ī¹ŗŸühš|¹’ūG°šēC•VŽ 8ČĒ_’UržyŁmžĪ&ŽT!uL2CÜ}+B­t{~›šŚ R+{›yōĮu“Läæ–Ćą“ŒóõÆ8ńÜŚŅ=Œ÷r T §!@=ŹĪ6×Q»ÓcIāᙁuZĆÖīÆeÄĀssq“  øu;Č N'’=œšxϽt)©6¢ˆ×WEü±Ē=E¹¹„ßMg”n¤Š@cųž("Nʃk6Öm:ZČlŃń'¶8üj®‰įK ­dŽų^Ž4ŠiUÜ7ČW<œŠ†ŚfWńgƞ!Ō49ļ“Y­ ¾³bĢɌqžÕĄüń–£§]Ļö³Yjā7ž$ćµTG}„a©h¾/šŃøŗø‚ E&łr.Ņą[>žõń~­£[ßx–ņŅ5Š[ø®ž8yp *yģ½ćÕķ-cšīŠf¹€†HĄ)ükȼCyæu<ś3ŚE'ČWĻÓ'š5<¶#Ł—<÷V·’ié¶×ėŽW8uę½ĀšŠkśŖA “:“f 23°äąéŅŖ „”ÉųēįŚw·Ö7ŲÅ»-–[ūŻ=x&›įBó]‘ŻŖĒ›IõooN*Ķc±ōž‡įVŠŅKØ”“¼—o9ŠŒu¬ŪæĮ šCraš ą»ŽŁ ‹\Ōµ?Mmqyßg\Œ6ßc_#^kjzĶģF+‹tŽB£q>ōźvšÉ5ĀÜǹR€ņŽõŁG«ZˆW!Ž,œćžts²³épK;źö‚įövgŠ×#«j§O»ŽŅH FŹw60zšŹ[åÜģ“k»č¬”!˜F~eۜóŠō]&ćMÕ,šĘźŽ!z¬[ĻfĮ\ö>Õ-ž›wky5µ‰iNqÆÜ#Ś»«kJŹ&ƒR²JU£1±$I‘­ńŲł:’ĮŲx–{ūfß! ©lķÉĶuš÷†^ŚŚĆS’DupĶ=~µjc9›=Ś÷ķ‰U\łÆ\ų{įŻ"ėQ†=Vy>bUUaއŸj|āåGč5Ÿ†’Ēm¬ŅZ:‰DĒ‚„šĆ’ ŲųZēB tHœ œ2ī=’ZĶÕŌĶŲņü¹š×†u9ď-ŗEęF$9b¹č1×’­_ŪiÅ=Ū¼ó‹¶Q˜9Ļ֑Č;ÅIom$S#‰Pģ^£Ÿ”ÆYųgā›;ķaķļĀ}˜Œ!č†r3ų ŠĘQg¾źŗ…=Œš”S[ yV@’0ōā¼~ņņ[Tū Ä:JÄ.g(³ 4yЉµ–hd•¢BÄ»#ŽŲÆ[ėØ5QC}¼‡–Īü*ā“:)Čö­Ćz¶srd #BV6+3SŪ½xę­ŠtķEį³™öE›8Ēlū֑sSOńē‰ō-Z6Ō4ņ;‚ū“ybO„}e X®¢Ö÷RF‰i8›(„$&ŃēQšž±'ü#·\é‚RCŪžYGN nų?āwŒķ¬-n¼é øŽO+nł ĘF=‰żj,L‹ÄZ¤6Ó¶¢Wȹ巁œēł×ž^xŽļÄ0ŁŪĘ G^¬I¦3¬šTz¤Śž™ĀŽĮ38f+ĄČž_vk:‰õ Ėw¦I«’¦HČā@Ęģv®j†Ź”ąŽų]vŚżö„ØŲ¤÷”ɈäĘüäŽ:Qć?h:ģöėāāX‰̧l‘6=kŸ™ģ_“¾„zŽ« ųĀWŸe·Xķ«4:zž&¼«Ā_ģü@“hĀż«ŸÜ.Ģ¢ŒWL"Åc邞#šŽ•{£¼vi—jž}²Ø +FHõĻ~Õvūöjš¶§ā? j×^ƒœ‘,ćysĪōėZø½ŠäŅ3£Õ"Ь¤Óu›Ę՛ČhĒ’ģkę½WĘś_†učxBi±H­"Dæz<ž‚£•ßSTŹŗÄ}ž%ž –Ņč3(FŚ#Q’ōėY¾ų¤GāÉmõ olŅÖņ"RƦIč*ć ģŅ$Ōž'K©ųćJҵk.}ΌJļ&\ó‚8Æß惆‰į?h‘ép[^i†Ś)b‘†UƒpsĒ*ÜJ}Œ’Ś æsoā}k8läłr€e$źGė_Ÿ5ż¤|=ỿ[CŌōTÉj Gsx;³Ķy¾#ž3ĢY¤‘°€äüĒŽŖ=™“f„¶«}©@-%˜¬+ņ” €§ŚŸiy>#[‹÷–-Ą€GŻö5b;3Ķ·d-4QK ‘V4OOcw} ülöīq6 ōź(°Œō½?Ä÷ óŹCg;Ey•Ē…_FÖ!X'¹³¼‰ĮÜó ŽœśŅ¹Qv>«ų]s-ÄšÉ&­\€Wk¹ń޽ėĆVzŧ“ķKQÕēŽŚ' Ćö§JŹF’?A5ęŅn|.moķ-'³¼‡2FB§¶>šĶ|;įæ…^Šõµ?H’ašf$bŪ†ćĘ@2F)(ō0nĒ”üZš­Ę‰ā[ONÓD:=Ėejœgƾ3ų‡ršuŌh2Gü„ŁxSĻéÅm…\Į‚}+Y³Õ­ą‚˜Ü:.zŹæIķž!Cń+Ą£Ćw¶±fĘ0,˜ąyŁĘG®Ā™GĆĶćų__]7R‚g‰åe,ę\±ąqV.üewŖC«éWrĖh&ŃŹ0[ŒdūŠ®xvyl^ŽŅ,¤½8Æ”õė½;Q±Š&žŹŅ9cEĶ Ė{šŠńŚ+-#OÓ”:šyč«F _>ߝy‡e&Ÿ§.ūÓØ[ŖĢÜć=Ø“±·®}ƒVÓmēŅŅKi£Ś¦Qżąz­}šŪ[ŚLŚ>©h«(R#žĘ:š™l 3óĻćĒöփńWŅu+yŅшt™Ō…lōü+Ēå.سŚ@' B}+ĪÆc²’:?kngŠ„Un (č=«Š/‡Ś/-ĉ.Ÿ °ņö“Œu®5¾§Iėž ŠŹĖ\Ņd‹PhŌ‚ŒĮcžE}…‹˜b>qÜĮnś×u5”œ£©·¦FŃÜ#Ķč×{ Fßw<„zV„ąü%åė3<ŗz»`ĘW :r rŅ¬Ō‘Ņą¬yčā ģü]§ŪÕ&YeĄÉ|{žużM’Įk8~*ü4Ö>_ŽŻ'‰4ˆžÕcö¦ĻpgÆ„{tćī“sHżnÕ.e[’%UÜ ŻĒzśßąŸ “K]iL DAķ\² žĶ’ĀóķK"' Ēž3’ą¼?±UÆĮŽzwķą $_ üy&Ķ]­”„±ÕIvqó{ÕĶVn²[__žŸ‰”Oę»[²–ĖRŌ,åHŹ£Œ¬®^HŪw8ćšō Ī:)|ĢĀ6ōĒ­WiLO€›ś‚:Vē ŲT¶Kŗ žt«¼ĘŁł±ųP!ŅFīVŪļWķTDąyƒ;h*.ʼn„XóåĀIąńĪj#q#—p ŌcPtĘ] †C"B¶0ėčjÅåÆö–›s§ü‘¼‹…’ L:0=ˆ"™Õ t?·oų7ćž uńēąIżž'ėjų„ąę0G,¬KßéćåŠ`‹”żAŚŪA«€wZęÄDŠäī¬įøŽH'Mšøī?•|ūMh¾"ŃąKŻ&Źkļ³²īĄŻū¬óĆś×™8±(źšT)šåöƒ"[j.« DcȂ|­ģrkłXż»~jæ |}«jo§„•ø¹ņīX)*A' 8ćėī)ŅmI2&Ļ»‹g%Œˆ…÷eµ4mÉ ÜW­N]*‘+„,Ūv°ė×µ=¶FŖ$9äśÖ†"b•#;wv*yw);~q’ Š\+gj”$ō«j­· ÆjˆĆD»Bä¶9ÉéWō½_Yšīµ£x»Ć77š‘éwÜŁaöą£d§Ń€ĮÓ±ÕMŸŪ§üsöøš×Ę/„z6ŗuVźL–ڽ‹ÉįķH ¬Į:…$qź8ōÆÕ;QÓµY<5ØHæŚ‘!šŹv’W{älnücó÷Æ/H鄎WÄzĖĖćZ#ŌbBÓ@ģrŒäą×ćÆķaū]éŗ­ż§‡åƒr«Gös&BIŒ®xs¤üUń7ÅĻ x°j²ųŖŠ]j7ÅŌgēcčr~ķ|EāČtč%»{ŽŪū }į^„ 5ŽĀž3°³–{+„š ¹ņĖqČ=3ųtÆJҼYgv–¦į7ćåĘćé]>Ģ~Ō¹ā ԊI'hہ¹¼7̊_“l*Ŗw©ĻJ†­”ĖRW9]5ļR“Ņ“ūyõ ^Sūø"‹^+õöQ’‚aübż mćńOŒQü ął#,”„„ŌŽ«‘޲«W•ņŸŅģÓ’Ēų/ū?ĆäL×u bC܃Ģ*G]Ąä×čF‘ Zų~CöK{x°¬"@ŖĄ{W*’{šE4ւå3劢–’iįŚĢŁåj ™­§Ż¤’._Ė’®x‚Ž[Ķ6ņŹ;±m,‘2¤£„÷©”¬k”ó§Āß xץŅkö> ń#ėsĪe™øQģ;zā½2÷Vņ¢hge|—=ź9™¼bŸõuÕ.uŸµDX"±ŚWŪ­p’> éś={Ūč¬īŃXŻĖė]ćvYš—Šj?ŚłÖ¾Ōæpį› ŽŻE|‘āė~"Ōnµ=kQ{Éå9“µ »éÓźÅ)X̱»¹ņŲ¤yč+~ ē 9¶Ę-–g¶qn%r¢.¹# ÷­#LšwHcCs“ڹ'#Sč?|6s™®”Žä ø½ęĆĀÉg¶3T8Ę+žr6HōĶF³–&CfAĮžµ§>‰tÉ$8‚ątpŽÕ›4“Ū8ī"‚Y•­§ž0{W¦xU&Ė”†ėæėXÄĘS'6vzTŖ ;#'c;k/Z‹ĢxßN?tå‚ō5fL…5e1¬f6,8#+ZÖDŗB¹ `‰YpjÅҁ§Ėq#Ƙƒq g„xƒNÖ¦šŽŚą4Ѳ/÷Mz†Ś9Ņ—t'¾+HĆØ|]s§9 l(cė^xšg¾pFŃĪh#NŽD‹lHū%ćæ5Zūķ÷ ³@6~`yŒ·=A GW2HŠxõ§[ź–ŗœrƮہĮc€mŌāĄ.[s=«„‰fWHBg®hĀ”äc0`3œW/©_kÖ7āKm3ķJG·sĻ¢Š;¶ń„‹ogowg8F;O½Y’ ˆĪōa‘JQC~F+I"±}„@84ö¹ŠU €³$ŠKWb…Žõ»k rįY€ć½u6ZUˆµpŹLĢx9ļXͶRx¬ĖK™ą»ŽČv‚K}*ćąv·Ķ ŲļĘMs©™Ż‘ >½ŖŅ°sÄör»‡fCĪjדœĖ wJ™gĢhFķjŠ“»øth„TŁŪ޵ŗ‹ł[ŪŠÕ]<IJ…+ņõé@f$A4A‘³Š÷¬‰$žVX! ‰DjĻWdœ>ĪŌ™Źk˜Ž7,¹ćŲWO™92®ī{ 35-NóJŗGµä’Gz×Qåe•9O'ŒdŠA G"ŖJ‡¦Śéģⵃ%ŠyĻ„rˆę‹Ģ˜¼8ĒQėYw;ävWRńAĪ”²6邮zē„aŲųƒećF·Āh‰įIS4ŒNŒß\ń°#ĒžAž•,w )SēĒsH² ›mŲpłÉĻJétķ ‘*+tĮļ@zφ®¬ęšD1ź6÷‘§ŽDe03ģ½zvͲn#b«"Ģ•au.Œ{`Ņ'ķ'“b–Ē]¹ļOžW³ŪĘåoZeŲĻu󤎱.īĖŽ³/£X„ĘĀ3ĪéH Š<¶\ūV֟,¶¬ź#Y#'÷ ĪSģl,šŹå*ÜuŲéžy  Ą ֐h›¶R×/%±·{v‘‰ä ł·ÅŽ·ń4s™ed”Ž šAśö­S)$µ8æ |+¾ŃÆL—:‹Ż"Kę!ą0öć­}c§„ĘŃvœc-H™[”kTšüVi Ö³8LvķYrüØæ:Žœu ‡#*{y˜K0ēÖ¶4ėXŻ”eN9³”ŗ „sg&ņÜn­TņĄ śŌG)Rc•²æJ[Ėh¦€4EL˜ķżkt%¶Ž‘Ģnv5\Ō5¶˜®ā0 gYź.ī$.©ĪĶP×l.dV-2:ž¤R¾¶ČƼ9ĒyѦĢļššż[ąĢ:ž·÷6VҦįóśó’שµĶį#Ü<5ąˆ4 l# WøĘ+Š4ø&ŽXä]ćĒ#+2›:;Ū8žĻ¾‰8Č¢ÓīUį1¾r§Ś‘h•­ķ$—#r7o­Lŗzř$ŠL§Ų‰§‹ĢūĄ7JŌžŚ‚-°¼nņąa×µŪMöƒ¼ ÆN•µöˆ B&€sĘåėAtŃŹėšc]Ƌp^N@\f¼SWÖõŽXnķYķTœarTūŠtĘĻ2’„ŠmMgAo `7ń Ć}6źāVąŸJN7:3?WšµŻÄjØŃxlŽ•ņŸüsa4Ę6Fq<Ž•>ĢŃ#ēÆxWLÕōūICķæyz®3’ÖÆ…Æ"—Ćš©T m÷Kzę¦TՊrčz.‘āw‚Ģ*²ła³órµ^øÖ-®™Ä Å‘œöZę”lAIVŹh¼é§–ŲHĘqģk[u摱ä%ڹxVo`%Šņ’4‚iCg”nTÕw™>ŅģŃFŠŗ8©øŅ8\Ą2ą÷ī=«Ś¾x™“÷K „·w' ~é=¾•½9šŚĒ¹^j󽚧— !$ ¢¹Ę7(£fł‡Fö®čJęv3fŒq¾Y<ž†³nō°Aš&]ŁéTĢ K›8Ü2Ė+ßē®ģ,īōÉ4­@?öx%‡īĮ9"¹*2ąõ>/ų‹į³¤ß™m•¹bzWžŪÅē)»!\’Z*d:¤»cL®ē*–—ØKču’H€qšq€J]śšGǚ„ś\zsN²*ä3.õõ¶™Ŗ>h²“‚;ÕJ'-EŠś?E×F©emęmw Āćšī“×·‡ķŚO\ńšˆ­lsøŲģŃmYĀc\ lAcū‹3& tE\ŹL«ż’#ņŁä`ö5Ōé°:’"B>•×MhL[lVÓŚąSÅQyõ1 M—ĖĻˌćŠė†Å\Æė]nÉtǶn|9ö‹HeŽhęaŒ;zUö[ZmT Œdā“tŻ^'Auuū (ėA2e?Ke<¾nŲŅ/æĮéU„Ś@‚0„Œ…rLRhÄā5=H,›&Ż“Qęé·ö“AqŚsĮ5ˆÓ-äƒĪ*ą®07v«žd²‡WXņŸŻ?z,‹Ø³(O@k¢–ĘŪOsr²£± v  ŒŠO)ay£Ķg߈Չ üč&ʶ¤ī>Y>žµNHÖ@b‘Ž6ĘA©©”J,G)„,AĮĻé]’†,­Æ¢}±3 ji[@7ƼؤńĖo5§”HĘK}+ž¼ÓgµŸÉ—H 0kH”ĻgVÓ8™R`8ø+½>’ŹĘ9&A~UØć+2č:Ē1å€ę²„Ņwe$j†ćżé=S/Łč‘²l*sŁ95 ¶MhźŅDJpykŒ—PšĘöŌ§•µW€­`[+ÅūøćGLōĒ?ZĘĘ O>å]ĆFQOÆjlnį󜧰ż+qī`²hįž6g—”U_ų˜ snńł }Ü|Ō ©nņä“>yć„_KMBŁ”…ęyf”]¢—•„{„Ü6cī×o£5…¬K±ŒqĻz¤Į†©ŖŲ»“DZŲe źqYVDÜ·žXŹžA'…3=LmGKKYƒ ŌF?…NZęļ4c+Įp—$b ć‰=3[§rNĖJ¹Ō,£Eyc§CR_\Ļ!ia(¬yĪ2³žåĮ™óŻĶqåÅ)Gą˜-Tåšum° OSž•Ļ4oŹŗ”mwL›Ńŗmę¼ī&XŪģź„#*:S±ēŚĶ¾®\ci8Č8Ś}k”šī…ØKåŽO0@ėĘk¢·sŃįÓę"8rNInk«°²gAtiĶ™8Ųģ“Ķ6Ź"d˜öżÓļ] Öm­B##ėYJ'ā=v+Ų¦h sņŒó^Iq=ĖĢdųӰ©p3±üā§…„qo42ŁmpσŒzc^½aem£][ÅØÉēbŖqĆ8Ēäkč#+œ -ŒÆˆz·Š¼=moŖčj—dĆɒķ‹”cvzzWŹz·Ä-IōżZŹ+‹ųfD ĀĒb®sĶQ¼!ŠõOz†aˆß¬W)ä‰mĶ½žŻ«»ų‡£m$[ytµĮ˜nĖ«c+Œ+)īn’G_š»X¶¼µ±·ńE¢^ŪMWy­ŽōēÆā’ ŁŁéz†§¦[ĒŚ'œ#‚"ZP5(>JńĻć}.ŁąŲŽŹĄ˜—*WÜś ć¼?ā JźÅå½ø{ŌdĤ ąg±ķ[ .isµķŚ£*Åļ”±ķļV|G¦Ī²—‚TxĮöń“{Pc/#‹gó’t[åÉ ž*ŞŸu°“R2[–Ē#9ö “¶æšī”z•­Čeß·ĖĒ”ükßžy÷ą˜|ųlūłŚŽōHō½'UšuķÖÆ”M ¬óķ1ł[Ź“oź~•>Ÿą’ųG¬ļu-2ī8į7y’|Ž99=?JĪO”-œÆ‰uė««I”©že%dÉąŽäšņ‹¤Km:}_L¶v¹FĆķ#ę$~<!ŲØ¢/xĖÄ×3]Xϲچņųp'ÆåNńO‚¼}įßčśĶ֋%ę•%ŅL³ĄŲ0©Ę>„Ö‡JŠ>¼Õoü#®ü6mRÖtēšKråÄųĄēӞkįXŚųzžćF’āĆķ3":yƒwy=h±œ£ŠśÆJš4šcƒpcd‹ ÅĪބוxPƒĀ^.ÓK¹k ‰&T‘@lšI¢ĘŌŽ5ߣxBäj/Ź-Vįܞ@Ē’^¾Ņo“H¹øŌ×ĪŗYeóŪ ø¶O öÅHśƒĮŚż¶¹Śm“åÉtŠ$.Mp¾"šŹŚO-ķ²³J䂹ģMgŖÜż™%!dĘGzņ;ŪM>āgŽ(ģw£hµ¬:ŽšÅ‹Jā2?zõėfE/lŚåՂ”$“Ę1ÜŠm`škŁźv"Yc 2»„yÄ©l­µ&Y>BrxbOOåYIj3Ć~/Óµ 6Óu'{Y£P"Œ7§įZŸe»{ƒ5 ¹xĪ •< N6ß¾Ig$lu[…im£ČFķĻ’\Ö?Ä’čWKo‡q¾ˆ–Ą` £žø¤>cƛÄ2^RŻ9柲3åg}ōļųMµDŒźĖS·*~AÆĢĖ¤xŽņęĶ"ņšV~™#'‘Žč;2y^ÄV6śeóÉ-āN¤+Ū½Ž3]?€Y-õøå‘ģž †÷žuŖEŪCŻR{)ÆįŁÖ9`­ņć¶u7^čCQŃļ“ū€„O0o-鶙œ¢|ƒńGÖbæø±¾Fce`Ü©Ļu5Īé¶6m’ź»×`2h‰ėś6£j4導'óĀšGLV\Eʦ­,qīL„Głķ@XŻŌ¼ %ę½i®Ē ¾:*ŹR;ÆņÅzꉤiÖW2xjęń<[„Ģ6ģż°hę÷ž]6źļLŌ/d沉ˆ†@ŁĄķ“Üt®ÆĮŽҦĘ+H$RųŽ ‚ L–„©3 ń×Į½)ąho¦x8Y[ļpLś×šŲü1µŠ¬Žķ­ĶöA-"©łH)tcR:Æ ’b††MčŅĘÜ}ÜzśWŌ5ōWšvNųā.µc%”gĪž/ųƒ‚ź.¢5?ķ;+ݵ„-¹†yÉćņÆ$žŚŻnÆnÄMu§ÄĶį:A„iQw3m“Éeac©A§o™[k|¬€SÅ~åxJöŪĮ?ü=©ŲųŠMjŚŽŻVå¼ĄÅ%žźéVå}ĀHł“Ē’“WˆFui§-Ž©lw1‰œ/Ķ،ż+Äü=ń+Kńزńžībƒ2'Ķē'¦Ązv‡į.žęīM( Ų•KØ2Ō×;Æųš [_ZŚIē[M•ĀKóƒŲ{ұœ„Šń] _kچŻM¤‘0ÅXœšOŻĻ\ŠōI<'=œŠ¼åŲŖ° 9SCó3‘ŲĻ>s£Ćg¼I©Bü8oCŲū’xž£§ÅgŖ\3‹Ń¹q½÷cŲfjL±įąķØŻĘ!-lŹ8a’Ķž£Ó ®ĖV†ķ­gP‹–˜ē‚¦±–ā–ēœGĖŠK‰ ¤`8nEr:żĪ g™¤•ŽU oēõ5p} éČģ~xŠXn­üۘā»|Ę#Ąģć_pčŽ-Ńd°śµæ°œ)$«c€U³scįĒķ ā}"=SĆ~ Ž ZĻc5¬Œ8LńœųÅt~ų“įŻGYŌō¹u mu@EŠ@v¶{)éėłPg4z·§éž$°‹GÕµµ¶g/Ü”ńéųWĀ<9?‡õ‹#]“·1G&@WĪqƒōĮüiu±•žfń7ü"2\<×-\…O—”ōÆKš_Ų\ŚOŹĒv€9ĻU=E1žÓ©ĻįļZYk—WÖSźÓļwÉ•³ßė\kė6¶a“åN¹te<°čF=?ƚ‰œ®uŽŌŚźkešŃŌ67cØÆKų‡g®iž¶ÕōŁā6^wX8-ė’?ĻzF\ĒŹ~?Vń¤–“ßßK5ĢH‹ ē=¤…wŚ&ƒ©.‡3ż¦Ż$Žē° ®c3ū^¶µŽtG<ń”įFzœ×gąßÜxfé'æ†{ˆĀ.xīqA²>“ų•šÆįoĘ­ÓÄzµ¤–ŚÄ°Ä©-¬™Üv_Zł_楒 xNĘ(ü;sqĘ5dŒ)CŠį®š:)Ė”ń ę›}¤j‚dh|…'Ģą’Ž•ėž¼}fĄXO¹! ‰”ņ­Ś¼žVō:ć¹Õ|0³ÖŚ\WIē[Ć&Ł<Ā ('æé_xK·e ßhŪĀ‘ŠW„ r™JVfż‹, ī`YFzóšųėö¬š“Ük>ń šIp²‚²VNœĆõ¬*Bś˜3É|+?ˆ<seÆG ‘ måvĪG!ÆoųĖń”:šķģšn­hń‘ó#2«{ä.r+Ć/ Be§ĢX€x­pµÕJq©Ŗē5Va3xXČ8$Šź2®Ź¤Ļ­wSZ‘Å ģėĶEtc@LJÄ·Ź0;ūŠAU2±„cµ§j²óyEk¼‘ŽE[YՁJŽō»ˆ\m Ÿn“¢EŌ”#åĪz֔4Oņ{ōŃ×Ļ”e/Ś?Ųoķ!šßć߅õ[LŅģ$ŽĒ_·„~ęņͤ,£ū½kż1¾üEš’ĒÆ„žų£į‹‹KŻ3T²Šåe†UumČ9Zš‘÷MfŽT”|–^œs^āżźŚ[\FK4++ØmĖčAė^]@?-|} ’ax§PŠ’±I÷\Ū…NO {äēńÆĻæŪ?ąœ>jZ÷ŁģõČķ¾Ķzƒ"—č5’`Ńü¬ųĆ÷¾×5Æ j;ĶŜ‡Ėwž$'óļ\Ī–,n+Ҥö9*Ę̉ٔ†ķ=żŖ›L²—Lœõ®ƒ’[Ydķ‚}éĘl"™ Œ ĒŠTeŠ@ØŪĢō>•}dŻ.XŹ” Õ1˜+‚>pycÖ“­ÜĆ"2·n}A éƒŌż’‚]žŅŚgģēūGéžń ˜|%ńć:ü³ü–—¹ÄRO'ķœöÆķwJń„ƇSĮ>3Ö­ć¼¶‹ĪšĪ»;—0õņ½@ c·æ|ŖĀūtŁųÆūl~ŚŚ_„uå¾ńĪćKö¹†uާL:¶1ƒĶ<_h«’ˆ^ ¾æŪ5©y ™IĆIéǧ5„i{C”‡Ä³ŗ)øĘF8ŖZ®¹c%˜WmŅĮē½uAXŹU+H÷R#”Ž[1śšŅ‡ūEX]»:,|Ē*ńļTٟ;5ŸÄ÷z„°Do录ĄU…ęcŪŽµō—ģńū&üVż£µ½BĖĆś\6œ’-“óźcž»s\µj¤\]÷?¦Ł;ž oš‡ą¦—kŖųĀ¶sųžYāxü՘÷+žĒšżtšÅ¦Ÿ¦éCCÓō»=2 ¢6ŽĀī³^|ērΚŹŃć-jŃ“AOWK3MŹžõ‰œßCRņŽ+hT}+>ŽFÅŹģ“•ī-­¢-,[CąÖcŻŒ‚Ē`Ļ9¬§¹„3Ė|U¬‹}Ž\ĒĢ^p§Ę¾DńĒĒÉ|?oo©³=ØrˆTr§Ņ“§­+?ų×ö”Jy„šÄ÷3Ż‘Ÿ)ˆ ćŸÖ¾Gń—Ä}OĘNnõ;™U†[asŒžĒÖ½*T»ŠR±ä-vĻåć,w¹«J°Ż~ń振 ĒzčjĘ™vŚ$ˆˆ¶‘ÉČ®’×M¶ł+ę~5I=Oƞæ½Ś.ĘPr8ėķ^ķ¤ü?¶p‹%²E*€7 ė\¬mŸFųJĖJŃ­įŽöDM½ Vަtė™ŁÉ©ßhéX4÷#œŠŠŚ+ į˜’0Ü?¼+Õ® ±ÖÓĶ“ „dĘ$ŒĪjż#Ņ`x®‘7p3Žy«:N©=«Ęa'Źź3[“$l]Ü P‘*~ä f£Óģ’b\ŗg£bƒ•Õžm3VYc‚7“näd“W4ū‰č†@‘·+žŠKhNדrwõVh|ų$·bZ"8ė@熼£č³jVlŠ<Ÿ9“øē’Æ]Ķ“ńŪĀŠĢv¶0­Ö¶RCfä¢ā9`˜1NĘØZ™ā\o;7t”Ō„oĒmo,>y J:qU/.b»…@r&^ dŲ£„ŌRUó"'«}«I;̈!fć5 jOü²ø äÕZīŻ.#ņā@²Žō{Ak‹1§ŒN˜åq’E5¼Y§ZŻ=Ɩœ}ÓŚ“ŒJŠK‹ME7ĘČXŗ{SŪRšŚ4·U“ø4¤‡ČČ8@PqœVeÄbŽEŲß!dļ.źÜ“×­VūLŃĖ Āē(³³0Ü"o#ߌ³ÆąŅ;¤€¶iĻ™2Ą09­*į~֐‘Ōą é®^H%Ł22ʐkSe™Üwõ iœ…ä’Ū0U÷æ`¶—Qy—oåLć@ ¶įåÄ/•SĮØn®Äl[ Ó#j[½č’aeAżŚ”ssé± G÷ qV1|rĶž285µ˜d„”A7|ōĘ]µ¼xB‰!­Eq!s²N:ńMĘĄF××e.=®rį„.åąõā„®ƒ2Ō¤‹(L©ėV–0ĻŹŲŒ Ļ“Q¶iżŗx¢hóĒäj“%$cŗBք,)(‰sóąU¹Žź#9‡j© ÜŁH¬°łÉŸ˜io¼Äų<Ņ‚&s³\[)Ž6ŹžµVŅķÕ’ŅY>”Īœ!•7DŹĆŪµYxķłr… 9ę€mĘÓD …==k˜ÕļeĢ"īčI('JI.÷yŠ£Ŗœ޵›ØZ&ĀÜžtF&}ž”<÷ŗ@ń‡ūŽę“Ž_²…ö1ć4–ĒAc¦¼öęķ.p0zÖŚOvˆ‹p<Ā2 rfF cœ‚Ƶz0>µŹIŠR0:J„cS™äŻC0'œsQiš -Œéӌt ®søÓķsŒT½ė”krŃØ.6ć­6-½¼qČAbĒŌ½=„¼ˆÄȱÉüé„pŽēØxJ)¼Ę3;nҹgų~Jg„‘0ŸJŃ@Ży›pŚM(”0”qŽ›łŅ0'kŠĢEūVe•RL·a]RßX2ĻkŒ75qœž¢]kWJ<į+.āŅŚYÖņ+nIł¶Žõ\ˆ„ZŠ1½ ]¦Ÿ{i<ˆÓ*©œŠĪ*ęŖh宎KhŚd|08ėĶgŪė÷Ś’¤W)Ŗš­yGĢŽ‚Ńīsū¢Jć֛qļ)y’@sҳŗÅĖK8å`« ļ[ö6Vé8ó$)Ę3ŲŌÉM§Ćg?šĻўq]>Æ@ÄMµéW‹˜ójŚ½ü¢§#ÅY‚ŻD *Ģ®==+RYėįĮéķīķ®P‚R7ĻjŹw×v€ ©ĆĄxÕ®”ŗ"Ų(-ŌŅlĻŁ—dÓe…TœŖ{Ö=óŻŚD~ÄįŪ¦+ibµ•ĶÓ(’@ĄžĶXŗėj1ČŅŲŹ£’ņ>”ŠQ:-E¾Õ`2dr!ąåZSÜR>ƒš‰ēÕķšŽöā¦DŁņŒtļõ®Č0X PŁéšķ‰ĶS±˜ ·ŗ£H9ąō¤žĘā×ĢY%ÜŖ7g9¼‘õ±ĪK:LĮēėH–ń̇„*¹Ļ½sÉhmLņ?ˆSÓn+KY™[;Iäż+ćN/°I&Ÿ, lŹNōĮČĶ$ΘµcźÖ ČĆZH»:ķn¢²„±xŃdE"`}8©S1‘é?¼t¢”„r$ŗŸFxPˆŻ[Z«nF88ķ_C\č‘<č&W*2=čŠŌĀ{é9G(*ąż+×t¼Éj‚Dł°9ĒZꦌ,N˜Ź:ć:Ö¦™ £†ĮeśWTvŗ£C%³…Lūā¾|ń*Ł6¦²¬;…łI‰l\w Im±iS#¹ō®#Q³³žf–Ń՘zŠåš60u B«E÷ŗrz×'yf »¢Ū]•Ē˜‡ śÖFRÜčōó{±yKD c×5éšS „XKlu½iAäWn@vœ’ē5ŃčI,BŽź`œ é€ĖWz­n$žjĢm5¢$2‰d…śUƒf“RŚģdž!'8ĪyŖqé1\—03ułU†  wRÓåwhÖ ™R1Ö¹‹>xœ<‹•ą v FäE²™ŸŅŖX,Ē9I#Pp:ĄV:‹k9nŠ„žXwOҹ»Ū Ū+¦•goR§„D„a‘¶ætB”c÷—Œ]]¶¦—1¬wr©q§q’A+Cs#”ócą`ŠøŪtŹūJ8=ūSņAV##šć5‹•ŲńĢ=:j yįńµ”Wp[ļ.ā$Ļjö? j[¢KčnŁ2ÅvĆŌÖžĻ¹|§{ćKŅU@‰ā \Ö³svųŠMĒÜ皮T -ŻōŒš]Ą‚$ą0ź’ZČæ¶UhW/Ó9ļLƒŸKV ¤sĘzõ;J ¤L1ūĆŅ¢Rč5Ų֎ꮮÅrøĻø¬ėķrŽ_Ż:Ģć‡Z唺œlzœ&ęXäYø^‡ėZš\Ą®„Iäw©NÄÉŲŚ…ą•X˜ƒė޲Šv…¶±9Ēa[˜‹I¼—d…H“Ö­}£ģE‰‰‹ąGcZ¤šāܖ„8µ†tĻ'«ö:„?¾S ēĘ1¶—³v8}NYMóD–SDŖFĆŁ¾µ¢’8Ą`2’€Ō49ė¦óŻŽ$SņžõV6—ę±ĒRi„{tˆĪŲū¤żą*{U–įüķß»Q¹ąSŗ¶µŁd™ ƒŪ½@P£å=N)2£¹‘*G明W•ŖpłRäŪ²sĒZē7NÅżÉ“P1‚+Ōt_Ž7Ų”ŒŁģ+h- T‘Räm˜`uęÆéöŃY“‘VŒ~¦¶„FäjÉ#Xd‚$lpG«ś”xxÕHœ‘Éļuéeˆ T`×?ˆä‰Ū.ōē­G0Œ+JņåX@b“Š|͟Zdžāļ{¤‘¼O9!cš¶-+NµŃÖFó~ŚĒ)<¬jŗ„ΘóBÓ2Ą”CÜz:÷ &¾§įĻŽ7Ö)'†5גņĀyŹĒå/1źOćķ\/t; ķJõn-ū:ģ|’((Z2śņkSu£=£įf‰įć·°øH%HNČAÉb^•Ć|QÓ> jś› YłĀgS,q‚Nąq€=ż©4kΊ^×uæj§FæÓµK[˜Ü(IŠ€ĻßJś>}kĘņéĶq¤Ć)k˜ŚŚuX÷y±‘Ī;f—*&[Ÿœæšę?ŽŚŽĘRņŻöķd ØĻOʶ>jĶŖ„Ī™%¬¶„·d0Ź;Ó±,°ŃbĖr© e ¦æÆJč#ŠeÕ¶<7)åē, żļoj™JĘž%ųyq£1ÕŅy`ĒĢ«ó†=~”iZ$Ś…«½„ ŗ1’€d£c8ö©S ©gą?ź¶Ńŧ†W žaq õćóÆfų{į;Eŗ›˜l—$ŹHĄfõ«NäŹOHÖ<£Ūk¶ŚžČžĒ:+y»™1Ļ_nj]oĆci“˜–bˆŪŠīÜsÖ³’Ōē™ó[_ŁM} ĶĢ—!äbxĄĘzUŅN†G’ ¾Į#ƒŌ•'×qDĀVÜŲ°ŌōM.XŚĻO˜ß;ü΃*>£ėoāu[95+Čgšß+ēŃ@ąqŚØč…Cāόz՛xĘŽ=öīŚĪGhš ēęĪ8#8ć5vßF"mńŚÕ\HŽ ½€#846};gńJ×EÓ£·Ō,LšŪ6R{G.ņgžæ„|ÓńžģųņćN¹Ó™ķ®Õņf+€ #q…ŒnĻU¼ų‡Æź>°Š¼C|³ĶoŒ>9™1ü_•rZ¾Ę³¹g®OškĮ“ü4±Ō4Kķś‹&ŁŸv÷ĻēY> ŠśĀÖ{KŪc-°;WŖ–ǵ.vUĒé>#“LńäÆb³Ć`FT‚㦠čkńv•„^^]ź^˜C9;ßxČSŌŽ“ƔōæźŽ ¹ŠŽÓUK8õCŲ¼Bö¦ømĘO=Ī“¤³ŲĶ;ņ.ä€pGµ!XšŻxS\¼‚F 4ŽGßĝ«Żō B·¶šŪInÓ2īĖ0ĄÉėķU ±įß¾!ėV o„ŁßA”„©(„ZR@>µē:oˆ4­_EµÓetDbK©nSŸ­lk¦a`1‘žā¾ŠŠüm‡ŠĆ«nŽŅvTŽpŽõ‹¦ZG‡|IŠĒÅZ„ܚmåÅĆņÅ6¶:’+žšÓYéӽ؄JĒ2n=Ē·ą*U7±j'ā_jź/ ĀC€H ßß‘­“°Ģņ1gź h ƒŁ­•øÓāŸū<~üclƒ‚„yµķ÷‰|EyØG®Ż›Ūe>XÜrQG@i°t‘Óx;J×õ«Éķ“»€ö*€©GŹśs]Pµ½š^¢öZŗE$Œ „¢`7ē”4œ½™r’PkŲ‘Å숮?„ōõĖŪŁBÖÖCö›É9VA€Ē†»]¼acgg¦ZėZż”JFų%œ•”śķɵeŌ—Ś­ŹZjP2Īć\ė“]V‹ce-䇖 \Ļ„Éč>]rźĖWšĆ@¾’HsµŠeK ōÅRÖō…{ÆÜ“— ;(d?x1źĻ„GŃųw–™«=ĢqĄPy\õnąÖÄ=Bk%“ŪĒēĆT¢ń'^õ2f2zžm¤\£Ę÷7ēŹn&rTśUßjŗmŻžŸoö8„ń‚<čĻ.÷½Å(>ƒŽē•Ķu}låćø!щąc#ҽcįÖø5)¦­nÓA<%[Ģ_ŗOB­]‹’9ˆ:%÷†ļ.Eœ^\+&żŲ?2‘Ö¼ÓSŌo&ƒ÷–‘’W|»MŅ’±”ąĻ jŗÜ—sŚDķå&YW–=Eh_xoĘ6×öŚž‰y<°Å"4¶įöłœ’ž”Ó¹§µG­ßųĀŹŅK;G/m|ą z·ɜ׫ų^([mbH?Ґ†f ÷€©™Ź”õƂ¼Uį£Śi7ÖÓź6Ń’¤[ČAxńÜ_)üy¾7>!D—°ŸŽe7Ž qåQg{’¦|­āo^%ŌzV»¦]%“Ÿ¼I™>_^łĶc]xJßK|Å0}ćŖäT™­ĪūĆŗm¤:bDĢ#hdÜI<śV„Ķ™rälSåÜǚ«‰žį‹ķ±łžt[wl džķ2ęēĀsŁEĢX ńœ[Ÿ›Ó¹¤sHš;Żl bYrAÅuńŚu™ŃƬß#eĄnŃķłP.Wsŗ—Pk}6k²‘5£‚”ńĘ}?•yæ…uø#ń5ŗź&)ą's"¦ ’õé›ĮTX\Z£ŁŁYČm!—%cŒŠ×˟“ƬhK5åœŃźöłŪņææ?ΦQ¾ęŠÜų×PÖ Ō-s4'~OŻś×Aą©ī–ā(mfhå-µIśWØö;#.§Ł <«ĘéŖkQ[ S?¼’ ÷»˜&VŒBTGĒēó§[CJģւ/%Āw8ēÖø’‹mKĀĻ[„¶pā<ņŻĪ?#YUv:Ø6Łóž«¢i÷Ś]»ŚĶµÜe8ĮÆų‡ąMkĆ6WZŻÅ½åŻ“mݵ²˜®XWŌī”SGąŻfjöwÓo†ÓĢżī̃źk迊¾†÷Ā–¾/Ņ,O*Ž—bž¹õäשŻ\ę#ś2’‚ž×-āļ†ŚĻģåā]mcšŃé pĆs å”ry«öcPęi£`ŠHƒŽ9¢»Öč\§Ó_ü`o'‡u ĘūDKū£!ɐW»ĪŅY]Ē{lvĖo_ö‡qų×#z™Źņ_’žŹvžų…į_Ś»Į>Ļ…üEöwˆšŚ°Ü¹#ķņ õS_˟ˆ¬&Óīd€ĘŪwx5-9¢ŻģßćŖūÆc–¤t8Ó °–Ē#ÖŖ.÷9bĮrF+Ó§±Ē=‹9h× æŹŖÅņ»ĄÆ'ęē5d\­)ó2 ķä)žvķÜ.A hĖzÄĮ—ęĘ@Å[‰„XBÜ)ę‚ć.ćŌ… œ•÷8Ļҧ…Ā’¤“éšg]9w7C-¤°‰¢d1Čŗ‘ĶVæšnķšŅéšēģćnīI¬Õļ4Vø”‘5¹oø»æŗOn€S·DuĒcśŠ¼Ņ6!’\¬ƒ’]yŽ”Dī„”†\©>†¼ŗŃŌrgĘ’>ŁźŚ|ד“ÉØŁ:Źxśœē śƒ“_iŽŅbŌ5x5×z.Ø­äy’TÄcpˆ ¹#£±'óµ’*ż™ĆÜų—GfDoßĶyóQ¾éo¦kņ^XR‹ēDĖ» u®Ś²±…XvB›QIąŠĖXSvIaƒŅ»£.‡ āX‰+<čŹ ĄĮ”$uvÄĒ£wŖ3"Ž#„‰õõ«ŃÉ·r°œŒŠktdé ą’ŽK`ŒóĶMęm £ćփ¢ ¹’éą)s5„Ä3$ńLƒ ©Ź{kļ„’‚~ŅŅü+Ҿėž ’„ŽŅŻ|“ŖÜsutdėøżi1w>$ń”Ŗx‹Z»ÕµeY‰Ų8¤QŠ®”"Hƒ;Ž“Ų¬īÆłö'-¹‡SS7aØ_Cé?ß³×޾.kVö šĘ„®Źģ"{†·o&&=lwÆ®>$žĘ¼¢h xzĀhn&·jA“łcē éž8ó1„ Õō'ö`’‚SXivŗgŽ2~•Ćźž%ˆAssźĒ ™@6żA¦£s¢[ŸüMųł„xyœŚjˆ÷ŪŹmŽ0Ö¾ńoÄ+æźOuˆq!Ū“šŽõŃN™©Ājvé2™бž!×Čźś4ńZ“öŅ Ń»g”ļ‘]ńŠĘF‰ŹĪ<ČÉąƒŚ»/°Ip,ķY “¹„)w!@ōmĄ×wp›…h¢Č©Å}įļŲŪDPĘķÄ•®*“4ä=nßĆJÆ‘qĄkÓt3ģ°2M ƒžCEa)ÉhsĶĘļ2Ķ"$v5›”ų€A©Įc$JźŲSóc'°›G($HČNø'œWy¢y˜ŒA覚SZ„ĻrmnĆcßҬĮn‰!8u_z܉K”eDŖ¤ó[7–°=¬w0LńL­‚ūĆŽƒ#œŌˆ–2²šąpŲ¦čӈ]DŠ,Š­h·֚’ }ŠŽ:ZĀžŅH$m™oĀ€(yņ %S(ĶR,o9æ2±ŗ3*Hoæz’[įŠØß¦DČb#v…dWī5NKhX•UņåĻ4†VŗÓīR٧¶euEsVƒ½ÓDG”ŁąP GA)–Cr0ČčkKģ)e‹aæEĶ!ķ–Rņ–ņϼēĒZE¹æŠźĘ5wĘU€éķUĢĖ‹±ƒ§\ܓ!Żo/ūUٵ®Õp7#Nd%£E+¼H:n¬ķBŃāJ€™Ķ#&aj²OiĆz+*ÖžÉĖC#4Š_{¤j‡ŪčĄņ+Ó|=āģį܈ī­ŲaIōŖQۘ:„Ōfīdhvڹ'Ž‚¹=KO·š#¢9#ź¤ö­-d#;LXōņcSņ’1]d±y‘,¶ąoĘhR{;É"'°ö­Ū[°įrx=ź/Ø'¹w@×É?~*ƅ|Oa£^9‚+–*Žü =5±p;_ ų†ēVšßBßu•ŗ×®]i3٤oęĒ8aü-’µ/aĢ‹J¼½‚ł­ī-‰“ pyÜVŽ č¼±,3łVehcŽIc&2Ź8ŅO¦ŚĀEͬ>Y#ŸZS[؈¦nG }+6ž7ŲŁēzЊĖO7ašebō©"Š ’Ęcg‘Ś‚HģČK£ĶÓõ«—ś0ŗrŪK;v ĪRŌ” 11 ŽÕVęä¼rHU8'h49ł5Ż2W6‰8‚ń³#"ŗ6'¹$Č2sV¢ĄŻ¼Š·AÉ8WćŒVJÄbG“1Ŗ„ÜÓdµY½_—·æÖ©źKf/^4Œ“GńćėYĻ\iė°¤!½¹§č© ‰#‘KcŽh.#€;ĘFX8¬õ“;Ō«mlēšź"’;hU¤?Af«=įņČ>ŻÅt’Z›VPåYOj£ż‘5åŹ½£‚Ż “@ęµc&Ÿ3yńŁĘ1\¼ČŒw(Ś= Ź&žxlW ‡Ø­ē’ĘżžY MŒńĘh1%Šw·!²½łéT®ģm®ÕŲŗ«÷qր2ķŃ­¤&•±kē1PY¶Óäö‘DKŹĒõ«Śt@¹v|ēÆZ³«N÷6Ķ~qšät½2{kĆ$Rιl•bHżi6us©:Ā#CF:ćæŅ°Æ.ą ¾AŻĻ!æ•bĄ¶’Eyfa0¢Kü?ZĄX®¢•ŅdĆ)Ąē$Ņ-Lļt}NęÖ܆·dLc SW\[‰Ź¼{H={j,­Y”?ˆt™b6r°Yś:Ÿ­rw––ҳaƒ0éƒWģĢŚ3>ĖjŖģóׯҩ?‘)#īælTøŲE)eŗFhY_į`y5-¬_i&6l?½"ć+ ŗŃ0I`£ž¢µōy-,‚ÅxoӏʑNeWKIĖɦĻlń‘Į®LŚ]Ö;ØöœūŠ•ž‘vFX[v:JóĆiäNdY% ‡± ĒI£Z Ė•Lć½ė“Ō`ŸJ¢1#«r4Š'›1“Ė(NJŻH R m?JŽC,£ģņĄ’Fw÷®PŠÜŲȾZ:x=Ø4„ŗ<ßčÓé7˜cI~bqY–iēLLŠy$š03AŖr%³›å‰%^„‘Xz½§ŪcrÉåŽŲķAŗ>Rų”ą×†6æY¢™AĪ8Ēb:×̳Ä.lolL åŗ²a~€Šię|3ń3Ć£ĆŚæŪ!ŒĀĢ6ązU} {MRÕ;ńœ}}« ‹¹:ø,ŽŚā9a(<ėų×a¹yo·ĶFˆ/ńƒŽøźĘWw}&¤Į!Ÿ*ŲfŻėQŪŁóŠ0é‘Ұ”¬tA–ŪO˜Ā|†°ŻøóTLj””’5På±gJ×ßEæ‚H®Fģ0ģÕõ‰zu--&€Ē3q¼'8®śgCU’ŻęV†³’«ĄĻ8ŌwĖ~©ū’fĆČō®“•3—[(ķī…ŠUy(ĆåcļS^¬yvöPH—2£†Øš7„ŗœƧN®Š¹pć<ßҾyųį‹«µ–ö5…ī ćq~ėšh鎧ĪņYÜiīQ•e~ŒG®ŠÖ8%·T8w=«–KRć­ę™iĀ 9Ū_A|ń5Ɵ Ņ..%–"UՋu”Cpq±÷§„ļ'ÓļI&’~V N3Ēξ—ŠüY:F•§ Ėߏŗ`ŽiĄŪo„µĶ“n዁‚kčo jQ_Ū!Ąō­ŽY+M妚8śÕ>›ę&SĖdQ܊Ś;:…mns,¬#ĘsŠšĖŪĖi.Y *Ä·%¹¢o”iÜ©®YĪöLöŃ“c¶pVVs[Lƒ©<śšę”ŗŒjö7-łL‘×nq\¤;į.X£½@8ÜŻŽ0˜•7c€(Ņõ£¤Ž-¬”ĢLÜćØQ܏fzž’Śž/ ÄFŲśńŠ–÷D6v²O + `¤ÉśWD|†©’é^*kIE„Ć4r用k6WęĄŪŸ”ā¶”ŲȋUŒHvĒ­u1¼ÓCš|ˆeĘī¹ÅmXę'ŗø™œ“(<īõ®gRŌä`ŎĄ[ S·¹µT&āÜ9Éł³Ś‰%±™·Śź1ß5ƒCJē)®j’Ų± œ±VmعĮĶPҼSc®¬ūob{ˆ¾WBr~•.7-C¹3Å…0 9#*œ–÷@ŗČŅ4-Ā’õ©(Ł—Ź½)'gT‰äWr}+¤X/"ˆĶ3Bió>Ä7NĶłŽ3Ą¬1}  d »×µRbŒO1ń?…txµeŌ HŒĢį™—ŌWm„Ė1Ɖ‚ ÷8Ŗsf¶;‹w7… )n°«Ķ§żŹ6°=E.fēQTF!L€õĄ¬Å¾“žFXĒ– dłĻµ9Ję2ܖ&·T "ī=F;T1XLĀB ķPÉ*_¢< GAŠĘdŃBd0øQ’O°®rć.†2µ“ĪęHV9ą1,*¼‹³,N¾gŻĄ4 HŁÓā™aFb0FkSū6U W2)9¤%Š“jŲ\BæŠÖSéļ+I¹²3ÓėxŹĄ[5šĶļņیś{T/k·%O©ÅiqŲ»Ԕ·#ĶmüćŌÕ×“ę„Lwõ݌VVī>Ve­Ō3Ģ6°‘ĢBšé„vol†3"IœŠqq4bŽčśu޶ˆ× NŁA!€ōż)tķ5ą`Œ$xóśV©XGQ–‡nU™:` óZ†PŹAu#+9 L§-ƛ»OŻĒZå.oń¶ø“n~dćZÉÅFE¼ž]Į»z rk8šŽ  ±>^æē5Iśté})Œ¼^XéČ—¶]įc`2=ż«d¬3ž;ƒ.w6å8ąŌwÓ}’5ї“ņš*d˜XĢ:Ž™q EēȌžßtU(ķ-ļ„.& sø÷Øq°ˆ6OfD1ĘŁ-ó:\ÓŚśx•TuŻ“øg"±›čč~ų©ō-;Ć~ŌtE/¤žĀXyˆł98ō’ …ZŹ}>d¶oķ d,ŁÉęSƒųd׊r4xŸcĆćų+ų®K+}°]“…ŪĢūæ@Ż„t¾,Óoä³Óōkų¢D¶Īžyź:Ö°‘ŁÜ଒µ<'ā-:ļJ†śėKl+H§ī·aŒś×Łž›LūPŌ&o³Ü 8Ąä¶3йIwž(Ō<)āż6ęāóG†ŪY-ˆå “Øw×§ZóĻ…ōYķuo Ā,ēŠÖéÓ.w:ń‚Gćü«09ŸˆžšO-®ZēBŽ mU˜\” ę3žyƆ“?_čŽ'ø¶‡Oš×FBbY°AėÉÓŽ•Į¼S¦Ś“MVče-žÆåĒ­zO‚4}Imķļ>Żk$QąÉ 1ü+Cņ>œŃµŸ4„Ö“Ų/ō–¼Ū#łW–ÜųgGŠ|EØėžŽM6ŹāBĘÓ~åO¦i„ŠØĘʖ„ā¹4č5h xbHį'xō®ŠĘ!®\%ŁiāLŅG^ÜV‘mtcųƒÅšŌ–3iZ5ä—On̦) #xģ=+œšgüKg$ŗoˆ,䀏0ēå8ĄĻ®4Ū±œ©ō3üO¬Kõ¬ByÜ܌u÷©Wā׃bŅ$š–£ŃźŅ!1Jå\wéMy¾ĻsŒŃµ[uš8šāI“vć.ß½“^įa|·ZtšUØ ¬Ä.[’h)+/ĆHō­fM_Z¼{éŁŲ‚ĆAķų`W°ų/D°ńÅÅæ…¤Ž/°2yo*F¤®O÷ŗŌČnGxļąĒÅO…^.‚owāŻĪé ĘcŒs’:uÅyŸŠu9|9ā3JÕ“kż6;•VV~˜?Ş”¹Ķ}”ōåĒĀk wĆPkŗ6£sʱ‰×"CÜ/į^{7…®|?ę >?%K™NFįŌ} /i©JÆC£²ńLsÉvĘ µ ÷N<Ļjō’|J°ńTšÄĀŽŅī"c"Gü]j”ę%Ŗ ńŚBlåšī5ITØRx>’„|ń曄ž l/€øGĖķ óĶL»¢\{³ššźĘėL›M×#XD1 '$äqļZšĪ›kgu=¼1Ŗ[°8|sSfÉåg!ać#„Ż>›uo<֎ź‘óņóN8®3āg€—Xš/ųUµnL韾ų8Sź8«Œ H«į_ų«ĮöįMQc]1€tv?2¹<ćŪō·‚õ^ҌL“ą9\ó¹{š .ŻŁčŗõ³Ų^5½•ĄuQ9ÉÉ8’œ~µń‡‰ō]Noź7Bī;ˆšWó2ū™ńčkAŖ¶8ėŲļōé&ŗ¶¹XÓ#tLWõŲųjž}H$w $³nߍö§Ń·’ '¼š²ų†ŚĄ¼(ĒqĻ#Ž˜ÆÕbO> u·ucņį—iŻéQ)Y‹œźt/ł¶r]˜\B©8ŲGsĒ#­sŠŻx§DÕ®ō½_I ńȧäOJQŸqŪ¹‹ēømü6ń#cp8Zź4sžą^^šĘ†>SśÖ—F†t ĶG϶°¹ÜĆ%¹čɬ™ōūÆj3[_<9q¼€Aī))…®Æ5Awm"¼;TäO­y?Ьo¬¼cc¦kQŽCq4r>Xpzg±­”ū‡)Šj’ķb¾‡CÕ<›Į |Š_LžŻxkĒ^ń–½„xkRÓ¤¶²ŻÄĪ7o*y*;jŸXśĘ󥎵‚Ņm L3DYĄd<‚n+[Ō­MŒÖZŚN …G̘éX ł#Ɵ ¼J¾.³Ö4ļ}«KpdŠ;nˆńņ°\Ž­ØŽXOn”Ö6Ü‚xcéA“esˆńÖ½ŖjÅo§Ķ=Źīū"'±ļōÆkšw€ī5 ®µløø€ö®æ9ų¾ŸZGŖųSĆŚtÓ§ö¬©i`ŲąUµéŗ±©Io{e«éļ1ņČ@>Lt?ćYH >Ó4 \ OL¹Ż<®V{\DAŠ‚=yÆ0ų£ ·z‚›ĢL’7d²špåPD„c›Ó5–é§]¶ēč«ĘąH„–kŪ4f™Aėœ LŒ¬jXx¦ź K‹H‚™d…c€Äę»kKĶ>ēČk\±ÉŚyā© Ÿ”±t°źs[F†)—ž9ĘI®¾ĻIƒĆܔŠP6‚GåZE½‰sgĻ÷šŻęŸńķm짹ӚEO–3˜øėō5ķw·–RÅowœšLFęR¼ķšŠ“Ī“Ć_ōKŲgšāÜܦ«©"’}}iŗåž§%įJŠ“µœ†ā¦Jśį©ĆkŚwöt^,ŃĀ„¾oLg¾+'RÓeŗ°K„ÜōłsõØJĪÄt? jZ®ųmmäŗŚ P$YśŠīt»¹-œ$̌?Š2½iŹj¢tŚĻ‰ļ¼S=«Ks#aDGž6Ąü1YŽ"š¾£s„ tĖX&»NT;ąYņ®ƒåF’Ā›=sJ¾k°gµ¹ū¾^Üąō5»­”³æ‘Pa÷"“ßŲ~¶fRVŠ©m„YkrF·¶l·%ĄIą©9ż+Üd·Ōō-Źi-%™X#…luž•Ŗ•ČGhŗ®·ąĻ[x»@„ZĢTĒpź0dRzZ“↪|c¾āķå‚į¹VŒķ!żr)ŒõƇš•Ž»į™4ļG”¶ŲC™ē‡¦¼×ā7„4(ą]WĆSĪė(™XżÖ>£„fą±äZF±*9Šņ2cSŒēœzTž#¼±'ʶ{xZU ¬9Ćöėß5¢Eó›žMnŹŚxn…Ģ7[~ü‰ņ±õZś£ą­Ō^ ŠõÄ·5됰”p:ŽÜŠMĻ2Ö¬õ#W½°…^icķĀ…®ėĄŚ”śž“{c®iPC}o*POAėŅ€GkįoÅćæ ų³Nšä–ŪVLYģœžųć9*æ­|•>«=»jrXŽŲźö®čĖ"cp|æ—Z āP‡ćŒ ÆŁļyČ»ag˜Ōt™Æ]ėž.š½ßö•Ē–ģ$ķŸ~h:b1Š| Æj†ů`$$ŒÆĀgךĶ}Ūš£ąöŸ§Ū VŚŃö€«•ÉSŠ™D¹Il¢cÓaÓ£HāŚ±>8šźäʈ ė+zŃéåcVįņńNæ‚7€E8óbcƒƒŚ¹+Dé””š‡a»šē‹õ½éĆF’y£‚ ōwčkŹ|UāMbęÖM2mBi¬„ņ1\Ŗ™×Īö<®Ž$TĀ$Bs±¾ķ~²ü(ńƒuƃ:Fā-8[žęuAŽMŻIĻŃN/–ĀęgĶ_¾ źß²÷ķ/ą?ųnŚÅbžŌ |Ł F!Ü sŒć'żÅų'ā/†¾1x+Ćæ<$›“ĖųŹčw(”ž•Ōõ…ū ęʓ«ŽxsÄvwŃ$¬Šą½'½}’įŻbŪÄzE¦„#ĘėĪŽ™¬1rčxGķš#Ÿ“ēĮoˆ’ü_kΟ«ŲŹl]ŗĮrT©ź@?õÆó§ż >ėŸ~"x×ąē‹¤eń‡Æ¤“ž"œ²ƒņ2žźWŌĀV©nėņ’‡1žÖ>Søg‹b¾UśząÕDGi•Ū×qŪc†¤^Ź÷ŗPŸQ޵FES°("µNę~X\– ąē½'ِaĄ#æ©€ņŲ‘I“pĘ>•tÄ lĪĒpꁑ²*䌄ŹüøPHaĻ„D¢§2H±·lįOŻÆPų9ńKƳ×ÅχŸ|ØI’ …©Apc’BØÖĮæx„Œ|„r¦ŽŗgśWžČµ?ƒækž ųÆį­A'‹P±®aČĢ2‚3ėœž•ļʙę UFåź¦øń4ģĶR<[ÅŽøÕt»˜‘ÜGĪÓÜzWē‹<#'†µė’9V=>ķ̑rścŒ×™%`>Oż«> ?Å_…†Æ”Wŗž™ Aw¦ZxHł[ߊžC~(x2O‡ž6Ōü"L‰3B_©ņ£é]w±}.vh„eaņµC!Qœ×£OsŽ£³eVm€Ÿŗ)6P„¼ŠŌē“Ōx„”@ ²g®zUø#O0™éĶ£q²J‚BrCųØ·#)f'Ōߚˆ»2x³¹Ąåž•x2ĢwB­³æcAÆ2Ā³÷sS #`ŃaŌ範їFzÆĀo„^;ųĆā+oųCM¹‡»Ż<$„ēc¾yÆŻ/Łßž OįŃĶ×ÅHļ®õ[‰%‚0Qmu,§œœ×—ŒÄņ«#¾”t?w~~Ī_ ’gE“_„®©į¹aQ²aŅLŽH?μļößšŽŸńĮ·2&;eŒĀņĄ›@”‘Ž:tąU­wc¹SŅęü7ćöÆń'įߊ?gŸHo~"ų>Rņ}ū»PÄ)õ$ ū żÕü#i~ßi‡tt*½ 8£‘±šŽ‘^Żģī l¬2f»ķ&åōĶÖnļ Ē<7Ņŗ‘Ē8ō3µ}~ī ł“{†^~^­ō«Vڽ¦­kE„ŽéFJ·V鐩\ęuG¤]!Fų#œóT5O‰zEŌ ŸjŠÕzÕF7ŠŽ4¬|Ūń3ćĆOé··ƍō2tݶ'nY€<{Wę'Å/ŚYń˜– \ˆm>i¢<2tĪ­vR¤hŁó-Ī”6„żAģėŽ_™˜śŅZj—­'¦~ķuņŲĀR:;KŪ—ĘNģw?įZ’M,‹ØffĪB­eRvÖxw¦®É6§{”ć„{Ē„žJex%Ė˜É\²—rö=Aü36ŽšZŽ&b_—œ×²éś%’é”ķĪ( ē„a'؜‹ž‚ęęńąX̲©ČĄēč79 e18bG5$sĘ”¦AäLß#åĄļ_-ų’ĻÅZ/Šm5=:Ž ­)…$ļü>•Ŗ‡s}ŸąJĖZ‚ŪĪ U8^:sÖ½;P“†É£k)RUĄ9„]ŒäĢkėæ>xä–4iĒ•Jś4”+"²·ņ Č‹KŁ4Ā9Ōō®’[g 6e”u“‰Ø¤l‚P3Ž1Ž ³Ž5BREĘzĶižÕ„ŖŪ—ŲÕė{ÖwĖ)V€'،ņHØ&Øłßgf@ œśPt÷²Čą*Ø*yėVīIa˜qƒAœŒėˆ„gŒØ`V“ė×BKœČ›¾n;P;»jtś‚ŲĻśŪ‘ŹśW4ø­µ¢l1źj ±æv–Ź›£;żńҲ^ö@Œ#%ր&ÓÆ’0c‘ęļM¼‚…Y1Č”Ä7ˆŠÜMcņ狇ØĻJÕŅõYne[Iäłŗ)=čÆK"ŅNŁuÅgÜóŲH¤žƒŽ€ Šn|Č&ŒH½0yĶp¾2ŠÅ³\éj«"€H^µpó6ŠŠłZēĘŽ ¶ńP]łÖ¤9ēk/®„}{į]AÆ4Kg%$$pkQT:C†‰¼Ń‡¹+łXøF*g±ƒ–¶(ÉjdŚwåö­«ē¶Ż ¬ŠÖ#GG “øŽHщō§4˜’ĄĆhČ dÖ·kr¦$r3ÕIÆųĒšgDųc W±Ėē¤ĮՐą¦cV¦ibOx2o [YXĆ)øņ€E r@õīw²$“.×{IɊL»<ˆ]X¦ß|ROj“F揭IČ~ĻHƒnõö­¼‚TņĖc©4Ļycķ €N;ŅO±ŗ•%ćļķAM–Ѷ!ņĪ ĖāGb»Ņ‚F[G²ģ\0ĄĻ¢»Xn ģ»­’QA›ƒ®µ¤˜T…+–t5Ė6yī ^Ō7>†Īķµ# i`7°\1ük Ó%xƒlo—§Ņ“R°}v˜PU—é[jØ+;m>¢ŽpV’ÅcóVLpp+žŠęÖ\$§lŠ€'ø‘aąoÓµYģćtždōśŅڊŁČßi·„•÷Į®#S‘¢Ć!ŻŁ}(¦™Æ-܏gqÅ*ń–ŃBŃHŅD^9IźZ`iͭވ×ĢĄć'®*KMzź)#’Tlõ4‘{PŌ #7­½‡§zĮŗ±7^ÖdņŌōjB0Ś7†B ‹»8Č5«nÜ«|ƃĶJ(ŅņŲH’¼§9Ēbķ$]wc<ŠfՊ//”©ģiߌvé†@ õśŠIjŚöѾ`AŚ–óUvI-ćĮ"§cĢļ5|j.BŽ8ź \{ūŪ¹ö³ ½A¢™j+…$!b±­ ÖĒIõĪh j9U[% ī4D·ÓŽ1*‚7 ξĪä\FBFHW-®ĖŖi,·6޲Ūnżąc‚£ŚŖ;– I§x˜\Ś–FBųū­Ž±"ų„æn}&ā;رPĘ2¾‡„lł“[µż³˜ņ+VxK[4Ÿ½zŠK€ÓhģA UĄćĶ.Ą¢Vł‡½*ĆžbŒŹ‡=OJ°±KopTø 2:0ØsVh6Ō+0=óŒw®™5ū:ĘBžJAŹĪkSigž.üsX‚9!ŲäS*7DS“«€¤…õ«ŗUåķ¹/m3uź+.fß3ÜJ˜nsļY_[]Č^ÕÖVRAóš@l…Y yT”u!ø®AuXęžāf[•8ĮźhM+WūNų®£™ Ž¢ŗO=LB īóA‰….•»Jƒ9ąw«qDéµc${śSęacA”v„njū¶$>~čøŠĶ4Ė&w•«o)„+IūŌõ¢ż¬ó¼ņŹØCÅÓiķX—}Ó\Ę"śŅ¢³“ ƒl€°÷éS\XNŁePäs‘@ģG«y-o2FÜ`nķ\f©ØOkęfčsŅ“ƒ*ŚŗV«ē^ŗÜN® ’¾Mw‹$”>[H‡øķZG4¶÷9Ä"鑎ؽˆ._fyȬeø_Ł®ŹvĒjåžYć¹960Č# lEØO.D›XōrŁÅ+«ŹˆĮ‡Ģ9¬ĖŸµN’F]Āž„P8³ƒøšęÓ<×R1źFFs\¼¶vń³&Õ ×éA¹Ķ\µ§œŠ¹½yĖkwVšĒ#()b’V6†Ē‡xšČź¶sBe8,3Ų×ɺƁ}§ÜÜ­Ź9RGJfŠ7>|ųį ]fĘęįą\ĒĪAöė_Ū%։Æ_iĮ$··I0xlśTÉ{V«'•ļ"–UūČFk”øŗ·œ&ɃŠWX Č^äĀ!0ø ĪxéSŪ2Īg`{§LWŸQXź§±éšM„„ś{Ķē3¶0Q‡$ūWj÷×36BŪgHłŖa2ĪfųŪł†6{€d}Ó^ĒšĒĘé¢Ī-Žkwó~]®3–?ZōhȤQō”Xõ"¹†]™!Č_åEÕĘ"dU_^•ÜĪ +M“¶Ŗ±ŪGø`īĻO­q—Ńmź²pTąTŹ!fb\Ü“œ23žMqŚ„°Ō"dŗTbŠUxó¬gc¢>Wń7„®,ī.Y­Fd$œ6כÉa-‚ض2y`mۜžÉQYźoZśFi­<¹¼Š¹o”ąV§‡uŪż:ņ;˜Q”Ćæ8©†ę’géĒĆˆ6~'Š­ōżBĀŪūN ·>fyķ^ćį’Åiv‘;õÉäWDw2’¹ō„ōųJ<™-ŠŗĘzžķśFs”91·Ē'= j™Ē4w—Ü"Ēžg­oI?ŲąifFĄé[B] 9 Ń]Zk …U‘6ćžÕ•mšŽŚāéŽ?-¶@+€¹Ŗh“‹‡ƒ×ģSYN€“ĄĒ­|’āÆk<‹,ņĻlvīłōÅsŹ™²9a9*ā7LøFõ©­4XfŗVHžFčzā¹Ü ;ø|yr™By'"¢Õžčŗ•¬óÅswöݰćę¶„P]Q-ęæąČWGžIÆ ÜķÉ®‡KńŻ[¼’NĘ5=ė©+ ČȟÄÖ77ĀՔ¬sʐ?:_µo*ÄČŲ©#4ĘĶȊā’O“c–#ŸĀ½ Ćq¤×h DÄ?æA“µĻ@m?¼žVo˜–k›Ö¼£^G$öSɧĪĆ'y,¬~Ŗ9ŠGĢń½CL—G˜ŁŽOĒ9 ¼*§–² FĮ}ÅCwbŁœ×‰tEŌm£IbY°ŁžT’œ×įÆXh—÷‰ŠĢ斯Ē9¤53Š×MYQ“~ÉG5±ias’$‡|HSėHNW'[«xēĒ “Œ1ĄĘjÄ·22mO»ß’­A&C]Ól6?¼ąkžšˆ<;ā™źš|fī1°ĄI€,Ø?­e%cźM;Į^‡I“Ž YĶi"¬ŠŁł†AæJšĻˆVŽńN•qm ––r^ÜĘG=;UóšFM³Ę^,’Ž ßM½Œ‘oHŹīē_.ü<ÓüYqćŁÆ‰oh×q…}*ĪÆi„ܓkzŒĖ„”ĮP{ÓH˜üVgŹŽ?šmņėŅEk}”§C(–'ŒņF8éŸóކ‘höó[½Ź˜n#Ī9ē²Šč§.‡{sŖxšōŃ攁”d–÷ĒŲi76:ƒ„Ü7RęPJI{Ā£œūˆģŚ –ŠŖÓE?1¼wóÆIÓŽéĶ,ĪVc؜šj±›—sVš]•żŒ’¼{gŗŃœ2×Y¤Į†<)<āAž¬—\ī#Ö©JĄ|ēāūĖ vėŁ5¼±9A']Ē×éYŚ&§®x?R·ŌlnćĆ»‰įTšr9µEÅ»ž›Øų¹ā²žņīvPFąTq ®gFń=·‰ļZ¼ŠāX ½ć¦E)-Åõ>Ś]ųN=.M;OHbaóć÷Ž}yę¾bńžŸ,Wh÷Af1œ1ö ,øC޹ė?4ŪßÜĆ„ź×F)¶łe—©”ĻN•ź>&Ō<š«U¶Ņ|O„5¹ž_*Ł'ž1ĮĻ×½>CJ‘ŅČņψ:. Ņj¾’ź@ģĮĒæZą ų™ā *ÄizÄ0Ļj\’8yŒ{·Z¤¬gcŚ| © OG»Ī.`D-æh\ō'é^O«čw ŠLypnxŹÓĮ›łģĪÆ¬„ žH®ŪāeʏāķbĆÄtOMŠ»w— ˜śœUņ£§šö« XŽŚ¬*. ŌšNxśę¾Ō¼;šę’Až[Ķ=Jīą nqū–īsQ98‘Ÿ(ųĆöušwˆ5Hµ±–Ä‘åČöķ“…=żĶrŚģš<%ö[Jׂ@ŽZĪꐎģzśf³Ž.ۚ\ö? ų’{Ė[;ūĖv»Tó|»Ķy÷ŽõŪ½2ų[¤–wu•¼gqXåī|g©iš•¤1›®AU$zUDšÅ‡īmļŚŅ=>L‡ltG<ē8ė ÆmO³|9šōæĆ[ęm+Lŗ²ˆ6ūß,oG мń_/x+ÄVŚ>±{£ŲßµŃ"H0>šÉ’ėS¾¶Ōč‰uŁŹ¤`•˜’{.9ɬ2ļ:C2y­ĄĄįÆµ £E3£Ń4KØęßu;ģ,2»s“JÄš ®§­ŚGi$1ÄWk.ī[§>ՉW.küOįkdŌo4åMĄM †,_LēÆųō«Ž ųkmāŻnĪ+›ˆlę$’Œ }0)rźc.åoŒ?³¾\Łźæa³Ōō¹äŚ'¶lżœc$0ķĘ+ēV={FœyQ38ĘĆ»§<Õ"Śü?“WÕ5;«Hķīndw± Ąš÷­;MVå“ÉfVø9ö­bˆ»1$x›ĆĶ%„7Jö|4>fJĒŽŲĒCĻzé§O łŁõ^”„x_ćG€lõ›Œ:ݬۦ`™*żņ;æäWģßüö³µÓŸÄ_²—Ž.˜°”Ķ¢3Ɇõ]§žæZŁ+]/K¾×0ŻAq,sĀČń’¤ćҽēį‹å…åŃ®dŪŻ ćĻ(„£Ō÷yüŠcø·fŠę&Œ;_Ģ?üūöQ¶)įOŪĄŗZÉ";ÅFš  #Ÿc‘ōŪXMŪŽ3gņyā-'ČŁ1PŠH`Ź8|Œ×"Ö®ź9ć"ŗ`ō8źĖ>óŽsŲ“Ld$1AÓµtĒc™ĖK·€\ž•$æ ŚąxtČe ²¢8;NJŗ§.[wcļS$!YŒA³¹źꘓ+ŚŁĶQµ2ݼķļČŁŒzÖ¾čīķ'·øMńH…#<śgō=’ū~ِ|#ų»ØžĖõW›Įŗū-ց,¶;[…įą?.īµżĄ]ŪĘmĄÉ(_™Yˆ•ž%_S­I{s' ¾dųßšśĆSÓ/<ĖO5DĄ`«)Ļ•ySVÜĄų§Fŗ6—W0Ź’č3+Ś]+§HĻ^õüļĮN’d—š·‰nüO čŒ×–’cåø…ĘH’•źS—S†¢œ©P‰‚xśUØć@üĒõ­ŒIĢįŹPzdt§—“jUa““AJVNCÜ„VF€23:äũܹXVĄ Ē©Ļ&’x]•2zŠ2DW įĻŹ: ōŸ„? ›āßÅ?ü;_®ƒ©x iŲdqĪß©éYTgE8ė©żyžĖ߱ׄžčŅi’)±ńµ¤IqČOŻÜF qė“Ōjż-µÓćÕ4Ū}^X­ÓTUņn¶ P7ė_5‰rźzō‡hŃžm32[£ĒP?ĻzŸ^šūėžŌ4»˜Ć"•mÉWķ?y»=Nå-țču_ŁSö–šoĒLl4y/SMń{p­ 6Éģ3_¾Ś­Ž™}–µ¦˜åŅ/ąŽņÖhc‘g+łÖš‘ŒŁÅŻß\iÓĘļ!dcÅL÷—7sŪīˆH3Įė„Lēqøž(‹S°±YķāD”TČ8aÜW–jž,ņÄsWµ»UūńŸ¼i©ź\b|żń/ć‡tKYo¼A© "W9,uĻ„~L|nżŗ.Ś}KIųU%½ģ¼Øø›˜@éœćŸĀŗ©HŚĒęw‹üE¬xŚž}gÄśī©«źRCåEŸī/jĆҼuāÆ]ŁŽhz”ÉŖłd˜ę9—Üņ{W«Iécž¢>ĘšoŽ“ųūkNh-®Ō„ž~ćwśsŚ»ż*ŠĢĘ\ }:֒}NsÓō_ ^jūc¶¶–7#<ŒWÆh^Óō±Ķņ›?0~‚øjČgŅ~šŒ7V±Ļ§Ā©ĒŻąW©iZY:ŹcFaĒ5ĢŁ2eoiwÓŪÉi›-Ś§¶ø¹µA§¼oæqŹŃc'+›:5…ķ„śÜScGÖ»{ĶBm>7Y£Y#~¤ŽŸ8ē–ŗÕķ§EEUAžO„%æ†mu=ÅĀ£œÄ:Ų =„š¼ĶŽC²Ÿ”€EwzF¹¦_Ī‹¼‡}MÉu?!&d«:ēīŽÕJFxČčźøī(1)ŪGĪ&_’_QĮ­ūiŁCĒ$›”Žģi 2'(EgŲ‡Æ±®^öŹx®„¶÷ŒØßĆü?ZŁ[p5bžź$BīĪźF½ŗFłpĆ<*l¬ŲuY׎ßlõ«~c_(’%ēÓł }±š/Žō5<ņ## Ē·j—ÄnģC-łd ƒź+•ÖüK>•ŻŚZKrUI1§VĄķJ1EŲŻŃ<ų|ŗ½ēŪ“ōWmŹLg²ēœ}+¾šÅŒśE„Šrƒnj¹„s­¼¾F³PŪ’Eėļ\¼¬óŅ*ćÖ³2”GĻvɐ¤N“¶źŖĢc•Jc·Óƒ*‚Nņ8Ī:Ö?‰ļļ¬J²¬ 0ąĮ©r¶†ōā|Õā?‰Ž šĘ«žJĶ`X‰B£Ūļžń•§‹4ønmŠ6óĪ=ŗ’Z9ŃÓģt;TÓrÕG?#FńøĘ8¦Īj‘±jO6H¶”QއB f šŗ€=i™?‡ģ`½škk‡E8ćw_Ā>™åM$(Š6ĻKlšLŃē žō¾}Ģx G­9Ü?ļ^ųŖŚ}ķµķĖč ;Jž¹ „q[6ńšŠ6b˲O“ŗŠcĢSfiŚ3ķW¬–DCĖæžżØ*2īe^\Ż $Žučē"ØĮ.ÉTP Į Šé`±–aŃӅµÅœĄœ²Ž¼Š7²O$kG½ZȂс,c%WØ•w<‘³XØ Z:eźŽ!ŽõyĒ’^€,‰Zßx÷ éĶs·QyīdŅ€ n˹=krĀ č N¶Žfäa•>µ‘,Ik8Šbȧ88Ī(I¼Ń.֓8ä· ƒĶŠŠD„cÕģn¤¾WŠy”\äŲWEf— I¹Ł±Ū© ČڇPD@—6¬ŲźGSWž×k5»“3 ŲįOQ@ŒµˆI 3:ž¾µ<š5šR²ģ•OÆ4(ÓéÓXL0łLöčjä‘$±I,dīS³8mGŸmnRy Ÿ'ÜT±h’C„Ųóʜē @Ų‚ WFVaŒQä"…ūžĀ‘ģtŗm¾P— ‘Ōv« $6ać`„ż}h Ām]ķ¤%c±^•‘©źZŒČŪYf²H#„AĢérŖČńŽ+Į(9 uv0YÜČ ±¤Œ9ę“„ŗÕ ØķvįYP `U@¶×SŠĪ8Ī9­“5TXIUøŠ ‡1ė\֣ÿr©żj&„¤S„,"XēŃ[Ų 4„ƒō¬†¦Y›Kb…•ŗzV{JŹ@ĻĢ? ¦ŒÉīd9b˜ķY_k‘ŁĀƒøō R.E#Ź)c^yĻ„C£A6ŻĪ#nsŚ‚9™³&žĒŗE‘VWö5®r÷pCJX uśŠR™& šÜĒū+Ķ£šÄ±ß4«q4Ī\Ū¹ŌĪĪßOš(‹$%±Ę}jģ{ŁųČĒ>†‚Kš\"–Qž/ĢÆ…”ž=ØŅ$‹0§ŌŃöEU;Ÿ~ō*Z“§o– «?,Ē·=č„p¤lĢ3Œē„^żÜØ:»8=(—PĮ +-£¶’ćSüźM?^{Dđ«60r3š sZ­åĢ÷-qF’Er×7‘ܹŽDSŠPicōŠPÖkҽJń“P=† #[ø 5©›—$)4‚Xnd^OŹzī–DKy@Yc>µ\„4kéZ¬v%CńgśTšƒé×ŅHöØ©žzcš‘ā·$Scŗ²•¼„™<ܑ“Š’².Ø<öėdŽyĢlä7検śÉ[„u<ē=+‹ÖāšŲ8Š@Tsé@RFn%‘¼ĄxŪW¼§R‡CŽ€: !Õ…Ģ|`Ļ&»Ļ&Ź[*¶×Ą<“ ƼÜ7t8ć½S›÷m³Ž™ ”—IŒ»[ŚøĘšāĖvķ!Ģ\ō Üćhę ŖśµxļÅ kwŚ[Ž[Ą†(›.źæ69©¶·7†ĒɚžŸ=“źgóódqq_|xš“Č·Ś[GerÓ«‡éę`żßŅ­ŁåžŗŲČbv’MzbÜ7Ž&+)#žy¬jDIŲ­5ŪĖ3 #dm=«ŖŃąŗ•‡ŚķĢŅ–Źķ̩ĒM6zE•ŹY3Ęźbżæį5Äų‚āź ÖB›į=<šęQ±±‘5›Ÿ1“*ČøŻÖµ”µū,-¢ŪEØą²³œ{W]&gQ@ü3ń4Śöž-ƞ;m^0Ą¹!żĮÆdµµ‚įBLLxȝæŅœø.p2{W#’°#Äxuć#½'L ­×IƒÜqĶRŌķšŹ 'Śx›VŠn×SŚYdĘ{WGmāG·"!l’Ŗąīh^`RāŌ.ŅFP–ČČčMjŗ˜Iē @gy)9#\u­/ō›ehÓ!Č4{ÄÜé+m`}:W’xÆÅ7Ś5ä–ŃßZĖą1浌;š–“-xŽCūHŽĆk`ć»ėKųNŌrC÷ŗÓåHŹLŌ}Jį÷BwK;Ö„ZtYBØĶC‘ŒāiHĖ“h1É­ė`°l T„bś˜z„2Ėø"+`į»b²6,|ųŽõ2WŠŽ ŃóXĄ`s“üŖ”Ņī^źcž‚±h®de_Aķ…¤IƒĘ:×7s£µÄ-\äąm"Ŗ1dJW%kė[uņƒæ`Ųč}ź;[»„FKĮ ˜d·ÖÖ Ēæ–ķAk8ٟ‚š•‹RŠōŻ*F­,ÓMĄN¢»ķ2ę9ŅY#i÷:Ӕ®L—S¢ūS¬R«¶WØR94Ė(ķn ^üEsŌīcČ>Z“ŗ She³“§9`{Öø_źžŌWĖylcŽU§r‚{ƾŽ¢<ųŌ¹öĆæŽj>›Ow70OI™Ęž5ęž"Š“½ Ró,aŽŹ$Ź•łIē?ιś–ģõ=CDńÅ֗a Ų_ē ø‘ņŌóYŸ,ķ‡Śŗ›ĶoƱh—āéL¹‚Ō8źi8謳3Į’|gš’ĘW6Z>£.”į‰\Čöl  =3Ēó®ĖPń)ń&¬śŗ„²I1-#…ĮoAŸj‡T”ŌĆÖu»[›ųtĖē·ŒĒuōwĆkż'LFœm²xłm!ń”@ä©O”įß¼ „č^2]ĮŠ·6×xi-ą9ElpkcĆ:„-²™ŒVr\–ĖöĻ­iby]®ĪƒQš’źöī—p 8$’xÅpš‡—KÕ.ķģĶģ  ŠØ’iOÆųR::_Ćń4MŽŅęK‹œ/”Ämƒšłgā}©®om,.5_0F«¹±ź=é4K;Ÿ†Öwzī›i ½¬Vw<±W;\ƾN(ųe}įH£{čmćž`»O˜2Tœ ž}+ž‚QwŌņH4Ūþ–7{}Ä/ßł×7®h„§‚öÖB'ŚK©~ßJ|Ś”O¤Is§:ܗv;=¾ŸJ“ŅŻj޳Ü‚$ĘqŽĘ E­sFńģ‚ĘkwĄB?.9ś×Dd}*ÕEĢÆm&0¹éŸóšIX,sVž6u½m9ž[«ø'ū£ŌÖ§Š5[‹Ÿ#Į=ĢŖ™āeč}G½iŹK”ó>›©ßKŖ;°6ĘGn޵ėšmµ­ō~EĖ€€dē½jh“!ø·ŽÕeŠó[Æ!IÉŠW£ų#Jšq¹öķkkrąy Ū8ģEs¢×|A¦ióǶo6ž°!Ēå^3Æx•/&ĒjЬä CƒĘƒHö>‡šOü ņéPų“M’ŅŪWX60yB>ąģƒōŖ1Ö`ųˆ ‚w¶¼†ŁÓk „ zŠiĖ­Īj/ ½“ŅłrIn~RqŠśÖ÷…†”•€o@pGæ½Ź'Oiö‡dDP‚G€€uśT–Ÿh×äXē8¤ ŗ)W½R•ŻA®ō9K–>ŃTɽ cŒ­oŁÉā{»›;Uh.6`n ŸZ =„Ļń¶…ć'ÄZŒPĆ Ö‘9ĢoĆ0Ŗž>µ‹ ßųŽŻä·3­®ģ12ūRęE\ś{HńP¹š§–·öW†6h¤ņį¶õ#šÆœ[Qµ»ÕÆ”Ęš %pŻÜ ĪQ4Š/Łų’īŅY4幒 0Ƴ8éÜU_x^ņŚKėVŽźŚE/¼óų}jbģQŸ YĮ©ź1é:ƒ­±d,ĄķėĒAķ^ĒŖ_Xhśi‚MŠ»IŽĆ·­j™^Gį‰ķõK–ø¶vHU²øn'„zöØkķr-īä³(@”‰ĒŻQS] Øģ}ee¤+KlbˆL§Æ§>µą÷ž&‡ÅŅ\čŗR1•%Ź®?x>ƒø8®obŗ“\įuO ź6s[Ž„{b¬Uא+2ēĀ·^%FŌѝīmĘxŹ“ŒÖ±V:#±Ÿƒ$’Go}ŹēhĮ&½wĮ6ZUÅäŽ{›[ ł4F^3ŽÄÖŹdū3sĄŸµĻ€šęæąOé’kZF ņlWO3w]»IéŠųĖYńa°ńvµ¬Ė„-¼÷ 1€É늫­Ę©£é}>×NŌ4K{įso7(OØķV“‹ŽŅyõU6Ę&'.(÷’õÖrZ˜Ō]@²Õt©¬īm¢6Ļ+ÄUd^ zŠēt…Ļā?ķi,õø¬5Ģ)²’bCwɤ£ÜĆmĖSüPńĢŚuæ‚ü@d’K<ŁŹł ²ĪAźA®Ć+o |MŅm/œŚY]ŽO#|±ü {ÖŖÜŅ6?K­µ‘āŁŁG :­©ŠĒ'Ģ‘ŲöõöÆĻÆü<¹¹ń­Ę—mž'd{Aē<…ĒįK—Q“uų5š¦Ox¦ÓXæÓ$‰S)qoqŪ0惞Żj_ŚCĄš7„ü_gā?Ų„¶ŸØB—L?"”9Ü}łĶfŒĻ›õKŸķTɑö÷Įž*šŻ}äš¶¢¶HZø,c#=Ķj™q±—5µī£’@Łƒ‚ŌS×Äs鶜:-Ģ—æh(%Lä†ōĻįśÓ-Äļļµ-G[ŠšŗŪØ*ōZĆžÕ?“m’4_°³čFŲØs0=̃évæe—äUäīéŅø;=^Ģf•z“Ї!ĒsŃ<5¦§œ²Ķ2Ęąa\fŗķĀĻm›n†Źē€ēT¶lĢ7MŌe’+O1[qä³é]|žŠŁ|½Æk)hČūŽõQW9å±Ģϧ=”KˆĄO)ńx—Ņ·MĶˆ4½B ČR{†]ØźyQŠżjœ N‹įĶ՞œļ§][“Ē„Ӏ?•l|Jšž*ŚkZ}¼o|Ł’Xy•EĶ£±ó‡Ńī­.aX-īIU*ń"śqŽøŁō‹«ōŗū ÄøÜ Æ#Šq•†7Į‰wq„e{mĢ µehö‰zZōm>ét‰ŚęžO2!²GŻükk‘zĒŚśŻ×‡bų/§ėVmŌW›Ė ł[=óųWĪ1=WM‡XÄ‘ŁŻ®q²}­Qß§ø Žš8/|KOYŁŲ¹[µFšR•W”Ļłķ_;OV]^o‹"ƒ»1± rz{ńIŹĒT‡£]i:£<ŅZ\¶“s…›ĢŽBp0`zžµMē¶µ²»CnŅŖīßöõ3.Ē’y?m½ø˜Ż¢;¼¼r~•öÅ„_”•G”«Œūˆō†ŽƒZńMż“x%8'ä ŒƒéĒóÆÓ½. b°ž{\&»d•”œ¢mŲ‰¢Yn©­QUt«›Ø$’IEū„gwø¬¦ĀłWĄZ咈|y©Į{Ą–ó2–e+¼q_QÅa9=+6“±Éx÷ĆļŖč7vyWSdp3_”öÓŚj·Śq’ žYdĄŪ·“Ž? ϐnbĆT’"ÅŲäcYÆ".ÕóWĶÜFĀ9ć½l G°|#ų›'ĆĶI”¼»x“ BP— «ĢHłyƦµm_[ųIń;Įßžæö{XÜG?ž£qف“ǶF>•Rīo©żžüųė§|}ųš»ā®—s””§'ŚdPG ų÷Ķz®·.‹}oØéŒ'–6ÜQOQéXŌŃŲÖŻ²|āč|Icߖaw2‡āwĀßümųs揃^7Ó­5/ kö2[åPvŹĖ€F{ōüB×5ZJqp}Nyē'ūTüńGģįńĖā/ģ÷ā­6Hot;¹NŸsž.ķ <ći•|{„Ż#’Ӑƶ1Åk…©ĶĪZ†Šažw`:g<šHƒÅ/Ī ī‰ŹćŠžq/pĪqŽ›* Ü˜n\ö¦A–Šźč/ī})ļˆd ø2ēŽ:Pņ:eP¾XĪ”Œl`ąaĘ=Ø.“E2®mcŪĻ;{õėZšDŃ9eć±<ŠwŅf¦•āų+_Š~"ų;T¼Ń|S¢ŽE}g,'ęVR> ćÆōœ’‚h~Ųzķū-xāmĶ«ųŽ(Ė[…\n·¹ŒpĖۜzNjń:¹uŪ4‚S$j-Ļµēŗž™o«éwS>$U&0GSé^EXىŸœ’¼7…ukdGčן-Č'ž=Ügż¾Xż”žųsćĀ-sĆśÄž ²¶’K£<¼}ć>øäŠē‹±Gń·ńĆįÕļ€<_y„‰Y“ŌžXŠˆ6,\ä{׌łhČ¢^ž•čӖ–8ŖÄt^DyiCPŹŪäl0P½8ė]Qlę+26Õgn7vhMĀąüµ`%¼Ņ;;()ĻŸó}ü{Š\AńMūŅ*Žā¬ybB\ålŠjMó“3«M_±½Ō4kŪčz™Ńuk)|č'ē„DŃÓO”ż§~Ÿ“<“Ļģńą?ˆP܉¼o¤C›®Fƒę}¼y˜<ąœŸÄöśš˜–HŽyb“¹R7Ā7½x˜Źvg„JEøtųåžÓQŹźÖ2B‰HäWØŚÜC,+vŖ¾TėómģkĮجĪȳć?Ś«į—ćojrMd!¶øÉŗ‘G¹*Ų­’ŲWĘŗŽÆš§\ųKā-bĖVÖŌ‰#Žy8®7Å:}¬:ŖÜŲ²¢ŖķĄčkTˆ+ZĖ’ĄøGSłŌ7> ‚ź),§B²=Ņ€0į'"0ør~^+“Ó5¶E“½“ņ„^7ž µ»d捧‰¼Ö^N ečŃ-ž œ‘ž“¹T:­ĢĒ2.PAčkcTń Ž‘4Vé$DmeGh$ϰ¼]V@Sqüo[ad ēaż)ĻėlĢĻ”o4ōāø¼IżØlµØA|Ē‘Ć.xĮõÅk4|> 2HÅb` éL“ÑٶųIłę‰l=wgm²“DŌw«0ÜŪ¾\Dgg­O8™­&š^Ō\nG=@ĖjYVEœūlrp“ę(aøv¬‰¤,ū@ĪMIŗ$ŠåķP@æQҵSZ’ŁS)½Iē"‹ŌXHn#Šī1׊ֵÄBå|Ķøu÷ļHy•D€ļ,¹Į Ķiy©FA@„‰|†)XĘƎMpZ¶‚°2N§txē­\em˱Ōä³ŗE…™īü¼]Ž¹&”–é(¶'“×޵Öķ˜AgMīĆ=:V Ņ…%rēŸqS' WŒö¬šl TœõĒĮ=ņ«%Ä`c¦Žk&Ą’yäHx^3ó ņėOy×óZ‰"2#`…4ŚĆŗ@|ĮņÖV™£Mi¬Mv“Iå?IąP)ģš[Ė=»Ž:ÖÖ,ßPӍ«BKņ>鬦µ: x>©šńÆ$&ń£\6ŪÖ·¼įų<)tĀŖ–Œ „TĄR{ŌŲčöh·–ß„pøĘzÕ+Ų戇Ąt'ŽkH#’£$p mSĒ5µ§Y[yČń‰ŗŸ–¬ČĶ; ¼*žĄŠ•®dYXē±  ū²ņ±uq»®iŖ© ;Č ĢHÜ«PšqPŚŁB—rMn7zuĶXŌŪn㸊£|cęM/q—W)‚Nß\ŌlĀD}²²°ū“ØŲĮø¼œŗ‰>śgÖ¤¶•žŠ¬PH;äP3Ь¤µ’T™R_ī“Lū6§4»£)4¶9ģ&Œöŗ62•zœm=ŖŠÄ‡ĻDĀžø¤3ęŅŅīį—%^qUg²1„H.X ŽŌĪ‹Qhw)…ó7±ż}ŖŖéĘ9„WA ÉühĶōXeO˜tĻZĪ6ŅŪ»FĶø‘@ĶXÆ!’Ł£(×§¹¬‰Ł^3.ąrF;P+w3!&ĻóÅMawmŗRÜń҃:†ÅÜ©|є2Ŗ1ššÅbF ,ā'Īƒ2ÄņĮX`·CĒZm¦Ÿń,€ÄŌ y•žÕ­ähܳ0=ė"īńķ\rÜ÷ō Ü’ F{·O0‡Œš z£Ėpč‹ÉĘćė@.”ąŲ,ķüÕ?1ē÷Æ:ŌģJ«*e{ƒŲÓ~C8˜¢æŽv2(xÉĒbŗŻ*[ń‰īcŚ‘2W9ķsVUŹÄU“’½*8ļįÖc3Ł\G3ądf˜¹ M•ČˆŹč|¾œåXRĢVQj˽8+ėH£2)^yr wÅuö(1$x,H©­msĮVļw©&¾y Cžzpkde"[;KłC]±“–Ējęµm~j&ÉŃ®¢ŪžPž>µD—“NŅāxeŲBʰé^”qŸŲRHĻĢ˟—µ.P±Ė¦³o’&!ĻNzŠēŽD’š“lYOj—"kŲQQCFǧZK=:9T4ŠS#­BˆIg  *o^‡¦j”®ÓB"eqĒ­Œ[»ŪŽviŌö«wŠĮ5£˜® OŒšyØUō8Y¦”;m$œSt֙ofÆ&ÉjzMøI dSŽyö5“so%“Ÿ> g”‚KVšĮ( ŻĒJ„ x'`ąņ¤PĘV™•9Ļj׌$QČÜ:óœPYo p>ĢN’aĘk{™‹ķ0aśŠĖ9BDęU ކ©Ć4ܖhŻTžĆƒ@“Ų[^Ą ‡‰Éu®Fū˰¹KyīaBN3ž(4‰—«Ķ<6åUDŖĒ×øö¬;;E—&@G׌PW1±ēŲ„1]3¦P9®.ļģ‘Ż<ö·4$ü„ŗÖŃZä\·æ,Ń‘ww#°­;µKØŅEwWO›+Ž”¤IkM™'•ŌśVÄ2Ś«”yŃ$=<ÖB%øŒ²•ēu®`i÷#•#=ŗSjŚ)ą*eq(“ėūõ.¦$D|`ūŅV{™zeš§~-³ >Ué@z|–ŗnēøUoF®oRÕāšāO!A‹<‘ÅcHĘęhö–VģGQ^iw ӄBy>ӎ­^ÓŪzšåeøėWµĘ!&0žø  ˜—1ŽHY–pžä‘Ī:PZŸræ‰ą[[Cqku>į󵞙~ąEcÉ4Eõ8›čꆱF¤IśžzÕ]i7él7/Ģ~en†“v7GČ/ѦKŪɒÜķĒC_:x«ĆKÆŲɧŻiŠĻ°1”nėM3UįÆxbēĮŗėZY „č‡°ėŸ§5ƦźŃ^\Ė+s“ڦaģĪĖO’ŚHŌĶlŽū·#ŸįķÅ{‰ÆĮmew¦Ś]*ø+8t™ī+‚©“³ā[[m[OžņĪXƒ–ĄųˆÆ6p—*Öó9†\|¹ė\rFÉ 0ē%ĄĘļfˆŖĮēĻäÖō‘”Ųļ ź:ļ…õ»g‚ō&-»wZū Ć^.:Ō (d*€p:ńÖ»éłœŅg^&KČ&@NIJŰh0Äd3[™ésœøŅFĮp|¢ŒŲuõ[DŠį†•-;™XįŻ»<`®8Ƒ¾*ųN9å“PT‘.<æ/ĢģW9äW<ąh§ÜńŁ4‘4‹&š6€Š ąōü*Õ²›€Ŗ(›9ĄÅsŚÅ¤Z„ž@ŒŪŻø;ĄąķŽ•öļģļńWT]BŪBiD1(§šą£vĒ5Qacō"Ā[ečxŸętü+Żü)ā{ią%")m9īElŽYDōx.tYc*W=«”±˜Ź…?‹§¹­ā“2=³$ 7b;օ…Ä‘2Øn†™”ΆŅā ^HäC»»ŌZŒv®˜B±J}¢9ŅTWByĄėKa„D³/”ēŠRję±•ŹŚī–,šć!{mžµęZæˆ~Źvý<6zŠ£bŃā>(ń&¶¾`Ž#8gŚ7ZŹMŪUM÷M‡\3éLÜĮ>ŠōÉęø²Ųef%Œ}k¤Ņ­­Qć–9, Ķϱg„iZŽ—ou2¶Tń†x×®h±ÄγĄėä7šŠ,śsŪY>’2.½G\Ōq%„žÄ<¬Œp:ÕĘż@KŲ"¼¢bOLöÆŌ,£·½{G’ŽXšb“±ŠĖ”éߣžl L‹Ō½éĶy~½4m•8ƒėYOp‹<Ņ;lJ©"AėŽµū.ź÷ļ!HjoŁÄT CŽõrź?%pbž½ØiĻh„žÕ"FŁłsÜWZŚ`–0 uø;séUˆóĶnŚÕgİK¹ypœƆ>4Ż^Z½ÅäIäÅ”›h>œÖĘńw6>żæU‚'’ųĪĘ \)c}kéM4ZYÜŪŪ_ĪQ_ öźX4w°Ec‘Άóõ,š <²²Ź€ņŽ•* Ą½k`‡ZµŪG&޹ʝ71oµ¹ā¼;ąC<ƒČ?Jtŗœ,£Ü[ÜÅ Źz°ę—(r˜wךĖ;”NŽę¹åŌ"[€"oŽ)掓ɱ,ž.··ŗźQŹ–ļŅF£j}GjĻMgĆŗ–ļ²j֓ó óZF=GŹk[ŚĮ.KózēŠ ƒ£œ• ÷Åhegs™æŒęHca3Ÿ½\ō—Å"I  œŽg(v,ė-õķļO1ŗnTē8į–¦Ń,tĶZ «›{…ŽEąDźrĒŚ³pHm֖÷¶ļöx¤ HäZ³ØAxџ·[±`1‘éM.c/L¹{ßjÜßÄzW·xcRy˜E,Ÿ!$Ö±Zō][ĆŚF§k Ÿ¼ė^ÆųZmJ®ė{<:#ļV–k»öīČœ\ÜL;Šy¹ēƽD‘Q‹+ź¶³Œ›AVē żkŌ'ø¶‚į‘FõՄāÆ”įŽ÷S…F9*ĶÅq×ÖKa+Ž\JųÜyĀż*=”§!{A×ī —ģĄyŃČAöļš$ó£ˆ4kĻ„Z•Č’;xąónwž;ŠO°L澏lj8Ó侄Ÿsݼ²GlĖ6ŅAęĻ ®÷ÄR-ŻŽł&,!˜±ķžkŻ–ĒŠ}oš»GƒNÓEÅä°®cź+§ń?‡ō_e^Ł–H†į²?ŗ{b±lŅ/”óļ‡ol“»‹ķS¶Ōškg+ Ņ0żį'8#ø» c_Ņ®ü>öPÅŻØi#a& mŒgѬOĪO‹:•Åż’ŚīŪ2 `tĄÆjųe¦K£ĮŖßź6Ņ$̱÷a³×8ō«qģUŃĶ.óDЬģ%¶Óm¹‰AYęcŽO°ė_|nšŖ?‹EöžC¤Ė“iøcמ8$ŃV<—A¾›NÕd³Ü²ŪĘ'ŸĘ¹ļx^Ō/škI$•‘‹FĻč;µ"9Ł…¦Ųkšd!xU†ģ1?+“ĶsŅYKqŖ›’“Ė-÷76vā®å­ĻRšĻ¼Eoś4÷mo`²ˆćĘćŽAż+éφpxWÅ­6ā‹‹QqČēØĒCר”š$bé³—‡4=GW¶»ń •Åī꒯³žIū§ÓŠäd#ų‡½q÷’ „°øiXg,Ēļ}j%)DąÆ÷õęŗĻ‡õ­W hæhīąōĻ=8 Öǧi¾–ćA7ӑö£ĄOĆ­yÖ¤ÓŪJÖŚPŻ"¶_gšp{}h&óHńOī¬×_c`yž × Xx6×[“óf¶Q))š\ČøŹĒ®xsUÓ//“„”²¶Ņ²BÜmĄĒ óšč¾ųÅŠŻ5Ń[ŸģōĪQFŽx-łRęFŠGÜŽšØæÓ “Ö4ō‚įĪŻĆvĶyž•šķ,üO¬,1: Ų¹eAī;TsjL劵ā] é(c•Q¶©Ė"ü¦¼œė;ÜĘ謗a° q‘ßśSŒīrKsŠ®uQ>œlęµ…āŁ’Ÿ0F+Č$šī±”jpxLŌ%±‘ņ6,ēœzØ<ŠQEk»­jłŚmBń®nĻ ģIćŅ«A¤ČņŠŗIŸ›4XŁ"ŪiEQn‹å,™`Ø1“޹½#Ā—ŅÅsŖ>qló1GĮēėž›ŸBŌYŸ«XO+ĒŽŲÉEąūW¢x?ķ0iŗ‰_“)&)¹Ę;Ā³d“Ćį ķSU¹Kš+„%@1õéQė~ńeݳY\y¶—1¹Ų\ń ÷ąqķDX6hųcĄš…†ū«©ˆŲĄHA!}+ŅōŲhŚ”It-ī2J‘žµKVD•ŻŒæˆš‡ˆol"[Oģö-!2dącŒWĖ^Ō¼K§xØŽĆ$R.«!RĆ䨭9G÷>»›SšāĀ[ė‹Q)ĘI#©"©O©Śé~Õõ½:vŠśL†,d7µKG”x#Ępj÷¦īqŌAd\ī‰ĻÆéłW¬źVŗ-Ö®šœHŠc,~nr>µ ¾vm^6›«żŒj%ō(ø˜|Ź9ē?Osš§ĀZƒ›½6+„nŻŽG^3Xó°ēg„xŠŽĆį­»Žā->2d€±uqėÅ}¹š?Sų7ńkįÜwžžĒR¾˜õ;Y€ó"SĘš§ø5“o¹,łśóĮŸšƒų¶āĮ§zd2:āžņĻ?Ź“ÅƒU[(®tvŪ–Ū'Ļ‚€ƒŒ{ę“O©Œ–§ŠxCÄWÖZÜz_Š$Ł2æ±8nxbk‘ųż¬[IŖAu£ĻGĶŹ\;`#÷#G­oŠ›SžĶæ5VßūP½³·Ō ƒ``ųWüė×ōæiŗĘ­öźļL¾±WUo,äņrH=«yS]sō—Ǻ׆|Oh'Ó¦¶ŗaT€Ē€GÄkņŪćy›Ć~'ku氕ńi7mĪyķÓé\s€“1¼3ąÖÖō Jž|Ų¢!ŻćäØ>ßį^_ØxV;»·f„Īė•Į1õ¬|ŠŒŒŁt«;6·ņTż­rYJ ø®#ĘV[M›XG N#Ér3–ĻqH®s©Šu 4ųŹ K•$9ĪCéVm'Õ4kų'¼Ž¦OĢsdåqŠs_ÅRŪź3-¹ņn]~rČsøßõ®WþŅ_QŽĖ”H™š Ē;3ŪéNÅØXöĶ{@ø±ŗ±’ĒQBŠyjZ$AŽ1ōjÖ¹āskeg-ÜK{ø*äĮF8#Ņä‹Ž Ņo“‹ +V·UžĘįŽŽ]qÓüõÆ-ń=’ˆ­įK“:„ÆĀ¦Ü=Ī;Vš19=C^Ö¬ķÖŽāį\–n0 cŠö’ép2Śt,źĖ½›OqVģB—sCQt¶ŗ·Śėk6 ±ėŪč> šÖ­£ųrŪ͘7xZOxĘźžŚŅ ®|±Ž„»^”łĢļ­Phņ]w¶ć‚;RĶ/œVF8b9⬸ ¢CGĄ6GįŽ¾›ų;ń Öę8< ā+—[I˘Śćę_O™±ŠŅŚ0gģ·üæöƒ›ą‡Ä~Ķ>2ń!o‡>"’JŠži· ;’Üʙą.pq_Ѿ–öZ”Öņ]ŲHĪ0ÜVSSßžų…4ėó¦Lى†žĘ¾³·)"Cq•pQ\ŅZÜĘQ?ŸÆų/Ÿģdß~hµ·ĆŻ&Łü]” ±ń†^["yrG?)Ļ^ĘæŒkO’%‚KYĶņ ‘Iä{gÖ¹šRQœ©„³æß’ūžF">»{˜ŲmlēčjØr»~qĻ"½Šo”Ķ%fN¹ČFn}*¤ß+Q‘ž}«C)D„+Ž­ŽžĆ ¼ļōéAęK# 8¤ŲŹ°Żžø ø¢{H”wØ>j䎂“ yžāƒŖ›.ZČ(Į÷”ÆŁų!ļķ›’ ³ūV'ĮŸź`|.ńŌØĻĪV;Kœaø©v:Ńż’,ńÜŲ2ó-³/™nßßCČ"ø­CĖ`$P«Ę+Ģ®µ.Ś ńJ·Õ“ĶVĘ[xe·ŗˆ”Vž{×ęŚų,/o-ÖH”Ōģ&1Måzr=®4µ±=ē‡ž ”šŹ xęé?d¹ŠµRŅŖFĻ%}3Ķ~5ÜGki+ˆ7ņģś×m#ž²1Ł•Xį°¤ō4Žv°Üy®člpIj VF\g“ŪµiEdņĆŗ2vśUExÜ1sŅ¢IL¶ā`{Š‹G'ĢĒ=jä0 ‡o҃H>„Š 2±ۜU“ł” åļ‘Ö¦[”ĻÓ’ų%7ķ?{ū;~Šś/„5½rīóĄ~*˜ióĮ3‘LÜ!øžFæ°­I,„ŗŠī‰6L~Ńe3ō•Ż ūńųם‹†—= gu„[CrŸiwTŗ‹*ࢺßiwWz2J‚ģ é8'č+ē+CS„;5­#OÖ4ūķ:łķ¦‰¢•;tįæĶ~8xßÅ~'ż‘~5é?ü4æŚZ]ĻŲõūebՓĘ:Ø ŌDčJś«ÓüHš’ÄO h’| qasąĶZĶ.āx¤a$|ŹĆÕŪ‡äŒzÕĘ,“6 Y…ÄšI iƒņßzŖĢŃ]Ļ"ŗżī„Š\ŻgѬZ¼°Q^_­Ś¶šŹ%‘äBIVĮü„ DźZc¶–ĮõĪÜ6ŸS]M«jW0‹č%Ž\`ēŸÖ€e­ ĪźÖyĢ·sMnĒī8{ ź– ęM€?0čh0e÷±µ–4ky]Œ•ØF™"像¼Š+ʱŖ‡ŒŁŖÅž¢†qlÅwtśŠƒéęiĄ›ŲzՀ“4‘łń~ń=G+ųÕAjT|Qqmj‰Ä0ā ±ń­Œ‹4aĘ3ŠÖÖ®#Ō„pŒóéÖ²®lg†@Œ„©=GJ‡L ‘u,6-:įFAÆ#×qŠ=˜ÜY&£w[•Ž)āĻļqķWRU·ń‡ ŲŗjčI­£j†% `=c]¶•«$Ā[y#Fb;ŅC&µ…ęc ŽqO–só£+žA ¢Ž½¢ZŚ¢µ­āÜ# rTżŅ{įm­/có"ü苇¶)šr#^×Ć\0hcŒ°łŽx®ÓF“‚ŻÄw µ3Ūµlč.ā‰ˆłQÓÜVUå“€+(,€ć§jB9]@“JȬqYšr¹vŠe0ėŠKė$xēBĖ•:ׇÜhvÖšėŻŁX(28ó6ŒgÜŠ«XŲ<ŽXHö”­{M,„Śyƒh<}(ŗ‚$µ@¬xĒ Š»ńUńå=s֓‰q•“3ī!,ŹÖõōŖÖöAVPW‚qLÆhh_iæghę†dhŪұn¤q£č½ūƒA›e»;1|«6įŌz×BÉc ƒqD8õ FAŁ4źw£¬\Ū ó†ĻC@“™ŹÖž˜mV6–WŒsŠ÷  ņœ˜Bķ>•š—ņŪ\¬ŠQķ@ļµ¹ČĆ.?:ŽŹņ ¼~t–„[éc}́¹ZēīīäŠ$-Ąķš 9Ču‰Žą­ĀžzW čŠ$«ęH¤SŚ€4.lbŽe”\ŒVͦµö/™nCV¢&§sm¬Čą'“09ČčiÖB{eŁ;/M‡½H5Š•„†gbźb—ć­W[‰a™NÕtČǵ#ćPGŪ„>gčjõē•s .šĒøu Cl-c“BŻ<×7«Äöóć/ø øČĀø¾¶¶Ģ‡ļć+$ź))+Š{•=h49ķ^yĀy«u(:Riģ×J­n:PLŃÖŚĀā&óʧ¬lĖó˜p #UĢ N@­Ųn$¶Fƒn9¹.c,WkŽēØÆ)ńFµ=–厄$ń»­Tcr”»Œšž«+äx¶ l`×»ųgĘ¢ā;wDNxČÅ_³5=^Õ¢ŸNQ”$yŠ:Jģ ÜsŽi{2X·Ś6Ėqwŗ“g®z䤶ņĖIccéIA‘ĢĢ-KD}m} @Ź@܈zTv¾ øŅÉŗ“&En¤7„W!JGw§ÉZ½µÖß7ż”\Åփ ĪӥɆĄėõØjĀS0®t{Xg2©Ć±#Œā•­^Ń–ā ™;•= $je]źX'+zb¹éõMJŅķ]‘üœ€8ČlÖéāP²¾yb›llnõSS‚e7(%Čē4c›»hįc; v­ūK›å‡bÜJéčOJWņ«¦@O~E_²UIc;IRyö¢żŒdµ:6(Ń4D$¹éź)‰Ā6«ŽŽ•1D™W‘ØbČOŅŖŚE°³HŹŹjģn–Ž`įd‡jÅøY£†@€ōéšÅōhcŚČĮĢ—Ō60Nr*mCģW8š[{…“1Ä:„¬’Ÿ.@U»[±DĪm„ÅķY“W)—®XÅuģœŹžłÆ<ŗš…‰I7B#ŻĪģō4‹ŒŗāMꏟę8®Dߌ©9®JKŗŁo r€ņiIFV9m[ƶ‚Śā)`W qČ5ņOŒō7Ņ/Żķ£h€¤ź+>khuAžńkįŒ)Ņ»¦¤–ś“•l!*Éź~˜š“3O¦\Éau*K,M‡*_‰Jč×C°²ŌCŠO•^'Šļ4MeäVŠwŌeW³}+’©²5ģõ‰¦¶¹ %Ŭ”Ų.įĻ^æCXPź÷bņOķÆ†Ś„ƒóg޹fĄé2÷8S ŁžŻk9m.‹H^…FB±P—S7TGŌeŪ›v/Ėæė?õēŅu;x®Ż[67öĮō®ŹrčsĪ>Ÿ‹S“ŹÉa*0ĪßīŌÉ5½ĢĮŚNy]qŲĀZ[X»½¹Ÿ‘Āž¤ŌqYĮmr©xYįc³ sšbS*ėZ%“ [6iĪąGŻÆńo‚eÕģnlÖEFxĪ #’ÆYŹ:škŚ6­įķJ{Kˆ Vń†>¼ö¬½2ļī¦prppsłW<£ŌÖ”³{¦Ē§ĆĆņĪöšŪüĒDĒ­Ŗi¶šŒ*<GU8Ȥåa9”tŲ®m¶ŹŖÜdsJī#¶ūLj¤·ĶŌzŃ̌\É¢…m˜nNƒ NsK½#ķƒŌŌJ]s†Š<ņ™w’Ļ29›©E%‚+_/9¬Ź2“ĶB=@4RÄT““‘Åu1ź1(†M¾W^”²öe äš}Eg=ˆœD­R‹*,ᵫkĶ2G‘­åxW®ä$5yÖ”¤k„ōG{'€F{~u±³>’šŌńę†ā+‚qާ¼ŗ.vŠōĶ Šͦ™–ą˜ŒƒŠ”6’«$ŠįŻ:ʉ±RhŃy„‘‰ˆŒ]–mkc“Ū†V8$Y©w:hµŠń<č¢Ä:ę»u½*{0¾Z3Œ÷?Zkø¹O7掎Ža$l”Ŗä`UĶ?Äf¼R”¼±Ž*£+#Ōl|X·Rc$˜ĄūµÄųSžęå‘ĢŪ ‚0+Ndf÷8‰Ł$ß½¶ž¼ ę im+K‚ū˜ž{Ör•͐·ZŒ?,C…#”<\޶m§ˆåP2£Ó”Ń“QāŚ®†ŽĶqhŅ“lŪpĶȬ«Ė ѽݹǣ/o\Ö|„õŒZź‘ˆlćņSŒc ׿h:Q’y¤įd`t>•P1–ē .: XĻžąÆ=©a:¢E"²°89­"ēó^tķkWŠ GKŒŻČŖT"7ŹŽ¹½yÖ­ć/ųC[¶{M2āIžBvØł°F$ā¾ŽQ±ćR…ϱ>|U‡ZŠn4¹-ķžę&Žį€ļƒß„}£Žč×zŽ•~æŚl¤][7X†x>żkžP:#&|iµ:Š-üC§\Ēö9JĆ,jÅsŌūó?čŅÉ£}ÆO¼ƒķLFĄ†äƒQϐ|m§\ßĻ2J&…Į2·P+¢š}üöz|:\o„S¼į²~•ŠkĖ„ø|ā=J]ŌĢ'¹XÓh%³cXZž»¹sA+ŻFÅ ä R‰óž«¢j·>:±ŅįÓīmļYńĆW¹ż+čmĀ:ž˜×^ŵ A…u䞘 Ņå9Ś<ÆÄŚ“ŒÖH¼Ŗ?Õ1ē$zW‘é¾ ŠōķEe×ōł!¶ģ`£ę÷¦R»=`Ń®®­uŗżĄ—€N{ƒ]ĢzH g©ŪČŠ]G™˜ķōZ }O!ń_ŠüWoā(/a¾-0|Ō>a/Ó5ši>Ś®4 øIĘy>¼Š—.¬VƒĄ—:KzØ#hdž|2‚}:ŅĻŖ$¬Ń Ųķgr9=łō”FĮ„ō>„ųfÖ:;Ķy›™ķš4™·»vyĒįś×„_ŲŁjŃH¶ŒšKĄxéVcRéÜń/ŒßnõO C{5›Iuo0Mł£<šO|׊hŽÕü7¦ŻjPˆ^ٲ²*Øąć’G_ʛ—C¦›Lā[ā>±kŖ[H·źŽ8€a†3éł×ÆĒ>‰ć-/L¹"ŽŚE/$e hŪż”Hčiyu ÅoØZ]£EØhA+ uĒnõ[H‹L°2Ä lÜ’@P”®e&fxĪ–Ł"Éwærlą(õ®WMŌ Ń [„*Ė€ž„ūT¹cÜžüÓ~"Ļs¤ÜjQ鷒#5¼ģžÄöØ-4żSį‰.<;¬Ž$¬—LS$cŽ£ŒC•ō #éOünń/¬ÓO¼‹ūdh®.H8ė\GŽü'”xļ^ƒPŠŚ-=¦d>b.{śš„%Ō,y­żÆ†u#cǟ`ˆ@ėž9gÄŗ<įį³–—EwŒŒ«­W22o]  źmbZ“īĆĖŅ›sā).õ–óķ£6². CÄ˜éŠbęgg&æ§%ī—¦‹Iæ{…Xćc¹ÉÆJš÷Ć=TŌef¶f„ÜØ ķYĖ@ęfæÄß ŁŁųjx“Č"žx‚ģI‡ŻõĮ¾nŸÄSéŗ[ŁØŒ>2b3õ¬ŹƒŌ„ąæ½ę±m5ݜģ Q—pĒaĻį_anų_EӒāÖŽ$Žuł—20ģķZ{3TČī~!ŪxšÕmōęŠ ˆFŒ2śg޼s^Ņ|Aq%äņĮ²•n¹īM6¾ x§Z“š¤¤įāå•ä?('“_&Śj𦦺‹ŗGk$NTŪ¦;Öv&Q=³Ćzȅח29ws]ÓŻŚx†Éģ¬VO¶™Wc gŸŹ“…ČŒH'šÕüPC°;JrĮ¶r? ±©čśŽ„GS“š8ŹT’W×éZ3e”±šž +ʓʓ’Ņ!„óĄü z®ųOÕāšeݤbŽYwJüʽ2GaYr3U.‡]ńkĮ¼! ŁųƒĆڵ‘’`„ķäq¼7|ś łĘŪā€4ŻwI³FµŅå•ĀM#¹=Hō$¶-Ńś įĻŁCZ×`šĒ|skā- ü‡—ČhŚoojÉż¢tk_‡Im§ų‰ōŲ/£+µ—néŽI„®Ęn'ÉWZ¦—«iš—Ųdhē‡å‘‘Ļ®>•óöµa-ž¬š£µÓ’Cō®˜«1•æŠuk½=4·KYģ™ o|ńgœ ē,~ǧ_+J#IŽJœ¶„X.¹ā­Eģ.dyŁÓ„ m^`8Æ:ҼM=儊ģtŽQ†ŗÆ¶)=€ōxoE³µšćģo܎]Õ21Åt2izž£Źi¢ßĻ ˆ‹“±AéøÖsśŽ¹āoiŻŻÄg1 ób‰2N;sZ’>=[ėī4Č ?Ś|f)Ī!ąü½3WN Œś”¾éßžų¦+£enE¾ ’DĖÄÄöļ_›æō½GįGʼn¬5¾ÓšöŖŠ#Ÿåw^œō«ŽŽČØ£ķ]\Mā+“–h‰»Īå ą·×Ö¹’ii>UĢsyAƒŽ?‰²eē”ų›EŌŅīŅöĘÕÆL¹Ø,‹Čąq_3|^›Q±×”±[žĶpŪĶå39Ęć{“™'†¼Eiy¤I¦™,ęyC B¶²>\Ž™é^Ł©xā­”Ōü?p“JѤw1ÜmP8`N;WG“-Į¦’­¼ge£ŚŚźfQDHl†ļwé_.~ŅWŗg‰’f·ŽKX$»}÷!øłqųTÉŻ™:hĢųmńĮ|ęZͦĶwe,{Fšv(ڱ|SńU·tŪĶŹ .„”–„°ƒėķĶfą®/fzü+Ķ{W‚ vŚĘalė“¶3±sÉ9Æ%ń—‡Ķ³Jļ„żŃųTJ6¦G½»¤Ö‰:ŗŒASź*ø%pźnZ+W#`vū¦¤øĘĒqik ®Āņ=—Xd#–5SN²Šµk© š%ø‘pO®E‹ G=¤’Cv’=²°Ś«jäµ-Ö}`ĶÉwæĖĆų4…-dŅ“ķjóĆ4Ė8ņŽĀĪ:ņ?*«c%Õꘌ\ö–²Z!Ēž÷ZIō0hÅńOĀ1Ŗi Ŗi׫لBAļŒ×ҧš¦µ.‡§ĖašŅ,æŹ:6:śŠÖ2īL¢x/Ä/éW7—6šŻ$'vcĖckOʽēĀŽ.ŌüqąHōwœÜGh€»£|ńöČüėR^ƒu3}ŖxbāŹ(nŽÜ3²¬ycīV¾|—WÓö“Ze¤V×Ńq+§ŽnxČ=*%ø”ŸBžŸā{»Ū£cØy…[$KŽ˜ģ}ĶzŖėžŠ|4×;Ė-gī¬ŃøŪ1ĻFJ‡e”¤bīx]ž¶š…ó-„›¹Éõ¤Õ¼Iub¬ö·a¢tņĪ0IśŌęó\źZ¤™bp 2*Į±’ܤ¬»•‡ā+“GL#ŠŃQo¢"ČģɐŲū§ŅŸic%ÕäVc!XœcĒRµŽˆĒ¢;ōš7›lŪ/ūGƒ\Ԛ%Ī!†ģ1r~SEg_B3Ŗšn½qįĻi>!ЦŪ}¢ĶƒµćĻLWévƒ|𵤑ʳ¼Š‚pžÕßN­ÕĢåŌdš–©e£¦µ=„Ävró˜į«ÓµøšGž&Šwö§;H=äjKč‡F®„āTÕęK@Ž`EĖ ēo½E§J³_ĮnŻ22G#éRŃ5)Ų½āhaÜK¹ wƂimIģģµa™öČyXå™čįHåžēĒC0%‹1łW¬‰®ö‡EiL#+-"bńØ>•}w3Ębž{wVÜ+±—Cźo†¾<]B ˜]Zų×JŗŽļOŗWĘœŒ¼‘_ŁģWńžĖöųįefŠėĒŚ|-Q%ų{VSVGB}£EÄśmĀ3™£’&ćk쯇Ž+‡^Ńā‘&ódQ“äóšå“ź&»Ę©įŻā…üQšėÅPE}įŻjĪ[ā‘A_Jō?\~Užu_·'ģ±ā_Ł#ö€ųšSÄöwöö°Ž æß˜/,Ė/?ŽtĀ¹^Z±ķ+Æ;īæ ˜N]ƒ®Ö <é¼°¬®HĒCŠęå>V,gŒŠō£.§%Iuždo™x4“Z30•&Ąī÷¾µŠŒ¹Šņ*ģ*”I÷Ø$eP ©e9 Žv]Ō!bG­X}«'”¬¼ ph+ ‰žĪKFG'÷¤0*Ķ€6ć§ćA¼$M«ĪÅWÕĖėy™¬µM2śėLÖģn,īamÆ© ?QAŁ t?ŠĒž ūlZžŚ²…õ;ż^-Cāo…āQÆDĻūĆ$`äuälŸö«ōæZ’!øŹVėķ\ø˜jtĘ6>qńOt=-o­õ™ %2c™HĀ‘Ó5łūUüPšĒƒ5KļŠž æŠ.5i c©i3Ü(Žą(?0ėüæ,sF•ĀTĻę7öØż§äųÕ©]ŪĆj,“ČīXą,JÄŁä ģ8ė_y‰#$åœž9®Źt¬rÕ] KŸ!„xł†xͬn]yÉ?•n‘ēŌEŲ­–!~§5±öˆ€=?Z Ģ©ēY¤%[”“ÓœŠOŗ0ŖŖūXą{Uˆ`*» ōSփJešTŃ@ż*Ä2—`r$9 ė¤É'A¾Śö'ž ĖIEÄ- ”taŠ«v"æ²ļų&—ķKķ/ū:čz5ƹż”ńĀāŪP¾÷øŒ/ws…aZƒ]Žźlż#Ņ5ݾ±»ŗŽFÓ§u†}££1ĻoOĘ»uÓģīõu6¬mµ(’&^¬½Ę}+å±1:“¹×j2˜M*)ĘŲ×Äߓπķ|I£ÜŻ5±£hfSVT ą·ē^l„c¾Š?ļ i1Ō“o \Hf“±ó™‘`fūŃt*~•ä:%õ¼gT–{VōŽĻu)’G÷É®yāžĒŠįØE«œ±»žėĢČ>j€MOo$ņmū;Č»ˆĪ9÷¢[4­JĖA·¦tܲ&É@=ėæ¹+1U=æ½z“ąā‘Į__>^;dO;z®ēč2q_„?³•®…¢^Ol¶pĻ,~\‘ȹiGæ½8ly5Y÷ŸĆŻ3ūR%¶ÜIqÖ½@[Žé’¼&Gtb2¤ræJmŲēlõ? A$Īł°V8ĶvŅiw6’¬3£†øŖ[˜Ī©µ}6ü$‘Ur9®BĻĘöžŌÆ4ūŻ:{ķ-‹`ß2“žœv®˜ĘäJ]­Ķ¾©+]Y,Ŗy ¬0k™ƒÄŽN“tĖ‹K±ƒąp½W³2:WS¹µŪ*0+żÖčErŗŸ‰4›½:ā­;‚2æ7Ņå4iŪS„š¶»§ÅØHØ`Ųd5ķśnµʲ&tĮéK•™“#8œ‰6ķ'Ø*ģ¶I2­ČĘxć½+é×O¶12Į7ŹFG=+5³hl…Ļ”¤ØZ+¤@8÷ƒ&‰qm©}®9ā-œģį¹PrEØ Ō Äņ@ÜIÓäÓ@WŌī…¬l²0Ś{W‘@“Kwj”XŸŸf“öƒ7lnJŸ1cē9®ŠÖżēf2:³žō”ūoū?ū^;ˆ‘ü¦×Ā’mµÆųžL ynĪTłjFÜśėUĪŅ3擵 „·¼ÓĮVęLž†½ēĮž^”gotŁ‚éFdOzNacŅŪN‚ś|¹qŌ’*ƓC™A.Š 甬ٌ–„ģīmŻJ¶ßØā·l|į ’6 żé^’źź†!ö‚=8ŖźS‹©Pŝ0(_}®[˜Å»Éå1ɰ„Ö4Vö¤;š62Ż«„…w©?•j—‘.#Y>TĒ8 F’°ŠDłüÄĪ*ķę­j-L Šs@k|ņĖ3É vĶX²šEFI7>øäPw,ļ"eDŲļŚ¹‰ōIe™‹/–Źs:Š&vš/*¶ģŖ{Žk`Ų˜ģx"€FŒš<(%םerLač7Ś[WŒōęŸ+ŗ p>B0h/ūQaŹ9.£„_Ń„¶Õ]ćIĄ>ŌŅŪiƤŻ…āĪVBīy㠳޵|¶3r9ę»xŸęR¦¬.”¹FzÖf‰•„šYT°ēT`ę+8Ģ<ēž”Æ¶—o–ŪžŖoģų—x#rõķ@µńHn7`täō¬=Bę[hŽh‰fģ9M#ĒĖ­™,ē²{I¢r„’{ń«—7~P$+Ś›Zč2݆‡«źh'“€±Ż«øŅ×R²C Ü$ģą`SP  ›¶ \€WÖØj–Ń Ś?ħ‘WŹ"½•„ޜ7]bUõ#šqŌ·Ģ9ƒŽ;Ä]M½žEoŸ<š ˜m“ĶłIéš œ&iH&]Šz6kµ–Ź£P—¶ŚM”Ž!n‚ā9„n9µÅjzĢӉ#‘>~Fļ_z ‹<Ś’P–ĪBó€ń“Ōv¤kEŌDwv—Į2wSĮāƒR;éÆ!†Ū,_Ä3ĶM§L–˜ø€läC@~,“Ō§–Ī$wŪNT€ĒŚ»{;¼ƒ,ŠB· Õ8ö!Ó+įL„6üśUIõŠfŒ‰—ŽGZFmKzԁµĒ_zóÆ£K–BJĄŠvwrIjBƒĪד]ꈮˆ’\®ńąÖ±—sE#Õm5ŽóGō¬ćŗIĆÄ:ž•@äjIuØEnc…ŸaĘįŲÕd¶ób%¶ØėA‘J{5D>Zķ#œŠ–Ńī”$`3¦GZźp¹&UMŽ:œu®fyŁFšĒ=½c'q£RŌᓁžāveēmbK­ļ¶1±C?{ŅF’v2%V˜ƒOzŻÓU1Ą WŪ­j¤G3:(įBƒĖʰ¤øip±Ėõ?ÅėD#.ƒį“¶ŹJUH÷Ź¤AņüeqŻ9IäœVY’ī’UUņĮü©ĘV1l,ļ/gTŻŪŠÉw4,pRL`äpkHŹā36\\Ӓˆx5¬^=¬LH7œ…ĮéT   ~+ł^żŽtw$sņŖę½Y€$r}ŗÓe6aź$²M¼ž1ÖøaݤģĪKŞ9ū“‰:h'·`ˆfŚģ3éŠģķYbŠ5‡ć®)s :$V!ā&\~•ŸÆé «…³øŹ’6ļFĮł¬•€Ü·š­®Ÿ„ ®åFfÉ®Nį@.¹Ī3Z !‚O³:·_­RŌ¦3±(>\Ń̀ΉØlŽX’=kBŪTŠ&Rņ˜ĪG„dŲİ͉ķnH³ČĶS¼gBÆŗEeó5”<.ˆö”…¬Ėž”q­aßXMi8ŲØöž“6''±EžU’=qұZÖBēĪRAėžŌ‰g”i¶÷ĖvÄr¹[‘Z×¶ZrĪ­€©ĻŻķWĢ]»ĉ3 ³®=+4Fe,ąO\Ԛr¢5¶œČP¹D>õI=œĘ7pŲ8ėÅ\eьŃXžŅŃŖŻIo&zƒ}mK¦][²9q:ć<•|ČĪeˆēĢ,»Ao\ō¬ |³pÉ%G'ÜV,Ģåuę`Å,Ū͇=Ač*=2͌-ó®ńėŌÕFVČk6ZŸ•:£2ž öx>]@ĖåŽū? »×š­¢ĒŹĻJk4·‘§±øhåć* r ŗńē•#ÜFe»ļ[]$oxgGgkŒÅ“ß©Æ[ŽÓ÷H±³;ÓĻ-ˆ”Œ«Ė–I£1½eK§Ü“ n»%‹©ć‘Xy–æ éQFó\²ł’Ł>õäwö6É3KfęUėš Ś,åu4‰cq(ĪžHóĒŽü+öŁī0 ²ą†ééRātBGĪ7—wŚD·d!óƒØe=| ń‡ĆSZjØYŪ¬V3oĒHĪz’:žCxČņ­2[xĖĮ"ģø:¶ģ ź“«‰šāVf'īž˜®:±-3Ó-wOµwʏļĘćéZöÅ8X®- LpŻ+…£s¦‹NŠÜ)·(ä|Äœ{VŽ¤nģ¾Ē-“IŽ üOz"ģ(—Mtx­’āÜ™8o­s֚āݬØĘŁA$ŽĀ»©3§Ó>Õ”oRj0ż £ ėÓė]£ź¤G8ž,×|v8'¹wOµŠźį ̰wÜG½4vŹ ĢļĖ‘Ž™ Ķį• &Nj“6I0PŒĶ üwTJ=J‹ģ|ėń«ĄkZv§}nOæ æfߙȼĘ+ęk/ C„ˆ®­ę) ©-äśÖ·SŖš,ź0Ū“¬ēRŲätł»ń\Tö,Ū„īDx󂵫”Õ”õ7ģķńYüŖ[č2Ī×Z}Ę÷ŒÉ61ģ?<×é7†õMRźļOæū@[WRų ÷dŌ‰öoĆnóTˆĀņ“ĪģŠĻņÆq“¼W}±ÓæzŅ2īyÕ"u֓y»c+†f“-ōĆē3²#ÓéVa(Ų–{kpČ 7Ó-ͽµµ¹b·g” Ģād–8¤2A™ČĮx«ÅQ0ņ••÷E\7ˆ³ńIµRg²ŽµĶkž&:ƒ8ŽŲ« cE&Ķ ¬pņŻÉ4eŠČ¬¼|Ć„s÷Z—BŅ 9+źk)”p׫k-Š–Õšx%}*oķ Ø “slĮ¬Ņ*(ҳń=¼÷֚߯C Ņ€1Ąc_@xję(-Džio›<ŠÖVz>Ÿ­ZN "xŚć#ƒÖµ„Q$L#eėÉ«h“ž×>ڶ’-¬ņ|Ŗ~†¾Ō>ŁŒó(’IĻZFŠG=$ßhwˆ’¤äqҲ­t«ødg†ķÖ Ü«Ū½³YĢ£U‹Īā xf?Ņ·tż>ĀT)¼¤ć×ҳ&R/Gi’.FßŪu>āŅ;7@޳CĮʜÓ3r²D%‹÷gƾńZ›YŚ×tó[¤fä¶8;Ę1ep=¹5œšt—Ņ2y`ņƍ“’5®t«Čį;XmŪ€½\ė?“ Y‹c86XdecœĆ8«ŒH”ŗø†ŅK¦0ķ“'jzb‘¬ä±œN ^NEh:r:ø/¬µ&ēJ½¶“™ŻŃŹŽ õƍüwš«VŅõho4i!E,w‡ønĖĻN“i\½įżC^Ńé%½g7µŅ&«+ī¹gd$eWҧ8—£ŌŽa rČŖĖļÉ­¦æA“NĄԚĪNę"ÄĪ“#© ĪßļRK¬„„HcŁ·øē5%Eźd\ėĶ4”K ,9Ļ< įÖ9˜mėƒA¢īHVv„f1ꠒä[LņHÉĻPL“:]"ó„•ÜyŅOw$ČRWYÉ9%±šlĢĄ’Åćfs8#®SRbŃ0R#`H^;Ņ5¦r×I'É#€ĆæµTµšņj÷ė ] |æ3aiP؃SšŠ[8…ĪV&ąöČō¬y“ę“@J“ūūĄp}(eɔ­ü:kČķREĘH@ ®×M³X‘)Tąx ŌrźsNG Y„Œn²#ȍĘZ֛MūB†ßóu ׎ŖĒ=śɟƋÆYų³MŌÕnæ³ 6 ä^sĘ;ńĪ½Ó⯇ÓÅQÅ{gRÉ ½°Pye=C_G&y“ź_£“BŽÕĖZ³¶Ąs€§Öŗ½7ĒzŸ„µØnķnŻ’Wé!Ü®ōć„AŪt§ÅPx™µ ö’j2³09ŸO„|™ć?ˆ:ž„.•öIģĢRÄŹUX{\¦–(\Ķ«¦G(G¶»čźĢļqķW|#įŁĶŅÉę«JźH暦)JĒ“XjŽ.Ńk;ķÖĪGÜXꮹ{]ƍSķ^)˜x‚yмƒĢ]£<ąqĘz}h3“:߈ZŽ•ØųāĻXӜA}m䯖®ƒŒōĻJīž1ųétk­,1N’<.ķoĀå€é댚 >§™i^•āėkj`‰y,ˆĢÄ ųö®_āæĆ3O¶“Ō"†+Ūf›‚ŚOPĄt ly®‘f¶–k”\„RĄ/ oj»„ź:ä֏ąŗ/æÓ„3KßŲž a¹¼·…Qģ;ćr’žÕģž¼“Ń“é­ćh ø\ŗ`c$Žy¤e(½ŽwÄŗķĶō_½l\…Ū‘Üzšņū†}Vqm=ŗ2¼ƒĆćõķ@ąś–Ÿ¬/‡ IZK‹[Yf Ūæ¼ßŹ»m+ā­ü:›[;_ģ8Xēdač}(4±ŽŽų«RÕ,VŚxķŽŅFÉbē8ķėX—6v‰¦jK42yĄńīVĄÉ“ É'éž0ź’i"‹kE“÷s¾JćÆŽük郞³]v(™/ŚfUø_3<9“v™č_> ėbśÓPŅ£“ū䫌8ä’?­|ŁāŻū[D’·|į›cs&ÄžĻ:ž"ŻO,—qŖŗry?•yčŅ.-ZHŅŻ¤øN1ūŲŖ‚čĒĻSŠ|uuįmå³v²ŗXönHł898ļž+ŸOˆoķęŌÖiēRĻø'-Ÿļµ§*6Gø4Z$Ś~‘«µŗZKˆ€[,ŁīsWīęM>W²g7ppW€š>kÕõJmx¾„q$X8^qŌš3ėÅ}ąxķ5ÄtÕ.Ī#µŲ’AY·c%–5_ [^M5ŗ]Ę%\ĮĘį\²čw:> źk~<¶<śÓö‡e<4\.÷.ėĖ“–žT–Ņ] `żÓ^ĻįXųsK]GW‘mą1ķóƒī3Z­Lž˜~.ų­£k?k““1ĖØŖšsėķŽ¾nŗ²žóXū<1˜ŲJ°?w<óG*'’ĒyØč–>Ó­/ģŁ’zœĘÜqŪńŖFŗu2°¤Œ%Ük7ATO6‡°xJšŻœ7Śčkļķ‚ß81ŗŽäf¹+żgCÖµIōŪ°C£üĄœČ+śžTšč9E½”|įĶÄ:Lśštö¬‡i=8ļĶx®©š_IÓ§ŗ‹O¶¶¶VÜeb8cžÕ‹Vbõ]{Ć7—"+±o+ČZ#ĮO|×K§h—ƒS7ZÄę[éHg¹l`Nq‘Ś„Éķ,ĪW⇂ļuŪķ;P“¼»]®„ī Wū¾•óŸ|?o1‡N³k«…ŚąŖāB”¹ R4d~ķ~Č_4<iįļ“^ŲČ-b_³¼åYX‘Œšz׊žŻš¶ƒć;_ x«KÓÕntYUÉi²oNģsźqS8kr=”SįĒ„ü;ć’CÆŚŲż‹Qū—Q¼Cēąć} y·Äļų~Ēe½˜Ļy•x “Œ{õė9E§fc)t>l¹ÓeŠY®!·(ж#½pņźÖ©Ŗ8'ž‡#>žß…8nBz-춚¹K6Q˜q&ļļ{~•åö¶×6÷·jϲ4ĘÜ~µ£Z§sм#āMz ]lšh %Rf`vƒĮR>†¾µų'įMvēÄ· ā ' ÜŚ7²A÷湄¬v“’‚4 ivŽ ··’k9°HĖQĒ5ł•ü#ŚOŽtĻųi¤µÓšo5łēČć=ĒZT/vTcŌśŪSųģ֓Ē…­m#F²U'ü+«Ō¬ōm}ßÅSiÖV³6É2īĆśÆćü멢ڶǨü/ń‚õI›Lž yļÓ#y+Ē¬ßŒ–vvnö3CŖB‘’ c{÷››æSćŸé¶sų÷eü_bÓŻ Ž£$7=}øõmŖų.+äŠ|Kg¤Ż<9h$‘B”<ó3Š„e­ĖWßš„^čńĆį«M:ŽśÉš]§ „‡''ēŠ—Aų‡£ųŃćK bŌ-fM!NŽ>_jŅĮļGŚ\Ü5ŖÅiŗu,gžY×Éß ²Öułm®-”ƒĀ°'k0ļżiĢĻ›üEįnŽŚy4ūuŗ…łƒ«”““Ōõ%ÆtØ ZŒqŽ3ź8Ēē@9³õGįÆÅyo>iŚn¹”Ų<°Ū$3ŹÆ Žƒ½|yń§M€kĘk B)l¤]Č‘æŹ›†pGØéS8ŹnēˆiwÓ,ćM•|Ä*Ź:­}#į‡šV”¢Ć}·ŻĀ!RI5„®ž¦ŠØŠ^"Š ŽŚK{Ø\D’$žļTĒšŖFr‘ģ:ʛŖx:»qs¤k0s:9aÓ±Æ-Óõ› ^ŻŻO3Ł‘¼ŒtĒ„T`IŅh¾:ŃuļŽĖ¦ŻČ÷Hå0zcüŠóE×'P¹q‡²‘J”Ī>Õj|ŻńĆÆ„ėf-VÉZćÅ)ī öķZ?5=²¬ž¼K&ĪīA`}<՚(#ģ…ß,ęžŅƒÅ‡ū7[ó@ŽEE1L‡ļßæLW¢xĆį7Āļč׌•Å·‡õÉöłw1Ķ“IŽ~`9äŌT‹k@äģ|.f‡Āž0Ō“]vÅ$HHEpü?ū@ÕoųŽĮ·Ć„=ĒŲw,Hģć“Y4ĖHņ‰Æ.UFK3xަŗĖ=kŻ.M@Il#*ē®kž¤ģuB™„²…Tįč+”Ҽ ā_4Ņxzŵ„"ā>ƒŽø§TčŒvņĀėJ½‹MŌtū½:ż’åœÉŽsІ½Oį_ÅŗÜŃ»,0ŖćŚųęēpōÅsMÜŽ>ŚÓæg =6Įf‚Y%BKķ—QķĶ|ĻńCįWˆ”Ŗ>wźČ:qHQVA!gĮŒt øn.ć$¹ K×5£•ä‚TŽ„ō ź§#ō+ž Cūkj?°Wķ”ų«QŌ^ĆąoŠ$]7Å1HO“gž#ø+Čį'ŚMo’n‡ ¼1ić«'MńēĆŻNšŽīÖo1m.ą[i?/<ž)ŹŃŻNgó’ū`’Į[~kšŽé> Ņ/“½n8Ļļ#bŃĢNp£ŽæŸ_‹> |_œĻÆźŚ†™lXęŚ'#ĢB{~”½•‹œø¹y¶(‘Š'Ėõ¢&Ē˰ĘGCŽ I»”Ÿ#š“±>ō•–79ē’Z_]&ÄTˆ.:ąõ¬•k™#wpČ­•ĆN(1%  Ć„i¬ä.čŌd(&-õ7š§å·JäČ8ķŽƒH»P¤€–aæ8śTѰI6ØSƒAÕLŅ“‹É““œśśWŻæšNŸŚJهö‘š…åĪ©5‡u«×³ÕćĒīöH0¬ĄtóųR}»ŌŁż—xcYŁØ®˜uuS‰oōŁ“ ®„|æ^õéźoķg³Ō­ų–Ū(Ē%;’Ÿjłœb:鞹3Į{d"uķ§@Fk†¼šņjK+ØE͌Šb’2xd>æĪ¼*ČīĆK”ų9’!ų=Ŗ|;ŌaÖdŅ<įÖµŗµAž¤žŽĆ¶3łWęŌ~'ž]),&]ĄĄ.>uQõÆ>¤]Ļ¢ĀŌ“ls¬Ikš)«r3ŌZēl5r—#«ģaņœp U'©ÕZi£JKµ™—Ė/ZäÆåĆ29éĄė^ĘŸ?Š8æ/ķ—„C:œäŽśĮš/Āžn‡d¬Ń™5lŽ ŸJõ)»-SōCįO‡†‘*]Ó„vŸć6Ļ ö«“lUŹHĘHéž@šäčnåŽĪhNāó&; śÅv6 l¤L«u œćó­ lxĀx–ŁuµKŹqø”ÖĘ”§G"%ĖŪÄŲŻŽµŃa%©–Ś­–˜«4‡ÉŚzż+®Ņķü=ā[hµ‹)!iĮ!ŁFCzÜNS̕¼µæ•Ūy+˄ѦÖ_6x$p£=ėl|Ó­ųŽx–K vI$œ¢4`«źOož½{o…ž5xuTD w€rO_zčŒHög“ŚxæM¼„Nß»C.O \\Ž*¾mn¢²/l[†ēšH¤Ģõż>łāU”3#c8cśS/5” ’øEĻsұfZ³Õ”tIąu98Ęsšvµā}OLµ“P·Ņ„Ōįd ¹Ŗ;ŸjØ­HK[š5ż—‰tČu}1¦\r® ²ī‘ėUžĖ5×Ū“q}iøˆ‹\½†čE2±ßŒŸjäĒeü™ž÷ā*ŪŅöĶ— ‡'†ßŲŪʶĆr|’Žõ BZßÉe,…~õåž3ÓķüM#<š†•Nߘr@ Ž,ą!ššA•hŃ=všM¤6ˆ±Fā•ZxĀ6äzP,öŅ`É „m#ļdpIPµ¬P2ŹӞ•vꯄĮŒ Ž8Ī€6ō­t2˟J¶Q$…¤¶#Ķ^Ŗk9 9WQŸp…‚īĒ8˼lŪä$óĻJĢe·ūJŗßµrz¶˜Ė PFO@:{Š7"®5ĀF-ēC3lb„×®ot­:[ķ2Ś[«•Žõ¤XŃš~»u®ZĒq-«[HĄe}„w!_$:œÖ‚dJ‘r¹ŚļŚ­ĒsfŃ%Œ`õ©”DA!wl}Ąöō )€ĘčĻ­C‡`/ŚhrĀ[|ÄŁĪGAV§{‹A,‘¤Œ:9Ķ ymäh¼čOl}+›m.ÉGšv6y9­@īt’ Z%ƒ?ŚK°Ē5–‹xŻŅ`ĄÄ¼‹2ķQ¶Ŗ¶› 'QĶg0)/‡‘™YJ:õ+j;w‚?œ>ßzĪĄY³" ¬änÉ­›‰łŠ s×Ņ€&ZiP[Ģ³uŖ÷v0$-q Ģ å4_ ņŻŪ€čē$qĻARGJ ‚4€löIłĢ®¾„WpÉ46ķņØ-ĪśŪRóVąż•‡ĢŒzŸQé^Æal—@)“8“Œ†XÕ4™,H(ĄŽ?Ćs3ØS2ē“·"³yc‘ŠØ#‘ŽÕĖĮ.©4Įg +ūŌÕĮ›@Ŗ#'Īź m(’' ōķAJF‚Ć$†Ėtažõ}"¶U9G©§aó³&mJŅ@éGaĄā¹_OŌŽ341¼ŗqV©œ“ĀŅߏ‡ūFŌE*66śW«ŲźQ,~\Š+§®9NŸBeę2āM0³5¼h “ڹĶBŅÖēsE…aĒė&‰8;‹å•Ć/LzRĘ­ሠJCŽęż¶›źH@§Öµ“ļŲŪ¾e²;†Ļ^•p} ĶµĖ˜ŒH’ƒŒŽõš5øräÉŪŽµ2÷Ł¢ņĮ‡$H=©lÆ^ʐS>½źf“24u VńTņńÅrs-Õ£“ŹīWÓÖ±Ėļ҃¢2>ų“į“<ń†·،wƓügį’ķ}:怸$xļA²v> ׬¦šžÆ%…ó•ŗRTo²“Ūņ®ŪĆņ¶óÖ6E;@#ƒX֎†čõkŒģ’d>XnŻ«·ó¬åŽ)f€äW—R&±—B½œ’[“€¾Ų›°ķZ›āv)˜`8SÜÖ%™«våŁ'ˆŗFV=ż„@ū«gp*8śW]eTĮ‹_Ö<)p·QƗnŸ9•OŻŪÆ­}EąĶCžż.ĖSµäķ^ø©éÓz3;8„öŒćgSüX­g’ŚęŁĢ ÉrŖ6śZÉıβ8™€sĻÖ“,µ4¶ Ŗx§Ó„AQÜ×ŌęM~ŹāŚāŹ®ä^$9ܾ§ņ7Œ¼=¢i­um}GŽ%gŪµ³Ś³”NŖg†ė}½­Šmī!dŚ±n]™Vv±źŠIĀ¼­%u-,sÖzĘŸyņFØėʃŌ0ģ+ōką7ķØ ?ź¶ńżŽ8¶į‚™õČn½qV ŽĒŌ¾ ų×.‘Ŗ£ŚŹ< HĒhēŽµ÷Ē‚|RŚõœWĖ$S£»”ŽxĶ>S£Öķ5›H¦Xn'ņx’wZmó²+‰‘āc…aĶ3†¢#½žds½U—×5yņFLląC҃ }Ö¶³“æ8ŚGkåķzāźīžā ó䀽č4PīQƒHńžÓüė$œc<ŠkĢO>•‡Ī”ƒ†ŪĮĄ5—4mĻ%L¤JFrOlΊ\4Ģ»¶ÉėŲęU/mpĢ@ę=Ց¢WŠÅ7ĶlћŒŖqœšō ^³\¼/Ńć ŅŖ14’Š}õŒŚ‹£ŪÅÜŁéļ]ŸÄŠČņĆūß„oœÓ3—Į—ŃĢZ$e;øāŸā;9­“י÷•ČśU87>}ѼcØ jļMŗ“T·W\ó¼{ŽĘ»‹ėæµÄ±ĶæĖ'pt¬Īøģq“芯K'Ł]ĢRzÖösA1_+s/aX1IŲ†k{„+ ē’G^ęķŃQfŪĮē§Ö¢M˜“YėV³&6dtl ÷­cgēFIaƒĻ>µąŒ‹č’ĪŻH#ĢĪā9śVU—‰,āv‰ćt|šŲż*”»›Ó¦ĪŽ/ˆzf•=½¬ööó¹q噎ąńóŅ’ūZ]F]Ė"‘ŽxŪC™»„”=“ļ gxćµmXźaäŠ÷ē4”ūœó¦nI©$¬ !½*„‰k|¬ēŚ8ĘkB#+š†‹Dpc޽½«ŚÖÖ»§N҃hϱfåd“‡>pČŚ@«ZEĄ×Ft, B ņę¶Q‘r×¶.ī“ė»m6ą±sł¹ōć­R¹³žÕĶæŚ$Įg\ÓäF5 zU•òŅDqü$v®Ø3Ä<²ūWčk9FĒ7‘ü˜xǰXĄśTņY­Ģl$U 3Ó½zī»ć«ū-'I»”›‹0Lq*Gø¦O^: ÷O>š<{Ęå®§2Ū‰^R§ĖxӀƩ&¹I/m ó“ĻŒ†ĆäglYģŸ ¼/Ī“^{¹ uC·'‰ŸžųācAÕ“Ķ3^7Wó\‘n²‡łU·lWŌŽ"°ø°šõīröEʬ€ē<ö5œšø„Pł?Ēś愨ދ# ݤd4yČ<õ&²|5c=¼SZ‰dłX£Ś”]Œ\Æx.ĘmÅRh곌¹R}ó®|[ąŲ#Žö›)$*ĄŒ°'89+[ ‹¹ÕZų¢ęk•š3{{öē /<×,Ÿšy ³–ᢶW*īŃķŲ}ϧ֗*Ļ¦üu5ź[ĄšŽ@ę€ō>Õ­ń—EšÕ¶§kö¶Öpj'—(HžcļŸz«ØŲņŸjZĪ—ń•¼Ū•K‘°‡)éõ¬ŚānÆ®ųV-b ² ”IēÆ#źTN•ŪædĻYéĆF׬”³Ōį…n%r †įG?¾Įń‡_ĘZ4śźŪƲŖy›Š ŽOų§#9DųĒʒFÖ7¶¶VžeŹd–S…Qģ+åmĀ:—Š|M-¦˜’ŻŽ“„H<łj:§ZējĘ6;ųGÅßµ[Xµ]"žŽŃ‚ģ™—(IõöŖė§n–{‹›2Ęģį€ōķM= ą“¦kš-®½i¦Ą]ßē;0{ż/ųKā]?BŃl-nÕīmö†ˆ‡*%e+ö£ŗŗųšŲ[xrŚiüFŒįƒ «ÅŽĆŲ_“#Āś…Ī•=„Ķ­ēž-ģ’VAūŽćŽ“©ū· 4¢ōŸŁźóLšŅkŗē›w#‹ˆž@¤tJŲūV”¤X!;Olƒ¤ƒv~µ¤j ßc–š.¹w§ų…ļei’×?v0ėĶu:׍użBāM.+užŽMÅ®vŸŅ“@ÕŁē:kjz­6„zŪŠpWåōÆCÕ.¼?ā›ļ§Ō¢[¶O+r¶ .:gņ 9ĘÅįi~„ą¤Õ. t-1ݽ ½[ųG®ųĢxĶōķ[Mū<×nl9UaÜśv«Rī.UŠż-ŠÆÆ~Å ŗŒqŹźƒ!Ozłā'ˆ…ēÄqElĖ)‘Ń›;S‘Ąś’*ƒš×µ˜4µŽ„¦~o+žŽ•ĻųoÅĪyŅ;[y’tU“ ×Ņ‚y©<ņėv2DŠ„”-ł‚ąҾ7ų k:Gˆµ—V¼ŌbYdP˜]¼ü£éU~†n&‚„ŸV¾‚(į #0 z–Ļ­}įuOZĄÓ«­»ēb‘śÖacbś;]JF•‚«¹¬; !…ĶĢ–š5ŌH„ž5sY¢”n|÷®x°č-{Yt»łō×;T³DÄągæĀ½SCXd·¼ŒŸ-•K‚Ü$t²NŽ•.g½³‰Ųš$R>Ł®oY²’Vx­± Æ ĒŹy§¢3—‘OĮžÓtDŌę–)CϹÉsėŠĆ¹†Ž[™qźj\ĢSg7Æhŗ‡ˆ/l⾈Ž[ŖłJłĪŠ:ś×„ų[Ā_¼*éˆmZÖT ß9ĄaĒQō¢3ītS–‡†üV]+MÖ_Vš–µ¶lģaG$˜½WwńÅWZ¾œŚ‡‘s¤F8#¾?ēTž—:”ƒŗŌ®®n¦‘¦`2ŽY«©Óķķu%¶[ĄÜüĆīūžµ…Z¶7>§Euį[;X¢™\7<ć5V=Ö¶Ļijcž8Q^mJ§D tžҌ·,÷*ŹĢÜcÆOZś+ąn­¢é)¼ŠŠLˆrYY±¹Ų`>¼ŌF7Š®W²=ĻāŌ^](E®iVwRøVVxšązę¼óĄŽÓol!ń'ĆĶB ”“döļ&’4z’žE7A“ßch'¹÷ÆĆĶnØ­-u‹`«*˜Ś}żkŌ|q”xöŅĪÅÄ6÷! HS†?Č'­yXŠ.öGR‡sņSć†ma¾Ōõ?ŚĖ³(Ź€~ö+ēĻų~ĒQÕ§{ē’Źą±ĖŠĘG”ŠéĄÕtŪfn=ĻÆõ{/įʓ¢k1Ū\j0ÅÉ2)®OsÅ|×­éI.;ĀķČ\#N×O·ę•ɱå6—×fīĪ6éć•H1·*į€ĻįĶ~žų&ūPĮ:j܀aw/½—ęc“wükŗ“8«mc/Å^.¶Ń­f“ĻƒĻ@Ag·„~yüGń×õYˆ»™dVŻ·°ēŅ»TO:¢g'„ŚÉØ]EnŖĻøą+Żßąœ7śWš~£5–·Ÿš/å#×?ŸēV ‰Œl}š«Ā3ų[I·ŠT_“²|ē~[ß5茎¢xŠČé&Šķµm0įd^U»häE'cįߋ.| ©ĮØųfŽļSšµŪž\dż‰Īr2yǵsæµ®Æ<ė·ĶhĪ:¬ĒŲX+"įGO­BŅĪŃYw±ēwzī§±ēĖqm-+ łķŠUIrJĘÄĻOsVMĘ”R\Ąw£Źģm€°ōõ ,@Y³ÅĒj’X¤hœ‡![ćAqZ‘F‚)+|™ĻNæZzHFTNsųPuÓC¤…oÕ¬ęS4 @uĻ5ź–?>&xwĆVޱń’Š!š‚ ‹§½Ó¼@0œµ„ŗqG©$W3,å¦yņ]Ė~Y¤™™öķqŒuō¢o”RhUj®XŸJcc²&įńcŠČä›--™d‘wcłŌS7—!ė’}(0)͟1C)+ŌҲīd°ē'½2‚[eŲvüēŽ›2š³ŗā‚EcH˜x¢§µŲŽqŚp8žō®“> =«KjIe9ōäL±–‘‚°AõąÕ–t˜[™Śhü¶ÜÆł•±Öƒ²œź‹ž [ūHOūP|›įMž“‘|iš ʖNҟ6īŠcc7?0 m?@;×|NšīŸ¤j:•“vŗƒD±^Ŗ”H ㌒Zņ1Ō®ĪŹr;ö)-”pSļDĀ®é³$^]ÄĮ?ŗįŗ łŹŌ¬vS•™åß“ĻĮĻ|eųCā-žŚļį…ä¶mæ;.9Qüėųłń÷„µ/†¾0×üŖ$˜&&ٶm”ī>•ĮR«‡Ŗö<ź{‹  o#IŽ}*…ūƘ\”ŚJć«­N÷WCfÓ3ŗIŠU¾cĻŽcW·‰cfĘBē>õčŅg—ˆg¦Y*Ž‹¦›ĖˆŹ¬ĒÉŸ…~ÄüŌ,fŅü?uem:ĀQ\Ž c’=Jõ ō<š‡čσ,ķ-DsyŒØ%qĄĶpKYćx 0<RÆŌ’ŗéK¢č¬-_Dƒ`žńÕų'ÄÆ©Ų–žŻ`š.d'üERÓ4Ó„Ļe+C§‹Yrs³YRµ“ūąR7ƒW) Ē7Ŗč1=»ĪŒ~^ ¢¹»-ÖrĀ e<ØlóļY“(\E5’„bŁĻjŲµÕ$KUTw’1Į Ķ£F%K†Aēła$’ ?PŅķķ˜.č¦lTēņ øUõ¦ŻĶfĒSŠŹŒ<®ö ©lvVfķL”š¾ŚĖ“mhȆN™4œżåŲ“ĮSŽOŌIsµ °²w½kiZœEĖ^ƲdćęķQź‘ŚÅvĶløSÓAļŽŅ?śõ½„ŻIhū6+Ŗöõ µ9f¾¹I­P©^Êź^H[OĢhŻ@„Š!hŪrײ˜D«)`qÕh¦ÓōĖ-Yd}ŽOq^q¬io§ßČ#™6ƒŒŌ ¤×LaśÖīŸq!™WŠL™vŽīā&uʘ:V“Ē+@Dr|ǚRīRHÜ!VÉ#õŖRŁ+†8łæJ NęGŁ<§’DsÖ²M’™(@‡w¦9 f“V‚d2`—ĻZڰƒÉpĪĄ®1M ='Gm2XY%dŒ™š¼Wξ0ńPµÕ¦†ŚņV2APy5ŗa(v)ų[ÅqźNÉ :ƒønεwpł2Ź$w ńM‰Į}¶„n± xĆī}k6ņ,žšņ;ڱ—c%n¼©)ßtf¶aŽŻ¢båƒRøė*¬ģ‹Ōœę –įāĢsojEFV,+YK ¶Ģõ§m·ŚU‘éėHӝÖ³ŗ8,#5ÕAØ@°!ŽDµ­19ö"øXµ^)•]µsךKHCĘć”ĶBö‡1œÖ’®Ų·8ŻZ_frVVˆóĒjČÉR;x¢Ko±±ī?J“×¶š/—–łĄō ĢŖ/‰ČĄŪėŽµf9Ć”U?…A.ż…0WÓŽ³ £»ŖXõŐ—C&āÕäw—pĻJ†mε‹yTć":ń'……ā—E)Ļ#5ä·myįYąM=¤ŚÓ ą_jŁFĆ=·Ć÷·š¼M{MĖĘjźą±ņ™[.zā˜“µ»2ē*?J·ż£ Ü^\¬ūHĘ}+œē3nm ™øįˆėY2!ˆ‘“·qŠ„“ń°ŽÆ³>œVÕ¬ipB“c5p‰q•ƒR¹×l<ŸģéT #;ūµč>ńŻmMF-Ī:ąVɤŽč]é6D~Y¼ĖZŗµI Bя›¹Å [±oG»ŽU`[?ZšQ ēģņ|½Ęx¬gø?<ŒīĶQy‚…>_Ņ DAąXŁ•™ŽĆ­`_N*8ź3@ķ…Čøŗ*ź#}Ü{×}öa-؉”]Ųź;ÓøŹÖvé »aQ ¼­wŽVV1­č{Óę`eÜ+‡1²Ć®+:RŃ1ą¶;V©ˆŻÓ•žļ§„jÅ7sˆc ūzSfĮeŅ®)&O;[Š»ØyŅ£$~T‡Ó½a_$ÖA‘#Ź·QŠĆŽXH’Ļ$s@ Žöhr‹+… +K‰Q·®Hė@ļaņÕfĪņ:ątØķ  Ļ óQ)k`6.aоƒµGg$3o“ŗe¾é>“sh&Ė­¤Ēl‡ēI™™K”Ž žø©åģ2ŪŠ<ēkƒˆ ņ¤‹Źję5 I9#ŪóµcM’xm“p,Gb) -}„§ŽŒ„Ić§V)ÓžĢb˜Õ»X Ö¶Ńü¢R¶EuŚUŖ¼lBX€M]øĶrY¢ømźĖ’×®‚ `Ö ÕםfŸjl°—¢ēƒėXq”Œ g€.µŽćóž•JšWš”c`ē¦)Å_@9Ė6āĮ§’ ĄœōÆ?_\ŲźiZŒ0¤'l‡†Ļ„l¢€ōØ4[Y‘o# »°wā«\ė­a2AqxĄłJš¾].;ZMö“z¾bŗåŽn5©ökS ²>ĮĶ@ŃĻ®›#N]&‘øĻZæöA 9WśV3B1µm& ks“§Ö¼¦M^xµ±“Ė#qPCrk1ž±”Ż”TxIČ„u,¾l»Īj£øŽ~O1.BcœmĖ\#ØŽģ:qŠVĄIĢц߷ićšTŚ\8A·½ n+„Ø'e%ęĻ%Š8`xśÖ2€ņ?M5“”ņÉ9%Mp:ō7W1y«,Dm¤Ö18)ÓģšI,ū¢#”Šēß^EfFuø+ņüŌy‡tXu­6å µ‹ĢPJś×Å> Ń?±nYĖ-–ļ·ėA“6>rųÓąķ]=u}>Īp„Ŗ85ń–™yw Ė 1YQŹ:æMĄćŠĪ¢ŠŽ'½ųzūĶ„ “ŒZõMĒC¹·œÉål³ŪX•ēŌF‰jfj6÷®Šéæéh£?x×;e¬ŻOu‰­. š6ĒĢ1Čō=ė•£^]āŚłeC,sÜgš{ȓ·¤ iN] ¤ŗ3ϵż=īɓЂ§p5Ń|)ń ē„5)ōūĶDI6Ų\ SĮéP––0p>×ÓÖąY<³DV\6rEv3xVÅ-äšÖēē`['īŒzWrWF.),–I>ųKĒŸ˜õ¬°x§ŚbĖīą(¬IŅĒg¦ż•lŽIł›~R"¼ßĘžѼC¦\Śjś\7ńŗ&)Įąž9śPm|wā= (Ž{i"‘U$ņņˆcŒ~uēŲRéŅy¶·3 UøpĀ™“[źa_i°^:“æ%Āü½sSųsZ»šf©nļv­aÜÜ1'¹ØēFš}ø<-āČ®¬RņåÜą…Ī@ƳžųĀ[+å1ŻĢmåäķ_ ķKŚĶ£Vb ^Ä]*™¬¤rĆØļ]fy›ł[ˆ·^>•JW8*Äķžī pąü˜¬K‹¼1Rß'LS9ŒBĶļ,gņw#ņ‡‹¼%­hŚ”Õm®dŒ·ŁŹdæćA¹Æmć9®­#… ū<įvž9V\Z•ݬęE”™s•択Dn‘©®ųŹīęÉŠG$§ĢG­|įsć3Q›NšBe N’Z|ØR7ōélāq"§ŖŅ]YX•%ˆ|óøŒQ;l\O Ö“ūūmI&±‚1;·¹ÆEšUĚ“ÆiwhŖ¤‡-źjGÓ^Š—Ćó ­_mQŽĆÕéńźa€ŁäśV°zņÜź­ōįw™gn?óOˆZhkiEĆłrĘ8>¦ØHłūU’ŚöKk€Ėü@Žā­E,.£kżīE‘Õé³ČRąĒĄĘzŌ’¬Kr$B÷½kJęSf¾—æķ[Ł"ćƒ^“rtim•7\*~U¬B.ūœü‹j·Ųō¬c!½;e˜łŻć֘¤¬Qŗ“»¶)ó³‚qĒ Šģ“H&ņ‚ŖJWł=(‹·Ö›VY$Q°®y-s\µ£yhĄ§±éAvčMwsęĄNā•9bµ¼·Ä¤”ŪŽ=ėʎ“ᛕW[¶yG˓ޕĪkzd–wGģņŚÄśP¬QĪ\Yyńģ8‘ŗóRčV’e½2N„[š§…\6 H÷½PŅeņŅŅHę~aƒšėbÖRݜI½œ|µŃ d™{t2³ƒė_ExM-µ}-Eż½ŗ w1€W„O)œ„c;Åž “Õ®4ĘŅ‘lįTņę;3¹p+ė?„'KšTĮ„;ŚłIö¤üøī?J„¶§+Øö>Cż¦™×¶ļs"Ē"‘†søū“¹µ¹œŖju¾“µM*A-½“>j•rÉÓб40*²©Ī=1NlÅŹį¦µœ9²ĘćvSoÆzĶń½•ŠŪ†·0N„Ź9Ć‚ƒI‚vXœF2?AśÖ•Š§Ń/į“[$O÷ö?ēµZ‡r–„³ćōmzŚīą½ˆ!Ē–„²09ė_pėßl|Sį-MŅtöū\q…,ķķœcó«äE(³”d°ŚµŌ°G"æŹwW޲5;]>Ōy™o˜²ŒcŽ”œDšų¢{[čRÄC<"@&ó®Õļ·ėf÷ā>‡žō°ȊRHŠīŌ{ŃģĖP0®/¼ć_ _DŻ„k»%P1¹GõĻją,|)cyŅBq,¤*ŹTČī;ÕŲ«Sų> “ \Ė čžÓ¶!A ČP{t®+Rųƒ’ æ„õ«K» hfŠįbVŠRģ]yÉść  =›öwų‹ą’xcSšžÆ§[i:’ -’īHȽ’ƼU‰4źz]ż„…äÜP2ŹĆ=M„­Ž{āÄ8¾źZ}ž›£¬vģā2`]”w$ōÆ”4ŚWń&ƒmg”jK{ Ā3æ  eIĆ”ęŽÆ ģM¬ß"+±īćœW›ü#ńv‰įOŽÖvzĢĘMPaOŽGÉ䁊sG*1”׿ˆžšĘ­įŻ0Åqg®iņFĢÓsGĘAö’ėWÄzæ‡ü2ĀćLŁó2ōĪ=k.C%6’¼GšęÖĻX‘­•žĀŗŲbOłõƤ<āSö;?~Į€r{Ō¶ögDgŠöMw[¶›@‘ķn`‚„¹cģ+ēļģ/_×ō•óŽÉüž07¾_ŌÖ2Z–§ŠūQÓ.…ķt›³Ų"P:qžqė_0ė1hś\WšuŌqÉ$ŠLe#žž”©‡3>r·Ö¬įÕ$—zCh²÷RĮĮÜ3ĄŅ}¶Ācø¶FŽŽŲ®ˆ>ŌóÆ‰š–¼mmc†Ņ±Ø"FĮĖ~9ė_8hzŻåÕŻķ” =šČBX®ÓįĶlR‘ś‡ū8ųĻĀz/‚ęÓ5Ū‹KKÕF(Ģė@8™ćõƗž*|GÖ“ˆš’x9ķKŽHR7ķōp:ę…Ir?I<ń&Ćā'€ō=zĢZ­ģŃÅw|·Ē|uļ_ xŖ(µ/^źv˜īŒ2vō?Žhk[ņ–§žµœļ=ė=Ē™ČhÉū­Žß„QŃ5-6ßX†ĆWeÓķŲ7`1ūcņ¤ŠŽ§Ņ ~&Ć¢ŁjŽŌ^ZŹ]ĘÜU»zcĮj1šĪ»āū xŽk}"śtd“–fĀHOĀ›Eŗw9ėßx'ǐŲķ3Wµ4w6­ĀäõķҾ ½ń“{ie§Ü“6÷¾PTt;Fļö«žtŪŲĻ‘œž‘µ¼ÖŗÅÄl$}­"’6ZtzØŅļgū1IÕIPTšėļS“4Ś9JĪ×UÖ#šį"]lŒEzn³į;Dšōž ²¬{§¤•o’P®„ÅĪĻ,Ņ k׋O„khó•h‹ÆŹ_^ł® õŌJJģ¹ć©bĘ3Äą7ć[ˬZÜHŃ$±LČpv°<Óq`‘”sco¬X\é7qęÖNF+Ē8üėąOˆ_ ®¾xžĀÖŻ¤‡N‘žd92g>§>õŒ£cŖ—d}ėū~ŃŚ—ģĒńƒĆWq^,~×fKųęlĆ cÅzzęæ°}"{]SJ²Õģnģol.KC mČz+žk©čĘ(ė¼3Æ7†u{i¼¶{VmƏįĻzśļLÕ­µK$–ŚO1dÉĒŖ3œŹų,’ģ£~Õ?²½÷Œōķ)›ā߃X^é÷ŽM@elrT®OÕ}ėų:×t²O¬3ī;.)‹(åŌŲĒlŒQB 2•ŗ»œu qLßf 2¬N}:«,k,«µ‚óŽzWu>Ē ©•®bx7`ƒ<“Ž›+$.Ā29ĒzŠÉ«:cp©ä&č™ džĀƙ²GņØŲ†3ǽ‘X0+óĘ{T ņ&K/?J˜H½mr*÷$P“|ę7.ĪOPt©Ų™£31‘˜ķ^1žjåŗDŖĢĈ€ž#Š{ŠŻŹęę‡cq­Ż =ŹēU¹ 2Wpż+õöj’‚YüMųÅ Śxīśk=$ÄÖÖd‰“$q‚}k–¦'”=™ņŸķKū=jßüI=¬ŗlŗtŠ“‘Ż[€Jć燒^¾?¹_'nvæäõŖ…[«™N%f‘bvć5$b-¤““Ó$Ö¼ē4ÅR®¤§8鎍²9Uo¾:ՙX¢Y "*æń0[ėP6čŚD Ч‘ŽŌFv’põ÷©C9‘UXž9Ēz ұ4N$łd%W<Ö¶,š&`¤mĮĒ=č:©£źļŁöŒÕ?eÆŚ/Į๑ß{šÆķŪĄšõ¶½a„x‡ĆZ…¦±ąĻB—ZtŠū‚’Ę{cv>‡ėŽlL}Ū°Ųļ5-g[ѓɮM½k›łą^ZD’=xÆRÓÆ4ĶwGµæ“rÖwP†ä`©#Ҿo”Hךü·ÆŁn.7Ļ å ‡_CųWį‡ü·öS{•Ōõ]!ÓZHĪ„¦\…ø\ä¦Gc‚>¢¼™Äōpó?tŃ6©d—ŠaK•&)ŠbppV¬ŽZ$&ł›oŽė\mš} VQ$±,öūĄ^8*ī­“ie€,z;ūW}qׅĻ8ÓfšŚį•˜¢ē€G ×čgģ…ńe¢½ŸĄŽ(”‹™ rr«ž˜”ÆfŠ<ŁSč~ĮxKĘ^ U·²Öu˜lr;€8ć­xŸļ,u=aķąŗ‚ńC’„[ļ„\ a(ž•šŅ4³µĆ±oéÅz¬7rE>ūČA\żģt¢ Ģę˜O}kq:«JŪ”äõßh¤WŠ•†™xéĶuAčfaųÆY¼³‹dL äć&¾|ń“7‹“}JĘx‘5Œł,Ļj¤Ź™óĆ›ŸˆŚW‰ž=^½!†|m(ޘļ_FĖ{óĆ,&H%NJö4)hVńķ®éĖc7ī6‘‰"8 ĀŗéĢÖÆv×1N±Œ rG¦+Jg4ĻmŠÆ?³”@N”†8ük2ėP½MCh¶I-IĻkFˆ;ķ&ż”dT*ŻH5µqÆ%Äaf·ĢĮ€ļXŹ6Y‹ue õ« WżkÕa¶b uŠLąóŠ9K”»­įŁiÉsŅC&ōŪósŸ„bj±ęåÆ4öŹžJzÓä'˜ēlµĒ»ž{Q”:£¼=Gäj ¢Š+£=ŗ˜%<6;Ō ˜Šęį¦s£,{ć­:Ąf…ĘSłP&Ž…¢Ž.·”ż*µĀ© ±ĶóvSރHÄFb#ˇ޵Q¬a¾ÜČLaŒ ±—ey©Ł_}‡QH®-‰;e^? WE}c»!ŚäpŻč1”lrG{ĖŪßŖ=±?+wZģnō‹qe š•ņ§Ä‡śĢ^1ÅŚ^¬ŚHÄwP0$0ųčkE3XIljųSF¹²ÖSQ·øƒ}ō'*OØōÆ£l>dG*ˆĮöŖ2›7­¢x²źŪÓ9ŌŪ˳±ŠŸOJĪg9•ijņŗ»pz“]›Eg,aW*ųĒ˜ĖkœŃJÅHčGZęu{BdʹgéųS°“˜­®­,•O$Ōmbй–7;ó† ,\Ÿ1@ĪķZ–dx7T2Zø=@°©“øéī)&ŗ’(™Š)=Į=iĶō—Ō×z¬ŁQŽ6“ĶV]”i`bŹ£$v¬Ą­$Ķ+F*8f¹yeH‡OjeŲf•B©Q܊·"ą«ōķM¼v\@ęÆzKx¾Ļ"ČĖĻó­b†:k$’+˜ŠĻ?żzß±žÄ@ŠHa1ŌŃ)Xø>‡”kHłķČO#Ž®RšœWWQĪĀ9®Ņ:TūCCF+)¬<ø­že蠚ź£y–5W?…'6)"&ˆŹH剨Ł”Ī`ž•g„Ågs ZŽ•jK)^sd#·j‘ x™ĖĢĖ×­pŗŹĶ±Dy!=ĄĶ4®W)ērx”ōūķ«oē ėŲ­{†üEmw•[xa‚§ŖšÕA)½ņ‹źzõµ»[ŗŹ/fI‘rNeŒoCÖ«^E°Ć „qE¬iņ„OµAoŖŻY],Ń.UNN{ՁÖ^źVŽ&D…P>^}k§ŠĮ±WSĪ^›€äP2+éōŁēx␀O5Yķ-ęˆå#ö8ĘhÅÜZ4S0l:ułMež c`y\ŠŒf*¬18ęµŪH–;qwW^½k9 )¹kŌ2$Es÷ķ{hź‘Ą\Žøõ¬Ąźō†žņĶĀ“,ńzÓŽŁCƒŠv`UŌ%ø’2Ź…ńÅcZĖp%A³ß©¤‹ˆü×ÄØ”éb‰˜oōõ  Žˆ¬FWÆJŽSD ŻÓ4ĄŠdleŗt«(n¬dŻ™ƒŻ©ÖXŗĻ3ŸéZgŁĄUf€9o]¬^YĄL`s޾}Õ¼YuaŖ/ŲĶ]Ł#=«HEF=ĻxŠloum>+ĘP¤Ø?Zy±¼·p謬"­E/"9d’Eņä‡nO9ןkz›v—ŪÄ̧ŪŅØE»‹©,lKFäs8ÆÖüGsvÓ}ŲåSõJwŅʰZ÷‡<}Z§Ų5B-\åČx ōÆ£¬uŻ:öŹ8Öā?5†sŸÖ‡äSGA¢2Cnöļ1øĖ±Ÿ„6H™f8hĒTœäĪ` + fĻ~õu£č— LšmŖN§"@§p>½kģ4ģAiŌnń’n§ ź+end‰EĶ8½DrzŵõÄńĪ®É98=ė{K‚;›`’LČłĒ5°ī“gŲĮ]6ŻT“Ó¤TTŽō”$śuÄ@–‰”ųą×9w~`sŠCšŹLg‘k){6 pĶ$“ו9¦>•öČ*+‘ŠœTFZ]®ŚżĢ·ø$@ąęødšż‡Ś–{k·ņĪ|Ä&‚“©iÉD[¼¢1ļ^柆ńŻ“š„hźĢ§vĆĒā(6¦äŅć·ó-Æ-–uFo–AĮķČÆĻŠ~‡Ā¾%k›h§sīø2c <ĢŸČÖ.ū0FF—/›Ņ„F=«Ō<7p¶öäĪą@õ®j‘čoµ’ę b@ČįńÓĶÜŻFÓł›P>ī½rŹ ,I4jŠ#ł:g½6ßQ{pžBŻ3ėųÖ6±2ZŻŻÉ}Å(f7p£vļ÷ŗ×Ÿ\ił}²ÉäIĄ<žüWu YŲåØ®>ų™5M2ŚĘł-㼈“•bXØ’ė ž5ļIwöį"¹W\ź[ÆŅ½Jlę’Ōē.aŪ"“‹Œ¬yŸÄxsUŃĶä6Æ·…ĪĻ•BéߚųŚźK˜5 ˜n­ķ¬Ł\¢Ł 1ŌśPtĘg+tJĶ5¼*gne{µ>™„O‚h%ūNC–aņēÆō®sŖ ė~ų–ÖĀžM&ök‡·sŗ9%W==«ōĖįDi0Ēä_E{'˜O÷Xöō¤˜¦·¼ ń ēJķĆqdėŒ1ĪØ÷ÆN³ńR]H¦Łžp{֑±ÅUĪ™ā',-ē³õ¹#O;O˜åZœŚV’¶ ’JűĻҼĒ~%7ęÕ™ RŲīŒŠ3ĢäEw2( ēśš­*ŻĪ޽„)XÖ1īu ¦+Äe›”!x¬› čwžt²ŚC Ė Ž`’:V™¬]Œuy †DéŽ”Ē‹ķ=Ęyūæ…dęÄkÅ¢Fčx Ł’2«öq ;‚ėn2£h`0 8Éģg9t=£BæŠņÖ5Ģ‘Ź^‹Ž»K;?5Ąbp£ƒżźŽ”“;Ķ/P}4Å|…ģGzē¼Q©ŪjäŽG”}­K‚>vńG‡<*d’kO29?|ē?JņȬR°’vö ŅQ:ŲķBB$Č>źzS–ÓĢa/œqGn=źI›CÅi”Bš6ŸŚH:īę3ė\żÆˆåŌåiāŠX åpG=jģfØ_øøŻæŒv¦K+=<Ł›ÆØm ļō[d•”0'µ Ö_LE1F†yŻĘx “Źā«{ŌŲ¬*ĄsŠÕ{{ ‡iēc›‡ I“’²Īó,Ž[#9}*h®cµ`&UtļĶc$³_ŁŁø’ŹYQŪ8Ą®cWÕfŌ"hV6‚Gš"”ŹÅ$s֖’š’O#n'“]-“N±*¬›×Æ=kJrV!hnƒIåHń’q¹IkæŠgŌF’Ķ-ŹÉ~µŗoaŅė±[%rœćžõ‰āKJÖ,g…&0Ė“®PąÆlŅG‘>—¶W+3Ź@ĄōśÕ?)ą••ŲÆŠM•’£y»TuōźV¼ŗ³†}Ó³Ŗ:­`ĀĒ!©k—F4c7—$ńüU“u ÷€ó‘ŪÖ¦[ ĘņŖFƒŹ˜Å‘Ōu¦5»³¬Ŗąøąö¬ Ź7w‡hŹ6Ø-‘Ē>‡š®pHq"³C"9źh7‚2üAāR[?²^ŗÜǜ©Ī; õÆ4¶ƒĶ¼.“1!ą’:\£pź{g‡^m żąī:VÅĪ—`§{!.NNOō¦a(ō-Ś^yL°¤lœķpkM„ c xā·‹#•le\OsøFĄM|¾õƒ{¦G!R #ž6ścEK‹8m q9W›‘•UEµErc8õ e‡I‹"¦ęCÖ¢‹Ķ€ˆä`‡9Ę>š Å»–®5Ė•ŲņM!‰FŽqéųSMŽżŅĢ’?ҘDžmüKcįŻ2In[qt 1ó‰=’Ļjģü?¬ŁOkl"Xeh¤šŻėÜä“9žuw™¤jX“é!W$däžzń­§Š“ŪØcŌVeg#`r§ŌŠ+Ÿ‡ü)¤6Ņ ˜u'VÜAG£zÖnÆį…>&“¹x'”ņ•SµOėC*śÜō«¦·³K?%ü†$ܹ Ōūq^ıü<¢I•¤ŁęeGŽ’8®r¹“<ņ/jlŅiq\Mg2.‚ćėŽØj·Vž"·»æń34Z…·ś‡9 ėŒ_ēZFĻBOÖd°±¢“ö¬S?)÷«×Ņ%½£æ“#«.G·Ņ­Ä–ģy^‘©=®©w N÷9;‰có!$ńōVÕܗeRĻŗFĘH’ėP‘ā:ż?F*É,;HĮbk“ńFøiaxö§ĶĆ`šeÓgÆMnlį'Ź„īS޽’ą‡Äiö3Gā{gŠ8†D„aėÖ­DéG_qń§MÕīītM0Į±dœÆß\ń“Š}+§Óķ,uT&Hå“ĶcaR<_Ę ­ō{ĖĖų§y­ē•\Ē$»‚qŲf¼ó_škǦ£ ®c Ātn¼—-lUљÆEe§@u i-mäūątéüŖ¶{öm³ČJÅømÉėL“×muėÉ¢{{YG*mdSĆzĒš_†.tŻ]OhŅéw'ć÷Yć śJįsøŽči® °i¦Å‭ŸLzV-ĶŻ†£Ø³³Ä.YĘrzā—7AĘZų™¦č%šüŠKŚ=„Š²Æ®=kĖ~k~²Ö`ŠVėd ÅpģzJ£hģz—ķš›ĘŅé6Ž Ó^h&oHʐņńҾgš'ƒž"^jV*ŅašO"EĢ2!,Į[ęŸĘ¦2øŻŲ ÄnŽ øøÕe›K½d#•ž`H9Å|½­j-©^ ‹I‹²9A³©ēMQĶ$‰äÓķ.ōmLź1»`¢)3Ģ}ÉĒzłæį÷ÄéōŸ>­Gmq¦\LšĀŪų”n'¦3Ņ“ģbØ¾$ųs[ŠÓX²oµhLŹ­"“ƒ‘œƒß“į7¶‚éu‚Y¦‹)#•5‚2ŠöĖ?ŚĀėM»ŠM‚…·?0 %‰ĘyöÅx²uėW½“•w„ĄPäH„õäcŅ„E#¢/©ę_ ü?cāWń?ƒ¼Oj~ܐ3Ų]! ¹ź3ĒZʶ[Æ ŻKcسy¼Ø%H žu¤V£f&µŖµł{-ņy!·'®+cĆ>ŃÆ4Ė„Ōō»{ˆä'ü+×.£¼‹Zd™åpČäc­Tj"™é~ “Sųq¬ gŹŅdp$G–ŽN;cšśZėį½Ī™eā ;ZŽk¹ĆIq¶BōĘ9üéJZ\ŹHó _ƍ§ŪĒüī ¾ušĪØų£TńU–©y–Ѽ‘ŁĢßźÕ€Č R‹„lOšėDńž›ā);…Õ$c$Y.:cAĘq^•ā½ĆTøK½[Mņõ’Õŗ¦ ^ø=jīm§S"[=JKĶ7P±Õ]R܍ČĒ–uēŅ·üGw¬j‚ĻRŠ6i¢“ Q¶(ē R`ڹ߭õÜŚJÄ×#𾣫źŚ3iśmŅŹ™HŒa‘Į$qŸĘø6ŁÕÉ%£<3āē‡ōækmo¤·üKēP”~Ta“ŠqķłVoĆ7KMN+ŻNŚīK DØøżŪd€ēŪ„fčźI£Z5¤dV—v—VWń2ŠHĒĖĒØ#ØÆ’’jŁĖ ųņÅŚ×T)2ÅŌ œ–#§Aüéū‹…Sęi¤ģāGœ ¢ß~‡üÖ5‹? ŁhŗłūuŖ§Ź®wm>Ž•½:] ö‡©¦Ø-3*¤MɵS¼|ģ–9Ō609®ØÓ1•KžńĆį&½āOGćżµę«csš¹łŽ!ĪGØāį’ˆ2xÆĮÖŻ[YŚj6į¢ó#ą° ĆõÆ’ŗģvPnČš_jWwŅ^Ų_ ø”6Ń&I,=kÅ/¼0—ŸhŒ\ØdķcŒż=źš Ž°ė·m Ļ IwmŖhÖŅĻ‘²ĒžY8<צ|c°¶^—3ŽÜ?™Hģw”Æ „.§XłAŸm؜”o›+ŗ‡WÓN’ŒEs³kpO°®ČĖ©ĖĖ©Ć(2_[ŁE›q.X(@ÆŖ¾ ~Ļ~$O6£¦ŁŽˆ‘JIū¶VTĻ=~µNŗZTé”>1é~8š šŠ/.®mŚ5 †' Ÿx燾"ųæAÖķuK~W°Ąó-’eĒo\֔ń Hr§”ś1ą_éž:Ņ,õŻ$46ļń½ g?Žk½ńƒ4æč·zeĢ­+Ēū©NUćqÓŠśSšŠĪ ĢüÜŌķuŸ ^j^ø mwitĶŗ0Į‡ēÖæŖļų%æķM}ńūįšÕėDž0šęŪi‚üæh„† zōėXŚéž…)Ÿ­v÷’iµRČ»ĄĒJ÷O„ڼßg’ĀI<‡ŒžÕÉ&k)\öKMѵķ?QŃ5°‘m%ĪFFĒÉśWšO’1żŒäż’h’xjÖŚņėҶ©¤\H W‘Ū.Šzp„cķd¬·9dŹ JŪȚXŒrl TnééXQĒūŅ®O”9’kЌŗœU^+…Y eób”ļIøš·ˆ/ü5w‘Ém&Ą§ļmķĒÓ½=vęJJ+ÓµU:ā%F<Œœp+Ŗ=ŽI”0«"ÄĻ‚Ä{UÓ##*©ŗn’ ŲĢ’(Žģ¼ņ>1€>ö8ŖmRʦB£pļ@’'Ž…FTōĻaNŹ!PH^ZńģY$]؉œZ¾$FbźaÓŚƒzr,,žp[V“b·ĢÄv"æ§ų#GķI¬üGų{āOٟÄó,)šī/¼=$³|×6ł9EÉģIéósҳ«š“vÓgō įĻŻźÖ׌½‘Šī•[Ķ{t’>eSĄ$P5.H匣ŗ«§\c§½m[Mį£l7ņ ™M”ĘThœnȬ¹Ū!XŽE3"åÄ BŸ)Żüė+ĖY×!¶š”#ÉoKcÖ±ouWµU™‰h‡^: CHéģ„&9— +É»$ ‡4ŃöuĪĆņõ’`KŌw~nGŠŠ(ŹĒ1{E*ļ•?xv§Ēcł{yLlޤ܃LÕH¤š¦p"·‰a*F08®¶0öéīņ‡½lˆ”ŗv—–hŌ4·zd…Ėp¹¬¤ĢĪrKƲ;F\õoO¾’ēĢQ)aŪԐ .®-ēņęLążćÅ4\+Ī­"–†¶åŅĄoŚÉ¦Ä‹°œŸ„3t““q“…ī+OfCqcå7nLõļU£³}ł9ēŠąj¤n”RFzÖÆĄÉ\ÆaL|Øäg{ Nū“=źŸ±Ź°¼Ūwl'ƒH\‡g v.§¶1Ē5—q:[»"”žT˜³\›Æ•_hõ5¤SĀ †(śŠ`t6R1 #ƒė]cŒjVs3Ģ=Óø©Ēˆe.¬Ż•ßgLž£„rL댬¬gŪ_C„_Į,QČåćŪšż#ųIāķÄz=¹Ódk[ųŠ¢wĮ8@ü f‚s>•šĘ³0¹µņ§ ļ1Ćė_Né÷zmõ­¼é Šī%=V­“8jKS°ŃēæfŽór0Fźõ/Ä1Ƒg1 pNéÅtEÜē³¹ÕS: 8.`{‹Y"d##o³ÜPĪÖåQEQ“AW-E{p É#°_zé,…­źšHٱłŹl 믳Å'Ģ裠ɪ»£ó+ņzŽõ›ˆÓ±Ję[hŁŌŹ#lńĘjŒ:ƒA¹ŚiĘ)¤T¤^·×!(€7ŹyĮļ]™Hó¤ć¾k ‚āź-x¤»ī|b±na!Čł†OēA¬d_Ó.¢ŠqØė‚I⻉tķ*}6ć÷3øĮ9Ījdūs§Ēn²›gf'é^M®kz²O5”1 mŪ;‰„b>drX»½ŗŗ·Lzɂ’QŅļ ›s$aö’k1Ųé,µgæ›p-nrFpvń]<B%8`}Ēsō©**ęĶ­ž$$\F$#ļq\OˆlÄł—J»H9`IĻ„M8˜éa<a’Hوž.2k6ĖJ5Š!–`ŲĘ87Ōr}÷Ef³ŗgø]©Œ ŠÖõާm(Ż8!Cc§µ]Ž9Č˾2y,Ķ 0I„“–éeĢńČą~5²F 4X»ŪŌ°l®j]OƗ֣žu1ÄŲ*Ä`7Ņ­AŽ2±Ī’fy²įœ½3Óó¬éōŊE*Ū„ąt4ł¢•Čü“ó\BųĻP+j*cYÉY9Śxåhµž¤øÓŁE ͵d›č*ō˜īФ^l)Īģr*¹ ŒåVøÕ5Ū½V(ž;ÉāłvĄČ+gĀ­Īƒ{%…ĘŁ6*²©bÄźM{g— GÆk:Źźö²¶§„ZJ“.ĄÅ1°tłkȵŸ‡6¶éśöŠ¢Iƒį”‘õ·?„х–‡Øhž)¼šĒĖøb²œł±c7®+Ō>ųī=*āöĶ­`ŗĄA‹Č>£æ"]]mZītώX0äW $ńÜ_G Įˆ‡zRgYcšĪ ē»’Āź?¶“£įCy×é_EųkP›RšŚi¾!šō:V­gŒK·$`Ÿ 4©3ę?@¶šé±.$R_jc=y,WśV±­,÷iö)і(Ÿ¼ųåOźk&ϧōč䊮ŚĢ²ŻZ„P ż?śõć=ųwÆŻ_HŚ}ėA‚eT)Ćz})/2a£XŪųu“ķBŹŗ ē Y9Ī9ēҼjŪOžmXĮÜ\3^ƒŠcó”©[A×~ ¾ckyy{˜ÜŗüøĄÉÅvSx‡X³Š^ Vo() ;;ÕĻ(šž§+^]Ż\_}¢įdó>eū¹==ś×”x‹L±Õģā’Y•5ĪSAR3;U5®„¶T·ūEœ/(†8Qs¼ž8õ®ņßQy"fµ¹·2¬{Š‚v¶;{#āw6l¼V#ņ㚠rN\†ä~5·åĮ­B’īy’C·c ®DL©“nŚéZ6‘¤G§Į¦[Ā‘°,{ūäżkĒõė.ė—(ļ)äłš”F åÆõGµI#(€F~õtæ ¾-Ś/ˆ4żÄ:tŠ\I0ThŽąPw>ÄPtʑōæ‰m“­Y^m1ć‚2¹ćœW€·Œu S»Šęœż‚Tē?.Ü tĘiZ$w—Oa)¼ŠF2ķ‘ņ@=¾•wNšŽž÷ķ£j–ɵƑ#FpŹē½[ Ÿf{[kńF…ØĒ{$L±—Źņ:~5ó…āØńōėøžŪ3˜šąåp9Ü;w¤Ēcčx«B°Hm”kI\ßgĪ õÅzōš¶ƒ¬L/%¶†ŲćšŸJ«)äßüEm„˧Io5„µ„øŪ#‘ł>ævŽńZՈŠ ć¹i«A2-GĮ:üŗĀj7 ,¶ņ*łR7šoʵ¼]¤Č¾’ -ņØmČuļšqAčxź7¶PIwye{Jūc}øŪõö­ŌńmµōIjŖ|öåƒéZ”£s· sF®äƒņżÜW3«x–ķ&÷‚Ćå^x浏žæąļŚŽŲY½ęĒPŽ¬Eki~Ok—Zm…ō1@bsŸ_óҁØŲók…ZŸ‡üYqgā;ČļaŽVŪµæ˜éŠĮÕm“ż/T“I²-sm'ĪX.T:śPkģkiģö×£}¾ĶøĮe#pÆ¢ü)ā+‚+…eŪ‰¼k«iš‘ę ĪŠŲ‚¼WÄŚäž  -nm„q0‘{tū¬GŸZ, ‘Üų‹GÕ“l걄ŖpČļŸ\׊ŽĶ,—WĄ2[“ūøöń ŹR;†·ßjń“iq~"ø@ŁWĮó‡OšÆ³|q¤Zx{FҮ公ŸŹß+IĀ8<‚æ2Fr“¹ćšÖÆjökqléui$|ägŽ1śWĢ·zö”„™a‘;8ēīҊŌŅSŪü'm?‹ō=A¬®”™Ö320Ę ēł×ƒųĮš¶”ńFŅ "k>ā+ŻÅ|¢cżāŻ9ō÷«¹ÓŲżĄžĒ>#Š,tŻul!‘cT|s¹€ĮcõÆ2Ō|5oąĢöV‹Ń”Nұō0”ŗ>|Nų•q}QÅn”ä*€»‰<äž5‹į«ų5)…ŗBd•WxŲ9céTÆcžRŌŁø¾Xg‡z«Ā¬—݆yā¾Yų“ąĖ­;ėwś„äśeć‡`'ģżłĒNhēź\O¢¾xÓÅ:‡Ē…|\Æ}0¼ŠĮöMM{Ŗ[im£1 ·¦MKz›ņt<Ē]Ō“½6é§ŅGŁ^įņČĻÕ»‘ڹ'Õõqvr–ćjEfzļ‚uŪHµ;9Z Ó E‘±‡Ļ”Æcųµšöž-J×gÓ|ż>čމøž"E XiŸ!\i6ŅÜć‘^P|æ5äWC¦Ėu§ŽĆrlĒk–cĒҤgŽ4_ Üieµóg8`ĢQĮĖć·;×Qńץ:zH|3m6ķ9aó=EDi±6ĻĪ?Œ:uޟ­A®čö.•#Eꐒ20#'o„{Wƒ|Qsżeę\¼*ęČ+]0VVcG§É{ żµ¼‘¹†RUvrwz`w¬mkBŅ.tĒŗtsĀW†cī=h”DļsĻ<¢j𣩔Ž5†Wڇ;‹FėłV׍ō;ūłMģ3˜Tłx9¬yķ”<Ģņ›æ ßĻ;K§ŽŹe°pҶ4ļķ;5k9äœH’¼E_;*ļ©ÓXź¶ń±æ&+b@*G»ļü:¼›Ä0ų³Ć7{4ż³÷‡HĄĄśS~„D|M³šž­ Ś_Ü\Ķ¢k©Žęw[’“ÓŽæ7'¶ń|GØßź«,Ś=ĘłęłĒĖŌVŸ¼Ķ ‹:‡Å=VĪČŁčzŻŻÖŸ ްÉ+ƒÜŠä£ų„āYtétżPf䢑ĆQžŸżj„g”R‰Ź\µ„ó™™$L÷Īk_O×ļü3jööć̶|ÆóE‡Tg¶‡;>¬’Ķ<ŽJ‡tĮć95“^aŪ²0ĪÜnļXObąŃéžX„¼·Ó”H’ą©Į'–ǶśäŃ^¬ńłŽŲ*Ąļ_Æ)Ÿ| m§ŲÅØé²8Y¢ då,zȊäĆŹŅ4Øī ¶»Õō)쮋„ĪùƒdzdV’Œ¼wqā«[m2H-mķ“h{qśWŃPųO2„·8X4‹›ŃĖfŁ‚Łč+§š€õÆėvöńY¢Ł0'|ózd(­%+ŸSõKą'ģkį VÜ]jšZĻ«,^j»¦sµIļ_„æ|)’Lp&•g›¢ˆŁDkŒnõÅ:šĒL);šSŸ‡77-ińÚyK1EŪG @^r¾¼ üW|&xE_TўóĪ1óGėŠcšZēꊏHž ¼C¦L.õ6½Š{mRÕŚŽę$I2v9¼õ¾iAɲ­vĀI«£’¤J’Aęø d9¦2²„6U³žÕ“C——”ɜ„R²gĒŖ—Ė gĪō•”6$ˆ£ĘżćӌŸwŃä‡Ü?* š)“fIņIķŌSÄ.U°ĆŪŽƒJc·^HĘÜąóÖ“(”!ˆ²ī9泚źtS?Oą•æ³7ĆOڣ㖽įĻų–Ń5ż6—LŅf­ĀC9ØœóžÕżPx{öU¶żŸ&1xw@PlŸq’łĀć¢ć·µpÖz›§ŠśoGšģ:ÜVw i CtŽäĄ ŽćÖŗ=sFŗ¶±·UH¢¼µ?+†ĒÖ¹ī7|£ńwI·×ļćøŌąIō;Åņ5^ oļqō'ė_Ģü?öw¼ųoćhõ* µ;&w†xĀŻ™=ūÖōåb9z–R»9Üg$`Œ)‹'Źčw ×b1œ,Si#bd óF};Ņ™ā} ĘBćõ­Ģe7’XX*6Ō±éQ/—u"]Ϛ Ņ:;ī+H/¢˜ėÓ±« ČfQ÷yw Ū©–IK‚ŽF «H  Ī9 ø»#o™gŻćšÆdųńÄ³’ĘüešrÜ>£¦_Bn¢W+ē[–Ć‚sÓnF)u¹ÕNG÷·šsā?ƒž0x Į_<5Ŗ‰t/Ū,²G&ŠR¼ēńĻćšõ¶—UŠ-ļt˜ŽÜŪ–’–^»sōļ^6&•™Ó t:+WƒSÓķõ# ¶’°X%d=Į®’+š„$måLP׏VE6~B’ĮE?fXe Tm“ÆDJŁ€$Óļ^м$ēéS č 0ž½h)1g¹Ü ÄsZ–>%½·µ)æĖ##Æ&‚“Gā ”Õ‚;»ƒgƒČFĘK‹8¾yVhŲądr“&L÷WEEmź{U‹ˆRhĘܬ£õ ’…­¤’J£ø5Ņ:S‰ó”ˆLE)"±¤“‹X¶Ć»hŶ¤PÉ  »#!īØ$mäįy(^užEL(ܤKgUr¢‚e±»`óZl Ū—śVŒķī²” ƒ[‹Ėo²ķt]ėÜw¬HĄ—2 Čö ķICÄŁĻn*“hnT£W½i˜b³„"Ź…qY·Q»– Fzœ¢‚’øė]VŚÕńxvÆBkD½£»>Ue?­;‘˜W֍täĘģÖdöfI\7NJ„ę–1G%‹ć€Moi²¼˜‚]οʵ3‘čÉįŪSkؐo /j®Ń4šÉRŽ3ЇIåö›}mxUÓ+Œī­K¤ŪIOq įזė;ŅW—QݹƒL9ē½^¶‹Źe3Ä8<ūÕ9 eŠÕ¤ž¼ŠtvŅŚČ$·³×žµ¼č»ępŪGŠ£}*Y±>TrWŅ€ęCbńĢ&/›±ÅW¹»kȓba”óķL¤eĻoę)8Ėż+=4« ¢MĢx”c či ³”““†’™ć&’žŅ.O–Ę:Pcs—[A„žĻŗéWd† ©µ,PČж÷'1Č~\bž$ó$)äÜō ¾kī[ū¤ CÅPŗG~BŻč‘©ky·¹1øćØ\X‰.X•\ńČėš)v.Ļŗ{v¶rCļnÕĻh֍cy#HL“÷ éAMyiĪ$‰UöŖI£y¤2[łP"A£ß0=jéģģ¢bØģ»G_XŁBÅ`Ł»ŌW;vī‘*…QÜScźa1¶ä«Ž}śÖ” ±Ę8÷¤iõ+„õךʤ;tĮ4_j lT©#­̚+·ž Kå{zÕcxčå)|œÓ ©”:8,v.{ b’ėTŗTĢr3Ę ¤ÆĆ5Ó3߅öä‹Ä1Ćo" _‘ōpŃXvŗ§<}+­·²yBŠĻķA©Ø4Ļ"&YkcjuÅh"ĒžźÄomćŽjѐÉGb{ąŅRør]­³ģ`ŽQ÷ļ]Ήyuyˆķ, ¹Į9ĒŅØfŌ^%¹@¾{W?©Ü‰ę3¾™¤D¶3Dó” øyYē5?ö<I<2Å#`²ēƒōØ3åbXÅ#Ü$q’8-é^ö "·óÕH\óÓ5œ£®ƒPgŖŽ]4˱ĒĮĮā“`ƒ6ČYĻCŠ“¬KFõ˜G…ŌČcć󬓊ŚōÜy€¶ī}©•Ė÷µ“F’&<‚GQõ®oT»±‘KøŲ‘ė҃Dqņ†x¬sŚTg9ć4č'Ö%øuŸcGÉ :Ņ36 ønge=ł«’jŠ!ø¾äéÅ!yöņĀ>Etė+*;ė]Ģ­+Ž:bš@ZX’V §#Å^_” Ūŗ@\ƒĪ¶u“)õh×üE Vöį¬ĻB¢ō÷ \¦F›{a}–9 Iœ|Ā“¾Fcó.GlŅhfˆtĹ²&5+/óÆ·kĶ&öyŅ]”ČG+%Tbw {„kŗlń­Ų²¾6+÷ēµyN£ƒ)s:KŽ{Šlt(œV¢‚ć9`Ą.9Æ2×ts.śūW<·6G—x‡I[›9”š6•Bœ gšł’ĖU}Ä÷6Ł2YH›L¬æw<§×ŠĪ-õ5„žæh‡–°éĻÆéׂęä©UäŽ3_%ŲŻZÄā+©¢©*HĻ>•3ež‡£^£ŪŸ%ĄĻ„3T‚ńŹH²$Oń&w×4÷.1īli—Oj1=ŗÖŹÜ†vē¶85ŹÄŃNf•\¦Ķ£·5šm®ZW*‹åćēē殊"Q¹ČjöZ­ŚG-œ+dä2“Ņŗ öŠŃ"³Äzo®“7—vi04ū%lķėMņ„`6†äu¬d!c†ö%‘NqÓMckzŽ °¹Ņ¼—Ą°ŲyRK:"|5ćoĻ£ėŚFŗ·8#0æžŗę,ä³°ņlnŁœŒ–÷¬:oÄZNł–[YTĘå(:{Óų{ńóĀŚõ•É>DQ²£»søgž=*#eō‡Ć^<ŗ¹ū4É«ŪN¾b”vóŚ¾Ÿš/ŠwH‹1ĖbzƒTK§sź7[°[XŁcßĄÉŻÖ£}RA2Ė 1ĆīæJøNTšēŠ­ęŪi<Ą9ģĒ„_ÖķmuČ<Ń÷[ҵ!ĘĒϚ”·Z.²¶Ī|ķņmPż’Ī*Ƴn. Kf°1ēpž#C$ó‰LČĢĢLoź…yst“‰ZMÉß5ĪĘMó\xaY0FHģ+­†ÖźXĀŻŸhąā ‹VX_Ź’)łƒ čķ|@rĀ7;O\r*£‘%©f Yēģx³éĶvpx®śŻ]w•ŖŠQ±”&»%ō^T~Vņ1Œcšó-RX¢ø1ÜA‡'©ę™¤c”‡$v7xj”1[i‘ķė@=ŠŗĻöŸŁ|³ ÅHłO5‹2iŠĘÓČĘ%H'ęĻćPęe(Ü«¶;ĘŅ $ü õ©®õ;VDIĘĒ,XäJ3*1ģrS^iŖĄYJ‘19łH&ÆC©łpÄp9ć­”|Œ„Ŗ$%āøóT6:šķ] žÆø’Łˆ ƒ‘RäÄāŃ­h¶ÅŌĀĶ?‡µZ»ŅžŲń‹€ė`£ąžb®čKF¤ś5²Å”ø-%A<ā²Ód(ńŪ2ļcĄóS!=5–ž{“–u÷·k§FfÕÖH“’¬:ūTg/ā9<0ģŒOcmy›ėl¾`EkRBj‘児Ī+¦Ó/ꉕ@eSĪCVRŽŚOk tłR\äx«LD¹BźqЃšĪllD!ąäõĻ÷Ŗ›Ęˆ; “wąō„ĢAJV&¶ÜČ`|ąQ^}ākGŒŚ}Ȕ0''œR’ŌØ­O?žŅø• ((ąa°;е¦"ŻĢ"2byÉļ\ŅÜŲō%ŅķģcHŽH.PTt>•”öҬēa’,±ĒFZ•d QÕ·zŽ„ÖäĻ)V)·žzPj™…-ŻčłÉp0qƒÖµ4«¶·³ĘĆ÷©[Qdo9nį“`ńZrCżpåĆgwĶÜ֐Zœķt:=Ą}©«·aĒ"ŗ=OHO)D3n'Ē©Œ‘ĖØIä9ę—Q¼¼q‰„‘ūØ'ŖR°r˜RĘ÷0°.Źų㬹 q䆝š§$ēµ>cHÄ֚{{{%(Ūī޵%¬ŅK #r„Nwz9YEč#TÜŅ.Kt5WR‰& ±HįĪ9čA¢ķĒóEcąéįń ķę©n!eL˜– ”īJźŸ….dC¦®RNŗ’w“’4Ž0[ĢlĢ÷¬¶Ó/“-~ĆĢ·ū^ēЌ…\gž”Ēn‡¹’Āz±£ag·Ū€r§“ģk•ų6•āė{-BĀ1os,Ķ’Ó`‚;w ĪP3ō››ė]: ˆÄń2pTg8÷rZžMsNŌ.nZgˆmRN6ŒŽ¾½(9åķ ĘŚF© _GyRGql#󕏬6’å_ė4xµmGT¶LĶ—‘›;³“’ź” ŒV×O»Žź7†ʶć ­jž›aĢ¢ā;`ĄmŒĪŁķŠŁI‡lōÆiréś©§Pˆ'äūŌžµO^łWld³ß“2pUGJ™ČśĖāž“œÖĘ~Īe<Į–aTü]ńHøXRX'X «2)+xÉö¬\ngĖc¬ŗųW'‰ü+w”öŗ›(}Ź3»#ØĻ5ć¾ųK›•—]¶o¢/‚ø'ĻįśŅ]„ń†‡gig ÆŁĢs.Yœ’öĮižŽł ½Uóā9%æø5Iõ4Vg[aįx,mę·E’Ü>G#•nüT^šĒˆ“Ż`ź67w³F©Č9„Ί²9ˆ^/ńQ× ’ćOIį±ł äĪGą+ž“…u;˜§Ä˜‘AåHŁļėSĶŌ,z–ÆŗčÖĘŁ>ß|‘pƒ?Jē¼c­Ūy‹©Į4p“æŗÜrŪ=ńMĢ ’ŁĖ£Łµž˜³ŻŪ)Œ¾ÖåCc'šĻé\F€ŃkR}““4IĮ‡nõ.fr—b/ŪDDƒN²tV`UpHė\-¦ —Æķ“©¶Ø'#ß°§w3=Į µÓ|Eµ_ $lxRNIÆŖž!xŠ/éPxfhŚ eO,&s· Gä+Aøź|ŃńĄ>9š³Fšm­šé8O’@Ą®G^?•r ¦X=“ż¶/ōÕRCśŸLReÅu-xW\Mżß8‘vmA€WŅŗ_ük·ųiāō–ēĆ6śŻ¼ŠK†\į³ņŸĀ‹joÜūBųīž6ūŪéßŲ’4…\0žąv×uń!ƈ‹zŅ*ą8*Ü7¦„Ø3ąo‰ģAÅ“bbT’ģxZē|®j³GfņłÖw#ę 8Ī;J’=SRūTf¹$Ų±ō=kčO i~Ō“tžłŌ½GæćYŹ#Q²¹Éx®+½īnt¶·‡#ėœWĪ>!ŌgÕļ 1Ģ‹u1£`‚9öę”R-²[æE.“õÓ$³¬€ł]Jœ}źāe¹ž »<ī„ øī>æ„j•…¹ÖųBņ·#É4Ś1¾y?–+ļæ|O·¾šV£ąķ|¤ź±7d¶ŸAéĶ)ņÄ}’Ńļ”¶Ś<ÅĻ~ųé^s„kKp°9iēpū“’.4ĻRŃž)źwo¼*– yßĒ„uń|K·ń&œ·×-•Į哠§`”lPµ»ÓµĒ{Iš'R Üī>ƒŽ«]XA§č÷±A²”ćzńUAņ¾¹ā’hz‘’ĻZ’ŲG&m„9;ŽrAøīś'ÅAؤq6”Ö©*‚c2üē=IJ6WŠļm/uttD–m|ąŽW=w-ć(5oat 3*„ą~µĖR%rv;m7Ćm݃ŻI²21œ>Õć—·ö~#Õ¬.4©ŅßjłrŹAO÷~•‚Šƒ+]šżåäkg ‚#åžUõ'ģėci¢i7ŗN»x-İķÜ£ŒŒ[ń~ÓKĢzoŒõ+ &Ā }KKµÖ“ęČ1œ'=ĒҾ8ų»ā?†:ģvįŪ9-EÖGŲę~ Œ.yĘk’£gM$hųKö@“ńļ‡ou jĖ¤źź†Xāœå\’|ļ}ą¹ōs=¦·yńHŠČ>„3\OÖĒr¦rŗö›įūYe·ÓnžźEćīm_ĄW›!ŗ{†µ0J ČŚKgqö‡ė]4ŖÉ˜Ōˆ=» „±gē_g|3ų;ą’ųhÜk6Ry„–‚ņ7ā7ĒB=+­Bś’ņŠ{ym”’)7æ ¤ 9žuśū9ü@žŻŃ.¼;w#ÜO`K}”—øū£Üq^Ō6<é\śˆ\ÄbY!g›a†F;ń_ |eų{’ž§s«ŲŚ:éwEš8Ųē×ń¢kBé6čžįū[/Ž>Oš?Åś£érm²‡ĢĄ?—jżŽ“nķŅ'P?:ēÆ3½O¹ģŸµ”hʞ×%„C€ Ļķ t,„[‰ĻlĄĒ<]„ŒŒž{Šį"Gń5’¤ż‹“_Ł÷öŽŠ?ō‹[_‡^7W¹s! ¾–z Łėšü#Ō-ļ-üĮql¶Ó/ •®ъŠŁóīsqÜØ*f‰ .Hō„*šą»ļäę»±Ę݈•ćÜŹ®ē *«Āņ™ÆĖ›ŠÜSŲrĆĄQ*;śb‚ ØWĖ{ć„$ŽjŒ~\ćšhV/¹qĄ÷ iŲ¶?zĮĘ1Žõ!‚HÉuĄķAÕIž±šā÷Œ?f’ ’hŽ][Žčz„"žŽ>×h_÷ˆžÄdWśDx#Ēż”~ü;ųßąėĽŠüC¦C98å\ į€č{ꦹkFńō:ā…Ņm`‚źóD•Z£Š×ÜTž"Óhl®¢u‘3²enßēŠóå±GĢß<# ­ŌŠĒq Ónh˜ŒlsŪóÆĶoŚæį-ÆÄļ‡v·V¶µ„Fą6ĶŽldązŒž“āĀĒņ_ćź^ń6½įżMįžhībU(™'-õ®,²Ąėšļ„®aQœ)ŻĻ$‘ÅFŹø—(8®ˆ3•”Ģč˜m„ŗ~U3·åĮĻDF'e¤źę}ŗu܊°“f5.3“ūW;qeżŸ#D×&ēk±?zƒB&‰ĢqJFĄē »Œš°Ļ²,.‡^(HܖŒ Ś1Čō­‘’9•*U°{zPtF]Oč/žūS§™ā?Ł#ā6£ä‰„ūg†n.£Ģj{cŲ‘Žæ„——R“Kw¹†Xõ+ŻŹ@ÉuĻ_ž°®,dz1gYĢ;­ļmŻf²øōŚŽõÆixĻŗAēÄŁROQ^eŠźƒčYń–ƒ’ W….ōä Żm2[ÕĶŽŻ¹Ę?*žN?nƅRxāÜ>1²U³µŌXŪjVŪBāuĪ(éŽ¼ŚØõ0ÓŠųģŻ ŁéWmÆf˜ @PŲōÜ+–Ǥž†Œ›ä 9*žÕOUÓŅž0bVߞ¢»ØČ嬏Kż›|euą’ˆÖšv¤ńEԃ÷īēåĒE ģ+÷WįĒÄI ·›dš>\‘Ć{ƒ^ŒęŌV=3Jńc^ÜH×#F#Ø5æ{yšH žEt)}Cɵ=PYźIё~Séō¤o]Łj¶e©Mm“cĖr”œ®”Ģ9u-ź¾%;§¹łÕsÖ¼Ę~6ÓI­ZEHА;k¢œJ>a½ń½Ö¬»/ß©8į°kčƒ¬¼rś…ƒĖ :ō ZŹ@‘½ž•Ƴ"Rhū ĮZ“ŃŻø¶Ą‡3é^Ōn”*HWž¼w“}Ę^O€Ķl[®q\D—6¾#¶½°»³·›gPjLż”‘„Śé±H–¶É HQҵi‘‡ĶņOėI»35>Ž%Œ$臽½BÓĄQ’6ŹwÅbYē÷vK>¢ņ4{Õ[8īÕéZ”möh–š²Œaŗj@u«x%E“*ξżj¢ŖÉ)e9õÅT¾h”pæ&ļQU.o"“E21 žqŚ€7c[)ķRX€Ī3jĢ›Y·L#eōĢi×é)tI»ć­oGplw\;-A,OB(©Ņ'Óu»#5¼šīåpF*ŻŒŠŽV@iŲ?Ė”NŁČęµćӋÅåø; ėž”€–ÖČ.ųŒŖ$č¼óPD̳łWE2¤‚W”÷  ˆ•Uš<0­VŪrź£ Ę˜.ć’ŌAóY)(”–V`Q`4«е{&RŹ>¾ō€Öó¬ćV“hć”õØb†“"Äąē”ķLO±™qĀ#E»Æާ¶Żå8j [¶āąAqÖ«²   éŠB+—Bė“5Eg©¤›v(Zīņ!+4«&­¦kĀšC&–GĢł;ööÆCŅv2,Ń2ķ dw É_ö£ĆlÉ‘ŲŠ§É_ŽĪh«ČeR\«{ŽÕå×:ģ·Ļn“ŖJx 62>•ˆŅ4“˶…—#>µŁĒ©‰pG=jXÜMlŅ°ŌŁ$¹¶ :2Į؊$-["ņ+Ō£#*‘>āų]āØ5:ŚŻ„’M@Xٹ^;×ÓfU³‰$£o@z{WO“8§=L 4Ü\ $·L/ŻnµŅ:YĖm‹å‘W®;ż*  a$³Cę3—ęł¹ŽŪHŠń«Dü©= L¶7ƒčy‡ÄĻ ŚųžĮg}uœMEą~•šuŁū%ĆŪČ •“s gÕrHÖ)”ĀH_åĪā¼÷S¶ū=öQŹe9ē€}¤¼Čśoą—ÄhīüķV ¶å"‰‹ø89žuśą»čŪ &Bü(`zÓ3“ģ}ƒąk;-nj·ŠŚŽxcõķ]eĶŽ›˜®$‚Fé˜Ų*i’Ī&ó[Ōōˈīb·78uVŁÕFz×Ńž Ō"ń&™m4(č…p|ĮƒšÜ‰-ųĒĮ–N^“h÷(ĒkƒŅ¼“PŽdß’z{R“±2ó8KĖ2ķ&č·g<õĘŻĒ NTœBC\Ņd3JĘ(ö3ٰ¦åĻQ]®¼–Öj$€8RFGUä5 ‹{¹7$ 9<Ö¾c4²$qmœgµkRŌė„y씲+Ą gŒÖoŪ$¼Esīčj®i>K›«tJźĆ9GJȹT•šĘ\ēšfĘ„µ‚=™™Č3ŹēšĖŗ³±Ü0ā³›če)\ēŪLPą¤ N3Ö¹›Ē“1£e9㨬ˊGh-ā v›ūVa~«+Ü&\ńŸ ­ŻBī[ĄŖ²yDz÷ö ŻX ¢+,źŖĆ§zŗM?V“‘£Šę{tn@LsNĀ{Łö›<1Ékr±nÉ .>ozŲ·³Ų‰ņĘĢ8Ź÷¤gb­ÜŪyw³„äw„'aŠ4epŻÓ>õp‰Īn[źĖqeŃU€äŽŖWŚLÅ£eėŲō5|¢’ŠÓ°ó.]aY/Lę­]„å±Į61ūŹÕˆŅ9Ķ_OøæFf ž ēø;ļ›[U.ę5$Œ°ąÓ6„NOģwČ$†6’ŻOšžµÖé—ņ\Č-¦¶–%Ū®hē.ĒmiЁ…Īyļ[Ö± GtrrT†…ØŌnq¾%ńuö‰2y Øć Ė\®•ńV×S¹kYD6÷aŁ@PķžČ=zÖŹ6+Ų£øøf›tj¬ 遐kīĖQ»üQ“cßēD8ŪC$A.^ęnģ}Śē®l`[…ø·Œ+oߕ?yõ“Mū F‹+ü0zę¶F³14lÆ* ŠĢ£15;īŻYĶ89ä>6ūךx—S–"+Ve2n<ķ­9…b–v÷s"2J±ó×µtŃÅ ČØDĪ9ėSWjö«™LˆŪŽĢwś×[£_i³¹‚XU§tć]4Īy=OAÓ“į>ŵņ2qǵU×aÕtń )rēhõ’JŻDHʁn]»ntėXśĶš–ŻŅK`gČĆēGŅ“VƒoŖ¢ÉögdV+צj•󈇖줷8¤x§†ÕDŽd•”ddńō5·g©ĀYÉ FŁ9ĆZĄ Y.įI$R·īóÖ¹ÉoŽI@óqœf¦R*/Słnš’Ä}[Zkę½f[•żĪżä–źkÆÓu™RX Š}’²ĪĒn}ėߔlrXéV_4F·ģN žõ„yąŅžMĮyĘEÜv’öÅI”š+ÜÜŻiģ-¬—Ź ×#%Åy׊f½kwŸ1W'@{BÅż‘lä`wøÜ¬¼ńčk¬Ńõ 3^ÖlmŅź8Cܑʑü]:ŹēŅ“x'UšŻ‰ e:{eD~Aō#ØéśU=?āÕ¦uæH]£HĪą_¢īĻұžŗ„sę•7ž)ń%ĢWMtɹ8_§ė^‡£]E„]GĘ$·•ĻÜĒēScN[—Ä F SAŽgŌ~Ōß,U¾līĪ+É<5i-†©$“ÉkhźdŠw¶Ÿīńϧē@rėcK[°‹XŁ›pa2>ÓśWsƒ©iŚu¦§j#ŗH°­’E'æėM;և„ųOQŸPdŽņŪu›å©ū¤µ¹qŖAguu”Ģü‹9#k}*”™VŌł?ö—Ń/Óü=įcF½…µd¶2&cŌ±fōČé\-€å7Įt˜€•rv© :ć½e¶„:‡H¾ø¹µ™oćV™N½yžŗžńpźZqŗÓ‘w6[o9Ęßž½8²yŁ{Y³KĖĖ7Ńg’{O7 8ÉtēÓ?„iiśōš[ł¶ņE(f%G;”gŸėZ¦GEa§›)$v3On~ņ:zW1ć]#ū>ŽkOæHćV>lØ÷’dÜOxśŃģÆ,gŽé”Ębu|†Ļr1Ó­oYIiØ\_$W°d‚Ģ„‡ĶķüØŻŽk1øGkhäŒn¶ ūzŻĘ™}i×omeG*żę=ĻĒźś ślķäŗFć•eé\‡‰t½fźÜżžI<ķ£īńž{PLĖ^Ń/$¼«rŹ„,2Ü×½Ųhn” ‹ŌIlĻR{ŠrŹ,ūCį>§ č¶vž§ldFCTĄū¬xā³|jŚuóĻ=…½²†-ŹżĮĻĶS$ ,ų7ÅZ“kā‚ųmˆeT–õ=åU ҵ‹Gš}ägF³&B×馗+6ŠhōĻĻŗI5Ėdܒq»ę ī}}¦]hśmāÉ6WQ0f>^F9¬š3>:ńßĆÖšĻŠ§Ō ø¹¾Ón%/åHr!ÉÉeĻׄhźĒĆ¢ĘģK›d½ņÄed Hé@s>ƒ|įĖĖ«čīķgˆœÆĖ]ߍ<=u ĢŠ•PWo ń×#ځE\ćl"McGŌ"ŗß¹FÖ)ÓėN+”ŃāƒGÕ- žĪ2Ū—ĮĀ|„GÆåLM[CŃžĻ¦ī‘ ‚)‡G¶×Ÿų‘¬ī¼’¢;eI?åšøR³icAÅ„ŌWÓ#œtęŗ6k½4Ś_jP°‹\ć9_ņ+x‹˜śGĀĻ…¼w¢]ż”“ż^ŗ±3żĘČļŪšæÄ=6×DńåÆŁŚ <Ęؘł°;YĶj ē3k¢¤Įf†EH€Ė:ż*QąYõK©$ąž 0 œ3œRNĒe4{_‚<64¦³Ō¦2 „^3ņƒÅ{FÆāyu}.}*ś"(c˜WJW58­CĄŚ½įū¹¢øµŽęŁw®īšxĒ­sžšŽ—;ߘęŗP0TŌu­a~ Uń‡ˆ<;ĆolĀÜ./ŃĻ×Ö¤µńOö}‚2q4ąrN:UXĘQ±ĖZxņē^†Hu3Śe݈Ėn ‚xŖZڈ÷€ŪŪ–Wżh2‘_Ęv÷ŗmݧöMģ3iė%ĻR1Ąć¾k“»xõBŚĪŅ8äEÜĄd±=jĢ”ŽĖEųqqat¶³Éż–]·ę|ØēŚ»ļ iķW"k‡,9oƟ9Ń 8ńGˆÆb[4Ouo6XąįĘzW¦­ÅźŪĆ3y„†å?{“IϱngŲžų+¦kž ö·šzx‡ēņ¢‘¾š 0 ģIƞµ*óG•ō»ū9“ĶIl©)Ā?ū‡æCN2¹“™ĖŚj‰4ņGlŅ4± '} wžÕäiÆ4ķN7m:Hšå˜ÉæCЊ»‘ĪĢk?†:`×ćód“ū:YüĀY²B“ü#µzğ‚&8-õŻŲĶu £–ŲQöĒŽiBGˆŻų·ĒZt÷Zv£l⠁¶S!ēr«žÕŚxNõ/.¢ø¼x݃(Vs‚k9³E+q6Ž“ųvŹK 挂Cóŗ¹›ß\ŽYInķno‹¬ĪŲ,{(ēé\ŅŽ¤R|Lŗ|ßdÖ“ZšÉ³xĒš×¦čß¼ąŪ=ZĖĘ›I¢ÜJs>ż1ŽŽ] ä<ļ]ųéįĻßiŚ„-žžŽw2ƒŲŸóҾn¼Ödæ×–ń­­%±ŽŪxł”ī>’ҳ”SÜė„ @|:ųĶ«h7ŅhE¦d‘dĻ“ņœcæz𯈾3Õ/µŪˆ§PāRÅeV'vė\ŽĪ'RocĢ>Ūsē6öB21Öŗ]<éś~½ÆjŃK*()žägč{Öōé¤Ģ振jŚmŻāOc…ĄŽĮåfļŠź~ü\ń/Ćē,®~צ+—ū3–Py+ץ5Ō•Œ”±5„¶4Ż?Ēŗ=«éāŽ ÷6ā’U'*śń’ė®sLš­ÆĀ­]o^ś[m:ģ„1HøD`1Ÿå\®Æ³včm}®|Ö±ÉāÉ” Ą†łXcü+ćæ7 ż½,QŪƍĮ¶2O5ÅV­ŁJœōŲ„ķ7ö„L)PXuä’A]އāųżļ¼'<°‘¼¼ĘŹxČ=Ž+»ŃČėĶNJīīµeL°Fąįˆźq]eŸĆ­SOŠō’i®ĶjłGˆƒóuėé]Tß@uī?¾-X鶕æƒüCqsl²‚-ŻĪBūf½Cć^™ićOO}ą†öŃtS;ŁrOõ5¤£tiĶ~ |MµŃmµo ź&ćķ’[¤P¶0R,+{ā7‰§Š¬Rw–źĒĶĘŻ7ēŽ²®µ‰}Oõoų‚I®ÕÆŹ—%¾T‚;×uą1/4ŪķF萊 ÜĢ{cń§-Uˆ9-Mg»ŗ™-aq§Lļ]6ą4ŌVŽY­„³©ł0¹ē§ V=ßĀ.µ;Ėiä‚TŒ¤*äd÷5öŸĆ?…‡ĆšĶ¾Ÿ ČŽ»H¹ņp»‡­c:„Ā™÷¶…šƒOŌ®bŗÕmQ®p£‡'¾+źŸx#FšÕ¼ŲŪłNv`cn*9®itŽĆ^»}jŁ”œęOļµgĄŽ7­ā¶ĮĘā:ŠŁ@ŹU:ƒā…–^&е=ÖūģÓKnĮ2pć_ȧķÅšėRšÅŻ_Ćŗ•»ĮŚ\Čćīź8­8ūɘJW>![dÄG–Oćõ®’į‰gšæ‹t‘c1ņ'œ‰Ć•²:}x­{4–‡5Cō×I½[F%Wµ˜Øb§·ųTŚß†“’éséŗ„~lŒg[aœUµŠŹ2č|­šsāÖæū0~Ņń—<ŗh·ŗ÷Xl$°–ūÄŅæµÆ…ßm¾#x'ĀŽ0² 4WöĀo“E÷d=śtę²­Č3Ōt-N}?T‚ņ?0F¬7ķīµõ¦‹­[ź–©åČ$Fzjóå¹£ŪCāßų(Wģ¤žÖß³'Žü°[Ćć6ŽMG@ŗŪ—Žp qųŒĄ½«üż¼Yį½SIŸQŃüKll|QgpÖś„R1–3³v;gmDj%>Fõ”Ļ%„,¼…SdS*Ė“ī@yśÕiŠHåŻW8ĘĄ5čGc’¢)¶ŲņŃa3ĮļšAęqóĘŗ"bŲօäÜŖsŲsŒÓ£VŁ!e*ŹF1Č"™™*67ØĪr>µ4m»p$īūPį>ļ 7ÖµmåŚŠ1“Ó4Ņf”G:“ ʰfッ޿©’ų7ĻöĪóō}sö3ų“Ŗl Ó_xRy b^%ĻM¤–ć±jĶ­āvĘ]Ļé3ZŅ™®Rś=©}o!G#øGéZ_cI¢YU£e‡½yuꇒxćĆPjz]Κš+\!3DĶĮ\ ą~B¾&Õ¬Vg’ņHVh‰kkŲuN„ŸAYEŪ@?›ļų)oģź~kZ‡Š“1n¬ī&VūD16īO°Ēå_ŽW‘ž9młg®}+¶“3žÖ1Bģ ƒÖ«`1e=”é]”ĪGø”Š1Œ¦åĘŖyV}Ø6°=EhL‰ā܌Ŗ³pśÕ”Œ»™emų<ūŠG“:ķ]0čļ¦MiČ\?šIŻ?»ž•s,Uqƒ;ŠZd‘ö‘—ĪA½§F’ŹväńA¤eŠļ|1ā}{į¼ń[ĄšµĶ‰4;ń§9GCéų×÷‘ū1~Šžż¦¾ü=ųć”\Śż¦īĪ+MbŪ#|7 6¶åķ‚śm¬+Ęń: {ģśVCÓč>½µ¹Ē3$Ū—'­tA]XXŸ[Ņ­£re^Ń)Ƕ+”£ŒMmά†Źū°q]^·«O”irj 2…ŽJ®h-@»š’ÄńxŖÄÜ@ŪŌ¬TżÓé^„ol6ÕŚsŸ­6)#Žń½×Ėuœn€:ĻŽ9fU;Nä5"N’٤·“#oĖŽäā±®Žņ[y$ˆ2®šō >Ī?+ĢłŹJNxć&µ“Ėėųšx®„W6Ģł‡A@ŗ:.¢`UYŹy 1Šõv¹¶X’7!ė@ģ­’4*³ҬjĄ–× !H˜)#wLÕF#>~¼ųƒ$:с.‹rҽMŌ—QUkŸ1Y†C”Ą5­ŗ3NBõōś¦–Aˆ,°° 1ėXö:¶»ö„% ”¾čę©Y%mņKė›»xüüŒõĻjuŒ$Hv€ć?•±Ävk¼2‚0sׄ[h·­Ēµa%ŠĻœ­$I!é–=q7”ŖAĪzpjEĢĶĖf'sœš§t%Š 1üč †ĘęM« 8" Ō„Iq ~ŠĶ8rZĶifBK)=ĒZ L}¬Ž4ˆŅ,D{½U Ć8A‘ŽAŠ ®uv^t”YHłZוķęPŅƾjńœP7&Æö[” U° ģiežńÜŒKqļT„`emN(ī!]Ū”„Ó`ŒØ÷ķ[\ĄÓ…†ē'ī“Ķ\hQ†c`A÷ G=©A.9‡½xī„šžKKūZ9'Y•¹;OLRęF±ó:]7DžTĢū}®ˆZMØ ĢAéQ)"¤ō:k+× ±I×éWę³ycv.¹½jb`g}˜l“xŚćŽZ†ĶR) \·­ÅG°éäky|Čvõ Ņ‹PšTI`:žE#kŌ露Ž8ę·BˆĶ:łR D(:Ņ&Q7ć†WŒH¤”85aWhćūŠ Kš„¼±7˜@8鎵å>"šś]źńŻZĻ$Œ:†ö­)ßYßNmćŠ{sņØ]ėź*•į›xE¹ß»ŸqZum{ ,±‚źit™ k”žŠ“v9ę²žąmj6–³“%™Œ¦ćĄ5Š–hĻålżčē#µAq‰Z[½NÖI-åUh3ĮōƦy°—@=ȦW"'}:Ķ%c€¾Õ]ærūwō Ģ¤ņĶę•.® 掂ŗ}6GL䷖GOJgj¾T“!6O5Åx†ĘźźĪx ›nļ—“HŚ~¤źŚ\·ķÓKlĄ~ļŖ®+Ŗü§Ż"Ē·­6QŌ¾Ķäv­t¶3ĀYTqHĮ£-l'k„,ŪŽŗi`ŽŚmžo±ķ@Œ7TE|ƒØ¤Ń/®’vGV1ޤžæJv½l瀂?y׎³.÷Ŗ÷“€åƧFł®sŒŠ£¦ĶĪ3@ ó¤W¶N3Ž‚µÕdŒ+2§§­>ĄbjātēE/ĘsŚøó{ē1(ä8<{³-M›Kõ‘„W"ĖŽ7µ^īY•˜Ū©’OnÕI i«ųŖ[)x¾Z«óvēÖ“µžźĘ ÄOÜ“ŚFÉÜŚŃ.neWT€Ģƒ’Ąrv¢.ŹĒ>† b,ˆŃŠ&óz:UĖ7<ÄŲł#µ”¤&ŽēKžK\ &1ƒPźW°ŹY|ļ{ŲČ·ó¢;”RpN+~;hmn#–AŌ9äփ9š3X®Ō, Ųc5‡u©¼2"¼E'ęĘ)„daÜČüÕ!=+6ök•ŽÕYG •“Q”—i©ĶpŒd…a˜ķNøÖķ—m¼źˆĒ¹œ@kya Upzõ©‘_Caæ\t¬@³Ģł#~Šr oi­{<ŒäĄi5ć±e9y‚øäVuŚH޾gĻļéZ=¢ĘIÜĆn=zÕVŃ'$Ł2-õ¼o QķVUĆqėM–öKÉmŽ ääó\®™¾–7"ø‚[71^żšqņóĘETÓ5[µYb•C c÷†I÷„ģČsw6 ,;‡^G¬t÷žŽk‹vŠIņśé¦Uī3Ā^7ĆŚŪŹpø ē–8!Gōä×ß^ń¾µ§E{iv²Fź °9×Y…C¶[›–…Ŗ³/§ńZšŽ)ndŪż3ŌŠr\€FŠķØŹ{㨬»«{IB’§˜:qAQv0®­.Ś7µ‰”ÄųĻ?x×Åæ¼”ŽÅ©FˆÖ›YʌŒœśžóØp6¹šęūo%¢—ĖeOS]ōš½åŹ(gݰqĘ7Z”Ų×Ó!’ēh– ėŌń’+ڼ2@ėjŒ‘#pqĘ*”™Ķ-O¾¶ßl¢I®{ž•ćZŽ›j&+ĶH‰=O$Õķ'‚R28'€k’Ķ\^ ą‚8®v&ÉdŠĘ(ĆÄådĻZĒŌ– !ŗCöL“’=+H>„…ęŸxlģW9S÷jõ”ŗÓåŽkdżŲ浊øÜų‚K÷ūģŌgƒĪ+"Xļ!EšŽäƽ6Žsõ­JNÄŚ}ģ²ę9˜‰W®GŗK/)w$‹ó1Ī}jÉ–äžX‰ŽŌØźJÖ\ŗ”1łĘö c Ž¦Q¹'5y(¹ķ->ī?­sz„Aˆ3!Į&±k¹¤%ŠćÆŚÖŁ(G’Xõģk˜»¹µ¶Į¹`±œŒūҾ¶6Š0®o¬õ-Īä‚CXövĶu—rƒ`”†VĻRsҘš=æ@–ŚP–ņܳ®%±Ķwb×r#"T”ēšøĘā ŚdŽÜČØ¬qó+ėƉi4Ņå\žsŽ‚šŠŹQ°Cˆų8ŒšÉŌ®c·`&(=*œ‰-i2]8k2Ī.ŚģäŠō@Æt ±Ņ³åżåøWE;~œó­OK¾ŗóŽśåväįŽBćµI“eŲv‡ĪÉ+»`:pµßAeh²€Ē?ķcœÖRA)XėtķtHĘä>ry]l’hHī¢\ÆėĻ­i`D1ń7Ćöh–+Įę>pY†?ēt/†z5£;Ž[ZŽĘDČÉWõ®“_j޾xԣƂ4ČP=)Æz—‘J”#P8'注D„Ōį5;\LćklśpMsĪå@·0 —<y®DQ—TB4§¤ĄIXćƒü鯧Ż: źY‡uč+XĖø[ŪwYוfėVp˶Œ2e‰\åÅŠ9ķ>āĘŹP]·§'žĘ“[Qµ™Ā°ó•öŖ†ā’:+X’l˜˜+lĮ㊰Čöl²BR'?x’{WL79å OOšĪ¬Ø!FM¹Č š+Ü>Ń£źœL“²ŌōĶtFOd$ŸC›ŌaŽŁ[ĘΌz^3āF”ņ$€ć?֍XŽM|:šœĮš"t•óŸOʵ"³ŗ„¼F$€ćęjlYō¶‘Ł·/’3‘ėX×ZWِL’GČ sČ WčU_µ,@%Ć<9ėW š{tFø rqœv©c?—æųH·ŌZø’?2@¦M¹cĘ~•ŃźVŁ^Č$XeŠ&Ś?x…}g ŖtūJGøA²±09@3ų:÷ j/oke-ŌČŠW!@õŒ%#ėW°Ōõ···x[RŻņŖKč*®æ”:i’\_XŗCę·ĘŽ„·{ Ģńxō¶·Öį?iŒZēWØ>õÖEs’ ’Ę>§4²y7q ‘NzēæZ¢”{ŸDųŪālQxVŻ“čēŠŚKre†97‰ČĻÖ¾Aš7Š4ŻGVÕ­ļ5{˜”,${w\˜'”>µ.#ŒlzĪ›{“³6’»‹©ŲżĄ©ģt»½Vč äg d~~Ø”lj„b½õä:s5›Fžjŗ2I‘±Tuü«Ņ¼%}„x•&ҤÓ-üöQ‹™Ś’tüT7S#VųuØhZæŁģo&…·²˜:žŸAZ77·𭤲2 Ąm¹ķėAœŖf‡āōÅF•vGƒŒ¹®;Ēśõ–¹ œ¶āÖXēQęݹ³Ą?isö7gń6m£xŽ;„• ÉVģGć\/Äż3EO£xzi¬#‘%DRNv°ĒåWr.ĻĻķ0źöN“Uąø‘Ž#)§¾=øĶwziMXļžeĮł×išFzŸBiš|͚_C„CdģČBCcæ9®sĘ^½M1ļ“ūu¹d8t½(6S-x3ū@xy%]&öƒ%˜‚p½³]o†¼W ŌīÖK…ø‰ycӚ‰¢$z»źśklŗ]B yĮćÓė^'ā-+ĀŽ2Õõ%u¢ČŃįÓī>3Žrx©QdĒĢåö+‹Ō}ĘšjVkŒ:”āDĻZŌŌöų×Z_·[¤QĖźåj¦£¦Ü\£Ąó4q¶9Ļņż(„b߆Rņņź+;Š·M»qŹzč£z²[Ės¦H— Ę$7 łÖqZ•cčÆ_źzzYŚMåĒ3“ĆÆ?z_ŽüC§9mc¶óļHżä…óŪvFN'Ķsj³éWÆuv‰°¬™įG­u֚œr.&ŠE·$ov?tVR„ā÷6ŠtpGŁĶ“ŖĢJ…9°üw¤¦³¢]ėzkC¦J‘ƒoĻś’UH8Ųó?x«PøÓ®tFįg»ŠF“r'UĻjō-3Ē#RŅÆ“Øīšx‹łS(ļŽ•“es=Į^Õ<<—ž‘ØżžĮ°Ā5m„^yÉ5ē>9Ō.5mZMFśGŗ»9;ÉäšoĢq–§ŚĢqĒJĀĻˌē'é]¾‘Ø~ź9–_-Ž•.éLō›]zīļI¹ø“ …IT2}ŅĆÖµąńwHљIĄńޚ‰¬e”ĶėFö;f”Ķ<09'ålV‡o’+©„Įł€ūŹOü*É‡ĀÖ÷P‰ˆI”Y2”Žvž¹ÅnÅ »ĀļfÆ< ÷ŻWåʆgRet:Īį.OÉ®«ĘU†Æį²mu²øĀ‘*ū²+īs¶s‹ą9/ģLcRüøš$™ˆāŚÆ‡ēŅõˆ/„3Āa%Tœ÷÷”ÉŌļuŻ_̕ž”`½¹f×¼Ģ=’õ»m[NŃ4­>÷[_ōUĮ˜ÆŽĒI_CEĪ|eo¢Ü\ĄžšęźŅyİqLē¬ßųFĀź:4³Ł$Ҭ£{ķŪ±pyĶ'āö>÷ų[į[+m6Źhf†n±ĖēiĻząjÆCm„i·–¦+©wZį†}Ņ„ŲųWM¶}1ę1+ē#±ĻlׄčZ¾‹ Ā5Ügs/Ģ™ĮSķ[FW)@ÕńkšZŁjśM·Śaó—ĖĒ9äOž½}»ą%OxV×ūGDžĒÕÕē\~õpzöĻJ£D¬|kūGhžMśÜǦKhŃįŠ Ęé:~¹śWšļĀŗˆ4˜ī¼Cov–« v… VcÜ:TJ=QkkG[x–ĖO²†ĻM™’ČįcI_, ę¼ēĒ~>¾ŠĘ5I¾TbĮ¢įō'š¬„Ļ.|E«k-utÓ<·HKóĮSUī¾"ŽĶi&›ØŚõŲ±“"äżŃS3HhŚ}ž»t±Ć’ų28Qņ®}k®×<+6jėop·pCĘįź+Š„[htĀ'7ms}žXi# 1׫7šT²@ņ]‰"—#õŻ\Æcxҹ§ ü?»Ōą™ä‰®›ļ+mįGį\Ž«ąŻFĪ{Č¢ē µOcDqi¼;!Óü%t× iw“sŒ–éĻzģõŸ‡žµ+©Ś4°ĖóĮ<qŌŽĒčkŖ8«čÉö'²žĢŗ·ˆ4_hZ=ķäzsłq„¼ĶøÉū¾ĘæI,|;įæھ…ć >ĀUgNц*ޟJŖėøģfkŚƒą{;Č4ē& tĻlWęßÄ]FļÄ>,¾¹øTY“˼<{cś×›REĘ7*xgAžÕ¾k‰ )—“÷±Ś»oų“Fš®£>•Ŗł2č× Ā_1r#‰¬yŹög’^Z#_ܽŠŪ¼[‰\p½ŸĀ:>µ¬é7ŗ5•ķ“Qŗ‰!¶’BŪŪµi JF~Ć”Äj~Õ¼!«-Ę­¦[Ow) UrŹkč•ų§ąķOĄWpXÅn/Ž%]ÆĖĘąóøž|We:źH^Ķ£å1Ŗ›=u'Š0š‰„­°rFyÅ{ļ/[ŚXÜA2ż˜n2žśš£öcń‡'ÓßÄE5(Ÿ ƒݤö85…I!Ógč'‡~XĆ4>Vie –‡Ē^IÆsŠ|/d¶‘Kd|œ×#‡Vt)w=¾ yPBžJ«1“t¶$‰ÖßÉņŌ²NjŌ‘N]1^0aīQ]o†^k$(‡R‡Q[ņÜīVļĶ@›XɌ`wÆĀßų*oĄi/%ā‚Ń$MŹŃÜ.ā$ļĻjÖІ=L®öM™K`œcW-$WIuh-”3J“+/Ļ·kœę½zlć›w?Rž^\kŽÓ.¤W{ŋHNrĆüvś.„«G=Õ½üIåļ"2æÄ½³ļZ™-Ļż£~ŪųÆĆ¶¾#Ó6Xź–VŅf “ŌążqŠż^’‚-žÖ­āÜ~Ļ^.Ö…Ļˆl£/¦µĪTŹ€ć OćÅe%tŃŪKcśŅ­£x™„ń?…zW5øķļ†œÓrĒ+‘ĒҼé£{;EĀųX/fO¼§¤Šx*}ˆĻē_ĘæüKö/µų)ńĒMż”ü”’Žń‚łzˆ†,%­×÷Ļ8‰ēß>•Ķ8?i ._FæĪÄµŠž|5=2K d‚p³øÉ?2Œ×3%ŗ±ĘöĒaė^²8źÄ©>Õ1Ŗ‚?‡ōؐĘųsę\WAĘ]H‘‰bŲ‚¢ņѬŒÅIĄ Ļ(ƃĄöØÄjÉåT}q@ĘyPGJÓ·9S†łsĪ}½(4¦õ6ąCōā½įÆÅüų©šĻㆯµmcĆś„W*`$]ćz°T®F(K[‘ó?ыöyųÉįoŚKąo¾4ų>īĶ7X³ŒŻķąĆ6ÜĆ· Ø÷ÆPÓQģŽ[䯂JÜWŸˆ™¬cܟZ±KĖ“$jn"ōźE|3ńJō]Bö°ĮÓķōµqIjYš/Ē’?Å_‡Z·ƒÆ¬üłąfž% ¹Šm9žµü˜ü]ų{}šĻĒŗæ†īÅ£NķvłÕ3ĒįŚŗ)īKއ“Č6HČ śņ;Ur²vl÷⻩³’hXäI£`*œ)n!E”ymSŒšÜĘhŽD ą‘“ŠąÓŒŒŒ„Å&ģgbWŁ&ұüŻiń¦A^\·æJf±C02w0n™­k9>ĶbóփHn\ŽtMĮyķ¤eÉü«ößžŪūYé_ ¾)ź?³·Æ”µš_ŠŻNžĪvż’č *néÉä{⇫”»Õށ5ĶØ½šę¢”ī­eͼĄē͌Œ‚=°A©5½“’ų@xü¹ĒBœuƟ®ģu¦g$±,7b9ć<.G*+[]іóM½¶‰•bøˆĮ(~„+ŹŖŽŠLžHą£_³’ˆ~ |p›ÄŚf†×>Õ9’XԁŎŸž£_Dé$eP‰°~•ÅQĶ h^°·†Fvoā=>•ŃŁ@²  WĶŃM!ū;ÜĖ;™3Šf»„^'—Ć>:ŃgĮyX“)$ §@霁^#ĻŖ~ęų/āų³ĀŚvŸ+y­oOŸ’·įŠģt©¶b\2œāŗ¢Ļ2Ŗ=6 JĻPÓ§ŽDŗQ†GÅyž³gi;ÜŪĶQ”ą‘ŠVŠ‘ÄŃåŅiźUķ.ck‹ŪFz®=ėĻO‡Æüā‘©iŚÜ«”ĪwbG;¢`zjī¤õ3™łżūYk– ŖĒ«I­ŪƒŗćL™ā՛PRp¾sdośōÆyš_Ę-bīå HÄ6\˜?Ž'±«£ŁÜ„ĪßÅ#šŚIżÆpØTgƒƹ/žŃ’ ¼{¬OįČu‡°ńŵ»µøŃÅģwŃ<*X¶6ŸOŅ““o½ŽųMŠ„¹Ü+žpÖZ됼āÜČ7žq]V”ŖŁ %ķE»EpĖłą× Ö„$x!Ōļbń%Sī±Ī;ŠöC®E5²Į}xŻpĄōü«.tjō;ĻiZ^•ęI¤ŁÅm ­¹ÕG½qųW„NȌ$q叄Q‹e ‹kiᐠYr0zV=“0$,\eĮäz{Š#"ūPkiąX¢iāfŚųą õ­ż‘CåȬ¬æ58Öa›O—ĢXY훫Š×-wŖ•Łę€4tC=̊„šAĒS“^©§ŪG™F™† Ī("Yš)ŽŅ]AęøxŠ1 ŃŪ*Č»H<ņ(ņV™"ͯΚ­čV–RbV?„}OįT¹ŽŻc.d€r¾ŌEÜōh%]†)˜¼MżīÕ·e¤Łi-€foCœ¤õ¹œ·<’Ē^2_ ŁĪ±˜Wsa ŻT¼ćY5ėh&Ż’${ŠŁ2oÓē,Ŗņ)Vī= tékt\ŖŹzTĻb\{ōź`‘ō®zÕŻ.õ­®VąĒŠ:†bbt³M«8ū4a[Ž«ź¶¶Ŗ‘F~IēŚ€9°Ø»ˆ'š¬-BćĖŻœš»¤¼rĒ!s†Ēj+ų"æĢ7»@æŲYä!œw®‚ĒOaii=q@Ķ&“½Ņ§D*>łķIŖKnŖ“;$Mœš SīgErüĄ,‹Ųāµc‡fr²{Šiq%ū+µߎ•šóŚĒ±@T­\b`Awyo ɲE櫌µšp®­·œzUū07'³…Š,½EeÉ„DĪ)󞣵/fØō˜6U\ š§œfąE"ēšžFQ„wį™ Œ]Y;`š+).‘ ‰ÉGčsŽ©CøŠ#Ź¦±¾ŠńĪw” xö4œPāõ%y ©pµ’ś„Ō3#[ÆŻ8`ßÄ* ‘ŻŲźöWö!‰d#£ö²<‘e[Ņ‘2ŲærY§! öØ'@Ą>ķ†ƒxmn¬²¹h°:Sä·²yRGEĻ©Ŗ‹° ’{{C€ O@;WØ\8ŗY"ĄSŪŅ“r~ŅåŠ"LŒń·j‘­ ˆ³"+’xéY6¬ķ”‹>[¹Ī+eć³hđĘ£­‰q$3Č €HéĒZš;X#BŪ@bzUČĶyH$ŲŽÜķŖ1’Eäø=1RfŠæa‘„FU, ŒūŠģ–KHķ” ąsĒJDœÄŃ äßłsŚŖŻéĢŃłŖN=(4Œ»•ŅŽ!“#=qPŽiPĢņĆ”™Œś s©x®$ĀŻėZĪÖ[x€ß·µ1I.„ˆ Fb>~ē=jKˆ•rŲŹʑ“*<K"!ęœÕ%ƒģģ;xõŖęr;¢¬n7J–+fŗqønSטīƒå2ø “ž„t¤–ÓģvŒdŒ“xÉ4Šlå#¹‚W/WQÅ]KɘyŽ£ ĒJkȑ÷}ÅķŒĖæ``x5ęŁ\é÷,’G½:n·&OCN[(/DSĆfN zU»]2ģng2dž„&6·į{}R'‚ź—wP¹ˆü-¦Å†ń£…};šĆc[Kŗ—O˜Ūļ(Żžš®žŽ9G˜ ƒÓ³s,Ō¶ag8šŲFąŽŒ ÖŠ˜äe—hV< Vl 3޳¹ĆōȬø±ęŸ3 }O­ -rå}*TŪc·¦(!Ą'ŠIJģzTw2łF”œ«w4ǤU°Q3ø˜ēžµ­w`ŠƒŹ+޽zÖɔyž«=½ƒ—Ć+·=8Æ6½ńåÄĀ •6śSc5ōżeĢ6ß”$օµĖ‡bGĖÉē’+œGa§Ė$‘)ٹ„oŁźXƒå2®OqŽ©;en„‹;jŠŽø%Ku8qw6’Į#ĘŲēé\UåĶé¹h£™YĮsUp.ŚźŪ!YŌÕÉ5@Χģč3÷ˆć”Ą•/AАqėVķäŽį€|.N (»«.™ ŖūĘNTnŪ[X]Ū,r:Ž8ÅnØi¶ÖS2ĀģėœüĘ„°Œ, ^œ£Äūˆc·kœK$N¬‘ˆåĮł‡j„{§Śł†Xöy«ŠśŠä§Ö,m§UkŸ%ĮĪ>ĶŠŃ›SÓÆöµĀģz`ē‰4vń±YH'±=M?ebœXŪ]B#8Y¤Un’Jė-Œs(’ÄN*ffh\¦Ÿög·–ÉRN0ć<×=m§¤rÉ$.ī•Ę•ĀžUÓįšīė8E$ūW”Ļń JŌ¬luY„#dÆÖ“Œŗ3eO©ü$7Zc¼Ä«”# ’:‹P»ŗ×ķŁĖœÆAŒb®åXē!³ę+ļ~;×E§®£c Äy‘NaÕƒÜCõ M.¤’«eF# ń\6³kg¶1IĘ8¤3Ķõ+[RĘ9I^œt¬-ćc[…,0)[ć_Ė5£H¶į$üÄrÕóĮ°’s˜’TƒŃ}Ø5> ųļšź{pkVqĒ;Ģ1„Q…'9ķÖ¼Ęž{_2Żę’B’JžōJ:¦_žY„¶ĶØ×ˆX’˜‘Čü+Kk¶tF?$Ÿ¼½æ ćœE}luĒF™„ Åw (mÄćiō­"6¬‘MnźÅ‚޵Ļ*–(źRkHPĮ{g,°0Ą#ųkŠaoö™RŲH }ET*jj””ØčZDģ҈ŁfćsØĮ>ƽsįGÄ+½āćD½XäÓ· äĮAĶvӑĶU`i˜½“†hŠø~A­§@²G1“l€d1ŠŌóåg]ĄĻ‹•˜ńßükóĶb¦Łbóp3ópĘ®:³H²6X–UHöąŒŸ¼kń¼iāż“ū‹uĬ±€äšN6:‚¼“^‡§_JDQ2†Ļv£™ö=JŌ^Žu·l݁Čė^££ŁĖÄ #+p_Ā™Ķ${ ¬wz“1ŪĀŹ’ycÖ¼ĆÄ^Õ •ĶÜe&SŌqšv!ē7ŗkļ&Q½žµĻÉkGÓ§Ö²œz”ēõ=)dI#p’u¬Ē·x ū-ähėČä1Sō2h£“¹vŠf¶†>•ŪGv!Š8e0Æ„tĮjD¤Y‚-"༓*y¤pŻ `M¦$WOoy)SĒ–Ē#ØÓ( Ӂ–k^ĖT¶<™G"t8Į4 šūP‚8˜@’y»@Ü+œ:ŗĒ,,¬0 +ֆf ųuņ›czā²īźhJĘą>ī c'©QÜČ}*Žņ77{£OP>ķxΤ¶ÓO$ qö›a&Õ/Ęqłę¹å¹²—`·“µ…ĀTśu­KHrSnÜ㚨>ƒ:»;.‘’$=>^+„Šķ%±w[y.|§måZBĄ”®ˆĖ ڤ·œŹ[fÓü]*¤ŚÜ—0² cfÜAŪżiJBc.ä;Ą1öś×!āQ H7ɰrøĪ3R'·Ć‹‘¢©„°÷ÆtŌ`†;eŽ4FĘN6ąSr1åÖdžėóŪ%ŪF…bf9Ūžk‡¹»ÕcŌ#Ž]86šąžņ3Üz×4ätӏFkŲʞg˜€o5oPgaWu|ąŅR3©އ­m1[¼ó$ĶĀ’z׊ži.,C¤ģXr3Žŗ©˜”|P"–Õžķqp§Æ­|å}ćŅõ c’CmM9OuöŌō»ėIAš+«ˆÕ'‰ ˆÉoā=kč|7¾ńׂ :j\¼šE³l‹ø£g;‡|fŸ“ I'ü$¾ŅJÕ!¹µ{x‚7˜›7:ż+ÉōmN¼HևNŽ ĪpXg•£Śsķļ x^ĒMŠćŌŠ™0@NTĶp—>7‚}Rūū.9^öåpY¹ļJ÷C(jWta–ģE ¹ō®÷Į7Ņ# ›üнž/j\ŒĪg¦·įŌ­nį/j1I±ņæ;gµq‘źŠ^ÜČj¶ķ¤¶8śÓöfL]nę=Œ°)pØT`ń\Noi~ŗƒCv7Ä’q‰9AéėUĖŠQŗ2¼I«ŁźF2YšŅę&ņѱ̘ēß­z£«hŚG†-åšÕ–D*ģģŁ.1Ón*9¬UĻ3ų…”ųTŃōżkGI3ĖøķM¬ ć§Zįļ<åų}u. ”Ż£’ßg ×?iõ5Qīz„üI¬®ŸFX£Ó ŒE° 9éļ]óKcujĘ|FÆĮŻŠÓ+ŠÅæφō›ĖkF‹‡üČą’ ‘Ļ5ę:-©»ŌßS‚O'zņ½󞔒GRń¼W D€ƒ÷˜uØtćįš÷śœ71Åv„I±p “L,y爯t{ĶZėQ’Åck†žL–ō&µ|+¦ŚŁźq¾©ŽĒm!RŃ Ü9Ē„LŠģ}_”x’Ąyv’Jįc+Šć¶=k\ž×_»¹+ņßGĒ™Ą<ö?…gČg6|łāŸų†+čõ]&;›†™‚¼h üŖß‚¼KØXĮrö35ņ!"'8 Ł­c±“æ½öŠöÖśšˆn ‘“ĖzćÖµ/5»‰õymą>A„†`éĊ}?Ļj¦Œ„+&ŒŽV”°³+搧†ÆO×üW/‰</…ä²¶„FĶ0īĻŽCڐćÅaŃa²Óu9/'s*D 㣜ŒēšĶ|Üŗ¬Ś~¹sŖčņG5³(9nyĻėAŃLśVŪÉńF§ėm½Ķ•ĄW søb³ŅņĮuābéx«µā-ėßģ9>‡ycé÷—-gŠw»®ą§ õ„ZēLæHa¾‘ķ·’uēłR2å‘ŲüOń›{”Ēgqūõ‰‹ €n‹żÓųf½2ŪÅÓé^‹Zš³E}v–°Ź8fĄōėĘ*e±¬bģz­Æ‹ķüu„Åqu %ō‘ $  m s^!ā­Ćņµü·ŚŽÄJ¬q CźŲćµbüŠHó‹]fÕµ'ų{ Šń·ĆßźÖ:~„ \l L…I?½³ŽŻjāģef™äz‡µĻ*K Ɇ›{Ucœœō®‚Žo³iėhšĮ$ŒC1#iöēü朄Š9žĒoai䊒˜÷9` 8Vö·>רC4eÅŽ,åøļĻæ•f&z忀[Į)æn–—K5ؖQĀ ĆæąZń{›œj:”Ś{›uI³‘Š:gėõ¦a&z~ā µ}.ćO. ;‡ ÓÖ¼£Äz}ͤĘdw*;¶sEĒ;Lš“ך„s“ćpĄœśšō9<5.×vŚģšĆR`’øH1Ēęh¹Õ„ŒĻj2Ų»i—E­øķPēŲU›£é‡åÓü<,¼Aa>Ÿ'čFÉ”÷ÅOā?é¾%P-ļ…üg!”¶ąµ.T!yą? ßh2=@0UNĶß öÅyϊ~ŲŲYĮ©&„4›_-ƕ惞ō$KguąoiŽŅ’±µ[{}J+y{™9ķ×™ÆŖ|ć{BŹHķÄBœ"7éšfnē™~ŠqZė¾hɶūqäåĘѐ>Ÿį_|%ńuŸ„ļÆtO™ ·Ż’å¾tcĪzOtTWBļ‹uŪ?“Ć>‹{™- +Œō× ©¶”®'ž†I­C’6W<§bĢ»mī'V‚;¹w1A£Oµt:Ćé5^X„` ÅyÕńgE*bčśDžæ{łR;«VO-ÖNŸQčy®½”“ń&Ÿö…æŗ²æŒ üŹŽÄtõÆ.¦.ē}:g-©é^V›ŹĄ$t5Ó%¬ŗ3E©CzŪ[Ķä ㆸźU¹×MXļ~xōŁg³6BźŚp"mŸĆŽ„t÷…›PÖ®.­ģīķ€į$`śv¬SŖ0¹ĆkžŗŗßrI“¹ÄaZ3ó]BéWמ±’MJłgļDGØ=«¦ž1ZÅKjxHń½RĮ¦Aā? “Ŗ÷  $jOo§§ZżOŠ,4ŸųwOń/ƒ„³»YcVkU Kē+×µzoĻkō9ēJĒĘæ“g‰¦šö—qh/ڊ1ĒpĆ<Źæ>4NóQæk«‹‰có' ®AĘ3ŒTĖS›šŚXIšŗXōŁüC¤źgX?vVOŻæ-Ž2s_;\]ŗL«­BEÖ?xvä6:× TŠłĪŖ=Ōé°kŚa†HIŁ(ó?՜÷^Ł­#«Ķ§¤7zS<×±õ’ƒ¾”ķCÄ>(›M]kU¶š[9 Q>2÷®ŽņÖ[I"WŽ3#rŠ0MvRMhTE­:ŃbyÆ%>lIÜ֚x±ķ£š4‰bp¬¤äÆē]‘—r%.ĒOįŸ„· ‘¦šĶ‚5Ģ®\;>ąžž•öÆĆoŁāĶ,¤ńŒww‹‹‚a#‘Ö‡WKĖsź/éŽŌtŪ&Ņk•LķN£ž¾£µ}—šžŚ÷X³·µŗEVbŸ_ńØ»cµ”“ļ KgsJŒŠ;šöO čv£<&$Q60;Öńbe+±Œ‹ÅŌ¼ćŸč‚ (n$FķómÜqŠņ»y\ķø*arruõéajóEIT‡cŽž|Jń>©Ak$Éqc# _>j7 HķŽæB4ŁcŌm-Æ­¶wŽ:g#ėĶvœņSOU·ŠóI¹³1³“‹·ązų§įw‹®g?ŚĆŽ5ŅDÖI¦Ž™Ŗ1?i‰±¹@Ļäā³žš›BZŲžŲ~ |J±ų‰ą xēDšŽ}P¶I"–#÷XØ,‡ÜדĒēĄńŽĆ3¤6A® Æ[Ż­ü~ל<»¬“r+ÅlŁ“Aż®g/ˆ’ut…5+«G¹ŅgaĢ7 ó §· ”jĘW³H$Ļó®ų™šūÅńŒžųŪH¹Šiăg#µvŃ} ģūĖöIų¹Ŗj'G½¼g[uc ÄLĮ‘Ūæē_ŖÖ63IŝÄ71Č ü³ķڽ:lóŖēöK›Xīc|¹ź§½cÜ¢¢†–-ź9+[RÜ£&‰„ܘͼ­øżā8Čھwųę±|=ŅēŌ/ß؁‡#9cæq]“‘œĻÄæ‹æ‰ž#ŌtŪmsķ6R37•&DĄżŠ õæ‡~¾š®Œ,ļ:p00?żUźSG,ĶļY]x‡@»Ó­n~ÅvFc”.H5Ėhļü¤]Zj–ź÷ŃF#wa Ą= vĘ63<«Äõæx‚ «®¤Ņ߉ćgłT‘€~“|8Ömu/‹šLvŗ|pjb"^a€J±Æ^ß­)”™ūA/†|Uwįh4ża$ļ ¹#ń^ŃšÓĮ:ŖhV±ėńĶkØ¢…2wĘąŖŃ¤OuŃünZ;łÆć7 ͳ*—āšŅĻ6ā9– FW½yUduB…ŚųŠÖēUM>ęE‚ųŒ€Ć±é[×Z–½ Ż»,K§p ž«\ęœ‡Ņž½µ“OŽXęwņēs]“²}”¤¢UļĻJŚ;ņR“v£•FŲO½$‘„²«+ŻĒ^i™”-Ķŗ]†øOÜŽ•6Ƽ°;­Č?†€3EĀ:0ÓÜu®]ō=&śY#¶{X[%¶»“ķ@ZĀŗc”PgŖūjS GļU£ō­Ń(»C¹dSĶpšž…™qt’y ĄŸ›ī“@5ā_Ū_4rGb^X¤ |ēœWѾŅü­.bHĄnßZ ¢wÖqŪ.c’4uf±¤rZˆ.•Ņfø™@=~µč^ńõ­Žó9šŚ\„kt9@ö»›ēž%’(äMÜV_›q!ėYÉ®†‰·iw)Q挃Ōā­yRĶóĄ€‘Ņ ĢŗšņĮöiö¦?XP$™yp€3e‘-¹Põ5‘sØ£Aōć„`÷6ĖR½·œ§— ±õн-§ŪėtŲŁÉ¤kOc8Éäø(ćŽ=hÓīIŗ;Ųąqō ¶vkksq.L)µq-DŠfŻž(04 µÄ0žģ“õ4¶V©w'—"üݗށµŪ4²rŽĮŌc”®"}®Äƒóv  VŚ“¢G"@+¢³¼yU„ØUO:ŠÓGüŸt×-­¦§öi†žeó@8+Ö¶ŠF±±ĮųOZń%ä—k¶é ØŪS Œ­zZ4³ØO˜;SrF„7‘ÜŖ±xČ`?Yŗ}ė włg±ŠŹOSK”½=ܱĄ~O—<0¬ˆµi®”t/ cÜԐO#ÜŪ(1Œ-Z“ŌŽL,Š÷<Ń#((ƒqż*9Y–ŲĒ"€G½č*.Ē/q)I@ŠAžüU›iŽthöōĀäÖבŁĪ|ä%{ƒ[2}P‹(vūt”’@°CuČķéX×ŃÅpKDH“®)‹`œ«›©ÆEŅ-·Ū¤įv°äóM+čŗ¾°‰“ˆsŽ8=ĶgśŒ"8^'õ_ZÕBĄĻ4×ģ¤Š —Aņ³dØ=k™ƒÄš+y‚N˜ėV¢däwŚn±ż”j²’ŗtÅ`^“ČŽ3‘Å$“éWhe0łß0ūĘ»čģ&0ƒ†ŒÉ“‡2·˜ƒ5y¦Ł‚,².sI£XŠévO0cn’HR95æc£Ā·FF`'±éY˱eķKL‚%·(Ć©Ø,Źæ¹N;ūT°cŚY%S¼§({wżā”€!“’ēqŒ’W“ģ+NŚŻ÷,lTŽ‚dĶs²9R)ҵ®¼3õ¬—ö÷ļQ¤ÕĘ&jGŹ–Óv‡½:āę[€ŃIėZ„m QēŽ!i˜•šW# ń^_w =ŻÓMa§sS3hG¹z=#T³Ėdäf.¢÷Ź—H÷cµ“F’ō?†ŽöUŠR«/g§Ņ£Õć¶Gcˆ9#‘„£c6ÖĻTXxĮą VĶÜŠĢb”\zŠø¢Mib7dɹY}OzĮÕ4{Å՘0Ɍ:“Ē։!˜pYĻ;mŲ£œ`žµpé…Å išŸöeÄŗ]»Ļz ć걚µ;h\%c›ųe£x"iõO5%c¹ŅF-“ś^§ā}Oģŗkb½zŽ«Ś\ńh|Oā·Hš•t\ķWx×¾x[ŗ¹XZöµ—«/šę”’äz­ŻĶ¼ÖĮвŹ3ō5ĪÅr䱌ćҹأ!/ šśĪdt;)]§ų«ę=sĆÖ¾¹æ‚ŅYXęG ŠFÉō+EŖż”<³‰IėoHńö mŒ <[ƒõ ÖŻ»ūBĘāC<’f‘Ž@ŗm.Śā÷l®‚6ėĶn5ešåöViUföęž0ҤÓ#Ånd\ķV œŸzvW>?¼ńv«Œ›CŌōé-`lł.AğŽ1^‰ ¼$Œ7Ž¢‘§"+jQh£Ūąøļ_3x«Į³Y]\ܬ®™%ˆ+÷Ŗ9Ķzć? ŪxƒD¾³HRi”0ł—Æ­~gxĻĆ÷^Ōo­^ĢC!bŪÓńōÅ\]ŹŽ›™D¦Y”·‘æŻć]Ģr}œ˜™cŚ?ŗr+ž¬YQīvš^·mēbKiŃxĘ:ķ®µ\;—…ԁ·myµ"QRīīČ,ź7?Āk™Öt±d`ŗ³‘]×-ņœŒuäR¦˜ībYųÆGŸĻ°ø2Ezń’Ģ÷ż+¹•a¼Yķļ®b(C›nćļė^…4&·>x¦ć^Š“³$Š“ ņŻ‚§éé_CŹÖńŁ—–P’ƒßø®„ęsTˆfHĘ÷@ƀ;Ö4Ķoé• ĄÖÜĄĮ–š¾į+ńžJŌVlņ¼ŠŠSœ#gļ{ÕL֙ä| qy7Ķ<,ŠüŻAÅ|_wf,õAę1ĄĄĻ=į#O¾xe+*°uõÆA°Ōü‡[Øć•ä Ńy$}rĻsCī€^>ҧK=#XAou#‡Zū>ĪŅø_(™-Ļś·zЁKcÓōM2MG Ŗ"ōØÆU±µžĀÖ&œ`qĪ+JfU£ė— :‚¾^Žšėµ gÖmŚäh_¼OS[(Ü4¾š…Õ؟ČĆIŽL׃u%Ÿż*6ē 3‘Š|ƒ0µż é“я Įą 殣eˆ§—sĮĒ51’9ł,Ž7U.wœœÕ$3äŻéžÕ“‡4„HÆ"œīo1@;WG›u+¶×b`ĘØIŲFŠāJ®ĆÉČėYאM÷’ޤt©r±¤$TV•°aŽÕŃé-e…ūe؜2­ßņ¬Ü™¬R%»Ń“ėƒ#Į‚b|³ĪŃ\Żęgn¹ ō\TšņœuҼ™ńÖ°ŸĆšdÅDŖ&KWīŸZ\Ø,pZʕ7Į-ÉmĒhŲ”kgŚę.ėŠÉŒŠHgY”Ęo+wšöĶz>Ÿę 8Žę®pūq‘źkX»ˆ{]Ł\BVB’ƒųÖ äv±D²Gˆ”sÅ1JV/i[ÜmČČŁĄpÕGÅ>µÕŃīe¹øµņ†įó‘“ųS^aĪ…šä—…LW ęŒ Ä×MØxÓR…’g~ž? j7$a^ŪAØł×gęĘ{ž;\Zy܁ģO_„sĪ«œą–k ć|+F¤‚HéIq;Ü©):;ŠELcŠ,P³1&”Hģ³!,:ōļ_FxWÅfƒÉ™ŃFĒjė¦…ŹŽSā‰Æå‚ąX—óp 8¾gšßÄsßĶuØ[£[±÷õ­Kåģ{g½œHY`@'†?JŲ&ŹéāK‹xŠFŲB Z™JĘGØųuVŽ Ē2§Ė·ļc#ŅøE Fy"‚7}挱b²lƒ‰Yąd“Ė Ϧ:׬-Óɒė׎²”ŗ@å%Iā` HčyÜNJāõŪk׉Žša?yWœŅē:i³ēżBį »’4·u%ŠdŽ¼ÕŻ6ŅŹłZ+«y$F%dšĀŽvoXõ=Ö8 „šy6«…HśŒWq ެŠĮW-Ź…1JW=óN C$&S»ųG½óƱÅk4 źĢGŽ=ėSž{“÷’Z‚Ņ[³v+Ž+Ī/õH®dI>bzt Ķž©4™·Ķœu¬U”¦;Į d7—pĻm,WQĒ× ž2k-@ZČ­,.šœ*•=żč¢I­J;XūóԟJtˆ%­å„Étģ&€ž`u›{g¼Œ$]>TqÉ"½#Ɲ’Śfõq/XŽü9ōÆ¢gœćsUńĀŲŻÜAöt`²•ūø®w[ń·Ś¬ąņb‡1“…!‡Ņ”l`ųK@ƒPóę¼X"˜†øséłWŸx•õ;o][[źŅ:EQEm= ©åŌÖ:;s| š¾—­héšäÉq”FŁ"RČäō5ö–™§čśD6Ie§ŪĄårąd¾;ćš®zšh'ŲšOŚgÚO‰4U¶“Ó^Śg&3ßč#ŌnŅEÖīn§.Fļ•z éHRJē§ųĆĆŗ…Ä6zŽœ–ÓmfŃóĪxśÕļ jš….¬-Ö ˜„ņĄĪzgÜPb®xĻĘÜ^x”µ„ƒi‘’WAµ]øéżk‹šå׈-õ‰­'žÖb sĄ'¶?­Ōö;{ė˜RžŌó•É/#łÕŽĆKń ¬Ép–7NĮ„+㌒žŌŠ?ŠląŌ’W›t0gŸ.®kßf„o¬÷&āĄŒ Å{sA¤C7Piü=§.‘crš…“MŁ÷Éę¬iß]²µņā8 ¾žęƒCØń‹uį˜4}JÕķ|ˉ7ÉlķˆwĄī}+Rņ÷MÕō{X šę …mŅįš§Œcš ¹›Ø<3ŻŽ]<ń$Aš“š–‰%ąótu¶±fūØĒ }Nhę׌dÆ$©sŽ@pĄŽ{VU’„Q`‡Zўą\d$©Œ&=ĻēłP\ÓZų÷XŃRń­RØd‘ćŖt~æĪŖx3ĄsĮz¤½ŲŚÅö³ž1A¤šź}¢x)"Ōm—Q¾[IY…ĮÆÆµu¾ė6ś}¦æįŲÅõż¤b[ˆį~ōŒœŌ“]WĮ6ŗÖ”aÜŚ}ü3øG*įŌŽĒÓ„Kā LŪ<ūķć2"ć 8ę™Ė*nē-į‡ŠīueŌm4ė¬6̤ģĻŅŗüŃüD-5’k§KÕm#Ū) ’cŖäōĪ8Ū*œ¹]Ļ,:Dś5¤73¤’1x\W©xžīćR–/“žō(ĪŅd« »ĶF%/“Š®CW˜ųcÚ>­ćŲģā=>å® –#ļžBž“&}ƒcį}?HH–Qd2ŽŪpIļōÆńžiāf½°1ČūDg#”sž4ŠŒµŌįõėoŻ[ģÅøeĒŻŒgpśŽ†µ~Ɗ¤ÖåŃ5 >ļķKåY ēń=OĀDŪÄš«ŁŲŪĶ,ŠŒ‰śä}+ėŁwL›WŃuy|aa)ņO”-ŲķvNÅiKcFō=sÄ^žĀÖśM#µA(3Ī} |É©ėķqku2Ēwó++UĒ:ǘ‰HńŚkæŠ%%ݬ›ö*Hų^½AÆŖdÕµæé+źM°žķ“wU@żhfRÕāŗµ¾‘dš 2ČÄvūTJCş5oß^„żŗ{‰²8R ’= rš„µ•ŒöÓŪ[I#ć,ąe~•›‘“mŠó»¹'fY«Č»ĒöĻ5ézF‡āMcK¹ŗŠ4éļ&ƒaHĖ*ƒÓ ~5Å^f°…ĻPųcŖæ„LžėšÕ|+¢Ųj÷²é f·Üv`cåśW›*–:ÕsśĪŽšŽƒÅ„“Ÿd"XĮˆź?Jµeį&³ÓapČRTß°u_cļÅC«qū;<ā]7³ŽC5…­Ō2‰‰”npŹ{kŠ!ų½soqikw§,’GmsŌČøū‡·œ£Ō֍m[ÄZ‰ēš÷ģ×6²d<бųqYļ ŽŚMh.¼£Ę ;ŌF›LėŒ{‘é<Ō48§ŅŅXo4ßqĮ$ćÖ·ž|r„ž"kż.!©i÷26×ĶŪörs–•źaāÓ0¬Ń‘ńsāžńnņ]FŅĀćM·O‘”ņ ­»ßšš«_쓁 ½FB@ē±5źĮi©äŌzŸJ| ńNc”ɦźœO+n^ąČ™?w¶ r¾O¤jچµ¦ßŁź:$æÆć[–Ń×B’GŠŻr#FžכŪZĶ#Ć<{ŻCmyüėŖ4Š¢Ļcš·ƒ5]QįŽŽŚi"fĖ·#…}ƒš?öYšī·ÆkxÅ5k3¢In1†U=Tzżj„±Š‘śE”~ξ šž¢%š=¢Ē§qū©)Ōā¾”Ņ>;[G¶„˜ĒqÖ±/a5ŸƒšN¶Ė-å”VŅ.6ŗ’®?Ķzē„~É£ĘĪ$ÕU|®ų­iåÜö(d¶Xe” {Ž'±a$åŗž0k­ņ—S³Ņ¼I{*ķ½øn3Ÿ¼+”ū}„ź<C!łh1ēg.thtĖ’š6õoą#Qj1ŪIƖcr0=*yć'±ÉĮq%œ [Éå˟¼)ŠjŗŗŽæŚ?dß+”fźŽÅ·cłŁ’‚Ø~Ī·¾ ńIųæ ižĒżńœ®ļ\}kņh¢»H'.Ę@ącƒž˜®Ģ4ŗźi·Źķe%ĪÜp{g’Õ_^|ų”&™0ҵ;ƒ{£\©X“y>\ݘŸjō‘ƒ—Cģø.x£‰€ŚF>õóOķą‹k{O¤x9'DÜŃ78Ļ·J‰ÄŅ©ś’vż«ąÓ<;ģėć»Ųn,fžYt;éi…ŗģ#©ēĘ棔ZĮRÄØ'ƒšäÄĆ^duF'«|,ńDV7Sé,é!£$qōÆ„­.Yf·æ²|K×ė\–&HžZ?ąą?ŲŚ x×ĮŸ¶O‚`Ž×Āŗ».—ā¤H2#}§Ė”‘Šä`ŸjžZüQ¦Ėow3FÖ÷īCĘÉєōŖĀu‹č’ą˜T9µ}ŒX6@ĶQ6ĢŠg=zõÆNš8œ l”®­ŸRi1#¶ēĻj³;gI‹ķ•lž{RDŹ»b ōĒŅ‚¢ģ?sØCnėR˽bpĪNy Õ2X‚°\/ĶŽM[Žu–$ۃӚgU9/„<[ā†ž7šÆÅĻź2i¾*Š/āæ·*ÅrQ‡uČÆōjżhÆžŌŸ³Ļ€>3hQH÷öQC«B“orVČĮsķėSU^'Tv=Ń1§Żµ™ŹÄērSµ‹µM=ŅO¾ƒq^T£m3į‰~‹Ćŗ÷Ūv,–yŒÄFU_ŸÆ’Z¾8ųåšśˆ>Õō&“ŠöīŁąĻ”É`=zÖq žLæhφæ5kI¬Ķ„…Ė‘ ć9ŁÆö*.Ōc×ø®ŗ.ē<åŌ|kÄ®O5]ĢMŽĢæ­vĮčs6@Ū]ɍvg„.ļ%6[¶ā{Õ²Ć)¾XżīyĻJ¬Uƒ¼r~ķ‡čh3$÷h4Œwš“ķÜŪ¶'~y4¦X…Š1ĮĘ;ŠY\“T«vö¢ĒLśs’©żØ,?g’QųSÅ×.æ|MpŗmĀI)H­nīø>¦æ³ļ żŽ8‡'ŗkė| › O>dl20.ÅqāéŻ&uÅ\›ZŃ=fÓÅŽš1Ŗ!^¦ļõ©Ÿā½Ēćė]E¾¹™lc¹Ūņ¦8'šż+Š¢qĢü šdŽ6i “Ÿū'ķ’š&$:ßҾź»Ņ L7Zmō7P²›ŽB+Ó§¹Ļ)u9ąm†\¦[·jł»ćUœ±]¬°{fQ»o÷5Łs.k3ē«=Zm6h¦±a%Ä-¹<1ōƲ>h āżrĒÅ3x~ /S\,)Ź0OįķYŌ} ‹?m~ź¶vŚE„¼ś„)60żć_O鶓ŽZŪBådD+άoŠź­ģTŚ—¶v-üKé\wˆ“©%±s·st#=+ÉØuĀ]OžĒ†ļ'Ō¦7v ¢¾čåQ’?Jö_ iQ›Q å.P)qY›ó"[ÉpŃCi4ÖR«†Sœz× i—“Łłp]¹Ž^™?Å[CcK©ŅAtļFąFAVīF‰|×9öļTsA:N»µŚK ±[’č[…nĀ€(ˆÄFŠ3׎ø SFµ‹•iad8ģhŠāYB*K)™Ō`“ÕŖŠßJ“7"Hs÷Oj ±Ó*īAp„²õǵoŁĒkqn|čÕż˜TˆĪmN;ŪÄ`br1Źćé]o…ÕēŠ ē,łRŪćå,”“źŁ7 ©>½( t^!I„F’5NC}kŖÓļ Įx‡–¬1ƒČ¦œ1Ūķ łˆąŠ”wb.ų$`ėH™3žŌī~ĄŸÆc2(€/ƒŒž xN½”Ž-ÄūbÜŁĪGJ9™¼v6ģ|(ŚĘžEå³ŪŌ•ŲxkĆ«„¢Ū“hź§‚>v9-`³ŠÖk É2ł‹ņģ5¢gfOLÕĘW9¤“:mC7„BåQ:õę«jz}ĪtŃĘå£ÅTdaÜ\˹rŖS×҇h¤€eÉąJžd/y¤˜ĄÜB*¾•u3łl„Ž£˜EFÓīķnÖ= ļ]ŖĮåĄ®+ƒÖ¦ĆLęµ1÷Ō¤ę©[ŚÄft%… lėģdۈŒø5Øė“y'_—ŒzÕ(°.Ųk67PķgYŌü­ŠąÕ9#t˜Ė`㜩ŖöllP½Žźü˜¾ģ÷ļT×Gņ’X÷§©éYˆā<ė{MQ`œ<³įOš“^„žQ‰BżÜPˆee$Ūå’ Æ+5›o8­ŅŠ [‰-.&ó ‚4œp:  „”@`:Gr KZˆ¾ÉŹ¢ćoŅ³ķµäŖ±OlćŸ#Ū\i¶iGRŲĮļō®^ęŅ[Dv‚éԁڗ+¤w_l‹ē%xĘ:Vݘ†(ŌI'®q֚€.bP”Ń7jĄø20 ŃȃަŻĖkXbĢ„e½)ö÷–ń25 nE #¾ŁzŽz®Ązā’ŅF“•MĘ"1œP›č®¼Õ’Ü ¢#9ļL[gdOq@å1Ž%@¬:rkBĒP’Ż×c+§µ\ iIy¦»“m:‰r­r·—ma3Ém&ĪÜÕÓõacμGāł„„Ś_+–lį‰ūµä7:ĆYß”Yԟŗ{šŠžTzö…āky4hÖ>ĖŅŗæŻŹFõQŸÖ”£s#Z “ć®*āź:…š”Rć=ź}š4PEMKÅfU7»-ŲzōZ˃T]@+ƒČ#½CFŠ:hoYŪJŃ‹Ø¢%—‘ŪŠÜ‹S2±†āģV3 ń’¤$ˆÉ⧚Ś[InĮ‡®+09›ķH4Į\ęČÉĒZŽńn.aWWhć­dĒ%ųäHWŪ±«m#ŖnƒŚJ77,Ņ”/%Ā–Ü~SÕ@©„Ōē±…į2©Ļ>‚šv!S8 ™od™ę†A6ćÜ}Śkß=—–ņ¼œr+OhhQŗŌ>Ō¤-Ų w®f·ZĶ’r…±Ą„)hl¤wV—öq[¤w2†,§ ö®6ę Hµ»…#^¬Ź¹×E2GK(\vŖ7„’;*ŲļŽŖ1¹‹gI x©ō’2 ķ‘įq“·zeÖ­öېŠ.åśÖ±‰:*īŽXŲĒ «×ŠĆuKy#GčXō„$ŗTĖŸC"œc×éYܓÜ#!&ŚAā²·@8+ƒu+2Ⱦųį«_FX\(–0üžTł@ŪHcß"Ÿõxč+ŠŌį“K’I¬ä`„š§Ņ“ƒčRĖ~×#¼Ģw‘É Ą ņr1]…ģŗ|ŠVÖhŃ×®3V8²&ø#3Šž…})n­ŃUĘ{ÖR‡RLö“ņće™²•ĪżŠ%häAאjŽ}6 >‘e 9#®Äqµ¼‹,uQÓ¦(4ČxkKŅ5~Õ Øvb¦3ü8Æg“х¢,ŠŪ‘€ó§pęGC*yшČō5ö|±ØxČ`JV3)Ļ<²0€ę6ĻŽāž<Ņ53²‰Woūc ŠFŠze¤[łž`•6°ĒĢ:WKi¦É<¬°*—Ļ\ö¤ŻŌĻIѼ1$Q ©—{gåć„z.Ÿ*#—¼:ÓDŹF²éJčåT¾x>•ސ °–5—9#4īEĻ ńę„ģ!“ŪC"’A~µćSŲmRńFĘ1Łz j}Ģ©ˆQ¹ʱÆōH5(™Ž4,G;»}+.MM"Ļ–¼c”Ÿ Ž\½©d·vo›Ū_ üošOŪ-WUÓ6Y¾Š¤tėÓÓ·ėZĮj3ą}^It™”Č]$łväžøäW[cāt–7 w)U]‹Ėt©Ø“);ޟ¬Ęd¤³1}«^MNAå"[v=kĶŖµŠøČŁ^ÄńM3/Nz{ŌÓjdµo4åvséQгĶīķ"ŸVņ"`ēƒPŖžL‰–Ŏ®ŗo ­š×ŶśN«m—"•Į;›_ :jŪėŅt‘RXcWTNj— ¾Ó͜žZ:ʜńŌ­rW\ĢNĆū¬p1ŠśÖZœĪV1㳕xl¶>ROj׳_²G*Ą7ķW(ÜqØaėŃ&©gse#–VčXō5š¼9Øx{\¹‚ķWģ/™!“œƒżŚē”Mć+œ7sŚ\Ē)o6dõöÆcŠõa40ŻŲ¼pH†SÉ'‘\rZQŌŽŠ|QŖiš¼SJe†%lü½9õÆŠĻ…^:mzÖŅhõ čWļoą`t }_į^iŅZ^ŪĢųĪOŽōM¦¹w®ŚA$É ÆÉ=½o#³Ńt?ß_CĈUßĮō­ėķ6āÓgĢY;f·‚ŠĘäJźq†Ņ“.ZŌŚķp…š ā³”l_1ā¾1h#-µ—{v#8Æ&’9”`ŸBj[&E9^ÕŲļ!t9ėT$ČĪ"'§µ ]Œå‘ģ22yć+Ś®[­ōr"G;'Ė‚[œÕs1rģ–6×VŠ?֔ūŹ{Ö>«¦½¤b‘¤‹$­ Q±‰VÆČņqŠɦ>ĶŁLēH«ŲŲ~l%Wė޵ĆjWsÉ+†Ųģ Ę:-M˜ėÉ*É'×5‡©[^¦Ó“Χ«)éõ¤R“f,p:J†Ulē9#Šč£¶Ņ‡Ėu±äŚHē„%ŪZ42Hm ć;sÓŠÉ«“vjń‘ņć$RQ²°b]A$Œ±,¬?›.#ø€ˆĮĮėT)FęšŪéöÖö·7sĮt¹fFčǶ [’„Ŗ[ˆ$Žęi a²yoz P-éÖŃ]āŻgĆ<×C=ž‘,µõ±Mƒb¶ŗ*Fm·bń©“œ,Yj×|%|×ᔑ +d“ŌJė<5„Ėi‘}d’ÅŒļi‡­žŠģ0Į®’ĘÖ'Ądu#”ō ‰³×<#cf®™1™K+WК™£Ü[<©~”Hą`Ö°25ļ㓊'XŹBĒ WŠė,,‹»[$ź’6ĘįķV#˵˜&ø”ż“Č^J®~ķc]IH±ØŁŲœŠ3Ÿ»¹óŲŖ®åi&œ°\ łŃēīÓń ¢ŹĶV‰Ļ• į·Vµœ–Jų–`ŪGQĻå@å÷ST“·¹ÖāŻÓŖƒšć<=®M{v–ęKØŽ2øüėčlrrö="’“ŧ !óŪq,7dœgšó&Ńõ(/‘"˜y!·6ąH#ŠR1lś³özšūųīūRŃṊÓTš†(š0Ųa‘ĻuČĻ5į?~xŪĄš×Qт*“mę¹ `äż3S)t'›SŲ|ńnšh“éf•żž-/’©¦jÖÖņ)ŹKĘ?uĪļżiSMh%{šōO¦čėknf·V\ģéŸĀ°µ9ü]„Ž&”epö·qŖ³RSŽßOē]P—B”u³7¬üa©x‰®īµY#»E8I¹%vŒ`ž"¼ūBń­‡ü, -?ÅqŪA%ĄU“Q·7LśÕ“Ė©Ńüeų]«\jé-ķχ··śD|Øć#'ßÖ¶žB·fļDæÓšŽę1„yzƒļHG“jÓęŃÆ¬Å²4åB ī,=ūu5ąZÕōšd o*ędlƒŽF*nÖę\śŲįüA«źZ֕$LšI3 ‡—8üqTü#ŵ•ü)6ہŠŒķ'ÓҬq’ ¼šeźČ/'¾gdŹ6ļ¾}ė·š¾„o©Ś¶•¶«¦É;W·Aķéž52Ų­ŃŅ źĖ ]źrwæEqpLšóŲ^GÖ}ØŹ3’=ūw¬ˆq²1tŪ”“Tš=Ę TbfcŠg‘ķ^•ż§§Y5†”QøRDØsžõ¤eІĘk>}GJ¹š[ĪØÅHūĞ’­IąŻ›IžĆQ¹ĒĶ‘…räVj›hßš×Äė4ž¾³†ćKøß…P{Ææ¹§fņ(äHlf ³%Aź(4Qg³\iŚ”"ĻZŗ»X§$,’gr1éĻ<•õމāķ&-1«Ź¶¤C»sŸ¼9æųZš=„ŻĪŸ„]Ą÷ĘvŖ8Ė}y߉|U„ź’Pš[”Ī9ßÓłŠ`ŃĀÜ^=“™!*mŽNü`Ø®§Ćæō™TéVś–ėˆćŲŁ8|ƒŌŠ NĒ-=ę².”¹u˜>Ņß)>§óØõŸišEc©-Ę$t " `QAŽÆT%Ŗ¢É ŪĖūĢšŁé]߇ōėK]zßÄ‹½ŲB¬ŽX9éĪC4Œš;?I­¾‰&©¦j‹vo˜ł\õäuükęNł5©oƒÜdĘHēiĻ#ó¬ÜŹS:æ Ķwk",Sˆ·}Ņx-^>Ÿāq£¦i³ź7ē œ`g©>€*‹šĀGk.—eāC½6œ¬Ūü¬BģóqČÅz‡/ķōÄ:‚m²ø—ļ©?J<ŌTÓõHšÕļnŽ)-¶’Łp;•šļĘĶ?OŠüGcŖhóż³Np]¢ŠPÅY»u§ŹĀ×2ļāÓ šĪ›ā­)gMD?gIsų•õ6‰yą?ü8K;ėŸQž6[‡–2$$®iģ3Q(»h)Dų’LųYāO k·ŗeä< [`ųĆGžŲö"§ń7‡ŅĮõi¢…”HĻĶø«7šhńøuėY(ĮÄįJœćšõŸZi—½üw~{į‘¢ ܊Ԙī{Eć[ǤEqnŠbĪƒŠā¼_ĘFņņĀs¢B÷³`nŒc,8Īx æ#OgÓt·KØV¤Ć²g•8’ėÓ4ˆté.%4aČįO9 ĶI£²Ņ-ćK¦,Ŗ{ēÆŅ½&ēįõ÷Œ4 „‘wŪÅūųa'fHńÅ3U.§Xųy-ķ¬ż–å8Į85Śü6"ŪQ¹³½!m$•C³§Ź}…;–ä}Ļyū7ŲĻąŁ|ak©[]Y“`ˆqøøÕń_‰¼-}įė鎙*$mąŽćėJäß”åŗåöµ<ĪÓĄ±×­lč~.Õ4Ė»Cqg”mœHeo»Ē„RÜÖźtĻÆLKʱ’K&ßį>•Ćėš4BŹGA ӆÉR9w5¢FŃK©Y-®Æ¬”·±¹–ŅU*X)ᇧåV­¼©Åuo6Žn^Mܦģńԟ~ōĒ#Öģõ™ģģĄž7óPc8Ć+ŒŌüMq¬jOͼ÷ ą/žüŽŸ—z‰>†2‰›ŽÖó\rńäg&“@¾žĖÖćMQVęŅYvÉ\sųT«™ņµ”ōu§ƒü?o_n“ŸĶɎD˜`qКńĻČŠź’%«ĀŅ/ ŗ{’:¤ŽÅ¦Ģ_ßj°čVŗ…”ņ$Hį¼ŽBc޽«ļƒ’ü5āO…övZ¬—ÖšŁ·ĪžXUe?ÅQ+ŚÄɟ0üUųW/†µKÆų5õ Ÿ·2Y¢7„OƵx.­Ŗ\¶»·B$H­@ōĒcY9hW1ĖŻź‹7”Ž\Ÿhü”¹o„hŚhW¾'¶ŽvŠąŽFĘNē©ZĒU83ØŅ|+§ŪikEĢ铌š=‡ė]߄4’ų4Üų“IÓļ%šć°Žźh„#h#ŗō8ė^U|OCŠ„Iõ=_šåˆšmKE¼¼¾µ‘Ģr¹ ōėĶu’ ¾ißutšŽ§®`I"™!øy6†pr>§¦+Č«Rē}8ŪQž*ųy®ü9ńõĒ‚üMØ[ŚX±2[HNF8äķƒ^}ā ź ėFŃO&ĖyTäKōżkĻŖ›Ōī¦ĻCŃüYmi¤I¦\ŪA6žĒyR€²QŽ»©žɬxjM{L–ÖÕPŽ6|öÅr+õ7öi£ę­oLIõ{:źŌ‰v²Ŗ`ƒĻZę!Õ/4MŚÄŚ…Š:)X~ņ#Óėƒż+¶“č`ćc¬Š¼KbĘO²Ē*L¤Čė÷‰ō®~åÕ5 ŽŠcŃž-ųŗ×Ēóčs]Į.0،‡r1ģkī/ ź‰-²<±*†5§1>Ģ«ā]Gģ—Ė Ŗ"擩Ō7Śž“aźÓóyĶ&RēmŖŚC3ļce<‡=+±Šę°Ō“z\”źMb)Dį~>|Š~<ü)ń?ƒ5¶}L[2ŚīĘƒÅ?žė ¼sāköwV·vs°ƒ#*у—ŲWEiŹ=ērŁ…”“HU×®įÖŗO ĶöĆćļō㯷Jõ ĢZ?B¾x†}{H·‚Iī!LP¢»żoH‹Äś5öƒØ[›č„O¹ Ą= T—@‹??“=g_ų#ńCOÖ“xfótż@L‘īĮ†-ć'=†3_Ū·ģßńwIųĖšÆĀ~5ŃÆ†¢’ŁÄ.FšŽL@żMrTŲļ§.§Ņ—?fø·œ?”ČĮ²;×Õ^×­µ[„Šduū¤Њå”z•$GńĒąæ„æio‚Ÿ~xŅŅĶ/W±‘-ĖØcąeY}ĮĮü œēĒĻ‚>"ųńāĀo@¶¾!šī£5³HŹU^ßv#`b0sŅ¢’å«}u_-?WĄĀq>X½Œ¤ÆoH<0ĒQYŽ„ ŚKqÖ½H>‡$“ $%Nz)‹ B•ĪsÖ¬Ķɧ—‡'w„G l0 ½€8Ēz ČņaĒ+¼ŒØĻéVmÕfd»{÷ō j,ˆ!Īåęü^…~ģŖpą}  ź¦XX’c$7]d8éŅæ}?ą‚_µüæ~8ųƒöiųƒØĖƏ°:(‘ņ–—Š9»oćķCWŠģƒŗ?²CFvyįßÓŪ`ƒŸ¾‡GŌk\ ø?ĀEyu™Ocü{įķhÆm%eŁ)Ź3Ė3ھÖ,n,$™ œI{g IŽÜdćŠö’Āé2l~2’ĮI¾YjŚ ×Œō;rō•E“ƒ’?šž.ģÜŅF#“pr×Mm f“Šęr1F|‚Wš{Ŗ!‡ ņk¶2±Å XöÄ|{ՇD–5.NÄĘ0½~µ^ŠĢ_/–’åQn2ꁞ:՗ĖŲYWhŚ ;š•ĪćĮżh&(|aŠØ={֜Rˆ\“j2½č:©“^Ć,¶°Ü@n õ“‹ulb8+*ō?…f?šN?ڹ’hŁ«Į÷‡Q#āo„DVZˆnZxW?Æ@>‡5UtĪźlż&Ōüafŗ†‹­[ŚĖ‹Ŗ°ŽI£H„Ą6:süĄÆJ…į¶F³āøa†ūėĒį^"'L^¤Ö3&—}£`ßčņƗ:uõÆż¦žx{ćĀ’ųS\ÓmoYģ_ÉŽ€³ŗ{uÆ&¢:©=OćæÄõO„?ńOĆķvŚėOŗ³œż“Ģs¶h®{ŽāŖ+ż¢I0€ē¹dĻRœM<¤fBp{W}we¤>ms§^ł³c÷‘øĆ+…mJA8\ó XĖŃĖ˜„Sœļ_y~Ģ"xl”œ[ØWVa¾¼W±Ičyõ#Šżišo‰įŠā+ėYÖ{)”d9’õŁk> †ó ±ˆ#Žx¶GŸR'CĒzł£öŖ²×¬~źŗ¦—֐Ń2\Z»€ą{ó]Ōw<ś§ć‘ž-–M8YFĶĘcĻjś/A)%µ»Ē?™ŽxéAœ’7Dŗø»H­Qåߒ§į¼)ØK¦=Ųž8ī!8šÜ” ŹÓéļ]*v2Q>C·²‹q‘f·Žā<63śbæW’d žŪį›7³µ:ڰl4`Ž*Źs¾†°‹G鯇~%Ė7Tӌno1FÖCžĘ¾ŸŃ¼1ö8£–6ŒƒÉ÷®*ĢŚ1f¤)mk¾Ū{+ölÕymź)—w˜ppAźkĖØtS8‹ķÖāęt *Ł’ ¬-¬ģģåSŪśÖf‡_įū”k•B¢Dn:t5·®i–×>Y¹FEd*pEm”œĘŚ[•EĢ̣ר®sÄz©±r³ƒ·ĶQ˜iwĘXDˆ»•°sŻkNIg  ēź(¼ģڟج†yn-ŽŚfŹ“×(*.Ē1w¦Km8xßĢCŌU[;/ōä}¬šō#v€“¹čŪE’bķ‘Ö­Ä‘¾ļ,ĄōĶ—¬£ŽedeƃŒ»"ŪWehŪDķ’2ē„UÖtOµŚL”r„y÷g#”hŅŖ5¬Įö/@č+ ‚č钛i•…Ø%K[Š]łÄ­’F=((ć|Xšœ1Cqfɹ]I =½ė'ƞ)žeE6Ł·cĻŹF?:dņ#øYžŅ…cl)÷ؖ&}ѱe"ƗM’-Ac4{™_xĘqķPłaŪy'·j‚ õaūɽ:{ŅZŻĄ\Ø )õ¤v°³?’Ł'ųA©ōĖV‰Dųļ@_ꨤÄcÖo—xÉ9śS‹³5ŒKRi>| u9ļ\~„c©4‘ĶesöiĮē=V®Fˆé4ų¦ž2fe’:ŌÖq‡F0Ē"gž3X›ī…§Ś}”Ÿ.2½Ą¦6‘rµŌBē%qÅszŻÅ½„J¬cuä€?Zņ >!]Ū^lFY¢-ŃŗŠčJĘRHõÅ·±Ē,JŃHpHĻA] Ī„5†‘‹ŸZf|½ © Ni`}= gvŽxŹ×œŃ‰} xņž¢µ¤l 0Ⲡ̽?juڹeŸ-œylµbź½Õ“ÖŽsÅø`[ŁĖx?F»øµūKŗ3’»½{ž¢¬ŅDę#эPŲĶBöŅI|˜¶ł¾Õ…s4į$bćšē{ˆČ“O…ŌµĀ&AĻ"“bXYT/¤˜b^ŁķL¾ÕKFķŠŽ;"“ aɧO{C‘‡¦ ÆDo#h•Co^£Ž¢Š“MBÉŃ>ÖfŒœ«·4Ęw7—ÓY‚]āLuķT¢×¦Š½ļRŲžįä›rE<ńWm/®”›kĆŃHź*TÄlZ^J¬Ta„]ŗ "AōŖ‹ø¤¶ņ»ø-ŽkŁņ@梆Ģą\goSėPČH påc,Œyā­ĖŖŖ—hÅ ‘@ī‚{k~J…=…`Ļe܆#2¢öČčjŌdIhö®#2G|u¬½FąŚm’xĪ܀6о],øÅå¼²+FXpkœ™RFU·%•zÖV)I­ 7øN&‘1ü#½DöR„ižļU#PŌŃXī*IĘsXž*“GŌķ¼·i¢v޵²ōŒń\[ĒØ:žäØ9§[äVÄŽdGō¤Ŗź÷«4JG~q\ާ©ĖŗIY›¾µ».§.ąĆÖ­¬H‰åŖ•aÓ“@HŠÜ¼Éķč­pš¼'Ģ’IgL䌅ä\ŽóSk”­Į…Ē\’d^ų¤Äń1¾Ž3čOSV„cFĻ^šˆ!ŌmV%ž7uĘ0ŁĶzm½¤—1³ąīĒ™‹DŚI ’"Óµ‹öŗœąlžµŠŽ¶Źx§Oø­S1až†¼6ņļU·ūM„ōCŹĒŹŲĪįļZYZĆ.ųą]DF#fŻÓī׊[­ćŒ(aåö©•¶vQ\ÆbE[‡SūŸ25Į„­źšiģ÷[ĀĘ9ēµy_ˆ~,hņ0ŅŻÖā\d.Ģd}|ˆŽ+ ß *żW1,xčk”±Ņ “¾i7ŖÆn85”£Šgē|ˆ«śv„‚{„”ā2tąāƒ)īwj»¢»Ÿ”qĶ_»d(# £œzPJ8/ųe5XL‘ĘĢrI}ć^>ްJŠI E&HäbƒX³‘×¼:-ŹĖ“Øąš8®fHŃa`Ÿx "ģ|ėńNÓķlѕŻņžĒšÆõ+Ōā¾ÓŃŌN”ē×Į Öēē÷Ę>…~÷—;a‡p@Åq–=«Ė4ūø­Ž=𓇷MM@ę=K[;æ.ćL›Ėn7)ļĒųÖö¼ūo«)Ē­pԈÓ:Ūäk;`öš®ņĄ.W9śÕyˆ¾bw¢IŒō¬ µ4Rīpśö—ye*\B†HI<ĒÕO¦+&Žźö3qčĘ& Ćŗ śäj­õŠ¢„åØ0°Šœp:W֟ ¼s¦ kKµV+³äŽåŽGmĘŗąō0‘ōµ¾Æa:yÓ¤“q•9ęœÕ‘Ź£#“Ąw“IE˜·¾L’|Ća=1ұēŅõfóą snzå¹ZŠN-;XĖyrW+äĆÆ7ųĮšń¼K£¼ö±Å§ O°³`ƒĶdķshn|/į“„EöIggŗNNqŠ„įĶRžĀā8” ÉpG|žuÉV(ģ‚=n¼č„‘ķ€NŻÆRųgā‹ė;˜”c± 9°Wš®IK”v>ļš/Œwn§ŖN ėļxæJm6pYĮxäŠÖ›0”złį’ˆ™`ŠEĮR6°ķ[7š“Ü’X‚; W\69‰,ī-Ł1"«IŽ8®c_œÆīķŪńśU5r£ę_kŚžŸx^iE“ņ»…Ź??B:śÖ…rš†oŪŽõ&²œVÅ85’‡'ø‹+µ vEpQhڈŌYuŽ<ćkˆƒøÓōóm•’D*Ooā®å4­ęѦ‘–+…?xż+D6Å8HŲaNØu‹·0.qœńŽ©&y½Å®.’ęŽņUR0ў„śÖ…³²īRģOŅ‘&šźPD ±;GaXöŃŻĪ¢ÖbƒÓ­ GĢwölńefWFSƒņńŠø,÷Ä© +1ćÆCA¬CŸŌ“©"€q›ęĄćėXwz\ńA$ÅņąwƒUn§'ö“+!…üĄ3óÓ56›ØÜģTŗ!œ÷&ƒT–ĒMl¶Œ¢E Ē< Ś[3<{Óqł¹ī(aʌ™ģ€sµ˜°ągµ%Ž”.&f•$B8Ę:š3q±Ü鶉iˆČ9%äØ2€‰ī;UĘV3šŠÄĮÜĖŠ Œc©·ZT³[«¤ŒFyzŅ–ę'œ\Ū„“ņ$Čš¹%G­%“ P|¼²ņ2y®f‹ŒM4h%ۈ2ÌŅÆįįd31 (=+Xlkc©µµŗtTķĒNµŌi³Ū“E/ķ‚2Œ9ģs[(Ü Z®µkb!ßöéXš‡:ĘĮdŒžA.6"lė¦å)³QĪ@­;]:Śł3ö-Ś…3‰ńƒ°’Vf*ķņŸA^E©XÉk8fŹēi4m“0ę»’Ś`w¬‘m< ”}ā\}™”«Ÿ­sµ©“ēGžį[z¢É/É5é–VÖMd‰|®0 ¤Y^]Ł-Ł„ea•žķtöpByŋ3Ž("Q:T“¾·gć9Ē ś×ŠzF½c…QʌCĄ­Ń‘[^Öl§· o+ä0¼ĒQGøxnćQ“©ķL,rwŠŸ6ē߂rqŌ×'{ ŅfīŹr7×Ņ“e”2Ģ#ŲĄ®+¼‹Jф k Xž\ļ Œā€8½Sƶ·@£ŖOŽR9øĶ^Ķ옽©gˆƒŠšNVłńL—z…ÕĶÜ.ÓŚ¾B¶~é®wĆ <7pĮ2ļ[rH’^˜śWŃIœž§ŻžŅķõæÜߔKV(äWˆ6<„ 0’NMxvŸ£­Åč0m•;pՃ•Īi@õ/ ]Ūh:ĄÖ“}.õÕR_(ķ$CļĶ}ā_ i?“H/¦ž]zā/).VL“KĻß4‰tŽēĪ65kZMŻŹ=“”Žū1øś Ē5å?|1é{%„±Zj1±7Nćų½Ś*;”|ń+ÄshāĆX¹’įć_)NvŒŒĘ»}Ę;LbÕäóē‹<ä,­õ9”Ē[ ]Qėi«ųoW >ŌC²4WĒ›?Ö·WEē·¹ŒĆq„ø`L6{R2œĻ-oŁ[kz”–®|‰„ȉyEö¾gų›į8×ʗ–qĖr-ī/7Ɗæ4xčŅŖ20öŽēŲ> ńNæa£[hŚżÜ“ŪDe$P~R8ØnüI Ł\†5·lķŻ»‚kTO3;}'U±½·K¤¼(żIąŠóˆö–—Ånķ`µ–08lw9īh3qg‡Ś5²ż¢%Y\eHäuķPź:ōŗMæ–г8ėņļ?:Rvަ‡…Šų³L’źį®tų|ĀØHī_„{‚<¤ÜJ5+ŪŅ5-±ĘŹ żzÖ2e)“­’bZéhmäĶįr§łt'ėåĶ{CŗŌ.n£³¹ p„¼¢Nq©śš)ßCŌ<-’·„4‹‰üY”Į­³Ę"xÖL$˜qĶy­īÆes«!ѼæģČĮTG\:z~•CP=N=oOÖō9v{°ݾ]»żžµŃĆįdѬ漰yn­€ŚåĒ Ÿ_Öµq—üsÆCssh`±µs"¾>šĒ?Næ„_Ō•ąmSėR.‡Ŗ‘{\[š²Œņ0h’2LJµ/¼śuįžŽQ!'qĪzōļÜ5ņ.r-ķfbČßå t?L¶"O ž/kė ℹ‰>žĮ×é^3oŁ£képĪd-ĻoجLĶŲ§¹•–öĘ?)s¹¶ōÆnųEńC^Ń.e\·²¾D}–ē$N£4Ņ5¦w¾.†MJgŽŽšRĢØ«€ ś ¦³K˜ŗu•ōŌö:ž0@?żt„±•It=SÄŽ0šęš4ū=FH-ĘćåŹųÜŁģsōéT®“OųŪĆ·¦]FŹ V'hĮL‡ćŒ‘ްömjr93ó¦ö“­zᓐ‰X ½8=?u¶vD?lŃn&†grŅAœ)$õĶh¢>fzLJõk¦Óä°æ¶ŽYųĆšN?śōĶ 8”ŗ¾™Ńnłlē£óŖq H䵄“Šź8ž±ąßŠž!ŅÓPŃ­|Em¦Ģ2RI‰@?ŗ\{Vž%ø×nÆ,Æē¶R¬d„ެøī;žœ†é£Ļµ‰#¶˜E(ތxcŽ­m.ōóCąd“Ī}Ŗ±•’i{õk{Icc¤y÷«zƀī.µ‰—G{ÉŲšē ƒü©ĘØĢXō‹V“HŌ-§µ¼…C¶ō >}+ŗ°½Š·0ČŖźqÓ§\ā8żFņK»©‘ŠE6AœW”xC±¹ŌmÓ̶(Ķó3 Ō’ŁŌėž²ÓƘ‘DNwćÆē_;üPŠ-WUÓOŌŚx¢mķ°`1#½iŌ” Ō5«]:Ko] “»|¼ö¬Oė.uÓ§jó$š‘ČĪzŠ£į†÷D¹ky ‘!0Iüc=…v^ų“įk? jV2h–vZŠ w}ęaՀ؝¬O%ŻŽ Jż£`ÓīµɦÅs`čFöl$mӁōōöÆÖ"æ×5ėŪ­68WLlō O^¾õēāf¢®vŃĀ]ž½”| ŅÆtČu4kŸķEM²«ņ§>ƒÖ½_Ą>°ŠmuXµ›āœdڳ©ē×Ҿ_g±C–‡*žŠÆufµ†x4Įrå”fŹ«“éė]dæš—|/Ó®4atżgĆ7d?Õćן+Ķ–&ēgÕĶ]";S¦C­ZMkä3c—[Ūņ5Ļźv°jĘļLhćv‘]W~DmźµQ•Ėö%Ækš÷ŠŒšÄ“źŗł%~d čOq\ĶʧqāKeÓn“Š«jŪįyr9Ŗ{Ę)3•¾‹WӐ_,J1äŽ õéśĒ‰>`æĆļ[GbnpšµĮ0¹qdMr÷pŽĘQ×'8ł‡ Ó”įLF£$6šŽpŕÜG­z‡rŸa†ÕńåĆ(ꁶ;Y¶e-pŒŃŽ„Šņų~Ź%˜ŚķĒ'å hŠīŚ _dWq»Œ^›įŸĆg§ ā¹hĒ ŖŻØ†źŲ¾Ÿp. ó60)x9_ķģĢ×>B|ȹĖ+HI+>ĘRGóļŖA=„ĖC*“J§$e¾£µPµĢw†pįf8;W±NI­ %±õGĄæŻZź³­¤Ļ+lū<ŹGP}õƶ4ęEuqäƒZ™CsĀ?j/é—ÖMć=*Ä’l„ŒĪ±EħwŻ v9Æ«’ą”_µż’ĀĶšƒÅ7:ü"šģź‘C<˜k"¼™ķ“ō¬T7‹;iŪ©żNA0¹XŁT˜dQ$MœīCŠ×”ü?ÕSDÕ~É0x"”‚Ašć’čm$}_ivÅ!»µ—÷‹†V”Æē3ž įūÜjś^—ūf|;Ҽշ“6~*‚ņ^1ĀČßīž3ō®,D¹›ū-“ūÆs ÄžGüG¦ķ™."­š5‘،×U-ȒFC nµėÆ#ޤGcdgkzzūÕ7GY¼2“į”6q€9ŗg)M„ !;”ÓšŠ®@ gō $EŲ¬‰¾PzžĀ¤Žq„¶ü§<†ƒX–PFūĖ“ßéĆaˆ ~œPmģ{[nĮ“ŠV¦—­źŽÕōæév^!°.-®-äŲє;æ,EģvEŸč/’÷ż¬“æŚ’öXų}ń6×R“øń…„²éŚō1¾L3'ŹwŽ ēčĆҾ»xžŹśXę‘6Éó©Ļø±1ŌŌ䃚Ćß^ų;ĘŚeśļ\¹†ä7B¹ą~M{Xw„™ēÖ?h~ xÖ×P“ŽĶgWĪ,žYHÆØmuāWvzWlbyu§M¶ņ繐U3Ķ|ūXxĖ_чšrˆ8”Q•cƒŲŌNbŠRĘŠ95ŒĢZ+Ī ²E*•Ŗņ¬-*(•3éYɽ»ŪHZ"$_­I†—‚6H9A)ŗ…YžSŸ|Ö}ž­r·B%q· |Ā€=NĪ+BĶÖå¶MŲc­ršÅ„nqWŠY4ō’Q#³!‡Zōż;XwÓŃ?är+P9uµfŗwŒįó]\0C•Õ‹”Ņšžµu ʁ‹Ø cų½ėoĮž#ń<šÜ’k`–€žģ`ä}h–›}/mØK~‘ĀŖ€džĘ©Lŗœ"¬øcŲÖRŲ“ØÓm.Œ[®T“õ­{Č"­c™L¤‚S<ŠĄE‚7‚™€•qĮÅgIzņ© öļ@ ćÄį„Ž„O©Ü­Äi&Ÿ0V_¼1@›±™ß«¬ŽäŪć8#­j™!¹€€Ą•ō ÄĖ!w¤†ķWRÖIPDą+g!Ŗ\ˆ®mä²\̊pqøwŖ-ØI"ˆŁCØ>”( é,Śņ$ė’q^e}{$,ĻęŁIĘ&ØÖ õ1SÄ ó"Ż\+`×Is%ž£l„X1<švźYƒok©’(Q•÷r¢˜¦-4³ĶˆÓ9;ø„¦—ö+˜Ä‘ z²ö­ ģb•Š8I‡PqȤ˜^ 𦗭Y5“±K‘Ć)Į}+Īį[Ok$r‰gTł¹ļZ©÷Ļ]ЌֶqŪ;oP„k\Yå“ $§­O“ŹĢš[“7©°ÅpWz“±j2Dm[~¢@8śQķ¹Øš€~Ļŗ>ä cš­8ęm‘88śT¹04XŹ9gR1Jå®ć_0y«•`÷¤4®yƈ|5%ć4ö”Շcė^i'ƒõ™®¦·Ō,ö¦>C×#śVžŠŽ4ō=Ą~¾šÕיså-«° 9޾›²Ö¬ ‰L %@ “½”2„b G^ŠēhHL\ćžq\­Żü6Žņ³‚¼žN*̚±Ž·¶š›ļ‚į$SW=ż+#[šŻ¼‘ ,7{t„$ī#žŃ4­6Īķˆ õÉé1ىD{JÖ²`\‚6PØĄ.J‡PŽ#JØŹĄy_Š-ŽāĘš,fFŚvąp=ėā Ū}y5«ŸµÄįp@ÆZӘŽ;Ćį½eāµ[“Χ Sļ`Wæé6Ÿiµ†yÕ\ķX¶3¢·±—0Ź'­oCÄWqŌzR2“Ō֎åĄX9Ęzõ¦}©Éu!±UČ/Xß,.ó…ģ}+‘ń¶™o2-åŗ#>ü–Rv<{Rß}–Ūą0 šņ;ū{›K–Aµ2r3Ž‘¼N3Åŗ%ž±„^1•;¾¾Õņwˆü®”%ģ)åó‡ĒŌŠnų«šõ-|.’ŻcÖm„)°yL°ī0kęMJŅ IT,LƐrøŪ\•NŲ¢ž—sķ½¶æ†EĖx÷ä©ÕŲĖÆ\Kp׌z¤w«Ź‘ņŖœw¹¦µ¹R>æųMāÅÖ­ķaŗ}µcĘįÉČ+īźŅZł$’‚ėéZÓ3”n}šäö±Ay§Č“¶A!›ßųoā ¶”2ĆwZIœŒņ>•ŁLä”OmNx"¼ŠH|£ÉÉč* ™mo”7Q¼R)äķZņ³3ēoŠWÉoi.PIFI$WȾńĪ®·Ka}öˆZMź •s÷N=„ł­“Ł\é密ąÆR8ĶgµĶµōęH™YøéŠÖ2…µ$ŠøŅ5T†=BL°÷ĮéO†ö9”į18ź}MMˆi•.&‚i!’)‡£ŖųwĻ0ŽÄn%`£3ß« ÆWR¹Y¢/ū˜ūĆėP\eÜ·āÆź³i‘j:&£ 1ÜZHhČī{÷ÆbųaāŻSL¶³ŽŽęYY#†ŅK6?:Ņ6±r•Ģ/üEƒÄĶwfn§µŌćmŁd#Ģe<&ø{m2oi­<‚+į!G«„WC FĒ'©ézG‡%{}Ed·žķGĪzdō²ÆtM ·¼µ·"J ŒrC×ńiXžcŃüsgspc–I&†9œ!É {Šö=N– «‚§kėUc*’č|ė¬ų‰¼1¬AēĮyå;¬ķÉļŸĀ™®]xWVÖōcYYտ̲<‘‘ōļSČ(Ęē©ųĆĆ~(¹“›C ±C Üs¹F żaų—A¶}Ī Įą ’­T‹žøó”u¹rš"˜ÄŒz¶=Et?būsÜ ™Hw|ŠGlPbåm °xgBŅ!‘¤[+x|¶2cƧæ5óƎaÓÄ}­„ŅŽŪ—M²ŹĀA, śÖnLŸh{’ˆ“ūOųŽėM³øiŅpÄ. v /~‚ø=ÅMhęę+‚²«ƒµø ÅLUĦĻ5ńĻ. Õķu[Q™å—iŠ7*˜īÄt⾆š&— x›M–™}—=Ā,ėĶ_.ƒ‚źy7Ä o7:b-횱ŽDnRzcŪ­pzw…u'PƒU›ķK§•#—8.zƒŪŠvHź„Õ¬z–ækjˆĘhĘHZ÷oųĒJ—I¹Óg–|Šg?)źŠ”YēŸ“‹;ęgµšŻć2c'rzą“ Ā^'ŅK¹±Ģ…Žāx=‡v"£œJmhĶķ'ĄzF…$Ėid-^%;«sÓłŅėzæ†ÆÄkØiz|‘ɱy8õ§\³‰šę©­ųcRVšä·Ł Å䌟jō¦Šļīķfń Y‘FöBBĒœUāz†ž.É¢ŪÉo5ŗł/Ā é»­l¾ń¬7–p+Lą·–~lūóEŗÕ™ć:Œ4ķÄzƄī,<›¤|ĒhLöĻō®WæmJ:S‰U ŽŌ(ŲŌ½ŌēžwūZČ&có?lč֏hÉ;–ņœīYš“J‹ZĻ-®gKW°Šłb]¤£ ļ¦¾yń^± ō{$ nīL‹ŠéüŖT•2Ֆ³©ŚŪEł[• öEyā÷‘˜ 1 gķ-Ū…ąšĪE„cŃÆ®āÓŅā<Ē™cŚ„O ś×™Žj·ŻŪłzŚGnD†%|=‹wõ€ihß5Żg\Ō£k8'‰H\"ķ|śŽÄō?A±£˜µGd™Qc†Y‡įZF65å>?»šŽ£gq2XÜ“Į¾]Å>ē½}æą?iļąkµ=/ģ×¶‘ˆŽHĪŸķó“TW²¢Dݹ -ĘÓ(>æŹ¾> ¾K{€&@ą+?\v¢,\Ē)į_jž$ń|‚'qoČ]ĒŌśW°ė’ µ†:ķ¼÷·rƁc‰Uæw‘éŮęīk\EaÆYµ¾Øģ÷€U=1ź x§ü)<&ēā# øć§­]Ź‹ÖĒØžĢz_…|Yiw§ųÆE²Ōmć˜DĀbKƃŒšO<3įŁų“ĆQI¤Z6].xh8ā¦shŃ-N§Ćšf‘w¢Ēp÷±E)ÄfG*ƒŽā¾rųŸį-7OÖī5 ŒMå A)(xķ^}jķhtR§­Ļ=ŠōKmKVŁ<3nfM„†'¶kģ é“}&{ 7ĪƵ[¶>r1’>µąc1wG©A3Ō¼C/„,R9¼6·¶­"ęX¦`JŸAŽÕĄé÷÷×÷ĒNµš¶]#Ļ'Ō łŗ÷lõi&wŗŸˆ<*<=a¢ėzœZµ«–Ž}€IĻC^ ā’RͬŚkι=x­©SfĒ•čVÓé„’Žņąé¾af…Ü‘ƒĪŅŖźwK¦©x† t½*ĆLÕf’Ī@Š †Š óĘ}kž¢.3gŖi¾°›ĮŅkŃŪOe0Œy' ģ:ēÖ¾Zńæo£uox²4±’]ÉčH’õSŽķRŗ4¾k:„·Ž“YōĀ×vŅ”Ü<¼ąƒĮżk쟌ž-ŗĀ²]Ļoiöя'z‚ĄcGqČ®ŲCŻG]Ņ?3'ń •޽w©Y¤Hķ#o0 gŸ—„YÕ¼euiLØ^×#j2ą^kЧHå”WCkBųa§Į4pZ[ÜÅ( ,R(!Ž:}9Æ.æÕācsuh¬r1; ØÆF#–QźV‘$¼…ž2ņ|įJ'$f½óįĮgĘ3¢iztS$D3ÜJ,½ĀÆØ«”¬%LżųGūųvÖõ[ū(g»rY÷grœśÓŲWÜ>żŸ¼6?ŃgŅlšÖUņŲȜ/Ņøg&ĖŁ“eū3|:šō’j:6‘ķĒŹąĆšÅ{ƒ¼o¦G$V–ėonŲ-•Ą?JØD‰Tģ{Bh‘-¢UÓ.zŠÓŅ4ż=cd¹‡2ēåqĮ­Œ}”-ģqŚ3"’XU]&(å’Hę*lóĒ”EĪMq\DƓŽ*ķž„oj—PČ$„˜ä}EQJ]rYeL[iėšÉ²Ž/·± ķŠōäĘjk·Ėka*¾aŽqU<'ā{Ić’ųŹĪ’ ė¶rŚI€Ve {’\W%H)' l̤Ļó¶ż®’fæžĢ’ž+üńc\4ö76”Ū ­Ż‹P >ƒń5ż“j¬z+Æ9¦¤„F<’µõėųœÕ<Ģˆå æ1nywŲS%B D¤Ņ6‚O@qų×öĒŖéķu§y9óf‹C"ńę!ä~•Ļˆ»I³x»²éZ}ü‘ß\Z#Ž'Čł}yŸŒ<+¢‹=KKŗ“K» ˜ß2żĘĒ~5ęM›Sā½gKÖ,ļį²ŽK›k‹'żŲ9å{s_”ßšQŁž/h-ćū @Å#ID·ļ@ł³čʈ Gó“wmm 9Ž3 Ėņ²²`šqŠĄņ .–äńü«Ó§-:،EDŲ&„†=é)p³m9ĒB+G=,qɄ³$l5ĘĶDÓ#Ⱦb0™¹łO¤‘ĢŪ€cš£Dc–鎵ˆAPŹ…śv¦,ĪI%בģ*Š‹6l§; ĢAb@©ļäž[v\żšćaŠņžā”‘ŻIŸÖŸüēö»¼ųŻšžk÷v/ńĀŸŁÉ!+%å°ī~028äWģ¤ś•–³mm©]Y‹|ķK„^6ž„šóqjīēl Iō;{k7ŽĶI¶`æ•_ÓaūmŒwHˆNÖRNqҾ~¼Nˆ3̾/ü>OxCYšōеͽ͓±”Łøø*xĒå_ĒÄOź?ž'ųÆĄwśv£§Ł-ōŸe2Ē„a’x?LĀø&“=:ŁŲ$é żzÕe‘§/ ÄArIČ銬š±Ųå”~ŅĀŁ•¼Ē:Œw®P¶µGda“±ł3Ōjõ°Ņ8Ŗ£ė€5¾²¹Ó“mF÷Ģ–Ō$' Éč}ėöĮ÷0źŗ=†«-™H H'#Ķz} «›ŚŻœ·°FÖ²‚fh§Xw/;œ ꤻšvŸpņŁĪ–óDąŒ€LM+ĮV>a“1Į9Ąķ޶„—, ‘ÅD£Ō©H[Ė-ز£l?ŊŠ=ėnJņGzȂōsŲÉhRź(„ÉĆ)kĒļāµŅ/]mb„’Bć®M)Xą¼YØjЬ3i–it7"ƒ‚W¾=źm(6 ³ĄčĢAŚć‘ķ@6}7įvK-ŅĘķɌ©gµ±¹i%XŌ’rėA'5%¢ ‰‘XŽœö«PŚ»:Å’½yķ@ :l€Č¹lz×3©@"•Œ`  čŠe‰ˆ+aÅgÉū‰@Źžųé@ ˜DQI,‡ŒŠÜņeDŚ6åž.:ŠX ƒķ(UŽSÉćļéķnķš?*Użļ÷ØFt0`Ć=ęŖ],2Ø*?Tw0*›Ų`|Ä-čMfÜjB"CŻ1źl"Ž•ŖŚZ\*Ė!@ĒÆ÷k„ŌµD—pK’äTOa¤yõŽ­yje|ŲČ sOŅŚćQ‚fTƶ+#d­”<lp\;Énb“ŒćÕø²‚Wd;t"ƒ9īi¬—>XdfÜVdäp¬„Ÿ½éWX‚{„mœĒ'Čć=+ĪõØV³žÖd[‡ĘpiūCh-œ—ĮƒHÖ&ņŚdW}Ā2~U=ėß|5ö\ʊŸŽŪŽŌQķ ć$t÷+kŖīó-ŃXŒ+sBF²ŹÄĮS”¹Č“:r\)Ł!ß½rڬd ­0…¹źzšµ!Įjy$²jZuŁ•/&Nq€xj‚Mrž9Ć䁸ē­Q©éŚ4ØB²H€·\ŽÕŅ}„„2ĘēxēéA2doy¹–ŽźeæŹŽ`Źž5óÅ?‡7Æ|/4d·šĪL\‚i©XQmž’‡‰­õVm>t‰,Ƨį_Tü7š{éģš›,Ń1P¬2pŽųü(•Bš=ŲN±F£Ģ$Īš;„.­“œĘR¾†-“®Ē@ź+2;«_“,rĖ“ē¦j ęu~u‹¢,r®ņ3ÉŖ—wH±åU׿­3#š“ZVcm(e›¶G¤±†żė}ģꐯ…×— ‰õ©/ģ$ ŠYā#=:UD »kPArē§Ņ½ōłVmž¹é[i¼Ēa4 õ©®n'– |ĀÆĒNŌXzņń¶įäw9ēŠĖŽčÄźP’¹Ī3YŹ6ƏU¶’G„+wĻz¢Ö©ø°MŖO©R±‡‰°Ē)œqZö›qµ'łVŠW…óÜ[ŗ“XņĒ_ZĄ¾šIpū›yāž€s³Kuo).Ä”üźFŌ’uXÜĀĶŪ5ƒ±¹bó¼E",$6ŅÉęĶ"C6żĆæ½8ĘĀ.NnģāBȝ«Č|g¤ų’壿ѯc¶u9t~ė‘Ņ­h3WG»w‚pGŸ€Ø5ßi’Éo(LĘyėI»Ż3ŪJ® A/ØŖåöN;ŌJK”Ÿ)j;ą£)žĄÕi„’7Yb' ēÆZĢ„BIńcˆėŠÄŗ±XĮ™cß­4®QN8tŁžŅŸ¾žę^'šźŚqnĪžIą×]0>ań¼wzv¢÷é{+[ŗķ1××5āZž¼×r…‘ä*§w®Ølwრ°ęĀJįZśĆŗ „–žZCöƒÜ?:™…ĻA·ˆXJ yj@ēé]3¤Ź¬#ŽćŠV2Ąļ“m}JŲ“*@ēŒVUŽ‘ö %Ä!%S• u¬łXĻEҵ*[²ˆV`6௹½JūOGd!¹aG#“>¦nŹŹ¹ZęŚīW'É'9ĒR&ĘÅ®”¹‰mā`ßĀpzōÆGšŽźVB)ēV;yūĄP_³=OOњęåÕNÉCcęsVŃ­>É%ä);w$pk9K±2Œ=JM8:Dq ąJčbWŽ@½k2 R‡r;v«kēZ®#O5xąņ Ø«‰!ŗBŪ …Žā=Ø{ōÅzCXigWŒŻ›?z›‹C1§Ń”„3yļ\…ę„"ߊø9ÅHņŚłDĀXĖdV„“QÄÄ2®Ž”€ÜHķß ¦@Ŗ—‘ŚI‘wž“ ;”ö‘+–>½k.’OĄšĪA#/ĶB—bM2Äźš\#‘F9V§ösčŠžä¼Ź=É R—s2ÓY]$ćl÷ļ]t¾°Ölä>—pžµ¼v3Jś³Źn¼9s§Ż#Ć; ”œčÕ¹m}«Gmå^Ÿ°ćīŠcpC#³”žĖ‡—•Ē&ŗk˜“ģ—pķd8÷ƒ2:Ó„»•J²¢õ98ȧŻčšĆ Éē,ƒŠŅ ō8{ėpŒī mē·ćž*Ņ“ŪĀŪ-ąóĮĪT`“T„cHĻ”ČčšŲ_”—<‚:׊ŗ3CslOP”MėX^>YĘ{ dń:³Ō©ī:dŅ0Ż”ēŁ£j4}y"¼÷Uųm¦^FŒšŖ7Ź w5¬`Z±¦ųĒH½ņ#»‘”Ų‡ }G’^ŗ>n”’7Ÿb ˆ8k¤Iiu)‘˜ĮžŻ«Š×¬āŒ¹%IsŠÉ±ĒMĮĻmo¼µ`eFQ½N÷5śą?ˆVZŻ„¼Ö÷!ovuݜQNM£čųĻR’G·k{k»lüīN jڟ^½Ó'{›RA<ŖƒŒ×e)ČōßxėS×-e³¾·‘QO–ĀOOQķ^Ó¤En°…¶¹pŖg…Ē ®ØĢĮĮœß‹“Ė+ŲeKĘ \Ē5ņÄ~ÓtķA•“ic÷WÅ)0Qīv‘ŚĮ, ½N8µlhj[ü‚ć[#žµ„÷ FĒÆŚKØÅbčTd^Ų®Jęo.`žHߌœ*8]CZ’ŚčąóX2;T·!DOµ]gÉ ō­`‡cĻ/üCm©NWO|ĘozÕŅō½GR¹#ęUŚN;U– {‡<1<@5ĘŁąm=zŽŃŅĘs,'ĪŲvłc”÷żiIŲµn‡j°-µįHÜ{p?–mcS[¶³ž%ķµĻQX§a“sńkŅ*’¦ĘŠźzĒēSOcyŁ›~ݵZŃhā/¬4ć|ŅZ(ŖŒƒŒćšĮÖ4‹‹ˆ0֎ŠŁĖŒSä#™ģmųB]+N–Ś-A…¤ŖŽwo>ł5čŽ%½Ó®-£@¶Ÿs9@üź%jyĪ—woĄņd)†čGZõˆg±ÉüJń†½āŸ28’³neržJ¾ |t>µ›ećX<5!¶æ%möēļą1ī*/”‘źŅĒÄ1ZM%ݵŚ>ÖV}뽓J“ĆÖD‰WA†…&e)=Œ};›‚š­“d.NŠ™Ķg|EÕ.4Ÿ" FYAģG*¹ĘGެ‡O=—Ä©wŲõ=%Æ­ĢLīŚanÄq^yäO©<–Rµ±ĻĶž~”Ī“LŠ›H…Æm8 ‰€hćqĮäżk]ŁR#,¶²±”Ę;1ō­8®ŠŪĪń1VCX £)DņŽk•Ļīg”[Ø(#Fݻޤv®wįw‚uh¼M=ϊmP 2yB@~ęsÓ±©h•LżųŁ”|.ÖžÜjŽ»‡BÕÕQl|Į¼gæ­~O™oV{³Ķ$š¤Ū ;¾ƒó§½“>Įųką’ kZ›]²µøBɉ "U÷¦+ɼ_|’ ¼Ws¤xnŚŲé÷aü•lE9Éż9¦W%“:æ‡śE÷ī¤5“¤~tŃīäg§Mrž9¶Öōd“IŌtłt²e8Rxtģćź+)=K§ 3‚Ҽ3=õ¼bßķ lŒ>cœ6:s^‰„čßŲ÷°C.„,ŸÕĘ'§_ŅŖ:īm~‡GāųįÕ,£±¶šhŌŃ O„jü.Š„ŠaæżzR„Łļ¾(Ņ“fÓ¤øŲ¶·±"åvćzć®+åßųVĘä™tˆē™Ģ~d­·[ŪAS®Gįm”eufŚ@äp+Žō}Cģ05å·Ś,¤B¬øä:zŲgź¶ZV‘uŖÜĮm‡!—¢ˆWgšśö /QvšHå]Ē  ™©ćo ųSĘSFK+ 5f—8 K·¦?בź°Óo#“P–].XIįSϵ#ŸŽĆīīĖP‹\$)q"–)&Ī ž•ļß ō_k@éēMmAš$_% ĄļĻjO`r=BÓM†+¦P³w½R„rIśWāO"(£’Ęå÷’Źń‘·o½`e6yŒ×.ÅĪÜu#ų¾µ†·—ß,Žt‘BĀ”ėõ«†äĒ}M+½B×]…ln/&…Ą#89®£ĀÆuae—ŚL†$1D¬wm^kKƒZhlišµ­ųŽišOŹ ¢Æ K]Zī8-[ĢÜ㯭bA£āßŪčėÖl³E †o™\uvę¼śŪBæ‰ē‘Ō2żŲ'„!Ř×Bś;‚¾^؈à ~G5ź¾ŗ0Z,s§ś3Ćœ“ÅčėćŅ“ķaķU”‡,:„`Åš„™L1źiok*¼’z@})«u5ä<ÓāWõ ]iņBęž×ķ ­s|°śgŪžkźļƒŚćZŁiŗ…üĄ°d ėÓ#ŠÓ‘ŹcÜ>.|DŠ­tu·†ķ®f9Ć+m č:WĢZwˆ¬^ŅW(ą°Źī9e5–„{–Å0hzü½¼’$±æ˜<)õ5ė¾$ų}ćū aŖÉ¾T;ćgaö¬ł>ĢäĖXŸlö2Ć$pÆĶ$gØ>µ« 6šå“¾ ¾D‘ø#nüU£®…iž¾½Ō4·k;‰šƁӌ­xŸā*x³DøšĘ³%³DŖX žø9÷¬źK¹½8;ŸŅ^KW±h\€č~HϹ<ÖN£r-umn%ÕFɍŁēƒ\±£ws§™"–æ’ ńµ¹YäøŲ>taŸ1}sź+ŲƬXĖ'œä‚šżEuBŒ„TÅXī­'Pѝ„ņk³Ņ|«ƒŖ-üč·!<‚p8§ēZó\ź4ymčKiźÆu5Ÿyst¦y¬“+Ė;•pØD=ųĻ3C'Z¾Õ.u=2ėS’oµŚ°x÷dƽļ[ńżæŽ|6“®ŚYßN±.}Ÿ¼ ž[ī=Ž[Ą“‰t]_šuŽ™§ßŲ}ČÄѶč†8Šūōƞµ]BćP¼šmx"¤’ŹŽWŠ{āŗéŅ‹ÜĪL»ąé’ ¼Wc®]źrŹÆ„ß–ņ¢ÉąĄė^ńńkćn‘ćktMŠŚöĘčæ|÷5éĒ ¹N:“>61¤DE°…Éł‡ ÄņsK}Ø^\mÜ}œ ­Õ4Žw"[!Ā# '‘œcč>ųAāæKŲ”²ā?2D,žŖ?:Ӛ±ś{šö-¶ŅµM#^ń5µ¦¢«–EŹÉŒpW&æE4Ÿ…^°× xoG†ĘČõ^^ćļéÖ°œÆ ć„xŪI•S”ĻōÆQŃ“ŪU„[ˆŃÓ®HĪ c©”äm]é3[˜į³8ÅD%ŽÓe»)ćµls7Øé57;bR}³ŠUĖmsģj<׍WÜfÅ.õXoQ^2‰)õ<Ę»ÕŽĮ”mr1ō«ŠīTaÜā“’j¶ž"G–u£:ćų•½½«Š ń ©,VīW+ʟš­K±›,ĪÅѦyÕ“åŽB N‡‚;V 5+Yåµø–Eł9ķÅy…äf“æj2ŪŪnĆ``}i Dö½[¶™ķgó‘ŗšk#ĂÓR…–hĆ`‚ §aø²/kŲó[G$²Ė™Ää_Bé³Y_q9hĻ#<øÄ†$ö»œo”¢“”Ó®4uRŹI„hb~V’ĮFg‹ųNļ[šū·ĮČźČŅ3’1Ļn¾õü½ė5öu5¦”°˜äxƒ•?9Ƶk…„fCĢO°Čැēå+üUöGģįć˜Ü?‡õu’IL¤lē†'צG!öRD‰Œo'ƒōÆ$ų¹ą”Ŗéi©Z}›ķ¶ČĘ"S 2R:Љ£¢œOs’‚PžŅ2ųāT’õżj5šö“Å-‚6Ó ”¹ėĒś×õkįŪ«»YšŚš ŪlgœĒé\µÖ£ŠōĻM&…Ŗ9ŠI>Ē61žŠkčū ”s3)!°Ač}k–ęLü>’‚ļžĘ‰ń‡ąĪ—ūU|?Ņ Ēď (‹RŽ<(ŗ²'ēŻėŒ‚=Śę ؗ¤qBß½ =O?®j02js¦ś;ÆFæĪęSGmž| "ž µJX×iFN’JŠÄˆĘ‰`BØįqüŖh]W%¾g8ĄÅ)4H»äffū śTĶåF7€X’: ŃXLĮ×䦝Ay$A*„©øęƒ¦›.}ŗóO’Ż&ak«@ésk>ģI‘¶šPś’+ūę’‚ZžŁZgķ‘ū'x3Å7{üu£/öfÆ 6d>Rī½Fq»ŸVØšŃ£¤ż–Ņõ‘ŌyŽ85…ā=+ķVÓłqƒ(”b¼Ŗ‘åˆ'·ÖĘįnŒåkę’‰>š’Ž-5Æ,Š%ģ%ķÖA“c;}‰ägæŒebœŗÉWķ}šŽ’įoÄ{‚śEͶs9·ūR9<~@×ČOÜĮ‰Ś§¦:×m9õQZH‘d,X2Ÿüv«I$J Ɨł°NqŽŗN ­G²ļ$*繨ФEävDlc'°­#ädC’7ö#ŠX#c++̦}Ųō½,1ÉTģüć(,ž¹™łyj§–_ʾūųkūCė~ū'öZG©iĢĆĢ‚FÜGR=śWÆLóź£> i¾4Ó,®¬ó ūHĘ3ŪėWš;ź{ŪłqȌ¤)āµ8¦ś5cį[ķ śg@]]Č*£gڽ×Ā~µÓ KØLhĶÉP1×­Rv9¤śg„ZĪUó¤‡N:|øXČ`sZ©\Ģ· Ė4ØĘ3ķY…®|õhŲž¤ņhøĶēĶ“36sUå‚Kr%qź*e.€O$ĀH<²ŪŌĪ¤±6ķŗ#LYÉ-£YŹ¹ŲŁĄÉėY Š“ūōD``›³ŠóŁ<1{¼C¹mluŅčś b†ā$ó‚{ztzŽ‘ØĆk,Vd¶”ĒCYžÕoćq¦ßĀė0]ĐpßOš§aģvi2‚²uę³Õ~É; J”óŖŒnJ9MGĒ7Z~ŖšeĪ‹t֒ „Ź ¢ū7qZsJ³22py«äExįe J‡­KœnYqœwœ–¢ęD7BĮ ˆ|ƒÓŅ®[Å:FRŲŻÅHÓ2®ZX㹃kv5vŚāAŹ7NGZ£Y,g™<ŲU‹Jš[uxČBŗöŌāģ4S×tŲµ S»łW ¼ŲÆÓüā-?X™ļµ —“ŒœŒūV×ģŚ$Ÿe™OœćoJ~«wuŚŹ®#œZ $ML:Ŗ°b:āÆIö[¤ĖM¬0r(lz_ „¼ĻuhåœćƒŅµķ!l=`ĘHå­Ł˜”~µnĪā)™NÓ·Ó4ˆ–„w×6Ń͵'cYęłŅxŠØh«zh…3”Žń­CؒŌVåā\ntn;cØ­ jbÜČ© üżkĻ|D^{9>ßāļ[ÓäOÜÜÉēĀÓJČבéö’=ŪGrYC8Šš+¦˜±e „Ž×:„r0n±škŗŅ¼wk§Hք³LÕ‰ÄŽoŒ²éś¤6·:MŻŌ‚d!9ś×Ӟ×4Ķf. tēiĒ„'§ŃžÕ4KNeœD@łG­y÷޵»ArĶm4.€tĪ+>FQēš‘ĀŃ0ĪqČĻzą5Imv¶÷į³žŪjZ4PīušŠPO1еՙ’ŌĘkS6IęČTsŽ)… +a—v8öØ'”Ć“\{ ü‰ü¹qĮ rkRĻRk€„„żh¦nüĢ0ķOū4 Œ·ĶŽy¬§¹I¶”ˆdeÜĮIZÉŗµ7ņ”Lźn\J’Ąko u¼§ū§”®ƒĆøšŁDK—`9ŽH4]līI?6zŽõgR"ī5R 0ļHĪlʃOx€p[žÕ£°¶B©üŗS±a_×8¦åÕĮ-°÷­¢¬!̌ö÷¢IļmdB Ā1ļÅ05£Ö^$Q’ŽGn•.Ŗ³ #ŗń‘@/±Ł·oōÅMŗG¹Ļ½CŠŲW&Ex¦ ŽøŖŗ„Ķו&CnĒ 5*ĮŽäĪűÜÕČVøl“øT”¤ĶxīŻÕŠļ\ö«÷W¶÷b6†'N0ł9É MÜ ŗt…ŒĘŒzńĶA6›~­•’HŌpõ­Ņ°āģIµ*“£Š_“@ĄĄ±ÄĪ8Ę)ŽR9‹į=”,1żń/sSŪk„[“R£ų±ŒÖ|„öž*µĄÜ.r5bēTóa¬ÅńŅ©RīCc“—VۘeA8čEyuķ„Ⱦ–_"O+;=©:eÆ2ü¾$ŠōĖš¤Ą7ŖēŸē]Ÿ…®bø <߅K…о‡¢Ēµd½ŖYH<цĶ(īIĮųĪćQ°ÓfšŽĶnāB[å61ś×Č>$½“ńµĪRhp `CÓ„nm ƒĮ÷—p¢Ś™å‘BüżkźGwļrʼdw؛Ьtšö—„ąņ߯=ėĘ|C£Ż8w.ˆ£ŽqXIhG6§”]Ū"³[–)&søt5˜ÖŠČ$·»…¦V®gSꉞŸEvš(#ŲÄRy’śėēÆč_ščYyPĶ0¢?8Į\gęÄ Ķįļ\Åql ņ2žŽõ…¤\¬®č“„!¶ŗ“Č­]1ņ³¾¼šĘ£ ²ė6·6ŗ†›„Ę~d>ėןi{-ĢķcqŚFAn+žq±ŖFÄ:i“ø†q#8Wó0Nq[ÖĪ Ģ‘šņ;W4Ł¢ŚĘ…ݬmłc%Fqеs3$Wv’1p“)*Pø})ĀdŲę®­?Ņįąņ'Šń޾°ųIćŸ?O‡OJÜłJy9Ü}+Цō1›>„‚q6Łd<ć?JŲ-ęĘ®K:©EtÉ+)#_H»†ŚIš6NnóZēR…NČćÜ»°Ē¦­b×Cu>…+ČV Æo$}s‚rMxgĘÆ\ų—N{‰m›$>HtL1c9õ÷¬6h¼Ī­gAæÓędTø(ƒoĢ1ŒwÆ;×¢õ€%O|7„©ŽĢõM+WI6W°,AĄ]ē#ØÆµ¾^闗±ŁŹöĖpUbW•\ńžųėY(ŲJ,ū|čz†^+yH#+‚ģsųWcĆ­[FŖ&PTäwį#Hǹ§¦^ŻhŅ2#&ģńļ^“”x¾V“ŹhŁX0¾¦»!!8Ųī×FŗńkHɐ>bxŸqš¹˜­š…q»qąfµ1r±ĘźŌtöŲ#_1N¬–_±H»Īf„Ą‡«±„gćÓ#•¦ex‰ĒĢkRĻÄ:Õ܋Å¢Jy5G!|Ī{Е(‰CrŸZē᳂ņ7†ģ™»OqR)Ššm……ć 4ū+0Į)Šs^ńįM»Ū„LY²¼µiŁ.GŠV–ö—īµēŌÓŅÕ$ ŠČH ŒUXJMyā µ•“×q“äß"¼|y·ž„Œcµ.D\„”Ļj mp’Ē#lc-XuśA9¶ŗf =>µIšSÉk»*g°<š°—Q]”EĒ•ĄĶ8ĆbČRGŲĄšHČÅaÜĮęžąN©Ih"›i‹)I™ŪÆ#­fOŖ"1IWz+x³{J»ŗ˜ŠJG8­uW:ݬč±Ū€’¦Œq@¤“2[PUgÜöŖßk’īPøsLPbwŚW‡¢dÜŹvŸļtÅyēŽt‹[KyϘæ/*1ļMĘĻÆ¾,^x;Żh†ń¤“Ė źY6śžUč~ń·ÆK,m¶·*Ŗąć†$ö­”lkģOE†Õšs+H<¦<-tH‘mŪ ”#ŒzSlĘP±žÓ¼2•g%O<ö­T ,–Aå“ņóK™™Z…¬L®]¶>03\=Ō/ u`³ĄĒœō_­bŲÆo"toč ąmC“`ĄĄÅŒąö¤;<āÆéĻeoøåõȌc5.(Ö õ9?Xéz…ƒŁĆ˲N%g#tÅ|˜¶Ž&µ×"ŠAi6š€īÉ;³ŸŹ³q:b“=ŪFœMm"?øé]U“vV‰†sĶM‚P;HäHķ¼ĮµŒr1Y’ŚĢķÉaÉ|żŃėA‹V&’āŚė2Įė\ōŗ¤RÆ +ĮļLq&”¹bŠLŖy錓ü«tŲbs·ažōÕĶĄ‚lI”„6bµVóż#Šs»®į[Š[ļóYc ŽjüvÖĶHI2ąē<ńQ5ŌåØ6Ö×Ńjzc@HeTżĄ* /SŒõõ®14ų!¹[˜#…1ÉĪ6·łĻė_C)Xāņ=ģ·mjšÕÅŹŽE™KtķŽy5FÓƖšåŁŌQž ؎ĆcÆ ļłVHØČæyØ%¾ķ6iŠ]ķ;I8÷¬Ļ,śg‰ęŌŅ;g8 $”žSģ§Z jTų§ą÷…ü{įd¾šł’Š„–;ˆ†×^2U³÷†{{×ÅŗēĆ?\Ż^iYÄeHiełrŻ žzÕF]Ģc=lĶ}Ā÷ŽšóOqwjšmPb98śWB¾0ŌuŲ£ņµ)ēbk±ÜXŲ5¢gT$ž¦dŽ"Ōō[Čę!Ģäg “×µnŽxžż>$ÜČäļusł¦LŚ3bÖVžĪāŁ¤‡Ė²ļQ’qĄĶy߇µ]nm]ÅʔֈŒClēŠÆØØš2=+^ńŲĆ ä±+‰\Įīj}+CŅu{xī Ō"·øpwB£Ø=óY– z׆|/t»-·A-² ēļ(ļ]ž££hzE©xaŁ311nYqÓšę“Œū‡³9ļ|:ѵßÜF/§³[ˆĢP•ˆ0IĘļLę¼ĒÅ-ā߄ž>“Ć>)°-eu·':‘×pĄĄÅUѤ ŗžcš×ÄZ߉-/åÕ-„Ó®  ĄĶ¹ķߏ„r_¼<q„ŽŚ}Š>iŹ~č|­ļź9©ē5ęIjhųńģÆcø•ŒörüŽ ŹĒǧ­Xųõu Ē„iŗÅޤ6ŠBcK•‹ē’;{Ņs9ŖI_C˼'ŖX†±Ö“Ū‰’ģ"ļŲJ+Øąq[Ÿµ cÄ:=¤°ySIŠŪĶ"2 zŌyCĶ>ėŗ•Ž™uč±yœäFzq^Ćā)žĶ¬ÜĶ•ŌŻF³^łĮø8Ąēź>Ó!æ¹·ˆlˆ“yĻ«ƽŠĶn¼1 M-ŪĖ7˜ŖOĄqJF*:žā/j•å«0Čw³Ž9ōĀ5“v“Ē+;ål†#‘éX³Hǹė±hÕ“Ż6ź_³Ķs d8?ķW¦ü6ųg—Iaä;ĢįJ³g8ą})]ďG‘ ŽAp €‡ī±Æˆ4§ŗ±¼øYāKhIe*Ą7–;ćn“Ó°ī{ŚZX4‘Č"ˆ€ŪĄĮ?JłŚŻ[ėśō“}§Of(0Äąōä~5¬er¢wvVv·Ē©F® qėƒ^Æš‡Äז7ļq„ßGÖ•Ī $ćo’®ØMæ|G¬A⓿s5“‘¶BŲRż ?©ŖRYĒāYŚ#£²–lu$ūÖ.6ŲĪHį/<1©é³5Įv¹9_˜s’ė®.ņ ė9Ś «+Ø H…wös׊’\nÖ(ćŲė#ŌŽµŃibÖłvp‡ƒ‘ŠS%¢ Vö/“Ha*ńłFćT4żNößPY-nd‚Ee“åķƒZĘĘ©#Ū“Ż_Pń%Ńy&Y÷ņ®8\÷>•„¬5–ˆQ D«“…ėÅg-ĒŹŽ:ļIH Čķ$/ „eĖ«ź"Āŗ+DźN1yĒźjFuŗN·:G©O ÄįŹœ Ų¾Ōõ„O¶bI‘Ź <ŠSL®ftW¾&³µŅcŸQŅfÕ"9ˆ.K·¦+Õ4Ÿx\ŠmG·m?T–ŅZ*`EŽ=sUĢĮ^LJx»ĄŽ!Ōuė`š‚^éˆ|ÕMŁ*zćš£ž]ZŹĀKŹrÆ&PįĒŹĻz^Š|ģ“[š%ÖÆc„^čF]r(Éø…É)/׎¶ō"[iŽ„$Pŗ``g–ō73ō6lõq¦Ć<‹ø·}Į¶’õ®&óZ†īŽXmåx˜?1źi9S…Ļ#ŗ›\óĆ]ź77V‘”UCŲ“×Š¹¦­Ķłˆ#. ‰€ÉÕƈŖ’=:TƱÜYü?×um¦[Amœąå¾•ŅO Ē£ĢėtQ'īē¹ÕóXŠ÷gb§c¾»ų—įĻxXųcQKxüM )Iā8m£·גėŚÜŃibó]¶y‘·+īk“•³m?Õai•|Ą—ļ œÖž™£Ø&ŸØŗ‡vīā“„™ļzo‹-ü ŚFÆ›ˆ•NŁ­%Lķ£<õ/ˆ šĖĘ^³×ō%|3¬. ż–@»×øu†ŗU`ä|»ā;«'ŠuŅäSs }×_¾Łć…&ƒńY³“¶Ó’ź}*ąØīŽ {óKŁ3jr:č£Ö—³gZ<÷ŗńjiooGhƒ$y\<œ{ׄėóé:œHĖHæ4?P=¤UŽŗĖÅ?"ń:¼sŁCt %‰Ā¶:äuēō®']Ö“C5՜v‘^iįŽÉq‚Żz~•ŁF“8źÉ#ņ–‘Ģę5>AfeņUI®£C·†ŚÖH˜|‡ī`pµčĮ“pNCÆ.ęŗ1Ū‹0č‡!‚å¹ā“tŸ‡Z毪@l-Їu3³)$ 좪RGÕæ’e»ļGsŖ\ßM§³+E@”p}s_Ŗ~ż˜G…“Ķ'QÓÄ3«¢ÉŒ#\ć‘ėÖ±u >Ōš†Ž›kkqjX.Ņ ‚ūW°A¤ii›ƒ¤½r=i§©œ„Šó/ˆ¾)_X°šÅÉÓŠüń)ń‰ł6ĻdšĄ÷ģkhÅņGŠ÷Öm>”.ķ'„A•Ļ9óNÆ}āü_ y{¬™ćŽ7?”4J=‰åg°lŅ®­Žų¼»…Q½MyżėOmy=¤Ļʞ@ŲHłĮĻ’Ŗ³.1čw~š§Ū!3IåIģOjMc@šÕ¾Ļp„.p }©yœ½ē…õ k_¶%»Ė|¬ö®fнµČ“kuĆ ;›KēVR¬H#ó­“{”y¤n9ć½Dö§e$*’A0Y—’ y¦·¦ZK4Į!I:u¬ł™¬AśNƒd Cew±”s8š©õki¬ >f׉ŽAq“)ģr$ÜŖ•f^NV½ĮšÕŌ¶ÖŠN¾\±ü¹!«xK”ƒ]]{˜¢µY¦q÷ļL·ńpd}>9¹/PĄ“œžŒdŌ“+üä¾µŸLw‰L“GÉĻLż*χuĖŻP·½²`Ž’†d<ī^ÕķӝћGéļ€ü@ž#Ņ-5$øŒ¹A»iäwÆA6Ö× $7l©n˱ŽÜć>ÕR£óļ↔Ÿ ž Yų—IkŪ}BŽä]é÷£Ė&E`H#Üz×ö#ū ~Šz7ķš@ńtr?‰ģ‘"Ō#‡˜”W#š¬$½Óŗ2Šū9µQyn#“vIPõ#ļW¶ü;ń×öŸdŌ(īā!ÖĪįŽµÅ4L¬z½Ī‰”xĆCń¼Mm÷‡u›I,naeX2‘ĻęGć_ēĻū}~Čzļģ£ń’Ēßu(ü‹ź:Ė.Å«ČHUn„€qjŹ2娟}?Uś™It?:µH^ā ‘0Ąž>µ…€C®9éœwÆF28+Dj¬¤•`xéĻZĻ™pą‘ņƒÓŅŗ"īscØ0@ĻzdšłL†O½Ć…0,Įå5²ˆä;·Ğ*#ōeߊ²Œ8Š€J’*ģt.Jš>˜ ź§"ÜrĀZ&tŹpyzż3’‚J~ך—ģ›ūYišk×>x«^¢¤ķ†ŽF?$›zIŚO”5/s®2?¼{µ“ÕōųVŃĢ֏ÜZČļ!ł~“†ęŻV@<ä[=MyÕ”fYį_t?.śEuT²ø)ĻFÅ|O®x>ź;™ÅóØ[ČŅDČÅw©U³Ž*«æwī1Ō×b8*@"ÓĢ$ķvĘ(HĄtߌgŽ·¹„o)LŠ„ü¼c֖8P$ ²P9>¢˜‚#–œ.zę“ÄÆ ītAX掌'=*{rŽBSi<śżh:)–Æ,"¼°šŽl:}ą¬qó ž™’ą‰?µgü'>ńģ›ćZüI„Ō|;9|‡?ź—?Ż9飏„Dćx“tĮō?”Ķ?^½Ö4tó-ć‹R“Q ¼a˜GįŠę,|A.™ÆĒ„źN±ŚŽÜ1‡‘ž}ėēq4Ń×Mž‘å—VĖ|Ʊī+̾%x.ÓÅÕōYāK‹ øJĖØ$ń^<ćcŃ”3łżØž Ļū=|XÕōՊ!į[ūœŲ<Ē!9ŲGć^Mf°ßoiĘĘ’ėÖ-{ǧ «‘~å NŹńc'šäµ«„ÖMÄ[†ÜŽ”Č-Ōp`ˆ˜×8ʵ-ķŽėĶgĀր(xŽ ébéÓ äNDdż’Ę“mnc¼Ņķ—Qµe™GĶ܊ŠYmT/“»ctČéZqĄŒ«1+¼P?ŚRFŹ7øĘq[FĪČö%ĪL}i‘6VžŅņE"tćń¬-gYŠć(?{ Ļ8¦®ŪSĀä]]7Ś e+Ń[œŠß™cWU€ö=ŖģĘęR»Rą°8ĶkZj[Ŗyn“.ÅD·3nå}KQóäVŽ÷8ĶS‚ń£Ć$€sŲõ©4ƒŠ’īėķh„Õśj–;iF AFīu=ž±)Żk›ńƉ`µ†I7Ę·r£Óź+XÅG‡ųC[×5~ä^Ŗ¬ ąFT’Ēƾ†Aä[ č<Ģtv3kR¢¢É… OJ‚į„Ó]B¹ž*Ę[UKˆīY¼É>|÷=k*x.„ąĘћ|ņ1Éś“^cbŽ)ŒJøŻPŻ\\[©‡;H ĪL­mw Ąyó÷…t1N"%\ {š +O¬^,ܶõ\ć=«†ēķwIĢ»Ił³Ž‚Ō¬zo†“=üø®#Š“Žµ[SÓ-ģ.Y"E1äöāó”ķ`€¹ l#”­ -e!Ē#ÅĪŹń‰ģ×ȟnīĢZóŸė“ZŻ­³‰d…˜ć…÷¤j™FŠĘü%Œ–ć$ō5VęŹāĪųÅn]ß. 0;+;Ď! ”ĒSM¼‘ ĄåeĪUŠuJķ§>B×¼MwØA…6ē%ŗ“Sé>(Ńā·—Öhf$1“ķ]QˆŸŚś[œ ˆō1p+ĘõƦėik3‡só‘€¹­19#¹Ž÷ūR‘~i#Ö¾†ų[āTŅÖ(5‘1„„ģÅĪP×^ųĆą»/ZĶ}ŽG ±žö}kį‹» ō‹óĘ!nIZ ‘^…ō2•5©öĒ„ļ4KK“Ėtüb2øŻ‘Ķ[ŸÜGj‡b·8Ē +¹=)R±elY„Æņ/##©„»[øBžä2±Ē„ ”“¼¼*„luķĻ5mä Ģ-/UT²dt¬œŁ×MŸüLšüö:Œ·©eŪČäWéōÆ(³š¦‹|“ܳGky|‰³ļz×=J–;”±nōh‰cTdŒc‘Š£¦ė÷:.¢·Zo›„Ž'ÉęÄH÷ėsOfŠĻ‡æˆü7¦Ł^Éo=ÜQłe˜|ĶZś7Į„.ŠŹĶęĀxeER’2”ļrxKI֑Z=čVP[•>“§ĆŅi·k'÷ĮäŠŅ'%NǵxBęÖk&˜#Øq÷3Äŗ¬z\pĘAČTu®ČlrKsˆ]@ŻļMŪóŌW3ā –&Ń銠ŽēˆźqA§l“Yš`Ģx~xĶ;Dšż¼76÷v0‹yU÷~ģcvAąžf³”ŗž"i£żńłŗuéQ[[ łUFķŽ•™=Ašrź~[ŻAŗ"Ū‰aÓė:†llTHĢ|ÓĄP0½t##«…b… Q€ óėUMą€,{w§`#æug$BMŌ«s_-ų«H×ü9 –0—öN łóžž”XӕžrŚĄ—l2BńÉŌēµd\ZÕq‹7¦›¼Kį­Nį’wg·\©.yAYžš¦£`óO·ßæpY SO¹”ļŗKĻ,PG:¤’Œ°ō­­³«£Ź=ņ:ÖfÜēī/‘$e•ɏ8ĶiXÜ"ŠI*籤f ‚’Tö•néėX7aŌUq+©Sœ)ļļAI®§ó;żÕvŸŗŻź„łMÉē":św¤īiČhI¬æc.ĮĒZĶ‹Q„\¦|Äł°ŖTµ°Ō ÆÖķš&q$Ÿé\V„ Äd…Į8ā¦Lй„Yy "Æ\zÕ2M •1’ õõØ­µ»‚kHŅāĖ·€Oz‹~Ÿ:ČvˆŸO(0“ŌÉøÅ®ÓĢ„åO„g)·™Ä“ć‡ĶA%ū…Ņ`-8»€vķFł€õ5Œ×ń“„[N“ÄW?+d­Šzj_‹O–å ¬3ÉĶKęĖd oę¶ƒ&Uyo>ŁŠB>ļ­^‚(į˜\,;S7@jš0s?•_xŠ÷N½»“‚ $‰£Śž«ėĶK®jI³d^d(,H1÷Æ <ż78‹]sÅ o „ö ÷¶ė”F6{•ō·„'°¼Ń"cuLœåxźqŪü*&}Œż/ūFžy£ÜLÆ?(«ŗV½k¤_[Z]€ mؤpՙ™ō_‡ü_.’—„s·µZ²6ĘAżkµš–ÆįļˆZåÉŌ/RmXČDŠķĄ\ś¾] ]3µ×>X6‰©éim+Ļؑ›żXĒQļ_Ūųz×ĆzŪčØł#”œ·ÄjvŹŚų³ĖÓ „¼¶qør”yĪI÷Ŗ0ŪC<šĮmk°·֑•Ęęj’Ā9°É%¢»\ē;HĄ>ĀÆčžŌą¼:ƒ<Ą@XādSܱéD¶-u1üKįi¼U„]i·‰5¢1 4d+\ūāø}&š–„ifĮ¦‹"ÉÉ8½g”ŗ•®| x<@öÖšĻČŒć·å^oām^÷DÖēµ×"‘-ŻŽ‘"CŒT käĪKAų¤m>ŃtłtĖėmCLEĒ—“$~͟é\?Ä_Ųė: ŬšužČrŽ`\ŗąt™““>xŅ5„‚Ńˆ¹uUÉ—ēøÆJ{ėmoĀ·:dꎟÓk¾Ąqī§µ<*_ ?†m&I»øø…G˜>lzUōń…Ģŗdz}ü äNĀ=й`ųćœt­TS4Ž÷5<ᘣ³½‡[¤É#m…Ó,AĪßé^«įˆśu•šš—‹¬–÷ĆrŠĄń6~^:õ5fź$ž#Ó^ĆM½¼šõ䁷|ü£=ÅxŠźWŗŒ×¶š–/°¹ qŪŚ‚Y‘Rir”µ ܅QŠ×©ųsXÖßÉŗ‚ä “2šFzóųŠMśų‹MŸP1ø˜¤ćåŽwsŸĪ²u_kÖ6ÖĖdĻj§ƒĪ Œņ:ę‚ālųŸÅ¶ŗĻ†“ļ°ĀÖzĄ;¤gēv:.+7ĀŽ"›Ou»ø‰mī[ū§;®h°„{ÅSųoÅzݜ·(D)Čē8#;±ĄÆŽõ?k¾ĀĒ»pÉpņoŠž£cøŠ5w³‹ĶY›o‘Ó޽7Ćŗšļšé’9‹œüƅ÷ æRć|JŽŽK˜-e….cluś­iß|Cń‰­%·‰.bÜ©å6Lć±>ęƒ^Dy«xŽH5mføš;ńĘĢtōŖķā]WN³ė0É©ŲÅ!!€Éˆœćü(&Qģz߅¼o”X.cø¶ø²ß‡Œ>×Qžs_Dų'āw†ą–ŚFxĀął÷[š©äF<†ļŠüuyksiqŗ6T0Ć+Pkę{k“ė5Ą_)Ī6”įyėS(ƒÓSŚn¼;dt_ģ¹åjttŒnė×óWŠ<–×’±± Ęū҃™GMUŃl£†s«mokz®!‰•I3Sļ_d|QųI§ų§ĄšOˆJX‹ÕE*ŸŸ`9ĒNõ;4ēŗŽKFø‰Mź'‘ųWƽ]:YĒŚŲ3żÜõżEI”¢QÖ4-FŃu'I„ėÜŖ§ļ‘čj ī ˜®#Ū ¹P pAϵ‰Q‰·„kz·…5GÕ,¢†ņŻĄYāf?0õLʽÅW—:®…$ŠĒ"^0Ü9LS’Šr}&ƒiŖ^X‹kˆŪz€Nģ€+f}˲w—R0Hž•Ļ)X„~„ķ6Ńb1Į&' ĄÆS> žīŹ(šÜB¬½Cgpõ¤¦Ró8-zŪP„ 1į,؋Ī3_G|:ų4²ų>OéÖņź8bÖü™$Ąč¾½zU¦mecÉu½zßIr—Į`æ^DDņOqX2üE¼E¾ÓĄ…ķ„9ÉžŌb‡r#‹šßÄ[‹M@Ūjcrą+©ĀČ?žx®ŪVÕžŲź^CĘķŲėI®”ģĪPÖ³×ģI;yræŠsœW&śƒŖČögŻ28Ķq՝‘½*f֍”ßkR žEn2xĻҽphZFggmak*J <ĪA>Õóų¼Mō=z0ŅĘ֟ćĖ[(“HÖŅŪqDŁ,§±Ļ¦k;TŠe¼EŌäfš”•#‘Ö¼¾c©ĄĢŃ~ kZj޶2]A–m½\ąu5āײŽiÓ¦›vD×ć>lH„ŽøéŪµtEv2œlAs|ŽńŪŹ‘Ü9åÓńØī®®lį dęÕ÷ žŪsĻé]TĢ%$O’ eÕōF $hŃqŒulV„ž±›]ŪCs=’gzØūŽÕ£©Ų““Š=õ4ŁnŅwˆ€Ņ‘ņ•ē‘ļW¼Oį­Īć~…<—ÖeDŠŅ&O÷OÓÖ³ö…)Xóˆä–-b8%ÖHĪ’`:r+ŗŃµgšW‰!ńę‘ Ż») ²Ē€Ąåßš­iĘūš{Roxļ@ŌēKļŪµ·–CĖd«÷ÅaųÆÄzGŠ"±Õ#ÓÄņ(Y$UŁē(żśÖ±„beYõ2#Ó4^ĀéēŸČ¼TʇåHö÷®:ņĪ[e޲\BĒkdō­éé”ĒR”œö—BVH ²1Ą»‡5x¾Å¼Ķ#cčģ{]q±„eŌū+ąģ­ā?_YOs –“NŹåS‡}±„žĪ¾&šv£•ˆ·¶,?{"Ę7£ĄÉؙŖš>Āų}šŃ#ŒZÉm:\ÄĄ1:f¾ ŃōŪØ ’ČŪ+E“&qY8ŹGE„Z?u³3)'!Mvé„Ļqh±·9ä ØĘŪåŠąüoš²ĻÅZsYźøķČąqQx7Ą‹į :;-1cŠŌŖØ0Ø\čöĶO½ŠÅI7@sĘy‘Æhöčé2*Œ‚:Š.K™ČÜŗ[*½³'S‚=P¶h5 µūDg9Ī1ŌśR9ōO„`²‚Żb’1ppEu^"Ņü?}¤»1CqĪsMEO”äƒÄ?f°k$[;«xŲ¶É8= x¾§©Ų‰DH„\'qMĘʆ†Ÿu2;€Ö“d×#&e€„”ŗ{Ō°3EĢģęXÜ õ˜—ˆÄ¬«‡ĒzĪčø-N[S’ 9šņkgföś{Õ»ėēŌķ-ī…Ų’ÜĻ·„8É‘}‚F¶IāmźFxę“ģ.īlĖ9ZŅ ĪQźdė_ļ“g5Ümu„4»gł¾h‡ÆŅ»9µ8µX4}gĆz‚ Ü÷Ųž†·3q=›I™ļķcšeY.Jaņ8?JłSö˜ų ąßxVņ[ė5[ĆæńƒŲį”ćŽ±Ø‘2v?š_µ_źWvv¶ś„šb©ÄÄŪ‚xü±_,Kl#Ųė!Įōā»°s¼lĢܙīæž$j~ń*鷭֍$k†Eā3żą}Å~‡ŪȓŪŪŽłŃÉo"‡B­‘Ļo­wJ7!žCńćĮŃx«ĮāļLåÖķŲDļH ž&½7ž 5ūX·ĄĻ–Ÿ üswökģöóÜ4Ÿź$8 öĮⳌu±µ6Ļė‚H,-„wz=ą¼°…‰²‘‘œVļ…õ‘§jĖ,¬V78r:bøf™¢>¤Ó'K‹xŽ9 ©Į5ł’®żāż£’g›>·/ń+Įē‘#sŽ[ć•ĄėĄŻų5fT•įļ]ÓŽQöĒXŻĮ*ĄŗGO¾khT䔳”|Ł=ė®8*®…7+#’ÕM¢iT;©ėž½«x»DļuHćŹØ9ߏŠÕ”o9V#kbT‘]!WĘŠsøµ4Jļrā@¢ū»O$ūŠY"Č­# $ŸZ#R­&ņĪqA¤BO4šJ‡^„ Ņ~m„WOĘŽl|šr¹ü@ę“;©ŸÜ7ü«öÓ_Ś×ölÓüāMNßž‚—ū;Q¶.7Ü@EõT~ ś×ėTžUŅČ®|™p =rb"lax»CMKO–!µ„B$½Å|¹ć½ ēÓś+E—R·ąķ8.¾†¼ł”Ÿ+xƒC²Ō¬5mSæ²o¢1ø*cö?Æå»öŌų!Øx3āš¾ŸmVrLėsIģ¬}q[SacąłcÕÖ6RźNøėYĢZ2»FŽŲė]°g-H ‰Ü’yo\Ō‘Č\Éŗ0Œ§Œsšé0±[ŹóŻiĪ1L]źķfü(2p±V†4E„§ańĢ ŪŽNMY·‰ .»ŃTąÆ"ƒ¦™³§°ÜT“×ō5ź ¾(x‹ąOÅü]š}ŻÅ®­£^Å9XßbĶįę!#®Fxµ"stņ#Dą4@ę«Åæc*Ÿz­œūŒņ›ųF9ŖRŽŽX_›{«Wxr3Ž€>¦śd3ŽĆ ŗF l$ż*֋ć=]ӒKW&$ƒŒ2ć֚C4œG"d­ŠūÖG*ČŠ‰0Ÿ„!6"Įg*ĄžõÕF«@D’/ւe•×–w‹Ī¶>g÷€ėŠóõĄ·­otV א®q»š¦˜Ņ±±¬Ÿh3¼jGr¼cš®–+˜nÜIhžt'U­“%ĄŻ’0-Ś%qµ½z×6"¹µ•ń™?•g2YݲjČ ¼%L‚7ŗGz†X”Ӂ ?7F=* RŠlm#…*:äb»›}’YČĖęĒ½*Ä÷œ*œż9Æų™§kó\Ū9fPąKƒČBzÕ)XÆĮ:t¶P„–,yĪŽV½BHg £2Õ9ŠĘtņ6j•P}+.{én#0ķ2ć;r9ĶAŸ[“Ć4‘Ō+VžŸx0ł‡ėH–j‰³‚2£¶+:õ¼Ó“7ļcށ*ĘƁ×ņ­?“C冎OŸęŲ©ö¶‘ ·ß§GdģåcŽąēń@ŌN’ĘåųŒ½pjąÖ|ÜCx aКfŠ= ŽB2ŒpyŖ”V“œnŽē#ҁrJu‘cŌįŚ„ćp^†ØxƒĆöœI‰ŒSØĢl§ƒõ “ŽbĒĀ:…—"\Āē$¶ £QµŌ­dG‘% ¾)“ŗ±c+JŠ“ą·MÕvi 0@…”t5 Ėbåb·ó+`ō5uÓķ]ŃcÜw«ē&,’Ę2ØTŽ­(Ųķøl>õ-”dŽÜ“l9Ś:ĢŌOš«"ƚ=ö£cę5½Óˆ2q†8§iś5•·™2:M¼ē Š;ŚyÓ‡•Öi°Ž[) ćķź(-“ē”sź*Ķʖįɐǯ½c…p’! *‰ō4Õ-Į¤‰Ō œ5kävņŪŚ¬ ³‘ĮÉÉ5ųU%Ūęа8ĶbY Ę ć¶@®~K%’as#aśdW8ģt²0=›±ÆBŅŽAŹ†ķž“é滐`#従ɮ䉉<7p+hlO)cL»ž_ʹYPŸŗĒ8śUŻAdȗiۊ”J':·n$1”'”źkU/']®éĒ`Ee'ŠPDÓj£błC üJEa>¢¢p®'Ö¤ŠŁžÖŽöŲĮ õ¬’,Ś€ŒĄŒżź@cÜY;7Śc}¤ēčń jÖ·¹ŚšŃSøŠdžÜ§£ ƇPŌ² aüŖ¹EāÜbߏ«Ü± øjȈ””ŗFRŒY¬ĶĖo.\f,ćŠrE«{;{ZÜ©l’W?ŅŖż’!;Ęnš3Ų1ąV“Š\dĻ½`R“¶8 Īk¾%xnYbš9!0LŹO±>•×MŒł#QŠåӋÅwƞ:bø«ĖuiBÆŽ=ė² „±™47VūDo" ćƒ\ž”–č4ńüŁWT60;ĶRŗ“‚Q4ćm ā­jž'ŗ·ø„ŪFāAéT ƒÅšŹió‘ĖgŅų~Kęf@²²sXČØŹĒL°;6ŽG“uŖ^Eu·ŚbrW½sCųžÕ­UÅ⤃ĘēńÖ¾Žšž Ņ!W S kžH ų”Ķpc!]OéL»ŅmfŹM IŪ‘\åEŲŃҼ”KĀKKrģ9ć„VŸĮśfš„,-¢U䜦„š9¢(l~ĪG Ęøģ:TĖiēgåuā³tŁ“w1.lŹHvĘDZQ_Z[˜h=ŪŠ~ĢG3>”qhŒŸ“®īUŗŠčtB9Ń –čÆ×®ČĪĪKy!h£“š4ß!Š·^¹ąt¦mꍬŲķU~Ē,,e•$Š'#:’RhWw'®:V=¾”sw)†KiŃxŚzƒA›‘ŗŚpŲAūꛧŽ]Ų^ī#ßn”‘čŽŗEõƒīHnŒO$×$Ń}xŽFņśō ŃC¹Ź_Il$vm»‡5“4֗3${YNō »ńH¶øÉ?­s÷{DØąÜVrˆ®tšmŌžK`ł$.ømŪ¼°}½w6Ö’¹,¤ŹĆ¶8¬£3E4Ż“ž;UėV˜#ʳ"ŗŽĘk²“3œMųQć;‹9ęÓõ%µFmRŒX>õõŦŒś–M¬‚yn܃ é]Ŗ]ŽiĄ•ō«ū ” ®z×JŃĶ%‚G%¼Ū‡­+˜ŗ}Œ9ģ&–0cŗóō®|—•̤:šs޳”»£Üć|o¢A¦¶ų”iĒ|WĒ7ö°Łź"ĪY#µøvŪĻL×Y3²œģmŪéŅéöĄ½¹›nK; ƒ^=ā«H–9®ķ[fļ~žõ3:TĶ_ƒ¾*oų«Aҵ <żiJJģß0=ĘæS¼94\‘5œĢöŅcļĮē9­āĢē#ź ė w&_=p8Ķu±Į®4Åo­öĘ7œŠź¦µ8ē¹ŚiZĶk¾#8īkŠ/täŌ“·YķŅ”… r vGcžkSĒo“é4 ^čAĘ©Ēß_É$„f,3ķҘAjrzž‰%Ļ—2²&sĻjŃŠ4łģ£o˜É‚NŖŠĮ³S^Iķ÷”!Ą›÷"¾{×üo$ā{RūāW )=Čę­ÅsĘo54[ˆā@~n¹wń¬É56·C3>zĮģSˆ-®ęŸĶi£;€‡QWmŁÄ’!ø3/NJĘä³£“·“„KŌÕÖ·ŗ9Ā6ńÓ"‘Š9K˽AgĆ č8`ü“č/ øY “ĢY³„“Ņ67lfŌąłwDÖߏ2xŖ·ž']&t¶ĖG+储ėėE»#RĪśmķĄ^9ÜyĶA-³6P<'”ņ !Ū@bETÜŃēp-ƒļZ"M“*FśU)XØ§Šµ¼hū'ŚFr:VdööKŗµX8f­E8±mmR͚[yŌžż«y/ŽpS•®Bņ*LĢi“ė9P©\n9Ķ5°ˆ,E%Lmćœęļ·ŽƒhwēõƒµÕƜdYīĪķļ@уŖjFyÕY# u5Ē_köWq£‡FcĒ~&ƒe©é:=„¾±ffA6äąrŌŁ”²²™’į•;|ÕVį­„Mņ¬ŠXŠ4ūŪ8“xn$€ŻæĶī29ģŚ×t¦Bē<†˜T¤RK½%ÜF=)Ėb$² H§„‹k0ŽrŲģŁĘsA©·Ó™6ž äU[Ø+wņ|™ŽIćœSJśŻŲłāOˆµ-.źźā6’=«” 0½ėĪ|ń™¾Ž"Õ°—ź8\ö5§!æ±ŗŠūÆĀzķ­öŌWv×6ī¶įœń‘޽ėђļLž#ņ«°ō4¶Ųä©U“Mø,Ĉ¢\‘üTūŪ 8)1=ĘśŃķŲž]žų.uK’ųHn$²w°*Ē¼rX× āķŅīźkībó7hĆrĄzžuō­:OC˜ƒG¾G1–‘IĘjģ|0³YµåŗHŠ’6NŠFW޾ł”٧6·:H/.t]DĢ’0glœ`ŒÖ»åšę›ØŚ’l2ZĒ»l[†7üžu˜'­ĖšE”n,¦¹ø’$V`nkŅü!”OŖ%®­f ęe=8 ŸĀś'Ō÷ķÄŅižžāźśĶę¬ńcļ1ś÷ÆĪ+ļj:‡ŒńrH{§ŻxĪT’‡ŒYķ—^Ö5;敭£u€I”ēpĪē\¢ßŲ·Ztw„cĖņ/?JŅcč Śiŗ¾‘§Ė™\Øåšs“łÕOŻŁhFāĘHcµ±ū£©”¦ĒäĻ ¾×f’ᣉä’-ēi…fjÓĮ6óy.ÓH’Cńf‰”闆}:HķšG%R>6(éÅ]·ńŠ£Ó­mmdū$JĢY™~gˆ4ņŻLx;āĪ‘…–¼Œ÷@“a›#®„ÓWš®±,ö²ĀĀŁŚ ‚Äv5›‡c)R<3ÅŚzF§$ÖVw§L‘2³1`˜Ļ¹ęø'Ä·:v£QŒŲ;yOĘB9céIG[2ym¼Ó4›½)Ąy5 ¤†ßG”_¼–āāĀÖI,?t.]· Ļ€­[”Ńҵ;ėmF.ą–Kl\ž½0+¾¶Š“M^żo4ż2ø.¬xÜKżzŅøī3Ä·—ŗz\Z@ĀŁˆ*wŒąŠę¼;y¢ß[L÷¶ń]L»j¶ ž•C3u&Ņf½&ŒŒĪFjī•©Į£Vxv—Į==’: ög;©ųé#”äys·„f‰ĖØY5“kI§¬Į$nBŽ®=¾”'CÖ_ĀZUĪ›hö ø••œ>æsž¼É £y%±3‘A [ÜŁńĆģĖ Ķ­éxüæ7ä o§#ń®FšŅjńÉe~TU%¦uĄ@;Ša*ė”ĄmįšāÓ쬐’xĪ mx_W^¦sŚōļłi 8ÜGō&‚įøļxbßP™Æōōl§mģW–Eķ^‘ąė:&«!7Pm"2ńėIJJĘ_‹¼*Śž śōĮīTbFTĄ >•Ļ­Ż­Öż9-¢ĖGµ²3Ÿzdx_ˆķ/<+®ĶjMėG*’‹³9č1PZłńŻYĶm˜īưBFW® 2'¹ößĆ=müGął./-ĒŚmņÆ1ēœzØÓĖ"̐ŪÉö€ēœą`÷ ĪIu;’¼ļŪĻö‹©•waO<õ†ÖŅxŽ+ė[ȼŃ+²ą  ØåŌŽnx׊.lt ¤Ó®ŲĀ žPČŹ“éž•oģ×Ież”ar,XÜ»w N»š@åķu›•Ō™..ķÖV$(S÷ūŒ{ā½&˜­ēZ™ǃ»¦õā©FčÖ1§­™&Gvc»y½³Ć>9Ōü?l-#»xUÌĒČPF8ĒzŽ@|õńŻ„¼:œI,!²ÄŒ·?ʼ²’\+l›yēŒżkR¹Īiµ#v $Ž\§;Y@łOµ\°ń—‰mn­ō«„:ŗJ¾JJ’yHä| }k–vHŽ›¹ŲŪŲ\^Ū—¾V‚W9ŲT‚9ō5£4qŪA“c” žO>ę¼,UNĒ}(w=Ā:Ü2ŁFńŚnNK)5ŅÜj÷Q²™‘ŒG_jšjŻŲäu+«=Fķoēä#=OØ®³Cń(ŃlĪ‹<†ęÅ#w-Ÿ­amz»įĻ6^ ¹†{¤tˆ¦×\ļ$ńÆ2³ńW„õˆsėwśTm4»š"€/<ąqŒuÆB=LŖ2æÅŸųBMuuĻȶńą³Ŗ0*ł€”õćk”ųg³™‘$ŪĮ=ė^kr‰“?‡>ĶĀ’‚•éž–8¬š×|©R²'n™Įļ\ņ—V\caš„¶Ńb;DQČł@椼µž{(^q5½“˜dį†=(L-ŠŻń-‡‡°F£Ś6Ŗ‘Ŗē ™>æJņ{P¼“†Öęķ®­ć<+ģö•ŻNF,ɎŚ)ŲyCŹēw„LmŽÅ’źÄäŽÕŅ"½œwW7Ź–ŃŒü»äŸJō»}neiĘwiŲĀHģ4Ÿ:’‹g²{{h‹†l ŽæE~~ČöÖv:Dž"Øå3\ļP§¦×­mĢ‰å±ścį xCGÓ“ū+-mļ +….}×ģž€E$%±:£nPĆ#>’•%+“&ŃŲ>‘j×&čŪ@²3dķ꤂ŁįāŽ%Ų[=:ÕäŹSB/oŹÜ* CĘ8ā½N»¶ū#AlŗŽ„õ"µ„z’PÄķ9µ¾µČF$㌊ę›R‚+ĘŚ?ŃĖgéTāC™ŅĮ¬Ååyqa搮sR¾Ÿ£…¤"±eDņYožŪÅö–Že„•ΐżŠŽ‡šę½>’Ć‚ŽVŃ.a3|¦# žĘ„JęžĢķ<Ŗj—–)“-­uHkąąIL֏ˆ|B–qŸ™]Ł‚ńÜVźFœ§›ź—–;eRīūŽõ庚2Ž,±CóĒ<`f¦ Ņ:+h”¬[õ*ŹŒ1œW<Ą¹t,åE1&^œVjˆā˜ł§x¬Ź‹°ŻDYOnųDŽNEql³·’:U0¤­µ8'҃[ž³g ł:— (W<ö®DŻĒ!x‹ž½TXĪFm%5Qō»¤_-ĒīĖ•«Śü-ąx42 > 6żį€æJꌺɶžf°.»ŽL÷­żMl5=hµ[t‘Yp ź¹¢K¹ŒÉĻŚĻą=›č÷ś–Œ·V’¶ ĘĀzńų×óÕć Üų_^¼Ń'›ķ€¼nnS=żÅo†vb¹ĆŪĖ,N…'h„S»+Ö¾Āų7ń>O7NŃuyZęŻßˌ»`)÷ÆR.ęg×¶ĀY'Ž[U‰„S»7)śŽā¾ųßąmoįļ‹Ęµ£Co™pŗš(]ĮݵO§YŌ‘tĻźūž ķūBZ~Šß|1®%č‹ÄvVi”dŅDŠ$ ś_”vpyɽHóü«’«ÖĒW)ļu™ŌZĢŹ>\gØÆQ¹ÓtzĆUšžø«&‰©[Igt§”FR2~™ü‰¬‹?‚æų(ēģ‡{ū&žŃ>.ųwso5Ļ‚u©ßVŠļ Ŗnl˜‰õé_˜Z•¢ŪJń‡żŅõ#¹µŃFI£šŖ9©eĖĀ āÅD¾xÕš­ĪG ,ž]¼‘€ÅĮģj“p¤ežWe'qɭђF ”ĒēeBDO~®Ė.KĘH {śS-+4i2 ūŻ}½M꬛ČóĒz ©¢|ǵ ŸœŽF:š· —u+&©ję7 Ԋó³ WŌź‹,Ųų=tĶJ}WN¹cgp?Ņ-Ųš®8 ¾™ļų~=Ø_&Պ(ięĄī+ē+SŌčƒ8Æézwˆō+ć˜ä†ā6†T=ž9Æå_öćų#7Į_Ž:–¤mĻĆŗœa„źB ˜ž’Pz׎źlłrՑ•’Y|Ę­]”Ē%« ²¶+j;•=ŽUÓ|Ä%rHśW0šw–źŪ·ĘÜqŠ÷(ĖC–o”õēĄ_ˆ7ŚN„•ĘāŃx_Ģᇦ=±_­ø>$šõ¦£o}‰ üĮOĶ­Œīz6¤Éā}ļI–éüŽcŚēÖ½#Į^Ōt]Qge Ėlæ>рGOʚv9j³¤¶¼æ¾…ä”y©#h΁•×iō¬_2°×"Ÿ ŅlqÅ;Ļ.ĒĶ? 9ā¤DģŃÜDń!톼ā ?M­é÷&ŁädŒ}Ö#ŌP3׌–-dÉ%Ķŗ:(ČgēŲW-ݰvPåŽzŽh K©łR ģQxĮė¤ÓõI%PŒ’#pzP#^,t†¢¹żkCŃļ×vĄä8?2Ÿjf‰Å]h m(ūŚInGBywG¶ŸOŗ2/l¶J(Ųģd½IylŹŁćŚŖÅ4ŽåX£ć¦iR¼æ[pžTl»ZłŪÄž<æ:Ģv®Ļ–Ą^ģ=i§b“=‹Āŗ¾”`’Ę\Ź1É®ņÕ¢ŗV· mqœŒš "NƒO‘‘ü¹B9õĻZ½ČZ#‘žóTžO“¦šŸ7®:R4hŽ%µ•Z9X$ć×ų«*žŅWµ™-ĪÖĮ @äP-SH—X‚ąÅ}˜ƒläŸŅ½6ĪUp¹I ¤ZžŹęY]~CÜ DąŹ›†s‘ŌPHč`oōD óŠćšŌÓm#žMĢÄc¦}h2r$Öćµh ±€=GS\IŅ0Ž S5‹¹—“Įū™·/”µd®³t³. rFOŹ[łU8Œ¹å‰Jŗ°G'8«jp±™ž A2ĖMoUP» ķŽ“–Č[B‘ŲphÄk<ą4ФóYSÜ«JĮ$  ā«•”QøełŖ ičė Åc*¬ž„v©v1üšļĆž"±q0ū+°łZ1†FÅyž‹įĖ­!°øÕQBr@ō>ōē”ÜYŪĮÄ©9ĻzčTķ' s҃)lgG­†”Ć"łłXt5ŌAt'Ū# >”'Š%”87CT%¹ŽSøqZEŲ ZÜyOl’>9Æ4Ō¼ĖÓåłķę)å8éJR"Ŗ2E§šćy­—šĶÜČ%‡ŹĘćPW+fr*ĄZ)½8éWģ.<¹K-° ƒ»³ŽÜ+.1Vn „Ņ2‰v;A­`ś‰l)—,WÆ­jßėSī‰$ł`cбKb¬.Ń0Ue<ēø®š;a{T )Fį~†2éÄNV`ŪąūŌ—ze¶ŠbĶ×t¬Zč;™77KhwcµaE©EzLq;ŒžE č®Q`häQŽƒ5ĪO ™œÄY2zg­¹­u+سm?ļ`=3¶µĒ–d Z€ŃŅ4Ųµ)‚¬‹ gę$ćOSŪ¦Īń; TsŸQXó[BE¶ŅÆbr>IŠäq\ģśh0uǽis–ŚŽ™8–Üą•ƒ©j "¼SĢŃČGŽS¦µCŠŌ]āšJ1{½TqĻ&ŗ‰¢‘˜ī…¼ŁĻß"ŗ"Ķ~!ų2ŅįŅ5ī8lvÆ‹įżĢŽŅoM«Č 1»•¼_T?Ŗi+o¹»<ń^7;™/ęUµ’9 m½HüGµtәĶ8šĄ2Fš+§“ź+6tóY”óć$VęV2KgqrÄsŒW§éÉņb@’ņHėšlŚ=›ĮzskŅ ŗ…¢ƒ•ą×Cāo‡QĒ7Ū’Ū(ąz{Ö ›)œŽŸ¤{Ō[)BŹų÷kéß ĮU}Rčl\,E$#¹Æń׊m!{˜n-Ź!ć=Ŗ½™™į·Ī÷įŠ±&³^y%|‘Ā³hĖĆč²Ļ¼{$(+^禘ā…Ib%ćZ@l į• Ÿ–^Ē„XŽFBšTVF”Z‚£.eēž;TŅŽÜ$Cl‚D'×šŠ›4¬RMIŚ"=ĖӎõŒ÷3łŖ!u O ŌĶhY„J‘–eēŌVöŸ%䅳‡éĻ9¬F\‡K²Ž8–KhD”pĢSė^Kć Yjr„ņįwĘ@: ‘óĪ«į+/w˜Æ\Žp+‰¼ŃģĄTʇ“ĒO„¹ņēÄ? ŪEq!gzČ`øĄÆ—ž$čöSéwv­ę.čĪŻ£ øģj*"Ōρļ­n,ē0Ėļ€ĆēōÆTŃ­4¶³–6% ØŁ“3ļś×%DtA“4ÖÖn|±Ņ(ĒŹpj„¾©4ä¹C•c…#Ņøj0—CVĪźÅ€˜FD„±Ččk©†[µņŻ'LõĀó­e}lhX‘|ݱȑŽrrzŌ,{8_1Oė[S‘21tŪ  .ķd—M—ĶŽPcœõ÷ĀżOūKN‡eéūRęp»Ē·ÆŅŗāś˜³Ó5o5ŃcŸ½Ęy„³½“Čh +Ź“ŒL «»™ķ$‘bŻóńōŖ³¼ūVÜdšnˆ/ć[…{yc3‘Ö¾Zų¹šĄīMvŃpa'=+ ĮlΘ.‡…éž Ō4ä{]ÜÜBd-"»gĖ«ŚåŽ”a ˆ*ČŹ~RpI®~DmcĀõ˜gšĪ­o ü3+‚²#*{äp:×ן ¾$Ž}žŪOø¾yķSꈓŁ'Ūۚé§Œū‡Ā¬ķf¶Žīt·øVĆžé_}ųÅZN»¢Ā­=½Ģ¬{ĒÆjė3ž[›WbÅ/ŅETGĻnƒŽ½SF½°–Ō"ŗ¾G>¼VĘ2LÅÕōk[Ø'sr*ƒŽ95ą×v0A|öó¢&NļOj‰JÄ©4,šJÅlĶ ŠŪO~’Jä5;«o2xƏZĘHÕ;œcźĘq ĄļWōļ’@. qŽ¢ˆ®€ć}kšOÄ)-®£²[øŻ6†Ę0qōÆf»ÖćŌ2ķulk¢+B\4ŠÅøc ćV•GzUÓćm'N+“s!zUĆrTu³ Õ/“-sN’H$ŽX‰ĒQ‘_1ųĻĆV«w#ÄvŒåT“å~¦Éžuug¼ČóƒŌs\Ōŗ| 'Ÿ)!äńұ™nZX$æŃ‡+m½pGįS„ƒ,‰r€äs‘ßėYø™ø­ĘķĢ@ö®ĀĪTTJ¹ćœŠF1õŅī™b-å³³Óń®.ļJ.ƶ2ļNę±:ū(ęšŌ…T—<(“\~§jŅ_"j6r¾ĀGĢ>ķ –‘«Ųim#¤Nƒ;øõ«o¬Ćv’“.Ü}ÕéøÖner2֓ŖĪc--øT>ł"™yŖC)b—\g ö5<ģŅ=‹ś„8‘ĆÜŚ1Ķkź,®’:üݳޗ3š-Æ-‰ŒE"” ķ'­>Vø‰J•dV#$v­bˆ™i~АüōČėY†rŖĀu19t:fMÓī,cc꓆P:‘ÅE¬O•0Bo»ƒ@[yłžc©/œ€j½Ē…ōÆBńoäõ‚‡ŪŃcX3sDŅļ¼5n-žŚ×QŽ#STyõ)ä7#«6qŽæ…g+Ż‹ §Kä¦ÖŒćŒµFHÖHęG+1Ģ:Ÿoʳ š‘\Żßl‘„@1ƒģ8Ø,cK‰Źds“ĻjĶĢ Ö°4Ŗ¬ģ”攸ŠåŸ?e‘TōĪ1R¤eĖŠāīĘ£¦K*É“²·ĖĪCR&©m$rG9ŽŲē čʵŒŽŖQčx‡¼8×a.óÄIŹõWĪx=bՓŹ"9I )ąŽ2¹Ņ‘ō€t­WKū9ø˜ŪÄčŃOS_Ei72JšĘXĘN(–Ēc×ō Ēy 8Ž6OŸ¾÷’^³|Cb-‘rĢ0šĢ`µ?™]7S}FĀ+™/īķė†b¼YōKė=nźš$¬Ķ3Lžšć±ü+éŚ<8ČӆāŻeˆČ%Œ0;ˆę­é—Ŗ÷PĄ‘®å (éõØq5ŒNŹėĆ_jp|р¤†#”śz×¢ų/ĆŚ…¤V—·,ŒŪ8nõśÖH9 ^1µÕ4[˜-D2Ģ”>SЁŸ’_åW“æźÖPŖEw61„ÄäG”ż+ND7µ*jw¾.Ō4ł`»š//ĢŻ Q–)އ5ćĻż£ ÓŹŃ[„ņ±•ąŁŖ°r&vĘyü?œ'LI„qäŠ<„ćļ05ĄxƒÄų²ŽĘźŻnbpī³ļL+°ČĀž”Ņ tžń]ރ©[év×÷±„ønžÕŽx×ÄŗŽ”%įYetć,ߍŌ§cˆÓķ<˜ĆŽČÖWAHä|Ÿ„l\ik6)Iѹߓ࿰©‘‹ŃÜśsą÷‰¼“Øhš¬sYŒÅ»J¾;Žćžæżzē¼Kcż”gq„Łjkb¬ @Ǥg±¢75„¬|¹­ųÄZuögāåvīŠä£ž}:W]wc„iÉov^o-@Nw`zU–‡žŲ\OwÆ$+Žx,Ż 8åµōæƒō]BÖå>tŌÕBE…Ą=’ĻցŗšĒŽ­õk'Š}Š€`ĪI}ć\m4›MRłüId5(‚›I@žžż+=IrOTzwˆ>Ļm©0Š5E½Ó¤…pŌ7qšįµŪ]O£jŹ ”ĄČõ¤KfŦommp²Ļ+ŹŲ1–#ƒŽ“žÓ¬ųr6¹† ĢXRę!ó`÷śUCsc†ńo‰-£}ö;Ł­äq»’vqŽÆxĀwŚćyönÖś\Š{ŒyyÉÉ=…jh§ÜĪńw†®tÉgŽ=Me•OśČ¹Čé^es¬]¤’żŗU6J &N /|ž“ĘeXōČõ«Y§„4ńĪʈ÷=ė6ĘŅļI1yŹŅׂۧ¹õ>©š·owcol`¹ó7FÅĞ•Ö?ˆō]#ķvśŒm3! €ÉéĶ2Ļ1½ń»­ģŚL·f7”§8 =*“Wa`šŪ¹×ėĶJŠ8 t&[ɜ\ł›Ī?»ųŌŗ‡Æ"Ōb–uwRr±ķĪqÜŌ9šĘ6ŃńįżO×l˜éń§™d‘ppv®†&Ņ<˜n²öä•ē„fŁGu;Ū\É“˜l\6ī~öOO§ZŹ’„GK:„¶«•ŖŻ 9Śłó>ø4'a9Xā†ęńLš^GlˆŃ&–œ Ļ’^¼ o†Ž ²Ō­¤y®åµ’m±yqŽø9 ĒN‚µR@¦{‡‡Æļ¼¢.Ÿ=øć{”UĮaōśēU_Ęßa¼XįO˜°ĪåČ9ś}j†¹ā›Ķgu½Ģ³Ū¼»÷¢m1®yLtĒjśFņ#Ž1(y¬Hvź§é@™ē><¶šÖ§ēŚźŸg/ĪĀłš¹+mhÖĖou,wV’Ć•!²0Gq@¢Ļ3¼ų{ā½Bž=WĆŚd—Öˆß1#匎r­}qš£įŽń'Ā±Rų½ą3Bń%ö—ĢĒēXå„ķ‘ņśtÆrųKūOx«ąę™6,“Üx{X‰•ŗÆjq•Ęäb|Oń,:»ü>\z„’øģŻzUæ‡ŗ–—”H“”]Ū) Źē"Lžx¤į”™õŽ#šµī²éŚ1L8éė^Q¦kz?ü$-”źrZ%Ä‚;Y r~ søµ Xź¼WšŻü?y3Ap• “œß#šÅ|ėā?Ł«¦sa, <ąß+ŲӊčE]3ÄWwö2é7PĄ@ģ컕@ēWŻWmć}Ź[„Šk…\¬›ķÓéD»‹™ćÆĖi åщ'Eƀv6zćµx½­äŗŠV0KøßĒ^?:ĻŚ ō›+ļ>/"ÄWž1Œtżk¬šÅ„Į–ŽC.Õ<bÄ~t{d‡c§ńG‡¬5Kš˜įhČV±“źkäļųJźRK"ĶhÉŠ}}8®z˜ĖB÷5¼+šSXń%„ī„זńA Ę¤yĒē±?zE‡|;¢^Ē-ÕÄp^ĀI\`”«ĢƎ¾ˆģ„E­ Oų¦ĻVHou“Œż¢5Ūę0 ĒzĆmūPÓŪQÓįšm9¢-¹ģėŠó'Q³¶*ĖR¦‚^ lķøpzÆÖµu ļ®›1kŁ VZ= ¬pzšŻĢžbĻsÄ.IĘN1Ī{TZ4ׄĖnÓH“ åŗҜQ|ē§Żč:„–”š­ĢmµQĢ©Õ~øÆ.æ×"žźÅ,$I˜enžĄWe’s¶±æøkhO# ć„X¤žxÄcŒŽ+š£3: /@ŗŌēcyäDĻ—Œ–>“­|lŗY Ę:ńł×ž£K¹—©J¶“Ę&…¤0܈2Ź=k®—ÅO}įW²m:ŽćN„ ÄŖyą’õėZd³Ēīo­VUŁ Bwl'{·gu¤¬‰ö‘H# üų®ź}Œdȧ»Ó-Ɲˆ#l=;Ö«{,R“Čזä/(3‚{]1O©„Ž÷Ą<]ā-I"Ń ˆLdVŒø8> Šżųqū'_x³O–÷PŽŪķŠ›šĒƒĪŠ{óZóibOŠ?†ßĄše¾ū;;»gUĘō čGź:×њnomū=¢ œ”nEo¤DZ=Šb•HĻk¼Ó HcŚQ±×©”ŁŲˆąt]×xž jÜńĮd ˜IĮ†NӜ}jāŒdĢ›į ;]ā7c ¢ĶĀš&Ǝ+S7&yÆÄ?Ā9m&©ÕĮ‰KIå¦xśU xžÓĘZ]¾£kÄ®”ˆe*ځXģ`im]{œŃˆąŽél/”£¾J85Œ–§DLæčVڽ¤o !•Ć«)Į{ÖÆ‡5v°³× Οp·ńT%cråī¶ž[\Ŗ€üņ;גIŖkw7$×&dÜJvĄĻCWrłk9ī'u·›)0c½?S‹Z°M×zoŚ4÷įf^±Ÿz–śEkw3"œ¶:Æ­fCŖŹŗ‹Z•sč8üė;{;h^ßt„yFM[“Ó­®wļ,F{R)ōˆ—É¢±dŠŚī}ĖgęÅĒĶŽ„h¶§sKcŒ`aƒÕĒO34Iž{•qZŽ2±ŲhZlÆn.Ww.AõÆ{±KEӔĶsˌ`žx®ˆ-DŁYīRo*Ż'ˆyõ5ŖśdŖ¬‰½+[Éźy§‹-|6m.ōßé?oŅē]ŒßSżå÷Æę—öėš6‰ąŸ\>”ᔕ™#£p\ō$UAjK”łĶ+Aš8ÉLœ®ĖĀŚ’i×Ö%˜ĘČāEcјW£AśEšĒĘV:öos#<ĢŖ#‘ˆū­čkGā…m|u”Ϧ-²ÜMg·t_œ`Å:Xē’ą›æ„ż›’i+/ųĄMõ—6͹°bŸ8R„^z]Ų†U{wŁøÆ9B2ėXՊi3®2¹Ūč:ŒöZŠO˜Œ‘‘ė_KiWk·G³Ö¹$¬ō%Äüę’‚“~ÉÖßµģÓwāŻĪ%ų“į7°l_žx”dŒŽy }kųAńV’źņŻĮnc‰„93‘ €į”śƒU‡o™¦rՎ—<ęīŽX²+Ż{TvńøŲIŽ£±ī+¾ SĶØ5ʦęuĆ<Ņ‘äU\ćēĻ‚µ3O«(IÉŪ+ģœŒśā”bģ ć§Źž]Ź·ś;²?C‘Ÿ—½O“(pK1<žŁ Ö—mfĒĪvž¦„‚7W°1ĢyŌŲ_CÕ­Å­Żŗ\ĄĖ·ļ©‚¾łæ“_ų!ļķ‡Ē’€VŸqńīƒy£‰ 0É{dłĆ—Lņ=}:łsĘ:>…āHēM[Né×QęHųŲÄp@śąÖjZŲ§$/’šQŁļQš/‹.5żOŠ8ā”Į(Qµ¶O·æ3dG‘0łóŒvÕNnÖ9źH…›nņnĘ>•HłĮ¼dqŽŗO>©+¬Mw-æ°Ē”.ā P#é[Ēc›œägĖĪ:÷ö©ć1'śSEˆdĖ‚¹ķ ‘"‘°B‚äŌÅv-”;ö ޿ʯE$ė—zSĶE9Ÿüu®|0ń†…ćß jĆĆś½…Äw"`…Œ…[!N=qŠžļædÆŚĀ’µ?ģūąĻ3Ł'‰ -5ŲTᣔæ0?‡ąĆҹė«Åłp‘ōÜZŹEs „Ä/¼ąłrēĆµkZÜ$¢Yšł¬LNˆH’[[(PDZV ņXĘ}kó‡öšżšąų­šĆœŚYNśŚÕ„Œ£uēŽ+Ķ:éČž\“±©č·—ZµG©ŚŹ`‘v€8šō”“ŠXVD*$;³Å8»3yKCēJkķo:ł½6Ć äu 2X·–źżyčkÕĆĖKŅZ”“fėKŌmīģĢmu‚Ž2;Œ×ģGģćńJŅ÷K¶ÓZŚ d™@Ć7GöüėŅ2’>øŠ§hõ8¢ßöa#×&½¶ uMz ‚Šß+…?{ėH䨇µÖGēĆÉ®Å5ÕÅ p&^ ÷ åhģ|-qmäK³0›Ÿ”óšŲŽXVńH*W?t÷¦„wė¤hŁÉ, Čе/‡ķtWx,"U‹?(«¶§Ūī{ČDüĮZĢ¢—«ö š¹TׄvńĘ^įüŠkh"\žĘ{[G-š_B95Žo6Ø8Ę:UA%ĆĻDWrž•”#kwCdaĮ€4mõ;Ė •zbŗ_ųL”™R2ÄåpxĒēG*{š(w9{‰ęvc*ķcĮ5£fŃŲI_#ų‡Z‡J60õFH‚ØĪpJ·),Ÿ0VD ū:4»™1޹jh¼£•+ģh µŗ’D[yXKągµ[¹Š‘JÆ°ā•­.#D*AP=OJ™õal–?Ź„W:›ŽHbžõ ÕĘ£aģ3ŚÆ“Sh-bņšĖ“óT~”čb·•ćgPɞr:Rq(Žŗ°µ1Fös)o®kGLžŚKqor6:ē;…5\ŗ6‘ŪÄė±Ć¢œąšénu-.ī!…V ”cÆ«QĻ=ń޲lØ®vĆĶvŲ$düÜSeRi.“röČØÆ.›JXŃ$+“…9äŌŁó©]^@VįŻÓ¦j½•©óW““­Ķ)$Av+0ŠF ŻŽ{փ¼q±ā²ŲånģRYĆ«ŗœē½u¶ūcR[pČ'š Üŗę†.RF'ū¢² lĪłŽzšŅ0ī@ķF޲«°ēg­yÄŗsĆp·įū­‘ŌRpFŠŗČ!]łģ+ŅmµŪSb°2„”p:Ō•Ģö8kų­f½ó$ˆ˜üŲ«1Ćek!*ŲŅ‘$ļcss=£~ÅsŸažŽVrYa“[Åhų]Ų1fČžU-äQĶnwØŻŲŽ“ĄnŸu5“Mļ 9ķZ¶Z„© 1‚±A.'Amx ©–6*O'µ]¹[dpĮŠ”Ø™1‹9NÖŅ|˜Ī u×9¦čv1ݼŖé„äēų«#C°[8åPUA#Ś¢šŚŠ²¢^;NĄ%Īg Bx ŽA5‘~s•;zPŠ%‹w—•o„f]Ģņ©IŌ{‘ŒPgČe‰@IOĶÓéYš|šÜ¼Lāh:Øj£+ C¹.­m|Š;[ĶL¤ 5qæ‡õČ ö©'˜>fŚ+SDŗ„Œz­Ć ²Āć©eÆD³•ē¶]ģ¤ż+X>‚8ķNĪ`Ŧ>b+u#­s:•µ­å”ĖXgQņąVōĄł³Åšmķ¤®e‘œg ×%¢X-Ķō++B›¼č~µ“]Œę-_Ćš+ŗ›qx܇½cCążG1y ”¶3žOÖ­Ō3tOFƒįÕŽ$—ŅõGŹdõ«žųI<³µŠ–VP»|æOzĶ˹^ŹĒŠŠ›AM˜Ė(ž!WüG¬Bń¼e.T) ޱ“]Ÿ”Ō%µ×›•ł†œnÆ¢t]Bā[E1ŽWtØ.1VŌĪKßéŗŹ}©]ģIÉ>•ķšlŃܤ9śĪf† ³_õ‰'Ī:ŠÕ¶ŌÖŻJ¹Ö`7PŌ Ń‰P½sŠę`ƒŸ-ÖEö ™F凍”&NK}k*īi_ݶ³”ŗ1±ĶOęÄća*½sļ]v‹,„ ŗX¦ŹŠ„ŠfūO˜Bæ(éÅL堏tYZŠ—ĘöÆT>~YHéYŗķźj`ł*'½2±Ē_[ē„Њī&‚c0ÉēĢź“«Ę·*ѱ`h ”¤źö³ŹÉ(0Üg£ +v÷Xc…(0£©¬„Ō;‰Ø FĄ®óĖg°­[iä‘–©ZŹlĄ<µa„pxéY7VᮕŚ!°ńō­ĘXū˜˜ØŽ£Ÿ ¬£h‘I¹LRFĻŠńBq![¶ M÷€xõŸ-€ā|A«<,įpBœ}kÄ|Smq«A'—!ߝÜ÷¢Rģ„Euåµ½öčd^ųā„—|s2f7ĮĄĮėYŽĒ§xVĀėbČŖ›r=ÅzŪā·*„3Iށ±]@ž_Ķ“ŸQW•d7–~LóĻZøn˜¬ęŒīp¬jŃóķT¬nā7<(5Ø Æ”ä żŻHöv‘0uĪņ2xąŅk \d·&$ŻŒÆ§„g}°),7=éX‹x$m¤œ×āxĘƔ >™ Ś'†kŻ[÷»×¦3Ķy„ā{y $œŽ”;ńo‡.µH¤ŗ$~¬zę¾8ńf”‚{>źŲķbTgµQŠųĆāǁäŅ&{ėHL±Km9 =kČt;‰,ń ’‡`9ĻzĀŖ7Hģ 6·2<®ž}Ķj¬–– nX·ć+ĶŖm”s©FŅ«Š3ņŒ>˜„“Qk7…ü¹Ņ'Ēō÷¬,ovö>MåœsÄļ*°Ļ†«±ū· Įō~)–iÅg ųP«,Iæ–_āÆGš÷…µWøÄ÷ŗye!Ē“źzŽ ”Vē×ŗ5ėź6ĢŚ6ū²ĆŠYm,åf“Œõ×NG-BNkŌcjHH ÷¬Ū6ÄR›ā8c{Ie`˜ęL£Ņ»JŸcīéü].µ¶m=šĶOs’>†½'Į—÷rFŚ”ģˆŲĖpE3 =ŻY69°÷ēµxæŠ$µ’’÷QźHŽ~¹©mņ‰ĮźW—Ę¾R9Lē=…q–µ~šH‘ȬG#=ż«&T#Šó-WVžµŽYøśTzm”²łWĀ@\dpܟœMłNŪĆž ±ūJM$(óFū†ō^ć’ ^ŪEgŗKYÕ¶Ć#zŁ2=™Ż=ō l™Œäµó÷ÄßO¤Ś]^Ɉ¢č„'œÕĘV3•>ēąŸ½ł’XätNāW 1žµŁ^]Avķę>öaÉĻ8©rī3›–Ś#†o“\żģV¤Éˆ ƒĻ|RB<ŚēĮ6šę„aØ¢°šŻĖ~īLdćøkŲt½)cµ…·ĘN9®}(.lįIfUĮÉō­Č¼”ó³·å Ž¢Q2›1Æ-¢hĖĘ ¾sׄr×zƒ‰•n”p€ćØØå6„z—č°RÖ³9ī5K¤ųź=^’õ' »«® #ėYĖcŖ¬aė„“²³†œ»qü?ZĢ‹ķ121RÆÖ¹dŻĒ(čkŁųˆŚ£ÄŃ4DœņsšETŌ$fŒI½Ęą ŗ˜µŌ¹ig­Z]E-…ōP)åŌ®Ičxļ^oÕäDÜØ 1üU²‰DOōņ<ŃŹ@Ā“m®ćwhĄĒ|qšŲĘ[™sź[ędē…ŠŹ»×tŪĮ•׌ųŖ-ŪI ‡ļcYؕ¹ČÉ橵;į%ėŻ:ł›T3īéż+³¼XļįkČŪtē-µ†“ ĒM ˆ®ŪK¶¶øuķ”)ĀįÜVށg4'Yµ»}ķƒ4.zpEZĢņhsČVö‘×aPĘ2;ęøĶCO¹‚+Ɍчi6sBf±~Ó4Ė Bī ø-£˜Ŗås€Héė×5ģÖ¾ŗ½·1pץõĻŅ•ĢjLįõ/źŗŚ5•®Ÿēj›ĘÄgŪ’cųVg‡,õ›6›OÕm¦¶¹( 6wĮśt”³Ÿ–äZ¬z„”¶÷GpērBŸö…kO⫆²Ž°k…ĆåĮOåSĪkō14z÷]ŗDŗ1؈ሮZ»MgE¾ŠĢ3Ū?ŁĻ ƒ÷Hõ§Ī_7cÚ.Š×pÜź0Ɩ~Pˌ·¶kÜ®¬ķōˆĄ‘C‚…3‘ĒÖ•ļ±›g˜ų‹Ę–rŲ]ŪĻ 3ĀĆ2 ŽāøÆÉ„ų’śļĆŃŻYŪźÓ Ś‡}»Ą2x꓀ģĒčńź×jVžlĻäF܎sM½Ömmu7Ie*³6AQ`±wÄ/į½OKeYŠ¬ŲŚT÷Į®·AńÕę—§ųZś;S(‡™ …Ą {Ž”ŅƒźA iCĻŌÓXŅ–[C¤rcŽz{VN§©jž¼Ņ¾Ēb™vZ9ČŚ‹Œ`Z¾mįcUŹZģĪądW›źś ÷.^W#«½>b_‘Ņhžƒ¤My%œ‰dٌ’œ×Åßź1µČ’ŁJ&PŹFr¹äŌɰę=ßĆzޟ§ŪFČé0d[ m>ā¶Æ4˜Č&Š&·{‡C+Ę©·ks‘īkē?ėś“†Žö;‹mĢQƒÉϽ(6+œŅ¬—p¾Ó³jķ ךÓŃu(ŽĮŽD@Ć{śV†Üč¾ĻؖvˆK3& ŌSYśĘ³£Žé²é÷÷sé:”9hä†ö>‡=é„s~…φŚuŽ“m4bźćW ±ó2až‚ŗĻ|>š¤V×/¤““ų &ęF#“œv«I¦8Ō±‘įŲ“DŠ6p€å8#Ģõ5[Ä^%Ō’ŗ±²LD³8\,`¤w§H»Ÿ.ų‹ÅZ¦£ācf¬`™XHd#*ÄöĒå^Æ¢iŗ“Ąé|ņI¼x'nGj¦mc鏄¾ ģWę ż3’ĒŽb1ųž•췐@t{ūß Č-$Ģ`Iō¹åēÄ{ßėŚŖi#Pø÷yŹ ³'psĪG5ɵ¤—””½P„`¹qœŸz¤śéZ=”ćL·IUfĄćhėō«—5ņy7ŃŪ\Ļ‚åO ü«G>ÄJi¹į¤†öĘš1m>fūŹŻ®zKm.ēŚv—©MWhžl Wž;ƒłVrfN§Cģ‹]"MgĀŪ ŽŖ( üæēµ|wńcA±šĶō×SXJ£ä‘øuĘ3šĮI‚ąč×·ó¢ŪŁn(ģT“Ļ5öf‰©xcB³“ģńMoHU3ŒŌNLµ±å7ńŽ}|ŃG5¾ņŽEy<¶Ö飼@”p9®Y6”;Æ„éFĻeĶįˆü£hlø5ĶŻŪ]éś¹¼ÓäAIu#;ųć•”Ŗõ8ŻKÅ))x".eŽSšXzVD0JŅCuyİg8A’~•ēש”ßJ]ŗėN¶ŚĖ<ĄĘ8"¹»ż5µ%/瓐ۇ9Æ6S=Ąź¼ m¤Łji:ķŗŽZĖŖå3·Žæž+9|_Ć/Ea„Į%Ο,r4¶Ŗ7sĄk;ōŽæĀ÷ŽÖµYÆõkV·²ŽÖµæ§­s^)“‚ßW»‡I&k$ĆĒ2Ž\zc֩ŊĀxwĆvŽ9Ҥ’ŽĪšź³æ.ųc­s1ü>:Uä4rŪ\«ä}śÖ.Åņ®„µ¾Ō­leÓźa„%›†ĒµpŚ®ƒåĮöżĀÖ%qŸ—žµŃĻqiŠ·¦źv–rÅe4Ęt'Ŗ {‡ƒ?±õx®,.픫yll~¢±)X„yi¬ųCT“Ō4Ż@Ś„RƎzńüs—wóų¶ņę}@Ą5ŪžU@ ±ī¬y: S9U’BŌ¤IęH1ēĘ»ńŽ“„“ߣVjöR( —† ÷"ŗéQ9å#ČüA ž§,óÄ©X!ć=«Š‘Y`’?4§Q¹›īž&½R0sg[įļų‡ÅFŚ×KÓ./ݘ*n\€ūÄöö'…fƧŚkWślĢ­Ė@~µn6ܛpžĻ³ö­<ā[ˆķMēɎ3ü?SŽæJ¼ąćįØ!K«Tó 3Üw£t“žŽęĘKw‚5ÉN:U?ģō…]‘G\’R™VĀ9G\g5½dMĄcGzŽqŌU™ ¹‚āž ąˆ¼/“įĮ‰§ß^فi|Cķ!wwük”ķ.u i,Wh\2ącÖ¹ėxī@2Är›°h Ō#†ę&†P®OŒÖ}„všc“PĒŻ@€±¹ ‹Lą½z‘žqSMįŲNˁpsČūµ‹³G¹ 0VĄĶÜŲŪ,l %vķRkŪ]Ė=“Ņ£ “Œņk+?šĘ ĪF;Ņl±’ŚQKĄ,r§ļVŻ÷ˆ.5t‰@ķĮąšÉ°3tĖ Ö,ź­øuĒJķ4m=Zø’ßøƒĒJ@U½f†P±#:’é[ŚD¬ L `®GQp=:ßD·¼µI”'™œé[–zUœP.ųPJ\uü+E‘ā iWįn!$aóØZń“šÖļNŌĆŚ]“¶ ßqłĒŅ­DZŃ|1>XUDœ‘ÜUĻč3EķI8Ą$u¤V„¹w÷z\„7±ˆœį«¹ŃüZ·±g‰¼Ńß9 VgźYÕ[LžĪ_·Ł-Ź0 C/Ņæ™ļų(†¢ÉńćJ‚HŅ+…/”ĢŒ~QN;ˆüʚ;hpv'š‚:U&¹g…šCäp0?…zŁ2•ŖžųÖ-?Z½Ņ罉 ŗq§ī‘Ü~Cüšū^Öé%E–;·†E$Ž:VÄF]ϐ>7x;ZÓüIŠt ’#å™Dā0ŽPræ„ų&ķLŸ¾Ųé"»[čHŠĪ%<ŻĘøUeśŽkšk”×Mč~—‹’1HŻĒ5ļ?|R×Q­µĄ "ą`ā’7q=‘%²fš+ōY4»ˆĶ½Źøqź½AķŠ/fuĘ”ž…ŗ_ˆ<7ń?Āzˆō)­/¼9®ŲĒ}k2Ń¶å Ēęā* j7–÷:ük©jH’}rpGŌ óėFĪŦqž.±’Śā;ä„ģo’TǾ?ńž—&‘¬ź6‚]2ļ÷dēku ŸZāł×ūXü*Ē^ Õ5Y­¢½x¤ż’ɹĀć‚}«łcų‘ąėx§TŠ‹9_“<‘o鰒qųWU)je&pf0±ø@7vńšŖs¦|…¹9įEvÅ\娻„BõÅUó6“іĒJč9Ś"wdšŁ±n0„Ī¤ĪŅĆcpry C÷ˆ¼¹$“kēäkA ϰļDž÷xPiЉd1–LīĮęµ`rųhŹśwśŠmĖĒ1Ō”¼dōÆŁæų#Æķu’ wć.©š?Ęś€‡ž(ņć· l¹< 7AŽ?J‰B÷]ΈÕē‡õ`óź>»’9® a,‡ĢW±_b5£¼‘j‹}Iƒ¶xČįĒc_=‹§©×Lō5Kk›p¤qŌsČ®CÅ0YÜŲÜYŽĀņZKC# ēićŌ™Ó/ßšPƀZĀˆÆćŻÜ\hj‹pŖ˜Xü¬OØĻé_ $Ó¤%"fŁ! AÓ>$‚E(Kß1ō­ł•/ D0FļÜć­vŠ…Qm­é‘[Ż1*aĻ-žĻ\mžo/c›y˜‘?„^Ų÷Æ^œ®ŽI½O׫]Kž}+I×4Ć*łj‰6‘ }y’÷V’ņĘŅŚ÷Ķ3mūǵYĖ)w7žÉ=œjåš[rIžjHģ4]^XŚ{e†ēw)Į49>Ÿįxlēp~ą÷­F-23nė‚år Ē ’× “²šŌņĞdEL]0OZ”ā-*=BGi!Sżå šŃH.qŗO„mōɝ“Ķ>(!É܈øśāŗˆ±n¤°!ĮØ}År³ė6¶ķ¶`¬Ić5­mygu ĪžŌ†x’VM&£bé$¾`ć«:ÓĘŚĪŖ#·š8VU—­'+Ēb‰t;ķ^Å SÅæ€źyZ—ĆŗŃ®cŌ%’YV<6(Lmž‹n0’Œ:Žz×_£kņŲ¬%R €j®`ŻĢ=H[;4”2X“Žõ“#A䖅¶?µ!ķِ‰Ż]?¼8Åk€š8ŽB~aœśŠc-Ėt—öš£H— m™@x®ÖĪ’3 ” ¹Ę}($Ņ×>Ī 3$›ƒ^?ØŻd6ó#ʧœw  ōŻOĢ‘ЉēҽSOÕ!ņ# µ$Qó õ­”°¤ĆtY#dnÄV%ķ†ŁNųńĻ­P6…-ēC–hśsŚ–÷Ķ3>ņŒ¹łHō  ū‹ų”Ā‘ózg­gǶY–Rsō µ+õ›Kūaiw`bš Ē|`üßQV£žąŪ¬o¹æQA-˜ŅźĻkpńčŻwvÅlhś“ź2–b¤/gšÉÄGO4ŠŖ[’Õœ­4nd ŒPjڲW ^0 õĮķZ·7‘‘°ĒOz 9 1Åę#€BžŽÕSģS3—|ć88é[EhĢIŹU±"ž9ėV®o4“±šKĖ“†Uē½h¢icĶ~×avĘk+ät/ Ö՜Ίccŗ<ō”ŁÕézŹ·ŹOÆJڹ±6ó½d@:Š“nc]]µ© ŸµcĖØ"2Ż£ ÜvĒīu+ya+ ҹĪ:õ¬˜/dRvƒ·8ĶKŲŃVŅ<Ņ«+äw÷«Wz|÷„o-°=«’ŪFaQ„4cÖµ§ˆ[(’#ņ‘œzŠ+™‰Ż›`<‘Ś“tĶEf,¬¹8ļA›Ų“S²ø1‹‹7 GcPXß^¤l'\`ćpD’ĮØ\ZܗŲ$‰ølž•rļS…_Ė; Ī3ZˆtŠ]‚™łOlōŖWČ7PTö]|Ø‘āŁ±Čā±äi*˜™D}Į~•”Ö£±e&Ż…•w śVĢzm£ĄŅ(t™‡\ńR€u¶b8œäpyčj½ÓÜHŒ¬”Ū§JÜF=ÄsŪŪHÉ?į\fā»»»Ē“ŗ²š42®ä*p3@ģz•„¢‚² 7lTņŪF$-TÅL¢#R3˜‰a€}ŗÕóĘĻŗ+ "xdøŖšŲ4O‚Ÿœ–¤Ȥ•\.öqҧ{iīĖ”;Č5ŗ`gĖģ†=»ć“ĶcĆõ¼å‚K¹ć52—`5¾Ńp§pĆ·”w/ŚI;v‘Ē>µŪ‚īŽ 7|w§AqµĘ× ƒōāŖ1øon³3n9üė.ćā>į('“S„KüĆ/“~5Ó`x¼ß¼+ā­bkm4m—~Ņ@łAō”ÆMŃ­æ“UdŽC ‚1øpkhŅ Ś}ÄjŃ\äŒ r pZķ½¢¼ŃĘØq¹€éUī łćĘzī—~k1‰ūŽā¼Ÿģ÷MÄq²*ōÉ­LäĶØMŽ£j’Ą<ÄĪ2sŚ»-+CŌ–(¦‰ŃV3¹”ē'éAQ}ĪņĘīę \µŗ: õšīüā c<Œ± źv²°čk2_žx.“sGŻķŒ×Ŗčs(>^NÖ^ĆŽ¤Īg'wšŅāKŲ.h6±½Ez]·†$Ń- wš)Ć„&'c^RįJC)žšĶoÅ vjcåžUˆć#Z ˆvóÓ9ėUīD’M½ŽzŅhŠĒoŲŽ€®ÉWŪÖå’ZY#wv‘žõ<½€‚õĪv£¼ŒTh±ń"…>µ›Ž¶›Ć0£fzć„\Ś4mäĪĮć_ń>‡k©é7šeä Ė“…‘*}żE~xėś-ö…­Io:²©,|Ģ`ŠĘ¤9ķ;WT#ĶSåī*NxQė]Ž«„ĪcxĖ;/śnśW$©Ųåõ;ä *+ź‘ĶŽʤ•mæ„Ć©jGoį?^ (ķI6īŁłsÅz œņ9Ė££qĮĪ C¢Šö‡j‰ØišĆ4EV&äö5A|Y©Ū]H· Ė’X’{>ÕP¤®'3éæ…>3žśĄZĒqópŲvéōźŅĻss'œĢÅĆWd)£žNä—„ā1©ŽsÓS­&Ž«~šäć5Rc«2xŽīSę(m¤6ū¦ŗÆ­ģ&‡`(Ų댃YJ=˜>ēć} ų“O¼-waøø©’&¾ń†Æ4mZę9Z)ms’s£·Ē8q—C”–ŹB#deåOøśVN§„i3Y*Z[•õwĆ«sØŲŹY<ÄĪß­uÓŖé7ƒåXōėq4f;Ž'ļ õ=_jF„ ¹Jæhe-Ļhš¶ŗfķd‘g‹.M`ųžŹčŹÓbää jHåg‹ŅDvŅ&żĄć#ļW/¬čzŚÖߨćT8īy6£”źW9ūU¤¶SŲŻČ>āØÅ,z,śŒĶ F¹ÜØm›–µ ø™źÉ`“'w_˜Šv…ćÆöiįŽ­ņ09-õ«„ŗōė_jVĘA ]¹ē‘\’ˆ5ŖŚ„Ōæyģ'ƒZ©‰ÄĻҼAc¦ā(’8ĪHć¢ėTŗ»”\@©åēę9ż*µ2”;nµw6gG)#¦yēwEõ-ń¦Ćņ9­W‘™æ£iļgŗ]6ń…ù’ōK8.•2®¾‡œÓŲķ°7΁›®*k³Z4ĆņóA”QĘĶ;FĻ’»Įķéļ\†±©<‘+Øõ5.GD]™ēĪŃŻ\¤)2Ć.2TއėO»–anŠ&Ų› ozē–ĒO;1m$×,.ŚI¾Ėyfź1ó«w?N•ÖŁjŚūŌK ‘¬HĻ$Lę^ɝó<8'Ū­tvv-ŗ—;py#҈£# ÓģŌ9h$y±É Śŗ_5Ń8A÷«z{ ęF”w|‰¶žQūŁ?…f}¾ī$qøJqœ+EøŠ“ė1åXČ8Ęk6ļX·iTy+0ł§ryN\ø•ŅY!.Ŗ§ Ņ“4Kū¹ŌĀæ˜ĮR3ņ“YĶčh kųÆRšŌh°IkmmwĪß,ž~§šå¬R+œÉnŽ„śÖV+‘öƒv‹†u™JåMhKohģ’ČįyąšDŲČŗ¼šĪgF‹ķ©Č÷śW5©k‘ČUc†H˜‚p{PĖP2£Ō†|ŅŅŸåXAō!Žp¹e+ AŚļV³żśGœŽ·¬õĖmA ½ ŒŽ£š8ŪCJÓL·¼™X\ķ‹‚A}Ŗö§įšÖĀ[[ø„räł!pB’*ŗp•ŽēOžÖā6¹€!Ę3»ROgkqj·`)”ä4Ž6Vz…½ĢQCdīü$ś×wāM*Ų(Ū<„yœØį}4¶>qŦsŃų~ōĀ;{‚3Ŗ½OµyGˆµydA¦\Bö÷nM¬>b?7ėX›FG%%„ąkUF™öüĒ+ÜtöķłVޟ¶ŻJݤŃ&I`Ɣ=h-JĘŽ„įˆm¬SS°¹žy˜‰<¼įG§5»į­^{I£Žśį£’EŚA=8¤ä>r}QŠ]}®ÜĖö‘ƒ€@ = j’h\>å†S:ģ*łæ ĪR"r5¼=įū‡ū>tÓ§–ū€,Ns‘žõįß|©čzĢ–ö¦ęŹé²ĘĒäaźxśT)ŚšWˆµ “—+ŌµŪGҾ®ų_ńNŚOYxcĘ6öšBčXO + ąn`3޶K¹¢…Λ┋ćŒŲ2ćMhAŪnū1Ę ¶rF yŠV¾ÓÆCø‡g £ÜõŖ°œ,W“W2Ś–“ɾ3·,:^ā²Ż]6y%ā£é7<äĀ±K[~„—z~«oiaŖi7RŪɉ+}ģq‚kéχ9еĶ=7ĘVŃ@ūȒ@r$üż­R†šDāįc¢Čž’[IB# N~ąóŲńߊ—GøŅõ5“6ÄĆ’|Ę_ö­h•ŠŒ;™Ś,śõ¤’ßHבŽNPƒŽ“­“ūŌtėød˜Mƒ8Ć#œPiĢ–§“ŽhZŪÅ&4…ķ$U‘deČߎĒńÆÖ4MoKÕ.muHć‘#”Ųw=sI»ĶcNĖĮėāéN“½–ŁĄ$/³vzżk«šēĮ]EŃl'šę-‰f* ōū Ė™”ĘGÓPxvé<<Śd‡yŒ§3Ö¾aÕäŌįæ:n¶`“d§ ;O<óųV\ćfÜÆ Ži7—1¤wŪ@€g‚}+įž‹$–·×³KØÄ›¼ĘLG@kTģbĪCÄ_ģŻõ…Š]Q÷¢ cø8=O󌊓Ż4P)†yX…\½ė`;?iš®–Š/®Äč8'õÆnš·qq4‚ҁÄx©q}7¦üeŠmtń§kśuÅ­Ü#ČNĄē€x5ē#‹[Š“ŻKIÕ`7R©F’'P!9Īv’õŅtÅŹļsēļk÷’É.žŅ%Ę„łĢ=säkčĶÄSÜ ³½»Ł²0®9?žŗ™S7ŽÖ:K«Ė]?ČŪp¶ĢœnÆ ųÆ­Śj–«§lŠāO(ČøO› ö?SY([qIčxχuvhäVińævשéŠŪ滅¤kˆģīܒø«1gQįĻfolžŠdćEČV*3ĘkńqµÕw\Ū(¶øĀīņĄóšŻ Łßc3Ą~.M Äśx–_‘[;Cąä{~uõˆ5Ķ^€É¦ÜIę6Ę Ÿz'„]j2\]é÷62ż…pR囿 k¶ŠüCgį O»ø“²Ō“7}—qÜ uhČō?Ī—)“cb·ĒߣėĆś‹ųoāē‚nb¶Ńnœ¤ö°ą™č=½«—²ŠüGm„ŚĖn±ŻŁ"ES‚~“%c^m,tV:DšCŻīūh£”ČŠz1Å{gĀ/č7Ś…īžo­dø–ŻŪ–øō©œne-ŽóĒ6^Ō5dH-.‘°Ģ#ˆ"øžļξ#ų¹ąÅŅ!ø¾Ń¬žĢŒĘFgšü«•§cHė~iśNµ¢Ł}†S<Į J]~ėõjńÆ“]FX…ŗO 'ŻĪ’ų9®…ęe)]XĀńMåĄheŅ•­åmŽW¦=xž••§ŚkŚ†£;ŌSrł„÷'ŸåI½ϳ|&eÓŅ…ƒƒŖē"ø?‰š>‘ā‚Ś~­o(fR7'ž¢¹\ĪØDłQōx'T»²³Ņµ=[@ž2¢M„łN\ōé\Ėh_ļ¬ī¤ɾfݟ4ƒ†įŽ?É£Ś+q…µ0—ÄóiŅMa®A%„ģsöõ9éšō=9`¹ŗÓ£·ń4‚ļV—d… ü'YT’ÜŚ4®t=×V²Ž/·Ē*}ĄzćzOC¦O/™Ø¦£ pF?Õ}8åW©c¢umO0×ü'£čóĶ(‚+…‘‹Tüœu®vĪi»…•ŃNÕœgڼzÕNČĮ#oĢ}rńA“m#żöĘė^ńƄ£²Ÿ]Šī †é·ĘĆ%ŸSėҹ9īt¤{/Ɲ"Ö}>ū\²ŌNø Eqæ4/ ^k²jŗPøÓģŸĖĮ;A[SM•(®§}šž_ƒšųJį.ļÕ%9]–įts×μ"’R±mZā?ŻĒ ŽRƒ= ż+ŗ4eŌ‰n}!šW–{£„ŖŁŁŽķ2i?Ż÷ؾ2čsYÆģķü¹ĪW Įō5r§¢f³ēėk©£”Ćuh8fa÷qž5é>’ŪE»yµ1/tÖCˆ¤@UøķžõžĢV>Vńö¦¶é£4šyä̌:D22łõ®Ė@Õµ{M"Ņņ)9¼Óˆ0Ż“óī9­R2•Ó=;^ńd:®ŗ‰ī—!nŚņ)5 Ķ6 w#Ē*ī`Ģp=ĶZ¤ŒĶ­"K_nŲä–g0?Z©¬i3XJ FĢIĻd#µoc)yœtZn·«źĪĒFÕ/r0 QnōĻ„}Cš÷öcÖµł!Ÿ]ÓŁ"rޱ:ī śVī­„Ńśkš£ötš’†m ’ā„›‡ŒÅ}™į_A¦YĶjöćģ2bqņć×Öąu~šćé:“séÉ(x\ }+ču²·žĘX‡·/Ē kH19w)ŪEHasåžøĻJÕh¾Ćœ•dn~µ©Œ™Ļ-Õ“·F“ŒŽ+Ō<)ökBž|`«`}h2‘‘Ŗ ¶ŌdkGżŁ?t×­ĘĪ„FHž“Ɍ™…’’ŽAåŽŁ««ā(`Fū4˜d£wŖRgD bŚ]Ē2ÄQoSŖg­[Ó5+Y·}«oĶ’¤ž†“HŅTŽ£JÕD3•ÉŲ×£ŪjV·–w0^"Įy·(ć”ö¬ä̱āśę”soŖąKo’8ŪJ”q®“Q.c,3Ī=+6Tbrš×Ų/&šUļ—vŹO|Uķ6Ie“ ,\‰ĄoļV&Ź%Ø<Š 6NŅØ@o܁UCwćščt»”9™T‘Ø)2Xd—Y7=…lh—"Žuµŗ`įsé[A9;žķ­›Z#ŲLO‘Ņ”+rN+hD9Ųé-üŌ$üĖķYęŪkō^:V„–ÖFA,.Ė 9ŹÕ!Øj,ńŻFżqøśZA>‰ir§ĢŽ2Ǿ:Ōo…m¢”“j£ńŽ“ ®“ˆf’GŽGQ_šŸ¶ģ‘į‰^ŗńĒ®»§ÄÓE<+Ė7L7ÆQI»+¢„łØńLJgš¶©y”ź?¶!9ļĻ”Jó`e”ztĶztjčŹHź<;ØOa{ŹØøaź9ÆŃ_ų­|E¢-Ų`÷)ƒ&03ōŗF6;­{B$Šn ajēŹ$ q^kū|uÖ?eļŚĆķqsx_Qø6Zœt¶&OæZĘQŌźĆ³ś÷Ńu;;““æÓåy“kØÖx$«)ąŽ8Ķz‡uuŅunTn„į[Īø&wM闐j6Ŗc;Ԍą÷ł±’Bż›ö¤ż›µŁNwWG TA瓌xaĪsŽSdgrĢ2OÓ Žb)÷ GQރoˆ€s{ó‘T50Ŗˆ"€ķW¼„‹ošO—ź( ¢‡VgėOäQ$óķRąiL³q°”>ƒœÕł k»9“÷?{ņžš}ŽjfŽŗgõÉ’ż“äųšßSż”¾ Ż'ü&žˆI¢\I(/u'åŚNxéō>ÕżjAmso¬Ē¤Äå`0WæēÖ°Ęk.dt„ašĻ•{g(;Y23ė_0ųļB–’Ne1“@K)Ē5ęIjʚ¾œ’Et&†;­>é µŌMŠ‚yür?Jžm?ą”ßGué¼@¶WPĖ汊HćÜ ŌöŚiJBq?-ēµó~čVPė7h åļŚĄ·Ö½r9*"=ļēåĻJIāCœ!g#Æ„t¦a1¶rtšU7 ü­Ę)ĶövbU³»­@R0źĢ (:Ģųݰ¦‚£¹ÜŹd,ĢpZ±yj6«ŒœPlhDĪ®¤†oīJčķ5ĖķēIÖ4ł#“Õmn#ŗ†u}­Ü©õąS:`kß°ßķ/£~ԟ³Ē„ž!Zmā‡Vzģ@e˜€r{ƒŒēÜś ū½u©õP—€”¼;šń±ō­&vS;mehS’Ģ;ūU¹¬ą½¼ ¼ rkĀØµ7¦|kū[|Ҿ%ü>ń/‡uȖ{vµqg pą2zšžPõQųwā_x]ķšt›bfĻļb9ŚĀ±’ŗ:”ŲŹ‡PÓ¦Ÿdóż“<ä¶5Ūi·–V ³AqŅ(ŻŪ±ZR‹¶3|C%¦Æ‘w–ߐ03é\]¬÷ZEõµż•ŚYMīŽĆ;W<^­cšQ¹ś™šāk[e>”söEČEvį˜‘_jk>0“ĆŌvrź%Ęe‹Š‹é]FėśV»żÆ¦C<g…†T‘ÅM-ØCö¬nrN6:Ż*K©v„—hõķ]>±§Ź ‚R>Ū QŹżkH»£1ŗ&ŖtēŽŅxϐßÅé]öūy™†ąŃžœÖ±•Œ[lR‚,e‘‘бā=Ā]&źöĢ<3œ)ž• m.ķŅKĄ²:ƒŲt­ĶQ³‘žĪņ›8ü©"÷ˆ4+MjY|``ą×9mįK{Š8QŠėIÄŽ/C žŹ’%_6>?•G Ą“RvŠŠ•‰”ŗ—v ^ąŽ•BŅ8­ī|ēĖōgµ3"õć[]L<”øē>µ[ģß:øĘį×'ŠĶh„T.W?Oˆå$cķžŌŠĶ«E¼9¦ ÉDe˃APZ‘ßjGģ­÷-÷A=kšš+›xÅÄj [°xź)šø“Ś\Ć6ĄĒ(Ī=ėŃōk $ņ®d?Zq•Œ„jßżÄ,” nøž“ā –9T‚3Z©\“ŪOY.öڧԓ•„É屎Cޘw¬ŪKq¬n øN„ŒóYÖ×6ÖŖÓ6XḖ֗2Ų ćÕžŪK “§ŠūÕųgy įĒ9}ŠQ-Ūxi5Q™]–ēŌŸ…eǤ'PxKˆåqPiȎŚFŚŅ:fµąŅƒ’YACŅ‘‰ MA,Q—Œp@ķU4󳆎EĘxĮ |ĘÕ¼¶Q#w8-šu„Ü$‘Hß1UĮ‹œÕąercϹ®KÅ6OØi“Cn²‘Šw®ˆŹŚ£Āü;”ėŚNæuk+L- Œžµōʇ ČČ Īźøī)¹ÖŁFl¦…Ź2kbģĮ4D“Ž3ō¬Ģ9+Ļ&D!˜ō8¬Ū»$h1GÅ»é@"¾gŅ.ŲŽ8نWMkØĘŃRcŸj|Åūų ”9$!=GA^­£µµķ«Iē,€ ņ9®ry™ĒkqŻE9[/.Bp{Ö­œ³Ķf¦ź0Ǝ”Ś­įgø“WM‡?+UUYm'Ż„ēµ ŚŽģ¾Å•€ĖėUļ'¶@®’+äóÖµŒlŲ¬rʧäĶGŖ³ĻīRa’*€Ā¶¾HX­Hč+|\°‘ņg“é@fHå‡z”w`Šk[E,@ɽXqéX=ĄbŁAņ{š*do+ ĀõĮ=)jŽ×{‰bP®GsS;m‘Ć.Öīq֩Ɂ=°‰³”UęŖŲ¬Ļp"vIąP¤ŹR± ĶŹ[ę(Xm}*”˜ŗąŽsB•‰/Į©[D¼‡,F0GJŗ[ać]ĪūKFźøüųĶ^iX`²ēéRgE`5ObjįÕ،óčEk‘&O|«*™"@¬NqéTZl§–YGևTĪz{™-Ł•£wĪpąp>µƒsx‹œ° :ÕFĘW8kÖPZ¼¶·Ū.H*TńĶy߇|_ŖĶ;Ē2Š޽ku~‡³iĢu(Ģ":a_„püśĪ‰p°F”!•†r~•W±q±ń—†~x£OÖ$é’ZŪÅ6QńĜóĒjū³ĮS\.Ÿ„ģęĒš~ŅĀv-ėŗ—Ųī’Žwh•Ž0ūßJČæ¶KūwI#&….ØĶžQ«ü8Ņ/®Mņ”‚ą.ĶįFOµrŃx>=6V‹%¢ĻR2 _8‰įĻ éƒkĖ ~[u qšŲŌō‹[_Ėhˆ9ąqRäĘpiĘFY!*™8÷Ōųat÷½X¢ņbŸ9*Ų±õ©&Wčz}Õķ’¢FT+t5Rw¹0n‘ōēµO̵¦Łź7”P4g'ķŒTŚ–‡ŖI –ņŻÄ6‘JE(éVŒ±}žY—zńÉäWaÅ䈚ĒœÖTŎŚ9J$dDĖļĮ«³čFKRņøEoj žØ¢ī t ęČ徕ŃĘb·ˆžI;śP“;\Ÿ2,¦zб3oR#?/^j%+U#bę9…Ķ9¬ŚŲĒž .p4-å{0$2ēÖŗ×a»‰"•#ŻĒ8ēń­ “±uˆ™¼† ½żEbIv°9ŽA¹[Ū„s”~Ój¤®UœėQMx‘aAĻ” ÖÄÖŅJū¤ŠBTr)ĒR‘RC·Ōš”M{³^gĖ‘<ĆĒ5µ“um$1SŚ‚mbōŞÕDޤn†ø[ŲēȑF]°p9“|£ńYŗĖc=Ņ;’œFqųžÕóģž“žŲ“Ōć[ˆ'_— zŽ“v:cę}Gą9®­”HŲ8N˜ź+Ū”ÓŅņŁ'fņfź8¬„+Š[[ŚD“a¦\dŒ÷Ån$‘!pcĆ&&œAz€śt®“M³bźŹN@­c¦2wśĻķŽ¦5Įõ®oP2iLŽš‚AĘįVIĻŻė+"3ÆĻ × ¬źķ$d[ƒĒŽö g‚x·S6¾eĮœQÜżŚĀš~¶<ÕäfX§u SfŅ #ŠV6”Ŗ­¼Ēb² |ąöö®#c2Ū_° ˜±Éœķjū‡ös¼šļ’ŚĪ9,­5pĶ.]ĘsžzÖ°cjĒŻn•¢Ü„ž¢ ŗ zW­AįĆ>œ·ö·‘;«ķhŗ0µ¼fc(ē…/ķ-ŌĮ0F˜`šF+ӛM¼½“ßkøøéœV‰v9¹O.Õü:öR“:Ŗ:¶åČĘŚāõ=~xƒ[Ź@8ŹŽÕø¬qZ¾„öˆćO+Ģ“ųO Æ:ńmģm£\Eż˜nåUݵW,Äv”ĶĻ šļ‰“Z·hcÓļ4ėÄ%dŽa†ŒōꠛL¼Žļ÷—2BŹäąq»ėY¹Xµt0Ž_DÅāø‘XćqĮŠŪMØŻC¾gm„ągžiŖ—*^c„ѾS8ĀÉüMŽ“Ż;T»µ™ģՕķ;įJ„#&i>™*ø›sÅĒģkgLM=åx–35Ęb8ęŗ#+ Y¢|˜Fä9ē®k£±ŗ’2œӃŠVĘS}¦EEŪæ Qø & ’y½*e±™Ļ]i+–6į^`2Ų=}yv±ksK#@a‰qĆsڲ+™ži,WBźI$…ĻN+”¶“kČB4™Ē ø`ŠĘkSkō:MDŃ­äXof™"Ū÷”ī9ǽI±4ū’–ūׯ#«'Ų­Ķų,ĶĀ›§ˆŖq„Hڜqģ!8Ēz¤Hū]Hn"Ł[åĘqZRß4›1žI'½l¤†@^ābCӓ€*厓r-üņĮ›œš„Rb9õ¶-p’Ŗnaņ‘ź+ŸÖl>Ė9ó”Ezu 2¹Äj–ĢCyVüélŅ×UŒ£»¬įĘ1ƒõ؛čo/“6ó;ɖqž¹åq]F™eµ“KhĀ=¤õ=O­gä—C£Ņ®ŠČęxbŁžøėļ]\ö¶÷VNń•|sĄĄ#€Õo£ÓĒ™$sJ£žozó™U9_§­O=ėX89‰@5Qm‡³»?ķ{OŠtķ6ķƒ&»#iäžšļé\Ž1ÕLoy±twC–öśWÓ]H&užųµ=ݧ‡ĢślqB Iøe\g–'æjė¼Eą­Å0ųžÖÖŹŚgKŒ{ G3V<’HŠķõøŽ}šČŃįŌ©ąõÕ›ā źš)µŌ>Ē+ZĶ0G(„°\ōŸųKNń%©†KĖKVE˼­ĮÉ…ļŽk;Vų{œ·)ī•=ÜlĮ'E;qŪßҰ2Ųņ’I.ĄÉ™Ų88«všē†5=Ŗ\}µ0T«d3węŽVŹäŗ;üWŠ Ä:N”¦yon9»å żÖĶuŸ4Ū sGk=¤×‹¶Utå¤F?Ļ­Z¦%I£Ęü?į[2f`‚ŲoÜƱ>µé—ŗ[źp‹X­’uAµ˜/$}kS”hQ“Āw’”ŌLŽęŻv`Źs϶yéXŽ/¼Õ-åÓv ~ō9 ŸN1Q)£©Ļ}j|¤–”\@ÆŌ®5&ūņoYWo˜>R=8؎ę<Œ½ ėߣ‘47ī ¤‡Ėˆć=1ļ^ƒk¢}»LšT›żBS`˜{Žżėcc£Šn¦Ó`śœ‹t •¹ Œ ē½Z¹m)Į·v·u „9c×ó  æō žŚ8Ź7a‡_jóĶ6Yģõ)ĢVÄDĄlē’’CQĶŠĪNśĻć_ų‡Kš6‰«M¦ÜĄ±ø†K‡$ŁŽĒgžł®~ÓĚЬ-µ-;X“O63ęŪČĪÌ«c¼SµÄ”sJĒįå֟u¢ųŽŁļE²–q¶BUņyżq^ó¤~Ņśv‹®Įąæųf)®YD‘_¬ ²(Ųłz™S¹J™ī-×<,lmõĶ2žŚXn•Ū””sÉGjłgÄÉcÆ é-턃#,‡ę#޲ö,\‡Šx–ßģzä Æ"Cęf1žōü«éėŽ·ŅėöŃƍŠ>qµ»1>Õj,žVgźžšHÕ_Zµ²³Õ­ Żö˜ćÉĒry®/ ‡Ōļ;U³”‚Ŗ€ óĮõęµAŹĆVš-Ņ[M‘+1Īʐu†¼ū¶¾!š_‹E¬–Īm f ƖVĘNrzu”»³>‡Ž8ÕĪųąĒ¦Ļ§ŽĖnĘo/Ģ\esžæē½Ä:'×åK‹‹y ¹ņ£/¹ŹŽÕŌ®c ½¾Æ«ŪHFS“ƒßéŚ²“Ņ=&ŪÅÓiš\,’ ®ģ’+š‹Ē֚ę£-ÅƒĘąņēqŒśå”šhś?Ąß“Ėæ3X³°.Dė&ŚF2=łź+āŸÜźśGˆēøÓģį‹DšVņ䉲ƎüćŚ¹§S¦™Ą·ˆ&žępZVo1Œ·>õŌčß ­‰4Pęé7Ģ8_Z橉q= tśGųFŽßFŠKHA\`zūׄŪ2̤KlóĮ漜F/]Mż™‰ćt€ZĀ|øł1ŒsŒWįoÜÜ[«„&&bYTżŠzW‘Sif–„ąKŻ5šŅW ź©€„žõ³ā]KY\ųvh"¾@…āJ±ģ¾€Ń …Ū”óF£©kŗ_Ł’ŅXtöÜmą’ žUŪi^)K»+™uūk€Į‘p2¬@=:óšõčl)Hó‹½Gké.m Ž+|’QWhÉž,zÖ]ƚš<+Ŗ -n`prĆßqļ^„9MÖ…«j•Ķ•ĘžŽ×šcd;]żF}ėīŻOCÕ5O[]j–E$B#ó079$1ĘI¬köBē>NŠTмH^m(ßĮ£rN¹Y?*ō?xĖĆ~1šĶ«iZéś¢nIWRlŸ\Ÿ­}É/†thķķcÓ“{{HR1Ņ<±cךq;_ x=%š(ä‰BžA#€+×-¼= ectĪ;öÅ\b`néŗ O8…BF‡Œfŗ‰-dŅX­Ź…PzÅmÉ}Œ-Kģ· N~¼ ĒŗūTф21ĒO„lš‘č³YyĻ„¼ÜtÅvqź€łD€9ę—22”m”ĖkZÜĘéä ån\÷¬JŒ¬oiį>Å<:Š?šĆä8ć5‹”I¾Ļ1Teū¹<‘A\†œŽK$[Ąe^é]¦ˆP²µ«ę/CŌUGqJ: ķ„žDhHtäö§Ē [æśb½˜śÖĒ<÷:­[žH‡ƒųH«Š¬īę& ŻHō­ć±«kՏ12:q֙u¹‘„Ü0Ų錘 ĖhŖXķŽļYz…śF„ŽŻŲĶTWp<÷SńÓéRF—0—·.åtõ!ńüLč–Ņ|­ČoéZr£ELI|Lņ‚VvICš£®G.æ¤\ŚÄöčķ ę «÷Įü…e5ŃQŠž`’næ†:·ƒüeØ_ĆmolŅ0•ŠĘA”’§@+ąS–ģģ¬Š“Śŗšš#š”×ITdŸ\õÆ„žxĶ4Ėųbŗ¹Š+W+Ü{ēŲd}ß`±ČŖŃ1•s÷…|ÕńūሊīŪŖm£X¼Ö,ąŽF÷ØØĪš'īüöńGÄļ†Šü/ńF§i¬x‡BP ,ūd@oSŠWėĘØ“‘a†Ękбߏrųwā™wÓ®ö(żŁĒÆjśĪżcš„O6فIWūń‘‚į\ęsGńĆ’®żŠ¬~üx_‹Ņ" ¼Y–y#$¤7yݜtäüÕģ61V$”Ę7!éż+£µŽ:°9ł£ UP„Uc4@N"ŗ”¬p“VwiįP6pEEēŌØäŽ<Óęb+ł1ł”‚Ÿ8ąäśSž7;ŒdL÷5j@:RŖ€cč1Ҧ¶äRĒ×J£H-MGŁÕ›=N@÷©–W••÷eĮÉĒ­ ”ßsŪ?g/Ž ż•’h‡ß<#xm®m®cMV5REĶ®ą0ģ“_čĖšĖǾųŪšćĀ<%woØx{_²Žę'R0 '8ć$’~¹¬*Ęń:•‹I77:=Ąd•ÉĻ_„dk¶1Z[›§Et0#8ķŸķA^,d`× ¹$0M„”i-Ū$gz΁óv:mŽ9pĻ€ÜHż+Ń"Õ`··†Ż%zmĻZ”ŗ %Éą© ½kF ČäM€p:֔ÉK”GVš=25¼ŠķY8ŻĪø»Ÿ‰{O7“$LNŃøõjŌÖ4śLæm$I£|ņ W‡AÖ-ēy ¬ˆßĖdćéYJ=FéŪBh­ŅG1[ĆNN ’z¶,lķV2³ęĪć'†ļY†Ä‘\KgtÆ„ķ8Č=k~ś+m^§ŽÆr9-L\݇XĘ ķ»cņ5Ņ­ä ˆżÜv§ŹĢ™ĪŽ]¾ēWMäŒō5ÉC©A§źQć¶wlć 4¹DußĻy$ävÅrs¾„ļ‚]p ķ@VóĢ@̬²t­Ø ½Ķ¾É¦q[ŽåÓ”K¬>Öŗć­z]ŠXȋ“¬]0Gjęn„j`¹!dI×ÕZ‚XŻ­X7`žOJpŻĖĄO” bøĻxĀÓB‚’tEo¼$8Ū5QW*1¹^ĻÄzV± %Ō|}īpkØ“Ń ©¶hŚ&&‰FÅr2ķ¶”’«Ć$[“‘ZZU¤Ś[ø‰‹DxŚO²–Žęfē”’Īgó­äXŅŲī yć֓WŲ a¦A4­$ACgęÅYH‹&7©oZ! pzö£†ēŸķ·1‹p~÷ ¤Šu]7UœIÄs3°÷­lzövļ2@Iԁք¹±[ŪbŠ‹»ŌŠ)żšQŁn#+Ö­Ā°13ģ§µL€·jĪØŪā÷kR;=H1®ŽüV 2źĻ(®§+Ž@ķYxāCØŁŠō€ŲÓ$ ‚CŚAå,\ ۚ«›&­…WĘy«‹Ø+*ųÜ9Å+ S˜ZĶ竜óšÅ{øŚ4l‘ׇČ*£\…‘G=ĻJč­Dā5+ó‘×č%ĝ—ĶįįMł§*셁}¬:ƒU© Ē’ńŽQį~;ƒ[V·«ä€Ć?…lbN5 Bž5‹pŠOž­°Łīh]&E Œ¢E­p¾# "Č`>PĘN;S‹±qGĪŽ0ҵd»‚E’?2§éQųcO•Óķq±ŽVnA«ö†§Šš܏Bźæ(ĘEtĶm<ŖæīˆČ Ü -?Eµ’) Ž qņŒę¹>M6ó"0Ī)!Õ5-;W1Į"ĀŅēŽ+™žĪKt”C$Œ™Ęo„kgŹģpŗŗė9’ĶD‰ŽPŽI©¬¢›Sµfø·ņq°Žõf‡S”ŪĘĄŁH¦0;Ņ“'ŠmĖ·Ś%gwö “‘‡ØA é¶³¾O8“…Ęyōƞ¼A­-­ś\Ų̦aĒŹ~ķiw #nÓĘ3É hĶŽē­wžńž•ršZK?ČĄŽvąóTāŒģz\•¬ö¢m:ķdSÓiäÖT—ŗĢX\Ȋz©¬å Óӌ·Wp¹•‡gƒ^†m¼Ø7G&ńŒÖ3@P]YXį–FQŒØėZļŖKD“…āʬĄĮššÉ™!Q“ŽxŖÆ×˜!ĻćŠNVÜjcĮ?>:ÓĆI& P–Z‹Ü …YĀ ō¬»é'„d†ŁŠńҦĄPo9•LD’Üā­ŖĖņ³‚ķŽ+Xģ)l[‘š,³Ēµrń—Ü8śS2H姉†š ^˜ØLLĢØ[h'Æ„&ģlléė$$¬nÅ:}k^’Eŗ»€¼LQF⧜ Zu¤ś{,SHI ÷«¼‡P”+G‚EĘ)ó!J$w$qŒ7~9¬4’¬Ćø„)UŽY½ŠµIåŠo²½ĘJäĖc”÷Æ/Õ|cw$+EŽWŽ? Ī훩LJtӑL–īØČąÖÖ·©½»4@ ķŅ‹t ģqV:ÓĢŹfrŠ“ĆŌׄŲĮ‘Ć2–ĪsWbn ‚2ØĘi.¤»·E˜!xĻ^•¼"J¦Ž'Uų—{įķĘć”ūÆ^Q揎Z¬€=¾”“8bƒEiŹŽˆŠG7įoˆWž#yqlАĆˆÆC…škVóSŹr1ŸZ4Ct’>jų‘”ĻŖ=ÄpN`*ܐNy?ō›Ķ#^oģ֒+…I½Øc߁ō¬„S (£ōGĀŗ•Õœ7{üž>zō9/®­ Xn¤šŲźk K ŹF €Ģ‡9ČĮę³ītˆ‘£.§°ÅA“‘%¦K”w(?-töv ˆR9ĀĘ?CA&–£ä[v²”{½p·kvņ²Č­åŚØ,>͉#Œ€kŸŌõK›øįĆc“ÅPÓ5!֞ęŅ57°Ī{f±¤™³Ŗķ9ķŚ²’CJäÖŗŒ‘œwv­IŸĻ€Č oī¤Ō©÷<ēÄķ)ŌeeƒšņoŚŽGɕνĘ605;īŲHIh똻·Į!T€£;PkMō<ĘžÖŅĢŖwöŚ{×ĖŽž^+« N|ČĮ#ó”•‘šÅ’?‡oc¾XŁ”f'rš©Ÿ_ʼēHŌ …”gE™Wi<=g4)-½µżĀµ”h³÷ĆØõ-.'G†XŌ’»D™¬*“sV^ŅlM“ÜĆoó‘.FwēüŠéą’8męHe‘”_¼s‚y®iK Ķm2s,«"®T 8­QŖMc•2DF] dŠx®U‚Ē*.8ĒJ§Æ—¼‹dpģLs“u®*°7„ŗxóD0^ŅtV,+Į¼Q<^Lņ8!‰Źsļšētõ7Œŗ>źŚœ–÷SÉo!0:ƒĻP{ׯüų³©|:ńv“ØŪ±’Ę\Į2ģGŸćö>õŃ9©ūGįoŽńFƒ¤]Łß5ķĆīI„g 8ś×§h¾<óf'N¼Yc{{ÓöVŠt[ė[뤕¤Ye'ųN1_Wx*s¤^S¬ÉÓéUīsÉ[Až/šźė1Ķå°·˜Cc9öƚ5’ė6÷²DO ŽõŠ©˜ „I¬3B…Čō®jėC™ī¤3( ĘĢzVs¦5+\x+MhXŃŁL“Šø9ō5į"šĪ¹o;Åj’Ü6K€­’}³ųW, tÓ©¦§Øj:͜/Śą©ä°ę¶ü­Kqx­qpÕ¹W< ŹÅ9i”ō”mX¤¤Ę#qœ©ĶyTš5ü“¬Ö¬¾J¹ąæZčF.'£hŠßIn«w ”öč+e4¦³¦·ĘT†Ī8"·2q±Š[^[ͬløļTĒrŗ˜ÕWœ1“]Īy-D›SūĘÓFĪ„±ņ©?6óV…É”)\z*‰2ާå°}›Ÿ8ļļ\¾³syKG1O”ģ=«9£x£˜kF¹ $Ąy«ķUĢG!ŠT,@+Åa3eįw [FTG#Ø äŸ˜ŃŅī]„Q-±²?+!8ž“ooŖZŃ×Ė#8ĻOjĶM9™Ą%j”Y™”>‹ˆŒ ć²>É“ą©ß=éņ04,ąŪ#4ˆ?óŅ®\\*£ÆĪ"ĒJØ\čyåö«§XÜŖĻvmm¼ō?JĘÖo’PZę§Ż-ŸjŅĮXó×·@Ņ ÄääšéģōŪsFى—ų»TøÜŚ1±Č{; &ĖÄ8ĪyśWGż„±*[G"mK„»+ø±É=Å\ņ4‰ŃkµµäĄž‚œcÜ„+V„q{ŻÖtoŠf™«¼.‚BTō5¤U“+چ:÷‡^āI5+WyÕcĮČSÜ~uSĆ?£ńa¶F¹·°½ß‰R@~U­} äŌ©Šś2Ēąƒ„YĆmā·ū°#R®£¶3ĘkŹü_nž°6Å=ĀG'–¼‚ŻqϽ3“ڶģr:£ž¬—dļł'fbvŒV·ÄŸhö>]:Uóā’aóæćYĶr÷<§Įž exēŗ†b„’ š?*ļcÕæ“.M¬W¼€“ĆŒqY Ē•ųŹķ~Šm§2e›)?žŖå4«?ģ×IŠ#A’ądcā®2±Q•­CĀ~¼‚=BžŽķĘłåY$nŲ·JŽšlŚ”—‹¦%Ō7QpēqJŃH¾sÜ0øŗŅ<ł­ż1Ÿā’łüŖĖ7"Ń;{·Ō&r§Ź8!£9ć>µˆ|<Ÿgk‹”žXŠ7ļc3’<šKFßT ē˜ŌeJć;†xükÕ4OĒo-ņ¢ ĻR}…d—RW‘ī_ ~#|3ÕōĶcį_Ä'ˆyĄ¤BX€`ī HūŲé^'ńöK³Ó“ŁuæxÖųųqä2E Ž7Ę p¼vķšŠŚü®ģéü©ßč¶‹©ŻĄņĘ»sdĒŻ§Jó’ŚgöՆ•«[YIˆm‰k{ØźG Ć”S5Œ»˜æüM©Ml_3E0"9#9ĒdgÖ½;W’Ķ@»ŅĒ äģ. ®(­ŠóOß<¶vņ!ŽŚ\•xveŽŽ„MįĶnĻP°M9§ˆ ¹1“óŽĒŠ=ƒĆŚ,’b‚É/'ørAcĪ=+Ų4 Ėmle[w’€¬cÉ_„&ɓ:ķKB·ø²³g&9ÖMŁĘ7qŠžU·iįOݶŸw¤ZIw»ĖŽ\{䜙 :˜’~ Ś'Šü-u-®š‰ūūy¹ć=yėü¾µą šŽøŚÜ÷·Ö÷¶ NȌg׎k8ɚņž«ų"K#”mŗĆęU#ÆÓØÆ5Õ4(5”$˜ĪC[Ø’ńķĒJš—»‚łķ"Žd@ĖeąŸÆć[ES‰=õż½ā¦¹‘īRõÆ|ųyń!Ņõ&¾‘5O•H8źrO·£±Ō£Ń›ŚŅĖ«Ą'k¶…ÕĆ_āõĶ_ƒWńd½mŽęhāGb‘¦Į÷Ę*X½™Ąųžīiµ,æŁÖB]BļźyļÖ¾”Ņüi~Éoqjn.{X ½rÕŌj¬Ųų?Ć~5²jU¤wń‡żā. äwĶdk? ō’ ŽY­µ§Ł$ˆį ?<ćŒ8®^f5޲–wW±¬QlįŪ‘ĄüE‡DńF‹}ge 4R.Ł"o™[<„Rw4·cåoY]išw¶]^ĆK’Üd’ž•ŌųÅėŽ]"śŅÜłhI’3ČlœL9?ˆć6Öf GŁ&3µų>µąörėŚĶÄP­¬ŁÜ>cūĮźx¤Ż·)G±fūƚōwÅŌ¬aøp€~‚­Śßų\:}“(ÆÜZIĪ=TŠć­4ŽŗTĻ©¾x<Ļf‘O¶³mŚ<Į+č]į­¤7I,Ö„Ūø¼gŸS_7‹Ŗz“©ž©¦|"ѧµ¹¦[Va”r¹Éō5›wą&Źž¶C2 …·ådü1_;^zŠ¦uį?ßiółÆĢ„…F[#­xöƦOį}DEk“Xˌdš¢ø%Uģi8#gNŌŅXĘåĄĢXd~O_Ņ“¹­¦h§GøžėĀ㨭čLć«t>7ńü²«=³[”ĘBŸ0īk”šµÜ÷­¤¹k€’c‘žßʾ‹ /tĮ£Ņtß Ē&³ak©Ķ …“£{ AĆØ’"»‹^š4z$Šā+æ(G$[’vqß•wĘDJ,ņÆéŚnė»(ŅSØŒĘ=+ļ]+ŗ“xbŽÖźÖ8mPsƒ†lu«–¦gˆx”ōIõhöäóņµäõ…ƒj1y[eĪ@ĘŽzz×,¢RgźZŅG3Ėē*"äEa¶µc4Ū/n ¹ź ž*č„»ŌØt){h, kšń¶įY@Ėō? ü>ń—5'Aqk•Y†Ā7.:f»ąŽk6}ךąp‚ź;ĶRy”BÉwWޚĆė]…޼ C:įø§”\‡®ųzĆM+ŠĘžhąØģŚW‡lõTH‹ćp÷56Ł¢–ɧ·–¹µÜxr5 Ö)‚üÜ©Ēj³ K±Õ6’öwJE¾nXv÷Ŗ^+†v± ”¤QŌŚ1±™ā:†øÖĢ|®ćīŌ—^$³ū:H‚ćļÅZFŠģŸĀ“Ś^jI;Ķŗłr+Ū®<-bń;Ś\¬¹ėÉ©•>äŹ6Üńæ鶎‘n×k¹UœgŲ×=oØ ų,kØZŹQ°Ej>ŽĀ;ŁeĮż>•~ÓL—Oøób åć zQcxnp4øµ»U…(!ä‘^eg¦_ZYÅopŅ]\#­_9ŠŽs\¹ƒJGĢ€Œgvvæ ¼>·†iś”Ńŗ.åU8$VžŅālś"Żņ6ˆ8y€ä÷”’4ŚŽ€:ōa޳›1”Ž[[ÓEČI••}ZɀEŒO ¶ÓŌqY™Ž}ŸK’Õ&ŠFiqŠžŸ…yę«n‚ż¤šqøŽ ×œč‹+Ły¢h勁Ćz×Uį[5·BrĀ÷ŖDJW; ¹!Qø*ęÆ.nƒ§mź>é±”£r¤^*oMmŗ“+0@ČÆ[²¼“ŌžŽžÕ¤øÜøĻ„o‰ögr=ƒ'ēī*µÜóĮ JŖĻN;Zfmt0?·Ņ[iÓĢŽm€ƒž ×–źzĶŠ‘£ŽĆ-Į'‚((Kfڊƒøw®] >ńl¤tL6ÕƒtŽŖ}9ģĢ3;Iä·9Ē»½īŠB#”"«qõ÷ØsÖĄŃń§ķÕš?GųæšŖęęÖXü ńž»ū7|ršwˆ4Ē·¶Š.oÄz’nŚdLą>œ×õ‡ ųŠĪž×I×l^)“Ūč#¹FC•ł†p§ząœÆ©ßS°Ō%“{}BÉÕößZśÆĀśõ¾Æ§ĀłŠŒJĢ$Ÿ?mŸŁŸHż­æfŸˆ? nģm/µųm$¼ŃžWŚR` £Ÿēķ_ēéć_jž×|Aį]zÉķ¼A¢NÖ7pH0c‘ ^”ĒZ֜¬ō9¦xūĄFń"ɃĄĒLÕy `1?+Šź‹¹ēÕZ˜ī¢7*Ŗ2Ć?/\Ō+ o¦_0)č;֜§:—A%ˆdŗ¶ęķĶF²J‘Ąć>•(±ĢѾÉUėÅ\–uHÕ-Ę̌ę·7ęC£m€ s r¹„ł4ÓģjBĀå&¶–$,čcŽ@=kś’ƒ~’lł¦Ņ¼KūüBŌķģīģŲŻųhJēQ$ģR{ƒ“ŲšRZqgō­ÆŖ¢[ė[Ī…ŠJpyĻłķK2XźvaÉZŹž½ń^UXŚč£ē?ų*=BĒRŅįd]A#im™ņ~eäҾ<æK»›gKŌ ß5µģ õģqśćš®kˆü’‚‹~Ī×z”ń.‘gghĘc<,~o:#Ų‘žxÆĘ(.žŁjīö¦V`WÜZģ¤Ģ¤R‘ZAŒšåķL(ʌ…BŖœć5ÖrJ=óÕ²”#ئ2lfł‹‚r¢™ƒB!É—½I+&ńeóW-¶¶ŽĀrÉ4qą¢śŅF\Ł*Ą‘ޣͣ±”;9& Ų$qWm„‘eXŻ„hG$Štӑ~iŁ­üŪ[™m. "X叇GSTö¤žsXՍÓGLeŌżWšä¶7V_BDlß,Źó­Ėż ʞ]“ŖI;ć'œ{Wƒ‰‰Š‹v°ø„ ĘÖčkÄ’h?†ŗWÅ„Ž%šFæj/­ž7š ¶pS€n¹ā¼Š‡U3ł7ńĀi¾üCÕy}‚ŗóƒŽ“ģ˰\£$£Śs"ŁBĄ€ĒÆz”x”!o1Hķš YJĘ"ČĀ»ŒÕūhåBPīÉ=}(µšyRH·īĄĘzį~ČEĘQH ōÅr3v6¾…?tÓ¦ŖŅ\K‰™ĶCœ@ż›4ćń„cĖTN‡kč=ė¼Óo£ŗŒd«#u"©; FĢ”ām®¬LPO‰Wœ•äx>ńgSØ$NĄīW ‘ŸZӝÄė"žīŅ%T*(äŽÕ½ˆ/lķ”Śe• Į>•.}L£už—rš†›r`»$]ŻFyćó®£uŌŪv3¶Éźfc$#«  µĻŻxŽ *s¾MŒ#5¬cmdz°¶ńµęž×6cĢ\}NkœŃ8øImZh¾W\–^„Ÿjń?2KÄ2ˆŻ«t"īŸxŪœؔAükæšÜ‰|ŽmŁ˜cµ”¬{¦›¢ŗĶlFĆĘŽ•Ż„Ō-Ųn (g½c)\ĻœŃ»Ņ5±:  v¶Ś…ō±FĀCŒ“ž+*ˆ™“–S¾fP1Žżj”·-īåćž2+#Toé—2ĄńÜÄ6t gßE‘ )‹¶+)[?]Ē*kR „„„TVÅK@h©GRŲōī*+ČU‘Y•X`’õč@a‰m”J/ €]łų@£h^E]»ך„p#¹Œ`3\>Æ­i»ŅBG9Éā—(õf=µµŽ¤°{yć#pŒžÓi3ŪN–ī«ōĻZ#‹5.µūB®Ķ­Ö­ĻØÉ, )>T„×ü/©k/"Į$`qĒ„fXü;UF[ĘJxĮSuN„Ė0|9{˜å±T7dqšō{=¼&Ł‘Ē5”ŖĆx—Ą:>§ ļ˜÷v—.æ»hĻ÷Æ:Ń>Ė£j–ņFī,żļā÷¬‰¹õ~—töV‰ÄŪ·§„>ęTŗFS'ØĒj ¤ĢŪI≛(é[/šÜ:f‚Dk·8č3Vģīln0ęŖ*ģ„jNšTŽVN9ė\Mōī]Ü¢)ĻN•²DL…'.ÓĄ†«]iv×jÆ4¹<Š ‹źd6œb.mQÓŖ“²ē"Ńõ$V šĮ‘µ„ņėŽŲéTŠĖ¼ĆrzR• }kJ{µ%£>£3^®x*X®e“ķ¢;sŃ=€¦b[eŒÅ ū§śÖ6µ§ŚG>K„Dö.ž[Ø@(O9#ˆńóž½|ć㯠~ż.ģŻĆįGZĪę§Īß<5oā ęĪ{fK”#ŽĘæ9§š³Ē¶¼·¼8ß°ö5õσ5ø’ĪCož@=ė™K”Œ§}DŽäŻī/Ōu¦Kclą9E-Ófŗ"ō9›Ōą¼AįĖVŒĢ°,EsøŽ‚¼‹VšŽ² §O)<Äf0xϵ6‚/S€¾moOŻŻ£ÄŹ98į ®2šµÄm!„!@Y²+”ĪˆīxLj¤ÓmššĪ’0b Ҽķ‰irÓŲ¹UÜ 3ÅrŪSŖ›čzLJ8ÓąŌɝn öb)PŠGwĮÆ-„+oqe=ģ™ž°ŪUńwĀß?Ā—VšŻ·™p„UX+*¹ī3ŪµG2&QGƒ\ųgžׅ`³G<2!ķōĶN"u^ĘņA,g±žb³g,šŻšKOŻĆ¶ŗK×b Øį’ z×Keį‹(mÉnÓl'{š¦‘źxϊ5)¬īäKyWģ¤šŖ1V<āM;EŌĢņÅĘē%¾`µ¤|Ģd|osyā‹}dŪkE«;F„#!XĒZ÷OkséhrKÆĻœ 3h1ž.ųyÄ;ŪmsA“ģśżøi¤g`±īöb¬Śź:ö†¶–|Ÿdņ„M™7oĒßśT9›§ŠņÆźŌZŒ)4×Ö¢YB†üÜ°?§ZōīŪPÓ„7—Ź·B¢’’ADgÜÕÄįo'ŗŠo. w·ŻņĘN=Mv> Zņjé³Iq*ካd/¹fV9?GŖA)lŽYU‚ūkĆś,s_%ĘŊuĄĪ0Ć8>ŌŁõ/†µ 8­Šż­ącå$ ż+čėVr\@— ‘cź ”¢%}ŽĖĒ6zd"Ö9®ü‰‰ žÄd¾õɣ覎”įMBĖHÖó©[Äņ[yķž¶NøĻįśW,ˊ²>HŠž"|NŌ®µ/ ßźm¹IŪĢYb‡#ҽ›ĮRüEšJŻ’o42é7 …f„e”/µP‰„Ī’ēāŸ ®ć]»·–`v{šåü_{g©“S[$07Ž,ƒŅp±&Ņbm,jW“I9Ęlį¦kĻgÆ3Ćb“&’į’ßžŗ’dLųiįg“k­CP“ÄEFü“šŽ¼ųs Üėm®^Üoӊ±īż”ZĘ$Y&Pń$¶ŃŅĻG¹’čØŽ.gžÆ&’(ߏi<ō$Ą®MRCPźspk±j—@ńHĆp^?Z²Ö0#“ …ł FIōĶ2•‘ĖĶe+Mņ¬Ą*;zŌ6-QŚt†K‚”rsŠĻxŃ­5 ķīžČ5Ā@”™@<)ćŸĘ½oąļ‰4›Mō-~9a9#R§‰A+ TbŁé^±šŽ.ģ GM`_¦žø¼³Ō¼)ćMī+{•]ģ'q·qĮ ¤W!¤ųE®n"µ½6śsHQ†2 ā”šØ£“³ŠóQ¹O:ę[¹ |½>Zōū?‹»s–ŃO+'”7D2F1‘ļ\źXźĆŃRfmÆģ’5Ū‰¼™ī²Å‚ć•ĘkŪ<š³HÓ$C%–ŁĘBż+ĆÄbORž#Ūō‹}.ŅåŅF…OŹĒ„zv—®h0Na/ é°|Žqƒ^-j­›F6ŲémµÄy£’Ķ"{^C ēJ‡\±Ó5&·¾(É,N ᱃źEyäjT}*ĖšÉ—_N+Č~#Ė$®Šą>JßĖ„yŅzŒĆšö«c<ęĪā;ˆ¦ »,„+cOńƒöƒķ­Ä‘Ɇ^>µÕBFR§sĮüC„éöņÜÉ©ß&Ę>īCś­y6›%·‡µƒŖŲ²Jß#mū²)īkßĆ3'Ųõ?ˆ6>3³‡KŗÓÖkXE*FĄķ»½y‰{­„ ņKü»XäWØg(©\[¬Ā$ čFӞnMć ±ݽö«$ćœöżj¹™—"9}3\HõH¢¼¼’FoācҰ¼y¬ZO"Ķfp£‚}N*£#­žµ;łžŌ¾M“×L\+*ó·Ü×EįÆxƒÅĻŠéńŁižp…ćåi›8Āė^…:6Wg$¢Ļæ>~Ķ‘2Ū[_Ēq”ó7cw'æJżų{š¬éļl‘Ck•_/˜‡§Z¶ŠŠ²>“Š>}Žę&0+ŗž\dśā½z?%Ä šF¼m-ŒĘ”EČ‡Jš1²œĒi"²d·Ķß'„{e®“ŲĒä¶Ė…_˜™ö«±„„©“}§™QŪ…e䚯£kāŽTXeŒŻÅĮ©ŃNš9Ķėψ­k0’{6hĄ±\¶³ńkAŗŸģQ£™d3é]ˆµO¹å_A«ÜO© ‡~w/\V~§§Įi”ņ<–mĄ/Š{‰FœҲ=įž‰µ©eżģ[²˜Ąōō„”ĘĮ^Ć(äĶKf,ä¼AgżÄ cĮr+ĮG6 ńFŪČ~Ķg4#§ŃćŽd‰FNÕŃÉsb!<ЁGFkx³ˆ–ŚĘiŪz,ŃÅ`]ča¼Ä“‹)Éś}(5Sīy³įˆļž×kŖ[$ÖMĀąsR|7“›ĮwwzEÄ·L¤ƒ>Hė€~“ɓ=ÓNøž;¤(®’W”[xjęśHgD“Œ¤pi„r-ė> ŗ’Õ¦“D7ĪŚł’_ŌbŠąź Š0}æw½>P‹&š¼·Ś„ÆŪaFžŻ²P’J³yq RłwhO8ś}iĄg‹xÓĘž"𾱦ŢY]\ŁÜJŸĒ#“č+č? ė]É —/‚ė¹°0­cכJ]BÕ$·‘f“œ×µŹ¼ ’¼#«øq@ū%“¤E,³téÓŽ­Ų=ŌĀ(X"“čhźŸ 0_ų†zÓµ-VH-f>X`zÓ»1hņ'×"„\crKœuJÄ“ÕōķL—ŠH®¢bpGz >¦Ģņ(·ajXĖ·*Q^CÆųoW×nbŌķ<ń,2īŲÄ®HČŖęfŹ õ+ŌN—ootū¶ ø=kgJ®‘£WŹ£8=MK$ź¬ō{[Ż2ćNՒ+ČfFˆł‡ž2kłŸ’‚„|³ųUńfóVŠŌ¶*² RŹŁ<‘Ž;ÕSz¦Cģ~w]E DģśC)DZŖ>ŠńcSÓŽ½ŠNē;‰ōgĮo®‹®YZ "†Yœ$ŁÉ]½żE~ŲĢéa ¼És  (Ń·EEÜŅ™ņķį9~Éo®XĒ(¶_’]€±‹8ĖćóÆÕ?ų%Wķ-ā?‰^ Ö>ųÖļN½ÖtŁ<Ķ’b^XĘ=ń\œŗ4wAt?mō8^Ś4³Z&0äö/źķ¦ŽGe$€Ū»qžĶs‰ģ}'¦HŚj„‘·aŗ0īÖæ”Ÿų/ģgĆOˆzGķ9š÷Oū„¼@#ƒWĀL1LNC¾Ž…³Ž{ꄏĶ3šHžqu{k˜d™nmŽĻ!†+„“2»óŽŸz½£†¬ ņ[l+³p~KŒQ‡ ˜\ÕKK3‘Ē[¢›Ū”b#Ź^øžö{Õ]øœ¤ŒŹ1Œ``šQc|•eÜē½L„żÓy ŽOLV„ót˜ę@Aījņ †Ø7„"7d€ää’„zĀ‹Z’Ąß‰^ ųĒįk‰ōĶcBÕ-ļäø‹%„Xy‘ķī äb“ó;é³ż’gæŒ^ż„> xć….cŗŠuĖžu óC9\ć±ėŸp}k“±‰“««I¶…baÜzÆ„yÕ£i׊4ö”Ć}o3AuSŽ¢¾`ń‡‡bŃ|Gk¬Ü®“+ĄRåGœd{’õ«ŠĀ¹ńķ;šfĒĘ~ń‚E¬óD$It#æ† (_¾ßü5ń†µ„¤ū:iXŚć#i,®ŠH‰jxæŲī#ŽĻUÉät'ҳēQåL]ßętu5Ū Ži"ŗF­ BNō.[łśÕŲ¶Ģ>S¶@Øę–愁æÖ‰v0@ģj²oI[£†éĶ\ ¹bĮTp>ķB²ķeM¤œ÷ō­KŒ¬\bƒŲõ«n’„ńŸ›½ōälÄĖ,F QXa½Å}æ’óż¦õŁ_ö™ŃuØ®.’įÖiŚ•æ- £ć±R:śT=ģĪø>‡öÅ£O–šWˆtkĖ{ßźš­Õ“±3ld~½ÖņųŪ0Œ,³EŹ’“+ĮÅŻ6Ž˜3ص•ē%’3įČō5Ÿ=¢jϦߩšž‡ZńjītŅgįGücöwÖ|ŖAńBbņF{œ)8 ·ZüøšėkŠŗƒ‘,j2®¼ę¹%RĢõčĀčä¼Uį8ōĖo–2¶ģŪr¼ą’Jątß0“°mo+¦ķ]ŲjšŲué[Q×Åg˜å#Ļ_Jõ_†^4»Ńļa·‚pö6ŗø$Jõéźy• ~Č~ξ2°Õ“xåŠņŅ+” ū¶Ⱦ¢¾ŲM_NÖ-—Č„›•’XÄšĒŚ©#‚­3$Ūm˜øsŹśWwi¦i—Ś÷ ūRČWŽ€sż(±ĘÕ“8Kې3ÄĢ9Śqڹ9ķ]d ˌõō­£¶¢='Į–—§ŽÅoØ^“wä(~AöėZŒi[›C°NŒ)™ĪęTš—˜¬’:¦F>µĶĖuso,eĒ^yĶŒµ:+n gą67`tØ5]N)Ż|µV>£ÆćA©B)¤ŚXÓŠęõ» 5@TĘ铹{żhĶŽ„sen–—LÓ§AŸį§Ük:}¦|Éē rj”[&Q¹“«źz=²oK“Gaž;›BæR‰¤;t ėTé³7uŁ F’>ēĒ8®6yPܵ­Š)m½8• ”vræ’īČOĖō­8!s†ĪēėĶ"¢ŹW–ęcóå9ā³o4ķւāŃóx‚˜Į#փc–:Ä’®9(kPׯ|ųȅZ&88ž@ ‚H®äŪĀīąW°xnĪ[8"FWh°0I ›PˆÉŪ‘ĶpqĒØ¬ņ[Ķ)™C ŽƒŅ€ ›“lɜr×é[zjZµ³„Ō[ßi‡Ö€1“ū[›kéEåŗżœ7īŻšū×As©YXŗļ#Rp œ śPC—C”[««aq‰£Ūž9ČÆ%ń‡…ļu9q2!'ęĄūµ|Ģс|;w£AäβI7^µßŧŚŪܳ‹h÷śķéOŚ35#¼hšZ=”xĄjk™į}²(8ļ‘VĢęhi×±;1ŠHI^0ǽG­\¬«°ˆÕøč(qīds+¼Ž);֊ čc`7ZiŲnpŪ•y­)-¤‰ā"JĪ:±ˆģ’=‡8ā^#o!×~2­Kˆ•Žłdó¼’9;{V}ö„ *.ĊAĒž“rŲ Ł%˜ePFyĶhÅ™U×+.yśŃĪ€ō=Q_!"» $Zޱ¼€‚:ņj€’āx–0Ŗ>`9Ēzā/·ļgWn@h¹øtņ‡*;ā­AŹkmo_J,½ó:°Ś}³šėōA|SD§œōė@ŗČĄFįA5ecX°_kރ)īrzהł(±čĘŃŅ‹ ¤6<œŒS›·Ž6% ļŚ·8ģćPzzL †ōJÄM }qõŖsȖ "` ’ €äoє¢néĄä×6tŁbø7ŽƒŠėģ4÷TT€sĶXøŅ„R ‰VLcÆ„fŻŪ‚ŁIČ=ō¬åšXɉ­ ś3ʶGåYē[¾ŠÕ RĻÖµ }gćMbQ”0ĢSv1Žć^³¬e± ųRFO<АX椾Ӧ’@—޼ÕA‰qåćgLā¢Wč¬*тė‘H,n7)lVnL ™#·X †=k)$Ū.×nhębløŃ( ū‰x¬+² R7p Ņ,Ŷy÷ü"/qØ“ĪŖU›9Ē }+Ųü6Šhq"f0x«K”¤62üYÆYC+Kl¤{šń™|pćSK#ĒĪ0ŁäūV±Š=O×ÅŲXć›Ķ†Ē@*õͳʄ«|½Ę84Ū°Ļ*ńO„Vźw–1 |ø Ž xf±„Ka9·¶Gp¼\čŅ<#> ė;¬–Ņ1ć¾kÓt? Žéņ–½+)§½W=Ȕt=ÆĆšiŅĄ‘HY}:֜’-™*ŽOćA‘ĪŻéQj3,ĢĶƒŸ­Yk;˜ŃRŻžQśVu ŠŌßÓnn#HÄĢĢż:T:„¬³0 0¬™©-‰ū5¹$€óš”}|·%7ÖjŚl1©2.zVĶ“2³ĖqėļT¶pRu ÷3ŌÖĘ„l öÄ#‘éZ£7#Šø²Ÿo˜mĪ ĒJŠŁö°|ĖL‚KÓ!’„fŽ> ī©ö›Æ5". =Į«§ˆŠŽs¹Y†wv2EĮŲīnō›gµ 'ē#˜®;"¹•esĘ{VV:ģt–śR°ó!a‘Śŗ­$Āńøp3WŠNę~“|“c ¶ŽŒ®n {›Ž\lź;śV–!“Y‚Ż¢”,£§į]5ø±1į–2’J3•×-­.VH^03ĒäZφ#’Łāņ¶mĪŅ;֑‡sU;/%Å׆µ6·‰® ļ<†ö§źŽ0Ö¢XnōėųŒø<“‘ZĢŽ‡Ć<Ōµ=Æ®ĆĢPcē'Ö½‰%ŽdSŽLR’Љ3b Dćaēc­Q‹Ļ3•NGĒ5ع±U‡«°@»2ć“P>r¤–¢Whٰx”]"8œ3F žž•\¬\Å©e[`Č›“®ļJdw„r ³|Œ“Ī5 BėķķK †ÉłN?:īt«ēx“v§ĄHb¾øŗ}ææCųVėFbB$V…Eģī+ąŗ‚ŁˆV(OæZĮÖŽīād{XŁ“½R˜[¹ œW'sĢ[¦ t!äX†­7 ŒlSw.¬TēUķoZŲøžGb*\ E[ķN×kcR}°y¾³āø4Ę9mIĒ\`Óöfö7t/E«Ś”øUV€Aāøj2Aū³oŠæ"”«ä·S¬Ń³…ŲrMqš†½j­ī —=+š¤ķ©¤ē· ż¦nnɰēŽ•ÄŻX9¼}ĪEs¹źj‘ā^#±]2źe÷–9L cھųįą«;ÅŗŌmÄ’ė$^„øč ¦&Ļ’t‹æģ»÷‰ī<¤ äü§üā»Ė-mƔxĖ!čŹŲ"¦[Ģ_•ä„ĊgTbWwšÖ¤³JK¤hŅ0Å`gĪÉ,|A«CV‘Āg%3ø)śŌŸ+,’ŁÉ³Ŗp*Tlkr¾‡uĢ“’hÓŚ˜›8ɽoO:‰RV1Ķ*ņƒ9ė[S:RīzwĆ_ QÕVßž¬†'­}ē„j³\éŠß¢…„¦ņńC]°fSކ­¤³N©* „‡(H;~¢“ģ“Ėiw„r'c·¹Ė+oķžWŒ\Ā£v2Ēļ}+2=Aķ¤ÉŸOo­D„ŠI•Æļ–T,©Ņx WĖ<:ŚĻ™qihdR ž3P“:"|UÆxqŁ<Ł­„aH(ŲŸLה^ZĶg1€Ä„ˆ<ō¶.Ÿ?;ĄŪ¹lōĮķ_©³xŌ|U”‰,o’żįdmŠły8Č­e)\ĪOSļļ ­Å¼1Æ+:¶;J÷Ļ jÓZ¢·Ģ7rGjĘžšć.ē½x^öKLjłēsĶzCI &L±]}lŽ9ģeR²I'”čkˆń± é÷2Ą60™«‹>{Ö¼U$ņK‹¶ÅŽĪ: ąīõ+U¶™cqYŌz1¦|ŁāĒ“æŗ1FXœĘø[Ÿ źM:Y )u$•, gšćw:cf…”ÜZݬ­nąįq·zÄbŁ£Clœ¬3ŌūTØ“6ޖĉ‘W¦īEjŲĖåą\*=;UóvE¶Ńl%•īć>T¬{µhé©°`€sŲSF%ų§[FŽ7 cŽEhI Į×dņzÖ>fLQlņ¤ĮS ƒs}+īĪ!8ŠœgRšĖQiNČyWĻQ4ę²–BɅ,"²4ę5Z8Ä&ałĒ5Ķ]j.]£I62¾1@ījiņE&p­Yh¬Ņeņ¤b¤ćńŸ„t$L¤eΈóö1#ų±Å<ł–Š…ĮēĘAō$žA,K小˜\ÜR•¼2ÆīyĒ¢ķ­ˆ4ƒVwŌm͹rŃē”ź+ĖuYItn"Ż ÅĆo ֕ßRīŠkg-„Ź£°h‰#'”­ūEÓļākYV2Ą­EČvčaź>{{šÉ5¬ökĮŲsƒģĀŗx"ޣ㓷’Õq—qr2Ā8{WŻ$ŖˆÜ`ćŸJ”|æiA ģÅhAÆ ¢–L*ݵw«¬ń2G“MUag„*ƒÆ,8ÅsZ½•¬Æöˆf]ĶŌ/Ö/±“v2Z1kHŹģ3š– ųēŽA9Q ކ°š(ι“L– 5É æ éļš[h,ąEŒ0Ļ £+&w~Ń!¼Ęy0§p qš·ā8Ł£:Ę Æ]‡·½kv2¹įüņo˜4Mō sŠĢ³Ō­Ä{ٲøćØ5h|ŻJ—i†äŹ®23ósj¹o-¼čĮ‘ĄčMlŠZŸ’Łlibwebsockets.org-logo.svg000066400000000000000000001403321357643561300404210ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin lws-common.js000066400000000000000000000063551357643561300357530ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin/* * This section around grayOut came from here: * http://www.codingforums.com/archive/index.php/t-151720.html * Assumed public domain * * Init like this in your main html script, this also reapplies the gray * * lws_gray_out(true,{'zindex':'499'}); * * To remove the gray * * lws_gray_out(false); * */ function gsize(ptype) { var h = document.compatMode === "CSS1Compat" && !window.opera ? document.documentElement.clientHeight : document.body.clientHeight; var w = document.compatMode === "CSS1Compat" && !window.opera ? document.documentElement.clientWidth : document.body.clientWidth; var pageWidth, pageHeight, t; if (document.body && (document.body.scrollWidth || document.body.scrollHeight)) { t = document.body.scrollWidth; pageWidth = (w > t) ? ("" + w + "px") : ("" + (t) + "px"); t = document.body.scrollHeight; pageHeight = (h > t) ? ("" + h + "px") : ("" + (t) + "px"); } else if (document.body.offsetWidth) { t = document.body.offsetWidth; pageWidth = (w > t) ? ("" + w + "px") : ("" + (t) + "px"); t = document.body.offsetHeight; pageHeight =(h > t) ? ("" + h + "px") : ("" + (t) + "px"); } else { pageWidth = "100%"; pageHeight = "100%"; } return (ptype === 1) ? pageWidth : pageHeight; } function addEvent( obj, type, fn ) { if ( obj.attachEvent ) { obj["e" + type + fn] = fn; obj[type+fn] = function() { obj["e" + type + fn]( window.event );}; obj.attachEvent("on" + type, obj[type + fn]); } else obj.addEventListener(type, fn, false); } function removeEvent( obj, type, fn ) { if ( obj.detachEvent ) { obj.detachEvent("on" + type, obj[type + fn]); obj[type + fn] = null; } else obj.removeEventListener(type, fn, false); } function lws_gray_out(vis, _options) { var options = _options || {}; var zindex = options.zindex || 50; var opacity = options.opacity || 70; var opaque = (opacity / 100); var bgcolor = options.bgcolor || "#000000"; var dark = document.getElementById("darkenScreenObject"); if (!dark) { var tbody = document.getElementsByTagName("body")[0]; var tnode = document.createElement("div"); tnode.style.position = "absolute"; tnode.style.top = "0px"; tnode.style.left = "0px"; tnode.style.overflow = "hidden"; tnode.style.display ="none"; tnode.id = "darkenScreenObject"; tbody.appendChild(tnode); dark = document.getElementById("darkenScreenObject"); } if (vis) { dark.style.opacity = opaque; dark.style.MozOpacity = opaque; // dark.style.filter ='alpha(opacity='+opacity+')'; dark.style.zIndex = zindex; dark.style.backgroundColor = bgcolor; dark.style.width = gsize(1); dark.style.height = gsize(0); dark.style.display = "block"; addEvent(window, "resize", function() { dark.style.height = gsize(0); dark.style.width = gsize(1); } ); } else { dark.style.display = "none"; removeEvent(window, "resize", function() { dark.style.height = gsize(0); dark.style.width = gsize(1); } ); } } /* * end of grayOut related stuff */ function new_ws(urlpath, protocol) { if (typeof MozWebSocket != "undefined") return new MozWebSocket(urlpath, protocol); return new WebSocket(urlpath, protocol); } function lws_san(s) { if (s.search("<") !== -1) return "invalid string"; return s; } strict-csp.svg000066400000000000000000000302361357643561300361310ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin test.css000066400000000000000000000102321357643561300350000ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin span.title { font-size:18pt; font-family: Arial; font-weight:normal; text-align:center; color:#000000; } span.mount { font-size:10pt; font-family: Arial; font-weight:normal; text-align:center; color:#000000; } span.mountname { font-size:14pt; font-family: Arial; font-weight:bold; text-align:center; color:#404010; } span.n { font-size:12pt; font-family: Arial; font-weight:normal; text-align:center; color:#808020; } span.v { font-size:12pt; font-family: Arial; font-weight:bold; text-align:center; color:#202020; } span.m1 { font-size:12pt; font-family: Arial; font-weight:bold; text-align:center; color:#202020; } span.m2 { font-size:12pt; font-family: Arial; font-weight:normal; text-align:center; color:#202020; } .browser { font-size:12pt; font-family: Arial; font-weight:normal; text-align:center; color:#ffff00; vertical-align:middle; text-align:center; background:#d0b070; padding:12px; -webkit-border-radius:10px; border-radius:10px;} .group2 { vertical-align:middle; text-align:center; background:#f0f0e0; padding:12px; -webkit-border-radius:10px; border-radius:10px; } .explain { vertical-align:middle; text-align:center; background:#f0f0c0; padding:12px; -webkit-border-radius:10px; border-radius:10px; color:#404000; padding:3px; } td.wsstatus { vertical-align:middle; width:200px; height:50px; text-align:center; background:#f0f0c0; padding:6px; -webkit-border-radius:8px; border-radius:8px; color:#404000; } .tdform { vertical-align:middle; width:200px; height:50px; text-align:center; background:#f0f0d0; padding:6px; -webkit-border-radius:8px; margin:10px; border-radius:8px; border: 1px solid black; border-collapse: collapse;font-size:18pt; font-family: Arial; font-weight:normal; text-align:center; color:#000000; color:#404000; } td.l { vertical-align:middle; text-align:center; background:#d0d0b0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.bigger { font-size:120%; } div.bgw { background:white } div.conninfo { border: solid 2px #e0d040; padding: 4px; width: 500px; height:350px; overflow: auto; } span.f12 { font-size:12pt } .content { vertical-align:top; text-align:center; background:#fffff0; padding:12px; -webkit-border-radius:10px; border-radius:10px; } .canvas { vertical-align:top; text-align:center; background:#efefd0; padding:12px; -webkit-border-radius:10px; border-radius:10px; } .tabs { position: relative; min-height: 750px; /* This part sucks */ clear: both; margin: 25px 0; } .tab { float: left; } .tab label { background: #eee; padding: 10px; border: 1px solid #ccc; margin-left: -1px; position: relative; left: 1px; } .tab [type=radio] { display: none; } .content { position: absolute; top: 28px; left: 0; background: white; right: 0; bottom: 0; padding: 20px; border: 1px solid #ccc; } [type=radio]:checked ~ label { background: white; border-bottom: 1px solid white; z-index: 2; } [type=radio]:checked ~ label ~ .content { z-index: 1; } td.wsstatus { vertical-align:middle; width:200px; height:50px; text-align:center; background:#f0f0c0; padding:6px; -webkit-border-radius:8px; border-radius:8px; color:#404000; } td.l { vertical-align:middle; text-align:center; background:#d0d0b0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.dl { vertical-align:middle; text-align:center; background:#c0c0c0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.c { vertical-align:middle; text-align:center; background:#c0c0a0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.c0 { vertical-align:middle; text-align:center; background:#b0b090; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.dc0 { vertical-align:middle; text-align:center; background:#a0a0a0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.c1 { vertical-align:middle; text-align:center; background:#c0c0c0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.t { vertical-align:middle; text-align:center; background:#e0e0c0; padding:3px; -webkit-border-radius:3px; border-radius:3px; }test.html000066400000000000000000000161211357643561300351570ustar00rootroot00000000000000libwebsockets-3.2.1/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin Minimal Websocket test app